public <T> BaiduBCSResponse<T> execute(BCSHttpRequest paramBCSHttpRequest, HttpResponseHandler<T> paramHttpResponseHandler) {
		HttpRequestBase localHttpRequestBase = this.httpRequestFactory.createHttpRequestBase(this.config, paramBCSHttpRequest);
		boolean bool = false;
		this.httpClient.getConnectionManager().closeIdleConnections(30L, TimeUnit.SECONDS);

		int i = 0;
		while (true) {
			HttpResponse localHttpResponse = null;
			try {
				pauseExponentially(i);
				++i;
				localHttpResponse = this.httpClient.execute(localHttpRequestBase);
				log.info("Send Request Finish: Status:"+localHttpResponse.getStatusLine()+",URI:"+ localHttpRequestBase.getURI());
				if (isRequestSuccessful(localHttpResponse)) {
					bool = paramHttpResponseHandler.isNeedsConnectionLeftOpen();
					return handleHttpResponse(paramBCSHttpRequest, localHttpResponse, paramHttpResponseHandler);
				}
				BCSServiceException localObject1 = handleErrorHttpResponse(paramBCSHttpRequest, localHttpResponse, this.errorResponseHandler).getResult();
				if (!(shouldRetry((Exception) localObject1, i)))
					throw localObject1;
			} catch (ClientProtocolException localThrowable2) {
				log.warn("Unable to execute HTTP request: "+localThrowable2.getMessage());
				if (!(shouldRetry(localThrowable2, i))){
					throw new BCSClientException("Send to server failed: " + localThrowable2.getMessage(), localThrowable2);
				}
			} catch (IOException localThrowable3) {
				log.warn("Unable to execute HTTP request: "+ localThrowable3.getMessage());
				if (!(shouldRetry(localThrowable3, i))) {
					throw new BCSClientException("Send to server failed: " + localThrowable3.getMessage(), localThrowable3);
				}
			} finally {
				if (!(bool))
					try {
						localHttpResponse.getEntity().getContent().close();
					} catch (Throwable localThrowable5) {
					}
			}
		}
	}