Trabaja con nosotros
Empleo en Cofares
Empleo en Cofares
COFARES, Cooperativa Farmacéutica Española y otras Empresas participadas por ella, dan empleo a mas de 1.800 personas en toda España.
Este gran equipo de trabajo está formado por hombres y mujeres de distintas profesiones y cualificaciones profesionales.
Las Áreas Profesionales de mayor ocupación son las de Técnico Farmacéutico, Comercial, y Marketing, Logística, Almacenaje y Distribución, aunque los perfiles profesionales son muy extensos: administrativos, finanzas, recursos humanos...etc.
El 16% de la plantilla son universitarios, de los cuales el 60% son Licenciados en Farmacia (10% de total plantilla).
Publicador de contenidos
Se ha producido un error al procesar la plantilla.
No error description was specified for this error; low-level message: java.lang.ClassNotFoundException: com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil cannot be found by com.liferay.portal.template.freemarker_3.0.37 ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign journalArticleLocalServiceUti... [in template "20155#20195#7924243" at line 520, column 1] ----
1<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyADxO5pq3U3jcHoM1SMQ9FFvIPlENolN5k&language=${locale.getLanguage()}®ion=${locale.getCountry()}" type="text/javascript"></script>
2
3<script type="text/javascript">
4
5
6 window.onload = function() {
7 // Se cargan las oficinas
8 initLoad();
9 loadCentros();
10
11 };
12
13 $( window ).resize(function() {
14 console.log("cambia windows");
15 initLoad();
16 });
17
18 // Variable que guarda los datos de los centros
19 var centros = [];
20
21 // Variable que guarda el html de los resultados encontrados
22 var side_bar_html = "";
23
24 // Array para guardar todos los marcadores
25 var gmarkers = [];
26 var gmarkersshow = [];
27
28 // Variables globales
29 var map;
30 var circle = null;
31 var geocoder;
32 var busquedaRealizada = false;
33 var marker_you;
34 var userMarker;
35 var directionsService;
36 var directionsDisplay;
37 var infowindow;
38 var defaultCoordinates = {lat: 40.4168508 ,lng:-3.7031067};
39
40 // Variable global para saber si se tiene o no geolocalizacion
41 var geoActive = true;
42
43 //Variable para guardar objeto scrollbar
44 var scrollbar;
45
46 //Genera arrays de centros
47 function addCentros (contador,nombre,direccion,latitud,longitud,enlace,telefono){
48 var entryLocation = [nombre,direccion,latitud,longitud,enlace,telefono];
49 centros[contador] = entryLocation;
50 }
51
52 //Funcion que muestra error por consola si no se puede utilizar la geolocalizacion del usuario
53 function showError() {
54 console.log("Location can't be found");
55 geoActive = false;
56
57 if(directionsService == null || directionsService == "undefined"){
58 directionsService = new google.maps.DirectionsService();
59 }
60 if(directionsDisplay == null || directionsDisplay == "undefined"){
61 directionsDisplay = new google.maps.DirectionsRenderer();
62 }
63 if(infowindow == null || infowindow == "undefined"){
64 infowindow = new google.maps.InfoWindow({
65 size: new google.maps.Size(150,50)
66 });
67 }
68 map = new google.maps.Map(document.getElementById("map_canvas"), {
69 zoom: 8,
70 center: {lat: 40.4169473, lng: -3.7079059}
71
72 });
73
74 // Crea evento para sacar infoWindows
75 google.maps.event.addListener(map, 'click', function() {
76 infowindow.close();
77 });
78
79 // Funcion autocompletar para el campo de texto
80 var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address'));
81 autocomplete.bindTo('bounds', map);
82
83 searchRadius(defaultCoordinates);
84
85 // Se hace focus en el campo de texto de la direccion una vez que todo este cargado
86 $(".js_input_dir").select();
87 }
88
89 // Funcion para crear marcadores
90 function createMarker(latlng, name, html_infow, html_res, indice) {
91 // Contenido del infoWindow
92 var contentString = html_infow;
93
94 // Marcador
95 var marker = new google.maps.Marker({
96 icon: '/constcaonl-public-theme/images/ovalado_rojo.png',
97 position: latlng,
98 title: name,
99 // zIndex: Math.round(latlng.lat()*-100000)<<5,
100 zIndex: Math.round(latlng.lat*-100000)<<5,
101 info: html_res,
102 ind: indice
103 });
104
105 // Evento para lanzar la infoWdindows al hacer click sobre el marcador
106 google.maps.event.addListener(marker, 'click', function() {
107 infowindow.setContent(contentString);
108 infowindow.open(map,marker);
109 });
110
111 // Guarda el marcador en el array global
112 gmarkers.push(marker);
113 }
114
115 // Funcion initLoad
116 function initLoad(){
117 console.log("Entramos en la funcion del callback");
118 // INICIALIZACION
119 geocoder = new google.maps.Geocoder();
120 if (navigator.geolocation) {
121 var options = {
122 enableHighAccuracy: true,
123 maximumAge: 0
124 }
125 navigator.geolocation.getCurrentPosition(initializeMaps, showError, options);
126 }
127 else {
128 console.log("El navegador no soporta geolocalización");
129 }
130 // FIN INICIALIZACION
131 }
132
133 // Funcion ejecutada al CARGAR LA PÁGINA
134 function initializeMaps(userPosition) {
135 // Define las opciones del mapa
136 userMarker = userPosition;
137 var myOptions = {
138 zoom: 8,
139 center: new google.maps.LatLng(userPosition.coords.latitude, userPosition.coords.longitude),
140 mapTypeControl: true,
141 mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
142 navigationControl: true,
143 mapTypeId: google.maps.MapTypeId.ROADMAP
144 };
145
146 // Define el mapa
147 map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
148
149 // Crea evento para sacar infoWindows
150 google.maps.event.addListener(map, 'click', function() {
151 infowindow.close();
152 });
153
154 if(directionsService == null || directionsService == "undefined"){
155 directionsService = new google.maps.DirectionsService();
156 }
157 if(directionsDisplay == null || directionsDisplay == "undefined"){
158 directionsDisplay = new google.maps.DirectionsRenderer();
159 }
160 if(infowindow == null || infowindow == "undefined"){
161 infowindow = new google.maps.InfoWindow({
162 size: new google.maps.Size(150,50)
163 });
164 }
165
166 // Funcion autocompletar para el campo de texto
167 var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address'));
168 autocomplete.bindTo('bounds', map);
169
170 //se crea el marcador de posición del usuario
171 //marcador = new google.maps.Marker({
172 // position: new google.maps.LatLng(userPosition.coords.latitude, userPosition.coords.longitude),
173 // icon: 'http://opendatacon.org/wp-content/uploads/2016/05/Farm-Fresh_star.png',
174 // title: "Usted está aquí",
175 // map: map
176 //});
177
178 searchRadius();
179
180 // Se hace focus en el campo de texto de la direccion una vez que todo este cargado
181 $(".js_input_dir").select();
182 }
183
184 function searchRadius(coordinates){
185 //se saca la dirección del usuario según sus coordenadas (si no se encuentra se fija la puerta de sol como punto de partida)
186 var userPosic = 'Plaza Puerta del Sol, 28013 Madrid';
187 var latlng;
188
189 if(coordinates != null){
190 latlng = coordinates;
191 }else{
192 var input = (userMarker.coords.latitude+","+userMarker.coords.longitude);
193 var latlngStr = input.split(',', 2);
194 latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
195 }
196
197 geocoder.geocode({'location': latlng}, function(results, status) {
198 if (status === google.maps.GeocoderStatus.OK) {
199 console.log(results[0].formatted_address);
200 if (results[0]) {
201 userPosic = results[0].formatted_address;
202 } else {
203 window.alert('No results found');
204 }
205 } else {
206 window.alert('Geocoder failed due to: ' + status);
207 }
208
209 //se buscan los centros que estén a menos de 6km del usuario
210 var searchAddress = userPosic;
211 var radVal = 6;
212 var radius = 600000;
213 $(".rad_err_msg").hide();
214 if(searchAddress != null && searchAddress != ""){
215 // Ejecutamos con timeOut de 200ms para evitar el queryLimit de google
216 setTimeout(function(){
217 $(".div_lista").fadeIn();
218 exe_code_address(searchAddress, radius);
219 }, 200);
220 }
221 });
222
223 }
224
225
226 // Funcion para procesar los centros
227 function loadCentros(){
228 // Para cada centro se genera un marcador y una infoWindow
229 for(var i = 0; i < centros.length; i++){
230 var centroName = centros[i][0];
231 var centroAddress = centros[i][1];
232 var centroLatitud = centros[i][2];
233 var centroLongitud = centros[i][3];
234 var enlaceAWeb = centros[i][4];
235 var centroTlf = centros[i][5];
236
237 var latlng = {lat: parseFloat(centroLatitud), lng: parseFloat(centroLongitud)};
238
239 var urlCentro = "";
240 if("" != enlaceAWeb && null != enlaceAWeb){
241 urlCentro = '<div class="center_url">'+
242 '<a class="btn btn-primary" href="'+ enlaceAWeb +'" target="_blank"> Sitio web </a>'+
243 '</div>';
244 }
245
246 var html_inf =
247 '<div id="content_gmap">'+
248 '<div class="center_data_wrapper" onclick="javascript:myclick({index})">'+
249 '<div class="evo-form__text-info office_data">'+
250 '<p class="center_title">'+centroName+'</p>'+
251 '<p class="center_address">'+centroAddress+'</p>'+
252 '<p class="center_tlf">'+centroTlf+'</p>'+
253 '</div>'+
254 '</div>'+
255 '<div class="howToGo">'+
256 '<a class="btn btn-primary" href="javascript:void(0);" onclick="arriveTo(\'' + centroAddress + '\');"> ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.como.llegar")} </a>'+
257 '</div>'+
258 urlCentro +
259 '</div>';
260
261 var html_res =
262 '<div id="content_gmap">'+
263 '<div class="center_data_wrapper" onclick="javascript:myclick({index})">'+
264 '<div class="center_data">'+
265 '<p class="center_title">'+centroName+'</p>'+
266 '<p class="center_address">'+centroAddress+'</p>'+
267 '<p class="center_tlf">'+centroTlf+'</p>'+
268 '</div>'+
269 '</div>'+
270 '<div class="howToGo">'+
271 '<a class="btn btn-primary" href="javascript:void(0);" onclick="arriveTo(\'' + centroAddress + '\');"> ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.como.llegar")} </a>'+
272 '</div>'+
273 urlCentro +
274 '</div>';
275 //Se crea el marcador en las coordenadas de los centros
276 var marker = createMarker(latlng, centroName, html_inf, html_res, i);
277 }
278 }
279
280
281 var marcador;
282 // Funcion para atender la direccion introducida en el formulario
283 function codeAddress() {
284 //se crea el marcador de posición del usuario con datos por defecto
285 var latitude = defaultCoordinates.lat;
286 var longitude = defaultCoordinates.lng;
287
288 if(userMarker != undefined){
289 latitude = userMarker.coords.latitude;
290 longitude = userMarker.coords.longitude;
291 }
292
293 marcador = new google.maps.Marker({
294 position: new google.maps.LatLng(latitude, longitude),
295 icon: "/tCuida-theme/images/content/pin-position.png",
296 title: "Usted está aquí",
297 map: map
298 });
299
300 //Se resetea el "como llegar",las indicaciones y se cierran la infowindow que hubiese abierta
301 if(directionsDisplay != null){
302 directionsDisplay.setMap(null);
303 }
304 $("#map_indications").html("");
305
306 if(infowindow)infowindow.close();
307 var searchAddress = $("#address").val();
308 var radVal = $("#radius").val();
309 var radius = parseInt($("#radius").val(), 10)*1000;
310
311 if(radVal > 0 && radVal <= 500){
312 $(".rad_err_msg").hide();
313 if(searchAddress != null && searchAddress != ""){
314 // Ejecutamos con timeOut de 200ms para evitar el queryLimit de google
315 setTimeout(function(){
316 $(".div_lista").fadeIn();
317 exe_code_address(searchAddress, radius);
318 }, 200);
319 }
320 }else{
321 $(".rad_err_msg").show();
322 }
323 }
324
325 function exe_code_address(searchAddress, radius){
326 // Flag de busqueda realizada para evento del input de radio
327 busquedaRealizada = true;
328
329 // El marcador de la posicion buscada se reinicia en cada busqueda
330 if(marker_you != null){
331 marker_you.setMap(null);
332 }
333
334 // Se situa un marcador en el mapa con los datos recogidos
335 geocoder.geocode({ 'address': searchAddress}, function(results, status) {
336 if (status == google.maps.GeocoderStatus.OK) {
337 map.setCenter(results[0].geometry.location);
338 map.setZoom(8);
339 var searchCenter = results[0].geometry.location;
340 /*
341 var searchAddressComponents = results[0].address_components;
342 var searchPostalCode = "";
343 var searchCity = "";
344
345 $.each(searchAddressComponents, function(){
346 if(this.types[0]=="postal_code"){
347 searchPostalCode=this.short_name;
348 } else if (this.types[0]=="locality"){
349 searchCity = this.short_name;
350 }
351 });
352
353 // Codigo para enviar a analytics . si hay psotal code se enva CP, si no city
354 var titleBusqueda=searchPostalCode;
355 if (titleBusqueda == ""){
356 titleBusqueda=searchCity;
357 }
358 ga('send', 'event', 'tCuida', 'busqueda_farmacias', titleBusqueda,{ 'dimension1': 'tCuida' });
359 */
360 //......
361
362 marker_you = new google.maps.Marker({
363 map: map,
364 position: results[0].geometry.location,
365 icon: "/tCuida-theme/images/content/pin-position.png",
366 });
367
368 // Se crea un circulo con el radio provisto en el formulario
369 if (circle) circle.setMap(null);
370 circle = new google.maps.Circle({
371 center:searchCenter,
372 radius: radius,
373 fillColor: "#999",
374 strokeWeight: 1,
375 fillOpacity: 0.2,
376 map: map
377 });
378
379 // Se reinicia la lista de resultados
380 side_bar_html = "";
381 gmarkersshow = [];
382
383 var bounds = new google.maps.LatLngBounds();
384 var foundMarkers = 0;
385
386 //Añadimos el marker del sitio buscado al bounds
387 bounds.extend(marker_you.getPosition());
388
389 // Se pintan en la lista todos los resultados
390 for(var i = 0; i < gmarkers.length; i++){
391 if (google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),searchCenter) < radius) {
392 bounds.extend(gmarkers[i].getPosition()); //Se anade la posicion de todos los markers para expandir la vista y que salgan todos en el mapa
393 gmarkers[i].setMap(map);
394 var distanceToCenter = google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),searchCenter);
395 gmarkersshow.push({marker: gmarkers[i], dist: distanceToCenter});
396 foundMarkers++;
397 }else{
398 gmarkers[i].setMap(null);
399 }
400 }
401
402 // Se ordena el array de maracadores visibles por distancia
403 gmarkersshow = gmarkersshow.sort(function(a,b){return a.dist - b.dist;});
404
405 // Se pintan en la lista todos los resultados ordenados por distancia
406 var distance;
407 side_bar_html +='<div class="info_container">';
408 for(var i = 0; i < gmarkersshow.length; i++){
409 distance = round((gmarkersshow[i].dist / 1000), 2);
410 side_bar_html += '<div class="info_fcia_side_bar div_side_bar_' + i + '">';
411 side_bar_html += '<div class="info_fcia_distance"><span class="text-base">' + distance + ' km.</span></div>';
412 side_bar_html += (gmarkersshow[i].marker.info).replace("{index}", i);
413 side_bar_html += '</div>';
414 }
415 side_bar_html +='</div>';
416 // Si hay resultados que cumplan el criterio del radio, se anaden a la lista
417 if(foundMarkers > 0){
418 if(foundMarkers == 1){
419 side_bar_html = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + foundMarkers + '</strong> ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.resultado")} ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.encontrado")}:</p></div>' + side_bar_html;
420 }else{
421 side_bar_html = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + foundMarkers + '</strong> ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.resultado")}s ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.encontrado")}s:</p></div>' + side_bar_html;
422 }
423 }else{
424 side_bar_html = "<div class=\"p_aviso_side_bar\"><p class=\"evo-form__text-info js_result_no_found\">No se han encontrado resultados. Por favor, busca en otro lugar o amplía el radio de búsqueda.</p></div>";
425 }
426
427 // Coloca la lista en el sitio que le corresponde
428 document.getElementById("side_bar").innerHTML = side_bar_html;
429 if (foundMarkers > 0) {
430 map.fitBounds(bounds);
431 } else{
432 map.fitBounds(circle.getBounds());
433 }
434 }
435 $(".info_container").mCustomScrollbar({
436 axis:"y"
437 });
438 });
439 }
440
441 // Metodo para redondear a los decimales
442 function round(value, decimals) {
443 return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
444 }
445
446 // Evento para lanzar la infoWindow al clickar sobre el marcador
447 function myclick(i) {
448 google.maps.event.trigger(gmarkersshow[i].marker, "click");
449 }
450
451 //Funcion para utilizar la api de google maps de "cómo llegar"
452 function arriveTo(address) {
453 var request;
454
455 //eliminamos el marcador de la posición del usuario si se muestra
456 if (marcador != null && marcador!=""){
457 marcador.setMap(null);
458 }
459
460 //se saca la dirección del usuario según sus coordenadas (si no se encuentra se fija la puerta de sol como punto de partida)
461 var userPosic = 'Plaza Puerta del Sol, 28013 Madrid';
462 var latlng;
463
464 if(userMarker == null){
465 latlng = defaultCoordinates;
466 }else{
467 var input = (userMarker.coords.latitude+","+userMarker.coords.longitude);
468 var latlngStr = input.split(',', 2);
469 latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])};
470 }
471
472 geocoder.geocode({'location': latlng}, function(results, status) {
473 if (status === google.maps.GeocoderStatus.OK) {
474 if (results[0]) {
475 userPosic = results[0].formatted_address;
476 } else {
477 window.alert('No results found');
478 }
479 } else {
480 window.alert('Geocoder failed due to: ' + status);
481 }
482
483 if(geoActive){
484 request = {
485 //origin: new google.maps.LatLng(userMarker.coords.latitude, userMarker.coords.longitude),
486 origin: userPosic,
487 destination: address,
488 travelMode: google.maps.TravelMode.DRIVING,
489 unitSystem: google.maps.UnitSystem.METRIC,
490 provideRouteAlternatives: true
491 };
492 }else{
493 request = {
494 origin: userPosic,
495 destination: address,
496 travelMode: google.maps.TravelMode.DRIVING,
497 unitSystem: google.maps.UnitSystem.METRIC,
498 provideRouteAlternatives: true
499 };
500 }
501
502 directionsService.route(request, function(results, status) {
503 if (status == google.maps.DirectionsStatus.OK) {
504 if (circle) circle.setMap(null);
505 if(infowindow)infowindow.close();
506 directionsDisplay.setMap(map);
507 directionsDisplay.setPanel($("#map_indications").get(0));
508 directionsDisplay.setDirections(results);
509 } else {
510 console.log("No existen rutas entre ambos puntos");
511 }
512 });
513 });
514 }
515</script>
516
517
518<#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"]/>
519<#assign groupId = themeDisplay.getScopeGroupId()/>
520<#assign journalArticleLocalServiceUtil = staticUtil["com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil"]/>
521<#assign structureID = 1907194/>
522<#assign dDMStructureLocalServiceUtil = staticUtil["com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil"]/>
523<#assign s = dDMStructureLocalServiceUtil.getDDMStructure(structureID)/>
524<#assign articulos = journalArticleLocalServiceUtil.getStructureArticles(groupId, s.getStructureKey())/>
525
526<#if articulos?has_content>
527 <#assign contador = 0 />
528 <#list articulos as entry>
529 <#assign latestVersion = journalArticleLocalServiceUtil.getLatestVersion(groupId, entry.getArticleId())/>
530
531 <#if latestVersion==entry.getVersion()>
532 <#assign docXml = saxReaderUtil.read(entry.getContent()) />
533 <#assign nombre = entry.getTitle(locale) />
534 <#assign direccion = docXml.valueOf("//dynamic-element[@name='Direccion']/dynamic-content/text()") />
535 <#assign latitud = docXml.valueOf("//dynamic-element[@name='Latitud']/dynamic-content/text()") />
536 <#assign longitud = docXml.valueOf("//dynamic-element[@name='Longitud']/dynamic-content/text()") />
537 <#assign enlace = docXml.valueOf("//dynamic-element[@name='Web']/dynamic-content/text()") />
538 <#assign telefono = docXml.valueOf("//dynamic-element[@name='Telefono']/dynamic-content/text()") />
539
540 <script>
541 addCentros('${contador}','${nombre}','${direccion}','${latitud}','${longitud}','${enlace}','${telefono}');
542 </script>
543 <#assign contador = contador + 1 />
544 </#if>
545 </#list>
546</#if>
547
548<div class="tc-map">
549 <div class="tc-map-search-ctn">
550 <div class="wrapper-ajust">
551 <form class="form-inline form-map">
552 <div class="tc-form-control">
553 <label class="tc-map-label" for="address"><span class="text-base">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.direccion")}, CP o ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.provincia")}:</span></label>
554 <input class="field form-control error-field" name="address" id="address" type="textbox" placeholder='${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.direccion")}, ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.codigo.postal")} o ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.provincia")}'></input>
555 </div>
556 <div class="tc-form-control">
557 <label class="tc-map-label" for="radius"><span class="text-base">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda")}:</span></label>
558 <input class="field form-control error-field field-small" name="radius" id="radius" type="number" min="1" step="1" value="2" placeholder='${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda")}'></input>
559 <span class="tc-map-text-desc">Km.</span>
560 <button type="button" class="btn btn-ico btn-primary" onclick="codeAddress();"><i class="icon-search"></i></button>
561 </div>
562 <span class="rad_err_msg">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda.error")}</span>
563 </form>
564 </div>
565 </div>
566 <div class="wrapper-ajust">
567 <div class="tc-map-container">
568 <div id="map_canvas" class="tc-map-show"></div>
569 <div class="div_lista">
570 <div id="side_bar" class="side_bar">
571 <div class="p_aviso_side_bar">
572 <p class="evo-form__text-info">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.realice.una.busqueda")}</p>
573 </div>
574 </div>
575 </div>
576 </div>
577 <div id="map_indications" class="tc-map-indications"></div>
578 </div>
579</div>