src/Services/CallApiServices.php line 674

Open in your IDE?
  1. <?php
  2. namespace App\Services;
  3. use Symfony\Component\HttpFoundation\Response;
  4. use Symfony\Component\Routing\RouterInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. class CallApiServices
  8. {
  9.     private $apiKey;
  10.     private $apiToken;
  11.     private $accountId;
  12.     private $serviceId;
  13.     private $apiURL;
  14.     private $baseURL;
  15.     private $session;
  16.     /* @var $router RouterInterface */
  17.     private $router;
  18.     public function __construct(SessionInterface $session$apiKey$accountId$baseURL$serviceId$apiURLRouterInterface $router)
  19.     {
  20.         $this->apiKey $apiKey;
  21.         $this->apiToken "";
  22.         $this->accountId $accountId;
  23.         $this->serviceId $serviceId;
  24.         $this->apiURL $apiURL;
  25.         $this->baseURL $baseURL;
  26.         $this->session $session;
  27.         $this->router $router;
  28.     }
  29.     public function postApi($endpoint, array $data): array
  30.     {
  31.         $url "https://api-rest.media-technologies.fr/" "$endpoint";
  32.         $httpHost "https://demo.media-technologies.fr";
  33.         $dataEncoded json_encode($data);
  34.         $headers = array(
  35.             "Accept: application/json",
  36.             "Content-Type: application/json",
  37.         );
  38.         $curl curl_init($url);
  39.         curl_setopt($curlCURLOPT_REFERER$httpHost);
  40.         curl_setopt($curlCURLOPT_POSTtrue);
  41.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  42.         curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
  43.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  44.         curl_setopt($curlCURLOPT_POSTFIELDS$dataEncoded);
  45.         $response curl_exec($curl);
  46.         $curl_http_code curl_getinfo($curlCURLINFO_HTTP_CODE);
  47.         $curl_error curl_error($curl);
  48.         $curl_errno curl_errno($curl);
  49.         curl_close($curl);
  50.         if ($response === false) {
  51.             throw new \Exception($curl_error$curl_errno);
  52.             return ["null" => null];
  53.         } else {
  54.             $results = [];
  55.             // if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 200) {
  56.             //   $results = json_decode($response, true);
  57.             // } else if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 401) {
  58.             //   throw $results =  new \Exception('identifiant incorecte');
  59.             // } else if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 404) {
  60.             //   $response = json_decode($response, true);
  61.             //   $results =  $response;
  62.             // } else if (curl_getinfo($curl, CURLINFO_HTTP_CODE) === 403) {
  63.             //   $response = json_decode($response, true);
  64.             //   $results = $response;
  65.             // }
  66.             switch ($curl_http_code) {
  67.                 case 200:
  68.                     $results json_decode($responsetrue);
  69.                     break;
  70.                 case 401// Accès non autorisé, l'apiKey n'existe pas
  71.                     // a rediriger vers un page d'erreur qui dirait joindre le support, car c'est une erreur qui ne devrait jamais arrivée
  72.                     die(new RedirectResponse($this->router->generate('app_login')));
  73.                     //throw $results =  new \Exception('identifiant incorrecte');
  74.                     break;
  75.                 case 403:
  76.                 case 404:
  77.                     $response json_decode($responsetrue);
  78.                     $results =  $response;
  79.                     break;
  80.                 case 409// Conflit avec le compte ID ou service ID, l'apiKey existe, mais un conflit avec les valeurs configurées
  81.                     // a rediriger vers un page d'erreur qui dirait joindre le support, car c'est une erreur qui ne devrait jamais arrivée
  82.                     die(new RedirectResponse($this->router->generate('app_login')));
  83.                     break;
  84.                 case 410// apiToken n'exite pas ou la date est dépassée, vous devez démarrer une nouvelle session
  85.                     die(new RedirectResponse($this->router->generate('app_login')));
  86.                     break;
  87.                 default:
  88.                     $response json_decode($responsetrue);
  89.                     $results =  $response;
  90.                     break;
  91.             }
  92.         }
  93.         // $data = [ 'message' => "Accès non autorisé", 'responseCode' => "401" ];  l'apiKey n'existe pas
  94.         // $data = [ 'message' => "Conflit avec le référent HTTP", 'responseCode' => "409" ]; l'apiKey existe, mais un conflit avec les valeurs configurées
  95.         // $data = [ 'message' => "Conflit avec le compte ID", 'responseCode' => "409" ];
  96.         // $data = [ 'message' => "Conflit avec le service ID", 'responseCode' => "409" ];
  97.         // $data = [ 'message' => "token n’est plus disponible, vous devez démarrer une nouvelle session", "responseCode" => "410"}]
  98.         return $results;
  99.     }
  100.     public function getData(string $colletionName): array
  101.     {
  102.         $url 'http://localhost:8080/api';
  103.         $request_url $url '/' $colletionName;
  104.         $curl curl_init($request_url);
  105.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  106.         $response curl_exec($curl);
  107.         if ($response === false) {
  108.             return null;
  109.         } else {
  110.             $results = [];
  111.             if (curl_getinfo($curlCURLINFO_HTTP_CODE) === 200) {
  112.                 $response json_decode($responsetrue);
  113.             }
  114.         }
  115.         curl_close($curl);
  116.         return $response;
  117.     }
  118.     public function getDataById(string $colletionNamestring $id): array
  119.     {
  120.         $url 'http://localhost:8080/api';
  121.         $request_url $url '/' $colletionName '/' $id;
  122.         $curl curl_init($request_url);
  123.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  124.         $response curl_exec($curl);
  125.         if ($response === false) {
  126.             return null;
  127.         } else {
  128.             $results = [];
  129.             if (curl_getinfo($curlCURLINFO_HTTP_CODE) === 200) {
  130.                 $response json_decode($responsetrue);
  131.             }
  132.         }
  133.         curl_close($curl);
  134.         return $response;
  135.     }
  136.     public function authApi(string $loginstring $password): array
  137.     {
  138.         $url 'http://localhost:8080/api/login';
  139.         $curl curl_init($url);
  140.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  141.         $headers = array(
  142.             "Accept: application/json",
  143.             "Content-Type: application/json",
  144.         );
  145.         $data = [
  146.             "username" => $login,
  147.             "password" => $password
  148.         ];
  149.         $dataEncoded json_encode($data);
  150.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  151.         curl_setopt($curlCURLOPT_POSTFIELDS$dataEncoded);
  152.         $response curl_exec($curl);
  153.         if ($response === false) {
  154.             return ["null" => null];
  155.         } else {
  156.             $results = [];
  157.             if (curl_getinfo($curlCURLINFO_HTTP_CODE) === 200) {
  158.                 $response json_decode($responsetrue);
  159.             } else if (curl_getinfo($curlCURLINFO_HTTP_CODE) === 401) {
  160.                 throw new \Exception('identifiant incorecte');
  161.             }
  162.         }
  163.         curl_close($curl);
  164.         return $response;
  165.     }
  166.     public function getUserDetails(string $token): array
  167.     {
  168.         $url 'http://localhost:8080/api/me';
  169.         $curl curl_init($url);
  170.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  171.         $headers = array(
  172.             "Accept: application/json",
  173.             "Content-Type: application/json",
  174.             "Authorization: Bearer " $token ""
  175.         );
  176.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  177.         $response curl_exec($curl);
  178.         if ($response === false) {
  179.             return ["null" => null];
  180.         } else {
  181.             $results = [];
  182.             if (curl_getinfo($curlCURLINFO_HTTP_CODE) === 200) {
  183.                 $response json_decode($responsetrue);
  184.             }
  185.         }
  186.         curl_close($curl);
  187.         return $response;
  188.     }
  189.     // ** +++++++++++++++++ ------------        --------- +++++++++++++++++ **
  190.     // ** +++++++++++++++++ ------------        --------- +++++++++++++++++ **
  191.     public function getListConseillers($accountId$serviceId): array
  192.     {
  193.         $data = [
  194.             "accountId" => $accountId,
  195.             "serviceId" => $serviceId
  196.         ];
  197.         $results $this->restApiPOSTcURL('/plateforme/listeConseillersEtPresence'$data);
  198.         return $results;
  199.     }
  200.     public function configuratationPlateforme($accountId$serviceId): array
  201.     {
  202.         $data = [
  203.             "accountId" => $accountId,
  204.             "serviceId" => $serviceId
  205.         ];
  206.         $results $this->restApiPOSTcURL('/plateforme/configuratationPlateforme'$data);
  207.         return $results;
  208.     }
  209.     public function conseillerEtPlanning($pseudoId$serviceId): array
  210.     {
  211.         $data = [
  212.             "complementId" => $pseudoId,
  213.             "serviceId" => $serviceId
  214.         ];
  215.         $results $this->restApiPOSTcURL('/plateforme/conseillerEtPlanning'$data);
  216.         return $results;
  217.     }
  218.     public function prestationEcriteMails($accountId$serviceId): array
  219.     {
  220.         $data = [
  221.             "accountId" => $accountId,
  222.             "serviceId" => $serviceId
  223.         ];
  224.         $results $this->restApiPOSTcURL('/paramaters/PrestationEcriteMails'$data);
  225.         return $results;
  226.     }
  227.     public function clientAuthentification(string $loginstring $password$serviceId): array
  228.     {
  229.         $data = [
  230.             "serviceId" => $serviceId,
  231.             "login" => $login,
  232.             "password" => $password
  233.         ];
  234.         $results $this->restApiPOSTcURL('/plateforme/clientAuthentification'$data);
  235.         if (isset($results['responseCode']) && ($results['responseCode'] != 200)) {
  236.             return $results;
  237.         }
  238.         $this->session->set('apiToken'$results["apiToken"]);
  239.         return $results;
  240.     }
  241.     //Avis
  242.     public function conseillerAvis($serviceId$complementId): array
  243.     {
  244.         $data = [
  245.             "serviceId" => $serviceId,
  246.             "complementId" => $complementId
  247.         ];
  248.         $results $this->restApiPOSTcURL('/plateforme/conseillerAvis'$data);
  249.         return $results;
  250.     }
  251.     public function clientAvis($serviceId$clientId): array
  252.     {
  253.         $data = [
  254.             "serviceId" => $serviceId,
  255.             "clientId" => $clientId
  256.         ];
  257.         $results $this->restApiPOSTcURL('/plateforme/clientAvis'$data);
  258.         return $results;
  259.     }
  260.     public function listePlateformeAvis($serviceId): array
  261.     {
  262.         $data = [
  263.             "serviceId" => $serviceId,
  264.         ];
  265.         $results $this->restApiPOSTcURL('/plateforme/listePlateformeAvis'$data);
  266.         return $results;
  267.     }
  268.     public function clientOperations($serviceId$clientId): array
  269.     {
  270.         $data = [
  271.             "serviceId" => $serviceId,
  272.             "clientId" => $clientId
  273.         ];
  274.         $results $this->restApiPOSTcURL('/plateforme/clientOperations'$data);
  275.         return $results;
  276.     }
  277.     public function clientProfile($serviceId$clientId$reqToken): array
  278.     {
  279.         $data = [
  280.             "apiToken" => $reqToken,
  281.             "serviceId" => $serviceId,
  282.             "clientId" => $clientId
  283.         ];
  284.         $results $this->restApiPOSTcURLWithOUtToken('/plateforme/clientProfile'$data);
  285.         return $results;
  286.     }
  287.     public function clientProfileCheck($serviceId$clientId): array
  288.     {
  289.         $data = [
  290.             "serviceId" => $serviceId,
  291.             "clientId" => $clientId
  292.         ];
  293.         $results $this->restApiPOSTcURL('/plateforme/clientProfile'$data);
  294.         return $results;
  295.     }
  296.     public function clientTransactions($serviceId$clientId): array
  297.     {
  298.         $data = [
  299.             "serviceId" => $serviceId,
  300.             "clientId" => $clientId
  301.         ];
  302.         $results $this->restApiPOSTcURL('/plateforme/clientTransactions'$data);
  303.         return $results;
  304.     }
  305.     public function clientConsultations($serviceId$clientId): array
  306.     {
  307.         $data = [
  308.             "serviceId" => $serviceId,
  309.             "clientId" => $clientId
  310.         ];
  311.         $results $this->restApiPOSTcURL('/plateforme/clientConsultations'$data);
  312.         return $results;
  313.     }
  314.     public function clientInscription($serviceId$parrainID$genre$email$password$firtsname$lastname$phoneNumber): ?array
  315.     {
  316.         $data = [
  317.             "serviceId" => $serviceId,
  318.             "parrainId" => $parrainID,
  319.             "genre" => $genre,
  320.             "username" => $email,
  321.             "password" => $password,
  322.             "nom" => $firtsname,
  323.             "prenom" => $lastname,
  324.             "pays" => "FRANCE",
  325.             "telephone" => $phoneNumber
  326.         ];
  327.         $results $this->restApiPOSTcURL('/plateforme/clientInscription'$data);
  328.         return $results;
  329.     }
  330.     public function socialInscription($serviceId$genre$email$password$firtsname$lastname$country$phoneNumber$social$socialUid): ?array
  331.     {
  332.         $data = [
  333.             "apiKey" =>  $this->apiKey,
  334.             "serviceId" => $serviceId,
  335.             "parrainId" => "0",
  336.             "genre" => $genre,
  337.             "username" => $email,
  338.             "password" => $password,
  339.             "nom" => $firtsname,
  340.             "prenom" => $lastname,
  341.             "pays" => $country,
  342.             "telephone" => $phoneNumber,
  343.             "social" => $social,
  344.             "socialUid" => $socialUid
  345.         ];
  346.         $results $this->restApiPOSTcURL('/plateforme/clientInscription'$data);
  347.         return $results;
  348.     }
  349.     public function clientForgotPassword($serviceId$username): ?array
  350.     {
  351.         $data = [
  352.             "serviceId" => $serviceId,
  353.             "username" => $username
  354.         ];
  355.         $results $this->restApiPOSTcURL('/plateforme/clientForgotPassword'$data);
  356.         return $results;
  357.     }
  358.     public function clientResetPassword($serviceId$username$oldPassword$newPassword$reqToken$limitToken): ?array
  359.     {
  360.         $data = [
  361.             "serviceId" => $serviceId,
  362.             "username" => $username,
  363.             "oldPassword" => $oldPassword,
  364.             "newPassword" => $newPassword
  365.         ];
  366.         $results $this->restApiPOSTcURL('/plateforme/clientResetPassword'$data);
  367.         return $results;
  368.     }
  369.     public function clientInscriptionValidation($serviceId$email$password$code$actif): ?array
  370.     {
  371.         $data = [
  372.             "serviceId" => $serviceId,
  373.             "username" => $email,
  374.             "password" => $password,
  375.             "code" => $code,
  376.             "actif" => $actif
  377.         ];
  378.         $results $this->restApiPOSTcURL('/plateforme/clientInscriptionValidation'$data);
  379.         return $results;
  380.     }
  381.     //Tarifs
  382.     //Tous les tarifs
  383.     public function tarifsPlateforme($serviceId): ?array
  384.     {
  385.         $data = [
  386.             "serviceId" => $serviceId,
  387.         ];
  388.         $results $this->restApiPOSTcURL('/plateforme/tarifsPlateforme'$data);
  389.         return $results;
  390.     }
  391.     public function cbTransaction($data): ?array
  392.     {
  393.         $results $this->restApiPOSTcURL('/plateforme/cbTransaction'$data);
  394.         return $results;
  395.     }
  396.     //Question Mail
  397.     //Test mise a jour lu et repondu
  398.     public function questionsMailMajMessage($serviceId$clientId$complementId$emailId$answered$isRead): ?array
  399.     {
  400.         $data = [
  401.             "serviceId" => $serviceId,
  402.             "clientId" => $clientId,
  403.             "complementId" => $complementId,
  404.             "emailsId" => $emailId,
  405.             "answered" => $answered,
  406.             "isRead" => $isRead
  407.         ];
  408.         $results $this->restApiPOSTcURL('/plateforme/questionsMailMajMessage'$data);
  409.         return $results;
  410.     }
  411.     //Info Mail
  412.     public function questionsMailConseillersListe($serviceId$clientId): ?array
  413.     {
  414.         $data = [
  415.             "serviceId" => $serviceId,
  416.             "clientId" => $clientId
  417.         ];
  418.         $results $this->restApiPOSTcURL('/plateforme/questionsMailConseillersListe'$data);
  419.         return $results;
  420.     }
  421.     //no route found for POST and GET
  422.     public function questionsMailConseiller($serviceId$clientid$complementId): ?array
  423.     {
  424.         $data = [
  425.             "serviceId" => $serviceId,
  426.             "clientId" => $clientid,
  427.             "complementId" => $complementId,
  428.         ];
  429.         $results $this->restApiPOSTcURL('/plateforme/questionsMailConseiller'$data);
  430.         return $results;
  431.     }
  432.     //Envoi de Mail
  433.     public function questionsMailEnvoiMessage($serviceId$clientId$complementId$titre$content$date$cost): ?array
  434.     {
  435.         $data = [
  436.             "serviceId" => $serviceId,
  437.             "clientId" => $clientId,
  438.             "complementId" => $complementId,
  439.             "title" => $titre,
  440.             "content" => $content,
  441.             "date" => $date->format('Y-m-d H:i:s'),
  442.             "client" => "1",
  443.             "answered" => "0",
  444.             "isRead" => "0",
  445.             "messageCost" => $cost
  446.         ];
  447.         $results $this->restApiPOSTcURL('/plateforme/questionsMailEnvoiMessage'$data);
  448.         return $results;
  449.     }
  450.     //Reponse Mail
  451.     public function questionsMailConseillerReponse(): ?array
  452.     {
  453.         $data = [
  454.             "serviceId" => "1010",
  455.             "clientId" => "1006",
  456.             "complementId" => "45",
  457.             "title" => " réponse de test titre",
  458.             "content" => "il va faire beau",
  459.             "date" => "2022-02-22 02:22:22",
  460.             "client" => "0",
  461.             "answered" => "0",
  462.             "isRead" => "0"
  463.         ];
  464.         $results $this->restApiPOSTcURL('/plateforme/questionsMailConseillerReponse'$data);
  465.         return $results;
  466.     }
  467.     //Horoscope
  468.     public function horoscopeJour(): ?array
  469.     {
  470.         $data = [
  471.             "accountId" => $this->accountId
  472.         ];
  473.         $results $this->restApiPOSTcURL('/horoscope/horoscopeJour'$data);
  474.         return $results;
  475.     }
  476.     public function horoscopeHebdomadaire(): ?array
  477.     {
  478.         $data = [
  479.             "accountId" => $this->accountId
  480.         ];
  481.         $results $this->restApiPOSTcURL('/horoscope/horoscopeHebdomadaire'$data);
  482.         return $results;
  483.     }
  484.     public function horoscopeMensuel(): ?array
  485.     {
  486.         $data = [
  487.             "accountId" => $this->accountId
  488.         ];
  489.         $results $this->restApiPOSTcURL('/horoscope/horoscopeMensuel'$data);
  490.         return $results;
  491.     }
  492.     public function request($data$endpoint): ?array
  493.     {
  494.         $results $this->restApiPOSTcURL($endpoint$data);
  495.         return $results;
  496.     }
  497.     public function restApiPOSTcURL($endpoint$data)
  498.     {
  499.         $results = [];
  500.         $this->apiToken $this->session->get('apiToken');
  501.         // ajouter les clés
  502.         $data['apiKey'] =  $this->apiKey;
  503.         $data['apiToken'] =  $this->apiToken;
  504.         $url $this->apiURL $endpoint;
  505.         $dataEncoded json_encode($data);
  506.         $headers = array(
  507.             "Accept: application/json",
  508.             "Content-Type: application/json",
  509.         );
  510.         $curl curl_init($url);
  511.         curl_setopt($curlCURLOPT_POSTtrue);
  512.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  513.         curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
  514.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  515.         curl_setopt($curlCURLOPT_POSTFIELDS$dataEncoded);
  516.         curl_setopt($curlCURLOPT_REFERER$this->baseURL);
  517.         $response curl_exec($curl);
  518.         $curl_error curl_error($curl);
  519.         $curl_errno curl_errno($curl);
  520.         $http_code curl_getinfo($curlCURLINFO_HTTP_CODE);
  521.         curl_close($curl);
  522.         //echo "<br> url:". print_r($url, 1)."<br>";
  523.         if ($response === false) {
  524.             $res =  ['responseCode' => $curl_error'message' => $curl_errno];
  525.             $results[throw new \Exception($res['message'])];
  526.         } else {
  527.             if ($http_code === 200) {
  528.                 $results json_decode($responsetrue);
  529.             } else {
  530.                 $results json_decode($responsetrue);
  531.                 if (!is_array($results)) {
  532.                     $results =  ['responseCode' => $http_code'message' => $results];
  533.                 }
  534.                 if ($http_code === 401) {
  535.                     // Accès non autorisé
  536.                 } else if ($http_code === 403) {
  537.                     // Aucun enregistrement correspondant
  538.                 } else if ($http_code === 404) {
  539.                     // Erreur sauvegarde
  540.                 } else if ($http_code === 409) {
  541.                     // Conflit 
  542.                 } else if ($http_code === 410) {
  543.                     // token n’est plus disponible
  544.                 }
  545.                 //$results [throw new \Exception( $res['message'] )];
  546.             }
  547.         }
  548.         return $results;
  549.     }
  550.     public function restApiPOSTcURLWithOUtToken($endpoint$data)
  551.     {
  552.         $results = [];
  553.         $this->apiToken $this->session->get('apiToken');
  554.         // ajouter les clés
  555.         $data['apiKey'] =  $this->apiKey;
  556.         $url $this->apiURL $endpoint;
  557.         $dataEncoded json_encode($data);
  558.         $headers = array(
  559.             "Accept: application/json",
  560.             "Content-Type: application/json",
  561.         );
  562.         $curl curl_init($url);
  563.         curl_setopt($curlCURLOPT_POSTtrue);
  564.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  565.         curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
  566.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  567.         curl_setopt($curlCURLOPT_POSTFIELDS$dataEncoded);
  568.         curl_setopt($curlCURLOPT_REFERER$this->baseURL);
  569.         $response curl_exec($curl);
  570.         $curl_error curl_error($curl);
  571.         $curl_errno curl_errno($curl);
  572.         $http_code curl_getinfo($curlCURLINFO_HTTP_CODE);
  573.         curl_close($curl);
  574.         //echo "<br> url:". print_r($url, 1)."<br>";
  575.         if ($response === false) {
  576.             $res =  ['responseCode' => $curl_error'message' => $curl_errno];
  577.             $results[throw new \Exception($res['message'])];
  578.         } else {
  579.             if ($http_code === 200) {
  580.                 $results json_decode($responsetrue);
  581.             } else {
  582.                 $results json_decode($responsetrue);
  583.                 if (!is_array($results)) {
  584.                     $results =  ['responseCode' => $http_code'message' => $results];
  585.                 }
  586.                 if ($http_code === 401) {
  587.                     // Accès non autorisé
  588.                 } else if ($http_code === 403) {
  589.                     // Aucun enregistrement correspondant
  590.                 } else if ($http_code === 404) {
  591.                     // Erreur sauvegarde
  592.                 } else if ($http_code === 409) {
  593.                     // Conflit 
  594.                 } else if ($http_code === 410) {
  595.                     // token n’est plus disponible
  596.                 }
  597.                 //$results [throw new \Exception( $res['message'] )];
  598.             }
  599.         }
  600.         return $results;
  601.     }
  602. }