[llvm-commits] [zorg] r156010 [1/3] - in /zorg/trunk: ./ lnt/ lnt/db/ lnt/docs/ lnt/docs/_templates/ lnt/docs/modules/ lnt/examples/ lnt/lnt/ lnt/lnt/db/ lnt/lnt/external/ lnt/lnt/external/stats/ lnt/lnt/formats/ lnt/lnt/lnttool/ lnt/lnt/server/ lnt/lnt/server/db/ lnt/lnt/server/reporting/ lnt/lnt/server/ui/ lnt/lnt/server/ui/static/ lnt/lnt/server/ui/static/flot/ lnt/lnt/server/ui/static/jquery/1.5/ lnt/lnt/server/ui/templates/ lnt/lnt/testing/ lnt/lnt/testing/util/ lnt/lnt/tests/ lnt/lnt/util/ lnt/tests/ lnt/tests/Fo...

Daniel Dunbar daniel at zuster.org
Wed May 2 12:48:33 PDT 2012


Author: ddunbar
Date: Wed May  2 14:48:32 2012
New Revision: 156010

URL: http://llvm.org/viewvc/llvm-project?rev=156010&view=rev
Log:
Kill off lnt/ subdir, which has moved to its own top-level (ok, semi top-level) repository.

Removed:
    zorg/trunk/lnt/CHANGELOG.txt
    zorg/trunk/lnt/README.txt
    zorg/trunk/lnt/db/CreateTables.sql
    zorg/trunk/lnt/db/UpdateTables.sql
    zorg/trunk/lnt/db/sample-input-2.plist
    zorg/trunk/lnt/db/sample-input.plist
    zorg/trunk/lnt/db/sqlite-to-mysql.sh
    zorg/trunk/lnt/docs/Makefile
    zorg/trunk/lnt/docs/README.txt
    zorg/trunk/lnt/docs/_templates/index.html
    zorg/trunk/lnt/docs/_templates/indexsidebar.html
    zorg/trunk/lnt/docs/_templates/layout.html
    zorg/trunk/lnt/docs/changes.rst
    zorg/trunk/lnt/docs/conf.py
    zorg/trunk/lnt/docs/contents.rst
    zorg/trunk/lnt/docs/intro.rst
    zorg/trunk/lnt/docs/make.bat
    zorg/trunk/lnt/docs/modules/testing.rst
    zorg/trunk/lnt/docs/quickstart.rst
    zorg/trunk/lnt/docs/tests.rst
    zorg/trunk/lnt/docs/todo.rst
    zorg/trunk/lnt/docs/tools.rst
    zorg/trunk/lnt/examples/functions.py
    zorg/trunk/lnt/lnt/__init__.py
    zorg/trunk/lnt/lnt/db/__init__.py
    zorg/trunk/lnt/lnt/db/perfdb.py
    zorg/trunk/lnt/lnt/db/perfdbsummary.py
    zorg/trunk/lnt/lnt/db/runinfo.py
    zorg/trunk/lnt/lnt/external/__init__.py
    zorg/trunk/lnt/lnt/external/stats/README.txt
    zorg/trunk/lnt/lnt/external/stats/__init__.py
    zorg/trunk/lnt/lnt/external/stats/pstat.py
    zorg/trunk/lnt/lnt/external/stats/stats.py
    zorg/trunk/lnt/lnt/formats/AppleOpenSSLReader.py
    zorg/trunk/lnt/lnt/formats/JSONFormat.py
    zorg/trunk/lnt/lnt/formats/NightlytestReader.py
    zorg/trunk/lnt/lnt/formats/PlistFormat.py
    zorg/trunk/lnt/lnt/formats/__init__.py
    zorg/trunk/lnt/lnt/lnttool/__init__.py
    zorg/trunk/lnt/lnt/lnttool/convert.py
    zorg/trunk/lnt/lnt/lnttool/create.py
    zorg/trunk/lnt/lnt/lnttool/import_data.py
    zorg/trunk/lnt/lnt/lnttool/main.py
    zorg/trunk/lnt/lnt/lnttool/report.py
    zorg/trunk/lnt/lnt/lnttool/updatedb.py
    zorg/trunk/lnt/lnt/server/__init__.py
    zorg/trunk/lnt/lnt/server/config.py
    zorg/trunk/lnt/lnt/server/db/__init__.py
    zorg/trunk/lnt/lnt/server/db/testsuite.py
    zorg/trunk/lnt/lnt/server/db/testsuitedb.py
    zorg/trunk/lnt/lnt/server/db/testsuitetypes.py
    zorg/trunk/lnt/lnt/server/db/v4db.py
    zorg/trunk/lnt/lnt/server/reporting/__init__.py
    zorg/trunk/lnt/lnt/server/reporting/analysis.py
    zorg/trunk/lnt/lnt/server/reporting/runs.py
    zorg/trunk/lnt/lnt/server/ui/__init__.py
    zorg/trunk/lnt/lnt/server/ui/app.py
    zorg/trunk/lnt/lnt/server/ui/filters.py
    zorg/trunk/lnt/lnt/server/ui/globals.py
    zorg/trunk/lnt/lnt/server/ui/graphutil.py
    zorg/trunk/lnt/lnt/server/ui/static/View2D.js
    zorg/trunk/lnt/lnt/server/ui/static/View2DTest.html
    zorg/trunk/lnt/lnt/server/ui/static/favicon.ico
    zorg/trunk/lnt/lnt/server/ui/static/flot/API.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/FAQ.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/LICENSE.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/Makefile
    zorg/trunk/lnt/lnt/server/ui/static/flot/NEWS.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/PLUGINS.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/README.txt
    zorg/trunk/lnt/lnt/server/ui/static/flot/excanvas.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/excanvas.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.colorhelpers.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.colorhelpers.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.crosshair.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.crosshair.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.fillbetween.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.fillbetween.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.image.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.image.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.navigate.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.navigate.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.pie.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.pie.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.resize.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.resize.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.selection.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.selection.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.stack.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.stack.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.symbol.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.symbol.min.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.threshold.js
    zorg/trunk/lnt/lnt/server/ui/static/flot/jquery.flot.threshold.min.js
    zorg/trunk/lnt/lnt/server/ui/static/jquery/1.5/LICENSE.txt
    zorg/trunk/lnt/lnt/server/ui/static/jquery/1.5/jquery.js
    zorg/trunk/lnt/lnt/server/ui/static/jquery/1.5/jquery.min.js
    zorg/trunk/lnt/lnt/server/ui/static/order_aggregate_ui.css
    zorg/trunk/lnt/lnt/server/ui/static/order_aggregate_ui.js
    zorg/trunk/lnt/lnt/server/ui/static/popup.js
    zorg/trunk/lnt/lnt/server/ui/static/sorttable.js
    zorg/trunk/lnt/lnt/server/ui/static/style.css
    zorg/trunk/lnt/lnt/server/ui/templates/browse.html
    zorg/trunk/lnt/lnt/server/ui/templates/error.html
    zorg/trunk/lnt/lnt/server/ui/templates/index.html
    zorg/trunk/lnt/lnt/server/ui/templates/layout.html
    zorg/trunk/lnt/lnt/server/ui/templates/machine.html
    zorg/trunk/lnt/lnt/server/ui/templates/run.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_graph.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_machine.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_order_aggregate_report.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_overview.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_run.html
    zorg/trunk/lnt/lnt/server/ui/templates/simple_utils.html
    zorg/trunk/lnt/lnt/server/ui/templates/submit_run.html
    zorg/trunk/lnt/lnt/server/ui/templates/test.html
    zorg/trunk/lnt/lnt/server/ui/templates/utils.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_all_orders.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_graph.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_order.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_overview.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_run.html
    zorg/trunk/lnt/lnt/server/ui/templates/v4_utils.html
    zorg/trunk/lnt/lnt/server/ui/util.py
    zorg/trunk/lnt/lnt/server/ui/views.py
    zorg/trunk/lnt/lnt/testing/__init__.py
    zorg/trunk/lnt/lnt/testing/util/__init__.py
    zorg/trunk/lnt/lnt/testing/util/commands.py
    zorg/trunk/lnt/lnt/testing/util/compilers.py
    zorg/trunk/lnt/lnt/testing/util/machineinfo.py
    zorg/trunk/lnt/lnt/testing/util/misc.py
    zorg/trunk/lnt/lnt/testing/util/rcs.py
    zorg/trunk/lnt/lnt/testing/util/valgrind.py
    zorg/trunk/lnt/lnt/tests/__init__.py
    zorg/trunk/lnt/lnt/tests/builtintest.py
    zorg/trunk/lnt/lnt/tests/compile.py
    zorg/trunk/lnt/lnt/tests/nt.py
    zorg/trunk/lnt/lnt/util/ImportData.py
    zorg/trunk/lnt/lnt/util/NTAuxSubmit
    zorg/trunk/lnt/lnt/util/NTEmailReport.py
    zorg/trunk/lnt/lnt/util/NTUtil.py
    zorg/trunk/lnt/lnt/util/ServerUtil.py
    zorg/trunk/lnt/lnt/util/__init__.py
    zorg/trunk/lnt/lnt/util/stats.py
    zorg/trunk/lnt/lnt/util/wsgi_restart.py
    zorg/trunk/lnt/setup.py
    zorg/trunk/lnt/tests/Formats/Inputs/test.json
    zorg/trunk/lnt/tests/Formats/Inputs/test.nightlytest
    zorg/trunk/lnt/tests/Formats/Inputs/test.plist
    zorg/trunk/lnt/tests/Formats/json.py
    zorg/trunk/lnt/tests/Formats/nightlytest.py
    zorg/trunk/lnt/tests/Formats/plist.py
    zorg/trunk/lnt/tests/__init__.py
    zorg/trunk/lnt/tests/lit.cfg
    zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py
    zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py
    zorg/trunk/lnt/tests/server/db/ImportV4TestSuiteInstance.py
    zorg/trunk/lnt/tests/server/db/Inputs/sample-a-small.plist
    zorg/trunk/lnt/tests/server/db/Inputs/sample-b-small.plist
    zorg/trunk/lnt/tests/testing/CalltreeDataLoading.py
    zorg/trunk/lnt/tests/testing/Inputs/test-input-01.out
Modified:
    zorg/trunk/LICENSE.TXT
    zorg/trunk/README.txt

Modified: zorg/trunk/LICENSE.TXT
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/LICENSE.TXT?rev=156010&r1=156009&r2=156010&view=diff
==============================================================================
--- zorg/trunk/LICENSE.TXT (original)
+++ zorg/trunk/LICENSE.TXT Wed May  2 14:48:32 2012
@@ -61,9 +61,5 @@
 
 Program             Directory
 -------             ---------
-GTestCommand        zorg/buildbot/commands/GTestCommand.py
-sorttable.js        zorg/lnt/viewer/resources/sorttable.js
-External Stats      zorg/lnt/external/stats/
+GTestCommand        buildbot/commands/GTestCommand.py
 jQuery              llvmlab/llvmlab/ui/static/jquery/1.5
-                    lnt/lnt/server/ui/static/jquery/1.5
-Flot                lnt/lnt/server/ui/static/flot

Modified: zorg/trunk/README.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/README.txt?rev=156010&r1=156009&r2=156010&view=diff
==============================================================================
--- zorg/trunk/README.txt (original)
+++ zorg/trunk/README.txt Wed May  2 14:48:32 2012
@@ -1,26 +1,18 @@
 Zorg - LLVM Testing Infrastructure
 ==================================
 
-This directory and its subdirectories contain Zorg, a testing infrastructure for
-LLVM.
+This directory and its subdirectories contain Zorg, the testing infrastructure
+for LLVM.
 
 LLVM is open source software. You may freely distribute it under the terms of
 the license agreement found in LICENSE.txt.
 
 Zorg consists of several pieces:
- 1. A general database utilities for storing test results, with
-    accompanying utilities.
+ 1. Buildbot configurations for LLVM.
 
- 2. A web app for submitting and querying test results.
-
- 3. A 'nightlytest' infrastructure built on top of 1 & 2.
-
- 4. Buildbot configurations for LLVM.
-
- 5. Other testing utility scripts.
+ 2. Other testing utility scripts.
 
 Zorg is primarily implemented in Python, and has the following layout:
  $ROOT/buildbot/ - Buildbot configurations.
  $ROOT/zorg/ - The root zorg Python module.
  $ROOT/zorg/buildbot/ - Reusable components for buildbot configurations.
- $ROOT/lnt/ - The LLVM "nightly test" infrastructure.

Removed: zorg/trunk/lnt/CHANGELOG.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/CHANGELOG.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/CHANGELOG.txt (original)
+++ zorg/trunk/lnt/CHANGELOG.txt (removed)
@@ -1,14 +0,0 @@
-0.4.0
-=====
-
-* Major redesign of database schema, primarily for performance reasons.
-
-  * New design allows for definition of independent "test suites" which define
-    the exact kinds of test data that are stored in the database. This greatly
-    increased LNT's utility for testing things other than just the LLVM
-    test-suite.
-
-0.3.0
-=====
-
-* Initial release.

Removed: zorg/trunk/lnt/README.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/README.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/README.txt (original)
+++ zorg/trunk/lnt/README.txt (removed)
@@ -1,20 +0,0 @@
-LLVM "Nightly Test" Infrastructure
-==================================
-
-This directory and its subdirectories contain the LLVM nightly test
-infrastructure. This is technically version "3.0" of the LLVM nightly test
-architecture.
-
-The infrastructure has the following layout:
-
- $ROOT/lnt - Top-level Python 'lnt' module
-
- $ROOT/db - Database schema, utilities, and examples of the LNT plist format.
-
- $ROOT/docs - Sphinx documentation for LNT.
-
- $ROOT/tests - Tests for the infrastructure; they currently assume they are
-                  running on a system with a live instance available at
-                  'http://localhost/zorg/'.
-
-For more information, see the web documentation, or docs/.

Removed: zorg/trunk/lnt/db/CreateTables.sql
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/db/CreateTables.sql?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/db/CreateTables.sql (original)
+++ zorg/trunk/lnt/db/CreateTables.sql (removed)
@@ -1,80 +0,0 @@
--- ===- CreateTables.sql - Create SQL Performance DB Tables -----------------===
---
---                     The LLVM Compiler Infrastructure
---
--- This file is distributed under the University of Illinois Open Source
--- License. See LICENSE.TXT for details.
---
--- ===-----------------------------------------------------------------------===
-
--- Machine Table
--- Main machine list.
-CREATE TABLE Machine
-       (ID              INTEGER PRIMARY KEY,
-        Name            VARCHAR(512),
-        Number          INTEGER);
-
-CREATE INDEX [Machine_IDX1] ON Machine(ID);
-CREATE INDEX [Machine_IDX2] ON Machine(Name);
-
--- Machine Info Table
--- Arbitrary information associated with a machine.
-CREATE TABLE MachineInfo
-       (ID             INTEGER PRIMARY KEY,
-        Machine        INTEGER,
-        `Key`          TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Machine) REFERENCES Machine(ID));
-
--- Run Table
--- A specific run of a test on a machine.
-CREATE TABLE Run
-       (ID              INTEGER PRIMARY KEY,
-        MachineID       INTEGER,
-        StartTime       DATETIME,
-        EndTime         DATETIME,
-        FOREIGN KEY(MachineID) REFERENCES Machine(ID));
-
-CREATE INDEX [Run_IDX1] ON Run(ID);
-
--- Run Info Table
--- Arbitrary information about a run.
-CREATE TABLE RunInfo
-       (ID             INTEGER PRIMARY KEY,
-        Run            INTEGER,
-        `Key`          TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Run) REFERENCES Run(ID));
-
--- Test Table
--- Tests are made up of several samples.
-CREATE TABLE Test
-       (ID              INTEGER PRIMARY KEY,
-        Name            VARCHAR(512),
-        Number          INTEGER);
-
-CREATE INDEX [Test_IDX1] ON Test(ID);
-CREATE INDEX [Test_IDX2] ON Test(Name);
-
--- Run Info Table
--- Arbitrary information about a run.
-CREATE TABLE TestInfo
-       (ID             INTEGER PRIMARY KEY,
-        Test           INTEGER,
-        `Key`          TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Test) REFERENCES Test(ID));
-
--- Sample Table
--- One data point for a particular test.
-CREATE TABLE Sample
-       (ID              INTEGER PRIMARY KEY,
-        RunID           INTEGER,
-        TestID          INTEGER,
-        Value           REAL,
-        FOREIGN KEY(RunID) REFERENCES Run(ID),
-        FOREIGN KEY(TestID) REFERENCES Test(ID));
-
-CREATE INDEX [Sample_IDX1] ON Sample(RunID);
-CREATE INDEX [Sample_IDX2] ON Sample(TestID);
-CREATE INDEX [Sample_IDX3] ON Sample(TestID, RunID);

Removed: zorg/trunk/lnt/db/UpdateTables.sql
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/db/UpdateTables.sql?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/db/UpdateTables.sql (original)
+++ zorg/trunk/lnt/db/UpdateTables.sql (removed)
@@ -1,53 +0,0 @@
-PRAGMA default_cache_size = 2000000;
-
-ALTER TABLE MachineInfo RENAME TO MachineInfoOld;
-CREATE TABLE MachineInfo
-       (ID             INTEGER PRIMARY KEY,
-        Machine        INTEGER,
-        Key            TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Machine) REFERENCES Machine(ID));
-INSERT INTO MachineInfo (Machine,Key,Value)
-  SELECT Machine,Key,Value FROM MachineInfoOld;
-DROP TABLE MachineInfoOld;
-
-ALTER TABLE RunInfo RENAME TO RunInfoOld;
-CREATE TABLE RunInfo
-       (ID             INTEGER PRIMARY KEY,
-        Run            INTEGER,
-        Key            TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Run) REFERENCES Run(ID));
-INSERT INTO RunInfo (Run,Key,Value)
-  SELECT Run,Key,Value FROM RunInfoOld;
-DROP TABLE RunInfoOld;
-
-ALTER TABLE TestInfo RENAME TO TestInfoOld;
-CREATE TABLE TestInfo
-       (ID             INTEGER PRIMARY KEY,
-        Test           INTEGER,
-        Key            TEXT,
-        Value          TEXT,
-        FOREIGN KEY(Test) REFERENCES Test(ID));
-INSERT INTO TestInfo (Test,Key,Value)
-  SELECT Test,Key,Value FROM TestInfoOld;
-DROP TABLE TestInfoOld;
-
-ALTER TABLE Sample RENAME TO SampleOld;
-CREATE TABLE Sample
-       (ID              INTEGER PRIMARY KEY,
-        RunID           INTEGER,
-        TestID          INTEGER,
-        Key             TEXT,
-        Value           REAL,
-        FOREIGN KEY(RunID) REFERENCES Run(ID),
-        FOREIGN KEY(TestID) REFERENCES Test(ID));
-DROP INDEX [Sample_IDX1];
-DROP INDEX [Sample_IDX2];
-BEGIN TRANSACTION;
-INSERT INTO Sample (RunID,TestID,Key,Value)
-  SELECT RunID,TestID,Key,Value FROM SampleOld;
-COMMIT TRANSACTION;
-BEGIN TRANSACTION; CREATE INDEX [Sample_IDX1] ON Sample(RunID); COMMIT TRANSACTION;
-BEGIN TRANSACTION; CREATE INDEX [Sample_IDX2] ON Sample(TestID); COMMIT TRANSACTION;
-DROP TABLE SampleOld;

Removed: zorg/trunk/lnt/db/sample-input-2.plist
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/db/sample-input-2.plist?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/db/sample-input-2.plist (original)
+++ zorg/trunk/lnt/db/sample-input-2.plist (removed)
@@ -1,18394 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>Group Info</key>
-	<array>
-	</array>
-	<key>Machine</key>
-	<dict>
-		<key>Info</key>
-		<dict>
-		</dict>
-		<key>Name</key>
-		<string>dgohman.apple.com</string>
-	</dict>
-	<key>Run</key>
-	<dict>
-		<key>End Time</key>
-		<string>2009-04-02T08:59:38Z</string>
-		<key>Info</key>
-		<dict>
-			<key>llvm-revision</key>
-			<string></string>
-			<key>tag</key>
-			<string>apple_openssl</string>
-		</dict>
-		<key>Start Time</key>
-		<string>2009-04-02T01:14:57Z</string>
-	</dict>
-	<key>Tests</key>
-	<array>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8044285.2800000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>21080200.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>40729729.789999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>54110895.009999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59754545.039999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4170517.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4827067.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5119631.3899999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5167611.2400000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5186518.8099999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59150952.280000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>64680366.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>67082764.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>67966039.510000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>67334020.400000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28020336.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>29916122.949999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30147281.02</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30833107.399999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30841060.379999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9577127.7599999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28929716.120000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>66520320.630000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98637091.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>114452885.15000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5532037.7199999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22059960.440000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42098054.619999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>66250595.960000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79623635.879999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26677953.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>29546590.690000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30812519.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>31087870.629999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30711518.699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22699246.91</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>23784652.629999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24205952.629999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24314819.789999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24065336.510000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13407864.07</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13804663.59</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13918361.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13950373.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13953139.74</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>23403377.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24789633.149999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25150798.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25230036.149999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25181270.59</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>38760629.859999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44207019.719999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49245708.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49744184.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49370944.659999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>753029.39000000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>1568589.6000000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2145430.3900000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2360630.4700000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2436763.3500000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46863003.829999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>50204119.340000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51749529.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52326429.560000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51991947.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35355604.689999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>43418556.049999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44453914.649999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44901945.539999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44605994.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13348895.98</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>43134045.469999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>109108225.81</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>176982543.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>216028832.88999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10133211.560000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10372472.27</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10437209.58</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10452740.890000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10444167.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10675128.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30709421.859999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>67845751.930000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98687486.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>113937776.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9526606.0500000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28643958.870000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>66092137.649999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98165686.840000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>114442916.92</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73258744.129999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>75241466.340000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>75692022.790000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76692025.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76954645.140000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>43033290.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52679362.810000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>54952655.759999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>55826911.490000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>55401385.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7368460.8399999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>18637123.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>34760961.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44852871.409999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49247797.979999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52824778.200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>56686682.149999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58490074.420000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59168473.439999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58694047.740000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22167212.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>23869826.219999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24179074.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24289139.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24201942.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19723701.91</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>55702095.509999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115918890.2</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>161066111.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>181710476.84</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8012860.5700000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8878556.4900000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9140157.1199999992</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9195992.2400000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9218932.2699999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>128603190.27</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>143408670.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145616545.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>144810604.46000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145747420.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>88884266.340000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94261245.659999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95900315.120000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>96226750.040000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>96339753.579999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24378172.100000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79967228.599999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>212239708.59999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>362063452.27999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>458431243.12</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>14630956.810000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58155570.049999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>106027252.37</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>157214161.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>185520913.69999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>161617434.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>176308413.19</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>180064776.13999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>180720598.94999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>180622521.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>67970165.760000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>71380330.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72093426.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>71810320.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>74101189.959999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27499642.350000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28301294.32</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28421633.370000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28514204.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28470535.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44962443.32</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46572969.049999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47105509.969999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47187667.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47256229.799999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115113916.43000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120042896.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121198389.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121300239.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120782665.73999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2208900.1000000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4605666.4500000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6323452.6699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6961157.1100000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7168142.9699999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103469359.84</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111095655.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112765463.15000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112410593.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112938832.45999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103336354.04000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107015098.13</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107848300.84999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108045638.73</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107719954.36</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30370913.199999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>106877662.01000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>306807268.10000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>581032710.76999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>789439723.32000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17618814.390000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17872652.18</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17955080.09</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17974510.93</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17981341.600000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24272183.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>75784872.120000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179396118.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>271506344.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>320536838.51999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26972111.350000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>84566403.349999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>220789212.40000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>368719375.74000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>459478988.00999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>238268630.15000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>263845833.46000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>271416605.08999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>273330478.39999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>274646346.19999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>130264650.39</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>136174264.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>137842018.71000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>138050468.97</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>137340600.84999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17286235.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42644076.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79384565.129999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101357738.84</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110621563.98</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115967280.64</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125299106.05</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>127119883.02</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>126399076.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>127177570.87</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>56731090.189999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58399779.479999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58732196.979999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58634661.560000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58946684.140000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19991204.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57353748.600000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>118528004.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>161988176.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>181845906.68000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8046527.7000000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9029230.5500000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9305721.2200000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9335480.2899999991</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9392347.4700000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>134594760.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>142271700.66999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145654882.59</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145178984.08000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145722457.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>88405392.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94692848.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95946552.489999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>96293166.209999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>96389962.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25654929.120000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>83903946.840000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>218953744.46000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>366591167.19999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>459392377.88</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>14496661.869999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57665209.979999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105164960.20999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>156972407.66999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>185701436.00999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>160228924.84999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>175952813.43000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179726398.81</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179744864.22</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>180561849.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>68552248.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72245913.489999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73533587.870000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73433849.569999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>74072414.340000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27812142.059999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28356189.059999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28458125.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28515711.73</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28522414.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>45277147.200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46679852.57</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47151665.770000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47235278.390000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47294614.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112893647.42</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>119574738.79000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121664420.69</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>122163191.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121917243.95</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2166515.6200000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4512386.3499999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6172920.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6791931.1200000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7008004.8200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105479178.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110806894.11</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112857720.34999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112626644.44</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112936403.11</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101889226.72</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107493561.88</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108612416.28</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108949975.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108505752.40000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30978571.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108494019.53</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>310541848.69999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>578626317.09000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>787731217.37</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17692905.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17880822.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17962138.370000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17872537.859999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17971918.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24899889.739999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>77843629.790000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>182581776.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>273401700.02999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>321116878.23000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27624873.879999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86448866.480000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>224165334.47</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>370973935.92000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>460122647.35000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>238075664.88999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>264174453.30000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>271848739.29000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>273627375.98000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>274725164.13999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>126058068.36</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>135933665.50999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>138886724.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>139506587.74000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>138948114.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17463002.66</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42887837.619999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79746260.129999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101929023.8</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110757460.39</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>117854552.01000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>123844422.36</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>126942441.42</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>126785955.03</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>127172025.13</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57179312.850000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58437907.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58739489.039999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58815498.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58788105.189999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19831707.370000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>56375123.659999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>118129074.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>162317954.53</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>182177691.91999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8514748.8100000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9450376.9800000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9728499.6799999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9781193.8200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9817500.7400000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>133146066.47</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>141428146.03</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>144180581.22999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>143631275.46000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>144348694.08000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89716579.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94042374.879999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95343590.950000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95552668.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95678306.150000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24698441.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>81069549.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>214277859.13999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>362718389.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>456415071.82999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>14364069.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57334392.380000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103582118.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>157410206.84</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>186420735.11000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>159438925.63999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>175199834.68000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179477777.65000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179855353.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179127386.41999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>69011695.310000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72335182.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73276054.219999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>71885097.829999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72653818.930000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27371143.27</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27695505.239999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27772335.98</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27802274.859999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27817407.890000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>45253450.130000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46469446.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46834213.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46689720.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>47436899.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112861820.29000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>119769613.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>122049848.36</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>122534701.65000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121899593.48999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2192517.6499999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4574555.2300000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6268616.3200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6908462.8300000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7117384.1900000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105366252.33</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110650811.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>112020228.19</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111548897.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111984097.23999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101927562.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107147575.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108876620.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>109303625.81</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108689852.48999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>30609317.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104288964.38</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>301773311.52999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>570363971.13</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>772567185.01999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17698693.879999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17946467.93</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17964192.23</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17964990.120000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>17970606.32</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24314509.129999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76367492.620000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>178795782.65000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>271814257.04000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>320547594.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27503584.780000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86723702.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>222019341.49000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>367230420.27999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>457173398.54000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>235808747.99000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>262705060.75999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>271417362.75999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>273598317.44</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>274610026.05000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>128013588.56999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>137103103.28</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>139480848.78</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>139909786.63</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>138780490.91</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>16983888.620000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42086066.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>78326042.890000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>100805218.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110010382.56</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>117618006.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>124268754.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125963854.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125537173.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>126073742.54000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57204084.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58811042.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58744642.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58662931.789999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58519610.149999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5863408.2000000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>14369297.300000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27200532.23</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35029375.700000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>38388797.009999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>4648119.5599999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5325310.71</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5616219.5700000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5726926.1900000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5748955.8300000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>63769266.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>71371258.219999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73222419.579999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>74298223.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>73883297.180000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25934938.440000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26842193.68</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27301709.66</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28599950.27</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>29201404.120000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8325717.4299999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>23225490.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>50141486.799999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>70089773.040000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79646537.769999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>6586886.6699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26287561.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>54048835.049999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89251930.540000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111501438.73</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20677108.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>21712191.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>21697216.23</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22197214.91</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22300038.960000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>23350459.440000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24546153.899999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>24459803.649999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25519996.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25879110.699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13594103.810000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13792077.67</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13817871.050000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>13914083.17</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>14050507.26</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25182089.07</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27836495.140000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27080592.18</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>28563087.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>29250238.969999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44350897.960000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>46426916.240000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51767039.539999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53683374.439999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>54064344.020000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>999440.37</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2092055.1100000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2863565.2200000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>3152129.1299999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>3251567.1800000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51193406.270000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>55610655.229999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>56782020.009999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57526479.200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57300441.729999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>41009721.789999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42688923.119999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>45613095.490000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>48621023.859999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>48960222.060000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12182235.91</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35998006.780000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>80093466.450000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>114951289.17</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>131983435.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12085735.060000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12493457.880000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12643077.199999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12628116.449999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>12620527.560000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8578172.9199999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22365187.120000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44544822.219999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59774444.219999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>66408855.140000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8042581.4299999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22910290.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49660155.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>69952603.840000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79445068.760000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76721919.349999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>81680075.760000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>82553001.599999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>84128985.290000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>84456648.379999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>48507948.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51099846.009999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>55703337.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60086302.159999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60584154.609999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7571833.6900000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>18228678.559999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>33132760.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>42046447.630000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>45839814.689999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57079288.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62332491.380000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>63864967.829999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>64770854.049999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>64482695.270000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>33863130.880000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>31840169.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>34782067.969999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35914992.560000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>36077460.57</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O0</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>22090504.66</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59828030.490000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125111431.45999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>171722349.44</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>192851977.75999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8988042.1099999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10055265.33</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10361936.66</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10439579.699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10463631.810000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>114380068.15000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121165650.40000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>123868069.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>124665502.51000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125172605.78</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>81361825.810000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>87895462.269999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89690759.319999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>90085833.569999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>90248038.299999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26692384.23</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>85649908.540000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>220280282.22</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>366108794.88</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>454137843.08999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>11033810.98</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>43869532.990000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72875462.719999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104755636.56999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120710546.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>132584642.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>146620316.56999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>149884099.97999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>150602178.86000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>150970420.80000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58821489.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>61684060.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62493549.210000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62643774.299999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62705684.130000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25704298.699999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26256781.649999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26485695.079999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26508821.719999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26449040.969999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>50403227.270000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52524130.869999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53016431.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53250682.710000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53138460.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>96256469.950000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103862128.69</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105501133.43000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105970979.79000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105654588.64</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2735646.3199999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5696841.0199999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7790776.0599999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8585570.3300000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8851042.2699999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89204342.280000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>92953942.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94456477.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94896230.269999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95260163.629999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>87238416.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>91802860.959999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93108153.140000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93427567.680000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93112566.870000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>34046721.909999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115167652.11</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>326327172.37</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>603021554.75999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>799408516.08000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19685287.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20000643.960000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19914061.559999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20051996.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20063554.280000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25993897.02</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76291828.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>176884625.13999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>263280203.19</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>308140078.31</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>32366564.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98869581.939999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>242531866.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>379648761.47000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>456358796.30000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>236682370.63</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>252707089.03</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>257092203.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>257002095.88</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>258535506.74000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>110033868.61</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>119377446.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121296745.76000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121965052.2</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121473152.59999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>15420088.51</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35519428.509999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>63645995.399999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79267259.230000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>85578079.260000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>99829918.260000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105821105.89</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107619122.47</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108109625.56999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108520525.98999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>57383212.090000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59736124.990000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60234255.119999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60395389.229999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60448627.759999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O2</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>21780437.620000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60275462.409999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125327006.59999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>171999777.34999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>192939031.97999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8951952.7300000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10002184.529999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10287325.98</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10373648.529999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10410435.73</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>113702507.55</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121189784.61</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>123858878.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>124946269.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>125086648.51000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>81126968.180000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86947260.150000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89323199.260000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>90087521.120000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>90218808.890000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>27773990.82</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>87916754.239999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>224282073.55000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>366902689.11000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>454642374.79000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>11027773.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44092906.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>72721969.769999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104815602.77</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120747290.27</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>132593415.01000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>145304208.88</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>149952048.21000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>151050392.97999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>151360978.91999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59205930.829999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>61640246.68</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62442358.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62611245.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62676060.380000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25769702.100000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26197147.18</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26472810.559999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26762916.510000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26433848.18</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>50655063.799999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52597930.649999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52996879.850000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53234064.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>53165391.869999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>97503770.290000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103866530.41</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105434823.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>106025295.87</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105651381.47</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2704553.1400000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5679186.1299999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7751520.0700000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8549110.3499999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8831151.5199999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89328527.400000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93245909.989999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>94615295.599999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95277237.310000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>95306073.129999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86833741.590000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>91775847.310000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93096517.5</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93436315.969999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>93113807.640000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>34592571.509999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115839755.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>327363886.38</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>601008271.15999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>801278968.38999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19676629.420000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20019150.850000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20040945.530000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20050129.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20056288.379999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26140410.620000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>76941128.790000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>178004277.08000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>263711963.94999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>308338582.88999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>32407629.010000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98378322.450000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>241023693.93000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>380055150.00999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>456912173.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>236856036.06999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>252886500.44</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>257284618.40000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>257215500.81</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>258698502.06</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>109098120.78</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>119524325.94</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121555236.76000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>122099829.68000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>121489778.38</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>15108646.970000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>35105073.710000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>63598466.619999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79045457.150000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>85199912.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>99821682.099999994</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>105910165.79000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>107733947.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108214819.51000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>108538047.62</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58033864.68</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59757054.579999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60242401.460000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60442209.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60457342.920000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>O3</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>21816777.289999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59194022.770000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>124502959.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>171565968.84999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>193049952.47</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rmd160.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8899657.4499999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>9969875.0800000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10275431.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10355287.039999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>10376884.23</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.mdc2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111860408.19</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>118842557.83</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120479884.01000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120948184.83</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>120782343.67</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>82003248.459999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>88079323.030000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89285851.280000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89265064.870000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89281416.329999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.blowfish cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26769597.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>85710108.430000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>218681618.69</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>364464932.72000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>455244450.26999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md5.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>11231048.800000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>44664626.340000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>74107602.950000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>106717643.18000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>122875358.15000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha512.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>131355994.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>144324550.87</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>148185471.28999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>149206272.81</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>149408741.31</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc5-32/12 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>58671686.82</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>61876561.909999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62566696.460000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62401068.189999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>62811880.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.cast cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25844518.66</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26578936.789999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26771700.260000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26757482.280000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>26362591.899999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc2 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>49899503.299999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>51776204.170000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52454970.310000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52399714.68</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>52649239.82</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>97317470.689999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>100686219.51000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101664591.23999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101887587.52</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>101503509.45</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.idea cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>2562404.1299999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>5380347.2000000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>7385573.6799999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8148995.5800000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>8404392.4900000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md2.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86834599.430000007</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>90763706.569999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>91540278.25</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>91733570.829999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>91638845.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>86232852.420000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>88883903.109999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89588800.650000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89784394.269999996</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>89400216.780000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>34377118.200000003</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>114223118.31999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>323615998.77999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>593795106.54999995</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>793628840.94000006</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.md4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>19837079.84</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20133043.879999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20171726.739999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20158860.34</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>20172390.16</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.des ede3.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>25845308.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>77990199.890000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>179173445.81999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>263457783.63</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>307191569.60000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha1.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>32707585.390000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98429120.209999993</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>242253207.31</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>379772124.87</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>456672346.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.hmac(md5).ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>233686958.00999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>249252626.59</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>253336991.78</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>254976999.02000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>258263836.03999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.rc4.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>111198945.13</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>115942207.37</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>117138301.22</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>117490280.56999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>116952585.64</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-128 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>15249765.43</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>36096882.119999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>63467444.75</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>79205924.670000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>85331911.230000004</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.sha256.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>98141001.870000005</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>103046297.22</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104133783.97</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104472549.20999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>104298634.90000001</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.aes-192 ige.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>0.0</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.camellia-256 cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59015111.420000002</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>16</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>59917366.32</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>64</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60551314.369999997</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>256</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60708996.359999999</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>1024</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-		<dict>
-			<key>Data</key>
-			<array>
-				<real>60734068.509999998</real>
-			</array>
-			<key>Info</key>
-			<dict>
-				<key>blockSize</key>
-				<integer>8192</integer>
-				<key>compiler</key>
-				<string>llvm-gcc</string>
-				<key>compiler_flags</key>
-				<string>Os</string>
-			</dict>
-			<key>Name</key>
-			<string>apple_openssl.seed cbc.ips</string>
-		</dict>
-	</array>
-</dict>
-</plist>

Removed: zorg/trunk/lnt/db/sample-input.plist
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/db/sample-input.plist?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/db/sample-input.plist (original)
+++ zorg/trunk/lnt/db/sample-input.plist (removed)
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>Machine</key>
-	<dict>
-		<key>Name</key>
-		<string></string>
-		<key>Info</key>
-		<dict>
-			<key>Memory</key>
-			<string>6G</string>
-			<key>Triple</key>
-			<string>i386-apple-darwin9</string>
-		</dict>
-	</dict>
-	<key>Run</key>
-	<dict>
-		<key>End Time</key>
-		<string>2009-04-02T08:59:38Z</string>
-		<key>Info</key>
-		<dict>
-			<key>llvm-revision</key>
-			<string>60300</string>
-			<key>tag</key>
-			<string>test-suite-name</string>
-		</dict>
-		<key>Start Time</key>
-		<string>2009-04-02T01:14:57Z</string>
-	</dict>
-	<key>Tests</key>
-	<array>
-		<dict>
-			<key>Name</key>
-			<string>test.name.in.dotted.notation</string>
-			<key>Info</key>
-			<dict>
-				<key>Compiler</key>
-				<string>gcc</string>
-				<key>Compiler Flags</key>
-				<string>-O2 -g</string>
-			</dict>
-			<key>Data</key>
-			<array>
-				<real>0.122</real>
-				<real>0.125</real>
-			</array>
-		</dict>
-	</array>
-</dict>
-</plist>

Removed: zorg/trunk/lnt/db/sqlite-to-mysql.sh
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/db/sqlite-to-mysql.sh?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/db/sqlite-to-mysql.sh (original)
+++ zorg/trunk/lnt/db/sqlite-to-mysql.sh (removed)
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-if [ $# != 2 ]; then
-    echo "Usage: $0 <sqlite3-database> <output file>"
-
-    echo "  Dumps the sqlite3 database to the output file "
-    echo "  in SQL syntax that MySQL can understand."
-
-    exit 1
-fi
-
-in=$1
-out=$2
-
-sqlite3 $in .dump |  \
-  sed -e 's#CREATE INDEX.*##g' \
-      -e 's#ANALYZE sqlite_master.*##g' \
-      -e 's#INSERT INTO "sqlite_stat1" VALUES.*##g' \
-      -e 's# Key    \([ ]*\)TEXT# `Key`\1TEXT#g' \
-      -e 's#BEGIN TRANSACTION#START TRANSACTION#g' \
-      -e 's#INSERT INTO "\(.*\)"#INSERT INTO \1#g' > $out

Removed: zorg/trunk/lnt/docs/Makefile
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/Makefile?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/Makefile (original)
+++ zorg/trunk/lnt/docs/Makefile (removed)
@@ -1,120 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp epub latex changes linkcheck doctest
-
-all:	html
-
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-
-clean:
-	-rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/LNT.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/LNT.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) _build/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/LNT"
-	@echo "# ln -s _build/devhelp $$HOME/.local/share/devhelp/LNT"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
-	      "run these through (pdf)latex."
-
-latexpdf: latex
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex
-	@echo "Running LaTeX files through pdflatex..."
-	make -C _build/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in _build/latex."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."

Removed: zorg/trunk/lnt/docs/README.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/README.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/README.txt (original)
+++ zorg/trunk/lnt/docs/README.txt (removed)
@@ -1,7 +0,0 @@
- LNT Documentation
-==================
-
-The LNT documentation is written using the Sphinx documentation generator. It is
-currently tested with Sphinx 1.0dev.
-
-We currently use the 'nature' theme and a Beaker inspired structure.

Removed: zorg/trunk/lnt/docs/_templates/index.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/_templates/index.html?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/_templates/index.html (original)
+++ zorg/trunk/lnt/docs/_templates/index.html (removed)
@@ -1,38 +0,0 @@
-{% extends "layout.html" %}
-{% set title = 'LNT' %}
-{% block body %}
-<h1>LNT - LLVM Performance Tracking Software</h1>
-
-<p>
-  LNT is LLVM's performance tracking software. This is the web page for the LNT
-  software itself, the current online version of the server is available
-  at <a href="http://llvm.org/perf/">http://llvm.org/perf/</a>.
-</p>
-
-<h2>Documentation</h2>
-<table class="contentstable" align="center" style="margin-left: 30px">
-  <tr>
-    <td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("contents") }}">
-          Contents</a><br/>
-        <span class="linkdescr">for a complete overview</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("search") }}">
-          Search page</a><br/>
-        <span class="linkdescr">search the documentation</span></p>
-    </td><td width="50%">
-      <p class="biglink"><a class="biglink" href="{{ pathto("genindex") }}">
-          General Index</a><br/>
-        <span class="linkdescr">all functions, classes, terms</span></p>
-      <p class="biglink"><a class="biglink" href="{{ pathto("modindex") }}">
-          Module Index</a><br/>
-        <span class="linkdescr">quick access to all documented modules</span></p>
-  </td></tr>
-</table>
-
-<h2>Source</h2>
-<p>LNT is available in the LLVM "zorg" SVN repository:
-  <tt>svn co
-    <a href="http://llvm.org/svn/llvm-project/zorg/trunk/lnt">
-      http://llvm.org/svn/llvm-project/zorg/trunk/lnt</a></tt>.</p>
-
-{% endblock %}

Removed: zorg/trunk/lnt/docs/_templates/indexsidebar.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/_templates/indexsidebar.html?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/_templates/indexsidebar.html (original)
+++ zorg/trunk/lnt/docs/_templates/indexsidebar.html (removed)
@@ -1,12 +0,0 @@
-<h3>Install</h3>
-<ul>
-  <li>Current release:<br>
-    <tt>easy_install lnt=={{ version }}</tt></li>
-  <li>Development release:<br>
-    <tt>easy_install lnt==dev</tt></li>
-</ul>
-
-<h3>Bugs</h3>
-
-<p>LNT bugs should be reported at the
-  LLVM <a href="http://llvm.org/bugs">Bugzilla</a>.</p>

Removed: zorg/trunk/lnt/docs/_templates/layout.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/_templates/layout.html?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/_templates/layout.html (original)
+++ zorg/trunk/lnt/docs/_templates/layout.html (removed)
@@ -1,13 +0,0 @@
-{% extends "!layout.html" %}
-
-{% block extrahead %}
-<style type="text/css">
-  table.right { float: right; margin-left: 20px; }
-  table.right td { border: 1px solid #ccc; }
-</style>
-{% endblock %}
-
-{% block rootrellink %}
-  <li><a href="{{ pathto('index') }}">LNT Home</a> | </li>
-  <li><a href="{{ pathto('contents') }}">Documentation</a>»</li>
-{% endblock %}

Removed: zorg/trunk/lnt/docs/changes.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/changes.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/changes.rst (original)
+++ zorg/trunk/lnt/docs/changes.rst (removed)
@@ -1,8 +0,0 @@
-:tocdepth: 2
-
-.. _changes:
-
-Changelog
-*********
-
-.. include:: ../CHANGELOG.txt

Removed: zorg/trunk/lnt/docs/conf.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/conf.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/conf.py (original)
+++ zorg/trunk/lnt/docs/conf.py (removed)
@@ -1,242 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# LNT documentation build configuration file, created by
-# sphinx-quickstart on Fri Dec 25 10:01:58 2009.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import datetime, sys, os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.append(os.path.abspath('..'))
-
-import lnt
-
-project = "LNT"
-project_module = lnt
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.coverage']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'contents'
-
-# General information about the project.
-copyright = u'%s, %s' % (datetime.datetime.now().year,
-                         project_module.__author__)
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = project_module.__version__
-# The full version, including alpha/beta/rc tags.
-release = project_module.__version__
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-today_fmt = '%Y-%m-%d'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-show_authors = True
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  Major themes that come with
-# Sphinx are currently 'default' and 'sphinxdoc'.
-html_theme = 'nature'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-#html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-html_last_updated_fmt = '%Y-%m-%d'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-html_sidebars = {'index': 'indexsidebar.html'}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-html_additional_pages = {'index': 'index.html'}
-
-# If false, no module index is generated.
-#html_use_modindex = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-html_show_sourcelink = False
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = ''
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = '%sdoc' % project
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('contents', '%s.tex' % project, u'%s Documentation' % project,
-   project_module.__author__, 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_use_modindex = True
-
-
-# -- Options for Epub output ---------------------------------------------------
-
-# Bibliographic Dublin Core info.
-#epub_title = ''
-#epub_author = ''
-#epub_publisher = ''
-#epub_copyright = ''
-
-# The language of the text. It defaults to the language option
-# or en if the language is not set.
-#epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-#epub_scheme = ''
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-#epub_identifier = ''
-
-# A unique identification for the text.
-#epub_uid = ''
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_pre_files = []
-
-# HTML files shat should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_post_files = []
-
-# A list of files that should not be packed into the epub file.
-#epub_exclude_files = []
-
-# The depth of the table of contents in toc.ncx.
-#epub_tocdepth = 3

Removed: zorg/trunk/lnt/docs/contents.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/contents.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/contents.rst (original)
+++ zorg/trunk/lnt/docs/contents.rst (removed)
@@ -1,35 +0,0 @@
-.. _contents:
-
-Contents
-========
-
-.. toctree::
-   :maxdepth: 2
-
-   intro
-
-   quickstart
-
-   tools
-
-   tests
-
-   changes
-
-   todo
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
-
-Module Listing
---------------
-
-.. toctree::
-   :maxdepth: 2
-
-   modules/testing

Removed: zorg/trunk/lnt/docs/intro.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/intro.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/intro.rst (original)
+++ zorg/trunk/lnt/docs/intro.rst (removed)
@@ -1,102 +0,0 @@
-.. _intro:
-
-Introduction
-============
-
-LNT is designed to be a generic infastrcture for performance testing. The LNT
-software itself consists of two main parts, a web application for accessing and
-visualizing performance data, and command line utilities to allow users to
-generate and submit test results to the server.
-
-If you are an LLVM developer who is mostly interested in just using LNT to run
-the test-suite against some compiler, then you should fast forward to the
-:ref:`quickstart` or to the information on :ref:`tests`.
-
-LNT uses a simple and extensible format for interchanging data between the test
-producers and the server; this allows the LNT server to receive and store data
-for a wide variety of applications.
-
-Both the LNT client and server are written in Python, however the test data
-itself can be passed in one of several formats, including property lists and
-JSON. This makes it easy to produce test results from almost any language.
-
-
-Installation
-------------
-
-If you are only interested in using LNT to run tests locally, see the
-:ref:`quickstart`.
-
-If you want to run an LNT server, you will need to perform the following
-additional steps:
-
- 2. Create a new LNT installation:
-
-      lnt create path/to/install-dir
-
-    This will create the LNT configuration file, the default database, and a
-    .wsgi wrapper to create the application. You can execute the generated app
-    directly to run with the builtin web server, or use 
-
-      lnt runserver path/to/install-dir
-
-    which provides additional command line options. Neither of these servers is
-    recommended for production use.
-
- 3. Edit the generated 'lnt.cfg' file if necessary, for example to:
-
-    a. Update the databases list.
-
-    b. Update the public URL the server is visible at.
-
-    c. Update the nt_emailer configuration.
-
- 4. Add the 'zorg.wsgi' app to your Apache configuration. You should set also
-    configure the WSGIDaemonProcess and WSGIProcessGroup variables if not
-    already done.
-
-    If running in a virtualenv you will need to configure that as well; see the
-    `modwsgi wiki <http://code.google.com/p/modwsgi/wiki/VirtualEnvironments>`_.
-
-
-Development
------------
-
-Developing LNT should be done under a virtualenv (most likely in 'develop'
-mode). Currently, the tests require:
-
- 1. 'lit', the LLVM test runner, is available.
-
- 2. If inside a virtualenv, the virtualenv will need to be activated because the
- tests want to run Python directly. This should be fixed to substitute in the
- Python that was used to run lit, so the venv doesn't have to be active.
-
-To run the tests, use, e.g.,
-
-  lit -sv $ROOT/lnt/tests
-
-or
-
-  lit -sv $ZORG_ROOT/test
-
-to run the zorg and LNT tests all at once. You can use
-
-  python setup.py test
-
-if you prefer 'unittest' style output (this still requires that 'lit' be
-installed).
-
-
-Architecture
-------------
-
-The LNT web app is currently implemented as a Flask WSGI web app, with Jinja2
-for the templating engine. My hope is to eventually move to a more AJAXy web
-interface.
-
-The database layer uses SQLAlchemy for its ORM, and is typically backed by
-SQLite, although I have tested on MySQL on the past, and supporting other
-databases should be trivial. My plan is to always support SQLite as this allows
-the possibility of developers easily running their own LNT installation for
-viewing nightly test results, and to run with whatever DB makes the most sense
-on the server.

Removed: zorg/trunk/lnt/docs/make.bat
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/make.bat?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/make.bat (original)
+++ zorg/trunk/lnt/docs/make.bat (removed)
@@ -1,113 +0,0 @@
- at ECHO OFF
-
-REM Command file for Sphinx documentation
-
-set SPHINXBUILD=sphinx-build
-set BUILDDIR=_build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
-if NOT "%PAPER%" == "" (
-	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
-	:help
-	echo.Please use `make ^<target^>` where ^<target^> is one of
-	echo.  html      to make standalone HTML files
-	echo.  dirhtml   to make HTML files named index.html in directories
-	echo.  pickle    to make pickle files
-	echo.  json      to make JSON files
-	echo.  htmlhelp  to make HTML files and a HTML help project
-	echo.  qthelp    to make HTML files and a qthelp project
-	echo.  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter
-	echo.  changes   to make an overview over all changed/added/deprecated items
-	echo.  linkcheck to check all external links for integrity
-	echo.  doctest   to run all doctests embedded in the documentation if enabled
-	goto end
-)
-
-if "%1" == "clean" (
-	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
-	del /q /s %BUILDDIR%\*
-	goto end
-)
-
-if "%1" == "html" (
-	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
-	goto end
-)
-
-if "%1" == "dirhtml" (
-	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
-	goto end
-)
-
-if "%1" == "pickle" (
-	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
-	echo.
-	echo.Build finished; now you can process the pickle files.
-	goto end
-)
-
-if "%1" == "json" (
-	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
-	echo.
-	echo.Build finished; now you can process the JSON files.
-	goto end
-)
-
-if "%1" == "htmlhelp" (
-	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
-	echo.
-	echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
-	goto end
-)
-
-if "%1" == "qthelp" (
-	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
-	echo.
-	echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
-	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\LNT.qhcp
-	echo.To view the help file:
-	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\LNT.ghc
-	goto end
-)
-
-if "%1" == "latex" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	echo.
-	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "changes" (
-	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
-	echo.
-	echo.The overview file is in %BUILDDIR%/changes.
-	goto end
-)
-
-if "%1" == "linkcheck" (
-	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
-	echo.
-	echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
-	goto end
-)
-
-if "%1" == "doctest" (
-	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
-	echo.
-	echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
-	goto end
-)
-
-:end

Removed: zorg/trunk/lnt/docs/modules/testing.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/modules/testing.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/modules/testing.rst (original)
+++ zorg/trunk/lnt/docs/modules/testing.rst (removed)
@@ -1,5 +0,0 @@
-:mod:`lnt.testing` -- Test Data Creation
-========================================
-
-.. automodule:: lnt.testing
-   :members:

Removed: zorg/trunk/lnt/docs/quickstart.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/quickstart.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/quickstart.rst (original)
+++ zorg/trunk/lnt/docs/quickstart.rst (removed)
@@ -1,105 +0,0 @@
-.. _quickstart:
-
-Quickstart Guide
-================
-
-This quickstart guide is designed for LLVM developers who are primarily
-interested in using LNT to test compilers using the LLVM test-suite.
-
-Installation
-------------
-
-The first thing to do is to checkout install the LNT software itself. The
-following steps should suffice on any modern Unix variant:
-
-#. Install ``virtualenv``, if necessary::
-
-           sudo easy_install virtualenv
-
-   ``virtualenv`` is a standard Python tool for allowing the installation of
-   Python applications into their own sandboxes, or virtual environments.
-
-#. Create a new virtual environment for the LNT application::
-
-            virtualenv ~/mysandbox
-
-   This will create a new virtual environment at ``~/mysandbox``.
-
-#. Checkout the LNT sources::
-
-            svn co http://llvm.org/svn/llvm-project/zorg/trunk/lnt ~/lnt
-
-#. Install LNT into the virtual environment::
-
-           ~/mysandbox/bin/python ~/lnt/setup.py develop
-
-   We recommend using ``develop`` instead of install for local use, so that any
-   changes to the LNT sources are immediately propagated to your
-   installation. If you are running a production install or care a lot about
-   stability, you can use ``install`` which will copy in the sources and you
-   will need to explicitly re-install when you wish to update the LNT
-   application.
-
-That's it!
-
-
-Running Tests
--------------
-
-To execute the LLVM test-suite using LNT you use the ``lnt runtest``
-command. The information below should be enough to get you started, but see the
-:ref:`tests` section for more complete documentation.
-
-#. Checkout the LLVM test-suite, if you haven't already::
-
-             svn co http://llvm.org/svn/llvm-project/test-suite/trunk ~/llvm-test-suite
-
-   You should always keep the test-suite directory itself clean (that is, never
-   do a configure inside your test suite). Make sure not to check it out into
-   the LLVM projects directory, as LLVM's configure/make build will then want to
-   automatically configure it for you.
-
-#. Execute the ``lnt runtest nt`` test producer, point it at the test suite and
-   the compiler you want to test::
-
-           lnt runtest nt \
-               --sandbox SANDBOX \
-               --cc ~/llvm.obj/Release/bin/clang \
-               --test-suite ~/llvm-test-suite
-
-   The ``SANDBOX`` value is a path to where the test suite build products and
-   results will be stored (inside a timestamped directory, by default).
-
-
-Viewing Results
----------------
-
-By default, ``lnt runtest nt`` will show the passes and failures after doing a
-run, but if you are interested in viewing the result data in more detail you
-should install a local LNT instance to submit the results to.
-
-You can create a local LNT instance with, e.g.::
-
-    lnt create ~/myperfdb
-
-This will create an LNT instance at ``~/myperfdb`` which includes the
-configuration of the LNT application and a SQLite database for storing the
-results.
-
-Once you have a local instance, you can either submit results directly with::
-
-     lnt import ~/myperfdb SANDBOX/test-<stamp>/report.json
-
-or as part of a run with::
-
-     lnt runtest --submit ~/myperfdb nt ... arguments ...
-
-Once you have submitted results into a database, you can run the LNT web UI
-with::
-
-     lnt runserver ~/myperfdb
-
-which runs the server on ``http://localhost:8000`` by default.
-
-In the future, LNT will grow a robust set of command line tools to allow
-investigation of performance results without having to use the web UI.

Removed: zorg/trunk/lnt/docs/tests.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/tests.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/tests.rst (original)
+++ zorg/trunk/lnt/docs/tests.rst (removed)
@@ -1,227 +0,0 @@
-.. _tests:
-
-Test Producers
-==============
-
-On the client-side, LNT comes with a number of built-in test data producers.
-This section focuses on the LLVM test-suite (aka nightly test) generator, since
-it is the primary test run using the LNT infrastructure, but note that LNT also
-includes tests for other interesting pieces of data, for example Clang
-compile-time performance.
-
-LNT also makes it easy to add new test data producers and includes examples of
-custom data importers (e.g., to import buildbot build information into) and
-dynamic test data generators (e.g., abusing the infrastructure to plot graphs,
-for example).
-
-Running a Local Server
-----------------------
-
-It is useful to set up a local LNT server to view the results of tests, either
-for personal use or to preview results before submitting them to a public
-server. To set up a one-off server for testing::
-
-  # Create a new installation in /tmp/FOO.
-  $ lnt create /tmp/FOO
-  created LNT configuration in '/tmp/FOO'
-  ...
-
-  # Run a local LNT server.
-  $ lnt runserver /tmp/FOO &> /tmp/FOO/runserver.log &
-  [2] 69694
-
-  # Watch the server log.
-  $ tail -f /tmp/FOO/runserver.log
-  * Running on http://localhost:8000/
-  ...
-
-Running Tests
--------------
-
-The built-in tests are designed to be run via the ``lnt`` tool. The
-following tools for working with built-in tests are available:
-
-  ``lnt showtests``
-    List the available tests.  Tests are defined with an extensible
-    architecture. FIXME: Point at docs on how to add a new test.
-
-  ``lnt runtest [<run options>] <test name> ... test arguments ...``
-    Run the named test. The run tool itself accepts a number of options which
-    are common to all tests. The most common option is ``--submit=<url>`` which
-    specifies the server to submit the results to after testing is complete. See
-    ``lnt runtest --help`` for more information on the available options.
-
-    The remainder of the options are passed to the test tool itself. The options
-    are specific to the test, but well behaved tests should respond to ``lnt
-    runtest <test name> --help``. The following section provides specific
-    documentation on the built-in tests.
-
-Built-in Tests
---------------
-
-LLVM test-suite (aka LLVM nightly test)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``nt`` built-in test runs the LLVM test-suite execution and performance
-tests, in the "nightly test" configuration. This test allows running many
-different applications and benchmarks (e.g., SPEC), with various compile
-options, and in several different configurations (for example, using an LLVM
-compiler like ``clang`` or ``llvm-gcc``, running under the LLVM JIT compiler
-using the LLVM ``lli`` bit-code interpreter, or testing new code generator
-passes).
-
-The ``nt`` test requires that the LLVM test-suite repository, a working LLVM
-compiler, and a LLVM source and build tree are available. Currently, the LLVM
-build tree is expected to have been built-in the Release+Asserts configuration.
-Unlike the prior ``NewNightlyTest.pl``, the ``nt`` tool does not checkout or build
-any thing, it is expected that users manage their own LLVM source and build
-trees. Ideally, each of the components should be based on the same LLVM revision
-(except perhaps the LLVM test-suite), but this is not required.
-
-The test runs the LLVM test-suite builds and execution inside a user specificed
-sandbox directory. By default, each test run will be done in a timestamped
-directory inside the sandbox, and the results left around for post-mortem
-analysis. Currently, the user is responsible for cleaning up these directories
-to manage disk space.
-
-The tests are always expected to be run using out-of-tree builds -- this is a
-more robust model and allow sharing the same source trees across many test
-runs. One current limitation is that the LLVM test-suite repository will not
-function correctly if an in-tree build is done, followed by an out-of-tree
-build. It is very important that the LLVM test-suite repository be left
-pristine.
-
-The following command shows an example of running the ``nt`` test suite on a
-local build::
-
-  $ rm -rf /tmp/BAR
-  $ lnt runtest nt \
-       --sandbox /tmp/BAR \
-       --cc ~/llvm.obj.64/Release+Asserts/bin/clang \
-       --cxx ~/llvm.obj.64/Release+Asserts/bin/clang++ \
-       --llvm-src ~/llvm \
-       --llvm-obj ~/llvm.obj.64 \
-       --test-suite ~/llvm-test-suite \
-       TESTER_NAME \
-        -j 16
-  2010-04-17 23:46:40: using nickname: 'TESTER_NAME__clang_DEV__i386'
-  2010-04-17 23:46:40: creating sandbox: '/tmp/BAR'
-  2010-04-17 23:46:40: starting test in '/private/tmp/BAR/test-2010-04-17_23-46-40'
-  2010-04-17 23:46:40: configuring...
-  2010-04-17 23:46:50: testing...
-  2010-04-17 23:51:04: loading test data...
-  2010-04-17 23:51:05: generating report: '/private/tmp/BAR/test-2010-04-17_23-46-40/report.json'
-
-The first seven arguments are all required -- they specify the sandbox path, the
-compilers to test, and the paths to the required sources and builds. The
-``TESTER_NAME`` argument is used to derive the name for this tester (in
-conjunction which some inferred information about the compiler under test). This
-name is used as a short identifier for the test machine; generally it should be
-the hostname of the machine or the name of the person who is responsible for the
-tester. The ``-j 16`` argument is optional, in this case it specifies that tests
-should be run in parallel using up to 16 processes.
-
-In this case, we can see from the output that the test created a new sandbox
-directory, then ran the test in a subdirectory in that sandbox. The test outputs
-a limited about of summary information as testing is in progress. The full
-information can be found in .log files within the test build directory (e.g.,
-``configure.log`` and ``test.log``).
-
-The final test step was to generate a test report inside the test
-directory. This report can now be submitted directly to an LNT server. For
-example, if we have a local server running as described earlier, we can run::
-
-  $ lnt submit --commit=1 http://localhost:8000/submitRun \
-      /tmp/BAR/test-2010-04-17_23-46-40/report.json
-  STATUS: 0
-
-  OUTPUT:
-  IMPORT: /tmp/FOO/lnt_tmp/data-2010-04-17_16-54-35ytpQm_.plist
-    LOAD TIME: 0.34s
-    IMPORT TIME: 5.23s
-  ADDED: 1 machines
-  ADDED: 1 runs
-  ADDED: 1990 tests
-  COMMITTING RESULT: DONE
-  TOTAL IMPORT TIME: 5.57s
-
-and view the results on our local server.
-
-LNT-based NT test modules
-+++++++++++++++++++++++++
-
-In order to support more complicated tests, or tests which are not easily
-integrated into the more strict SingleSource or MultiSource layout of the LLVM
-test-suite module, the ``nt`` built-in test provides a mechanism for LLVM
-test-suite tests that just define an extension test module. These tests are
-passed the user configuration parameters for a test run and expected to return
-back the test results in the LNT native format.
-
-Test modules are defined by providing a ``TestModule`` file in a subdirectory of
-the ``LNTBased`` root directory inside the LLVM test-suite repository. The
-``TestModule`` file is expected to be a well-formed Python module that provides
-a ``test_class`` global variable which should be a subclass of the
-``lnt.tests.nt.TestModule`` abstract base class.
-
-The test class should override the ``execute_test`` method which is passed an
-options dictionary containg the NT user parameters which apply to test
-execution, and the test should return the test results as a list of
-``lnt.testing.TestSamples`` objects.
-
-The ``execute_test`` method is passed the following options describing
-information about the module itself:
-
-  * ``MODULENAME`` - The name of the module (primarily intended for use in
-    producing well structured test names).
-
-  * ``SRCROOT`` - The path to the modules source directory.
-
-  * ``OBJROOT`` - The path to a directory the module should use for temporary
-    output (build products). The directory is guaranteed to exist but is not
-    guaranteed to be clean.
-
-The method is passed the following options which apply to how tests should be
-executed:
-
-  * ``THREADS`` - The number of parallel processes to run during testing.
-
-  * ``BUILD_THREADS`` - The number of parallel processes to use while building
-    tests (if applicable).
-
-The method is passed the following options which specify how and whether tests
-should be executed remotely. If any of these parameters are present then all are
-guaranteed to be present.
-
- * ``REMOTE_HOST`` - The host name of the remote machine to execute tests on.
-
- * ``REMOTE_USER`` - The user to log in to the remote machine as.
-
- * ``REMOTE_PORT`` - The port to connect to the remote machine on.
-
- * ``REMOTE_CLIENT`` - The ``rsh`` compatible client to use to connect to the
-   remote machine with.
-
-The method is passed the following options which specify how to build the tests:
-
- * ``CC`` - The C compiler command to use.
-
- * ``CXX`` - The C++ compiler command to use.
-
- * ``CFLAGS`` - The compiler flags to use for building C code.
-
- * ``CXXFLAGS`` - The compiler flags to use for building C++ code.
-
-The method is passed the following optional parameters which specify the
-environment to use for various commands:
-
- * ``COMPILE_ENVIRONMENT_OVERRIDES`` [optional] - If given, a ``env`` style list
-   of environment overrides to use when compiling.
-
- * ``LINK_ENVIRONMENT_OVERRIDES`` [optional] - If given, a ``env`` style list of
-   environment overrides to use when linking.
-
- * ``EXECUTION_ENVIRONMENT_OVERRIDES`` [optional] - If given, a ``env`` style list of
-   environment overrides to use when executing tests.
-
-For more information, see the example tests in the LLVM test-suite repository
-under the ``LNT/Examples`` directory.

Removed: zorg/trunk/lnt/docs/todo.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/todo.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/todo.rst (original)
+++ zorg/trunk/lnt/docs/todo.rst (removed)
@@ -1,252 +0,0 @@
-.. _todo:
-
-TODO
-====
-
-This is a TODO list of major and minor features for LNT.
-
-Major Features
---------------
-
-Too many to name!
-
-Minor Features
---------------
-
-Optimize test distribution format for common cases.
-
- 1. We should left the test info higher in the format, so that it can easily be
- shared by a large number of samples.
-
- 2. We should specify test samples in an array instead of objects, to avoid
- requiring repetitive 'Name' and 'Data' keys.
-
- 3. We should support [test, sample] in addition to [test, [sample, ...]].
-
- 4. If we changed the .success marker to be .failure, then having [test] be a
- shortcut for [test, 0] would be fairly nice, and in the visualization we would
- automatically get the right defaulting for absent tests.
-
-These changes would significantly compact the archive format, which improves
-performance across the board.
-
-Other stuff:
-
- 1. We should find ways to manage the SQLite databases better. Currently we:
-
-    o Could benefit from having LNT manage when to run ANALYZE.
-
-    o Could benefit from making LNT handle setting some of the page size
-      pragmas, at some point.
-
-    o Could benefit from finding a way to have LNT VACUUM, although this can be
-      very expensive.
-
- 2. We should get an LNT buildbot up somewhere.
-
- 3. We should start defining performance tests for LNT itself, and have LNT
-    monitor them (of course). Probably best integrated into the LNT buildbot.
-
-v0.4 Redesign
--------------
-
- - Kill parameter sets.
-
-   o Is this actual worth doing? If we just bring up dual models for a while
-     there is no reason to spend time on the old model.
-
-   o Counter argument is that it might make migrating code more simple.
-
-   o Another counter argument is that we want to remove these from some places
-     that just migrating the schema won't touch (like the submission format).
-
- - Add schema version to test submission format (for future future proofing).
-
- - Schema redesign:
-
-   o Plan on doing a dual submission model for bringup purposes.
-
-   o Part of the planned schema design is to have proper attributes for the rows
-     in the run table. Should we moved to a typed model?
-
-   o See below.
-
- - Open question: UI rewrite at the same time? We are going to have to do a
-   metric ton of rewrite work to adapt to the new schema anyway.
-
- - Open question: Introduce Mongo dependency? I would rather not, from a
-   dependency perspective, but I also would really like to have mongo
-   available. Also I am almost certainly going to want to move llvmlab to using
-   mongo so it is an effective dependency on the server. Having it as a
-   dependency for local use seems sucky though. Shame there isn't a local
-   isolated mongo-as-a-library client.
-
-   o CONCLUSION: Not for v0.4.
-
- - Run order redesign?
-
-   o The current run order design is really unfortunate. It would be much better
-     if we could provide a way for users to report all of the important
-     revisions. Unfortunately, this places a lot of requirements on the server
-     for understanding all the repositories, especially the git based ones.
-
-Schema Resign
-~~~~~~~~~~~~~
-
-Primary Purpose
-+++++++++++++++
-
-The primary purpose of the schema redesign is to eliminate what Bill Karwin
-calls the "Entity-Attribute-Value" anti-pattern in his book SQL
-Antipatterns. This is where we basically store arbitrary dictionaries of
-attributes in the various Info tables, which I have since discovered is a
-terrible idea for all the reasons Karwin articulates.
-
-The particular difficulty with following this within the other LNT design goals
-is that we still have the desire to allow users to report very flexible
-structured data.
-
-Currently, the best idea to have to resolve this conflict is that we will
-construct tables on the fly. I suspect many SQL experts might also regard that
-as an anti- or scary- pattern, but it seems like the best option to me. If one
-thinks of LNT as trying to be a general purpose product, then the idea of
-creating tables is notionally related to the specialization (instantiation) of
-the general purpose product for one's particular test suites.
-
-However, we certainly also want to limit the degree to which we create or modify
-tables. Having the test submission mechanism having to modify the table any time
-a user reported a new key would certainly be superflous.
-
-Thus, my current plan is to follow what Karwin calls the "Semistructured Data"
-pattern. What we will do is add an arbitrary blob field (to be JSON or perhaps
-BSON data). We will basically expect that any fields that are required (or
-almost always used) to be put in the actual table schema, but any time we see
-additional fields we can handle them by just placing them in the BLOB field.
-
-We will probably allow users to migrate fields to and from the schema. This
-gives us a good amount of flexibility (and an easy path to eliminate the JSON
-field if need be). We may require users to do this before they can do anything
-but just see the data associated with a run. For example, if they want to use
-one of the reported fields as an axis.
-
-Secondary Purpose
-+++++++++++++++++
-
-One additional painful part of the current schema design is that we use separate
-tests to represent the status aspect of other tests. This is nice and flexible,
-but makes the UI code very painful. Especially, some things like making a graph
-of the test values for all tests which passed become incredibly complex.
-
-The plan is to handle this problem by also constructing the Sample tables on the
-fly, and allowing the test suite to define the keys that go into a sample. Thus,
-any one sample will reflect *all* of the statistics that were reported for that
-test.
-
-This has many advantages:
- * We can start using types for the columns (e.g., easy to start reporting hash
-   of produced binaries, for example).
- * The performance impact of adding new sample values should be much lower than
-   in the old schema.
- * The database explicitly models the fact that sample values were produced from
-   a single run, whereas before sample values and status could not technically
-   be correlated correctly.
- * We eliminate the need to mangle subtest/test result key information into the
-   test name, which is a big win.
-
-The has some disadvantages, however:
- * Poorly models suites where different tests reported different test results.
- * Poorly models situations where we want to support a large number of test
-   results and that set might change frequently or dynamically (e.g., suppose we
-   reported one test for each LLVM Statistic counter).
-
-However, at least for our current usage this scheme should work well enough and
-be **substantially** faster than the old scheme.
-
-This will probably mean that we have to do a bit of work (similar to what we had
-to do for parameter sets) to handle what the UI for this should look
-like. However, we should have better infrastructure for defining how the UI
-should handle things in the metadata.
-
-Other Antipatterns In Use
-+++++++++++++++++++++++++
-
-The "status kind" field uses and suffers from a view of the problems mentioned
-in Chapter 11. 31 Flavors. It would probably be good to move being foreign key
-references into an auxiliary table. This also reduces some of my reservations
-about making that field required / part of every test.
-
-Conveniently, this can also be done without actually changing the status kind
-values, which makes migration easy.
-
-Proposed Concepts
-~~~~~~~~~~~~~~~~~
-
-Test Suite
-++++++++++
-
-The major high level concept in the new schema is that of a test suite. This is
-designed to correspond to some group of tests which users would browse
-independently. Examples would be things like "LLVM Test Suite" or "PlumHall" or
-"GCC Test Suite".
-
-The test suite is the place that defines information about what is being tested
-and the metadata on what information is reported by the runs and the tests.
-
-Parameter Sets
-++++++++++++++
-
-This concept will be removed. Instead, the idea is that all the information
-about how a test was run lives at the Run level. This corresponds much more to
-how LNT is currently primarily used in production. Although there were tests
-like the Clang tests which made use of parameter sets, the theory is that we
-should only have one place for parameters, and a lot of them have to be in the
-Run. The goal is that the UI will be enhanced to better support situations when
-one group of tests was split up into multiple Runs. We should also eventually
-support submitting multiple runs in one submission.
-
-Proposed Migration Path
-~~~~~~~~~~~~~~~~~~~~~~~
-
-I would prefer to not do any coordinated changes to the non-DB side of things
-while effecting the database changes (and generally, I like the test submission
-format to be fairly stable).
-
-For the most part, I think this can be done relatively easily, but there are a
-few places that will require special care.
-
- - For parameter sets (TestInfo), we just discard them and reject any attempts
-   to use them.
-
- - For MachineInfo, we just turn them into the Parameters BLOB or put them in
-   the appropriate column.
-
- - For RunInfo, we just turn them into the Parameters BLOB or put them in the
-   appropriate column.
-
-   We will need to extract the run_order value and put it into the order table.
-
-   This points out that we probably want the order table to be UNIQUE across all
-   entries. Can we do that in SQLite3?
-
- - For the sample status field, we will need to convert the existing format,
-   which encodes samples via multiple tests, into the new format.
-
-   This is the one area where I really don't want to change the test data
-   serialization format, so maybe this is even the right long term approach.
-
-   In the new model of collapsing samples into a single row, this is going to
-   mean that we will need to assume that tests mangled into subtest names are
-   specified in the same order.
-
-Unaddressed Issues
-~~~~~~~~~~~~~~~~~~
-
-There are couple design problems in the current system which I *am not*
-intending to address as part of the v0.4 changes.
-
-Machine Naming
-++++++++++++++
-
-LNT currently allows a "name" for machines, which is very arbitrary. It would be
-nice to eliminate this field completely, but we should probably eliminate the
-name from the UI completely first, and make sure that is workable.

Removed: zorg/trunk/lnt/docs/tools.rst
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/docs/tools.rst?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/docs/tools.rst (original)
+++ zorg/trunk/lnt/docs/tools.rst (removed)
@@ -1,68 +0,0 @@
-.. _tools:
-
-The ``lnt`` Tool
-================
-
-The ``lnt`` command line utility provides the following commands for client-side
-use and server-side use. The following is a list of commands and the most
-importat options, use ``lnt <toolname> --help`` for more information on any
-particular tool.
-
-Client-Side Tools
------------------
-
-  ``lnt checkformat [<file>]``
-    Checks the syntax of an LNT test report file. In addition to verifying that
-    LNT can read the raw format (e.g., JSON or property list), this also creates
-    a temporary in-memory database instance and ensures that the test report
-    file can be imported correctly.
-
-    If run without arguments, this expects to read the input file from ``stdin``.
-
-  ``lnt convert <input path> [<output path>]``
-    Convert between LNT test report formats. By default, this will convert to
-    the property list format. You can use ``-`` for either the input (to read
-    from ``stdin) or the output (to write to ``stdout``).
-
-  ``lnt submit [--commit=1] <server url> <file>+``
-    Submits one or more files to the given server. The ``<server url>`` should
-    be the url to the actual ``submitRun`` page on the server; the database
-    being submitted to is effectively a part of this URL.
-
-    By default, this only submits the report to the server but does not actually
-    commit the data. When testing, you should verify that the server returns an
-    acceptable response before committing runs.
-
-  ``lnt showtests``
-    List available built-in tests. See the :ref:`tests` documentation for more
-    details on this tool.
-
-  ``lnt runtest [<run options>] <test name> ... test arguments ...``
-    Run a built-in test. See the :ref:`tests` documentation for more
-    details on this tool.
-
-Server-Side Tools
------------------
-
-The following tools are used to interact with an LNT server:
-
-  ``lnt create <path>``
-    Creates a new LNT server instance. This command has a number of parameters
-    to tweak the generated server, but they can all be modified after the fact
-    in the LNT configuration file.
-
-    The default server will have one database named *default*.
-
-  ``lnt createdb <path>``
-    Creates a new LNT sqlite3 database at the specified path.
-
-  ``lnt import <path | config file> <file>+``
-    Import an LNT data file into a database. You can use ``--database`` to
-    select the database to write to. Note that by default this will also
-    generate report emails if enabled in the configuration, you can use
-    ``--no-email`` to disable this.
-
-  ``lnt runserver <path | config file>``
-    Start the LNT server using a development WSGI server. Additional options can
-    be used to control the server host and port, as well as useful development
-    features such as automatic reloading.

Removed: zorg/trunk/lnt/examples/functions.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/examples/functions.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/examples/functions.py (original)
+++ zorg/trunk/lnt/examples/functions.py (removed)
@@ -1,56 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Simple example of a test generator which just produces data on some mathematical
-functions, keyed off of the current time.
-"""
-
-import sys, time
-import math, random
-
-from lnt.testing import *
-
-def main():
-    from optparse import OptionParser
-    parser = OptionParser("usage: %prog [options] [output]")
-    opts,args = parser.parse_args()
-
-    if len(args) == 0:
-        output = '-'
-    elif len(args) == 1:
-        output, = args
-    else:
-        parser.error("invalid number of arguments")
-
-    if output == '-':
-        output = sys.stdout
-    else:
-        output = open(output,'w')
-
-    offset = math.pi/5
-    delay = 120.
-
-    machine = Machine('Mr. Sin Wave', info = { 'delay' : delay })
-
-    start = time.time()
-
-    run = Run(start, start, info = { 't' : start,
-                                     'tag' : 'simple',
-                                     'run_order' : 1 })
-    tests = [TestSamples('simple.%s' % name,
-                         [fn(start*2*math.pi / delay  + j * offset)],
-                         info = { 'offset' : j })
-             for j in range(5)
-             for name,fn in (('sin',math.sin),
-                             ('cos',math.cos),
-                             ('random',lambda x: random.random()))]
-
-    report = Report(machine, run, tests)
-
-    print >>output, report.render()
-
-    if output is not sys.stderr:
-        output.close()
-
-if __name__ == '__main__':
-    main()

Removed: zorg/trunk/lnt/lnt/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/__init__.py (original)
+++ zorg/trunk/lnt/lnt/__init__.py (removed)
@@ -1,6 +0,0 @@
-__author__ = 'Daniel Dunbar'
-__email__ = 'daniel at zuster.org'
-__versioninfo__ = (0, 4, 0)
-__version__ = '.'.join(map(str, __versioninfo__)) + 'dev'
-
-__all__ = []

Removed: zorg/trunk/lnt/lnt/db/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/db/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/db/__init__.py (original)
+++ zorg/trunk/lnt/lnt/db/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/db/perfdb.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/db/perfdb.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/db/perfdb.py (original)
+++ zorg/trunk/lnt/lnt/db/perfdb.py (removed)
@@ -1,495 +0,0 @@
-#!/usr/bin/python
-
-###
-# SQLAlchemy database layer
-
-import sqlalchemy
-import sqlalchemy.ext.declarative
-import sqlalchemy.orm
-from sqlalchemy import *
-from sqlalchemy.schema import Index
-from sqlalchemy.orm import relation, backref
-from sqlalchemy.orm.collections import attribute_mapped_collection
-
-Base = sqlalchemy.ext.declarative.declarative_base()
-class Revision(Base):
-    __tablename__ = 'Revision'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(256))
-    number = Column("Number", Integer)
-
-    def __init__(self, name, number):
-        self.name = name
-        self.number = number
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.number))
-
-class Machine(Base):
-    __tablename__ = 'Machine'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(256))
-    number = Column("Number", Integer)
-
-    info = relation('MachineInfo',
-                    collection_class=attribute_mapped_collection('key'),
-                    backref=backref('machine'))
-
-    def __init__(self, name, number):
-        self.name = name
-        self.number = number
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.number))
-
-class MachineInfo(Base):
-    __tablename__ = 'MachineInfo'
-
-    id = Column("ID", Integer, primary_key=True)
-    machine_id = Column("Machine", Integer, ForeignKey('Machine.ID'))
-    key = Column("Key", String(256))
-    value = Column("Value", String(4096))
-
-    def __init__(self, machine, key, value):
-        self.machine = machine
-        self.key = key
-        self.value = value
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.machine, self.key, self.value))
-
-class Run(Base):
-    __tablename__ = 'Run'
-
-    id = Column("ID", Integer, primary_key=True)
-    machine_id = Column("MachineID", Integer, ForeignKey('Machine.ID'))
-    start_time = Column("StartTime", DateTime)
-    end_time = Column("EndTime", DateTime)
-
-    machine = relation(Machine)
-
-    info = relation('RunInfo',
-                    collection_class=attribute_mapped_collection('key'),
-                    backref=backref('run'))
-
-    def __init__(self, machine, start_time, end_time):
-        self.machine = machine
-        self.start_time = start_time
-        self.end_time = end_time
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.machine, self.start_time, self.end_time))
-
-class RunInfo(Base):
-    __tablename__ = 'RunInfo'
-
-    id = Column("ID", Integer, primary_key=True)
-    run_id = Column("Run", Integer, ForeignKey('Run.ID'))
-    key = Column("Key", String(256), index=True)
-    value = Column("Value", String(4096))
-
-    def __init__(self, run, key, value):
-        self.run = run
-        self.key = key
-        self.value = value
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.run, self.key, self.value))
-
-class Test(Base):
-    __tablename__ = 'Test'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(512))
-
-    info = relation('TestInfo',
-                    collection_class=attribute_mapped_collection('key'),
-                    backref=backref('test'))
-
-    def __init__(self, name):
-        self.name = name
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.name,))
-
-    def get_parameter_set(self):
-        items = [(k,v.value) for k,v in self.info.items()]
-        items.sort()
-        return tuple(items)
-
-class TestInfo(Base):
-    __tablename__ = 'TestInfo'
-
-    id = Column("ID", Integer, primary_key=True)
-    test_id = Column("Test", Integer, ForeignKey('Test.ID'))
-    key = Column("Key", String(256))
-    value = Column("Value", String(4096))
-
-    def __init__(self, test, key, value):
-        self.test = test
-        self.key = key
-        self.value = value
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.test, self.key, self.value))
-
-class Sample(Base):
-    __tablename__ = 'Sample'
-
-    id = Column("ID", Integer, primary_key=True)
-    run_id = Column("RunID", Integer, ForeignKey('Run.ID'), index=True)
-    test_id = Column("TestID", Integer, ForeignKey('Test.ID'), index=True)
-    value = Column("Value", Float)
-
-    run = relation(Run)
-    test = relation(Test)
-
-    def __init__(self, run, test, value):
-        self.run = run
-        self.test = test
-        self.value = value
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__,
-                         (self.run, self.test, self.value))
-
-# Define an additonal index on (RunID, TestID).
-Index("ix_Sample_RunID_TestID", Sample.run_id, Sample.test_id)
-
-###
-# PerfDB wrapper, to avoid direct SA dependency when possible.
-
-def info_eq(a, b):
-    a = list(a)
-    b = list(b)
-    a.sort()
-    b.sort()
-    return a == b
-
-class PerfDB:
-    def __init__(self, path, echo=False):
-        if (not path.startswith('mysql://') and
-            not path.startswith('sqlite://')):
-            path = 'sqlite:///' + path
-        self.path = path
-        self.engine = sqlalchemy.create_engine(path, echo=echo)
-
-        # Create the tables in case this is a new database.
-        Base.metadata.create_all(self.engine)
-
-        self.session = sqlalchemy.orm.sessionmaker(self.engine)()
-        self.modified_machine = self.modified_run = self.modified_test = False
-
-        # Make sure revision numbers exists.
-        for r in ("Machine","MachineInfo","Run","RunInfo","Test","TestInfo"):
-            self.get_revision(r)
-        self.commit()
-
-        # Add shortcut alias.
-        self.query = self.session.query
-
-    def get_revision(self, name):
-        for r in self.session.query(Revision).filter_by(name=name):
-            return r
-        r = Revision(name, 0)
-        self.session.add(r)
-        return r
-    def get_revision_number(self, name):
-        return self.get_revision(name).number
-
-    def machines(self, name=None):
-        q = self.session.query(Machine)
-        if name:
-            q = q.filter_by(name=name)
-        return q
-
-    def tests(self, name=None):
-        q = self.session.query(Test)
-        if name:
-            q = q.filter_by(name=name)
-        return q
-
-    def runs(self, machine=None):
-        q = self.session.query(Run)
-        if machine:
-            q = q.filter_by(machine=machine)
-        return q
-
-    def samples(self, run=None, test=None):
-        q = self.session.query(Sample)
-        if run:
-            q = q.filter_by(run_id=run.id)
-        if test:
-            q = q.filter_by(test_id=test.id)
-        return q
-
-    def getNumMachines(self):
-        return self.machines().count()
-
-    def getNumRuns(self):
-        return self.runs().count()
-
-    def getNumTests(self):
-        return self.tests().count()
-
-    def getNumSamples(self):
-        return self.samples().count()
-
-    def getMachine(self, id):
-        return self.session.query(Machine).filter_by(id=id).one()
-
-    def getRun(self, id):
-        return self.session.query(Run).filter_by(id=id).one()
-
-    def getTest(self, id):
-        return self.session.query(Test).filter_by(id=id).one()
-
-    def getOrCreateMachine(self, name, info):
-        # FIXME: Not really the right way...
-        number = 1
-        for m in self.machines(name=name):
-            if info_eq([(i.key, i.value) for i in m.info.values()], info):
-                return m,False
-            number += 1
-
-        # Make a new record
-        m = Machine(name, number)
-        m.info = dict((k,MachineInfo(m,k,v)) for k,v in info)
-        self.session.add(m)
-        self.modified_machine = True
-        return m,True
-
-    def getOrCreateTest(self, name, info):
-        # FIXME: Not really the right way...
-        for t in self.tests(name):
-            if info_eq([(i.key, i.value) for i in t.info.values()], info):
-                return t,False
-
-        t = Test(name)
-        t.info = dict((k,TestInfo(t,k,v)) for k,v in info)
-        self.session.add(t)
-        self.modified_test = True
-        return t,True
-
-    def getOrCreateRun(self, machine, start_time, end_time, info):
-        from datetime import datetime
-        start_time = datetime.strptime(start_time,
-                                       "%Y-%m-%d %H:%M:%S")
-        end_time = datetime.strptime(end_time,
-                                     "%Y-%m-%d %H:%M:%S")
-
-        # FIXME: Not really the right way...
-        for r in self.session.query(Run).filter_by(machine=machine):
-            # FIXME: Execute this filter in SQL, but resolve the
-            # normalization issue w.r.t. SQLAlchemy first. I think we
-            # may be running afoul of SQLite not normalizing the
-            # datetime. If I don't do this then sqlalchemy issues a
-            # query in the format YYYY-MM-DD HH:MM:SS.ssss which
-            # doesn't work.
-            if r.start_time != start_time or r.end_time != end_time:
-                continue
-            if info_eq([(i.key, i.value) for i in r.info.values()], info):
-                return r,False
-
-        # Make a new record
-        r = Run(machine, start_time, end_time)
-        r.info = dict((k,RunInfo(r,k,v)) for k,v in info)
-        self.session.add(r)
-        self.modified_run = True
-        return r,True
-
-    def addSample(self, run, test, value):
-        s = Sample(run, test, value)
-        self.session.add(s)
-        return s
-
-    def addSamples(self, samples):
-        """addSamples([(run_id, test_id, value), ...]) -> None
-
-        Batch insert a list of samples."""
-
-        # Flush to keep session consistent.
-        self.session.flush()
-
-        for run_id,test_id,value in samples:
-            q = Sample.__table__.insert().values(RunID = run_id,
-                                                 TestID = test_id,
-                                                 Value = value)
-            self.session.execute(q)
-
-    def commit(self):
-        if self.modified_machine:
-            self.get_revision("Machine").number += 1
-            self.get_revision("MachineInfo").number += 1
-        if self.modified_run:
-            self.get_revision("Run").number += 1
-            self.get_revision("RunInfo").number += 1
-        if self.modified_test:
-            self.get_revision("Test").number += 1
-            self.get_revision("TestInfo").number += 1
-        self.session.commit()
-        self.modified_machine = self.modified_test = self.modified_run = False
-
-    def rollback(self):
-        self.session.rollback()
-        self.modified_machine = self.modified_test = self.modified_run = False
-
-    def importDataFromDict(self, data, config=None):
-        return importDataFromDict(self, data)
-
-    def get_db_summary(self):
-        import perfdbsummary
-        return perfdbsummary.PerfDBSummary.fromdb(self)
-
-def importDataFromDict(db, data):
-    # FIXME: Validate data
-    machineData = data['Machine']
-    runData = data['Run']
-    testsData = data['Tests']
-
-    # Get the machine
-    # FIXME: Validate machine
-    machine,_ = db.getOrCreateMachine(machineData['Name'],
-                                      machineData['Info'].items())
-
-    # Accept 'Time' as an alias for 'Start Time'
-    if 'Start Time' not in runData and 'Time' in runData:
-        import time
-        t = time.strptime(runData['Time'],
-                          "%a, %d %b %Y %H:%M:%S -0700 (PDT)")
-        runData['Start Time'] = time.strftime('%Y-%m-%d %H:%M', t)
-
-    # Create the run.
-    run,inserted = db.getOrCreateRun(machine,
-                                     runData.get('Start Time',''),
-                                     runData.get('End Time',''),
-                                     runData.get('Info',{}).items())
-    if not inserted:
-        return False,run
-
-    # Batch load the set of tests instead of repeatedly querying to unique.
-    #
-    # FIXME: Add explicit config object.
-    test_info = {}
-    for id,k,v in db.session.query(TestInfo.test_id, TestInfo.key,
-                                   TestInfo.value):
-        info = test_info[id] = test_info.get(id,{})
-        info[str(k)] = str(v)
-
-    testMap = {}
-    for test_id,test_name in db.session.query(Test.id, Test.name):
-        info = test_info.get(test_id,{}).items()
-        info.sort()
-        testMap[(str(test_name),tuple(info))] = test_id
-
-    # Create the tests up front, so we can resolve IDs.
-    test_ids = []
-    late_ids = []
-    for i,testData in enumerate(testsData):
-        name = str(testData['Name'])
-        info = [(str(k),str(v)) for k,v in testData['Info'].items()]
-        info.sort()
-        test_id = testMap.get((name,tuple(info)))
-        if test_id is None:
-            test,created = db.getOrCreateTest(testData['Name'],info)
-            late_ids.append((i,test))
-        test_ids.append(test_id)
-
-    # Flush now to resolve test and run ids.
-    #
-    # FIXME: Surely there is a cleaner way to handle this?
-    db.session.flush()
-
-    if late_ids:
-        for i,t in late_ids:
-            test_ids[i] = t.id
-
-    db.addSamples([(run.id, test_id, value)
-                   for test_id,testData in zip(test_ids, testsData)
-                   for value in testData['Data']])
-    return True,run
-
-def test_sa_db(dbpath):
-    if not dbpath.startswith('mysql://'):
-        dbpath = 'sqlite:///' + dbpath
-    engine = sqlalchemy.create_engine(dbpath)
-
-    Session = sqlalchemy.orm.sessionmaker(engine)
-    Session.configure(bind=engine)
-
-    session = Session()
-
-    m = session.query(Machine).first()
-    print m
-    print m.info
-
-    r = session.query(Run).first()
-    print r
-    print r.info
-
-    t = session.query(Test)[20]
-    print t
-    print t.info
-
-    s = session.query(Sample)[20]
-    print s
-
-    import time
-    start = time.time()
-    print
-    q = session.query(Sample)
-    q = q.filter(Sample.run_id == 994)
-    print
-    res = session.execute(q)
-    print res
-    N = 0
-    for row in res:
-        if N == 1:
-            print row
-        N += 1
-    print N, time.time() - start
-    print
-
-    start = time.time()
-    N = 0
-    for row in q:
-        if N == 1:
-            print row
-        N += 1
-    print N, time.time() - start
-
-def main():
-    global opts
-    from optparse import OptionParser
-    parser = OptionParser("usage: %prog dbpath")
-    opts,args = parser.parse_args()
-
-    if len(args) != 1:
-        parser.error("incorrect number of argments")
-
-    dbpath, = args
-
-    # Test the SQLAlchemy layer.
-    test_sa_db(dbpath)
-
-    # Test the PerfDB wrapper.
-    db = PerfDB(dbpath)
-
-    print "Opened %r" % dbpath
-
-    for m in db.machines():
-        print m
-        for r in db.runs(m):
-            print '  run - id:%r, start:%r,'\
-                ' # samples: %d.' % (r.id, r.start_time,
-                                     db.samples(run=r).count())
-
-if __name__ == '__main__':
-    main()

Removed: zorg/trunk/lnt/lnt/db/perfdbsummary.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/db/perfdbsummary.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/db/perfdbsummary.py (original)
+++ zorg/trunk/lnt/lnt/db/perfdbsummary.py (removed)
@@ -1,241 +0,0 @@
-"""
-Classes for caching metadata about a PerfDB instance.
-"""
-
-from lnt.db.perfdb import Run, RunInfo, Sample, Test
-
-class SuiteSummary:
-    def __init__(self, name, path):
-        self.name = name
-        self.path = path
-
-class PerfDBSummary:
-    @staticmethod
-    def fromdb(db):
-        revision = db.get_revision_number("Run")
-
-        # Look for all the run tags and use them to identify the available
-        # suites.
-        q = db.session.query(RunInfo.value.distinct())
-        q = q.filter(RunInfo.key == "tag")
-
-        suites = [SuiteSummary("Nightlytest", ("nightlytest",))]
-        for tag, in q:
-            if tag == 'nightlytest':
-                continue
-            suites.append(SuiteSummary(tag, ("simple",tag)))
-
-        suites.sort(key=lambda s: s.name)
-        return PerfDBSummary(revision, suites)
-
-    def __init__(self, revision, suites):
-        self.revision = revision
-        self.suites = suites
-
-    def is_up_to_date(self, db):
-        return (not db.modified_run and
-                self.revision == db.get_revision_number("Run"))
-
-class SimpleSuiteSummary(object):
-    @staticmethod
-    def fromdb(db, tag):
-        revision = db.get_revision_number("Test")
-
-        # Find all test names.
-        q = db.session.query(Test)
-        q = q.filter(Test.name.startswith(tag))
-        tests = list(q)
-
-        # Collect all the test data.
-        test_names = set()
-        parameter_sets = set()
-        test_id_map = {}
-        for t in tests:
-            name = t.name.split('.', 1)[1]
-
-            key = t.get_parameter_set()
-
-            parameter_sets.add(key)
-            test_id_map[(name, key)] = t.id
-
-            if name.endswith('.success'):
-                test_name = name.rsplit('.', 1)[0]
-            elif name.endswith('.status'):
-                test_name = name.rsplit('.', 1)[0]
-            else:
-                test_name = name
-
-            test_names.add(test_name)
-
-        # Order the test names.
-        test_names = list(test_names)
-        test_names.sort()
-
-        # Collect the set of all parameter keys.
-        parameter_keys = list(set([k for pset in parameter_sets
-                                   for k,v in pset]))
-        parameter_keys.sort()
-
-        # Order the parameter sets and convert to dictionaries.
-        parameter_sets = list(parameter_sets)
-        parameter_sets.sort()
-
-        return SimpleSuiteSummary(revision, tag, test_names,
-                                  test_id_map, parameter_keys, parameter_sets)
-
-    def __init__(self, revision, tag, test_names,
-                 test_id_map, parameter_keys, parameter_sets):
-        self.revision = revision
-        self.tag = tag
-        self.test_names = test_names
-        self.test_id_map = test_id_map
-        self.parameter_keys = parameter_keys
-        self.parameter_sets = parameter_sets
-        self.parameter_maps = map(dict, parameter_sets)
-        self.test_info_map = dict([(v,k) for k,v in test_id_map.items()])
-
-    def is_up_to_date(self, db):
-        return (not db.modified_test and
-                self.revision == db.get_revision_number("Test"))
-
-    def get_test_names_in_runs(self, db, runs):
-        # Load the distinct test ids for these runs.
-        test_ids = db.session.query(Sample.test_id)\
-            .filter(Sample.run_id.in_(runs)).distinct()
-
-        # Get the test names for the test ids.
-        test_names = [self.test_info_map[id][0]
-                      for id, in test_ids]
-
-        # Limit to the tests we actually report.
-        test_names = list(set(test_names) & set(self.test_names))
-        test_names.sort()
-
-        return test_names
-
-_cache = {}
-def get_simple_suite_summary(db, tag):
-    key = (db.path, tag)
-    entry = _cache.get(key)
-    if entry is None or not entry.is_up_to_date(db):
-        _cache[key] = entry = SimpleSuiteSummary.fromdb(db, tag)
-    return entry
-
-class SimpleSuiteRunSummary(object):
-    _cache = {}
-    @staticmethod
-    def get_summary(db, tag):
-        key = (db.path, tag)
-        entry = SimpleSuiteRunSummary._cache.get(key)
-        if entry is None or not entry.is_up_to_date(db):
-            entry = SimpleSuiteRunSummary.fromdb(db, tag)
-            SimpleSuiteRunSummary._cache[key] = entry
-        return entry
-
-    @staticmethod
-    def fromdb(db, tag):
-        revision = db.get_revision_number("RunInfo")
-
-        # Find all run_orders for runs with this tag, ordered by run time so
-        # that runs are ordered by both (run_order, time) in the final ordering.
-        all_run_orders = db.session.query(RunInfo.value, RunInfo.run_id,
-                                          Run.machine_id).\
-            join(Run).\
-            order_by(Run.start_time.desc()).\
-            filter(RunInfo.key == "run_order").\
-            filter(RunInfo.run_id.in_(
-                db.session.query(RunInfo.run_id).\
-                    filter(RunInfo.key == "tag").\
-                    filter(RunInfo.value == tag).subquery()))
-        all_run_orders = list(all_run_orders)
-
-        order_by_run = dict((run_id,order)
-                            for order,run_id,machine_id in all_run_orders)
-        machine_id_by_run = dict((run_id,machine_id)
-                                 for order,run_id,machine_id in all_run_orders)
-
-        # Create a mapping from run_order to the available runs with that order.
-        runs_by_order = {}
-        for order,run_id,_ in all_run_orders:
-            runs = runs_by_order.get(order)
-            if runs is None:
-                runs = runs_by_order[order] = []
-            runs.append(run_id)
-
-        # Get all available run_orders, in order.
-        def order_key(run_order):
-            return run_order
-        run_orders = runs_by_order.keys()
-        run_orders.sort(key = order_key)
-        run_orders.reverse()
-
-        # Construct the total order of runs.
-        runs_in_order = []
-        for order in run_orders:
-            runs_in_order.extend(runs_by_order[order])
-
-        return SimpleSuiteRunSummary(
-            revision, tag, run_orders, runs_by_order, runs_in_order,
-            order_by_run, machine_id_by_run)
-
-    def __init__(self, revision, tag, run_orders, runs_by_order, runs_in_order,
-                 order_by_run, machine_id_by_run):
-        self.revision = revision
-        self.tag = tag
-        self.run_orders = run_orders
-        self.runs_by_order = runs_by_order
-        self.runs_in_order = runs_in_order
-        self.order_by_run = order_by_run
-        self.machine_id_by_run = machine_id_by_run
-        self.run_status_kinds = {}
-
-    def is_up_to_date(self, db):
-        return (not db.modified_run and
-                self.revision == db.get_revision_number("RunInfo"))
-
-    def contains_run(self, run_id):
-        return run_id in self.machine_id_by_run
-
-    def get_run_order(self, run_id):
-        return self.order_by_run.get(run_id)
-
-    def get_runs_on_machine(self, machine_id):
-        return [k for k,v in self.machine_id_by_run.items()
-                if v == machine_id]
-
-    def get_run_ordered_index(self, run_id):
-        try:
-            return self.runs_in_order.index(run_id)
-        except:
-            print run_id
-            print self.runs_in_order
-            raise
-
-    def get_previous_run_on_machine(self, run_id):
-        machine_id = self.machine_id_by_run[run_id]
-        index = self.get_run_ordered_index(run_id)
-        for i in range(index + 1, len(self.runs_in_order)):
-            id = self.runs_in_order[i]
-            if machine_id == self.machine_id_by_run[id]:
-                return id
-
-    def get_next_run_on_machine(self, run_id):
-        machine_id = self.machine_id_by_run[run_id]
-        index = self.get_run_ordered_index(run_id)
-        for i in range(0, index)[::-1]:
-            id = self.runs_in_order[i]
-            if machine_id == self.machine_id_by_run[id]:
-                return id
-
-    def get_run_status_kind(self, db, run_id):
-        kind = self.run_status_kinds.get(run_id)
-        if kind is None:
-            # Compute the status kind by for .success tests in this run.
-            if db.session.query(Test.name).join(Sample)\
-                    .filter(Sample.run_id == run_id)\
-                    .filter(Test.name.endswith(".success")).first() is not None:
-                kind = False
-            else:
-                kind = True
-        self.run_status_kinds[run_id] = kind
-        return kind

Removed: zorg/trunk/lnt/lnt/db/runinfo.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/db/runinfo.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/db/runinfo.py (original)
+++ zorg/trunk/lnt/lnt/db/runinfo.py (removed)
@@ -1,259 +0,0 @@
-from lnt.util import stats
-from lnt.server.ui import util
-from lnt.db.perfdb import Sample
-from lnt.testing import PASS, FAIL, XFAIL
-
-REGRESSED = 'REGRESSED'
-IMPROVED = 'IMPROVED'
-UNCHANGED_PASS = 'UNCHANGED_PASS'
-UNCHANGED_FAIL = 'UNCHANGED_FAIL'
-
-class ComparisonResult:
-    def __init__(self, cur_value, prev_value, delta, pct_delta, stddev, MAD,
-                 cur_failed, prev_failed, samples, stddev_mean = None,
-                 stddev_is_estimated = False):
-        self.current = cur_value
-        self.previous = prev_value
-        self.delta = delta
-        self.pct_delta = pct_delta
-        self.stddev = stddev
-        self.MAD = MAD
-        self.failed = cur_failed
-        self.prev_failed = prev_failed
-        self.samples = samples
-        self.stddev_mean = stddev_mean
-        self.stddev_is_estimated = stddev_is_estimated
-
-    def get_samples(self):
-        return self.samples
-
-    def get_test_status(self):
-        # Compute the comparison status for the test success.
-        if self.failed:
-            if self.prev_failed:
-                return UNCHANGED_FAIL
-            else:
-                return REGRESSED
-        else:
-            if self.prev_failed:
-                return IMPROVED
-            else:
-                return UNCHANGED_PASS
-
-    def get_value_status(self, confidence_interval=2.576,
-                         value_precision=0.0001, ignore_small=True):
-        if self.current is None or self.previous is None:
-            return None
-
-        # Don't report value errors for tests which fail, or which just started
-        # passing.
-        #
-        # FIXME: One bug here is that we risk losing performance data on tests
-        # which flop to failure then back. What would be nice to do here is to
-        # find the last value in a passing run, or to move to using proper keyed
-        # reference runs.
-        if self.failed:
-            return UNCHANGED_FAIL
-        elif self.prev_failed:
-            return UNCHANGED_PASS
-
-        # Ignore tests whose delt is too small relative to the precision we can
-        # sample at; otherwise quantization means that we can't measure the
-        # standard deviation with enough accuracy.
-        if abs(self.delta) <= 2 * value_precision * confidence_interval:
-            return UNCHANGED_PASS
-
-        # Always ignore percentage changes below 1%, for now, we just don't have
-        # enough time to investigate that level of stuff.
-        if ignore_small and abs(self.pct_delta) < .01:
-            return UNCHANGED_PASS
-
-        # Always ignore changes with small deltas. There is no mathematical
-        # basis for this, it should be obviated by appropriate statistical
-        # checks, but practical evidence indicates what we currently have isn't
-        # good enough (for reasons I do not yet understand).
-        if ignore_small and abs(self.delta) < .01:
-            return UNCHANGED_PASS
-
-        # If we have a comparison window, then measure using a symmetic
-        # confidence interval.
-        if self.stddev is not None:
-            is_significant = abs(self.delta) > (self.stddev *
-                                                confidence_interval)
-
-            # If the stddev is estimated, then it is also only significant if
-            # the delta from the estimate mean is above the confidence interval.
-            if self.stddev_is_estimated:
-                is_significant &= (abs(self.current - self.stddev_mean) >
-                                   self.stddev * confidence_interval)
-
-            # If the delta is significant, return 
-            if is_significant:
-                if self.delta < 0:
-                    return IMPROVED
-                else:
-                    return REGRESSED
-            else:
-                return UNCHANGED_PASS
-
-        # Otherwise, report any changes above 0.2%, which is a rough
-        # approximation for the smallest change we expect "could" be measured
-        # accurately.
-        if abs(self.pct_delta) >= .002:
-            if self.pct_delta < 0:
-                return IMPROVED
-            else:
-                return REGRESSED
-        else:
-            return UNCHANGED_PASS
-
-class SimpleRunInfo:
-    def __init__(self, db, test_suite_summary):
-        self.db = db
-        self.test_suite_summary = test_suite_summary
-
-        self.sample_map = util.multidict()
-        self.loaded_samples = set()
-
-    def get_test_status_in_run(self, run_id, status_kind, test_name, pset):
-        if status_kind == False: # .success
-            status_name = test_name + '.success'
-            status_test_id = self.test_suite_summary.test_id_map.get(
-                (status_name, pset))
-            run_status = self.sample_map.get((run_id, status_test_id))
-            if run_status and int(run_status[0]) == 1:
-                return PASS
-            else:
-                return FAIL
-        else:
-            status_name = test_name + '.status'
-            status_test_id = self.test_suite_summary.test_id_map.get(
-                (status_name, pset))
-            run_status = self.sample_map.get((run_id, status_test_id))
-            if not run_status:
-                return PASS
-            else:
-                # FIXME: What to do about the multiple entries here. We could
-                # start by just treating non-matching samples as errors.
-                return int(run_status[0])
-
-    def get_run_comparison_result(self, run, run_status_kind,
-                                  compare_to, compare_to_status_kind,
-                                  test_name, pset, comparison_window=[]):
-        # Get the test.
-        test_id = self.test_suite_summary.test_id_map.get((test_name, pset))
-        if test_id is None:
-            return ComparisonResult(run_value=None, prev_value=None, delta=None,
-                                    pct_delta=None, stddev=None, MAD=None,
-                                    cur_failed=None, prev_failed=None,
-                                    samples=[])
-
-        # Load the sample data for the current and previous runs and the
-        # comparison window.
-        if compare_to is None:
-            compare_id = None
-        else:
-            compare_id = compare_to.id
-        runs_to_load = set(comparison_window)
-        runs_to_load.add(run.id)
-        if compare_id is not None:
-            runs_to_load.add(compare_id)
-        self._load_samples_for_runs(runs_to_load)
-
-        # Lookup the current and previous values.
-        run_values = self.sample_map.get((run.id, test_id))
-        prev_values = self.sample_map.get((compare_id, test_id))
-
-        # Determine whether this (test,pset) passed or failed in the current and
-        # previous runs.
-        run_failed = prev_failed = False
-        run_status = prev_status = None
-        run_status = self.get_test_status_in_run(
-            run.id, run_status_kind, test_name, pset)
-        if compare_to:
-            prev_status = self.get_test_status_in_run(
-                compare_to.id, compare_to_status_kind, test_name, pset)
-        else:
-            prev_status = None
-
-        # FIXME: Support XFAILs better.
-        run_failed = run_status == FAIL
-        prev_failed = prev_status == FAIL
-
-        # Get the current and previous values.
-        if run_values:
-            run_value = min(run_values)
-        else:
-            run_value = None
-        if prev_values:
-            prev_value = min(prev_values)
-        else:
-            prev_value = None
-
-        # If we have multiple values for this run, use that to estimate the
-        # distribution.
-        if run_values and len(run_values) > 1:
-            stddev = stats.standard_deviation(run_values)
-            MAD = stats.median_absolute_deviation(run_values)
-            stddev_mean = stats.mean(run_values)
-            stddev_is_estimated = False
-        else:
-            stddev = None
-            MAD = None
-            stddev_mean = None
-            stddev_is_estimated = False
-
-        # If we are missing current or comparison values we are done.
-        if run_value is None or prev_value is None:
-            return ComparisonResult(
-                run_value, prev_value, delta=None,
-                pct_delta = None, stddev = stddev, MAD = MAD,
-                cur_failed = run_failed, prev_failed = prev_failed,
-                samples = run_values)
-
-        # Compute the comparison status for the test value.
-        delta = run_value - prev_value
-        if prev_value != 0:
-            pct_delta = delta / prev_value
-        else:
-            pct_delta = 0.0
-
-        # If we don't have an estimate for the distribution, attempt to "guess"
-        # it using the comparison window.
-        #
-        # FIXME: We can substantially improve the algorithm for guessing the
-        # noise level from a list of values. Probably better to just find a way
-        # to kill this code though.
-        if stddev is None:
-            # Get all previous values in the comparison window, for passing
-            # runs.
-            #
-            # FIXME: This is using the wrong status kind. :/
-            prev_values = [v for run_id in comparison_window
-                           for v in self.sample_map.get((run_id, test_id), ())
-                           if self.get_test_status_in_run(
-                    run_id, run_status_kind, test_name, pset) == PASS]
-            if prev_values:
-                stddev = stats.standard_deviation(prev_values)
-                MAD = stats.median_absolute_deviation(prev_values)
-                stddev_mean = stats.mean(prev_values)
-                stddev_is_estimated = True
-
-        return ComparisonResult(run_value, prev_value, delta,
-                                pct_delta, stddev, MAD,
-                                run_failed, prev_failed, run_values,
-                                stddev_mean, stddev_is_estimated)
-
-    def _load_samples_for_runs(self, runs):
-        # Find the set of new runs to load.
-        to_load = set(runs) - self.loaded_samples
-        if not to_load:
-            return
-
-        q = self.db.session.query(Sample.value, Sample.run_id, Sample.test_id)
-        q = q.filter(Sample.run_id.in_(to_load))
-        for value,run_id,test_id in q:
-            self.sample_map[(run_id,test_id)] = value
-
-        self.loaded_samples |= to_load
-

Removed: zorg/trunk/lnt/lnt/external/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/external/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/external/__init__.py (original)
+++ zorg/trunk/lnt/lnt/external/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/external/stats/README.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/external/stats/README.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/external/stats/README.txt (original)
+++ zorg/trunk/lnt/lnt/external/stats/README.txt (removed)
@@ -1,3 +0,0 @@
-This directory contains some useful statistics modules from Gary Strangman. They
-are more easily available inside SciPy, but we don't want to introduce a
-dependency onto SciPy solely for this functionality.

Removed: zorg/trunk/lnt/lnt/external/stats/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/external/stats/__init__.py?rev=156009&view=auto
==============================================================================
    (empty)

Removed: zorg/trunk/lnt/lnt/external/stats/pstat.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/external/stats/pstat.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/external/stats/pstat.py (original)
+++ zorg/trunk/lnt/lnt/external/stats/pstat.py (removed)
@@ -1,1066 +0,0 @@
-# Copyright (c) 1999-2007 Gary Strangman; All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-# Comments and/or additions are welcome (send e-mail to:
-# strang at nmr.mgh.harvard.edu).
-# 
-"""
-pstat.py module
-
-#################################################
-#######  Written by:  Gary Strangman  ###########
-#######  Last modified:  Dec 18, 2007 ###########
-#################################################
-
-This module provides some useful list and array manipulation routines
-modeled after those found in the |Stat package by Gary Perlman, plus a
-number of other useful list/file manipulation functions.  The list-based
-functions include:
-
-      abut (source,*args)
-      simpleabut (source, addon)
-      colex (listoflists,cnums)
-      collapse (listoflists,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
-      dm (listoflists,criterion)
-      flat (l)
-      linexand (listoflists,columnlist,valuelist)
-      linexor (listoflists,columnlist,valuelist)
-      linedelimited (inlist,delimiter)
-      lineincols (inlist,colsize) 
-      lineincustcols (inlist,colsizes)
-      list2string (inlist)
-      makelol(inlist)
-      makestr(x)
-      printcc (lst,extra=2)
-      printincols (listoflists,colsize)
-      pl (listoflists)
-      printl(listoflists)
-      replace (lst,oldval,newval)
-      recode (inlist,listmap,cols='all')
-      remap (listoflists,criterion)
-      roundlist (inlist,num_digits_to_round_floats_to)
-      sortby(listoflists,sortcols)
-      unique (inlist)
-      duplicates(inlist)
-      writedelimited (listoflists, delimiter, file, writetype='w')
-
-Some of these functions have alternate versions which are defined only if
-Numeric (NumPy) can be imported.  These functions are generally named as
-above, with an 'a' prefix.
-
-      aabut (source, *args)
-      acolex (a,indices,axis=1)
-      acollapse (a,keepcols,collapsecols,sterr=0,ns=0)
-      adm (a,criterion)
-      alinexand (a,columnlist,valuelist)
-      alinexor (a,columnlist,valuelist)
-      areplace (a,oldval,newval)
-      arecode (a,listmap,col='all')
-      arowcompare (row1, row2)
-      arowsame (row1, row2)
-      asortrows(a,axis=0)
-      aunique(inarray)
-      aduplicates(inarray)
-
-Currently, the code is all but completely un-optimized.  In many cases, the
-array versions of functions amount simply to aliases to built-in array
-functions/methods.  Their inclusion here is for function name consistency.
-"""
-
-## CHANGE LOG:
-## ==========
-## 07-11-26 ... edited to work with numpy
-## 01-11-15 ... changed list2string() to accept a delimiter
-## 01-06-29 ... converted exec()'s to eval()'s to make compatible with Py2.1
-## 01-05-31 ... added duplicates() and aduplicates() functions
-## 00-12-28 ... license made GPL, docstring and import requirements
-## 99-11-01 ... changed version to 0.3
-## 99-08-30 ... removed get, getstrings, put, aget, aput (into io.py)
-## 03/27/99 ... added areplace function, made replace fcn recursive
-## 12/31/98 ... added writefc function for ouput to fixed column sizes
-## 12/07/98 ... fixed import problem (failed on collapse() fcn)
-##              added __version__ variable (now 0.2)
-## 12/05/98 ... updated doc-strings
-##              added features to collapse() function
-##              added flat() function for lists
-##              fixed a broken asortrows() 
-## 11/16/98 ... fixed minor bug in aput for 1D arrays
-##
-## 11/08/98 ... fixed aput to output large arrays correctly
-
-import stats  # required 3rd party module
-import string, copy
-from types import *
-
-__version__ = 0.4
-
-###===========================  LIST FUNCTIONS  ==========================
-###
-### Here are the list functions, DEFINED FOR ALL SYSTEMS.
-### Array functions (for NumPy-enabled computers) appear below.
-###
-
-def abut (source,*args):
-    """
-Like the |Stat abut command.  It concatenates two lists side-by-side
-and returns the result.  '2D' lists are also accomodated for either argument
-(source or addon).  CAUTION:  If one list is shorter, it will be repeated
-until it is as long as the longest list.  If this behavior is not desired,
-use pstat.simpleabut().
-
-Usage:   abut(source, args)   where args=any # of lists
-Returns: a list of lists as long as the LONGEST list past, source on the
-         'left', lists in <args> attached consecutively on the 'right'
-"""
-
-    if type(source) not in [ListType,TupleType]:
-        source = [source]
-    for addon in args:
-        if type(addon) not in [ListType,TupleType]:
-            addon = [addon]
-        if len(addon) < len(source):                # is source list longer?
-            if len(source) % len(addon) == 0:        # are they integer multiples?
-                repeats = len(source)/len(addon)    # repeat addon n times
-                origadd = copy.deepcopy(addon)
-                for i in range(repeats-1):
-                    addon = addon + origadd
-            else:
-                repeats = len(source)/len(addon)+1  # repeat addon x times,
-                origadd = copy.deepcopy(addon)      #    x is NOT an integer
-                for i in range(repeats-1):
-                    addon = addon + origadd
-                    addon = addon[0:len(source)]
-        elif len(source) < len(addon):                # is addon list longer?
-            if len(addon) % len(source) == 0:        # are they integer multiples?
-                repeats = len(addon)/len(source)    # repeat source n times
-                origsour = copy.deepcopy(source)
-                for i in range(repeats-1):
-                    source = source + origsour
-            else:
-                repeats = len(addon)/len(source)+1  # repeat source x times,
-                origsour = copy.deepcopy(source)    #   x is NOT an integer
-                for i in range(repeats-1):
-                    source = source + origsour
-                source = source[0:len(addon)]
-
-        source = simpleabut(source,addon)
-    return source
-
-
-def simpleabut (source, addon):
-    """
-Concatenates two lists as columns and returns the result.  '2D' lists
-are also accomodated for either argument (source or addon).  This DOES NOT
-repeat either list to make the 2 lists of equal length.  Beware of list pairs
-with different lengths ... the resulting list will be the length of the
-FIRST list passed.
-
-Usage:   simpleabut(source,addon)  where source, addon=list (or list-of-lists)
-Returns: a list of lists as long as source, with source on the 'left' and
-                 addon on the 'right'
-"""
-    if type(source) not in [ListType,TupleType]:
-        source = [source]
-    if type(addon) not in [ListType,TupleType]:
-        addon = [addon]
-    minlen = min(len(source),len(addon))
-    list = copy.deepcopy(source)                # start abut process
-    if type(source[0]) not in [ListType,TupleType]:
-        if type(addon[0]) not in [ListType,TupleType]:
-            for i in range(minlen):
-                list[i] = [source[i]] + [addon[i]]        # source/addon = column
-        else:
-            for i in range(minlen):
-                list[i] = [source[i]] + addon[i]        # addon=list-of-lists
-    else:
-        if type(addon[0]) not in [ListType,TupleType]:
-            for i in range(minlen):
-                list[i] = source[i] + [addon[i]]        # source=list-of-lists
-        else:
-            for i in range(minlen):
-                list[i] = source[i] + addon[i]        # source/addon = list-of-lists
-    source = list
-    return source
-
-
-def colex (listoflists,cnums):
-    """
-Extracts from listoflists the columns specified in the list 'cnums'
-(cnums can be an integer, a sequence of integers, or a string-expression that
-corresponds to a slice operation on the variable x ... e.g., 'x[3:]' will colex
-columns 3 onward from the listoflists).
-
-Usage:   colex (listoflists,cnums)
-Returns: a list-of-lists corresponding to the columns from listoflists
-         specified by cnums, in the order the column numbers appear in cnums
-"""
-    global index
-    column = 0
-    if type(cnums) in [ListType,TupleType]:   # if multiple columns to get
-        index = cnums[0]
-        column = map(lambda x: x[index], listoflists)
-        for col in cnums[1:]:
-            index = col
-            column = abut(column,map(lambda x: x[index], listoflists))
-    elif type(cnums) == StringType:              # if an 'x[3:]' type expr.
-        evalstring = 'map(lambda x: x'+cnums+', listoflists)'
-        column = eval(evalstring)
-    else:                                     # else it's just 1 col to get
-        index = cnums
-        column = map(lambda x: x[index], listoflists)
-    return column
-
-
-def collapse (listoflists,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None):
-     """
-Averages data in collapsecol, keeping all unique items in keepcols
-(using unique, which keeps unique LISTS of column numbers), retaining the
-unique sets of values in keepcols, the mean for each.  Setting fcn1
-and/or fcn2 to point to a function rather than None (e.g., stats.sterr, len)
-will append those results (e.g., the sterr, N) after each calculated mean.
-cfcn is the collapse function to apply (defaults to mean, defined here in the
-pstat module to avoid circular imports with stats.py, but harmonicmean or
-others could be passed).
-
-Usage:    collapse (listoflists,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
-Returns: a list of lists with all unique permutations of entries appearing in
-     columns ("conditions") specified by keepcols, abutted with the result of
-     cfcn (if cfcn=None, defaults to the mean) of each column specified by
-     collapsecols.
-"""
-     def collmean (inlist):
-         s = 0
-         for item in inlist:
-             s = s + item
-         return s/float(len(inlist))
-
-     if type(keepcols) not in [ListType,TupleType]:
-         keepcols = [keepcols]
-     if type(collapsecols) not in [ListType,TupleType]:
-         collapsecols = [collapsecols]
-     if cfcn == None:
-         cfcn = collmean
-     if keepcols == []:
-         means = [0]*len(collapsecols)
-         for i in range(len(collapsecols)):
-             avgcol = colex(listoflists,collapsecols[i])
-             means[i] = cfcn(avgcol)
-             if fcn1:
-                 try:
-                     test = fcn1(avgcol)
-                 except:
-                     test = 'N/A'
-                     means[i] = [means[i], test]
-             if fcn2:
-                 try:
-                     test = fcn2(avgcol)
-                 except:
-                     test = 'N/A'
-                 try:
-                     means[i] = means[i] + [len(avgcol)]
-                 except TypeError:
-                     means[i] = [means[i],len(avgcol)]
-         return means
-     else:
-         values = colex(listoflists,keepcols)
-         uniques = unique(values)
-         uniques.sort()
-         newlist = []
-         if type(keepcols) not in [ListType,TupleType]:  keepcols = [keepcols]
-         for item in uniques:
-             if type(item) not in [ListType,TupleType]:  item =[item]
-             tmprows = linexand(listoflists,keepcols,item)
-             for col in collapsecols:
-                 avgcol = colex(tmprows,col)
-                 item.append(cfcn(avgcol))
-                 if fcn1 <> None:
-                     try:
-                         test = fcn1(avgcol)
-                     except:
-                         test = 'N/A'
-                     item.append(test)
-                 if fcn2 <> None:
-                     try:
-                         test = fcn2(avgcol)
-                     except:
-                         test = 'N/A'
-                     item.append(test)
-                 newlist.append(item)
-         return newlist
-
-
-def dm (listoflists,criterion):
-    """
-Returns rows from the passed list of lists that meet the criteria in
-the passed criterion expression (a string as a function of x; e.g., 'x[3]>=9'
-will return all rows where the 4th column>=9 and "x[2]=='N'" will return rows
-with column 2 equal to the string 'N').
-
-Usage:   dm (listoflists, criterion)
-Returns: rows from listoflists that meet the specified criterion.
-"""
-    function = 'filter(lambda x: '+criterion+',listoflists)'
-    lines = eval(function)
-    return lines
-
-
-def flat(l):
-    """
-Returns the flattened version of a '2D' list.  List-correlate to the a.ravel()()
-method of NumPy arrays.
-
-Usage:    flat(l)
-"""
-    newl = []
-    for i in range(len(l)):
-        for j in range(len(l[i])):
-            newl.append(l[i][j])
-    return newl
-
-
-def linexand (listoflists,columnlist,valuelist):
-    """
-Returns the rows of a list of lists where col (from columnlist) = val
-(from valuelist) for EVERY pair of values (columnlist[i],valuelists[i]).
-len(columnlist) must equal len(valuelist).
-
-Usage:   linexand (listoflists,columnlist,valuelist)
-Returns: the rows of listoflists where columnlist[i]=valuelist[i] for ALL i
-"""
-    if type(columnlist) not in [ListType,TupleType]:
-        columnlist = [columnlist]
-    if type(valuelist) not in [ListType,TupleType]:
-        valuelist = [valuelist]
-    criterion = ''
-    for i in range(len(columnlist)):
-        if type(valuelist[i])==StringType:
-            critval = '\'' + valuelist[i] + '\''
-        else:
-            critval = str(valuelist[i])
-        criterion = criterion + ' x['+str(columnlist[i])+']=='+critval+' and'
-    criterion = criterion[0:-3]         # remove the "and" after the last crit
-    function = 'filter(lambda x: '+criterion+',listoflists)'
-    lines = eval(function)
-    return lines
-
-
-def linexor (listoflists,columnlist,valuelist):
-    """
-Returns the rows of a list of lists where col (from columnlist) = val
-(from valuelist) for ANY pair of values (colunmlist[i],valuelist[i[).
-One value is required for each column in columnlist.  If only one value
-exists for columnlist but multiple values appear in valuelist, the
-valuelist values are all assumed to pertain to the same column.
-
-Usage:   linexor (listoflists,columnlist,valuelist)
-Returns: the rows of listoflists where columnlist[i]=valuelist[i] for ANY i
-"""
-    if type(columnlist) not in [ListType,TupleType]:
-        columnlist = [columnlist]
-    if type(valuelist) not in [ListType,TupleType]:
-        valuelist = [valuelist]
-    criterion = ''
-    if len(columnlist) == 1 and len(valuelist) > 1:
-        columnlist = columnlist*len(valuelist)
-    for i in range(len(columnlist)):          # build an exec string
-        if type(valuelist[i])==StringType:
-            critval = '\'' + valuelist[i] + '\''
-        else:
-            critval = str(valuelist[i])
-        criterion = criterion + ' x['+str(columnlist[i])+']=='+critval+' or'
-    criterion = criterion[0:-2]         # remove the "or" after the last crit
-    function = 'filter(lambda x: '+criterion+',listoflists)'
-    lines = eval(function)
-    return lines
-
-
-def linedelimited (inlist,delimiter):
-    """
-Returns a string composed of elements in inlist, with each element
-separated by 'delimiter.'  Used by function writedelimited.  Use '\t'
-for tab-delimiting.
-
-Usage:   linedelimited (inlist,delimiter)
-"""
-    outstr = ''
-    for item in inlist:
-        if type(item) <> StringType:
-            item = str(item)
-        outstr = outstr + item + delimiter
-    outstr = outstr[0:-1]
-    return outstr
-
-
-def lineincols (inlist,colsize):
-    """
-Returns a string composed of elements in inlist, with each element
-right-aligned in columns of (fixed) colsize.
-
-Usage:   lineincols (inlist,colsize)   where colsize is an integer
-"""
-    outstr = ''
-    for item in inlist:
-        if type(item) <> StringType:
-            item = str(item)
-        size = len(item)
-        if size <= colsize:
-            for i in range(colsize-size):
-                outstr = outstr + ' '
-            outstr = outstr + item
-        else:
-            outstr = outstr + item[0:colsize+1]
-    return outstr
-
-
-def lineincustcols (inlist,colsizes):
-    """
-Returns a string composed of elements in inlist, with each element
-right-aligned in a column of width specified by a sequence colsizes.  The
-length of colsizes must be greater than or equal to the number of columns
-in inlist.
-
-Usage:   lineincustcols (inlist,colsizes)
-Returns: formatted string created from inlist
-"""
-    outstr = ''
-    for i in range(len(inlist)):
-        if type(inlist[i]) <> StringType:
-            item = str(inlist[i])
-        else:
-            item = inlist[i]
-        size = len(item)
-        if size <= colsizes[i]:
-            for j in range(colsizes[i]-size):
-                outstr = outstr + ' '
-            outstr = outstr + item
-        else:
-            outstr = outstr + item[0:colsizes[i]+1]
-    return outstr
-
-
-def list2string (inlist,delimit=' '):
-    """
-Converts a 1D list to a single long string for file output, using
-the string.join function.
-
-Usage:   list2string (inlist,delimit=' ')
-Returns: the string created from inlist
-"""
-    stringlist = map(makestr,inlist)
-    return string.join(stringlist,delimit)
-
-
-def makelol(inlist):
-    """
-Converts a 1D list to a 2D list (i.e., a list-of-lists).  Useful when you
-want to use put() to write a 1D list one item per line in the file.
-
-Usage:   makelol(inlist)
-Returns: if l = [1,2,'hi'] then returns [[1],[2],['hi']] etc.
-"""
-    x = []
-    for item in inlist:
-        x.append([item])
-    return x
-
-
-def makestr (x):
-    if type(x) <> StringType:
-        x = str(x)
-    return x
-
-
-def printcc (lst,extra=2):
-    """
-Prints a list of lists in columns, customized by the max size of items
-within the columns (max size of items in col, plus 'extra' number of spaces).
-Use 'dashes' or '\\n' in the list-of-lists to print dashes or blank lines,
-respectively.
-
-Usage:   printcc (lst,extra=2)
-Returns: None
-"""
-    if type(lst[0]) not in [ListType,TupleType]:
-        lst = [lst]
-    rowstokill = []
-    list2print = copy.deepcopy(lst)
-    for i in range(len(lst)):
-        if lst[i] == ['\n'] or lst[i]=='\n' or lst[i]=='dashes' or lst[i]=='' or lst[i]==['']:
-            rowstokill = rowstokill + [i]
-    rowstokill.reverse()   # delete blank rows from the end
-    for row in rowstokill:
-        del list2print[row]
-    maxsize = [0]*len(list2print[0])
-    for col in range(len(list2print[0])):
-        items = colex(list2print,col)
-        items = map(makestr,items)
-        maxsize[col] = max(map(len,items)) + extra
-    for row in lst:
-        if row == ['\n'] or row == '\n' or row == '' or row == ['']:
-            print
-        elif row == ['dashes'] or row == 'dashes':
-            dashes = [0]*len(maxsize)
-            for j in range(len(maxsize)):
-                dashes[j] = '-'*(maxsize[j]-2)
-            print lineincustcols(dashes,maxsize)
-        else:
-            print lineincustcols(row,maxsize)
-    return None
-
-
-def printincols (listoflists,colsize):
-    """
-Prints a list of lists in columns of (fixed) colsize width, where
-colsize is an integer.
-
-Usage:   printincols (listoflists,colsize)
-Returns: None
-"""
-    for row in listoflists:
-        print lineincols(row,colsize)
-    return None
-
-
-def pl (listoflists):
-    """
-Prints a list of lists, 1 list (row) at a time.
-
-Usage:   pl(listoflists)
-Returns: None
-"""
-    for row in listoflists:
-        if row[-1] == '\n':
-            print row,
-        else:
-            print row
-    return None
-
-
-def printl(listoflists):
-    """Alias for pl."""
-    pl(listoflists)
-    return
-
-
-def replace (inlst,oldval,newval):
-    """
-Replaces all occurrences of 'oldval' with 'newval', recursively.
-
-Usage:   replace (inlst,oldval,newval)
-"""
-    lst = inlst*1
-    for i in range(len(lst)):
-        if type(lst[i]) not in [ListType,TupleType]:
-            if lst[i]==oldval: lst[i]=newval
-        else:
-            lst[i] = replace(lst[i],oldval,newval)
-    return lst
-
-
-def recode (inlist,listmap,cols=None):
-    """
-Changes the values in a list to a new set of values (useful when
-you need to recode data from (e.g.) strings to numbers.  cols defaults
-to None (meaning all columns are recoded).
-
-Usage:   recode (inlist,listmap,cols=None)  cols=recode cols, listmap=2D list
-Returns: inlist with the appropriate values replaced with new ones
-"""
-    lst = copy.deepcopy(inlist)
-    if cols != None:
-        if type(cols) not in [ListType,TupleType]:
-            cols = [cols]
-        for col in cols:
-            for row in range(len(lst)):
-                try:
-                    idx = colex(listmap,0).index(lst[row][col])
-                    lst[row][col] = listmap[idx][1]
-                except ValueError:
-                    pass
-    else:
-        for row in range(len(lst)):
-            for col in range(len(lst)):
-                try:
-                    idx = colex(listmap,0).index(lst[row][col])
-                    lst[row][col] = listmap[idx][1]
-                except ValueError:
-                    pass
-    return lst
-
-
-def remap (listoflists,criterion):
-    """
-Remaps values in a given column of a 2D list (listoflists).  This requires
-a criterion as a function of 'x' so that the result of the following is
-returned ... map(lambda x: 'criterion',listoflists).  
-
-Usage:   remap(listoflists,criterion)    criterion=string
-Returns: remapped version of listoflists
-"""
-    function = 'map(lambda x: '+criterion+',listoflists)'
-    lines = eval(function)
-    return lines
-
-
-def roundlist (inlist,digits):
-    """
-Goes through each element in a 1D or 2D inlist, and applies the following
-function to all elements of FloatType ... round(element,digits).
-
-Usage:   roundlist(inlist,digits)
-Returns: list with rounded floats
-"""
-    if type(inlist[0]) in [IntType, FloatType]:
-        inlist = [inlist]
-    l = inlist*1
-    for i in range(len(l)):
-        for j in range(len(l[i])):
-            if type(l[i][j])==FloatType:
-                l[i][j] = round(l[i][j],digits)
-    return l
-
-
-def sortby(listoflists,sortcols):
-    """
-Sorts a list of lists on the column(s) specified in the sequence
-sortcols.
-
-Usage:   sortby(listoflists,sortcols)
-Returns: sorted list, unchanged column ordering
-"""
-    newlist = abut(colex(listoflists,sortcols),listoflists)
-    newlist.sort()
-    try:
-        numcols = len(sortcols)
-    except TypeError:
-        numcols = 1
-    crit = '[' + str(numcols) + ':]'
-    newlist = colex(newlist,crit)
-    return newlist
-
-
-def unique (inlist):
-    """
-Returns all unique items in the passed list.  If the a list-of-lists
-is passed, unique LISTS are found (i.e., items in the first dimension are
-compared).
-
-Usage:   unique (inlist)
-Returns: the unique elements (or rows) in inlist
-"""
-    uniques = []
-    for item in inlist:
-        if item not in uniques:
-            uniques.append(item)
-    return uniques
-
-def duplicates(inlist):
-    """
-Returns duplicate items in the FIRST dimension of the passed list.
-
-Usage:   duplicates (inlist)
-"""
-    dups = []
-    for i in range(len(inlist)):
-        if inlist[i] in inlist[i+1:]:
-            dups.append(inlist[i])
-    return dups
-
-
-def nonrepeats(inlist):
-    """
-Returns items that are NOT duplicated in the first dim of the passed list.
-
-Usage:   nonrepeats (inlist)
-"""
-    nonrepeats = []
-    for i in range(len(inlist)):
-        if inlist.count(inlist[i]) == 1:
-            nonrepeats.append(inlist[i])
-    return nonrepeats
-
-
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-#===================   PSTAT ARRAY FUNCTIONS  =====================
-
-try:                         # DEFINE THESE *ONLY* IF numpy IS AVAILABLE
- import numpy as N
-
- def aabut (source, *args):
-    """
-Like the |Stat abut command.  It concatenates two arrays column-wise
-and returns the result.  CAUTION:  If one array is shorter, it will be
-repeated until it is as long as the other.
-
-Usage:   aabut (source, args)    where args=any # of arrays
-Returns: an array as long as the LONGEST array past, source appearing on the
-         'left', arrays in <args> attached on the 'right'.
-"""
-    if len(source.shape)==1:
-        width = 1
-        source = N.resize(source,[source.shape[0],width])
-    else:
-        width = source.shape[1]
-    for addon in args:
-        if len(addon.shape)==1:
-            width = 1
-            addon = N.resize(addon,[source.shape[0],width])
-        else:
-            width = source.shape[1]
-        if len(addon) < len(source):
-            addon = N.resize(addon,[source.shape[0],addon.shape[1]])
-        elif len(source) < len(addon):
-            source = N.resize(source,[addon.shape[0],source.shape[1]])
-        source = N.concatenate((source,addon),1)
-    return source
-
-
- def acolex (a,indices,axis=1):
-    """
-Extracts specified indices (a list) from passed array, along passed
-axis (column extraction is default).  BEWARE: A 1D array is presumed to be a
-column-array (and that the whole array will be returned as a column).
-
-Usage:   acolex (a,indices,axis=1)
-Returns: the columns of a specified by indices
-"""
-    if type(indices) not in [ListType,TupleType,N.ndarray]:
-        indices = [indices]
-    if len(N.shape(a)) == 1:
-        cols = N.resize(a,[a.shape[0],1])
-    else:
-        cols = N.take(a,indices,axis)
-    return cols
-
-
- def acollapse (a,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None):
-    """
-Averages data in collapsecol, keeping all unique items in keepcols
-(using unique, which keeps unique LISTS of column numbers), retaining
-the unique sets of values in keepcols, the mean for each.  If stderror or
-N of the mean are desired, set either or both parameters to 1.
-
-Usage:   acollapse (a,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
-Returns: unique 'conditions' specified by the contents of columns specified
-         by keepcols, abutted with the mean(s) of column(s) specified by
-         collapsecols
-"""
-    def acollmean (inarray):
-        return N.sum(N.ravel(inarray))
-
-    if type(keepcols) not in [ListType,TupleType,N.ndarray]:
-        keepcols = [keepcols]
-    if type(collapsecols) not in [ListType,TupleType,N.ndarray]:
-        collapsecols = [collapsecols]
-
-    if cfcn == None:
-        cfcn = acollmean
-    if keepcols == []:
-        avgcol = acolex(a,collapsecols)
-        means = N.sum(avgcol)/float(len(avgcol))
-        if fcn1<>None:
-            try:
-                test = fcn1(avgcol)
-            except:
-                test = N.array(['N/A']*len(means))
-            means = aabut(means,test)
-        if fcn2<>None:
-            try:
-                test = fcn2(avgcol)
-            except:
-                test = N.array(['N/A']*len(means))
-            means = aabut(means,test)
-        return means
-    else:
-        if type(keepcols) not in [ListType,TupleType,N.ndarray]:
-            keepcols = [keepcols]
-        values = colex(a,keepcols)   # so that "item" can be appended (below)
-        uniques = unique(values)  # get a LIST, so .sort keeps rows intact
-        uniques.sort()
-        newlist = []
-        for item in uniques:
-            if type(item) not in [ListType,TupleType,N.ndarray]:
-                item =[item]
-            tmprows = alinexand(a,keepcols,item)
-            for col in collapsecols:
-                avgcol = acolex(tmprows,col)
-                item.append(acollmean(avgcol))
-                if fcn1<>None:
-                    try:
-                        test = fcn1(avgcol)
-                    except:
-                        test = 'N/A'
-                    item.append(test)
-                if fcn2<>None:
-                    try:
-                        test = fcn2(avgcol)
-                    except:
-                        test = 'N/A'
-                    item.append(test)
-                newlist.append(item)
-        try:
-            new_a = N.array(newlist)
-        except TypeError:
-            new_a = N.array(newlist,'O')
-        return new_a
-
-
- def adm (a,criterion):
-    """
-Returns rows from the passed list of lists that meet the criteria in
-the passed criterion expression (a string as a function of x).
-
-Usage:   adm (a,criterion)   where criterion is like 'x[2]==37'
-"""
-    function = 'filter(lambda x: '+criterion+',a)'
-    lines = eval(function)
-    try:
-        lines = N.array(lines)
-    except:
-        lines = N.array(lines,dtype='O')
-    return lines
-
-
- def isstring(x):
-    if type(x)==StringType:
-        return 1
-    else:
-        return 0
-
-
- def alinexand (a,columnlist,valuelist):
-    """
-Returns the rows of an array where col (from columnlist) = val
-(from valuelist).  One value is required for each column in columnlist.
-
-Usage:   alinexand (a,columnlist,valuelist)
-Returns: the rows of a where columnlist[i]=valuelist[i] for ALL i
-"""
-    if type(columnlist) not in [ListType,TupleType,N.ndarray]:
-        columnlist = [columnlist]
-    if type(valuelist) not in [ListType,TupleType,N.ndarray]:
-        valuelist = [valuelist]
-    criterion = ''
-    for i in range(len(columnlist)):
-        if type(valuelist[i])==StringType:
-            critval = '\'' + valuelist[i] + '\''
-        else:
-            critval = str(valuelist[i])
-        criterion = criterion + ' x['+str(columnlist[i])+']=='+critval+' and'
-    criterion = criterion[0:-3]         # remove the "and" after the last crit
-    return adm(a,criterion)
-
-
- def alinexor (a,columnlist,valuelist):
-    """
-Returns the rows of an array where col (from columnlist) = val (from
-valuelist).  One value is required for each column in columnlist.
-The exception is if either columnlist or valuelist has only 1 value,
-in which case that item will be expanded to match the length of the
-other list.
-
-Usage:   alinexor (a,columnlist,valuelist)
-Returns: the rows of a where columnlist[i]=valuelist[i] for ANY i
-"""
-    if type(columnlist) not in [ListType,TupleType,N.ndarray]:
-        columnlist = [columnlist]
-    if type(valuelist) not in [ListType,TupleType,N.ndarray]:
-        valuelist = [valuelist]
-    criterion = ''
-    if len(columnlist) == 1 and len(valuelist) > 1:
-        columnlist = columnlist*len(valuelist)
-    elif len(valuelist) == 1 and len(columnlist) > 1:
-        valuelist = valuelist*len(columnlist)
-    for i in range(len(columnlist)):
-        if type(valuelist[i])==StringType:
-            critval = '\'' + valuelist[i] + '\''
-        else:
-            critval = str(valuelist[i])
-        criterion = criterion + ' x['+str(columnlist[i])+']=='+critval+' or'
-    criterion = criterion[0:-2]         # remove the "or" after the last crit
-    return adm(a,criterion)
-
-
- def areplace (a,oldval,newval):
-    """
-Replaces all occurrences of oldval with newval in array a.
-
-Usage:   areplace(a,oldval,newval)
-"""
-    return N.where(a==oldval,newval,a)
-
-
- def arecode (a,listmap,col='all'):
-    """
-Remaps the values in an array to a new set of values (useful when
-you need to recode data from (e.g.) strings to numbers as most stats
-packages require.  Can work on SINGLE columns, or 'all' columns at once.
-@@@BROKEN 2007-11-26
-
-Usage:   arecode (a,listmap,col='all')
-Returns: a version of array a where listmap[i][0] = (instead) listmap[i][1]
-"""
-    ashape = a.shape
-    if col == 'all':
-        work = a.ravel()
-    else:
-        work = acolex(a,col)
-        work = work.ravel()
-    for pair in listmap:
-        if type(pair[1]) == StringType or work.dtype.char=='O' or a.dtype.char=='O':
-            work = N.array(work,dtype='O')
-            a = N.array(a,dtype='O')
-            for i in range(len(work)):
-                if work[i]==pair[0]:
-                    work[i] = pair[1]
-            if col == 'all':
-                return N.reshape(work,ashape)
-            else:
-                return N.concatenate([a[:,0:col],work[:,N.newaxis],a[:,col+1:]],1)
-        else:   # must be a non-Object type array and replacement
-            work = N.where(work==pair[0],pair[1],work)
-            return N.concatenate([a[:,0:col],work[:,N.newaxis],a[:,col+1:]],1)
-
-
- def arowcompare(row1, row2):
-    """
-Compares two rows from an array, regardless of whether it is an
-array of numbers or of python objects (which requires the cmp function).
-@@@PURPOSE? 2007-11-26
-
-Usage:   arowcompare(row1,row2)
-Returns: an array of equal length containing 1s where the two rows had
-         identical elements and 0 otherwise
-"""
-    return 
-    if row1.dtype.char=='O' or row2.dtype=='O':
-        cmpvect = N.logical_not(abs(N.array(map(cmp,row1,row2)))) # cmp fcn gives -1,0,1
-    else:
-        cmpvect = N.equal(row1,row2)
-    return cmpvect
-
-
- def arowsame(row1, row2):
-    """
-Compares two rows from an array, regardless of whether it is an
-array of numbers or of python objects (which requires the cmp function).
-
-Usage:   arowsame(row1,row2)
-Returns: 1 if the two rows are identical, 0 otherwise.
-"""
-    cmpval = N.alltrue(arowcompare(row1,row2))
-    return cmpval
-
-
- def asortrows(a,axis=0):
-    """
-Sorts an array "by rows".  This differs from the Numeric.sort() function,
-which sorts elements WITHIN the given axis.  Instead, this function keeps
-the elements along the given axis intact, but shifts them 'up or down'
-relative to one another.
-
-Usage:   asortrows(a,axis=0)
-Returns: sorted version of a
-"""
-    return N.sort(a,axis=axis,kind='mergesort')
-
-
- def aunique(inarray):
-    """
-Returns unique items in the FIRST dimension of the passed array. Only
-works on arrays NOT including string items.
-
-Usage:   aunique (inarray)
-"""
-    uniques = N.array([inarray[0]])
-    if len(uniques.shape) == 1:            # IF IT'S A 1D ARRAY
-        for item in inarray[1:]:
-            if N.add.reduce(N.equal(uniques,item).ravel()) == 0:
-                try:
-                    uniques = N.concatenate([uniques,N.array[N.newaxis,:]])
-                except TypeError:
-                    uniques = N.concatenate([uniques,N.array([item])])
-    else:                                  # IT MUST BE A 2+D ARRAY
-        if inarray.dtype.char != 'O':  # not an Object array
-            for item in inarray[1:]:
-                if not N.sum(N.alltrue(N.equal(uniques,item),1)):
-                    try:
-                        uniques = N.concatenate( [uniques,item[N.newaxis,:]] )
-                    except TypeError:    # the item to add isn't a list
-                        uniques = N.concatenate([uniques,N.array([item])])
-                else:
-                    pass  # this item is already in the uniques array
-        else:   # must be an Object array, alltrue/equal functions don't work
-            for item in inarray[1:]:
-                newflag = 1
-                for unq in uniques:  # NOTE: cmp --> 0=same, -1=<, 1=>
-                    test = N.sum(abs(N.array(map(cmp,item,unq))))
-                    if test == 0:   # if item identical to any 1 row in uniques
-                        newflag = 0 # then not a novel item to add
-                        break
-                if newflag == 1:
-                    try:
-                        uniques = N.concatenate( [uniques,item[N.newaxis,:]] )
-                    except TypeError:    # the item to add isn't a list
-                        uniques = N.concatenate([uniques,N.array([item])])
-    return uniques
-
-
- def aduplicates(inarray):
-    """
-Returns duplicate items in the FIRST dimension of the passed array. Only
-works on arrays NOT including string items.
-
-Usage:   aunique (inarray)
-"""
-    inarray = N.array(inarray)
-    if len(inarray.shape) == 1:            # IF IT'S A 1D ARRAY
-        dups = []
-        inarray = inarray.tolist()
-        for i in range(len(inarray)):
-            if inarray[i] in inarray[i+1:]:
-                dups.append(inarray[i])
-        dups = aunique(dups)
-    else:                                  # IT MUST BE A 2+D ARRAY
-        dups = []
-        aslist = inarray.tolist()
-        for i in range(len(aslist)):
-            if aslist[i] in aslist[i+1:]:
-                dups.append(aslist[i])
-        dups = unique(dups)
-        dups = N.array(dups)
-    return dups
-
-except ImportError:    # IF NUMERIC ISN'T AVAILABLE, SKIP ALL arrayfuncs
- pass

Removed: zorg/trunk/lnt/lnt/external/stats/stats.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/external/stats/stats.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/external/stats/stats.py (original)
+++ zorg/trunk/lnt/lnt/external/stats/stats.py (removed)
@@ -1,4522 +0,0 @@
-# Copyright (c) 1999-2007 Gary Strangman; All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-# Comments and/or additions are welcome (send e-mail to:
-# strang at nmr.mgh.harvard.edu).
-# 
-"""
-stats.py module
-
-(Requires pstat.py module.)
-
-#################################################
-#######  Written by:  Gary Strangman  ###########
-#######  Last modified:  Dec 18, 2007 ###########
-#################################################
-
-A collection of basic statistical functions for python.  The function
-names appear below.
-
-IMPORTANT:  There are really *3* sets of functions.  The first set has an 'l'
-prefix, which can be used with list or tuple arguments.  The second set has
-an 'a' prefix, which can accept NumPy array arguments.  These latter
-functions are defined only when NumPy is available on the system.  The third
-type has NO prefix (i.e., has the name that appears below).  Functions of
-this set are members of a "Dispatch" class, c/o David Ascher.  This class
-allows different functions to be called depending on the type of the passed
-arguments.  Thus, stats.mean is a member of the Dispatch class and
-stats.mean(range(20)) will call stats.lmean(range(20)) while
-stats.mean(Numeric.arange(20)) will call stats.amean(Numeric.arange(20)).
-This is a handy way to keep consistent function names when different
-argument types require different functions to be called.  Having
-implementated the Dispatch class, however, means that to get info on
-a given function, you must use the REAL function name ... that is
-"print stats.lmean.__doc__" or "print stats.amean.__doc__" work fine,
-while "print stats.mean.__doc__" will print the doc for the Dispatch
-class.  NUMPY FUNCTIONS ('a' prefix) generally have more argument options
-but should otherwise be consistent with the corresponding list functions.
-
-Disclaimers:  The function list is obviously incomplete and, worse, the
-functions are not optimized.  All functions have been tested (some more
-so than others), but they are far from bulletproof.  Thus, as with any
-free software, no warranty or guarantee is expressed or implied. :-)  A
-few extra functions that don't appear in the list below can be found by
-interested treasure-hunters.  These functions don't necessarily have
-both list and array versions but were deemed useful
-
-CENTRAL TENDENCY:  geometricmean
-                   harmonicmean
-                   mean
-                   median
-                   medianscore
-                   mode
-
-MOMENTS:  moment
-          variation
-          skew
-          kurtosis
-          skewtest   (for Numpy arrays only)
-          kurtosistest (for Numpy arrays only)
-          normaltest (for Numpy arrays only)
-
-ALTERED VERSIONS:  tmean  (for Numpy arrays only)
-                   tvar   (for Numpy arrays only)
-                   tmin   (for Numpy arrays only)
-                   tmax   (for Numpy arrays only)
-                   tstdev (for Numpy arrays only)
-                   tsem   (for Numpy arrays only)
-                   describe
-
-FREQUENCY STATS:  itemfreq
-                  scoreatpercentile
-                  percentileofscore
-                  histogram
-                  cumfreq
-                  relfreq
-
-VARIABILITY:  obrientransform
-              samplevar
-              samplestdev
-              signaltonoise (for Numpy arrays only)
-              var
-              stdev
-              sterr
-              sem
-              z
-              zs
-              zmap (for Numpy arrays only)
-
-TRIMMING FCNS:  threshold (for Numpy arrays only)
-                trimboth
-                trim1
-                round (round all vals to 'n' decimals; Numpy only)
-
-CORRELATION FCNS:  covariance  (for Numpy arrays only)
-                   correlation (for Numpy arrays only)
-                   paired
-                   pearsonr
-                   spearmanr
-                   pointbiserialr
-                   kendalltau
-                   linregress
-
-INFERENTIAL STATS:  ttest_1samp
-                    ttest_ind
-                    ttest_rel
-                    chisquare
-                    ks_2samp
-                    mannwhitneyu
-                    ranksums
-                    wilcoxont
-                    kruskalwallish
-                    friedmanchisquare
-
-PROBABILITY CALCS:  chisqprob
-                    erfcc
-                    zprob
-                    ksprob
-                    fprob
-                    betacf
-                    gammln 
-                    betai
-
-ANOVA FUNCTIONS:  F_oneway
-                  F_value
-
-SUPPORT FUNCTIONS:  writecc
-                    incr
-                    sign  (for Numpy arrays only)
-                    sum
-                    cumsum
-                    ss
-                    summult
-                    sumdiffsquared
-                    square_of_sums
-                    shellsort
-                    rankdata
-                    outputpairedstats
-                    findwithin
-"""
-## CHANGE LOG:
-## ===========
-## 07-11.26 ... conversion for numpy started
-## 07-05-16 ... added Lin's Concordance Correlation Coefficient (alincc) and acov
-## 05-08-21 ... added "Dice's coefficient"
-## 04-10-26 ... added ap2t(), an ugly fcn for converting p-vals to T-vals
-## 04-04-03 ... added amasslinregress() function to do regression on N-D arrays
-## 03-01-03 ... CHANGED VERSION TO 0.6
-##              fixed atsem() to properly handle limits=None case
-##              improved histogram and median functions (estbinwidth) and
-##                   fixed atvar() function (wrong answers for neg numbers?!?)
-## 02-11-19 ... fixed attest_ind and attest_rel for div-by-zero Overflows
-## 02-05-10 ... fixed lchisqprob indentation (failed when df=even)
-## 00-12-28 ... removed aanova() to separate module, fixed licensing to
-##                   match Python License, fixed doc string & imports
-## 00-04-13 ... pulled all "global" statements, except from aanova()
-##              added/fixed lots of documentation, removed io.py dependency
-##              changed to version 0.5
-## 99-11-13 ... added asign() function
-## 99-11-01 ... changed version to 0.4 ... enough incremental changes now
-## 99-10-25 ... added acovariance and acorrelation functions
-## 99-10-10 ... fixed askew/akurtosis to avoid divide-by-zero errors
-##              added aglm function (crude, but will be improved)
-## 99-10-04 ... upgraded acumsum, ass, asummult, asamplevar, avar, etc. to
-##                   all handle lists of 'dimension's and keepdims
-##              REMOVED ar0, ar2, ar3, ar4 and replaced them with around
-##              reinserted fixes for abetai to avoid math overflows
-## 99-09-05 ... rewrote achisqprob/aerfcc/aksprob/afprob/abetacf/abetai to
-##                   handle multi-dimensional arrays (whew!)
-## 99-08-30 ... fixed l/amoment, l/askew, l/akurtosis per D'Agostino (1990)
-##              added anormaltest per same reference
-##              re-wrote azprob to calc arrays of probs all at once
-## 99-08-22 ... edited attest_ind printing section so arrays could be rounded
-## 99-08-19 ... fixed amean and aharmonicmean for non-error(!) overflow on
-##                   short/byte arrays (mean of #s btw 100-300 = -150??)
-## 99-08-09 ... fixed asum so that the None case works for Byte arrays
-## 99-08-08 ... fixed 7/3 'improvement' to handle t-calcs on N-D arrays
-## 99-07-03 ... improved attest_ind, attest_rel (zero-division errortrap)
-## 99-06-24 ... fixed bug(?) in attest_ind (n1=a.shape[0])
-## 04/11/99 ... added asignaltonoise, athreshold functions, changed all
-##                   max/min in array section to N.maximum/N.minimum,
-##                   fixed square_of_sums to prevent integer overflow
-## 04/10/99 ... !!! Changed function name ... sumsquared ==> square_of_sums
-## 03/18/99 ... Added ar0, ar2, ar3 and ar4 rounding functions
-## 02/28/99 ... Fixed aobrientransform to return an array rather than a list
-## 01/15/99 ... Essentially ceased updating list-versions of functions (!!!)
-## 01/13/99 ... CHANGED TO VERSION 0.3
-##              fixed bug in a/lmannwhitneyu p-value calculation
-## 12/31/98 ... fixed variable-name bug in ldescribe
-## 12/19/98 ... fixed bug in findwithin (fcns needed pstat. prefix)
-## 12/16/98 ... changed amedianscore to return float (not array) for 1 score
-## 12/14/98 ... added atmin and atmax functions
-##              removed umath from import line (not needed)
-##              l/ageometricmean modified to reduce chance of overflows (take
-##                   nth root first, then multiply)
-## 12/07/98 ... added __version__variable (now 0.2)
-##              removed all 'stats.' from anova() fcn
-## 12/06/98 ... changed those functions (except shellsort) that altered
-##                   arguments in-place ... cumsum, ranksort, ...
-##              updated (and fixed some) doc-strings
-## 12/01/98 ... added anova() function (requires NumPy)
-##              incorporated Dispatch class
-## 11/12/98 ... added functionality to amean, aharmonicmean, ageometricmean
-##              added 'asum' function (added functionality to N.add.reduce)
-##              fixed both moment and amoment (two errors)
-##              changed name of skewness and askewness to skew and askew
-##              fixed (a)histogram (which sometimes counted points <lowerlimit)
-
-import pstat               # required 3rd party module
-import math, string, copy  # required python modules
-from types import *
-
-__version__ = 0.6
-
-############# DISPATCH CODE ##############
-
-
-class Dispatch:
-    """
-The Dispatch class, care of David Ascher, allows different functions to
-be called depending on the argument types.  This way, there can be one
-function name regardless of the argument type.  To access function doc
-in stats.py module, prefix the function with an 'l' or 'a' for list or
-array arguments, respectively.  That is, print stats.lmean.__doc__ or
-print stats.amean.__doc__ or whatever.
-"""
-
-    def __init__(self, *tuples):
-        self._dispatch = {}
-        for func, types in tuples:
-            for t in types:
-                if t in self._dispatch.keys():
-                    raise ValueError, "can't have two dispatches on "+str(t)
-                self._dispatch[t] = func
-        self._types = self._dispatch.keys()
-
-    def __call__(self, arg1, *args, **kw):
-        if type(arg1) not in self._types:
-            raise TypeError, "don't know how to dispatch %s arguments" %  type(arg1)
-        return apply(self._dispatch[type(arg1)], (arg1,) + args, kw)
-
-
-##########################################################################
-########################   LIST-BASED FUNCTIONS   ########################
-##########################################################################
-
-### Define these regardless
-
-####################################
-#######  CENTRAL TENDENCY  #########
-####################################
-
-def lgeometricmean (inlist):
-    """
-Calculates the geometric mean of the values in the passed list.
-That is:  n-th root of (x1 * x2 * ... * xn).  Assumes a '1D' list.
-
-Usage:   lgeometricmean(inlist)
-"""
-    mult = 1.0
-    one_over_n = 1.0/len(inlist)
-    for item in inlist:
-        mult = mult * pow(item,one_over_n)
-    return mult
-
-
-def lharmonicmean (inlist):
-    """
-Calculates the harmonic mean of the values in the passed list.
-That is:  n / (1/x1 + 1/x2 + ... + 1/xn).  Assumes a '1D' list.
-
-Usage:   lharmonicmean(inlist)
-"""
-    sum = 0
-    for item in inlist:
-        sum = sum + 1.0/item
-    return len(inlist) / sum
-
-
-def lmean (inlist):
-    """
-Returns the arithematic mean of the values in the passed list.
-Assumes a '1D' list, but will function on the 1st dim of an array(!).
-
-Usage:   lmean(inlist)
-"""
-    sum = 0
-    for item in inlist:
-        sum = sum + item
-    return sum/float(len(inlist))
-
-
-def lmedian (inlist,numbins=1000):
-    """
-Returns the computed median value of a list of numbers, given the
-number of bins to use for the histogram (more bins brings the computed value
-closer to the median score, default number of bins = 1000).  See G.W.
-Heiman's Basic Stats (1st Edition), or CRC Probability & Statistics.
-
-Usage:   lmedian (inlist, numbins=1000)
-"""
-    (hist, smallest, binsize, extras) = histogram(inlist,numbins,[min(inlist),max(inlist)]) # make histog
-    cumhist = cumsum(hist)              # make cumulative histogram
-    for i in range(len(cumhist)):        # get 1st(!) index holding 50%ile score
-        if cumhist[i]>=len(inlist)/2.0:
-            cfbin = i
-            break
-    LRL = smallest + binsize*cfbin        # get lower read limit of that bin
-    cfbelow = cumhist[cfbin-1]
-    freq = float(hist[cfbin])                # frequency IN the 50%ile bin
-    median = LRL + ((len(inlist)/2.0 - cfbelow)/float(freq))*binsize  # median formula
-    return median
-
-
-def lmedianscore (inlist):
-    """
-Returns the 'middle' score of the passed list.  If there is an even
-number of scores, the mean of the 2 middle scores is returned.
-
-Usage:   lmedianscore(inlist)
-"""
-
-    newlist = copy.deepcopy(inlist)
-    newlist.sort()
-    if len(newlist) % 2 == 0:   # if even number of scores, average middle 2
-        index = len(newlist)/2  # integer division correct
-        median = float(newlist[index] + newlist[index-1]) /2
-    else:
-        index = len(newlist)/2  # int divsion gives mid value when count from 0
-        median = newlist[index]
-    return median
-
-
-def lmode(inlist):
-    """
-Returns a list of the modal (most common) score(s) in the passed
-list.  If there is more than one such score, all are returned.  The
-bin-count for the mode(s) is also returned.
-
-Usage:   lmode(inlist)
-Returns: bin-count for mode(s), a list of modal value(s)
-"""
-
-    scores = pstat.unique(inlist)
-    scores.sort()
-    freq = []
-    for item in scores:
-        freq.append(inlist.count(item))
-    maxfreq = max(freq)
-    mode = []
-    stillmore = 1
-    while stillmore:
-        try:
-            indx = freq.index(maxfreq)
-            mode.append(scores[indx])
-            del freq[indx]
-            del scores[indx]
-        except ValueError:
-            stillmore=0
-    return maxfreq, mode
-
-
-####################################
-############  MOMENTS  #############
-####################################
-
-def lmoment(inlist,moment=1):
-    """
-Calculates the nth moment about the mean for a sample (defaults to
-the 1st moment).  Used to calculate coefficients of skewness and kurtosis.
-
-Usage:   lmoment(inlist,moment=1)
-Returns: appropriate moment (r) from ... 1/n * SUM((inlist(i)-mean)**r)
-"""
-    if moment == 1:
-        return 0.0
-    else:
-        mn = mean(inlist)
-        n = len(inlist)
-        s = 0
-        for x in inlist:
-            s = s + (x-mn)**moment
-        return s/float(n)
-
-
-def lvariation(inlist):
-    """
-Returns the coefficient of variation, as defined in CRC Standard
-Probability and Statistics, p.6.
-
-Usage:   lvariation(inlist)
-"""
-    return 100.0*samplestdev(inlist)/float(mean(inlist))
-
-
-def lskew(inlist):
-    """
-Returns the skewness of a distribution, as defined in Numerical
-Recipies (alternate defn in CRC Standard Probability and Statistics, p.6.)
-
-Usage:   lskew(inlist)
-"""
-    return moment(inlist,3)/pow(moment(inlist,2),1.5)
-
-
-def lkurtosis(inlist):
-    """
-Returns the kurtosis of a distribution, as defined in Numerical
-Recipies (alternate defn in CRC Standard Probability and Statistics, p.6.)
-
-Usage:   lkurtosis(inlist)
-"""
-    return moment(inlist,4)/pow(moment(inlist,2),2.0)
-
-
-def ldescribe(inlist):
-    """
-Returns some descriptive statistics of the passed list (assumed to be 1D).
-
-Usage:   ldescribe(inlist)
-Returns: n, mean, standard deviation, skew, kurtosis
-"""
-    n = len(inlist)
-    mm = (min(inlist),max(inlist))
-    m = mean(inlist)
-    sd = stdev(inlist)
-    sk = skew(inlist)
-    kurt = kurtosis(inlist)
-    return n, mm, m, sd, sk, kurt
-
-
-####################################
-#######  FREQUENCY STATS  ##########
-####################################
-
-def litemfreq(inlist):
-    """
-Returns a list of pairs.  Each pair consists of one of the scores in inlist
-and it's frequency count.  Assumes a 1D list is passed.
-
-Usage:   litemfreq(inlist)
-Returns: a 2D frequency table (col [0:n-1]=scores, col n=frequencies)
-"""
-    scores = pstat.unique(inlist)
-    scores.sort()
-    freq = []
-    for item in scores:
-        freq.append(inlist.count(item))
-    return pstat.abut(scores, freq)
-
-
-def lscoreatpercentile (inlist, percent):
-    """
-Returns the score at a given percentile relative to the distribution
-given by inlist.
-
-Usage:   lscoreatpercentile(inlist,percent)
-"""
-    if percent > 1:
-        print "\nDividing percent>1 by 100 in lscoreatpercentile().\n"
-        percent = percent / 100.0
-    targetcf = percent*len(inlist)
-    h, lrl, binsize, extras = histogram(inlist)
-    cumhist = cumsum(copy.deepcopy(h))
-    for i in range(len(cumhist)):
-        if cumhist[i] >= targetcf:
-            break
-    score = binsize * ((targetcf - cumhist[i-1]) / float(h[i])) + (lrl+binsize*i)
-    return score
-
-
-def lpercentileofscore (inlist, score,histbins=10,defaultlimits=None):
-    """
-Returns the percentile value of a score relative to the distribution
-given by inlist.  Formula depends on the values used to histogram the data(!).
-
-Usage:   lpercentileofscore(inlist,score,histbins=10,defaultlimits=None)
-"""
-
-    h, lrl, binsize, extras = histogram(inlist,histbins,defaultlimits)
-    cumhist = cumsum(copy.deepcopy(h))
-    i = int((score - lrl)/float(binsize))
-    pct = (cumhist[i-1]+((score-(lrl+binsize*i))/float(binsize))*h[i])/float(len(inlist)) * 100
-    return pct
-
-
-def lhistogram (inlist,numbins=10,defaultreallimits=None,printextras=0):
-    """
-Returns (i) a list of histogram bin counts, (ii) the smallest value
-of the histogram binning, and (iii) the bin width (the last 2 are not
-necessarily integers).  Default number of bins is 10.  If no sequence object
-is given for defaultreallimits, the routine picks (usually non-pretty) bins
-spanning all the numbers in the inlist.
-
-Usage:   lhistogram (inlist, numbins=10, defaultreallimits=None,suppressoutput=0)
-Returns: list of bin values, lowerreallimit, binsize, extrapoints
-"""
-    if (defaultreallimits <> None):
-        if type(defaultreallimits) not in [ListType,TupleType] or len(defaultreallimits)==1: # only one limit given, assumed to be lower one & upper is calc'd
-            lowerreallimit = defaultreallimits
-            upperreallimit = 1.000001 * max(inlist)
-        else: # assume both limits given
-            lowerreallimit = defaultreallimits[0]
-            upperreallimit = defaultreallimits[1]
-        binsize = (upperreallimit-lowerreallimit)/float(numbins)
-    else:     # no limits given for histogram, both must be calc'd
-        estbinwidth=(max(inlist)-min(inlist))/float(numbins) +1e-6 #1=>cover all
-        binsize = ((max(inlist)-min(inlist)+estbinwidth))/float(numbins)
-        lowerreallimit = min(inlist) - binsize/2 #lower real limit,1st bin
-    bins = [0]*(numbins)
-    extrapoints = 0
-    for num in inlist:
-        try:
-            if (num-lowerreallimit) < 0:
-                extrapoints = extrapoints + 1
-            else:
-                bintoincrement = int((num-lowerreallimit)/float(binsize))
-                bins[bintoincrement] = bins[bintoincrement] + 1
-        except:
-            extrapoints = extrapoints + 1
-    if (extrapoints > 0 and printextras == 1):
-        print '\nPoints outside given histogram range =',extrapoints
-    return (bins, lowerreallimit, binsize, extrapoints)
-
-
-def lcumfreq(inlist,numbins=10,defaultreallimits=None):
-    """
-Returns a cumulative frequency histogram, using the histogram function.
-
-Usage:   lcumfreq(inlist,numbins=10,defaultreallimits=None)
-Returns: list of cumfreq bin values, lowerreallimit, binsize, extrapoints
-"""
-    h,l,b,e = histogram(inlist,numbins,defaultreallimits)
-    cumhist = cumsum(copy.deepcopy(h))
-    return cumhist,l,b,e
-
-
-def lrelfreq(inlist,numbins=10,defaultreallimits=None):
-    """
-Returns a relative frequency histogram, using the histogram function.
-
-Usage:   lrelfreq(inlist,numbins=10,defaultreallimits=None)
-Returns: list of cumfreq bin values, lowerreallimit, binsize, extrapoints
-"""
-    h,l,b,e = histogram(inlist,numbins,defaultreallimits)
-    for i in range(len(h)):
-        h[i] = h[i]/float(len(inlist))
-    return h,l,b,e
-
-
-####################################
-#####  VARIABILITY FUNCTIONS  ######
-####################################
-
-def lobrientransform(*args):
-    """
-Computes a transform on input data (any number of columns).  Used to
-test for homogeneity of variance prior to running one-way stats.  From
-Maxwell and Delaney, p.112.
-
-Usage:   lobrientransform(*args)
-Returns: transformed data for use in an ANOVA
-"""
-    TINY = 1e-10
-    k = len(args)
-    n = [0.0]*k
-    v = [0.0]*k
-    m = [0.0]*k
-    nargs = []
-    for i in range(k):
-        nargs.append(copy.deepcopy(args[i]))
-        n[i] = float(len(nargs[i]))
-        v[i] = var(nargs[i])
-        m[i] = mean(nargs[i])
-    for j in range(k):
-        for i in range(n[j]):
-            t1 = (n[j]-1.5)*n[j]*(nargs[j][i]-m[j])**2
-            t2 = 0.5*v[j]*(n[j]-1.0)
-            t3 = (n[j]-1.0)*(n[j]-2.0)
-            nargs[j][i] = (t1-t2) / float(t3)
-    check = 1
-    for j in range(k):
-        if v[j] - mean(nargs[j]) > TINY:
-            check = 0
-    if check <> 1:
-        raise ValueError, 'Problem in obrientransform.'
-    else:
-        return nargs
-
-
-def lsamplevar (inlist):
-    """
-Returns the variance of the values in the passed list using
-N for the denominator (i.e., DESCRIBES the sample variance only).
-
-Usage:   lsamplevar(inlist)
-"""
-    n = len(inlist)
-    mn = mean(inlist)
-    deviations = []
-    for item in inlist:
-        deviations.append(item-mn)
-    return ss(deviations)/float(n)
-
-
-def lsamplestdev (inlist):
-    """
-Returns the standard deviation of the values in the passed list using
-N for the denominator (i.e., DESCRIBES the sample stdev only).
-
-Usage:   lsamplestdev(inlist)
-"""
-    return math.sqrt(samplevar(inlist))
-
-
-def lcov (x,y, keepdims=0):
-    """
-Returns the estimated covariance of the values in the passed
-array (i.e., N-1).  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions).  Set keepdims=1 to return an array with the
-same number of dimensions as inarray.
-
-Usage:   lcov(x,y,keepdims=0)
-"""
-
-    n = len(x)
-    xmn = mean(x)
-    ymn = mean(y)
-    xdeviations = [0]*len(x)
-    ydeviations = [0]*len(y)
-    for i in range(len(x)):
-        xdeviations[i] = x[i] - xmn
-        ydeviations[i] = y[i] - ymn
-    ss = 0.0
-    for i in range(len(xdeviations)):
-        ss = ss + xdeviations[i]*ydeviations[i]
-    return ss/float(n-1)
-
-
-def lvar (inlist):
-    """
-Returns the variance of the values in the passed list using N-1
-for the denominator (i.e., for estimating population variance).
-
-Usage:   lvar(inlist)
-"""
-    n = len(inlist)
-    mn = mean(inlist)
-    deviations = [0]*len(inlist)
-    for i in range(len(inlist)):
-        deviations[i] = inlist[i] - mn
-    return ss(deviations)/float(n-1)
-
-
-def lstdev (inlist):
-    """
-Returns the standard deviation of the values in the passed list
-using N-1 in the denominator (i.e., to estimate population stdev).
-
-Usage:   lstdev(inlist)
-"""
-    return math.sqrt(var(inlist))
-
-
-def lsterr(inlist):
-    """
-Returns the standard error of the values in the passed list using N-1
-in the denominator (i.e., to estimate population standard error).
-
-Usage:   lsterr(inlist)
-"""
-    return stdev(inlist) / float(math.sqrt(len(inlist)))
-
-
-def lsem (inlist):
-    """
-Returns the estimated standard error of the mean (sx-bar) of the
-values in the passed list.  sem = stdev / sqrt(n)
-
-Usage:   lsem(inlist)
-"""
-    sd = stdev(inlist)
-    n = len(inlist)
-    return sd/math.sqrt(n)
-
-
-def lz (inlist, score):
-    """
-Returns the z-score for a given input score, given that score and the
-list from which that score came.  Not appropriate for population calculations.
-
-Usage:   lz(inlist, score)
-"""
-    z = (score-mean(inlist))/samplestdev(inlist)
-    return z
-
-
-def lzs (inlist):
-    """
-Returns a list of z-scores, one for each score in the passed list.
-
-Usage:   lzs(inlist)
-"""
-    zscores = []
-    for item in inlist:
-        zscores.append(z(inlist,item))
-    return zscores
-
-
-####################################
-#######  TRIMMING FUNCTIONS  #######
-####################################
-
-def ltrimboth (l,proportiontocut):
-    """
-Slices off the passed proportion of items from BOTH ends of the passed
-list (i.e., with proportiontocut=0.1, slices 'leftmost' 10% AND 'rightmost'
-10% of scores.  Assumes list is sorted by magnitude.  Slices off LESS if
-proportion results in a non-integer slice index (i.e., conservatively
-slices off proportiontocut).
-
-Usage:   ltrimboth (l,proportiontocut)
-Returns: trimmed version of list l
-"""
-    lowercut = int(proportiontocut*len(l))
-    uppercut = len(l) - lowercut
-    return l[lowercut:uppercut]
-
-
-def ltrim1 (l,proportiontocut,tail='right'):
-    """
-Slices off the passed proportion of items from ONE end of the passed
-list (i.e., if proportiontocut=0.1, slices off 'leftmost' or 'rightmost'
-10% of scores).  Slices off LESS if proportion results in a non-integer
-slice index (i.e., conservatively slices off proportiontocut).
-
-Usage:   ltrim1 (l,proportiontocut,tail='right')  or set tail='left'
-Returns: trimmed version of list l
-"""
-    if tail == 'right':
-        lowercut = 0
-        uppercut = len(l) - int(proportiontocut*len(l))
-    elif tail == 'left':
-        lowercut = int(proportiontocut*len(l))
-        uppercut = len(l)
-    return l[lowercut:uppercut]
-
-
-####################################
-#####  CORRELATION FUNCTIONS  ######
-####################################
-
-def lpaired(x,y):
-    """
-Interactively determines the type of data and then runs the
-appropriated statistic for paired group data.
-
-Usage:   lpaired(x,y)
-Returns: appropriate statistic name, value, and probability
-"""
-    samples = ''
-    while samples not in ['i','r','I','R','c','C']:
-        print '\nIndependent or related samples, or correlation (i,r,c): ',
-        samples = raw_input()
-
-    if samples in ['i','I','r','R']:
-        print '\nComparing variances ...',
-# USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112
-        r = obrientransform(x,y)
-        f,p = F_oneway(pstat.colex(r,0),pstat.colex(r,1))
-        if p<0.05:
-            vartype='unequal, p='+str(round(p,4))
-        else:
-            vartype='equal'
-        print vartype
-        if samples in ['i','I']:
-            if vartype[0]=='e':
-                t,p = ttest_ind(x,y,0)
-                print '\nIndependent samples t-test:  ', round(t,4),round(p,4)
-            else:
-                if len(x)>20 or len(y)>20:
-                    z,p = ranksums(x,y)
-                    print '\nRank Sums test (NONparametric, n>20):  ', round(z,4),round(p,4)
-                else:
-                    u,p = mannwhitneyu(x,y)
-                    print '\nMann-Whitney U-test (NONparametric, ns<20):  ', round(u,4),round(p,4)
-
-        else:  # RELATED SAMPLES
-            if vartype[0]=='e':
-                t,p = ttest_rel(x,y,0)
-                print '\nRelated samples t-test:  ', round(t,4),round(p,4)
-            else:
-                t,p = ranksums(x,y)
-                print '\nWilcoxon T-test (NONparametric):  ', round(t,4),round(p,4)
-    else:  # CORRELATION ANALYSIS
-        corrtype = ''
-        while corrtype not in ['c','C','r','R','d','D']:
-            print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ',
-            corrtype = raw_input()
-        if corrtype in ['c','C']:
-            m,b,r,p,see = linregress(x,y)
-            print '\nLinear regression for continuous variables ...'
-            lol = [['Slope','Intercept','r','Prob','SEestimate'],[round(m,4),round(b,4),round(r,4),round(p,4),round(see,4)]]
-            pstat.printcc(lol)
-        elif corrtype in ['r','R']:
-            r,p = spearmanr(x,y)
-            print '\nCorrelation for ranked variables ...'
-            print "Spearman's r: ",round(r,4),round(p,4)
-        else: # DICHOTOMOUS
-            r,p = pointbiserialr(x,y)
-            print '\nAssuming x contains a dichotomous variable ...'
-            print 'Point Biserial r: ',round(r,4),round(p,4)
-    print '\n\n'
-    return None
-
-
-def lpearsonr(x,y):
-    """
-Calculates a Pearson correlation coefficient and the associated
-probability value.  Taken from Heiman's Basic Statistics for the Behav.
-Sci (2nd), p.195.
-
-Usage:   lpearsonr(x,y)      where x and y are equal-length lists
-Returns: Pearson's r value, two-tailed p-value
-"""
-    TINY = 1.0e-30
-    if len(x) <> len(y):
-        raise ValueError, 'Input values not paired in pearsonr.  Aborting.'
-    n = len(x)
-    x = map(float,x)
-    y = map(float,y)
-    xmean = mean(x)
-    ymean = mean(y)
-    r_num = n*(summult(x,y)) - sum(x)*sum(y)
-    r_den = math.sqrt((n*ss(x) - square_of_sums(x))*(n*ss(y)-square_of_sums(y)))
-    r = (r_num / r_den)  # denominator already a float
-    df = n-2
-    t = r*math.sqrt(df/((1.0-r+TINY)*(1.0+r+TINY)))
-    prob = betai(0.5*df,0.5,df/float(df+t*t))
-    return r, prob
-
-
-def llincc(x,y):
-    """
-Calculates Lin's concordance correlation coefficient.
-
-Usage:   alincc(x,y)    where x, y are equal-length arrays
-Returns: Lin's CC
-"""
-    covar = lcov(x,y)*(len(x)-1)/float(len(x))  # correct denom to n
-    xvar = lvar(x)*(len(x)-1)/float(len(x))  # correct denom to n
-    yvar = lvar(y)*(len(y)-1)/float(len(y))  # correct denom to n
-    lincc = (2 * covar) / ((xvar+yvar) +((amean(x)-amean(y))**2))
-    return lincc
-
-
-def lspearmanr(x,y):
-    """
-Calculates a Spearman rank-order correlation coefficient.  Taken
-from Heiman's Basic Statistics for the Behav. Sci (1st), p.192.
-
-Usage:   lspearmanr(x,y)      where x and y are equal-length lists
-Returns: Spearman's r, two-tailed p-value
-"""
-    TINY = 1e-30
-    if len(x) <> len(y):
-        raise ValueError, 'Input values not paired in spearmanr.  Aborting.'
-    n = len(x)
-    rankx = rankdata(x)
-    ranky = rankdata(y)
-    dsq = sumdiffsquared(rankx,ranky)
-    rs = 1 - 6*dsq / float(n*(n**2-1))
-    t = rs * math.sqrt((n-2) / ((rs+1.0)*(1.0-rs)))
-    df = n-2
-    probrs = betai(0.5*df,0.5,df/(df+t*t))  # t already a float
-# probability values for rs are from part 2 of the spearman function in
-# Numerical Recipies, p.510.  They are close to tables, but not exact. (?)
-    return rs, probrs
-
-
-def lpointbiserialr(x,y):
-    """
-Calculates a point-biserial correlation coefficient and the associated
-probability value.  Taken from Heiman's Basic Statistics for the Behav.
-Sci (1st), p.194.
-
-Usage:   lpointbiserialr(x,y)      where x,y are equal-length lists
-Returns: Point-biserial r, two-tailed p-value
-"""
-    TINY = 1e-30
-    if len(x) <> len(y):
-        raise ValueError, 'INPUT VALUES NOT PAIRED IN pointbiserialr.  ABORTING.'
-    data = pstat.abut(x,y)
-    categories = pstat.unique(x)
-    if len(categories) <> 2:
-        raise ValueError, "Exactly 2 categories required for pointbiserialr()."
-    else:   # there are 2 categories, continue
-        codemap = pstat.abut(categories,range(2))
-        recoded = pstat.recode(data,codemap,0)
-        x = pstat.linexand(data,0,categories[0])
-        y = pstat.linexand(data,0,categories[1])
-        xmean = mean(pstat.colex(x,1))
-        ymean = mean(pstat.colex(y,1))
-        n = len(data)
-        adjust = math.sqrt((len(x)/float(n))*(len(y)/float(n)))
-        rpb = (ymean - xmean)/samplestdev(pstat.colex(data,1))*adjust
-        df = n-2
-        t = rpb*math.sqrt(df/((1.0-rpb+TINY)*(1.0+rpb+TINY)))
-        prob = betai(0.5*df,0.5,df/(df+t*t))  # t already a float
-        return rpb, prob
-
-
-def lkendalltau(x,y):
-    """
-Calculates Kendall's tau ... correlation of ordinal data.  Adapted
-from function kendl1 in Numerical Recipies.  Needs good test-routine.@@@
-
-Usage:   lkendalltau(x,y)
-Returns: Kendall's tau, two-tailed p-value
-"""
-    n1 = 0
-    n2 = 0
-    iss = 0
-    for j in range(len(x)-1):
-        for k in range(j,len(y)):
-            a1 = x[j] - x[k]
-            a2 = y[j] - y[k]
-            aa = a1 * a2
-            if (aa):             # neither list has a tie
-                n1 = n1 + 1
-                n2 = n2 + 1
-                if aa > 0:
-                    iss = iss + 1
-                else:
-                    iss = iss -1
-            else:
-                if (a1):
-                    n1 = n1 + 1
-                else:
-                    n2 = n2 + 1
-    tau = iss / math.sqrt(n1*n2)
-    svar = (4.0*len(x)+10.0) / (9.0*len(x)*(len(x)-1))
-    z = tau / math.sqrt(svar)
-    prob = erfcc(abs(z)/1.4142136)
-    return tau, prob
-
-
-def llinregress(x,y):
-    """
-Calculates a regression line on x,y pairs.  
-
-Usage:   llinregress(x,y)      x,y are equal-length lists of x-y coordinates
-Returns: slope, intercept, r, two-tailed prob, sterr-of-estimate
-"""
-    TINY = 1.0e-20
-    if len(x) <> len(y):
-        raise ValueError, 'Input values not paired in linregress.  Aborting.'
-    n = len(x)
-    x = map(float,x)
-    y = map(float,y)
-    xmean = mean(x)
-    ymean = mean(y)
-    r_num = float(n*(summult(x,y)) - sum(x)*sum(y))
-    r_den = math.sqrt((n*ss(x) - square_of_sums(x))*(n*ss(y)-square_of_sums(y)))
-    r = r_num / r_den
-    z = 0.5*math.log((1.0+r+TINY)/(1.0-r+TINY))
-    df = n-2
-    t = r*math.sqrt(df/((1.0-r+TINY)*(1.0+r+TINY)))
-    prob = betai(0.5*df,0.5,df/(df+t*t))
-    slope = r_num / float(n*ss(x) - square_of_sums(x))
-    intercept = ymean - slope*xmean
-    sterrest = math.sqrt(1-r*r)*samplestdev(y)
-    return slope, intercept, r, prob, sterrest
-
-
-####################################
-#####  INFERENTIAL STATISTICS  #####
-####################################
-
-def lttest_1samp(a,popmean,printit=0,name='Sample',writemode='a'):
-    """
-Calculates the t-obtained for the independent samples T-test on ONE group
-of scores a, given a population mean.  If printit=1, results are printed
-to the screen.  If printit='filename', the results are output to 'filename'
-using the given writemode (default=append).  Returns t-value, and prob.
-
-Usage:   lttest_1samp(a,popmean,Name='Sample',printit=0,writemode='a')
-Returns: t-value, two-tailed prob
-"""
-    x = mean(a)
-    v = var(a)
-    n = len(a)
-    df = n-1
-    svar = ((n-1)*v)/float(df)
-    t = (x-popmean)/math.sqrt(svar*(1.0/n))
-    prob = betai(0.5*df,0.5,float(df)/(df+t*t))
-
-    if printit <> 0:
-        statname = 'Single-sample T-test.'
-        outputpairedstats(printit,writemode,
-                          'Population','--',popmean,0,0,0,
-                          name,n,x,v,min(a),max(a),
-                          statname,t,prob)
-    return t,prob
-
-
-def lttest_ind (a, b, printit=0, name1='Samp1', name2='Samp2', writemode='a'):
-    """
-Calculates the t-obtained T-test on TWO INDEPENDENT samples of
-scores a, and b.  From Numerical Recipies, p.483.  If printit=1, results
-are printed to the screen.  If printit='filename', the results are output
-to 'filename' using the given writemode (default=append).  Returns t-value,
-and prob.
-
-Usage:   lttest_ind(a,b,printit=0,name1='Samp1',name2='Samp2',writemode='a')
-Returns: t-value, two-tailed prob
-"""
-    x1 = mean(a)
-    x2 = mean(b)
-    v1 = stdev(a)**2
-    v2 = stdev(b)**2
-    n1 = len(a)
-    n2 = len(b)
-    df = n1+n2-2
-    svar = ((n1-1)*v1+(n2-1)*v2)/float(df)
-    t = (x1-x2)/math.sqrt(svar*(1.0/n1 + 1.0/n2))
-    prob = betai(0.5*df,0.5,df/(df+t*t))
-
-    if printit <> 0:
-        statname = 'Independent samples T-test.'
-        outputpairedstats(printit,writemode,
-                          name1,n1,x1,v1,min(a),max(a),
-                          name2,n2,x2,v2,min(b),max(b),
-                          statname,t,prob)
-    return t,prob
-
-
-def lttest_rel (a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a'):
-    """
-Calculates the t-obtained T-test on TWO RELATED samples of scores,
-a and b.  From Numerical Recipies, p.483.  If printit=1, results are
-printed to the screen.  If printit='filename', the results are output to
-'filename' using the given writemode (default=append).  Returns t-value,
-and prob.
-
-Usage:   lttest_rel(a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a')
-Returns: t-value, two-tailed prob
-"""
-    if len(a)<>len(b):
-        raise ValueError, 'Unequal length lists in ttest_rel.'
-    x1 = mean(a)
-    x2 = mean(b)
-    v1 = var(a)
-    v2 = var(b)
-    n = len(a)
-    cov = 0
-    for i in range(len(a)):
-        cov = cov + (a[i]-x1) * (b[i]-x2)
-    df = n-1
-    cov = cov / float(df)
-    sd = math.sqrt((v1+v2 - 2.0*cov)/float(n))
-    t = (x1-x2)/sd
-    prob = betai(0.5*df,0.5,df/(df+t*t))
-
-    if printit <> 0:
-        statname = 'Related samples T-test.'
-        outputpairedstats(printit,writemode,
-                          name1,n,x1,v1,min(a),max(a),
-                          name2,n,x2,v2,min(b),max(b),
-                          statname,t,prob)
-    return t, prob
-
-
-def lchisquare(f_obs,f_exp=None):
-    """
-Calculates a one-way chi square for list of observed frequencies and returns
-the result.  If no expected frequencies are given, the total N is assumed to
-be equally distributed across all groups.
-
-Usage:   lchisquare(f_obs, f_exp=None)   f_obs = list of observed cell freq.
-Returns: chisquare-statistic, associated p-value
-"""
-    k = len(f_obs)                 # number of groups
-    if f_exp == None:
-        f_exp = [sum(f_obs)/float(k)] * len(f_obs) # create k bins with = freq.
-    chisq = 0
-    for i in range(len(f_obs)):
-        chisq = chisq + (f_obs[i]-f_exp[i])**2 / float(f_exp[i])
-    return chisq, chisqprob(chisq, k-1)
-
-
-def lks_2samp (data1,data2):
-    """
-Computes the Kolmogorov-Smirnof statistic on 2 samples.  From
-Numerical Recipies in C, page 493.
-
-Usage:   lks_2samp(data1,data2)   data1&2 are lists of values for 2 conditions
-Returns: KS D-value, associated p-value
-"""
-    j1 = 0
-    j2 = 0
-    fn1 = 0.0
-    fn2 = 0.0
-    n1 = len(data1)
-    n2 = len(data2)
-    en1 = n1
-    en2 = n2
-    d = 0.0
-    data1.sort()
-    data2.sort()
-    while j1 < n1 and j2 < n2:
-        d1=data1[j1]
-        d2=data2[j2]
-        if d1 <= d2:
-            fn1 = (j1)/float(en1)
-            j1 = j1 + 1
-        if d2 <= d1:
-            fn2 = (j2)/float(en2)
-            j2 = j2 + 1
-        dt = (fn2-fn1)
-        if math.fabs(dt) > math.fabs(d):
-            d = dt
-    try:
-        en = math.sqrt(en1*en2/float(en1+en2))
-        prob = ksprob((en+0.12+0.11/en)*abs(d))
-    except:
-        prob = 1.0
-    return d, prob
-
-
-def lmannwhitneyu(x,y):
-    """
-Calculates a Mann-Whitney U statistic on the provided scores and
-returns the result.  Use only when the n in each condition is < 20 and
-you have 2 independent samples of ranks.  NOTE: Mann-Whitney U is
-significant if the u-obtained is LESS THAN or equal to the critical
-value of U found in the tables.  Equivalent to Kruskal-Wallis H with
-just 2 groups.
-
-Usage:   lmannwhitneyu(data)
-Returns: u-statistic, one-tailed p-value (i.e., p(z(U)))
-"""
-    n1 = len(x)
-    n2 = len(y)
-    ranked = rankdata(x+y)
-    rankx = ranked[0:n1]       # get the x-ranks
-    ranky = ranked[n1:]        # the rest are y-ranks
-    u1 = n1*n2 + (n1*(n1+1))/2.0 - sum(rankx)  # calc U for x
-    u2 = n1*n2 - u1                            # remainder is U for y
-    bigu = max(u1,u2)
-    smallu = min(u1,u2)
-    T = math.sqrt(tiecorrect(ranked))  # correction factor for tied scores
-    if T == 0:
-        raise ValueError, 'All numbers are identical in lmannwhitneyu'
-    sd = math.sqrt(T*n1*n2*(n1+n2+1)/12.0)
-    z = abs((bigu-n1*n2/2.0) / sd)  # normal approximation for prob calc
-    return smallu, 1.0 - zprob(z)
-
-
-def ltiecorrect(rankvals):
-    """
-Corrects for ties in Mann Whitney U and Kruskal Wallis H tests.  See
-Siegel, S. (1956) Nonparametric Statistics for the Behavioral Sciences.
-New York: McGraw-Hill.  Code adapted from |Stat rankind.c code.
-
-Usage:   ltiecorrect(rankvals)
-Returns: T correction factor for U or H
-"""
-    sorted,posn = shellsort(rankvals)
-    n = len(sorted)
-    T = 0.0
-    i = 0
-    while (i<n-1):
-        if sorted[i] == sorted[i+1]:
-            nties = 1
-            while (i<n-1) and (sorted[i] == sorted[i+1]):
-                nties = nties +1
-                i = i +1
-            T = T + nties**3 - nties
-        i = i+1
-    T = T / float(n**3-n)
-    return 1.0 - T
-
-
-def lranksums(x,y):
-    """
-Calculates the rank sums statistic on the provided scores and
-returns the result.  Use only when the n in each condition is > 20 and you
-have 2 independent samples of ranks.
-
-Usage:   lranksums(x,y)
-Returns: a z-statistic, two-tailed p-value
-"""
-    n1 = len(x)
-    n2 = len(y)
-    alldata = x+y
-    ranked = rankdata(alldata)
-    x = ranked[:n1]
-    y = ranked[n1:]
-    s = sum(x)
-    expected = n1*(n1+n2+1) / 2.0
-    z = (s - expected) / math.sqrt(n1*n2*(n1+n2+1)/12.0)
-    prob = 2*(1.0 -zprob(abs(z)))
-    return z, prob
-
-
-def lwilcoxont(x,y):
-    """
-Calculates the Wilcoxon T-test for related samples and returns the
-result.  A non-parametric T-test.
-
-Usage:   lwilcoxont(x,y)
-Returns: a t-statistic, two-tail probability estimate
-"""
-    if len(x) <> len(y):
-        raise ValueError, 'Unequal N in wilcoxont.  Aborting.'
-    d=[]
-    for i in range(len(x)):
-        diff = x[i] - y[i]
-        if diff <> 0:
-            d.append(diff)
-    count = len(d)
-    absd = map(abs,d)
-    absranked = rankdata(absd)
-    r_plus = 0.0
-    r_minus = 0.0
-    for i in range(len(absd)):
-        if d[i] < 0:
-            r_minus = r_minus + absranked[i]
-        else:
-            r_plus = r_plus + absranked[i]
-    wt = min(r_plus, r_minus)
-    mn = count * (count+1) * 0.25
-    se =  math.sqrt(count*(count+1)*(2.0*count+1.0)/24.0)
-    z = math.fabs(wt-mn) / se
-    prob = 2*(1.0 -zprob(abs(z)))
-    return wt, prob
-
-
-def lkruskalwallish(*args):
-    """
-The Kruskal-Wallis H-test is a non-parametric ANOVA for 3 or more
-groups, requiring at least 5 subjects in each group.  This function
-calculates the Kruskal-Wallis H-test for 3 or more independent samples
-and returns the result.  
-
-Usage:   lkruskalwallish(*args)
-Returns: H-statistic (corrected for ties), associated p-value
-"""
-    args = list(args)
-    n = [0]*len(args)
-    all = []
-    n = map(len,args)
-    for i in range(len(args)):
-        all = all + args[i]
-    ranked = rankdata(all)
-    T = tiecorrect(ranked)
-    for i in range(len(args)):
-        args[i] = ranked[0:n[i]]
-        del ranked[0:n[i]]
-    rsums = []
-    for i in range(len(args)):
-        rsums.append(sum(args[i])**2)
-        rsums[i] = rsums[i] / float(n[i])
-    ssbn = sum(rsums)
-    totaln = sum(n)
-    h = 12.0 / (totaln*(totaln+1)) * ssbn - 3*(totaln+1)
-    df = len(args) - 1
-    if T == 0:
-        raise ValueError, 'All numbers are identical in lkruskalwallish'
-    h = h / float(T)
-    return h, chisqprob(h,df)
-
-
-def lfriedmanchisquare(*args):
-    """
-Friedman Chi-Square is a non-parametric, one-way within-subjects
-ANOVA.  This function calculates the Friedman Chi-square test for repeated
-measures and returns the result, along with the associated probability
-value.  It assumes 3 or more repeated measures.  Only 3 levels requires a
-minimum of 10 subjects in the study.  Four levels requires 5 subjects per
-level(??).
-
-Usage:   lfriedmanchisquare(*args)
-Returns: chi-square statistic, associated p-value
-"""
-    k = len(args)
-    if k < 3:
-        raise ValueError, 'Less than 3 levels.  Friedman test not appropriate.'
-    n = len(args[0])
-    data = apply(pstat.abut,tuple(args))
-    for i in range(len(data)):
-        data[i] = rankdata(data[i])
-    ssbn = 0
-    for i in range(k):
-        ssbn = ssbn + sum(args[i])**2
-    chisq = 12.0 / (k*n*(k+1)) * ssbn - 3*n*(k+1)
-    return chisq, chisqprob(chisq,k-1)
-
-
-####################################
-####  PROBABILITY CALCULATIONS  ####
-####################################
-
-def lchisqprob(chisq,df):
-    """
-Returns the (1-tailed) probability value associated with the provided
-chi-square value and df.  Adapted from chisq.c in Gary Perlman's |Stat.
-
-Usage:   lchisqprob(chisq,df)
-"""
-    BIG = 20.0
-    def ex(x):
-        BIG = 20.0
-        if x < -BIG:
-            return 0.0
-        else:
-            return math.exp(x)
-
-    if chisq <=0 or df < 1:
-        return 1.0
-    a = 0.5 * chisq
-    if df%2 == 0:
-        even = 1
-    else:
-        even = 0
-    if df > 1:
-        y = ex(-a)
-    if even:
-        s = y
-    else:
-        s = 2.0 * zprob(-math.sqrt(chisq))
-    if (df > 2):
-        chisq = 0.5 * (df - 1.0)
-        if even:
-            z = 1.0
-        else:
-            z = 0.5
-        if a > BIG:
-            if even:
-                e = 0.0
-            else:
-                e = math.log(math.sqrt(math.pi))
-            c = math.log(a)
-            while (z <= chisq):
-                e = math.log(z) + e
-                s = s + ex(c*z-a-e)
-                z = z + 1.0
-            return s
-        else:
-            if even:
-                e = 1.0
-            else:
-                e = 1.0 / math.sqrt(math.pi) / math.sqrt(a)
-            c = 0.0
-            while (z <= chisq):
-                e = e * (a/float(z))
-                c = c + e
-                z = z + 1.0
-            return (c*y+s)
-    else:
-        return s
-
-
-def lerfcc(x):
-    """
-Returns the complementary error function erfc(x) with fractional
-error everywhere less than 1.2e-7.  Adapted from Numerical Recipies.
-
-Usage:   lerfcc(x)
-"""
-    z = abs(x)
-    t = 1.0 / (1.0+0.5*z)
-    ans = t * math.exp(-z*z-1.26551223 + t*(1.00002368+t*(0.37409196+t*(0.09678418+t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+t*(-0.82215223+t*0.17087277)))))))))
-    if x >= 0:
-        return ans
-    else:
-        return 2.0 - ans
-
-
-def lzprob(z):
-    """
-Returns the area under the normal curve 'to the left of' the given z value.
-Thus, 
-    for z<0, zprob(z) = 1-tail probability
-    for z>0, 1.0-zprob(z) = 1-tail probability
-    for any z, 2.0*(1.0-zprob(abs(z))) = 2-tail probability
-Adapted from z.c in Gary Perlman's |Stat.
-
-Usage:   lzprob(z)
-"""
-    Z_MAX = 6.0    # maximum meaningful z-value
-    if z == 0.0:
-        x = 0.0
-    else:
-        y = 0.5 * math.fabs(z)
-        if y >= (Z_MAX*0.5):
-            x = 1.0
-        elif (y < 1.0):
-            w = y*y
-            x = ((((((((0.000124818987 * w
-                        -0.001075204047) * w +0.005198775019) * w
-                      -0.019198292004) * w +0.059054035642) * w
-                    -0.151968751364) * w +0.319152932694) * w
-                  -0.531923007300) * w +0.797884560593) * y * 2.0
-        else:
-            y = y - 2.0
-            x = (((((((((((((-0.000045255659 * y
-                             +0.000152529290) * y -0.000019538132) * y
-                           -0.000676904986) * y +0.001390604284) * y
-                         -0.000794620820) * y -0.002034254874) * y
-                       +0.006549791214) * y -0.010557625006) * y
-                     +0.011630447319) * y -0.009279453341) * y
-                   +0.005353579108) * y -0.002141268741) * y
-                 +0.000535310849) * y +0.999936657524
-    if z > 0.0:
-        prob = ((x+1.0)*0.5)
-    else:
-        prob = ((1.0-x)*0.5)
-    return prob
-
-
-def lksprob(alam):
-    """
-Computes a Kolmolgorov-Smirnov t-test significance level.  Adapted from
-Numerical Recipies.
-
-Usage:   lksprob(alam)
-"""
-    fac = 2.0
-    sum = 0.0
-    termbf = 0.0
-    a2 = -2.0*alam*alam
-    for j in range(1,201):
-        term = fac*math.exp(a2*j*j)
-        sum = sum + term
-        if math.fabs(term) <= (0.001*termbf) or math.fabs(term) < (1.0e-8*sum):
-            return sum
-        fac = -fac
-        termbf = math.fabs(term)
-    return 1.0             # Get here only if fails to converge; was 0.0!!
-
-
-def lfprob (dfnum, dfden, F):
-    """
-Returns the (1-tailed) significance level (p-value) of an F
-statistic given the degrees of freedom for the numerator (dfR-dfF) and
-the degrees of freedom for the denominator (dfF).
-
-Usage:   lfprob(dfnum, dfden, F)   where usually dfnum=dfbn, dfden=dfwn
-"""
-    p = betai(0.5*dfden, 0.5*dfnum, dfden/float(dfden+dfnum*F))
-    return p
-
-
-def lbetacf(a,b,x):
-    """
-This function evaluates the continued fraction form of the incomplete
-Beta function, betai.  (Adapted from: Numerical Recipies in C.)
-
-Usage:   lbetacf(a,b,x)
-"""
-    ITMAX = 200
-    EPS = 3.0e-7
-
-    bm = az = am = 1.0
-    qab = a+b
-    qap = a+1.0
-    qam = a-1.0
-    bz = 1.0-qab*x/qap
-    for i in range(ITMAX+1):
-        em = float(i+1)
-        tem = em + em
-        d = em*(b-em)*x/((qam+tem)*(a+tem))
-        ap = az + d*am
-        bp = bz+d*bm
-        d = -(a+em)*(qab+em)*x/((qap+tem)*(a+tem))
-        app = ap+d*az
-        bpp = bp+d*bz
-        aold = az
-        am = ap/bpp
-        bm = bp/bpp
-        az = app/bpp
-        bz = 1.0
-        if (abs(az-aold)<(EPS*abs(az))):
-            return az
-    print 'a or b too big, or ITMAX too small in Betacf.'
-
-
-def lgammln(xx):
-    """
-Returns the gamma function of xx.
-    Gamma(z) = Integral(0,infinity) of t^(z-1)exp(-t) dt.
-(Adapted from: Numerical Recipies in C.)
-
-Usage:   lgammln(xx)
-"""
-
-    coeff = [76.18009173, -86.50532033, 24.01409822, -1.231739516,
-             0.120858003e-2, -0.536382e-5]
-    x = xx - 1.0
-    tmp = x + 5.5
-    tmp = tmp - (x+0.5)*math.log(tmp)
-    ser = 1.0
-    for j in range(len(coeff)):
-        x = x + 1
-        ser = ser + coeff[j]/x
-    return -tmp + math.log(2.50662827465*ser)
-
-
-def lbetai(a,b,x):
-    """
-Returns the incomplete beta function:
-
-    I-sub-x(a,b) = 1/B(a,b)*(Integral(0,x) of t^(a-1)(1-t)^(b-1) dt)
-
-where a,b>0 and B(a,b) = G(a)*G(b)/(G(a+b)) where G(a) is the gamma
-function of a.  The continued fraction formulation is implemented here,
-using the betacf function.  (Adapted from: Numerical Recipies in C.)
-
-Usage:   lbetai(a,b,x)
-"""
-    if (x<0.0 or x>1.0):
-        raise ValueError, 'Bad x in lbetai'
-    if (x==0.0 or x==1.0):
-        bt = 0.0
-    else:
-        bt = math.exp(gammln(a+b)-gammln(a)-gammln(b)+a*math.log(x)+b*
-                      math.log(1.0-x))
-    if (x<(a+1.0)/(a+b+2.0)):
-        return bt*betacf(a,b,x)/float(a)
-    else:
-        return 1.0-bt*betacf(b,a,1.0-x)/float(b)
-
-
-####################################
-#######  ANOVA CALCULATIONS  #######
-####################################
-
-def lF_oneway(*lists):
-    """
-Performs a 1-way ANOVA, returning an F-value and probability given
-any number of groups.  From Heiman, pp.394-7.
-
-Usage:   F_oneway(*lists)    where *lists is any number of lists, one per
-                                  treatment group
-Returns: F value, one-tailed p-value
-"""
-    a = len(lists)           # ANOVA on 'a' groups, each in it's own list
-    means = [0]*a
-    vars = [0]*a
-    ns = [0]*a
-    alldata = []
-    tmp = map(N.array,lists)
-    means = map(amean,tmp)
-    vars = map(avar,tmp)
-    ns = map(len,lists)
-    for i in range(len(lists)):
-        alldata = alldata + lists[i]
-    alldata = N.array(alldata)
-    bign = len(alldata)
-    sstot = ass(alldata)-(asquare_of_sums(alldata)/float(bign))
-    ssbn = 0
-    for list in lists:
-        ssbn = ssbn + asquare_of_sums(N.array(list))/float(len(list))
-    ssbn = ssbn - (asquare_of_sums(alldata)/float(bign))
-    sswn = sstot-ssbn
-    dfbn = a-1
-    dfwn = bign - a
-    msb = ssbn/float(dfbn)
-    msw = sswn/float(dfwn)
-    f = msb/msw
-    prob = fprob(dfbn,dfwn,f)
-    return f, prob
-
-
-def lF_value (ER,EF,dfnum,dfden):
-    """
-Returns an F-statistic given the following:
-        ER  = error associated with the null hypothesis (the Restricted model)
-        EF  = error associated with the alternate hypothesis (the Full model)
-        dfR-dfF = degrees of freedom of the numerator
-        dfF = degrees of freedom associated with the denominator/Full model
-
-Usage:   lF_value(ER,EF,dfnum,dfden)
-"""
-    return ((ER-EF)/float(dfnum) / (EF/float(dfden)))
-
-
-####################################
-########  SUPPORT FUNCTIONS  #######
-####################################
-
-def writecc (listoflists,file,writetype='w',extra=2):
-    """
-Writes a list of lists to a file in columns, customized by the max
-size of items within the columns (max size of items in col, +2 characters)
-to specified file.  File-overwrite is the default.
-
-Usage:   writecc (listoflists,file,writetype='w',extra=2)
-Returns: None
-"""
-    if type(listoflists[0]) not in [ListType,TupleType]:
-        listoflists = [listoflists]
-    outfile = open(file,writetype)
-    rowstokill = []
-    list2print = copy.deepcopy(listoflists)
-    for i in range(len(listoflists)):
-        if listoflists[i] == ['\n'] or listoflists[i]=='\n' or listoflists[i]=='dashes':
-            rowstokill = rowstokill + [i]
-    rowstokill.reverse()
-    for row in rowstokill:
-        del list2print[row]
-    maxsize = [0]*len(list2print[0])
-    for col in range(len(list2print[0])):
-        items = pstat.colex(list2print,col)
-        items = map(pstat.makestr,items)
-        maxsize[col] = max(map(len,items)) + extra
-    for row in listoflists:
-        if row == ['\n'] or row == '\n':
-            outfile.write('\n')
-        elif row == ['dashes'] or row == 'dashes':
-            dashes = [0]*len(maxsize)
-            for j in range(len(maxsize)):
-                dashes[j] = '-'*(maxsize[j]-2)
-            outfile.write(pstat.lineincustcols(dashes,maxsize))
-        else:
-            outfile.write(pstat.lineincustcols(row,maxsize))
-        outfile.write('\n')
-    outfile.close()
-    return None
-
-
-def lincr(l,cap):        # to increment a list up to a max-list of 'cap'
-    """
-Simulate a counting system from an n-dimensional list.
-
-Usage:   lincr(l,cap)   l=list to increment, cap=max values for each list pos'n
-Returns: next set of values for list l, OR -1 (if overflow)
-"""
-    l[0] = l[0] + 1     # e.g., [0,0,0] --> [2,4,3] (=cap)
-    for i in range(len(l)):
-        if l[i] > cap[i] and i < len(l)-1: # if carryover AND not done
-            l[i] = 0
-            l[i+1] = l[i+1] + 1
-        elif l[i] > cap[i] and i == len(l)-1: # overflow past last column, must be finished
-            l = -1
-    return l
-
-
-def lsum (inlist):
-    """
-Returns the sum of the items in the passed list.
-
-Usage:   lsum(inlist)
-"""
-    s = 0
-    for item in inlist:
-        s = s + item
-    return s
-
-
-def lcumsum (inlist):
-    """
-Returns a list consisting of the cumulative sum of the items in the
-passed list.
-
-Usage:   lcumsum(inlist)
-"""
-    newlist = copy.deepcopy(inlist)
-    for i in range(1,len(newlist)):
-        newlist[i] = newlist[i] + newlist[i-1]
-    return newlist
-
-
-def lss(inlist):
-    """
-Squares each value in the passed list, adds up these squares and
-returns the result.
-
-Usage:   lss(inlist)
-"""
-    ss = 0
-    for item in inlist:
-        ss = ss + item*item
-    return ss
-
-
-def lsummult (list1,list2):
-    """
-Multiplies elements in list1 and list2, element by element, and
-returns the sum of all resulting multiplications.  Must provide equal
-length lists.
-
-Usage:   lsummult(list1,list2)
-"""
-    if len(list1) <> len(list2):
-        raise ValueError, "Lists not equal length in summult."
-    s = 0
-    for item1,item2 in pstat.abut(list1,list2):
-        s = s + item1*item2
-    return s
-
-
-def lsumdiffsquared(x,y):
-    """
-Takes pairwise differences of the values in lists x and y, squares
-these differences, and returns the sum of these squares.
-
-Usage:   lsumdiffsquared(x,y)
-Returns: sum[(x[i]-y[i])**2]
-"""
-    sds = 0
-    for i in range(len(x)):
-        sds = sds + (x[i]-y[i])**2
-    return sds
-
-
-def lsquare_of_sums(inlist):
-    """
-Adds the values in the passed list, squares the sum, and returns
-the result.
-
-Usage:   lsquare_of_sums(inlist)
-Returns: sum(inlist[i])**2
-"""
-    s = sum(inlist)
-    return float(s)*s
-
-
-def lshellsort(inlist):
-    """
-Shellsort algorithm.  Sorts a 1D-list.
-
-Usage:   lshellsort(inlist)
-Returns: sorted-inlist, sorting-index-vector (for original list)
-"""
-    n = len(inlist)
-    svec = copy.deepcopy(inlist)
-    ivec = range(n)
-    gap = n/2   # integer division needed
-    while gap >0:
-        for i in range(gap,n):
-            for j in range(i-gap,-1,-gap):
-                while j>=0 and svec[j]>svec[j+gap]:
-                    temp        = svec[j]
-                    svec[j]     = svec[j+gap]
-                    svec[j+gap] = temp
-                    itemp       = ivec[j]
-                    ivec[j]     = ivec[j+gap]
-                    ivec[j+gap] = itemp
-        gap = gap / 2  # integer division needed
-# svec is now sorted inlist, and ivec has the order svec[i] = vec[ivec[i]]
-    return svec, ivec
-
-
-def lrankdata(inlist):
-    """
-Ranks the data in inlist, dealing with ties appropritely.  Assumes
-a 1D inlist.  Adapted from Gary Perlman's |Stat ranksort.
-
-Usage:   lrankdata(inlist)
-Returns: a list of length equal to inlist, containing rank scores
-"""
-    n = len(inlist)
-    svec, ivec = shellsort(inlist)
-    sumranks = 0
-    dupcount = 0
-    newlist = [0]*n
-    for i in range(n):
-        sumranks = sumranks + i
-        dupcount = dupcount + 1
-        if i==n-1 or svec[i] <> svec[i+1]:
-            averank = sumranks / float(dupcount) + 1
-            for j in range(i-dupcount+1,i+1):
-                newlist[ivec[j]] = averank
-            sumranks = 0
-            dupcount = 0
-    return newlist
-
-
-def outputpairedstats(fname,writemode,name1,n1,m1,se1,min1,max1,name2,n2,m2,se2,min2,max2,statname,stat,prob):
-    """
-Prints or write to a file stats for two groups, using the name, n,
-mean, sterr, min and max for each group, as well as the statistic name,
-its value, and the associated p-value.
-
-Usage:   outputpairedstats(fname,writemode,
-                           name1,n1,mean1,stderr1,min1,max1,
-                           name2,n2,mean2,stderr2,min2,max2,
-                           statname,stat,prob)
-Returns: None
-"""
-    suffix = ''                       # for *s after the p-value
-    try:
-        x = prob.shape
-        prob = prob[0]
-    except:
-        pass
-    if  prob < 0.001:  suffix = '  ***'
-    elif prob < 0.01:  suffix = '  **'
-    elif prob < 0.05:  suffix = '  *'
-    title = [['Name','N','Mean','SD','Min','Max']]
-    lofl = title+[[name1,n1,round(m1,3),round(math.sqrt(se1),3),min1,max1],
-                  [name2,n2,round(m2,3),round(math.sqrt(se2),3),min2,max2]]
-    if type(fname)<>StringType or len(fname)==0:
-        print
-        print statname
-        print
-        pstat.printcc(lofl)
-        print
-        try:
-            if stat.shape == ():
-                stat = stat[0]
-            if prob.shape == ():
-                prob = prob[0]
-        except:
-            pass
-        print 'Test statistic = ',round(stat,3),'   p = ',round(prob,3),suffix
-        print
-    else:
-        file = open(fname,writemode)
-        file.write('\n'+statname+'\n\n')
-        file.close()
-        writecc(lofl,fname,'a')
-        file = open(fname,'a')
-        try:
-            if stat.shape == ():
-                stat = stat[0]
-            if prob.shape == ():
-                prob = prob[0]
-        except:
-            pass
-        file.write(pstat.list2string(['\nTest statistic = ',round(stat,4),'   p = ',round(prob,4),suffix,'\n\n']))
-        file.close()
-    return None
-
-
-def lfindwithin (data):
-    """
-Returns an integer representing a binary vector, where 1=within-
-subject factor, 0=between.  Input equals the entire data 2D list (i.e.,
-column 0=random factor, column -1=measured values (those two are skipped).
-Note: input data is in |Stat format ... a list of lists ("2D list") with 
-one row per measured value, first column=subject identifier, last column=
-score, one in-between column per factor (these columns contain level
-designations on each factor).  See also stats.anova.__doc__.
-
-Usage:   lfindwithin(data)     data in |Stat format
-"""
-
-    numfact = len(data[0])-1
-    withinvec = 0
-    for col in range(1,numfact):
-        examplelevel = pstat.unique(pstat.colex(data,col))[0]
-        rows = pstat.linexand(data,col,examplelevel)  # get 1 level of this factor
-        factsubjs = pstat.unique(pstat.colex(rows,0))
-        allsubjs = pstat.unique(pstat.colex(data,0))
-        if len(factsubjs) == len(allsubjs):  # fewer Ss than scores on this factor?
-            withinvec = withinvec + (1 << col)
-    return withinvec
-
-
-#########################################################
-#########################################################
-####### DISPATCH LISTS AND TUPLES TO ABOVE FCNS #########
-#########################################################
-#########################################################
-
-## CENTRAL TENDENCY:
-geometricmean = Dispatch ( (lgeometricmean, (ListType, TupleType)), )
-harmonicmean = Dispatch ( (lharmonicmean, (ListType, TupleType)), )
-mean = Dispatch ( (lmean, (ListType, TupleType)), )
-median = Dispatch ( (lmedian, (ListType, TupleType)), )
-medianscore = Dispatch ( (lmedianscore, (ListType, TupleType)), )
-mode = Dispatch ( (lmode, (ListType, TupleType)), )
-
-## MOMENTS:
-moment = Dispatch ( (lmoment, (ListType, TupleType)), )
-variation = Dispatch ( (lvariation, (ListType, TupleType)), )
-skew = Dispatch ( (lskew, (ListType, TupleType)), )
-kurtosis = Dispatch ( (lkurtosis, (ListType, TupleType)), )
-describe = Dispatch ( (ldescribe, (ListType, TupleType)), )
-
-## FREQUENCY STATISTICS:
-itemfreq = Dispatch ( (litemfreq, (ListType, TupleType)), )
-scoreatpercentile = Dispatch ( (lscoreatpercentile, (ListType, TupleType)), )
-percentileofscore = Dispatch ( (lpercentileofscore, (ListType, TupleType)), )
-histogram = Dispatch ( (lhistogram, (ListType, TupleType)), )
-cumfreq = Dispatch ( (lcumfreq, (ListType, TupleType)), )
-relfreq = Dispatch ( (lrelfreq, (ListType, TupleType)), )
-
-## VARIABILITY:
-obrientransform = Dispatch ( (lobrientransform, (ListType, TupleType)), )
-samplevar = Dispatch ( (lsamplevar, (ListType, TupleType)), )
-samplestdev = Dispatch ( (lsamplestdev, (ListType, TupleType)), )
-var = Dispatch ( (lvar, (ListType, TupleType)), )
-stdev = Dispatch ( (lstdev, (ListType, TupleType)), )
-sterr = Dispatch ( (lsterr, (ListType, TupleType)), )
-sem = Dispatch ( (lsem, (ListType, TupleType)), )
-z = Dispatch ( (lz, (ListType, TupleType)), )
-zs = Dispatch ( (lzs, (ListType, TupleType)), )
-
-## TRIMMING FCNS:
-trimboth = Dispatch ( (ltrimboth, (ListType, TupleType)), )
-trim1 = Dispatch ( (ltrim1, (ListType, TupleType)), )
-
-## CORRELATION FCNS:
-paired = Dispatch ( (lpaired, (ListType, TupleType)), )
-pearsonr = Dispatch ( (lpearsonr, (ListType, TupleType)), )
-spearmanr = Dispatch ( (lspearmanr, (ListType, TupleType)), )
-pointbiserialr = Dispatch ( (lpointbiserialr, (ListType, TupleType)), )
-kendalltau = Dispatch ( (lkendalltau, (ListType, TupleType)), )
-linregress = Dispatch ( (llinregress, (ListType, TupleType)), )
-
-## INFERENTIAL STATS:
-ttest_1samp = Dispatch ( (lttest_1samp, (ListType, TupleType)), )
-ttest_ind = Dispatch ( (lttest_ind, (ListType, TupleType)), )
-ttest_rel = Dispatch ( (lttest_rel, (ListType, TupleType)), )
-chisquare = Dispatch ( (lchisquare, (ListType, TupleType)), )
-ks_2samp = Dispatch ( (lks_2samp, (ListType, TupleType)), )
-mannwhitneyu = Dispatch ( (lmannwhitneyu, (ListType, TupleType)), )
-ranksums = Dispatch ( (lranksums, (ListType, TupleType)), )
-tiecorrect = Dispatch ( (ltiecorrect, (ListType, TupleType)), )
-wilcoxont = Dispatch ( (lwilcoxont, (ListType, TupleType)), )
-kruskalwallish = Dispatch ( (lkruskalwallish, (ListType, TupleType)), )
-friedmanchisquare = Dispatch ( (lfriedmanchisquare, (ListType, TupleType)), )
-
-## PROBABILITY CALCS:
-chisqprob = Dispatch ( (lchisqprob, (IntType, FloatType)), )
-zprob = Dispatch ( (lzprob, (IntType, FloatType)), )
-ksprob = Dispatch ( (lksprob, (IntType, FloatType)), )
-fprob = Dispatch ( (lfprob, (IntType, FloatType)), )
-betacf = Dispatch ( (lbetacf, (IntType, FloatType)), )
-betai = Dispatch ( (lbetai, (IntType, FloatType)), )
-erfcc = Dispatch ( (lerfcc, (IntType, FloatType)), )
-gammln = Dispatch ( (lgammln, (IntType, FloatType)), )
-
-## ANOVA FUNCTIONS:
-F_oneway = Dispatch ( (lF_oneway, (ListType, TupleType)), )
-F_value = Dispatch ( (lF_value, (ListType, TupleType)), )
-
-## SUPPORT FUNCTIONS:
-incr = Dispatch ( (lincr, (ListType, TupleType)), )
-sum = Dispatch ( (lsum, (ListType, TupleType)), )
-cumsum = Dispatch ( (lcumsum, (ListType, TupleType)), )
-ss = Dispatch ( (lss, (ListType, TupleType)), )
-summult = Dispatch ( (lsummult, (ListType, TupleType)), )
-square_of_sums = Dispatch ( (lsquare_of_sums, (ListType, TupleType)), )
-sumdiffsquared = Dispatch ( (lsumdiffsquared, (ListType, TupleType)), )
-shellsort = Dispatch ( (lshellsort, (ListType, TupleType)), )
-rankdata = Dispatch ( (lrankdata, (ListType, TupleType)), )
-findwithin = Dispatch ( (lfindwithin, (ListType, TupleType)), )
-
-
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-#=============  THE ARRAY-VERSION OF THE STATS FUNCTIONS  ===============
-
-try:                         # DEFINE THESE *ONLY* IF NUMERIC IS AVAILABLE
- import numpy as N
- import numpy.linalg as LA
-
-
-#####################################
-########  ACENTRAL TENDENCY  ########
-#####################################
-
- def ageometricmean (inarray,dimension=None,keepdims=0):
-    """
-Calculates the geometric mean of the values in the passed array.
-That is:  n-th root of (x1 * x2 * ... * xn).  Defaults to ALL values in
-the passed array.  Use dimension=None to flatten array first.  REMEMBER: if
-dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
-if dimension is a sequence, it collapses over all specified dimensions.  If
-keepdims is set to 1, the resulting array will have as many dimensions as
-inarray, with only 1 'level' per dim that was collapsed over.
-
-Usage:   ageometricmean(inarray,dimension=None,keepdims=0)
-Returns: geometric mean computed over dim(s) listed in dimension
-"""
-    inarray = N.array(inarray,N.float_)
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        size = len(inarray)
-        mult = N.power(inarray,1.0/size)
-        mult = N.multiply.reduce(mult)
-    elif type(dimension) in [IntType,FloatType]:
-        size = inarray.shape[dimension]
-        mult = N.power(inarray,1.0/size)
-        mult = N.multiply.reduce(mult,dimension)
-        if keepdims == 1:
-            shp = list(inarray.shape)
-            shp[dimension] = 1
-            sum = N.reshape(sum,shp)
-    else: # must be a SEQUENCE of dims to average over
-        dims = list(dimension)
-        dims.sort()
-        dims.reverse()
-        size = N.array(N.multiply.reduce(N.take(inarray.shape,dims)),N.float_)
-        mult = N.power(inarray,1.0/size)
-        for dim in dims:
-            mult = N.multiply.reduce(mult,dim)
-        if keepdims == 1:
-            shp = list(inarray.shape)
-            for dim in dims:
-                shp[dim] = 1
-            mult = N.reshape(mult,shp)
-    return mult
-
-
- def aharmonicmean (inarray,dimension=None,keepdims=0):
-    """
-Calculates the harmonic mean of the values in the passed array.
-That is:  n / (1/x1 + 1/x2 + ... + 1/xn).  Defaults to ALL values in
-the passed array.  Use dimension=None to flatten array first.  REMEMBER: if
-dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
-if dimension is a sequence, it collapses over all specified dimensions.  If
-keepdims is set to 1, the resulting array will have as many dimensions as
-inarray, with only 1 'level' per dim that was collapsed over.
-
-Usage:   aharmonicmean(inarray,dimension=None,keepdims=0)
-Returns: harmonic mean computed over dim(s) in dimension
-"""
-    inarray = inarray.astype(N.float_)
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        size = len(inarray)
-        s = N.add.reduce(1.0 / inarray)
-    elif type(dimension) in [IntType,FloatType]:
-        size = float(inarray.shape[dimension])
-        s = N.add.reduce(1.0/inarray, dimension)
-        if keepdims == 1:
-            shp = list(inarray.shape)
-            shp[dimension] = 1
-            s = N.reshape(s,shp)
-    else: # must be a SEQUENCE of dims to average over
-        dims = list(dimension)
-        dims.sort()
-        nondims = []
-        for i in range(len(inarray.shape)):
-            if i not in dims:
-                nondims.append(i)
-        tinarray = N.transpose(inarray,nondims+dims) # put keep-dims first
-        idx = [0] *len(nondims)
-        if idx == []:
-            size = len(N.ravel(inarray))
-            s = asum(1.0 / inarray)
-            if keepdims == 1:
-                s = N.reshape([s],N.ones(len(inarray.shape)))
-        else:
-            idx[0] = -1
-            loopcap = N.array(tinarray.shape[0:len(nondims)]) -1
-            s = N.zeros(loopcap+1,N.float_)
-            while incr(idx,loopcap) <> -1:
-                s[idx] = asum(1.0/tinarray[idx])
-            size = N.multiply.reduce(N.take(inarray.shape,dims))
-            if keepdims == 1:
-                shp = list(inarray.shape)
-                for dim in dims:
-                    shp[dim] = 1
-                s = N.reshape(s,shp)
-    return size / s
-
-
- def amean (inarray,dimension=None,keepdims=0):
-    """
-Calculates the arithmatic mean of the values in the passed array.
-That is:  1/n * (x1 + x2 + ... + xn).  Defaults to ALL values in the
-passed array.  Use dimension=None to flatten array first.  REMEMBER: if
-dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
-if dimension is a sequence, it collapses over all specified dimensions.  If
-keepdims is set to 1, the resulting array will have as many dimensions as
-inarray, with only 1 'level' per dim that was collapsed over.
-
-Usage:   amean(inarray,dimension=None,keepdims=0)
-Returns: arithematic mean calculated over dim(s) in dimension
-"""
-    if inarray.dtype in [N.int_, N.short,N.ubyte]:
-        inarray = inarray.astype(N.float_)
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        sum = N.add.reduce(inarray)
-        denom = float(len(inarray))
-    elif type(dimension) in [IntType,FloatType]:
-        sum = asum(inarray,dimension)
-        denom = float(inarray.shape[dimension])
-        if keepdims == 1:
-            shp = list(inarray.shape)
-            shp[dimension] = 1
-            sum = N.reshape(sum,shp)
-    else: # must be a TUPLE of dims to average over
-        dims = list(dimension)
-        dims.sort()
-        dims.reverse()
-        sum = inarray *1.0
-        for dim in dims:
-            sum = N.add.reduce(sum,dim)
-        denom = N.array(N.multiply.reduce(N.take(inarray.shape,dims)),N.float_)
-        if keepdims == 1:
-            shp = list(inarray.shape)
-            for dim in dims:
-                shp[dim] = 1
-            sum = N.reshape(sum,shp)
-    return sum/denom
-
-
- def amedian (inarray,numbins=1000):
-    """
-Calculates the COMPUTED median value of an array of numbers, given the
-number of bins to use for the histogram (more bins approaches finding the
-precise median value of the array; default number of bins = 1000).  From
-G.W. Heiman's Basic Stats, or CRC Probability & Statistics.
-NOTE:  THIS ROUTINE ALWAYS uses the entire passed array (flattens it first).
-
-Usage:   amedian(inarray,numbins=1000)
-Returns: median calculated over ALL values in inarray
-"""
-    inarray = N.ravel(inarray)
-    (hist, smallest, binsize, extras) = ahistogram(inarray,numbins,[min(inarray),max(inarray)])
-    cumhist = N.cumsum(hist)            # make cumulative histogram
-    otherbins = N.greater_equal(cumhist,len(inarray)/2.0)
-    otherbins = list(otherbins)         # list of 0/1s, 1s start at median bin
-    cfbin = otherbins.index(1)                # get 1st(!) index holding 50%ile score
-    LRL = smallest + binsize*cfbin        # get lower read limit of that bin
-    cfbelow = N.add.reduce(hist[0:cfbin])        # cum. freq. below bin
-    freq = hist[cfbin]                        # frequency IN the 50%ile bin
-    median = LRL + ((len(inarray)/2.0-cfbelow)/float(freq))*binsize # MEDIAN
-    return median
-
-
- def amedianscore (inarray,dimension=None):
-    """
-Returns the 'middle' score of the passed array.  If there is an even
-number of scores, the mean of the 2 middle scores is returned.  Can function
-with 1D arrays, or on the FIRST dimension of 2D arrays (i.e., dimension can
-be None, to pre-flatten the array, or else dimension must equal 0).
-
-Usage:   amedianscore(inarray,dimension=None)
-Returns: 'middle' score of the array, or the mean of the 2 middle scores
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    inarray = N.sort(inarray,dimension)
-    if inarray.shape[dimension] % 2 == 0:   # if even number of elements
-        indx = inarray.shape[dimension]/2   # integer division correct
-        median = N.asarray(inarray[indx]+inarray[indx-1]) / 2.0
-    else:
-        indx = inarray.shape[dimension] / 2 # integer division correct
-        median = N.take(inarray,[indx],dimension)
-        if median.shape == (1,):
-            median = median[0]
-    return median
-
-
- def amode(a, dimension=None):
-    """
-Returns an array of the modal (most common) score in the passed array.
-If there is more than one such score, ONLY THE FIRST is returned.
-The bin-count for the modal values is also returned.  Operates on whole
-array (dimension=None), or on a given dimension.
-
-Usage:   amode(a, dimension=None)
-Returns: array of bin-counts for mode(s), array of corresponding modal values
-"""
-
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    scores = pstat.aunique(N.ravel(a))       # get ALL unique values
-    testshape = list(a.shape)
-    testshape[dimension] = 1
-    oldmostfreq = N.zeros(testshape)
-    oldcounts = N.zeros(testshape)
-    for score in scores:
-        template = N.equal(a,score)
-        counts = asum(template,dimension,1)
-        mostfrequent = N.where(counts>oldcounts,score,oldmostfreq)
-        oldcounts = N.where(counts>oldcounts,counts,oldcounts)
-        oldmostfreq = mostfrequent
-    return oldcounts, mostfrequent
-
-
- def atmean(a,limits=None,inclusive=(1,1)):
-     """
-Returns the arithmetic mean of all values in an array, ignoring values
-strictly outside the sequence passed to 'limits'.   Note: either limit
-in the sequence, or the value of limits itself, can be set to None.  The
-inclusive list/tuple determines whether the lower and upper limiting bounds
-(respectively) are open/exclusive (0) or closed/inclusive (1).
-
-Usage:   atmean(a,limits=None,inclusive=(1,1))
-"""
-     if a.dtype in [N.int_, N.short,N.ubyte]:
-         a = a.astype(N.float_)
-     if limits == None:
-         return mean(a)
-     assert type(limits) in [ListType,TupleType,N.ndarray], "Wrong type for limits in atmean"
-     if inclusive[0]:         lowerfcn = N.greater_equal
-     else:               lowerfcn = N.greater
-     if inclusive[1]:         upperfcn = N.less_equal
-     else:               upperfcn = N.less
-     if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)):
-         raise ValueError, "No array values within given limits (atmean)."
-     elif limits[0]==None and limits[1]<>None:
-         mask = upperfcn(a,limits[1])
-     elif limits[0]<>None and limits[1]==None:
-         mask = lowerfcn(a,limits[0])
-     elif limits[0]<>None and limits[1]<>None:
-         mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1])
-     s = float(N.add.reduce(N.ravel(a*mask)))
-     n = float(N.add.reduce(N.ravel(mask)))
-     return s/n
-
-
- def atvar(a,limits=None,inclusive=(1,1)):
-     """
-Returns the sample variance of values in an array, (i.e., using N-1),
-ignoring values strictly outside the sequence passed to 'limits'.  
-Note: either limit in the sequence, or the value of limits itself,
-can be set to None.  The inclusive list/tuple determines whether the lower
-and upper limiting bounds (respectively) are open/exclusive (0) or
-closed/inclusive (1). ASSUMES A FLAT ARRAY (OR ELSE PREFLATTENS).
-
-Usage:   atvar(a,limits=None,inclusive=(1,1))
-"""
-     a = a.astype(N.float_)
-     if limits == None or limits == [None,None]:
-         return avar(a)
-     assert type(limits) in [ListType,TupleType,N.ndarray], "Wrong type for limits in atvar"
-     if inclusive[0]:    lowerfcn = N.greater_equal
-     else:               lowerfcn = N.greater
-     if inclusive[1]:    upperfcn = N.less_equal
-     else:               upperfcn = N.less
-     if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)):
-         raise ValueError, "No array values within given limits (atvar)."
-     elif limits[0]==None and limits[1]<>None:
-         mask = upperfcn(a,limits[1])
-     elif limits[0]<>None and limits[1]==None:
-         mask = lowerfcn(a,limits[0])
-     elif limits[0]<>None and limits[1]<>None:
-         mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1])
-
-     a = N.compress(mask,a)  # squish out excluded values
-     return avar(a)
-
-
- def atmin(a,lowerlimit=None,dimension=None,inclusive=1):
-     """
-Returns the minimum value of a, along dimension, including only values less
-than (or equal to, if inclusive=1) lowerlimit.  If the limit is set to None,
-all values in the array are used.
-
-Usage:   atmin(a,lowerlimit=None,dimension=None,inclusive=1)
-"""
-     if inclusive:         lowerfcn = N.greater
-     else:               lowerfcn = N.greater_equal
-     if dimension == None:
-         a = N.ravel(a)
-         dimension = 0
-     if lowerlimit == None:
-         lowerlimit = N.minimum.reduce(N.ravel(a))-11
-     biggest = N.maximum.reduce(N.ravel(a))
-     ta = N.where(lowerfcn(a,lowerlimit),a,biggest)
-     return N.minimum.reduce(ta,dimension)
-
-
- def atmax(a,upperlimit,dimension=None,inclusive=1):
-     """
-Returns the maximum value of a, along dimension, including only values greater
-than (or equal to, if inclusive=1) upperlimit.  If the limit is set to None,
-a limit larger than the max value in the array is used.
-
-Usage:   atmax(a,upperlimit,dimension=None,inclusive=1)
-"""
-     if inclusive:         upperfcn = N.less
-     else:               upperfcn = N.less_equal
-     if dimension == None:
-         a = N.ravel(a)
-         dimension = 0
-     if upperlimit == None:
-         upperlimit = N.maximum.reduce(N.ravel(a))+1
-     smallest = N.minimum.reduce(N.ravel(a))
-     ta = N.where(upperfcn(a,upperlimit),a,smallest)
-     return N.maximum.reduce(ta,dimension)
-
-
- def atstdev(a,limits=None,inclusive=(1,1)):
-     """
-Returns the standard deviation of all values in an array, ignoring values
-strictly outside the sequence passed to 'limits'.   Note: either limit
-in the sequence, or the value of limits itself, can be set to None.  The
-inclusive list/tuple determines whether the lower and upper limiting bounds
-(respectively) are open/exclusive (0) or closed/inclusive (1).
-
-Usage:   atstdev(a,limits=None,inclusive=(1,1))
-"""
-     return N.sqrt(tvar(a,limits,inclusive))
-
-
- def atsem(a,limits=None,inclusive=(1,1)):
-     """
-Returns the standard error of the mean for the values in an array,
-(i.e., using N for the denominator), ignoring values strictly outside
-the sequence passed to 'limits'.   Note: either limit in the sequence,
-or the value of limits itself, can be set to None.  The inclusive list/tuple
-determines whether the lower and upper limiting bounds (respectively) are
-open/exclusive (0) or closed/inclusive (1).
-
-Usage:   atsem(a,limits=None,inclusive=(1,1))
-"""
-     sd = tstdev(a,limits,inclusive)
-     if limits == None or limits == [None,None]:
-         n = float(len(N.ravel(a)))
-         limits = [min(a)-1, max(a)+1]
-     assert type(limits) in [ListType,TupleType,N.ndarray], "Wrong type for limits in atsem"
-     if inclusive[0]:         lowerfcn = N.greater_equal
-     else:               lowerfcn = N.greater
-     if inclusive[1]:         upperfcn = N.less_equal
-     else:               upperfcn = N.less
-     if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(N.ravel(a)):
-         raise ValueError, "No array values within given limits (atsem)."
-     elif limits[0]==None and limits[1]<>None:
-         mask = upperfcn(a,limits[1])
-     elif limits[0]<>None and limits[1]==None:
-         mask = lowerfcn(a,limits[0])
-     elif limits[0]<>None and limits[1]<>None:
-         mask = lowerfcn(a,limits[0])*upperfcn(a,limits[1])
-     term1 = N.add.reduce(N.ravel(a*a*mask))
-     n = float(N.add.reduce(N.ravel(mask)))
-     return sd/math.sqrt(n)
-
-
-#####################################
-############  AMOMENTS  #############
-#####################################
-
- def amoment(a,moment=1,dimension=None):
-    """
-Calculates the nth moment about the mean for a sample (defaults to the
-1st moment).  Generally used to calculate coefficients of skewness and
-kurtosis.  Dimension can equal None (ravel array first), an integer
-(the dimension over which to operate), or a sequence (operate over
-multiple dimensions).
-
-Usage:   amoment(a,moment=1,dimension=None)
-Returns: appropriate moment along given dimension
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    if moment == 1:
-        return 0.0
-    else:
-        mn = amean(a,dimension,1)  # 1=keepdims
-        s = N.power((a-mn),moment)
-        return amean(s,dimension)
-
-
- def avariation(a,dimension=None):
-    """
-Returns the coefficient of variation, as defined in CRC Standard
-Probability and Statistics, p.6. Dimension can equal None (ravel array
-first), an integer (the dimension over which to operate), or a
-sequence (operate over multiple dimensions).
-
-Usage:   avariation(a,dimension=None)
-"""
-    return 100.0*asamplestdev(a,dimension)/amean(a,dimension)
-
-
- def askew(a,dimension=None): 
-    """ 
-Returns the skewness of a distribution (normal ==> 0.0; >0 means extra
-weight in left tail).  Use askewtest() to see if it's close enough.
-Dimension can equal None (ravel array first), an integer (the
-dimension over which to operate), or a sequence (operate over multiple
-dimensions).
-
-Usage:   askew(a, dimension=None)
-Returns: skew of vals in a along dimension, returning ZERO where all vals equal
-"""
-    denom = N.power(amoment(a,2,dimension),1.5)
-    zero = N.equal(denom,0)
-    if type(denom) == N.ndarray and asum(zero) <> 0:
-        print "Number of zeros in askew: ",asum(zero)
-    denom = denom + zero  # prevent divide-by-zero
-    return N.where(zero, 0, amoment(a,3,dimension)/denom)
-
-
- def akurtosis(a,dimension=None):
-    """
-Returns the kurtosis of a distribution (normal ==> 3.0; >3 means
-heavier in the tails, and usually more peaked).  Use akurtosistest()
-to see if it's close enough.  Dimension can equal None (ravel array
-first), an integer (the dimension over which to operate), or a
-sequence (operate over multiple dimensions).
-
-Usage:   akurtosis(a,dimension=None)
-Returns: kurtosis of values in a along dimension, and ZERO where all vals equal
-"""
-    denom = N.power(amoment(a,2,dimension),2)
-    zero = N.equal(denom,0)
-    if type(denom) == N.ndarray and asum(zero) <> 0:
-        print "Number of zeros in akurtosis: ",asum(zero)
-    denom = denom + zero  # prevent divide-by-zero
-    return N.where(zero,0,amoment(a,4,dimension)/denom)
-
-
- def adescribe(inarray,dimension=None):
-     """
-Returns several descriptive statistics of the passed array.  Dimension
-can equal None (ravel array first), an integer (the dimension over
-which to operate), or a sequence (operate over multiple dimensions).
-
-Usage:   adescribe(inarray,dimension=None)
-Returns: n, (min,max), mean, standard deviation, skew, kurtosis
-"""
-     if dimension == None:
-         inarray = N.ravel(inarray)
-         dimension = 0
-     n = inarray.shape[dimension]
-     mm = (N.minimum.reduce(inarray),N.maximum.reduce(inarray))
-     m = amean(inarray,dimension)
-     sd = astdev(inarray,dimension)
-     skew = askew(inarray,dimension)
-     kurt = akurtosis(inarray,dimension)
-     return n, mm, m, sd, skew, kurt
-
-
-#####################################
-########  NORMALITY TESTS  ##########
-#####################################
-
- def askewtest(a,dimension=None):
-    """
-Tests whether the skew is significantly different from a normal
-distribution.  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions).
-
-Usage:   askewtest(a,dimension=None)
-Returns: z-score and 2-tail z-probability
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    b2 = askew(a,dimension)
-    n = float(a.shape[dimension])
-    y = b2 * N.sqrt(((n+1)*(n+3)) / (6.0*(n-2)) )
-    beta2 = ( 3.0*(n*n+27*n-70)*(n+1)*(n+3) ) / ( (n-2.0)*(n+5)*(n+7)*(n+9) )
-    W2 = -1 + N.sqrt(2*(beta2-1))
-    delta = 1/N.sqrt(N.log(N.sqrt(W2)))
-    alpha = N.sqrt(2/(W2-1))
-    y = N.where(y==0,1,y)
-    Z = delta*N.log(y/alpha + N.sqrt((y/alpha)**2+1))
-    return Z, (1.0-zprob(Z))*2
-
-
- def akurtosistest(a,dimension=None):
-    """
-Tests whether a dataset has normal kurtosis (i.e.,
-kurtosis=3(n-1)/(n+1)) Valid only for n>20.  Dimension can equal None
-(ravel array first), an integer (the dimension over which to operate),
-or a sequence (operate over multiple dimensions).
-
-Usage:   akurtosistest(a,dimension=None)
-Returns: z-score and 2-tail z-probability, returns 0 for bad pixels
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    n = float(a.shape[dimension])
-    if n<20:
-        print "akurtosistest only valid for n>=20 ... continuing anyway, n=",n
-    b2 = akurtosis(a,dimension)
-    E = 3.0*(n-1) /(n+1)
-    varb2 = 24.0*n*(n-2)*(n-3) / ((n+1)*(n+1)*(n+3)*(n+5))
-    x = (b2-E)/N.sqrt(varb2)
-    sqrtbeta1 = 6.0*(n*n-5*n+2)/((n+7)*(n+9)) * N.sqrt((6.0*(n+3)*(n+5))/
-                                                       (n*(n-2)*(n-3)))
-    A = 6.0 + 8.0/sqrtbeta1 *(2.0/sqrtbeta1 + N.sqrt(1+4.0/(sqrtbeta1**2)))
-    term1 = 1 -2/(9.0*A)
-    denom = 1 +x*N.sqrt(2/(A-4.0))
-    denom = N.where(N.less(denom,0), 99, denom)
-    term2 = N.where(N.equal(denom,0), term1, N.power((1-2.0/A)/denom,1/3.0))
-    Z = ( term1 - term2 ) / N.sqrt(2/(9.0*A))
-    Z = N.where(N.equal(denom,99), 0, Z)
-    return Z, (1.0-zprob(Z))*2
-
-
- def anormaltest(a,dimension=None):
-    """
-Tests whether skew and/OR kurtosis of dataset differs from normal
-curve.  Can operate over multiple dimensions.  Dimension can equal
-None (ravel array first), an integer (the dimension over which to
-operate), or a sequence (operate over multiple dimensions).
-
-Usage:   anormaltest(a,dimension=None)
-Returns: z-score and 2-tail probability
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    s,p = askewtest(a,dimension)
-    k,p = akurtosistest(a,dimension)
-    k2 = N.power(s,2) + N.power(k,2)
-    return k2, achisqprob(k2,2)
-
-
-#####################################
-######  AFREQUENCY FUNCTIONS  #######
-#####################################
-
- def aitemfreq(a):
-    """
-Returns a 2D array of item frequencies.  Column 1 contains item values,
-column 2 contains their respective counts.  Assumes a 1D array is passed.
-@@@sorting OK?
-
-Usage:   aitemfreq(a)
-Returns: a 2D frequency table (col [0:n-1]=scores, col n=frequencies)
-"""
-    scores = pstat.aunique(a)
-    scores = N.sort(scores)
-    freq = N.zeros(len(scores))
-    for i in range(len(scores)):
-        freq[i] = N.add.reduce(N.equal(a,scores[i]))
-    return N.array(pstat.aabut(scores, freq))
-
-
- def ascoreatpercentile (inarray, percent):
-    """
-Usage:   ascoreatpercentile(inarray,percent)   0<percent<100
-Returns: score at given percentile, relative to inarray distribution
-"""
-    percent = percent / 100.0
-    targetcf = percent*len(inarray)
-    h, lrl, binsize, extras = histogram(inarray)
-    cumhist = cumsum(h*1)
-    for i in range(len(cumhist)):
-        if cumhist[i] >= targetcf:
-            break
-    score = binsize * ((targetcf - cumhist[i-1]) / float(h[i])) + (lrl+binsize*i)
-    return score
-
-
- def apercentileofscore (inarray,score,histbins=10,defaultlimits=None):
-    """
-Note: result of this function depends on the values used to histogram
-the data(!).
-
-Usage:   apercentileofscore(inarray,score,histbins=10,defaultlimits=None)
-Returns: percentile-position of score (0-100) relative to inarray
-"""
-    h, lrl, binsize, extras = histogram(inarray,histbins,defaultlimits)
-    cumhist = cumsum(h*1)
-    i = int((score - lrl)/float(binsize))
-    pct = (cumhist[i-1]+((score-(lrl+binsize*i))/float(binsize))*h[i])/float(len(inarray)) * 100
-    return pct
-
-
- def ahistogram (inarray,numbins=10,defaultlimits=None,printextras=1):
-    """
-Returns (i) an array of histogram bin counts, (ii) the smallest value
-of the histogram binning, and (iii) the bin width (the last 2 are not
-necessarily integers).  Default number of bins is 10.  Defaultlimits
-can be None (the routine picks bins spanning all the numbers in the
-inarray) or a 2-sequence (lowerlimit, upperlimit).  Returns all of the
-following: array of bin values, lowerreallimit, binsize, extrapoints.
-
-Usage:   ahistogram(inarray,numbins=10,defaultlimits=None,printextras=1)
-Returns: (array of bin counts, bin-minimum, min-width, #-points-outside-range)
-"""
-    inarray = N.ravel(inarray)               # flatten any >1D arrays
-    if (defaultlimits <> None):
-        lowerreallimit = defaultlimits[0]
-        upperreallimit = defaultlimits[1]
-        binsize = (upperreallimit-lowerreallimit) / float(numbins)
-    else:
-        Min = N.minimum.reduce(inarray)
-        Max = N.maximum.reduce(inarray)
-        estbinwidth = float(Max - Min)/float(numbins) + 1e-6
-        binsize = (Max-Min+estbinwidth)/float(numbins)
-        lowerreallimit = Min - binsize/2.0  #lower real limit,1st bin
-    bins = N.zeros(numbins)
-    extrapoints = 0
-    for num in inarray:
-        try:
-            if (num-lowerreallimit) < 0:
-                extrapoints = extrapoints + 1
-            else:
-                bintoincrement = int((num-lowerreallimit) / float(binsize))
-                bins[bintoincrement] = bins[bintoincrement] + 1
-        except:                           # point outside lower/upper limits
-            extrapoints = extrapoints + 1
-    if (extrapoints > 0 and printextras == 1):
-        print '\nPoints outside given histogram range =',extrapoints
-    return (bins, lowerreallimit, binsize, extrapoints)
-
-
- def acumfreq(a,numbins=10,defaultreallimits=None):
-    """
-Returns a cumulative frequency histogram, using the histogram function.
-Defaultreallimits can be None (use all data), or a 2-sequence containing
-lower and upper limits on values to include.
-
-Usage:   acumfreq(a,numbins=10,defaultreallimits=None)
-Returns: array of cumfreq bin values, lowerreallimit, binsize, extrapoints
-"""
-    h,l,b,e = histogram(a,numbins,defaultreallimits)
-    cumhist = cumsum(h*1)
-    return cumhist,l,b,e
-
-
- def arelfreq(a,numbins=10,defaultreallimits=None):
-    """
-Returns a relative frequency histogram, using the histogram function.
-Defaultreallimits can be None (use all data), or a 2-sequence containing
-lower and upper limits on values to include.
-
-Usage:   arelfreq(a,numbins=10,defaultreallimits=None)
-Returns: array of cumfreq bin values, lowerreallimit, binsize, extrapoints
-"""
-    h,l,b,e = histogram(a,numbins,defaultreallimits)
-    h = N.array(h/float(a.shape[0]))
-    return h,l,b,e
-
-
-#####################################
-######  AVARIABILITY FUNCTIONS  #####
-#####################################
-
- def aobrientransform(*args):
-    """
-Computes a transform on input data (any number of columns).  Used to
-test for homogeneity of variance prior to running one-way stats.  Each
-array in *args is one level of a factor.  If an F_oneway() run on the
-transformed data and found significant, variances are unequal.   From
-Maxwell and Delaney, p.112.
-
-Usage:   aobrientransform(*args)    *args = 1D arrays, one per level of factor
-Returns: transformed data for use in an ANOVA
-"""
-    TINY = 1e-10
-    k = len(args)
-    n = N.zeros(k,N.float_)
-    v = N.zeros(k,N.float_)
-    m = N.zeros(k,N.float_)
-    nargs = []
-    for i in range(k):
-        nargs.append(args[i].astype(N.float_))
-        n[i] = float(len(nargs[i]))
-        v[i] = var(nargs[i])
-        m[i] = mean(nargs[i])
-    for j in range(k):
-        for i in range(n[j]):
-            t1 = (n[j]-1.5)*n[j]*(nargs[j][i]-m[j])**2
-            t2 = 0.5*v[j]*(n[j]-1.0)
-            t3 = (n[j]-1.0)*(n[j]-2.0)
-            nargs[j][i] = (t1-t2) / float(t3)
-    check = 1
-    for j in range(k):
-        if v[j] - mean(nargs[j]) > TINY:
-            check = 0
-    if check <> 1:
-        raise ValueError, 'Lack of convergence in obrientransform.'
-    else:
-        return N.array(nargs)
-
-
- def asamplevar (inarray,dimension=None,keepdims=0):
-    """
-Returns the sample standard deviation of the values in the passed
-array (i.e., using N).  Dimension can equal None (ravel array first),
-an integer (the dimension over which to operate), or a sequence
-(operate over multiple dimensions).  Set keepdims=1 to return an array
-with the same number of dimensions as inarray.
-
-Usage:   asamplevar(inarray,dimension=None,keepdims=0)
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    if dimension == 1:
-        mn = amean(inarray,dimension)[:,N.NewAxis]
-    else:
-        mn = amean(inarray,dimension,keepdims=1)
-    deviations = inarray - mn 
-    if type(dimension) == ListType:
-        n = 1
-        for d in dimension:
-            n = n*inarray.shape[d]
-    else:
-        n = inarray.shape[dimension]
-    svar = ass(deviations,dimension,keepdims) / float(n)
-    return svar
-
-
- def asamplestdev (inarray, dimension=None, keepdims=0):
-    """
-Returns the sample standard deviation of the values in the passed
-array (i.e., using N).  Dimension can equal None (ravel array first),
-an integer (the dimension over which to operate), or a sequence
-(operate over multiple dimensions).  Set keepdims=1 to return an array
-with the same number of dimensions as inarray.
-
-Usage:   asamplestdev(inarray,dimension=None,keepdims=0)
-"""
-    return N.sqrt(asamplevar(inarray,dimension,keepdims))
-
-
- def asignaltonoise(instack,dimension=0):
-    """
-Calculates signal-to-noise.  Dimension can equal None (ravel array
-first), an integer (the dimension over which to operate), or a
-sequence (operate over multiple dimensions).
-
-Usage:   asignaltonoise(instack,dimension=0):
-Returns: array containing the value of (mean/stdev) along dimension,
-         or 0 when stdev=0
-"""
-    m = mean(instack,dimension)
-    sd = stdev(instack,dimension)
-    return N.where(sd==0,0,m/sd)
-
-
- def acov (x,y, dimension=None,keepdims=0):
-    """
-Returns the estimated covariance of the values in the passed
-array (i.e., N-1).  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions).  Set keepdims=1 to return an array with the
-same number of dimensions as inarray.
-
-Usage:   acov(x,y,dimension=None,keepdims=0)
-"""
-    if dimension == None:
-        x = N.ravel(x)
-        y = N.ravel(y)
-        dimension = 0
-    xmn = amean(x,dimension,1)  # keepdims
-    xdeviations = x - xmn
-    ymn = amean(y,dimension,1)  # keepdims
-    ydeviations = y - ymn
-    if type(dimension) == ListType:
-        n = 1
-        for d in dimension:
-            n = n*x.shape[d]
-    else:
-        n = x.shape[dimension]
-    covar = N.sum(xdeviations*ydeviations)/float(n-1)
-    return covar
-
-
- def avar (inarray, dimension=None,keepdims=0):
-    """
-Returns the estimated population variance of the values in the passed
-array (i.e., N-1).  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions).  Set keepdims=1 to return an array with the
-same number of dimensions as inarray.
-
-Usage:   avar(inarray,dimension=None,keepdims=0)
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    mn = amean(inarray,dimension,1)
-    deviations = inarray - mn
-    if type(dimension) == ListType:
-        n = 1
-        for d in dimension:
-            n = n*inarray.shape[d]
-    else:
-        n = inarray.shape[dimension]
-    var = ass(deviations,dimension,keepdims)/float(n-1)
-    return var
-
-
- def astdev (inarray, dimension=None, keepdims=0):
-    """
-Returns the estimated population standard deviation of the values in
-the passed array (i.e., N-1).  Dimension can equal None (ravel array
-first), an integer (the dimension over which to operate), or a
-sequence (operate over multiple dimensions).  Set keepdims=1 to return
-an array with the same number of dimensions as inarray.
-
-Usage:   astdev(inarray,dimension=None,keepdims=0)
-"""
-    return N.sqrt(avar(inarray,dimension,keepdims))
-
-
- def asterr (inarray, dimension=None, keepdims=0):
-    """
-Returns the estimated population standard error of the values in the
-passed array (i.e., N-1).  Dimension can equal None (ravel array
-first), an integer (the dimension over which to operate), or a
-sequence (operate over multiple dimensions).  Set keepdims=1 to return
-an array with the same number of dimensions as inarray.
-
-Usage:   asterr(inarray,dimension=None,keepdims=0)
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    return astdev(inarray,dimension,keepdims) / float(N.sqrt(inarray.shape[dimension]))
-
-
- def asem (inarray, dimension=None, keepdims=0):
-    """
-Returns the standard error of the mean (i.e., using N) of the values
-in the passed array.  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions).  Set keepdims=1 to return an array with the
-same number of dimensions as inarray.
-
-Usage:   asem(inarray,dimension=None, keepdims=0)
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    if type(dimension) == ListType:
-        n = 1
-        for d in dimension:
-            n = n*inarray.shape[d]
-    else:
-        n = inarray.shape[dimension]
-    s = asamplestdev(inarray,dimension,keepdims) / N.sqrt(n-1)
-    return s
-
-
- def az (a, score):
-    """
-Returns the z-score of a given input score, given thearray from which
-that score came.  Not appropriate for population calculations, nor for
-arrays > 1D.
-
-Usage:   az(a, score)
-"""
-    z = (score-amean(a)) / asamplestdev(a)
-    return z
-
-
- def azs (a):
-    """
-Returns a 1D array of z-scores, one for each score in the passed array,
-computed relative to the passed array.
-
-Usage:   azs(a)
-"""
-    zscores = []
-    for item in a:
-        zscores.append(z(a,item))
-    return N.array(zscores)
-
-
- def azmap (scores, compare, dimension=0):
-    """
-Returns an array of z-scores the shape of scores (e.g., [x,y]), compared to
-array passed to compare (e.g., [time,x,y]).  Assumes collapsing over dim 0
-of the compare array.
-
-Usage:   azs(scores, compare, dimension=0)
-"""
-    mns = amean(compare,dimension)
-    sstd = asamplestdev(compare,0)
-    return (scores - mns) / sstd
-
-
-#####################################
-#######  ATRIMMING FUNCTIONS  #######
-#####################################
-
-## deleted around() as it's in numpy now
-
- def athreshold(a,threshmin=None,threshmax=None,newval=0):
-    """
-Like Numeric.clip() except that values <threshmid or >threshmax are replaced
-by newval instead of by threshmin/threshmax (respectively).
-
-Usage:   athreshold(a,threshmin=None,threshmax=None,newval=0)
-Returns: a, with values <threshmin or >threshmax replaced with newval
-"""
-    mask = N.zeros(a.shape)
-    if threshmin <> None:
-        mask = mask + N.where(a<threshmin,1,0)
-    if threshmax <> None:
-        mask = mask + N.where(a>threshmax,1,0)
-    mask = N.clip(mask,0,1)
-    return N.where(mask,newval,a)
-
-
- def atrimboth (a,proportiontocut):
-    """
-Slices off the passed proportion of items from BOTH ends of the passed
-array (i.e., with proportiontocut=0.1, slices 'leftmost' 10% AND
-'rightmost' 10% of scores.  You must pre-sort the array if you want
-"proper" trimming.  Slices off LESS if proportion results in a
-non-integer slice index (i.e., conservatively slices off
-proportiontocut).
-
-Usage:   atrimboth (a,proportiontocut)
-Returns: trimmed version of array a
-"""
-    lowercut = int(proportiontocut*len(a))
-    uppercut = len(a) - lowercut
-    return a[lowercut:uppercut]
-
-
- def atrim1 (a,proportiontocut,tail='right'):
-    """
-Slices off the passed proportion of items from ONE end of the passed
-array (i.e., if proportiontocut=0.1, slices off 'leftmost' or 'rightmost'
-10% of scores).  Slices off LESS if proportion results in a non-integer
-slice index (i.e., conservatively slices off proportiontocut).
-
-Usage:   atrim1(a,proportiontocut,tail='right')  or set tail='left'
-Returns: trimmed version of array a
-"""
-    if string.lower(tail) == 'right':
-        lowercut = 0
-        uppercut = len(a) - int(proportiontocut*len(a))
-    elif string.lower(tail) == 'left':
-        lowercut = int(proportiontocut*len(a))
-        uppercut = len(a)
-    return a[lowercut:uppercut]
-
-
-#####################################
-#####  ACORRELATION FUNCTIONS  ######
-#####################################
-
- def acovariance(X):
-    """
-Computes the covariance matrix of a matrix X.  Requires a 2D matrix input.
-
-Usage:   acovariance(X)
-Returns: covariance matrix of X
-"""
-    if len(X.shape) <> 2:
-        raise TypeError, "acovariance requires 2D matrices"
-    n = X.shape[0]
-    mX = amean(X,0)
-    return N.dot(N.transpose(X),X) / float(n) - N.multiply.outer(mX,mX)
-
-
- def acorrelation(X):
-    """
-Computes the correlation matrix of a matrix X.  Requires a 2D matrix input.
-
-Usage:   acorrelation(X)
-Returns: correlation matrix of X
-"""
-    C = acovariance(X)
-    V = N.diagonal(C)
-    return C / N.sqrt(N.multiply.outer(V,V))
-
-
- def apaired(x,y):
-    """
-Interactively determines the type of data in x and y, and then runs the
-appropriated statistic for paired group data.
-
-Usage:   apaired(x,y)     x,y = the two arrays of values to be compared
-Returns: appropriate statistic name, value, and probability
-"""
-    samples = ''
-    while samples not in ['i','r','I','R','c','C']:
-        print '\nIndependent or related samples, or correlation (i,r,c): ',
-        samples = raw_input()
-
-    if samples in ['i','I','r','R']:
-        print '\nComparing variances ...',
-# USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112
-        r = obrientransform(x,y)
-        f,p = F_oneway(pstat.colex(r,0),pstat.colex(r,1))
-        if p<0.05:
-            vartype='unequal, p='+str(round(p,4))
-        else:
-            vartype='equal'
-        print vartype
-        if samples in ['i','I']:
-            if vartype[0]=='e':
-                t,p = ttest_ind(x,y,None,0)
-                print '\nIndependent samples t-test:  ', round(t,4),round(p,4)
-            else:
-                if len(x)>20 or len(y)>20:
-                    z,p = ranksums(x,y)
-                    print '\nRank Sums test (NONparametric, n>20):  ', round(z,4),round(p,4)
-                else:
-                    u,p = mannwhitneyu(x,y)
-                    print '\nMann-Whitney U-test (NONparametric, ns<20):  ', round(u,4),round(p,4)
-
-        else:  # RELATED SAMPLES
-            if vartype[0]=='e':
-                t,p = ttest_rel(x,y,0)
-                print '\nRelated samples t-test:  ', round(t,4),round(p,4)
-            else:
-                t,p = ranksums(x,y)
-                print '\nWilcoxon T-test (NONparametric):  ', round(t,4),round(p,4)
-    else:  # CORRELATION ANALYSIS
-        corrtype = ''
-        while corrtype not in ['c','C','r','R','d','D']:
-            print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ',
-            corrtype = raw_input()
-        if corrtype in ['c','C']:
-            m,b,r,p,see = linregress(x,y)
-            print '\nLinear regression for continuous variables ...'
-            lol = [['Slope','Intercept','r','Prob','SEestimate'],[round(m,4),round(b,4),round(r,4),round(p,4),round(see,4)]]
-            pstat.printcc(lol)
-        elif corrtype in ['r','R']:
-            r,p = spearmanr(x,y)
-            print '\nCorrelation for ranked variables ...'
-            print "Spearman's r: ",round(r,4),round(p,4)
-        else: # DICHOTOMOUS
-            r,p = pointbiserialr(x,y)
-            print '\nAssuming x contains a dichotomous variable ...'
-            print 'Point Biserial r: ',round(r,4),round(p,4)
-    print '\n\n'
-    return None
-
-
- def dices(x,y):
-    """
-Calculates Dice's coefficient ... (2*number of common terms)/(number of terms in x +
-number of terms in y). Returns a value between 0 (orthogonal) and 1.
-
-Usage:  dices(x,y)
-"""
-    import sets
-    x = sets.Set(x)
-    y = sets.Set(y)
-    common = len(x.intersection(y))
-    total = float(len(x) + len(y))
-    return 2*common/total
-
-
- def icc(x,y=None,verbose=0):
-    """
-Calculates intraclass correlation coefficients using simple, Type I sums of squares.
-If only one variable is passed, assumed it's an Nx2 matrix
-
-Usage:   icc(x,y=None,verbose=0)
-Returns: icc rho, prob ####PROB IS A GUESS BASED ON PEARSON
-"""
-    TINY = 1.0e-20
-    if y:
-        all = N.concatenate([x,y],0)
-    else:
-        all = x+0
-        x = all[:,0]
-        y = all[:,1]
-    totalss = ass(all-mean(all))
-    pairmeans = (x+y)/2.
-    withinss = ass(x-pairmeans) + ass(y-pairmeans)
-    withindf = float(len(x))
-    betwdf = float(len(x)-1)
-    withinms = withinss / withindf
-    betweenms = (totalss-withinss) / betwdf
-    rho = (betweenms-withinms)/(withinms+betweenms)
-    t = rho*math.sqrt(betwdf/((1.0-rho+TINY)*(1.0+rho+TINY)))
-    prob = abetai(0.5*betwdf,0.5,betwdf/(betwdf+t*t),verbose)
-    return rho, prob
-
-
- def alincc(x,y):
-    """
-Calculates Lin's concordance correlation coefficient.
-
-Usage:   alincc(x,y)    where x, y are equal-length arrays
-Returns: Lin's CC
-"""
-    x = N.ravel(x)
-    y = N.ravel(y)
-    covar = acov(x,y)*(len(x)-1)/float(len(x))  # correct denom to n
-    xvar = avar(x)*(len(x)-1)/float(len(x))  # correct denom to n
-    yvar = avar(y)*(len(y)-1)/float(len(y))  # correct denom to n
-    lincc = (2 * covar) / ((xvar+yvar) +((amean(x)-amean(y))**2))
-    return lincc
-
-
- def apearsonr(x,y,verbose=1):
-    """
-Calculates a Pearson correlation coefficient and returns p.  Taken
-from Heiman's Basic Statistics for the Behav. Sci (2nd), p.195.
-
-Usage:   apearsonr(x,y,verbose=1)      where x,y are equal length arrays
-Returns: Pearson's r, two-tailed p-value
-"""
-    TINY = 1.0e-20
-    n = len(x)
-    xmean = amean(x)
-    ymean = amean(y)
-    r_num = n*(N.add.reduce(x*y)) - N.add.reduce(x)*N.add.reduce(y)
-    r_den = math.sqrt((n*ass(x) - asquare_of_sums(x))*(n*ass(y)-asquare_of_sums(y)))
-    r = (r_num / r_den)
-    df = n-2
-    t = r*math.sqrt(df/((1.0-r+TINY)*(1.0+r+TINY)))
-    prob = abetai(0.5*df,0.5,df/(df+t*t),verbose)
-    return r,prob
-
-
- def aspearmanr(x,y):
-    """
-Calculates a Spearman rank-order correlation coefficient.  Taken
-from Heiman's Basic Statistics for the Behav. Sci (1st), p.192.
-
-Usage:   aspearmanr(x,y)      where x,y are equal-length arrays
-Returns: Spearman's r, two-tailed p-value
-"""
-    TINY = 1e-30
-    n = len(x)
-    rankx = rankdata(x)
-    ranky = rankdata(y)
-    dsq = N.add.reduce((rankx-ranky)**2)
-    rs = 1 - 6*dsq / float(n*(n**2-1))
-    t = rs * math.sqrt((n-2) / ((rs+1.0)*(1.0-rs)))
-    df = n-2
-    probrs = abetai(0.5*df,0.5,df/(df+t*t))
-# probability values for rs are from part 2 of the spearman function in
-# Numerical Recipies, p.510.  They close to tables, but not exact.(?)
-    return rs, probrs
-
-
- def apointbiserialr(x,y):
-    """
-Calculates a point-biserial correlation coefficient and the associated
-probability value.  Taken from Heiman's Basic Statistics for the Behav.
-Sci (1st), p.194.
-
-Usage:   apointbiserialr(x,y)      where x,y are equal length arrays
-Returns: Point-biserial r, two-tailed p-value
-"""
-    TINY = 1e-30
-    categories = pstat.aunique(x)
-    data = pstat.aabut(x,y)
-    if len(categories) <> 2:
-        raise ValueError, "Exactly 2 categories required (in x) for pointbiserialr()."
-    else:   # there are 2 categories, continue
-        codemap = pstat.aabut(categories,N.arange(2))
-        recoded = pstat.arecode(data,codemap,0)
-        x = pstat.alinexand(data,0,categories[0])
-        y = pstat.alinexand(data,0,categories[1])
-        xmean = amean(pstat.acolex(x,1))
-        ymean = amean(pstat.acolex(y,1))
-        n = len(data)
-        adjust = math.sqrt((len(x)/float(n))*(len(y)/float(n)))
-        rpb = (ymean - xmean)/asamplestdev(pstat.acolex(data,1))*adjust
-        df = n-2
-        t = rpb*math.sqrt(df/((1.0-rpb+TINY)*(1.0+rpb+TINY)))
-        prob = abetai(0.5*df,0.5,df/(df+t*t))
-        return rpb, prob
-
-
- def akendalltau(x,y):
-    """
-Calculates Kendall's tau ... correlation of ordinal data.  Adapted
-from function kendl1 in Numerical Recipies.  Needs good test-cases.@@@
-
-Usage:   akendalltau(x,y)
-Returns: Kendall's tau, two-tailed p-value
-"""
-    n1 = 0
-    n2 = 0
-    iss = 0
-    for j in range(len(x)-1):
-        for k in range(j,len(y)):
-            a1 = x[j] - x[k]
-            a2 = y[j] - y[k]
-            aa = a1 * a2
-            if (aa):             # neither array has a tie
-                n1 = n1 + 1
-                n2 = n2 + 1
-                if aa > 0:
-                    iss = iss + 1
-                else:
-                    iss = iss -1
-            else:
-                if (a1):
-                    n1 = n1 + 1
-                else:
-                    n2 = n2 + 1
-    tau = iss / math.sqrt(n1*n2)
-    svar = (4.0*len(x)+10.0) / (9.0*len(x)*(len(x)-1))
-    z = tau / math.sqrt(svar)
-    prob = erfcc(abs(z)/1.4142136)
-    return tau, prob
-
-
- def alinregress(*args):
-    """
-Calculates a regression line on two arrays, x and y, corresponding to x,y
-pairs.  If a single 2D array is passed, alinregress finds dim with 2 levels
-and splits data into x,y pairs along that dim.
-
-Usage:   alinregress(*args)    args=2 equal-length arrays, or one 2D array
-Returns: slope, intercept, r, two-tailed prob, sterr-of-the-estimate, n
-"""
-    TINY = 1.0e-20
-    if len(args) == 1:  # more than 1D array?
-        args = args[0]
-        if len(args) == 2:
-            x = args[0]
-            y = args[1]
-        else:
-            x = args[:,0]
-            y = args[:,1]
-    else:
-        x = args[0]
-        y = args[1]
-    n = len(x)
-    xmean = amean(x)
-    ymean = amean(y)
-    r_num = n*(N.add.reduce(x*y)) - N.add.reduce(x)*N.add.reduce(y)
-    r_den = math.sqrt((n*ass(x) - asquare_of_sums(x))*(n*ass(y)-asquare_of_sums(y)))
-    r = r_num / r_den
-    z = 0.5*math.log((1.0+r+TINY)/(1.0-r+TINY))
-    df = n-2
-    t = r*math.sqrt(df/((1.0-r+TINY)*(1.0+r+TINY)))
-    prob = abetai(0.5*df,0.5,df/(df+t*t))
-    slope = r_num / (float(n)*ass(x) - asquare_of_sums(x))
-    intercept = ymean - slope*xmean
-    sterrest = math.sqrt(1-r*r)*asamplestdev(y)
-    return slope, intercept, r, prob, sterrest, n
-
- def amasslinregress(*args):
-    """
-Calculates a regression line on one 1D array (x) and one N-D array (y).
-
-Returns: slope, intercept, r, two-tailed prob, sterr-of-the-estimate, n
-"""
-    TINY = 1.0e-20
-    if len(args) == 1:  # more than 1D array?
-        args = args[0]
-        if len(args) == 2:
-            x = N.ravel(args[0])
-            y = args[1]
-        else:
-            x = N.ravel(args[:,0])
-            y = args[:,1]
-    else:
-        x = args[0]
-        y = args[1]
-    x = x.astype(N.float_)
-    y = y.astype(N.float_)
-    n = len(x)
-    xmean = amean(x)
-    ymean = amean(y,0)
-    shp = N.ones(len(y.shape))
-    shp[0] = len(x)
-    x.shape = shp
-    print x.shape, y.shape
-    r_num = n*(N.add.reduce(x*y,0)) - N.add.reduce(x)*N.add.reduce(y,0)
-    r_den = N.sqrt((n*ass(x) - asquare_of_sums(x))*(n*ass(y,0)-asquare_of_sums(y,0)))
-    zerodivproblem = N.equal(r_den,0)
-    r_den = N.where(zerodivproblem,1,r_den)  # avoid zero-division in 1st place
-    r = r_num / r_den  # need to do this nicely for matrix division
-    r = N.where(zerodivproblem,0.0,r)
-    z = 0.5*N.log((1.0+r+TINY)/(1.0-r+TINY))
-    df = n-2
-    t = r*N.sqrt(df/((1.0-r+TINY)*(1.0+r+TINY)))
-    prob = abetai(0.5*df,0.5,df/(df+t*t))
-
-    ss = float(n)*ass(x)-asquare_of_sums(x)
-    s_den = N.where(ss==0,1,ss)  # avoid zero-division in 1st place
-    slope = r_num / s_den
-    intercept = ymean - slope*xmean
-    sterrest = N.sqrt(1-r*r)*asamplestdev(y,0)
-    return slope, intercept, r, prob, sterrest, n
-
-
-#####################################
-#####  AINFERENTIAL STATISTICS  #####
-#####################################
-
- def attest_1samp(a,popmean,printit=0,name='Sample',writemode='a'):
-    """
-Calculates the t-obtained for the independent samples T-test on ONE group
-of scores a, given a population mean.  If printit=1, results are printed
-to the screen.  If printit='filename', the results are output to 'filename'
-using the given writemode (default=append).  Returns t-value, and prob.
-
-Usage:   attest_1samp(a,popmean,Name='Sample',printit=0,writemode='a')
-Returns: t-value, two-tailed prob
-"""
-    if type(a) != N.ndarray:
-        a = N.array(a)
-    x = amean(a)
-    v = avar(a)
-    n = len(a)
-    df = n-1
-    svar = ((n-1)*v) / float(df)
-    t = (x-popmean)/math.sqrt(svar*(1.0/n))
-    prob = abetai(0.5*df,0.5,df/(df+t*t))
-
-    if printit <> 0:
-        statname = 'Single-sample T-test.'
-        outputpairedstats(printit,writemode,
-                          'Population','--',popmean,0,0,0,
-                          name,n,x,v,N.minimum.reduce(N.ravel(a)),
-                          N.maximum.reduce(N.ravel(a)),
-                          statname,t,prob)
-    return t,prob
-
-
- def attest_ind (a, b, dimension=None, printit=0, name1='Samp1', name2='Samp2',writemode='a'):
-    """
-Calculates the t-obtained T-test on TWO INDEPENDENT samples of scores
-a, and b.  From Numerical Recipies, p.483.  If printit=1, results are
-printed to the screen.  If printit='filename', the results are output
-to 'filename' using the given writemode (default=append).  Dimension
-can equal None (ravel array first), or an integer (the dimension over
-which to operate on a and b).
-
-Usage:   attest_ind (a,b,dimension=None,printit=0,
-                     Name1='Samp1',Name2='Samp2',writemode='a')
-Returns: t-value, two-tailed p-value
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        b = N.ravel(b)
-        dimension = 0
-    x1 = amean(a,dimension)
-    x2 = amean(b,dimension)
-    v1 = avar(a,dimension)
-    v2 = avar(b,dimension)
-    n1 = a.shape[dimension]
-    n2 = b.shape[dimension]
-    df = n1+n2-2
-    svar = ((n1-1)*v1+(n2-1)*v2) / float(df)
-    zerodivproblem = N.equal(svar,0)
-    svar = N.where(zerodivproblem,1,svar)  # avoid zero-division in 1st place
-    t = (x1-x2)/N.sqrt(svar*(1.0/n1 + 1.0/n2))  # N-D COMPUTATION HERE!!!!!!
-    t = N.where(zerodivproblem,1.0,t)     # replace NaN/wrong t-values with 1.0
-    probs = abetai(0.5*df,0.5,float(df)/(df+t*t))
-
-    if type(t) == N.ndarray:
-        probs = N.reshape(probs,t.shape)
-    if probs.shape == (1,):
-        probs = probs[0]
-        
-    if printit <> 0:
-        if type(t) == N.ndarray:
-            t = t[0]
-        if type(probs) == N.ndarray:
-            probs = probs[0]
-        statname = 'Independent samples T-test.'
-        outputpairedstats(printit,writemode,
-                          name1,n1,x1,v1,N.minimum.reduce(N.ravel(a)),
-                          N.maximum.reduce(N.ravel(a)),
-                          name2,n2,x2,v2,N.minimum.reduce(N.ravel(b)),
-                          N.maximum.reduce(N.ravel(b)),
-                          statname,t,probs)
-        return
-    return t, probs
-
- def ap2t(pval,df):
-    """
-Tries to compute a t-value from a p-value (or pval array) and associated df.
-SLOW for large numbers of elements(!) as it re-computes p-values 20 times
-(smaller step-sizes) at which point it decides it's done. Keeps the signs
-of the input array. Returns 1000 (or -1000) if t>100.
-
-Usage:  ap2t(pval,df)
-Returns: an array of t-values with the shape of pval
-    """
-    pval = N.array(pval)
-    signs = N.sign(pval)
-    pval = abs(pval)
-    t = N.ones(pval.shape,N.float_)*50
-    step = N.ones(pval.shape,N.float_)*25
-    print "Initial ap2t() prob calc"
-    prob = abetai(0.5*df,0.5,float(df)/(df+t*t))
-    print 'ap2t() iter: ',
-    for i in range(10):
-        print i,' ',
-        t = N.where(pval<prob,t+step,t-step)
-        prob = abetai(0.5*df,0.5,float(df)/(df+t*t))
-        step = step/2
-    print
-    # since this is an ugly hack, we get ugly boundaries
-    t = N.where(t>99.9,1000,t)      # hit upper-boundary
-    t = t+signs
-    return t #, prob, pval
-
-
- def attest_rel (a,b,dimension=None,printit=0,name1='Samp1',name2='Samp2',writemode='a'):
-    """
-Calculates the t-obtained T-test on TWO RELATED samples of scores, a
-and b.  From Numerical Recipies, p.483.  If printit=1, results are
-printed to the screen.  If printit='filename', the results are output
-to 'filename' using the given writemode (default=append).  Dimension
-can equal None (ravel array first), or an integer (the dimension over
-which to operate on a and b).
-
-Usage:   attest_rel(a,b,dimension=None,printit=0,
-                    name1='Samp1',name2='Samp2',writemode='a')
-Returns: t-value, two-tailed p-value
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        b = N.ravel(b)
-        dimension = 0
-    if len(a)<>len(b):
-        raise ValueError, 'Unequal length arrays.'
-    x1 = amean(a,dimension)
-    x2 = amean(b,dimension)
-    v1 = avar(a,dimension)
-    v2 = avar(b,dimension)
-    n = a.shape[dimension]
-    df = float(n-1)
-    d = (a-b).astype('d')
-
-    denom = N.sqrt((n*N.add.reduce(d*d,dimension) - N.add.reduce(d,dimension)**2) /df)
-    zerodivproblem = N.equal(denom,0)
-    denom = N.where(zerodivproblem,1,denom)  # avoid zero-division in 1st place
-    t = N.add.reduce(d,dimension) / denom      # N-D COMPUTATION HERE!!!!!!
-    t = N.where(zerodivproblem,1.0,t)     # replace NaN/wrong t-values with 1.0
-    probs = abetai(0.5*df,0.5,float(df)/(df+t*t))
-    if type(t) == N.ndarray:
-        probs = N.reshape(probs,t.shape)
-    if probs.shape == (1,):
-        probs = probs[0]
-
-    if printit <> 0:
-        statname = 'Related samples T-test.'
-        outputpairedstats(printit,writemode,
-                          name1,n,x1,v1,N.minimum.reduce(N.ravel(a)),
-                          N.maximum.reduce(N.ravel(a)),
-                          name2,n,x2,v2,N.minimum.reduce(N.ravel(b)),
-                          N.maximum.reduce(N.ravel(b)),
-                          statname,t,probs)
-        return
-    return t, probs
-
-
- def achisquare(f_obs,f_exp=None):
-    """
-Calculates a one-way chi square for array of observed frequencies and returns
-the result.  If no expected frequencies are given, the total N is assumed to
-be equally distributed across all groups.
-@@@NOT RIGHT??
-
-Usage:   achisquare(f_obs, f_exp=None)   f_obs = array of observed cell freq.
-Returns: chisquare-statistic, associated p-value
-"""
-
-    k = len(f_obs)
-    if f_exp == None:
-        f_exp = N.array([sum(f_obs)/float(k)] * len(f_obs),N.float_)
-    f_exp = f_exp.astype(N.float_)
-    chisq = N.add.reduce((f_obs-f_exp)**2 / f_exp)
-    return chisq, achisqprob(chisq, k-1)
-
-
- def aks_2samp (data1,data2):
-    """
-Computes the Kolmogorov-Smirnof statistic on 2 samples.  Modified from
-Numerical Recipies in C, page 493.  Returns KS D-value, prob.  Not ufunc-
-like.
-
-Usage:   aks_2samp(data1,data2)  where data1 and data2 are 1D arrays
-Returns: KS D-value, p-value
-"""
-    j1 = 0    # N.zeros(data1.shape[1:]) TRIED TO MAKE THIS UFUNC-LIKE
-    j2 = 0    # N.zeros(data2.shape[1:])
-    fn1 = 0.0 # N.zeros(data1.shape[1:],N.float_)
-    fn2 = 0.0 # N.zeros(data2.shape[1:],N.float_)
-    n1 = data1.shape[0]
-    n2 = data2.shape[0]
-    en1 = n1*1
-    en2 = n2*1
-    d = N.zeros(data1.shape[1:],N.float_)
-    data1 = N.sort(data1,0)
-    data2 = N.sort(data2,0)
-    while j1 < n1 and j2 < n2:
-        d1=data1[j1]
-        d2=data2[j2]
-        if d1 <= d2:
-            fn1 = (j1)/float(en1)
-            j1 = j1 + 1
-        if d2 <= d1:
-            fn2 = (j2)/float(en2)
-            j2 = j2 + 1
-        dt = (fn2-fn1)
-        if abs(dt) > abs(d):
-            d = dt
-#    try:
-    en = math.sqrt(en1*en2/float(en1+en2))
-    prob = aksprob((en+0.12+0.11/en)*N.fabs(d))
-#    except:
-#        prob = 1.0
-    return d, prob
-
-
- def amannwhitneyu(x,y):
-    """
-Calculates a Mann-Whitney U statistic on the provided scores and
-returns the result.  Use only when the n in each condition is < 20 and
-you have 2 independent samples of ranks.  REMEMBER: Mann-Whitney U is
-significant if the u-obtained is LESS THAN or equal to the critical
-value of U.
-
-Usage:   amannwhitneyu(x,y)     where x,y are arrays of values for 2 conditions
-Returns: u-statistic, one-tailed p-value (i.e., p(z(U)))
-"""
-    n1 = len(x)
-    n2 = len(y)
-    ranked = rankdata(N.concatenate((x,y)))
-    rankx = ranked[0:n1]       # get the x-ranks
-    ranky = ranked[n1:]        # the rest are y-ranks
-    u1 = n1*n2 + (n1*(n1+1))/2.0 - sum(rankx)  # calc U for x
-    u2 = n1*n2 - u1                            # remainder is U for y
-    bigu = max(u1,u2)
-    smallu = min(u1,u2)
-    T = math.sqrt(tiecorrect(ranked))  # correction factor for tied scores
-    if T == 0:
-        raise ValueError, 'All numbers are identical in amannwhitneyu'
-    sd = math.sqrt(T*n1*n2*(n1+n2+1)/12.0)
-    z = abs((bigu-n1*n2/2.0) / sd)  # normal approximation for prob calc
-    return smallu, 1.0 - azprob(z)
-
-
- def atiecorrect(rankvals):
-    """
-Tie-corrector for ties in Mann Whitney U and Kruskal Wallis H tests.
-See Siegel, S. (1956) Nonparametric Statistics for the Behavioral
-Sciences.  New York: McGraw-Hill.  Code adapted from |Stat rankind.c
-code.
-
-Usage:   atiecorrect(rankvals)
-Returns: T correction factor for U or H
-"""
-    sorted,posn = ashellsort(N.array(rankvals))
-    n = len(sorted)
-    T = 0.0
-    i = 0
-    while (i<n-1):
-        if sorted[i] == sorted[i+1]:
-            nties = 1
-            while (i<n-1) and (sorted[i] == sorted[i+1]):
-                nties = nties +1
-                i = i +1
-            T = T + nties**3 - nties
-        i = i+1
-    T = T / float(n**3-n)
-    return 1.0 - T
-
-
- def aranksums(x,y):
-    """
-Calculates the rank sums statistic on the provided scores and returns
-the result.
-
-Usage:   aranksums(x,y)     where x,y are arrays of values for 2 conditions
-Returns: z-statistic, two-tailed p-value
-"""
-    n1 = len(x)
-    n2 = len(y)
-    alldata = N.concatenate((x,y))
-    ranked = arankdata(alldata)
-    x = ranked[:n1]
-    y = ranked[n1:]
-    s = sum(x)
-    expected = n1*(n1+n2+1) / 2.0
-    z = (s - expected) / math.sqrt(n1*n2*(n1+n2+1)/12.0)
-    prob = 2*(1.0 - azprob(abs(z)))
-    return z, prob
-
-
- def awilcoxont(x,y):
-    """
-Calculates the Wilcoxon T-test for related samples and returns the
-result.  A non-parametric T-test.
-
-Usage:   awilcoxont(x,y)     where x,y are equal-length arrays for 2 conditions
-Returns: t-statistic, two-tailed p-value
-"""
-    if len(x) <> len(y):
-        raise ValueError, 'Unequal N in awilcoxont.  Aborting.'
-    d = x-y
-    d = N.compress(N.not_equal(d,0),d) # Keep all non-zero differences
-    count = len(d)
-    absd = abs(d)
-    absranked = arankdata(absd)
-    r_plus = 0.0
-    r_minus = 0.0
-    for i in range(len(absd)):
-        if d[i] < 0:
-            r_minus = r_minus + absranked[i]
-        else:
-            r_plus = r_plus + absranked[i]
-    wt = min(r_plus, r_minus)
-    mn = count * (count+1) * 0.25
-    se =  math.sqrt(count*(count+1)*(2.0*count+1.0)/24.0)
-    z = math.fabs(wt-mn) / se
-    z = math.fabs(wt-mn) / se
-    prob = 2*(1.0 -zprob(abs(z)))
-    return wt, prob
-
-
- def akruskalwallish(*args):
-    """
-The Kruskal-Wallis H-test is a non-parametric ANOVA for 3 or more
-groups, requiring at least 5 subjects in each group.  This function
-calculates the Kruskal-Wallis H and associated p-value for 3 or more
-independent samples.
-
-Usage:   akruskalwallish(*args)     args are separate arrays for 3+ conditions
-Returns: H-statistic (corrected for ties), associated p-value
-"""
-    assert len(args) == 3, "Need at least 3 groups in stats.akruskalwallish()"
-    args = list(args)
-    n = [0]*len(args)
-    n = map(len,args)
-    all = []
-    for i in range(len(args)):
-        all = all + args[i].tolist()
-    ranked = rankdata(all)
-    T = tiecorrect(ranked)
-    for i in range(len(args)):
-        args[i] = ranked[0:n[i]]
-        del ranked[0:n[i]]
-    rsums = []
-    for i in range(len(args)):
-        rsums.append(sum(args[i])**2)
-        rsums[i] = rsums[i] / float(n[i])
-    ssbn = sum(rsums)
-    totaln = sum(n)
-    h = 12.0 / (totaln*(totaln+1)) * ssbn - 3*(totaln+1)
-    df = len(args) - 1
-    if T == 0:
-        raise ValueError, 'All numbers are identical in akruskalwallish'
-    h = h / float(T)
-    return h, chisqprob(h,df)
-
-
- def afriedmanchisquare(*args):
-    """
-Friedman Chi-Square is a non-parametric, one-way within-subjects
-ANOVA.  This function calculates the Friedman Chi-square test for
-repeated measures and returns the result, along with the associated
-probability value.  It assumes 3 or more repeated measures.  Only 3
-levels requires a minimum of 10 subjects in the study.  Four levels
-requires 5 subjects per level(??).
-
-Usage:   afriedmanchisquare(*args)   args are separate arrays for 2+ conditions
-Returns: chi-square statistic, associated p-value
-"""
-    k = len(args)
-    if k < 3:
-        raise ValueError, '\nLess than 3 levels.  Friedman test not appropriate.\n'
-    n = len(args[0])
-    data = apply(pstat.aabut,args)
-    data = data.astype(N.float_)
-    for i in range(len(data)):
-        data[i] = arankdata(data[i])
-    ssbn = asum(asum(args,1)**2)
-    chisq = 12.0 / (k*n*(k+1)) * ssbn - 3*n*(k+1)
-    return chisq, achisqprob(chisq,k-1)
-
-
-#####################################
-####  APROBABILITY CALCULATIONS  ####
-#####################################
-
- def achisqprob(chisq,df):
-    """
-Returns the (1-tail) probability value associated with the provided chi-square
-value and df.  Heavily modified from chisq.c in Gary Perlman's |Stat.  Can
-handle multiple dimensions.
-
-Usage:   achisqprob(chisq,df)    chisq=chisquare stat., df=degrees of freedom
-"""
-    BIG = 200.0
-    def ex(x):
-        BIG = 200.0
-        exponents = N.where(N.less(x,-BIG),-BIG,x)
-        return N.exp(exponents)
-
-    if type(chisq) == N.ndarray:
-        arrayflag = 1
-    else:
-        arrayflag = 0
-        chisq = N.array([chisq])
-    if df < 1:
-        return N.ones(chisq.shape,N.float)
-    probs = N.zeros(chisq.shape,N.float_)
-    probs = N.where(N.less_equal(chisq,0),1.0,probs)  # set prob=1 for chisq<0
-    a = 0.5 * chisq
-    if df > 1:
-        y = ex(-a)
-    if df%2 == 0:
-        even = 1
-        s = y*1
-        s2 = s*1
-    else:
-        even = 0
-        s = 2.0 * azprob(-N.sqrt(chisq))
-        s2 = s*1
-    if (df > 2):
-        chisq = 0.5 * (df - 1.0)
-        if even:
-            z = N.ones(probs.shape,N.float_)
-        else:
-            z = 0.5 *N.ones(probs.shape,N.float_)
-        if even:
-            e = N.zeros(probs.shape,N.float_)
-        else:
-            e = N.log(N.sqrt(N.pi)) *N.ones(probs.shape,N.float_)
-        c = N.log(a)
-        mask = N.zeros(probs.shape)
-        a_big = N.greater(a,BIG)
-        a_big_frozen = -1 *N.ones(probs.shape,N.float_)
-        totalelements = N.multiply.reduce(N.array(probs.shape))
-        while asum(mask)<>totalelements:
-            e = N.log(z) + e
-            s = s + ex(c*z-a-e)
-            z = z + 1.0
-#            print z, e, s
-            newmask = N.greater(z,chisq)
-            a_big_frozen = N.where(newmask*N.equal(mask,0)*a_big, s, a_big_frozen)
-            mask = N.clip(newmask+mask,0,1)
-        if even:
-            z = N.ones(probs.shape,N.float_)
-            e = N.ones(probs.shape,N.float_)
-        else:
-            z = 0.5 *N.ones(probs.shape,N.float_)
-            e = 1.0 / N.sqrt(N.pi) / N.sqrt(a) * N.ones(probs.shape,N.float_)
-        c = 0.0
-        mask = N.zeros(probs.shape)
-        a_notbig_frozen = -1 *N.ones(probs.shape,N.float_)
-        while asum(mask)<>totalelements:
-            e = e * (a/z.astype(N.float_))
-            c = c + e
-            z = z + 1.0
-#            print '#2', z, e, c, s, c*y+s2
-            newmask = N.greater(z,chisq)
-            a_notbig_frozen = N.where(newmask*N.equal(mask,0)*(1-a_big),
-                                      c*y+s2, a_notbig_frozen)
-            mask = N.clip(newmask+mask,0,1)
-        probs = N.where(N.equal(probs,1),1,
-                        N.where(N.greater(a,BIG),a_big_frozen,a_notbig_frozen))
-        return probs
-    else:
-        return s
-
-
- def aerfcc(x):
-    """
-Returns the complementary error function erfc(x) with fractional error
-everywhere less than 1.2e-7.  Adapted from Numerical Recipies.  Can
-handle multiple dimensions.
-
-Usage:   aerfcc(x)
-"""
-    z = abs(x)
-    t = 1.0 / (1.0+0.5*z)
-    ans = t * N.exp(-z*z-1.26551223 + t*(1.00002368+t*(0.37409196+t*(0.09678418+t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+t*(-0.82215223+t*0.17087277)))))))))
-    return N.where(N.greater_equal(x,0), ans, 2.0-ans)
-
-
- def azprob(z):
-    """
-Returns the area under the normal curve 'to the left of' the given z value.
-Thus, 
-    for z<0, zprob(z) = 1-tail probability
-    for z>0, 1.0-zprob(z) = 1-tail probability
-    for any z, 2.0*(1.0-zprob(abs(z))) = 2-tail probability
-Adapted from z.c in Gary Perlman's |Stat.  Can handle multiple dimensions.
-
-Usage:   azprob(z)    where z is a z-value
-"""
-    def yfunc(y):
-        x = (((((((((((((-0.000045255659 * y
-                         +0.000152529290) * y -0.000019538132) * y
-                       -0.000676904986) * y +0.001390604284) * y
-                     -0.000794620820) * y -0.002034254874) * y
-                   +0.006549791214) * y -0.010557625006) * y
-                 +0.011630447319) * y -0.009279453341) * y
-               +0.005353579108) * y -0.002141268741) * y
-             +0.000535310849) * y +0.999936657524
-        return x
-
-    def wfunc(w):
-        x = ((((((((0.000124818987 * w
-                    -0.001075204047) * w +0.005198775019) * w
-                  -0.019198292004) * w +0.059054035642) * w
-                -0.151968751364) * w +0.319152932694) * w
-              -0.531923007300) * w +0.797884560593) * N.sqrt(w) * 2.0
-        return x
-
-    Z_MAX = 6.0    # maximum meaningful z-value
-    x = N.zeros(z.shape,N.float_) # initialize
-    y = 0.5 * N.fabs(z)
-    x = N.where(N.less(y,1.0),wfunc(y*y),yfunc(y-2.0)) # get x's
-    x = N.where(N.greater(y,Z_MAX*0.5),1.0,x)          # kill those with big Z
-    prob = N.where(N.greater(z,0),(x+1)*0.5,(1-x)*0.5)
-    return prob
-
-
- def aksprob(alam):
-     """
-Returns the probability value for a K-S statistic computed via ks_2samp.
-Adapted from Numerical Recipies.  Can handle multiple dimensions.
-
-Usage:   aksprob(alam)
-"""
-     if type(alam) == N.ndarray:
-         frozen = -1 *N.ones(alam.shape,N.float64)
-         alam = alam.astype(N.float64)
-         arrayflag = 1
-     else:
-         frozen = N.array(-1.)
-         alam = N.array(alam,N.float64)
-         arrayflag = 1
-     mask = N.zeros(alam.shape)
-     fac = 2.0 *N.ones(alam.shape,N.float_)
-     sum = N.zeros(alam.shape,N.float_)
-     termbf = N.zeros(alam.shape,N.float_)
-     a2 = N.array(-2.0*alam*alam,N.float64)
-     totalelements = N.multiply.reduce(N.array(mask.shape))
-     for j in range(1,201):
-         if asum(mask) == totalelements:
-             break
-         exponents = (a2*j*j)
-         overflowmask = N.less(exponents,-746)
-         frozen = N.where(overflowmask,0,frozen)
-         mask = mask+overflowmask
-         term = fac*N.exp(exponents)
-         sum = sum + term
-         newmask = N.where(N.less_equal(abs(term),(0.001*termbf)) +
-                           N.less(abs(term),1.0e-8*sum), 1, 0)
-         frozen = N.where(newmask*N.equal(mask,0), sum, frozen)
-         mask = N.clip(mask+newmask,0,1)
-         fac = -fac
-         termbf = abs(term)
-     if arrayflag:
-         return N.where(N.equal(frozen,-1), 1.0, frozen)  # 1.0 if doesn't converge
-     else:
-         return N.where(N.equal(frozen,-1), 1.0, frozen)[0]  # 1.0 if doesn't converge
-
-
- def afprob (dfnum, dfden, F):
-    """
-Returns the 1-tailed significance level (p-value) of an F statistic
-given the degrees of freedom for the numerator (dfR-dfF) and the degrees
-of freedom for the denominator (dfF).  Can handle multiple dims for F.
-
-Usage:   afprob(dfnum, dfden, F)   where usually dfnum=dfbn, dfden=dfwn
-"""
-    if type(F) == N.ndarray:
-        return abetai(0.5*dfden, 0.5*dfnum, dfden/(1.0*dfden+dfnum*F))
-    else:
-        return abetai(0.5*dfden, 0.5*dfnum, dfden/float(dfden+dfnum*F))
-
-
- def abetacf(a,b,x,verbose=1):
-    """
-Evaluates the continued fraction form of the incomplete Beta function,
-betai.  (Adapted from: Numerical Recipies in C.)  Can handle multiple
-dimensions for x.
-
-Usage:   abetacf(a,b,x,verbose=1)
-"""
-    ITMAX = 200
-    EPS = 3.0e-7
-
-    arrayflag = 1
-    if type(x) == N.ndarray:
-        frozen = N.ones(x.shape,N.float_) *-1  #start out w/ -1s, should replace all
-    else:
-        arrayflag = 0
-        frozen = N.array([-1])
-        x = N.array([x])
-    mask = N.zeros(x.shape)
-    bm = az = am = 1.0
-    qab = a+b
-    qap = a+1.0
-    qam = a-1.0
-    bz = 1.0-qab*x/qap
-    for i in range(ITMAX+1):
-        if N.sum(N.ravel(N.equal(frozen,-1)))==0:
-            break
-        em = float(i+1)
-        tem = em + em
-        d = em*(b-em)*x/((qam+tem)*(a+tem))
-        ap = az + d*am
-        bp = bz+d*bm
-        d = -(a+em)*(qab+em)*x/((qap+tem)*(a+tem))
-        app = ap+d*az
-        bpp = bp+d*bz
-        aold = az*1
-        am = ap/bpp
-        bm = bp/bpp
-        az = app/bpp
-        bz = 1.0
-        newmask = N.less(abs(az-aold),EPS*abs(az))
-        frozen = N.where(newmask*N.equal(mask,0), az, frozen)
-        mask = N.clip(mask+newmask,0,1)
-    noconverge = asum(N.equal(frozen,-1))
-    if noconverge <> 0 and verbose:
-        print 'a or b too big, or ITMAX too small in Betacf for ',noconverge,' elements'
-    if arrayflag:
-        return frozen
-    else:
-        return frozen[0]
-
-
- def agammln(xx):
-    """
-Returns the gamma function of xx.
-    Gamma(z) = Integral(0,infinity) of t^(z-1)exp(-t) dt.
-Adapted from: Numerical Recipies in C.  Can handle multiple dims ... but
-probably doesn't normally have to.
-
-Usage:   agammln(xx)
-"""
-    coeff = [76.18009173, -86.50532033, 24.01409822, -1.231739516,
-             0.120858003e-2, -0.536382e-5]
-    x = xx - 1.0
-    tmp = x + 5.5
-    tmp = tmp - (x+0.5)*N.log(tmp)
-    ser = 1.0
-    for j in range(len(coeff)):
-        x = x + 1
-        ser = ser + coeff[j]/x
-    return -tmp + N.log(2.50662827465*ser)
-
-
- def abetai(a,b,x,verbose=1):
-    """
-Returns the incomplete beta function:
-
-    I-sub-x(a,b) = 1/B(a,b)*(Integral(0,x) of t^(a-1)(1-t)^(b-1) dt)
-
-where a,b>0 and B(a,b) = G(a)*G(b)/(G(a+b)) where G(a) is the gamma
-function of a.  The continued fraction formulation is implemented
-here, using the betacf function.  (Adapted from: Numerical Recipies in
-C.)  Can handle multiple dimensions.
-
-Usage:   abetai(a,b,x,verbose=1)
-"""
-    TINY = 1e-15
-    if type(a) == N.ndarray:
-        if asum(N.less(x,0)+N.greater(x,1)) <> 0:
-            raise ValueError, 'Bad x in abetai'
-    x = N.where(N.equal(x,0),TINY,x)
-    x = N.where(N.equal(x,1.0),1-TINY,x)
-
-    bt = N.where(N.equal(x,0)+N.equal(x,1), 0, -1)
-    exponents = ( gammln(a+b)-gammln(a)-gammln(b)+a*N.log(x)+b*
-                  N.log(1.0-x) )
-    # 746 (below) is the MAX POSSIBLE BEFORE OVERFLOW
-    exponents = N.where(N.less(exponents,-740),-740,exponents)
-    bt = N.exp(exponents)
-    if type(x) == N.ndarray:
-        ans = N.where(N.less(x,(a+1)/(a+b+2.0)),
-                      bt*abetacf(a,b,x,verbose)/float(a),
-                      1.0-bt*abetacf(b,a,1.0-x,verbose)/float(b))
-    else:
-        if x<(a+1)/(a+b+2.0):
-            ans = bt*abetacf(a,b,x,verbose)/float(a)
-        else:
-            ans = 1.0-bt*abetacf(b,a,1.0-x,verbose)/float(b)
-    return ans
-
-
-#####################################
-#######  AANOVA CALCULATIONS  #######
-#####################################
-
- import LinearAlgebra, operator
- LA = LinearAlgebra
-
- def aglm(data,para):
-    """
-Calculates a linear model fit ... anova/ancova/lin-regress/t-test/etc. Taken
-from:
-    Peterson et al. Statistical limitations in functional neuroimaging
-    I. Non-inferential methods and statistical models.  Phil Trans Royal Soc
-    Lond B 354: 1239-1260.
-
-Usage:   aglm(data,para)
-Returns: statistic, p-value ???
-"""
-    if len(para) <> len(data):
-        print "data and para must be same length in aglm"
-        return
-    n = len(para)
-    p = pstat.aunique(para)
-    x = N.zeros((n,len(p)))  # design matrix
-    for l in range(len(p)):
-        x[:,l] = N.equal(para,p[l])
-    b = N.dot(N.dot(LA.inv(N.dot(N.transpose(x),x)),  # i.e., b=inv(X'X)X'Y
-                    N.transpose(x)),
-              data)
-    diffs = (data - N.dot(x,b))
-    s_sq = 1./(n-len(p)) * N.dot(N.transpose(diffs), diffs)
-
-    if len(p) == 2:  # ttest_ind
-        c = N.array([1,-1])
-        df = n-2
-        fact = asum(1.0/asum(x,0))  # i.e., 1/n1 + 1/n2 + 1/n3 ...
-        t = N.dot(c,b) / N.sqrt(s_sq*fact)
-        probs = abetai(0.5*df,0.5,float(df)/(df+t*t))
-        return t, probs
-
-
- def aF_oneway(*args):
-    """
-Performs a 1-way ANOVA, returning an F-value and probability given
-any number of groups.  From Heiman, pp.394-7.
-
-Usage:   aF_oneway (*args)    where *args is 2 or more arrays, one per
-                                  treatment group
-Returns: f-value, probability
-"""
-    na = len(args)            # ANOVA on 'na' groups, each in it's own array
-    means = [0]*na
-    vars = [0]*na
-    ns = [0]*na
-    alldata = []
-    tmp = map(N.array,args)
-    means = map(amean,tmp)
-    vars = map(avar,tmp)
-    ns = map(len,args)
-    alldata = N.concatenate(args)
-    bign = len(alldata)
-    sstot = ass(alldata)-(asquare_of_sums(alldata)/float(bign))
-    ssbn = 0
-    for a in args:
-        ssbn = ssbn + asquare_of_sums(N.array(a))/float(len(a))
-    ssbn = ssbn - (asquare_of_sums(alldata)/float(bign))
-    sswn = sstot-ssbn
-    dfbn = na-1
-    dfwn = bign - na
-    msb = ssbn/float(dfbn)
-    msw = sswn/float(dfwn)
-    f = msb/msw
-    prob = fprob(dfbn,dfwn,f)
-    return f, prob
-
-
- def aF_value (ER,EF,dfR,dfF):
-    """
-Returns an F-statistic given the following:
-        ER  = error associated with the null hypothesis (the Restricted model)
-        EF  = error associated with the alternate hypothesis (the Full model)
-        dfR = degrees of freedom the Restricted model
-        dfF = degrees of freedom associated with the Restricted model
-"""
-    return ((ER-EF)/float(dfR-dfF) / (EF/float(dfF)))
-
-
- def outputfstats(Enum, Eden, dfnum, dfden, f, prob):
-     Enum = round(Enum,3)
-     Eden = round(Eden,3)
-     dfnum = round(Enum,3)
-     dfden = round(dfden,3)
-     f = round(f,3)
-     prob = round(prob,3)
-     suffix = ''                       # for *s after the p-value
-     if  prob < 0.001:  suffix = '  ***'
-     elif prob < 0.01:  suffix = '  **'
-     elif prob < 0.05:  suffix = '  *'
-     title = [['EF/ER','DF','Mean Square','F-value','prob','']]
-     lofl = title+[[Enum, dfnum, round(Enum/float(dfnum),3), f, prob, suffix],
-                   [Eden, dfden, round(Eden/float(dfden),3),'','','']]
-     pstat.printcc(lofl)
-     return
-
-
- def F_value_multivariate(ER, EF, dfnum, dfden):
-     """
-Returns an F-statistic given the following:
-        ER  = error associated with the null hypothesis (the Restricted model)
-        EF  = error associated with the alternate hypothesis (the Full model)
-        dfR = degrees of freedom the Restricted model
-        dfF = degrees of freedom associated with the Restricted model
-where ER and EF are matrices from a multivariate F calculation.
-"""
-     if type(ER) in [IntType, FloatType]:
-         ER = N.array([[ER]])
-     if type(EF) in [IntType, FloatType]:
-         EF = N.array([[EF]])
-     n_um = (LA.det(ER) - LA.det(EF)) / float(dfnum)
-     d_en = LA.det(EF) / float(dfden)
-     return n_um / d_en
-
-
-#####################################
-#######  ASUPPORT FUNCTIONS  ########
-#####################################
-
- def asign(a):
-    """
-Usage:   asign(a)
-Returns: array shape of a, with -1 where a<0 and +1 where a>=0
-"""
-    a = N.asarray(a)
-    if ((type(a) == type(1.4)) or (type(a) == type(1))):
-        return a-a-N.less(a,0)+N.greater(a,0)
-    else:
-        return N.zeros(N.shape(a))-N.less(a,0)+N.greater(a,0)
-
-
- def asum (a, dimension=None,keepdims=0):
-     """
-An alternative to the Numeric.add.reduce function, which allows one to
-(1) collapse over multiple dimensions at once, and/or (2) to retain
-all dimensions in the original array (squashing one down to size.
-Dimension can equal None (ravel array first), an integer (the
-dimension over which to operate), or a sequence (operate over multiple
-dimensions).  If keepdims=1, the resulting array will have as many
-dimensions as the input array.
-
-Usage:   asum(a, dimension=None, keepdims=0)
-Returns: array summed along 'dimension'(s), same _number_ of dims if keepdims=1
-"""
-     if type(a) == N.ndarray and a.dtype in [N.int_, N.short, N.ubyte]:
-         a = a.astype(N.float_)
-     if dimension == None:
-         s = N.sum(N.ravel(a))
-     elif type(dimension) in [IntType,FloatType]:
-         s = N.add.reduce(a, dimension)
-         if keepdims == 1:
-             shp = list(a.shape)
-             shp[dimension] = 1
-             s = N.reshape(s,shp)
-     else: # must be a SEQUENCE of dims to sum over
-        dims = list(dimension)
-        dims.sort()
-        dims.reverse()
-        s = a *1.0
-        for dim in dims:
-            s = N.add.reduce(s,dim)
-        if keepdims == 1:
-            shp = list(a.shape)
-            for dim in dims:
-                shp[dim] = 1
-            s = N.reshape(s,shp)
-     return s
-
-
- def acumsum (a,dimension=None):
-    """
-Returns an array consisting of the cumulative sum of the items in the
-passed array.  Dimension can equal None (ravel array first), an
-integer (the dimension over which to operate), or a sequence (operate
-over multiple dimensions, but this last one just barely makes sense).
-
-Usage:   acumsum(a,dimension=None)
-"""
-    if dimension == None:
-        a = N.ravel(a)
-        dimension = 0
-    if type(dimension) in [ListType, TupleType, N.ndarray]:
-        dimension = list(dimension)
-        dimension.sort()
-        dimension.reverse()
-        for d in dimension:
-            a = N.add.accumulate(a,d)
-        return a
-    else:
-        return N.add.accumulate(a,dimension)
-
-
- def ass(inarray, dimension=None, keepdims=0):
-    """
-Squares each value in the passed array, adds these squares & returns
-the result.  Unfortunate function name. :-) Defaults to ALL values in
-the array.  Dimension can equal None (ravel array first), an integer
-(the dimension over which to operate), or a sequence (operate over
-multiple dimensions).  Set keepdims=1 to maintain the original number
-of dimensions.
-
-Usage:   ass(inarray, dimension=None, keepdims=0)
-Returns: sum-along-'dimension' for (inarray*inarray)
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    return asum(inarray*inarray,dimension,keepdims)
-
-
- def asummult (array1,array2,dimension=None,keepdims=0):
-    """
-Multiplies elements in array1 and array2, element by element, and
-returns the sum (along 'dimension') of all resulting multiplications.
-Dimension can equal None (ravel array first), an integer (the
-dimension over which to operate), or a sequence (operate over multiple
-dimensions).  A trivial function, but included for completeness.
-
-Usage:   asummult(array1,array2,dimension=None,keepdims=0)
-"""
-    if dimension == None:
-        array1 = N.ravel(array1)
-        array2 = N.ravel(array2)
-        dimension = 0
-    return asum(array1*array2,dimension,keepdims)
-
-
- def asquare_of_sums(inarray, dimension=None, keepdims=0):
-    """
-Adds the values in the passed array, squares that sum, and returns the
-result.  Dimension can equal None (ravel array first), an integer (the
-dimension over which to operate), or a sequence (operate over multiple
-dimensions).  If keepdims=1, the returned array will have the same
-NUMBER of dimensions as the original.
-
-Usage:   asquare_of_sums(inarray, dimension=None, keepdims=0)
-Returns: the square of the sum over dim(s) in dimension
-"""
-    if dimension == None:
-        inarray = N.ravel(inarray)
-        dimension = 0
-    s = asum(inarray,dimension,keepdims)
-    if type(s) == N.ndarray:
-        return s.astype(N.float_)*s
-    else:
-        return float(s)*s
-
-
- def asumdiffsquared(a,b, dimension=None, keepdims=0):
-    """
-Takes pairwise differences of the values in arrays a and b, squares
-these differences, and returns the sum of these squares.  Dimension
-can equal None (ravel array first), an integer (the dimension over
-which to operate), or a sequence (operate over multiple dimensions).
-keepdims=1 means the return shape = len(a.shape) = len(b.shape)
-
-Usage:   asumdiffsquared(a,b)
-Returns: sum[ravel(a-b)**2]
-"""
-    if dimension == None:
-        inarray = N.ravel(a)
-        dimension = 0
-    return asum((a-b)**2,dimension,keepdims)
-
-
- def ashellsort(inarray):
-    """
-Shellsort algorithm.  Sorts a 1D-array.
-
-Usage:   ashellsort(inarray)
-Returns: sorted-inarray, sorting-index-vector (for original array)
-"""
-    n = len(inarray)
-    svec = inarray *1.0
-    ivec = range(n)
-    gap = n/2   # integer division needed
-    while gap >0:
-        for i in range(gap,n):
-            for j in range(i-gap,-1,-gap):
-                while j>=0 and svec[j]>svec[j+gap]:
-                    temp        = svec[j]
-                    svec[j]     = svec[j+gap]
-                    svec[j+gap] = temp
-                    itemp       = ivec[j]
-                    ivec[j]     = ivec[j+gap]
-                    ivec[j+gap] = itemp
-        gap = gap / 2  # integer division needed
-#    svec is now sorted input vector, ivec has the order svec[i] = vec[ivec[i]]
-    return svec, ivec
-
-
- def arankdata(inarray):
-    """
-Ranks the data in inarray, dealing with ties appropritely.  Assumes
-a 1D inarray.  Adapted from Gary Perlman's |Stat ranksort.
-
-Usage:   arankdata(inarray)
-Returns: array of length equal to inarray, containing rank scores
-"""
-    n = len(inarray)
-    svec, ivec = ashellsort(inarray)
-    sumranks = 0
-    dupcount = 0
-    newarray = N.zeros(n,N.float_)
-    for i in range(n):
-        sumranks = sumranks + i
-        dupcount = dupcount + 1
-        if i==n-1 or svec[i] <> svec[i+1]:
-            averank = sumranks / float(dupcount) + 1
-            for j in range(i-dupcount+1,i+1):
-                newarray[ivec[j]] = averank
-            sumranks = 0
-            dupcount = 0
-    return newarray
-
-
- def afindwithin(data):
-    """
-Returns a binary vector, 1=within-subject factor, 0=between.  Input
-equals the entire data array (i.e., column 1=random factor, last
-column = measured values.
-
-Usage:   afindwithin(data)     data in |Stat format
-"""
-    numfact = len(data[0])-2
-    withinvec = [0]*numfact
-    for col in range(1,numfact+1):
-        rows = pstat.linexand(data,col,pstat.unique(pstat.colex(data,1))[0])  # get 1 level of this factor
-        if len(pstat.unique(pstat.colex(rows,0))) < len(rows):   # if fewer subjects than scores on this factor
-            withinvec[col-1] = 1
-    return withinvec
-
-
- #########################################################
- #########################################################
- ######  RE-DEFINE DISPATCHES TO INCLUDE ARRAYS  #########
- #########################################################
- #########################################################
-
-## CENTRAL TENDENCY:
- geometricmean = Dispatch ( (lgeometricmean, (ListType, TupleType)),
-                            (ageometricmean, (N.ndarray,)) )
- harmonicmean = Dispatch ( (lharmonicmean, (ListType, TupleType)),
-                           (aharmonicmean, (N.ndarray,)) )
- mean = Dispatch ( (lmean, (ListType, TupleType)),
-                   (amean, (N.ndarray,)) )
- median = Dispatch ( (lmedian, (ListType, TupleType)),
-                     (amedian, (N.ndarray,)) )
- medianscore = Dispatch ( (lmedianscore, (ListType, TupleType)),
-                          (amedianscore, (N.ndarray,)) )
- mode = Dispatch ( (lmode, (ListType, TupleType)),
-                   (amode, (N.ndarray,)) )
- tmean = Dispatch ( (atmean, (N.ndarray,)) )
- tvar = Dispatch ( (atvar, (N.ndarray,)) )
- tstdev = Dispatch ( (atstdev, (N.ndarray,)) )
- tsem = Dispatch ( (atsem, (N.ndarray,)) )
-
-## VARIATION:
- moment = Dispatch ( (lmoment, (ListType, TupleType)),
-                     (amoment, (N.ndarray,)) )
- variation = Dispatch ( (lvariation, (ListType, TupleType)),
-                        (avariation, (N.ndarray,)) )
- skew = Dispatch ( (lskew, (ListType, TupleType)),
-                   (askew, (N.ndarray,)) )
- kurtosis = Dispatch ( (lkurtosis, (ListType, TupleType)),
-                       (akurtosis, (N.ndarray,)) )
- describe = Dispatch ( (ldescribe, (ListType, TupleType)),
-                       (adescribe, (N.ndarray,)) )
-
-## DISTRIBUTION TESTS
-
- skewtest = Dispatch ( (askewtest, (ListType, TupleType)),
-                       (askewtest, (N.ndarray,)) )
- kurtosistest = Dispatch ( (akurtosistest, (ListType, TupleType)),
-                           (akurtosistest, (N.ndarray,)) )
- normaltest = Dispatch ( (anormaltest, (ListType, TupleType)),
-                         (anormaltest, (N.ndarray,)) )
-
-## FREQUENCY STATS:
- itemfreq = Dispatch ( (litemfreq, (ListType, TupleType)),
-                       (aitemfreq, (N.ndarray,)) )
- scoreatpercentile = Dispatch ( (lscoreatpercentile, (ListType, TupleType)),
-                                (ascoreatpercentile, (N.ndarray,)) )
- percentileofscore = Dispatch ( (lpercentileofscore, (ListType, TupleType)),
-                                 (apercentileofscore, (N.ndarray,)) )
- histogram = Dispatch ( (lhistogram, (ListType, TupleType)),
-                        (ahistogram, (N.ndarray,)) )
- cumfreq = Dispatch ( (lcumfreq, (ListType, TupleType)),
-                      (acumfreq, (N.ndarray,)) )
- relfreq = Dispatch ( (lrelfreq, (ListType, TupleType)),
-                      (arelfreq, (N.ndarray,)) )
- 
-## VARIABILITY:
- obrientransform = Dispatch ( (lobrientransform, (ListType, TupleType)),
-                              (aobrientransform, (N.ndarray,)) )
- samplevar = Dispatch ( (lsamplevar, (ListType, TupleType)),
-                        (asamplevar, (N.ndarray,)) )
- samplestdev = Dispatch ( (lsamplestdev, (ListType, TupleType)),
-                          (asamplestdev, (N.ndarray,)) )
- signaltonoise = Dispatch( (asignaltonoise, (N.ndarray,)),)
- var = Dispatch ( (lvar, (ListType, TupleType)),
-                  (avar, (N.ndarray,)) )
- stdev = Dispatch ( (lstdev, (ListType, TupleType)),
-                    (astdev, (N.ndarray,)) )
- sterr = Dispatch ( (lsterr, (ListType, TupleType)),
-                    (asterr, (N.ndarray,)) )
- sem = Dispatch ( (lsem, (ListType, TupleType)),
-                  (asem, (N.ndarray,)) )
- z = Dispatch ( (lz, (ListType, TupleType)),
-                (az, (N.ndarray,)) )
- zs = Dispatch ( (lzs, (ListType, TupleType)),
-                 (azs, (N.ndarray,)) )
- 
-## TRIMMING FCNS:
- threshold = Dispatch( (athreshold, (N.ndarray,)),)
- trimboth = Dispatch ( (ltrimboth, (ListType, TupleType)),
-                       (atrimboth, (N.ndarray,)) )
- trim1 = Dispatch ( (ltrim1, (ListType, TupleType)),
-                    (atrim1, (N.ndarray,)) )
- 
-## CORRELATION FCNS:
- paired = Dispatch ( (lpaired, (ListType, TupleType)),
-                     (apaired, (N.ndarray,)) )
- lincc = Dispatch ( (llincc, (ListType, TupleType)),
-                       (alincc, (N.ndarray,)) )
- pearsonr = Dispatch ( (lpearsonr, (ListType, TupleType)),
-                       (apearsonr, (N.ndarray,)) )
- spearmanr = Dispatch ( (lspearmanr, (ListType, TupleType)),
-                        (aspearmanr, (N.ndarray,)) )
- pointbiserialr = Dispatch ( (lpointbiserialr, (ListType, TupleType)),
-                             (apointbiserialr, (N.ndarray,)) )
- kendalltau = Dispatch ( (lkendalltau, (ListType, TupleType)),
-                         (akendalltau, (N.ndarray,)) )
- linregress = Dispatch ( (llinregress, (ListType, TupleType)),
-                         (alinregress, (N.ndarray,)) )
- 
-## INFERENTIAL STATS:
- ttest_1samp = Dispatch ( (lttest_1samp, (ListType, TupleType)),
-                          (attest_1samp, (N.ndarray,)) )
- ttest_ind = Dispatch ( (lttest_ind, (ListType, TupleType)),
-                        (attest_ind, (N.ndarray,)) )
- ttest_rel = Dispatch ( (lttest_rel, (ListType, TupleType)),
-                        (attest_rel, (N.ndarray,)) )
- chisquare = Dispatch ( (lchisquare, (ListType, TupleType)),
-                        (achisquare, (N.ndarray,)) )
- ks_2samp = Dispatch ( (lks_2samp, (ListType, TupleType)),
-                       (aks_2samp, (N.ndarray,)) )
- mannwhitneyu = Dispatch ( (lmannwhitneyu, (ListType, TupleType)),
-                           (amannwhitneyu, (N.ndarray,)) )
- tiecorrect = Dispatch ( (ltiecorrect, (ListType, TupleType)),
-                         (atiecorrect, (N.ndarray,)) )
- ranksums = Dispatch ( (lranksums, (ListType, TupleType)),
-                       (aranksums, (N.ndarray,)) )
- wilcoxont = Dispatch ( (lwilcoxont, (ListType, TupleType)),
-                        (awilcoxont, (N.ndarray,)) )
- kruskalwallish = Dispatch ( (lkruskalwallish, (ListType, TupleType)),
-                             (akruskalwallish, (N.ndarray,)) )
- friedmanchisquare = Dispatch ( (lfriedmanchisquare, (ListType, TupleType)),
-                                (afriedmanchisquare, (N.ndarray,)) )
- 
-## PROBABILITY CALCS:
- chisqprob = Dispatch ( (lchisqprob, (IntType, FloatType)),
-                        (achisqprob, (N.ndarray,)) )
- zprob = Dispatch ( (lzprob, (IntType, FloatType)),
-                    (azprob, (N.ndarray,)) )
- ksprob = Dispatch ( (lksprob, (IntType, FloatType)),
-                     (aksprob, (N.ndarray,)) )
- fprob = Dispatch ( (lfprob, (IntType, FloatType)),
-                    (afprob, (N.ndarray,)) )
- betacf = Dispatch ( (lbetacf, (IntType, FloatType)),
-                     (abetacf, (N.ndarray,)) )
- betai = Dispatch ( (lbetai, (IntType, FloatType)),
-                    (abetai, (N.ndarray,)) )
- erfcc = Dispatch ( (lerfcc, (IntType, FloatType)),
-                    (aerfcc, (N.ndarray,)) )
- gammln = Dispatch ( (lgammln, (IntType, FloatType)),
-                     (agammln, (N.ndarray,)) )
- 
-## ANOVA FUNCTIONS:
- F_oneway = Dispatch ( (lF_oneway, (ListType, TupleType)),
-                       (aF_oneway, (N.ndarray,)) )
- F_value = Dispatch ( (lF_value, (ListType, TupleType)),
-                      (aF_value, (N.ndarray,)) )
-
-## SUPPORT FUNCTIONS:
- incr = Dispatch ( (lincr, (ListType, TupleType, N.ndarray)), )
- sum = Dispatch ( (lsum, (ListType, TupleType)),
-                  (asum, (N.ndarray,)) )
- cumsum = Dispatch ( (lcumsum, (ListType, TupleType)),
-                     (acumsum, (N.ndarray,)) )
- ss = Dispatch ( (lss, (ListType, TupleType)),
-                 (ass, (N.ndarray,)) )
- summult = Dispatch ( (lsummult, (ListType, TupleType)),
-                      (asummult, (N.ndarray,)) )
- square_of_sums = Dispatch ( (lsquare_of_sums, (ListType, TupleType)),
-                             (asquare_of_sums, (N.ndarray,)) )
- sumdiffsquared = Dispatch ( (lsumdiffsquared, (ListType, TupleType)),
-                             (asumdiffsquared, (N.ndarray,)) )
- shellsort = Dispatch ( (lshellsort, (ListType, TupleType)),
-                        (ashellsort, (N.ndarray,)) )
- rankdata = Dispatch ( (lrankdata, (ListType, TupleType)),
-                       (arankdata, (N.ndarray,)) )
- findwithin = Dispatch ( (lfindwithin, (ListType, TupleType)),
-                         (afindwithin, (N.ndarray,)) )
-
-######################  END OF NUMERIC FUNCTION BLOCK  #####################
-
-######################  END OF STATISTICAL FUNCTIONS  ######################
-
-except ImportError:
- pass

Removed: zorg/trunk/lnt/lnt/formats/AppleOpenSSLReader.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/formats/AppleOpenSSLReader.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/formats/AppleOpenSSLReader.py (original)
+++ zorg/trunk/lnt/lnt/formats/AppleOpenSSLReader.py (removed)
@@ -1,111 +0,0 @@
-"""
-Converter for a custom format with the output of OpenSSL test runs.
-"""
-
-import os
-
-def parseOpenSSLFile(path):
-    data = open(path).read()
-    lines = list(open(path))
-    lnfields = [ln.strip().split(':') for ln in lines]
-    assert(lnfields[0][0] == '+H')
-    header = lnfields[0]
-    blockSizes = map(int, header[1:])
-
-    # Cipher -> [(Block Size,Value)*]
-    data = {}
-    for fields in lnfields[1:]:
-        # Ignore other fields
-        if fields[0] != '+F':
-            continue
-
-        name = fields[2]
-        countsPerBlock = fields[3:]
-        assert len(countsPerBlock) == len(blockSizes)
-        data[name] = [(b,float(c))
-                      for b,c in zip(blockSizes,countsPerBlock)]
-
-    return data
-
-def _matches_format(path_or_file):
-    # If this is a file, we definitely can't load it.
-    if not isinstance(path_or_file,str):
-        return False
-
-    # Assume an input matches this format if any of the key files exists.
-    return (os.path.exists(os.path.join(path_or_file, 'svn-revision')) or
-            os.path.exists(os.path.join(path_or_file, 'start.timestamp')) or
-            os.path.exists(os.path.join(path_or_file, 'finished.timestamp')))
-                     
-def _load_data(path):
-    # Look for svn-revision and timestamps.
-
-    llvmRevision = ''
-    startTime = endTime = ''
-
-    f = os.path.join(path, 'svn-revision')
-    if os.path.exists(f):
-        svnRevisionData = open(f).read()
-        assert(svnRevisionData[0] == 'r')
-        llvmRevision = int(svnRevisionData[1:])
-
-    f = os.path.join(path, 'start.timestamp')
-    if os.path.exists(f):
-        startTime = open(f).read().strip()
-
-    f = os.path.join(path, 'finished.timestamp')
-    if os.path.exists(f):
-        endTime = open(f).read().strip()
-
-    # Look for sub directories
-    openSSLData = []
-    for file in os.listdir(path):
-        p = os.path.join(path, file)
-        if os.path.isdir(p):
-            # Look for Tests/Apple.OpenSSL.64/speed.txt
-            p = os.path.join(p, 'Tests/Apple.OpenSSL.64/speed.txt')
-            if os.path.exists(p):
-                openSSLData.append((file, parseOpenSSLFile(p)))
-
-    basename = 'apple_openssl'
-
-    machine = { 'Name' : 'dgohman.apple.com',
-                'Info' : {  } }
-
-    run = { 'Start Time' : startTime,
-            'End Time' : endTime,
-            'Info' : { 'llvm-revision' : llvmRevision,
-                       'tag' : 'apple_openssl' } }
-
-    tests = []
-    groupInfo = []
-
-    for dirName,dirData in openSSLData:
-        # Demangle compiler & flags
-        if dirName.startswith('gcc'):
-            compiler = 'gcc'
-        elif dirName.startswith('llvm-gcc'):
-            compiler = 'llvm-gcc'
-        else:
-            raise ValueError,compiler
-        assert dirName[len(compiler)] == '-'
-        flags = dirName[len(compiler)+1:]
-
-        for cipher,values in dirData.items():
-            testName = basename + '.' + cipher + '.ips'
-            for block,value in values:
-                parameters = { 'blockSize' : block,
-                               'compiler' : compiler,
-                               'compiler_flags' : flags }
-                tests.append( { 'Name' : testName,
-                                'Info' : parameters,
-                                'Data' : [value] } )
-
-    return { 'Machine' : machine,
-             'Run' : run,
-             'Tests' : tests,
-             'Group Info' : groupInfo }
-
-format = { 'name' : 'apple_openssl',
-           'predicate' : _matches_format,
-           'read' : _load_data }

Removed: zorg/trunk/lnt/lnt/formats/JSONFormat.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/formats/JSONFormat.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/formats/JSONFormat.py (original)
+++ zorg/trunk/lnt/lnt/formats/JSONFormat.py (removed)
@@ -1,22 +0,0 @@
-from lnt.util import json
-
-def _matches_format(path_or_file):
-    if isinstance(path_or_file, str):
-        path_or_file = open(path_or_file)
-
-    try:
-        json.load(path_or_file)
-        return True
-    except:
-        return False
-
-def _load_format(path_or_file):
-    if isinstance(path_or_file, str):
-        path_or_file = open(path_or_file)
-    
-    return json.load(path_or_file)
-    
-format = { 'name' : 'json',
-           'predicate' : _matches_format,
-           'read' : _load_format,
-           'write' : json.dump }

Removed: zorg/trunk/lnt/lnt/formats/NightlytestReader.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/formats/NightlytestReader.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/formats/NightlytestReader.py (original)
+++ zorg/trunk/lnt/lnt/formats/NightlytestReader.py (removed)
@@ -1,233 +0,0 @@
-"""
-Data converter from the llvm/utils/NewNightlyTest.pl report file format
-(*-sentdata.txt) to the LNT plist format.
-"""
-
-import re
-
-kDataKeyStart = re.compile('(.*)  =>(.*)')
-
-def _matches_format(path_or_file):
-    if isinstance(path_or_file, str):
-        path_or_file = open(path_or_file)
-
-    # Assume this is in nightlytes format if the first line matches the
-    # key-value format.
-    for ln in path_or_file:
-        m = kDataKeyStart.match(ln)
-        if m:
-            return True
-        return False
-
-        
-def _load_data(path_or_file):
-    def parseDGResults(text):
-        results = {}
-        if 'Dejagnu skipped by user choice' in text:
-            return results
-        for ln in text.strip().split('\n'):
-            result,value = ln.split(':',1)
-            results[result] = results.get(result,[])
-            results[result].append(value)
-        return results
-
-    if isinstance(path_or_file, str):
-        path_or_file = open(path_or_file)
-
-    basename = 'nightlytest'
-
-    # Guess the format (server side or client side) based on the first
-    # character.
-    f = path_or_file
-    isServerSide = (f.read(1) == '\'')
-    f.seek(0)
-
-    data = {}
-
-    current = None
-    inData = False
-    for ln in f:
-        if inData:
-            if ln == 'EOD\n':
-                inData = False
-            else:
-                data[current] += ln
-            continue
-
-        m = kDataKeyStart.match(ln)
-        if m:
-            current,value = m.groups()
-            if isServerSide:
-                assert current[0] == current[-1] == "'"
-                current = current[1:-1]
-                assert value[0] == value[1] == ' '
-                value = value[2:]
-                if value == '<<EOD':
-                    value = ''
-                    inData = True
-                else:
-                    assert value[0] == value[-2] == '"'
-                    assert value[-1] == ','
-                    value = value[1:-2]
-            data[current] = value
-        elif isServerSide:
-            assert ln == ',\n'
-        else:
-            assert current is not None
-            data[current] += ln
-
-    # Things we are ignoring for now
-    data.pop('a_file_sizes')
-    data.pop('all_tests')
-    data.pop('build_data')
-    data.pop('cvs_dir_count')
-    data.pop('cvs_file_count')
-    data.pop('cvsaddedfiles')
-    data.pop('cvsmodifiedfiles')
-    data.pop('cvsremovedfiles')
-    data.pop('cvsusercommitlist')
-    data.pop('cvsuserupdatelist')
-    data.pop('dejagnutests_log')
-    data.pop('expfail_tests')
-    data.pop('lines_of_code')
-    data.pop('llcbeta_options')
-    data.pop('new_tests')
-    data.pop('o_file_sizes')
-    data.pop('passing_tests')
-    data.pop('removed_tests')
-    data.pop('target_triple')
-    data.pop('unexpfail_tests')
-    data.pop('warnings')
-    data.pop('warnings_added')
-    data.pop('warnings_removed')
-
-    starttime = data.pop('starttime').strip()
-    endtime = data.pop('endtime').strip()
-
-    nickname = data.pop('nickname').strip()
-    machine_data = data.pop('machine_data').strip()
-    buildstatus = data.pop('buildstatus').strip()
-    configtime_user = data.pop('configtime_cpu')
-    configtime_wall = data.pop('configtime_wall')
-    checkouttime_user = data.pop('cvscheckouttime_cpu')
-    checkouttime_wall = data.pop('cvscheckouttime_wall')
-    dgtime_user = data.pop('dejagnutime_cpu')
-    dgtime_wall = data.pop('dejagnutime_wall')
-    buildtime_wall = float(data.pop('buildtime_wall').strip())
-    buildtime_user = float(data.pop('buildtime_cpu').strip())
-    gcc_version = data.pop('gcc_version')
-    dejagnutests_results = data.pop('dejagnutests_results')
-    multisource = data.pop('multisource_programstable')
-    singlesource = data.pop('singlesource_programstable')
-    externals = data.pop('externalsource_programstable')
-
-    assert not data.keys()
-
-    machine = { 'Name' : nickname,
-                'Info' : { 'gcc_version' : gcc_version } }
-    for ln in machine_data.split('\n'):
-        ln = ln.strip()
-        if not ln:
-            continue
-        assert ':' in ln
-        key,value = ln.split(':',1)
-        machine['Info'][key] = value
-
-    # We definitely don't want these in the machine data.
-    if 'time' in machine['Info']:
-        machine['Info'].pop('time')
-    if 'date' in machine['Info']:
-        machine['Info'].pop('date')
-
-    run = { 'Start Time' : starttime,
-            'End Time' : endtime,
-            'Info' : { 'tag' : 'nightlytest' } }
-
-    tests = []
-
-    # llvm-test doesn't provide this
-    infoData = {}
-
-    # Summary test information
-    tests.append( { 'Name' : basename + '.Summary.configtime.wall',
-                    'Info' : infoData,
-                    'Data' : [configtime_wall] } )
-    tests.append( { 'Name' : basename + '.Summary.configtime.user',
-                    'Info' : infoData,
-                    'Data' : [configtime_user] } )
-    tests.append( { 'Name' : basename + '.Summary.checkouttime.wall',
-                    'Info' : infoData,
-                    'Data' : [checkouttime_wall] } )
-    tests.append( { 'Name' : basename + '.Summary.checkouttime.user',
-                    'Info' : infoData,
-                    'Data' : [checkouttime_user] } )
-    tests.append( { 'Name' : basename + '.Summary.buildtime.wall',
-                    'Info' : infoData,
-                    'Data' : [buildtime_wall] } )
-    tests.append( { 'Name' : basename + '.Summary.buildtime.user',
-                    'Info' : infoData,
-                    'Data' : [buildtime_user] } )
-    tests.append( { 'Name' : basename + '.Summary.dgtime.wall',
-                    'Info' : infoData,
-                    'Data' : [dgtime_wall] } )
-    tests.append( { 'Name' : basename + '.Summary.dgtime.user',
-                    'Info' : infoData,
-                    'Data' : [dgtime_user] } )
-    tests.append( { 'Name' : basename + '.Summary.buildstatus',
-                    'Info' : infoData,
-                    'Data' : [buildstatus == 'OK'] } )
-
-    # DejaGNU Info
-    results = parseDGResults(dejagnutests_results)
-    for name in ('PASS', 'FAIL', 'XPASS', 'XFAIL'):
-        tests.append( { 'Name' : basename + '.DejaGNU.' + name,
-                        'Info' : infoData,
-                        'Data' : [len(results.get(name,[]))] } )
-
-    # llvm-test results
-    for groupname,data in (('SingleSource', singlesource),
-                           ('MultiSource', multisource),
-                           ('Externals', externals)):
-        lines = data.split('\n')
-        header = lines[0].strip().split(',')
-        for ln in lines[1:]:
-            ln = ln.strip()
-            if not ln:
-                continue
-            entry = dict([(k,v.strip())
-                           for k,v in zip(header, ln.split(','))])
-            testname = basename + '.%s/%s' % (groupname,
-                                              entry['Program'].replace('.','_'))
-
-            for name,key,tname in (('gcc.compile', 'GCCAS', 'time'),
-                                   ('bc.compile', 'Bytecode', 'size'),
-                                   ('llc.compile', 'LLC compile', 'time'),
-                                   ('llc-beta.compile', 'LLC-BETA compile', 'time'),
-                                   ('jit.compile', 'JIT codegen', 'time'),
-                                   ('gcc.exec', 'GCC', 'time'),
-                                   ('cbe.exec', 'CBE', 'time'),
-                                   ('llc.exec', 'LLC', 'time'),
-                                   ('llc-beta.exec', 'LLC-BETA', 'time'),
-                                   ('jit.exec', 'JIT', 'time'),
-                             ):
-                time = entry[key]
-                if time == '*':
-                    tests.append( { 'Name' : testname + '.%s.success' % name,
-                                    'Info' : infoData,
-                                    'Data' : [0] } )
-                else:
-                    tests.append( { 'Name' : testname + '.%s.success' % name,
-                                    'Info' : infoData,
-                                    'Data' : [1] } )
-                    tests.append( { 'Name' : testname + '.%s.%s' % (name, tname),
-                                    'Info' : infoData,
-                                    'Data' : [float(time)] } )
-        pass
-
-    return { 'Machine' : machine,
-             'Run' : run,
-             'Tests' : tests }
-
-format = { 'name' : 'nightlytest',
-           'predicate' : _matches_format,
-           'read' : _load_data }

Removed: zorg/trunk/lnt/lnt/formats/PlistFormat.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/formats/PlistFormat.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/formats/PlistFormat.py (original)
+++ zorg/trunk/lnt/lnt/formats/PlistFormat.py (removed)
@@ -1,13 +0,0 @@
-import plistlib
-
-def _matches_format(path_or_file):
-    try:
-        plistlib.readPlist(path_or_file)
-        return True
-    except:
-        return False
-
-format = { 'name' : 'plist',
-           'predicate' : _matches_format,
-           'read' : plistlib.readPlist,
-           'write' : plistlib.writePlist }

Removed: zorg/trunk/lnt/lnt/formats/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/formats/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/formats/__init__.py (original)
+++ zorg/trunk/lnt/lnt/formats/__init__.py (removed)
@@ -1,85 +0,0 @@
-"""
-Utilities for converting to LNT's test format.
-
-LNT formats are described by dictionaries with 'name', 'read', and 'write'
-fields. Only the 'name' field is required. The 'read' field should be a callable
-taking a path_or_file object, the 'write' function should be a callable taking a
-Python object to write, and the path_or_file to write to.
-"""
-
-from AppleOpenSSLReader import format as apple_openssl
-from NightlytestReader import format as nightlytest
-from PlistFormat import format as plist
-from JSONFormat import format as json
-
-# FIXME: Lazy loading would be nice.
-formats = [plist, json, nightlytest, apple_openssl]
-formats_by_name = dict((f['name'], f) for f in formats)
-format_names = formats_by_name.keys()
-
-def get_format(name):
-    """get_format(name) -> [format]
-
-    Loookup a format object by name.
-    """
-
-    return formats_by_name.get(name)
-
-def guess_format(path_or_file):
-    """guess_format(path_or_file) -> [format]
-
-    Guess which format should be used to load the given file and return it, if
-    found.
-    """
-
-    # Check that files are seekable.
-    is_file = False
-    if not isinstance(path_or_file, str):
-        is_file = True
-        path_or_file.seek(0)
-
-    matches = None
-    for f in formats:
-        # Check if the path matches this format, ignoring exceptions.
-        try:
-            try:
-                if not f['predicate'](path_or_file):
-                    continue
-            except:
-                continue
-        finally:
-            if is_file:
-                # Reset seek.
-                path_or_file.seek(0)
-
-        # Reject anything which matches multiple formats.
-        if matches:
-            return None
-
-        matches = f
-
-    return matches
-
-def read_any(path_or_file, format_name):
-    """read_any(path_or_file, format_name) -> [format]
-
-    Attempt to read any compatible LNT test format file. The format_name can be
-    an actual format name, or "<auto>".
-    """
-    # Figure out the input format.
-    if format_name == '<auto>':
-        f = guess_format(path_or_file)
-        if f is None:
-            if isinstance(path_or_file, str):
-                raise SystemExit("unable to guess input format for %r" % (
-                        path_or_file,))
-            else:
-                raise SystemExit("unable to guess input format for file")
-    else:
-        f = get_format(format_name)
-        if f is None or not f.get('read'):
-            raise SystemExit("unknown input format: %r" % inFormat)
-
-    return f['read'](path_or_file)
-
-__all__ = ['get_format', 'guess_format', 'read_any'] + format_names

Removed: zorg/trunk/lnt/lnt/lnttool/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/__init__.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/__init__.py (removed)
@@ -1 +0,0 @@
-from main import main

Removed: zorg/trunk/lnt/lnt/lnttool/convert.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/convert.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/convert.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/convert.py (removed)
@@ -1,62 +0,0 @@
-import os
-import sys
-
-def convert_data(input, output, inFormat, outFormat):
-    from lnt import formats
-
-    out = formats.get_format(outFormat)
-    if out is None or not out.get('write'):
-        raise SystemExit("unknown output format: %r" % outFormat)
-
-    data = formats.read_any(input, inFormat)
-
-    out['write'](data, output)
-    output.flush()
-
-def action_convert(name, args):
-    """convert between input formats"""
-
-    from optparse import OptionParser, OptionGroup
-    from lnt import formats
-    parser = OptionParser("%%prog %s [options] [<input>, [<output>]]" % name)
-    parser.add_option("", "--from", dest="inputFormat", metavar="NAME",
-                      help="input format name [%default]", default='<auto>',
-                      choices=formats.format_names + ['<auto>'])
-    parser.add_option("", "--to", dest="outputFormat", metavar="NAME",
-                      help="output format name [%default]", default='plist',
-                      choices=formats.format_names + ['<auto>'])
-    (opts, args) = parser.parse_args(args)
-
-    input = output = '-'
-    if len(args) == 0:
-        pass
-    elif len(args) == 1:
-        input, = args
-    elif len(args) == 2:
-        input,output = args
-    else:
-        parser.error("invalid number of arguments")
-
-    if input == '-':
-        # Guarantee that we can seek.
-        import StringIO
-        data = sys.stdin.read()
-        inf = StringIO.StringIO(data)
-    else:
-        inf = input
-
-    if output == '-':
-        outf = sys.stdout
-    else:
-        outf = open(output, 'wb')
-
-    try:
-        try:
-            convert_data(inf, outf, opts.inputFormat, opts.outputFormat)
-        finally:
-            if outf != sys.stdout:
-                outf.close()
-    except:
-        if outf != sys.stdout:
-            os.remove(output)
-        raise

Removed: zorg/trunk/lnt/lnt/lnttool/create.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/create.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/create.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/create.py (removed)
@@ -1,169 +0,0 @@
-import os
-import platform
-import sys
-
-###
-
-kConfigVersion = (0,1,0)
-kConfigTemplate = """\
-# LNT (aka Zorg) configuration file
-#
-# Paths are resolved relative to this file.
-
-# The configuration file version.
-config_version = %(cfg_version)r
-
-# Name to use for this installation. This appears in web page headers, for
-# example.
-name = %(name)r
-
-# Path to the LNT server. This is required for use in emails where we need to
-# provide an absolute URL to the server.
-zorgURL = %(hosturl)r
-
-# Temporary directory, for use by the web app. This must be writable by the user
-# the web app runs as.
-tmp_dir = %(tmp_dir)r
-
-# Database directory, for easily rerooting the entire set of databases. Database
-# paths are resolved relative to the config path + this path.
-db_dir = %(db_dir)r
-
-# The list of available databases, and their properties. At a minimum, there
-# should be a 'default' entry for the default database.
-databases = {
-    'default' : { 'path' : %(default_db)r,
-                  'showGeneral' : 1,
-                  'showNightlytest' : 1,
-                  'showSimple' : 1,
-                  'db_version' : %(default_db_version)r },
-    }
-
-# The LNT email configuration.
-#
-# The 'to' field can be either a single email address, or a list of
-# (regular-expression, address) pairs. In the latter form, the machine name of
-# the submitted results is matched against the regular expressions to determine
-# which email address to use for the results.
-nt_emailer = {
-    'enabled' : False,
-    'host' : None,
-    'from' : None,
-
-    # This is a list of (filter-regexp, address) pairs -- it is evaluated in
-    # order based on the machine name. This can be used to dispatch different
-    # reports to different email address.
-    'to' : [(".*", None)],
-    }
-
-# Enable automatic restart using the wsgi_restart module; this should be off in
-# a production environment.
-wsgi_restart = False
-"""
-
-kWSGITemplate = """\
-#!%(python_executable)s
-# -*- Python -*-
-
-import lnt.server.ui.app
-
-application = lnt.server.ui.app.App.create_standalone(
-  %(cfg_path)r)
-
-if __name__ == "__main__":
-    import werkzeug
-    werkzeug.run_simple('localhost', 8000, application)
-"""
-
-###
-
-import lnt.testing
-import lnt.server.db.v4db
-
-def action_create(name, args):
-    """create an LLVM nightly test installation"""
-
-    from optparse import OptionParser, OptionGroup
-    parser = OptionParser("%%prog %s [options] <path>" % name)
-    parser.add_option("", "--name", dest="name", default="LNT",
-                      help="name to use for the installation [%default]")
-    parser.add_option("", "--config", dest="config", default="lnt.cfg",
-                      help="name of the LNT config file [%default]")
-    parser.add_option("", "--wsgi", dest="wsgi",  default="lnt.wsgi",
-                      help="name of the WSGI app  [%default]")
-    parser.add_option("", "--tmp-dir", dest="tmp_dir", default="lnt_tmp",
-                      help="name of the temp file directory [%default]")
-    parser.add_option("", "--db-dir", dest="db_dir", default="data",
-                      help="name of the directory to hold databases")
-    parser.add_option("", "--default-db", dest="default_db", default="lnt.db",
-                      help="name for the default db [%default]", metavar="NAME")
-    parser.add_option("", "--hostname", dest="hostname",
-                      default=platform.uname()[1],
-                      help="host name of the server [%default]", metavar="NAME")
-    parser.add_option("", "--hostsuffix", dest="hostsuffix", default="perf",
-                      help="suffix at which WSGI app lives [%default]",
-                      metavar="NAME")
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) != 1:
-        parser.error("invalid number of arguments")
-
-    path, = args
-
-    name = opts.name
-    config = opts.config
-    wsgi = opts.wsgi
-    tmp_dir = opts.tmp_dir
-    db_dir = opts.db_dir
-    default_db = opts.default_db
-    hostname = opts.hostname
-    hostsuffix = opts.hostsuffix
-    default_db_version = "0.4"
-
-    basepath = os.path.abspath(path)
-    if os.path.exists(basepath):
-        raise SystemExit,"error: invalid path: %r already exists" % path
-
-    hosturl = "http://%s/%s" % (hostname, hostsuffix)
-
-    python_executable = sys.executable
-    db_dir_path = os.path.join(basepath, db_dir)
-    cfg_path = os.path.join(basepath, config)
-    db_path = os.path.join(db_dir_path, default_db)
-    tmp_path = os.path.join(basepath, tmp_dir)
-    wsgi_path = os.path.join(basepath, wsgi)
-
-    os.mkdir(path)
-    os.mkdir(db_dir_path)
-    os.mkdir(tmp_path)
-
-    cfg_version = kConfigVersion
-    cfg_file = open(cfg_path, 'w')
-    cfg_file.write(kConfigTemplate % locals())
-    cfg_file.close()
-
-    wsgi_file = open(wsgi_path, 'w')
-    wsgi_file.write(kWSGITemplate % locals())
-    wsgi_file.close()
-    os.chmod(wsgi_path, 0755)
-
-    db_class = lnt.server.db.v4db.V4DB
-    db = db_class('sqlite:///' + db_path)
-    db.commit()
-
-    print 'created LNT configuration in %r' % basepath
-    print '  configuration file: %s' % cfg_path
-    print '  WSGI app          : %s' % wsgi_path
-    print '  database file     : %s' % db_path
-    print '  temporary dir     : %s' % tmp_path
-    print '  host URL          : %s' % hosturl
-    print
-    print 'You can execute:'
-    print '  %s' % wsgi_path
-    print 'to test your installation with the builtin server.'
-    print
-    print 'For production use configure this application to run with any'
-    print 'WSGI capable web server. You may need to modify the permissions'
-    print 'on the database and temporary file directory to allow writing'
-    print 'by the web app.'
-    print

Removed: zorg/trunk/lnt/lnt/lnttool/import_data.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/import_data.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/import_data.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/import_data.py (removed)
@@ -1,66 +0,0 @@
-import os, pprint, sys, time
-
-import lnt.db.perfdb
-from lnt import formats
-import lnt.server.config
-import lnt.server.db.v4db
-import lnt.util.ImportData
-
-def action_import(name, args):
-    """import test data into a database"""
-
-    from optparse import OptionParser, OptionGroup
-
-    parser = OptionParser("%%prog %s [options] <path|config-file> <file>+"%name)
-    parser.add_option("", "--database", dest="database", default="default",
-                      help="database to write to [%default]")
-    parser.add_option("", "--format", dest="format",
-                      choices=formats.format_names + ['<auto>'],
-                      default='<auto>')
-    parser.add_option("", "--commit", dest="commit", type=int,
-                      default=False)
-    parser.add_option("", "--show-sql", dest="show_sql", action="store_true",
-                      default=False)
-    parser.add_option("", "--show-sample-count", dest="show_sample_count",
-                      action="store_true", default=False)
-    parser.add_option("", "--show-raw-result", dest="show_raw_result",
-                      action="store_true", default=False)
-    parser.add_option("-v", "--verbose", dest="verbose",
-                      help="show verbose test results",
-                      action="store_true", default=False)
-    parser.add_option("", "--no-email", dest="no_email",
-                      action="store_true", default=False)
-    parser.add_option("", "--no-report", dest="no_report",
-                      action="store_true", default=False)
-    (opts, args) = parser.parse_args(args)
-
-    if len(args) < 2:
-        parser.error("invalid number of arguments")
-
-    path = args.pop(0)
-
-    # Load the LNT configuration.
-    config = lnt.server.config.get_config_from_path(path)
-
-    # Get the database.
-    db = config.get_database(opts.database, echo=opts.show_sql)
-
-    # Load the database.
-    success = True
-    for file in args:
-        result = lnt.util.ImportData.import_and_report(
-            config, opts.database, db, file,
-            opts.format, opts.commit, opts.show_sample_count,
-            opts.no_email, opts.no_report)
-
-        success &= result.get('success', False)
-        if opts.show_raw_result:
-            pprint.pprint(result)
-        else:
-            lnt.util.ImportData.print_report_result(result, sys.stdout,
-                                                    sys.stderr,
-                                                    opts.verbose)
-
-    if not success:
-        raise SystemExit, 1
-

Removed: zorg/trunk/lnt/lnt/lnttool/main.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/main.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/main.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/main.py (removed)
@@ -1,253 +0,0 @@
-"""Implement the command line 'lnt' tool."""
-
-import os
-import shutil
-import sys
-import tarfile
-import tempfile
-from optparse import OptionParser, OptionGroup
-
-import StringIO
-import lnt
-import lnt.util.ImportData
-from lnt import testing
-from lnt.db import perfdb
-from lnt.testing.util.commands import note, warning, error, fatal
-
-def action_runserver(name, args):
-    """start a new development server"""
-
-    parser = OptionParser("%%prog %s [options] [<path|config file>]" % name)
-    parser.add_option("", "--hostname", dest="hostname", type=str,
-                      help="host interface to use [%default]",
-                      default='localhost')
-    parser.add_option("", "--port", dest="port", type=int, metavar="N",
-                      help="local port to use [%default]", default=8000)
-    parser.add_option("", "--reloader", dest="reloader", default=False,
-                      action="store_true", help="use WSGI reload monitor")
-    parser.add_option("", "--debugger", dest="debugger", default=False,
-                      action="store_true", help="use WSGI debugger")
-    parser.add_option("", "--threaded", dest="threaded", default=False,
-                      action="store_true", help="use a threaded server")
-    parser.add_option("", "--processes", dest="processes", type=int,
-                      metavar="N", help="number of processes to use [%default]",
-                      default=1)
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) != 1:
-        parser.error("invalid number of arguments")
-
-    input_path, = args
-
-    # Accept paths to config files, or to directories containing 'lnt.cfg'.
-    tmpdir = None
-    if os.path.isdir(input_path):
-        config_path = os.path.join(input_path, 'lnt.cfg')
-    elif tarfile.is_tarfile(input_path):
-        # Accept paths to tar/tgz etc. files, which we automatically unpack into
-        # a temporary directory.
-        tmpdir = tempfile.mkdtemp(suffix='lnt')
-        
-        note("extracting input tarfile %r to %r" % (input_path, tmpdir))
-        tf = tarfile.open(input_path)
-        tf.extractall(tmpdir)
-
-        # Find the LNT instance inside the tar file. Support tarballs that
-        # either contain the instance directly, or contain a single subdirectory
-        # which is the instance.
-        if os.path.exists(os.path.join(tmpdir, "lnt.cfg")):
-            config_path = os.path.join(tmpdir, "lnt.cfg")
-        else:
-            filenames = os.listdir(tmpdir)
-            if len(filenames) != 1:
-                fatal("unable to find LNT instance inside tarfile")
-            config_path = os.path.join(tmpdir, filenames[0], "lnt.cfg")
-    else:
-        config_path = input_path
-
-    if not config_path or not os.path.exists(config_path):
-        raise SystemExit,"error: invalid config: %r" % config_path
-
-    import lnt.server.ui.app
-    instance = lnt.server.ui.app.App.create_standalone(
-        config_path = config_path)
-    if opts.debugger:
-        instance.debug = True
-    try:
-        instance.run(opts.hostname, opts.port,
-                     use_reloader = opts.reloader,
-                     use_debugger = opts.debugger,
-                     threaded = opts.threaded,
-                     processes = opts.processes)
-    finally:
-        # Clean up the tmpdir if we automatically unpacked a tarfile.
-        if tmpdir is not None:
-            print tmpdir
-            shutil.rmtree(tmpdir)
-
-from create import action_create
-from convert import action_convert
-from import_data import action_import
-from report import action_report
-from updatedb import action_updatedb
-
-def action_checkformat(name, args):
-    """check the format of an LNT test report file"""
-
-    parser = OptionParser("%%prog %s [options] files" % name)
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) > 1:
-        parser.error("incorrect number of argments")
-
-    if len(args) == 0:
-        input = '-'
-    else:
-        input, = args
-
-    if input == '-':
-        input = StringIO.StringIO(sys.stdin.read())
-
-    db = lnt.server.db.v4db.V4DB('sqlite:///:memory:')
-    result = lnt.util.ImportData.import_and_report(
-        None, None, db, input, 'json', commit = True)
-    lnt.util.ImportData.print_report_result(result, sys.stdout, sys.stderr,
-                                            verbose = True)
-
-def action_runtest(name, args):
-    """run a builtin test application"""
-
-    parser = OptionParser("%%prog %s test-name [options]" % name)
-    parser.disable_interspersed_args()
-    parser.add_option("", "--submit", dest="submit_url", metavar="URLORPATH",
-                      help=("autosubmit the test result to the given server "
-                            "(or local instance) [%default]"),
-                      type=str, default=None)
-    parser.add_option("", "--commit", dest="commit",
-                      help=("whether the autosubmit result should be committed "
-                            "[%default]"),
-                      type=int, default=True)
-    parser.add_option("", "--output", dest="output", metavar="PATH",
-                      help="write raw report data to PATH (or stdout if '-')",
-                      action="store", default=None)
-    parser.add_option("-v", "--verbose", dest="verbose",
-                      help="show verbose test results",
-                      action="store_true", default=False)
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) < 1:
-        parser.error("incorrect number of argments")
-
-    test_name,args = args[0],args[1:]
-
-    import lnt.tests
-    try:
-        test_instance = lnt.tests.get_test_instance(test_name)
-    except KeyError:
-        parser.error('invalid test name %r' % test_name)
-
-    report = test_instance.run_test('%s %s' % (name, test_name), args)
-
-    if opts.output is not None:
-        if opts.output == '-':
-            output_stream = sys.stdout
-        else:
-            output_stream = open(opts.output, 'w')
-        print >>output_stream, report.render()
-        if output_stream is not sys.stdout:
-            output_stream.close()
-
-    # Save the report to a temporary file.
-    #
-    # FIXME: This is silly, the underlying test probably wrote the report to a
-    # file itself. We need to clean this up and make it standard across all
-    # tests. That also has the nice side effect that writing into a local
-    # database records the correct imported_from path.
-    tmp = tempfile.NamedTemporaryFile(suffix='.json')
-    print >>tmp, report.render()
-    tmp.flush()
-
-    if opts.submit_url is not None:
-        if report is None:
-            raise SystemExit,"error: report generation failed"
-
-        from lnt.util import ServerUtil
-        test_instance.log("submitting result to %r" % (opts.submit_url,))
-        ServerUtil.submitFile(opts.submit_url, tmp.name, True, opts.verbose)
-    else:
-        # Simulate a submission to retrieve the results report.
-
-        # Construct a temporary database and import the result.
-        test_instance.log("submitting result to dummy instance")
-        db = lnt.server.db.v4db.V4DB("sqlite:///:memory:")
-        result = lnt.util.ImportData.import_and_report(
-            None, None, db, tmp.name, 'json', commit = True)
-        lnt.util.ImportData.print_report_result(result, sys.stdout, sys.stderr,
-                                                opts.verbose)
-
-    tmp.close()
-
-def action_showtests(name, args):
-    """show the available built-in tests"""
-
-    parser = OptionParser("%%prog %s" % name)
-    (opts, args) = parser.parse_args(args)
-    if len(args) != 0:
-        parser.error("incorrect number of argments")
-
-    import lnt.tests
-
-    print 'Available tests:'
-    test_names = lnt.tests.get_test_names()
-    max_name = max(map(len, test_names))
-    for name in test_names:
-        print '  %-*s - %s' % (max_name, name,
-                               lnt.tests.get_test_description(name))
-
-def action_submit(name, args):
-    """submit a test report to the server"""
-
-    parser = OptionParser("%%prog %s [options] <url> <file>+" % name)
-    parser.add_option("", "--commit", dest="commit", type=int,
-                      help=("whether the result should be committed "
-                            "[%default]"),
-                      default=False)
-    parser.add_option("-v", "--verbose", dest="verbose",
-                      help="show verbose test results",
-                      action="store_true", default=False)
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) < 2:
-        parser.error("incorrect number of argments")
-
-    from lnt.util import ServerUtil
-    ServerUtil.submitFiles(args[0], args[1:], opts.commit, opts.verbose)
-
-###
-
-commands = dict((name[7:], f) for name,f in locals().items()
-                if name.startswith('action_'))
-def main():
-    cmds_width = max(map(len, commands))
-    parser = OptionParser("""\
-%%prog [options] <command> ... arguments ...
-
-Available commands:
-%s""" % ("\n".join("  %-*s - %s" % (cmds_width, name, func.__doc__)
-                   for name, func in sorted(commands.items()))),
-                          version = "lnt version %s" % lnt.__version__)
-    parser.disable_interspersed_args()
-    (opts, args) = parser.parse_args()
-
-    if not args:
-        parser.print_usage()
-        return
-
-    cmd = args[0]
-    if cmd not in commands:
-        parser.error("invalid command: %r" % cmd)
-
-    commands[cmd](cmd, args[1:])
-
-if __name__ == '__main__':
-    main()

Removed: zorg/trunk/lnt/lnt/lnttool/report.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/report.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/report.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/report.py (removed)
@@ -1,217 +0,0 @@
-from optparse import OptionParser, OptionGroup
-
-from lnt import testing
-from lnt.db import perfdb
-from lnt.db import perfdbsummary, runinfo
-from lnt.db.perfdb import Run, RunInfo, Machine, Sample, Test
-from lnt.testing.util.commands import note, warning, error, fatal
-from lnt.util import stats
-
-def print_table(rows):
-    def format_cell(value):
-        if isinstance(value, str):
-            return value
-        elif isinstance(value, int):
-            return str(value)
-        elif isinstance(value, float):
-            return "%.4f" % value
-        else:
-            return str(value)
-
-    N = len(rows[0])
-    for row in rows:
-        if len(row) != N:
-            raise ValueError,"Invalid table"
-
-        print "\t".join(map(format_cell, row))
-
-def action_report(name, args):
-    """performance reporting tools"""
-
-    parser = OptionParser("""\
-%%prog %s [options] <db>""" % name)
-    parser.add_option("-v", "--verbose", dest="verbose",
-                      help="show verbose test results",
-                      action="store_true", default=False)
-    parser.add_option("", "--run-order", dest="run_order",
-                      help="run order to select on",
-                      type=int, default=None)
-    parser.add_option("", "--arch", dest="arch",
-                      help="arch field to select on",
-                      type=str, default=None)
-    parser.add_option("", "--optflags", dest="optflags",
-                      help="optimization flags field to select on",
-                      type=str, default=None)
-    parser.add_option("", "--machine", dest="machine_name",
-                      help="machine name to select on",
-                      type=str, default=None)
-
-    (opts, args) = parser.parse_args(args)
-    if len(args) != 1:
-        parser.error("incorrect number of argments")
-
-    path, = args
-    db = perfdb.PerfDB('sqlite:///%s' % path)
-    tag = 'nts'
-
-    if opts.run_order is None:
-        parser.error("--run-order is required")
-
-    # First, find all runs with the desired order.
-    q = db.session.query(Run).\
-        join(RunInfo).\
-        order_by(Run.start_time.desc()).\
-        filter(RunInfo.key == "run_order").\
-        filter(RunInfo.value == "% 7d" % opts.run_order)
-    matching_runs = list(q)
-
-    # Try to help user if nothing was found.
-    if not matching_runs:
-        available_orders = set(
-            db.session.query(RunInfo.value).\
-                filter(RunInfo.key == "run_order"))
-        fatal("no runs found matching --run-order %d, available orders: %s" % (
-                opts.run_order, str(sorted(int(x)
-                                           for x, in available_orders))))
-
-    # Match based on the machine name, if given.
-    if opts.machine_name:
-        selected = [r for r in matching_runs
-                    if r.machine.name == opts.machine_name]
-        if not selected:
-            available_names = set(r.machine.name
-                                  for r in matching_runs)
-            fatal(
-                "no runs found matching --machine %s, available names: [%s]" %(
-                    opts.machine_name, ", ".join(sorted(available_names))))
-        matching_runs = selected
-
-    # Match based on the architecture, if given.
-    if opts.arch:
-        selected = [r for r in matching_runs
-                    if 'ARCH' in r.info
-                    if r.info['ARCH'].value == opts.arch]
-        if not selected:
-            available_archs = set(r.info['ARCH'].value
-                                  for r in matching_runs
-                                  if 'ARCH' in r.info)
-            fatal("no runs found matching --arch %s, available archs: [%s]" % (
-                    opts.arch, ", ".join(sorted(available_archs))))
-        matching_runs = selected
-
-    # Match based on the optflags, if given.
-    if opts.optflags:
-        selected = [r for r in matching_runs
-                    if 'OPTFLAGS' in r.info
-                    if r.info['OPTFLAGS'].value == opts.optflags]
-        if not selected:
-            available_flags = set(r.info['OPTFLAGS'].value
-                                  for r in matching_runs
-                                  if 'OPTFLAGS' in r.info)
-            fatal(
-                "no runs found matching --optflags %s, available flags: [%s]" %(
-                    opts.optflags, ", ".join(sorted(available_flags))))
-        matching_runs = selected
-
-    # Inform the user of the final list of selected runs.
-    note("selection arguments resulted in %d runs" % (len(matching_runs),))
-    for run in matching_runs:
-        note("Run: % 5d, Start Time: %s, Machine: %s:%d" % (
-            run.id, run.start_time.strftime('%Y-%m-%d %H:%M:%S'),
-            run.machine.name, run.machine.number))
-
-    # Take only the first matched run, for now. This will be the latest, by the
-    # original ordering clause.
-    note("selecting newest run for reporting...")
-    matching_runs = [matching_runs[0]]
-
-    # Inform the user of the final list of selected runs.
-    note("reporting over %d total runs" % (len(matching_runs),))
-    for run in matching_runs:
-        note("Run: % 5d, Start Time: %s, Machine: %s:%d" % (
-            run.id, run.start_time.strftime('%Y-%m-%d %H:%M:%S'),
-            run.machine.name, run.machine.number))
-
-    # Get the run summary which has run ordering information.
-    run_summary = perfdbsummary.SimpleSuiteRunSummary.get_summary(db, tag)
-
-    # Load the test suite summary.
-    ts_summary = perfdbsummary.get_simple_suite_summary(db, tag)
-
-    # Gather the names of all tests across these runs, for more normalized
-    # reporting.
-    test_names = ts_summary.get_test_names_in_runs(
-        db, [r.id for r in matching_runs])
-    test_components = sorted(set(t.rsplit('.',1)[1] for t in test_names))
-    test_base_names = sorted(set(t.rsplit('.',1)[0] for t in test_names))
-
-    # Load all the data.
-    items = {}
-    for test_component in test_components:
-        for name,value in get_test_passes(db, run_summary, ts_summary,
-                                          test_component, test_base_names,
-                                          matching_runs):
-            items[(test_component, name)] = value
-
-    # Dump the results.
-    print "%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
-        "Test", "Mean Compile Time", "Mean Execution Time",
-        "Std.Dev. Compile Time", "Std.Dev. Execution Time",
-        "Num. Compile Time Samples", "Num. Execution Time Samples")
-    for name in test_base_names:
-        compile_results = items.get(('compile', name), [])
-        exec_results = items.get(('exec', name), [])
-        if compile_results:
-            compile_value = "%.4f" % stats.mean(compile_results)
-            compile_stddev = "%.4f" % stats.standard_deviation(compile_results)
-        else:
-            compile_value = compile_stddev = ""
-        if exec_results:
-            exec_value = "%.4f" % stats.mean(exec_results)
-            exec_stddev = "%.4f" % stats.standard_deviation(exec_results)
-        else:
-            exec_value = exec_stddev = ""
-        print "%s\t%s\t%s\t%s\t%s\t%d\t%d" % (
-            name, compile_value, exec_value,
-            compile_stddev, exec_stddev,
-            len(compile_results), len(exec_results))
-
-def get_test_passes(db, run_summary, ts_summary,
-                    test_component, test_base_names, runs):
-    if not runs:
-        return
-
-    sri = runinfo.SimpleRunInfo(db, ts_summary)
-    sri._load_samples_for_runs([r.id for r in runs])
-
-    run_status_info = [(r, run_summary.get_run_status_kind(db, r.id))
-                       for r in runs]
-
-    pset = ()
-    for test_base_name in test_base_names:
-        test_name = "%s.%s" % (test_base_name, test_component)
-        test_id = ts_summary.test_id_map.get((test_name, pset))
-        if test_id is None:
-            continue
-
-        run_values = sum((sri.sample_map.get((run.id, test_id))
-                          for run in runs
-                          if (run.id, test_id) in sri.sample_map), [])
-        # Ignore tests that weren't reported in some runs (e.g., -disable-cxx).
-        if not run_values:
-            continue
-
-        # Find the test status, treat any non-determinism as a FAIL.
-        run_status = list(set([sri.get_test_status_in_run(
-                r.id, rsk, test_name, pset)
-                      for (r,rsk) in run_status_info]))
-        if len(run_status) == 1:
-            status_kind = run_status[0]
-        else:
-            status_kind = testing.FAIL
-
-        # Ignore failing methods.
-        if status_kind == testing.FAIL:
-            continue
-
-        yield (test_base_name, run_values)

Removed: zorg/trunk/lnt/lnt/lnttool/updatedb.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/lnttool/updatedb.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/lnttool/updatedb.py (original)
+++ zorg/trunk/lnt/lnt/lnttool/updatedb.py (removed)
@@ -1,78 +0,0 @@
-import os
-from optparse import OptionParser, OptionGroup
-
-import lnt.server.config
-from lnt.testing.util.commands import note, warning, error, fatal
-
-def action_updatedb(name, args):
-    """modify a database"""
-
-    from optparse import OptionParser, OptionGroup
-
-    parser = OptionParser("%%prog %s [options] <path|config-file> <file>+"%name)
-    parser.add_option("", "--database", dest="database", default="default",
-                      help="database to modify [%default]")
-    parser.add_option("", "--testsuite", dest="testsuite",
-                      help="testsuite to modify")
-    parser.add_option("", "--commit", dest="commit", type=int,
-                      default=False)
-    parser.add_option("", "--show-sql", dest="show_sql", action="store_true",
-                      default=False)
-    parser.add_option("", "--delete-machine", dest="delete_machines",
-                      action="append", default=[])
-    parser.add_option("", "--delete-run", dest="delete_runs",
-                      action="append", default=[], type=int)
-    (opts, args) = parser.parse_args(args)
-
-    if len(args) != 1:
-        parser.error("invalid number of arguments")
-
-    if opts.testsuite is None:
-        parser.error("--testsuite is required")
-        
-    config, = args
-
-    # Accept paths to config files, or to directories containing 'lnt.cfg'.
-    if os.path.isdir(config):
-        tmp = os.path.join(config, 'lnt.cfg')
-        if os.path.exists(tmp):
-            config = tmp
-
-    # Load the config file.
-    config_data = {}
-    exec open(config) in config_data
-    config = lnt.server.config.Config.fromData(config, config_data)
-
-    # Get the database and test suite.
-    db = config.get_database(opts.database, echo=opts.show_sql)
-    ts = db.testsuite[opts.testsuite]
-
-    # Compute a list of all the runs to delete.
-    runs_to_delete = list(opts.delete_runs)
-    if opts.delete_machines:
-        runs_to_delete.extend(
-            id
-            for id, in ts.query(ts.Run.id).\
-                join(ts.Machine).\
-                filter(ts.Machine.name.in_(opts.delete_machines)))
-
-    # Delete all samples associated with those runs.
-    ts.query(ts.Sample).\
-        filter(ts.Sample.run_id.in_(runs_to_delete)).\
-        delete(synchronize_session=False)
-
-    # Delete all those runs.
-    ts.query(ts.Run).\
-        filter(ts.Run.id.in_(runs_to_delete)).\
-        delete(synchronize_session=False)
-
-    # Delete the machines.
-    for name in opts.delete_machines:
-        num_deletes = ts.query(ts.Machine).filter_by(name=name).delete()
-        if num_deletes == 0:
-            warning("unable to find machine named: %r" % name)
-
-    if opts.commit:
-        db.commit()
-    else:
-        db.rollback()

Removed: zorg/trunk/lnt/lnt/server/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/__init__.py (original)
+++ zorg/trunk/lnt/lnt/server/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/server/config.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/config.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/config.py (original)
+++ zorg/trunk/lnt/lnt/server/config.py (removed)
@@ -1,140 +0,0 @@
-"""
-LNT Config object for tracking user-configurable installation parameters.
-"""
-
-import os
-import re
-
-import lnt.db.perfdb
-import lnt.server.db.v4db
-
-class EmailConfig:
-    @staticmethod
-    def fromData(data):
-        # The email to field can either be a string, or a list of tuples of
-        # the form [(accept-regexp-pattern, to-address)].
-        to_address = data.get('to')
-        if not isinstance(to_address, str):
-            to_address = [(str(a),str(b)) for a,b in to_address]
-        return EmailConfig(bool(data.get('enabled')), str(data.get('host')),
-                           str(data.get('from')), to_address)
-        
-    def __init__(self, enabled, host, from_address, to_address):
-        self.enabled = enabled
-        self.host = host
-        self.from_address = from_address
-        self.to_address = to_address
-
-    def get_to_address(self, machine_name):
-        # The email to_address field can either be a string, or a list of tuples
-        # of the form [(accept-regexp-pattern, to-address)].
-        if isinstance(self.to_address, str):
-            return self.to_address
-
-        for pattern,addr in self.to_address:
-            if re.match(pattern, machine_name):
-                return addr
-
-class DBInfo:
-    @staticmethod
-    def fromData(baseDir, dict, default_email_config):
-        dbPath = dict.get('path')
-        if '://' not in dbPath:
-            dbPath = os.path.join(baseDir, dbPath)
-
-        # Support per-database email configurations.
-        email_config = default_email_config
-        if 'emailer' in dict:
-            email_config = EmailConfig.fromData(dict['emailer'])
-
-        return DBInfo(dbPath,
-                      bool(dict.get('showNightlytest')),
-                      bool(dict.get('showGeneral')),
-                      bool(dict.get('showSimple')),
-                      str(dict.get('db_version', '0.3')),
-                      dict.get('shadow_import', None),
-                      dict.get('simple_run_source', None),
-                      email_config)
-
-    def __init__(self, path, showNightlytest, showGeneral, showSimple,
-                 db_version, shadow_import, simple_run_source, email_config):
-        self.config = None
-        self.path = path
-        self.showGeneral = showGeneral
-        self.showNightlytest = showNightlytest
-        self.showSimple = showSimple
-        self.db_version = db_version
-        self.shadow_import = shadow_import
-        self.simple_run_source = simple_run_source
-        self.email_config = email_config
-
-class Config:
-    @staticmethod
-    def fromData(path, data):
-        # Paths are resolved relative to the absolute real path of the
-        # config file.
-        baseDir = os.path.dirname(os.path.abspath(path))
-
-        # Get the default email config.
-        emailer = data.get('nt_emailer')
-        if emailer:
-            default_email_config = EmailConfig.fromData(emailer)
-        else:
-            default_email_config = EmailConfig(False, '', '', [])
-
-        dbDir = data.get('db_dir', '.')
-        dbDirPath = os.path.join(baseDir, dbDir)
-
-        # FIXME: Remove this default.
-        tempDir = data.get('tmp_dir', 'viewer/resources/graphs')
-
-        return Config(data.get('name', 'LNT'), data['zorgURL'],
-                      dbDir, os.path.join(baseDir, tempDir),
-                      dict([(k,DBInfo.fromData(dbDirPath, v,
-                                               default_email_config))
-                                     for k,v in data['databases'].items()]))
-
-    def __init__(self, name, zorgURL, dbDir, tempDir, databases):
-        self.name = name
-        self.zorgURL = zorgURL
-        self.dbDir = dbDir
-        self.tempDir = tempDir
-        while self.zorgURL.endswith('/'):
-            self.zorgURL = zorgURL[:-1]
-        self.databases = databases
-        for db in self.databases.values():
-            db.config = self
-
-    def get_database(self, name, echo=False):
-        """
-        get_database(name, echo=False) -> db or None
-
-        Return the appropriate instance of the database with the given name, or
-        None if there is no database with that name."""
-
-        # Get the database entry.
-        db_entry = self.databases.get(name)
-        if db_entry is None:
-            return None
-
-        # Instantiate the appropriate database version.
-        if db_entry.db_version == '0.3':
-            return lnt.db.perfdb.PerfDB(db_entry.path, echo=echo)
-        if db_entry.db_version == '0.4':
-            return lnt.server.db.v4db.V4DB(db_entry.path, echo=echo)
-
-        raise NotImplementedError,"unable to import to version %r database" % (
-            db_entry.db_version,)
-
-def get_config_from_path(path):
-    # Accept paths to config files or to directories containing 'lnt.cfg'.
-    if os.path.isdir(path):
-        config_path = os.path.join(path, 'lnt.cfg')
-    else:
-        config_path = path
-
-    # Load the config file.
-    config_data = {}
-    exec open(config_path) in config_data
-    return lnt.server.config.Config.fromData(config_path, config_data)
-    

Removed: zorg/trunk/lnt/lnt/server/db/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/__init__.py (original)
+++ zorg/trunk/lnt/lnt/server/db/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/server/db/testsuite.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuite.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuite.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuite.py (removed)
@@ -1,203 +0,0 @@
-"""
-Database models for the TestSuites abstraction.
-"""
-
-import lnt
-
-import sqlalchemy
-import sqlalchemy.ext.declarative
-import sqlalchemy.orm
-from sqlalchemy import *
-from sqlalchemy.schema import Index
-from sqlalchemy.orm import relation
-
-Base = sqlalchemy.ext.declarative.declarative_base()
-
-class SampleType(Base):
-    """
-    The SampleType table describes an enumeration for the possible types clients
-    can configure for different sample fields.
-    """
-    __tablename__ = 'SampleType'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(256), unique=True)
-
-    # FIXME: We expect the database to have a limited number of instances of
-    # this class, we should just provide static class variables for the various
-    # types once bound.
-
-    def __init__(self, name):
-        self.name = name
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name,))
-
-class StatusKind(Base):
-    """
-    The StatusKind table describes an enumeration for the possible values
-    clients can use for "Status" typed samples. This is designed to match the
-    values which are in use by test produces and are defined in the lnt.testing
-    module.
-    """
-
-    __tablename__ = 'StatusKind'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(256), unique=True)
-    
-    def __init__(self, id, name):
-        self.id = id
-        self.name = name
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name,))
-
-class TestSuite(Base):
-    __tablename__ = 'TestSuite'
-
-    id = Column("ID", Integer, primary_key=True)
-    name = Column("Name", String(256), unique=True)
-
-    # The name we use to prefix the per-testsuite databases.
-    db_key_name = Column("DBKeyName", String(256))
-
-    # The version of the schema used for the per-testsuite databases (encoded as
-    # the LNT version).
-    version = Column("Version", String(16))
-
-    machine_fields = relation('MachineField', backref='test_suite')
-    order_fields = relation('OrderField', backref='test_suite')
-    run_fields = relation('RunField', backref='test_suite')
-    sample_fields = relation('SampleField', backref='test_suite')
-
-    def __init__(self, name, db_key_name):
-        self.name = name
-        self.db_key_name = db_key_name
-        self.version = "%d.%d" % (lnt.__versioninfo__[0],
-                                  lnt.__versioninfo__[1])
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.db_key_name,
-                                                   self.version))
-
-class MachineField(Base):
-    __tablename__ = 'TestSuiteMachineFields'
-
-    id = Column("ID", Integer, primary_key=True)
-    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'),
-                           index=True)
-    name = Column("Name", String(256))
-
-    # The info key describes the key to expect this field to be present as in
-    # the reported machine information. Missing keys result in NULL values in
-    # the database.
-    info_key = Column("InfoKey", String(256))
-
-    def __init__(self, name, info_key):
-        self.name = name
-        self.info_key = info_key
-
-        # Column instance for fields which have been bound (non-DB
-        # parameter). This is provided for convenience in querying.
-        self.column = None
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.info_key))
-
-class OrderField(Base):
-    __tablename__ = 'TestSuiteOrderFields'
-
-    id = Column("ID", Integer, primary_key=True)
-    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'),
-                           index=True)
-    name = Column("Name", String(256))
-
-    # The info key describes the key to expect this field to be present as in
-    # the reported machine information. Missing keys result in NULL values in
-    # the database.
-    info_key = Column("InfoKey", String(256))
-
-    # The ordinal index this field should be used at for creating a
-    # lexicographic ordering amongst runs.
-    ordinal = Column("Ordinal", Integer)
-
-    def __init__(self, name, info_key, ordinal):
-        assert isinstance(ordinal, int) and ordinal >= 0
-
-        self.name = name
-        self.info_key = info_key
-        self.ordinal = ordinal
-
-        # Column instance for fields which have been bound (non-DB
-        # parameter). This is provided for convenience in querying.
-        self.column = None
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.info_key,
-                                                   self.ordinal))
-
-class RunField(Base):
-    __tablename__ = 'TestSuiteRunFields'
-
-    id = Column("ID", Integer, primary_key=True)
-    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'),
-                           index=True)
-    name = Column("Name", String(256))
-
-    # The info key describes the key to expect this field to be present as in
-    # the reported machine information. Missing keys result in NULL values in
-    # the database.
-    info_key = Column("InfoKey", String(256))
-
-    def __init__(self, name, info_key):
-        self.name = name
-        self.info_key = info_key
-
-        # Column instance for fields which have been bound (non-DB
-        # parameter). This is provided for convenience in querying.
-        self.column = None
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.info_key))
-
-class SampleField(Base):
-    __tablename__ = 'TestSuiteSampleFields'
-
-    id = Column("ID", Integer, primary_key=True)
-    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'),
-                           index=True)
-    name = Column("Name", String(256))
-
-    # The type of sample this is.
-    type_id = Column("Type", Integer, ForeignKey('SampleType.ID'))
-    type = relation(SampleType)
-
-    # The info key describes the key to expect this field to be present as in
-    # the reported machine information. Missing keys result in NULL values in
-    # the database.
-    info_key = Column("InfoKey", String(256))
-
-    # The status field is used to create a relation to the sample field that
-    # reports the status (pass/fail/etc.) code related to this value. This
-    # association is used by UI code to present the two status fields together.
-    status_field_id = Column("status_field", Integer, ForeignKey(
-            'TestSuiteSampleFields.ID'))
-    status_field = relation('SampleField', remote_side=id)
-
-    def __init__(self, name, type, info_key, status_field = None):
-        self.name = name
-        self.type = type
-        self.info_key = info_key
-        self.status_field = status_field
-
-        # Index of this column.
-        self.index = None
-
-        # Column instance for fields which have been bound (non-DB
-        # parameter). This is provided for convenience in querying.
-        self.column = None
-
-    def __repr__(self):
-        return '%s%r' % (self.__class__.__name__, (self.name, self.type,
-                                                   self.info_key))

Removed: zorg/trunk/lnt/lnt/server/db/testsuitedb.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuitedb.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuitedb.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuitedb.py (removed)
@@ -1,731 +0,0 @@
-"""
-Database models for the TestSuite databases themselves.
-
-These are a bit magical because the models themselves are driven by the test
-suite metadata, so we only create the classes at runtime.
-"""
-
-import datetime
-import json
-
-import sqlalchemy
-from sqlalchemy import *
-
-import testsuite
-
-class TestSuiteDB(object):
-    """
-    Wrapper object for an individual test suites database tables.
-
-    This wrapper is somewhat special in that it handles specializing the
-    metatable instances for the given test suite.
-
-    Clients are expected to only access the test suite database tables by going
-    through the model classes constructed by this wrapper object.
-    """
-
-    def __init__(self, v4db, name, test_suite):
-        testsuitedb = self
-        self.v4db = v4db
-        self.name = name
-        self.test_suite = test_suite
-
-        # Save caches of the various fields.
-        self.machine_fields = list(self.test_suite.machine_fields)
-        self.order_fields = list(self.test_suite.order_fields)
-        self.run_fields = list(self.test_suite.run_fields)
-        self.sample_fields = list(self.test_suite.sample_fields)
-        for i,field in enumerate(self.sample_fields):
-            field.index = i
-
-        self.base = sqlalchemy.ext.declarative.declarative_base()
-
-        # Create parameterized model classes for this test suite.
-        class ParameterizedMixin(object):
-            # Class variable to allow finding the associated test suite from
-            # model instances.
-            testsuite = self
-
-            # Class variable (expected to be defined by subclasses) to allow
-            # easy access to the field list for parameterized model classes.
-            fields = None
-
-            def get_field(self, field):
-                return getattr(self, field.name)
-
-            def set_field(self, field, value):
-                return setattr(self, field.name, value)
-
-        db_key_name = self.test_suite.db_key_name
-        class Machine(self.base, ParameterizedMixin):
-            __tablename__ = db_key_name + '_Machine'
-
-            fields = self.machine_fields
-            id = Column("ID", Integer, primary_key=True)
-            name = Column("Name", String(256), index=True)
-
-            # The parameters blob is used to store any additional information
-            # reported by the run but not promoted into the machine record. Such
-            # data is stored as a JSON encoded blob.
-            parameters_data = Column("Parameters", Binary)
-
-            # Dynamically create fields for all of the test suite defined
-            # machine fields.
-            class_dict = locals()
-            for item in fields:
-                if item.name in class_dict:
-                    raise ValueError,"test suite defines reserved key %r" % (
-                        name,)
-
-                class_dict[item.name] = item.column = Column(
-                    item.name, String(256))
-
-            def __init__(self, name):
-                self.name = name
-
-            def __repr__(self):
-                return '%s_%s%r' % (db_key_name, self.__class__.__name__,
-                                    (self.name,))
-
-            @property
-            def parameters(self):
-                """dictionary access to the BLOB encoded parameters data"""
-                return dict(json.loads(self.parameters_data))
-
-            @parameters.setter
-            def parameters(self, data):
-                self.parameters_data = json.dumps(sorted(data.items()))
-
-        class Order(self.base, ParameterizedMixin):
-            __tablename__ = db_key_name + '_Order'
-
-            # We guarantee that our fields are stored in the order they are
-            # supposed to be lexicographically compared, the __cmp__ method
-            # relies on this.
-            fields = sorted(self.order_fields,
-                            key = lambda of: of.ordinal)
-
-
-            id = Column("ID", Integer, primary_key=True)
-
-            # Define two common columns which are used to store the previous and
-            # next links for the total ordering amongst run orders.
-            next_order_id = Column("NextOrder", Integer, ForeignKey(
-                    "%s.ID" % __tablename__))
-            previous_order_id = Column("PreviousOrder", Integer, ForeignKey(
-                    "%s.ID" % __tablename__))
-
-            # FIXME: <sheepish> I would really like to have next_order and
-            # previous_order relation's here, but can't figure out how to
-            # declare them </sheepsih>.
-
-            # Dynamically create fields for all of the test suite defined order
-            # fields.
-            class_dict = locals()
-            for item in self.order_fields:
-                if item.name in class_dict:
-                    raise ValueError,"test suite defines reserved key %r" % (
-                        name,)
-
-                class_dict[item.name] = item.column = Column(
-                    item.name, String(256))
-
-            def __init__(self, previous_order_id = None, next_order_id = None,
-                         **kwargs):
-                self.previous_order_id = previous_order_id
-                self.next_order_id = next_order_id
-
-                # Initialize fields (defaulting to None, for now).
-                for item in self.fields:
-                    self.set_field(item, kwargs.get(item.name))
-
-            def __repr__(self):
-                fields = dict((item.name, self.get_field(item))
-                              for item in self.fields)
-
-                return '%s_%s(%r, %r, **%r)' % (
-                    db_key_name, self.__class__.__name__,
-                    self.previous_order_id, self.next_order_id, fields)
-
-            def __cmp__(self, b):
-                # SA occassionally uses comparison to check model instances
-                # verse some sentinels, so we ensure we support comparison
-                # against non-instances.
-                if self.__class__ is not b.__class__:
-                    return -1
-
-                return cmp(tuple(self.get_field(item)
-                                 for item in self.fields),
-                           tuple(b.get_field(item)
-                                 for item in self.fields))
-
-        class Run(self.base, ParameterizedMixin):
-            __tablename__ = db_key_name + '_Run'
-
-            fields = self.run_fields
-            id = Column("ID", Integer, primary_key=True)
-            machine_id = Column("MachineID", Integer, ForeignKey(Machine.id),
-                                index=True)
-            order_id = Column("OrderID", Integer, ForeignKey(Order.id),
-                              index=True)
-            imported_from = Column("ImportedFrom", String(512))
-            start_time = Column("StartTime", DateTime)
-            end_time = Column("EndTime", DateTime)
-            simple_run_id = Column("SimpleRunID", Integer)
-
-            # The parameters blob is used to store any additional information
-            # reported by the run but not promoted into the machine record. Such
-            # data is stored as a JSON encoded blob.
-            parameters_data = Column("Parameters", Binary)
-
-            machine = sqlalchemy.orm.relation(Machine)
-            order = sqlalchemy.orm.relation(Order)
-
-            # Dynamically create fields for all of the test suite defined run
-            # fields.
-            #
-            # FIXME: We are probably going to want to index on some of these,
-            # but need a bit for that in the test suite definition.
-            class_dict = locals()
-            for item in fields:
-                if item.name in class_dict:
-                    raise ValueError,"test suite defines reserved key %r" % (
-                        name,)
-
-                class_dict[item.name] = item.column = Column(
-                    item.name, String(256))
-
-            def __init__(self, machine, order, start_time, end_time):
-                self.machine = machine
-                self.order = order
-                self.start_time = start_time
-                self.end_time = end_time
-                self.imported_from = None
-
-            def __repr__(self):
-                return '%s_%s%r' % (db_key_name, self.__class__.__name__,
-                                    (self.machine, self.order, self.start_time,
-                                     self.end_time))
-
-            @property
-            def parameters(self):
-                """dictionary access to the BLOB encoded parameters data"""
-                return dict(json.loads(self.parameters_data))
-
-            @parameters.setter
-            def parameters(self, data):
-                self.parameters_data = json.dumps(sorted(data.items()))
-
-        class Test(self.base, ParameterizedMixin):
-            __tablename__ = db_key_name + '_Test'
-
-            id = Column("ID", Integer, primary_key=True)
-            name = Column("Name", String(256), unique=True, index=True)
-
-            def __init__(self, name):
-                self.name = name
-
-            def __repr__(self):
-                return '%s_%s%r' % (db_key_name, self.__class__.__name__,
-                                    (self.name,))
-
-        class Sample(self.base, ParameterizedMixin):
-            __tablename__ = db_key_name + '_Sample'
-
-            fields = self.sample_fields
-            id = Column("ID", Integer, primary_key=True)
-            # We do not need an index on run_id, this is covered by the compound
-            # (Run(ID),Test(ID)) index we create below.
-            run_id = Column("RunID", Integer, ForeignKey(Run.id))
-            test_id = Column("TestID", Integer, ForeignKey(Test.id), index=True)
-
-            run = sqlalchemy.orm.relation(Run)
-            test = sqlalchemy.orm.relation(Test)
-
-            @staticmethod
-            def get_primary_fields():
-                """
-                get_primary_fields() -> [SampleField*]
-
-                Get the primary sample fields (those which are not associated
-                with some other sample field).
-                """
-                status_fields = set(s.status_field
-                                    for s in self.Sample.fields
-                                    if s.status_field is not None)
-                for field in self.Sample.fields:
-                    if field not in status_fields:
-                        yield field
-
-            # Dynamically create fields for all of the test suite defined sample
-            # fields.
-            #
-            # FIXME: We might want to index some of these, but for a different
-            # reason than above. It is possible worth it to turn the compound
-            # index below into a covering index. We should evaluate this once
-            # the new UI is up.
-            class_dict = locals()
-            for item in self.sample_fields:
-                if item.name in class_dict:
-                    raise ValueError,"test suite defines reserved key %r" % (
-                        name,)
-
-                if item.type.name == 'Real':
-                    item.column = Column(item.name, Float)
-                elif item.type.name == 'Status':
-                    item.column = Column(item.name, Integer, ForeignKey(
-                            testsuite.StatusKind.id))
-                else:
-                    raise ValueError,(
-                        "test suite defines unknown sample type %r" (
-                            item.type.name,))
-
-                class_dict[item.name] = item.column
-
-            def __init__(self, run, test, **kwargs):
-                self.run = run
-                self.test = test
-
-                # Initialize sample fields (defaulting to 0, for now).
-                for item in self.fields:
-                    self.set_field(item, kwargs.get(item.name, None))
-
-            def __repr__(self):
-                fields = dict((item.name, self.get_field(item))
-                              for item in self.fields)
-
-                return '%s_%s(%r, %r, **%r)' % (
-                    db_key_name, self.__class__.__name__,
-                    self.run, self.test, fields)
-
-        self.Machine = Machine
-        self.Run = Run
-        self.Test = Test
-        self.Sample = Sample
-        self.Order = Order
-
-        # Create the compound index we cannot declare inline.
-        sqlalchemy.schema.Index("ix_%s_Sample_RunID_TestID" % db_key_name,
-                                Sample.run_id, Sample.test_id)
-
-        # Create the index we use to ensure machine uniqueness.
-        args = [Machine.name, Machine.parameters_data]
-        for item in self.machine_fields:
-            args.append(item.column)
-        sqlalchemy.schema.Index("ix_%s_Machine_Unique" % db_key_name,
-                                *args, unique = True)
-
-        # Create the test suite database tables in case this is a new database.
-        self.base.metadata.create_all(self.v4db.engine)
-
-        # Add several shortcut aliases, similar to the ones on the v4db.
-        self.session = self.v4db.session
-        self.add = self.v4db.add
-        self.commit = self.v4db.commit
-        self.query = self.v4db.query
-        self.rollback = self.v4db.rollback
-
-    def _getOrCreateMachine(self, machine_data):
-        """
-        _getOrCreateMachine(data) -> Machine, bool
-
-        Add or create (and insert) a Machine record from the given machine data
-        (as recorded by the test interchange format).
-
-        The boolean result indicates whether the returned record was constructed
-        or not.
-        """
-
-        # Convert the machine data into a machine record. We construct the query
-        # to look for any existing machine at the same time as we build up the
-        # record to possibly add.
-        #
-        # FIXME: This feels inelegant, can't SA help us out here?
-        query = self.query(self.Machine).\
-            filter(self.Machine.name == machine_data['Name'])
-        machine = self.Machine(machine_data['Name'])
-        machine_parameters = machine_data['Info'].copy()
-
-        # First, extract all of the specified machine fields.
-        for item in self.machine_fields:
-            if item.info_key in machine_parameters:
-                value = machine_parameters.pop(item.info_key)
-            else:
-                # For now, insert empty values for any missing fields. We don't
-                # want to insert NULLs, so we should probably allow the test
-                # suite to define defaults.
-                value = ''
-
-            query = query.filter(item.column == value)
-            machine.set_field(item, value)
-
-        # Convert any remaining machine_parameters into a JSON encoded blob. We
-        # encode this as an array to avoid a potential ambiguity on the key
-        # ordering.
-        machine.parameters = machine_parameters
-        query = query.filter(self.Machine.parameters_data ==
-                             machine.parameters_data)
-
-        # Execute the query to see if we already have this machine.
-        try:
-            return query.one(),False
-        except sqlalchemy.orm.exc.NoResultFound:
-            # If not, add the machine.
-            self.add(machine)
-
-            return machine,True
-
-    def _getOrCreateOrder(self, run_parameters):
-        """
-        _getOrCreateOrder(data) -> Order, bool
-
-        Add or create (and insert) an Order record based on the given run
-        parameters (as recorded by the test interchange format).
-
-        The run parameters that define the order will be removed from the
-        provided ddata argument.
-
-        The boolean result indicates whether the returned record was constructed
-        or not.
-        """
-
-        query = self.query(self.Order)
-        order = self.Order()
-
-        # First, extract all of the specified order fields.
-        for item in self.order_fields:
-            if item.info_key in run_parameters:
-                value = run_parameters.pop(item.info_key)
-            else:
-                # We require that all of the order fields be present.
-                raise ValueError,"""\
-supplied run is missing required run parameter: %r""" % (
-                    item.info_key)
-
-            query = query.filter(item.column == value)
-            order.set_field(item, value)
-
-        # Execute the query to see if we already have this order.
-        try:
-            return query.one(),False
-        except sqlalchemy.orm.exc.NoResultFound:
-            # If not, then we need to insert this order into the total ordering
-            # linked list.
-
-            # Add the new order and flush, to assign an ID.
-            self.add(order)
-            self.v4db.session.flush()
-
-            # Load all the orders.
-            orders = list(self.query(self.Order))
-
-            # Sort the objects to form the total ordering.
-            orders.sort()
-
-            # Find the order we just added.
-            index = orders.index(order)
-
-            # Insert this order into the linked list which forms the total
-            # ordering.
-            if index > 0:
-                previous_order = orders[index - 1]
-                previous_order.next_order_id = order.id
-                order.previous_order_id = previous_order.id
-            if index + 1 < len(orders):
-                next_order = orders[index + 1]
-                next_order.previous_order_id = order.id
-                order.next_order_id = next_order.id
-
-            return order,True
-
-    def _getOrCreateRun(self, run_data, machine):
-        """
-        _getOrCreateRun(data) -> Run, bool
-
-        Add a new Run record from the given data (as recorded by the test
-        interchange format).
-
-        The boolean result indicates whether the returned record was constructed
-        or not.
-        """
-
-        # Extra the run parameters that define the order.
-        run_parameters = run_data['Info'].copy()
-
-        # The tag has already been used to dispatch to the appropriate database.
-        run_parameters.pop('tag')
-
-        # Find the order record.
-        order,inserted = self._getOrCreateOrder(run_parameters)
-        start_time = datetime.datetime.strptime(run_data['Start Time'],
-                                                "%Y-%m-%d %H:%M:%S")
-        end_time = datetime.datetime.strptime(run_data['End Time'],
-                                              "%Y-%m-%d %H:%M:%S")
-
-        # Convert the rundata into a run record. As with Machines, we construct
-        # the query to look for any existingrun at the same time as we build up
-        # the record to possibly add.
-        #
-        # FIXME: This feels inelegant, can't SA help us out here?
-        query = self.query(self.Run).\
-            filter(self.Run.machine_id == machine.id).\
-            filter(self.Run.order_id == order.id).\
-            filter(self.Run.start_time == start_time).\
-            filter(self.Run.end_time == end_time)
-        run = self.Run(machine, order, start_time, end_time)
-
-        # First, extract all of the specified run fields.
-        for item in self.run_fields:
-            if item.info_key in run_parameters:
-                value = run_parameters.pop(item.info_key)
-            else:
-                # For now, insert empty values for any missing fields. We don't
-                # want to insert NULLs, so we should probably allow the test
-                # suite to define defaults.
-                value = ''
-
-            query = query.filter(item.column == value)
-            run.set_field(item, value)
-
-        # Any remaining parameters are saved as a JSON encoded array.
-        run.parameters = run_parameters
-        query = query.filter(self.Run.parameters_data == run.parameters_data)
-
-        # Execute the query to see if we already have this run.
-        try:
-            return query.one(),False
-        except sqlalchemy.orm.exc.NoResultFound:
-            # If not, add the run.
-            self.add(run)
-
-            return run,True
-
-    def _importSampleValues(self, tests_data, run, tag):
-        # We now need to transform the old schema data (composite samples split
-        # into multiple tests with mangling) into the V4DB format where each
-        # sample is a complete record.
-        tag_dot = "%s." % tag
-        tag_dot_len = len(tag_dot)
-
-        # Load a map of all the tests, which we will extend when we find tests
-        # that need to be added.
-        test_cache = dict((test.name, test)
-                          for test in self.query(self.Test))
-
-        # First, we aggregate all of the samples by test name. The schema allows
-        # reporting multiple values for a test in two ways, one by multiple
-        # samples and the other by multiple test entries with the same test
-        # name. We need to handle both.
-        tests_values = {}
-        for test_data in tests_data:
-            if test_data['Info']:
-                raise ValueError,"""\
-test parameter sets are not supported by V4DB databases"""
-
-            name = test_data['Name']
-            if not name.startswith(tag_dot):
-                raise ValueError,"""\
-test %r is misnamed for reporting under schema %r""" % (
-                    name, tag)
-            name = name[tag_dot_len:]
-
-            # Add all the values.
-            values = tests_values.get(name)
-            if values is None:
-                tests_values[name] = values = []
-
-            values.extend(test_data['Data'])
-
-        # Next, build a map of test name to sample values, by scanning all the
-        # tests. This is complicated by the interchange's support of multiple
-        # values, which we cannot properly aggregate. We handle this by keying
-        # off of the test name and the sample index.
-        sample_records = {}
-        for name,test_samples in tests_values.items():
-            # Map this reported test name into a test name and a sample field.
-            #
-            # FIXME: This is really slow.
-            for item in self.sample_fields:
-                if name.endswith(item.info_key):
-                    test_name = name[:-len(item.info_key)]
-                    sample_field = item
-                    break
-            else:
-                # Disallow tests which do not map to a sample field.
-                raise ValueError,"""\
-test %r does not map to a sample field in the reported suite""" % (
-                    name)
-
-            # Get or create the test.
-            test = test_cache.get(test_name)
-            if test is None:
-                test_cache[test_name] = test = self.Test(test_name)
-                self.add(test)
-
-            for i,value in enumerate(test_samples):
-                record_key = (test_name, i)
-                sample = sample_records.get(record_key)
-                if sample is None:
-                    sample_records[record_key] = sample = self.Sample(run, test)
-                    self.add(sample)
-
-                sample.set_field(sample_field, value)
-
-    def importDataFromDict(self, data, config=None):
-        """
-        importDataFromDict(data) -> Run, bool
-
-        Import a new run from the provided test interchange data, and return the
-        constructed Run record.
-
-        The boolean result indicates whether the returned record was constructed
-        or not (i.e., whether the data was a duplicate submission).
-        """
-
-        # Construct the machine entry.
-        machine,inserted = self._getOrCreateMachine(data['Machine'])
-
-        # Construct the run entry.
-        run,inserted = self._getOrCreateRun(data['Run'], machine)
-
-        # Get the schema tag.
-        tag = data['Run']['Info']['tag']
-
-        # If we didn't construct a new run, this is a duplicate
-        # submission. Return the prior Run.
-        if not inserted:
-            return False, run
-
-        self._importSampleValues(data['Tests'], run, tag)
-
-        # If we have a config object and we have a database which we are
-        # supposed to link simple/ runs from, attempt to find the matching run
-        # in that database.
-        if config and config.simple_run_source:
-            self.find_and_set_simple_run_id(run, data, config)
-
-        return True, run
-
-
-    def find_and_set_simple_run_id(self, run, data, config):
-        # Get the database we are supposed to match run IDs in.
-        db = config.config.get_database(config.simple_run_source)
-
-        # Figure out the matching machine.
-        simple_machine,created = db.getOrCreateMachine(
-            data['Machine']['Name'], data['Machine']['Info'].items())
-        if created:
-            # Obviously missing, rollback and abort.
-            db.rollback()
-            return
-
-        run_data = data['Run']
-        simple_run,created = db.getOrCreateRun(
-            simple_machine,
-            run_data.get('Start Time',''), run_data.get('End Time',''),
-            run_data['Info'].items())
-        if created:
-            # Obviously missing, rollback and abort.
-            db.rollback()
-            return
-
-        # Otherwise, we found the run.
-        run.simple_run_id = simple_run.id
-
-    # Simple query support (mostly used by templates)
-
-    def machines(self, name=None):
-        q = self.query(self.Machine)
-        if name:
-            q = q.filter_by(name=name)
-        return q
-
-    def getMachine(self, id):
-        return self.query(self.Machine).filter_by(id=id).one()
-
-    def getRun(self, id):
-        return self.query(self.Run).filter_by(id=id).one()
-
-    def get_adjacent_runs_on_machine(self, run, N, direction = -1):
-        """
-        get_adjacent_runs_on_machine(run, N, direction = -1) -> [Run*]
-
-        Return the N runs which have been submitted to the same machine and are
-        adjacent to the given run.
-
-        The actual number of runs returned may be greater than N in situations
-        where multiple reports were received for the same order.
-
-        The runs will be reported starting with the runs closest to the given
-        run's order.
-
-        The direction must be -1 or 1 and specified whether or not the
-        preceeding or following runs should be returned.
-        """
-        assert N > 0, "invalid count"
-        assert direction in (-1, 1), "invalid direction"
-
-        # The obvious algorithm here is to step through the run orders in the
-        # appropriate direction and yield any runs on the same machine which
-        # were reported at that order.
-        #
-        # However, this has one large problem. In some cases, the gap between
-        # orders reported on that machine may be quite high. This will be
-        # particularly true when a machine has stopped reporting for a while,
-        # for example, as there may be large gap between the largest reported
-        # order and the last order the machine reported at.
-        #
-        # In such cases, we could end up executing a large number of individual
-        # SA object materializations in traversing the order list, which is very
-        # bad.
-        #
-        # We currently solve this by instead finding all the orders reported on
-        # this machine, ordering those programatically, and then iterating over
-        # that. This performs worse (O(N) instead of O(1)) than the obvious
-        # algorithm in the common case but more uniform and significantly better
-        # in the worst cast, and I prefer that response times be uniform. In
-        # practice, this appears to perform fine even for quite large (~1GB,
-        # ~20k runs) databases.
-
-        # Find all the orders on this machine, then sort them.
-        #
-        # FIXME: Scalability! However, pretty fast in practice, see elaborate
-        # explanation above.
-        all_machine_orders = self.query(self.Order).\
-            join(self.Run).\
-            filter(self.Run.machine == run.machine).distinct().all()
-        all_machine_orders.sort()
-
-        # Find the index of the current run.
-        index = all_machine_orders.index(run.order)
-
-        # Gather the next N orders.
-        if direction == -1:
-            orders_to_return = all_machine_orders[max(0, index - N):index]
-        else:
-            orders_to_return = all_machine_orders[index+1:index+N]
-
-        # Get all the runs for those orders on this machine in a single query.
-        ids_to_fetch = [o.id
-                        for o in orders_to_return]
-        if not ids_to_fetch:
-            return []
-
-        runs = self.query(self.Run).\
-            filter(self.Run.machine == run.machine).\
-            filter(self.Run.order_id.in_(ids_to_fetch)).all()
-
-        # Sort the result by order, accounting for direction to satisfy our
-        # requirement of returning the runs in adjacency order.
-        #
-        # Even though we already know the right order, this is faster than
-        # issueing separate queries.
-        runs.sort(key = lambda r: r.order, reverse = (direction==-1))
-
-        return runs
-
-    def get_previous_runs_on_machine(self, run, N):
-        return self.get_adjacent_runs_on_machine(run, N, direction = -1)
-
-    def get_next_runs_on_machine(self, run, N):
-        return self.get_adjacent_runs_on_machine(run, N, direction = 1)

Removed: zorg/trunk/lnt/lnt/server/db/testsuitetypes.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuitetypes.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuitetypes.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuitetypes.py (removed)
@@ -1,85 +0,0 @@
-"""
-This module maintains information on the "known" test suite types.
-
-In order to follow the existing usage model for LNT with the v0.4 design (in
-which test suites get customized databases), we support dynamically creating
-appropriate test suites on the fly for these known types.
-"""
-
-from lnt.server.db import testsuite
-
-def get_compile_testsuite(db):
-    # Create a test suite compile with "lnt runtest compile".
-    ts = testsuite.TestSuite("compile", "compile")
-
-    # Promote some natural information to fields.
-    ts.machine_fields.append(testsuite.MachineField("hardware",
-                                                    "hw.model"))
-    ts.machine_fields.append(testsuite.MachineField("os_version",
-                                                    "kern.version"))
-
-    # The only reliable order currently is the "run_order" field. We will want
-    # to revise this over time.
-    ts.order_fields.append(testsuite.OrderField("llvm_project_revision",
-                                                "run_order", 0))
-
-    # We expect up to five fields per test, each with a status field.
-    for name,type_name in (('user', 'time'),
-                           ('sys', 'time'),
-                           ('wall', 'time'),
-                           ('size', 'bytes'),
-                           ('mem', 'bytes')):
-        status = testsuite.SampleField(
-            "%s_status" % (name,), db.status_sample_type,
-            ".%s.status" % (name,))
-        ts.sample_fields.append(status)
-        value = testsuite.SampleField(
-            "%s_%s" % (name,type_name), db.real_sample_type, ".%s" % (name,),
-            status_field = status)
-        ts.sample_fields.append(value)
-
-    return ts
-
-def get_nts_testsuite(db):
-    # Create a test suite compile with "lnt runtest nt".
-    ts = testsuite.TestSuite("nts", "NT")
-
-    # Promote the natural information produced by 'runtest nt' to fields.
-    ts.machine_fields.append(testsuite.MachineField("hardware", "hardware"))
-    ts.machine_fields.append(testsuite.MachineField("os", "os"))
-
-    # The only reliable order currently is the "run_order" field. We will want
-    # to revise this over time.
-    ts.order_fields.append(testsuite.OrderField("llvm_project_revision",
-                                                "run_order", 0))
-
-    # We are only interested in simple runs, so we expect exactly four fields
-    # per test.
-    compile_status = testsuite.SampleField(
-            "compile_status", db.status_sample_type, ".compile.status")
-    compile_time = testsuite.SampleField(
-        "compile_time", db.real_sample_type, ".compile",
-        status_field = compile_status)
-    exec_status = testsuite.SampleField(
-            "execution_status", db.status_sample_type, ".exec.status")
-    exec_time = testsuite.SampleField(
-            "execution_time", db.real_sample_type, ".exec",
-            status_field = exec_status)
-    ts.sample_fields.append(compile_time)
-    ts.sample_fields.append(compile_status)
-    ts.sample_fields.append(exec_time)
-    ts.sample_fields.append(exec_status)
-
-    return ts
-
-_registry = {
-    'compile' : get_compile_testsuite,
-    'nts' : get_nts_testsuite,
-    }
-def get_testsuite_for_type(typename, db):
-    method = _registry.get(typename)
-    if method:
-        return method(db)
-    return None
-
-__all__ = ['get_testsuite_for_type']

Removed: zorg/trunk/lnt/lnt/server/db/v4db.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/v4db.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/v4db.py (original)
+++ zorg/trunk/lnt/lnt/server/db/v4db.py (removed)
@@ -1,206 +0,0 @@
-import sqlalchemy
-
-import lnt.testing
-
-from lnt.server.db import testsuite
-from lnt.server.db import testsuitedb
-from lnt.server.db import testsuitetypes
-
-class V4DB(object):
-    """
-    Wrapper object for LNT v0.4+ databases.
-    """
-
-    class TestSuiteAccessor(object):
-        def __init__(self, v4db):
-            self.v4db = v4db
-            self._cache = {}
-
-        def __iter__(self):
-            for name, in self.v4db.query(testsuite.TestSuite.name):
-                yield name
-
-        def get(self, name, default = None):
-            # Check the test suite cache, to avoid gratuitous reinstantiation.
-            #
-            # FIXME: Invalidation?
-            if name in self._cache:
-                return self._cache[name]
-
-            # Get the test suite object.
-            ts = self.v4db.query(testsuite.TestSuite).\
-                filter(testsuite.TestSuite.name == name).first()
-            if ts is None:
-                # Check to see if this is a test suite we know how to
-                # dynamically instantiate.
-                #
-                # FIXME: For now, we assume the typename matches the test suite
-                # name. It would be nice to allow tests to report the typename.
-                ts = testsuitetypes.get_testsuite_for_type(name, self.v4db)
-                if ts is not None:
-                    self.v4db.add(ts)
-                    # FIXME: I'm not really sure why we need to commit here. It
-                    # may be an SA bug. I think we should just be able to flush
-                    # but then there is an issue when the tables will get
-                    # realized by the TestSuiteDB constructor below.
-                    #
-                    # FIXME: This commit makes me a bit nervous because clients
-                    # most likely won't expect us to be
-                    # maybe-commit'ing. However, this is unlikely to be a
-                    # problem in practice.
-                    self.v4db.commit()
-                else:
-                    # Otherwise, return the default value.
-                    return default
-
-            # Instantiate the per-test suite wrapper object for this test suite.
-            self._cache[name] = ts = testsuitedb.TestSuiteDB(
-                self.v4db, name, ts)
-            return ts
-
-        def __getitem__(self, name):
-            ts = self.get(name)
-            if ts is None:
-                raise IndexError(name)
-            return ts
-            
-        def keys(self):
-            return iter(self)
-
-        def values(self):
-            for name in self:
-                yield self[name]
-
-        def items(self):
-            for name in self:
-                yield name,self[name]
-
-    def __init__(self, path, echo=False):
-        # If the path includes no database type, assume sqlite.
-        #
-        # FIXME: I would like to phase this out and force clients to propagate
-        # paths, but it isn't a big deal.
-        if not path.startswith('mysql://') and not path.startswith('sqlite://'):
-            path = 'sqlite:///' + path
-
-        self.path = path
-        self.engine = sqlalchemy.create_engine(path, echo=echo)
-
-        # Proxy object for implementing dict-like .testsuite property.
-        self._testsuite_proxy = None
-
-        # Create the common tables in case this is a new database.
-        testsuite.Base.metadata.create_all(self.engine)
-
-        self.session = sqlalchemy.orm.sessionmaker(self.engine)()
-
-        # Add several shortcut aliases.
-        self.add = self.session.add
-        self.commit = self.session.commit
-        self.query = self.session.query
-        self.rollback = self.session.rollback
-
-        # For parity with the usage of TestSuiteDB, we make our primary model
-        # classes available as instance variables.
-        self.SampleType = testsuite.SampleType
-        self.StatusKind = testsuite.StatusKind
-        self.TestSuite = testsuite.TestSuite
-
-        # Resolve or create the known status kinds.
-        self.pass_status_kind = self.query(testsuite.StatusKind)\
-            .filter_by(id = lnt.testing.PASS).first()
-        if self.pass_status_kind is None:
-            self.pass_status_kind = testsuite.StatusKind(lnt.testing.PASS,
-                                                         "PASS")
-            self.add(self.pass_status_kind)
-        self.fail_status_kind = self.query(testsuite.StatusKind)\
-            .filter_by(id = lnt.testing.FAIL).first()
-        if self.fail_status_kind is None:
-            self.fail_status_kind = testsuite.StatusKind(lnt.testing.FAIL,
-                                                         "FAIL")
-            self.add(self.fail_status_kind)
-        self.xfail_status_kind = self.query(testsuite.StatusKind)\
-            .filter_by(id = lnt.testing.XFAIL).first()
-        if self.xfail_status_kind is None:
-            self.xfail_status_kind = testsuite.StatusKind(lnt.testing.XFAIL,
-                                                         "XFAIL")
-            self.add(self.xfail_status_kind)
-
-        # Resolve or create the known sample types.
-        self.real_sample_type = self.query(testsuite.SampleType)\
-            .filter_by(name = "Real").first()
-        if self.real_sample_type is None:
-            self.real_sample_type = testsuite.SampleType("Real")
-            self.add(self.real_sample_type)
-        self.status_sample_type = self.query(testsuite.SampleType)\
-            .filter_by(name = "Status").first()
-        if self.status_sample_type is None:
-            self.status_sample_type = testsuite.SampleType("Status")
-            self.add(self.status_sample_type)
-
-    @property
-    def testsuite(self):
-        # This is the start of "magic" part of V4DB, which allows us to get
-        # fully bound SA instances for databases which are effectively described
-        # by the TestSuites table.
-
-        # The magic starts by returning a object which will allow us to use
-        # dictionary like access to get the per-test suite database wrapper.
-        if self._testsuite_proxy is None:
-            self._testsuite_proxy = V4DB.TestSuiteAccessor(self)
-        return self._testsuite_proxy
-
-    # FIXME: The getNum...() methods below should be phased out once we can
-    # eliminate the v0.3 style databases.
-    def getNumMachines(self):
-        return sum([ts.query(ts.Machine).count()
-                    for ts in self.testsuite.values()])
-    def getNumRuns(self):
-        return sum([ts.query(ts.Run).count()
-                    for ts in self.testsuite.values()])
-    def getNumSamples(self):
-        return sum([ts.query(ts.Sample).count()
-                    for ts in self.testsuite.values()])
-    def getNumTests(self):
-        return sum([ts.query(ts.Test).count()
-                    for ts in self.testsuite.values()])
-
-    def importDataFromDict(self, data, config=None):
-        # Select the database to import into.
-        #
-        # FIXME: Promote this to a top-level field in the data.
-        db_name = data['Run']['Info'].get('tag')
-        if db_name is None:
-            raise ValueError,"unknown database target (no tag field)"
-
-        db = self.testsuite.get(db_name)
-        if db is None:
-            raise ValueError,"test suite %r not present in this database!" % (
-                db_name)
-
-        return db.importDataFromDict(data, config)
-
-    def get_db_summary(self):
-        return V4DBSummary(self)
-
-class V4DBSummary(object):
-    class SuiteSummary(object):
-        def __init__(self, name, path):
-            self.name = name
-            self.path = path
-
-    def __init__(self, db):
-        self.db = db
-        # Load all the test suite names now so that we don't attempt to reuse a
-        # cursor later.
-        #
-        # FIXME: Really, we just need to eliminate this object.
-        self.testsuites = list(self.db.testsuite)
-
-    @property
-    def suites(self):
-        for name in self.testsuites:
-            yield V4DBSummary.SuiteSummary(name, ("v4", name))
-
-    def is_up_to_date(self, db):
-        return True

Removed: zorg/trunk/lnt/lnt/server/reporting/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/reporting/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/reporting/__init__.py (original)
+++ zorg/trunk/lnt/lnt/server/reporting/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/server/reporting/analysis.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/reporting/analysis.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/reporting/analysis.py (original)
+++ zorg/trunk/lnt/lnt/server/reporting/analysis.py (removed)
@@ -1,139 +0,0 @@
-"""
-Utilities for helping with the analysis of data, for reporting purposes.
-"""
-
-from lnt.util import stats
-from lnt.server.ui import util
-from lnt.db.runinfo import ComparisonResult
-from lnt.testing import PASS, FAIL, XFAIL
-
-class RunInfo(object):
-    def __init__(self, testsuite, runs_to_load):
-        self.testsuite = testsuite
-
-        self.sample_map = util.multidict()
-        self.loaded_run_ids = set()
-
-        self._load_samples_for_runs(runs_to_load)
-
-    def get_run_comparison_result(self, run, compare_to, test_id, field,
-                                  comparison_window=[]):
-        # Get the field which indicates the requested field's status.
-        status_field = field.status_field
-
-        # Load the sample data for the current and previous runs and the
-        # comparison window.
-        if compare_to is None:
-            compare_id = None
-        else:
-            compare_id = compare_to.id
-
-        # Lookup the current and previous samples.
-        run_samples = self.sample_map.get((run.id, test_id), ())
-        prev_samples = self.sample_map.get((compare_id, test_id), ())
-
-        # Determine whether this (test,pset) passed or failed in the current and
-        # previous runs.
-        #
-        # FIXME: Support XFAILs and non-determinism (mixed fail and pass)
-        # better.
-        run_failed = prev_failed = False
-        if status_field:
-            for sample in run_samples:
-                run_failed |= sample[status_field.index] == FAIL
-            for sample in prev_samples:
-                prev_failed |= sample[status_field.index] == FAIL
-
-        # Get the current and previous values.
-        run_values = [s[field.index] for s in run_samples
-                      if s[field.index] is not None]
-        prev_values = [s[field.index] for s in prev_samples
-                       if s[field.index] is not None]
-        if run_values:
-            run_value = min(run_values)
-        else:
-            run_value = None
-        if prev_values:
-            prev_value = min(prev_values)
-        else:
-            prev_value = None
-
-        # If we have multiple values for this run, use that to estimate the
-        # distribution.
-        if run_values and len(run_values) > 1:
-            stddev = stats.standard_deviation(run_values)
-            MAD = stats.median_absolute_deviation(run_values)
-            stddev_mean = stats.mean(run_values)
-            stddev_is_estimated = False
-        else:
-            stddev = None
-            MAD = None
-            stddev_mean = None
-            stddev_is_estimated = False
-
-        # If we are missing current or comparison values we are done.
-        if run_value is None or prev_value is None:
-            return ComparisonResult(
-                run_value, prev_value, delta=None,
-                pct_delta = None, stddev = stddev, MAD = MAD,
-                cur_failed = run_failed, prev_failed = prev_failed,
-                samples = run_values)
-
-        # Compute the comparison status for the test value.
-        delta = run_value - prev_value
-        if prev_value != 0:
-            pct_delta = delta / prev_value
-        else:
-            pct_delta = 0.0
-
-        # If we don't have an estimate for the distribution, attempt to "guess"
-        # it using the comparison window.
-        #
-        # FIXME: We can substantially improve the algorithm for guessing the
-        # noise level from a list of values. Probably better to just find a way
-        # to kill this code though.
-        if stddev is None:
-            # Get all previous values in the comparison window.
-            prev_samples = [s for run in comparison_window
-                            for s in self.sample_map.get((run.id, test_id), ())
-                            if s[field.index] is not None]
-            # Filter out failing samples.
-            if status_field:
-                prev_samples = [s for s in prev_samples
-                                if s[status_field.index] != FAIL]
-            if prev_samples:
-                prev_values = [s[field.index]
-                               for s in prev_samples]
-                stddev = stats.standard_deviation(prev_values)
-                MAD = stats.median_absolute_deviation(prev_values)
-                stddev_mean = stats.mean(prev_values)
-                stddev_is_estimated = True
-
-        return ComparisonResult(run_value, prev_value, delta,
-                                pct_delta, stddev, MAD,
-                                run_failed, prev_failed, run_values,
-                                stddev_mean, stddev_is_estimated)
-
-    def _load_samples_for_runs(self, run_ids):
-        # Find the set of new runs to load.
-        to_load = set(run_ids) - self.loaded_run_ids
-        if not to_load:
-            return
-
-        # Batch load all of the samples for the needed runs.
-        #
-        # We speed things up considerably by loading the column data directly
-        # here instead of requiring SA to materialize Sample objects.
-        columns = [self.testsuite.Sample.run_id,
-                  self.testsuite.Sample.test_id]
-        columns.extend(f.column for f in self.testsuite.sample_fields)
-        q = self.testsuite.query(*columns)
-        q = q.filter(self.testsuite.Sample.run_id.in_(to_load))
-        for data in q:
-            run_id = data[0]
-            test_id = data[1]
-            sample_values = data[2:]
-            self.sample_map[(run_id, test_id)] = sample_values
-
-        self.loaded_run_ids |= to_load
-

Removed: zorg/trunk/lnt/lnt/server/reporting/runs.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/reporting/runs.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/reporting/runs.py (original)
+++ zorg/trunk/lnt/lnt/server/reporting/runs.py (removed)
@@ -1,511 +0,0 @@
-"""
-Report functionality centered around individual runs.
-"""
-
-import StringIO
-import os
-import time
-import urllib
-
-import lnt.server.reporting.analysis
-import lnt.server.ui.util
-from lnt.db import runinfo
-
-def generate_run_report(run, baseurl, only_html_body = False,
-                        num_comparison_runs = 10, result = None,
-                        compare_to = None, baseline = None,
-                        comparison_window = None):
-    """
-    generate_run_report(...) -> (str: subject, str: text_report,
-                                 str: html_report)
-
-    Generate a comprehensive report on the results of the given individual
-    run, suitable for emailing or presentation on a web page.
-    """
-
-    assert num_comparison_runs > 0
-
-    start_time = time.time()
-
-    ts = run.testsuite
-    machine = run.machine
-    machine_parameters = machine.parameters
-
-    # If no baseline was given, find one close to the requested baseline run
-    # order.
-    if baseline is None:
-        # Find the closest order to the requested baseline order, for which this
-        # machine also reported.
-        #
-        # FIXME: Scalability! Pretty fast in practice, but still pretty lame.
-        order_to_find = ts.Order(llvm_project_revision = '% 7d' % 144168)
-        best = None
-        for order in ts.query(ts.Order).\
-                join(ts.Run).\
-                filter(ts.Run.machine == machine).distinct():
-            if order >= order_to_find and (best is None or order < best):
-                best = order
-
-        # Find the most recent run on this machine that used that order.
-        if best:
-            baseline = ts.query(ts.Run).\
-                filter(ts.Run.machine == run.machine).\
-                filter(ts.Run.order == best).\
-                order_by(ts.Run.start_time.desc()).first()
-
-    # Gather the runs to use for statistical data.
-    if comparison_window is None:
-        comparison_start_run = compare_to or run
-        comparison_window = list(ts.get_previous_runs_on_machine(
-                comparison_start_run, num_comparison_runs))
-    if baseline:
-        baseline_window = list(ts.get_previous_runs_on_machine(
-                baseline, num_comparison_runs))
-    else:
-        baseline_window = []
-
-    # If we don't have an explicit baseline run or a comparison run, use the
-    # previous run.
-    if compare_to is None and comparison_window:
-        compare_to = comparison_window[0]
-
-    # Create the run info analysis object.
-    runs_to_load = set(r.id for r in comparison_window)
-    for r in baseline_window:
-        runs_to_load.add(r.id)
-    runs_to_load.add(run.id)
-    if compare_to:
-        runs_to_load.add(compare_to.id)
-    if baseline:
-        runs_to_load.add(baseline.id)
-    sri = lnt.server.reporting.analysis.RunInfo(ts, runs_to_load)
-
-    # Get the test names, primary fields and total test counts.
-    test_names = ts.query(ts.Test.name, ts.Test.id).order_by(ts.Test.name).all()
-    primary_fields = list(ts.Sample.get_primary_fields())
-    num_total_tests = len(primary_fields) * len(test_names)
-
-    # Gather the run-over-run changes to report, organized by field and then
-    # collated by change type.
-    run_to_run_info,test_results = _get_changes_by_type(
-        run, compare_to, primary_fields, test_names, comparison_window, sri)
-
-    # If we have a baseline, gather the run-over-baseline results and
-    # changes.
-    if baseline:
-        run_to_baseline_info,baselined_results = _get_changes_by_type(
-            run, baseline, primary_fields, test_names, baseline_window, sri)
-    else:
-        run_to_baseline_info = baselined_results = None
-
-    # Gather the run-over-run changes to report.
-
-    # Collect the simplified results, if desired, for sending back to clients.
-    if result is not None:
-        pset_results = []
-        result['test_results'] = [{ 'pset' : (), 'results' : pset_results}]
-        for field,field_results in test_results:
-            for _,bucket,_ in field_results:
-                for name,cr,_ in bucket:
-                    # FIXME: Include additional information about performance
-                    # changes.
-                    pset_results.append(("%s.%s" % (name, field.name),
-                                         cr.get_test_status(),
-                                         cr.get_value_status()))
-
-    # Begin report generation...
-    subject = """%s test results""" % (machine.name,)
-    report = StringIO.StringIO()
-    html_report = StringIO.StringIO()
-
-    # Generate the report header.
-    if baseurl[-1] == '/':
-        baseurl = baseurl[:-1]
-
-    ts_url = """%s/v4/%s""" % (baseurl, ts.name)
-    run_url = """%s/%d""" % (ts_url, run.id)
-    report_url = run_url
-    url_fields = []
-    if compare_to:
-        url_fields.append(('compare_to', str(compare_to.id)))
-    if baseline:
-        url_fields.append(('baseline', str(baseline.id)))
-    report_url = "%s?%s" % (run_url, "&".join("%s=%s" % (k,v)
-                                              for k,v in url_fields))
-    print >>report, report_url
-    print >>report, """Nickname: %s:%d""" % (machine.name, machine.id)
-    if 'name' in machine_parameters:
-        print >>report, """Name: %s""" % (machine_parameters['name'],)
-    print >>report, "Comparing:"
-    # FIXME: Remove hard coded field use here.
-    print >>report, "     Run: %d, Order: %s, Start Time: %s, End Time: %s" % (
-        run.id, run.order.llvm_project_revision, run.start_time, run.end_time)
-    if compare_to:
-        # FIXME: Remove hard coded field use here.
-        print >>report, ("      To: %d, Order: %s, "
-                         "Start Time: %s, End Time: %s") % (
-            compare_to.id, compare_to.order.llvm_project_revision,
-            compare_to.start_time, compare_to.end_time)
-        if run.machine != compare_to.machine:
-            print >>report, """*** WARNING ***:""",
-            print >>report, """comparison is against a different machine""",
-            print >>report, """(%s:%d)""" % (compare_to.machine.name,
-                                             compare_to.machine.id)
-    else:
-        print >>report, "      To: (none)"
-    if baseline:
-        # FIXME: Remove hard coded field use here.
-        print >>report, ("Baseline: %d, Order: %s, "
-                         "Start Time: %s, End Time: %s") % (
-            baseline.id, baseline.order.llvm_project_revision,
-            baseline.start_time, baseline.end_time)
-    print >>report
-
-    # Compute static CSS styles for elemenets. We use the style directly on
-    # elements instead of via a stylesheet to support major email clients (like
-    # Gmail) which can't deal with embedded style sheets.
-    #
-    # These are derived from the static style.css file we use elsewhere.
-    styles = {
-        "body" : ("color:#000000; background-color:#ffffff; "
-                  "font-family: Helvetica, sans-serif; font-size:9pt"),
-        "h1" : ("font-size: 14pt"),
-        "table" : "font-size:9pt; border-spacing: 0px; border: 1px solid black",
-        "th" : (
-            "background-color:#eee; color:#666666; font-weight: bold; "
-            "cursor: default; text-align:center; font-weight: bold; "
-            "font-family: Verdana; padding:5px; padding-left:8px"),
-        "td" : "padding:5px; padding-left:8px",
-        }
-
-    # Generate the HTML report header.
-    print >>html_report, """<h1 style="%s"><a href="%s">%s</a></h1>""" % (
-        styles['h1'], report_url, subject)
-    print >>html_report, """\
-<p>
-<table style="%s">
-<thead>
-  <tr>
-    <th style="%s">Run</th>
-    <th style="%s">Order</th>
-    <th style="%s">Start Time</th>
-    <th style="%s">Duration</th>
-  </tr>
-</thead>""" % (styles['table'],
-               styles['th'], styles['th'], styles['th'], styles['th'])
-    for (title, r) in (('Current', run),
-                       ('Previous', compare_to),
-                       ('Baseline', baseline)):
-        if r is None:
-            print >>html_report, """\
-<tr><td style="%s" colspan=4>No %s Run</td></tr>""" % (
-                styles['td'], title,)
-            continue
-
-        # FIXME: Remove hard coded field use here.
-        print >>html_report, """\
-<tr><td style="%s"><a href="%s/%d">%s</a></td>\
-<td style="%s"><a href="%s/order/%d">%s</a></td>\
-<td style="%s">%s</td>\
-<td style="%s">%s</td></tr>""" % (
-            styles['td'], ts_url, r.id, title,
-            styles['td'], ts_url, r.order.id, r.order.llvm_project_revision,
-            styles['td'], r.start_time,
-            styles['td'], r.end_time - r.start_time)
-    print >>html_report, """</table>"""
-    if compare_to and run.machine != compare_to.machine:
-        print >>html_report, """<p><b>*** WARNING ***:""",
-        print >>html_report, """comparison is against a different machine""",
-        print >>html_report, """(%s:%d)</b></p>""" % (compare_to.machine.name,
-                                                      compare_to.machine.id)
-    if baseline and run.machine != baseline.machine:
-        print >>html_report, """<p><b>*** WARNING ***:""",
-        print >>html_report, """baseline is against a different machine""",
-        print >>html_report, """(%s:%d)</b></p>""" % (baseline.machine.name,
-                                                      baseline.machine.id)
-
-    # Generate the summary of the changes.
-    num_total_changes = sum(len(bucket)
-                            for _,field_results in test_results
-                            for name,bucket,_ in field_results
-                            if name != 'Unchanged Tests')
-
-    print >>report, """==============="""
-    print >>report, """Tests Summary"""
-    print >>report, """==============="""
-    print >>report
-    print >>html_report, """
-<hr>
-<h3>Tests Summary</h3>
-<table style="%s">
-<thead>
-  <tr>
-    <th style="%s">Status Group</th>
-    <th style="%s" align="right">#</th>""" % (
-        styles['table'], styles['th'], styles['th'])
-    if baseline:
-        print >>html_report, """<th style="%s" align="right"># (B)</th>""" % (
-            styles['th'],)
-    print >>html_report, """</tr></thead> """
-    # For now, we aggregate across all bucket types for reports.
-    for i,(name,_,_) in enumerate(test_results[0][1]):
-        num_items = sum(len(field_results[i][1])
-                        for _,field_results in test_results)
-        if baseline:
-            num_items_vs_baseline = sum(
-                len(field_results[i][1])
-                for _,field_results in baselined_results)
-        else:
-            num_items_vs_baseline = None
-        if num_items or num_items_vs_baseline:
-            if baseline:
-                print >>report, '%s: %d (%d on baseline)' % (
-                    name, num_items, num_items_vs_baseline)
-            else:
-                print >>report, '%s: %d' % (name, num_items)
-            print >>html_report, """
-<tr><td style="%s">%s</td><td style="%s" align="right">%d</td>""" % (
-                styles['td'], name, styles['td'], num_items)
-            if baseline:
-                print >>html_report, """\
-<td style="%s" align="right">%d</td>""" % (
-                    styles['td'], num_items_vs_baseline)
-            print >>html_report, """</tr>"""
-    print >>report, """Total Tests: %d""" % num_total_tests
-    print >>report
-    print >>html_report, """
-<tfoot>
-  <tr>\
-<td style="%s"><b>Total Tests</b></td>\
-<td style="%s" align="right"><b>%d</b></td>""" % (
-        styles['td'], styles['td'], num_total_tests)
-    if baseline:
-        print >>html_report, """\
-<td style="%s" align="right"><b>%d</b></td>""" % (
-            styles['td'], num_total_tests,)
-    print >>html_report, """</tr>
-</tfoot>
-</table>
-"""
-
-    # Add the run-over-run changes detail (if any were present).
-    print >>report, """==========================="""
-    print >>report, """Run-Over-Run Changes Detail"""
-    print >>report, """==========================="""
-    print >>html_report, """
-<p>
-<h3>Run-Over-Run Changes Detail</h3>"""
-
-    _add_report_changes_detail(ts, test_results, report,
-                               html_report, run_url,
-                               run_to_baseline_info,
-                               'Previous', '', ' (B)',
-                               styles)
-
-    # Add the run-over-baseline changes detail.
-    if baseline:
-        print >>report, """================================"""
-        print >>report, """Run-Over-Baseline Changes Detail"""
-        print >>report, """================================"""
-        print >>html_report, """
-<p>
-<h3>Run-Over-Baseline Changes Detail</h3>"""
-
-        _add_report_changes_detail(ts, baselined_results, report,
-                                   html_report, run_url,
-                                   run_to_run_info,
-                                   'Baseline', '(B)', '',
-                                   styles)
-
-    report_time = time.time() - start_time
-    print >>report, "Report Time: %.2fs" % (report_time,)
-    print >>html_report, """
-<hr>
-<b>Report Time</b>: %.2fs""" % (report_time,)
-
-    # Finish up the HTML report (wrapping the body, if necessary).
-    html_report = html_report.getvalue()
-    if not only_html_body:
-        # We embed the additional resources, so that the message is self
-        # contained.
-        html_report = """\
-<html>
-  <head>
-    <title>%s</title>
-  </head>
-  <body style="%s">
-%s
-  </body>
-</html>""" % (subject, styles['body'], html_report)
-
-    return subject, report.getvalue(), html_report, sri
-
-def _get_changes_by_type(run_a, run_b, primary_fields, test_names,
-                         comparison_window, sri):
-    comparison_results = {}
-    results_by_type = []
-    for field in primary_fields:
-        new_failures = []
-        new_passes = []
-        perf_regressions = []
-        perf_improvements = []
-        removed_tests = []
-        added_tests = []
-        existing_failures = []
-        unchanged_tests = []
-        for name,test_id in test_names:
-            cr = sri.get_run_comparison_result(run_a, run_b, test_id, field,
-                                               comparison_window)
-            comparison_results[(name,field)] = cr
-            test_status = cr.get_test_status()
-            perf_status = cr.get_value_status()
-            if test_status == runinfo.REGRESSED:
-                bucket = new_failures
-            elif test_status == runinfo.IMPROVED:
-                bucket = new_passes
-            elif cr.current is None and cr.previous is not None:
-                bucket = removed_tests
-            elif cr.current is not None and cr.previous is None:
-                bucket = added_tests
-            elif test_status == runinfo.UNCHANGED_FAIL:
-                bucket = existing_failures
-            elif perf_status == runinfo.REGRESSED:
-                bucket = perf_regressions
-            elif perf_status == runinfo.IMPROVED:
-                bucket = perf_improvements
-            else:
-                bucket = unchanged_tests
-
-            bucket.append((name, cr, test_id))
-
-        results_by_type.append(
-            (field, (('New Failures', new_failures, False),
-                     ('New Passes', new_passes, False),
-                     ('Performance Regressions', perf_regressions, True),
-                     ('Performance Improvements', perf_improvements, True),
-                     ('Removed Tests', removed_tests, False),
-                     ('Added Tests', added_tests, False),
-                     ('Existing Failures', existing_failures, False),
-                     ('Unchanged Tests', unchanged_tests, False))))
-    return comparison_results, results_by_type
-
-def _add_report_changes_detail(ts, test_results, report, html_report,
-                               run_url, run_to_baseline_info,
-                               primary_name, primary_field_suffix,
-                               secondary_field_suffix,
-                               styles):
-    # Reorder results to present by most important bucket first.
-    prioritized = [(priority, field, bucket_name, bucket, show_perf)
-                   for field,field_results in test_results
-                   for priority,(bucket_name, bucket,
-                                 show_perf) in enumerate(field_results)]
-    prioritized.sort(key = lambda item: (item[0], item[1].name))
-
-    for _,field,bucket_name,bucket,show_perf in prioritized:
-        _add_report_changes_detail_for_field_and_bucket(
-            ts, field, bucket_name, bucket, show_perf, report,
-            html_report, run_url, run_to_baseline_info,
-            primary_name, primary_field_suffix, secondary_field_suffix,
-            styles)
-
-def _add_report_changes_detail_for_field_and_bucket(
-      ts, field, bucket_name, bucket, show_perf, report,
-      html_report, run_url, secondary_info,
-      primary_name, primary_field_suffix, secondary_field_suffix,
-      styles):
-    if not bucket or bucket_name == 'Unchanged Tests':
-        return
-
-    field_index = ts.sample_fields.index(field)
-    # FIXME: Do not hard code field display names here, this should be in the
-    # test suite metadata.
-    field_display_name = { "compile_time" : "Compile Time",
-                           "execution_time" : "Execution Time" }.get(
-        field.name, field.name)
-
-    print >>report, "%s - %s" % (bucket_name, field_display_name)
-    print >>report, '-' * (len(bucket_name) + len(field_display_name) + 3)
-    print >>html_report, """
-<p>
-<table style="%s" class="sortable">
-<tr><th style="%s", width="500">%s - %s </th>""" % (
-        styles['table'], styles['th'], bucket_name, field_display_name)
-    if show_perf:
-        print >>html_report, """\
-<th style="%s">Δ%s</th>\
-<th style="%s">%s</th>\
-<th style="%s">Current</th>\
-<th style="%s">σ%s</th>""" % (
-            styles['th'], primary_field_suffix,
-            styles['th'], primary_name,
-            styles['th'], styles['th'], primary_field_suffix)
-        if secondary_info:
-            print >>html_report, """<th style="%s">Δ%s</th>""" % (
-                styles['th'], secondary_field_suffix,)
-            print >>html_report, """<th style="%s">σ%s</th>""" % (
-                styles['th'], secondary_field_suffix,)
-        print >>html_report, """</tr>"""
-
-    # If we aren't displaying any performance results, just write out the
-    # list of tests and continue.
-    if not show_perf:
-        for name,cr,_ in bucket:
-            print >>report, '  %s' % (name,)
-            print >>html_report, """
-<tr><td style="%s">%s</td></tr>""" % (styles['td'], name,)
-        print >>report
-        print >>html_report, """
-</table>"""
-        return
-
-    bucket.sort(key = lambda (_,cr,__): -abs(cr.pct_delta))
-
-    for name,cr,test_id in bucket:
-        if cr.stddev is not None:
-            stddev_value = ', std. dev.: %.4f' % cr.stddev
-        else:
-            stddev_value = ''
-        print >>report, ('  %s: %.2f%% (%.4f => %.4f%s)') % (
-            name, 100. * cr.pct_delta,
-            cr.previous, cr.current, stddev_value)
-
-        # Link the regression to the chart of its performance.
-        form_data = urllib.urlencode([('test.%d' % test_id,
-                                       str(field_index))])
-        linked_name = '<a href="%s?%s">%s</a>' % (
-            os.path.join(run_url, "graph"),
-            form_data, name)
-
-        pct_value = lnt.server.ui.util.PctCell(cr.pct_delta).render(
-            style=styles['td'])
-        if cr.stddev is not None:
-            stddev_value = "%.4f" % cr.stddev
-        else:
-            stddev_value = "-"
-
-        if secondary_info:
-            a_cr = secondary_info[(name,field)]
-            if a_cr.stddev is not None:
-                a_stddev_value = "%.4f" % a_cr.stddev
-            else:
-                a_stddev_value = "-"
-            baseline_info = """%s<td style="%s">%s</td>""" % (
-                lnt.server.ui.util.PctCell(a_cr.pct_delta).render(
-                    style=styles['td']),
-                styles['td'], a_stddev_value)
-        else:
-            baseline_info = ""
-        print >>html_report, """\
-<tr>\
-<td style="%s">%s</td>%s\
-<td style="%s">%.4f</td>\
-<td style="%s">%.4f</td>\
-<td style="%s">%s</td>%s</tr>""" %(
-            styles['td'], linked_name, pct_value,
-            styles['td'], cr.previous,
-            styles['td'], cr.current,
-            styles['td'], stddev_value,
-            baseline_info)
-    print >>report
-    print >>html_report, """
-</table>"""

Removed: zorg/trunk/lnt/lnt/server/ui/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/__init__.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/__init__.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/__init__.py (removed)
@@ -1 +0,0 @@
-__all__ = []

Removed: zorg/trunk/lnt/lnt/server/ui/app.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/app.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/app.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/app.py (removed)
@@ -1,132 +0,0 @@
-import jinja2
-import logging
-import logging.handlers
-import os
-import time
-
-import flask
-from flask import current_app
-from flask import g
-from flask import url_for
-
-import lnt
-import lnt.server.config
-import lnt.server.ui.filters
-import lnt.server.ui.globals
-import lnt.server.ui.views
-import lnt.server.db.v4db
-
-from lnt.db import perfdbsummary
-from lnt.db import perfdb
-
-class RootSlashPatchMiddleware(object):
-    def __init__(self, app):
-        self.app = app
-
-    def __call__(self, environ, start_response):
-        if environ['PATH_INFO'] == '':
-            return flask.redirect(environ['SCRIPT_NAME'] + '/')(
-                environ, start_response)
-        return self.app(environ, start_response)
-
-class Request(flask.Request):
-    def __init__(self, *args, **kwargs):
-        super(Request, self).__init__(*args, **kwargs)
-
-        self.request_time = time.time()
-        self.db = None
-        self.db_summary = None
-        self.testsuite = None
-
-    def elapsed_time(self):
-        return time.time() - self.request_time
-
-    # Utility Methods
-
-    def get_db(self):
-        if self.db is None:
-            echo = bool(self.args.get('db_log') or self.form.get('db_log'))
-
-            self.db = current_app.old_config.get_database(g.db_name, echo=echo)
-
-            # Enable SQL logging with db_log.
-            #
-            # FIXME: Conditionalize on an is_production variable.
-            if echo:
-                import logging, StringIO
-                g.db_log = StringIO.StringIO()
-                logger = logging.getLogger("sqlalchemy")
-                logger.addHandler(logging.StreamHandler(g.db_log))
-
-        return self.db
-
-    def get_testsuite(self):
-        if self.testsuite is None:
-            testsuites = self.get_db().testsuite
-            if g.testsuite_name not in testsuites:
-                flask.abort(404)
-
-            self.testsuite = testsuites[g.testsuite_name]
-
-        return self.testsuite
-
-    def get_db_summary(self):
-        return current_app.get_db_summary(g.db_name, self.get_db())
-
-class App(flask.Flask):
-    @staticmethod
-    def create_standalone(config_path):
-        # Construct the application.
-        app = App(__name__)
-
-        # Register additional filters.
-        lnt.server.ui.filters.register(app)
-
-        # Set up strict undefined mode for templates.
-        app.jinja_env.undefined = jinja2.StrictUndefined
-
-        # Load the application configuration.
-        app.load_config(config_path)
-
-        # Load the application routes.
-        app.register_module(lnt.server.ui.views.frontend)
-                        
-        return app
-
-    def __init__(self, name):
-        super(App, self).__init__(name)
-        self.start_time = time.time()
-        self.db_summaries = {}
-
-        # Override the request class.
-        self.request_class = Request
-
-        # Store a few global things we want available to templates.
-        self.version = lnt.__version__
-
-        # Inject a fix for missing slashes on the root URL (see Flask issue
-        # #169).
-        self.wsgi_app = RootSlashPatchMiddleware(self.wsgi_app)
-
-    def load_config(self, config_path):
-        config_data = {}
-        exec open(config_path) in config_data
-
-        self.old_config = lnt.server.config.Config.fromData(
-            config_path, config_data)
-
-        self.jinja_env.globals.update(
-            app=current_app,
-            perfdb=perfdb,
-            old_config=self.old_config)
-
-        lnt.server.ui.globals.register(self)
-
-    def get_db_summary(self, db_name, db):
-        # FIXME/v3removal: Eliminate this, V4DB style has no need for summary
-        # abstraction.
-        db_summary = self.db_summaries.get(db_name)
-        if db_summary is None or not db_summary.is_up_to_date(db):
-            self.db_summaries[db_name] = db_summary = db.get_db_summary()
-        return db_summary
-

Removed: zorg/trunk/lnt/lnt/server/ui/filters.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/filters.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/filters.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/filters.py (removed)
@@ -1,16 +0,0 @@
-import datetime
-from lnt.server.ui import util
-
-def filter_asusertime(time):
-    # FIXME: Support alternate timezones?
-    ts = datetime.datetime.fromtimestamp(time)
-    return ts.strftime('%Y-%m-%d %H:%M:%S %Z PST')
-
-def filter_aspctcell(value, *args, **kwargs):
-    cell = util.PctCell(value, *args, **kwargs)
-    return cell.render()
-
-def register(app):
-    for name,object in globals().items():
-        if name.startswith('filter_'):
-            app.jinja_env.filters[name[7:]] = object

Removed: zorg/trunk/lnt/lnt/server/ui/globals.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/globals.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/globals.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/globals.py (removed)
@@ -1,24 +0,0 @@
-"""
-Module for defining additional Jinja global functions.
-"""
-
-import flask
-
-def db_url_for(*args, **kwargs):
-    """
-    Like url_for, but handles automatically providing the db_name argument.
-    """
-    return flask.url_for(*args, db_name=flask.g.db_name, **kwargs)
-
-def v4_url_for(*args, **kwargs):
-    """
-    Like url_for, but handles automatically providing the db_name and
-    testsuite_name arguments.
-    """
-    return flask.url_for(*args, db_name=flask.g.db_name,
-                          testsuite_name=flask.g.testsuite_name, **kwargs)
-
-def register(app):
-    app.jinja_env.globals.update(
-        db_url_for=db_url_for,
-        v4_url_for=v4_url_for)

Removed: zorg/trunk/lnt/lnt/server/ui/graphutil.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/graphutil.py?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/graphutil.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/graphutil.py (removed)
@@ -1,131 +0,0 @@
-"""
-Helper functions for graphing test results.
-"""
-
-from lnt.server.ui import util
-from lnt.util import stats
-from lnt.external.stats import stats as ext_stats
-
-from lnt.db.perfdb import Machine, Run, RunInfo, Sample, Test
-
-def get_test_plots(db, machine, test_ids, run_summary, ts_summary,
-                   show_mad_error = False, show_points = False,
-                   show_all_points = False, show_stddev = False,
-                   show_linear_regression = False):
-    # Load all the samples for these tests and this machine.
-    q = db.session.query(Sample.run_id,Sample.test_id,
-                         Sample.value).join(Run)
-    q = q.filter(Run.machine_id == machine.id)
-    q = q.filter(Sample.test_id.in_(test_ids))
-    samples = list(q)
-
-    # Aggregate by test id and then run key.
-    #
-    # FIXME: Pretty expensive.
-    samples_by_test_id = {}
-    for run_id,test_id,value in samples:
-        d = samples_by_test_id.get(test_id)
-        if d is None:
-            d = samples_by_test_id[test_id] = util.multidict()
-        run_key = run_summary.get_run_order(run_id)
-        if run_key is None:
-            continue
-
-        # FIXME: What to do on failure?
-        run_key = int(run_key)
-        d[run_key] = value
-
-    # Build the graph data
-    pset_id_map = dict([(pset,i)
-                        for i,pset in enumerate(ts_summary.parameter_sets)])
-    num_plots = len(test_ids)
-    for index,test_id in enumerate(test_ids):
-        test = db.getTest(test_id)
-        pset = test.get_parameter_set()
-        name = test.name
-
-        # Get the plot for this test.
-        #
-        # FIXME: Support order by something other than time.
-        errorbar_data = []
-        points_data = []
-        data = []
-        points = []
-        for x,values in samples_by_test_id.get(test_id,{}).items():
-            min_value = min(values)
-            data.append((x, min_value))
-            if show_points:
-                if show_all_points:
-                    for v in values:
-                        points_data.append((x, v))
-                else:
-                    points_data.append((x, min_value))
-            if show_stddev:
-                mean = stats.mean(values)
-                sigma = stats.standard_deviation(values)
-                errorbar_data.append((x, mean - sigma, mean + sigma))
-            if show_mad_error:
-                med = stats.median(values)
-                mad = stats.median_absolute_deviation(values, med)
-                errorbar_data.append((x, med - mad, med + mad))
-                points.append((x, min_value, mad, med))
-        data.sort()
-        points.sort()
-
-        plot_js = ""
-
-        # Determine the base plot color.
-        col = list(util.makeDarkColor(float(index) / num_plots))
-
-        # Add regression line, if requested.
-        if show_linear_regression:
-            xs = [t for t,v in data]
-            ys = [v for t,v in data]
-
-            # We compute the regression line in terms of a normalized X scale.
-            x_min, x_max = min(xs), max(xs)
-            try:
-                norm_xs = [(x - x_min) / (x_max - x_min)
-                           for x in xs]
-            except ZeroDivisionError:
-                norm_xs = xs
-
-            try:
-                info = ext_stats.linregress(norm_xs, ys)
-            except ZeroDivisionError:
-                info = None
-            except ValueError:
-                info = None
-
-            if info is not None:
-                slope, intercept,_,_,_ = info
-
-                reglin_col = [c*.5 for c in col]
-                pts = ','.join('[%.4f,%.4f]' % pt
-                               for pt in [(x_min, 0.0 * slope + intercept),
-                                          (x_max, 1.0 * slope + intercept)])
-                style = "new Graph2D_LinePlotStyle(4, %r)" % ([.7, .7, .7],)
-                plot_js += "    graph.addPlot([%s], %s);\n" % (pts,style)
-                style = "new Graph2D_LinePlotStyle(2, %r)" % (reglin_col,)
-                plot_js += "    graph.addPlot([%s], %s);\n" % (pts,style)
-
-        pts = ','.join(['[%.4f,%.4f]' % (t,v)
-                        for t,v in data])
-        style = "new Graph2D_LinePlotStyle(1, %r)" % col
-        plot_js += "    graph.addPlot([%s], %s);\n" % (pts,style)
-
-        if points_data:
-            pts_col = (0,0,0)
-            pts = ','.join(['[%.4f,%.4f]' % (t,v)
-                            for t,v in points_data])
-            style = "new Graph2D_PointPlotStyle(1, %r)" % (pts_col,)
-            plot_js += "    graph.addPlot([%s], %s);\n" % (pts,style)
-
-        if errorbar_data:
-            bar_col = [c*.7 for c in col]
-            pts = ','.join(['[%.4f,%.4f,%.4f]' % (x,y_min,y_max)
-                            for x,y_min,y_max in errorbar_data])
-            style = "new Graph2D_ErrorBarPlotStyle(1, %r)" % (bar_col,)
-            plot_js += "    graph.addPlot([%s], %s);\n" % (pts,style)
-
-        yield (test_id, plot_js, col, data, points)

Removed: zorg/trunk/lnt/lnt/server/ui/static/View2D.js
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/View2D.js?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/View2D.js (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/View2D.js (removed)
@@ -1,939 +0,0 @@
-//===-- View2D.js - HTML5 Canvas Based 2D View/Graph Widget ---------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements a generic 2D view widget and a 2D graph widget on top of
-// it, using the HTML5 Canvas. It currently supports Chrome, Firefox, and
-// Safari.
-//
-// See the Graph2D implementation for details of how to extend the View2D
-// object.
-//
-//===----------------------------------------------------------------------===//
-
-function lerp(a, b, t) {
-    return a * (1.0 - t) + b * t;
-}
-
-function clamp(a, lower, upper) {
-    return Math.max(lower, Math.min(upper, a));
-}
-
-function vec2_neg (a)    { return [-a[0]    , -a[1]    ]; };
-function vec2_add (a, b) { return [a[0]+b[0], a[1]+b[1]]; };
-function vec2_addN(a, b) { return [a[0]+b   , a[1]+b   ]; };
-function vec2_sub (a, b) { return [a[0]-b[0], a[1]-b[1]]; };
-function vec2_subN(a, b) { return [a[0]-b   , a[1]-b   ]; };
-function vec2_mul (a, b) { return [a[0]*b[0], a[1]*b[1]]; };
-function vec2_mulN(a, b) { return [a[0]*b   , a[1]*b   ]; };
-function vec2_div (a, b) { return [a[0]/b[0], a[1]/b[1]]; };
-function vec2_divN(a, b) { return [a[0]/b   , a[1]/b   ]; };
-
-function vec3_neg (a)    { return [-a[0]    , -a[1]    , -a[2]    ]; };
-function vec3_add (a, b) { return [a[0]+b[0], a[1]+b[1], a[2]+b[2]]; };
-function vec3_addN(a, b) { return [a[0]+b   , a[1]+b,    a[2]+b   ]; };
-function vec3_sub (a, b) { return [a[0]-b[0], a[1]-b[1], a[2]-b[2]]; };
-function vec3_subN(a, b) { return [a[0]-b   , a[1]-b,    a[2]-b   ]; };
-function vec3_mul (a, b) { return [a[0]*b[0], a[1]*b[1], a[2]*b[2]]; };
-function vec3_mulN(a, b) { return [a[0]*b   , a[1]*b,    a[2]*b   ]; };
-function vec3_div (a, b) { return [a[0]/b[0], a[1]/b[1], a[2]/b[2]]; };
-function vec3_divN(a, b) { return [a[0]/b   , a[1]/b,    a[2]/b   ]; };
-
-function vec2_lerp(a, b, t) {
-    return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];
-}
-function vec2_mag(a) {
-    return a[0] * a[0] + a[1] * a[1];
-}
-function vec2_len(a) {
-    return Math.sqrt(vec2_mag(a));
-}
-
-function vec2_floor(a) {
-    return [Math.floor(a[0]), Math.floor(a[1])];
-}
-function vec2_ceil(a) {
-    return [Math.ceil(a[0]), Math.ceil(a[1])];
-}
-
-function vec3_floor(a) {
-    return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])];
-}
-function vec3_ceil(a) {
-    return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])];
-}
-
-function vec2_log(a) {
-    return [Math.log(a[0]), Math.log(a[1])];
-}
-function vec2_pow(a, b) {
-   return [Math.pow(a[0], b[0]), Math.pow(a[1], b[1])];
-}
-function vec2_Npow(a, b) {
-   return [Math.pow(a, b[0]), Math.pow(a, b[1])];
-}
-function vec2_powN(a, b) {
-   return [Math.pow(a[0], b), Math.pow(a[1], b)];
-}
-
-function vec2_min(a, b) {
-    return [Math.min(a[0], b[0]), Math.min(a[1], b[1])];
-}
-function vec2_max(a, b) {
-    return [Math.max(a[0], b[0]), Math.max(a[1], b[1])];
-}
-function vec2_clamp(a, lower, upper) {
-    return [clamp(a[0], lower[0], upper[0]),
-            clamp(a[1], lower[1], upper[1])];
-}
-function vec2_clampN(a, lower, upper) {
-    return [clamp(a[0], lower, upper),
-            clamp(a[1], lower, upper)];
-}
-
-function vec3_min(a, b) {
-    return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.min(a[2], b[2])];
-}
-function vec3_max(a, b) {
-    return [Math.max(a[0], b[0]), Math.max(a[1], b[1]), Math.max(a[2], b[2])];
-}
-function vec3_clamp(a, lower, upper) {
-    return [clamp(a[0], lower[0], upper[0]),
-            clamp(a[1], lower[1], upper[1]),
-            clamp(a[2], lower[2], upper[2])];
-}
-function vec3_clampN(a, lower, upper) {
-    return [clamp(a[0], lower, upper),
-            clamp(a[1], lower, upper),
-            clamp(a[2], lower, upper)];
-}
-
-function vec2_cswap(a, swap) {
-    if (swap)
-        return [a[1],a[0]];
-    return a;
-}
-
-function col3_to_rgb(col) {
-    var norm = vec3_floor(vec3_clampN(vec3_mulN(col, 255), 0, 255));
-    return "rgb(" + norm[0] + "," + norm[1] + "," + norm[2] + ")";
-}
-
-function col4_to_rgba(col) {
-    var norm = vec3_floor(vec3_clampN(vec3_mulN(col, 255), 0, 255));
-    return "rgb(" + norm[0] + "," + norm[1] + "," + norm[2] + "," + col[3] + ")";
-}
-
-/* ViewData Class */
-
-function ViewData(location, scale) {
-    if (!location)
-        location = [0, 0];
-    if (!scale)
-        scale = [1, 1];
-
-    this.location = location;
-    this.scale = scale;
-}
-
-ViewData.prototype.copy = function() {
-    return new ViewData(this.location, this.scale);
-}
-
-/* ViewAction Class */
-function ViewAction(mode, v2d, start) {
-    this.mode = mode;
-    this.start = start;
-    this.vd = v2d.viewData.copy();
-}
-
-ViewAction.prototype.update = function(v2d, co) {
-    if (this.mode == 'p') {
-        var delta = vec2_sub(v2d.convertClientToNDC(co, this.vd),
-            v2d.convertClientToNDC(this.start, this.vd))
-        v2d.viewData.location = vec2_add(this.vd.location, delta);
-    } else {
-        var delta = vec2_sub(v2d.convertClientToNDC(co, this.vd),
-            v2d.convertClientToNDC(this.start, this.vd))
-        v2d.viewData.scale = vec2_Npow(Math.E,
-                                       vec2_add(vec2_log(this.vd.scale),
-                                                delta))
-        v2d.viewData.location = vec2_mul(this.vd.location,
-                                         vec2_div(v2d.viewData.scale,
-                                                  this.vd.scale))
-    }
-
-    v2d.refresh();
-}
-
-ViewAction.prototype.complete = function(v2d, co) {
-    this.update(v2d, co);
-}
-
-ViewAction.prototype.abort = function(v2d) {
-    v2d.viewData = this.vd;
-}
-
-/* EventWrapper Class */
-
-function EventWrapper(domevent) {
-    this.domevent = domevent;
-    this.client = {
-        x: domevent.clientX,
-        y: domevent.clientY,
-    };
-    this.alt = domevent.altKey;
-    this.shift = domevent.shiftKey;
-    this.meta = domevent.metaKey;
-    this.wheel = (domevent.wheelDelta) ? domevent.wheelDelta / 120 : -(domevent.detail || 0) / 3;
-}
-
-EventWrapper.prototype.stop = function() {
-    this.domevent.stopPropagation();
-    this.domevent.preventDefault();
-}
-
-/* View2D Class */
-
-function View2D(canvasname)  {
-    this.canvasname = canvasname;
-    this.viewData = new ViewData();
-    this.size = [1, 1];
-    this.aspect = 1;
-    this.registered = false;
-
-    this.viewAction = null;
-
-    this.useWidgets = true;
-    this.previewPosition = [5, 5];
-    this.previewSize = [60, 60];
-
-    this.clearColor = [1, 1, 1];
-
-    // Bound once registered.
-    this.canvas = null;
-}
-
-View2D.prototype.registerEvents = function(canvas) {
-    if (this.registered)
-        return;
-
-    this.registered = true;
-
-    this.canvas = canvas;
-
-    // FIXME: Why do I have to do this?
-    var obj = this;
-
-    canvas.onmousedown = function(event) { obj.onMouseDown(new EventWrapper(event)); };
-    canvas.onmousemove = function(event) { obj.onMouseMove(new EventWrapper(event)); };
-    canvas.onmouseup = function(event) { obj.onMouseUp(new EventWrapper(event)); };
-    canvas.onmousewheel = function(event) { obj.onMouseWheel(new EventWrapper(event)); };
-    if (canvas.addEventListener) {
-        canvas.addEventListener('DOMMouseScroll', function(event) { obj.onMouseWheel(new EventWrapper(event)); }, false);
-    }
-
-    // FIXME: Capturing!
-}
-
-View2D.prototype.onMouseDown = function(event) {
-    pos = [event.client.x - this.canvas.offsetLeft,
-           this.size[1] - 1 - (event.client.y - this.canvas.offsetTop)];
-
-    if (this.viewAction != null)
-        this.viewAction.abort(this);
-
-    if (event.shift)
-        this.viewAction = new ViewAction('p', this, pos);
-    else if (event.alt || event.meta)
-        this.viewAction = new ViewAction('z', this, pos);
-    event.stop();
-}
-
-View2D.prototype.onMouseMove = function(event) {
-    pos = [event.client.x - this.canvas.offsetLeft,
-           this.size[1] - 1 - (event.client.y - this.canvas.offsetTop)];
-
-    if (this.viewAction != null)
-        this.viewAction.update(this, pos);
-    event.stop();
-}
-
-View2D.prototype.onMouseUp = function(event) {
-    pos = [event.client.x - this.canvas.offsetLeft,
-           this.size[1] - 1 - (event.client.y - this.canvas.offsetTop)];
-
-    if (this.viewAction != null)
-        this.viewAction.complete(this, pos);
-    this.viewAction = null;
-    event.stop();
-}
-
-View2D.prototype.onMouseWheel = function(event) {
-    if (this.viewAction == null) {
-        var factor = event.wheel;
-        if (event.shift)
-            factor *= .1;
-        var zoom = 1.0 + .03 * factor;
-        this.viewData.location = vec2_mulN(this.viewData.location, zoom);
-        this.viewData.scale = vec2_mulN(this.viewData.scale, zoom);
-
-        // Arbitrary limit min and max scales for now, ideally would be derived
-        // based on the view contents.
-        this.viewData.scale = vec2_clampN(this.viewData.scale, 10e-6, 10e6);
-
-        this.refresh();
-    }
-    event.stop();
-}
-
-View2D.prototype.setViewData = function(vd) {
-    // FIXME: Check equality and avoid refresh.
-    this.viewData = vd;
-    this.refresh();
-}
-
-View2D.prototype.refresh = function() {
-    // FIXME: Event loop?
-    this.draw();
-}
-
-// Coordinate conversion.
-
-View2D.prototype.getAspectScale = function() {
-    if (this.aspect > 1) {
-        return [1.0 / this.aspect, 1.0];
-    } else {
-        return [1.0, this.aspect];
-    }
-}
-
-View2D.prototype.getPixelSize = function() {
-    return vec2_sub(this.convertClientToWorld([1,1]),
-                    this.convertClientToWorld([0,0]));
-}
-
-View2D.prototype.convertClientToNDC = function(pt, vd) {
-    if (vd == null)
-        vd = this.viewData
-    return [pt[0] / this.size[0] * 2 - 1,
-            pt[1] / this.size[1] * 2 - 1];
-}
-
-View2D.prototype.convertClientToWorld = function(pt, vd) {
-    if (vd == null)
-        vd = this.viewData
-    pt = this.convertClientToNDC(pt, vd)
-    pt = vec2_sub(pt, vd.location);
-    pt = vec2_div(pt, vec2_mul(vd.scale, this.getAspectScale()));
-    return pt;
-}
-
-View2D.prototype.convertWorldToPreview = function(pt, pos, size) {
-    var asp_scale = this.getAspectScale();
-    pt = vec2_mul(pt, asp_scale);
-    pt = vec2_addN(pt, 1);
-    pt = vec2_mulN(pt, .5);
-    pt = vec2_mul(pt, size);
-    pt = vec2_add(pt, pos);
-    return pt;
-}
-
-View2D.prototype.setViewMatrix = function(ctx) {
-    ctx.scale(this.size[0], this.size[1]);
-    ctx.scale(.5, .5);
-    ctx.translate(1, 1);
-    ctx.translate(this.viewData.location[0], this.viewData.location[1]);
-    var scale = vec2_mul(this.viewData.scale, this.getAspectScale());
-    ctx.scale(scale[0], scale[1]);
-}
-
-View2D.prototype.setPreviewMatrix = function(ctx, pos, size) {
-    ctx.translate(pos[0], pos[1]);
-    ctx.scale(size[0], size[1]);
-    ctx.scale(.5, .5);
-    ctx.translate(1, 1);
-    var scale = this.getAspectScale();
-    ctx.scale(scale[0], scale[1]);
-}
-
-View2D.prototype.setWindowMatrix = function(ctx) {
-    ctx.translate(.5, .5);
-    ctx.translate(0, this.size[1]);
-    ctx.scale(1, -1);
-}
-
-View2D.prototype.draw = function() {
-    var canvas = document.getElementById(this.canvasname);
-    var ctx = canvas.getContext("2d");
-
-    this.registerEvents(canvas);
-
-    if (canvas.width != this.size[0] || canvas.height != this.size[1]) {
-        this.size = [canvas.width, canvas.height];
-        this.aspect = canvas.width / canvas.height;
-        this.previewPosition[0] = this.size[0] - this.previewSize[0] - 5;
-        this.on_size_change();
-    }
-
-    this.on_draw_start();
-
-    ctx.save();
-
-    // Clear and draw the view content.
-    ctx.save();
-    this.setWindowMatrix(ctx);
-
-    ctx.clearRect(0, 0, this.size[0], this.size[1]);
-    ctx.fillStyle = col3_to_rgb(this.clearColor);
-    ctx.fillRect(0, 0, this.size[0], this.size[1]);
-
-    this.setViewMatrix(ctx);
-    this.on_draw(canvas, ctx);
-    ctx.restore();
-
-    if (this.useWidgets)
-        this.drawPreview(canvas, ctx)
-
-    ctx.restore();
-}
-
-View2D.prototype.drawPreview = function(canvas, ctx) {
-    // Setup the preview context.
-    this.setWindowMatrix(ctx);
-
-    // Draw the preview area outline.
-    ctx.fillStyle = "rgba(128,128,128,.5)";
-    ctx.fillRect(this.previewPosition[0]-1, this.previewPosition[1]-1,
-                 this.previewSize[0]+2, this.previewSize[1]+2);
-    ctx.lineWidth = 1;
-    ctx.strokeStyle = "rgb(0,0,0)";
-    ctx.strokeRect(this.previewPosition[0]-1, this.previewPosition[1]-1,
-                   this.previewSize[0]+2, this.previewSize[1]+2);
-
-    // Compute the aspect corrected preview area.
-    var pv_size = [this.previewSize[0], this.previewSize[1]];
-    if (this.aspect > 1) {
-        pv_size[1] /= this.aspect;
-    } else {
-        pv_size[0] *= this.aspect;
-    }
-    var pv_pos = vec2_add(this.previewPosition,
-        vec2_mulN(vec2_sub(this.previewSize, pv_size), .5));
-
-    // Draw the preview, making sure to clip to the proper area.
-    ctx.save();
-    ctx.beginPath();
-    ctx.rect(pv_pos[0], pv_pos[1], pv_size[0], pv_size[1]);
-    ctx.clip();
-    ctx.closePath();
-
-    this.setPreviewMatrix(ctx, pv_pos, pv_size);
-    this.on_draw_preview(canvas, ctx);
-    ctx.restore();
-
-    // Draw the current view overlay.
-    //
-    // FIXME: Find a replacement for stippling.
-    ll = this.convertClientToWorld([0, 0])
-    ur = this.convertClientToWorld(this.size);
-
-    // Convert to pixel coordinates instead of drawing in content
-    // perspective.
-    ll = vec2_floor(this.convertWorldToPreview(ll, pv_pos, pv_size))
-    ur = vec2_ceil(this.convertWorldToPreview(ur, pv_pos, pv_size))
-    ll = vec2_clamp(ll, this.previewPosition,
-                    vec2_add(this.previewPosition, this.previewSize))
-    ur = vec2_clamp(ur, this.previewPosition,
-                    vec2_add(this.previewPosition, this.previewSize))
-
-    ctx.strokeStyle = "rgba(128,128,128,255)";
-    ctx.lineWidth = 1;
-    ctx.strokeRect(ll[0], ll[1], ur[0] - ll[0], ur[1] - ll[1]);
-}
-
-View2D.prototype.on_size_change = function() {}
-View2D.prototype.on_draw_start = function() {}
-View2D.prototype.on_draw = function(canvas, ctx) {}
-View2D.prototype.on_draw_preview = function(canvas, ctx) {}
-
-/* View2DTest Class */
-
-function View2DTest(canvasname) {
-    View2D.call(this, canvasname);
-}
-View2DTest.prototype = new View2D();
-View2DTest.prototype.constructor = View2DTest;
-
-View2DTest.prototype.on_draw = function(canvas, ctx) {
-    ctx.fillStyle = "rgb(255,255,255)";
-    ctx.fillRect(-1000, -1000, 2000, 20000);
-
-    ctx.lineWidth = .01;
-    ctx.strokeTyle = "rgb(0,200,0)";
-    ctx.strokeRect(-1, -1, 2, 2);
-
-    ctx.fillStyle = "rgb(200,0,0)";
-    ctx.fillRect(-.8, -.8, 1, 1);
-
-    ctx.fillStyle = "rgb(0,0,200)";
-    ctx.beginPath();
-    ctx.arc(0, 0, .5, 0, 2 * Math.PI, false);
-    ctx.fill();
-    ctx.closePath();
-}
-
-View2DTest.prototype.on_draw_preview = function(canvas, ctx) {
-    ctx.fillStyle = "rgba(255,255,255,.4)";
-    ctx.fillRect(-1000, -1000, 2000, 20000);
-
-    ctx.lineWidth = .01;
-    ctx.strokeTyle = "rgba(0,200,0,.4)";
-    ctx.strokeRect(-1, -1, 2, 2);
-
-    ctx.fillStyle = "rgba(200,0,0,.4)";
-    ctx.fillRect(-.8, -.8, 1, 1);
-
-    ctx.fillStyle = "rgba(0,0,200,.4)";
-    ctx.beginPath();
-    ctx.arc(0, 0, .5, 0, 2 * Math.PI, false);
-    ctx.fill();
-    ctx.closePath();
-}
-
-/* Graph2D_GraphInfo Class */
-
-function Graph2D_GraphInfo() {
-    this.xAxisH = 0;
-    this.yAxisW = 0;
-    this.ll = [0, 0];
-    this.ur = [1, 1];
-}
-
-Graph2D_GraphInfo.prototype.toNDC = function(pt) {
-    return [2 * (pt[0] - this.ll[0]) / (this.ur[0] - this.ll[0]) - 1,
-            2 * (pt[1] - this.ll[1]) / (this.ur[1] - this.ll[1]) - 1];
-}
-
-Graph2D_GraphInfo.prototype.fromNDC = function(pt) {
-    return [this.ll[0] + (this.ur[0] - this.ll[0]) * (pt[0] + 1) * .5,
-            this.ll[1] + (this.ur[1] - this.ll[1]) * (pt[1] + 1) * .5];
-}
-
-/* Graph2D_PlotStyle Class */
-
-function Graph2D_PlotStyle() {
-}
-
-Graph2D_PlotStyle.prototype.plot = function(graph, ctx, data) {}
-
-/* Graph2D_LinePlotStyle Class */
-
-function Graph2D_LinePlotStyle(width, color) {
-    Graph2D_PlotStyle.call(this);
-
-    if (!width)
-        width = 1;
-    if (!color)
-        color = [0,0,0];
-
-    this.width = width;
-    this.color = color;
-}
-Graph2D_LinePlotStyle.prototype = new Graph2D_PlotStyle();
-Graph2D_LinePlotStyle.prototype.constructor = Graph2D_LinePlotStyle;
-
-Graph2D_LinePlotStyle.prototype.plot = function(graph, ctx, data) {
-    if (data.length === 0)
-        return;
-
-    ctx.beginPath();
-    var co = graph.graphInfo.toNDC(data[0]);
-    ctx.moveTo(co[0], co[1]);
-    for (var i = 1, e = data.length; i != e; ++i) {
-        var co = graph.graphInfo.toNDC(data[i]);
-        ctx.lineTo(co[0], co[1]);
-    }
-    ctx.lineWidth = this.width * (graph.getPixelSize()[0] + graph.getPixelSize()[1]) * .5;
-    ctx.strokeStyle = col3_to_rgb(this.color);
-    ctx.stroke();
-}
-
-/* Graph2D_PointPlotStyle Class */
-
-function Graph2D_PointPlotStyle(width, color) {
-    Graph2D_PlotStyle.call(this);
-
-    if (!width)
-        width = 1;
-    if (!color)
-        color = [0,0,0];
-
-    this.width = width;
-    this.color = color;
-}
-Graph2D_PointPlotStyle.prototype = new Graph2D_PlotStyle();
-Graph2D_PointPlotStyle.prototype.constructor = Graph2D_PointPlotStyle;
-
-Graph2D_PointPlotStyle.prototype.plot = function(graph, ctx, data) {
-    if (data.length === 0)
-        return;
-
-    ctx.beginPath();
-    var radius = this.width * (graph.getPixelSize()[0] + graph.getPixelSize()[1]) * .5;
-    for (var i = 0, e = data.length; i != e; ++i) {
-        var co = graph.graphInfo.toNDC(data[i]);
-        ctx.moveTo(co[0], co[1]);
-        ctx.arc(co[0], co[1], radius, 0, Math.PI * 2, /*anticlockwise=*/false);
-    }
-    ctx.fillStyle = col3_to_rgb(this.color);
-    ctx.fill();
-}
-
-/* Graph2D_ErrorBarPlotStyle Class */
-
-function Graph2D_ErrorBarPlotStyle(width, color) {
-    Graph2D_PlotStyle.call(this);
-
-    if (!width)
-        width = 1;
-    if (!color)
-        color = [0,0,0];
-
-    this.width = width;
-    this.color = color;
-}
-Graph2D_ErrorBarPlotStyle.prototype = new Graph2D_PlotStyle();
-Graph2D_ErrorBarPlotStyle.prototype.constructor = Graph2D_ErrorBarPlotStyle;
-
-Graph2D_ErrorBarPlotStyle.prototype.plot = function(graph, ctx, data) {
-    if (data.length === 0)
-        return;
-
-    ctx.beginPath();
-    for (var i = 0, e = data.length; i != e; ++i) {
-        var co_min = graph.graphInfo.toNDC([data[i][0], data[i][1]]);
-        var co_max = graph.graphInfo.toNDC([data[i][0], data[i][2]]);
-        ctx.moveTo(co_min[0], co_min[1]);
-        ctx.lineTo(co_max[0], co_max[1]);
-    }
-    ctx.lineWidth = this.width * (graph.getPixelSize()[0] + graph.getPixelSize()[1]) * .5;
-    ctx.strokeStyle = col3_to_rgb(this.color);
-    ctx.stroke();
-}
-
-/* Graph2D_Axis Class */
-
-function Graph2D_Axis(dir, format) {
-    if (!format)
-        format = this.formats.normal;
-
-    this.dir = dir;
-    this.format = format;
-}
-
-// Static Methods
-Graph2D_Axis.prototype.formats = {
-    normal: function(value, iDigits, fDigits) {
-        // FIXME: iDigits?
-        return value.toFixed(fDigits);
-    },
-    day: function(value, iDigits, fDigits) {
-        var date = new Date(value * 1000.);
-        var res = date.getUTCFullYear();
-        res += "-" + (date.getUTCMonth() + 1);
-        res += "-" + (date.getUTCDate() + 1);
-        return res;
-    },
-};
-
-Graph2D_Axis.prototype.draw = function(graph, ctx, ll, ur, mainUR) {
-    var dir = this.dir, ndir = 1 - this.dir;
-    var vMin = ll[dir];
-    var vMax = ur[dir];
-    var near = ll[ndir];
-    var far = ur[ndir];
-    var border = mainUR[ndir];
-
-    var line_base = (graph.getPixelSize()[0] + graph.getPixelSize()[1]) * .5;
-    ctx.lineWidth = 2 * line_base;
-    ctx.strokeStyle = "rgb(0,0,0)";
-
-    ctx.beginPath();
-    var co = vec2_cswap([vMin, far], dir);
-    co = graph.graphInfo.toNDC(co);
-    ctx.moveTo(co[0], co[1]);
-    var co = vec2_cswap([vMax, far], dir);
-    co = graph.graphInfo.toNDC(co);
-    ctx.lineTo(co[0], co[1]);
-    ctx.stroke();
-
-    var delta = vMax - vMin;
-    var steps = Math.floor(Math.log(delta) / Math.log(10));
-    if (delta / Math.pow(10, steps) >= 5.0) {
-        var size = .5;
-    } else if (delta / Math.pow(10, steps) >= 2.5) {
-        var size = .25;
-    } else {
-        var size = .1;
-    }
-    size *= Math.pow(10, steps);
-
-    if (steps <= 0) {
-        var iDigits = 0, fDigits = 1 + Math.abs(steps);
-    } else {
-        var iDigits = steps, fDigits = 0;
-    }
-
-    var start = Math.ceil(vMin / size);
-    var end = Math.ceil(vMax / size);
-
-    // FIXME: Draw in window coordinates to make crisper.
-
-    // FIXME: Draw grid in layers to avoid ugly overlaps.
-
-    for (var i = start; i != end; ++i) {
-        if (i == 0) {
-            ctx.lineWidth = 3 * line_base;
-            var p = .5;
-        } else if (!(i & 1)) {
-            ctx.lineWidth = 2 * line_base;
-            var p = .5;
-        } else {
-            ctx.lineWidth = 1 * line_base;
-            var p = .75;
-        }
-
-        ctx.beginPath();
-        var co = vec2_cswap([i * size, lerp(near, far, p)], dir);
-        co = graph.graphInfo.toNDC(co);
-        ctx.moveTo(co[0], co[1]);
-        var co = vec2_cswap([i * size, far], dir);
-        co = graph.graphInfo.toNDC(co);
-        ctx.lineTo(co[0], co[1]);
-        ctx.stroke();
-    }
-
-    for (var alt = 0; alt < 2; ++alt) {
-        if (alt)
-            ctx.strokeStyle = "rgba(190,190,190,.5)";
-        else
-            ctx.strokeStyle = "rgba(128,128,128,.5)";
-        ctx.lineWidth = 1 * line_base;
-        ctx.beginPath();
-        for (var i = start; i != end; ++i) {
-            if (i == 0)
-                continue;
-            if ((i & 1) == alt) {
-                var co = vec2_cswap([i * size, far], dir);
-                co = graph.graphInfo.toNDC(co);
-                ctx.moveTo(co[0], co[1]);
-                var co = vec2_cswap([i * size, border], dir);
-                co = graph.graphInfo.toNDC(co);
-                ctx.lineTo(co[0], co[1]);
-            }
-        }
-        ctx.stroke();
-
-        if (start <= 0 && 0 < end) {
-            ctx.beginPath();
-            var co = vec2_cswap([0, far], dir);
-            co = graph.graphInfo.toNDC(co);
-            ctx.moveTo(co[0], co[1]);
-            var co = vec2_cswap([0, border], dir);
-            co = graph.graphInfo.toNDC(co);
-            ctx.lineTo(co[0], co[1]);
-            ctx.strokeStyle = "rgba(64,64,64,.5)";
-            ctx.lineWidth = 3 * line_base;
-            ctx.stroke();
-        }
-    }
-
-    // FIXME: Draw this in screen coordinates, and stop being stupid. Also,
-    // figure out font height?
-    if (this.dir == 1) {
-        var offset = [-.5, -.25];
-    } else {
-        var offset = [-.5, 1.1];
-    }
-    ctx.fillStyle = "rgb(0,0,0)";
-    var pxl = graph.getPixelSize();
-    for (var i = start; i != end; ++i) {
-        if ((i & 1) == 0) {
-            var label = this.format(i * size, iDigits, fDigits);
-            ctx.save();
-            var co = vec2_cswap([i*size, lerp(near, far, .5)], dir);
-            co = graph.graphInfo.toNDC(co);
-            ctx.translate(co[0], co[1]);
-            ctx.scale(pxl[0], -pxl[1]);
-            // FIXME: Abstract.
-            var bb_w = label.length * 5;
-            if (ctx.measureText != null)
-                bb_w = ctx.measureText(label).width;
-            var bb_h = 12;
-            // FIXME: Abstract? Or ignore.
-            if (ctx.fillText != null) {
-                ctx.fillText(label, bb_w*offset[0], bb_h*offset[1]);
-            } else if (ctx.mozDrawText != null) {
-                ctx.translate(bb_w*offset[0], bb_h*offset[1]);
-                ctx.mozDrawText(label);
-            }
-            ctx.restore();
-        }
-    }
-}
-
-
-/* Graph2D Class */
-
-function Graph2D(canvasname) {
-    View2D.call(this, canvasname)
-
-    this.useWidgets = false;
-    this.plots = [];
-    this.graphInfo = null;
-    this.xAxis = new Graph2D_Axis(0);
-    this.yAxis = new Graph2D_Axis(1);
-    this.debugText = null;
-
-    this.clearColor = [.8, .8, .8];
-}
-Graph2D.prototype = new View2D();
-Graph2D.prototype.constructor = Graph2D;
-
-//
-
-Graph2D.prototype.graphChanged = function() {
-    this.graphInfo = null;
-    // FIXME: Need event loop.
-    this.refresh();
-}
-
-Graph2D.prototype.layoutGraph = function() {
-    var gi = new Graph2D_GraphInfo();
-
-    gi.xAxisH = 40;
-    gi.yAxisW = 60;
-
-    var min = null, max = null;
-    for (var i = 0, e = this.plots.length; i != e; ++i) {
-        var data = this.plots[i][0];
-        for (var i2 = 0, e2 = data.length; i2 != e2; ++i2) {
-            if (min == null)
-                min = data[i2];
-            else
-                min = vec2_min(min, data[i2]);
-
-            if (max == null)
-                max = data[i2];
-            else
-                max = vec2_max(max, data[i2]);
-        }
-    }
-
-    if (min === null)
-        min = [0, 0];
-    if (max === null)
-        max = [0, 0];
-    if (Math.abs(max[0] - min[0]) < .001)
-        max[0] += 1;
-    if (Math.abs(max[1] - min[1]) < .001)
-        max[1] += 1;
-
-    // Set graph transform to the [min,max] rect to the content area with
-    // some padding.
-    //
-    // FIXME: Add real mat3 and implement this properly.
-    var pad = 5;
-    var vd = new ViewData();
-    var ll_target = this.convertClientToWorld([gi.yAxisW + pad, gi.xAxisH + pad], vd);
-    var ur_target = this.convertClientToWorld(vec2_subN(this.size, pad), vd);
-    var target_size = vec2_sub(ur_target, ll_target);
-    var target_center = vec2_add(ll_target, vec2_mulN(target_size, .5));
-
-    var center = vec2_mulN(vec2_add(min, max), .5);
-    var size = vec2_sub(max, min);
-
-    var scale = vec2_mulN(target_size, .5);
-    size = vec2_div(size, scale);
-    center = vec2_sub(center, vec2_mulN(vec2_mul(target_center, size), .5));
-
-    gi.ll = vec2_sub(center, vec2_mulN(size, .5));
-    gi.ur = vec2_add(center, vec2_mulN(size, .5));
-
-    return gi;
-}
-
-//
-
-Graph2D.prototype.convertClientToGraph = function(pt) {
-    return this.graphInfo.fromNDC(this.convertClientToWorld(pt));
-}
-
-//
-
-Graph2D.prototype.on_size_change = function() {
-    this.graphInfo = null;
-}
-
-Graph2D.prototype.on_draw_start = function() {
-    if (!this.graphInfo)
-        this.graphInfo = this.layoutGraph();
-}
-
-Graph2D.prototype.on_draw = function(canvas, ctx) {
-    var gi = this.graphInfo;
-    var w = this.size[0], h = this.size[1];
-
-    this.xAxis.draw(this, ctx,
-                    this.convertClientToGraph([gi.yAxisW, 0]),
-                    this.convertClientToGraph([w, gi.xAxisH]),
-                    this.convertClientToGraph([w, h]))
-    this.yAxis.draw(this, ctx,
-                    this.convertClientToGraph([0, gi.xAxisH]),
-                    this.convertClientToGraph([gi.yAxisW, h]),
-                    this.convertClientToGraph([w, h]))
-
-    if (this.debugText != null) {
-        ctx.save();
-        ctx.setTransform(1, 0, 0, 1, 0, 0);
-        ctx.fillText(this.debugText, this.size[0]/2 + 10, this.size[1]/2 + 10);
-        ctx.restore();
-    }
-
-    // Draw the contents.
-    ctx.save();
-    ctx.beginPath();
-    var content_ll = this.convertClientToWorld([gi.yAxisW, gi.xAxisH]);
-    var content_ur = this.convertClientToWorld(this.size);
-    ctx.rect(content_ll[0], content_ll[1],
-             content_ur[0]-content_ll[0], content_ur[1]-content_ll[1]);
-    ctx.clip();
-
-    for (var i = 0, e = this.plots.length; i != e; ++i) {
-        var data = this.plots[i][0];
-        var style = this.plots[i][1];
-        style.plot(this, ctx, data);
-    }
-    ctx.restore();
-}
-
-// Client API.
-
-Graph2D.prototype.clearPlots = function() {
-    this.plots = [];
-    this.graphChanged();
-}
-
-Graph2D.prototype.addPlot = function(data, style) {
-    if (!style)
-        style = new Graph2D_LinePlotStyle(1);
-    this.plots.push( [data, style] );
-    this.graphChanged();
-}
-

Removed: zorg/trunk/lnt/lnt/server/ui/static/View2DTest.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/View2DTest.html?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/View2DTest.html (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/View2DTest.html (removed)
@@ -1,61 +0,0 @@
-<html>
-  <head>
-    <title>View2D Test</title>
-    <script src="View2D.js"></script>
-    <script type="text/javascript">
-var viewA, viewB, graphA;
-
-function init() {
-    viewA = new View2DTest("view2d");
-    viewA.viewData.location = [-.2, -.15];
-    viewA.viewData.scale = [2, 2];
-    viewA.draw();
-
-    viewB = new View2DTest("view2d_2");
-    viewB.viewData.location = [-.2, -.15];
-    viewB.viewData.scale = [.5, .5];
-    viewB.draw();
-
-    var pts_0 = [ [0, 0], [1, 1.3], [2, 2.2], [3, 1.3], [4, 4],
-                  [5,3], [6, 4], [7, 4.4]];
-    pts_0 = pts_0.map(function(item, index, array) {
-                        return vec2_mulN(item, .1);
-                      });
-    var pts_1 = pts_0.map(function(item, index, array) {
-                        return [item[0], .2 + item[1] * (1 - item[0] / 2)];
-                      });
-    var pts_2 = pts_0.map(function(item, index, array) {
-                        return [item[0], 1 - item[1]];
-                      });
-    var pts_3 = pts_0.map(function(item, index, array) {
-                        return [item[0], item[1] - .1, item[1] + .1];
-                      });
-    graphA = new Graph2D("graph2d");
-if (1) {
-    graphA.addPlot(pts_0, new Graph2D_LinePlotStyle(2));
-    graphA.addPlot(pts_1);
-    graphA.addPlot(pts_2, new Graph2D_LinePlotStyle(null, [1,0,0]));
-    graphA.addPlot(pts_0, new Graph2D_PointPlotStyle(5, [.8, .5, 0]));
-    graphA.addPlot(pts_3, new Graph2D_ErrorBarPlotStyle(1, [0, 1, 0]));
-} else {
-    graphA.addPlot([[1248617856.000000,1.398600],[1248960469.000000,1.241700],[1249396047.000000,1.214300],[1249488792.000000,1.211600],[1249564554.000000,1.239500],[1249732514.000000,1.239200],[1249819044.000000,1.236300],[1249910746.000000,1.234200],[1249996733.000000,1.236000],[1250083258.000000,1.252600],[1250255237.000000,1.260400],[1250341501.000000,1.253500],[1250427966.000000,1.262600],[1250514329.000000,1.261600],[1250600211.000000,1.249100],[1250686801.000000,1.250700],[1250773065.000000,1.255400],[1250859519.000000,1.246300],[1250946756.000000,1.245900],[1251032239.000000,1.238200],[1251118837.000000,1.238000],[1251205034.000000,1.241900],[1251292148.000000,1.236500],[1251379354.000000,1.230200],[1251466226.000000,1.228700],[1251552218.000000,1.233600],[1251638633.000000,1.222400],[1251725230.000000,1.222100],[1251811608.000000,1.239100],[1251898565.000000,1.230200],[1251984695.000000,1.241700],[1252070572.000000,1.205800],[1252157268.000000,1.211100],[1252243914.
 000000,1.210300],[1252330714.000000,1.206000],[1252416809.000000,1.210800],[1252590190.000000,1.216800],[1252675459.000000,1.214400],[1252762486.000000,1.220700],[1252886652.000000,1.221700],[1252935938.000000,1.215200],[1253021864.000000,1.213800],[1253108596.000000,1.213800],[1253194864.000000,1.231900],[1253281344.000000,1.232000],[1253366664.000000,1.238400],[1253453169.000000,1.232500],[1253539839.000000,1.230100],[1253627357.000000,1.232600],[1253713381.000000,1.235700],[1253799754.000000,1.232400],[1253886021.000000,1.241900],[1253972269.000000,1.229700],[1254058753.000000,1.229100],[1254145361.000000,1.284000],[1254231276.000000,1.295200],[1254317581.000000,1.299800],[1254405166.000000,1.340600],[1254490117.000000,1.305300],[1254576631.000000,1.304100],[1254662979.000000,1.303700],[1254749498.000000,1.306800],[1254835808.000000,1.306200],[1254922190.000000,1.270100],[1255008713.000000,1.270900],[1255094924.000000,1.267300],[1255181629.000000,1.265100],[1255267916.000
 000,1.283300],[1255354566.000000,1.285500],[1255440921.000000,1.287100],[1255526237.000000,1.269800],[1255613420.000000,1.318400],[1255700706.000000,1.301600],[1255786760.000000,1.305000],[1255873293.000000,1.305000],[1255959875.000000,1.438800],[1256046280.000000,1.437400],[1256132389.000000,1.439100],[1256218592.000000,1.461200],[1256304662.000000,1.464100],[1256391812.000000,1.462300],[1256478151.000000,1.469600],[1256564495.000000,1.472300],[1256823554.000000,1.474000],[1256909311.000000,1.477200],[1256996077.000000,1.459000],[1257082516.000000,1.426100],[1257258543.000000,1.433700],[1257344527.000000,1.452600],[1257431075.000000,1.440700],[1257516720.000000,1.443300],[1257602894.000000,1.503300],[1257863543.000000,1.550200],[1257948938.000000,1.532500],[1258035827.000000,1.534900],[1258122304.000000,1.535600],[1258207973.000000,1.546700],[1258294248.000000,1.534700],[1258382337.000000,1.544000],[1258551986.000000,1.509100],[1258640333.000000,1.554300],[1258728912.000000
 ,1.541100],[1258815149.000000,1.602700],[1258901720.000000,1.685900]]);
-graphA.xAxis.format = graphA.xAxis.formats.day;
-}
-    graphA.draw();
-}
-    </script>
-  </head>
-  <body onload="init()" bgcolor="#AAAAAA">
-    <canvas id="graph2d" width="600" height="400"></canvas>
-    <br>
-    <table>
-      <tr>
-        <td><canvas id="view2d" width="300" height="200"></canvas></td>
-        <td><canvas id="view2d_2" width="200" height="350"></canvas></td>
-      </tr>
-    </table>
-    Shift-Left Mouse: Pan<br>
-    Alt/Meta-Left Mouse: Zoom<br>
-    Wheel: Zoom (<i>Shift Slows</i>)<br>
-  </body>
-</html>

Removed: zorg/trunk/lnt/lnt/server/ui/static/favicon.ico
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/favicon.ico?rev=156009&view=auto
==============================================================================
Binary files zorg/trunk/lnt/lnt/server/ui/static/favicon.ico (original) and zorg/trunk/lnt/lnt/server/ui/static/favicon.ico (removed) differ

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/API.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/API.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/API.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/API.txt (removed)
@@ -1,1201 +0,0 @@
-Flot Reference
---------------
-
-Consider a call to the plot function:
-
-   var plot = $.plot(placeholder, data, options)
-
-The placeholder is a jQuery object or DOM element or jQuery expression
-that the plot will be put into. This placeholder needs to have its
-width and height set as explained in the README (go read that now if
-you haven't, it's short). The plot will modify some properties of the
-placeholder so it's recommended you simply pass in a div that you
-don't use for anything else. Make sure you check any fancy styling
-you apply to the div, e.g. background images have been reported to be a
-problem on IE 7.
-
-The format of the data is documented below, as is the available
-options. The plot object returned from the call has some methods you
-can call. These are documented separately below.
-
-Note that in general Flot gives no guarantees if you change any of the
-objects you pass in to the plot function or get out of it since
-they're not necessarily deep-copied.
-
-
-Data Format
------------
-
-The data is an array of data series:
-
-  [ series1, series2, ... ]
-
-A series can either be raw data or an object with properties. The raw
-data format is an array of points:
-
-  [ [x1, y1], [x2, y2], ... ]
-
-E.g.
-
-  [ [1, 3], [2, 14.01], [3.5, 3.14] ]
-
-Note that to simplify the internal logic in Flot both the x and y
-values must be numbers (even if specifying time series, see below for
-how to do this). This is a common problem because you might retrieve
-data from the database and serialize them directly to JSON without
-noticing the wrong type. If you're getting mysterious errors, double
-check that you're inputting numbers and not strings.
-
-If a null is specified as a point or if one of the coordinates is null
-or couldn't be converted to a number, the point is ignored when
-drawing. As a special case, a null value for lines is interpreted as a
-line segment end, i.e. the points before and after the null value are
-not connected.
-
-Lines and points take two coordinates. For filled lines and bars, you
-can specify a third coordinate which is the bottom of the filled
-area/bar (defaults to 0).
-
-The format of a single series object is as follows:
-
-  {
-    color: color or number
-    data: rawdata
-    label: string
-    lines: specific lines options
-    bars: specific bars options
-    points: specific points options
-    xaxis: number
-    yaxis: number
-    clickable: boolean
-    hoverable: boolean
-    shadowSize: number
-  }
-
-You don't have to specify any of them except the data, the rest are
-options that will get default values. Typically you'd only specify
-label and data, like this:
-
-  {
-    label: "y = 3",
-    data: [[0, 3], [10, 3]]
-  }
-
-The label is used for the legend, if you don't specify one, the series
-will not show up in the legend.
-
-If you don't specify color, the series will get a color from the
-auto-generated colors. The color is either a CSS color specification
-(like "rgb(255, 100, 123)") or an integer that specifies which of
-auto-generated colors to select, e.g. 0 will get color no. 0, etc.
-
-The latter is mostly useful if you let the user add and remove series,
-in which case you can hard-code the color index to prevent the colors
-from jumping around between the series.
-
-The "xaxis" and "yaxis" options specify which axis to use. The axes
-are numbered from 1 (default), so { yaxis: 2} means that the series
-should be plotted against the second y axis.
-
-"clickable" and "hoverable" can be set to false to disable
-interactivity for specific series if interactivity is turned on in
-the plot, see below.
-
-The rest of the options are all documented below as they are the same
-as the default options passed in via the options parameter in the plot
-commmand. When you specify them for a specific data series, they will
-override the default options for the plot for that data series.
-
-Here's a complete example of a simple data specification:
-
-  [ { label: "Foo", data: [ [10, 1], [17, -14], [30, 5] ] },
-    { label: "Bar", data: [ [11, 13], [19, 11], [30, -7] ] } ]
-
-
-Plot Options
-------------
-
-All options are completely optional. They are documented individually
-below, to change them you just specify them in an object, e.g.
-
-  var options = {
-    series: {
-      lines: { show: true },
-      points: { show: true }
-    }
-  };
-
-  $.plot(placeholder, data, options);
-
-
-Customizing the legend
-======================
-
-  legend: {
-    show: boolean
-    labelFormatter: null or (fn: string, series object -> string)
-    labelBoxBorderColor: color
-    noColumns: number
-    position: "ne" or "nw" or "se" or "sw"
-    margin: number of pixels or [x margin, y margin]
-    backgroundColor: null or color
-    backgroundOpacity: number between 0 and 1
-    container: null or jQuery object/DOM element/jQuery expression
-  }
-
-The legend is generated as a table with the data series labels and
-small label boxes with the color of the series. If you want to format
-the labels in some way, e.g. make them to links, you can pass in a
-function for "labelFormatter". Here's an example that makes them
-clickable:
-
-  labelFormatter: function(label, series) {
-    // series is the series object for the label
-    return '<a href="#' + label + '">' + label + '</a>';
-  }
-
-"noColumns" is the number of columns to divide the legend table into.
-"position" specifies the overall placement of the legend within the
-plot (top-right, top-left, etc.) and margin the distance to the plot
-edge (this can be either a number or an array of two numbers like [x,
-y]). "backgroundColor" and "backgroundOpacity" specifies the
-background. The default is a partly transparent auto-detected
-background.
-
-If you want the legend to appear somewhere else in the DOM, you can
-specify "container" as a jQuery object/expression to put the legend
-table into. The "position" and "margin" etc. options will then be
-ignored. Note that Flot will overwrite the contents of the container.
-
-
-Customizing the axes
-====================
-
-  xaxis, yaxis: {
-    show: null or true/false
-    position: "bottom" or "top" or "left" or "right"
-    mode: null or "time"
-
-    color: null or color spec
-    tickColor: null or color spec
-    
-    min: null or number
-    max: null or number
-    autoscaleMargin: null or number
-    
-    transform: null or fn: number -> number
-    inverseTransform: null or fn: number -> number
-    
-    ticks: null or number or ticks array or (fn: range -> ticks array)
-    tickSize: number or array
-    minTickSize: number or array
-    tickFormatter: (fn: number, object -> string) or string
-    tickDecimals: null or number
-
-    labelWidth: null or number
-    labelHeight: null or number
-    reserveSpace: null or true
-    
-    tickLength: null or number
-
-    alignTicksWithAxis: null or number
-  }
-
-All axes have the same kind of options. The following describes how to
-configure one axis, see below for what to do if you've got more than
-one x axis or y axis.
-
-If you don't set the "show" option (i.e. it is null), visibility is
-auto-detected, i.e. the axis will show up if there's data associated
-with it. You can override this by setting the "show" option to true or
-false.
-
-The "position" option specifies where the axis is placed, bottom or
-top for x axes, left or right for y axes. The "mode" option determines
-how the data is interpreted, the default of null means as decimal
-numbers. Use "time" for time series data, see the time series data
-section.
-
-The "color" option determines the color of the labels and ticks for
-the axis (default is the grid color). For more fine-grained control
-you can also set the color of the ticks separately with "tickColor"
-(otherwise it's autogenerated as the base color with some
-transparency).
-
-The options "min"/"max" are the precise minimum/maximum value on the
-scale. If you don't specify either of them, a value will automatically
-be chosen based on the minimum/maximum data values. Note that Flot
-always examines all the data values you feed to it, even if a
-restriction on another axis may make some of them invisible (this
-makes interactive use more stable).
-
-The "autoscaleMargin" is a bit esoteric: it's the fraction of margin
-that the scaling algorithm will add to avoid that the outermost points
-ends up on the grid border. Note that this margin is only applied when
-a min or max value is not explicitly set. If a margin is specified,
-the plot will furthermore extend the axis end-point to the nearest
-whole tick. The default value is "null" for the x axes and 0.02 for y
-axes which seems appropriate for most cases.
-
-"transform" and "inverseTransform" are callbacks you can put in to
-change the way the data is drawn. You can design a function to
-compress or expand certain parts of the axis non-linearly, e.g.
-suppress weekends or compress far away points with a logarithm or some
-other means. When Flot draws the plot, each value is first put through
-the transform function. Here's an example, the x axis can be turned
-into a natural logarithm axis with the following code:
-
-  xaxis: {
-    transform: function (v) { return Math.log(v); },
-    inverseTransform: function (v) { return Math.exp(v); }
-  }
-
-Similarly, for reversing the y axis so the values appear in inverse
-order:
-  
-  yaxis: {
-    transform: function (v) { return -v; },
-    inverseTransform: function (v) { return -v; }
-  }
-
-Note that for finding extrema, Flot assumes that the transform
-function does not reorder values (it should be monotone).
-
-The inverseTransform is simply the inverse of the transform function
-(so v == inverseTransform(transform(v)) for all relevant v). It is
-required for converting from canvas coordinates to data coordinates,
-e.g. for a mouse interaction where a certain pixel is clicked. If you
-don't use any interactive features of Flot, you may not need it.
-
-
-The rest of the options deal with the ticks.
-
-If you don't specify any ticks, a tick generator algorithm will make
-some for you. The algorithm has two passes. It first estimates how
-many ticks would be reasonable and uses this number to compute a nice
-round tick interval size. Then it generates the ticks.
-
-You can specify how many ticks the algorithm aims for by setting
-"ticks" to a number. The algorithm always tries to generate reasonably
-round tick values so even if you ask for three ticks, you might get
-five if that fits better with the rounding. If you don't want any
-ticks at all, set "ticks" to 0 or an empty array.
-
-Another option is to skip the rounding part and directly set the tick
-interval size with "tickSize". If you set it to 2, you'll get ticks at
-2, 4, 6, etc. Alternatively, you can specify that you just don't want
-ticks at a size less than a specific tick size with "minTickSize".
-Note that for time series, the format is an array like [2, "month"],
-see the next section.
-
-If you want to completely override the tick algorithm, you can specify
-an array for "ticks", either like this:
-
-  ticks: [0, 1.2, 2.4]
-
-Or like this where the labels are also customized:
-
-  ticks: [[0, "zero"], [1.2, "one mark"], [2.4, "two marks"]]
-
-You can mix the two if you like.
-  
-For extra flexibility you can specify a function as the "ticks"
-parameter. The function will be called with an object with the axis
-min and max and should return a ticks array. Here's a simplistic tick
-generator that spits out intervals of pi, suitable for use on the x
-axis for trigonometric functions:
-
-  function piTickGenerator(axis) {
-    var res = [], i = Math.floor(axis.min / Math.PI);
-    do {
-      var v = i * Math.PI;
-      res.push([v, i + "\u03c0"]);
-      ++i;
-    } while (v < axis.max);
-    
-    return res;
-  }
-
-You can control how the ticks look like with "tickDecimals", the
-number of decimals to display (default is auto-detected).
-
-Alternatively, for ultimate control over how ticks are formatted you can
-provide a function to "tickFormatter". The function is passed two
-parameters, the tick value and an axis object with information, and
-should return a string. The default formatter looks like this:
-
-  function formatter(val, axis) {
-    return val.toFixed(axis.tickDecimals);
-  }
-
-The axis object has "min" and "max" with the range of the axis,
-"tickDecimals" with the number of decimals to round the value to and
-"tickSize" with the size of the interval between ticks as calculated
-by the automatic axis scaling algorithm (or specified by you). Here's
-an example of a custom formatter:
-
-  function suffixFormatter(val, axis) {
-    if (val > 1000000)
-      return (val / 1000000).toFixed(axis.tickDecimals) + " MB";
-    else if (val > 1000)
-      return (val / 1000).toFixed(axis.tickDecimals) + " kB";
-    else
-      return val.toFixed(axis.tickDecimals) + " B";
-  }
-
-"labelWidth" and "labelHeight" specifies a fixed size of the tick
-labels in pixels. They're useful in case you need to align several
-plots. "reserveSpace" means that even if an axis isn't shown, Flot
-should reserve space for it - it is useful in combination with
-labelWidth and labelHeight for aligning multi-axis charts.
-
-"tickLength" is the length of the tick lines in pixels. By default, the
-innermost axes will have ticks that extend all across the plot, while
-any extra axes use small ticks. A value of null means use the default,
-while a number means small ticks of that length - set it to 0 to hide
-the lines completely.
-
-If you set "alignTicksWithAxis" to the number of another axis, e.g.
-alignTicksWithAxis: 1, Flot will ensure that the autogenerated ticks
-of this axis are aligned with the ticks of the other axis. This may
-improve the looks, e.g. if you have one y axis to the left and one to
-the right, because the grid lines will then match the ticks in both
-ends. The trade-off is that the forced ticks won't necessarily be at
-natural places.
-
-
-Multiple axes
-=============
-
-If you need more than one x axis or y axis, you need to specify for
-each data series which axis they are to use, as described under the
-format of the data series, e.g. { data: [...], yaxis: 2 } specifies
-that a series should be plotted against the second y axis.
-
-To actually configure that axis, you can't use the xaxis/yaxis options
-directly - instead there are two arrays in the options:
-
-   xaxes: []
-   yaxes: []
-
-Here's an example of configuring a single x axis and two y axes (we
-can leave options of the first y axis empty as the defaults are fine):
-
-  {
-    xaxes: [ { position: "top" } ],
-    yaxes: [ { }, { position: "right", min: 20 } ]
-  }
-
-The arrays get their default values from the xaxis/yaxis settings, so
-say you want to have all y axes start at zero, you can simply specify
-yaxis: { min: 0 } instead of adding a min parameter to all the axes.
-
-Generally, the various interfaces in Flot dealing with data points
-either accept an xaxis/yaxis parameter to specify which axis number to
-use (starting from 1), or lets you specify the coordinate directly as
-x2/x3/... or x2axis/x3axis/... instead of "x" or "xaxis".
-
-  
-Time series data
-================
-
-Time series are a bit more difficult than scalar data because
-calendars don't follow a simple base 10 system. For many cases, Flot
-abstracts most of this away, but it can still be a bit difficult to
-get the data into Flot. So we'll first discuss the data format.
-
-The time series support in Flot is based on Javascript timestamps,
-i.e. everywhere a time value is expected or handed over, a Javascript
-timestamp number is used. This is a number, not a Date object. A
-Javascript timestamp is the number of milliseconds since January 1,
-1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's
-in milliseconds, so remember to multiply by 1000!
-
-You can see a timestamp like this
-
-  alert((new Date()).getTime())
-
-Normally you want the timestamps to be displayed according to a
-certain time zone, usually the time zone in which the data has been
-produced. However, Flot always displays timestamps according to UTC.
-It has to as the only alternative with core Javascript is to interpret
-the timestamps according to the time zone that the visitor is in,
-which means that the ticks will shift unpredictably with the time zone
-and daylight savings of each visitor.
-
-So given that there's no good support for custom time zones in
-Javascript, you'll have to take care of this server-side.
-
-The easiest way to think about it is to pretend that the data
-production time zone is UTC, even if it isn't. So if you have a
-datapoint at 2002-02-20 08:00, you can generate a timestamp for eight
-o'clock UTC even if it really happened eight o'clock UTC+0200.
-
-In PHP you can get an appropriate timestamp with
-'strtotime("2002-02-20 UTC") * 1000', in Python with
-'calendar.timegm(datetime_object.timetuple()) * 1000', in .NET with
-something like:
-
-  public static int GetJavascriptTimestamp(System.DateTime input)
-  {
-    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks);
-    System.DateTime time = input.Subtract(span);
-    return (long)(time.Ticks / 10000);
-  }
-
-Javascript also has some support for parsing date strings, so it is
-possible to generate the timestamps manually client-side.
-
-If you've already got the real UTC timestamp, it's too late to use the
-pretend trick described above. But you can fix up the timestamps by
-adding the time zone offset, e.g. for UTC+0200 you would add 2 hours
-to the UTC timestamp you got. Then it'll look right on the plot. Most
-programming environments have some means of getting the timezone
-offset for a specific date (note that you need to get the offset for
-each individual timestamp to account for daylight savings).
-
-Once you've gotten the timestamps into the data and specified "time"
-as the axis mode, Flot will automatically generate relevant ticks and
-format them. As always, you can tweak the ticks via the "ticks" option
-- just remember that the values should be timestamps (numbers), not
-Date objects.
-
-Tick generation and formatting can also be controlled separately
-through the following axis options:
-
-  minTickSize: array
-  timeformat: null or format string
-  monthNames: null or array of size 12 of strings
-  twelveHourClock: boolean
-
-Here "timeformat" is a format string to use. You might use it like
-this:
-
-  xaxis: {
-    mode: "time"
-    timeformat: "%y/%m/%d"
-  }
-  
-This will result in tick labels like "2000/12/24". The following
-specifiers are supported
-
-  %h: hours
-  %H: hours (left-padded with a zero)
-  %M: minutes (left-padded with a zero)
-  %S: seconds (left-padded with a zero)
-  %d: day of month (1-31), use %0d for zero-padding
-  %m: month (1-12), use %0m for zero-padding
-  %y: year (four digits)
-  %b: month name (customizable)
-  %p: am/pm, additionally switches %h/%H to 12 hour instead of 24
-  %P: AM/PM (uppercase version of %p)
-
-Inserting a zero like %0m or %0d means that the specifier will be
-left-padded with a zero if it's only single-digit. So %y-%0m-%0d
-results in unambigious ISO timestamps like 2007-05-10 (for May 10th).
-
-You can customize the month names with the "monthNames" option. For
-instance, for Danish you might specify:
-
-  monthNames: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
-
-If you set "twelveHourClock" to true, the autogenerated timestamps
-will use 12 hour AM/PM timestamps instead of 24 hour.
-  
-The format string and month names are used by a very simple built-in
-format function that takes a date object, a format string (and
-optionally an array of month names) and returns the formatted string.
-If needed, you can access it as $.plot.formatDate(date, formatstring,
-monthNames) or even replace it with another more advanced function
-from a date library if you're feeling adventurous.
-
-If everything else fails, you can control the formatting by specifying
-a custom tick formatter function as usual. Here's a simple example
-which will format December 24 as 24/12:
-
-  tickFormatter: function (val, axis) {
-    var d = new Date(val);
-    return d.getUTCDate() + "/" + (d.getUTCMonth() + 1);
-  }
-
-Note that for the time mode "tickSize" and "minTickSize" are a bit
-special in that they are arrays on the form "[value, unit]" where unit
-is one of "second", "minute", "hour", "day", "month" and "year". So
-you can specify
-
-  minTickSize: [1, "month"]
-
-to get a tick interval size of at least 1 month and correspondingly,
-if axis.tickSize is [2, "day"] in the tick formatter, the ticks have
-been produced with two days in-between.
-
-
-
-Customizing the data series
-===========================
-
-  series: {
-    lines, points, bars: {
-      show: boolean
-      lineWidth: number
-      fill: boolean or number
-      fillColor: null or color/gradient
-    }
-
-    points: {
-      radius: number
-      symbol: "circle" or function
-    }
-
-    bars: {
-      barWidth: number
-      align: "left" or "center"
-      horizontal: boolean
-    }
-
-    lines: {
-      steps: boolean
-    }
-
-    shadowSize: number
-  }
-  
-  colors: [ color1, color2, ... ]
-
-The options inside "series: {}" are copied to each of the series. So
-you can specify that all series should have bars by putting it in the
-global options, or override it for individual series by specifying
-bars in a particular the series object in the array of data.
-  
-The most important options are "lines", "points" and "bars" that
-specify whether and how lines, points and bars should be shown for
-each data series. In case you don't specify anything at all, Flot will
-default to showing lines (you can turn this off with
-lines: { show: false }). You can specify the various types
-independently of each other, and Flot will happily draw each of them
-in turn (this is probably only useful for lines and points), e.g.
-
-  var options = {
-    series: {
-      lines: { show: true, fill: true, fillColor: "rgba(255, 255, 255, 0.8)" },
-      points: { show: true, fill: false }
-    }
-  };
-
-"lineWidth" is the thickness of the line or outline in pixels. You can
-set it to 0 to prevent a line or outline from being drawn; this will
-also hide the shadow.
-
-"fill" is whether the shape should be filled. For lines, this produces
-area graphs. You can use "fillColor" to specify the color of the fill.
-If "fillColor" evaluates to false (default for everything except
-points which are filled with white), the fill color is auto-set to the
-color of the data series. You can adjust the opacity of the fill by
-setting fill to a number between 0 (fully transparent) and 1 (fully
-opaque).
-
-For bars, fillColor can be a gradient, see the gradient documentation
-below. "barWidth" is the width of the bars in units of the x axis (or
-the y axis if "horizontal" is true), contrary to most other measures
-that are specified in pixels. For instance, for time series the unit
-is milliseconds so 24 * 60 * 60 * 1000 produces bars with the width of
-a day. "align" specifies whether a bar should be left-aligned
-(default) or centered on top of the value it represents. When
-"horizontal" is on, the bars are drawn horizontally, i.e. from the y
-axis instead of the x axis; note that the bar end points are still
-defined in the same way so you'll probably want to swap the
-coordinates if you've been plotting vertical bars first.
-
-For lines, "steps" specifies whether two adjacent data points are
-connected with a straight (possibly diagonal) line or with first a
-horizontal and then a vertical line. Note that this transforms the
-data by adding extra points.
-
-For points, you can specify the radius and the symbol. The only
-built-in symbol type is circles, for other types you can use a plugin
-or define them yourself by specifying a callback:
-
-  function cross(ctx, x, y, radius, shadow) {
-      var size = radius * Math.sqrt(Math.PI) / 2;
-      ctx.moveTo(x - size, y - size);
-      ctx.lineTo(x + size, y + size);
-      ctx.moveTo(x - size, y + size);
-      ctx.lineTo(x + size, y - size);
-  }
-
-The parameters are the drawing context, x and y coordinates of the
-center of the point, a radius which corresponds to what the circle
-would have used and whether the call is to draw a shadow (due to
-limited canvas support, shadows are currently faked through extra
-draws). It's good practice to ensure that the area covered by the
-symbol is the same as for the circle with the given radius, this
-ensures that all symbols have approximately the same visual weight.
-
-"shadowSize" is the default size of shadows in pixels. Set it to 0 to
-remove shadows.
-
-The "colors" array specifies a default color theme to get colors for
-the data series from. You can specify as many colors as you like, like
-this:
-
-  colors: ["#d18b2c", "#dba255", "#919733"]
-
-If there are more data series than colors, Flot will try to generate
-extra colors by lightening and darkening colors in the theme.
-
-
-Customizing the grid
-====================
-
-  grid: {
-    show: boolean
-    aboveData: boolean
-    color: color
-    backgroundColor: color/gradient or null
-    labelMargin: number
-    axisMargin: number
-    markings: array of markings or (fn: axes -> array of markings)
-    borderWidth: number
-    borderColor: color or null
-    minBorderMargin: number or null
-    clickable: boolean
-    hoverable: boolean
-    autoHighlight: boolean
-    mouseActiveRadius: number
-  }
-
-The grid is the thing with the axes and a number of ticks. Many of the
-things in the grid are configured under the individual axes, but not
-all. "color" is the color of the grid itself whereas "backgroundColor"
-specifies the background color inside the grid area, here null means
-that the background is transparent. You can also set a gradient, see
-the gradient documentation below.
-
-You can turn off the whole grid including tick labels by setting
-"show" to false. "aboveData" determines whether the grid is drawn
-above the data or below (below is default).
-
-"labelMargin" is the space in pixels between tick labels and axis
-line, and "axisMargin" is the space in pixels between axes when there
-are two next to each other. Note that you can style the tick labels
-with CSS, e.g. to change the color. They have class "tickLabel".
-
-"borderWidth" is the width of the border around the plot. Set it to 0
-to disable the border. You can also set "borderColor" if you want the
-border to have a different color than the grid lines.
-"minBorderMargin" controls the default minimum margin around the
-border - it's used to make sure that points aren't accidentally
-clipped by the canvas edge so by default the value is computed from
-the point radius.
-
-"markings" is used to draw simple lines and rectangular areas in the
-background of the plot. You can either specify an array of ranges on
-the form { xaxis: { from, to }, yaxis: { from, to } } (with multiple
-axes, you can specify coordinates for other axes instead, e.g. as
-x2axis/x3axis/...) or with a function that returns such an array given
-the axes for the plot in an object as the first parameter.
-
-You can set the color of markings by specifying "color" in the ranges
-object. Here's an example array:
-
-  markings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: "#bb0000" }, ... ]
-
-If you leave out one of the values, that value is assumed to go to the
-border of the plot. So for example if you only specify { xaxis: {
-from: 0, to: 2 } } it means an area that extends from the top to the
-bottom of the plot in the x range 0-2.
-
-A line is drawn if from and to are the same, e.g.
-
-  markings: [ { yaxis: { from: 1, to: 1 } }, ... ]
-
-would draw a line parallel to the x axis at y = 1. You can control the
-line width with "lineWidth" in the range object.
-
-An example function that makes vertical stripes might look like this:
-
-  markings: function (axes) {
-    var markings = [];
-    for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2)
-      markings.push({ xaxis: { from: x, to: x + 1 } });
-    return markings;
-  }
-
-
-If you set "clickable" to true, the plot will listen for click events
-on the plot area and fire a "plotclick" event on the placeholder with
-a position and a nearby data item object as parameters. The coordinates
-are available both in the unit of the axes (not in pixels) and in
-global screen coordinates.
-
-Likewise, if you set "hoverable" to true, the plot will listen for
-mouse move events on the plot area and fire a "plothover" event with
-the same parameters as the "plotclick" event. If "autoHighlight" is
-true (the default), nearby data items are highlighted automatically.
-If needed, you can disable highlighting and control it yourself with
-the highlight/unhighlight plot methods described elsewhere.
-
-You can use "plotclick" and "plothover" events like this:
-
-    $.plot($("#placeholder"), [ d ], { grid: { clickable: true } });
-
-    $("#placeholder").bind("plotclick", function (event, pos, item) {
-        alert("You clicked at " + pos.x + ", " + pos.y);
-        // axis coordinates for other axes, if present, are in pos.x2, pos.x3, ...
-        // if you need global screen coordinates, they are pos.pageX, pos.pageY
-
-        if (item) {
-          highlight(item.series, item.datapoint);
-          alert("You clicked a point!");
-        }
-    });
-
-The item object in this example is either null or a nearby object on the form:
-
-  item: {
-      datapoint: the point, e.g. [0, 2]
-      dataIndex: the index of the point in the data array
-      series: the series object
-      seriesIndex: the index of the series
-      pageX, pageY: the global screen coordinates of the point
-  }
-
-For instance, if you have specified the data like this 
-
-    $.plot($("#placeholder"), [ { label: "Foo", data: [[0, 10], [7, 3]] } ], ...);
-
-and the mouse is near the point (7, 3), "datapoint" is [7, 3],
-"dataIndex" will be 1, "series" is a normalized series object with
-among other things the "Foo" label in series.label and the color in
-series.color, and "seriesIndex" is 0. Note that plugins and options
-that transform the data can shift the indexes from what you specified
-in the original data array.
-
-If you use the above events to update some other information and want
-to clear out that info in case the mouse goes away, you'll probably
-also need to listen to "mouseout" events on the placeholder div.
-
-"mouseActiveRadius" specifies how far the mouse can be from an item
-and still activate it. If there are two or more points within this
-radius, Flot chooses the closest item. For bars, the top-most bar
-(from the latest specified data series) is chosen.
-
-If you want to disable interactivity for a specific data series, you
-can set "hoverable" and "clickable" to false in the options for that
-series, like this { data: [...], label: "Foo", clickable: false }.
-
-
-Specifying gradients
-====================
-
-A gradient is specified like this:
-
-  { colors: [ color1, color2, ... ] }
-
-For instance, you might specify a background on the grid going from
-black to gray like this:
-
-  grid: {
-    backgroundColor: { colors: ["#000", "#999"] }
-  }
-
-For the series you can specify the gradient as an object that
-specifies the scaling of the brightness and the opacity of the series
-color, e.g.
-
-  { colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ] }
-
-where the first color simply has its alpha scaled, whereas the second
-is also darkened. For instance, for bars the following makes the bars
-gradually disappear, without outline:
-
-  bars: {
-      show: true,
-      lineWidth: 0,
-      fill: true,
-      fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] }
-  }
-  
-Flot currently only supports vertical gradients drawn from top to
-bottom because that's what works with IE.
-
-
-Plot Methods
-------------
-
-The Plot object returned from the plot function has some methods you
-can call:
-
-  - highlight(series, datapoint)
-
-    Highlight a specific datapoint in the data series. You can either
-    specify the actual objects, e.g. if you got them from a
-    "plotclick" event, or you can specify the indices, e.g.
-    highlight(1, 3) to highlight the fourth point in the second series
-    (remember, zero-based indexing).
-
-  
-  - unhighlight(series, datapoint) or unhighlight()
-
-    Remove the highlighting of the point, same parameters as
-    highlight.
-
-    If you call unhighlight with no parameters, e.g. as
-    plot.unhighlight(), all current highlights are removed.
-
-
-  - setData(data)
-
-    You can use this to reset the data used. Note that axis scaling,
-    ticks, legend etc. will not be recomputed (use setupGrid() to do
-    that). You'll probably want to call draw() afterwards.
-
-    You can use this function to speed up redrawing a small plot if
-    you know that the axes won't change. Put in the new data with
-    setData(newdata), call draw(), and you're good to go. Note that
-    for large datasets, almost all the time is consumed in draw()
-    plotting the data so in this case don't bother.
-
-    
-  - setupGrid()
-
-    Recalculate and set axis scaling, ticks, legend etc.
-
-    Note that because of the drawing model of the canvas, this
-    function will immediately redraw (actually reinsert in the DOM)
-    the labels and the legend, but not the actual tick lines because
-    they're drawn on the canvas. You need to call draw() to get the
-    canvas redrawn.
-    
-  - draw()
-
-    Redraws the plot canvas.
-
-  - triggerRedrawOverlay()
-
-    Schedules an update of an overlay canvas used for drawing
-    interactive things like a selection and point highlights. This
-    is mostly useful for writing plugins. The redraw doesn't happen
-    immediately, instead a timer is set to catch multiple successive
-    redraws (e.g. from a mousemove). You can get to the overlay by
-    setting up a drawOverlay hook.
-
-  - width()/height()
-
-    Gets the width and height of the plotting area inside the grid.
-    This is smaller than the canvas or placeholder dimensions as some
-    extra space is needed (e.g. for labels).
-
-  - offset()
-
-    Returns the offset of the plotting area inside the grid relative
-    to the document, useful for instance for calculating mouse
-    positions (event.pageX/Y minus this offset is the pixel position
-    inside the plot).
-
-  - pointOffset({ x: xpos, y: ypos })
-
-    Returns the calculated offset of the data point at (x, y) in data
-    space within the placeholder div. If you are working with multiple axes, you
-    can specify the x and y axis references, e.g. 
-
-      o = pointOffset({ x: xpos, y: ypos, xaxis: 2, yaxis: 3 })
-      // o.left and o.top now contains the offset within the div
-
-  - resize()
-
-    Tells Flot to resize the drawing canvas to the size of the
-    placeholder. You need to run setupGrid() and draw() afterwards as
-    canvas resizing is a destructive operation. This is used
-    internally by the resize plugin.
-
-  - shutdown()
-
-    Cleans up any event handlers Flot has currently registered. This
-    is used internally.
-
-
-There are also some members that let you peek inside the internal
-workings of Flot which is useful in some cases. Note that if you change
-something in the objects returned, you're changing the objects used by
-Flot to keep track of its state, so be careful.
-
-  - getData()
-
-    Returns an array of the data series currently used in normalized
-    form with missing settings filled in according to the global
-    options. So for instance to find out what color Flot has assigned
-    to the data series, you could do this:
-
-      var series = plot.getData();
-      for (var i = 0; i < series.length; ++i)
-        alert(series[i].color);
-
-    A notable other interesting field besides color is datapoints
-    which has a field "points" with the normalized data points in a
-    flat array (the field "pointsize" is the increment in the flat
-    array to get to the next point so for a dataset consisting only of
-    (x,y) pairs it would be 2).
-
-  - getAxes()
-
-    Gets an object with the axes. The axes are returned as the
-    attributes of the object, so for instance getAxes().xaxis is the
-    x axis.
-
-    Various things are stuffed inside an axis object, e.g. you could
-    use getAxes().xaxis.ticks to find out what the ticks are for the
-    xaxis. Two other useful attributes are p2c and c2p, functions for
-    transforming from data point space to the canvas plot space and
-    back. Both returns values that are offset with the plot offset.
-    Check the Flot source code for the complete set of attributes (or
-    output an axis with console.log() and inspect it).
-
-    With multiple axes, the extra axes are returned as x2axis, x3axis,
-    etc., e.g. getAxes().y2axis is the second y axis. You can check
-    y2axis.used to see whether the axis is associated with any data
-    points and y2axis.show to see if it is currently shown. 
- 
-  - getPlaceholder()
-
-    Returns placeholder that the plot was put into. This can be useful
-    for plugins for adding DOM elements or firing events.
-
-  - getCanvas()
-
-    Returns the canvas used for drawing in case you need to hack on it
-    yourself. You'll probably need to get the plot offset too.
-  
-  - getPlotOffset()
-
-    Gets the offset that the grid has within the canvas as an object
-    with distances from the canvas edges as "left", "right", "top",
-    "bottom". I.e., if you draw a circle on the canvas with the center
-    placed at (left, top), its center will be at the top-most, left
-    corner of the grid.
-
-  - getOptions()
-
-    Gets the options for the plot, normalized, with default values
-    filled in. You get a reference to actual values used by Flot, so
-    if you modify the values in here, Flot will use the new values.
-    If you change something, you probably have to call draw() or
-    setupGrid() or triggerRedrawOverlay() to see the change.
-    
-
-Hooks
-=====
-
-In addition to the public methods, the Plot object also has some hooks
-that can be used to modify the plotting process. You can install a
-callback function at various points in the process, the function then
-gets access to the internal data structures in Flot.
-
-Here's an overview of the phases Flot goes through:
-
-  1. Plugin initialization, parsing options
-  
-  2. Constructing the canvases used for drawing
-
-  3. Set data: parsing data specification, calculating colors,
-     copying raw data points into internal format,
-     normalizing them, finding max/min for axis auto-scaling
-
-  4. Grid setup: calculating axis spacing, ticks, inserting tick
-     labels, the legend
-
-  5. Draw: drawing the grid, drawing each of the series in turn
-
-  6. Setting up event handling for interactive features
-
-  7. Responding to events, if any
-
-  8. Shutdown: this mostly happens in case a plot is overwritten 
-
-Each hook is simply a function which is put in the appropriate array.
-You can add them through the "hooks" option, and they are also available
-after the plot is constructed as the "hooks" attribute on the returned
-plot object, e.g.
-
-  // define a simple draw hook
-  function hellohook(plot, canvascontext) { alert("hello!"); };
-
-  // pass it in, in an array since we might want to specify several
-  var plot = $.plot(placeholder, data, { hooks: { draw: [hellohook] } });
-
-  // we can now find it again in plot.hooks.draw[0] unless a plugin
-  // has added other hooks
-
-The available hooks are described below. All hook callbacks get the
-plot object as first parameter. You can find some examples of defined
-hooks in the plugins bundled with Flot.
-
- - processOptions  [phase 1]
-
-   function(plot, options)
-   
-   Called after Flot has parsed and merged options. Useful in the
-   instance where customizations beyond simple merging of default
-   values is needed. A plugin might use it to detect that it has been
-   enabled and then turn on or off other options.
-
- 
- - processRawData  [phase 3]
-
-   function(plot, series, data, datapoints)
- 
-   Called before Flot copies and normalizes the raw data for the given
-   series. If the function fills in datapoints.points with normalized
-   points and sets datapoints.pointsize to the size of the points,
-   Flot will skip the copying/normalization step for this series.
-   
-   In any case, you might be interested in setting datapoints.format,
-   an array of objects for specifying how a point is normalized and
-   how it interferes with axis scaling.
-
-   The default format array for points is something along the lines of:
-
-     [
-       { x: true, number: true, required: true },
-       { y: true, number: true, required: true }
-     ]
-
-   The first object means that for the first coordinate it should be
-   taken into account when scaling the x axis, that it must be a
-   number, and that it is required - so if it is null or cannot be
-   converted to a number, the whole point will be zeroed out with
-   nulls. Beyond these you can also specify "defaultValue", a value to
-   use if the coordinate is null. This is for instance handy for bars
-   where one can omit the third coordinate (the bottom of the bar)
-   which then defaults to 0.
-
-
- - processDatapoints  [phase 3]
-
-   function(plot, series, datapoints)
- 
-   Called after normalization of the given series but before finding
-   min/max of the data points. This hook is useful for implementing data
-   transformations. "datapoints" contains the normalized data points in
-   a flat array as datapoints.points with the size of a single point
-   given in datapoints.pointsize. Here's a simple transform that
-   multiplies all y coordinates by 2:
-
-     function multiply(plot, series, datapoints) {
-         var points = datapoints.points, ps = datapoints.pointsize;
-         for (var i = 0; i < points.length; i += ps)
-             points[i + 1] *= 2;
-     }
-
-   Note that you must leave datapoints in a good condition as Flot
-   doesn't check it or do any normalization on it afterwards.
-
-
- - drawSeries  [phase 5]
-
-   function(plot, canvascontext, series)
-
-   Hook for custom drawing of a single series. Called just before the
-   standard drawing routine has been called in the loop that draws
-   each series.
-   
- 
- - draw  [phase 5]
-
-   function(plot, canvascontext)
- 
-   Hook for drawing on the canvas. Called after the grid is drawn
-   (unless it's disabled or grid.aboveData is set) and the series have
-   been plotted (in case any points, lines or bars have been turned
-   on). For examples of how to draw things, look at the source code.
-   
- 
- - bindEvents  [phase 6]
-
-   function(plot, eventHolder)
-
-   Called after Flot has setup its event handlers. Should set any
-   necessary event handlers on eventHolder, a jQuery object with the
-   canvas, e.g.
-
-     function (plot, eventHolder) {
-         eventHolder.mousedown(function (e) {
-             alert("You pressed the mouse at " + e.pageX + " " + e.pageY);
-         });
-     }
-
-   Interesting events include click, mousemove, mouseup/down. You can
-   use all jQuery events. Usually, the event handlers will update the
-   state by drawing something (add a drawOverlay hook and call
-   triggerRedrawOverlay) or firing an externally visible event for
-   user code. See the crosshair plugin for an example.
-     
-   Currently, eventHolder actually contains both the static canvas
-   used for the plot itself and the overlay canvas used for
-   interactive features because some versions of IE get the stacking
-   order wrong. The hook only gets one event, though (either for the
-   overlay or for the static canvas).
-
-   Note that custom plot events generated by Flot are not generated on
-   eventHolder, but on the div placeholder supplied as the first
-   argument to the plot call. You can get that with
-   plot.getPlaceholder() - that's probably also the one you should use
-   if you need to fire a custom event.
-
-
- - drawOverlay  [phase 7]
-
-   function (plot, canvascontext)
-
-   The drawOverlay hook is used for interactive things that need a
-   canvas to draw on. The model currently used by Flot works the way
-   that an extra overlay canvas is positioned on top of the static
-   canvas. This overlay is cleared and then completely redrawn
-   whenever something interesting happens. This hook is called when
-   the overlay canvas is to be redrawn.
-
-   "canvascontext" is the 2D context of the overlay canvas. You can
-   use this to draw things. You'll most likely need some of the
-   metrics computed by Flot, e.g. plot.width()/plot.height(). See the
-   crosshair plugin for an example.
-
-
- - shutdown  [phase 8]
-
-   function (plot, eventHolder)
-
-   Run when plot.shutdown() is called, which usually only happens in
-   case a plot is overwritten by a new plot. If you're writing a
-   plugin that adds extra DOM elements or event handlers, you should
-   add a callback to clean up after you. Take a look at the section in
-   PLUGINS.txt for more info.
-
-   
-Plugins
--------
-
-Plugins extend the functionality of Flot. To use a plugin, simply
-include its Javascript file after Flot in the HTML page.
-
-If you're worried about download size/latency, you can concatenate all
-the plugins you use, and Flot itself for that matter, into one big file
-(make sure you get the order right), then optionally run it through a
-Javascript minifier such as YUI Compressor.
-
-Here's a brief explanation of how the plugin plumbings work:
-
-Each plugin registers itself in the global array $.plot.plugins. When
-you make a new plot object with $.plot, Flot goes through this array
-calling the "init" function of each plugin and merging default options
-from the "option" attribute of the plugin. The init function gets a
-reference to the plot object created and uses this to register hooks
-and add new public methods if needed.
-
-See the PLUGINS.txt file for details on how to write a plugin. As the
-above description hints, it's actually pretty easy.
-
-
-Version number
---------------
-
-The version number of Flot is available in $.plot.version.

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/FAQ.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/FAQ.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/FAQ.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/FAQ.txt (removed)
@@ -1,76 +0,0 @@
-Frequently asked questions
---------------------------
-
-Q: How much data can Flot cope with?
-
-A: Flot will happily draw everything you send to it so the answer
-depends on the browser. The excanvas emulation used for IE (built with
-VML) makes IE by far the slowest browser so be sure to test with that
-if IE users are in your target group.
-
-1000 points is not a problem, but as soon as you start having more
-points than the pixel width, you should probably start thinking about
-downsampling/aggregation as this is near the resolution limit of the
-chart anyway. If you downsample server-side, you also save bandwidth.
-
-
-Q: Flot isn't working when I'm using JSON data as source!
-
-A: Actually, Flot loves JSON data, you just got the format wrong.
-Double check that you're not inputting strings instead of numbers,
-like [["0", "-2.13"], ["5", "4.3"]]. This is most common mistake, and
-the error might not show up immediately because Javascript can do some
-conversion automatically.
-
-
-Q: Can I export the graph?
-
-A: This is a limitation of the canvas technology. There's a hook in
-the canvas object for getting an image out, but you won't get the tick
-labels. And it's not likely to be supported by IE. At this point, your
-best bet is probably taking a screenshot, e.g. with PrtScn.
-
-
-Q: The bars are all tiny in time mode?
-
-A: It's not really possible to determine the bar width automatically.
-So you have to set the width with the barWidth option which is NOT in
-pixels, but in the units of the x axis (or the y axis for horizontal
-bars). For time mode that's milliseconds so the default value of 1
-makes the bars 1 millisecond wide.
-
-
-Q: Can I use Flot with libraries like Mootools or Prototype?
-
-A: Yes, Flot supports it out of the box and it's easy! Just use jQuery
-instead of $, e.g. call jQuery.plot instead of $.plot and use
-jQuery(something) instead of $(something). As a convenience, you can
-put in a DOM element for the graph placeholder where the examples and
-the API documentation are using jQuery objects.
-
-Depending on how you include jQuery, you may have to add one line of
-code to prevent jQuery from overwriting functions from the other
-libraries, see the documentation in jQuery ("Using jQuery with other
-libraries") for details.
-
-
-Q: Flot doesn't work with [insert name of Javascript UI framework]!
-
-A: The only non-standard thing used by Flot is the canvas tag;
-otherwise it is simply a series of absolute positioned divs within the
-placeholder tag you put in. If this is not working, it's probably
-because the framework you're using is doing something weird with the
-DOM, or you're using it the wrong way.
-
-A common problem is that there's display:none on a container until the
-user does something. Many tab widgets work this way, and there's
-nothing wrong with it - you just can't call Flot inside a display:none
-container as explained in the README so you need to hold off the Flot
-call until the container is actually displayed (or use
-visibility:hidden instead of display:none or move the container
-off-screen).
-
-If you find there's a specific thing we can do to Flot to help, feel
-free to submit a bug report. Otherwise, you're welcome to ask for help
-on the forum/mailing list, but please don't submit a bug report to
-Flot.

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/LICENSE.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/LICENSE.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/LICENSE.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/LICENSE.txt (removed)
@@ -1,22 +0,0 @@
-Copyright (c) 2007-2009 IOLA and Ole Laursen
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/Makefile
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/Makefile?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/Makefile (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/Makefile (removed)
@@ -1,9 +0,0 @@
-# Makefile for generating minified files
-
-.PHONY: all
-
-# we cheat and process all .js files instead of an exhaustive list
-all: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js)))
-
-%.min.js: %.js
-	yui-compressor $< -o $@

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/NEWS.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/NEWS.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/NEWS.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/NEWS.txt (removed)
@@ -1,508 +0,0 @@
-Flot 0.7
---------
-
-API changes:
-
-Multiple axes support. Code using dual axes should be changed from
-using x2axis/y2axis in the options to using an array (although
-backwards-compatibility hooks are in place). For instance,
-
-  {
-    xaxis: { ... }, x2axis: { ... },
-    yaxis: { ... }, y2axis: { ... }
-  }
-
-becomes
-
-  {
-    xaxes: [ { ... }, { ... } ],
-    yaxes: [ { ... }, { ... } ]
-  }
-
-Note that if you're just using one axis, continue to use the
-xaxis/yaxis directly (it now sets the default settings for the
-arrays). Plugins touching the axes must be ported to take the extra
-axes into account, check the source to see some examples.
-
-A related change is that the visibility of axes is now auto-detected.
-So if you were relying on an axis to show up even without any data in
-the chart, you now need to set the axis "show" option explicitly.
-
-"tickColor" on the grid options is now deprecated in favour of a
-corresponding option on the axes, so { grid: { tickColor: "#000" }}
-becomes { xaxis: { tickColor: "#000"}, yaxis: { tickColor: "#000"} },
-but if you just configure a base color Flot will now autogenerate a
-tick color by adding transparency. Backwards-compatibility hooks are
-in place.
-
-Final note: now that IE 9 is coming out with canvas support, you may
-want to adapt the excanvas include to skip loading it in IE 9 (the
-examples have been adapted thanks to Ryley Breiddal). An alternative
-to excanvas using Flash has also surfaced, if your graphs are slow in
-IE, you may want to give it a spin:
-
-  http://code.google.com/p/flashcanvas/
-
-
-Changes:
-
-- Support for specifying a bottom for each point for line charts when
-  filling them, this means that an arbitrary bottom can be used
-  instead of just the x axis (based on patches patiently provided by
-  Roman V. Prikhodchenko).
-- New fillbetween plugin that can compute a bottom for a series from
-  another series, useful for filling areas between lines (see new
-  example percentiles.html for a use case).
-- More predictable handling of gaps for the stacking plugin, now all
-  undefined ranges are skipped.
-- Stacking plugin can stack horizontal bar charts.
-- Navigate plugin now redraws the plot while panning instead of only
-  after the fact (can be disabled by setting the pan.frameRate option
-  to null), raised by lastthemy (issue 235).
-- Date formatter now accepts %0m and %0d to get a zero-padded month or
-  day (issue raised by Maximillian Dornseif).
-- Revamped internals to support an unlimited number of axes, not just
-  dual (sponsored by Flight Data Services,
-  www.flightdataservices.com).
-- New setting on axes, "tickLength", to control the size of ticks or
-  turn them off without turning off the labels.
-- Axis labels are now put in container divs with classes, for instance
-  labels in the x axes can be reached via ".xAxis .tickLabel".
-- Support for setting the color of an axis (sponsored by Flight Data
-  Services, www.flightdataservices.com).
-- Tick color is now auto-generated as the base color with some
-  transparency (unless you override it).
-- Support for aligning ticks in the axes with "alignTicksWithAxis" to
-  ensure that they appear next to each other rather than in between,
-  at the expense of possibly awkward tick steps (sponsored by Flight
-  Data Services, www.flightdataservices.com).
-- Support for customizing the point type through a callback when
-  plotting points and new symbol plugin with some predefined point
-  types (sponsored by Utility Data Corporation).
-- Resize plugin for automatically redrawing when the placeholder
-  changes size, e.g. on window resizes (sponsored by Novus Partners).
-  A resize() method has been added to plot object facilitate this.
-- Support Infinity/-Infinity for plotting asymptotes by hacking it
-  into +/-Number.MAX_VALUE (reported by rabaea.mircea).
-- Support for restricting navigate plugin to not pan/zoom an axis (based
-  on patch by kkaefer).
-- Support for providing the drag cursor for the navigate plugin as an
-  option (based on patch by Kelly T. Moore).
-- Options for controlling whether an axis is shown or not (suggestion
-  by Timo Tuominen) and whether to reserve space for it even if it
-  isn't shown.
-- New attribute $.plot.version with the Flot version as a string.
-- The version comment is now included in the minified jquery.flot.min.js.
-- New options.grid.minBorderMargin for adjusting the minimum margin
-  provided around the border (based on patch by corani, issue 188).
-- Refactor replot behaviour so Flot tries to reuse the existing
-  canvas, adding shutdown() methods to the plot (based on patch by
-  Ryley Breiddal, issue 269). This prevents a memory leak in Chrome
-  and hopefully makes replotting faster for those who are using $.plot
-  instead of .setData()/.draw(). Also update jQuery to 1.5.1 to
-  prevent IE leaks fixed in jQuery.
-- New real-time line chart example.
-
-- New hooks: drawSeries, shutdown
-
-Bug fixes:
-
-- Fixed problem with findNearbyItem and bars on top of each other
-  (reported by ragingchikn, issue 242).
-- Fixed problem with ticks and the border (based on patch from
-  ultimatehustler69, issue 236).
-- Fixed problem with plugins adding options to the series objects.
-- Fixed a problem introduced in 0.6 with specifying a gradient with {
-  brightness: x, opacity: y }.
-- Don't use $.browser.msie, check for getContext on the created canvas
-  element instead and try to use excanvas if it's not found (fixes IE
-  9 compatibility).
-- highlight(s, index) was looking up the point in the original s.data
-  instead of in the computed datapoints array, which breaks with
-  plugins that modify the datapoints (such as the stacking plugin).
-  Issue 316 reported by curlypaul924.
-- More robust handling of axis from data passed in from getData()
-  (problem reported by Morgan).
-- Fixed problem with turning off bar outline (issue 253, fix by Jordi
-  Castells).
-- Check the selection passed into setSelection in the selection
-  plugin, to guard against errors when synchronizing plots (fix by Lau
-  Bech Lauritzen).
-- Fix bug in crosshair code with mouseout resetting the crosshair even
-  if it is locked (fix by Lau Bech Lauritzen and Banko Adam).
-- Fix bug with points plotting using line width from lines rather than
-  points.
-- Fix bug with passing non-array 0 data (for plugins that don't expect
-  arrays, patch by vpapp1).
-- Fix errors in JSON in examples so they work with jQuery 1.4.2
-  (fix reported by honestbleeps, issue 357).
-- Fix bug with tooltip in interacting.html, this makes the tooltip
-  much smoother (fix by bdkahn). Fix related bug inside highlighting
-  handler in Flot.
-- Use closure trick to make inline colorhelpers plugin respect
-  jQuery.noConflict(true), renaming the global jQuery object (reported
-  by Nick Stielau).
-- Listen for mouseleave events and fire a plothover event with empty
-  item when it occurs to drop highlights when the mouse leaves the
-  plot (reported by by outspirit).
-- Fix bug with using aboveData with a background (reported by
-  amitayd).
-- Fix possible excanvas leak (report and suggested fix by tom9729).
-- Fix bug with backwards compatibility for shadowSize = 0 (report and
-  suggested fix by aspinak).
-- Adapt examples to skip loading excanvas (fix by Ryley Breiddal).
-- Fix bug that prevent a simple f(x) = -x transform from working
-  correctly (fix by Mike, issue 263).
-- Fix bug in restoring cursor in navigate plugin (reported by Matteo
-  Gattanini, issue 395).
-- Fix bug in picking items when transform/inverseTransform is in use
-  (reported by Ofri Raviv, and patches and analysis by Jan and Tom
-  Paton, issue 334 and 467).
-- Fix problem with unaligned ticks and hover/click events caused by
-  padding on the placeholder by hardcoding the placeholder padding to
-  0 (reported by adityadineshsaxena, Matt Sommer, Daniel Atos and some
-  other people, issue 301).
-- Update colorhelpers plugin to avoid dying when trying to parse an
-  invalid string (reported by cadavor, issue 483).
-
-
-Flot 0.6
---------
-
-API changes:
-
-1. Selection support has been moved to a plugin. Thus if you're
-passing selection: { mode: something }, you MUST include the file
-jquery.flot.selection.js after jquery.flot.js. This reduces the size
-of base Flot and makes it easier to customize the selection as well as
-improving code clarity. The change is based on a patch from andershol.
-
-2. In the global options specified in the $.plot command,
-"lines", "points", "bars" and "shadowSize" have been moved to a
-sub-object called "series", i.e.
-
-  $.plot(placeholder, data, { lines: { show: true }})
-
-should be changed to
-
-  $.plot(placeholder, data, { series: { lines: { show: true }}})
-
-All future series-specific options will go into this sub-object to
-simplify plugin writing. Backward-compatibility code is in place, so
-old code should not break.
-
-3. "plothover" no longer provides the original data point, but instead
-a normalized one, since there may be no corresponding original point.
-
-4. Due to a bug in previous versions of jQuery, you now need at least
-jQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some
-improvements in event handling speed.
-
-
-Changes:
-
-- Added support for disabling interactivity for specific data series
-  (request from Ronald Schouten and Steve Upton).
-
-- Flot now calls $() on the placeholder and optional legend container
-  passed in so you can specify DOM elements or CSS expressions to make
-  it easier to use Flot with libraries like Prototype or Mootools or
-  through raw JSON from Ajax responses.
-
-- A new "plotselecting" event is now emitted while the user is making
-  a selection.
-
-- The "plothover" event is now emitted immediately instead of at most
-  10 times per second, you'll have to put in a setTimeout yourself if
-  you're doing something really expensive on this event.
-
-- The built-in date formatter can now be accessed as
-  $.plot.formatDate(...) (suggestion by Matt Manela) and even
-  replaced.
-
-- Added "borderColor" option to the grid (patch from Amaury Chamayou
-  and patch from Mike R. Williamson).
-
-- Added support for gradient backgrounds for the grid, take a look at
-  the "setting options" example (based on patch from Amaury Chamayou,
-  issue 90).
-
-- Gradient bars (suggestion by stefpet).
-  
-- Added a "plotunselected" event which is triggered when the selection
-  is removed, see "selection" example (suggestion by Meda Ugo);
-
-- The option legend.margin can now specify horizontal and vertical
-  margins independently (suggestion by someone who's annoyed).
-
-- Data passed into Flot is now copied to a new canonical format to
-  enable further processing before it hits the drawing routines. As a
-  side-effect, this should make Flot more robust in the face of bad
-  data (and fixes issue 112).
-
-- Step-wise charting: line charts have a new option "steps" that when
-  set to true connects the points with horizontal/vertical steps
-  instead of diagonal lines.
-
-- The legend labelFormatter now passes the series in addition to just
-  the label (suggestion by Vincent Lemeltier).
-
-- Horizontal bars (based on patch by Jason LeBrun).
-
-- Support for partial bars by specifying a third coordinate, i.e. they
-  don't have to start from the axis. This can be used to make stacked
-  bars.
-
-- New option to disable the (grid.show).
-
-- Added pointOffset method for converting a point in data space to an
-  offset within the placeholder.
-  
-- Plugin system: register an init method in the $.flot.plugins array
-  to get started, see PLUGINS.txt for details on how to write plugins
-  (it's easy). There are also some extra methods to enable access to
-  internal state.
-
-- Hooks: you can register functions that are called while Flot is
-  crunching the data and doing the plot. This can be used to modify
-  Flot without changing the source, useful for writing plugins. Some
-  hooks are defined, more are likely to come.
-  
-- Threshold plugin: you can set a threshold and a color, and the data
-  points below that threshold will then get the color. Useful for
-  marking data below 0, for instance.
-
-- Stack plugin: you can specify a stack key for each series to have
-  them summed. This is useful for drawing additive/cumulative graphs
-  with bars and (currently unfilled) lines.
-
-- Crosshairs plugin: trace the mouse position on the axes, enable with
-  crosshair: { mode: "x"} (see the new tracking example for a use).
-
-- Image plugin: plot prerendered images.
-
-- Navigation plugin for panning and zooming a plot.
-
-- More configurable grid.
-
-- Axis transformation support, useful for non-linear plots, e.g. log
-  axes and compressed time axes (like omitting weekends).
-
-- Support for twelve-hour date formatting (patch by Forrest Aldridge).
-
-- The color parsing code in Flot has been cleaned up and split out so
-  it's now available as a separate jQuery plugin. It's included inline
-  in the Flot source to make dependency managing easier. This also
-  makes it really easy to use the color helpers in Flot plugins.
-
-Bug fixes:
-
-- Fixed two corner-case bugs when drawing filled curves (report and
-  analysis by Joshua Varner).
-- Fix auto-adjustment code when setting min to 0 for an axis where the
-  dataset is completely flat on that axis (report by chovy).
-- Fixed a bug with passing in data from getData to setData when the
-  secondary axes are used (issue 65, reported by nperelman).
-- Fixed so that it is possible to turn lines off when no other chart
-  type is shown (based on problem reported by Glenn Vanderburg), and
-  fixed so that setting lineWidth to 0 also hides the shadow (based on
-  problem reported by Sergio Nunes).
-- Updated mousemove position expression to the latest from jQuery (bug
-  reported by meyuchas).
-- Use CSS borders instead of background in legend (fix printing issue 25
-  and 45).
-- Explicitly convert axis min/max to numbers.
-- Fixed a bug with drawing marking lines with different colors
-  (reported by Khurram).
-- Fixed a bug with returning y2 values in the selection event (fix
-  by exists, issue 75).
-- Only set position relative on placeholder if it hasn't already a
-  position different from static (reported by kyberneticist, issue 95).
-- Don't round markings to prevent sub-pixel problems (reported by Dan
-  Lipsitt).
-- Make the grid border act similarly to a regular CSS border, i.e.
-  prevent it from overlapping the plot itself. This also fixes a
-  problem with anti-aliasing when the width is 1 pixel (reported by
-  Anthony Ettinger).
-- Imported version 3 of excanvas and fixed two issues with the newer
-  version. Hopefully, this will make Flot work with IE8 (nudge by
-  Fabien Menager, further analysis by Booink, issue 133).
-- Changed the shadow code for lines to hopefully look a bit better
-  with vertical lines.
-- Round tick positions to avoid possible problems with fractions
-  (suggestion by Fred, issue 130).
-- Made the heuristic for determining how many ticks to aim for a bit
-  smarter.
-- Fix for uneven axis margins (report and patch by Paul Kienzle) and
-  snapping to ticks (concurrent report and patch by lifthrasiir).
-- Fixed bug with slicing in findNearbyItems (patch by zollman).
-- Make heuristic for x axis label widths more dynamic (patch by
-  rickinhethuis).
-- Make sure points on top take precedence when finding nearby points
-  when hovering (reported by didroe, issue 224).
-
-Flot 0.5
---------
-
-Backwards API change summary: Timestamps are now in UTC. Also
-"selected" event -> becomes "plotselected" with new data, the
-parameters for setSelection are now different (but backwards
-compatibility hooks are in place), coloredAreas becomes markings with
-a new interface (but backwards compatibility hooks are in place).
-
-
-Interactivity: added a new "plothover" event and this and the
-"plotclick" event now returns the closest data item (based on patch by
-/david, patch by Mark Byers for bar support). See the revamped
-"interacting with the data" example for some hints on what you can do.
-
-Highlighting: you can now highlight points and datapoints are
-autohighlighted when you hover over them (if hovering is turned on).
-
-Support for dual axis has been added (based on patch by someone who's
-annoyed and /david). For each data series you can specify which axes
-it belongs to, and there are two more axes, x2axis and y2axis, to
-customize. This affects the "selected" event which has been renamed to
-"plotselected" and spews out { xaxis: { from: -10, to: 20 } ... },
-setSelection in which the parameters are on a new form (backwards
-compatible hooks are in place so old code shouldn't break) and
-markings (formerly coloredAreas).
-
-Timestamps in time mode are now displayed according to
-UTC instead of the time zone of the visitor. This affects the way the
-timestamps should be input; you'll probably have to offset the
-timestamps according to your local time zone. It also affects any
-custom date handling code (which basically now should use the
-equivalent UTC date mehods, e.g. .setUTCMonth() instead of
-.setMonth().
-
-Added support for specifying the size of tick labels (axis.labelWidth,
-axis.labelHeight). Useful for specifying a max label size to keep
-multiple plots aligned.
-
-Markings, previously coloredAreas, are now specified as ranges on the
-axes, like { xaxis: { from: 0, to: 10 }}. Furthermore with markings
-you can now draw horizontal/vertical lines by setting from and to to
-the same coordinate (idea from line support patch by by Ryan Funduk).
-
-The "fill" option can now be a number that specifies the opacity of
-the fill.
-
-You can now specify a coordinate as null (like [2, null]) and Flot
-will take the other coordinate into account when scaling the axes
-(based on patch by joebno).
-
-New option for bars "align". Set it to "center" to center the bars on
-the value they represent.
-
-setSelection now takes a second parameter which you can use to prevent
-the method from firing the "plotselected" handler. 
-
-Using the "container" option in legend now overwrites the container
-element instead of just appending to it (fixes infinite legend bug,
-reported by several people, fix by Brad Dewey).
-
-Fixed a bug in calculating spacing around the plot (reported by
-timothytoe). Fixed a bug in finding max values for all-negative data
-sets. Prevent the possibility of eternal looping in tick calculations.
-Fixed a bug when borderWidth is set to 0 (reported by
-Rob/sanchothefat). Fixed a bug with drawing bars extending below 0
-(reported by James Hewitt, patch by Ryan Funduk). Fixed a
-bug with line widths of bars (reported by MikeM). Fixed a bug with
-'nw' and 'sw' legend positions. Improved the handling of axis
-auto-scaling with bars. Fixed a bug with multi-line x-axis tick
-labels (reported by Luca Ciano). IE-fix help by Savage Zhang.
-
-
-Flot 0.4
---------
-
-API changes: deprecated axis.noTicks in favor of just specifying the
-number as axis.ticks. So "xaxis: { noTicks: 10 }" becomes
-"xaxis: { ticks: 10 }"
-
-Time series support. Specify axis.mode: "time", put in Javascript
-timestamps as data, and Flot will automatically spit out sensible
-ticks. Take a look at the two new examples. The format can be
-customized with axis.timeformat and axis.monthNames, or if that fails
-with axis.tickFormatter.
-
-Support for colored background areas via grid.coloredAreas. Specify an
-array of { x1, y1, x2, y2 } objects or a function that returns these
-given { xmin, xmax, ymin, ymax }.
-
-More members on the plot object (report by Chris Davies and others).
-"getData" for inspecting the assigned settings on data series (e.g.
-color) and "setData", "setupGrid" and "draw" for updating the contents
-without a total replot.
-
-The default number of ticks to aim for is now dependent on the size of
-the plot in pixels. Support for customizing tick interval sizes
-directly with axis.minTickSize and axis.tickSize.
-
-Cleaned up the automatic axis scaling algorithm and fixed how it
-interacts with ticks. Also fixed a couple of tick-related corner case
-bugs (one reported by mainstreetmark, another reported by timothytoe).
-
-The option axis.tickFormatter now takes a function with two
-parameters, the second parameter is an optional object with
-information about the axis. It has min, max, tickDecimals, tickSize.
-
-Added support for segmented lines (based on patch from Michael
-MacDonald) and for ignoring null and bad values (suggestion from Nick
-Konidaris and joshwaihi). 
-
-Added support for changing the border width (joebno and safoo).
-Label colors can be changed via CSS by selecting the tickLabel class.
-
-Fixed a bug in handling single-item bar series (reported by Emil
-Filipov). Fixed erratic behaviour when interacting with the plot
-with IE 7 (reported by Lau Bech Lauritzen). Prevent IE/Safari text
-selection when selecting stuff on the canvas.
-
-
-
-Flot 0.3
---------
-
-This is mostly a quick-fix release because jquery.js wasn't included
-in the previous zip/tarball.
-
-Support clicking on the plot. Turn it on with grid: { clickable: true },
-then you get a "plotclick" event on the graph placeholder with the
-position in units of the plot.
-
-Fixed a bug in dealing with data where min = max, thanks to Michael
-Messinides.
-
-Include jquery.js in the zip/tarball.
-
-
-Flot 0.2
---------
-
-Added support for putting a background behind the default legend. The
-default is the partly transparent background color. Added
-backgroundColor and backgroundOpacity to the legend options to control
-this.
-
-The ticks options can now be a callback function that takes one
-parameter, an object with the attributes min and max. The function
-should return a ticks array.
-
-Added labelFormatter option in legend, useful for turning the legend
-labels into links.
-
-Fixed a couple of bugs.
-
-The API should now be fully documented.
-
-Patch from Guy Fraser to make parts of the code smaller.
-
-API changes: Moved labelMargin option to grid from x/yaxis.
-
-
-Flot 0.1
---------
-
-First public release.

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/PLUGINS.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/PLUGINS.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/PLUGINS.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/PLUGINS.txt (removed)
@@ -1,137 +0,0 @@
-Writing plugins
----------------
-
-All you need to do to make a new plugin is creating an init function
-and a set of options (if needed), stuffing it into an object and
-putting it in the $.plot.plugins array. For example:
-
-  function myCoolPluginInit(plot) {
-    plot.coolstring = "Hello!";
-  };
-
-  $.plot.plugins.push({ init: myCoolPluginInit, options: { ... } });
-
-  // if $.plot is called, it will return a plot object with the
-  // attribute "coolstring"
-
-Now, given that the plugin might run in many different places, it's
-a good idea to avoid leaking names. The usual trick here is wrap the
-above lines in an anonymous function which is called immediately, like
-this: (function () { inner code ... })(). To make it even more robust
-in case $ is not bound to jQuery but some other Javascript library, we
-can write it as
-
-  (function ($) {
-    // plugin definition
-    // ...
-  })(jQuery);
-
-There's a complete example below, but you should also check out the
-plugins bundled with Flot.
-
-
-Complete example
-----------------
-  
-Here is a simple debug plugin which alerts each of the series in the
-plot. It has a single option that control whether it is enabled and
-how much info to output:
-
-  (function ($) {
-    function init(plot) {
-      var debugLevel = 1;
-    
-      function checkDebugEnabled(plot, options) {
-        if (options.debug) {
-          debugLevel = options.debug;
-            
-          plot.hooks.processDatapoints.push(alertSeries);
-        }
-      }
-
-      function alertSeries(plot, series, datapoints) {
-        var msg = "series " + series.label;
-        if (debugLevel > 1)
-          msg += " with " + series.data.length + " points";
-        alert(msg);
-      }
-    
-      plot.hooks.processOptions.push(checkDebugEnabled);
-    }
-
-    var options = { debug: 0 };
-    
-    $.plot.plugins.push({
-        init: init,
-        options: options,
-        name: "simpledebug",
-        version: "0.1"
-    });
-  })(jQuery);
-
-We also define "name" and "version". It's not used by Flot, but might
-be helpful for other plugins in resolving dependencies.
-  
-Put the above in a file named "jquery.flot.debug.js", include it in an
-HTML page and then it can be used with:
-
-  $.plot($("#placeholder"), [...], { debug: 2 });
-
-This simple plugin illustrates a couple of points:
-
- - It uses the anonymous function trick to avoid name pollution.
- - It can be enabled/disabled through an option.
- - Variables in the init function can be used to store plot-specific
-   state between the hooks.
-
-The two last points are important because there may be multiple plots
-on the same page, and you'd want to make sure they are not mixed up.
-
-
-Shutting down a plugin
-----------------------
-
-Each plot object has a shutdown hook which is run when plot.shutdown()
-is called. This usually mostly happens in case another plot is made on
-top of an existing one.
-
-The purpose of the hook is to give you a chance to unbind any event
-handlers you've registered and remove any extra DOM things you've
-inserted.
-
-The problem with event handlers is that you can have registered a
-handler which is run in some point in the future, e.g. with
-setTimeout(). Meanwhile, the plot may have been shutdown and removed,
-but because your event handler is still referencing it, it can't be
-garbage collected yet, and worse, if your handler eventually runs, it
-may overwrite stuff on a completely different plot.
-
- 
-Some hints on the options
--------------------------
-   
-Plugins should always support appropriate options to enable/disable
-them because the plugin user may have several plots on the same page
-where only one should use the plugin. In most cases it's probably a
-good idea if the plugin is turned off rather than on per default, just
-like most of the powerful features in Flot.
-
-If the plugin needs options that are specific to each series, like the
-points or lines options in core Flot, you can put them in "series" in
-the options object, e.g.
-
-  var options = {
-    series: {
-      downsample: {
-        algorithm: null,
-        maxpoints: 1000
-      }
-    }
-  }
-
-Then they will be copied by Flot into each series, providing default
-values in case none are specified.
-
-Think hard and long about naming the options. These names are going to
-be public API, and code is going to depend on them if the plugin is
-successful.

Removed: zorg/trunk/lnt/lnt/server/ui/static/flot/README.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/flot/README.txt?rev=156009&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/flot/README.txt (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/flot/README.txt (removed)
@@ -1,90 +0,0 @@
-About
------
-
-Flot is a Javascript plotting library for jQuery. Read more at the
-website:
-
-  http://code.google.com/p/flot/
-
-Take a look at the examples linked from above, they should give a good
-impression of what Flot can do and the source code of the examples is
-probably the fastest way to learn how to use Flot.
-  
-
-Installation
-------------
-
-Just include the Javascript file after you've included jQuery.
-
-Generally, all browsers that support the HTML5 canvas tag are
-supported.
-
-For support for Internet Explorer < 9, you can use Excanvas, a canvas
-emulator; this is used in the examples bundled with Flot. You just
-include the excanvas script like this:
-
-  <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]-->
-
-If it's not working on your development IE 6.0, check that it has
-support for VML which Excanvas is relying on. It appears that some
-stripped down versions used for test environments on virtual machines
-lack the VML support.
-
-You can also try using Flashcanvas (see
-http://code.google.com/p/flashcanvas/), which uses Flash to do the
-emulation. Although Flash can be a bit slower to load than VML, if
-you've got a lot of points, the Flash version can be much faster
-overall. Flot contains some wrapper code for activating Excanvas which
-Flashcanvas is compatible with.
-
-You need at least jQuery 1.2.6, but try at least 1.3.2 for interactive
-charts because of performance improvements in event handling.
-
-
-Basic usage
------------
-
-Create a placeholder div to put the graph in:
-
-   <div id="placeholder"></div>
-
-You need to set the width and height of this div, otherwise the plot
-library doesn't know how to scale the graph. You can do it inline like
-this:
-
-   <div id="placeholder" style="width:600px;height:300px"></div>
-
-You can also do it with an external stylesheet. Make sure that the
-placeholder isn't within something with a display:none CSS property -
-in that case, Flot has trouble measuring label dimensions which
-results in garbled looks and might have trouble measuring the
-placeholder dimensions which is fatal (it'll throw an exception).
-
-Then when the div is ready in the DOM, which is usually on document
-ready, run the plot function:
-
-  $.plot($("#placeholder"), data, options);
-
-Here, data is an array of data series and options is an object with
-settings if you want to customize the plot. Take a look at the
-examples for some ideas of what to put in or look at the reference
-in the file "API.txt". Here's a quick example that'll draw a line from
-(0, 0) to (1, 1):
-
-  $.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } });
-
-The plot function immediately draws the chart and then returns a plot
-object with a couple of methods.
-
-
-What's with the name?
----------------------
-
-First: it's pronounced with a short o, like "plot". Not like "flawed".
-
-So "Flot" rhymes with "plot".
-
-And if you look up "flot" in a Danish-to-English dictionary, some up
-the words that come up are "good-looking", "attractive", "stylish",
-"smart", "impressive", "extravagant". One of the main goals with Flot
-is pretty looks.





More information about the llvm-commits mailing list