Santé mentale en prison


professor: Bruno Falissard

INTRODUCTION :

Au sein du contexte complexe de la santé mentale en milieu carcéral, l’interaction entre la personnalité des détenus, leurs antécédents et la sévérité de leurs troubles mentaux revêt une importance capitale. Notre étude plonge dans cette réalité pour explorer la façon dont la gravité des troubles mentaux, psychologiques courants - tels que la dépression, la schizophrénie, les troubles anxieux et les addictions - s’entrelace avec des éléments clés de la personnalité tels que la propension à la recherche de sensations, l’évitement du danger, la dépendance à la récompense et leur statut socio-économique et antécédents. Notre projet se distingue par son attention particulière à un aspect souvent sous-estimé : la durée des entretiens avec les détenus. En étudiant cette variable, notre objectif est de capturer des nuances plus profondes sur la façon dont la santé mentale et la personnalité des individus incarcérés peuvent mutuellement influencer leurs comportements et son effet instantanée (et leur comportement relationnel de jour le jour). Notre étude cherche à élucider comment ces facteurs s’entremêlent dans le contexte spécifique de la prison. En saisissant ces relations, nous aspirons à éclairer les comportements et les interactions des détenus, offrant ainsi des pistes pour des approches de réadaptation mieux adaptées et plus efficaces. Cette variable semble également intéressant pour véritablement comprendre l’interaction entre l’individu et son milieu.

REVUES DE LITTÉRATURE :

Les facteurs socio-démographiques/ affectives et les antécédant, peuvent avoir un impact significatif sur la santé mentale des détenus en prison. Plusieurs études mettent en évidence l’importance de ces facteurs dans la compréhension des problèmes de santé mentale en milieu carcéral. Une étude menée au Sénégal a souligné que les caractéristiques socio-démographiques des détenus, telles que leur âge, leur niveau d’éducation, leur origine ethnique et leur statut socio-économique, contribuent à renforcer leur vulnérabilité en prison[1]. De même, une publication du Réseau de sensibilisation à la radicalisation de l’Union européenne indique que de nombreux détenus souffrent de problèmes de santé mentale avant même leur incarcération, soulignant ainsi l’importance des facteurs socio-démographiques dans ce contexte[2]. Par ailleurs, une étude du Sénat français met en lumière l’impact des troubles mentaux sur la population carcérale, soulignant que la réduction du nombre de lits d’hospitalisation à temps complet dédiés à la psychiatrie a conduit à une augmentation de la prise en charge des troubles mentaux en prison[3]. En outre, une recherche sur les adolescents détenus hospitalisés met en évidence l’organisation des soins psychiatriques en fonction des caractéristiques socio-démographiques des détenus [4]. Une étude publiée dans “The Lancet Psychiatry” en 2018 a examiné l’association entre les facteurs socio-démographiques et la santé mentale des détenus, mettant en évidence l’importance de prendre en compte ces variables dans l’évaluation et la prix en charge des problèmes de santé mentale en milieu carcéral. De même, une recherche menée par l’Institut National de la Santé Mentale a mis en lumière l’impact des facteurs affectifs et cliniques sur la santé mentale des détenus, soulignant l’importance d’une approche holistique pour la prévention et le traitement des troubles mentaux en prison. En résumé, les facteurs socio-démographiques tels que l’âge, le niveau d’éducation, les antecedents et le statut socio-économique jouent un rôle crucial dans l’impact sur la santé mentale des détenus en prison. Ces facteurs doivent être pris en compte dans la compréhension et la prise en charge des problèmes de santé mentale en milieu carcéral.

Reference : [1] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8486928/ [2] https://home-affairs.ec.europa.eu/system/files/2021-01/ran_conclusion_paper_mh_in_prison_23-24_092020_fr.pdf [3] https://www.senat.fr/rap/r09-434/r09-434_mono.html [4] https://www.sciencedirect.com/science/article/am/pii/S0013700618301672 [5] https://theses.hal.science/tel-00199248/document

PARTIE ANALYSE DE DONNÉES

HYPOTHÈSES :

1.Hypothèse sur le niveau de scolarisation : On suppose que des niveaux élevés de scolarisation chez les détenus pourraient contribuer à une communication plus fluide et efficace lors de l’entretien. Cette facilitation de la communication pourrait réduire la durée nécessaire pour obtenir des informations pertinentes.

2.Hypothèse surl’influence de la profession du détenu : Selon la nature relationnelle, expressive ou isolante de la profession du détenu, on envisage que cela pourrait impacter la dynamique de l’entretien. Par exemple, une profession favorisant les interactions sociales pourrait faciliter la communication, tandis qu’une profession plus isolante pourrait rendre l’entretien plus complexe.

3.Hypothèse sur l’effet de l’âge du détenu : L’âge du détenu est supposé influencer la durée de l’entretien. On envisage qu’un détenu plus âgé, présentant parfois des comportements associés à la sénilité, pourrait prolonger la durée de l’entretien. En revanche, un détenu plus jeune pourrait démontrer une spontanéité et une capacité à s’exprimer plus rapidement, potentiellement réduisant la durée de l’entretien.

4.Hypothèse sur les variables diagnostiques : L’hypothèse suggère que la présence de diagnostics ou de troubles mentaux complexes, tels que la dépression, la schizophrénie, le syndrome de stress post-traumatique ou des comportements d’abus d’alcool, pourrait considérablement augmenter la durée de l’entretien. L’exploration de ces symptômes complexes demanderait plus de temps pour une évaluation adéquate.

5. Hypothese sur les variables de risque suicidaire : Les variables associées au risque suicidaire, comme les scores de risque, les antécédents de tentative de suicide ou les signes indiquant un risque élevé, sont supposées entraîner des discussions approfondies pendant l’entretien. Cette nécessité d’évaluer minutieusement ces aspects pourrait augmenter la durée de l’entretien.

PRESENTATION DES DONNEES

DESCRIPTION DES VARIABLES

La description des variables se trouve dans le tableau ci-dessous:

Notre jeu de données concerne une étude sur la santé mentale en milieu carcéral, menée en 2004 et financée conjointement par le Ministère de la Justice et le Ministère de la Santé. Cette enquête a examiné 799 hommes détenus sélectionnés au hasard dès leur arrivée en prison au cours du premier mois dans des établissements pénitentiaires en France métropolitaine. Nous disposons de 26 variables suivantes :

(La base de données a été obtenue auprès du Professeur Bruno Falissard, professeur de biostatistique à la faculté de médecine Paris-Saclay, également directeur du Centre de recherche en épidémiologie et santé des populations de l’INSERM (CESP))

Noms_Variables Description_Variables Types
age L’âge du détenu au moment de l’étude. Quantitative
prof La profession ou occupation du détenu. Qualitative
duree La durée de la peine que le détenu a reçue. Qualitative
discip Indique si le détenu est sous une mesure disciplinaire. Qualitative
n.enfant Le nombre d’enfants que le détenu a. Quantitative
n.fratrie Le nombre de frères et sœurs du détenu. Quantitative
ecole Une variable de 1 à 5 indiquant le niveau de scolarisation du détenu. Qualitative
separation Indique si le détenu a été séparé de sa famille pendant son enfance (oui/non). Qualitative
juge.enfant Indique si le détenu a bénéficié de l’aide d’un juge pour enfants pendant son enfance. Qualitative
place Indique si le détenu a été placé en institution. Qualitative
abus Indique si le détenu a été victime d’abus dans son enfance. Qualitative
grave.cons La gravité consensuelle de la pathologie du détenu. Qualitative
dep.cons L’existence d’une dépression diagnostiquée par consensus. Qualitative
ago.cons L’existence d’un trouble agoraphobique diagnostiqué par consensus. Qualitative
ptsd.cons L’existence d’un syndrome de stress post-traumatique diagnostiqué par consensus. Qualitative
alc.cons L’existence d’un abus ou addiction à l’alcool diagnostiqué par consensus. Qualitative
subst.cons L’existence d’une addiction ou abus de substances diagnostiqué par consensus. Qualitative
scz.cons L’existence de la schizophrénie diagnostiquée par consensus. Qualitative
char Un score évaluant l’importance du trouble de la personnalité sous-jacent. Qualitative
rs Une mesure du niveau de recherche de sensations dans la personnalité du détenu. Qualitative
ed Une mesure du niveau d’évitement du danger dans la personnalité du détenu. Qualitative
dr Une mesure du niveau de dépendance à la récompense dans la personnalité du détenu. Qualitative
suicide.s Un score évaluant le risque suicidaire. Qualitative
suicide.hr Une variable binaire indiquant s’il y a un haut risque suicidaire. Qualitative
suicide.past Indique si le détenu a des antécédents de tentative de suicide. Qualitative
dur.interv La durée de l’entretien que les enquêteurs ont passé avec le détenu. Quantitative

GESTION DES VALEURS MANQUANTES

Pour certains individus et variables de la base de données, des valeurs sont manquantes. Nous avons remarqué qu’en appliquant la méthode de suppression des cas complets(complete case analysis), qui consiste à conserver uniquement les lignes de données complètes pour l’analyse, nous n’avions que 403 observations sur 799, soit environ la moitié des données. Pour maintenir une taille d’échantillon suffisante, nous avons choisi de conserver toutes les observations et de gérer les valeurs manquantes lors des calculs des statistiques descriptives en utilisant l’argument R ‘an.rm = TRUE’. Cela nous a permis de calculer les mesures basées uniquement sur les valeurs numériques disponibles, excluant ainsi les valeurs manquantes. Pour l’analyse des correspondances multiples (ACM), nous avons opté pour l’utilisation du package “mice” (Multivariate Imputation by Chained Equations) de FactoMineR afin d’imputer les valeurs manquantes dans l’ensemble de données en utilisant des équations à plusieurs étapes. Cette méthode d’imputation remplace les valeurs manquantes par des estimations basées sur les autres variables disponibles, créant ainsi plusieurs ensembles de données complets pour l’analyse statistique. La présence de données manquantes peut entraîner des biais lors de l’analyse, susceptibles de surestimer certains résultats. Nous avons ainsi pris ces mesures pour éviter ces biais.

STATISTIQUE DESCRIPTIVE ET ANALYSE EXPLORATOIRE:

STATISTIQUE DESCRIPTIVE

Avant d’entamer une analyse approfondie, il est impératif de conduire des statistiques descriptives et une analyse exploratoire de notre jeu de données. Parmi les 799 observations, l’âge moyen des détenus est de 39 ans, avec une tranche d’âge allant de 19 à 83 ans. La catégorie professionnelle majoritaire est celle des ouvriers, représentant environ 29% des individus, suivie par les employés (17%), les artisans (11%), les sans emploi/chômeurs (28%), les professionnels intermédiaires (7%), les agriculteurs (1%), les cadres (3%) et autres professions (4%). Concernant le parcours éducatif, 42% des détenus ont été séparés de leurs parents dans leur enfance, 43% n’ont pas été scolarisés ou ont fréquenté la maternelle, 38% ont suivi l’école élémentaire, 11% le collège, 6% le lycée et 2% l’enseignement supérieur. En outre, 20% présentent un risque suicidaire élevé, 8% un trouble schizophrénique, 40% une dépression et 16% de l’agoraphobie. Concernant les niveaux de gravité des pathologies évalués de 1 à 7 (de pas grave à très grave), les pourcentages respectifs sont : 13.39%, 16.27%, 14.27%, 20.40%, 23.03%, 10.14% et 2.50%. En outre, 27% des détenus sont dépendants de substances, 19% de l’alcool, tandis que 28% ont bénéficié de l’aide d’un juge pour enfants. Environ 22% des détenus présentent un syndrome de stress post-traumatique, 23% ont été placés et 28% ont été victimes d’abus dans leur enfance. Les niveaux de troubles de caractère/personnalité évalués de 1 à 4 (de pas fréquent à très fréquent) sont représentés respectivement par des pourcentages de 67.71%, 16.40%, 10.26% et 5.63%. De plus, 23% ont été placés sous discipline. Les détenus ont également été évalués sur diverses échelles, notamment le niveau de recherche de sensation (représenté par des pourcentages de 34.54%, 22.40% et 43.05%), l’évitement du danger (43.93%, 23.28% et 32.79%), la dépendance à la récompense (28.66%, 28.29% et 43.05%) ainsi que le score de suicide (70.09%, 8.51%, 4.76%, 6.76% et 6.88%). De plus, 29% ont tenté de se suicider par le passé. Les durées de peine sont réparties sur une échelle de 1 à 5, représentant respectivement 0.50, 6.01, 13.39, 32.42 et 47.68 années, du plus court au plus long. En moyenne, les détenus ont entre 1 et 2 enfants, avec un maximum de 13 enfants par détenu. La taille moyenne de fratrie est de 4 frères et sœurs, avec un maximum de 21. Enfin, la durée moyenne d’entretien est d’une heure (61.89 minutes), avec une durée maximale de 2 heures.

Matrice de corrélation

GRAPHIQUES ET INTERPRÉTATIONS :

Interpretation : Notre premier graphique présente la corrélation entre l’âge des détenus, le nombre d’enfants et leur profession. Il révèle que la plupart des ouvriers et artisans de notre échantillon, principalement âgés d’environ 50 ans, ont un nombre d’enfants supérieur à la moyenne observée. En parallèle, une observation intéressante est que les chômeurs et les agriculteurs ont tendance à avoir davantage d’enfants à mesure qu’ils vieillissent, ce qui contraste avec la tendance des cadres. Cette catégorie tend à avoir des enfants plus tardivement par rapport aux employés et autres professions. Cette observation peut s’avérer pertinente dans notre étude sur la santé mentale en prison, car elle souligne une corrélation potentielle entre la situation professionnelle, l’âge des détenus et le nombre d’enfants, des facteurs qui pourraient influencer les dynamiques familiales et, par conséquent, impacter la santé mentale en milieu carcéral.

visualisation de la taille de la fratrie des detenus(Graph 2)

Interpretation : On remarque que la majorité des détenus ont trois frères et sœurs (la mode de la taille de la fratrie est 3)

Interpretation : On remarque que la majorité des détenus sont ouvriers (la mode de la profession est ouvrier)

Interpretation : Notre graphique en barres ici représente la répartition des répondants en fonction de la durée d’intervention. Chaque barre correspond à une durée spécifique d’intervention, et sa hauteur indique le nombre d’individus correspondant à cette durée. L’axe horizontal montre les différentes durées d’intervention, tandis que l’axe vertical représente le nombre d’individus pour chaque durée. Les barres colorées en “orchid4” affichent visuellement la répartition des répondants. De plus, des étiquettes numériques sont ajoutées au-dessus de chaque barre pour indiquer le nombre exact d’individus pour chaque durée. Les étiquettes en noir sont positionnées au-dessus des barres avec une valeur inférieure à la moyenne du nombre d’individus, tandis que les étiquettes en rouge sont au-dessus des barres avec une valeur supérieure à la moyenne. Cette représentation nous donne un aperçu visuel de la distribution des répondants en fonction de la durée d’intervention, mettant en évidence les durées qui se démarquent par rapport à la moyenne en termes de fréquence de répondants.

Interpretation : Ce graphique représente la distribution de la durée d’interview des détenus en fonction de la présence ou de l’absence de schizophrénie. L’axe horizontal (x) indique la durée de l’interview en minutes, tandis que l’axe vertical (y) présente les catégories “Absence” et “Présence” de schizophrénie. Les zones colorées du graphique montrent la densité de distribution des durées d’interview pour les deux catégories de schizophrénie.La zone bleue (“Absence de schizophrénie”) est plus étendue ou plus élevée dans certaines parties du graphique par rapport à la zone rouge (“Présence de schizophrénie”), cela suggère que pour les durées d’interview correspondantes, il y a une plus grande concentration de cas sans schizophrénie que de cas avec schizophrénie. Ce graphique permet de comparer visuellement la distribution des durées d’interview entre les détenus présentant ou non des signes de schizophrénie, offrant ainsi un aperçu des différences potentielles dans cette mesure en fonction de la présence de ce trouble.

Interpretation : Ce graphique de violon représentant la relation entre le nombre d’enfants par détenu et la taille de la fratrie par détenu, pour les détenus dont le niveau d’évitement de danger est classifié en trois catégories (“1”, “2”, “3”). Chaque violon représente la distribution des observations pour chaque combinaison du nombre d’enfants et de la taille de la fratrie. La largeur du violon indique la densité des observations à différents niveaux de ces deux variables. Les axes x et y représentent respectivement le nombre d’enfants par détenu et la taille de la fratrie par détenu. Les couleurs des violons et des points sont associées aux différentes catégories de taille de fratrie (“1” pour petite, “2” pour moyenne et “3” pour grande), permettant une comparaison visuelle entre ces groupes. En observant ce graphique, on peut remarque que les detenus qui ont une taille plus grande ont un peu plus de dix enfants, ont observe une base montrant que la majorité ont une petite taille de fratrie et moins d’enfants.

Interpretation (Graph7): Nous avons deux graphiques circulaires affichant la répartition des catégories pour les scores de suicide et les catégories dépressives. Chaque graphique présente une vue visuelle de la répartition des différentes catégories en pourcentage par rapport à l’ensemble des observations. Le premier graphique présente la répartition des catégories de score de suicide (noté de 0 à 5 avec un score élevé de suicide, tandis que le second montre la répartition des catégories dépressives (0 pour absence de depression et 1 pour sa presence). Les légendes adjacentes aux graphiques fournissent des explications sur chaque couleur utilisée et les catégories qu’elles représentent. Les titres des graphiques indiquent clairement le type de données présenté dans chaque graphique circulaire.

Interpretation Ce graphique met en évidence la relation entre la recherche de sensation et l’âge des détenus. On observe ici que, globalement, la distribution en âge est légèrement supérieure quand on a un faible niveau de sensation, plutôt que quand on a un niveau de sensation élevé. Ce qui montre que les détenus plus jeunes ont tendance à rechercher plus de sensations que les détenus plus âgés. Cette visualisation permet de comprendre comment l’âge des détenus peut influencer leur comportement en matière de recherche de sensation. Cette observation pourrait être utile pour comprendre comment les facteurs individuels peuvent influencer la santé mentale en milieu carcéral.

Interprétation : Ce graphique met en évidence la durée d’entretien avec les détenus et la dependance à l’alcool des détenus. Il montre que les detenus dependant de l’alcool ont passé legerement plus de temps que les autres.

Interprétation : Ce graphique met en évidence la relation entre la séparation de la famille à l’enfance et la taille de la fratrie des détenus. Il montre qu’il y a une variation dans la séparation de la famille en fonction de la taille de la fratrie.On remarque que les détenus séparés de leurs famille on en moyenne legerement plus de freres et soeurs que les detunus qui n’etaient pas séparés de leurs famille. Cette visualisation permet d’identifier un ce lien entre la séparation de la famille à l’enfance et la taille de la fratrie des détenus. Cette observation implique nous incite à comprendre comment ces facteurs familiaux pourraient influencer la santé mentale en milieu carcéral.

TESTS STATISTIQUES

COMPARAISON DE DEUX POURCENTAGES : Test du Khi2

Nous allons tester si la prévalence de la dépression est plus élevé chez les detenus qui sont addicts à l’alcool ou pas.

0 1
0 64.15385 35.84615
1 43.62416 56.37584

On remarque que près de 35% de detenus dépressifs ne sont pas addicts à l’alcool alors que ce pourcentage est quasiment le double, près de 56% des detenus dépressifs sont addicte à l’alcool, ce qui montre que les détenus dépressifs passent leur temps à se saouler. Mais testons cela :

La p-value égale à 3.835e-06 ce qui est bien inférieur à 0.05, on peut affirmer avec certitude que le hasard lui seul ne peut pas expliquer cette différence de prévalence de dépression.

COMPARAISON DE DEUX MOYENNES : test de student

Conditions de validité . On a au moins 30 observations par groupe à comparer,

On remarque que la variable “durée d’entretien” suis une distribution approximativement normale car après verification de son histogramme on remarque une allure gaussienne avec une courbe en cloche. Nous pouvons également le constater graphiquement avec un Q-Q plot.

. On verifie si la variance de la durée de l’entretien par chaque groupe de presence ou non de dépression auprès des détenus.

## smp$dep.cons: 0
## [1] 19.05787
## ------------------------------------------------------------ 
## smp$dep.cons: 1
## [1] 19.74464

L’écart type entre de la durée d’entretien des détenus depressifs est de 19.74 et celui des détenus non dépressif est de 19.06 ce qui est approximativement égaux, la seconde condition aussi est vérifiée , on procède alors au test de student.

## 
##  Two Sample t-test
## 
## data:  smp$dur.interv by smp$dep.cons
## t = -5.2583, df = 747, p-value = 1.9e-07
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -10.457001  -4.771515
## sample estimates:
## mean in group 0 mean in group 1 
##        58.92341        66.53767

Comme résultat, nous avons tout d’abord le p égal à 1.9e-07, on constate que le p est largement inférieur à 0,05, on peut donc dire qu’il existe une différence statistiquement significative de durée d’entretien entre les détenus qui sont dépressifs et les détenus qui ne le sont pas.

TEST DE NULLITÉ DE CORRÉLATIONS : Approche de Pearson’

. La distribution de la variable durée de l’enquête suis une loi normale. Nous allons donc tester à 0 cette corrélation entre la durée de l’enquete et le score de comportement suicidaire.

## 
##  Pearson's product-moment correlation
## 
## data:  smp$dur.interv and smp$suicide.s
## t = 5.5111, df = 708, p-value = 4.998e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.1311935 0.2723295
## sample estimates:
##       cor 
## 0.2028146

On a d’abord le p qui ici est extrêmement faible, inférieur à 10-7. La corrélation est donc très significativement non nulle, la corrélation est 0,202. Il y a bien une corrélation positive entre la durée de l’entretien et le score de rique de suicide. On sait que la corrélation de 0,22 que l’on a observée est celle qui a été observée dans l’échantillon des 799 détenus. Alors “quelle est la valeur possible de la corrélation entre la durée de l’enquête ou de l’entretien et score de risque suicidaires, non pas dans cet échantillon mais dans l’ensemble de la population totale des détenus ?” Eh bien, il y 95 chances sur 100 que cette corrélation soit comprise entre 0,1311935 & 0,2723295.

ANALYSE MULTIVARIÉE : ANALYSE DE CORRESONDANCE MULTIPLE (ACM)

Nous allons faire ici une Analyse des Correspondances Multiples (ACM) car c’est une méthode multidimensionnelle puissante et flexible, idéale pour explorer les relations complexes au sein de données comprenant des variables de divers types. Cette approche est particulièrement adaptée à notre projet pour étudier les associations entre nos variables, qui sont hétérogènes, telles que des variables catégorielles, ordinales, binaire et quantitatives, et nos individus sont anonymes. Grâce à sa capacité à gérer ces différentes natures de données, l’ACM ici va nous offrir une vision holistique et approfondie des interrelations entre les caractéristiques multiples de notre base de données , ouvrant ainsi la voie à une compréhension plus approfondie de ses structures sous-jacentes.

##  age_18_38 age_38_58 age_58_plus temps_0_40 temps_40_80 temps_80_120 dep.cons
##  0:372     0:498     0:728       0:674      0:255       0:669        0:482   
##  1:427     1:301     1: 71       1:125      1:544       1:130        1:317   
##                                                                              
##                                                                              
##                                                                              
##                                                                              
##                                                                              
##      scz.cons   ptsd.cons subst.cons ecole   suicide.hr alc.cons suicide.past
##  Absence :733   0:626     0:587      1:343   0:639      0:650    0:574       
##  Presence: 66   1:173     1:212      2:303   1:160      1:149    1:225       
##                                      3: 90                                   
##                                      4: 45                                   
##                                      5: 18                                   
##                                                                              
##                                                                              
##                  prof     profagriculteur profartisan profautre profcadre
##  ouvrier           :233   0:793           0:709       0:768     0:775    
##  sans emploi       :222   1:  6           1: 90       1: 31     1: 24    
##  employe           :135                                                  
##  artisan           : 90                                                  
##  prof.intermediaire: 58                                                  
##  autre             : 31                                                  
##  (Other)           : 30                                                  
##  profemploye profouvrier profprof.intermediaire profsans.emploi rs      ed     
##  0:664       0:566       0:741                  0:577           1:279   1:358  
##  1:135       1:233       1: 58                  1:222           2:175   2:180  
##                                                                 3:345   3:261  
##                                                                                
##                                                                                
##                                                                                
##                                                                                
##  ago.cons dr      separation juge.enfant place   abus    duree   discip 
##  0:666    1:221   0:461      0:576       0:617   0:578   1:  6   0:615  
##  1:133    2:233   1:338      1:223       1:182   1:221   2: 54   1:184  
##           3:345                                          3:108          
##                                                          4:247          
##                                                          5:384          
##                                                                         
##                                                                         
##  char    grav.cons suicide.s    n.enfant        n.fratrie     
##  1:542   1:106     0:561     Min.   : 0.000   Min.   : 0.000  
##  2:134   2:132     1: 71     1st Qu.: 0.000   1st Qu.: 2.000  
##  3: 86   3:114     2: 36     Median : 1.000   Median : 3.000  
##  4: 37   4:163     3: 54     Mean   : 1.741   Mean   : 4.287  
##          5:183     4: 53     3rd Qu.: 3.000   3rd Qu.: 6.000  
##          6: 81     5: 24     Max.   :13.000   Max.   :21.000  
##          7: 20

CHOIX DES DIMENSIONS

Nous allons ici faire un arbitrage concernant le choix des dimensions. Il est en effet essentiel de recourir à un arbitrage concernant les dimensions afin d’avoir matière à tenter d’expliquer au mieux d’expliquer l’information. Pour ce faire nous allons respecter la loi de coude, qui consiste à repérer l’endroit à partir duquel le pourcentage d’inertie diminue beaucoup plus lentement lorsque l’on parcourt le diagramme des éboulis de gauche à droite formant un coude. Nous décidons, compte tenu des résultats de l’ACM de garder 5 dimensions principales Ce qui va permettre d’expliquer 33% de l’information; Aussi Factominer nous limite à cinq dimensions pour l’ACM :

ANALYSE GRAPHIQUE

Dans notre analyse de graphe des correspondances multiples (ACM), l’axe 1 démontre un Effet Gutmann révélateur d’une progression monotone des catégories professionnelles. En projetant ces catégories sur l’axe 1 de l’ACM, une structure linéaire nominale émerge, avec une séquence s’étendant des professions les plus à gauche vers la catégorie des agriculteurs à droite. L’axe 2 quant à lui met en évidence une opposition entre les extrêmes de la durée d’entrevue.

On observe une dissemblance entre les groupes d’individus selon les tranches d’âge, entre 38 et 58 ans (âge_38_58_1) localisés dans la partie supérieure gauche, et ceux entre 18 et 38 ans (âge_18_38_1) situés dans la partie inférieure droite.

Les individus positionnés dans le quadrant supérieur droit, tels que les détenus 242, 130 et 616, présentent un profil associé à un risque élevé de suicide, des troubles de personnalité ou de comportement, ainsi qu’à des diagnostics sévères incluant des pathologies graves et des troubles post-traumatiques. Ces détenus semblent souffrir de dépression et montrent des comportements addictifs envers l’alcool et les substances. De plus, ils ont généralement passé plus de temps en entrevue que la moyenne.

Une opposition semble également se dessiner sur la deuxième dimension entre les individus à haut risque suicidaire et ceux ayant un niveau élevé de scolarisation.

La zone inférieure gauche, quant à elle, englobe des détenus non dépressifs ni agoraphobes, sans risque suicidaire apparent. Ils ont un niveau élevé d’éducation et ont passé moins de temps en entrevue que la moyenne, tels que les détenus 182, 304, 453 et 563.

Le graphique des individus (Dim1, Dim2) ne présente pas de tendance spécifique ou particulière, n’obéissant à aucune loi de moindre carré, et reste uniformément réparti dans sa distribution, nos observations sont anonymes.

On observe clairement pour les variables binaire un regroupement des modalités « Oui/Presence(1) » vers le au dessus de la deuxième bissectrice d’un côté et des modalités « Non/Absense(0) » Ils prennent donc des valeurs plus élevées que la moyenne sur la partie supérieure de la première dimension.

Ce graphique ne révèle pas de détails précis, bien qu’il soit caractérisé par une certaine hétérogénéité. Cependant, une association notable se dessine entre un niveau d’éducation bas (école_1, représenté en noir) et une durée d’entrevue prolongée. En revanche, une durée d’entretien plus courte semble être davantage associée à des niveaux d’éducation moyens à élevés (école_3, école_4 et école_5).

Ces derniers graphiques ne font que renforcer la conclusion selon laquelle les variables diagnostiques sont associées à une durée d’entrevue prolongée. Une concentration notable de ces diagnostics est observée dans la partie supérieure droite de ces graphiques.

Il est observé une corrélation marquée entre la catégorie de la durée moyenne des entretiens (entre 40 et 80 minutes - variable “temps_40_80”) des détenus et la troisième dimension. De même, la variable profession (prof) est associée à la quatrième dimension.

Le graphique des individus (Dim3 & Dim 4) montre une particularité de chaque côté de l’axe 2. Les individus dans la partie supérieure gauche de l’axe vertical ont en général un niveau d’éducation moyen et sont principalement des cadres ou des professionnels intermédiaires, souvent jeunes. En revanche, ceux situés dans la partie supérieure droite, bien qu’âgés, affichent un niveau d’éducation élevé. Les individus en bas sont majoritairement des ouvriers ou des personnes sans emploi, et présentent quelques diagnostics spécifiques.

CLASSIFICATION

Nous avons donc ici 3 clusters (à height 60). Nos individus restent anonymes.

CONCLUSION

Rappelons dans un premier temps les hypothèses que nous avions formulées :

1.Hypothèse sur le niveau de scolarisation

2.Hypothèse surl’influence de la profession du détenu

3.Hypothèse sur l’effet de l’âge du détenu

4.Hypothèse sur les variables diagnostiques

5. Hypothese sur les variables de risque suicidaire

Concernant l’hypothèse H1, l’analyse graphique des individus et des variables démontre clairement qu’un niveau de scolarisation élevé est associé à une durée d’interview plus courte, surtout chez les individus avec un niveau de solarisation élevé. Ceci confirme l’hypothèse H1 en mettant en évidence que le niveau élevé de scolarisation, indépendamment des autres variables, favorise une durée d’interview réduite.

Quant à l’hypothèse H2 sur l’impact de la profession du détenu sur la durée de l’entretien, certaines professions telles que cadre ou professionnel intermédiaire semblent liées à des entretiens plus courts. Cependant, il est pertinent de noter que la variable profession est étroitement liée au niveau d’éducation. Bien que des cadres aient un niveau d’éducation élevé et passent moins de temps en interview, cette corrélation n’est pas systématique pour toutes les professions. Ainsi, l’hypothèse H2 n’est pas retenue.

Concernant l’hypothèse H3, indiquant que l’âge du détenu influence positivement la durée de l’entretien, les individus plus jeunes passent légèrement moins de temps que les personnes âgées. Par conséquent, l’hypothèse H3 est retenue.

L’hypothèse H4 est soutenue par des données graphiques montrant une association positive entre les diagnostics tels que la dépression, la dépendance à l’alcool et la schizophrénie, et une durée d’entretien prolongée. Ainsi, l’hypothèse H4 est confirmée.

En ce qui concerne l’hypothèse H5, les graphiques indiquent clairement que les détenus avec des antécédents de tentative de suicide ou présentant un haut risque suicidaire ont passé plus de temps que la moyenne en entretien, validant ainsi l’hypothèse H5.

Par ailleurs, nos analyses statistiques et graphiques ont mis en lumière des schémas spécifiques concernant les détenus séparés de leur famille, bénéficiaires de l’aide d’un juge pour enfant, sans emploi et d’un certain groupe d’âge. Ceux qui n’ont pas été séparés de leur famille ni aidés par un juge pour enfant ont un niveau d’études plus élevé, sont plus âgés et occupent des postes de cadre ou de professionnel intermédiaire.

En conclusion, nous avons confirmé quatre hypothèses sur cinq (H1, H3, H4, H5), confirmant en grande partie nos hypothèses sur les facteurs influençant la durée des entretiens en milieu carcéral. L’Analyse des Correspondances Multiples (ACM) a permis de mieux comprendre la base de données et de mettre en lumière des résultats initialement moins évidents. Notre étude a des limites. D’autres paramètres pourraient ne pas être pris en compte ; par exemple en changeant les variables et les individus supplémentaire ou en utilisant d’autre méthode d’analyse.

## 
## Call:
## MCA(X = smp.c, quanti.sup = 37:38, quali.sup = 16:36) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
## Variance               0.172   0.135   0.122   0.096   0.085   0.083   0.076
## % of var.             10.765   8.419   7.626   5.992   5.327   5.191   4.775
## Cumulative % of var.  10.765  19.184  26.810  32.802  38.129  43.321  48.095
##                        Dim.8   Dim.9  Dim.10  Dim.11  Dim.12  Dim.13  Dim.14
## Variance               0.072   0.071   0.068   0.066   0.066   0.062   0.061
## % of var.              4.495   4.440   4.243   4.139   4.112   3.894   3.820
## Cumulative % of var.  52.590  57.030  61.273  65.412  69.524  73.418  77.238
##                       Dim.15  Dim.16  Dim.17  Dim.18  Dim.19  Dim.20  Dim.21
## Variance               0.058   0.055   0.051   0.050   0.046   0.039   0.033
## % of var.              3.636   3.428   3.166   3.116   2.877   2.456   2.083
## Cumulative % of var.  80.874  84.301  87.467  90.583  93.460  95.916  97.999
##                       Dim.22  Dim.23  Dim.24
## Variance               0.032   0.000   0.000
## % of var.              2.001   0.000   0.000
## Cumulative % of var. 100.000 100.000 100.000
## 
## Individuals (the 10 first)
##                      Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
## 1                 | -0.089  0.006  0.003 | -0.811  0.612  0.262 |  0.344  0.122
## 2                 | -0.438  0.140  0.286 |  0.142  0.019  0.030 | -0.169  0.029
## 3                 | -0.590  0.253  0.256 |  0.144  0.019  0.015 | -0.168  0.029
## 4                 | -0.299  0.065  0.082 |  0.191  0.034  0.034 |  0.591  0.358
## 5                 |  0.258  0.048  0.054 | -0.292  0.079  0.069 |  0.352  0.127
## 6                 | -0.045  0.001  0.004 | -0.307  0.088  0.162 | -0.290  0.086
## 7                 |  0.802  0.467  0.207 |  0.017  0.000  0.000 |  0.491  0.247
## 8                 | -0.495  0.178  0.166 |  0.226  0.047  0.035 |  0.588  0.354
## 9                 |  0.510  0.189  0.169 |  0.672  0.419  0.293 | -0.052  0.003
## 10                | -0.240  0.042  0.061 |  0.158  0.023  0.026 | -0.127  0.016
##                     cos2  
## 1                  0.047 |
## 2                  0.042 |
## 3                  0.021 |
## 4                  0.319 |
## 5                  0.101 |
## 6                  0.144 |
## 7                  0.078 |
## 8                  0.234 |
## 9                  0.002 |
## 10                 0.017 |
## 
## Categories (the 10 first)
##                       Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2
## age_18_38_0       |  -0.723   9.430   0.456 -19.073 |   0.631   9.186   0.347
## age_18_38_1       |   0.630   8.215   0.456  19.073 |  -0.550   8.003   0.347
## age_38_58_0       |   0.412   4.091   0.281  14.963 |  -0.487   7.305   0.392
## age_38_58_1       |  -0.681   6.768   0.281 -14.963 |   0.805  12.086   0.392
## age_58_plus_0     |   0.088   0.273   0.079   7.954 |   0.010   0.005   0.001
## age_58_plus_1     |  -0.902   2.796   0.079  -7.954 |  -0.105   0.049   0.001
## temps_0_40_0      |   0.061   0.122   0.020   4.009 |   0.193   1.552   0.200
## temps_0_40_1      |  -0.330   0.658   0.020  -4.009 |  -1.040   8.369   0.200
## temps_40_80_0     |   0.097   0.117   0.004   1.878 |  -0.263   1.092   0.032
## temps_40_80_1     |  -0.046   0.055   0.004  -1.878 |   0.123   0.512   0.032
##                    v.test     Dim.3     ctr    cos2  v.test  
## age_18_38_0        16.648 |   0.160   0.648   0.022   4.210 |
## age_18_38_1       -16.648 |  -0.139   0.565   0.022  -4.210 |
## age_38_58_0       -17.682 |  -0.126   0.543   0.026  -4.587 |
## age_38_58_1        17.682 |   0.209   0.898   0.026   4.587 |
## age_58_plus_0       0.927 |   0.005   0.001   0.000   0.431 |
## age_58_plus_1      -0.927 |  -0.049   0.012   0.000  -0.431 |
## temps_0_40_0       12.648 |  -0.233   2.498   0.292 -15.271 |
## temps_0_40_1      -12.648 |   1.255  13.468   0.292  15.271 |
## temps_40_80_0      -5.086 |   1.418  35.054   0.942  27.422 |
## temps_40_80_1       5.086 |  -0.665  16.431   0.942 -27.422 |
## 
## Categorical variables (eta2)
##                     Dim.1 Dim.2 Dim.3  
## age_18_38         | 0.456 0.347 0.022 |
## age_38_58         | 0.281 0.392 0.026 |
## age_58_plus       | 0.079 0.001 0.000 |
## temps_0_40        | 0.020 0.200 0.292 |
## temps_40_80       | 0.004 0.032 0.942 |
## temps_80_120      | 0.050 0.046 0.482 |
## dep.cons          | 0.207 0.194 0.002 |
## scz.cons          | 0.034 0.059 0.001 |
## ptsd.cons         | 0.046 0.105 0.003 |
## subst.cons        | 0.362 0.040 0.000 |
## 
## Supplementary categories (the 10 first)
##                      Dim.1   cos2 v.test    Dim.2   cos2 v.test    Dim.3   cos2
## profagriculteur_0 | -0.003  0.001 -0.824 |  0.001  0.000  0.369 | -0.001  0.000
## profagriculteur_1 |  0.335  0.001  0.824 | -0.150  0.000 -0.369 |  0.104  0.000
## profartisan_0     |  0.110  0.096  8.746 | -0.054  0.023 -4.253 | -0.010  0.001
## profartisan_1     | -0.869  0.096 -8.746 |  0.423  0.023  4.253 |  0.079  0.001
## profautre_0       | -0.004  0.000 -0.507 |  0.044  0.047  6.154 |  0.007  0.001
## profautre_1       |  0.089  0.000  0.507 | -1.084  0.047 -6.154 | -0.184  0.001
## profcadre_0       |  0.043  0.060  6.923 | -0.006  0.001 -0.918 | -0.013  0.006
## profcadre_1       | -1.393  0.060 -6.923 |  0.185  0.001  0.918 |  0.424  0.006
## profemploye_0     | -0.008  0.000 -0.505 |  0.010  0.001  0.643 | -0.048  0.011
## profemploye_1     |  0.040  0.000  0.505 | -0.050  0.001 -0.643 |  0.237  0.011
##                   v.test  
## profagriculteur_0 -0.256 |
## profagriculteur_1  0.256 |
## profartisan_0     -0.798 |
## profartisan_1      0.798 |
## profautre_0        1.045 |
## profautre_1       -1.045 |
## profcadre_0       -2.106 |
## profcadre_1        2.106 |
## profemploye_0     -3.020 |
## profemploye_1      3.020 |
## 
## Supplementary categorical variables (eta2)
##                          Dim.1 Dim.2 Dim.3  
## profagriculteur        | 0.001 0.000 0.000 |
## profartisan            | 0.096 0.023 0.001 |
## profautre              | 0.000 0.047 0.001 |
## profcadre              | 0.060 0.001 0.006 |
## profemploye            | 0.000 0.001 0.011 |
## profouvrier            | 0.022 0.010 0.003 |
## profprof.intermediaire | 0.040 0.002 0.001 |
## profsans.emploi        | 0.062 0.017 0.036 |
## rs                     | 0.091 0.000 0.000 |
## ed                     | 0.049 0.059 0.009 |
## 
## Supplementary continuous variables
##                      Dim.1    Dim.2    Dim.3  
## n.enfant          | -0.272 |  0.239 |  0.015 |
## n.fratrie         |  0.156 |  0.127 | -0.020 |
n.enfant n.fratrie
| |
Dim.1 -0.272 0.156
| |
Dim.2 0.239 0.127
| |
Dim.3 0.015 -0.020
| |
eigenvalue percentage of variance cumulative percentage of variance
dim 1 0.17 10.76 10.76
dim 2 0.13 8.42 19.18
dim 3 0.12 7.63 26.81
dim 4 0.10 5.99 32.80
dim 5 0.09 5.33 38.13
dim 6 0.08 5.19 43.32
dim 7 0.08 4.77 48.10
dim 8 0.07 4.49 52.59
dim 9 0.07 4.44 57.03
dim 10 0.07 4.24 61.27
dim 11 0.07 4.14 65.41
dim 12 0.07 4.11 69.52
dim 13 0.06 3.89 73.42
dim 14 0.06 3.82 77.24
dim 15 0.06 3.64 80.87
dim 16 0.05 3.43 84.30
dim 17 0.05 3.17 87.47
dim 18 0.05 3.12 90.58
dim 19 0.05 2.88 93.46
dim 20 0.04 2.46 95.92
dim 21 0.03 2.08 98.00
dim 22 0.03 2.00 100.00
dim 23 0.00 0.00 100.00
dim 24 0.00 0.00 100.00
## $`Dim 1`
## 
## Link between the variable and the continuous variables (R-square)
## =================================================================================
##           correlation      p.value
## n.fratrie   0.1559605 9.480393e-06
## n.enfant   -0.2720996 4.978908e-15
## 
## Link between the variable and the categorical variable (1-way anova)
## =============================================
##                                R2       p.value
## age_18_38              0.45584500 2.025282e-107
## subst.cons             0.36171826  9.297907e-80
## suicide.hr             0.28625837  2.277455e-60
## suicide.s              0.30009883  3.569032e-59
## age_38_58              0.28055274  5.492523e-59
## alc.cons               0.23162210  1.473952e-47
## prof                   0.24173816  8.157261e-44
## dep.cons               0.20743406  3.599070e-42
## grav.cons              0.22757642  1.622220e-41
## suicide.past           0.17166517  1.722701e-34
## char                   0.17432055  8.097041e-33
## juge.enfant            0.14386002  9.727947e-29
## duree                  0.13057729  3.959636e-23
## ecole                  0.11293004  1.001050e-19
## profartisan            0.09585254  3.285771e-19
## rs                     0.09137780  2.732567e-17
## age_58_plus            0.07928522  5.003092e-16
## profsans.emploi        0.06170961  1.057776e-12
## profcadre              0.06005659  2.161216e-12
## place                  0.05777227  5.792678e-12
## ago.cons               0.05312648  4.281240e-11
## temps_80_120           0.05003007  1.618328e-10
## ptsd.cons              0.04559809  1.080960e-09
## discip                 0.04552191  1.116781e-09
## ed                     0.04912719  1.962124e-09
## profprof.intermediaire 0.03972224  1.331800e-08
## scz.cons               0.03425665  1.370679e-07
## abus                   0.03289352  2.450742e-07
## separation             0.02415490  1.018941e-05
## dr                     0.02665818  2.136104e-05
## profouvrier            0.02203182  2.526376e-05
## temps_0_40             0.02014483  5.671806e-05
## 
## Link between variable and the categories of the categorical variables
## ================================================================
##                                                    Estimate       p.value
## age_18_38=age_18_38_1                            0.28086563 2.025282e-107
## subst.cons=subst.cons_1                          0.28266605  9.297907e-80
## suicide.hr=suicide.hr_1                          0.27742404  2.277455e-60
## age_38_58=age_38_58_0                            0.22682177  5.492523e-59
## alc.cons=alc.cons_1                              0.25639857  1.473952e-47
## dep.cons=dep.cons_1                              0.19318006  3.599070e-42
## suicide.past=suicide.past_1                      0.19114780  1.722701e-34
## juge.enfant=juge.enfant_1                        0.17546148  9.727947e-29
## profartisan=profartisan_0                        0.20320427  3.285771e-19
## suicide.s=suicide.s_4                            0.19378573  1.993786e-18
## rs=rs_3                                          0.16161435  8.441900e-18
## age_58_plus=age_58_plus_0                        0.20534147  5.003092e-16
## suicide.s=suicide.s_5                            0.37259666  2.023424e-15
## grav.cons=grav.cons_6                            0.28544077  6.236226e-15
## char=char_3                                      0.12112327  9.781550e-14
## profsans.emploi=profsans.emploi_1                0.11507671  1.057776e-12
## prof=sans emploi                                 0.26361372  1.057776e-12
## profcadre=profcadre_0                            0.29791973  2.161216e-12
## place=place_1                                    0.11892054  5.792678e-12
## duree=duree_3                                    0.11077960  6.166771e-12
## ago.cons=ago.cons_1                              0.12840088  4.281240e-11
## temps_80_120=temps_80_120_1                      0.12574949  1.618328e-10
## char=char_4                                      0.23194658  1.731155e-10
## ed=ed_3                                          0.13316722  3.690174e-10
## suicide.s=suicide.s_3                            0.05888734  4.296302e-10
## ptsd.cons=ptsd.cons_1                            0.10758172  1.080960e-09
## discip=discip_1                                  0.10515724  1.116781e-09
## grav.cons=grav.cons_5                            0.10623842  5.286868e-09
## profprof.intermediaire=profprof.intermediaire_0  0.15939298  1.331800e-08
## scz.cons=Presence                                0.13951596  1.370679e-07
## ecole=ecole_1                                    0.22098400  1.759974e-07
## abus=abus_1                                      0.08413381  2.450742e-07
## grav.cons=grav.cons_7                            0.35398492  9.663111e-06
## separation=separation_1                          0.06527835  1.018941e-05
## profouvrier=profouvrier_1                        0.06776641  2.526376e-05
## prof=ouvrier                                     0.19341729  2.526376e-05
## temps_0_40=temps_0_40_0                          0.08107226  5.671806e-05
## duree=duree_2                                    0.07493621  6.974338e-05
## dr=dr_3                                          0.04939646  1.023877e-02
## ecole=ecole_2                                    0.17323730  3.299286e-02
## duree=duree_4                                   -0.09164641  2.390283e-02
## rs=rs_2                                         -0.05070691  1.077931e-02
## suicide.s=suicide.s_1                           -0.13789806  2.854919e-03
## suicide.s=suicide.s_2                           -0.07375139  2.484688e-03
## ed=ed_2                                         -0.08369567  1.523873e-03
## ed=ed_1                                         -0.04947155  1.406768e-03
## temps_0_40=temps_0_40_1                         -0.08107226  5.671806e-05
## char=char_2                                     -0.05302013  3.142284e-05
## profouvrier=profouvrier_0                       -0.06776641  2.526376e-05
## separation=separation_0                         -0.06527835  1.018941e-05
## dr=dr_2                                         -0.09943636  3.499574e-06
## abus=abus_0                                     -0.08413381  2.450742e-07
## scz.cons=Absence                                -0.13951596  1.370679e-07
## profprof.intermediaire=profprof.intermediaire_1 -0.15939298  1.331800e-08
## prof=prof.intermediaire                         -0.19823724  1.331800e-08
## ecole=ecole_3                                   -0.11379492  1.423065e-09
## discip=discip_0                                 -0.10515724  1.116781e-09
## ptsd.cons=ptsd.cons_0                           -0.10758172  1.080960e-09
## ecole=ecole_4                                   -0.24403014  2.208873e-10
## temps_80_120=temps_80_120_0                     -0.12574949  1.618328e-10
## ago.cons=ago.cons_0                             -0.12840088  4.281240e-11
## rs=rs_1                                         -0.11090744  3.900074e-11
## grav.cons=grav.cons_2                           -0.26692847  2.613915e-11
## place=place_0                                   -0.11892054  5.792678e-12
## profcadre=profcadre_1                           -0.29791973  2.161216e-12
## prof=cadre                                      -0.48053409  2.161216e-12
## profsans.emploi=profsans.emploi_0               -0.11507671  1.057776e-12
## grav.cons=grav.cons_1                           -0.32000482  2.612416e-13
## age_58_plus=age_58_plus_1                       -0.20534147  5.003092e-16
## profartisan=profartisan_1                       -0.20320427  3.285771e-19
## prof=artisan                                    -0.26322255  3.285771e-19
## duree=duree_5                                   -0.27948205  1.535225e-20
## juge.enfant=juge.enfant_0                       -0.17546148  9.727947e-29
## char=char_1                                     -0.30004972  2.153700e-30
## suicide.past=suicide.past_0                     -0.19114780  1.722701e-34
## dep.cons=dep.cons_0                             -0.19318006  3.599070e-42
## alc.cons=alc.cons_0                             -0.25639857  1.473952e-47
## suicide.s=suicide.s_0                           -0.41362028  3.413853e-52
## age_38_58=age_38_58_1                           -0.22682177  5.492523e-59
## suicide.hr=suicide.hr_0                         -0.27742404  2.277455e-60
## subst.cons=subst.cons_0                         -0.28266605  9.297907e-80
## age_18_38=age_18_38_0                           -0.28086563 2.025282e-107
## 
## $`Dim 2`
## 
## Link between the variable and the continuous variables (R-square)
## =================================================================================
##           correlation      p.value
## n.enfant    0.2388004 7.992501e-12
## n.fratrie   0.1270680 3.172856e-04
## 
## Link between the variable and the categorical variable (1-way anova)
## =============================================
##                          R2      p.value
## age_38_58       0.391806726 3.928998e-88
## age_18_38       0.347317177 6.894713e-76
## suicide.hr      0.239144220 2.877507e-49
## suicide.past    0.235558957 1.887387e-48
## temps_0_40      0.200476634 1.191568e-40
## dep.cons        0.194286018 2.616477e-39
## suicide.s       0.209451466 1.959927e-38
## grav.cons       0.148465309 4.107419e-25
## ptsd.cons       0.105372233 4.620606e-21
## prof            0.087990207 3.511706e-13
## scz.cons        0.058552927 4.136482e-12
## ed              0.058601484 3.646336e-11
## profautre       0.047460273 4.869966e-10
## temps_80_120    0.045504879 1.124951e-09
## ago.cons        0.042435859 4.179303e-09
## char            0.050659676 5.494836e-09
## subst.cons      0.039691422 1.349437e-08
## temps_40_80     0.032411366 3.009927e-07
## ecole           0.040331750 1.357798e-06
## duree           0.040132668 1.467494e-06
## profartisan     0.022667617 1.924531e-05
## profsans.emploi 0.016549645 2.665265e-04
## profouvrier     0.009503326 5.818725e-03
## abus            0.007790298 1.256554e-02
## discip          0.005406301 3.771559e-02
## 
## Link between variable and the categories of the categorical variables
## ================================================================
##                                       Estimate      p.value
## age_38_58=age_38_58_1              0.237056545 3.928998e-88
## age_18_38=age_18_38_0              0.216816160 6.894713e-76
## suicide.hr=suicide.hr_1            0.224250515 2.877507e-49
## suicide.past=suicide.past_1        0.198023408 1.887387e-48
## temps_0_40=temps_0_40_0            0.226183464 1.191568e-40
## dep.cons=dep.cons_1                0.165341376 2.616477e-39
## ptsd.cons=ptsd.cons_1              0.144632801 4.620606e-21
## suicide.s=suicide.s_4              0.151272469 1.534478e-13
## scz.cons=Presence                  0.161311109 4.136482e-12
## grav.cons=grav.cons_5              0.132142117 7.107254e-11
## grav.cons=grav.cons_6              0.221155136 2.267380e-10
## profautre=profautre_0              0.207022517 4.869966e-10
## temps_80_120=temps_80_120_1        0.106061599 1.124951e-09
## suicide.s=suicide.s_3              0.083412159 2.037870e-09
## ago.cons=ago.cons_1                0.101488653 4.179303e-09
## subst.cons=subst.cons_0            0.082808568 1.349437e-08
## ed=ed_3                            0.085315116 3.924094e-08
## duree=duree_5                      0.152341638 2.108555e-07
## temps_40_80=temps_40_80_1          0.070874997 3.009927e-07
## suicide.s=suicide.s_5              0.146745209 1.885076e-06
## suicide.s=suicide.s_2              0.056361500 1.321111e-05
## profartisan=profartisan_1          0.087392162 1.924531e-05
## prof=artisan                       0.181219483 1.924531e-05
## char=char_4                        0.124598550 2.364663e-04
## profsans.emploi=profsans.emploi_0  0.052704036 2.665265e-04
## char=char_3                        0.038316007 5.034038e-04
## profouvrier=profouvrier_1          0.039360950 5.818725e-03
## prof=ouvrier                       0.081888457 5.818725e-03
## abus=abus_1                        0.036210198 1.256554e-02
## ecole=ecole_4                      0.183021045 1.660673e-02
## grav.cons=grav.cons_7              0.160166619 2.510549e-02
## ecole=ecole_1                      0.087407170 3.444583e-02
## discip=discip_0                    0.032049227 3.771559e-02
## discip=discip_1                   -0.032049227 3.771559e-02
## abus=abus_0                       -0.036210198 1.256554e-02
## char=char_2                       -0.017933378 1.098607e-02
## duree=duree_3                     -0.003242395 8.782443e-03
## profouvrier=profouvrier_0         -0.039360950 5.818725e-03
## duree=duree_2                     -0.058368921 3.392180e-03
## ecole=ecole_3                     -0.075320603 3.118330e-04
## ecole=ecole_5                     -0.253391308 2.905538e-04
## profsans.emploi=profsans.emploi_1 -0.052704036 2.665265e-04
## prof=sans emploi                  -0.049997717 2.665265e-04
## grav.cons=grav.cons_3             -0.147269684 7.185822e-05
## grav.cons=grav.cons_2             -0.140247810 4.330734e-05
## profartisan=profartisan_0         -0.087392162 1.924531e-05
## grav.cons=grav.cons_1             -0.171678508 5.344731e-06
## temps_40_80=temps_40_80_0         -0.070874997 3.009927e-07
## subst.cons=subst.cons_1           -0.082808568 1.349437e-08
## ago.cons=ago.cons_0               -0.101488653 4.179303e-09
## char=char_1                       -0.144981179 1.492698e-09
## temps_80_120=temps_80_120_0       -0.106061599 1.124951e-09
## profautre=profautre_1             -0.207022517 4.869966e-10
## prof=autre                        -0.371857703 4.869966e-10
## ed=ed_1                           -0.112012792 1.754195e-11
## scz.cons=Absence                  -0.161311109 4.136482e-12
## ptsd.cons=ptsd.cons_0             -0.144632801 4.620606e-21
## suicide.s=suicide.s_0             -0.304338384 3.041746e-36
## dep.cons=dep.cons_0               -0.165341376 2.616477e-39
## temps_0_40=temps_0_40_1           -0.226183464 1.191568e-40
## suicide.past=suicide.past_0       -0.198023408 1.887387e-48
## suicide.hr=suicide.hr_0           -0.224250515 2.877507e-49
## age_18_38=age_18_38_1             -0.216816160 6.894713e-76
## age_38_58=age_38_58_0             -0.237056545 3.928998e-88
## 
## $`Dim 3`
## 
## Link between the variable and the categorical variable (1-way anova)
## =============================================
##                          R2       p.value
## temps_40_80     0.942340221  0.000000e+00
## temps_80_120    0.481547812 8.329007e-116
## temps_0_40      0.292225599  7.943411e-62
## profsans.emploi 0.035767522  7.197353e-08
## age_38_58       0.026362443  3.969628e-06
## prof            0.045189332  5.363158e-06
## age_18_38       0.022208905  2.341946e-05
## profemploye     0.011429867  2.478599e-03
## alc.cons        0.007380412  1.513829e-02
## discip          0.005980267  2.883253e-02
## ed              0.008668096  3.127484e-02
## profcadre       0.005556072  3.515248e-02
## 
## Link between variable and the categories of the categorical variables
## ================================================================
##                                      Estimate       p.value
## temps_40_80=temps_40_80_0          0.36372150  0.000000e+00
## temps_80_120=temps_80_120_1        0.32837465 8.329007e-116
## temps_0_40=temps_0_40_1            0.25990152  7.943411e-62
## profsans.emploi=profsans.emploi_0  0.07374196  7.197353e-08
## age_38_58=age_38_58_1              0.05852340  3.969628e-06
## age_18_38=age_18_38_0              0.05218105  2.341946e-05
## profemploye=profemploye_1          0.04983154  2.478599e-03
## prof=employe                       0.06016130  2.478599e-03
## alc.cons=alc.cons_1                0.03852345  1.513829e-02
## discip=discip_0                    0.03208104  2.883253e-02
## profcadre=profcadre_1              0.07627147  3.515248e-02
## prof=cadre                         0.12529833  3.515248e-02
## grav.cons=grav.cons_3              0.05769101  3.536146e-02
## profcadre=profcadre_0             -0.07627147  3.515248e-02
## grav.cons=grav.cons_1             -0.07345289  3.296841e-02
## suicide.s=suicide.s_0             -0.05123283  3.237850e-02
## discip=discip_1                   -0.03208104  2.883253e-02
## alc.cons=alc.cons_0               -0.03852345  1.513829e-02
## ed=ed_3                           -0.04698804  1.140572e-02
## profemploye=profemploye_0         -0.04983154  2.478599e-03
## age_18_38=age_18_38_1             -0.05218105  2.341946e-05
## age_38_58=age_38_58_0             -0.05852340  3.969628e-06
## profsans.emploi=profsans.emploi_1 -0.07374196  7.197353e-08
## prof=sans emploi                  -0.12916850  7.197353e-08
## temps_0_40=temps_0_40_0           -0.25990152  7.943411e-62
## temps_80_120=temps_80_120_0       -0.32837465 8.329007e-116
## temps_40_80=temps_40_80_1         -0.36372150  0.000000e+00
LS0tDQp0aXRsZTogfCAgDQogIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TYW50w6kgbWVudGFsZSBlbiBwcmlzb248L3NwYW4+DQogICANCiAgIVtdKEM6L1VzZXJzL0RvdWFzL0Rlc2t0b3AvUHJvamV0L3NtcGlnLnBuZyl7c3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDEwIGF1dG87IiB3aWR0aD01aW59DQogICFbXShDOi9Vc2Vycy9Eb3Vhcy9EZXNrdG9wL1Byb2pldC9sb2dvLnBuZyl7d2lkdGg9MS44aW59IA0Kc3VidGl0bGU6ICIgIg0KYXV0aG9yOiAiU0VNRUdMTyBBa29zc2l3YSBBaW3DqWUgRG9yY2FzIg0KcHJvZmVzc29yOiBCcnVubyBGYWxpc3NhcmQNCmRhdGU6ICIyMDI0LTA5LTI5Ig0Kb3V0cHV0OiANCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246DQogICAgaGlnaGxpZ2h0OiBrYXRlDQogICAgdGhlbWU6IGRhcmtseQ0KICAgIHdpZHRoOiA4MDANCiAgICB0b2NfZGVwdGg6IDMNCiAgICBtYXRoamF4OiBybWRmb3JtYXRzDQogICAgY3NzOiBzdHlsZS5jc3MNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGxvZ286IGxvZ28ucG5nDQogICAgZGZfcHJpbnQ6IGthYmxlDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgYm9va2Rvd246OmdpdGJvb2s6DQogICAgY3NzOiBzdHlsZS5jc3MgICMgZmljaGllciBDU1MgcGVyc29ubmFsaXPDqQ0KICAgIHNwbGl0X2J5OiBzZWN0aW9uICAjIERpdmlzZSBsZSBsaXZyZSBwYXIgc2VjdGlvbg0KICAgIHNwbGl0X2JpYjogdHJ1ZSAgIyBEaXZpc2UgbGEgYmlibGlvZ3JhcGhpZSBwYXIgY2hhcGl0cmUNCiAgICBjb25maWc6DQogICAgICB0b2M6DQogICAgICAgIGNvbGxhcHNlOiBzZWN0aW9uICAjIFBsaWUgb3UgZMOpcGxpZSBsYSBUT0MgcGFyIHNlY3Rpb24NCiAgICAgICAgYmVmb3JlOiB8DQogICAgICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFjY3VlaWw8L2E+PC9saT4NCiAgICAgICAgYWZ0ZXI6IHwNCiAgICAgICAgICA8bGk+PGEgaHJlZj0iYWJvdXQuaHRtbCI+w4AgcHJvcG9zPC9hPjwvbGk+DQogICAgICBkb3dubG9hZDogWyJwZGYiLCAiZXB1YiIsICJtb2JpIl0gICMgQWpvdXRlIGRlcyBsaWVucyBwb3VyIHTDqWzDqWNoYXJnZXIgZW4gUERGLCBFUFVCLCBNT0JJDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY3NzOiBjdXN0b20uY3NzDQogICAgdG9jOiB5ZXMNCiAgICBkZl9wcmludDogcGFnZWQNCiAgcm1kZm9ybWF0czo6ZG93bmN1dGU6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiBmYWxzZQ0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiBmYWxzZQ0KICAgIGxvZ286ICJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9mci9iL2I5L1VuaXZlcnNpdCVDMyVBOV9kJTI3QW5nZXJzXyUyOGxvZ28lMjkuc3ZnIg0KICBybWRmb3JtYXRzOjptYXRlcmlhbDoNCiAgICBoaWdobGlnaHQ6IGVzcHJlc3NvICMgQ2hvaXNpciB1biBzdHlsZSBkZSBjb2xvcmF0aW9uIHN5bnRheGlxdWUNCiAgICBsaWdodGJveDogdHJ1ZSAjIEFjdGl2ZXIgbCdlZmZldCBkZSB6b29tIHN1ciBsZXMgaW1hZ2VzDQogICAgdGh1bWJuYWlsczogdHJ1ZSAjIEFmZmljaGVyIGxlcyBpbWFnZXMgc291cyBmb3JtZSBkZSB2aWduZXR0ZXMNCiAgICBnYWxsZXJ5OiBmYWxzZSAjIETDqXNhY3RpdmVyIGxhIGdhbGVyaWUgZCdpbWFnZXMNCiAgICBjYXJkczogdHJ1ZSAjIEFmZmljaGVyIGxlcyBzZWN0aW9ucyBzb3VzIGZvcm1lIGRlIGNhcnRlcw0KICAgIHVzZV9ib29rZG93bjogdHJ1ZSAjIFJlbmRyZSBsZSBkb2N1bWVudCBjb21wYXRpYmxlIGF2ZWMgYm9va2Rvd24NCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAga2VlcF90ZXg6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uOiB5ZXMNCmxhbmc6IGZyDQplZGl0b3Jfb3B0aW9uczoNCiAgDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCi0tLS0tLS0NCg0KKipwcm9mZXNzb3I6KiogQnJ1bm8gRmFsaXNzYXJkDQoNCmBgYHtyIHNldHUsIGluY2x1ZGU9RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGRldiA9ICdwZGYnKQ0KDQpgYGANCg0KDQpgYGB7ciBvcHRpb25zX2NodW5rLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFDQopDQpgYGANCg0KYGBge3IgcGFja2FnZXMsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQ0KbGlicmFyeShrbml0cikgIyBwb3VyIGxlcyB0YWJsZWF1eCBldCBsZSBwaXBlICU+JSANCmxpYnJhcnkoa2FibGVFeHRyYSkgIyBwb3VyIGxlcyB0YWJsZWF1eA0KbGlicmFyeShnZ3Bsb3QyKSAjIHBvdXIgbGVzIGdyYXBoaXF1ZXMNCmxpYnJhcnkoZ2dyaWRnZXMpICMgcG91ciBsZXMgZ3JhcGhpcXVlcyBkZSBkZW5zaXTDqSBkw6ljYWzDqXMgc3VyIGwnYXhlIGRlcyBvcmRvbm7DqWVzDQpsaWJyYXJ5KHJlYWRyKSMgcG91ciBpbXBvcnRlciBhdmVjIGRlcyBlc3BhY2VzIGRhbnMgbGVzIG5vbXMgZGUgdmFyaWFibGVzDQpsaWJyYXJ5KGRwbHlyKSMgbWFuaXB1bGF0aW9uIGRlcyBiYXNlIGRlIGRvbm7DqWVzDQpsaWJyYXJ5KGZvcmNhdHMpIyBtYW5pcHVsYXRpb24gZGUgZmFjdGV1cnMNCmxpYnJhcnkodXRpbHMpDQpsaWJyYXJ5KHByZXR0eVIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkob3V0bGllcnMpDQpsaWJyYXJ5KGdwbG90cykNCmxpYnJhcnkocGxvdHJpeCkNCmxpYnJhcnkobWljZSkNCmxpYnJhcnkocHN5KQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkoRmFjdG9zaGlueSkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShzaGlueSkNCmxpYnJhcnkoRmFjdG9JbnZlc3RpZ2F0ZSkNCmBgYA0KDQoNCg0KDQpgYGB7ciB0aGVtZSBncmFwaGlxdWV9DQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKSAjIGZpeGUgbGUgdGjDqG1lIHBhciBkw6lmYXV0IGRlIGdncGxvdDINClVUUGFsZXR0ZSA8LSBjKCIjM0YzRTdDIiwgIiM0NWE1OWQiLCAiI0FFMEIzMSIsICIjMjA2NzgyIiwiIzc1N0FBMyIsIiNEMzcwMTYiLCAiIzk0OTg5RiIsIiM4RjJEM0IiLCIjNDI0YTU0IikNCmBgYA0KDQpgYGB7cn0NCnNtcDwtcmVhZC5jc3YyKCdzbXAyLmNzdicpDQpgYGANCg0KDQpgYGB7cn0NCmNsbjwtbmEub21pdChzbXApDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpjbGVhPC1taWNlKHNtcCwgbWV0aG9kID0gImNhcnQiKQ0Kc21wLmM8LWNvbXBsZXRlKGNsZWEpDQptZDwtbmFtZXMoc29ydCh0YWJsZShzbXAuYyRwcm9mKSwgZGVjcmVhc2luZyA9IFRSVUUpKVsxXQ0Kc21wLmMkcHJvZltpcy5uYShzbXAuYyRwcm9mKV08LW1kDQphdHRhY2goc21wLmMpDQpgYGANCg0KDQojICpJTlRST0RVQ1RJT04gOiogDQoNCkF1IHNlaW4gZHUgY29udGV4dGUgY29tcGxleGUgZGUgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbCwgbCdpbnRlcmFjdGlvbiBlbnRyZSBsYSBwZXJzb25uYWxpdMOpIGRlcyBkw6l0ZW51cywgbGV1cnMgYW50w6ljw6lkZW50cyBldCBsYSBzw6l2w6lyaXTDqSBkZSBsZXVycyB0cm91YmxlcyBtZW50YXV4IHJldsOqdCB1bmUgaW1wb3J0YW5jZSBjYXBpdGFsZS4gTm90cmUgw6l0dWRlIHBsb25nZSBkYW5zIGNldHRlIHLDqWFsaXTDqSBwb3VyIGV4cGxvcmVyIGxhIGZhw6dvbiBkb250IGxhIGdyYXZpdMOpIGRlcyB0cm91YmxlcyBtZW50YXV4LCBwc3ljaG9sb2dpcXVlcyBjb3VyYW50cyAtIHRlbHMgcXVlIGxhIGTDqXByZXNzaW9uLCBsYSBzY2hpem9waHLDqW5pZSwgbGVzIHRyb3VibGVzIGFueGlldXggZXQgbGVzIGFkZGljdGlvbnMgLSBzJ2VudHJlbGFjZSBhdmVjIGRlcyDDqWzDqW1lbnRzIGNsw6lzIGRlIGxhIHBlcnNvbm5hbGl0w6kgdGVscyBxdWUgbGEgcHJvcGVuc2lvbiDDoCBsYSByZWNoZXJjaGUgZGUgc2Vuc2F0aW9ucywgbCfDqXZpdGVtZW50IGR1IGRhbmdlciwgbGEgZMOpcGVuZGFuY2Ugw6AgbGEgcsOpY29tcGVuc2UgZXQgbGV1ciBzdGF0dXQgc29jaW8tw6ljb25vbWlxdWUgZXQgYW50w6ljw6lkZW50cy4NCk5vdHJlIHByb2pldCBzZSBkaXN0aW5ndWUgcGFyIHNvbiBhdHRlbnRpb24gcGFydGljdWxpw6hyZSDDoCB1biBhc3BlY3Qgc291dmVudCBzb3VzLWVzdGltw6kgOiBsYSBkdXLDqWUgZGVzIGVudHJldGllbnMgYXZlYyBsZXMgZMOpdGVudXMuIEVuIMOpdHVkaWFudCBjZXR0ZSB2YXJpYWJsZSwgbm90cmUgb2JqZWN0aWYgZXN0IGRlIGNhcHR1cmVyIGRlcyBudWFuY2VzIHBsdXMgcHJvZm9uZGVzIHN1ciBsYSBmYcOnb24gZG9udCBsYSBzYW50w6kgbWVudGFsZSBldCBsYSBwZXJzb25uYWxpdMOpIGRlcyBpbmRpdmlkdXMgaW5jYXJjw6lyw6lzIHBldXZlbnQgbXV0dWVsbGVtZW50IGluZmx1ZW5jZXIgbGV1cnMgY29tcG9ydGVtZW50cyBldCBzb24gZWZmZXQgaW5zdGFudGFuw6llIChldCBsZXVyIGNvbXBvcnRlbWVudCByZWxhdGlvbm5lbCBkZSBqb3VyIGxlIGpvdXIpLg0KTm90cmUgw6l0dWRlIGNoZXJjaGUgw6Agw6lsdWNpZGVyIGNvbW1lbnQgY2VzIGZhY3RldXJzIHMnZW50cmVtw6psZW50IGRhbnMgbGUgY29udGV4dGUgc3DDqWNpZmlxdWUgZGUgbGEgcHJpc29uLiBFbiBzYWlzaXNzYW50IGNlcyByZWxhdGlvbnMsIG5vdXMgYXNwaXJvbnMgw6Agw6ljbGFpcmVyIGxlcyBjb21wb3J0ZW1lbnRzIGV0IGxlcyBpbnRlcmFjdGlvbnMgZGVzIGTDqXRlbnVzLCBvZmZyYW50IGFpbnNpIGRlcyBwaXN0ZXMgcG91ciBkZXMgYXBwcm9jaGVzIGRlIHLDqWFkYXB0YXRpb24gbWlldXggYWRhcHTDqWVzIGV0IHBsdXMgZWZmaWNhY2VzLiBDZXR0ZSB2YXJpYWJsZSBzZW1ibGUNCsOpZ2FsZW1lbnQgaW50w6lyZXNzYW50IHBvdXIgdsOpcml0YWJsZW1lbnQgY29tcHJlbmRyZSBs4oCZaW50ZXJhY3Rpb24gZW50cmUgbOKAmWluZGl2aWR1IGV0IHNvbg0KbWlsaWV1Lg0KDQoNCiMgUkVWVUVTIERFIExJVFTDiVJBVFVSRSA6DQoNCkxlcyBmYWN0ZXVycyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMvIGFmZmVjdGl2ZXMgZXQgbGVzIGFudMOpY8OpZGFudCwgcGV1dmVudCBhdm9pciB1biBpbXBhY3Qgc2lnbmlmaWNhdGlmIHN1ciBsYSBzYW50w6kgbWVudGFsZSBkZXMgZMOpdGVudXMgZW4gcHJpc29uLiBQbHVzaWV1cnMgw6l0dWRlcyBtZXR0ZW50IGVuIMOpdmlkZW5jZSBsJ2ltcG9ydGFuY2UgZGUgY2VzIGZhY3RldXJzIGRhbnMgbGEgY29tcHLDqWhlbnNpb24gZGVzIHByb2Jsw6htZXMgZGUgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NClVuZSDDqXR1ZGUgbWVuw6llIGF1IFPDqW7DqWdhbCBhIHNvdWxpZ27DqSBxdWUgbGVzIGNhcmFjdMOpcmlzdGlxdWVzIHNvY2lvLWTDqW1vZ3JhcGhpcXVlcyBkZXMgZMOpdGVudXMsIHRlbGxlcyBxdWUgbGV1ciDDomdlLCBsZXVyIG5pdmVhdSBkJ8OpZHVjYXRpb24sIGxldXIgb3JpZ2luZSBldGhuaXF1ZSBldCBsZXVyIHN0YXR1dCBzb2Npby3DqWNvbm9taXF1ZSwgY29udHJpYnVlbnQgw6AgcmVuZm9yY2VyIGxldXIgdnVsbsOpcmFiaWxpdMOpIGVuIHByaXNvblsxXS4gRGUgbcOqbWUsIHVuZSBwdWJsaWNhdGlvbiBkdSBSw6lzZWF1IGRlIHNlbnNpYmlsaXNhdGlvbiDDoCBsYSByYWRpY2FsaXNhdGlvbiBkZSBsJ1VuaW9uIGV1cm9ww6llbm5lIGluZGlxdWUgcXVlIGRlIG5vbWJyZXV4IGTDqXRlbnVzIHNvdWZmcmVudCBkZSBwcm9ibMOobWVzIGRlIHNhbnTDqSBtZW50YWxlIGF2YW50IG3Dqm1lIGxldXIgaW5jYXJjw6lyYXRpb24sIHNvdWxpZ25hbnQgYWluc2kgbCdpbXBvcnRhbmNlIGRlcyBmYWN0ZXVycyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMgZGFucyBjZSBjb250ZXh0ZVsyXS4NClBhciBhaWxsZXVycywgdW5lIMOpdHVkZSBkdSBTw6luYXQgZnJhbsOnYWlzIG1ldCBlbiBsdW1pw6hyZSBsJ2ltcGFjdCBkZXMgdHJvdWJsZXMgbWVudGF1eCBzdXIgbGEgcG9wdWxhdGlvbiBjYXJjw6lyYWxlLCBzb3VsaWduYW50IHF1ZSBsYSByw6lkdWN0aW9uIGR1IG5vbWJyZSBkZSBsaXRzIGQnaG9zcGl0YWxpc2F0aW9uIMOgIHRlbXBzIGNvbXBsZXQgZMOpZGnDqXMgw6AgbGEgcHN5Y2hpYXRyaWUgYSBjb25kdWl0IMOgIHVuZSBhdWdtZW50YXRpb24gZGUgbGEgcHJpc2UgZW4gY2hhcmdlIGRlcyB0cm91YmxlcyBtZW50YXV4IGVuIHByaXNvblszXS4gRW4gb3V0cmUsIHVuZSByZWNoZXJjaGUgc3VyIGxlcyBhZG9sZXNjZW50cyBkw6l0ZW51cyBob3NwaXRhbGlzw6lzIG1ldCBlbiDDqXZpZGVuY2UgbCdvcmdhbmlzYXRpb24gZGVzIHNvaW5zIHBzeWNoaWF0cmlxdWVzIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMgZGVzIGTDqXRlbnVzIFs0XS4NClVuZSDDqXR1ZGUgcHVibGnDqWUgZGFucyAiVGhlIExhbmNldCBQc3ljaGlhdHJ5IiBlbiAyMDE4IGEgZXhhbWluw6kgbCdhc3NvY2lhdGlvbiBlbnRyZSBsZXMgZmFjdGV1cnMgc29jaW8tZMOpbW9ncmFwaGlxdWVzIGV0IGxhIHNhbnTDqSBtZW50YWxlIGRlcyBkw6l0ZW51cywgbWV0dGFudCBlbiDDqXZpZGVuY2UgbCdpbXBvcnRhbmNlIGRlIHByZW5kcmUgZW4gY29tcHRlIGNlcyB2YXJpYWJsZXMgZGFucyBsJ8OpdmFsdWF0aW9uIGV0IGxhIHByaXggZW4gY2hhcmdlIGRlcyBwcm9ibMOobWVzIGRlIHNhbnTDqSBtZW50YWxlIGVuIG1pbGlldSBjYXJjw6lyYWwuIERlIG3Dqm1lLCB1bmUgcmVjaGVyY2hlIG1lbsOpZSBwYXIgbCdJbnN0aXR1dCBOYXRpb25hbCBkZSBsYSBTYW50w6kgTWVudGFsZSBhIG1pcyBlbiBsdW1pw6hyZSBsJ2ltcGFjdCBkZXMgZmFjdGV1cnMgYWZmZWN0aWZzIGV0IGNsaW5pcXVlcyBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZGVzIGTDqXRlbnVzLCBzb3VsaWduYW50IGwnaW1wb3J0YW5jZSBkJ3VuZSBhcHByb2NoZSBob2xpc3RpcXVlIHBvdXIgbGEgcHLDqXZlbnRpb24gZXQgbGUgdHJhaXRlbWVudCBkZXMgdHJvdWJsZXMgbWVudGF1eCBlbiBwcmlzb24uDQpFbiByw6lzdW3DqSwgbGVzIGZhY3RldXJzIHNvY2lvLWTDqW1vZ3JhcGhpcXVlcyB0ZWxzIHF1ZSBsJ8OiZ2UsIGxlIG5pdmVhdSBkJ8OpZHVjYXRpb24sIGxlcyBhbnRlY2VkZW50cyBldCBsZSBzdGF0dXQgc29jaW8tw6ljb25vbWlxdWUgam91ZW50IHVuIHLDtGxlIGNydWNpYWwgZGFucyBsJ2ltcGFjdCBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZGVzIGTDqXRlbnVzIGVuIHByaXNvbi4gQ2VzIGZhY3RldXJzIGRvaXZlbnQgw6p0cmUgcHJpcyBlbiBjb21wdGUgZGFucyBsYSBjb21wcsOpaGVuc2lvbiBldCBsYSBwcmlzZSBlbiBjaGFyZ2UgZGVzIHByb2Jsw6htZXMgZGUgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQoqUmVmZXJlbmNlIDoqDQoqWzFdIGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcG1jL2FydGljbGVzL1BNQzg0ODY5MjgvKg0KKlsyXSBodHRwczovL2hvbWUtYWZmYWlycy5lYy5ldXJvcGEuZXUvc3lzdGVtL2ZpbGVzLzIwMjEtMDEvcmFuX2NvbmNsdXNpb25fcGFwZXJfbWhfaW5fcHJpc29uXzIzLTI0XzA5MjAyMF9mci5wZGYqDQoqWzNdIGh0dHBzOi8vd3d3LnNlbmF0LmZyL3JhcC9yMDktNDM0L3IwOS00MzRfbW9uby5odG1sKg0KKls0XSBodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvYW0vcGlpL1MwMDEzNzAwNjE4MzAxNjcyKg0KKls1XSBodHRwczovL3RoZXNlcy5oYWwuc2NpZW5jZS90ZWwtMDAxOTkyNDgvZG9jdW1lbnQqDQoNCg0KIyBQQVJUSUUgQU5BTFlTRSBERSBET05Ow4lFUw0KDQojIEhZUE9USMOIU0VTIDoNCg0KDQoqMS5IeXBvdGjDqHNlIHN1ciBsZSBuaXZlYXUgZGUgc2NvbGFyaXNhdGlvbiA6KiBPbiBzdXBwb3NlIHF1ZSBkZXMgbml2ZWF1eCDDqWxldsOpcyBkZSBzY29sYXJpc2F0aW9uIGNoZXogbGVzIGTDqXRlbnVzIHBvdXJyYWllbnQgY29udHJpYnVlciDDoCB1bmUgY29tbXVuaWNhdGlvbiBwbHVzIGZsdWlkZSBldCBlZmZpY2FjZSBsb3JzIGRlIGwnZW50cmV0aWVuLiBDZXR0ZSBmYWNpbGl0YXRpb24gZGUgbGEgY29tbXVuaWNhdGlvbiBwb3VycmFpdCByw6lkdWlyZSBsYSBkdXLDqWUgbsOpY2Vzc2FpcmUgcG91ciBvYnRlbmlyIGRlcyBpbmZvcm1hdGlvbnMgcGVydGluZW50ZXMuDQoNCioyLkh5cG90aMOoc2Ugc3VybCdpbmZsdWVuY2UgZGUgbGEgcHJvZmVzc2lvbiBkdSBkw6l0ZW51KiA6IFNlbG9uIGxhIG5hdHVyZSByZWxhdGlvbm5lbGxlLCBleHByZXNzaXZlIG91IGlzb2xhbnRlIGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSwgb24gZW52aXNhZ2UgcXVlIGNlbGEgcG91cnJhaXQgaW1wYWN0ZXIgbGEgZHluYW1pcXVlIGRlIGwnZW50cmV0aWVuLiBQYXIgZXhlbXBsZSwgdW5lIHByb2Zlc3Npb24gZmF2b3Jpc2FudCBsZXMgaW50ZXJhY3Rpb25zIHNvY2lhbGVzIHBvdXJyYWl0IGZhY2lsaXRlciBsYSBjb21tdW5pY2F0aW9uLCB0YW5kaXMgcXUndW5lIHByb2Zlc3Npb24gcGx1cyBpc29sYW50ZSBwb3VycmFpdCByZW5kcmUgbCdlbnRyZXRpZW4gcGx1cyBjb21wbGV4ZS4NCg0KKjMuSHlwb3Row6hzZSBzdXIgbCdlZmZldCBkZSBsJ8OiZ2UgZHUgZMOpdGVudSogOiBMJ8OiZ2UgZHUgZMOpdGVudSBlc3Qgc3VwcG9zw6kgaW5mbHVlbmNlciBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4uIE9uIGVudmlzYWdlIHF1J3VuIGTDqXRlbnUgcGx1cyDDomfDqSwgcHLDqXNlbnRhbnQgcGFyZm9pcyBkZXMgY29tcG9ydGVtZW50cyBhc3NvY2nDqXMgw6AgbGEgc8OpbmlsaXTDqSwgcG91cnJhaXQgcHJvbG9uZ2VyIGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4gRW4gcmV2YW5jaGUsIHVuIGTDqXRlbnUgcGx1cyBqZXVuZSBwb3VycmFpdCBkw6ltb250cmVyIHVuZSBzcG9udGFuw6lpdMOpIGV0IHVuZSBjYXBhY2l0w6kgw6AgcydleHByaW1lciBwbHVzIHJhcGlkZW1lbnQsIHBvdGVudGllbGxlbWVudCByw6lkdWlzYW50IGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4NCg0KKjQuSHlwb3Row6hzZSBzdXIgbGVzIHZhcmlhYmxlcyBkaWFnbm9zdGlxdWVzIDoqIEwnaHlwb3Row6hzZSBzdWdnw6hyZSBxdWUgbGEgcHLDqXNlbmNlIGRlIGRpYWdub3N0aWNzIG91IGRlIHRyb3VibGVzIG1lbnRhdXggY29tcGxleGVzLCB0ZWxzIHF1ZSBsYSBkw6lwcmVzc2lvbiwgbGEgc2NoaXpvcGhyw6luaWUsIGxlIHN5bmRyb21lIGRlIHN0cmVzcyBwb3N0LXRyYXVtYXRpcXVlIG91IGRlcyBjb21wb3J0ZW1lbnRzIGQnYWJ1cyBkJ2FsY29vbCwgcG91cnJhaXQgY29uc2lkw6lyYWJsZW1lbnQgYXVnbWVudGVyIGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4gTCdleHBsb3JhdGlvbiBkZSBjZXMgc3ltcHTDtG1lcyBjb21wbGV4ZXMgZGVtYW5kZXJhaXQgcGx1cyBkZSB0ZW1wcyBwb3VyIHVuZSDDqXZhbHVhdGlvbiBhZMOpcXVhdGUuDQoNCio1LiBIeXBvdGhlc2Ugc3VyIGxlcyB2YXJpYWJsZXMgZGUgcmlzcXVlIHN1aWNpZGFpcmUqIDogTGVzIHZhcmlhYmxlcyBhc3NvY2nDqWVzIGF1IHJpc3F1ZSBzdWljaWRhaXJlLCBjb21tZSBsZXMgc2NvcmVzIGRlIHJpc3F1ZSwgbGVzIGFudMOpY8OpZGVudHMgZGUgdGVudGF0aXZlIGRlIHN1aWNpZGUgb3UgbGVzIHNpZ25lcyBpbmRpcXVhbnQgdW4gcmlzcXVlIMOpbGV2w6ksIHNvbnQgc3VwcG9zw6llcyBlbnRyYcOubmVyIGRlcyBkaXNjdXNzaW9ucyBhcHByb2ZvbmRpZXMgcGVuZGFudCBsJ2VudHJldGllbi4gQ2V0dGUgbsOpY2Vzc2l0w6kgZCfDqXZhbHVlciBtaW51dGlldXNlbWVudCBjZXMgYXNwZWN0cyBwb3VycmFpdCBhdWdtZW50ZXIgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLg0KDQoNCiMgUFJFU0VOVEFUSU9OIERFUyBET05ORUVTDQoNCiMjIERFU0NSSVBUSU9OIERFUyBWQVJJQUJMRVMNCioqKkxhIGRlc2NyaXB0aW9uIGRlcyB2YXJpYWJsZXMgc2UgdHJvdXZlIGRhbnMgbGUgdGFibGVhdSBjaS1kZXNzb3VzOioqKg0KDQpOb3RyZSBqZXUgZGUgZG9ubsOpZXMgY29uY2VybmUgdW5lIMOpdHVkZSBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbCwgbWVuw6llIGVuIDIwMDQgZXQgZmluYW5jw6llIGNvbmpvaW50ZW1lbnQgcGFyIGxlIE1pbmlzdMOocmUgZGUgbGEgSnVzdGljZSBldCBsZSBNaW5pc3TDqHJlIGRlIGxhIFNhbnTDqS4gQ2V0dGUgZW5xdcOqdGUgYSBleGFtaW7DqSA3OTkgaG9tbWVzIGTDqXRlbnVzIHPDqWxlY3Rpb25uw6lzIGF1IGhhc2FyZCBkw6hzIGxldXIgYXJyaXbDqWUgZW4gcHJpc29uIGF1IGNvdXJzIGR1IHByZW1pZXIgbW9pcyBkYW5zIGRlcyDDqXRhYmxpc3NlbWVudHMgcMOpbml0ZW50aWFpcmVzIGVuIEZyYW5jZSBtw6l0cm9wb2xpdGFpbmUuIE5vdXMgZGlzcG9zb25zIGRlIDI2IHZhcmlhYmxlcyBzdWl2YW50ZXMgOg0KDQooKkxhIGJhc2UgZGUgZG9ubsOpZXMgYSDDqXTDqSBvYnRlbnVlIGF1cHLDqHMgZHUgUHJvZmVzc2V1ciBCcnVubyBGYWxpc3NhcmQsIHByb2Zlc3NldXIgZGUgYmlvc3RhdGlzdGlxdWUgw6AgbGEgZmFjdWx0w6kgZGUgbcOpZGVjaW5lIFBhcmlzLVNhY2xheSwgIMOpZ2FsZW1lbnQgZGlyZWN0ZXVyIGR1IENlbnRyZSBkZSByZWNoZXJjaGUgZW4gw6lwaWTDqW1pb2xvZ2llIGV0IHNhbnTDqSBkZXMgcG9wdWxhdGlvbnMgZGUgbOKAmUlOU0VSTSAoQ0VTUCkqKQ0KDQpgYGB7ciwgfQ0KIyBDcsOpYXRpb24gZHUgZGF0YSBmcmFtZSBhdmVjIGxlcyBpbmZvcm1hdGlvbnMgZG9ubsOpZXMNCmRvbm5lZXMgPC0gZGF0YS5mcmFtZSgNCiAgTm9tc19WYXJpYWJsZXMgPSBjKCJhZ2UiLCAicHJvZiIsICJkdXJlZSIsICJkaXNjaXAiLCAibi5lbmZhbnQiLCAibi5mcmF0cmllIiwgImVjb2xlIiwgInNlcGFyYXRpb24iLCAianVnZS5lbmZhbnQiLCAicGxhY2UiLCAiYWJ1cyIsICJncmF2ZS5jb25zIiAsImRlcC5jb25zIiwgImFnby5jb25zIiwgInB0c2QuY29ucyIsICJhbGMuY29ucyIsICJzdWJzdC5jb25zIiwgInNjei5jb25zIiwgImNoYXIiLCAicnMiLCAiZWQiLCAiZHIiLCAic3VpY2lkZS5zIiwgInN1aWNpZGUuaHIiLCAic3VpY2lkZS5wYXN0IiwiZHVyLmludGVydiIpLA0KICBEZXNjcmlwdGlvbl9WYXJpYWJsZXMgPSBjKCJMJ8OiZ2UgZHUgZMOpdGVudSBhdSBtb21lbnQgZGUgbCfDqXR1ZGUuIiwgIkxhIHByb2Zlc3Npb24gb3Ugb2NjdXBhdGlvbiBkdSBkw6l0ZW51LiIsICJMYSBkdXLDqWUgZGUgbGEgcGVpbmUgcXVlIGxlIGTDqXRlbnUgYSByZcOndWUuIiwgIkluZGlxdWUgc2kgbGUgZMOpdGVudSBlc3Qgc291cyB1bmUgbWVzdXJlIGRpc2NpcGxpbmFpcmUuIiwgIkxlIG5vbWJyZSBkJ2VuZmFudHMgcXVlIGxlIGTDqXRlbnUgYS4iLCAiTGUgbm9tYnJlIGRlIGZyw6hyZXMgZXQgc8WTdXJzIGR1IGTDqXRlbnUuIiwgIlVuZSB2YXJpYWJsZSBkZSAxIMOgIDUgaW5kaXF1YW50IGxlIG5pdmVhdSBkZSBzY29sYXJpc2F0aW9uIGR1IGTDqXRlbnUuIiwgICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSDDqXTDqSBzw6lwYXLDqSBkZSBzYSBmYW1pbGxlIHBlbmRhbnQgc29uIGVuZmFuY2UgKG91aS9ub24pLiIsICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSBiw6luw6lmaWNpw6kgZGUgbCdhaWRlIGQndW4ganVnZSBwb3VyIGVuZmFudHMgcGVuZGFudCBzb24gZW5mYW5jZS4iLCAiSW5kaXF1ZSBzaSBsZSBkw6l0ZW51IGEgw6l0w6kgcGxhY8OpIGVuIGluc3RpdHV0aW9uLiIsICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSDDqXTDqSB2aWN0aW1lIGQnYWJ1cyBkYW5zIHNvbiBlbmZhbmNlLiIsICAiTGEgZ3Jhdml0w6kgY29uc2Vuc3VlbGxlIGRlIGxhIHBhdGhvbG9naWUgZHUgZMOpdGVudS4iLCAiTCdleGlzdGVuY2UgZCd1bmUgZMOpcHJlc3Npb24gZGlhZ25vc3RpcXXDqWUgcGFyIGNvbnNlbnN1cy4iLCAiTCdleGlzdGVuY2UgZCd1biB0cm91YmxlIGFnb3JhcGhvYmlxdWUgZGlhZ25vc3RpcXXDqSBwYXIgY29uc2Vuc3VzLiIsICJMJ2V4aXN0ZW5jZSBkJ3VuIHN5bmRyb21lIGRlIHN0cmVzcyBwb3N0LXRyYXVtYXRpcXVlIGRpYWdub3N0aXF1w6kgcGFyIGNvbnNlbnN1cy4iLCAiTCdleGlzdGVuY2UgZCd1biBhYnVzIG91IGFkZGljdGlvbiDDoCBsJ2FsY29vbCBkaWFnbm9zdGlxdcOpIHBhciBjb25zZW5zdXMuIiwgIkwnZXhpc3RlbmNlIGQndW5lIGFkZGljdGlvbiBvdSBhYnVzIGRlIHN1YnN0YW5jZXMgZGlhZ25vc3RpcXXDqSBwYXIgY29uc2Vuc3VzLiIsICJMJ2V4aXN0ZW5jZSBkZSBsYSBzY2hpem9waHLDqW5pZSBkaWFnbm9zdGlxdcOpZSBwYXIgY29uc2Vuc3VzLiIsICJVbiBzY29yZSDDqXZhbHVhbnQgbCdpbXBvcnRhbmNlIGR1IHRyb3VibGUgZGUgbGEgcGVyc29ubmFsaXTDqSBzb3VzLWphY2VudC4iLCAgIlVuZSBtZXN1cmUgZHUgbml2ZWF1IGRlIHJlY2hlcmNoZSBkZSBzZW5zYXRpb25zIGRhbnMgbGEgcGVyc29ubmFsaXTDqSBkdSBkw6l0ZW51LiIsICJVbmUgbWVzdXJlIGR1IG5pdmVhdSBkJ8Opdml0ZW1lbnQgZHUgZGFuZ2VyIGRhbnMgbGEgcGVyc29ubmFsaXTDqSBkdSBkw6l0ZW51LiIsICJVbmUgbWVzdXJlIGR1IG5pdmVhdSBkZSBkw6lwZW5kYW5jZSDDoCBsYSByw6ljb21wZW5zZSBkYW5zIGxhIHBlcnNvbm5hbGl0w6kgZHUgZMOpdGVudS4iLCAgIlVuIHNjb3JlIMOpdmFsdWFudCBsZSByaXNxdWUgc3VpY2lkYWlyZS4iLCAiVW5lIHZhcmlhYmxlIGJpbmFpcmUgaW5kaXF1YW50IHMnaWwgeSBhIHVuIGhhdXQgcmlzcXVlIHN1aWNpZGFpcmUuIiwgIkluZGlxdWUgc2kgbGUgZMOpdGVudSBhIGRlcyBhbnTDqWPDqWRlbnRzIGRlIHRlbnRhdGl2ZSBkZSBzdWljaWRlLiIsICJMYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gcXVlIGxlcyBlbnF1w6p0ZXVycyBvbnQgcGFzc8OpIGF2ZWMgbGUgZMOpdGVudS4iKSwNCiAgVHlwZXMgPSBjKCJRdWFudGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbnRpdGF0aXZlIiwgIlF1YW50aXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsIlF1YWxpdGF0aXZlIiwiUXVhbGl0YXRpdmUiLCJRdWFsaXRhdGl2ZSIsIlF1YWxpdGF0aXZlIiwgIlF1YW50aXRhdGl2ZSIpDQopDQoNCg0Ka2FibGUoZG9ubmVlcykNCmBgYA0KDQojIyBHRVNUSU9OIERFUyBWQUxFVVJTIE1BTlFVQU5URVMNCg0KUG91ciBjZXJ0YWlucyBpbmRpdmlkdXMgZXQgdmFyaWFibGVzIGRlIGxhIGJhc2UgZGUgZG9ubsOpZXMsIGRlcyB2YWxldXJzIHNvbnQgbWFucXVhbnRlcy4gTm91cyBhdm9ucyByZW1hcnF1w6kgcXUnZW4gYXBwbGlxdWFudCBsYSBtw6l0aG9kZSBkZSBzdXBwcmVzc2lvbiBkZXMgY2FzIGNvbXBsZXRzKGNvbXBsZXRlIGNhc2UgYW5hbHlzaXMpLCBxdWkgY29uc2lzdGUgw6AgY29uc2VydmVyIHVuaXF1ZW1lbnQgbGVzIGxpZ25lcyBkZSBkb25uw6llcyBjb21wbMOodGVzIHBvdXIgbCdhbmFseXNlLCBub3VzIG4nYXZpb25zIHF1ZSA0MDMgb2JzZXJ2YXRpb25zIHN1ciA3OTksIHNvaXQgZW52aXJvbiBsYSBtb2l0acOpIGRlcyBkb25uw6llcy4gUG91ciBtYWludGVuaXIgdW5lIHRhaWxsZSBkJ8OpY2hhbnRpbGxvbiBzdWZmaXNhbnRlLCBub3VzIGF2b25zIGNob2lzaSBkZSBjb25zZXJ2ZXIgdG91dGVzIGxlcyBvYnNlcnZhdGlvbnMgZXQgZGUgZ8OpcmVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMgbG9ycyBkZXMgY2FsY3VscyBkZXMgc3RhdGlzdGlxdWVzIGRlc2NyaXB0aXZlcyBlbiB1dGlsaXNhbnQgbCdhcmd1bWVudCBSICdhbi5ybSA9IFRSVUUnLiBDZWxhIG5vdXMgYSBwZXJtaXMgZGUgY2FsY3VsZXIgbGVzIG1lc3VyZXMgYmFzw6llcyB1bmlxdWVtZW50IHN1ciBsZXMgdmFsZXVycyBudW3DqXJpcXVlcyBkaXNwb25pYmxlcywgZXhjbHVhbnQgYWluc2kgbGVzIHZhbGV1cnMgbWFucXVhbnRlcy4gUG91ciBsJ2FuYWx5c2UgZGVzIGNvcnJlc3BvbmRhbmNlcyBtdWx0aXBsZXMgKEFDTSksIG5vdXMgYXZvbnMgb3B0w6kgcG91ciBsJ3V0aWxpc2F0aW9uIGR1IHBhY2thZ2UgIm1pY2UiIChNdWx0aXZhcmlhdGUgSW1wdXRhdGlvbiBieSBDaGFpbmVkIEVxdWF0aW9ucykgZGUgRmFjdG9NaW5lUiBhZmluIGQnaW1wdXRlciBsZXMgdmFsZXVycyBtYW5xdWFudGVzIGRhbnMgbCdlbnNlbWJsZSBkZSBkb25uw6llcyBlbiB1dGlsaXNhbnQgZGVzIMOpcXVhdGlvbnMgw6AgcGx1c2lldXJzIMOpdGFwZXMuIENldHRlIG3DqXRob2RlIGQnaW1wdXRhdGlvbiByZW1wbGFjZSBsZXMgdmFsZXVycyBtYW5xdWFudGVzIHBhciBkZXMgZXN0aW1hdGlvbnMgYmFzw6llcyBzdXIgbGVzIGF1dHJlcyB2YXJpYWJsZXMgZGlzcG9uaWJsZXMsIGNyw6lhbnQgYWluc2kgcGx1c2lldXJzIGVuc2VtYmxlcyBkZSBkb25uw6llcyBjb21wbGV0cyBwb3VyIGwnYW5hbHlzZSBzdGF0aXN0aXF1ZS4NCkxhIHByw6lzZW5jZSBkZSBkb25uw6llcyBtYW5xdWFudGVzIHBldXQgZW50cmHDrm5lciBkZXMgYmlhaXMgbG9ycyBkZSBsJ2FuYWx5c2UsIHN1c2NlcHRpYmxlcyBkZSBzdXJlc3RpbWVyIGNlcnRhaW5zIHLDqXN1bHRhdHMuIE5vdXMgYXZvbnMgYWluc2kgcHJpcyBjZXMgbWVzdXJlcyBwb3VyIMOpdml0ZXIgY2VzIGJpYWlzLg0KDQojIFNUQVRJU1RJUVVFIERFU0NSSVBUSVZFIEVUIEFOQUxZU0UgRVhQTE9SQVRPSVJFOg0KIyMgIFNUQVRJU1RJUVVFIERFU0NSSVBUSVZFDQoNCkF2YW50IGQnZW50YW1lciB1bmUgYW5hbHlzZSBhcHByb2ZvbmRpZSwgaWwgZXN0IGltcMOpcmF0aWYgZGUgY29uZHVpcmUgZGVzIHN0YXRpc3RpcXVlcyBkZXNjcmlwdGl2ZXMgZXQgdW5lIGFuYWx5c2UgZXhwbG9yYXRvaXJlIGRlIG5vdHJlIGpldSBkZSBkb25uw6llcy4gUGFybWkgbGVzIDc5OSBvYnNlcnZhdGlvbnMsIGwnw6JnZSBtb3llbiBkZXMgZMOpdGVudXMgZXN0IGRlIDM5IGFucywgYXZlYyB1bmUgdHJhbmNoZSBkJ8OiZ2UgYWxsYW50IGRlIDE5IMOgIDgzIGFucy4gTGEgY2F0w6lnb3JpZSBwcm9mZXNzaW9ubmVsbGUgbWFqb3JpdGFpcmUgZXN0IGNlbGxlIGRlcyBvdXZyaWVycywgcmVwcsOpc2VudGFudCBlbnZpcm9uIDI5JSBkZXMgaW5kaXZpZHVzLCBzdWl2aWUgcGFyIGxlcyBlbXBsb3nDqXMgKDE3JSksIGxlcyBhcnRpc2FucyAoMTElKSwgbGVzIHNhbnMgZW1wbG9pL2Now7RtZXVycyAoMjglKSwgbGVzIHByb2Zlc3Npb25uZWxzIGludGVybcOpZGlhaXJlcyAoNyUpLCBsZXMgYWdyaWN1bHRldXJzICgxJSksIGxlcyBjYWRyZXMgKDMlKSBldCBhdXRyZXMgcHJvZmVzc2lvbnMgKDQlKS4NCkNvbmNlcm5hbnQgbGUgcGFyY291cnMgw6lkdWNhdGlmLCA0MiUgZGVzIGTDqXRlbnVzIG9udCDDqXTDqSBzw6lwYXLDqXMgZGUgbGV1cnMgcGFyZW50cyBkYW5zIGxldXIgZW5mYW5jZSwgNDMlIG4nb250IHBhcyDDqXTDqSBzY29sYXJpc8OpcyBvdSBvbnQgZnLDqXF1ZW50w6kgbGEgbWF0ZXJuZWxsZSwgMzglIG9udCBzdWl2aSBsJ8OpY29sZSDDqWzDqW1lbnRhaXJlLCAxMSUgbGUgY29sbMOoZ2UsIDYlIGxlIGx5Y8OpZSBldCAyJSBsJ2Vuc2VpZ25lbWVudCBzdXDDqXJpZXVyLiBFbiBvdXRyZSwgMjAlIHByw6lzZW50ZW50IHVuIHJpc3F1ZSBzdWljaWRhaXJlIMOpbGV2w6ksIDglIHVuIHRyb3VibGUgc2NoaXpvcGhyw6luaXF1ZSwgNDAlIHVuZSBkw6lwcmVzc2lvbiBldCAxNiUgZGUgbCdhZ29yYXBob2JpZS4NCkNvbmNlcm5hbnQgbGVzIG5pdmVhdXggZGUgZ3Jhdml0w6kgZGVzIHBhdGhvbG9naWVzIMOpdmFsdcOpcyBkZSAxIMOgIDcgKGRlIHBhcyBncmF2ZSDDoCB0csOocyBncmF2ZSksIGxlcyBwb3VyY2VudGFnZXMgcmVzcGVjdGlmcyBzb250IDogMTMuMzklLCAxNi4yNyUsIDE0LjI3JSwgMjAuNDAlLCAyMy4wMyUsIDEwLjE0JSBldCAyLjUwJS4NCkVuIG91dHJlLCAyNyUgZGVzIGTDqXRlbnVzIHNvbnQgZMOpcGVuZGFudHMgZGUgc3Vic3RhbmNlcywgMTklIGRlIGwnYWxjb29sLCB0YW5kaXMgcXVlIDI4JSBvbnQgYsOpbsOpZmljacOpIGRlIGwnYWlkZSBkJ3VuIGp1Z2UgcG91ciBlbmZhbnRzLiBFbnZpcm9uIDIyJSBkZXMgZMOpdGVudXMgcHLDqXNlbnRlbnQgdW4gc3luZHJvbWUgZGUgc3RyZXNzIHBvc3QtdHJhdW1hdGlxdWUsIDIzJSBvbnQgw6l0w6kgcGxhY8OpcyBldCAyOCUgb250IMOpdMOpIHZpY3RpbWVzIGQnYWJ1cyBkYW5zIGxldXIgZW5mYW5jZS4NCkxlcyBuaXZlYXV4IGRlIHRyb3VibGVzIGRlIGNhcmFjdMOocmUvcGVyc29ubmFsaXTDqSDDqXZhbHXDqXMgZGUgMSDDoCA0IChkZSBwYXMgZnLDqXF1ZW50IMOgIHRyw6hzIGZyw6lxdWVudCkgc29udCByZXByw6lzZW50w6lzIHJlc3BlY3RpdmVtZW50IHBhciBkZXMgcG91cmNlbnRhZ2VzIGRlIDY3LjcxJSwgMTYuNDAlLCAxMC4yNiUgZXQgNS42MyUuIERlIHBsdXMsIDIzJSBvbnQgw6l0w6kgcGxhY8OpcyBzb3VzIGRpc2NpcGxpbmUuDQpMZXMgZMOpdGVudXMgb250IMOpZ2FsZW1lbnQgw6l0w6kgw6l2YWx1w6lzIHN1ciBkaXZlcnNlcyDDqWNoZWxsZXMsIG5vdGFtbWVudCBsZSBuaXZlYXUgZGUgcmVjaGVyY2hlIGRlIHNlbnNhdGlvbiAocmVwcsOpc2VudMOpIHBhciBkZXMgcG91cmNlbnRhZ2VzIGRlIDM0LjU0JSwgMjIuNDAlIGV0IDQzLjA1JSksIGwnw6l2aXRlbWVudCBkdSBkYW5nZXIgKDQzLjkzJSwgMjMuMjglIGV0IDMyLjc5JSksIGxhIGTDqXBlbmRhbmNlIMOgIGxhIHLDqWNvbXBlbnNlICgyOC42NiUsIDI4LjI5JSBldCA0My4wNSUpIGFpbnNpIHF1ZSBsZSBzY29yZSBkZSBzdWljaWRlICg3MC4wOSUsIDguNTElLCA0Ljc2JSwgNi43NiUgZXQgNi44OCUpLg0KRGUgcGx1cywgMjklIG9udCB0ZW50w6kgZGUgc2Ugc3VpY2lkZXIgcGFyIGxlIHBhc3PDqS4gTGVzIGR1csOpZXMgZGUgcGVpbmUgc29udCByw6lwYXJ0aWVzIHN1ciB1bmUgw6ljaGVsbGUgZGUgMSDDoCA1LCByZXByw6lzZW50YW50IHJlc3BlY3RpdmVtZW50IDAuNTAsIDYuMDEsIDEzLjM5LCAzMi40MiBldCA0Ny42OCBhbm7DqWVzLCBkdSBwbHVzIGNvdXJ0IGF1IHBsdXMgbG9uZy4gRW4gbW95ZW5uZSwgbGVzIGTDqXRlbnVzIG9udCBlbnRyZSAxIGV0IDIgZW5mYW50cywgYXZlYyB1biBtYXhpbXVtIGRlIDEzIGVuZmFudHMgcGFyIGTDqXRlbnUuIExhIHRhaWxsZSBtb3llbm5lIGRlIGZyYXRyaWUgZXN0IGRlIDQgZnLDqHJlcyBldCBzxZN1cnMsIGF2ZWMgdW4gbWF4aW11bSBkZSAyMS4gRW5maW4sIGxhIGR1csOpZSBtb3llbm5lIGQnZW50cmV0aWVuIGVzdCBkJ3VuZSBoZXVyZSAoNjEuODkgbWludXRlcyksIGF2ZWMgdW5lIGR1csOpZSBtYXhpbWFsZSBkZSAyIGhldXJlcy4NCg0KDQoqKipNYXRyaWNlIGRlIGNvcnLDqWxhdGlvbioqKg0KDQoNCmBgYHtyfQ0KbWF0X2NvcjwtY29yKHNtcC5jWyxjKCJhZ2UiLCJuLmVuZmFudCIsIm4uZnJhdHJpZSIsImFnby5jb25zIiwiZGVwLmNvbnMiLCJycyIsImVkIiwiZHIiLCJzZXBhcmF0aW9uIiwiY2hhciIsInN1aWNpZGUuaHIiLCJlY29sZSIsImFidXMiLCJwbGFjZSIsImp1Z2UuZW5mYW50IiwiZ3Jhdi5jb25zIiwicHRzZC5jb25zIiwiYWxjLmNvbnMiLCJzdWJzdC5jb25zIiwic2N6LmNvbnMiLCJkaXNjaXAiLCJzdWljaWRlLnMiLCJzdWljaWRlLnBhc3QiLCJhZ2UiLCJuLmVuZmFudCIsIm4uZnJhdHJpZSIsImR1cmVlIiwiZHVyLmludGVydiIpXSkNCg0KaGVhdG1hcC4yKG1hdF9jb3IpDQpgYGANCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kc21wLmMkYWdvLmNvbnM8LWFzLmZhY3RvcihhZ28uY29ucykNCnNtcC5jJGRlcC5jb25zPC1hcy5mYWN0b3IoZGVwLmNvbnMpDQpzbXAuYyRyczwtYXMuZmFjdG9yKHJzKQ0Kc21wLmMkZWQ8LWFzLmZhY3RvcihlZCkNCnNtcC5jJGRyPC1hcy5mYWN0b3IoZHIpDQpzbXAuYyRzZXBhcmF0aW9uPC1hcy5mYWN0b3Ioc2VwYXJhdGlvbikNCnNtcC5jJGNoYXI8LWFzLmZhY3RvcihjaGFyKQ0Kc21wLmMkc3VpY2lkZS5ocjwtYXMuZmFjdG9yKHN1aWNpZGUuaHIpDQpzbXAuYyRlY29sZTwtYXMuZmFjdG9yKGVjb2xlKQ0Kc21wLmMkYWJ1czwtYXMuZmFjdG9yKGFidXMpDQpzbXAuYyRwbGFjZTwtYXMuZmFjdG9yKHBsYWNlKQ0Kc21wLmMkanVnZS5lbmZhbnQ8LWFzLmZhY3RvcihqdWdlLmVuZmFudCkNCnNtcC5jJGFsYy5jb25zPC1hcy5mYWN0b3IoYWxjLmNvbnMpDQpzbXAuYyRncmF2LmNvbnM8LWFzLmZhY3RvcihncmF2LmNvbnMpDQpzbXAuYyRwdHNkLmNvbnM8LWFzLmZhY3RvcihwdHNkLmNvbnMpDQpzbXAuYyRzdWJzdC5jb25zPC1hcy5mYWN0b3Ioc3Vic3QuY29ucykNCnNtcC5jJGRpc2NpcDwtYXMuZmFjdG9yKGRpc2NpcCkNCnNtcC5jJHN1aWNpZGUuczwtYXMuZmFjdG9yKHN1aWNpZGUucykNCnNtcC5jJHN1aWNpZGUucGFzdDwtYXMuZmFjdG9yKHN1aWNpZGUucGFzdCkNCnNtcC5jJGR1cmVlPC1hcy5mYWN0b3IoZHVyZWUpDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpkZXNjcmliZShzbXAuYykNCnByb3AudGFibGUodGFibGUoYWdlPj0zOCAmIGR1ci5pbnRlcnY+PTc1KSkqMTAwDQpwcm9wLnRhYmxlKHRhYmxlKGRlcC5jb25zPT0xICYgZHVyLmludGVydj49NzUpKSoxMDANCnByb3AudGFibGUodGFibGUoZWQ+PTIgJiBkdXIuaW50ZXJ2Pj03NSkpKjEwMA0KcHJvcC50YWJsZSh0YWJsZShzY3ouY29ucz09MSAmIGR1ci5pbnRlcnY+PTc1KSkqMTAwDQpgYGANCg0KYGBge3J9DQojIGVzc2Egey50YWJzZXQgLnRhYnNldC1mYWRlfQ0KIyMNCmBgYA0KDQojIyBHUkFQSElRVUVTIEVUIElOVEVSUFLDiVRBVElPTlMgOg0KDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzbXAuYywgYWVzKHg9YWdlLCB5PW4uZW5mYW50LCBjb2w9cHJvZiwgc2hhcGU9cHJvZikpICsNCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zKSArDQogIGdlb21fc21vb3RoKG1ldGhvZD1sbSwgc2U9RkFMU0UpICsNCiAgdGhlbWVfZ3JheSgpICsNCiAgbGFicyh4PSLDgmdlIGRlcyBkw6l0ZW51cyIsIHk9Ik5vbWJyZSBkJ2VuZmFudHMgZGVzIGTDqXRlbnVzIiwgdGl0bGU9IlJlbGF0aW9uIGVudHJlIGwnw6JnZSwgbGUgbm9tYnJlIGQnZW5mYW50cyBldCBcbiBsYSBwcm9mZXNzaW9uIGRlcyBkw6l0ZW51cyhHcmFwaCAxKSIsIGNvbD0iUHJvZmVzc2lvbiIsIHNoYXBlPSJQcm9mZXNzaW9uIikNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gOioqDQpOb3RyZSBwcmVtaWVyIGdyYXBoaXF1ZSBwcsOpc2VudGUgbGEgY29ycsOpbGF0aW9uIGVudHJlIGwnw6JnZSBkZXMgZMOpdGVudXMsIGxlIG5vbWJyZSBkJ2VuZmFudHMgZXQgbGV1ciBwcm9mZXNzaW9uLiBJbCByw6l2w6hsZSBxdWUgbGEgcGx1cGFydCBkZXMgb3V2cmllcnMgZXQgYXJ0aXNhbnMgZGUgbm90cmUgw6ljaGFudGlsbG9uLCBwcmluY2lwYWxlbWVudCDDomfDqXMgZCdlbnZpcm9uIDUwIGFucywgb250IHVuIG5vbWJyZSBkJ2VuZmFudHMgc3Vww6lyaWV1ciDDoCBsYSBtb3llbm5lIG9ic2VydsOpZS4gRW4gcGFyYWxsw6hsZSwgdW5lIG9ic2VydmF0aW9uIGludMOpcmVzc2FudGUgZXN0IHF1ZSBsZXMgY2jDtG1ldXJzIGV0IGxlcyBhZ3JpY3VsdGV1cnMgb250IHRlbmRhbmNlIMOgIGF2b2lyIGRhdmFudGFnZSBkJ2VuZmFudHMgw6AgbWVzdXJlIHF1J2lscyB2aWVpbGxpc3NlbnQsIGNlIHF1aSBjb250cmFzdGUgYXZlYyBsYSB0ZW5kYW5jZSBkZXMgY2FkcmVzLiBDZXR0ZSBjYXTDqWdvcmllIHRlbmQgw6AgYXZvaXIgZGVzIGVuZmFudHMgcGx1cyB0YXJkaXZlbWVudCBwYXIgcmFwcG9ydCBhdXggZW1wbG95w6lzIGV0IGF1dHJlcyBwcm9mZXNzaW9ucy4NCkNldHRlIG9ic2VydmF0aW9uIHBldXQgcydhdsOpcmVyIHBlcnRpbmVudGUgZGFucyBub3RyZSDDqXR1ZGUgc3VyIGxhIHNhbnTDqSBtZW50YWxlIGVuIHByaXNvbiwgY2FyIGVsbGUgc291bGlnbmUgdW5lIGNvcnLDqWxhdGlvbiBwb3RlbnRpZWxsZSBlbnRyZSBsYSBzaXR1YXRpb24gcHJvZmVzc2lvbm5lbGxlLCBsJ8OiZ2UgZGVzIGTDqXRlbnVzIGV0IGxlIG5vbWJyZSBkJ2VuZmFudHMsIGRlcyBmYWN0ZXVycyBxdWkgcG91cnJhaWVudCBpbmZsdWVuY2VyIGxlcyBkeW5hbWlxdWVzIGZhbWlsaWFsZXMgZXQsIHBhciBjb25zw6lxdWVudCwgaW1wYWN0ZXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQoqKnZpc3VhbGlzYXRpb24gZGUgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGRldGVudXMoR3JhcGggMikqKg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KZ2dwbG90KGRhdGEgPSBzbXAuYykrDQogIGdlb21fYmFyKGFlcyh4PW4uZnJhdHJpZSkscG9zaXRpb24gPSAic3RhY2siLGNvbD0iZ3JlZW4iLCBmaWxsPSJibHVlIikrDQogIGxhYnMoeCA9ICJMYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBkZXMgZGV0ZW51cyIsIHk9ICJub21icmUgb2JzZXJ2YXRpb25zIikNCg0KYGBgDQoNCg0KKipJbnRlcnByZXRhdGlvbiA6KioNCk9uIHJlbWFycXVlIHF1ZSBsYSBtYWpvcml0w6kgZGVzIGTDqXRlbnVzIG9udCB0cm9pcyBmcsOocmVzIGV0IHPFk3VycyAobGEgbW9kZSBkZSBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBlc3QgMykNCg0KYGBge3J9DQojZmFjdG9yKGFnby5jb25zLCBsZXZlbHMgPSBjKDAsMSksIGxhYmVscyA9IGMoIiIpDQojImFnZSIsIm4uZW5mYW50Iiwibi5mcmF0cmllIiwiYWdvLmNvbnMiLCJkZXAuY29ucyIsInJzIiwiZWQiLCJkciIsInNlcGFyYXRpb24iLCJjaGFyIiwic3VpY2lkZS5ociIsImVjb2xlIiwiYWJ1cyIsInBsYWNlIiwianVnZS5lbmZhbnQiLCJncmF2LmNvbnMiLCJwdHNkLmNvbnMiLCJhbGMuY29ucyIsInN1YnN0LmNvbnMiLCJzY3ouY29ucyIsImRpc2NpcCIsInN1aWNpZGUucyIsInN1aWNpZGUucGFzdCIsImFnZSIsIm4uZW5mYW50Iiwibi5mcmF0cmllIiwiZHVyZWUiLCJkdXIuaW50ZXJ2Ig0KI3N1bW1hcnkoc21wJGR1ci5pbnRlcnYsIG5hLnJtID0gVFJVRSkNCiNzdW1tYXJ5KHNtcCRhZ2UsIG5hLnJtID0gVFJVRSkNCiNzdW1tYXJ5KHNtcCRuLmVuZmFudCwgbmEucm0gPSBUUlVFKQ0KI3N1bW1hcnkoc21wJG4uZnJhdHJpZSwgbmEucm0gPSBUUlVFKQ0KYGBgDQoNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpwYXIobWZyb3c9YygxLCAyKSkNCnNtcC5jICU+JSANCiAgZ2dwbG90KCkgKyBhZXMoeCA9IGZjdF9yZXYoZmN0X2luZnJlcShmY3RfbHVtcF9sb3dmcmVxKCBwcm9mLCBvdGhlcl9sZXZlbCA9ICJhdXRyZSIpKSkpICsgDQogIGdlb21fYmFyKHdpZHRoID0gMC43LCBmaWxsID0gVVRQYWxldHRlWzJdKSArDQogIGxhYnModGl0bGUgPSAidmlzdWFsaXNhdGlvbiBkZXMgcHJvZmVzc2lvbnMgXG4gZGVzIGRldGVudXMoR3JhcGggMykiLA0KICAgIHN1YnRpdGxlID0gInByb2Zlc3Npb24iLA0KICAgIHggPSAiIiwgeSA9ICJFZmZlY3RpZiIpICsNCiAgY29vcmRfZmxpcCgpDQpwcm9mX3BpZSA8LSB0YWJsZShzbXAkcHJvZikNCmNvbG9ycyA8LSBicmV3ZXIucGFsKGxlbmd0aChwcm9mX3BpZSksICJTZXQzIikNCnBpZShwcm9mX3BpZSwgY29sID0gY29sb3JzLA0KICAgIG1haW4gPSAiUsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllcyBwcm9mZXNzaW9ubmVsbGVzIiwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhwcm9mX3BpZSksICI6ICIsIHByb2ZfcGllKSwNCiAgICBjZXggPSAwLjgpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldCA9IGMoLTAuNSwgMCksIHRpdGxlID0gIkNhdMOpZ29yaWVzIHByb2Zlc3Npb25uZWxsZXMiLA0KICAgICAgIGNleCA9IDAuOCwgZmlsbCA9IGNvbG9ycywgbGVnZW5kID0gbmFtZXMocHJvZl9waWUpKQ0KDQpgYGANCg0KDQoqKkludGVycHJldGF0aW9uIDoqKg0KT24gcmVtYXJxdWUgcXVlIGxhIG1ham9yaXTDqSBkZXMgZMOpdGVudXMgc29udCBvdXZyaWVycyAobGEgbW9kZSBkZSBsYSBwcm9mZXNzaW9uIGVzdCBvdXZyaWVyKQ0KDQoNCg0KYGBge3IgYmFycGxvdF9uaXZlYXUsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA0LCBvdXQuaGVpZ2h0ID0gIjMwMHB4Iiwgb3V0LndpZHRoPSAiMzAwcHgiLCBmaWcuYWxpZ249J2NlbnRlcid9DQojIGNvbnN0cnVjdGlvbiBkZSBsYSB0YWJsZSBkJ2VmZmVjdGlmDQp0YWJsZV9uaXZlYXUgPC0gdGFibGUoc21wLmMkZHVyLmludGVydikNCiMgc3DDqWNpZmljYXRpb24gc3VyIGxhIGZlbmV0cmUgZ3JhcGhpcXVlDQpwYXIoeHBkID0gVFJVRSkgIyDDqXRlbmRyZSBsYSB6b25lIGR1IGdyYXBoaXF1ZSAocGFzIHV0aWxlIHF1YW5kIG9uIMOpY3JpdCBkYW5zIGxlcyBiYXJyZXMpDQojIGNyw6lhdGlvbiBkdSBiYXJwbG90DQpiYXJwbG90X25pdmVhdSA8LSBiYXJwbG90KHRhYmxlX25pdmVhdSwNCiAgICAgICAgbGFzID0gMSwgc3BhY2UgPSAxLA0KICAgICAgICBjb2wgPSAib3JjaGlkNCIsDQogICAgICAgIGJvcmRlciA9ICJvcmNoaWQ0IiwNCiAgICAgICAgbWFpbiA9ICJSZXBhcnRpdGlvbiBkZXMgcmVwb25kYW50cyBcbiBwYXIgZHVyZWUgZF9pbnRlcnZlbnRpb24gKEdyYXBoIDQpIiwgDQogICAgICAgIGF4ZXMgPSBUUlVFKSAjIGVubMOodmUgbGVzIGF4ZXMNCiMgYWpvdXQgZGUgdGV4dGUgc3VyIGxlIGdyYXBoaXF1ZQ0KdGV4dCh4ID0gYmFycGxvdF9uaXZlYXUsDQogICAgIHkgPSB0YWJsZV9uaXZlYXUsDQogICAgIGxhYmVscyA9IHRhYmxlX25pdmVhdSwNCiAgICAgcG9zID0gaWZlbHNlKHRhYmxlX25pdmVhdSA8IG1lYW4odGFibGVfbml2ZWF1KSwgMywgMSksIA0KICAgICBjb2wgPSBpZmVsc2UodGFibGVfbml2ZWF1IDwgbWVhbih0YWJsZV9uaXZlYXUpLCAiYmxhY2siLCAicmVkIikNCikNCmBgYA0KDQoqKkludGVycHJldGF0aW9uIDoqKg0KTm90cmUgZ3JhcGhpcXVlIGVuIGJhcnJlcyBpY2kgcmVwcsOpc2VudGUgbGEgcsOpcGFydGl0aW9uIGRlcyByw6lwb25kYW50cyBlbiBmb25jdGlvbiBkZSBsYSBkdXLDqWUgZCdpbnRlcnZlbnRpb24uIENoYXF1ZSBiYXJyZSBjb3JyZXNwb25kIMOgIHVuZSBkdXLDqWUgc3DDqWNpZmlxdWUgZCdpbnRlcnZlbnRpb24sIGV0IHNhIGhhdXRldXIgaW5kaXF1ZSBsZSBub21icmUgZCdpbmRpdmlkdXMgY29ycmVzcG9uZGFudCDDoCBjZXR0ZSBkdXLDqWUuIA0KTCdheGUgaG9yaXpvbnRhbCBtb250cmUgbGVzIGRpZmbDqXJlbnRlcyBkdXLDqWVzIGQnaW50ZXJ2ZW50aW9uLCB0YW5kaXMgcXVlIGwnYXhlIHZlcnRpY2FsIHJlcHLDqXNlbnRlIGxlIG5vbWJyZSBkJ2luZGl2aWR1cyBwb3VyIGNoYXF1ZSBkdXLDqWUuIExlcyBiYXJyZXMgY29sb3LDqWVzIGVuICJvcmNoaWQ0IiBhZmZpY2hlbnQgdmlzdWVsbGVtZW50IGxhIHLDqXBhcnRpdGlvbiBkZXMgcsOpcG9uZGFudHMuDQpEZSBwbHVzLCBkZXMgw6l0aXF1ZXR0ZXMgbnVtw6lyaXF1ZXMgc29udCBham91dMOpZXMgYXUtZGVzc3VzIGRlIGNoYXF1ZSBiYXJyZSBwb3VyIGluZGlxdWVyIGxlIG5vbWJyZSBleGFjdCBkJ2luZGl2aWR1cyBwb3VyIGNoYXF1ZSBkdXLDqWUuIExlcyDDqXRpcXVldHRlcyBlbiBub2lyIHNvbnQgcG9zaXRpb25uw6llcyBhdS1kZXNzdXMgZGVzIGJhcnJlcyBhdmVjIHVuZSB2YWxldXIgaW5mw6lyaWV1cmUgw6AgbGEgbW95ZW5uZSBkdSBub21icmUgZCdpbmRpdmlkdXMsIHRhbmRpcyBxdWUgbGVzIMOpdGlxdWV0dGVzIGVuIHJvdWdlIHNvbnQgYXUtZGVzc3VzIGRlcyBiYXJyZXMgYXZlYyB1bmUgdmFsZXVyIHN1cMOpcmlldXJlIMOgIGxhIG1veWVubmUuDQpDZXR0ZSByZXByw6lzZW50YXRpb24gbm91cyBkb25uZSB1biBhcGVyw6d1IHZpc3VlbCBkZSBsYSBkaXN0cmlidXRpb24gZGVzIHLDqXBvbmRhbnRzIGVuIGZvbmN0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmVudGlvbiwgbWV0dGFudCBlbiDDqXZpZGVuY2UgbGVzIGR1csOpZXMgcXVpIHNlIGTDqW1hcnF1ZW50IHBhciByYXBwb3J0IMOgIGxhIG1veWVubmUgZW4gdGVybWVzIGRlIGZyw6lxdWVuY2UgZGUgcsOpcG9uZGFudHMuDQoNCg0KDQpgYGB7cn0NCnNtcC5jIDwtIHNtcC5jICU+JQ0KICBtdXRhdGUoc2N6LmNvbnMgPSByZWNvZGUoc2N6LmNvbnMsIGAwYCA9ICJBYnNlbmNlIiwgYDFgID0gIlByZXNlbmNlIikpDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jW3NtcC5jJHNjei5jb25zICVpbiUgYygiQWJzZW5jZSIsICJQcmVzZW5jZSIpLF0gJT4lDQogIGdncGxvdCgpICsgYWVzKHggPSBkdXIuaW50ZXJ2LCB5ID0gc2N6LmNvbnMsIGZpbGwgPSBzY3ouY29ucykgKw0KICBnZW9tX2RlbnNpdHlfcmlkZ2VzKGFlcyh5ID0gLi5kZW5zaXR5Li4pLCBhbHBoYSA9IDAuOCwgc2NhbGUgPSA0LCBiYW5kd2lkdGggPSA2LjMzKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkFic2VuY2UiID0gIiM0Mjg3ZjUiLCAiUHJlc2VuY2UiID0gIiNmNTQyNDIiKSwNCiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJTY2hpem9waHLDqW5pZSIsDQogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkFic2VuY2UiID0gIkFic2VuY2UgZGUgc2NoaXpvcGhyw6luaWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVzZW5jZSIgPSAiUHLDqXNlbmNlIGRlIHNjaGl6b3BocsOpbmllIikpICsNCiAgbGFicyh4ID0gIkR1csOpZSBkJ2ludGVydmlldyBlbiBtaW51dGVzIiwgeSA9ICJUcm91YmxlIiwgDQogICAgICAgdGl0bGUgPSAiRGlzdHJpYnV0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmlldyBkZXMgZMOpdGVudXMgXG4gc2Vsb24gbGEgc2NoaXpvcGhyw6luaWUoR3JhcGggNSkiKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI2YyZjJmMiIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMzMzMzMzMiLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzMzMzMzMyIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMzMzMzMzMiLCBzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjMzMzMzMzIiksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjMzMzMzMzIiwgc2l6ZSA9IDExLCBmYWNlID0gImJvbGQiKSkNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gOioqDQpDZSBncmFwaGlxdWUgcmVwcsOpc2VudGUgbGEgZGlzdHJpYnV0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmlldyBkZXMgZMOpdGVudXMgZW4gZm9uY3Rpb24gZGUgbGEgcHLDqXNlbmNlIG91IGRlIGwnYWJzZW5jZSBkZSBzY2hpem9waHLDqW5pZS4gTCdheGUgaG9yaXpvbnRhbCAoeCkgaW5kaXF1ZSBsYSBkdXLDqWUgZGUgbCdpbnRlcnZpZXcgZW4gbWludXRlcywgdGFuZGlzIHF1ZSBsJ2F4ZSB2ZXJ0aWNhbCAoeSkgcHLDqXNlbnRlIGxlcyBjYXTDqWdvcmllcyAiQWJzZW5jZSIgZXQgIlByw6lzZW5jZSIgZGUgc2NoaXpvcGhyw6luaWUuDQpMZXMgem9uZXMgY29sb3LDqWVzIGR1IGdyYXBoaXF1ZSBtb250cmVudCBsYSBkZW5zaXTDqSBkZSBkaXN0cmlidXRpb24gZGVzIGR1csOpZXMgZCdpbnRlcnZpZXcgcG91ciBsZXMgZGV1eCBjYXTDqWdvcmllcyBkZSBzY2hpem9waHLDqW5pZS5MYSB6b25lIGJsZXVlICgiQWJzZW5jZSBkZSBzY2hpem9waHLDqW5pZSIpIGVzdCBwbHVzIMOpdGVuZHVlIG91IHBsdXMgw6lsZXbDqWUgZGFucyBjZXJ0YWluZXMgcGFydGllcyBkdSBncmFwaGlxdWUgcGFyIHJhcHBvcnQgw6AgbGEgem9uZSByb3VnZSAoIlByw6lzZW5jZSBkZSBzY2hpem9waHLDqW5pZSIpLCBjZWxhIHN1Z2fDqHJlIHF1ZSBwb3VyIGxlcyBkdXLDqWVzIGQnaW50ZXJ2aWV3IGNvcnJlc3BvbmRhbnRlcywgaWwgeSBhIHVuZSBwbHVzIGdyYW5kZSBjb25jZW50cmF0aW9uIGRlIGNhcyBzYW5zIHNjaGl6b3BocsOpbmllIHF1ZSBkZSBjYXMgYXZlYyBzY2hpem9waHLDqW5pZS4NCkNlIGdyYXBoaXF1ZSBwZXJtZXQgZGUgY29tcGFyZXIgdmlzdWVsbGVtZW50IGxhIGRpc3RyaWJ1dGlvbiBkZXMgZHVyw6llcyBkJ2ludGVydmlldyBlbnRyZSBsZXMgZMOpdGVudXMgcHLDqXNlbnRhbnQgb3Ugbm9uIGRlcyBzaWduZXMgZGUgc2NoaXpvcGhyw6luaWUsIG9mZnJhbnQgYWluc2kgdW4gYXBlcsOndSBkZXMgZGlmZsOpcmVuY2VzIHBvdGVudGllbGxlcyBkYW5zIGNldHRlIG1lc3VyZSBlbiBmb25jdGlvbiBkZSBsYSBwcsOpc2VuY2UgZGUgY2UgdHJvdWJsZS4NCg0KDQoNCmBgYHtyfQ0KcGFyKG1mcm93PWMoMSwgMikpDQpzbXAuY1tzbXAuYyRlZCAlaW4lIGMoIjEiLCAiMiIsIjMiKSAsXSAgJT4lIA0KICAgIGdncGxvdCgpICsgYWVzKHggPSBuLmVuZmFudCwgDQogICAgICAgICAgICAgICAgICAgeSA9IG4uZnJhdHJpZSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSBuLmZyYXRyaWUsIA0KICAgICAgICAgICAgICAgICAgIGZpbGwgPSBuLmZyYXRyaWUpICsNCiAgICBnZW9tX3Zpb2xpbihhbHBoYSA9IDAuOCkgKw0KICAgIGxhYnMoeCA9ICJub21icmUgZCBlbmZhbnRzIHBhciBkZXRlbnVzIiwgeSA9ICJUYWlsbGUgZGUgZnJhdHJpZVxucGFyIGRldGVudXMiLA0KICAgICAgIHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBkZSBsYSBSZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIGV0XG4gbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzKEdyYXBoIDYpIikgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF90ZXh0KGFuZ2xlID0gMCkpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gVVRQYWxldHRlWzE6M10pICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IFVUUGFsZXR0ZVsxOjNdKQ0KDQpzbXAuY1tzbXAuYyRlZCAlaW4lIGMoIjEiLCAiMiIsIjMiKSAsXSAgJT4lIA0KICAgIGdncGxvdCgpICsgYWVzKHggPSBuLmVuZmFudCwgDQogICAgICAgICAgICAgICAgICAgeSA9IG4uZnJhdHJpZSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSBmYWN0b3Iobi5mcmF0cmllKSwgDQogICAgICAgICAgICAgICAgICAgZmlsbCA9IGZhY3RvcihuLmZyYXRyaWUpKSArDQogICAgZ2VvbV92aW9saW4oYWxwaGEgPSAwLjgpICsNCiAgICBsYWJzKHggPSAiTm9tYnJlIGQnZW5mYW50cyBwYXIgZMOpdGVudXMiLCANCiAgICAgICAgIHkgPSAiVGFpbGxlIGRlIGZyYXRyaWUgcGFyIGTDqXRlbnVzIiwNCiAgICAgICAgIHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBkZSBsYSBSZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIGV0XG4gbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzKEdyYXBoIDYpIikgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpICsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIxIiA9ICIjRkY5OTk5IiwgIjIiID0gIiM2NkNDQ0MiLCAiMyIgPSAiI0ZGQ0M5OSIpLCANCiAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlRhaWxsZSBkZSBmcmF0cmllIiwNCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICJQZXRpdGUiLCAiMiIgPSAiTW95ZW5uZSIsICIzIiA9ICJHcmFuZGUiKSkgKw0KICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIxIiA9ICIjRkY5OTk5IiwgIjIiID0gIiM2NkNDQ0MiLCAiMyIgPSAiI0ZGQ0M5OSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJUYWlsbGUgZGUgZnJhdHJpZSIsDQogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIlBldGl0ZSIsICIyIiA9ICJNb3llbm5lIiwgIjMiID0gIkdyYW5kZSIpKQ0KYGBgDQoNCg0KKipJbnRlcnByZXRhdGlvbiA6KioNCkNlIGdyYXBoaXF1ZSBkZSB2aW9sb24gcmVwcsOpc2VudGFudCBsYSByZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIHBhciBkw6l0ZW51IGV0IGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllIHBhciBkw6l0ZW51LCBwb3VyIGxlcyBkw6l0ZW51cyBkb250IGxlIG5pdmVhdSBkJ8Opdml0ZW1lbnQgZGUgZGFuZ2VyIGVzdCBjbGFzc2lmacOpIGVuIHRyb2lzIGNhdMOpZ29yaWVzICgiMSIsICIyIiwgIjMiKS4NCkNoYXF1ZSB2aW9sb24gcmVwcsOpc2VudGUgbGEgZGlzdHJpYnV0aW9uIGRlcyBvYnNlcnZhdGlvbnMgcG91ciBjaGFxdWUgY29tYmluYWlzb24gZHUgbm9tYnJlIGQnZW5mYW50cyBldCBkZSBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZS4gTGEgbGFyZ2V1ciBkdSB2aW9sb24gaW5kaXF1ZSBsYSBkZW5zaXTDqSBkZXMgb2JzZXJ2YXRpb25zIMOgIGRpZmbDqXJlbnRzIG5pdmVhdXggZGUgY2VzIGRldXggdmFyaWFibGVzLg0KTGVzIGF4ZXMgeCBldCB5IHJlcHLDqXNlbnRlbnQgcmVzcGVjdGl2ZW1lbnQgbGUgbm9tYnJlIGQnZW5mYW50cyBwYXIgZMOpdGVudSBldCBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBwYXIgZMOpdGVudS4gTGVzIGNvdWxldXJzIGRlcyB2aW9sb25zIGV0IGRlcyBwb2ludHMgc29udCBhc3NvY2nDqWVzIGF1eCBkaWZmw6lyZW50ZXMgY2F0w6lnb3JpZXMgZGUgdGFpbGxlIGRlIGZyYXRyaWUgKCIxIiBwb3VyIHBldGl0ZSwgIjIiIHBvdXIgbW95ZW5uZSBldCAiMyIgcG91ciBncmFuZGUpLCBwZXJtZXR0YW50IHVuZSBjb21wYXJhaXNvbiB2aXN1ZWxsZSBlbnRyZSBjZXMgZ3JvdXBlcy4NCkVuIG9ic2VydmFudCBjZSBncmFwaGlxdWUsIG9uIHBldXQgcmVtYXJxdWUgcXVlIGxlcyBkZXRlbnVzIHF1aSBvbnQgdW5lIHRhaWxsZSBwbHVzICBncmFuZGUgb250IHVuIHBldSBwbHVzIGRlIGRpeCBlbmZhbnRzLCBvbnQgb2JzZXJ2ZSB1bmUgYmFzZSBtb250cmFudCBxdWUgbGEgbWFqb3JpdMOpIG9udCB1bmUgcGV0aXRlIHRhaWxsZSBkZSBmcmF0cmllIGV0IG1vaW5zIGQnZW5mYW50cy4gDQoNCg0KDQpgYGB7cn0NCnBhcihtZnJvdz1jKDEsIDIpKQ0Kc3VpY2lkZS5zX3BpZSA8LSB0YWJsZShzbXAkc3VpY2lkZS5zKQ0KY29sb3JzIDwtIGJyZXdlci5wYWwobGVuZ3RoKHN1aWNpZGUuc19waWUpLCAiU2V0MyIpDQoNCnBpZShzdWljaWRlLnNfcGllLCBjb2wgPSBjb2xvcnMsDQogICAgbWFpbiA9ICJSw6lwYXJ0aXRpb24gZGVzIGNhdMOpZ29yaWVzXG4gZGUgc2NvcmUgZGUgc3VpY2lkZSIsDQogICAgbGFiZWxzID0gcGFzdGUobmFtZXMoc3VpY2lkZS5zX3BpZSksICI6ICIsIHN1aWNpZGUuc19waWUpLA0KICAgIGNleCA9IDAuOCkNCg0KbGVnZW5kKCJ0b3ByaWdodCIsIGluc2V0ID0gYygtMC41LCAwKSwgdGl0bGUgPSAiUsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllc1xuIGRlIHNjb3JlIGRlIHN1aWNpZGUiLA0KICAgICAgIGNleCA9IDAuOCwgZmlsbCA9IGNvbG9ycywgbGVnZW5kID0gbmFtZXMoc3VpY2lkZS5zX3BpZSkpDQpkZXAuY29uc19waWUgPC0gdGFibGUoc21wJGRlcC5jb25zKQ0KY29sb3JzIDwtIGJyZXdlci5wYWwobGVuZ3RoKGRlcC5jb25zX3BpZSksICJTZXQzIikNCg0KcGllKGRlcC5jb25zX3BpZSwgY29sID0gY29sb3JzLA0KICAgIG1haW4gPSAiUsOpcGFydGl0aW9uIGRlcyBcbmNhdMOpZ29yaWVzIGTDqXByZXNzaXZlIiwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhkZXAuY29uc19waWUpLCAiOiAiLCBkZXAuY29uc19waWUpLA0KICAgIGNleCA9IDAuOCkNCg0KbGVnZW5kKCJ0b3ByaWdodCIsIGluc2V0ID0gYygtMC41LCAwKSwgdGl0bGUgPSAiUsOpcGFydGl0aW9uIGRlcyBcbmNhdMOpZ29yaWVzIGTDqXByZXNzaXZlIiwNCiAgICAgICBjZXggPSAwLjgsIGZpbGwgPSBjb2xvcnMsIGxlZ2VuZCA9IG5hbWVzKGRlcC5jb25zX3BpZSkpDQoNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gKEdyYXBoNyk6KioNCk5vdXMgYXZvbnMgZGV1eCBncmFwaGlxdWVzIGNpcmN1bGFpcmVzIGFmZmljaGFudCBsYSByw6lwYXJ0aXRpb24gZGVzIGNhdMOpZ29yaWVzIHBvdXIgbGVzIHNjb3JlcyBkZSBzdWljaWRlIGV0IGxlcyBjYXTDqWdvcmllcyBkw6lwcmVzc2l2ZXMuIENoYXF1ZSBncmFwaGlxdWUgcHLDqXNlbnRlIHVuZSB2dWUgdmlzdWVsbGUgZGUgbGEgcsOpcGFydGl0aW9uIGRlcyBkaWZmw6lyZW50ZXMgY2F0w6lnb3JpZXMgZW4gcG91cmNlbnRhZ2UgcGFyIHJhcHBvcnQgw6AgbCdlbnNlbWJsZSBkZXMgb2JzZXJ2YXRpb25zLg0KTGUgcHJlbWllciBncmFwaGlxdWUgcHLDqXNlbnRlIGxhIHLDqXBhcnRpdGlvbiBkZXMgY2F0w6lnb3JpZXMgZGUgc2NvcmUgZGUgc3VpY2lkZSAobm90w6kgZGUgMCDDoCA1IGF2ZWMgdW4gc2NvcmUgw6lsZXbDqSBkZSBzdWljaWRlLCB0YW5kaXMgcXVlIGxlIHNlY29uZCBtb250cmUgbGEgcsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllcyBkw6lwcmVzc2l2ZXMgKDAgcG91ciBhYnNlbmNlIGRlIGRlcHJlc3Npb24gZXQgMSBwb3VyIHNhIHByZXNlbmNlKS4gDQpMZXMgbMOpZ2VuZGVzIGFkamFjZW50ZXMgYXV4IGdyYXBoaXF1ZXMgZm91cm5pc3NlbnQgZGVzIGV4cGxpY2F0aW9ucyBzdXIgY2hhcXVlIGNvdWxldXIgdXRpbGlzw6llIGV0IGxlcyBjYXTDqWdvcmllcyBxdSdlbGxlcyByZXByw6lzZW50ZW50LiBMZXMgdGl0cmVzIGRlcyBncmFwaGlxdWVzIGluZGlxdWVudCBjbGFpcmVtZW50IGxlIHR5cGUgZGUgZG9ubsOpZXMgcHLDqXNlbnTDqSBkYW5zIGNoYXF1ZSBncmFwaGlxdWUgY2lyY3VsYWlyZS4NCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc21wLmMsIGFlcyh4ID0gc21wLmMkcnMsIHkgPXNtcC5jJGFnZSkpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAibGlnaHRibHVlIiwgY29sb3IgPSAiYmx1ZSIpICsNCiAgbGFicyh4ID0gInJlY2hlcmNoZSBkZSBzZW5zYXRpb24iLCB5ID0gImFnZSIsIHRpdGxlID0gIkJveHBsb3QgZGUgbGEgVmFyaWFibGUgcmVjaGVyY2hlIGRlIHNlbnNhdGlvbiAgZW5cbiBmb25jdGlvbiBkZSBsYSBWYXJpYWJsZSBhZ2UgIChHcmFwaCA4KSIpDQpgYGANCg0KKipJbnRlcnByZXRhdGlvbioqDQpDZSBncmFwaGlxdWUgbWV0IGVuIMOpdmlkZW5jZSBsYSByZWxhdGlvbiBlbnRyZSBsYSByZWNoZXJjaGUgZGUgc2Vuc2F0aW9uIGV0IGwnw6JnZSBkZXMgZMOpdGVudXMuDQpPbiBvYnNlcnZlIGljaSBxdWUsIGdsb2JhbGVtZW50LCBsYSBkaXN0cmlidXRpb24gZW4gw6JnZSBlc3QgbMOpZ8OocmVtZW50IHN1cMOpcmlldXJlIHF1YW5kIG9uIGEgdW4gZmFpYmxlIG5pdmVhdSBkZSBzZW5zYXRpb24sIHBsdXTDtHQgcXVlIHF1YW5kIG9uIGEgdW4gbml2ZWF1IGRlIHNlbnNhdGlvbiDDqWxldsOpLg0KQ2UgcXVpIG1vbnRyZSBxdWUgbGVzIGTDqXRlbnVzIHBsdXMgamV1bmVzIG9udCB0ZW5kYW5jZSDDoCByZWNoZXJjaGVyIHBsdXMgZGUgc2Vuc2F0aW9ucyBxdWUgbGVzIGTDqXRlbnVzIHBsdXMgw6Jnw6lzLg0KQ2V0dGUgdmlzdWFsaXNhdGlvbiBwZXJtZXQgZGUgY29tcHJlbmRyZSBjb21tZW50IGwnw6JnZSBkZXMgZMOpdGVudXMgcGV1dCBpbmZsdWVuY2VyIGxldXIgY29tcG9ydGVtZW50IGVuIG1hdGnDqHJlIGRlIHJlY2hlcmNoZSBkZSBzZW5zYXRpb24uIENldHRlIG9ic2VydmF0aW9uIHBvdXJyYWl0IMOqdHJlIHV0aWxlIHBvdXIgY29tcHJlbmRyZSBjb21tZW50IGxlcyBmYWN0ZXVycyBpbmRpdmlkdWVscyBwZXV2ZW50IGluZmx1ZW5jZXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc21wLmMsIGFlcyh4ID0gc21wLmMkYWxjLmNvbnMsIHkgPXNtcC5jJGR1ci5pbnRlcnYpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gImxpZ2h0cGluayIsIGNvbG9yID0gInBpbmsiKSArDQogIGxhYnMoeCA9ICJBZGRpY3Rpb24gw6AgbCdhbGNvb2wiLCB5ID0gIkR1csOpw6kgZCdlbnRyZXZ1ZSBkZXMgZMOpdGVudXMgIiwgdGl0bGUgPSAiQm94cGxvdCBkdSBuaXZlYXUgZGUgZGVwZW5kYW5jZSDDoCBsJ2FsY29vbCBlbiBcbmZvbmN0aW9uIGRlIGxhIGR1csOpZSBkJ2VudHJldGllbiBhdmVjIGxlcyBkw6l0ZW51cyhHcmFwaCA5KSIpDQpgYGANCg0KKipJbnRlcnByw6l0YXRpb24gOioqIENlIGdyYXBoaXF1ZSBtZXQgZW4gw6l2aWRlbmNlIGxhIGR1csOpZSBkJ2VudHJldGllbiBhdmVjIGxlcyBkw6l0ZW51cyBldCBsYSBkZXBlbmRhbmNlIMOgIGwnYWxjb29sIGRlcyBkw6l0ZW51cy4gSWwgbW9udHJlIHF1ZSBsZXMgZGV0ZW51cyBkZXBlbmRhbnQgZGUgbCdhbGNvb2wgb250IHBhc3PDqSBsZWdlcmVtZW50IHBsdXMgZGUgdGVtcHMgcXVlIGxlcyBhdXRyZXMuDQogIA0KDQoNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNtcC5jLCBhZXMoeCA9IHNtcC5jJHNlcGFyYXRpb24sIHkgPXNtcC5jJG4uZnJhdHJpZSkpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAibGlnaHRncmVlbiIsIGNvbG9yID0gImdyZWVuIikgKw0KICBsYWJzKHggPSAiU2VwYXJhdGlvbiBkZSBsYSBmYW1pbGxlIMOgIGwnZW5mYW5jZSIsIHkgPSAiVGFpbGxlIGRlIGxhIGZyYXRyaWUiLCB0aXRsZSA9ICJCb3hwbG90IGRlIGxhIHNlcGFyYXRpb24gIFxuZW4gZm9uY3Rpb24gZGUgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgKEdyYXBoMTApIikNCmBgYA0KDQoqKkludGVycHLDqXRhdGlvbiA6KiogQ2UgZ3JhcGhpcXVlIG1ldCBlbiDDqXZpZGVuY2UgbGEgcmVsYXRpb24gZW50cmUgbGEgc8OpcGFyYXRpb24gZGUgbGEgZmFtaWxsZSDDoCBsJ2VuZmFuY2UgZXQgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzLiBJbCBtb250cmUgcXUnaWwgeSBhIHVuZSB2YXJpYXRpb24gZGFucyBsYSBzw6lwYXJhdGlvbiBkZSBsYSBmYW1pbGxlIGVuIGZvbmN0aW9uIGRlIGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllLk9uIHJlbWFycXVlIHF1ZSBsZXMgZMOpdGVudXMgc8OpcGFyw6lzIGRlIGxldXJzIGZhbWlsbGUgb24gZW4gbW95ZW5uZSBsZWdlcmVtZW50IHBsdXMgZGUgZnJlcmVzIGV0IHNvZXVycyBxdWUgbGVzIGRldHVudXMgcXVpIG4nZXRhaWVudCBwYXMgc8OpcGFyw6lzIGRlIGxldXJzIGZhbWlsbGUuDQogIENldHRlIHZpc3VhbGlzYXRpb24gcGVybWV0IGQnaWRlbnRpZmllciB1biBjZSBsaWVuIGVudHJlIGxhIHPDqXBhcmF0aW9uIGRlIGxhIGZhbWlsbGUgw6AgbCdlbmZhbmNlIGV0IGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllIGRlcyBkw6l0ZW51cy4gQ2V0dGUgb2JzZXJ2YXRpb24gaW1wbGlxdWUgbm91cyBpbmNpdGUgw6AgY29tcHJlbmRyZSBjb21tZW50IGNlcyBmYWN0ZXVycyBmYW1pbGlhdXggcG91cnJhaWVudCBpbmZsdWVuY2VyIGxhIHNhbnTDqSBtZW50YWxlIGVuIG1pbGlldSBjYXJjw6lyYWwuDQoNCiMgVEVTVFMgU1RBVElTVElRVUVTIA0KDQojIyBDT01QQVJBSVNPTiBERSBERVVYIFBPVVJDRU5UQUdFUyA6IFRlc3QgZHUgS2hpMg0KTm91cyBhbGxvbnMgdGVzdGVyIHNpIGxhIHByw6l2YWxlbmNlIGRlIGxhIGTDqXByZXNzaW9uIGVzdCBwbHVzIMOpbGV2w6kgY2hleiBsZXMgZGV0ZW51cyBxdWkgc29udCBhZGRpY3RzIMOgIGwnYWxjb29sIG91IHBhcy4NCg0KYGBge3J9DQp0YjwtdGFibGUoYWxjLmNvbnMsIGRlcC5jb25zLCBkZXBhcnNlLmxldmVsPTIpDQprYWJsZShwcm9wLnRhYmxlKHRiLDEpKjEwMCkNCmBgYA0KDQpPbiByZW1hcnF1ZSBxdWUgcHLDqHMgZGUgMzUlIGRlIGRldGVudXMgZMOpcHJlc3NpZnMgbmUgc29udCBwYXMgYWRkaWN0cyDDoCBsJ2FsY29vbCBhbG9ycyBxdWUgY2UgcG91cmNlbnRhZ2UgZXN0IHF1YXNpbWVudCBsZSBkb3VibGUsIHByw6hzIGRlIDU2JSBkZXMgZGV0ZW51cyBkw6lwcmVzc2lmcyBzb250IGFkZGljdGUgw6AgbCdhbGNvb2wsIGNlIHF1aSBtb250cmUgcXVlIGxlcyBkw6l0ZW51cyBkw6lwcmVzc2lmcyBwYXNzZW50IGxldXIgdGVtcHMgw6Agc2Ugc2FvdWxlci4NCk1haXMgdGVzdG9ucyBjZWxhIDoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpjaGlzcS50ZXN0KHNtcC5jJGRlcC5jb25zLHNtcC5jJGFsYy5jb25zLCBjb3JyZWN0ID0gRkFMU0UpDQpgYGANCg0KTGEgcC12YWx1ZSDDqWdhbGUgw6AgMy44MzVlLTA2IGNlIHF1aSBlc3QgYmllbiBpbmbDqXJpZXVyIMOgIDAuMDUsIG9uIHBldXQgYWZmaXJtZXIgYXZlYyBjZXJ0aXR1ZGUgcXVlIGxlIGhhc2FyZCBsdWkgc2V1bCBuZSBwZXV0IHBhcyBleHBsaXF1ZXIgY2V0dGUgZGlmZsOpcmVuY2UgZGUgcHLDqXZhbGVuY2UgZGUgZMOpcHJlc3Npb24uDQoNCiMjIENPTVBBUkFJU09OIERFIERFVVggTU9ZRU5ORVMgOiB0ZXN0IGRlIHN0dWRlbnQNCkNvbmRpdGlvbnMgZGUgdmFsaWRpdMOpIA0KKiouKiogT24gYSBhdSBtb2lucyAzMCBvYnNlcnZhdGlvbnMgcGFyIGdyb3VwZSDDoCBjb21wYXJlciwgDQoNCmBgYHtyfQ0KaGlzdChzbXAkZHVyLmludGVydikNCmBgYA0KDQpPbiByZW1hcnF1ZSBxdWUgbGEgdmFyaWFibGUgImR1csOpZSBkJ2VudHJldGllbiIgc3VpcyB1bmUgZGlzdHJpYnV0aW9uIGFwcHJveGltYXRpdmVtZW50IG5vcm1hbGUgY2FyIGFwcsOocyB2ZXJpZmljYXRpb24gZGUgc29uIGhpc3RvZ3JhbW1lIG9uIHJlbWFycXVlIHVuZSBhbGx1cmUgZ2F1c3NpZW5uZSBhdmVjIHVuZSBjb3VyYmUgZW4gY2xvY2hlLiBOb3VzIHBvdXZvbnMgw6lnYWxlbWVudCBsZSBjb25zdGF0ZXIgZ3JhcGhpcXVlbWVudCBhdmVjIHVuIFEtUSBwbG90Lg0KDQoqLiogT24gdmVyaWZpZSBzaSBsYSB2YXJpYW5jZSBkZSBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gcGFyIGNoYXF1ZSBncm91cGUgZGUgcHJlc2VuY2Ugb3Ugbm9uIGRlIGTDqXByZXNzaW9uIGF1cHLDqHMgZGVzIGTDqXRlbnVzLg0KDQpgYGB7cn0NCmJ5KHNtcCRkdXIuaW50ZXJ2LCBzbXAkZGVwLmNvbnMsIHNkLCBuYS5ybT0gVFJVRSkNCmBgYA0KDQpMJ8OpY2FydCB0eXBlIGVudHJlIGRlIGxhIGR1csOpZSBkJ2VudHJldGllbiBkZXMgZMOpdGVudXMgZGVwcmVzc2lmcyBlc3QgZGUgMTkuNzQgZXQgY2VsdWkgZGVzIGTDqXRlbnVzIG5vbiBkw6lwcmVzc2lmIGVzdCBkZSAxOS4wNiBjZSBxdWkgZXN0IGFwcHJveGltYXRpdmVtZW50IMOpZ2F1eCwgbGEgc2Vjb25kZSBjb25kaXRpb24gYXVzc2kgZXN0IHbDqXJpZmnDqWUgLCBvbiBwcm9jw6hkZSBhbG9ycyBhdSB0ZXN0IGRlIHN0dWRlbnQuDQoNCmBgYHtyfQ0KdC50ZXN0KHNtcCRkdXIuaW50ZXJ2fnNtcCRkZXAuY29ucywgdmFyLmVxdWFsPVRSVUUpDQpgYGANCg0KQ29tbWUgcsOpc3VsdGF0LCBub3VzIGF2b25zIHRvdXQgZCdhYm9yZCBsZSBwIMOpZ2FsIMOgIDEuOWUtMDcsIG9uIGNvbnN0YXRlIHF1ZSBsZSBwIGVzdCBsYXJnZW1lbnQgaW5mw6lyaWV1ciDDoCAwLDA1LCBvbiBwZXV0IGRvbmMgZGlyZSBxdSdpbCBleGlzdGUgdW5lIGRpZmbDqXJlbmNlIHN0YXRpc3RpcXVlbWVudCBzaWduaWZpY2F0aXZlIGRlIGR1csOpZSBkJ2VudHJldGllbiBlbnRyZSBsZXMgZMOpdGVudXMgcXVpIHNvbnQgZMOpcHJlc3NpZnMgZXQgbGVzIGTDqXRlbnVzIHF1aSBuZSBsZSBzb250IHBhcy4NCg0KIyMgVEVTVCBERSBOVUxMSVTDiSBERSBDT1JSw4lMQVRJT05TIDogQXBwcm9jaGUgZGUgUGVhcnNvbicNCiouKiBMYSBkaXN0cmlidXRpb24gZGUgbGEgdmFyaWFibGUgZHVyw6llIGRlIGwnZW5xdcOqdGUgc3VpcyB1bmUgbG9pIG5vcm1hbGUuDQpOb3VzIGFsbG9ucyBkb25jIHRlc3RlciDDoCAwIGNldHRlIGNvcnLDqWxhdGlvbiBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnF1ZXRlIGV0IGxlIHNjb3JlIGRlIGNvbXBvcnRlbWVudCBzdWljaWRhaXJlLg0KDQpgYGB7cn0NCmNvci50ZXN0KHNtcCRkdXIuaW50ZXJ2LCBzbXAkc3VpY2lkZS5zKQ0KYGBgDQoNCk9uIGEgZCdhYm9yZCBsZSBwIHF1aSBpY2kgZXN0IGV4dHLDqm1lbWVudCBmYWlibGUsIGluZsOpcmlldXIgw6AgMTAtNy4gTGEgY29ycsOpbGF0aW9uIGVzdCBkb25jIHRyw6hzIHNpZ25pZmljYXRpdmVtZW50IG5vbiBudWxsZSwgbGEgY29ycsOpbGF0aW9uIGVzdCAwLDIwMi4gSWwgeSBhIGJpZW4gdW5lIGNvcnLDqWxhdGlvbiBwb3NpdGl2ZSBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gIGV0IGxlIHNjb3JlIGRlIHJpcXVlIGRlIHN1aWNpZGUuIE9uIHNhaXQgcXVlIGxhIGNvcnLDqWxhdGlvbiBkZSAwLDIyIHF1ZSBsJ29uIGEgb2JzZXJ2w6llIGVzdCBjZWxsZSBxdWkgYSDDqXTDqSBvYnNlcnbDqWUgZGFucyBsJ8OpY2hhbnRpbGxvbiBkZXMgNzk5IGTDqXRlbnVzLg0KQWxvcnMgInF1ZWxsZSBlc3QgbGEgdmFsZXVyIHBvc3NpYmxlIGRlIGxhIGNvcnLDqWxhdGlvbiBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnF1w6p0ZSBvdSBkZSBsJ2VudHJldGllbiAgZXQgc2NvcmUgZGUgcmlzcXVlIHN1aWNpZGFpcmVzLCBub24gcGFzIGRhbnMgY2V0IMOpY2hhbnRpbGxvbiBtYWlzIGRhbnMgbCdlbnNlbWJsZSBkZSBsYSBwb3B1bGF0aW9uIHRvdGFsZSBkZXMgZMOpdGVudXMgPyIgRWggYmllbiwgaWwgeSA5NSBjaGFuY2VzIHN1ciAxMDAgcXVlIGNldHRlIGNvcnLDqWxhdGlvbiBzb2l0IGNvbXByaXNlIGVudHJlICAwLDEzMTE5MzUgJiAwLDI3MjMyOTUuDQoNCg0KDQojIEFOQUxZU0UgTVVMVElWQVJJw4lFIDogQU5BTFlTRSBERSBDT1JSRVNPTkRBTkNFIE1VTFRJUExFIChBQ00pDQoNCk5vdXMgYWxsb25zIGZhaXJlIGljaSB1bmUgQW5hbHlzZSBkZXMgQ29ycmVzcG9uZGFuY2VzIE11bHRpcGxlcyAoQUNNKSBjYXIgYydlc3QgdW5lIG3DqXRob2RlIG11bHRpZGltZW5zaW9ubmVsbGUgcHVpc3NhbnRlIGV0IGZsZXhpYmxlLCBpZMOpYWxlIHBvdXIgZXhwbG9yZXIgbGVzIHJlbGF0aW9ucyBjb21wbGV4ZXMgYXUgc2VpbiBkZSBkb25uw6llcyBjb21wcmVuYW50IGRlcyB2YXJpYWJsZXMgZGUgZGl2ZXJzIHR5cGVzLiBDZXR0ZSBhcHByb2NoZSBlc3QgcGFydGljdWxpw6hyZW1lbnQgYWRhcHTDqWUgw6Agbm90cmUgcHJvamV0IHBvdXIgIMOpdHVkaWVyIGxlcyBhc3NvY2lhdGlvbnMgZW50cmUgbm9zIHZhcmlhYmxlcywgcXVpIHNvbnQgaMOpdMOpcm9nw6huZXMsIHRlbGxlcyBxdWUgZGVzIHZhcmlhYmxlcyBjYXTDqWdvcmllbGxlcywgb3JkaW5hbGVzLCBiaW5haXJlIGV0IHF1YW50aXRhdGl2ZXMsIGV0IG5vcyBpbmRpdmlkdXMgc29udCBhbm9ueW1lcy4gR3LDomNlIMOgIHNhIGNhcGFjaXTDqSDDoCBnw6lyZXIgY2VzIGRpZmbDqXJlbnRlcyBuYXR1cmVzIGRlIGRvbm7DqWVzLCBsJ0FDTSBpY2kgdmEgbm91cyBvZmZyaXIgdW5lIHZpc2lvbiBob2xpc3RpcXVlIGV0IGFwcHJvZm9uZGllIGRlcyBpbnRlcnJlbGF0aW9ucyBlbnRyZSBsZXMgY2FyYWN0w6lyaXN0aXF1ZXMgbXVsdGlwbGVzIGRlIG5vdHJlIGJhc2UgZGUgZG9ubsOpZXMgLCBvdXZyYW50IGFpbnNpIGxhIHZvaWUgw6AgdW5lIGNvbXByw6loZW5zaW9uIHBsdXMgYXBwcm9mb25kaWUgZGUgc2VzIHN0cnVjdHVyZXMgc291cy1qYWNlbnRlcy4NCg0KDQoNCg0KYGBge3J9DQpzbXAuYyA8LSBzbXAuYyAlPiUNCiAgc2VsZWN0KHByb2YsIHJzLCBlZCwgZGVwLmNvbnMsIGFnby5jb25zLCBkciwgZWNvbGUsIHNlcGFyYXRpb24sIGp1Z2UuZW5mYW50LCBwbGFjZSwgYWxjLmNvbnMsIHN1YnN0LmNvbnMsYWJ1cywgZHVyZWUsIGRpc2NpcCwgYWdlLCBjaGFyLCBzY3ouY29ucywgZ3Jhdi5jb25zLCBwdHNkLmNvbnMsIHN1aWNpZGUucywgc3VpY2lkZS5ociwgc3VpY2lkZS5wYXN0LCBkdXIuaW50ZXJ2LCBuLmVuZmFudCwgbi5mcmF0cmllKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHByb2YpKSoxMDANCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCnByb3AudGFibGUodGFibGUoc21wLmMkc2VwYXJhdGlvbikpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRlY29sZSkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWljaWRlLmhyKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHNjei5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRlcC5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGFnby5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGdyYXYuY29ucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWJzdC5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGFsYy5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHB0c2QuY29ucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRqdWdlLmVuZmFudCkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRwbGFjZSkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRhYnVzKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRpc2NpcCkpKjEwMA0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHJzKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRyKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHN1aWNpZGUucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWljaWRlLnBhc3QpKSoxMDANCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCnByb3AudGFibGUodGFibGUoc21wLmMkZHVyZWUpKSoxMDANCmBgYA0KDQoNCmBgYHtyfQ0Kc21wLmMkYWdlPC1hcy5mYWN0b3IoYWdlKQ0Kc21wLmMkZHVyLmludGVydjwtYXMuZmFjdG9yKGR1ci5pbnRlcnYpDQpzbXAuYyRwcm9mIDwtIGFzLmZhY3Rvcihwcm9mKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jJGFnZSA8LSBpZmVsc2UoYWdlID4gMTggJiBhZ2UgPD0gMzgsICJdMTg7IDM4XSIsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlID4gMzggJiBhZ2UgPD0gNTgsICJdMzg7IDU4XSIsICJdNTggZXQgKyIpKQ0KDQpzbXAuYzwtIG11dGF0ZShzbXAuYywNCiAgICAgICAgICAgICAgICBhZ2VfMThfMzggPSBpZmVsc2UoYWdlID09ICJdMTg7IDM4XSIsIDEsIDApLA0KICAgICAgICAgICAgICAgIGFnZV8zOF81OCA9IGlmZWxzZShhZ2UgPT0gIl0zODsgNThdIiwgMSwgMCksDQogICAgICAgICAgICAgICAgYWdlXzU4X3BsdXMgPSBpZmVsc2UoYWdlID09ICJdNTggZXQgKyIsIDEsIDApKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jJGR1ci5pbnRlcnYgPC0gaWZlbHNlKGR1ci5pbnRlcnYgPD0gNDAsICJdMDsgNDBdIiwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShkdXIuaW50ZXJ2ID4gNDAgJiBkdXIuaW50ZXJ2IDw9IDgwLCAiXTQwOyA4MF0iLCAiXTgwOyAxMjBdIikpDQoNCnNtcC5jPC0gbXV0YXRlKHNtcC5jLA0KICAgICAgICAgICAgICAgIHRlbXBzXzBfNDAgPSBpZmVsc2UoZHVyLmludGVydiA9PSAiXTA7IDQwXSIsIDEsIDApLA0KICAgICAgICAgICAgICAgIHRlbXBzXzQwXzgwID0gaWZlbHNlKGR1ci5pbnRlcnYgPT0gIl00MDsgODBdIiwgMSwgMCksDQogICAgICAgICAgICAgICAgdGVtcHNfODBfMTIwID0gaWZlbHNlKGR1ci5pbnRlcnYgPT0gIl04MDsgMTIwXSIsIDEsIDApKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDb252ZXJ0aXIgbGVzIG1vZGFsaXTDqXMgZGUgJ3Byb2YnIGVuIHZhcmlhYmxlcyBiaW5haXJlcw0KZHVtbXlfcHJvZiA8LSBtb2RlbC5tYXRyaXgofiBwcm9mIC0gMSwgc21wLmMgPSBzbXAuYykNCiMgQWpvdXRlciBsZXMgdmFyaWFibGVzIGJpbmFpcmVzIGF1IGRhdGFmcmFtZSBkJ29yaWdpbmUNCnNtcC5jIDwtIGNiaW5kKHNtcC5jLCBkdW1teV9wcm9mKQ0KYGBgDQoNCg0KYGBge3J9DQpzbXAuYyA8LSBzbXAuYyAlPiUNCiAgcmVuYW1lKHByb2ZzYW5zLmVtcGxvaSA9IGBwcm9mc2FucyBlbXBsb2lgKQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0Kc21wLmMgPC0gc21wLmMgJT4lDQogIHNlbGVjdChhZ2VfMThfMzgsIGFnZV8zOF81OCwgYWdlXzU4X3BsdXMsIHRlbXBzXzBfNDAsIHRlbXBzXzQwXzgwLCB0ZW1wc184MF8xMjAsIGRlcC5jb25zLCBzY3ouY29ucywgcHRzZC5jb25zLCBzdWJzdC5jb25zLCBlY29sZSwgc3VpY2lkZS5ociwgYWxjLmNvbnMsIHN1aWNpZGUucGFzdCwgcHJvZiwgcHJvZmFncmljdWx0ZXVyLCBwcm9mYXJ0aXNhbiwgcHJvZmF1dHJlLCBwcm9mY2FkcmUsIHByb2ZlbXBsb3llLCBwcm9mb3V2cmllciwgcHJvZnByb2YuaW50ZXJtZWRpYWlyZSwgcHJvZnNhbnMuZW1wbG9pLCBycywgZWQsIGFnby5jb25zLCBkciwgc2VwYXJhdGlvbiwganVnZS5lbmZhbnQsIHBsYWNlLCBhYnVzLCBkdXJlZSwgZGlzY2lwLCBjaGFyLCBncmF2LmNvbnMsIHN1aWNpZGUucywgbi5lbmZhbnQsIG4uZnJhdHJpZSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXR0YWNoKHNtcC5jKQ0KYGBgDQoNCg0KYGBge3J9DQpzbXAuYyRwcm9mYWdyaWN1bHRldXI8LWFzLmZhY3Rvcihwcm9mYWdyaWN1bHRldXIpDQpzbXAuYyRwcm9mYXJ0aXNhbjwtYXMuZmFjdG9yKHByb2ZhcnRpc2FuKQ0Kc21wLmMkcHJvZmF1dHJlPC1hcy5mYWN0b3IocHJvZmF1dHJlKQ0Kc21wLmMkcHJvZmNhZHJlPC1hcy5mYWN0b3IocHJvZmNhZHJlKQ0Kc21wLmMkcHJvZmVtcGxveWU8LWFzLmZhY3Rvcihwcm9mZW1wbG95ZSkNCnNtcC5jJHByb2ZvdXZyaWVyPC1hcy5mYWN0b3IocHJvZm91dnJpZXIpDQpzbXAuYyRwcm9mcHJvZi5pbnRlcm1lZGlhaXJlPC1hcy5mYWN0b3IocHJvZnByb2YuaW50ZXJtZWRpYWlyZSkNCnNtcC5jJHByb2ZzYW5zLmVtcGxvaTwtYXMuZmFjdG9yKHByb2ZzYW5zLmVtcGxvaSkNCnNtcC5jJGFnZV8xOF8zODwtYXMuZmFjdG9yKGFnZV8xOF8zOCkNCnNtcC5jJGFnZV8zOF81ODwtYXMuZmFjdG9yKGFnZV8zOF81OCkNCnNtcC5jJGFnZV81OF9wbHVzPC1hcy5mYWN0b3IoYWdlXzU4X3BsdXMpDQpzbXAuYyR0ZW1wc18wXzQwPC1hcy5mYWN0b3IodGVtcHNfMF80MCkNCnNtcC5jJHRlbXBzXzQwXzgwPC1hcy5mYWN0b3IodGVtcHNfNDBfODApDQpzbXAuYyR0ZW1wc184MF8xMjA8LWFzLmZhY3Rvcih0ZW1wc184MF8xMjApDQpzbXAuYyRzY3ouY29uczwtYXMuZmFjdG9yKHNjei5jb25zKQ0KYGBgDQoNCmBgYHtyfQ0Kc21wLmM8LXNtcC5jDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KHNtcC5jKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpyZXN0PC1NQ0Eoc21wLmMsIHF1YWxpLnN1cD0xNjozNixxdWFudGkuc3VwPTM3OjM4KQ0KYGBgDQoNCg0KIyBDSE9JWCBERVMgRElNRU5TSU9OUw0KTm91cyBhbGxvbnMgaWNpIGZhaXJlIHVuIGFyYml0cmFnZSBjb25jZXJuYW50IGxlIGNob2l4IGRlcyBkaW1lbnNpb25zLiBJbCBlc3QgZW4gZWZmZXQgZXNzZW50aWVsIGRlIHJlY291cmlyIMOgIHVuIGFyYml0cmFnZSBjb25jZXJuYW50IGxlcyBkaW1lbnNpb25zIGFmaW4gZOKAmWF2b2lyIG1hdGnDqHJlIMOgIHRlbnRlciBk4oCZZXhwbGlxdWVyIGF1IG1pZXV4IGTigJlleHBsaXF1ZXIgbOKAmWluZm9ybWF0aW9uLg0KUG91ciBjZSBmYWlyZSBub3VzIGFsbG9ucyByZXNwZWN0ZXIgbGEgKipsb2kgZGUgY291ZGUqKiwgcXVpIGNvbnNpc3RlIMOgIHJlcMOpcmVyIGwnZW5kcm9pdCDDoCBwYXJ0aXIgZHVxdWVsIGxlIHBvdXJjZW50YWdlIGQnaW5lcnRpZSBkaW1pbnVlIGJlYXVjb3VwIHBsdXMgbGVudGVtZW50IGxvcnNxdWUgbCdvbiBwYXJjb3VydCBsZSBkaWFncmFtbWUgZGVzIMOpYm91bGlzIGRlIGdhdWNoZSDDoCBkcm9pdGUgZm9ybWFudCB1biBjb3VkZS4NCk5vdXMgZMOpY2lkb25zLCBjb21wdGUgdGVudSBkZXMgcsOpc3VsdGF0cyBkZSBs4oCZQUNNIGRlIGdhcmRlciA1IGRpbWVuc2lvbnMgcHJpbmNpcGFsZXMgQ2UgcXVpIHZhIHBlcm1ldHRyZSBk4oCZZXhwbGlxdWVyIDMzJSBkZSBs4oCZaW5mb3JtYXRpb247IEF1c3NpIEZhY3RvbWluZXIgbm91cyBsaW1pdGUgw6AgY2lucSBkaW1lbnNpb25zIHBvdXIgbCdBQ00gOg0KDQpgYGB7cn0NCmhpc3QocmVzdCRlaWcpDQpgYGANCg0KIyBBTkFMWVNFIEdSQVBISVFVRQ0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0iaW5kIixheGVzPWMoMToyKSxpbnZpc2libGU9YygidmFyIiwicXVhbGkuc3VwIiksIGNleCA9IDAuOSkNCmZ2aXpfbWNhX2luZChyZXN0LCBjb2wuaW5kID0gImNvczIiLCBheGVzID0gYygxLCAyKSwgY2V4ID0gMC44KSANCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIikpDQpmdml6X21jYV92YXIocmVzdCwgY29sLnZhciA9ICJjb250cmliIiwgYXhlcyA9IGMoMSwgMiksIGNleCA9IDAuOCkgDQpgYGANCg0KRGFucyBub3RyZSBhbmFseXNlIGRlIGdyYXBoZSBkZXMgY29ycmVzcG9uZGFuY2VzIG11bHRpcGxlcyAoQUNNKSwgbCdheGUgMSBkw6ltb250cmUgdW4gRWZmZXQgR3V0bWFubiByw6l2w6lsYXRldXIgZCd1bmUgcHJvZ3Jlc3Npb24gbW9ub3RvbmUgZGVzIGNhdMOpZ29yaWVzIHByb2Zlc3Npb25uZWxsZXMuIEVuIHByb2pldGFudCBjZXMgY2F0w6lnb3JpZXMgc3VyIGwnYXhlIDEgZGUgbCdBQ00sIHVuZSBzdHJ1Y3R1cmUgbGluw6lhaXJlIG5vbWluYWxlIMOpbWVyZ2UsIGF2ZWMgdW5lIHPDqXF1ZW5jZSBzJ8OpdGVuZGFudCBkZXMgcHJvZmVzc2lvbnMgbGVzIHBsdXMgw6AgZ2F1Y2hlIHZlcnMgbGEgY2F0w6lnb3JpZSBkZXMgYWdyaWN1bHRldXJzIMOgIGRyb2l0ZS4gTCdheGUgMiBxdWFudCDDoCBsdWkgbWV0IGVuIMOpdmlkZW5jZSB1bmUgb3Bwb3NpdGlvbiBlbnRyZSBsZXMgZXh0csOqbWVzIGRlIGxhIGR1csOpZSBkJ2VudHJldnVlLg0KDQpPbiBvYnNlcnZlIHVuZSBkaXNzZW1ibGFuY2UgZW50cmUgbGVzIGdyb3VwZXMgZCdpbmRpdmlkdXMgc2Vsb24gbGVzIHRyYW5jaGVzIGQnw6JnZSwgZW50cmUgMzggZXQgNTggYW5zICjDomdlXzM4XzU4XzEpIGxvY2FsaXPDqXMgZGFucyBsYSBwYXJ0aWUgc3Vww6lyaWV1cmUgZ2F1Y2hlLCBldCBjZXV4IGVudHJlIDE4IGV0IDM4IGFucyAow6JnZV8xOF8zOF8xKSBzaXR1w6lzIGRhbnMgbGEgcGFydGllIGluZsOpcmlldXJlIGRyb2l0ZS4NCg0KTGVzIGluZGl2aWR1cyBwb3NpdGlvbm7DqXMgZGFucyBsZSBxdWFkcmFudCBzdXDDqXJpZXVyIGRyb2l0LCB0ZWxzIHF1ZSBsZXMgZMOpdGVudXMgMjQyLCAxMzAgZXQgNjE2LCBwcsOpc2VudGVudCB1biBwcm9maWwgYXNzb2Npw6kgw6AgdW4gcmlzcXVlIMOpbGV2w6kgZGUgc3VpY2lkZSwgZGVzIHRyb3VibGVzIGRlIHBlcnNvbm5hbGl0w6kgb3UgZGUgY29tcG9ydGVtZW50LCBhaW5zaSBxdSfDoCBkZXMgZGlhZ25vc3RpY3Mgc8OpdsOocmVzIGluY2x1YW50IGRlcyBwYXRob2xvZ2llcyBncmF2ZXMgZXQgZGVzIHRyb3VibGVzIHBvc3QtdHJhdW1hdGlxdWVzLiBDZXMgZMOpdGVudXMgc2VtYmxlbnQgc291ZmZyaXIgZGUgZMOpcHJlc3Npb24gZXQgbW9udHJlbnQgZGVzIGNvbXBvcnRlbWVudHMgYWRkaWN0aWZzIGVudmVycyBsJ2FsY29vbCBldCBsZXMgc3Vic3RhbmNlcy4gRGUgcGx1cywgaWxzIG9udCBnw6luw6lyYWxlbWVudCBwYXNzw6kgcGx1cyBkZSB0ZW1wcyBlbiBlbnRyZXZ1ZSBxdWUgbGEgbW95ZW5uZS4NCg0KVW5lIG9wcG9zaXRpb24gc2VtYmxlIMOpZ2FsZW1lbnQgc2UgZGVzc2luZXIgc3VyIGxhIGRldXhpw6htZSBkaW1lbnNpb24gZW50cmUgbGVzIGluZGl2aWR1cyDDoCBoYXV0IHJpc3F1ZSBzdWljaWRhaXJlIGV0IGNldXggYXlhbnQgdW4gbml2ZWF1IMOpbGV2w6kgZGUgc2NvbGFyaXNhdGlvbi4NCg0KTGEgem9uZSBpbmbDqXJpZXVyZSBnYXVjaGUsIHF1YW50IMOgIGVsbGUsIGVuZ2xvYmUgZGVzIGTDqXRlbnVzIG5vbiBkw6lwcmVzc2lmcyBuaSBhZ29yYXBob2Jlcywgc2FucyByaXNxdWUgc3VpY2lkYWlyZSBhcHBhcmVudC4gSWxzIG9udCB1biBuaXZlYXUgw6lsZXbDqSBkJ8OpZHVjYXRpb24gZXQgb250IHBhc3PDqSBtb2lucyBkZSB0ZW1wcyBlbiBlbnRyZXZ1ZSBxdWUgbGEgbW95ZW5uZSwgdGVscyBxdWUgbGVzIGTDqXRlbnVzIDE4MiwgMzA0LCA0NTMgZXQgNTYzLg0KDQpMZSBncmFwaGlxdWUgZGVzIGluZGl2aWR1cyAoRGltMSwgRGltMikgbmUgcHLDqXNlbnRlIHBhcyBkZSB0ZW5kYW5jZSBzcMOpY2lmaXF1ZSBvdSBwYXJ0aWN1bGnDqHJlLCBuJ29iw6lpc3NhbnQgw6AgYXVjdW5lIGxvaSBkZSBtb2luZHJlIGNhcnLDqSwgZXQgcmVzdGUgdW5pZm9ybcOpbWVudCByw6lwYXJ0aSBkYW5zIHNhIGRpc3RyaWJ1dGlvbiwgbm9zIG9ic2VydmF0aW9ucyBzb250IGFub255bWVzLg0KDQoNCmBgYHtyfQ0KcGxvdChyZXN0LGNob2l4PSJ2YXIiLGF4ZXM9YygxOjIpKQ0KcGxvdChyZXN0LGludmlzaWJsZT1jKCJpbmQiLCJxdWFsaS5zdXAiKSkNCmBgYA0KDQpPbiBvYnNlcnZlIGNsYWlyZW1lbnQgcG91ciBsZXMgdmFyaWFibGVzIGJpbmFpcmUgdW4gcmVncm91cGVtZW50IGRlcyBtb2RhbGl0w6lzIMKrIE91aS9QcmVzZW5jZSgxKSDCuyB2ZXJzIGxlIGF1IGRlc3N1cyBkZSBsYSBkZXV4acOobWUgYmlzc2VjdHJpY2UgZCd1biBjw7R0w6kgZXQgZGVzIG1vZGFsaXTDqXMgwqsgTm9uL0Fic2Vuc2UoMCkgwrsgSWxzIHByZW5uZW50IGRvbmMgZGVzIHZhbGV1cnMgcGx1cyDDqWxldsOpZXMgcXVlIGxhIG1veWVubmUgc3VyIGxhIHBhcnRpZSBzdXDDqXJpZXVyZSBkZSBsYSBwcmVtacOocmUgZGltZW5zaW9uLg0KDQoNCg0KYGBge3J9DQpwbG90KHJlc3QsY2hvaXg9ImluZCIsaW52aXNpYmxlPWMoInZhciIsInF1YWxpLnN1cCIpLGhhYmlsbGFnZT0iZWNvbGUiLGNleD0wLjgpDQpgYGANCg0KQ2UgZ3JhcGhpcXVlIG5lIHLDqXbDqGxlIHBhcyBkZSBkw6l0YWlscyBwcsOpY2lzLCBiaWVuIHF1J2lsIHNvaXQgY2FyYWN0w6lyaXPDqSBwYXIgdW5lIGNlcnRhaW5lIGjDqXTDqXJvZ8OpbsOpaXTDqS4gQ2VwZW5kYW50LCB1bmUgYXNzb2NpYXRpb24gbm90YWJsZSBzZSBkZXNzaW5lIGVudHJlIHVuIG5pdmVhdSBkJ8OpZHVjYXRpb24gYmFzICjDqWNvbGVfMSwgcmVwcsOpc2VudMOpIGVuIG5vaXIpIGV0IHVuZSBkdXLDqWUgZCdlbnRyZXZ1ZSBwcm9sb25nw6llLiBFbiByZXZhbmNoZSwgdW5lIGR1csOpZSBkJ2VudHJldGllbiBwbHVzIGNvdXJ0ZSBzZW1ibGUgw6p0cmUgZGF2YW50YWdlIGFzc29jacOpZSDDoCBkZXMgbml2ZWF1eCBkJ8OpZHVjYXRpb24gbW95ZW5zIMOgIMOpbGV2w6lzICjDqWNvbGVfMywgw6ljb2xlXzQgZXQgw6ljb2xlXzUpLg0KDQoNCmBgYHtyfQ0KcGxvdChyZXN0LGNob2l4PSJpbmQiLGludmlzaWJsZT1jKCJ2YXIiLCJxdWFsaS5zdXAiKSxoYWJpbGxhZ2U9ImRlcC5jb25zIixjZXg9MC44LCBsYWJlbD0ibm9uZSIpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0iaW5kIixpbnZpc2libGU9YygidmFyIiwicXVhbGkuc3VwIiksaGFiaWxsYWdlPSJwdHNkLmNvbnMiLGNleD0wLjgpDQoNCmBgYA0KDQpDZXMgZGVybmllcnMgZ3JhcGhpcXVlcyBuZSBmb250IHF1ZSByZW5mb3JjZXIgbGEgY29uY2x1c2lvbiBzZWxvbiBsYXF1ZWxsZSBsZXMgdmFyaWFibGVzIGRpYWdub3N0aXF1ZXMgc29udCBhc3NvY2nDqWVzIMOgIHVuZSBkdXLDqWUgZCdlbnRyZXZ1ZSBwcm9sb25nw6llLiBVbmUgY29uY2VudHJhdGlvbiBub3RhYmxlIGRlIGNlcyBkaWFnbm9zdGljcyBlc3Qgb2JzZXJ2w6llIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGRyb2l0ZSBkZSBjZXMgZ3JhcGhpcXVlcy4NCg0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0idmFyIixheGVzPWMoMzo0KSkNCmBgYA0KDQoNCklsIGVzdCBvYnNlcnbDqSB1bmUgY29ycsOpbGF0aW9uIG1hcnF1w6llIGVudHJlIGxhIGNhdMOpZ29yaWUgZGUgbGEgZHVyw6llIG1veWVubmUgZGVzIGVudHJldGllbnMgKGVudHJlIDQwIGV0IDgwIG1pbnV0ZXMgLSB2YXJpYWJsZSAidGVtcHNfNDBfODAiKSBkZXMgZMOpdGVudXMgZXQgbGEgdHJvaXNpw6htZSBkaW1lbnNpb24uIERlIG3Dqm1lLCBsYSB2YXJpYWJsZSBwcm9mZXNzaW9uIChwcm9mKSBlc3QgYXNzb2Npw6llIMOgIGxhIHF1YXRyacOobWUgZGltZW5zaW9uLg0KDQoNCg0KYGBge3J9DQpmdml6X21jYV9pbmQocmVzdCxheGVzPWMoMzo0KSkNCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIiksIGF4ZXM9YygzOjQpKQ0KYGBgDQoNCkxlIGdyYXBoaXF1ZSBkZXMgaW5kaXZpZHVzIChEaW0zICYgRGltIDQpIG1vbnRyZSB1bmUgcGFydGljdWxhcml0w6kgZGUgY2hhcXVlIGPDtHTDqSBkZSBsJ2F4ZSAyLiBMZXMgaW5kaXZpZHVzIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGdhdWNoZSBkZSBsJ2F4ZSB2ZXJ0aWNhbCBvbnQgZW4gZ8OpbsOpcmFsIHVuIG5pdmVhdSBkJ8OpZHVjYXRpb24gbW95ZW4gZXQgc29udCBwcmluY2lwYWxlbWVudCBkZXMgY2FkcmVzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBpbnRlcm3DqWRpYWlyZXMsIHNvdXZlbnQgamV1bmVzLiBFbiByZXZhbmNoZSwgY2V1eCBzaXR1w6lzIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGRyb2l0ZSwgYmllbiBxdSfDomfDqXMsIGFmZmljaGVudCB1biBuaXZlYXUgZCfDqWR1Y2F0aW9uIMOpbGV2w6kuIExlcyBpbmRpdmlkdXMgZW4gYmFzIHNvbnQgbWFqb3JpdGFpcmVtZW50IGRlcyBvdXZyaWVycyBvdSBkZXMgcGVyc29ubmVzIHNhbnMgZW1wbG9pLCBldCBwcsOpc2VudGVudCBxdWVscXVlcyBkaWFnbm9zdGljcyBzcMOpY2lmaXF1ZXMuDQoNCmBgYHtyfQ0KZnZpel9tY2FfaW5kKHJlc3QsYXhlcz1jKDQ6NSksIGxhYmVsID0gIm5vbmUiKQ0KcGxvdChyZXN0LGNob2l4PSJ2YXIiLCBheGVzPWMoNDo1KSkNCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIiksIGF4ZXM9Yyg0OjUpKQ0KYGBgDQoNCg0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpzbXAgJT4lIA0KICBmaWx0ZXIoYWdlPj01MCAmIGR1ci5pbnRlcnYgPj02MCwgbmEucm0gPSBUUlVFKSAlPiUNCiAgY291bnQoKQ0KICANCmBgYA0KDQoNCg0KDQoNCg0KIyBDTEFTU0lGSUNBVElPTiANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQojIEVmZmVjdHVlciBsYSBjbGFzc2lmaWNhdGlvbiAoY2x1c3RlcmluZykgYXZlYyBsJ2FsZ29yaXRobWUgay1tZWFucw0Kbm9tYnJlX2NsdXN0ZXJzIDwtIDMgICMgRMOpZmluaXIgbGUgbm9tYnJlIGRlIGNsdXN0ZXJzIHNvdWhhaXTDqQ0KY2x1c3RlcnMgPC0ga21lYW5zKHJlc3QkaW5kJGNvb3JkWywgYygxLCAyKV0sIGNlbnRlcnMgPSBub21icmVfY2x1c3RlcnMpICAjIFV0aWxpc2F0aW9uIGRlcyBkZXV4IHByZW1pZXJzIGF4ZXMgcG91ciBsYSBjbGFzc2lmaWNhdGlvbg0KDQojIEFmZmljaGVyIGxlcyByw6lzdWx0YXRzIGR1IGNsdXN0ZXJpbmcNCnByaW50KGNsdXN0ZXJzKQ0KYGBgDQoNCg0KYGBge3J9DQojIFZpc3VhbGlzZXIgbGVzIGluZGl2aWR1cyBhdmVjIGxldXIgYXBwYXJ0ZW5hbmNlIMOgIGNoYXF1ZSBjbHVzdGVyDQpmdml6X2NsdXN0ZXIoY2x1c3RlcnMsIGdlb20gPSAicG9pbnQiLCBkYXRhID0gcmVzdCRpbmQkY29vcmRbLCBjKDEsIDIpXSwgDQogICAgICAgICAgICAgZ2VvbV9sYWJlbCA9IFRSVUUsIGxhYmVsID0gImluZCIsIG1haW4gPSAiQ2xhc3NpZmljYXRpb24gZGVzIGluZGl2aWR1cyBhcHLDqHMgbCdBQ00iKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQojIEVmZmVjdHVlciBsYSBjbGFzc2lmaWNhdGlvbiBoacOpcmFyY2hpcXVlDQpkaXN0YW5jZXMgPC0gZGlzdChyZXN0JGluZCRjb29yZFssIGMoMSwgMildLCBtZXRob2QgPSAiZXVjbGlkZWFuIikgICMgQ2FsY3VsZXIgbGEgZGlzdGFuY2UgZXVjbGlkaWVubmUgZW50cmUgbGVzIGluZGl2aWR1cw0KaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcgPC0gaGNsdXN0KGRpc3RhbmNlcywgbWV0aG9kID0gIndhcmQuRCIpICAjIE3DqXRob2RlICJ3YXJkLkQiIHBvdXIgbGEgbcOpdGhvZGUgZCdhZ3LDqWdhdGlvbg0KYGBgDQoNCmBgYHtyfQ0KIyBWaXN1YWxpc2VyIGxlIGRlbmRyb2dyYW1tZSByw6lzdWx0YW50IGRlIGxhIGNsYXNzaWZpY2F0aW9uIGhpw6lyYXJjaGlxdWUNCnBsb3QoaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcsIGhhbmcgPSAtMSwgbWFpbiA9ICJEZW5kcm9ncmFtbWUgZGUgbGEgY2xhc3NpZmljYXRpb24gaGnDqXJhcmNoaXF1ZSIpDQpgYGANCg0KTm91cyBhdm9ucyBkb25jIGljaSAzIGNsdXN0ZXJzICjDoCBoZWlnaHQgNjApLiANCk5vcyBpbmRpdmlkdXMgcmVzdGVudCBhbm9ueW1lcy4NCg0KYGBge3IsaW5jbHVkZT1GQUxTRX0NCiMgQ291cGVyIGxlIGRlbmRyb2dyYW1tZSBwb3VyIG9idGVuaXIgdW4gbm9tYnJlIHNww6ljaWZpcXVlIGRlIGNsdXN0ZXJzDQpub21icmVfY2x1c3RlcnMgPC0gMyAgIyBEw6lmaW5pciBsZSBub21icmUgZGUgY2x1c3RlcnMgc291aGFpdMOpDQpjbHVzdGVycyA8LSBjdXRyZWUoaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcsIGsgPSBub21icmVfY2x1c3RlcnMpDQoNCiMgQWZmaWNoZXIgbGVzIHLDqXN1bHRhdHMgZHUgY2x1c3RlcmluZw0KcHJpbnQoY2x1c3RlcnMpDQpgYGANCg0KDQojIENPTkNMVVNJT04NCg0KUmFwcGVsb25zIGRhbnMgdW4gcHJlbWllciB0ZW1wcyBsZXMgaHlwb3Row6hzZXMgcXVlIG5vdXMgYXZpb25zIGZvcm11bMOpZXMgOg0KDQoqMS5IeXBvdGjDqHNlIHN1ciBsZSBuaXZlYXUgZGUgc2NvbGFyaXNhdGlvbiAqIA0KDQoqMi5IeXBvdGjDqHNlIHN1cmwnaW5mbHVlbmNlIGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSogDQoNCiozLkh5cG90aMOoc2Ugc3VyIGwnZWZmZXQgZGUgbCfDomdlIGR1IGTDqXRlbnUqIA0KDQoqNC5IeXBvdGjDqHNlIHN1ciBsZXMgdmFyaWFibGVzIGRpYWdub3N0aXF1ZXMgKg0KDQoqNS4gSHlwb3RoZXNlIHN1ciBsZXMgdmFyaWFibGVzIGRlIHJpc3F1ZSBzdWljaWRhaXJlKiANCg0KQ29uY2VybmFudCBsJ2h5cG90aMOoc2UgSDEsIGwnYW5hbHlzZSBncmFwaGlxdWUgZGVzIGluZGl2aWR1cyBldCBkZXMgdmFyaWFibGVzIGTDqW1vbnRyZSBjbGFpcmVtZW50IHF1J3VuIG5pdmVhdSBkZSBzY29sYXJpc2F0aW9uIMOpbGV2w6kgZXN0IGFzc29jacOpIMOgIHVuZSBkdXLDqWUgZCdpbnRlcnZpZXcgcGx1cyBjb3VydGUsIHN1cnRvdXQgY2hleiBsZXMgaW5kaXZpZHVzIGF2ZWMgdW4gbml2ZWF1IGRlIHNvbGFyaXNhdGlvbiDDqWxldsOpLiBDZWNpIGNvbmZpcm1lIGwnaHlwb3Row6hzZSBIMSBlbiBtZXR0YW50IGVuIMOpdmlkZW5jZSBxdWUgbGUgbml2ZWF1IMOpbGV2w6kgZGUgc2NvbGFyaXNhdGlvbiwgaW5kw6lwZW5kYW1tZW50IGRlcyBhdXRyZXMgdmFyaWFibGVzLCBmYXZvcmlzZSB1bmUgZHVyw6llIGQnaW50ZXJ2aWV3IHLDqWR1aXRlLg0KDQpRdWFudCDDoCBsJ2h5cG90aMOoc2UgSDIgc3VyIGwnaW1wYWN0IGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSBzdXIgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLCBjZXJ0YWluZXMgcHJvZmVzc2lvbnMgdGVsbGVzIHF1ZSBjYWRyZSBvdSBwcm9mZXNzaW9ubmVsIGludGVybcOpZGlhaXJlIHNlbWJsZW50IGxpw6llcyDDoCBkZXMgZW50cmV0aWVucyBwbHVzIGNvdXJ0cy4gQ2VwZW5kYW50LCBpbCBlc3QgcGVydGluZW50IGRlIG5vdGVyIHF1ZSBsYSB2YXJpYWJsZSBwcm9mZXNzaW9uIGVzdCDDqXRyb2l0ZW1lbnQgbGnDqWUgYXUgbml2ZWF1IGQnw6lkdWNhdGlvbi4gQmllbiBxdWUgZGVzIGNhZHJlcyBhaWVudCB1biBuaXZlYXUgZCfDqWR1Y2F0aW9uIMOpbGV2w6kgZXQgcGFzc2VudCBtb2lucyBkZSB0ZW1wcyBlbiBpbnRlcnZpZXcsIGNldHRlIGNvcnLDqWxhdGlvbiBuJ2VzdCBwYXMgc3lzdMOpbWF0aXF1ZSBwb3VyIHRvdXRlcyBsZXMgcHJvZmVzc2lvbnMuIEFpbnNpLCBsJ2h5cG90aMOoc2UgSDIgbidlc3QgcGFzIHJldGVudWUuDQoNCkNvbmNlcm5hbnQgbCdoeXBvdGjDqHNlIEgzLCBpbmRpcXVhbnQgcXVlIGwnw6JnZSBkdSBkw6l0ZW51IGluZmx1ZW5jZSBwb3NpdGl2ZW1lbnQgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLCBsZXMgaW5kaXZpZHVzIHBsdXMgamV1bmVzIHBhc3NlbnQgbMOpZ8OocmVtZW50IG1vaW5zIGRlIHRlbXBzIHF1ZSBsZXMgcGVyc29ubmVzIMOiZ8OpZXMuIFBhciBjb25zw6lxdWVudCwgbCdoeXBvdGjDqHNlIEgzIGVzdCByZXRlbnVlLg0KDQpMJ2h5cG90aMOoc2UgSDQgZXN0IHNvdXRlbnVlIHBhciBkZXMgZG9ubsOpZXMgZ3JhcGhpcXVlcyBtb250cmFudCB1bmUgYXNzb2NpYXRpb24gcG9zaXRpdmUgZW50cmUgbGVzIGRpYWdub3N0aWNzIHRlbHMgcXVlIGxhIGTDqXByZXNzaW9uLCBsYSBkw6lwZW5kYW5jZSDDoCBsJ2FsY29vbCBldCBsYSBzY2hpem9waHLDqW5pZSwgZXQgdW5lIGR1csOpZSBkJ2VudHJldGllbiBwcm9sb25nw6llLiBBaW5zaSwgbCdoeXBvdGjDqHNlIEg0IGVzdCBjb25maXJtw6llLg0KDQpFbiBjZSBxdWkgY29uY2VybmUgbCdoeXBvdGjDqHNlIEg1LCBsZXMgZ3JhcGhpcXVlcyBpbmRpcXVlbnQgY2xhaXJlbWVudCBxdWUgbGVzIGTDqXRlbnVzIGF2ZWMgZGVzIGFudMOpY8OpZGVudHMgZGUgdGVudGF0aXZlIGRlIHN1aWNpZGUgb3UgcHLDqXNlbnRhbnQgdW4gaGF1dCByaXNxdWUgc3VpY2lkYWlyZSBvbnQgcGFzc8OpIHBsdXMgZGUgdGVtcHMgcXVlIGxhIG1veWVubmUgZW4gZW50cmV0aWVuLCB2YWxpZGFudCBhaW5zaSBsJ2h5cG90aMOoc2UgSDUuDQoNClBhciBhaWxsZXVycywgbm9zIGFuYWx5c2VzIHN0YXRpc3RpcXVlcyBldCBncmFwaGlxdWVzIG9udCBtaXMgZW4gbHVtacOocmUgZGVzIHNjaMOpbWFzIHNww6ljaWZpcXVlcyBjb25jZXJuYW50IGxlcyBkw6l0ZW51cyBzw6lwYXLDqXMgZGUgbGV1ciBmYW1pbGxlLCBiw6luw6lmaWNpYWlyZXMgZGUgbCdhaWRlIGQndW4ganVnZSBwb3VyIGVuZmFudCwgc2FucyBlbXBsb2kgZXQgZCd1biBjZXJ0YWluIGdyb3VwZSBkJ8OiZ2UuIENldXggcXVpIG4nb250IHBhcyDDqXTDqSBzw6lwYXLDqXMgZGUgbGV1ciBmYW1pbGxlIG5pIGFpZMOpcyBwYXIgdW4ganVnZSBwb3VyIGVuZmFudCBvbnQgdW4gbml2ZWF1IGQnw6l0dWRlcyBwbHVzIMOpbGV2w6ksIHNvbnQgcGx1cyDDomfDqXMgZXQgb2NjdXBlbnQgZGVzIHBvc3RlcyBkZSBjYWRyZSBvdSBkZSBwcm9mZXNzaW9ubmVsIGludGVybcOpZGlhaXJlLg0KDQpFbiBjb25jbHVzaW9uLCBub3VzIGF2b25zIGNvbmZpcm3DqSBxdWF0cmUgaHlwb3Row6hzZXMgc3VyIGNpbnEgKEgxLCBIMywgSDQsIEg1KSwgY29uZmlybWFudCBlbiBncmFuZGUgcGFydGllIG5vcyBoeXBvdGjDqHNlcyBzdXIgbGVzIGZhY3RldXJzIGluZmx1ZW7Dp2FudCBsYSBkdXLDqWUgZGVzIGVudHJldGllbnMgZW4gbWlsaWV1IGNhcmPDqXJhbC4gTCdBbmFseXNlIGRlcyBDb3JyZXNwb25kYW5jZXMgTXVsdGlwbGVzIChBQ00pIGEgcGVybWlzIGRlIG1pZXV4IGNvbXByZW5kcmUgbGEgYmFzZSBkZSBkb25uw6llcyBldCBkZSBtZXR0cmUgZW4gbHVtacOocmUgZGVzIHLDqXN1bHRhdHMgaW5pdGlhbGVtZW50IG1vaW5zIMOpdmlkZW50cy4NCk5vdHJlIMOpdHVkZSBhIGRlcyBsaW1pdGVzLiBE4oCZYXV0cmVzIHBhcmFtw6h0cmVzIHBvdXJyYWllbnQgbmUgcGFzIMOqdHJlIHByaXMgZW4gY29tcHRlIDsgcGFyIGV4ZW1wbGUgZW4gY2hhbmdlYW50IGxlcyB2YXJpYWJsZXMgZXQgbGVzIGluZGl2aWR1cyBzdXBwbMOpbWVudGFpcmUgDQpvdSBlbiB1dGlsaXNhbnQgZOKAmWF1dHJlIG3DqXRob2RlIGTigJlhbmFseXNlLiANCg0KDQpgYGB7cn0NCmthYmxlKHQoc3VtbWFyeShyZXN0KSkpDQpgYGANCg0KYGBge3J9DQprYWJsZShyb3VuZChyZXN0JGVpZywyKSkgDQpgYGANCg0KYGBge3J9DQpiYXJwbG90KHJlc3QkZWlnWywxXSwgbWFpbj0iVmFsZXVycyBwcm9wcmVzIikNCmBgYA0KDQpgYGB7cn0NCmRpbWRlc2MocmVzdCkNCmBgYA0KDQo=