14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * ESR_ReturnCode.h * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef ESR_RETURNCODE_H 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define ESR_RETURNCODE_H 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PortPrefix.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @addtogroup ESR_PortableModule ESR_Portable API functions 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Return-code values. 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef enum ESR_ReturnCode_t 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Note: do not forget to modify ESR_rc2str when modifying this enum. 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Operation completed successfully. 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SUCCESS, 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Intermediate stage of operation completed successfully, we wish to indicate 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * that remainig stages of operation may proceed. 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_CONTINUE_PROCESSING, 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates a fatal error. 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_FATAL_ERROR, 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Buffer overflow occured. 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BUFFER_OVERFLOW, 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error typing to open an entity or the operation failed because the entity was not opened. 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_OPEN_ERROR, 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to open an entity that is already open. 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ALREADY_OPEN, 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error typing to close a entity or the operation failed because the entity was not closed. 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_CLOSE_ERROR, 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to close a entity that was already closed. 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ALREADY_CLOSED, 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to read a file. 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_READ_ERROR, 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to write to a entity. 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_WRITE_ERROR, 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to flush a entity. 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_FLUSH_ERROR, 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to seek a entity. 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SEEK_ERROR, 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Error trying to allocate memory. 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_OUT_OF_MEMORY, 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Specified argument is out of bounds. 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ARGUMENT_OUT_OF_BOUNDS, 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Failed to locate the specified entity. 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_NO_MATCH_ERROR, 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Passed in argument contains an invalid value. Such as when a NULL pointer 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * is passed in when when an actual value is expected. 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_INVALID_ARGUMENT, 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that request functionality is not supported. 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_NOT_SUPPORTED, 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that the object is not in a state such that the operation can 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * be succesfully performed. 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_INVALID_STATE, 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that a thread could not be created. 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_THREAD_CREATION_ERROR, 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that a resource with the same identifier already exists. 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_IDENTIFIER_COLLISION, 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that the operation timed out. 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_TIMED_OUT, 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that the object being retrieved isn't of the expected type. 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * For example, when retrieving an integer from a HashMap we find out the 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * value is actually of type float. 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_INVALID_RESULT_TYPE, 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that the invoked function has not been implemented. 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_NOT_IMPLEMENTED, 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A connection was forcibly closed by a peer. This normally results from 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * a loss of the connection on the remote socket due to a timeout or a reboot. 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_CONNECTION_RESET_BY_PEER, 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that a process could not be created. 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_PROCESS_CREATE_ERROR, 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that no matching TTS engine is available. 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_TTS_NO_ENGINE, 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates that an attempt to create a mutex failed because the OS is running out of resources. 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_MUTEX_CREATION_ERROR, 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates a deadlock situation has occured. 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_DEADLOCK 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} ESR_ReturnCode; 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Checks the function return-code and if it is not ESR_SUCCESS, returns it. 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define CHK(rc, x) do { if ((rc = (x)) != ESR_SUCCESS) goto CLEANUP; } while (0) 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h" 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Given a return-code, returns its string representation. 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param rc Return-code 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return String representation of return-code. 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API const LCHAR* ESR_rc2str(const ESR_ReturnCode rc); 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef _WIN32 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Called before entering any function. 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API void _cdecl _penter(void); 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Called after exiting any function. 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API void _cdecl _pexit(void); 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 221