Socrate e gli algoritmi: ti estì?

April 23, 2018

Ginni Rometty, la CEO di IBM, commentando i prodigi del sistema Watson si è detta convinta che in futuro, ogni decisione presa dall'umanità prenderà forma dalle indicazioni fornite da un sistema cognitivo come Watson dicendosi convinta che le nostre vite saranno migliori per questo.

Ho già scritto alcuni post sulle implicazioni sociali ed etiche delle AI e degli algoritmi e come sia necessaria tanto un algor-etica quanto una governance di questi invisibili strutture che regolano sempre più il nostro mondo per evitare forme disumane di quella che potremmo definire una algo-crazia.

 

La scuola di Atene

Mi sembra però opportuno includere questi discorsi in una prospettiva più ampia. Vista la pervasività del codice e la sempre maggiore diffusione degli algoritmi e dell’automazione da questi mediata, sembra urgente porre la seguente questione: è necessario un approccio filosofico all'algoritmo?

 

Ti estì? – che cosa è? – è la domanda che Socrate poneva sempre ai suoi interlocutori: questa è domanda caratteristica del dialogo socratico che lo distingue dal discorso persuasivo e travolgente dei sofisti. Il domandare di Socrate su quanto l’interlocutore affermava era uno dei modi del filosofo ateniese per risalire dialetticamente all’universalità delle premesse. Con il suo continuo chiedere “che cosa è?” Socrate rompeva il flusso del discorso retorico dei suoi interlocutori per cercare di arrivare a una definizione razionale, corretta ed accettata da tutti, delle premesse del discorso. Solo dopo aver stabilite le premesse con il ti estí si può passare, attraverso la dialettica, alla costruzione di un ragionamento argomentativo vero e proprio. Proprio da questa lezione metodologica di Socrate prende spunto questa piccola indagine. Volendolo dire con una battuta, dobbiamo portare l'algoritmo davanti alla scuola di Atene.

 

 

Alcune premesse

Per porre alcune domande filosofiche sulla natura degli algoritmi dobbiamo in primo luogo discutere il processo di costruzione dell'algoritmo e i problemi di traduzione, tra pensiero e linguaggio di programmazione e tra questo e il codice macchina, connessi a questo processo. Da queste premesse proveremo a rendere ragione dell'importanza di un approccio filosofico a questo processo.

Parte della analisi che sto per proporre traggono spunto da alcune idee di Rob Kitchin, contenute in un suo articolo intitolato Thinking Critically About and Researching Algorithms. Il documento in questione introduce una serie di punti che aiutano a capire perché è importante pensare agli algoritmi e al modo in cui potremmo fare ricerche su di essi. Inoltre anche alcune idee di Cosimo Accoto hanno stimolato alcune considerazioni che seguiranno.

 

Cosa è un algoritmo?

In una mia pubblicazione, La condizione tecno-umana, ho analizzato le ragioni che hanno portato l’Occidente a questa incredibilmente ed ineguagliata supremazia tecnico-scientifica. Una delle questioni chiavi in questa capacità ineguagliata di approccio tecnico alla realtà è stata la possibilità di visualizzare la realtà mediante grandezze numeriche facilmente manipolabili: i numeri nella notazione indo-araba. L’adozione in Europa dei numeri indo-arabi avvenne tramite gli scritti di Abū Jaʿfar Muhammad ibn Mūsā al-Khwārizmī, uno scienziato musulmano della Transoxiana in Persia, tramite due testi. Al-Khwārizmī scrisse nell’825 il trattato Sul calcolo con i numeri hindi, tradotto in latino nel XII secolo, con il titolo Algoritmi de numero Indorum. Algoritmi era la traslitterazione del nome dell’autore, ma la parola venne intesa come il plurale dell’ipotetico termine “algoritmo” e questo portò a coniare questo termine (dal latino algorithmus) che acquisì il significato di metodo di calcolo. Gli algoritmi sono quindi un sinonimo di processo di calcolo che nasce, al di là della curiosa storia dell’etimo, contemporaneamente allo sviluppo di questa nuova mentalità occidentale che ha dato vita al complesso tecno-scientifico di cui noi siamo eredi. I risultati di questa rivoluzione si vedono non solo nei prodigiosi avanzamenti della tecnica, ma anche in un modello di pensiero che oggi, grazie alla diffusione dell’informatica e delle tecnologie digitali, caratterizza tutto il nostro modo di vedere e spiegare il mondo - persino l’uomo e le sue realtà più intime. Tuttavia il termine algoritmo può avere un carattere inutilmente mistificante. Quando nei dibattiti pubblici si dice che alcune delle decisioni che ci riguardano sono state presa "da un algoritmo", o se si parla della necessità di un algor-etica o del rischio del sorgere di una algo-crazia, c'è il rischio di mostrare un'immagine eccessivamente allarmista e misteriosa di questi "oggetti".

 

In realtà gli algoritmi sono strumenti relativamente benigni e facili da comprendere - almeno concettualmente. Sono i sistemi attraverso i quali vengono creati e implementati a dare origine a problemi. Ma cerchiamo di cominciare dandone una definizione.

Un algoritmo può essere, con un certo accordo da arte della comunità scientifica, definito nel modo seguente:

 

Algoritmo : una serie di istruzioni specifiche, passo dopo passo, per prendere un input e convertirlo in output.

 

Così definiti, gli algoritmi sono “metodi” che usiamo ogni giorno per svolgere una varietà di compiti. Non eseguiamo questi algoritmi su computer ma li eseguiamo nella nostra mente. Una qualsiasi ricetta culinaria è di fatto un algoritmo: una sequenza di operazioni che consentono, se seguite, di modificare gli ingredienti - input - ottenendo il risultato sperato - output. Analogamente è un algoritmo il metodo che usiamo per ordinare i libri sugli scaffali di casa. Gli input in questo caso sono i libri (e più in particolare i titoli e gli autori dei libri). L'output è la sequenza ordinata di libri che finisce negli scaffali. L'algoritmo è l'insieme di regole che usiamo per ottenere quella sequenza. 

 

Proviamo a decomporre questo algoritmo di sorting - per usare l’espressione informatica dell’operazione. Per quello che sembrerebbe un ordine standard questo algoritmo si fonda su due semplici passaggi: (1) prima si raggruppano libri in base al genere o all'argomento; (2) poi si dispongono i libri all'interno di tali generi o aree tematiche in ordine alfabetico (seguendo il cognome dell'autore). Infine (3) si dispongono sui i ripiani in base alla sequenza.

 

Se questo è un algoritmo in una modalità che potremmo definire astratta, cioè come forma teoretica di un agire umano processuale volto ad ottenere un risultato, oggi, nell’era digitale e dell'informazione, gli algoritmi hanno un carattere e un’attuazione molto particolare.

 

 

Gli algoritmi oggi sono eseguiti da computer che lavorano grazie a un codice binario. Nella teoria dell'informazione, e conseguentemente nelle telecomunicazioni, nell'elettronica e nell'informatica, un codice è un sistema di segnali, segni o simboli convenzionalmente designati per rappresentare un'informazione. Il codice però non è elaborato direttamente dall'uomo ma è una trasformazione compiuta da un altro componente software: un compilatore traduce un algoritmo espresso in linguaggio di programmazione in codice macchina, cioè in una sequenza di codice utilizzabile dalla macchina. 

 

Un linguaggio di programmazione, in informatica, è un linguaggio formale che specifica un insieme di istruzioni che possono essere usate per produrre dati in output. Esso è utilizzabile per il controllo del comportamento di una macchina formale o di una implementazione di essa (tipicamente, un computer) ovvero in fase di programmazione di questa attraverso la scrittura del codice sorgente di un programma ad opera di un programmatore.  

 

Oggi gli algoritmi si trovano nel cuore della rete digitale creata da internet e si costituiscono e costruiscono mediante un linguaggio performativo - il codice - che è il cuore - e il cervello se mi si permette questa analogia impropria - della nostra esperienza del mondo mediata dai nostri strumenti elettronici: smartphone, sensori elettronici, domotica, shopping online, ecc. Inoltre sono gli algoritmi che regolano il funzionamento e le comunicazioni dell'internet delle cose - IOT - e le rivoluzioni associate all'IA e alla robotica. Gli algoritmi vengono utilizzati per raccogliere ed elaborare informazioni da apparecchiature di sorveglianza, per organizzare tali informazioni e utilizzarle per formulare raccomandazioni e piani d'azione, per implementare tali piani d'azione e per imparare da questo processo.

 

Ogni giorno siamo esposti ai modi in cui i siti web utilizzano algoritmi per eseguire ricerche, personalizzare la pubblicità, abbinarci a potenziali partner romantici e raccomandare una varietà di prodotti e servizi. 

 

Siamo forse meno avvezzi ai modi in cui gli algoritmi sono - e possono essere - utilizzati per scambiare titoli, identificare sospetti terroristi, assistere a diagnosi mediche, confrontare donatori di organi con potenziali donazioni e facilitare l'ammissione alle scuole pubbliche, ma anche questi processi sono tutti assistiti e mediati da algoritmi. La moltiplicazione di tali usi è ciò che sta alla base dei discorsi sull’algor-etica e che sta generando il fenomeno dell’algo-crazia, vale a dire di un governo della società per mezzo di algoritmi.

 

 

Poiché tutti questi algoritmi sono “contenuti”, esistono e hanno potere performativo nel codice del computer, l’algoritmo che dobbiamo prendere in considerazione non è l’oggetto mentale dei primi esempi proposti ma questi reali, nel senso di realmente codificata, modalità di conoscere decidere e agire - ma anche di potere - del mondo contemporaneo. 

 

Da questo punto di vista, la reale costruzione dell'algoritmo, o se vogliamo la sua attuale modalità di esistere, genera due distinti problemi. Propongo di chiamare questo livello della questione , in prima approssimazione, problemi di traduzione. Indico con il termine problema il fatto che vi sia bisogno di investigare e analizzare la questione della traduzione e il fatto che in molti casi non esiste un modo semplice o ovvio per tradurre da un livello all'altro.

 

Primo problema di traduzione: come si converte una determinata attività in una serie di passaggi definiti in una lingua umana?

 

Secondo problema di traduzione: come si converte in codice quella serie di passaggi definiti in linguaggio umano?

 

Di fatto per utilizzare algoritmi per svolgere dei compiti mediante dei computers dobbiamo suddividere questi compiti in una sequenza logica di passaggi. Questo è ciò che dà origine al primo problema di traduzione. Ma poi per implementare l'algoritmo su un sistema computerizzato o automatizzato, dobbiamo tradurre in codice le serie di passaggi definiti in linguaggio umano. Questo è ciò che dà origine al secondo problema di traduzione.

Per meglio evidenziare questo processo pensiamo alla metodologia di sviluppo software detta  in the small - cioè per programmi di piccole dimensioni. Questa si compone dalle seguenti fasi:


1. Specifica del problema. Enunciare il problema in maniera chiara e precisa. Questa fase richiede solitamente diverse interazioni con chi ha posto il problema, al fine di evidenziare gli aspetti rilevanti del problema stesso.


2. Analisi del problema. Individuare gli input (dati che vengono forniti) e gli output (risultati che debbono essere prodotti) del problema, assieme alle principali relazioni intercorrenti tra di essi da sfruttare ai fini della soluzione del problema, astraendo dagli aspetti algoritmici che verranno successivamente progettati.


3. Progettazione dell’algoritmo. Nel contesto del problema assegnato e della sua analisi, illustrare e motivare le principali scelte di progetto (rappresentazione degli input e degli output, idea alla base della soluzione, strutture dati utilizzate, ecc.) e riportare i principali passi con eventuali raffinamenti dell’algoritmo creato per risolvere il problema, astraendo dallo specifico linguaggio di programmazione di alto livello che verrà impiegato per l’implementazione.


4. Implementazione dell’algoritmo. Tradurre l’algoritmo nel prescelto linguaggio di programmazione di alto livello (passi di scrittura, compilazione e linking del programma).


5. Testing del programma. Effettuare diversi test significativi dell’esecuzione del programma per ciascuna classe di input del problema, riportando fedelmente sia l’input introdotto che l’output ottenuto per ciascun test (passi di caricamento ed esecuzione del programma). Se alcuni test danno risultati diversi da quelli attesi, ritornare alle fasi precedenti per correggere gli errori di malfunzionamento rilevati (passo di debugging).


6. Manutenzione del programma. Modificare il programma dopo la sua distribuzione qualora errori d’esecuzione o scarse prestazioni vengano riscontrati dagli utenti del programma, come pure nel caso si rendano necessari degli aggiornamenti a seguito di nuove esigenze degli utenti o di sviluppi tecnologici. Questa fase richiede l’adozione nelle fasi precedenti di un appropriato stile di programmazione e la produzione di un’adeguata documentazione

 

La struttura evidenziata è in qualche misura un prototipo che risiede dietro ogni creazione algoritmica. I progettisti di algoritmi nello sviluppo devono esercitare un giudizio - la logica condizionale connessa all'espressione if this then that -  e quei giudizi possono avere implicazioni importanti.

 

Kitchin usa un bell'esempio per illustrare il tipo di problemi che si presentano. Presenta un algoritmo che lo ha visto con un ruolo attivo nella progettazione. L'algoritmo doveva calcolare il numero di proprietà fantasma in Irlanda. Le proprietà fantasma sono un fenomeno sorto all'indomani della bolla immobiliare irlandese. Quando i costruttori andarono in bancarotta, un certo numero di edifici residenziali - proprietà - rimasero incompiuti e poco occupati. Ad esempio, un costruttore potrebbe aver pianificato di costruire 50 case in una particolare tenuta, ma potrebbe aver avuto dei problemi dopo averne completato solo 25 unità e vendute  10. Ciò produce le cosiddetta proprietà fantasma.

Ma è qui che le cose si complicano per il progettista dell'algoritmo. Dato un database nazionale delle proprietà con dettagli sulla proprietà e lo stato di costruzione di tutti gli sviluppi abitativi, è possibile costruire un algoritmo che ordina il database e calcola il numero di proprietà fantasma. Ma quali regole dovrebbe usare l'algoritmo? Meno del 50% di occupazione e completamento sono richiesti per una proprietà fantasma? O è sufficiente meno del 75%? Quale linguaggio di codifica si vuole utilizzare per implementare l'algoritmo? Si vogliono aggiungere altre opzioni al programma, ad esempio combinandolo con un altro insieme di algoritmi per tracciare le posizioni di queste proprietà fantasma su una mappa digitale? Rispondere a queste domande di fatto è un'operazione di discernimento che chiama in causa un giudizio. Le risposte scarsamente ponderate, come mostra Kitchin,  possono dare origine a una serie di problemi le cui conseguenze reali sono molto complesse.

 

L'importanza filosofica degli algoritmi

Una volta apprezzata la crescente ubiquità degli algoritmi, e una volta compresi i due problemi di traduzione, la necessità di pensare in modo critico sugli algoritmi diventa molto più evidente.

Come ricorda Accoto: "Il codice software è oggi sempre più incorporato – installato potremmo dire per rimanere in tema – dentro le nostre vite, in forme e dinamiche tanto ovvie quanto, in realtà, invisibili. Il software incarna oggi, al massimo grado, l’idea che le tecnologie che più incidono sull’esistenza umana sono quelle che, divenute familiari, scompaiono alla vista in quanto tali, divenendo indistinguibili dalla vita stessa. Chi oggi penserebbe, per esempio, al libro come a una tecnologia?"

 

Se gli algoritmi sono la linfa vitale delle moderne infrastrutture tecnologiche, se quelle infrastrutture modellano e influenzano sempre più aspetti delle nostre vite, e se il discernimento e il giudizio degli algoritmi-progettisti è la chiave per come lo fanno, allora è importante che ci assicuriamo di comprendere come funziona quel discernimento e giudizio.

 

Sono anche io convinto – come giustamente propone Luciano Floridi – che la filosofia debba tornare a occuparsi dei temi centrali del nostro presente e del nostro futuro prossimo e non solo chiosare gli scritti e le riflessioni dei filosofi del passato. Questo approccio filosofico deve però essere in grado, forte del patrimonio concettuale maturato nel tempo, di sporcarsi nuovamente le mani, se ci si passa questa espressione, andando a comprendere, a sondare, a dissezionare e a decostruire i domini tecnologici che sono venuti emergendo in questi anni. 
 

Più in generale, se gli algoritmi si collocano nel cuore della vita contemporanea, dovrebbero interessare i filosofi. Possiamo in prima approssimazione pensare la ricerca filosofica come divisa in tre rami principali di indagine:

 

(1) epistemologia (come sappiamo?);

 

(2) ontologia (cosa esiste?);

 

(3) etica (che cosa dovremmo fare?).

 

La crescita della governance algoritmica sembrerebbe avere importanti ripercussioni su tutti e tre i rami dell'indagine filosofica. Proverò a tratteggiare brevemente alcune di queste ripercussioni, anche se ciò che sto per dire non è affatto esaustivo (N.B. Floridi discute idee simili nel suo concetto di filosofia dell'informazione ).

 

Guardando all'epistemologia, sembra abbastanza evidente che gli algoritmi hanno un impatto importante su come acquisiamo conoscenza e su ciò che può essere conosciuto. Assistiamo a questo nella nostra vita quotidiana. Internet e la crescente crescita dell'acquisizione dei dati hanno portato alla compilazione di vasti database di informazioni. Questo ci consente di raccogliere sempre più potenziali fonti di conoscenza. Ma è impossibile per gli umani elaborare e ordinare quei database senza l'assistenza algoritmica. L'algoritmo per il Pagerank di Google e l'algoritmo di Edgerank di Facebook determinano in modo efficace una buona parte delle informazioni con le quali ci relazioniamo giorno per giorno. Oltre a questo, gli algoritmi sono ora pervasivi nella ricerca scientifica e possono essere utilizzati per generare nuove forme di conoscenza. Un buon esempio di questo è l'algoritmo di prognosi del cancro C-Path. Questo è un algoritmo di apprendimento automatico che è stato utilizzato per scoprire nuovi modi in cui valutare meglio la progressione di alcune forme di cancro. IBM spera che il loro sistema di intelligenza artificiale Watson fornirà un'assistenza simile ai medici. E se crediamo a Ginni Rometty - dalla citazione iniziale di questo post - l'uso di tali sistemi diventerà effettivamente la norma.

 

Gli algoritmi daranno forma a ciò che può essere conosciuto e genereranno forme di conoscenza conosciute. La rivoluzione che hanno portato i computer e l’informatica nel campo scientifico-tecnologico è stata abilmente descritta da Naief Yehya: "con un computer possiamo trasformare quasi tutti i problemi umani in statistiche, grafici, equazioni. La cosa davvero inquietante, però, è che così facendo creiamo l’illusione che questi problemi siano risolvibili con i computer".

 

Chris Anderson, il direttore di Wired, traccia una sintesi di cosa significhi la rivoluzione digitale per il mondo scientifico:

"gli scienziati hanno sempre contato su ipotesi ed esprimenti. [...] Di fronte alla disponibilità di enormi quantità di dati questo approccio - ipotesi, modello teorico e test - diventa obsoleto. [...] C’è ora una via migliore. I petabytes ci consentono di dire: “la correlazione è sufficiente”. Possiamo smettere di cercare modelli teorici. Possiamo analizzare i dati senza alcuna ipotesi su cosa questi possano mostrare. Possiamo inviare i numeri nel più grande insieme di computer [cluster] che il mondo abbia mai visto e lasciare che algoritmi statistici trovino modelli [statistici] dove la scienza non può. [...] Imparare a usare un computer di questa scala può essere sfidante. Ma l’opportunità è grande: la nuova disponibilità di un’enorme quantità di dati, unita con gli strumenti statistici per elaborarli, offre una modalità completamente nuova per capire il mondo. La correlazione soppianta la causalità e le scienze possono avanzare addirittura senza modelli teorici coerenti, teorie unificate o una qualche tipo di spiegazione meccanicistica".

 

L’avvento della ricerca digitale, dove tutto viene trasformato in dati numerici porta alla capacità di studiare il mondo secondo nuovi paradigmi gnoseologici: quello che conta è solo la correlazione tra due quantità di dati e non più una teoria coerente che spieghi tale correlazione.

 

 

Passiamo all'ontologia. Potrebbe essere un po' più complicato vedere come gli algoritmi possono realmente cambiare la nostra comprensione di cosa esista nel mondo, ma ci sono alcune questioni interessanti. Certamente non credo che gli algoritmi abbiano un effetto sulle questioni fondamentali dell'ontologia (come ad esempio la questione se la realtà è puramente fisica o puramente mentale), sebbene possano cambiare il modo in cui pensiamo a tali domande. Ma penso che gli algoritmi possano avere un effetto piuttosto profondo sulla realtà sociale. In particolare, penso che gli algoritmi possano rimodellare le strutture sociali e creare nuove forme di oggetto sociale. Due esempi possono essere utilizzati per illustrare questo cambiamento. Il primo esempio è tratto dal lavoro di Rob Kitchin sulla città programmabile. Kitchin sostiene che la crescita nelle cosiddette città smart dà origine a un ciclo di traduzione-trasduzione . Da un lato, vari aspetti della vita cittadina sono tradotti in software in modo che i dati possano essere raccolti e analizzati. D'altra parte, questa nuova informazione trasduce la realtà sociale. Vale a dire, rimodella e riorganizza il paesaggio sociale. Ad esempio, il software di modellazione del traffico potrebbe raccogliere e organizzare i dati dal mondo reale e quindi i pianificatori utilizzeranno tali dati per rimodellare i flussi di traffico intorno a una città.

 

Il secondo esempio di impatto ontologico si trova nel campo un po’ esoterico dell'ontologia sociale. Come sottolinea Searle nel suo lavoro su questo argomento, molti aspetti della vita sociale hanno un'ontologia soggettivista. Oggetti e istituzioni sono modellati nell'esistenza dall'immaginario collettivo. Così, ad esempio, lo stato di essere sposato è un prodotto di un'ontologia soggettivista. Crediamo collettivamente e attribuiamo questo status a individui particolari. Il classico esempio di ontologia soggettivista in azione è il denaro. Le moderne valute legali non hanno valore intrinseco: hanno valore solo in virtù del sistema collettivo di credenza e fiducia. Ma quei sistemi collettivi di credenza e fiducia spesso funzionano meglio quando la realtà fisica sottostante dei nostri sistemi valutari è difficile da corrompere. Come ho notato in altri post, i sistemi algoritmici usati dalle criptovalute come Bitcoin potrebbero fornire la base ideale per un sistema di credenze collettive e nuova fiducia. Pertanto, i sistemi algoritmici possono essere utilizzati per aggiungere o modificare la nostra ontologia sociale.

 

Inoltre Floridi fa notare come i computer e gli algoritmi sono dispositivi che comportano trasformazioni radicali, dal momento che costruiscono ambienti in cui l’utente è in grado di entrare tramite porte di accesso (possibilmente amichevoli), sperimentando una sorta di iniziazione. Secondo Floridi non vi è un termine per indicare questa nuova forma radicale di costruzione, cosicché possiamo usare il neologismo riontologizzare per fare riferimento al fatto che tale forma non si limita solamente a configurare, costruire o strutturare un sistema (come una società, un’auto o un artefatto) in modo nuovo, ma fondamentalmente comporta la trasformazione della sua natura intrinseca, vale a dire della sua ontologia. In tal senso, computer e algoritmi non stanno soltanto ricostruendo il nostro mondo: lo stanno riontologizzando.
 

 

Infine, se guardiamo all'etica, vediamo gli impatti filosofici più evidenti degli algoritmi. Ho presentato diversi esempi in molte occasioni e in molti post. I sistemi algoritmici a volte vengono presentati alle persone come apolitici, tecnocratici e privi di valore. Sono tutto tranne questo. Poiché sono costruiti tramite operazioni di giudizio e sono frutto di discernimento sono atti fondamentalmente etici. L'etica è nel cuore della realizzazione di algoritmi e principi etici trasparenti e comunicabili devono essere inclusi nel tradurre compiti in algoritmi, specie quelli che modificano o interagiscono con la vita di milioni id persone. Ci sono sia aspetti positivi che negativi in questo. Se ben progettati, gli algoritmi possono essere utilizzati per risolvere importanti problemi morali in modo equo ed efficiente. Non ho approfondito l'esempio, ma sembra che gli algoritmi di corrispondenza utilizzati per facilitare i trapianti di reni potrebbero essere un buon esempio di tutto questo. Ho anche notato, in post precedenti, come algoritmi mal disegnati hanno amplificato pregiudizi impliciti nel processo decisionale sociale - il caso di Propublica.  Bisogna essere consapevoli che i pregiudizi impliciti possono alimentare la progettazione di sistemi algoritmici, e che una volta che tali sistemi sono attivi e in esecuzione, possono avere esiti imprevisti e imprevisti.

 

Queste breve provocazioni vogliono spingere solo a una consapevolezza: è arrivato il tempo di pensare filosoficamente il software.

 

 

 

Share on Facebook
Share on Twitter
Please reload