Merge "Remove fastInvalidate and setFast* methods"
diff --git a/api/current.txt b/api/current.txt
index f946dda..7c05ed6 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7981,8 +7981,8 @@
method public void drawPoint(float, float, android.graphics.Paint);
method public void drawPoints(float[], int, int, android.graphics.Paint);
method public void drawPoints(float[], android.graphics.Paint);
- method public void drawPosText(char[], int, int, float[], android.graphics.Paint);
- method public void drawPosText(java.lang.String, float[], android.graphics.Paint);
+ method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint);
+ method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint);
method public void drawRGB(int, int, int);
method public void drawRect(android.graphics.RectF, android.graphics.Paint);
method public void drawRect(android.graphics.Rect, android.graphics.Paint);
@@ -8000,8 +8000,8 @@
method public int getDensity();
method public android.graphics.DrawFilter getDrawFilter();
method public int getHeight();
- method public void getMatrix(android.graphics.Matrix);
- method public final android.graphics.Matrix getMatrix();
+ method public deprecated void getMatrix(android.graphics.Matrix);
+ method public final deprecated android.graphics.Matrix getMatrix();
method public int getMaximumBitmapHeight();
method public int getMaximumBitmapWidth();
method public int getSaveCount();
@@ -8331,7 +8331,7 @@
method public final boolean isDither();
method public final boolean isFakeBoldText();
method public final boolean isFilterBitmap();
- method public final boolean isLinearText();
+ method public final deprecated boolean isLinearText();
method public final boolean isStrikeThruText();
method public final boolean isSubpixelText();
method public final boolean isUnderlineText();
@@ -8351,7 +8351,7 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setHinting(int);
- method public void setLinearText(boolean);
+ method public deprecated void setLinearText(boolean);
method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter);
method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect);
method public android.graphics.Rasterizer setRasterizer(android.graphics.Rasterizer);
@@ -17657,7 +17657,8 @@
public static class UserDictionary.Words implements android.provider.BaseColumns {
ctor public UserDictionary.Words();
- method public static void addWord(android.content.Context, java.lang.String, int, int);
+ method public static deprecated void addWord(android.content.Context, java.lang.String, int, int);
+ method public static void addWord(android.content.Context, java.lang.String, int, java.lang.String, java.util.Locale);
field public static final java.lang.String APP_ID = "appid";
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.userword";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.userword";
@@ -17665,8 +17666,9 @@
field public static final java.lang.String DEFAULT_SORT_ORDER = "frequency DESC";
field public static final java.lang.String FREQUENCY = "frequency";
field public static final java.lang.String LOCALE = "locale";
- field public static final int LOCALE_TYPE_ALL = 0; // 0x0
- field public static final int LOCALE_TYPE_CURRENT = 1; // 0x1
+ field public static final deprecated int LOCALE_TYPE_ALL = 0; // 0x0
+ field public static final deprecated int LOCALE_TYPE_CURRENT = 1; // 0x1
+ field public static final java.lang.String SHORTCUT = "shortcut";
field public static final java.lang.String WORD = "word";
field public static final java.lang.String _ID = "_id";
}
diff --git a/cmds/servicemanager/binder.c b/cmds/servicemanager/binder.c
index 918d4d4..1985756 100644
--- a/cmds/servicemanager/binder.c
+++ b/cmds/servicemanager/binder.c
@@ -412,7 +412,7 @@
return;
}
- bio->data = bio->data0 = data + n;
+ bio->data = bio->data0 = (char *) data + n;
bio->offs = bio->offs0 = data;
bio->data_avail = maxdata - n;
bio->offs_avail = maxoffs;
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index bac3c6c..455d2f0 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -486,7 +486,6 @@
private static final String HEAP_COLUMN = "%13s %8s %8s %8s %8s %8s %8s";
private static final String ONE_COUNT_COLUMN = "%21s %8d";
private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
- private static final String TWO_COUNT_COLUMNS_DB = "%21s %8d %21s %8d";
private static final String DB_INFO_FORMAT = " %8s %8s %14s %14s %s";
// Formatting for checkin service - update version if row format changes
@@ -867,7 +866,6 @@
int binderProxyObjectCount = Debug.getBinderProxyObjectCount();
int binderDeathObjectCount = Debug.getBinderDeathObjectCount();
long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class);
- long sqliteAllocated = SQLiteDebug.getHeapAllocatedSize() / 1024;
SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo();
// For checkin, we print one long comma-separated list of values
@@ -935,9 +933,9 @@
pw.print(openSslSocketCount); pw.print(',');
// SQL
- pw.print(sqliteAllocated); pw.print(',');
pw.print(stats.memoryUsed / 1024); pw.print(',');
- pw.print(stats.pageCacheOverflo / 1024); pw.print(',');
+ pw.print(stats.memoryUsed / 1024); pw.print(',');
+ pw.print(stats.pageCacheOverflow / 1024); pw.print(',');
pw.print(stats.largestMemAlloc / 1024);
for (int i = 0; i < stats.dbStats.size(); i++) {
DbStats dbStats = stats.dbStats.get(i);
@@ -1003,10 +1001,9 @@
// SQLite mem info
pw.println(" ");
pw.println(" SQL");
- printRow(pw, TWO_COUNT_COLUMNS_DB, "heap:", sqliteAllocated, "MEMORY_USED:",
- stats.memoryUsed / 1024);
- printRow(pw, TWO_COUNT_COLUMNS_DB, "PAGECACHE_OVERFLOW:",
- stats.pageCacheOverflo / 1024, "MALLOC_SIZE:", stats.largestMemAlloc / 1024);
+ printRow(pw, ONE_COUNT_COLUMN, "MEMORY_USED:", stats.memoryUsed / 1024);
+ printRow(pw, TWO_COUNT_COLUMNS, "PAGECACHE_OVERFLOW:",
+ stats.pageCacheOverflow / 1024, "MALLOC_SIZE:", stats.largestMemAlloc / 1024);
pw.println(" ");
int N = stats.dbStats.size();
if (N > 0) {
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index 74fef29..22df272 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -284,23 +284,6 @@
}
}
- /**
- * This is hidden until the data set change model has been re-evaluated.
- * @hide
- */
- protected void notifyDataSetChange() {
- mDataSetObservable.notifyChanged();
- }
-
- /**
- * This is hidden until the data set change model has been re-evaluated.
- * @hide
- */
- protected DataSetObservable getDataSetObservable() {
- return mDataSetObservable;
-
- }
-
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index e45d66d..72f62fd 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -74,10 +74,17 @@
* queues.
* </p>
*
+ * <h2>Reentrance</h2>
+ * <p>
+ * This class must tolerate reentrant execution of SQLite operations because
+ * triggers may call custom SQLite functions that perform additional queries.
+ * </p>
+ *
* @hide
*/
public final class SQLiteConnection {
private static final String TAG = "SQLiteConnection";
+ private static final boolean DEBUG = false;
private static final String[] EMPTY_STRING_ARRAY = new String[0];
private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
@@ -187,8 +194,6 @@
}
private void open() {
- SQLiteGlobal.initializeOnce();
-
mConnectionPtr = nativeOpen(mConfiguration.path, mConfiguration.openFlags,
mConfiguration.label,
SQLiteDebug.DEBUG_SQL_STATEMENTS, SQLiteDebug.DEBUG_SQL_TIME);
@@ -205,13 +210,13 @@
}
if (mConnectionPtr != 0) {
- mRecentOperations.beginOperation("close", null, null);
+ final int cookie = mRecentOperations.beginOperation("close", null, null);
try {
mPreparedStatementCache.evictAll();
nativeClose(mConnectionPtr);
mConnectionPtr = 0;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
}
@@ -304,9 +309,9 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("prepare", sql, null);
+ final int cookie = mRecentOperations.beginOperation("prepare", sql, null);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
if (outStatementInfo != null) {
outStatementInfo.numParameters = statement.mNumParameters;
@@ -328,10 +333,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -349,9 +354,9 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("execute", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("execute", sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -361,10 +366,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -384,9 +389,9 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("executeForLong", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForLong", sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -396,10 +401,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -419,9 +424,9 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("executeForString", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForString", sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -431,10 +436,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -456,9 +461,10 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("executeForBlobFileDescriptor", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForBlobFileDescriptor",
+ sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -470,10 +476,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -493,9 +499,10 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("executeForChangedRowCount", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForChangedRowCount",
+ sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -506,10 +513,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -529,9 +536,10 @@
throw new IllegalArgumentException("sql must not be null.");
}
- mRecentOperations.beginOperation("executeForLastInsertedRowId", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForLastInsertedRowId",
+ sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -542,10 +550,10 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- mRecentOperations.endOperation();
+ mRecentOperations.endOperation(cookie);
}
}
@@ -581,9 +589,10 @@
int actualPos = -1;
int countedRows = -1;
int filledRows = -1;
- mRecentOperations.beginOperation("executeForCursorWindow", sql, bindArgs);
+ final int cookie = mRecentOperations.beginOperation("executeForCursorWindow",
+ sql, bindArgs);
try {
- PreparedStatement statement = acquirePreparedStatement(sql);
+ final PreparedStatement statement = acquirePreparedStatement(sql);
try {
throwIfStatementForbidden(statement);
bindArguments(statement, bindArgs);
@@ -600,11 +609,11 @@
releasePreparedStatement(statement);
}
} catch (RuntimeException ex) {
- mRecentOperations.failOperation(ex);
+ mRecentOperations.failOperation(cookie, ex);
throw ex;
} finally {
- if (mRecentOperations.endOperationDeferLog()) {
- mRecentOperations.logOperation("window='" + window
+ if (mRecentOperations.endOperationDeferLog(cookie)) {
+ mRecentOperations.logOperation(cookie, "window='" + window
+ "', startPos=" + startPos
+ ", actualPos=" + actualPos
+ ", filledRows=" + filledRows
@@ -615,8 +624,15 @@
private PreparedStatement acquirePreparedStatement(String sql) {
PreparedStatement statement = mPreparedStatementCache.get(sql);
+ boolean skipCache = false;
if (statement != null) {
- return statement;
+ if (!statement.mInUse) {
+ return statement;
+ }
+ // The statement is already in the cache but is in use (this statement appears
+ // to be not only re-entrant but recursive!). So prepare a new copy of the
+ // statement but do not cache it.
+ skipCache = true;
}
final int statementPtr = nativePrepareStatement(mConnectionPtr, sql);
@@ -625,7 +641,7 @@
final int type = DatabaseUtils.getSqlStatementType(sql);
final boolean readOnly = nativeIsReadOnly(mConnectionPtr, statementPtr);
statement = obtainPreparedStatement(sql, statementPtr, numParameters, type, readOnly);
- if (isCacheable(type)) {
+ if (!skipCache && isCacheable(type)) {
mPreparedStatementCache.put(sql, statement);
statement.mInCache = true;
}
@@ -637,31 +653,38 @@
}
throw ex;
}
+ statement.mInUse = true;
return statement;
}
private void releasePreparedStatement(PreparedStatement statement) {
+ statement.mInUse = false;
if (statement.mInCache) {
try {
nativeResetStatementAndClearBindings(mConnectionPtr, statement.mStatementPtr);
} catch (SQLiteException ex) {
- // The statement could not be reset due to an error.
- // The entryRemoved() callback for the cache will recursively call
- // releasePreparedStatement() again, but this time mInCache will be false
- // so the statement will be finalized and recycled.
- if (SQLiteDebug.DEBUG_SQL_CACHE) {
- Log.v(TAG, "Could not reset prepared statement due to an exception. "
+ // The statement could not be reset due to an error. Remove it from the cache.
+ // When remove() is called, the cache will invoke its entryRemoved() callback,
+ // which will in turn call finalizePreparedStatement() to finalize and
+ // recycle the statement.
+ if (DEBUG) {
+ Log.d(TAG, "Could not reset prepared statement due to an exception. "
+ "Removing it from the cache. SQL: "
+ trimSqlForDisplay(statement.mSql), ex);
}
+
mPreparedStatementCache.remove(statement.mSql);
}
} else {
- nativeFinalizeStatement(mConnectionPtr, statement.mStatementPtr);
- recyclePreparedStatement(statement);
+ finalizePreparedStatement(statement);
}
}
+ private void finalizePreparedStatement(PreparedStatement statement) {
+ nativeFinalizeStatement(mConnectionPtr, statement.mStatementPtr);
+ recyclePreparedStatement(statement);
+ }
+
private void bindArguments(PreparedStatement statement, Object[] bindArgs) {
final int count = bindArgs != null ? bindArgs.length : 0;
if (count != statement.mNumParameters) {
@@ -735,9 +758,10 @@
* Dumps debugging information about this connection.
*
* @param printer The printer to receive the dump, not null.
+ * @param verbose True to dump more verbose information.
*/
- public void dump(Printer printer) {
- dumpUnsafe(printer);
+ public void dump(Printer printer, boolean verbose) {
+ dumpUnsafe(printer, verbose);
}
/**
@@ -752,15 +776,21 @@
* it should not crash. This is ok as it is only used for diagnostic purposes.
*
* @param printer The printer to receive the dump, not null.
+ * @param verbose True to dump more verbose information.
*/
- void dumpUnsafe(Printer printer) {
+ void dumpUnsafe(Printer printer, boolean verbose) {
printer.println("Connection #" + mConnectionId + ":");
+ if (verbose) {
+ printer.println(" connectionPtr: 0x" + Integer.toHexString(mConnectionPtr));
+ }
printer.println(" isPrimaryConnection: " + mIsPrimaryConnection);
- printer.println(" connectionPtr: 0x" + Integer.toHexString(mConnectionPtr));
printer.println(" onlyAllowReadOnlyOperations: " + mOnlyAllowReadOnlyOperations);
mRecentOperations.dump(printer);
- mPreparedStatementCache.dump(printer);
+
+ if (verbose) {
+ mPreparedStatementCache.dump(printer);
+ }
}
/**
@@ -917,6 +947,12 @@
// True if the statement is in the cache.
public boolean mInCache;
+
+ // True if the statement is in use (currently executing).
+ // We need this flag because due to the use of custom functions in triggers, it's
+ // possible for SQLite calls to be re-entrant. Consequently we need to prevent
+ // in use statements from being finalized until they are no longer in use.
+ public boolean mInUse;
}
private final class PreparedStatementCache
@@ -929,7 +965,9 @@
protected void entryRemoved(boolean evicted, String key,
PreparedStatement oldValue, PreparedStatement newValue) {
oldValue.mInCache = false;
- releasePreparedStatement(oldValue);
+ if (!oldValue.mInUse) {
+ finalizePreparedStatement(oldValue);
+ }
}
public void dump(Printer printer) {
@@ -957,12 +995,15 @@
}
private static final class OperationLog {
- private static final int MAX_RECENT_OPERATIONS = 10;
+ private static final int MAX_RECENT_OPERATIONS = 20;
+ private static final int COOKIE_GENERATION_SHIFT = 8;
+ private static final int COOKIE_INDEX_MASK = 0xff;
private final Operation[] mOperations = new Operation[MAX_RECENT_OPERATIONS];
private int mIndex;
+ private int mGeneration;
- public void beginOperation(String kind, String sql, Object[] bindArgs) {
+ public int beginOperation(String kind, String sql, Object[] bindArgs) {
synchronized (mOperations) {
final int index = (mIndex + 1) % MAX_RECENT_OPERATIONS;
Operation operation = mOperations[index];
@@ -995,47 +1036,54 @@
}
}
}
+ operation.mCookie = newOperationCookieLocked(index);
mIndex = index;
+ return operation.mCookie;
}
}
- public void failOperation(Exception ex) {
+ public void failOperation(int cookie, Exception ex) {
synchronized (mOperations) {
- final Operation operation = mOperations[mIndex];
- operation.mException = ex;
- }
- }
-
- public boolean endOperationDeferLog() {
- synchronized (mOperations) {
- return endOperationDeferLogLocked();
- }
- }
-
- private boolean endOperationDeferLogLocked() {
- final Operation operation = mOperations[mIndex];
- operation.mEndTime = System.currentTimeMillis();
- operation.mFinished = true;
- return SQLiteDebug.DEBUG_LOG_SLOW_QUERIES && SQLiteDebug.shouldLogSlowQuery(
- operation.mEndTime - operation.mStartTime);
- }
-
- public void endOperation() {
- synchronized (mOperations) {
- if (endOperationDeferLogLocked()) {
- logOperationLocked(null);
+ final Operation operation = getOperationLocked(cookie);
+ if (operation != null) {
+ operation.mException = ex;
}
}
}
- public void logOperation(String detail) {
+ public void endOperation(int cookie) {
synchronized (mOperations) {
- logOperationLocked(detail);
+ if (endOperationDeferLogLocked(cookie)) {
+ logOperationLocked(cookie, null);
+ }
}
}
- private void logOperationLocked(String detail) {
- final Operation operation = mOperations[mIndex];
+ public boolean endOperationDeferLog(int cookie) {
+ synchronized (mOperations) {
+ return endOperationDeferLogLocked(cookie);
+ }
+ }
+
+ public void logOperation(int cookie, String detail) {
+ synchronized (mOperations) {
+ logOperationLocked(cookie, detail);
+ }
+ }
+
+ private boolean endOperationDeferLogLocked(int cookie) {
+ final Operation operation = getOperationLocked(cookie);
+ if (operation != null) {
+ operation.mEndTime = System.currentTimeMillis();
+ operation.mFinished = true;
+ return SQLiteDebug.DEBUG_LOG_SLOW_QUERIES && SQLiteDebug.shouldLogSlowQuery(
+ operation.mEndTime - operation.mStartTime);
+ }
+ return false;
+ }
+
+ private void logOperationLocked(int cookie, String detail) {
+ final Operation operation = getOperationLocked(cookie);
StringBuilder msg = new StringBuilder();
operation.describe(msg);
if (detail != null) {
@@ -1044,6 +1092,17 @@
Log.d(TAG, msg.toString());
}
+ private int newOperationCookieLocked(int index) {
+ final int generation = mGeneration++;
+ return generation << COOKIE_GENERATION_SHIFT | index;
+ }
+
+ private Operation getOperationLocked(int cookie) {
+ final int index = cookie & COOKIE_INDEX_MASK;
+ final Operation operation = mOperations[index];
+ return operation.mCookie == cookie ? operation : null;
+ }
+
public String describeCurrentOperation() {
synchronized (mOperations) {
final Operation operation = mOperations[mIndex];
@@ -1097,6 +1156,7 @@
public ArrayList<Object> mBindArgs;
public boolean mFinished;
public Exception mException;
+ public int mCookie;
public void describe(StringBuilder msg) {
msg.append(mKind);
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index b88bfee..5469213 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -833,8 +833,9 @@
* Dumps debugging information about this connection pool.
*
* @param printer The printer to receive the dump, not null.
+ * @param verbose True to dump more verbose information.
*/
- public void dump(Printer printer) {
+ public void dump(Printer printer, boolean verbose) {
Printer indentedPrinter = PrefixPrinter.create(printer, " ");
synchronized (mLock) {
printer.println("Connection pool for " + mConfiguration.path + ":");
@@ -843,7 +844,7 @@
printer.println(" Available primary connection:");
if (mAvailablePrimaryConnection != null) {
- mAvailablePrimaryConnection.dump(indentedPrinter);
+ mAvailablePrimaryConnection.dump(indentedPrinter, verbose);
} else {
indentedPrinter.println("<none>");
}
@@ -852,7 +853,7 @@
if (!mAvailableNonPrimaryConnections.isEmpty()) {
final int count = mAvailableNonPrimaryConnections.size();
for (int i = 0; i < count; i++) {
- mAvailableNonPrimaryConnections.get(i).dump(indentedPrinter);
+ mAvailableNonPrimaryConnections.get(i).dump(indentedPrinter, verbose);
}
} else {
indentedPrinter.println("<none>");
@@ -863,7 +864,7 @@
for (Map.Entry<SQLiteConnection, Boolean> entry :
mAcquiredConnections.entrySet()) {
final SQLiteConnection connection = entry.getKey();
- connection.dumpUnsafe(indentedPrinter);
+ connection.dumpUnsafe(indentedPrinter, verbose);
indentedPrinter.println(" Pending reconfiguration: " + entry.getValue());
}
} else {
diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java
index 9dcb498..946300f 100644
--- a/core/java/android/database/sqlite/SQLiteCursor.java
+++ b/core/java/android/database/sqlite/SQLiteCursor.java
@@ -269,7 +269,6 @@
mStackTrace);
}
close();
- SQLiteDebug.notifyActiveCursorFinalized();
}
} finally {
super.finalize();
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 377a680..9cb6480 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -1665,17 +1665,17 @@
* Dump detailed information about all open databases in the current process.
* Used by bug report.
*/
- static void dumpAll(Printer printer) {
+ static void dumpAll(Printer printer, boolean verbose) {
for (SQLiteDatabase db : getActiveDatabases()) {
- db.dump(printer);
+ db.dump(printer, verbose);
}
}
- private void dump(Printer printer) {
+ private void dump(Printer printer, boolean verbose) {
synchronized (mLock) {
if (mConnectionPoolLocked != null) {
printer.println("");
- mConnectionPoolLocked.dump(printer);
+ mConnectionPoolLocked.dump(printer, verbose);
}
}
}
diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java
index d87c3e4..204483d 100644
--- a/core/java/android/database/sqlite/SQLiteDebug.java
+++ b/core/java/android/database/sqlite/SQLiteDebug.java
@@ -29,6 +29,8 @@
* {@hide}
*/
public final class SQLiteDebug {
+ private static native void nativeGetPagerStats(PagerStats stats);
+
/**
* Controls the printing of informational SQL log messages.
*/
@@ -49,31 +51,6 @@
Log.isLoggable("SQLiteTime", Log.VERBOSE);
/**
- * Controls the printing of compiled-sql-statement cache stats.
- */
- public static final boolean DEBUG_SQL_CACHE =
- Log.isLoggable("SQLiteCompiledSql", Log.VERBOSE);
-
- /**
- * Controls the stack trace reporting of active cursors being
- * finalized.
- */
- public static final boolean DEBUG_ACTIVE_CURSOR_FINALIZATION =
- Log.isLoggable("SQLiteCursorClosing", Log.VERBOSE);
-
- /**
- * Controls the tracking of time spent holding the database lock.
- */
- public static final boolean DEBUG_LOCK_TIME_TRACKING =
- Log.isLoggable("SQLiteLockTime", Log.VERBOSE);
-
- /**
- * Controls the printing of stack traces when tracking the time spent holding the database lock.
- */
- public static final boolean DEBUG_LOCK_TIME_TRACKING_STACK_TRACE =
- Log.isLoggable("SQLiteLockStackTrace", Log.VERBOSE);
-
- /**
* True to enable database performance testing instrumentation.
* @hide
*/
@@ -98,30 +75,9 @@
/**
* Contains statistics about the active pagers in the current process.
*
- * @see #getPagerStats(PagerStats)
+ * @see #nativeGetPagerStats(PagerStats)
*/
public static class PagerStats {
- /** The total number of bytes in all pagers in the current process
- * @deprecated not used any longer
- */
- @Deprecated
- public long totalBytes;
- /** The number of bytes in referenced pages in all pagers in the current process
- * @deprecated not used any longer
- * */
- @Deprecated
- public long referencedBytes;
- /** The number of bytes in all database files opened in the current process
- * @deprecated not used any longer
- */
- @Deprecated
- public long databaseBytes;
- /** The number of pagers opened in the current process
- * @deprecated not used any longer
- */
- @Deprecated
- public int numPagers;
-
/** the current amount of memory checked out by sqlite using sqlite3_malloc().
* documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
*/
@@ -134,7 +90,7 @@
* that overflowed because no space was left in the page cache.
* documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
*/
- public int pageCacheOverflo;
+ public int pageCacheOverflow;
/** records the largest memory allocation request handed to sqlite3.
* documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
@@ -182,7 +138,7 @@
*/
public static PagerStats getDatabaseInfo() {
PagerStats stats = new PagerStats();
- getPagerStats(stats);
+ nativeGetPagerStats(stats);
stats.dbStats = SQLiteDatabase.getDbStats();
return stats;
}
@@ -190,52 +146,16 @@
/**
* Dumps detailed information about all databases used by the process.
* @param printer The printer for dumping database state.
+ * @param args Command-line arguments supplied to dumpsys dbinfo
*/
public static void dump(Printer printer, String[] args) {
- SQLiteDatabase.dumpAll(printer);
- }
+ boolean verbose = false;
+ for (String arg : args) {
+ if (arg.equals("-v")) {
+ verbose = true;
+ }
+ }
- /**
- * Gathers statistics about all pagers in the current process.
- */
- public static native void getPagerStats(PagerStats stats);
-
- /**
- * Returns the size of the SQLite heap.
- * @return The size of the SQLite heap in bytes.
- */
- public static native long getHeapSize();
-
- /**
- * Returns the amount of allocated memory in the SQLite heap.
- * @return The allocated size in bytes.
- */
- public static native long getHeapAllocatedSize();
-
- /**
- * Returns the amount of free memory in the SQLite heap.
- * @return The freed size in bytes.
- */
- public static native long getHeapFreeSize();
-
- /**
- * Determines the number of dirty belonging to the SQLite
- * heap segments of this process. pages[0] returns the number of
- * shared pages, pages[1] returns the number of private pages
- */
- public static native void getHeapDirtyPages(int[] pages);
-
- private static int sNumActiveCursorsFinalized = 0;
-
- /**
- * Returns the number of active cursors that have been finalized. This depends on the GC having
- * run but is still useful for tests.
- */
- public static int getNumActiveCursorsFinalized() {
- return sNumActiveCursorsFinalized;
- }
-
- static synchronized void notifyActiveCursorFinalized() {
- sNumActiveCursorsFinalized++;
+ SQLiteDatabase.dumpAll(printer, verbose);
}
}
diff --git a/core/java/android/database/sqlite/SQLiteGlobal.java b/core/java/android/database/sqlite/SQLiteGlobal.java
index 5e129be..dbefd63 100644
--- a/core/java/android/database/sqlite/SQLiteGlobal.java
+++ b/core/java/android/database/sqlite/SQLiteGlobal.java
@@ -22,57 +22,35 @@
* Provides access to SQLite functions that affect all database connection,
* such as memory management.
*
+ * The native code associated with SQLiteGlobal is also sets global configuration options
+ * using sqlite3_config() then calls sqlite3_initialize() to ensure that the SQLite
+ * library is properly initialized exactly once before any other framework or application
+ * code has a chance to run.
+ *
+ * Verbose SQLite logging is enabled if the "log.tag.SQLiteLog" property is set to "V".
+ * (per {@link SQLiteDebug#DEBUG_SQL_LOG}).
+ *
* @hide
*/
public final class SQLiteGlobal {
private static final String TAG = "SQLiteGlobal";
private static final Object sLock = new Object();
- private static boolean sInitialized;
- private static int sSoftHeapLimit;
private static int sDefaultPageSize;
- private static native void nativeConfig(boolean verboseLog, int softHeapLimit);
- private static native int nativeReleaseMemory(int bytesToFree);
+ private static native int nativeReleaseMemory();
private SQLiteGlobal() {
}
/**
- * Initializes global SQLite settings the first time it is called.
- * Should be called before opening the first (or any) database.
- * Does nothing on repeated subsequent calls.
- */
- public static void initializeOnce() {
- synchronized (sLock) {
- if (!sInitialized) {
- sInitialized = true;
-
- // Limit to 8MB for now. This is 4 times the maximum cursor window
- // size, as has been used by the original code in SQLiteDatabase for
- // a long time.
- // TODO: We really do need to test whether this helps or hurts us.
- sSoftHeapLimit = 8 * 1024 * 1024;
-
- // Configure SQLite.
- nativeConfig(SQLiteDebug.DEBUG_SQL_LOG, sSoftHeapLimit);
- }
- }
- }
-
- /**
* Attempts to release memory by pruning the SQLite page cache and other
* internal data structures.
*
* @return The number of bytes that were freed.
*/
public static int releaseMemory() {
- synchronized (sLock) {
- if (!sInitialized) {
- return 0;
- }
- return nativeReleaseMemory(sSoftHeapLimit);
- }
+ return nativeReleaseMemory();
}
/**
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index 31da7e4..46d9369 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -81,7 +81,8 @@
* @param name of the database file, or null for an in-memory database
* @param factory to use for creating cursor objects, or null for the default
* @param version number of the database (starting at 1); if the database is older,
- * {@link #onUpgrade} will be used to upgrade the database
+ * {@link #onUpgrade} will be used to upgrade the database; if the database is
+ * newer, {@link #onDowngrade} will be used to downgrade the database
* @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
* corruption.
*/
@@ -100,7 +101,7 @@
}
/**
- * Return the name of the SQLite database being opened, as given tp
+ * Return the name of the SQLite database being opened, as given to
* the constructor.
*/
public String getDatabaseName() {
@@ -297,7 +298,7 @@
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);
/**
- * Called when the database needs to be downgraded. This is stricly similar to
+ * Called when the database needs to be downgraded. This is strictly similar to
* onUpgrade() method, but is called whenever current version is newer than requested one.
* However, this method is not abstract, so it is not mandatory for a customer to
* implement it. If not overridden, default implementation will reject downgrade and
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index 61fe45a..a933051 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -150,6 +150,12 @@
* A query that works well on 100 rows may struggle with 10,000.</li>
* </ul>
*
+ * <h2>Reentrance</h2>
+ * <p>
+ * This class must tolerate reentrant execution of SQLite operations because
+ * triggers may call custom SQLite functions that perform additional queries.
+ * </p>
+ *
* TODO: Support timeouts on all possibly blocking operations.
*
* @hide
@@ -159,6 +165,7 @@
private SQLiteConnection mConnection;
private int mConnectionFlags;
+ private int mConnectionUseCount;
private Transaction mTransactionPool;
private Transaction mTransactionStack;
@@ -289,7 +296,9 @@
private void beginTransactionUnchecked(int transactionMode,
SQLiteTransactionListener transactionListener, int connectionFlags) {
- acquireConnectionIfNoTransaction(null, connectionFlags); // might throw
+ if (mTransactionStack == null) {
+ acquireConnection(null, connectionFlags); // might throw
+ }
try {
// Set up the transaction such that we can back out safely
// in case we fail part way.
@@ -325,7 +334,9 @@
transaction.mParent = mTransactionStack;
mTransactionStack = transaction;
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ if (mTransactionStack == null) {
+ releaseConnection(); // might throw
+ }
}
}
@@ -408,7 +419,7 @@
mConnection.execute("ROLLBACK;", null); // might throw
}
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -534,11 +545,11 @@
throw new IllegalArgumentException("sql must not be null.");
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
mConnection.prepare(sql, outStatementInfo); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -562,11 +573,11 @@
return;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
mConnection.execute(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -592,11 +603,11 @@
return 0;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForLong(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -622,11 +633,11 @@
return null;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForString(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -655,11 +666,11 @@
return null;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForBlobFileDescriptor(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -685,11 +696,11 @@
return 0;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForChangedRowCount(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -715,11 +726,11 @@
return 0;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForLastInsertedRowId(sql, bindArgs); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -760,12 +771,12 @@
return 0;
}
- acquireConnectionIfNoTransaction(sql, connectionFlags); // might throw
+ acquireConnection(sql, connectionFlags); // might throw
try {
return mConnection.executeForCursorWindow(sql, bindArgs,
window, startPos, requiredPos, countAllRows); // might throw
} finally {
- releaseConnectionIfNoTransaction(); // might throw
+ releaseConnection(); // might throw
}
}
@@ -807,16 +818,19 @@
return false;
}
- private void acquireConnectionIfNoTransaction(String sql, int connectionFlags) {
- if (mTransactionStack == null) {
- assert mConnection == null;
+ private void acquireConnection(String sql, int connectionFlags) {
+ if (mConnection == null) {
+ assert mConnectionUseCount == 0;
mConnection = mConnectionPool.acquireConnection(sql, connectionFlags); // might throw
mConnectionFlags = connectionFlags;
}
+ mConnectionUseCount += 1;
}
- private void releaseConnectionIfNoTransaction() {
- if (mTransactionStack == null && mConnection != null) {
+ private void releaseConnection() {
+ assert mConnection != null;
+ assert mConnectionUseCount > 0;
+ if (--mConnectionUseCount == 0) {
try {
mConnectionPool.releaseConnection(mConnection); // might throw
} finally {
diff --git a/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java b/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java
deleted file mode 100644
index bcf95e2..0000000
--- a/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.database.sqlite;
-
-/**
- * Thrown if the database can't be closed because of some un-closed
- * Cursor or SQLiteStatement objects. Could happen when a thread is trying to close
- * the database while another thread still hasn't closed a Cursor on that database.
- * @hide
- */
-public class SQLiteUnfinalizedObjectsException extends SQLiteException {
- public SQLiteUnfinalizedObjectsException() {}
-
- public SQLiteUnfinalizedObjectsException(String error) {
- super(error);
- }
-}
diff --git a/core/java/android/inputmethodservice/ExtractEditText.java b/core/java/android/inputmethodservice/ExtractEditText.java
index 10c1195..23ae21b 100644
--- a/core/java/android/inputmethodservice/ExtractEditText.java
+++ b/core/java/android/inputmethodservice/ExtractEditText.java
@@ -100,6 +100,9 @@
@Override public boolean onTextContextMenuItem(int id) {
if (mIME != null && mIME.onExtractTextContextMenuItem(id)) {
+ // Mode was started on Extracted, needs to be stopped here.
+ // Cut and paste will change the text, which stops selection mode.
+ if (id == android.R.id.copy) stopSelectionActionMode();
return true;
}
return super.onTextContextMenuItem(id);
diff --git a/core/java/android/nfc/LlcpPacket.java b/core/java/android/nfc/LlcpPacket.java
deleted file mode 100644
index 9919dc4..0000000
--- a/core/java/android/nfc/LlcpPacket.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.nfc;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Represents a LLCP packet received in a LLCP Connectionless communication;
- * @hide
- */
-public class LlcpPacket implements Parcelable {
-
- private final int mRemoteSap;
-
- private final byte[] mDataBuffer;
-
- /**
- * Creates a LlcpPacket to be sent to a remote Service Access Point number
- * (SAP)
- *
- * @param sap Remote Service Access Point number
- * @param data Data buffer
- */
- public LlcpPacket(int sap, byte[] data) {
- mRemoteSap = sap;
- mDataBuffer = data;
- }
-
- /**
- * Returns the remote Service Access Point number
- */
- public int getRemoteSap() {
- return mRemoteSap;
- }
-
- /**
- * Returns the data buffer
- */
- public byte[] getDataBuffer() {
- return mDataBuffer;
- }
-
- public int describeContents() {
- return 0;
- }
-
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mRemoteSap);
- dest.writeInt(mDataBuffer.length);
- dest.writeByteArray(mDataBuffer);
- }
-
- public static final Parcelable.Creator<LlcpPacket> CREATOR = new Parcelable.Creator<LlcpPacket>() {
- public LlcpPacket createFromParcel(Parcel in) {
- // Remote SAP
- short sap = (short)in.readInt();
-
- // Data Buffer
- int dataLength = in.readInt();
- byte[] data = new byte[dataLength];
- in.readByteArray(data);
-
- return new LlcpPacket(sap, data);
- }
-
- public LlcpPacket[] newArray(int size) {
- return new LlcpPacket[size];
- }
- };
-}
\ No newline at end of file
diff --git a/core/java/android/provider/UserDictionary.java b/core/java/android/provider/UserDictionary.java
index 5a7ef85..a9b106a 100644
--- a/core/java/android/provider/UserDictionary.java
+++ b/core/java/android/provider/UserDictionary.java
@@ -40,6 +40,9 @@
public static final Uri CONTENT_URI =
Uri.parse("content://" + AUTHORITY);
+ private static final int FREQUENCY_MIN = 0;
+ private static final int FREQUENCY_MAX = 255;
+
/**
* Contains the user defined words.
*/
@@ -87,12 +90,24 @@
*/
public static final String APP_ID = "appid";
- /** The locale type to specify that the word is common to all locales. */
+ /**
+ * An optional shortcut for this word. When the shortcut is typed, supporting IMEs should
+ * suggest the word in this row as an alternate spelling too.
+ */
+ public static final String SHORTCUT = "shortcut";
+
+ /**
+ * @deprecated Use {@link #addWord(Context, String, int, String, Locale)}.
+ */
+ @Deprecated
public static final int LOCALE_TYPE_ALL = 0;
-
- /** The locale type to specify that the word is for the current locale. */
+
+ /**
+ * @deprecated Use {@link #addWord(Context, String, int, String, Locale)}.
+ */
+ @Deprecated
public static final int LOCALE_TYPE_CURRENT = 1;
-
+
/**
* Sort by descending order of frequency.
*/
@@ -100,35 +115,65 @@
/** Adds a word to the dictionary, with the given frequency and the specified
* specified locale type.
+ *
+ * @deprecated Please use
+ * {@link #addWord(Context, String, int, String, Locale)} instead.
+ *
* @param context the current application context
* @param word the word to add to the dictionary. This should not be null or
* empty.
* @param localeType the locale type for this word. It should be one of
* {@link #LOCALE_TYPE_ALL} or {@link #LOCALE_TYPE_CURRENT}.
*/
- public static void addWord(Context context, String word,
+ @Deprecated
+ public static void addWord(Context context, String word,
int frequency, int localeType) {
- final ContentResolver resolver = context.getContentResolver();
- if (TextUtils.isEmpty(word) || localeType < 0 || localeType > 1) {
+ if (localeType != LOCALE_TYPE_ALL && localeType != LOCALE_TYPE_CURRENT) {
return;
}
-
- if (frequency < 0) frequency = 0;
- if (frequency > 255) frequency = 255;
- String locale = null;
+ final Locale locale;
- // TODO: Verify if this is the best way to get the current locale
if (localeType == LOCALE_TYPE_CURRENT) {
- locale = Locale.getDefault().toString();
+ locale = Locale.getDefault();
+ } else {
+ locale = null;
}
- ContentValues values = new ContentValues(4);
+
+ addWord(context, word, frequency, null, locale);
+ }
+
+ /** Adds a word to the dictionary, with the given frequency and the specified
+ * locale type.
+ *
+ * @param context the current application context
+ * @param word the word to add to the dictionary. This should not be null or
+ * empty.
+ * @param shortcut optional shortcut spelling for this word. When the shortcut
+ * is typed, the word may be suggested by applications that support it. May be null.
+ * @param locale the locale to insert the word for, or null to insert the word
+ * for all locales.
+ */
+ public static void addWord(Context context, String word,
+ int frequency, String shortcut, Locale locale) {
+ final ContentResolver resolver = context.getContentResolver();
+
+ if (TextUtils.isEmpty(word)) {
+ return;
+ }
+
+ if (frequency < FREQUENCY_MIN) frequency = FREQUENCY_MIN;
+ if (frequency > FREQUENCY_MAX) frequency = FREQUENCY_MAX;
+
+ final int COLUMN_COUNT = 5;
+ ContentValues values = new ContentValues(COLUMN_COUNT);
values.put(WORD, word);
values.put(FREQUENCY, frequency);
- values.put(LOCALE, locale);
+ values.put(LOCALE, null == locale ? null : locale.toString());
values.put(APP_ID, 0); // TODO: Get App UID
+ values.put(SHORTCUT, shortcut);
Uri result = resolver.insert(CONTENT_URI, values);
// It's ok if the insert doesn't succeed because the word
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index 4ec4bc4..30bb447 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -280,8 +280,6 @@
if (isSelecting(buffer)) {
buffer.removeSpan(LAST_TAP_DOWN);
Selection.extendSelection(buffer, offset);
- } else if (!widget.shouldIgnoreActionUpEvent()) {
- Selection.setSelection(buffer, offset);
}
MetaKeyKeyListener.adjustMetaAfterKeypress(buffer);
diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java
new file mode 100644
index 0000000..641d1b4
--- /dev/null
+++ b/core/java/android/util/LocalLog.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.text.format.Time;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+/**
+ * @hide
+ */
+public final class LocalLog {
+
+ private LinkedList<String> mLog;
+ private int mMaxLines;
+ private Time mNow;
+
+ public LocalLog(int maxLines) {
+ mLog = new LinkedList<String>();
+ mMaxLines = maxLines;
+ mNow = new Time();
+ }
+
+ public synchronized void log(String msg) {
+ if (mMaxLines > 0) {
+ mNow.setToNow();
+ mLog.add(mNow.format("%H:%M:%S") + " - " + msg);
+ while (mLog.size() > mMaxLines) mLog.remove();
+ }
+ }
+
+ public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ Iterator<String> itr = mLog.listIterator(0);
+ while (itr.hasNext()) {
+ pw.println(itr.next());
+ }
+ }
+}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 700d3df..e06d661 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -908,17 +908,42 @@
@Override
public void drawPicture(Picture picture) {
- throw new UnsupportedOperationException();
+ if (picture.createdFromStream) {
+ return;
+ }
+
+ picture.endRecording();
+ // TODO: Implement rendering
}
@Override
public void drawPicture(Picture picture, Rect dst) {
- throw new UnsupportedOperationException();
+ if (picture.createdFromStream) {
+ return;
+ }
+
+ save();
+ translate(dst.left, dst.top);
+ if (picture.getWidth() > 0 && picture.getHeight() > 0) {
+ scale(dst.width() / picture.getWidth(), dst.height() / picture.getHeight());
+ }
+ drawPicture(picture);
+ restore();
}
@Override
public void drawPicture(Picture picture, RectF dst) {
- throw new UnsupportedOperationException();
+ if (picture.createdFromStream) {
+ return;
+ }
+
+ save();
+ translate(dst.left, dst.top);
+ if (picture.getWidth() > 0 && picture.getHeight() > 0) {
+ scale(dst.width() / picture.getWidth(), dst.height() / picture.getHeight());
+ }
+ drawPicture(picture);
+ restore();
}
@Override
@@ -945,14 +970,38 @@
@Override
public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {
- // TODO: Implement
+ if (index < 0 || index + count > text.length || count * 2 > pos.length) {
+ throw new IndexOutOfBoundsException();
+ }
+
+ int modifiers = setupModifiers(paint);
+ try {
+ nDrawPosText(mRenderer, text, index, count, pos, paint.mNativePaint);
+ } finally {
+ if (modifiers != MODIFIER_NONE) nResetModifiers(mRenderer, modifiers);
+ }
}
+ private static native void nDrawPosText(int renderer, char[] text, int index, int count,
+ float[] pos, int paint);
+
@Override
public void drawPosText(String text, float[] pos, Paint paint) {
- // TODO: Implement
+ if (text.length() * 2 > pos.length) {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+
+ int modifiers = setupModifiers(paint);
+ try {
+ nDrawPosText(mRenderer, text, 0, text.length(), pos, paint.mNativePaint);
+ } finally {
+ if (modifiers != MODIFIER_NONE) nResetModifiers(mRenderer, modifiers);
+ }
}
+ private static native void nDrawPosText(int renderer, String text, int start, int end,
+ float[] pos, int paint);
+
@Override
public void drawRect(float left, float top, float right, float bottom, Paint paint) {
int modifiers = setupModifiers(paint);
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 93a9d50..c54d09e 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -229,4 +229,9 @@
* Device has a software navigation bar (separate from the status bar).
*/
boolean hasNavigationBar();
+
+ /**
+ * Lock the device immediately.
+ */
+ void lockNow();
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 1505ecd..8cac57d 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4107,7 +4107,7 @@
*/
void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
event.setSource(this);
- event.setClassName(getClass().getName());
+ event.setClassName(View.class.getName());
event.setPackageName(getContext().getPackageName());
event.setEnabled(isEnabled());
event.setContentDescription(mContentDescription);
@@ -4212,7 +4212,7 @@
}
info.setPackageName(mContext.getPackageName());
- info.setClassName(getClass().getName());
+ info.setClassName(View.class.getName());
info.setContentDescription(getContentDescription());
info.setEnabled(isEnabled());
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 09901ff..5c63366 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2229,6 +2229,7 @@
@Override
void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoInternal(info);
+ info.setClassName(ViewGroup.class.getName());
for (int i = 0, count = mChildrenCount; i < count; i++) {
View child = mChildren[i];
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE
@@ -2238,6 +2239,12 @@
}
}
+ @Override
+ void onInitializeAccessibilityEventInternal(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEventInternal(event);
+ event.setClassName(ViewGroup.class.getName());
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 994565a..6ec2e8d 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -1029,6 +1029,11 @@
public boolean hasNavigationBar();
/**
+ * Lock the device now.
+ */
+ public void lockNow();
+
+ /**
* Print the WindowManagerPolicy's state into the given stream.
*
* @param prefix Text to print at the front of each line.
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index c3c74a7..c28b220 100755
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -21,6 +21,7 @@
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
+import android.util.FloatMath;
import android.util.Log;
import android.util.Slog;
@@ -48,6 +49,8 @@
private static final boolean DEBUG = false;
private static final boolean localLOGV = DEBUG || false;
+ private static final boolean USE_GRAVITY_SENSOR = false;
+
private SensorManager mSensorManager;
private boolean mEnabled;
private int mRate;
@@ -79,7 +82,8 @@
private WindowOrientationListener(Context context, int rate) {
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
mRate = rate;
- mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+ mSensor = mSensorManager.getDefaultSensor(USE_GRAVITY_SENSOR
+ ? Sensor.TYPE_GRAVITY : Sensor.TYPE_ACCELEROMETER);
if (mSensor != null) {
// Create listener only if sensors do exist
mSensorEventListener = new SensorEventListenerImpl(this);
@@ -179,7 +183,7 @@
* cartesian space because the orientation calculations are sensitive to the
* absolute magnitude of the acceleration. In particular, there are singularities
* in the calculation as the magnitude approaches 0. By performing the low-pass
- * filtering early, we can eliminate high-frequency impulses systematically.
+ * filtering early, we can eliminate most spurious high-frequency impulses due to noise.
*
* - Convert the acceleromter vector from cartesian to spherical coordinates.
* Since we're dealing with rotation of the device, this is the sensible coordinate
@@ -204,11 +208,17 @@
* new orientation proposal.
*
* Details are explained inline.
+ *
+ * See http://en.wikipedia.org/wiki/Low-pass_filter#Discrete-time_realization for
+ * signal processing background.
*/
static final class SensorEventListenerImpl implements SensorEventListener {
// We work with all angles in degrees in this class.
private static final float RADIANS_TO_DEGREES = (float) (180 / Math.PI);
+ // Number of nanoseconds per millisecond.
+ private static final long NANOS_PER_MS = 1000000;
+
// Indices into SensorEvent.values for the accelerometer sensor.
private static final int ACCELEROMETER_DATA_X = 0;
private static final int ACCELEROMETER_DATA_Y = 1;
@@ -216,38 +226,41 @@
private final WindowOrientationListener mOrientationListener;
- /* State for first order low-pass filtering of accelerometer data.
- * See http://en.wikipedia.org/wiki/Low-pass_filter#Discrete-time_realization for
- * signal processing background.
- */
+ // The minimum amount of time that a predicted rotation must be stable before it
+ // is accepted as a valid rotation proposal. This value can be quite small because
+ // the low-pass filter already suppresses most of the noise so we're really just
+ // looking for quick confirmation that the last few samples are in agreement as to
+ // the desired orientation.
+ private static final long PROPOSAL_SETTLE_TIME_NANOS = 40 * NANOS_PER_MS;
- private long mLastTimestamp = Long.MAX_VALUE; // in nanoseconds
- private float mLastFilteredX, mLastFilteredY, mLastFilteredZ;
+ // The minimum amount of time that must have elapsed since the device last exited
+ // the flat state (time since it was picked up) before the proposed rotation
+ // can change.
+ private static final long PROPOSAL_MIN_TIME_SINCE_FLAT_ENDED_NANOS = 500 * NANOS_PER_MS;
- // The current proposal. We wait for the proposal to be stable for a
- // certain amount of time before accepting it.
- //
- // The basic idea is to ignore intermediate poses of the device while the
- // user is picking up, putting down or turning the device.
- private int mProposalRotation;
- private long mProposalAgeMS;
+ // The mininum amount of time that must have elapsed since the device stopped
+ // swinging (time since device appeared to be in the process of being put down
+ // or put away into a pocket) before the proposed rotation can change.
+ private static final long PROPOSAL_MIN_TIME_SINCE_SWING_ENDED_NANOS = 300 * NANOS_PER_MS;
- // A historical trace of tilt and orientation angles. Used to determine whether
- // the device posture has settled down.
- private static final int HISTORY_SIZE = 20;
- private int mHistoryIndex; // index of most recent sample
- private int mHistoryLength; // length of historical trace
- private final long[] mHistoryTimestampMS = new long[HISTORY_SIZE];
- private final float[] mHistoryMagnitudes = new float[HISTORY_SIZE];
- private final int[] mHistoryTiltAngles = new int[HISTORY_SIZE];
- private final int[] mHistoryOrientationAngles = new int[HISTORY_SIZE];
+ // If the tilt angle remains greater than the specified angle for a minimum of
+ // the specified time, then the device is deemed to be lying flat
+ // (just chillin' on a table).
+ private static final float FLAT_ANGLE = 75;
+ private static final long FLAT_TIME_NANOS = 1000 * NANOS_PER_MS;
+
+ // If the tilt angle has increased by at least delta degrees within the specified amount
+ // of time, then the device is deemed to be swinging away from the user
+ // down towards flat (tilt = 90).
+ private static final float SWING_AWAY_ANGLE_DELTA = 20;
+ private static final long SWING_TIME_NANOS = 300 * NANOS_PER_MS;
// The maximum sample inter-arrival time in milliseconds.
// If the acceleration samples are further apart than this amount in time, we reset the
// state of the low-pass filter and orientation properties. This helps to handle
// boundary conditions when the device is turned on, wakes from suspend or there is
// a significant gap in samples.
- private static final float MAX_FILTER_DELTA_TIME_MS = 1000;
+ private static final long MAX_FILTER_DELTA_TIME_NANOS = 1000 * NANOS_PER_MS;
// The acceleration filter time constant.
//
@@ -267,8 +280,10 @@
//
// Filtering adds latency proportional the time constant (inversely proportional
// to the cutoff frequency) so we don't want to make the time constant too
- // large or we can lose responsiveness.
- private static final float FILTER_TIME_CONSTANT_MS = 100.0f;
+ // large or we can lose responsiveness. Likewise we don't want to make it too
+ // small or we do a poor job suppressing acceleration spikes.
+ // Empirically, 100ms seems to be too small and 500ms is too large.
+ private static final float FILTER_TIME_CONSTANT_MS = 200.0f;
/* State for orientation detection. */
@@ -286,9 +301,9 @@
//
// In both cases, we postpone choosing an orientation.
private static final float MIN_ACCELERATION_MAGNITUDE =
- SensorManager.STANDARD_GRAVITY * 0.5f;
+ SensorManager.STANDARD_GRAVITY * 0.3f;
private static final float MAX_ACCELERATION_MAGNITUDE =
- SensorManager.STANDARD_GRAVITY * 1.5f;
+ SensorManager.STANDARD_GRAVITY * 1.25f;
// Maximum absolute tilt angle at which to consider orientation data. Beyond this (i.e.
// when screen is facing the sky or ground), we completely ignore orientation data.
@@ -306,10 +321,10 @@
// The ideal tilt angle is 0 (when the device is vertical) so the limits establish
// how close to vertical the device must be in order to change orientation.
private static final int[][] TILT_TOLERANCE = new int[][] {
- /* ROTATION_0 */ { -20, 70 },
- /* ROTATION_90 */ { -20, 60 },
- /* ROTATION_180 */ { -20, 50 },
- /* ROTATION_270 */ { -20, 60 }
+ /* ROTATION_0 */ { -25, 70 },
+ /* ROTATION_90 */ { -25, 65 },
+ /* ROTATION_180 */ { -25, 60 },
+ /* ROTATION_270 */ { -25, 65 }
};
// The gap angle in degrees between adjacent orientation angles for hysteresis.
@@ -319,29 +334,38 @@
// orientation.
private static final int ADJACENT_ORIENTATION_ANGLE_GAP = 45;
- // The number of milliseconds for which the device posture must be stable
- // before we perform an orientation change. If the device appears to be rotating
- // (being picked up, put down) then we keep waiting until it settles.
- private static final int SETTLE_TIME_MS = 200;
+ // Timestamp and value of the last accelerometer sample.
+ private long mLastFilteredTimestampNanos;
+ private float mLastFilteredX, mLastFilteredY, mLastFilteredZ;
- // The maximum change in magnitude that can occur during the settle time.
- // Tuning this constant particularly helps to filter out situations where the
- // device is being picked up or put down by the user.
- private static final float SETTLE_MAGNITUDE_MAX_DELTA =
- SensorManager.STANDARD_GRAVITY * 0.2f;
+ // The last proposed rotation, -1 if unknown.
+ private int mProposedRotation;
- // The maximum change in tilt angle that can occur during the settle time.
- private static final int SETTLE_TILT_ANGLE_MAX_DELTA = 5;
+ // Value of the current predicted rotation, -1 if unknown.
+ private int mPredictedRotation;
- // The maximum change in orientation angle that can occur during the settle time.
- private static final int SETTLE_ORIENTATION_ANGLE_MAX_DELTA = 5;
+ // Timestamp of when the predicted rotation most recently changed.
+ private long mPredictedRotationTimestampNanos;
+
+ // Timestamp when the device last appeared to be flat for sure (the flat delay elapsed).
+ private long mFlatTimestampNanos;
+
+ // Timestamp when the device last appeared to be swinging.
+ private long mSwingTimestampNanos;
+
+ // History of observed tilt angles.
+ private static final int TILT_HISTORY_SIZE = 40;
+ private float[] mTiltHistory = new float[TILT_HISTORY_SIZE];
+ private long[] mTiltHistoryTimestampNanos = new long[TILT_HISTORY_SIZE];
+ private int mTiltHistoryIndex;
public SensorEventListenerImpl(WindowOrientationListener orientationListener) {
mOrientationListener = orientationListener;
+ reset();
}
public int getProposedRotation() {
- return mProposalAgeMS >= SETTLE_TIME_MS ? mProposalRotation : -1;
+ return mProposedRotation;
}
@Override
@@ -359,8 +383,9 @@
float z = event.values[ACCELEROMETER_DATA_Z];
if (log) {
- Slog.v(TAG, "Raw acceleration vector: " +
- "x=" + x + ", y=" + y + ", z=" + z);
+ Slog.v(TAG, "Raw acceleration vector: "
+ + "x=" + x + ", y=" + y + ", z=" + z
+ + ", magnitude=" + FloatMath.sqrt(x * x + y * y + z * z));
}
// Apply a low-pass filter to the acceleration up vector in cartesian space.
@@ -368,14 +393,16 @@
// or when we see values of (0, 0, 0) which indicates that we polled the
// accelerometer too soon after turning it on and we don't have any data yet.
final long now = event.timestamp;
- final float timeDeltaMS = (now - mLastTimestamp) * 0.000001f;
- boolean skipSample;
- if (timeDeltaMS <= 0 || timeDeltaMS > MAX_FILTER_DELTA_TIME_MS
+ final long then = mLastFilteredTimestampNanos;
+ final float timeDeltaMS = (now - then) * 0.000001f;
+ final boolean skipSample;
+ if (now < then
+ || now > then + MAX_FILTER_DELTA_TIME_NANOS
|| (x == 0 && y == 0 && z == 0)) {
if (log) {
Slog.v(TAG, "Resetting orientation listener.");
}
- clearProposal();
+ reset();
skipSample = true;
} else {
final float alpha = timeDeltaMS / (FILTER_TIME_CONSTANT_MS + timeDeltaMS);
@@ -383,27 +410,28 @@
y = alpha * (y - mLastFilteredY) + mLastFilteredY;
z = alpha * (z - mLastFilteredZ) + mLastFilteredZ;
if (log) {
- Slog.v(TAG, "Filtered acceleration vector: " +
- "x=" + x + ", y=" + y + ", z=" + z);
+ Slog.v(TAG, "Filtered acceleration vector: "
+ + "x=" + x + ", y=" + y + ", z=" + z
+ + ", magnitude=" + FloatMath.sqrt(x * x + y * y + z * z));
}
skipSample = false;
}
- mLastTimestamp = now;
+ mLastFilteredTimestampNanos = now;
mLastFilteredX = x;
mLastFilteredY = y;
mLastFilteredZ = z;
- final int oldProposedRotation = getProposedRotation();
+ boolean isFlat = false;
+ boolean isSwinging = false;
if (!skipSample) {
// Calculate the magnitude of the acceleration vector.
- final float magnitude = (float) Math.sqrt(x * x + y * y + z * z);
+ final float magnitude = FloatMath.sqrt(x * x + y * y + z * z);
if (magnitude < MIN_ACCELERATION_MAGNITUDE
|| magnitude > MAX_ACCELERATION_MAGNITUDE) {
if (log) {
- Slog.v(TAG, "Ignoring sensor data, magnitude out of range: "
- + "magnitude=" + magnitude);
+ Slog.v(TAG, "Ignoring sensor data, magnitude out of range.");
}
- clearProposal();
+ clearPredictedRotation();
} else {
// Calculate the tilt angle.
// This is the angle between the up vector and the x-y plane (the plane of
@@ -414,14 +442,25 @@
final int tiltAngle = (int) Math.round(
Math.asin(z / magnitude) * RADIANS_TO_DEGREES);
+ // Determine whether the device appears to be flat or swinging.
+ if (isFlat(now)) {
+ isFlat = true;
+ mFlatTimestampNanos = now;
+ }
+ if (isSwinging(now, tiltAngle)) {
+ isSwinging = true;
+ mSwingTimestampNanos = now;
+ }
+ addTiltHistoryEntry(now, tiltAngle);
+
// If the tilt angle is too close to horizontal then we cannot determine
// the orientation angle of the screen.
if (Math.abs(tiltAngle) > MAX_TILT) {
if (log) {
Slog.v(TAG, "Ignoring sensor data, tilt angle too high: "
- + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle);
+ + "tiltAngle=" + tiltAngle);
}
- clearProposal();
+ clearPredictedRotation();
} else {
// Calculate the orientation angle.
// This is the angle between the x-y projection of the up vector onto
@@ -439,89 +478,93 @@
nearestRotation = 0;
}
- // Determine the proposed orientation.
- // The confidence of the proposal is 1.0 when it is ideal and it
- // decays exponentially as the proposal moves further from the ideal
- // angle, tilt and magnitude of the proposed orientation.
- if (!isTiltAngleAcceptable(nearestRotation, tiltAngle)
- || !isOrientationAngleAcceptable(nearestRotation,
+ // Determine the predicted orientation.
+ if (isTiltAngleAcceptable(nearestRotation, tiltAngle)
+ && isOrientationAngleAcceptable(nearestRotation,
orientationAngle)) {
+ updatePredictedRotation(now, nearestRotation);
if (log) {
- Slog.v(TAG, "Ignoring sensor data, no proposal: "
- + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle
- + ", orientationAngle=" + orientationAngle);
+ Slog.v(TAG, "Predicted: "
+ + "tiltAngle=" + tiltAngle
+ + ", orientationAngle=" + orientationAngle
+ + ", predictedRotation=" + mPredictedRotation
+ + ", predictedRotationAgeMS="
+ + ((now - mPredictedRotationTimestampNanos)
+ * 0.000001f));
}
- clearProposal();
} else {
if (log) {
- Slog.v(TAG, "Proposal: "
- + "magnitude=" + magnitude
- + ", tiltAngle=" + tiltAngle
- + ", orientationAngle=" + orientationAngle
- + ", proposalRotation=" + mProposalRotation);
+ Slog.v(TAG, "Ignoring sensor data, no predicted rotation: "
+ + "tiltAngle=" + tiltAngle
+ + ", orientationAngle=" + orientationAngle);
}
- updateProposal(nearestRotation, now / 1000000L,
- magnitude, tiltAngle, orientationAngle);
+ clearPredictedRotation();
}
}
}
}
+ // Determine new proposed rotation.
+ final int oldProposedRotation = mProposedRotation;
+ if (mPredictedRotation < 0 || isPredictedRotationAcceptable(now)) {
+ mProposedRotation = mPredictedRotation;
+ }
+
// Write final statistics about where we are in the orientation detection process.
- final int proposedRotation = getProposedRotation();
if (log) {
- final float proposalConfidence = Math.min(
- mProposalAgeMS * 1.0f / SETTLE_TIME_MS, 1.0f);
Slog.v(TAG, "Result: currentRotation=" + mOrientationListener.mCurrentRotation
- + ", proposedRotation=" + proposedRotation
+ + ", proposedRotation=" + mProposedRotation
+ + ", predictedRotation=" + mPredictedRotation
+ ", timeDeltaMS=" + timeDeltaMS
- + ", proposalRotation=" + mProposalRotation
- + ", proposalAgeMS=" + mProposalAgeMS
- + ", proposalConfidence=" + proposalConfidence);
+ + ", isFlat=" + isFlat
+ + ", isSwinging=" + isSwinging
+ + ", timeUntilSettledMS=" + remainingMS(now,
+ mPredictedRotationTimestampNanos + PROPOSAL_SETTLE_TIME_NANOS)
+ + ", timeUntilFlatDelayExpiredMS=" + remainingMS(now,
+ mFlatTimestampNanos + PROPOSAL_MIN_TIME_SINCE_FLAT_ENDED_NANOS)
+ + ", timeUntilSwingDelayExpiredMS=" + remainingMS(now,
+ mSwingTimestampNanos + PROPOSAL_MIN_TIME_SINCE_SWING_ENDED_NANOS));
}
// Tell the listener.
- if (proposedRotation != oldProposedRotation && proposedRotation >= 0) {
+ if (mProposedRotation != oldProposedRotation && mProposedRotation >= 0) {
if (log) {
- Slog.v(TAG, "Proposed rotation changed! proposedRotation=" + proposedRotation
+ Slog.v(TAG, "Proposed rotation changed! proposedRotation=" + mProposedRotation
+ ", oldProposedRotation=" + oldProposedRotation);
}
- mOrientationListener.onProposedRotationChanged(proposedRotation);
+ mOrientationListener.onProposedRotationChanged(mProposedRotation);
}
}
/**
- * Returns true if the tilt angle is acceptable for a proposed
- * orientation transition.
+ * Returns true if the tilt angle is acceptable for a given predicted rotation.
*/
- private boolean isTiltAngleAcceptable(int proposedRotation,
- int tiltAngle) {
- return tiltAngle >= TILT_TOLERANCE[proposedRotation][0]
- && tiltAngle <= TILT_TOLERANCE[proposedRotation][1];
+ private boolean isTiltAngleAcceptable(int rotation, int tiltAngle) {
+ return tiltAngle >= TILT_TOLERANCE[rotation][0]
+ && tiltAngle <= TILT_TOLERANCE[rotation][1];
}
/**
- * Returns true if the orientation angle is acceptable for a proposed
- * orientation transition.
+ * Returns true if the orientation angle is acceptable for a given predicted rotation.
*
* This function takes into account the gap between adjacent orientations
* for hysteresis.
*/
- private boolean isOrientationAngleAcceptable(int proposedRotation, int orientationAngle) {
+ private boolean isOrientationAngleAcceptable(int rotation, int orientationAngle) {
// If there is no current rotation, then there is no gap.
// The gap is used only to introduce hysteresis among advertised orientation
// changes to avoid flapping.
final int currentRotation = mOrientationListener.mCurrentRotation;
if (currentRotation >= 0) {
- // If the proposed rotation is the same or is counter-clockwise adjacent,
- // then we set a lower bound on the orientation angle.
+ // If the specified rotation is the same or is counter-clockwise adjacent
+ // to the current rotation, then we set a lower bound on the orientation angle.
// For example, if currentRotation is ROTATION_0 and proposed is ROTATION_90,
// then we want to check orientationAngle > 45 + GAP / 2.
- if (proposedRotation == currentRotation
- || proposedRotation == (currentRotation + 1) % 4) {
- int lowerBound = proposedRotation * 90 - 45
+ if (rotation == currentRotation
+ || rotation == (currentRotation + 1) % 4) {
+ int lowerBound = rotation * 90 - 45
+ ADJACENT_ORIENTATION_ANGLE_GAP / 2;
- if (proposedRotation == 0) {
+ if (rotation == 0) {
if (orientationAngle >= 315 && orientationAngle < lowerBound + 360) {
return false;
}
@@ -532,15 +575,15 @@
}
}
- // If the proposed rotation is the same or is clockwise adjacent,
+ // If the specified rotation is the same or is clockwise adjacent,
// then we set an upper bound on the orientation angle.
- // For example, if currentRotation is ROTATION_0 and proposed is ROTATION_270,
+ // For example, if currentRotation is ROTATION_0 and rotation is ROTATION_270,
// then we want to check orientationAngle < 315 - GAP / 2.
- if (proposedRotation == currentRotation
- || proposedRotation == (currentRotation + 3) % 4) {
- int upperBound = proposedRotation * 90 + 45
+ if (rotation == currentRotation
+ || rotation == (currentRotation + 3) % 4) {
+ int upperBound = rotation * 90 + 45
- ADJACENT_ORIENTATION_ANGLE_GAP / 2;
- if (proposedRotation == 0) {
+ if (rotation == 0) {
if (orientationAngle <= 45 && orientationAngle > upperBound) {
return false;
}
@@ -554,58 +597,97 @@
return true;
}
- private void clearProposal() {
- mProposalRotation = -1;
- mProposalAgeMS = 0;
+ /**
+ * Returns true if the predicted rotation is ready to be advertised as a
+ * proposed rotation.
+ */
+ private boolean isPredictedRotationAcceptable(long now) {
+ // The predicted rotation must have settled long enough.
+ if (now < mPredictedRotationTimestampNanos + PROPOSAL_SETTLE_TIME_NANOS) {
+ return false;
+ }
+
+ // The last flat state (time since picked up) must have been sufficiently long ago.
+ if (now < mFlatTimestampNanos + PROPOSAL_MIN_TIME_SINCE_FLAT_ENDED_NANOS) {
+ return false;
+ }
+
+ // The last swing state (time since last movement to put down) must have been
+ // sufficiently long ago.
+ if (now < mSwingTimestampNanos + PROPOSAL_MIN_TIME_SINCE_SWING_ENDED_NANOS) {
+ return false;
+ }
+
+ // Looks good!
+ return true;
}
- private void updateProposal(int rotation, long timestampMS,
- float magnitude, int tiltAngle, int orientationAngle) {
- if (mProposalRotation != rotation) {
- mProposalRotation = rotation;
- mHistoryIndex = 0;
- mHistoryLength = 0;
- }
-
- final int index = mHistoryIndex;
- mHistoryTimestampMS[index] = timestampMS;
- mHistoryMagnitudes[index] = magnitude;
- mHistoryTiltAngles[index] = tiltAngle;
- mHistoryOrientationAngles[index] = orientationAngle;
- mHistoryIndex = (index + 1) % HISTORY_SIZE;
- if (mHistoryLength < HISTORY_SIZE) {
- mHistoryLength += 1;
- }
-
- long age = 0;
- for (int i = 1; i < mHistoryLength; i++) {
- final int olderIndex = (index + HISTORY_SIZE - i) % HISTORY_SIZE;
- if (Math.abs(mHistoryMagnitudes[olderIndex] - magnitude)
- > SETTLE_MAGNITUDE_MAX_DELTA) {
- break;
- }
- if (angleAbsoluteDelta(mHistoryTiltAngles[olderIndex],
- tiltAngle) > SETTLE_TILT_ANGLE_MAX_DELTA) {
- break;
- }
- if (angleAbsoluteDelta(mHistoryOrientationAngles[olderIndex],
- orientationAngle) > SETTLE_ORIENTATION_ANGLE_MAX_DELTA) {
- break;
- }
- age = timestampMS - mHistoryTimestampMS[olderIndex];
- if (age >= SETTLE_TIME_MS) {
- break;
- }
- }
- mProposalAgeMS = age;
+ private void reset() {
+ mLastFilteredTimestampNanos = Long.MIN_VALUE;
+ mProposedRotation = -1;
+ mFlatTimestampNanos = Long.MIN_VALUE;
+ mSwingTimestampNanos = Long.MIN_VALUE;
+ clearPredictedRotation();
+ clearTiltHistory();
}
- private static int angleAbsoluteDelta(int a, int b) {
- int delta = Math.abs(a - b);
- if (delta > 180) {
- delta = 360 - delta;
+ private void clearPredictedRotation() {
+ mPredictedRotation = -1;
+ mPredictedRotationTimestampNanos = Long.MIN_VALUE;
+ }
+
+ private void updatePredictedRotation(long now, int rotation) {
+ if (mPredictedRotation != rotation) {
+ mPredictedRotation = rotation;
+ mPredictedRotationTimestampNanos = now;
}
- return delta;
+ }
+
+ private void clearTiltHistory() {
+ mTiltHistoryTimestampNanos[0] = Long.MIN_VALUE;
+ mTiltHistoryIndex = 1;
+ }
+
+ private void addTiltHistoryEntry(long now, float tilt) {
+ mTiltHistory[mTiltHistoryIndex] = tilt;
+ mTiltHistoryTimestampNanos[mTiltHistoryIndex] = now;
+ mTiltHistoryIndex = (mTiltHistoryIndex + 1) % TILT_HISTORY_SIZE;
+ mTiltHistoryTimestampNanos[mTiltHistoryIndex] = Long.MIN_VALUE;
+ }
+
+ private boolean isFlat(long now) {
+ for (int i = mTiltHistoryIndex; (i = nextTiltHistoryIndex(i)) >= 0; ) {
+ if (mTiltHistory[i] < FLAT_ANGLE) {
+ break;
+ }
+ if (mTiltHistoryTimestampNanos[i] + FLAT_TIME_NANOS <= now) {
+ // Tilt has remained greater than FLAT_TILT_ANGLE for FLAT_TIME_NANOS.
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isSwinging(long now, float tilt) {
+ for (int i = mTiltHistoryIndex; (i = nextTiltHistoryIndex(i)) >= 0; ) {
+ if (mTiltHistoryTimestampNanos[i] + SWING_TIME_NANOS < now) {
+ break;
+ }
+ if (mTiltHistory[i] + SWING_AWAY_ANGLE_DELTA <= tilt) {
+ // Tilted away by SWING_AWAY_ANGLE_DELTA within SWING_TIME_NANOS.
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private int nextTiltHistoryIndex(int index) {
+ index = (index == 0 ? TILT_HISTORY_SIZE : index) - 1;
+ return mTiltHistoryTimestampNanos[index] != Long.MIN_VALUE ? index : -1;
+ }
+
+ private static float remainingMS(long now, long until) {
+ return now >= until ? 0 : (until - now) * 0.000001f;
}
}
}
diff --git a/core/java/android/webkit/HTML5VideoFullScreen.java b/core/java/android/webkit/HTML5VideoFullScreen.java
index 21364c1a..bc0557e 100644
--- a/core/java/android/webkit/HTML5VideoFullScreen.java
+++ b/core/java/android/webkit/HTML5VideoFullScreen.java
@@ -198,6 +198,10 @@
// Call into the native to ask for the state, if still in play mode,
// this will trigger the video to play.
mProxy.dispatchOnRestoreState();
+
+ if (getStartWhenPrepared()) {
+ mPlayer.start();
+ }
}
public boolean fullScreenExited() {
diff --git a/core/java/android/webkit/HTML5VideoView.java b/core/java/android/webkit/HTML5VideoView.java
index 1d8bda7..73166cb 100644
--- a/core/java/android/webkit/HTML5VideoView.java
+++ b/core/java/android/webkit/HTML5VideoView.java
@@ -194,6 +194,25 @@
mPlayer.setOnInfoListener(proxy);
}
+ public void prepareDataCommon(HTML5VideoViewProxy proxy) {
+ try {
+ mPlayer.setDataSource(proxy.getContext(), mUri, mHeaders);
+ mPlayer.prepareAsync();
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ mCurrentState = STATE_NOTPREPARED;
+ }
+
+ public void reprepareData(HTML5VideoViewProxy proxy) {
+ mPlayer.reset();
+ prepareDataCommon(proxy);
+ }
+
// Normally called immediately after setVideoURI. But for full screen,
// this should be after surface holder created
public void prepareDataAndDisplayMode(HTML5VideoViewProxy proxy) {
@@ -204,19 +223,8 @@
setOnPreparedListener(proxy);
setOnErrorListener(proxy);
setOnInfoListener(proxy);
- // When there is exception, we could just bail out silently.
- // No Video will be played though. Write the stack for debug
- try {
- mPlayer.setDataSource(mProxy.getContext(), mUri, mHeaders);
- mPlayer.prepareAsync();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- mCurrentState = STATE_NOTPREPARED;
+
+ prepareDataCommon(proxy);
}
@@ -324,4 +332,14 @@
return false;
}
+ private boolean m_startWhenPrepared = false;
+
+ public void setStartWhenPrepared(boolean willPlay) {
+ m_startWhenPrepared = willPlay;
+ }
+
+ public boolean getStartWhenPrepared() {
+ return m_startWhenPrepared;
+ }
+
}
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index 7c2dc38..d306c86 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -162,6 +162,16 @@
mHTML5VideoView.enterFullScreenVideoState(layerId, proxy, webView);
}
+ public static void exitFullScreenVideo(HTML5VideoViewProxy proxy,
+ WebView webView) {
+ if (!mHTML5VideoView.fullScreenExited() && mHTML5VideoView.isFullScreenMode()) {
+ WebChromeClient client = webView.getWebChromeClient();
+ if (client != null) {
+ client.onHideCustomView();
+ }
+ }
+ }
+
// This is on the UI thread.
// When native tell Java to play, we need to check whether or not it is
// still the same video by using videoLayerId and treat it differently.
@@ -172,6 +182,21 @@
if (mHTML5VideoView != null) {
currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
backFromFullScreenMode = mHTML5VideoView.fullScreenExited();
+
+ // When playing video back to back in full screen mode,
+ // javascript will switch the src and call play.
+ // In this case, we can just reuse the same full screen view,
+ // and play the video after prepared.
+ if (mHTML5VideoView.isFullScreenMode()
+ && !backFromFullScreenMode
+ && currentVideoLayerId != videoLayerId
+ && mCurrentProxy != proxy) {
+ mCurrentProxy = proxy;
+ mHTML5VideoView.setStartWhenPrepared(true);
+ mHTML5VideoView.setVideoURI(url, proxy);
+ mHTML5VideoView.reprepareData(proxy);
+ return;
+ }
}
if (backFromFullScreenMode
@@ -682,6 +707,10 @@
VideoPlayer.enterFullScreenVideo(layerId, url, this, mWebView);
}
+ public void exitFullScreenVideo() {
+ VideoPlayer.exitFullScreenVideo(this, mWebView);
+ }
+
/**
* The factory for HTML5VideoViewProxy instances.
* @param webViewCore is the WebViewCore that is requesting the proxy.
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 770f8ac..69c15a6 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -422,7 +422,7 @@
private final Rect mViewRectViewport = new Rect();
private final RectF mVisibleContentRect = new RectF();
private boolean mGLViewportEmpty = false;
- WebViewInputConnection mInputConnection = new WebViewInputConnection();
+ WebViewInputConnection mInputConnection = null;
/**
@@ -712,13 +712,11 @@
static boolean sDisableNavcache = false;
// the color used to highlight the touch rectangles
- private static final int HIGHLIGHT_COLOR = 0x6633b5e5;
- // the round corner for the highlight path
- private static final float TOUCH_HIGHLIGHT_ARC = 5.0f;
+ static final int HIGHLIGHT_COLOR = 0x6633b5e5;
// the region indicating where the user touched on the screen
private Region mTouchHighlightRegion = new Region();
// the paint for the touch highlight
- private Paint mTouchHightlightPaint;
+ private Paint mTouchHightlightPaint = new Paint();
// debug only
private static final boolean DEBUG_TOUCH_HIGHLIGHT = true;
private static final int TOUCH_HIGHLIGHT_ELAPSE_TIME = 2000;
@@ -797,6 +795,7 @@
static final int ENTER_FULLSCREEN_VIDEO = 137;
static final int UPDATE_SELECTION = 138;
static final int UPDATE_ZOOM_DENSITY = 139;
+ static final int EXIT_FULLSCREEN_VIDEO = 140;
private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID;
private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT;
@@ -4429,10 +4428,6 @@
Rect r = mTouchHighlightRegion.getBounds();
postInvalidateDelayed(delay, r.left, r.top, r.right, r.bottom);
} else {
- if (mTouchHightlightPaint == null) {
- mTouchHightlightPaint = new Paint();
- mTouchHightlightPaint.setColor(HIGHLIGHT_COLOR);
- }
RegionIterator iter = new RegionIterator(mTouchHighlightRegion);
Rect r = new Rect();
while (iter.next(r)) {
@@ -4947,15 +4942,13 @@
}
@Override
- public boolean onCheckIsTextEditor() {
- return true;
- }
-
- @Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN
| EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_VARIATION_NORMAL;
+ if (mInputConnection == null) {
+ mInputConnection = new WebViewInputConnection();
+ }
return mInputConnection;
}
@@ -8772,6 +8765,12 @@
}
break;
+ case EXIT_FULLSCREEN_VIDEO:
+ if (mHTML5VideoViewProxy != null) {
+ mHTML5VideoViewProxy.exitFullScreenVideo();
+ }
+ break;
+
case SHOW_FULLSCREEN: {
View view = (View) msg.obj;
int orientation = msg.arg1;
@@ -8867,7 +8866,7 @@
case HIT_TEST_RESULT:
WebKitHitTest hit = (WebKitHitTest) msg.obj;
mFocusedNode = hit;
- setTouchHighlightRects(hit != null ? hit.mTouchRects : null);
+ setTouchHighlightRects(hit);
if (hit == null) {
mInitialHitTestResult = null;
} else {
@@ -8922,12 +8921,14 @@
}
}
- private void setTouchHighlightRects(Rect[] rects) {
+ private void setTouchHighlightRects(WebKitHitTest hit) {
+ Rect[] rects = hit != null ? hit.mTouchRects : null;
if (!mTouchHighlightRegion.isEmpty()) {
invalidate(mTouchHighlightRegion.getBounds());
mTouchHighlightRegion.setEmpty();
}
if (rects != null) {
+ mTouchHightlightPaint.setColor(hit.mTapHighlightColor);
for (Rect rect : rects) {
Rect viewRect = contentToViewRect(rect);
// some sites, like stories in nytimes.com, set
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index fb9c98a..c4981e1 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -504,6 +504,17 @@
}
/**
+ * Notify the webview that we want to exit the video fullscreen.
+ * This is called through JNI by webcore.
+ */
+ protected void exitFullscreenVideo() {
+ if (mWebView == null) return;
+ Message message = Message.obtain(mWebView.mPrivateHandler,
+ WebView.EXIT_FULLSCREEN_VIDEO);
+ message.sendToTarget();
+ }
+
+ /**
* Clear the picture set. To be called only on the WebCore thread.
*/
/* package */ void clearContent() {
@@ -870,6 +881,7 @@
String mTitle;
Rect[] mTouchRects;
boolean mEditable;
+ int mTapHighlightColor = WebView.HIGHLIGHT_COLOR;
// These are the input values that produced this hit test
int mHitTestX;
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 38bb2e1..e94b1cb 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -20,7 +20,6 @@
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -1297,6 +1296,18 @@
super.sendAccessibilityEvent(eventType);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AbsListView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AbsListView.class.getName());
+ }
+
/**
* Indicates whether the children's drawing cache is used during a scroll.
* By default, the drawing cache is enabled but this will consume more memory.
@@ -5572,6 +5583,16 @@
}
/**
+ * Hints the RemoteViewsAdapter, if it exists, about which views are currently
+ * being displayed by the AbsListView.
+ */
+ void setVisibleRangeHint(int start, int end) {
+ if (mRemoteAdapter != null) {
+ mRemoteAdapter.setVisibleRangeHint(start, end);
+ }
+ }
+
+ /**
* Sets the recycler listener to be notified whenever a View is set aside in
* the recycler for later reuse. This listener can be used to free resources
* associated to the View.
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index bdaf89e..e36afa3 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -25,6 +25,8 @@
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
public abstract class AbsSeekBar extends ProgressBar {
private Drawable mThumb;
@@ -464,4 +466,15 @@
return super.onKeyDown(keyCode, event);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AbsSeekBar.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AbsSeekBar.class.getName());
+ }
}
diff --git a/core/java/android/widget/AbsSpinner.java b/core/java/android/widget/AbsSpinner.java
index 3d79205..efdfae3 100644
--- a/core/java/android/widget/AbsSpinner.java
+++ b/core/java/android/widget/AbsSpinner.java
@@ -28,6 +28,8 @@
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* An abstract base class for spinner widgets. SDK users will probably not
@@ -40,7 +42,6 @@
int mHeightMeasureSpec;
int mWidthMeasureSpec;
- boolean mBlockLayoutRequests;
int mSelectionLeftPadding = 0;
int mSelectionTopPadding = 0;
@@ -463,4 +464,16 @@
scrapHeap.clear();
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AbsSpinner.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AbsSpinner.class.getName());
+ }
}
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 40df168..97a864c 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -913,6 +913,7 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AdapterView.class.getName());
info.setScrollable(isScrollableForAccessibility());
View selectedView = getSelectedView();
if (selectedView != null) {
@@ -923,6 +924,7 @@
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AdapterView.class.getName());
event.setScrollable(isScrollableForAccessibility());
View selectedView = getSelectedView();
if (selectedView != null) {
diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java
index c83c780..e226d37 100644
--- a/core/java/android/widget/AdapterViewAnimator.java
+++ b/core/java/android/widget/AdapterViewAnimator.java
@@ -29,6 +29,8 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import java.util.ArrayList;
import java.util.HashMap;
@@ -555,6 +557,9 @@
mCurrentWindowStart = newWindowStart;
mCurrentWindowEnd = newWindowEnd;
mCurrentWindowStartUnbounded = newWindowStartUnbounded;
+ if (mRemoteViewsAdapter != null) {
+ mRemoteViewsAdapter.setVisibleRangeHint(mCurrentWindowStart, mCurrentWindowEnd);
+ }
}
requestLayout();
invalidate();
@@ -1045,4 +1050,16 @@
*/
public void fyiWillBeAdvancedByHostKThx() {
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AdapterViewAnimator.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AdapterViewAnimator.class.getName());
+ }
}
diff --git a/core/java/android/widget/AdapterViewFlipper.java b/core/java/android/widget/AdapterViewFlipper.java
index 4419886..5096227 100644
--- a/core/java/android/widget/AdapterViewFlipper.java
+++ b/core/java/android/widget/AdapterViewFlipper.java
@@ -16,7 +16,6 @@
package android.widget;
-import android.animation.ObjectAnimator;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -27,7 +26,8 @@
import android.util.AttributeSet;
import android.util.Log;
import android.view.RemotableViewMethod;
-import android.view.animation.AlphaAnimation;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
/**
@@ -268,4 +268,16 @@
mAdvancedByHost = true;
updateRunning(false);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(AdapterViewFlipper.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(AdapterViewFlipper.class.getName());
+ }
}
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 07523e3..f7a6b272 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -1085,10 +1085,11 @@
for (int i = 0; i < count; i++) {
if (adapter.isEnabled(i)) {
- realCount++;
Object item = adapter.getItem(i);
long id = adapter.getItemId(i);
- completions[i] = new CompletionInfo(id, i, convertSelectionToString(item));
+ completions[realCount] = new CompletionInfo(id, realCount,
+ convertSelectionToString(item));
+ realCount++;
}
}
diff --git a/core/java/android/widget/Button.java b/core/java/android/widget/Button.java
index 8d58a6d..99f4cae 100644
--- a/core/java/android/widget/Button.java
+++ b/core/java/android/widget/Button.java
@@ -18,9 +18,8 @@
import android.content.Context;
import android.util.AttributeSet;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.KeyEvent;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
@@ -107,4 +106,16 @@
public Button(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(Button.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(Button.class.getName());
+ }
}
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index e0403ff..85252af 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -39,6 +39,8 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.AbsListView.OnScrollListener;
import com.android.internal.R;
@@ -431,6 +433,18 @@
setCurrentLocale(newConfig.locale);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(CalendarView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(CalendarView.class.getName());
+ }
+
/**
* Gets the minimal date supported by this {@link CalendarView} in milliseconds
* since January 1, 1970 00:00:00 in {@link TimeZone#getDefault()} time
diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java
index 2788846..0685eea 100644
--- a/core/java/android/widget/CheckBox.java
+++ b/core/java/android/widget/CheckBox.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.R;
@@ -78,4 +79,16 @@
event.getText().add(mContext.getString(R.string.checkbox_not_checked));
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(CheckBox.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(CheckBox.class.getName());
+ }
}
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 0a54743..5c7e5a3 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -220,6 +220,7 @@
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(CheckedTextView.class.getName());
event.setChecked(mChecked);
}
@@ -236,6 +237,7 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(CheckedTextView.class.getName());
info.setChecked(mChecked);
}
}
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java
index 7e66722..0370049 100644
--- a/core/java/android/widget/Chronometer.java
+++ b/core/java/android/widget/Chronometer.java
@@ -25,6 +25,8 @@
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
import java.util.Formatter;
@@ -276,4 +278,16 @@
mOnChronometerTickListener.onChronometerTick(this);
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(Chronometer.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(Chronometer.class.getName());
+ }
}
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index d3cdad8..02c4c4f 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -211,12 +211,14 @@
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(CompoundButton.class.getName());
event.setChecked(mChecked);
}
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(CompoundButton.class.getName());
info.setCheckable(true);
info.setChecked(mChecked);
}
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index 0f462ff..110c8f3 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -31,6 +31,7 @@
import android.view.LayoutInflater;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.NumberPicker.OnValueChangeListener;
@@ -391,6 +392,18 @@
}
@Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(DatePicker.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(DatePicker.class.getName());
+ }
+
+ @Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setCurrentLocale(newConfig.locale);
diff --git a/core/java/android/widget/DigitalClock.java b/core/java/android/widget/DigitalClock.java
index 379883a..add9d9b 100644
--- a/core/java/android/widget/DigitalClock.java
+++ b/core/java/android/widget/DigitalClock.java
@@ -24,6 +24,8 @@
import android.provider.Settings;
import android.text.format.DateFormat;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import java.util.Calendar;
@@ -126,4 +128,16 @@
setFormat();
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(DigitalClock.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(DigitalClock.class.getName());
+ }
}
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index 0da68a4..2fd8768 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -24,6 +24,8 @@
import android.text.method.ArrowKeyMovementMethod;
import android.text.method.MovementMethod;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/*
@@ -114,4 +116,16 @@
}
super.setEllipsize(ellipsis);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(EditText.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(EditText.class.getName());
+ }
}
diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java
index ead9b4f..badfaa7 100644
--- a/core/java/android/widget/ExpandableListView.java
+++ b/core/java/android/widget/ExpandableListView.java
@@ -30,6 +30,8 @@
import android.view.SoundEffectConstants;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ExpandableListConnector.PositionMetadata;
import java.util.ArrayList;
@@ -1167,4 +1169,15 @@
}
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ExpandableListView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ExpandableListView.class.getName());
+ }
}
diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java
index 74a57b00..da98884 100644
--- a/core/java/android/widget/FrameLayout.java
+++ b/core/java/android/widget/FrameLayout.java
@@ -29,6 +29,8 @@
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
@@ -555,6 +557,19 @@
return new LayoutParams(p);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(FrameLayout.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(FrameLayout.class.getName());
+ }
+
/**
* Per-child layout information for layouts that support margins.
* See {@link android.R.styleable#FrameLayout_Layout FrameLayout Layout Attributes}
diff --git a/core/java/android/widget/Gallery.java b/core/java/android/widget/Gallery.java
index 5e37fa8..03fdc39 100644
--- a/core/java/android/widget/Gallery.java
+++ b/core/java/android/widget/Gallery.java
@@ -32,6 +32,8 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Transformation;
import com.android.internal.R;
@@ -1355,6 +1357,18 @@
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(Gallery.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(Gallery.class.getName());
+ }
+
/**
* Responsible for fling behavior. Use {@link #startUsingVelocity(int)} to
* initiate a fling. Each frame of the fling is handled in {@link #run()}.
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index 7cf5168..7d58011 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -27,6 +27,9 @@
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+
import com.android.internal.R;
import java.lang.reflect.Array;
@@ -1041,6 +1044,18 @@
}
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(GridLayout.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(GridLayout.class.getName());
+ }
+
// Inner classes
/*
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 5d406de..be2df8e 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -27,6 +27,8 @@
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.GridLayoutAnimationController;
import android.widget.RemoteViews.RemoteView;
@@ -290,6 +292,7 @@
pos += mNumColumns;
}
+ setVisibleRangeHint(mFirstPosition, mFirstPosition + getChildCount() - 1);
return selectedView;
}
@@ -382,6 +385,7 @@
mFirstPosition = Math.max(0, pos + 1);
}
+ setVisibleRangeHint(mFirstPosition, mFirstPosition + getChildCount() - 1);
return selectedView;
}
@@ -2116,5 +2120,16 @@
}
return result;
}
-}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(GridView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(GridView.class.getName());
+ }
+}
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 1683d20..0b4ebf4 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -721,12 +721,14 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(HorizontalScrollView.class.getName());
info.setScrollable(getScrollRange() > 0);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(HorizontalScrollView.class.getName());
event.setScrollable(getScrollRange() > 0);
event.setScrollX(mScrollX);
event.setScrollY(mScrollY);
diff --git a/core/java/android/widget/ImageButton.java b/core/java/android/widget/ImageButton.java
index d680fad..59a8f28 100644
--- a/core/java/android/widget/ImageButton.java
+++ b/core/java/android/widget/ImageButton.java
@@ -21,6 +21,8 @@
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
import java.util.Map;
@@ -90,4 +92,16 @@
protected boolean onSetAlpha(int alpha) {
return false;
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ImageButton.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ImageButton.class.getName());
+ }
}
diff --git a/core/java/android/widget/ImageSwitcher.java b/core/java/android/widget/ImageSwitcher.java
index bcb750a..c048970 100644
--- a/core/java/android/widget/ImageSwitcher.java
+++ b/core/java/android/widget/ImageSwitcher.java
@@ -16,12 +16,12 @@
package android.widget;
-import java.util.Map;
-
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
public class ImageSwitcher extends ViewSwitcher
@@ -55,5 +55,16 @@
image.setImageDrawable(drawable);
showNext();
}
-}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ImageSwitcher.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ImageSwitcher.class.getName());
+ }
+}
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 73e1273..07ae93b 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -37,6 +37,7 @@
import android.view.View;
import android.view.ViewDebug;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
/**
@@ -1060,4 +1061,16 @@
mDrawable.setVisible(false, false);
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ImageView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ImageView.class.getName());
+ }
}
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 427fd3e..b5deec7 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -27,6 +27,8 @@
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
@@ -1729,7 +1731,19 @@
protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
return p instanceof LinearLayout.LayoutParams;
}
-
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(LinearLayout.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(LinearLayout.class.getName());
+ }
+
/**
* Per-child layout information associated with ViewLinearLayout.
*
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 7f7a3a7..e20d12a 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -32,13 +32,13 @@
import android.util.SparseBooleanArray;
import android.view.FocusFinder;
import android.view.KeyEvent;
-import android.view.MotionEvent;
import android.view.SoundEffectConstants;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
import java.util.ArrayList;
@@ -678,6 +678,7 @@
pos++;
}
+ setVisibleRangeHint(mFirstPosition, mFirstPosition + getChildCount() - 1);
return selectedView;
}
@@ -711,7 +712,7 @@
}
mFirstPosition = pos + 1;
-
+ setVisibleRangeHint(mFirstPosition, mFirstPosition + getChildCount() - 1);
return selectedView;
}
@@ -3609,4 +3610,16 @@
}
return new long[0];
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ListView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ListView.class.getName());
+ }
}
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index f2ea3fc..fc35f05 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -31,6 +31,8 @@
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.SeekBar.OnSeekBarChangeListener;
import com.android.internal.policy.PolicyManager;
@@ -592,6 +594,18 @@
super.setEnabled(enabled);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(MediaController.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(MediaController.class.getName());
+ }
+
private View.OnClickListener mRewListener = new View.OnClickListener() {
public void onClick(View v) {
int pos = mPlayer.getCurrentPosition();
diff --git a/core/java/android/widget/MultiAutoCompleteTextView.java b/core/java/android/widget/MultiAutoCompleteTextView.java
index 134e4c4..0b30c84 100644
--- a/core/java/android/widget/MultiAutoCompleteTextView.java
+++ b/core/java/android/widget/MultiAutoCompleteTextView.java
@@ -23,7 +23,8 @@
import android.text.TextUtils;
import android.text.method.QwertyKeyListener;
import android.util.AttributeSet;
-import android.widget.MultiAutoCompleteTextView.Tokenizer;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* An editable text view, extending {@link AutoCompleteTextView}, that
@@ -196,6 +197,18 @@
editable.replace(start, end, mTokenizer.terminateToken(text));
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(MultiAutoCompleteTextView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(MultiAutoCompleteTextView.class.getName());
+ }
+
public static interface Tokenizer {
/**
* Returns the start of the token that ends at offset
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 7d0f98e..a210f0b 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -47,6 +47,7 @@
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.DecelerateInterpolator;
import android.view.inputmethod.InputMethodManager;
@@ -1382,6 +1383,18 @@
// perceive this widget as several controls rather as a whole.
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(NumberPicker.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(NumberPicker.class.getName());
+ }
+
/**
* Makes a measure spec that tries greedily to use the max value.
*
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index df88fec..ace3f60 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -45,6 +45,7 @@
import android.view.ViewDebug;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
@@ -1124,10 +1125,17 @@
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ProgressBar.class.getName());
event.setItemCount(mMax);
event.setCurrentItemIndex(mProgress);
}
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ProgressBar.class.getName());
+ }
+
/**
* Schedule a command for sending an accessibility event.
* </br>
diff --git a/core/java/android/widget/QuickContactBadge.java b/core/java/android/widget/QuickContactBadge.java
index adc0fb0..786afe2 100644
--- a/core/java/android/widget/QuickContactBadge.java
+++ b/core/java/android/widget/QuickContactBadge.java
@@ -36,6 +36,8 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* Widget used to show an image with the standard QuickContact badge
@@ -228,6 +230,18 @@
}
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(QuickContactBadge.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(QuickContactBadge.class.getName());
+ }
+
/**
* Set a list of specific MIME-types to exclude and not display. For
* example, this can be used to hide the {@link Contacts#CONTENT_ITEM_TYPE}
diff --git a/core/java/android/widget/RadioButton.java b/core/java/android/widget/RadioButton.java
index 9fa649f..b6dac3e 100644
--- a/core/java/android/widget/RadioButton.java
+++ b/core/java/android/widget/RadioButton.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.R;
@@ -85,4 +86,16 @@
event.getText().add(mContext.getString(R.string.radiobutton_not_selected));
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(RadioButton.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(RadioButton.class.getName());
+ }
}
diff --git a/core/java/android/widget/RadioGroup.java b/core/java/android/widget/RadioGroup.java
index 393346a..7f53ffd 100644
--- a/core/java/android/widget/RadioGroup.java
+++ b/core/java/android/widget/RadioGroup.java
@@ -23,6 +23,8 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -236,6 +238,18 @@
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(RadioGroup.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(RadioGroup.class.getName());
+ }
+
/**
* <p>This set of layout parameters defaults the width and the height of
* the children to {@link #WRAP_CONTENT} when they are not specified in the
diff --git a/core/java/android/widget/RatingBar.java b/core/java/android/widget/RatingBar.java
index 9e6ff4b..e69577b 100644
--- a/core/java/android/widget/RatingBar.java
+++ b/core/java/android/widget/RatingBar.java
@@ -21,6 +21,8 @@
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.Shape;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.R;
@@ -324,4 +326,15 @@
super.setMax(max);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(RatingBar.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(RatingBar.class.getName());
+ }
}
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index a452fec..e4b8f34 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -40,6 +40,7 @@
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
import static android.util.Log.d;
@@ -985,6 +986,18 @@
return false;
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(RelativeLayout.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(RelativeLayout.class.getName());
+ }
+
/**
* Compares two views in left-to-right and top-to-bottom fashion.
*/
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 7b43032..586fdf4 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -68,6 +68,8 @@
private RemoteViewsAdapterServiceConnection mServiceConnection;
private WeakReference<RemoteAdapterConnectionCallback> mCallback;
private FixedSizeRemoteViewsCache mCache;
+ private int mVisibleWindowLowerBound;
+ private int mVisibleWindowUpperBound;
// A flag to determine whether we should notify data set changed after we connect
private boolean mNotifyDataSetChangedAfterOnServiceConnected = false;
@@ -765,7 +767,7 @@
}
if (position > -1) {
// Load the item, and notify any existing RemoteViewsFrameLayouts
- updateRemoteViews(position, isRequested);
+ updateRemoteViews(position, isRequested, true);
// Queue up for the next one to load
loadNextIndexInBackground();
@@ -827,8 +829,8 @@
}
}
- private void updateRemoteViews(final int position, boolean isRequested) {
- if (!mServiceConnection.isConnected()) return;
+ private void updateRemoteViews(final int position, boolean isRequested, boolean
+ notifyWhenLoaded) {
IRemoteViewsFactory factory = mServiceConnection.getRemoteViewsFactory();
// Load the item information from the remote service
@@ -864,12 +866,14 @@
// there is new data for it.
final RemoteViews rv = remoteViews;
final int typeId = mCache.getMetaDataAt(position).typeId;
- mMainQueue.post(new Runnable() {
- @Override
- public void run() {
- mRequestedViews.notifyOnRemoteViewsLoaded(position, rv, typeId);
- }
- });
+ if (notifyWhenLoaded) {
+ mMainQueue.post(new Runnable() {
+ @Override
+ public void run() {
+ mRequestedViews.notifyOnRemoteViewsLoaded(position, rv, typeId);
+ }
+ });
+ }
}
}
@@ -929,6 +933,16 @@
return typeId;
}
+ /**
+ * This method allows an AdapterView using this Adapter to provide information about which
+ * views are currently being displayed. This allows for certain optimizations and preloading
+ * which wouldn't otherwise be possible.
+ */
+ public void setVisibleRangeHint(int lowerBound, int upperBound) {
+ mVisibleWindowLowerBound = lowerBound;
+ mVisibleWindowUpperBound = upperBound;
+ }
+
public View getView(int position, View convertView, ViewGroup parent) {
// "Request" an index so that we can queue it for loading, initiate subsequent
// preloading, etc.
@@ -1059,6 +1073,13 @@
// Re-request the new metadata (only after the notification to the factory)
updateTemporaryMetaData();
+ // Pre-load (our best guess of) the views which are currently visible in the AdapterView.
+ // This mitigates flashing and flickering of loading views when a widget notifies that
+ // its data has changed.
+ for (int i = mVisibleWindowLowerBound; i <= mVisibleWindowUpperBound; i++) {
+ updateRemoteViews(i, false, false);
+ }
+
// Propagate the notification back to the base adapter
mMainQueue.post(new Runnable() {
@Override
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 767eaee..3ffc0fe 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -721,12 +721,14 @@
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ScrollView.class.getName());
info.setScrollable(getScrollRange() > 0);
}
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ScrollView.class.getName());
final boolean scrollable = getScrollRange() > 0;
event.setScrollable(scrollable);
event.setScrollX(mScrollX);
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 9d2ff2e..99cd0b8 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -35,7 +35,6 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
import android.speech.RecognizerIntent;
import android.text.Editable;
import android.text.InputType;
@@ -51,6 +50,8 @@
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView.OnItemClickListener;
@@ -1206,6 +1207,18 @@
setIconified(false);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(SearchView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(SearchView.class.getName());
+ }
+
private void adjustDropDownSizeAndPosition() {
if (mDropDownAnchor.getWidth() > 1) {
Resources res = getContext().getResources();
diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java
index c76728f..2737f94 100644
--- a/core/java/android/widget/SeekBar.java
+++ b/core/java/android/widget/SeekBar.java
@@ -18,6 +18,8 @@
import android.content.Context;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
@@ -117,5 +119,16 @@
mOnSeekBarChangeListener.onStopTrackingTouch(this);
}
}
-
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(SeekBar.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(SeekBar.class.getName());
+ }
}
diff --git a/core/java/android/widget/SlidingDrawer.java b/core/java/android/widget/SlidingDrawer.java
index bdeb5c2..14edd10 100644
--- a/core/java/android/widget/SlidingDrawer.java
+++ b/core/java/android/widget/SlidingDrawer.java
@@ -32,6 +32,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* SlidingDrawer hides content out of the screen and allows the user to drag a handle
@@ -810,6 +811,18 @@
}
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(SlidingDrawer.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(SlidingDrawer.class.getName());
+ }
+
private void closeDrawer() {
moveHandle(COLLAPSED_FULL_CLOSED);
mContent.setVisibility(View.GONE);
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index ec3790e..ecf19b3 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -29,6 +29,8 @@
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -456,12 +458,24 @@
return handled;
}
-
+
public void onClick(DialogInterface dialog, int which) {
setSelection(which);
dialog.dismiss();
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(Spinner.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(Spinner.class.getName());
+ }
+
/**
* Sets the prompt to display when the dialog is shown.
* @param prompt the prompt to set
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 03e6e99..22df3bc 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -40,6 +40,8 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.LinearInterpolator;
import android.widget.RemoteViews.RemoteView;
@@ -1216,6 +1218,18 @@
measureChildren();
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(StackView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(StackView.class.getName());
+ }
+
class LayoutParams extends ViewGroup.LayoutParams {
int horizontalOffset;
int verticalOffset;
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 02c9d03..334b9c4 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -35,6 +35,7 @@
import android.view.VelocityTracker;
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.R;
@@ -651,4 +652,16 @@
mThumbDrawable.jumpToCurrentState();
mTrackDrawable.jumpToCurrentState();
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(Switch.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(Switch.class.getName());
+ }
}
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 88d7230..9b292be 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -33,6 +33,8 @@
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import java.util.ArrayList;
import java.util.List;
@@ -321,6 +323,18 @@
}
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TabHost.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TabHost.class.getName());
+ }
+
public void setCurrentTab(int index) {
if (index < 0 || index >= mTabSpecs.size()) {
return;
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 80bfe99..8901037 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -29,6 +29,7 @@
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
*
@@ -416,10 +417,28 @@
@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TabWidget.class.getName());
event.setItemCount(getTabCount());
event.setCurrentItemIndex(mSelectedTab);
}
+
+ @Override
+ public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {
+ // this class fires events only when tabs are focused or selected
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && isFocused()) {
+ event.recycle();
+ return;
+ }
+ super.sendAccessibilityEventUnchecked(event);
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TabWidget.class.getName());
+ }
+
/**
* Sets the current tab and focuses the UI on it.
* This method makes sure that the focused tab matches the selected
@@ -485,16 +504,6 @@
mSelectedTab = -1;
}
- @Override
- public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {
- // this class fires events only when tabs are focused or selected
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && isFocused()) {
- event.recycle();
- return;
- }
- super.sendAccessibilityEventUnchecked(event);
- }
-
/**
* Provides a way for {@link TabHost} to be notified that the user clicked on a tab indicator.
*/
diff --git a/core/java/android/widget/TableLayout.java b/core/java/android/widget/TableLayout.java
index 842b087..f5d3746 100644
--- a/core/java/android/widget/TableLayout.java
+++ b/core/java/android/widget/TableLayout.java
@@ -24,6 +24,8 @@
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import java.util.regex.Pattern;
@@ -658,6 +660,18 @@
return new LayoutParams(p);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TableLayout.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TableLayout.class.getName());
+ }
+
/**
* <p>This set of layout parameters enforces the width of each child to be
* {@link #MATCH_PARENT} and the height of each child to be
diff --git a/core/java/android/widget/TableRow.java b/core/java/android/widget/TableRow.java
index 3fd4631..01c4c2c 100644
--- a/core/java/android/widget/TableRow.java
+++ b/core/java/android/widget/TableRow.java
@@ -24,6 +24,8 @@
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
@@ -377,6 +379,18 @@
return new LayoutParams(p);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TableRow.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TableRow.class.getName());
+ }
+
/**
* <p>Set of layout parameters used in table rows.</p>
*
diff --git a/core/java/android/widget/TextSwitcher.java b/core/java/android/widget/TextSwitcher.java
index a8794a3..1aefd2b 100644
--- a/core/java/android/widget/TextSwitcher.java
+++ b/core/java/android/widget/TextSwitcher.java
@@ -21,6 +21,8 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* Specialized {@link android.widget.ViewSwitcher} that contains
@@ -88,4 +90,16 @@
public void setCurrentText(CharSequence text) {
((TextView)getCurrentView()).setText(text);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TextSwitcher.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TextSwitcher.class.getName());
+ }
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index acea1a1..f78c247 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -357,7 +357,6 @@
private float mLastDownPositionX, mLastDownPositionY;
private Callback mCustomSelectionActionModeCallback;
- private final int mSquaredTouchSlopDistance;
// Set when this TextView gained focus with some text selected. Will start selection mode.
private boolean mCreatedWithASelection = false;
@@ -443,15 +442,12 @@
this(context, null);
}
- public TextView(Context context,
- AttributeSet attrs) {
+ public TextView(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.textViewStyle);
}
@SuppressWarnings("deprecation")
- public TextView(Context context,
- AttributeSet attrs,
- int defStyle) {
+ public TextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mText = "";
@@ -1134,10 +1130,6 @@
setLongClickable(longClickable);
prepareCursorControllers();
-
- final ViewConfiguration viewConfiguration = ViewConfiguration.get(context);
- final int touchSlop = viewConfiguration.getScaledTouchSlop();
- mSquaredTouchSlopDistance = touchSlop * touchSlop;
}
private void setTypefaceByIndex(int typefaceIndex, int styleIndex) {
@@ -3202,8 +3194,7 @@
int n = mFilters.length;
for (int i = 0; i < n; i++) {
- CharSequence out = mFilters[i].filter(text, 0, text.length(),
- EMPTY_SPANNED, 0, 0);
+ CharSequence out = mFilters[i].filter(text, 0, text.length(), EMPTY_SPANNED, 0, 0);
if (out != null) {
text = out;
}
@@ -5273,10 +5264,8 @@
state.handleUpEvent(event);
}
if (event.isTracking() && !event.isCanceled()) {
- if (isInSelectionMode) {
- stopSelectionActionMode();
- return true;
- }
+ stopSelectionActionMode();
+ return true;
}
}
}
@@ -5621,11 +5610,13 @@
return super.onKeyUp(keyCode, event);
}
- @Override public boolean onCheckIsTextEditor() {
+ @Override
+ public boolean onCheckIsTextEditor() {
return mInputType != EditorInfo.TYPE_NULL;
}
- @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ @Override
+ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
if (onCheckIsTextEditor() && isEnabled()) {
if (mInputMethodState == null) {
mInputMethodState = new InputMethodState();
@@ -8362,7 +8353,7 @@
}
final boolean touchIsFinished = (action == MotionEvent.ACTION_UP) &&
- !shouldIgnoreActionUpEvent() && isFocused();
+ !mIgnoreActionUpEvent && isFocused();
if ((mMovement != null || onCheckIsTextEditor()) && isEnabled()
&& mText instanceof Spannable && mLayout != null) {
@@ -8386,6 +8377,10 @@
}
if (touchIsFinished && (isTextEditable() || mTextIsSelectable)) {
+ // Move cursor
+ final int offset = getOffsetForPosition(event.getX(), event.getY());
+ Selection.setSelection((Spannable) mText, offset);
+
// Show the IME, except when selecting in read-only text.
final InputMethodManager imm = InputMethodManager.peekInstance();
viewClicked(imm);
@@ -8538,17 +8533,6 @@
mIgnoreActionUpEvent = true;
}
- /**
- * This method is only valid during a touch event.
- *
- * @return true when the ACTION_UP event should be ignored, false otherwise.
- *
- * @hide
- */
- public boolean shouldIgnoreActionUpEvent() {
- return mIgnoreActionUpEvent;
- }
-
@Override
public boolean onTrackballEvent(MotionEvent event) {
if (mMovement != null && mText instanceof Spannable &&
@@ -8929,14 +8913,12 @@
wordIterator.setCharSequence(mText, minOffset, maxOffset);
selectionStart = wordIterator.getBeginning(minOffset);
- if (selectionStart == BreakIterator.DONE) return false;
-
selectionEnd = wordIterator.getEnd(maxOffset);
- if (selectionEnd == BreakIterator.DONE) return false;
- if (selectionStart == selectionEnd) {
+ if (selectionStart == BreakIterator.DONE || selectionEnd == BreakIterator.DONE ||
+ selectionStart == selectionEnd) {
// Possible when the word iterator does not properly handle the text's language
- long range = getCharRange(selectionStart);
+ long range = getCharRange(minOffset);
selectionStart = extractRangeStartFromLong(range);
selectionEnd = extractRangeEndFromLong(range);
}
@@ -9029,6 +9011,7 @@
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TextView.class.getName());
final boolean isPassword = hasPasswordTransformationMethod();
event.setPassword(isPassword);
@@ -9043,11 +9026,13 @@
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TextView.class.getName());
final boolean isPassword = hasPasswordTransformationMethod();
+ info.setPassword(isPassword);
+
if (!isPassword) {
info.setText(getTextForAccessibility());
}
- info.setPassword(isPassword);
}
@Override
@@ -9245,7 +9230,6 @@
boolean vibrate = true;
if (super.performLongClick()) {
- mDiscardNextActionUp = true;
handled = true;
}
@@ -10154,8 +10138,8 @@
boolean willExtract = extractedTextModeWillBeStarted();
- // Do not start the action mode when extracted text will show up full screen, thus
- // immediately hiding the newly created action bar, which would be visually distracting.
+ // Do not start the action mode when extracted text will show up full screen, which would
+ // immediately hide the newly created action bar and would be visually distracting.
if (!willExtract) {
ActionMode.Callback actionModeCallback = new SelectionActionModeCallback();
mSelectionActionMode = startActionMode(actionModeCallback);
@@ -10181,7 +10165,10 @@
return false;
}
- private void stopSelectionActionMode() {
+ /**
+ * @hide
+ */
+ protected void stopSelectionActionMode() {
if (mSelectionActionMode != null) {
// This will hide the mSelectionModifierCursorController
mSelectionActionMode.finish();
@@ -10795,7 +10782,12 @@
final float deltaX = mDownPositionX - ev.getRawX();
final float deltaY = mDownPositionY - ev.getRawY();
final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
- if (distanceSquared < mSquaredTouchSlopDistance) {
+
+ final ViewConfiguration viewConfiguration = ViewConfiguration.get(
+ TextView.this.getContext());
+ final int touchSlop = viewConfiguration.getScaledTouchSlop();
+
+ if (distanceSquared < touchSlop * touchSlop) {
if (mActionPopupWindow != null && mActionPopupWindow.isShowing()) {
// Tapping on the handle dismisses the displayed action popup
mActionPopupWindow.hide();
@@ -11009,7 +11001,8 @@
// Double tap detection
private long mPreviousTapUpTime = 0;
- private float mPreviousTapPositionX, mPreviousTapPositionY;
+ private float mDownPositionX, mDownPositionY;
+ private boolean mGestureStayedInTapRegion;
SelectionModifierCursorController() {
resetTouchOffsets();
@@ -11072,20 +11065,28 @@
mMinTouchOffset = mMaxTouchOffset = getOffsetForPosition(x, y);
// Double tap detection
- long duration = SystemClock.uptimeMillis() - mPreviousTapUpTime;
- if (duration <= ViewConfiguration.getDoubleTapTimeout() &&
- isPositionOnText(x, y)) {
- final float deltaX = x - mPreviousTapPositionX;
- final float deltaY = y - mPreviousTapPositionY;
- final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
- if (distanceSquared < mSquaredTouchSlopDistance) {
- startSelectionActionMode();
- mDiscardNextActionUp = true;
+ if (mGestureStayedInTapRegion) {
+ long duration = SystemClock.uptimeMillis() - mPreviousTapUpTime;
+ if (duration <= ViewConfiguration.getDoubleTapTimeout()) {
+ final float deltaX = x - mDownPositionX;
+ final float deltaY = y - mDownPositionY;
+ final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
+
+ ViewConfiguration viewConfiguration = ViewConfiguration.get(
+ TextView.this.getContext());
+ int doubleTapSlop = viewConfiguration.getScaledDoubleTapSlop();
+ boolean stayedInArea = distanceSquared < doubleTapSlop * doubleTapSlop;
+
+ if (stayedInArea && isPositionOnText(x, y)) {
+ startSelectionActionMode();
+ mDiscardNextActionUp = true;
+ }
}
}
- mPreviousTapPositionX = x;
- mPreviousTapPositionY = y;
+ mDownPositionX = x;
+ mDownPositionY = y;
+ mGestureStayedInTapRegion = true;
break;
case MotionEvent.ACTION_POINTER_DOWN:
@@ -11098,6 +11099,22 @@
}
break;
+ case MotionEvent.ACTION_MOVE:
+ if (mGestureStayedInTapRegion) {
+ final float deltaX = event.getX() - mDownPositionX;
+ final float deltaY = event.getY() - mDownPositionY;
+ final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
+
+ final ViewConfiguration viewConfiguration = ViewConfiguration.get(
+ TextView.this.getContext());
+ int doubleTapTouchSlop = viewConfiguration.getScaledDoubleTapTouchSlop();
+
+ if (distanceSquared > doubleTapTouchSlop * doubleTapTouchSlop) {
+ mGestureStayedInTapRegion = false;
+ }
+ }
+ break;
+
case MotionEvent.ACTION_UP:
mPreviousTapUpTime = SystemClock.uptimeMillis();
break;
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index afca2db..8f10fff 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -27,6 +27,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.NumberPicker.OnValueChangeListener;
@@ -476,6 +477,18 @@
event.getText().add(selectedDateUtterance);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TimePicker.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TimePicker.class.getName());
+ }
+
private void updateHourControl() {
if (is24HourView()) {
mHourSpinner.setMinValue(0);
diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java
index a754268..a0edafe 100644
--- a/core/java/android/widget/ToggleButton.java
+++ b/core/java/android/widget/ToggleButton.java
@@ -23,6 +23,7 @@
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import com.android.internal.R;
@@ -161,4 +162,16 @@
event.getText().add(mContext.getString(R.string.togglebutton_not_pressed));
}
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ToggleButton.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ToggleButton.class.getName());
+ }
}
diff --git a/core/java/android/widget/TwoLineListItem.java b/core/java/android/widget/TwoLineListItem.java
index eab6f2d..e707ea3 100644
--- a/core/java/android/widget/TwoLineListItem.java
+++ b/core/java/android/widget/TwoLineListItem.java
@@ -16,14 +16,12 @@
package android.widget;
-import com.android.internal.R;
-
-
import android.annotation.Widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
-import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RelativeLayout;
/**
@@ -86,4 +84,16 @@
public TextView getText2() {
return mText2;
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(TwoLineListItem.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(TwoLineListItem.class.getName());
+ }
}
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 64fdf34..0fba498 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -34,6 +34,8 @@
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.MediaController.MediaPlayerControl;
import java.io.IOException;
@@ -124,6 +126,18 @@
setMeasuredDimension(width, height);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(VideoView.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(VideoView.class.getName());
+ }
+
public int resolveAdjustedSize(int desiredSize, int measureSpec) {
int result = desiredSize;
int specMode = MeasureSpec.getMode(measureSpec);
diff --git a/core/java/android/widget/ViewAnimator.java b/core/java/android/widget/ViewAnimator.java
index 71ff66b..6a68240 100644
--- a/core/java/android/widget/ViewAnimator.java
+++ b/core/java/android/widget/ViewAnimator.java
@@ -22,6 +22,8 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
@@ -341,4 +343,16 @@
public int getBaseline() {
return (getCurrentView() != null) ? getCurrentView().getBaseline() : super.getBaseline();
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ViewAnimator.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ViewAnimator.class.getName());
+ }
}
diff --git a/core/java/android/widget/ViewFlipper.java b/core/java/android/widget/ViewFlipper.java
index c6f6e81..061bb00 100644
--- a/core/java/android/widget/ViewFlipper.java
+++ b/core/java/android/widget/ViewFlipper.java
@@ -25,6 +25,8 @@
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
/**
@@ -139,6 +141,18 @@
updateRunning();
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ViewFlipper.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ViewFlipper.class.getName());
+ }
+
/**
* Internal method to start or stop dispatching flip {@link Message} based
* on {@link #mRunning} and {@link #mVisible} state.
diff --git a/core/java/android/widget/ViewSwitcher.java b/core/java/android/widget/ViewSwitcher.java
index 71ae624..0376918 100644
--- a/core/java/android/widget/ViewSwitcher.java
+++ b/core/java/android/widget/ViewSwitcher.java
@@ -20,6 +20,8 @@
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
/**
* {@link ViewAnimator} that switches between two views, and has a factory
@@ -66,6 +68,18 @@
super.addView(child, index, params);
}
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ViewSwitcher.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ViewSwitcher.class.getName());
+ }
+
/**
* Returns the next view to be displayed.
*
diff --git a/core/java/android/widget/ZoomButton.java b/core/java/android/widget/ZoomButton.java
index eb372ca..af17c94 100644
--- a/core/java/android/widget/ZoomButton.java
+++ b/core/java/android/widget/ZoomButton.java
@@ -23,6 +23,8 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnLongClickListener;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
public class ZoomButton extends ImageButton implements OnLongClickListener {
@@ -96,4 +98,16 @@
clearFocus();
return super.dispatchUnhandledMove(focused, direction);
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ZoomButton.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ZoomButton.class.getName());
+ }
}
diff --git a/core/java/android/widget/ZoomControls.java b/core/java/android/widget/ZoomControls.java
index a12aee5..8897875 100644
--- a/core/java/android/widget/ZoomControls.java
+++ b/core/java/android/widget/ZoomControls.java
@@ -22,6 +22,8 @@
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.AlphaAnimation;
import com.android.internal.R;
@@ -106,4 +108,16 @@
public boolean hasFocus() {
return mZoomIn.hasFocus() || mZoomOut.hasFocus();
}
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ event.setClassName(ZoomControls.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setClassName(ZoomControls.class.getName());
+ }
}
diff --git a/core/java/com/android/internal/backup/BackupConstants.java b/core/java/com/android/internal/backup/BackupConstants.java
index 906b5d5..4c276b7 100644
--- a/core/java/com/android/internal/backup/BackupConstants.java
+++ b/core/java/com/android/internal/backup/BackupConstants.java
@@ -24,4 +24,5 @@
public static final int TRANSPORT_ERROR = 1;
public static final int TRANSPORT_NOT_INITIALIZED = 2;
public static final int AGENT_ERROR = 3;
+ public static final int AGENT_UNKNOWN = 4;
}
diff --git a/core/jni/android_database_SQLiteCommon.cpp b/core/jni/android_database_SQLiteCommon.cpp
index d5fdb15..a94b9d2 100644
--- a/core/jni/android_database_SQLiteCommon.cpp
+++ b/core/jni/android_database_SQLiteCommon.cpp
@@ -109,9 +109,6 @@
case SQLITE_MISMATCH:
exceptionClass = "android/database/sqlite/SQLiteDatatypeMismatchException";
break;
- case SQLITE_UNCLOSED:
- exceptionClass = "android/database/sqlite/SQLiteUnfinalizedObjectsException";
- break;
default:
exceptionClass = "android/database/sqlite/SQLiteException";
break;
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 20ff00b..c1e7305 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -14,171 +14,42 @@
* limitations under the License.
*/
-#include <JNIHelp.h>
+#define LOG_TAG "SQLiteDebug"
+
#include <jni.h>
-#include <utils/misc.h>
+#include <JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <cutils/mspace.h>
#include <utils/Log.h>
#include <sqlite3.h>
-// From mem_mspace.c in libsqlite
-extern "C" mspace sqlite3_get_mspace();
-
namespace android {
-static jfieldID gMemoryUsedField;
-static jfieldID gPageCacheOverfloField;
-static jfieldID gLargestMemAllocField;
+static struct {
+ jfieldID memoryUsed;
+ jfieldID pageCacheOverflow;
+ jfieldID largestMemAlloc;
+} gSQLiteDebugPagerStatsClassInfo;
-
-#define USE_MSPACE 0
-
-static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
+static void nativeGetPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
{
int memoryUsed;
- int pageCacheOverflo;
+ int pageCacheOverflow;
int largestMemAlloc;
int unused;
sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0);
sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0);
- sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflo, &unused, 0);
- env->SetIntField(statsObj, gMemoryUsedField, memoryUsed);
- env->SetIntField(statsObj, gPageCacheOverfloField, pageCacheOverflo);
- env->SetIntField(statsObj, gLargestMemAllocField, largestMemAlloc);
-}
-
-static jlong getHeapSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
- struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
- struct mallinfo info = dlmallinfo();
- return (jlong) info.usmblks;
-#elif USE_MSPACE
- mspace space = sqlite3_get_mspace();
- if (space != 0) {
- return mspace_footprint(space);
- } else {
- return 0;
- }
-#else
- return 0;
-#endif
-}
-
-static jlong getHeapAllocatedSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
- struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
- return (jlong) info.uordblks;
-#else
- return sqlite3_memory_used();
-#endif
-}
-
-static jlong getHeapFreeSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
- struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
- return (jlong) info.fordblks;
-#else
- return getHeapSize(env, clazz) - sqlite3_memory_used();
-#endif
-}
-
-static int read_mapinfo(FILE *fp,
- int *sharedPages, int *privatePages)
-{
- char line[1024];
- int len;
- int skip;
-
- unsigned start = 0, size = 0, resident = 0;
- unsigned shared_clean = 0, shared_dirty = 0;
- unsigned private_clean = 0, private_dirty = 0;
- unsigned referenced = 0;
-
- int isAnon = 0;
- int isHeap = 0;
-
-again:
- skip = 0;
-
- if(fgets(line, 1024, fp) == 0) return 0;
-
- len = strlen(line);
- if (len < 1) return 0;
- line[--len] = 0;
-
- /* ignore guard pages */
- if (line[18] == '-') skip = 1;
-
- start = strtoul(line, 0, 16);
-
- if (len > 50 && !strncmp(line + 49, "/tmp/sqlite-heap", strlen("/tmp/sqlite-heap"))) {
- isHeap = 1;
- }
-
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Size: %d kB", &size) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Rss: %d kB", &resident) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Shared_Clean: %d kB", &shared_clean) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Shared_Dirty: %d kB", &shared_dirty) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Private_Clean: %d kB", &private_clean) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Private_Dirty: %d kB", &private_dirty) != 1) return 0;
- if (fgets(line, 1024, fp) == 0) return 0;
- if (sscanf(line, "Referenced: %d kB", &referenced) != 1) return 0;
-
- if (skip) {
- goto again;
- }
-
- if (isHeap) {
- *sharedPages += shared_dirty;
- *privatePages += private_dirty;
- }
- return 1;
-}
-
-static void load_maps(int pid, int *sharedPages, int *privatePages)
-{
- char tmp[128];
- FILE *fp;
-
- sprintf(tmp, "/proc/%d/smaps", pid);
- fp = fopen(tmp, "r");
- if (fp == 0) return;
-
- while (read_mapinfo(fp, sharedPages, privatePages) != 0) {
- // Do nothing
- }
- fclose(fp);
-}
-
-static void getHeapDirtyPages(JNIEnv *env, jobject clazz, jintArray pages)
-{
- int _pages[2];
-
- _pages[0] = 0;
- _pages[1] = 0;
-
- load_maps(getpid(), &_pages[0], &_pages[1]);
-
- // Convert from kbytes to 4K pages
- _pages[0] /= 4;
- _pages[1] /= 4;
-
- env->SetIntArrayRegion(pages, 0, 2, _pages);
+ sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflow, &unused, 0);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.memoryUsed, memoryUsed);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow,
+ pageCacheOverflow);
+ env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, largestMemAlloc);
}
/*
@@ -187,43 +58,31 @@
static JNINativeMethod gMethods[] =
{
- { "getPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
- (void*) getPagerStats },
- { "getHeapSize", "()J", (void*) getHeapSize },
- { "getHeapAllocatedSize", "()J", (void*) getHeapAllocatedSize },
- { "getHeapFreeSize", "()J", (void*) getHeapFreeSize },
- { "getHeapDirtyPages", "([I)V", (void*) getHeapDirtyPages },
+ { "nativeGetPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
+ (void*) nativeGetPagerStats },
};
+#define FIND_CLASS(var, className) \
+ var = env->FindClass(className); \
+ LOG_FATAL_IF(! var, "Unable to find class " className);
+
+#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
+ var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
+ LOG_FATAL_IF(! var, "Unable to find field " fieldName);
+
int register_android_database_SQLiteDebug(JNIEnv *env)
{
jclass clazz;
+ FIND_CLASS(clazz, "android/database/sqlite/SQLiteDebug$PagerStats");
- clazz = env->FindClass("android/database/sqlite/SQLiteDebug$PagerStats");
- if (clazz == NULL) {
- ALOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats");
- return -1;
- }
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.memoryUsed, clazz,
+ "memoryUsed", "I");
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, clazz,
+ "largestMemAlloc", "I");
+ GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow, clazz,
+ "pageCacheOverflow", "I");
- gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I");
- if (gMemoryUsedField == NULL) {
- ALOGE("Can't find memoryUsed");
- return -1;
- }
-
- gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I");
- if (gLargestMemAllocField == NULL) {
- ALOGE("Can't find largestMemAlloc");
- return -1;
- }
-
- gPageCacheOverfloField = env->GetFieldID(clazz, "pageCacheOverflo", "I");
- if (gPageCacheOverfloField == NULL) {
- ALOGE("Can't find pageCacheOverflo");
- return -1;
- }
-
- return jniRegisterNativeMethods(env, "android/database/sqlite/SQLiteDebug",
+ return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteDebug",
gMethods, NELEM(gMethods));
}
diff --git a/core/jni/android_database_SQLiteGlobal.cpp b/core/jni/android_database_SQLiteGlobal.cpp
index 82cae5a..9301183 100644
--- a/core/jni/android_database_SQLiteGlobal.cpp
+++ b/core/jni/android_database_SQLiteGlobal.cpp
@@ -24,9 +24,16 @@
#include <sqlite3_android.h>
#include "android_database_SQLiteCommon.h"
+#include "android_util_Log.h"
namespace android {
+// Limit heap to 8MB for now. This is 4 times the maximum cursor window
+// size, as has been used by the original code in SQLiteDatabase for
+// a long time.
+static const int SOFT_HEAP_LIMIT = 8 * 1024 * 1024;
+
+
// Called each time a message is logged.
static void sqliteLogCallback(void* data, int iErrCode, const char* zMsg) {
bool verboseLog = !!data;
@@ -40,37 +47,41 @@
}
// Sets the global SQLite configuration.
-// This must be called before any other SQLite functions are called. */
-static void nativeConfig(JNIEnv* env, jclass clazz, jboolean verboseLog, jint softHeapLimit) {
+// This must be called before any other SQLite functions are called.
+static void sqliteInitialize() {
// Enable multi-threaded mode. In this mode, SQLite is safe to use by multiple
// threads as long as no two threads use the same database connection at the same
// time (which we guarantee in the SQLite database wrappers).
sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
// Redirect SQLite log messages to the Android log.
+ bool verboseLog = android_util_Log_isVerboseLogEnabled(SQLITE_LOG_TAG);
sqlite3_config(SQLITE_CONFIG_LOG, &sqliteLogCallback, verboseLog ? (void*)1 : NULL);
// The soft heap limit prevents the page cache allocations from growing
// beyond the given limit, no matter what the max page cache sizes are
// set to. The limit does not, as of 3.5.0, affect any other allocations.
- sqlite3_soft_heap_limit(softHeapLimit);
+ sqlite3_soft_heap_limit(SOFT_HEAP_LIMIT);
+
+ // Initialize SQLite.
+ sqlite3_initialize();
}
-static jint nativeReleaseMemory(JNIEnv* env, jclass clazz, jint bytesToFree) {
- return sqlite3_release_memory(bytesToFree);
+static jint nativeReleaseMemory(JNIEnv* env, jclass clazz) {
+ return sqlite3_release_memory(SOFT_HEAP_LIMIT);
}
static JNINativeMethod sMethods[] =
{
/* name, signature, funcPtr */
- { "nativeConfig", "(ZI)V",
- (void*)nativeConfig },
- { "nativeReleaseMemory", "(I)I",
+ { "nativeReleaseMemory", "()I",
(void*)nativeReleaseMemory },
};
int register_android_database_SQLiteGlobal(JNIEnv *env)
{
+ sqliteInitialize();
+
return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteGlobal",
sMethods, NELEM(sMethods));
}
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 3052553..3f1af86 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -147,7 +147,7 @@
}
int bytesPerSample = audioFormat==javaAudioRecordFields.PCM16 ? 2 : 1;
- int format = audioFormat==javaAudioRecordFields.PCM16 ?
+ audio_format_t format = audioFormat==javaAudioRecordFields.PCM16 ?
AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT;
if (buffSizeInBytes == 0) {
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index d0b5ade..6b4c5e8 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -28,7 +28,6 @@
#include "android_runtime/AndroidRuntime.h"
#include <media/AudioSystem.h>
-#include <media/AudioTrack.h>
#include <system/audio.h>
#include <system/audio_policy.h>
@@ -156,12 +155,6 @@
}
static int
-android_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask)
-{
- return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask));
-}
-
-static int
android_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config)
{
return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <audio_policy_force_use_t>(usage),
@@ -183,16 +176,29 @@
}
static int
-android_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream, jint index)
+android_media_AudioSystem_setStreamVolumeIndex(JNIEnv *env,
+ jobject thiz,
+ jint stream,
+ jint index,
+ jint device)
{
- return check_AudioSystem_Command(AudioSystem::setStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), index));
+ return check_AudioSystem_Command(
+ AudioSystem::setStreamVolumeIndex(static_cast <audio_stream_type_t>(stream),
+ index,
+ (audio_devices_t)device));
}
static int
-android_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env, jobject thiz, jint stream)
+android_media_AudioSystem_getStreamVolumeIndex(JNIEnv *env,
+ jobject thiz,
+ jint stream,
+ jint device)
{
int index;
- if (AudioSystem::getStreamVolumeIndex(static_cast <audio_stream_type_t>(stream), &index) != NO_ERROR) {
+ if (AudioSystem::getStreamVolumeIndex(static_cast <audio_stream_type_t>(stream),
+ &index,
+ (audio_devices_t)device)
+ != NO_ERROR) {
index = -1;
}
return index;
@@ -215,12 +221,11 @@
{"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState},
{"getDeviceConnectionState", "(ILjava/lang/String;)I", (void *)android_media_AudioSystem_getDeviceConnectionState},
{"setPhoneState", "(I)I", (void *)android_media_AudioSystem_setPhoneState},
- {"setRingerMode", "(II)I", (void *)android_media_AudioSystem_setRingerMode},
{"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse},
{"getForceUse", "(I)I", (void *)android_media_AudioSystem_getForceUse},
{"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume},
- {"setStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_setStreamVolumeIndex},
- {"getStreamVolumeIndex","(I)I", (void *)android_media_AudioSystem_getStreamVolumeIndex},
+ {"setStreamVolumeIndex","(III)I", (void *)android_media_AudioSystem_setStreamVolumeIndex},
+ {"getStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_getStreamVolumeIndex},
{"getDevicesForStream", "(I)I", (void *)android_media_AudioSystem_getDevicesForStream},
};
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 4aa49f4..26c9435 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -49,14 +49,6 @@
jmethodID postNativeEventInJava; //... event post callback method
int PCM16; //... format constants
int PCM8; //... format constants
- int STREAM_VOICE_CALL; //... stream type constants
- int STREAM_SYSTEM; //... stream type constants
- int STREAM_RING; //... stream type constants
- int STREAM_MUSIC; //... stream type constants
- int STREAM_ALARM; //... stream type constants
- int STREAM_NOTIFICATION; //... stream type constants
- int STREAM_BLUETOOTH_SCO; //... stream type constants
- int STREAM_DTMF; //... stream type constants
int MODE_STREAM; //... memory mode
int MODE_STATIC; //... memory mode
jfieldID nativeTrackInJavaObj; // stores in Java the native AudioTrack object
@@ -197,23 +189,18 @@
// check the stream type
audio_stream_type_t atStreamType;
- if (streamType == javaAudioTrackFields.STREAM_VOICE_CALL) {
- atStreamType = AUDIO_STREAM_VOICE_CALL;
- } else if (streamType == javaAudioTrackFields.STREAM_SYSTEM) {
- atStreamType = AUDIO_STREAM_SYSTEM;
- } else if (streamType == javaAudioTrackFields.STREAM_RING) {
- atStreamType = AUDIO_STREAM_RING;
- } else if (streamType == javaAudioTrackFields.STREAM_MUSIC) {
- atStreamType = AUDIO_STREAM_MUSIC;
- } else if (streamType == javaAudioTrackFields.STREAM_ALARM) {
- atStreamType = AUDIO_STREAM_ALARM;
- } else if (streamType == javaAudioTrackFields.STREAM_NOTIFICATION) {
- atStreamType = AUDIO_STREAM_NOTIFICATION;
- } else if (streamType == javaAudioTrackFields.STREAM_BLUETOOTH_SCO) {
- atStreamType = AUDIO_STREAM_BLUETOOTH_SCO;
- } else if (streamType == javaAudioTrackFields.STREAM_DTMF) {
- atStreamType = AUDIO_STREAM_DTMF;
- } else {
+ switch (streamType) {
+ case AUDIO_STREAM_VOICE_CALL:
+ case AUDIO_STREAM_SYSTEM:
+ case AUDIO_STREAM_RING:
+ case AUDIO_STREAM_MUSIC:
+ case AUDIO_STREAM_ALARM:
+ case AUDIO_STREAM_NOTIFICATION:
+ case AUDIO_STREAM_BLUETOOTH_SCO:
+ case AUDIO_STREAM_DTMF:
+ atStreamType = (audio_stream_type_t) streamType;
+ break;
+ default:
ALOGE("Error creating AudioTrack: unknown stream type.");
return AUDIOTRACK_ERROR_SETUP_INVALIDSTREAMTYPE;
}
@@ -227,7 +214,7 @@
// for the moment 8bitPCM in MODE_STATIC is not supported natively in the AudioTrack C++ class
// so we declare everything as 16bitPCM, the 8->16bit conversion for MODE_STATIC will be handled
- // in android_media_AudioTrack_native_write()
+ // in android_media_AudioTrack_native_write_byte()
if ((audioFormat == javaAudioTrackFields.PCM8)
&& (memoryMode == javaAudioTrackFields.MODE_STATIC)) {
ALOGV("android_media_AudioTrack_native_setup(): requesting MODE_STATIC for 8bit \
@@ -519,13 +506,13 @@
}
// ----------------------------------------------------------------------------
-static jint android_media_AudioTrack_native_write(JNIEnv *env, jobject thiz,
+static jint android_media_AudioTrack_native_write_byte(JNIEnv *env, jobject thiz,
jbyteArray javaAudioData,
jint offsetInBytes, jint sizeInBytes,
jint javaAudioFormat) {
jbyte* cAudioData = NULL;
AudioTrack *lpTrack = NULL;
- //ALOGV("android_media_AudioTrack_native_write(offset=%d, sizeInBytes=%d) called",
+ //ALOGV("android_media_AudioTrack_native_write_byte(offset=%d, sizeInBytes=%d) called",
// offsetInBytes, sizeInBytes);
// get the audio track to load with samples
@@ -567,7 +554,7 @@
jshortArray javaAudioData,
jint offsetInShorts, jint sizeInShorts,
jint javaAudioFormat) {
- return (android_media_AudioTrack_native_write(env, thiz,
+ return (android_media_AudioTrack_native_write_byte(env, thiz,
(jbyteArray) javaAudioData,
offsetInShorts*2, sizeInShorts*2,
javaAudioFormat)
@@ -764,24 +751,20 @@
// convert the stream type from Java to native value
// FIXME: code duplication with android_media_AudioTrack_native_setup()
audio_stream_type_t nativeStreamType;
- if (javaStreamType == javaAudioTrackFields.STREAM_VOICE_CALL) {
- nativeStreamType = AUDIO_STREAM_VOICE_CALL;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_SYSTEM) {
- nativeStreamType = AUDIO_STREAM_SYSTEM;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_RING) {
- nativeStreamType = AUDIO_STREAM_RING;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_MUSIC) {
- nativeStreamType = AUDIO_STREAM_MUSIC;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_ALARM) {
- nativeStreamType = AUDIO_STREAM_ALARM;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_NOTIFICATION) {
- nativeStreamType = AUDIO_STREAM_NOTIFICATION;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_BLUETOOTH_SCO) {
- nativeStreamType = AUDIO_STREAM_BLUETOOTH_SCO;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_DTMF) {
- nativeStreamType = AUDIO_STREAM_DTMF;
- } else {
+ switch (javaStreamType) {
+ case AUDIO_STREAM_VOICE_CALL:
+ case AUDIO_STREAM_SYSTEM:
+ case AUDIO_STREAM_RING:
+ case AUDIO_STREAM_MUSIC:
+ case AUDIO_STREAM_ALARM:
+ case AUDIO_STREAM_NOTIFICATION:
+ case AUDIO_STREAM_BLUETOOTH_SCO:
+ case AUDIO_STREAM_DTMF:
+ nativeStreamType = (audio_stream_type_t) javaStreamType;
+ break;
+ default:
nativeStreamType = AUDIO_STREAM_DEFAULT;
+ break;
}
if (AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType) != NO_ERROR) {
@@ -851,7 +834,7 @@
(void *)android_media_AudioTrack_native_setup},
{"native_finalize", "()V", (void *)android_media_AudioTrack_native_finalize},
{"native_release", "()V", (void *)android_media_AudioTrack_native_release},
- {"native_write_byte", "([BIII)I", (void *)android_media_AudioTrack_native_write},
+ {"native_write_byte", "([BIII)I", (void *)android_media_AudioTrack_native_write_byte},
{"native_write_short", "([SIII)I", (void *)android_media_AudioTrack_native_write_short},
{"native_setVolume", "(FF)V", (void *)android_media_AudioTrack_set_volume},
{"native_get_native_frame_count",
@@ -987,41 +970,6 @@
return -1;
}
- // Get the stream types from the AudioManager class
- jclass audioManagerClass = NULL;
- audioManagerClass = env->FindClass(JAVA_AUDIOMANAGER_CLASS_NAME);
- if (audioManagerClass == NULL) {
- ALOGE("Can't find %s", JAVA_AUDIOMANAGER_CLASS_NAME);
- return -1;
- }
- if ( !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_VOICE_CALL_NAME, &(javaAudioTrackFields.STREAM_VOICE_CALL))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_MUSIC_NAME, &(javaAudioTrackFields.STREAM_MUSIC))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_SYSTEM_NAME, &(javaAudioTrackFields.STREAM_SYSTEM))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_RING_NAME, &(javaAudioTrackFields.STREAM_RING))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_ALARM_NAME, &(javaAudioTrackFields.STREAM_ALARM))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_NOTIFICATION_NAME, &(javaAudioTrackFields.STREAM_NOTIFICATION))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_BLUETOOTH_SCO_NAME, &(javaAudioTrackFields.STREAM_BLUETOOTH_SCO))
- || !android_media_getIntConstantFromClass(env, audioManagerClass,
- JAVA_AUDIOMANAGER_CLASS_NAME,
- JAVA_CONST_STREAM_DTMF_NAME, &(javaAudioTrackFields.STREAM_DTMF))) {
- // error log performed in android_media_getIntConstantFromClass()
- return -1;
- }
-
return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
}
diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp
index 85c0a9c..9f9bedb 100644
--- a/core/jni/android_media_JetPlayer.cpp
+++ b/core/jni/android_media_JetPlayer.cpp
@@ -523,7 +523,7 @@
jetPlayerClass,
JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "I");
if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) {
- ALOGE("Can't find AudioTrack.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
+ ALOGE("Can't find JetPlayer.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
return -1;
}
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp
index a57aad7..2895171 100644
--- a/core/jni/android_util_Log.cpp
+++ b/core/jni/android_util_Log.cpp
@@ -27,6 +27,7 @@
#include "JNIHelp.h"
#include "utils/misc.h"
#include "android_runtime/AndroidRuntime.h"
+#include "android_util_Log.h"
#define MIN(a,b) ((a<b)?a:b)
@@ -56,40 +57,48 @@
return levels.info;
}
+static jboolean isLoggable(const char* tag, jint level) {
+ String8 key;
+ key.append(LOG_NAMESPACE);
+ key.append(tag);
+
+ char buf[PROPERTY_VALUE_MAX];
+ if (property_get(key.string(), buf, "") <= 0) {
+ return false;
+ }
+
+ int logLevel = toLevel(buf);
+ return logLevel >= 0 && level >= logLevel;
+}
+
static jboolean android_util_Log_isLoggable(JNIEnv* env, jobject clazz, jstring tag, jint level)
{
- int len;
- char key[PROPERTY_KEY_MAX];
- char buf[PROPERTY_VALUE_MAX];
-
if (tag == NULL) {
return false;
}
- jboolean result = false;
-
const char* chars = env->GetStringUTFChars(tag, NULL);
+ if (!chars) {
+ return false;
+ }
+ jboolean result = false;
if ((strlen(chars)+sizeof(LOG_NAMESPACE)) > PROPERTY_KEY_MAX) {
char buf2[200];
snprintf(buf2, sizeof(buf2), "Log tag \"%s\" exceeds limit of %d characters\n",
chars, PROPERTY_KEY_MAX - sizeof(LOG_NAMESPACE));
- // release the chars!
- env->ReleaseStringUTFChars(tag, chars);
-
jniThrowException(env, "java/lang/IllegalArgumentException", buf2);
- return false;
} else {
- strncpy(key, LOG_NAMESPACE, sizeof(LOG_NAMESPACE)-1);
- strcpy(key + sizeof(LOG_NAMESPACE) - 1, chars);
+ result = isLoggable(chars, level);
}
env->ReleaseStringUTFChars(tag, chars);
+ return result;
+}
- len = property_get(key, buf, "");
- int logLevel = toLevel(buf);
- return (logLevel >= 0 && level >= logLevel) ? true : false;
+bool android_util_Log_isVerboseLogEnabled(const char* tag) {
+ return isLoggable(tag, levels.verbose);
}
/*
diff --git a/core/java/android/nfc/LlcpPacket.aidl b/core/jni/android_util_Log.h
similarity index 67%
rename from core/java/android/nfc/LlcpPacket.aidl
rename to core/jni/android_util_Log.h
index 80f424d..4804a854 100644
--- a/core/java/android/nfc/LlcpPacket.aidl
+++ b/core/jni/android_util_Log.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,17 @@
* limitations under the License.
*/
-package android.nfc;
+#ifndef _ANDROID_UTIL_LOG_H
+#define _ANDROID_UTIL_LOG_H
-/**
- * @hide
- */
-parcelable LlcpPacket;
\ No newline at end of file
+#include <jni.h>
+#include <JNIHelp.h>
+
+
+namespace android {
+
+bool android_util_Log_isVerboseLogEnabled(const char* tag);
+
+}
+
+#endif // _ANDROID_UTIL_LOG_H
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 23ad154..064dcac 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -44,6 +44,7 @@
#include <SkiaColorFilter.h>
#include <Rect.h>
+#include <TextLayout.h>
#include <TextLayoutCache.h>
namespace android {
@@ -566,6 +567,54 @@
env->ReleaseStringChars(text, textArray);
}
+static void renderPosText(OpenGLRenderer* renderer, const jchar* text, int count,
+ const jfloat* positions, jint dirFlags, SkPaint* paint) {
+ sp<TextLayoutCacheValue> value;
+#if USE_TEXT_LAYOUT_CACHE
+ value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, dirFlags);
+ if (value == NULL) {
+ ALOGE("Cannot get TextLayoutCache value for text = '%s'",
+ String8(text, count).string());
+ return;
+ }
+#else
+ value = new TextLayoutCacheValue(count);
+ TextLayoutEngine::getInstance().computeValues(value.get(), paint,
+ text, 0, count, count, dirFlags);
+#endif
+
+ const jchar* glyphs = value->getGlyphs();
+ size_t glyphsCount = value->getGlyphsCount();
+ if (count < int(glyphsCount)) glyphsCount = count;
+ int bytesCount = glyphsCount * sizeof(jchar);
+
+ renderer->drawPosText((const char*) glyphs, bytesCount, glyphsCount, positions, paint);
+}
+
+static void android_view_GLES20Canvas_drawPosTextArray(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, jcharArray text, jint index, jint count,
+ jfloatArray pos, SkPaint* paint) {
+ jchar* textArray = env->GetCharArrayElements(text, NULL);
+ jfloat* positions = env->GetFloatArrayElements(pos, NULL);
+
+ renderPosText(renderer, textArray + index, count, positions, kBidi_LTR, paint);
+
+ env->ReleaseFloatArrayElements(pos, positions, JNI_ABORT);
+ env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
+}
+
+static void android_view_GLES20Canvas_drawPosText(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, jstring text, jint start, jint end,
+ jfloatArray pos, SkPaint* paint) {
+ const jchar* textArray = env->GetStringChars(text, NULL);
+ jfloat* positions = env->GetFloatArrayElements(pos, NULL);
+
+ renderPosText(renderer, textArray + start, end - start, positions, kBidi_LTR, paint);
+
+ env->ReleaseFloatArrayElements(pos, positions, JNI_ABORT);
+ env->ReleaseStringChars(text, textArray);
+}
+
// ----------------------------------------------------------------------------
// Display lists
// ----------------------------------------------------------------------------
@@ -829,6 +878,10 @@
{ "nDrawTextRun", "(ILjava/lang/String;IIIIFFII)V",
(void*) android_view_GLES20Canvas_drawTextRun },
+ { "nDrawPosText", "(I[CII[FI)V", (void*) android_view_GLES20Canvas_drawPosTextArray },
+ { "nDrawPosText", "(ILjava/lang/String;II[FI)V",
+ (void*) android_view_GLES20Canvas_drawPosText },
+
{ "nGetClipBounds", "(ILandroid/graphics/Rect;)Z",
(void*) android_view_GLES20Canvas_getClipBounds },
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
index 568933c..43d0a2c 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
@@ -97,8 +97,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:background="@null"
android:textColor="#ffffffff"
- android:imeOptions="flagNoFullscreen|actionDone"
- android:privateImeOptions="com.google.android.inputmethod.latin.forceAscii"
+ android:imeOptions="flagForceAscii|flagNoFullscreen|actionDone"
/>
<!-- This delete button is only visible for numeric PIN entry -->
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
index 335a641..8c02888 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
@@ -98,7 +98,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:background="@null"
android:textColor="#ffffffff"
- android:privateImeOptions="com.google.android.inputmethod.latin.forceAscii"
+ android:imeOptions="flagForceAscii"
/>
<!-- This delete button is only visible for numeric PIN entry -->
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
index e95553f..66d7fd7 100644
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_password_landscape.xml
@@ -153,8 +153,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:background="@null"
android:textColor="?android:attr/textColorPrimary"
- android:imeOptions="flagNoFullscreen|actionDone"
- android:privateImeOptions="com.google.android.inputmethod.latin.forceAscii"
+ android:imeOptions="flagForceAscii|flagNoFullscreen|actionDone"
/>
<!-- This delete button is only visible for numeric PIN entry -->
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index cfcc794..426b2f7 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -119,8 +119,7 @@
android:background="@null"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff"
- android:imeOptions="actionDone"
- android:privateImeOptions="com.google.android.inputmethod.latin.forceAscii"
+ android:imeOptions="flagForceAscii|actionDone"
/>
<!-- This delete button is only visible for numeric PIN entry -->
diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml
index 7f1891e..6419872 100644
--- a/core/res/res/values/styles_device_defaults.xml
+++ b/core/res/res/values/styles_device_defaults.xml
@@ -687,7 +687,7 @@
<style name="AlertDialog.DeviceDefault" parent="AlertDialog.Holo">
</style>
- <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.DeviceDefault.Light" >
+ <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Holo.Light" >
</style>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 94d2c38..8135986 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -411,13 +411,13 @@
<style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Holo.Dialog.Alert">
<item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault</item>
</style>
- <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.DeviceDefault.Light.Dialog.Alert">
+ <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Holo.Light.Dialog.Alert">
<item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item>
</style>
- <style name="Theme.DeviceDefault.SearchBar" parent="Theme.DeviceDefault.SearchBar">
+ <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Holo.SearchBar">
</style>
- <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.DeviceDefault.Light.SearchBar">
+ <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Holo.Light.SearchBar">
</style>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 7f3894d..ee4c48e 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -271,7 +271,8 @@
</li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/renderscript/index.html">
- <span class="en">RenderScript</span></a>
+ <span class="en">Renderscript</span></a>
+ <span class="new">updated</span>
</div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
@@ -282,6 +283,10 @@
<span class="en">Compute</span>
</a>
</li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference.html">
+ <span class="en">Runtime API Reference</span>
+ </a>
+ </li>
</ul>
</li>
@@ -360,6 +365,9 @@
<li><a href="<?cs var:toroot ?>guide/topics/nfc/advanced-nfc.html">Advanced NFC</a></li>
</ul>
</li>
+ <li><a href="<?cs var:toroot?>guide/topics/wireless/wifip2p.html">
+ <span class="en">Wi-Fi Direct</span></a> <span class="new">new!</span>
+ </li>
<li class="toggle-list">
<div><a href="<?cs var:toroot?>guide/topics/usb/index.html">
<span class="en">USB</span></a>
diff --git a/docs/html/guide/topics/graphics/hardware-accel.jd b/docs/html/guide/topics/graphics/hardware-accel.jd
index c8703a5..e3ff215 100644
--- a/docs/html/guide/topics/graphics/hardware-accel.jd
+++ b/docs/html/guide/topics/graphics/hardware-accel.jd
@@ -283,8 +283,6 @@
<li>{@link android.graphics.Canvas#drawPicture drawPicture()}</li>
- <li>{@link android.graphics.Canvas#drawPosText drawPosText()}</li>
-
<li>{@link android.graphics.Canvas#drawTextOnPath drawTextOnPath()}</li>
<li>{@link android.graphics.Canvas#drawVertices drawVertices()}</li>
@@ -318,9 +316,6 @@
<li>{@link android.graphics.Canvas#drawBitmapMesh drawBitmapMesh()}: colors array is
ignored</li>
- <li>{@link android.graphics.Canvas#drawLines drawLines()}: anti-aliasing is not
- supported</li>
-
<li>{@link android.graphics.Canvas#setDrawFilter setDrawFilter()}: can be set, but is
ignored</li>
</ul>
diff --git a/docs/html/guide/topics/renderscript/compute.jd b/docs/html/guide/topics/renderscript/compute.jd
index 8f08f59..e827f00 100644
--- a/docs/html/guide/topics/renderscript/compute.jd
+++ b/docs/html/guide/topics/renderscript/compute.jd
@@ -1,38 +1,253 @@
page.title=Compute
-parent.title=RenderScript
+parent.title=Renderscript
parent.link=index.html
+
@jd:body
- <div id="qv-wrapper">
- <div id="qv">
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
- <h2>Related Samples</h2>
+ <ol>
+ <li>
+ <a href="#creating">Creating a Compute Renderscript</a>
- <ol>
- <li><a href="{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">Hello
- Compute</a></li>
- <li><a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a></li>
- </ol>
- </div>
+ <ol>
+ <li><a href="#creating-renderscript">Creating the Renderscript file</a></li>
+
+ <li><a href="#calling">Calling the Renderscript code</a></li>
+ </ol>
+ </li>
+ </ol>
+
+ <h2>Related Samples</h2>
+
+ <ol>
+ <li><a href="{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">Hello
+ Compute</a></li>
+
+ <li><a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a></li>
+ </ol>
</div>
+</div>
- <p>RenderScript exposes a set of compute APIs that you can use to do intensive computational operations.
- You can use the compute APIs in the context of a graphics RenderScript such as calculating the
- transformation of many geometric objects in a scene. You can also create a standalone compute RenderScript that does not
- draw anything to the screen such as bitmap image processing for a photo editor application.
- The RenderScript compute APIs are mainly defined in the <code>rs_cl.rsh</code> header</p>
-
- <p>Compute RenderScripts are simpler to setup and implement as there is no graphics rendering involved.
- You can offload computational aspects of your application to RenderScript by creating a native RenderScript
- file (.rs) and using the generated reflected layer class to call functions in the <code>.rs</code> file.
+<p>Renderscript exposes a set of compute APIs that you can use to do intensive computational
+operations. You can use the compute APIs in the context of a graphics Renderscript such as
+calculating the positions of many objects in a scene. You can also create standalone compute
+Renderscripts such as one that does image processing for a photo editor application.</p>
- <p>See the <a href="{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">HelloCompute</a>
- sample in the Android SDK for more
- information on how to create a simple compute RenderScript.</p>
- <p>
- See the <a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a>
- sample in the Android SDK for more
- information on how to create a compute RenderScript that is used in a graphics RenderScript.
- The compute RenderScript is contained in
- <a href="{@docRoot}resources/samples/RenderScript/Balls/src/com/example/android/rs/balls/ball_physics.html">balls_physics.rs</a>.
- </p>
\ No newline at end of file
+<p>Compute Renderscripts scale to the amount of
+processing cores available on the device. This is enabled through a function named
+<code>rsForEach()</code> (or the <code>forEach_root()</code> method at the Android framework level).
+that automatically partitions work across available processing cores on the device.
+For now, compute Renderscripts can only take advantage of CPU
+cores, but in the future, they can potentially run on other types of processors such as GPUs and
+DSPs.</p>
+
+<h2 id="creating-renderscript">Creating a Compute Renderscript</h2>
+
+<p>Implementing a compute Renderscript creating a <code>.rs</code> file that contains
+your Renderscript code and calling it at the Android framework level with the
+<code>forEach_root()</code> or at the Renderscript runtime level with the
+<code>rsForEach()</code> function. The following diagram describes how a typical compute
+Renderscript is set up:</p><img src="{@docRoot}images/rs_compute.png">
+
+<p class="img-caption"><strong>Figure 1.</strong> Compute Renderscript overview</p>
+
+<p>The following sections describe how to create a simple compute Renderscript and use it in an
+Android application. This example uses the <a href=
+"{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">HelloCompute Renderscript
+sample</a> that is provided in the SDK as a guide (some code has been modified from its original
+form for simplicity).</p>
+
+<h3 id="creating-renderscript">Creating the Renderscript file</h3>
+
+<p>Your Renderscript code resides in <code>.rs</code> and <code>.rsh</code> files in the
+<code><project_root>/src/</code> directory. This code contains the compute logic
+and declares all necessary variables and pointers.
+Every compute <code>.rs</code> file generally contains the following items:</p>
+
+<ul>
+ <li>A pragma declaration (<code>#pragma rs java_package_name(<em>package.name</em>)</code>)
+ that declares the package name of the <code>.java</code> reflection of this Renderscript.</li>
+
+ <li>A pragma declaration (<code>#pragma version(1)</code>) that declares the version of
+ Renderscript that you are using (1 is the only value for now).</li>
+
+ <li>A <code>root()</code> function that is the main worker function. The root function is
+ called by the <code>rsForEach</code> function, which allows the Renderscript code to be called and
+ executed on multiple cores if they are available. The <code>root()</code> function must return
+ <code>void</code> and accept the following arguments:
+
+ <ul>
+ <li>Pointers to memory allocations that are used for the input and output of the compute
+ Renderscript. Both of these pointers are required for Android 3.2 (API level 13) platform
+ versions or older. Android 4.0 (API level 14) and later requires one or both of these
+ allocations.</li>
+ </ul>
+
+ <p>The following arguments are optional, but both must be supplied if you choose to use
+ them:</p>
+
+ <ul>
+ <li>A pointer for user-defined data that the Renderscript might need to carry out
+ computations in addition to the necessary allocations. This can be a pointer to a simple
+ primitive or a more complex struct.</li>
+
+ <li>The size of the user-defined data.</li>
+ </ul>
+ </li>
+
+ <li>An optional <code>init()</code> function. This allows you to do any initialization
+ before the <code>root()</code> function runs, such as initializing variables. This
+ function runs once and is called automatically when the Renderscript starts, before anything
+ else in your Renderscript.</li>
+
+ <li>Any variables, pointers, and structures that you wish to use in your Renderscript code (can
+ be declared in <code>.rsh</code> files if desired)</li>
+</ul>
+
+<p>The following code shows how the <a href=
+"{@docRoot}resources/samples/RenderScript/HelloCompute/src/com/example/android/rs/hellocompute/mono.html">
+mono.rs</a> file is implemented:</p>
+<pre>
+#pragma version(1)
+#pragma rs java_package_name(com.example.android.rs.hellocompute)
+
+//multipliers to convert a RGB colors to black and white
+const static float3 gMonoMult = {0.299f, 0.587f, 0.114f};
+
+void root(const uchar4 *v_in, uchar4 *v_out) {
+ //unpack a color to a float4
+ float4 f4 = rsUnpackColor8888(*v_in);
+ //take the dot product of the color and the multiplier
+ float3 mono = dot(f4.rgb, gMonoMult);
+ //repack the float to a color
+ *v_out = rsPackColorTo8888(mono);
+}
+</pre>
+
+<h3 id="calling">Calling the Renderscript code</h3>
+
+<p>You can do Renderscript to Renderscript calls with <code>rsForEach</code> in situations
+such as when a graphics Renderscript needs to do a lot of computational operations. The Renderscript
+<a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a> sample shows how
+this is setup. The <a href=
+"resources/samples/RenderScript/Balls/src/com/example/android/rs/balls/balls.html">balls.rs</a>
+graphics Renderscript calls the <a href=
+"resources/samples/RenderScript/Balls/src/com/example/android/rs/balls/balls.html">balls_physics.rs</a>
+compute Renderscript to calculate the location of the balls that are rendered to the screen.</p>
+
+<p>Another way to use a compute Renderscript is to call it from your Android framework code by
+creating a Renderscript object by instantiating the (<code>ScriptC_<em>script_name</em></code>)
+class. This class contains a method, <code>forEach_root()</code>, that lets you invoke
+<code>rsForEach</code>. You give it the same parameters that you would if you were invoking it
+at the Renderscript runtime level. This technique allows your Android application to offload
+intensive mathematical calculations to Renderscript. See the <a href=
+"{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">HelloCompute</a> sample to see
+how a simple Android application can utilize a compute Renderscript.</p>
+
+<p>To call a compute Renderscript at the Android framework level:</p>
+
+<ol>
+ <li>Allocate memory that is needed by the compute Renderscript in your Android framework code.
+ You need an input and output {@link android.renderscript.Allocation} for Android 3.2 (API level
+ 13) platform versions and older. The Android 4.0 (API level 14) platform version requires only
+ one or both {@link android.renderscript.Allocation}s.</li>
+
+ <li>Create an instance of the <code>ScriptC_<em>script_name</em></code> class.</li>
+
+ <li>Call <code>forEach_root()</code>, passing in the allocations, the
+ Renderscript, and any optional user-defined data. The output allocation will contain the output
+ of the compute Renderscript.</li>
+</ol>
+
+<p>In the following example, taken from the <a href=
+"{@docRoot}resources/samples/RenderScript/HelloCompute/index.html">HelloCompute</a> sample, processes
+a bitmap and outputs a black and white version of it. The
+<code>createScript()</code> method carries out the steps described previously. This method the compute
+Renderscript, <code>mono.rs</code>, passing in memory allocations that store the bitmap to be processed
+as well as the eventual output bitmap. It then displays the processed bitmap onto the screen:</p>
+<pre>
+package com.example.android.rs.hellocompute;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap;
+import android.renderscript.RenderScript;
+import android.renderscript.Allocation;
+import android.widget.ImageView;
+
+public class HelloCompute extends Activity {
+ private Bitmap mBitmapIn;
+ private Bitmap mBitmapOut;
+
+ private RenderScript mRS;
+ private Allocation mInAllocation;
+ private Allocation mOutAllocation;
+ private ScriptC_mono mScript;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ mBitmapIn = loadBitmap(R.drawable.data);
+ mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(), mBitmapIn.getHeight(),
+ mBitmapIn.getConfig());
+
+ ImageView in = (ImageView) findViewById(R.id.displayin);
+ in.setImageBitmap(mBitmapIn);
+
+ ImageView out = (ImageView) findViewById(R.id.displayout);
+ out.setImageBitmap(mBitmapOut);
+
+ createScript();
+ }
+ private void createScript() {
+ mRS = RenderScript.create(this);
+ mInAllocation = Allocation.createFromBitmap(mRS, mBitmapIn,
+ Allocation.MipmapControl.MIPMAP_NONE,
+ Allocation.USAGE_SCRIPT);
+ mOutAllocation = Allocation.createTyped(mRS, mInAllocation.getType());
+ mScript = new ScriptC_mono(mRS, getResources(), R.raw.mono);
+ mScript.forEach_root(mInAllocation, mOutAllocation);
+ mOutAllocation.copyTo(mBitmapOut);
+ }
+
+ private Bitmap loadBitmap(int resource) {
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inPreferredConfig = Bitmap.Config.ARGB_8888;
+ return BitmapFactory.decodeResource(getResources(), resource, options);
+ }
+}
+</pre>
+
+<p>To call a compute Renderscript from another Renderscript file:</p>
+<ol>
+ <li>Allocate memory that is needed by the compute Renderscript in your Android framework code.
+ You need an input and output {@link android.renderscript.Allocation} for Android 3.2 (API level
+ 13) platform versions and older. The Android 4.0 (API level 14) platform version requires only
+ one or both {@link android.renderscript.Allocation}s.</li>
+
+ <li>Call <code>rsForEach()</code>, passing in the allocations and any optional user-defined data.
+ The output allocation will contain the output of the compute Renderscript.</li>
+</ol>
+<p>The following example, taken from the <a href=
+"{@docRoot}resources/samples/RenderScript/Balls/src/com/example/android/rs/balls/balls.html">Renderscript
+Balls sample</a>, demonstrates how to do make a script to script call:</p>
+<pre>
+rs_script script;
+rs_allocation in_allocation;
+rs_allocation out_allocation;
+UserData_t data;
+...
+rsForEach(script, in_allocation, out_allocation, &data, sizeof(data));
+</pre>
+
+<p>In this example, assume that the script and memory allocations have already been
+allocated and bound at the Android framework level and that <code>UserData_t</code> is a struct
+declared previously. Passing a pointer to a struct and the size of the struct to <code>rsForEach</code>
+is optional, but useful if your compute Renderscript requires additional information other than
+the necessary memory allocations.</p>
diff --git a/docs/html/guide/topics/renderscript/graphics.jd b/docs/html/guide/topics/renderscript/graphics.jd
index 2fefecc..1c6d0de 100644
--- a/docs/html/guide/topics/renderscript/graphics.jd
+++ b/docs/html/guide/topics/renderscript/graphics.jd
@@ -1,6 +1,7 @@
-page.title=3D Graphics
-parent.title=RenderScript
+page.title=Graphics
+parent.title=Renderscript
parent.link=index.html
+
@jd:body
<div id="qv-wrapper">
@@ -11,16 +12,16 @@
<li>
<a href="#creating-graphics-rs">Creating a Graphics Renderscript</a>
<ol>
- <li><a href="#creating-native">Creating the native Renderscript file</a></li>
+ <li><a href="#creating-native">Creating the Renderscript file</a></li>
<li><a href="#creating-entry">Creating the Renderscript entry point class</a></li>
- <li><a href="#creating-view">Creating the surface view</a></li>
- <li><a href="#creating-activity">Creating the activity</a></li>
+ <li><a href="#creating-view">Creating the view class</a></li>
+ <li><a href="#creating-activity">Creating the activity class</a></li>
</ol>
</li>
<li>
<a href="#drawing">Drawing</a>
<ol>
- <li><a href="#drawing-rsg">Drawing using the rsgDraw functions</a></li>
+ <li><a href="#drawing-rsg">Simple drawing</a></li>
<li><a href="#drawing-mesh">Drawing with a mesh</a></li>
</ol>
</li>
@@ -31,6 +32,9 @@
<li><a href="#shader-sampler">Defining a sampler</a></li>
</ol>
</li>
+ <li>
+ <a href="#fbo">Rendering to a Framebuffer Object</a>
+ </li>
</ol>
<h2>Related Samples</h2>
@@ -40,8 +44,9 @@
<li><a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a></li>
- <li><a href="{@docRoot}resources/samples/RenderScript/HelloWorld/index.html">Hello
- World</a></li>
+ <li><a href="{@docRoot}resources/samples/RenderScript/FountainFbo/index.html">FountainFbo</a></li>
+
+ <li><a href="{@docRoot}resources/samples/RenderScript/HelloWorld/index.html">Hello World</a></li>
<li><a
href="{@docRoot}resources/samples/RenderScript/MiscSamples/index.html">Misc Samples</a></li>
@@ -49,310 +54,476 @@
</div>
</div>
- <p>RenderScript provides a number of graphics APIs for 3D rendering, both at the Android
- framework level as well as at the native level. For instance, the Android framework APIs let you
+ <p>Renderscript provides a number of graphics APIs for rendering, both at the Android
+ framework level as well as at the Renderscript runtime level. For instance, the Android framework APIs let you
create meshes and define shaders to customize the graphical rendering pipeline. The native
- RenderScript graphics APIs lets you draw the actual meshes to render your scene. In general, you
- will need to be familiar with APIs to appropriately render 3D graphics on an Android-powered
- device.</p>
+ Renderscript graphics APIs let you draw the actual meshes to render your scene. You need to
+ be familiar with both APIs to appropriately render graphics on an Android-powered device.</p>
- <h2 id="creating-graphics-rs">Creating a Graphics RenderScript</h2>
+ <h2 id="creating-graphics-rs">Creating a Graphics Renderscript</h2>
- <p>Because of the various layers of code when writing a RenderScript application, it is useful to
- create the following files for a scene that you want to render:</p>
+ <p>Renderscript applications require various layers of code, so it is useful to create the following
+ files to help keep your application organized:</p>
- <ul>
- <li>The native RenderScript <code>.rs</code> file. This file contains the logic to do the
- graphics rendering.</li>
+ <dl>
+ <dt>The Renderscript <code>.rs</code> file</dt>
- <li>The RenderScript entry point class that allows your view to interact with the code defined
- in the <code>.rs</code> file. This class contains a RenderScript object(instance of
+ <dd>This file contains the logic to do the graphics rendering.</dd>
+
+ <dt>The Renderscript entry point <code>.java</code> class</dt>
+
+ <dd>This class allows the view class to interact with the code defined in the <code>.rs</code>
+ file. This class contains a Renderscript object (instance of
<code>ScriptC_<em>renderscript_file</em></code>), which allows your Android framework code to
- call the native RenderScript code. This class also creates the {@link
- android.renderscript.RenderScriptGL} context object, which contains the current rendering state
- of the RenderScript such as programs (vertex and fragment shaders, for example) that you want
- to define and bind to the graphics pipeline. The context object attaches to the RenderScript
- object (instance of <code><em>ScriptC_renderscript_file</em></code>) that does the rendering.
- Our example names this class <code>HelloWorldRS</code>.</li>
+ call the Renderscript code. In general, this class does much of the setup for Renderscript
+ such as shader and mesh building and memory allocation and binding. The SDK samples follow the
+ convention of naming this file ActivityRS.java,
+ where Activity is the name of your main activity class.</dd>
- <li>Create a class that extends {@link android.renderscript.RSSurfaceView} to provide a surface
- to render on. If you want to implement callbacks from events inherited from {@link
+ <dt>The view <code>.java</code> class</dt>
+
+ <dd>This class extends {@link android.renderscript.RSSurfaceView} or {@link
+ android.renderscript.RSTextureView} to provide a surface to render on. A {@link
+ android.renderscript.RSSurfaceView} consumes a whole window, but a {@link
+ android.renderscript.RSTextureView} allows you to draw Renderscript graphics inside of a
+ view and add it to a {@link android.view.ViewGroup} alongside
+ other views. In this class, you create a {@link android.renderscript.RenderScriptGL} context object
+ with a call to {@link android.renderscript.RSSurfaceView#createRenderScriptGL
+ RSSurfaceView.createRenderscriptGL()} or {@link android.renderscript.RSTextureView#createRenderScriptGL
+ RSTextureView.createRenderscriptGL()}. The {@link android.renderscript.RenderScriptGL} context object
+ contains information about the current rendering state of Renderscript such as the vertex and
+ fragment shaders. You pass this context object to the Renderscript entry point class, so that
+ class can modify the rendering context if needed and bind the Renderscript code to the context. Once bound,
+ the view class can use the Renderscript code to display graphics.
+ The view class should also implement callbacks for events inherited from {@link
android.view.View}, such as {@link android.view.View#onTouchEvent onTouchEvent()} and {@link
- android.view.View#onKeyDown onKeyDown()}, do so in this class as well.</li>
+ android.view.View#onKeyDown onKeyDown()} if you want to detect these types of user interactions.
+ The SDK samples follow the convention of naming this file ActivityView.java,
+ where Activity is the name of your main activity class</dd>
- <li>Create a class that is the main Activity class, like you would with any Android
- application. This class sets your {@link android.renderscript.RSSurfaceView} as the content
- view for this Activity.</li>
- </ul>
+ <dt>The activity <code>.java</code> class</dt>
- <p>The following sections describe how to implement these three classes by using the HelloWorld
- RenderScript sample that is provided in the SDK as a guide (some code has been modified from its
- original form for simplicity).</p>
+ <dd>This class is the main activity class and sets your {@link android.renderscript.RSSurfaceView} as the main content
+ view for this activity or uses the {@link android.renderscript.RSTextureView} alongside other views.</dd>
+ </dl>
+ <p>Figure 1 describes how these classes interact with one another in a graphics Renderscript:</p>
+
+ <img src="{@docRoot}images/rs_graphics.png">
+ <p class="img-caption"><strong>Figure 1.</strong> Graphics Renderscript overview</p>
- <h3 id="creating-native">Creating the native RenderScript file</h3>
- <p>Your native RenderScript code resides in a <code>.rs</code> file in the
- <code><project_root>/src/</code> directory. You can also define <code>.rsh</code> header
- files. This code contains the logic to render your graphics and declares all necessary variables
+ <p>The following sections describe how to create an application that uses a graphics Renderscript by using
+ the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Renderscript Fountain
+ sample</a> that is provided in the SDK as a guide (some code has been modified from its original
+ form for simplicity).</p>
+
+ <h3 id="creating-native">Creating the Renderscript file</h3>
+
+ <p>Your Renderscript code resides in <code>.rs</code> and <code>.rsh</code> (headers) files in the
+ <code><project_root>/src/</code> directory. This code contains the logic to render your
+ graphics and declares all other necessary items such as variables, structs,
and pointers. Every graphics <code>.rs</code> file generally contains the following items:</p>
<ul>
- <li>A pragma (<code>#pragma rs java_package_name(<em>package.name</em>)</code>) that declares
- the package name of the <code>.java</code> reflection of this RenderScript.</li>
+ <li>A pragma declaration (<code>#pragma rs java_package_name(<em>package.name</em>)</code>) that declares
+ the package name of the <code>.java</code> reflection of this Renderscript.</li>
- <li>A pragma (<code>#pragma version(1)</code>) that declares the version of RenderScript that
+ <li>A pragma declaration (<code>#pragma version(1)</code>) that declares the version of Renderscript that
you are using (1 is the only value for now).</li>
- <li>A <code>#include</code> of the rs_graphics.rsh header file.</li>
+ <li>A <code>#include "rs_graphics.rsh"</code> declaration.</li>
- <li>A <code>root()</code> function. This is the main worker function for your RenderScript and
- calls RenderScript graphics APIs to draw meshes to the surface. This function is called every
- time a frame refresh occurs, which is specified as its return value. A <code>0</code> specified
- for the return value says to only render the frame when a property of the scene that you are
+ <li>A <code>root()</code> function. This is the main worker function for your Renderscript and
+ calls Renderscript graphics functions to render scenes. This function is called every time a
+ frame refresh occurs, which is specified as its return value. A <code>0</code> (zero) specified for
+ the return value says to only render the frame when a property of the scene that you are
rendering changes. A non-zero positive integer specifies the refresh rate of the frame in
milliseconds.
- <p class="note"><strong>Note:</strong> The RenderScript runtime makes its best effort to
+ <p class="note"><strong>Note:</strong> The Renderscript runtime makes its best effort to
refresh the frame at the specified rate. For example, if you are creating a live wallpaper
- and set the return value to 50, the runtime renders the wallpaper at 20fps if it has just
- enough or more resources to do so, and renders as fast as it can if it does not.</p>
-
- <p>For more
- information on using the RenderScript graphics functions, see the <a href=
+ and set the return value to 20, the Renderscript runtime renders the wallpaper at 20fps if it has just
+ enough or more resources to do so. It renders as fast as it can if not enough resources
+ are available.</p>
+
+ <p>For more information on using the Renderscript graphics functions, see the <a href=
"#drawing">Drawing</a> section.</p>
</li>
- <li>An <code>init()</code> function. This allows you to do any initialization of your
- RenderScript before the <code>root()</code> function runs, such as initializing variables. This
- function runs once and is called automatically when the RenderScript starts, before anything
- else in your RenderScript. Creating this function is optional.</li>
+ <li>An <code>init()</code> function. This allows you to do initialization of your
+ Renderscript before the <code>root()</code> function runs, such as assigning values to variables. This
+ function runs once and is called automatically when the Renderscript starts, before anything
+ else in your Renderscript. Creating this function is optional.</li>
- <li>Any variables, pointers, and structures that you wish to use in your RenderScript code (can
+ <li>Any variables, pointers, and structures that you wish to use in your Renderscript code (can
be declared in <code>.rsh</code> files if desired)</li>
</ul>
- <p>The following code shows how the <code>helloworld.rs</code> file is implemented:</p>
+ <p>The following code shows how the <code>fountain.rs</code> file is implemented:</p>
<pre>
#pragma version(1)
// Tell which java package name the reflected files should belong to
-#pragma rs java_package_name(com.android.rs.helloworld)
+#pragma rs java_package_name(com.example.android.rs.fountain)
-// Built-in header with graphics APIs
+//declare shader binding
+#pragma stateFragment(parent)
+
+// header with graphics APIs, must include explicitly
#include "rs_graphics.rsh"
-// gTouchX and gTouchY are variables that are reflected for use
-// by the Android framework API. This RenderScript uses them to be notified of touch events.
-int gTouchX;
-int gTouchY;
+static int newPart = 0;
-// This is invoked automatically when the script is created and initializes the variables
-// in the Android framework layer as well.
-void init() {
- gTouchX = 50.0f;
- gTouchY = 50.0f;
+// the mesh to render
+rs_mesh partMesh;
+
+// the point representing where a particle is rendered
+typedef struct __attribute__((packed, aligned(4))) Point {
+ float2 delta;
+ float2 position;
+ uchar4 color;
+} Point_t;
+Point_t *point;
+
+// main worker function that renders particles onto the screen
+int root() {
+ float dt = min(rsGetDt(), 0.1f);
+ rsgClearColor(0.f, 0.f, 0.f, 1.f);
+ const float height = rsgGetHeight();
+ const int size = rsAllocationGetDimX(rsGetAllocation(point));
+ float dy2 = dt * (10.f);
+ Point_t * p = point;
+ for (int ct=0; ct < size; ct++) {
+ p->delta.y += dy2;
+ p->position += p->delta;
+ if ((p->position.y > height) && (p->delta.y > 0)) {
+ p->delta.y *= -0.3f;
+ }
+ p++;
+ }
+
+ rsgDrawMesh(partMesh);
+ return 1;
}
-int root(int launchID) {
+// adds particles to the screen to render
+static float4 partColor[10];
+void addParticles(int rate, float x, float y, int index, bool newColor)
+{
+ if (newColor) {
+ partColor[index].x = rsRand(0.5f, 1.0f);
+ partColor[index].y = rsRand(1.0f);
+ partColor[index].z = rsRand(1.0f);
+ }
+ float rMax = ((float)rate) * 0.02f;
+ int size = rsAllocationGetDimX(rsGetAllocation(point));
+ uchar4 c = rsPackColorTo8888(partColor[index]);
- // Clear the background color
- rsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- // Tell the runtime what the font color should be
- rsgFontColor(1.0f, 1.0f, 1.0f, 1.0f);
- // Introuduce ourselves to the world by drawing a greeting
- // at the position user touched on the screen
- rsgDrawText("Hello World!", gTouchX, gTouchY);
-
- // Return value tells RS roughly how often to redraw
- // in this case 20 ms
- return 20;
+ Point_t * np = &point[newPart];
+ float2 p = {x, y};
+ while (rate--) {
+ float angle = rsRand(3.14f * 2.f);
+ float len = rsRand(rMax);
+ np->delta.x = len * sin(angle);
+ np->delta.y = len * cos(angle);
+ np->position = p;
+ np->color = c;
+ newPart++;
+ np++;
+ if (newPart >= size) {
+ newPart = 0;
+ np = &point[newPart];
+ }
+ }
}
</pre>
- <h3 id="creating-entry">Creating the RenderScript entry point class</h3>
+ <h3 id="creating-entry">Creating the Renderscript entry point class</h3>
- <p>When you create a RenderScript (<code>.rs</code>) file, it is helpful to create a
- corresponding Android framework class that is an entry point into the <code>.rs</code> file. In
- this entry point class, you create a RenderScript object by instantiating a
- <code>ScriptC_<em>rs_filename</em></code> and binding it to the RenderScript context. The
- RenderScript object is attached to the RenderScript bytecode, which is platform-independent and
- gets compiled on the device when the RenderScript application runs. Both the
- <code>ScriptC_<em>rs_filename</em></code> class and bytecode is generated by the Android build
- tools and is packaged with the <code>.apk</code> file. The bytecode file is located in the
- <code><project_root>/res/raw/</code> directory and is named <code>rs_filename.bc</code>.
- You refer to the bytecode as a resource (<code>R.raw.<em>rs_filename</em></code>). when creating
- the RenderScript object..</p>
+ <p>When you create a Renderscript (<code>.rs</code>) file, it is helpful to create a
+ corresponding Android framework class that is an entry point into the <code>.rs</code> file.
+ The most important thing this class does is receive a {@link android.renderscript.RenderScriptGL} rendering context
+ object from the <a href="#creating-view">view class</a> and binds the actual Renderscript
+ code to the rendering context. This notifies your view class of the code that it needs
+ to render graphics.
+ </p>
- <p>You then bind the RenderScript object to the RenderScript context, so that the surface view
- knows what code to use to render graphics. The following code shows how the
- <code>HelloWorldRS</code> class is implemented:</p>
+ <p>In addition, this class should contain all of the things needed to set up Renderscript.
+ Some important things that you need to do in this class are:</p>
+
+ <ul>
+ <li>Create a Renderscript object
+ <code>ScriptC_<em>rs_filename</em></code>. The Renderscript object is attached to the Renderscript bytecode, which is platform-independent and
+ gets compiled on the device when the Renderscript application runs. The bytecode is referenced
+ as a raw resource and is passed into the constructor for the Renderscript object.
+ For example, this is how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
+ sample creates the Renderscript object:
<pre>
-package com.android.rs.helloworld;
+ RenderScriptGL rs; //obtained from the view class
+ Resources res; //obtained from the view class
+ ...
+ ScriptC_fountain mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
+ </pre>
+ </li>
+ <li>Allocate any necessary memory and bind it to your Renderscript code via the Renderscript object.</li>
+ <li>Build any necessary meshes and bind them to the Renderscript code via the Renderscript object.</li>
+ <li>Create any necessary programs and bind them to the Renderscript code via the Renderscript object.</li>
+ </ul>
+
+ <p>The following code shows how the <a href=
+ "{@docRoot}resources/samples/RenderScript/Fountain/src/com/example/android/rs/fountain/FountainRS.html">
+ FountainRS</a> class is implemented:</p>
+ <pre>
+package com.example.android.rs.fountain;
import android.content.res.Resources;
import android.renderscript.*;
+import android.util.Log;
-public class HelloWorldRS {
- //context and resources are obtained from RSSurfaceView, which calls init()
+public class FountainRS {
+ public static final int PART_COUNT = 50000;
+
+ public FountainRS() {
+ }
+
+ /**
+ * This provides us with the Renderscript context and resources
+ * that allow us to create the Renderscript object
+ */
private Resources mRes;
private RenderScriptGL mRS;
- //Declare the RenderScript object
- private ScriptC_helloworld mScript;
+ // Renderscript object
+ private ScriptC_fountain mScript;
- public HelloWorldRS() {
- }
-
- /**
- * This provides us with the RenderScript context and resources
- * that allow us to create the RenderScript object
- */
+ // Called by the view class to initialize the Renderscript context and renderer
public void init(RenderScriptGL rs, Resources res) {
mRS = rs;
mRes = res;
- initRS();
- }
- /**
- * Calls native RenderScript functions (set_gTouchX and set_gTouchY)
- * through the reflected layer class ScriptC_helloworld to pass in
- * touch point data.
- */
- public void onActionDown(int x, int y) {
- mScript.set_gTouchX(x);
- mScript.set_gTouchY(y);
- }
- /**
- * Binds the RenderScript object to the RenderScript context
- */
- private void initRS() {
- //create the RenderScript object
- mScript = new ScriptC_helloworld(mRS, mRes, R.raw.helloworld);
- //bind the RenderScript object to the RenderScript context
+
+ /**
+ * Create a shader and bind to the Renderscript context
+ */
+ ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
+ pfb.setVaryingColor(true);
+ rs.bindProgramFragment(pfb.create());
+
+ /**
+ * Allocate memory for the particles to render and create the mesh to draw
+ */
+ ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
+ Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
+ smb.addVertexAllocation(points.getAllocation());
+ smb.addIndexSetType(Mesh.Primitive.POINT);
+ Mesh sm = smb.create();
+
+ /**
+ * Create and bind the Renderscript object to the Renderscript context
+ */
+ mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
+ mScript.set_partMesh(sm);
+ mScript.bind_point(points);
mRS.bindRootScript(mScript);
}
-}
+ boolean holdingColor[] = new boolean[10];
+
+ /**
+ * Calls Renderscript functions (invoke_addParticles)
+ * via the Renderscript object to add particles to render
+ * based on where a user touches the screen.
+ */
+ public void newTouchPosition(float x, float y, float pressure, int id) {
+ if (id >= holdingColor.length) {
+ return;
+ }
+ int rate = (int)(pressure * pressure * 500.f);
+ if (rate > 500) {
+ rate = 500;
+ }
+ if (rate > 0) {
+ mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
+ holdingColor[id] = true;
+ } else {
+ holdingColor[id] = false;
+ }
+
+ }
+}
</pre>
- <h3 id="creating-view">Creating the surface view</h3>
- <p>To create a surface view to render graphics on, create a class that extends {@link
- android.renderscript.RSSurfaceView}. This class also creates a RenderScript context object
- ({@link android.renderscript.RenderScriptGL} and passes it to the Rendscript entry point class to
- bind the two. The following code shows how the <code>HelloWorldView</code> class is
- implemented:</p>
+ <h3 id="creating-view">Creating the view class</h3>
+
+
+ <p>To display graphics, you need a view to render on. Create a class that extends {@link
+ android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. This class
+ allows you to create a {@link android.renderscript.RenderScriptGL} context object by calling and
+ pass it to the Rendscript entry point class to bind the two. Once bound, the content is aware
+ of the code that it needs to use to render graphics with. If your Renderscript code
+ depends on any type of information that the view is aware of, such as touches from the user,
+ you can also use this class to relay that information to the Renderscript entry point class.
+ The following code shows how the <code>FountainView</code> class is implemented:</p>
<pre>
-package com.android.rs.helloworld;
+package com.example.android.rs.fountain;
-import android.renderscript.RSSurfaceView;
+import android.renderscript.RSTextureView;
import android.renderscript.RenderScriptGL;
import android.content.Context;
import android.view.MotionEvent;
-public class HelloWorldView extends RSSurfaceView {
- // RenderScript context
- private RenderScriptGL mRS;
- // RenderScript entry point object that does the rendering
- private HelloWorldRS mRender;
+public class FountainView extends RSTextureView {
- public HelloWorldView(Context context) {
+ public FountainView(Context context) {
super(context);
- initRS();
}
+ // Renderscript context
+ private RenderScriptGL mRS;
+ // Renderscript entry point object that calls Renderscript code
+ private FountainRS mRender;
- private void initRS() {
+ /**
+ * Create Renderscript context and initialize Renderscript entry point
+ */
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ android.util.Log.e("rs", "onAttachedToWindow");
if (mRS == null) {
- // Initialize RenderScript with default surface characteristics.
RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
- //Create the RenderScript context
mRS = createRenderScriptGL(sc);
- // Create an instance of the RenderScript entry point class
- mRender = new HelloWorldRS();
- // Call the entry point class to bind it to this context
+ mRender = new FountainRS();
mRender.init(mRS, getResources());
}
}
- /**
- * Rebind everything when the window becomes attached
- */
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- initRS();
- }
-
- /**
- * Stop rendering when window becomes detached
- */
+ @Override
protected void onDetachedFromWindow() {
- // Handle the system event and clean up
- mRender = null;
+ super.onDetachedFromWindow();
+ android.util.Log.e("rs", "onDetachedFromWindow");
if (mRS != null) {
mRS = null;
destroyRenderScriptGL();
}
}
- /**
- * Use callbacks to relay data to RenderScript entry point class
- */
- public boolean onTouchEvent(MotionEvent ev) {
- // Pass touch events from the system to the rendering script
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- mRender.onActionDown((int)ev.getX(), (int)ev.getY());
- return true;
- }
- return false;
+ /**
+ * Use callbacks to relay data to Renderscript entry point class
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent ev)
+ {
+ int act = ev.getActionMasked();
+ if (act == ev.ACTION_UP) {
+ mRender.newTouchPosition(0, 0, 0, ev.getPointerId(0));
+ return false;
+ } else if (act == MotionEvent.ACTION_POINTER_UP) {
+ // only one pointer going up, we can get the index like this
+ int pointerIndex = ev.getActionIndex();
+ int pointerId = ev.getPointerId(pointerIndex);
+ mRender.newTouchPosition(0, 0, 0, pointerId);
+ }
+ int count = ev.getHistorySize();
+ int pcount = ev.getPointerCount();
+
+ for (int p=0; p < pcount; p++) {
+ int id = ev.getPointerId(p);
+ mRender.newTouchPosition(ev.getX(p),
+ ev.getY(p),
+ ev.getPressure(p),
+ id);
+
+ for (int i=0; i < count; i++) {
+ mRender.newTouchPosition(ev.getHistoricalX(p, i),
+ ev.getHistoricalY(p, i),
+ ev.getHistoricalPressure(p, i),
+ id);
+ }
+ }
+ return true;
}
}
-
</pre>
- <h3 id="creating-activity">Creating the Activity</h3>
+ <h3 id="creating-activity">Creating the activity class</h3>
- <p>Applications that use RenderScript still adhere to activity lifecyle, and are part of the same
- view hierarchy as traditional Android applications, which is handled by the Android VM. This
- Activity class sets its view to be the {@link android.renderscript.RSSurfaceView} and handles
- lifecycle callback events appropriately. The following code shows how the <code>HelloWorld</code>
- class is implemented:</p>
+ <p>Applications that use Renderscript still behave like normal Android applications, so you
+ need an activity class that handles activity lifecycle callback events appropriately. The activity class
+ also sets your {@link android.renderscript.RSSurfaceView} view class to be the main content view of the
+ activity or uses your {@link android.renderscript.RSTextureView}
+ in a {@link android.view.ViewGroup} alongside other views.</p>
+
+ <p>The following code shows how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
+ sample declares its activity class:</p>
<pre>
-public class HelloWorldActivity extends Activity {
+package com.example.android.rs.fountain;
- //Custom view to use with RenderScript
- private HelloWorldView view;
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+public class Fountain extends Activity {
+
+ private static final String LOG_TAG = "libRS_jni";
+ private static final boolean DEBUG = false;
+ private static final boolean LOG_ENABLED = false;
+
+ private FountainView mView;
+
+ @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- // Create surface view and set it as the content of our Activity
- mView = new HelloWorldView(this);
- setContentView(view);
+
+ // Create our Preview view and set it as
+ // the content of our activity
+ mView = new FountainView(this);
+ setContentView(mView);
}
+ @Override
protected void onResume() {
- // Ideally an app should implement onResume() and onPause()
- // to take appropriate action when the activity loses focus
+ Log.e("rs", "onResume");
+
+ // Ideally a game should implement onResume() and onPause()
+ // to take appropriate action when the activity looses focus
super.onResume();
- view.resume();
+ mView.resume();
}
+ @Override
protected void onPause() {
- // Ideally an app should implement onResume() and onPause()
- // to take appropriate action when the activity loses focus
+ Log.e("rs", "onPause");
+
+ // Ideally a game should implement onResume() and onPause()
+ // to take appropriate action when the activity looses focus
super.onPause();
- view.pause();
+ mView.pause();
+
+ }
+
+ static void log(String message) {
+ if (LOG_ENABLED) {
+ Log.v(LOG_TAG, message);
+ }
}
}
</pre>
+<p>Now that you have an idea of what is involved in a Renderscript graphics application, you can
+start building your own. It might be easiest to begin with one of the
+<a href="{@docRoot}resources/samples/RenderScript/index.html">Renderscript samples</a> as a starting
+point if this is your first time using Renderscript.</p>
+
<h2 id="drawing">Drawing</h2>
<p>The following sections describe how to use the graphics functions to draw with Renderscript.</p>
- <h3 id="drawing-rsg">Drawing using the rsgDraw functions</h3>
- <p>The native RenderScript APIs provide a few convenient functions to easily draw a polygon to
- the screen. You call these in your <code>root()</code> function to have them render to the
- surface view. These functions are available for simple drawing and should not be used for complex
- graphics rendering:</p>
+ <h3 id="drawing-rsg">Simple drawing</h3>
+
+ <p>The native Renderscript APIs provide a few convenient functions to easily draw a polygon or text to
+ the screen. You call these in your <code>root()</code> function to have them render to the {@link
+ android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. These functions are
+ available for simple drawing and should not be used for complex graphics rendering:</p>
<ul>
<li><code>rsgDrawRect()</code>: Sets up a mesh and draws a rectangle to the screen. It uses the
@@ -360,31 +531,32 @@
<li><code>rsgDrawQuad()</code>: Sets up a mesh and draws a quadrilateral to the screen.</li>
- <li><code>rsgDrawQuadTexCoords()</code>: Sets up a mesh and draws a textured quadrilateral to
- the screen.</li>
+ <li><code>rsgDrawQuadTexCoords()</code>: Sets up a mesh and draws a quadrilateral to the screen
+ using the provided coordinates of a texture.</li>
+
+ <li><code>rsgDrawText()</code>: Draws specified text to the screen. Use <code>rsgFontColor()</code>
+ to set the color of the text.</li>
</ul>
<h3 id="drawing-mesh">Drawing with a mesh</h3>
- <p>When you want to draw complex shapes and textures to the screen, instantiate a {@link
- android.renderscript.Mesh} and draw it to the screen with <code>rsgDrawMesh()</code>. A {@link
+ <p>When you want to render complex scenes to the screen, instantiate a {@link
+ android.renderscript.Mesh} and draw it with <code>rsgDrawMesh()</code>. A {@link
android.renderscript.Mesh} is a collection of allocations that represent vertex data (positions,
- normals, texture coordinates) and index data such as triangles and lines. You can build a Mesh in
- three different ways:</p>
+ normals, texture coordinates) and index data that provides information on how to draw triangles
+ and lines with the provided vertex data. You can build a Mesh in three different ways:</p>
<ul>
<li>Build the mesh with the {@link android.renderscript.Mesh.TriangleMeshBuilder} class, which
- allows you to specify a set of vertices and indices for each triangle that you want to draw.
- The downside of doing it this way is there is no way to specify the vertices in your native
- RenderScript code.</li>
+ allows you to specify a set of vertices and indices for each triangle that you want to draw.</li>
<li>Build the mesh using an {@link android.renderscript.Allocation} or a set of {@link
android.renderscript.Allocation}s with the {@link android.renderscript.Mesh.AllocationBuilder}
- class. This allows you to build a mesh with vertices already stored in memory, which allows you
- to set the vertices in native or Android code.</li>
+ class. This approach allows you to build a mesh with vertices already stored in memory, which allows you
+ to specify the vertices in Renderscript or Android framework code.</li>
- <li>Build the mesh with the {@link android.renderscript.Mesh.Builder} class. This is a
- convenience method for when you know what data types you want to use to build your mesh, but
+ <li>Build the mesh with the {@link android.renderscript.Mesh.Builder} class. You should use
+ this convenience method when you know the data types you want to use to build your mesh, but
don't want to make separate memory allocations like with {@link
android.renderscript.Mesh.AllocationBuilder}. You can specify the types that you want and this
mesh builder automatically creates the memory allocations for you.</li>
@@ -421,7 +593,7 @@
script.set_mesh(smP);
</pre>
- <p>In your native RenderScript code, draw the built mesh to the screen:</p>
+ <p>In your Renderscript code, draw the built mesh to the screen:</p>
<pre>
rs_mesh mesh;
...
@@ -435,18 +607,18 @@
}
</pre>
- <h2 id="shaders">Shaders</h2>
+ <h2 id="shader">Programs</h2>
<p>You can attach four program objects to the {@link android.renderscript.RenderScriptGL} context
to customize the rendering pipeline. For example, you can create vertex and fragment shaders in
- GLSL or build a raster program object with provided methods without writing GLSL code. The four
- program objects mirror a traditional graphical rendering pipeline:</p>
+ GLSL or build a raster program object that controls culling. The four programs mirror a
+ traditional graphical rendering pipeline:</p>
<table>
<tr>
<th>Android Object Type</th>
- <th>RenderScript Native Type</th>
+ <th>Renderscript Native Type</th>
<th>Description</th>
</tr>
@@ -457,17 +629,17 @@
<td>rs_program_vertex</td>
<td>
- <p>The RenderScript vertex program, also known as a vertex shader, describes the stage in
+ <p>The Renderscript vertex program, also known as a vertex shader, describes the stage in
the graphics pipeline responsible for manipulating geometric data in a user-defined way.
- The object is constructed by providing RenderScript with the following data:</p>
+ The object is constructed by providing Renderscript with the following data:</p>
<ul>
- <li>An Element describing its varying inputs or attributes</li>
+ <li>An {@link android.renderscript.Element} describing its varying inputs or attributes</li>
<li>GLSL shader string that defines the body of the program</li>
- <li>a Type that describes the layout of an Allocation containing constant or uniform
- inputs</li>
+ <li>a {@link android.renderscript.Type} that describes the layout of an
+ Allocation containing constant or uniform inputs</li>
</ul>
<p>Once the program is created, bind it to the {@link android.renderscript.RenderScriptGL}
@@ -475,22 +647,29 @@
bindProgramVertex()}. It is then used for all subsequent draw calls until you bind a new
program. If the program has constant inputs, the user needs to bind an allocation
containing those inputs. The allocation's type must match the one provided during creation.
- The RenderScript library then does all the necessary plumbing to send those constants to
- the graphics hardware. Varying inputs to the shader, such as position, normal, and texture
- coordinates are matched by name between the input Element and the Mesh object being drawn.
- The signatures don't have to be exact or in any strict order. As long as the input name in
- the shader matches a channel name and size available on the mesh, the run-time would take
- care of connecting the two. Unlike OpenGL, there is no need to link the vertex and fragment
- programs.</p>
+ </p>
- <p>To bind shader constructs to the Program, declare a struct containing the necessary
- shader constants in your native RenderScript code. This struct is generated into a
- reflected class that you can use as a constant input element during the Program's creation.
- It is an easy way to create an instance of this struct as an allocation. You would then
- bind this Allocation to the Program and the RenderScript system sends the data that is
- contained in the struct to the hardware when necessary. To update shader constants, you
- change the values in the Allocation and notify the native RenderScript code of the
- change.</p>
+ <p>The Renderscript runtime then does all the necessary plumbing to send those constants to
+ the graphics hardware. Varying inputs to the shader, such as position, normal, and texture
+ coordinates are matched by name between the input {@link android.renderscript.Element}
+ and the mesh object that is being drawn. The signatures don't have to be exact or in any
+ strict order. As long as the input name in the shader matches a channel name and size
+ available on the mesh, the Renderscript runtime handles connecting the two. Unlike OpenGL
+ there is no need to link the vertex and fragment programs.</p>
+
+ <p>To bind shader constants to the program, declare a <code>struct</code> that contains the necessary
+ shader constants in your Renderscript code. This <code>struct</code> is generated into a
+ reflected class that you can use as a constant input element during the program's creation.
+ It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
+ bind this {@link android.renderscript.Allocation} to the program and the
+ Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
+ when necessary. To update shader constants, you change the values in the
+ {@link android.renderscript.Allocation} and notify the Renderscript
+ code of the change.</p>
+
+ <p>The {@link android.renderscript.ProgramVertexFixedFunction.Builder} class also
+ lets you build a simple vertex shader without writing GLSL code.
+ </p>
</td>
</tr>
@@ -500,26 +679,33 @@
<td>rs_program_fragment</td>
<td>
- <p>The RenderScript fragment program, also known as the fragment shader, is responsible for
+ <p>The Renderscript fragment program, also known as a fragment shader, is responsible for
manipulating pixel data in a user-defined way. It's constructed from a GLSL shader string
- containing the program body, textures inputs, and a Type object describing the constants
- used by the program. Like the vertex programs, when an allocation with constant input
+ containing the program body, texture inputs, and a {@link android.renderscript.Type}
+ object that describes the constants
+ used by the program. Like the vertex programs, when an {@link android.renderscript.Allocation}
+ with constant input
values is bound to the shader, its values are sent to the graphics program automatically.
- Note that the values inside the allocation are not explicitly tracked. If they change
- between two draw calls using the same program object, notify the runtime of that change by
- calling rsgAllocationSyncAll so it could send the new values to hardware. Communication
+ Note that the values inside the {@link android.renderscript.Allocation} are not explicitly tracked.
+ If they change between two draw calls using the same program object, notify the runtime of that change by
+ calling <code>rsgAllocationSyncAll()</code>, so it can send the new values to hardware. Communication
between the vertex and fragment programs is handled internally in the GLSL code. For
- example, if the fragment program is expecting a varying input called varTex0, the GLSL code
+ example, if the fragment program is expecting a varying input called <code>varTex0</code>, the GLSL code
inside the program vertex must provide it.</p>
- <p>To bind shader constants to this program, declare a struct containing the necessary
- shader constants in your native RenderScript code. This struct is generated into a
- reflected class that you can use as a constant input element during the Program's creation.
- It is an easy way to create an instance of this struct as an allocation. You would then
- bind this Allocation to the Program and the RenderScript system sends the data that is
- contained in the struct to the hardware when necessary. To update shader constants, you
- change the values in the Allocation and notify the native RenderScript code of the
- change.</p>
+ <p>To bind shader constructs to the program, declare a <code>struct</code> that contains the necessary
+ shader constants in your Renderscript code. This <code>struct</code> is generated into a
+ reflected class that you can use as a constant input element during the program's creation.
+ It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
+ bind this {@link android.renderscript.Allocation} to the program and the
+ Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
+ when necessary. To update shader constants, you change the values in the
+ {@link android.renderscript.Allocation} and notify the Renderscript
+ code of the change.</p>
+
+ <p>The {@link android.renderscript.ProgramFragmentFixedFunction.Builder} class also
+ lets you build a simple fragment shader without writing GLSL code.
+ </p>
</td>
</tr>
@@ -528,7 +714,7 @@
<td>rs_program_store</td>
- <td>The RenderScript ProgramStore contains a set of parameters that control how the graphics
+ <td>The Renderscript store program contains a set of parameters that control how the graphics
hardware writes to the framebuffer. It could be used to enable and disable depth writes and
testing, setup various blending modes for effects like transparency and define write masks
for color components.</td>
@@ -539,12 +725,12 @@
<td>rs_program_raster</td>
- <td>Program raster is primarily used to specify whether point sprites are enabled and to
+ <td>The Renderscript raster program is primarily used to specify whether point sprites are enabled and to
control the culling mode. By default back faces are culled.</td>
</tr>
</table>
- <p>The following example defines a vertex shader in GLSL and binds it to the RenderScript:</p>
+ <p>The following example defines a vertex shader in GLSL and binds it to a Renderscript context object:</p>
<pre>
private RenderScriptGL glRenderer; //rendering context
private ScriptField_Point mPoints; //vertices
@@ -567,49 +753,37 @@
ProgramVertex pvs = sb.create();
pvs.bindConstants(mVpConsts.getAllocation(), 0);
glRenderer.bindProgramVertex(pvs);
-
-
</pre>
+
<p>The <a href=
"{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
RsRenderStatesRS</a> sample has many examples on how to create a shader without writing GLSL.</p>
- <h3 id="shader-bindings">Shader bindings</h3>
+ <h3 id="shader-bindings">Program bindings</h3>
- <p>You can also set four pragmas that control the shaders' default bindings to the {@link
+ <p>You can also declare four pragmas that control default program bindings to the {@link
android.renderscript.RenderScriptGL} context when the script is executing:</p>
<ul>
- <li>stateVertex</li>
+ <li><code>stateVertex</code></li>
- <li>stateFragment</li>
+ <li><code>stateFragment</code></li>
- <li>stateRaster</li>
+ <li><code>stateRaster</code></li>
- <li>stateStore</li>
+ <li><code>stateStore</code></li>
</ul>
<p>The possible values for each pragma are <code>parent</code> or <code>default</code>. Using
- <code>default</code> binds the shaders to the graphical context with the system defaults. The
- default shader is defined below:</p>
- <pre>
-("varying vec4 varColor;\n");
-("varying vec2 varTex0;\n");
-("void main() {\n");
-(" gl_Position = UNI_MVP * ATTRIB_position;\n");
-(" gl_PointSize = 1.0;\n");
-(" varColor = ATTRIB_color;\n");
-(" varTex0 = ATTRIB_texture0;\n");
-("}\n");
-</pre>
+ <code>default</code> binds the shaders to the graphical context with the system defaults.</p>
<p>Using <code>parent</code> binds the shaders in the same manner as it is bound in the calling
script. If this is the root script, the parent state is taken from the bind points that are set
by the {@link android.renderscript.RenderScriptGL} bind methods.</p>
- <p>For example, you can define this at the top of your native graphics RenderScript code to have
- the Vertex and Store shaders inherent the bind properties from their parent scripts:</p>
+ <p>For example, you can define this at the top of your graphics Renderscript code to have
+ the vertex and store programs inherent the bind properties from their parent scripts:</p>
<pre>
#pragma stateVertex(parent)
#pragma stateStore(parent)
@@ -618,18 +792,202 @@
<h3 id="shader-sampler">Defining a sampler</h3>
<p>A {@link android.renderscript.Sampler} object defines how data is extracted from textures.
- Samplers are bound to Program objects (currently only a Fragment Program) alongside the texture
- whose sampling they control. These objects are used to specify such things as edge clamping
- behavior, whether mip-maps are used, and the amount of anisotropy required. There might be
- situations where hardware does not support the desired behavior of the sampler. In these cases,
- the runtime attempts to provide the closest possible approximation. For example, the user
- requested 16x anisotropy, but only 8x was set because it's the best available on the
- hardware.</p>
+ Samplers are bound to a {@link android.renderscript.ProgramFragment} alongside the texture
+ whose sampling they control. These
+ objects are used to specify such things as edge clamping behavior, whether mip-maps are used, and
+ the amount of anisotropy required. There might be situations where hardware does not support the
+ desired behavior of the sampler. In these cases, the Renderscript runtime attempts to provide the
+ closest possible approximation. For example, the user requested 16x anisotropy, but only 8x was
+ set because it's the best available on the hardware.</p>
<p>The <a href=
"{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
RsRenderStatesRS</a> sample has many examples on how to create a sampler and bind it to a
Fragment program.</p>
-
-</body>
-</html>
+
+
+
+<h2 id="fbo">Rendering to a Framebuffer Object</h2>
+
+<p>Framebuffer objects allow you to render offscreen instead of in the default onscreen
+framebuffer. This approach might be useful for situations where you need to post-process a texture before
+rendering it to the screen, or when you want to composite two scenes in one such as rendering a rear-view
+mirror of a car. There are two buffers associated with a framebuffer object: a color buffer
+and a depth buffer. The color buffer (required) contains the actual pixel data of the scene
+that you are rendering, and the depth buffer (optional) contains the values necessary to figure
+out what vertices are drawn depending on their z-values.</p>
+
+<p>In general, you need to do the following to render to a framebuffer object:</p>
+
+<ul>
+ <li>Create {@link android.renderscript.Allocation} objects for the color buffer and
+ depth buffer (if needed). Specify the {@link
+ android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} usage attribute for these
+ allocations to notify the Renderscript runtime to use these allocations for the framebuffer
+ object. For the color buffer allocation, you most likely need to declare the {@link
+ android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} usage attribute
+ to use the color buffer as a texture, which is the most common use of the framebuffer object.</li>
+
+ <li>Tell the Renderscript runtime to render to the framebuffer object instead of the default
+ framebuffer by calling <code>rsgBindColorTarget()</code> and passing it the color buffer
+ allocation. If applicable, call <code>rsgBindDepthTarget()</code> passing in the depth buffer
+ allocation as well.</li>
+
+ <li>Render your scene normally with the <code>rsgDraw</code> functions. The scene will be
+ rendered into the color buffer instead of the default onscreen framebuffer.</li>
+
+ <li>When done, tell the Renderscript runtime stop rendering to the color buffer and back
+ to the default framebuffer by calling <code>rsgClearAllRenderTargets()</code>.</li>
+
+ <li>Create a fragment shader and bind a the color buffer to it as a texture.</li>
+
+ <li>Render your scene to the default framebuffer. The texture will be used according
+ to the way you setup your fragment shader.</li>
+</ul>
+
+<p>The following example shows you how to render to a framebuffer object by modifying the
+<a href="{@docRoot}guide/resources/renderscript/Fountain/">Fountain</a> Renderscript sample. The end
+result is the <a href="{@docRoot}guide/resources/renderscript/FountainFBO/">FountainFBO</a> sample.
+The modifications render the exact same scene into a framebuffer object as it does the default
+framebuffer. The framebuffer object is then rendered into the default framebuffer in a small
+area at the top left corner of the screen.</p>
+
+<ol>
+ <li>Modify <code>fountain.rs</code> and add the following global variables. This creates setter
+ methods when this file is reflected into a <code>.java</code> file, allowing you to allocate
+ memory in your Android framework code and binding it to the Renderscript runtime.
+<pre>
+//allocation for color buffer
+rs_allocation gColorBuffer;
+//fragment shader for rendering without a texture (used for rendering to framebuffer object)
+rs_program_fragment gProgramFragment;
+//fragment shader for rendering with a texture (used for rendering to default framebuffer)
+rs_program_fragment gTextureProgramFragment;
+</pre>
+ </li>
+
+ <li>Modify the root function of <code>fountain.rs</code> to look like the following code. The
+ modifications are commented:
+<pre>
+int root() {
+ float dt = min(rsGetDt(), 0.1f);
+ rsgClearColor(0.f, 0.f, 0.f, 1.f);
+ const float height = rsgGetHeight();
+ const int size = rsAllocationGetDimX(rsGetAllocation(point));
+ float dy2 = dt * (10.f);
+ Point_t * p = point;
+ for (int ct=0; ct < size; ct++) {
+ p->delta.y += dy2;
+ p->position += p->delta;
+ if ((p->position.y > height) && (p->delta.y > 0)) {
+ p->delta.y *= -0.3f;
+ }
+ p++;
+ }
+ //Tell Renderscript runtime to render to the frame buffer object
+ rsgBindColorTarget(gColorBuffer, 0);
+ //Begin rendering on a white background
+ rsgClearColor(1.f, 1.f, 1.f, 1.f);
+ rsgDrawMesh(partMesh);
+
+ //When done, tell Renderscript runtime to stop rendering to framebuffer object
+ rsgClearAllRenderTargets();
+
+ //Bind a new fragment shader that declares the framebuffer object to be used as a texture
+ rsgBindProgramFragment(gTextureProgramFragment);
+
+ //Bind the framebuffer object to the fragment shader at slot 0 as a texture
+ rsgBindTexture(gTextureProgramFragment, 0, gColorBuffer);
+ //Draw a quad using the framebuffer object as the texture
+ float startX = 10, startY = 10;
+ float s = 256;
+ rsgDrawQuadTexCoords(startX, startY, 0, 0, 1,
+ startX, startY + s, 0, 0, 0,
+ startX + s, startY + s, 0, 1, 0,
+ startX + s, startY, 0, 1, 1);
+
+ //Rebind the original fragment shader to render as normal
+ rsgBindProgramFragment(gProgramFragment);
+
+ //Render the main scene
+ rsgDrawMesh(partMesh);
+
+ return 1;
+}
+</pre>
+ </li>
+
+ <li>In the <code>FountainRS.java</code> file, modify the <code>init()</code> method to look
+ like the following code. The modifications are commented:
+
+<pre>
+/* Add necessary members */
+private ScriptC_fountainfbo mScript;
+private Allocation mColorBuffer;
+private ProgramFragment mProgramFragment;
+private ProgramFragment mTextureProgramFragment;
+
+public void init(RenderScriptGL rs, Resources res) {
+ mRS = rs;
+ mRes = res;
+
+ ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
+
+ Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
+ smb.addVertexAllocation(points.getAllocation());
+ smb.addIndexSetType(Mesh.Primitive.POINT);
+ Mesh sm = smb.create();
+
+ mScript = new ScriptC_fountainfbo(mRS, mRes, R.raw.fountainfbo);
+ mScript.set_partMesh(sm);
+ mScript.bind_point(points);
+
+ ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
+ pfb.setVaryingColor(true);
+ mProgramFragment = pfb.create();
+ mScript.set_gProgramFragment(mProgramFragment);
+
+ /* Second fragment shader to use a texture (framebuffer object) to draw with */
+ pfb.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
+ ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
+
+ /* Set the fragment shader in the Renderscript runtime */
+ mTextureProgramFragment = pfb.create();
+ mScript.set_gTextureProgramFragment(mTextureProgramFragment);
+
+ /* Create the allocation for the color buffer */
+ Type.Builder colorBuilder = new Type.Builder(mRS, Element.RGBA_8888(mRS));
+ colorBuilder.setX(256).setY(256);
+ mColorBuffer = Allocation.createTyped(mRS, colorBuilder.create(),
+ Allocation.USAGE_GRAPHICS_TEXTURE |
+ Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+
+ /* Set the allocation in the Renderscript runtime */
+ mScript.set_gColorBuffer(mColorBuffer);
+
+ mRS.bindRootScript(mScript);
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> This sample doesn't use a depth buffer, but the following code
+shows you how to declare an example depth buffer if you need to use
+one for your application. The depth buffer must have the same dimensions as the color buffer:
+
+<pre>
+Allocation mDepthBuffer;
+
+...
+
+Type.Builder b = new Type.Builder(mRS, Element.createPixel(mRS, DataType.UNSIGNED_16,
+ DataKind.PIXEL_DEPTH));
+b.setX(256).setY(256);
+mDepthBuffer = Allocation.createTyped(mRS, b.create(),
+Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+
+</pre>
+</p>
+</li>
+
+ <li>Run and use the sample. The smaller, white quad on the top-left corner is using the
+ framebuffer object as a texture, which renders the same scene as the main rendering.</li>
+</ol>
diff --git a/docs/html/guide/topics/renderscript/index.jd b/docs/html/guide/topics/renderscript/index.jd
index 63f341a..a0e8876 100644
--- a/docs/html/guide/topics/renderscript/index.jd
+++ b/docs/html/guide/topics/renderscript/index.jd
@@ -1,4 +1,4 @@
-page.title=RenderScript
+page.title=Renderscript
@jd:body
<div id="qv-wrapper">
@@ -6,14 +6,14 @@
<h2>In this document</h2>
<ol>
- <li><a href="#overview">RenderScript System Overview</a></li>
- <li>
+ <li><a href="#overview">Renderscript Overview</a></li>
+ <li><a href="#native">Renderscript Runtime Layer</a></li>
+ <li><a href="#reflected">Reflected Layer</a>
<ol>
- <li><a href="#native">Native RenderScript layer</a></li>
-
- <li><a href="#reflected">Reflected layer</a></li>
-
- <li><a href="#framework">Android framework layer</a></li>
+ <li><a href="#func">Functions</a></li>
+ <li><a href="#var">Variables</a></li>
+ <li><a href="#pointer">Pointers</a></li>
+ <li><a href="#struct">Structs</a></li>
</ol>
</li>
@@ -21,540 +21,329 @@
<a href="#mem-allocation">Memory Allocation APIs</a>
</li>
<li>
- <a href="#dynamic">Dynamic Memory Allocations</a>
+ <a href="#memory">Working with Memory</a>
<ol>
- <li><a href="#pointers">Declaring pointers</a></li>
+ <li><a href="#allocating-mem">Allocating and binding memory to the Renderscript</a></li>
- <li><a href="#struct-pointer-reflection">How pointers are reflected</a></li>
-
- <li><a href="#binding">Allocating and binding memory to the RenderScript</a></li>
-
- <li><a href="#read-write-dynamic">Reading and writing to memory</a></li>
+ <li><a href="#read-write">Reading and writing to memory</a></li>
</ol>
</li>
- <li>
- <a href="#static">Static Memory Allocations</a>
- </li>
</ol>
</div>
</div>
- <p>RenderScript offers a high performance 3D graphics rendering and compute API at the native
- level, which you write in the C (C99 standard). The main advantages of RenderScript are:</p>
+ <p>Renderscript offers a high performance 3D graphics rendering and compute API at the native
+ level that you write in C (C99 standard). The main advantages of Renderscript are:</p>
<ul>
- <li>Portability: RenderScript is designed to run on many types of devices with different CPU
- and GPU architectures. It supports all of these architectures without having to target each
- device, because the code is compiled and cached on the device at runtime.</li>
+ <li>Portability: Renderscript is designed to run on many types of devices with different
+ processor (CPU, GPU, and DSP for instance) architectures. It supports all of these architectures without
+ having to target each device, because the code is compiled and cached on the device
+ at runtime.</li>
- <li>Performance: RenderScript provides similar performance to OpenGL with the NDK while
- offering the portability of the OpenGL APIs provided by the Android framework ({@link
- android.opengl}). In addition, it also offers a high performance compute API that is not
- offered by OpenGL.</li>
+ <li>Performance: Renderscript provides similar performance to OpenGL with the NDK and also
+ provides a high performance compute API that is not offered by OpenGL.</li>
- <li>Usability: RenderScript simplifies development when possible, such as eliminating JNI glue code
+ <li>Usability: Renderscript simplifies development when possible, such as eliminating JNI glue code
and simplifying mesh setup.</li>
</ul>
<p>The main disadvantages are:</p>
<ul>
- <li>Development complexity: RenderScript introduces a new set of APIs that you have to learn.
- RenderScript also handles memory differently compared to OpenGL with the Android framework APIs
- or NDK.</li>
+ <li>Development complexity: Renderscript introduces a new set of APIs that you have to learn.
+ Renderscript also allocates memory differently compared to OpenGL with the Android framework APIs.
+ However, these issues are not hard to understand and Renderscript offers many features that
+ make it easier than OpenGL to initialize rendering.</li>
- <li>Debugging visibility: RenderScript can potentially execute (planned feature for later releases)
- on processors other than the main CPU (such as the GPU), so if this occurs, debugging becomes more difficult.
+ <li>Debugging visibility: Renderscript can potentially execute (planned feature for later releases)
+ on processors other than the main CPU (such as the GPU), so if this occurs, debugging becomes more difficult.
</li>
-
- <li>Less features: RenderScript does not provide as many features as OpenGL such as all the compressed
- texture formats or GL extensions.</li>
</ul>
- <p>You need to consider all of the aspects of RenderScript before deciding when to use it. The following list describes
- general guidelines on when to use OpenGL (framework APIs or NDK) or RenderScript:</p>
- <ul>
- <li>If you are doing simple graphics rendering and performance is not critical, you probably want to use the
- Android framework OpenGL APIs, which still provide adequate performance, to eliminate the added coding and debugging complexity of
- RenderScript.</li>
- <li>If you want the most flexibility and features while maintaining relatively good debugging
- support, you probably want to use OpenGL and the NDK. Applications that require this are high end
- or complicated games, for example.</li>
-
- <li>If you want a solution that is portable, has good performance,
- and you don't need the full feature set of OpenGL, RenderScript is a good solution. If you also
- need a high performance compute language, then RenderScript offers that as well.
- Good candidates for RenderScript are graphics intensive UIs that require 3D rendering, live wallpapers,
- or applications that require intensive mathematical computation.</li>
- </ul>
-
- <p>For an example of RenderScript in action, install the RenderScript sample applications that
+ <p>For an example of Renderscript in action, install the Renderscript sample applications that
are shipped with the SDK in <code><sdk_root>/samples/android-11/RenderScript</code>.
- You can also see a typical use of RenderScript with the 3D carousel view in the Android 3.x
+ You can also see a typical use of Renderscript with the 3D carousel view in the Android 3.x
versions of Google Books and YouTube.</p>
- <h2 id="overview">RenderScript System Overview</h2>
+ <h2 id="overview">Renderscript Overview</h2>
+ <p>The Renderscript runtime operates at the native level and still needs to communicate
+with the Android VM, so the way a Renderscript application is setup is different from a pure VM
+application. An application that uses Renderscript is still a traditional Android application that
+runs in the VM, but you write Renderscript code for the parts of your program that require
+it. Using Renderscript can be as simple as offloading a few math calculations or as complicated as
+rendering an entire 3D game. No matter what you use it for, Renderscript remains platform
+independent, so you do not have to target multiple architectures (for example,
+ARM v5, ARM v7, x86).</p>
- <p>The RenderScript system adopts a control and slave architecture where the low-level native
+ <p>The Renderscript system adopts a control and slave architecture where the low-level Renderscript runtime
code is controlled by the higher level Android system that runs in a virtual machine (VM). The
- Android VM still retains all control of memory and lifecycle management and calls the native
- RenderScript code when necessary. The native code is compiled to intermediate bytecode (LLVM) and
- packaged inside your application's <code>.apk</code> file. On the device, the bytecode is
- compiled (just-in-time) to machine code that is further optimized for the device that it is
- running on. The compiled code on the device is cached, so subsequent uses of the RenderScript
- enabled application do not recompile the intermediate code. RenderScript has three layers of code
- to enable communication between the native and Android framework code:</p>
+ Android VM still retains all control of memory management and binds memory that it allocates to
+ the Renderscript runtime, so the Renderscript code can access it. The Android framework makes
+asynchronous calls to Renderscript, and the calls are placed in a message queue and processed
+as soon as possible. Figure 1 shows how the Renderscript system is structured.</p>
+
+ <img id="figure1" src="{@docRoot}images/rs_overview.png" />
+ <p class="img-caption"><strong>Figure 1.</strong> Renderscript system overview</p>
+
+ <p>When using Renderscript, there are three layers of APIs that enable communication between the
+ Renderscript runtime and Android framework code:</p>
<ul>
- <li>The native RenderScript layer does the intensive computation or graphics rendering. You
- define your native code in <code>.rs</code> and <code>.rsh</code> files.</li>
+ <li>The Renderscript runtime APIs allow you to do the computation or graphics rendering
+ that is required by your application.</li>
- <li>The reflected layer is a set of classes that are reflected from the native code. It is basically
- a wrapper around the native code that allows the Android framework to interact with native RenderScripts.
- The Android build tools automatically generate the classes for this layer during
- the build process and eliminates the need to write JNI glue code, like with the NDK.</li>
+ <li>The reflected layer APIs are a set of classes that are reflected from your Renderscript
+runtime code. It is basically a wrapper around the Renderscript code that allows the Android
+framework to interact with the Renderscript runtime. The Android build tools automatically generate the
+classes for this layer during the build process. These classes eliminate the need to write JNI glue
+code, like with the NDK.</li>
- <li>The Android framework layer is comprised of the Android framework
- APIs, which include the {@link android.renderscript} package. This layer gives high level commands
- like, "rotate the view" or "filter the bitmap", by calling the reflected layer, which in turn calls
- the native layer. </li>
+ <li>The Android framework APIs, which include the {@link android.renderscript} package, allow you to
+ build your application using traditional Android components such as activities and views. When
+ using Renderscript, this layer calls the reflected layer to access the Renderscript
+ runtime.</li>
</ul>
- <h3 id="native">Native RenderScript layer</h3>
+ <p></p>
- <p>The native RenderScript layer consists of your RenderScript code, which is compiled and
- executed in a compact and well defined runtime. Your RenderScript code has access to a limited
- amount of functions because it cannot access the NDK or standard C functions, since they must be guaranteed to
- run on a standard CPU. The RenderScript runtime was designed to run on different types of processors,
- which may not be the CPU, so it cannot guarantee support for standard C libraries. What
- RenderScript does offer is an API that supports intensive computation and graphics rendering with a collection of math
- and graphics APIs.</p>
+ <h2 id="native">Renderscript Runtime Layer</h2>
- <p>Some key features of the native RenderScript libraries include:</p>
+ <p>Your Renderscript code is compiled and
+ executed in a compact and well-defined runtime layer. The Renderscript runtime APIs offer support for
+intensive computation and graphics rendering that is portable and automatically scalable to the
+amount of cores available on a processor.
+</p>
+<p class="note"><strong>Note:</strong> The standard C functions in the NDK must be
+ guaranteed to run on a CPU, so Renderscript cannot access these libraries,
+ because Renderscript is designed to run on different types of processors.</p>
+
+<p>You define your Renderscript code in <code>.rs</code>
+ and <code>.rsh</code> files in the <code>src/</code> directory of your Android project. The code
+ is compiled to intermediate bytecode by the
+ <code>llvm</code> compiler that runs as part of an Android build. When your application
+ runs on a device, the bytecode is then compiled (just-in-time) to machine code by another
+ <code>llvm</code> compiler that resides on the device. The machine code is optimized for the
+ device and also cached, so subsequent uses of the Renderscript enabled application does not
+ recompile the bytecode.</p>
+
+ <p>Some key features of the Renderscript runtime libraries include:</p>
<ul>
- <li>A large collection of math functions with both scalar and vector typed overloaded versions
- of many common routines. Operations such as adding, multiplying, dot product, and cross product
- are available.</li>
-
- <li>Conversion routines for primitive data types and vectors, matrix routines, date and time
- routines, and graphics routines.</li>
-
- <li>Logging functions</li>
<li>Graphics rendering functions</li>
<li>Memory allocation request features</li>
- <li>Data types and structures to support the RenderScript system such as Vector types for
+ <li>A large collection of math functions with both scalar and vector typed overloaded versions
+ of many common routines. Operations such as adding, multiplying, dot product, and cross product
+ are available as well as atomic arithmetic and comparison functions.</li>
+
+ <li>Conversion routines for primitive data types and vectors, matrix routines, date and time
+ routines, and graphics routines.</li>
+
+ <li>Data types and structures to support the Renderscript system such as Vector types for
defining two-, three-, or four-vectors.</li>
+
+ <li>Logging functions</li>
</ul>
- <p>The RenderScript header files and LLVM front-end libraries are located in the <code>include/</code> and
- <code>clang-include/</code> directories in the
- <code><sdk_root>/platforms/android-11/renderscript/</code> directory of the Android SDK. The
- headers are automatically included for you, except for the RenderScript graphics specific header file, which
+ <p>See the Renderscript runtime API reference for more information on the available functions. The
+ Renderscript header files are automatically included for you, except for the Renderscript graphics header file, which
you can include as follows:</p>
- <pre>
-#include "rs_graphics.rsh"
-</pre>
- <h3 id="reflected">Reflected layer</h3>
+<pre>#include "rs_graphics.rsh"</pre>
+
+ <h2 id="reflected">Reflected Layer</h2>
<p>The reflected layer is a set of classes that the Android build tools generate to allow access
- to the native RenderScript code from the Android VM. This layer defines entry points for
- RenderScript functions and variables, so that you can interact with them with the Android
- framework. This layer also provides methods and constructors that allow you to allocate memory
- for pointers that are defined in your RenderScript code. The following list describes the major
+ to the Renderscript runtime from the Android framework. This layer also provides methods
+and constructors that allow you to allocate and work with memory for pointers that are defined in
+your Renderscript code. The following list describes the major
components that are reflected:</p>
<ul>
<li>Every <code>.rs</code> file that you create is generated into a class named
- <code>ScriptC_<em>renderscript_filename</em></code> of type {@link
- android.renderscript.ScriptC}. This is the <code>.java</code> version of your <code>.rs</code>
- file, which you can call from the Android framework. This class contains the following
- reflections:
+ <code>project_root/gen/package/name/ScriptC_<em>renderscript_filename</em></code> of
+type {@link android.renderscript.ScriptC}. This file is the <code>.java</code> version of your
+<code>.rs</code> file, which you can call from the Android framework. This class contains the
+following items reflected from the <code>.rs</code> file:
<ul>
- <li>Non-static functions in your <code>.rs</code> file.</li>
+ <li>Non-static functions</li>
- <li>Non-static, global RenderScript variables. Accessor methods are generated for each
- variable, so you can read and write the natively declared variables from the Android
- framework. The <code>get</code> method comes with a one-way communication restriction. The
- last value that is set from the Android framework is always returned during a call to a
- <code>get</code> method. If the native RenderScript code changes the value, the change does
- not propagate back to the Android framework layer.
- If the global variables are initialized
- in the native RenderScript code, those values are used to initialize the corresponding
- values in the Android framework layer. If global variables are marked as
- <code>const</code>, then a <code>set</code> method is not generated.</li>
- <li>Global pointers generate a special method named <code>bind_<em>pointer_name</em></code>
- instead of a <code>set()</code> method. This method allows you to bind the memory that is
- allocated in the Android VM for the pointer to the native RenderScript (you cannot allocate
- memory in your <code>.rs</code> file). You can read and write to this memory from both the
- Android framework and RenderScript code. For more information, see <a href="mem-mgmt">Working
- with Memory and Data</a></li>
+ <li>Non-static, global Renderscript variables. Accessor methods are generated for each
+ variable, so you can read and write the Renderscript variables from the Android
+ framework. If a global variable is initialized at the Renderscript runtime layer, those
+values are used to initialize the corresponding values in the Android framework layer. If global
+variables are marked as <code>const</code>, then a <code>set</code> method is not
+generated.</p></li>
+
+ <li>Global pointers</li>
</ul>
</li>
<li>A <code>struct</code> is reflected into its own class named
- <code>ScriptField_<em>struct_name</em></code>, which extends {@link
+
+ <code>project_root/gen/package/name/ScriptField_struct_name</em></code>, which extends {@link
android.renderscript.Script.FieldBase}. This class represents an array of the
<code>struct</code>, which allows you to allocate memory for one or more instances of this
<code>struct</code>.</li>
</ul>
- <h3 id="framework">Android framework layer</h3>
- <p>The Android framework layer consists of the usual Android framework APIs, which include the
- RenderScript APIs in {@link android.renderscript}. This layer handles things such as the
- Activity lifecycle and memory management of your application. It issues high level commands to
- the native RenderScript code through the reflected layer and receives events from the user such
- as touch and input events and relays them to your RenderScript code, if needed.
- </p>
+<h3 id="func">Functions</h3>
+<p>Functions are reflected into the script class itself, located in
+<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. For
+example, if you declare the following function in your Renderscript code:</p>
- <h2 id="mem-allocation">Memory Allocation APIs</h2>
+<pre>
+void touch(float x, float y, float pressure, int id) {
+ if (id >= 10) {
+ return;
+ }
- <p>Before you begin writing your first RenderScript application, you must understand how
- memory is allocated for your RenderScript code and how data is shared between the native and VM
- spaces. RenderScript allows you to access allocated memory in both the native layer
- and Android system layer. All dynamic and static memory is allocated by the Android VM.
- The Android VM also does reference counting and garbage collection for you.
- You can also explicitly free memory that you no longer need.</p>
-
- <p class="note"><strong>Note:</strong> To declare temporary memory in your native RenderScript
- code without allocating it in the Android VM, you can still do things like instantiate a scratch
- buffer using an array.</p>
-
- <p>The following classes support the memory management features of RenderScript in the Android
- VM. You normally do not need to work with these classes directly, because the reflected layer
- classes provide constructors and methods that set up the memory allocation for you. There are
- some situations where you would want to use these classes directly to allocate memory on your
- own, such as loading a bitmap from a resource or when you want to allocate memory for pointers to
- primitive types.</p>
-
- <table id="mem-mgmt-table">
- <tr>
- <th>Android Object Type</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.renderscript.Element}</td>
-
- <td>
- <p>An element represents one cell of a memory allocation and can have two forms: Basic or
- Complex.</p>
-
- <p>A basic element contains a single component of data of any valid RenderScript data type.
- Examples of basic element data types include a single float value, a float4 vector, or a
- single RGB-565 color.</p>
-
- <p>Complex elements contain a list of basic elements and are created from
- <code>struct</code>s that you declare in your RenderScript code. The most basic primitive
- type determines the data alignment of the memory. For example, a float4 vector subelement
- is alligned to <code>sizeof(float)</code> and not <code>sizeof(float4)</code>. The ordering
- of the elements in memory are the order in which they were added, with each component
- aligned as necessary.</p>
- </td>
- </tr>
-
- <tr>
- <td>{@link android.renderscript.Type}</td>
-
- <td>
- A type is a memory allocation template and consists of an element and one or more
- dimensions. It describes the layout of the memory (basically an array of {@link
- android.renderscript.Element}s) but does not allocate the memory for the data that it
- describes.
-
- <p>A type consists of five dimensions: X, Y, Z, LOD (level of detail), and Faces (of a cube
- map). You can assign the X,Y,Z dimensions to any positive integer value within the
- constraints of available memory. A single dimension allocation has an X dimension of
- greater than zero while the Y and Z dimensions are zero to indicate not present. For
- example, an allocation of x=10, y=1 is considered two dimensional and x=10, y=0 is
- considered one dimensional. The LOD and Faces dimensions are booleans to indicate present
- or not present.</p>
- </td>
- </tr>
-
- <tr>
- <td>{@link android.renderscript.Allocation}</td>
-
- <td>
- <p>An allocation provides the memory for applications based on a description of the memory
- that is represented by a {@link android.renderscript.Type}. Allocated memory can exist in
- many memory spaces concurrently. If memory is modified in one space, you must explicitly
- synchronize the memory, so that it is updated in all the other spaces that it exists
- in.</p>
-
- <p>Allocation data is uploaded in one of two primary ways: type checked and type unchecked.
- For simple arrays there are <code>copyFrom()</code> functions that take an array from the
- Android system and copy it to the native layer memory store. The unchecked variants allow
- the Android system to copy over arrays of structures because it does not support
- structures. For example, if there is an allocation that is an array of n floats, the data
- contained in a float[n] array or a byte[n*4] array can be copied.</p>
- </td>
- </tr>
- </table>
-
- <h2 id="dynamic">Working with dynamic memory allocations</h2>
-
- <p>RenderScript has support for pointers, but you must allocate the memory in your Android framework
- code. When you declare a global pointer in your <code>.rs</code> file, you allocate memory
- through the appropriate reflected layer class and bind that memory to the native
- RenderScript layer. You can read and write to this memory from the Android framework layer as well as the
- RenderScript layer, which offers you the flexibility to modify variables in the most appropriate
- layer. The following sections show you how to work with pointers, allocate memory for them, and
- read and write to the memory.</p>
-
- <h3 id="pointers">Declaring pointers</h3>
-
- <p>Because RenderScript is written in C99, declaring a pointer is done in a familiar way. You can
- declare pointers to a <code>struct</code> or a primitive type, but a <code>struct</code> cannot
- contain pointers or nested arrays. The following code declares a <code>struct</code>, a pointer
- to that <code>struct</code>, and a pointer of primitive type <code>int32_t</code> in an <code>.rs</code> file:</p>
- <pre>
-#pragma version(1)
-#pragma rs java_package_name(com.example.renderscript)
-
-...
-
-typedef struct Point {
- float2 point;
- } Point_t;
-
- Point_t *touchPoints;
- int32_t *intPointer;
-
-...
+ touchPos[id].x = x;
+ touchPos[id].y = y;
+ touchPressure[id] = pressure;
+}
</pre>
-<p>You cannot allocate memory for these pointers in your RenderScript code, but the Android
-build tools generate classes for you that allow you to allocate memory in the Android VM for use by
-your RenderScript code. These classes also let you read and write to the memory. The next section
-describes how these classes are generated through reflection.</p>
+<p>then the following code is generated:</p>
- <h3>How pointers are reflected</h3>
+<pre>
+public void invoke_touch(float x, float y, float pressure, int id) {
+ FieldPacker touch_fp = new FieldPacker(16);
+ touch_fp.addF32(x);
+ touch_fp.addF32(y);
+ touch_fp.addF32(pressure);
+ touch_fp.addI32(id);
+ invoke(mExportFuncIdx_touch, touch_fp);
+}
+</pre>
+<p>
+Functions cannot have a return value, because the Renderscript system is designed to be
+asynchronous. When your Android framework code calls into Renderscript, the call is queued and is
+executed when possible. This restriction allows the Renderscript system to function without constant
+interruption and increases efficiency. If functions were allowed to have return values, the call
+would block until the value was returned.</p>
- <p>Global variables have a getter and setter method generated. A global pointer generates a
- <code>bind_pointerName()</code> method instead of a set() method. This method allows you to bind
- the memory that is allocated in the Android VM to the native RenderScript. For example, the two
- pointers in the previous section generate the following accessor methods in the <code>ScriptC_<em>rs_filename</em></code> file:</p>
+<p>
+If you want the Renderscript code to send a value back to the Android framework, use the
+<code>rsSendToClient()</code> function.
+</p>
+
+<h3 id="var">Variables</h3>
+
+ <p>Variables of supported types are reflected into the script class itself, located in
+<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. A set of accessor
+methods are generated for each variable. For example, if you declare the following variable in
+your Renderscript code:</p>
+ <pre>uint32_t unsignedInteger = 1;</pre>
+
+ <p>then the following code is generated:</p>
+
+<pre>
+private long mExportVar_unsignedInteger;
+public void set_unsignedInteger(long v){
+ mExportVar_unsignedInteger = v;
+ setVar(mExportVarIdx_unsignedInteger, v);
+}
+
+public long get_unsignedInteger(){
+ return mExportVar_unsignedInteger;
+}
+ </pre>
+
+ <h3 id="pointer">Pointers</h3>
+ <p>Pointers are reflected into the script class itself, located in
+<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. You
+can declare pointers to a <code>struct</code> or any of the supported Renderscript types, but a
+<code>struct</code> cannot contain pointers or nested arrays. For example, if you declare the
+following pointers to a <code>struct</code> and <code>int32_t</code></p>
+
+<pre>
+typedef struct Point {
+ float2 point;
+} Point_t;
+
+Point_t *touchPoints;
+int32_t *intPointer;
+</pre>
+ <p>then the following code is generated in:</p>
+
<pre>
-
- private ScriptField_Point mExportVar_touchPoints;
- public void bind_touchPoints(ScriptField_Point v) {
- mExportVar_touchPoints = v;
- if (v == null) bindAllocation(null, mExportVarIdx_touchPoints);
- else bindAllocation(v.getAllocation(), mExportVarIdx_touchPoints);
+private ScriptField_Point mExportVar_touchPoints;
+public void bind_touchPoints(ScriptField_Point v) {
+ mExportVar_touchPoints = v;
+ if (v == null) bindAllocation(null, mExportVarIdx_touchPoints);
+ else bindAllocation(v.getAllocation(), mExportVarIdx_touchPoints);
}
public ScriptField_Point get_touchPoints() {
- return mExportVar_touchPoints;
+ return mExportVar_touchPoints;
}
private Allocation mExportVar_intPointer;
public void bind_intPointer(Allocation v) {
- mExportVar_intPointer = v;
- if (v == null) bindAllocation(null, mExportVarIdx_intPointer);
- else bindAllocation(v, mExportVarIdx_intPointer);
+ mExportVar_intPointer = v;
+ if (v == null) bindAllocation(null, mExportVarIdx_intPointer);
+ else bindAllocation(v, mExportVarIdx_intPointer);
}
public Allocation get_intPointer() {
return mExportVar_intPointer;
}
+ </pre>
-</pre>
+<p>A <code>get</code> method and a special method named <code>bind_<em>pointer_name</em></code>
+(instead of a <code>set()</code> method) is generated. This method allows you to bind the memory
+that is allocated in the Android VM to the Renderscript runtime (you cannot allocate
+memory in your <code>.rs</code> file). For more information, see <a href="#memory">Working
+with Allocated Memory</a>.
+</p>
- <h3>Allocating and binding memory to the RenderScript</h3>
-
- <p>When the build tools generate the reflected layer, you can use the appropriate class
- (<code>ScriptField_Point</code>, in our example) to allocate memory for a pointer. To do this,
- you call the constructor for the {@link android.renderscript.Script.FieldBase} class and specify
- the amount of structures that you want to allocate memory for. To allocate memory for a primitive
- type pointer, you must build an allocation manually, using the memory management classes
- described in <a href="#mem-mgmt-table">Table 1</a>. The example below allocates memory for both
- the <code>intPointer</code> and <code>touchPoints</code> pointer and binds it to the
- RenderScript:</p>
- <pre>
-private RenderScriptGL glRenderer;
-private ScriptC_example script;
-private Resources resources;
-
-public void init(RenderScriptGL rs, Resources res) {
- //get the rendering context and resources from the calling method
- glRenderer = rs;
- resources = res;
-
- //allocate memory for the struct pointer, calling the constructor
- ScriptField_Point touchPoints = new ScriptField_Point(glRenderer, 2);
-
- //Create an element manually and allocate memory for the int pointer
- intPointer = Allocation.createSized(glRenderer, Element.I32(glRenderer), 2);
-
- //create an instance of the RenderScript, pointing it to the bytecode resource
- mScript = new ScriptC_example(glRenderer, resources, R.raw.example);
-
- // bind the struct and int pointers to the RenderScript
- mScript.bind_touchPoints(touchPoints);
- script.bind_intPointer(intPointer);
-
- //bind the RenderScript to the rendering context
- glRenderer.bindRootScript(script);
-}
-</pre>
-
- <h3>Reading and writing to memory</h3>
-
- <p>Although you have to allocate memory within the Android VM, you can work with the memory both
- in your native RenderScript code and in your Android code. Once memory is bound, the native
- RenderScript can read and write to the memory directly. You can also just use the accessor
- methods in the reflected classes to access the memory. If you modify memory in the Android
- framework, it gets automatically synchronized to the native layer. If you modify memory in the <code>.rs</code>
- file, these changes do not get propagated back to the Android framework.
- For example, you can modify the struct in your Android code like this:</p>
- <pre>
-int index = 0;
-boolean copyNow = true;
-Float2 point = new Float2(0.0f, 0.0f);
-touchPoints.set_point(index, point, copyNow);
-</pre>then read it in your native RenderScript code like this:
- <pre>
-rsDebug("Printing out a Point", touchPoints[0].point.x, touchPoints[0].point.y);
-</pre>
-
- <h2>Working with statically allocated memory</h2>
-
- <p>Non-static, global primitives and structs that you declare in your RenderScript are easier to work with,
- because the memory is statically allocated at compile time. Accessor methods to set and get these
- variables are generated when the Android build tools generate the reflected layer classes. You
- can get and set these variables using the provided accessor methods.
- <p class="note"><strong>Note:</strong> The <code>get</code> method comes with a one-way communication restriction. The last value
- that is set from the Android framework is always returned during a call to a <code>get</code>
- method. If the native RenderScript code changes the value, the change does not propagate back to
- the Android framework layer. If the global variables are initialized in the native RenderScript
- code, those values are used to initialize the corresponding values in the Android framework
- layer. If global variables are marked as <code>const</code>, then a <code>set</code> method is
- not generated.</p>
- </p>
-
- <p>For example, if you declare the following primitive in your RenderScript code:</p>
- <pre>
- uint32_t unsignedInteger = 1;
-
-</pre>
-<p>then the following code is generated in <code>ScriptC_<em>script_name</em>.java</code>:</p>
- <pre>
- private final static int mExportVarIdx_unsignedInteger = 9;
- private long mExportVar_unsignedInteger;
- public void set_unsignedInteger(long v) {
- mExportVar_unsignedInteger = v;
- setVar(mExportVarIdx_unsignedInteger, v);
- }
-
- public long get_unsignedInteger() {
- return mExportVar_unsignedInteger;
- }
-</pre>
-
- <p class="note"><strong>Note:</strong> The mExportVarIdx_unsignedInteger variable represents the
- index of the <code>unsignedInteger</code>'s in an array of statically allocated primitives. You do
- not need to work with or be aware of this index.</p>
-
- <p>For a <code>struct</code>, the Android build tools generate a class named
- <code><project_root>/gen/com/example/renderscript/ScriptField_struct_name</code>. This
- class represents an array of the <code>struct</code> and allows you to allocate memory for a
- specified number of <code>struct</code>s. This class defines:</p>
-
- <ul>
- <li>Overloaded constructors that allow you to allocate memory. The
- <code>ScriptField_<em>struct_name</em>(RenderScript rs, int count)</code> constructor allows
- you to define the number of structures that you want to allocate memory for with the
- <code>count</code> parameter. The <code>ScriptField_<em>struct_name</em>(RenderScript rs, int
- count, int usages)</code> constructor defines an extra parameter, <code>usages</code>, that
- lets you specify the memory space of this memory allocation. There are four memory space
- possibilities:
-
- <ul>
- <li>{@link android.renderscript.Allocation#USAGE_SCRIPT}: Allocates in the script memory
- space. This is the default memory space if you do not specify a memory space.</li>
-
- <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE}: Allocates in the
- texture memory space of the GPU.</li>
-
- <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_VERTEX}: Allocates in the vertex
- memory space of the GPU.</li>
-
- <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_CONSTANTS}: Allocates in the
- constants memory space of the GPU that is used by the various program objects.</li>
- </ul>
-
- <p>You can specify one or all of these memory spaces by OR'ing them together. Doing so notifies
- the RenderScript runtime that you intend on accessing the data in the specified memory spaces. The following
- example allocates memory for a custom data type in both the script and vertex memory spaces:</p>
+ <h3 id="struct">Structs</h3>
+ <p>Structs are reflected into their own classes, located in
+ <code><project_root>/gen/com/example/renderscript/ScriptField_struct_name</code>. This
+ class represents an array of the <code>struct</code> and allows you to allocate memory for a
+ specified number of <code>struct</code>s. For example, if you declare the following struct:</p>
<pre>
-ScriptField_Point touchPoints = new ScriptField_Point(glRenderer, 2,
-Allocation.USAGE_SCRIPT | Allocation.USAGE_GRAPHICS_VERTEX);
+typedef struct Point {
+float2 point;
+} Point_t;
</pre>
- <p>If you modify the memory in one memory space and want to push the updates to the rest of
- the memory spaces, call <code>rsgAllocationSyncAll()</code> in your RenderScript code to
- synchronize the memory.</p>
- </li>
-
- <li>A static nested class, <code>Item</code>, allows you to create an instance of the
- <code>struct</code>, in the form of an object. This is useful if it makes more sense to work
- with the <code>struct</code> in your Android code. When you are done manipulating the object,
- you can push the object to the allocated memory by calling <code>set(Item i, int index, boolean
- copyNow)</code> and setting the <code>Item</code> to the desired position in the array. The
- native RenderScript code automatically has access to the newly written memory.
-
- <li>Accessor methods to get and set the values of each field in a struct. Each of these
- accessor methods have an <code>index</code> parameter to specify the <code>struct</code> in the
- array that you want to read or write to. Each setter method also has a <code>copyNow</code>
- parameter that specifies whether or not to immediately sync this memory to the native
- RenderScript layer. To sync any memory that has not been synced, call <code>copyAll()</code>.</li>
-
- <li>The createElement() method creates an object that describes the memory layout of the struct.</li>
-
- <li>resize() works much like a <code>realloc</code>, allowing you to expand previously
- allocated memory, maintaining the current values that were previously set.</li>
-
- <li>copyAll() synchronizes memory that was set on the framework level to the native level. When you call
- a set accessor method on a member, there is an optional <code>copyNow</code> boolean parameter that you can specify. Specifying
- <code>true</code> synchronizes the memory when you call the method. If you specify false, you can call <code>copyAll()</code>
- once, and it synchronizes memory for the all the properties that are not synchronized.</li>
- </ul>
-
- <p>The following example shows the reflected class, <code>ScriptField_Point.java</code> that is
- generated from the Point <code>struct</code>.</p>
- <pre>
-package com.example.renderscript;
+<p>then the following code is generated in <code>ScriptField_Point.java</code>:
+<pre>
+package com.example.android.rs.hellocompute;
import android.renderscript.*;
import android.content.res.Resources;
-
+ /**
+ * @hide
+ */
public class ScriptField_Point extends android.renderscript.Script.FieldBase {
- static public class Item {
- public static final int sizeof = 8;
- Float2 point;
+ static public class Item {
+ public static final int sizeof = 12;
+
+ Float2 position;
+ float size;
Item() {
- point = new Float2();
+ position = new Float2();
}
-
}
private Item mItemArray[];
private FieldPacker mIOBuffer;
public static Element createElement(RenderScript rs) {
Element.Builder eb = new Element.Builder(rs);
- eb.add(Element.F32_2(rs), "point");
+ eb.add(Element.F32_2(rs), "position");
+ eb.add(Element.F32(rs), "size");
return eb.create();
}
@@ -573,9 +362,11 @@
}
private void copyToArray(Item i, int index) {
- if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+ if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count
+ */);
mIOBuffer.reset(index * Item.sizeof);
- mIOBuffer.addF32(i.point);
+ mIOBuffer.addF32(i.position);
+ mIOBuffer.addF32(i.size);
}
public void set(Item i, int index, boolean copyNow) {
@@ -585,7 +376,6 @@
copyToArray(i, index);
mAllocation.setFromFieldPacker(index, mIOBuffer);
}
-
}
public Item get(int index) {
@@ -593,24 +383,42 @@
return mItemArray[index];
}
- public void set_point(int index, Float2 v, boolean copyNow) {
- if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */)fnati;
+ public void set_position(int index, Float2 v, boolean copyNow) {
+ if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
if (mItemArray[index] == null) mItemArray[index] = new Item();
- mItemArray[index].point = v;
- if (copyNow) {
+ mItemArray[index].position = v;
+ if (copyNow) {
mIOBuffer.reset(index * Item.sizeof);
mIOBuffer.addF32(v);
FieldPacker fp = new FieldPacker(8);
fp.addF32(v);
mAllocation.setFromFieldPacker(index, 0, fp);
}
-
}
- public Float2 get_point(int index) {
+ public void set_size(int index, float v, boolean copyNow) {
+ if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+ if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+ if (mItemArray[index] == null) mItemArray[index] = new Item();
+ mItemArray[index].size = v;
+ if (copyNow) {
+ mIOBuffer.reset(index * Item.sizeof + 8);
+ mIOBuffer.addF32(v);
+ FieldPacker fp = new FieldPacker(4);
+ fp.addF32(v);
+ mAllocation.setFromFieldPacker(index, 1, fp);
+ }
+ }
+
+ public Float2 get_position(int index) {
if (mItemArray == null) return null;
- return mItemArray[index].point;
+ return mItemArray[index].position;
+ }
+
+ public float get_size(int index) {
+ if (mItemArray == null) return 0;
+ return mItemArray[index].size;
}
public void copyAll() {
@@ -627,13 +435,361 @@
System.arraycopy(mItemArray, 0, ni, 0, copySize);
mItemArray = ni;
}
-
mAllocation.resize(newSize);
if (mIOBuffer != null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
}
-
}
</pre>
-</body>
-</html>
+<p>The generated code is provided to you as a convenience to allocate memory for structs requested
+by the Renderscript runtime and to interact with <code>struct</code>s
+in memory. Each <code>struct</code>'s class defines the following methods and constructors:</p>
+
+ <ul>
+ <li>Overloaded constructors that allow you to allocate memory. The
+ <code>ScriptField_<em>struct_name</em>(RenderScript rs, int count)</code> constructor allows
+ you to define the number of structures that you want to allocate memory for with the
+ <code>count</code> parameter. The <code>ScriptField_<em>struct_name</em>(RenderScript rs, int
+ count, int usages)</code> constructor defines an extra parameter, <code>usages</code>, that
+ lets you specify the memory space of this memory allocation. There are four memory space
+ possibilities:
+
+ <ul>
+ <li>{@link android.renderscript.Allocation#USAGE_SCRIPT}: Allocates in the script memory
+ space. This is the default memory space if you do not specify a memory space.</li>
+
+ <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE}: Allocates in the
+ texture memory space of the GPU.</li>
+
+ <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_VERTEX}: Allocates in the vertex
+ memory space of the GPU.</li>
+
+ <li>{@link android.renderscript.Allocation#USAGE_GRAPHICS_CONSTANTS}: Allocates in the
+ constants memory space of the GPU that is used by the various program objects.</li>
+ </ul>
+
+ <p>You can specify multiple memory spaces by using the bitwise <code>OR</code> operator. Doing so
+ notifies the Renderscript runtime that you intend on accessing the data in the
+ specified memory spaces. The following example allocates memory for a custom data type
+ in both the script and vertex memory spaces:</p>
+ <pre>
+ ScriptField_Point touchPoints = new ScriptField_Point(glRenderer, 2,
+ Allocation.USAGE_SCRIPT | Allocation.USAGE_GRAPHICS_VERTEX);
+ </pre>
+
+ <p>If you modify the memory in one memory space and want to push the updates to the rest of
+ the memory spaces, call <code>rsgAllocationSyncAll()</code> in your Renderscript code to
+ synchronize the memory.</p>
+ </li>
+
+ <li>A static nested class, <code>Item</code>, allows you to create an instance of the
+ <code>struct</code>, in the form of an object. This nested class is useful if it makes more sense to work
+ with the <code>struct</code> in your Android code. When you are done manipulating the object,
+ you can push the object to the allocated memory by calling <code>set(Item i, int index,
+ boolean copyNow)</code> and setting the <code>Item</code> to the desired position in
+the array. The Renderscript runtime automatically has access to the newly written memory.
+
+ <li>Accessor methods to get and set the values of each field in a struct. Each of these
+ accessor methods have an <code>index</code> parameter to specify the <code>struct</code> in
+ the array that you want to read or write to. Each setter method also has a
+<code>copyNow</code> parameter that specifies whether or not to immediately sync this memory
+to the Renderscript runtime. To sync any memory that has not been synced, call
+ <code>copyAll()</code>.</li>
+
+ <li>The <code>createElement()</code> method creates a description of the struct in memory. This
+ description is used to allocate memory consisting of one or many elements.</li>
+
+ <li><code>resize()</code> works much like a <code>realloc()</code> in C, allowing you to
+expand previously allocated memory, maintaining the current values that were previously
+created.</li>
+
+ <li><code>copyAll()</code> synchronizes memory that was set on the framework level to the
+Renderscript runtime. When you call a set accessor method on a member, there is an optional
+<code>copyNow</code> boolean parameter that you can specify. Specifying
+ <code>true</code> synchronizes the memory when you call the method. If you specify false,
+ you can call <code>copyAll()</code> once, and it synchronizes memory for all the
+properties that are not yet synchronized.</li>
+ </ul>
+
+ <h2 id="mem-allocation">Memory Allocation APIs</h2>
+
+ <p>Applications that use Renderscript still run in the Android VM. The actual Renderscript code, however, runs natively and
+ needs access to the memory allocated in the Android VM. To accomplish this, you must
+ attach the memory that is allocated in the VM to the Renderscript runtime. This
+process, called binding, allows the Renderscript runtime to seamlessly work with memory that it
+requests but cannot explicitly allocate. The end result is essentially the same as if you had
+called <code>malloc</code> in C. The added benefit is that the Android VM can carry out garbage collection as well as
+share memory with the Renderscript runtime layer. Binding is only necessary for dynamically allocated memory. Statically
+allocated memory is automatically created for your Renderscript code at compile time. See <a href="#figure1">Figure 1</a>
+for more information on how memory allocation occurs.
+</p>
+
+ <p>To support this memory allocation system, there are a set of APIs that allow the Android VM to
+allocate memory and offer similar functionality to a <code>malloc</code> call. These classes
+essentially describe how memory should be allocated and also carry out the allocation. To better
+understand how these classes work, it is useful to think of them in relation to a simple
+<code>malloc</code> call that can look like this: </p>
+
+ <pre>array = (int *)malloc(sizeof(int)*10);</pre>
+
+ <p>The <code>malloc</code> call can be broken up into two parts: the size of the memory being allocated (<code>sizeof(int)</code>),
+ along with how many units of that memory should be allocated (10). The Android framework provides classes for these two parts as
+ well as a class to represent <code>malloc</code> itself.</p>
+
+ <p>The {@link android.renderscript.Element} class represents the (<code>sizeof(int)</code>) portion
+ of the <code>malloc</code> call and encapsulates one cell of a memory allocation, such as a single
+ float value or a struct. The {@link android.renderscript.Type} class encapsulates the {@link android.renderscript.Element}
+ and the amount of elements to allocate (10 in our example). You can think of a {@link android.renderscript.Type} as
+ an array of {@link android.renderscript.Element}s. The {@link android.renderscript.Allocation} class does the actual
+ memory allocation based on a given {@link android.renderscript.Type} and represents the actual allocated memory.</p>
+
+ <p>In most situations, you do not need to call these memory allocation APIs directly. The reflected layer
+ classes generate code to use these APIs automatically and all you need to do to allocate memory is call a
+ constructor that is declared in one of the reflected layer classes and then bind
+ the resulting memory {@link android.renderscript.Allocation} to the Renderscript.
+ There are some situations where you would want to use these classes directly to allocate memory on your
+ own, such as loading a bitmap from a resource or when you want to allocate memory for pointers to
+ primitive types. You can see how to do this in the
+ <a href="#allocating-mem">Allocating and binding memory to the Renderscript</a> section.
+ The following table describes the three memory management classes in more detail:</p>
+
+ <table id="mem-mgmt-table">
+ <tr>
+ <th>Android Object Type</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.renderscript.Element}</td>
+
+ <td>
+ <p>An element describes one cell of a memory allocation and can have two forms: basic or
+ complex.</p>
+
+ <p>A basic element contains a single component of data of any valid Renderscript data type.
+ Examples of basic element data types include a single <code>float</code> value, a <code>float4</code> vector, or a
+ single RGB-565 color.</p>
+
+ <p>Complex elements contain a list of basic elements and are created from
+ <code>struct</code>s that you declare in your Renderscript code. For instance an allocation
+ can contain multiple <code>struct</code>s arranged in order in memory. Each struct is considered as its
+ own element, rather than each data type within that struct.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td>{@link android.renderscript.Type}</td>
+
+ <td>
+ <p>A type is a memory allocation template and consists of an element and one or more
+ dimensions. It describes the layout of the memory (basically an array of {@link
+ android.renderscript.Element}s) but does not allocate the memory for the data that it
+ describes.</p>
+
+ <p>A type consists of five dimensions: X, Y, Z, LOD (level of detail), and Faces (of a cube
+ map). You can assign the X,Y,Z dimensions to any positive integer value within the
+ constraints of available memory. A single dimension allocation has an X dimension of
+ greater than zero while the Y and Z dimensions are zero to indicate not present. For
+ example, an allocation of x=10, y=1 is considered two dimensional and x=10, y=0 is
+ considered one dimensional. The LOD and Faces dimensions are booleans to indicate present
+ or not present.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td>{@link android.renderscript.Allocation}</td>
+
+ <td>
+ <p>An allocation provides the memory for applications based on a description of the memory
+ that is represented by a {@link android.renderscript.Type}. Allocated memory can exist in
+ many memory spaces concurrently. If memory is modified in one space, you must explicitly
+ synchronize the memory, so that it is updated in all the other spaces in which it exists.
+ </p>
+
+ <p>Allocation data is uploaded in one of two primary ways: type checked and type unchecked.
+ For simple arrays there are <code>copyFrom()</code> functions that take an array from the
+ Android system and copy it to the native layer memory store. The unchecked variants allow
+ the Android system to copy over arrays of structures because it does not support
+ structures. For example, if there is an allocation that is an array of n floats, the data
+ contained in a float[n] array or a <code>byte[n*4]</code> array can be copied.</p>
+ </td>
+ </tr>
+ </table>
+
+ <h2 id="memory">Working with Memory</h2>
+
+<p>Non-static, global variables that you declare in your Renderscript are allocated memory at compile time.
+You can work with these variables directly in your Renderscript code without having to allocate
+memory for them at the Android framework level. The Android framework layer also has access to these variables
+with the provided accessor methods that are generated in the reflected layer classes. If these variables are
+initialized at the Renderscript runtime layer, those values are used to initialize the corresponding
+values in the Android framework layer. If global variables are marked as const, then a <code>set</code> method is
+not generated.</p>
+
+
+<p class="note"><strong>Note:</strong> If you are using certain Renderscript structures that contain pointers, such as
+<code>rs_program_fragment</code> and <code>rs_allocation</code>, you have to obtain an object of the
+corresponding Android framework class first and then call the <code>set</code> method for that
+structure to bind the memory to the Renderscript runtime. You cannot directly manipulate these structures
+at the Renderscript runtime layer. Keep in mind that user-defined structures
+cannot contain pointers, so this restriction only applies to certain structures that are provided by Renderscript.
+</p>
+
+<p>Renderscript also has support for pointers, but you must explicitly allocate the memory in your
+Android framework code. When you declare a global pointer in your <code>.rs</code> file, you
+allocate memory through the appropriate reflected layer class and bind that memory to the native
+Renderscript layer. You can interact with this memory from the Android framework layer as well as
+the Renderscript layer, which offers you the flexibility to modify variables in the most
+appropriate layer.</p>
+
+
+
+ <h3 id="allocating-mem">Allocating and binding dynamic memory to the Renderscript</h3>
+
+ <p>To allocate dynamic memory, you need to call the constructor of a
+ {@link android.renderscript.Script.FieldBase} class, which is the most common way. An alternative is to create an
+ {@link android.renderscript.Allocation} manually, which is required for things such as primitive type pointers. You should
+ use a {@link android.renderscript.Script.FieldBase} class constructor whenever available for simplicity.
+ After obtaining a memory allocation, call the reflected <code>bind</code> method of the pointer to bind the allocated memory to the
+ Renderscript runtime.</p>
+ <p>The example below allocates memory for both a primitive type pointer,
+ <code>intPointer</code>, and a pointer to a struct, <code>touchPoints</code>. It also binds the memory to the
+ Renderscript:</p>
+ <pre>
+private RenderScriptGL glRenderer;
+private ScriptC_example script;
+private Resources resources;
+
+public void init(RenderScriptGL rs, Resources res) {
+ //get the rendering context and resources from the calling method
+ glRenderer = rs;
+ resources = res;
+
+ //allocate memory for the struct pointer, calling the constructor
+ ScriptField_Point touchPoints = new ScriptField_Point(glRenderer, 2);
+
+ //Create an element manually and allocate memory for the int pointer
+ intPointer = Allocation.createSized(glRenderer, Element.I32(glRenderer), 2);
+
+ //create an instance of the Renderscript, pointing it to the bytecode resource
+ mScript = new ScriptC_example(glRenderer, resources, R.raw.example);
+
+ //bind the struct and int pointers to the Renderscript
+ mScript.bind_touchPoints(touchPoints);
+ script.bind_intPointer(intPointer);
+
+ ...
+}
+</pre>
+
+ <h3>Reading and writing to memory</h3>
+ <p>You can read and write to statically and dynamically allocated memory both at the Renderscript runtime
+ and Android framework layer.</p>
+
+<p>Statically allocated memory comes with a one-way communication restriction
+at the Renderscript runtime level. When Renderscript code changes the value of a variable, it is not
+communicated back to the Android framework layer for efficiency purposes. The last value
+that is set from the Android framework is always returned during a call to a <code>get</code>
+method. However, when Android framework code modifies a variable, that change can be communicated to
+the Renderscript runtime automatically or synchronized at a later time. If you need to send data
+from the Renderscript runtime to the Android framework layer, you can use the <code>rsSendToClient()</code> function
+to overcome this limitation.
+</p>
+<p>When working with dynamically allocated memory, any changes at the Renderscript runtime layer are propagated
+back to the Android framework layer if you modified the memory allocation using its associated pointer.
+Modifying an object at the Android framework layer immediately propagates that change back to the Renderscript
+runtime layer.</p>
+
+ <h4>Reading and writing to global variables</h4>
+
+ <p>Reading and writing to global variables is a straightforward process. You can use the accessor methods
+ at the Android framework level or set them directly in the Renderscript code. Keep in mind that any
+ changes that you make in your Renderscript code are not propagated back to the Android framework layer.</p>
+
+ <p>For example, given the following struct declared in a file named <code>rsfile.rs</code>:</p>
+<pre>
+typedef struct Point {
+ int x;
+ int y;
+} Point_t;
+
+Point_t point;
+
+</pre>
+<p>You can assign values to the struct like this directly in <code>rsfile.rs</code>. These values are not
+propagated back to the Android framework level:</p>
+<pre>
+point.x = 1;
+point.y = 1;
+</pre>
+
+<p>You can assign values to the struct at the Android framework layer like this. These values are
+propagated back to the Renderscript runtime level:</p>
+<pre>
+ScriptC_rsfile mScript;
+
+...
+
+Item i = new ScriptField_Point.Item();
+i.x = 1;
+i.y = 1;
+mScript.set_point(i);
+</pre>
+
+<p>You can read the values in your Renderscript code like this:</p>
+
+<pre>
+rsDebug("Printing out a Point", point.x, point.y);
+</pre>
+
+<p>You can read the values in the Android framework layer with the following code. Keep in mind that this
+code only returns a value if one was set at the Android framework level. You will get a null pointer
+exception if you only set the value at the Renderscript runtime level:</p>
+
+<pre>
+Log.i("TAGNAME", "Printing out a Point: " + mScript.get_point().x + " " + mScript.get_point().y);
+System.out.println(point.get_x() + " " + point.get_y());
+</pre>
+
+<h4>Reading and writing global pointers</h4>
+
+<p>Assuming that memory has been allocated in the Android framework level and bound to the Renderscript runtime,
+you can read and write memory from the Android framework level by using the <code>get</code> and <code>set</code> methods for that pointer.
+In the Renderscript runtime layer, you can read and write to memory with pointers as normal and the changes are propagated
+back to the Android framework layer, unlike with statically allocated memory.</p>
+
+<p>For example, given the following pointer to a <code>struct</code> in a file named <code>rsfile.rs</code>:</p>
+<pre>
+typedef struct Point {
+ int x;
+ int y;
+} Point_t;
+
+Point_t *point;
+</pre>
+
+<p>Assuming you already allocated memory at the Android framework layer, you can access values in
+the <code>struct</code> as normal. Any changes you make to the struct via its pointer variable
+are automatically available to the Android framework layer:</p>
+
+<pre>
+point[index].x = 1;
+point[index].y = 1;
+</pre>
+
+<p>You can read and write values to the pointer at the Android framework layer as well:
+<pre>
+ScriptField_Point p = new ScriptField_Point(mRS, 1);
+ Item i = new ScriptField_Point.Item();
+ i.x=100;
+ i.y = 100;
+ p.set(i, 0, true);
+ mScript.bind_point(p);
+
+ points.get_x(0); //read x and y from index 0
+ points.get_x(0);
+</pre>
+
+<p>Once memory is already bound, you do not have to rebind the memory to the Renderscript
+runtime every time you make a change to a value.</p>
diff --git a/docs/html/guide/topics/renderscript/reference.jd b/docs/html/guide/topics/renderscript/reference.jd
new file mode 100644
index 0000000..a0a9df2
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference.jd
@@ -0,0 +1,18 @@
+page.title=Runtime API Reference
+@jd:body
+
+<script language="JavaScript">
+
+function autoResize(element){
+ var newheight;
+ var newwidth;
+
+ newheight = element.contentWindow.document.body.scrollHeight + 20;
+ newwidth = element.contentWindow.document.body.scrollWidth;
+ element.height = (newheight) + "px";
+ element.width = (newwidth) + "px";
+}
+</script>
+
+
+<iframe SRC="{@docRoot}reference/renderscript/index.html" width="100%" id="iframe" marginheight="0" frameborder="0" onLoad="autoResize(this);"></iframe>
diff --git a/docs/html/guide/topics/wireless/wifip2p.jd b/docs/html/guide/topics/wireless/wifip2p.jd
new file mode 100644
index 0000000..4dd3d26
--- /dev/null
+++ b/docs/html/guide/topics/wireless/wifip2p.jd
@@ -0,0 +1,611 @@
+page.title=Wi-Fi Direct
+
+@jd:body
+
+ <div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+
+ <ol>
+ <li><a href="#api">API Overview</a></li>
+ <li><a href="#creating-br">Creating a Broadcast Receiver for Wi-Fi Direct Intents</a></li>
+
+ <li>
+ <a href="#creating-app">Creating a Wi-Fi Direct Application</a>
+
+ <ol>
+ <li><a href="#setup">Initial setup</a></li>
+
+ <li><a href="#discovering">Discovering peers</a></li>
+
+ <li><a href="#connecting">Connecting to peers</a></li>
+
+ <li><a href="#transferring">Transferring data</a></li>
+ </ol>
+ </li>
+ </ol>
+ <h2>Related Samples</h2>
+ <ol>
+ <li><a href="{@docRoot}resources/samples/WiFiDirectDemo/index.html">Wi-Fi Direct Demo</a></li>
+ </ol>
+ </div>
+ </div>
+
+ <p>Wi-Fi Direct allows Android 4.0 (API level 14) or later devices with the appropriate hardware
+ to connect directly to each other via Wi-Fi without an intermediate access point.
+ Using these APIs, you can discover and connect to other devices when each device supports Wi-Fi Direct,
+ then communicate over a speedy connection across distances much longer than a Bluetooth connection.
+ This is useful for applications that share data among users, such as a multiplayer game or
+ a photo sharing application.</p>
+
+ <p>The Wi-Fi Direct APIs consist of the following main parts:</p>
+
+ <ul>
+ <li>Methods that allow you to discover, request, and connect to peers are defined
+ in the {@link android.net.wifi.p2p.WifiP2pManager} class.</li>
+
+ <li>Listeners that allow you to be notified of the success or failure of {@link
+ android.net.wifi.p2p.WifiP2pManager} method calls. When calling {@link
+ android.net.wifi.p2p.WifiP2pManager} methods, each method can receive a specific listener
+ passed in as a parameter.</li>
+
+ <li>Intents that notify you of specific events detected by the Wi-Fi Direct framework,
+ such as a dropped connection or a newly discovered peer.</li>
+ </ul>
+
+ <p>You often use these three main components of the APIs together. For example, you can
+ provide a {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} to a call to {@link
+ android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()}, so that you can be
+ notified with the {@link android.net.wifi.p2p.WifiP2pManager.ActionListener#onSuccess
+ ActionListener.onSuccess()} and {@link android.net.wifi.p2p.WifiP2pManager.ActionListener#onFailure
+ ActionListener.onFailure()}
+ methods. A {@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION} intent is
+ also broadcast if the {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()}
+ method discovers that the peers list has changed.</p>
+
+ <h2 id="api">API Overview</h2>
+
+<p>The {@link android.net.wifi.p2p.WifiP2pManager} class provides methods to allow you to interact with
+ the Wi-Fi hardware on your device to do things like discover and connect to peers. The following actions
+ are available:</p>
+
+<p class="table-caption"><strong>Table 1.</strong>Wi-Fi Direct Methods</p>
+
+ <table>
+ <tr>
+ <th>Method</th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</td>
+ <td>Registers the application with the Wi-Fi framework. This must be called before calling any other Wi-Fi Direct method.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#connect connect()}</td>
+ <td>Starts a peer-to-peer connection with a device with the specified configuration.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#cancelConnect cancelConnect()}</td>
+ <td>Cancels any ongoing peer-to-peer group negotiation.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestConnectionInfo requestConnectInfo()}</td>
+ <td>Requests a device's connection information.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#createGroup createGroup()}</td>
+ <td>Creates a peer-to-peer group with the current device as the group owner.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#removeGroup removeGroup()}</td>
+ <td>Removes the current peer-to-peer group.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestGroupInfo requestGroupInfo()}</td>
+ <td>Requests peer-to-peer group information.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}</td>
+ <td>Initiates peer discovery </td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()}</td>
+ <td>Requests the current list of discovered peers.</td>
+ </tr>
+ </table>
+
+
+ <p>{@link android.net.wifi.p2p.WifiP2pManager} methods let you pass in a listener,
+ so that the Wi-Fi Direct framework can notify your
+ activity of the status of a call. The available listener interfaces and the
+ corresponding {@link android.net.wifi.p2p.WifiP2pManager} method calls that use the listeners
+ are described in the following table:</p>
+
+ <p class="table-caption"><strong>Table 2.</strong> Wi-Fi Direct Listeners</p>
+
+ <table>
+ <tr>
+ <th>Listener interface</th>
+ <th>Associated actions</th>
+ </tr>
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.ActionListener}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#connect connect()}, {@link
+ android.net.wifi.p2p.WifiP2pManager#cancelConnect cancelConnect()}, {@link
+ android.net.wifi.p2p.WifiP2pManager#createGroup createGroup()}, {@link
+ android.net.wifi.p2p.WifiP2pManager#removeGroup removeGroup()}, and {@link
+ android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.ChannelListener}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestConnectionInfo requestConnectInfo()}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestGroupInfo requestGroupInfo()}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()}</td>
+ </tr>
+ </table>
+
+<p>The Wi-Fi Direct APIs define intents that are broadcast when certain Wi-Fi Direct events happen,
+ such as when a new peer is discovered or when a device's Wi-Fi state changes. You can register
+ to receive these intents in your application by <a href="#creating-br">creating a broadcast
+ receiver</a> that handles these intents:</p>
+
+<p class="table-caption"><strong>Table 3.</strong> Wi-Fi Direct Intents</p>
+
+ <table>
+ <tr>
+ <th>Intent</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_CONNECTION_CHANGED_ACTION}</td>
+ <td>Broadcast when the state of the device's Wi-Fi connection changes.</td>
+ </tr>
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}</td>
+ <td>Broadcast when you call {@link
+ android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}. You
+ usually want to call {@link android.net.wifi.p2p.WifiP2pManager.PeerListListener#requestPeers
+ requestPeers()} to get an updated list of peers if you handle this intent in your
+ application.</td>
+ </tr>
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION}</td>
+ <td>Broadcast when Wi-Fi Direct is enabled or disabled on the device.</td>
+ </tr>
+ <tr>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_THIS_DEVICE_CHANGED_ACTION}</td>
+ <td>Broadcast when a device's details have changed, such as the device's name.</td>
+ </tr>
+ </table>
+
+
+
+ <h2 id="creating-br">Creating a Broadcast Receiver for Wi-Fi Direct Intents</h2>
+
+ <p>A broadcast receiver allows you to receive intents broadcast by the Android system,
+ so that your application can respond to events that you are interested in. The basic steps
+ for creating a broadcast receiver to handle Wi-Fi Direct intents are as follows:</p>
+
+ <ol>
+ <li>Create a class that extends the {@link android.content.BroadcastReceiver} class. For the
+ class' constructor, you most likely want to have parameters for the {@link
+ android.net.wifi.p2p.WifiP2pManager}, {@link android.net.wifi.p2p.WifiP2pManager.Channel}, and
+ the activity that this broadcast receiver will be registered in. This allows the broadcast
+ receiver to send updates to the activity as well as have access to the Wi-Fi hardware and a
+ communication channel if needed.</li>
+
+ <li>In the broadcast receiver, check for the intents that you are interested in
+ <code>{@link android.content.BroadcastReceiver#onReceive onReceive()}</code>.
+ Carry out any necessary actions depending on the intent that is
+ received. For example, if the broadcast receiver receives a {@link
+ android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION} intent, you can call the
+ {@link android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()} method to get a list of
+ the currently discovered peers.</li>
+ </ol>
+
+ <p>The following code shows you how to create a typical broadcast receiver. The broadcast
+ receiver takes a {@link android.net.wifi.p2p.WifiP2pManager} object and an activity as
+ arguments and uses these two classes to appropriately carry out the needed actions when the
+ broadcast receiver receives an intent:</p>
+
+<pre>
+/**
+ * A BroadcastReceiver that notifies of important Wi-Fi p2p events.
+ */
+public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
+
+ private WifiP2pManager manager;
+ private Channel channel;
+ private MyWiFiActivity activity;
+
+ public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel,
+ MyWifiActivity activity) {
+ super();
+ this.manager = manager;
+ this.channel = channel;
+ this.activity = activity;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
+ // Check to see if Wi-Fi is enabled and notify appropriate activity
+ } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
+ // Call WifiP2pManager.requestPeers() to get a list of current peers
+ } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
+ // Respond to new connection or disconnections
+ } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
+ // Respond to this device's wifi state changing
+ }
+ }
+}
+</pre>
+
+ <h2 id="creating-app">Creating a Wi-Fi Direct Application</h2>
+
+ <p>Creating a Wi-Fi Direct application involves creating and registering a
+ broadcast receiver for your application, discovering peers, connecting to a peer, and
+ transferring data to a peer. The following sections describe how to do this.</p>
+
+ <h3 id="setup">Initial setup</h3>
+ <p>Before using the Wi-Fi Direct APIs, you must ensure that your application can access
+ the hardware and that the device supports the Wi-Fi Direct protocol. If Wi-Fi Direct is supported,
+ you can obtain an instance of {@link android.net.wifi.p2p.WifiP2pManager}, create and register
+ your broadcast receiver, and begin using the Wi-Fi Direct APIs.</p>
+ <ol>
+ <li>
+ <p>Request permission to use the Wi-Fi hardware on the device and also declare
+ your application to have the correct minimum SDK version in the Android manifest:</p>
+ <pre>
+<uses-sdk android:minSdkVersion="14" />
+<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+<uses-permission android:name="android.permission.INTERNET" />
+<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+</pre>
+ </li>
+
+ <li>Check to see if Wi-Fi Direct is on and supported. A good place to check this is in your
+ broadcast receiver when it receives the {@link
+ android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION} intent. Notify your
+ activity of the Wi-Fi Direct state and react accordingly:
+<pre>
+@Override
+public void onReceive(Context context, Intent intent) {
+ ...
+ String action = intent.getAction();
+ if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
+ int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
+ if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
+ // Wifi Direct is enabled
+ } else {
+ // Wi-Fi Direct is not enabled
+ }
+ }
+ ...
+}
+</pre>
+ </li>
+
+ <li>In your activity's {@link android.app.Activity#onCreate onCreate()} method, obtain an instance of {@link
+ android.net.wifi.p2p.WifiP2pManager} and register your application with the Wi-Fi Direct
+ framework by calling {@link android.net.wifi.p2p.WifiP2pManager#initialize initialize()}. This
+ method returns a {@link android.net.wifi.p2p.WifiP2pManager.Channel}, which is used to connect
+ your application to the Wi-Fi Direct framework. You should also create an instance of your
+ broadcast receiver with the {@link
+ android.net.wifi.p2p.WifiP2pManager} and {@link android.net.wifi.p2p.WifiP2pManager.Channel}
+ objects along with a reference to your activity. This allows your broadcast receiver to notify
+ your activity of interesting events and update it accordingly. It also lets you manipulate the device's
+ Wi-Fi state if necessary:
+<pre>
+WifiP2pManager mManager;
+Channel mChannel;
+BroadcastReceiver mReceiver;
+...
+@Override
+protected void onCreate(Bundle savedInstanceState){
+ ...
+ mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
+ mChannel = mManager.initialize(this, getMainLooper(), null);
+ Receiver = new WiFiDirectBroadcastReceiver(manager, channel, this);
+ ...
+}
+</pre>
+ </li>
+
+ <li>Create an intent filter and add the same intents that your
+ broadcast receiver checks for:
+ <pre>
+IntentFilter mIntentFilter;
+...
+@Override
+protected void onCreate(Bundle savedInstanceState){
+ ...
+ mIntentFilter = new IntentFilter();
+ mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
+ mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
+ mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
+ mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
+ ...
+}
+</pre>
+ </li>
+
+ <li>Register the broadcast receiver in the {@link android.app.Activity#onResume()} method
+ of your activity and unregister it in the {@link android.app.Activity#onPause()} method of your activity:
+ <pre>
+/* register the broadcast receiver with the intent values to be matched */
+@Override
+protected void onResume() {
+ super.onResume();
+ registerReceiver(receiver, intentFilter);
+}
+/* unregister the broadcast receiver */
+@Override
+protected void onPause() {
+ super.onPause();
+ unregisterReceiver(receiver);
+}
+</pre>
+
+ <p>When you have obtained a {@link android.net.wifi.p2p.WifiP2pManager.Channel} and
+ set up a broadcast receiver, your application can make Wi-Fi Direct method calls and receive
+ Wi-Fi Direct intents.</p>
+ </li>
+
+ <p>You can now implement your application and use the Wi-Fi Direct features by calling the
+ methods in {@link android.net.wifi.p2p.WifiP2pManager}. The next sections describe how to do common actions
+ such as discovering and connecting to peers.</p>
+ </ol>
+
+ <h3 id="discovering">Discovering peers</h3>
+
+ <p>To discover peers that are available to connect to, call {@link
+ android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()} to detect
+ available peers that are in range. The call to this function is asynchronous and a success or
+ failure is communicated to your application with {@link
+ android.net.wifi.p2p.WifiP2pManager.ActionListener#onSuccess onSuccess()} and {@link
+ android.net.wifi.p2p.WifiP2pManager.ActionListener#onFailure onFailure()} if you created a
+ {@link android.net.wifi.p2p.WifiP2pManager.ActionListener}. The
+ {@link android.net.wifi.p2p.WifiP2pManager.ActionListener#onSuccess onSuccess()} method only notifies you
+ that the discovery process succeeded and does not provide any information about the actual peers
+ that it discovered, if any:</p>
+ <pre>
+manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
+ @Override
+ public void onSuccess() {
+ ...
+ }
+
+ @Override
+ public void onFailure(int reasonCode) {
+ ...
+ }
+});
+
+</pre>
+
+<p>If the discovery process succeeds and detects peers, the system broadcasts the {@link
+ android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION} intent, which you can listen
+ for in a broadcast receiver to obtain a list of peers. When your application receives the {@link
+ android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION} intent, you can request a
+ list of the discovered peers with {@link
+ android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()}. The following code shows how to set this up:</p>
+ <pre>
+PeerListListener myPeerListListener;
+...
+if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
+
+ // request available peers from the wifi p2p manager. This is an
+ // asynchronous call and the calling activity is notified with a
+ // callback on PeerListListener.onPeersAvailable()
+ if (manager != null) {
+ manager.requestPeers(channel, myPeerListListener);
+ }
+}
+</pre>
+
+ <p>The {@link android.net.wifi.p2p.WifiP2pManager#requestPeers requestPeers()} method is also
+ asynchronous and can notify your activity when a list of peers is available with {@link
+ android.net.wifi.p2p.WifiP2pManager.PeerListListener#onPeersAvailable onPeersAvailable()}, which is defined in the
+ the {@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface. The {@link
+ android.net.wifi.p2p.WifiP2pManager.PeerListListener#onPeersAvailable onPeersAvailable()} method
+ provides you with an {@link android.net.wifi.p2p.WifiP2pDeviceList}, which you can iterate
+ through to find the peer that you want to connect to.</p>
+
+ <h3 id="connecting">Connecting to peers</h3>
+
+ <p>When you have figured out the device that you want to connect to after obtaining a list of
+ possible peers, call the {@link android.net.wifi.p2p.WifiP2pManager#connect connect()} method to
+ connect to the device. This method call requires a {@link android.net.wifi.p2p.WifiP2pConfig}
+ object that contains the information of the device to connect to.
+ You can be notified of a connection success or failure through the {@link
+ android.net.wifi.p2p.WifiP2pManager.ActionListener}. The following code
+ shows you how to create a connection to a desired device:</p>
+ <pre>
+//obtain a peer from the WifiP2pDeviceList
+WifiP2pDevice device;
+WifiP2pConfig config = new WifiP2pConfig();
+config.deviceAddress = device.deviceAddress;
+manager.connect(channel, config, new ActionListener() {
+
+ @Override
+ public void onSuccess() {
+ //success logic
+ }
+
+ @Override
+ public void onFailure(int reason) {
+ //failure logic
+ }
+});
+
+</pre>
+
+
+ <h3 id="transferring">Transferring data</h3>
+ <p>Once a connection is established, you can transfer data between the devices with
+ sockets. The basic steps of transferring data are as follows:</p>
+
+ <ol>
+ <li>Create a {@link java.net.ServerSocket}. This socket waits for a connection from a client on a specified
+ port and blocks until it happens, so do this in a background thread.</li>
+
+ <li>Create a client {@link java.net.Socket}. The client uses the IP address and port of
+ the server socket to connect to the server device.</li>
+
+ <li>Send data from the client to the server. When the client
+ socket successfully connects to the server socket, you can send data from the client to the server
+ with byte streams. </li>
+
+ <li>The server socket waits for a client connection (with the {@link java.net.ServerSocket#accept()} method). This
+ call blocks until a client connects, so call this is another thread. When a connection happens, the server device can receive
+ the data from the client. Carry out any actions with this data, such as saving it to a file
+ or presenting it to the user.</li>
+ </ol>
+
+ <p>The following example, modified from the <a href=
+ "{@docRoot}resources/samples/WifiDirectDemo/index.html">Wi-Fi Direct Demo</a> sample, shows you how
+ to create this client-server socket communication and transfer JPEG images from a client
+ to a server with a service. For a complete working example, compile and run the <a href=
+ "{@docRoot}resources/samples/WifiDirectDemo/index.html">Wi-Fi Direct Demo</a> sample.</p>
+<pre>
+public static class FileServerAsyncTask extends AsyncTask<Void, Void, String> {
+
+ private Context context;
+ private TextView statusText;
+
+ public FileServerAsyncTask(Context context, View statusText) {
+ this.context = context;
+ this.statusText = (TextView) statusText;
+ }
+
+ @Override
+ protected String doInBackground(Void... params) {
+ try {
+
+ /**
+ * Create a server socket and wait for client connections. This
+ * call blocks until a connection is accepted from a client
+ */
+ ServerSocket serverSocket = new ServerSocket(8888);
+ Socket client = serverSocket.accept();
+
+ /**
+ * If this code is reached, a client has connected and transferred data
+ * Save the input stream from the client as a JPEG file
+ */
+ final File f = new File(Environment.getExternalStorageDirectory() + "/"
+ + context.getPackageName() + "/wifip2pshared-" + System.currentTimeMillis()
+ + ".jpg");
+
+ File dirs = new File(f.getParent());
+ if (!dirs.exists())
+ dirs.mkdirs();
+ f.createNewFile();
+ InputStream inputstream = client.getInputStream();
+ copyFile(inputstream, new FileOutputStream(f));
+ serverSocket.close();
+ return f.getAbsolutePath();
+ } catch (IOException e) {
+ Log.e(WiFiDirectActivity.TAG, e.getMessage());
+ return null;
+ }
+ }
+
+ /**
+ * Start activity that can handle the JPEG image
+ */
+ @Override
+ protected void onPostExecute(String result) {
+ if (result != null) {
+ statusText.setText("File copied - " + result);
+ Intent intent = new Intent();
+ intent.setAction(android.content.Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.parse("file://" + result), "image/*");
+ context.startActivity(intent);
+ }
+ }
+}
+</pre>
+
+ <p>On the client, connect to the server socket with a client socket and transfer data. This example
+ transfers a JPEG file on the client device's file system.</p>
+
+<pre>
+Context context = this.getApplicationContext();
+String host;
+int port;
+int len;
+Socket socket = new Socket();
+byte buf[] = new byte[1024];
+...
+try {
+ /**
+ * Create a client socket with the host,
+ * port, and timeout information.
+ */
+ socket.bind(null);
+ socket.connect((new InetSocketAddress(host, port)), 500);
+
+ /**
+ * Create a byte stream from a JPEG file and pipe it to the output stream
+ * of the socket. This data will be retrieved by the server device.
+ */
+ OutputStream outputStream = socket.getOutputStream();
+ ContentResolver cr = context.getContentResolver();
+ InputStream inputStream = null;
+ inputStream = cr.openInputStream(Uri.parse("path/to/picture.jpg"));
+ while ((len = inputStream.read(buf)) != -1) {
+ outputStream.write(buf, 0, len);
+ }
+ outputStream.close();
+ inputStream.close();
+} catch (FileNotFoundException e) {
+ //catch logic
+} catch (IOException e) {
+ //catch logic
+}
+
+/**
+ * Clean up any open sockets when done
+ * transferring or if an exception occurred.
+ */
+finally {
+ if (socket != null) {
+ if (socket.isConnected()) {
+ try {
+ socket.close();
+ } catch (IOException e) {
+ //catch logic
+ }
+ }
+ }
+}
+</pre>
diff --git a/docs/html/images/rs_compute.graffle b/docs/html/images/rs_compute.graffle
new file mode 100644
index 0000000..3fa8c67a
--- /dev/null
+++ b/docs/html/images/rs_compute.graffle
@@ -0,0 +1,2445 @@
+<?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>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGrafflePro</string>
+ <string>138.28.0.154505</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2011-09-19 10:15:24 -0700</string>
+ <key>Creator</key>
+ <string>Robert Ly</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1.0000 in</string>
+ <key>GraphDocumentVersion</key>
+ <integer>6</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{67.75, 299.343}, {157, 40.322}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.628571</string>
+ <key>g</key>
+ <string>0.768599</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.236788</string>
+ <key>g</key>
+ <string>0.532236</string>
+ <key>r</key>
+ <string>0.990271</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.131021</string>
+ <key>g</key>
+ <string>0.363196</string>
+ <key>r</key>
+ <string>0.725948</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript object}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{67.75, 231.343}, {157, 45.161}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.628571</string>
+ <key>g</key>
+ <string>0.768599</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.236788</string>
+ <key>g</key>
+ <string>0.532236</string>
+ <key>r</key>
+ <string>0.990271</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.131021</string>
+ <key>g</key>
+ <string>0.363196</string>
+ <key>r</key>
+ <string>0.725948</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript context}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Info</key>
+ <integer>6</integer>
+ </dict>
+ <key>ID</key>
+ <integer>246</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>40</real>
+ <key>Points</key>
+ <array>
+ <string>{146.25, 276.504}</string>
+ <string>{146.25, 299.343}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Info</key>
+ <integer>8</integer>
+ </dict>
+ <key>ID</key>
+ <integer>256</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>62</real>
+ <key>Points</key>
+ <array>
+ <string>{224.75, 319.504}</string>
+ <string>{339.25, 229.339}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Info</key>
+ <integer>7</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{51.25, 186.67}, {190, 175.33}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>235</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+Activity\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{26.5, 137.831}, {239.5, 238.669}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>233</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+\
+\
+Android Framework\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>250</integer>
+ </dict>
+ <key>ID</key>
+ <integer>249</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{434.25, 252.366}</string>
+ <string>{434.25, 281.285}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{339.25, 281.285}, {190, 46.0537}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>250</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.274119</string>
+ <key>g</key>
+ <string>0.950739</string>
+ <key>r</key>
+ <string>0.787494</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.165602</string>
+ <key>g</key>
+ <string>0.586124</string>
+ <key>r</key>
+ <string>0.428309</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript Compute Engine}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{339.25, 206.312}, {190, 46.0537}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Compute Renderscript (.rs)}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{314.5, 168.835}, {239.5, 175.33}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>252</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+\
+Renderscript Runtime\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>248</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2011-11-07 11:10:03 -0800</string>
+ <key>Modifier</key>
+ <string>Robert Ly</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>coded</string>
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgWQCgRgDhg==</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>QuickLookPreview</key>
+ <data>
+ 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
+ 2EBBVT2xICYseVzSaKIjmIdcGBQiVcm8WAUKkSrqygws6JIFDgpmKOh6VyioPKCAM1mn
+ hJ4v86gi92jp1RHs3kqq9Z1CQYevUNDpOYOCzn8fMYMCs3ePoZzKH/3IZDX6SPPRZQnK
+ lBlWwNHDrfp/9ZXJKgG9SNaLjnFv/G8tDe63FcFgl0y7U2n4yqQLvSvA1YMKRKVcAUjt
+ 2AV7z5ZdXALd0YdaY5cEvq30ndpcJrAyf8vtkFJRISUy+MnyqiYdJeZRxd6jwkRHsHvr
+ dtJgIhm+Qirr9KxriZEyn0RsQErfb9klYSOiD/XMLli1MWK/OsEuzj4hK+wCVh5ooZNL
+ ewm54CPmSXI59UVJlgqqqi25YAfsig0SVCVIwCa8I5c083FukAtXHmDJgQQcQxP9acNA
+ Al+BUCXG5EI3pXwgkmirPJDA169kIulUjyqikOI/l9jLT0hGRDp8RYJNz5Cg899HzJBg
+ IXveQWBk+YhbsNemXPEnKf/Hi1illL/LXeon+S2flzaXuntm+S+c9lyDCmVuZHN0cmVh
+ bQplbmRvYmoKNiAwIG9iagoyOTIyCmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdl
+ IC9QYXJlbnQgNCAwIFIgL1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAwIFIgL01l
+ ZGlhQm94IFswIDAgNTc2IDczM10KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQg
+ WyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2Ug
+ PDwgL0NzMiAyMiAwIFIKL0NzMSA4IDAgUiA+PiAvRXh0R1N0YXRlIDw8IC9HczIgMzAg
+ MCBSIC9HczEgMzEgMCBSID4+IC9Gb250IDw8IC9GMS4wIDIzIDAgUgo+PiAvWE9iamVj
+ dCA8PCAvSW0xIDkgMCBSIC9JbTQgMTUgMCBSIC9JbTUgMTcgMCBSIC9JbTMgMTMgMCBS
+ IC9JbTIgMTEgMCBSCi9JbTYgMTkgMCBSID4+IC9TaGFkaW5nIDw8IC9TaDUgMjcgMCBS
+ IC9TaDYgMjggMCBSIC9TaDQgMjYgMCBSIC9TaDMgMjUgMCBSCi9TaDcgMjkgMCBSIC9T
+ aDIgMjQgMCBSIC9TaDEgMjEgMCBSID4+ID4+CmVuZG9iagoyNyAwIG9iago8PCAvQ29s
+ b3JTcGFjZSAzMiAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDk1LjUgLTg4LjE2
+ NSA5NS40OTk5OCA4OC4xNjUwNApdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFs
+ c2UgZmFsc2UgXSAvRnVuY3Rpb24gMzMgMCBSID4+CmVuZG9iagoyOCAwIG9iago8PCAv
+ Q29sb3JTcGFjZSAzMiAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDc5IC0yMy4w
+ ODA1MSA3OSAyMy4wODA1NCBdCi9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2Ug
+ ZmFsc2UgXSAvRnVuY3Rpb24gMzQgMCBSID4+CmVuZG9iagoyNiAwIG9iago8PCAvQ29s
+ b3JTcGFjZSAzMiAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDEyMC4yNSAtMTE5
+ LjgzNDcgMTIwLjI1IDExOS44MzQ4Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBm
+ YWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAzNSAwIFIgPj4KZW5kb2JqCjI1IDAgb2JqCjw8
+ IC9Db2xvclNwYWNlIDMyIDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTUuNSAt
+ MjMuNTI2ODUgOTUuNDk5OTggMjMuNTI2ODkKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVu
+ ZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDM2IDAgUiA+PgplbmRvYmoKMjkgMCBv
+ YmoKPDwgL0NvbG9yU3BhY2UgMzIgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA3
+ OSAtMjAuNjYxMDEgNzkgMjAuNjYxMDQgXQovRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBb
+ IGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDM3IDAgUiA+PgplbmRvYmoKMjQgMCBvYmoK
+ PDwgL0NvbG9yU3BhY2UgMzIgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41
+ IC0yMy41MjY4NSA5NS40OTk5OCAyMy41MjY4OQpdIC9Eb21haW4gWyAwIDEgXSAvRXh0
+ ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMzggMCBSID4+CmVuZG9iagoyMSAw
+ IG9iago8PCAvQ29sb3JTcGFjZSAzMiAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBb
+ IDEyMC4yNSAtODguMTY1IDEyMC4yNSA4OC4xNjUwNQpdIC9Eb21haW4gWyAwIDEgXSAv
+ RXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMzkgMCBSID4+CmVuZG9iago5
+ IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9J
+ bWFnZSAvV2lkdGggNTAyIC9IZWlnaHQgNDkwIC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xv
+ clNwYWNlIDQwIDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFzayA0MSAwIFIgL0Jp
+ dHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt
+ 0DEBAAAAwqD1T20Hb4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAgX9gQzkAAQplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2Jq
+ CjMyNDEKZW5kb2JqCjE1IDAgb2JqCjw8IC9MZW5ndGggMTYgMCBSIC9UeXBlIC9YT2Jq
+ ZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMzc0IC9JbnRlcnBv
+ bGF0ZQp0cnVlIC9Db2xvclNwYWNlIDQwIDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9T
+ TWFzayA0MyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29k
+ ZSA+PgpzdHJlYW0KeAHt0DEBAAAAwqD1T20Hb4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAgX9g4j4AAQplbmRzdHJlYW0KZW5kb2JqCjE2IDAgb2JqCjE5OTAKZW5kb2Jq
+ CjE3IDAgb2JqCjw8IC9MZW5ndGggMTggMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBl
+ IC9JbWFnZSAvV2lkdGggMzM2IC9IZWlnaHQgMTEyIC9JbnRlcnBvbGF0ZQp0cnVlIC9D
+ b2xvclNwYWNlIDQwIDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFzayA0NSAwIFIg
+ L0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+ eAHt0DEBAAAAwqD1T20ND4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQOP
+ AwO5DwABCmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKNTE2CmVuZG9iagoxMyAwIG9i
+ ago8PCAvTGVuZ3RoIDE0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2Ug
+ L1dpZHRoIDUwMiAvSGVpZ2h0IDYzMCAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFj
+ ZSA0MCAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgNDcgMCBSIC9CaXRzUGVy
+ Q29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dAxAQAA
+ AMKg9U9tCy+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAED74EBev4AAQplbmRzdHJlYW0KZW5kb2JqCjE0IDAgb2JqCjQx
+ NjEKZW5kb2JqCjExIDAgb2JqCjw8IC9MZW5ndGggMTIgMCBSIC9UeXBlIC9YT2JqZWN0
+ IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMTE0IC9JbnRlcnBvbGF0
+ ZQp0cnVlIC9Db2xvclNwYWNlIDQwIDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFz
+ ayA0OSAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+ PgpzdHJlYW0KeAHt0AENAAAAwqD3T20PBxEoDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgw8D8wGSoAAQplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjYyMgpl
+ bmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0aCAyMCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1
+ YnR5cGUgL0ltYWdlIC9XaWR0aCAzMzYgL0hlaWdodCAxMDQgL0ludGVycG9sYXRlCnRy
+ dWUgL0NvbG9yU3BhY2UgNDAgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDUx
+ IDAgUiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0
+ cmVhbQp4Ae3QMQEAAADCoPVPbQlPiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwb+AwOZjwABCmVuZHN0cmVhbQplbmRvYmoKMjAgMCBv
+ YmoKNDgxCmVuZG9iago0MSAwIG9iago8PCAvTGVuZ3RoIDQyIDAgUiAvVHlwZSAvWE9i
+ amVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDUwMiAvSGVpZ2h0IDQ5MCAvQ29sb3JT
+ cGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVu
+ dCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3YWVeTZx9GcTKTEGYZ
+ DVpBi1WDVZGiAhWlMs+Q0O//Rd7Qd7Wrwauetmu776P2f3btHw/aDgz4LGABC1jAAhaw
+ gAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtY
+ wAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUs
+ YAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIW
+ sIAFLGABC/xHCxR8uALf/lErFEvlcsUHK1AulYqFf5IvlMrVwcbQUNOHKjDUqNcq5exe
+ KJZrjeGxyXtT0z5SgampexOjzXqlFD73Hvrg8MRM6+GjpaXHPlCBpcVHD+anxoaqgb1Y
+ ro9OLzx+9vL1m9XVtz5MgdXVN6/aTxfnJ5u1r9gL5cGRmUfPXr/b/Lj9yYcqsP3rxtrL
+ Hxcmh6rFO3+lK1abUz+8WNva2Ts4PPKRChweHux++vB6+f54vdz/R3uhVB9v/fT2193j
+ s4uLSx+pwMXF+enhzoefl2aG73zshcrQ1OKrzd2Ty+tOp+sjFeh0Olfnh5/Xn7fG66W+
+ X/HF6sjs8tqno4tO9+bm5ncfqEAPtHt9trf186N7jf5f8cXa6P3n77+cXN2iqw4y703p
+ iXYuDrdXH083K31/sJcGx1vtjd2za8lZ4rdrbj/2y+PPaz/2/mDvV69PLKxs7ffUeaNd
+ 9PtN9+p4Z3159mv1By+39s9VZ/6MdK9Ofnv3dG7kq2/9/+rM0d/9qm+rd777PswAf6n3
+ /d+5Un3ij29dddWZBb7HVX7rqv/5P+j8Dc/+WfBbZ/vmdarnLuyr6mzfvE713IV9VZ3t
+ m9epnruwr6qzffM61XMX9lV1tm9ep3ruwr6qzvbN61TPXdhX1dm+eZ3quQv7qjrbN69T
+ PXdhX1Vn++Z1qucu7KvqbN+8TvXchX1Vne2b16meu7CvqrN98zrVcxf2VXW2b16neu7C
+ vqrO9s3rVM9d2FfV2b55neq5C/uqOts3r1M9d2FfVWf75nWq5y7sq+ps37xO9dyFfVWd
+ 7ZvXqZ67sK+qs33zOtVzF/ZVdbZvXqd67sK+qs72zetUz13YV9XZvnmd6rkL+6o62zev
+ Uz13YV9VZ/vmdarnLuyr6mzfvE713IV9VZ3tm9epnruwr6qzffM61XMX9lV1tm9ep3ru
+ wr6qzvbN61TPXdhX1dm+eZ3quQv7qjrbN69TPXdhX1Vn++Z1qucu7KvqbN+8TvXchX1V
+ ne2b16meu7CvqrN98zrVcxf2VXW2b16neu7CvqrO9s3rVM9d2FfV2b55neq5C/uqOts3
+ r1M9d2FfVWf75nWq5y7sq+ps37xO9dyFfVWd7ZvXqZ67sK+qs33zOtVzF/ZVdbZvXqd6
+ 7sK+qs72zetUz13YV9XZvnmd6rkL+6o62zevUz13YV9VZ/vmdarnLuyr6mzfvE713IV9
+ VZ3tm9epnruwr6qzffM61XMX9lV1tm9ep3ruwr6qzvbN61TPXdhX1dm+eZ3quQv7qjrb
+ N69TPXdhX1Vn++Z1qucu7KvqbN+8TvXchX1Vne2b16meu7CvqrN98zrVcxf2VXW2b16n
+ eu7CvqrO9s3rVM9d2FfV2b55neq5C/uqOts3r1M9d2FfVWf75nWq5y7sq+ps37xO9dyF
+ fVWd7ZvXqZ67sK+qs33zOtVzF/ZVdbZvXqd67sK+qs72zetUz13YV9XZvnmd6rkL+6o6
+ 2zevUz13YV9VZ/vmdarnLuyr6mzfvE713IV9VZ3tm9epnruwr6qzffM61XMX9lV1tm9e
+ p3ruwr6qzvbN61TPXdhX1dm+eZ3quQv7qjrbN69TPXdhX1Vn++Z1qucu7KvqbN+8TvXc
+ hX1Vne2b16meu7CvqrN98zrVcxf2VXW2b16neu7CvqrO9s3rVM9d2FfV2b55neq5C/uq
+ Ots3r1M9d2FfVWf75nWq5y7sq+ps37xO9dyFfVWd7ZvXqZ67sK+qs33zOtVzF/ZVdbZv
+ Xqd67sK+qs72zetUz13YV9XZvnmd6rkL+6o62zevUz13YV9VZ/vmdarnLuyr6mzfvE71
+ 3IV9VZ3tm9epnruwr6qzffM61XMX9lV1tm9ep3ruwr6qzvbN61TPXdhX1dm+eZ3quQv7
+ qjrbN69TPXdhX1Vn++Z1qucu7KvqbN+8TvXchX1Vne2b16meu7CvqrN98zrVcxf2VXW2
+ b16neu7CvqrO9s3rVM9d2FfV2b55neq5C/uqOts3r1M9d2FfVWf75nWq5y7sq+ps37xO
+ 9dyFfVWd7ZvXqZ67sK+qs33zOtVzF/ZVdbZvXqd67sK+qs72zetUz13YV9XZvnmd6rkL
+ +6o62zevUz13YV9VZ/vmdarnLuyr6mzfvE713IV9VZ3tm9epnruwr6qzffM61XMX9lV1
+ tm9ep3ruwr6qzvbN61TPXdhX1dm+eZ3quQv7qjrbN69TPXdhX1Vn++Z1qucu7KvqbN+8
+ TvXchX1Vne2b16meu7CvqrN98zrVcxf2VXW2b16neu7CvqrO9s3rVM9d2FfV2b55neq5
+ C/uqOts3r1M9d2FfVWf75nWq5y7sq+ps37xO9dyFfVWd7ZvXqZ67sK+qs33zOtVzF/ZV
+ dbZvXqd67sK+qs72zetUz13YV9XZvnmd6rkL+6o62zevUz13YV9VZ/vmdarnLuyr6mzf
+ vE713IV9VZ3tm9epnruwr6qzffM61XMX9lV1tm9ep3ruwr6qzvbN61TPXdhX1dm+eZ3q
+ uQv7qjrbN69TPXdhX1Vn++Z1qucu7KvqbN+8TvXchX1Vne2b16meu7CvqrN98zrVcxf2
+ VXW2b16neu7CvqrO9s3rVM9d2FfV2b55neq5C/uqOts3r1M9d2FfVWf75nWq5y7sq+ps
+ 37xO9dyFfVWd7ZvXqZ67sK/fVr++Ya//Xtf9pV4Y+Nsr1ScerGztn6vO/Lm4VV9fnhup
+ 3lEfX1jZ3Du7vrnxa+fB33Qvj3d+WZ4dvqM+ON56sbF7et2VHYjeUz/6vPZkZrjS960X
+ a6PzP7377fhKdSR65+Lg45ulqaE76tXhmSer2wfn113dWe69X97dztXJl42VhxONct+3
+ Xig3Jh+23+8cnV9e376OD1LgVvPq8nT/49un86O10t/+Bt/7x1JtZO7J642dg+PTs947
+ 90EK9DBPT452t9fbP9wbqhT71YuVxkRr+dX7jztfdvf29n2YAnt7u18+b621l2ZHBkt9
+ v+AHBgqlanOy9aS9uv5hY3Nzy4cpsLm58X7t1bPFubH63U/9lr3WnJh7+Pjp8xft9ooP
+ U6DdfvFsebE1PdqoFO986r1f972vvTEyOT13v7XgIxVoteZnp8abvS/9a/Rb9kqt0RwZ
+ G/exCoyNjjTr1XJE77EXS+VqrTZY95EKDA7WqpV/Mv/j7/SFQrFY8rEKFIvFQvrl3v9f
+ cf6bBSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGAB
+ C1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCA
+ BSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jA
+ AhawgAUsYAELWMACFrCABSxggX+lwP8AyqUofgplbmRzdHJlYW0KZW5kb2JqCjQyIDAg
+ b2JqCjI3OTgKZW5kb2JqCjQzIDAgb2JqCjw8IC9MZW5ndGggNDQgMCBSIC9UeXBlIC9Y
+ T2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMzc0IC9Db2xv
+ clNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9u
+ ZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7ZdZW5NXAAbJHgiL
+ LIJsClKRugRL61aWShURUBAhBP//H2nwqRa0zlX93ovOueHihQzPDOdL6OvzaEADGtCA
+ BjSgAQ0UY6BULlc8hRool0ul78UtlSu1eqPZ7ynSQLNRq1b+vUmpUmu2hkZGxzwFGhi9
+ Njw40KiW/6VJuVJvjYxPzczN3/QUZ2B+dnpybKi/9u01KVUag+MzC3fuPWi3Vz1FGWg/
+ vL+yND91baD29S0pVeqDE/PL7cfPNza3PMUZ2Fx/unZ/aWa0l+Tq+3u51hqfX1lb397Z
+ fbPnKc7Am9evtp62f5oeaX713Ko0R6aX1zZ3Dg6P3h97ijPw/ujd3p/PHy5eH7x6SUrV
+ 1vhCe33n7fFpp3PmKc5Ap3NytL/9ZGWmd0kuP7bK9aGpO4+394873e75+flHTzEGeq67
+ Z6dHuxvtW+MD1cufgMuNkZl7z3cOTy96WKSYHJ8oF0k+7L/4dan32LpcpNIcnXuwsXvU
+ 8YYUWONzkpO3L5/cmRq6WqR/dL69+eZ9xwtSdJGP592Td6+e3r0xVL9yR/rHbra39o57
+ RQr/jf73wO7p4c6zu9PD3xRZtUjmj+OiyPOV7xQ5y/xO/2/qlyKX/2uv9J5aF3fEIoE/
+ DosEpCPSIqgnMFokIB2RFkE9gdEiAemItAjqCYwWCUhHpEVQT2C0SEA6Ii2CegKjRQLS
+ EWkR1BMYLRKQjkiLoJ7AaJGAdERaBPUERosEpCPSIqgnMFokIB2RFkE9gdEiAemItAjq
+ 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
+ B3cXZ8Za9crl9/WL51epl2RwdHL25sLi7SVPQQZu3168NTc9MTLwbZBPSeoDQyNj4xPX
+ PYUZmJgYHx1uNWvf3JBP7/K9a1Jv9A+0PEUaGOhv1Crlrx9Znz92lcqVSrVarXkKMtCT
+ Xe3l+F6Pv7uUPEUa+Hwb/KoBDWhAAxrQgAY0UICBvwALpbhFCmVuZHN0cmVhbQplbmRv
+ YmoKNDQgMCBvYmoKMjQ0NwplbmRvYmoKNDUgMCBvYmoKPDwgL0xlbmd0aCA0NiAwIFIg
+ L1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzMzYgL0hlaWdodCAx
+ MTIgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQ
+ ZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt3V1T
+ GgcYBWB2F1i+PxMVAtHGIFRlMzH1AwVHGxC1ClJAzP//I91l2gyLcLonN51pznulHg4X
+ z7w7yo1vKKSRgAQkIAEJSOD/LWCYpqUhBEzTMNathGFakagdi2uCC8TsSNhaLWpYkVgy
+ nc0XNIEF8rlMKmGHzRWiphVNZoub5Ur1vSaoQPVdaaOQjkder6hh2alieae2f+g4nzTB
+ BJzmQWO3uplLRJY31LCiqTfVPee41e5caoIKdC5Ojw52y3kX1P9byYwki9XG0cV1r397
+ pwkqcHvTvTx1PpaysaUn3oplS3tHnd4fg+HTSBNU4Gn4ePd7q/nL25R/QY1wsrjjXPQe
+ RpPp9FkTVGA6HQ/vr08aZXdBFx94M5rerB1f34+ms9nLy8s3TRABV2r2PBn22852MRFe
+ /JvJtLPl/VZvMPE05RkEc/4aD/TP+6svu+4Dv+hpxfKVw3Z/ONV2Brb8B3T88PWktpn2
+ e8bzVadz+zTVcnKe315m48fuaX0rHfXtZ7zw3rm8G7me5Pv99C+fTQa9s3op88rzkzx/
+ ZDk8z1Zjjefzj7zjz9357rn4Cclyn3dvP+VJL4c8aTJYkCfkoUN50mSwIE/IQ4fypMlg
+ QZ6Qhw7lSZPBgjwhDx3KkyaDBXlCHjqUJ00GC/KEPHQoT5oMFuQJeehQnjQZLMgT8tCh
+ PGkyWJAn5KFDedJksCBPyEOH8qTJYEGekIcO5UmTwYI8IQ8dypMmgwV5Qh46lCdNBgvy
+ hDx0KE+aDBbkCXnoUJ40GSzIE/LQoTxpMliQJ+ShQ3nSZLAgT8hDh/KkyWBBnpCHDuVJ
+ k8GCPCEPHcqTJoMFeUIeOpQnTQYL8oQ8dChPmgwW5Al56FCeNBksyBPy0KE8aTJYkCfk
+ oUN50mSwIE/IQ4fypMlgQZ6Qhw7lSZPBgjwhDx3KkyaDBXlCHjqUJ00GC/KEPHQoT5oM
+ FuQJeehQnjQZLMgT8tChPGkyWJAn5KFDedJksCBPyEOH8qTJYAF6TvXv/CHeivC75+r7
+ CCsa+hES8DzP6lvL9xF0vwOhrc/W3O/QfZn1ZChxD/asui/j3T/6tdV7nN8/Qn1lPgHv
+ /tFofv8o6bvXM7/P9Zvuc/mw/vUb97iRe59rcOPe5yr473MZ4URxu3nefRiNpxpCYDIe
+ 3l0d18tZ23c/LmTZmVLtqN29fxw+aQILDAcP/euz5s6bpP++YciMJAqV+ufzq+5N/1YT
+ VKDf+9o5ae5uZZbvb3r3YYuVWvPL2UW7owkq0D4/+bz/oZSLL61nKOTdLy6Utj82Dg6b
+ mqACh/t7Hyob2df3iz3QaCJT2Ci9q1Q1AQUqlfLW23zK3c7FD5t/HzZ177/biVQml9cE
+ FshlM8l4dOX9d3dDTSscse1YXBNQIBazo5E1mvMtNQzTNC1NUAFXy1jxqC+eMtbXEpCA
+ BCQggf9A4C9bXHKRCmVuZHN0cmVhbQplbmRvYmoKNDYgMCBvYmoKMTA4OQplbmRvYmoK
+ NDcgMCBvYmoKPDwgL0xlbmd0aCA0OCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUg
+ L0ltYWdlIC9XaWR0aCA1MDIgL0hlaWdodCA2MzAgL0NvbG9yU3BhY2UKL0RldmljZUdy
+ YXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9G
+ bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt11lzlAUeRvF0OitZgICBgEQWDYuyCLILyC5b
+ IJAQ5vt/kek4o2VAjlUzVxzPe+PFX6vynF/eTjs21lOBClSgAhWoQAUqUIEKVKACFahA
+ BSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSg
+ AhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQ
+ gQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWo
+ QAUqUIEKVKACFahABSpQgf+hwGAwGO+RFRihwq/CYHw4MTk1Nd2jKjA1NTkxHP8M/GB8
+ Ymp2bn5hcW+PqcDi4sL8nunJ4V+yD4aTs/P7Di4fXlk50iMqsLJy6KulvXPTE3/xug+G
+ U3v2LR898e3ps2fP9XgKnD17Zu3U6sqBhZmJ8U/+uo9Pzi0dOXnu0k/Xb97qURW4ee3K
+ +bXV5cWZiY8/5AcTs/uPfHfh+p37jx4/6TEVePz44S+3r3x/fHlh+uO/7cPphUOnLt58
+ 8PTFq/X11z2eAuvr6y+fP7579dzqgbnJ3S/7YGLP0uoPNx48f/12c/Rs9WgKjDjfbbx6
+ evfK2sri9O6/7IPJ+eVvr9x79mbz/fbo+dCjKbDj+f7dq8e3zq8uzU7s+j43Pr24cubG
+ o1fvdsT/1WMqMPr93d7aeHbv8smDc7u/z43P7Dv6/e2nr7e2MzeJ72zZ+dR6/+7lg6vf
+ Lc/v/sM+nN1/7PydX99s9abb0H9z33736tH1tUMLU7u+zg1nl1Yv3H22sdWr7lTfXH90
+ 4/ThxU/VL6YuFP/PpO3N9cc3z6x8Rv29dvc/e1jq/0T/P9R3/Q/7zt/1nU/43nXn70Tq
+ TldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69K
+ nfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX
+ 1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTlde
+ lTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4
+ r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2u
+ vCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3
+ cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7
+ XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp1
+ 7uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5T
+ d7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV
+ 6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8
+ pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ry
+ qtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzH
+ eU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu50
+ 5VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5
+ j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d
+ 6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWp
+ cx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/Oa
+ utOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqr
+ Uuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/n
+ NXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOV
+ V6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+
+ zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWn
+ K69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XO
+ fZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvq
+ TldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69K
+ nfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX
+ 1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTlde
+ lTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4
+ r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2u
+ vCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3
+ cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7
+ XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp1
+ 7uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5T
+ d7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV
+ 6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8
+ pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ry
+ qtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzH
+ eU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu50
+ 5VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5
+ j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d
+ 6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvIrVt/g/7vqFFvhD
+ fTD2p2c4u7R68e6zja0PX+isfmws8Fn1YxfuPHuz9eFD7tjvizx+2N589ejG6cMLU7vf
+ 9Zn9X5//+WnqXyTq3/zQozd5+92rh9fWDi1M7lIfn9579NytJ+ub26N/pbf9bzJ+YeeR
+ 6Pu3L+7/9O3y/EfqU4uH1649ePn2/Q77F7aqHxcLjN707a03v965dPzAnold7/pgcu7g
+ iUs/P1l/t/W+x1Zga3PjxcPr577eNzP80zf4sbHBcHbf0TNX7z19+XrjbY+swMb680e3
+ L51aXpga36U+Nj41f/Cb76/eefT0+YseV4Hnz57cv/Xj2tH9s7s/4Hde9unF5eNnL9/4
+ +d790fOgR1JghPnL3dvXLqx9fWDu41d9bGx8Ymbxq2Onzl748fKVHlWByxd/OH3iyNL8
+ 1HDXd7mdD/vBiH1+afno6vGTJ0/1iAqcPPHNsZWDe+f+Av039qk9C3uXDhz8qkdV4OCB
+ /YtzM5Ofvum/fbUbve5TM7N75npkBfbMTk8Oxz/5eP/9+/xgfDicmJiY7BEVGIGOyD9r
+ /l/7QY+swO8vdf+sQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEK
+ VKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAF
+ KlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKAC
+ FahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAL/X4F/A+4p
+ 3x8KZW5kc3RyZWFtCmVuZG9iago0OCAwIG9iagozNDQ5CmVuZG9iago0OSAwIG9iago8
+ PCAvTGVuZ3RoIDUwIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dp
+ ZHRoIDQwMiAvSGVpZ2h0IDExNCAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJw
+ b2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+ ID4+CnN0cmVhbQp4Ae2dW1PaXBSGyRkIBAELQgVrKQdFY0c/5SRaFTxQASkJof//jzRo
+ 2yEq64695pu+60Iv3oGXeR52tl6tUAgDAiAAAiAAAiAAAiAghoAkywpGKAFZlqRVciVZ
+ 0XQjHMGIJBA2NFV534mkaGEznkimMAIJJDesWNRQ5XecyIpuJtLZ/HahiBFHoPAxl0nF
+ I9rbYyIpRiyd/1TeP7DtI4woAvZhvVYqZDei2utTIil6bLNQsU9b590LjDgC3U7juF7K
+ J30lwftd1sx0oXbcuerf3T9gxBG4v+1dNOwvuUT41XNLCSdyleNu//to/DTBiCPwNB4+
+ XLcOdz/EgodEUs30J7vTf5w4rjvDiCPgutPx4OqslvcPyfJjS9bj2fLp1WDiet58Pv+J
+ EUPAZ+3NnPHdub2TjqrLfwHLRiK/3+qPnIUPGBGj47lloeTH4NtJyX9sLRtRwsntg/O7
+ sYsTItDGHyXTx5uzcjYeNBJJFuzu/ZOLAyLayM+5Nx32GtWtuB44I5FU0b54mPhGhH+i
+ f77Qc0b9ZjVnvTFyBCM8X46FkVZthZEZz2f6t1v/Gln+r13xn1qLMwIjDF8OGGGATlbC
+ CImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhk
+ JYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGA
+ TlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQR
+ BuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhC
+ GGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImH
+ IYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQ
+ eBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbCCImHIYQRBuhkJYyQeBhCGGGATlbC
+ CImHIYQRBuhk5V8jr7e4vuwMJV+LcB0EVhp52au7jkq8J0HAXwfujHrN6tbrvbrJwuHL
+ 7mnixYjWQMA3stg9XckGd0/L4Y3teud5P/saSvGWKwn429fns+nj9Wk5EwvsZ5cNK7fX
+ 7A2nnod94CvxrSHwhXjuZHB5/HnTVJdvdkmLZb6cXD48ObOFE4woAp7nzabDfvuwmIqo
+ oaWR1GiqeNC8GYx/OI6LEUbAcaaT0d3FSSVnGcvLwEMhxbCypaP29f334WiMEUZgNBoO
+ bi/P6sW0GbhGQiFJjSQ/lo8a3ete/xYjjkD/5lvnv/puJm4oy9eIb0TWzFT+8/7X02a7
+ 3cEIItButxondnUnY4UD9/riQpEUPbqR2d4tV/f2McII7NUqpZ38pi8keIu8KNEi8eRm
+ ZiuXx4gjkMt+SCdMQ5WDz6znv7okWdUjZsyyEhhxBKx4LGpoytsT8tuJomq6gRFIQNc1
+ VXnvgDwb8X9IkowRSkCS3nle/dGB3yAAAiAAAiAAAv93Ar8AcG6kVAplbmRzdHJlYW0K
+ ZW5kb2JqCjUwIDAgb2JqCjEyMDIKZW5kb2JqCjUxIDAgb2JqCjw8IC9MZW5ndGggNTIg
+ MCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMzM2IC9IZWln
+ aHQgMTA0IC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0cnVlIC9C
+ aXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+ 7d1ZV9pQFAVgkkAghEEGURAqlIpUJSqtI0OLiggoiBKg//+P9GJXESKcdY+Pus+Tstk8
+ fOtmOTyc63JhIAABCEAAAhD42AKKqmoYhoCqKsqqI6Gomkf3+gyMvIDP63Fry0UVzeMz
+ g+FIFCMtEFkLBfxet7pEVNV0MxzbSKUzXzCyApmtZCIaNDxvj6iieQOxVHZn78CyDjFy
+ AlZpv5jPbKz5Pc4Tqmh6IJ4pWCcX1VodIytQq5yV9/OpiABd/KmkesxYpliuNJqtuzZG
+ VuDu9qZ+Zn1Lhn2OJ17zhZOFcq3Z7fUfBxhZgcf+Q/vqopRbDyweUMVtxrJWpXk/GNr2
+ CCMrYNvP/U7jtJgSB3T+gVf14MbOSaMzsMfjyWTyByMjIKTGo2G/VbW2Y373/O9Mqjec
+ 2rto9oZTTXjKYL68Zwr61Pn9Iy8e+HlPzRdJH1RbfRunU9ryP+jz/fXpzkZw0dOIZKza
+ 3aONw8nz/DMZPz/cnO1uBvWF82lEv1j19kB4Mj/v0799POw1z3eToTeeh/B8z+GYel4U
+ V3iO3vOJn7sz85z/C0kTz/v0fMKTfTjgySYjC/AkedghPNlkZAGeJA87hCebjCzAk+Rh
+ h/Bkk5EFeJI87BCebDKyAE+Shx3Ck01GFuBJ8rBDeLLJyAI8SR52CE82GVmAJ8nDDuHJ
+ JiML8CR52CE82WRkAZ4kDzuEJ5uMLMCT5GGH8GSTkQV4kjzsEJ5sMrIAT5KHHcKTTUYW
+ 4EnysEN4ssnIAjxJHnYITzYZWYAnycMO4ckmIwvwJHnYITzZZGQBniQPO4Qnm4wswJPk
+ YYfwZJORBXiSPOwQnmwysgBPkocdwpNNRhbgSfKwQ3iyycgCPEkedghPNhlZgCfJww7h
+ ySYjC/AkedghPNlkZAGeJA87hCebjCzAk+Rhh/Bkk5EFeJI87BCebDKyAE+Shx3Ck01G
+ FkhPm6wiXCIw83Tu//y3r3JJAy9RAqs8xX7aNvbTUnJLs8l4+HBz/mY/rdifXJruT8a+
+ 36Vqq14UXGLf7/VpwbE/Wez33tq7/L/fe1UbrzsFhOfoqdv4+S2xuN9b1UObhdOr7tMI
+ C76dZsT34nSO7f5d7Sjr2D+veMx47qh623vG7QiydyO8vM8eDrpXZ3vptcX7ERTNWNsq
+ /qy37vuDJ4y0wGDQ69xUDvOJoD6/PtnlUsV1Pdv7J7XrVrvTxcgKdNq3jcvjwlbEWLhu
+ wuUS10mFEtnvx+fVX78bGFmBX/XKibWTjpmL18uIq1FUty+0ns5/Lx2Vyz8wcgLl48OD
+ 3VwyauqO64/EARWggUgilcnmvmJkBXLb6WQ87H/L+QKqG4FwNBaPr2PkBOLxWCRk+pZc
+ xze9DEkcUd1r+E2MvIDf8Ho052V8s5ulxI2mmhvDERCY8/9YmlG+fqFgpAVe1fAVBCAA
+ AQhAAAIfV+AvZD1MOQplbmRzdHJlYW0KZW5kb2JqCjUyIDAgb2JqCjEwODYKZW5kb2Jq
+ CjMwIDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDAuNyA+PgplbmRvYmoKMzEg
+ MCBvYmoKPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMC43ID4+CmVuZG9iago1MyAwIG9i
+ ago8PCAvTGVuZ3RoIDU0IDAgUiAvTiAxIC9BbHRlcm5hdGUgL0RldmljZUdyYXkgL0Zp
+ bHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVJPSBRRHP7NNhKEiEGFeIh3CgmV
+ KaysoNp2dVmVbVuV0qIYZ9+6o7Mz05vZNcWTBF2iPHUPomN07NChm5eiwKxL1yCpIAg8
+ dej7zezqKIRveTvf+/39ft97RG2dpu87KUFUc0OVK6Wnbk5Ni4MfKUUd1E5YphX46WJx
+ jLHruZK/u9fWZ9LYst7HtXb79j21lWVgIeottrcQ+iGRZgAfmZ8oZYCzwB2Wr9g+ATxY
+ Dqwa8COiAw+auTDT0Zx0pbItkVPmoigqr2I7Sa77+bnGvou1iYP+XI9m1o69s+qq0UzU
+ tPdEobwPrkQZz19U9mw1FKcN45xIQxop8q7V3ytMxxGRKxBKBlI1ZLmfak6ddeB1GLtd
+ upPj+PYQpT7JYKiJtemymR2FfQB2KsvsEPAF6PGyYg/ngXth/1tRw5PAJ2E/ZId51q0f
+ 9heuU+B7hD014M4UrsXx2oofXi0BQ/dUI2iMc03E09c5c6SI7zHUGZj3RjmmCzF3lqoT
+ N4A7YR9ZqmYKsV37ruol7nsCd9PjO9GbOQtcoBxJcrEV2RTQPAlYFH2LsEkOPD7OHlXg
+ d6iYwBy5idzNKPce1REbZ6NSgVZ6jVfGT+O58cX4ZWwYz4B+rHbXe3z/6eMVdde2Pjz5
+ jXrcOa69nRtVYVZxZQvd/8cyhI/ZJzmmwdOhWVhr2HbkD5rMTLAMKMR/BT6X+pITVdzV
+ 7u24RRLMUD4sbCW6S1RuKdTqPYNKrBwr2AB2cJLELFocuFNrujl4d9giem35TVey64b+
+ +vZ6+9ryHm3KqCkoE82zRGaUsVuj5N142/1mkRGfODq+572KWsn+SUUQP4U5WiryFFX0
+ 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
+ Jr8Ivy1/Mn8j/ysBKgFlAS+BAoEegRVBHsEDgvGC9YLPhSiFlIV8hIqE7gutCYsI2wsf
+ E24RXhBhFTESiRWpF3kpShDVFA0RrRR9IoYVUxbzEzsrNiwOiyuI+4iXij+WgCUUJcgS
+ ZyVG9mD2qOwJ3FO5Z1KSWlJbMlKyXnJmL/Ne073Je1v2fpQSlHKUypO6L7UtrSDtL10t
+ /UKGQcZYJlmmXeazrLgsSbZU9okcQc5ALkmuVW5VXkLeU75c/qkCUeGAwjGFHoWfikqK
+ oYpXFBeVBJVclcqUJpUZlS2Us5UfqGBUdFSSVDpUNlQVVcNVm1U/qUmq+aldUlvYJ7LP
+ c1/1vjl1fnU39fPq0xq8Gq4a5zSmNfk03TQrNWe1BLQ8tGq03mmLaftqX9b+qCOtE6pz
+ Q2dNV1U3QbdbD6VnqJepN6TPoG+rX6I/ZcBv4G1Qb7BiqGAYZ9i9H7PfZH/e/kkjLiOS
+ UZ3RirGScYJxnwm1ibVJicmsqbhpqGn7AfiA8YFTB16aCZkFmrWYA3Mj81PmryxELEIs
+ blliLS0sSy3fWslYxVvdtyZau1hfsv5uo2OTa/PCVtQ2wrbHjtbOya7Obs1ezz7ffvqg
+ 1MGEgwMO7A5kh1ZHnKOdY43jt0P6h04fmndScEp3mjgscjj68ENndmd/504XWhc3l2uu
+ GFd710uuW27mbpVu39yN3MvcV0i6pCLSkoeWR4HHoqe6Z77nOy91r3yvBW9171Peiz6a
+ PoU+y2Rdcgl51Xe/b4Xvmp+530W/HX97/8YAigDXgLZAhkC/wL4g7qDooJFgieD04OkQ
+ 1ZDTISuhJqE1YVDY4bDWcEbk5XAwQjQiLWImUiOyNHI9yi7qWjR9dGD0YIx4TEbMu1iD
+ 2Atx6DhSXE88X/zR+JkE7YTziVCie2JPkkBSatL8EcMjtUepjvodfZQsnZyf/DXFPqU9
+ lSv1SOpcmmFafTpNemj65DG1YxXH0cfJx4cy5DLOZGxnemT2Z0lnFWZtZZOy+0/InCg+
+ sZPjlTOUq5hbfhJ7MvDkRJ5mXm0+fX5s/typA6duFvAWZBZ8Pe1y+mGhfGFFEVVRRNF0
+ sWlx6xnBMyfPbJX4lIyX6pQ2lnGWZZStnfU4O1quVX6lgqsiq+LHOfK5p+cNz9+sFK4s
+ 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
+ G9/mvj9cy1/ft/52I3Vj40fgj7nNg5u3txi3yFtdPxl/kn92bVNsW2wXb7/eEdkJ2mnZ
+ zX+Yl5zs7u4BIGodhH6c2tn5IgwALh+An3k7O5uVOzs/q5BiA/kG0u3/+3vFrjEW4dzL
+ bu2i/3T8D+gdk/4KZW5kc3RyZWFtCmVuZG9iago1NiAwIG9iago1OTUzCmVuZG9iago0
+ MCAwIG9iagpbIC9JQ0NCYXNlZCA1NSAwIFIgXQplbmRvYmoKNTcgMCBvYmoKPDwgL0xl
+ bmd0aCA1OCAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxh
+ dGVEZWNvZGUgPj4Kc3RyZWFtCngBhVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0R
+ YmsM2x+2RZBkM0nWbjbr7ia1pYjk4tEq3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1u
+ TLal6sDOfvPeN+99b3bfAA1y0jT1gATkDcdSohFpbHxCavyIAI6iCUE0JVXb7E4kBkGD
+ c/l759h6D4FbVsN7+3eyd62a0raaB4T9QOBHmtkqsO8XcQpZEgKIPN+hKcd0CN/j2PLs
+ jzlOeXjBtQ8rPcRZInxANS3Of024U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cm
+ u8zuq2KhnE72DpC9nfR+TrPePsIhwgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbca
+ qfg1whRfEE0nolRx2S4N8Ziu/VbySoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHh
+ eY8TZ97U3e9F2gKvMA4dDBoMmg1IUBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRqu3Ri
+ RLFBezbcPbdRpN08/igicZRDtQiS/EH+Kq/JT+V5+ctcsNhW95Stm5q68uA7xeWZuRoe
+ 19PI43NNXnyV1HaTV0eWrHl6vJrsGj/sV5cx5oI1j8RzsPvxLV+VzJcpjBTF41Xz6kuE
+ dVoxN9+fbH87PeIuzy611nOtiYs3VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj4ikxJnaK
+ 5yGJl8Uu8ZLYS6sL4mBtxwidlYYp0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJUifd/
+ wipkNJ25Dm/6j9vH/Bfk94rnnygCL2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmujfjj8
+ BFg8qxatUjWfILwBHHaHeh7oKZjTlpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxazmVVi
+ 6XbYmdMdbhyhOUL3xKdKZZP6r/ERsP2wUvn5rFLZfk4a1oGX+m/AvP1FCmVuZHN0cmVh
+ bQplbmRvYmoKNTggMCBvYmoKNzM3CmVuZG9iagozMiAwIG9iagpbIC9JQ0NCYXNlZCA1
+ NyAwIFIgXQplbmRvYmoKNTkgMCBvYmoKPDwgL0xlbmd0aCA2MCAwIFIgL04gMyAvQWx0
+ ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+ hVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk
+ 4tEq3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1
+ gATkDcdSohFpbHxCavyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4FbVsN7+3eyd62a0raa
+ B4T9QOBHmtkqsO8XcQpZEgKIPN+hKcd0CN/j2PLsjzlOeXjBtQ8rPcRZInxANS3Of024
+ U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cmu8zuq2KhnE72DpC9nfR+TrPePsIh
+ wgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0nolRx2S4N8Ziu/Vby
+ SoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F2gKvMA4dDBoMmg1I
+ UBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRqu3RiRLFBezbcPbdRpN08/igicZRDtQiS
+ /EH+Kq/JT+V5+ctcsNhW95Stm5q68uA7xeWZuRoe19PI43NNXnyV1HaTV0eWrHl6vJrs
+ Gj/sV5cx5oI1j8RzsPvxLV+VzJcpjBTF41Xz6kuEdVoxN9+fbH87PeIuzy611nOtiYs3
+ VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj4ikxJnaK5yGJl8Uu8ZLYS6sL4mBtxwidlYYp
+ 0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJUifd/wipkNJ25Dm/6j9vH/Bfk94rnnygC
+ L2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmujfjj8BFg8qxatUjWfILwBHHaHeh7oKZjT
+ lpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxazmVVi6XbYmdMdbhyhOUL3xKdKZZP6r/ER
+ sP2wUvn5rFLZfk4a1oGX+m/AvP1FCmVuZHN0cmVhbQplbmRvYmoKNjAgMCBvYmoKNzM3
+ CmVuZG9iago4IDAgb2JqClsgL0lDQ0Jhc2VkIDU5IDAgUiBdCmVuZG9iago0IDAgb2Jq
+ Cjw8IC9UeXBlIC9QYWdlcyAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvQ291bnQgMSAv
+ S2lkcyBbIDMgMCBSIF0gPj4KZW5kb2JqCjYxIDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9n
+ IC9PdXRsaW5lcyAyIDAgUiAvUGFnZXMgNCAwIFIgL1ZlcnNpb24gLzEuNCA+PgplbmRv
+ YmoKMzkgMCBvYmoKPDwgL0xlbmd0aCA2MiAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAg
+ MTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAw
+ IDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBd
+ IC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa3B
+ BwKBAABA0ftfSTRUtDWMFu00dQV34L+3bT/6bB/OylmWdaHMy8yZpnmijNPIGUDv4c3p
+ QV3fUdqu5TRN21DqpuZUVV1RyqrkFKBX8eI8Qfkzp2R5xknTLKUkacKJ4ySmPOIH5w66
+ 3W+cKyi6RpQwCjlBEAYUP/A5F5B38TguyHEdjg2ybItiWibIMA3K2ThzTiD9pHM0kKqp
+ nCNIOSoUWZFBkixRREnkHED7w54jgHbC7n9fqv5GzAplbmRzdHJlYW0KZW5kb2JqCjYy
+ IDAgb2JqCjE4OAplbmRvYmoKMzggMCBvYmoKPDwgL0xlbmd0aCA2MyAwIFIgL09yZGVy
+ IDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBs
+ ZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2Ug
+ WyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+ ID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7sekGFQMDW7ED61OOMTL48MWNnU1+kLSY
+ +OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15QnCOSI6w9lCP0rD74jOETQZmBJ+w+ErDt
+ f0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6i+UbVp2u3CD0mhWzy9dIv2I5f+kKzYtZ
+ dC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Muf/YMrafM6J0+5fcJ0/KnTjB/zJTAyWOc
+ HzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyRA0zuMyJ2eB+HewxbH9pD4i5DxoO7qE8z
+ mGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb9Bh3b6I4RffPrhQ6O1N0bqjv2KD4Oh3C
+ 29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iOq2+KYxijSWZjDMtRGp02RBEaocFsfQSV
+ Yerz68LorA2hsyZEYZAaydVBLAeodloVQKifKrOVfqT7qPyzwod6L+V6y7wUeiiTXOrB
+ vJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5kb2JqCjYzIDAgb2JqCjQxMAplbmRvYmoK
+ MzcgMCBvYmoKPDwgL0xlbmd0aCA2NCAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2
+ NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEg
+ MCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9T
+ aXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdU
+ cRgH4C8mEolEIpGSkpKSEolEIhljxqxmDGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTb
+ jPOlcIwvTV7E2HCMLySjfKF7HmXTo3wuOcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjE
+ x0OyQT42eRRkwwAfCfv5KPnQz6Z9fCh44OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXcee
+ S33Xhd0BcSd2VXecSN2PHUkHdq5uO2CzD9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc2
+ 7K53Q/tLtgvrqmtdSP0Ta8KdWOvEqu0OrNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7Fk
+ ebEV2m/iLVg0XmiB+lcsSDZjoRnzkk2YtzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0
+ A65/xLRwPaZ1p+qh/gFTwu8xKVmHSfMTdfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4
+ /muKC1dTXDdWTaZfUUzyJY0JV9GYyWgVGb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZP
+ KSJcTpHk4XIyXUbDguEyCj8RL6WwaqiUDB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIy
+ fEgB4UIKJPsLyWoB+e36Csj3QDyffKrefEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrO
+ odR3yS2cTe5sctnOIpfdgSzS3hHPpIEbnZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsH
+ inMKnAplbmRzdHJlYW0KZW5kb2JqCjY0IDAgb2JqCjU3MgplbmRvYmoKMzYgMCBvYmoK
+ PDwgL0xlbmd0aCA2NSAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5j
+ dGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBd
+ IC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2
+ NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AbXCiVYBUQAA0O8y++pL
+ s0WWyCCSdQahlMqSLUspwhd06uQ4ozHmzbx3zy1t7KVjlY0d+NquGC0qa1V5LR65EmV4
+ iytR9UssIroUi0uxALlQWP5eCAWt+YUA4aeQNzb3KYD9EHIWZj8EvXMhq5fPzsFm5vzu
+ O59B943PvPHXKM7468PTM95wLj37d8qlQV5NOYAT7sra1ITTPuZSCCbH3M9XzWzyFcYR
+ m9y+HLEwD9lL3Ykha/6ATQCOD9htJj7Q3Wfilsf6jMYeE0NT6jHSC8pdRvpLS106CneH
+ juq+6NAmt+kL8JE2bWiLjgCnIq394Ral8ZkKo3n+RCH8SJ2rhx4paJtk6NhgkzTzgQya
+ Gnggj78nA5D678n9DdJvKOFvAD+7I1C9Jc60+m4JCOuEz1hvnTAW99a3a7jX7NMarreK
+ n0LtqeK7N7gH3QruqeDugzF3xewy5j7QVcasLmEuw50lDKyCOS10KNi2zaGoyzYH7Cey
+ 7W/RdgLyGwqvtaMKZW5kc3RyZWFtCmVuZG9iago2NSAwIG9iagozODQKZW5kb2JqCjM1
+ IDAgb2JqCjw8IC9MZW5ndGggNjYgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQg
+ XSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAg
+ MSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6
+ ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtwQcCgQAA
+ QNH7X0k0VLQ1jBbtNHUFd+C/t20/+mwfzspZlnWhzMvMmaZ5oozTyBlA7+HN6UFd31Ha
+ ruU0TdtQ6qbmVFVdUcqq5BSgV/HiPEH5M6dkecZJ0yylJGnCieMkpjziB+cOut1vnCso
+ ukaUMAo5QRAGFD/wOReQd/E4LshxHY4NsmyLYlomyDANytk4c04g/aRzNJCqqZwjSDkq
+ FFmRQZIsUURJ5BxA+8OeI4B2wu5/X6r+RswKZW5kc3RyZWFtCmVuZG9iago2NiAwIG9i
+ agoxODgKZW5kb2JqCjM0IDAgb2JqCjw8IC9MZW5ndGggNjcgMCBSIC9PcmRlciAxIC9F
+ bmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAv
+ RGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAx
+ IDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+ dHJlYW0KeAGNwgk3VHEYB+AvJhKJRCKRkpKSkhKJRCIZY8asZgxjZuz7vu9bX+v9vZ3r
+ mNO943/vfZ/z8N8E24zzpXCML01exNhwjC8ko3yhex5l06N8LjnCZ8IRPjN5GmHDYT6V
+ DPOp7kmYTYf4RPA4xMdDskE+NnkUZMMAHwn7+Sj50M+mfXwoeODjA6+4hw9U9z1sOMj7
+ wm7eT95zs1UX713Hnkt914XdAXEndlV3nEjdjx1JB3aubjtgsw/bdrf6oP0j24st1c1e
+ pP6NTeEebPZgw3Y3Nuyud0P7S7YL66prXUj9E2vCnVjrxKrtDqzaXemA9od4O1ZuXG5H
+ 6u9YFm7DchuWJFuxZHmxFdpv4i1YNF5ogfpXLEg2Y6EZ85JNmLc814TrXzAn2Yg549lG
+ qH/GrPAnzEg2YMbydAOuf8S0cD2mdafqof4BU8LvMSlZh0nzE3X4/x0mhGsxoTteC/W3
+ GBd+g4RwDRKKlKihuP5rigtXU1w3Vk2mX1FM8iWNCVfRmMloFRm+oKhkJUV1RyvJ9HMa
+ lR15RqIVNGIyUkGGTykiXE6R5OFyMl1Gw4LhMgo/ES+lsGqolAwfU0i4hELJQyVktZiG
+ 7AaLKfhIvIiCqoEiMnxIAeFCCiT7C8lqAfnt+grI90A8n3yq3nxKfZ+8knnkverJI5u5
+ 5LE7mEvae7I5NKjqzqHUd8ktnE3ubHLZziKX3YEs0t4Rz6SBG52ZlPo2OYUzyJlB/ZLp
+ 1G/ZkU7aW+Jp5Ej7B4pzCpwKZW5kc3RyZWFtCmVuZG9iago2NyAwIG9iago1NzIKZW5k
+ b2JqCjMzIDAgb2JqCjw8IC9MZW5ndGggNjggMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAw
+ IDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsg
+ MCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEg
+ XSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGl
+ woVSQlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h
+ 95WY7egrEl+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7
+ j2bPHTrddxje4pa5eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX
+ 6LpA6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6
+ DOMZxvSOZvh9wKj8kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5N
+ n/DebRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3
+ NYnKBK35LQl0NidojqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQ
+ GsnVQSwHqHZaFUConyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUK
+ ZW5kc3RyZWFtCmVuZG9iago2OCAwIG9iago0MTAKZW5kb2JqCjIgMCBvYmoKPDwgL0xh
+ c3QgNjkgMCBSIC9GaXJzdCA3MCAwIFIgPj4KZW5kb2JqCjcwIDAgb2JqCjw8IC9QYXJl
+ bnQgNzEgMCBSIC9Db3VudCAwIC9EZXN0IFsgMyAwIFIgL1hZWiAwIDczMyAwIF0gL1Rp
+ dGxlIChDYW52YXMgMSkKPj4KZW5kb2JqCjcxIDAgb2JqCjw8ID4+CmVuZG9iago2OSAw
+ IG9iago8PCAvUGFyZW50IDcxIDAgUiAvQ291bnQgMCAvRGVzdCBbIDMgMCBSIC9YWVog
+ MCA3MzMgMCBdIC9UaXRsZSAoQ2FudmFzIDEpCj4+CmVuZG9iago3MiAwIG9iago8PCAv
+ TGVuZ3RoIDczIDAgUiAvTGVuZ3RoMSAxMTg3MiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+ PgpzdHJlYW0KeAG9egt4U1W28N7nmZwkbR7Ns02TNGnTR/qkDwKFnpa+oA2UlkKLrbSU
+ MoUBLFjLS5gOoIWiI86MgsiML3QUBw3FwaADl8utIz64F0UvPhD1iq/RiuNUUSEn/9on
+ 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
+ IC9DYXBIZWlnaHQgNzIwIC9EZXNjZW50IC0yMzAgL0ZsYWdzIDMyCi9Gb250QkJveCBb
+ LTEwMTggLTQ4MSAxNDM2IDExNTldIC9Gb250TmFtZSAvQUJDQkVNK0hlbHZldGljYS1C
+ b2xkIC9JdGFsaWNBbmdsZQowIC9TdGVtViAwIC9NYXhXaWR0aCAxNTAwIC9YSGVpZ2h0
+ IDU0OSAvRm9udEZpbGUyIDcyIDAgUiA+PgplbmRvYmoKNzUgMCBvYmoKWyAyNzggMCAw
+ IDAgMCAwIDAgMCAzMzMgMzMzIDAgMCAwIDAgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAg
+ MCAwIDAgMCAwIDAgMAowIDcyMiAwIDcyMiAwIDY2NyA2MTEgMCAwIDAgMCAwIDAgMCAw
+ IDAgMCAwIDcyMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgNTU2IDYxMSA1NTYg
+ NjExIDU1NiAwIDYxMSAwIDI3OCAyNzggNTU2IDAgODg5IDYxMSA2MTEgNjExIDAgMzg5
+ IDU1NiAzMzMKNjExIDU1NiA3NzggNTU2IDU1NiBdCmVuZG9iagoyMyAwIG9iago8PCAv
+ VHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9BQkNCRU0rSGVs
+ dmV0aWNhLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjc0IDAgUiAvV2lkdGhzIDc1IDAgUiAv
+ Rmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEgL0VuY29kaW5nIC9NYWNSb21hbkVuY29k
+ aW5nCj4+CmVuZG9iago3NiAwIG9iagooTWFjIE9TIFggMTAuNi44IFF1YXJ0eiBQREZD
+ b250ZXh0KQplbmRvYmoKNzcgMCBvYmoKKEQ6MjAxMTExMDcxOTEwNDVaMDAnMDAnKQpl
+ bmRvYmoKMSAwIG9iago8PCAvUHJvZHVjZXIgNzYgMCBSIC9DcmVhdGlvbkRhdGUgNzcg
+ MCBSIC9Nb2REYXRlIDc3IDAgUiA+PgplbmRvYmoKeHJlZgowIDc4CjAwMDAwMDAwMDAg
+ NjU1MzUgZiAKMDAwMDA1Mjc0MCAwMDAwMCBuIAowMDAwMDQzNzk1IDAwMDAwIG4gCjAw
+ MDAwMDMwMzggMDAwMDAgbiAKMDAwMDAzOTI2MyAwMDAwMCBuIAowMDAwMDAwMDIyIDAw
+ MDAwIG4gCjAwMDAwMDMwMTggMDAwMDAgbiAKMDAwMDAwMzE0MiAwMDAwMCBuIAowMDAw
+ MDM5MjI3IDAwMDAwIG4gCjAwMDAwMDQ1ODkgMDAwMDAgbiAKMDAwMDAwODA1MCAwMDAw
+ MCBuIAowMDAwMDE1NDYzIDAwMDAwIG4gCjAwMDAwMTYzMDYgMDAwMDAgbiAKMDAwMDAx
+ MTA2MCAwMDAwMCBuIAowMDAwMDE1NDQyIDAwMDAwIG4gCjAwMDAwMDgwNzEgMDAwMDAg
+ biAKMDAwMDAxMDI4MiAwMDAwMCBuIAowMDAwMDEwMzAzIDAwMDAwIG4gCjAwMDAwMTEw
+ NDAgMDAwMDAgbiAKMDAwMDAxNjMyNiAwMDAwMCBuIAowMDAwMDE3MDI4IDAwMDAwIG4g
+ CjAwMDAwMDQ0MzMgMDAwMDAgbiAKMDAwMDAzMTMxOSAwMDAwMCBuIAowMDAwMDUyNDY2
+ IDAwMDAwIG4gCjAwMDAwMDQyNzUgMDAwMDAgbiAKMDAwMDAwMzk2NyAwMDAwMCBuIAow
+ MDAwMDAzODA5IDAwMDAwIG4gCjAwMDAwMDM1MDMgMDAwMDAgbiAKMDAwMDAwMzY1OSAw
+ MDAwMCBuIAowMDAwMDA0MTI1IDAwMDAwIG4gCjAwMDAwMzAzOTcgMDAwMDAgbiAKMDAw
+ MDAzMDQ0NCAwMDAwMCBuIAowMDAwMDM4MzMwIDAwMDAwIG4gCjAwMDAwNDMxNTAgMDAw
+ MDAgbiAKMDAwMDA0MjM0MyAwMDAwMCBuIAowMDAwMDQxOTIwIDAwMDAwIG4gCjAwMDAw
+ NDEzMDEgMDAwMDAgbiAKMDAwMDA0MDQ5NCAwMDAwMCBuIAowMDAwMDM5ODQ5IDAwMDAw
+ IG4gCjAwMDAwMzk0MjYgMDAwMDAgbiAKMDAwMDAzNzQzMyAwMDAwMCBuIAowMDAwMDE3
+ MDQ4IDAwMDAwIG4gCjAwMDAwMjAwMzggMDAwMDAgbiAKMDAwMDAyMDA1OSAwMDAwMCBu
+ IAowMDAwMDIyNjk4IDAwMDAwIG4gCjAwMDAwMjI3MTkgMDAwMDAgbiAKMDAwMDAyNDAw
+ MCAwMDAwMCBuIAowMDAwMDI0MDIxIDAwMDAwIG4gCjAwMDAwMjc2NjIgMDAwMDAgbiAK
+ MDAwMDAyNzY4MyAwMDAwMCBuIAowMDAwMDI5MDc3IDAwMDAwIG4gCjAwMDAwMjkwOTgg
+ MDAwMDAgbiAKMDAwMDAzMDM3NiAwMDAwMCBuIAowMDAwMDMwNDkxIDAwMDAwIG4gCjAw
+ MDAwMzEyOTkgMDAwMDAgbiAKMDAwMDAzMTM1NiAwMDAwMCBuIAowMDAwMDM3NDEyIDAw
+ MDAwIG4gCjAwMDAwMzc0NzAgMDAwMDAgbiAKMDAwMDAzODMxMCAwMDAwMCBuIAowMDAw
+ MDM4MzY3IDAwMDAwIG4gCjAwMDAwMzkyMDcgMDAwMDAgbiAKMDAwMDAzOTM0NiAwMDAw
+ MCBuIAowMDAwMDM5ODI5IDAwMDAwIG4gCjAwMDAwNDA0NzQgMDAwMDAgbiAKMDAwMDA0
+ MTI4MSAwMDAwMCBuIAowMDAwMDQxOTAwIDAwMDAwIG4gCjAwMDAwNDIzMjMgMDAwMDAg
+ biAKMDAwMDA0MzEzMCAwMDAwMCBuIAowMDAwMDQzNzc1IDAwMDAwIG4gCjAwMDAwNDM5
+ NTggMDAwMDAgbiAKMDAwMDA0Mzg0MyAwMDAwMCBuIAowMDAwMDQzOTM2IDAwMDAwIG4g
+ CjAwMDAwNDQwNTEgMDAwMDAgbiAKMDAwMDA1MTk1NCAwMDAwMCBuIAowMDAwMDUxOTc1
+ IDAwMDAwIG4gCjAwMDAwNTIyMDYgMDAwMDAgbiAKMDAwMDA1MjY0NiAwMDAwMCBuIAow
+ MDAwMDUyNjk4IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNzggL1Jvb3QgNjEgMCBS
+ IC9JbmZvIDEgMCBSIC9JRCBbIDw0MDJjNDE5YjU1N2U4MTRkOTA1MTdiOGZhZDAxYWZk
+ Mz4KPDQwMmM0MTliNTU3ZTgxNGQ5MDUxN2I4ZmFkMDFhZmQzPiBdID4+CnN0YXJ0eHJl
+ Zgo1MjgxNQolJUVPRgoxIDAgb2JqCjw8L0F1dGhvciAoUm9iZXJ0IEx5KS9DcmVhdGlv
+ bkRhdGUgKEQ6MjAxMTA5MTkxNzE1MDBaKS9DcmVhdG9yIChPbW5pR3JhZmZsZSBQcm9m
+ ZXNzaW9uYWwgNS4zLjIpL01vZERhdGUgKEQ6MjAxMTExMDcxOTEwMDBaKS9Qcm9kdWNl
+ ciA3NiAwIFIgL1RpdGxlIChyc19jb21wdXRlKT4+CmVuZG9iagp4cmVmCjEgMQowMDAw
+ MDU0NTMzIDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzw0MDJjNDE5YjU1N2U4MTRkOTA1
+ MTdiOGZhZDAxYWZkMz4gPDQwMmM0MTliNTU3ZTgxNGQ5MDUxN2I4ZmFkMDFhZmQzPl0g
+ L0luZm8gMSAwIFIgL1ByZXYgNTI4MTUgL1Jvb3QgNjEgMCBSIC9TaXplIDc4Pj4Kc3Rh
+ cnR4cmVmCjU0NzEwCiUlRU9GCg==
+ </data>
+ <key>QuickLookThumbnail</key>
+ <data>
+ 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
+ AAEAAQAB
+ </data>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>ExpandedCanvases</key>
+ <array>
+ <dict>
+ <key>name</key>
+ <string>Canvas 1</string>
+ </dict>
+ </array>
+ <key>Frame</key>
+ <string>{{67, 91}, {969, 926}}</string>
+ <key>ListView</key>
+ <true/>
+ <key>OutlineWidth</key>
+ <integer>142</integer>
+ <key>RightSidebar</key>
+ <false/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>120</integer>
+ <key>VisibleRegion</key>
+ <string>{{-129, -19}, {834, 772}}</string>
+ <key>Zoom</key>
+ <real>1</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ </array>
+ </dict>
+ <key>saveQuickLookFiles</key>
+ <string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/rs_compute.png b/docs/html/images/rs_compute.png
new file mode 100644
index 0000000..263b2ec
--- /dev/null
+++ b/docs/html/images/rs_compute.png
Binary files differ
diff --git a/docs/html/images/rs_graphics.graffle b/docs/html/images/rs_graphics.graffle
new file mode 100644
index 0000000..5dee4c6
--- /dev/null
+++ b/docs/html/images/rs_graphics.graffle
@@ -0,0 +1,3107 @@
+<?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>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGrafflePro</string>
+ <string>138.28.0.154505</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2011-09-19 10:15:24 -0700</string>
+ <key>Creator</key>
+ <string>Robert Ly</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1.0000 in</string>
+ <key>GraphDocumentVersion</key>
+ <integer>6</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{95.9835, 355}, {107.033, 31}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>155</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>246</integer>
+ <key>Position</key>
+ <real>0.19373114407062531</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 bindRootScript()}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{71, 431.245}, {157, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.628571</string>
+ <key>g</key>
+ <string>0.768599</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.236788</string>
+ <key>g</key>
+ <string>0.532236</string>
+ <key>r</key>
+ <string>0.990271</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.131021</string>
+ <key>g</key>
+ <string>0.363196</string>
+ <key>r</key>
+ <string>0.725948</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript object}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{71, 306.83}, {157, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.628571</string>
+ <key>g</key>
+ <string>0.768599</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.236788</string>
+ <key>g</key>
+ <string>0.532236</string>
+ <key>r</key>
+ <string>0.990271</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.131021</string>
+ <key>g</key>
+ <string>0.363196</string>
+ <key>r</key>
+ <string>0.725948</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 RenderscriptGL context}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Info</key>
+ <integer>8</integer>
+ </dict>
+ <key>ID</key>
+ <integer>246</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>36</real>
+ <key>Points</key>
+ <array>
+ <string>{149.5, 330.83}</string>
+ <string>{71, 443.245}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>202</integer>
+ <key>Info</key>
+ <integer>6</integer>
+ </dict>
+ <key>ID</key>
+ <integer>245</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{149.5, 236.415}</string>
+ <string>{149.5, 266.076}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>235</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Info</key>
+ <integer>8</integer>
+ </dict>
+ <key>ID</key>
+ <integer>242</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>57</real>
+ <key>Points</key>
+ <array>
+ <string>{228, 443.245}</string>
+ <string>{344.75, 303.184}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>247</integer>
+ <key>Info</key>
+ <integer>7</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{54.5, 266.076}, {190, 73.3394}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>202</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 RsSurfaceView or RsTextureView\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{54.5, 186.245}, {190, 50.1697}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>235</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Activity}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{54.5, 401.585}, {190, 68}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>234</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+Renderscript entry point\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{29.75, 139.33}, {239.5, 350.67}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>233</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+\
+\
+Android Framework\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>250</integer>
+ </dict>
+ <key>ID</key>
+ <integer>249</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{439.75, 326.693}</string>
+ <string>{439.75, 351.997}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{344.75, 351.997}, {190, 47.0177}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>250</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.274119</string>
+ <key>g</key>
+ <string>0.950739</string>
+ <key>r</key>
+ <string>0.787494</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.165602</string>
+ <key>g</key>
+ <string>0.586124</string>
+ <key>r</key>
+ <string>0.428309</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript Graphics Engine}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{344.75, 279.675}, {190, 47.0177}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>251</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Graphics Renderscript (.rs)}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{320, 238}, {239.5, 179}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>252</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+\
+Renderscrpt Runtime Layer\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>248</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2011-11-07 10:35:41 -0800</string>
+ <key>Modifier</key>
+ <string>Robert Ly</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>coded</string>
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgWQCgRgDhg==</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>QuickLookPreview</key>
+ <data>
+ JVBERi0xLjMKJcTl8uXrp/Og0MTGCjUgMCBvYmoKPDwgL0xlbmd0aCA2IDAgUiAvRmls
+ dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9m01zHrcNgO/7K/YoH7xZkvt5bNMk
+ 00wPbeRpD0kPqWzHduU4kZSm+fd9QAIg39UrWZ52OhpZBJYEQeKDAEj/3P+l/7kf+ZnX
+ pV9T6m9e9X/rf+w/+/w29Fe3fcg/t1f983GYe/ltOr7uP/vzq5urVz/d/fL9dXfzFlJx
+ DplcnOY+hWlYxrj1cQvDtq+xv3rff/bH96H/w4c8bxxL53nrU9qHNNM37fuwxrB1pW98
+ tG9ch2kck9KtfZWJaQp9nITuuvVhX4Y1xaiE05FwCHs/7UMYpXNMy7CFaBxPx85LqH2n
+ fRzCHHYlPB/7bnPtm7ZlSDEsyvFifcOy5W1Lc7/MsmnwkPZ5mJc1KN31sb5xDfBg7Nau
+ oZCdYg+T87bIBk/jkBCGkt0KWVGDFBOczv37fp4XJC3ta9obpBfZHIQ/7/lDGhZBGQgx
+ bSd2UcZItxTWIU0pACqJxMoLbWld5RmldU0rlL6AXYpjHVyAPfcW9E7f079CZ4S9mOlI
+ S9kzop2wbqu76t94+33WdWhmbtlu1EV0PGyjG0LV8P7mbfcz9iDm8hwFQGVXdmmUcaKt
+ l29Cf/sGzX7ApkL/NaPfFdv6/LIbh2lNY1owK2nsU27EfV/7y8+Rh880ZstkCllDTJtL
+ SNpVQp2AZeujmFPZellbxBBMQlOYXEJTQNmKIE3IYS0S6iZaRULSaiQkYN5wG1yASSUk
+ 9A2jf9EOaQkXQoeWsWcSyquy1ZmEykov2U68Ebp9248dnqjZmKMIfv+iD1HlE/vn6zYs
+ 2zZt/fNl6V8goS/DMLKtL17333YX3zwTpxb7i1fW+PEZEgDxUv/6hxvrcWuNK2vcPOsK
+ lZ900F2vDaf/iyKM/N1bRbw3IjpRd2Fj/6Q9vrcev1mj5env/Yuv+y9eqMalac36OCdc
+ zLR0mHEKLUbEnhIeU4xZe4GZSp8w7BuicxgvARVRm9yjm0ZUSoYKlTJmXNEeIKM54tyk
+ h81rMOJX3hTToQbTMow7zgF2yqg0tVQd0lmFhn5XTIErX8fvdcSsa5FZT1dbubBdM05t
+ f7Iynu4s5idHpNCKxf43WXXYWcw2jGFdVrxHl4/RE+9xTnXjzkEzY2rZgcSzDqTTQ/ng
+ QFDWlNI2q9/g1ACzpxkTeMh/5IV0cd2HZWWcq4hjGhVxnIpbTvExbHjwIv64xUxFfH/B
+ YMDDIjJ1FUlx5vitKpLiUnqoijhsKoLv1x6NijhOxadUHdJZXeDGR3fscYR9hK1F/FNR
+ EV+tqUjdNVUR359GRRz3vj/xW/15v6XCl6P46LowrW0niJqOjqu/+Eqdg3sl9xI/PeNQ
+ wYG90R7maNxbuf8yR+NOyv2KeamXSss/+HROxMn6J5vw4Ay7i+8uhiPXTua7Z8/6s64s
+ icaN6JPrqWFwIO52DOdaKNo97+KGsrEnjoFMpeop0d0udmN62qWEnkYitUoVr5b7mKYa
+ bJpKyKo9Wk1VnGue0TXNs5ld85Jhjj0OsJyhRTN9Pa6ryVZsutr7nqiuOoyuwls+KBx3
+ 4s5kVZPszcGdlazg4M46D1H0JE4zEflOuFncWTrrziy0at1Z9/mlRD9xIw6iQagaovi1
+ QHiCX3vUn/W4vGHfccGmJ51jWj2xXqYX4uInUhCHp0Kl6gkpwxg4Sk1PiMmxyzW0ekK+
+ In2gkg9byV8yXPXEMFVPOu9lMjW6DpeZJaZSqSsvR9g1zb7XEbOup+qJrbjqie1J0Ym6
+ b41P8718kk8zDTjj0yT3medpPefT/l9+6DHfibp9gu/sLr4wV/nDwd0aHtdZ/ZpkDaMo
+ 8mdf3Yb+h9s2GMgBvuyYmZEdghWTtmEuR6v1IVMZSRWufdAUFXHZ5ZA5J/BlWo4fpo0y
+ rQ3n9N5JnZmBceQxiQxREEKPTNkRKP+b+4Nes5av+X13bxli+jYHgZewaHOgq8aizeGI
+ OocPkhO05KXCDqvH9KAVl4W4q1P4GniFcQk7S4+47BKXzXvEpYN2eJTxVwZLcCuDpXMX
+ MbKcLzmxOJFq5ZnIW6gwkLcIF9LGnjiXEEYBOcTzh0KhM1BC59o+1yrfp30na2PzYQ5+
+ IKaYwn6ncyVbnvChPfKGZEvNvPkOSeQJITYhsr/yryS1YsfLarFkU7khr22lGKiCEHeE
+ jejSEtvprCM3Wq0j74sj/+TElj3sgqSFopK68Qo3IlaMijSwrmUlPnCYPRNZqVSnLW9p
+ 0YdpIxuUXNdFTOHGZpKmiVjajYhzLxFxVymUxB/qJmKZqYj4tNWIOCAKmKsi7px9F7Eu
+ z0WscBWxIg6e+JAV3xMgsSWGOHKOvrg6SZAp8yyr5MdhHj3O5FAnQb743Y8vbz68fdl/
+ efP9+1e/frj557P+xbuabXLQo1JwTg1BJDaFBmaRU8pVIyKr0kUsTAbAyEpVSsG45fFs
+ U/4schd6Ml66x0UiuE2qeEouLoQn2fBkPoM4sYUdAzmu52Gj/FFRnIUNOYE6m4zB5WOZ
+ +2FAOxInKpO5qy2p0zmpfuiST7ZIZHiCKFEXgVZc8MSwKgEX6vnRzLGINxIxyEaUQGs+
+ a59G6759fmLeKIyTaLPlhMgmbIOrsMnlS5civWlkYWRWKsxpZJsZf5W9LR4GYQtswp6W
+ bUCNMFAVNj3wRPQoymWQCltBic1M2NYjy8XJKVQmUxna3O23rgWw7AIq08wiSuJLcmHb
+ krNsFSBWV2Hb14PBHtLBexI9JINsw0JRYcFO1+5Qx+r/mzpWd/HkFO5MmezO077frAhm
+ aaXlfx8eiIzu2shIzvi8fTM1IcoSG6WrInJDZB0pHgA5lE6qVfM0YwfUkIvOzeiOkBDP
+ LC6E0m/RIdcy7EaVUglORM6NlilkWqZg1TIolv5FIYycQmUyUx6d++RbC0jpRNTKuVY1
+ 80W5avuqTzaKVaqi2Xe2Tk5/3IqwOWI84lY4+cOyc8dgtzuHPK6WmosqzlTjl2UvVxqX
+ b5aHvEue68nepXsgi8tLorCE9XOFYbJ3RONfDKceJGz4JQq8KvuwEfMICT9OJJfFR5rs
+ I9m4nj4qe7nnoQf08nFSILH9fJwoWGWf74WEYpaak1MoT2YijTp3+82GFa5U9s61yt4X
+ ZbLvbNWFK4dc9o55ipdpRXtwMyL0NW1cAnksoMVyogGrP7vD8Cr2v8z4rfhzR7G65j1u
+ 3eJzd4zSJeyIKuHOcXqEcBvG+U8onuOBidM/kzAJJzfP0iHt5LyU7uivAUMiKajWbZBK
+ 2MBGwobKcnNyApG0n5whBmrPxinYF5Wwc60SnnRRNWLwVWe9c8gl7Bi3bmHTrHsl8wDe
+ LRz/aGhPEBYlDy+xw3rWuo3Yk637oRqNLCnHWuM6Ly57Cb4yosqeQEhxRZYSp5OFEFhr
+ LEhhBRIYmMrazdNg6nxrGz/IpbJYa7Fug0z25WMbP1iPIlEy7kxOoRIdqkilaud+QIES
+ P9gX7SiZiK4z0/FFeQDhqy4+R/eghhD+/SnWPTWiPVg3aTVR5jh9JIjwquylXVv5Kf/a
+ 68zuBF6Z7f+1Nfnmhk5zkVO2uDA7k40EDoC0x3NRzsXbV7/2H26ILiwF+dgUPkPXXgiS
+ ghEWkq0/TwcXd/HN7YsnUD9T1YrkoFua9/s0v21ipn+b/7yr26oXh15g/x/sIRcwAZWT
+ BR4CRdnCusCPFqPEN0ReC0z4UTlTJSRD54mAFSGHKuftKWKnBDrKNZh1iuJ9AckBiXFI
+ kQE7qQ7ZOZ2/Jy4SA/ma0FQEbnzlFUfkDUTcKQlzT166SN5DHqmgOIMTxEdAcnxWQWHE
+ CDAlV2hSAmowUnh6rLwlfiJEPFPi7p9fcWspEVfOawA3DSFNJL6OiCi2vIepw6gfLbmo
+ RAUjyQsWbv15IiNX5+hokCcADYY69RoSHNZhnEdTlG0x2uIjCyZPD50yqvLI2pU2lHBf
+ qzBr81dMZVLXdpWvsuwcaAzPq5aav6hPfN8rDEuS114bLA5OzoCKQH8KIu9493BBMXBl
+ wb0Hu7JwSyCqJLNQEp0pakRem5Bmrj3ubZgmymmG6XiXMyxR4gcbRwFkplq2s3lxkY9Y
+ boNBPzkawfg43jBxtYCiVeqc39siobVzUDHOZxlHLMnlwBA5SZivUKfw4xjj4N76Ht91
+ Mc+8y6jZOHBpIndkZdtFy0DKJawieBt0QMAHnpbvXASJvaYVWTMGzuQxi4Ewz3HUwNc9
+ BRnskUtg70P1QnpgwRE7VaiwwKZl2A2e8dJ7QutW7iB6NoRHYiM3AmjmCOdCnwh1lj5I
+ KXIHlDeie8wc2fxIEWVhDBrHacteQAeprsSy2MEyQRAMpor3wRmtzCEPrXheVbhZVpaU
+ V7vhcsrbnmVk0CZMIOpS0eZVFuf5ui+kV5AZw847tX5FAiRLhWeCz00wa+AncxSYTYbB
+ BGnqxA5HKRIyG29uqCILTl6FxdSx25i9eN1FErb8GOywtKIXElSvMME9Af3k4ivKUwQD
+ rztGlWqn47I35zXcFskDC4BLlcH4UPH0+LIM4oQziJKEFBpK+JrcIU9lAMuHD4Ou+5Uq
+ Z668OQ7Nn3DXmVhu6zyMlC8KPdQuveRcE1ahzxhdRVfnsoW3eyLRcwuX2BnRsFF4Uslv
+ sWlxFlYn+2jgzIPGsmP5scb2iYHziq+hMoHHX3hyJs++2N8xhnwrdPSrWHgH9+KX1bxl
+ 2x0UIamEHSdiSyNKxTPHLEPuUstgSm7yjeeSmVaRcKJgPaG4DSXzJXkqA7KE3c1c1113
+ HDJxYrmt82TZ+aztl6YtBiSnprKaJeyrcAn7Its9UQnbN2KUxx5dFG/I8zSX4SFCLvVH
+ PMN0iJ0I5B67nyz3hh7GebysofSTimx2L8nDr5o6Nzpxyvz9MDRKHJCwxENcC+tWk/Og
+ 3Ypy5Zqyu7hz1muU2rKhzkbCj1xaK87GwaqKOULJXYoqchoHnKAAcceTal1OwA0PKWBR
+ RXk2M8q5bTodOU/kO3pL+qYAjgrpO9T4GsehSUZLmjaLqFjnUPulbWdFdEZVEXUNjSKW
+ XSjGqTviiug7JEW47GqENSIK3h+bqzm+pCgPp/0lRZG0xNZlv7Kr2c+6GivnWWwmj7bL
+ Q4pPdTXZUXJtYRU4OUwUJEF2sRgui3TimorqG7EVAp14a2MxvYDEWBks8pXXhvsYm7OE
+ 9Dd/z2eJAVm+HJM21DfdcYjLaOWmzpIl53O2X9p26WWMlqNE11Cdmi9Rjg7bETtKDH6K
+ ozEJ3rfV51y7Ef1wDJ+x1sccTXnc5dZ6dDT906v53YU5gX9ohf6d/nXq7i7u1eox5Z2M
+ V8JGniJ3cSTZ5p1OBpG3nK1EdxmMHPz6TU+rBsNVEL2twzyKpjlIaF0u5J0cBas6lVSv
+ +soI4HVPIsiFP7EZj1k6Ekdl0ihVDJedDPYOgA8DVw0lgkVm8XGrLqnOy35UngBEb1qE
+ VuchMZUNJM4jjeDMJvjlDDWD/lggkiSMFsWSN+fjk33D43fzD5Xn6wKIovH9Lm7AVtyA
+ Jj7eEYmKy828CxT314obv9GKeyNdypfzLm4Ccpuq479NnIgbsBU3YJWKUWowkmkbCK3k
+ AO/kDkDtyHsJOZ5sHKAuycTNIudGugCn4gbxFD/hsjxEI5IRRp5gn3MSZrRWcbcHR+Xh
+ evO03azc/t5dulm79zAidmd3992FvcjsyuPy/wBuuobCCmVuZHN0cmVhbQplbmRvYmoK
+ NiAwIG9iago0MjM5CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQg
+ NCAwIFIgL1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAwIFIgL01lZGlhQm94IFsw
+ IDAgNTc2IDczM10KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9U
+ ZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0NzMiAy
+ NiAwIFIKL0NzMSA4IDAgUiA+PiAvRXh0R1N0YXRlIDw8IC9HczIgMzcgMCBSIC9HczEg
+ MzggMCBSID4+IC9Gb250IDw8IC9GMS4wIDI3IDAgUgo+PiAvWE9iamVjdCA8PCAvSW0z
+ IDEzIDAgUiAvSW0yIDExIDAgUiAvSW02IDE5IDAgUiAvSW03IDIxIDAgUiAvSW0xIDkg
+ MCBSCi9JbTggMjMgMCBSIC9JbTUgMTcgMCBSIC9JbTQgMTUgMCBSID4+IC9TaGFkaW5n
+ IDw8IC9TaDMgMjkgMCBSIC9TaDIgMjggMCBSCi9TaDEgMjUgMCBSIC9TaDUgMzEgMCBS
+ IC9TaDkgMzUgMCBSIC9TaDEwIDM2IDAgUiAvU2g4IDM0IDAgUiAvU2g3IDMzIDAgUiAv
+ U2g0CjMwIDAgUiAvU2g2IDMyIDAgUiA+PiA+PgplbmRvYmoKMjkgMCBvYmoKPDwgL0Nv
+ bG9yU3BhY2UgMzkgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41IC0yNC4w
+ MDg4NCA5NS41IDI0LjAwODg3Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxz
+ ZSBmYWxzZSBdIC9GdW5jdGlvbiA0MCAwIFIgPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9D
+ b2xvclNwYWNlIDM5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTUuNSAtMjQu
+ MDA4ODQgOTUuNSAyNC4wMDg4NwpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFs
+ c2UgZmFsc2UgXSAvRnVuY3Rpb24gNDEgMCBSID4+CmVuZG9iagoyNSAwIG9iago8PCAv
+ Q29sb3JTcGFjZSAzOSAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDEyMC4yNSAt
+ ODkuOTk5OTggMTIwLjI1IDkwLjAwMDA0Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQg
+ WyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiA0MiAwIFIgPj4KZW5kb2JqCjMxIDAgb2Jq
+ Cjw8IC9Db2xvclNwYWNlIDM5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgOTUu
+ NSAtMzQuNSA5NS40OTk5OCAzNC41MDAwNApdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5k
+ IFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDMgMCBSID4+CmVuZG9iagozNSAwIG9i
+ ago8PCAvQ29sb3JTcGFjZSAzOSAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDc5
+ IC0xMi41IDc5IDEyLjUwMDAzIF0gL0RvbWFpbgpbIDAgMSBdIC9FeHRlbmQgWyBmYWxz
+ ZSBmYWxzZSBdIC9GdW5jdGlvbiA0NCAwIFIgPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9D
+ b2xvclNwYWNlIDM5IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgNTQuMDE2NSAt
+ MTYgNTQuMDE2NDkgMTYuMDAwMDIKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZh
+ bHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDQ1IDAgUiA+PgplbmRvYmoKMzQgMCBvYmoKPDwg
+ L0NvbG9yU3BhY2UgMzkgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA3OSAtMTIu
+ NSA3OSAxMi41MDAwMyBdIC9Eb21haW4KWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFs
+ c2UgXSAvRnVuY3Rpb24gNDYgMCBSID4+CmVuZG9iagozMyAwIG9iago8PCAvQ29sb3JT
+ cGFjZSAzOSAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDk1LjUgLTM3LjE2OTcg
+ OTUuNDk5OTggMzcuMTY5NzQKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNl
+ IGZhbHNlIF0gL0Z1bmN0aW9uIDQ3IDAgUiA+PgplbmRvYmoKMzAgMCBvYmoKPDwgL0Nv
+ bG9yU3BhY2UgMzkgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyAxMjAuMjUgLTE3
+ NS44MzUgMTIwLjI0OTkgMTc1LjgzNTEKXSAvRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBb
+ IGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDQ4IDAgUiA+PgplbmRvYmoKMzIgMCBvYmoK
+ PDwgL0NvbG9yU3BhY2UgMzkgMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41
+ IC0yNS41ODQ4NSA5NS40OTk5OCAyNS41ODQ4OQpdIC9Eb21haW4gWyAwIDEgXSAvRXh0
+ ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gNDkgMCBSID4+CmVuZG9iagoxMyAw
+ IG9iago8PCAvTGVuZ3RoIDE0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1h
+ Z2UgL1dpZHRoIDUwMiAvSGVpZ2h0IDg4MiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JT
+ cGFjZSA1MCAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgNTEgMCBSIC9CaXRz
+ UGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dAx
+ AQAAAMKg9U9tCy+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgIHfwABF0AABCmVu
+ ZHN0cmVhbQplbmRvYmoKMTQgMCBvYmoKNTgxNgplbmRvYmoKMTEgMCBvYmoKPDwgL0xl
+ bmd0aCAxMiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA0
+ MDIgL0hlaWdodCAxMTYgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgNTAgMCBS
+ IC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDUzIDAgUiAvQml0c1BlckNvbXBvbmVu
+ dAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQdv
+ iEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwb+
+ gQEilgABCmVuZHN0cmVhbQplbmRvYmoKMTIgMCBvYmoKNjM0CmVuZG9iagoxOSAwIG9i
+ ago8PCAvTGVuZ3RoIDIwIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2Ug
+ L1dpZHRoIDQwMiAvSGVpZ2h0IDE3MCAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFj
+ ZSA1MCAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgNTUgMCBSIC9CaXRzUGVy
+ Q29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dABDQAA
+ AMKg909tDjeIQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDgY2AhCQABCmVuZHN0cmVh
+ bQplbmRvYmoKMjAgMCBvYmoKOTE3CmVuZG9iagoyMSAwIG9iago8PCAvTGVuZ3RoIDIy
+ IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDMzNiAvSGVp
+ Z2h0IDcwIC9JbnRlcnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDUwIDAgUiAvSW50ZW50
+ IC9QZXJjZXB0dWFsIC9TTWFzayA1NyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmls
+ dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0DEBAAAAwqD1T20MH4hAYcCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw8BwYE68A
+ AQplbmRzdHJlYW0KZW5kb2JqCjIyIDAgb2JqCjMzMQplbmRvYmoKOSAwIG9iago8PCAv
+ TGVuZ3RoIDEwIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRo
+ IDUwMiAvSGVpZ2h0IDQ5MCAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFjZSA1MCAw
+ IFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgNTkgMCBSIC9CaXRzUGVyQ29tcG9u
+ ZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dAxAQAAAMKg9U9t
+ B2+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgIF/YEM5AAEKZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iagozMjQxCmVuZG9i
+ agoyMyAwIG9iago8PCAvTGVuZ3RoIDI0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlw
+ ZSAvSW1hZ2UgL1dpZHRoIDIzNiAvSGVpZ2h0IDg0IC9JbnRlcnBvbGF0ZQp0cnVlIC9D
+ b2xvclNwYWNlIDUwIDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFzayA2MSAwIFIg
+ L0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+ eAHt0DEBAAAAwqD1T20MH4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMG/gMD6FAAAQplbmRzdHJlYW0KZW5kb2JqCjI0IDAg
+ b2JqCjI4MwplbmRvYmoKMTcgMCBvYmoKPDwgL0xlbmd0aCAxOCAwIFIgL1R5cGUgL1hP
+ YmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA0MDIgL0hlaWdodCAxMjIgL0ludGVy
+ cG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgNTAgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwg
+ L1NNYXNrIDYzIDAgUiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVj
+ b2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVPbQlPiEBhwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBg4DMwPtoAAQplbmRzdHJlYW0KZW5kb2JqCjE4IDAgb2JqCjY2NQplbmRv
+ YmoKMTUgMCBvYmoKPDwgL0xlbmd0aCAxNiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5
+ cGUgL0ltYWdlIC9XaWR0aCA0MDIgL0hlaWdodCAyMzggL0ludGVycG9sYXRlCnRydWUg
+ L0NvbG9yU3BhY2UgNTAgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDY1IDAg
+ UiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVh
+ bQp4Ae3QMQEAAADCoPVPbQwfiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGPgPDGFw
+ AAEKZW5kc3RyZWFtCmVuZG9iagoxNiAwIG9iagoxMjc1CmVuZG9iago1MyAwIG9iago8
+ PCAvTGVuZ3RoIDU0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dp
+ ZHRoIDQwMiAvSGVpZ2h0IDExNiAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJw
+ b2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+ ID4+CnN0cmVhbQp4Ae2dW1PaWhiGyUpCQiAcKycL21Y51EOcwSJGBTcWilAREQL0//+R
+ HWrbASrfHeubPX2/Gy7eCS/zPKy14GoFAhgQAAEQAAEQAAEQAAE5BBQhVIxUAkIoyja5
+ ilD1oGGGMDIJmIauqW87UVTdDNuxRBIjkUAiHo1YhibecCLUYDiWyuTfF4oYeQQK+7l0
+ 0g7pfy4TRTUiqfxB6fjUcc4xsgg4ZyfVw0Imbumbq0RRg5F3hbJTd2+bLYw8As2bRu3k
+ MJ/wlayf70IPpwrV2k2723voY+QRePjaaTWco1zM3Ni3VDOWK9ea3W9Po+cxRh6B59Gw
+ f++efdiLrC8SRQunDpyb7uN46nkzjDwCnjcZDdqX1by/SFa3LRG0M6V6ezD25vPFYvEd
+ I4eAz3o+m456t84/KUtb/QUsjFj+2O0+TZc+YESOjh8tSyUvg38vDv1ta9WIaiben972
+ Rh5WiEQbv5RMHr9cljL2upFQouA0H549LBDZRr4v5pNhp1HJ2sG1NRJKFp1Wf+wbkf6J
+ /vrC+fSpe1XJRf8wcg4jPF+OpRG3usXIjOcz/d2tv42s/mtX/V1ruUZghOHLASMM0MlK
+ GCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCd
+ rIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM
+ 0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQw
+ wgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9D
+ CCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHx
+ MIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQR
+ Eg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlKGCHxMIQwwgCdrIQREg9DCCMM0MlK
+ GCHxMIQwwgCdrIQREg9DCCMM0MnK30Y2bzp+vVeXfBbhLghsNfJ69/QuKvGeBIHFwjfS
+ uapkN++eThTOXu9nJx5GtAMCvpHl/ezlzPr97MKM75/cfB1N57igfQfUt7/lwp/Zy+N9
+ vZSO6KvniDCiuWqjM5zMoGQ7vh0kvpC5N+7f1T6+C2urRhQ9kj6q3fWfp7M5RiqBmTcZ
+ dq9PC8mQGlgZRbOShZOr+8HoZTLFyCQwGQ97rYtSNmqIFSGBgDDszOG52+59Gz5hJBIY
+ Pg66rfpxMWWtHSOBgKKF4vkj57LZ/tLFSCTQub+7vjg+SNuGunqM+MtF6FYi9+HT+efL
+ K9e9xsgh4LqNeu2sXExHzbVzfbl/Kapuxfb2D47KlU8YaQSqldLHYi5lm9r6KfJTiRmJ
+ p9KZbA4jj0A2s5eMhg1NbOxZP5QILWhaETuKkUnADluGvnmGLH0sRxGqpgeDQQMjiYAP
+ W9c19a0F8qrEl6IoAiORgA/8jf3qlw68ggAIgAAIgAAI/N8J/Ac/+KIKCmVuZHN0cmVh
+ bQplbmRvYmoKNTQgMCBvYmoKMTIwNAplbmRvYmoKNjMgMCBvYmoKPDwgL0xlbmd0aCA2
+ NCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA0MDIgL0hl
+ aWdodCAxMjIgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0ludGVycG9sYXRlIHRydWUg
+ L0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+ eAHtl2tT2moUhUlCLtwFVISCekopViGdQ+sdGKkgl4MClQD9/3+koTNtwcv2i33XnOna
+ n2DWkJV5HvZLCAQ4JEACJEACJEACJEACaghoum5wlBLQdU17Tq6mG6ZlOyGOSgKObQaN
+ p51ohulEYolkiqOQQHIjHg3bQf0JJ7phRRLpTC5f2OWoI1B4k91OxULm4zXRDDuazu2X
+ Diuu+5GjioBbPTooFjIbYfPhlmiGFd0svHePz+uNJkcdgcblae2omEv6StZ/33Uzki4c
+ 1C5bnW6vz1FHoHfTbp6677IJ58G5ZTiJ7Ptao/Pf3Wg84agjMB7d9r+cV//Ziq4viRaM
+ pPfdy85wMvW8GUcdAc+7Hw1aJwc5f0lWjy3dimVKx63BxJvPF4vFN44aAj7r+Ww66tbd
+ vXQ4uPoErNuJ3OF552669EEjanT8aFkq+Tq4+lT0j61VI4aTzFfq3ZHHDVFo46eS++H1
+ SSkTWzcSShbcRm/scUFUG/m2mN/ftk/LOzFrbUdCqV232Z/4RpTf0V9fOJ/edc7K2fgj
+ Ix9pBPPlWBo5P3jGyAxzT3936y8jq//aDf/UWu4IjQC+HDQCgC5W0oiIBxDSCAC6WEkj
+ Ih5ASCMA6GIljYh4ACGNAKCLlTQi4gGENAKALlbSiIgHENIIALpYSSMiHkBIIwDoYiWN
+ iHgAIY0AoIuVNCLiAYQ0AoAuVtKIiAcQ0ggAulhJIyIeQEgjAOhiJY2IeAAhjQCgi5U0
+ IuIBhDQCgC5W0oiIBxDSCAC6WEkjIh5ASCMA6GIljYh4ACGNAKCLlTQi4gGENAKALlbS
+ iIgHENIIALpYSSMiHkBIIwDoYiWNiHgAIY0AoIuVNCLiAYQ0AoAuVtKIiAcQ0ggAulhJ
+ IyIeQEgjAOhiJY2IeAAhjQCgi5U0IuIBhDQCgC5W0oiIBxDSCAC6WEkjIh5ASCMA6GIl
+ jYh4ACGNAKCLlTQi4gGENAKALlbSiIgHENIIALpYSSMiHkBIIwDoYiWNiHgAIY0AoIuV
+ NCLiAYQ0AoAuVtKIiAcQ0ggAulhJIyIeQEgjAOhiJY2IeAAhjQCgi5U0IuIBhDQCgC5W
+ 0oiIBxDSCAC6WEkjIh5ASCMA6GIljYh4ACGNAKCLlaIRbyF+luGfIPDLiBb4PUYotes2
+ +xMa+RPIX7jm0shZORu31o0kC26jN/YWC27JCwBfO17M72/bp+Wd2LoRJ5mv1Lsjb04l
+ r038hestfCPD65NSJmau7ohuJ3Ifzju3Uxp5AeBrx76Q2dfB1afiVmTdiBXLlD63BhNv
+ TievDV24nn8izWfTu5u6u5cKB1d3RAuG03vuRXs4mXr+zDhqCPisp/ejfuv4IJdwjN9P
+ Wv4rw05kS7V6e3A7Go8nHEUExuPR3bDXOqvub0ZMfc2IboZThXLt4qp90+31OYoI9Hrd
+ m+vmiVvc8Vdk9dAKBDTDim7mS9XPZ5eNRpOjikCjfnH67+Hb7EbowYosldjRVHbv3Yej
+ StXlqCJQrRyW3+a3E2FTX18R/wTztyQcT29n3+QLHHUE8rmdrWTM35BHQpZKTDsci28k
+ /UlxFBBYkk4m4tGQFXxKiK9EN4KW7TghjjoCjm2Zz/j48eilabpucBQS0HVde+LAWnsQ
+ 5hsSIAESIAESIIH/L4HvkRHshAplbmRzdHJlYW0KZW5kb2JqCjY0IDAgb2JqCjEyNDMK
+ ZW5kb2JqCjYxIDAgb2JqCjw8IC9MZW5ndGggNjIgMCBSIC9UeXBlIC9YT2JqZWN0IC9T
+ dWJ0eXBlIC9JbWFnZSAvV2lkdGggMjM2IC9IZWlnaHQgODQgL0NvbG9yU3BhY2UKL0Rl
+ dmljZUdyYXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQZXJDb21wb25lbnQgOCAvRmls
+ dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHtnGtz6VAUhuUekYhI0Wg5Tl2qWjHD
+ cavSoVKl4tII9f//yEnq9LBbvnfvWe8HY5sxs961nsiYeVcCARB0ADoAHYAO/JwOUDTN
+ kCOaok61lqIZjhfEICkSBZ5ljtulGE4MKaoWJURaJCxLAksfmS3N8CFVTyQvU2kylLo0
+ 4lElyDHfzFKMIOvJTL50Z5oVEmSWb4u5dEKT+K9mKYaXz1IFs95+6PbIULfTqt1lk5rE
+ 0egvFM2F9FSx2ulbo5cxGXp5Hj62KjlDDbIoxYyoGoVq13qdzRdLMrSY2+NB27yKyTwy
+ WIoN6RmzY02XK9ddkyHXdRaTQePmIiIyhxDTvJLI1/uTpbvZvL+/b/GX52KzWc1H3UpG
+ lxCIaUFNltrWbOU7JcLrduuZXb+99v/k4jJ3eMEyonZ59zCau4RM9YNLz6xjD5uFhMIj
+ XoNayuy+LFxShrozu1nNrHbRCH/xGk2bvfHS84r/pbp38OH15ojXCple7095Xe97QsI7
+ f66+V+HwBssEo2l/ruR5fb6/SarglQRy9x48hmGucL3ugcDwHTAM9xwMsUVKBoaBYQQI
+ DA/AMDCMIbZIycAwMIwAgeEBGAaGMcQWKRkYBoYRIDA8AMPAMIbYIiUDw8AwAgSGB2AY
+ GMYQW6RkYBgYRoDA8AAMA8MYYouUDAwDwwgQGB48hj9ya0gw/DO35hIVvdz+94pmaj9z
+ phhO71TJXn7Yz9R+z15qqfIuP3zqm/h97nu1h63rczQ/TIuRi9vO89zPwONn6mjFfpZ/
+ 40yfGvmEgmTgaSFsFJtD21kTY9a36i4nj9VsLIR4pTg5nq0+juer9YYYrV3HtjrldBTd
+ 46BYKZq6bQ4m8zdnRYgcZ2mPerWCF5VG9nMC/oJO1mz3R69Te0aG7OnE6tVLaR1FOBCg
+ 2GAkmSs3HvpPQ4sMDQeP97VSJq4IXxclaU7SjN9Fs9ZotolQq1mvlgvpeFhEtq78bTNv
+ q1lSYxe/svnrIhG6LuSv0oauiOzhYsNusY6iOVFW9Vji3CBC54n4WTQcOr7ETdEsL0qy
+ EiZEihwKCkc2uD9Hy7AcT4w47tRjCP7ZpSjvGRNEyHNy+Pdm5w9eoQPQAejAj+vAX1W0
+ pJsKZW5kc3RyZWFtCmVuZG9iago2MiAwIG9iago4NDIKZW5kb2JqCjY1IDAgb2JqCjw8
+ IC9MZW5ndGggNjYgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lk
+ dGggNDAyIC9IZWlnaHQgMjM4IC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBv
+ bGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUg
+ Pj4Kc3RyZWFtCngB7ddrU5J7FIZxeTgjB9EUtU0nQx0PNOlWMg9tDfKQiAoIff8vsqGm
+ Aqu7/aKee/Z0rTe9WFOr+V3+oSYmGAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAA
+ AQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAAB
+ BBBAAAEEEPj/CkSCIMqEKhAEkciPfmAiQTSeSKbSTJgCqWQ8Fv1+k0g0nprMFYrTTIgC
+ xal8NpOMBd9pEkQTk4WZ0uJf5UdMeALlhwtz07l0/NtnEokmszOLTyprG9XqCyYsgerm
+ +upSuTSVid9/JZFoIvugvFzd2Ts4PGLCEzjcr22tLy0WB0nGv9+D+ORMeXVr/7hxenbO
+ hCdw9q5+VKs+Xyik7n1uRVOFheWtw8b7q9b1DROewHWreX6yt/l0Njv+SCKxyZkn1f3G
+ 5U2n271jwhPodtuti+Pd1cXBIxn92AoSuVJl5/jiptvr9fv9D0w4AgPr3l2ndXpQfTyT
+ iY3+CzhIFhbX9hpXnWEPioST4+OVYZLbi3+2lwYfW6NFoqniXxsHp60uLyTEGp+TtC/f
+ 7lZKufEi6WK5enh23eWBhF3kQ7/XbtZrK/O5xNgbSU8/qh6d3wyKhP43+uMP9jpXjVcr
+ C/lvirygiOeHY1hkb/UHRe48f6c/++qXIqP/a48OPrWGb4Qihh8OihjQ5UmKSB7DkiIG
+ dHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2e
+ pIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJyki
+ eQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7D
+ kiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSI
+ AV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCX
+ JykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmK
+ SB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLH
+ sKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwp
+ YkCXJykieQxLihjQ5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ
+ 5UmKSB7DkiIGdHmSIpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHmS
+ IpLHsKSIAV2epIjkMSwpYkCXJykieQxLihjQ5UmKSB7DkiIGdHnyS5HIxNeJpqcfvTg6
+ v+n25e9l+TsEflikSpHf4f2zP7Pf73Wa9Vcr8/nE+BspljcPz667fR7Jzwh/8X5QpN2s
+ 15ZLubEiQWrq4fr+u1anR5JfLK7/uP5g7m4vT3Yqc9n46BsJkvmF1Vq92b4jiSb8xdtB
+ kF735vzNy2cPJmOjRSLx7NzS1pvzVueux4QqcNe9bTZeb5SL6ejXf2lNTERimenyeu3k
+ onXb7jAhCrTbN813h9uV+XwyGC0yESRypaXq3vHp+8vmFROaQLN5ed44+nutPJMZ+xoZ
+ PpL01OLzzd2D47f1BhOaQL1+8ub19trj2VwyOvo1MnguQTxTXHi6Wt3ere0xoQm8qu28
+ 3KiUZ/Opse/14edXJBrPFGYfPl6qrKwyoQmsLFeeleenc6nY+LfIxyRBPJUtzMyW5heY
+ 0ATmS3MPpvOZZCy495n1KUkskcpkc3kmRIFcdjKdjN//Dhn2GE4kiMbiCSZUgXh88D6+
+ 80A+JRlEGUzAhCcwBP+Mz68IIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
+ AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
+ CPwXgX8B0P1liwplbmRzdHJlYW0KZW5kb2JqCjY2IDAgb2JqCjE1ODEKZW5kb2JqCjU1
+ IDAgb2JqCjw8IC9MZW5ndGggNTYgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9J
+ bWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMTcwIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5
+ IC9JbnRlcnBvbGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxh
+ dGVEZWNvZGUgPj4Kc3RyZWFtCngB7ZfZUhpbAEXpbuYGkcEJxVm0UNFgnKKY4IQ4gChT
+ /v9HbmNdE1DZb5z9kH1erMo2LGstT4M+n44MyIAMyIAMyIAMyIAZA5ZtOzpGDdi2ZY2K
+ a9lOIBgKR3RMGgiHAn7n6yaWEwi78UQypWPQQHJyIhYN+e0vmthO0E2kZ7ILuUUdcwZy
+ 83PTqXgk8PmaWE4ols4ubxR2isU9HVMGirvbW2u5mclo4OMtsZxgLJPLFw9Pz8sXOuYM
+ lM+OS9tr2aSXZPj93Q646dxW6axyU72r6ZgzcHd7fXFcXJ9LhD88t5xwYi5fKt881BvP
+ TR1zBp4bT7XL092VqdjwJbH8bnq5eHbz2Gy12x0dcwba7dfGfeVoK+tdksHHlh2Mz2wc
+ Vu6b7W631+v91jFjwHPd7bQa1fPiUjrqH/wEbIcS2cLpTb3V76EiZnK8UfpJXu5/Hax5
+ j63BIk44ubBzXm20dUMM1nhP8vp4dbQxEx8uEknmiuW757YuiOkiv3vd16fr483ZeHDo
+ jkRSi8WLWtMrYvwn+ueB3Vb95mRzbuJTkT0V4fxy9Iucbo0o0uH8TP829U+Rwb/aHe+p
+ 1b8jKkL45VARgnSIVBGohzCqCEE6RKoI1EMYVYQgHSJVBOohjCpCkA6RKgL1EEYVIUiH
+ SBWBegijihCkQ6SKQD2EUUUI0iFSRaAewqgiBOkQqSJQD2FUEYJ0iFQRqIcwqghBOkSq
+ CNRDGFWEIB0iVQTqIYwqQpAOkSoC9RBGFSFIh0gVgXoIo4oQpEOkikA9hFFFCNIhUkWg
+ HsKoIgTpEKkiUA9hVBGCdIhUEaiHMKoIQTpEqgjUQxhVhCAdIlUE6iGMKkKQDpEqAvUQ
+ RhUhSIdIFYF6CKOKEKRDpIpAPYRRRQjSIVJFoB7CqCIE6RCpIlAPYVQRgnSIVBGohzCq
+ CEE6RKoI1EMYVYQgHSJVBOohjCpCkA6RKgL1EEYVIUiHSBWBegijihCkQ6SKQD2EUUUI
+ 0iFSRaAewqgiBOkQqSJQD2FUEYJ0iFQRqIcwqghBOkSqCNRDGFWEIB0iVQTqIYwqQpAO
+ kSoC9RBGFSFIh0gVgXoIo4oQpEOkikA9hFFFCNIhUkWgHsKoIgTpEKkiUA9hVBGCdIhU
+ EaiHMKoIQTpEqgjUQxhVhCAdIlUE6iGMKkKQDpEqAvUQRhUhSIdIFYF6CKOKEKRDpIpA
+ PYRRRQjSIVJFoB7CqCIE6RCpIlAPYVQRgnSIVBGohzCqCEE6RKoI1EMYVYQgHSJVBOoh
+ jCpCkA6RKgL1EEYVIUiHSBWBegijihCkQ6SKQD2EUUUI0iFSRaAewqgiBOkQqSJQD2FU
+ EYJ0iFQRqIcwqghBOkSqCNRDGFWEIB0iVQTqIYwqQpAOkSoC9RBGFSFIh0gVgXoIo4oQ
+ pEOkikA9hFFFCNIhEhZpw/+qcSwG/hSxfH+PE0kt7l3Umu3eWJh6UWRgVJFcsVx7VhGk
+ bjxbr9t6uj7ZnI0Hh+5IOLmwe171iuiSjMf7qFft9Xrd16ero/zMcBE7lJgv/Litt7re
+ dyjKKH1j+HdPd+flofJ9fToWGLwjdnBiNn90+fjS6ScZA1gv+bUB74Z028935f3ldNQ/
+ WMQKuJnV/fPb+mu7o2PUQLvVfLg6LixMhp2/n7R8PsuJTM5vHf6sPjWaLzomDTTrD9dn
+ +2vT8aA9WMRnB2OZpe3D8nX1/kHHoIH72u3lj2/5+WRk6KHVvyShienlQumk/LNSudQx
+ ZKBS+XVxdlTML6TdD1fE57P94Ymp3Hqh+K10cPBdx4yBg4PS3s7mSjYVCzqD7+v955fl
+ JYmnpucXl1dX13RMGVhdWcrNZRLu5yBvSYLReCKVzkzpmDOQSScn3HDg0w15e5f3rkkw
+ HIm6bkzHkAHXdaORUMCxPz6y3j92Wbbj+P0BHWMG/H6/l2NUj/+7WDomDbzfBn2VARmQ
+ ARmQARmQARkwYOA/LaDxbQplbmRzdHJlYW0KZW5kb2JqCjU2IDAgb2JqCjE0NzYKZW5k
+ b2JqCjU3IDAgb2JqCjw8IC9MZW5ndGggNTggMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0
+ eXBlIC9JbWFnZSAvV2lkdGggMzM2IC9IZWlnaHQgNzAgL0NvbG9yU3BhY2UKL0Rldmlj
+ ZUdyYXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVy
+ IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt3NlS4lAQBmCykbAEBGTVuCFLKcRSRxEV
+ HRRUlIAIAX3/F5lEaigCcuq0V1Pj/19YVprm4quOqHU6Ph8CAQhAAAIQgMD/LSCIooQQ
+ BERREFaNhCBKil/VAgi/gKYqsvS1qCApWkiPxuIIt0BsLRIOqrL4hago+UPRRDq3aWwh
+ vALGRjYV1wPK8ogKkhpO5HYKBxXTPEL4BMzqYTlvpNeCyuKECpI/vG4UzbP6deMG4RVo
+ XNVODvO5mAPq/VQSlVDCKJ9cNduPTx2EV+DpoXVTM/ezUW3hjpe0aLZ40mi/9PqvA4RX
+ 4LVvde7q1d1k2DugghxK7JhX7e5gZNtjhFfAtof95+Z5OecM6PwNL/r1dOGs+TywJ5P3
+ 9/cPhEfAkZqMR/3Ha3M7EZTnf2cS1WjuoN7ujVxNePJgfr7GBX17/n2ad274eU9Ji21W
+ rh/7NqaT2/Iv6LB7f15I617PQMwwG0+vNoaT5vnxPhlarVopo/s98xmIb5k3nYHjSXy/
+ H//yyajXvihlI0ueR/D8znC4nvXyCs/xd97xZ/fMPOf/QpKc+92dT3iShwOeZDJmAzyZ
+ POQiPMlkzAZ4MnnIRXiSyZgN8GTykIvwJJMxG+DJ5CEX4UkmYzbAk8lDLsKTTMZsgCeT
+ h1yEJ5mM2QBPJg+5CE8yGbMBnkwechGeZDJmAzyZPOQiPMlkzAZ4MnnIRXiSyZgN8GTy
+ kIvwJJMxG+DJ5CEX4UkmYzbAk8lDLsKTTMZsmHkunlecnq9j9qK4LLDSc3r+c7kBVxgC
+ zoHvkdW6KGUWz3/GjOr0fDKjGaUlAcfTPZ9cTHvPJ4va2sbh1UPf3UdY6sGFVQLu7sb4
+ rXt3Vkh59xFENZIt11rWcAzQVXhfXHc4J/agc3u8tx7y7MsISjiVP7nt9EfjCUIQGNtv
+ VvuyYsQCnn0uQQ7GjcPa3XP/bThCuAWGw4H10DgtZCLq/HFvn89dkMub9ebjS9fqIZwC
+ ltXttG9+HRiJoGf9yOcT5MBabr96ft28b7URToFW6+728vRgO6mrC/vFPlEJxrK7ZfP0
+ vFZHOAUuamfHlYKRjGieTyN3M9Z5ekgwmtzYzhdKZYRToFQs7BmZuK7J3p+en6CiooWj
+ iWQ6k0U4BTLp1Ho8suKBLIIo+7VgWI8g3AJ6OBRQv3gay3QX3nkAk6z4EYKAojgPC5r/
+ z9JUcvZVcCIivAIu18wO30AAAhCAAAT+GYE/v2FL9wplbmRzdHJlYW0KZW5kb2JqCjU4
+ IDAgb2JqCjkyNQplbmRvYmoKNTkgMCBvYmoKPDwgL0xlbmd0aCA2MCAwIFIgL1R5cGUg
+ L1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA1MDIgL0hlaWdodCA0OTAgL0Nv
+ bG9yU3BhY2UKL0RldmljZUdyYXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQZXJDb21w
+ b25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt2FtTk2cYRmHy
+ ZUtIQEBkY6NtKcK4iVOtIlWwKKhYIiKEpP//jzRpp50G9faY1fWe9OBpZ3qvyw9tp6Z8
+ FrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGAB
+ C1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCA
+ BSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jA
+ AhawgAUsYIGrXaBUFGUfrUBRlEpf/XVZKsrVWr0x7YMVaNSrlfJX3EvlamOmPTe/4GMV
+ mL8222rWK8WX3ItybWZucXntu84tH6pA5+bqjYX2dPULn3upXG8trn2/cfd+t/vQByrQ
+ fXBva72zfK1Z/exrL5VrreudO90nOy9293yoArvPtx/dW1+bH7Ff+jNdUZ1Z7Gw9er5/
+ +PbdkQ9V4N2bg73t7k+rc43LP+PLjbnVO492D3//cPLx1Icq8PGkd/Rq58EPS61LH3up
+ MrP4fff54fHpeb9/4UMV6PfPTt7vP91aG33sEz/ii1p7eePJ/vvT/mAwHA7/8GEKjDgH
+ F+cnb190by82KxP/9VbU59bu7hx+OB+bq44h/2vImP3T+98er49+xE+olxvz391/8fak
+ 75fOEv+H/ez49dON5fYl9en5Tnf33ce+HzpQ/Y/h4Kx3sL250q5NfuvTC7e6e0enI3Xi
+ 6v/9psH5h8Nnm6uzn6s/VB37q2OsvrP1NfUL7O7/97B/1Sf+71x59BN+/K2rzvzVoTrT
+ Na9SPfdhXlVnuuZVquc+zKvqTNe8SvXch3lVnemaV6me+zCvqjNd8yrVcx/mVXWma16l
+ eu7DvKrOdM2rVM99mFfVma55leq5D/OqOtM1r1I992FeVWe65lWq5z7Mq+pM17xK9dyH
+ eVWd6ZpXqZ77MK+qM13zKtVzH+ZVdaZrXqV67sO8qs50zatUz32YV9WZrnmV6rkP86o6
+ 0zWvUj33YV5VZ7rmVarnPsyr6kzXvEr13Id5VZ3pmlepnvswr6ozXfMq1XMf5lV1pmte
+ pXruw7yqznTNq1TPfZhX1ZmueZXquQ/zqjrTNa9SPfdhXlVnuuZVquc+zKvqTNe8SvXc
+ h3lVnemaV6me+zCvqjNd8yrVcx/mVXWma16leu7DvKrOdM2rVM99mFfVma55leq5D/Oq
+ OtM1r1I992FeVWe65lWq5z7Mq+pM17xK9dyHeVWd6ZpXqZ77MK+qM13zKtVzH+ZVdaZr
+ XqV67sO8qs50zatUz32YV9WZrnmV6rkP86o60zWvUj33YV5VZ7rmVarnPsyr6kzXvEr1
+ 3Id5VZ3pmlepnvswr6ozXfMq1XMf5lV1pmtepXruw7yqznTNq1TPfZhX1ZmueZXquQ/z
+ qjrTNa9SPfdhXlVnuuZVquc+zKvqTNe8SvXch3lVnemaV6me+zCvqjNd8yrVcx/mVXWm
+ a16leu7DvKrOdM2rVM99mFfVma55leq5D/OqOtM1r1I992FeVWe65lWq5z7Mq+pM17xK
+ 9dyHeVWd6ZpXqZ77MK+qM13zKtVzH+ZVdaZrXqV67sO8qs50zatUz32YV9WZrnmV6rkP
+ 86o60zWvUj33YV5VZ7rmVarnPsyr6kzXvEr13Id5VZ3pmlepnvswr6ozXfMq1XMf5lV1
+ pmtepXruw7yqznTNq1TPfZhX1ZmueZXquQ/zqjrTNa9SPfdhXlVnuuZVquc+zKvqTNe8
+ SvXch3lVnemaV6me+zCvqjNd8yrVcx/mVXWma16leu7DvKrOdM2rVM99mFfVma55leq5
+ D/OqOtM1r1I992FeVWe65lWq5z7Mq+pM17xK9dyHeVWd6ZpXqZ77MK+qM13zKtVzH+ZV
+ daZrXqV67sO8qs50zatUz32YV9WZrnmV6rkP86o60zWvUj33YV5VZ7rmVarnPsyr6kzX
+ vEr13Id5VZ3pmlepnvswr6ozXfMq1XMf5lV1pmtepXruw7yqznTNq1TPfZhX1ZmueZXq
+ uQ/zqjrTNa9SPfdhXlVnuuZVquc+zKvqTNe8SvXch3lVnemaV6me+zCvqjNd8yrVcx/m
+ VXWma16leu7DvKrOdM2rVM99mFfVma55leq5D/OqOtM1r1I992FeVWe65lWq5z7Mq+pM
+ 17xK9dyHeVWd6ZpXqZ77MK+qM13zKtVzH+ZVdaZrXqV67sO8qs50zatUz32YV9WZrnmV
+ 6rkP86o60zWvUj33YV5VZ7rmVarnPsyr6kzXvEr13Id5VZ3pmlepnvswr6ozXfMq1XMf
+ 5lV1pmtepXruw7yqznTNq1TPfZhX1ZmueZXquQ/zqjrTNa9SPfdhXlVnuuZVquc+zKvq
+ TNe8SvXch3lVnemaV6me+zCvqjNd8yrVcx/mVXWma16leu7DvKrOdM2rVM99mFfVma55
+ leq5D/OqOtM1r1I992FeVWe65lWq5z7Mq+pM17xK9dyHeVWd6ZpXqZ77MK+qM13zKtVz
+ H+ZVdaZrXqV67sO8qs50zatUz32YV9WZrnmV6rkP86o60zWvUj33YV5VZ7rmVarnPsyr
+ 6kzXvEr13Id5VZ3pmlepnvswr6ozXfMq1XMf5lV1pmtepXruw7yqznTNq1TPfZhX1Zmu
+ eZXquQ/zqjrTNa9SPfdhXlVnuuZVquc+zKvqTNe8SvXch3lVnemaV6me+zCvqjNd8yrV
+ cx/mVXWma16leu7DvKrOdM2rVM99mFfVma55leq5D/OqOtM1r1I992FeVWe65lWq5z7M
+ q+pM17xK9dyHeVWd6ZpXqZ77MK+qM13zKtVzH+ZVdaZrXqV67sO8qs50zatUz32YV9WZ
+ rnmV6rkP86o60zWvUj33YV5VZ7rmVarnPsyr6kzXvEr13Id5VZ3pmlepnvswr6ozXfMq
+ 1XMf5lV1pmtepXruw7yqznTNq1TPfZhX1ZmueZXquQ/zqjrTNa/6V7009Z9Xnl649XDv
+ 6LQ/zP+016tZ4OvqXdWvJuk3/62Hw8F57+DZ5sps7dK3Pt95sPvuY3/ox/7NiFfubxip
+ n/UOtu8styfVi8a1m/eevzk5H8h+5VC/8S88HL2LT8evnmzcaFUnvvWiPru6tX3QO7uQ
+ /RsRr9x5hD7onx69/PnH6zOVCfVStXVj/dHLo5Pzi4GPVuCi/6l3+Ov9zvx0+T9/gp+a
+ KlWaC51726/en3w6O/exCpydnfbe7D7eWJmtFxPqU0Wtvbze3dl/+/tx74OPVKDXOz46
+ 3PvlbmexOfnb+vhjn7629tODpy/2Xx8c+kgFDg5evfz18d3bS+16eeK39dF3X1Sb86s/
+ bHUfP93e8ZEKPNt+8vP9jc7SbGPyz3LjH/alcrU5t3Tz9vrG5paPVGDzzsaPnZWFdqNy
+ 6Xf1v9iLaqM1t7i0vLLqIxVYWb5xfWG2Wa8Ul3++/81eqTWarfasj1Wg3ZqZrlc/+z19
+ bD5+paJcqdZ8tALV6ug7/9KH/jf7CH70Ch+qwNj0H1//agELWMACFrCABSxgAQtYwAIW
+ sIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAEL
+ WMACFrCABSxgAQtYwAIWsIAFLGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAF
+ LGABC1jAAhawgAUsYAELWMACFrCABSxgAQtYwAIWsIAFLGABC1gAUuBPhGXoYQplbmRz
+ dHJlYW0KZW5kb2JqCjYwIDAgb2JqCjI4MTIKZW5kb2JqCjUxIDAgb2JqCjw8IC9MZW5n
+ dGggNTIgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNTAy
+ IC9IZWlnaHQgODgyIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0
+ cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3Ry
+ ZWFtCngB7ddZd1QFGkbhVCojGYCAgTBEBg2DMggyCwgyyBQIJIT+/3+kK3brMiDbu+7F
+ dp8bLz5dK+9+cirl2FhPBSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQ
+ gQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWo
+ QAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpU
+ oAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUq
+ UIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEK/M8LDAaD8R5ZgREq/CIN
+ xocTk1NT0z2qAlNTkxPD8c/AD8Ynpmbn5hcW9/aYCiwuLszvmZ4c/iX7YDg5O7/v4PLh
+ lZUjPaICKyuHvlraOzc98Rev+2A4tWff8rGT35w5d+58j6fAuXNn106vrhxYmJkY/+Sv
+ +/jk3NKRU+cv/3jj1u0eVYFb169eWFtdXpyZ+PhDfjAxu//Itxdv3H3w6PGTHlOBx49/
+ +fnO1e9OLC9Mf/y3fTi9cOj0pVsPn754tb7+usdTYH19/eXzx/eunV89MDe5+2UfTOxZ
+ Wv3+5sPnr99ujp6tHk2BEee7jVdP711dW1mc3v2XfTA5v/zN1fvP3my+3x49H3o0BXY8
+ 37979fj2hdWl2Yld3+fGpxdXzt589Ordjvi/ekwFRr+/21sbz+5fOXVwbvf3ufGZfUe/
+ u/P09dZ25ibxnS07n1rv3718eO3b5fndf9iHs/uPX7j765ut3nQb+m/u2+9ePbqxdmhh
+ atfXueHs0urFe882tnrVneqb649unjm8+Kn6pdSF4v+ZtL25/vjW2ZXPqL/X7v5nD0v9
+ n+j/h/qu/2Hf+bu+8wnfu+78nUjd6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOV
+ V6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+
+ zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWn
+ K69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XO
+ fZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvq
+ TldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69K
+ nfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX
+ 1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTlde
+ lTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4
+ r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2u
+ vCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3
+ cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7
+ XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp1
+ 7uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5T
+ d7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV
+ 6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8
+ pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ry
+ qtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzH
+ eU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu50
+ 5VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5
+ j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d
+ 6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWp
+ cx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/Oa
+ utOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqr
+ Uuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/n
+ NXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOV
+ V6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+
+ zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWn
+ K69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XO
+ fZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvq
+ TldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69K
+ nfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX
+ 1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTlde
+ lTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4
+ r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2u
+ vCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3
+ cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7
+ XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp1
+ 7uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5T
+ d7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV
+ 6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8
+ pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ry
+ qtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzH
+ eU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu50
+ 5VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5
+ j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d
+ 6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWp
+ cx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/Oa
+ utOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqr
+ Uuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/n
+ NXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOV
+ V6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+
+ zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWn
+ K69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XO
+ fZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvq
+ TldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69K
+ nfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX
+ 1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTlde
+ lTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4
+ r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV6XOfZzX1J2u
+ vCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3
+ cV5Td7ryqtS5j/OautOVV6XOfZzX1J2uvCp17uO8pu505VWpcx/nNXWnK69Knfs4r6k7
+ XXlV6tzHeU3d6cqrUuc+zmvqTldelTr3cV5Td7ryqtS5j/OautOVV7H6Fv/HXb/QAn+o
+ D8b+9Axnl1Yv3Xu2sfXhC53Vj40FPqt+/OLdZ2+2PnzIHft9kccP25uvHt08c3hhave7
+ PrP/2IWfnqb+RaL+zQ89epO337365fraoYXJXerj03uPnr/9ZH1ze/Sv9Lb/TcYv7DwS
+ ff/2xYMfv1me/0h9avHw2vWHL9++32H/wlb142KB0Zu+vfXm17uXTxzYM7HrXR9Mzh08
+ efmnJ+vvtt732ApsbW68+OXG+WP7ZoZ/+gY/NjYYzu47evba/acvX2+87ZEV2Fh//ujO
+ 5dPLC1Pju9THxqfmD3793bW7j54+f9HjKvD82ZMHt39YO7p/dvcH/M7LPr24fOLclZs/
+ 3X8weh72SAqMMH++d+f6xbVjB+Y+ftXHxsYnZha/On763MUfrlztURW4cun7MyePLM1P
+ DXd9l9v5sB+M2OeXlo+unjh16nSPqMCpk18fXzm4d+4v0H9jn9qzsHfpwMGvelQFDh7Y
+ vzg3M/npm/7bV7vR6z41M7tnrkdWYM/s9ORw/JOP99+/zw/Gh8OJiYnJHlGBEeiI/LPm
+ /7Uf9MgK/P5S988KVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahA
+ BSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSg
+ AhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQ
+ gQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWo
+ QAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClTg/1ng3++OKP0KZW5kc3RyZWFtCmVu
+ ZG9iago1MiAwIG9iago0NTczCmVuZG9iagozNyAwIG9iago8PCAvVHlwZSAvRXh0R1N0
+ YXRlIC9jYSAwLjcgPj4KZW5kb2JqCjM4IDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUg
+ L0NBIDAuNyA+PgplbmRvYmoKNjcgMCBvYmoKPDwgL0xlbmd0aCA2OCAwIFIgL04gMyAv
+ QWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFt
+ CngB1VlnWBTNsu6ZTcCypCXnHEVylpwkSA6CSFrSknMOSlKCIIiAgKCACCKCGAgCImAC
+ RIKAEQmiIKhgAgThDur3fec+55x/98+d55med6uqq2unerqn3gGAbdktONgfpgMgIDA8
+ 1MpQh/eggyMv7gWgBDSAEYgBSjdSWLC2hYUp+K/H9wkA7SrHJHd9/Vez/6yg9/AMIwEA
+ WSBqd48wUgCCrwMA65CCQ8MBQK0j8uGo8GAEox8gmDEUCRDBL3ex92+8sovdf2EM+peN
+ jZUuABhWACio3dxCvQEgCCJy3kiSN+KHoAcAliHQgxwIAPEggjVIPm4eALAVIzZ7AgKC
+ dnEfgkXd/8WP979gNzf3v326uXn/jX//F6QnMrAeOSzY3y3m14//yybAPwK5X78OBqSl
+ DvQ3280NM3IueLjpmSBXTuTcDvb/lTPEBmL3DLS1RmS7eE+gu5n5H6zhFWpghWCkL2QR
+ HK6zi5F7BnkFh1vY/JEnxvromiGYGpEXeIbp/+XnnK+b8W7OaBB5c2iElS2CBRHcHRZp
+ rY9gZEZBb2J9bOz/2Hz18NT7I4dhL7KB0W8bmIEcbrQ7FiOSc36/IJPdGJCxYEVgAvyB
+ J4gAoUgbCCSBKdAFen9aSeAF3BBNJKILA37gLYIDkB5BSJ8gBPP+sdP9N4nBr37eSL//
+ 7ZEXkBDbiL/H/D0aLzLmXz7JwAPBf8ndkDF2dbvRhbmQk/8Z8y+LXX+/opGul16U3vor
+ JrQwWhatgNZBq6M10CqAF82MZgeSaHm0MlobrYlWQ3QqwAC8QTx7/xXjrv+AZq/I4qAY
+ VTsfRLv7393/0gK7X9bkv3//WwSAPLTcsvxXBACEe0YjzwEAukHBMaFkb59wXm3kyfXc
+ w2sUSNq7h1dWWkZmV/3/5thds34H+8Xq11oEMT/+RxbQCIAyGZmPzv/I3E8C0C6JPPv1
+ /8iEC5G1wReAAUFSRGjkb3/o3QsGUAFaZIayAW4gAESR+ywLFIEa0AL6wBiYAxvgAJyR
+ +eODzMFQEAXiwVGQDrLASXAalIAKUAVqQQNoBi2gA9wB98AAGAbj4AWYBvNgCayA72AT
+ giAcRICIEBvEAwlBEpAspAxpQPqQKWQFOUCukDcUCEVA8VAKlAXlQyXQeagOugq1QXeg
+ h9AI9AyagRahz9APGAVTw4wwFywMS8HKsDZsAtvAh2FvOASOhVPhHLgYroQvwzfhO/AA
+ PA5Pw0vwNxRA4VHMKD6UJEoZpYsyRzmivFChqERUJqoQVYm6gmpH3UeNoaZRy6gNNBZN
+ RPOiJZF5uh9tiyahQ9CJ6Gx0CboWfRPdhx5Dz6BX0NsYAoYTI4FRxRhhDmK8MVGYdEwh
+ pgZzA3MXM46Zx3zHYrHMWBGsEnY/1gHri43DZmPPYhux3dgR7Bz2Gw6HY8NJ4NRx5jg3
+ XDguHXcGdxl3GzeKm8etU+ApeChkKQwoHCkCKZIpCikuUXRRjFK8o9ikpKMUolSlNKf0
+ oIyhzKWspmynfEw5T7lJRU8lQqVOZUPlS3WUqpjqCtVdqpdUX/B4PD9eBW+JJ+OP4Ivx
+ TfgH+Bn8BjUDtTi1LrUTdQR1DvVF6m7qZ9RfCASCMEGL4EgIJ+QQ6gi9hCnCOg2RZi+N
+ EY0HTRJNKc1NmlGaj7SUtEK02rTOtLG0hbTXaB/TLtNR0gnT6dK50SXSldK10U3SfaMn
+ 0svQm9MH0GfTX6J/SL/AgGMQZtBn8GBIZahi6GWYI6KIAkRdIomYQqwm3iXOM2IZRRiN
+ GH0ZsxgbGIcYV5gYmOSZ7JiimUqZOpmmmVHMwsxGzP7MuczNzBPMP1i4WLRZPFkyWK6w
+ jLKssXKwarF6smayNrKOs/5g42XTZ/Njy2NrYXvFjmYXZ7dkj2IvZ7/LvszByKHGQeLI
+ 5GjmeM4Jc4pzWnHGcVZxDnJ+4+LmMuQK5jrD1cu1zM3MrcXty13A3cW9yEPk0eAh8xTw
+ 3OZ5z8vEq83rz1vM28e7wsfJt58vgu883xDfJr8Ivy1/Mn8j/ysBKgFlAS+BAoEegRVB
+ HsEDgvGC9YLPhSiFlIV8hIqE7gutCYsI2wsfE24RXhBhFTESiRWpF3kpShDVFA0RrRR9
+ IoYVUxbzEzsrNiwOiyuI+4iXij+WgCUUJcgSZyVG9mD2qOwJ3FO5Z1KSWlJbMlKyXnJm
+ L/Ne073Je1v2fpQSlHKUypO6L7UtrSDtL10t/UKGQcZYJlmmXeazrLgsSbZU9okcQc5A
+ LkmuVW5VXkLeU75c/qkCUeGAwjGFHoWfikqKoYpXFBeVBJVclcqUJpUZlS2Us5UfqGBU
+ dFSSVDpUNlQVVcNVm1U/qUmq+aldUlvYJ7LPc1/1vjl1fnU39fPq0xq8Gq4a5zSmNfk0
+ 3TQrNWe1BLQ8tGq03mmLaftqX9b+qCOtE6pzQ2dNV1U3QbdbD6VnqJepN6TPoG+rX6I/
+ ZcBv4G1Qb7BiqGAYZ9i9H7PfZH/e/kkjLiOSUZ3RirGScYJxnwm1ibVJicmsqbhpqGn7
+ AfiA8YFTB16aCZkFmrWYA3Mj81PmryxELEIsblliLS0sSy3fWslYxVvdtyZau1hfsv5u
+ o2OTa/PCVtQ2wrbHjtbOya7Obs1ezz7ffvqg1MGEgwMO7A5kh1ZHnKOdY43jt0P6h04f
+ mndScEp3mjgscjj68ENndmd/504XWhc3l2uuGFd710uuW27mbpVu39yN3MvcV0i6pCLS
+ koeWR4HHoqe6Z77nOy91r3yvBW9171Peiz6aPoU+y2Rdcgl51Xe/b4Xvmp+530W/HX97
+ /8YAigDXgLZAhkC/wL4g7qDooJFgieD04OkQ1ZDTISuhJqE1YVDY4bDWcEbk5XAwQjQi
+ LWImUiOyNHI9yi7qWjR9dGD0YIx4TEbMu1iD2Atx6DhSXE88X/zR+JkE7YTziVCie2JP
+ kkBSatL8EcMjtUepjvodfZQsnZyf/DXFPqU9lSv1SOpcmmFafTpNemj65DG1YxXH0cfJ
+ x4cy5DLOZGxnemT2Z0lnFWZtZZOy+0/InCg+sZPjlTOUq5hbfhJ7MvDkRJ5mXm0+fX5s
+ /typA6duFvAWZBZ8Pe1y+mGhfGFFEVVRRNF0sWlx6xnBMyfPbJX4lIyX6pQ2lnGWZZSt
+ nfU4O1quVX6lgqsiq+LHOfK5p+cNz9+sFK4srMJWRVa9rbarvn9B+UJdDXtNVs3Pi4EX
+ p2utavvqlOrqLnFeyq2H6yPqFy87XR5u0GtovSJ55Xwjc2NWE2iKaHp/1fXqRLNJc881
+ 5WtXrgtdL7tBvJF5E7oZc3OlxadlutWhdaTNuK2nXa39xq29ty528HWUdjJ15nZRdaV2
+ 7dyOvf2tO7h7+Y73nbkel54XvQd7n/RZ9g3dNbn74J7Bvd772vdvP1B/0PFQ9WFbv3J/
+ y4DiwM1BhcEbjxQe3RhSHLr5WOlx67DKcPvIvpGuUc3RO2N6Y/eeGD0ZGDcbH5mwnXg6
+ 6TQ5/dTj6cIz/2erzyOfb7448hLzMvMV3avCKc6pytdirxunFac7Z/RmBmetZ1/MkeaW
+ 3oS92ZpPfUt4W/iO513dguxCx6LB4vD7Q+/nl4KXNpfTP9B/KPso+vH6J61PgysHV+ZX
+ Q1d3Pmd/Yfty8av8155vFt+mvgd831zLXGdbr91Q3rj/w/7Hu82oLdxW8U+xn+3bJtsv
+ dwJ2doLdQt1+vQugkBb28gLg80XkPcEBqR2GAaCi+V1T/LJAyhUIsUGwHbQXWoLPopzR
+ Quj3mG5sMS6YwopSn0oRL0W9lyBBo0xrQudKH8FwmtjGOMNMzaLNGsrWwL7EKcbly93E
+ s86nx39SYFZIRviYyCsxBfGTEsuS+nurpLZlnGTb5dkVohXHleVUclSX9xmqn9P4oWWl
+ fUFnQ89Ev8RgYb+8UZxxlyl0QMss1rzJYs6K3lrdxsM2ze6c/bWDtx16HbsPtTk1Hq5x
+ LnM56ZrsFuLuTDL1UPLk9yJ4rXnP+PSTm31L/JL9yQEWgQpBLEFrwWMh9aFJYebhPOGf
+ Iroic6KcoiWif8T0x5bEkeOVE7AJY4kVSf5HdI4KJjOm0KbSpdGn0x0jHKfMQGfsZG5k
+ fc5eOjGb8zx39ORAXk9+26krBVWnzxTmFKUUx52JKUkuLS67cXa4fLZi+dzK+ZXKlapP
+ 1R8vfKhZurhQ+6Zu5tJc/WoD/RXdxsSmlquvm9ev424Qb/K0iLcqtGm2G92y7nDvjO4q
+ vn2ne6EH3UvsY7/Le0/8vtIDnYc6/aL9nwYyB9kGzz/SfLQ81PA4dFhlBBp5NFo+FvJE
+ f5xt/ONE72TRU59nis92nne/iH0p93L5VcNU2Ot909jp0ZmyWa85mbnNN/fmC956vlNd
+ YFh4v9j1PnvJfplvefHD1Y+xn3RW8Cvjqw2fy79c/7r23Wvt+YbWj4LN6Z9y2wU7O7/y
+ LwA1wQ4oBtQDdDrGBMuEfYW7RpFN6U9li9ejliOI0QjRitJJ0SswGBDtGAOZUpmrWPpY
+ l9jpOTQ4yVwl3IM8O3zK/OECVwTfC0uI+IjWii1JSO4Jlbyxd0NaU+ao7H15vIKpYo7S
+ iApR1UItZ1+/BlZTUytSu1bnhR5eX9XA3TBjf73RgPGiKXyAxUzEXM5C1VLVSs5a0IbG
+ 5pvtc7tu++qDmQ6BjtaHlJw4nHYOzzr3udS4prt5uGuROElrHiOe9V5p3s4+SmQ68oLv
+ bb8i/8AA/UD2wA9Bt4NzQhxD+UMXw5rCoyJUI35GdkUlRWvFoGMexJ6Is4gnxo8nFCUe
+ QlbWlSO9RyuSU1ICUx3TDNPlj/Edpz6+ljGbOZh1M/vcieM5obmHT5rmaeYrnNpbIHqa
+ v5CziKWY/gxVCbpkq/Rr2dLZ6fLJipFzw+fHK19XLVWv16Au0tSy1Qlekq7fd9mgwfyK
+ Q6NnU+TV7Obaa33Xp26stkCtdG187XK3DDoOdQZ3pd8u7a6709BT3XuyL/yuzT3Z+/T3
+ Vx88QdamioG0Qb9HlkPKj/mG8cPrI3Ojj8aanxSNJ0yQJk2eyj/jeo55vvziyctbr6qm
+ TryOnw6e8ZsNmAt/kzCf/jbvXenChcWm9+1LvcuPPrz4uL6islr9Recb/vvX9YUfo1uV
+ 2w5/8s8JnYBF4QFUAJoDPYBJxmpg13GdFMcoHajk8DT4BeqHhGs05bQn6FLoYxkiiTGM
+ MUwJzOksuaxn2RrZ+ziecn7kJvAI8urwufKnCFQJ3hVaFKERlRGzFY+TqNjTJ7koRS+t
+ JOMoGydXLn9bYUpxW5lDRUXVSo28L1E9T6NK86pWh/ZdnX7dQb0B/fsGtw2v7a80yjQO
+ NDEx5TX9euCeWZE52ULFEmc5YXXBOsxGy5badtKu2j74oJoD1mHYseSQp9Nep++Hu5zT
+ Xcxcia6TbiXIOsFDmvY45+nqxeP12vucjyuZhzzle9bPwZ/oPxSQEagfBAXdCg4PEQl5
+ Gno8TCnsXXhhhF7E58hzUWZRm9F1MXaxcGxj3KF4THxTwqFETGJTkvMRxiMjRwuTPVOU
+ U2lS59M60wuO+R3XzmDJ+JB5J6sg2+uEUg5VznRu68n8vNB861MKBWwF26ffFPYXNRaf
+ OhNZ4lCqWsaO7Jbj5TcqSs+dOJ9emVqVVn3swrGatIsJtQF1By/p16tdVm8wueLWGN9U
+ fPV686Nr89c3b9K3CLfua7Ns976V2HG681JXx+373f13Hvbc7b3T13m39d61+w0PLj6s
+ 6D8zkD+Y/Sh9KOVx2nDeSO3ow7HVca4Jo8nIp5XPhp5vvBR8ZT2V+3p6hjzH+ubbO8xi
+ 4nLv6ql1wd38/+aWdvcErCIANQjvYXcEAEtEU2sJgFABQnG0AWBBAMBGBcB+aQCmXwJQ
+ mejf+wcE0AgDR4dUnAJACqgjzMYhhEtIBPmgBtwCI2ARqRfZIXnIHPKDjkEXoF5oFoZh
+ AVgfqfSy4Eb4CfwDqef2o0JQJag+1CdkDhqiI9BV6DEMCiOPVGQlmCEsCquCDcbWYmdx
+ nLiDuALcKAU9hSXFKYpxSjZKF8oayo9UylQpVMN4bnwgvpuakdqX+g6BgxBFGKdRpDlD
+ s0PrTTtKp013jV6cvoZBhKGRqEYcZHRh/Mp0glmceYAlmJWFtZcthJ2ffYLjBOd+LizX
+ Pe5MHkteTt4PfH38VQJZgrFCAcIeIi6izmKu4p4SAXtiJDP2lku1S0/KvJf9KPdG/olC
+ r+JNpSvKl1TqVC+pNe1rVe/TGNOc19rQodUV0zPQ9zbIMry6/4UxzkTW1P5AqFmKea5F
+ uWWL1QsbSlsNuyhkv/vsKH8o2umOM8HFybXObZnE5aHpae8V4H3cp5n8wU/JPyPgdZBi
+ 8MmQj8j+1hzJFBUe3R/LEuccX5uwk+RzZCbZLeV1mkP6+HGHjK2shZycvLMF7IXGxcEl
+ xWWt5UPnZiq/X6C5KFZnUh/d0N7E3Vx5Q6KlvG2nw6nr1h3e3sy7Gw98+sceyT/OGpl7
+ cmBi6Jnri42pohnluddvUxc2l/iXtz9WrwiuVnxh+1r5XWPt3Ubxps7W1Hbor/UDQjgH
+ PCACLoSBVUL4HntARliFPHARdIEJ8AmiQjgCHcgFSoTKoS5oGsm9MGwMB8OFcBf8FkWH
+ UkV5ovJQt1Ef0JzoA0iFfhX9BsOGMcOkYTqR6lsa64/k/S1OCOeFq8UtUUhRRFB0UmIp
+ LSjPUr6nUqXKonqNl8dn4d9Qa1Kfpf5JcCXcpZGkKaLF0EbSLtGR6Kbp3enfM8QQaYmX
+ GA0ZF5iymGWYn7Oks8qzvmUrZbfhoOMY5SzmcueW4gE847wNfBn83gLGgjJCHMIUwpsi
+ X0W/im1JEPYISGrsdZXKkG6TeS/HKW+hkKU4qEyvYq96Rm1MHdIQ1jTQ8tI+rtOgO64P
+ G8gaeu0/azRpwmxqd6DQbMyCxtLQKsm63WbNTtE++mCnI+aQhVPF4c8uxq7Vbj9Jlsg6
+ 9d5bzieBPODH5R8ScC+IKzgyZCxMPrwoYivKJborljUuMP5eokBS5pH1ZN+UV2kW6b3H
+ lTIasvizS3JYcivyVPM/FLQWFhUnl4SUuZQbn5Ov5KmmubBz8XPd2/qnDQ8aO662Xbtz
+ 43HLq7alWxtdVN28Pap9B+/FPCjtbx8cHnox/HR08EnHxOWnZ5/nvTw2lTQdMxv1Jvpt
+ 3EL0+8PLzB9qPrGskFerPo9/WfvG8l1uzWI9bOPMj0dbuJ+W29V/8o8FBMCCPP0yQAfh
+ l3xAAihAOKT7YBbsQFzQPugwkvvz0D3kLZMBVoVJ8Am4FZ5HEVHaCHNThZpAUyLsYgT6
+ Mnoew4M5hCnGTCCMiz22BDuFE8D54q7htimMKYopFhDG5ATlHJLzAqoVvDm+iZpIHUM9
+ SzAjdNJI01yg5aEto+Omq0Z4iz4GFyKM5NueCcd0izmcRZplhfU6WwK7EQcrxzJnH9c5
+ 7iQeEq8pnwq/uACfII8Qn7CYiKKokZiLeIxE0Z52yVkpBmljmXTZXnmMgqVigzJRJUl1
+ dR9ZfUHTX+u7Troep367oYsR3rjDlGyGMc+yBFZB1q9szex6kD2p9ZCKU7ezmcuMWzSJ
+ 1qPKS967m2ziO+lPClgNOhrCFNoYfiBiJepMjHEcFN+aSEraPpqTwppamS55rDPDJnM9
+ +0pO4EnxvLFTvgVfCiOKvp2JKtkqSy9nrKg5r1Y5Vh1QQ3Wxtm7/pcXL2VfkG99cPX/N
+ /4ZeC38bun2xY6Srs7uhp7Kv5F7Bg7z+3MHcoazhhFHnJ9Lj3yabnwW8EHv5durCtNes
+ +NzqfMe7tEW996vLxz98/mS0kr3a8vnVl+WvG9/mvj9cy1/ft/52I3Vj40fgj7nNg5u3
+ txi3yFtdPxl/kn92bVNsW2wXb7/eEdkJ2mnZzX+Yl5zs7u4BIGodhH6c2tn5IgwALh+A
+ n3k7O5uVOzs/q5BiA/kG0u3/+3vFrjEW4dzLbu2i/3T8D+gdk/4KZW5kc3RyZWFtCmVu
+ ZG9iago2OCAwIG9iago1OTUzCmVuZG9iago1MCAwIG9iagpbIC9JQ0NCYXNlZCA2NyAw
+ IFIgXQplbmRvYmoKNjkgMCBvYmoKPDwgL0xlbmd0aCA3MCAwIFIgL04gMSAvQWx0ZXJu
+ YXRlIC9EZXZpY2VHcmF5IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVS
+ T0gUURz+zTYShIhBhXiIdwoJlSmsrKDadnVZlW1bldKiGGffuqOzM9Ob2TXFkwRdojx1
+ D6JjdOzQoZuXosCsS9cgqSAIPHXo+83s6iiEb3k73/v9/X7fe0RtnabvOylBVHNDlSul
+ p25OTYuDHylFHdROWKYV+OlicYyx67mSv7vX1mfS2LLex7V2+/Y9tZVlYCHqLba3EPoh
+ kWYAH5mfKGWAs8Adlq/YPgE8WA6sGvAjogMPmrkw09GcdKWyLZFT5qIoKq9iO0mu+/m5
+ xr6LtYmD/lyPZtaOvbPqqtFM1LT3RKG8D65EGc9fVPZsNRSnDeOcSEMaKfKu1d8rTMcR
+ kSsQSgZSNWS5n2pOnXXgdRi7XbqT4/j2EKU+yWCoibXpspkdhX0AdirL7BDwBejxsmIP
+ 54F7Yf9bUcOTwCdhP2SHedatH/YXrlPge4Q9NeDOFK7F8dqKH14tAUP3VCNojHNNxNPX
+ OXOkiO8x1BmY90Y5pgsxd5aqEzeAO2EfWapmCrFd+67qJe57AnfT4zvRmzkLXKAcSXKx
+ FdkU0DwJWBR9i7BJDjw+zh5V4HeomMAcuYnczSj3HtURG2ejUoFWeo1Xxk/jufHF+GVs
+ GM+Afqx213t8/+njFXXXtj48+Y163DmuvZ0bVWFWcWUL3f/HMoSP2Sc5psHToVlYa9h2
+ 5A+azEywDCjEfwU+l/qSE1Xc1e7tuEUSzFA+LGwluktUbinU6j2DSqwcK9gAdnCSxCxa
+ HLhTa7o5eHfYInpt+U1XsuuG/vr2evva8h5tyqgpKBPNs0RmlLFbo+TdeNv9ZpERnzg6
+ vue9ilrJ/klFED+FOVoq8hRV9FZQ1sRvZw5+G7Z+XD+l5/VB/TwJPa2f0a/ooxG+DHRJ
+ z8JzUR+jSfCwaSHiEqCKgzPUTlRjjQPiKfHytFtkkf0PQBn9ZgplbmRzdHJlYW0KZW5k
+ b2JqCjcwIDAgb2JqCjcwNAplbmRvYmoKMjYgMCBvYmoKWyAvSUNDQmFzZWQgNjkgMCBS
+ IF0KZW5kb2JqCjcxIDAgb2JqCjw8IC9MZW5ndGggNzIgMCBSIC9OIDMgL0FsdGVybmF0
+ ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVUz2sT
+ QRT+Nm6p0CIIWmsOsniQIklZq2hF1Db9EWJrDNsftkWQZDNJ1m426+4mtaWI5OLRKt5F
+ 7aEH/4AeevBkL0qFWkUo3qsoYqEXLfHNbky2perAzn7z3jfvfW923wANctI09YAE5A3H
+ UqIRaWx8Qmr8iACOoglBNCVV2+xOJAZBg3P5e+fYeg+BW1bDe/t3snetmtK2mgeE/UDg
+ R5rZKrDvF3EKWRICiDzfoSnHdAjf49jy7I85Tnl4wbUPKz3EWSJ8QDUtzn9NuFPNJdNA
+ g0g4lPVxUj6c14uU1x0HaW5mxsgQvU+QprvM7qtioZxO9g6QvZ30fk6z3j7CIcILGa0/
+ RriNnvWM1T/iYeGk5sSGPRwYNfT4YBW3Gqn4NcIUXxBNJ6JUcdkuDfGYrv1W8kqCcJA4
+ ymRhgHNaSE/XTG74uocFfSbXE6/id1ZR4XmPE2fe1N3vRdoCrzAOHQwaDJoNSFAQRQRh
+ mLBQQIY8GjE0snI/I6sGG5N7MnUkart0YkSxQXs23D23UaTdPP4oInGUQ7UIkvxB/iqv
+ yU/lefnLXLDYVveUrZuauvLgO8XlmbkaHtfTyONzTV58ldR2k1dHlqx5erya7Bo/7FeX
+ MeaCNY/Ec7D78S1flcyXKYwUxeNV8+pLhHVaMTffn2x/Oz3iLs8utdZzrYmLN1abl2f9
+ akj77qq8k+ZV+U9e9fH8Z83EY+IpMSZ2iuchiZfFLvGS2EurC+JgbccInZWGKdJtkfok
+ 1WBgmrz1L10/W3i9Rn8M9VGUGczSVIn3f8IqZDSduQ5v+o/bx/wX5PeK558oAi9s4MiZ
+ um1Tce8QoWWlbnOuAhe/0X3wtm5ro344/ARYPKsWrVI1nyC8ARx2h3oe6CmY05aWzTlS
+ hyyfk7rpymJSzFDbQ1JS1yXXZUsWs5lVYul22JnTHW4coTlC98SnSmWT+q/xEbD9sFL5
+ +axS2X5OGtaBl/pvwLz9RQplbmRzdHJlYW0KZW5kb2JqCjcyIDAgb2JqCjczNwplbmRv
+ YmoKOCAwIG9iagpbIC9JQ0NCYXNlZCA3MSAwIFIgXQplbmRvYmoKNzMgMCBvYmoKPDwg
+ L0xlbmd0aCA3NCAwIFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAv
+ RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXU
+ Nv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk4tEq3kXtoQf/gB568GQvSoVaRSjeqyhioRct
+ 8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1gATkDcdSohFpbHxCavyIAI6iCUE0JVXb7E4k
+ BkGDc/l759h6D4FbVsN7+3eyd62a0raaB4T9QOBHmtkqsO8XcQpZEgKIPN+hKcd0CN/j
+ 2PLsjzlOeXjBtQ8rPcRZInxANS3Of024U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9
+ T5Cmu8zuq2KhnE72DpC9nfR+TrPePsIhwgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19Phg
+ Fbcaqfg1whRfEE0nolRx2S4N8Ziu/VbySoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3
+ VlHheY8TZ97U3e9F2gKvMA4dDBoMmg1IUBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRq
+ u3RiRLFBezbcPbdRpN08/igicZRDtQiS/EH+Kq/JT+V5+ctcsNhW95Stm5q68uA7xeWZ
+ uRoe19PI43NNXnyV1HaTV0eWrHl6vJrsGj/sV5cx5oI1j8RzsPvxLV+VzJcpjBTF41Xz
+ 6kuEdVoxN9+fbH87PeIuzy611nOtiYs3VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj4ikx
+ JnaK5yGJl8Uu8ZLYS6sL4mBtxwidlYYp0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJU
+ ifd/wipkNJ25Dm/6j9vH/Bfk94rnnygCL2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmuj
+ fjj8BFg8qxatUjWfILwBHHaHeh7oKZjTlpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxaz
+ mVVi6XbYmdMdbhyhOUL3xKdKZZP6r/ERsP2wUvn5rFLZfk4a1oGX+m/AvP1FCmVuZHN0
+ cmVhbQplbmRvYmoKNzQgMCBvYmoKNzM3CmVuZG9iagozOSAwIG9iagpbIC9JQ0NCYXNl
+ ZCA3MyAwIFIgXQplbmRvYmoKNCAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94
+ IFswIDAgNjEyIDc5Ml0gL0NvdW50IDEgL0tpZHMgWyAzIDAgUiBdID4+CmVuZG9iago3
+ NSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvT3V0bGluZXMgMiAwIFIgL1BhZ2VzIDQg
+ MCBSIC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjQ5IDAgb2JqCjw8IC9MZW5ndGggNzYg
+ MCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0Jp
+ dHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAx
+ IF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9G
+ bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVSQlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy
+ +PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h95WY7egrEl+IGkdeUJwjkiOsPZQj9Kw++Izh
+ E0GZgSfsPhKw7X9E9AP+f30PqLzH99N7j2bPHTrddxje4pa5eovlG1adrtwg9JoVs8vX
+ SL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPy
+ p04wf8yUwMljnB8xaXHiCLmHTPw5foj6DOMZxvSOZvh9wKj8kQNM7jMidngfh3sMWx/a
+ Q+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5Nn/DebRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtT
+ dG6o79ig+DodwtvXsbtGu+22NUQnafu3NYnKBK35LQl0NidojqtvimMYo0lmYwzLURqd
+ NkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQGsnVQSwHqHZaFUConyqzlX6k+6j8s8KHei/l
+ esu8FHook1zqwbybUoElbr5+Al7liFUKZW5kc3RyZWFtCmVuZG9iago3NiAwIG9iago0
+ MTAKZW5kb2JqCjQ4IDAgb2JqCjw8IC9MZW5ndGggNzcgMCBSIC9PcmRlciAxIC9FbmNv
+ ZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVj
+ b2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAg
+ MSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJl
+ YW0KeAGtwQcCgQAAQNH7X0k0VLQ1jBbtNHUFd+C/t20/+mwfzspZlnWhzMvMmaZ5oozT
+ yBlA7+HN6UFd31HaruU0TdtQ6qbmVFVdUcqq5BSgV/HiPEH5M6dkecZJ0yylJGnCieMk
+ pjziB+cOut1vnCsoukaUMAo5QRAGFD/wOReQd/E4LshxHY4NsmyLYlomyDANytk4c04g
+ /aRzNJCqqZwjSDkqFFmRQZIsUURJ5BxA+8OeI4B2wu5/X6r+RswKZW5kc3RyZWFtCmVu
+ ZG9iago3NyAwIG9iagoxODgKZW5kb2JqCjQ3IDAgb2JqCjw8IC9MZW5ndGggNzggMCBS
+ IC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQ
+ ZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0g
+ L1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0
+ ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVSQlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy+PDF
+ jZ1NfpC0mPjg+7vi+DvF34gLj71h95WY7egrEl+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZ
+ gSfsPhKw7X9E9AP+f30PqLzH99N7j2bPHTrddxje4pa5eovlG1adrtwg9JoVs8vXSL9i
+ OX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPyp04w
+ f8yUwMljnB8xaXHiCLmHTPw5foj6DOMZxvSOZvh9wKj8kQNM7jMidngfh3sMWx/aQ+Iu
+ Q8aDu6hPM5hmQG9/mu87ivt2KL5Nn/DebRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o
+ 79ig+DodwtvXsbtGu+22NUQnafu3NYnKBK35LQl0NidojqtvimMYo0lmYwzLURqdNkQR
+ GqHBbH0ElWHq8+vC6KwNobMmRGGQGsnVQSwHqHZaFUConyqzlX6k+6j8s8KHei/lesu8
+ FHook1zqwbybUoElbr5+Al7liFUKZW5kc3RyZWFtCmVuZG9iago3OCAwIG9iago0MTAK
+ ZW5kb2JqCjQ2IDAgb2JqCjw8IC9MZW5ndGggNzkgMCBSIC9PcmRlciAxIC9FbmNvZGUg
+ WyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2Rl
+ IFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAw
+ IDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
+ eAGNwgk3VHEYB+AvJhKJRCKRkpKSkhKJRCIZY8asZgxjZuz7vu9bX+v9vZ3rmNO943/v
+ fZ/z8N8E24zzpXCML01exNhwjC8ko3yhex5l06N8LjnCZ8IRPjN5GmHDYT6VDPOp7kmY
+ TYf4RPA4xMdDskE+NnkUZMMAHwn7+Sj50M+mfXwoeODjA6+4hw9U9z1sOMj7wm7eT95z
+ s1UX713Hnkt914XdAXEndlV3nEjdjx1JB3aubjtgsw/bdrf6oP0j24st1c1epP6NTeEe
+ bPZgw3Y3Nuyud0P7S7YL66prXUj9E2vCnVjrxKrtDqzaXemA9od4O1ZuXG5H6u9YFm7D
+ chuWJFuxZHmxFdpv4i1YNF5ogfpXLEg2Y6EZ85JNmLc814TrXzAn2Yg549lGqH/GrPAn
+ zEg2YMbydAOuf8S0cD2mdafqof4BU8LvMSlZh0nzE3X4/x0mhGsxoTteC/W3GBd+g4Rw
+ DRKKlKihuP5rigtXU1w3Vk2mX1FM8iWNCVfRmMloFRm+oKhkJUV1RyvJ9HMalR15RqIV
+ NGIyUkGGTykiXE6R5OFyMl1Gw4LhMgo/ES+lsGqolAwfU0i4hELJQyVktZiG7AaLKfhI
+ vIiCqoEiMnxIAeFCCiT7C8lqAfnt+grI90A8n3yq3nxKfZ+8knnkverJI5u55LE7mEva
+ e7I5NKjqzqHUd8ktnE3ubHLZziKX3YEs0t4Rz6SBG52ZlPo2OYUzyJlB/ZLp1G/ZkU7a
+ W+Jp5Ej7B4pzCpwKZW5kc3RyZWFtCmVuZG9iago3OSAwIG9iago1NzIKZW5kb2JqCjQ1
+ IDAgb2JqCjw8IC9MZW5ndGggODAgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQg
+ XSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAg
+ MSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6
+ ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtwQcCgQAA
+ QNH7X0k0VLQ1jBbtNHUFd+C/t20/+mwfzspZlnWhzMvMmaZ5oozTyBlA7+HN6UFd31Ha
+ ruU0TdtQ6qbmVFVdUcqq5BSgV/HiPEH5M6dkecZJ0yylJGnCieMkpjziB+cOut1vnCso
+ ukaUMAo5QRAGFD/wOReQd/E4LshxHY4NsmyLYlomyDANytk4c04g/aRzNJCqqZwjSDkq
+ FFmRQZIsUURJ5BxA+8OeI4B2wu5/X6r+RswKZW5kc3RyZWFtCmVuZG9iago4MCAwIG9i
+ agoxODgKZW5kb2JqCjQ0IDAgb2JqCjw8IC9MZW5ndGggODEgMCBSIC9PcmRlciAxIC9F
+ bmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAv
+ RGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAx
+ IDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz
+ dHJlYW0KeAGNwgk3VHEYB+AvJhKJRCKRkpKSkhKJRCIZY8asZgxjZuz7vu9bX+v9vZ3r
+ mNO943/vfZ/z8N8E24zzpXCML01exNhwjC8ko3yhex5l06N8LjnCZ8IRPjN5GmHDYT6V
+ DPOp7kmYTYf4RPA4xMdDskE+NnkUZMMAHwn7+Sj50M+mfXwoeODjA6+4hw9U9z1sOMj7
+ wm7eT95zs1UX713Hnkt914XdAXEndlV3nEjdjx1JB3aubjtgsw/bdrf6oP0j24st1c1e
+ pP6NTeEebPZgw3Y3Nuyud0P7S7YL66prXUj9E2vCnVjrxKrtDqzaXemA9od4O1ZuXG5H
+ 6u9YFm7DchuWJFuxZHmxFdpv4i1YNF5ogfpXLEg2Y6EZ85JNmLc814TrXzAn2Yg549lG
+ qH/GrPAnzEg2YMbydAOuf8S0cD2mdafqof4BU8LvMSlZh0nzE3X4/x0mhGsxoTteC/W3
+ GBd+g4RwDRKKlKihuP5rigtXU1w3Vk2mX1FM8iWNCVfRmMloFRm+oKhkJUV1RyvJ9HMa
+ lR15RqIVNGIyUkGGTykiXE6R5OFyMl1Gw4LhMgo/ES+lsGqolAwfU0i4hELJQyVktZiG
+ 7AaLKfhIvIiCqoEiMnxIAeFCCiT7C8lqAfnt+grI90A8n3yq3nxKfZ+8knnkverJI5u5
+ 5LE7mEvae7I5NKjqzqHUd8ktnE3ubHLZziKX3YEs0t4Rz6SBG52ZlPo2OYUzyJlB/ZLp
+ 1G/ZkU7aW+Jp5Ej7B4pzCpwKZW5kc3RyZWFtCmVuZG9iago4MSAwIG9iago1NzIKZW5k
+ b2JqCjQzIDAgb2JqCjw8IC9MZW5ndGggODIgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAw
+ IDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsg
+ MCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEg
+ XSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGl
+ woVSQlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h
+ 95WY7egrEl+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7
+ j2bPHTrddxje4pa5eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX
+ 6LpA6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6
+ DOMZxvSOZvh9wKj8kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5N
+ n/DebRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3
+ NYnKBK35LQl0NidojqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQ
+ GsnVQSwHqHZaFUConyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUK
+ ZW5kc3RyZWFtCmVuZG9iago4MiAwIG9iago0MTAKZW5kb2JqCjQyIDAgb2JqCjw8IC9M
+ ZW5ndGggODMgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25U
+ eXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9t
+ YWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAv
+ RmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtwQcCgQAAQNH7X0k0VLQ1jBbt
+ NHUFd+C/t20/+mwfzspZlnWhzMvMmaZ5oozTyBlA7+HN6UFd31HaruU0TdtQ6qbmVFVd
+ Ucqq5BSgV/HiPEH5M6dkecZJ0yylJGnCieMkpjziB+cOut1vnCsoukaUMAo5QRAGFD/w
+ OReQd/E4LshxHY4NsmyLYlomyDANytk4c04g/aRzNJCqqZwjSDkqFFmRQZIsUURJ5BxA
+ +8OeI4B2wu5/X6r+RswKZW5kc3RyZWFtCmVuZG9iago4MyAwIG9iagoxODgKZW5kb2Jq
+ CjQxIDAgb2JqCjw8IC9MZW5ndGggODQgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEz
+ NjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAx
+ IDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAv
+ U2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVS
+ QlEAQMG/tru7u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h95WY
+ 7egrEl+IGkdeUJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7j2bP
+ HTrddxje4pa5eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA
+ 6Dkus3PnSD9jLn/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6DOMZ
+ xvSOZvh9wKj8kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5Nn/De
+ bRxu0Wu9ZwuJm/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3NYnK
+ BK35LQl0NidojqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQGsnV
+ QSwHqHZaFUConyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUKZW5k
+ c3RyZWFtCmVuZG9iago4NCAwIG9iago0MTAKZW5kb2JqCjQwIDAgb2JqCjw8IC9MZW5n
+ dGggODUgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBl
+ IDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWlu
+ IFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmls
+ dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG1wolWAVEAANDvMvvqS7NFlsggknUG
+ oZTKki1LKcIXdOrkOKMx5s28d88tbeylY5WNHfjarhgtKmtVeS0euRJleIsrUfVLLCK6
+ FItLsQC5UFj+XggFrfmFAOGnkDc29ymA/RByFmY/BL1zIauXz87BZub87jufQfeNz7zx
+ 1yjO+OvD0zPecC49+3fKpUFeTTmAE+7K2tSE0z7mUggmx9zPV81s8hXGEZvcvhyxMA/Z
+ S92JIWv+gE0Ajg/YbSY+0N1n4pbH+ozGHhNDU+ox0gvKXUb6S0tdOgp3h47qvujQJrfp
+ C/CRNm1oi44ApyKt/eEWpfGZCqN5/kQh/Eidq4ceKWibZOjYYJM084EMmhp4II+/JwOQ
+ +u/J/Q3SbyjhbwA/uyNQvSXOtPpuCQjrhM9Yb50wFvfWt2u41+zTGq63ip9C7aniuze4
+ B90K7qng7oMxd8XsMuY+0FXGrC5hLsOdJQysgjktdCjYts2hqMs2B+wnsu1v0XYC8hsK
+ r7WjCmVuZHN0cmVhbQplbmRvYmoKODUgMCBvYmoKMzg0CmVuZG9iagoyIDAgb2JqCjw8
+ IC9MYXN0IDg2IDAgUiAvRmlyc3QgODcgMCBSID4+CmVuZG9iago4NyAwIG9iago8PCAv
+ UGFyZW50IDg4IDAgUiAvQ291bnQgMCAvRGVzdCBbIDMgMCBSIC9YWVogMCA3MzMgMCBd
+ IC9UaXRsZSAoQ2FudmFzIDEpCj4+CmVuZG9iago4OCAwIG9iago8PCA+PgplbmRvYmoK
+ ODYgMCBvYmoKPDwgL1BhcmVudCA4OCAwIFIgL0NvdW50IDAgL0Rlc3QgWyAzIDAgUiAv
+ WFlaIDAgNzMzIDAgXSAvVGl0bGUgKENhbnZhcyAxKQo+PgplbmRvYmoKODkgMCBvYmoK
+ PDwgL0xlbmd0aCA5MCAwIFIgL0xlbmd0aDEgMTMwODAgL0ZpbHRlciAvRmxhdGVEZWNv
+ ZGUgPj4Kc3RyZWFtCngBvXsLeFNV1uje55mcJG0eTfPoI0mTNH2n7zZQ6GnpC9pAaSm2
+ SKUFyhQGsCjyHBABLRTfMwoiIz7QQRw0FAeDDFwugw6CzEXBX1TUcUTEweqMU0EtOblr
+ n4QKvX7z+X13vjmnK/t59l5nrbXXXmud3cW33dGFNGgNolHjtM6eOUi+cnMRoi7OWtDZ
+ EykbuiF9c9aSxfZImU1DiL5nTs8vFkTKigBCgusX85dHn49bg1BCYndX5+xIO7oKaXE3
+ VETKuBBSV/eCxcsiZf0ZSH8z/9ZZ0fY40t6woHNZdH50Dsr2hZ0LuiL9cxWQpvXcevvi
+ SNm7DdL5Pbd1RfvjVsDv/yAMtW40DynRfKRAFNLCPR0h/qLgQgy0knaAiuyWJ2fEln2L
+ dGRYhJ725Kwh6euOP35/5dxVj2q1sgb6KeX+pAGe4dKldITUGNo/UK0ebiGt5HIHUVNm
+ ENUBjAUoBMjI3KMQX8UPorj2QVGJbQxS2c5avjqEc4D+F+TfAM4R1RqknLWuzDZr3bq6
+ 9AolrkclDEY2XI1cclrV73rBFsRj+11OSMZEEqq/JAlKSFSWuGyhkpm2qyVBBRYTbN+5
+ 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
+ BNiG44tLxmJPRMqoiCW8x5XRYLVkMlIPHvPVJ/CVoG/+6oOpOTl47VsUJeh189XMbVfP
+ 0a6hU9LxRzDNxRHdL19hckrxpy43VNJgE6jBEnOhNLDIMsBKKwL7rATiZlVggdXAOcc6
+ NB4OEdfDiVA/nNZshHOPTagZzlJORTfBCcg2+Ap5MzkVD5JGpI1cHPFnW6vHNba0ZtZ1
+ zV/StXjurM7sylvnzya9rl3w7QHtBCChm2MAZwEuAnwHneBLJDYDpAGUAtQBtAJ0AywD
+ 2ACwBWAnQBDgGMBZgIsA38GLKwDMAGkApQB1AK0A3QDLADYAbAHYCRAEOAZwNhy9AAc0
+ nMdghdxYThtRTh9Rll36656vGNFePaJcM6JcO6LcMKLcNKLcPKI8ZUR56ohy54jyzBHl
+ WSPKwLQb6CHL0nXvJ//PxnXlX4zo3z2iPHdEed6I8i9HlOX/Eblu/IUj2m8dUZb/h+O6
+ /reNaL99RHnxiPIdI8pLRpSXjiiDPN1An+Wk/H8B4eKsgwplbmRzdHJlYW0KZW5kb2Jq
+ CjkwIDAgb2JqCjg2NDAKZW5kb2JqCjkxIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3Jp
+ cHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcyMCAvRGVzY2VudCAtMjMwIC9GbGFn
+ cyAzMgovRm9udEJCb3ggWy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvRm9udE5hbWUgL1hF
+ Q1BVWCtIZWx2ZXRpY2EtQm9sZCAvSXRhbGljQW5nbGUKMCAvU3RlbVYgMCAvTWF4V2lk
+ dGggMTUwMCAvWEhlaWdodCA1NDkgL0ZvbnRGaWxlMiA4OSAwIFIgPj4KZW5kb2JqCjky
+ IDAgb2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMzMzIDMzMyAwIDAgMCAwIDI3OCAwIDAg
+ MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCA3MjIgMCAwIDAgNjY3IDYxMSA3
+ NzggMCAwIDAgMCA2MTEgMCAwIDAgMCAwIDcyMiA2NjcgNjExIDAgNjY3IDAgMCAwIDAg
+ MAowIDAgMCAwIDAgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMgNjExIDYxMSAyNzggMjc4
+ IDU1NiAwIDg4OSA2MTEgNjExIDYxMSAwCjM4OSA1NTYgMzMzIDYxMSA1NTYgNzc4IDU1
+ NiA1NTYgXQplbmRvYmoKMjcgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1Ry
+ dWVUeXBlIC9CYXNlRm9udCAvWEVDUFVYK0hlbHZldGljYS1Cb2xkIC9Gb250RGVzY3Jp
+ cHRvcgo5MSAwIFIgL1dpZHRocyA5MiAwIFIgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIg
+ MTIxIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGluZwo+PgplbmRvYmoKOTMgMCBvYmoK
+ KE1hYyBPUyBYIDEwLjYuOCBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjk0IDAgb2Jq
+ CihEOjIwMTExMTA3MTgzOTIwWjAwJzAwJykKZW5kb2JqCjEgMCBvYmoKPDwgL1Byb2R1
+ Y2VyIDkzIDAgUiAvQ3JlYXRpb25EYXRlIDk0IDAgUiAvTW9kRGF0ZSA5NCAwIFIgPj4K
+ ZW5kb2JqCnhyZWYKMCA5NQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwNjI3NjQgMDAw
+ MDAgbiAKMDAwMDA1Mjk3OSAwMDAwMCBuIAowMDAwMDA0MzU1IDAwMDAwIG4gCjAwMDAw
+ NDY3MzQgMDAwMDAgbiAKMDAwMDAwMDAyMiAwMDAwMCBuIAowMDAwMDA0MzM1IDAwMDAw
+ IG4gCjAwMDAwMDQ0NTkgMDAwMDAgbiAKMDAwMDA0NTgwMSAwMDAwMCBuIAowMDAwMDE1
+ MDg0IDAwMDAwIG4gCjAwMDAwMTg1NDUgMDAwMDAgbiAKMDAwMDAxMjQ4MCAwMDAwMCBu
+ IAowMDAwMDEzMzM1IDAwMDAwIG4gCjAwMDAwMDY0MjIgMDAwMDAgbiAKMDAwMDAxMjQ1
+ OSAwMDAwMCBuIAowMDAwMDE5OTk1IDAwMDAwIG4gCjAwMDAwMjE0OTEgMDAwMDAgbiAK
+ MDAwMDAxOTA4OSAwMDAwMCBuIAowMDAwMDE5OTc1IDAwMDAwIG4gCjAwMDAwMTMzNTUg
+ MDAwMDAgbiAKMDAwMDAxNDQ5MyAwMDAwMCBuIAowMDAwMDE0NTEzIDAwMDAwIG4gCjAw
+ MDAwMTUwNjQgMDAwMDAgbiAKMDAwMDAxODU2NiAwMDAwMCBuIAowMDAwMDE5MDY5IDAw
+ MDAwIG4gCjAwMDAwMDUxODkgMDAwMDAgbiAKMDAwMDA0NDkwNCAwMDAwMCBuIAowMDAw
+ MDYyNDkwIDAwMDAwIG4gCjAwMDAwMDUwMzUgMDAwMDAgbiAKMDAwMDAwNDg4MSAwMDAw
+ MCBuIAowMDAwMDA2MTA1IDAwMDAwIG4gCjAwMDAwMDUzNDcgMDAwMDAgbiAKMDAwMDAw
+ NjI2NCAwMDAwMCBuIAowMDAwMDA1OTQ4IDAwMDAwIG4gCjAwMDAwMDU4MDIgMDAwMDAg
+ biAKMDAwMDAwNTUwMSAwMDAwMCBuIAowMDAwMDA1NjQ3IDAwMDAwIG4gCjAwMDAwMzc4
+ NjggMDAwMDAgbiAKMDAwMDAzNzkxNSAwMDAwMCBuIAowMDAwMDQ2Njk3IDAwMDAwIG4g
+ CjAwMDAwNTIzNjAgMDAwMDAgbiAKMDAwMDA1MTcxNSAwMDAwMCBuIAowMDAwMDUxMjky
+ IDAwMDAwIG4gCjAwMDAwNTA2NDcgMDAwMDAgbiAKMDAwMDA0OTg0MCAwMDAwMCBuIAow
+ MDAwMDQ5NDE3IDAwMDAwIG4gCjAwMDAwNDg2MTAgMDAwMDAgbiAKMDAwMDA0Nzk2NSAw
+ MDAwMCBuIAowMDAwMDQ3NTQyIDAwMDAwIG4gCjAwMDAwNDY4OTcgMDAwMDAgbiAKMDAw
+ MDA0NDAzOSAwMDAwMCBuIAowMDAwMDMzMDgyIDAwMDAwIG4gCjAwMDAwMzc4NDcgMDAw
+ MDAgbiAKMDAwMDAyMTUxMiAwMDAwMCBuIAowMDAwMDIyOTA4IDAwMDAwIG4gCjAwMDAw
+ MjcyMzIgMDAwMDAgbiAKMDAwMDAyODkwMCAwMDAwMCBuIAowMDAwMDI4OTIxIDAwMDAw
+ IG4gCjAwMDAwMzAwMzcgMDAwMDAgbiAKMDAwMDAzMDA1NyAwMDAwMCBuIAowMDAwMDMz
+ MDYxIDAwMDAwIG4gCjAwMDAwMjQzODUgMDAwMDAgbiAKMDAwMDAyNTQxOCAwMDAwMCBu
+ IAowMDAwMDIyOTI5IDAwMDAwIG4gCjAwMDAwMjQzNjQgMDAwMDAgbiAKMDAwMDAyNTQz
+ OCAwMDAwMCBuIAowMDAwMDI3MjExIDAwMDAwIG4gCjAwMDAwMzc5NjIgMDAwMDAgbiAK
+ MDAwMDA0NDAxOCAwMDAwMCBuIAowMDAwMDQ0MDc2IDAwMDAwIG4gCjAwMDAwNDQ4ODQg
+ MDAwMDAgbiAKMDAwMDA0NDk0MSAwMDAwMCBuIAowMDAwMDQ1NzgxIDAwMDAwIG4gCjAw
+ MDAwNDU4MzcgMDAwMDAgbiAKMDAwMDA0NjY3NyAwMDAwMCBuIAowMDAwMDQ2ODE3IDAw
+ MDAwIG4gCjAwMDAwNDc1MjIgMDAwMDAgbiAKMDAwMDA0Nzk0NSAwMDAwMCBuIAowMDAw
+ MDQ4NTkwIDAwMDAwIG4gCjAwMDAwNDkzOTcgMDAwMDAgbiAKMDAwMDA0OTgyMCAwMDAw
+ MCBuIAowMDAwMDUwNjI3IDAwMDAwIG4gCjAwMDAwNTEyNzIgMDAwMDAgbiAKMDAwMDA1
+ MTY5NSAwMDAwMCBuIAowMDAwMDUyMzQwIDAwMDAwIG4gCjAwMDAwNTI5NTkgMDAwMDAg
+ biAKMDAwMDA1MzE0MiAwMDAwMCBuIAowMDAwMDUzMDI3IDAwMDAwIG4gCjAwMDAwNTMx
+ MjAgMDAwMDAgbiAKMDAwMDA1MzIzNSAwMDAwMCBuIAowMDAwMDYxOTY2IDAwMDAwIG4g
+ CjAwMDAwNjE5ODcgMDAwMDAgbiAKMDAwMDA2MjIxOCAwMDAwMCBuIAowMDAwMDYyNjcw
+ IDAwMDAwIG4gCjAwMDAwNjI3MjIgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA5NSAv
+ Um9vdCA3NSAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPGYzYTI5Yjg5OTMxMWUxMmY1NDY5
+ NGJlN2ZlNThmMDgyPgo8ZjNhMjliODk5MzExZTEyZjU0Njk0YmU3ZmU1OGYwODI+IF0g
+ Pj4Kc3RhcnR4cmVmCjYyODM5CiUlRU9GCjEgMCBvYmoKPDwvQXV0aG9yIChSb2JlcnQg
+ THkpL0NyZWF0aW9uRGF0ZSAoRDoyMDExMDkxOTE3MTUwMFopL0NyZWF0b3IgKE9tbmlH
+ cmFmZmxlIFByb2Zlc3Npb25hbCA1LjMuMikvTW9kRGF0ZSAoRDoyMDExMTEwNzE4MzUw
+ MFopL1Byb2R1Y2VyIDkzIDAgUiAvVGl0bGUgKHJzX2dyYXBoaWNzKT4+CmVuZG9iagp4
+ cmVmCjEgMQowMDAwMDY0ODk3IDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzxmM2EyOWI4
+ OTkzMTFlMTJmNTQ2OTRiZTdmZTU4ZjA4Mj4gPGYzYTI5Yjg5OTMxMWUxMmY1NDY5NGJl
+ N2ZlNThmMDgyPl0gL0luZm8gMSAwIFIgL1ByZXYgNjI4MzkgL1Jvb3QgNzUgMCBSIC9T
+ aXplIDk1Pj4Kc3RhcnR4cmVmCjY1MDc1CiUlRU9GCg==
+ </data>
+ <key>QuickLookThumbnail</key>
+ <data>
+ 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
+ </data>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>ExpandedCanvases</key>
+ <array>
+ <dict>
+ <key>name</key>
+ <string>Canvas 1</string>
+ </dict>
+ </array>
+ <key>Frame</key>
+ <string>{{516, 97}, {969, 926}}</string>
+ <key>ListView</key>
+ <true/>
+ <key>OutlineWidth</key>
+ <integer>142</integer>
+ <key>RightSidebar</key>
+ <false/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>120</integer>
+ <key>VisibleRegion</key>
+ <string>{{-129, -19}, {834, 772}}</string>
+ <key>Zoom</key>
+ <real>1</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ </array>
+ </dict>
+ <key>saveQuickLookFiles</key>
+ <string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/rs_graphics.png b/docs/html/images/rs_graphics.png
new file mode 100644
index 0000000..fde58d2
--- /dev/null
+++ b/docs/html/images/rs_graphics.png
Binary files differ
diff --git a/docs/html/images/rs_overview.graffle b/docs/html/images/rs_overview.graffle
new file mode 100644
index 0000000..5613744
--- /dev/null
+++ b/docs/html/images/rs_overview.graffle
@@ -0,0 +1,3012 @@
+<?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>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGrafflePro</string>
+ <string>138.28.0.154505</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2011-09-07 14:32:49 -0700</string>
+ <key>Creator</key>
+ <string>Robert Ly</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1.0000 in</string>
+ <key>GraphDocumentVersion</key>
+ <integer>6</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>214</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ <key>ID</key>
+ <integer>227</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>6.25</real>
+ <key>Points</key>
+ <array>
+ <string>{367.375, 325.998}</string>
+ <string>{332.375, 325.998}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ </dict>
+ <key>ID</key>
+ <integer>226</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{138.375, 427.17}</string>
+ <string>{138.375, 454.17}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>157</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{43.375, 454.17}, {190, 50.1697}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.274119</string>
+ <key>g</key>
+ <string>0.950739</string>
+ <key>r</key>
+ <string>0.787494</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.165602</string>
+ <key>g</key>
+ <string>0.586124</string>
+ <key>r</key>
+ <string>0.428309</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript Graphics and Compute Engine}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{303.368, 423.5}, {70, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>224</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>223</integer>
+ <key>Position</key>
+ <real>0.61347693204879761</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKwpSZWFkL1dyaXRlhoQCaUkBCpKEhIQMTlNE
+ aWN0aW9uYXJ5AJSEAWkDkoSWlgdOU0NvbG9yhpKEhIQH
+ TlNDb2xvcgCUhAFjA4QCZmYAg2ZmJj+GkoSWlgZOU0Zv
+ bnSGkoSEhAZOU0ZvbnQelJkchAVbMjhjXQYAAAAUAAAA
+ //5IAGUAbAB2AGUAdABpAGMAYQCEAWYMmwCbAZsAmwCG
+ koSWlhBOU1BhcmFncmFwaFN0eWxlhpKEhIQQTlNQYXJh
+ Z3JhcGhTdHlsZQCUhARDQ0BTAgCEhIQHTlNBcnJheQCU
+ mQyShISECU5TVGV4dFRhYgCUhAJDZgAchpKEpaQAOIaS
+ hKWkAFSGkoSlpABwhpKEpaQAgYwAhpKEpaQAgagAhpKE
+ paQAgcQAhpKEpaQAgeAAhpKEpaQAgfwAhpKEpaQAgRgB
+ hpKEpaQAgTQBhpKEpaQAgVABhoYAhoaG
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Read/Write}</string>
+ <key>alpha</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ <integer>10</integer>
+ <real>0.64999997615814209</real>
+ </array>
+ </array>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>225</integer>
+ <key>Info</key>
+ <integer>7</integer>
+ </dict>
+ <key>ID</key>
+ <integer>223</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>31</real>
+ <key>Points</key>
+ <array>
+ <string>{413.275, 381.998}</string>
+ <string>{258.125, 435.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Info</key>
+ <integer>16</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{306.62, 201.5}, {70, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>222</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>221</integer>
+ <key>Position</key>
+ <real>0.60332739353179932</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKwpSZWFkL1dyaXRlhoQCaUkBCpKEhIQMTlNE
+ aWN0aW9uYXJ5AJSEAWkDkoSWlgdOU0NvbG9yhpKEhIQH
+ TlNDb2xvcgCUhAFjA4QCZmYAg2ZmJj+GkoSWlgZOU0Zv
+ bnSGkoSEhAZOU0ZvbnQelJkchAVbMjhjXQYAAAAUAAAA
+ //5IAGUAbAB2AGUAdABpAGMAYQCEAWYMmwCbAZsAmwCG
+ koSWlhBOU1BhcmFncmFwaFN0eWxlhpKEhIQQTlNQYXJh
+ Z3JhcGhTdHlsZQCUhARDQ0BTAgCEhIQHTlNBcnJheQCU
+ mQyShISECU5TVGV4dFRhYgCUhAJDZgAchpKEpaQAOIaS
+ hKWkAFSGkoSlpABwhpKEpaQAgYwAhpKEpaQAgagAhpKE
+ paQAgcQAhpKEpaQAgeAAhpKEpaQAgfwAhpKEpaQAgRgB
+ hpKEpaQAgTQBhpKEpaQAgVABhoYAhoaG
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Read/Write}</string>
+ <key>alpha</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ <integer>10</integer>
+ <real>0.64999997615814209</real>
+ </array>
+ </array>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>155</integer>
+ <key>Info</key>
+ <integer>7</integer>
+ </dict>
+ <key>ID</key>
+ <integer>221</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{410.256, 272.907}</string>
+ <string>{258.125, 213.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Info</key>
+ <integer>13</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{278.375, 306.998}, {54, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>214</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>213</integer>
+ <key>Position</key>
+ <real>0.48846337199211121</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKw5NZW1vcnkKQmluZGluZ4aEAmlJAQ6ShISE
+ DE5TRGljdGlvbmFyeQCUhAFpA5KElpYHTlNDb2xvcoaS
+ hISEB05TQ29sb3IAlIQBYwOEAmZmAINmZiY/hpKElpYG
+ TlNGb250hpKEhIQGTlNGb250HpSZHIQFWzI4Y10GAAAA
+ FAAAAP/+SABlAGwAdgBlAHQAaQBjAGEAhAFmDJsAmwGb
+ AJsAhpKElpYQTlNQYXJhZ3JhcGhTdHlsZYaShISEEE5T
+ UGFyYWdyYXBoU3R5bGUAlIQEQ0NAUwIAhISEB05TQXJy
+ YXkAlJkMkoSEhAlOU1RleHRUYWIAlIQCQ2YAHIaShKWk
+ ADiGkoSlpABUhpKEpaQAcIaShKWkAIGMAIaShKWkAIGo
+ AIaShKWkAIHEAIaShKWkAIHgAIaShKWkAIH8AIaShKWk
+ AIEYAYaShKWkAIE0AYaShKWkAIFQAYaGAIaGhg==
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Memory\
+Binding}</string>
+ <key>alpha</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ <integer>14</integer>
+ <real>0.64999997615814209</real>
+ </array>
+ </array>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>225</integer>
+ <key>Info</key>
+ <integer>11</integer>
+ </dict>
+ <key>ID</key>
+ <integer>213</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{258.125, 263.815}</string>
+ <string>{305.375, 334}</string>
+ <string>{258.125, 393.3}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>155</integer>
+ <key>Info</key>
+ <integer>12</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{328.398, 152.3}, {66, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>199</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>198</integer>
+ <key>Position</key>
+ <real>0.34207895398139954</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKxFNZW1vcnkgQWxsb2NhdGlvboaEAmlJARGS
+ hISEDE5TRGljdGlvbmFyeQCUhAFpA5KElpYHTlNDb2xv
+ coaShISEB05TQ29sb3IAlIQBYwOEAmZmAINmZiY/hpKE
+ lpYGTlNGb250hpKEhIQGTlNGb250HpSZHIQFWzI4Y10G
+ AAAAFAAAAP/+SABlAGwAdgBlAHQAaQBjAGEAhAFmDJsA
+ mwGbAJsAhpKElpYQTlNQYXJhZ3JhcGhTdHlsZYaShISE
+ EE5TUGFyYWdyYXBoU3R5bGUAlIQEQ0NAUwIAhISEB05T
+ QXJyYXkAlJkMkoSEhAlOU1RleHRUYWIAlIQCQ2YAHIaS
+ hKWkADiGkoSlpABUhpKEpaQAcIaShKWkAIGMAIaShKWk
+ AIGoAIaShKWkAIHEAIaShKWkAIHgAIaShKWkAIH8AIaS
+ hKWkAIEYAYaShKWkAIE0AYaShKWkAIFQAYaGAIaGhg==
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Memory Allocation}</string>
+ <key>alpha</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ <integer>17</integer>
+ <real>0.64999997615814209</real>
+ </array>
+ </array>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Info</key>
+ <integer>6</integer>
+ </dict>
+ <key>ID</key>
+ <integer>198</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{258.125, 171.3}</string>
+ <string>{462.375, 269.998}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>Ball</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>155</integer>
+ <key>Info</key>
+ <integer>11</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{367.375, 269.998}, {190, 112}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>200</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.628571</string>
+ <key>g</key>
+ <string>0.768599</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.236788</string>
+ <key>g</key>
+ <string>0.532236</string>
+ <key>r</key>
+ <string>0.990271</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.131021</string>
+ <key>g</key>
+ <string>0.363196</string>
+ <key>r</key>
+ <string>0.725948</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Memory}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>225</integer>
+ </dict>
+ <key>ID</key>
+ <integer>203</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{138.375, 309.5}</string>
+ <string>{138.375, 340}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>155</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>201</integer>
+ <key>Info</key>
+ <integer>6</integer>
+ </dict>
+ <key>ID</key>
+ <integer>196</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPoint</key>
+ <string>{0, 0}</string>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{138.375, 208.17}</string>
+ <string>{138.375, 233.208}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>202</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{43.375, 158}, {190, 50.1697}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>202</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Android Application Code}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{43.375, 233.208}, {190, 50.1697}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>201</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.274119</string>
+ <key>g</key>
+ <string>0.950739</string>
+ <key>r</key>
+ <string>0.787494</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.165602</string>
+ <key>g</key>
+ <string>0.586124</string>
+ <key>r</key>
+ <string>0.428309</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Reflected Layer Classes }</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{43.375, 377}, {190, 50.1697}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>157</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.93512</string>
+ <key>g</key>
+ <string>0.472602</string>
+ <key>r</key>
+ <string>0.333854</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Renderscript Code}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{18.625, 118}, {239.5, 191}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>155</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>196</integer>
+ <key>Position</key>
+ <real>0.21288931369781494</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+Android Framework\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{18.625, 340}, {239.5, 191}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>225</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 1}</string>
+ <string>{1, -1}</string>
+ <string>{-1, -1}</string>
+ <string>{-1, 1}</string>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ <string>{-0.5, -0.233518}</string>
+ <string>{-0.491442, 0.260063}</string>
+ <string>{0.507118, -0.224086}</string>
+ <string>{0.507118, 0.267179}</string>
+ <string>{-0.27431, -0.474028}</string>
+ <string>{0.27978, -0.478478}</string>
+ <string>{0.293938, 0.543044}</string>
+ <string>{-0.286232, 0.553804}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ <key>FillType</key>
+ <integer>2</integer>
+ <key>GradientAngle</key>
+ <real>90</real>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.35</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Fuzziness</key>
+ <real>2.3972222805023193</real>
+ <key>ShadowVector</key>
+ <string>{0, 1}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.472997</string>
+ <key>g</key>
+ <string>0.473094</string>
+ <key>r</key>
+ <string>0.473036</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \
+\
+Renderscript Runtime\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+\
+}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2011-11-29 09:13:03 -0800</string>
+ <key>Modifier</key>
+ <string>Robert Ly</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>coded</string>
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgWQCgRgDhg==</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>QuickLookPreview</key>
+ <data>
+ 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
+ GLjihSUSuy0/AuPdCMCYpWmZoplfsu4Z52Wp4IiIBSwAea1k4dLUelACIO4zSlkDV2SV
+ qBMonJiJSqCAgZ0/pQwlAOulqVtlbG2eG8vZU7iN9LP02P/eR/CGAF34jeQR6Y4t/8uH
+ BG0vv7cjG7LAdqpDOYBWHmjDvdgJK86vKdxHvNFETR2gR1DTciHLuVzIuWeaKAF+RrEz
+ IwsBt9TggeC2EQZ4CEWFn/GkswRyWwUNGSmzsAyFTsqjJjxSJj2mJSRKF24IyAx0ZUY4
+ R50UHkawQqdRICh9YGM0ER3cT2ZsbZlbhe1sNfse+7aOwBHQhkizMTx0x73OKUci8JDW
+ AA+hPJ4A0dQnAvUm+BMxIHCJdBY9mvo/vvP8VqJIq1NafKlVg5seZ0Jz+/6IYyxK4hd3
+ YUO1aqDFgXOR8v6Q6HbswoWMR3pQNBQo72oo8CSslqrZIUsX6eL19Wqv4XIlw118rYuE
+ Y9/2pVURpR84JU8mmEi+uh17ITSQEpIhBxUNoB5v54cSBwgI/UBwp5wL8g0P6hlU4scD
+ YUuqw/4h5dxeLks1gwnNYOvKbNDjDoZ2R/qbVmRz4I7wErFVjvCN0FP3NojNNb84H8K2
+ FijRcWkeMuEBFeVMicLGRClIC+DcSImPFE6rGaUd1/f/A1RDIwEKZW5kc3RyZWFtCmVu
+ ZG9iago2IDAgb2JqCjM4ODcKZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1Bh
+ cmVudCA0IDAgUiAvUmVzb3VyY2VzIDcgMCBSIC9Db250ZW50cyA1IDAgUiAvTWVkaWFC
+ b3ggWzAgMCA1NzYgNzMzXQo+PgplbmRvYmoKNyAwIG9iago8PCAvUHJvY1NldCBbIC9Q
+ REYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAvQ29sb3JTcGFjZSA8PCAv
+ Q3MxIDggMCBSCi9DczIgMTYgMCBSID4+IC9FeHRHU3RhdGUgPDwgL0dzMSAyNSAwIFIg
+ L0dzMiAyNiAwIFIgL0dzMyAyNyAwIFIgL0dzNCAyOCAwIFIKPj4gL0ZvbnQgPDwgL0Yy
+ LjAgMjMgMCBSIC9GMS4wIDE3IDAgUiA+PiAvWE9iamVjdCA8PCAvSW0zIDEzIDAgUiAv
+ SW0xIDkgMCBSCi9JbTIgMTEgMCBSID4+IC9TaGFkaW5nIDw8IC9TaDEgMTUgMCBSIC9T
+ aDMgMTkgMCBSIC9TaDcgMjQgMCBSIC9TaDIgMTggMCBSCi9TaDUgMjEgMCBSIC9TaDYg
+ MjIgMCBSIC9TaDQgMjAgMCBSID4+ID4+CmVuZG9iagoxNSAwIG9iago8PCAvQ29sb3JT
+ cGFjZSA4IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgMTIwLjI1IC05NiAxMjAu
+ MjUgOTYuMDAwMDUgXQovRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNl
+ IF0gL0Z1bmN0aW9uIDI5IDAgUiA+PgplbmRvYmoKMTkgMCBvYmoKPDwgL0NvbG9yU3Bh
+ Y2UgOCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDk1LjUgLTI1LjU4NDg1IDk1
+ LjQ5OTk4IDI1LjU4NDg5Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBm
+ YWxzZSBdIC9GdW5jdGlvbiAzMCAwIFIgPj4KZW5kb2JqCjI0IDAgb2JqCjw8IC9Db2xv
+ clNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41IC0yNS41ODQ4
+ NSA5NS40OTk5OCAyNS41ODQ4OQpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5kIFsgZmFs
+ c2UgZmFsc2UgXSAvRnVuY3Rpb24gMzEgMCBSID4+CmVuZG9iagoxOCAwIG9iago8PCAv
+ Q29sb3JTcGFjZSA4IDAgUiAvU2hhZGluZ1R5cGUgMiAvQ29vcmRzIFsgMTIwLjI1IC05
+ NiAxMjAuMjUgOTYuMDAwMDUgXQovRG9tYWluIFsgMCAxIF0gL0V4dGVuZCBbIGZhbHNl
+ IGZhbHNlIF0gL0Z1bmN0aW9uIDMyIDAgUiA+PgplbmRvYmoKMjEgMCBvYmoKPDwgL0Nv
+ bG9yU3BhY2UgOCAwIFIgL1NoYWRpbmdUeXBlIDIgL0Nvb3JkcyBbIDk1LjUgLTI1LjU4
+ NDg1IDk1LjQ5OTk4IDI1LjU4NDg5Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBm
+ YWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAzMyAwIFIgPj4KZW5kb2JqCjIyIDAgb2JqCjw8
+ IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41IC01
+ Ni41IDk1LjQ5OTk4IDU2LjUwMDA0Cl0gL0RvbWFpbiBbIDAgMSBdIC9FeHRlbmQgWyBm
+ YWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAzNCAwIFIgPj4KZW5kb2JqCjIwIDAgb2JqCjw8
+ IC9Db2xvclNwYWNlIDggMCBSIC9TaGFkaW5nVHlwZSAyIC9Db29yZHMgWyA5NS41IC0y
+ NS41ODQ4NSA5NS40OTk5OCAyNS41ODQ4OQpdIC9Eb21haW4gWyAwIDEgXSAvRXh0ZW5k
+ IFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMzUgMCBSID4+CmVuZG9iagoxMyAwIG9i
+ ago8PCAvTGVuZ3RoIDE0IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2Ug
+ L1dpZHRoIDQwMiAvSGVpZ2h0IDI0NiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFj
+ ZSAzNiAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMzcgMCBSIC9CaXRzUGVy
+ Q29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCBAAAA
+ AMOg+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMvAwOHIAABCmVuZHN0cmVhbQplbmRvYmoK
+ MTQgMCBvYmoKMTMxNgplbmRvYmoKOSAwIG9iago8PCAvTGVuZ3RoIDEwIDAgUiAvVHlw
+ ZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDUwMiAvSGVpZ2h0IDQ2MiAv
+ SW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFjZSAzNiAwIFIgL0ludGVudCAvUGVyY2Vw
+ dHVhbCAvU01hc2sgMzkgMCBSIC9CaXRzUGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxh
+ dGVEZWNvZGUgPj4Kc3RyZWFtCngB7dABDQAAAMKg909tDwcRKAwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDPwMDnnIAAQplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjMwNTcKZW5k
+ b2JqCjExIDAgb2JqCjw8IC9MZW5ndGggMTIgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0
+ eXBlIC9JbWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMTIyIC9JbnRlcnBvbGF0ZQp0cnVl
+ IC9Db2xvclNwYWNlIDM2IDAgUiAvSW50ZW50IC9QZXJjZXB0dWFsIC9TTWFzayA0MSAw
+ IFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJl
+ YW0KeAHt0DEBAAAAwqD1T20JT4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+ AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+ YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+ DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAz
+ MD7aAAEKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago2NjUKZW5kb2JqCjQxIDAgb2Jq
+ Cjw8IC9MZW5ndGggNDIgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAv
+ V2lkdGggNDAyIC9IZWlnaHQgMTIyIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRl
+ cnBvbGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNv
+ ZGUgPj4Kc3RyZWFtCngB7ZdrU9pqFIVJQi7cBVSEgnpKKVYhnUPrHRipIJeDApUA/f9/
+ pKEzbcHL9ot915zp2p9g1pCVeR72SwgEOCRAAiRAAiRAAiRAAmoIaLpucJQS0HVNe06u
+ phumZTshjkoCjm0GjaedaIbpRGKJZIqjkEByIx4N20H9CSe6YUUS6UwuX9jlqCNQeJPd
+ TsVC5uM10Qw7ms7tlw4rrvuRo4qAWz06KBYyG2Hz4ZZohhXdLLx3j8/rjSZHHYHG5Wnt
+ qJhL+krWf991M5IuHNQuW51ur89RR6B3026euu+yCefBuWU4iez7WqPz391oPOGoIzAe
+ 3fa/nFf/2YquL4kWjKT33cvOcDL1vBlHHQHPux8NWicHOX9JVo8t3YplSsetwcSbzxeL
+ xTeOGgI+6/lsOurW3b10OLj6BKzbidzheeduuvRBI2p0/GhZKvk6uPpU9I+tVSOGk8xX
+ 6t2Rxw1RaOOnkvvh9UkpE1s3EkoW3EZv7HFBVBv5tpjf37ZPyzsxa21HQqldt9mf+EaU
+ 39FfXzif3nXOytn4IyMfaQTz5VgaOT94xsgMc09/d+svI6v/2g3/1FruCI0Avhw0AoAu
+ VtKIiAcQ0ggAulhJIyIeQEgjAOhiJY2IeAAhjQCgi5U0IuIBhDQCgC5W0oiIBxDSCAC6
+ WEkjIh5ASCMA6GIljYh4ACGNAKCLlTQi4gGENAKALlbSiIgHENIIALpYSSMiHkBIIwDo
+ YiWNiHgAIY0AoIuVNCLiAYQ0AoAuVtKIiAcQ0ggAulhJIyIeQEgjAOhiJY2IeAAhjQCg
+ i5U0IuIBhDQCgC5W0oiIBxDSCAC6WEkjIh5ASCMA6GIljYh4ACGNAKCLlTQi4gGENAKA
+ LlbSiIgHENIIALpYSSMiHkBIIwDoYiWNiHgAIY0AoIuVNCLiAYQ0AoAuVtKIiAcQ0ggA
+ ulhJIyIeQEgjAOhiJY2IeAAhjQCgi5U0IuIBhDQCgC5W0oiIBxDSCAC6WEkjIh5ASCMA
+ 6GIljYh4ACGNAKCLlTQi4gGENAKALlbSiIgHENIIALpYSSMiHkBIIwDoYiWNiHgAIY0A
+ oIuVNCLiAYQ0AoAuVtKIiAcQ0ggAulhJIyIeQEgjAOhiJY2IeAAhjQCgi5WiEW8hfpbh
+ nyDwy4gW+D1GKLXrNvsTGvkTyF+45tLIWTkbt9aNJAtuozf2FgtuyQsAXztezO9v26fl
+ ndi6ESeZr9S7I29OJa9N/IXrLXwjw+uTUiZmru6IbidyH847t1MaeQHga8e+kNnXwdWn
+ 4lZk3YgVy5Q+twYTb04nrw1duJ5/Is1n07uburuXCgdXd0QLhtN77kV7OJl6/sw4agj4
+ rKf3o37r+CCXcIzfT1r+K8NOZEu1entwOxqPJxxFBMbj0d2w1zqr7m9GTH3NiG6GU4Vy
+ 7eKqfdPt9TmKCPR63Zvr5olb3PFXZPXQCgQ0w4pu5kvVz2eXjUaTo4pAo35x+u/h2+xG
+ 6MGKLJXY0VR2792Ho0rV5agiUK0clt/mtxNhU19fEf8E87ckHE9vZ9/kCxx1BPK5na1k
+ zN+QR0KWSkw7HItvJP1JcRQQWJJOJuLRkBV8SoivRDeClu04IY46Ao5tmc/4+PHopWm6
+ bnAUEtB1XXviwFp7EOYbEiABEiABEiCB/y+B75ER7IQKZW5kc3RyZWFtCmVuZG9iago0
+ MiAwIG9iagoxMjQzCmVuZG9iagozOSAwIG9iago8PCAvTGVuZ3RoIDQwIDAgUiAvVHlw
+ ZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDUwMiAvSGVpZ2h0IDQ2MiAv
+ Q29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNv
+ bXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3YW1fV9R5G
+ cVmLxUlAkRS1TSdDGR5opFvJPLQ1yEMiKiD0/t/Ihho1wnK696Wz+bvp4ltj9MyPf7RO
+ nOhVoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWo
+ QAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEKVKACFfjfCowNBsOe
+ rcBgMDb2Xv+xwXA0MTk13ZMVmJocjQ/f4z42HE2dnDu1cKbnKrBwen52ZnJ88Hfug+HE
+ yVOLSxf/tfxZT1Vg+dML587MTY/+5nMfG07OLl78YuXq9bW1b3qiAms3rq1eWl46PTP6
+ y9c+NpyY/WT58trtu/cfPOypCjy4t37z2qWLC4fs7/yZbjA6ubi8evPeo80nT5/1VAWe
+ /rTxcH3t6wunpt79GT+cOnXh8s0Hmz+/3H71uqcq8Gp769njuze+PDv7zsc+Nn5y8Yu1
+ e5svXu/u7b3tqQrs7e1sP390Z/Xi4cd+7Ef8YGJuaeX2o+ev9/b3Dw4OfulpChxy7r/d
+ 3X5yf+3zxZnxY//1Npg8dfHq3c2Xu0fmqWvIfx1yxP7m+X9uXTr8EX9MfTi18K/r959s
+ 7/Wlu8R/Z9958eOdlaW5d9SnF5bXHjx9tdeHLlT/5WB/Z2tj/cr5uYnj3/r0mc/WHj57
+ fahuXP2P37S/+3LzuysX5v+q/k3q2l8dR+p3V9+n/la7+5897A/1Y/93bnj4E/7oW0/d
+ +asjdacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q6
+ 05VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS
+ 5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1
+ dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VX
+ pc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7O
+ a+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacr
+ r0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59
+ nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pO
+ V16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd
+ +zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfU
+ na68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16V
+ OvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+ziv
+ qTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68
+ KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdx
+ XlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtd
+ eVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu
+ 47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3
+ uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq
+ 3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym
+ 7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq
+ 1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5
+ Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTl
+ ValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP
+ 85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3p
+ yqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValz
+ H+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q6
+ 05VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS
+ 5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1
+ dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VX
+ pc59nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7O
+ a+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59nNfUna68KnXu47ym7nTlValzH+c1dacr
+ r0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pOV16VOvdxXlN3uvKq1LmP85q605VXpc59
+ nNfUna68KnXu47ym7nTlValzH+c1dacrr0qd+zivqTtdeVXq3Md5Td3pyqtS5z7Oa+pO
+ V16VOvdxXlN3uvKqP9THTvzpDafPfPbNw2ev9w74n+76cRZ4v/pa6h8n6Qf/rQ8O9ne3
+ Nr67cn5+4p1vfWH5xoOnr/YO+tg/GPGj+xsO1Xe2NtYvL80dVx9Mnf702r2ftnf3Y//o
+ UD/wL3xw+N6+efH49sq52dGxb30wOX9hdX1ja+dt7B+I+NGdD9H3914/++Hbrz45OX5M
+ fWw0e+7SzR+ebe++3e/ZCrzde7O1+f315YXp4Z/+BH/ixNj4zJnla+uPn2+/2dntuQrs
+ 7Lze+unBrZXz85ODY+onBhNzS5fW7j568vOLrZc9U4GtrRfPNh/+++ry4szx39aPPvbp
+ 0xe/vnHn/qMfNzZ7pgIbG49/+P7W1c/Pzk0Oj/22fvjdD0YzCxe+XF27dWf9bs9U4Lv1
+ 299eX1k+Oz91/M9yRz/sx4ajmVNnP/380sqV1Z6pwJXLK18tnz8zNzX+zu/qv7IPRlOz
+ pxbPLp2/0DMVOL907pMz8zOT44N3f77/xj4+MTUzOzffcxWYmz05PTn6y+/pR+ZHb2ww
+ HB9N9GwFRqPD7/zvPvTf2A/hD9+gpypwZPq7b3+tQAUqUIEKVKACFahABSpQgQpUoAIV
+ qEAFKlCBClSgAhWoQAUqUIEKVKACFahABSpQgQpUoAIVqEAFKlCBClSgAhWoQAUqUIEK
+ VKACFahABSpQgQpUoAIVqMD/WeC/aJaU4QplbmRzdHJlYW0KZW5kb2JqCjQwIDAgb2Jq
+ CjI3ODkKZW5kb2JqCjM3IDAgb2JqCjw8IC9MZW5ndGggMzggMCBSIC9UeXBlIC9YT2Jq
+ ZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNDAyIC9IZWlnaHQgMjQ2IC9Db2xvclNw
+ YWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0cnVlIC9CaXRzUGVyQ29tcG9uZW50
+ IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7ZdrU5J7HEXl4Y6Aoilq
+ 0c1QxwtNepTMS0eDvCQiAkLf/4scqKnAavemnj1zWr83vdhTq1nLP9TEBIcBDGAAAxjA
+ AAYwEI6BSBBEuVANBEEk8rO4kSAaTyRTaS5MA6lkPBb9cZNINJ6azE0VZrgQDRSm89lM
+ Mhb8oEkQTUxOzRaXHpUec+EZKD1cnJ/JpePfP5NINJmdXXpaXt+sVF5yYRmobG2sLZeK
+ 05n4/VcSiSayD0orld39w6NjLjwDRwfV7Y3lpcIgyfj3exCfnC2tbR+c1M/OL7jwDJy/
+ rx1XKy8Wp1L3PreiqanFle2j+ofr5k2LC8/ATbNxcbq/9WwuO/5IIrHJ2aeVg/pVq9Pt
+ 3nHhGeh2283Lk721pcEjGf3YChK5Ynn35LLV7fX6/f5HLhwDA9e9u07z7LDyZDYTG/0X
+ cJCcWlrfr193hj0oEk6OT5RhktvLf3eWBx9bo0WiqcKjzcOzZpcXEmKNL0naV+/2ysXc
+ eJF0oVQ5Or/p8kDCLvKx32s3atXVhVxi7I2kZx5Xji9agyKh/43+emCvc11/vbqY/67I
+ S4p4fjiGRfbXflLkzvN3+rupX4uM/q89OvjUGr4Rihh+OChikC6RFJF6DCNFDNIlkiJS
+ j2GkiEG6RFJE6jGMFDFIl0iKSD2GkSIG6RJJEanHMFLEIF0iKSL1GEaKGKRLJEWkHsNI
+ EYN0iaSI1GMYKWKQLpEUkXoMI0UM0iWSIlKPYaSIQbpEUkTqMYwUMUiXSIpIPYaRIgbp
+ EkkRqccwUsQgXSIpIvUYRooYpEskRaQew0gRg3SJpIjUYxgpYpAukRSRegwjRQzSJZIi
+ Uo9hpIhBukRSROoxjBQxSJdIikg9hpEiBukSSRGpxzBSxCBdIiki9RhGihikSyRFpB7D
+ SBGDdImkiNRjGClikC6RFJF6DCNFDNIlkiJSj2GkiEG6RFJE6jGMFDFIl0iKSD2GkSIG
+ 6RJJEanHMFLEIF0iKSL1GEaKGKRLJEWkHsNIEYN0iaSI1GMYKWKQLpEUkXoMI0UM0iWS
+ IlKPYaSIQbpEUkTqMYwUMUiXSIpIPYaRIgbpEkkRqccwUsQgXSIpIvUYRooYpEskRaQe
+ w0gRg3SJpIjUYxgpYpAukRSRegwjRQzSJZIiUo9hpIhBukRSROoxjBQxSJdIikg9hpEi
+ BukSSRGpxzBSxCBdIiki9RhGihikSyRFpB7DSBGDdImkiNRjGClikC6RFJF6DCNFDNIl
+ kiJSj2GkiEG6RFJE6jGMFDFIl0iKSD2GkSIG6RJJEanHMFLEIF0iKSL1GEaKGKRLJEWk
+ HsNIEYN0iaSI1GMYKWKQLpEUkXoMI0UM0iWSIlKPYaSIQbpEUkTqMYwUMUiXSIpIPYaR
+ IgbpEkkRqccwUsQgXSIpIvUYRooYpEskRaQew0gRg3SJpIjUYxgpYpAukRSRegwjRQzS
+ JZIiUo9hpIhBukRSROoxjBQxSJdIikg9hpEiBukSSRGpxzBSxCBdIiki9RhGihikSyRF
+ pB7DSBGDdImkiNRjGClikC6RFJF6DCNFDNIlkiJSj2GkiEG6RFJE6jGMFDFIl0iKSD2G
+ kSIG6RJJEanHMFLEIF0iKSL1GEaKGKRLJEWkHsNIEYN0iaSI1GMYKWKQLpEUkXoMI0UM
+ 0iWSIlKPYaSIQbpEUkTqMYwUMUiXSIpIPYaRIgbpEkkRqccwUsQgXSIpIvUYRooYpEsk
+ RaQew0gRg3SJpIjUYxgpYpAukRSRegwjRQzSJZIiUo9hpIhBukRSROoxjBQxSJdIikg9
+ hpEiBukSSRGpxzBSxCBdIiki9RhGihikSyRFpB7DSBGDdImkiNRjGClikC6RFJF6DCNF
+ DNIlkiJSj2GkiEG6RFJE6jGMFDFIl0iKSD2GkSIG6RJJEanHMFLEIF0ivxaJTHy7aHrm
+ 8cvji1a3L38v458w8NMiFYr8Cd+/+jP7/V6nUXu9upBPjL+RQmnr6Pym2+eR/Erhb94H
+ RdqNWnWlmBsrEqSmH24cvG92eiT5zcb1H9cf3N3t1elueT4bH30jQTK/uFatNdp3JNEK
+ f/M6CNLrti7evnr+YDI2WiQSz84vb7+9aHbuelyoBu66t436m81SIR399i+tiYlILDNT
+ 2qieXjZv2x0uRAPtdqvx/minvJBPBqNFJoJErrhc2T85+3DVuOZCM9BoXF3Uj/9ZL81m
+ xr5Gho8kPb30Ymvv8ORdrc6FZqBWO337Zmf9yVwuGR39Ghk8lyCeKSw+W6vs7FX3udAM
+ vK7uvtosl+byqbHv9eHnVyQaz0zNPXyyXF5d40IzsLpSfl5amMmlYuPfIp+SBPFUdmp2
+ rriwyIVmYKE4/2Amn0nGgnufWZ+TxBKpTDaX50I0kMtOppPx+98hwx7DiwTRWDzBhWog
+ Hh+8jx88kM9JBlEGF3DhGRgK/yKfXzGAAQxgAAMY+P8Z+A/zFAiFCmVuZHN0cmVhbQpl
+ bmRvYmoKMzggMCBvYmoKMTg0MQplbmRvYmoKMjUgMCBvYmoKPDwgL1R5cGUgL0V4dEdT
+ dGF0ZSAvQ0EgMC43ID4+CmVuZG9iagoyNiAwIG9iago8PCAvVHlwZSAvRXh0R1N0YXRl
+ IC9jYSAwLjcgPj4KZW5kb2JqCjI3IDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUgL2Nh
+ IDAuNjUgPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEg
+ Pj4KZW5kb2JqCjQzIDAgb2JqCjw8IC9MZW5ndGggNDQgMCBSIC9OIDMgL0FsdGVybmF0
+ ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AdVZZ1gU
+ zbLumU3AsqQl5xxFcpacJEgOgkha0pJzDkpSgiCIgICggAgighgIAiJgAkSCgBEJoiCo
+ YAIE4Q7q933nPuecf/fPneeZnnerqqtrp3q6p94BgG3ZLTjYH6YDICAwPNTKUIf3oIMj
+ L+4FoAQ0gBGIAUo3UliwtoWFKfivx/cJAO0qxyR3ff1Xs/+soPfwDCMBAFkganePMFIA
+ gq8DAOuQgkPDAUCtI/LhqPBgBKMfIJgxFAkQwS93sfdvvLKL3X9hDPqXjY2VLgAYVgAo
+ qN3cQr0BIAgict5Ikjfih6AHAJYh0IMcCADxIII1SD5uHgCwFSM2ewICgnZxH4JF3f/F
+ j/e/YDc39799url5/41//xekJzKwHjks2N8t5teP/8smwD8CuV+/DgakpQ70N9vNDTNy
+ Lni46ZkgV07k3A72/5UzxAZi9wy0tUZku3hPoLuZ+R+s4RVqYIVgpC9kERyus4uRewZ5
+ BYdb2PyRJ8b66JohmBqRF3iG6f/l55yvm/FuzmgQeXNohJUtggUR3B0Waa2PYGRGQW9i
+ fWzs/9h89fDU+yOHYS+ygdFvG5iBHG60OxYjknN+vyCT3RiQsWBFYAL8gSeIAKFIGwgk
+ gSnQBXp/WkngBdwQTSSiCwN+4C2CA5AeQUifIATz/rHT/TeJwa9+3ki//+2RF5AQ24i/
+ x/w9Gi8y5l8+ycADwX/J3ZAxdnW70YW5kJP/GfMvi11/v6KRrpdelN76Kya0MFoWrYDW
+ QaujNdAqgBfNjGYHkmh5tDJaG62JVkN0KsAAvEE8e/8V467/gGavyOKgGFU7H0S7+9/d
+ /9ICu1/W5L9//1sEgDy03LL8VwQAhHtGI88BALpBwTGhZG+fcF5t5Mn13MNrFEjau4dX
+ VlpGZlf9/+bYXbN+B/vF6tdaBDE//kcW0AiAMhmZj87/yNxPAtAuiTz79f/IhAuRtcEX
+ gAFBUkRo5G9/6N0LBlABWmSGsgFuIABEkfssCxSBGtAC+sAYmAMb4ACckfnjg8zBUBAF
+ 4sFRkA6ywElwGpSAClAFakEDaAYtoAPcAffAABgG4+AFmAbzYAmsgO9gE4IgHESAiBAb
+ xAMJQRKQLKQMaUD6kClkBTlArpA3FAhFQPFQCpQF5UMl0HmoDroKtUF3oIfQCPQMmoEW
+ oc/QDxgFU8OMMBcsDEvByrA2bALbwIdhbzgEjoVT4Ry4GK6EL8M34TvwADwOT8NL8DcU
+ QOFRzCg+lCRKGaWLMkc5orxQoahEVCaqEFWJuoJqR91HjaGmUcuoDTQWTUTzoiWRebof
+ bYsmoUPQiehsdAm6Fn0T3YceQ8+gV9DbGAKGEyOBUcUYYQ5ivDFRmHRMIaYGcwNzFzOO
+ mcd8x2KxzFgRrBJ2P9YB64uNw2Zjz2Ibsd3YEewc9hsOh2PDSeDUceY4N1w4Lh13BncZ
+ dxs3ipvHrVPgKXgoZCkMKBwpAimSKQopLlF0UYxSvKPYpKSjFKJUpTSn9KCMocylrKZs
+ p3xMOU+5SUVPJUKlTmVD5Ut1lKqY6grVXaqXVF/weDw/XgVviSfjj+CL8U34B/gZ/AY1
+ A7U4tS61E3UEdQ71Repu6mfUXwgEgjBBi+BICCfkEOoIvYQpwjoNkWYvjRGNB00STSnN
+ TZpRmo+0lLRCtNq0zrSxtIW012gf0y7TUdIJ0+nSudEl0pXStdFN0n2jJ9LL0JvTB9Bn
+ 01+if0i/wIBjEGbQZ/BgSGWoYuhlmCOiiAJEXSKJmEKsJt4lzjNiGUUYjRh9GbMYGxiH
+ GFeYGJjkmeyYoplKmTqZpplRzMLMRsz+zLnMzcwTzD9YuFi0WTxZMliusIyyrLFysGqx
+ erJmsjayjrP+YONl02fzY8tja2F7xY5mF2e3ZI9iL2e/y77MwcihxkHiyORo5njOCXOK
+ c1pxxnFWcQ5yfuPi5jLkCuY6w9XLtczNzK3F7ctdwN3FvchD5NHgIfMU8Nzmec/LxKvN
+ 689bzNvHu8LHybefL4LvPN8Q3ya/CL8tfzJ/I/8rASoBZQEvgQKBHoEVQR7BA4LxgvWC
+ z4UohZSFfISKhO4LrQmLCNsLHxNuEV4QYRUxEokVqRd5KUoQ1RQNEa0UfSKGFVMW8xM7
+ KzYsDosriPuIl4o/loAlFCXIEmclRvZg9qjsCdxTuWdSklpSWzJSsl5yZi/zXtO9yXtb
+ 9n6UEpRylMqTui+1La0g7S9dLf1ChkHGWCZZpl3ms6y4LEm2VPaJHEHOQC5JrlVuVV5C
+ 3lO+XP6pAlHhgMIxhR6Fn4pKiqGKVxQXlQSVXJXKlCaVGZUtlLOVH6hgVHRUklQ6VDZU
+ FVXDVZtVP6lJqvmpXVJb2Ceyz3Nf9b45dX51N/Xz6tMavBquGuc0pjX5NN00KzVntQS0
+ PLRqtN5pi2n7al/W/qgjrROqc0NnTVdVN0G3Ww+lZ6iXqTekz6Bvq1+iP2XAb+BtUG+w
+ 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
+ XVTdvD2qfQfvxTwo7W8fHB56Mfx0dPBJx8Tlp2ef5708NpU0HTMb9Sb6bdxC9PvDy8wf
+ aj6xrJBXqz6Pf1n7xvJdbs1iPWzjzI9HW7ifltvVf/KPBQTAgjz9MkAH4Zd8QAIoQDik
+ +2AW7EBc0D7oMJL789A95C2TAVaFSfAJuBWeRxFR2ghzU4WaQFMi7GIE+jJ6HsODOYQp
+ xkwgjIs9tgQ7hRPA+eKu4bYpjCmKKRYQxuQE5RyS8wKqFbw5vomaSB1DPUswI3TSSNNc
+ oOWhLaPjpqtGeIs+BhcijOTbngnHdIs5nEWaZYX1OlsCuxEHK8cyZx/XOe4kHhKvKZ8K
+ v7gAnyCPEJ+wmIiiqJGYi3iMRNGedslZKQZpY5l02V55jIKlYoMyUSVJdXUfWX1B01/r
+ u066Hqd+u6GLEd64w5RshjHPsgRWQdavbM3sepA9qfWQilO3s5nLjFs0idajykveu5ts
+ 4jvpTwpYDToawhTaGH4gYiXqTIxxHBTfmkhK2j6ak8KaWpkueawzwyZzPftKTuBJ8byx
+ U74FXwojir6diSrZKksvZ6yoOa9WOVYdUEN1sbZu/6XFy9lX5BvfXD1/zf+GXgt/G7p9
+ sWOkq7O7oaeyr+RewYO8/tzB3KGs4YRR5yfS498mm58FvBB7+XbqwrTXrPjc6nzHu7RF
+ vfery8c/fP5ktJK92vL51Zflrxvf5r4/XMtf37f+diN1Y+NH4I+5zYObt7cYt8hbXT8Z
+ f5J/dm1TbFtsF2+/3hHZCdpp2c1/mJec7O7uASBqHYR+nNrZ+SIMAC4fgJ95OzublTs7
+ P6uQYgP5BtLt//t7xa4xFuHcy27tov90/A/oHZP+CmVuZHN0cmVhbQplbmRvYmoKNDQg
+ MCBvYmoKNTk1MwplbmRvYmoKMzYgMCBvYmoKWyAvSUNDQmFzZWQgNDMgMCBSIF0KZW5k
+ b2JqCjQ1IDAgb2JqCjw8IC9MZW5ndGggNDYgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2
+ aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVUz2sTQRT+Nm6p
+ 0CIIWmsOsniQIklZq2hF1Db9EWJrDNsftkWQZDNJ1m426+4mtaWI5OLRKt5F7aEH/4Ae
+ evBkL0qFWkUo3qsoYqEXLfHNbky2perAzn7z3jfvfW923wANctI09YAE5A3HUqIRaWx8
+ Qmr8iACOoglBNCVV2+xOJAZBg3P5e+fYeg+BW1bDe/t3snetmtK2mgeE/UDgR5rZKrDv
+ F3EKWRICiDzfoSnHdAjf49jy7I85Tnl4wbUPKz3EWSJ8QDUtzn9NuFPNJdNAg0g4lPVx
+ Uj6c14uU1x0HaW5mxsgQvU+QprvM7qtioZxO9g6QvZ30fk6z3j7CIcILGa0/RriNnvWM
+ 1T/iYeGk5sSGPRwYNfT4YBW3Gqn4NcIUXxBNJ6JUcdkuDfGYrv1W8kqCcJA4ymRhgHNa
+ SE/XTG74uocFfSbXE6/id1ZR4XmPE2fe1N3vRdoCrzAOHQwaDJoNSFAQRQRhmLBQQIY8
+ GjE0snI/I6sGG5N7MnUkart0YkSxQXs23D23UaTdPP4oInGUQ7UIkvxB/iqvyU/lefnL
+ XLDYVveUrZuauvLgO8XlmbkaHtfTyONzTV58ldR2k1dHlqx5erya7Bo/7FeXMeaCNY/E
+ c7D78S1flcyXKYwUxeNV8+pLhHVaMTffn2x/Oz3iLs8utdZzrYmLN1abl2f9akj77qq8
+ k+ZV+U9e9fH8Z83EY+IpMSZ2iuchiZfFLvGS2EurC+JgbccInZWGKdJtkfok1WBgmrz1
+ L10/W3i9Rn8M9VGUGczSVIn3f8IqZDSduQ5v+o/bx/wX5PeK558oAi9s4MiZum1Tce8Q
+ oWWlbnOuAhe/0X3wtm5ro344/ARYPKsWrVI1nyC8ARx2h3oe6CmY05aWzTlShyyfk7rp
+ ymJSzFDbQ1JS1yXXZUsWs5lVYul22JnTHW4coTlC98SnSmWT+q/xEbD9sFL5+axS2X5O
+ GtaBl/pvwLz9RQplbmRzdHJlYW0KZW5kb2JqCjQ2IDAgb2JqCjczNwplbmRvYmoKOCAw
+ IG9iagpbIC9JQ0NCYXNlZCA0NSAwIFIgXQplbmRvYmoKNDcgMCBvYmoKPDwgL0xlbmd0
+ aCA0OCAwIFIgL04gMSAvQWx0ZXJuYXRlIC9EZXZpY2VHcmF5IC9GaWx0ZXIgL0ZsYXRl
+ RGVjb2RlID4+CnN0cmVhbQp4AYVST0gUURz+zTYShIhBhXiIdwoJlSmsrKDadnVZlW1b
+ ldKiGGffuqOzM9Ob2TXFkwRdojx1D6JjdOzQoZuXosCsS9cgqSAIPHXo+83s6iiEb3k7
+ 3/v9/X7fe0RtnabvOylBVHNDlSulp25OTYuDHylFHdROWKYV+OlicYyx67mSv7vX1mfS
+ 2LLex7V2+/Y9tZVlYCHqLba3EPohkWYAH5mfKGWAs8Adlq/YPgE8WA6sGvAjogMPmrkw
+ 09GcdKWyLZFT5qIoKq9iO0mu+/m5xr6LtYmD/lyPZtaOvbPqqtFM1LT3RKG8D65EGc9f
+ VPZsNRSnDeOcSEMaKfKu1d8rTMcRkSsQSgZSNWS5n2pOnXXgdRi7XbqT4/j2EKU+yWCo
+ ibXpspkdhX0AdirL7BDwBejxsmIP54F7Yf9bUcOTwCdhP2SHedatH/YXrlPge4Q9NeDO
+ FK7F8dqKH14tAUP3VCNojHNNxNPXOXOkiO8x1BmY90Y5pgsxd5aqEzeAO2EfWapmCrFd
+ +67qJe57AnfT4zvRmzkLXKAcSXKxFdkU0DwJWBR9i7BJDjw+zh5V4HeomMAcuYnczSj3
+ HtURG2ejUoFWeo1Xxk/jufHF+GVsGM+Afqx213t8/+njFXXXtj48+Y163DmuvZ0bVWFW
+ cWUL3f/HMoSP2Sc5psHToVlYa9h25A+azEywDCjEfwU+l/qSE1Xc1e7tuEUSzFA+LGwl
+ uktUbinU6j2DSqwcK9gAdnCSxCxaHLhTa7o5eHfYInpt+U1XsuuG/vr2evva8h5tyqgp
+ KBPNs0RmlLFbo+TdeNv9ZpERnzg6vue9ilrJ/klFED+FOVoq8hRV9FZQ1sRvZw5+G7Z+
+ XD+l5/VB/TwJPa2f0a/ooxG+DHRJz8JzUR+jSfCwaSHiEqCKgzPUTlRjjQPiKfHytFtk
+ kf0PQBn9ZgplbmRzdHJlYW0KZW5kb2JqCjQ4IDAgb2JqCjcwNAplbmRvYmoKMTYgMCBv
+ YmoKWyAvSUNDQmFzZWQgNDcgMCBSIF0KZW5kb2JqCjQgMCBvYmoKPDwgL1R5cGUgL1Bh
+ Z2VzIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdIC9Db3VudCAxIC9LaWRzIFsgMyAwIFIg
+ XSA+PgplbmRvYmoKNDkgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL091dGxpbmVzIDIg
+ MCBSIC9QYWdlcyA0IDAgUiAvVmVyc2lvbiAvMS40ID4+CmVuZG9iagozNSAwIG9iago8
+ PCAvTGVuZ3RoIDUwIDAgUiAvT3JkZXIgMSAvRW5jb2RlIFsgMCAxMzY0IF0gL0Z1bmN0
+ aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlCjggL0RlY29kZSBbIDAgMSAwIDEgMCAxIF0g
+ L0RvbWFpbiBbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL1NpemUgWyAxMzY1
+ Cl0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBtcKJVgFRAADQ7zL76kuz
+ RZbIIJJ1BqGUypItSynCF3Tq5DijMebNvHfPLW3spWOVjR342q4YLSprVXktHrkSZXiL
+ K1H1SywiuhSLS7EAuVBY/l4IBa35hQDhp5A3NvcpgP0QchZmPwS9cyGrl8/OwWbm/O47
+ n0H3jc+88dcozvjrw9Mz3nAuPft3yqVBXk05gBPuytrUhNM+5lIIJsfcz1fNbPIVxhGb
+ 3L4csTAP2UvdiSFr/oBNAI4P2G0mPtDdZ+KWx/qMxh4TQ1PqMdILyl1G+ktLXToKd4eO
+ 6r7o0Ca36QvwkTZtaIuOAKcirf3hFqXxmQqjef5EIfxInauHHilom2To2GCTNPOBDJoa
+ eCCPvycDkPrvyf0N0m8o4W8AP7sjUL0lzrT6bgkI64TPWG+dMBb31rdruNfs0xqut4qf
+ Qu2p4rs3uAfdCu6p4O6DMXfF7DLmPtBVxqwuYS7DnSUMrII5LXQo2LbNoajLNgfsJ7Lt
+ b9F2AvIbCq+1owplbmRzdHJlYW0KZW5kb2JqCjUwIDAgb2JqCjM4NAplbmRvYmoKMzQg
+ MCBvYmoKPDwgL0xlbmd0aCA1MSAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBd
+ IC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAx
+ IDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXpl
+ IFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AY3CCTdUcRgH
+ 4C8mEolEIpGSkpKSEolEIhljxqxmDGNm7Pu+71tf6/29neuY073jf+99n/Pw3wTbjPOl
+ cIwvTV7E2HCMLySjfKF7HmXTo3wuOcJnwhE+M3kaYcNhPpUM86nuSZhNh/hE8DjEx0Oy
+ QT42eRRkwwAfCfv5KPnQz6Z9fCh44OMDr7iHD1T3PWw4yPvCbt5P3nOzVRfvXceeS33X
+ hd0BcSd2VXecSN2PHUkHdq5uO2CzD9t2t/qg/SPbiy3VzV6k/o1N4R5s9mDDdjc27K53
+ Q/tLtgvrqmtdSP0Ta8KdWOvEqu0OrNpd6YD2h3g7Vm5cbkfq71gWbsNyG5YkW7FkebEV
+ 2m/iLVg0XmiB+lcsSDZjoRnzkk2YtzzXhOtfMCfZiDnj2Uaof8as8CfMSDZgxvJ0A65/
+ xLRwPaZ1p+qh/gFTwu8xKVmHSfMTdfj/HSaEazGhO14L9bcYF36DhHANEoqUqKG4/muK
+ C1dTXDdWTaZfUUzyJY0JV9GYyWgVGb6gqGQlRXVHK8n0cxqVHXlGohU0YjJSQYZPKSJc
+ TpHk4XIyXUbDguEyCj8RL6WwaqiUDB9TSLiEQslDJWS1mIbsBosp+Ei8iIKqgSIyfEgB
+ 4UIKJPsLyWoB+e36Csj3QDyffKrefEp9n7ySeeS96skjm7nksTuYS9p7sjk0qOrOodR3
+ yS2cTe5sctnOIpfdgSzS3hHPpIEbnZmU+jY5hTPImUH9kunUb9mRTtpb4mnkSPsHinMK
+ nAplbmRzdHJlYW0KZW5kb2JqCjUxIDAgb2JqCjU3MgplbmRvYmoKMzMgMCBvYmoKPDwg
+ L0xlbmd0aCA1MiAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlv
+ blR5cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9E
+ b21haW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpd
+ IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AaXChVJCUQBAwb+2u7u7sekG
+ FQMDW7ED61OOMTL48MWNnU1+kLSY+OD7u+L4O8XfiAuPvWH3lZjt6CsSX4gaR15QnCOS
+ I6w9lCP0rD74jOETQZmBJ+w+ErDtf0T0A/5/fQ+ovMf303uPZs8dOt13GN7ilrl6i+Ub
+ Vp2u3CD0mhWzy9dIv2I5f+kKzYtZdC5kKbxkQfL8JeYvmBfoukDoOS6zc+dIP2Muf/YM
+ rafM6J0+5fcJ0/KnTjB/zJTAyWOcHzFpceIIuYdM/Dl+iPoM4xnG9I5m+H3AqPyRA0zu
+ MyJ2eB+HewxbH9pD4i5DxoO7qE8zmGZAb3+a7zuK+3Yovk2f8N5tHG7Ra71nC4mb9Bh3
+ b6I4RffPrhQ6O1N0bqjv2KD4Oh3C29exu0a77bY1RCdp+7c1icoErfktCXQ2J2iOq2+K
+ YxijSWZjDMtRGp02RBEaocFsfQSVYerz68LorA2hsyZEYZAaydVBLAeodloVQKifKrOV
+ fqT7qPyzwod6L+V6y7wUeiiTXOrBvJtSgSVuvn4CXuWIVQplbmRzdHJlYW0KZW5kb2Jq
+ CjUyIDAgb2JqCjQxMAplbmRvYmoKMzIgMCBvYmoKPDwgL0xlbmd0aCA1MyAwIFIgL09y
+ ZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNh
+ bXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21haW4gWyAwIDEgXSAvUmFu
+ Z2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9GaWx0ZXIgL0ZsYXRlRGVj
+ b2RlID4+CnN0cmVhbQp4Aa3BBwKBAABA0ftfSTRUtDWMFu00dQV34L+3bT/6bB/OylmW
+ daHMy8yZpnmijNPIGUDv4c3pQV3fUdqu5TRN21DqpuZUVV1RyqrkFKBX8eI8Qfkzp2R5
+ xknTLKUkacKJ4ySmPOIH5w663W+cKyi6RpQwCjlBEAYUP/A5F5B38TguyHEdjg2ybIti
+ WibIMA3K2ThzTiD9pHM0kKqpnCNIOSoUWZFBkixRREnkHED7w54jgHbC7n9fqv5GzApl
+ bmRzdHJlYW0KZW5kb2JqCjUzIDAgb2JqCjE4OAplbmRvYmoKMzEgMCBvYmoKPDwgL0xl
+ bmd0aCA1NCAwIFIgL09yZGVyIDEgL0VuY29kZSBbIDAgMTM2NCBdIC9GdW5jdGlvblR5
+ cGUgMCAvQml0c1BlclNhbXBsZQo4IC9EZWNvZGUgWyAwIDEgMCAxIDAgMSBdIC9Eb21h
+ aW4gWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9TaXplIFsgMTM2NQpdIC9G
+ aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AbXCiVYBUQAA0O8y++pLs0WWyCCS
+ dQahlMqSLUspwhd06uQ4ozHmzbx3zy1t7KVjlY0d+NquGC0qa1V5LR65EmV4iytR9Uss
+ IroUi0uxALlQWP5eCAWt+YUA4aeQNzb3KYD9EHIWZj8EvXMhq5fPzsFm5vzuO59B943P
+ vPHXKM7468PTM95wLj37d8qlQV5NOYAT7sra1ITTPuZSCCbH3M9XzWzyFcYRm9y+HLEw
+ D9lL3Ykha/6ATQCOD9htJj7Q3Wfilsf6jMYeE0NT6jHSC8pdRvpLS106CneHjuq+6NAm
+ t+kL8JE2bWiLjgCnIq394Ral8ZkKo3n+RCH8SJ2rhx4paJtk6NhgkzTzgQyaGnggj78n
+ A5D678n9DdJvKOFvAD+7I1C9Jc60+m4JCOuEz1hvnTAW99a3a7jX7NMarreKn0LtqeK7
+ N7gH3QruqeDugzF3xewy5j7QVcasLmEuw50lDKyCOS10KNi2zaGoyzYH7Cey7W/RdgLy
+ GwqvtaMKZW5kc3RyZWFtCmVuZG9iago1NCAwIG9iagozODQKZW5kb2JqCjMwIDAgb2Jq
+ Cjw8IC9MZW5ndGggNTUgMCBSIC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVu
+ Y3Rpb25UeXBlIDAgL0JpdHNQZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEg
+ XSAvRG9tYWluIFsgMCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEz
+ NjUKXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGlwoVSQlEAQMG/tru7
+ u7HpBhUDA1uxA+tTjjEy+PDFjZ1NfpC0mPjg+7vi+DvF34gLj71h95WY7egrEl+IGkde
+ UJwjkiOsPZQj9Kw++IzhE0GZgSfsPhKw7X9E9AP+f30PqLzH99N7j2bPHTrddxje4pa5
+ eovlG1adrtwg9JoVs8vXSL9iOX/pCs2LWXQuZCm8ZEHy/CXmL5gX6LpA6Dkus3PnSD9j
+ Ln/2DK2nzOidPuX3CdPyp04wf8yUwMljnB8xaXHiCLmHTPw5foj6DOMZxvSOZvh9wKj8
+ kQNM7jMidngfh3sMWx/aQ+IuQ8aDu6hPM5hmQG9/mu87ivt2KL5Nn/DebRxu0Wu9ZwuJ
+ m/QYd2+iOEX3z64UOjtTdG6o79ig+DodwtvXsbtGu+22NUQnafu3NYnKBK35LQl0Nido
+ jqtvimMYo0lmYwzLURqdNkQRGqHBbH0ElWHq8+vC6KwNobMmRGGQGsnVQSwHqHZaFUCo
+ nyqzlX6k+6j8s8KHei/lesu8FHook1zqwbybUoElbr5+Al7liFUKZW5kc3RyZWFtCmVu
+ ZG9iago1NSAwIG9iago0MTAKZW5kb2JqCjI5IDAgb2JqCjw8IC9MZW5ndGggNTYgMCBS
+ IC9PcmRlciAxIC9FbmNvZGUgWyAwIDEzNjQgXSAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQ
+ ZXJTYW1wbGUKOCAvRGVjb2RlIFsgMCAxIDAgMSAwIDEgXSAvRG9tYWluIFsgMCAxIF0g
+ L1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvU2l6ZSBbIDEzNjUKXSAvRmlsdGVyIC9GbGF0
+ ZURlY29kZSA+PgpzdHJlYW0KeAGtwQcCgQAAQNH7X0k0VLQ1jBbtNHUFd+C/t20/+mwf
+ zspZlnWhzMvMmaZ5oozTyBlA7+HN6UFd31HaruU0TdtQ6qbmVFVdUcqq5BSgV/HiPEH5
+ M6dkecZJ0yylJGnCieMkpjziB+cOut1vnCsoukaUMAo5QRAGFD/wOReQd/E4LshxHY4N
+ smyLYlomyDANytk4c04g/aRzNJCqqZwjSDkqFFmRQZIsUURJ5BxA+8OeI4B2wu5/X6r+
+ RswKZW5kc3RyZWFtCmVuZG9iago1NiAwIG9iagoxODgKZW5kb2JqCjIgMCBvYmoKPDwg
+ L0xhc3QgNTcgMCBSIC9GaXJzdCA1OCAwIFIgPj4KZW5kb2JqCjU4IDAgb2JqCjw8IC9Q
+ YXJlbnQgNTkgMCBSIC9Db3VudCAwIC9EZXN0IFsgMyAwIFIgL1hZWiAwIDczMyAwIF0g
+ L1RpdGxlIChDYW52YXMgMSkKPj4KZW5kb2JqCjU5IDAgb2JqCjw8ID4+CmVuZG9iago1
+ NyAwIG9iago8PCAvUGFyZW50IDU5IDAgUiAvQ291bnQgMCAvRGVzdCBbIDMgMCBSIC9Y
+ WVogMCA3MzMgMCBdIC9UaXRsZSAoQ2FudmFzIDEpCj4+CmVuZG9iago2MCAwIG9iago8
+ PCAvTGVuZ3RoIDYxIDAgUiAvTGVuZ3RoMSAxMDM5MiAvRmlsdGVyIC9GbGF0ZURlY29k
+ ZSA+PgpzdHJlYW0KeAG9Wnl4U9eVP/e+VZstydoXS0KWZHlfwNjYYMXYxiw2ZglYNAbb
+ YDAEJ0DALFOok0AAh5AQwhJI05IFDJQgjBtEKAzNmJJMM03SoSSl6bSZkjbTL/7SmSFt
+ B5A05z0ZB/y1+fJHvr6nc/fl3N8999xz79PqVWvaQQPdwEDjvNYVi0F+/H8CIL0LO1tX
+ JONpIvrvLOxa7U7GuUwAZvniFUs6k3HxOQClc8ny9UP1DZis7+5ob12UzIfb6Jd0YEIy
+ Tkajn9HRuXpdMq7vR3/28ocXDuWnXcF4TmfruqH+4SOMux9q7WxPlve/g37GiocfWT0U
+ 70Z/2opV7UPlSRPy9y4QTDXCw6CAB0EAClp8mwGET5VOYDFXysdnUY5q94LUii9AJw0T
+ YEH907L/E8+Prv61/XZAtUv8P0xQ3Ckv+XwwHgRQE8wfVO0azpHroWOMwqzsKExGqkQa
+ g5SdfZ8FuslheAbp+0gMLCVPwnqk7UjPI7HDoaMYO0ue7GPF0BtkPdjIlJCKdc02WF0W
+ pcr18yjh+190/dLyu3PEirP3MbH2aUBxn5J8n3wPFoGLvAo+sgHqIJMcOB1c7mrBrKOw
+ AqkbiZFdQo72pRe5LpAc8LEE6/ghnSWvu/5QmOv6pDBKSZ/rzUCURe/H6RgLpbouOl90
+ /bNziesC0vFk1rEglnjdddS53LU7PUoO9LmedUYJ1tmV9NY4serrrs7gXteiQjl/2t4o
+ Pd7nKsP8OSGVq6TU4xrjvO7KD0RFgvFc5zRXVuG/uTKwIhZzY6O+kM7lcO52jcOsdGdN
+ YBzSOXKMHIQscrDPN8X1BgZxuKcnB0v3Rsk/na7LLPRFyYZQSV3m3mBdwBec5vIFawMB
+ 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
+ yrv7XzgivmhEXMb9Ln6XjMhfOiIufbu/u335P4B31X9oRP7DI+KrRsTl//DdVX+9lP//
+ kHV4XQplbmRzdHJlYW0KZW5kb2JqCjYxIDAgb2JqCjY3NzUKZW5kb2JqCjYyIDAgb2Jq
+ Cjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcx
+ NyAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1
+ IDExMjJdIC9Gb250TmFtZSAvWFZIWVRVK0hlbHZldGljYSAvSXRhbGljQW5nbGUgMAov
+ U3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA2MzcgL0ZvbnRGaWxlMiA2MCAw
+ IFIgPj4KZW5kb2JqCjYzIDAgb2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+ IDAgMCAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDY2Nwo2Njcg
+ MCAwIDAgMCAwIDAgMCAwIDAgMCA4MzMgMCAwIDAgMCA3MjIgMCAwIDAgMCA5NDQgMCAw
+ IDAgMCAwIDAgMCAwIDAgNTU2CjAgNTAwIDU1NiA1NTYgMCA1NTYgMCAyMjIgMCAwIDIy
+ MiA4MzMgNTU2IDU1NiAwIDAgMzMzIDAgMjc4IDAgMCAwIDAgNTAwIF0KZW5kb2JqCjIz
+ IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQg
+ L1hWSFlUVStIZWx2ZXRpY2EgL0ZvbnREZXNjcmlwdG9yCjYyIDAgUiAvV2lkdGhzIDYz
+ IDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEgL0VuY29kaW5nIC9NYWNSb21h
+ bkVuY29kaW5nCj4+CmVuZG9iago2NCAwIG9iago8PCAvTGVuZ3RoIDY1IDAgUiAvTGVu
+ Z3RoMSAxMTg5MiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHdent4U1W2
+ +NrnnZOkTdK82zRJkzZ9pA9KHwQKTUtbCm2gFAotttICZQoDCojIY2AQ1ELBEZ1RELnj
+ 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
+ MgovRm9udEJCb3ggWy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvRm9udE5hbWUgL0pBRUVD
+ UStIZWx2ZXRpY2EtQm9sZCAvSXRhbGljQW5nbGUKMCAvU3RlbVYgMCAvTWF4V2lkdGgg
+ MTUwMCAvWEhlaWdodCA2NDQgL0ZvbnRGaWxlMiA2NCAwIFIgPj4KZW5kb2JqCjY3IDAg
+ b2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+ IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA3MjIKMCA3MjIgMCA2NjcgNjExIDc3OCAwIDAg
+ MCAwIDYxMSA4MzMgMCAwIDAgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAow
+ IDU1NiAwIDU1NiA2MTEgNTU2IDAgNjExIDYxMSAyNzggMCA1NTYgMjc4IDg4OSA2MTEg
+ NjExIDYxMSAwIDM4OSA1NTYgMzMzCjYxMSAwIDc3OCAwIDU1NiAwIDAgMCAwIDAgMCAw
+ IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAg
+ MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+ IDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+ MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjExCl0KZW5kb2JqCjE3
+ IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQg
+ L0pBRUVDUStIZWx2ZXRpY2EtQm9sZCAvRm9udERlc2NyaXB0b3IKNjYgMCBSIC9XaWR0
+ aHMgNjcgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDIyMyAvRW5jb2RpbmcgL01h
+ Y1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjY4IDAgb2JqCihNYWMgT1MgWCAxMC42Ljgg
+ UXVhcnR6IFBERkNvbnRleHQpCmVuZG9iago2OSAwIG9iagooRDoyMDExMTEyOTE3MTM1
+ MVowMCcwMCcpCmVuZG9iagoxIDAgb2JqCjw8IC9Qcm9kdWNlciA2OCAwIFIgL0NyZWF0
+ aW9uRGF0ZSA2OSAwIFIgL01vZERhdGUgNjkgMCBSID4+CmVuZG9iagp4cmVmCjAgNzAK
+ MDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDQ2ODM1IDAwMDAwIG4gCjAwMDAwMzAyMzIg
+ MDAwMDAgbiAKMDAwMDAwNDAwMyAwMDAwMCBuIAowMDAwMDI1ODg4IDAwMDAwIG4gCjAw
+ MDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMzk4MyAwMDAwMCBuIAowMDAwMDA0MTA3IDAw
+ MDAwIG4gCjAwMDAwMjQ5ODcgMDAwMDAgbiAKMDAwMDAwNzExMCAwMDAwMCBuIAowMDAw
+ MDEwMzg3IDAwMDAwIG4gCjAwMDAwMTA0MDggMDAwMDAgbiAKMDAwMDAxMTI5NCAwMDAw
+ MCBuIAowMDAwMDA1NTUyIDAwMDAwIG4gCjAwMDAwMDcwODkgMDAwMDAgbiAKMDAwMDAw
+ NDQ2OSAwMDAwMCBuIAowMDAwMDI1ODUxIDAwMDAwIG4gCjAwMDAwNDY1NjEgMDAwMDAg
+ biAKMDAwMDAwNDkzNCAwMDAwMCBuIAowMDAwMDA0NjIwIDAwMDAwIG4gCjAwMDAwMDUz
+ OTUgMDAwMDAgbiAKMDAwMDAwNTA4NSAwMDAwMCBuIAowMDAwMDA1MjQyIDAwMDAwIG4g
+ CjAwMDAwMzc4NDAgMDAwMDAgbiAKMDAwMDAwNDc3NyAwMDAwMCBuIAowMDAwMDE3ODI2
+ IDAwMDAwIG4gCjAwMDAwMTc4NzMgMDAwMDAgbiAKMDAwMDAxNzkyMCAwMDAwMCBuIAow
+ MDAwMDE3OTY4IDAwMDAwIG4gCjAwMDAwMjk4MDkgMDAwMDAgbiAKMDAwMDAyOTE2NCAw
+ MDAwMCBuIAowMDAwMDI4NTQ1IDAwMDAwIG4gCjAwMDAwMjgxMjIgMDAwMDAgbiAKMDAw
+ MDAyNzQ3NyAwMDAwMCBuIAowMDAwMDI2NjcwIDAwMDAwIG4gCjAwMDAwMjYwNTEgMDAw
+ MDAgbiAKMDAwMDAyNDA5MCAwMDAwMCBuIAowMDAwMDE1NzcyIDAwMDAwIG4gCjAwMDAw
+ MTc4MDUgMDAwMDAgbiAKMDAwMDAxMjc3MCAwMDAwMCBuIAowMDAwMDE1NzUxIDAwMDAw
+ IG4gCjAwMDAwMTEzMTQgMDAwMDAgbiAKMDAwMDAxMjc0OSAwMDAwMCBuIAowMDAwMDE4
+ MDEzIDAwMDAwIG4gCjAwMDAwMjQwNjkgMDAwMDAgbiAKMDAwMDAyNDEyNyAwMDAwMCBu
+ IAowMDAwMDI0OTY3IDAwMDAwIG4gCjAwMDAwMjUwMjMgMDAwMDAgbiAKMDAwMDAyNTgz
+ MSAwMDAwMCBuIAowMDAwMDI1OTcxIDAwMDAwIG4gCjAwMDAwMjY2NTAgMDAwMDAgbiAK
+ MDAwMDAyNzQ1NyAwMDAwMCBuIAowMDAwMDI4MTAyIDAwMDAwIG4gCjAwMDAwMjg1MjUg
+ MDAwMDAgbiAKMDAwMDAyOTE0NCAwMDAwMCBuIAowMDAwMDI5Nzg5IDAwMDAwIG4gCjAw
+ MDAwMzAyMTIgMDAwMDAgbiAKMDAwMDAzMDM5NSAwMDAwMCBuIAowMDAwMDMwMjgwIDAw
+ MDAwIG4gCjAwMDAwMzAzNzMgMDAwMDAgbiAKMDAwMDAzMDQ4OCAwMDAwMCBuIAowMDAw
+ MDM3MzU0IDAwMDAwIG4gCjAwMDAwMzczNzUgMDAwMDAgbiAKMDAwMDAzNzYwMCAwMDAw
+ MCBuIAowMDAwMDM4MDE1IDAwMDAwIG4gCjAwMDAwNDU4NDcgMDAwMDAgbiAKMDAwMDA0
+ NTg2OCAwMDAwMCBuIAowMDAwMDQ2MDk5IDAwMDAwIG4gCjAwMDAwNDY3NDEgMDAwMDAg
+ biAKMDAwMDA0Njc5MyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDcwIC9Sb290IDQ5
+ IDAgUiAvSW5mbyAxIDAgUiAvSUQgWyA8MDMyMzk3ZTAwZDIyMzQyMWNhZjU0MmY1MTM0
+ N2VjMGY+CjwwMzIzOTdlMDBkMjIzNDIxY2FmNTQyZjUxMzQ3ZWMwZj4gXSA+PgpzdGFy
+ dHhyZWYKNDY5MTAKJSVFT0YKMSAwIG9iago8PC9BdXRob3IgKFJvYmVydCBMeSkvQ3Jl
+ YXRpb25EYXRlIChEOjIwMTEwOTA3MjEzMjAwWikvQ3JlYXRvciAoT21uaUdyYWZmbGUg
+ UHJvZmVzc2lvbmFsIDUuMy4yKS9Nb2REYXRlIChEOjIwMTExMTI5MTcxMzAwWikvUHJv
+ ZHVjZXIgNjggMCBSIC9UaXRsZSAocmVuZGVyc2NyaXB0X292ZXJ2aWV3KT4+CmVuZG9i
+ agp4cmVmCjEgMQowMDAwMDQ4NDY4IDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzwwMzIz
+ OTdlMDBkMjIzNDIxY2FmNTQyZjUxMzQ3ZWMwZj4gPDAzMjM5N2UwMGQyMjM0MjFjYWY1
+ NDJmNTEzNDdlYzBmPl0gL0luZm8gMSAwIFIgL1ByZXYgNDY5MTAgL1Jvb3QgNDkgMCBS
+ IC9TaXplIDcwPj4Kc3RhcnR4cmVmCjQ4NjU2CiUlRU9GCg==
+ </data>
+ <key>QuickLookThumbnail</key>
+ <data>
+ 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
+ AQ==
+ </data>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>ExpandedCanvases</key>
+ <array>
+ <dict>
+ <key>name</key>
+ <string>Canvas 1</string>
+ </dict>
+ </array>
+ <key>Frame</key>
+ <string>{{318, 108}, {971, 888}}</string>
+ <key>ListView</key>
+ <true/>
+ <key>OutlineWidth</key>
+ <integer>142</integer>
+ <key>RightSidebar</key>
+ <false/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>120</integer>
+ <key>VisibleRegion</key>
+ <string>{{-130, 0}, {836, 734}}</string>
+ <key>Zoom</key>
+ <real>1</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ </array>
+ </dict>
+ <key>saveQuickLookFiles</key>
+ <string>YES</string>
+</dict>
+</plist>
diff --git a/docs/html/images/rs_overview.png b/docs/html/images/rs_overview.png
new file mode 100644
index 0000000..888063dc
--- /dev/null
+++ b/docs/html/images/rs_overview.png
Binary files differ
diff --git a/docs/html/reference/renderscript/annotated.html b/docs/html/reference/renderscript/annotated.html
new file mode 100644
index 0000000..0425db2
--- /dev/null
+++ b/docs/html/reference/renderscript/annotated.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structures</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"> </div><table>
+ <tr><td class="indexkey"><a class="el" href="structrs__allocation.html">rs_allocation</a></td><td class="indexvalue">Opaque handle to a Renderscript allocation </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__element.html">rs_element</a></td><td class="indexvalue">Opaque handle to a Renderscript element </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__font.html">rs_font</a></td><td class="indexvalue">Opaque handle to a Renderscript font object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td><td class="indexvalue">2x2 float matrix </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td><td class="indexvalue">3x3 float matrix </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td><td class="indexvalue">4x4 float matrix </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__mesh.html">rs_mesh</a></td><td class="indexvalue">Opaque handle to a Renderscript mesh object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td><td class="indexvalue">Opaque handle to a Renderscript ProgramFragment object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td><td class="indexvalue">Opaque handle to a Renderscript ProgramRaster object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__program__store.html">rs_program_store</a></td><td class="indexvalue">Opaque handle to a Renderscript ProgramStore object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td><td class="indexvalue">Opaque handle to a Renderscript ProgramVertex object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__sampler.html">rs_sampler</a></td><td class="indexvalue">Opaque handle to a Renderscript sampler object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__script.html">rs_script</a></td><td class="indexvalue">Opaque handle to a Renderscript script object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__script__call.html">rs_script_call</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__tm.html">rs_tm</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structrs__type.html">rs_type</a></td><td class="indexvalue">Opaque handle to a Renderscript type </td></tr>
+</table>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/doxygen.css b/docs/html/reference/renderscript/doxygen.css
new file mode 100644
index 0000000..22c7b5c
--- /dev/null
+++ b/docs/html/reference/renderscript/doxygen.css
@@ -0,0 +1,946 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+ font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+ font-size: 12px;
+}
+
+/* @group Heading Levels */
+
+h1 {
+ font-size: 150%;
+}
+
+.title {
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd, p.starttd {
+ margin-top: 2px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+ color: #4665A2;
+}
+
+a.codeRef {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 8px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+ border-top: 1px solid #C4CFE5;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+}
+
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 8px;
+ border-top-left-radius: 8px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 8px;
+ -moz-border-radius-topleft: 8px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 8px;
+ -webkit-border-top-left-radius: 8px;
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 2px 5px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ /* opera specific markup */
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 8px;
+ -moz-border-radius-bottomright: 8px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 8px;
+ -webkit-border-bottom-right-radius: 8px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+.params, .retval, .exception, .tparams {
+ border-spacing: 6px 2px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+
+
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ font-family: sans-serif;
+ margin: 0px;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+ margin: 5px;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice. Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+ height: 61px;
+ background-repeat: no-repeat;
+ background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+ display: none;
+}
+*/
+
+.directory > h3 {
+ margin-top: 0;
+}
+
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory div {
+ display: none;
+ margin: 0px;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+.directory-alt > h3 {
+ margin-top: 0;
+}
+
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+
+.directory-alt img {
+ vertical-align: -30%;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+}
+
+table.fieldtable {
+ width: 100%;
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ margin-left: 5px;
+ font-size: 8pt;
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 7px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
+{
+ border-left:4px solid;
+ padding: 0 0 0 6px;
+}
+
+dl.note
+{
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ border-color: #505050;
+}
+
+dl.todo
+{
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ border-color: #C08050;
+}
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+ pre.fragment
+ {
+ overflow: visible;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ }
+}
+
diff --git a/docs/html/reference/renderscript/globals.html b/docs/html/reference/renderscript/globals.html
new file mode 100644
index 0000000..f6fa413
--- /dev/null
+++ b/docs/html/reference/renderscript/globals.html
@@ -0,0 +1,720 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<div class="textblock"> </div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>acos()
+: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
+</li>
+<li>acosh()
+: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
+</li>
+<li>acospi()
+: <a class="el" href="rs__cl_8rsh.html#a2c0c7c00815bd480fcda80d1144ac20d">rs_cl.rsh</a>
+</li>
+<li>asin()
+: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
+</li>
+<li>asinh()
+: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
+</li>
+<li>asinpi()
+: <a class="el" href="rs__cl_8rsh.html#a679b63e86358fc962cb343eb6263496b">rs_cl.rsh</a>
+</li>
+<li>atan()
+: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
+</li>
+<li>atan2()
+: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
+</li>
+<li>atan2pi()
+: <a class="el" href="rs__cl_8rsh.html#a9aed0a1613c86acf5e4c5ad3290a4745">rs_cl.rsh</a>
+</li>
+<li>atanh()
+: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
+</li>
+<li>atanpi()
+: <a class="el" href="rs__cl_8rsh.html#a420d4aaea0e53d7172845a21a1e648ea">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>cbrt()
+: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
+</li>
+<li>ceil()
+: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
+</li>
+<li>char2
+: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
+</li>
+<li>char3
+: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
+</li>
+<li>char4
+: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
+</li>
+<li>clamp()
+: <a class="el" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">rs_cl.rsh</a>
+</li>
+<li>copysign()
+: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
+</li>
+<li>cos()
+: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
+</li>
+<li>cosh()
+: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
+</li>
+<li>cospi()
+: <a class="el" href="rs__cl_8rsh.html#a07b12188bd53c6b584274892f6abf425">rs_cl.rsh</a>
+</li>
+<li>cross()
+: <a class="el" href="rs__cl_8rsh.html#a0f7beb26bb4aa30535babd14492a7e90">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>degrees()
+: <a class="el" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">rs_cl.rsh</a>
+</li>
+<li>distance()
+: <a class="el" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">rs_cl.rsh</a>
+</li>
+<li>dot()
+: <a class="el" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">rs_cl.rsh</a>
+</li>
+<li>double2
+: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
+</li>
+<li>double3
+: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
+</li>
+<li>double4
+: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>erf()
+: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
+</li>
+<li>erfc()
+: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
+</li>
+<li>exp()
+: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
+</li>
+<li>exp10()
+: <a class="el" href="rs__cl_8rsh.html#a4b51589157c9ce600ea6156be51d8d18">rs_cl.rsh</a>
+</li>
+<li>exp2()
+: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
+</li>
+<li>expm1()
+: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fabs()
+: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
+</li>
+<li>fdim()
+: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
+</li>
+<li>float2
+: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
+</li>
+<li>float3
+: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
+</li>
+<li>float4
+: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
+</li>
+<li>floor()
+: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
+</li>
+<li>fma()
+: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
+</li>
+<li>fmax()
+: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
+</li>
+<li>fmin()
+: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
+</li>
+<li>fmod()
+: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
+</li>
+<li>fract()
+: <a class="el" href="rs__cl_8rsh.html#ac5277212e0df309a0a7c908424f7b14b">rs_cl.rsh</a>
+</li>
+<li>frexp()
+: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hypot()
+: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>ilogb()
+: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
+</li>
+<li>int16_t
+: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
+</li>
+<li>int2
+: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
+</li>
+<li>int3
+: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
+</li>
+<li>int32_t
+: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
+</li>
+<li>int4
+: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
+</li>
+<li>int64_t
+: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
+</li>
+<li>int8_t
+: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>ldexp()
+: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
+</li>
+<li>length()
+: <a class="el" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">rs_cl.rsh</a>
+</li>
+<li>lgamma()
+: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
+</li>
+<li>log()
+: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
+</li>
+<li>log10()
+: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
+</li>
+<li>log1p()
+: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
+</li>
+<li>log2()
+: <a class="el" href="rs__cl_8rsh.html#a2fb571ae932f671ff3e9e97f2d3fabb7">rs_cl.rsh</a>
+</li>
+<li>logb()
+: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
+</li>
+<li>long2
+: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
+</li>
+<li>long3
+: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
+</li>
+<li>long4
+: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>mad()
+: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
+</li>
+<li>mix()
+: <a class="el" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">rs_cl.rsh</a>
+</li>
+<li>modf()
+: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nextafter()
+: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
+</li>
+<li>normalize()
+: <a class="el" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pow()
+: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
+</li>
+<li>pown()
+: <a class="el" href="rs__cl_8rsh.html#afd46205452017b741abb2e17fc28557d">rs_cl.rsh</a>
+</li>
+<li>powr()
+: <a class="el" href="rs__cl_8rsh.html#a3ff65421721ec8e6ce8d875a563d005f">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>radians()
+: <a class="el" href="rs__cl_8rsh.html#aaef2526c4d190ba6f7301b4e810917a7">rs_cl.rsh</a>
+</li>
+<li>remainder()
+: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
+</li>
+<li>rint()
+: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
+</li>
+<li>rootn()
+: <a class="el" href="rs__cl_8rsh.html#af169e7e1c575b7c24c1834569223077f">rs_cl.rsh</a>
+</li>
+<li>round()
+: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
+</li>
+<li>rs_for_each_strategy
+: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
+</li>
+<li>rs_quaternion
+: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
+</li>
+<li>rs_script_call_t
+: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
+</li>
+<li>rs_time_t
+: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
+</li>
+<li>rsAllocationGetDimFaces()
+: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimLOD()
+: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimX()
+: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimY()
+: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimZ()
+: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
+</li>
+<li>rsClamp()
+: <a class="el" href="rs__math_8rsh.html#ad36abebbb36ffc5312fb2ed8baf98d39">rs_math.rsh</a>
+</li>
+<li>rsClearObject()
+: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
+</li>
+<li>rsDebug()
+: <a class="el" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rs_debug.rsh</a>
+</li>
+<li>rsExtractFrustumPlanes()
+: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
+</li>
+<li>rsForEach()
+: <a class="el" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rs_core.rsh</a>
+</li>
+<li>rsFrac()
+: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
+</li>
+<li>rsgAllocationSyncAll()
+: <a class="el" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rs_graphics.rsh</a>
+</li>
+<li>rsgBindFont()
+: <a class="el" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramFragment()
+: <a class="el" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramRaster()
+: <a class="el" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramStore()
+: <a class="el" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramVertex()
+: <a class="el" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rs_graphics.rsh</a>
+</li>
+<li>rsgBindSampler()
+: <a class="el" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rs_graphics.rsh</a>
+</li>
+<li>rsgBindTexture()
+: <a class="el" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rs_graphics.rsh</a>
+</li>
+<li>rsgClearColor()
+: <a class="el" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rs_graphics.rsh</a>
+</li>
+<li>rsgClearDepth()
+: <a class="el" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawMesh()
+: <a class="el" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawQuad()
+: <a class="el" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawQuadTexCoords()
+: <a class="el" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawRect()
+: <a class="el" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawSpriteScreenspace()
+: <a class="el" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawText()
+: <a class="el" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rs_graphics.rsh</a>
+</li>
+<li>rsGetAllocation()
+: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
+</li>
+<li>rsGetDt()
+: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
+</li>
+<li>rsGetElementAt()
+: <a class="el" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rs_allocation.rsh</a>
+</li>
+<li>rsgFontColor()
+: <a class="el" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rs_graphics.rsh</a>
+</li>
+<li>rsgGetHeight()
+: <a class="el" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rs_graphics.rsh</a>
+</li>
+<li>rsgGetWidth()
+: <a class="el" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rs_graphics.rsh</a>
+</li>
+<li>rsgMeasureText()
+: <a class="el" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rs_graphics.rsh</a>
+</li>
+<li>rsgMeshComputeBoundingBox()
+: <a class="el" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramFragmentConstantColor()
+: <a class="el" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexGetProjectionMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadModelMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadProjectionMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadTextureMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rs_graphics.rsh</a>
+</li>
+<li>rsIsObject()
+: <a class="el" href="rs__object_8rsh.html#ac1d6da920f12974b3633d25ed078da2d">rs_object.rsh</a>
+</li>
+<li>rsIsSphereInFrustum()
+: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
+</li>
+<li>rsLocaltime()
+: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
+</li>
+<li>rsMatrixGet()
+: <a class="el" href="rs__matrix_8rsh.html#af1fb87eb02f166bb85ef10a92333bb49">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixInverse()
+: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixInverseTranspose()
+: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoad()
+: <a class="el" href="rs__matrix_8rsh.html#a06176acb38405937cb94c835a712a3b3">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadFrustum()
+: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadIdentity()
+: <a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadMultiply()
+: <a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadOrtho()
+: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadPerspective()
+: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadRotate()
+: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadScale()
+: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadTranslate()
+: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixMultiply()
+: <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixRotate()
+: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixScale()
+: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixSet()
+: <a class="el" href="rs__matrix_8rsh.html#a68e320f7fa2cc5a5b4759e3ab679ee10">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixTranslate()
+: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixTranspose()
+: <a class="el" href="rs__matrix_8rsh.html#ac52acb31a705f6c68af8bddea0e79969">rs_matrix.rsh</a>
+</li>
+<li>rsPackColorTo8888()
+: <a class="el" href="rs__math_8rsh.html#a22e0be7e18b317a7453ebad4300934f6">rs_math.rsh</a>
+</li>
+<li>rsqrt()
+: <a class="el" href="rs__cl_8rsh.html#a5db00fde9e6bff693a38f3a37e7a1f70">rs_cl.rsh</a>
+</li>
+<li>rsQuaternionAdd()
+: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionConjugate()
+: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionDot()
+: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionGetMatrixUnit()
+: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionLoadRotate()
+: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionLoadRotateUnit()
+: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionMultiply()
+: <a class="el" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionNormalize()
+: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionSet()
+: <a class="el" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionSlerp()
+: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
+</li>
+<li>rsRand()
+: <a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rs_math.rsh</a>
+</li>
+<li>rsSendToClient()
+: <a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rs_core.rsh</a>
+</li>
+<li>rsSendToClientBlocking()
+: <a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rs_core.rsh</a>
+</li>
+<li>rsSetObject()
+: <a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rs_object.rsh</a>
+</li>
+<li>rsTime()
+: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
+</li>
+<li>rsUnpackColor8888()
+: <a class="el" href="rs__math_8rsh.html#a26525a4f5093bd0f13191efe06127f4b">rs_math.rsh</a>
+</li>
+<li>rsUptimeMillis()
+: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
+</li>
+<li>rsUptimeNanos()
+: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>short2
+: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
+</li>
+<li>short3
+: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
+</li>
+<li>short4
+: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
+</li>
+<li>sign()
+: <a class="el" href="rs__cl_8rsh.html#a3e6d477a06dec7070f073eec9d8f420c">rs_cl.rsh</a>
+</li>
+<li>sin()
+: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
+</li>
+<li>sincos()
+: <a class="el" href="rs__cl_8rsh.html#a240f7c7c20b432a30dc660b5dd4cd320">rs_cl.rsh</a>
+</li>
+<li>sinh()
+: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
+</li>
+<li>sinpi()
+: <a class="el" href="rs__cl_8rsh.html#a4fe4fef049786e888526d6f37b912b0a">rs_cl.rsh</a>
+</li>
+<li>size_t
+: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
+</li>
+<li>sqrt()
+: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
+</li>
+<li>ssize_t
+: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
+</li>
+<li>step()
+: <a class="el" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>tan()
+: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
+</li>
+<li>tanh()
+: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
+</li>
+<li>tanpi()
+: <a class="el" href="rs__cl_8rsh.html#ad8bfb083dd3979a305e594a0d6e581c4">rs_cl.rsh</a>
+</li>
+<li>tgamma()
+: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
+</li>
+<li>trunc()
+: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>uchar
+: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
+</li>
+<li>uchar2
+: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
+</li>
+<li>uchar3
+: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
+</li>
+<li>uchar4
+: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
+</li>
+<li>uint
+: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
+</li>
+<li>uint16_t
+: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
+</li>
+<li>uint2
+: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
+</li>
+<li>uint3
+: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
+</li>
+<li>uint32_t
+: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
+</li>
+<li>uint4
+: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
+</li>
+<li>uint64_t
+: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
+</li>
+<li>uint8_t
+: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
+</li>
+<li>ulong
+: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
+</li>
+<li>ulong2
+: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
+</li>
+<li>ulong3
+: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
+</li>
+<li>ulong4
+: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
+</li>
+<li>ushort
+: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
+</li>
+<li>ushort2
+: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
+</li>
+<li>ushort3
+: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
+</li>
+<li>ushort4
+: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
+</li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/globals_enum.html b/docs/html/reference/renderscript/globals_enum.html
new file mode 100644
index 0000000..7301432
--- /dev/null
+++ b/docs/html/reference/renderscript/globals_enum.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+ <ul>
+<li>rs_for_each_strategy
+: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
+</li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/globals_func.html b/docs/html/reference/renderscript/globals_func.html
new file mode 100644
index 0000000..5886454
--- /dev/null
+++ b/docs/html/reference/renderscript/globals_func.html
@@ -0,0 +1,571 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>acos()
+: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
+</li>
+<li>acosh()
+: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
+</li>
+<li>acospi()
+: <a class="el" href="rs__cl_8rsh.html#a2c0c7c00815bd480fcda80d1144ac20d">rs_cl.rsh</a>
+</li>
+<li>asin()
+: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
+</li>
+<li>asinh()
+: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
+</li>
+<li>asinpi()
+: <a class="el" href="rs__cl_8rsh.html#a679b63e86358fc962cb343eb6263496b">rs_cl.rsh</a>
+</li>
+<li>atan()
+: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
+</li>
+<li>atan2()
+: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
+</li>
+<li>atan2pi()
+: <a class="el" href="rs__cl_8rsh.html#a9aed0a1613c86acf5e4c5ad3290a4745">rs_cl.rsh</a>
+</li>
+<li>atanh()
+: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
+</li>
+<li>atanpi()
+: <a class="el" href="rs__cl_8rsh.html#a420d4aaea0e53d7172845a21a1e648ea">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>cbrt()
+: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
+</li>
+<li>ceil()
+: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
+</li>
+<li>clamp()
+: <a class="el" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">rs_cl.rsh</a>
+</li>
+<li>copysign()
+: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
+</li>
+<li>cos()
+: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
+</li>
+<li>cosh()
+: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
+</li>
+<li>cospi()
+: <a class="el" href="rs__cl_8rsh.html#a07b12188bd53c6b584274892f6abf425">rs_cl.rsh</a>
+</li>
+<li>cross()
+: <a class="el" href="rs__cl_8rsh.html#a0f7beb26bb4aa30535babd14492a7e90">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>degrees()
+: <a class="el" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">rs_cl.rsh</a>
+</li>
+<li>distance()
+: <a class="el" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">rs_cl.rsh</a>
+</li>
+<li>dot()
+: <a class="el" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>erf()
+: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
+</li>
+<li>erfc()
+: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
+</li>
+<li>exp()
+: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
+</li>
+<li>exp10()
+: <a class="el" href="rs__cl_8rsh.html#a4b51589157c9ce600ea6156be51d8d18">rs_cl.rsh</a>
+</li>
+<li>exp2()
+: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
+</li>
+<li>expm1()
+: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fabs()
+: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
+</li>
+<li>fdim()
+: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
+</li>
+<li>floor()
+: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
+</li>
+<li>fma()
+: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
+</li>
+<li>fmax()
+: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
+</li>
+<li>fmin()
+: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
+</li>
+<li>fmod()
+: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
+</li>
+<li>fract()
+: <a class="el" href="rs__cl_8rsh.html#ac5277212e0df309a0a7c908424f7b14b">rs_cl.rsh</a>
+</li>
+<li>frexp()
+: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hypot()
+: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>ilogb()
+: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>ldexp()
+: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
+</li>
+<li>length()
+: <a class="el" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">rs_cl.rsh</a>
+</li>
+<li>lgamma()
+: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
+</li>
+<li>log()
+: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
+</li>
+<li>log10()
+: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
+</li>
+<li>log1p()
+: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
+</li>
+<li>log2()
+: <a class="el" href="rs__cl_8rsh.html#a2fb571ae932f671ff3e9e97f2d3fabb7">rs_cl.rsh</a>
+</li>
+<li>logb()
+: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>mad()
+: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
+</li>
+<li>mix()
+: <a class="el" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">rs_cl.rsh</a>
+</li>
+<li>modf()
+: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nextafter()
+: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
+</li>
+<li>normalize()
+: <a class="el" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pow()
+: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
+</li>
+<li>pown()
+: <a class="el" href="rs__cl_8rsh.html#afd46205452017b741abb2e17fc28557d">rs_cl.rsh</a>
+</li>
+<li>powr()
+: <a class="el" href="rs__cl_8rsh.html#a3ff65421721ec8e6ce8d875a563d005f">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>radians()
+: <a class="el" href="rs__cl_8rsh.html#aaef2526c4d190ba6f7301b4e810917a7">rs_cl.rsh</a>
+</li>
+<li>remainder()
+: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
+</li>
+<li>rint()
+: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
+</li>
+<li>rootn()
+: <a class="el" href="rs__cl_8rsh.html#af169e7e1c575b7c24c1834569223077f">rs_cl.rsh</a>
+</li>
+<li>round()
+: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
+</li>
+<li>rsAllocationGetDimFaces()
+: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimLOD()
+: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimX()
+: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimY()
+: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
+</li>
+<li>rsAllocationGetDimZ()
+: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
+</li>
+<li>rsClamp()
+: <a class="el" href="rs__math_8rsh.html#ae31137028793c4aaf4df839535135837">rs_math.rsh</a>
+</li>
+<li>rsClearObject()
+: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
+</li>
+<li>rsDebug()
+: <a class="el" href="rs__debug_8rsh.html#a0a59285be7204bde7b199c77578b6a42">rs_debug.rsh</a>
+</li>
+<li>rsExtractFrustumPlanes()
+: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
+</li>
+<li>rsForEach()
+: <a class="el" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rs_core.rsh</a>
+</li>
+<li>rsFrac()
+: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
+</li>
+<li>rsgAllocationSyncAll()
+: <a class="el" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rs_graphics.rsh</a>
+</li>
+<li>rsgBindFont()
+: <a class="el" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramFragment()
+: <a class="el" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramRaster()
+: <a class="el" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramStore()
+: <a class="el" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rs_graphics.rsh</a>
+</li>
+<li>rsgBindProgramVertex()
+: <a class="el" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rs_graphics.rsh</a>
+</li>
+<li>rsgBindSampler()
+: <a class="el" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rs_graphics.rsh</a>
+</li>
+<li>rsgBindTexture()
+: <a class="el" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rs_graphics.rsh</a>
+</li>
+<li>rsgClearColor()
+: <a class="el" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rs_graphics.rsh</a>
+</li>
+<li>rsgClearDepth()
+: <a class="el" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawMesh()
+: <a class="el" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawQuad()
+: <a class="el" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawQuadTexCoords()
+: <a class="el" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawRect()
+: <a class="el" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawSpriteScreenspace()
+: <a class="el" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rs_graphics.rsh</a>
+</li>
+<li>rsgDrawText()
+: <a class="el" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rs_graphics.rsh</a>
+</li>
+<li>rsGetAllocation()
+: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
+</li>
+<li>rsGetDt()
+: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
+</li>
+<li>rsGetElementAt()
+: <a class="el" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rs_allocation.rsh</a>
+</li>
+<li>rsgFontColor()
+: <a class="el" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rs_graphics.rsh</a>
+</li>
+<li>rsgGetHeight()
+: <a class="el" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rs_graphics.rsh</a>
+</li>
+<li>rsgGetWidth()
+: <a class="el" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rs_graphics.rsh</a>
+</li>
+<li>rsgMeasureText()
+: <a class="el" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rs_graphics.rsh</a>
+</li>
+<li>rsgMeshComputeBoundingBox()
+: <a class="el" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramFragmentConstantColor()
+: <a class="el" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexGetProjectionMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadModelMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadProjectionMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rs_graphics.rsh</a>
+</li>
+<li>rsgProgramVertexLoadTextureMatrix()
+: <a class="el" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rs_graphics.rsh</a>
+</li>
+<li>rsIsObject()
+: <a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rs_object.rsh</a>
+</li>
+<li>rsIsSphereInFrustum()
+: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
+</li>
+<li>rsLocaltime()
+: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
+</li>
+<li>rsMatrixGet()
+: <a class="el" href="rs__matrix_8rsh.html#a90b0548da8dbe1f643bcbac8466e5b72">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixInverse()
+: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixInverseTranspose()
+: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoad()
+: <a class="el" href="rs__matrix_8rsh.html#a06176acb38405937cb94c835a712a3b3">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadFrustum()
+: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadIdentity()
+: <a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadMultiply()
+: <a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadOrtho()
+: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadPerspective()
+: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadRotate()
+: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadScale()
+: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixLoadTranslate()
+: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixMultiply()
+: <a class="el" href="rs__matrix_8rsh.html#a716bc2d29b80eb25388aba3ba8845aef">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixRotate()
+: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixScale()
+: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixSet()
+: <a class="el" href="rs__matrix_8rsh.html#ada106cb8f08e4b23930d7ba1a0ce5609">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixTranslate()
+: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
+</li>
+<li>rsMatrixTranspose()
+: <a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rs_matrix.rsh</a>
+</li>
+<li>rsPackColorTo8888()
+: <a class="el" href="rs__math_8rsh.html#a22e0be7e18b317a7453ebad4300934f6">rs_math.rsh</a>
+</li>
+<li>rsqrt()
+: <a class="el" href="rs__cl_8rsh.html#a5db00fde9e6bff693a38f3a37e7a1f70">rs_cl.rsh</a>
+</li>
+<li>rsQuaternionAdd()
+: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionConjugate()
+: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionDot()
+: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionGetMatrixUnit()
+: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionLoadRotate()
+: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionLoadRotateUnit()
+: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionMultiply()
+: <a class="el" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionNormalize()
+: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionSet()
+: <a class="el" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">rs_quaternion.rsh</a>
+</li>
+<li>rsQuaternionSlerp()
+: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
+</li>
+<li>rsRand()
+: <a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rs_math.rsh</a>
+</li>
+<li>rsSendToClient()
+: <a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rs_core.rsh</a>
+</li>
+<li>rsSendToClientBlocking()
+: <a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rs_core.rsh</a>
+</li>
+<li>rsSetObject()
+: <a class="el" href="rs__object_8rsh.html#a8135bceeb7b3ec8bf9a49d04e39bd565">rs_object.rsh</a>
+</li>
+<li>rsTime()
+: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
+</li>
+<li>rsUnpackColor8888()
+: <a class="el" href="rs__math_8rsh.html#a26525a4f5093bd0f13191efe06127f4b">rs_math.rsh</a>
+</li>
+<li>rsUptimeMillis()
+: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
+</li>
+<li>rsUptimeNanos()
+: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>sign()
+: <a class="el" href="rs__cl_8rsh.html#a3e6d477a06dec7070f073eec9d8f420c">rs_cl.rsh</a>
+</li>
+<li>sin()
+: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
+</li>
+<li>sincos()
+: <a class="el" href="rs__cl_8rsh.html#a240f7c7c20b432a30dc660b5dd4cd320">rs_cl.rsh</a>
+</li>
+<li>sinh()
+: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
+</li>
+<li>sinpi()
+: <a class="el" href="rs__cl_8rsh.html#a4fe4fef049786e888526d6f37b912b0a">rs_cl.rsh</a>
+</li>
+<li>sqrt()
+: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
+</li>
+<li>step()
+: <a class="el" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">rs_cl.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>tan()
+: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
+</li>
+<li>tanh()
+: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
+</li>
+<li>tanpi()
+: <a class="el" href="rs__cl_8rsh.html#ad8bfb083dd3979a305e594a0d6e581c4">rs_cl.rsh</a>
+</li>
+<li>tgamma()
+: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
+</li>
+<li>trunc()
+: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
+</li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/globals_type.html b/docs/html/reference/renderscript/globals_type.html
new file mode 100644
index 0000000..238a6c4
--- /dev/null
+++ b/docs/html/reference/renderscript/globals_type.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>char2
+: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
+</li>
+<li>char3
+: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
+</li>
+<li>char4
+: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>double2
+: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
+</li>
+<li>double3
+: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
+</li>
+<li>double4
+: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>float2
+: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
+</li>
+<li>float3
+: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
+</li>
+<li>float4
+: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>int16_t
+: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
+</li>
+<li>int2
+: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
+</li>
+<li>int3
+: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
+</li>
+<li>int32_t
+: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
+</li>
+<li>int4
+: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
+</li>
+<li>int64_t
+: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
+</li>
+<li>int8_t
+: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>long2
+: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
+</li>
+<li>long3
+: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
+</li>
+<li>long4
+: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>rs_quaternion
+: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
+</li>
+<li>rs_script_call_t
+: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
+</li>
+<li>rs_time_t
+: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>short2
+: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
+</li>
+<li>short3
+: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
+</li>
+<li>short4
+: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
+</li>
+<li>size_t
+: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
+</li>
+<li>ssize_t
+: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>uchar
+: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
+</li>
+<li>uchar2
+: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
+</li>
+<li>uchar3
+: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
+</li>
+<li>uchar4
+: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
+</li>
+<li>uint
+: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
+</li>
+<li>uint16_t
+: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
+</li>
+<li>uint2
+: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
+</li>
+<li>uint3
+: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
+</li>
+<li>uint32_t
+: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
+</li>
+<li>uint4
+: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
+</li>
+<li>uint64_t
+: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
+</li>
+<li>uint8_t
+: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
+</li>
+<li>ulong
+: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
+</li>
+<li>ulong2
+: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
+</li>
+<li>ulong3
+: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
+</li>
+<li>ulong4
+: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
+</li>
+<li>ushort
+: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
+</li>
+<li>ushort2
+: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
+</li>
+<li>ushort3
+: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
+</li>
+<li>ushort4
+: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
+</li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/index.html b/docs/html/reference/renderscript/index.html
new file mode 100644
index 0000000..c4c057e
--- /dev/null
+++ b/docs/html/reference/renderscript/index.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<div class="textblock"><p>Renderscript is a high-performance runtime that provides graphics rendering and compute operations at the native level. Renderscript code is compiled on devices at runtime to allow platform-independence as well. This reference documentation describes the Renderscript runtime APIs, which you can utilize to write Renderscript code in C99. The Renderscript header files are automatically included for you, except for the <a class="el" href="rs__graphics_8rsh.html" title="Renderscript graphics API.">rs_graphics.rsh</a> header. If you are doing graphics rendering, include the graphics header file like this:</p>
+<p><code>#include "rs_graphics.rsh"</code></p>
+<p>To use Renderscript, you need to utilize the Renderscript runtime APIs documented here as well as the Android framework APIs for Renderscript. For documentation on the Android framework APIs, see the <a target="_parent" href="http://developer.android.com/reference/android/renderscript/package-summary.html">android.renderscript</a> package reference. For more information on how to develop with Renderscript and how the runtime and Android framework APIs interact, see the <a target="_parent" href="http://developer.android.com/guide/topics/renderscript/index.html">Renderscript developer guide</a> and the <a target="_parent" href="http://developer.android.com/resources/samples/RenderScript/index.html">Renderscript samples</a>. </p>
+</div></div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh.html b/docs/html/reference/renderscript/rs__allocation_8rsh.html
new file mode 100644
index 0000000..ca2663b
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__allocation_8rsh.html
@@ -0,0 +1,269 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_allocation.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_allocation.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a> (const void *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a7e0a1753a930557f6dc87f25ed3fd23b">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a049ba2f6e6e18d47f2267474b2092822">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Allocation routines. </p>
+
+<p>Definition in file <a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ac85f7ed88f38b35482c6d63b56d470fe"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimFaces" ref="ac85f7ed88f38b35482c6d63b56d470fe" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimFaces </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Query an allocation for the presence of more than one face.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one face is present, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac42a07c079d6b3c6bb21975170d4e11c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimLOD" ref="ac42a07c079d6b3c6bb21975170d4e11c" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimLOD </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Query an allocation for the presence of more than one LOD.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one LOD is present, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3ca7f505a97d5b7f477bc65b9e77dafb"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimX" ref="a3ca7f505a97d5b7f477bc65b9e77dafb" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimX </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Query the dimension of an allocation.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The X dimension of the allocation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac889b866b465580eb313e5d2a9fcac3d"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimY" ref="ac889b866b465580eb313e5d2a9fcac3d" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimY </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Query the dimension of an allocation.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Y dimension of the allocation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acd6f1a2b2443e6ea39e6154577645d2c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimZ" ref="acd6f1a2b2443e6ea39e6154577645d2c" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimZ </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Query the dimension of an allocation.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Z dimension of the allocation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aadad7654929c451be299df125061c9ba"></a><!-- doxytag: member="rs_allocation.rsh::rsGetAllocation" ref="aadad7654929c451be299df125061c9ba" args="(const void *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsGetAllocation </td>
+ <td>(</td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the Allocation for a given pointer. The pointer should point within a valid allocation. The results are undefined if the pointer is not from a valid allocation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3fd30b4388748601e025bb3566ce0cbc"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a3fd30b4388748601e025bb3566ce0cbc" args="(rs_allocation, uint32_t x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const void* rsGetElementAt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Extract a single element from an allocation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7e0a1753a930557f6dc87f25ed3fd23b"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a7e0a1753a930557f6dc87f25ed3fd23b" args="(rs_allocation, uint32_t x, uint32_t y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const void* rsGetElementAt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a049ba2f6e6e18d47f2267474b2092822"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a049ba2f6e6e18d47f2267474b2092822" args="(rs_allocation, uint32_t x, uint32_t y, uint32_t z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const void* rsGetElementAt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh_source.html b/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
new file mode 100644
index 0000000..0d1c167
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_allocation.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_allocation.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__allocation_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ALLOCATION_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ALLOCATION_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="keyword">extern</span> <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> __attribute__((overloadable))
+<a name="l00032"></a>00032 <a class="code" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a>(const <span class="keywordtype">void</span> *);
+<a name="l00033"></a>00033
+<a name="l00039"></a>00039 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00040"></a>00040 <a class="code" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>);
+<a name="l00041"></a>00041
+<a name="l00047"></a>00047 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00048"></a>00048 <a class="code" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a>(rs_allocation);
+<a name="l00049"></a>00049
+<a name="l00055"></a>00055 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00056"></a>00056 <a class="code" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a>(rs_allocation);
+<a name="l00057"></a>00057
+<a name="l00063"></a>00063 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00064"></a>00064 <a class="code" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a>(rs_allocation);
+<a name="l00065"></a>00065
+<a name="l00071"></a>00071 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00072"></a>00072 <a class="code" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a>(rs_allocation);
+<a name="l00073"></a>00073
+<a name="l00074"></a>00074 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00089"></a>00089 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00090"></a>00090 rsAllocationCopy1DRange(rs_allocation dstAlloc,
+<a name="l00091"></a>00091 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
+<a name="l00092"></a>00092 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> count,
+<a name="l00093"></a>00093 rs_allocation srcAlloc,
+<a name="l00094"></a>00094 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip);
+<a name="l00095"></a>00095
+<a name="l00117"></a>00117 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00118"></a>00118 rsAllocationCopy2DRange(rs_allocation dstAlloc,
+<a name="l00119"></a>00119 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstYoff,
+<a name="l00120"></a>00120 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
+<a name="l00121"></a>00121 rs_allocation_cubemap_face dstFace,
+<a name="l00122"></a>00122 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> width, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> height,
+<a name="l00123"></a>00123 rs_allocation srcAlloc,
+<a name="l00124"></a>00124 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcYoff,
+<a name="l00125"></a>00125 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip,
+<a name="l00126"></a>00126 rs_allocation_cubemap_face srcFace);
+<a name="l00127"></a>00127
+<a name="l00128"></a>00128 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span>
+<a name="l00133"></a>00133 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * __attribute__((overloadable))
+<a name="l00134"></a>00134 <a class="code" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rsGetElementAt</a>(rs_allocation, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x);
+<a name="l00138"></a>00138 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
+<a name="l00139"></a>00139 <a class="code" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rsGetElementAt</a>(rs_allocation, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
+<a name="l00143"></a>00143 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
+<a name="l00144"></a>00144 <a class="code" href="rs__allocation_8rsh.html#a3fd30b4388748601e025bb3566ce0cbc">rsGetElementAt</a>(rs_allocation, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z);
+<a name="l00145"></a>00145
+<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
+<a name="l00147"></a>00147 <span class="preprocessor"></span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh.html b/docs/html/reference/renderscript/rs__atomic_8rsh.html
new file mode 100644
index 0000000..3d0e97e
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__atomic_8rsh.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_atomic.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_atomic.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Atomic routines. </p>
+
+<p>Definition in file <a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>.</p>
+</div></div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh_source.html b/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
new file mode 100644
index 0000000..a1400bd
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_atomic.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_atomic.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__atomic_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ATOMIC_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ATOMIC_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00037"></a>00037 rsAtomicInc(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
+<a name="l00046"></a>00046 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00047"></a>00047 rsAtomicInc(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
+<a name="l00048"></a>00048
+<a name="l00056"></a>00056 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00057"></a>00057 rsAtomicDec(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
+<a name="l00065"></a>00065 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00066"></a>00066 rsAtomicDec(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
+<a name="l00067"></a>00067
+<a name="l00076"></a>00076 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00077"></a>00077 rsAtomicAdd(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00086"></a>00086 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00087"></a>00087 rsAtomicAdd(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00088"></a>00088
+<a name="l00097"></a>00097 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00098"></a>00098 rsAtomicSub(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00107"></a>00107 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00108"></a>00108 rsAtomicSub(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00109"></a>00109
+<a name="l00118"></a>00118 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00119"></a>00119 rsAtomicAnd(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00128"></a>00128 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00129"></a>00129 rsAtomicAnd(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00130"></a>00130
+<a name="l00139"></a>00139 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00140"></a>00140 rsAtomicOr(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00149"></a>00149 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00150"></a>00150 rsAtomicOr(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00151"></a>00151
+<a name="l00160"></a>00160 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00161"></a>00161 rsAtomicXor(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00170"></a>00170 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00171"></a>00171 rsAtomicXor(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00172"></a>00172
+<a name="l00182"></a>00182 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00183"></a>00183 rsAtomicMin(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00193"></a>00193 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00194"></a>00194 rsAtomicMin(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00195"></a>00195
+<a name="l00205"></a>00205 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00206"></a>00206 rsAtomicMax(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
+<a name="l00216"></a>00216 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00217"></a>00217 rsAtomicMax(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
+<a name="l00218"></a>00218
+<a name="l00230"></a>00230 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
+<a name="l00231"></a>00231 rsAtomicCas(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue);
+<a name="l00232"></a>00232
+<a name="l00244"></a>00244 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
+<a name="l00245"></a>00245 rsAtomicCas(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue);
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span>
+<a name="l00249"></a>00249 <span class="preprocessor">#endif</span>
+<a name="l00250"></a>00250 <span class="preprocessor"></span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh.html b/docs/html/reference/renderscript/rs__cl_8rsh.html
new file mode 100644
index 0000000..5c499e6
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__cl_8rsh.html
@@ -0,0 +1,1938 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_cl.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_cl.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2c0c7c00815bd480fcda80d1144ac20d">acospi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a679b63e86358fc962cb343eb6263496b">asinpi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a> (float y, float x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a420d4aaea0e53d7172845a21a1e648ea">atanpi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9aed0a1613c86acf5e4c5ad3290a4745">atan2pi</a> (float y, float x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a07b12188bd53c6b584274892f6abf425">cospi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4b51589157c9ce600ea6156be51d8d18">exp10</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a> (float, float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a> (float a, float b, float c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac5277212e0df309a0a7c908424f7b14b">fract</a> (float v, float *iptr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a> (float v, int *iptr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a> (float x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">lgamma</a> (float x, int *y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2fb571ae932f671ff3e9e97f2d3fabb7">log2</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a> (float a, float b, float c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a> (float x, float *iret)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#afd46205452017b741abb2e17fc28557d">pown</a> (float v, int p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff65421721ec8e6ce8d875a563d005f">powr</a> (float v, float p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a> (float x, float y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af169e7e1c575b7c24c1834569223077f">rootn</a> (float v, int n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5db00fde9e6bff693a38f3a37e7a1f70">rsqrt</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a240f7c7c20b432a30dc660b5dd4cd320">sincos</a> (float v, float *cosptr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4fe4fef049786e888526d6f37b912b0a">sinpi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad8bfb083dd3979a305e594a0d6e581c4">tanpi</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a> (float amount, float low, float high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">degrees</a> (float radians)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a> (float start, float stop, float amount)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aaef2526c4d190ba6f7301b4e810917a7">radians</a> (float degrees)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a> (float edge, float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3e6d477a06dec7070f073eec9d8f420c">sign</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0f7beb26bb4aa30535babd14492a7e90">cross</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> lhs, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a> (float lhs, float rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a> (float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">distance</a> (float lhs, float rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">normalize</a> (float v)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Basic math functions. </p>
+
+<p>Definition in file <a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a07648648c7f857cfd1479821d4389751"></a><!-- doxytag: member="rs_cl.rsh::acos" ref="a07648648c7f857cfd1479821d4389751" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float acos </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse cosine.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a6575106413ec72448439ef67f1309424"></a><!-- doxytag: member="rs_cl.rsh::acosh" ref="a6575106413ec72448439ef67f1309424" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float acosh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse hyperbolic cosine.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a2c0c7c00815bd480fcda80d1144ac20d"></a><!-- doxytag: member="rs_cl.rsh::acospi" ref="a2c0c7c00815bd480fcda80d1144ac20d" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float acospi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse cosine divided by PI.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a78b9d0583bd0699e2eac30d2a136817a"></a><!-- doxytag: member="rs_cl.rsh::asin" ref="a78b9d0583bd0699e2eac30d2a136817a" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float asin </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse sine.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a4e3fe465ed5541af53192c59c80af1a0"></a><!-- doxytag: member="rs_cl.rsh::asinh" ref="a4e3fe465ed5541af53192c59c80af1a0" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float asinh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse hyperbolic sine.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a679b63e86358fc962cb343eb6263496b"></a><!-- doxytag: member="rs_cl.rsh::asinpi" ref="a679b63e86358fc962cb343eb6263496b" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float asinpi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse sine divided by PI.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="ab790c3a7df8fcbeab77f6c0e3b4dcada"></a><!-- doxytag: member="rs_cl.rsh::atan" ref="ab790c3a7df8fcbeab77f6c0e3b4dcada" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float atan </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse tangent.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="aaf4b636b09041878e1542054c73d81e9"></a><!-- doxytag: member="rs_cl.rsh::atan2" ref="aaf4b636b09041878e1542054c73d81e9" args="(float y, float x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float atan2 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse tangent of y / x.</p>
+<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9aed0a1613c86acf5e4c5ad3290a4745"></a><!-- doxytag: member="rs_cl.rsh::atan2pi" ref="a9aed0a1613c86acf5e4c5ad3290a4745" args="(float y, float x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float atan2pi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse tangent of y / x, divided by PI.</p>
+<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a83bdf415cc561ff6237a124273d9fb0d"></a><!-- doxytag: member="rs_cl.rsh::atanh" ref="a83bdf415cc561ff6237a124273d9fb0d" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float atanh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse hyperbolic tangent.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="a420d4aaea0e53d7172845a21a1e648ea"></a><!-- doxytag: member="rs_cl.rsh::atanpi" ref="a420d4aaea0e53d7172845a21a1e648ea" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float atanpi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the inverse tangent divided by PI.</p>
+<p>Supports float, float2, float3, float4 </p>
+
+</div>
+</div>
+<a class="anchor" id="ae9d1787b55c2587478a24d96573225df"></a><!-- doxytag: member="rs_cl.rsh::cbrt" ref="ae9d1787b55c2587478a24d96573225df" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float cbrt </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the cube root.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa8fc6daff743a1b635ccbf9af83fe4e4"></a><!-- doxytag: member="rs_cl.rsh::ceil" ref="aa8fc6daff743a1b635ccbf9af83fe4e4" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float ceil </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the smallest integer not less than a value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad4dab580aba6cf15539b407b9163dfde"></a><!-- doxytag: member="rs_cl.rsh::clamp" ref="ad4dab580aba6cf15539b407b9163dfde" args="(float amount, float low, float high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> clamp </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the minimum of two values.</p>
+<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. Return the maximum of two values.</p>
+<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. Clamp a value to a specified high and low bound.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">amount</td><td>value to be clamped. Supports 1,2,3,4 components </td></tr>
+ <tr><td class="paramname">low</td><td>Lower bound, must be scalar or matching vector. </td></tr>
+ <tr><td class="paramname">high</td><td>High bound, must match type of low </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a29f2602d95aa7b3950e2b77b3e268f7e"></a><!-- doxytag: member="rs_cl.rsh::copysign" ref="a29f2602d95aa7b3950e2b77b3e268f7e" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float copysign </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy the sign bit from y to x.</p>
+<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05"></a><!-- doxytag: member="rs_cl.rsh::cos" ref="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float cos </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the cosine.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac8d88d83182afd591401eaed101d9670"></a><!-- doxytag: member="rs_cl.rsh::cosh" ref="ac8d88d83182afd591401eaed101d9670" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float cosh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the hypebolic cosine.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a07b12188bd53c6b584274892f6abf425"></a><!-- doxytag: member="rs_cl.rsh::cospi" ref="a07b12188bd53c6b584274892f6abf425" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float cospi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the cosine of the value * PI.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0f7beb26bb4aa30535babd14492a7e90"></a><!-- doxytag: member="rs_cl.rsh::cross" ref="a0f7beb26bb4aa30535babd14492a7e90" args="(float3 lhs, float3 rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> cross </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the cross product of two vectors.</p>
+<p>Supports 3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="adc1b551193e66d8037daa1721df4d29c"></a><!-- doxytag: member="rs_cl.rsh::degrees" ref="adc1b551193e66d8037daa1721df4d29c" args="(float radians)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float degrees </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>radians</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Convert from radians to degrees.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a4488863373be92e113e9d24aa3d21e76"></a><!-- doxytag: member="rs_cl.rsh::distance" ref="a4488863373be92e113e9d24aa3d21e76" args="(float lhs, float rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float distance </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the distance between two points.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a70544acaca578035a849eef67d62c449"></a><!-- doxytag: member="rs_cl.rsh::dot" ref="a70544acaca578035a849eef67d62c449" args="(float lhs, float rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float dot </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the dot product of two vectors.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a139f102df651c25c26dd35d549173f57"></a><!-- doxytag: member="rs_cl.rsh::erf" ref="a139f102df651c25c26dd35d549173f57" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float erf </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the error function.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2e24dc8594e758b64c340153f67a533c"></a><!-- doxytag: member="rs_cl.rsh::erfc" ref="a2e24dc8594e758b64c340153f67a533c" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float erfc </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the complementary error function.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6d9aac64c2686961ca8f30e3c34fef36"></a><!-- doxytag: member="rs_cl.rsh::exp" ref="a6d9aac64c2686961ca8f30e3c34fef36" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float exp </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return e ^ value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4b51589157c9ce600ea6156be51d8d18"></a><!-- doxytag: member="rs_cl.rsh::exp10" ref="a4b51589157c9ce600ea6156be51d8d18" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float exp10 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return 10 ^ value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a39bca19ee2b1aa95144e58eb4a1e4f88"></a><!-- doxytag: member="rs_cl.rsh::exp2" ref="a39bca19ee2b1aa95144e58eb4a1e4f88" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float exp2 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return 2 ^ value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7996044b67be921a5e58e2fe76af66e2"></a><!-- doxytag: member="rs_cl.rsh::expm1" ref="a7996044b67be921a5e58e2fe76af66e2" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float expm1 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (e ^ value) - 1.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad6e897f1acae252ec0901e3b122992ea"></a><!-- doxytag: member="rs_cl.rsh::fabs" ref="ad6e897f1acae252ec0901e3b122992ea" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fabs </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the absolute value of a value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae7a7bac0f4e244594078f87b42c8716a"></a><!-- doxytag: member="rs_cl.rsh::fdim" ref="ae7a7bac0f4e244594078f87b42c8716a" args="(float, float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fdim </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the positive difference between two values.</p>
+<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
+
+</div>
+</div>
+<a class="anchor" id="aae2da38a7246378dff8014ec407a30c3"></a><!-- doxytag: member="rs_cl.rsh::floor" ref="aae2da38a7246378dff8014ec407a30c3" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float floor </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the smallest integer not greater than a value.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac42909daec463fe449743e70baf8360d"></a><!-- doxytag: member="rs_cl.rsh::fma" ref="ac42909daec463fe449743e70baf8360d" args="(float a, float b, float c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fma </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return a*b + c.</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="a60f2072d8a746e7fe05cd46dea0fefcc"></a><!-- doxytag: member="rs_cl.rsh::fmax" ref="a60f2072d8a746e7fe05cd46dea0fefcc" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fmax </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (x < y ? y : x)</p>
+<p>Supports float, float2, float3, float4. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
+ <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a1fd9d57c6c992866bf5161be2cf4c447"></a><!-- doxytag: member="rs_cl.rsh::fmin" ref="a1fd9d57c6c992866bf5161be2cf4c447" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fmin </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (x > y ? y : x)</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
+ <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a31d5e179730ae44e1dbc74c1535f392e"></a><!-- doxytag: member="rs_cl.rsh::fmod" ref="a31d5e179730ae44e1dbc74c1535f392e" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float fmod </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the remainder from x / y</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac5277212e0df309a0a7c908424f7b14b"></a><!-- doxytag: member="rs_cl.rsh::fract" ref="ac5277212e0df309a0a7c908424f7b14b" args="(float v, float *iptr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float fract </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>iptr</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return fractional part of v</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iptr</td><td>iptr[0] will be set to the floor of the input value. Supports float, float2, float3, float4. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a778635fffed3cee8ab0800482ba53a30"></a><!-- doxytag: member="rs_cl.rsh::frexp" ref="a778635fffed3cee8ab0800482ba53a30" args="(float v, int *iptr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float frexp </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>iptr</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the mantissa and place the exponent into iptr[0]</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>Supports float, float2, float3, float4. </td></tr>
+ <tr><td class="paramname">iptr</td><td>Must have the same vector size as v. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a147f38d6e41f45de9b5e7c6f3dcac010"></a><!-- doxytag: member="rs_cl.rsh::hypot" ref="a147f38d6e41f45de9b5e7c6f3dcac010" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float hypot </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return sqrt(x*x + y*y)</p>
+<p>Supports float, float2, float3, float4. </p>
+
+</div>
+</div>
+<a class="anchor" id="aad9a8beba52acb77b1efeba432e6cc2c"></a><!-- doxytag: member="rs_cl.rsh::ilogb" ref="aad9a8beba52acb77b1efeba432e6cc2c" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ilogb </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the integer exponent of a value</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a013bc1dcda984cbc608e123ed38491e6"></a><!-- doxytag: member="rs_cl.rsh::ldexp" ref="a013bc1dcda984cbc608e123ed38491e6" args="(float x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float ldexp </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (x * 2^y)</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
+ <tr><td class="paramname">y</td><td>Supports single component or matching vector. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a1a222b7879342279e1e0070d6afd9e18"></a><!-- doxytag: member="rs_cl.rsh::length" ref="a1a222b7879342279e1e0070d6afd9e18" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float length </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the length of a vector.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a3ff36f9b21927d6b4b58616e48fddcb4"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a3ff36f9b21927d6b4b58616e48fddcb4" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float lgamma </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the log gamma</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a735f4e14e33c50348ef41220f9210bcc"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a735f4e14e33c50348ef41220f9210bcc" args="(float x, int *y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float lgamma </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the log gamma and sign</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
+ <tr><td class="paramname">y</td><td>Supports matching vector. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a3ff85f5f4b206ecf9ec9d128d7d18a08"></a><!-- doxytag: member="rs_cl.rsh::log" ref="a3ff85f5f4b206ecf9ec9d128d7d18a08" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float log </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the natural logarithm</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="af5c1bdba2a13aa2e2b0722287f6a919f"></a><!-- doxytag: member="rs_cl.rsh::log10" ref="af5c1bdba2a13aa2e2b0722287f6a919f" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float log10 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the base 10 logarithm</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="ae10541ede49062ef7f977712c4878c1f"></a><!-- doxytag: member="rs_cl.rsh::log1p" ref="ae10541ede49062ef7f977712c4878c1f" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float log1p </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the natural logarithm of (v + 1.0f)</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a2fb571ae932f671ff3e9e97f2d3fabb7"></a><!-- doxytag: member="rs_cl.rsh::log2" ref="a2fb571ae932f671ff3e9e97f2d3fabb7" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float log2 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the base 2 logarithm</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a28742d6ce2f20a61f16ecc08ed499871"></a><!-- doxytag: member="rs_cl.rsh::logb" ref="a28742d6ce2f20a61f16ecc08ed499871" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float logb </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the exponent of the value.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a4f9086698f1eb466ba2dccf7e331cdc3"></a><!-- doxytag: member="rs_cl.rsh::mad" ref="a4f9086698f1eb466ba2dccf7e331cdc3" args="(float a, float b, float c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float mad </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute (a * b) + c</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="af4c76d51368c8e330cb59ea5a0a2310e"></a><!-- doxytag: member="rs_cl.rsh::mix" ref="af4c76d51368c8e330cb59ea5a0a2310e" args="(float start, float stop, float amount)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> mix </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>amount</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>return start + ((stop - start) * amount);</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a841633bcdcaeb6a514d9c6460f0adf2d"></a><!-- doxytag: member="rs_cl.rsh::modf" ref="a841633bcdcaeb6a514d9c6460f0adf2d" args="(float x, float *iret)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float modf </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>iret</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the integral and fractional components of a number Supports 1,2,3,4 components</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>Source value </td></tr>
+ <tr><td class="paramname">iret</td><td>iret[0] will be set to the integral portion of the number. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>The floating point portion of the value. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adb11df05fb9985595af0a7bd882bdeac"></a><!-- doxytag: member="rs_cl.rsh::nextafter" ref="adb11df05fb9985595af0a7bd882bdeac" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float nextafter </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the next floating point number from x towards y.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a373e03e92a1b7f3fdea5ca4ca159d2a8"></a><!-- doxytag: member="rs_cl.rsh::normalize" ref="a373e03e92a1b7f3fdea5ca4ca159d2a8" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> normalize </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Normalize a vector.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a9243de1d67fcc847a89f95748d664b19"></a><!-- doxytag: member="rs_cl.rsh::pow" ref="a9243de1d67fcc847a89f95748d664b19" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float pow </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return x ^ y.</p>
+<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
+
+</div>
+</div>
+<a class="anchor" id="afd46205452017b741abb2e17fc28557d"></a><!-- doxytag: member="rs_cl.rsh::pown" ref="afd46205452017b741abb2e17fc28557d" args="(float v, int p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float pown </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>p</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (v ^ p).</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a3ff65421721ec8e6ce8d875a563d005f"></a><!-- doxytag: member="rs_cl.rsh::powr" ref="a3ff65421721ec8e6ce8d875a563d005f" args="(float v, float p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float powr </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>p</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (v ^ p). </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>must be greater than 0.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="aaef2526c4d190ba6f7301b4e810917a7"></a><!-- doxytag: member="rs_cl.rsh::radians" ref="aaef2526c4d190ba6f7301b4e810917a7" args="(float degrees)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float radians </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>degrees</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Convert from degrees to radians.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a5188ac0e3af95b0956c6abeafb74fda9"></a><!-- doxytag: member="rs_cl.rsh::remainder" ref="a5188ac0e3af95b0956c6abeafb74fda9" args="(float x, float y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float remainder </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return round x/y to the nearest integer then compute the remander.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="adb0ffe344ae56ca7fc9083c1f2943e55"></a><!-- doxytag: member="rs_cl.rsh::rint" ref="adb0ffe344ae56ca7fc9083c1f2943e55" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float rint </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Round to the nearest integral value.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="af169e7e1c575b7c24c1834569223077f"></a><!-- doxytag: member="rs_cl.rsh::rootn" ref="af169e7e1c575b7c24c1834569223077f" args="(float v, int n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float rootn </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the Nth root of a value.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="aff4846ab5b947550814d5414a2c3626f"></a><!-- doxytag: member="rs_cl.rsh::round" ref="aff4846ab5b947550814d5414a2c3626f" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float round </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Round to the nearest integral value. Half values are rounded away from zero.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a5db00fde9e6bff693a38f3a37e7a1f70"></a><!-- doxytag: member="rs_cl.rsh::rsqrt" ref="a5db00fde9e6bff693a38f3a37e7a1f70" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float rsqrt </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return (1 / sqrt(value)).</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>The incoming value in radians Supports 1,2,3,4 components </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a3e6d477a06dec7070f073eec9d8f420c"></a><!-- doxytag: member="rs_cl.rsh::sign" ref="a3e6d477a06dec7070f073eec9d8f420c" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float sign </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>if (v < 0) return -1.f; else if (v > 0) return 1.f; else return 0.f;</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a8c8cd526b44eb55aede77cf659f24306"></a><!-- doxytag: member="rs_cl.rsh::sin" ref="a8c8cd526b44eb55aede77cf659f24306" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float sin </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the sine of a value specified in radians.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>The incoming value in radians Supports 1,2,3,4 components </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a240f7c7c20b432a30dc660b5dd4cd320"></a><!-- doxytag: member="rs_cl.rsh::sincos" ref="a240f7c7c20b432a30dc660b5dd4cd320" args="(float v, float *cosptr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float sincos </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>cosptr</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the sine and cosine of a value.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>sine </dd></dl>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
+ <tr><td class="paramname">*cosptr</td><td>cosptr[0] will be set to the cosine value.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="ae686e0cc567f7ee2b0a84706aa486e4a"></a><!-- doxytag: member="rs_cl.rsh::sinh" ref="ae686e0cc567f7ee2b0a84706aa486e4a" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float sinh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the hyperbolic sine of a value specified in radians.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a4fe4fef049786e888526d6f37b912b0a"></a><!-- doxytag: member="rs_cl.rsh::sinpi" ref="a4fe4fef049786e888526d6f37b912b0a" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float sinpi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the sin(v * PI).</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a92da0faef80c4d8f66e954c8c169a729"></a><!-- doxytag: member="rs_cl.rsh::sqrt" ref="a92da0faef80c4d8f66e954c8c169a729" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float sqrt </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the square root of a value.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="a4f7ba6882099d16853d0415982121900"></a><!-- doxytag: member="rs_cl.rsh::step" ref="a4f7ba6882099d16853d0415982121900" args="(float edge, float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> step </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>edge</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>if (v < edge) return 0.f; else return 1.f;</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="af12e245af8ff9bb72b5000e7c26cd8fe"></a><!-- doxytag: member="rs_cl.rsh::tan" ref="af12e245af8ff9bb72b5000e7c26cd8fe" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float tan </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the tangent of a value.</p>
+<p>Supports 1,2,3,4 components </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abc36e89ddb87ea78451d1c5921ddbd8d"></a><!-- doxytag: member="rs_cl.rsh::tanh" ref="abc36e89ddb87ea78451d1c5921ddbd8d" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float tanh </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the hyperbolic tangent of a value.</p>
+<p>Supports 1,2,3,4 components </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad8bfb083dd3979a305e594a0d6e581c4"></a><!-- doxytag: member="rs_cl.rsh::tanpi" ref="ad8bfb083dd3979a305e594a0d6e581c4" args="(float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float tanpi </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return tan(v * PI)</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="ab9f4cbfd2470420ee302f28cf3de6dd0"></a><!-- doxytag: member="rs_cl.rsh::tgamma" ref="ab9f4cbfd2470420ee302f28cf3de6dd0" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float tgamma </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compute the gamma function of a value.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+<a class="anchor" id="ad1a7c65693231219db1babeae1c41f15"></a><!-- doxytag: member="rs_cl.rsh::trunc" ref="ad1a7c65693231219db1babeae1c41f15" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float trunc </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Round to integral using truncation.</p>
+<p>Supports 1,2,3,4 components </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh_source.html b/docs/html/reference/renderscript/rs__cl_8rsh_source.html
new file mode 100644
index 0000000..73ecdc6
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__cl_8rsh_source.html
@@ -0,0 +1,475 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_cl.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_cl.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__cl_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_CL_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CL_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026 <span class="comment">// Conversions</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#define CVT_FUNC_2(typeout, typein) \</span>
+<a name="l00028"></a>00028 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable)) \</span>
+<a name="l00029"></a>00029 <span class="preprocessor"> convert_##typeout##2(typein##2 v); \</span>
+<a name="l00030"></a>00030 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable)) \</span>
+<a name="l00031"></a>00031 <span class="preprocessor"> convert_##typeout##3(typein##3 v); \</span>
+<a name="l00032"></a>00032 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable)) \</span>
+<a name="l00033"></a>00033 <span class="preprocessor"> convert_##typeout##4(typein##4 v);</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span>
+<a name="l00035"></a>00035
+<a name="l00036"></a>00036 <span class="preprocessor">#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \</span>
+<a name="l00037"></a>00037 <span class="preprocessor"> CVT_FUNC_2(type, char) \</span>
+<a name="l00038"></a>00038 <span class="preprocessor"> CVT_FUNC_2(type, ushort) \</span>
+<a name="l00039"></a>00039 <span class="preprocessor"> CVT_FUNC_2(type, short) \</span>
+<a name="l00040"></a>00040 <span class="preprocessor"> CVT_FUNC_2(type, uint) \</span>
+<a name="l00041"></a>00041 <span class="preprocessor"> CVT_FUNC_2(type, int) \</span>
+<a name="l00042"></a>00042 <span class="preprocessor"> CVT_FUNC_2(type, float)</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 CVT_FUNC(<span class="keywordtype">char</span>)
+<a name="l00045"></a>00045 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
+<a name="l00046"></a>00046 CVT_FUNC(<span class="keywordtype">short</span>)
+<a name="l00047"></a>00047 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
+<a name="l00048"></a>00048 CVT_FUNC(<span class="keywordtype">int</span>)
+<a name="l00049"></a>00049 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
+<a name="l00050"></a>00050 CVT_FUNC(<span class="keywordtype">float</span>)
+<a name="l00051"></a>00051
+<a name="l00052"></a>00052 <span class="comment">// Float ops, 6.11.2</span>
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="preprocessor">#define FN_FUNC_FN(fnc) \</span>
+<a name="l00055"></a>00055 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v); \</span>
+<a name="l00056"></a>00056 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v); \</span>
+<a name="l00057"></a>00057 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v);</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00059"></a>00059 <span class="preprocessor">#define IN_FUNC_FN(fnc) \</span>
+<a name="l00060"></a>00060 <span class="preprocessor">_RS_RUNTIME int2 __attribute__((overloadable)) fnc(float2 v); \</span>
+<a name="l00061"></a>00061 <span class="preprocessor">_RS_RUNTIME int3 __attribute__((overloadable)) fnc(float3 v); \</span>
+<a name="l00062"></a>00062 <span class="preprocessor">_RS_RUNTIME int4 __attribute__((overloadable)) fnc(float4 v);</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#define FN_FUNC_FN_FN(fnc) \</span>
+<a name="l00065"></a>00065 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2); \</span>
+<a name="l00066"></a>00066 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2); \</span>
+<a name="l00067"></a>00067 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2);</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a>00069 <span class="preprocessor">#define FN_FUNC_FN_F(fnc) \</span>
+<a name="l00070"></a>00070 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float v2); \</span>
+<a name="l00071"></a>00071 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float v2); \</span>
+<a name="l00072"></a>00072 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float v2);</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+<a name="l00074"></a>00074 <span class="preprocessor">#define FN_FUNC_FN_IN(fnc) \</span>
+<a name="l00075"></a>00075 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2); \</span>
+<a name="l00076"></a>00076 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 v2); \</span>
+<a name="l00077"></a>00077 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 v2); \</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_I(fnc) \</span>
+<a name="l00080"></a>00080 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int v2); \</span>
+<a name="l00081"></a>00081 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int v2); \</span>
+<a name="l00082"></a>00082 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int v2);</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a>00084 <span class="preprocessor">#define FN_FUNC_FN_PFN(fnc) \</span>
+<a name="l00085"></a>00085 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
+<a name="l00086"></a>00086 <span class="preprocessor"> fnc(float2 v1, float2 *v2); \</span>
+<a name="l00087"></a>00087 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
+<a name="l00088"></a>00088 <span class="preprocessor"> fnc(float3 v1, float3 *v2); \</span>
+<a name="l00089"></a>00089 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
+<a name="l00090"></a>00090 <span class="preprocessor"> fnc(float4 v1, float4 *v2);</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span>
+<a name="l00092"></a>00092 <span class="preprocessor">#define FN_FUNC_FN_PIN(fnc) \</span>
+<a name="l00093"></a>00093 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 *v2); \</span>
+<a name="l00094"></a>00094 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 *v2); \</span>
+<a name="l00095"></a>00095 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 *v2);</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00097"></a>00097 <span class="preprocessor">#define FN_FUNC_FN_FN_FN(fnc) \</span>
+<a name="l00098"></a>00098 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
+<a name="l00099"></a>00099 <span class="preprocessor"> fnc(float2 v1, float2 v2, float2 v3); \</span>
+<a name="l00100"></a>00100 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
+<a name="l00101"></a>00101 <span class="preprocessor"> fnc(float3 v1, float3 v2, float3 v3); \</span>
+<a name="l00102"></a>00102 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
+<a name="l00103"></a>00103 <span class="preprocessor"> fnc(float4 v1, float4 v2, float4 v3);</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>
+<a name="l00105"></a>00105 <span class="preprocessor">#define FN_FUNC_FN_FN_PIN(fnc) \</span>
+<a name="l00106"></a>00106 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
+<a name="l00107"></a>00107 <span class="preprocessor"> fnc(float2 v1, float2 v2, int2 *v3); \</span>
+<a name="l00108"></a>00108 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
+<a name="l00109"></a>00109 <span class="preprocessor"> fnc(float3 v1, float3 v2, int3 *v3); \</span>
+<a name="l00110"></a>00110 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
+<a name="l00111"></a>00111 <span class="preprocessor"> fnc(float4 v1, float4 v2, int4 *v3);</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span>
+<a name="l00113"></a>00113
+<a name="l00119"></a>00119 <span class="keyword">extern</span> <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(<span class="keywordtype">float</span>);
+<a name="l00120"></a>00120 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>)
+<a name="l00121"></a>00121
+<a name="l00127"></a>00127 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>(<span class="keywordtype">float</span>);
+<a name="l00128"></a>00128 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>)
+<a name="l00129"></a>00129
+<a name="l00135"></a>00135 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2c0c7c00815bd480fcda80d1144ac20d">acospi</a>(<span class="keywordtype">float</span> v);
+<a name="l00136"></a>00136 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2c0c7c00815bd480fcda80d1144ac20d">acospi</a>)
+<a name="l00137"></a>00137
+<a name="l00143"></a>00143 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>(<span class="keywordtype">float</span>);
+<a name="l00144"></a>00144 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>)
+<a name="l00145"></a>00145
+<a name="l00151"></a>00151 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>(<span class="keywordtype">float</span>);
+<a name="l00152"></a>00152 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>)
+<a name="l00153"></a>00153
+<a name="l00154"></a>00154
+<a name="l00160"></a>00160 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a679b63e86358fc962cb343eb6263496b">asinpi</a>(<span class="keywordtype">float</span> v);
+<a name="l00161"></a>00161 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a679b63e86358fc962cb343eb6263496b">asinpi</a>)
+<a name="l00162"></a>00162
+<a name="l00168"></a>00168 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>(<span class="keywordtype">float</span>);
+<a name="l00169"></a>00169 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>)
+<a name="l00170"></a>00170
+<a name="l00180"></a>00180 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
+<a name="l00181"></a>00181 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>)
+<a name="l00182"></a>00182
+<a name="l00188"></a>00188 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>(<span class="keywordtype">float</span>);
+<a name="l00189"></a>00189 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>)
+<a name="l00190"></a>00190
+<a name="l00196"></a>00196 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a420d4aaea0e53d7172845a21a1e648ea">atanpi</a>(<span class="keywordtype">float</span> v);
+<a name="l00197"></a>00197 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a420d4aaea0e53d7172845a21a1e648ea">atanpi</a>)
+<a name="l00198"></a>00198
+<a name="l00208"></a>00208 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9aed0a1613c86acf5e4c5ad3290a4745">atan2pi</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
+<a name="l00209"></a>00209 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9aed0a1613c86acf5e4c5ad3290a4745">atan2pi</a>)
+<a name="l00210"></a>00210
+<a name="l00211"></a>00211
+<a name="l00217"></a>00217 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>(<span class="keywordtype">float</span>);
+<a name="l00218"></a>00218 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>)
+<a name="l00219"></a>00219
+<a name="l00225"></a>00225 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>(<span class="keywordtype">float</span>);
+<a name="l00226"></a>00226 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>)
+<a name="l00227"></a>00227
+<a name="l00237"></a>00237 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00238"></a>00238 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>)
+<a name="l00239"></a>00239
+<a name="l00245"></a>00245 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(<span class="keywordtype">float</span>);
+<a name="l00246"></a>00246 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>)
+<a name="l00247"></a>00247
+<a name="l00253"></a>00253 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>(<span class="keywordtype">float</span>);
+<a name="l00254"></a>00254 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>)
+<a name="l00255"></a>00255
+<a name="l00261"></a>00261 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a07b12188bd53c6b584274892f6abf425">cospi</a>(<span class="keywordtype">float</span> v);
+<a name="l00262"></a>00262 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a07b12188bd53c6b584274892f6abf425">cospi</a>)
+<a name="l00263"></a>00263
+<a name="l00269"></a>00269 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>(<span class="keywordtype">float</span>);
+<a name="l00270"></a>00270 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>)
+<a name="l00271"></a>00271
+<a name="l00277"></a>00277 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>(<span class="keywordtype">float</span>);
+<a name="l00278"></a>00278 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>)
+<a name="l00279"></a>00279
+<a name="l00285"></a>00285 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>(<span class="keywordtype">float</span>);
+<a name="l00286"></a>00286 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>)
+<a name="l00287"></a>00287
+<a name="l00293"></a>00293 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>(<span class="keywordtype">float</span>);
+<a name="l00294"></a>00294 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>)
+<a name="l00295"></a>00295
+<a name="l00302"></a>00302 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00303"></a>00303 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>)
+<a name="l00304"></a>00304
+<a name="l00310"></a>00310 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4b51589157c9ce600ea6156be51d8d18">exp10</a>(<span class="keywordtype">float</span> v);
+<a name="l00311"></a>00311 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a4b51589157c9ce600ea6156be51d8d18">exp10</a>)
+<a name="l00312"></a>00312
+<a name="l00318"></a>00318 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>(<span class="keywordtype">float</span>);
+<a name="l00319"></a>00319 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>)
+<a name="l00320"></a>00320
+<a name="l00326"></a>00326 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>(<span class="keywordtype">float</span>);
+<a name="l00327"></a>00327 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>)
+<a name="l00328"></a>00328
+<a name="l00335"></a>00335 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
+<a name="l00336"></a>00336 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>)
+<a name="l00337"></a>00337
+<a name="l00343"></a>00343 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>(<span class="keywordtype">float</span>);
+<a name="l00344"></a>00344 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>)
+<a name="l00345"></a>00345
+<a name="l00351"></a>00351 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
+<a name="l00352"></a>00352 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>)
+<a name="l00353"></a>00353
+<a name="l00361"></a>00361 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00362"></a>00362 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>);
+<a name="l00363"></a>00363 FN_FUNC_FN_F(fmax);
+<a name="l00364"></a>00364
+<a name="l00371"></a>00371 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00372"></a>00372 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>);
+<a name="l00373"></a>00373 FN_FUNC_FN_F(fmin);
+<a name="l00374"></a>00374
+<a name="l00380"></a>00380 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00381"></a>00381 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>)
+<a name="l00382"></a>00382
+<a name="l00383"></a>00383
+<a name="l00390"></a>00390 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac5277212e0df309a0a7c908424f7b14b">fract</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *iptr);
+<a name="l00391"></a>00391 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#ac5277212e0df309a0a7c908424f7b14b">fract</a>)
+<a name="l00392"></a>00392
+<a name="l00399"></a>00399 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> *iptr);
+<a name="l00400"></a>00400 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>)
+<a name="l00401"></a>00401
+<a name="l00407"></a>00407 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00408"></a>00408 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>)
+<a name="l00409"></a>00409
+<a name="l00415"></a>00415 extern <span class="keywordtype">int</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>(<span class="keywordtype">float</span>);
+<a name="l00416"></a>00416 IN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>)
+<a name="l00417"></a>00417
+<a name="l00424"></a>00424 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span> y);
+<a name="l00425"></a>00425 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
+<a name="l00426"></a>00426 FN_FUNC_FN_I(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
+<a name="l00427"></a>00427
+<a name="l00433"></a>00433 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span>);
+<a name="l00434"></a>00434 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
+<a name="l00435"></a>00435
+<a name="l00442"></a>00442 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span>* y);
+<a name="l00443"></a>00443 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
+<a name="l00444"></a>00444
+<a name="l00450"></a>00450 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>(<span class="keywordtype">float</span>);
+<a name="l00451"></a>00451 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>)
+<a name="l00452"></a>00452
+<a name="l00458"></a>00458 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>(<span class="keywordtype">float</span>);
+<a name="l00459"></a>00459 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>)
+<a name="l00460"></a>00460
+<a name="l00466"></a>00466 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2fb571ae932f671ff3e9e97f2d3fabb7">log2</a>(<span class="keywordtype">float</span> v);
+<a name="l00467"></a>00467 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2fb571ae932f671ff3e9e97f2d3fabb7">log2</a>)
+<a name="l00468"></a>00468
+<a name="l00474"></a>00474 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>(<span class="keywordtype">float</span> v);
+<a name="l00475"></a>00475 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>)
+<a name="l00476"></a>00476
+<a name="l00482"></a>00482 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>(<span class="keywordtype">float</span>);
+<a name="l00483"></a>00483 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>)
+<a name="l00484"></a>00484
+<a name="l00490"></a>00490 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
+<a name="l00491"></a>00491 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>)
+<a name="l00492"></a>00492
+<a name="l00501"></a>00501 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *iret);
+<a name="l00502"></a>00502 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>);
+<a name="l00503"></a>00503
+<a name="l00504"></a>00504 <span class="comment">//extern float __attribute__((overloadable)) nan(uint);</span>
+<a name="l00505"></a>00505
+<a name="l00511"></a>00511 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00512"></a>00512 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>)
+<a name="l00513"></a>00513
+<a name="l00519"></a>00519 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#afd46205452017b741abb2e17fc28557d">pown</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> p);
+<a name="l00520"></a>00520 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#afd46205452017b741abb2e17fc28557d">pown</a>)
+<a name="l00521"></a>00521
+<a name="l00528"></a>00528 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff65421721ec8e6ce8d875a563d005f">powr</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> p);
+<a name="l00529"></a>00529 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a3ff65421721ec8e6ce8d875a563d005f">powr</a>)
+<a name="l00530"></a>00530
+<a name="l00536"></a>00536 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
+<a name="l00537"></a>00537 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>)
+<a name="l00538"></a>00538
+<a name="l00539"></a>00539 <span class="comment">// document once we know the precision of bionic</span>
+<a name="l00540"></a>00540 extern <span class="keywordtype">float</span> __attribute__((overloadable)) remquo(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);
+<a name="l00541"></a>00541 FN_FUNC_FN_FN_PIN(remquo)
+<a name="l00542"></a>00542
+<a name="l00548"></a>00548 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>(<span class="keywordtype">float</span>);
+<a name="l00549"></a>00549 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>)
+<a name="l00550"></a>00550
+<a name="l00556"></a>00556 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af169e7e1c575b7c24c1834569223077f">rootn</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> n);
+<a name="l00557"></a>00557 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#af169e7e1c575b7c24c1834569223077f">rootn</a>)
+<a name="l00558"></a>00558
+<a name="l00564"></a>00564 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>(<span class="keywordtype">float</span>);
+<a name="l00565"></a>00565 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>)
+<a name="l00566"></a>00566
+<a name="l00572"></a>00572 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(<span class="keywordtype">float</span>);
+<a name="l00573"></a>00573 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>)
+<a name="l00574"></a>00574
+<a name="l00581"></a>00581 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5db00fde9e6bff693a38f3a37e7a1f70">rsqrt</a>(<span class="keywordtype">float</span> v);
+<a name="l00582"></a>00582 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a5db00fde9e6bff693a38f3a37e7a1f70">rsqrt</a>)
+<a name="l00583"></a>00583
+<a name="l00590"></a>00590 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(<span class="keywordtype">float</span> v);
+<a name="l00591"></a>00591 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>)
+<a name="l00592"></a>00592
+<a name="l00602"></a>00602 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a240f7c7c20b432a30dc660b5dd4cd320">sincos</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *cosptr);
+<a name="l00603"></a>00603 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a240f7c7c20b432a30dc660b5dd4cd320">sincos</a>);
+<a name="l00604"></a>00604
+<a name="l00610"></a>00610 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>(<span class="keywordtype">float</span>);
+<a name="l00611"></a>00611 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>)
+<a name="l00612"></a>00612
+<a name="l00618"></a>00618 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4fe4fef049786e888526d6f37b912b0a">sinpi</a>(<span class="keywordtype">float</span> v);
+<a name="l00619"></a>00619 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a4fe4fef049786e888526d6f37b912b0a">sinpi</a>)
+<a name="l00620"></a>00620
+<a name="l00627"></a>00627 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>(<span class="keywordtype">float</span> v);
+<a name="l00628"></a>00628 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>)
+<a name="l00629"></a>00629
+<a name="l00636"></a>00636 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>(<span class="keywordtype">float</span>);
+<a name="l00637"></a>00637 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>)
+<a name="l00638"></a>00638
+<a name="l00644"></a>00644 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad8bfb083dd3979a305e594a0d6e581c4">tanpi</a>(<span class="keywordtype">float</span> v);
+<a name="l00645"></a>00645 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad8bfb083dd3979a305e594a0d6e581c4">tanpi</a>)
+<a name="l00646"></a>00646
+<a name="l00652"></a>00652 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>(<span class="keywordtype">float</span>);
+<a name="l00653"></a>00653 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>)
+<a name="l00654"></a>00654
+<a name="l00660"></a>00660 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>(<span class="keywordtype">float</span>);
+<a name="l00661"></a>00661 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>)
+<a name="l00662"></a>00662
+<a name="l00663"></a>00663
+<a name="l00664"></a>00664 <span class="preprocessor">#define XN_FUNC_YN(typeout, fnc, typein) \</span>
+<a name="l00665"></a>00665 <span class="preprocessor">extern typeout __attribute__((overloadable)) fnc(typein); \</span>
+<a name="l00666"></a>00666 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable)) fnc(typein##2 v); \</span>
+<a name="l00667"></a>00667 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable)) fnc(typein##3 v); \</span>
+<a name="l00668"></a>00668 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable)) fnc(typein##4 v);</span>
+<a name="l00669"></a>00669 <span class="preprocessor"></span>
+<a name="l00670"></a>00670 <span class="preprocessor">#define UIN_FUNC_IN(fnc) \</span>
+<a name="l00671"></a>00671 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, char) \</span>
+<a name="l00672"></a>00672 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, short) \</span>
+<a name="l00673"></a>00673 <span class="preprocessor">XN_FUNC_YN(uint, fnc, int)</span>
+<a name="l00674"></a>00674 <span class="preprocessor"></span>
+<a name="l00675"></a>00675 <span class="preprocessor">#define IN_FUNC_IN(fnc) \</span>
+<a name="l00676"></a>00676 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, uchar) \</span>
+<a name="l00677"></a>00677 <span class="preprocessor">XN_FUNC_YN(char, fnc, char) \</span>
+<a name="l00678"></a>00678 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, ushort) \</span>
+<a name="l00679"></a>00679 <span class="preprocessor">XN_FUNC_YN(short, fnc, short) \</span>
+<a name="l00680"></a>00680 <span class="preprocessor">XN_FUNC_YN(uint, fnc, uint) \</span>
+<a name="l00681"></a>00681 <span class="preprocessor">XN_FUNC_YN(int, fnc, int)</span>
+<a name="l00682"></a>00682 <span class="preprocessor"></span>
+<a name="l00683"></a>00683
+<a name="l00684"></a>00684 <span class="preprocessor">#define XN_FUNC_XN_XN_BODY(type, fnc, body) \</span>
+<a name="l00685"></a>00685 <span class="preprocessor">_RS_RUNTIME type __attribute__((overloadable)) \</span>
+<a name="l00686"></a>00686 <span class="preprocessor"> fnc(type v1, type v2); \</span>
+<a name="l00687"></a>00687 <span class="preprocessor">_RS_RUNTIME type##2 __attribute__((overloadable)) \</span>
+<a name="l00688"></a>00688 <span class="preprocessor"> fnc(type##2 v1, type##2 v2); \</span>
+<a name="l00689"></a>00689 <span class="preprocessor">_RS_RUNTIME type##3 __attribute__((overloadable)) \</span>
+<a name="l00690"></a>00690 <span class="preprocessor"> fnc(type##3 v1, type##3 v2); \</span>
+<a name="l00691"></a>00691 <span class="preprocessor">_RS_RUNTIME type##4 __attribute__((overloadable)) \</span>
+<a name="l00692"></a>00692 <span class="preprocessor"> fnc(type##4 v1, type##4 v2);</span>
+<a name="l00693"></a>00693 <span class="preprocessor"></span>
+<a name="l00694"></a>00694 <span class="preprocessor">#define IN_FUNC_IN_IN_BODY(fnc, body) \</span>
+<a name="l00695"></a>00695 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uchar, fnc, body) \</span>
+<a name="l00696"></a>00696 <span class="preprocessor">XN_FUNC_XN_XN_BODY(char, fnc, body) \</span>
+<a name="l00697"></a>00697 <span class="preprocessor">XN_FUNC_XN_XN_BODY(ushort, fnc, body) \</span>
+<a name="l00698"></a>00698 <span class="preprocessor">XN_FUNC_XN_XN_BODY(short, fnc, body) \</span>
+<a name="l00699"></a>00699 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uint, fnc, body) \</span>
+<a name="l00700"></a>00700 <span class="preprocessor">XN_FUNC_XN_XN_BODY(int, fnc, body) \</span>
+<a name="l00701"></a>00701 <span class="preprocessor">XN_FUNC_XN_XN_BODY(float, fnc, body)</span>
+<a name="l00702"></a>00702 <span class="preprocessor"></span>
+<a name="l00703"></a>00703 UIN_FUNC_IN(abs)
+<a name="l00704"></a>00704 IN_FUNC_IN(clz)
+<a name="l00705"></a>00705
+<a name="l00711"></a>00711 IN_FUNC_IN_IN_BODY(min, (v1 < v2 ? v1 : v2))
+<a name="l00712"></a>00712 FN_FUNC_FN_F(min)
+<a name="l00713"></a>00713
+<a name="l00719"></a>00719 IN_FUNC_IN_IN_BODY(max, (v1 > v2 ? v1 : v2))
+<a name="l00720"></a>00720 FN_FUNC_FN_F(max)
+<a name="l00721"></a>00721
+<a name="l00729"></a>00729 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<span class="keywordtype">float</span> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
+<a name="l00730"></a>00730 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> amount, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> low, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> high);
+<a name="l00731"></a>00731 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> amount, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> low, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> high);
+<a name="l00732"></a>00732 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> amount, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> low, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> high);
+<a name="l00733"></a>00733 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
+<a name="l00734"></a>00734 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
+<a name="l00735"></a>00735 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad4dab580aba6cf15539b407b9163dfde">clamp</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
+<a name="l00736"></a>00736
+<a name="l00742"></a>00742 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">degrees</a>(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#aaef2526c4d190ba6f7301b4e810917a7">radians</a>);
+<a name="l00743"></a>00743 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">degrees</a>)
+<a name="l00744"></a>00744
+<a name="l00750"></a>00750 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<span class="keywordtype">float</span> start, <span class="keywordtype">float</span> stop, <span class="keywordtype">float</span> amount);
+<a name="l00751"></a>00751 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> start, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> stop, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> amount);
+<a name="l00752"></a>00752 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> start, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> stop, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> amount);
+<a name="l00753"></a>00753 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> start, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> stop, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> amount);
+<a name="l00754"></a>00754 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> start, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> stop, <span class="keywordtype">float</span> amount);
+<a name="l00755"></a>00755 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> start, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> stop, <span class="keywordtype">float</span> amount);
+<a name="l00756"></a>00756 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af4c76d51368c8e330cb59ea5a0a2310e">mix</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> start, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> stop, <span class="keywordtype">float</span> amount);
+<a name="l00757"></a>00757
+<a name="l00763"></a>00763 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) radians(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#adc1b551193e66d8037daa1721df4d29c">degrees</a>);
+<a name="l00764"></a>00764 FN_FUNC_FN(radians)
+<a name="l00765"></a>00765
+<a name="l00774"></a>00774 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<span class="keywordtype">float</span> edge, <span class="keywordtype">float</span> v);
+<a name="l00775"></a>00775 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> edge, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> v);
+<a name="l00776"></a>00776 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> edge, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> v);
+<a name="l00777"></a>00777 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> edge, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> v);
+<a name="l00778"></a>00778 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> edge, <span class="keywordtype">float</span> v);
+<a name="l00779"></a>00779 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> edge, <span class="keywordtype">float</span> v);
+<a name="l00780"></a>00780 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f7ba6882099d16853d0415982121900">step</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> edge, <span class="keywordtype">float</span> v);
+<a name="l00781"></a>00781
+<a name="l00782"></a>00782 <span class="comment">// not implemented</span>
+<a name="l00783"></a>00783 extern <span class="keywordtype">float</span> __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
+<a name="l00784"></a>00784 extern <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>, float2, float2);
+<a name="l00785"></a>00785 extern <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>, float3, float3);
+<a name="l00786"></a>00786 extern <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>, float4, float4);
+<a name="l00787"></a>00787 extern float2 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float2);
+<a name="l00788"></a>00788 extern float3 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float3);
+<a name="l00789"></a>00789 extern float4 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float4);
+<a name="l00790"></a>00790
+<a name="l00798"></a>00798 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3e6d477a06dec7070f073eec9d8f420c">sign</a>(<span class="keywordtype">float</span> v);
+<a name="l00799"></a>00799 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3e6d477a06dec7070f073eec9d8f420c">sign</a>)
+<a name="l00800"></a>00800
+<a name="l00806"></a>00806 _RS_RUNTIME float3 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0f7beb26bb4aa30535babd14492a7e90">cross</a>(float3 lhs, float3 rhs);
+<a name="l00807"></a>00807 _RS_RUNTIME float4 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0f7beb26bb4aa30535babd14492a7e90">cross</a>(float4 lhs, float4 rhs);
+<a name="l00808"></a>00808
+<a name="l00814"></a>00814 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
+<a name="l00815"></a>00815 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(float2 lhs, float2 rhs);
+<a name="l00816"></a>00816 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(float3 lhs, float3 rhs);
+<a name="l00817"></a>00817 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(float4 lhs, float4 rhs);
+<a name="l00818"></a>00818
+<a name="l00824"></a>00824 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(<span class="keywordtype">float</span> v);
+<a name="l00825"></a>00825 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(float2 v);
+<a name="l00826"></a>00826 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(float3 v);
+<a name="l00827"></a>00827 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(float4 v);
+<a name="l00828"></a>00828
+<a name="l00834"></a>00834 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">distance</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
+<a name="l00835"></a>00835 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">distance</a>(float2 lhs, float2 rhs);
+<a name="l00836"></a>00836 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">distance</a>(float3 lhs, float3 rhs);
+<a name="l00837"></a>00837 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4488863373be92e113e9d24aa3d21e76">distance</a>(float4 lhs, float4 rhs);
+<a name="l00838"></a>00838
+<a name="l00844"></a>00844 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">normalize</a>(<span class="keywordtype">float</span> v);
+<a name="l00845"></a>00845 _RS_RUNTIME float2 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">normalize</a>(float2 v);
+<a name="l00846"></a>00846 _RS_RUNTIME float3 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">normalize</a>(float3 v);
+<a name="l00847"></a>00847 _RS_RUNTIME float4 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a373e03e92a1b7f3fdea5ca4ca159d2a8">normalize</a>(float4 v);
+<a name="l00848"></a>00848
+<a name="l00849"></a>00849 <span class="preprocessor">#undef CVT_FUNC</span>
+<a name="l00850"></a>00850 <span class="preprocessor"></span><span class="preprocessor">#undef CVT_FUNC_2</span>
+<a name="l00851"></a>00851 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN</span>
+<a name="l00852"></a>00852 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_FN</span>
+<a name="l00853"></a>00853 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN</span>
+<a name="l00854"></a>00854 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_F</span>
+<a name="l00855"></a>00855 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_IN</span>
+<a name="l00856"></a>00856 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_I</span>
+<a name="l00857"></a>00857 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PFN</span>
+<a name="l00858"></a>00858 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PIN</span>
+<a name="l00859"></a>00859 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_FN</span>
+<a name="l00860"></a>00860 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_PIN</span>
+<a name="l00861"></a>00861 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_YN</span>
+<a name="l00862"></a>00862 <span class="preprocessor"></span><span class="preprocessor">#undef UIN_FUNC_IN</span>
+<a name="l00863"></a>00863 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN</span>
+<a name="l00864"></a>00864 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_XN_XN_BODY</span>
+<a name="l00865"></a>00865 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN_IN_BODY</span>
+<a name="l00866"></a>00866 <span class="preprocessor"></span>
+<a name="l00867"></a>00867 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh.html b/docs/html/reference/renderscript/rs__core_8rsh.html
new file mode 100644
index 0000000..5a32e19
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__core_8rsh.html
@@ -0,0 +1,306 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_core.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_core.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>"</code><br/>
+<code>#include "<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>"</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script__call.html">rs_script_call</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> </td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a> (int cmdID)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rsSendToClient</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a> (int cmdID)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rsSendToClientBlocking</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData, const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> *sc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae62dc9d507e0e62c064217c71cc94101">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>todo-jsams </p>
+
+<p>Definition in file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ae8756b32e23445f287960b9d0ffb449c"></a><!-- doxytag: member="rs_core.rsh::rs_script_call_t" ref="ae8756b32e23445f287960b9d0ffb449c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a> <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="ae1755c901e8acb42510ad10b4e104746"></a><!-- doxytag: member="rs_core.rsh::rs_for_each_strategy" ref="ae1755c901e8acb42510ad10b4e104746" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Launch order hint for rsForEach calls. This provides a hint to the system to determine in which order the root function of the target is called with each cell of the allocation.</p>
+<p>This is a hint and implementations may not obey the order. </p>
+
+<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00074">74</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a95ebbf7a8923193df144649c066daae6"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a95ebbf7a8923193df144649c066daae6" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData, const rs_script_call_t *sc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsForEach </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
+ <td class="paramname"><em>script</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>usrData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> * </td>
+ <td class="paramname"><em>sc</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a script to script call to launch work. One of the input or output is required to be a valid object. The input and output must be of the same dimensions. API 10-13</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">script</td><td>The target script to call </td></tr>
+ <tr><td class="paramname">input</td><td>The allocation to source data from </td></tr>
+ <tr><td class="paramname">output</td><td>the allocation to write date into </td></tr>
+ <tr><td class="paramname">usrData</td><td>The user definied params to pass to the root script. May be NULL. </td></tr>
+ <tr><td class="paramname">sc</td><td>Extra control infomation used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ae62dc9d507e0e62c064217c71cc94101"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="ae62dc9d507e0e62c064217c71cc94101" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsForEach </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
+ <td class="paramname"><em>script</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>input</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>usrData</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a91cfbca99f87ef144bea2cdf1e8473ca"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a91cfbca99f87ef144bea2cdf1e8473ca" args="(int cmdID)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsSendToClient </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>cmdID</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Send a message back to the client. Will not block and returns true if the message was sendable and false if the fifo was full. A message ID is required. Data payload is optional. </p>
+
+</div>
+</div>
+<a class="anchor" id="a508003cadad2d37d41e2de7e9226f859"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a508003cadad2d37d41e2de7e9226f859" args="(int cmdID, const void *data, uint len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsSendToClient </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>cmdID</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>len</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6e4ff6388e8c6978ed17447214f2a2e2"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="a6e4ff6388e8c6978ed17447214f2a2e2" args="(int cmdID)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSendToClientBlocking </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>cmdID</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Send a message back to the client, blocking until the message is queued. A message ID is required. Data payload is optional. </p>
+
+</div>
+</div>
+<a class="anchor" id="afc93b00be08f58512a6ab6a87feb9515"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="afc93b00be08f58512a6ab6a87feb9515" args="(int cmdID, const void *data, uint len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSendToClientBlocking </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>cmdID</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>len</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh_source.html b/docs/html/reference/renderscript/rs__core_8rsh_source.html
new file mode 100644
index 0000000..fac83e0
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__core_8rsh_source.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_core.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_core.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__core_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_CORE_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CORE_RSH__</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="preprocessor">#define _RS_RUNTIME extern</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="rs__types_8rsh.html">rs_types.rsh</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="rs__allocation_8rsh.html" title="Allocation routines.">rs_allocation.rsh</a>"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="rs__atomic_8rsh.html" title="Atomic routines.">rs_atomic.rsh</a>"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="rs__cl_8rsh.html" title="Basic math functions.">rs_cl.rsh</a>"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="rs__debug_8rsh.html" title="Utility debugging routines.">rs_debug.rsh</a>"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="rs__math_8rsh.html">rs_math.rsh</a>"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="rs__matrix_8rsh.html" title="Matrix routines.">rs_matrix.rsh</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="rs__object_8rsh.html" title="Object routines.">rs_object.rsh</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="rs__quaternion_8rsh.html" title="Quaternion routines.">rs_quaternion.rsh</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="rs__time_8rsh.html" title="Renderscript time routines.">rs_time.rsh</a>"</span>
+<a name="l00039"></a>00039
+<a name="l00040"></a>00040
+<a name="l00041"></a>00041
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00048"></a>00048 <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID);
+<a name="l00052"></a>00052 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00053"></a>00053 <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
+<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00059"></a>00059 <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID);
+<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00064"></a>00064 <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066
+<a name="l00074"></a><a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">00074</a> enum <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> {
+<a name="l00075"></a>00075 RS_FOR_EACH_STRATEGY_SERIAL,
+<a name="l00076"></a>00076 RS_FOR_EACH_STRATEGY_DONT_CARE,
+<a name="l00077"></a>00077 RS_FOR_EACH_STRATEGY_DST_LINEAR,
+<a name="l00078"></a>00078 RS_FOR_EACH_STRATEGY_TILE_SMALL,
+<a name="l00079"></a>00079 RS_FOR_EACH_STRATEGY_TILE_MEDIUM,
+<a name="l00080"></a>00080 RS_FOR_EACH_STRATEGY_TILE_LARGE
+<a name="l00081"></a>00081 };
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083
+<a name="l00088"></a><a class="code" href="structrs__script__call.html">00088</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structrs__script__call.html">rs_script_call</a> {
+<a name="l00089"></a>00089 <span class="keyword">enum</span> <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> strategy;
+<a name="l00090"></a>00090 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xStart;
+<a name="l00091"></a>00091 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xEnd;
+<a name="l00092"></a>00092 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yStart;
+<a name="l00093"></a>00093 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yEnd;
+<a name="l00094"></a>00094 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zStart;
+<a name="l00095"></a>00095 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zEnd;
+<a name="l00096"></a>00096 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayStart;
+<a name="l00097"></a>00097 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayEnd;
+<a name="l00098"></a>00098 } <a class="code" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a>;
+<a name="l00099"></a>00099
+<a name="l00116"></a>00116 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION < 14)</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00118"></a>00118 <a class="code" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> input,
+<a name="l00119"></a>00119 <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData,
+<a name="l00120"></a>00120 const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *sc);
+<a name="l00124"></a>00124 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00125"></a>00125 <a class="code" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> input,
+<a name="l00126"></a>00126 <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData);
+<a name="l00127"></a>00127 <span class="preprocessor">#else</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00147"></a>00147 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00148"></a>00148 <a class="code" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> output,
+<a name="l00149"></a>00149 const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen, const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *);
+<a name="l00153"></a>00153 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00154"></a>00154 <a class="code" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> output,
+<a name="l00155"></a>00155 const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen);
+<a name="l00159"></a>00159 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00160"></a>00160 <a class="code" href="rs__core_8rsh.html#a95ebbf7a8923193df144649c066daae6">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> output);
+<a name="l00161"></a>00161 <span class="preprocessor">#endif</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>
+<a name="l00163"></a>00163
+<a name="l00164"></a>00164
+<a name="l00165"></a>00165 <span class="preprocessor">#undef _RS_RUNTIME</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span>
+<a name="l00167"></a>00167 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh.html b/docs/html/reference/renderscript/rs__debug_8rsh.html
new file mode 100644
index 0000000..75ce9db
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__debug_8rsh.html
@@ -0,0 +1,459 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_debug.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_debug.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a> (const char *, float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aebd4d3e687a397db1a817ca6d46aed29">rsDebug</a> (const char *, float, float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab1731408774f01186aff59b89c47fe32">rsDebug</a> (const char *, float, float, float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a6bb20c16c9fcc613158ca8c6f0dd81bd">rsDebug</a> (const char *, float, float, float, float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a0a59285be7204bde7b199c77578b6a42">rsDebug</a> (const char *, double)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a47b07360e1df6885b3f2eb207408db2c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aee885d367bb22f5c437dec486eafb75c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ac611c53b945b0ced90fde98e3846be79">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad8f8901db11563ddd7d655fed025047f">rsDebug</a> (const char *, int)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a490b0f6af3cc2e0280e97f2d2c2da228">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa75aa9faf7646ceeafeb19279416e9e8">rsDebug</a> (const char *, long)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa371f42b8d323a1a20d56461011fc664">rsDebug</a> (const char *, unsigned long)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab5a58069a9d914e413f52b0f9bd62a00">rsDebug</a> (const char *, const void *)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Utility debugging routines. </p>
+<p>Routines intended to be used during application developement. These should not be used in shipping applications. All print a string and value pair to the standard log. </p>
+
+<p>Definition in file <a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9a86fd617111dee78b3179a293afb66c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a9a86fd617111dee78b3179a293afb66c" args="(const char *, float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="aebd4d3e687a397db1a817ca6d46aed29"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aebd4d3e687a397db1a817ca6d46aed29" args="(const char *, float, float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab1731408774f01186aff59b89c47fe32"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab1731408774f01186aff59b89c47fe32" args="(const char *, float, float, float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6bb20c16c9fcc613158ca8c6f0dd81bd"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a6bb20c16c9fcc613158ca8c6f0dd81bd" args="(const char *, float, float, float, float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0a59285be7204bde7b199c77578b6a42"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a0a59285be7204bde7b199c77578b6a42" args="(const char *, double)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="a47b07360e1df6885b3f2eb207408db2c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a47b07360e1df6885b3f2eb207408db2c" args="(const char *, const rs_matrix4x4 *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="aee885d367bb22f5c437dec486eafb75c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aee885d367bb22f5c437dec486eafb75c" args="(const char *, const rs_matrix3x3 *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac611c53b945b0ced90fde98e3846be79"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ac611c53b945b0ced90fde98e3846be79" args="(const char *, const rs_matrix2x2 *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad8f8901db11563ddd7d655fed025047f"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad8f8901db11563ddd7d655fed025047f" args="(const char *, int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="a490b0f6af3cc2e0280e97f2d2c2da228"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a490b0f6af3cc2e0280e97f2d2c2da228" args="(const char *, uint)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa75aa9faf7646ceeafeb19279416e9e8"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa75aa9faf7646ceeafeb19279416e9e8" args="(const char *, long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">long </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa371f42b8d323a1a20d56461011fc664"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa371f42b8d323a1a20d56461011fc664" args="(const char *, unsigned long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>long</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab5a58069a9d914e413f52b0f9bd62a00"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab5a58069a9d914e413f52b0f9bd62a00" args="(const char *, const void *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsDebug </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Debug function. Prints a string and value to the log. </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh_source.html b/docs/html/reference/renderscript/rs__debug_8rsh_source.html
new file mode 100644
index 0000000..b06e99c
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__debug_8rsh_source.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_debug.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_debug.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__debug_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00026"></a>00026 <span class="preprocessor">#ifndef __RS_DEBUG_RSH__</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __RS_DEBUG_RSH__</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029
+<a name="l00030"></a>00030
+<a name="l00034"></a>00034 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00035"></a>00035 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>);
+<a name="l00039"></a>00039 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00040"></a>00040 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
+<a name="l00044"></a>00044 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00045"></a>00045 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
+<a name="l00049"></a>00049 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00050"></a>00050 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
+<a name="l00054"></a>00054 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00055"></a>00055 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>);
+<a name="l00059"></a>00059 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00060"></a>00060 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *);
+<a name="l00064"></a>00064 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00065"></a>00065 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *);
+<a name="l00069"></a>00069 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00070"></a>00070 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *);
+<a name="l00074"></a>00074 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00075"></a>00075 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>);
+<a name="l00079"></a>00079 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00080"></a>00080 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>);
+<a name="l00084"></a>00084 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00085"></a>00085 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span>);
+<a name="l00089"></a>00089 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00090"></a>00090 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);
+<a name="l00094"></a>00094 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00095"></a>00095 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
+<a name="l00099"></a>00099 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00100"></a>00100 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
+<a name="l00104"></a>00104 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00105"></a>00105 <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *, const <span class="keywordtype">void</span> *);
+<a name="l00106"></a>00106 <span class="preprocessor">#define RS_DEBUG(a) rsDebug(#a, a)</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span>
+<a name="l00109"></a>00109
+<a name="l00113"></a>00113 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *s, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> v);
+<a name="l00117"></a>00117 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *s, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> v);
+<a name="l00121"></a>00121 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__debug_8rsh.html#a9a86fd617111dee78b3179a293afb66c">rsDebug</a>(const <span class="keywordtype">char</span> *s, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> v);
+<a name="l00122"></a>00122
+<a name="l00123"></a>00123 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh.html b/docs/html/reference/renderscript/rs__graphics_8rsh.html
new file mode 100644
index 0000000..8a17b30
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__graphics_8rsh.html
@@ -0,0 +1,1347 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_graphics.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_graphics.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> pv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *model)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *tex)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf, float r, float g, float b, float a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> alloc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a> (float x1, float y1, float x2, float y2, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a> (float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a> (float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a> (float x, float y, float z, float w, float h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a621abfc693fed028b5dc74826453142d">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ab2704a6d16e3d7983524d0a8413c1b8a">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a> (float r, float g, float b, float a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a> (float value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a> (const char *, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ac5e84fd253b4b1d2b0e11a7a0a7df945">rsgDrawText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a> (<a class="el" href="structrs__font.html">rs_font</a> font)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a> (float r, float g, float b, float a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a> (const char *, int *left, int *right, int *top, int *bottom)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2abb920283b1dafa9059de488143a870">rsgMeasureText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int *left, int *right, int *top, int *bottom)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Renderscript graphics API. </p>
+<p>A set of graphics functions used by Renderscript. </p>
+
+<p>Definition in file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a647228d8e15da6ad67a97701d920dcac"></a><!-- doxytag: member="rs_graphics.rsh::rsgAllocationSyncAll" ref="a647228d8e15da6ad67a97701d920dcac" args="(rs_allocation alloc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgAllocationSyncAll </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>alloc</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sync the contents of an allocation from its SCRIPT memory space to its HW memory spaces.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">alloc</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ae89effef281e92e2940055883ea366d4"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindFont" ref="ae89effef281e92e2940055883ea366d4" args="(rs_font font)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindFont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
+ <td class="paramname"><em>font</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Binds the font object to be used for all subsequent font rendering calls </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">font</td><td>object to bind </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9f8deb600729a83c39c5bcaba2152b9c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramFragment" ref="a9f8deb600729a83c39c5bcaba2152b9c" args="(rs_program_fragment pf)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindProgramFragment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname"><em>pf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new ProgramFragment to the rendering context.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pf</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a391eb5535544f6312c724b910da6ec35"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramRaster" ref="a391eb5535544f6312c724b910da6ec35" args="(rs_program_raster pr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindProgramRaster </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
+ <td class="paramname"><em>pr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new ProgramRaster to the rendering context.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pr</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a34dfa6eddd7454fc1865222c5a022315"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramStore" ref="a34dfa6eddd7454fc1865222c5a022315" args="(rs_program_store ps)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindProgramStore </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
+ <td class="paramname"><em>ps</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new ProgramStore to the rendering context.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ps</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a894e26d0d05d3ef99be65ddf98dd901c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramVertex" ref="a894e26d0d05d3ef99be65ddf98dd901c" args="(rs_program_vertex pv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindProgramVertex </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
+ <td class="paramname"><em>pv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new ProgramVertex to the rendering context.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pv</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a4ade6c5acbf6acaa1c29a1aecc6e87d3"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindSampler" ref="a4ade6c5acbf6acaa1c29a1aecc6e87d3" args="(rs_program_fragment, uint slot, rs_sampler)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindSampler </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new Sampler object to a ProgramFragment. The sampler will operate on the texture bound at the matching slot.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">slot</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a1694eb5489bd3a444da921dbf16aeeb5"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindTexture" ref="a1694eb5489bd3a444da921dbf16aeeb5" args="(rs_program_fragment, uint slot, rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgBindTexture </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bind a new Allocation object to a ProgramFragment. The Allocation must be a valid texture for the Program. The sampling of the texture will be controled by the Sampler bound at the matching slot.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">slot</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a147674fed92745fbb5c64a6300ca3c49"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearColor" ref="a147674fed92745fbb5c64a6300ca3c49" args="(float r, float g, float b, float a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgClearColor </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Clears the rendering surface to the specified color.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">r</td><td></td></tr>
+ <tr><td class="paramname">g</td><td></td></tr>
+ <tr><td class="paramname">b</td><td></td></tr>
+ <tr><td class="paramname">a</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a4bedb06e8facd587e3eacd746fe3e727"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearDepth" ref="a4bedb06e8facd587e3eacd746fe3e727" args="(float value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgClearDepth </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Clears the depth suface to the specified value. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6f8b87c994810908fbe5e01f8f63f9af"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a6f8b87c994810908fbe5e01f8f63f9af" args="(rs_mesh ism)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawMesh </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>ism</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Draw a mesh using the current context state. The whole mesh is rendered.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ism</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a621abfc693fed028b5dc74826453142d"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a621abfc693fed028b5dc74826453142d" args="(rs_mesh ism, uint primitiveIndex)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawMesh </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>ism</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>primitiveIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Draw part of a mesh using the current context state. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
+ <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab2704a6d16e3d7983524d0a8413c1b8a"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="ab2704a6d16e3d7983524d0a8413c1b8a" args="(rs_mesh ism, uint primitiveIndex, uint start, uint len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawMesh </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>ism</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>primitiveIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>len</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Draw specified index range of part of a mesh using the current context state. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
+ <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
+ <tr><td class="paramname">start</td><td>starting index in the range </td></tr>
+ <tr><td class="paramname">len</td><td>number of indices to draw </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6953da0349e58547b08b8ce174ed3fc"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuad" ref="ad6953da0349e58547b08b8ce174ed3fc" args="(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawQuad </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z4</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Low performance utility function for drawing a simple quad. Not intended for drawing large quantities of geometry.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x1</td><td></td></tr>
+ <tr><td class="paramname">y1</td><td></td></tr>
+ <tr><td class="paramname">z1</td><td></td></tr>
+ <tr><td class="paramname">x2</td><td></td></tr>
+ <tr><td class="paramname">y2</td><td></td></tr>
+ <tr><td class="paramname">z2</td><td></td></tr>
+ <tr><td class="paramname">x3</td><td></td></tr>
+ <tr><td class="paramname">y3</td><td></td></tr>
+ <tr><td class="paramname">z3</td><td></td></tr>
+ <tr><td class="paramname">x4</td><td></td></tr>
+ <tr><td class="paramname">y4</td><td></td></tr>
+ <tr><td class="paramname">z4</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="afb98a59bb9f878f0a09459567c269e64"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuadTexCoords" ref="afb98a59bb9f878f0a09459567c269e64" args="(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawQuadTexCoords </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>u1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>u2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>u3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>u4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v4</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Low performance utility function for drawing a textured quad. Not intended for drawing large quantities of geometry.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x1</td><td></td></tr>
+ <tr><td class="paramname">y1</td><td></td></tr>
+ <tr><td class="paramname">z1</td><td></td></tr>
+ <tr><td class="paramname">u1</td><td></td></tr>
+ <tr><td class="paramname">v1</td><td></td></tr>
+ <tr><td class="paramname">x2</td><td></td></tr>
+ <tr><td class="paramname">y2</td><td></td></tr>
+ <tr><td class="paramname">z2</td><td></td></tr>
+ <tr><td class="paramname">u2</td><td></td></tr>
+ <tr><td class="paramname">v2</td><td></td></tr>
+ <tr><td class="paramname">x3</td><td></td></tr>
+ <tr><td class="paramname">y3</td><td></td></tr>
+ <tr><td class="paramname">z3</td><td></td></tr>
+ <tr><td class="paramname">u3</td><td></td></tr>
+ <tr><td class="paramname">v3</td><td></td></tr>
+ <tr><td class="paramname">x4</td><td></td></tr>
+ <tr><td class="paramname">y4</td><td></td></tr>
+ <tr><td class="paramname">z4</td><td></td></tr>
+ <tr><td class="paramname">u4</td><td></td></tr>
+ <tr><td class="paramname">v4</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a80c51849bf12ec6c699c23c3fa3e6208"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawRect" ref="a80c51849bf12ec6c699c23c3fa3e6208" args="(float x1, float y1, float x2, float y2, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawRect </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Low performance utility function for drawing a simple rectangle. Not intended for drawing large quantities of geometry.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x1</td><td></td></tr>
+ <tr><td class="paramname">y1</td><td></td></tr>
+ <tr><td class="paramname">x2</td><td></td></tr>
+ <tr><td class="paramname">y2</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a07d15127330fa1dff6c99b0d7d14e65e"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawSpriteScreenspace" ref="a07d15127330fa1dff6c99b0d7d14e65e" args="(float x, float y, float z, float w, float h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawSpriteScreenspace </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>h</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Low performance function for drawing rectangles in screenspace. This function uses the default passthough ProgramVertex. Any bound ProgramVertex is ignored. This function has considerable overhead and should not be used for drawing in shipping applications.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ <tr><td class="paramname">w</td><td></td></tr>
+ <tr><td class="paramname">h</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="afaec82492762e62cad1ff53ada479b14"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="afaec82492762e62cad1ff53ada479b14" args="(const char *, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawText </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Draws text given a string and location </p>
+
+</div>
+</div>
+<a class="anchor" id="ac5e84fd253b4b1d2b0e11a7a0a7df945"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="ac5e84fd253b4b1d2b0e11a7a0a7df945" args="(rs_allocation, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgDrawText </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="abda8c344092ed6310c7a8f353a6df876"></a><!-- doxytag: member="rs_graphics.rsh::rsgFontColor" ref="abda8c344092ed6310c7a8f353a6df876" args="(float r, float g, float b, float a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgFontColor </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sets the font color for all subsequent rendering calls </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">r</td><td>red component </td></tr>
+ <tr><td class="paramname">g</td><td>green component </td></tr>
+ <tr><td class="paramname">b</td><td>blue component </td></tr>
+ <tr><td class="paramname">a</td><td>alpha component </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a7e6565cd5d5e44f442a8bf8ba68f4681"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetHeight" ref="a7e6565cd5d5e44f442a8bf8ba68f4681" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetHeight </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the height of the current rendering surface.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a67f4ed1ca4bba27d5c952ada89cd0717"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetWidth" ref="a67f4ed1ca4bba27d5c952ada89cd0717" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetWidth </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the width of the current rendering surface.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5c599f4ea989f3d0616cbf8e983688c4"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a5c599f4ea989f3d0616cbf8e983688c4" args="(const char *, int *left, int *right, int *top, int *bottom)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgMeasureText </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>bottom</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the bounding box of the text relative to (0, 0) Any of left, right, top, bottom could be NULL </p>
+
+</div>
+</div>
+<a class="anchor" id="a2abb920283b1dafa9059de488143a870"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a2abb920283b1dafa9059de488143a870" args="(rs_allocation, int *left, int *right, int *top, int *bottom)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgMeasureText </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>bottom</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0978c54902dd1d60180f8dbb0b781105"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a0978c54902dd1d60180f8dbb0b781105" args="(rs_mesh mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgMeshComputeBoundingBox </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>mesh</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>minX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>minY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>minZ</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>maxX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>maxY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float * </td>
+ <td class="paramname"><em>maxZ</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Computes an axis aligned bounding box of a mesh object </p>
+
+</div>
+</div>
+<a class="anchor" id="a6058b6b6c8b94f96f03dc8bca6a2090b"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a6058b6b6c8b94f96f03dc8bca6a2090b" args="(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static __inline__ void rsgMeshComputeBoundingBox </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>mesh</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> * </td>
+ <td class="paramname"><em>bBoxMin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> * </td>
+ <td class="paramname"><em>bBoxMax</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p>Definition at line <a class="el" href="rs__graphics_8rsh_source.html#l00380">380</a> of file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35ac8c3759e25047e6a458c15520c887"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramFragmentConstantColor" ref="a35ac8c3759e25047e6a458c15520c887" args="(rs_program_fragment pf, float r, float g, float b, float a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgProgramFragmentConstantColor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname"><em>pf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the constant color for a fixed function emulation program.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">pf</td><td></td></tr>
+ <tr><td class="paramname">r</td><td></td></tr>
+ <tr><td class="paramname">g</td><td></td></tr>
+ <tr><td class="paramname">b</td><td></td></tr>
+ <tr><td class="paramname">a</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a2b767d209b36ffcd2e0fc0cf6f4c5706"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexGetProjectionMatrix" ref="a2b767d209b36ffcd2e0fc0cf6f4c5706" args="(rs_matrix4x4 *proj)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgProgramVertexGetProjectionMatrix </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>proj</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">proj</td><td>matrix to store the current projection matrix into </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a976b8594cccb4b94d7ce520b44d884e3"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadModelMatrix" ref="a976b8594cccb4b94d7ce520b44d884e3" args="(const rs_matrix4x4 *model)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgProgramVertexLoadModelMatrix </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>model</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load the model matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">model</td><td>model matrix </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a83a87d8efa3f26ed3f8fb25e49f29059"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadProjectionMatrix" ref="a83a87d8efa3f26ed3f8fb25e49f29059" args="(const rs_matrix4x4 *proj)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgProgramVertexLoadProjectionMatrix </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>proj</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">proj</td><td>projection matrix </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a377b7b394c4bf0881532b1241d4be168"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadTextureMatrix" ref="a377b7b394c4bf0881532b1241d4be168" args="(const rs_matrix4x4 *tex)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsgProgramVertexLoadTextureMatrix </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>tex</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load the texture matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">tex</td><td>texture matrix </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh_source.html b/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
new file mode 100644
index 0000000..b9ce0b7
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_graphics.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_graphics.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__graphics_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_GRAPHICS_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_GRAPHICS_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00032"></a>00032 rsgBindColorTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> colorTarget, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00039"></a>00039 rsgClearColorTarget(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
+<a name="l00040"></a>00040
+<a name="l00045"></a>00045 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00046"></a>00046 rsgBindDepthTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> depthTarget);
+<a name="l00047"></a>00047
+<a name="l00051"></a>00051 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00052"></a>00052 rsgClearDepthTarget(<span class="keywordtype">void</span>);
+<a name="l00053"></a>00053
+<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00059"></a>00059 rsgClearAllRenderTargets(<span class="keywordtype">void</span>);
+<a name="l00060"></a>00060
+<a name="l00064"></a>00064 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
+<a name="l00065"></a>00065 rsgFinish(<span class="keywordtype">void</span>);
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00074"></a>00074 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00075"></a>00075 <a class="code" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> pf);
+<a name="l00076"></a>00076
+<a name="l00082"></a>00082 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00083"></a>00083 <a class="code" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> ps);
+<a name="l00084"></a>00084
+<a name="l00090"></a>00090 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00091"></a>00091 <a class="code" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> pv);
+<a name="l00092"></a>00092
+<a name="l00098"></a>00098 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00099"></a>00099 <a class="code" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> pr);
+<a name="l00100"></a>00100
+<a name="l00107"></a>00107 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00108"></a>00108 <a class="code" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a>, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a>);
+<a name="l00109"></a>00109
+<a name="l00118"></a>00118 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00119"></a>00119 <a class="code" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a>(rs_program_fragment, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>);
+<a name="l00120"></a>00120
+<a name="l00127"></a>00127 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00128"></a>00128 <a class="code" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
+<a name="l00135"></a>00135 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00136"></a>00136 <a class="code" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *model);
+<a name="l00143"></a>00143 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00144"></a>00144 <a class="code" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *tex);
+<a name="l00151"></a>00151 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00152"></a>00152 <a class="code" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
+<a name="l00153"></a>00153
+<a name="l00163"></a>00163 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00164"></a>00164 <a class="code" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a>(rs_program_fragment pf, <span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
+<a name="l00165"></a>00165
+<a name="l00171"></a>00171 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
+<a name="l00172"></a>00172 <a class="code" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a>(<span class="keywordtype">void</span>);
+<a name="l00173"></a>00173
+<a name="l00179"></a>00179 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
+<a name="l00180"></a>00180 <a class="code" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a>(<span class="keywordtype">void</span>);
+<a name="l00181"></a>00181
+<a name="l00182"></a>00182
+<a name="l00189"></a>00189 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00190"></a>00190 <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc);
+<a name="l00191"></a>00191
+<a name="l00192"></a>00192 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>
+<a name="l00201"></a>00201 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00202"></a>00202 <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc,
+<a name="l00203"></a>00203 rs_allocation_usage_type source);
+<a name="l00204"></a>00204
+<a name="l00205"></a>00205 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span>
+<a name="l00217"></a>00217 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00218"></a>00218 <a class="code" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z);
+<a name="l00219"></a>00219
+<a name="l00237"></a>00237 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00238"></a>00238 <a class="code" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1,
+<a name="l00239"></a>00239 <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2,
+<a name="l00240"></a>00240 <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3,
+<a name="l00241"></a>00241 <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4);
+<a name="l00242"></a>00242
+<a name="l00243"></a>00243
+<a name="l00269"></a>00269 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00270"></a>00270 <a class="code" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1, <span class="keywordtype">float</span> u1, <span class="keywordtype">float</span> v1,
+<a name="l00271"></a>00271 <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2, <span class="keywordtype">float</span> u2, <span class="keywordtype">float</span> v2,
+<a name="l00272"></a>00272 <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3, <span class="keywordtype">float</span> u3, <span class="keywordtype">float</span> v3,
+<a name="l00273"></a>00273 <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4, <span class="keywordtype">float</span> u4, <span class="keywordtype">float</span> v4);
+<a name="l00274"></a>00274
+<a name="l00275"></a>00275
+<a name="l00288"></a>00288 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00289"></a>00289 <a class="code" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> h);
+<a name="l00290"></a>00290
+<a name="l00297"></a>00297 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00298"></a>00298 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism);
+<a name="l00305"></a>00305 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00306"></a>00306 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex);
+<a name="l00315"></a>00315 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00316"></a>00316 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
+<a name="l00317"></a>00317
+<a name="l00326"></a>00326 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00327"></a>00327 <a class="code" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
+<a name="l00328"></a>00328
+<a name="l00332"></a>00332 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00333"></a>00333 <a class="code" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a>(<span class="keywordtype">float</span> value);
+<a name="l00337"></a>00337 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00338"></a>00338 <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00342"></a>00342 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00343"></a>00343 <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(rs_allocation, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00348"></a>00348 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00349"></a>00349 <a class="code" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> font);
+<a name="l00357"></a>00357 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00358"></a>00358 <a class="code" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
+<a name="l00363"></a>00363 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00364"></a>00364 <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
+<a name="l00368"></a>00368 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00369"></a>00369 <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(rs_allocation, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
+<a name="l00373"></a>00373 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00374"></a>00374 <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <span class="keywordtype">float</span> *minX, <span class="keywordtype">float</span> *minY, <span class="keywordtype">float</span> *minZ,
+<a name="l00375"></a>00375 <span class="keywordtype">float</span> *maxX, <span class="keywordtype">float</span> *maxY, <span class="keywordtype">float</span> *maxZ);
+<a name="l00379"></a>00379 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
+<a name="l00380"></a><a class="code" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">00380</a> <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax) {
+<a name="l00381"></a>00381 <span class="keywordtype">float</span> x1, y1, z1, x2, y2, z2;
+<a name="l00382"></a>00382 <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(mesh, &x1, &y1, &z1, &x2, &y2, &z2);
+<a name="l00383"></a>00383 bBoxMin->x = x1;
+<a name="l00384"></a>00384 bBoxMin->y = y1;
+<a name="l00385"></a>00385 bBoxMin->z = z1;
+<a name="l00386"></a>00386 bBoxMax->x = x2;
+<a name="l00387"></a>00387 bBoxMax->y = y2;
+<a name="l00388"></a>00388 bBoxMax->z = z2;
+<a name="l00389"></a>00389 }
+<a name="l00390"></a>00390
+<a name="l00391"></a>00391 <span class="preprocessor">#endif</span>
+<a name="l00392"></a>00392 <span class="preprocessor"></span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh.html b/docs/html/reference/renderscript/rs__math_8rsh.html
new file mode 100644
index 0000000..9415c3a
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__math_8rsh.html
@@ -0,0 +1,679 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_math.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_math.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a> (int max_value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a01edf1cf3cdaecb1629761b69148e189">rsRand</a> (int min_value, int max_value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rsRand</a> (float max_value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rsRand</a> (float min_value, float max_value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a> (float)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad36abebbb36ffc5312fb2ed8baf98d39">rsClamp</a> (int amount, int low, int high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a1f9e5f628fc42e8215e9dcf89ebc6897">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a7b8cb9e970171f866b75d333abf68d89">rsClamp</a> (short amount, short low, short high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a08fe0a967cc59f2ad831115557c86c50">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ae31137028793c4aaf4df839535135837">rsClamp</a> (char amount, char low, char high)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *viewProj, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static __inline__ bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a> (<a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a628c8d13e3fe41fc860ad937184e4dcd">rsPackColorTo8888</a> (float r, float g, float b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a84d08e07ec8421c51ee8bd57d5b8b33e">rsPackColorTo8888</a> (float r, float g, float b, float a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a22e0be7e18b317a7453ebad4300934f6">rsPackColorTo8888</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a26525a4f5093bd0f13191efe06127f4b">rsUnpackColor8888</a> (<a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>todo-jsams </p>
+
+<p>Definition in file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ad40f2fb8f416e2ab7d2879de3b3d885e"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="ad40f2fb8f416e2ab7d2879de3b3d885e" args="(uint amount, uint low, uint high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsClamp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Clamp the value amount between low and high.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">amount</td><td>The value to clamp </td></tr>
+ <tr><td class="paramname">low</td><td></td></tr>
+ <tr><td class="paramname">high</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad36abebbb36ffc5312fb2ed8baf98d39"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="ad36abebbb36ffc5312fb2ed8baf98d39" args="(int amount, int low, int high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME int rsClamp </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1f9e5f628fc42e8215e9dcf89ebc6897"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a1f9e5f628fc42e8215e9dcf89ebc6897" args="(ushort amount, ushort low, ushort high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> rsClamp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7b8cb9e970171f866b75d333abf68d89"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a7b8cb9e970171f866b75d333abf68d89" args="(short amount, short low, short high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME short rsClamp </td>
+ <td>(</td>
+ <td class="paramtype">short </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">short </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">short </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a08fe0a967cc59f2ad831115557c86c50"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a08fe0a967cc59f2ad831115557c86c50" args="(uchar amount, uchar low, uchar high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsClamp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae31137028793c4aaf4df839535135837"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="ae31137028793c4aaf4df839535135837" args="(char amount, char low, char high)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME char rsClamp </td>
+ <td>(</td>
+ <td class="paramtype">char </td>
+ <td class="paramname"><em>amount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char </td>
+ <td class="paramname"><em>low</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char </td>
+ <td class="paramname"><em>high</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a191f9c687c56322c18b7d71491602122"></a><!-- doxytag: member="rs_math.rsh::rsExtractFrustumPlanes" ref="a191f9c687c56322c18b7d71491602122" args="(const rs_matrix4x4 *viewProj, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static __inline__ void rsExtractFrustumPlanes </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>viewProj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Computes 6 frustum planes from the view projection matrix </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">viewProj</td><td>matrix to extract planes from </td></tr>
+ <tr><td class="paramname">left</td><td>plane </td></tr>
+ <tr><td class="paramname">right</td><td>plane </td></tr>
+ <tr><td class="paramname">top</td><td>plane </td></tr>
+ <tr><td class="paramname">bottom</td><td>plane </td></tr>
+ <tr><td class="paramname">near</td><td>plane </td></tr>
+ <tr><td class="paramname">far</td><td>plane </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00102">102</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4f127e78da0849321c7f6db14f9e989"></a><!-- doxytag: member="rs_math.rsh::rsFrac" ref="ac4f127e78da0849321c7f6db14f9e989" args="(float)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float rsFrac </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the fractional part of a float </p>
+
+</div>
+</div>
+<a class="anchor" id="a7bbeaf44838e08e68d5cf3e3d7b0818c"></a><!-- doxytag: member="rs_math.rsh::rsIsSphereInFrustum" ref="a7bbeaf44838e08e68d5cf3e3d7b0818c" args="(float4 *sphere, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static __inline__ bool rsIsSphereInFrustum </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>sphere</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Checks if a sphere is withing the 6 frustum planes </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sphere</td><td>float4 representing the sphere </td></tr>
+ <tr><td class="paramname">left</td><td>plane </td></tr>
+ <tr><td class="paramname">right</td><td>plane </td></tr>
+ <tr><td class="paramname">top</td><td>plane </td></tr>
+ <tr><td class="paramname">bottom</td><td>plane </td></tr>
+ <tr><td class="paramname">near</td><td>plane </td></tr>
+ <tr><td class="paramname">far</td><td>plane </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00162">162</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a628c8d13e3fe41fc860ad937184e4dcd"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a628c8d13e3fe41fc860ad937184e4dcd" args="(float r, float g, float b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">r</td><td></td></tr>
+ <tr><td class="paramname">g</td><td></td></tr>
+ <tr><td class="paramname">b</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a84d08e07ec8421c51ee8bd57d5b8b33e"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a84d08e07ec8421c51ee8bd57d5b8b33e" args="(float r, float g, float b, float a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">r</td><td></td></tr>
+ <tr><td class="paramname">g</td><td></td></tr>
+ <tr><td class="paramname">b</td><td></td></tr>
+ <tr><td class="paramname">a</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a22e0be7e18b317a7453ebad4300934f6"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a22e0be7e18b317a7453ebad4300934f6" args="(float3 color)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
+ <td class="paramname"><em>color</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">color</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4</dd></dl>
+<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">color</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad9106e5aae5b1248870f21061f36a1c9"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="ad9106e5aae5b1248870f21061f36a1c9" args="(int max_value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int rsRand </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>max_value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return a random value between 0 (or min_value) and max_malue. </p>
+
+</div>
+</div>
+<a class="anchor" id="a01edf1cf3cdaecb1629761b69148e189"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a01edf1cf3cdaecb1629761b69148e189" args="(int min_value, int max_value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int rsRand </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>min_value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>max_value</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a03e898d810ac44158e7461b2b2b1c356"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a03e898d810ac44158e7461b2b2b1c356" args="(float max_value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float rsRand </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>max_value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a84b2e7468314873b3aa02969e310d9e4"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a84b2e7468314873b3aa02969e310d9e4" args="(float min_value, float max_value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float rsRand </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>min_value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>max_value</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a26525a4f5093bd0f13191efe06127f4b"></a><!-- doxytag: member="rs_math.rsh::rsUnpackColor8888" ref="a26525a4f5093bd0f13191efe06127f4b" args="(uchar4 c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsUnpackColor8888 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td>
+ <td class="paramname"><em>c</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unpack a uchar4 color to float4. The resulting float range will be (0-1).</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">c</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>float4 </dd></dl>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh_source.html b/docs/html/reference/renderscript/rs__math_8rsh_source.html
new file mode 100644
index 0000000..c056994
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__math_8rsh_source.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_math.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_math.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__math_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_MATH_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATH_RSH__</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a>00027
+<a name="l00031"></a>00031 <span class="keyword">extern</span> <span class="keywordtype">int</span> __attribute__((overloadable))
+<a name="l00032"></a>00032 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> max_value);
+<a name="l00036"></a>00036 extern <span class="keywordtype">int</span> __attribute__((overloadable))
+<a name="l00037"></a>00037 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> min_value, <span class="keywordtype">int</span> max_value);
+<a name="l00041"></a>00041 extern <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00042"></a>00042 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> max_value);
+<a name="l00046"></a>00046 extern <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00047"></a>00047 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> min_value, <span class="keywordtype">float</span> max_value);
+<a name="l00048"></a>00048
+<a name="l00052"></a>00052 extern <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00053"></a>00053 <a class="code" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a>(<span class="keywordtype">float</span>);
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055
+<a name="l00057"></a>00057 <span class="comment">// int ops</span>
+<a name="l00059"></a>00059 <span class="comment"></span>
+<a name="l00067"></a>00067 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high);
+<a name="l00068"></a>00068
+<a name="l00072"></a>00072 _RS_RUNTIME <span class="keywordtype">int</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<span class="keywordtype">int</span> amount, <span class="keywordtype">int</span> low, <span class="keywordtype">int</span> high);
+<a name="l00076"></a>00076 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high);
+<a name="l00080"></a>00080 _RS_RUNTIME <span class="keywordtype">short</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<span class="keywordtype">short</span> amount, <span class="keywordtype">short</span> low, <span class="keywordtype">short</span> high);
+<a name="l00084"></a>00084 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high);
+<a name="l00088"></a>00088 _RS_RUNTIME <span class="keywordtype">char</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#ad40f2fb8f416e2ab7d2879de3b3d885e">rsClamp</a>(<span class="keywordtype">char</span> amount, <span class="keywordtype">char</span> low, <span class="keywordtype">char</span> high);
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090
+<a name="l00101"></a>00101 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
+<a name="l00102"></a><a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">00102</a> <a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *viewProj,
+<a name="l00103"></a>00103 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
+<a name="l00104"></a>00104 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
+<a name="l00105"></a>00105 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
+<a name="l00106"></a>00106 <span class="comment">// x y z w = a b c d in the plane equation</span>
+<a name="l00107"></a>00107 left->x = viewProj->m[3] + viewProj->m[0];
+<a name="l00108"></a>00108 left->y = viewProj->m[7] + viewProj->m[4];
+<a name="l00109"></a>00109 left->z = viewProj->m[11] + viewProj->m[8];
+<a name="l00110"></a>00110 left->w = viewProj->m[15] + viewProj->m[12];
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 right->x = viewProj->m[3] - viewProj->m[0];
+<a name="l00113"></a>00113 right->y = viewProj->m[7] - viewProj->m[4];
+<a name="l00114"></a>00114 right->z = viewProj->m[11] - viewProj->m[8];
+<a name="l00115"></a>00115 right->w = viewProj->m[15] - viewProj->m[12];
+<a name="l00116"></a>00116
+<a name="l00117"></a>00117 top->x = viewProj->m[3] - viewProj->m[1];
+<a name="l00118"></a>00118 top->y = viewProj->m[7] - viewProj->m[5];
+<a name="l00119"></a>00119 top->z = viewProj->m[11] - viewProj->m[9];
+<a name="l00120"></a>00120 top->w = viewProj->m[15] - viewProj->m[13];
+<a name="l00121"></a>00121
+<a name="l00122"></a>00122 bottom->x = viewProj->m[3] + viewProj->m[1];
+<a name="l00123"></a>00123 bottom->y = viewProj->m[7] + viewProj->m[5];
+<a name="l00124"></a>00124 bottom->z = viewProj->m[11] + viewProj->m[9];
+<a name="l00125"></a>00125 bottom->w = viewProj->m[15] + viewProj->m[13];
+<a name="l00126"></a>00126
+<a name="l00127"></a>00127 near->x = viewProj->m[3] + viewProj->m[2];
+<a name="l00128"></a>00128 near->y = viewProj->m[7] + viewProj->m[6];
+<a name="l00129"></a>00129 near->z = viewProj->m[11] + viewProj->m[10];
+<a name="l00130"></a>00130 near->w = viewProj->m[15] + viewProj->m[14];
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 far->x = viewProj->m[3] - viewProj->m[2];
+<a name="l00133"></a>00133 far->y = viewProj->m[7] - viewProj->m[6];
+<a name="l00134"></a>00134 far->z = viewProj->m[11] - viewProj->m[10];
+<a name="l00135"></a>00135 far->w = viewProj->m[15] - viewProj->m[14];
+<a name="l00136"></a>00136
+<a name="l00137"></a>00137 <span class="keywordtype">float</span> len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(left->xyz);
+<a name="l00138"></a>00138 *left /= len;
+<a name="l00139"></a>00139 len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(right->xyz);
+<a name="l00140"></a>00140 *right /= len;
+<a name="l00141"></a>00141 len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(top->xyz);
+<a name="l00142"></a>00142 *top /= len;
+<a name="l00143"></a>00143 len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(bottom->xyz);
+<a name="l00144"></a>00144 *bottom /= len;
+<a name="l00145"></a>00145 len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(near->xyz);
+<a name="l00146"></a>00146 *near /= len;
+<a name="l00147"></a>00147 len = <a class="code" href="rs__cl_8rsh.html#a1a222b7879342279e1e0070d6afd9e18">length</a>(far->xyz);
+<a name="l00148"></a>00148 *far /= len;
+<a name="l00149"></a>00149 }
+<a name="l00150"></a>00150
+<a name="l00161"></a>00161 __inline__ <span class="keyword">static</span> <span class="keywordtype">bool</span> __attribute__((overloadable, always_inline))
+<a name="l00162"></a><a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">00162</a> <a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere,
+<a name="l00163"></a>00163 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
+<a name="l00164"></a>00164 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
+<a name="l00165"></a>00165 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 <span class="keywordtype">float</span> distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(left->xyz, sphere->xyz) + left->w;
+<a name="l00168"></a>00168 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00169"></a>00169 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00170"></a>00170 }
+<a name="l00171"></a>00171 distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(right->xyz, sphere->xyz) + right->w;
+<a name="l00172"></a>00172 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00173"></a>00173 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(top->xyz, sphere->xyz) + top->w;
+<a name="l00176"></a>00176 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00177"></a>00177 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00178"></a>00178 }
+<a name="l00179"></a>00179 distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(bottom->xyz, sphere->xyz) + bottom->w;
+<a name="l00180"></a>00180 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00181"></a>00181 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00182"></a>00182 }
+<a name="l00183"></a>00183 distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(near->xyz, sphere->xyz) + near->w;
+<a name="l00184"></a>00184 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00185"></a>00185 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187 distToCenter = <a class="code" href="rs__cl_8rsh.html#a70544acaca578035a849eef67d62c449">dot</a>(far->xyz, sphere->xyz) + far->w;
+<a name="l00188"></a>00188 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
+<a name="l00189"></a>00189 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00190"></a>00190 }
+<a name="l00191"></a>00191 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00192"></a>00192 }
+<a name="l00193"></a>00193
+<a name="l00194"></a>00194
+<a name="l00205"></a>00205 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a628c8d13e3fe41fc860ad937184e4dcd">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b);
+<a name="l00206"></a>00206
+<a name="l00217"></a>00217 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a628c8d13e3fe41fc860ad937184e4dcd">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
+<a name="l00218"></a>00218
+<a name="l00227"></a>00227 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a628c8d13e3fe41fc860ad937184e4dcd">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color);
+<a name="l00228"></a>00228
+<a name="l00236"></a>00236 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a628c8d13e3fe41fc860ad937184e4dcd">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> color);
+<a name="l00237"></a>00237
+<a name="l00245"></a>00245 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__math_8rsh.html#a26525a4f5093bd0f13191efe06127f4b">rsUnpackColor8888</a>(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c);
+<a name="l00246"></a>00246
+<a name="l00247"></a>00247
+<a name="l00248"></a>00248 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh.html b/docs/html/reference/renderscript/rs__matrix_8rsh.html
new file mode 100644
index 0000000..b956301
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__matrix_8rsh.html
@@ -0,0 +1,1520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_matrix.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_matrix.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a68e320f7fa2cc5a5b4759e3ab679ee10">rsMatrixSet</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ada106cb8f08e4b23930d7ba1a0ce5609">rsMatrixSet</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a086c4f1cd21500f8e332226af4f62001">rsMatrixSet</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, float v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#af1fb87eb02f166bb85ef10a92333bb49">rsMatrixGet</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a90b0548da8dbe1f643bcbac8466e5b72">rsMatrixGet</a> (const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a22a46174a3c72452c9f6c33403aeae19">rsMatrixGet</a> (const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5b31e83553efa947db2198674d5db043">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad2954a5ac11d2370227296be89e92471">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const float *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aef942535c5d56072125dcf5244970ea2">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const float *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa327089f7ad9161d7372094163147005">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const float *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5239a3f5f2becd20507d0aa56638ba03">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a06176acb38405937cb94c835a712a3b3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a3a3d0f0053720fb4afb3a3eb32e42a82">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a654e5abe095770979d740f7b55382bd0">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5f3697805c794c9c9f2f8cfdde4b9a44">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *lhs, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a78872343ea6a5c1a846160ccdc4add52">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *lhs, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0dd4755c28fc896626ebf5dc784130f">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *lhs, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0b03aeec17ec8b9c5e75f8efb1bdc53">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ab1973ad3efa0ab2d53f466dd9fb190bb">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float fovy, float aspect, float near, float far)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a47b6abbf32ffaf77bb13d96c3f05779f">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a716bc2d29b80eb25388aba3ba8845aef">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac52acb31a705f6c68af8bddea0e79969">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Matrix routines. </p>
+
+<p>Definition in file <a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af1fb87eb02f166bb85ef10a92333bb49"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="af1fb87eb02f166bb85ef10a92333bb49" args="(const rs_matrix4x4 *m, uint32_t row, uint32_t col)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get one element of a matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>The matrix to read from </td></tr>
+ <tr><td class="paramname">row</td><td></td></tr>
+ <tr><td class="paramname">col</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>float </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a90b0548da8dbe1f643bcbac8466e5b72"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="a90b0548da8dbe1f643bcbac8466e5b72" args="(const rs_matrix3x3 *m, uint32_t row, uint32_t col)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a22a46174a3c72452c9f6c33403aeae19"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="a22a46174a3c72452c9f6c33403aeae19" args="(const rs_matrix2x2 *m, uint32_t row, uint32_t col)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a00b6a334ba5ac94d84850f22ec9f4de5"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverse" ref="a00b6a334ba5ac94d84850f22ec9f4de5" args="(rs_matrix4x4 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsMatrixInverse </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns true if the matrix was successfully inversed</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac05080d52da2d99a759ef34fa0655e82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverseTranspose" ref="ac05080d52da2d99a759ef34fa0655e82" args="(rs_matrix4x4 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsMatrixInverseTranspose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns true if the matrix was successfully inversed and transposed.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac380c4117e047da494a74f0dad20fab3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="ac380c4117e047da494a74f0dad20fab3" args="(rs_matrix4x4 *m, const float *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the elements of a matrix from an array of floats.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aef942535c5d56072125dcf5244970ea2"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aef942535c5d56072125dcf5244970ea2" args="(rs_matrix3x3 *m, const float *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa327089f7ad9161d7372094163147005"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aa327089f7ad9161d7372094163147005" args="(rs_matrix2x2 *m, const float *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const float * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5239a3f5f2becd20507d0aa56638ba03"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5239a3f5f2becd20507d0aa56638ba03" args="(rs_matrix4x4 *m, const rs_matrix4x4 *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a06176acb38405937cb94c835a712a3b3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a06176acb38405937cb94c835a712a3b3" args="(rs_matrix4x4 *m, const rs_matrix3x3 *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a3d0f0053720fb4afb3a3eb32e42a82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a3a3d0f0053720fb4afb3a3eb32e42a82" args="(rs_matrix4x4 *m, const rs_matrix2x2 *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the elements of a matrix from another matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a654e5abe095770979d740f7b55382bd0"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a654e5abe095770979d740f7b55382bd0" args="(rs_matrix3x3 *m, const rs_matrix3x3 *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5f3697805c794c9c9f2f8cfdde4b9a44"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5f3697805c794c9c9f2f8cfdde4b9a44" args="(rs_matrix2x2 *m, const rs_matrix2x2 *v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoad </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad25760aaf01e95d0055237afab41bbb3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadFrustum" ref="ad25760aaf01e95d0055237afab41bbb3" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadFrustum </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load an Frustum projection matrix constructed from the 6 planes</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a0ffd9de971cf10d0a663ff565be8d3cc"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a0ffd9de971cf10d0a663ff565be8d3cc" args="(rs_matrix4x4 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadIdentity </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the elements of a matrix to the identity matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a5b31e83553efa947db2198674d5db043"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a5b31e83553efa947db2198674d5db043" args="(rs_matrix3x3 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadIdentity </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad2954a5ac11d2370227296be89e92471"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="ad2954a5ac11d2370227296be89e92471" args="(rs_matrix2x2 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadIdentity </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a79f14c4c0f5ecc1bbd0bf54da8b653ef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a79f14c4c0f5ecc1bbd0bf54da8b653ef" args="(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiply two matrix (lhs, rhs) and place the result in m.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">lhs</td><td></td></tr>
+ <tr><td class="paramname">rhs</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a78872343ea6a5c1a846160ccdc4add52"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a78872343ea6a5c1a846160ccdc4add52" args="(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae0dd4755c28fc896626ebf5dc784130f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="ae0dd4755c28fc896626ebf5dc784130f" args="(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>lhs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4c59884a0e534dbbcdc5655842732d43"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadOrtho" ref="a4c59884a0e534dbbcdc5655842732d43" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadOrtho </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load an Ortho projection matrix constructed from the 6 planes</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aa404c34d7478f2921f7415d2da95d02b"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadPerspective" ref="aa404c34d7478f2921f7415d2da95d02b" args="(rs_matrix4x4 *m, float fovy, float aspect, float near, float far)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadPerspective </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load an perspective projection matrix constructed from the 6 planes</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">fovy</td><td>Field of view, in degrees along the Y axis. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Ratio of x / y. </td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a268032f3ac6d766b1d7fe72a6cb50464"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadRotate" ref="a268032f3ac6d766b1d7fe72a6cb50464" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadRotate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load a rotation matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">rot</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="acaf51d1f9ad5041ce01fbf8b7c5923fd"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadScale" ref="acaf51d1f9ad5041ce01fbf8b7c5923fd" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadScale </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load a scale matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a1b521c8a3d1260fa732cbf0a71af0e74"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadTranslate" ref="a1b521c8a3d1260fa732cbf0a71af0e74" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixLoadTranslate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load a translation matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a97953ab2606900a839e5816c619abe66"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a97953ab2606900a839e5816c619abe66" args="(rs_matrix4x4 *m, const rs_matrix4x4 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiply the matrix m by rhs and place the result back into m.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>(lhs) </td></tr>
+ <tr><td class="paramname">rhs</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ae0b03aeec17ec8b9c5e75f8efb1bdc53"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ae0b03aeec17ec8b9c5e75f8efb1bdc53" args="(rs_matrix3x3 *m, const rs_matrix3x3 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab1973ad3efa0ab2d53f466dd9fb190bb"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ab1973ad3efa0ab2d53f466dd9fb190bb" args="(rs_matrix2x2 *m, const rs_matrix2x2 *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a47b6abbf32ffaf77bb13d96c3f05779f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a47b6abbf32ffaf77bb13d96c3f05779f" args="(rs_matrix4x4 *m, float4 in)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td>
+ <td class="paramname"><em>in</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiply a vector by a matrix and return the result vector. API version 10-13</p>
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a716bc2d29b80eb25388aba3ba8845aef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a716bc2d29b80eb25388aba3ba8845aef" args="(rs_matrix3x3 *m, float3 in)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
+ <td class="paramname"><em>in</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4d9a8bb7c3f5d67b14fa349bdd531d13"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a4d9a8bb7c3f5d67b14fa349bdd531d13" args="(rs_matrix2x2 *m, float2 in)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> rsMatrixMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> </td>
+ <td class="paramname"><em>in</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad5ed05ca4880397fb29615e3c6798de1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixRotate" ref="ad5ed05ca4880397fb29615e3c6798de1" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixRotate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiple matrix m with a rotation matrix</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">rot</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a94cc6b22bd1a6c07a9a1c1d21afb392c"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixScale" ref="a94cc6b22bd1a6c07a9a1c1d21afb392c" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixScale </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiple matrix m with a scale matrix</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a68e320f7fa2cc5a5b4759e3ab679ee10"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="a68e320f7fa2cc5a5b4759e3ab679ee10" args="(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set one element of a matrix.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>The matrix to be set </td></tr>
+ <tr><td class="paramname">row</td><td></td></tr>
+ <tr><td class="paramname">col</td><td></td></tr>
+ <tr><td class="paramname">v</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ada106cb8f08e4b23930d7ba1a0ce5609"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="ada106cb8f08e4b23930d7ba1a0ce5609" args="(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a086c4f1cd21500f8e332226af4f62001"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="a086c4f1cd21500f8e332226af4f62001" args="(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>row</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
+ <td class="paramname"><em>col</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4df5f9b5bb6044f3c3426f2f58b94405"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranslate" ref="a4df5f9b5bb6044f3c3426f2f58b94405" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixTranslate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiple matrix m with a translation matrix</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ <tr><td class="paramname">x</td><td></td></tr>
+ <tr><td class="paramname">y</td><td></td></tr>
+ <tr><td class="paramname">z</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a88095c70f1550c760844b3e32e41a31a"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a88095c70f1550c760844b3e32e41a31a" args="(rs_matrix4x4 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixTranspose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Transpose the matrix m.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ac52acb31a705f6c68af8bddea0e79969"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="ac52acb31a705f6c68af8bddea0e79969" args="(rs_matrix3x3 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixTranspose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a49164dd4d4e85b212196028b1fd89dc1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a49164dd4d4e85b212196028b1fd89dc1" args="(rs_matrix2x2 *m)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsMatrixTranspose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh_source.html b/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
new file mode 100644
index 0000000..531a3e3
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_matrix.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_matrix.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__matrix_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_MATRIX_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATRIX_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00036"></a>00036 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00037"></a>00037 <a class="code" href="rs__matrix_8rsh.html#a68e320f7fa2cc5a5b4759e3ab679ee10">rsMatrixSet</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <span class="keywordtype">float</span> v);
+<a name="l00041"></a>00041 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00042"></a>00042 <a class="code" href="rs__matrix_8rsh.html#a68e320f7fa2cc5a5b4759e3ab679ee10">rsMatrixSet</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <span class="keywordtype">float</span> v);
+<a name="l00046"></a>00046 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00047"></a>00047 <a class="code" href="rs__matrix_8rsh.html#a68e320f7fa2cc5a5b4759e3ab679ee10">rsMatrixSet</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <span class="keywordtype">float</span> v);
+<a name="l00048"></a>00048
+<a name="l00058"></a>00058 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00059"></a>00059 <a class="code" href="rs__matrix_8rsh.html#af1fb87eb02f166bb85ef10a92333bb49">rsMatrixGet</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col);
+<a name="l00063"></a>00063 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00064"></a>00064 <a class="code" href="rs__matrix_8rsh.html#af1fb87eb02f166bb85ef10a92333bb49">rsMatrixGet</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col);
+<a name="l00068"></a>00068 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00069"></a>00069 <a class="code" href="rs__matrix_8rsh.html#af1fb87eb02f166bb85ef10a92333bb49">rsMatrixGet</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col);
+<a name="l00070"></a>00070
+<a name="l00076"></a>00076 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
+<a name="l00080"></a>00080 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
+<a name="l00084"></a>00084 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
+<a name="l00085"></a>00085
+<a name="l00091"></a>00091 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <span class="keywordtype">float</span> *v);
+<a name="l00095"></a>00095 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <span class="keywordtype">float</span> *v);
+<a name="l00099"></a>00099 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <span class="keywordtype">float</span> *v);
+<a name="l00103"></a>00103 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *v);
+<a name="l00107"></a>00107 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
+<a name="l00108"></a>00108
+<a name="l00114"></a>00114 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
+<a name="l00118"></a>00118 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
+<a name="l00122"></a>00122 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
+<a name="l00123"></a>00123
+<a name="l00133"></a>00133 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00134"></a>00134 <a class="code" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00135"></a>00135
+<a name="l00144"></a>00144 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00145"></a>00145 <a class="code" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00146"></a>00146
+<a name="l00155"></a>00155 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00156"></a>00156 <a class="code" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00157"></a>00157
+<a name="l00165"></a>00165 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00166"></a>00166 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *lhs, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
+<a name="l00170"></a>00170 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00171"></a>00171 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *lhs, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
+<a name="l00175"></a>00175 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00176"></a>00176 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *lhs, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
+<a name="l00177"></a>00177
+<a name="l00184"></a>00184 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00185"></a>00185 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
+<a name="l00189"></a>00189 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00190"></a>00190 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
+<a name="l00194"></a>00194 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00195"></a>00195 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
+<a name="l00196"></a>00196
+<a name="l00206"></a>00206 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00207"></a>00207 <a class="code" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00208"></a>00208
+<a name="l00217"></a>00217 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00218"></a>00218 <a class="code" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00219"></a>00219
+<a name="l00228"></a>00228 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00229"></a>00229 <a class="code" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
+<a name="l00230"></a>00230
+<a name="l00242"></a>00242 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00243"></a>00243 <a class="code" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
+<a name="l00244"></a>00244
+<a name="l00256"></a>00256 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00257"></a>00257 <a class="code" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
+<a name="l00258"></a>00258
+<a name="l00268"></a>00268 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00269"></a>00269 <a class="code" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>* m, <span class="keywordtype">float</span> fovy, <span class="keywordtype">float</span> aspect, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
+<a name="l00270"></a>00270
+<a name="l00271"></a>00271 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION < 14)</span>
+<a name="l00272"></a>00272 <span class="preprocessor"></span>
+<a name="l00276"></a>00276 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00277"></a>00277 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
+<a name="l00278"></a>00278
+<a name="l00282"></a>00282 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00283"></a>00283 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
+<a name="l00284"></a>00284
+<a name="l00288"></a>00288 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00289"></a>00289 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00290"></a>00290
+<a name="l00294"></a>00294 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
+<a name="l00295"></a>00295 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
+<a name="l00296"></a>00296
+<a name="l00300"></a>00300 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
+<a name="l00301"></a>00301 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00302"></a>00302
+<a name="l00306"></a>00306 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
+<a name="l00307"></a>00307 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00308"></a>00308 <span class="preprocessor">#else</span>
+<a name="l00309"></a>00309 <span class="preprocessor"></span>
+<a name="l00313"></a>00313 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00314"></a>00314 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
+<a name="l00315"></a>00315
+<a name="l00319"></a>00319 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00320"></a>00320 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
+<a name="l00321"></a>00321
+<a name="l00325"></a>00325 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
+<a name="l00326"></a>00326 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00327"></a>00327
+<a name="l00331"></a>00331 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
+<a name="l00332"></a>00332 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
+<a name="l00333"></a>00333
+<a name="l00337"></a>00337 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
+<a name="l00338"></a>00338 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00339"></a>00339
+<a name="l00343"></a>00343 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
+<a name="l00344"></a>00344 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
+<a name="l00345"></a>00345 <span class="preprocessor">#endif</span>
+<a name="l00346"></a>00346 <span class="preprocessor"></span>
+<a name="l00347"></a>00347
+<a name="l00353"></a>00353 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
+<a name="l00354"></a>00354
+<a name="l00360"></a>00360 extern <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
+<a name="l00361"></a>00361
+<a name="l00367"></a>00367 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
+<a name="l00371"></a>00371 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
+<a name="l00375"></a>00375 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
+<a name="l00376"></a>00376
+<a name="l00377"></a>00377
+<a name="l00378"></a>00378 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh.html b/docs/html/reference/renderscript/rs__object_8rsh.html
new file mode 100644
index 0000000..464e7e5
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__object_8rsh.html
@@ -0,0 +1,791 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_object.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_object.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst, <a class="el" href="structrs__element.html">rs_element</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ab1c6d0672b6b88add70a98e627eeb7ae">rsSetObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst, <a class="el" href="structrs__type.html">rs_type</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af3446b1b9c2e4b600cdc8d828f3dbb59">rsSetObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst, <a class="el" href="structrs__allocation.html">rs_allocation</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rsSetObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst, <a class="el" href="structrs__sampler.html">rs_sampler</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a9dfc520ed267ac9733760bc628a93cae">rsSetObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst, <a class="el" href="structrs__script.html">rs_script</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4d6368cf71d6fd2e55efbe23af6cfd7c">rsSetObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst, <a class="el" href="structrs__mesh.html">rs_mesh</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a8135bceeb7b3ec8bf9a49d04e39bd565">rsSetObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst, <a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5512c023d40e416bea709f8d8caf9674">rsSetObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst, <a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a42c0d25d78051a1de58a7a1c4dcfdada">rsSetObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst, <a class="el" href="structrs__program__raster.html">rs_program_raster</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4babadff570c9f57edbb3fb98c80a113">rsSetObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst, <a class="el" href="structrs__program__store.html">rs_program_store</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ad1af9aed63d9f925a8e6288c0607d55b">rsSetObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst, <a class="el" href="structrs__font.html">rs_font</a> src)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ae9c24592eb550e72c9ff480dfbb9fe07">rsClearObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5b944e2762ce1a44f7e63abd41851bcd">rsClearObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a51fe2098cc5c2ff73ceff8cc46b6dd89">rsClearObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a0034d7e67f80a9ce2e1139f1cb54b9a4">rsClearObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6f26564cf4fa1bcd46db51a478bf91b9">rsClearObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afc6aca3a903d5e2021d9eeab4836fd26">rsClearObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a712fcc988eedf21845495477cec54029">rsClearObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a06b6d56105e192e121a5a4a555dc7b70">rsClearObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a691d3c2564dd2c08d965ccb1c73a9b29">rsClearObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa246aa3c8162ef03e43bc0062671ae29">rsClearObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a> (<a class="el" href="structrs__element.html">rs_element</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a445c32d5bc085369f1ffa1a8ba13a381">rsIsObject</a> (<a class="el" href="structrs__type.html">rs_type</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afd33063fc6e45cb23f9a6f68dc2976ba">rsIsObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a509c7f0eacf1f07a3e7afaa029168f11">rsIsObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6dc9db5fb60856b04c0b495a85affcbc">rsIsObject</a> (<a class="el" href="structrs__script.html">rs_script</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa1860f7322da25f4c4a1727571b01e2b">rsIsObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afa57d9148778b03b270facbdbcb88816">rsIsObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#acaa5da532eab1803a72fc4af2e7c6573">rsIsObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a2358cf1fd6b2e0b1d6f1bde8664d9c41">rsIsObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a547cd0a8071d895139893f1e10f5c3fd">rsIsObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ac1d6da920f12974b3633d25ed078da2d">rsIsObject</a> (<a class="el" href="structrs__font.html">rs_font</a>)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Object routines. </p>
+
+<p>Definition in file <a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aab5f47dc11b9044b3d02c4ed818fe6e7"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aab5f47dc11b9044b3d02c4ed818fe6e7" args="(rs_element *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sets the object to NULL.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae9c24592eb550e72c9ff480dfbb9fe07"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="ae9c24592eb550e72c9ff480dfbb9fe07" args="(rs_type *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5b944e2762ce1a44f7e63abd41851bcd"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a5b944e2762ce1a44f7e63abd41851bcd" args="(rs_allocation *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a51fe2098cc5c2ff73ceff8cc46b6dd89"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a51fe2098cc5c2ff73ceff8cc46b6dd89" args="(rs_sampler *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0034d7e67f80a9ce2e1139f1cb54b9a4"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a0034d7e67f80a9ce2e1139f1cb54b9a4" args="(rs_script *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6f26564cf4fa1bcd46db51a478bf91b9"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a6f26564cf4fa1bcd46db51a478bf91b9" args="(rs_mesh *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="afc6aca3a903d5e2021d9eeab4836fd26"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="afc6aca3a903d5e2021d9eeab4836fd26" args="(rs_program_fragment *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a712fcc988eedf21845495477cec54029"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a712fcc988eedf21845495477cec54029" args="(rs_program_vertex *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a06b6d56105e192e121a5a4a555dc7b70"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a06b6d56105e192e121a5a4a555dc7b70" args="(rs_program_raster *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a691d3c2564dd2c08d965ccb1c73a9b29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a691d3c2564dd2c08d965ccb1c73a9b29" args="(rs_program_store *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa246aa3c8162ef03e43bc0062671ae29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aa246aa3c8162ef03e43bc0062671ae29" args="(rs_font *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsClearObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> * </td>
+ <td class="paramname"><em>dst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a81f862730b961bd93ac132c24cbc0f82"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a81f862730b961bd93ac132c24cbc0f82" args="(rs_element)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Tests if the object is valid. Returns true if the object is valid, false if it is NULL.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a445c32d5bc085369f1ffa1a8ba13a381"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a445c32d5bc085369f1ffa1a8ba13a381" args="(rs_type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="afd33063fc6e45cb23f9a6f68dc2976ba"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afd33063fc6e45cb23f9a6f68dc2976ba" args="(rs_allocation)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a509c7f0eacf1f07a3e7afaa029168f11"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a509c7f0eacf1f07a3e7afaa029168f11" args="(rs_sampler)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6dc9db5fb60856b04c0b495a85affcbc"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a6dc9db5fb60856b04c0b495a85affcbc" args="(rs_script)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa1860f7322da25f4c4a1727571b01e2b"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="aa1860f7322da25f4c4a1727571b01e2b" args="(rs_mesh)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="afa57d9148778b03b270facbdbcb88816"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afa57d9148778b03b270facbdbcb88816" args="(rs_program_fragment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="acaa5da532eab1803a72fc4af2e7c6573"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="acaa5da532eab1803a72fc4af2e7c6573" args="(rs_program_vertex)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2358cf1fd6b2e0b1d6f1bde8664d9c41"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a2358cf1fd6b2e0b1d6f1bde8664d9c41" args="(rs_program_raster)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a547cd0a8071d895139893f1e10f5c3fd"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a547cd0a8071d895139893f1e10f5c3fd" args="(rs_program_store)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac1d6da920f12974b3633d25ed078da2d"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="ac1d6da920f12974b3633d25ed078da2d" args="(rs_font)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool rsIsObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="af6983a1578621ce283acc07f876cda62"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af6983a1578621ce283acc07f876cda62" args="(rs_element *dst, rs_element src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy reference to the specified object.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dst</td><td></td></tr>
+ <tr><td class="paramname">src</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab1c6d0672b6b88add70a98e627eeb7ae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ab1c6d0672b6b88add70a98e627eeb7ae" args="(rs_type *dst, rs_type src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="af3446b1b9c2e4b600cdc8d828f3dbb59"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af3446b1b9c2e4b600cdc8d828f3dbb59" args="(rs_allocation *dst, rs_allocation src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5132f90b4aaf8d2e35e6ad021fb08175"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5132f90b4aaf8d2e35e6ad021fb08175" args="(rs_sampler *dst, rs_sampler src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9dfc520ed267ac9733760bc628a93cae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a9dfc520ed267ac9733760bc628a93cae" args="(rs_script *dst, rs_script src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4d6368cf71d6fd2e55efbe23af6cfd7c"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4d6368cf71d6fd2e55efbe23af6cfd7c" args="(rs_mesh *dst, rs_mesh src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a8135bceeb7b3ec8bf9a49d04e39bd565"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a8135bceeb7b3ec8bf9a49d04e39bd565" args="(rs_program_fragment *dst, rs_program_fragment src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5512c023d40e416bea709f8d8caf9674"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5512c023d40e416bea709f8d8caf9674" args="(rs_program_vertex *dst, rs_program_vertex src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a42c0d25d78051a1de58a7a1c4dcfdada"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a42c0d25d78051a1de58a7a1c4dcfdada" args="(rs_program_raster *dst, rs_program_raster src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4babadff570c9f57edbb3fb98c80a113"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4babadff570c9f57edbb3fb98c80a113" args="(rs_program_store *dst, rs_program_store src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad1af9aed63d9f925a8e6288c0607d55b"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ad1af9aed63d9f925a8e6288c0607d55b" args="(rs_font *dst, rs_font src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void rsSetObject </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> * </td>
+ <td class="paramname"><em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
+ <td class="paramname"><em>src</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh_source.html b/docs/html/reference/renderscript/rs__object_8rsh_source.html
new file mode 100644
index 0000000..0f9b488
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__object_8rsh_source.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_object.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_object.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__object_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_OBJECT_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_OBJECT_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026
+<a name="l00033"></a>00033 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00034"></a>00034 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a Renderscript element.">rs_element</a> *dst, <a class="code" href="structrs__element.html" title="Opaque handle to a Renderscript element.">rs_element</a> src);
+<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00039"></a>00039 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a Renderscript type.">rs_type</a> *dst, <a class="code" href="structrs__type.html" title="Opaque handle to a Renderscript type.">rs_type</a> src);
+<a name="l00043"></a>00043 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00044"></a>00044 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> *dst, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> src);
+<a name="l00048"></a>00048 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00049"></a>00049 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a> *dst, <a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a> src);
+<a name="l00053"></a>00053 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00054"></a>00054 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> *dst, <a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> src);
+<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00059"></a>00059 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> *dst, <a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> src);
+<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00064"></a>00064 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> *dst, <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> src);
+<a name="l00068"></a>00068 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00069"></a>00069 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> *dst, <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> src);
+<a name="l00073"></a>00073 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00074"></a>00074 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> *dst, <a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> src);
+<a name="l00078"></a>00078 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00079"></a>00079 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> *dst, <a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> src);
+<a name="l00083"></a>00083 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00084"></a>00084 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> *dst, <a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> src);
+<a name="l00085"></a>00085
+<a name="l00091"></a>00091 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00092"></a>00092 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a Renderscript element.">rs_element</a> *dst);
+<a name="l00096"></a>00096 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00097"></a>00097 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a Renderscript type.">rs_type</a> *dst);
+<a name="l00101"></a>00101 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00102"></a>00102 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> *dst);
+<a name="l00106"></a>00106 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00107"></a>00107 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a> *dst);
+<a name="l00111"></a>00111 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00112"></a>00112 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a> *dst);
+<a name="l00116"></a>00116 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00117"></a>00117 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> *dst);
+<a name="l00121"></a>00121 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00122"></a>00122 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> *dst);
+<a name="l00126"></a>00126 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00127"></a>00127 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> *dst);
+<a name="l00131"></a>00131 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00132"></a>00132 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> *dst);
+<a name="l00136"></a>00136 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00137"></a>00137 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> *dst);
+<a name="l00141"></a>00141 extern <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00142"></a>00142 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> *dst);
+<a name="l00143"></a>00143
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145
+<a name="l00152"></a>00152 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00153"></a>00153 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a Renderscript element.">rs_element</a>);
+<a name="l00157"></a>00157 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00158"></a>00158 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a Renderscript type.">rs_type</a>);
+<a name="l00162"></a>00162 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00163"></a>00163 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>);
+<a name="l00167"></a>00167 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00168"></a>00168 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a>);
+<a name="l00172"></a>00172 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00173"></a>00173 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a>);
+<a name="l00177"></a>00177 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00178"></a>00178 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a>);
+<a name="l00182"></a>00182 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00183"></a>00183 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a>);
+<a name="l00187"></a>00187 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00188"></a>00188 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a>);
+<a name="l00192"></a>00192 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00193"></a>00193 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a>);
+<a name="l00197"></a>00197 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00198"></a>00198 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a>);
+<a name="l00202"></a>00202 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
+<a name="l00203"></a>00203 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a>);
+<a name="l00204"></a>00204
+<a name="l00205"></a>00205 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh.html b/docs/html/reference/renderscript/rs__quaternion_8rsh.html
new file mode 100644
index 0000000..bd6979c
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__quaternion_8rsh.html
@@ -0,0 +1,556 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_quaternion.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_quaternion.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float w, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float s)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a> (const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, float t)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Quaternion routines. </p>
+
+<p>Definition in file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a5e6e493b9917336b0d9118fdd4e91444"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionAdd" ref="a5e6e493b9917336b0d9118fdd4e91444" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionAdd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add two quaternions </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>destination quaternion to add to </td></tr>
+ <tr><td class="paramname">rsh</td><td>right hand side quaternion to add </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00074">74</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acd670264e49743d35f38028b8e2a8800"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionConjugate" ref="acd670264e49743d35f38028b8e2a8800" args="(rs_quaternion *q)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionConjugate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Conjugates the quaternion </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>quaternion to conjugate </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00127">127</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa810f8857439564e7b3be771f47b40ca"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionDot" ref="aa810f8857439564e7b3be771f47b40ca" args="(const rs_quaternion *q0, const rs_quaternion *q1)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static float rsQuaternionDot </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q1</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Dot product of two quaternions </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q0</td><td>first quaternion </td></tr>
+ <tr><td class="paramname">q1</td><td>second quaternion </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>dot product between q0 and q1 </dd></dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00140">140</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7726c524868c49892976fec53ea0693b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionGetMatrixUnit" ref="a7726c524868c49892976fec53ea0693b" args="(rs_matrix4x4 *m, const rs_quaternion *q)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionGetMatrixUnit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Computes rotation matrix from the normalized quaternion </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>resulting matrix </td></tr>
+ <tr><td class="paramname">p</td><td>normalized quaternion </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00228">228</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adf4423c521e34f3cf29d5dd5b5a93de0"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotate" ref="adf4423c521e34f3cf29d5dd5b5a93de0" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionLoadRotate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Loads a quaternion that represents a rotation about an arbitrary vector (doesn't have to be unit) </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
+ <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
+ <tr><td class="paramname">x</td><td>component of a vector </td></tr>
+ <tr><td class="paramname">y</td><td>component of a vector </td></tr>
+ <tr><td class="paramname">x</td><td>component of a vector </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00111">111</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa72a43cf3d7b5924de1ddfaa5766db09"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotateUnit" ref="aa72a43cf3d7b5924de1ddfaa5766db09" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionLoadRotateUnit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>rot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Loads a quaternion that represents a rotation about an arbitrary unit vector </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
+ <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
+ <tr><td class="paramname">x</td><td>component of a vector </td></tr>
+ <tr><td class="paramname">y</td><td>component of a vector </td></tr>
+ <tr><td class="paramname">x</td><td>component of a vector </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00090">90</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f3d214912facf72f6a6d57e95aa3c3b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a4f3d214912facf72f6a6d57e95aa3c3b" args="(rs_quaternion *q, float s)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>s</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiply quaternion by a scalar </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>quaternion to multiply </td></tr>
+ <tr><td class="paramname">s</td><td>scalar </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00061">61</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bbbb286a2e2cb71b416c053f44844c3"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a8bbbb286a2e2cb71b416c053f44844c3" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionMultiply </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Multiply quaternion by another quaternion </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
+ <tr><td class="paramname">rhs</td><td>right hand side quaternion to multiply by </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00163">163</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb31aad2416044ad5bbf44ee7c838e2a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionNormalize" ref="abb31aad2416044ad5bbf44ee7c838e2a" args="(rs_quaternion *q)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionNormalize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Normalizes the quaternion </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>quaternion to normalize </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00149">149</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5ff868dbc33e710a666a102fdcc6670a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a5ff868dbc33e710a666a102fdcc6670a" args="(rs_quaternion *q, float w, float x, float y, float z)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionSet </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the quaternion components </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">w</td><td>component </td></tr>
+ <tr><td class="paramname">x</td><td>component </td></tr>
+ <tr><td class="paramname">y</td><td>component </td></tr>
+ <tr><td class="paramname">z</td><td>component </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00035">35</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a249782133e54f13a8096d1fbe295714d"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a249782133e54f13a8096d1fbe295714d" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionSet </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>rhs</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the quaternion from another quaternion </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
+ <tr><td class="paramname">rhs</td><td>source quaternion </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00048">48</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7da94a30e287cbb8148771a5cd768dbd"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSlerp" ref="a7da94a30e287cbb8148771a5cd768dbd" args="(rs_quaternion *q, const rs_quaternion *q0, const rs_quaternion *q1, float t)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void rsQuaternionSlerp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
+ <td class="paramname"><em>q1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>t</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Performs spherical linear interpolation between two quaternions </p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>result quaternion from interpolation </td></tr>
+ <tr><td class="paramname">q0</td><td>first param </td></tr>
+ <tr><td class="paramname">q1</td><td>second param </td></tr>
+ <tr><td class="paramname">t</td><td>how much to interpolate by </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00182">182</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html b/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
new file mode 100644
index 0000000..c08565a
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_quaternion.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_quaternion.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__quaternion_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_QUATERNION_RSH__</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_QUATERNION_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a>00026
+<a name="l00034"></a>00034 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00035"></a><a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">00035</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
+<a name="l00036"></a>00036 q->w = w;
+<a name="l00037"></a>00037 q->x = x;
+<a name="l00038"></a>00038 q->y = y;
+<a name="l00039"></a>00039 q->z = z;
+<a name="l00040"></a>00040 }
+<a name="l00041"></a>00041
+<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00048"></a><a class="code" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">00048</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
+<a name="l00049"></a>00049 q->w = rhs->w;
+<a name="l00050"></a>00050 q->x = rhs->x;
+<a name="l00051"></a>00051 q->y = rhs->y;
+<a name="l00052"></a>00052 q->z = rhs->z;
+<a name="l00053"></a>00053 }
+<a name="l00054"></a>00054
+<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00061"></a><a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">00061</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> s) {
+<a name="l00062"></a>00062 q->w *= s;
+<a name="l00063"></a>00063 q->x *= s;
+<a name="l00064"></a>00064 q->y *= s;
+<a name="l00065"></a>00065 q->z *= s;
+<a name="l00066"></a>00066 }
+<a name="l00067"></a>00067
+<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00074"></a><a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">00074</a> <a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
+<a name="l00075"></a>00075 q->w *= rhs->w;
+<a name="l00076"></a>00076 q->x *= rhs->x;
+<a name="l00077"></a>00077 q->y *= rhs->y;
+<a name="l00078"></a>00078 q->z *= rhs->z;
+<a name="l00079"></a>00079 }
+<a name="l00080"></a>00080
+<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00090"></a><a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">00090</a> <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
+<a name="l00091"></a>00091 rot *= (float)(M_PI / 180.0f) * 0.5f;
+<a name="l00092"></a>00092 <span class="keywordtype">float</span> c = <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(rot);
+<a name="l00093"></a>00093 <span class="keywordtype">float</span> s = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(rot);
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 q->w = c;
+<a name="l00096"></a>00096 q->x = x * s;
+<a name="l00097"></a>00097 q->y = y * s;
+<a name="l00098"></a>00098 q->z = z * s;
+<a name="l00099"></a>00099 }
+<a name="l00100"></a>00100
+<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00111"></a><a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">00111</a> <a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
+<a name="l00112"></a>00112 <span class="keyword">const</span> <span class="keywordtype">float</span> len = x*x + y*y + z*z;
+<a name="l00113"></a>00113 <span class="keywordflow">if</span> (len != 1) {
+<a name="l00114"></a>00114 <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
+<a name="l00115"></a>00115 x *= recipLen;
+<a name="l00116"></a>00116 y *= recipLen;
+<a name="l00117"></a>00117 z *= recipLen;
+<a name="l00118"></a>00118 }
+<a name="l00119"></a>00119 <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(q, rot, x, y, z);
+<a name="l00120"></a>00120 }
+<a name="l00121"></a>00121
+<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00127"></a><a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">00127</a> <a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
+<a name="l00128"></a>00128 q->x = -q->x;
+<a name="l00129"></a>00129 q->y = -q->y;
+<a name="l00130"></a>00130 q->z = -q->z;
+<a name="l00131"></a>00131 }
+<a name="l00132"></a>00132
+<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">float</span>
+<a name="l00140"></a><a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">00140</a> <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(<span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1) {
+<a name="l00141"></a>00141 <span class="keywordflow">return</span> q0->w*q1->w + q0->x*q1->x + q0->y*q1->y + q0->z*q1->z;
+<a name="l00142"></a>00142 }
+<a name="l00143"></a>00143
+<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00149"></a><a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">00149</a> <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
+<a name="l00150"></a>00150 <span class="keyword">const</span> <span class="keywordtype">float</span> len = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q, q);
+<a name="l00151"></a>00151 <span class="keywordflow">if</span> (len != 1) {
+<a name="l00152"></a>00152 <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
+<a name="l00153"></a>00153 <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(q, recipLen);
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155 }
+<a name="l00156"></a>00156
+<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
+<a name="l00163"></a><a class="code" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">00163</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
+<a name="l00164"></a>00164 <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> qtmp;
+<a name="l00165"></a>00165 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&qtmp, q);
+<a name="l00166"></a>00166
+<a name="l00167"></a>00167 q->w = qtmp.w*rhs->w - qtmp.x*rhs->x - qtmp.y*rhs->y - qtmp.z*rhs->z;
+<a name="l00168"></a>00168 q->x = qtmp.w*rhs->x + qtmp.x*rhs->w + qtmp.y*rhs->z - qtmp.z*rhs->y;
+<a name="l00169"></a>00169 q->y = qtmp.w*rhs->y + qtmp.y*rhs->w + qtmp.z*rhs->x - qtmp.x*rhs->z;
+<a name="l00170"></a>00170 q->z = qtmp.w*rhs->z + qtmp.z*rhs->w + qtmp.x*rhs->y - qtmp.y*rhs->x;
+<a name="l00171"></a>00171 <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(q);
+<a name="l00172"></a>00172 }
+<a name="l00173"></a>00173
+<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00182"></a><a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">00182</a> <a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, <span class="keywordtype">float</span> t) {
+<a name="l00183"></a>00183 <span class="keywordflow">if</span> (t <= 0.0f) {
+<a name="l00184"></a>00184 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q0);
+<a name="l00185"></a>00185 <span class="keywordflow">return</span>;
+<a name="l00186"></a>00186 }
+<a name="l00187"></a>00187 <span class="keywordflow">if</span> (t >= 1.0f) {
+<a name="l00188"></a>00188 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q1);
+<a name="l00189"></a>00189 <span class="keywordflow">return</span>;
+<a name="l00190"></a>00190 }
+<a name="l00191"></a>00191
+<a name="l00192"></a>00192 <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> tempq0, tempq1;
+<a name="l00193"></a>00193 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq0, q0);
+<a name="l00194"></a>00194 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq1, q1);
+<a name="l00195"></a>00195
+<a name="l00196"></a>00196 <span class="keywordtype">float</span> angle = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q0, q1);
+<a name="l00197"></a>00197 <span class="keywordflow">if</span> (angle < 0) {
+<a name="l00198"></a>00198 <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(&tempq0, -1.0f);
+<a name="l00199"></a>00199 angle *= -1.0f;
+<a name="l00200"></a>00200 }
+<a name="l00201"></a>00201
+<a name="l00202"></a>00202 <span class="keywordtype">float</span> scale, invScale;
+<a name="l00203"></a>00203 <span class="keywordflow">if</span> (angle + 1.0f > 0.05f) {
+<a name="l00204"></a>00204 <span class="keywordflow">if</span> (1.0f - angle >= 0.05f) {
+<a name="l00205"></a>00205 <span class="keywordtype">float</span> theta = <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(angle);
+<a name="l00206"></a>00206 <span class="keywordtype">float</span> invSinTheta = 1.0f / <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta);
+<a name="l00207"></a>00207 scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * (1.0f - t)) * invSinTheta;
+<a name="l00208"></a>00208 invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * t) * invSinTheta;
+<a name="l00209"></a>00209 } <span class="keywordflow">else</span> {
+<a name="l00210"></a>00210 scale = 1.0f - t;
+<a name="l00211"></a>00211 invScale = t;
+<a name="l00212"></a>00212 }
+<a name="l00213"></a>00213 } <span class="keywordflow">else</span> {
+<a name="l00214"></a>00214 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq1, tempq0.z, -tempq0.y, tempq0.x, -tempq0.w);
+<a name="l00215"></a>00215 scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * (0.5f - t));
+<a name="l00216"></a>00216 invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * t);
+<a name="l00217"></a>00217 }
+<a name="l00218"></a>00218
+<a name="l00219"></a>00219 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, tempq0.w*scale + tempq1.w*invScale, tempq0.x*scale + tempq1.x*invScale,
+<a name="l00220"></a>00220 tempq0.y*scale + tempq1.y*invScale, tempq0.z*scale + tempq1.z*invScale);
+<a name="l00221"></a>00221 }
+<a name="l00222"></a>00222
+<a name="l00228"></a><a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">00228</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
+<a name="l00229"></a>00229 <span class="keywordtype">float</span> xx = q->x * q->x;
+<a name="l00230"></a>00230 <span class="keywordtype">float</span> xy = q->x * q->y;
+<a name="l00231"></a>00231 <span class="keywordtype">float</span> xz = q->x * q->z;
+<a name="l00232"></a>00232 <span class="keywordtype">float</span> xw = q->x * q->w;
+<a name="l00233"></a>00233 <span class="keywordtype">float</span> yy = q->y * q->y;
+<a name="l00234"></a>00234 <span class="keywordtype">float</span> yz = q->y * q->z;
+<a name="l00235"></a>00235 <span class="keywordtype">float</span> yw = q->y * q->w;
+<a name="l00236"></a>00236 <span class="keywordtype">float</span> zz = q->z * q->z;
+<a name="l00237"></a>00237 <span class="keywordtype">float</span> zw = q->z * q->w;
+<a name="l00238"></a>00238
+<a name="l00239"></a>00239 m->m[0] = 1.0f - 2.0f * ( yy + zz );
+<a name="l00240"></a>00240 m->m[4] = 2.0f * ( xy - zw );
+<a name="l00241"></a>00241 m->m[8] = 2.0f * ( xz + yw );
+<a name="l00242"></a>00242 m->m[1] = 2.0f * ( xy + zw );
+<a name="l00243"></a>00243 m->m[5] = 1.0f - 2.0f * ( xx + zz );
+<a name="l00244"></a>00244 m->m[9] = 2.0f * ( yz - xw );
+<a name="l00245"></a>00245 m->m[2] = 2.0f * ( xz - yw );
+<a name="l00246"></a>00246 m->m[6] = 2.0f * ( yz + xw );
+<a name="l00247"></a>00247 m->m[10] = 1.0f - 2.0f * ( xx + yy );
+<a name="l00248"></a>00248 m->m[3] = m->m[7] = m->m[11] = m->m[12] = m->m[13] = m->m[14] = 0.0f;
+<a name="l00249"></a>00249 m->m[15] = 1.0f;
+<a name="l00250"></a>00250 }
+<a name="l00251"></a>00251
+<a name="l00252"></a>00252 <span class="preprocessor">#endif</span>
+<a name="l00253"></a>00253 <span class="preprocessor"></span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh.html b/docs/html/reference/renderscript/rs__time_8rsh.html
new file mode 100644
index 0000000..34ac9cd
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__time_8rsh.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_time.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_time.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html">rs_tm</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a> (<a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__tm.html">rs_tm</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a> (<a class="el" href="structrs__tm.html">rs_tm</a> *local, const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a> (void)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Renderscript time routines. </p>
+<p>This file contains Renderscript functions relating to time and date manipulation. </p>
+
+<p>Definition in file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ad2b4759a0a6a98bd79b7ad82a4b057d6"></a><!-- doxytag: member="rs_time.rsh::rs_time_t" ref="ad2b4759a0a6a98bd79b7ad82a4b057d6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)). </p>
+
+<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00031">31</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="adea2682186fd903752431ad848bd8bf4"></a><!-- doxytag: member="rs_time.rsh::rsGetDt" ref="adea2682186fd903752431ad848bd8bf4" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">float rsGetDt </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the time in seconds since this function was last called in this script.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Time in seconds. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a08a8fcadae964f7416aef487da624110"></a><!-- doxytag: member="rs_time.rsh::rsLocaltime" ref="a08a8fcadae964f7416aef487da624110" args="(rs_tm *local, const rs_time_t *timer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structrs__tm.html">rs_tm</a>* rsLocaltime </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structrs__tm.html">rs_tm</a> * </td>
+ <td class="paramname"><em>local</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> * </td>
+ <td class="paramname"><em>timer</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Converts the time specified by <code>timer</code> into broken-down time and stores it in <code>local</code>. This function also returns a pointer to <code>local</code>. If <code>local</code> is NULL, this function does nothing and returns NULL.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">local</td><td>Broken-down time. </td></tr>
+ <tr><td class="paramname">timer</td><td>Input time as calendar time.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to broken-down time (same as input <code>local</code>). </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a555f9324acb8c3d0c6f09a1d05478ce2"></a><!-- doxytag: member="rs_time.rsh::rsTime" ref="a555f9324acb8c3d0c6f09a1d05478ce2" args="(rs_time_t *timer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> rsTime </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> * </td>
+ <td class="paramname"><em>timer</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970). If <code>timer</code> is non-NULL, the result is also stored in the memory pointed to by this variable. If an error occurs, a value of -1 is returned.</p>
+<dl><dt><b>Parameters:</b></dt><dd>
+ <table class="params">
+ <tr><td class="paramname">timer</td><td>Location to also store the returned calendar time.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Seconds since the Epoch. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3c406e51a769718dd1c760518b9cad44"></a><!-- doxytag: member="rs_time.rsh::rsUptimeMillis" ref="a3c406e51a769718dd1c760518b9cad44" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeMillis </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the current system clock (uptime) in milliseconds.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in milliseconds. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a24e2cc12acf1e7fdd857d1a48981395d"></a><!-- doxytag: member="rs_time.rsh::rsUptimeNanos" ref="a24e2cc12acf1e7fdd857d1a48981395d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeNanos </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the current system clock (uptime) in nanoseconds.</p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in nanoseconds. </dd></dl>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh_source.html b/docs/html/reference/renderscript/rs__time_8rsh_source.html
new file mode 100644
index 0000000..1c5c74b
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__time_8rsh_source.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_time.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_time.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__time_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_TIME_RSH__</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TIME_RSH__</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00031"></a><a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">00031</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a>;
+<a name="l00032"></a>00032
+<a name="l00049"></a><a class="code" href="structrs__tm.html">00049</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00050"></a><a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">00050</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e" title="seconds">tm_sec</a>;
+<a name="l00051"></a><a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">00051</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b" title="minutes">tm_min</a>;
+<a name="l00052"></a><a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">00052</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a" title="hours">tm_hour</a>;
+<a name="l00053"></a><a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">00053</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15" title="day of the month">tm_mday</a>;
+<a name="l00054"></a><a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">00054</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832" title="month">tm_mon</a>;
+<a name="l00055"></a><a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">00055</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2" title="year">tm_year</a>;
+<a name="l00056"></a><a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">00056</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4" title="day of the week">tm_wday</a>;
+<a name="l00057"></a><a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">00057</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0" title="day of the year">tm_yday</a>;
+<a name="l00058"></a><a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">00058</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111" title="daylight savings time">tm_isdst</a>;
+<a name="l00059"></a>00059 } <a class="code" href="structrs__tm.html">rs_tm</a>;
+<a name="l00060"></a>00060
+<a name="l00070"></a>00070 <span class="keyword">extern</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> __attribute__((overloadable))
+<a name="l00071"></a>00071 <a class="code" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a>(<a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
+<a name="l00072"></a>00072
+<a name="l00083"></a>00083 extern <a class="code" href="structrs__tm.html">rs_tm</a> * __attribute__((overloadable))
+<a name="l00084"></a>00084 <a class="code" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a>(<a class="code" href="structrs__tm.html">rs_tm</a> *local, const <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
+<a name="l00085"></a>00085
+<a name="l00091"></a>00091 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
+<a name="l00092"></a>00092 <a class="code" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a>(<span class="keywordtype">void</span>);
+<a name="l00093"></a>00093
+<a name="l00099"></a>00099 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
+<a name="l00100"></a>00100 <a class="code" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a>(<span class="keywordtype">void</span>);
+<a name="l00101"></a>00101
+<a name="l00108"></a>00108 extern <span class="keywordtype">float</span> __attribute__((overloadable))
+<a name="l00109"></a>00109 <a class="code" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a>(<span class="keywordtype">void</span>);
+<a name="l00110"></a>00110
+<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh.html b/docs/html/reference/renderscript/rs__types_8rsh.html
new file mode 100644
index 0000000..bd601f2
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__types_8rsh.html
@@ -0,0 +1,846 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_types.rsh File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_types.rsh File Reference</div> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "stdbool.h"</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__element.html">rs_element</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript element. <a href="structrs__element.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__type.html">rs_type</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript type. <a href="structrs__type.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__allocation.html">rs_allocation</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript allocation. <a href="structrs__allocation.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__sampler.html">rs_sampler</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript sampler object. <a href="structrs__sampler.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script.html">rs_script</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript script object. <a href="structrs__script.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__mesh.html">rs_mesh</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript mesh object. <a href="structrs__mesh.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript ProgramFragment object. <a href="structrs__program__fragment.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript ProgramVertex object. <a href="structrs__program__vertex.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript ProgramRaster object. <a href="structrs__program__raster.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__store.html">rs_program_store</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript ProgramStore object. <a href="structrs__program__store.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__font.html">rs_font</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a Renderscript font object. <a href="structrs__font.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">4x4 float matrix <a href="structrs__matrix4x4.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">3x3 float matrix <a href="structrs__matrix3x3.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">2x2 float matrix <a href="structrs__matrix2x2.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef long long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned long long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Define the standard Renderscript types</p>
+<p>Integers 8 bit: char, int8_t 16 bit: short, int16_t 32 bit: int, in32_t 64 bit: long, long long, int64_t</p>
+<p>Unsigned Integers 8 bit: uchar, uint8_t 16 bit: ushort, uint16_t 32 bit: uint, uint32_t 64 bit: ulong, uint64_t</p>
+<p>Floating point 32 bit: float 64 bit: double</p>
+<p>Vectors of length 2, 3, and 4 are supported for all the types above. </p>
+
+<p>Definition in file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ac532b4c1895c8bd4fb75dc370c484351"></a><!-- doxytag: member="rs_types.rsh::char2" ref="ac532b4c1895c8bd4fb75dc370c484351" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic char type. Provides two char fields packed into a single 16 bit field with 16 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00273">273</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4617fb31f4c03402515efee0a9b56210"></a><!-- doxytag: member="rs_types.rsh::char3" ref="a4617fb31f4c03402515efee0a9b56210" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic char type. Provides three char fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00278">278</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aecb498648daac97c7cc5f31c242dfa03"></a><!-- doxytag: member="rs_types.rsh::char4" ref="aecb498648daac97c7cc5f31c242dfa03" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic char type. Provides four char fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00283">283</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a75ef868cedebc2a6eeb1bc6ca6ca49c3"></a><!-- doxytag: member="rs_types.rsh::double2" ref="a75ef868cedebc2a6eeb1bc6ca6ca49c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic double type. Provides two double fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00193">193</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa3c90d5a23d674185a13e95402eda7eb"></a><!-- doxytag: member="rs_types.rsh::double3" ref="aa3c90d5a23d674185a13e95402eda7eb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic double type. Provides three double fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00198">198</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a60f4b04e076f0dd0ecc99c365fc4ca21"></a><!-- doxytag: member="rs_types.rsh::double4" ref="a60f4b04e076f0dd0ecc99c365fc4ca21" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic double type. Provides four double fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00203">203</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5086d0fcb71f916c936af486ccf0dd41"></a><!-- doxytag: member="rs_types.rsh::float2" ref="a5086d0fcb71f916c936af486ccf0dd41" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic float type. Provides two float fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00176">176</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0046fa0f208d0899adbcf1f8b5aafadd"></a><!-- doxytag: member="rs_types.rsh::float3" ref="a0046fa0f208d0899adbcf1f8b5aafadd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic float type. Provides three float fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00181">181</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adb5162dc168ddd471d948faa60b37c5e"></a><!-- doxytag: member="rs_types.rsh::float4" ref="adb5162dc168ddd471d948faa60b37c5e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic float type. Provides four float fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00187">187</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa343fa3b3d06292b959ffdd4c4703b06"></a><!-- doxytag: member="rs_types.rsh::int16_t" ref="aa343fa3b3d06292b959ffdd4c4703b06" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>16 bit integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00054">54</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6bc1fa1354fe2145b8f12b4bbfafcf4c"></a><!-- doxytag: member="rs_types.rsh::int2" ref="a6bc1fa1354fe2145b8f12b4bbfafcf4c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic int type. Provides two int fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00305">305</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad5512266b63fd06dcf450f6c9d5326c8"></a><!-- doxytag: member="rs_types.rsh::int3" ref="ad5512266b63fd06dcf450f6c9d5326c8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic int type. Provides three int fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00310">310</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a32f2e37ee053cf2ce8ca28d1f74630e5"></a><!-- doxytag: member="rs_types.rsh::int32_t" ref="a32f2e37ee053cf2ce8ca28d1f74630e5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>32 bit integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00058">58</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a897deab71f679999ed99d4153c797e70"></a><!-- doxytag: member="rs_types.rsh::int4" ref="a897deab71f679999ed99d4153c797e70" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic int type. Provides two four fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00315">315</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a996e72f71b11a5bb8b3b7b6936b1516d"></a><!-- doxytag: member="rs_types.rsh::int64_t" ref="a996e72f71b11a5bb8b3b7b6936b1516d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef long long <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>64 bit integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00062">62</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad566f6541e98b74246db1a3a3a85ad49"></a><!-- doxytag: member="rs_types.rsh::int8_t" ref="ad566f6541e98b74246db1a3a3a85ad49" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>8 bit integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00050">50</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afd55d62cee0785034b73375acd0df9da"></a><!-- doxytag: member="rs_types.rsh::long2" ref="afd55d62cee0785034b73375acd0df9da" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic long type. Provides two long fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00321">321</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad9cedbf4050fad14138d1dcb3428ec18"></a><!-- doxytag: member="rs_types.rsh::long3" ref="ad9cedbf4050fad14138d1dcb3428ec18" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic long type. Provides three long fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00326">326</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae177e4918f36e5c9da36d524cdb7a2e7"></a><!-- doxytag: member="rs_types.rsh::long4" ref="ae177e4918f36e5c9da36d524cdb7a2e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic long type. Provides four long fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00331">331</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86f99f382dc35fc8ad98b524fe6d5447"></a><!-- doxytag: member="rs_types.rsh::rs_quaternion" ref="a86f99f382dc35fc8ad98b524fe6d5447" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>quaternion type for use with the quaternion functions </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00364">364</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a303d3ad18aaeacfcfeda2b8580b98796"></a><!-- doxytag: member="rs_types.rsh::short2" ref="a303d3ad18aaeacfcfeda2b8580b98796" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic short type. Provides two short fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00289">289</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3f4967691ae2b249511b5f3dd9e18793"></a><!-- doxytag: member="rs_types.rsh::short3" ref="a3f4967691ae2b249511b5f3dd9e18793" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic short type. Provides three short fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00294">294</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a198219da0b1d51c8d7f8f12aad7e502d"></a><!-- doxytag: member="rs_types.rsh::short4" ref="a198219da0b1d51c8d7f8f12aad7e502d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic short type. Provides four short fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00299">299</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a29d85914ddff32967d85ada69854206d"></a><!-- doxytag: member="rs_types.rsh::size_t" ref="a29d85914ddff32967d85ada69854206d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Typedef for unsigned int </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00098">98</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a170745d0d946e79c4c2a056d1d158996"></a><!-- doxytag: member="rs_types.rsh::ssize_t" ref="a170745d0d946e79c4c2a056d1d158996" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Typedef for int (use for 32-bit integers) </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00102">102</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a27c902d5ca78afa82d5ed75554d5cedc"></a><!-- doxytag: member="rs_types.rsh::uchar" ref="a27c902d5ca78afa82d5ed75554d5cedc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>8 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00082">82</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aff5eb7cd53a34bb01924bf64485296de"></a><!-- doxytag: member="rs_types.rsh::uchar2" ref="aff5eb7cd53a34bb01924bf64485296de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uchar type. Provides two uchar fields packed into a single 16 bit field with 16 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00209">209</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a247b5eacf2b662849668cbc33120343f"></a><!-- doxytag: member="rs_types.rsh::uchar3" ref="a247b5eacf2b662849668cbc33120343f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uchar type. Provides three uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00214">214</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6ed52a87d4ff920c303b13b00f7396d"></a><!-- doxytag: member="rs_types.rsh::uchar4" ref="ae6ed52a87d4ff920c303b13b00f7396d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uchar type. Provides four uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00219">219</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f5fce8c1ef282264f9214809524d836"></a><!-- doxytag: member="rs_types.rsh::uint" ref="a4f5fce8c1ef282264f9214809524d836" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>32 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00090">90</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a273cf69d639a59973b6019625df33e30"></a><!-- doxytag: member="rs_types.rsh::uint16_t" ref="a273cf69d639a59973b6019625df33e30" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned short <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>16 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00070">70</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf90cd1f01a121e824fc6e1b927e7683"></a><!-- doxytag: member="rs_types.rsh::uint2" ref="aaf90cd1f01a121e824fc6e1b927e7683" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uint type. Provides two uint fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00241">241</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae80e36ac834c891aa76b09a220344e78"></a><!-- doxytag: member="rs_types.rsh::uint3" ref="ae80e36ac834c891aa76b09a220344e78" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uint type. Provides three uint fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00246">246</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a435d1572bf3f880d55459d9805097f62"></a><!-- doxytag: member="rs_types.rsh::uint32_t" ref="a435d1572bf3f880d55459d9805097f62" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned int <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>32 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00074">74</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad92f0ec6c2cdc1f11a6d7fe321047462"></a><!-- doxytag: member="rs_types.rsh::uint4" ref="ad92f0ec6c2cdc1f11a6d7fe321047462" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic uint type. Provides four uint fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00251">251</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaa5d1cd013383c889537491c3cfd9aad"></a><!-- doxytag: member="rs_types.rsh::uint64_t" ref="aaa5d1cd013383c889537491c3cfd9aad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned long long <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>64 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00078">78</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba7bc1797add20fe3efdf37ced1182c5"></a><!-- doxytag: member="rs_types.rsh::uint8_t" ref="aba7bc1797add20fe3efdf37ced1182c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned char <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>8 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00066">66</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab46637ef82283186e57f54756fe67203"></a><!-- doxytag: member="rs_types.rsh::ulong" ref="ab46637ef82283186e57f54756fe67203" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Typedef for unsigned long (use for 64-bit unsigned integers) </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00094">94</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a56988b12ab16acf753356f7a5c70565a"></a><!-- doxytag: member="rs_types.rsh::ulong2" ref="a56988b12ab16acf753356f7a5c70565a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ulong type. Provides two ulong fields packed into a single 128 bit field with 128 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00257">257</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac623a569c28935fbedd3a8ed27ae0696"></a><!-- doxytag: member="rs_types.rsh::ulong3" ref="ac623a569c28935fbedd3a8ed27ae0696" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ulong type. Provides three ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00262">262</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3029c54b8e1779a1ddbdfe875432d137"></a><!-- doxytag: member="rs_types.rsh::ulong4" ref="a3029c54b8e1779a1ddbdfe875432d137" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ulong type. Provides four ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00267">267</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9e58a7bf060b7a5fbf6a401d3020adca"></a><!-- doxytag: member="rs_types.rsh::ushort" ref="a9e58a7bf060b7a5fbf6a401d3020adca" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>16 bit unsigned integer type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00086">86</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a24a9d78cfc32475e2c6eb1cdec239bf2"></a><!-- doxytag: member="rs_types.rsh::ushort2" ref="a24a9d78cfc32475e2c6eb1cdec239bf2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ushort type. Provides two ushort fields packed into a single 32 bit field with 32 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00225">225</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab78391445785d2ca0276392a9c97fcba"></a><!-- doxytag: member="rs_types.rsh::ushort3" ref="ab78391445785d2ca0276392a9c97fcba" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ushort type. Provides three ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00230">230</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a77a09fa01d7fc721bbc44c32aac2d487"></a><!-- doxytag: member="rs_types.rsh::ushort4" ref="a77a09fa01d7fc721bbc44c32aac2d487" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vector version of the basic ushort type. Provides four ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00235">235</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+
+</div>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh_source.html b/docs/html/reference/renderscript/rs__types_8rsh_source.html
new file mode 100644
index 0000000..96c55e1
--- /dev/null
+++ b/docs/html/reference/renderscript/rs__types_8rsh_source.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_types.rsh Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ <li><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">/src/ics-mr1/frameworks/base/libs/rs/scriptc/rs_types.rsh</div> </div>
+</div>
+<div class="contents">
+<a href="rs__types_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
+<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
+<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
+<a name="l00007"></a>00007 <span class="comment"> *</span>
+<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
+<a name="l00009"></a>00009 <span class="comment"> *</span>
+<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
+<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
+<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
+<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
+<a name="l00015"></a>00015 <span class="comment"> */</span>
+<a name="l00016"></a>00016
+<a name="l00041"></a>00041 <span class="preprocessor">#ifndef __RS_TYPES_RSH__</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TYPES_RSH__</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a>00044 <span class="preprocessor">#define M_PI 3.14159265358979323846264338327950288f </span><span class="comment">/* pi */</span>
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 <span class="preprocessor">#include "stdbool.h"</span>
+<a name="l00050"></a><a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">00050</a> <span class="keyword">typedef</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a>;
+<a name="l00054"></a><a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">00054</a> <span class="keyword">typedef</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a>;
+<a name="l00058"></a><a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">00058</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>;
+<a name="l00062"></a><a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">00062</a> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a>;
+<a name="l00066"></a><a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">00066</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>;
+<a name="l00070"></a><a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">00070</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a>;
+<a name="l00074"></a><a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">00074</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>;
+<a name="l00078"></a><a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">00078</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a>;
+<a name="l00082"></a><a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">00082</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>;
+<a name="l00086"></a><a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">00086</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>;
+<a name="l00090"></a><a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">00090</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>;
+<a name="l00094"></a><a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">00094</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>;
+<a name="l00098"></a><a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">00098</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a>;
+<a name="l00102"></a><a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">00102</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a>;
+<a name="l00103"></a>00103
+<a name="l00109"></a><a class="code" href="structrs__element.html">00109</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__element.html" title="Opaque handle to a Renderscript element.">rs_element</a>;
+<a name="l00115"></a><a class="code" href="structrs__type.html">00115</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__type.html" title="Opaque handle to a Renderscript type.">rs_type</a>;
+<a name="l00121"></a><a class="code" href="structrs__allocation.html">00121</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>;
+<a name="l00127"></a><a class="code" href="structrs__sampler.html">00127</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a>;
+<a name="l00133"></a><a class="code" href="structrs__script.html">00133</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__script.html" title="Opaque handle to a Renderscript script object.">rs_script</a>;
+<a name="l00139"></a><a class="code" href="structrs__mesh.html">00139</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a>;
+<a name="l00145"></a><a class="code" href="structrs__program__fragment.html">00145</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a>;
+<a name="l00151"></a><a class="code" href="structrs__program__vertex.html">00151</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a>;
+<a name="l00157"></a><a class="code" href="structrs__program__raster.html">00157</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a>;
+<a name="l00163"></a><a class="code" href="structrs__program__store.html">00163</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a>;
+<a name="l00169"></a><a class="code" href="structrs__font.html">00169</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a>;
+<a name="l00170"></a>00170
+<a name="l00176"></a><a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">00176</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((ext_vector_type(2)));
+<a name="l00181"></a><a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">00181</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((ext_vector_type(3)));
+<a name="l00187"></a><a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">00187</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((ext_vector_type(4)));
+<a name="l00188"></a>00188
+<a name="l00193"></a><a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">00193</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a> __attribute__((ext_vector_type(2)));
+<a name="l00198"></a><a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">00198</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a> __attribute__((ext_vector_type(3)));
+<a name="l00203"></a><a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">00203</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a> __attribute__((ext_vector_type(4)));
+<a name="l00204"></a>00204
+<a name="l00209"></a><a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">00209</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> __attribute__((ext_vector_type(2)));
+<a name="l00214"></a><a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">00214</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a> __attribute__((ext_vector_type(3)));
+<a name="l00219"></a><a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">00219</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((ext_vector_type(4)));
+<a name="l00220"></a>00220
+<a name="l00225"></a><a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">00225</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> __attribute__((ext_vector_type(2)));
+<a name="l00230"></a><a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">00230</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a> __attribute__((ext_vector_type(3)));
+<a name="l00235"></a><a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">00235</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a> __attribute__((ext_vector_type(4)));
+<a name="l00236"></a>00236
+<a name="l00241"></a><a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">00241</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> __attribute__((ext_vector_type(2)));
+<a name="l00246"></a><a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">00246</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a> __attribute__((ext_vector_type(3)));
+<a name="l00251"></a><a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">00251</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a> __attribute__((ext_vector_type(4)));
+<a name="l00252"></a>00252
+<a name="l00257"></a><a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">00257</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a> __attribute__((ext_vector_type(2)));
+<a name="l00262"></a><a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">00262</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a> __attribute__((ext_vector_type(3)));
+<a name="l00267"></a><a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">00267</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a> __attribute__((ext_vector_type(4)));
+<a name="l00268"></a>00268
+<a name="l00273"></a><a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">00273</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> __attribute__((ext_vector_type(2)));
+<a name="l00278"></a><a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">00278</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a> __attribute__((ext_vector_type(3)));
+<a name="l00283"></a><a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">00283</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a> __attribute__((ext_vector_type(4)));
+<a name="l00284"></a>00284
+<a name="l00289"></a><a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">00289</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> __attribute__((ext_vector_type(2)));
+<a name="l00294"></a><a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">00294</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a> __attribute__((ext_vector_type(3)));
+<a name="l00299"></a><a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">00299</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a> __attribute__((ext_vector_type(4)));
+<a name="l00300"></a>00300
+<a name="l00305"></a><a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">00305</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> __attribute__((ext_vector_type(2)));
+<a name="l00310"></a><a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">00310</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a> __attribute__((ext_vector_type(3)));
+<a name="l00315"></a><a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">00315</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a> __attribute__((ext_vector_type(4)));
+<a name="l00316"></a>00316
+<a name="l00321"></a><a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">00321</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a> __attribute__((ext_vector_type(2)));
+<a name="l00326"></a><a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">00326</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a> __attribute__((ext_vector_type(3)));
+<a name="l00331"></a><a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">00331</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a> __attribute__((ext_vector_type(4)));
+<a name="l00332"></a>00332
+<a name="l00339"></a><a class="code" href="structrs__matrix4x4.html">00339</a> typedef struct {
+<a name="l00340"></a>00340 <span class="keywordtype">float</span> m[16];
+<a name="l00341"></a>00341 } <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>;
+<a name="l00348"></a><a class="code" href="structrs__matrix3x3.html">00348</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00349"></a>00349 <span class="keywordtype">float</span> m[9];
+<a name="l00350"></a>00350 } <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a>;
+<a name="l00357"></a><a class="code" href="structrs__matrix2x2.html">00357</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00358"></a>00358 <span class="keywordtype">float</span> m[4];
+<a name="l00359"></a>00359 } <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a>;
+<a name="l00360"></a>00360
+<a name="l00364"></a><a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">00364</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a>;
+<a name="l00365"></a>00365
+<a name="l00366"></a>00366 <span class="preprocessor">#define RS_PACKED __attribute__((packed, aligned(4)))</span>
+<a name="l00367"></a>00367 <span class="preprocessor"></span><span class="preprocessor">#define NULL ((const void *)0)</span>
+<a name="l00368"></a>00368 <span class="preprocessor"></span>
+<a name="l00369"></a>00369 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
+<a name="l00370"></a>00370 <span class="preprocessor"></span>
+<a name="l00374"></a>00374 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00375"></a>00375 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
+<a name="l00376"></a>00376 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
+<a name="l00377"></a>00377 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
+<a name="l00378"></a>00378 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
+<a name="l00379"></a>00379 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
+<a name="l00380"></a>00380 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
+<a name="l00381"></a>00381 } rs_allocation_cubemap_face;
+<a name="l00382"></a>00382
+<a name="l00389"></a>00389 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00390"></a>00390 RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
+<a name="l00391"></a>00391 RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
+<a name="l00392"></a>00392 RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
+<a name="l00393"></a>00393 RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
+<a name="l00394"></a>00394 RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
+<a name="l00395"></a>00395 } rs_allocation_usage_type;
+<a name="l00396"></a>00396
+<a name="l00397"></a>00397 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
+<a name="l00398"></a>00398 <span class="preprocessor"></span>
+<a name="l00399"></a>00399 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__allocation.html b/docs/html/reference/renderscript/structrs__allocation.html
new file mode 100644
index 0000000..b166fdd
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__allocation.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_allocation Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_allocation Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_allocation" -->
+<p>Opaque handle to a Renderscript allocation.
+ <a href="structrs__allocation.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript allocation. </p>
+<p>See: android.renderscript.Allocation </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00121">121</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__element.html b/docs/html/reference/renderscript/structrs__element.html
new file mode 100644
index 0000000..79cd090
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__element.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_element Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_element Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_element" -->
+<p>Opaque handle to a Renderscript element.
+ <a href="structrs__element.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript element. </p>
+<p>See: android.renderscript.Element </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00109">109</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__font.html b/docs/html/reference/renderscript/structrs__font.html
new file mode 100644
index 0000000..83eb649
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__font.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_font Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_font Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_font" -->
+<p>Opaque handle to a Renderscript font object.
+ <a href="structrs__font.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript font object. </p>
+<p>See: android.renderscript.Font </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00169">169</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix2x2.html b/docs/html/reference/renderscript/structrs__matrix2x2.html
new file mode 100644
index 0000000..8789066d
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__matrix2x2.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_matrix2x2 Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_matrix2x2 Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_matrix2x2" -->
+<p>2x2 float matrix
+ <a href="structrs__matrix2x2.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>2x2 float matrix </p>
+<p>Native holder for RS matrix. Elements are stored in the array at the location [row*2 + col] </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00357">357</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix3x3.html b/docs/html/reference/renderscript/structrs__matrix3x3.html
new file mode 100644
index 0000000..2b036df
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__matrix3x3.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_matrix3x3 Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_matrix3x3 Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_matrix3x3" -->
+<p>3x3 float matrix
+ <a href="structrs__matrix3x3.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>3x3 float matrix </p>
+<p>Native holder for RS matrix. Elements are stored in the array at the location [row*3 + col] </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00348">348</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix4x4.html b/docs/html/reference/renderscript/structrs__matrix4x4.html
new file mode 100644
index 0000000..c696108
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__matrix4x4.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_matrix4x4 Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_matrix4x4 Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_matrix4x4" -->
+<p>4x4 float matrix
+ <a href="structrs__matrix4x4.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>4x4 float matrix </p>
+<p>Native holder for RS matrix. Elements are stored in the array at the location [row*4 + col] </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00339">339</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__mesh.html b/docs/html/reference/renderscript/structrs__mesh.html
new file mode 100644
index 0000000..6f58a54
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__mesh.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_mesh Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_mesh Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_mesh" -->
+<p>Opaque handle to a Renderscript mesh object.
+ <a href="structrs__mesh.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript mesh object. </p>
+<p>See: android.renderscript.Mesh </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00139">139</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__program__fragment.html b/docs/html/reference/renderscript/structrs__program__fragment.html
new file mode 100644
index 0000000..ed8eae7
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__program__fragment.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_program_fragment Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_program_fragment Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_program_fragment" -->
+<p>Opaque handle to a Renderscript ProgramFragment object.
+ <a href="structrs__program__fragment.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript ProgramFragment object. </p>
+<p>See: android.renderscript.ProgramFragment </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00145">145</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__program__raster.html b/docs/html/reference/renderscript/structrs__program__raster.html
new file mode 100644
index 0000000..a914854
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__program__raster.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_program_raster Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_program_raster Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_program_raster" -->
+<p>Opaque handle to a Renderscript ProgramRaster object.
+ <a href="structrs__program__raster.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript ProgramRaster object. </p>
+<p>See: android.renderscript.ProgramRaster </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00157">157</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__program__store.html b/docs/html/reference/renderscript/structrs__program__store.html
new file mode 100644
index 0000000..6ecfece
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__program__store.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_program_store Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_program_store Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_program_store" -->
+<p>Opaque handle to a Renderscript ProgramStore object.
+ <a href="structrs__program__store.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript ProgramStore object. </p>
+<p>See: android.renderscript.ProgramStore </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00163">163</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__program__vertex.html b/docs/html/reference/renderscript/structrs__program__vertex.html
new file mode 100644
index 0000000..2b145a3
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__program__vertex.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_program_vertex Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_program_vertex Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_program_vertex" -->
+<p>Opaque handle to a Renderscript ProgramVertex object.
+ <a href="structrs__program__vertex.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript ProgramVertex object. </p>
+<p>See: android.renderscript.ProgramVertex </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00151">151</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__sampler.html b/docs/html/reference/renderscript/structrs__sampler.html
new file mode 100644
index 0000000..58ea0de
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__sampler.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_sampler Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_sampler Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_sampler" -->
+<p>Opaque handle to a Renderscript sampler object.
+ <a href="structrs__sampler.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript sampler object. </p>
+<p>See: android.renderscript.Sampler </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00127">127</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__script.html b/docs/html/reference/renderscript/structrs__script.html
new file mode 100644
index 0000000..0946635
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__script.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_script Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_script Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_script" -->
+<p>Opaque handle to a Renderscript script object.
+ <a href="structrs__script.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript script object. </p>
+<p>See: android.renderscript.ScriptC </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00133">133</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__script__call.html b/docs/html/reference/renderscript/structrs__script__call.html
new file mode 100644
index 0000000..9ba0681
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__script__call.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_script_call Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_script_call Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_script_call" --><hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
+
+<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00088">88</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__tm.html b/docs/html/reference/renderscript/structrs__tm.html
new file mode 100644
index 0000000..80f8fe9
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__tm.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_tm Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">rs_tm Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_tm" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1590aa8850370a4712da801edb8da9e"></a><!-- doxytag: member="rs_tm::tm_sec" ref="ae1590aa8850370a4712da801edb8da9e" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">tm_sec</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">seconds <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd4bd6ccf0d1f20859ecaecf850ce85b"></a><!-- doxytag: member="rs_tm::tm_min" ref="abd4bd6ccf0d1f20859ecaecf850ce85b" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">tm_min</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">minutes <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb46962bc20f8724567981adc3711b5a"></a><!-- doxytag: member="rs_tm::tm_hour" ref="afb46962bc20f8724567981adc3711b5a" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">tm_hour</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">hours <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac87e43828f05bf62d0c770889b81ff15"></a><!-- doxytag: member="rs_tm::tm_mday" ref="ac87e43828f05bf62d0c770889b81ff15" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">tm_mday</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the month <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34a5466d376e405f343ed4e1592d7832"></a><!-- doxytag: member="rs_tm::tm_mon" ref="a34a5466d376e405f343ed4e1592d7832" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">tm_mon</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">month <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e582a615a448949969a0982d8a62d2"></a><!-- doxytag: member="rs_tm::tm_year" ref="a74e582a615a448949969a0982d8a62d2" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">tm_year</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">year <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d40217d3cd15b51e0093db1810426e4"></a><!-- doxytag: member="rs_tm::tm_wday" ref="a4d40217d3cd15b51e0093db1810426e4" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">tm_wday</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the week <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a589eab24c4d79f05f0b3601162ed34d0"></a><!-- doxytag: member="rs_tm::tm_yday" ref="a589eab24c4d79f05f0b3601162ed34d0" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">tm_yday</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the year <br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cffdd224d2ea30a079a86ef1e41e111"></a><!-- doxytag: member="rs_tm::tm_isdst" ref="a8cffdd224d2ea30a079a86ef1e41e111" args="" -->
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">tm_isdst</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">daylight savings time <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Data structure for broken-down time components.</p>
+<p>tm_sec - Seconds after the minute. This ranges from 0 to 59, but possibly up to 60 for leap seconds. tm_min - Minutes after the hour. This ranges from 0 to 59. tm_hour - Hours past midnight. This ranges from 0 to 23. tm_mday - Day of the month. This ranges from 1 to 31. tm_mon - Months since January. This ranges from 0 to 11. tm_year - Years since 1900. tm_wday - Days since Sunday. This ranges from 0 to 6. tm_yday - Days since January 1. This ranges from 0 to 365. tm_isdst - Flag to indicate whether daylight saving time is in effect. The value is positive if it is in effect, zero if it is not, and negative if the information is not available. </p>
+
+<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00049">49</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/structrs__type.html b/docs/html/reference/renderscript/structrs__type.html
new file mode 100644
index 0000000..f8eec3e
--- /dev/null
+++ b/docs/html/reference/renderscript/structrs__type.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+
+<title>rs_type Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<!-- Generated by Doxygen 1.7.5.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Overview</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="header">
+ <div class="headertitle">
+<div class="title">rs_type Struct Reference</div> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="rs_type" -->
+<p>Opaque handle to a Renderscript type.
+ <a href="structrs__type.html#details">More...</a></p>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Opaque handle to a Renderscript type. </p>
+<p>See: android.renderscript.Type </p>
+
+<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00115">115</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/src/ics-mr1/frameworks/base/libs/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
+</ul>
+</div>
+
+</body>
+</html>
diff --git a/docs/html/reference/renderscript/tab_a.png b/docs/html/reference/renderscript/tab_a.png
new file mode 100644
index 0000000..2d99ef2
--- /dev/null
+++ b/docs/html/reference/renderscript/tab_a.png
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_b.png b/docs/html/reference/renderscript/tab_b.png
new file mode 100644
index 0000000..b2c3d2b
--- /dev/null
+++ b/docs/html/reference/renderscript/tab_b.png
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_h.png b/docs/html/reference/renderscript/tab_h.png
new file mode 100644
index 0000000..c11f48f
--- /dev/null
+++ b/docs/html/reference/renderscript/tab_h.png
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_s.png b/docs/html/reference/renderscript/tab_s.png
new file mode 100644
index 0000000..978943ac
--- /dev/null
+++ b/docs/html/reference/renderscript/tab_s.png
Binary files differ
diff --git a/docs/html/reference/renderscript/tabs.css b/docs/html/reference/renderscript/tabs.css
new file mode 100644
index 0000000..2192056
--- /dev/null
+++ b/docs/html/reference/renderscript/tabs.css
@@ -0,0 +1,59 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/docs/html/sdk/android-4.0.3.jd b/docs/html/sdk/android-4.0.3.jd
index c17a422..1fca8df 100644
--- a/docs/html/sdk/android-4.0.3.jd
+++ b/docs/html/sdk/android-4.0.3.jd
@@ -58,12 +58,34 @@
environment, refer to the "Installed Packages" listing in the Android SDK
Manager.</p>
+<p class="caution"><strong>Important:</strong> To download the new Android
+4.0.x system components from the Android SDK Manager, you must first update the
+SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+the Android 4.0.x system components will not be available for download.</p>
<div class="toggle-content opened" style="padding-left:1em;">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png"
class="toggle-content-img" alt="" />
+ Android {@sdkPlatformVersion}, Revision 2</a> <em>(January 2012)</em>
+ </a></p>
+
+ <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Maintenance release. SDK Tools r14 or higher is required.
+</dt>
+</dl>
+
+ </div>
+</div>
+
+<div class="toggle-content closed" style="padding-left:1em;">
+
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png"
+class="toggle-content-img" alt="" />
Android {@sdkPlatformVersion}, Revision 1</a> <em>(December 2011)</em>
</a></p>
@@ -71,17 +93,12 @@
<dl>
<dt>Initial release. SDK Tools r14 or higher is required.
- <p class="caution"><strong>Important:</strong> To download the new Android
- 4.0.x system components from the Android SDK Manager, you must first update the
- SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
- the Android 4.0.x system components will not be available for download.</p>
</dt>
</dl>
</div>
</div>
-
<h2 id="api">API Overview</h2>
<p>The sections below provide a technical overview of new APIs in Android 4.0.3.</p>
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 5cac42a..dcda67d 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -130,8 +130,7 @@
*/
public Canvas(Bitmap bitmap) {
if (!bitmap.isMutable()) {
- throw new IllegalStateException(
- "Immutable bitmap passed to Canvas constructor");
+ throw new IllegalStateException("Immutable bitmap passed to Canvas constructor");
}
throwIfRecycled(bitmap);
mNativeCanvas = initRaster(bitmap.ni());
@@ -361,8 +360,8 @@
/**
* Helper version of saveLayer() that takes 4 values rather than a RectF.
*/
- public int saveLayer(float left, float top, float right, float bottom,
- Paint paint, int saveFlags) {
+ public int saveLayer(float left, float top, float right, float bottom, Paint paint,
+ int saveFlags) {
return native_saveLayer(mNativeCanvas, left, top, right, bottom,
paint != null ? paint.mNativePaint : 0,
saveFlags);
@@ -392,8 +391,8 @@
/**
* Helper for saveLayerAlpha() that takes 4 values instead of a RectF.
*/
- public int saveLayerAlpha(float left, float top, float right, float bottom,
- int alpha, int saveFlags) {
+ public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
+ int saveFlags) {
return native_saveLayerAlpha(mNativeCanvas, left, top, right, bottom,
alpha, saveFlags);
}
@@ -496,9 +495,15 @@
/**
* Completely replace the current matrix with the specified matrix. If the
* matrix parameter is null, then the current matrix is reset to identity.
+ *
+ * <strong>Note:</strong> it is recommended to use {@link #concat(Matrix)},
+ * {@link #scale(float, float)}, {@link #translate(float, float)} and
+ * {@link #rotate(float)} instead of this method.
*
* @param matrix The matrix to replace the current matrix with. If it is
* null, set the current matrix to identity.
+ *
+ * @see #concat(Matrix)
*/
public void setMatrix(Matrix matrix) {
native_setMatrix(mNativeCanvas,
@@ -509,6 +514,7 @@
* Return, in ctm, the current transformation matrix. This does not alter
* the matrix in the canvas, but just returns a copy of it.
*/
+ @Deprecated
public void getMatrix(Matrix ctm) {
native_getCTM(mNativeCanvas, ctm.native_instance);
}
@@ -517,8 +523,10 @@
* Return a new matrix with a copy of the canvas' current transformation
* matrix.
*/
+ @Deprecated
public final Matrix getMatrix() {
Matrix m = new Matrix();
+ //noinspection deprecation
getMatrix(m);
return m;
}
@@ -531,9 +539,8 @@
* @return true if the resulting clip is non-empty
*/
public boolean clipRect(RectF rect, Region.Op op) {
- return native_clipRect(mNativeCanvas,
- rect.left, rect.top, rect.right, rect.bottom,
- op.nativeInt);
+ return native_clipRect(mNativeCanvas, rect.left, rect.top, rect.right, rect.bottom,
+ op.nativeInt);
}
/**
@@ -545,9 +552,8 @@
* @return true if the resulting clip is non-empty
*/
public boolean clipRect(Rect rect, Region.Op op) {
- return native_clipRect(mNativeCanvas,
- rect.left, rect.top, rect.right, rect.bottom,
- op.nativeInt);
+ return native_clipRect(mNativeCanvas, rect.left, rect.top, rect.right, rect.bottom,
+ op.nativeInt);
}
/**
@@ -583,10 +589,8 @@
* @param op How the clip is modified
* @return true if the resulting clip is non-empty
*/
- public boolean clipRect(float left, float top, float right, float bottom,
- Region.Op op) {
- return native_clipRect(mNativeCanvas, left, top, right, bottom,
- op.nativeInt);
+ public boolean clipRect(float left, float top, float right, float bottom, Region.Op op) {
+ return native_clipRect(mNativeCanvas, left, top, right, bottom, op.nativeInt);
}
/**
@@ -602,9 +606,8 @@
* clip
* @return true if the resulting clip is non-empty
*/
- public native boolean clipRect(float left, float top,
- float right, float bottom);
-
+ public native boolean clipRect(float left, float top, float right, float bottom);
+
/**
* Intersect the current clip with the specified rectangle, which is
* expressed in local coordinates.
@@ -618,9 +621,8 @@
* clip
* @return true if the resulting clip is non-empty
*/
- public native boolean clipRect(int left, int top,
- int right, int bottom);
-
+ public native boolean clipRect(int left, int top, int right, int bottom);
+
/**
* Modify the current clip with the specified path.
*
@@ -753,8 +755,7 @@
* @return true if the rect (transformed by the canvas' matrix)
* does not intersect with the canvas' clip
*/
- public boolean quickReject(float left, float top, float right, float bottom,
- EdgeType type) {
+ public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) {
return native_quickReject(mNativeCanvas, left, top, right, bottom,
type.nativeInt);
}
@@ -854,8 +855,7 @@
* "points" that are drawn is really (count >> 1).
* @param paint The paint used to draw the points
*/
- public native void drawPoints(float[] pts, int offset, int count,
- Paint paint);
+ public native void drawPoints(float[] pts, int offset, int count, Paint paint);
/**
* Helper for drawPoints() that assumes you want to draw the entire array
@@ -878,10 +878,8 @@
* @param startY The y-coordinate of the start point of the line
* @param paint The paint used to draw the line
*/
- public void drawLine(float startX, float startY, float stopX, float stopY,
- Paint paint) {
- native_drawLine(mNativeCanvas, startX, startY, stopX, stopY,
- paint.mNativePaint);
+ public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {
+ native_drawLine(mNativeCanvas, startX, startY, stopX, stopY, paint.mNativePaint);
}
/**
@@ -899,8 +897,7 @@
* (count >> 2).
* @param paint The paint used to draw the points
*/
- public native void drawLines(float[] pts, int offset, int count,
- Paint paint);
+ public native void drawLines(float[] pts, int offset, int count, Paint paint);
public void drawLines(float[] pts, Paint paint) {
drawLines(pts, 0, pts.length, paint);
@@ -939,10 +936,8 @@
* @param bottom The bottom side of the rectangle to be drawn
* @param paint The paint used to draw the rect
*/
- public void drawRect(float left, float top, float right, float bottom,
- Paint paint) {
- native_drawRect(mNativeCanvas, left, top, right, bottom,
- paint.mNativePaint);
+ public void drawRect(float left, float top, float right, float bottom, Paint paint) {
+ native_drawRect(mNativeCanvas, left, top, right, bottom, paint.mNativePaint);
}
/**
@@ -969,8 +964,7 @@
* @param paint The paint used to draw the circle
*/
public void drawCircle(float cx, float cy, float radius, Paint paint) {
- native_drawCircle(mNativeCanvas, cx, cy, radius,
- paint.mNativePaint);
+ native_drawCircle(mNativeCanvas, cx, cy, radius, paint.mNativePaint);
}
/**
@@ -996,8 +990,8 @@
close it if it is being stroked. This will draw a wedge
* @param paint The paint used to draw the arc
*/
- public void drawArc(RectF oval, float startAngle, float sweepAngle,
- boolean useCenter, Paint paint) {
+ public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,
+ Paint paint) {
if (oval == null) {
throw new NullPointerException();
}
@@ -1035,8 +1029,7 @@
private static void throwIfRecycled(Bitmap bitmap) {
if (bitmap.isRecycled()) {
- throw new RuntimeException(
- "Canvas: trying to use a recycled bitmap " + bitmap);
+ throw new RuntimeException("Canvas: trying to use a recycled bitmap " + bitmap);
}
}
@@ -1077,8 +1070,7 @@
public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) {
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), left, top,
- paint != null ? paint.mNativePaint : 0, mDensity, mScreenDensity,
- bitmap.mDensity);
+ paint != null ? paint.mNativePaint : 0, mDensity, mScreenDensity, bitmap.mDensity);
}
/**
@@ -1109,8 +1101,7 @@
}
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
- paint != null ? paint.mNativePaint : 0,
- mScreenDensity, bitmap.mDensity);
+ paint != null ? paint.mNativePaint : 0, mScreenDensity, bitmap.mDensity);
}
/**
@@ -1141,8 +1132,7 @@
}
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
- paint != null ? paint.mNativePaint : 0,
- mScreenDensity, bitmap.mDensity);
+ paint != null ? paint.mNativePaint : 0, mScreenDensity, bitmap.mDensity);
}
/**
@@ -1164,9 +1154,8 @@
* be 0xFF for every pixel).
* @param paint May be null. The paint used to draw the bitmap
*/
- public void drawBitmap(int[] colors, int offset, int stride, float x,
- float y, int width, int height, boolean hasAlpha,
- Paint paint) {
+ public void drawBitmap(int[] colors, int offset, int stride, float x, float y,
+ int width, int height, boolean hasAlpha, Paint paint) {
// check for valid input
if (width < 0) {
throw new IllegalArgumentException("width must be >= 0");
@@ -1195,8 +1184,7 @@
/** Legacy version of drawBitmap(int[] colors, ...) that took ints for x,y
*/
public void drawBitmap(int[] colors, int offset, int stride, int x, int y,
- int width, int height, boolean hasAlpha,
- Paint paint) {
+ int width, int height, boolean hasAlpha, Paint paint) {
// call through to the common float version
drawBitmap(colors, offset, stride, (float)x, (float)y, width, height,
hasAlpha, paint);
@@ -1250,8 +1238,7 @@
* @param paint May be null. The paint used to draw the bitmap
*/
public void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight,
- float[] verts, int vertOffset,
- int[] colors, int colorOffset, Paint paint) {
+ float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint) {
if ((meshWidth | meshHeight | vertOffset | colorOffset) < 0) {
throw new ArrayIndexOutOfBoundsException();
}
@@ -1269,7 +1256,7 @@
verts, vertOffset, colors, colorOffset,
paint != null ? paint.mNativePaint : 0);
}
-
+
public enum VertexMode {
TRIANGLES(0),
TRIANGLE_STRIP(1),
@@ -1315,12 +1302,9 @@
* @param indexCount number of entries in the indices array (if not null).
* @param paint Specifies the shader to use if the texs array is non-null.
*/
- public void drawVertices(VertexMode mode, int vertexCount,
- float[] verts, int vertOffset,
- float[] texs, int texOffset,
- int[] colors, int colorOffset,
- short[] indices, int indexOffset,
- int indexCount, Paint paint) {
+ public void drawVertices(VertexMode mode, int vertexCount, float[] verts, int vertOffset,
+ float[] texs, int texOffset, int[] colors, int colorOffset,
+ short[] indices, int indexOffset, int indexCount, Paint paint) {
checkRange(verts.length, vertOffset, vertexCount);
if (texs != null) {
checkRange(texs.length, texOffset, vertexCount);
@@ -1345,8 +1329,7 @@
* @param y The y-coordinate of the origin of the text being drawn
* @param paint The paint used for the text (e.g. color, size, style)
*/
- public void drawText(char[] text, int index, int count, float x, float y,
- Paint paint) {
+ public void drawText(char[] text, int index, int count, float x, float y, Paint paint) {
if ((index | count | (index + count) |
(text.length - index - count)) < 0) {
throw new IndexOutOfBoundsException();
@@ -1380,8 +1363,7 @@
* @param y The y-coordinate of the origin of the text being drawn
* @param paint The paint used for the text (e.g. color, size, style)
*/
- public void drawText(String text, int start, int end, float x, float y,
- Paint paint) {
+ public void drawText(String text, int start, int end, float x, float y, Paint paint) {
if ((start | end | (end - start) | (text.length() - end)) < 0) {
throw new IndexOutOfBoundsException();
}
@@ -1402,8 +1384,7 @@
* @param y The y-coordinate of origin for where to draw the text
* @param paint The paint used for the text (e.g. color, size, style)
*/
- public void drawText(CharSequence text, int start, int end, float x,
- float y, Paint paint) {
+ public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) {
if (text instanceof String || text instanceof SpannedString ||
text instanceof SpannableString) {
native_drawText(mNativeCanvas, text.toString(), start, end, x, y,
@@ -1441,9 +1422,8 @@
* @param paint the paint
* @hide
*/
- public void drawTextRun(char[] text, int index, int count,
- int contextIndex, int contextCount, float x, float y, int dir,
- Paint paint) {
+ public void drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount,
+ float x, float y, int dir, Paint paint) {
if (text == null) {
throw new NullPointerException("text is null");
@@ -1479,9 +1459,8 @@
* @param paint the paint
* @hide
*/
- public void drawTextRun(CharSequence text, int start, int end,
- int contextStart, int contextEnd, float x, float y, int dir,
- Paint paint) {
+ public void drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd,
+ float x, float y, int dir, Paint paint) {
if (text == null) {
throw new NullPointerException("text is null");
@@ -1527,8 +1506,8 @@
* character
* @param paint The paint used for the text (e.g. color, size, style)
*/
- public void drawPosText(char[] text, int index, int count, float[] pos,
- Paint paint) {
+ @Deprecated
+ public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {
if (index < 0 || index + count > text.length || count*2 > pos.length) {
throw new IndexOutOfBoundsException();
}
@@ -1547,6 +1526,7 @@
* @param pos Array of [x,y] positions, used to position each character
* @param paint The paint used for the text (e.g. color, size, style)
*/
+ @Deprecated
public void drawPosText(String text, float[] pos, Paint paint) {
if (text.length()*2 > pos.length) {
throw new ArrayIndexOutOfBoundsException();
@@ -1568,7 +1548,7 @@
* @param paint The paint used for the text (e.g. color, size, style)
*/
public void drawTextOnPath(char[] text, int index, int count, Path path,
- float hOffset, float vOffset, Paint paint) {
+ float hOffset, float vOffset, Paint paint) {
if (index < 0 || index + count > text.length) {
throw new ArrayIndexOutOfBoundsException();
}
@@ -1590,12 +1570,10 @@
* the text
* @param paint The paint used for the text (e.g. color, size, style)
*/
- public void drawTextOnPath(String text, Path path, float hOffset,
- float vOffset, Paint paint) {
+ public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {
if (text.length() > 0) {
- native_drawTextOnPath(mNativeCanvas, text, path.ni(),
- hOffset, vOffset, paint.mBidiFlags,
- paint.mNativePaint);
+ native_drawTextOnPath(mNativeCanvas, text, path.ni(), hOffset, vOffset,
+ paint.mBidiFlags, paint.mNativePaint);
}
}
@@ -1618,8 +1596,7 @@
save();
translate(dst.left, dst.top);
if (picture.getWidth() > 0 && picture.getHeight() > 0) {
- scale(dst.width() / picture.getWidth(),
- dst.height() / picture.getHeight());
+ scale(dst.width() / picture.getWidth(), dst.height() / picture.getHeight());
}
drawPicture(picture);
restore();
@@ -1632,8 +1609,8 @@
save();
translate(dst.left, dst.top);
if (picture.getWidth() > 0 && picture.getHeight() > 0) {
- scale((float)dst.width() / picture.getWidth(),
- (float)dst.height() / picture.getHeight());
+ scale((float) dst.width() / picture.getWidth(),
+ (float) dst.height() / picture.getHeight());
}
drawPicture(picture);
restore();
diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java
index 6b44ed7..1f64539 100644
--- a/graphics/java/android/graphics/DrawFilter.java
+++ b/graphics/java/android/graphics/DrawFilter.java
@@ -28,7 +28,11 @@
/* package */ int mNativeInt; // pointer to native object
protected void finalize() throws Throwable {
- nativeDestructor(mNativeInt);
+ try {
+ nativeDestructor(mNativeInt);
+ } finally {
+ super.finalize();
+ }
}
private static native void nativeDestructor(int nativeDrawFilter);
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index ce42612..c97785e 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -528,6 +528,7 @@
*
* @return true if the lineartext bit is set in the paint's flags
*/
+ @Deprecated
public final boolean isLinearText() {
return (getFlags() & LINEAR_TEXT_FLAG) != 0;
}
@@ -538,6 +539,7 @@
* @param linearText true to set the linearText bit in the paint's flags,
* false to clear it.
*/
+ @Deprecated
public native void setLinearText(boolean linearText);
/**
@@ -2142,8 +2144,6 @@
private static native void native_setTextAlign(int native_object,
int align);
- private static native float native_getFontMetrics(int native_paint,
- FontMetrics metrics);
private static native int native_getTextWidths(int native_object,
char[] text, int index, int count, float[] widths);
private static native int native_getTextWidths(int native_object,
diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java
index bbb2dbf..997141d 100644
--- a/graphics/java/android/graphics/Picture.java
+++ b/graphics/java/android/graphics/Picture.java
@@ -32,10 +32,15 @@
private Canvas mRecordingCanvas;
private final int mNativePicture;
+ /**
+ * @hide
+ */
+ public final boolean createdFromStream;
+
private static final int WORKING_STREAM_STORAGE = 16 * 1024;
public Picture() {
- this(nativeConstructor(0));
+ this(nativeConstructor(0), false);
}
/**
@@ -44,7 +49,7 @@
* changes will not be reflected in this picture.
*/
public Picture(Picture src) {
- this(nativeConstructor(src != null ? src.mNativePicture : 0));
+ this(nativeConstructor(src != null ? src.mNativePicture : 0), false);
}
/**
@@ -101,15 +106,24 @@
/**
* Create a new picture (already recorded) from the data in the stream. This
* data was generated by a previous call to writeToStream().
+ *
+ * <strong>Note:</strong> a picture created from an input stream cannot be
+ * replayed on a hardware accelerated canvas.
+ *
+ * @see #writeToStream(java.io.OutputStream)
*/
public static Picture createFromStream(InputStream stream) {
- return new Picture(
- nativeCreateFromStream(stream, new byte[WORKING_STREAM_STORAGE]));
+ return new Picture(nativeCreateFromStream(stream, new byte[WORKING_STREAM_STORAGE]), true);
}
/**
* Write the picture contents to a stream. The data can be used to recreate
* the picture in this or another process by calling createFromStream.
+ *
+ * <strong>Note:</strong> a picture created from an input stream cannot be
+ * replayed on a hardware accelerated canvas.
+ *
+ * @see #createFromStream(java.io.InputStream)
*/
public void writeToStream(OutputStream stream) {
// do explicit check before calling the native method
@@ -123,18 +137,23 @@
}
protected void finalize() throws Throwable {
- nativeDestructor(mNativePicture);
+ try {
+ nativeDestructor(mNativePicture);
+ } finally {
+ super.finalize();
+ }
}
-
- /*package*/ final int ni() {
+
+ final int ni() {
return mNativePicture;
}
- private Picture(int nativePicture) {
+ private Picture(int nativePicture, boolean fromStream) {
if (nativePicture == 0) {
throw new RuntimeException();
}
mNativePicture = nativePicture;
+ createdFromStream = fromStream;
}
// return empty picture if src is 0, or a copy of the native src
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index 84a8f1c..756e91d 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -22,7 +22,6 @@
#include <media/IAudioFlinger.h>
#include <media/IAudioRecord.h>
-#include <media/AudioTrack.h>
#include <utils/RefBase.h>
#include <utils/Errors.h>
@@ -34,6 +33,8 @@
namespace android {
+class audio_track_cblk_t;
+
// ----------------------------------------------------------------------------
class AudioRecord
@@ -67,7 +68,7 @@
};
uint32_t flags;
int channelCount;
- int format;
+ audio_format_t format;
size_t frameCount;
size_t size;
union {
@@ -111,7 +112,7 @@
static status_t getMinFrameCount(int* frameCount,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
int channelCount);
/* Constructs an uninitialized AudioRecord. No connection with
@@ -150,7 +151,7 @@
AudioRecord(int inputSource,
uint32_t sampleRate = 0,
- int format = 0,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channelMask = AUDIO_CHANNEL_IN_MONO,
int frameCount = 0,
uint32_t flags = 0,
@@ -176,7 +177,7 @@
* */
status_t set(int inputSource = 0,
uint32_t sampleRate = 0,
- int format = 0,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channelMask = AUDIO_CHANNEL_IN_MONO,
int frameCount = 0,
uint32_t flags = 0,
@@ -202,7 +203,7 @@
/* getters, see constructor */
- int format() const;
+ audio_format_t format() const;
int channelCount() const;
int channels() const;
uint32_t frameCount() const;
@@ -348,7 +349,7 @@
bool processAudioBuffer(const sp<ClientRecordThread>& thread);
status_t openRecord_l(uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -364,7 +365,7 @@
uint32_t mFrameCount;
audio_track_cblk_t* mCblk;
- uint32_t mFormat;
+ audio_format_t mFormat;
uint8_t mChannelCount;
uint8_t mInputSource;
uint8_t mReserved[2];
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 2ba083d..c6368fb 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -87,9 +87,15 @@
static status_t getOutputFrameCount(int* frameCount, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
static status_t getOutputLatency(uint32_t* latency, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT);
+ // DEPRECATED
+ static status_t getOutputSamplingRate(int* samplingRate, int stream = AUDIO_STREAM_DEFAULT);
+
+ // DEPRECATED
+ static status_t getOutputFrameCount(int* frameCount, int stream = AUDIO_STREAM_DEFAULT);
+
static bool routedToA2dpOutput(audio_stream_type_t streamType);
- static status_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount,
+ static status_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount,
size_t* buffSize);
static status_t setVoiceVolume(float volume);
@@ -128,7 +134,7 @@
class OutputDescriptor {
public:
OutputDescriptor()
- : samplingRate(0), format(0), channels(0), frameCount(0), latency(0) {}
+ : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channels(0), frameCount(0), latency(0) {}
uint32_t samplingRate;
int32_t format;
@@ -143,12 +149,11 @@
static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address);
static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address);
static status_t setPhoneState(audio_mode_t state);
- static status_t setRingerMode(uint32_t mode, uint32_t mask);
static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
static audio_io_handle_t getOutput(audio_stream_type_t stream,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = AUDIO_CHANNEL_OUT_STEREO,
audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_INDIRECT);
static status_t startOutput(audio_io_handle_t output,
@@ -160,7 +165,7 @@
static void releaseOutput(audio_io_handle_t output);
static audio_io_handle_t getInput(int inputSource,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = AUDIO_CHANNEL_IN_MONO,
audio_in_acoustics_t acoustics = (audio_in_acoustics_t)0,
int sessionId = 0);
@@ -170,8 +175,12 @@
static status_t initStreamVolume(audio_stream_type_t stream,
int indexMin,
int indexMax);
- static status_t setStreamVolumeIndex(audio_stream_type_t stream, int index);
- static status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index);
+ static status_t setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device);
+ static status_t getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device);
static uint32_t getStrategyForStream(audio_stream_type_t stream);
static uint32_t getDevicesForStream(audio_stream_type_t stream);
@@ -233,7 +242,7 @@
static size_t gInBuffSize;
// previous parameters for recording buffer size queries
static uint32_t gPrevInSamplingRate;
- static int gPrevInFormat;
+ static audio_format_t gPrevInFormat;
static int gPrevInChannelCount;
static sp<IAudioPolicyService> gAudioPolicyService;
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index 6e4a9f5..98abfbd 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -153,6 +153,18 @@
int notificationFrames = 0,
int sessionId = 0);
+ // DEPRECATED
+ explicit AudioTrack( int streamType,
+ uint32_t sampleRate = 0,
+ int format = AUDIO_FORMAT_DEFAULT,
+ int channelMask = 0,
+ int frameCount = 0,
+ uint32_t flags = 0,
+ callback_t cbf = 0,
+ void* user = 0,
+ int notificationFrames = 0,
+ int sessionId = 0);
+
/* Creates an audio track and registers it with AudioFlinger. With this constructor,
* the PCM data to be rendered by AudioTrack is passed in a shared memory buffer
* identified by the argument sharedBuffer. This prototype is for static buffer playback.
@@ -399,7 +411,7 @@
*/
enum {
- NO_MORE_BUFFERS = 0x80000001,
+ NO_MORE_BUFFERS = 0x80000001, // same name in AudioFlinger.h, ok to be different value
STOPPED = 1
};
diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h
index 3999479..7c0d886 100644
--- a/include/media/IAudioFlinger.h
+++ b/include/media/IAudioFlinger.h
@@ -48,7 +48,7 @@
pid_t pid,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -61,7 +61,7 @@
pid_t pid,
int input,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -73,7 +73,7 @@
*/
virtual uint32_t sampleRate(int output) const = 0;
virtual int channelCount(int output) const = 0;
- virtual uint32_t format(int output) const = 0;
+ virtual audio_format_t format(int output) const = 0;
virtual size_t frameCount(int output) const = 0;
virtual uint32_t latency(int output) const = 0;
@@ -109,11 +109,11 @@
virtual void registerClient(const sp<IAudioFlingerClient>& client) = 0;
// retrieve the audio recording buffer size
- virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) = 0;
+ virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount) = 0;
virtual int openOutput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
uint32_t flags) = 0;
@@ -124,7 +124,7 @@
virtual int openInput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t acoustics) = 0;
virtual status_t closeInput(int input) = 0;
diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h
index ed64c77..07d17c5 100644
--- a/include/media/IAudioPolicyService.h
+++ b/include/media/IAudioPolicyService.h
@@ -46,12 +46,11 @@
virtual audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device,
const char *device_address) = 0;
virtual status_t setPhoneState(audio_mode_t state) = 0;
- virtual status_t setRingerMode(uint32_t mode, uint32_t mask) = 0;
virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) = 0;
virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) = 0;
virtual audio_io_handle_t getOutput(audio_stream_type_t stream,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_INDIRECT) = 0;
virtual status_t startOutput(audio_io_handle_t output,
@@ -63,7 +62,7 @@
virtual void releaseOutput(audio_io_handle_t output) = 0;
virtual audio_io_handle_t getInput(int inputSource,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
audio_in_acoustics_t acoustics = (audio_in_acoustics_t)0,
int audioSession = 0) = 0;
@@ -73,8 +72,12 @@
virtual status_t initStreamVolume(audio_stream_type_t stream,
int indexMin,
int indexMax) = 0;
- virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index) = 0;
- virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index) = 0;
+ virtual status_t setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device) = 0;
+ virtual status_t getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device) = 0;
virtual uint32_t getStrategyForStream(audio_stream_type_t stream) = 0;
virtual uint32_t getDevicesForStream(audio_stream_type_t stream) = 0;
virtual audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc) = 0;
diff --git a/include/media/thread_init.h b/include/media/thread_init.h
deleted file mode 100644
index 2feac86..0000000
--- a/include/media/thread_init.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef THREAD_INIT_H
-#define THREAD_INIT_H
-
-bool InitializeForThread();
-void UninitializeForThread();
-
-#endif /* THREAD_INIT_H*/
-
diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h
index 33a92cd..ffc546e 100644
--- a/include/private/media/AudioTrackShared.h
+++ b/include/private/media/AudioTrackShared.h
@@ -71,10 +71,13 @@
uint32_t loopStart;
uint32_t loopEnd;
int loopCount;
- volatile union {
- uint16_t volume[2];
- uint32_t volumeLR;
- };
+
+ // Channel volumes are fixed point U4.12, so 0x1000 means 1.0.
+ // Left channel is in [0:15], right channel is in [16:31].
+ // Always read and write the combined pair atomically.
+ // For AudioTrack only, not used by AudioRecord.
+ uint32_t volumeLR;
+
uint32_t sampleRate;
// NOTE: audio_track_cblk_t::frameSize is not equal to AudioTrack::frameSize() for
// 8 bit PCM data: in this case, mCblk->frameSize is based on a sample size of
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 656a384..824ab4f 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -60,6 +60,7 @@
"DrawLines",
"DrawPoints",
"DrawText",
+ "DrawPosText",
"ResetShader",
"SetupShader",
"ResetColorFilter",
@@ -482,6 +483,15 @@
text.text(), text.length(), count, x, y, paint, length);
}
break;
+ case DrawPosText: {
+ getText(&text);
+ int count = getInt();
+ int positionsCount = 0;
+ float* positions = getFloats(positionsCount);
+ SkPaint* paint = getPaint();
+ ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
+ text.text(), text.length(), count, paint);
+ }
case ResetShader: {
ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
}
@@ -844,6 +854,17 @@
renderer.drawText(text.text(), text.length(), count, x, y, paint, length);
}
break;
+ case DrawPosText: {
+ getText(&text);
+ int count = getInt();
+ int positionsCount = 0;
+ float* positions = getFloats(positionsCount);
+ SkPaint* paint = getPaint();
+ DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent,
+ OP_NAMES[op], text.text(), text.length(), count, paint);
+ renderer.drawPosText(text.text(), text.length(), count, positions, paint);
+ }
+ break;
case ResetShader: {
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
renderer.resetShader();
@@ -1216,6 +1237,17 @@
addFloat(length < 0.0f ? paint->measureText(text, bytesCount) : length);
}
+void DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count,
+ const float* positions, SkPaint* paint) {
+ if (count <= 0) return;
+ addOp(DisplayList::DrawPosText);
+ addText(text, bytesCount);
+ addInt(count);
+ addFloats(positions, count * 2);
+ paint->setAntiAlias(true);
+ addPaint(paint);
+}
+
void DisplayListRenderer::resetShader() {
addOp(DisplayList::ResetShader);
}
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 5d922db..422184e 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -96,6 +96,7 @@
DrawLines,
DrawPoints,
DrawText,
+ DrawPosText,
ResetShader,
SetupShader,
ResetColorFilter,
@@ -291,6 +292,8 @@
virtual void drawPoints(float* points, int count, SkPaint* paint);
virtual void drawText(const char* text, int bytesCount, int count, float x, float y,
SkPaint* paint, float length = 1.0f);
+ virtual void drawPosText(const char* text, int bytesCount, int count, const float* positions,
+ SkPaint* paint);
virtual void resetShader();
virtual void setupShader(SkiaShader* shader);
@@ -419,7 +422,7 @@
return;
}
- SkPaint* paintCopy = mPaintMap.valueFor(paint);
+ SkPaint* paintCopy = mPaintMap.valueFor(paint);
if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) {
paintCopy = new SkPaint(*paint);
mPaintMap.add(paint, paintCopy);
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 790c143..74efda2 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -94,7 +94,8 @@
}
}
-void Font::measureCachedGlyph(CachedGlyphInfo *glyph, int x, int y, Rect *bounds) {
+void Font::measureCachedGlyph(CachedGlyphInfo *glyph, int x, int y,
+ uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) {
int nPenX = x + glyph->mBitmapLeft;
int nPenY = y + glyph->mBitmapTop;
@@ -115,7 +116,8 @@
}
}
-void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y) {
+void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
+ uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) {
int nPenX = x + glyph->mBitmapLeft;
int nPenY = y + glyph->mBitmapTop + glyph->mBitmapHeight;
@@ -133,8 +135,8 @@
nPenX, nPenY - height, u1, v1, glyph->mCachedTextureLine->mCacheTexture);
}
-void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
- uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH) {
+void Font::drawCachedGlyphBitmap(CachedGlyphInfo* glyph, int x, int y,
+ uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) {
int nPenX = x + glyph->mBitmapLeft;
int nPenY = y + glyph->mBitmapTop;
@@ -181,13 +183,19 @@
int numGlyphs, int x, int y, uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH) {
if (bitmap != NULL && bitmapW > 0 && bitmapH > 0) {
render(paint, text, start, len, numGlyphs, x, y, BITMAP, bitmap,
- bitmapW, bitmapH, NULL);
+ bitmapW, bitmapH, NULL, NULL);
} else {
render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, NULL,
- 0, 0, NULL);
+ 0, 0, NULL, NULL);
}
}
+void Font::render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+ int numGlyphs, int x, int y, const float* positions) {
+ render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, NULL,
+ 0, 0, NULL, positions);
+}
+
void Font::measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, Rect *bounds) {
if (bounds == NULL) {
@@ -195,62 +203,95 @@
return;
}
bounds->set(1e6, -1e6, -1e6, 1e6);
- render(paint, text, start, len, numGlyphs, 0, 0, MEASURE, NULL, 0, 0, bounds);
+ render(paint, text, start, len, numGlyphs, 0, 0, MEASURE, NULL, 0, 0, bounds, NULL);
}
#define SkAutoKern_AdjustF(prev, next) (((next) - (prev) + 32) >> 6 << 16)
void Font::render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
- uint32_t bitmapW, uint32_t bitmapH,Rect *bounds) {
+ uint32_t bitmapW, uint32_t bitmapH, Rect *bounds, const float* positions) {
if (numGlyphs == 0 || text == NULL || len == 0) {
return;
}
- float penX = x;
- int penY = y;
- int glyphsLeft = 1;
- if (numGlyphs > 0) {
- glyphsLeft = numGlyphs;
- }
-
- SkFixed prevRsbDelta = 0;
- penX += 0.5f;
+ int glyphsCount = 0;
text += start;
- while (glyphsLeft > 0) {
- glyph_t glyph = GET_GLYPH(text);
+ static RenderGlyph gRenderGlyph[] = {
+ &android::uirenderer::Font::drawCachedGlyph,
+ &android::uirenderer::Font::drawCachedGlyphBitmap,
+ &android::uirenderer::Font::measureCachedGlyph
+ };
+ RenderGlyph render = gRenderGlyph[mode];
- // Reached the end of the string
- if (IS_END_OF_STRING(glyph)) {
- break;
- }
+ if (positions == NULL) {
+ SkFixed prevRsbDelta = 0;
- CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
- penX += SkFixedToFloat(SkAutoKern_AdjustF(prevRsbDelta, cachedGlyph->mLsbDelta));
- prevRsbDelta = cachedGlyph->mRsbDelta;
+ float penX = x;
+ int penY = y;
- // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
- if (cachedGlyph->mIsValid) {
- switch(mode) {
- case FRAMEBUFFER:
- drawCachedGlyph(cachedGlyph, (int) floorf(penX), penY);
- break;
- case BITMAP:
- drawCachedGlyph(cachedGlyph, (int) floorf(penX), penY, bitmap, bitmapW, bitmapH);
- break;
- case MEASURE:
- measureCachedGlyph(cachedGlyph, (int) floorf(penX), penY, bounds);
+ penX += 0.5f;
+
+ while (glyphsCount < numGlyphs) {
+ glyph_t glyph = GET_GLYPH(text);
+
+ // Reached the end of the string
+ if (IS_END_OF_STRING(glyph)) {
break;
}
+
+ CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
+ penX += SkFixedToFloat(SkAutoKern_AdjustF(prevRsbDelta, cachedGlyph->mLsbDelta));
+ prevRsbDelta = cachedGlyph->mRsbDelta;
+
+ // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
+ if (cachedGlyph->mIsValid) {
+ (*this.*render)(cachedGlyph, (int) floorf(penX), penY,
+ bitmap, bitmapW, bitmapH, bounds, positions);
+ }
+
+ penX += SkFixedToFloat(cachedGlyph->mAdvanceX);
+
+ glyphsCount++;
}
+ } else {
+ const SkPaint::Align align = paint->getTextAlign();
- penX += SkFixedToFloat(cachedGlyph->mAdvanceX);
+ // This is for renderPosText()
+ while (glyphsCount < numGlyphs) {
+ glyph_t glyph = GET_GLYPH(text);
- // If we were given a specific number of glyphs, decrement
- if (numGlyphs > 0) {
- glyphsLeft--;
+ // Reached the end of the string
+ if (IS_END_OF_STRING(glyph)) {
+ break;
+ }
+
+ CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
+
+ // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
+ if (cachedGlyph->mIsValid) {
+ int penX = x + positions[(glyphsCount << 1)];
+ int penY = y + positions[(glyphsCount << 1) + 1];
+
+ switch (align) {
+ case SkPaint::kRight_Align:
+ penX -= SkFixedToFloat(cachedGlyph->mAdvanceX);
+ penY -= SkFixedToFloat(cachedGlyph->mAdvanceY);
+ break;
+ case SkPaint::kCenter_Align:
+ penX -= SkFixedToFloat(cachedGlyph->mAdvanceX >> 1);
+ penY -= SkFixedToFloat(cachedGlyph->mAdvanceY >> 1);
+ default:
+ break;
+ }
+
+ (*this.*render)(cachedGlyph, penX, penY,
+ bitmap, bitmapW, bitmapH, bounds, positions);
+ }
+
+ glyphsCount++;
}
}
}
@@ -866,21 +907,15 @@
return image;
}
-bool FontRenderer::renderText(SkPaint* paint, const Rect* clip, const char *text,
- uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, Rect* bounds) {
+void FontRenderer::initRender(const Rect* clip, Rect* bounds) {
checkInit();
- if (!mCurrentFont) {
- ALOGE("No font set");
- return false;
- }
-
mDrawn = false;
mBounds = bounds;
mClip = clip;
+}
- mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y);
-
+void FontRenderer::finishRender() {
mBounds = NULL;
mClip = NULL;
@@ -888,6 +923,33 @@
issueDrawCommand();
mCurrentQuadIndex = 0;
}
+}
+
+bool FontRenderer::renderText(SkPaint* paint, const Rect* clip, const char *text,
+ uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, Rect* bounds) {
+ if (!mCurrentFont) {
+ ALOGE("No font set");
+ return false;
+ }
+
+ initRender(clip, bounds);
+ mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y);
+ finishRender();
+
+ return mDrawn;
+}
+
+bool FontRenderer::renderPosText(SkPaint* paint, const Rect* clip, const char *text,
+ uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y,
+ const float* positions, Rect* bounds) {
+ if (!mCurrentFont) {
+ ALOGE("No font set");
+ return false;
+ }
+
+ initRender(clip, bounds);
+ mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y, positions);
+ finishRender();
return mDrawn;
}
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 005cdde..b767be5 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -151,6 +151,10 @@
void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
int numGlyphs, int x, int y, uint8_t *bitmap = NULL,
uint32_t bitmapW = 0, uint32_t bitmapH = 0);
+
+ void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+ int numGlyphs, int x, int y, const float* positions);
+
/**
* Creates a new font associated with the specified font state.
*/
@@ -160,6 +164,8 @@
protected:
friend class FontRenderer;
+ typedef void (Font::*RenderGlyph)(CachedGlyphInfo*, int, int, uint8_t*,
+ uint32_t, uint32_t, Rect*, const float*);
enum RenderMode {
FRAMEBUFFER,
@@ -169,7 +175,7 @@
void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
- uint32_t bitmapW, uint32_t bitmapH, Rect *bounds);
+ uint32_t bitmapW, uint32_t bitmapH, Rect *bounds, const float* positions);
void measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, Rect *bounds);
@@ -183,11 +189,17 @@
void invalidateTextureCache(CacheTextureLine *cacheLine = NULL);
CachedGlyphInfo* cacheGlyph(SkPaint* paint, glyph_t glyph);
- void updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, CachedGlyphInfo *glyph);
- void measureCachedGlyph(CachedGlyphInfo *glyph, int x, int y, Rect *bounds);
- void drawCachedGlyph(CachedGlyphInfo *glyph, int x, int y);
- void drawCachedGlyph(CachedGlyphInfo *glyph, int x, int y,
- uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH);
+ void updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, CachedGlyphInfo* glyph);
+
+ void measureCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
+ uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH,
+ Rect* bounds, const float* pos);
+ void drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
+ uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH,
+ Rect* bounds, const float* pos);
+ void drawCachedGlyphBitmap(CachedGlyphInfo* glyph, int x, int y,
+ uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH,
+ Rect* bounds, const float* pos);
CachedGlyphInfo* getCachedGlyph(SkPaint* paint, glyph_t textUnit);
@@ -226,8 +238,12 @@
}
void setFont(SkPaint* paint, uint32_t fontId, float fontSize);
+ // bounds is an out parameter
bool renderText(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
uint32_t len, int numGlyphs, int x, int y, Rect* bounds);
+ // bounds is an out parameter
+ bool renderPosText(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
+ uint32_t len, int numGlyphs, int x, int y, const float* positions, Rect* bounds);
struct DropShadow {
DropShadow() { };
@@ -297,6 +313,8 @@
void initVertexArrayBuffers();
void checkInit();
+ void initRender(const Rect* clip, Rect* bounds);
+ void finishRender();
String16 mLatinPrecache;
void precacheLatin(SkPaint* paint);
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 12ed205..786a4f1 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2082,14 +2082,83 @@
}
}
-void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
- float x, float y, SkPaint* paint, float length) {
- if (text == NULL || count == 0) {
+void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
+ const float* positions, SkPaint* paint) {
+ if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
+ (paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
return;
}
- if (mSnapshot->isIgnored()) return;
- // NOTE: AA and glyph id encoding are set in DisplayListRenderer.cpp
+ // NOTE: Skia does not support perspective transform on drawPosText yet
+ if (!mSnapshot->transform->isSimple()) {
+ return;
+ }
+
+ float x = 0.0f;
+ float y = 0.0f;
+ const bool pureTranslate = mSnapshot->transform->isPureTranslate();
+ if (pureTranslate) {
+ x = (int) floorf(x + mSnapshot->transform->getTranslateX() + 0.5f);
+ y = (int) floorf(y + mSnapshot->transform->getTranslateY() + 0.5f);
+ }
+
+ FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(paint);
+ fontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()),
+ paint->getTextSize());
+
+ int alpha;
+ SkXfermode::Mode mode;
+ getAlphaAndMode(paint, &alpha, &mode);
+
+ // Pick the appropriate texture filtering
+ bool linearFilter = mSnapshot->transform->changesBounds();
+ if (pureTranslate && !linearFilter) {
+ linearFilter = fabs(y - (int) y) > 0.0f || fabs(x - (int) x) > 0.0f;
+ }
+
+ mCaches.activeTexture(0);
+ setupDraw();
+ setupDrawDirtyRegionsDisabled();
+ setupDrawWithTexture(true);
+ setupDrawAlpha8Color(paint->getColor(), alpha);
+ setupDrawColorFilter();
+ setupDrawShader();
+ setupDrawBlending(true, mode);
+ setupDrawProgram();
+ setupDrawModelView(x, y, x, y, pureTranslate, true);
+ setupDrawTexture(fontRenderer.getTexture(linearFilter));
+ setupDrawPureColorUniforms();
+ setupDrawColorFilterUniforms();
+ setupDrawShaderUniforms(pureTranslate);
+
+ const Rect* clip = pureTranslate ? mSnapshot->clipRect : &mSnapshot->getLocalClip();
+ Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
+
+#if RENDER_LAYERS_AS_REGIONS
+ bool hasActiveLayer = hasLayer();
+#else
+ bool hasActiveLayer = false;
+#endif
+
+ if (fontRenderer.renderPosText(paint, clip, text, 0, bytesCount, count, x, y,
+ positions, hasActiveLayer ? &bounds : NULL)) {
+#if RENDER_LAYERS_AS_REGIONS
+ if (hasActiveLayer) {
+ if (!pureTranslate) {
+ mSnapshot->transform->mapRect(bounds);
+ }
+ dirtyLayerUnchecked(bounds, getRegion());
+ }
+#endif
+ }
+}
+
+void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
+ float x, float y, SkPaint* paint, float length) {
+ if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
+ (paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
+ return;
+ }
switch (paint->getTextAlign()) {
case SkPaint::kCenter_Align:
@@ -2120,10 +2189,11 @@
y = (int) floorf(y + mSnapshot->transform->getTranslateY() + 0.5f);
}
- FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(paint);
#if DEBUG_GLYPHS
ALOGD("OpenGLRenderer drawText() with FontID=%d", SkTypeface::UniqueID(paint->getTypeface()));
#endif
+
+ FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(paint);
fontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()),
paint->getTextSize());
@@ -2165,10 +2235,6 @@
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
}
- if (paint->getAlpha() == 0 && paint->getXfermode() == NULL) {
- return;
- }
-
// Pick the appropriate texture filtering
bool linearFilter = mSnapshot->transform->changesBounds();
if (pureTranslate && !linearFilter) {
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 019e9b2..a9cda47 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -124,6 +124,8 @@
virtual void drawPoints(float* points, int count, SkPaint* paint);
virtual void drawText(const char* text, int bytesCount, int count, float x, float y,
SkPaint* paint, float length = -1.0f);
+ virtual void drawPosText(const char* text, int bytesCount, int count, const float* positions,
+ SkPaint* paint);
virtual void resetShader();
virtual void setupShader(SkiaShader* shader);
diff --git a/libs/rs/scriptc/rs_allocation.rsh b/libs/rs/scriptc/rs_allocation.rsh
index 1cb3a99..9ec03bf 100644
--- a/libs/rs/scriptc/rs_allocation.rsh
+++ b/libs/rs/scriptc/rs_allocation.rsh
@@ -28,13 +28,13 @@
*
* To use Renderscript, you need to utilize the Renderscript runtime APIs documented here
* as well as the Android framework APIs for Renderscript.
- * For documentation on the Android framework APIs, see the <a href=
+ * For documentation on the Android framework APIs, see the <a target="_parent" href=
* "http://developer.android.com/reference/android/renderscript/package-summary.html">
* android.renderscript</a> package reference.
* For more information on how to develop with Renderscript and how the runtime and
- * Android framework APIs interact, see the <a href=
+ * Android framework APIs interact, see the <a target="_parent" href=
* "http://developer.android.com/guide/topics/renderscript/index.html">Renderscript
- * developer guide</a> and the <a href=
+ * developer guide</a> and the <a target="_parent" href=
* "http://developer.android.com/resources/samples/RenderScript/index.html">
* Renderscript samples</a>.
*/
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 72876d7..2eafd68 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -110,7 +110,7 @@
private static final int SENDMSG_QUEUE = 2;
// AudioHandler message.whats
- private static final int MSG_SET_SYSTEM_VOLUME = 0;
+ private static final int MSG_SET_DEVICE_VOLUME = 0;
private static final int MSG_PERSIST_VOLUME = 1;
private static final int MSG_PERSIST_RINGER_MODE = 3;
private static final int MSG_PERSIST_VIBRATE_SETTING = 4;
@@ -124,6 +124,7 @@
private static final int MSG_BT_HEADSET_CNCT_FAILED = 12;
private static final int MSG_RCDISPLAY_CLEAR = 13;
private static final int MSG_RCDISPLAY_UPDATE = 14;
+ private static final int MSG_SET_ALL_VOLUMES = 15;
// flags for MSG_PERSIST_VOLUME indicating if current and/or last audible volume should be
@@ -329,6 +330,7 @@
// Keyguard manager proxy
private KeyguardManager mKeyguardManager;
+
///////////////////////////////////////////////////////////////////////////
// Construction
///////////////////////////////////////////////////////////////////////////
@@ -431,12 +433,17 @@
// Correct stream index values for streams with aliases
for (int i = 0; i < numStreamTypes; i++) {
+ int device = getDeviceForStream(i);
if (STREAM_VOLUME_ALIAS[i] != i) {
- int index = rescaleIndex(streams[i].mIndex, STREAM_VOLUME_ALIAS[i], i);
- streams[i].mIndex = streams[i].getValidIndex(index);
- setStreamVolumeIndex(i, index);
- index = rescaleIndex(streams[i].mLastAudibleIndex, STREAM_VOLUME_ALIAS[i], i);
- streams[i].mLastAudibleIndex = streams[i].getValidIndex(index);
+ int index = rescaleIndex(streams[i].getIndex(device, false /* lastAudible */),
+ STREAM_VOLUME_ALIAS[i],
+ i);
+ streams[i].mIndex.put(device, streams[i].getValidIndex(index));
+ streams[i].applyDeviceVolume(device);
+ index = rescaleIndex(streams[i].getIndex(device, true /* lastAudible */),
+ STREAM_VOLUME_ALIAS[i],
+ i);
+ streams[i].mLastAudibleIndex.put(device, streams[i].getValidIndex(index));
}
}
}
@@ -488,10 +495,6 @@
restoreMediaButtonReceiver();
}
- private void setStreamVolumeIndex(int stream, int index) {
- AudioSystem.setStreamVolumeIndex(stream, (index + 5)/10);
- }
-
private int rescaleIndex(int index, int srcStream, int dstStream) {
return (index * mStreamStates[dstStream].getMaxIndex() + mStreamStates[srcStream].getMaxIndex() / 2) / mStreamStates[srcStream].getMaxIndex();
}
@@ -535,7 +538,11 @@
// checkForRingerModeChange() in place of STREAM_RING or STREAM_NOTIFICATION)
int streamTypeAlias = STREAM_VOLUME_ALIAS[streamType];
VolumeStreamState streamState = mStreamStates[streamTypeAlias];
- final int oldIndex = (streamState.muteCount() != 0) ? streamState.mLastAudibleIndex : streamState.mIndex;
+
+ final int device = getDeviceForStream(streamTypeAlias);
+ // get last audible index if stream is muted, current index otherwise
+ final int oldIndex = streamState.getIndex(device,
+ (streamState.muteCount() != 0) /* lastAudible */);
boolean adjustVolume = true;
// If either the client forces allowing ringer modes for this adjustment,
@@ -564,32 +571,32 @@
if (STREAM_VOLUME_ALIAS[i] == streamTypeAlias) {
VolumeStreamState s = mStreamStates[i];
- s.adjustLastAudibleIndex(direction);
+ s.adjustLastAudibleIndex(direction, device);
// Post a persist volume msg
sendMsg(mAudioHandler,
MSG_PERSIST_VOLUME,
SENDMSG_REPLACE,
PERSIST_LAST_AUDIBLE,
- 0,
+ device,
s,
PERSIST_DELAY);
}
}
}
- index = streamState.mLastAudibleIndex;
+ index = streamState.getIndex(device, true /* lastAudible */);
} else {
- if (adjustVolume && streamState.adjustIndex(direction)) {
+ if (adjustVolume && streamState.adjustIndex(direction, device)) {
// Post message to set system volume (it in turn will post a message
// to persist). Do not change volume if stream is muted.
sendMsg(mAudioHandler,
- MSG_SET_SYSTEM_VOLUME,
+ MSG_SET_DEVICE_VOLUME,
SENDMSG_NOOP,
- 0,
+ device,
0,
streamState,
0);
}
- index = streamState.mIndex;
+ index = streamState.getIndex(device, false /* lastAudible */);
}
sendVolumeUpdate(streamType, oldIndex, index, flags);
@@ -600,7 +607,10 @@
ensureValidStreamType(streamType);
VolumeStreamState streamState = mStreamStates[STREAM_VOLUME_ALIAS[streamType]];
- final int oldIndex = (streamState.muteCount() != 0) ? streamState.mLastAudibleIndex : streamState.mIndex;
+ final int device = getDeviceForStream(streamType);
+ // get last audible index if stream is muted, current index otherwise
+ final int oldIndex = streamState.getIndex(device,
+ (streamState.muteCount() != 0) /* lastAudible */);
// setting ring or notifications volume to 0 on voice capable devices enters silent mode
if (mVoiceCapable && (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
@@ -610,7 +620,11 @@
newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1
? AudioManager.RINGER_MODE_VIBRATE
: AudioManager.RINGER_MODE_SILENT;
- setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, false, true);
+ setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType],
+ index,
+ device,
+ false,
+ true);
} else {
newRingerMode = AudioManager.RINGER_MODE_NORMAL;
}
@@ -618,9 +632,10 @@
}
index = rescaleIndex(index * 10, streamType, STREAM_VOLUME_ALIAS[streamType]);
- setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, false, true);
-
- index = (streamState.muteCount() != 0) ? streamState.mLastAudibleIndex : streamState.mIndex;
+ setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, device, false, true);
+ // get last audible index if stream is muted, current index otherwise
+ index = streamState.getIndex(device,
+ (streamState.muteCount() != 0) /* lastAudible */);
sendVolumeUpdate(streamType, oldIndex, index, flags);
}
@@ -648,35 +663,40 @@
*
* @param streamType Type of the stream
* @param index Desired volume index of the stream
+ * @param device the device whose volume must be changed
* @param force If true, set the volume even if the desired volume is same
* as the current volume.
* @param lastAudible If true, stores new index as last audible one
*/
- private void setStreamVolumeInt(int streamType, int index, boolean force, boolean lastAudible) {
+ private void setStreamVolumeInt(int streamType,
+ int index,
+ int device,
+ boolean force,
+ boolean lastAudible) {
VolumeStreamState streamState = mStreamStates[streamType];
// If stream is muted, set last audible index only
if (streamState.muteCount() != 0) {
// Do not allow last audible index to be 0
if (index != 0) {
- streamState.setLastAudibleIndex(index);
+ streamState.setLastAudibleIndex(index, device);
// Post a persist volume msg
sendMsg(mAudioHandler,
MSG_PERSIST_VOLUME,
SENDMSG_REPLACE,
PERSIST_LAST_AUDIBLE,
- 0,
+ device,
streamState,
PERSIST_DELAY);
}
} else {
- if (streamState.setIndex(index, lastAudible) || force) {
+ if (streamState.setIndex(index, device, lastAudible) || force) {
// Post message to set system volume (it in turn will post a message
// to persist).
sendMsg(mAudioHandler,
- MSG_SET_SYSTEM_VOLUME,
+ MSG_SET_DEVICE_VOLUME,
SENDMSG_NOOP,
- 0,
+ device,
0,
streamState,
0);
@@ -708,7 +728,8 @@
/** @see AudioManager#getStreamVolume(int) */
public int getStreamVolume(int streamType) {
ensureValidStreamType(streamType);
- return (mStreamStates[streamType].mIndex + 5) / 10;
+ int device = getDeviceForStream(streamType);
+ return (mStreamStates[streamType].getIndex(device, false /* lastAudible */) + 5) / 10;
}
/** @see AudioManager#getStreamMaxVolume(int) */
@@ -721,7 +742,8 @@
/** Get last audible volume before stream was muted. */
public int getLastAudibleStreamVolume(int streamType) {
ensureValidStreamType(streamType);
- return (mStreamStates[streamType].mLastAudibleIndex + 5) / 10;
+ int device = getDeviceForStream(streamType);
+ return (mStreamStates[streamType].getIndex(device, true /* lastAudible */) + 5) / 10;
}
/** @see AudioManager#getRingerMode() */
@@ -764,9 +786,16 @@
// ring and notifications volume should never be 0 when not silenced
// on voice capable devices
if (mVoiceCapable &&
- STREAM_VOLUME_ALIAS[streamType] == AudioSystem.STREAM_RING &&
- mStreamStates[streamType].mLastAudibleIndex == 0) {
- mStreamStates[streamType].mLastAudibleIndex = 10;
+ STREAM_VOLUME_ALIAS[streamType] == AudioSystem.STREAM_RING) {
+
+ Set set = mStreamStates[streamType].mLastAudibleIndex.entrySet();
+ Iterator i = set.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry)i.next();
+ if ((Integer)entry.getValue() == 0) {
+ entry.setValue(10);
+ }
+ }
}
mStreamStates[streamType].mute(null, false);
mRingerModeMutedStreams &= ~(1 << streamType);
@@ -988,8 +1017,9 @@
}
}
int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
- int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].mIndex;
- setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, true, false);
+ int device = getDeviceForStream(streamType);
+ int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].getIndex(device, false);
+ setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, device, true, false);
}
return newModeOwnerPid;
}
@@ -1253,28 +1283,7 @@
for (int streamType = 0; streamType < numStreamTypes; streamType++) {
VolumeStreamState streamState = mStreamStates[streamType];
- String settingName = System.VOLUME_SETTINGS[STREAM_VOLUME_ALIAS[streamType]];
- String lastAudibleSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;
- int index = Settings.System.getInt(mContentResolver,
- settingName,
- AudioManager.DEFAULT_STREAM_VOLUME[streamType]);
- if (STREAM_VOLUME_ALIAS[streamType] != streamType) {
- index = rescaleIndex(index * 10, STREAM_VOLUME_ALIAS[streamType], streamType);
- } else {
- index *= 10;
- }
- streamState.mIndex = streamState.getValidIndex(index);
-
- index = (index + 5) / 10;
- index = Settings.System.getInt(mContentResolver,
- lastAudibleSettingName,
- (index > 0) ? index : AudioManager.DEFAULT_STREAM_VOLUME[streamType]);
- if (STREAM_VOLUME_ALIAS[streamType] != streamType) {
- index = rescaleIndex(index * 10, STREAM_VOLUME_ALIAS[streamType], streamType);
- } else {
- index *= 10;
- }
- streamState.mLastAudibleIndex = streamState.getValidIndex(index);
+ streamState.readSettings();
// unmute stream that was muted but is not affect by mute anymore
if (streamState.muteCount() != 0 && !isStreamAffectedByMute(streamType)) {
@@ -1286,7 +1295,7 @@
}
// apply stream volume
if (streamState.muteCount() == 0) {
- setStreamVolumeIndex(streamType, streamState.mIndex);
+ streamState.applyAllVolumes();
}
}
@@ -1877,6 +1886,22 @@
return false;
}
+ private int getDeviceForStream(int stream) {
+ int device = AudioSystem.getDevicesForStream(stream);
+ if ((device & (device - 1)) != 0) {
+ // Multiple device selection is either:
+ // - speaker + one other device: give priority to speaker in this case.
+ // - one A2DP device + another device: happens with duplicated output. In this case
+ // retain the device on the A2DP output as the other must not correspond to an active
+ // selection if not the speaker.
+ if ((device & AudioSystem.DEVICE_OUT_SPEAKER) != 0) {
+ device = AudioSystem.DEVICE_OUT_SPEAKER;
+ } else {
+ device &= AudioSystem.DEVICE_OUT_ALL_A2DP;
+ }
+ }
+ return device;
+ }
///////////////////////////////////////////////////////////////////////////
// Inner classes
@@ -1888,54 +1913,127 @@
private String mVolumeIndexSettingName;
private String mLastAudibleVolumeIndexSettingName;
private int mIndexMax;
- private int mIndex;
- private int mLastAudibleIndex;
- private ArrayList<VolumeDeathHandler> mDeathHandlers; //handles mute/solo requests client death
+ private final HashMap <Integer, Integer> mIndex = new HashMap <Integer, Integer>();
+ private final HashMap <Integer, Integer> mLastAudibleIndex =
+ new HashMap <Integer, Integer>();
+ private ArrayList<VolumeDeathHandler> mDeathHandlers; //handles mute/solo clients death
private VolumeStreamState(String settingName, int streamType) {
- setVolumeIndexSettingName(settingName);
+ mVolumeIndexSettingName = settingName;
+ mLastAudibleVolumeIndexSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;
mStreamType = streamType;
-
- final ContentResolver cr = mContentResolver;
mIndexMax = MAX_STREAM_VOLUME[streamType];
- mIndex = Settings.System.getInt(cr,
- mVolumeIndexSettingName,
- AudioManager.DEFAULT_STREAM_VOLUME[streamType]);
- mLastAudibleIndex = Settings.System.getInt(cr,
- mLastAudibleVolumeIndexSettingName,
- (mIndex > 0) ? mIndex : AudioManager.DEFAULT_STREAM_VOLUME[streamType]);
AudioSystem.initStreamVolume(streamType, 0, mIndexMax);
mIndexMax *= 10;
- mIndex = getValidIndex(10 * mIndex);
- mLastAudibleIndex = getValidIndex(10 * mLastAudibleIndex);
- setStreamVolumeIndex(streamType, mIndex);
+
+ readSettings();
+
+ applyAllVolumes();
+
mDeathHandlers = new ArrayList<VolumeDeathHandler>();
}
- public void setVolumeIndexSettingName(String settingName) {
- mVolumeIndexSettingName = settingName;
- mLastAudibleVolumeIndexSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;
+ public String getSettingNameForDevice(boolean lastAudible, int device) {
+ String name = lastAudible ?
+ mLastAudibleVolumeIndexSettingName :
+ mVolumeIndexSettingName;
+ String suffix = AudioSystem.getDeviceName(device);
+ if (suffix.isEmpty()) {
+ return name;
+ }
+ return name + "_" + suffix;
}
- public boolean adjustIndex(int deltaIndex) {
- return setIndex(mIndex + deltaIndex * 10, true);
+ public void readSettings() {
+ int index = Settings.System.getInt(mContentResolver,
+ mVolumeIndexSettingName,
+ AudioManager.DEFAULT_STREAM_VOLUME[mStreamType]);
+
+ mIndex.clear();
+ mIndex.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
+
+ index = Settings.System.getInt(mContentResolver,
+ mLastAudibleVolumeIndexSettingName,
+ (index > 0) ? index : AudioManager.DEFAULT_STREAM_VOLUME[mStreamType]);
+ mLastAudibleIndex.clear();
+ mLastAudibleIndex.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
+
+ int remainingDevices = AudioSystem.DEVICE_OUT_ALL;
+ for (int i = 0; remainingDevices != 0; i++) {
+ int device = (1 << i);
+ if ((device & remainingDevices) == 0) {
+ continue;
+ }
+ remainingDevices &= ~device;
+
+ // retrieve current volume for device
+ String name = getSettingNameForDevice(false, device);
+ index = Settings.System.getInt(mContentResolver, name, -1);
+ if (index == -1) {
+ continue;
+ }
+ mIndex.put(device, getValidIndex(10 * index));
+
+ // retrieve last audible volume for device
+ name = getSettingNameForDevice(true, device);
+ index = Settings.System.getInt(mContentResolver, name, -1);
+ mLastAudibleIndex.put(device, getValidIndex(10 * index));
+ }
}
- public boolean setIndex(int index, boolean lastAudible) {
- int oldIndex = mIndex;
- mIndex = getValidIndex(index);
+ public void applyDeviceVolume(int device) {
+ AudioSystem.setStreamVolumeIndex(mStreamType,
+ (getIndex(device, false /* lastAudible */) + 5)/10,
+ device);
+ }
- if (oldIndex != mIndex) {
+ public void applyAllVolumes() {
+ // apply default volume first: by convention this will reset all
+ // devices volumes in audio policy manager to the supplied value
+ AudioSystem.setStreamVolumeIndex(mStreamType,
+ (getIndex(AudioSystem.DEVICE_OUT_DEFAULT, false /* lastAudible */) + 5)/10,
+ AudioSystem.DEVICE_OUT_DEFAULT);
+ // then apply device specific volumes
+ Set set = mIndex.entrySet();
+ Iterator i = set.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry)i.next();
+ int device = ((Integer)entry.getKey()).intValue();
+ if (device != AudioSystem.DEVICE_OUT_DEFAULT) {
+ AudioSystem.setStreamVolumeIndex(mStreamType,
+ ((Integer)entry.getValue() + 5)/10,
+ device);
+ }
+ }
+ }
+
+ public boolean adjustIndex(int deltaIndex, int device) {
+ return setIndex(getIndex(device,
+ false /* lastAudible */) + deltaIndex * 10,
+ device,
+ true /* lastAudible */);
+ }
+
+ public boolean setIndex(int index, int device, boolean lastAudible) {
+ int oldIndex = getIndex(device, false /* lastAudible */);
+ index = getValidIndex(index);
+ mIndex.put(device, getValidIndex(index));
+
+ if (oldIndex != index) {
if (lastAudible) {
- mLastAudibleIndex = mIndex;
+ mLastAudibleIndex.put(device, index);
}
// Apply change to all streams using this one as alias
int numStreamTypes = AudioSystem.getNumStreamTypes();
for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
if (streamType != mStreamType && STREAM_VOLUME_ALIAS[streamType] == mStreamType) {
- mStreamStates[streamType].setIndex(rescaleIndex(mIndex, mStreamType, streamType), lastAudible);
+ mStreamStates[streamType].setIndex(rescaleIndex(index,
+ mStreamType,
+ streamType),
+ device,
+ lastAudible);
}
}
return true;
@@ -1944,12 +2042,29 @@
}
}
- public void setLastAudibleIndex(int index) {
- mLastAudibleIndex = getValidIndex(index);
+ public int getIndex(int device, boolean lastAudible) {
+ HashMap <Integer, Integer> indexes;
+ if (lastAudible) {
+ indexes = mLastAudibleIndex;
+ } else {
+ indexes = mIndex;
+ }
+ Integer index = indexes.get(device);
+ if (index == null) {
+ // there is always an entry for AudioSystem.DEVICE_OUT_DEFAULT
+ index = indexes.get(AudioSystem.DEVICE_OUT_DEFAULT);
+ }
+ return index.intValue();
}
- public void adjustLastAudibleIndex(int deltaIndex) {
- setLastAudibleIndex(mLastAudibleIndex + deltaIndex * 10);
+ public void setLastAudibleIndex(int index, int device) {
+ mLastAudibleIndex.put(device, getValidIndex(index));
+ }
+
+ public void adjustLastAudibleIndex(int deltaIndex, int device) {
+ setLastAudibleIndex(getIndex(device,
+ true /* lastAudible */) + deltaIndex * 10,
+ device);
}
public int getMaxIndex() {
@@ -1994,10 +2109,20 @@
mICallback.linkToDeath(this, 0);
}
mDeathHandlers.add(this);
- // If the stream is not yet muted by any client, set lvel to 0
+ // If the stream is not yet muted by any client, set level to 0
if (muteCount() == 0) {
- setIndex(0, false);
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, SENDMSG_NOOP, 0, 0,
+ Set set = mIndex.entrySet();
+ Iterator i = set.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry)i.next();
+ int device = ((Integer)entry.getKey()).intValue();
+ setIndex(0, device, false /* lastAudible */);
+ }
+ sendMsg(mAudioHandler,
+ MSG_SET_ALL_VOLUMES,
+ SENDMSG_NOOP,
+ 0,
+ 0,
VolumeStreamState.this, 0);
}
} catch (RemoteException e) {
@@ -2026,9 +2151,22 @@
// If the stream is not muted any more, restore it's volume if
// ringer mode allows it
if (!isStreamAffectedByRingerMode(mStreamType) ||
- getRingerMode() == AudioManager.RINGER_MODE_NORMAL) {
- setIndex(mLastAudibleIndex, false);
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, SENDMSG_NOOP, 0, 0,
+ mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
+ Set set = mIndex.entrySet();
+ Iterator i = set.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry)i.next();
+ int device = ((Integer)entry.getKey()).intValue();
+ setIndex(getIndex(device,
+ true /* lastAudible */),
+ device,
+ false /* lastAudible */);
+ }
+ sendMsg(mAudioHandler,
+ MSG_SET_ALL_VOLUMES,
+ SENDMSG_NOOP,
+ 0,
+ 0,
VolumeStreamState.this, 0);
}
}
@@ -2107,17 +2245,17 @@
/** Handles internal volume messages in separate volume thread. */
private class AudioHandler extends Handler {
- private void setSystemVolume(VolumeStreamState streamState) {
+ private void setDeviceVolume(VolumeStreamState streamState, int device) {
- // Adjust volume
- setStreamVolumeIndex(streamState.mStreamType, streamState.mIndex);
+ // Apply volume
+ streamState.applyDeviceVolume(device);
// Apply change to all streams using this one as alias
int numStreamTypes = AudioSystem.getNumStreamTypes();
for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
if (streamType != streamState.mStreamType &&
- STREAM_VOLUME_ALIAS[streamType] == streamState.mStreamType) {
- setStreamVolumeIndex(streamType, mStreamStates[streamType].mIndex);
+ STREAM_VOLUME_ALIAS[streamType] == streamState.mStreamType) {
+ mStreamStates[streamType].applyDeviceVolume(device);
}
}
@@ -2126,21 +2264,39 @@
MSG_PERSIST_VOLUME,
SENDMSG_REPLACE,
PERSIST_CURRENT|PERSIST_LAST_AUDIBLE,
- 0,
+ device,
streamState,
PERSIST_DELAY);
}
+ private void setAllVolumes(VolumeStreamState streamState) {
+
+ // Apply volume
+ streamState.applyAllVolumes();
+
+ // Apply change to all streams using this one as alias
+ int numStreamTypes = AudioSystem.getNumStreamTypes();
+ for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
+ if (streamType != streamState.mStreamType &&
+ STREAM_VOLUME_ALIAS[streamType] == streamState.mStreamType) {
+ mStreamStates[streamType].applyAllVolumes();
+ }
+ }
+ }
+
private void persistVolume(VolumeStreamState streamState,
- int persistType) {
+ int persistType,
+ int device) {
if ((persistType & PERSIST_CURRENT) != 0) {
- System.putInt(mContentResolver, streamState.mVolumeIndexSettingName,
- (streamState.mIndex + 5)/ 10);
+ System.putInt(mContentResolver,
+ streamState.getSettingNameForDevice(false /* lastAudible */, device),
+ (streamState.getIndex(device, false /* lastAudible */) + 5)/ 10);
}
if ((persistType & PERSIST_LAST_AUDIBLE) != 0) {
- System.putInt(mContentResolver, streamState.mLastAudibleVolumeIndexSettingName,
- (streamState.mLastAudibleIndex + 5) / 10);
+ System.putInt(mContentResolver,
+ streamState.getSettingNameForDevice(true /* lastAudible */, device),
+ (streamState.getIndex(device, true /* lastAudible */) + 5) / 10);
}
}
@@ -2223,12 +2379,16 @@
switch (msg.what) {
- case MSG_SET_SYSTEM_VOLUME:
- setSystemVolume((VolumeStreamState) msg.obj);
+ case MSG_SET_DEVICE_VOLUME:
+ setDeviceVolume((VolumeStreamState) msg.obj, msg.arg1);
+ break;
+
+ case MSG_SET_ALL_VOLUMES:
+ setAllVolumes((VolumeStreamState) msg.obj);
break;
case MSG_PERSIST_VOLUME:
- persistVolume((VolumeStreamState) msg.obj, msg.arg1);
+ persistVolume((VolumeStreamState) msg.obj, msg.arg1, msg.arg2);
break;
case MSG_PERSIST_RINGER_MODE:
@@ -2264,7 +2424,7 @@
synchronized (mConnectedDevices) {
Set set = mConnectedDevices.entrySet();
Iterator i = set.iterator();
- while(i.hasNext()){
+ while (i.hasNext()) {
Map.Entry device = (Map.Entry)i.next();
AudioSystem.setDeviceConnectionState(
((Integer)device.getKey()).intValue(),
@@ -2282,15 +2442,10 @@
// Restore stream volumes
int numStreamTypes = AudioSystem.getNumStreamTypes();
for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
- int index;
VolumeStreamState streamState = mStreamStates[streamType];
AudioSystem.initStreamVolume(streamType, 0, (streamState.mIndexMax + 5) / 10);
- if (streamState.muteCount() == 0) {
- index = streamState.mIndex;
- } else {
- index = 0;
- }
- setStreamVolumeIndex(streamType, index);
+
+ streamState.applyAllVolumes();
}
// Restore ringer mode
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 474a842..3080497 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -183,6 +183,7 @@
}
}
+
/*
* AudioPolicyService methods
*/
@@ -202,6 +203,23 @@
public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800;
public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000;
public static final int DEVICE_OUT_DEFAULT = 0x8000;
+ public static final int DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE |
+ DEVICE_OUT_SPEAKER |
+ DEVICE_OUT_WIRED_HEADSET |
+ DEVICE_OUT_WIRED_HEADPHONE |
+ DEVICE_OUT_BLUETOOTH_SCO |
+ DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
+ DEVICE_OUT_BLUETOOTH_SCO_CARKIT |
+ DEVICE_OUT_BLUETOOTH_A2DP |
+ DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
+ DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER |
+ DEVICE_OUT_AUX_DIGITAL |
+ DEVICE_OUT_ANLG_DOCK_HEADSET |
+ DEVICE_OUT_DGTL_DOCK_HEADSET |
+ DEVICE_OUT_DEFAULT);
+ public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP |
+ DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
+ DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER);
// input devices
public static final int DEVICE_IN_COMMUNICATION = 0x10000;
public static final int DEVICE_IN_AMBIENT = 0x20000;
@@ -218,6 +236,54 @@
public static final int DEVICE_STATE_AVAILABLE = 1;
private static final int NUM_DEVICE_STATES = 1;
+ public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece";
+ public static final String DEVICE_OUT_SPEAKER_NAME = "speaker";
+ public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset";
+ public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone";
+ public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco";
+ public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs";
+ public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit";
+ public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp";
+ public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp";
+ public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk";
+ public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital";
+ public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock";
+ public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock";
+
+ public static String getDeviceName(int device)
+ {
+ switch(device) {
+ case DEVICE_OUT_EARPIECE:
+ return DEVICE_OUT_EARPIECE_NAME;
+ case DEVICE_OUT_SPEAKER:
+ return DEVICE_OUT_SPEAKER_NAME;
+ case DEVICE_OUT_WIRED_HEADSET:
+ return DEVICE_OUT_WIRED_HEADSET_NAME;
+ case DEVICE_OUT_WIRED_HEADPHONE:
+ return DEVICE_OUT_WIRED_HEADPHONE_NAME;
+ case DEVICE_OUT_BLUETOOTH_SCO:
+ return DEVICE_OUT_BLUETOOTH_SCO_NAME;
+ case DEVICE_OUT_BLUETOOTH_SCO_HEADSET:
+ return DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME;
+ case DEVICE_OUT_BLUETOOTH_SCO_CARKIT:
+ return DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME;
+ case DEVICE_OUT_BLUETOOTH_A2DP:
+ return DEVICE_OUT_BLUETOOTH_A2DP_NAME;
+ case DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES:
+ return DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME;
+ case DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER:
+ return DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME;
+ case DEVICE_OUT_AUX_DIGITAL:
+ return DEVICE_OUT_AUX_DIGITAL_NAME;
+ case DEVICE_OUT_ANLG_DOCK_HEADSET:
+ return DEVICE_OUT_ANLG_DOCK_HEADSET_NAME;
+ case DEVICE_OUT_DGTL_DOCK_HEADSET:
+ return DEVICE_OUT_DGTL_DOCK_HEADSET_NAME;
+ default:
+ return "";
+ }
+ }
+
// phone state, match audio_mode???
public static final int PHONE_STATE_OFFCALL = 0;
public static final int PHONE_STATE_RINGING = 1;
@@ -247,11 +313,10 @@
public static native int setDeviceConnectionState(int device, int state, String device_address);
public static native int getDeviceConnectionState(int device, String device_address);
public static native int setPhoneState(int state);
- public static native int setRingerMode(int mode, int mask);
public static native int setForceUse(int usage, int config);
public static native int getForceUse(int usage);
public static native int initStreamVolume(int stream, int indexMin, int indexMax);
- public static native int setStreamVolumeIndex(int stream, int index);
- public static native int getStreamVolumeIndex(int stream);
+ public static native int setStreamVolumeIndex(int stream, int index, int device);
+ public static native int getStreamVolumeIndex(int stream, int device);
public static native int getDevicesForStream(int stream);
}
diff --git a/media/jni/Android.mk b/media/jni/Android.mk
index d4b326c..ee96a95 100644
--- a/media/jni/Android.mk
+++ b/media/jni/Android.mk
@@ -26,7 +26,6 @@
libgui \
libstagefright \
libcamera_client \
- libsqlite \
libmtp \
libusbhost \
libexif
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index 32b5bac..5b5b076 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -48,7 +48,7 @@
status_t AudioRecord::getMinFrameCount(
int* frameCount,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
int channelCount)
{
size_t size = 0;
@@ -86,7 +86,7 @@
AudioRecord::AudioRecord(
int inputSource,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -121,7 +121,7 @@
status_t AudioRecord::set(
int inputSource,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -148,7 +148,7 @@
sampleRate = DEFAULT_SAMPLE_RATE;
}
// these below should probably come from the audioFlinger too...
- if (format == 0) {
+ if (format == AUDIO_FORMAT_DEFAULT) {
format = AUDIO_FORMAT_PCM_16_BIT;
}
// validate parameters
@@ -248,7 +248,7 @@
return mLatency;
}
-int AudioRecord::format() const
+audio_format_t AudioRecord::format() const
{
return mFormat;
}
@@ -448,7 +448,7 @@
// must be called with mLock held
status_t AudioRecord::openRecord_l(
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index e537e5a..952d634 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -40,7 +40,7 @@
// Cached values for recording queries, all protected by gLock
uint32_t AudioSystem::gPrevInSamplingRate = 16000;
-int AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT;
+audio_format_t AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT;
int AudioSystem::gPrevInChannelCount = 1;
size_t AudioSystem::gInBuffSize = 0;
@@ -49,7 +49,7 @@
const sp<IAudioFlinger>& AudioSystem::get_audio_flinger()
{
Mutex::Autolock _l(gLock);
- if (gAudioFlinger.get() == 0) {
+ if (gAudioFlinger == 0) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
@@ -203,6 +203,11 @@
return volume ? 100 - int(dBConvertInverse * log(volume) + 0.5) : 0;
}
+// DEPRECATED
+status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) {
+ return getOutputSamplingRate(samplingRate, (audio_stream_type_t)streamType);
+}
+
status_t AudioSystem::getOutputSamplingRate(int* samplingRate, audio_stream_type_t streamType)
{
OutputDescriptor *outputDesc;
@@ -236,6 +241,11 @@
return NO_ERROR;
}
+// DEPRECATED
+status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) {
+ return getOutputFrameCount(frameCount, (audio_stream_type_t)streamType);
+}
+
status_t AudioSystem::getOutputFrameCount(int* frameCount, audio_stream_type_t streamType)
{
OutputDescriptor *outputDesc;
@@ -298,7 +308,7 @@
return NO_ERROR;
}
-status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, int format, int channelCount,
+status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount,
size_t* buffSize)
{
gLock.lock();
@@ -489,7 +499,7 @@
const sp<IAudioPolicyService>& AudioSystem::get_audio_policy_service()
{
gLock.lock();
- if (gAudioPolicyService.get() == 0) {
+ if (gAudioPolicyService == 0) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
@@ -538,19 +548,13 @@
status_t AudioSystem::setPhoneState(audio_mode_t state)
{
+ if (uint32_t(state) >= AUDIO_MODE_CNT) return BAD_VALUE;
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
return aps->setPhoneState(state);
}
-status_t AudioSystem::setRingerMode(uint32_t mode, uint32_t mask)
-{
- const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
- if (aps == 0) return PERMISSION_DENIED;
- return aps->setRingerMode(mode, mask);
-}
-
status_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
{
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
@@ -568,7 +572,7 @@
audio_io_handle_t AudioSystem::getOutput(audio_stream_type_t stream,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_policy_output_flags_t flags)
{
@@ -628,7 +632,7 @@
audio_io_handle_t AudioSystem::getInput(int inputSource,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_in_acoustics_t acoustics,
int sessionId)
@@ -668,18 +672,22 @@
return aps->initStreamVolume(stream, indexMin, indexMax);
}
-status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream, int index)
+status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device)
{
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
- return aps->setStreamVolumeIndex(stream, index);
+ return aps->setStreamVolumeIndex(stream, index, device);
}
-status_t AudioSystem::getStreamVolumeIndex(audio_stream_type_t stream, int *index)
+status_t AudioSystem::getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device)
{
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return PERMISSION_DENIED;
- return aps->getStreamVolumeIndex(stream, index);
+ return aps->getStreamVolumeIndex(stream, index, device);
}
uint32_t AudioSystem::getStrategyForStream(audio_stream_type_t stream)
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 97b2312..17e3d4b 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -43,6 +43,8 @@
#include <system/audio.h>
#include <system/audio_policy.h>
+#include <audio_utils/primitives.h>
+
namespace android {
// ---------------------------------------------------------------------------
@@ -102,6 +104,25 @@
}
AudioTrack::AudioTrack(
+ int streamType,
+ uint32_t sampleRate,
+ int format,
+ int channelMask,
+ int frameCount,
+ uint32_t flags,
+ callback_t cbf,
+ void* user,
+ int notificationFrames,
+ int sessionId)
+ : mStatus(NO_INIT),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
+{
+ mStatus = set((audio_stream_type_t)streamType, sampleRate, (audio_format_t)format, channelMask,
+ frameCount, flags, cbf, user, notificationFrames,
+ 0, false, sessionId);
+}
+
+AudioTrack::AudioTrack(
audio_stream_type_t streamType,
uint32_t sampleRate,
audio_format_t format,
@@ -480,7 +501,6 @@
mVolume[LEFT] = left;
mVolume[RIGHT] = right;
- // write must be atomic
mCblk->volumeLR = (uint32_t(uint16_t(right * 0x1000)) << 16) | uint16_t(left * 0x1000);
return NO_ERROR;
@@ -999,12 +1019,7 @@
if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) {
// Divide capacity by 2 to take expansion into account
toWrite = audioBuffer.size>>1;
- // 8 to 16 bit conversion
- int count = toWrite;
- int16_t *dst = (int16_t *)(audioBuffer.i8);
- while(count--) {
- *dst++ = (int16_t)(*src++^0x80) << 8;
- }
+ memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) src, toWrite);
} else {
toWrite = audioBuffer.size;
memcpy(audioBuffer.i8, src, toWrite);
@@ -1125,13 +1140,8 @@
if (writtenSize > reqSize) writtenSize = reqSize;
if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) {
- // 8 to 16 bit conversion
- const int8_t *src = audioBuffer.i8 + writtenSize-1;
- int count = writtenSize;
- int16_t *dst = audioBuffer.i16 + writtenSize-1;
- while(count--) {
- *dst-- = (int16_t)(*src--^0x80) << 8;
- }
+ // 8 to 16 bit conversion, note that source and destination are the same address
+ memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) audioBuffer.i8, writtenSize);
writtenSize <<= 1;
}
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index eef551c..0d442ef 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -84,7 +84,7 @@
pid_t pid,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -131,7 +131,7 @@
pid_t pid,
int input,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -188,13 +188,13 @@
return reply.readInt32();
}
- virtual uint32_t format(int output) const
+ virtual audio_format_t format(int output) const
{
Parcel data, reply;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
data.writeInt32(output);
remote()->transact(FORMAT, data, &reply);
- return reply.readInt32();
+ return (audio_format_t) reply.readInt32();
}
virtual size_t frameCount(int output) const
@@ -343,7 +343,7 @@
remote()->transact(REGISTER_CLIENT, data, &reply);
}
- virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount)
+ virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount)
{
Parcel data, reply;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
@@ -356,7 +356,7 @@
virtual int openOutput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
uint32_t flags)
@@ -364,7 +364,7 @@
Parcel data, reply;
uint32_t devices = pDevices ? *pDevices : 0;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
- uint32_t format = pFormat ? *pFormat : 0;
+ audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
uint32_t channels = pChannels ? *pChannels : 0;
uint32_t latency = pLatencyMs ? *pLatencyMs : 0;
@@ -382,7 +382,7 @@
if (pDevices) *pDevices = devices;
samplingRate = reply.readInt32();
if (pSamplingRate) *pSamplingRate = samplingRate;
- format = reply.readInt32();
+ format = (audio_format_t) reply.readInt32();
if (pFormat) *pFormat = format;
channels = reply.readInt32();
if (pChannels) *pChannels = channels;
@@ -430,14 +430,14 @@
virtual int openInput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t acoustics)
{
Parcel data, reply;
uint32_t devices = pDevices ? *pDevices : 0;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
- uint32_t format = pFormat ? *pFormat : 0;
+ audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
uint32_t channels = pChannels ? *pChannels : 0;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
@@ -452,7 +452,7 @@
if (pDevices) *pDevices = devices;
samplingRate = reply.readInt32();
if (pSamplingRate) *pSamplingRate = samplingRate;
- format = reply.readInt32();
+ format = (audio_format_t) reply.readInt32();
if (pFormat) *pFormat = format;
channels = reply.readInt32();
if (pChannels) *pChannels = channels;
@@ -678,7 +678,7 @@
pid_t pid = data.readInt32();
int streamType = data.readInt32();
uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
int channelCount = data.readInt32();
size_t bufferCount = data.readInt32();
uint32_t flags = data.readInt32();
@@ -699,7 +699,7 @@
pid_t pid = data.readInt32();
int input = data.readInt32();
uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
int channelCount = data.readInt32();
size_t bufferCount = data.readInt32();
uint32_t flags = data.readInt32();
@@ -825,7 +825,7 @@
case GET_INPUTBUFFERSIZE: {
CHECK_INTERFACE(IAudioFlinger, data, reply);
uint32_t sampleRate = data.readInt32();
- int format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
int channelCount = data.readInt32();
reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) );
return NO_ERROR;
@@ -834,7 +834,7 @@
CHECK_INTERFACE(IAudioFlinger, data, reply);
uint32_t devices = data.readInt32();
uint32_t samplingRate = data.readInt32();
- uint32_t format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
uint32_t channels = data.readInt32();
uint32_t latency = data.readInt32();
uint32_t flags = data.readInt32();
@@ -879,7 +879,7 @@
CHECK_INTERFACE(IAudioFlinger, data, reply);
uint32_t devices = data.readInt32();
uint32_t samplingRate = data.readInt32();
- uint32_t format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
uint32_t channels = data.readInt32();
uint32_t acoutics = data.readInt32();
diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp
index 645325b..b5c857f 100644
--- a/media/libmedia/IAudioPolicyService.cpp
+++ b/media/libmedia/IAudioPolicyService.cpp
@@ -33,7 +33,7 @@
SET_DEVICE_CONNECTION_STATE = IBinder::FIRST_CALL_TRANSACTION,
GET_DEVICE_CONNECTION_STATE,
SET_PHONE_STATE,
- SET_RINGER_MODE,
+ SET_RINGER_MODE, // reserved, no longer used
SET_FORCE_USE,
GET_FORCE_USE,
GET_OUTPUT,
@@ -100,16 +100,6 @@
return static_cast <status_t> (reply.readInt32());
}
- virtual status_t setRingerMode(uint32_t mode, uint32_t mask)
- {
- Parcel data, reply;
- data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
- data.writeInt32(mode);
- data.writeInt32(mask);
- remote()->transact(SET_RINGER_MODE, data, &reply);
- return static_cast <status_t> (reply.readInt32());
- }
-
virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
{
Parcel data, reply;
@@ -132,7 +122,7 @@
virtual audio_io_handle_t getOutput(
audio_stream_type_t stream,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_policy_output_flags_t flags)
{
@@ -184,7 +174,7 @@
virtual audio_io_handle_t getInput(
int inputSource,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_in_acoustics_t acoustics,
int audioSession)
@@ -240,21 +230,28 @@
return static_cast <status_t> (reply.readInt32());
}
- virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index)
+ virtual status_t setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device)
{
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
data.writeInt32(static_cast <uint32_t>(stream));
data.writeInt32(index);
+ data.writeInt32(static_cast <uint32_t>(device));
remote()->transact(SET_STREAM_VOLUME, data, &reply);
return static_cast <status_t> (reply.readInt32());
}
- virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index)
+ virtual status_t getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device)
{
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
data.writeInt32(static_cast <uint32_t>(stream));
+ data.writeInt32(static_cast <uint32_t>(device));
+
remote()->transact(GET_STREAM_VOLUME, data, &reply);
int lIndex = reply.readInt32();
if (index) *index = lIndex;
@@ -398,14 +395,6 @@
return NO_ERROR;
} break;
- case SET_RINGER_MODE: {
- CHECK_INTERFACE(IAudioPolicyService, data, reply);
- uint32_t mode = data.readInt32();
- uint32_t mask = data.readInt32();
- reply->writeInt32(static_cast <uint32_t>(setRingerMode(mode, mask)));
- return NO_ERROR;
- } break;
-
case SET_FORCE_USE: {
CHECK_INTERFACE(IAudioPolicyService, data, reply);
audio_policy_force_use_t usage = static_cast <audio_policy_force_use_t>(data.readInt32());
@@ -427,7 +416,7 @@
audio_stream_type_t stream =
static_cast <audio_stream_type_t>(data.readInt32());
uint32_t samplingRate = data.readInt32();
- uint32_t format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
uint32_t channels = data.readInt32();
audio_policy_output_flags_t flags =
static_cast <audio_policy_output_flags_t>(data.readInt32());
@@ -474,7 +463,7 @@
CHECK_INTERFACE(IAudioPolicyService, data, reply);
int inputSource = data.readInt32();
uint32_t samplingRate = data.readInt32();
- uint32_t format = data.readInt32();
+ audio_format_t format = (audio_format_t) data.readInt32();
uint32_t channels = data.readInt32();
audio_in_acoustics_t acoustics =
static_cast <audio_in_acoustics_t>(data.readInt32());
@@ -525,7 +514,10 @@
audio_stream_type_t stream =
static_cast <audio_stream_type_t>(data.readInt32());
int index = data.readInt32();
- reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream, index)));
+ audio_devices_t device = static_cast <audio_devices_t>(data.readInt32());
+ reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream,
+ index,
+ device)));
return NO_ERROR;
} break;
@@ -533,8 +525,9 @@
CHECK_INTERFACE(IAudioPolicyService, data, reply);
audio_stream_type_t stream =
static_cast <audio_stream_type_t>(data.readInt32());
+ audio_devices_t device = static_cast <audio_devices_t>(data.readInt32());
int index;
- status_t status = getStreamVolumeIndex(stream, &index);
+ status_t status = getStreamVolumeIndex(stream, &index, device);
reply->writeInt32(index);
reply->writeInt32(static_cast <uint32_t>(status));
return NO_ERROR;
diff --git a/media/libmedia/IMediaDeathNotifier.cpp b/media/libmedia/IMediaDeathNotifier.cpp
index 8525482..aeb35a5 100644
--- a/media/libmedia/IMediaDeathNotifier.cpp
+++ b/media/libmedia/IMediaDeathNotifier.cpp
@@ -36,7 +36,7 @@
{
ALOGV("getMediaPlayerService");
Mutex::Autolock _l(sServiceLock);
- if (sMediaPlayerService.get() == 0) {
+ if (sMediaPlayerService == 0) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp
index 478654a..13b64e9 100644
--- a/media/libmedia/Visualizer.cpp
+++ b/media/libmedia/Visualizer.cpp
@@ -73,7 +73,7 @@
if (status == NO_ERROR) {
if (t != 0) {
if (enabled) {
- t->run("AudioTrackThread");
+ t->run("Visualizer");
} else {
t->requestExit();
}
diff --git a/media/libmedia/autodetect.cpp b/media/libmedia/autodetect.cpp
index dfcc6a0..be5c3b2 100644
--- a/media/libmedia/autodetect.cpp
+++ b/media/libmedia/autodetect.cpp
@@ -16,7 +16,7 @@
#include "autodetect.h"
-typedef struct CharRange {
+struct CharRange {
uint16_t first;
uint16_t last;
};
diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp
index 88e269f..8d53357 100644
--- a/media/libmedia/mediametadataretriever.cpp
+++ b/media/libmedia/mediametadataretriever.cpp
@@ -35,7 +35,7 @@
const sp<IMediaPlayerService>& MediaMetadataRetriever::getService()
{
Mutex::Autolock lock(sServiceLock);
- if (sService.get() == 0) {
+ if (sService == 0) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index acf97a6..f1c47dd 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -30,7 +30,7 @@
#include <gui/SurfaceTextureClient.h>
#include <media/mediaplayer.h>
-#include <media/AudioTrack.h>
+#include <media/AudioSystem.h>
#include <surfaceflinger/Surface.h>
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index 6b68b87..fa71d11 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -34,6 +34,7 @@
namespace android {
+class AudioTrack;
class IMediaRecorder;
class IMediaMetadataRetriever;
class IOMX;
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
index d219fc2..beda945 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ b/media/libmediaplayerservice/MediaRecorderClient.cpp
@@ -33,8 +33,6 @@
#include <utils/String16.h>
-#include <media/AudioTrack.h>
-
#include <system/audio.h>
#include "MediaRecorderClient.h"
diff --git a/media/libmediaplayerservice/MidiFile.h b/media/libmediaplayerservice/MidiFile.h
index dfe4318..f6f8f7b 100644
--- a/media/libmediaplayerservice/MidiFile.h
+++ b/media/libmediaplayerservice/MidiFile.h
@@ -19,7 +19,6 @@
#define ANDROID_MIDIFILE_H
#include <media/MediaPlayerInterface.h>
-#include <media/AudioTrack.h>
#include <libsonivox/eas.h>
namespace android {
diff --git a/media/libstagefright/AVIExtractor.cpp b/media/libstagefright/AVIExtractor.cpp
index a3187b7..5a6211e 100644
--- a/media/libstagefright/AVIExtractor.cpp
+++ b/media/libstagefright/AVIExtractor.cpp
@@ -577,6 +577,7 @@
case FOURCC('a', 'v', 'c', '1'):
case FOURCC('d', 'a', 'v', 'c'):
case FOURCC('x', '2', '6', '4'):
+ case FOURCC('H', '2', '6', '4'):
case FOURCC('v', 's', 's', 'h'):
return MEDIA_MIMETYPE_VIDEO_AVC;
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 693c506..0957426 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -370,6 +370,7 @@
&& (mSource->flags() & DataSource::kIsHTTPBasedSource)) {
ALOGV("Disconnecting at high watermark");
static_cast<HTTPBase *>(mSource.get())->disconnect();
+ mFinalStatus = -EAGAIN;
}
}
} else {
@@ -549,7 +550,7 @@
size_t delta = offset - mCacheOffset;
- if (mFinalStatus != OK) {
+ if (mFinalStatus != OK && mNumRetriesLeft == 0) {
if (delta >= mCache->totalSize()) {
return mFinalStatus;
}
@@ -591,7 +592,7 @@
size_t totalSize = mCache->totalSize();
CHECK_EQ(mCache->releaseFromStart(totalSize), totalSize);
- mFinalStatus = OK;
+ mNumRetriesLeft = kMaxNumRetries;
mFetching = true;
return OK;
diff --git a/media/libstagefright/include/ThrottledSource.h b/media/libstagefright/include/ThrottledSource.h
index 8928a4a..7fe7c06 100644
--- a/media/libstagefright/include/ThrottledSource.h
+++ b/media/libstagefright/include/ThrottledSource.h
@@ -35,6 +35,11 @@
virtual status_t getSize(off64_t *size);
virtual uint32_t flags();
+ virtual String8 getMIMEType() const {
+ return mSource->getMIMEType();
+ }
+
+
private:
Mutex mLock;
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 2391c5c..9a7dd70 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -122,6 +122,7 @@
mSetupTracksSuccessful(false),
mSeekPending(false),
mFirstAccessUnit(true),
+ mAllTracksHaveTime(false),
mNTPAnchorUs(-1),
mMediaAnchorUs(-1),
mLastMediaTimeUs(0),
@@ -723,6 +724,7 @@
mSetupTracksSuccessful = false;
mSeekPending = false;
mFirstAccessUnit = true;
+ mAllTracksHaveTime = false;
mNTPAnchorUs = -1;
mMediaAnchorUs = -1;
mNumAccessUnitsReceived = 0;
@@ -930,6 +932,7 @@
info->mNTPAnchorUs = -1;
}
+ mAllTracksHaveTime = false;
mNTPAnchorUs = -1;
int64_t timeUs;
@@ -1037,6 +1040,14 @@
ALOGW("Never received any data, disconnecting.");
(new AMessage('abor', id()))->post();
}
+ } else {
+ if (!mAllTracksHaveTime) {
+ ALOGW("We received some RTCP packets, but time "
+ "could not be established on all tracks, now "
+ "using fake timestamps");
+
+ fakeTimestamps();
+ }
}
break;
}
@@ -1211,6 +1222,7 @@
bool mSeekPending;
bool mFirstAccessUnit;
+ bool mAllTracksHaveTime;
int64_t mNTPAnchorUs;
int64_t mMediaAnchorUs;
int64_t mLastMediaTimeUs;
@@ -1357,6 +1369,7 @@
}
void fakeTimestamps() {
+ mNTPAnchorUs = -1ll;
for (size_t i = 0; i < mTracks.size(); ++i) {
onTimeUpdate(i, 0, 0ll);
}
@@ -1377,6 +1390,21 @@
mNTPAnchorUs = ntpTimeUs;
mMediaAnchorUs = mLastMediaTimeUs;
}
+
+ if (!mAllTracksHaveTime) {
+ bool allTracksHaveTime = true;
+ for (size_t i = 0; i < mTracks.size(); ++i) {
+ TrackInfo *track = &mTracks.editItemAt(i);
+ if (track->mNTPAnchorUs < 0) {
+ allTracksHaveTime = false;
+ break;
+ }
+ }
+ if (allTracksHaveTime) {
+ mAllTracksHaveTime = true;
+ ALOGI("Time now established for all tracks.");
+ }
+ }
}
void onAccessUnitComplete(
@@ -1403,7 +1431,7 @@
TrackInfo *track = &mTracks.editItemAt(trackIndex);
- if (mNTPAnchorUs < 0 || mMediaAnchorUs < 0 || track->mNTPAnchorUs < 0) {
+ if (!mAllTracksHaveTime) {
ALOGV("storing accessUnit, no time established yet");
track->mPackets.push_back(accessUnit);
return;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
index 80a3bcd..7dfab7d 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
@@ -82,7 +82,6 @@
/**
* To test thumbnail / frame extraction on H.263 QCIF.
*/
- // TODO : TC_TN_001
@LargeTest
public void testThumbnailForH263QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -104,7 +103,6 @@
/**
* To test thumbnail / frame extraction on MPEG4 VGA .
*/
- // TODO : TC_TN_002
@LargeTest
public void testThumbnailForMPEG4VGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -124,7 +122,6 @@
/**
* To test thumbnail / frame extraction on MPEG4 NTSC.
*/
- // TODO : TC_TN_003
@LargeTest
public void testThumbnailForMPEG4NTSC() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -144,7 +141,6 @@
/**
* To test thumbnail / frame extraction on MPEG4 WVGA.
*/
- // TODO : TC_TN_004
@LargeTest
public void testThumbnailForMPEG4WVGA() throws Exception {
@@ -165,7 +161,6 @@
/**
* To test thumbnail / frame extraction on MPEG4 QCIF.
*/
- // TODO : TC_TN_005
@LargeTest
public void testThumbnailForMPEG4QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -186,7 +181,6 @@
/**
* To test thumbnail / frame extraction on H264 QCIF.
*/
- // TODO : TC_TN_006
@LargeTest
public void testThumbnailForH264QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -207,7 +201,6 @@
/**
* To test thumbnail / frame extraction on H264 VGA.
*/
- // TODO : TC_TN_007
@LargeTest
public void testThumbnailForH264VGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -228,7 +221,6 @@
/**
* To test thumbnail / frame extraction on H264 WVGA.
*/
- // TODO : TC_TN_008
@LargeTest
public void testThumbnailForH264WVGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -248,7 +240,6 @@
/**
* To test thumbnail / frame extraction on H264 854x480.
*/
- // TODO : TC_TN_009
@LargeTest
public void testThumbnailForH264854_480() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -269,7 +260,6 @@
/**
* To test thumbnail / frame extraction on H264 960x720.
*/
- // TODO : TC_TN_010
@LargeTest
public void testThumbnailForH264HD960() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -290,7 +280,6 @@
/**
* To test thumbnail / frame extraction on H264 1080x720 .
*/
- // TODO : TC_TN_011
@LargeTest
public void testThumbnailForH264HD1080() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -310,7 +299,6 @@
/**
* Check the thumbnail / frame extraction precision at 0,100 and 200 ms
*/
- // TODO : TC_TN_012
@LargeTest
public void testThumbnailForH264VGADifferentDuration() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -345,7 +333,6 @@
*Check the thumbnail / frame extraction precision at
* FileDuration,FileDuration/2 + 100 andFileDuration/2 + 200 ms
*/
- // TODO : TC_TN_013
@LargeTest
public void testThumbnailForMP4VGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -379,7 +366,6 @@
/**
* Check the thumbnail / frame extraction on JPEG file
*/
- // TODO : TC_TN_014
@LargeTest
public void testThumbnailForImage() throws Exception {
final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -402,7 +388,6 @@
/**
*To test ThumbnailList for H263 QCIF
*/
- // TODO : TC_TN_015
@LargeTest
public void testThumbnailListH263QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -432,7 +417,6 @@
/**
*To test ThumbnailList for MPEG4 QCIF
*/
- // TODO : TC_TN_016
@LargeTest
public void testThumbnailListMPEG4QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -463,7 +447,6 @@
/**
*To test ThumbnailList for H264 VGA
*/
- // TODO : TC_TN_017
@LargeTest
public void testThumbnailListH264VGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -492,7 +475,6 @@
/**
*To test ThumbnailList for H264 WVGA
*/
- // TODO : TC_TN_018
@LargeTest
public void testThumbnailListH264WVGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -521,7 +503,6 @@
/**
*To test ThumbnailList for H264 VGA ,Time exceeding file duration
*/
- // TODO : TC_TN_019
@LargeTest
public void testThumbnailH264VGAExceedingFileDuration() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -547,7 +528,6 @@
/**
*To test ThumbnailList for VGA Image
*/
- // TODO : TC_TN_020
@LargeTest
public void testThumbnailListVGAImage() throws Exception {
final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -576,7 +556,6 @@
/**
*To test ThumbnailList for Invalid file path
*/
- // TODO : TC_TN_021
@LargeTest
public void testThumbnailForInvalidFilePath() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "/sdcard/abc.jpg";
@@ -596,7 +575,6 @@
/**
* To test thumbnail / frame extraction with setBoundaries
*/
- // TODO : TC_TN_022
@LargeTest
public void testThumbnailForMPEG4WVGAWithSetBoundaries() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -620,7 +598,6 @@
/**
*To test ThumbnailList for H264 WVGA with setExtractboundaries
*/
- // TODO : TC_TN_023
@LargeTest
public void testThumbnailListForH264WVGAWithSetBoundaries() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -652,7 +629,6 @@
/**
*To test ThumbnailList for H264 WVGA with count > frame available
*/
- // TODO : TC_TN_024
@LargeTest
public void testThumbnailListForH264WVGAWithCount() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -684,7 +660,6 @@
/**
*To test ThumbnailList for H264 WVGA with startTime > End Time
*/
- // TODO : TC_TN_025
@LargeTest
public void testThumbnailListH264WVGAWithStartGreaterEnd() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -710,9 +685,8 @@
}
/**
- *To test ThumbnailList TC_TN_026 for H264 WVGA with startTime = End Time
+ *To test ThumbnailList for H264 WVGA with startTime = End Time
*/
- // TODO : TC_TN_026
@LargeTest
public void testThumbnailListH264WVGAWithStartEqualEnd() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -738,10 +712,9 @@
}
/**
- *To test ThumbnailList TC_TN_027 for file where video duration is less
+ *To test ThumbnailList for file where video duration is less
* than file duration.
*/
- // TODO : TC_TN_027
@LargeTest
public void testThumbnailForVideoDurationLessFileDuration() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -760,9 +733,8 @@
}
/**
- *To test ThumbnailList TC_TN_028 for file which has video part corrupted
+ *To test ThumbnailList for file which has video part corrupted
*/
- // TODO : TC_TN_028
@LargeTest
public void testThumbnailWithCorruptedVideoPart() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -787,7 +759,6 @@
/**
* Check the thumbnail / frame list extraction for Height as Negative Value
*/
- // TODO : TC_TN_029
@LargeTest
public void testThumbnailWithNegativeHeight() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -815,7 +786,6 @@
/**
* Check the thumbnail for Height as Zero
*/
- // TODO : TC_TN_030
@LargeTest
public void testThumbnailWithHeightAsZero() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -839,7 +809,6 @@
/**
* Check the thumbnail for Height = 10
*/
- // TODO : TC_TN_031
@LargeTest
public void testThumbnailWithHeight() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -859,7 +828,6 @@
/**
* Check the thumbnail / frame list extraction for Width as Negative Value
*/
- // TODO : TC_TN_032
@LargeTest
public void testThumbnailWithNegativeWidth() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -887,7 +855,6 @@
/**
* Check the thumbnail / frame list extraction for Width zero
*/
- // TODO : TC_TN_033
@LargeTest
public void testThumbnailWithWidthAsZero() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -911,7 +878,6 @@
/**
* Check the thumbnail for Width = 10
*/
- // TODO : TC_TN_034
@LargeTest
public void testThumbnailWithWidth() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -931,7 +897,6 @@
/**
* To test thumbnail / frame extraction on MPEG4 (time beyond file duration).
*/
- // TODO : TC_TN_035
@LargeTest
public void testThumbnailMPEG4withMorethanFileDuration() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
index e2f6863..34cf9f0 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
@@ -130,7 +130,6 @@
/**
*To test Media Properties for file MPEG4 854 x 480
*/
- // TODO : Remove TC_MP_001
@LargeTest
public void testPropertiesMPEG4854_480() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -163,7 +162,6 @@
/**
*To test Media Properties for file MPEG4 WVGA
*/
- // TODO : Remove TC_MP_002
@LargeTest
public void testPropertiesMPEGWVGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -195,7 +193,6 @@
/**
*To test media properties for MPEG4 720x480 (NTSC) + AAC file.
*/
- // TODO : Remove TC_MP_003
@LargeTest
public void testPropertiesMPEGNTSC() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -227,7 +224,6 @@
/**
*To test Media Properties for file MPEG4 VGA
*/
- // TODO : Remove TC_MP_004
@LargeTest
public void testPropertiesMPEGVGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -259,7 +255,6 @@
/**
*To test Media Properties for file MPEG4 QCIF
*/
- // TODO : Remove TC_MP_005
@LargeTest
public void testPropertiesMPEGQCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -291,7 +286,6 @@
/**
*To To test media properties for H263 176x144 (QCIF) + AAC (mono) file.
*/
- // TODO : Remove TC_MP_006
@LargeTest
public void testPropertiesH263QCIF() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -322,7 +316,6 @@
/**
*To test Media Properties for file H264 VGA
*/
- // TODO : Remove TC_MP_007
@LargeTest
public void testPropertiesH264VGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -353,7 +346,6 @@
/**
*To test Media Properties for file H264 NTSC
*/
- // TODO : Remove TC_MP_008
@LargeTest
public void testPropertiesH264NTSC() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -385,7 +377,6 @@
/**
*To test media properties for H264 800x480 (WVGA) + AAC file.
*/
- // TODO : Remove TC_MP_009
@LargeTest
public void testPropertiesH264WVGA() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -417,7 +408,6 @@
/**
*To test Media Properties for file H264 HD1280
*/
- // TODO : Remove TC_MP_010
@LargeTest
public void testPropertiesH264HD1280() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -449,7 +439,6 @@
/**
*To test media properties for H264 1080x720 + AAC file
*/
- // TODO : Remove TC_MP_011
@LargeTest
public void testPropertiesH264HD1080WithAudio() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -481,7 +470,6 @@
/**
*To test Media Properties for file WMV - Unsupported type
*/
- // TODO : Remove TC_MP_012
@LargeTest
public void testPropertiesWMVFile() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -506,7 +494,6 @@
/**
*To test media properties for H.264 Main/Advanced profile.
*/
- // TODO : Remove TC_MP_013
@LargeTest
public void testPropertiesH264MainLineProfile() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH
@@ -539,7 +526,6 @@
/**
*To test Media Properties for non existing file.
*/
- // TODO : Remove TC_MP_014
@LargeTest
public void testPropertiesForNonExsitingFile() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH + "abc.3gp";
@@ -559,7 +545,6 @@
/**
*To test Media Properties for file H264 HD1080
*/
- // TODO : Remove TC_MP_015
@LargeTest
public void testPropertiesH264HD1080WithoutAudio() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -591,7 +576,6 @@
/**
*To test Media Properties for Image file of JPEG Type
*/
- // TODO : Remove TC_MP_016
@LargeTest
public void testPropertiesVGAImage() throws Exception {
final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -611,7 +595,6 @@
/**
*To test Media Properties for Image file of PNG Type
*/
- // TODO : Remove TC_MP_017
@LargeTest
public void testPropertiesPNG() throws Exception {
final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.png";
@@ -630,7 +613,6 @@
/**
*To test Media Properties for file GIF - Unsupported type
*/
- // TODO : Remove TC_MP_018
@LargeTest
public void testPropertiesGIFFile() throws Exception {
@@ -651,7 +633,6 @@
/**
*To test Media Properties for file Text file named as 3GP
*/
- // TODO : Remove TC_MP_019
@LargeTest
public void testPropertiesofDirtyFile() throws Exception {
@@ -672,7 +653,6 @@
/**
*To test Media Properties for file name as NULL
*/
- // TODO : Remove TC_MP_020
@LargeTest
public void testPropertieNULLFile() throws Exception {
final String videoItemFilename = null;
@@ -691,7 +671,6 @@
/**
*To test Media Properties for file which is of type MPEG2
*/
- // TODO : Remove TC_MP_021
@LargeTest
public void testPropertiesMPEG2File() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -709,9 +688,8 @@
}
/**
- *To test Media Properties TC_MP_023 for file without Video only Audio
+ *To test Media Properties for file without Video only Audio
*/
- // TODO : Remove TC_MP_023
@LargeTest
public void testProperties3GPWithoutVideoMediaItem() throws Exception {
final String audioFilename = INPUT_FILE_PATH +
@@ -731,7 +709,6 @@
/**
*To test media properties for Audio Track file. (No Video, AAC Audio)
*/
- // TODO : Remove TC_MP_024
@LargeTest
public void testProperties3GPWithoutVideoAudioTrack() throws Exception {
@@ -753,7 +730,6 @@
/**
*To test media properties for Audio Track file. MP3 file
*/
- // TODO : Remove TC_MP_025
@LargeTest
public void testPropertiesMP3AudioTrack() throws Exception {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
index b32d865..6e520c3 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
@@ -88,7 +88,6 @@
/**
* To Test Creation of Media Video Item.
*/
- // TODO : remove TC_API_001
@LargeTest
public void testMediaVideoItem() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -130,7 +129,6 @@
* To test creation of Media Video Item with Set Extract Boundaries With Get
* the Begin and End Time.
*/
- // TODO : remove TC_API_002
@LargeTest
public void testMediaVideoItemExtractBoundaries() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -199,7 +197,6 @@
/**
* To test creation of Media Video Item with Set and Get rendering Mode
*/
- // TODO : remove TC_API_003
@LargeTest
public void testMediaVideoItemRenderingModes() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -238,12 +235,10 @@
mediaVideoItem1.getRenderingMode());
}
- /** Test Case TC_API_004 is removed */
/**
* To Test the Media Video API : Set Audio Volume, Get Audio Volume and Mute
*/
- // TODO : remove TC_API_005
@LargeTest
public void testMediaVideoItemAudioFeatures() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -301,7 +296,6 @@
* extractAudioWaveFormData
*/
- // TODO : remove TC_API_006
@LargeTest
public void testMediaVideoItemGetWaveformData() throws Exception {
@@ -343,7 +337,6 @@
* To Test the Media Video API : Get Effect, GetAllEffects, remove Effect
*/
- // TODO : remove TC_API_007
@LargeTest
public void testMediaVideoItemEffect() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -384,7 +377,6 @@
* To Test the Media Video API : Get Before and after transition
*/
- // TODO : remove TC_API_008
@LargeTest
public void testMediaVideoItemTransitions() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -431,7 +423,6 @@
*
*/
- // TODO : remove TC_API_009
@LargeTest
public void testMediaVideoItemOverlays() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -474,7 +465,6 @@
/**
* To Test Creation of Media Image Item.
*/
- // TODO : remove TC_API_010
@LargeTest
public void testMediaImageItem() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -511,7 +501,6 @@
/**
* To Test the Media Image API : Get and Set rendering Mode
*/
- // TODO : remove TC_API_011
@LargeTest
public void testMediaImageItemRenderingModes() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -554,7 +543,6 @@
/**
* To Test the Media Image API : GetHeight and GetWidth
*/
- // TODO : remove TC_API_012
@LargeTest
public void testMediaImageItemHeightWidth() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -576,7 +564,6 @@
/**
* To Test the Media Image API : Scaled Height and Scaled GetWidth
*/
- // TODO : remove TC_API_013
@LargeTest
public void testMediaImageItemScaledHeightWidth() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -597,7 +584,6 @@
* To Test the Media Image API : Get Effect, GetAllEffects, remove Effect
*/
- // TODO : remove TC_API_014
@LargeTest
public void testMediaImageItemEffect() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -637,7 +623,6 @@
* To Test the Media Image API : Get Before and after transition
*/
- // TODO : remove TC_API_015
@LargeTest
public void testMediaImageItemTransitions() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -685,7 +670,6 @@
* Overlay
*/
- // TODO : remove TC_API_016
@LargeTest
public void testMediaImageItemOverlays() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -729,7 +713,6 @@
* To test creation of Audio Track
*/
- // TODO : remove TC_API_017
@LargeTest
public void testAudioTrack() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -756,7 +739,6 @@
/**
* To test creation of Audio Track with set extract boundaries
*/
- // TODO : remove TC_API_018
@LargeTest
public void testAudioTrackExtractBoundaries() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -824,7 +806,6 @@
/**
* To test creation of Audio Track with set Start Time and Get Time
*/
- // TODO : remove TC_API_019
@LargeTest
public void testAudioTrackSetGetTime() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -840,7 +821,6 @@
/**
* To Test the Audio Track API: Enable Ducking
*/
- // TODO : remove TC_API_020
@LargeTest
public void testAudioTrackEnableDucking() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -910,7 +890,6 @@
/**
* To Test the Audio Track API: Looping
*/
- // TODO : remove TC_API_021
@LargeTest
public void testAudioTrackLooping() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -928,7 +907,6 @@
/**
* To Test the Audio Track API:Extract waveform data
*/
- // TODO : remove TC_API_022
@LargeTest
public void testAudioTrackWaveFormData() throws Exception {
@@ -984,7 +962,6 @@
/**
* To Test the Audio Track API: Mute
*/
- // TODO : remove TC_API_023
@LargeTest
public void testAudioTrackMute() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -1001,7 +978,6 @@
/**
* To Test the Audio Track API: Get Volume and Set Volume
*/
- // TODO : remove TC_API_024
@LargeTest
public void testAudioTrackGetSetVolume() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -1042,7 +1018,6 @@
/**
* To test Effect Color.
*/
- // TODO : remove TC_API_025
@LargeTest
public void testAllEffects() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -1206,7 +1181,6 @@
/**
* To test Effect Color : Set duration and Get Duration
*/
- // TODO : remove TC_API_026
@LargeTest
public void testEffectSetgetDuration() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -1246,7 +1220,6 @@
/**
* To test Effect Color : UNDEFINED color param value
*/
- // TODO : remove TC_API_027
@LargeTest
public void testEffectUndefinedColorParam() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -1269,7 +1242,6 @@
/**
* To test Effect Color : with Invalid StartTime and Duration
*/
- // TODO : remove TC_API_028
@LargeTest
public void testEffectInvalidStartTimeAndDuration() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -1315,7 +1287,6 @@
/**
* To test Effect : with NULL Media Item
*/
- // TODO : remove TC_API_034
@LargeTest
public void testEffectNullMediaItem() throws Exception {
boolean flagForException = false;
@@ -1331,7 +1302,6 @@
/**
* To test Effect : KenBurn Effect
*/
- // TODO : remove TC_API_035
@LargeTest
public void testEffectKenBurn() throws Exception {
// Test ken burn effect using a JPEG file.
@@ -1375,7 +1345,6 @@
* To test KenBurnEffect : Set StartRect and EndRect
*/
- // TODO : remove TC_API_036
@LargeTest
public void testEffectKenBurnSet() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -1443,7 +1412,6 @@
* SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
*/
- // TODO : remove TC_API_037
@LargeTest
public void testTransitionFadeBlack() throws Exception {
@@ -1591,7 +1559,6 @@
* SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
*/
- // TODO : remove TC_API_038
@LargeTest
public void testTransitionCrossFade() throws Exception {
@@ -1742,7 +1709,6 @@
* ,DIRECTION_BOTTOM_OUT_TOP_IN
*/
- // TODO : remove TC_API_039
@LargeTest
public void testTransitionSliding() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -1932,7 +1898,6 @@
* SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
*/
- // TODO : remove TC_API_040
@LargeTest
public void testTransitionAlpha() throws Exception {
@@ -2111,7 +2076,6 @@
* To test Frame Overlay for Media Video Item
*/
- // TODO : remove TC_API_041
@LargeTest
public void testFrameOverlayVideoItem() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2147,7 +2111,6 @@
* Duration
*/
- // TODO : remove TC_API_042
@LargeTest
public void testFrameOverlaySetAndGet() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2193,7 +2156,6 @@
* Duration
*/
- // TODO : remove TC_API_043
@LargeTest
public void testFrameOverlayInvalidTime() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2242,7 +2204,6 @@
/**
* To test Frame Overlay for Media Image Item
*/
- // TODO : remove TC_API_045
@LargeTest
public void testFrameOverlayImageItem() throws Exception {
final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2278,7 +2239,6 @@
* Duration
*/
- // TODO : remove TC_API_046
@LargeTest
public void testFrameOverlaySetAndGetImage() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2321,7 +2281,6 @@
* Duration
*/
- // TODO : remove TC_API_047
@LargeTest
public void testFrameOverlayInvalidTimeImage() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2370,7 +2329,6 @@
* To Test Frame Overlay Media Image Item :JPG File
*/
- // TODO : remove TC_API_048
@LargeTest
public void testFrameOverlayJPGImage() throws Exception {
@@ -2392,7 +2350,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_049
@LargeTest
public void testVideoEditorAPI() throws Exception {
@@ -2555,7 +2512,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_050
@LargeTest
public void testVideoLessThanAudio() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH
@@ -2583,7 +2539,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_051
@LargeTest
public void testVideoContentHD() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH
@@ -2609,7 +2564,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_052
@LargeTest
public void testRemoveAudioTrack() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -2638,7 +2592,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_053
@LargeTest
public void testAudioDuckingDisable() throws Exception {
final String audioFileName = INPUT_FILE_PATH +
@@ -2653,8 +2606,6 @@
}
- // TODO : remove TC_API_054
- /** This test case is added with Test case ID TC_API_010 */
/**
* To test: Need a basic test case for the get value for TransitionAlpha
@@ -2662,7 +2613,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_055
@LargeTest
public void testTransitionAlphaBasic() throws Exception {
@@ -2700,7 +2650,6 @@
*
* @throws Exception
*/
- // TODO : remove TC_API_056
@LargeTest
public void testNullAPIs() throws Exception {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
index 57a1c75..69ecf0d 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
@@ -91,7 +91,6 @@
/**
* To Test export : Merge and Trim different types of Video and Image files
*/
- // TODO :remove TC_EXP_001
@LargeTest
public void testExportMergeTrim() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH
@@ -173,7 +172,6 @@
/**
*To Test export : With Effect and Overlays on Different Media Items
*/
- // TODO :remove TC_EXP_002
@LargeTest
public void testExportEffectOverlay() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH
@@ -301,7 +299,6 @@
/**
* To test export : with Image with KenBurnEffect
*/
- // TODO : remove TC_EXP_003
@LargeTest
public void testExportEffectKenBurn() throws Exception {
final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -359,7 +356,6 @@
/**
* To Test Export : With Video and Image and An Audio BackGround Track
*/
- // TODO : remove TC_EXP_004
@LargeTest
public void testExportAudio() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -420,7 +416,6 @@
/**
*To Test export : With Transition on Different Media Items
*/
- // TODO :remove TC_EXP_005
@LargeTest
public void testExportTransition() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH
@@ -540,7 +535,6 @@
*
* @throws Exception
*/
- // TODO :remove TC_EXP_006
@LargeTest
public void testExportWithoutMediaItems() throws Exception {
boolean flagForException = false;
@@ -566,7 +560,6 @@
*
* @throws Exception
*/
- // TODO :remove TC_EXP_007
@LargeTest
public void testExportWithoutMediaItemsAddRemove() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -621,7 +614,6 @@
*
* @throws Exception
*/
- // TODO :remove TC_EXP_008
@LargeTest
public void testExportMMS() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
index 4181903..7965b0a 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
@@ -216,7 +216,6 @@
/**
*To test Preview : FULL Preview of current work (beginning till end)
*/
- // TODO : remove TC_PRV_001
@LargeTest
public void testPreviewTheStoryBoard() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH
@@ -275,7 +274,6 @@
/**
* To test Preview : Preview of start + 10 sec till end of story board
*/
- // TODO : remove TC_PRV_002
@LargeTest
public void testPreviewTheStoryBoardFromDuration() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH
@@ -336,7 +334,6 @@
/**
* To test Preview : Preview of current Effects applied
*/
- // TODO : remove TC_PRV_003
@LargeTest
public void testPreviewOfEffects() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH +
@@ -394,7 +391,6 @@
*To test Preview : Preview of current Transitions applied (with multiple
* generatePreview)
*/
- // TODO : remove TC_PRV_004
@LargeTest
public void testPreviewWithTransition() throws Exception {
@@ -547,7 +543,6 @@
/**
* To test Preview : Preview of current Overlay applied
*/
- // TODO : remove TC_PRV_005
@LargeTest
public void testPreviewWithOverlay() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH
@@ -601,7 +596,6 @@
* To test Preview : Preview of current Trim applied (with default aspect
* ratio)
*/
- // TODO : remove TC_PRV_006
@LargeTest
public void testPreviewWithTrim() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -625,7 +619,6 @@
* applied
*/
- // TODO : remove TC_PRV_007
@LargeTest
public void testPreviewWithOverlayEffectKenBurn() throws Exception {
@@ -684,7 +677,6 @@
/**
*To test Preview : Export during preview
*/
- // TODO : remove TC_PRV_008
@LargeTest
public void testPreviewDuringExport() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -765,7 +757,6 @@
* To test Preview : Preview of current Effects applied (with from time >
* total duration)
*/
- // TODO : remove TC_PRV_009
@LargeTest
public void testPreviewWithDurationGreaterThanMediaDuration()
throws Exception {
@@ -826,7 +817,6 @@
* To test Preview : Preview of current Effects applied (with Render Preview
* Frame)
*/
- // TODO : remove TC_PRV_010
@LargeTest
public void testPreviewWithRenderPreviewFrame() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
@@ -873,7 +863,6 @@
* To test Preview : Preview of current work from selected jump location
* till end with Audio Track
*/
- // TODO : remove TC_PRV_011
@LargeTest
public void testPreviewWithEndAudioTrack() throws Exception {
final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -917,7 +906,6 @@
/**
* To test render Preview Frame
*/
- // TODO : remove TC_PRV_012
@LargeTest
public void testRenderPreviewFrame() throws Exception {
final String videoItemFileName1 = INPUT_FILE_PATH
@@ -1031,7 +1019,6 @@
/**
* To Test Preview : Without any Media Items in the story Board
*/
- // TODO : remove TC_PRV_013
@LargeTest
public void testStartPreviewWithoutMediaItems() throws Exception {
boolean flagForException = false;
@@ -1064,7 +1051,6 @@
* To Test Preview : Add Media and Remove Media Item (Without any Media
* Items in the story Board)
*/
- // TODO : remove TC_PRV_014
@LargeTest
public void testStartPreviewAddRemoveMediaItems() throws Exception {
final String videoItemFilename1 = INPUT_FILE_PATH
@@ -1134,7 +1120,6 @@
* To test Preview : Preview of current Effects applied (with Render Preview
* Frame)
*/
- // TODO : remove TC_PRV_015
@LargeTest
public void testPreviewWithRenderPreviewFrameWithoutGenerate() throws Exception {
final String videoItemFileName = INPUT_FILE_PATH +
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
index 3d0be4f..6f1959c 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
@@ -931,7 +931,6 @@
/**
*To test ThumbnailList for H264
*/
- // TODO : TC_PRF_12
@LargeTest
public void testThumbnailH264NonIFrame() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
@@ -962,7 +961,6 @@
/**
*To test ThumbnailList for H264
*/
- // TODO : TC_PRF_13
@LargeTest
public void testThumbnailH264AnIFrame() throws Exception {
final String videoItemFilename = INPUT_FILE_PATH +
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index 975c372..cc07240 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -55,6 +55,7 @@
float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
boolean mSupportsLongpress = true;
RectF mRect = new RectF(0f,0f,0f,0f);
+ AnimatorSet mPressedAnim;
Runnable mCheckLongPress = new Runnable() {
public void run() {
@@ -173,7 +174,10 @@
public void setPressed(boolean pressed) {
if (mGlowBG != null) {
if (pressed != isPressed()) {
- AnimatorSet as = new AnimatorSet();
+ if (mPressedAnim != null && mPressedAnim.isRunning()) {
+ mPressedAnim.cancel();
+ }
+ final AnimatorSet as = mPressedAnim = new AnimatorSet();
if (pressed) {
if (mGlowScale < GLOW_MAX_SCALE_FACTOR)
mGlowScale = GLOW_MAX_SCALE_FACTOR;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index d9114a5..666d696 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -913,6 +913,9 @@
combinedActivityIconId = mMobileActivityIconId;
combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon()
mContentDescriptionCombinedSignal = mContentDescriptionDataType;
+ } else {
+ mobileLabel = mHasMobileDataFeature ?
+ context.getString(R.string.status_bar_settings_signal_meter_disconnected) : "";
}
if (mWifiConnected) {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index b440bde..43a34d0 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -3647,6 +3647,12 @@
}
};
+ public void lockNow() {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
+ mHandler.removeCallbacks(mScreenLockTimeout);
+ mHandler.post(mScreenLockTimeout);
+ }
+
private void updateLockScreenTimeout() {
synchronized (mScreenLockTimeout) {
boolean enable = (mAllowLockscreenWhenOn && mScreenOnEarly && mKeyguardMediator.isSecure());
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 593f558..f5892d4 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -37,8 +37,6 @@
#include <cutils/properties.h>
#include <cutils/compiler.h>
-#include <media/AudioTrack.h>
-#include <media/AudioRecord.h>
#include <media/IMediaPlayerService.h>
#include <media/IMediaDeathNotifier.h>
@@ -72,7 +70,7 @@
//static const nsecs_t kStandbyTimeInNsecs = seconds(3);
static const float MAX_GAIN = 4096.0f;
-static const float MAX_GAIN_INT = 0x1000;
+static const uint32_t MAX_GAIN_INT = 0x1000;
// retry counts for buffer fill timeout
// 50 * ~20msecs = 1 second
@@ -331,7 +329,7 @@
status_t AudioFlinger::dump(int fd, const Vector<String16>& args)
{
- if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
+ if (!checkCallingPermission(String16("android.permission.DUMP"))) {
dumpPermissionDenial(fd, args);
} else {
// get state of hardware lock
@@ -382,7 +380,7 @@
pid_t pid,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -502,13 +500,13 @@
return thread->channelCount();
}
-uint32_t AudioFlinger::format(int output) const
+audio_format_t AudioFlinger::format(int output) const
{
Mutex::Autolock _l(mLock);
PlaybackThread *thread = checkPlaybackThread_l(output);
if (thread == NULL) {
ALOGW("format() unknown thread %d", output);
- return 0;
+ return AUDIO_FORMAT_INVALID;
}
return thread->format();
}
@@ -801,7 +799,7 @@
thread = checkPlaybackThread_l(ioHandle);
if (thread == NULL) {
thread = checkRecordThread_l(ioHandle);
- } else if (thread.get() == primaryPlaybackThread_l()) {
+ } else if (thread == primaryPlaybackThread_l()) {
// indicate output device change to all input threads for pre processing
AudioParameter param = AudioParameter(keyValuePairs);
int value;
@@ -849,7 +847,7 @@
return String8("");
}
-size_t AudioFlinger::getInputBufferSize(uint32_t sampleRate, int format, int channelCount)
+size_t AudioFlinger::getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount)
{
status_t ret = initCheck();
if (ret != NO_ERROR) {
@@ -990,7 +988,7 @@
AudioFlinger::ThreadBase::ThreadBase(const sp<AudioFlinger>& audioFlinger, int id, uint32_t device)
: Thread(false),
mAudioFlinger(audioFlinger), mSampleRate(0), mFrameCount(0), mChannelCount(0),
- mFrameSize(1), mFormat(0), mStandby(false), mId(id), mExiting(false),
+ mFrameSize(1), mFormat(AUDIO_FORMAT_INVALID), mStandby(false), mId(id), mExiting(false),
mDevice(device)
{
mDeathRecipient = new PMDeathRecipient(this);
@@ -1033,7 +1031,7 @@
return (int)mChannelCount;
}
-uint32_t AudioFlinger::ThreadBase::format() const
+audio_format_t AudioFlinger::ThreadBase::format() const
{
return mFormat;
}
@@ -1495,7 +1493,7 @@
const sp<AudioFlinger::Client>& client,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
const sp<IMemory>& sharedBuffer,
@@ -1849,7 +1847,7 @@
AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device)
: PlaybackThread(audioFlinger, output, id, device),
- mAudioMixer(NULL)
+ mAudioMixer(NULL), mPrevMixerStatus(MIXER_IDLE)
{
mType = ThreadBase::MIXER;
mAudioMixer = new AudioMixer(mFrameCount, mSampleRate);
@@ -1962,7 +1960,8 @@
ALOGV("MixerThread %p TID %d waking up\n", this, gettid());
acquireWakeLock_l();
- if (mMasterMute == false) {
+ mPrevMixerStatus = MIXER_IDLE;
+ if (!mMasterMute) {
char value[PROPERTY_VALUE_MAX];
property_get("ro.audio.silent", value, "0");
if (atoi(value)) {
@@ -2121,11 +2120,11 @@
// make sure that we have enough frames to mix one full buffer.
// enforce this condition only once to enable draining the buffer in case the client
// app does not call stop() and relies on underrun to stop:
- // hence the test on (track->mRetryCount >= kMaxTrackRetries) meaning the track was mixed
+ // hence the test on (mPrevMixerStatus == MIXER_TRACKS_READY) meaning the track was mixed
// during last round
uint32_t minFrames = 1;
if (!track->isStopped() && !track->isPausing() &&
- (track->mRetryCount >= kMaxTrackRetries)) {
+ (mPrevMixerStatus == MIXER_TRACKS_READY)) {
if (t->sampleRate() == (int)mSampleRate) {
minFrames = mFrameCount;
} else {
@@ -2190,14 +2189,29 @@
// read original volumes with volume control
float typeVolume = mStreamTypes[track->type()].volume;
float v = masterVolume * typeVolume;
- vl = (uint32_t)(v * cblk->volume[0]) << 12;
- vr = (uint32_t)(v * cblk->volume[1]) << 12;
+ uint32_t vlr = cblk->volumeLR;
+ vl = vlr & 0xFFFF;
+ vr = vlr >> 16;
+ // track volumes come from shared memory, so can't be trusted and must be clamped
+ if (vl > MAX_GAIN_INT) {
+ ALOGV("Track left volume out of range: %04X", vl);
+ vl = MAX_GAIN_INT;
+ }
+ if (vr > MAX_GAIN_INT) {
+ ALOGV("Track right volume out of range: %04X", vr);
+ vr = MAX_GAIN_INT;
+ }
+ // now apply the master volume and stream type volume
+ vl = (uint32_t)(v * vl) << 12;
+ vr = (uint32_t)(v * vr) << 12;
+ // assuming master volume and stream type volume each go up to 1.0,
+ // vl and vr are now in 8.24 format
uint16_t sendLevel = cblk->getSendLevel_U4_12();
// send level comes from shared memory and so may be corrupt
- if (sendLevel >= 0x1000) {
+ if (sendLevel >= MAX_GAIN_INT) {
ALOGV("Track send level out of range: %04X", sendLevel);
- sendLevel = 0x1000;
+ sendLevel = MAX_GAIN_INT;
}
va = (uint32_t)(v * sendLevel);
}
@@ -2217,6 +2231,7 @@
// Convert volumes from 8.24 to 4.12 format
int16_t left, right, aux;
+ // This additional clamping is needed in case chain->setVolume_l() overshot
uint32_t v_clamped = (vl + (1 << 11)) >> 12;
if (v_clamped > MAX_GAIN_INT) v_clamped = MAX_GAIN_INT;
left = int16_t(v_clamped);
@@ -2258,7 +2273,13 @@
// reset retry count
track->mRetryCount = kMaxTrackRetries;
- mixerStatus = MIXER_TRACKS_READY;
+ // If one track is ready, set the mixer ready if:
+ // - the mixer was not ready during previous round OR
+ // - no other track is not ready
+ if (mPrevMixerStatus != MIXER_TRACKS_READY ||
+ mixerStatus != MIXER_TRACKS_ENABLED) {
+ mixerStatus = MIXER_TRACKS_READY;
+ }
} else {
//ALOGV("track %d u=%08x, s=%08x [NOT READY] on thread %p", name, cblk->user, cblk->server, this);
if (track->isStopped()) {
@@ -2276,7 +2297,11 @@
tracksToRemove->add(track);
// indicate to client process that the track was disabled because of underrun
android_atomic_or(CBLK_DISABLED_ON, &cblk->flags);
- } else if (mixerStatus != MIXER_TRACKS_READY) {
+ // If one track is not ready, mark the mixer also not ready if:
+ // - the mixer was ready during previous round OR
+ // - no other track is ready
+ } else if (mPrevMixerStatus == MIXER_TRACKS_READY ||
+ mixerStatus != MIXER_TRACKS_READY) {
mixerStatus = MIXER_TRACKS_ENABLED;
}
}
@@ -2310,6 +2335,7 @@
memset(mMixBuffer, 0, mFrameCount * mChannelCount * sizeof(int16_t));
}
+ mPrevMixerStatus = mixerStatus;
return mixerStatus;
}
@@ -2366,7 +2392,7 @@
reconfig = true;
}
if (param.getInt(String8(AudioParameter::keyFormat), value) == NO_ERROR) {
- if (value != AUDIO_FORMAT_PCM_16_BIT) {
+ if ((audio_format_t) value != AUDIO_FORMAT_PCM_16_BIT) {
status = BAD_VALUE;
} else {
reconfig = true;
@@ -2643,7 +2669,7 @@
ALOGV("DirectOutputThread %p TID %d waking up in active mode\n", this, gettid());
acquireWakeLock_l();
- if (mMasterMute == false) {
+ if (!mMasterMute) {
char value[PROPERTY_VALUE_MAX];
property_get("ro.audio.silent", value, "0");
if (atoi(value)) {
@@ -2699,10 +2725,11 @@
} else {
float typeVolume = mStreamTypes[track->type()].volume;
float v = mMasterVolume * typeVolume;
- float v_clamped = v * cblk->volume[0];
+ uint32_t vlr = cblk->volumeLR;
+ float v_clamped = v * (vlr & 0xFFFF);
if (v_clamped > MAX_GAIN) v_clamped = MAX_GAIN;
left = v_clamped/MAX_GAIN;
- v_clamped = v * cblk->volume[1];
+ v_clamped = v * (vlr >> 16);
if (v_clamped > MAX_GAIN) v_clamped = MAX_GAIN;
right = v_clamped/MAX_GAIN;
}
@@ -3037,7 +3064,8 @@
ALOGV("DuplicatingThread %p TID %d waking up\n", this, gettid());
acquireWakeLock_l();
- if (mMasterMute == false) {
+ mPrevMixerStatus = MIXER_IDLE;
+ if (!mMasterMute) {
char value[PROPERTY_VALUE_MAX];
property_get("ro.audio.silent", value, "0");
if (atoi(value)) {
@@ -3203,7 +3231,7 @@
const wp<ThreadBase>& thread,
const sp<Client>& client,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -3365,7 +3393,7 @@
const sp<Client>& client,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
const sp<IMemory>& sharedBuffer,
@@ -3436,6 +3464,7 @@
void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size)
{
+ uint32_t vlr = mCblk->volumeLR;
snprintf(buffer, size, " %05d %05d %03u %03u 0x%08x %05u %04u %1d %1d %1d %05u %05u %05u 0x%08x 0x%08x 0x%08x 0x%08x\n",
mName - AudioMixer::TRACK0,
(mClient == NULL) ? getpid() : mClient->pid(),
@@ -3448,8 +3477,8 @@
mMute,
mFillingUpStatus,
mCblk->sampleRate,
- mCblk->volume[0],
- mCblk->volume[1],
+ vlr & 0xFFFF,
+ vlr >> 16,
mCblk->server,
mCblk->user,
(int)mMainBuffer,
@@ -3670,7 +3699,7 @@
const wp<ThreadBase>& thread,
const sp<Client>& client,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -3783,7 +3812,7 @@
const wp<ThreadBase>& thread,
DuplicatingThread *sourceThread,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount)
: Track(thread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelMask, frameCount, NULL, 0),
@@ -3794,7 +3823,7 @@
if (mCblk != NULL) {
mCblk->flags |= CBLK_DIRECTION_OUT;
mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);
- mCblk->volume[0] = mCblk->volume[1] = 0x1000;
+ mCblk->volumeLR = (MAX_GAIN_INT << 16) | MAX_GAIN_INT;
mOutBuffer.frameCount = 0;
playbackThread->mTracks.add(this);
ALOGV("OutputTrack constructor mCblk %p, mBuffer %p, mCblk->buffers %p, " \
@@ -3878,7 +3907,7 @@
if (mOutBuffer.frameCount == 0) {
mOutBuffer.frameCount = pInBuffer->frameCount;
nsecs_t startTime = systemTime();
- if (obtainBuffer(&mOutBuffer, waitTimeLeftMs) == (status_t)AudioTrack::NO_MORE_BUFFERS) {
+ if (obtainBuffer(&mOutBuffer, waitTimeLeftMs) == (status_t)NO_MORE_BUFFERS) {
ALOGV ("OutputTrack::write() %p thread %p no more output buffers", this, mThread.unsafe_get());
outputBufferFull = true;
break;
@@ -3969,11 +3998,11 @@
active = mActive;
if (CC_UNLIKELY(!active)) {
ALOGV("Not active and NO_MORE_BUFFERS");
- return AudioTrack::NO_MORE_BUFFERS;
+ return NO_MORE_BUFFERS;
}
result = cblk->cv.waitRelative(cblk->lock, milliseconds(waitTimeMs));
if (result != NO_ERROR) {
- return AudioTrack::NO_MORE_BUFFERS;
+ return NO_MORE_BUFFERS;
}
// read the server count again
start_loop_here:
@@ -3982,7 +4011,7 @@
}
// if (framesAvail < framesReq) {
-// return AudioTrack::NO_MORE_BUFFERS;
+// return NO_MORE_BUFFERS;
// }
if (framesReq > framesAvail) {
@@ -4116,7 +4145,7 @@
pid_t pid,
int input,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -4461,7 +4490,7 @@
sp<AudioFlinger::RecordThread::RecordTrack> AudioFlinger::RecordThread::createRecordTrack_l(
const sp<AudioFlinger::Client>& client,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
int channelMask,
int frameCount,
uint32_t flags,
@@ -4673,7 +4702,7 @@
String8 keyValuePair = mNewParameters[0];
AudioParameter param = AudioParameter(keyValuePair);
int value;
- int reqFormat = mFormat;
+ audio_format_t reqFormat = mFormat;
int reqSamplingRate = mReqSampleRate;
int reqChannelCount = mReqChannelCount;
@@ -4682,7 +4711,7 @@
reconfig = true;
}
if (param.getInt(String8(AudioParameter::keyFormat), value) == NO_ERROR) {
- reqFormat = value;
+ reqFormat = (audio_format_t) value;
reconfig = true;
}
if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) {
@@ -4893,7 +4922,7 @@
int AudioFlinger::openOutput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
uint32_t flags)
@@ -4902,7 +4931,7 @@
PlaybackThread *thread = NULL;
mHardwareStatus = AUDIO_HW_OUTPUT_OPEN;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
- uint32_t format = pFormat ? *pFormat : 0;
+ audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
uint32_t channels = pChannels ? *pChannels : 0;
uint32_t latency = pLatencyMs ? *pLatencyMs : 0;
audio_stream_out_t *outStream;
@@ -4925,7 +4954,7 @@
if (outHwDev == NULL)
return 0;
- status = outHwDev->open_output_stream(outHwDev, *pDevices, (int *)&format,
+ status = outHwDev->open_output_stream(outHwDev, *pDevices, &format,
&channels, &samplingRate, &outStream);
ALOGV("openOutput() openOutputStream returned output %p, SamplingRate %d, Format %d, Channels %x, status %d",
outStream,
@@ -5053,17 +5082,17 @@
int AudioFlinger::openInput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t acoustics)
{
status_t status;
RecordThread *thread = NULL;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
- uint32_t format = pFormat ? *pFormat : 0;
+ audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
uint32_t channels = pChannels ? *pChannels : 0;
uint32_t reqSamplingRate = samplingRate;
- uint32_t reqFormat = format;
+ audio_format_t reqFormat = format;
uint32_t reqChannels = channels;
audio_stream_in_t *inStream;
audio_hw_device_t *inHwDev;
@@ -5078,7 +5107,7 @@
if (inHwDev == NULL)
return 0;
- status = inHwDev->open_input_stream(inHwDev, *pDevices, (int *)&format,
+ status = inHwDev->open_input_stream(inHwDev, *pDevices, &format,
&channels, &samplingRate,
(audio_in_acoustics_t)acoustics,
&inStream);
@@ -5098,7 +5127,7 @@
(samplingRate <= 2 * reqSamplingRate) &&
(popcount(channels) < 3) && (popcount(reqChannels) < 3)) {
ALOGV("openInput() reopening with proposed sampling rate and channels");
- status = inHwDev->open_input_stream(inHwDev, *pDevices, (int *)&format,
+ status = inHwDev->open_input_stream(inHwDev, *pDevices, &format,
&channels, &samplingRate,
(audio_in_acoustics_t)acoustics,
&inStream);
@@ -5729,7 +5758,7 @@
effect = chain->getEffectFromDesc_l(desc);
}
- ALOGV("createEffect_l() got effect %p on chain %p", effect == 0 ? 0 : effect.get(), chain.get());
+ ALOGV("createEffect_l() got effect %p on chain %p", effect.get(), chain.get());
if (effect == 0) {
int id = mAudioFlinger->nextUniqueId();
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 275f40e..48edfcd 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -26,7 +26,7 @@
#include <media/IAudioFlingerClient.h>
#include <media/IAudioTrack.h>
#include <media/IAudioRecord.h>
-#include <media/AudioTrack.h>
+#include <media/AudioSystem.h>
#include <utils/Atomic.h>
#include <utils/Errors.h>
@@ -72,7 +72,7 @@
pid_t pid,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -83,7 +83,7 @@
virtual uint32_t sampleRate(int output) const;
virtual int channelCount(int output) const;
- virtual uint32_t format(int output) const;
+ virtual audio_format_t format(int output) const;
virtual size_t frameCount(int output) const;
virtual uint32_t latency(int output) const;
@@ -109,12 +109,12 @@
virtual void registerClient(const sp<IAudioFlingerClient>& client);
- virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount);
+ virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount);
virtual unsigned int getInputFramesLost(int ioHandle);
virtual int openOutput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
uint32_t flags);
@@ -129,7 +129,7 @@
virtual int openInput(uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t acoustics);
@@ -189,7 +189,7 @@
pid_t pid,
int input,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -207,6 +207,7 @@
bool btNrecIsOff() { return mBtNrecIsOff; }
private:
+
AudioFlinger();
virtual ~AudioFlinger();
@@ -315,7 +316,7 @@
TrackBase(const wp<ThreadBase>& thread,
const sp<Client>& client,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -343,7 +344,7 @@
virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer) = 0;
virtual void releaseBuffer(AudioBufferProvider::Buffer* buffer);
- uint32_t format() const {
+ audio_format_t format() const {
return mFormat;
}
@@ -376,7 +377,7 @@
// we don't really need a lock for these
int mState;
int mClientTid;
- uint32_t mFormat;
+ audio_format_t mFormat;
uint32_t mFlags;
int mSessionId;
uint8_t mChannelCount;
@@ -410,7 +411,7 @@
int type() const { return mType; }
uint32_t sampleRate() const;
int channelCount() const;
- uint32_t format() const;
+ audio_format_t format() const;
size_t frameCount() const;
void wakeUp() { mWaitWorkCV.broadcast(); }
void exit();
@@ -537,7 +538,7 @@
uint32_t mChannelMask;
uint16_t mChannelCount;
size_t mFrameSize;
- uint32_t mFormat;
+ audio_format_t mFormat;
Condition mParamCond;
Vector<String8> mNewParameters;
status_t mParamStatus;
@@ -575,7 +576,7 @@
const sp<Client>& client,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
const sp<IMemory>& sharedBuffer,
@@ -660,7 +661,7 @@
OutputTrack( const wp<ThreadBase>& thread,
DuplicatingThread *sourceThread,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount);
~OutputTrack();
@@ -674,6 +675,10 @@
private:
+ enum {
+ NO_MORE_BUFFERS = 0x80000001, // same in AudioTrack.h, ok to be different value
+ };
+
status_t obtainBuffer(AudioBufferProvider::Buffer* buffer, uint32_t waitTimeMs);
void clearBufferQueue();
@@ -715,7 +720,7 @@
const sp<AudioFlinger::Client>& client,
audio_stream_type_t streamType,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
const sp<IMemory>& sharedBuffer,
@@ -830,7 +835,9 @@
virtual uint32_t idleSleepTimeUs();
virtual uint32_t suspendSleepTimeUs();
- AudioMixer* mAudioMixer;
+ AudioMixer* mAudioMixer;
+ uint32_t mPrevMixerStatus; // previous status (mixer_state) returned by
+ // prepareTracks_l()
};
class DirectOutputThread : public PlaybackThread {
@@ -933,7 +940,7 @@
RecordTrack(const wp<ThreadBase>& thread,
const sp<Client>& client,
uint32_t sampleRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channelMask,
int frameCount,
uint32_t flags,
@@ -977,7 +984,7 @@
sp<AudioFlinger::RecordThread::RecordTrack> createRecordTrack_l(
const sp<AudioFlinger::Client>& client,
uint32_t sampleRate,
- int format,
+ audio_format_t format,
int channelMask,
int frameCount,
uint32_t flags,
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index c69944a..28b1c89 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -43,11 +43,11 @@
namespace android {
-static const char *kDeadlockedString = "AudioPolicyService may be deadlocked\n";
-static const char *kCmdDeadlockedString = "AudioPolicyService command thread may be deadlocked\n";
+static const char kDeadlockedString[] = "AudioPolicyService may be deadlocked\n";
+static const char kCmdDeadlockedString[] = "AudioPolicyService command thread may be deadlocked\n";
static const int kDumpLockRetries = 50;
-static const int kDumpLockSleep = 20000;
+static const int kDumpLockSleepUs = 20000;
static bool checkPermission() {
if (getpid() == IPCThreadState::self()->getCallingPid()) return true;
@@ -207,19 +207,6 @@
return NO_ERROR;
}
-status_t AudioPolicyService::setRingerMode(uint32_t mode, uint32_t mask)
-{
- if (mpAudioPolicy == NULL) {
- return NO_INIT;
- }
- if (!checkPermission()) {
- return PERMISSION_DENIED;
- }
-
- mpAudioPolicy->set_ringer_mode(mpAudioPolicy, mode, mask);
- return NO_ERROR;
-}
-
status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage,
audio_policy_forced_cfg_t config)
{
@@ -254,7 +241,7 @@
audio_io_handle_t AudioPolicyService::getOutput(audio_stream_type_t stream,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_policy_output_flags_t flags)
{
@@ -302,7 +289,7 @@
audio_io_handle_t AudioPolicyService::getInput(int inputSource,
uint32_t samplingRate,
- uint32_t format,
+ audio_format_t format,
uint32_t channels,
audio_in_acoustics_t acoustics,
int audioSession)
@@ -407,7 +394,9 @@
return NO_ERROR;
}
-status_t AudioPolicyService::setStreamVolumeIndex(audio_stream_type_t stream, int index)
+status_t AudioPolicyService::setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device)
{
if (mpAudioPolicy == NULL) {
return NO_INIT;
@@ -419,10 +408,19 @@
return BAD_VALUE;
}
- return mpAudioPolicy->set_stream_volume_index(mpAudioPolicy, stream, index);
+ if (mpAudioPolicy->set_stream_volume_index_for_device) {
+ return mpAudioPolicy->set_stream_volume_index_for_device(mpAudioPolicy,
+ stream,
+ index,
+ device);
+ } else {
+ return mpAudioPolicy->set_stream_volume_index(mpAudioPolicy, stream, index);
+ }
}
-status_t AudioPolicyService::getStreamVolumeIndex(audio_stream_type_t stream, int *index)
+status_t AudioPolicyService::getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device)
{
if (mpAudioPolicy == NULL) {
return NO_INIT;
@@ -430,7 +428,14 @@
if (uint32_t(stream) >= AUDIO_STREAM_CNT) {
return BAD_VALUE;
}
- return mpAudioPolicy->get_stream_volume_index(mpAudioPolicy, stream, index);
+ if (mpAudioPolicy->get_stream_volume_index_for_device) {
+ return mpAudioPolicy->get_stream_volume_index_for_device(mpAudioPolicy,
+ stream,
+ index,
+ device);
+ } else {
+ return mpAudioPolicy->get_stream_volume_index(mpAudioPolicy, stream, index);
+ }
}
uint32_t AudioPolicyService::getStrategyForStream(audio_stream_type_t stream)
@@ -545,7 +550,7 @@
locked = true;
break;
}
- usleep(kDumpLockSleep);
+ usleep(kDumpLockSleepUs);
}
return locked;
}
@@ -569,7 +574,7 @@
status_t AudioPolicyService::dump(int fd, const Vector<String16>& args)
{
- if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
+ if (!checkCallingPermission(String16("android.permission.DUMP"))) {
dumpPermissionDenial(fd);
} else {
bool locked = tryLock(mLock);
@@ -1051,7 +1056,7 @@
// Audio pre-processing configuration
// ----------------------------------------------------------------------------
-const char *AudioPolicyService::kInputSourceNames[AUDIO_SOURCE_CNT -1] = {
+/*static*/ const char * const AudioPolicyService::kInputSourceNames[AUDIO_SOURCE_CNT -1] = {
MIC_SRC_TAG,
VOICE_UL_SRC_TAG,
VOICE_DL_SRC_TAG,
@@ -1347,7 +1352,7 @@
static audio_io_handle_t aps_open_output(void *service,
uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
audio_policy_output_flags_t flags)
@@ -1408,7 +1413,7 @@
static audio_io_handle_t aps_open_input(void *service,
uint32_t *pDevices,
uint32_t *pSamplingRate,
- uint32_t *pFormat,
+ audio_format_t *pFormat,
uint32_t *pChannels,
uint32_t acoustics)
{
diff --git a/services/audioflinger/AudioPolicyService.h b/services/audioflinger/AudioPolicyService.h
index 127f1ec..9811670 100644
--- a/services/audioflinger/AudioPolicyService.h
+++ b/services/audioflinger/AudioPolicyService.h
@@ -59,12 +59,11 @@
audio_devices_t device,
const char *device_address);
virtual status_t setPhoneState(audio_mode_t state);
- virtual status_t setRingerMode(uint32_t mode, uint32_t mask);
virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
virtual audio_io_handle_t getOutput(audio_stream_type_t stream,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
audio_policy_output_flags_t flags =
AUDIO_POLICY_OUTPUT_FLAG_INDIRECT);
@@ -77,7 +76,7 @@
virtual void releaseOutput(audio_io_handle_t output);
virtual audio_io_handle_t getInput(int inputSource,
uint32_t samplingRate = 0,
- uint32_t format = AUDIO_FORMAT_DEFAULT,
+ audio_format_t format = AUDIO_FORMAT_DEFAULT,
uint32_t channels = 0,
audio_in_acoustics_t acoustics =
(audio_in_acoustics_t)0,
@@ -88,8 +87,12 @@
virtual status_t initStreamVolume(audio_stream_type_t stream,
int indexMin,
int indexMax);
- virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index);
- virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index);
+ virtual status_t setStreamVolumeIndex(audio_stream_type_t stream,
+ int index,
+ audio_devices_t device);
+ virtual status_t getStreamVolumeIndex(audio_stream_type_t stream,
+ int *index,
+ audio_devices_t device);
virtual uint32_t getStrategyForStream(audio_stream_type_t stream);
virtual uint32_t getDevicesForStream(audio_stream_type_t stream);
@@ -250,7 +253,7 @@
Vector< sp<AudioEffect> >mEffects;
};
- static const char *kInputSourceNames[AUDIO_SOURCE_CNT -1];
+ static const char * const kInputSourceNames[AUDIO_SOURCE_CNT -1];
void setPreProcessorEnabled(InputDesc *inputDesc, bool enabled);
status_t loadPreProcessorConfig(const char *path);
diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h
index 34087b5..2ac69f7 100644
--- a/services/camera/libcameraservice/CameraHardwareInterface.h
+++ b/services/camera/libcameraservice/CameraHardwareInterface.h
@@ -635,6 +635,12 @@
return native_window_set_crop(a, &crop);
}
+ static int __set_timestamp(struct preview_stream_ops *w,
+ int64_t timestamp) {
+ ANativeWindow *a = anw(w);
+ return native_window_set_buffers_timestamp(a, timestamp);
+ }
+
static int __set_usage(struct preview_stream_ops* w, int usage)
{
ANativeWindow *a = anw(w);
@@ -664,6 +670,7 @@
mHalPreviewWindow.nw.set_buffer_count = __set_buffer_count;
mHalPreviewWindow.nw.set_buffers_geometry = __set_buffers_geometry;
mHalPreviewWindow.nw.set_crop = __set_crop;
+ mHalPreviewWindow.nw.set_timestamp = __set_timestamp;
mHalPreviewWindow.nw.set_usage = __set_usage;
mHalPreviewWindow.nw.set_swap_interval = __set_swap_interval;
diff --git a/services/input/EventHub.cpp b/services/input/EventHub.cpp
index 68bbb570..1f8cf63 100644
--- a/services/input/EventHub.cpp
+++ b/services/input/EventHub.cpp
@@ -156,8 +156,6 @@
mPendingEventCount(0), mPendingEventIndex(0), mPendingINotify(false) {
acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_ID);
- mNumCpus = sysconf(_SC_NPROCESSORS_ONLN);
-
mEpollFd = epoll_create(EPOLL_SIZE_HINT);
LOG_ALWAYS_FATAL_IF(mEpollFd < 0, "Could not create epoll instance. errno=%d", errno);
@@ -648,8 +646,9 @@
sizeof(struct input_event) * capacity);
if (readSize == 0 || (readSize < 0 && errno == ENODEV)) {
// Device was removed before INotify noticed.
- ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d capacity: %d errno: %d)\n",
- device->fd, readSize, bufferSize, capacity, errno);
+ ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d "
+ "capacity: %d errno: %d)\n",
+ device->fd, readSize, bufferSize, capacity, errno);
deviceChanged = true;
closeDeviceLocked(device);
} else if (readSize < 0) {
@@ -774,19 +773,6 @@
} else {
// Some events occurred.
mPendingEventCount = size_t(pollResult);
-
- // On an SMP system, it is possible for the framework to read input events
- // faster than the kernel input device driver can produce a complete packet.
- // Because poll() wakes up as soon as the first input event becomes available,
- // the framework will often end up reading one event at a time until the
- // packet is complete. Instead of one call to read() returning 71 events,
- // it could take 71 calls to read() each returning 1 event.
- //
- // Sleep for a short period of time after waking up from the poll() to give
- // the kernel time to finish writing the entire packet of input events.
- if (mNumCpus > 1) {
- usleep(250);
- }
}
}
diff --git a/services/input/EventHub.h b/services/input/EventHub.h
index 9d8252e..8a2afd3 100644
--- a/services/input/EventHub.h
+++ b/services/input/EventHub.h
@@ -367,9 +367,6 @@
size_t mPendingEventCount;
size_t mPendingEventIndex;
bool mPendingINotify;
-
- // Set to the number of CPUs.
- int32_t mNumCpus;
};
}; // namespace android
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 4d5e0a6..31515e1 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -140,6 +140,8 @@
static final int BACKUP_FILE_VERSION = 1;
static final boolean COMPRESS_FULL_BACKUPS = true; // should be true in production
+ static final String SHARED_BACKUP_AGENT_PACKAGE = "com.android.sharedstoragebackup";
+
// How often we perform a backup pass. Privileged external callers can
// trigger an immediate pass.
private static final long BACKUP_INTERVAL = AlarmManager.INTERVAL_HOUR;
@@ -235,6 +237,10 @@
volatile long mLastBackupPass;
volatile long mNextBackupPass;
+ // For debugging, we maintain a progress trace of operations during backup
+ static final boolean DEBUG_BACKUP_TRACE = true;
+ final List<String> mBackupTrace = new ArrayList<String>();
+
// A similar synchronization mechanism around clearing apps' data for restore
final Object mClearDataLock = new Object();
volatile boolean mClearingData;
@@ -652,6 +658,23 @@
}
}
+ // ----- Debug-only backup operation trace -----
+ void addBackupTrace(String s) {
+ if (DEBUG_BACKUP_TRACE) {
+ synchronized (mBackupTrace) {
+ mBackupTrace.add(s);
+ }
+ }
+ }
+
+ void clearBackupTrace() {
+ if (DEBUG_BACKUP_TRACE) {
+ synchronized (mBackupTrace) {
+ mBackupTrace.clear();
+ }
+ }
+ }
+
// ----- Main service implementation -----
public BackupManagerService(Context context) {
@@ -1612,6 +1635,7 @@
mAgentConnectLock.wait(5000);
} catch (InterruptedException e) {
// just bail
+ if (DEBUG) Slog.w(TAG, "Interrupted: " + e);
return null;
}
}
@@ -1621,6 +1645,7 @@
Slog.w(TAG, "Timeout waiting for agent " + app);
return null;
}
+ if (DEBUG) Slog.i(TAG, "got agent " + mConnectedAgent);
agent = mConnectedAgent;
}
} catch (RemoteException e) {
@@ -1814,6 +1839,8 @@
mCurrentState = BackupState.INITIAL;
mFinished = false;
+
+ addBackupTrace("STATE => INITIAL");
}
// Main entry point: perform one chunk of work, updating the state as appropriate
@@ -1842,11 +1869,25 @@
// We're starting a backup pass. Initialize the transport and send
// the PM metadata blob if we haven't already.
void beginBackup() {
+ if (DEBUG_BACKUP_TRACE) {
+ clearBackupTrace();
+ StringBuilder b = new StringBuilder(256);
+ b.append("beginBackup: [");
+ for (BackupRequest req : mOriginalQueue) {
+ b.append(' ');
+ b.append(req.packageName);
+ }
+ b.append(" ]");
+ addBackupTrace(b.toString());
+ }
+
mStatus = BackupConstants.TRANSPORT_OK;
// Sanity check: if the queue is empty we have no work to do.
if (mOriginalQueue.isEmpty()) {
Slog.w(TAG, "Backup begun with an empty queue - nothing to do.");
+ addBackupTrace("queue empty at begin");
+ executeNextState(BackupState.FINAL);
return;
}
@@ -1859,13 +1900,17 @@
File pmState = new File(mStateDir, PACKAGE_MANAGER_SENTINEL);
try {
- EventLog.writeEvent(EventLogTags.BACKUP_START, mTransport.transportDirName());
+ final String transportName = mTransport.transportDirName();
+ EventLog.writeEvent(EventLogTags.BACKUP_START, transportName);
// If we haven't stored package manager metadata yet, we must init the transport.
if (mStatus == BackupConstants.TRANSPORT_OK && pmState.length() <= 0) {
Slog.i(TAG, "Initializing (wiping) backup state and transport storage");
+ addBackupTrace("initializing transport " + transportName);
resetBackupState(mStateDir); // Just to make sure.
mStatus = mTransport.initializeDevice();
+
+ addBackupTrace("transport.initializeDevice() == " + mStatus);
if (mStatus == BackupConstants.TRANSPORT_OK) {
EventLog.writeEvent(EventLogTags.BACKUP_INITIALIZE);
} else {
@@ -1884,6 +1929,7 @@
mPackageManager, allAgentPackages());
mStatus = invokeAgentForBackup(PACKAGE_MANAGER_SENTINEL,
IBackupAgent.Stub.asInterface(pmAgent.onBind()), mTransport);
+ addBackupTrace("PMBA invoke: " + mStatus);
}
if (mStatus == BackupConstants.TRANSPORT_NOT_INITIALIZED) {
@@ -1894,11 +1940,13 @@
}
} catch (Exception e) {
Slog.e(TAG, "Error in backup thread", e);
+ addBackupTrace("Exception in backup thread: " + e);
mStatus = BackupConstants.TRANSPORT_ERROR;
} finally {
// If we've succeeded so far, invokeAgentForBackup() will have run the PM
// metadata and its completion/timeout callback will continue the state
// machine chain. If it failed that won't happen; we handle that now.
+ addBackupTrace("exiting prelim: " + mStatus);
if (mStatus != BackupConstants.TRANSPORT_OK) {
// if things went wrong at this point, we need to
// restage everything and try again later.
@@ -1912,11 +1960,12 @@
// if that was warranted. Now we process the single next thing in the queue.
void invokeNextAgent() {
mStatus = BackupConstants.TRANSPORT_OK;
+ addBackupTrace("invoke q=" + mQueue.size());
// Sanity check that we have work to do. If not, skip to the end where
// we reestablish the wakelock invariants etc.
if (mQueue.isEmpty()) {
- Slog.e(TAG, "Running queue but it's empty!");
+ if (DEBUG) Slog.i(TAG, "queue now empty");
executeNextState(BackupState.FINAL);
return;
}
@@ -1926,6 +1975,7 @@
mQueue.remove(0);
Slog.d(TAG, "starting agent for backup of " + request);
+ addBackupTrace("launch agent for " + request.packageName);
// Verify that the requested app exists; it might be something that
// requested a backup but was then uninstalled. The request was
@@ -1941,6 +1991,7 @@
mWakelock.setWorkSource(new WorkSource(mCurrentPackage.applicationInfo.uid));
agent = bindToAgentSynchronous(mCurrentPackage.applicationInfo,
IApplicationThread.BACKUP_MODE_INCREMENTAL);
+ addBackupTrace("agent bound; a? = " + (agent != null));
if (agent != null) {
mStatus = invokeAgentForBackup(request.packageName, agent, mTransport);
// at this point we'll either get a completion callback from the
@@ -1954,14 +2005,17 @@
// Try for the next one.
Slog.d(TAG, "error in bind/backup", ex);
mStatus = BackupConstants.AGENT_ERROR;
+ addBackupTrace("agent SE");
}
} catch (NameNotFoundException e) {
Slog.d(TAG, "Package does not exist; skipping");
+ addBackupTrace("no such package");
+ mStatus = BackupConstants.AGENT_UNKNOWN;
} finally {
mWakelock.setWorkSource(null);
// If there was an agent error, no timeout/completion handling will occur.
- // That means we need to deal with the next state ourselves.
+ // That means we need to direct to the next state ourselves.
if (mStatus != BackupConstants.TRANSPORT_OK) {
BackupState nextState = BackupState.RUNNING_QUEUE;
@@ -1973,18 +2027,26 @@
dataChangedImpl(request.packageName);
mStatus = BackupConstants.TRANSPORT_OK;
if (mQueue.isEmpty()) nextState = BackupState.FINAL;
- } else if (mStatus != BackupConstants.TRANSPORT_OK) {
+ } else if (mStatus == BackupConstants.AGENT_UNKNOWN) {
+ // Failed lookup of the app, so we couldn't bring up an agent, but
+ // we're otherwise fine. Just drop it and go on to the next as usual.
+ mStatus = BackupConstants.TRANSPORT_OK;
+ } else {
// Transport-level failure means we reenqueue everything
revertAndEndBackup();
nextState = BackupState.FINAL;
}
executeNextState(nextState);
+ } else {
+ addBackupTrace("expecting completion/timeout callback");
}
}
}
void finalizeBackup() {
+ addBackupTrace("finishing");
+
// Either backup was successful, in which case we of course do not need
// this pass's journal any more; or it failed, in which case we just
// re-enqueued all of these packages in the current active journal.
@@ -1997,6 +2059,7 @@
// done a backup, we can now record what the current backup dataset token
// is.
if ((mCurrentToken == 0) && (mStatus == BackupConstants.TRANSPORT_OK)) {
+ addBackupTrace("success; recording token");
try {
mCurrentToken = mTransport.getCurrentRestoreSet();
} catch (RemoteException e) {} // can't happen
@@ -2012,11 +2075,13 @@
// Make sure we back up everything and perform the one-time init
clearMetadata();
if (DEBUG) Slog.d(TAG, "Server requires init; rerunning");
+ addBackupTrace("init required; rerunning");
backupNow();
}
}
// Only once we're entirely finished do we release the wakelock
+ clearBackupTrace();
Slog.i(TAG, "Backup pass finished.");
mWakelock.release();
}
@@ -2031,7 +2096,8 @@
// handler in case it doesn't get back to us.
int invokeAgentForBackup(String packageName, IBackupAgent agent,
IBackupTransport transport) {
- if (DEBUG) Slog.d(TAG, "processOneBackup doBackup() on " + packageName);
+ if (DEBUG) Slog.d(TAG, "invokeAgentForBackup on " + packageName);
+ addBackupTrace("invoking " + packageName);
mSavedStateName = new File(mStateDir, packageName);
mBackupDataName = new File(mDataDir, packageName + ".data");
@@ -2071,10 +2137,13 @@
ParcelFileDescriptor.MODE_TRUNCATE);
// Initiate the target's backup pass
+ addBackupTrace("setting timeout");
prepareOperationTimeout(token, TIMEOUT_BACKUP_INTERVAL, this);
+ addBackupTrace("calling agent doBackup()");
agent.doBackup(mSavedState, mBackupData, mNewState, token, mBackupManagerBinder);
} catch (Exception e) {
Slog.e(TAG, "Error invoking for backup on " + packageName);
+ addBackupTrace("exception: " + e);
EventLog.writeEvent(EventLogTags.BACKUP_AGENT_FAILURE, packageName,
e.toString());
agentErrorCleanup();
@@ -2085,6 +2154,7 @@
// either be a callback from the agent, at which point we'll process its data
// for transport, or a timeout. Either way the next phase will happen in
// response to the TimeoutHandler interface callbacks.
+ addBackupTrace("invoke success");
return BackupConstants.TRANSPORT_OK;
}
@@ -2096,6 +2166,7 @@
+ mCurrentPackage.packageName);
mBackupHandler.removeMessages(MSG_TIMEOUT);
clearAgentState();
+ addBackupTrace("operation complete");
ParcelFileDescriptor backupData = null;
mStatus = BackupConstants.TRANSPORT_OK;
@@ -2105,6 +2176,7 @@
if (mStatus == BackupConstants.TRANSPORT_OK) {
backupData = ParcelFileDescriptor.open(mBackupDataName,
ParcelFileDescriptor.MODE_READ_ONLY);
+ addBackupTrace("sending data to transport");
mStatus = mTransport.performBackup(mCurrentPackage, backupData);
}
@@ -2113,11 +2185,15 @@
// hold off on finishBackup() until the end, which implies holding off on
// renaming *all* the output state files (see below) until that happens.
+ addBackupTrace("data delivered: " + mStatus);
if (mStatus == BackupConstants.TRANSPORT_OK) {
+ addBackupTrace("finishing op on transport");
mStatus = mTransport.finishBackup();
+ addBackupTrace("finished: " + mStatus);
}
} else {
if (DEBUG) Slog.i(TAG, "no backup data written; not calling transport");
+ addBackupTrace("no data to send");
}
// After successful transport, delete the now-stale data
@@ -2165,12 +2241,14 @@
Slog.e(TAG, "Timeout backing up " + mCurrentPackage.packageName);
EventLog.writeEvent(EventLogTags.BACKUP_AGENT_FAILURE, mCurrentPackage.packageName,
"timeout");
+ addBackupTrace("timeout of " + mCurrentPackage.packageName);
agentErrorCleanup();
dataChangedImpl(mCurrentPackage.packageName);
}
void revertAndEndBackup() {
if (MORE_DEBUG) Slog.i(TAG, "Reverting backup queue - restaging everything");
+ addBackupTrace("transport error; reverting");
for (BackupRequest request : mOriginalQueue) {
dataChangedImpl(request.packageName);
}
@@ -2199,6 +2277,7 @@
// If this was a pseudopackage there's no associated Activity Manager state
if (mCurrentPackage.applicationInfo != null) {
+ addBackupTrace("unbinding " + mCurrentPackage.packageName);
try { // unbind even on timeout, just in case
mActivityManager.unbindBackupAgent(mCurrentPackage.applicationInfo);
} catch (RemoteException e) {}
@@ -2206,6 +2285,7 @@
}
void restartBackupAlarm() {
+ addBackupTrace("setting backup trigger");
synchronized (mQueueLock) {
try {
startBackupAlarmsLocked(mTransport.requestBackupTime());
@@ -2216,6 +2296,7 @@
void executeNextState(BackupState nextState) {
if (MORE_DEBUG) Slog.i(TAG, " => executing next step on "
+ this + " nextState=" + nextState);
+ addBackupTrace("executeNextState => " + nextState);
mCurrentState = nextState;
Message msg = mBackupHandler.obtainMessage(MSG_BACKUP_RESTORE_STEP, this);
mBackupHandler.sendMessage(msg);
@@ -2246,14 +2327,16 @@
ParcelFileDescriptor mPipe;
int mToken;
boolean mSendApk;
+ boolean mWriteManifest;
FullBackupRunner(PackageInfo pack, IBackupAgent agent, ParcelFileDescriptor pipe,
- int token, boolean sendApk) throws IOException {
+ int token, boolean sendApk, boolean writeManifest) throws IOException {
mPackage = pack;
mAgent = agent;
mPipe = ParcelFileDescriptor.dup(pipe.getFileDescriptor());
mToken = token;
mSendApk = sendApk;
+ mWriteManifest = writeManifest;
}
@Override
@@ -2262,12 +2345,14 @@
BackupDataOutput output = new BackupDataOutput(
mPipe.getFileDescriptor());
- if (MORE_DEBUG) Slog.d(TAG, "Writing manifest for " + mPackage.packageName);
- writeAppManifest(mPackage, mManifestFile, mSendApk);
- FullBackup.backupToTar(mPackage.packageName, null, null,
- mFilesDir.getAbsolutePath(),
- mManifestFile.getAbsolutePath(),
- output);
+ if (mWriteManifest) {
+ if (MORE_DEBUG) Slog.d(TAG, "Writing manifest for " + mPackage.packageName);
+ writeAppManifest(mPackage, mManifestFile, mSendApk);
+ FullBackup.backupToTar(mPackage.packageName, null, null,
+ mFilesDir.getAbsolutePath(),
+ mManifestFile.getAbsolutePath(),
+ output);
+ }
if (mSendApk) {
writeApkToBackup(mPackage, output);
@@ -2354,10 +2439,13 @@
}
}
- // Cull any packages that have indicated that backups are not permitted.
+ // Cull any packages that have indicated that backups are not permitted, as well
+ // as any explicit mention of the 'special' shared-storage agent package (we
+ // handle that one at the end).
for (int i = 0; i < packagesToBackup.size(); ) {
PackageInfo pkg = packagesToBackup.get(i);
- if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0) {
+ if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0
+ || pkg.packageName.equals(SHARED_BACKUP_AGENT_PACKAGE)) {
packagesToBackup.remove(i);
} else {
i++;
@@ -2437,6 +2525,16 @@
return;
}
+ // Shared storage if requested
+ if (mIncludeShared) {
+ try {
+ pkg = mPackageManager.getPackageInfo(SHARED_BACKUP_AGENT_PACKAGE, 0);
+ packagesToBackup.add(pkg);
+ } catch (NameNotFoundException e) {
+ Slog.e(TAG, "Unable to find shared-storage backup handler");
+ }
+ }
+
// Now back up the app data via the agent mechanism
int N = packagesToBackup.size();
for (int i = 0; i < N; i++) {
@@ -2444,11 +2542,6 @@
backupOnePackage(pkg, out);
}
- // Shared storage if requested
- if (mIncludeShared) {
- backupSharedStorage();
- }
-
// Done!
finalizeBackup(out);
} catch (RemoteException e) {
@@ -2554,19 +2647,21 @@
if (agent != null) {
ParcelFileDescriptor[] pipes = null;
try {
- pipes = ParcelFileDescriptor.createPipe();
+ pipes = ParcelFileDescriptor.createPipe();
ApplicationInfo app = pkg.applicationInfo;
+ final boolean isSharedStorage = pkg.packageName.equals(SHARED_BACKUP_AGENT_PACKAGE);
final boolean sendApk = mIncludeApks
+ && !isSharedStorage
&& ((app.flags & ApplicationInfo.FLAG_FORWARD_LOCK) == 0)
&& ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ||
(app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
- sendOnBackupPackage(pkg.packageName);
+ sendOnBackupPackage(isSharedStorage ? "Shared storage" : pkg.packageName);
final int token = generateToken();
FullBackupRunner runner = new FullBackupRunner(pkg, agent, pipes[1],
- token, sendApk);
+ token, sendApk, !isSharedStorage);
pipes[1].close(); // the runner has dup'd it
pipes[1] = null;
Thread t = new Thread(runner);
@@ -2641,33 +2736,6 @@
}
}
- private void backupSharedStorage() throws RemoteException {
- PackageInfo pkg = null;
- try {
- pkg = mPackageManager.getPackageInfo("com.android.sharedstoragebackup", 0);
- IBackupAgent agent = bindToAgentSynchronous(pkg.applicationInfo,
- IApplicationThread.BACKUP_MODE_FULL);
- if (agent != null) {
- sendOnBackupPackage("Shared storage");
-
- final int token = generateToken();
- prepareOperationTimeout(token, TIMEOUT_SHARED_BACKUP_INTERVAL, null);
- agent.doFullBackup(mOutputFile, token, mBackupManagerBinder);
- if (!waitUntilOperationComplete(token)) {
- Slog.e(TAG, "Full backup failed on shared storage");
- } else {
- if (DEBUG) Slog.d(TAG, "Full shared storage backup success");
- }
- } else {
- Slog.e(TAG, "Could not bind to shared storage backup agent");
- }
- } catch (NameNotFoundException e) {
- Slog.e(TAG, "Shared storage backup package not found");
- } finally {
- tearDown(pkg);
- }
- }
-
private void finalizeBackup(OutputStream out) {
try {
// A standard 'tar' EOF sequence: two 512-byte blocks of all zeroes.
@@ -2893,7 +2961,7 @@
// Are we able to restore shared-storage data?
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- mPackagePolicies.put("com.android.sharedstoragebackup", RestorePolicy.ACCEPT);
+ mPackagePolicies.put(SHARED_BACKUP_AGENT_PACKAGE, RestorePolicy.ACCEPT);
}
FileInputStream rawInStream = null;
@@ -3771,7 +3839,7 @@
info.path, 0, FullBackup.SHARED_PREFIX.length())) {
// File in shared storage. !!! TODO: implement this.
info.path = info.path.substring(FullBackup.SHARED_PREFIX.length());
- info.packageName = "com.android.sharedstoragebackup";
+ info.packageName = SHARED_BACKUP_AGENT_PACKAGE;
info.domain = FullBackup.SHARED_STORAGE_TOKEN;
if (DEBUG) Slog.i(TAG, "File in shared storage: " + info.path);
} else if (FullBackup.APPS_PREFIX.regionMatches(0,
@@ -4715,6 +4783,8 @@
// one already there, then overwrite it, but no harm done.
BackupRequest req = new BackupRequest(packageName);
if (mPendingBackups.put(app.packageName, req) == null) {
+ if (DEBUG) Slog.d(TAG, "Now staging backup of " + packageName);
+
// Journal this request in case of crash. The put()
// operation returned null when this package was not already
// in the set; we want to avoid touching the disk redundantly.
@@ -5736,6 +5806,17 @@
pw.println(" " + s);
}
+ if (DEBUG_BACKUP_TRACE) {
+ synchronized (mBackupTrace) {
+ if (!mBackupTrace.isEmpty()) {
+ pw.println("Most recent backup trace:");
+ for (String s : mBackupTrace) {
+ pw.println(" " + s);
+ }
+ }
+ }
+ }
+
int N = mBackupParticipants.size();
pw.println("Participants:");
for (int i=0; i<N; i++) {
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 97fb0b0..b7dc4a2 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -1031,9 +1031,14 @@
if ((ni.isConnectedOrConnecting() == true) &&
!network.isTeardownRequested()) {
if (ni.isConnected() == true) {
- // add the pid-specific dns
- handleDnsConfigurationChange(usedNetworkType);
- if (VDBG) log("special network already active");
+ final long token = Binder.clearCallingIdentity();
+ try {
+ // add the pid-specific dns
+ handleDnsConfigurationChange(usedNetworkType);
+ if (VDBG) log("special network already active");
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
return Phone.APN_ALREADY_ACTIVE;
}
if (VDBG) log("special network already connecting");
@@ -1221,6 +1226,7 @@
}
if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
+ if (DBG) log("requestRouteToHostAddress on invalid network: " + networkType);
return false;
}
NetworkStateTracker tracker = mNetTrackers[networkType];
@@ -1233,11 +1239,16 @@
}
return false;
}
+ final long token = Binder.clearCallingIdentity();
try {
InetAddress addr = InetAddress.getByAddress(hostAddress);
LinkProperties lp = tracker.getLinkProperties();
return addRouteToAddress(lp, addr);
- } catch (UnknownHostException e) {}
+ } catch (UnknownHostException e) {
+ if (DBG) log("requestRouteToHostAddress got " + e.toString());
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
return false;
}
@@ -1277,7 +1288,10 @@
private boolean modifyRoute(String ifaceName, LinkProperties lp, RouteInfo r, int cycleCount,
boolean doAdd, boolean toDefaultTable) {
- if ((ifaceName == null) || (lp == null) || (r == null)) return false;
+ if ((ifaceName == null) || (lp == null) || (r == null)) {
+ if (DBG) log("modifyRoute got unexpected null: " + ifaceName + ", " + lp + ", " + r);
+ return false;
+ }
if (cycleCount > MAX_HOSTROUTE_CYCLE_COUNT) {
loge("Error modifying route - too much recursion");
@@ -1309,7 +1323,7 @@
}
} catch (Exception e) {
// never crash - catch them all
- if (VDBG) loge("Exception trying to add a route: " + e);
+ if (DBG) loge("Exception trying to add a route: " + e);
return false;
}
} else {
@@ -1323,7 +1337,7 @@
mNetd.removeRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
- if (VDBG) loge("Exception trying to remove a route: " + e);
+ if (DBG) loge("Exception trying to remove a route: " + e);
return false;
}
} else {
@@ -1335,7 +1349,7 @@
mNetd.removeSecondaryRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
- if (VDBG) loge("Exception trying to remove a route: " + e);
+ if (DBG) loge("Exception trying to remove a route: " + e);
return false;
}
}
@@ -2004,7 +2018,7 @@
mNetd.removeRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
- if (VDBG) loge("Exception trying to remove a route: " + e);
+ if (DBG) loge("Exception trying to remove a route: " + e);
}
}
}
@@ -2218,7 +2232,7 @@
mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses));
mNetd.setDefaultInterfaceForDns(iface);
} catch (Exception e) {
- if (VDBG) loge("exception setting default dns interface: " + e);
+ if (DBG) loge("exception setting default dns interface: " + e);
}
}
if (!domains.equals(SystemProperties.get("net.dns.search"))) {
@@ -2248,7 +2262,7 @@
mNetd.setDnsServersForInterface(p.getInterfaceName(),
NetworkUtils.makeStrings(dnses));
} catch (Exception e) {
- if (VDBG) loge("exception setting dns servers: " + e);
+ if (DBG) loge("exception setting dns servers: " + e);
}
// set per-pid dns for attached secondary nets
List pids = mNetRequestersPids[netType];
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index e8ca3ce..d8e3d59 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -60,6 +60,7 @@
import android.util.Printer;
import android.util.Slog;
import android.util.Xml;
+import android.view.IWindowManager;
import android.view.WindowManagerPolicy;
import java.io.File;
@@ -96,6 +97,7 @@
final PowerManager.WakeLock mWakeLock;
IPowerManager mIPowerManager;
+ IWindowManager mIWindowManager;
int mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
int mActivePasswordLength = 0;
@@ -506,6 +508,14 @@
return mIPowerManager;
}
+ private IWindowManager getWindowManager() {
+ if (mIWindowManager == null) {
+ IBinder b = ServiceManager.getService(Context.WINDOW_SERVICE);
+ mIWindowManager = IWindowManager.Stub.asInterface(b);
+ }
+ return mIWindowManager;
+ }
+
ActiveAdmin getActiveAdminUncheckedLocked(ComponentName who) {
ActiveAdmin admin = mAdminMap.get(who);
if (admin != null
@@ -1649,8 +1659,11 @@
DeviceAdminInfo.USES_POLICY_FORCE_LOCK);
long ident = Binder.clearCallingIdentity();
try {
+ // Power off the display
mIPowerManager.goToSleepWithReason(SystemClock.uptimeMillis(),
WindowManagerPolicy.OFF_BECAUSE_OF_ADMIN);
+ // Ensure the device is locked
+ getWindowManager().lockNow();
} catch (RemoteException e) {
} finally {
Binder.restoreCallingIdentity(ident);
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index a32e9f5..366160b 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -1169,7 +1169,7 @@
* amount of containers we'd ever expect to have. This keeps an
* "asec list" from blocking a thread repeatedly.
*/
- mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG);
+ mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25);
mReady = false;
Thread thread = new Thread(mConnector, VOLD_TAG);
thread.start();
@@ -2429,6 +2429,10 @@
pw.println(v.toString());
}
}
+
+ pw.println();
+ pw.println(" mConnection:");
+ mConnector.dump(fd, pw, args);
}
/** {@inheritDoc} */
diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java
index cc2bcd9..f475dd6 100644
--- a/services/java/com/android/server/NativeDaemonConnector.java
+++ b/services/java/com/android/server/NativeDaemonConnector.java
@@ -22,14 +22,17 @@
import android.os.HandlerThread;
import android.os.Message;
import android.os.SystemClock;
+import android.util.LocalLog;
import android.util.Slog;
import com.google.android.collect.Lists;
+import java.nio.charset.Charsets;
+import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.nio.charset.Charsets;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -45,6 +48,7 @@
private String mSocket;
private OutputStream mOutputStream;
+ private LocalLog mLocalLog;
private final BlockingQueue<NativeDaemonEvent> mResponseQueue;
@@ -57,11 +61,12 @@
private final int BUFFER_SIZE = 4096;
NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket,
- int responseQueueSize, String logTag) {
+ int responseQueueSize, String logTag, int maxLogSize) {
mCallbacks = callbacks;
mSocket = socket;
mResponseQueue = new LinkedBlockingQueue<NativeDaemonEvent>(responseQueueSize);
TAG = logTag != null ? logTag : "NativeDaemonConnector";
+ mLocalLog = new LocalLog(maxLogSize);
}
@Override
@@ -125,7 +130,7 @@
if (buffer[i] == 0) {
final String rawEvent = new String(
buffer, start, i - start, Charsets.UTF_8);
- if (LOGD) Slog.d(TAG, "RCV <- " + rawEvent);
+ log("RCV <- {" + rawEvent + "}");
try {
final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(
@@ -208,7 +213,7 @@
}
final String unterminated = builder.toString();
- if (LOGD) Slog.d(TAG, "SND -> " + unterminated);
+ log("SND -> {" + unterminated + "}");
builder.append('\0');
@@ -432,4 +437,13 @@
public void monitor() {
synchronized (mDaemonLock) { }
}
+
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ mLocalLog.dump(fd, pw, args);
+ }
+
+ private void log(String logstring) {
+ if (LOGD) Slog.d(TAG, logstring);
+ mLocalLog.log(logstring);
+ }
}
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index c1d8a13..7bb7938 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -163,7 +163,7 @@
}
mConnector = new NativeDaemonConnector(
- new NetdCallbackReceiver(), "netd", 10, NETD_TAG);
+ new NetdCallbackReceiver(), "netd", 10, NETD_TAG, 50);
mThread = new Thread(mConnector, NETD_TAG);
// Add ourself to the Watchdog monitors.
@@ -1265,6 +1265,10 @@
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mContext.enforceCallingOrSelfPermission(DUMP, TAG);
+ pw.println("NetworkManagementService NativeDaemonConnector Log:");
+ mConnector.dump(fd, pw, args);
+ pw.println();
+
pw.print("Bandwidth control enabled: "); pw.println(mBandwidthControlEnabled);
synchronized (mQuotaLock) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 6ff0100..8ec97e1 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -9422,6 +9422,10 @@
return mPolicy.hasNavigationBar();
}
+ public void lockNow() {
+ mPolicy.lockNow();
+ }
+
void dumpInput(FileDescriptor fd, PrintWriter pw, boolean dumpAll) {
pw.println("WINDOW MANAGER INPUT (dumpsys window input)");
mInputManager.dump(pw);
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 794515b..9118381 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -1449,7 +1449,7 @@
return mViewVisibility == View.GONE
|| !mRelayoutCalled
|| (atoken == null && mRootToken.hidden)
- || (atoken != null && (atoken.hiddenRequested || atoken.hidden))
+ || (atoken != null && atoken.hiddenRequested)
|| mAttachedHidden
|| mExiting || mDestroying;
}
diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java
index ffe848d..1336818 100644
--- a/telephony/java/com/android/internal/telephony/DataConnection.java
+++ b/telephony/java/com/android/internal/telephony/DataConnection.java
@@ -68,6 +68,8 @@
private List<ApnContext> mApnList = null;
PendingIntent mReconnectIntent = null;
+ private DataConnectionTracker mDataConnectionTracker = null;
+
/**
* Used internally for saving connecting parameters.
*/
@@ -202,6 +204,7 @@
protected static final int EVENT_DEACTIVATE_DONE = BASE + 3;
protected static final int EVENT_DISCONNECT = BASE + 4;
protected static final int EVENT_RIL_CONNECTED = BASE + 5;
+ protected static final int EVENT_DISCONNECT_ALL = BASE + 6;
//***** Tag IDs for EventLog
protected static final int EVENT_LOG_BAD_DNS_ADDRESS = 50100;
@@ -234,10 +237,12 @@
//***** Constructor
- protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm) {
+ protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm,
+ DataConnectionTracker dct) {
super(name);
if (DBG) log("DataConnection constructor E");
this.phone = phone;
+ this.mDataConnectionTracker = dct;
mId = id;
mRetryMgr = rm;
this.cid = -1;
@@ -316,11 +321,16 @@
*
* @param dp is the DisconnectParams.
*/
- private void notifyDisconnectCompleted(DisconnectParams dp) {
+ private void notifyDisconnectCompleted(DisconnectParams dp, boolean sendAll) {
if (VDBG) log("NotifyDisconnectCompleted");
+ ApnContext alreadySent = null;
+ String reason = null;
+
if (dp.onCompletedMsg != null) {
Message msg = dp.onCompletedMsg;
+ alreadySent = (ApnContext)msg.obj;
+ reason = dp.reason;
if (VDBG) {
log(String.format("msg=%s msg.obj=%s", msg.toString(),
((msg.obj instanceof String) ? (String) msg.obj : "<no-reason>")));
@@ -328,6 +338,17 @@
AsyncResult.forMessage(msg);
msg.sendToTarget();
}
+ if (sendAll) {
+ for (ApnContext a : mApnList) {
+ if (a == alreadySent) continue;
+ if (reason != null) a.setReason(reason);
+ Message msg = mDataConnectionTracker.obtainMessage(
+ DataConnectionTracker.EVENT_DISCONNECT_DONE, a);
+ AsyncResult.forMessage(msg);
+ msg.sendToTarget();
+ }
+ }
+
if (DBG) log("NotifyDisconnectCompleted DisconnectParams=" + dp);
}
@@ -706,6 +727,13 @@
deferMessage(msg);
break;
+ case EVENT_DISCONNECT_ALL:
+ if (DBG) {
+ log("DcDefaultState deferring msg.what=EVENT_DISCONNECT_ALL" + mRefCount);
+ }
+ deferMessage(msg);
+ break;
+
case EVENT_RIL_CONNECTED:
ar = (AsyncResult)msg.obj;
if (ar.exception == null) {
@@ -771,7 +799,7 @@
}
if (mDisconnectParams != null) {
if (VDBG) log("DcInactiveState: enter notifyDisconnectCompleted");
- notifyDisconnectCompleted(mDisconnectParams);
+ notifyDisconnectCompleted(mDisconnectParams, true);
}
clearSettings();
}
@@ -812,7 +840,13 @@
case EVENT_DISCONNECT:
if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT");
- notifyDisconnectCompleted((DisconnectParams)msg.obj);
+ notifyDisconnectCompleted((DisconnectParams)msg.obj, false);
+ retVal = HANDLED;
+ break;
+
+ case EVENT_DISCONNECT_ALL:
+ if (DBG) log("DcInactiveState: msg.what=EVENT_DISCONNECT_ALL");
+ notifyDisconnectCompleted((DisconnectParams)msg.obj, false);
retVal = HANDLED;
break;
@@ -989,12 +1023,24 @@
transitionTo(mDisconnectingState);
} else {
if (msg.obj != null) {
- notifyDisconnectCompleted((DisconnectParams) msg.obj);
+ notifyDisconnectCompleted((DisconnectParams) msg.obj, false);
}
}
retVal = HANDLED;
break;
+ case EVENT_DISCONNECT_ALL:
+ if (DBG) {
+ log("DcActiveState msg.what=EVENT_DISCONNECT_ALL RefCount=" + mRefCount);
+ }
+ mRefCount = 0;
+ DisconnectParams dp = (DisconnectParams) msg.obj;
+ dp.tag = mTag;
+ tearDownData(dp);
+ transitionTo(mDisconnectingState);
+ retVal = HANDLED;
+ break;
+
default:
if (VDBG) {
log("DcActiveState not handled msg.what=0x" +
@@ -1124,4 +1170,16 @@
public void tearDown(String reason, Message onCompletedMsg) {
sendMessage(obtainMessage(EVENT_DISCONNECT, new DisconnectParams(reason, onCompletedMsg)));
}
+
+ /**
+ * Tear down the connection through the apn on the network. Ignores refcount and
+ * and always tears down.
+ *
+ * @param onCompletedMsg is sent with its msg.obj as an AsyncResult object.
+ * With AsyncResult.userObj set to the original msg.obj.
+ */
+ public void tearDownAll(String reason, Message onCompletedMsg) {
+ sendMessage(obtainMessage(EVENT_DISCONNECT_ALL,
+ new DisconnectParams(reason, onCompletedMsg)));
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cat/BerTlv.java b/telephony/java/com/android/internal/telephony/cat/BerTlv.java
index 774bfa3..095e65b 100644
--- a/telephony/java/com/android/internal/telephony/cat/BerTlv.java
+++ b/telephony/java/com/android/internal/telephony/cat/BerTlv.java
@@ -81,12 +81,18 @@
temp = data[curIndex++] & 0xff;
if (temp < 0x80) {
throw new ResultException(
- ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "length < 0x80 length=" + Integer.toHexString(length) +
+ " curIndex=" + curIndex + " endIndex=" + endIndex);
+
}
length = temp;
} else {
throw new ResultException(
- ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "Expected first byte to be length or a length tag and < 0x81" +
+ " byte= " + Integer.toHexString(temp) + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
}
} else {
if (ComprehensionTlvTag.COMMAND_DETAILS.value() == (tag & ~0x80)) {
@@ -95,14 +101,18 @@
}
}
} catch (IndexOutOfBoundsException e) {
- throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING);
+ throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING,
+ "IndexOutOfBoundsException " +
+ " curIndex=" + curIndex + " endIndex=" + endIndex);
} catch (ResultException e) {
- throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD, e.explanation());
}
/* COMPREHENSION-TLVs */
if (endIndex - curIndex < length) {
- throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "Command had extra data endIndex=" + endIndex + " curIndex=" + curIndex +
+ " length=" + length);
}
List<ComprehensionTlv> ctlvs = ComprehensionTlv.decodeMany(data,
diff --git a/telephony/java/com/android/internal/telephony/cat/CommandDetails.java b/telephony/java/com/android/internal/telephony/cat/CommandDetails.java
index e3f0798..8579535 100644
--- a/telephony/java/com/android/internal/telephony/cat/CommandDetails.java
+++ b/telephony/java/com/android/internal/telephony/cat/CommandDetails.java
@@ -74,6 +74,14 @@
public int describeContents() {
return 0;
}
+
+ @Override
+ public String toString() {
+ return "CmdDetails: compRequired=" + compRequired +
+ " commandNumber=" + commandNumber +
+ " typeOfCommand=" + typeOfCommand +
+ " commandQualifier=" + commandQualifier;
+ }
}
class DeviceIdentities extends ValueObject {
diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParams.java b/telephony/java/com/android/internal/telephony/cat/CommandParams.java
index 959c9e2..79f6ad2 100644
--- a/telephony/java/com/android/internal/telephony/cat/CommandParams.java
+++ b/telephony/java/com/android/internal/telephony/cat/CommandParams.java
@@ -34,6 +34,11 @@
}
boolean setIcon(Bitmap icon) { return true; }
+
+ @Override
+ public String toString() {
+ return cmdDet.toString();
+ }
}
class DisplayTextParams extends CommandParams {
diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
index 89c1329..a554012 100644
--- a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
+++ b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java
@@ -83,7 +83,8 @@
try {
cmdDet = ValueParser.retrieveCommandDetails(ctlvCmdDet);
} catch (ResultException e) {
- CatLog.d(this, "Failed to procees command details");
+ CatLog.d(this,
+ "processCommandDetails: Failed to procees command details e=" + e);
}
}
}
@@ -178,6 +179,7 @@
return;
}
} catch (ResultException e) {
+ CatLog.d(this, "make: caught ResultException e=" + e);
mCmdParams = new CommandParams(cmdDet);
sendCmdParams(e.result());
return;
diff --git a/telephony/java/com/android/internal/telephony/cat/ComprehensionTlv.java b/telephony/java/com/android/internal/telephony/cat/ComprehensionTlv.java
index ab26d13..bd6b7d1 100644
--- a/telephony/java/com/android/internal/telephony/cat/ComprehensionTlv.java
+++ b/telephony/java/com/android/internal/telephony/cat/ComprehensionTlv.java
@@ -16,6 +16,8 @@
package com.android.internal.telephony.cat;
+import android.util.Log;
+
import java.util.ArrayList;
import java.util.List;
@@ -112,10 +114,10 @@
*/
public static ComprehensionTlv decode(byte[] data, int startIndex)
throws ResultException {
- try {
- int curIndex = startIndex;
- int endIndex = data.length;
+ int curIndex = startIndex;
+ int endIndex = data.length;
+ try {
/* tag */
int tag;
boolean cr; // Comprehension required flag
@@ -124,9 +126,11 @@
case 0:
case 0xff:
case 0x80:
- // for error handling
- // these one make exception while decoding the abnormal command.
- // (in case of Ghana MTN simcard , JDI simcard)
+ Log.d("CAT ", "decode: unexpected first tag byte=" + Integer.toHexString(temp) +
+ ", startIndex=" + startIndex + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
+ // Return null which will stop decoding, this has occurred
+ // with Ghana MTN simcard and JDI simcard.
return null;
case 0x7f: // tag is in three-byte format
@@ -153,7 +157,10 @@
length = data[curIndex++] & 0xff;
if (length < 0x80) {
throw new ResultException(
- ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "length < 0x80 length=" + Integer.toHexString(length) +
+ " startIndex=" + startIndex + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
}
} else if (temp == 0x82) {
length = ((data[curIndex] & 0xff) << 8)
@@ -161,7 +168,10 @@
curIndex += 2;
if (length < 0x100) {
throw new ResultException(
- ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "two byte length < 0x100 length=" + Integer.toHexString(length) +
+ " startIndex=" + startIndex + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
}
} else if (temp == 0x83) {
length = ((data[curIndex] & 0xff) << 16)
@@ -170,16 +180,25 @@
curIndex += 3;
if (length < 0x10000) {
throw new ResultException(
- ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "three byte length < 0x10000 length=0x" + Integer.toHexString(length) +
+ " startIndex=" + startIndex + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
}
} else {
- throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "Bad length modifer=" + temp +
+ " startIndex=" + startIndex + " curIndex=" + curIndex +
+ " endIndex=" + endIndex);
+
}
return new ComprehensionTlv(tag, cr, length, data, curIndex);
} catch (IndexOutOfBoundsException e) {
- throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD,
+ "IndexOutOfBoundsException" + " startIndex=" + startIndex +
+ " curIndex=" + curIndex + " endIndex=" + endIndex);
}
}
}
diff --git a/telephony/java/com/android/internal/telephony/cat/ResultException.java b/telephony/java/com/android/internal/telephony/cat/ResultException.java
index 1c2cb63..84879c2 100644
--- a/telephony/java/com/android/internal/telephony/cat/ResultException.java
+++ b/telephony/java/com/android/internal/telephony/cat/ResultException.java
@@ -25,6 +25,7 @@
public class ResultException extends CatException {
private ResultCode mResult;
private int mAdditionalInfo;
+ private String mExplanation;
public ResultException(ResultCode result) {
super();
@@ -48,20 +49,30 @@
mResult = result;
mAdditionalInfo = -1;
+ mExplanation = "";
+ }
+
+ public ResultException(ResultCode result, String explanation) {
+ this(result);
+ mExplanation = explanation;
}
public ResultException(ResultCode result, int additionalInfo) {
- super();
+ this(result);
if (additionalInfo < 0) {
throw new AssertionError(
"Additional info must be greater than zero!");
}
- mResult = result;
mAdditionalInfo = additionalInfo;
}
+ public ResultException(ResultCode result, int additionalInfo, String explanation) {
+ this(result, additionalInfo);
+ mExplanation = explanation;
+ }
+
public ResultCode result() {
return mResult;
}
@@ -73,4 +84,14 @@
public int additionalInfo() {
return mAdditionalInfo;
}
+
+ public String explanation() {
+ return mExplanation;
+ }
+
+ @Override
+ public String toString() {
+ return "result=" + mResult + " additionalInfo=" + mAdditionalInfo +
+ " explantion=" + mExplanation;
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cat/RilMessageDecoder.java b/telephony/java/com/android/internal/telephony/cat/RilMessageDecoder.java
index 2a1f508..fb33a8e 100644
--- a/telephony/java/com/android/internal/telephony/cat/RilMessageDecoder.java
+++ b/telephony/java/com/android/internal/telephony/cat/RilMessageDecoder.java
@@ -162,6 +162,7 @@
decodingStarted = true;
} catch (ResultException e) {
// send to Service for proper RIL communication.
+ CatLog.d(this, "decodeMessageParams: caught ResultException e=" + e);
mCurrentRilMessage.mResCode = e.result();
sendCmdForExecution(mCurrentRilMessage);
decodingStarted = false;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
index d55f346..a93d94f 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnection.java
@@ -20,6 +20,7 @@
import android.util.Log;
import com.android.internal.telephony.DataConnection;
+import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.RetryManager;
@@ -32,8 +33,9 @@
private static final String LOG_TAG = "CDMA";
// ***** Constructor
- private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm) {
- super(phone, name, id, rm);
+ private CdmaDataConnection(CDMAPhone phone, String name, int id, RetryManager rm,
+ DataConnectionTracker dct) {
+ super(phone, name, id, rm, dct);
}
/**
@@ -44,12 +46,13 @@
* @param rm the RetryManager
* @return CdmaDataConnection that was created.
*/
- static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm) {
+ static CdmaDataConnection makeDataConnection(CDMAPhone phone, int id, RetryManager rm,
+ DataConnectionTracker dct) {
synchronized (mCountLock) {
mCount += 1;
}
CdmaDataConnection cdmaDc = new CdmaDataConnection(phone, "CdmaDC-" + mCount,
- id, rm);
+ id, rm, dct);
cdmaDc.start();
if (DBG) cdmaDc.log("Made " + cdmaDc.getName());
return cdmaDc;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index e16a081..3fe57ae 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -794,7 +794,7 @@
}
int id = mUniqueIdGenerator.getAndIncrement();
- dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm);
+ dataConn = CdmaDataConnection.makeDataConnection(mCdmaPhone, id, rm, this);
mDataConnections.put(id, dataConn);
DataConnectionAc dcac = new DataConnectionAc(dataConn, LOG_TAG);
int status = dcac.fullyConnectSync(mPhone.getContext(), this, dataConn.getHandler());
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
index dbb35f2..1f28280 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java
@@ -22,6 +22,7 @@
import android.text.TextUtils;
import com.android.internal.telephony.DataConnection;
+import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.RILConstants;
@@ -37,8 +38,9 @@
//***** Instance Variables
protected int mProfileId = RILConstants.DATA_PROFILE_DEFAULT;
//***** Constructor
- private GsmDataConnection(PhoneBase phone, String name, int id, RetryManager rm) {
- super(phone, name, id, rm);
+ private GsmDataConnection(PhoneBase phone, String name, int id, RetryManager rm,
+ DataConnectionTracker dct) {
+ super(phone, name, id, rm, dct);
}
/**
@@ -49,11 +51,12 @@
* @param rm the RetryManager
* @return GsmDataConnection that was created.
*/
- static GsmDataConnection makeDataConnection(PhoneBase phone, int id, RetryManager rm) {
+ static GsmDataConnection makeDataConnection(PhoneBase phone, int id, RetryManager rm,
+ DataConnectionTracker dct) {
synchronized (mCountLock) {
mCount += 1;
}
- GsmDataConnection gsmDc = new GsmDataConnection(phone, "GsmDC-" + mCount, id, rm);
+ GsmDataConnection gsmDc = new GsmDataConnection(phone, "GsmDC-" + mCount, id, rm, dct);
gsmDc.start();
if (DBG) gsmDc.log("Made " + gsmDc.getName());
return gsmDc;
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 6096cb0..8f04dba 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -136,7 +136,8 @@
private static final String INTENT_DATA_STALL_ALARM =
"com.android.internal.telephony.gprs-data-stall";
- static final Uri PREFERAPN_URI = Uri.parse("content://telephony/carriers/preferapn");
+ static final Uri PREFERAPN_NO_UPDATE_URI =
+ Uri.parse("content://telephony/carriers/preferapn_no_update");
static final String APN_ID = "apn_id";
private boolean canSetPreferApn = false;
@@ -849,9 +850,28 @@
// Connection is still there. Try to clean up.
if (dcac != null) {
if (apnContext.getState() != State.DISCONNECTING) {
- if (DBG) log("cleanUpConnection: tearing down");
+ boolean disconnectAll = false;
+ if (Phone.APN_TYPE_DUN.equals(apnContext.getApnType())) {
+ ApnSetting dunSetting = fetchDunApn();
+ if (dunSetting != null &&
+ dunSetting.equals(apnContext.getApnSetting())) {
+ if (DBG) log("tearing down dedicated DUN connection");
+ // we need to tear it down - we brought it up just for dun and
+ // other people are camped on it and now dun is done. We need
+ // to stop using it and let the normal apn list get used to find
+ // connections for the remaining desired connections
+ disconnectAll = true;
+ }
+ }
+ if (DBG) {
+ log("cleanUpConnection: tearing down" + (disconnectAll ? " all" :""));
+ }
Message msg = obtainMessage(EVENT_DISCONNECT_DONE, apnContext);
- apnContext.getDataConnection().tearDown(apnContext.getReason(), msg);
+ if (disconnectAll) {
+ apnContext.getDataConnection().tearDownAll(apnContext.getReason(), msg);
+ } else {
+ apnContext.getDataConnection().tearDown(apnContext.getReason(), msg);
+ }
apnContext.setState(State.DISCONNECTING);
}
} else {
@@ -2227,7 +2247,7 @@
RetryManager rm = new RetryManager();
int id = mUniqueIdGenerator.getAndIncrement();
- GsmDataConnection conn = GsmDataConnection.makeDataConnection(mPhone, id, rm);
+ GsmDataConnection conn = GsmDataConnection.makeDataConnection(mPhone, id, rm, this);
mDataConnections.put(id, conn);
DataConnectionAc dcac = new DataConnectionAc(conn, LOG_TAG);
int status = dcac.fullyConnectSync(mPhone.getContext(), this, conn.getHandler());
@@ -2357,26 +2377,30 @@
private void setPreferredApn(int pos) {
if (!canSetPreferApn) {
+ log("setPreferredApn: X !canSEtPreferApn");
return;
}
+ log("setPreferredApn: delete");
ContentResolver resolver = mPhone.getContext().getContentResolver();
- resolver.delete(PREFERAPN_URI, null, null);
+ resolver.delete(PREFERAPN_NO_UPDATE_URI, null, null);
if (pos >= 0) {
+ log("setPreferredApn: insert");
ContentValues values = new ContentValues();
values.put(APN_ID, pos);
- resolver.insert(PREFERAPN_URI, values);
+ resolver.insert(PREFERAPN_NO_UPDATE_URI, values);
}
}
private ApnSetting getPreferredApn() {
if (mAllApns.isEmpty()) {
+ log("getPreferredApn: X not found mAllApns.isEmpty");
return null;
}
Cursor cursor = mPhone.getContext().getContentResolver().query(
- PREFERAPN_URI, new String[] { "_id", "name", "apn" },
+ PREFERAPN_NO_UPDATE_URI, new String[] { "_id", "name", "apn" },
null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
if (cursor != null) {
@@ -2391,6 +2415,7 @@
pos = cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID));
for(ApnSetting p:mAllApns) {
if (p.id == pos && p.canHandleType(mRequestedApnType)) {
+ log("getPreferredApn: X found apnSetting" + p);
cursor.close();
return p;
}
@@ -2401,6 +2426,7 @@
cursor.close();
}
+ log("getPreferredApn: X not found");
return null;
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
index 5e2a9fd..b7d2c26 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java
@@ -141,7 +141,7 @@
} else if (!path.startsWith(HTTP_LOCAL_TESTS_PREFIX)
&& !path.startsWith(HTTP_MEDIA_TESTS_PREFIX)
&& !path.startsWith(HTTP_WML_TESTS_PREFIX)) {
- url = "http://127.0.0.1:18000/" + path.substring(HTTP_TESTS_PREFIX.length());
+ url = "http://127.0.0.1:8000/" + path.substring(HTTP_TESTS_PREFIX.length());
} else {
url = "file://" + path;
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java b/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
index 7a277d7..25dd04fd 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/forwarder/ForwardService.java
@@ -26,7 +26,7 @@
public class ForwardService {
- private ForwardServer fs18000, fs8080, fs8443;
+ private ForwardServer fs8000, fs8080, fs8443;
private static ForwardService inst;
@@ -40,7 +40,7 @@
private ForwardService() {
int addr = getForwardHostAddr();
if (addr != -1) {
- fs18000 = new ForwardServer(18000, addr, 8000);
+ fs8000 = new ForwardServer(8000, addr, 8000);
fs8080 = new ForwardServer(8080, addr, 8080);
fs8443 = new ForwardServer(8443, addr, 8443);
}
@@ -55,8 +55,8 @@
public void startForwardService() {
try {
- if (fs18000 != null)
- fs18000.start();
+ if (fs8000 != null)
+ fs8000.start();
if (fs8080 != null)
fs8080.start();
if (fs8443 != null)
@@ -68,9 +68,9 @@
}
public void stopForwardService() {
- if (fs18000 != null) {
- fs18000.stop();
- fs18000 = null;
+ if (fs8000 != null) {
+ fs8000.stop();
+ fs8000 = null;
}
if (fs8080 != null) {
fs8080.stop();
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 6f97ff0..112c606 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -38,6 +38,15 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
+ <activity
+ android:name="MatrixActivity"
+ android:label="_Matrix">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
<activity
android:name="TextFadeActivity"
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java
new file mode 100644
index 0000000..1906b9d
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class MatrixActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(new MatrixView(this));
+ }
+
+ static class MatrixView extends View {
+ MatrixView(Context c) {
+ super(c);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ canvas.drawRGB(255, 255, 255);
+
+ Log.d("Matrix", "m1=" + canvas.getMatrix());
+
+ canvas.save();
+ canvas.translate(10.0f, 10.0f);
+ Log.d("Matrix", "m2=" + canvas.getMatrix());
+ canvas.translate(20.0f, 20.0f);
+ Log.d("Matrix", "m3=" + canvas.getMatrix());
+ canvas.restore();
+ }
+ }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PosTextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PosTextActivity.java
index f0ff737..1c868d2 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/PosTextActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PosTextActivity.java
@@ -58,8 +58,21 @@
canvas.drawRGB(255, 255, 255);
canvas.save();
+
+ canvas.drawLine(100.0f, 0.0f, 100.0f, getHeight(), mLargePaint);
+
canvas.translate(100.0f, 100.0f);
+ mLargePaint.setTextAlign(Paint.Align.LEFT);
canvas.drawPosText(mText, mPos, mLargePaint);
+
+ canvas.translate(0.0f, 50.0f);
+ mLargePaint.setTextAlign(Paint.Align.CENTER);
+ canvas.drawPosText(mText, mPos, mLargePaint);
+
+ canvas.translate(0.0f, 50.0f);
+ mLargePaint.setTextAlign(Paint.Align.RIGHT);
+ canvas.drawPosText(mText, mPos, mLargePaint);
+
canvas.restore();
}
}
diff --git a/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/ComputePerf.java b/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/ComputePerf.java
index f7abe8b..5446f66 100644
--- a/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/ComputePerf.java
+++ b/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/ComputePerf.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2011-2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,10 +22,10 @@
import android.graphics.Bitmap;
import android.renderscript.RenderScript;
import android.renderscript.Allocation;
+import android.util.Log;
import android.widget.ImageView;
public class ComputePerf extends Activity {
-
private LaunchTest mLT;
private Mandelbrot mMandel;
private RenderScript mRS;
@@ -35,14 +35,28 @@
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
+ final int numTries = 100;
+
+ long timesXLW = 0;
+ long timesXYW = 0;
+
mRS = RenderScript.create(this);
mLT = new LaunchTest(mRS, getResources());
- mLT.run();
- mLT.run();
+ mLT.XLW();
+ mLT.XYW();
+ for (int i = 0; i < numTries; i++) {
+ timesXLW += mLT.XLW();
+ timesXYW += mLT.XYW();
+ }
+
+ timesXLW /= numTries;
+ timesXYW /= numTries;
+
+ // XLW and XYW running times should match pretty closely
+ Log.v("ComputePerf", "xlw launch test " + timesXLW + "ms");
+ Log.v("ComputePerf", "xyw launch test " + timesXYW + "ms");
mMandel = new Mandelbrot(mRS, getResources());
mMandel.run();
-
}
-
}
diff --git a/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/LaunchTest.java b/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/LaunchTest.java
index 0c29ce1..e2312ba 100644
--- a/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/LaunchTest.java
+++ b/tests/RenderScriptTests/ComputePerf/src/com/example/android/rs/computeperf/LaunchTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2011-2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
import android.content.res.Resources;
import android.renderscript.*;
-public class LaunchTest implements Runnable {
+public class LaunchTest {
private RenderScript mRS;
private Allocation mAllocationX;
private Allocation mAllocationXY;
@@ -40,18 +40,19 @@
mScript_xlw.bind_buf(mAllocationXY);
}
- public void run() {
+ public long XLW() {
long t = java.lang.System.currentTimeMillis();
mScript_xlw.forEach_root(mAllocationX);
mRS.finish();
t = java.lang.System.currentTimeMillis() - t;
- android.util.Log.v("ComputePerf", "xlw launch test ms " + t);
+ return t;
+ }
- t = java.lang.System.currentTimeMillis();
+ public long XYW() {
+ long t = java.lang.System.currentTimeMillis();
mScript_xyw.forEach_root(mAllocationXY);
mRS.finish();
t = java.lang.System.currentTimeMillis() - t;
- android.util.Log.v("ComputePerf", "xyw launch test ms " + t);
+ return t;
}
-
}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index 8e3ed93..f797836 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -717,7 +717,7 @@
/*package*/ static void native_drawCircle(int nativeCanvas,
float cx, float cy, float radius, int paint) {
native_drawOval(nativeCanvas,
- new RectF(cx - radius, cy - radius, radius, radius),
+ new RectF(cx - radius, cy - radius, cx + radius, cy + radius),
paint);
}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 1523823..9ebec61 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -904,17 +904,6 @@
}
@LayoutlibDelegate
- /*package*/ static float native_getFontMetrics(int native_paint, FontMetrics metrics) {
- // get the delegate from the native int.
- Paint_Delegate delegate = sManager.getDelegate(native_paint);
- if (delegate == null) {
- return 0.f;
- }
-
- return delegate.getFontMetrics(metrics);
- }
-
- @LayoutlibDelegate
/*package*/ static int native_getTextWidths(int native_object, char[] text, int index,
int count, float[] widths) {
// get the delegate from the native int.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
index 1e66ca2..516725e 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
@@ -471,4 +471,8 @@
public boolean hasNavigationBar() {
return false; // should this return something else?
}
+
+ public void lockNow() {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/tools/orientationplot/orientationplot.py b/tools/orientationplot/orientationplot.py
index 3a44cb2..f4e6b45 100755
--- a/tools/orientationplot/orientationplot.py
+++ b/tools/orientationplot/orientationplot.py
@@ -82,6 +82,7 @@
self.raw_acceleration_x = self._make_timeseries()
self.raw_acceleration_y = self._make_timeseries()
self.raw_acceleration_z = self._make_timeseries()
+ self.raw_acceleration_magnitude = self._make_timeseries()
self.raw_acceleration_axes = self._add_timeseries_axes(
1, 'Raw Acceleration', 'm/s^2', [-20, 20],
yticks=range(-15, 16, 5))
@@ -91,6 +92,8 @@
self.raw_acceleration_axes, 'y', 'green')
self.raw_acceleration_line_z = self._add_timeseries_line(
self.raw_acceleration_axes, 'z', 'blue')
+ self.raw_acceleration_line_magnitude = self._add_timeseries_line(
+ self.raw_acceleration_axes, 'magnitude', 'orange', linewidth=2)
self._add_timeseries_legend(self.raw_acceleration_axes)
shared_axis = self.raw_acceleration_axes
@@ -98,7 +101,7 @@
self.filtered_acceleration_x = self._make_timeseries()
self.filtered_acceleration_y = self._make_timeseries()
self.filtered_acceleration_z = self._make_timeseries()
- self.magnitude = self._make_timeseries()
+ self.filtered_acceleration_magnitude = self._make_timeseries()
self.filtered_acceleration_axes = self._add_timeseries_axes(
2, 'Filtered Acceleration', 'm/s^2', [-20, 20],
sharex=shared_axis,
@@ -109,7 +112,7 @@
self.filtered_acceleration_axes, 'y', 'green')
self.filtered_acceleration_line_z = self._add_timeseries_line(
self.filtered_acceleration_axes, 'z', 'blue')
- self.magnitude_line = self._add_timeseries_line(
+ self.filtered_acceleration_line_magnitude = self._add_timeseries_line(
self.filtered_acceleration_axes, 'magnitude', 'orange', linewidth=2)
self._add_timeseries_legend(self.filtered_acceleration_axes)
@@ -133,32 +136,46 @@
self.current_rotation = self._make_timeseries()
self.proposed_rotation = self._make_timeseries()
- self.proposal_rotation = self._make_timeseries()
+ self.predicted_rotation = self._make_timeseries()
self.orientation_axes = self._add_timeseries_axes(
- 5, 'Current / Proposed Orientation and Confidence', 'rotation', [-1, 4],
+ 5, 'Current / Proposed Orientation', 'rotation', [-1, 4],
sharex=shared_axis,
yticks=range(0, 4))
self.current_rotation_line = self._add_timeseries_line(
self.orientation_axes, 'current', 'black', linewidth=2)
- self.proposal_rotation_line = self._add_timeseries_line(
- self.orientation_axes, 'proposal', 'purple', linewidth=3)
+ self.predicted_rotation_line = self._add_timeseries_line(
+ self.orientation_axes, 'predicted', 'purple', linewidth=3)
self.proposed_rotation_line = self._add_timeseries_line(
self.orientation_axes, 'proposed', 'green', linewidth=3)
self._add_timeseries_legend(self.orientation_axes)
- self.proposal_confidence = [[self._make_timeseries(), self._make_timeseries()]
- for i in range(0, 4)]
- self.proposal_confidence_polys = []
+ self.time_until_settled = self._make_timeseries()
+ self.time_until_flat_delay_expired = self._make_timeseries()
+ self.time_until_swing_delay_expired = self._make_timeseries()
+ self.stability_axes = self._add_timeseries_axes(
+ 6, 'Proposal Stability', 'ms', [-10, 600],
+ sharex=shared_axis,
+ yticks=range(0, 600, 100))
+ self.time_until_settled_line = self._add_timeseries_line(
+ self.stability_axes, 'time until settled', 'black', linewidth=2)
+ self.time_until_flat_delay_expired_line = self._add_timeseries_line(
+ self.stability_axes, 'time until flat delay expired', 'green')
+ self.time_until_swing_delay_expired_line = self._add_timeseries_line(
+ self.stability_axes, 'time until swing delay expired', 'blue')
+ self._add_timeseries_legend(self.stability_axes)
self.sample_latency = self._make_timeseries()
self.sample_latency_axes = self._add_timeseries_axes(
- 6, 'Accelerometer Sampling Latency', 'ms', [-10, 500],
+ 7, 'Accelerometer Sampling Latency', 'ms', [-10, 500],
sharex=shared_axis,
yticks=range(0, 500, 100))
self.sample_latency_line = self._add_timeseries_line(
self.sample_latency_axes, 'latency', 'black')
self._add_timeseries_legend(self.sample_latency_axes)
+ self.fig.canvas.mpl_connect('button_press_event', self._on_click)
+ self.paused = False
+
self.timer = self.fig.canvas.new_timer(interval=100)
self.timer.add_callback(lambda: self.update())
self.timer.start()
@@ -166,13 +183,22 @@
self.timebase = None
self._reset_parse_state()
+ # Handle a click event to pause or restart the timer.
+ def _on_click(self, ev):
+ if not self.paused:
+ self.paused = True
+ self.timer.stop()
+ else:
+ self.paused = False
+ self.timer.start()
+
# Initialize a time series.
def _make_timeseries(self):
return [[], []]
# Add a subplot to the figure for a time series.
def _add_timeseries_axes(self, index, title, ylabel, ylim, yticks, sharex=None):
- num_graphs = 6
+ num_graphs = 7
height = 0.9 / num_graphs
top = 0.95 - height * index
axes = self.fig.add_axes([0.1, top, 0.8, height],
@@ -214,16 +240,19 @@
self.parse_raw_acceleration_x = None
self.parse_raw_acceleration_y = None
self.parse_raw_acceleration_z = None
+ self.parse_raw_acceleration_magnitude = None
self.parse_filtered_acceleration_x = None
self.parse_filtered_acceleration_y = None
self.parse_filtered_acceleration_z = None
- self.parse_magnitude = None
+ self.parse_filtered_acceleration_magnitude = None
self.parse_tilt_angle = None
self.parse_orientation_angle = None
self.parse_current_rotation = None
self.parse_proposed_rotation = None
- self.parse_proposal_rotation = None
- self.parse_proposal_confidence = None
+ self.parse_predicted_rotation = None
+ self.parse_time_until_settled = None
+ self.parse_time_until_flat_delay_expired = None
+ self.parse_time_until_swing_delay_expired = None
self.parse_sample_latency = None
# Update samples.
@@ -252,14 +281,13 @@
self.parse_raw_acceleration_x = self._get_following_number(line, 'x=')
self.parse_raw_acceleration_y = self._get_following_number(line, 'y=')
self.parse_raw_acceleration_z = self._get_following_number(line, 'z=')
+ self.parse_raw_acceleration_magnitude = self._get_following_number(line, 'magnitude=')
if line.find('Filtered acceleration vector:') != -1:
self.parse_filtered_acceleration_x = self._get_following_number(line, 'x=')
self.parse_filtered_acceleration_y = self._get_following_number(line, 'y=')
self.parse_filtered_acceleration_z = self._get_following_number(line, 'z=')
-
- if line.find('magnitude=') != -1:
- self.parse_magnitude = self._get_following_number(line, 'magnitude=')
+ self.parse_filtered_acceleration_magnitude = self._get_following_number(line, 'magnitude=')
if line.find('tiltAngle=') != -1:
self.parse_tilt_angle = self._get_following_number(line, 'tiltAngle=')
@@ -270,17 +298,20 @@
if line.find('Result:') != -1:
self.parse_current_rotation = self._get_following_number(line, 'currentRotation=')
self.parse_proposed_rotation = self._get_following_number(line, 'proposedRotation=')
- self.parse_proposal_rotation = self._get_following_number(line, 'proposalRotation=')
- self.parse_proposal_confidence = self._get_following_number(line, 'proposalConfidence=')
+ self.parse_predicted_rotation = self._get_following_number(line, 'predictedRotation=')
self.parse_sample_latency = self._get_following_number(line, 'timeDeltaMS=')
+ self.parse_time_until_settled = self._get_following_number(line, 'timeUntilSettledMS=')
+ self.parse_time_until_flat_delay_expired = self._get_following_number(line, 'timeUntilFlatDelayExpiredMS=')
+ self.parse_time_until_swing_delay_expired = self._get_following_number(line, 'timeUntilSwingDelayExpiredMS=')
self._append(self.raw_acceleration_x, timeindex, self.parse_raw_acceleration_x)
self._append(self.raw_acceleration_y, timeindex, self.parse_raw_acceleration_y)
self._append(self.raw_acceleration_z, timeindex, self.parse_raw_acceleration_z)
+ self._append(self.raw_acceleration_magnitude, timeindex, self.parse_raw_acceleration_magnitude)
self._append(self.filtered_acceleration_x, timeindex, self.parse_filtered_acceleration_x)
self._append(self.filtered_acceleration_y, timeindex, self.parse_filtered_acceleration_y)
self._append(self.filtered_acceleration_z, timeindex, self.parse_filtered_acceleration_z)
- self._append(self.magnitude, timeindex, self.parse_magnitude)
+ self._append(self.filtered_acceleration_magnitude, timeindex, self.parse_filtered_acceleration_magnitude)
self._append(self.tilt_angle, timeindex, self.parse_tilt_angle)
self._append(self.orientation_angle, timeindex, self.parse_orientation_angle)
self._append(self.current_rotation, timeindex, self.parse_current_rotation)
@@ -288,17 +319,13 @@
self._append(self.proposed_rotation, timeindex, self.parse_proposed_rotation)
else:
self._append(self.proposed_rotation, timeindex, None)
- if self.parse_proposal_rotation >= 0:
- self._append(self.proposal_rotation, timeindex, self.parse_proposal_rotation)
+ if self.parse_predicted_rotation >= 0:
+ self._append(self.predicted_rotation, timeindex, self.parse_predicted_rotation)
else:
- self._append(self.proposal_rotation, timeindex, None)
- for i in range(0, 4):
- self._append(self.proposal_confidence[i][0], timeindex, i)
- if i == self.parse_proposal_rotation:
- self._append(self.proposal_confidence[i][1], timeindex,
- i + self.parse_proposal_confidence)
- else:
- self._append(self.proposal_confidence[i][1], timeindex, i)
+ self._append(self.predicted_rotation, timeindex, None)
+ self._append(self.time_until_settled, timeindex, self.parse_time_until_settled)
+ self._append(self.time_until_flat_delay_expired, timeindex, self.parse_time_until_flat_delay_expired)
+ self._append(self.time_until_swing_delay_expired, timeindex, self.parse_time_until_swing_delay_expired)
self._append(self.sample_latency, timeindex, self.parse_sample_latency)
self._reset_parse_state()
@@ -309,45 +336,40 @@
self._scroll(self.raw_acceleration_x, bottom)
self._scroll(self.raw_acceleration_y, bottom)
self._scroll(self.raw_acceleration_z, bottom)
+ self._scroll(self.raw_acceleration_magnitude, bottom)
self._scroll(self.filtered_acceleration_x, bottom)
self._scroll(self.filtered_acceleration_y, bottom)
self._scroll(self.filtered_acceleration_z, bottom)
- self._scroll(self.magnitude, bottom)
+ self._scroll(self.filtered_acceleration_magnitude, bottom)
self._scroll(self.tilt_angle, bottom)
self._scroll(self.orientation_angle, bottom)
self._scroll(self.current_rotation, bottom)
self._scroll(self.proposed_rotation, bottom)
- self._scroll(self.proposal_rotation, bottom)
- for i in range(0, 4):
- self._scroll(self.proposal_confidence[i][0], bottom)
- self._scroll(self.proposal_confidence[i][1], bottom)
+ self._scroll(self.predicted_rotation, bottom)
+ self._scroll(self.time_until_settled, bottom)
+ self._scroll(self.time_until_flat_delay_expired, bottom)
+ self._scroll(self.time_until_swing_delay_expired, bottom)
self._scroll(self.sample_latency, bottom)
# Redraw the plots.
self.raw_acceleration_line_x.set_data(self.raw_acceleration_x)
self.raw_acceleration_line_y.set_data(self.raw_acceleration_y)
self.raw_acceleration_line_z.set_data(self.raw_acceleration_z)
+ self.raw_acceleration_line_magnitude.set_data(self.raw_acceleration_magnitude)
self.filtered_acceleration_line_x.set_data(self.filtered_acceleration_x)
self.filtered_acceleration_line_y.set_data(self.filtered_acceleration_y)
self.filtered_acceleration_line_z.set_data(self.filtered_acceleration_z)
- self.magnitude_line.set_data(self.magnitude)
+ self.filtered_acceleration_line_magnitude.set_data(self.filtered_acceleration_magnitude)
self.tilt_angle_line.set_data(self.tilt_angle)
self.orientation_angle_line.set_data(self.orientation_angle)
self.current_rotation_line.set_data(self.current_rotation)
self.proposed_rotation_line.set_data(self.proposed_rotation)
- self.proposal_rotation_line.set_data(self.proposal_rotation)
+ self.predicted_rotation_line.set_data(self.predicted_rotation)
+ self.time_until_settled_line.set_data(self.time_until_settled)
+ self.time_until_flat_delay_expired_line.set_data(self.time_until_flat_delay_expired)
+ self.time_until_swing_delay_expired_line.set_data(self.time_until_swing_delay_expired)
self.sample_latency_line.set_data(self.sample_latency)
- for poly in self.proposal_confidence_polys:
- poly.remove()
- self.proposal_confidence_polys = []
- for i in range(0, 4):
- self.proposal_confidence_polys.append(self.orientation_axes.fill_between(
- self.proposal_confidence[i][0][0],
- self.proposal_confidence[i][0][1],
- self.proposal_confidence[i][1][1],
- facecolor='goldenrod', edgecolor='goldenrod'))
-
self.fig.canvas.draw_idle()
# Scroll a time series.