1: using System;
2: using System.ComponentModel.DataAnnotations;
3: using System.ComponentModel.DataAnnotations.Schema;
4:
5: namespace Ia.Ngn.Cl.Model
6: {
7: ////////////////////////////////////////////////////////////////////////////
8:
9: /// <summary publish="true">
10: /// Service Entity Framework class for Next Generation Network (NGN) entity model.
11: /// </summary>
12: ///
13: /// <remarks>
14: /// Copyright © 2006-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
15: ///
16: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
17: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
18: ///
19: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
20: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
21: ///
22: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
23: ///
24: /// Copyright notice: This notice may not be removed or altered from any source distribution.
25: /// </remarks>
26: public partial class Service2
27: {
28: /// <summary/>
29: public Service2() { }
30:
31: /// <summary/>
32: [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
33: public string Id { get; set; }
34:
35: /// <summary/>
36: public string Service { get; set; }
37: /// <summary/>
38: public int ServiceType { get; set; }
39: /// <summary/>
40: public int AreaCode { get; set; }
41: /// <summary/>
42: public bool CallWaiting { get; set; }
43: /// <summary/>
44: public bool CallForwarding { get; set; }
45: /// <summary/>
46: public bool AlarmCall { get; set; }
47: /// <summary/>
48: public bool WakeupCall { get; set; }
49: /// <summary/>
50: public bool InternationalCallingUserControlled { get; set; }
51: /// <summary/>
52: public bool InternationalCalling { get; set; }
53: /// <summary/>
54: public bool CallerId { get; set; }
55: /// <summary/>
56: public bool ConferenceCall { get; set; }
57: /// <summary/>
58: public bool CallBarring { get; set; }
59: /// <summary/>
60: public bool ServiceSuspension { get; set; }
61: /// <summary/>
62: public bool AbbriviatedCalling { get; set; }
63: /// <summary/>
64: public bool CallForwardingUnconditional { get; set; }
65: /// <summary/>
66: public bool CallingLineIdentificationRestriction { get; set; }
67: /// <summary/>
68: public bool ConnectedLineIdentificationRestriction { get; set; }
69: /// <summary/>
70: public bool WakeUp { get; set; }
71: /// <summary/>
72: public bool CallForwardingByTime { get; set; }
73: /// <summary/>
74: public bool MutlimediaInformationPresentation { get; set; }
75: /// <summary/>
76: public bool SelectiveOutgoingCallBarring { get; set; }
77: /// <summary/>
78: public bool DialNumberCallOutAllow { get; set; }
79: /// <summary/>
80: public bool DoNotDisturb { get; set; }
81: /// <summary/>
82: public bool OutgoingCallBarring { get; set; }
83: /// <summary/>
84: public bool TemporaryLine { get; set; }
85: /// <summary/>
86: public bool CodecControl { get; set; }
87: /// <summary/>
88: public bool SelectiveIncomingCallBarring { get; set; }
89: /// <summary/>
90: public bool SelectiveCallForwarding { get; set; }
91: /// <summary/>
92: public bool DialNumberCallOutBarring { get; set; }
93: /// <summary/>
94: public bool CallForwardingBasedonBlackList { get; set; }
95: /// <summary/>
96: public bool CallForwardingBusy { get; set; }
97: /// <summary/>
98: public bool CallForwardingNoReply { get; set; }
99: /// <summary/>
100: public bool CallForwardingOffline { get; set; }
101: /// <summary/>
102: public bool CallForwardingOnUserNotReachable { get; set; }
103: /// <summary/>
104: public bool CallForwardingNoReplyinCallWaiting { get; set; }
105: /// <summary/>
106: public bool MultiRinging { get; set; }
107: /// <summary/>
108: public bool ConvergentInterPersonalService { get; set; }
109: /// <summary/>
110: public bool CallForwardingBySequence { get; set; }
111: /// <summary/>
112: public bool UserNumberChange { get; set; }
113: /// <summary/>
114: public bool BlackNumberData { get; set; }
115: /// <summary/>
116: public bool WhiteNumberData { get; set; }
117: /// <summary/>
118: public bool OwedRestriction { get; set; }
119: /// <summary/>
120: public bool Strategy { get; set; }
121: /// <summary/>
122: public bool GreenNumberData { get; set; }
123: /// <summary/>
124: public bool RedNumberData { get; set; }
125: /// <summary/>
126: public bool BarringOfAllOutgoingCalls { get; set; }
127: /// <summary/>
128: public bool BarringOfAllOutgoingInternationalCalls { get; set; }
129: /// <summary/>
130: public bool BarringOfOutgoingInternationalCallsExceptThoseDirectedToTheHomePlmnCountry { get; set; }
131: /// <summary/>
132: public bool BarringOfAllIncomingCalls { get; set; }
133: /// <summary/>
134: public bool BarringOfIncomingCallsWhenRoamingOutsideTheHomePlmnCountry { get; set; }
135: /// <summary/>
136: public bool SpeedDial { get; set; }
137: /// <summary/>
138: public bool GreenCall { get; set; }
139: /// <summary/>
140: public bool SetDataUpgrade { get; set; }
141: /// <summary/>
142: public bool AutoConsole { get; set; }
143: /// <summary/>
144: public bool NightService { get; set; }
145: /// <summary/>
146: public bool BackupNumber { get; set; }
147: /// <summary/>
148: public bool Absence { get; set; }
149: /// <summary/>
150: public bool AuthorizedCodeForStdIdd { get; set; }
151: /// <summary/>
152: public bool Hotline { get; set; }
153: /// <summary/>
154: public bool CetMaliciousCommunicationIdentification { get; set; }
155: /// <summary/>
156: public bool MissCallNotify { get; set; }
157: /// <summary/>
158: public bool SubscriptionStatus { get; set; }
159: /// <summary/>
160: public bool UsbDongleOneKeyService { get; set; }
161: /// <summary/>
162: public bool IRoamingInboundSingleImsiMultiMsisdn { get; set; }
163: /// <summary/>
164: public bool IRoamingOutboundSingleImsiMultiMsisdn { get; set; }
165: /// <summary/>
166: public bool NpaSplit { get; set; }
167: /// <summary/>
168: public bool AllCallForwardingGroup { get; set; }
169: /// <summary/>
170: public bool ConditionalCallForwardingGroup { get; set; }
171: /// <summary/>
172: public bool GeneralOrigIdentificationRestriction { get; set; }
173: /// <summary/>
174: public bool MultimediaOfOrigIdRestriction { get; set; }
175: /// <summary/>
176: public bool TerminatingIdentityRestriction { get; set; }
177: /// <summary/>
178: public bool DistinctiveRing { get; set; }
179: /// <summary/>
180: public bool VisitedNetworkImpu { get; set; }
181: /// <summary/>
182: public bool SeasonalSuspend { get; set; }
183: /// <summary/>
184: public bool NumberInvalidation { get; set; }
185: /// <summary/>
186: public bool IroamingServiceProvision { get; set; }
187: /// <summary/>
188: public bool IptvCallerId { get; set; }
189: /// <summary/>
190: public bool IptvVideoCall { get; set; }
191: /// <summary/>
192: public bool NumberPortability { get; set; }
193: /// <summary/>
194: public bool SecretaryService { get; set; }
195: /// <summary/>
196: public bool SalesBlock { get; set; }
197: /// <summary/>
198: public bool FilterCriteria { get; set; }
199: /// <summary/>
200: public bool CallerInformation { get; set; }
201: /// <summary/>
202: public bool PresenceStatus { get; set; }
203: /// <summary/>
204: public bool OneNumberService { get; set; }
205: /// <summary/>
206: public bool AssociationList { get; set; }
207: /// <summary/>
208: public int Pin { get; set; }
209:
210: /// <summary/>
211: public int Port { get; set; }
212:
213: /// <summary/>
214: public virtual Access Access { get; set; }
215:
216: /// <summary/>
217: public DateTime Created { get; set; }
218: /// <summary/>
219: public DateTime Updated { get; set; }
220: /// <summary/>
221: public System.Guid UserId { get; set; }
222:
223: ////////////////////////////////////////////////////////////////////////////
224:
225: /// <summary>
226: ///
227: /// </summary>
228: [NotMapped]
229: public int Position
230: {
231: get
232: {
233: return 0; // Ia.Ngn.Cl.Model.Data.Service.ServiceIdPositionDictionary[this.Id];
234: }
235: }
236:
237: ////////////////////////////////////////////////////////////////////////////
238:
239: /// <summary>
240: ///
241: /// </summary>
242: public bool Update(Service2 updatedService)
243: {
244: // below: this will not update Id, Created
245: bool updated;
246:
247: updated = false;
248:
249: if (this.Service != updatedService.Service) { this.Service = updatedService.Service; updated = true; }
250: if (this.ServiceType != updatedService.ServiceType) { this.ServiceType = updatedService.ServiceType; updated = true; }
251: if (this.AreaCode != updatedService.AreaCode) { this.AreaCode = updatedService.AreaCode; updated = true; }
252: if (this.CallWaiting != updatedService.CallWaiting) { this.CallWaiting = updatedService.CallWaiting; updated = true; }
253: if (this.CallForwarding != updatedService.CallForwarding) { this.CallForwarding = updatedService.CallForwarding; updated = true; }
254:
255: if (this.AlarmCall != updatedService.AlarmCall) { this.AlarmCall = updatedService.AlarmCall; updated = true; }
256: if (this.WakeupCall != updatedService.WakeupCall) { this.WakeupCall = updatedService.WakeupCall; updated = true; }
257:
258: // remove later if (this.CallBarring != updatedService.CallBarring) { this.CallBarring = updatedService.CallBarring; updated = true; }
259: if (this.InternationalCallingUserControlled != updatedService.InternationalCallingUserControlled) { this.InternationalCallingUserControlled = updatedService.InternationalCallingUserControlled; updated = true; }
260: if (this.InternationalCalling != updatedService.InternationalCalling) { this.InternationalCalling = updatedService.InternationalCalling; updated = true; }
261: if (this.CallerId != updatedService.CallerId) { this.CallerId = updatedService.CallerId; updated = true; }
262: if (this.ConferenceCall != updatedService.ConferenceCall) { this.ConferenceCall = updatedService.ConferenceCall; updated = true; }
263: if (this.ServiceSuspension != updatedService.ServiceSuspension) { this.ServiceSuspension = updatedService.ServiceSuspension; updated = true; }
264: //if (this.ServiceSuspensionTypeId != updatedService.ServiceSuspensionTypeId) { this.ServiceSuspensionTypeId = updatedService.ServiceSuspensionTypeId; updated = true; }
265: if (this.AbbriviatedCalling != updatedService.AbbriviatedCalling) { this.AbbriviatedCalling = updatedService.AbbriviatedCalling; updated = true; }
266: if (this.CallForwardingUnconditional != updatedService.CallForwardingUnconditional) { this.CallForwardingUnconditional = updatedService.CallForwardingUnconditional; updated = true; }
267: if (this.CallingLineIdentificationRestriction != updatedService.CallingLineIdentificationRestriction) { this.CallingLineIdentificationRestriction = updatedService.CallingLineIdentificationRestriction; updated = true; }
268: if (this.ConnectedLineIdentificationRestriction != updatedService.ConnectedLineIdentificationRestriction) { this.ConnectedLineIdentificationRestriction = updatedService.ConnectedLineIdentificationRestriction; updated = true; }
269: if (this.WakeUp != updatedService.WakeUp) { this.WakeUp = updatedService.WakeUp; updated = true; }
270: if (this.CallForwardingByTime != updatedService.CallForwardingByTime) { this.CallForwardingByTime = updatedService.CallForwardingByTime; updated = true; }
271: if (this.MutlimediaInformationPresentation != updatedService.MutlimediaInformationPresentation) { this.MutlimediaInformationPresentation = updatedService.MutlimediaInformationPresentation; updated = true; }
272: if (this.SelectiveOutgoingCallBarring != updatedService.SelectiveOutgoingCallBarring) { this.SelectiveOutgoingCallBarring = updatedService.SelectiveOutgoingCallBarring; updated = true; }
273: if (this.DialNumberCallOutAllow != updatedService.DialNumberCallOutAllow) { this.DialNumberCallOutAllow = updatedService.DialNumberCallOutAllow; updated = true; }
274: if (this.DoNotDisturb != updatedService.DoNotDisturb) { this.DoNotDisturb = updatedService.DoNotDisturb; updated = true; }
275: if (this.OutgoingCallBarring != updatedService.OutgoingCallBarring) { this.OutgoingCallBarring = updatedService.OutgoingCallBarring; updated = true; }
276: if (this.TemporaryLine != updatedService.TemporaryLine) { this.TemporaryLine = updatedService.TemporaryLine; updated = true; }
277: if (this.CodecControl != updatedService.CodecControl) { this.CodecControl = updatedService.CodecControl; updated = true; }
278: if (this.SelectiveIncomingCallBarring != updatedService.SelectiveIncomingCallBarring) { this.SelectiveIncomingCallBarring = updatedService.SelectiveIncomingCallBarring; updated = true; }
279: if (this.SelectiveCallForwarding != updatedService.SelectiveCallForwarding) { this.SelectiveCallForwarding = updatedService.SelectiveCallForwarding; updated = true; }
280: if (this.DialNumberCallOutBarring != updatedService.DialNumberCallOutBarring) { this.DialNumberCallOutBarring = updatedService.DialNumberCallOutBarring; updated = true; }
281: if (this.CallForwardingBasedonBlackList != updatedService.CallForwardingBasedonBlackList) { this.CallForwardingBasedonBlackList = updatedService.CallForwardingBasedonBlackList; updated = true; }
282: if (this.CallForwardingBusy != updatedService.CallForwardingBusy) { this.CallForwardingBusy = updatedService.CallForwardingBusy; updated = true; }
283: if (this.CallForwardingNoReply != updatedService.CallForwardingNoReply) { this.CallForwardingNoReply = updatedService.CallForwardingNoReply; updated = true; }
284: if (this.CallForwardingOffline != updatedService.CallForwardingOffline) { this.CallForwardingOffline = updatedService.CallForwardingOffline; updated = true; }
285: if (this.CallForwardingOnUserNotReachable != updatedService.CallForwardingOnUserNotReachable) { this.CallForwardingOnUserNotReachable = updatedService.CallForwardingOnUserNotReachable; updated = true; }
286: if (this.CallForwardingNoReplyinCallWaiting != updatedService.CallForwardingNoReplyinCallWaiting) { this.CallForwardingNoReplyinCallWaiting = updatedService.CallForwardingNoReplyinCallWaiting; updated = true; }
287: if (this.MultiRinging != updatedService.MultiRinging) { this.MultiRinging = updatedService.MultiRinging; updated = true; }
288: if (this.ConvergentInterPersonalService != updatedService.ConvergentInterPersonalService) { this.ConvergentInterPersonalService = updatedService.ConvergentInterPersonalService; updated = true; }
289: if (this.CallForwardingBySequence != updatedService.CallForwardingBySequence) { this.CallForwardingBySequence = updatedService.CallForwardingBySequence; updated = true; }
290: if (this.UserNumberChange != updatedService.UserNumberChange) { this.UserNumberChange = updatedService.UserNumberChange; updated = true; }
291: if (this.BlackNumberData != updatedService.BlackNumberData) { this.BlackNumberData = updatedService.BlackNumberData; updated = true; }
292: if (this.WhiteNumberData != updatedService.WhiteNumberData) { this.WhiteNumberData = updatedService.WhiteNumberData; updated = true; }
293: if (this.OwedRestriction != updatedService.OwedRestriction) { this.OwedRestriction = updatedService.OwedRestriction; updated = true; }
294: if (this.Strategy != updatedService.Strategy) { this.Strategy = updatedService.Strategy; updated = true; }
295: if (this.GreenNumberData != updatedService.GreenNumberData) { this.GreenNumberData = updatedService.GreenNumberData; updated = true; }
296: if (this.RedNumberData != updatedService.RedNumberData) { this.RedNumberData = updatedService.RedNumberData; updated = true; }
297: if (this.BarringOfAllOutgoingCalls != updatedService.BarringOfAllOutgoingCalls) { this.BarringOfAllOutgoingCalls = updatedService.BarringOfAllOutgoingCalls; updated = true; }
298: if (this.BarringOfAllOutgoingInternationalCalls != updatedService.BarringOfAllOutgoingInternationalCalls) { this.BarringOfAllOutgoingInternationalCalls = updatedService.BarringOfAllOutgoingInternationalCalls; updated = true; }
299: if (this.BarringOfOutgoingInternationalCallsExceptThoseDirectedToTheHomePlmnCountry != updatedService.BarringOfOutgoingInternationalCallsExceptThoseDirectedToTheHomePlmnCountry) { this.BarringOfOutgoingInternationalCallsExceptThoseDirectedToTheHomePlmnCountry = updatedService.BarringOfOutgoingInternationalCallsExceptThoseDirectedToTheHomePlmnCountry; updated = true; }
300: if (this.BarringOfAllIncomingCalls != updatedService.BarringOfAllIncomingCalls) { this.BarringOfAllIncomingCalls = updatedService.BarringOfAllIncomingCalls; updated = true; }
301: if (this.BarringOfIncomingCallsWhenRoamingOutsideTheHomePlmnCountry != updatedService.BarringOfIncomingCallsWhenRoamingOutsideTheHomePlmnCountry) { this.BarringOfIncomingCallsWhenRoamingOutsideTheHomePlmnCountry = updatedService.BarringOfIncomingCallsWhenRoamingOutsideTheHomePlmnCountry; updated = true; }
302: if (this.SpeedDial != updatedService.SpeedDial) { this.SpeedDial = updatedService.SpeedDial; updated = true; }
303: if (this.GreenCall != updatedService.GreenCall) { this.GreenCall = updatedService.GreenCall; updated = true; }
304: if (this.SetDataUpgrade != updatedService.SetDataUpgrade) { this.SetDataUpgrade = updatedService.SetDataUpgrade; updated = true; }
305: if (this.AutoConsole != updatedService.AutoConsole) { this.AutoConsole = updatedService.AutoConsole; updated = true; }
306: if (this.NightService != updatedService.NightService) { this.NightService = updatedService.NightService; updated = true; }
307: if (this.BackupNumber != updatedService.BackupNumber) { this.BackupNumber = updatedService.BackupNumber; updated = true; }
308: if (this.Absence != updatedService.Absence) { this.Absence = updatedService.Absence; updated = true; }
309: if (this.AuthorizedCodeForStdIdd != updatedService.AuthorizedCodeForStdIdd) { this.AuthorizedCodeForStdIdd = updatedService.AuthorizedCodeForStdIdd; updated = true; }
310: if (this.Hotline != updatedService.Hotline) { this.Hotline = updatedService.Hotline; updated = true; }
311: if (this.CetMaliciousCommunicationIdentification != updatedService.CetMaliciousCommunicationIdentification) { this.CetMaliciousCommunicationIdentification = updatedService.CetMaliciousCommunicationIdentification; updated = true; }
312: if (this.MissCallNotify != updatedService.MissCallNotify) { this.MissCallNotify = updatedService.MissCallNotify; updated = true; }
313: if (this.SubscriptionStatus != updatedService.SubscriptionStatus) { this.SubscriptionStatus = updatedService.SubscriptionStatus; updated = true; }
314: if (this.UsbDongleOneKeyService != updatedService.UsbDongleOneKeyService) { this.UsbDongleOneKeyService = updatedService.UsbDongleOneKeyService; updated = true; }
315: if (this.IRoamingInboundSingleImsiMultiMsisdn != updatedService.IRoamingInboundSingleImsiMultiMsisdn) { this.IRoamingInboundSingleImsiMultiMsisdn = updatedService.IRoamingInboundSingleImsiMultiMsisdn; updated = true; }
316: if (this.IRoamingOutboundSingleImsiMultiMsisdn != updatedService.IRoamingOutboundSingleImsiMultiMsisdn) { this.IRoamingOutboundSingleImsiMultiMsisdn = updatedService.IRoamingOutboundSingleImsiMultiMsisdn; updated = true; }
317: if (this.NpaSplit != updatedService.NpaSplit) { this.NpaSplit = updatedService.NpaSplit; updated = true; }
318: if (this.AllCallForwardingGroup != updatedService.AllCallForwardingGroup) { this.AllCallForwardingGroup = updatedService.AllCallForwardingGroup; updated = true; }
319: if (this.ConditionalCallForwardingGroup != updatedService.ConditionalCallForwardingGroup) { this.ConditionalCallForwardingGroup = updatedService.ConditionalCallForwardingGroup; updated = true; }
320: if (this.GeneralOrigIdentificationRestriction != updatedService.GeneralOrigIdentificationRestriction) { this.GeneralOrigIdentificationRestriction = updatedService.GeneralOrigIdentificationRestriction; updated = true; }
321: if (this.MultimediaOfOrigIdRestriction != updatedService.MultimediaOfOrigIdRestriction) { this.MultimediaOfOrigIdRestriction = updatedService.MultimediaOfOrigIdRestriction; updated = true; }
322: if (this.TerminatingIdentityRestriction != updatedService.TerminatingIdentityRestriction) { this.TerminatingIdentityRestriction = updatedService.TerminatingIdentityRestriction; updated = true; }
323: if (this.DistinctiveRing != updatedService.DistinctiveRing) { this.DistinctiveRing = updatedService.DistinctiveRing; updated = true; }
324: if (this.VisitedNetworkImpu != updatedService.VisitedNetworkImpu) { this.VisitedNetworkImpu = updatedService.VisitedNetworkImpu; updated = true; }
325: if (this.SeasonalSuspend != updatedService.SeasonalSuspend) { this.SeasonalSuspend = updatedService.SeasonalSuspend; updated = true; }
326: if (this.NumberInvalidation != updatedService.NumberInvalidation) { this.NumberInvalidation = updatedService.NumberInvalidation; updated = true; }
327: if (this.IroamingServiceProvision != updatedService.IroamingServiceProvision) { this.IroamingServiceProvision = updatedService.IroamingServiceProvision; updated = true; }
328: if (this.IptvCallerId != updatedService.IptvCallerId) { this.IptvCallerId = updatedService.IptvCallerId; updated = true; }
329: if (this.IptvVideoCall != updatedService.IptvVideoCall) { this.IptvVideoCall = updatedService.IptvVideoCall; updated = true; }
330: if (this.NumberPortability != updatedService.NumberPortability) { this.NumberPortability = updatedService.NumberPortability; updated = true; }
331: if (this.SecretaryService != updatedService.SecretaryService) { this.SecretaryService = updatedService.SecretaryService; updated = true; }
332: if (this.SalesBlock != updatedService.SalesBlock) { this.SalesBlock = updatedService.SalesBlock; updated = true; }
333: if (this.FilterCriteria != updatedService.FilterCriteria) { this.FilterCriteria = updatedService.FilterCriteria; updated = true; }
334: if (this.CallerInformation != updatedService.CallerInformation) { this.CallerInformation = updatedService.CallerInformation; updated = true; }
335: if (this.PresenceStatus != updatedService.PresenceStatus) { this.PresenceStatus = updatedService.PresenceStatus; updated = true; }
336: if (this.OneNumberService != updatedService.OneNumberService) { this.OneNumberService = updatedService.OneNumberService; updated = true; }
337: if (this.AssociationList != updatedService.AssociationList) { this.AssociationList = updatedService.AssociationList; updated = true; }
338: if (this.Pin != updatedService.Pin) { this.Pin = updatedService.Pin; updated = true; }
339:
340: // I need the Port value to be maitained in updates. I will use it for migration
341: //if (this.Port != updatedService.Port) { this.Port = updatedService.Port; updated = true; }
342:
343: if (this.Access != null && updatedService.Access != null && this.Access.Id != updatedService.Access.Id) { this.Access = updatedService.Access; updated = true; }
344: else if (this.Access == null && updatedService.Access != null) { this.Access = updatedService.Access; updated = true; }
345:
346: if (this.UserId != updatedService.UserId) { this.UserId = updatedService.UserId; updated = true; }
347:
348: if (updated) this.Updated = DateTime.UtcNow.AddHours(3);
349:
350: return updated;
351: }
352:
353: ////////////////////////////////////////////////////////////////////////////
354: ////////////////////////////////////////////////////////////////////////////
355: }
356:
357: ////////////////////////////////////////////////////////////////////////////
358: ////////////////////////////////////////////////////////////////////////////
359: }