using IStation.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Net;
|
using System.Text;
|
using System.Web.Configuration;
|
|
namespace IStation.BLL
|
{
|
public class PumpRunHelper
|
{
|
/// <summary>
|
/// 查询实际数据
|
/// 从众毅获取
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public Model.RunParasData GetPumpRunParasOneDay(DateTime dateTime, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetByOneDay?startday={1}", apiServiceUrl, dateTime.ToString("yyyy-MM-dd"));
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
//myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<Model.RunParasData>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询去年运行数据
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public Model.RunParasData GetByHistoryOneData(DateTime dateTime, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetByHistoryOneDay?day={1}", apiServiceUrl, dateTime.ToString("yyyy-MM-dd"));
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<Model.RunParasData>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询取水量数据
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.PumpWater> GetByPumpOneDayWaterData(DateTime dateTime, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetOneDayData?day={1}", apiServiceUrl, dateTime.ToString("yyyy-MM-dd"));
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.PumpWater>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询天供水数据
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.OutList> GetPumpOutWaterData(DateTime StartTime, DateTime EndTime, int sgin, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetPumpOutDayWater?startday={1}&endday={2}&sign={3}", apiServiceUrl, StartTime.ToString("yyyy-MM-dd"), EndTime.ToString("yyyy-MM-dd"), sgin);
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.OutList>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询月供水数据
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.PumpOutWater> GetPumpOutMonthWaterData(out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetPumpOutMonthWater", apiServiceUrl);
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.PumpOutWater>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询天总管供水数据(瞬时流量)
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.OutTotalOneDayList> GetPumpOutTotalDayWaterData(DateTime StartTime, DateTime EndTime, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetPumpTotalDayOutWater?startday={1}&endday={2}", apiServiceUrl, StartTime.ToString("yyyy-MM-dd"), EndTime.ToString("yyyy-MM-dd"));
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.OutTotalOneDayList>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 查询天总管供水数据(累计流量)
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.OutTotalOneDayList> GetPumpOutTotalDayAccWaterData(DateTime StartTime, DateTime EndTime, out string error)
|
{
|
string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}
|
string url = string.Format(@"{0}/PumpRun/GetPumpTotalDayAccOutWater?startday={1}&endday={2}", apiServiceUrl, StartTime.ToString("yyyy-MM-dd"), EndTime.ToString("yyyy-MM-dd"));
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.OutTotalOneDayList>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
//string currenturl = "http://192.168.201.204:85/";
|
private string currenturl = "http://47.100.245.85:8188";
|
|
/// <summary>
|
/// 预测供水数据 (瞬时)
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.SSAData> GetPredictOutTotalDayWaterData(DateTime StartTime, int days, int DataNumber, out string error)
|
{
|
/* string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}*/
|
string url = string.Format(@"{0}/Predict/PredictOutWater?dateTime={1}&days={2}&DataNumber={3}", currenturl, StartTime, -days, DataNumber);
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.SSAData>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
/// <summary>
|
/// 预测供水数据 (累计)
|
/// </summary>
|
/// <param name="dateTime"></param>
|
/// <param name="error"></param>
|
/// <returns></returns>
|
public List<Model.SSAData> GetPredictOutTotalAccDayWaterData(DateTime StartTime, int days, int DataNumber, out string error)
|
{
|
/* string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
|
if (string.IsNullOrEmpty(apiServiceUrl))
|
{
|
error = "ApiServiceUrl 为空";
|
return null;
|
}*/
|
string url = string.Format(@"{0}/Predict/PredictOutAccWater?dateTime={1}&days={2}&DataNumber={3}", currenturl, StartTime, -days, DataNumber);
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
myRequest.Method = "GET";
|
//myRequest.Accept = "application/json";
|
// myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
//myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
if (string.IsNullOrEmpty(returnData))
|
{
|
myResponse.Close();
|
error = "利用StreamReader就可以从响应内容从头读到尾";
|
return null;
|
}
|
var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<List<Model.SSAData>>>(returnData);
|
reader.Close();
|
myResponse.Close();
|
error = null;
|
return ret.Data;
|
}
|
|
//保存预测数据到服务器
|
public bool SavePredictData(List<SSAData> totalOneDay)
|
{
|
// string url = string.Format(@"{0}/AnaPrj/SavePrj", ServiceParas.ApiServiceUrl);
|
//Model.TotalOneDay request = new TotalOneDay();
|
string url = @" {0}/PredictOutWater/SavePredictResult";
|
|
string parameterData = JsonHelper.Object2Json(totalOneDay);
|
// string json=
|
//先根据用户请求的uri构造请求地址
|
//string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
|
//string ContentType = "application/json";
|
string Accept = "application/json";
|
//创建Web访问对象
|
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
|
//把用户传过来的数据转成“UTF-8”的字节流
|
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData);
|
|
myRequest.Method = "POST";
|
//myRequest.Accept = "application/json";
|
//myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
|
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
myRequest.Accept = Accept;
|
//myRequest.ContentType = ContentType;
|
myRequest.ContentType = "application/json; charset=UTF-8";
|
myRequest.ContentLength = buf.Length;
|
myRequest.MaximumAutomaticRedirections = 1;
|
myRequest.AllowAutoRedirect = true;
|
//myRequest.Headers.Add("content-type", "application/json");
|
//myRequest.Headers.Add("accept-encoding", "gzip");
|
//myRequest.Headers.Add("accept-charset", "utf-8");
|
|
//发送请求
|
Stream stream = myRequest.GetRequestStream();
|
stream.Write(buf, 0, buf.Length);
|
stream.Close();
|
|
//通过Web访问对象获取响应内容
|
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
|
//通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
|
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
|
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
|
string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
|
reader.Close();
|
myResponse.Close();
|
if (returnData != null)
|
{
|
return true;
|
}
|
else return false;
|
}
|
}
|
}
|