1/*************************************************************************/ 2/****************** MOTEUR DE RECHERCHE SENSATION POPIN ******************/ 3/*************************************************************************/ 4 5 $(document).bind('_js_ready', function(evt) { 6 7 8 /*** GESTION DE LA NAVIGATION AU CLAVIER ***/ 9 10 // Gestion tabindex des liens de suggestion 11 let suggestions = $('#suggestions a'); 12 function remove_tabindex() { suggestions.removeAttr('tabindex'); } 13 function add_tabindex() { suggestions.attr('tabindex', '-1'); } 14 15 // Piege au focus dans le sensation popin 16 let focused_elt = function(elem) { 17 18 // @INT : liste des éléments tabulables a adapter selon stucture html. Attention à l'ordre des éléments. 19 let tabbable; 20 21 if ($("#show_more_results").is(':visible')) { 22 tabbable = elem.find('#main_search, #bouton_recherche, button, #autocomplete_results ul, #autocomplete_results ul .ui-menu-item a, #show_more_results a, .close-button').filter(':visible'); 23 } else { 24 tabbable = elem.find('#main_search, #bouton_recherche, button, .ui-menu-item a, .close-button').filter(':visible'); 25 } 26 27 28 let firstTabbable = tabbable.first(); 29 let lastTabbable = tabbable.last(); 30 31 /* Tabulation sur le dernier element renvoie au premier */ 32 lastTabbable.one('keydown', function (e) { 33 if ((e.which === 9 && !e.shiftKey)) { 34 e.preventDefault(); 35 firstTabbable.focus(); 36 console.log("to first"); 37 } 38 }); 39 40 /* Tabulation inverse sur le premier element renvoie au dernier */ 41 firstTabbable.one('keydown', function (e) { 42 if ((e.which === 9 && e.shiftKey)) { 43 e.preventDefault(); 44 lastTabbable.focus(); 45 console.log("to last"); 46 } 47 }); 48 49 tabbable.keyup(function(e) { 50 if (e.key === "Escape") { 51 close_bandeau(); 52 } 53 }); 54 }; 55 56 /*** GESTION DE LA SENSATION POPIN / ASPIRATION / ANIMATION ***/ 57 // Ajout des infos sensation full screen // Zone moteur dans bandeau image 58 let isKeyUp = false; 59 60 // Moteur recherche bandeau home 61 let bandeau_reset = function () { 62 $("#home .search_area_cont .close-button").on("click",function() { 63 close_bandeau(); 64 }); 65 }; 66 67 let close_bandeau = function () { 68 $("#home .search_area_cont").removeClass("is_search"); 69 // $("#home #header").removeClass("open_search"); 70 $("#home .search_area_cont #main_search").val(''); 71 $('body').removeClass('overflow is-reveal-open'); 72 $('main').css('z-index','1'); 73 isKeyUp = false; 74 $("#show_more_results").addClass('hide'); 75 add_tabindex(); 76 } 77 78 let bandeau_keyup = function() { 79 $("#home .search_area_cont #main_search").keyup(function(evt) { 80 let alreadyFocus = false; 81 if(evt.keyCode != 9 && evt.keyCode != 16){ // BUGFIX do not open sensation popin=when using tabulation 82 if (isKeyUp != true) { 83 $("#home .search_area_cont").addClass("is_search"); 84 // $("#home #header").addClass("open_search"); 85 $('body').addClass('overflow is-reveal-open'); 86 $('main').css('z-index','1006'); 87 $("#search_area_cont_append .titre_bloc").attr("aria-level", "2"); 88 $("#search_area_cont_append .titre_suggestions").attr("aria-level", "3"); 89 bandeau_reset(); 90 $("#home .bandeau_page .search_area_cont #main_search").keyup(function(e) { 91 if (e.key === "Escape") { 92 close_bandeau(); 93 } 94 }); 95 remove_tabindex(); 96 $(".search_area_cont.is_search #main_search").on("focusout",function() { 97 focused_elt($('#zone_moteur')); 98 }); 99 isKeyUp = true; 100 } 101 } 102 }); 103 }; 104 bandeau_keyup(); 105 106 // Popin recherche 107 let popin_reset = function () { 108 $("#popin_recherche .wrap_popin .close-button").on("click",function() { 109 $("#popin_recherche .wrap_popin").removeClass("is_search"); 110 $("#popin_recherche #main_search").val(''); 111 $('body').removeClass('is-reveal-open'); 112 isKeyUp = false; 113 add_tabindex(); 114 }); 115 }; 116 117 let popin_keyup = function() { 118 $("#popin_recherche #main_search").keyup(function() { 119 if (isKeyUp != true) { 120 $("#popin_recherche .wrap_popin").addClass("is_search"); 121 $('body').addClass('is-reveal-open'); 122 popin_reset(); 123 isKeyUp = true; 124 } 125 }); 126 }; 127 128 let placeholder_moteur = $('#home #zone_moteur #main_search').placeholderTypewriter({ 129 delay: 50, 130 pause: 1500, 131 text: [ 132 "Que recherchez-vous ?", 133 "Un service ?", 134 "Une information ?" 135 ] 136 }); 137 placeholder_moteur.init(); 138
139 // Gestion aspiration du moteur / popin recherche 140 let popin_home_search = $("#popin_recherche.home_search"), 141 popin_page_search = $("#popin_recherche.page_search"); 142 143 // Gestion popin recherche sur la home 144 popin_home_search.on("open.zf.reveal",function(){ 145 deleteAutocomplete(); 146 remove_tabindex(); 147 148 placeholder_moteur.destroy(); 149 let search_html = $("#search_area_cont_append").html(); 150 $("#zone_moteur #search_area_cont_append *").remove(); 151 $("#popin_recherche.home_search .wrap_popin .content").html(search_html); 152 $("#popin_recherche.home_search .titre_bloc").attr("aria-level", "1"); 153 $("#popin_recherche.home_search .titre_suggestions").attr("aria-level", "2"); 154 bandeau_reset(); 155 popin_keyup(); 156 157 let placeholder_home_popin = $('#popin_recherche.home_search #main_search').placeholderTypewriter({ 158 delay: 50, 159 pause: 1500, 160 text: [ 161 "Je recherche ...", 162 "Un service ?", 163 "Une information ?" 164 ] 165 }); 166 placeholder_home_popin.init(); 167 $("#main_search").on("focusout",function() { 168 focused_elt($('#popin_recherche .wrap_popin')); 169 }); 170 171 bindRecognition(); 172 bindAutocomplete(); 173 $(".search_area_cont #main_search").on("focusout",function() { 174 focused_elt($('#popin_recherche')); 175 }); 176 }); 177 178 popin_home_search.on("closed.zf.reveal",function(){ 179 deleteAutocomplete(); 180 add_tabindex(); 181 182 let popin_search_html = $("#popin_recherche.home_search .wrap_popin .content").html(); 183 $("#popin_recherche.home_search .wrap_popin .content > *").remove(); 184 $("#zone_moteur #search_area_cont_append").html(popin_search_html); 185 186 $("#popin_recherche.home_search .titre_bloc").attr("aria-level", "2"); 187 $("#popin_recherche.home_search .titre_suggestions").attr("aria-level", "3"); 188 189 popin_reset(); 190 bandeau_keyup(); 191 192 let placeholder_moteur_2 = $('#home #zone_moteur #main_search').placeholderTypewriter({ 193 delay: 50, 194 pause: 1500, 195 text: [ 196 "Je recherche ...", 197 "Un service ?", 198 "Une information ?" 199 ] 200 }); 201 placeholder_moteur_2.init(); 202 203 bindRecognition(); 204 bindAutocomplete(); 205 }); 206 207 // Gestion popin recherche sur les autres pages 208 let placeholder_popin = $('#popin_recherche #main_search').placeholderTypewriter({ 209 delay: 50, 210 pause: 1500, 211 text: [ 212 "Que recherchez-vous ?", 213 "Un service ?", 214 "Une information ?" 215 ] 216 }); 217 218 popin_page_search.on("open.zf.reveal",function(){ 219 remove_tabindex(); 220 placeholder_popin.init(); 221 222 $("#main_search").on("focusout",function() { 223 focused_elt($('#popin_recherche .wrap_popin')); 224 }); 225 }); 226 227 popin_page_search.on("closed.zf.reveal",function(){ 228 placeholder_popin.destroy(); 229 add_tabindex(); 230 }); 231 232 // On ferme la sensation recherche quand le header devient sticky 233 // let header = $("#data-sticky-header"); 234 // header.on("sticky.zf.stuckto:top",function(){ 235 // $("#home .search_area_cont").removeClass("is_search"); 236 // $("#home #header").removeClass("open_search"); 237 // }); 238 239 if (Foundation.MediaQuery.current == "small" || Foundation.MediaQuery.current == "medium") { 240 let popin_search = $("#popin_recherche"); 241 popin_search.on("open.zf.reveal",function(){ 242 $('#offCanvasLeft').foundation('close'); 243 }); 244 } 245 246 }); 247 248 249/*************************************************************************/ 250/************************ RECONNAISSANCE VOCALE **************************/ 251/*************************************************************************/ 252 253 let SpeechRecognition, recognition; 254 let bindRecognition = function() { 255 $("button.vocal").on('click',function(){ 256 recognition.abort() 257 $(".search_area_cont #main_search").trigger('keyup'); 258 $("button.vocal").addClass("vocalRecognitionOn"); 259 recognition.start(); 260 recognition.onresult = function(event) { 261 for (i = event.resultIndex; i < event.results.length; i++) { 262 $("#main_search, #main_search_elastic").val(event.results[i][0].transcript); 263 $("#main_search, #main_search_elastic").focus(); 264 $("#searchEngineForm").submit(); 265 $("#main_search").autocomplete('search'); 266 } 267 } 268 recognition.onspeechend = function() { 269 recognition.stop(); 270 $("#main_search").autocomplete('search'); 271 $("button.vocal").removeClass("vocalRecognitionOn"); 272 } 273 recognition.onerror = function(event) { 274 if (event.error=="not-allowed") 275 { 276 alert("Vous n'avez pas autorisé l'utilisation du micro !"); 277 } 278 console.log('Error occurred in recognition: ' + event.error); 279 $("button.vocal").removeClass("vocalRecognitionOn"); 280 } 281 }); 282 } 283 284 $(document).bind('_js_ready', function() { 285 try { 286 //Try to define SpeechRecognition 287 SpeechRecognition = (window.SpeechRecognition || window.webkitSpeechRecognition); 288 recognition = new SpeechRecognition(); 289 recognition.lang = 'fr-FR'; 290 recognition.interimResults=true; 291 bindRecognition(); 292 } catch (e) { 293 // if no SpeechRecognition API delete mic icon from display 294 $("button.vocal").remove(); 295 $("#bouton_recherche").addClass("noVocalRecognition"); 296 } 297 }); 298 299//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJhc3NldHNfc2l0ZV9jb3JlL2pzL21vZHVsZXMvcmVjaGVyY2hlL3NlY3Rpb25fcmVjaGVyY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4vKioqKioqKioqKioqKioqKioqIE1PVEVVUiBERSBSRUNIRVJDSEUgU0VOU0FUSU9OIFBPUElOICoqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdCQoZG9jdW1lbnQpLmJpbmQoJ19qc19yZWFkeScsIGZ1bmN0aW9uKGV2dCkge1xyXG5cclxuXHJcblx0XHQvKioqIEdFU1RJT04gREUgTEEgTkFWSUdBVElPTiBBVSBDTEFWSUVSICoqKi9cclxuXHJcblx0XHRcdC8vIEdlc3Rpb24gdGFiaW5kZXggZGVzIGxpZW5zIGRlIHN1Z2dlc3Rpb25cclxuXHRcdFx0bGV0IHN1Z2dlc3Rpb25zID0gJCgnI3N1Z2dlc3Rpb25zIGEnKTtcclxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlX3RhYmluZGV4KCkgeyBzdWdnZXN0aW9ucy5yZW1vdmVBdHRyKCd0YWJpbmRleCcpOyB9XHJcblx0XHRcdGZ1bmN0aW9uIGFkZF90YWJpbmRleCgpIHsgc3VnZ2VzdGlvbnMuYXR0cigndGFiaW5kZXgnLCAnLTEnKTsgfVxyXG5cclxuXHRcdFx0Ly8gUGllZ2UgYXUgZm9jdXMgZGFucyBsZSBzZW5zYXRpb24gcG9waW5cclxuXHRcdFx0bGV0IGZvY3VzZWRfZWx0ID0gZnVuY3Rpb24oZWxlbSkge1xyXG5cclxuXHRcdFx0XHQvLyBASU5UIDogbGlzdGUgZGVzIMOpbMOpbWVudHMgdGFidWxhYmxlcyBhIGFkYXB0ZXIgc2Vsb24gc3R1Y3R1cmUgaHRtbC4gQXR0ZW50aW9uIMOgIGwnb3JkcmUgZGVzIMOpbMOpbWVudHMuXHJcblx0XHRcdFx0bGV0IHRhYmJhYmxlO1xyXG5cclxuXHRcdFx0XHRpZiAoJChcIiNzaG93X21vcmVfcmVzdWx0c1wiKS5pcygnOnZpc2libGUnKSkge1xyXG5cdFx0XHRcdFx0dGFiYmFibGUgPSBlbGVtLmZpbmQoJyNtYWluX3NlYXJjaCwgI2JvdXRvbl9yZWNoZXJjaGUsIGJ1dHRvbiwgI2F1dG9jb21wbGV0ZV9yZXN1bHRzIHVsLCAjYXV0b2NvbXBsZXRlX3Jlc3VsdHMgdWwgLnVpLW1lbnUtaXRlbSBhLCAjc2hvd19tb3JlX3Jlc3VsdHMgYSwgLmNsb3NlLWJ1dHRvbicpLmZpbHRlcignOnZpc2libGUnKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGFiYmFibGUgPSBlbGVtLmZpbmQoJyNtYWluX3NlYXJjaCwgI2JvdXRvbl9yZWNoZXJjaGUsIGJ1dHRvbiwgLnVpLW1lbnUtaXRlbSBhLCAuY2xvc2UtYnV0dG9uJykuZmlsdGVyKCc6dmlzaWJsZScpO1xyXG5cdFx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRcdGxldCBmaXJzdFRhYmJhYmxlID0gdGFiYmFibGUuZmlyc3QoKTtcclxuXHRcdFx0XHRsZXQgbGFzdFRhYmJhYmxlID0gdGFiYmFibGUubGFzdCgpO1xyXG5cclxuXHRcdFx0XHQvKiBUYWJ1bGF0aW9uIHN1ciBsZSBkZXJuaWVyIGVsZW1lbnQgcmVudm9pZSBhdSBwcmVtaWVyICovXHJcblx0XHRcdFx0bGFzdF
299RhYmJhYmxlLm9uZSgna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0ICAgaWYgKChlLndoaWNoID09PSA5ICYmICFlLnNoaWZ0S2V5KSkge1xyXG5cdFx0XHRcdFx0ICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0ICAgZmlyc3RUYWJiYWJsZS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0ICAgY29uc29sZS5sb2coXCJ0byBmaXJzdFwiKTtcclxuXHRcdFx0XHQgICB9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIFRhYnVsYXRpb24gaW52ZXJzZSBzdXIgbGUgcHJlbWllciBlbGVtZW50IHJlbnZvaWUgYXUgZGVybmllciAqL1xyXG5cdFx0XHRcdGZpcnN0VGFiYmFibGUub25lKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdGlmICgoZS53aGljaCA9PT0gOSAmJiBlLnNoaWZ0S2V5KSkge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdGxhc3RUYWJiYWJsZS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInRvIGxhc3RcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHRhYmJhYmxlLmtleXVwKGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xyXG5cdFx0XHRcdFx0XHRjbG9zZV9iYW5kZWF1KCk7XHJcblx0XHRcdFx0ICAgfVxyXG5cdFx0XHQgICBcdH0pO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdC8qKiogR0VTVElPTiBERSBMQSBTRU5TQVRJT04gUE9QSU4gLyBBU1BJUkFUSU9OIC8gQU5JTUFUSU9OICoqKi9cclxuXHRcdFx0Ly8gQWpvdXQgZGVzIGluZm9zIHNlbnNhdGlvbiBmdWxsIHNjcmVlbiAvLyBab25lIG1vdGV1ciBkYW5zIGJhbmRlYXUgaW1hZ2VcclxuXHRcdFx0bGV0IGlzS2V5VXAgPSBmYWxzZTtcclxuXHJcblx0XHRcdC8vIE1vdGV1ciByZWNoZXJjaGUgYmFuZGVhdSBob21lXHJcblx0XHRcdGxldCBiYW5kZWF1X3Jlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udCAuY2xvc2UtYnV0dG9uXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGNsb3NlX2JhbmRlYXUoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGxldCBjbG9zZV9iYW5kZWF1ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udFwiKS5yZW1vdmVDbGFzcyhcImlzX3NlYXJjaFwiKTtcclxuXHRcdFx0XHQvLyAkKFwiI2hvbWUgI2hlYWRlclwiKS5yZW1vdmVDbGFzcyhcIm9wZW5fc2VhcmNoXCIpO1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udCAjbWFpbl9zZWFyY2hcIikudmFsKCcnKTtcclxuXHRcdFx0XHQkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ292ZXJmbG93IGlzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0JCgnbWFpbicpLmNzcygnei1pbmRleCcsJzEnKTtcclxuXHRcdFx0XHRpc0tleVVwID0gZmFsc2U7XHJcblx0XHRcdFx0JChcIiNzaG93X21vcmVfcmVzdWx0c1wiKS5hZGRDbGFzcygnaGlkZScpO1xyXG5cdFx0XHRcdGFkZF90YWJpbmRleCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXRcdGJhbmRlYXVfa2V5dXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKFwiI2hvbWUgLnNlYXJjaF9hcmVhX2NvbnQgI21haW5fc2VhcmNoXCIpLmtleXVwKGZ1bmN0aW9uKGV2dCkge1xyXG5cdFx0XHRcdFx0bGV0IGFscmVhZHlGb2N1cyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0aWYoZXZ0LmtleUNvZGUgIT0gOSAmJiBldnQua2V5Q29kZSAhPSAxNil7IC8vIEJVR0ZJWCBkbyBub3Qgb3BlbiBzZW5zYXRpb24gcG9waW49d2hlbiB1c2luZyB0YWJ1bGF0aW9uXHJcblx0XHRcdFx0XHRcdGlmIChpc0tleVVwICE9IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI2hvbWUgLnNlYXJjaF9hcmVhX2NvbnRcIikuYWRkQ2xhc3MoXCJpc19zZWFyY2hcIik7XHJcblx0XHRcdFx0XHRcdFx0Ly8gJChcIiNob21lICNoZWFkZXJcIikuYWRkQ2xhc3MoXCJvcGVuX3NlYXJjaFwiKTtcclxuXHRcdFx0XHRcdFx0XHQkKCdib2R5JykuYWRkQ2xhc3MoJ292ZXJmbG93IGlzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0XHRcdFx0JCgnbWFpbicpLmNzcygnei1pbmRleCcsJzEwMDYnKTtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kIC50aXRyZV9ibG9jXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiMlwiKTtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kIC50aXRyZV9zdWdnZXN0aW9uc1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjNcIik7XHJcblx0XHRcdFx0XHRcdFx0YmFuZGVhdV9yZXNldCgpO1xyXG5cdFx0XHRcdFx0XHRcdCQoXCIjaG9tZSAuYmFuZGVhdV9wYWdlIC5zZWFyY2hfYXJlYV9jb250ICNtYWluX3NlYXJjaFwiKS5rZXl1cChmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VfYmFuZGVhdSgpO1xyXG5cdFx0XHRcdFx0XHRcdCAgIH1cclxuXHRcdFx0XHRcdFx0ICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0cmVtb3ZlX3RhYmluZGV4KCk7XHJcblx0XHRcdFx0XHRcdFx0JChcIi5zZWFyY2hfYXJlYV9jb250LmlzX3NlYXJjaCAjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3pvbmVfbW90ZXVyJykpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGlzS2V5VXAgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH07XHJcblx0XHRcdGJhbmRlYXVfa2V5dXAoKTtcclxuXHJcblx0XHRcdC8vIFBvcGluIHJlY2hlcmNoZVxyXG5cdFx0XHRsZXQgcG9waW5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUgLndyYXBfcG9waW4gLmNsb3NlLWJ1dHRvblwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZSAud3JhcF9wb3BpblwiKS5yZW1vdmVDbGFzcyhcImlzX3NlYXJjaFwiKTtcclxuXHRcdFx0XHRcdCQoXCIjcG9waW5fcmVjaGVyY2hlICNtYWluX3NlYXJjaFwiKS52YWwoJycpO1xyXG5cdFx0XHRcdFx0JCgnYm9keScpLnJlbW92ZUNsYXNzKCdpcy1yZXZlYWwtb3BlbicpO1xyXG5cdFx0XHRcdFx0aXNLZXlVcCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0YWRkX3RhYmluZGV4KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRsZXQgcG9waW5fa2V5dXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZSAjbWFpbl9zZWFyY2hcIikua2V5dXAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoaXNLZXlVcCAhPSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdCQoXCIjcG9waW5fcmVjaGVyY2hlIC53cmFwX3BvcGluXCIpLmFkZENsYXNzKFwiaXNfc2VhcmNoXCIpO1xyXG5cdFx0XHRcdFx0XHQkKCdib2R5JykuYWRkQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0XHRcdHBvcGluX3Jlc2V0KCk7XHJcblx0XHRcdFx0XHRcdGlzS2V5VXAgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0bGV0IHBsYWNlaG9sZG
299VyX21vdGV1ciA9ICQoJyNob21lICN6b25lX21vdGV1ciAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdGRlbGF5OiA1MCxcclxuXHRcdFx0XHRwYXVzZTogMTUwMCxcclxuXHRcdFx0XHR0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIlF1ZSByZWNoZXJjaGV6LXZvdXMgP1wiLFxyXG5cdFx0XHRcdFx0XCJVbiBzZXJ2aWNlID9cIixcclxuXHRcdFx0XHRcdFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0fSk7XHJcblx0XHRcdHBsYWNlaG9sZGVyX21vdGV1ci5pbml0KCk7XHJcblxyXG5cdFx0Ly8gR2VzdGlvbiBhc3BpcmF0aW9uIGR1IG1vdGV1ciAvIHBvcGluIHJlY2hlcmNoZVxyXG5cdFx0XHRsZXQgcG9waW5faG9tZV9zZWFyY2ggPSAkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaFwiKSxcclxuXHRcdFx0XHRwb3Bpbl9wYWdlX3NlYXJjaCA9ICQoXCIjcG9waW5fcmVjaGVyY2hlLnBhZ2Vfc2VhcmNoXCIpO1xyXG5cclxuXHRcdFx0Ly8gR2VzdGlvbiBwb3BpbiByZWNoZXJjaGUgc3VyIGxhIGhvbWVcclxuXHRcdFx0cG9waW5faG9tZV9zZWFyY2gub24oXCJvcGVuLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0ZGVsZXRlQXV0b2NvbXBsZXRlKCk7XHJcblx0XHRcdFx0cmVtb3ZlX3RhYmluZGV4KCk7XHJcblxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyX21vdGV1ci5kZXN0cm95KCk7XHJcblx0XHRcdFx0bGV0IHNlYXJjaF9odG1sID0gJChcIiNzZWFyY2hfYXJlYV9jb250X2FwcGVuZFwiKS5odG1sKCk7XHJcblx0XHRcdFx0JChcIiN6b25lX21vdGV1ciAjc2VhcmNoX2FyZWFfY29udF9hcHBlbmQgKlwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAud3JhcF9wb3BpbiAuY29udGVudFwiKS5odG1sKHNlYXJjaF9odG1sKTtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAudGl0cmVfYmxvY1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjFcIik7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLnRpdHJlX3N1Z2dlc3Rpb25zXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiMlwiKTtcclxuXHRcdFx0XHRiYW5kZWF1X3Jlc2V0KCk7XHJcblx0XHRcdFx0cG9waW5fa2V5dXAoKTtcclxuXHJcblx0XHRcdFx0bGV0IHBsYWNlaG9sZGVyX2hvbWVfcG9waW4gPSAkKCcjcG9waW5fcmVjaGVyY2hlLmhvbWVfc2VhcmNoICNtYWluX3NlYXJjaCcpLnBsYWNlaG9sZGVyVHlwZXdyaXRlcih7XHJcblx0XHRcdFx0ICBkZWxheTogNTAsXHJcblx0XHRcdFx0ICBwYXVzZTogMTUwMCxcclxuXHRcdFx0XHQgIHRleHQ6IFtcclxuXHRcdFx0XHQgICAgXCJKZSByZWNoZXJjaGUgLi4uXCIsXHJcblx0XHRcdFx0ICAgIFwiVW4gc2VydmljZSA/XCIsXHJcblx0XHRcdFx0ICAgIFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdCAgXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHBsYWNlaG9sZGVyX2hvbWVfcG9waW4uaW5pdCgpO1xyXG5cdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3BvcGluX3JlY2hlcmNoZSAud3JhcF9wb3BpbicpKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0YmluZFJlY29nbml0aW9uKCk7XHJcblx0XHRcdFx0YmluZEF1dG9jb21wbGV0ZSgpO1xyXG5cdFx0XHRcdCQoXCIuc2VhcmNoX2FyZWFfY29udCAjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3BvcGluX3JlY2hlcmNoZScpKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRwb3Bpbl9ob21lX3NlYXJjaC5vbihcImNsb3NlZC56Zi5yZXZlYWxcIixmdW5jdGlvbigpe1xyXG5cdFx0XHRcdGRlbGV0ZUF1dG9jb21wbGV0ZSgpO1xyXG5cdFx0XHRcdGFkZF90YWJpbmRleCgpO1xyXG5cclxuXHRcdFx0XHRsZXQgcG9waW5fc2VhcmNoX2h0bWwgPSAkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAud3JhcF9wb3BpbiAuY29udGVudFwiKS5odG1sKCk7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLndyYXBfcG9waW4gLmNvbnRlbnQgPiAqXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdCQoXCIjem9uZV9tb3RldXIgI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kXCIpLmh0bWwocG9waW5fc2VhcmNoX2h0bWwpO1xyXG5cclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAudGl0cmVfYmxvY1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjJcIik7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLnRpdHJlX3N1Z2dlc3Rpb25zXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiM1wiKTtcclxuXHJcblx0XHRcdFx0cG9waW5fcmVzZXQoKTtcclxuXHRcdFx0XHRiYW5kZWF1X2tleXVwKCk7XHJcblxyXG5cdFx0XHRcdGxldCBwbGFjZWhvbGRlcl9tb3RldXJfMiA9ICQoJyNob21lICN6b25lX21vdGV1ciAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdCAgZGVsYXk6IDUwLFxyXG5cdFx0XHRcdCAgcGF1c2U6IDE1MDAsXHJcblx0XHRcdFx0ICB0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIkplIHJlY2hlcmNoZSAuLi5cIixcclxuXHRcdFx0XHRcdFwiVW4gc2VydmljZSA/XCIsXHJcblx0XHRcdFx0XHRcIlVuZSBpbmZvcm1hdGlvbiA/XCJcclxuXHRcdFx0XHQgIF1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRwbGFjZWhvbGRlcl9tb3RldXJfMi5pbml0KCk7XHJcblxyXG5cdFx0XHRcdGJpbmRSZWNvZ25pdGlvbigpO1xyXG5cdFx0XHRcdGJpbmRBdXRvY29tcGxldGUoKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0Ly8gR2VzdGlvbiBwb3BpbiByZWNoZXJjaGUgc3VyIGxlcyBhdXRyZXMgcGFnZXNcclxuXHRcdFx0bGV0IHBsYWNlaG9sZGVyX3BvcGluID0gJCgnI3BvcGluX3JlY2hlcmNoZSAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdGRlbGF5OiA1MCxcclxuXHRcdFx0XHRwYXVzZTogMTUwMCxcclxuXHRcdFx0XHR0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIlF1ZSByZWNoZXJjaGV6LXZvdXMgP1wiLFxyXG5cdFx0XHRcdFx0XCJVbiBzZXJ2aWNlID9cIixcclxuXHRcdFx0XHRcdFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cG9waW5fcGFnZV9zZWFyY2gub24oXCJvcGVuLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHJlbW92ZV90YWJpbmRleCgpO1xyXG5cdFx0XHRwbGFjZWhvbGRlcl9wb3Bpbi5pbml0KCk7XHJcblxyXG5cdFx0XHQkKFwiI21haW5fc2VhcmNoXCIpLm9uKFwiZm9jdXNvdXRcIixmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRmb2N1c2VkX2VsdCgkKCcjcG9waW5fcmVjaGVyY2hlIC53cmFwX3BvcGluJykpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdH
299BvcGluX3BhZ2Vfc2VhcmNoLm9uKFwiY2xvc2VkLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHBsYWNlaG9sZGVyX3BvcGluLmRlc3Ryb3koKTtcclxuXHRcdFx0YWRkX3RhYmluZGV4KCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBPbiBmZXJtZSBsYSBzZW5zYXRpb24gcmVjaGVyY2hlIHF1YW5kIGxlIGhlYWRlciBkZXZpZW50IHN0aWNreVxyXG5cdFx0Ly8gbGV0IGhlYWRlciA9ICQoXCIjZGF0YS1zdGlja3ktaGVhZGVyXCIpO1xyXG5cdFx0Ly8gaGVhZGVyLm9uKFwic3RpY2t5LnpmLnN0dWNrdG86dG9wXCIsZnVuY3Rpb24oKXtcclxuXHRcdC8vIFx0JChcIiNob21lIC5zZWFyY2hfYXJlYV9jb250XCIpLnJlbW92ZUNsYXNzKFwiaXNfc2VhcmNoXCIpO1xyXG5cdFx0Ly8gXHQkKFwiI2hvbWUgI2hlYWRlclwiKS5yZW1vdmVDbGFzcyhcIm9wZW5fc2VhcmNoXCIpO1xyXG5cdFx0Ly8gfSk7XHJcblxyXG5cdFx0aWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5jdXJyZW50ID09IFwic21hbGxcIiB8fCBGb3VuZGF0aW9uLk1lZGlhUXVlcnkuY3VycmVudCA9PSBcIm1lZGl1bVwiKSB7XHJcblx0XHRcdGxldCBwb3Bpbl9zZWFyY2ggPSAkKFwiI3BvcGluX3JlY2hlcmNoZVwiKTtcclxuXHRcdFx0cG9waW5fc2VhcmNoLm9uKFwib3Blbi56Zi5yZXZlYWxcIixmdW5jdGlvbigpe1xyXG5cdFx0XHRcdCQoJyNvZmZDYW52YXNMZWZ0JykuZm91bmRhdGlvbignY2xvc2UnKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdH0pO1xyXG5cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4vKioqKioqKioqKioqKioqKioqKioqKioqIFJFQ09OTkFJU1NBTkNFIFZPQ0FMRSAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdGxldCBTcGVlY2hSZWNvZ25pdGlvbiwgcmVjb2duaXRpb247XHJcblx0bGV0IGJpbmRSZWNvZ25pdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0JChcImJ1dHRvbi52b2NhbFwiKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHJlY29nbml0aW9uLmFib3J0KClcclxuXHRcdFx0JChcIi5zZWFyY2hfYXJlYV9jb250ICNtYWluX3NlYXJjaFwiKS50cmlnZ2VyKCdrZXl1cCcpO1xyXG5cdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLmFkZENsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5zdGFydCgpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5vbnJlc3VsdCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdFx0Zm9yIChpID0gZXZlbnQucmVzdWx0SW5kZXg7IGkgPCBldmVudC5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQkKFwiI21haW5fc2VhcmNoLCAjbWFpbl9zZWFyY2hfZWxhc3RpY1wiKS52YWwoZXZlbnQucmVzdWx0c1tpXVswXS50cmFuc2NyaXB0KTtcclxuXHRcdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2gsICNtYWluX3NlYXJjaF9lbGFzdGljXCIpLmZvY3VzKCk7XHJcblx0XHRcdFx0XHQkKFwiI3NlYXJjaEVuZ2luZUZvcm1cIikuc3VibWl0KCk7XHJcblx0XHRcdFx0XHQkKFwiI21haW5fc2VhcmNoXCIpLmF1dG9jb21wbGV0ZSgnc2VhcmNoJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJlY29nbml0aW9uLm9uc3BlZWNoZW5kID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmVjb2duaXRpb24uc3RvcCgpO1xyXG5cdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2hcIikuYXV0b2NvbXBsZXRlKCdzZWFyY2gnKTtcclxuXHRcdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLnJlbW92ZUNsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJlY29nbml0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRcdGlmIChldmVudC5lcnJvcj09XCJub3QtYWxsb3dlZFwiKVxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGFsZXJ0KFwiVm91cyBuJ2F2ZXogcGFzIGF1dG9yaXPDqSBsJ3V0aWxpc2F0aW9uIGR1IG1pY3JvICFcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCBpbiByZWNvZ25pdGlvbjogJyArIGV2ZW50LmVycm9yKTtcclxuXHRcdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLnJlbW92ZUNsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdCQoZG9jdW1lbnQpLmJpbmQoJ19qc19yZWFkeScsIGZ1bmN0aW9uKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9UcnkgdG8gZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uXHJcblx0XHRcdFNwZWVjaFJlY29nbml0aW9uID0gKHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24pO1xyXG5cdFx0XHRyZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5sYW5nID0gJ2ZyLUZSJztcclxuXHRcdFx0cmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHM9dHJ1ZTtcclxuXHRcdFx0YmluZFJlY29nbml0aW9uKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdC8vIGlmIG5vIFNwZWVjaFJlY29nbml0aW9uIEFQSSBkZWxldGUgbWljIGljb24gZnJvbSBkaXNwbGF5XHJcblx0XHRcdCQoXCJidXR0b24udm9jYWxcIikucmVtb3ZlKCk7XHJcblx0XHRcdCQoXCIjYm91dG9uX3JlY2hlcmNoZVwiKS5hZGRDbGFzcyhcIm5vVm9jYWxSZWNvZ25pdGlvblwiKTtcclxuXHRcdH1cclxuXHR9KTtcclxuIl0sImZpbGUiOiJhc3NldHNfc2l0ZV9jb3JlL2pzL21vZHVsZXMvcmVjaGVyY2hlL3NlY3Rpb25fcmVjaGVyY2hlLm1pbi5qcyJ9
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.