Content-Type: multipart/related; start=; boundary=----------XjV0HmQQUqrqWKUDdGcJsX Content-Location: http://www.ine.es/jaxi/menu.do?type=pcaxis&path=%2Ft25/p458&file=inebase&L=0 Subject: =?utf-8?Q?Instituto=20Nacional=20de=20Estad=C3=ADstica.=20(National=20Statistics=20Institute)?= MIME-Version: 1.0 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=menu.htm Content-Type: text/html; charset=iso-8859-15; name=menu.htm Content-ID: Content-Location: http://www.ine.es/jaxi/menu.do?type=pcaxis&path=%2Ft25/p458&file=inebase&L=0 Content-Transfer-Encoding: Quoted-Printable = = = = = = = = = Instituto Nacional de Estad=EDstica. (National Statistics Insti= tute)
= = = = = = = = = = = =
3D"Imprimir 3D= 3D"=
3D"Inici=
= =
= =
=

3D"Foto" 3D"Lector 
La Encuesta de Presupuestos Familia= res (EPF) iniciada en enero de 2006, sustituye a la Encuesta Co= ntinua de Presupuestos Familiares (ECPF) base 1997, que con periodicidad= trimestral se realiz=F3 desde 1997 hasta 2005. La nueva encuesta sumini= stra informaci=F3n anual sobre la naturaleza y destino de los gastos de = consumo, as=ED como sobre diversas caracter=EDsticas relativas a las con= diciones de vida de los hogares.

Los gastos de consumo se refieren= tanto al flujo monetario que destina el hogar al pago de determinados b= ienes y servicios de consumo final, como al valor de los bienes percibid= os en concepto de autoconsumo, autosuministro, salario en especie, comid= as gratuitas o bonificadas y alquiler imputado a la vivienda en la que r= eside el hogar (cuando es propietario de la misma o la tiene cedida por = otros hogares o instituciones). Los gastos se registran en el momento de= adquisici=F3n, independientemente de que el pago sea al contado o a pla= zos.

El tama=F1o de muestra es de aproximadamente 24.000 hogares a= l a=F1o. Cada hogar permanece en la muestra dos a=F1os consecutivos, ren= ov=E1ndose cada a=F1o la mitad de la muestra.

La encuesta proporci= ona estimaciones del gasto de consumo anual para el conjunto nacional y = las comunidades aut=F3nomas y del consumo en cantidades f=EDsicas de det= erminados bienes alimenticios para el conjunto nacional.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = Nivel, Calidad y Condiciones de Vida = = = =
= = = = = = Encuesta de Presupuestos Familiares. Ba= se 2006 = = = =
= = = = = = = = = = =
= = = = = = Resultados = = = =
= = = = = = =DAltimo dato publicado: a=F1o 2007 y d= atos revisados de 2006 (22 diciembre 2008)= = = = = =
= = = = = Nota de prensa = = = = =
= = = = = =
 
= = = =
= = = = = = Plan de difusi=F3n
= = = =
= = = = = = = = = = =
= = = = = = Metodolog=EDa = = = =
= = = = = = Resumen metodol=F3gico = = = =
= = = = = Clasificaci=F3n de bienes y servicio= s. COICOP = = = = =
= = = = = Cuestionarios = = = = =
= = = = = =
= = = =
= = = = = = Otra informaci=F3n disponible = = = =
= = = = = = Serie enlazada   Notas so= bre el enlace = = = =
= = = = = = Microdatos de la encuesta = = = =
= = = = = =
= = = =
= = = = = = M=F3= dulo Piloto de la EPF 2007. Gasto de los hogares en educaci=F3n = = = =
= = = = = = : Dic/2008. El ocio en cifras = = = =
= = = = = =
= = = =
= = = = = = Otros enlaces de interes en INEbase = = = =
= = = = = = En= cuesta continua de presupuestos familiares. Base 1997 = = = =

= = = = = = =

= = = = = = = = = =
------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=inebase_rel.css Content-Type: text/css; charset=iso-8859-15; name=inebase_rel.css Content-Location: http://www.ine.es/inebase/css/inebase_rel.css Content-Transfer-Encoding: 8bit A:visited { color: purple; } A{ color: blue; } HR.SPR { color : #9E1B34; } TD.dattab { background : #ffffff; font : 0.75em Arial, sans-serif; color : #000000; text-align : right; white-space : nowrap; } TH.dattab { background : #fffcf0; text-align : left; } TH.seltab { background : #fffcf0; font : normal 0.8em Arial, sans-serif; text-align : left; } TH.cabtab { background : #ffd475; font : bold 0.8em Arial, sans-serif; color : #9E1B34; text-align : left; vertical-align : top; } TH.tittab { color : #9E1B34; text-align : left; font : bold 16 arial,sans-serif; } TH.subtittab { color : #9E1B34; text-align : left; font : normal 14 arial,sans-serif; } TABLE.DESCRIPCION { background : #fffcf0; font : 0.8em Arial, sans-serif; } TD.DSC { background : #ffd475; font : 0.9em Arial, sans-serif; width : 33%; border : 0px; margin : 0px 0px 0px 0px; padding : 5px; } TD.SPR { background : #fffcf0; font : 0.8em Arial, sans-serif; width : 0px; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 0px 0px 0px; } TD.MENU { background : #fffcf0; font : 0.8em Arial, sans-serif; width : 67%; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 0px 0px 0px; } TABLE.MENU { background : #fffcf0; font : 0.8em Arial, sans-serif; width : 100%; border : 0px; margin : 0px 0px; padding : 0px; } TD.N0 { background : #ffcc99; color : #9E1B34; font : bold 1em Arial, sans-serif; border : 0px; margin : 0px 0px 2px 0px; padding : 0px 8px 0px 10px; } TD.N1 { background : #ffd475; color : #9E1B34; font : bold 1em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 8px 0px 10px; } TD.T1 { background : #ffd475; color : #9E1B34; font : bold 1em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.P1 { background : #ffd475; color : #9E1B34; font : bold 1.1em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.P1R { background : #9E1B34; color : white; font : bold 1.1em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.P2 { background : #ffcc99; font : bold 0.9em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 10px 0px 10px; } TD.P2A { background : #ffcc99; font : normal 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 10px 0px 10px; } TD.p5 { background : #ffcc99; font : bold 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 10px 0px 20px; } TD.T2 { background : #fffcf0; font : 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 20px 0px 30px; } TD.N2 { background : #fffcf0; font : 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 16px 0px 20px; } TD.M0 { font : 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 16px 0px 20px; text-align : center; top : auto; } TD.N3 { background : #fffcf0; font : bold 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 32px 0px 48px; } TD.T3 { background : #fffcf0; font : 0.8em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 20px 0px 30px; } TD.P3 { background : #fffcf0; font : 0.9em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 10px; padding : 2px 20px 2px 20px; } TD.RN { background : #fffcf0; font : 0.7em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 48px 0px 64px; } TD.RNn { background : #fffcf0; font : 0.8em Arial, sans-serif; border : 0px; padding : 0px 48px 0px 104px; } td.c1 { background : #ffcc99; color : #9E1B34; margin : 2px 0px 2px 0px; font : bold 0.8em Arial, Helvetica, sans-serif; } td.c2 { color : #9E1B34; margin : 2px 0px 2px 0px; font : normal 0.7em Arial, Helvetica, sans-serif; } td.c3 { background : #ffd475; } FONT.Cabecera { color : #a22538; font : 1.5em Arial, sans-serif; } .cambio { background : #ffcc99; color : #9E1B34; font : bold 0.9em Arial, sans-serif; border : 0px; padding : 2px 2px 2px 2px; } .ficha { color : #9E1B34; font : bold 0.8em Arial, sans-serif; margin-left: 20px; } .ap { color : #9E1B34; font : bold 0.90em Arial, sans-serif; margin-left: 30px; padding : 3px 10px 0px 20px; } .apnonm { color : #9E1B34; font : normal 0.8em Arial, sans-serif; margin-left: 20px; padding : 0px 20px 0px 35px; } .diez { background-color: #ffd475; font-family: Arial, helvetica, sans-serif; font-weight : bold; color: #9E1B34; } .diezn { background-color: #ffd475; font-family: Arial, helvetica, sans-serif; font-weight : normal; color: #9E1B34; } .ochorc { color: #9E1B34; font-family: Arial, helvetica, sans-serif; font-weight : normal; font-size : 0.85em; font-style : italic; } .apnon { color : #9E1B34; font : normal 0.90em Arial, sans-serif; margin-left: 30px; padding : 3px 10px 0px 20px; } .apnon2 { color : #9E1B34; font : normal 0.90em Arial, sans-serif; margin-left: 10px; } .apnonnom { color : #9E1B34; font : normal, Arial, sans-serif; } .app { color : #9E1B34; font : normal 0.8em Arial, sans-serif; margin-left: 20px; padding : 0px 20px 0px 50px; } .right { font : normal 0.8em Arial, sans-serif; padding-left : 250; } .p5a { background : #ffcc99; font : bold 0.90em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 8px 0px 10px; } .sinesp { margin-bottom : 0px; margin-top : -2px; padding : 2px 0px 0px 0px; } .SPR { background : #fffcf0; font : 0.8em Arial, sans-serif; margin : 2px 0px 2px 0px; } SELECT{ border : 1px; border-style : solid; border-color : #800000; color:#0000FF; font : 1em Arial, sans-serif; } .azuldiezu { color: Blue; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=inebase.js Content-Type: application/javascript; charset=iso-8859-15; name=inebase.js Content-Location: http://www.ine.es/inebase/js/inebase.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gYm90b24obixzcmMpIHsKICBkb2N1bWVudC5pbWFnZXNbbl0uc3Jj PXNyYzsKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gYm90b24yKG4sc3JjKSB7 CiAgICAgICAgbi5zcmM9c3JjOwogICAgICAgIHJldHVybiB0cnVlOwp9CgoKZnVu Y3Rpb24gQ19JKCkgewogIGRvY3VtZW50LmZvcm1zWydDSSddLnN1Ym1pdCgpOwog IHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBTX1AobikgewogIGRvY3VtZW50LmZv cm1zW25dLnN1Ym1pdCgpOwogIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBVX00o bWVudSxvcGNpb24sbml2ZWwpIHsKICBkb2N1bWVudC5mb3Jtc1snQ0knXS5lbGVt ZW50c1snTSddLnZhbHVlPW1lbnU7CiAgZG9jdW1lbnQuZm9ybXNbJ0NJJ10uZWxl bWVudHNbJ08nXS52YWx1ZT1vcGNpb247CiAgZG9jdW1lbnQuZm9ybXNbJ0NJJ10u ZWxlbWVudHNbJ04nXS52YWx1ZT1uaXZlbDsKICBkb2N1bWVudC5mb3Jtc1snQ0kn XS5zdWJtaXQoKTsKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gVV9NMihwYXRo LGZpbGUsbml2ZWwpIHsKICBkb2N1bWVudC5mb3Jtc1snbWVudWZvcm0nXS5lbGVt ZW50c1snZmlsZSddLnZhbHVlPWZpbGU7CiAgZG9jdW1lbnQuZm9ybXNbJ21lbnVm b3JtJ10uZWxlbWVudHNbJ3BhdGgnXS52YWx1ZT1wYXRoOwogIGRvY3VtZW50LmZv cm1zWydtZW51Zm9ybSddLnN1Ym1pdCgpOwp9CgoKLypmdW5jdGlvbiBVX00yKHBh dGgsZmlsZSxuaXZlbCkgewogIHZhciBVUkw9Ii9qYXhpL21lbnUuZG8/dHlwZT1w Y2F4aXMiOwogIHZhciBwYXRoVXJsPSIiOwogIHZhciBmaWxlVXJsPSIiOwoKICBp ZiAocGF0aCE9bnVsbCAmJiBwYXRoIT0iIikgcGF0aFVybD0iJnBhdGg9IitwYXRo OwogCiAgaWYgKGZpbGUhPW51bGwgJiYgZmlsZSE9IiIpIGZpbGVVcmw9IiZmaWxl PSIrZmlsZTsKCiAgZG9jdW1lbnQubG9jYXRpb24uaHJlZj1VUkwrcGF0aFVybCtm aWxlVXJsOwp9Ki8KCmZ1bmN0aW9uIEdUSUUoKSB7CiAgZG9jdW1lbnQuZm9ybXNb J0NJJ10uZWxlbWVudHNbJ08nXS52YWx1ZT0nZ3RpZSc7CiAgZG9jdW1lbnQuZm9y bXNbJ0NJJ10uc3VibWl0KCk7CiAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIE1l bnNhamUgKGZpY2hlcm8sc2Nyb2xsLGFuY2hvLGFsdG8pIHsKICB2YXIgdz1hbmNo bzsKICB2YXIgaD1hbHRvOwogIGlmIChzY3JvbGw9PTApewogICAgcHJvcD0ndG9v bGJhcj1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rvcmllcz1ubyxzdGF0dXM9bm8sbWVu dWJhcj1ubyxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXMsd2lkdGg9Jyt3Kycs aGVpZ2h0PScraAogICAgbXNnV2luZG93PXdpbmRvdy5vcGVuKGZpY2hlcm8sJ2xl Z2FsJyxwcm9wKQogIH0gZWxzZSB7CiAgICBwcm9wPSd0b29sYmFyPW5vLGxvY2F0 aW9uPW5vLGRpcmVjdG9yaWVzPW5vLHN0YXR1cz1ubyxtZW51YmFyPW5vLHNjcm9s bGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMsd2lkdGg9Jyt3KycsaGVpZ2h0PScraAog ICAgbXNnV2luZG93PXdpbmRvdy5vcGVuKGZpY2hlcm8sJ2xlZ2FsJyxwcm9wKQog IH0KfQoKZnVuY3Rpb24gTWVuc2FqZTEgKGZpY2hlcm8xLHNjcm9sbCxhbmNobyxh bHRvKSB7CiAgdmFyIHc9YW5jaG87CiAgdmFyIGg9YWx0bzsKICBpZiAoc2Nyb2xs PT0wKXsKICAgIHByb3A9J3Rvb2xiYXI9bm8sbG9jYXRpb249bm8sZGlyZWN0b3Jp ZXM9bm8sc3RhdHVzPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubyxyZXNpemFi bGU9eWVzLHdpZHRoPScrdysnLGhlaWdodD0nK2gKICAgIG1zZ1dpbmRvdz13aW5k b3cub3BlbihmaWNoZXJvMSwnZmljaGEnLHByb3ApCiAgfSBlbHNlIHsKICAgIHBy b3A9J3Rvb2xiYXI9bm8sbG9jYXRpb249bm8sZGlyZWN0b3JpZXM9bm8sc3RhdHVz PW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz15ZXMscmVzaXphYmxlPXllcyx3aWR0 aD0nK3crJyxoZWlnaHQ9JytoCiAgICBtc2dXaW5kb3c9d2luZG93Lm9wZW4oZmlj aGVybzEsJ2ZpY2hhJyxwcm9wKQogIH0KfQoKZnVuY3Rpb24gTWVuc2FqZTIgKGZp Y2hlcm8yLHNjcm9sbCxhbmNobyxhbHRvKSB7CiAgdmFyIHc9YW5jaG87CiAgdmFy IGg9YWx0bzsKICBpZiAoc2Nyb2xsPT0wKXsKICAgIHByb3A9J3Rvb2xiYXI9bm8s bG9jYXRpb249bm8sZGlyZWN0b3JpZXM9bm8sc3RhdHVzPW5vLG1lbnViYXI9bm8s c2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLHdpZHRoPScrdysnLGhlaWdodD0n K2gKICAgIG1zZ1dpbmRvdz13aW5kb3cub3BlbihmaWNoZXJvMiwnZmljaGExJyxw cm9wKQogIH0gZWxzZSB7CiAgICBwcm9wPSd0b29sYmFyPW5vLGxvY2F0aW9uPW5v LGRpcmVjdG9yaWVzPW5vLHN0YXR1cz1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9 eWVzLHJlc2l6YWJsZT15ZXMsd2lkdGg9Jyt3KycsaGVpZ2h0PScraAogICAgbXNn V2luZG93PXdpbmRvdy5vcGVuKGZpY2hlcm8yLCdmaWNoYTEnLHByb3ApCiAgfQp9 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=jaxi_p.css Content-Type: text/css; charset=iso-8859-15; name=jaxi_p.css Content-Location: http://www.ine.es/jaxi/css/jaxi_p.css Content-Transfer-Encoding: 8bit table.general{ border : 0px; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; width:100%; } H1.jaxi{ color : #993333; font : bold 1em Arial, sans-serif; border : 0px; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; } H2.jaxi{ font : bold 1em Arial, sans-serif; border : 0px; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; } .boton{ background : #971b32; color : #ffffff; font: normal 0.8em Arial, Helvetica, sans-serif; border : thin outset white; cursor : pointer; text-align : center; padding-top : 2px; display : block; letter-spacing : 0.1em; } IMG{ border:0px; } TABLE.error{ background-color:#FFFCF0; color : #0000CC; font : bold 1em Arial,sans-serif; } TD.title_desc { background : #ffd475; color : #993333; font : bold 1.2em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.barra_vertical { margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; background : #971b32; width:2pt; } TD.tabla_desc { color : #971b32; font : bold 1.1em Arial, sans-serif; margin : 2px 0px 2px 0px; padding : 0px 10px 0px 10px; } TD.capitulo_desc { background : #ffcc99; font : bold 0.9em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 10px 0px 10px; } TD.tabla_inebase { font : 0.9em Arial, sans-serif; border : 0px; margin : 2px 0px 2px 10px; padding : 2px 20px 2px 20px; } TD.unidades { color : #971b32; font : 0.8em Arial,sans-serif; margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.inf { margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; color : #971b32; font : 0.8em Arial,sans-serif; } .tablaBotones{ padding : 0px 100px 0px 100px; } .caja{ border : 1px; border-style : solid; border-color : #800000; color : #0000CC; font : 0.8em Arial,sans-serif; } .cajaBusq{ border : 1px; border-style : solid; border-color : #800000; color : #0000CC; font : 0.8em Arial,sans-serif; size : 8; } .cajaBuscador{ border-color: #971b32; border-width: 1px 1px 1px 1px; border-style: solid solid solid solid; height: 20px; color : #0000CC; font-family: Arial, Helvetica, sans-serif; font-size: 0.8em; } .tablaVar { border : 1px; border-style : solid; border-color : #ffd475; color : #0000CC; font : bold 1em Arial,sans-serif; } SELECT.cajaVar{ border : 1px; border-style : solid; border-color : #800000; color : #0000FF; font : 0.8em Arial, sans-serif; width:350px; } .cabVar { background : #ffd475; color : #971b32; font : bold 0.9em Arial, sans-serif; } .input_seleccionados { BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 0px; FONT: bold 1em Arial, Helvetica, sans-serif; BORDER-LEFT: 0px; COLOR: #971b32; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: transparent; vertical-align: baseline; } .textoBoldNegro{ color : #000000; font : bold 0.9em Arial,sans-serif; } .textoNegro{ color : #000000; font : 0.8em Arial,sans-serif; } .textoGr { color : #971b32; font : bold 1.2em Arial,sans-serif; } .texto { color : #971b32; font : 0.8em Arial,sans-serif; } .textoPeq { color : #971b32; font : 0.8em Arial,sans-serif; } .input_total { BORDER-RIGHT: 1px; BORDER-TOP: 1px; MARGIN: 1px; FONT: 0.7em Arial, Helvetica, sans-serif; BORDER-LEFT: 1px; COLOR: #971b32; border-color : #971b32; BORDER-BOTTOM: 1px; BORDER-BOTTOM-style: solid; BACKGROUND-COLOR: transparent } .tableData { margin : 2px 0px 2px 0px; padding : 0px 5px 0px 10px; } TD.dataCellInfo { background : #ffffff; font : 0.8em Arial, sans-serif; color : #000000; text-align : right; padding : 2px 5px 2px 10px; background-image : url(../imagenes/marcador.gif); background-position : top right; background-repeat : no-repeat; } TD.dataCell { background : #ffffff; font : 0.8em Arial, sans-serif; color : #000000; text-align : right; padding : 2px 5px 2px 10px; } TH.tableCellGr { font :bold 0.9em Arial, sans-serif; background: #ffd475; color: #971b32; text-align: left; padding : 2px 5px 2px 10px; } TH.tableCellMed { font :bold 0.8em Arial, sans-serif; background: #ffd475; color: #971b32; text-align: left; padding : 2px 5px 2px 10px; } TH.tableCellPeq { font : 0.7em Arial, sans-serif; background: #ffd475; color: #971b32; text-align: left; padding : 2px 5px 2px 10px; } .cajaDesc{ border : 0.8px; border-style : solid; border-color : #800000; color : #0000CC; font : 0.9em Arial,sans-serif; } .pietexto { color : #971b32; font : 0.5em Arial, sans-serif; } .tableVar{ color : #971b32; margin : 2px 0px 2px 0px; font : normal 0.8em Arial, Helvetica, sans-serif; width:350px; } /* Estilos para links */ .inebase:link { color : #0000FF; font : 1em Arial, sans-serif; } .inebase:visited { color : #0000FF; font : 1em Arial, sans-serif; text-decoration : underline; } .L1:link { color : #971b32; font : bold 1em Arial, sans-serif; text-decoration : underline; } .L1:visited { color : #971b32; font : bold 1em Arial, sans-serif; text-decoration : underline; } .L2:link{ color : #000000; font : bold 1em Arial, sans-serif; text-decoration : underline; } .L2:visited{ color : #000000; font : bold 1em Arial, sans-serif; text-decoration : underline; } .link:link { color : #971b32; font : bold 1em Arial, sans-serif; text-decoration : none; } .link:visited { color : #971b32; font : bold 1em Arial, sans-serif; text-decoration : none; } .pielink:link { color : #971b32; font : 0.5em Arial, sans-serif; } .pielink:visited { color : #971b32; font : 0.5em Arial, sans-serif; } .idiomalink { color : #971b32; font : 0.4em Arial, sans-serif; } .idiomalink:link { color : #971b32; font : 0.4em Arial, sans-serif; text-decoration : none; } .idiomalink:visited { color : #971b32; font : 0.4em Arial, sans-serif; text-decoration : none; } .idiomalinkactive:link { color : #971b32; font :bold 0.7em Arial, sans-serif; text-decoration : none; } .idiomalinkactive:visited { color : #971b32; font : bold 0.7em Arial, sans-serif; text-decoration : none; } .procesando{ background-color: #FFFCF0; } .textoprocesando{ font: bold 0.8em Arial, Helvetica, sans-serif; color : #971b32; } .dataLink:link { font : 0.8em Arial, sans-serif; color : #000000; text-decoration : none; } .sinsubrayar:link{ text-decoration: none; } .negrita{ font-weight: bold; } SELECT.sizecombo{ height: 10em; width: 20em; } .tablaVarWidth{ width: 100px; } TD.tabla_desc_titulo_var { height: 40px; vertical-align: bottom; } .textoPeqAdicional { height:30px } .anchojusto { white-space: nowrap; } .sinsubrayar{ text-decoration: none; } .ilumina{ background: #ffd475; font : 0.8em Arial, sans-serif; color : #000000; text-align : right; padding : 2px 5px 2px 10px; background-image : url(../imagenes/marcador.gif); background-position : top right; background-repeat : no-repeat; } .desilumina{ background: blue; background: #ffffff; font : 0.8em Arial, sans-serif; color : #000000; text-align : right; padding : 2px 5px 2px 10px; background-image : url(../imagenes/marcador.gif); background-position : top right; background-repeat : no-repeat; } TD.a ilumina{ background: #ffd475; } TD.a desilumina{ background: #ffffff; } .capacelda{ width:0px; position: relative; visibility: hidden; } SELECT.download{ font-family: Arial, Helvetica, sans-serif; font-size: 1em; color: #971B32; background-color:#ffffff; padding : 2px 5px 2px 10px; } TABLE.MENUJAXI { background : #fffcf0; font : 1em Arial, sans-serif; width : 100%; border : 0px; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; } TD.MENUJAXI { background : #fffcf0; font : 1em Arial, sans-serif; width : 67%; border : 0px; margin : 2px 0px 2px 0px; padding : 0px 0px 0px 0px; } A:visited { color: purple; } A{ color: blue; } SELECT.menuSelect{ border : 1px; border-style : solid; border-color : #800000; color : #0000FF; font : 1em Arial, sans-serif; } DIV.resize{ width: 15px; height: 28px; background-image: url(../imagenes/barraExpandir.gif); } .puntero{ cursor : pointer; } IMG.tamanio{ height:12px; } .tamanioTextoBoton{ font:0.80em Arial, sans-serif; } DIV.capagrafica{ align:left; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=jaxi.js Content-Type: text/javascript; charset=iso-8859-15; name=jaxi.js Content-Location: http://www.ine.es/jaxi/js/jaxi.js Content-Transfer-Encoding: 8bit document.write(''); function setStatusData(headers){ var texto=""; var criterios=""; var headersArray=headers.split(" "); for (i=0;imaxSelection) alert(reducir); else if(document.tabla.NumCeldas.value<=0) alert(seleccionar); else { if (opc=="consulGrafico"){ document.tabla.muestraGrafico.value='muestraGrafico'; } mostrarLoading(2); submitTable(); } //else createTarget(document.forms['tabla'],true); } function submitTable(){ if (getOpenWindow()!=null && getOpenWindow()=="n"){ document.forms['tabla'].target='_blank'; } document.forms['tabla'].submit(); } function showPopUpWindow(windowNameToOpen,windowW,windowH,windowName) { var windowX=(screen.width/2)-(windowW/2); var windowY=(screen.height/2)-(windowH/2); prop='toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width='+windowW+',height='+windowH; msgWindow=window.open(windowNameToOpen, windowName, prop); msgWindow.focus(); msgWindow.moveTo(windowX, windowY); } function todos(selTodas,variable,totsel){ var size=eval ("document.tabla."+variable+".length"); if (selTodas) eval ("document.tabla."+totsel+".value="+size); else eval ("document.tabla."+totsel+".value=0"); for (var i = 0; i < size ; i++) eval("document.tabla."+variable+".options[i].selected="+ selTodas); total(variable); } function selTodos(){ var num=document.tabla.numCri.value; for(var j=1;j<=num;j++){ var tipo=eval("document.tabla.cri"+j+".type"); if (tipo=="select-multiple" || tipo=="select-one"){ var variable="cri"+j; var sel="sel_"+j; todos(true,variable,sel); } } } function total(){ var num=document.tabla.numCri.value; var tot=1; for(var j=1;j<=num;j++){ var tipo=eval("document.tabla.cri"+j+".type"); if (tipo=="select-multiple" || tipo=="select-one"){ var val=eval ("document.tabla.sel_"+j+".value"); tot=tot*val; } } document.tabla.NumCeldas.value=tot; } function cuantos(totsel,variable){ var num=1; for (var i = 0; i < eval ("document.tabla."+variable+".length") ; i++) { if (eval("document.tabla."+variable+".options[i].selected") == true) { eval ("document.tabla."+totsel+".value="+num); num++; } } total(); } function ordenarSelect(opcion,object){ if (opcion=='up'){ for(var i = 0;i < eval('document.tabla.'+object+'.options.length');i++){ if (eval('document.tabla.'+object+'.options[i].selected==true')){ if (i>0){ textoSup=eval('document.tabla.'+object+'.options[i].text'); valorSup=eval('document.tabla.'+object+'.options[i].value'); textoInf=eval('document.tabla.'+object+'.options[i-1].text'); valorInf=eval('document.tabla.'+object+'.options[i-1].value'); eval('document.tabla.'+object+'.options[i-1].text=textoSup'); eval('document.tabla.'+object+'.options[i-1].value=valorSup'); eval('document.tabla.'+object+'.options[i].text=textoInf'); eval('document.tabla.'+object+'.options[i].value=valorInf'); eval('document.tabla.'+object+'.options[i-1].selected=true'); eval('document.tabla.'+object+'.options[i].selected=false'); }else{ alert(primero); } } } }else{ for(var i = eval('document.tabla.'+object+'.options.length-1');i >= 0;i--){ if (eval('document.tabla.'+object+'.options[i].selected==true')){ if (eval('i-1){ eval("document.getElementById('"+variable+"').options["+i+"].selected=true"); } else if(opc=='start' && auxValor.indexOf(valor)==0){ eval("document.getElementById('"+variable+"').options["+i+"].selected=true"); } } cuantos(sel,variable); } } function ltrim(s) { return s.replace(/^\s+/, ""); } function rtrim(s) { return s.replace(/\s+$/, ""); } function trim(s) { return rtrim(ltrim(s)); } function imprimir(){ window.print(); } function favoritos(titulo){ window.external.AddFavorite(document.location.href,titulo); } function setTypeOpenWindow(){ var value=readCookie("openWindow"); if (value==null){ createCookie("openWindow","n",CookieNumDays); }else{ if (value=="1") createCookie("openWindow","n",CookieNumDays); else createCookie("openWindow","1",CookieNumDays); } window.location.reload(); } function getOpenWindow(){ var value=readCookie("openWindow"); return value; } function aleatorio(){ return parseInt(Math.random()*999999); } function replaceAll(cadena,cadenaBusq,cadenaFinal) { var pos = 0; var aux = ""; while (cadena.indexOf(cadenaBusq,pos) != -1){ aux += cadena.substring(pos,cadena.indexOf(cadenaBusq,pos)); aux += cadenaFinal; pos = (cadena.indexOf(cadenaBusq,pos) + cadenaBusq.length); } aux += cadena.substring(pos,cadena.length); return aux; } //function createTarget(form,doSubmit) { //Esta funcion es usada para poder abrir los furmulario en una ventana y //poder establecer las propiedades de la misma /*toolbar=" + toolbar + ",location=" + location + ", directories="+ directories +",status=" + status + ", menubar=" + menubar +",scrollbars="+ scrollbars + ",resizable=" + resizable + ", width=" + width + ",height=" + height;*/ //Esta funcion será llamada desde el on submit() //estableciendo en el target--> nombreVentana:PropiedadesVentana //nombreventana=> NombreMarcoParaForm~ArchivoBase~NombreVentanaParaArchivoBase //Los dos ultimos parametros son opcionales //en el caso de hacer submit por Javascript se recomienda usar la funcion //justo antes del submit /* var nameAleatorio="dataPage"+aleatorio(); var _target = form.target; _colon = _target.indexOf(":"); _winfile=''; _wintarget=''; if(_colon != -1) { form.target =_target.substring(0,_colon).split("~")[0]; if (_target.substring(0,_colon).split("~").length>0){ _winfile=_target.substring(0,_colon).split("~")[1]; } if (_target.substring(0,_colon).split("~").length>1){ _wintarget=_target.substring(0,_colon).split("~")[2]; if (getOpenWindow()!=null && getOpenWindow()=="n") _target=replaceAll (_target, _wintarget, nameAleatorio); }else{ _wintarget=_target.substring(0,_colon).split("~")[0]; } form.args = _target.substring(_colon+1); } else if(typeof(form.args)=="undefined") { form.args = ""; } if(form.args.indexOf("{")!=-1) { _args = form.args.split("{"); form.args = _args[0]; for(var i = 1; i < _args.length;i++) { _args[i] = _args[i].split("}"); form.args += eval(_args[i][0]) + _args[i][1]; } } form.args = form.args.replace(/ /g,""); _win = window.open(_winfile,_wintarget,form.args); _win.focus(); if (doSubmit){ form.submit(); form.target=_target, _wintarget, nameAleatorio; }else{ return true; } }*/ ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=sort.js Content-Type: text/javascript; charset=iso-8859-15; name=sort.js Content-Location: http://www.ine.es/jaxi/js/sort.js Content-Transfer-Encoding: 8bit var SentidoASC= new Image(); SentidoASC.src="imagenes/cambiosentidoASC.gif" var SentidoDESC= new Image(); SentidoDESC.src="imagenes/cambiosentidoDESC.gif" function CambiaImagenSentido(img){ if (img.src.indexOf('ASC')>0) img.src=SentidoDESC.src else img.src=SentidoASC.src } function ReverseFormSelect(VarSelect){ //Coloca en orden inverso los elementos de la select var auxText;//variable auxiliar para almacenar temporalmente el dato Text var auxValue;//variable auxiliar para almacenar temporalmente el dato Value var auxSelected;//variable auxiliar para almacenar temporalmente el dato selected var longitud=VarSelect.options.length; for (var i=0;i0){ auxSelected=VarSelect.options[0].selected; VarSelect.options[0].selected=false; VarSelect.options[0].selected=auxSelected; } } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=resize.js Content-Type: text/javascript; charset=iso-8859-15; name=resize.js Content-Location: http://www.ine.es/jaxi/js/resize.js Content-Transfer-Encoding: 8bit var move = false; var position; var object; var selectObj; document.onmouseup = onMouseUp; document.onmousemove = onMouseMove; function onMouseDown(obj,select,evnt){ var e = evnt || window.event move = true; if (e.clientX) position = e.clientX; else if (e.x) position = e.x; object=obj; selectObj=select; } function onMouseMove(evnt){ var e = evnt || window.event if (move) { if (e.clientX){ ResizeListbox(e.clientX - position, object, selectObj); position = e.clientX; }else if (e.x){ ResizeListbox(e.x - position, object, selectObj); position = e.x; } return false; } } function onMouseUp(){ move = false; window.status=''; } function ResizeListbox(whereto, ob,sel){ window.status="entro"; var begin = document.getElementById(ob).width; var intbegin = parseInt(begin); var newwidth = intbegin + whereto; window.status=document.getElementById(ob).width; //Limitamos el resize a 250 como mínimo if (newwidth >= 250){ window.status=newwidth; document.getElementById(ob).width = newwidth; document.forms['tabla'].elements[sel].width=newwidth; } document.getElementById(ob).innerHtml=newwidth; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=formato.css Content-Type: text/css; charset=iso-8859-15; name=formato.css Content-Location: http://www.ine.es/menuapp/css/formato.css Content-Transfer-Encoding: 8bit form{ page-break-after: avoid; padding-bottom: 0px; margin-bottom: 0px; page-break-before: avoid; display:inline; } .minWidth{ width:1%; } .maxWidth{ width: 100%; } div.espacio { font-size:0%; height: 5px; padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; } .espacio { width: 10px; height: 10px; clear: both; } img.sinborde{ border: none; padding-left: 0px; padding-right: 0px; margin-left: 0px; margin-right: 0px; } img.alineaizquierda{ float: left; vertical-align: top; margin: 0 1em 0 1em; } img.alineaderecha{ float: right; vertical-align: top; margin: 0 1em 0 1em; } img.alineaderechatotal{ float: right; vertical-align: top; margin: 0 0em 0 0em; } TD.FondoPagina{ background-color: #FFFCF0; } TD.FondoMenuBotones{ background-color: #FFFFFF; } br.lineanueva { clear: both; } .fuente_rojoine { color: #9E1B34; } .baseline{ vertical-align: bottom; } .arriba { vertical-align: top; } .alineaderecha { text-align : right; } .oculto { position:absolute; left:-9999px; } .centrar { text-align:center; } .textizquierda { text-align:left; } /*Formato de los botones INE*/ a.boton { text-decoration: none; color: #9E1B34; background: White; padding: 2px 7px 2px 7px; border: 1px solid #9E1B34; cursor: pointer; margin-top:0px; margin-bottom:0px; } a.boton:hover { background: #9E1B34; color: white; } a.boton-hover { background: #9E1B34; color: white; } a.botonRojo { text-decoration: none; color:#ffffff; background: #9E1B34; padding: 2px 7px 2px 7px; border: 1px solid #9E1B34; cursor: pointer; margin-left: 0px; margin-right: 0px; margin-top:0px; margin-bottom:0px; } a.botonRojo:hover { background: #FFD475; color: #000000; } a.botonRojo-hover { text-decoration: none; background: #FFD475; color: #000000; cursor: pointer; border: 1px solid #9E1B34; margin-left: 0px; margin-right: 0px; margin-top:0px; margin-bottom:0px; padding: 2px 7px 2px 7px; } input { text-decoration: none; } input.rojo { border: 1px solid #9E1B34; vertical-align: middle; } select{ text-decoration: none; font-size: 1em; } select.rojo{ text-decoration: none; background: White; border: 1px solid #9E1B34; } SELECT.download{ font-family: Arial, Helvetica, sans-serif; background-color: #ffffff; padding: 0px 0px 0px 3px; } input.boton { text-decoration: none; color: #9E1B34; background: White; padding: 1px 3px 1px 3px; margin: 0px; border: 1px solid #9E1B34; cursor: pointer; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; overflow: visible; } input.boton:hover { text-decoration: none; background: #9E1B34; color: white; overflow: visible; } input.boton-hover { text-decoration: none; color: white; background: #9E1B34; padding: 1px 3px 1px 3px; border: 1px solid #9E1B34; cursor: pointer; margin-left: 0px; margin-right: auto; overflow: visible; } input.botonRojo { color: #ffffff; background: #9E1B34; border: 1px solid #9E1B34; cursor: pointer; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; padding: 0px 3px 0px 3px; overflow: visible; } input.botonRojo:hover { border: 1px solid #9E1B34; background: #FFD475; color: #000000; overflow: visible; } input.botonRojo-hover { color: #000000; background: #FFD475; border: 1px solid #9E1B34; cursor: pointer; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; padding: 0px 3px 0px 3px; overflow: visible; } .cursorMano{ cursor:pointer; } .noresize{ font-size: 0%; } .tam95{font-size:0.95em;} .tam90{font-size:0.90em;} .tam85{font-size:0.85em;} .tam80{font-size:0.80em;} .tam75{font-size:0.75em;} .tam70{font-size:0.70em;} .tam65{font-size:0.65em;} .tam60{font-size:0.60em;} ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=BaseINE.css Content-Type: text/css; charset=iso-8859-15; name=BaseINE.css Content-Location: http://www.ine.es/menuapp/css/BaseINE.css Content-Transfer-Encoding: 8bit /* Elementos comunes de Html */ BODY { font-family: Arial, Helvetica, sans-serif; background-color: #FFFCF0; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; color: Black; font-size: 0.9em; } HR { color: #9E1B34; } HR.fina { color: #9E1B34; border-style: solid none none none; height:1px; } SPAN { color : #9E1B34; } IMG { border : none; } /* Elementos de web INE */ .fondoINE{ background-color: #9E1B34; } .colorINE{ color: #9E1B34; } .raya { height: 1px; } .rayacorta { height: 1px; width: 5%; text-align: left; margin-right: 95%; } .border { border : none; } .sinesp { margin-bottom : -2px; margin-top : -2px; } .nowrap { white-space: nowrap; } .left { text-align: left; } br.left { clear: left; } .right { text-align: right; } .miga { font-family: Arial,Helvetica,sans-serif; color: #971B32; font-weight: bolder; font-size: 1.1em; } .miga a , .miga a:hover , .miga a:visited , .miga a:link , .miga a:active, .miga a:focus{ font-weight: normal; color: #9E1B34; text-decoration: none; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://www.ine.es/menuapp/img/fondo.jpg Content-Transfer-Encoding: Base64 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 q8jCntmpihbVvNYJj1LWHTy1c031MDRVYvgwNIyyA8lBkA1AGoA4kKejslaavdBl lUWmrUj5SZ2WUYTMpaHRpvoaXZErOm+G4xS7spWclyyFLuzdCsumSatbIakuMSar ZZJqtvW1M8jrQ1YIUv7TWXLNo3GUszg1htCvwnpkuxr7JY+sVJWVZffW0ZeqwWOR NJKFrYSa8CdWjJ7lpk/+zUZWzrMDTfUpNULtVMPDhVW/Jq11tar7ZgszoU6q/JLf +5WZiCe1tH9RaVafm8ZX7CzUfbdjV3vmlJ+e5ljKU1WrK0qLNGp+jNRyJOIls2p8 E0+5fsSmMrK5j8OexraEqWUqdWPNBo0qMoDC7ScF3MTA4a8fvYGKlcXTFFpp37M/ qYl/A7z/AFGp/ai4dMINoAAiGAFAAABAiqZEIACgIAp5fmCT1sIeoKMhCCgForRT pSyugLb4zs6k/RHPJtz6SKWkBOJB520t2kg5GAZYBrYQal1QaJqDAnRHoEVReJYA 6EFduz/6hL0LCOe6ji8q9yIz0hSwAYAMBC8OIUvCQQvDkFLE0ELU/IKakEPKAADA UnCL6BCdCIC8OceWTAqNa6j1yBSvaq5ogaRv4dU0FawuoS4SA1VWL8mAfdPpjsBS bXJUcQNI3V1DqpL1CNHtFSWmpRWHx0hXGnCNTMM6OkZeQJdkYUKiTU1l9AG7NpZz uCMowqSzpXANE41FxiBOoB6gDUAagHqAeoAUwL8QyKVU0KU0zI2ppPh+xpHRFVFw l+pkaeJNcUgJdffhr5gRKqn1AjOQAASTNDWOpcraMo1jUrLrnuaFOevdUpqS/wDf MDKVrYz409L81u+gGctlUpe7qyXfeEplLZlyuWUZfsE1cNezu4zbdGWMcVv+h6eD OMUywcz9ndJOL8meyM4lx+uRxKxrLsv/AGrezq9ZQcf0webg98ods/SHEepwoAGC gIAoAGQIoDMkO3ai9uhNfFSX7Hn+PPt/9duXqHEj1OKMce58vn9nv44/k1KUeDwc 1ptC9uY/Hn0YNW0NqVVzxUiWzo6IbUoPmi4l2YnBo7i2q8tTD9TUZJqu3pzV3Cos OGGm0xMrMPQ0dULSS0sts0AlDAAFAEsDhaxXqL1z+pppWAKANof01GX4ZEw7lqOn CzaEZDNAMgAAAAAQSjNKQDRkUAwgksxYC2h7WyKM+Ol4Lh3LfHLw3ofFHOYUtEfh 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 JGsCDRBmW+0v9k1h1LUdOM0yZlAABQAgAD//2Q== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.ine.es/menuapp/img/linea.gif Content-Transfer-Encoding: Base64 R0lGODlhAQBkAIAAAJkzM////yH5BAEHAAEALAAAAAABAGQAAAIKBIKpy+0Po5yt AAA7 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.ine.es/menuapp/img/fichaizq.gif Content-Transfer-Encoding: Base64 R0lGODlhWAJkAPcAAJcbMv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABYAmQAAAj/AAEIHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDNq3Mixo8ePIEOKLBigpMmTKFOqXMmypcuXMGPKnEmzps2b OHPq3Mmzp8+fQIMKHUq0KICiSJMqXcq0qdOnUKNKnUqV6NGqWLNq3cq1q9evYMPO vCq2rNmzaNOqXctWKNm2cOPKnUu3rl2eb+/q3cu3r9+/T/MCHky4sOHDfgUjXsy4 sePHURVDnky5suXLKiVj3sy5s+e7mj+LHk26dNbQplOrXs16J+rWsGPLjv16tu3b uDHXzs27t+/Bu38LH06cbfDiyJMrP728ufPnWI9Dn069Ok3p1rNr3459u/fvzbuD /x9P3rf48ujTwz6vvr170ezfy59POT79+/gN28/Pv7/e/f4FKKBxAxZoIGAAHqjg glUlyOCDEC7lYIQUVvjThBZmqGFNGG7o4YcrdQjiiCCKSOKJGZqI4ooQqsjiiwe6 COOMAcpI44342Yjjju/pyOOP6PkI5JDfCUnkkdYZieSSzynJ5JPJOQnllMJJSeWV uVmJ5Zayacnll6t5CeaYpIlJ5pmdmYnmmpapyeabj7kJ55yIyUnnncDhqWdxdu7p p119/iloXIEOaqhahR6qaFmJLuqoV40+Kilzk1bKWaSWZuoUppp2mhSnnobqlqik HgZqqajmdGqqrF7X6qugwWwq61yrzmrrSbXeemuuus7Ka6+w/gpsq8IOm2qxxpaK bLKiLsusp84+q2m00lpKbbWTXovto9puu2i33h4KbriDjkvun+aeu2e66uLJbrt0 vgsvnPLOy2a99qKJb75k7ssvmP7+y2XAAmMJQEAAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.ine.es/menuapp/img/fichadch.gif Content-Transfer-Encoding: Base64 R0lGODlhWAJkAPcCAJcbMv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAABYAmQAAAj/AAEIHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDNq3Mixo8ePIEOKFECSZICTKFOqXMmypcuXMGPKnEmzps2b OHPq3Mmzp8+fQIMKHUq0qNGjAEoKOMq0qdOnUKNKnUq1qtWrWIUmNZm1q9evYMOK HUu2rFmZW8+qXcu2rdu3cOMSTSq3rt27ePPq3QsUAN+/gAMLHkz4qt/CiBMrXsw4 8eHGkCNLnkw56+PKmDNr3swZ5uXOoEOLHi34M+nTqFOrFmt6tevXsGMHbS27tu3b uE/Szs27t+/Ou38LH04ccfDiyJMrj3t8ufPn0L02j069unWj069r3869Zvbu4MOH //8uvrz56OTPq18/PD379/Bru49Pv/7p+fbz68+Mf7///4v1B+CABP4lYIEIJsic ggw2WJqDEEZ414ESVmghVBReqOGGWnHo4YdVZQjiiCS+JGKJKKZ4YoosgrhiizBq +GKMNEY4Y404KnhjjjwOuGOPQOr3Y5BExjdkkUiqd2SSTI7X5JMSLgnllNRJSeWV y1mJ5ZbEacnll715CeaYtolJ5pmvmYnmmqipyeabobkJ55yayUnnnZPZieeejOnJ 55+F+QnooIAJSuiheRmK6KJyKcroo205CumkZklK6aVhWYrpppZx6mmdn4ZKmaai lsoUqaamOhSqqrbqE6uuxnWaE6yy1koTrbbmaqKuvMKFa6/ABvBrsLwOS2yuxh5b a7LKxspss60+C22q0k5barXWhopttp5uy+2m3n57abjiTkpuuY+ei+6i6q57aLvu DgpvvH/OS++e9t57Z776zslvv2/+C/CaAg98ZsEGj4lwwl8CEBAAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.ine.es/menuapp/img/ficha_overizq.gif Content-Transfer-Encoding: Base64 R0lGODlhWAJkAJEAAJcbMv/////YhgAAACH5BAAAAAAALAAAAABYAmQAAAL/hI+p y+0Po5y02ouz3rz7D4biSJZmIqTqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMAgLM QPIJjUqn1Kr1is1qt8QlkwsOi8fksvmMTte86rb7DY/L53Tjso7P6/f8vl8I8Cc4 SFhoeKgViLjI2Oj4yKgIOUlZaXnJJYm5ydnp+SmjCTpKWmpaKHqqusraWpbqGis7 SzsEW4ubq7ubcsv7CxwM6itcbHy8SIy8zNxMp+wcLT0dBk19jZ2NZK3d7f19ww0+ Tk4uXo6eTn2u3u5uzP4uP48bT3+Pr2qfz9/Pue8voEBHAAcaPCioIMKFDJ81fAgR VcSJFPUorIgx45SL/xo7euzyMaRILBxHmjwZoyTKlSxVsnw50iXMmR1l0rxJ0SbO nQ118vxp0CfQof2EEj1KzyjSpe2UMn1qDqrUik6nWr1W9apWZ1m3ej3W9atYYGHH ms1V9qxaWWnXul3V9q1cUnHn2u1U965eS3n3+n3U969gRIEHGx5U+LBiPokXO67T +LFkOJEnW05T+bJmMpk3e870OTRe0aQvdS6N+snp1KyLrG4NG8jr2LR3zK6N28bt 3LxT9v49Zzfw4QKEE/9t/Djv5MpxM29O+zl02NKns65uHTX27KS3cw/t/bvn8OI1 ky9v+Tx6yerXO27vXjH8+Ibn0xds/77f/Pr18hjvb9d/AMol4IBuFWigWggmaNaC DIoFQAEAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline Content-Type: image/gif Content-Location: http://www.ine.es/menuapp/img/ficha_overdch.gif Content-Transfer-Encoding: Base64 R0lGODlhWAJkAPcCAJcbMv/YhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAABYAmQAAAj/AAEIHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDNq3Mixo8ePIEOKFECSZICTKFOqXMmypcuXMGPKnEmzps2b OHPq3Mmzp8+fQIMKHUq0qNGjAEoKOMq0qdOnUKNKnUq1qtWrWIUmNZm1q9evYMOK HUu2rFmZW8+qXcu2rdu3cOMSTSq3rt27ePPq3QsUAN+/gAMLHkz4qt/CiBMrXsw4 8eHGkCNLnkw56+PKmDNr3swZ5uXOoEOLHi34M+nTqFOrFmt6tevXsGMHbS27tu3b uE/Szs27t+/Ou38LH04ccfDiyJMrj3t8ufPn0L02j069unWj069r3869Zvbu4MOH //8uvrz56OTPq18/PD379/Bru49Pv/7p+fbz68+Mf7///4v1B+CABP4lYIEIJsic ggw2WJqDEEZ414ESVmghVBReqOGGWnHo4YdVZQjiiCS+JGKJKKZ4YoosgrhiizBq +GKMNEY4Y404KnhjjjwOuGOPQOr3Y5BExjdkkUiqd2SSTI7X5JMSLgnllNRJSeWV y1mJ5ZbEacnll715CeaYtolJ5pmvmYnmmqipyeabobkJ55yayUnnnZPZieeejOnJ 55+F+QnooIAJSuiheRmK6KJyKcroo205CumkZklK6aVhWYrpppZx6mmdn4ZKmaai lsoUqaamOhSqqrbqE6uuxnWaE6yy1koTrbbmaqKuvMKFa6/ABvBrsLwOS2yuxh5b a7LKxspss60+C22q0k5barXWhopttp5uy+2m3n57abjiTkpuuY+ei+6i6q57aLvu DgpvvH/OS++e9t57Z776zslvv2/+C/CaAg98ZsEGj4lwwl8CEBAAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=Menu.css Content-Type: text/css; charset=iso-8859-15; name=Menu.css Content-Location: http://www.ine.es/menuapp/css/Menu.css Content-Transfer-Encoding: 8bit .Menu_Fondo_tabla{ background: url("../img/fondo.jpg") repeat-x top right; width: 100%; } a.Menu_TituloMenu:active , a.Menu_TituloMenu:focus, a.Menu_TituloMenu:hover, a.Menu_TituloMenu:link, a.Menu_TituloMenu:visited{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.8em; color: #9e1b34; } a.Menu_TituloMenu:hover{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: aqua; } a.Menu_TituloIdioma:active , a.Menu_TituloIdioma:focus, a.Menu_TituloIdioma:link, a.Menu_TituloIdioma:visited{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: #9e1b34; } a.Menu_TituloIdioma:hover{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: #000000; } .Menu_TextSearch{ font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; border-left: 1px solid #9E1B34; border-right: 1px solid #9E1B34; border-top: 1px solid #9E1B34; border-bottom: 1px solid #9E1B34; padding: 3px 3px 3px 3px; vertical-align: middle; } input.Menu_BtnBuscar{ background: #9E1B34; border-left: 1px solid #9E1B34; border-right: 1px solid #9E1B34; border-top: 1px solid #9E1B34; border-bottom: 1px solid #9E1B34; color: #ffffff; vertical-align: middle; font-size: 0.9em; cursor: pointer; } input.Menu_BtnBuscar:hover{ background: #FFD475; color: #000000; } input.Menu_BtnBuscar-hover{ background: #FFD475; border-left: 1px solid #9E1B34; border-right: 1px solid #9E1B34; border-top: 1px solid #9E1B34; border-bottom: 1px solid #9E1B34; color: #000000; vertical-align: middle; font-size: 0.9em; cursor: pointer; } .Menu_CoomboText{ color: #9e1b34; font-family: Arial, Helvetica, sans-serif; font-size: 0.75em; } .Menu_Titulo_Secc{ font-family: Arial, Helvetica, sans-serif; font-size: 0.95em; font-weight: bold; } TD.Menu_TDLinea{ background-color: #9e1b34; height: 0.1em; } TD.Menu_TDFondo{ background-color: #ffffff; } #DIVloading { position: absolute; z-index: 10000; width: 100%; height: 100%; top: 0px; left: 0px; background-color: #FFFCF0; filter: alpha(opacity=90); -moz-opacity: 0.9; opacity: 0.9; display: none; } #iframeloading{ position: absolute; display: none; left: 0px; top: 0px; width: 0px; height: 0px; overflow: hidden; border: 0px none; } .espacio { width: 10px; height: 10px; clear: both; } #Menu_ContenidoPpal{ padding-left: 10px; padding-right: 10px; clear: both; } #MenuContenidoHTML{ padding-top: 0px; padding-bottom: 0px; padding-left: 10px; padding-right: 10px; } H1.MenuCabecera{ font-family: Arial, Helvetica, sans-serif; font-size: 0.75em; color: #9E1B34; } .Menu_botonera{ text-align: center; border-left: 1px solid #9E1B34; border-right: 1px solid #9E1B34; border-top: 1px solid #9E1B34; background-color: white; } .Menu_lineaHorizontal{ background: url("../img/linea.gif") repeat-x top; height: 1px; overflow: inherit; } .Menu_MarcoCombo{ border-left: 0.1em solid #9E1B34; border-right: 0.1em solid #9E1B34; border-top: 0.1em solid #9E1B34; border-bottom: 0.1em solid #9E1B34; background: #9E1B34; font-size: 0.1em; } .MenuSecc{ height:20px; vertical-align: middle; padding-top:4px; padding-bottom:4px; } .Menu_FlechaCombo{ background: url("../img/linea.gif") no-repeat center; } /* INICIO ToolTip*/ #dhtmlgoodies_tooltip{ background-color:#FFFFE1; border:0.1em solid #000; position:absolute; display:none; z-index:20000; padding:0.2em; font-size:0.75em; font-family: Arial, helvetica, sans-serif;; } #dhtmlgoodies_tooltipClose{ background-color: #FFD475; } #dhtmlgoodies_tooltipShadow{ position:absolute; background-color:#555; display:none; z-index:10000; } /* FIN ToolTip*/ /*INICIO Capa de posicionamiento*/ #PosTab{ position: absolute; } /* FIN Capa de posicionamiento*/ /*INICIO barra de menu*/ #MenuToolBar { margin: 0px 0px 0px 5px; float:left; } #MenuToolBar ul { padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; margin: 0px; list-style: none; } #MenuToolBar ul li { display: inline; font-size: 0.75em; } #MenuToolBar ul li a.izq:link, #MenuToolBar ul li a.izq:visited { color: #9E1B34; float: left; padding: 5px 10px 4px 10px; text-decoration: none; background-image: url(../img/fichaizq.gif); background-position: top right; background-repeat: no-repeat; border-left: 1px solid #9E1B34; } #MenuToolBar ul li a.cent:link, #MenuToolBar ul li a.cent:visited { color: #9E1B34; padding: 5px 5px 4px 5px; float: left; text-decoration: none; background-image: url(../img/fichaizq.gif); background-position: top right; background-repeat: no-repeat; } #MenuToolBar ul li a.dch:link, #MenuToolBar ul li a.dch:visited { color: #9E1B34; padding: 5px 5px 4px 5px; float: left; text-decoration: none; background-image: url(../img/fichadch.gif); background-position: top right; background-repeat: no-repeat; } #MenuToolBar ul li a.izq:hover, #MenuToolBar ul li a.izq:active, #MenuToolBar ul li a.izq:focus{ color: #9E1B34; background-image: url(../img/ficha_overizq.gif); background-position: top right; background-repeat: no-repeat; } #MenuToolBar ul li a.cent:hover, #MenuToolBar ul li a.cent:active{ color: #9E1B34; background-image: url(../img/ficha_overizq.gif); background-position: top right; background-repeat: no-repeat; } #MenuToolBar ul li a.dch:hover, #MenuToolBar ul li a.dch:active{ color: #9E1B34; background-image: url(../img/ficha_overdch.gif); background-position: top right; background-repeat: no-repeat; } /*FIN barra de menu*/ #MenuLangBar { color: #9E1B34; display:inline; float: right; vertical-align: bottom; } #MenuLangBar ul { padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; margin: 0px; list-style: none; float: left; } #MenuLangBar ul li { display: inline; font-size: 0.75em; } #MenuLangBar ul li a:link,#MenuLangBar ul li a:visited { color: #9E1B34; padding: 4px 10px 4px 10px; float: left; text-decoration: none; border-left: 1px solid #9E1B34; border-right: 1px solid #9E1B34; border-top: 1px solid #9E1B34; background-color: white; } #MenuLangBar ul li a:hover, MenuLangBar ul li a:active{ color: #9E1B34; background-color: #ffd475; } #MenuLangBar select{ font-size: 0.75em; color: #9E1B34; text-decoration: none; background: White; border: 2px solid #ffffff; vertical-align: middle; padding: 0px 0px 0px 0px; margin: 3px 1px 0px 1px; } #MenuLangBar input{ vertical-align: middle; padding: 3px 0px 3px 0px; } /* INICIO Lista estandar horizontal */ ul.horizontal { padding: 0px 0px 0px 0px; margin: 0px; list-style: none; clear:both; } ul.horizontal li { display: inline; text-align: center; } ul.horizontal li .separador{ padding: 0px 4px 0px 4px; } ul.horizontal li a{ color: #9E1B34; padding: 0px 2px 0px 2px; text-decoration: none; } /* FIN Lista estandar horizontal */ ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=thickbox.css Content-Type: text/css; charset=iso-8859-15; name=thickbox.css Content-Location: http://www.ine.es/menuapp/css/thickbox.css Content-Transfer-Encoding: 8bit /* ----------------------------------------------------------------------------------------------------------------*/ /* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ /* ----------------------------------------------------------------------------------------------------------------*/ /* *{padding: 0; margin: 0;} */ /* ----------------------------------------------------------------------------------------------------------------*/ /* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ /* ----------------------------------------------------------------------------------------------------------------*/ #TB_window { font: 12px Arial, Helvetica, sans-serif; color: #333333; } #TB_secondLine { font: 10px Arial, Helvetica, sans-serif; color:#666666; } #TB_window a:link {color: #666666;} #TB_window a:visited {color: #666666;} #TB_window a:hover {color: #000;} #TB_window a:active {color: #666666;} #TB_window a:focus{color: #666666;} /* ----------------------------------------------------------------------------------------------------------------*/ /* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ /* ----------------------------------------------------------------------------------------------------------------*/ #TB_overlay { position: fixed; z-index: 100; top: 0px; left: 0px; background-color: #ffd886; filter: alpha(opacity=75); -moz-opacity: 0.75; opacity: 0.75; height: 100%; width: 100%; } * html #TB_overlay { /* ie6 hack */ position: absolute; height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); } #TB_window { position: fixed; background: #ffffff; z-index: 102; color: #000000; display: none; border: 4px solid #525252; text-align: left; top: 50%; left: 50%; } * html #TB_window { /* ie6 hack */ position: absolute; margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } #TB_window img#TB_Image { display:block; margin: 15px 0 0 15px; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; border-top: 1px solid #666; border-left: 1px solid #666; } #TB_caption{ height:25px; padding:7px 30px 10px 25px; float:left; } #TB_closeWindow{ height:25px; padding:11px 25px 10px 0; float:right; } #TB_closeAjaxWindow{ padding:7px 10px 5px 0; margin-bottom:1px; text-align:right; float:right; } #TB_ajaxWindowTitle{ float:left; padding:7px 0 5px 10px; margin-bottom:1px; } #TB_title{ background-color:#e8e8e8; height:27px; } #TB_ajaxContent{ clear:both; padding:2px 15px 15px 15px; overflow:auto; text-align:left; line-height:1.4em; } #TB_ajaxContent.TB_modal{ padding:15px; } #TB_ajaxContent p{ padding:5px 0px 5px 0px; } #TB_load{ position: fixed; display:none; height:13px; width:208px; z-index:103; top: 50%; left: 50%; margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ } * html #TB_load { /* ie6 hack */ position: absolute; margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } #TB_HideSelect{ z-index:99; position:fixed; top: 0; left: 0; background-color:#fff; border:none; filter:alpha(opacity=0); -moz-opacity: 0; opacity: 0; height:100%; width:100%; } * html #TB_HideSelect { /* ie6 hack */ position: absolute; height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); } #TB_iframeContent{ clear:both; border:none; margin-bottom:-1px; margin-top:1px; margin-bottom:1px; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=Pie.css Content-Type: text/css; charset=iso-8859-15; name=Pie.css Content-Location: http://www.ine.es/menuapp/css/Pie.css Content-Transfer-Encoding: 8bit .Pie_TxtDireccion{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.75em; color: #9E1B34; margin: 0px; outline: none; padding: 0px; position: relative; clear: both; text-align: center; } .Pie_TxtDireccion a:active , .Pie_TxtDireccion a:focus, .Pie_TxtDireccion a:hover, .Pie_TxtDireccion a:link, .Pie_TxtDireccion a:visited{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; color: #9E1B34; font-size: 1em; margin: 0px; outline: none; padding: 0px; position: relative; } div.Pie_TxtEnlaces{ clear: both; text-align: center; } .Pie_TxtEnlacesBoderL{ border-left: 1px solid #9E1B34; display: inline; padding-left: 5px; padding-right: 5px; } a.Pie_TxtEnlaces:active , a.Pie_TxtEnlaces:focus, a.Pie_TxtEnlaces:hover, a.Pie_TxtEnlaces:link, a.Pie_TxtEnlaces:visited{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: #9E1B34; } a.Pie_TxtEnlaces-thickbox{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: #9E1B34; outline: none; position: relative; } a.Pie_TxtEnlaces-thickbox:active , a.Pie_TxtEnlaces-thickbox:focus, a.Pie_TxtEnlaces-thickbox:hover, a.Pie_TxtEnlaces-thickbox:link, a.Pie_TxtEnlaces-thickbox:visited{ text-decoration: none; font-family: Arial, Helvetica, sans-serif; font-size: 0.85em; color: #9E1B34; outline: none; position: relative; } div.PieLinHor{ padding-left: 0px; padding-right: 0px; } ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=jquery.js Content-Type: application/javascript; charset=iso-8859-15; name=jquery.js Content-Location: http://www.ine.es/menuapp/js/jquery.js Content-Transfer-Encoding: Base64 KGZ1bmN0aW9uKCl7Ci8qCiAqIGpRdWVyeSAxLjIuNiAtIE5ldyBXYXZlIEphdmFz Y3JpcHQKICoKICogQ29weXJpZ2h0IChjKSAyMDA4IEpvaG4gUmVzaWcgKGpxdWVy eS5jb20pCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VO U0UudHh0KQogKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLgog KgogKiAkRGF0ZTogMjAwOC0wNS0yNCAxNDoyMjoxNyAtMDQwMCAoU2F0LCAyNCBN YXkgMjAwOCkgJAogKiAkUmV2OiA1Njg1ICQKICovCgovLyBNYXAgb3ZlciBqUXVl cnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKdmFyIF9qUXVlcnkgPSB3aW5kb3cualF1 ZXJ5LAovLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQoJXyQg PSB3aW5kb3cuJDsKCnZhciBqUXVlcnkgPSB3aW5kb3cualF1ZXJ5ID0gd2luZG93 LiQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CgkvLyBUaGUgalF1 ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9y ICdlbmhhbmNlZCcKCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9y LCBjb250ZXh0ICk7Cn07CgovLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhU TUwgc3RyaW5ncyBvciBJRCBzdHJpbmdzCi8vIChib3RoIG9mIHdoaWNoIHdlIG9w dGltaXplIGZvcikKdmFyIHF1aWNrRXhwciA9IC9eW148XSooPCgufFxzKSs+KVte Pl0qJHxeIyhcdyspJC8sCgovLyBJcyBpdCBhIHNpbXBsZSBzZWxlY3RvcgoJaXNT aW1wbGUgPSAvXi5bXjojXFtcLl0qJC8sCgovLyBXaWxsIHNwZWVkIHVwIHJlZmVy ZW5jZXMgdG8gdW5kZWZpbmVkLCBhbmQgYWxsb3dzIG11bmdpbmcgaXRzIG5hbWUu Cgl1bmRlZmluZWQ7CgpqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewoJ aW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoJCS8vIE1ha2Ug c3VyZSB0aGF0IGEgc2VsZWN0aW9uIHdhcyBwcm92aWRlZAoJCXNlbGVjdG9yID0g c2VsZWN0b3IgfHwgZG9jdW1lbnQ7CgoJCS8vIEhhbmRsZSAkKERPTUVsZW1lbnQp CgkJaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKCQkJdGhpc1swXSA9IHNlbGVj dG9yOwoJCQl0aGlzLmxlbmd0aCA9IDE7CgkJCXJldHVybiB0aGlzOwoJCX0KCQkv LyBIYW5kbGUgSFRNTCBzdHJpbmdzCgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT0g InN0cmluZyIgKSB7CgkJCS8vIEFyZSB3ZSBkZWFsaW5nIHdpdGggSFRNTCBzdHJp bmcgb3IgYW4gSUQ/CgkJCXZhciBtYXRjaCA9IHF1aWNrRXhwci5leGVjKCBzZWxl Y3RvciApOwoKCQkJLy8gVmVyaWZ5IGEgbWF0Y2gsIGFuZCB0aGF0IG5vIGNvbnRl eHQgd2FzIHNwZWNpZmllZCBmb3IgI2lkCgkJCWlmICggbWF0Y2ggJiYgKG1hdGNo WzFdIHx8ICFjb250ZXh0KSApIHsKCgkJCQkvLyBIQU5ETEU6ICQoaHRtbCkgLT4g JChhcnJheSkKCQkJCWlmICggbWF0Y2hbMV0gKQoJCQkJCXNlbGVjdG9yID0galF1 ZXJ5LmNsZWFuKCBbIG1hdGNoWzFdIF0sIGNvbnRleHQgKTsKCgkJCQkvLyBIQU5E TEU6ICQoIiNpZCIpCgkJCQllbHNlIHsKCQkJCQl2YXIgZWxlbSA9IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCBtYXRjaFszXSApOwoKCQkJCQkvLyBNYWtlIHN1cmUg YW4gZWxlbWVudCB3YXMgbG9jYXRlZAoJCQkJCWlmICggZWxlbSApewoJCQkJCQkv LyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVt cwoJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKCQkJCQkJaWYgKCBlbGVt LmlkICE9IG1hdGNoWzNdICkKCQkJCQkJCXJldHVybiBqUXVlcnkoKS5maW5kKCBz ZWxlY3RvciApOwoKCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVs ZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAoJCQkJCQlyZXR1 cm4galF1ZXJ5KCBlbGVtICk7CgkJCQkJfQoJCQkJCXNlbGVjdG9yID0gW107CgkJ CQl9CgoJCQkvLyBIQU5ETEU6ICQoZXhwciwgW2NvbnRleHRdKQoJCQkvLyAod2hp Y2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRlbnQpLmZpbmQoZXhwcikK CQkJfSBlbHNlCgkJCQlyZXR1cm4galF1ZXJ5KCBjb250ZXh0ICkuZmluZCggc2Vs ZWN0b3IgKTsKCgkJLy8gSEFORExFOiAkKGZ1bmN0aW9uKQoJCS8vIFNob3J0Y3V0 IGZvciBkb2N1bWVudCByZWFkeQoJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0 aW9uKCBzZWxlY3RvciApICkKCQkJcmV0dXJuIGpRdWVyeSggZG9jdW1lbnQgKVsg alF1ZXJ5LmZuLnJlYWR5ID8gInJlYWR5IiA6ICJsb2FkIiBdKCBzZWxlY3RvciAp OwoKCQlyZXR1cm4gdGhpcy5zZXRBcnJheShqUXVlcnkubWFrZUFycmF5KHNlbGVj dG9yKSk7Cgl9LAoKCS8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJl aW5nIHVzZWQKCWpxdWVyeTogIjEuMi42IiwKCgkvLyBUaGUgbnVtYmVyIG9mIGVs ZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAoJc2l6 ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMubGVuZ3RoOwoJfSwKCgkvLyBU aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBl bGVtZW50IHNldAoJbGVuZ3RoOiAwLAoKCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQg aW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKCS8vIEdldCB0aGUgd2hvbGUg bWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CglnZXQ6IGZ1bmN0 aW9uKCBudW0gKSB7CgkJcmV0dXJuIG51bSA9PSB1bmRlZmluZWQgPwoKCQkJLy8g UmV0dXJuIGEgJ2NsZWFuJyBhcnJheQoJCQlqUXVlcnkubWFrZUFycmF5KCB0aGlz ICkgOgoKCQkJLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAoJCQl0aGlzWyBudW0g XTsKCX0sCgoJLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBp dCBvbnRvIHRoZSBzdGFjawoJLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQg ZWxlbWVudCBzZXQpCglwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKCQkv LyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAoJCXZhciBy ZXQgPSBqUXVlcnkoIGVsZW1zICk7CgoJCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBv bnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCgkJcmV0LnByZXZPYmplY3Qg PSB0aGlzOwoKCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNl dAoJCXJldHVybiByZXQ7Cgl9LAoKCS8vIEZvcmNlIHRoZSBjdXJyZW50IG1hdGNo ZWQgc2V0IG9mIGVsZW1lbnRzIHRvIGJlY29tZQoJLy8gdGhlIHNwZWNpZmllZCBh cnJheSBvZiBlbGVtZW50cyAoZGVzdHJveWluZyB0aGUgc3RhY2sgaW4gdGhlIHBy b2Nlc3MpCgkvLyBZb3Ugc2hvdWxkIHVzZSBwdXNoU3RhY2soKSBpbiBvcmRlciB0 byBkbyB0aGlzLCBidXQgbWFpbnRhaW4gdGhlIHN0YWNrCglzZXRBcnJheTogZnVu Y3Rpb24oIGVsZW1zICkgewoJCS8vIFJlc2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAs IHRoZW4gdXNpbmcgdGhlIG5hdGl2ZSBBcnJheSBwdXNoCgkJLy8gaXMgYSBzdXBl ci1mYXN0IHdheSB0byBwb3B1bGF0ZSBhbiBvYmplY3Qgd2l0aCBhcnJheS1saWtl IHByb3BlcnRpZXMKCQl0aGlzLmxlbmd0aCA9IDA7CgkJQXJyYXkucHJvdG90eXBl LnB1c2guYXBwbHkoIHRoaXMsIGVsZW1zICk7CgoJCXJldHVybiB0aGlzOwoJfSwK CgkvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhl IG1hdGNoZWQgc2V0LgoJLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdp dGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKCS8vIG9ubHkgdXNlZCBp bnRlcm5hbGx5LikKCWVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsK CQlyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7Cgl9 LAoKCS8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRo aW4KCS8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwoJaW5kZXg6IGZ1bmN0 aW9uKCBlbGVtICkgewoJCXZhciByZXQgPSAtMTsKCgkJLy8gTG9jYXRlIHRoZSBw b3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CgkJcmV0dXJuIGpRdWVyeS5p bkFycmF5KAoJCQkvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRo ZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKCQkJZWxlbSAmJiBlbGVtLmpxdWVyeSA/ IGVsZW1bMF0gOiBlbGVtCgkJLCB0aGlzICk7Cgl9LAoKCWF0dHI6IGZ1bmN0aW9u KCBuYW1lLCB2YWx1ZSwgdHlwZSApIHsKCQl2YXIgb3B0aW9ucyA9IG5hbWU7CgoJ CS8vIExvb2sgZm9yIHRoZSBjYXNlIHdoZXJlIHdlJ3JlIGFjY2Vzc2luZyBhIHN0 eWxlIHZhbHVlCgkJaWYgKCBuYW1lLmNvbnN0cnVjdG9yID09IFN0cmluZyApCgkJ CWlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApCgkJCQlyZXR1cm4gdGhpc1swXSAm JiBqUXVlcnlbIHR5cGUgfHwgImF0dHIiIF0oIHRoaXNbMF0sIG5hbWUgKTsKCgkJ CWVsc2UgewoJCQkJb3B0aW9ucyA9IHt9OwoJCQkJb3B0aW9uc1sgbmFtZSBdID0g dmFsdWU7CgkJCX0KCgkJLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHNldHRpbmcg c3R5bGUgdmFsdWVzCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKXsKCQkJ Ly8gU2V0IGFsbCB0aGUgc3R5bGVzCgkJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyAp CgkJCQlqUXVlcnkuYXR0cigKCQkJCQl0eXBlID8KCQkJCQkJdGhpcy5zdHlsZSA6 CgkJCQkJCXRoaXMsCgkJCQkJbmFtZSwgalF1ZXJ5LnByb3AoIHRoaXMsIG9wdGlv bnNbIG5hbWUgXSwgdHlwZSwgaSwgbmFtZSApCgkJCQkpOwoJCX0pOwoJfSwKCglj c3M6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCS8vIGlnbm9yZSBuZWdhdGl2 ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcwoJCWlmICggKGtleSA9PSAnd2lkdGgn IHx8IGtleSA9PSAnaGVpZ2h0JykgJiYgcGFyc2VGbG9hdCh2YWx1ZSkgPCAwICkK CQkJdmFsdWUgPSB1bmRlZmluZWQ7CgkJcmV0dXJuIHRoaXMuYXR0cigga2V5LCB2 YWx1ZSwgImN1ckNTUyIgKTsKCX0sCgoJdGV4dDogZnVuY3Rpb24oIHRleHQgKSB7 CgkJaWYgKCB0eXBlb2YgdGV4dCAhPSAib2JqZWN0IiAmJiB0ZXh0ICE9IG51bGwg KQoJCQlyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCggKHRoaXNbMF0gJiYgdGhp c1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZSgg dGV4dCApICk7CgoJCXZhciByZXQgPSAiIjsKCgkJalF1ZXJ5LmVhY2goIHRleHQg fHwgdGhpcywgZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LmVhY2goIHRoaXMuY2hpbGRO b2RlcywgZnVuY3Rpb24oKXsKCQkJCWlmICggdGhpcy5ub2RlVHlwZSAhPSA4ICkK CQkJCQlyZXQgKz0gdGhpcy5ub2RlVHlwZSAhPSAxID8KCQkJCQkJdGhpcy5ub2Rl VmFsdWUgOgoJCQkJCQlqUXVlcnkuZm4udGV4dCggWyB0aGlzIF0gKTsKCQkJfSk7 CgkJfSk7CgoJCXJldHVybiByZXQ7Cgl9LAoKCXdyYXBBbGw6IGZ1bmN0aW9uKCBo dG1sICkgewoJCWlmICggdGhpc1swXSApCgkJCS8vIFRoZSBlbGVtZW50cyB0byB3 cmFwIHRoZSB0YXJnZXQgYXJvdW5kCgkJCWpRdWVyeSggaHRtbCwgdGhpc1swXS5v d25lckRvY3VtZW50ICkKCQkJCS5jbG9uZSgpCgkJCQkuaW5zZXJ0QmVmb3JlKCB0 aGlzWzBdICkKCQkJCS5tYXAoZnVuY3Rpb24oKXsKCQkJCQl2YXIgZWxlbSA9IHRo aXM7CgoJCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxkICkKCQkJCQkJZWxlbSA9 IGVsZW0uZmlyc3RDaGlsZDsKCgkJCQkJcmV0dXJuIGVsZW07CgkJCQl9KQoJCQkJ LmFwcGVuZCh0aGlzKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXdyYXBJbm5lcjog ZnVuY3Rpb24oIGh0bWwgKSB7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp ewoJCQlqUXVlcnkoIHRoaXMgKS5jb250ZW50cygpLndyYXBBbGwoIGh0bWwgKTsK CQl9KTsKCX0sCgoJd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CgkJcmV0dXJuIHRo aXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBo dG1sICk7CgkJfSk7Cgl9LAoKCWFwcGVuZDogZnVuY3Rpb24oKSB7CgkJcmV0dXJu IHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmYWxzZSwgZnVuY3Rpb24o ZWxlbSl7CgkJCWlmICh0aGlzLm5vZGVUeXBlID09IDEpCgkJCQl0aGlzLmFwcGVu ZENoaWxkKCBlbGVtICk7CgkJfSk7Cgl9LAoKCXByZXBlbmQ6IGZ1bmN0aW9uKCkg ewoJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwg ZnVuY3Rpb24oZWxlbSl7CgkJCWlmICh0aGlzLm5vZGVUeXBlID09IDEpCgkJCQl0 aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7CgkJfSk7 Cgl9LAoKCWJlZm9yZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZG9tTWFu aXAoYXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIGZ1bmN0aW9uKGVsZW0pewoJCQl0 aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CgkJfSk7 Cgl9LAoKCWFmdGVyOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5kb21NYW5p cChhcmd1bWVudHMsIGZhbHNlLCB0cnVlLCBmdW5jdGlvbihlbGVtKXsKCQkJdGhp cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGlu ZyApOwoJCX0pOwoJfSwKCgllbmQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlz LnByZXZPYmplY3QgfHwgalF1ZXJ5KCBbXSApOwoJfSwKCglmaW5kOiBmdW5jdGlv biggc2VsZWN0b3IgKSB7CgkJdmFyIGVsZW1zID0galF1ZXJ5Lm1hcCh0aGlzLCBm dW5jdGlvbihlbGVtKXsKCQkJcmV0dXJuIGpRdWVyeS5maW5kKCBzZWxlY3Rvciwg ZWxlbSApOwoJCX0pOwoKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIC9bXis+XSBb Xis+XS8udGVzdCggc2VsZWN0b3IgKSB8fCBzZWxlY3Rvci5pbmRleE9mKCIuLiIp ID4gLTEgPwoJCQlqUXVlcnkudW5pcXVlKCBlbGVtcyApIDoKCQkJZWxlbXMgKTsK CX0sCgoJY2xvbmU6IGZ1bmN0aW9uKCBldmVudHMgKSB7CgkJLy8gRG8gdGhlIGNs b25lCgkJdmFyIHJldCA9IHRoaXMubWFwKGZ1bmN0aW9uKCl7CgkJCWlmICggalF1 ZXJ5LmJyb3dzZXIubXNpZSAmJiAhalF1ZXJ5LmlzWE1MRG9jKHRoaXMpICkgewoJ CQkJLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQgd2hl bgoJCQkJLy8gdXNpbmcgY2xvbmVOb2RlLiBDYWxsaW5nIGRldGFjaEV2ZW50IG9u IHRoZQoJCQkJLy8gY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzIGZy b20gdGhlIG9yaWduYWwKCQkJCS8vIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhp cywgd2UgdXNlIGlubmVySFRNTC4KCQkJCS8vIFVuZm9ydHVuYXRlbHksIHRoaXMg bWVhbnMgc29tZSBtb2RpZmljYXRpb25zIHRvCgkJCQkvLyBhdHRyaWJ1dGVzIGlu IElFIHRoYXQgYXJlIGFjdHVhbGx5IG9ubHkgc3RvcmVkCgkJCQkvLyBhcyBwcm9w ZXJ0aWVzIHdpbGwgbm90IGJlIGNvcGllZCAoc3VjaCBhcyB0aGUKCQkJCS8vIHRo ZSBuYW1lIGF0dHJpYnV0ZSBvbiBhbiBpbnB1dCkuCgkJCQl2YXIgY2xvbmUgPSB0 aGlzLmNsb25lTm9kZSh0cnVlKSwKCQkJCQljb250YWluZXIgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCJkaXYiKTsKCQkJCWNvbnRhaW5lci5hcHBlbmRDaGlsZChj bG9uZSk7CgkJCQlyZXR1cm4galF1ZXJ5LmNsZWFuKFtjb250YWluZXIuaW5uZXJI VE1MXSlbMF07CgkJCX0gZWxzZQoJCQkJcmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRy dWUpOwoJCX0pOwoKCQkvLyBOZWVkIHRvIHNldCB0aGUgZXhwYW5kbyB0byBudWxs IG9uIHRoZSBjbG9uZWQgc2V0IGlmIGl0IGV4aXN0cwoJCS8vIHJlbW92ZURhdGEg ZG9lc24ndCB3b3JrIGhlcmUsIElFIHJlbW92ZXMgaXQgZnJvbSB0aGUgb3JpZ2lu YWwgYXMgd2VsbAoJCS8vIHRoaXMgaXMgcHJpbWFyaWx5IGZvciBJRSBidXQgdGhl IGRhdGEgZXhwYW5kbyBzaG91bGRuJ3QgYmUgY29waWVkIG92ZXIgaW4gYW55IGJy b3dzZXIKCQl2YXIgY2xvbmUgPSByZXQuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNo KGZ1bmN0aW9uKCl7CgkJCWlmICggdGhpc1sgZXhwYW5kbyBdICE9IHVuZGVmaW5l ZCApCgkJCQl0aGlzWyBleHBhbmRvIF0gPSBudWxsOwoJCX0pOwoKCQkvLyBDb3B5 IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCgkJaWYg KCBldmVudHMgPT09IHRydWUgKQoJCQl0aGlzLmZpbmQoIioiKS5hbmRTZWxmKCku ZWFjaChmdW5jdGlvbihpKXsKCQkJCWlmICh0aGlzLm5vZGVUeXBlID09IDMpCgkJ CQkJcmV0dXJuOwoJCQkJdmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKCB0aGlzLCAi ZXZlbnRzIiApOwoKCQkJCWZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApCgkJCQkJ Zm9yICggdmFyIGhhbmRsZXIgaW4gZXZlbnRzWyB0eXBlIF0gKQoJCQkJCQlqUXVl cnkuZXZlbnQuYWRkKCBjbG9uZVsgaSBdLCB0eXBlLCBldmVudHNbIHR5cGUgXVsg aGFuZGxlciBdLCBldmVudHNbIHR5cGUgXVsgaGFuZGxlciBdLmRhdGEgKTsKCQkJ fSk7CgoJCS8vIFJldHVybiB0aGUgY2xvbmVkIHNldAoJCXJldHVybiByZXQ7Cgl9 LAoKCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlz LnB1c2hTdGFjaygKCQkJalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgJiYK CQkJalF1ZXJ5LmdyZXAodGhpcywgZnVuY3Rpb24oZWxlbSwgaSl7CgkJCQlyZXR1 cm4gc2VsZWN0b3IuY2FsbCggZWxlbSwgaSApOwoJCQl9KSB8fAoKCQkJalF1ZXJ5 Lm11bHRpRmlsdGVyKCBzZWxlY3RvciwgdGhpcyApICk7Cgl9LAoKCW5vdDogZnVu Y3Rpb24oIHNlbGVjdG9yICkgewoJCWlmICggc2VsZWN0b3IuY29uc3RydWN0b3Ig PT0gU3RyaW5nICkKCQkJLy8gdGVzdCBzcGVjaWFsIGNhc2Ugd2hlcmUganVzdCBv bmUgc2VsZWN0b3IgaXMgcGFzc2VkIGluCgkJCWlmICggaXNTaW1wbGUudGVzdCgg c2VsZWN0b3IgKSApCgkJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5t dWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMsIHRydWUgKSApOwoJCQllbHNlCgkJ CQlzZWxlY3RvciA9IGpRdWVyeS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMg KTsKCgkJdmFyIGlzQXJyYXlMaWtlID0gc2VsZWN0b3IubGVuZ3RoICYmIHNlbGVj dG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdICE9PSB1bmRlZmluZWQgJiYgIXNlbGVj dG9yLm5vZGVUeXBlOwoJCXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsK CQkJcmV0dXJuIGlzQXJyYXlMaWtlID8galF1ZXJ5LmluQXJyYXkoIHRoaXMsIHNl bGVjdG9yICkgPCAwIDogdGhpcyAhPSBzZWxlY3RvcjsKCQl9KTsKCX0sCgoJYWRk OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNr KCBqUXVlcnkudW5pcXVlKCBqUXVlcnkubWVyZ2UoCgkJCXRoaXMuZ2V0KCksCgkJ CXR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJyA/CgkJCQlqUXVlcnkoIHNlbGVj dG9yICkgOgoJCQkJalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgKQoJCSkpKTsK CX0sCgoJaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQlyZXR1cm4gISFzZWxl Y3RvciAmJiBqUXVlcnkubXVsdGlGaWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVu Z3RoID4gMDsKCX0sCgoJaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK CQlyZXR1cm4gdGhpcy5pcyggIi4iICsgc2VsZWN0b3IgKTsKCX0sCgoJdmFsOiBm dW5jdGlvbiggdmFsdWUgKSB7CgkJaWYgKCB2YWx1ZSA9PSB1bmRlZmluZWQgKSB7 CgoJCQlpZiAoIHRoaXMubGVuZ3RoICkgewoJCQkJdmFyIGVsZW0gPSB0aGlzWzBd OwoKCQkJCS8vIFdlIG5lZWQgdG8gaGFuZGxlIHNlbGVjdCBib3hlcyBzcGVjaWFs CgkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsK CQkJCQl2YXIgaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCgkJCQkJCXZhbHVl cyA9IFtdLAoJCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAoJCQkJCQlvbmUg PSBlbGVtLnR5cGUgPT0gInNlbGVjdC1vbmUiOwoKCQkJCQkvLyBOb3RoaW5nIHdh cyBzZWxlY3RlZAoJCQkJCWlmICggaW5kZXggPCAwICkKCQkJCQkJcmV0dXJuIG51 bGw7CgoJCQkJCS8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlv bnMKCQkJCQlmb3IgKCB2YXIgaSA9IG9uZSA/IGluZGV4IDogMCwgbWF4ID0gb25l ID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7IGkgPCBtYXg7IGkrKyApIHsK CQkJCQkJdmFyIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCgkJCQkJCWlmICggb3B0 aW9uLnNlbGVjdGVkICkgewoJCQkJCQkJLy8gR2V0IHRoZSBzcGVjaWZjIHZhbHVl IGZvciB0aGUgb3B0aW9uCgkJCQkJCQl2YWx1ZSA9IGpRdWVyeS5icm93c2VyLm1z aWUgJiYgIW9wdGlvbi5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCA/IG9wdGlv bi50ZXh0IDogb3B0aW9uLnZhbHVlOwoKCQkJCQkJCS8vIFdlIGRvbid0IG5lZWQg YW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCgkJCQkJCQlpZiAoIG9uZSApCgkJCQkJ CQkJcmV0dXJuIHZhbHVlOwoKCQkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJu IGFuIGFycmF5CgkJCQkJCQl2YWx1ZXMucHVzaCggdmFsdWUgKTsKCQkJCQkJfQoJ CQkJCX0KCgkJCQkJcmV0dXJuIHZhbHVlczsKCgkJCQkvLyBFdmVyeXRoaW5nIGVs c2UsIHdlIGp1c3QgZ3JhYiB0aGUgdmFsdWUKCQkJCX0gZWxzZQoJCQkJCXJldHVy biAodGhpc1swXS52YWx1ZSB8fCAiIikucmVwbGFjZSgvXHIvZywgIiIpOwoKCQkJ fQoKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9CgoJCWlmKCB2YWx1ZS5jb25zdHJ1 Y3RvciA9PSBOdW1iZXIgKQoJCQl2YWx1ZSArPSAnJzsKCgkJcmV0dXJuIHRoaXMu ZWFjaChmdW5jdGlvbigpewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT0gMSApCgkJ CQlyZXR1cm47CgoJCQlpZiAoIHZhbHVlLmNvbnN0cnVjdG9yID09IEFycmF5ICYm IC9yYWRpb3xjaGVja2JveC8udGVzdCggdGhpcy50eXBlICkgKQoJCQkJdGhpcy5j aGVja2VkID0gKGpRdWVyeS5pbkFycmF5KHRoaXMudmFsdWUsIHZhbHVlKSA+PSAw IHx8CgkJCQkJalF1ZXJ5LmluQXJyYXkodGhpcy5uYW1lLCB2YWx1ZSkgPj0gMCk7 CgoJCQllbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAic2VsZWN0IiAp ICkgewoJCQkJdmFyIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkodmFsdWUpOwoK CQkJCWpRdWVyeSggIm9wdGlvbiIsIHRoaXMgKS5lYWNoKGZ1bmN0aW9uKCl7CgkJ CQkJdGhpcy5zZWxlY3RlZCA9IChqUXVlcnkuaW5BcnJheSggdGhpcy52YWx1ZSwg dmFsdWVzICkgPj0gMCB8fAoJCQkJCQlqUXVlcnkuaW5BcnJheSggdGhpcy50ZXh0 LCB2YWx1ZXMgKSA+PSAwKTsKCQkJCX0pOwoKCQkJCWlmICggIXZhbHVlcy5sZW5n dGggKQoJCQkJCXRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xOwoKCQkJfSBlbHNlCgkJ CQl0aGlzLnZhbHVlID0gdmFsdWU7CgkJfSk7Cgl9LAoKCWh0bWw6IGZ1bmN0aW9u KCB2YWx1ZSApIHsKCQlyZXR1cm4gdmFsdWUgPT0gdW5kZWZpbmVkID8KCQkJKHRo aXNbMF0gPwoJCQkJdGhpc1swXS5pbm5lckhUTUwgOgoJCQkJbnVsbCkgOgoJCQl0 aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwoJfSwKCglyZXBsYWNlV2l0aDog ZnVuY3Rpb24oIHZhbHVlICkgewoJCXJldHVybiB0aGlzLmFmdGVyKCB2YWx1ZSAp LnJlbW92ZSgpOwoJfSwKCgllcTogZnVuY3Rpb24oIGkgKSB7CgkJcmV0dXJuIHRo aXMuc2xpY2UoIGksIGkgKyAxICk7Cgl9LAoKCXNsaWNlOiBmdW5jdGlvbigpIHsK CQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIEFycmF5LnByb3RvdHlwZS5zbGljZS5h cHBseSggdGhpcywgYXJndW1lbnRzICkgKTsKCX0sCgoJbWFwOiBmdW5jdGlvbigg Y2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFw KHRoaXMsIGZ1bmN0aW9uKGVsZW0sIGkpewoJCQlyZXR1cm4gY2FsbGJhY2suY2Fs bCggZWxlbSwgaSwgZWxlbSApOwoJCX0pKTsKCX0sCgoJYW5kU2VsZjogZnVuY3Rp b24oKSB7CgkJcmV0dXJuIHRoaXMuYWRkKCB0aGlzLnByZXZPYmplY3QgKTsKCX0s CgoJZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKXsKCQl2YXIgcGFydHMgPSBr ZXkuc3BsaXQoIi4iKTsKCQlwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFy dHNbMV0gOiAiIjsKCgkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewoJCQl2 YXIgZGF0YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiICsgcGFydHNb MV0gKyAiISIsIFtwYXJ0c1swXV0pOwoKCQkJaWYgKCBkYXRhID09PSB1bmRlZmlu ZWQgJiYgdGhpcy5sZW5ndGggKQoJCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlz WzBdLCBrZXkgKTsKCgkJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFy dHNbMV0gPwoJCQkJdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKCQkJCWRhdGE7CgkJ fSBlbHNlCgkJCXJldHVybiB0aGlzLnRyaWdnZXIoInNldERhdGEiICsgcGFydHNb MV0gKyAiISIsIFtwYXJ0c1swXSwgdmFsdWVdKS5lYWNoKGZ1bmN0aW9uKCl7CgkJ CQlqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOwoJCQl9KTsKCX0sCgoJ cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApewoJCXJldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LnJlbW92ZURhdGEoIHRoaXMsIGtleSApOwoJ CX0pOwoJfSwKCglkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCByZXZl cnNlLCBjYWxsYmFjayApIHsKCQl2YXIgY2xvbmUgPSB0aGlzLmxlbmd0aCA+IDEs IGVsZW1zOwoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkJCWlmICgg IWVsZW1zICkgewoJCQkJZWxlbXMgPSBqUXVlcnkuY2xlYW4oIGFyZ3MsIHRoaXMu b3duZXJEb2N1bWVudCApOwoKCQkJCWlmICggcmV2ZXJzZSApCgkJCQkJZWxlbXMu cmV2ZXJzZSgpOwoJCQl9CgoJCQl2YXIgb2JqID0gdGhpczsKCgkJCWlmICggdGFi bGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAidGFibGUiICkgJiYgalF1ZXJ5 Lm5vZGVOYW1lKCBlbGVtc1swXSwgInRyIiApICkKCQkJCW9iaiA9IHRoaXMuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwgdGhpcy5hcHBlbmRDaGls ZCggdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikgKTsK CgkJCXZhciBzY3JpcHRzID0galF1ZXJ5KCBbXSApOwoKCQkJalF1ZXJ5LmVhY2go ZWxlbXMsIGZ1bmN0aW9uKCl7CgkJCQl2YXIgZWxlbSA9IGNsb25lID8KCQkJCQlq UXVlcnkoIHRoaXMgKS5jbG9uZSggdHJ1ZSApWzBdIDoKCQkJCQl0aGlzOwoKCQkJ CS8vIGV4ZWN1dGUgYWxsIHNjcmlwdHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGhhdmUg YmVlbiBpbmplY3RlZAoJCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJz Y3JpcHQiICkgKQoJCQkJCXNjcmlwdHMgPSBzY3JpcHRzLmFkZCggZWxlbSApOwoJ CQkJZWxzZSB7CgkJCQkJLy8gUmVtb3ZlIGFueSBpbm5lciBzY3JpcHRzIGZvciBs YXRlciBldmFsdWF0aW9uCgkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDEgKQoJ CQkJCQlzY3JpcHRzID0gc2NyaXB0cy5hZGQoIGpRdWVyeSggInNjcmlwdCIsIGVs ZW0gKS5yZW1vdmUoKSApOwoKCQkJCQkvLyBJbmplY3QgdGhlIGVsZW1lbnRzIGlu dG8gdGhlIGRvY3VtZW50CgkJCQkJY2FsbGJhY2suY2FsbCggb2JqLCBlbGVtICk7 CgkJCQl9CgkJCX0pOwoKCQkJc2NyaXB0cy5lYWNoKCBldmFsU2NyaXB0ICk7CgkJ fSk7Cgl9Cn07CgovLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkg cHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0 LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmZ1bmN0aW9uIGV2YWxTY3JpcHQoIGks IGVsZW0gKSB7CglpZiAoIGVsZW0uc3JjICkKCQlqUXVlcnkuYWpheCh7CgkJCXVy bDogZWxlbS5zcmMsCgkJCWFzeW5jOiBmYWxzZSwKCQkJZGF0YVR5cGU6ICJzY3Jp cHQiCgkJfSk7CgoJZWxzZQoJCWpRdWVyeS5nbG9iYWxFdmFsKCBlbGVtLnRleHQg fHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApOwoK CWlmICggZWxlbS5wYXJlbnROb2RlICkKCQllbGVtLnBhcmVudE5vZGUucmVtb3Zl Q2hpbGQoIGVsZW0gKTsKfQoKZnVuY3Rpb24gbm93KCl7CglyZXR1cm4gK25ldyBE YXRlOwp9CgpqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0 aW9uKCkgewoJLy8gY29weSByZWZlcmVuY2UgdG8gdGFyZ2V0IG9iamVjdAoJdmFy IHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwgaSA9IDEsIGxlbmd0aCA9IGFy Z3VtZW50cy5sZW5ndGgsIGRlZXAgPSBmYWxzZSwgb3B0aW9uczsKCgkvLyBIYW5k bGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCglpZiAoIHRhcmdldC5jb25zdHJ1Y3Rv ciA9PSBCb29sZWFuICkgewoJCWRlZXAgPSB0YXJnZXQ7CgkJdGFyZ2V0ID0gYXJn dW1lbnRzWzFdIHx8IHt9OwoJCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0 YXJnZXQKCQlpID0gMjsKCX0KCgkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBp cyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkK CWlmICggdHlwZW9mIHRhcmdldCAhPSAib2JqZWN0IiAmJiB0eXBlb2YgdGFyZ2V0 ICE9ICJmdW5jdGlvbiIgKQoJCXRhcmdldCA9IHt9OwoKCS8vIGV4dGVuZCBqUXVl cnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAoJaWYgKCBs ZW5ndGggPT0gaSApIHsKCQl0YXJnZXQgPSB0aGlzOwoJCS0taTsKCX0KCglmb3Ig KCA7IGkgPCBsZW5ndGg7IGkrKyApCgkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51 bGwvdW5kZWZpbmVkIHZhbHVlcwoJCWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNb IGkgXSkgIT0gbnVsbCApCgkJCS8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKCQkJ Zm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJCXZhciBzcmMgPSB0YXJn ZXRbIG5hbWUgXSwgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCgkJCQkvLyBQcmV2 ZW50IG5ldmVyLWVuZGluZyBsb29wCgkJCQlpZiAoIHRhcmdldCA9PT0gY29weSAp CgkJCQkJY29udGludWU7CgoJCQkJLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5n IG9iamVjdCB2YWx1ZXMKCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmIHR5cGVvZiBj b3B5ID09ICJvYmplY3QiICYmICFjb3B5Lm5vZGVUeXBlICkKCQkJCQl0YXJnZXRb IG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIAoJCQkJCQkvLyBOZXZlciBt b3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KCQkJCQkJc3JjIHx8ICgg Y29weS5sZW5ndGggIT0gbnVsbCA/IFsgXSA6IHsgfSApCgkJCQkJLCBjb3B5ICk7 CgoJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwoJCQkJZWxz ZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApCgkJCQkJdGFyZ2V0WyBuYW1lIF0g PSBjb3B5OwoKCQkJfQoKCS8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0Cgly ZXR1cm4gdGFyZ2V0Owp9OwoKdmFyIGV4cGFuZG8gPSAialF1ZXJ5IiArIG5vdygp LCB1dWlkID0gMCwgd2luZG93RGF0YSA9IHt9LAoJLy8gZXhjbHVkZSB0aGUgZm9s bG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBweAoJZXhjbHVkZSA9IC96LT9p bmRleHxmb250LT93ZWlnaHR8b3BhY2l0eXx6b29tfGxpbmUtP2hlaWdodC9pLAoJ Ly8gY2FjaGUgZGVmYXVsdFZpZXcKCWRlZmF1bHRWaWV3ID0gZG9jdW1lbnQuZGVm YXVsdFZpZXcgfHwge307CgpqUXVlcnkuZXh0ZW5kKHsKCW5vQ29uZmxpY3Q6IGZ1 bmN0aW9uKCBkZWVwICkgewoJCXdpbmRvdy4kID0gXyQ7CgoJCWlmICggZGVlcCAp CgkJCXdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OwoKCQlyZXR1cm4galF1ZXJ5OwoJ fSwKCgkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2Vy bmluZyB0aGlzIGZ1bmN0aW9uLgoJaXNGdW5jdGlvbjogZnVuY3Rpb24oIGZuICkg ewoJCXJldHVybiAhIWZuICYmIHR5cGVvZiBmbiAhPSAic3RyaW5nIiAmJiAhZm4u bm9kZU5hbWUgJiYKCQkJZm4uY29uc3RydWN0b3IgIT0gQXJyYXkgJiYgL15bXHNb XT9mdW5jdGlvbi8udGVzdCggZm4gKyAiIiApOwoJfSwKCgkvLyBjaGVjayBpZiBh biBlbGVtZW50IGlzIGluIGEgKG9yIGlzIGFuKSBYTUwgZG9jdW1lbnQKCWlzWE1M RG9jOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gZWxlbS5kb2N1bWVudEVs ZW1lbnQgJiYgIWVsZW0uYm9keSB8fAoJCQllbGVtLnRhZ05hbWUgJiYgZWxlbS5v d25lckRvY3VtZW50ICYmICFlbGVtLm93bmVyRG9jdW1lbnQuYm9keTsKCX0sCgoJ Ly8gRXZhbHVsYXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CglnbG9i YWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKCQlkYXRhID0galF1ZXJ5LnRyaW0o IGRhdGEgKTsKCgkJaWYgKCBkYXRhICkgewoJCQkvLyBJbnNwaXJlZCBieSBjb2Rl IGJ5IEFuZHJlYSBHaWFtbWFyY2hpCgkJCS8vIGh0dHA6Ly93ZWJyZWZsZWN0aW9u LmJsb2dzcG90LmNvbS8yMDA3LzA4L2dsb2JhbC1zY29wZS1ldmFsdWF0aW9uLWFu ZC1kb20uaHRtbAoJCQl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU YWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAoJ CQkJc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CgoJ CQlzY3JpcHQudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwoJCQlpZiAoIGpRdWVy eS5icm93c2VyLm1zaWUgKQoJCQkJc2NyaXB0LnRleHQgPSBkYXRhOwoJCQllbHNl CgkJCQlzY3JpcHQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl KCBkYXRhICkgKTsKCgkJCS8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBh cHBlbmRDaGlsZCAgdG8gY2lyY3VtdmVudCBhbiBJRTYgYnVnLgoJCQkvLyBUaGlz IGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5KS4KCQkJaGVh ZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7CgkJCWhl YWQucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOwoJCX0KCX0sCgoJbm9kZU5hbWU6IGZ1 bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXJldHVybiBlbGVtLm5vZGVOYW1lICYm IGVsZW0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSBuYW1lLnRvVXBwZXJDYXNl KCk7Cgl9LAoKCWNhY2hlOiB7fSwKCglkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFt ZSwgZGF0YSApIHsKCQllbGVtID0gZWxlbSA9PSB3aW5kb3cgPwoJCQl3aW5kb3dE YXRhIDoKCQkJZWxlbTsKCgkJdmFyIGlkID0gZWxlbVsgZXhwYW5kbyBdOwoKCQkv LyBDb21wdXRlIGEgdW5pcXVlIElEIGZvciB0aGUgZWxlbWVudAoJCWlmICggIWlk ICkKCQkJaWQgPSBlbGVtWyBleHBhbmRvIF0gPSArK3V1aWQ7CgoJCS8vIE9ubHkg Z2VuZXJhdGUgdGhlIGRhdGEgY2FjaGUgaWYgd2UncmUKCQkvLyB0cnlpbmcgdG8g YWNjZXNzIG9yIG1hbmlwdWxhdGUgaXQKCQlpZiAoIG5hbWUgJiYgIWpRdWVyeS5j YWNoZVsgaWQgXSApCgkJCWpRdWVyeS5jYWNoZVsgaWQgXSA9IHt9OwoKCQkvLyBQ cmV2ZW50IG92ZXJyaWRpbmcgdGhlIG5hbWVkIGNhY2hlIHdpdGggdW5kZWZpbmVk IHZhbHVlcwoJCWlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkKCQkJalF1ZXJ5LmNh Y2hlWyBpZCBdWyBuYW1lIF0gPSBkYXRhOwoKCQkvLyBSZXR1cm4gdGhlIG5hbWVk IGNhY2hlIGRhdGEsIG9yIHRoZSBJRCBmb3IgdGhlIGVsZW1lbnQKCQlyZXR1cm4g bmFtZSA/CgkJCWpRdWVyeS5jYWNoZVsgaWQgXVsgbmFtZSBdIDoKCQkJaWQ7Cgl9 LAoKCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCWVsZW0g PSBlbGVtID09IHdpbmRvdyA/CgkJCXdpbmRvd0RhdGEgOgoJCQllbGVtOwoKCQl2 YXIgaWQgPSBlbGVtWyBleHBhbmRvIF07CgoJCS8vIElmIHdlIHdhbnQgdG8gcmVt b3ZlIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgZWxlbWVudCdzIGRhdGEKCQlp ZiAoIG5hbWUgKSB7CgkJCWlmICggalF1ZXJ5LmNhY2hlWyBpZCBdICkgewoJCQkJ Ly8gUmVtb3ZlIHRoZSBzZWN0aW9uIG9mIGNhY2hlIGRhdGEKCQkJCWRlbGV0ZSBq UXVlcnkuY2FjaGVbIGlkIF1bIG5hbWUgXTsKCgkJCQkvLyBJZiB3ZSd2ZSByZW1v dmVkIGFsbCB0aGUgZGF0YSwgcmVtb3ZlIHRoZSBlbGVtZW50J3MgY2FjaGUKCQkJ CW5hbWUgPSAiIjsKCgkJCQlmb3IgKCBuYW1lIGluIGpRdWVyeS5jYWNoZVsgaWQg XSApCgkJCQkJYnJlYWs7CgoJCQkJaWYgKCAhbmFtZSApCgkJCQkJalF1ZXJ5LnJl bW92ZURhdGEoIGVsZW0gKTsKCQkJfQoKCQkvLyBPdGhlcndpc2UsIHdlIHdhbnQg dG8gcmVtb3ZlIGFsbCBvZiB0aGUgZWxlbWVudCdzIGRhdGEKCQl9IGVsc2UgewoJ CQkvLyBDbGVhbiB1cCB0aGUgZWxlbWVudCBleHBhbmRvCgkJCXRyeSB7CgkJCQlk ZWxldGUgZWxlbVsgZXhwYW5kbyBdOwoJCQl9IGNhdGNoKGUpewoJCQkJLy8gSUUg aGFzIHRyb3VibGUgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIGV4cGFuZG8KCQkJCS8v IGJ1dCBpdCdzIG9rIHdpdGggdXNpbmcgcmVtb3ZlQXR0cmlidXRlCgkJCQlpZiAo IGVsZW0ucmVtb3ZlQXR0cmlidXRlICkKCQkJCQllbGVtLnJlbW92ZUF0dHJpYnV0 ZSggZXhwYW5kbyApOwoJCQl9CgoJCQkvLyBDb21wbGV0ZWx5IHJlbW92ZSB0aGUg ZGF0YSBjYWNoZQoJCQlkZWxldGUgalF1ZXJ5LmNhY2hlWyBpZCBdOwoJCX0KCX0s CgoJLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQoJZWFjaDogZnVu Y3Rpb24oIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7CgkJdmFyIG5hbWUsIGkg PSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOwoKCQlpZiAoIGFyZ3MgKSB7CgkJ CWlmICggbGVuZ3RoID09IHVuZGVmaW5lZCApIHsKCQkJCWZvciAoIG5hbWUgaW4g b2JqZWN0ICkKCQkJCQlpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIG5hbWUg XSwgYXJncyApID09PSBmYWxzZSApCgkJCQkJCWJyZWFrOwoJCQl9IGVsc2UKCQkJ CWZvciAoIDsgaSA8IGxlbmd0aDsgKQoJCQkJCWlmICggY2FsbGJhY2suYXBwbHko IG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKQoJCQkJCQlicmVhazsK CgkJLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24g dXNlIG9mIGVhY2gKCQl9IGVsc2UgewoJCQlpZiAoIGxlbmd0aCA9PSB1bmRlZmlu ZWQgKSB7CgkJCQlmb3IgKCBuYW1lIGluIG9iamVjdCApCgkJCQkJaWYgKCBjYWxs YmFjay5jYWxsKCBvYmplY3RbIG5hbWUgXSwgbmFtZSwgb2JqZWN0WyBuYW1lIF0g KSA9PT0gZmFsc2UgKQoJCQkJCQlicmVhazsKCQkJfSBlbHNlCgkJCQlmb3IgKCB2 YXIgdmFsdWUgPSBvYmplY3RbMF07CgkJCQkJaSA8IGxlbmd0aCAmJiBjYWxsYmFj ay5jYWxsKCB2YWx1ZSwgaSwgdmFsdWUgKSAhPT0gZmFsc2U7IHZhbHVlID0gb2Jq ZWN0WysraV0gKXt9CgkJfQoKCQlyZXR1cm4gb2JqZWN0OwoJfSwKCglwcm9wOiBm dW5jdGlvbiggZWxlbSwgdmFsdWUsIHR5cGUsIGksIG5hbWUgKSB7CgkJLy8gSGFu ZGxlIGV4ZWN1dGFibGUgZnVuY3Rpb25zCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlv biggdmFsdWUgKSApCgkJCXZhbHVlID0gdmFsdWUuY2FsbCggZWxlbSwgaSApOwoK CQkvLyBIYW5kbGUgcGFzc2luZyBpbiBhIG51bWJlciB0byBhIENTUyBwcm9wZXJ0 eQoJCXJldHVybiB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PSBOdW1iZXIg JiYgdHlwZSA9PSAiY3VyQ1NTIiAmJiAhZXhjbHVkZS50ZXN0KCBuYW1lICkgPwoJ CQl2YWx1ZSArICJweCIgOgoJCQl2YWx1ZTsKCX0sCgoJY2xhc3NOYW1lOiB7CgkJ Ly8gaW50ZXJuYWwgb25seSwgdXNlIGFkZENsYXNzKCJjbGFzcyIpCgkJYWRkOiBm dW5jdGlvbiggZWxlbSwgY2xhc3NOYW1lcyApIHsKCQkJalF1ZXJ5LmVhY2goKGNs YXNzTmFtZXMgfHwgIiIpLnNwbGl0KC9ccysvKSwgZnVuY3Rpb24oaSwgY2xhc3NO YW1lKXsKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PSAxICYmICFqUXVlcnkuY2xh c3NOYW1lLmhhcyggZWxlbS5jbGFzc05hbWUsIGNsYXNzTmFtZSApICkKCQkJCQll bGVtLmNsYXNzTmFtZSArPSAoZWxlbS5jbGFzc05hbWUgPyAiICIgOiAiIikgKyBj bGFzc05hbWU7CgkJCX0pOwoJCX0sCgoJCS8vIGludGVybmFsIG9ubHksIHVzZSBy ZW1vdmVDbGFzcygiY2xhc3MiKQoJCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIGNs YXNzTmFtZXMgKSB7CgkJCWlmIChlbGVtLm5vZGVUeXBlID09IDEpCgkJCQllbGVt LmNsYXNzTmFtZSA9IGNsYXNzTmFtZXMgIT0gdW5kZWZpbmVkID8KCQkJCQlqUXVl cnkuZ3JlcChlbGVtLmNsYXNzTmFtZS5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGNs YXNzTmFtZSl7CgkJCQkJCXJldHVybiAhalF1ZXJ5LmNsYXNzTmFtZS5oYXMoIGNs YXNzTmFtZXMsIGNsYXNzTmFtZSApOwoJCQkJCX0pLmpvaW4oIiAiKSA6CgkJCQkJ IiI7CgkJfSwKCgkJLy8gaW50ZXJuYWwgb25seSwgdXNlIGhhc0NsYXNzKCJjbGFz cyIpCgkJaGFzOiBmdW5jdGlvbiggZWxlbSwgY2xhc3NOYW1lICkgewoJCQlyZXR1 cm4galF1ZXJ5LmluQXJyYXkoIGNsYXNzTmFtZSwgKGVsZW0uY2xhc3NOYW1lIHx8 IGVsZW0pLnRvU3RyaW5nKCkuc3BsaXQoL1xzKy8pICkgPiAtMTsKCQl9Cgl9LAoK CS8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJv cGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKCXN3YXA6IGZ1bmN0 aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKCQl2YXIgb2xkID0ge307 CgkJLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5l dyBvbmVzCgkJZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJb2xkWyBu YW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CgkJCWVsZW0uc3R5bGVbIG5hbWUg XSA9IG9wdGlvbnNbIG5hbWUgXTsKCQl9CgoJCWNhbGxiYWNrLmNhbGwoIGVsZW0g KTsKCgkJLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCgkJZm9yICggdmFyIG5hbWUg aW4gb3B0aW9ucyApCgkJCWVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBd OwoJfSwKCgljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBmb3JjZSApIHsKCQlp ZiAoIG5hbWUgPT0gIndpZHRoIiB8fCBuYW1lID09ICJoZWlnaHQiICkgewoJCQl2 YXIgdmFsLCBwcm9wcyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxp dHk6ICJoaWRkZW4iLCBkaXNwbGF5OiJibG9jayIgfSwgd2hpY2ggPSBuYW1lID09 ICJ3aWR0aCIgPyBbICJMZWZ0IiwgIlJpZ2h0IiBdIDogWyAiVG9wIiwgIkJvdHRv bSIgXTsKCgkJCWZ1bmN0aW9uIGdldFdIKCkgewoJCQkJdmFsID0gbmFtZSA9PSAi d2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0OwoJ CQkJdmFyIHBhZGRpbmcgPSAwLCBib3JkZXIgPSAwOwoJCQkJalF1ZXJ5LmVhY2go IHdoaWNoLCBmdW5jdGlvbigpIHsKCQkJCQlwYWRkaW5nICs9IHBhcnNlRmxvYXQo alF1ZXJ5LmN1ckNTUyggZWxlbSwgInBhZGRpbmciICsgdGhpcywgdHJ1ZSkpIHx8 IDA7CgkJCQkJYm9yZGVyICs9IHBhcnNlRmxvYXQoalF1ZXJ5LmN1ckNTUyggZWxl bSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiwgdHJ1ZSkpIHx8IDA7CgkJCQl9 KTsKCQkJCXZhbCAtPSBNYXRoLnJvdW5kKHBhZGRpbmcgKyBib3JkZXIpOwoJCQl9 CgoJCQlpZiAoIGpRdWVyeShlbGVtKS5pcygiOnZpc2libGUiKSApCgkJCQlnZXRX SCgpOwoJCQllbHNlCgkJCQlqUXVlcnkuc3dhcCggZWxlbSwgcHJvcHMsIGdldFdI ICk7CgoJCQlyZXR1cm4gTWF0aC5tYXgoMCwgdmFsKTsKCQl9CgoJCXJldHVybiBq UXVlcnkuY3VyQ1NTKCBlbGVtLCBuYW1lLCBmb3JjZSApOwoJfSwKCgljdXJDU1M6 IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBmb3JjZSApIHsKCQl2YXIgcmV0LCBzdHls ZSA9IGVsZW0uc3R5bGU7CgoJCS8vIEEgaGVscGVyIG1ldGhvZCBmb3IgZGV0ZXJt aW5pbmcgaWYgYW4gZWxlbWVudCdzIHZhbHVlcyBhcmUgYnJva2VuCgkJZnVuY3Rp b24gY29sb3IoIGVsZW0gKSB7CgkJCWlmICggIWpRdWVyeS5icm93c2VyLnNhZmFy aSApCgkJCQlyZXR1cm4gZmFsc2U7CgoJCQkvLyBkZWZhdWx0VmlldyBpcyBjYWNo ZWQKCQkJdmFyIHJldCA9IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVs ZW0sIG51bGwgKTsKCQkJcmV0dXJuICFyZXQgfHwgcmV0LmdldFByb3BlcnR5VmFs dWUoImNvbG9yIikgPT0gIiI7CgkJfQoKCQkvLyBXZSBuZWVkIHRvIGhhbmRsZSBv cGFjaXR5IHNwZWNpYWwgaW4gSUUKCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYm IGpRdWVyeS5icm93c2VyLm1zaWUgKSB7CgkJCXJldCA9IGpRdWVyeS5hdHRyKCBz dHlsZSwgIm9wYWNpdHkiICk7CgoJCQlyZXR1cm4gcmV0ID09ICIiID8KCQkJCSIx IiA6CgkJCQlyZXQ7CgkJfQoJCS8vIE9wZXJhIHNvbWV0aW1lcyB3aWxsIGdpdmUg dGhlIHdyb25nIGRpc3BsYXkgYW5zd2VyLCB0aGlzIGZpeGVzIGl0LCBzZWUgIzIw MzcKCQlpZiAoIGpRdWVyeS5icm93c2VyLm9wZXJhICYmIG5hbWUgPT0gImRpc3Bs YXkiICkgewoJCQl2YXIgc2F2ZSA9IHN0eWxlLm91dGxpbmU7CgkJCXN0eWxlLm91 dGxpbmUgPSAiMCBzb2xpZCBibGFjayI7CgkJCXN0eWxlLm91dGxpbmUgPSBzYXZl OwoJCX0KCgkJLy8gTWFrZSBzdXJlIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBuYW1l IGZvciBnZXR0aW5nIHRoZSBmbG9hdCB2YWx1ZQoJCWlmICggbmFtZS5tYXRjaCgg L2Zsb2F0L2kgKSApCgkJCW5hbWUgPSBzdHlsZUZsb2F0OwoKCQlpZiAoICFmb3Jj ZSAmJiBzdHlsZSAmJiBzdHlsZVsgbmFtZSBdICkKCQkJcmV0ID0gc3R5bGVbIG5h bWUgXTsKCgkJZWxzZSBpZiAoIGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUg KSB7CgoJCQkvLyBPbmx5ICJmbG9hdCIgaXMgbmVlZGVkIGhlcmUKCQkJaWYgKCBu YW1lLm1hdGNoKCAvZmxvYXQvaSApICkKCQkJCW5hbWUgPSAiZmxvYXQiOwoKCQkJ bmFtZSA9IG5hbWUucmVwbGFjZSggLyhbQS1aXSkvZywgIi0kMSIgKS50b0xvd2Vy Q2FzZSgpOwoKCQkJdmFyIGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy5nZXRD b21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7CgoJCQlpZiAoIGNvbXB1dGVkU3R5 bGUgJiYgIWNvbG9yKCBlbGVtICkgKQoJCQkJcmV0ID0gY29tcHV0ZWRTdHlsZS5n ZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICk7CgoJCQkvLyBJZiB0aGUgZWxlbWVudCBp c24ndCByZXBvcnRpbmcgaXRzIHZhbHVlcyBwcm9wZXJseSBpbiBTYWZhcmkKCQkJ Ly8gdGhlbiBzb21lIGRpc3BsYXk6IG5vbmUgZWxlbWVudHMgYXJlIGludm9sdmVk CgkJCWVsc2UgewoJCQkJdmFyIHN3YXAgPSBbXSwgc3RhY2sgPSBbXSwgYSA9IGVs ZW0sIGkgPSAwOwoKCQkJCS8vIExvY2F0ZSBhbGwgb2YgdGhlIHBhcmVudCBkaXNw bGF5OiBub25lIGVsZW1lbnRzCgkJCQlmb3IgKCA7IGEgJiYgY29sb3IoYSk7IGEg PSBhLnBhcmVudE5vZGUgKQoJCQkJCXN0YWNrLnVuc2hpZnQoYSk7CgoJCQkJLy8g R28gdGhyb3VnaCBhbmQgbWFrZSB0aGVtIHZpc2libGUsIGJ1dCBpbiByZXZlcnNl CgkJCQkvLyAoSXQgd291bGQgYmUgYmV0dGVyIGlmIHdlIGtuZXcgdGhlIGV4YWN0 IGRpc3BsYXkgdHlwZSB0aGF0IHRoZXkgaGFkKQoJCQkJZm9yICggOyBpIDwgc3Rh Y2subGVuZ3RoOyBpKysgKQoJCQkJCWlmICggY29sb3IoIHN0YWNrWyBpIF0gKSAp IHsKCQkJCQkJc3dhcFsgaSBdID0gc3RhY2tbIGkgXS5zdHlsZS5kaXNwbGF5OwoJ CQkJCQlzdGFja1sgaSBdLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoJCQkJCX0K CgkJCQkvLyBTaW5jZSB3ZSBmbGlwIHRoZSBkaXNwbGF5IHN0eWxlLCB3ZSBoYXZl IHRvIGhhbmRsZSB0aGF0CgkJCQkvLyBvbmUgc3BlY2lhbCwgb3RoZXJ3aXNlIGdl dCB0aGUgdmFsdWUKCQkJCXJldCA9IG5hbWUgPT0gImRpc3BsYXkiICYmIHN3YXBb IHN0YWNrLmxlbmd0aCAtIDEgXSAhPSBudWxsID8KCQkJCQkibm9uZSIgOgoJCQkJ CSggY29tcHV0ZWRTdHlsZSAmJiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFs dWUoIG5hbWUgKSApIHx8ICIiOwoKCQkJCS8vIEZpbmFsbHksIHJldmVydCB0aGUg ZGlzcGxheSBzdHlsZXMgYmFjawoJCQkJZm9yICggaSA9IDA7IGkgPCBzd2FwLmxl bmd0aDsgaSsrICkKCQkJCQlpZiAoIHN3YXBbIGkgXSAhPSBudWxsICkKCQkJCQkJ c3RhY2tbIGkgXS5zdHlsZS5kaXNwbGF5ID0gc3dhcFsgaSBdOwoJCQl9CgoJCQkv LyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0 eQoJCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYmIHJldCA9PSAiIiApCgkJCQly ZXQgPSAiMSI7CgoJCX0gZWxzZSBpZiAoIGVsZW0uY3VycmVudFN0eWxlICkgewoJ CQl2YXIgY2FtZWxDYXNlID0gbmFtZS5yZXBsYWNlKC9cLShcdykvZywgZnVuY3Rp b24oYWxsLCBsZXR0ZXIpewoJCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgp OwoJCQl9KTsKCgkJCXJldCA9IGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0gfHwg ZWxlbS5jdXJyZW50U3R5bGVbIGNhbWVsQ2FzZSBdOwoKCQkJLy8gRnJvbSB0aGUg YXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcwoJCQkvLyBodHRwOi8vZXJpay5l YWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAy MjkxCgoJCQkvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBw aXhlbCBudW1iZXIKCQkJLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQg ZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCgkJCWlmICgg IS9eXGQrKHB4KT8kL2kudGVzdCggcmV0ICkgJiYgL15cZC8udGVzdCggcmV0ICkg KSB7CgkJCQkvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCgkJCQl2YXIg bGVmdCA9IHN0eWxlLmxlZnQsIHJzTGVmdCA9IGVsZW0ucnVudGltZVN0eWxlLmxl ZnQ7CgoJCQkJLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1 dGVkIHZhbHVlIG91dAoJCQkJZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0u Y3VycmVudFN0eWxlLmxlZnQ7CgkJCQlzdHlsZS5sZWZ0ID0gcmV0IHx8IDA7CgkJ CQlyZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwoKCQkJCS8vIFJldmVydCB0 aGUgY2hhbmdlZCB2YWx1ZXMKCQkJCXN0eWxlLmxlZnQgPSBsZWZ0OwoJCQkJZWxl bS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVmdDsKCQkJfQoJCX0KCgkJcmV0dXJu IHJldDsKCX0sCgoJY2xlYW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCApIHsK CQl2YXIgcmV0ID0gW107CgkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7 CgkJLy8gIWNvbnRleHQuY3JlYXRlRWxlbWVudCBmYWlscyBpbiBJRSB3aXRoIGFu IGVycm9yIGJ1dCByZXR1cm5zIHR5cGVvZiAnb2JqZWN0JwoJCWlmICh0eXBlb2Yg Y29udGV4dC5jcmVhdGVFbGVtZW50ID09ICd1bmRlZmluZWQnKQoJCQljb250ZXh0 ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHRbMF0gJiYgY29udGV4 dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwoKCQlqUXVlcnkuZWFjaChl bGVtcywgZnVuY3Rpb24oaSwgZWxlbSl7CgkJCWlmICggIWVsZW0gKQoJCQkJcmV0 dXJuOwoKCQkJaWYgKCBlbGVtLmNvbnN0cnVjdG9yID09IE51bWJlciApCgkJCQll bGVtICs9ICcnOwoKCQkJLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBu b2RlcwoJCQlpZiAoIHR5cGVvZiBlbGVtID09ICJzdHJpbmciICkgewoJCQkJLy8g Rml4ICJYSFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKCQkJCWVsZW0g PSBlbGVtLnJlcGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csIGZ1bmN0aW9uKGFs bCwgZnJvbnQsIHRhZyl7CgkJCQkJcmV0dXJuIHRhZy5tYXRjaCgvXihhYmJyfGJy fGNvbHxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtfGhyfGFyZWF8ZW1iZWQpJC9p KSA/CgkJCQkJCWFsbCA6CgkJCQkJCWZyb250ICsgIj48LyIgKyB0YWcgKyAiPiI7 CgkJCQl9KTsKCgkJCQkvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRl eE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKCQkJCXZhciB0YWdzID0galF1ZXJ5 LnRyaW0oIGVsZW0gKS50b0xvd2VyQ2FzZSgpLCBkaXYgPSBjb250ZXh0LmNyZWF0 ZUVsZW1lbnQoImRpdiIpOwoKCQkJCXZhciB3cmFwID0KCQkJCQkvLyBvcHRpb24g b3Igb3B0Z3JvdXAKCQkJCQkhdGFncy5pbmRleE9mKCI8b3B0IikgJiYKCQkJCQlb IDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIg XSB8fAoKCQkJCQkhdGFncy5pbmRleE9mKCI8bGVnIikgJiYKCQkJCQlbIDEsICI8 ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdIHx8CgoJCQkJCXRhZ3MubWF0Y2go L148KHRoZWFkfHRib2R5fHRmb290fGNvbGd8Y2FwKS8pICYmCgkJCQkJWyAxLCAi PHRhYmxlPiIsICI8L3RhYmxlPiIgXSB8fAoKCQkJCQkhdGFncy5pbmRleE9mKCI8 dHIiKSAmJgoJCQkJCVsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90 YWJsZT4iIF0gfHwKCgkJCQkgCS8vIDx0aGVhZD4gbWF0Y2hlZCBhYm92ZQoJCQkJ CSghdGFncy5pbmRleE9mKCI8dGQiKSB8fCAhdGFncy5pbmRleE9mKCI8dGgiKSkg JiYKCQkJCQlbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5 PjwvdGFibGU+IiBdIHx8CgoJCQkJCSF0YWdzLmluZGV4T2YoIjxjb2wiKSAmJgoJ CQkJCVsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwv Y29sZ3JvdXA+PC90YWJsZT4iIF0gfHwKCgkJCQkJLy8gSUUgY2FuJ3Qgc2VyaWFs aXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBub3JtYWxseQoJCQkJCWpRdWVy eS5icm93c2VyLm1zaWUgJiYKCQkJCQlbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4i IF0gfHwKCgkJCQkJWyAwLCAiIiwgIiIgXTsKCgkJCQkvLyBHbyB0byBodG1sIGFu ZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCgkJCQlkaXYuaW5u ZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJdOwoKCQkJCS8vIE1vdmUg dG8gdGhlIHJpZ2h0IGRlcHRoCgkJCQl3aGlsZSAoIHdyYXBbMF0tLSApCgkJCQkJ ZGl2ID0gZGl2Lmxhc3RDaGlsZDsKCgkJCQkvLyBSZW1vdmUgSUUncyBhdXRvaW5z ZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwoJCQkJaWYgKCBqUXVl cnkuYnJvd3Nlci5tc2llICkgewoKCQkJCQkvLyBTdHJpbmcgd2FzIGEgPHRhYmxl PiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+CgkJCQkJdmFyIHRib2R5ID0g IXRhZ3MuaW5kZXhPZigiPHRhYmxlIikgJiYgdGFncy5pbmRleE9mKCI8dGJvZHki KSA8IDAgPwoJCQkJCQlkaXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5j aGlsZE5vZGVzIDoKCgkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4g b3IgPHRmb290PgoJCQkJCQl3cmFwWzFdID09ICI8dGFibGU+IiAmJiB0YWdzLmlu ZGV4T2YoIjx0Ym9keSIpIDwgMCA/CgkJCQkJCQlkaXYuY2hpbGROb2RlcyA6CgkJ CQkJCQlbXTsKCgkJCQkJZm9yICggdmFyIGogPSB0Ym9keS5sZW5ndGggLSAxOyBq ID49IDAgOyAtLWogKQoJCQkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlb IGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3Ro ICkKCQkJCQkJCXRib2R5WyBqIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJv ZHlbIGogXSApOwoKCQkJCQkvLyBJRSBjb21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcg d2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCgkJCQkJaWYgKCAvXlxz Ly50ZXN0KCBlbGVtICkgKQoJCQkJCQlkaXYuaW5zZXJ0QmVmb3JlKCBjb250ZXh0 LmNyZWF0ZVRleHROb2RlKCBlbGVtLm1hdGNoKC9eXHMqLylbMF0gKSwgZGl2LmZp cnN0Q2hpbGQgKTsKCgkJCQl9CgoJCQkJZWxlbSA9IGpRdWVyeS5tYWtlQXJyYXko IGRpdi5jaGlsZE5vZGVzICk7CgkJCX0KCgkJCWlmICggZWxlbS5sZW5ndGggPT09 IDAgJiYgKCFqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJmb3JtIiApICYmICFqUXVl cnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkpICkKCQkJCXJldHVybjsKCgkJ CWlmICggZWxlbVswXSA9PSB1bmRlZmluZWQgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBl bGVtLCAiZm9ybSIgKSB8fCBlbGVtLm9wdGlvbnMgKQoJCQkJcmV0LnB1c2goIGVs ZW0gKTsKCgkJCWVsc2UKCQkJCXJldCA9IGpRdWVyeS5tZXJnZSggcmV0LCBlbGVt ICk7CgoJCX0pOwoKCQlyZXR1cm4gcmV0OwoJfSwKCglhdHRyOiBmdW5jdGlvbigg ZWxlbSwgbmFtZSwgdmFsdWUgKSB7CgkJLy8gZG9uJ3Qgc2V0IGF0dHJpYnV0ZXMg b24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICghZWxlbSB8fCBlbGVtLm5v ZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4KQoJCQlyZXR1cm4gdW5k ZWZpbmVkOwoKCQl2YXIgbm90eG1sID0gIWpRdWVyeS5pc1hNTERvYyggZWxlbSAp LAoJCQkvLyBXaGV0aGVyIHdlIGFyZSBzZXR0aW5nIChvciBnZXR0aW5nKQoJCQlz ZXQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLAoJCQltc2llID0galF1ZXJ5LmJyb3dz ZXIubXNpZTsKCgkJLy8gVHJ5IHRvIG5vcm1hbGl6ZS9maXggdGhlIG5hbWUKCQlu YW1lID0gbm90eG1sICYmIGpRdWVyeS5wcm9wc1sgbmFtZSBdIHx8IG5hbWU7CgoJ CS8vIE9ubHkgZG8gYWxsIHRoZSBmb2xsb3dpbmcgaWYgdGhpcyBpcyBhIG5vZGUg KGZhc3RlciBmb3Igc3R5bGUpCgkJLy8gSUUgZWxlbS5nZXRBdHRyaWJ1dGUgcGFz c2VzIGV2ZW4gZm9yIHN0eWxlCgkJaWYgKCBlbGVtLnRhZ05hbWUgKSB7CgoJCQkv LyBUaGVzZSBhdHRyaWJ1dGVzIHJlcXVpcmUgc3BlY2lhbCB0cmVhdG1lbnQKCQkJ dmFyIHNwZWNpYWwgPSAvaHJlZnxzcmN8c3R5bGUvLnRlc3QoIG5hbWUgKTsKCgkJ CS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9w ZXJ0eSBvZiBhIGhpZGRlbiBvcHRpb24KCQkJLy8gQWNjZXNzaW5nIHRoZSBwYXJl bnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CgkJCWlmICggbmFt ZSA9PSAic2VsZWN0ZWQiICYmIGpRdWVyeS5icm93c2VyLnNhZmFyaSApCgkJCQll bGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCgkJCS8vIElmIGFwcGxpY2Fi bGUsIGFjY2VzcyB0aGUgYXR0cmlidXRlIHZpYSB0aGUgRE9NIDAgd2F5CgkJCWlm ICggbmFtZSBpbiBlbGVtICYmIG5vdHhtbCAmJiAhc3BlY2lhbCApIHsKCQkJCWlm ICggc2V0ICl7CgkJCQkJLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJvcGVy dHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElF KQoJCQkJCWlmICggbmFtZSA9PSAidHlwZSIgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBl bGVtLCAiaW5wdXQiICkgJiYgZWxlbS5wYXJlbnROb2RlICkKCQkJCQkJdGhyb3cg InR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCI7CgoJCQkJCWVsZW1bIG5h bWUgXSA9IHZhbHVlOwoJCQkJfQoKCQkJCS8vIGJyb3dzZXJzIGluZGV4IGVsZW1l bnRzIGJ5IGlkL25hbWUgb24gZm9ybXMsIGdpdmUgcHJpb3JpdHkgdG8gYXR0cmli dXRlcy4KCQkJCWlmKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJmb3JtIiApICYm IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSApCgkJCQkJcmV0dXJuIGVsZW0u Z2V0QXR0cmlidXRlTm9kZSggbmFtZSApLm5vZGVWYWx1ZTsKCgkJCQlyZXR1cm4g ZWxlbVsgbmFtZSBdOwoJCQl9CgoJCQlpZiAoIG1zaWUgJiYgbm90eG1sICYmICBu YW1lID09ICJzdHlsZSIgKQoJCQkJcmV0dXJuIGpRdWVyeS5hdHRyKCBlbGVtLnN0 eWxlLCAiY3NzVGV4dCIsIHZhbHVlICk7CgoJCQlpZiAoIHNldCApCgkJCQkvLyBj b252ZXJ0IHRoZSB2YWx1ZSB0byBhIHN0cmluZyAoYWxsIGJyb3dzZXJzIGRvIHRo aXMgYnV0IElFKSBzZWUgIzEwNzAKCQkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1l LCAiIiArIHZhbHVlICk7CgoJCQl2YXIgYXR0ciA9IG1zaWUgJiYgbm90eG1sICYm IHNwZWNpYWwKCQkJCQkvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNp YWwgY2FsbCBvbiBJRQoJCQkJCT8gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIg KQoJCQkJCTogZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKCgkJCS8vIE5vbi1l eGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8g dW5kZWZpbmVkCgkJCXJldHVybiBhdHRyID09PSBudWxsID8gdW5kZWZpbmVkIDog YXR0cjsKCQl9CgoJCS8vIGVsZW0gaXMgYWN0dWFsbHkgZWxlbS5zdHlsZSAuLi4g c2V0IHRoZSBzdHlsZQoKCQkvLyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkK CQlpZiAoIG1zaWUgJiYgbmFtZSA9PSAib3BhY2l0eSIgKSB7CgkJCWlmICggc2V0 ICkgewoJCQkJLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRv ZXMgbm90IGhhdmUgbGF5b3V0CgkJCQkvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRo ZSB6b29tIGxldmVsCgkJCQllbGVtLnpvb20gPSAxOwoKCQkJCS8vIFNldCB0aGUg YWxwaGEgZmlsdGVyIHRvIHNldCB0aGUgb3BhY2l0eQoJCQkJZWxlbS5maWx0ZXIg PSAoZWxlbS5maWx0ZXIgfHwgIiIpLnJlcGxhY2UoIC9hbHBoYVwoW14pXSpcKS8s ICIiICkgKwoJCQkJCShwYXJzZUludCggdmFsdWUgKSArICcnID09ICJOYU4iID8g IiIgOiAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIpOwoJCQl9 CgoJCQlyZXR1cm4gZWxlbS5maWx0ZXIgJiYgZWxlbS5maWx0ZXIuaW5kZXhPZigi b3BhY2l0eT0iKSA+PSAwID8KCQkJCShwYXJzZUZsb2F0KCBlbGVtLmZpbHRlci5t YXRjaCgvb3BhY2l0eT0oW14pXSopLylbMV0gKSAvIDEwMCkgKyAnJzoKCQkJCSIi OwoJCX0KCgkJbmFtZSA9IG5hbWUucmVwbGFjZSgvLShbYS16XSkvaWcsIGZ1bmN0 aW9uKGFsbCwgbGV0dGVyKXsKCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgp OwoJCX0pOwoKCQlpZiAoIHNldCApCgkJCWVsZW1bIG5hbWUgXSA9IHZhbHVlOwoK CQlyZXR1cm4gZWxlbVsgbmFtZSBdOwoJfSwKCgl0cmltOiBmdW5jdGlvbiggdGV4 dCApIHsKCQlyZXR1cm4gKHRleHQgfHwgIiIpLnJlcGxhY2UoIC9eXHMrfFxzKyQv ZywgIiIgKTsKCX0sCgoJbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyYXkgKSB7CgkJ dmFyIHJldCA9IFtdOwoKCQlpZiggYXJyYXkgIT0gbnVsbCApewoJCQl2YXIgaSA9 IGFycmF5Lmxlbmd0aDsKCQkJLy90aGUgd2luZG93LCBzdHJpbmdzIGFuZCBmdW5j dGlvbnMgYWxzbyBoYXZlICdsZW5ndGgnCgkJCWlmKCBpID09IG51bGwgfHwgYXJy YXkuc3BsaXQgfHwgYXJyYXkuc2V0SW50ZXJ2YWwgfHwgYXJyYXkuY2FsbCApCgkJ CQlyZXRbMF0gPSBhcnJheTsKCQkJZWxzZQoJCQkJd2hpbGUoIGkgKQoJCQkJCXJl dFstLWldID0gYXJyYXlbaV07CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCglpbkFy cmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyYXkgKSB7CgkJZm9yICggdmFyIGkgPSAw LCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCgkJLy8g VXNlID09PSBiZWNhdXNlIG9uIElFLCB3aW5kb3cgPT0gZG9jdW1lbnQKCQkJaWYg KCBhcnJheVsgaSBdID09PSBlbGVtICkKCQkJCXJldHVybiBpOwoKCQlyZXR1cm4g LTE7Cgl9LAoKCW1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKCQkv LyBXZSBoYXZlIHRvIGxvb3AgdGhpcyB3YXkgYmVjYXVzZSBJRSAmIE9wZXJhIG92 ZXJ3cml0ZSB0aGUgbGVuZ3RoCgkJLy8gZXhwYW5kbyBvZiBnZXRFbGVtZW50c0J5 VGFnTmFtZQoJCXZhciBpID0gMCwgZWxlbSwgcG9zID0gZmlyc3QubGVuZ3RoOwoJ CS8vIEFsc28sIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3Qg ZWxlbWVudHMgYXJlIGJlaW5nIHJldHVybmVkCgkJLy8gKElFIHJldHVybnMgY29t bWVudCBub2RlcyBpbiBhICcqJyBxdWVyeSkKCQlpZiAoIGpRdWVyeS5icm93c2Vy Lm1zaWUgKSB7CgkJCXdoaWxlICggZWxlbSA9IHNlY29uZFsgaSsrIF0gKQoJCQkJ aWYgKCBlbGVtLm5vZGVUeXBlICE9IDggKQoJCQkJCWZpcnN0WyBwb3MrKyBdID0g ZWxlbTsKCgkJfSBlbHNlCgkJCXdoaWxlICggZWxlbSA9IHNlY29uZFsgaSsrIF0g KQoJCQkJZmlyc3RbIHBvcysrIF0gPSBlbGVtOwoKCQlyZXR1cm4gZmlyc3Q7Cgl9 LAoKCXVuaXF1ZTogZnVuY3Rpb24oIGFycmF5ICkgewoJCXZhciByZXQgPSBbXSwg ZG9uZSA9IHt9OwoKCQl0cnkgewoKCQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGgg PSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCXZhciBpZCA9 IGpRdWVyeS5kYXRhKCBhcnJheVsgaSBdICk7CgoJCQkJaWYgKCAhZG9uZVsgaWQg XSApIHsKCQkJCQlkb25lWyBpZCBdID0gdHJ1ZTsKCQkJCQlyZXQucHVzaCggYXJy YXlbIGkgXSApOwoJCQkJfQoJCQl9CgoJCX0gY2F0Y2goIGUgKSB7CgkJCXJldCA9 IGFycmF5OwoJCX0KCgkJcmV0dXJuIHJldDsKCX0sCgoJZ3JlcDogZnVuY3Rpb24o IGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewoJCXZhciByZXQgPSBbXTsKCgkJLy8g R28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwoJCS8v IHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCgkJZm9yICggdmFyIGkg PSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCgkJ CWlmICggIWludiAhPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKSApCgkJCQly ZXQucHVzaCggZWxlbXNbIGkgXSApOwoKCQlyZXR1cm4gcmV0OwoJfSwKCgltYXA6 IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2sgKSB7CgkJdmFyIHJldCA9IFtdOwoK CQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0 aGUgaXRlbXMgdG8gdGhlaXIKCQkvLyBuZXcgdmFsdWUgKG9yIHZhbHVlcykuCgkJ Zm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5n dGg7IGkrKyApIHsKCQkJdmFyIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0s IGkgKTsKCgkJCWlmICggdmFsdWUgIT0gbnVsbCApCgkJCQlyZXRbIHJldC5sZW5n dGggXSA9IHZhbHVlOwoJCX0KCgkJcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtd LCByZXQgKTsKCX0KfSk7Cgp2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJB Z2VudC50b0xvd2VyQ2FzZSgpOwoKLy8gRmlndXJlIG91dCB3aGF0IGJyb3dzZXIg aXMgYmVpbmcgdXNlZApqUXVlcnkuYnJvd3NlciA9IHsKCXZlcnNpb246ICh1c2Vy QWdlbnQubWF0Y2goIC8uKyg/OnJ2fGl0fHJhfGllKVtcLzogXShbXGQuXSspLyAp IHx8IFtdKVsxXSwKCXNhZmFyaTogL3dlYmtpdC8udGVzdCggdXNlckFnZW50ICks CglvcGVyYTogL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQgKSwKCW1zaWU6IC9tc2ll Ly50ZXN0KCB1c2VyQWdlbnQgKSAmJiAhL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQg KSwKCW1vemlsbGE6IC9tb3ppbGxhLy50ZXN0KCB1c2VyQWdlbnQgKSAmJiAhLyhj b21wYXRpYmxlfHdlYmtpdCkvLnRlc3QoIHVzZXJBZ2VudCApCn07Cgp2YXIgc3R5 bGVGbG9hdCA9IGpRdWVyeS5icm93c2VyLm1zaWUgPwoJInN0eWxlRmxvYXQiIDoK CSJjc3NGbG9hdCI7CgpqUXVlcnkuZXh0ZW5kKHsKCS8vIENoZWNrIHRvIHNlZSBp ZiB0aGUgVzNDIGJveCBtb2RlbCBpcyBiZWluZyB1c2VkCglib3hNb2RlbDogIWpR dWVyeS5icm93c2VyLm1zaWUgfHwgZG9jdW1lbnQuY29tcGF0TW9kZSA9PSAiQ1NT MUNvbXBhdCIsCgoJcHJvcHM6IHsKCQkiZm9yIjogImh0bWxGb3IiLAoJCSJjbGFz cyI6ICJjbGFzc05hbWUiLAoJCSJmbG9hdCI6IHN0eWxlRmxvYXQsCgkJY3NzRmxv YXQ6IHN0eWxlRmxvYXQsCgkJc3R5bGVGbG9hdDogc3R5bGVGbG9hdCwKCQlyZWFk b25seTogInJlYWRPbmx5IiwKCQltYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAoJCWNl bGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciCgl9Cn0pOwoKalF1ZXJ5LmVhY2goewoJ cGFyZW50OiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5wYXJlbnROb2RlO30s CglwYXJlbnRzOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmRpcihlbGVt LCJwYXJlbnROb2RlIik7fSwKCW5leHQ6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBq UXVlcnkubnRoKGVsZW0sMiwibmV4dFNpYmxpbmciKTt9LAoJcHJldjogZnVuY3Rp b24oZWxlbSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJwcmV2aW91c1NpYmxp bmciKTt9LAoJbmV4dEFsbDogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5k aXIoZWxlbSwibmV4dFNpYmxpbmciKTt9LAoJcHJldkFsbDogZnVuY3Rpb24oZWxl bSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicHJldmlvdXNTaWJsaW5nIik7fSwK CXNpYmxpbmdzOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmco ZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsZWxlbSk7fSwKCWNoaWxkcmVuOiBm dW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5maXJzdENo aWxkKTt9LAoJY29udGVudHM6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnku bm9kZU5hbWUoZWxlbSwiaWZyYW1lIik/ZWxlbS5jb250ZW50RG9jdW1lbnR8fGVs ZW0uY29udGVudFdpbmRvdy5kb2N1bWVudDpqUXVlcnkubWFrZUFycmF5KGVsZW0u Y2hpbGROb2Rlcyk7fQp9LCBmdW5jdGlvbihuYW1lLCBmbil7CglqUXVlcnkuZm5b IG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQl2YXIgcmV0ID0galF1 ZXJ5Lm1hcCggdGhpcywgZm4gKTsKCgkJaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Yg c2VsZWN0b3IgPT0gInN0cmluZyIgKQoJCQlyZXQgPSBqUXVlcnkubXVsdGlGaWx0 ZXIoIHNlbGVjdG9yLCByZXQgKTsKCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBq UXVlcnkudW5pcXVlKCByZXQgKSApOwoJfTsKfSk7CgpqUXVlcnkuZWFjaCh7Cglh cHBlbmRUbzogImFwcGVuZCIsCglwcmVwZW5kVG86ICJwcmVwZW5kIiwKCWluc2Vy dEJlZm9yZTogImJlZm9yZSIsCglpbnNlcnRBZnRlcjogImFmdGVyIiwKCXJlcGxh Y2VBbGw6ICJyZXBsYWNlV2l0aCIKfSwgZnVuY3Rpb24obmFtZSwgb3JpZ2luYWwp ewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigpIHsKCQl2YXIgYXJncyA9 IGFyZ3VtZW50czsKCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCQlm b3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3Ro OyBpKysgKQoJCQkJalF1ZXJ5KCBhcmdzWyBpIF0gKVsgb3JpZ2luYWwgXSggdGhp cyApOwoJCX0pOwoJfTsKfSk7CgpqUXVlcnkuZWFjaCh7CglyZW1vdmVBdHRyOiBm dW5jdGlvbiggbmFtZSApIHsKCQlqUXVlcnkuYXR0ciggdGhpcywgbmFtZSwgIiIg KTsKCQlpZiAodGhpcy5ub2RlVHlwZSA9PSAxKQoJCQl0aGlzLnJlbW92ZUF0dHJp YnV0ZSggbmFtZSApOwoJfSwKCglhZGRDbGFzczogZnVuY3Rpb24oIGNsYXNzTmFt ZXMgKSB7CgkJalF1ZXJ5LmNsYXNzTmFtZS5hZGQoIHRoaXMsIGNsYXNzTmFtZXMg KTsKCX0sCgoJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCBjbGFzc05hbWVzICkgewoJ CWpRdWVyeS5jbGFzc05hbWUucmVtb3ZlKCB0aGlzLCBjbGFzc05hbWVzICk7Cgl9 LAoKCXRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggY2xhc3NOYW1lcyApIHsKCQlqUXVl cnkuY2xhc3NOYW1lWyBqUXVlcnkuY2xhc3NOYW1lLmhhcyggdGhpcywgY2xhc3NO YW1lcyApID8gInJlbW92ZSIgOiAiYWRkIiBdKCB0aGlzLCBjbGFzc05hbWVzICk7 Cgl9LAoKCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCWlmICggIXNl bGVjdG9yIHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIHRoaXMgXSApLnIu bGVuZ3RoICkgewoJCQkvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcwoJCQlqUXVlcnko ICIqIiwgdGhpcyApLmFkZCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7CgkJCQlqUXVl cnkuZXZlbnQucmVtb3ZlKHRoaXMpOwoJCQkJalF1ZXJ5LnJlbW92ZURhdGEodGhp cyk7CgkJCX0pOwoJCQlpZiAodGhpcy5wYXJlbnROb2RlKQoJCQkJdGhpcy5wYXJl bnROb2RlLnJlbW92ZUNoaWxkKCB0aGlzICk7CgkJfQoJfSwKCgllbXB0eTogZnVu Y3Rpb24oKSB7CgkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQg bWVtb3J5IGxlYWtzCgkJalF1ZXJ5KCAiPioiLCB0aGlzICkucmVtb3ZlKCk7CgoJ CS8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCgkJd2hpbGUgKCB0aGlzLmZp cnN0Q2hpbGQgKQoJCQl0aGlzLnJlbW92ZUNoaWxkKCB0aGlzLmZpcnN0Q2hpbGQg KTsKCX0KfSwgZnVuY3Rpb24obmFtZSwgZm4pewoJalF1ZXJ5LmZuWyBuYW1lIF0g PSBmdW5jdGlvbigpewoJCXJldHVybiB0aGlzLmVhY2goIGZuLCBhcmd1bWVudHMg KTsKCX07Cn0pOwoKalF1ZXJ5LmVhY2goWyAiSGVpZ2h0IiwgIldpZHRoIiBdLCBm dW5jdGlvbihpLCBuYW1lKXsKCXZhciB0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgp OwoKCWpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIHNpemUgKSB7CgkJLy8g R2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKCQlyZXR1cm4gdGhpc1swXSA9PSB3 aW5kb3cgPwoJCQkvLyBPcGVyYSByZXBvcnRzIGRvY3VtZW50LmJvZHkuY2xpZW50 W1dpZHRoL0hlaWdodF0gcHJvcGVybHkgaW4gYm90aCBxdWlya3MgYW5kIHN0YW5k YXJkcwoJCQlqUXVlcnkuYnJvd3Nlci5vcGVyYSAmJiBkb2N1bWVudC5ib2R5WyAi Y2xpZW50IiArIG5hbWUgXSB8fAoKCQkJLy8gU2FmYXJpIHJlcG9ydHMgaW5uZXJb V2lkdGgvSGVpZ2h0XSBqdXN0IGZpbmUgKE1vemlsbGEgYW5kIE9wZXJhIGluY2x1 ZGUgc2Nyb2xsIGJhciB3aWR0aHMpCgkJCWpRdWVyeS5icm93c2VyLnNhZmFyaSAm JiB3aW5kb3dbICJpbm5lciIgKyBuYW1lIF0gfHwKCgkJCS8vIEV2ZXJ5b25lIGVs c2UgdXNlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBvciBkb2N1bWVudC5ib2R5 IGRlcGVuZGluZyBvbiBRdWlya3MgdnMgU3RhbmRhcmRzIG1vZGUKCQkJZG9jdW1l bnQuY29tcGF0TW9kZSA9PSAiQ1NTMUNvbXBhdCIgJiYgZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXSB8fCBkb2N1bWVudC5ib2R5WyAi Y2xpZW50IiArIG5hbWUgXSA6CgoJCQkvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3Ig aGVpZ2h0CgkJCXRoaXNbMF0gPT0gZG9jdW1lbnQgPwoJCQkJLy8gRWl0aGVyIHNj cm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdLCB3aGlj aGV2ZXIgaXMgZ3JlYXRlcgoJCQkJTWF0aC5tYXgoCgkJCQkJTWF0aC5tYXgoZG9j dW1lbnQuYm9keVsic2Nyb2xsIiArIG5hbWVdLCBkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnRbInNjcm9sbCIgKyBuYW1lXSksCgkJCQkJTWF0aC5tYXgoZG9jdW1lbnQu Ym9keVsib2Zmc2V0IiArIG5hbWVdLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRb Im9mZnNldCIgKyBuYW1lXSkKCQkJCSkgOgoKCQkJCS8vIEdldCBvciBzZXQgd2lk dGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CgkJCQlzaXplID09IHVuZGVmaW5l ZCA/CgkJCQkJLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAoJ CQkJCSh0aGlzLmxlbmd0aCA/IGpRdWVyeS5jc3MoIHRoaXNbMF0sIHR5cGUgKSA6 IG51bGwpIDoKCgkJCQkJLy8gU2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhl IGVsZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxzIGlmIHZhbHVlIGlzIHVuaXRsZXNz KQoJCQkJCXRoaXMuY3NzKCB0eXBlLCBzaXplLmNvbnN0cnVjdG9yID09IFN0cmlu ZyA/IHNpemUgOiBzaXplICsgInB4IiApOwoJfTsKfSk7CgovLyBIZWxwZXIgZnVu Y3Rpb24gdXNlZCBieSB0aGUgZGltZW5zaW9ucyBhbmQgb2Zmc2V0IG1vZHVsZXMK ZnVuY3Rpb24gbnVtKGVsZW0sIHByb3ApIHsKCXJldHVybiBlbGVtWzBdICYmIHBh cnNlSW50KCBqUXVlcnkuY3VyQ1NTKGVsZW1bMF0sIHByb3AsIHRydWUpLCAxMCAp IHx8IDA7Cn12YXIgY2hhcnMgPSBqUXVlcnkuYnJvd3Nlci5zYWZhcmkgJiYgcGFy c2VJbnQoalF1ZXJ5LmJyb3dzZXIudmVyc2lvbikgPCA0MTcgPwoJCSIoPzpbXFx3 Kl8tXXxcXFxcLikiIDoKCQkiKD86W1xcd1x1MDEyOC1cdUZGRkYqXy1dfFxcXFwu KSIsCglxdWlja0NoaWxkID0gbmV3IFJlZ0V4cCgiXj5cXHMqKCIgKyBjaGFycyAr ICIrKSIpLAoJcXVpY2tJRCA9IG5ldyBSZWdFeHAoIl4oIiArIGNoYXJzICsgIisp KCMpKCIgKyBjaGFycyArICIrKSIpLAoJcXVpY2tDbGFzcyA9IG5ldyBSZWdFeHAo Il4oWyMuXT8pKCIgKyBjaGFycyArICIqKSIpOwoKalF1ZXJ5LmV4dGVuZCh7Cgll eHByOiB7CgkJIiI6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gbVsyXT09IioifHxq UXVlcnkubm9kZU5hbWUoYSxtWzJdKTt9LAoJCSIjIjogZnVuY3Rpb24oYSxpLG0p e3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09bVsyXTt9LAoJCSI6IjogewoJ CQkvLyBQb3NpdGlvbiBDaGVja3MKCQkJbHQ6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1 cm4gaTxtWzNdLTA7fSwKCQkJZ3Q6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gaT5t WzNdLTA7fSwKCQkJbnRoOiBmdW5jdGlvbihhLGksbSl7cmV0dXJuIG1bM10tMD09 aTt9LAoJCQllcTogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzNdLTA9PWk7fSwK CQkJZmlyc3Q6IGZ1bmN0aW9uKGEsaSl7cmV0dXJuIGk9PTA7fSwKCQkJbGFzdDog ZnVuY3Rpb24oYSxpLG0scil7cmV0dXJuIGk9PXIubGVuZ3RoLTE7fSwKCQkJZXZl bjogZnVuY3Rpb24oYSxpKXtyZXR1cm4gaSUyPT0wO30sCgkJCW9kZDogZnVuY3Rp b24oYSxpKXtyZXR1cm4gaSUyO30sCgoJCQkvLyBDaGlsZCBDaGVja3MKCQkJImZp cnN0LWNoaWxkIjogZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZS5nZXRF bGVtZW50c0J5VGFnTmFtZSgiKiIpWzBdPT1hO30sCgkJCSJsYXN0LWNoaWxkIjog ZnVuY3Rpb24oYSl7cmV0dXJuIGpRdWVyeS5udGgoYS5wYXJlbnROb2RlLmxhc3RD aGlsZCwxLCJwcmV2aW91c1NpYmxpbmciKT09YTt9LAoJCQkib25seS1jaGlsZCI6 IGZ1bmN0aW9uKGEpe3JldHVybiAhalF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFz dENoaWxkLDIsInByZXZpb3VzU2libGluZyIpO30sCgoJCQkvLyBQYXJlbnQgQ2hl Y2tzCgkJCXBhcmVudDogZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlyc3RDaGlsZDt9 LAoJCQllbXB0eTogZnVuY3Rpb24oYSl7cmV0dXJuICFhLmZpcnN0Q2hpbGQ7fSwK CgkJCS8vIFRleHQgQ2hlY2sKCQkJY29udGFpbnM6IGZ1bmN0aW9uKGEsaSxtKXty ZXR1cm4gKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxqUXVlcnkoYSkudGV4 dCgpfHwiIikuaW5kZXhPZihtWzNdKT49MDt9LAoKCQkJLy8gVmlzaWJpbGl0eQoJ CQl2aXNpYmxlOiBmdW5jdGlvbihhKXtyZXR1cm4gImhpZGRlbiIhPWEudHlwZSYm alF1ZXJ5LmNzcyhhLCJkaXNwbGF5IikhPSJub25lIiYmalF1ZXJ5LmNzcyhhLCJ2 aXNpYmlsaXR5IikhPSJoaWRkZW4iO30sCgkJCWhpZGRlbjogZnVuY3Rpb24oYSl7 cmV0dXJuICJoaWRkZW4iPT1hLnR5cGV8fGpRdWVyeS5jc3MoYSwiZGlzcGxheSIp PT0ibm9uZSJ8fGpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIpPT0iaGlkZGVuIjt9 LAoKCQkJLy8gRm9ybSBhdHRyaWJ1dGVzCgkJCWVuYWJsZWQ6IGZ1bmN0aW9uKGEp e3JldHVybiAhYS5kaXNhYmxlZDt9LAoJCQlkaXNhYmxlZDogZnVuY3Rpb24oYSl7 cmV0dXJuIGEuZGlzYWJsZWQ7fSwKCQkJY2hlY2tlZDogZnVuY3Rpb24oYSl7cmV0 dXJuIGEuY2hlY2tlZDt9LAoJCQlzZWxlY3RlZDogZnVuY3Rpb24oYSl7cmV0dXJu IGEuc2VsZWN0ZWR8fGpRdWVyeS5hdHRyKGEsInNlbGVjdGVkIik7fSwKCgkJCS8v IEZvcm0gZWxlbWVudHMKCQkJdGV4dDogZnVuY3Rpb24oYSl7cmV0dXJuICJ0ZXh0 Ij09YS50eXBlO30sCgkJCXJhZGlvOiBmdW5jdGlvbihhKXtyZXR1cm4gInJhZGlv Ij09YS50eXBlO30sCgkJCWNoZWNrYm94OiBmdW5jdGlvbihhKXtyZXR1cm4gImNo ZWNrYm94Ij09YS50eXBlO30sCgkJCWZpbGU6IGZ1bmN0aW9uKGEpe3JldHVybiAi ZmlsZSI9PWEudHlwZTt9LAoJCQlwYXNzd29yZDogZnVuY3Rpb24oYSl7cmV0dXJu ICJwYXNzd29yZCI9PWEudHlwZTt9LAoJCQlzdWJtaXQ6IGZ1bmN0aW9uKGEpe3Jl dHVybiAic3VibWl0Ij09YS50eXBlO30sCgkJCWltYWdlOiBmdW5jdGlvbihhKXty ZXR1cm4gImltYWdlIj09YS50eXBlO30sCgkJCXJlc2V0OiBmdW5jdGlvbihhKXty ZXR1cm4gInJlc2V0Ij09YS50eXBlO30sCgkJCWJ1dHRvbjogZnVuY3Rpb24oYSl7 cmV0dXJuICJidXR0b24iPT1hLnR5cGV8fGpRdWVyeS5ub2RlTmFtZShhLCJidXR0 b24iKTt9LAoJCQlpbnB1dDogZnVuY3Rpb24oYSl7cmV0dXJuIC9pbnB1dHxzZWxl Y3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKTt9LAoKCQkJLy8g OmhhcygpCgkJCWhhczogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBqUXVlcnkuZmlu ZChtWzNdLGEpLmxlbmd0aDt9LAoKCQkJLy8gOmhlYWRlcgoJCQloZWFkZXI6IGZ1 bmN0aW9uKGEpe3JldHVybiAvaFxkL2kudGVzdChhLm5vZGVOYW1lKTt9LAoKCQkJ Ly8gOmFuaW1hdGVkCgkJCWFuaW1hdGVkOiBmdW5jdGlvbihhKXtyZXR1cm4galF1 ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycyxmdW5jdGlvbihmbil7cmV0dXJuIGE9PWZu LmVsZW07fSkubGVuZ3RoO30KCQl9Cgl9LAoKCS8vIFRoZSByZWd1bGFyIGV4cHJl c3Npb25zIHRoYXQgcG93ZXIgdGhlIHBhcnNpbmcgZW5naW5lCglwYXJzZTogWwoJ CS8vIE1hdGNoOiBbQHZhbHVlPSd0ZXN0J10sIFtAZm9vXQoJCS9eKFxbKSAqQD8o W1x3LV0rKSAqKFshKiRefj1dKikgKignPyI/KSguKj8pXDQgKlxdLywKCgkJLy8g TWF0Y2g6IDpjb250YWlucygnZm9vJykKCQkvXig6KShbXHctXSspXCgiPyc/KC4q PyhcKC4qP1wpKT9bXihdKj8pIj8nP1wpLywKCgkJLy8gTWF0Y2g6IDpldmVuLCA6 bGFzdC1jaGlsZCwgI2lkLCAuY2xhc3MKCQluZXcgUmVnRXhwKCJeKFs6LiNdKiko IiArIGNoYXJzICsgIispIikKCV0sCgoJbXVsdGlGaWx0ZXI6IGZ1bmN0aW9uKCBl eHByLCBlbGVtcywgbm90ICkgewoJCXZhciBvbGQsIGN1ciA9IFtdOwoKCQl3aGls ZSAoIGV4cHIgJiYgZXhwciAhPSBvbGQgKSB7CgkJCW9sZCA9IGV4cHI7CgkJCXZh ciBmID0galF1ZXJ5LmZpbHRlciggZXhwciwgZWxlbXMsIG5vdCApOwoJCQlleHBy ID0gZi50LnJlcGxhY2UoL15ccyosXHMqLywgIiIgKTsKCQkJY3VyID0gbm90ID8g ZWxlbXMgPSBmLnIgOiBqUXVlcnkubWVyZ2UoIGN1ciwgZi5yICk7CgkJfQoKCQly ZXR1cm4gY3VyOwoJfSwKCglmaW5kOiBmdW5jdGlvbiggdCwgY29udGV4dCApIHsK CQkvLyBRdWlja2x5IGhhbmRsZSBub24tc3RyaW5nIGV4cHJlc3Npb25zCgkJaWYg KCB0eXBlb2YgdCAhPSAic3RyaW5nIiApCgkJCXJldHVybiBbIHQgXTsKCgkJLy8g Y2hlY2sgdG8gbWFrZSBzdXJlIGNvbnRleHQgaXMgYSBET00gZWxlbWVudCBvciBh IGRvY3VtZW50CgkJaWYgKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgIT0g MSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9IDkpCgkJCXJldHVybiBbIF07CgoJCS8v IFNldCB0aGUgY29ycmVjdCBjb250ZXh0IChpZiBub25lIGlzIHByb3ZpZGVkKQoJ CWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKCQkvLyBJbml0aWFsaXpl IHRoZSBzZWFyY2gKCQl2YXIgcmV0ID0gW2NvbnRleHRdLCBkb25lID0gW10sIGxh c3QsIG5vZGVOYW1lOwoKCQkvLyBDb250aW51ZSB3aGlsZSBhIHNlbGVjdG9yIGV4 cHJlc3Npb24gZXhpc3RzLCBhbmQgd2hpbGUKCQkvLyB3ZSdyZSBubyBsb25nZXIg bG9vcGluZyB1cG9uIG91cnNlbHZlcwoJCXdoaWxlICggdCAmJiBsYXN0ICE9IHQg KSB7CgkJCXZhciByID0gW107CgkJCWxhc3QgPSB0OwoKCQkJdCA9IGpRdWVyeS50 cmltKHQpOwoKCQkJdmFyIGZvdW5kVG9rZW4gPSBmYWxzZSwKCgkJCS8vIEFuIGF0 dGVtcHQgYXQgc3BlZWRpbmcgdXAgY2hpbGQgc2VsZWN0b3JzIHRoYXQKCQkJLy8g cG9pbnQgdG8gYSBzcGVjaWZpYyBlbGVtZW50IHRhZwoJCQkJcmUgPSBxdWlja0No aWxkLAoKCQkJCW0gPSByZS5leGVjKHQpOwoKCQkJaWYgKCBtICkgewoJCQkJbm9k ZU5hbWUgPSBtWzFdLnRvVXBwZXJDYXNlKCk7CgoJCQkJLy8gUGVyZm9ybSBvdXIg b3duIGl0ZXJhdGlvbiBhbmQgZmlsdGVyCgkJCQlmb3IgKCB2YXIgaSA9IDA7IHJl dFtpXTsgaSsrICkKCQkJCQlmb3IgKCB2YXIgYyA9IHJldFtpXS5maXJzdENoaWxk OyBjOyBjID0gYy5uZXh0U2libGluZyApCgkJCQkJCWlmICggYy5ub2RlVHlwZSA9 PSAxICYmIChub2RlTmFtZSA9PSAiKiIgfHwgYy5ub2RlTmFtZS50b1VwcGVyQ2Fz ZSgpID09IG5vZGVOYW1lKSApCgkJCQkJCQlyLnB1c2goIGMgKTsKCgkJCQlyZXQg PSByOwoJCQkJdCA9IHQucmVwbGFjZSggcmUsICIiICk7CgkJCQlpZiAoIHQuaW5k ZXhPZigiICIpID09IDAgKSBjb250aW51ZTsKCQkJCWZvdW5kVG9rZW4gPSB0cnVl OwoJCQl9IGVsc2UgewoJCQkJcmUgPSAvXihbPit+XSlccyooXHcqKS9pOwoKCQkJ CWlmICggKG0gPSByZS5leGVjKHQpKSAhPSBudWxsICkgewoJCQkJCXIgPSBbXTsK CgkJCQkJdmFyIG1lcmdlID0ge307CgkJCQkJbm9kZU5hbWUgPSBtWzJdLnRvVXBw ZXJDYXNlKCk7CgkJCQkJbSA9IG1bMV07CgoJCQkJCWZvciAoIHZhciBqID0gMCwg cmwgPSByZXQubGVuZ3RoOyBqIDwgcmw7IGorKyApIHsKCQkJCQkJdmFyIG4gPSBt ID09ICJ+IiB8fCBtID09ICIrIiA/IHJldFtqXS5uZXh0U2libGluZyA6IHJldFtq XS5maXJzdENoaWxkOwoJCQkJCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5n ICkKCQkJCQkJCWlmICggbi5ub2RlVHlwZSA9PSAxICkgewoJCQkJCQkJCXZhciBp ZCA9IGpRdWVyeS5kYXRhKG4pOwoKCQkJCQkJCQlpZiAoIG0gPT0gIn4iICYmIG1l cmdlW2lkXSApIGJyZWFrOwoKCQkJCQkJCQlpZiAoIW5vZGVOYW1lIHx8IG4ubm9k ZU5hbWUudG9VcHBlckNhc2UoKSA9PSBub2RlTmFtZSApIHsKCQkJCQkJCQkJaWYg KCBtID09ICJ+IiApIG1lcmdlW2lkXSA9IHRydWU7CgkJCQkJCQkJCXIucHVzaCgg biApOwoJCQkJCQkJCX0KCgkJCQkJCQkJaWYgKCBtID09ICIrIiApIGJyZWFrOwoJ CQkJCQkJfQoJCQkJCX0KCgkJCQkJcmV0ID0gcjsKCgkJCQkJLy8gQW5kIHJlbW92 ZSB0aGUgdG9rZW4KCQkJCQl0ID0galF1ZXJ5LnRyaW0oIHQucmVwbGFjZSggcmUs ICIiICkgKTsKCQkJCQlmb3VuZFRva2VuID0gdHJ1ZTsKCQkJCX0KCQkJfQoKCQkJ Ly8gU2VlIGlmIHRoZXJlJ3Mgc3RpbGwgYW4gZXhwcmVzc2lvbiwgYW5kIHRoYXQg d2UgaGF2ZW4ndCBhbHJlYWR5CgkJCS8vIG1hdGNoZWQgYSB0b2tlbgoJCQlpZiAo IHQgJiYgIWZvdW5kVG9rZW4gKSB7CgkJCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXhw cmVzc2lvbnMKCQkJCWlmICggIXQuaW5kZXhPZigiLCIpICkgewoJCQkJCS8vIENs ZWFuIHRoZSByZXN1bHQgc2V0CgkJCQkJaWYgKCBjb250ZXh0ID09IHJldFswXSAp IHJldC5zaGlmdCgpOwoKCQkJCQkvLyBNZXJnZSB0aGUgcmVzdWx0IHNldHMKCQkJ CQlkb25lID0galF1ZXJ5Lm1lcmdlKCBkb25lLCByZXQgKTsKCgkJCQkJLy8gUmVz ZXQgdGhlIGNvbnRleHQKCQkJCQlyID0gcmV0ID0gW2NvbnRleHRdOwoKCQkJCQkv LyBUb3VjaCB1cCB0aGUgc2VsZWN0b3Igc3RyaW5nCgkJCQkJdCA9ICIgIiArIHQu c3Vic3RyKDEsdC5sZW5ndGgpOwoKCQkJCX0gZWxzZSB7CgkJCQkJLy8gT3B0aW1p emUgZm9yIHRoZSBjYXNlIG5vZGVOYW1lI2lkTmFtZQoJCQkJCXZhciByZTIgPSBx dWlja0lEOwoJCQkJCXZhciBtID0gcmUyLmV4ZWModCk7CgoJCQkJCS8vIFJlLW9y Z2FuaXplIHRoZSByZXN1bHRzLCBzbyB0aGF0IHRoZXkncmUgY29uc2lzdGVudAoJ CQkJCWlmICggbSApIHsKCQkJCQkJbSA9IFsgMCwgbVsyXSwgbVszXSwgbVsxXSBd OwoKCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBPdGhlcndpc2UsIGRvIGEgdHJhZGl0 aW9uYWwgZmlsdGVyIGNoZWNrIGZvcgoJCQkJCQkvLyBJRCwgY2xhc3MsIGFuZCBl bGVtZW50IHNlbGVjdG9ycwoJCQkJCQlyZTIgPSBxdWlja0NsYXNzOwoJCQkJCQlt ID0gcmUyLmV4ZWModCk7CgkJCQkJfQoKCQkJCQltWzJdID0gbVsyXS5yZXBsYWNl KC9cXC9nLCAiIik7CgoJCQkJCXZhciBlbGVtID0gcmV0W3JldC5sZW5ndGgtMV07 CgoJCQkJCS8vIFRyeSB0byBkbyBhIGdsb2JhbCBzZWFyY2ggYnkgSUQsIHdoZXJl IHdlIGNhbgoJCQkJCWlmICggbVsxXSA9PSAiIyIgJiYgZWxlbSAmJiBlbGVtLmdl dEVsZW1lbnRCeUlkICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CgkJCQkJ CS8vIE9wdGltaXphdGlvbiBmb3IgSFRNTCBkb2N1bWVudCBjYXNlCgkJCQkJCXZh ciBvaWQgPSBlbGVtLmdldEVsZW1lbnRCeUlkKG1bMl0pOwoKCQkJCQkJLy8gRG8g YSBxdWljayBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYWN0dWFsIElE IGF0dHJpYnV0ZQoJCQkJCQkvLyB0byBhdm9pZCBzZWxlY3RpbmcgYnkgdGhlIG5h bWUgYXR0cmlidXRlIGluIElFCgkJCQkJCS8vIGFsc28gY2hlY2sgdG8gaW5zdXJl IGlkIGlzIGEgc3RyaW5nIHRvIGF2b2lkIHNlbGVjdGluZyBhbiBlbGVtZW50IHdp dGggdGhlIG5hbWUgb2YgJ2lkJyBpbnNpZGUgYSBmb3JtCgkJCQkJCWlmICggKGpR dWVyeS5icm93c2VyLm1zaWV8fGpRdWVyeS5icm93c2VyLm9wZXJhKSAmJiBvaWQg JiYgdHlwZW9mIG9pZC5pZCA9PSAic3RyaW5nIiAmJiBvaWQuaWQgIT0gbVsyXSAp CgkJCQkJCQlvaWQgPSBqUXVlcnkoJ1tAaWQ9IicrbVsyXSsnIl0nLCBlbGVtKVsw XTsKCgkJCQkJCS8vIERvIGEgcXVpY2sgY2hlY2sgZm9yIG5vZGUgbmFtZSAod2hl cmUgYXBwbGljYWJsZSkgc28KCQkJCQkJLy8gdGhhdCBkaXYjZm9vIHNlYXJjaGVz IHdpbGwgYmUgcmVhbGx5IGZhc3QKCQkJCQkJcmV0ID0gciA9IG9pZCAmJiAoIW1b M10gfHwgalF1ZXJ5Lm5vZGVOYW1lKG9pZCwgbVszXSkpID8gW29pZF0gOiBbXTsK CQkJCQl9IGVsc2UgewoJCQkJCQkvLyBXZSBuZWVkIHRvIGZpbmQgYWxsIGRlc2Nl bmRhbnQgZWxlbWVudHMKCQkJCQkJZm9yICggdmFyIGkgPSAwOyByZXRbaV07IGkr KyApIHsKCQkJCQkJCS8vIEdyYWIgdGhlIHRhZyBuYW1lIGJlaW5nIHNlYXJjaGVk IGZvcgoJCQkJCQkJdmFyIHRhZyA9IG1bMV0gPT0gIiMiICYmIG1bM10gPyBtWzNd IDogbVsxXSAhPSAiIiB8fCBtWzBdID09ICIiID8gIioiIDogbVsyXTsKCgkJCQkJ CQkvLyBIYW5kbGUgSUU3IGJlaW5nIHJlYWxseSBkdW1iIGFib3V0IDxvYmplY3Q+ cwoJCQkJCQkJaWYgKCB0YWcgPT0gIioiICYmIHJldFtpXS5ub2RlTmFtZS50b0xv d2VyQ2FzZSgpID09ICJvYmplY3QiICkKCQkJCQkJCQl0YWcgPSAicGFyYW0iOwoK CQkJCQkJCXIgPSBqUXVlcnkubWVyZ2UoIHIsIHJldFtpXS5nZXRFbGVtZW50c0J5 VGFnTmFtZSggdGFnICkpOwoJCQkJCQl9CgoJCQkJCQkvLyBJdCdzIGZhc3RlciB0 byBmaWx0ZXIgYnkgY2xhc3MgYW5kIGJlIGRvbmUgd2l0aCBpdAoJCQkJCQlpZiAo IG1bMV0gPT0gIi4iICkKCQkJCQkJCXIgPSBqUXVlcnkuY2xhc3NGaWx0ZXIoIHIs IG1bMl0gKTsKCgkJCQkJCS8vIFNhbWUgd2l0aCBJRCBmaWx0ZXJpbmcKCQkJCQkJ aWYgKCBtWzFdID09ICIjIiApIHsKCQkJCQkJCXZhciB0bXAgPSBbXTsKCgkJCQkJ CQkvLyBUcnkgdG8gZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSBJRAoJCQkJCQkJ Zm9yICggdmFyIGkgPSAwOyByW2ldOyBpKysgKQoJCQkJCQkJCWlmICggcltpXS5n ZXRBdHRyaWJ1dGUoImlkIikgPT0gbVsyXSApIHsKCQkJCQkJCQkJdG1wID0gWyBy W2ldIF07CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCgkJCQkJCQlyID0gdG1w OwoJCQkJCQl9CgoJCQkJCQlyZXQgPSByOwoJCQkJCX0KCgkJCQkJdCA9IHQucmVw bGFjZSggcmUyLCAiIiApOwoJCQkJfQoKCQkJfQoKCQkJLy8gSWYgYSBzZWxlY3Rv ciBzdHJpbmcgc3RpbGwgZXhpc3RzCgkJCWlmICggdCApIHsKCQkJCS8vIEF0dGVt cHQgdG8gZmlsdGVyIGl0CgkJCQl2YXIgdmFsID0galF1ZXJ5LmZpbHRlcih0LHIp OwoJCQkJcmV0ID0gciA9IHZhbC5yOwoJCQkJdCA9IGpRdWVyeS50cmltKHZhbC50 KTsKCQkJfQoJCX0KCgkJLy8gQW4gZXJyb3Igb2NjdXJyZWQgd2l0aCB0aGUgc2Vs ZWN0b3I7CgkJLy8ganVzdCByZXR1cm4gYW4gZW1wdHkgc2V0IGluc3RlYWQKCQlp ZiAoIHQgKQoJCQlyZXQgPSBbXTsKCgkJLy8gUmVtb3ZlIHRoZSByb290IGNvbnRl eHQKCQlpZiAoIHJldCAmJiBjb250ZXh0ID09IHJldFswXSApCgkJCXJldC5zaGlm dCgpOwoKCQkvLyBBbmQgY29tYmluZSB0aGUgcmVzdWx0cwoJCWRvbmUgPSBqUXVl cnkubWVyZ2UoIGRvbmUsIHJldCApOwoKCQlyZXR1cm4gZG9uZTsKCX0sCgoJY2xh c3NGaWx0ZXI6IGZ1bmN0aW9uKHIsbSxub3QpewoJCW0gPSAiICIgKyBtICsgIiAi OwoJCXZhciB0bXAgPSBbXTsKCQlmb3IgKCB2YXIgaSA9IDA7IHJbaV07IGkrKyAp IHsKCQkJdmFyIHBhc3MgPSAoIiAiICsgcltpXS5jbGFzc05hbWUgKyAiICIpLmlu ZGV4T2YoIG0gKSA+PSAwOwoJCQlpZiAoICFub3QgJiYgcGFzcyB8fCBub3QgJiYg IXBhc3MgKQoJCQkJdG1wLnB1c2goIHJbaV0gKTsKCQl9CgkJcmV0dXJuIHRtcDsK CX0sCgoJZmlsdGVyOiBmdW5jdGlvbih0LHIsbm90KSB7CgkJdmFyIGxhc3Q7CgoJ CS8vIExvb2sgZm9yIGNvbW1vbiBmaWx0ZXIgZXhwcmVzc2lvbnMKCQl3aGlsZSAo IHQgJiYgdCAhPSBsYXN0ICkgewoJCQlsYXN0ID0gdDsKCgkJCXZhciBwID0galF1 ZXJ5LnBhcnNlLCBtOwoKCQkJZm9yICggdmFyIGkgPSAwOyBwW2ldOyBpKysgKSB7 CgkJCQltID0gcFtpXS5leGVjKCB0ICk7CgoJCQkJaWYgKCBtICkgewoJCQkJCS8v IFJlbW92ZSB3aGF0IHdlIGp1c3QgbWF0Y2hlZAoJCQkJCXQgPSB0LnN1YnN0cmlu ZyggbVswXS5sZW5ndGggKTsKCgkJCQkJbVsyXSA9IG1bMl0ucmVwbGFjZSgvXFwv ZywgIiIpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgoJCQlpZiAoICFtICkKCQkJ CWJyZWFrOwoKCQkJLy8gOm5vdCgpIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgY2Fu IGJlIG9wdGltaXplZCBieQoJCQkvLyBrZWVwaW5nIGl0IG91dCBvZiB0aGUgZXhw cmVzc2lvbiBsaXN0CgkJCWlmICggbVsxXSA9PSAiOiIgJiYgbVsyXSA9PSAibm90 IiApCgkJCQkvLyBvcHRpbWl6ZSBpZiBvbmx5IG9uZSBzZWxlY3RvciBmb3VuZCAo bW9zdCBjb21tb24gY2FzZSkKCQkJCXIgPSBpc1NpbXBsZS50ZXN0KCBtWzNdICkg PwoJCQkJCWpRdWVyeS5maWx0ZXIobVszXSwgciwgdHJ1ZSkuciA6CgkJCQkJalF1 ZXJ5KCByICkubm90KCBtWzNdICk7CgoJCQkvLyBXZSBjYW4gZ2V0IGEgYmlnIHNw ZWVkIGJvb3N0IGJ5IGZpbHRlcmluZyBieSBjbGFzcyBoZXJlCgkJCWVsc2UgaWYg KCBtWzFdID09ICIuIiApCgkJCQlyID0galF1ZXJ5LmNsYXNzRmlsdGVyKHIsIG1b Ml0sIG5vdCk7CgoJCQllbHNlIGlmICggbVsxXSA9PSAiWyIgKSB7CgkJCQl2YXIg dG1wID0gW10sIHR5cGUgPSBtWzNdOwoKCQkJCWZvciAoIHZhciBpID0gMCwgcmwg PSByLmxlbmd0aDsgaSA8IHJsOyBpKysgKSB7CgkJCQkJdmFyIGEgPSByW2ldLCB6 ID0gYVsgalF1ZXJ5LnByb3BzW21bMl1dIHx8IG1bMl0gXTsKCgkJCQkJaWYgKCB6 ID09IG51bGwgfHwgL2hyZWZ8c3JjfHNlbGVjdGVkLy50ZXN0KG1bMl0pICkKCQkJ CQkJeiA9IGpRdWVyeS5hdHRyKGEsbVsyXSkgfHwgJyc7CgoJCQkJCWlmICggKHR5 cGUgPT0gIiIgJiYgISF6IHx8CgkJCQkJCSB0eXBlID09ICI9IiAmJiB6ID09IG1b NV0gfHwKCQkJCQkJIHR5cGUgPT0gIiE9IiAmJiB6ICE9IG1bNV0gfHwKCQkJCQkJ IHR5cGUgPT0gIl49IiAmJiB6ICYmICF6LmluZGV4T2YobVs1XSkgfHwKCQkJCQkJ IHR5cGUgPT0gIiQ9IiAmJiB6LnN1YnN0cih6Lmxlbmd0aCAtIG1bNV0ubGVuZ3Ro KSA9PSBtWzVdIHx8CgkJCQkJCSAodHlwZSA9PSAiKj0iIHx8IHR5cGUgPT0gIn49 IikgJiYgei5pbmRleE9mKG1bNV0pID49IDApIF4gbm90ICkKCQkJCQkJCXRtcC5w dXNoKCBhICk7CgkJCQl9CgoJCQkJciA9IHRtcDsKCgkJCS8vIFdlIGNhbiBnZXQg YSBzcGVlZCBib29zdCBieSBoYW5kbGluZyBudGgtY2hpbGQgaGVyZQoJCQl9IGVs c2UgaWYgKCBtWzFdID09ICI6IiAmJiBtWzJdID09ICJudGgtY2hpbGQiICkgewoJ CQkJdmFyIG1lcmdlID0ge30sIHRtcCA9IFtdLAoJCQkJCS8vIHBhcnNlIGVxdWF0 aW9ucyBsaWtlICdldmVuJywgJ29kZCcsICc1JywgJzJuJywgJzNuKzInLCAnNG4t MScsICctbis2JwoJCQkJCXRlc3QgPSAvKC0/KShcZCopbigoPzpcK3wtKT9cZCop Ly5leGVjKAoJCQkJCQltWzNdID09ICJldmVuIiAmJiAiMm4iIHx8IG1bM10gPT0g Im9kZCIgJiYgIjJuKzEiIHx8CgkJCQkJCSEvXEQvLnRlc3QobVszXSkgJiYgIjBu KyIgKyBtWzNdIHx8IG1bM10pLAoJCQkJCS8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVy cyAoZmlyc3QpbisobGFzdCkgaW5jbHVkaW5nIGlmIHRoZXkgYXJlIG5lZ2F0aXZl CgkJCQkJZmlyc3QgPSAodGVzdFsxXSArICh0ZXN0WzJdIHx8IDEpKSAtIDAsIGxh c3QgPSB0ZXN0WzNdIC0gMDsKCgkJCQkvLyBsb29wIHRocm91Z2ggYWxsIHRoZSBl bGVtZW50cyBsZWZ0IGluIHRoZSBqUXVlcnkgb2JqZWN0CgkJCQlmb3IgKCB2YXIg aSA9IDAsIHJsID0gci5sZW5ndGg7IGkgPCBybDsgaSsrICkgewoJCQkJCXZhciBu b2RlID0gcltpXSwgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSwgaWQgPSBq UXVlcnkuZGF0YShwYXJlbnROb2RlKTsKCgkJCQkJaWYgKCAhbWVyZ2VbaWRdICkg ewoJCQkJCQl2YXIgYyA9IDE7CgoJCQkJCQlmb3IgKCB2YXIgbiA9IHBhcmVudE5v ZGUuZmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKQoJCQkJCQkJaWYg KCBuLm5vZGVUeXBlID09IDEgKQoJCQkJCQkJCW4ubm9kZUluZGV4ID0gYysrOwoK CQkJCQkJbWVyZ2VbaWRdID0gdHJ1ZTsKCQkJCQl9CgoJCQkJCXZhciBhZGQgPSBm YWxzZTsKCgkJCQkJaWYgKCBmaXJzdCA9PSAwICkgewoJCQkJCQlpZiAoIG5vZGUu bm9kZUluZGV4ID09IGxhc3QgKQoJCQkJCQkJYWRkID0gdHJ1ZTsKCQkJCQl9IGVs c2UgaWYgKCAobm9kZS5ub2RlSW5kZXggLSBsYXN0KSAlIGZpcnN0ID09IDAgJiYg KG5vZGUubm9kZUluZGV4IC0gbGFzdCkgLyBmaXJzdCA+PSAwICkKCQkJCQkJYWRk ID0gdHJ1ZTsKCgkJCQkJaWYgKCBhZGQgXiBub3QgKQoJCQkJCQl0bXAucHVzaCgg bm9kZSApOwoJCQkJfQoKCQkJCXIgPSB0bXA7CgoJCQkvLyBPdGhlcndpc2UsIGZp bmQgdGhlIGV4cHJlc3Npb24gdG8gZXhlY3V0ZQoJCQl9IGVsc2UgewoJCQkJdmFy IGZuID0galF1ZXJ5LmV4cHJbIG1bMV0gXTsKCQkJCWlmICggdHlwZW9mIGZuID09 ICJvYmplY3QiICkKCQkJCQlmbiA9IGZuWyBtWzJdIF07CgoJCQkJaWYgKCB0eXBl b2YgZm4gPT0gInN0cmluZyIgKQoJCQkJCWZuID0gZXZhbCgiZmFsc2V8fGZ1bmN0 aW9uKGEsaSl7cmV0dXJuICIgKyBmbiArICI7fSIpOwoKCQkJCS8vIEV4ZWN1dGUg aXQgYWdhaW5zdCB0aGUgY3VycmVudCBmaWx0ZXIKCQkJCXIgPSBqUXVlcnkuZ3Jl cCggciwgZnVuY3Rpb24oZWxlbSwgaSl7CgkJCQkJcmV0dXJuIGZuKGVsZW0sIGks IG0sIHIpOwoJCQkJfSwgbm90ICk7CgkJCX0KCQl9CgoJCS8vIFJldHVybiBhbiBh cnJheSBvZiBmaWx0ZXJlZCBlbGVtZW50cyAocikKCQkvLyBhbmQgdGhlIG1vZGlm aWVkIGV4cHJlc3Npb24gc3RyaW5nICh0KQoJCXJldHVybiB7IHI6IHIsIHQ6IHQg fTsKCX0sCgoJZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyICl7CgkJdmFyIG1hdGNo ZWQgPSBbXSwKCQkJY3VyID0gZWxlbVtkaXJdOwoJCXdoaWxlICggY3VyICYmIGN1 ciAhPSBkb2N1bWVudCApIHsKCQkJaWYgKCBjdXIubm9kZVR5cGUgPT0gMSApCgkJ CQltYXRjaGVkLnB1c2goIGN1ciApOwoJCQljdXIgPSBjdXJbZGlyXTsKCQl9CgkJ cmV0dXJuIG1hdGNoZWQ7Cgl9LAoKCW50aDogZnVuY3Rpb24oY3VyLHJlc3VsdCxk aXIsZWxlbSl7CgkJcmVzdWx0ID0gcmVzdWx0IHx8IDE7CgkJdmFyIG51bSA9IDA7 CgoJCWZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGlyXSApCgkJCWlmICggY3VyLm5v ZGVUeXBlID09IDEgJiYgKytudW0gPT0gcmVzdWx0ICkKCQkJCWJyZWFrOwoKCQly ZXR1cm4gY3VyOwoJfSwKCglzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsK CQl2YXIgciA9IFtdOwoKCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkg ewoJCQlpZiAoIG4ubm9kZVR5cGUgPT0gMSAmJiBuICE9IGVsZW0gKQoJCQkJci5w dXNoKCBuICk7CgkJfQoKCQlyZXR1cm4gcjsKCX0KfSk7Ci8qCiAqIEEgbnVtYmVy IG9mIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBmb3IgbWFuYWdpbmcgZXZlbnRzLgog KiBNYW55IG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhpcyBjb2RlIG9yaWduYXRlZCBm cm9tCiAqIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeS4KICovCmpRdWVy eS5ldmVudCA9IHsKCgkvLyBCaW5kIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQKCS8v IE9yaWdpbmFsIGJ5IERlYW4gRWR3YXJkcwoJYWRkOiBmdW5jdGlvbihlbGVtLCB0 eXBlcywgaGFuZGxlciwgZGF0YSkgewoJCWlmICggZWxlbS5ub2RlVHlwZSA9PSAz IHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJCXJldHVybjsKCgkJLy8gRm9yIHdo YXRldmVyIHJlYXNvbiwgSUUgaGFzIHRyb3VibGUgcGFzc2luZyB0aGUgd2luZG93 IG9iamVjdAoJCS8vIGFyb3VuZCwgY2F1c2luZyBpdCB0byBiZSBjbG9uZWQgaW4g dGhlIHByb2Nlc3MKCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgJiYgZWxlbS5z ZXRJbnRlcnZhbCApCgkJCWVsZW0gPSB3aW5kb3c7CgoJCS8vIE1ha2Ugc3VyZSB0 aGF0IHRoZSBmdW5jdGlvbiBiZWluZyBleGVjdXRlZCBoYXMgYSB1bmlxdWUgSUQK CQlpZiAoICFoYW5kbGVyLmd1aWQgKQoJCQloYW5kbGVyLmd1aWQgPSB0aGlzLmd1 aWQrKzsKCgkJLy8gaWYgZGF0YSBpcyBwYXNzZWQsIGJpbmQgdG8gaGFuZGxlcgoJ CWlmKCBkYXRhICE9IHVuZGVmaW5lZCApIHsKCQkJLy8gQ3JlYXRlIHRlbXBvcmFy eSBmdW5jdGlvbiBwb2ludGVyIHRvIG9yaWdpbmFsIGhhbmRsZXIKCQkJdmFyIGZu ID0gaGFuZGxlcjsKCgkJCS8vIENyZWF0ZSB1bmlxdWUgaGFuZGxlciBmdW5jdGlv biwgd3JhcHBlZCBhcm91bmQgb3JpZ2luYWwgaGFuZGxlcgoJCQloYW5kbGVyID0g dGhpcy5wcm94eSggZm4sIGZ1bmN0aW9uKCkgewoJCQkJLy8gUGFzcyBhcmd1bWVu dHMgYW5kIGNvbnRleHQgdG8gb3JpZ2luYWwgaGFuZGxlcgoJCQkJcmV0dXJuIGZu LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgkJCX0pOwoKCQkJLy8gU3RvcmUgZGF0 YSBpbiB1bmlxdWUgaGFuZGxlcgoJCQloYW5kbGVyLmRhdGEgPSBkYXRhOwoJCX0K CgkJLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZQoJCXZhciBl dmVudHMgPSBqUXVlcnkuZGF0YShlbGVtLCAiZXZlbnRzIikgfHwgalF1ZXJ5LmRh dGEoZWxlbSwgImV2ZW50cyIsIHt9KSwKCQkJaGFuZGxlID0galF1ZXJ5LmRhdGEo ZWxlbSwgImhhbmRsZSIpIHx8IGpRdWVyeS5kYXRhKGVsZW0sICJoYW5kbGUiLCBm dW5jdGlvbigpewoJCQkJLy8gSGFuZGxlIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSB0 cmlnZ2VyIGFuZCB3aGVuCgkJCQkvLyBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIg YSBwYWdlIGhhcyB1bmxvYWRlZAoJCQkJaWYgKCB0eXBlb2YgalF1ZXJ5ICE9ICJ1 bmRlZmluZWQiICYmICFqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkKCQkJCQlyZXR1 cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVs ZW0sIGFyZ3VtZW50cyk7CgkJCX0pOwoJCS8vIEFkZCBlbGVtIGFzIGEgcHJvcGVy dHkgb2YgdGhlIGhhbmRsZSBmdW5jdGlvbgoJCS8vIFRoaXMgaXMgdG8gcHJldmVu dCBhIG1lbW9yeSBsZWFrIHdpdGggbm9uLW5hdGl2ZQoJCS8vIGV2ZW50IGluIElF LgoJCWhhbmRsZS5lbGVtID0gZWxlbTsKCgkJLy8gSGFuZGxlIG11bHRpcGxlIGV2 ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQoJCS8vIGpRdWVyeSguLi4pLmJpbmQo Im1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKCQlqUXVlcnkuZWFjaCh0eXBlcy5z cGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4LCB0eXBlKSB7CgkJCS8vIE5hbWVz cGFjZWQgZXZlbnQgaGFuZGxlcnMKCQkJdmFyIHBhcnRzID0gdHlwZS5zcGxpdCgi LiIpOwoJCQl0eXBlID0gcGFydHNbMF07CgkJCWhhbmRsZXIudHlwZSA9IHBhcnRz WzFdOwoKCQkJLy8gR2V0IHRoZSBjdXJyZW50IGxpc3Qgb2YgZnVuY3Rpb25zIGJv dW5kIHRvIHRoaXMgZXZlbnQKCQkJdmFyIGhhbmRsZXJzID0gZXZlbnRzW3R5cGVd OwoKCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZQoJCQlpZiAoIWhh bmRsZXJzKSB7CgkJCQloYW5kbGVycyA9IGV2ZW50c1t0eXBlXSA9IHt9OwoKCQkJ CS8vIENoZWNrIGZvciBhIHNwZWNpYWwgZXZlbnQgaGFuZGxlcgoJCQkJLy8gT25s eSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lh bAoJCQkJLy8gZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQoJCQkJaWYgKCAh alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0gfHwgalF1ZXJ5LmV2ZW50LnNwZWNp YWxbdHlwZV0uc2V0dXAuY2FsbChlbGVtKSA9PT0gZmFsc2UgKSB7CgkJCQkJLy8g QmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKCQkJ CQlpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKQoJCQkJCQllbGVtLmFkZEV2ZW50 TGlzdGVuZXIodHlwZSwgaGFuZGxlLCBmYWxzZSk7CgkJCQkJZWxzZSBpZiAoZWxl bS5hdHRhY2hFdmVudCkKCQkJCQkJZWxlbS5hdHRhY2hFdmVudCgib24iICsgdHlw ZSwgaGFuZGxlKTsKCQkJCX0KCQkJfQoKCQkJLy8gQWRkIHRoZSBmdW5jdGlvbiB0 byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdAoJCQloYW5kbGVyc1toYW5kbGVy Lmd1aWRdID0gaGFuZGxlcjsKCgkJCS8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZl bnRzIGhhdmUgYmVlbiB1c2VkLCBmb3IgZ2xvYmFsIHRyaWdnZXJpbmcKCQkJalF1 ZXJ5LmV2ZW50Lmdsb2JhbFt0eXBlXSA9IHRydWU7CgkJfSk7CgoJCS8vIE51bGxp ZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQoJCWVsZW0gPSBu dWxsOwoJfSwKCglndWlkOiAxLAoJZ2xvYmFsOiB7fSwKCgkvLyBEZXRhY2ggYW4g ZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKCXJlbW92ZTog ZnVuY3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRsZXIpIHsKCQkvLyBkb24ndCBkbyBl dmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICggZWxlbS5ub2Rl VHlwZSA9PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJCXJldHVybjsKCgkJ dmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKGVsZW0sICJldmVudHMiKSwgcmV0LCBp bmRleDsKCgkJaWYgKCBldmVudHMgKSB7CgkJCS8vIFVuYmluZCBhbGwgZXZlbnRz IGZvciB0aGUgZWxlbWVudAoJCQlpZiAoIHR5cGVzID09IHVuZGVmaW5lZCB8fCAo dHlwZW9mIHR5cGVzID09ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PSAi LiIpICkKCQkJCWZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApCgkJCQkJdGhpcy5y ZW1vdmUoIGVsZW0sIHR5cGUgKyAodHlwZXMgfHwgIiIpICk7CgkJCWVsc2UgewoJ CQkJLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKCQkJ CWlmICggdHlwZXMudHlwZSApIHsKCQkJCQloYW5kbGVyID0gdHlwZXMuaGFuZGxl cjsKCQkJCQl0eXBlcyA9IHR5cGVzLnR5cGU7CgkJCQl9CgoJCQkJLy8gSGFuZGxl IG11bHRpcGxlIGV2ZW50cyBzZXBlcmF0ZWQgYnkgYSBzcGFjZQoJCQkJLy8galF1 ZXJ5KC4uLikudW5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7CgkJCQlq UXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4LCB0 eXBlKXsKCQkJCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCgkJCQkJdmFy IHBhcnRzID0gdHlwZS5zcGxpdCgiLiIpOwoJCQkJCXR5cGUgPSBwYXJ0c1swXTsK CgkJCQkJaWYgKCBldmVudHNbdHlwZV0gKSB7CgkJCQkJCS8vIHJlbW92ZSB0aGUg Z2l2ZW4gaGFuZGxlciBmb3IgdGhlIGdpdmVuIHR5cGUKCQkJCQkJaWYgKCBoYW5k bGVyICkKCQkJCQkJCWRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlci5ndWlkXTsK CgkJCQkJCS8vIHJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBl CgkJCQkJCWVsc2UKCQkJCQkJCWZvciAoIGhhbmRsZXIgaW4gZXZlbnRzW3R5cGVd ICkKCQkJCQkJCQkvLyBIYW5kbGUgdGhlIHJlbW92YWwgb2YgbmFtZXNwYWNlZCBl dmVudHMKCQkJCQkJCQlpZiAoICFwYXJ0c1sxXSB8fCBldmVudHNbdHlwZV1baGFu ZGxlcl0udHlwZSA9PSBwYXJ0c1sxXSApCgkJCQkJCQkJCWRlbGV0ZSBldmVudHNb dHlwZV1baGFuZGxlcl07CgoJCQkJCQkvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBo YW5kbGVyIGlmIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKCQkJCQkJZm9yICggcmV0 IGluIGV2ZW50c1t0eXBlXSApIGJyZWFrOwoJCQkJCQlpZiAoICFyZXQgKSB7CgkJ CQkJCQlpZiAoICFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXSB8fCBqUXVlcnku ZXZlbnQuc3BlY2lhbFt0eXBlXS50ZWFyZG93bi5jYWxsKGVsZW0pID09PSBmYWxz ZSApIHsKCQkJCQkJCQlpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKQoJCQkJ CQkJCQllbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgalF1ZXJ5LmRhdGEo ZWxlbSwgImhhbmRsZSIpLCBmYWxzZSk7CgkJCQkJCQkJZWxzZSBpZiAoZWxlbS5k ZXRhY2hFdmVudCkKCQkJCQkJCQkJZWxlbS5kZXRhY2hFdmVudCgib24iICsgdHlw ZSwgalF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpKTsKCQkJCQkJCX0KCQkJCQkJ CXJldCA9IG51bGw7CgkJCQkJCQlkZWxldGUgZXZlbnRzW3R5cGVdOwoJCQkJCQl9 CgkJCQkJfQoJCQkJfSk7CgkJCX0KCgkJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBp ZiBpdCdzIG5vIGxvbmdlciB1c2VkCgkJCWZvciAoIHJldCBpbiBldmVudHMgKSBi cmVhazsKCQkJaWYgKCAhcmV0ICkgewoJCQkJdmFyIGhhbmRsZSA9IGpRdWVyeS5k YXRhKCBlbGVtLCAiaGFuZGxlIiApOwoJCQkJaWYgKCBoYW5kbGUgKSBoYW5kbGUu ZWxlbSA9IG51bGw7CgkJCQlqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImV2ZW50 cyIgKTsKCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiaGFuZGxlIiApOwoJ CQl9CgkJfQoJfSwKCgl0cmlnZ2VyOiBmdW5jdGlvbih0eXBlLCBkYXRhLCBlbGVt LCBkb25hdGl2ZSwgZXh0cmEpIHsKCQkvLyBDbG9uZSB0aGUgaW5jb21pbmcgZGF0 YSwgaWYgYW55CgkJZGF0YSA9IGpRdWVyeS5tYWtlQXJyYXkoZGF0YSk7CgoJCWlm ICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsKCQkJdHlwZSA9IHR5cGUuc2xp Y2UoMCwgLTEpOwoJCQl2YXIgZXhjbHVzaXZlID0gdHJ1ZTsKCQl9CgoJCS8vIEhh bmRsZSBhIGdsb2JhbCB0cmlnZ2VyCgkJaWYgKCAhZWxlbSApIHsKCQkJLy8gT25s eSB0cmlnZ2VyIGlmIHdlJ3ZlIGV2ZXIgYm91bmQgYW4gZXZlbnQgZm9yIGl0CgkJ CWlmICggdGhpcy5nbG9iYWxbdHlwZV0gKQoJCQkJalF1ZXJ5KCIqIikuYWRkKFt3 aW5kb3csIGRvY3VtZW50XSkudHJpZ2dlcih0eXBlLCBkYXRhKTsKCgkJLy8gSGFu ZGxlIHRyaWdnZXJpbmcgYSBzaW5nbGUgZWxlbWVudAoJCX0gZWxzZSB7CgkJCS8v IGRvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCgkJCWlm ICggZWxlbS5ub2RlVHlwZSA9PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT0gOCApCgkJ CQlyZXR1cm4gdW5kZWZpbmVkOwoKCQkJdmFyIHZhbCwgcmV0LCBmbiA9IGpRdWVy eS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gfHwgbnVsbCApLAoJCQkJLy8gQ2hl Y2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGZha2UgZXZlbnQsIG9y IG5vdAoJCQkJZXZlbnQgPSAhZGF0YVswXSB8fCAhZGF0YVswXS5wcmV2ZW50RGVm YXVsdDsKCgkJCS8vIFBhc3MgYWxvbmcgYSBmYWtlIGV2ZW50CgkJCWlmICggZXZl bnQgKSB7CgkJCQlkYXRhLnVuc2hpZnQoewoJCQkJCXR5cGU6IHR5cGUsCgkJCQkJ dGFyZ2V0OiBlbGVtLAoJCQkJCXByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpe30s CgkJCQkJc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpe30sCgkJCQkJdGltZVN0 YW1wOiBub3coKQoJCQkJfSk7CgkJCQlkYXRhWzBdW2V4cGFuZG9dID0gdHJ1ZTsg Ly8gbm8gbmVlZCB0byBmaXggZmFrZSBldmVudAoJCQl9CgoJCQkvLyBFbmZvcmNl IHRoZSByaWdodCB0cmlnZ2VyIHR5cGUKCQkJZGF0YVswXS50eXBlID0gdHlwZTsK CQkJaWYgKCBleGNsdXNpdmUgKQoJCQkJZGF0YVswXS5leGNsdXNpdmUgPSB0cnVl OwoKCQkJLy8gVHJpZ2dlciB0aGUgZXZlbnQsIGl0IGlzIGFzc3VtZWQgdGhhdCAi aGFuZGxlIiBpcyBhIGZ1bmN0aW9uCgkJCXZhciBoYW5kbGUgPSBqUXVlcnkuZGF0 YShlbGVtLCAiaGFuZGxlIik7CgkJCWlmICggaGFuZGxlICkKCQkJCXZhbCA9IGhh bmRsZS5hcHBseSggZWxlbSwgZGF0YSApOwoKCQkJLy8gSGFuZGxlIHRyaWdnZXJp bmcgbmF0aXZlIC5vbmZvbyBoYW5kbGVycyAoYW5kIG9uIGxpbmtzIHNpbmNlIHdl IGRvbid0IGNhbGwgLmNsaWNrKCkgZm9yIGxpbmtzKQoJCQlpZiAoICghZm4gfHwg KGpRdWVyeS5ub2RlTmFtZShlbGVtLCAnYScpICYmIHR5cGUgPT0gImNsaWNrIikp ICYmIGVsZW1bIm9uIit0eXBlXSAmJiBlbGVtWyJvbiIrdHlwZV0uYXBwbHkoIGVs ZW0sIGRhdGEgKSA9PT0gZmFsc2UgKQoJCQkJdmFsID0gZmFsc2U7CgoJCQkvLyBF eHRyYSBmdW5jdGlvbnMgZG9uJ3QgZ2V0IHRoZSBjdXN0b20gZXZlbnQgb2JqZWN0 CgkJCWlmICggZXZlbnQgKQoJCQkJZGF0YS5zaGlmdCgpOwoKCQkJLy8gSGFuZGxl IHRyaWdnZXJpbmcgb2YgZXh0cmEgZnVuY3Rpb24KCQkJaWYgKCBleHRyYSAmJiBq UXVlcnkuaXNGdW5jdGlvbiggZXh0cmEgKSApIHsKCQkJCS8vIGNhbGwgdGhlIGV4 dHJhIGZ1bmN0aW9uIGFuZCB0YWNrIHRoZSBjdXJyZW50IHJldHVybiB2YWx1ZSBv biB0aGUgZW5kIGZvciBwb3NzaWJsZSBpbnNwZWN0aW9uCgkJCQlyZXQgPSBleHRy YS5hcHBseSggZWxlbSwgdmFsID09IG51bGwgPyBkYXRhIDogZGF0YS5jb25jYXQo IHZhbCApICk7CgkJCQkvLyBpZiBhbnl0aGluZyBpcyByZXR1cm5lZCwgZ2l2ZSBp dCBwcmVjZWRlbmNlIGFuZCBoYXZlIGl0IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMg dmFsdWUKCQkJCWlmIChyZXQgIT09IHVuZGVmaW5lZCkKCQkJCQl2YWwgPSByZXQ7 CgkJCX0KCgkJCS8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudHMgKGV4Y2VwdCBm b3IgY2xpY2tzIG9uIGxpbmtzKQoJCQlpZiAoIGZuICYmIGRvbmF0aXZlICE9PSBm YWxzZSAmJiB2YWwgIT09IGZhbHNlICYmICEoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0s ICdhJykgJiYgdHlwZSA9PSAiY2xpY2siKSApIHsKCQkJCXRoaXMudHJpZ2dlcmVk ID0gdHJ1ZTsKCQkJCXRyeSB7CgkJCQkJZWxlbVsgdHlwZSBdKCk7CgkJCQkvLyBw cmV2ZW50IElFIGZyb20gdGhyb3dpbmcgYW4gZXJyb3IgZm9yIHNvbWUgaGlkZGVu IGVsZW1lbnRzCgkJCQl9IGNhdGNoIChlKSB7fQoJCQl9CgoJCQl0aGlzLnRyaWdn ZXJlZCA9IGZhbHNlOwoJCX0KCgkJcmV0dXJuIHZhbDsKCX0sCgoJaGFuZGxlOiBm dW5jdGlvbihldmVudCkgewoJCS8vIHJldHVybmVkIHVuZGVmaW5lZCBvciBmYWxz ZQoJCXZhciB2YWwsIHJldCwgbmFtZXNwYWNlLCBhbGwsIGhhbmRsZXJzOwoKCQll dmVudCA9IGFyZ3VtZW50c1swXSA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8 IHdpbmRvdy5ldmVudCApOwoKCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJz CgkJbmFtZXNwYWNlID0gZXZlbnQudHlwZS5zcGxpdCgiLiIpOwoJCWV2ZW50LnR5 cGUgPSBuYW1lc3BhY2VbMF07CgkJbmFtZXNwYWNlID0gbmFtZXNwYWNlWzFdOwoJ CS8vIENhY2hlIHRoaXMgbm93LCBhbGwgPSB0cnVlIG1lYW5zLCBhbnkgaGFuZGxl cgoJCWFsbCA9ICFuYW1lc3BhY2UgJiYgIWV2ZW50LmV4Y2x1c2l2ZTsKCgkJaGFu ZGxlcnMgPSAoIGpRdWVyeS5kYXRhKHRoaXMsICJldmVudHMiKSB8fCB7fSApW2V2 ZW50LnR5cGVdOwoKCQlmb3IgKCB2YXIgaiBpbiBoYW5kbGVycyApIHsKCQkJdmFy IGhhbmRsZXIgPSBoYW5kbGVyc1tqXTsKCgkJCS8vIEZpbHRlciB0aGUgZnVuY3Rp b25zIGJ5IGNsYXNzCgkJCWlmICggYWxsIHx8IGhhbmRsZXIudHlwZSA9PSBuYW1l c3BhY2UgKSB7CgkJCQkvLyBQYXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5k bGVyIGZ1bmN0aW9uIGl0c2VsZgoJCQkJLy8gU28gdGhhdCB3ZSBjYW4gbGF0ZXIg cmVtb3ZlIGl0CgkJCQlldmVudC5oYW5kbGVyID0gaGFuZGxlcjsKCQkJCWV2ZW50 LmRhdGEgPSBoYW5kbGVyLmRhdGE7CgoJCQkJcmV0ID0gaGFuZGxlci5hcHBseSgg dGhpcywgYXJndW1lbnRzICk7CgoJCQkJaWYgKCB2YWwgIT09IGZhbHNlICkKCQkJ CQl2YWwgPSByZXQ7CgoJCQkJaWYgKCByZXQgPT09IGZhbHNlICkgewoJCQkJCWV2 ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9u KCk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB2YWw7Cgl9LAoKCWZpeDogZnVu Y3Rpb24oZXZlbnQpIHsKCQlpZiAoIGV2ZW50W2V4cGFuZG9dID09IHRydWUgKQoJ CQlyZXR1cm4gZXZlbnQ7CgoJCS8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2lu YWwgZXZlbnQgb2JqZWN0CgkJLy8gYW5kICJjbG9uZSIgdG8gc2V0IHJlYWQtb25s eSBwcm9wZXJ0aWVzCgkJdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudDsKCQlldmVu dCA9IHsgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudCB9OwoJCXZhciBwcm9w cyA9ICJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBj YW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJl bnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5k bGVyIGtleUNvZGUgbWV0YUtleSBuZXdWYWx1ZSBvcmlnaW5hbFRhcmdldCBwYWdl WCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3Jl ZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdGltZVN0YW1w IHRvRWxlbWVudCB0eXBlIHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAi KTsKCQlmb3IgKCB2YXIgaT1wcm9wcy5sZW5ndGg7IGk7IGktLSApCgkJCWV2ZW50 WyBwcm9wc1tpXSBdID0gb3JpZ2luYWxFdmVudFsgcHJvcHNbaV0gXTsKCgkJLy8g TWFyayBpdCBhcyBmaXhlZAoJCWV2ZW50W2V4cGFuZG9dID0gdHJ1ZTsKCgkJLy8g YWRkIHByZXZlbnREZWZhdWx0IGFuZCBzdG9wUHJvcGFnYXRpb24gc2luY2UKCQkv LyB0aGV5IHdpbGwgbm90IHdvcmsgb24gdGhlIGNsb25lCgkJZXZlbnQucHJldmVu dERlZmF1bHQgPSBmdW5jdGlvbigpIHsKCQkJLy8gaWYgcHJldmVudERlZmF1bHQg ZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQkJaWYgKG9yaWdp bmFsRXZlbnQucHJldmVudERlZmF1bHQpCgkJCQlvcmlnaW5hbEV2ZW50LnByZXZl bnREZWZhdWx0KCk7CgkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVl IHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCgkJ CW9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQl9OwoJCWV2ZW50 LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewoJCQkvLyBpZiBzdG9wUHJv cGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQkJ aWYgKG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKQoJCQkJb3JpZ2luYWxF dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJLy8gb3RoZXJ3aXNlIHNldCB0aGUg Y2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0 cnVlIChJRSkKCQkJb3JpZ2luYWxFdmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ CX07CgoJCS8vIEZpeCB0aW1lU3RhbXAKCQlldmVudC50aW1lU3RhbXAgPSBldmVu dC50aW1lU3RhbXAgfHwgbm93KCk7CgoJCS8vIEZpeCB0YXJnZXQgcHJvcGVydHks IGlmIG5lY2Vzc2FyeQoJCWlmICggIWV2ZW50LnRhcmdldCApCgkJCWV2ZW50LnRh cmdldCA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7IC8vIEZpeGVzICMx OTI1IHdoZXJlIHNyY0VsZW1lbnQgbWlnaHQgbm90IGJlIGRlZmluZWQgZWl0aGVy CgoJCS8vIGNoZWNrIGlmIHRhcmdldCBpcyBhIHRleHRub2RlIChzYWZhcmkpCgkJ aWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT0gMyApCgkJCWV2ZW50LnRhcmdl dCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwoKCQkvLyBBZGQgcmVsYXRlZFRh cmdldCwgaWYgbmVjZXNzYXJ5CgkJaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAm JiBldmVudC5mcm9tRWxlbWVudCApCgkJCWV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBl dmVudC5mcm9tRWxlbWVudCA9PSBldmVudC50YXJnZXQgPyBldmVudC50b0VsZW1l bnQgOiBldmVudC5mcm9tRWxlbWVudDsKCgkJLy8gQ2FsY3VsYXRlIHBhZ2VYL1kg aWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQoJCWlmICggZXZlbnQu cGFnZVggPT0gbnVsbCAmJiBldmVudC5jbGllbnRYICE9IG51bGwgKSB7CgkJCXZh ciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGJvZHkgPSBkb2N1bWVu dC5ib2R5OwoJCQlldmVudC5wYWdlWCA9IGV2ZW50LmNsaWVudFggKyAoZG9jICYm IGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAp IC0gKGRvYy5jbGllbnRMZWZ0IHx8IDApOwoJCQlldmVudC5wYWdlWSA9IGV2ZW50 LmNsaWVudFkgKyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgfHwgYm9keSAmJiBib2R5 LnNjcm9sbFRvcCB8fCAwKSAtIChkb2MuY2xpZW50VG9wIHx8IDApOwoJCX0KCgkJ Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCgkJaWYgKCAhZXZlbnQud2hpY2gg JiYgKChldmVudC5jaGFyQ29kZSB8fCBldmVudC5jaGFyQ29kZSA9PT0gMCkgPyBl dmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGUpICkKCQkJZXZlbnQud2hpY2gg PSBldmVudC5jaGFyQ29kZSB8fCBldmVudC5rZXlDb2RlOwoKCQkvLyBBZGQgbWV0 YUtleSB0byBub24tTWFjIGJyb3dzZXJzICh1c2UgY3RybCBmb3IgUEMncyBhbmQg TWV0YSBmb3IgTWFjcykKCQlpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0 cmxLZXkgKQoJCQlldmVudC5tZXRhS2V5ID0gZXZlbnQuY3RybEtleTsKCgkJLy8g QWRkIHdoaWNoIGZvciBjbGljazogMSA9PSBsZWZ0OyAyID09IG1pZGRsZTsgMyA9 PSByaWdodAoJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28g ZG9uJ3QgdXNlIGl0CgkJaWYgKCAhZXZlbnQud2hpY2ggJiYgZXZlbnQuYnV0dG9u ICkKCQkJZXZlbnQud2hpY2ggPSAoZXZlbnQuYnV0dG9uICYgMSA/IDEgOiAoIGV2 ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0b24gJiA0ID8gMiA6IDAg KSApKTsKCgkJcmV0dXJuIGV2ZW50OwoJfSwKCglwcm94eTogZnVuY3Rpb24oIGZu LCBwcm94eSApewoJCS8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0 byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVt b3ZlZAoJCXByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBwcm94eS5n dWlkIHx8IHRoaXMuZ3VpZCsrOwoJCS8vIFNvIHByb3h5IGNhbiBiZSBkZWNsYXJl ZCBhcyBhbiBhcmd1bWVudAoJCXJldHVybiBwcm94eTsKCX0sCgoJc3BlY2lhbDog ewoJCXJlYWR5OiB7CgkJCXNldHVwOiBmdW5jdGlvbigpIHsKCQkJCS8vIE1ha2Ug c3VyZSB0aGUgcmVhZHkgZXZlbnQgaXMgc2V0dXAKCQkJCWJpbmRSZWFkeSgpOwoJ CQkJcmV0dXJuOwoJCQl9LAoKCQkJdGVhcmRvd246IGZ1bmN0aW9uKCkgeyByZXR1 cm47IH0KCQl9LAoKCQltb3VzZWVudGVyOiB7CgkJCXNldHVwOiBmdW5jdGlvbigp IHsKCQkJCWlmICggalF1ZXJ5LmJyb3dzZXIubXNpZSApIHJldHVybiBmYWxzZTsK CQkJCWpRdWVyeSh0aGlzKS5iaW5kKCJtb3VzZW92ZXIiLCBqUXVlcnkuZXZlbnQu c3BlY2lhbC5tb3VzZWVudGVyLmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7CgkJ CX0sCgoJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGpRdWVyeS5i cm93c2VyLm1zaWUgKSByZXR1cm4gZmFsc2U7CgkJCQlqUXVlcnkodGhpcykudW5i aW5kKCJtb3VzZW92ZXIiLCBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVy LmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0sCgoJCQloYW5kbGVyOiBm dW5jdGlvbihldmVudCkgewoJCQkJLy8gSWYgd2UgYWN0dWFsbHkganVzdCBtb3Vz ZWQgb24gdG8gYSBzdWItZWxlbWVudCwgaWdub3JlIGl0CgkJCQlpZiAoIHdpdGhp bkVsZW1lbnQoZXZlbnQsIHRoaXMpICkgcmV0dXJuIHRydWU7CgkJCQkvLyBFeGVj dXRlIHRoZSByaWdodCBoYW5kbGVycyBieSBzZXR0aW5nIHRoZSBldmVudCB0eXBl IHRvIG1vdXNlZW50ZXIKCQkJCWV2ZW50LnR5cGUgPSAibW91c2VlbnRlciI7CgkJ CQlyZXR1cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLCBhcmd1bWVu dHMpOwoJCQl9CgkJfSwKCgkJbW91c2VsZWF2ZTogewoJCQlzZXR1cDogZnVuY3Rp b24oKSB7CgkJCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgKSByZXR1cm4gZmFs c2U7CgkJCQlqUXVlcnkodGhpcykuYmluZCgibW91c2VvdXQiLCBqUXVlcnkuZXZl bnQuc3BlY2lhbC5tb3VzZWxlYXZlLmhhbmRsZXIpOwoJCQkJcmV0dXJuIHRydWU7 CgkJCX0sCgoJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGpRdWVy eS5icm93c2VyLm1zaWUgKSByZXR1cm4gZmFsc2U7CgkJCQlqUXVlcnkodGhpcyku dW5iaW5kKCJtb3VzZW91dCIsIGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlbGVh dmUuaGFuZGxlcik7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSwKCgkJCWhhbmRsZXI6 IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCQkvLyBJZiB3ZSBhY3R1YWxseSBqdXN0IG1v dXNlZCBvbiB0byBhIHN1Yi1lbGVtZW50LCBpZ25vcmUgaXQKCQkJCWlmICggd2l0 aGluRWxlbWVudChldmVudCwgdGhpcykgKSByZXR1cm4gdHJ1ZTsKCQkJCS8vIEV4 ZWN1dGUgdGhlIHJpZ2h0IGhhbmRsZXJzIGJ5IHNldHRpbmcgdGhlIGV2ZW50IHR5 cGUgdG8gbW91c2VsZWF2ZQoJCQkJZXZlbnQudHlwZSA9ICJtb3VzZWxlYXZlIjsK CQkJCXJldHVybiBqUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsIGFyZ3Vt ZW50cyk7CgkJCX0KCQl9Cgl9Cn07CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWJpbmQ6 IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdHlwZSA9PSAi dW5sb2FkIiA/IHRoaXMub25lKHR5cGUsIGRhdGEsIGZuKSA6IHRoaXMuZWFjaChm dW5jdGlvbigpewoJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlLCBmbiB8 fCBkYXRhLCBmbiAmJiBkYXRhICk7CgkJfSk7Cgl9LAoKCW9uZTogZnVuY3Rpb24o IHR5cGUsIGRhdGEsIGZuICkgewoJCXZhciBvbmUgPSBqUXVlcnkuZXZlbnQucHJv eHkoIGZuIHx8IGRhdGEsIGZ1bmN0aW9uKGV2ZW50KSB7CgkJCWpRdWVyeSh0aGlz KS51bmJpbmQoZXZlbnQsIG9uZSk7CgkJCXJldHVybiAoZm4gfHwgZGF0YSkuYXBw bHkoIHRoaXMsIGFyZ3VtZW50cyApOwoJCX0pOwoJCXJldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oKXsKCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZSwgb25l LCBmbiAmJiBkYXRhKTsKCQl9KTsKCX0sCgoJdW5iaW5kOiBmdW5jdGlvbiggdHlw ZSwgZm4gKSB7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVl cnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlLCBmbiApOwoJCX0pOwoJfSwKCgl0 cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CgkJcmV0dXJuIHRo aXMuZWFjaChmdW5jdGlvbigpewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlw ZSwgZGF0YSwgdGhpcywgdHJ1ZSwgZm4gKTsKCQl9KTsKCX0sCgoJdHJpZ2dlckhh bmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdGhp c1swXSAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1sw XSwgZmFsc2UsIGZuICk7Cgl9LAoKCXRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewoJ CS8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGluIGNs b3N1cmUKCQl2YXIgYXJncyA9IGFyZ3VtZW50cywgaSA9IDE7CgoJCS8vIGxpbmsg YWxsIHRoZSBmdW5jdGlvbnMsIHNvIGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhp cyBjbGljayBoYW5kbGVyCgkJd2hpbGUoIGkgPCBhcmdzLmxlbmd0aCApCgkJCWpR dWVyeS5ldmVudC5wcm94eSggZm4sIGFyZ3NbaSsrXSApOwoKCQlyZXR1cm4gdGhp cy5jbGljayggalF1ZXJ5LmV2ZW50LnByb3h5KCBmbiwgZnVuY3Rpb24oZXZlbnQp IHsKCQkJLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCgkJ CXRoaXMubGFzdFRvZ2dsZSA9ICggdGhpcy5sYXN0VG9nZ2xlIHx8IDAgKSAlIGk7 CgoJCQkvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAoJCQlldmVudC5wcmV2 ZW50RGVmYXVsdCgpOwoKCQkJLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCgkJ CXJldHVybiBhcmdzWyB0aGlzLmxhc3RUb2dnbGUrKyBdLmFwcGx5KCB0aGlzLCBh cmd1bWVudHMgKSB8fCBmYWxzZTsKCQl9KSk7Cgl9LAoKCWhvdmVyOiBmdW5jdGlv bihmbk92ZXIsIGZuT3V0KSB7CgkJcmV0dXJuIHRoaXMuYmluZCgnbW91c2VlbnRl cicsIGZuT3ZlcikuYmluZCgnbW91c2VsZWF2ZScsIGZuT3V0KTsKCX0sCgoJcmVh ZHk6IGZ1bmN0aW9uKGZuKSB7CgkJLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKCQli aW5kUmVhZHkoKTsKCgkJLy8gSWYgdGhlIERPTSBpcyBhbHJlYWR5IHJlYWR5CgkJ aWYgKCBqUXVlcnkuaXNSZWFkeSApCgkJCS8vIEV4ZWN1dGUgdGhlIGZ1bmN0aW9u IGltbWVkaWF0ZWx5CgkJCWZuLmNhbGwoIGRvY3VtZW50LCBqUXVlcnkgKTsKCgkJ Ly8gT3RoZXJ3aXNlLCByZW1lbWJlciB0aGUgZnVuY3Rpb24gZm9yIGxhdGVyCgkJ ZWxzZQoJCQkvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSB3YWl0IGxpc3QKCQkJ alF1ZXJ5LnJlYWR5TGlzdC5wdXNoKCBmdW5jdGlvbigpIHsgcmV0dXJuIGZuLmNh bGwodGhpcywgalF1ZXJ5KTsgfSApOwoKCQlyZXR1cm4gdGhpczsKCX0KfSk7Cgpq UXVlcnkuZXh0ZW5kKHsKCWlzUmVhZHk6IGZhbHNlLAoJcmVhZHlMaXN0OiBbXSwK CS8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKCXJlYWR5OiBmdW5jdGlv bigpIHsKCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRE9NIGlzIG5vdCBhbHJlYWR5 IGxvYWRlZAoJCWlmICggIWpRdWVyeS5pc1JlYWR5ICkgewoJCQkvLyBSZW1lbWJl ciB0aGF0IHRoZSBET00gaXMgcmVhZHkKCQkJalF1ZXJ5LmlzUmVhZHkgPSB0cnVl OwoKCQkJLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0 ZQoJCQlpZiAoIGpRdWVyeS5yZWFkeUxpc3QgKSB7CgkJCQkvLyBFeGVjdXRlIGFs bCBvZiB0aGVtCgkJCQlqUXVlcnkuZWFjaCggalF1ZXJ5LnJlYWR5TGlzdCwgZnVu Y3Rpb24oKXsKCQkJCQl0aGlzLmNhbGwoIGRvY3VtZW50ICk7CgkJCQl9KTsKCgkJ CQkvLyBSZXNldCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMKCQkJCWpRdWVyeS5yZWFk eUxpc3QgPSBudWxsOwoJCQl9CgoJCQkvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFk eSBldmVudHMKCQkJalF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VySGFuZGxlcigicmVh ZHkiKTsKCQl9Cgl9Cn0pOwoKdmFyIHJlYWR5Qm91bmQgPSBmYWxzZTsKCmZ1bmN0 aW9uIGJpbmRSZWFkeSgpewoJaWYgKCByZWFkeUJvdW5kICkgcmV0dXJuOwoJcmVh ZHlCb3VuZCA9IHRydWU7CgoJLy8gTW96aWxsYSwgT3BlcmEgKHNlZSBmdXJ0aGVy IGJlbG93IGZvciBpdCkgYW5kIHdlYmtpdCBuaWdodGxpZXMgY3VycmVudGx5IHN1 cHBvcnQgdGhpcyBldmVudAoJaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy ICYmICFqUXVlcnkuYnJvd3Nlci5vcGVyYSkKCQkvLyBVc2UgdGhlIGhhbmR5IGV2 ZW50IGNhbGxiYWNrCgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNv bnRlbnRMb2FkZWQiLCBqUXVlcnkucmVhZHksIGZhbHNlICk7CgoJLy8gSWYgSUUg aXMgdXNlZCBhbmQgaXMgbm90IGluIGEgZnJhbWUKCS8vIENvbnRpbnVhbGx5IGNo ZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKCWlmICggalF1ZXJ5 LmJyb3dzZXIubXNpZSAmJiB3aW5kb3cgPT0gdG9wICkgKGZ1bmN0aW9uKCl7CgkJ aWYgKGpRdWVyeS5pc1JlYWR5KSByZXR1cm47CgkJdHJ5IHsKCQkJLy8gSWYgSUUg aXMgdXNlZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKCQkJLy8gaHR0 cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KCQkJZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7CgkJfSBjYXRj aCggZXJyb3IgKSB7CgkJCXNldFRpbWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAg KTsKCQkJcmV0dXJuOwoJCX0KCQkvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBm dW5jdGlvbnMKCQlqUXVlcnkucmVhZHkoKTsKCX0pKCk7CgoJaWYgKCBqUXVlcnku YnJvd3Nlci5vcGVyYSApCgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRP TUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbiAoKSB7CgkJCWlmIChqUXVlcnkuaXNS ZWFkeSkgcmV0dXJuOwoJCQlmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0 eWxlU2hlZXRzLmxlbmd0aDsgaSsrKQoJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hl ZXRzW2ldLmRpc2FibGVkKSB7CgkJCQkJc2V0VGltZW91dCggYXJndW1lbnRzLmNh bGxlZSwgMCApOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJLy8gYW5kIGV4ZWN1dGUg YW55IHdhaXRpbmcgZnVuY3Rpb25zCgkJCWpRdWVyeS5yZWFkeSgpOwoJCX0sIGZh bHNlKTsKCglpZiAoIGpRdWVyeS5icm93c2VyLnNhZmFyaSApIHsKCQl2YXIgbnVt U3R5bGVzOwoJCShmdW5jdGlvbigpewoJCQlpZiAoalF1ZXJ5LmlzUmVhZHkpIHJl dHVybjsKCQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJsb2FkZWQiICYm IGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIiApIHsKCQkJCXNldFRp bWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAgKTsKCQkJCXJldHVybjsKCQkJfQoJ CQlpZiAoIG51bVN0eWxlcyA9PT0gdW5kZWZpbmVkICkKCQkJCW51bVN0eWxlcyA9 IGpRdWVyeSgic3R5bGUsIGxpbmtbcmVsPXN0eWxlc2hlZXRdIikubGVuZ3RoOwoJ CQlpZiAoIGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCAhPSBudW1TdHlsZXMg KSB7CgkJCQlzZXRUaW1lb3V0KCBhcmd1bWVudHMuY2FsbGVlLCAwICk7CgkJCQly ZXR1cm47CgkJCX0KCQkJLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rp b25zCgkJCWpRdWVyeS5yZWFkeSgpOwoJCX0pKCk7Cgl9CgoJLy8gQSBmYWxsYmFj ayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKCWpRdWVy eS5ldmVudC5hZGQoIHdpbmRvdywgImxvYWQiLCBqUXVlcnkucmVhZHkgKTsKfQoK alF1ZXJ5LmVhY2goICgiYmx1cixmb2N1cyxsb2FkLHJlc2l6ZSxzY3JvbGwsdW5s b2FkLGNsaWNrLGRibGNsaWNrLCIgKwoJIm1vdXNlZG93bixtb3VzZXVwLG1vdXNl bW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsY2hhbmdlLHNlbGVjdCwiICsKCSJzdWJt aXQsa2V5ZG93bixrZXlwcmVzcyxrZXl1cCxlcnJvciIpLnNwbGl0KCIsIiksIGZ1 bmN0aW9uKGksIG5hbWUpewoKCS8vIEhhbmRsZSBldmVudCBiaW5kaW5nCglqUXVl cnkuZm5bbmFtZV0gPSBmdW5jdGlvbihmbil7CgkJcmV0dXJuIGZuID8gdGhpcy5i aW5kKG5hbWUsIGZuKSA6IHRoaXMudHJpZ2dlcihuYW1lKTsKCX07Cn0pOwoKLy8g Q2hlY2tzIGlmIGFuIGV2ZW50IGhhcHBlbmVkIG9uIGFuIGVsZW1lbnQgd2l0aGlu IGFub3RoZXIgZWxlbWVudAovLyBVc2VkIGluIGpRdWVyeS5ldmVudC5zcGVjaWFs Lm1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgaGFuZGxlcnMKdmFyIHdpdGhpbkVs ZW1lbnQgPSBmdW5jdGlvbihldmVudCwgZWxlbSkgewoJLy8gQ2hlY2sgaWYgbW91 c2Uob3ZlcnxvdXQpIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50IGVs ZW1lbnQKCXZhciBwYXJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OwoJLy8gVHJh dmVyc2UgdXAgdGhlIHRyZWUKCXdoaWxlICggcGFyZW50ICYmIHBhcmVudCAhPSBl bGVtICkgdHJ5IHsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7IH0gY2F0Y2go ZXJyb3IpIHsgcGFyZW50ID0gZWxlbTsgfQoJLy8gUmV0dXJuIHRydWUgaWYgd2Ug YWN0dWFsbHkganVzdCBtb3VzZWQgb24gdG8gYSBzdWItZWxlbWVudAoJcmV0dXJu IHBhcmVudCA9PSBlbGVtOwp9OwoKLy8gUHJldmVudCBtZW1vcnkgbGVha3MgaW4g SUUKLy8gQW5kIHByZXZlbnQgZXJyb3JzIG9uIHJlZnJlc2ggd2l0aCBldmVudHMg bGlrZSBtb3VzZW92ZXIgaW4gb3RoZXIgYnJvd3NlcnMKLy8gV2luZG93IGlzbid0 IGluY2x1ZGVkIHNvIGFzIG5vdCB0byB1bmJpbmQgZXhpc3RpbmcgdW5sb2FkIGV2 ZW50cwpqUXVlcnkod2luZG93KS5iaW5kKCJ1bmxvYWQiLCBmdW5jdGlvbigpIHsK CWpRdWVyeSgiKiIpLmFkZChkb2N1bWVudCkudW5iaW5kKCk7Cn0pOwpqUXVlcnku Zm4uZXh0ZW5kKHsKCS8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZAoJX2xv YWQ6IGpRdWVyeS5mbi5sb2FkLAoKCWxvYWQ6IGZ1bmN0aW9uKCB1cmwsIHBhcmFt cywgY2FsbGJhY2sgKSB7CgkJaWYgKCB0eXBlb2YgdXJsICE9ICdzdHJpbmcnICkK CQkJcmV0dXJuIHRoaXMuX2xvYWQoIHVybCApOwoKCQl2YXIgb2ZmID0gdXJsLmlu ZGV4T2YoIiAiKTsKCQlpZiAoIG9mZiA+PSAwICkgewoJCQl2YXIgc2VsZWN0b3Ig PSB1cmwuc2xpY2Uob2ZmLCB1cmwubGVuZ3RoKTsKCQkJdXJsID0gdXJsLnNsaWNl KDAsIG9mZik7CgkJfQoKCQljYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9u KCl7fTsKCgkJLy8gRGVmYXVsdCB0byBhIEdFVCByZXF1ZXN0CgkJdmFyIHR5cGUg PSAiR0VUIjsKCgkJLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2FzIHByb3Zp ZGVkCgkJaWYgKCBwYXJhbXMgKQoJCQkvLyBJZiBpdCdzIGEgZnVuY3Rpb24KCQkJ aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7CgkJCQkvLyBXZSBh c3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawoJCQkJY2FsbGJhY2sgPSBwYXJh bXM7CgkJCQlwYXJhbXMgPSBudWxsOwoKCQkJLy8gT3RoZXJ3aXNlLCBidWlsZCBh IHBhcmFtIHN0cmluZwoJCQl9IGVsc2UgewoJCQkJcGFyYW1zID0galF1ZXJ5LnBh cmFtKCBwYXJhbXMgKTsKCQkJCXR5cGUgPSAiUE9TVCI7CgkJCX0KCgkJdmFyIHNl bGYgPSB0aGlzOwoKCQkvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKCQlq UXVlcnkuYWpheCh7CgkJCXVybDogdXJsLAoJCQl0eXBlOiB0eXBlLAoJCQlkYXRh VHlwZTogImh0bWwiLAoJCQlkYXRhOiBwYXJhbXMsCgkJCWNvbXBsZXRlOiBmdW5j dGlvbihyZXMsIHN0YXR1cyl7CgkJCQkvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3Qg dGhlIEhUTUwgaW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKCQkJCWlmICgg c3RhdHVzID09ICJzdWNjZXNzIiB8fCBzdGF0dXMgPT0gIm5vdG1vZGlmaWVkIiAp CgkJCQkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAoJCQkJCXNl bGYuaHRtbCggc2VsZWN0b3IgPwoJCQkJCQkvLyBDcmVhdGUgYSBkdW1teSBkaXYg dG8gaG9sZCB0aGUgcmVzdWx0cwoJCQkJCQlqUXVlcnkoIjxkaXYvPiIpCgkJCQkJ CQkvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVt b3ZpbmcgdGhlIHNjcmlwdHMKCQkJCQkJCS8vIHRvIGF2b2lkIGFueSAnUGVybWlz c2lvbiBEZW5pZWQnIGVycm9ycyBpbiBJRQoJCQkJCQkJLmFwcGVuZChyZXMucmVz cG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCAi IikpCgoJCQkJCQkJLy8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKCQkJ CQkJCS5maW5kKHNlbGVjdG9yKSA6CgoJCQkJCQkvLyBJZiBub3QsIGp1c3QgaW5q ZWN0IHRoZSBmdWxsIHJlc3VsdAoJCQkJCQlyZXMucmVzcG9uc2VUZXh0ICk7CgoJ CQkJc2VsZi5lYWNoKCBjYWxsYmFjaywgW3Jlcy5yZXNwb25zZVRleHQsIHN0YXR1 cywgcmVzXSApOwoJCQl9CgkJfSk7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXNlcmlh bGl6ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGpRdWVyeS5wYXJhbSh0aGlzLnNl cmlhbGl6ZUFycmF5KCkpOwoJfSwKCXNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigp IHsKCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKCQkJcmV0dXJuIGpRdWVy eS5ub2RlTmFtZSh0aGlzLCAiZm9ybSIpID8KCQkJCWpRdWVyeS5tYWtlQXJyYXko dGhpcy5lbGVtZW50cykgOiB0aGlzOwoJCX0pCgkJLmZpbHRlcihmdW5jdGlvbigp ewoJCQlyZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCgkJCQko dGhpcy5jaGVja2VkIHx8IC9zZWxlY3R8dGV4dGFyZWEvaS50ZXN0KHRoaXMubm9k ZU5hbWUpIHx8CgkJCQkJL3RleHR8aGlkZGVufHBhc3N3b3JkL2kudGVzdCh0aGlz LnR5cGUpKTsKCQl9KQoJCS5tYXAoZnVuY3Rpb24oaSwgZWxlbSl7CgkJCXZhciB2 YWwgPSBqUXVlcnkodGhpcykudmFsKCk7CgkJCXJldHVybiB2YWwgPT0gbnVsbCA/ IG51bGwgOgoJCQkJdmFsLmNvbnN0cnVjdG9yID09IEFycmF5ID8KCQkJCQlqUXVl cnkubWFwKCB2YWwsIGZ1bmN0aW9uKHZhbCwgaSl7CgkJCQkJCXJldHVybiB7bmFt ZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsfTsKCQkJCQl9KSA6CgkJCQkJe25hbWU6 IGVsZW0ubmFtZSwgdmFsdWU6IHZhbH07CgkJfSkuZ2V0KCk7Cgl9Cn0pOwoKLy8g QXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24g QUpBWCBldmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQsYWpheFN0b3AsYWph eENvbXBsZXRlLGFqYXhFcnJvcixhamF4U3VjY2VzcyxhamF4U2VuZCIuc3BsaXQo IiwiKSwgZnVuY3Rpb24oaSxvKXsKCWpRdWVyeS5mbltvXSA9IGZ1bmN0aW9uKGYp ewoJCXJldHVybiB0aGlzLmJpbmQobywgZik7Cgl9Owp9KTsKCnZhciBqc2MgPSBu b3coKTsKCmpRdWVyeS5leHRlbmQoewoJZ2V0OiBmdW5jdGlvbiggdXJsLCBkYXRh LCBjYWxsYmFjaywgdHlwZSApIHsKCQkvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0 YSBhcmd1bWVudCB3YXMgb21taXRlZAoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24o IGRhdGEgKSApIHsKCQkJY2FsbGJhY2sgPSBkYXRhOwoJCQlkYXRhID0gbnVsbDsK CQl9CgoJCXJldHVybiBqUXVlcnkuYWpheCh7CgkJCXR5cGU6ICJHRVQiLAoJCQl1 cmw6IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJhY2ssCgkJ CWRhdGFUeXBlOiB0eXBlCgkJfSk7Cgl9LAoKCWdldFNjcmlwdDogZnVuY3Rpb24o IHVybCwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQodXJsLCBudWxs LCBjYWxsYmFjaywgInNjcmlwdCIpOwoJfSwKCglnZXRKU09OOiBmdW5jdGlvbigg dXJsLCBkYXRhLCBjYWxsYmFjayApIHsKCQlyZXR1cm4galF1ZXJ5LmdldCh1cmws IGRhdGEsIGNhbGxiYWNrLCAianNvbiIpOwoJfSwKCglwb3N0OiBmdW5jdGlvbigg dXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKCQlpZiAoIGpRdWVyeS5pc0Z1 bmN0aW9uKCBkYXRhICkgKSB7CgkJCWNhbGxiYWNrID0gZGF0YTsKCQkJZGF0YSA9 IHt9OwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5hamF4KHsKCQkJdHlwZTogIlBPU1Qi LAoJCQl1cmw6IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJh Y2ssCgkJCWRhdGFUeXBlOiB0eXBlCgkJfSk7Cgl9LAoKCWFqYXhTZXR1cDogZnVu Y3Rpb24oIHNldHRpbmdzICkgewoJCWpRdWVyeS5leHRlbmQoIGpRdWVyeS5hamF4 U2V0dGluZ3MsIHNldHRpbmdzICk7Cgl9LAoKCWFqYXhTZXR0aW5nczogewoJCXVy bDogbG9jYXRpb24uaHJlZiwKCQlnbG9iYWw6IHRydWUsCgkJdHlwZTogIkdFVCIs CgkJdGltZW91dDogMCwKCQljb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3 LWZvcm0tdXJsZW5jb2RlZCIsCgkJcHJvY2Vzc0RhdGE6IHRydWUsCgkJYXN5bmM6 IHRydWUsCgkJZGF0YTogbnVsbCwKCQl1c2VybmFtZTogbnVsbCwKCQlwYXNzd29y ZDogbnVsbCwKCQlhY2NlcHRzOiB7CgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwg dGV4dC94bWwiLAoJCQlodG1sOiAidGV4dC9odG1sIiwKCQkJc2NyaXB0OiAidGV4 dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKCQkJanNvbjog ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsCgkJCXRleHQ6ICJ0 ZXh0L3BsYWluIiwKCQkJX2RlZmF1bHQ6ICIqLyoiCgkJfQoJfSwKCgkvLyBMYXN0 LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CglsYXN0TW9k aWZpZWQ6IHt9LAoKCWFqYXg6IGZ1bmN0aW9uKCBzICkgewoJCS8vIEV4dGVuZCB0 aGUgc2V0dGluZ3MsIGJ1dCByZS1leHRlbmQgJ3MnIHNvIHRoYXQgaXQgY2FuIGJl CgkJLy8gY2hlY2tlZCBhZ2FpbiBsYXRlciAoaW4gdGhlIHRlc3Qgc3VpdGUsIHNw ZWNpZmljYWxseSkKCQlzID0galF1ZXJ5LmV4dGVuZCh0cnVlLCBzLCBqUXVlcnku ZXh0ZW5kKHRydWUsIHt9LCBqUXVlcnkuYWpheFNldHRpbmdzLCBzKSk7CgoJCXZh ciBqc29ucCwganNyZSA9IC89XD8oJnwkKS9nLCBzdGF0dXMsIGRhdGEsCgkJCXR5 cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKCgkJLy8gY29udmVydCBkYXRhIGlm IG5vdCBhbHJlYWR5IGEgc3RyaW5nCgkJaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNz RGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9ICJzdHJpbmciICkKCQkJcy5kYXRhID0g alF1ZXJ5LnBhcmFtKHMuZGF0YSk7CgoJCS8vIEhhbmRsZSBKU09OUCBQYXJhbWV0 ZXIgQ2FsbGJhY2tzCgkJaWYgKCBzLmRhdGFUeXBlID09ICJqc29ucCIgKSB7CgkJ CWlmICggdHlwZSA9PSAiR0VUIiApIHsKCQkJCWlmICggIXMudXJsLm1hdGNoKGpz cmUpICkKCQkJCQlzLnVybCArPSAocy51cmwubWF0Y2goL1w/LykgPyAiJiIgOiAi PyIpICsgKHMuanNvbnAgfHwgImNhbGxiYWNrIikgKyAiPT8iOwoJCQl9IGVsc2Ug aWYgKCAhcy5kYXRhIHx8ICFzLmRhdGEubWF0Y2goanNyZSkgKQoJCQkJcy5kYXRh ID0gKHMuZGF0YSA/IHMuZGF0YSArICImIiA6ICIiKSArIChzLmpzb25wIHx8ICJj YWxsYmFjayIpICsgIj0/IjsKCQkJcy5kYXRhVHlwZSA9ICJqc29uIjsKCQl9CgoJ CS8vIEJ1aWxkIHRlbXBvcmFyeSBKU09OUCBmdW5jdGlvbgoJCWlmICggcy5kYXRh VHlwZSA9PSAianNvbiIgJiYgKHMuZGF0YSAmJiBzLmRhdGEubWF0Y2goanNyZSkg fHwgcy51cmwubWF0Y2goanNyZSkpICkgewoJCQlqc29ucCA9ICJqc29ucCIgKyBq c2MrKzsKCgkJCS8vIFJlcGxhY2UgdGhlID0/IHNlcXVlbmNlIGJvdGggaW4gdGhl IHF1ZXJ5IHN0cmluZyBhbmQgdGhlIGRhdGEKCQkJaWYgKCBzLmRhdGEgKQoJCQkJ cy5kYXRhID0gKHMuZGF0YSArICIiKS5yZXBsYWNlKGpzcmUsICI9IiArIGpzb25w ICsgIiQxIik7CgkJCXMudXJsID0gcy51cmwucmVwbGFjZShqc3JlLCAiPSIgKyBq c29ucCArICIkMSIpOwoKCQkJLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUKCQkJLy8g dGhhdCBhIEpTT05QIHN0eWxlIHJlc3BvbnNlIGlzIGV4ZWN1dGVkIHByb3Blcmx5 CgkJCXMuZGF0YVR5cGUgPSAic2NyaXB0IjsKCgkJCS8vIEhhbmRsZSBKU09OUC1z dHlsZSBsb2FkaW5nCgkJCXdpbmRvd1sganNvbnAgXSA9IGZ1bmN0aW9uKHRtcCl7 CgkJCQlkYXRhID0gdG1wOwoJCQkJc3VjY2VzcygpOwoJCQkJY29tcGxldGUoKTsK CQkJCS8vIEdhcmJhZ2UgY29sbGVjdAoJCQkJd2luZG93WyBqc29ucCBdID0gdW5k ZWZpbmVkOwoJCQkJdHJ5eyBkZWxldGUgd2luZG93WyBqc29ucCBdOyB9IGNhdGNo KGUpe30KCQkJCWlmICggaGVhZCApCgkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2Ny aXB0ICk7CgkJCX07CgkJfQoKCQlpZiAoIHMuZGF0YVR5cGUgPT0gInNjcmlwdCIg JiYgcy5jYWNoZSA9PSBudWxsICkKCQkJcy5jYWNoZSA9IGZhbHNlOwoKCQlpZiAo IHMuY2FjaGUgPT09IGZhbHNlICYmIHR5cGUgPT0gIkdFVCIgKSB7CgkJCXZhciB0 cyA9IG5vdygpOwoJCQkvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJl CgkJCXZhciByZXQgPSBzLnVybC5yZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywg IiQxXz0iICsgdHMgKyAiJDIiKTsKCQkJLy8gaWYgbm90aGluZyB3YXMgcmVwbGFj ZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAoJCQlzLnVybCA9IHJldCArICgo cmV0ID09IHMudXJsKSA/IChzLnVybC5tYXRjaCgvXD8vKSA/ICImIiA6ICI/Iikg KyAiXz0iICsgdHMgOiAiIik7CgkJfQoKCQkvLyBJZiBkYXRhIGlzIGF2YWlsYWJs ZSwgYXBwZW5kIGRhdGEgdG8gdXJsIGZvciBnZXQgcmVxdWVzdHMKCQlpZiAoIHMu ZGF0YSAmJiB0eXBlID09ICJHRVQiICkgewoJCQlzLnVybCArPSAocy51cmwubWF0 Y2goL1w/LykgPyAiJiIgOiAiPyIpICsgcy5kYXRhOwoKCQkJLy8gSUUgbGlrZXMg dG8gc2VuZCBib3RoIGdldCBhbmQgcG9zdCBkYXRhLCBwcmV2ZW50IHRoaXMKCQkJ cy5kYXRhID0gbnVsbDsKCQl9CgoJCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2Yg cmVxdWVzdHMKCQlpZiAoIHMuZ2xvYmFsICYmICEgalF1ZXJ5LmFjdGl2ZSsrICkK CQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CgoJCS8vIE1h dGNoZXMgYW4gYWJzb2x1dGUgVVJMLCBhbmQgc2F2ZXMgdGhlIGRvbWFpbgoJCXZh ciByZW1vdGUgPSAvXig/Olx3KzopP1wvXC8oW15cLz8jXSspLzsKCgkJLy8gSWYg d2UncmUgcmVxdWVzdGluZyBhIHJlbW90ZSBkb2N1bWVudAoJCS8vIGFuZCB0cnlp bmcgdG8gbG9hZCBKU09OIG9yIFNjcmlwdCB3aXRoIGEgR0VUCgkJaWYgKCBzLmRh dGFUeXBlID09ICJzY3JpcHQiICYmIHR5cGUgPT0gIkdFVCIKCQkJCSYmIHJlbW90 ZS50ZXN0KHMudXJsKSAmJiByZW1vdGUuZXhlYyhzLnVybClbMV0gIT0gbG9jYXRp b24uaG9zdCApewoJCQl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU YWdOYW1lKCJoZWFkIilbMF07CgkJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCJzY3JpcHQiKTsKCQkJc2NyaXB0LnNyYyA9IHMudXJsOwoJCQlp ZiAocy5zY3JpcHRDaGFyc2V0KQoJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlw dENoYXJzZXQ7CgoJCQkvLyBIYW5kbGUgU2NyaXB0IGxvYWRpbmcKCQkJaWYgKCAh anNvbnAgKSB7CgkJCQl2YXIgZG9uZSA9IGZhbHNlOwoKCQkJCS8vIEF0dGFjaCBo YW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCgkJCQlzY3JpcHQub25sb2FkID0gc2Ny aXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCl7CgkJCQkJaWYgKCAh ZG9uZSAmJiAoIXRoaXMucmVhZHlTdGF0ZSB8fAoJCQkJCQkJdGhpcy5yZWFkeVN0 YXRlID09ICJsb2FkZWQiIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUi KSApIHsKCQkJCQkJZG9uZSA9IHRydWU7CgkJCQkJCXN1Y2Nlc3MoKTsKCQkJCQkJ Y29tcGxldGUoKTsKCQkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CgkJ CQkJfQoJCQkJfTsKCQkJfQoKCQkJaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwoK CQkJLy8gV2UgaGFuZGxlIGV2ZXJ5dGhpbmcgdXNpbmcgdGhlIHNjcmlwdCBlbGVt ZW50IGluamVjdGlvbgoJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCX0KCgkJdmFyIHJl cXVlc3REb25lID0gZmFsc2U7CgoJCS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmpl Y3Q7IE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKCQkvLyBpbXBsZW1lbnQg dGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNywgc28gd2UgdXNlIHRoZSBBY3RpdmVY T2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxlCgkJdmFyIHhociA9IHdpbmRvdy5B Y3RpdmVYT2JqZWN0ID8gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxI VFRQIikgOiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCgkJLy8gT3BlbiB0aGUgc29j a2V0CgkJLy8gUGFzc2luZyBudWxsIHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dp biBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCgkJaWYoIHMudXNlcm5hbWUgKQoJCQl4 aHIub3Blbih0eXBlLCBzLnVybCwgcy5hc3luYywgcy51c2VybmFtZSwgcy5wYXNz d29yZCk7CgkJZWxzZQoJCQl4aHIub3Blbih0eXBlLCBzLnVybCwgcy5hc3luYyk7 CgoJCS8vIE5lZWQgYW4gZXh0cmEgdHJ5L2NhdGNoIGZvciBjcm9zcyBkb21haW4g cmVxdWVzdHMgaW4gRmlyZWZveCAzCgkJdHJ5IHsKCQkJLy8gU2V0IHRoZSBjb3Jy ZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CgkJCWlmICggcy5kYXRh ICkKCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCBzLmNv bnRlbnRUeXBlKTsKCgkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgaGVh ZGVyLCBpZiBpZk1vZGlmaWVkIG1vZGUuCgkJCWlmICggcy5pZk1vZGlmaWVkICkK CQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsCgkJ CQkJalF1ZXJ5Lmxhc3RNb2RpZmllZFtzLnVybF0gfHwgIlRodSwgMDEgSmFuIDE5 NzAgMDA6MDA6MDAgR01UIiApOwoKCQkJLy8gU2V0IGhlYWRlciBzbyB0aGUgY2Fs bGVkIHNjcmlwdCBrbm93cyB0aGF0IGl0J3MgYW4gWE1MSHR0cFJlcXVlc3QKCQkJ eGhyLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCAiWE1MSHR0 cFJlcXVlc3QiKTsKCgkJCS8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRo ZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKCQkJeGhyLnNldFJl cXVlc3RIZWFkZXIoIkFjY2VwdCIsIHMuZGF0YVR5cGUgJiYgcy5hY2NlcHRzWyBz LmRhdGFUeXBlIF0gPwoJCQkJcy5hY2NlcHRzWyBzLmRhdGFUeXBlIF0gKyAiLCAq LyoiIDoKCQkJCXMuYWNjZXB0cy5fZGVmYXVsdCApOwoJCX0gY2F0Y2goZSl7fQoK CQkvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMKCQlpZiAoIHMuYmVm b3JlU2VuZCAmJiBzLmJlZm9yZVNlbmQoeGhyLCBzKSA9PT0gZmFsc2UgKSB7CgkJ CS8vIGNsZWFudXAgYWN0aXZlIHJlcXVlc3QgY291bnRlcgoJCQlzLmdsb2JhbCAm JiBqUXVlcnkuYWN0aXZlLS07CgkJCS8vIGNsb3NlIG9wZW5kZWQgc29ja2V0CgkJ CXhoci5hYm9ydCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoIHMuZ2xv YmFsICkKCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIiwgW3hociwg c10pOwoKCQkvLyBXYWl0IGZvciBhIHJlc3BvbnNlIHRvIGNvbWUgYmFjawoJCXZh ciBvbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihpc1RpbWVvdXQpewoJCQkv LyBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIHRoZSBkYXRhIGlzIGF2YWls YWJsZSwgb3IgdGhlIHJlcXVlc3QgdGltZWQgb3V0CgkJCWlmICggIXJlcXVlc3RE b25lICYmIHhociAmJiAoeGhyLnJlYWR5U3RhdGUgPT0gNCB8fCBpc1RpbWVvdXQg PT0gInRpbWVvdXQiKSApIHsKCQkJCXJlcXVlc3REb25lID0gdHJ1ZTsKCgkJCQkv LyBjbGVhciBwb2xsIGludGVydmFsCgkJCQlpZiAoaXZhbCkgewoJCQkJCWNsZWFy SW50ZXJ2YWwoaXZhbCk7CgkJCQkJaXZhbCA9IG51bGw7CgkJCQl9CgoJCQkJc3Rh dHVzID0gaXNUaW1lb3V0ID09ICJ0aW1lb3V0IiAmJiAidGltZW91dCIgfHwKCQkJ CQkhalF1ZXJ5Lmh0dHBTdWNjZXNzKCB4aHIgKSAmJiAiZXJyb3IiIHx8CgkJCQkJ cy5pZk1vZGlmaWVkICYmIGpRdWVyeS5odHRwTm90TW9kaWZpZWQoIHhociwgcy51 cmwgKSAmJiAibm90bW9kaWZpZWQiIHx8CgkJCQkJInN1Y2Nlc3MiOwoKCQkJCWlm ICggc3RhdHVzID09ICJzdWNjZXNzIiApIHsKCQkJCQkvLyBXYXRjaCBmb3IsIGFu ZCBjYXRjaCwgWE1MIGRvY3VtZW50IHBhcnNlIGVycm9ycwoJCQkJCXRyeSB7CgkJ CQkJCS8vIHByb2Nlc3MgdGhlIGRhdGEgKHJ1bnMgdGhlIHhtbCB0aHJvdWdoIGh0 dHBEYXRhIHJlZ2FyZGxlc3Mgb2YgY2FsbGJhY2spCgkJCQkJCWRhdGEgPSBqUXVl cnkuaHR0cERhdGEoIHhociwgcy5kYXRhVHlwZSwgcy5kYXRhRmlsdGVyICk7CgkJ CQkJfSBjYXRjaChlKSB7CgkJCQkJCXN0YXR1cyA9ICJwYXJzZXJlcnJvciI7CgkJ CQkJfQoJCQkJfQoKCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0IHdh cyBzdWNjZXNzZnVsIG9yIG5vdG1vZGlmaWVkCgkJCQlpZiAoIHN0YXR1cyA9PSAi c3VjY2VzcyIgKSB7CgkJCQkJLy8gQ2FjaGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIs IGlmIGlmTW9kaWZpZWQgbW9kZS4KCQkJCQl2YXIgbW9kUmVzOwoJCQkJCXRyeSB7 CgkJCQkJCW1vZFJlcyA9IHhoci5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2Rp ZmllZCIpOwoJCQkJCX0gY2F0Y2goZSkge30gLy8gc3dhbGxvdyBleGNlcHRpb24g dGhyb3duIGJ5IEZGIGlmIGhlYWRlciBpcyBub3QgYXZhaWxhYmxlCgoJCQkJCWlm ICggcy5pZk1vZGlmaWVkICYmIG1vZFJlcyApCgkJCQkJCWpRdWVyeS5sYXN0TW9k aWZpZWRbcy51cmxdID0gbW9kUmVzOwoKCQkJCQkvLyBKU09OUCBoYW5kbGVzIGl0 cyBvd24gc3VjY2VzcyBjYWxsYmFjawoJCQkJCWlmICggIWpzb25wICkKCQkJCQkJ c3VjY2VzcygpOwoJCQkJfSBlbHNlCgkJCQkJalF1ZXJ5LmhhbmRsZUVycm9yKHMs IHhociwgc3RhdHVzKTsKCgkJCQkvLyBGaXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVy cwoJCQkJY29tcGxldGUoKTsKCgkJCQkvLyBTdG9wIG1lbW9yeSBsZWFrcwoJCQkJ aWYgKCBzLmFzeW5jICkKCQkJCQl4aHIgPSBudWxsOwoJCQl9CgkJfTsKCgkJaWYg KCBzLmFzeW5jICkgewoJCQkvLyBkb24ndCBhdHRhY2ggdGhlIGhhbmRsZXIgdG8g dGhlIHJlcXVlc3QsIGp1c3QgcG9sbCBpdCBpbnN0ZWFkCgkJCXZhciBpdmFsID0g c2V0SW50ZXJ2YWwob25yZWFkeXN0YXRlY2hhbmdlLCAxMyk7CgoJCQkvLyBUaW1l b3V0IGNoZWNrZXIKCQkJaWYgKCBzLnRpbWVvdXQgPiAwICkKCQkJCXNldFRpbWVv dXQoZnVuY3Rpb24oKXsKCQkJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlcXVl c3QgaXMgc3RpbGwgaGFwcGVuaW5nCgkJCQkJaWYgKCB4aHIgKSB7CgkJCQkJCS8v IENhbmNlbCB0aGUgcmVxdWVzdAoJCQkJCQl4aHIuYWJvcnQoKTsKCgkJCQkJCWlm KCAhcmVxdWVzdERvbmUgKQoJCQkJCQkJb25yZWFkeXN0YXRlY2hhbmdlKCAidGlt ZW91dCIgKTsKCQkJCQl9CgkJCQl9LCBzLnRpbWVvdXQpOwoJCX0KCgkJLy8gU2Vu ZCB0aGUgZGF0YQoJCXRyeSB7CgkJCXhoci5zZW5kKHMuZGF0YSk7CgkJfSBjYXRj aChlKSB7CgkJCWpRdWVyeS5oYW5kbGVFcnJvcihzLCB4aHIsIG51bGwsIGUpOwoJ CX0KCgkJLy8gZmlyZWZveCAxLjUgZG9lc24ndCBmaXJlIHN0YXRlY2hhbmdlIGZv ciBzeW5jIHJlcXVlc3RzCgkJaWYgKCAhcy5hc3luYyApCgkJCW9ucmVhZHlzdGF0 ZWNoYW5nZSgpOwoKCQlmdW5jdGlvbiBzdWNjZXNzKCl7CgkJCS8vIElmIGEgbG9j YWwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgZmlyZSBpdCBhbmQgcGFzcyBpdCB0 aGUgZGF0YQoJCQlpZiAoIHMuc3VjY2VzcyApCgkJCQlzLnN1Y2Nlc3MoIGRhdGEs IHN0YXR1cyApOwoKCQkJLy8gRmlyZSB0aGUgZ2xvYmFsIGNhbGxiYWNrCgkJCWlm ICggcy5nbG9iYWwgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Vj Y2VzcyIsIFt4aHIsIHNdICk7CgkJfQoKCQlmdW5jdGlvbiBjb21wbGV0ZSgpewoJ CQkvLyBQcm9jZXNzIHJlc3VsdAoJCQlpZiAoIHMuY29tcGxldGUgKQoJCQkJcy5j b21wbGV0ZSh4aHIsIHN0YXR1cyk7CgoJCQkvLyBUaGUgcmVxdWVzdCB3YXMgY29t cGxldGVkCgkJCWlmICggcy5nbG9iYWwgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdn ZXIoICJhamF4Q29tcGxldGUiLCBbeGhyLCBzXSApOwoKCQkJLy8gSGFuZGxlIHRo ZSBnbG9iYWwgQUpBWCBjb3VudGVyCgkJCWlmICggcy5nbG9iYWwgJiYgISAtLWpR dWVyeS5hY3RpdmUgKQoJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Rv cCIgKTsKCQl9CgoJCS8vIHJldHVybiBYTUxIdHRwUmVxdWVzdCB0byBhbGxvdyBh Ym9ydGluZyB0aGUgcmVxdWVzdCBldGMuCgkJcmV0dXJuIHhocjsKCX0sCgoJaGFu ZGxlRXJyb3I6IGZ1bmN0aW9uKCBzLCB4aHIsIHN0YXR1cywgZSApIHsKCQkvLyBJ ZiBhIGxvY2FsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIGZpcmUgaXQKCQlpZiAo IHMuZXJyb3IgKSBzLmVycm9yKCB4aHIsIHN0YXR1cywgZSApOwoKCQkvLyBGaXJl IHRoZSBnbG9iYWwgY2FsbGJhY2sKCQlpZiAoIHMuZ2xvYmFsICkKCQkJalF1ZXJ5 LmV2ZW50LnRyaWdnZXIoICJhamF4RXJyb3IiLCBbeGhyLCBzLCBlXSApOwoJfSwK CgkvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1 ZXJpZXMKCWFjdGl2ZTogMCwKCgkvLyBEZXRlcm1pbmVzIGlmIGFuIFhNTEh0dHBS ZXF1ZXN0IHdhcyBzdWNjZXNzZnVsIG9yIG5vdAoJaHR0cFN1Y2Nlc3M6IGZ1bmN0 aW9uKCB4aHIgKSB7CgkJdHJ5IHsKCQkJLy8gSUUgZXJyb3Igc29tZXRpbWVzIHJl dHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQgc28gdHJlYXQgaXQgYXMg c3VjY2Vzcywgc2VlICMxNDUwCgkJCXJldHVybiAheGhyLnN0YXR1cyAmJiBsb2Nh dGlvbi5wcm90b2NvbCA9PSAiZmlsZToiIHx8CgkJCQkoIHhoci5zdGF0dXMgPj0g MjAwICYmIHhoci5zdGF0dXMgPCAzMDAgKSB8fCB4aHIuc3RhdHVzID09IDMwNCB8 fCB4aHIuc3RhdHVzID09IDEyMjMgfHwKCQkJCWpRdWVyeS5icm93c2VyLnNhZmFy aSAmJiB4aHIuc3RhdHVzID09IHVuZGVmaW5lZDsKCQl9IGNhdGNoKGUpe30KCQly ZXR1cm4gZmFsc2U7Cgl9LAoKCS8vIERldGVybWluZXMgaWYgYW4gWE1MSHR0cFJl cXVlc3QgcmV0dXJucyBOb3RNb2RpZmllZAoJaHR0cE5vdE1vZGlmaWVkOiBmdW5j dGlvbiggeGhyLCB1cmwgKSB7CgkJdHJ5IHsKCQkJdmFyIHhoclJlcyA9IHhoci5n ZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwoKCQkJLy8gRmlyZWZv eCBhbHdheXMgcmV0dXJucyAyMDAuIGNoZWNrIExhc3QtTW9kaWZpZWQgZGF0ZQoJ CQlyZXR1cm4geGhyLnN0YXR1cyA9PSAzMDQgfHwgeGhyUmVzID09IGpRdWVyeS5s YXN0TW9kaWZpZWRbdXJsXSB8fAoJCQkJalF1ZXJ5LmJyb3dzZXIuc2FmYXJpICYm IHhoci5zdGF0dXMgPT0gdW5kZWZpbmVkOwoJCX0gY2F0Y2goZSl7fQoJCXJldHVy biBmYWxzZTsKCX0sCgoJaHR0cERhdGE6IGZ1bmN0aW9uKCB4aHIsIHR5cGUsIGZp bHRlciApIHsKCQl2YXIgY3QgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRl bnQtdHlwZSIpLAoJCQl4bWwgPSB0eXBlID09ICJ4bWwiIHx8ICF0eXBlICYmIGN0 ICYmIGN0LmluZGV4T2YoInhtbCIpID49IDAsCgkJCWRhdGEgPSB4bWwgPyB4aHIu cmVzcG9uc2VYTUwgOiB4aHIucmVzcG9uc2VUZXh0OwoKCQlpZiAoIHhtbCAmJiBk YXRhLmRvY3VtZW50RWxlbWVudC50YWdOYW1lID09ICJwYXJzZXJlcnJvciIgKQoJ CQl0aHJvdyAicGFyc2VyZXJyb3IiOwoJCQkKCQkvLyBBbGxvdyBhIHByZS1maWx0 ZXJpbmcgZnVuY3Rpb24gdG8gc2FuaXRpemUgdGhlIHJlc3BvbnNlCgkJaWYoIGZp bHRlciApCgkJCWRhdGEgPSBmaWx0ZXIoIGRhdGEsIHR5cGUgKTsKCgkJLy8gSWYg dGhlIHR5cGUgaXMgInNjcmlwdCIsIGV2YWwgaXQgaW4gZ2xvYmFsIGNvbnRleHQK CQlpZiAoIHR5cGUgPT0gInNjcmlwdCIgKQoJCQlqUXVlcnkuZ2xvYmFsRXZhbCgg ZGF0YSApOwoKCQkvLyBHZXQgdGhlIEphdmFTY3JpcHQgb2JqZWN0LCBpZiBKU09O IGlzIHVzZWQuCgkJaWYgKCB0eXBlID09ICJqc29uIiApCgkJCWRhdGEgPSBldmFs KCIoIiArIGRhdGEgKyAiKSIpOwoKCQlyZXR1cm4gZGF0YTsKCX0sCgoJLy8gU2Vy aWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKCS8v IGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZwoJcGFyYW06IGZ1bmN0aW9u KCBhICkgewoJCXZhciBzID0gW107CgoJCS8vIElmIGFuIGFycmF5IHdhcyBwYXNz ZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5CgkJLy8gb2YgZm9ybSBl bGVtZW50cwoJCWlmICggYS5jb25zdHJ1Y3RvciA9PSBBcnJheSB8fCBhLmpxdWVy eSApCgkJCS8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50cwoJCQlqUXVlcnku ZWFjaCggYSwgZnVuY3Rpb24oKXsKCQkJCXMucHVzaCggZW5jb2RlVVJJQ29tcG9u ZW50KHRoaXMubmFtZSkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHRoaXMu dmFsdWUgKSApOwoJCQl9KTsKCgkJLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBp dCdzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnMKCQllbHNlCgkJCS8vIFNl cmlhbGl6ZSB0aGUga2V5L3ZhbHVlcwoJCQlmb3IgKCB2YXIgaiBpbiBhICkKCQkJ CS8vIElmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSB0aGVuIHRoZSBrZXkgbmFtZXMg bmVlZCB0byBiZSByZXBlYXRlZAoJCQkJaWYgKCBhW2pdICYmIGFbal0uY29uc3Ry dWN0b3IgPT0gQXJyYXkgKQoJCQkJCWpRdWVyeS5lYWNoKCBhW2pdLCBmdW5jdGlv bigpewoJCQkJCQlzLnB1c2goIGVuY29kZVVSSUNvbXBvbmVudChqKSArICI9IiAr IGVuY29kZVVSSUNvbXBvbmVudCggdGhpcyApICk7CgkJCQkJfSk7CgkJCQllbHNl CgkJCQkJcy5wdXNoKCBlbmNvZGVVUklDb21wb25lbnQoaikgKyAiPSIgKyBlbmNv ZGVVUklDb21wb25lbnQoIGpRdWVyeS5pc0Z1bmN0aW9uKGFbal0pID8gYVtqXSgp IDogYVtqXSApICk7CgoJCS8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6 YXRpb24KCQlyZXR1cm4gcy5qb2luKCImIikucmVwbGFjZSgvJTIwL2csICIrIik7 Cgl9Cgp9KTsKalF1ZXJ5LmZuLmV4dGVuZCh7CglzaG93OiBmdW5jdGlvbihzcGVl ZCxjYWxsYmFjayl7CgkJcmV0dXJuIHNwZWVkID8KCQkJdGhpcy5hbmltYXRlKHsK CQkJCWhlaWdodDogInNob3ciLCB3aWR0aDogInNob3ciLCBvcGFjaXR5OiAic2hv dyIKCQkJfSwgc3BlZWQsIGNhbGxiYWNrKSA6CgoJCQl0aGlzLmZpbHRlcigiOmhp ZGRlbiIpLmVhY2goZnVuY3Rpb24oKXsKCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9 IHRoaXMub2xkYmxvY2sgfHwgIiI7CgkJCQlpZiAoIGpRdWVyeS5jc3ModGhpcywi ZGlzcGxheSIpID09ICJub25lIiApIHsKCQkJCQl2YXIgZWxlbSA9IGpRdWVyeSgi PCIgKyB0aGlzLnRhZ05hbWUgKyAiIC8+IikuYXBwZW5kVG8oImJvZHkiKTsKCQkJ CQl0aGlzLnN0eWxlLmRpc3BsYXkgPSBlbGVtLmNzcygiZGlzcGxheSIpOwoJCQkJ CS8vIGhhbmRsZSBhbiBlZGdlIGNvbmRpdGlvbiB3aGVyZSBjc3MgaXMgLSBkaXYg eyBkaXNwbGF5Om5vbmU7IH0gb3Igc2ltaWxhcgoJCQkJCWlmICh0aGlzLnN0eWxl LmRpc3BsYXkgPT0gIm5vbmUiKQoJCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAi YmxvY2siOwoJCQkJCWVsZW0ucmVtb3ZlKCk7CgkJCQl9CgkJCX0pLmVuZCgpOwoJ fSwKCgloaWRlOiBmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7CgkJcmV0dXJuIHNw ZWVkID8KCQkJdGhpcy5hbmltYXRlKHsKCQkJCWhlaWdodDogImhpZGUiLCB3aWR0 aDogImhpZGUiLCBvcGFjaXR5OiAiaGlkZSIKCQkJfSwgc3BlZWQsIGNhbGxiYWNr KSA6CgoJCQl0aGlzLmZpbHRlcigiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7 CgkJCQl0aGlzLm9sZGJsb2NrID0gdGhpcy5vbGRibG9jayB8fCBqUXVlcnkuY3Nz KHRoaXMsImRpc3BsYXkiKTsKCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9ICJub25l IjsKCQkJfSkuZW5kKCk7Cgl9LAoKCS8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVu Y3Rpb24KCV90b2dnbGU6IGpRdWVyeS5mbi50b2dnbGUsCgoJdG9nZ2xlOiBmdW5j dGlvbiggZm4sIGZuMiApewoJCXJldHVybiBqUXVlcnkuaXNGdW5jdGlvbihmbikg JiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSA/CgkJCXRoaXMuX3RvZ2dsZS5hcHBs eSggdGhpcywgYXJndW1lbnRzICkgOgoJCQlmbiA/CgkJCQl0aGlzLmFuaW1hdGUo ewoJCQkJCWhlaWdodDogInRvZ2dsZSIsIHdpZHRoOiAidG9nZ2xlIiwgb3BhY2l0 eTogInRvZ2dsZSIKCQkJCX0sIGZuLCBmbjIpIDoKCQkJCXRoaXMuZWFjaChmdW5j dGlvbigpewoJCQkJCWpRdWVyeSh0aGlzKVsgalF1ZXJ5KHRoaXMpLmlzKCI6aGlk ZGVuIikgPyAic2hvdyIgOiAiaGlkZSIgXSgpOwoJCQkJfSk7Cgl9LAoKCXNsaWRl RG93bjogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewoJCXJldHVybiB0aGlzLmFu aW1hdGUoe2hlaWdodDogInNob3cifSwgc3BlZWQsIGNhbGxiYWNrKTsKCX0sCgoJ c2xpZGVVcDogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewoJCXJldHVybiB0aGlz LmFuaW1hdGUoe2hlaWdodDogImhpZGUifSwgc3BlZWQsIGNhbGxiYWNrKTsKCX0s CgoJc2xpZGVUb2dnbGU6IGZ1bmN0aW9uKHNwZWVkLCBjYWxsYmFjayl7CgkJcmV0 dXJuIHRoaXMuYW5pbWF0ZSh7aGVpZ2h0OiAidG9nZ2xlIn0sIHNwZWVkLCBjYWxs YmFjayk7Cgl9LAoKCWZhZGVJbjogZnVuY3Rpb24oc3BlZWQsIGNhbGxiYWNrKXsK CQlyZXR1cm4gdGhpcy5hbmltYXRlKHtvcGFjaXR5OiAic2hvdyJ9LCBzcGVlZCwg Y2FsbGJhY2spOwoJfSwKCglmYWRlT3V0OiBmdW5jdGlvbihzcGVlZCwgY2FsbGJh Y2spewoJCXJldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6ICJoaWRlIn0sIHNw ZWVkLCBjYWxsYmFjayk7Cgl9LAoKCWZhZGVUbzogZnVuY3Rpb24oc3BlZWQsdG8s Y2FsbGJhY2spewoJCXJldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6IHRvfSwg c3BlZWQsIGNhbGxiYWNrKTsKCX0sCgoJYW5pbWF0ZTogZnVuY3Rpb24oIHByb3As IHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewoJCXZhciBvcHRhbGwgPSBqUXVl cnkuc3BlZWQoc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoKCQlyZXR1cm4gdGhp c1sgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJxdWV1ZSIgXShm dW5jdGlvbigpewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgIT0gMSkKCQkJCXJldHVy biBmYWxzZTsKCgkJCXZhciBvcHQgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvcHRhbGwp LCBwLAoJCQkJaGlkZGVuID0galF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksIHNl bGYgPSB0aGlzOwoKCQkJZm9yICggcCBpbiBwcm9wICkgewoJCQkJaWYgKCBwcm9w W3BdID09ICJoaWRlIiAmJiBoaWRkZW4gfHwgcHJvcFtwXSA9PSAic2hvdyIgJiYg IWhpZGRlbiApCgkJCQkJcmV0dXJuIG9wdC5jb21wbGV0ZS5jYWxsKHRoaXMpOwoK CQkJCWlmICggcCA9PSAiaGVpZ2h0IiB8fCBwID09ICJ3aWR0aCIgKSB7CgkJCQkJ Ly8gU3RvcmUgZGlzcGxheSBwcm9wZXJ0eQoJCQkJCW9wdC5kaXNwbGF5ID0galF1 ZXJ5LmNzcyh0aGlzLCAiZGlzcGxheSIpOwoKCQkJCQkvLyBNYWtlIHN1cmUgdGhh dCBub3RoaW5nIHNuZWFrcyBvdXQKCQkJCQlvcHQub3ZlcmZsb3cgPSB0aGlzLnN0 eWxlLm92ZXJmbG93OwoJCQkJfQoJCQl9CgoJCQlpZiAoIG9wdC5vdmVyZmxvdyAh PSBudWxsICkKCQkJCXRoaXMuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCgkJ CW9wdC5jdXJBbmltID0galF1ZXJ5LmV4dGVuZCh7fSwgcHJvcCk7CgoJCQlqUXVl cnkuZWFjaCggcHJvcCwgZnVuY3Rpb24obmFtZSwgdmFsKXsKCQkJCXZhciBlID0g bmV3IGpRdWVyeS5meCggc2VsZiwgb3B0LCBuYW1lICk7CgoJCQkJaWYgKCAvdG9n Z2xlfHNob3d8aGlkZS8udGVzdCh2YWwpICkKCQkJCQllWyB2YWwgPT0gInRvZ2ds ZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSggcHJvcCApOwoJ CQkJZWxzZSB7CgkJCQkJdmFyIHBhcnRzID0gdmFsLnRvU3RyaW5nKCkubWF0Y2go L14oWystXT0pPyhbXGQrLS5dKykoLiopJC8pLAoJCQkJCQlzdGFydCA9IGUuY3Vy KHRydWUpIHx8IDA7CgoJCQkJCWlmICggcGFydHMgKSB7CgkJCQkJCXZhciBlbmQg PSBwYXJzZUZsb2F0KHBhcnRzWzJdKSwKCQkJCQkJCXVuaXQgPSBwYXJ0c1szXSB8 fCAicHgiOwoKCQkJCQkJLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZh bHVlCgkJCQkJCWlmICggdW5pdCAhPSAicHgiICkgewoJCQkJCQkJc2VsZi5zdHls ZVsgbmFtZSBdID0gKGVuZCB8fCAxKSArIHVuaXQ7CgkJCQkJCQlzdGFydCA9ICgo ZW5kIHx8IDEpIC8gZS5jdXIodHJ1ZSkpICogc3RhcnQ7CgkJCQkJCQlzZWxmLnN0 eWxlWyBuYW1lIF0gPSBzdGFydCArIHVuaXQ7CgkJCQkJCX0KCgkJCQkJCS8vIElm IGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0 aXZlIGFuaW1hdGlvbgoJCQkJCQlpZiAoIHBhcnRzWzFdICkKCQkJCQkJCWVuZCA9 ICgocGFydHNbMV0gPT0gIi09IiA/IC0xIDogMSkgKiBlbmQpICsgc3RhcnQ7CgoJ CQkJCQllLmN1c3RvbSggc3RhcnQsIGVuZCwgdW5pdCApOwoJCQkJCX0gZWxzZQoJ CQkJCQllLmN1c3RvbSggc3RhcnQsIHZhbCwgIiIgKTsKCQkJCX0KCQkJfSk7CgoJ CQkvLyBGb3IgSlMgc3RyaWN0IGNvbXBsaWFuY2UKCQkJcmV0dXJuIHRydWU7CgkJ fSk7Cgl9LAoKCXF1ZXVlOiBmdW5jdGlvbih0eXBlLCBmbil7CgkJaWYgKCBqUXVl cnkuaXNGdW5jdGlvbih0eXBlKSB8fCAoIHR5cGUgJiYgdHlwZS5jb25zdHJ1Y3Rv ciA9PSBBcnJheSApKSB7CgkJCWZuID0gdHlwZTsKCQkJdHlwZSA9ICJmeCI7CgkJ fQoKCQlpZiAoICF0eXBlIHx8ICh0eXBlb2YgdHlwZSA9PSAic3RyaW5nIiAmJiAh Zm4pICkKCQkJcmV0dXJuIHF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7CgoJCXJldHVy biB0aGlzLmVhY2goZnVuY3Rpb24oKXsKCQkJaWYgKCBmbi5jb25zdHJ1Y3RvciA9 PSBBcnJheSApCgkJCQlxdWV1ZSh0aGlzLCB0eXBlLCBmbik7CgkJCWVsc2UgewoJ CQkJcXVldWUodGhpcywgdHlwZSkucHVzaCggZm4gKTsKCgkJCQlpZiAoIHF1ZXVl KHRoaXMsIHR5cGUpLmxlbmd0aCA9PSAxICkKCQkJCQlmbi5jYWxsKHRoaXMpOwoJ CQl9CgkJfSk7Cgl9LAoKCXN0b3A6IGZ1bmN0aW9uKGNsZWFyUXVldWUsIGdvdG9F bmQpewoJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzOwoKCQlpZiAoY2xlYXJR dWV1ZSkKCQkJdGhpcy5xdWV1ZShbXSk7CgoJCXRoaXMuZWFjaChmdW5jdGlvbigp ewoJCQkvLyBnbyBpbiByZXZlcnNlIG9yZGVyIHNvIGFueXRoaW5nIGFkZGVkIHRv IHRoZSBxdWV1ZSBkdXJpbmcgdGhlIGxvb3AgaXMgaWdub3JlZAoJCQlmb3IgKCB2 YXIgaSA9IHRpbWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApCgkJCQlpZiAo IHRpbWVyc1tpXS5lbGVtID09IHRoaXMgKSB7CgkJCQkJaWYgKGdvdG9FbmQpCgkJ CQkJCS8vIGZvcmNlIHRoZSBuZXh0IHN0ZXAgdG8gYmUgdGhlIGxhc3QKCQkJCQkJ dGltZXJzW2ldKHRydWUpOwoJCQkJCXRpbWVycy5zcGxpY2UoaSwgMSk7CgkJCQl9 CgkJfSk7CgoJCS8vIHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUg bGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKCQlpZiAoIWdvdG9FbmQpCgkJCXRoaXMu ZGVxdWV1ZSgpOwoKCQlyZXR1cm4gdGhpczsKCX0KCn0pOwoKdmFyIHF1ZXVlID0g ZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGFycmF5ICkgewoJaWYgKCBlbGVtICl7CgoJ CXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJCXZhciBxID0galF1ZXJ5LmRhdGEoIGVs ZW0sIHR5cGUgKyAicXVldWUiICk7CgoJCWlmICggIXEgfHwgYXJyYXkgKQoJCQlx ID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUgKyAicXVldWUiLCBqUXVlcnkubWFr ZUFycmF5KGFycmF5KSApOwoKCX0KCXJldHVybiBxOwp9OwoKalF1ZXJ5LmZuLmRl cXVldWUgPSBmdW5jdGlvbih0eXBlKXsKCXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJ cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewoJCXZhciBxID0gcXVldWUodGhp cywgdHlwZSk7CgoJCXEuc2hpZnQoKTsKCgkJaWYgKCBxLmxlbmd0aCApCgkJCXFb MF0uY2FsbCggdGhpcyApOwoJfSk7Cn07CgpqUXVlcnkuZXh0ZW5kKHsKCglzcGVl ZDogZnVuY3Rpb24oc3BlZWQsIGVhc2luZywgZm4pIHsKCQl2YXIgb3B0ID0gc3Bl ZWQgJiYgc3BlZWQuY29uc3RydWN0b3IgPT0gT2JqZWN0ID8gc3BlZWQgOiB7CgkJ CWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CgkJCQlqUXVlcnkuaXNG dW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKCQkJZHVyYXRpb246IHNwZWVkLAoJ CQllYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgZWFzaW5nLmNvbnN0 cnVjdG9yICE9IEZ1bmN0aW9uICYmIGVhc2luZwoJCX07CgoJCW9wdC5kdXJhdGlv biA9IChvcHQuZHVyYXRpb24gJiYgb3B0LmR1cmF0aW9uLmNvbnN0cnVjdG9yID09 IE51bWJlciA/CgkJCW9wdC5kdXJhdGlvbiA6CgkJCWpRdWVyeS5meC5zcGVlZHNb b3B0LmR1cmF0aW9uXSkgfHwgalF1ZXJ5LmZ4LnNwZWVkcy5kZWY7CgoJCS8vIFF1 ZXVlaW5nCgkJb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKCQlvcHQuY29tcGxldGUg PSBmdW5jdGlvbigpewoJCQlpZiAoIG9wdC5xdWV1ZSAhPT0gZmFsc2UgKQoJCQkJ alF1ZXJ5KHRoaXMpLmRlcXVldWUoKTsKCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlv biggb3B0Lm9sZCApICkKCQkJCW9wdC5vbGQuY2FsbCggdGhpcyApOwoJCX07CgoJ CXJldHVybiBvcHQ7Cgl9LAoKCWVhc2luZzogewoJCWxpbmVhcjogZnVuY3Rpb24o IHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewoJCQlyZXR1cm4gZmlyc3ROdW0gKyBk aWZmICogcDsKCQl9LAoJCXN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0s IGRpZmYgKSB7CgkJCXJldHVybiAoKC1NYXRoLmNvcyhwKk1hdGguUEkpLzIpICsg MC41KSAqIGRpZmYgKyBmaXJzdE51bTsKCQl9Cgl9LAoKCXRpbWVyczogW10sCgl0 aW1lcklkOiBudWxsLAoKCWZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJv cCApewoJCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CgkJdGhpcy5lbGVtID0gZWxl bTsKCQl0aGlzLnByb3AgPSBwcm9wOwoKCQlpZiAoICFvcHRpb25zLm9yaWcgKQoJ CQlvcHRpb25zLm9yaWcgPSB7fTsKCX0KCn0pOwoKalF1ZXJ5LmZ4LnByb3RvdHlw ZSA9IHsKCgkvLyBTaW1wbGUgZnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzdHlsZSB2 YWx1ZQoJdXBkYXRlOiBmdW5jdGlvbigpewoJCWlmICggdGhpcy5vcHRpb25zLnN0 ZXAgKQoJCQl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMu bm93LCB0aGlzICk7CgoJCShqUXVlcnkuZnguc3RlcFt0aGlzLnByb3BdIHx8IGpR dWVyeS5meC5zdGVwLl9kZWZhdWx0KSggdGhpcyApOwoKCQkvLyBTZXQgZGlzcGxh eSBwcm9wZXJ0eSB0byBibG9jayBmb3IgaGVpZ2h0L3dpZHRoIGFuaW1hdGlvbnMK CQlpZiAoIHRoaXMucHJvcCA9PSAiaGVpZ2h0IiB8fCB0aGlzLnByb3AgPT0gIndp ZHRoIiApCgkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCX0s CgoJLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKCWN1cjogZnVuY3Rpb24oZm9yY2Up ewoJCWlmICggdGhpcy5lbGVtW3RoaXMucHJvcF0gIT0gbnVsbCAmJiB0aGlzLmVs ZW0uc3R5bGVbdGhpcy5wcm9wXSA9PSBudWxsICkKCQkJcmV0dXJuIHRoaXMuZWxl bVsgdGhpcy5wcm9wIF07CgoJCXZhciByID0gcGFyc2VGbG9hdChqUXVlcnkuY3Nz KHRoaXMuZWxlbSwgdGhpcy5wcm9wLCBmb3JjZSkpOwoJCXJldHVybiByICYmIHIg PiAtMTAwMDAgPyByIDogcGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxl bSwgdGhpcy5wcm9wKSkgfHwgMDsKCX0sCgoJLy8gU3RhcnQgYW4gYW5pbWF0aW9u IGZyb20gb25lIG51bWJlciB0byBhbm90aGVyCgljdXN0b206IGZ1bmN0aW9uKGZy b20sIHRvLCB1bml0KXsKCQl0aGlzLnN0YXJ0VGltZSA9IG5vdygpOwoJCXRoaXMu c3RhcnQgPSBmcm9tOwoJCXRoaXMuZW5kID0gdG87CgkJdGhpcy51bml0ID0gdW5p dCB8fCB0aGlzLnVuaXQgfHwgInB4IjsKCQl0aGlzLm5vdyA9IHRoaXMuc3RhcnQ7 CgkJdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMDsKCQl0aGlzLnVwZGF0ZSgpOwoK CQl2YXIgc2VsZiA9IHRoaXM7CgkJZnVuY3Rpb24gdChnb3RvRW5kKXsKCQkJcmV0 dXJuIHNlbGYuc3RlcChnb3RvRW5kKTsKCQl9CgoJCXQuZWxlbSA9IHRoaXMuZWxl bTsKCgkJalF1ZXJ5LnRpbWVycy5wdXNoKHQpOwoKCQlpZiAoIGpRdWVyeS50aW1l cklkID09IG51bGwgKSB7CgkJCWpRdWVyeS50aW1lcklkID0gc2V0SW50ZXJ2YWwo ZnVuY3Rpb24oKXsKCQkJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzOwoKCQkJ CWZvciAoIHZhciBpID0gMDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApCgkJCQkJ aWYgKCAhdGltZXJzW2ldKCkgKQoJCQkJCQl0aW1lcnMuc3BsaWNlKGktLSwgMSk7 CgoJCQkJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKCQkJCQljbGVhckludGVydmFs KCBqUXVlcnkudGltZXJJZCApOwoJCQkJCWpRdWVyeS50aW1lcklkID0gbnVsbDsK CQkJCX0KCQkJfSwgMTMpOwoJCX0KCX0sCgoJLy8gU2ltcGxlICdzaG93JyBmdW5j dGlvbgoJc2hvdzogZnVuY3Rpb24oKXsKCQkvLyBSZW1lbWJlciB3aGVyZSB3ZSBz dGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCgkJdGhp cy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5hdHRyKCB0aGlzLmVs ZW0uc3R5bGUsIHRoaXMucHJvcCApOwoJCXRoaXMub3B0aW9ucy5zaG93ID0gdHJ1 ZTsKCgkJLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgoJCXRoaXMuY3VzdG9tKDAsIHRo aXMuY3VyKCkpOwoKCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzdGFydCBhdCBhIHNt YWxsIHdpZHRoL2hlaWdodCB0byBhdm9pZCBhbnkKCQkvLyBmbGFzaCBvZiBjb250 ZW50CgkJaWYgKCB0aGlzLnByb3AgPT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT0g ImhlaWdodCIgKQoJCQl0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXSA9ICIxcHgi OwoKCQkvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50CgkJalF1ZXJ5KHRo aXMuZWxlbSkuc2hvdygpOwoJfSwKCgkvLyBTaW1wbGUgJ2hpZGUnIGZ1bmN0aW9u CgloaWRlOiBmdW5jdGlvbigpewoJCS8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0 ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKCQl0aGlzLm9w dGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LmF0dHIoIHRoaXMuZWxlbS5z dHlsZSwgdGhpcy5wcm9wICk7CgkJdGhpcy5vcHRpb25zLmhpZGUgPSB0cnVlOwoK CQkvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCgkJdGhpcy5jdXN0b20odGhpcy5jdXIo KSwgMCk7Cgl9LAoKCS8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KCXN0ZXA6 IGZ1bmN0aW9uKGdvdG9FbmQpewoJCXZhciB0ID0gbm93KCk7CgoJCWlmICggZ290 b0VuZCB8fCB0ID4gdGhpcy5vcHRpb25zLmR1cmF0aW9uICsgdGhpcy5zdGFydFRp bWUgKSB7CgkJCXRoaXMubm93ID0gdGhpcy5lbmQ7CgkJCXRoaXMucG9zID0gdGhp cy5zdGF0ZSA9IDE7CgkJCXRoaXMudXBkYXRlKCk7CgoJCQl0aGlzLm9wdGlvbnMu Y3VyQW5pbVsgdGhpcy5wcm9wIF0gPSB0cnVlOwoKCQkJdmFyIGRvbmUgPSB0cnVl OwoJCQlmb3IgKCB2YXIgaSBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSApCgkJCQlp ZiAoIHRoaXMub3B0aW9ucy5jdXJBbmltW2ldICE9PSB0cnVlICkKCQkJCQlkb25l ID0gZmFsc2U7CgoJCQlpZiAoIGRvbmUgKSB7CgkJCQlpZiAoIHRoaXMub3B0aW9u cy5kaXNwbGF5ICE9IG51bGwgKSB7CgkJCQkJLy8gUmVzZXQgdGhlIG92ZXJmbG93 CgkJCQkJdGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93ID0gdGhpcy5vcHRpb25zLm92 ZXJmbG93OwoKCQkJCQkvLyBSZXNldCB0aGUgZGlzcGxheQoJCQkJCXRoaXMuZWxl bS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7CgkJCQkJaWYg KCBqUXVlcnkuY3NzKHRoaXMuZWxlbSwgImRpc3BsYXkiKSA9PSAibm9uZSIgKQoJ CQkJCQl0aGlzLmVsZW0uc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgkJCQl9CgoJ CQkJLy8gSGlkZSB0aGUgZWxlbWVudCBpZiB0aGUgImhpZGUiIG9wZXJhdGlvbiB3 YXMgZG9uZQoJCQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlkZSApCgkJCQkJdGhpcy5l bGVtLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgoJCQkJLy8gUmVzZXQgdGhlIHBy b3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBiZWVuIGhpZGRlbiBvciBzaG93bgoJ CQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlkZSB8fCB0aGlzLm9wdGlvbnMuc2hvdyAp CgkJCQkJZm9yICggdmFyIHAgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0gKQoJCQkJ CQlqUXVlcnkuYXR0cih0aGlzLmVsZW0uc3R5bGUsIHAsIHRoaXMub3B0aW9ucy5v cmlnW3BdKTsKCQkJfQoKCQkJaWYgKCBkb25lICkKCQkJCS8vIEV4ZWN1dGUgdGhl IGNvbXBsZXRlIGZ1bmN0aW9uCgkJCQl0aGlzLm9wdGlvbnMuY29tcGxldGUuY2Fs bCggdGhpcy5lbGVtICk7CgoJCQlyZXR1cm4gZmFsc2U7CgkJfSBlbHNlIHsKCQkJ dmFyIG4gPSB0IC0gdGhpcy5zdGFydFRpbWU7CgkJCXRoaXMuc3RhdGUgPSBuIC8g dGhpcy5vcHRpb25zLmR1cmF0aW9uOwoKCQkJLy8gUGVyZm9ybSB0aGUgZWFzaW5n IGZ1bmN0aW9uLCBkZWZhdWx0cyB0byBzd2luZwoJCQl0aGlzLnBvcyA9IGpRdWVy eS5lYXNpbmdbdGhpcy5vcHRpb25zLmVhc2luZyB8fCAoalF1ZXJ5LmVhc2luZy5z d2luZyA/ICJzd2luZyIgOiAibGluZWFyIildKHRoaXMuc3RhdGUsIG4sIDAsIDEs IHRoaXMub3B0aW9ucy5kdXJhdGlvbik7CgkJCXRoaXMubm93ID0gdGhpcy5zdGFy dCArICgodGhpcy5lbmQgLSB0aGlzLnN0YXJ0KSAqIHRoaXMucG9zKTsKCgkJCS8v IFBlcmZvcm0gdGhlIG5leHQgc3RlcCBvZiB0aGUgYW5pbWF0aW9uCgkJCXRoaXMu dXBkYXRlKCk7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCn07CgpqUXVlcnkuZXh0 ZW5kKCBqUXVlcnkuZngsIHsKCXNwZWVkczp7CgkJc2xvdzogNjAwLAogCQlmYXN0 OiAyMDAsCiAJCS8vIERlZmF1bHQgc3BlZWQKIAkJZGVmOiA0MDAKCX0sCglzdGVw OiB7CgkJc2Nyb2xsTGVmdDogZnVuY3Rpb24oZngpewoJCQlmeC5lbGVtLnNjcm9s bExlZnQgPSBmeC5ub3c7CgkJfSwKCgkJc2Nyb2xsVG9wOiBmdW5jdGlvbihmeCl7 CgkJCWZ4LmVsZW0uc2Nyb2xsVG9wID0gZngubm93OwoJCX0sCgoJCW9wYWNpdHk6 IGZ1bmN0aW9uKGZ4KXsKCQkJalF1ZXJ5LmF0dHIoZnguZWxlbS5zdHlsZSwgIm9w YWNpdHkiLCBmeC5ub3cpOwoJCX0sCgoJCV9kZWZhdWx0OiBmdW5jdGlvbihmeCl7 CgkJCWZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IGZ4Lm5vdyArIGZ4LnVuaXQ7 CgkJfQoJfQp9KTsKLy8gVGhlIE9mZnNldCBNZXRob2QKLy8gT3JpZ2luYWxseSBC eSBCcmFuZG9uIEFhcm9uLCBwYXJ0IG9mIHRoZSBEaW1lbnNpb24gUGx1Z2luCi8v IGh0dHA6Ly9qcXVlcnkuY29tL3BsdWdpbnMvcHJvamVjdC9kaW1lbnNpb25zCmpR dWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbigpIHsKCXZhciBsZWZ0ID0gMCwgdG9w ID0gMCwgZWxlbSA9IHRoaXNbMF0sIHJlc3VsdHM7CgoJaWYgKCBlbGVtICkgd2l0 aCAoIGpRdWVyeS5icm93c2VyICkgewoJCXZhciBwYXJlbnQgICAgICAgPSBlbGVt LnBhcmVudE5vZGUsCgkJICAgIG9mZnNldENoaWxkICA9IGVsZW0sCgkJICAgIG9m ZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50LAoJCSAgICBkb2MgICAgICAg ICAgPSBlbGVtLm93bmVyRG9jdW1lbnQsCgkJICAgIHNhZmFyaTIgICAgICA9IHNh ZmFyaSAmJiBwYXJzZUludCh2ZXJzaW9uKSA8IDUyMiAmJiAhL2Fkb2JlYWlyL2ku dGVzdCh1c2VyQWdlbnQpLAoJCSAgICBjc3MgICAgICAgICAgPSBqUXVlcnkuY3Vy Q1NTLAoJCSAgICBmaXhlZCAgICAgICAgPSBjc3MoZWxlbSwgInBvc2l0aW9uIikg PT0gImZpeGVkIjsKCgkJLy8gVXNlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpZiBh dmFpbGFibGUKCQlpZiAoIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICkgewoJ CQl2YXIgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCgkJCS8v IEFkZCB0aGUgZG9jdW1lbnQgc2Nyb2xsIG9mZnNldHMKCQkJYWRkKGJveC5sZWZ0 ICsgTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2Mu Ym9keS5zY3JvbGxMZWZ0KSwKCQkJCWJveC50b3AgICsgTWF0aC5tYXgoZG9jLmRv Y3VtZW50RWxlbWVudC5zY3JvbGxUb3AsICBkb2MuYm9keS5zY3JvbGxUb3ApKTsK CgkJCS8vIElFIGFkZHMgdGhlIEhUTUwgZWxlbWVudCdzIGJvcmRlciwgYnkgZGVm YXVsdCBpdCBpcyBtZWRpdW0gd2hpY2ggaXMgMnB4CgkJCS8vIElFIDYgYW5kIDcg cXVpcmtzIG1vZGUgdGhlIGJvcmRlciB3aWR0aCBpcyBvdmVyd3JpdGFibGUgYnkg dGhlIGZvbGxvd2luZyBjc3MgaHRtbCB7IGJvcmRlcjogMDsgfQoJCQkvLyBJRSA3 IHN0YW5kYXJkcyBtb2RlLCB0aGUgYm9yZGVyIGlzIGFsd2F5cyAycHgKCQkJLy8g VGhpcyBib3JkZXIvb2Zmc2V0IGlzIHR5cGljYWxseSByZXByZXNlbnRlZCBieSB0 aGUgY2xpZW50TGVmdCBhbmQgY2xpZW50VG9wIHByb3BlcnRpZXMKCQkJLy8gSG93 ZXZlciwgaW4gSUU2IGFuZCA3IHF1aXJrcyBtb2RlIHRoZSBjbGllbnRMZWZ0IGFu ZCBjbGllbnRUb3AgcHJvcGVydGllcyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBvdmVy d3JpdGluZyBpdCB2aWEgQ1NTCgkJCS8vIFRoZXJlZm9yZSB0aGlzIG1ldGhvZCB3 aWxsIGJlIG9mZiBieSAycHggaW4gSUUgd2hpbGUgaW4gcXVpcmtzbW9kZQoJCQlh ZGQoIC1kb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnQsIC1kb2MuZG9jdW1l bnRFbGVtZW50LmNsaWVudFRvcCApOwoKCQkvLyBPdGhlcndpc2UgbG9vcCB0aHJv dWdoIHRoZSBvZmZzZXRQYXJlbnRzIGFuZCBwYXJlbnROb2RlcwoJCX0gZWxzZSB7 CgoJCQkvLyBJbml0aWFsIGVsZW1lbnQgb2Zmc2V0cwoJCQlhZGQoIGVsZW0ub2Zm c2V0TGVmdCwgZWxlbS5vZmZzZXRUb3AgKTsKCgkJCS8vIEdldCBwYXJlbnQgb2Zm c2V0cwoJCQl3aGlsZSAoIG9mZnNldFBhcmVudCApIHsKCQkJCS8vIEFkZCBvZmZz ZXRQYXJlbnQgb2Zmc2V0cwoJCQkJYWRkKCBvZmZzZXRQYXJlbnQub2Zmc2V0TGVm dCwgb2Zmc2V0UGFyZW50Lm9mZnNldFRvcCApOwoKCQkJCS8vIE1vemlsbGEgYW5k IFNhZmFyaSA+IDIgZG9lcyBub3QgaW5jbHVkZSB0aGUgYm9yZGVyIG9uIG9mZnNl dCBwYXJlbnRzCgkJCQkvLyBIb3dldmVyIE1vemlsbGEgYWRkcyB0aGUgYm9yZGVy IGZvciB0YWJsZSBvciB0YWJsZSBjZWxscwoJCQkJaWYgKCBtb3ppbGxhICYmICEv XnQoYWJsZXxkfGgpJC9pLnRlc3Qob2Zmc2V0UGFyZW50LnRhZ05hbWUpIHx8IHNh ZmFyaSAmJiAhc2FmYXJpMiApCgkJCQkJYm9yZGVyKCBvZmZzZXRQYXJlbnQgKTsK CgkJCQkvLyBBZGQgdGhlIGRvY3VtZW50IHNjcm9sbCBvZmZzZXRzIGlmIHBvc2l0 aW9uIGlzIGZpeGVkIG9uIGFueSBvZmZzZXRQYXJlbnQKCQkJCWlmICggIWZpeGVk ICYmIGNzcyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09ICJmaXhlZCIgKQoJ CQkJCWZpeGVkID0gdHJ1ZTsKCgkJCQkvLyBTZXQgb2Zmc2V0Q2hpbGQgdG8gcHJl dmlvdXMgb2Zmc2V0UGFyZW50IHVubGVzcyBpdCBpcyB0aGUgYm9keSBlbGVtZW50 CgkJCQlvZmZzZXRDaGlsZCAgPSAvXmJvZHkkL2kudGVzdChvZmZzZXRQYXJlbnQu dGFnTmFtZSkgPyBvZmZzZXRDaGlsZCA6IG9mZnNldFBhcmVudDsKCQkJCS8vIEdl dCBuZXh0IG9mZnNldFBhcmVudAoJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFy ZW50Lm9mZnNldFBhcmVudDsKCQkJfQoKCQkJLy8gR2V0IHBhcmVudCBzY3JvbGwg b2Zmc2V0cwoJCQl3aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAmJiAh L15ib2R5fGh0bWwkL2kudGVzdChwYXJlbnQudGFnTmFtZSkgKSB7CgkJCQkvLyBS ZW1vdmUgcGFyZW50IHNjcm9sbCBVTkxFU1MgdGhhdCBwYXJlbnQgaXMgaW5saW5l IG9yIGEgdGFibGUgdG8gd29yayBhcm91bmQgT3BlcmEgaW5saW5lL3RhYmxlIHNj cm9sbExlZnQvVG9wIGJ1ZwoJCQkJaWYgKCAhL15pbmxpbmV8dGFibGUuKiQvaS50 ZXN0KGNzcyhwYXJlbnQsICJkaXNwbGF5IikpICkKCQkJCQkvLyBTdWJ0cmFjdCBw YXJlbnQgc2Nyb2xsIG9mZnNldHMKCQkJCQlhZGQoIC1wYXJlbnQuc2Nyb2xsTGVm dCwgLXBhcmVudC5zY3JvbGxUb3AgKTsKCgkJCQkvLyBNb3ppbGxhIGRvZXMgbm90 IGFkZCB0aGUgYm9yZGVyIGZvciBhIHBhcmVudCB0aGF0IGhhcyBvdmVyZmxvdyAh PSB2aXNpYmxlCgkJCQlpZiAoIG1vemlsbGEgJiYgY3NzKHBhcmVudCwgIm92ZXJm bG93IikgIT0gInZpc2libGUiICkKCQkJCQlib3JkZXIoIHBhcmVudCApOwoKCQkJ CS8vIEdldCBuZXh0IHBhcmVudAoJCQkJcGFyZW50ID0gcGFyZW50LnBhcmVudE5v ZGU7CgkJCX0KCgkJCS8vIFNhZmFyaSA8PSAyIGRvdWJsZXMgYm9keSBvZmZzZXRz IHdpdGggYSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50L29mZnNldFBhcmVudCBvciBh YnNvbHV0ZWx5IHBvc2l0aW9uZWQgb2Zmc2V0Q2hpbGQKCQkJLy8gTW96aWxsYSBk b3VibGVzIGJvZHkgb2Zmc2V0cyB3aXRoIGEgbm9uLWFic29sdXRlbHkgcG9zaXRp b25lZCBvZmZzZXRDaGlsZAoJCQlpZiAoIChzYWZhcmkyICYmIChmaXhlZCB8fCBj c3Mob2Zmc2V0Q2hpbGQsICJwb3NpdGlvbiIpID09ICJhYnNvbHV0ZSIpKSB8fAoJ CQkJKG1vemlsbGEgJiYgY3NzKG9mZnNldENoaWxkLCAicG9zaXRpb24iKSAhPSAi YWJzb2x1dGUiKSApCgkJCQkJYWRkKCAtZG9jLmJvZHkub2Zmc2V0TGVmdCwgLWRv Yy5ib2R5Lm9mZnNldFRvcCApOwoKCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3Jv bGwgb2Zmc2V0cyBpZiBwb3NpdGlvbiBpcyBmaXhlZAoJCQlpZiAoIGZpeGVkICkK CQkJCWFkZChNYXRoLm1heChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQs IGRvYy5ib2R5LnNjcm9sbExlZnQpLAoJCQkJCU1hdGgubWF4KGRvYy5kb2N1bWVu dEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Nyb2xsVG9wKSk7CgkJfQoK CQkvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdG9wIGFuZCBsZWZ0IHByb3BlcnRp ZXMKCQlyZXN1bHRzID0geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwoJfQoKCWZ1 bmN0aW9uIGJvcmRlcihlbGVtKSB7CgkJYWRkKCBqUXVlcnkuY3VyQ1NTKGVsZW0s ICJib3JkZXJMZWZ0V2lkdGgiLCB0cnVlKSwgalF1ZXJ5LmN1ckNTUyhlbGVtLCAi Ym9yZGVyVG9wV2lkdGgiLCB0cnVlKSApOwoJfQoKCWZ1bmN0aW9uIGFkZChsLCB0 KSB7CgkJbGVmdCArPSBwYXJzZUludChsLCAxMCkgfHwgMDsKCQl0b3AgKz0gcGFy c2VJbnQodCwgMTApIHx8IDA7Cgl9CgoJcmV0dXJuIHJlc3VsdHM7Cn07CgoKalF1 ZXJ5LmZuLmV4dGVuZCh7Cglwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJdmFyIGxl ZnQgPSAwLCB0b3AgPSAwLCByZXN1bHRzOwoKCQlpZiAoIHRoaXNbMF0gKSB7CgkJ CS8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CgkJCXZhciBvZmZzZXRQYXJlbnQg PSB0aGlzLm9mZnNldFBhcmVudCgpLAoKCQkJLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0 cwoJCQlvZmZzZXQgICAgICAgPSB0aGlzLm9mZnNldCgpLAoJCQlwYXJlbnRPZmZz ZXQgPSAvXmJvZHl8aHRtbCQvaS50ZXN0KG9mZnNldFBhcmVudFswXS50YWdOYW1l KSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7 CgoJCQkvLyBTdWJ0cmFjdCBlbGVtZW50IG1hcmdpbnMKCQkJLy8gbm90ZTogd2hl biBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5k IG1hcmdpbkxlZnQgCgkJCS8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2lu ZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCgkJCW9mZnNldC50b3Ag IC09IG51bSggdGhpcywgJ21hcmdpblRvcCcgKTsKCQkJb2Zmc2V0LmxlZnQgLT0g bnVtKCB0aGlzLCAnbWFyZ2luTGVmdCcgKTsKCgkJCS8vIEFkZCBvZmZzZXRQYXJl bnQgYm9yZGVycwoJCQlwYXJlbnRPZmZzZXQudG9wICArPSBudW0oIG9mZnNldFBh cmVudCwgJ2JvcmRlclRvcFdpZHRoJyApOwoJCQlwYXJlbnRPZmZzZXQubGVmdCAr PSBudW0oIG9mZnNldFBhcmVudCwgJ2JvcmRlckxlZnRXaWR0aCcgKTsKCgkJCS8v IFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0cwoJCQlyZXN1bHRzID0gewoJCQkJdG9w OiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wLAoJCQkJbGVmdDogb2Zm c2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdAoJCQl9OwoJCX0KCgkJcmV0dXJu IHJlc3VsdHM7Cgl9LAoKCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7CgkJdmFy IG9mZnNldFBhcmVudCA9IHRoaXNbMF0ub2Zmc2V0UGFyZW50OwoJCXdoaWxlICgg b2Zmc2V0UGFyZW50ICYmICghL15ib2R5fGh0bWwkL2kudGVzdChvZmZzZXRQYXJl bnQudGFnTmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsICdwb3NpdGlv bicpID09ICdzdGF0aWMnKSApCgkJCW9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu dC5vZmZzZXRQYXJlbnQ7CgkJcmV0dXJuIGpRdWVyeShvZmZzZXRQYXJlbnQpOwoJ fQp9KTsKCgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhv ZHMKalF1ZXJ5LmVhY2goIFsnTGVmdCcsICdUb3AnXSwgZnVuY3Rpb24oaSwgbmFt ZSkgewoJdmFyIG1ldGhvZCA9ICdzY3JvbGwnICsgbmFtZTsKCQoJalF1ZXJ5LmZu WyBtZXRob2QgXSA9IGZ1bmN0aW9uKHZhbCkgewoJCWlmICghdGhpc1swXSkgcmV0 dXJuOwoKCQlyZXR1cm4gdmFsICE9IHVuZGVmaW5lZCA/CgoJCQkvLyBTZXQgdGhl IHNjcm9sbCBvZmZzZXQKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdGhp cyA9PSB3aW5kb3cgfHwgdGhpcyA9PSBkb2N1bWVudCA/CgkJCQkJd2luZG93LnNj cm9sbFRvKAoJCQkJCQkhaSA/IHZhbCA6IGpRdWVyeSh3aW5kb3cpLnNjcm9sbExl ZnQoKSwKCQkJCQkJIGkgPyB2YWwgOiBqUXVlcnkod2luZG93KS5zY3JvbGxUb3Ao KQoJCQkJCSkgOgoJCQkJCXRoaXNbIG1ldGhvZCBdID0gdmFsOwoJCQl9KSA6CgoJ CQkvLyBSZXR1cm4gdGhlIHNjcm9sbCBvZmZzZXQKCQkJdGhpc1swXSA9PSB3aW5k b3cgfHwgdGhpc1swXSA9PSBkb2N1bWVudCA/CgkJCQlzZWxmWyBpID8gJ3BhZ2VZ T2Zmc2V0JyA6ICdwYWdlWE9mZnNldCcgXSB8fAoJCQkJCWpRdWVyeS5ib3hNb2Rl bCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIHx8CgkJCQkJ ZG9jdW1lbnQuYm9keVsgbWV0aG9kIF0gOgoJCQkJdGhpc1swXVsgbWV0aG9kIF07 Cgl9Owp9KTsKLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBvdXRl ckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCmpRdWVyeS5lYWNoKFsgIkhl aWdodCIsICJXaWR0aCIgXSwgZnVuY3Rpb24oaSwgbmFtZSl7CgoJdmFyIHRsID0g aSA/ICJMZWZ0IiAgOiAiVG9wIiwgIC8vIHRvcCBvciBsZWZ0CgkJYnIgPSBpID8g IlJpZ2h0IiA6ICJCb3R0b20iOyAvLyBib3R0b20gb3IgcmlnaHQKCgkvLyBpbm5l ckhlaWdodCBhbmQgaW5uZXJXaWR0aAoJalF1ZXJ5LmZuWyJpbm5lciIgKyBuYW1l XSA9IGZ1bmN0aW9uKCl7CgkJcmV0dXJuIHRoaXNbIG5hbWUudG9Mb3dlckNhc2Uo KSBdKCkgKwoJCQludW0odGhpcywgInBhZGRpbmciICsgdGwpICsKCQkJbnVtKHRo aXMsICJwYWRkaW5nIiArIGJyKTsKCX07CgoJLy8gb3V0ZXJIZWlnaHQgYW5kIG91 dGVyV2lkdGgKCWpRdWVyeS5mblsib3V0ZXIiICsgbmFtZV0gPSBmdW5jdGlvbiht YXJnaW4pIHsKCQlyZXR1cm4gdGhpc1siaW5uZXIiICsgbmFtZV0oKSArCgkJCW51 bSh0aGlzLCAiYm9yZGVyIiArIHRsICsgIldpZHRoIikgKwoJCQludW0odGhpcywg ImJvcmRlciIgKyBiciArICJXaWR0aCIpICsKCQkJKG1hcmdpbiA/CgkJCQludW0o dGhpcywgIm1hcmdpbiIgKyB0bCkgKyBudW0odGhpcywgIm1hcmdpbiIgKyBicikg OiAwKTsKCX07Cgp9KTt9KSgpOwo= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=tooltip.js Content-Type: application/javascript; charset=iso-8859-15; name=tooltip.js Content-Location: http://www.ine.es/menuapp/js/tooltip.js Content-Transfer-Encoding: Base64 LyoNCm9ubW91c2VvdXQ9ImhpZGVUb29sdGlwKCkiIA0Kb25tb3VzZW92ZXI9J3No b3dUb29sdGlwKGV2ZW50LCJ0ZXh0byBtb3N0cmFyIik7cmV0dXJuIGZhbHNlJw0K Ki8NCg0KdmFyIGRodG1sZ29vZGllc190b29sdGlwID0gZmFsc2U7DQp2YXIgZGh0 bWxnb29kaWVzX3Rvb2x0aXBTaGFkb3cgPSBmYWxzZTsNCnZhciBkaHRtbGdvb2Rp ZXNfc2hhZG93U2l6ZSA9IDQ7DQp2YXIgZGh0bWxnb29kaWVzX3Rvb2x0aXBNYXhX aWR0aCA9IDMwMDsNCnZhciBkaHRtbGdvb2RpZXNfdG9vbHRpcE1pbldpZHRoID0g MTAwOw0KdmFyIGRodG1sZ29vZGllc19pZnJhbWUgPSBmYWxzZTsNCnZhciBkaHRt bGdvb2RpZXNfbWFyZ2VuX2N1cnNvcj0xMDsNCnZhciBjbG9zZT10cnVlOw0KDQp2 YXIgdG9vbHRpcF9pc19tc2llID0gKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP ZignTVNJRScpPj0wICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignb3Bl cmEnKT09LTEgJiYgZG9jdW1lbnQuYWxsKT90cnVlOmZhbHNlOw0KDQp2YXIgZW5j aW1hPWZhbHNlOw0KDQp2YXIgY2VsZGEgPSIiOw0KDQpmdW5jdGlvbiBzaG93VG9v bHRpcERhdGEoZSx0b29sdGlwVHh0LGhlYWRlcnMpew0KCXZhciBoZWFkZXJzQXJy YXk9aGVhZGVycy5zcGxpdCgiICIpOw0KDQoJdmFyIHRleHRvPSIiOw0KCWZvciAo aT0wO2k8aGVhZGVyc0FycmF5Lmxlbmd0aDtpKyspew0KCQlpZiAoaT09MCkgdGV4 dG8rPWV2YWwoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2hlYWRlcnNBcnJh eVtpXSsiJykuYXhpcyIpOw0KCQllbHNlIHRleHRvKz0iID4gIitldmFsKCJkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgnIitoZWFkZXJzQXJyYXlbaV0rIicpLmF4aXMi KTsNCgl9DQoJdGV4dG89IjxiPiIrdGV4dG8rIjxiPjxicj48YnI+IjsNCgljbG9z ZT1mYWxzZTsNCgl3aW5kb3cuc3RhdHVzPXRleHRvOw0KCXNob3dUb29sdGlwKGUs dGV4dG8rdG9vbHRpcFR4dCk7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlt Z0Nsb3NlIikuZm9jdXMoKTsNCn0NCg0KDQpmdW5jdGlvbiBzaG93VG9vbHRpcENl cnJhcihlLHRvb2x0aXBUeHQpew0KCWNsb3NlPWZhbHNlOw0KCXNob3dUb29sdGlw KGUsdG9vbHRpcFR4dCk7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZ0Ns b3NlIikuZm9jdXMoKTsNCn0NCg0KZnVuY3Rpb24gc2hvd1Rvb2x0aXAoZSx0b29s dGlwVHh0KQ0Kew0KCQ0KICAgICAgICB2YXIgYm9keVdpZHRoID0gTWF0aC5tYXgo ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQuY2xpZW50V2lkdGgpIC0gMjA7DQoNCiAgICAgICAgaWYoIWRodG1sZ29vZGll c190b29sdGlwKXsNCiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRp cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOw0KDQogICAgICAgICAg ICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXAuaWQgPSAnZGh0bWxnb29kaWVzX3Rv b2x0aXAnOw0KICAgICAgICAgICAgICAgIGRodG1sZ29vZGllc190b29sdGlwU2hh ZG93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7DQogICAgICAgICAg ICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXBTaGFkb3cuaWQgPSAnZGh0bWxnb29k aWVzX3Rvb2x0aXBTaGFkb3cnOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQu Ym9keS5hcHBlbmRDaGlsZChkaHRtbGdvb2RpZXNfdG9vbHRpcCk7DQogICAgICAg ICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaHRtbGdvb2RpZXNf dG9vbHRpcFNoYWRvdyk7DQoNCiAgICAgICAgICAgICAgICBpZih0b29sdGlwX2lz X21zaWUpew0KICAgICAgICAgICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lm cmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0lGUkFNRScpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lmcmFtZS5mcmFtZWJvcmRl cj0nNSc7DQogICAgICAgICAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZy YW1lLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI0ZGRkZGRic7DQogICAgICAgICAg ICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZyYW1lLnNyYyA9ICcjJzsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGRodG1sZ29vZGllc19pZnJhbWUuc3R5bGUu ekluZGV4ID0gMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGh0bWxnb29k aWVzX2lmcmFtZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQogICAgICAg ICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRodG1s Z29vZGllc19pZnJhbWUpOw0KICAgICAgICAgICAgICAgIH0NCgkJCQlkaHRtbGdv b2RpZXNfdG9vbHRpcC5vbm1vdXNlb3ZlciAgPSBmdW5jdGlvbigpe3Bhc29FbmNp bWEoKX07DQoJCQlpZiAoY2xvc2Upew0KCQkJCWRodG1sZ29vZGllc190b29sdGlw Lm9ubW91c2VvdXQgID0gZnVuY3Rpb24oKXtvY3VsdGFyVG9vbHRpcCgpfTsJDQoJ CQl9DQogICAgICAgIH0NCg0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5z dHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIGRodG1sZ29vZGllc190b29s dGlwU2hhZG93LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICAgICAgaWYodG9v bHRpcF9pc19tc2llKWRodG1sZ29vZGllc19pZnJhbWUuc3R5bGUuZGlzcGxheT0n YmxvY2snOw0KDQogICAgICAgIHZhciBzdCA9IE1hdGgubWF4KGRvY3VtZW50LmJv ZHkuc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3Ap Ow0KICAgICAgICBpZihuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCku aW5kZXhPZignc2FmYXJpJyk+PTApc3Q9MDsNCg0KICAgICAgICB2YXIgbGVmdFBv cyA9IGUuY2xpZW50WCArIGRodG1sZ29vZGllc19tYXJnZW5fY3Vyc29yOw0KDQoJ CWlmIChib2R5V2lkdGgtbGVmdFBvczxkaHRtbGdvb2RpZXNfdG9vbHRpcE1heFdp ZHRoKQ0KCQkJbGVmdFBvcz1ib2R5V2lkdGgtZGh0bWxnb29kaWVzX3Rvb2x0aXBN YXhXaWR0aDsNCg0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5zdHlsZS53 aWR0aCA9IG51bGw7CS8vIFJlc2V0IHN0eWxlIHdpZHRoIGlmIGl0J3Mgc2V0DQog ICAgICAgIGlmICghY2xvc2Upew0KICAgICAgICAJaW1nY2VycmFyPSI8ZGl2IGlk PSdkaHRtbGdvb2RpZXNfdG9vbHRpcENsb3NlJz48YSB0aXRsZT0nQ2VycmFyJyBp ZD0naW1nQ2xvc2UnIGhyZWY9J2phdmFzY3JpcHQ6aGlkZVRvb2x0aXAoKTsnPjxp bWcgYWx0PSdDZXJyYXInIHNyYz0nIitITV9NZW51X0RpcisiL2ltZy9jZXJyYXIu Z2lmJz48L2E+PC9kaXY+Ig0KICAgICAgICAJdG9vbHRpcFR4dD1pbWdjZXJyYXIr dG9vbHRpcFR4dDsNCiAgICAgICAgfSAgICAgICAgDQogICAgICAgIGRodG1sZ29v ZGllc190b29sdGlwLmlubmVySFRNTCA9IHRvb2x0aXBUeHQ7DQoNCiAgICAgICAg ZGh0bWxnb29kaWVzX3Rvb2x0aXAuc3R5bGUubGVmdCA9IChsZWZ0UG9zICsgZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpICsncHgnOw0KICAgICAg ICBkaHRtbGdvb2RpZXNfdG9vbHRpcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBk aHRtbGdvb2RpZXNfbWFyZ2VuX2N1cnNvciArIHN0ICsgJ3B4JzsNCg0KDQogICAg ICAgIGRodG1sZ29vZGllc190b29sdGlwU2hhZG93LnN0eWxlLmxlZnQgPSAgKGxl ZnRQb3MgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkgKyAn cHgnOw0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcFNoYWRvdy5zdHlsZS50 b3AgPSBlLmNsaWVudFkgKyBkaHRtbGdvb2RpZXNfbWFyZ2VuX2N1cnNvciArIHN0 ICsgZGh0bWxnb29kaWVzX3NoYWRvd1NpemUgKyAncHgnOw0KDQogICAgICAvKiBp ZihkaHRtbGdvb2RpZXNfdG9vbHRpcC5vZmZzZXRXaWR0aD5kaHRtbGdvb2RpZXNf dG9vbHRpcE1heFdpZHRoKXsJLyogRXhjZWVkaW5nIG1heCB3aWR0aCBvZiB0b29s dGlwID8gKi8NCiAgICAgICAvKiAgICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXAu c3R5bGUud2lkdGggPSBkaHRtbGdvb2RpZXNfdG9vbHRpcE1heFdpZHRoICsgJ3B4 JzsNCiAgICAgICAgfSovDQogDQoJCSB2YXIgdG9vbHRpcFdpZHRoID0gZGh0bWxn b29kaWVzX3Rvb2x0aXBNYXhXaWR0aDsNCiAvLyAgICAgICB2YXIgdG9vbHRpcFdp ZHRoID0gZGh0bWxnb29kaWVzX3Rvb2x0aXAub2Zmc2V0V2lkdGg7DQogIC8vICAg ICAgaWYodG9vbHRpcFdpZHRoPGRodG1sZ29vZGllc190b29sdGlwTWluV2lkdGgp dG9vbHRpcFdpZHRoID0gZGh0bWxnb29kaWVzX3Rvb2x0aXBNaW5XaWR0aDsNCg0K DQogICAgICAgIGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLndpZHRoID0gdG9v bHRpcFdpZHRoICsgJ3B4JzsNCiAgICAgICAgZGh0bWxnb29kaWVzX3Rvb2x0aXBT aGFkb3cuc3R5bGUud2lkdGggPSBkaHRtbGdvb2RpZXNfdG9vbHRpcC5vZmZzZXRX aWR0aCArICdweCc7DQogICAgICAgIGRodG1sZ29vZGllc190b29sdGlwU2hhZG93 LnN0eWxlLmhlaWdodCA9IGRodG1sZ29vZGllc190b29sdGlwLm9mZnNldEhlaWdo dCArICdweCc7DQoNCiAgICAgICBpZigobGVmdFBvcyArIHRvb2x0aXBXaWR0aCk+ Ym9keVdpZHRoKXsNCiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRp cC5zdHlsZS5sZWZ0ID0gKGRodG1sZ29vZGllc190b29sdGlwU2hhZG93LnN0eWxl LmxlZnQucmVwbGFjZSgncHgnLCcnKSAtICgobGVmdFBvcyArIHRvb2x0aXBXaWR0 aCktYm9keVdpZHRoKSkgKyAncHgnOw0KICAgICAgICAgICAgICAgIGRodG1sZ29v ZGllc190b29sdGlwU2hhZG93LnN0eWxlLmxlZnQgPSAoZGh0bWxnb29kaWVzX3Rv b2x0aXBTaGFkb3cuc3R5bGUubGVmdC5yZXBsYWNlKCdweCcsJycpIC0gKChsZWZ0 UG9zICsgdG9vbHRpcFdpZHRoKS1ib2R5V2lkdGgpICsgZGh0bWxnb29kaWVzX3No YWRvd1NpemUpICsgJ3B4JzsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKHRvb2x0 aXBfaXNfbXNpZSl7DQogICAgICAgICAgICAgICAgZGh0bWxnb29kaWVzX2lmcmFt ZS5zdHlsZS5sZWZ0ID0gZGh0bWxnb29kaWVzX3Rvb2x0aXAuc3R5bGUubGVmdDsN CiAgICAgICAgICAgICAgICBkaHRtbGdvb2RpZXNfaWZyYW1lLnN0eWxlLnRvcCA9 IGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLnRvcDsNCiAgICAgICAgICAgICAg ICBkaHRtbGdvb2RpZXNfaWZyYW1lLnN0eWxlLndpZHRoID0gZGh0bWxnb29kaWVz X3Rvb2x0aXAub2Zmc2V0V2lkdGggKyAncHgnOw0KICAgICAgICAgICAgICAgIGRo dG1sZ29vZGllc19pZnJhbWUuc3R5bGUuaGVpZ2h0ID0gZGh0bWxnb29kaWVzX3Rv b2x0aXAub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsNCg0KICAgICAgICB9DQoNCn0NCg0K ZnVuY3Rpb24gc2hvd1Rvb2x0aXBDZXJyYXIoZSx0b29sdGlwVHh0KXsNCgljbG9z ZT1mYWxzZTsNCglzaG93VG9vbHRpcChlLHRvb2x0aXBUeHQpOw0KCWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCJpbWdDbG9zZSIpLmZvY3VzKCk7DQp9DQoNCg0KZnVu Y3Rpb24gb2N1bHRhclRvb2x0aXAoZSkgew0KICAgZW5jaW1hPWZhbHNlOw0KICAg c2V0VGltZW91dCgnaGlkZVRvb2x0aXAoKScsMTAwMCk7DQp9DQoNCmZ1bmN0aW9u IHBhc29FbmNpbWEoZSkgew0KZW5jaW1hPXRydWU7DQp9DQoNCmZ1bmN0aW9uIGhp ZGVUb29sdGlwKCkNCnsNCglpZigoIWVuY2ltYSkgfHwgKCFjbG9zZSkpewkJDQog ICAgICAgIGRodG1sZ29vZGllc190b29sdGlwLnN0eWxlLmRpc3BsYXk9J25vbmUn Ow0KICAgICAgICBkaHRtbGdvb2RpZXNfdG9vbHRpcFNoYWRvdy5zdHlsZS5kaXNw bGF5PSdub25lJzsNCiAgICAgICAgaWYodG9vbHRpcF9pc19tc2llKWRodG1sZ29v ZGllc19pZnJhbWUuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQoJfQ0KfQ0KDQovL0Vz IHVzYWRhIHBhcmEgYXF1ZWxsb3MgdG9vbHRpcCBxdWUgZGViZXJpYW4gZXNwZXJh ciANCi8vdW4gdGllbXBvIHBvciBzaSBlbCB1c3VhcmlvIGRlc2VhIHBvbmVyc2Ug ZW5jaW1hIGRlIA0KLy9lbCBwb3IgZWwgaGVjaG8gZGUgcXVlIHNlIGhheWEgaW5j bHVpZG9hbCBndW5hIGVubGFjZSANCi8vdSBvcGVyYXRpdmEgZGVudHJvIGRlbCB0 b29sdGlwDQpmdW5jdGlvbiBoaWRlV2FpdFRvb2x0aXAoKXsNCiAgIHNldFRpbWVv dXQoJ2hpZGVUb29sdGlwKCknLDEwMDApOw0KfQ0KDQoNCg== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=thickbox.js Content-Type: application/javascript; charset=iso-8859-15; name=thickbox.js Content-Location: http://www.ine.es/menuapp/js/thickbox.js Content-Transfer-Encoding: Base64 LyoNCiAqIFRoaWNrYm94IDMuMSAtIE9uZSBCb3ggVG8gUnVsZSBUaGVtIEFsbC4N CiAqIEJ5IENvZHkgTGluZGxleSAoaHR0cDovL3d3dy5jb2R5bGluZGxleS5jb20p DQogKiBDb3B5cmlnaHQgKGMpIDIwMDcgY29keSBsaW5kbGV5DQogKiBMaWNlbnNl ZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5v cmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KDQoJICANCnZhciB0Yl9w YXRoVG9JbWFnZSA9ICIvbWVudS9pbWcvbG9hZGluZ0FuaW1hdGlvbi5naWYiOw0K dmFyIHRwX3BhdGhUb0ltYWdlY2xvc2U9Ii9tZW51L2ltZy9jZXJyYXIuZ2lmIjsN Cg0KLyohISEhISEhISEhISEhISEhISBlZGl0IGJlbG93IHRoaXMgbGluZSBhdCB5 b3VyIG93biByaXNrICEhISEhISEhISEhISEhISEhISEhISEhKi8NCg0KLy9vbiBw YWdlIGxvYWQgY2FsbCB0Yl9pbml0DQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlv bigpeyAgDQoJaWYgKFN0cmluZyhvdGhldGhpY2tib3gpLmxlbmd0aD09MCkgDQoJ CXRiX2luaXQoJ2EudGhpY2tib3gsIGFyZWEudGhpY2tib3gsIGlucHV0LnRoaWNr Ym94Jyk7Ly9wYXNzIHdoZXJlIHRvIGFwcGx5IHRoaWNrYm94DQoJZWxzZSB0Yl9p bml0KCdhLnRoaWNrYm94LCBhcmVhLnRoaWNrYm94LCBpbnB1dC50aGlja2JveCwn ICsgb3RoZXRoaWNrYm94KTsvL3Bhc3Mgd2hlcmUgdG8gYXBwbHkgdGhpY2tib3gN CglpbWdMb2FkZXIgPSBuZXcgSW1hZ2UoKTsvLyBwcmVsb2FkIGltYWdlDQoJaW1n TG9hZGVyLnNyYyA9IHRiX3BhdGhUb0ltYWdlOw0KfSk7DQoNCi8vYWRkIHRoaWNr Ym94IHRvIGhyZWYgJiBhcmVhIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGNsYXNzIG9m IC50aGlja2JveA0KZnVuY3Rpb24gdGJfaW5pdChkb21DaHVuayl7DQoJJChkb21D aHVuaykuY2xpY2soZnVuY3Rpb24oKXsNCgl2YXIgdCA9IHRoaXMudGl0bGUgfHwg dGhpcy5uYW1lIHx8IG51bGw7DQoJdmFyIGEgPSB0aGlzLmhyZWYgfHwgdGhpcy5h bHQ7DQoJdmFyIGcgPSB0aGlzLnJlbCB8fCBmYWxzZTsNCgl0Yl9zaG93KHQsYSxn KTsNCgl0aGlzLmJsdXIoKTsNCglyZXR1cm4gZmFsc2U7DQoJfSk7DQp9DQoNCmZ1 bmN0aW9uIHRiX3Nob3coY2FwdGlvbiwgdXJsLCBpbWFnZUdyb3VwKSB7Ly9mdW5j dGlvbiBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSB0aGlja2JveCBs aW5rDQoNCgl0cnkgew0KCQlpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUu bWF4SGVpZ2h0ID09PSAidW5kZWZpbmVkIikgey8vaWYgSUUgNg0KCQkJJCgiYm9k eSIsImh0bWwiKS5jc3Moe2hlaWdodDogIjEwMCUiLCB3aWR0aDogIjEwMCUifSk7 DQoJCQkkKCJodG1sIikuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpOw0KCQkJaWYg KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUQl9IaWRlU2VsZWN0IikgPT09IG51 bGwpIHsvL2lmcmFtZSB0byBoaWRlIHNlbGVjdCBlbGVtZW50cyBpbiBpZTYNCgkJ CQkkKCJib2R5IikuYXBwZW5kKCI8aWZyYW1lIGlkPSdUQl9IaWRlU2VsZWN0Jz48 L2lmcmFtZT48ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93 aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJf cmVtb3ZlKTsNCgkJCX0NCgkJfWVsc2V7Ly9hbGwgb3RoZXJzDQoJCQlpZihkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgiVEJfb3ZlcmxheSIpID09PSBudWxsKXsNCgkJ CQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48 ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5 IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfQ0KCQkNCgkJaWYodGJfZGV0 ZWN0TWFjWEZGKCkpew0KCQkJJCgiI1RCX292ZXJsYXkiKS5hZGRDbGFzcygiVEJf b3ZlcmxheU1hY0ZGQkdIYWNrIik7Ly91c2UgcG5nIG92ZXJsYXkgc28gaGlkZSBm bGFzaA0KCQl9ZWxzZXsNCgkJCSQoIiNUQl9vdmVybGF5IikuYWRkQ2xhc3MoIlRC X292ZXJsYXlCRyIpOy8vdXNlIGJhY2tncm91bmQgYW5kIG9wYWNpdHkNCgkJfQ0K CQkNCgkJaWYoY2FwdGlvbj09PW51bGwpe2NhcHRpb249IiI7fQ0KCQkkKCJib2R5 IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9sb2FkJz48aW1nIHNyYz0nIitpbWdMb2Fk ZXIuc3JjKyInIC8+PC9kaXY+Iik7Ly9hZGQgbG9hZGVyIHRvIHRoZSBwYWdlDQoJ CSQoJyNUQl9sb2FkJykuc2hvdygpOy8vc2hvdyBsb2FkZXINCgkJDQoJCXZhciBi YXNlVVJMOw0KCSAgIGlmKHVybC5pbmRleE9mKCI/IikhPT0tMSl7IC8vZmYgdGhl cmUgaXMgYSBxdWVyeSBzdHJpbmcgaW52b2x2ZWQNCgkJCWJhc2VVUkwgPSB1cmwu c3Vic3RyKDAsIHVybC5pbmRleE9mKCI/IikpOw0KCSAgIH1lbHNleyANCgkgICAJ CWJhc2VVUkwgPSB1cmw7DQoJICAgfQ0KCSAgIA0KCSAgIHZhciB1cmxTdHJpbmcg PSAvXC5qcGckfFwuanBlZyR8XC5wbmckfFwuZ2lmJHxcLmJtcCQvOw0KCSAgIHZh ciB1cmxUeXBlID0gYmFzZVVSTC50b0xvd2VyQ2FzZSgpLm1hdGNoKHVybFN0cmlu Zyk7DQoNCgkJaWYodXJsVHlwZSA9PSAnLmpwZycgfHwgdXJsVHlwZSA9PSAnLmpw ZWcnIHx8IHVybFR5cGUgPT0gJy5wbmcnIHx8IHVybFR5cGUgPT0gJy5naWYnIHx8 IHVybFR5cGUgPT0gJy5ibXAnKXsvL2NvZGUgdG8gc2hvdyBpbWFnZXMNCgkJCQkN CgkJCVRCX1ByZXZDYXB0aW9uID0gIiI7DQoJCQlUQl9QcmV2VVJMID0gIiI7DQoJ CQlUQl9QcmV2SFRNTCA9ICIiOw0KCQkJVEJfTmV4dENhcHRpb24gPSAiIjsNCgkJ CVRCX05leHRVUkwgPSAiIjsNCgkJCVRCX05leHRIVE1MID0gIiI7DQoJCQlUQl9p bWFnZUNvdW50ID0gIiI7DQoJCQlUQl9Gb3VuZFVSTCA9IGZhbHNlOw0KCQkJaWYo aW1hZ2VHcm91cCl7DQoJCQkJVEJfVGVtcEFycmF5ID0gJCgiYVtAcmVsPSIraW1h Z2VHcm91cCsiXSIpLmdldCgpOw0KCQkJCWZvciAoVEJfQ291bnRlciA9IDA7ICgo VEJfQ291bnRlciA8IFRCX1RlbXBBcnJheS5sZW5ndGgpICYmIChUQl9OZXh0SFRN TCA9PT0gIiIpKTsgVEJfQ291bnRlcisrKSB7DQoJCQkJCXZhciB1cmxUeXBlVGVt cCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmLnRvTG93ZXJDYXNlKCku bWF0Y2godXJsU3RyaW5nKTsNCgkJCQkJCWlmICghKFRCX1RlbXBBcnJheVtUQl9D b3VudGVyXS5ocmVmID09IHVybCkpIHsJCQkJCQkNCgkJCQkJCQlpZiAoVEJfRm91 bmRVUkwpIHsNCgkJCQkJCQkJVEJfTmV4dENhcHRpb24gPSBUQl9UZW1wQXJyYXlb VEJfQ291bnRlcl0udGl0bGU7DQoJCQkJCQkJCVRCX05leHRVUkwgPSBUQl9UZW1w QXJyYXlbVEJfQ291bnRlcl0uaHJlZjsNCgkJCQkJCQkJVEJfTmV4dEhUTUwgPSAi PHNwYW4gaWQ9J1RCX25leHQnPiZuYnNwOyZuYnNwOzxhIGhyZWY9JyMnPk5leHQg Jmd0OzwvYT48L3NwYW4+IjsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQlUQl9Q cmV2Q2FwdGlvbiA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS50aXRsZTsNCgkJ CQkJCQkJVEJfUHJldlVSTCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVm Ow0KCQkJCQkJCQlUQl9QcmV2SFRNTCA9ICI8c3BhbiBpZD0nVEJfcHJldic+Jm5i c3A7Jm5ic3A7PGEgaHJlZj0nIyc+Jmx0OyBQcmV2PC9hPjwvc3Bhbj4iOw0KCQkJ CQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJVEJfRm91bmRVUkwgPSB0cnVl Ow0KCQkJCQkJCVRCX2ltYWdlQ291bnQgPSAiSW1hZ2UgIiArIChUQl9Db3VudGVy ICsgMSkgKyIgb2YgIisgKFRCX1RlbXBBcnJheS5sZW5ndGgpOwkJCQkJCQkJCQkJ DQoJCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpbWdQcmVsb2FkZXIgPSBuZXcg SW1hZ2UoKTsNCgkJCWltZ1ByZWxvYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpewkJ DQoJCQlpbWdQcmVsb2FkZXIub25sb2FkID0gbnVsbDsNCgkJCQkNCgkJCS8vIFJl c2l6aW5nIGxhcmdlIGltYWdlcyAtIG9yZ2luYWwgYnkgQ2hyaXN0aWFuIE1vbnRv eWEgZWRpdGVkIGJ5IG1lLg0KCQkJdmFyIHBhZ2VzaXplID0gdGJfZ2V0UGFnZVNp emUoKTsNCgkJCXZhciB4ID0gcGFnZXNpemVbMF0gLSAxNTA7DQoJCQl2YXIgeSA9 IHBhZ2VzaXplWzFdIC0gMTUwOw0KCQkJdmFyIGltYWdlV2lkdGggPSBpbWdQcmVs b2FkZXIud2lkdGg7DQoJCQl2YXIgaW1hZ2VIZWlnaHQgPSBpbWdQcmVsb2FkZXIu aGVpZ2h0Ow0KCQkJaWYgKGltYWdlV2lkdGggPiB4KSB7DQoJCQkJaW1hZ2VIZWln aHQgPSBpbWFnZUhlaWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCWltYWdl V2lkdGggPSB4OyANCgkJCQlpZiAoaW1hZ2VIZWlnaHQgPiB5KSB7IA0KCQkJCQlp bWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5IC8gaW1hZ2VIZWlnaHQpOyANCgkJ CQkJaW1hZ2VIZWlnaHQgPSB5OyANCgkJCQl9DQoJCQl9IGVsc2UgaWYgKGltYWdl SGVpZ2h0ID4geSkgeyANCgkJCQlpbWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5 IC8gaW1hZ2VIZWlnaHQpOyANCgkJCQlpbWFnZUhlaWdodCA9IHk7IA0KCQkJCWlm IChpbWFnZVdpZHRoID4geCkgeyANCgkJCQkJaW1hZ2VIZWlnaHQgPSBpbWFnZUhl aWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCQlpbWFnZVdpZHRoID0geDsN CgkJCQl9DQoJCQl9DQoJCQkvLyBFbmQgUmVzaXppbmcNCgkJCQ0KCQkJVEJfV0lE VEggPSBpbWFnZVdpZHRoICsgMzA7DQoJCQlUQl9IRUlHSFQgPSBpbWFnZUhlaWdo dCArIDYwOw0KCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGEgaHJlZj0nJyBp ZD0nVEJfSW1hZ2VPZmYnIHRpdGxlPSdDbG9zZSc+PGltZyBpZD0nVEJfSW1hZ2Un IHNyYz0nIit1cmwrIicgd2lkdGg9JyIraW1hZ2VXaWR0aCsiJyBoZWlnaHQ9JyIr aW1hZ2VIZWlnaHQrIicgYWx0PSciK2NhcHRpb24rIicvPjwvYT4iICsgIjxkaXYg aWQ9J1RCX2NhcHRpb24nPiIrY2FwdGlvbisiPGRpdiBpZD0nVEJfc2Vjb25kTGlu ZSc+IiArIFRCX2ltYWdlQ291bnQgKyBUQl9QcmV2SFRNTCArIFRCX05leHRIVE1M ICsgIjwvZGl2PjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlV2luZG93Jz48YSBocmVm PScjJyBpZD0nVEJfY2xvc2VXaW5kb3dCdXR0b24nIHRpdGxlPSdDbG9zZSc+PGlt ZyBzcmM9JyIgKyAgdHBfcGF0aFRvSW1hZ2VjbG9zZSArICInIGNsYXNzPSdzaW5i b3JkZSc+PC9hPjwvZGl2PiIpOyAJCQ0KCQkJDQoJCQkkKCIjVEJfY2xvc2VXaW5k b3dCdXR0b24iKS5jbGljayh0Yl9yZW1vdmUpOw0KCQkJDQoJCQlpZiAoIShUQl9Q cmV2SFRNTCA9PT0gIiIpKSB7DQoJCQkJZnVuY3Rpb24gZ29QcmV2KCl7DQoJCQkJ CWlmKCQoZG9jdW1lbnQpLnVuYmluZCgiY2xpY2siLGdvUHJldikpeyQoZG9jdW1l bnQpLnVuYmluZCgiY2xpY2siLGdvUHJldik7fQ0KCQkJCQkkKCIjVEJfd2luZG93 IikucmVtb3ZlKCk7DQoJCQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RC X3dpbmRvdyc+PC9kaXY+Iik7DQoJCQkJCXRiX3Nob3coVEJfUHJldkNhcHRpb24s IFRCX1ByZXZVUkwsIGltYWdlR3JvdXApOw0KCQkJCQlyZXR1cm4gZmFsc2U7CQ0K CQkJCX0NCgkJCQkkKCIjVEJfcHJldiIpLmNsaWNrKGdvUHJldik7DQoJCQl9DQoJ CQkNCgkJCWlmICghKFRCX05leHRIVE1MID09PSAiIikpIHsJCQ0KCQkJCWZ1bmN0 aW9uIGdvTmV4dCgpew0KCQkJCQkkKCIjVEJfd2luZG93IikucmVtb3ZlKCk7DQoJ CQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX3dpbmRvdyc+PC9kaXY+ Iik7DQoJCQkJCXRiX3Nob3coVEJfTmV4dENhcHRpb24sIFRCX05leHRVUkwsIGlt YWdlR3JvdXApOwkJCQkNCgkJCQkJcmV0dXJuIGZhbHNlOwkNCgkJCQl9DQoJCQkJ JCgiI1RCX25leHQiKS5jbGljayhnb05leHQpOw0KCQkJCQ0KCQkJfQ0KDQoJCQlk b2N1bWVudC5vbmtleWRvd24gPSBmdW5jdGlvbihlKXsgCQ0KCQkJCWlmIChlID09 IG51bGwpIHsgLy8gaWUNCgkJCQkJa2V5Y29kZSA9IGV2ZW50LmtleUNvZGU7DQoJ CQkJfSBlbHNlIHsgLy8gbW96aWxsYQ0KCQkJCQlrZXljb2RlID0gZS53aGljaDsN CgkJCQl9DQoJCQkJaWYoa2V5Y29kZSA9PSAyNyl7IC8vIGNsb3NlDQoJCQkJCXRi X3JlbW92ZSgpOw0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE5MCl7IC8vIGRp c3BsYXkgcHJldmlvdXMgaW1hZ2UNCgkJCQkJaWYoIShUQl9OZXh0SFRNTCA9PSAi Iikpew0KCQkJCQkJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJCQkJCQlnb05l eHQoKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE4OCl7IC8v IGRpc3BsYXkgbmV4dCBpbWFnZQ0KCQkJCQlpZighKFRCX1ByZXZIVE1MID09ICIi KSl7DQoJCQkJCQlkb2N1bWVudC5vbmtleWRvd24gPSAiIjsNCgkJCQkJCWdvUHJl digpOw0KCQkJCQl9DQoJCQkJfQkNCgkJCX07DQoJCQkNCgkJCXRiX3Bvc2l0aW9u KCk7DQoJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJJCgiI1RCX0ltYWdl T2ZmIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCSQoIiNUQl93aW5kb3ciKS5jc3Mo e2Rpc3BsYXk6ImJsb2NrIn0pOyAvL2ZvciBzYWZhcmkgdXNpbmcgY3NzIGluc3Rl YWQgb2Ygc2hvdw0KCQkJfTsNCgkJCQ0KCQkJaW1nUHJlbG9hZGVyLnNyYyA9IHVy bDsNCgkJfWVsc2V7Ly9jb2RlIHRvIHNob3cgaHRtbA0KCQkJDQoJCQl2YXIgcXVl cnlTdHJpbmcgPSB1cmwucmVwbGFjZSgvXlteXD9dK1w/Py8sJycpOw0KCQkJdmFy IHBhcmFtcyA9IHRiX3BhcnNlUXVlcnkoIHF1ZXJ5U3RyaW5nICk7DQoNCgkJCVRC X1dJRFRIID0gKHBhcmFtc1snd2lkdGgnXSoxKSArIDMwIHx8IDYzMDsgLy9kZWZh dWx0cyB0byA2MzAgaWYgbm8gcGFyYW1hdGVycyB3ZXJlIGFkZGVkIHRvIFVSTA0K CQkJVEJfSEVJR0hUID0gKHBhcmFtc1snaGVpZ2h0J10qMSkgKyA0MCB8fCA0NDA7 IC8vZGVmYXVsdHMgdG8gNDQwIGlmIG5vIHBhcmFtYXRlcnMgd2VyZSBhZGRlZCB0 byBVUkwNCgkJCWFqYXhDb250ZW50VyA9IFRCX1dJRFRIIC0gMzA7DQoJCQlhamF4 Q29udGVudEggPSBUQl9IRUlHSFQgLSA0NTsNCgkJCQ0KCQkJaWYodXJsLmluZGV4 T2YoJ1RCX2lmcmFtZScpICE9IC0xKXsvLyBlaXRoZXIgaWZyYW1lIG9yIGFqYXgg d2luZG93CQkNCgkJCQkJdXJsTm9RdWVyeSA9IHVybC5zcGxpdCgnVEJfJyk7DQoJ CQkJCSQoIiNUQl9pZnJhbWVDb250ZW50IikucmVtb3ZlKCk7DQoJCQkJCWlmKHBh cmFtc1snbW9kYWwnXSAhPSAidHJ1ZSIpey8vaWZyYW1lIG5vIG1vZGFsDQoJCQkJ CQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl90aXRsZSc+PGRp diBpZD0nVEJfYWpheFdpbmRvd1RpdGxlJz4iK2NhcHRpb24rIjwvZGl2PjxkaXYg aWQ9J1RCX2Nsb3NlQWpheFdpbmRvdyc+PGEgaHJlZj0nIycgaWQ9J1RCX2Nsb3Nl V2luZG93QnV0dG9uJyB0aXRsZT0nQ2xvc2UnPjxpbWcgc3JjPSciICsgIHRwX3Bh dGhUb0ltYWdlY2xvc2UgKyAiJyBjbGFzcz0nc2luYm9yZGUnPjwvYT48L2Rpdj48 L2Rpdj48aWZyYW1lIGZyYW1lYm9yZGVyPScwJyBoc3BhY2U9JzAnIHNyYz0nIit1 cmxOb1F1ZXJ5WzBdKyInIGlkPSdUQl9pZnJhbWVDb250ZW50JyBuYW1lPSdUQl9p ZnJhbWVDb250ZW50IitNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTAwMCkrIicg b25sb2FkPSd0Yl9zaG93SWZyYW1lKCknIHN0eWxlPSd3aWR0aDoiKyhhamF4Q29u dGVudFcgKyAyOSkrInB4O2hlaWdodDoiKyhhamF4Q29udGVudEggKyAxNykrInB4 OycgPiA8L2lmcmFtZT4iKTsNCgkJCQkJfWVsc2V7Ly9pZnJhbWUgbW9kYWwNCgkJ CQkJJCgiI1RCX292ZXJsYXkiKS51bmJpbmQoKTsNCgkJCQkJCSQoIiNUQl93aW5k b3ciKS5hcHBlbmQoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIGhzcGFjZT0nMCcg c3JjPSciK3VybE5vUXVlcnlbMF0rIicgaWQ9J1RCX2lmcmFtZUNvbnRlbnQnIG5h bWU9J1RCX2lmcmFtZUNvbnRlbnQiK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSox MDAwKSsiJyBvbmxvYWQ9J3RiX3Nob3dJZnJhbWUoKScgc3R5bGU9J3dpZHRoOiIr KGFqYXhDb250ZW50VyArIDI5KSsicHg7aGVpZ2h0OiIrKGFqYXhDb250ZW50SCAr IDE3KSsicHg7Jz4gPC9pZnJhbWU+Iik7DQoJCQkJCX0NCgkJCX1lbHNley8vIG5v dCBhbiBpZnJhbWUsIGFqYXgNCgkJCQkJaWYoJCgiI1RCX3dpbmRvdyIpLmNzcygi ZGlzcGxheSIpICE9ICJibG9jayIpew0KCQkJCQkJaWYocGFyYW1zWydtb2RhbCdd ICE9ICJ0cnVlIil7Ly9hamF4IG5vIG1vZGFsDQoJCQkJCQkkKCIjVEJfd2luZG93 IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl90aXRsZSc+PGRpdiBpZD0nVEJfYWpheFdp bmRvd1RpdGxlJz4iK2NhcHRpb24rIjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlQWph eFdpbmRvdyc+PGEgaHJlZj0nIycgaWQ9J1RCX2Nsb3NlV2luZG93QnV0dG9uJz48 aW1nIHNyYz0nIiArICB0cF9wYXRoVG9JbWFnZWNsb3NlICsgIicgY2xhc3M9J3Np bmJvcmRlJz48L2E+PC9kaXY+PC9kaXY+PGRpdiBpZD0nVEJfYWpheENvbnRlbnQn IHN0eWxlPSd3aWR0aDoiK2FqYXhDb250ZW50VysicHg7aGVpZ2h0OiIrYWpheENv bnRlbnRIKyJweCc+PC9kaXY+Iik7DQoJCQkJCQl9ZWxzZXsvL2FqYXggbW9kYWwN CgkJCQkJCSQoIiNUQl9vdmVybGF5IikudW5iaW5kKCk7DQoJCQkJCQkkKCIjVEJf d2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9hamF4Q29udGVudCcgY2xhc3M9 J1RCX21vZGFsJyBzdHlsZT0nd2lkdGg6IithamF4Q29udGVudFcrInB4O2hlaWdo dDoiK2FqYXhDb250ZW50SCsicHg7Jz48L2Rpdj4iKTsJDQoJCQkJCQl9DQoJCQkJ CX1lbHNley8vdGhpcyBtZWFucyB0aGUgd2luZG93IGlzIGFscmVhZHkgdXAsIHdl IGFyZSBqdXN0IGxvYWRpbmcgbmV3IGNvbnRlbnQgdmlhIGFqYXgNCgkJCQkJCSQo IiNUQl9hamF4Q29udGVudCIpWzBdLnN0eWxlLndpZHRoID0gYWpheENvbnRlbnRX ICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250ZW50IilbMF0uc3R5bGUuaGVp Z2h0ID0gYWpheENvbnRlbnRIICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250 ZW50IilbMF0uc2Nyb2xsVG9wID0gMDsNCgkJCQkJCSQoIiNUQl9hamF4V2luZG93 VGl0bGUiKS5odG1sKGNhcHRpb24pOw0KCQkJCQl9DQoJCQl9DQoJCQkJCQ0KCQkJ JCgiI1RCX2Nsb3NlV2luZG93QnV0dG9uIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJ CQ0KCQkJCWlmKHVybC5pbmRleE9mKCdUQl9pbmxpbmUnKSAhPSAtMSl7CQ0KCQkJ CQkkKCIjVEJfYWpheENvbnRlbnQiKS5hcHBlbmQoJCgnIycgKyBwYXJhbXNbJ2lu bGluZUlkJ10pLmNoaWxkcmVuKCkpOw0KCQkJCQkkKCIjVEJfd2luZG93IikudW5s b2FkKGZ1bmN0aW9uICgpIHsNCgkJCQkJCSQoJyMnICsgcGFyYW1zWydpbmxpbmVJ ZCddKS5hcHBlbmQoICQoIiNUQl9hamF4Q29udGVudCIpLmNoaWxkcmVuKCkgKTsg Ly8gbW92ZSBlbGVtZW50cyBiYWNrIHdoZW4geW91J3JlIGZpbmlzaGVkDQoJCQkJ CX0pOw0KCQkJCQl0Yl9wb3NpdGlvbigpOw0KCQkJCQkkKCIjVEJfbG9hZCIpLnJl bW92ZSgpOw0KCQkJCQkkKCIjVEJfd2luZG93IikuY3NzKHtkaXNwbGF5OiJibG9j ayJ9KTsgDQoJCQkJfWVsc2UgaWYodXJsLmluZGV4T2YoJ1RCX2lmcmFtZScpICE9 IC0xKXsNCgkJCQkJdGJfcG9zaXRpb24oKTsNCgkJCQkJaWYoJC5icm93c2VyLnNh ZmFyaSl7Ly9zYWZhcmkgbmVlZHMgaGVscCBiZWNhdXNlIGl0IHdpbGwgbm90IGZp cmUgaWZyYW1lIG9ubG9hZA0KCQkJCQkJJCgiI1RCX2xvYWQiKS5yZW1vdmUoKTsN CgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOw0K CQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJCSQoIiNUQl9hamF4Q29udGVudCIpLmxv YWQodXJsICs9ICImcmFuZG9tPSIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpLGZ1 bmN0aW9uKCl7Ly90byBkbyBhIHBvc3QgY2hhbmdlIHRoaXMgbG9hZCBtZXRob2QN CgkJCQkJCXRiX3Bvc2l0aW9uKCk7DQoJCQkJCQkkKCIjVEJfbG9hZCIpLnJlbW92 ZSgpOw0KCQkJCQkJdGJfaW5pdCgiI1RCX2FqYXhDb250ZW50IGEudGhpY2tib3gi KTsNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0p Ow0KCQkJCQl9KTsNCgkJCQl9DQoJCQkNCgkJfQ0KDQoJCWlmKCFwYXJhbXNbJ21v ZGFsJ10pew0KCQkJZG9jdW1lbnQub25rZXl1cCA9IGZ1bmN0aW9uKGUpeyAJDQoJ CQkJaWYgKGUgPT0gbnVsbCkgeyAvLyBpZQ0KCQkJCQlrZXljb2RlID0gZXZlbnQu a2V5Q29kZTsNCgkJCQl9IGVsc2UgeyAvLyBtb3ppbGxhDQoJCQkJCWtleWNvZGUg PSBlLndoaWNoOw0KCQkJCX0NCgkJCQlpZihrZXljb2RlID09IDI3KXsgLy8gY2xv c2UNCgkJCQkJdGJfcmVtb3ZlKCk7DQoJCQkJfQkNCgkJCX07DQoJCX0NCgkJDQoJ fSBjYXRjaChlKSB7DQoJCS8vbm90aGluZyBoZXJlDQoJfQ0KfQ0KDQovL2hlbHBl ciBmdW5jdGlvbnMgYmVsb3cNCmZ1bmN0aW9uIHRiX3Nob3dJZnJhbWUoKXsNCgkk KCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rp c3BsYXk6ImJsb2NrIn0pOw0KfQ0KDQpmdW5jdGlvbiB0Yl9yZW1vdmUoKSB7DQog CSQoIiNUQl9pbWFnZU9mZiIpLnVuYmluZCgiY2xpY2siKTsNCgkkKCIjVEJfY2xv c2VXaW5kb3dCdXR0b24iKS51bmJpbmQoImNsaWNrIik7DQoJJCgiI1RCX3dpbmRv dyIpLmZhZGVPdXQoImZhc3QiLGZ1bmN0aW9uKCl7JCgnI1RCX3dpbmRvdywjVEJf b3ZlcmxheSwjVEJfSGlkZVNlbGVjdCcpLnRyaWdnZXIoInVubG9hZCIpLnVuYmlu ZCgpLnJlbW92ZSgpO30pOw0KCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJaWYg KHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlLm1heEhlaWdodCA9PSAidW5kZWZp bmVkIikgey8vaWYgSUUgNg0KCQkkKCJib2R5IiwiaHRtbCIpLmNzcyh7aGVpZ2h0 OiAiYXV0byIsIHdpZHRoOiAiYXV0byJ9KTsNCgkJJCgiaHRtbCIpLmNzcygib3Zl cmZsb3ciLCIiKTsNCgl9DQoJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJZG9j dW1lbnQub25rZXl1cCA9ICIiOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rp b24gdGJfcG9zaXRpb24oKSB7DQokKCIjVEJfd2luZG93IikuY3NzKHttYXJnaW5M ZWZ0OiAnLScgKyBwYXJzZUludCgoVEJfV0lEVEggLyAyKSwxMCkgKyAncHgnLCB3 aWR0aDogVEJfV0lEVEggKyAncHgnfSk7DQoJaWYgKCAhKGpRdWVyeS5icm93c2Vy Lm1zaWUgJiYgalF1ZXJ5LmJyb3dzZXIudmVyc2lvbiA8IDcpKSB7IC8vIHRha2Ug YXdheSBJRTYNCgkJJCgiI1RCX3dpbmRvdyIpLmNzcyh7bWFyZ2luVG9wOiAnLScg KyBwYXJzZUludCgoVEJfSEVJR0hUIC8gMiksMTApICsgJ3B4J30pOw0KCX0NCn0N Cg0KZnVuY3Rpb24gdGJfcGFyc2VRdWVyeSAoIHF1ZXJ5ICkgew0KICAgdmFyIFBh cmFtcyA9IHt9Ow0KICAgaWYgKCAhIHF1ZXJ5ICkge3JldHVybiBQYXJhbXM7fS8v IHJldHVybiBlbXB0eSBvYmplY3QNCiAgIHZhciBQYWlycyA9IHF1ZXJ5LnNwbGl0 KC9bOyZdLyk7DQogICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBQYWlycy5sZW5ndGg7 IGkrKyApIHsNCiAgICAgIHZhciBLZXlWYWwgPSBQYWlyc1tpXS5zcGxpdCgnPScp Ow0KICAgICAgaWYgKCAhIEtleVZhbCB8fCBLZXlWYWwubGVuZ3RoICE9IDIgKSB7 Y29udGludWU7fQ0KICAgICAgdmFyIGtleSA9IHVuZXNjYXBlKCBLZXlWYWxbMF0g KTsNCiAgICAgIHZhciB2YWwgPSB1bmVzY2FwZSggS2V5VmFsWzFdICk7DQogICAg ICB2YWwgPSB2YWwucmVwbGFjZSgvXCsvZywgJyAnKTsNCiAgICAgIFBhcmFtc1tr ZXldID0gdmFsOw0KICAgfQ0KICAgcmV0dXJuIFBhcmFtczsNCn0NCg0KZnVuY3Rp b24gdGJfZ2V0UGFnZVNpemUoKXsNCgl2YXIgZGUgPSBkb2N1bWVudC5kb2N1bWVu dEVsZW1lbnQ7DQoJdmFyIHcgPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBzZWxmLmlu bmVyV2lkdGggfHwgKGRlJiZkZS5jbGllbnRXaWR0aCkgfHwgZG9jdW1lbnQuYm9k eS5jbGllbnRXaWR0aDsNCgl2YXIgaCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBz ZWxmLmlubmVySGVpZ2h0IHx8IChkZSYmZGUuY2xpZW50SGVpZ2h0KSB8fCBkb2N1 bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCglhcnJheVBhZ2VTaXplID0gW3csaF07 DQoJcmV0dXJuIGFycmF5UGFnZVNpemU7DQp9DQoNCmZ1bmN0aW9uIHRiX2RldGVj dE1hY1hGRigpIHsNCiAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdl bnQudG9Mb3dlckNhc2UoKTsNCiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMn KSAhPSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZignZmlyZWZveCcpIT0tMSkgew0K ICAgIHJldHVybiB0cnVlOw0KICB9DQp9DQoNCg0K ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=swfobject.js Content-Type: application/javascript; charset=iso-8859-15; name=swfobject.js Content-Location: http://www.ine.es/menuapp/js/swfobject.js Content-Transfer-Encoding: Base64 LyoqDQogKiBTV0ZPYmplY3QgdjEuNTogRmxhc2ggUGxheWVyIGRldGVjdGlvbiBh bmQgZW1iZWQgLSBodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tL3N3Zm9iamVjdC8N CiAqDQogKiBTV0ZPYmplY3QgaXMgKGMpIDIwMDcgR2VvZmYgU3RlYXJucyBhbmQg aXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlOg0KICogaHR0cDovL3d3 dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHANCiAqDQog Ki8NCmlmKHR5cGVvZiBkZWNvbmNlcHQgPT0gInVuZGVmaW5lZCIpIHZhciBkZWNv bmNlcHQgPSBuZXcgT2JqZWN0KCk7DQppZih0eXBlb2YgZGVjb25jZXB0LnV0aWwg PT0gInVuZGVmaW5lZCIpIGRlY29uY2VwdC51dGlsID0gbmV3IE9iamVjdCgpOw0K aWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsID09ICJ1bmRlZmluZWQi KSBkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbCA9IG5ldyBPYmplY3QoKTsNCmRlY29u Y2VwdC5TV0ZPYmplY3QgPSBmdW5jdGlvbihzd2YsIGlkLCB3LCBoLCB2ZXIsIGMs IHF1YWxpdHksIHhpUmVkaXJlY3RVcmwsIHJlZGlyZWN0VXJsLCBkZXRlY3RLZXkp IHsNCglpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7IHJldHVybjsgfQ0K CXRoaXMuREVURUNUX0tFWSA9IGRldGVjdEtleSA/IGRldGVjdEtleSA6ICdkZXRl Y3RmbGFzaCc7DQoJdGhpcy5za2lwRGV0ZWN0ID0gZGVjb25jZXB0LnV0aWwuZ2V0 UmVxdWVzdFBhcmFtZXRlcih0aGlzLkRFVEVDVF9LRVkpOw0KCXRoaXMucGFyYW1z ID0gbmV3IE9iamVjdCgpOw0KCXRoaXMudmFyaWFibGVzID0gbmV3IE9iamVjdCgp Ow0KCXRoaXMuYXR0cmlidXRlcyA9IG5ldyBBcnJheSgpOw0KCWlmKHN3ZikgeyB0 aGlzLnNldEF0dHJpYnV0ZSgnc3dmJywgc3dmKTsgfQ0KCWlmKGlkKSB7IHRoaXMu c2V0QXR0cmlidXRlKCdpZCcsIGlkKTsgfQ0KCWlmKHcpIHsgdGhpcy5zZXRBdHRy aWJ1dGUoJ3dpZHRoJywgdyk7IH0NCglpZihoKSB7IHRoaXMuc2V0QXR0cmlidXRl KCdoZWlnaHQnLCBoKTsgfQ0KCWlmKHZlcikgeyB0aGlzLnNldEF0dHJpYnV0ZSgn dmVyc2lvbicsIG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih2ZXIudG9TdHJp bmcoKS5zcGxpdCgiLiIpKSk7IH0NCgl0aGlzLmluc3RhbGxlZFZlciA9IGRlY29u Y2VwdC5TV0ZPYmplY3RVdGlsLmdldFBsYXllclZlcnNpb24oKTsNCglpZiAoIXdp bmRvdy5vcGVyYSAmJiBkb2N1bWVudC5hbGwgJiYgdGhpcy5pbnN0YWxsZWRWZXIu bWFqb3IgPiA3KSB7DQoJCS8vIG9ubHkgYWRkIHRoZSBvbnVubG9hZCBjbGVhbnVw IGlmIHRoZSBGbGFzaCBQbGF5ZXIgdmVyc2lvbiBzdXBwb3J0cyBFeHRlcm5hbCBJ bnRlcmZhY2UgYW5kIHdlIGFyZSBpbiBJRQ0KCQlkZWNvbmNlcHQuU1dGT2JqZWN0 LmRvUHJlcFVubG9hZCA9IHRydWU7DQoJfQ0KCWlmKGMpIHsgdGhpcy5hZGRQYXJh bSgnYmdjb2xvcicsIGMpOyB9DQoJdmFyIHEgPSBxdWFsaXR5ID8gcXVhbGl0eSA6 ICdoaWdoJzsNCgl0aGlzLmFkZFBhcmFtKCdxdWFsaXR5JywgcSk7DQoJdGhpcy5z ZXRBdHRyaWJ1dGUoJ3VzZUV4cHJlc3NJbnN0YWxsJywgZmFsc2UpOw0KCXRoaXMu c2V0QXR0cmlidXRlKCdkb0V4cHJlc3NJbnN0YWxsJywgZmFsc2UpOw0KCXZhciB4 aXIgPSAoeGlSZWRpcmVjdFVybCkgPyB4aVJlZGlyZWN0VXJsIDogd2luZG93Lmxv Y2F0aW9uOw0KCXRoaXMuc2V0QXR0cmlidXRlKCd4aVJlZGlyZWN0VXJsJywgeGly KTsNCgl0aGlzLnNldEF0dHJpYnV0ZSgncmVkaXJlY3RVcmwnLCAnJyk7DQoJaWYo cmVkaXJlY3RVcmwpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JlZGlyZWN0VXJsJywg cmVkaXJlY3RVcmwpOyB9DQp9DQpkZWNvbmNlcHQuU1dGT2JqZWN0LnByb3RvdHlw ZSA9IHsNCgl1c2VFeHByZXNzSW5zdGFsbDogZnVuY3Rpb24ocGF0aCkgew0KCQl0 aGlzLnhpU1dGUGF0aCA9ICFwYXRoID8gImV4cHJlc3NpbnN0YWxsLnN3ZiIgOiBw YXRoOw0KCQl0aGlzLnNldEF0dHJpYnV0ZSgndXNlRXhwcmVzc0luc3RhbGwnLCB0 cnVlKTsNCgl9LA0KCXNldEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUp ew0KCQl0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTsNCgl9LA0KCWdldEF0 dHJpYnV0ZTogZnVuY3Rpb24obmFtZSl7DQoJCXJldHVybiB0aGlzLmF0dHJpYnV0 ZXNbbmFtZV07DQoJfSwNCglhZGRQYXJhbTogZnVuY3Rpb24obmFtZSwgdmFsdWUp ew0KCQl0aGlzLnBhcmFtc1tuYW1lXSA9IHZhbHVlOw0KCX0sDQoJZ2V0UGFyYW1z OiBmdW5jdGlvbigpew0KCQlyZXR1cm4gdGhpcy5wYXJhbXM7DQoJfSwNCglhZGRW YXJpYWJsZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpew0KCQl0aGlzLnZhcmlhYmxl c1tuYW1lXSA9IHZhbHVlOw0KCX0sDQoJZ2V0VmFyaWFibGU6IGZ1bmN0aW9uKG5h bWUpew0KCQlyZXR1cm4gdGhpcy52YXJpYWJsZXNbbmFtZV07DQoJfSwNCglnZXRW YXJpYWJsZXM6IGZ1bmN0aW9uKCl7DQoJCXJldHVybiB0aGlzLnZhcmlhYmxlczsN Cgl9LA0KCWdldFZhcmlhYmxlUGFpcnM6IGZ1bmN0aW9uKCl7DQoJCXZhciB2YXJp YWJsZVBhaXJzID0gbmV3IEFycmF5KCk7DQoJCXZhciBrZXk7DQoJCXZhciB2YXJp YWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpOw0KCQlmb3Ioa2V5IGluIHZhcmlh Ymxlcyl7DQoJCQl2YXJpYWJsZVBhaXJzW3ZhcmlhYmxlUGFpcnMubGVuZ3RoXSA9 IGtleSArIj0iKyB2YXJpYWJsZXNba2V5XTsNCgkJfQ0KCQlyZXR1cm4gdmFyaWFi bGVQYWlyczsNCgl9LA0KCWdldFNXRkhUTUw6IGZ1bmN0aW9uKCkgew0KCQl2YXIg c3dmTm9kZSA9ICIiOw0KCQlpZiAobmF2aWdhdG9yLnBsdWdpbnMgJiYgbmF2aWdh dG9yLm1pbWVUeXBlcyAmJiBuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCkgeyAv LyBuZXRzY2FwZSBwbHVnaW4gYXJjaGl0ZWN0dXJlDQoJCQlpZiAodGhpcy5nZXRB dHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSkgew0KCQkJCXRoaXMuYWRkVmFy aWFibGUoIk1NcGxheWVyVHlwZSIsICJQbHVnSW4iKTsNCgkJCQl0aGlzLnNldEF0 dHJpYnV0ZSgnc3dmJywgdGhpcy54aVNXRlBhdGgpOw0KCQkJfQ0KCQkJc3dmTm9k ZSA9ICc8ZW1iZWQgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gi IHNyYz0iJysgdGhpcy5nZXRBdHRyaWJ1dGUoJ3N3ZicpICsnIiB3aWR0aD0iJysg dGhpcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykgKyciIGhlaWdodD0iJysgdGhpcy5n ZXRBdHRyaWJ1dGUoJ2hlaWdodCcpICsnIiBzdHlsZT0iJysgdGhpcy5nZXRBdHRy aWJ1dGUoJ3N0eWxlJykgKyciJzsNCgkJCXN3Zk5vZGUgKz0gJyBpZD0iJysgdGhp cy5nZXRBdHRyaWJ1dGUoJ2lkJykgKyciIG5hbWU9IicrIHRoaXMuZ2V0QXR0cmli dXRlKCdpZCcpICsnIiAnOw0KCQkJdmFyIHBhcmFtcyA9IHRoaXMuZ2V0UGFyYW1z KCk7DQoJCQkgZm9yKHZhciBrZXkgaW4gcGFyYW1zKXsgc3dmTm9kZSArPSBba2V5 XSArJz0iJysgcGFyYW1zW2tleV0gKyciICc7IH0NCgkJCXZhciBwYWlycyA9IHRo aXMuZ2V0VmFyaWFibGVQYWlycygpLmpvaW4oIiYiKTsNCgkJCSBpZiAocGFpcnMu bGVuZ3RoID4gMCl7IHN3Zk5vZGUgKz0gJ2ZsYXNodmFycz0iJysgcGFpcnMgKyci JzsgfQ0KCQkJc3dmTm9kZSArPSAnLz4nOw0KCQl9IGVsc2UgeyAvLyBQQyBJRQ0K CQkJaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikpIHsN CgkJCQl0aGlzLmFkZFZhcmlhYmxlKCJNTXBsYXllclR5cGUiLCAiQWN0aXZlWCIp Ow0KCQkJCXRoaXMuc2V0QXR0cmlidXRlKCdzd2YnLCB0aGlzLnhpU1dGUGF0aCk7 DQoJCQl9DQoJCQlzd2ZOb2RlID0gJzxvYmplY3QgaWQ9IicrIHRoaXMuZ2V0QXR0 cmlidXRlKCdpZCcpICsnIiBjbGFzc2lkPSJjbHNpZDpEMjdDREI2RS1BRTZELTEx Y2YtOTZCOC00NDQ1NTM1NDAwMDAiIHdpZHRoPSInKyB0aGlzLmdldEF0dHJpYnV0 ZSgnd2lkdGgnKSArJyIgaGVpZ2h0PSInKyB0aGlzLmdldEF0dHJpYnV0ZSgnaGVp Z2h0JykgKyciIHN0eWxlPSInKyB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSAr JyI+JzsNCgkJCXN3Zk5vZGUgKz0gJzxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9 IicrIHRoaXMuZ2V0QXR0cmlidXRlKCdzd2YnKSArJyIgLz4nOw0KCQkJdmFyIHBh cmFtcyA9IHRoaXMuZ2V0UGFyYW1zKCk7DQoJCQlmb3IodmFyIGtleSBpbiBwYXJh bXMpIHsNCgkJCSBzd2ZOb2RlICs9ICc8cGFyYW0gbmFtZT0iJysga2V5ICsnIiB2 YWx1ZT0iJysgcGFyYW1zW2tleV0gKyciIC8+JzsNCgkJCX0NCgkJCXZhciBwYWly cyA9IHRoaXMuZ2V0VmFyaWFibGVQYWlycygpLmpvaW4oIiYiKTsNCgkJCWlmKHBh aXJzLmxlbmd0aCA+IDApIHtzd2ZOb2RlICs9ICc8cGFyYW0gbmFtZT0iZmxhc2h2 YXJzIiB2YWx1ZT0iJysgcGFpcnMgKyciIC8+Jzt9DQoJCQlzd2ZOb2RlICs9ICI8 L29iamVjdD4iOw0KCQl9DQoJCXJldHVybiBzd2ZOb2RlOw0KCX0sDQoJd3JpdGU6 IGZ1bmN0aW9uKGVsZW1lbnRJZCl7DQoJCWlmKHRoaXMuZ2V0QXR0cmlidXRlKCd1 c2VFeHByZXNzSW5zdGFsbCcpKSB7DQoJCQkvLyBjaGVjayB0byBzZWUgaWYgd2Ug bmVlZCB0byBkbyBhbiBleHByZXNzIGluc3RhbGwNCgkJCXZhciBleHByZXNzSW5z dGFsbFJlcVZlciA9IG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbihbNiwwLDY1 XSk7DQoJCQlpZiAodGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQoZXhw cmVzc0luc3RhbGxSZXFWZXIpICYmICF0aGlzLmluc3RhbGxlZFZlci52ZXJzaW9u SXNWYWxpZCh0aGlzLmdldEF0dHJpYnV0ZSgndmVyc2lvbicpKSkgew0KCQkJCXRo aXMuc2V0QXR0cmlidXRlKCdkb0V4cHJlc3NJbnN0YWxsJywgdHJ1ZSk7DQoJCQkJ dGhpcy5hZGRWYXJpYWJsZSgiTU1yZWRpcmVjdFVSTCIsIGVzY2FwZSh0aGlzLmdl dEF0dHJpYnV0ZSgneGlSZWRpcmVjdFVybCcpKSk7DQoJCQkJZG9jdW1lbnQudGl0 bGUgPSBkb2N1bWVudC50aXRsZS5zbGljZSgwLCA0NykgKyAiIC0gRmxhc2ggUGxh eWVyIEluc3RhbGxhdGlvbiI7DQoJCQkJdGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0 aXRsZSIsIGRvY3VtZW50LnRpdGxlKTsNCgkJCX0NCgkJfQ0KCQlpZih0aGlzLnNr aXBEZXRlY3QgfHwgdGhpcy5nZXRBdHRyaWJ1dGUoJ2RvRXhwcmVzc0luc3RhbGwn KSB8fCB0aGlzLmluc3RhbGxlZFZlci52ZXJzaW9uSXNWYWxpZCh0aGlzLmdldEF0 dHJpYnV0ZSgndmVyc2lvbicpKSl7DQoJCQl2YXIgbiA9ICh0eXBlb2YgZWxlbWVu dElkID09ICdzdHJpbmcnKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1l bnRJZCkgOiBlbGVtZW50SWQ7DQoJCQluLmlubmVySFRNTCA9IHRoaXMuZ2V0U1dG SFRNTCgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJaWYodGhpcy5n ZXRBdHRyaWJ1dGUoJ3JlZGlyZWN0VXJsJykgIT0gIiIpIHsNCgkJCQlkb2N1bWVu dC5sb2NhdGlvbi5yZXBsYWNlKHRoaXMuZ2V0QXR0cmlidXRlKCdyZWRpcmVjdFVy bCcpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0KDQovKiAt LS0tIGRldGVjdGlvbiBmdW5jdGlvbnMgLS0tLSAqLw0KZGVjb25jZXB0LlNXRk9i amVjdFV0aWwuZ2V0UGxheWVyVmVyc2lvbiA9IGZ1bmN0aW9uKCl7DQoJdmFyIFBs YXllclZlcnNpb24gPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oWzAsMCww XSk7DQoJaWYobmF2aWdhdG9yLnBsdWdpbnMgJiYgbmF2aWdhdG9yLm1pbWVUeXBl cy5sZW5ndGgpew0KCQl2YXIgeCA9IG5hdmlnYXRvci5wbHVnaW5zWyJTaG9ja3dh dmUgRmxhc2giXTsNCgkJaWYoeCAmJiB4LmRlc2NyaXB0aW9uKSB7DQoJCQlQbGF5 ZXJWZXJzaW9uID0gbmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKHguZGVzY3Jp cHRpb24ucmVwbGFjZSgvKFthLXpBLVpdfFxzKSsvLCAiIikucmVwbGFjZSgvKFxz K3J8XHMrYlswLTldKykvLCAiLiIpLnNwbGl0KCIuIikpOw0KCQl9DQoJfWVsc2Ug aWYgKG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5p bmRleE9mKCJXaW5kb3dzIENFIikgPj0gMCl7IC8vIGlmIFdpbmRvd3MgQ0UNCgkJ dmFyIGF4byA9IDE7DQoJCXZhciBjb3VudGVyID0gMzsNCgkJd2hpbGUoYXhvKSB7 DQoJCQl0cnkgew0KCQkJCWNvdW50ZXIrKzsNCgkJCQlheG8gPSBuZXcgQWN0aXZl WE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guIisgY291bnRl cik7DQovLwkJCQlkb2N1bWVudC53cml0ZSgicGxheWVyIHY6ICIrIGNvdW50ZXIp Ow0KCQkJCVBsYXllclZlcnNpb24gPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNp b24oW2NvdW50ZXIsMCwwXSk7DQoJCQl9IGNhdGNoIChlKSB7DQoJCQkJYXhvID0g bnVsbDsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7IC8vIFdpbiBJRSAobm9uIG1vYmls ZSkNCgkJLy8gZG8gbWlub3IgdmVyc2lvbiBsb29rdXAgaW4gSUUsIGJ1dCBhdm9p ZCBmcDYgY3Jhc2hpbmcgaXNzdWVzDQoJCS8vIHNlZSBodHRwOi8vYmxvZy5kZWNv bmNlcHQuY29tLzIwMDYvMDEvMTEvZ2V0dmFyaWFibGUtc2V0dmFyaWFibGUtY3Jh c2gtaW50ZXJuZXQtZXhwbG9yZXItZmxhc2gtNi8NCgkJdHJ5ew0KCQkJdmFyIGF4 byA9IG5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVG bGFzaC43Iik7DQoJCX1jYXRjaChlKXsNCgkJCXRyeSB7DQoJCQkJdmFyIGF4byA9 IG5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFz aC42Iik7DQoJCQkJUGxheWVyVmVyc2lvbiA9IG5ldyBkZWNvbmNlcHQuUGxheWVy VmVyc2lvbihbNiwwLDIxXSk7DQoJCQkJYXhvLkFsbG93U2NyaXB0QWNjZXNzID0g ImFsd2F5cyI7IC8vIGVycm9yIGlmIHBsYXllciB2ZXJzaW9uIDwgNi4wLjQ3ICh0 aGFua3MgdG8gTWljaGFlbCBXaWxsaWFtcyBAIEFkb2JlIGZvciB0aGlzIGNvZGUp DQoJCQl9IGNhdGNoKGUpIHsNCgkJCQlpZiAoUGxheWVyVmVyc2lvbi5tYWpvciA9 PSA2KSB7DQoJCQkJCXJldHVybiBQbGF5ZXJWZXJzaW9uOw0KCQkJCX0NCgkJCX0N CgkJCXRyeSB7DQoJCQkJYXhvID0gbmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2 ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIik7DQoJCQl9IGNhdGNoKGUpIHt9DQoJCX0N CgkJaWYgKGF4byAhPSBudWxsKSB7DQoJCQlQbGF5ZXJWZXJzaW9uID0gbmV3IGRl Y29uY2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24i KS5zcGxpdCgiICIpWzFdLnNwbGl0KCIsIikpOw0KCQl9DQoJfQ0KCXJldHVybiBQ bGF5ZXJWZXJzaW9uOw0KfQ0KZGVjb25jZXB0LlBsYXllclZlcnNpb24gPSBmdW5j dGlvbihhcnJWZXJzaW9uKXsNCgl0aGlzLm1ham9yID0gYXJyVmVyc2lvblswXSAh PSBudWxsID8gcGFyc2VJbnQoYXJyVmVyc2lvblswXSkgOiAwOw0KCXRoaXMubWlu b3IgPSBhcnJWZXJzaW9uWzFdICE9IG51bGwgPyBwYXJzZUludChhcnJWZXJzaW9u WzFdKSA6IDA7DQoJdGhpcy5yZXYgPSBhcnJWZXJzaW9uWzJdICE9IG51bGwgPyBw YXJzZUludChhcnJWZXJzaW9uWzJdKSA6IDA7DQp9DQpkZWNvbmNlcHQuUGxheWVy VmVyc2lvbi5wcm90b3R5cGUudmVyc2lvbklzVmFsaWQgPSBmdW5jdGlvbihmdil7 DQoJaWYodGhpcy5tYWpvciA8IGZ2Lm1ham9yKSByZXR1cm4gZmFsc2U7DQoJaWYo dGhpcy5tYWpvciA+IGZ2Lm1ham9yKSByZXR1cm4gdHJ1ZTsNCglpZih0aGlzLm1p bm9yIDwgZnYubWlub3IpIHJldHVybiBmYWxzZTsNCglpZih0aGlzLm1pbm9yID4g ZnYubWlub3IpIHJldHVybiB0cnVlOw0KCWlmKHRoaXMucmV2IDwgZnYucmV2KSBy ZXR1cm4gZmFsc2U7DQoJcmV0dXJuIHRydWU7DQp9DQovKiAtLS0tIGdldCB2YWx1 ZSBvZiBxdWVyeSBzdHJpbmcgcGFyYW0gLS0tLSAqLw0KZGVjb25jZXB0LnV0aWwg PSB7DQoJZ2V0UmVxdWVzdFBhcmFtZXRlcjogZnVuY3Rpb24ocGFyYW0pIHsNCgkJ dmFyIHEgPSBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggfHwgZG9jdW1lbnQubG9j YXRpb24uaGFzaDsNCgkJaWYgKHBhcmFtID09IG51bGwpIHsgcmV0dXJuIHE7IH0N CgkJaWYocSkgew0KCQkJdmFyIHBhaXJzID0gcS5zdWJzdHJpbmcoMSkuc3BsaXQo IiYiKTsNCgkJCWZvciAodmFyIGk9MDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7 DQoJCQkJaWYgKHBhaXJzW2ldLnN1YnN0cmluZygwLCBwYWlyc1tpXS5pbmRleE9m KCI9IikpID09IHBhcmFtKSB7DQoJCQkJCXJldHVybiBwYWlyc1tpXS5zdWJzdHJp bmcoKHBhaXJzW2ldLmluZGV4T2YoIj0iKSsxKSk7DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJCXJldHVybiAiIjsNCgl9DQp9DQovKiBmaXggZm9yIHZpZGVvIHN0cmVhbWlu ZyBidWcgKi8NCmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzID0g ZnVuY3Rpb24oKSB7DQoJdmFyIG9iamVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50 c0J5VGFnTmFtZSgiT0JKRUNUIik7DQoJZm9yICh2YXIgaSA9IG9iamVjdHMubGVu Z3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsNCgkJb2JqZWN0c1tpXS5zdHlsZS5kaXNw bGF5ID0gJ25vbmUnOw0KCQlmb3IgKHZhciB4IGluIG9iamVjdHNbaV0pIHsNCgkJ CWlmICh0eXBlb2Ygb2JqZWN0c1tpXVt4XSA9PSAnZnVuY3Rpb24nKSB7DQoJCQkJ b2JqZWN0c1tpXVt4XSA9IGZ1bmN0aW9uKCl7fTsNCgkJCX0NCgkJfQ0KCX0NCn0N Ci8vIGZpeGVzIGJ1ZyBpbiBzb21lIGZwOSB2ZXJzaW9ucyBzZWUgaHR0cDovL2Js b2cuZGVjb25jZXB0LmNvbS8yMDA2LzA3LzI4L3N3Zm9iamVjdC0xNDMtcmVsZWFz ZWQvDQppZiAoZGVjb25jZXB0LlNXRk9iamVjdC5kb1ByZXBVbmxvYWQpIHsNCglp ZiAoIWRlY29uY2VwdC51bmxvYWRTZXQpIHsNCgkJZGVjb25jZXB0LlNXRk9iamVj dFV0aWwucHJlcFVubG9hZCA9IGZ1bmN0aW9uKCkgew0KCQkJX19mbGFzaF91bmxv YWRIYW5kbGVyID0gZnVuY3Rpb24oKXt9Ow0KCQkJX19mbGFzaF9zYXZlZFVubG9h ZEhhbmRsZXIgPSBmdW5jdGlvbigpe307DQoJCQl3aW5kb3cuYXR0YWNoRXZlbnQo Im9udW5sb2FkIiwgZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuY2xlYW51cFNXRnMp Ow0KCQl9DQoJCXdpbmRvdy5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLCBk ZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkKTsNCgkJZGVjb25jZXB0 LnVubG9hZFNldCA9IHRydWU7DQoJfQ0KfQ0KLyogYWRkIGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkIGlmIG5lZWRlZCAobW9iaWxlIElFIDwgNSkgKi8NCmlmICghZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuYWxsKSB7IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGRvY3VtZW50 LmFsbFtpZF07IH19DQoNCi8qIGFkZCBzb21lIGFsaWFzZXMgZm9yIGVhc2Ugb2Yg dXNlL2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovDQp2YXIgZ2V0UXVlcnlQYXJh bVZhbHVlID0gZGVjb25jZXB0LnV0aWwuZ2V0UmVxdWVzdFBhcmFtZXRlcjsNCnZh ciBGbGFzaE9iamVjdCA9IGRlY29uY2VwdC5TV0ZPYmplY3Q7IC8vIGZvciBsZWdh Y3kgc3VwcG9ydA0KdmFyIFNXRk9iamVjdCA9IGRlY29uY2VwdC5TV0ZPYmplY3Q7 DQoNCg0KDQoNCg0KZnVuY3Rpb24gZ2V0Rmxhc2hNb3ZpZU9iamVjdChtb3ZpZU5h bWUpDQp7DQogIGlmICh3aW5kb3cuZG9jdW1lbnRbbW92aWVOYW1lXSkgDQogIHsN CiAgICAgIHJldHVybiB3aW5kb3cuZG9jdW1lbnRbbW92aWVOYW1lXTsNCiAgfQ0K ICBpZiAobmF2aWdhdG9yLmFwcE5hbWUuaW5kZXhPZigiTWljcm9zb2Z0IEludGVy bmV0Iik9PS0xKQ0KICB7DQogICAgaWYgKGRvY3VtZW50LmVtYmVkcyAmJiBkb2N1 bWVudC5lbWJlZHNbbW92aWVOYW1lXSkNCiAgICAgIHJldHVybiBkb2N1bWVudC5l bWJlZHNbbW92aWVOYW1lXTsgDQogIH0NCiAgZWxzZSAvLyBpZiAobmF2aWdhdG9y LmFwcE5hbWUuaW5kZXhPZigiTWljcm9zb2Z0IEludGVybmV0IikhPS0xKQ0KICB7 DQogICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vdmllTmFtZSk7 DQogIH0NCn0= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=general.js Content-Type: application/javascript; charset=iso-8859-15; name=general.js Content-Location: http://www.ine.es/menuapp/js/general.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gSXMgKCkNCnsgICAvLyBjb252ZXJ0IGFsbCBjaGFyYWN0ZXJzIHRv IGxvd2VyY2FzZSB0byBzaW1wbGlmeSB0ZXN0aW5nDQogICAgdmFyIGFndD1uYXZp Z2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7DQoNCiAgICAvLyAtLS0gQlJP V1NFUiBWRVJTSU9OIC0tLQ0KICAgIHRoaXMubWFqb3IgPSBwYXJzZUludChuYXZp Z2F0b3IuYXBwVmVyc2lvbik7DQogICAgdGhpcy5taW5vciA9IHBhcnNlRmxvYXQo bmF2aWdhdG9yLmFwcFZlcnNpb24pOw0KDQogICAgdGhpcy5uYXYgID0gKChhZ3Qu aW5kZXhPZignbW96aWxsYScpIT0tMSkgJiYgKChhZ3QuaW5kZXhPZignc3Bvb2Zl cicpPT0tMSkgJiYgKGFndC5pbmRleE9mKCdjb21wYXRpYmxlJykgPT0gLTEpKSk7 DQogICAgdGhpcy5uYXYyID0gKHRoaXMubmF2ICYmICh0aGlzLm1ham9yID09IDIp KTsNCiAgICB0aGlzLm5hdjMgPSAodGhpcy5uYXYgJiYgKHRoaXMubWFqb3IgPT0g MykpOw0KICAgIHRoaXMubmF2NCA9ICh0aGlzLm5hdiAmJiAodGhpcy5tYWpvciA9 PSA0KSk7DQoJdGhpcy5uYXY1ID0gKHRoaXMuYj09Im5zIiAmJiB0aGlzLnY9PTUp DQogDQoNCiAgICB0aGlzLmllICAgPSAoYWd0LmluZGV4T2YoIm1zaWUiKSAhPSAt MSk7DQogICAgdGhpcy5pZTMgID0gKHRoaXMuaWUgJiYgKHRoaXMubWFqb3IgPT0g MikpOw0KICAgIHRoaXMuaWU0ICA9ICh0aGlzLmllICYmICh0aGlzLm1ham9yID09 IDQpKTsNCiAgICB0aGlzLmllNSA9IChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4 T2YoJ01TSUUgNScpPjApOw0KDQogICAgdGhpcy5vcGVyYSA9IChhZ3QuaW5kZXhP Zigib3BlcmEiKSAhPSAtMSk7DQogICAgIA0KICAgIHRoaXMuTk4gPQl0aGlzLm5h diAmJiAodGhpcy5tYWpvciA+PSA0KTsNCiAgICB0aGlzLklFICA9IHRoaXMuaWUg ICYmICh0aGlzLm1ham9yID49IDQpOw0KCWlmICh0aGlzLmllNSkgdGhpcy52ID0g NQ0KICAgIHRoaXMubWluID0gKHRoaXMuTk58fHRoaXMuSUUpDQoNCn0NCmRvY3Vt ZW50LndyaXRlKCI8U0NSIiArICJJUFQgdHlwZT0ndGV4dCIgKyAiL2phdmEiICsg InNjciIgKyAiaXB0JyBTUkM9JyIgKyBITV9EaXJKcysgImdpbmhzaWhwLmpzJz48 XC9TQ1IiICsgIklQVD4iKTsNCnZhciBpcyA9IG5ldyBJcygpOw0KDQoNCmZ1bmN0 aW9uIGZpbmRPYmoobiwgZCkgeyANCiAgdmFyIHAsaSx4OyAgDQogIGlmKCFkKSBk PWRvY3VtZW50OyANCiAgaWYoKHA9bi5pbmRleE9mKCI/IikpPjAmJnBhcmVudC5m cmFtZXMubGVuZ3RoKSANCiAgew0KICAgIGQ9cGFyZW50LmZyYW1lc1tuLnN1YnN0 cmluZyhwKzEpXS5kb2N1bWVudDsgbj1uLnN1YnN0cmluZygwLHApO30NCiAgaWYo ISh4PWRbbl0pJiZkLmFsbCkgeD1kLmFsbFtuXTsgDQogIGZvciAoaT0wOyF4JiZp PGQuZm9ybXMubGVuZ3RoO2krKykgeD1kLmZvcm1zW2ldW25dOw0KICBmb3IoaT0w OyF4JiZkLmxheWVycyYmaTxkLmxheWVycy5sZW5ndGg7aSsrKSB4PWZpbmRPYmoo bixkLmxheWVyc1tpXS5kb2N1bWVudCk7IHJldHVybiB4Ow0KfQ0KaWYgKE1lbnVf VGl0dWxvRmF2b3JpdG9zPT1udWxsKQ0KCXZhciBNZW51X1RpdHVsb0Zhdm9yaXRv cz0iSU5FIjsNCgkgDQppZiAoTWVudV9VcmxGYXZvcml0b3M9PW51bGwpDQoJdmFy IE1lbnVfVXJsRmF2b3JpdG9zPSJodHRwOi8vd3d3LmluZS5lcyI7DQpmdW5jdGlv biBBZ3JlZ2FyRmF2b3JpdG9zKHRpdHVsbyx1cmwpew0KIHRpdGxlID10aXR1bG87 IA0KIHVybCA9IHVybDsNCiAgdHJ5ew0KCWlmICh3aW5kb3cuc2lkZWJhcikgeyAv LyBNb3ppbGxhIEZpcmVmb3ggQm9va21hcmsNCgkJd2luZG93LnNpZGViYXIuYWRk UGFuZWwodGl0bGUsIHVybCwiIik7DQoJfSBlbHNlIGlmKCB3aW5kb3cuZXh0ZXJu YWwgKSB7IC8vIElFIEZhdm9yaXRlDQoJCXdpbmRvdy5leHRlcm5hbC5BZGRGYXZv cml0ZSggdXJsLCB0aXRsZSk7IA0KCX0gZWxzZSBpZih3aW5kb3cub3BlcmEgJiYg d2luZG93LnByaW50KSB7IC8vIE9wZXJhIEhvdGxpc3QNCgkJcmV0dXJuIHRydWU7 IH0NCiAgfWNhdGNoKGUpIHsNCg0KICB9CQ0KfQ0KDQpmdW5jdGlvbiBNZW5zYWpl IChmaWNoZXJvLHNjcm9sbCxhbmNobyxhbHRvKSB7DQoNCiAgdmFyIHc9YW5jaG87 DQogIHZhciBoPWFsdG87DQogIHZhciB0PShzY3JlZW4uaGVpZ2h0LWgpLzINCiAg dmFyIGw9KHNjcmVlbi53aWR0aC13KS8yDQogIGlmIChzY3JvbGw9PTApew0KICAg IHByb3A9J3Rvb2xiYXI9bm8sbG9jYXRpb249bm8sZGlyZWN0b3JpZXM9bm8sc3Rh dHVzPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLHRv cD0nK3QrJyxsZWZ0PScrbCsnLHdpZHRoPScrdysnLGhlaWdodD0nK2gNCiAgICBt c2dXaW5kb3c9d2luZG93Lm9wZW4oZmljaGVybywnbGVnYWwnLHByb3ApDQogIH0g ZWxzZSB7DQogICAgcHJvcD0ndG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rv cmllcz1ubyxzdGF0dXM9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPXllcyxyZXNp emFibGU9eWVzLHRvcD0nK3QrJyxsZWZ0PScrbCsnLHdpZHRoPScrdysnLGhlaWdo dD0nK2gNCiAgICBtc2dXaW5kb3c9d2luZG93Lm9wZW4oZmljaGVybywnbGVnYWwn LHByb3ApDQogIH0NCg0KfQ0KDQpmdW5jdGlvbiBjaGFuZ2VCYWNrZ3JvdW5kQ29s b3Iob2JqLGNvbG9yKXsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmopLnN0 eWxlLmJhY2tncm91bmQ9Y29sb3I7DQp9DQoNCmZ1bmN0aW9uIGNoYW5nZUJhY2tn cm91bmRDb2xvck9iaihvYmosY29sb3Ipew0KCW9iai5zdHlsZS5iYWNrZ3JvdW5k PWNvbG9yOw0KfQ0KDQpmdW5jdGlvbiBjaGFuZ2VDb2xvcihvYmosY29sb3Ipew0K CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iaikuc3R5bGUuY29sb3I9Y29sb3I7 DQp9DQoNCmZ1bmN0aW9uIGNoYW5nZUNvbG9yT2JqKG9iaixjb2xvcil7DQoJb2Jq LnN0eWxlLmNvbG9yPWNvbG9yOw0KfQ0KDQovL05vcyBkZXZ1ZWx2ZSBsYSBwb3Np Y2lvbiBYWSBkZWwgc2Nyb2xsDQpmdW5jdGlvbiBnZXRTY3JvbGxYWSgpIHsNCiAg dmFyIHNjck9mWCA9IDAsIHNjck9mWSA9IDA7DQogIGlmKCB0eXBlb2YoIHdpbmRv dy5wYWdlWU9mZnNldCApID09ICdudW1iZXInICkgew0KICAgIC8vTmV0c2NhcGUg Y29tcGxpYW50DQogICAgc2NyT2ZZID0gd2luZG93LnBhZ2VZT2Zmc2V0Ow0KICAg IHNjck9mWCA9IHdpbmRvdy5wYWdlWE9mZnNldDsNCiAgfSBlbHNlIGlmKCBkb2N1 bWVudC5ib2R5ICYmICggZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IHx8IGRvY3Vt ZW50LmJvZHkuc2Nyb2xsVG9wICkgKSB7DQogICAgLy9ET00gY29tcGxpYW50DQog ICAgc2NyT2ZZID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7DQogICAgc2NyT2ZY ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KICB9IGVsc2UgaWYoIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudCAmJiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3AgKSApIHsNCiAgICAvL0lFNiBzdGFuZGFyZHMgY29tcGxpYW50IG1vZGUNCiAg ICBzY3JPZlkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOw0K ICAgIHNjck9mWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0 Ow0KICB9DQogIHJldHVybiBbIHNjck9mWCwgc2NyT2ZZIF07DQp9DQo= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=cookie.js Content-Type: application/javascript; charset=iso-8859-15; name=cookie.js Content-Location: http://www.ine.es/menuapp/js/cookie.js Content-Transfer-Encoding: Base64 dmFyIENvb2tpZU5hbWU9IklORV9BQ0NFU0lCSUxJREFEIjsNCnZhciBDb29raWVO dW1EYXlzPTM2NTsNCg0KZnVuY3Rpb24gY3JlYXRlQ29va2llKG5hbWUsdmFsdWUs ZGF5cykgew0KICBpZiAoZGF5cykgew0KICAgIHZhciBkYXRlID0gbmV3IERhdGUo KTsNCiAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkrKGRheXMqMjQqNjAq NjAqMTAwMCkpOw0KICAgIHZhciBleHBpcmVzID0gIjsgZXhwaXJlcz0iK2RhdGUu dG9HTVRTdHJpbmcoKTsNCiAgfQ0KICBlbHNlIGV4cGlyZXMgPSAiIjsNCiAgZG9j dW1lbnQuY29va2llID0gbmFtZSsiPSIrdmFsdWUrZXhwaXJlcysiOyBwYXRoPS8i Ow0KfQ0KDQpmdW5jdGlvbiByZWFkQ29va2llKG5hbWUpIHsNCiAgdmFyIG5hbWVF USA9IG5hbWUgKyAiPSI7DQogIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxp dCgnOycpOw0KDQogIGZvcih2YXIgaT0wO2kgPCBjYS5sZW5ndGg7aSsrKSB7DQog ICAgdmFyIGMgPSBjYVtpXTsNCiAgICB3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykg YyA9IGMuc3Vic3RyaW5nKDEsYy5sZW5ndGgpOw0KICAgIGlmIChjLmluZGV4T2Yo bmFtZUVRKSA9PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCxj Lmxlbmd0aCk7DQogIH0NCiAgcmV0dXJuIG51bGw7DQp9 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=images.js Content-Type: application/javascript; charset=iso-8859-15; name=images.js Content-Location: http://www.ine.es/menuapp/js/images.js Content-Transfer-Encoding: Base64 ZnVuY3Rpb24gcHJlbG9hZChpbWdPYmosaW1nU3JjKSB7DQoJaWYgKGRvY3VtZW50 LmltYWdlcykgew0KCQlldmFsKGltZ09iaisnID0gbmV3IEltYWdlKCknKQ0KCQll dmFsKGltZ09iaisnLnNyYyA9ICInK2ltZ1NyYysnIicpDQoJfQ0KfQ0KDQpmdW5j dGlvbiBjaGFuZ2VJbWFnZShsYXllcixpbWdOYW1lLGltZ09iaikgew0KCWlmIChk b2N1bWVudC5pbWFnZXMpIHsNCgkJaWYgKGRvY3VtZW50LmxheWVycyAmJiBsYXll ciE9bnVsbCkgew0KCQkJZXZhbCgndmFyIHc9ZG9jdW1lbnQuJytsYXllcisnLmRv Y3VtZW50LmltYWdlc1siJytpbWdOYW1lKyciXS53aWR0aCcpDQoJCQlldmFsKCd2 YXIgaD1kb2N1bWVudC4nK2xheWVyKycuZG9jdW1lbnQuaW1hZ2VzWyInK2ltZ05h bWUrJyJdLmhlaWdodCcpDQoJCQlldmFsKCdkb2N1bWVudC4nK2xheWVyKycuZG9j dW1lbnQuaW1hZ2VzWyInK2ltZ05hbWUrJyJdLnNyYyA9ICcraW1nT2JqKycuc3Jj JykNCgkJCWV2YWwoJ2RvY3VtZW50LicrbGF5ZXIrJy5kb2N1bWVudC5pbWFnZXNb IicraW1nTmFtZSsnIl0ud2lkdGggPSB3JykNCgkJCWV2YWwoJ2RvY3VtZW50Licr bGF5ZXIrJy5kb2N1bWVudC5pbWFnZXNbIicraW1nTmFtZSsnIl0uaGVpZ2h0ID0g aCcpDQoJCQl9DQoJCWVsc2Ugew0KCQkJdmFyIHc9ZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoaW1nTmFtZSkud2lkdGg7DQoJCQl2YXIgaD1kb2N1bWVudC5nZXRFbGVt ZW50QnlJZChpbWdOYW1lKS5oZWlnaHQ7CQ0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoaW1nTmFtZSkuc3JjID0gZXZhbChpbWdPYmorIi5zcmMiKTsNCgkJCWRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLndpZHRoID0gdzsNCgkJCWRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLmhlaWdodCA9IGg7DQoJCQl9 DQoJfQ0KfQ0KDQpmdW5jdGlvbiByZW1vdmVJbWFnZShsYXllcixpbWdOYW1lKXsN CglpZiAoZG9jdW1lbnQuaW1hZ2VzKSB7DQoJCWlmIChkb2N1bWVudC5sYXllcnMg JiYgbGF5ZXIhPW51bGwpIA0KCQkJZXZhbCgnZG9jdW1lbnQuJytsYXllcisnLmRv Y3VtZW50LmltYWdlc1siJytpbWdOYW1lKyciXS53aWR0aCA9IDAnKTsNCgkJZWxz ZSBkb2N1bWVudC5pbWFnZXNbaW1nTmFtZV0ud2lkdGggPSAwOw0KCX0NCn0NCg0K ZnVuY3Rpb24gY2FtYmlhSW1hZ2VuKGltZ05hbWUsaW1nT2JqKXsNCgljaGFuZ2VJ bWFnZShudWxsLGltZ05hbWUsaW1nT2JqKTsNCn0NCg0KZnVuY3Rpb24gY2FtYmlh SW1hZ2VuVGFibGUoaW1nTmFtZSxpbWdPYmosaGFuZCl7DQoJaWYgKGhhbmQ9PTEp DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUpLnN0eWxlLmN1cnNv cj0naGFuZCcNCgllbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ05hbWUp LnN0eWxlLmN1cnNvcj0nYXV0bycNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo aW1nTmFtZSkuc3R5bGUuYmFja2dyb3VuZCA9ICJ1cmwoIiArIGV2YWwoaW1nT2Jq ICsgIi5zcmMiKSArIikiOwkNCn0gDQoNCmZ1bmN0aW9uIGVsaW1pbmFJbWFnZW4o aW1nTmFtZSl7DQoJcmVtb3ZlSW1hZ2UobnVsbCxpbWdOYW1lKTsNCn0NCg0KZnVu Y3Rpb24gbW9zdHJhckxheWVyKGxheWVyTmFtZSkgew0KCWlmIChkb2N1bWVudC5s YXllcnMpIA0KICAgICAgICAgICAgbGF5ZXJOYW1lLnZpc2liaWxpdHk9InZpc2li bGUiOyAgICAgDQoJZWxzZSANCiAgICAgICAgICAgIGxheWVyTmFtZS52aXNpYmls aXR5PSJ2aXNpYmxlIjsgIA0KICB9DQoNCmZ1bmN0aW9uIG9jdWx0YXJMYXllcihs YXllck5hbWUpew0KCWlmIChkb2N1bWVudC5sYXllcnMpIA0KICAgICAgICAgICAg bGF5ZXJOYW1lLnZpc2liaWxpdHkgPSJoaWRlIjsgDQoJZWxzZSANCiAgICAgICAg ICAgIGxheWVyTmFtZS52aXNpYmlsaXR5ID0gImhpZGRlbiINCiAgICANCn0NCg== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=loading.js Content-Type: application/javascript; charset=iso-8859-15; name=loading.js Content-Location: http://www.ine.es/menuapp/js/loading.js Content-Transfer-Encoding: Base64 Ly9wcm9jZWRlbW9zIGEgcXVlIHNlIG11ZXZhIGxhIGNhcGEgY3VhbmRvIHNlIG11 ZXZlIGVsIHNjcm9sbA0KDQpmdW5jdGlvbiBNb3ZlTG9hZGluZygpIHsNCglpZiAo ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmciKSE9bnVsbCl7DQoJ CXZhciB2YWxvclRvcD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu c2Nyb2xsVG9wLGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSArInB4IjsNCgkJdmFy IHZhbG9yTGVmdD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Ny b2xsTGVmdCxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpICsicHgiOw0KCQlkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLnRvcD12YWxv clRvcDsgCQkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmci KS5zdHlsZS5sZWZ0PXZhbG9yTGVmdDsgCQ0KCQlpZiAoZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKSE9bnVsbCl7CQ0KCQkJZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKS5zdHlsZS5sZWZ0PXZhbG9y TGVmdDsJCQ0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRp bmciKS5zdHlsZS50b3A9dmFsb3JUb3A7CQ0KCQkJfQ0KICAgfQ0KfQ0KDQpNZW51 TG9hZF9QcmV2U2Nyb2xsID0gKHdpbmRvdy5vbnNjcm9sbCkgPyB3aW5kb3cub25z Y3JvbGwgOiAgbmV3IEZ1bmN0aW9uOw0KDQp3aW5kb3cub25zY3JvbGwgID0gZnVu Y3Rpb24oKXsNCglzZXRUaW1lb3V0KCJNb3ZlTG9hZGluZygpIiwxMCk7DQoJTWVu dUxvYWRfUHJldlNjcm9sbCgpOw0KfTsNCg0KZnVuY3Rpb24gb2N1bHRhckxvYWRp bmcoKXsNCglzZXRUaW1lb3V0KCJvY3VsdGFyTG9hZGluZ0luc3RhbnQoKSIsMSk7 DQp9DQoNCmZ1bmN0aW9uIG9jdWx0YXJMb2FkaW5nSW5zdGFudCgpew0KaWYgKE1l bnVfVGlwb0xvYWRpbmc9PTAgfHwgTWVudV9UaXBvTG9hZGluZz09MSkNCglpZiAo ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSE9bnVsbCkNCgkJZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5zdHlsZS52aXNpYmlsaXR5 PSdoaWRkZW4nOw0KaWYgKE1lbnVfVGlwb0xvYWRpbmc9PTAgfHwgTWVudV9UaXBv TG9hZGluZz09Mil7DQoJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZs b2FkaW5nIikhPW51bGwpDQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZs b2FkaW5nIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQoJaWYgKGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikhPW51bGwpDQoJCWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5bGUuZGlzcGxheT0n bm9uZSc7CQkNCglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmci KSE9bnVsbCkNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5z dHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nOwkJDQp9DQp9DQoNCmZ1bmN0aW9uIG1v c3RyYXJMb2FkaW5nKHRpcG8pew0KICAgIHZhciBkZSA9IGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudDsNCiAgICB2YXIgaCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBz ZWxmLmlubmVySGVpZ2h0IHx8IChkZSYmZGUuY2xpZW50SGVpZ2h0KSB8fCBkb2N1 bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCg0KCXZhciB2YWxvclRvcD1NYXRoLm1h eChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLGRvY3VtZW50LmJv ZHkuc2Nyb2xsVG9wKSArInB4IjsNCgl2YXIgdmFsb3JXaWR0aCA9IE1hdGgubWF4 KGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LmNsaWVudFdpZHRoKSA7DQoJdmFyIHZhbG9ySGVpZ2h0ID0gTWF0aC5tYXgo ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LmNsaWVudEhlaWdodCk7DQoJDQoJaWYoTWVudV9UaXBvTG9hZGluZyE9MSkJ DQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUYWJsZWxvYWRpbmciKS5zdHls ZS5oZWlnaHQ9aCArJ3B4JzsJDQoJaWYoTWVudV9UaXBvTG9hZGluZz09MCl7CQ0K CWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZyIpIT1udWxsKQ0K CQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKS5zdHlsZS52aXNp YmlsaXR5PSd2aXNpYmxlJzsNCgkNCg0KCWlmIChkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgiRElWbG9hZGluZyIpIT1udWxsKXsNCgkJIGlmKHRpcG8hPTEpew0KCQkJ ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkRJVmxvYWRpbmciKS5zdHlsZS50b3A9 dmFsb3JUb3A7IAkJDQoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRElWbG9h ZGluZyIpLnN0eWxlLmhlaWdodD1oICsncHgnOw0KCQkgCWRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCJESVZsb2FkaW5nIikuc3R5bGUuZGlzcGxheT0nYmxvY2snOwkN CgkJDQoJCSAJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2Fk aW5nIikhPW51bGwpew0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJh bWVsb2FkaW5nIikuc3R5bGUudG9wPXZhbG9yVG9wOwkNCgkJCQlkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgiaWZyYW1lbG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9J2Js b2NrJzsJCQkJCQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVs b2FkaW5nIikuc3R5bGUud2lkdGg9dmFsb3JXaWR0aCAgKyAncHgnOwkJCQkJCQ0K CQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5 bGUuaGVpZ2h0PXZhbG9ySGVpZ2h0KyAncHgnOwkJCQkJDQoJCQl9DQoJCX0NCgl9 DQoJDQoJfWVsc2V7CQ0KCQlpZiAoKHRpcG8hPTEpICYmIChkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgiRElWbG9hZGluZyIpIT1udWxsKSl7DQoJCQlkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLnRvcD12YWxvclRvcDsg CQkNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJESVZsb2FkaW5nIikuc3R5 bGUuaGVpZ2h0PWgrJ3B4JzsJCQkJCQkJDQoJCQlkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgiRElWbG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsJCQkJDQoJ CQlpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKSE9 bnVsbCl7CQkNCgkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lbG9h ZGluZyIpLnN0eWxlLnRvcD12YWxvclRvcDsJDQoJCQkJZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoImlmcmFtZWxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7 CQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIiku c3R5bGUud2lkdGg9dmFsb3JXaWR0aCAgKyAncHgnOwkJCQkJCQ0KCQkJCWRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVsb2FkaW5nIikuc3R5bGUuaGVpZ2h0 PXZhbG9ySGVpZ2h0KyAncHgnOwkJCQkJCQkJDQoJCQkJfQ0KCQkJfQ0KCQlpZiAo KHRpcG8hPTIpICYmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nIikh PW51bGwpKQ0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nIiku c3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBt b3N0cmFyTG9hZGluZ1RpbWUodGltZSx0aXBvKXsNCgltb3N0cmFyTG9hZGluZyh0 aXBvKTsNCglzZXRUaW1lb3V0KCJvY3VsdGFyTG9hZGluZ0luc3RhbnQoKSIsIHRp bWUqMTAwMCk7DQp9DQoNCmZ1bmN0aW9uIE1vc3RhckxvYWRpbmcoKXsNCgltb3N0 cmFyTG9hZGluZygpOw0KfQ0KDQovL0RlYmlkbyBhIHBvc2libGVzIGxsYW1hZGFz IGFsIGpzIHF1ZSBwcm92b2NhcmlhIHVuIGJ1Y2xlIGluZmluaXRvIHNpIHNlIGxs YW1hIGEganMgbWFzIGRlIHVuYSB2ZXogaGFiaWxpdGFtb3MgdW4gY29udHJvbA0K DQppZiggaXNOYU4obG9hZGluZ19jb250cm9sKSl7DQoJdmFyIGxvYWRpbmdfY29u dHJvbD0xOw0KCU1lbnVfTG9hZGluZ19PdGhlckxvYWQgPSAod2luZG93Lm9ubG9h ZCkgPyB3aW5kb3cub25sb2FkIDogIG5ldyBGdW5jdGlvbjsNCgkNCgl3aW5kb3cu b25sb2FkICA9IGZ1bmN0aW9uKCl7DQoJCXNldFRpbWVvdXQoIm9jdWx0YXJMb2Fk aW5nSW5zdGFudCgpIiwxMCk7DQoJCU1lbnVfTG9hZGluZ19PdGhlckxvYWQoKTsN Cgl9Ow0KfQ0KDQo= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=logoINE.gif Content-Type: image/gif; name=logoINE.gif Content-Location: http://www.ine.es/menuapp/img/logoINE.gif Content-Transfer-Encoding: Base64 R0lGODlhlgA+APcAAHoAE+PAyKhUac1ofPvv8Y0mMbNzftKeq5ASKu/l5ps7UcVe dL6Ck4gBHtm7w5McNujU1syXpPjy9p5KW61fbo0YLJQyR9izuPz4/MGQmpQfNIUD HsqNmu7m68+kqbh+ierc4OTO0KdNYd/FzbBqer+MlooLJYwfMMdjeJUqQZU5TKQ+ U4MOIdy3vcyZmaRbavCis9Wutb1zgZohObVja+jX3ZQwQoEAE/Lt7vz39/f296tN YM2eqsWMmowZMcGVoe/f5ZAULqxaatGsr5xBUt/DxZoySZQhQr6DjuHL0HwYHKFG VrZ0g4UPKM2dpebP1q1ecIsNJPTl6N68we3Y3cSGlLVpdqRDWNe0vceco48gOq1s dIMIIX4HEqVSY5krQMWKltaosYwTLrNmeJowROTFzJw4TPfv8Ny5wpIpO796hqxT Ze7e355BV7h4hYYaL/Xp7tWwurZre71zjLJdbezW2axUaa5jcuDO09GospQhOowQ KaVIWt6+xYMEGIoIIn0BGM+rs5EXLX8GGv///5MZMcVre8Zhda1KWsyZmd6ttbtu f86lrb17i6E3TbNjcYQAGqlYZsSVnpEvO//v99SkrqRCVMeVoocZJeTEyQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAACWAD4AAAj/AGGgGEiwoMGDCBMqXIhw gcOHECNKnEixosWLGCkOGKDngcePIEOKHEmypMmQelKqXMmypcuXMGPKnBnzEMhC OHPq1KmhZ8+dQIMKHVpIjA0OZdC0WMq0qdOnUKNKnUq1qtNFQVBo2arFp9evPleC HUu2LNg9ZsoQWsu2rdu3cOPKnUu3LtwIhbRqoanygaC/D1KifPmRr0oxRkbYXcy4 seO5l8SgKMyXjILLKVSm2OxxxgyXmw2nFJP2senTqOFeykt5phg5VOCwEYJAT4Qy uN08KPT5sIgLIVrwEaSBL2m1qZMrZ7x6ske+exrlWPsoip4nbM/cERNY5Z47HQjp /xASxPDx5ejTq2b9nGZ0CdT3pEnSlsqEPd317IEihdAZO7UZV5p6BKbXXGsyvRdf Goq15QAZe3gHRQL+AWjegAVmmNqB7c2kICGPyNegBBislYUe5ek3YYUB0nSehjCa xmF+CTYCH4girhVHHDqs1YgYhahI4X8tuoYhWzkkiZoEN8bo2IzQ2bhggxGo0Mda cAjB3X5DWiggcmyBwIQAVzaGQYlTTMAEhYSc6aRdULonJY4MrpWHGHwAsdYTbYgR xYpEXgjmWknY4AcPjWHBAHZYqDBGfyMgUWZcT1QRh5NxejhniHUSEogGGzCBg442 AAKoly4eSUgIZnBRCQY1sP8hRRlFnLEWDmW0AEGSMaRxghMSwDECBBIUQUQTSJwh QR11JAkCCGckwUcUTPRHiBRTtEBFiehlWuONnDaYh34+XDIdIZKw4EWXRcr0Ilus RtFCDUuQIYIFFciBAwSRbJZGCTEYIYYgKfAwhQ0kxHGfIHow0IcNeYJABBFO0IaT ATrEoUBKZPRwrnLexvRhuGsxosdfKWCxVg4UeMEGi4K6Fa+uX/zRyCW7tcADIHxE IIQBRYDhkRog5LHBFXg48YUgYzzhQBNksFFHGg+EEYbAQozwRApBRBBHGm/k0S17 NIq8aY6EmMzwHgpgRwgEP4AA85cymyFvHSk8UAQOfHD/kUcSCmgxgQEt5FBGSgEQ kocJS3TAhiV7VEKIA6QBQUXeU8CxhgkRpA3JEmdoF+rYzpUN08hoq51SFELo6d90 gdLd1sx4P5AJHHyYUEkOaPRABwJmQADBVonnwUXjbDiyh9hPOwIEBGn44AAcInCe th9E4IADHQ0wQTqCZoO7hxYNqu3ZDAg0Ymt2qBo5KCFJkAHJBRDoUUEAHRCxQSUx WNDIAXrwQRGekIYoNKIDeYDEChy3gg3IgQ0jeEAQkIAEEzwAC3DYASSE8IQnWEAM PahESmLwvQ4lCAnnCpEexHUyleAEUexrV0zetRYIeCEFfQDBEswQAhwIIQUtqIMX /9KwGSTooAMkqEAaeOCAFAihAxJggAZ8wAAdVEEDKYjExNCAAUlshQQYQMMSiKiA LHwsOSGDSRPUd6Y7RMhtvWKYSirwhSkgiQJiiFlbcpAANiQJCEBIkhTYAB8cJCGH 3IJDEjIhBQkAQQolksATAvAyST4BB32Ejw4gUIQa3Ao3kDQQ2fhSiB0wIAMZWAHD SrAjN3SEJXvgAw+wgIU8XCFIsnuTLiEzSr74QAzAzIkPhukDkgiCmMUUDQ13ycy2 pBEmhUCANINAzSDs4ZrVzCY1r3lNXOaymeAkxDNfIoce9AAM6EynOtfJTgrowZvu UlU4dzlOlvQkE8lhRBpS5P8+t8DBAXmIwcswEIJAeNIuORgBD+iTmhz0waBxwUAS AoEHOPWSJnFgEpMIwNGOevSjHc1BBPQgw5cscwQKMIEJmKADDMhhEBlYDBy2oAQk JCcBXmBBCeIigS2wwHt1qWdLFDCBohp1AnxIqlKXetSibqwnqXpfEuwWBTLg0wo3 AMPKQsettTCpRBIdAgTYolEkJemsSOLqtUSwgSq8JUlwsIIfgJoDtb5FqCwpBDKR yc2+7kEMex0mVKPqliQYwQh28IFN3cCFS2DAAWMQgAAkAQdCJCADIliCG3aVBya0 wD+MEMIS7oAFDCQACUzowRhEkIUeFUEOdqBACbTnBRP/aLUtT5CDFz5ghz244W0y 8EIkstAktuBVJoXYQxDI0IY1rKENKfABNUXTkmUmIQWOqIQCjAABJGzgAECYgBEi QAEuRMClTXDuICLBhkV0wa1VaMIK5EC1C1DBDBtogxAq8IA4SMELR5EDFxhwhtre di3/NYEXDMA1JFCBCCmIwCOa0IO7XpS6ehBDCu7ACBBoVAIQyIIAJGi6b8JvM5Vq QhVkYAJzeYAJJRACF6pQhq30QQqS4AEI5AAIDrDBCHs4QA6qcAM68MkETgDCDhoA Bgx0lgEUMIEVzhAJ27ZlCnkMQQLWsIcP8CAKK2CEG6LQhso688KGkaAXHJAkHDjA /wlOCAHs8mAJIGE4w6q6bgogkIQ0GIEPXRsBEczgBgGoGAuIGWvopGCFQXDgCTYm RCUgsYMyXCEIF9DBHbjQgzrwwQhM+J0cqGxltsSgCUaAAwasEJ0MoEUIQliDHMJz 5tJh+AE+qNZahrCEnOjhEa4DwSMqwBvqWjczapHDHxBQCA4gAQBykAITAEFjqk0B pVB4ggyyKoUVtFgCMoDEIuqggD3E4D8m6IETACEAKVTBgQXewIEJMYITnAANbCCC AfOQXiAUgQQlKK440ewiN4wqbWnYQyE+YgIhsAkOY2C2sVVVhkkUIHFx0MIGxHAJ RuSRAkTgghsk8CMzGIELjf/AgRy6YFMRpoEPD1DBCH6MiXMLgQU9aIEPtCDaJtwB DpHQaVvOIAcTGIECNugyELzAcwWcIKZuOS4s72Atcu9hsCnZgyTORQU+REiZquqA BzxAIRzEgAOXIFYlFsGDPkQADf7pLBNiQAAMTKEHDSoDEsqp6EpkAQQ5aAEHQqCD GMhAEn1wAhYkgAVJMJQtcOiBG2IwhUsUgRBAuIQB1ICFHkWd4DGpABHqwBYGDLMl sXzZWgAoRxPXRUlugT1cztRVucieLmc0a1ykvhISruUMO+DnSoI0Kc0Jv5/zBCfv 9SMEM8PPCMc/zHnZkgETxvN9yX/T8n0gObaE4WTnC///DAzYpCIITI/ZpyfoXVII Mxx0LZKogMKD8gcrOD8BIvg6Yd0igdD5X+CmUVfncgZSsD62BwcAeBq8twcUcHBr kQFcEYFcIQYk4Hw5sB3otxY1QAJEwAeWYAlmUAWe9xZMUhc44AZmIDlJMAF34DZv 0VIY4AE2IAcJ+BgLqAbFBQQBEACZ0IM+6INy0xZMEAQl5hLLxCobYAbOtQQ9UHtr oQOMMAaTIhf4dwMVdglQUAZO6B8c8ECEcAFrUAW55xZbuHvrh3piuEcftoYapT1u uAg4YWJP4Ah/cAAa9UeBcAkXgIBOkHBIQCEJEAOXkAeucwZxkAdTsAZcwAE5cAEB /zAdNcAIl+AAOgAHYCAGGuAEHdABLRACJWJ2khAD1hKIlxAIqsdLtuYeacgWPLAE bbBUsMgHSzCLs0gGxSGHKxAFcpAHvNgBIXAFfnYCBsAICsBshXAJICACKfACZLAC eCABTGAUIvAFPuAEkNYGNVAEFrCNetAIPKAFyWUDvPgGUAArXqABNlABfMAGbDBG QmADbRACdLGAI9cWPdBNf5GP+riP4AMTy/QEkOMR44MFjOAHKxABTNAIT6BPitUB ECAHjeAAipgFI/AGerAUZCAGcYYWTwAGN7AGB8B3kuADBZMAlwAJdiABH7ABTUMC ChADOyYDfbA5UCcXvBcEdP/ggITAA35xZ/vHFk/gbWrQBxewhzXwAlpgBALACDnw BGRwb4RQB1awBMx4jIywASIQLIpojT7gfiGwBHpgBncQBxhQBl35MpfABRPCB38g CYSQAwgIAVP5AkZQARWGiv34Eu13ioTQAilQUj7JEkfYKjzwYVKABTzgBoWgBZ0U XVxkAIOgBmxAByaQBTGwAZYwSFfwB9ZYARaAB3AgiHKAFkAQAntgBFQgTlxAAfg3 YzkQB2DgAHLAAjJQBwKQbvN4hi1xAhfQFuSWR4E5Q6rCKpBgBEVFBFnAA2kgBD2Q BhXQBzVgBBtgBX0wBjfwCE4gnchoAXugBqbHOSEQBTb/8ARZ8AYkAAZ7YANA8ATS pQZ1EAGQ4AU60ANccAVgoAUF4AGP4Ad04AQW8AduhZfWJzKjhiQvwB0zMaDX5xYb 2AZGpQARwAZucFhtcAk6YEVkQAa34QUWsAVMwAeMQAgxcBlMIAcTYF98QAHsKASH JQIhKm0poABxgAZE4AYYAAdIoAAWcAU84FA7NAZMMAFOkJupSBOF0ClrgTNF6EJk QDVgh305sIbTkQNSEBvcQqVUYCs4AARngFaEAAdAIAFReiYlSAiOBC3cogOARCJl ykfQkh1hyiRj+HlF6h5TxhZs0Ab65xKniQYREF0ZmH6YopstoQEVwANd5QQPsKcr /zE+JOQEARSoggojy5cSBKMyK9MIRSESe0AGJNQCRgCYJiVPk5ohlToaFhAD56ID EWAG8lcBsKoFUCCPfWAGV/ekpap9hPoStVEF1kIIIMADBnAHY+AwJBIw+DFx2Jer BHKqKjFMV5BktHdWSfIEi3Ayt4irzEqpuxp6FeAIY9ADeYAGmeAAWXAHXANP2rqt ptqtMbEb1cQVPoAAxBGYiNEg7FogkVGnwbkbOrGk0GEGI0B7BFuwBnuwCJuwCruw DKuwEeADzmEWEjuxFCuxJOkGEcABGruxHNuxHvuxIBuyIjuyJNuxkkABDzAAPiF+ LNuyLvuyMBuznkEUNFuzNgh7szhbszMQEAA7 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=loading.gif Content-Type: image/gif; name=loading.gif Content-Location: http://www.ine.es/menuapp/img/loading.gif Content-Transfer-Encoding: Base64 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 7QbB5GkBADs= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=jquery.fontSizer.js Content-Type: application/javascript; charset=iso-8859-15; name=jquery.fontSizer.js Content-Location: http://www.ine.es/menuapp/js/jquery.fontSizer.js Content-Transfer-Encoding: Base64 DQp2YXIgY29va0ZhY3Rvcj0iVGFtRmFjdG9yQWN1bXVsYWRvIg0KdmFyIGZhY3Rv ckFjdW11bGFkbz0wOw0KdmFyIGluaXQ9MDsNCnZhciBpbmNyZW1lbnRvPTQ7DQo7 KGZ1bmN0aW9uKCQpIHsNCg0KCSQuZm4uZm9udFNpemVyID0gZnVuY3Rpb24oc2V0 dGluZ3Mpew0KCSAgDQoJCWRlZmF1bHRzID0gew0KCQkJYWN0aW9uOiAidXAiLA0K CQkJaW5jcmVtZW50OiBpbmNyZW1lbnRvLA0KCQkJbWF4OiAyMSwNCgkJCW1pbjog LWluY3JlbWVudG8sDQoJCQl3aWRnZXQ6IHtjc3M6IFsibWFzIiwibWVub3MiXX0s DQoJCQloZWFkZXJzOiB7fSwNCgkJCWRlYnVnOiBmYWxzZQ0KCQl9LA0KCQl0aGlz LmNsaWNrKGZ1bmN0aW9uKCl7IA0KCQkJaWYoc2V0dGluZ3NbJ2VsZW1lbnRzJ10g PT0gIiIpDQoJCQkJcmV0dXJuOw0KCQkJZWxlbWVudHMgPSBzZXR0aW5nc1snZWxl bWVudHMnXTsNCgkJCXZhciBhY3Rpb24gPSAkLnRyaW0oKHNldHRpbmdzWydhY3Rp b24nXT09dW5kZWZpbmVkKT8gZGVmYXVsdHMuYWN0aW9uOnNldHRpbmdzWydhY3Rp b24nXSk7DQoJCQl2YXIgZmFjdG9yID0gcGFyc2VJbnQoKHNldHRpbmdzWydpbmNy ZW1lbnQnXT09dW5kZWZpbmVkKT8gZGVmYXVsdHMuaW5jcmVtZW50OnNldHRpbmdz WydpbmNyZW1lbnQnXSk7DQoNCgkJCXZhciBtYXggPSBwYXJzZUludCgoc2V0dGlu Z3NbJ21heCddPT11bmRlZmluZWQpPyBkZWZhdWx0cy5tYXg6c2V0dGluZ3NbJ21h eCddKTsNCgkJCXZhciBtaW4gPSBwYXJzZUludCgoc2V0dGluZ3NbJ21pbiddPT11 bmRlZmluZWQpPyBkZWZhdWx0cy5taW46c2V0dGluZ3NbJ21pbiddKTsNCg0KICAg ICAgICAgICAgICAgICAgIHZhciBwYXRyb24gPSAvcHgkLzsNCg0KCQkJaWYgKGlu aXQ9PTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9y QWN1bXVsYWRvPXBhcnNlSW50KGZhY3RvckFjdW11bGFkbyk7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWN0b3JBY3VtdWxhZG8+bWF4KWZh Y3RvckFjdW11bGFkbz1tYXg7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChmYWN0b3JBY3VtdWxhZG88bWluKWZhY3RvckFjdW11bGFkbz1taW47 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkJCWZhY3Rvcj1N YXRoLmFicyggZmFjdG9yQWN1bXVsYWRvKTsJCQkJDQoJCQkJaWYgKHBhcnNlSW50 KGZhY3RvckFjdW11bGFkbyk+MCkNCgkJCQkJYWN0aW9uPSJ1cCI7DQoJCQkJZWxz ZSBhY3Rpb249ImRvd24iOw0KDQoJCQl9ICAgICAgICBlbHNlew0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKChhY3Rpb249PSJ1cCIpICYmIChmYWN0b3JBY3VtdWxhZG8gPD0g bWF4KSkNCgkJCQkJZmFjdG9yQWN1bXVsYWRvPXBhcnNlSW50KGZhY3RvckFjdW11 bGFkbykgKyBwYXJzZUludChmYWN0b3IpOw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKChhY3Rpb249PSJkb3duIikgJiYoZmFjdG9yQWN1bXVs YWRvID49bWluKSkNCgkJCQkJZmFjdG9yQWN1bXVsYWRvPXBhcnNlSW50KGZhY3Rv ckFjdW11bGFkbykgLSBwYXJzZUludChmYWN0b3IpOw0KCQkJCQkJCQkJCQkJCQkJ CWlmIChhY3Rpb249PSJyZXN0b3JlIikgew0KCQkJCQlmYWN0b3I9ZmFjdG9yQWN1 bXVsYWRvOw0KCQkJCQlmYWN0b3JBY3VtdWxhZG89MDsNCgkJCQl9DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDb29raWUoY29va0Zh Y3RvciwgZmFjdG9yQWN1bXVsYWRvLCBDb29raWVOdW1EYXlzKTsNCiAgICAgICAg ICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICANCiAgICAg ICAgICAgICAgICAgICAgICAgICANCgkJCWlmKCAoaW5pdCE9MSkgJiYgKE1lbnVf UmVmcmVzaFBhZ2UpKQ0KCQkJCSBsb2NhdGlvbi5yZWxvYWQodHJ1ZSkgIA0KCQkJ ZWxzZXsNCgkJCWlmICgkKGVsZW1lbnRzKS5jaGlsZHJlbigpLnNpemUoKSA9PSAw KXsNCgkJCQkJCQ0KCQkJCQl0YW1hbm5vID0gJChlbGVtZW50cykuY3NzKCdmb250 LXNpemUnKTsNCgkJCQkJaWYgKGFjdGlvbiA9PSAidXAiKXsNCgkJCQkJCW5ld190 YW1hbm5vID0gcGFyc2VJbnQodGFtYW5uby5yZXBsYWNlKHBhdHJvbiwgJycpKSAr IGZhY3RvcjsNCgkJCQkJCWlmKGZhY3RvckFjdW11bGFkbyA+IG1heCl7DQoJCQkJ CQkJcmV0dXJuOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQlu ZXdfdGFtYW5ubyA9IHBhcnNlSW50KHRhbWFubm8ucmVwbGFjZShwYXRyb24sICcn KSkgLSBmYWN0b3I7CQkNCgkJCQkJCWlmKGZhY3RvckFjdW11bGFkbyA8IG1pbil7 DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJfQkJCQkJDQoJCQkJCX0NCgkJCQkJJChl bGVtZW50cykuY3NzKCdmb250LXNpemUnLG5ld190YW1hbm5vKydweCcpOw0KCQkJ fQ0KCQkJZWxzZXsJCQkNCgkJCQkkKGVsZW1lbnRzKS5jaGlsZHJlbigpLmVhY2go ZnVuY3Rpb24oKXsNCg0KCQkJCQl0YW1hbm5vID0gJCh0aGlzKS5jc3MoJ2ZvbnQt c2l6ZScpOwkNCgkJCQkJaWYgKGFjdGlvbiA9PSAidXAiKXsNCgkJCQkJCQ0KCQkJ CQkJbmV3X3RhbWFubm8gPSBwYXJzZUludCh0YW1hbm5vLnJlcGxhY2UocGF0cm9u LCAnJykpICsgZmFjdG9yOwkJCQkJCQkJIAkJDQoJCQkJCQlpZihmYWN0b3JBY3Vt dWxhZG8gPiBtYXgpew0KCQkJCQkJCXJldHVybjsNCgkJCQkJCX0NCgkJCQkJfQ0K CQkJCQllbHNlew0KCQkJCQkJbmV3X3RhbWFubm8gPSBwYXJzZUludCh0YW1hbm5v LnJlcGxhY2UocGF0cm9uLCAnJykpIC0gZmFjdG9yOw0KCQkJCQkJCQkJCQkNCgkJ CQkJCWlmKGZhY3RvckFjdW11bGFkbyA8IG1pbil7DQoJCQkJCQkJcmV0dXJuOw0K CQkJCQkJfQ0KCQkJCQl9CQkJCQkNCgkJCQkJJCh0aGlzKS5jc3MoJ2ZvbnQtc2l6 ZScsbmV3X3RhbWFubm8rJ3B4Jyk7DQoJCQkJCQ0KCQkJCX0pOw0KCQkJfQ0KCQkg IH0vL3JlZnJlc2gNCgkJCWlmIChpbml0IT0xKSB7DQoJCQkJICAgICAgICAgICAg ICANCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgIGluaXQ9MDsNCgkg ICByZXR1cm4gZmFsc2UgICAgICAgICAgICAgICAgICAgICANCgkJfSkNCgl9DQoN Cn0pKGpRdWVyeSk7DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQoJ CQkkKCcjYXVtZW50YXInKS5mb250U2l6ZXIoew0KCQkJCWFjdGlvbjogInVwIiwN CgkJCQlpbmNyZW1lbnQ6IGluY3JlbWVudG8sDQoJCQkJZWxlbWVudHM6ICJib2R5 IiwNCgkJCQltYXg6IDIxLA0KCQkJCW1pbjogLWluY3JlbWVudG8NCg0KCQkJfSk7 DQoJCQkNCgkJCSQoJyNkaXNtaW51aXInKS5mb250U2l6ZXIoew0KCQkJCWFjdGlv bjogJ2Rvd24nLA0KCQkJCWluY3JlbWVudDogaW5jcmVtZW50bywNCgkJCQllbGVt ZW50czogImJvZHkiLA0KCQkJCW1pbjogLWluY3JlbWVudG8NCgkJCX0pOwkJCQkJ CQ0KCQkJDQoJCQkkKCcjcmVzdGF1cmFyJykuZm9udFNpemVyKHsNCgkJCQlhY3Rp b246ICdyZXN0b3JlJywNCgkJCQlpbmNyZW1lbnQ6IGluY3JlbWVudG8sDQoJCQkJ ZWxlbWVudHM6ICJib2R5IiwNCgkJCQltaW46IC1pbmNyZW1lbnRvDQoJCQl9KTsJ CQoJCQkNCgkJfSkNCg0KZnVuY3Rpb24gTWFzVGFtKCl7DQogIGpRdWVyeS5mbi5m b250U2l6ZXIoKTsNCglqUXVlcnkoIiNhdW1lbnRhciIpLmNsaWNrKCk7CQkNCgkg DQp9DQpmdW5jdGlvbiBNZW5vc1RhbSgpew0KICBqUXVlcnkuZm4uZm9udFNpemVy KCk7DQoJalF1ZXJ5KCIjZGlzbWludWlyIikuY2xpY2soKTsNCglsb2NhdGlvbi5y ZWxvYWQodHJ1ZSkgIA0KfQ0KDQovL0FycmFuY2Ftb3MgZWwgdGFtYfFvIGRlIGlu aWNpbw0KDQpmdW5jdGlvbiBDYXJnYUVzdGlsb0RlZigpew0KCWluaXQ9MTsNCglm YWN0b3JBY3VtdWxhZG89cmVhZENvb2tpZShjb29rRmFjdG9yKTsNCglpZiAoZmFj dG9yQWN1bXVsYWRvJWluY3JlbWVudG8hPTApDQoJCWZhY3RvckFjdW11bGFkbz0w Ow0KCWlmICggaXNOYU4oZmFjdG9yQWN1bXVsYWRvKSB8fCBmYWN0b3JBY3VtdWxh ZG89PW51bGwpIGZhY3RvckFjdW11bGFkbz0wOw0KCWlmIChmYWN0b3JBY3VtdWxh ZG8+MCl7DQoNCgkJalF1ZXJ5LmZuLmZvbnRTaXplcigpOw0KCQlqUXVlcnkoIiNh dW1lbnRhciIpLmNsaWNrKCk7CQkNCgl9DQogICAgICAgIGlmIChmYWN0b3JBY3Vt dWxhZG88MCl7DQogICAgICAgIAlqUXVlcnkuZm4uZm9udFNpemVyKCk7DQoJCWpR dWVyeSgiI2Rpc21pbnVpciIpLmNsaWNrKCk7DQogICAgICAgIH0NCglpbml0PTA7 DQoNCn0NCg0KDQovL0RlYmlkbyBhIHBvc2libGVzIGxsYW1hZGFzIGFsIGpzIHF1 ZSBwcm92b2NhcmlhIHVuIGJ1Y2xlIGluZmluaXRvIHNpIHNlIGxsYW1hIGEganMg bWFzIGRlIHVuYSB2ZXogaGFiaWxpdGFtb3MgdW4gY29udHJvbA0KDQppZiggaXNO YU4oanF1ZXJ5X2ZvbnRzaXplcl9jb250cm9sKSl7DQoJdmFyIGpxdWVyeV9mb250 c2l6ZXJfY29udHJvbD0xOw0KCVN0eWxlX090aGVyTG9hZCA9ICh3aW5kb3cub25s b2FkKSA/IHdpbmRvdy5vbmxvYWQgOiAgbmV3IEZ1bmN0aW9uOw0KCXdpbmRvdy5v bmxvYWQgID0gZnVuY3Rpb24oKXsNCg0KCQlzZXRUaW1lb3V0KCJDYXJnYUVzdGls b0RlZigpIiwxMDApOw0KCQlTdHlsZV9PdGhlckxvYWQoKTsNCgkJfTsJCQ0KfQ0K ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=letras.gif Content-Type: image/gif; name=letras.gif Content-Location: http://www.ine.es/menuapp/img/letras.gif Content-Transfer-Encoding: Base64 R0lGODlhLQAPALMPANiHlvns6PTb27ERN92YpOm6v8FDYLwzUs1le7YiRMdUbe7K zdJ2ieOpsqsAKf///yH5BAEAAA8ALAAAAAAtAA8AAASZ8MlJq704680lGEEnjolD jKhWOI6RYkgiKqyzvNbgFJxwGCwGjkLQCTcAAIEFyggcAA0C4JBtDiGdKUM9OAFP R0PTQEgYLC9GARRgwA+gQmPgPRa1m2WRhGJKNU0XYTU1ZhZoaRcNJw8BOlEXCI0S Sw6CEwJzcTsVAVgTNAkhFVSegAakD2EEKyx2Elo3iSyqD4WHroVDvBYRADs= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=altavoz.gif Content-Type: image/gif; name=altavoz.gif Content-Location: http://www.ine.es/menuapp/img/altavoz.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAIABAJ4bNP///yH5BAEAAAEALAAAAAAPAA8AAAIjjI+pywbQ3IHs BUrTw9JtK2UfeJXeN5nI1mUrxFVpdLn0zRQAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=btnsobre.gif Content-Type: image/gif; name=btnsobre.gif Content-Location: http://www.ine.es/menuapp/img/btnsobre.gif Content-Transfer-Encoding: Base64 R0lGODlhEQAPAJEBAJkzM//99v/iowAAACH5BAEAAAEALAAAAAARAA8AAAIpjI+p y70Ao5wGiIuziFV7Hlje110ThAHlmKlhOrUra64nus20e/cOUwAAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=btnFavoritos.gif Content-Type: image/gif; name=btnFavoritos.gif Content-Location: http://www.ine.es/menuapp/img/btnFavoritos.gif Content-Transfer-Encoding: Base64 R0lGODlhEQAPAJECAKsAKf/io//99gAAACH5BAEAAAIALAAAAAARAA8AAAIwlG+A yxDKooNxzWqDpgj4rz2fJzjhiW6ll4ZfZ6KkJGPxyXUb+9DiqsrMgLmVhFIAADs= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=btnMap.gif Content-Type: image/gif; name=btnMap.gif Content-Location: http://www.ine.es/menuapp/img/btnMap.gif Content-Transfer-Encoding: Base64 R0lGODlhEQAPAJECAP/io6sAKf/99gAAACH5BAEAAAIALAAAAAARAA8AAAIrlI+p Ft2bApgBIkntwaBq4TwfM15fiIrmtragC4oOo4Idc9se7c3xXjoUAAA7 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=HM_Loader5.js Content-Type: application/javascript; charset=iso-8859-15; name=HM_Loader5.js Content-Location: http://www.ine.es/menuapp/js/HM_Loader5.js Content-Transfer-Encoding: Base64 LypITV9Mb2FkZXIuanMNCiogYnkgUGV0ZXIgQmVsZXNpcy4gdjQuMSAwMTA4MjEN CiogQ29weXJpZ2h0IChjKSAyMDAxIFBldGVyIEJlbGVzaXMuIEFsbCBSaWdodHMg UmVzZXJ2ZWQuDQoqLw0KDQp2YXIgICBITV9ET00gPSAoZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQpID8gdHJ1ZSA6IGZhbHNlOw0KdmFyICAgSE1fTlM0ID0gKGRvY3Vt ZW50LmxheWVycykgPyB0cnVlIDogZmFsc2U7DQp2YXIgICBITV9JRSA9IChkb2N1 bWVudC5hbGwpID8gdHJ1ZSA6IGZhbHNlOw0KdmFyICAgSE1fSUU0ID0gSE1fSUUg JiYgIUhNX0RPTTsNCnZhciAgIEhNX01hYyA9IChuYXZpZ2F0b3IuYXBwVmVyc2lv bi5pbmRleE9mKCJNYWMiKSAhPSAtMSk7DQp2YXIgICBITV9JRTRNID0gSE1fSUU0 ICYmIEhNX01hYzsNCg0KLy80LjENCnZhciBITV9PcGVyYSA9IChuYXZpZ2F0b3Iu dXNlckFnZW50LmluZGV4T2YoIk9wZXJhIikhPS0xKTsNCnZhciBITV9Lb25xdWVy b3IgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJLb25xdWVyb3IiKSE9 LTEpOw0KDQp2YXIgSE1fSXNNZW51ID0gIUhNX09wZXJhICYmICFITV9Lb25xdWVy b3IgJiYgIUhNX0lFNE0gJiYgKEhNX0RPTSB8fCBITV9OUzQgfHwgSE1fSUU0KTsN Cg0KdmFyIEhNX0Jyb3dzZXJTdHJpbmcgPSBITV9OUzQgPyAiTlM0IiA6IEhNX0RP TSA/ICJET00iIDogIklFNCI7DQoNCg0KaWYod2luZG93LmV2ZW50ICsgIiIgPT0g InVuZGVmaW5lZCIpIGV2ZW50ID0gbnVsbDsNCmZ1bmN0aW9uIEhNX2ZfUG9wVXAo KXtyZXR1cm4gZmFsc2V9Ow0KZnVuY3Rpb24gSE1fZl9Qb3BEb3duKCl7cmV0dXJu IGZhbHNlfTsNCnZhciBwb3BVcCA9IEhNX2ZfUG9wVXA7DQp2YXIgcG9wRG93biA9 IEhNX2ZfUG9wRG93bjsNCg0KdmFyIE1lbnVQb3NYPTA7DQp2YXIgTWVudVBvc1k9 MDsNCnZhciBITV9HTF9NZW51V2lkdGggICAgICAgICAgPSAyMDA7DQp2YXIgSE1f R0xfRm9udEZhbWlseSAgICAgICAgID0gIkFyaWFsLHNhbnMtc2VyaWYiOw0KdmFy IEhNX0dMX0ZvbnRTaXplICAgICAgICAgICA9IDY7DQp2YXIgSE1fR0xfRm9udEJv bGQgICAgICAgICAgID0gZmFsc2U7DQp2YXIgSE1fR0xfRm9udEl0YWxpYyAgICAg ICAgID0gZmFsc2U7DQp2YXIgSE1fR0xfRm9udENvbG9yICAgICAgICAgID0gImJs dWUiOw0KdmFyIEhNX0dMX0ZvbnRDb2xvck92ZXIgICAgICA9ICIjOTkzMzMzIjsN CnZhciBITV9HTF9CR0NvbG9yICAgICAgICAgICAgPSAiI2ZmZmZmZiI7Ly9kb2N1 bWVudC5iZ0NvbG9yOw0KdmFyIEhNX0dMX0JHQ29sb3JPdmVyICAgICAgICA9ICIj ZmZkODg2IjsNCnZhciBITV9HTF9JdGVtUGFkZGluZyAgICAgICAgPSAzOw0KDQp2 YXIgSE1fR0xfQm9yZGVyV2lkdGggICAgICAgID0gMjsNCnZhciBITV9HTF9Cb3Jk ZXJDb2xvciAgICAgICAgPSAiIzk5MzMzMyI7DQp2YXIgSE1fR0xfQm9yZGVyU3R5 bGUgICAgICAgID0gInNvbGlkIjsNCnZhciBITV9HTF9TZXBhcmF0b3JTaXplICAg ICAgPSAxOw0KdmFyIEhNX0dMX1NlcGFyYXRvckNvbG9yICAgICA9ICIjOTkzMzMz IjsNCnZhciBITV9HTF9JbWFnZVNyYyAgICAgICAgICAgPSBITV9pbWdEaXIgKyAi dHJpLmdpZiI7DQp2YXIgSE1fR0xfSW1hZ2VTcmNMZWZ0ICAgICAgID0gSE1faW1n RGlyICsgInRyaWwuZ2lmIjsNCnZhciBITV9HTF9JbWFnZVNyY092ZXIgICAgICAg PSBITV9pbWdEaXIgKyAidHJpX2F6dWwuZ2lmIjsNCnZhciBITV9HTF9JbWFnZVNy Y0xlZnRPdmVyICAgPSBITV9pbWdEaXIgKyAiSE1fTW9yZV9ibHVlX2xlZnQuZ2lm IjsNCnZhciBITV9HTF9JbWFnZVNpemUgICAgICAgICAgPSA1Ow0KdmFyIEhNX0dM X0ltYWdlSG9yaXpTcGFjZSAgICA9IDA7DQp2YXIgSE1fR0xfSW1hZ2VWZXJ0U3Bh Y2UgICAgID0gMDsNCg0KdmFyIEhNX0dMX0tlZXBIaWxpdGUgICAgICAgICA9IHRy dWU7DQp2YXIgSE1fR0xfQ2xpY2tTdGFydCAgICAgICAgID0gMDsNCnZhciBITV9H TF9DbGlja0tpbGwgICAgICAgICAgPSAwOw0KdmFyIEhNX0dMX0NoaWxkT3Zlcmxh cCAgICAgICA9IDkwOw0KdmFyIEhNX0dMX0NoaWxkT2Zmc2V0ICAgICAgICA9IDEz Ow0KdmFyIEhNX0dMX0NoaWxkUGVyQ2VudE92ZXIgICA9IG51bGw7DQp2YXIgSE1f R0xfVG9wU2Vjb25kc1Zpc2libGUgID0gMC41Ow0KdmFyIEhNX0dMX0NoaWxkU2Vj b25kc1Zpc2libGUgPSAuMzsNCnZhciBITV9HTF9TdGF0dXNEaXNwbGF5QnVpbGQg PSAwOw0KdmFyIEhNX0dMX1N0YXR1c0Rpc3BsYXlMaW5rICA9IDE7DQp2YXIgSE1f R0xfVXBvbkRpc3BsYXkgICAgICAgID0gbnVsbDsNCnZhciBITV9HTF9VcG9uSGlk ZSAgICAgICAgICAgPSBudWxsOw0KDQp2YXIgSE1fR0xfU2Nyb2xsRW5hYmxlZCAg ICAgID0gdHJ1ZTsNCnZhciBITV9HTF9TY3JvbGxCYXJIZWlnaHQgICAgPSAxNjsN CnZhciBITV9HTF9TY3JvbGxCYXJDb2xvciAgICAgPSAibGlnaHRncmV5IjsNCnZh ciBITV9HTF9TY3JvbGxJbWdTcmNUb3AgICAgPSBITV9pbWdEaXIgKyAiSE1fdXAu Z2lmIjsNCnZhciBITV9HTF9TY3JvbGxJbWdTcmNCb3QgICAgPSBITV9pbWdEaXIg KyAiSE1fZG93bi5naWYiOw0KdmFyIEhNX0dMX1Njcm9sbEltZ1dpZHRoICAgICA9 IDk7DQp2YXIgSE1fR0xfU2Nyb2xsSW1nSGVpZ2h0ICAgID0gNTsNCnZhciBITV9H TF9TY3JvbGxCb3RoQmFycyAgICAgPSB0cnVlOw0KdmFyIEhNX0dMX1Njcm9sbEhl aWdodE1pbiAgICA9IDMwOw0KDQp2YXIgSE1fR0xfSG92ZXJUaW1lVG9wICAgICAg ID0gNjAwOw0KdmFyIEhNX0dMX0hvdmVyVGltZVRyZWUgICAgICA9IDYwMDsNCg0K Ly9ITV9HTF9SaWdodFRvTGVmdCAgICAgID0gdHJ1ZTsNCnZhciBITV9HTF9DcmVh dGVUb3BPbmx5ICAgICAgPSBITV9OUzQgPyB0cnVlIDogZmFsc2U7DQp2YXIgSE1f R0xfU2hvd0xpbmtDdXJzb3IgICAgID0gdHJ1ZTsNCg0KLy9QYXJhbWV0cm9zIHBh cmEgZnJhbWVzDQp2YXIgSE1fUEdfRnJhbWVzRW5hYmxlZCAgICAgID0gdHJ1ZTsN CnZhciBITV9QR19GcmFtZXNOYXZGcmFtZVBvcyAgPSAidG9wIjsNCnZhciBITV9Q R19GcmFtZXNNYWluRnJhbWVOYW1lID0gImNvbnRlbnQiOw0KDQovL0xvY2FsaXph Y2lvbiBkZSBsb3MgZmljaGVyb3MgZGUgSE1TY3JpcHQgeSBkZSBpbWFnZW5lcw0K dmFyIEhNX0dMX0ltYWdlRGlyICAgICAgICAgICA9IEhNX2ltZ0RpcjsNCnZhciBI TV9TY3JpcHREaXIgICAgICAgICAgICAgPSAiIjsNCg0KLy8gdGhlIGZvbGxvd2lu ZyBmdW5jdGlvbiBpcyBpbmNsdWRlZCB0byBpbGx1c3RyYXRlIHRoZSBpbXByb3Zl ZCBKUyBleHByZXNzaW9uIGhhbmRsaW5nIG9mDQovLyB0aGUgbGVmdF9wb3NpdGlv biBhbmQgdG9wX3Bvc2l0aW9uIHBhcmFtZXRlcnMNCi8vIHlvdSBtYXkgZGVsZXRl IGlmIHlvdSBoYXZlIG5vIHVzZSBmb3IgaXQNCg0KZnVuY3Rpb24gSE1fZl9DZW50 ZXJNZW51KHRvcG1lbnVpZCkgew0KCXZhciBNaW5pbXVtUGl4ZWxMZWZ0ID0gMDsN Cgl2YXIgVGhlTWVudSA9IEhNX0RPTSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk KHRvcG1lbnVpZCkgOiBITV9JRTQgPyBkb2N1bWVudC5hbGwodG9wbWVudWlkKSA6 IGV2YWwoIndpbmRvdy4iICsgdG9wbWVudWlkKTsNCgl2YXIgVGhlTWVudVdpZHRo ID0gSE1fRE9NID8gcGFyc2VJbnQoVGhlTWVudS5zdHlsZS53aWR0aCkgOiBITV9J RTQgPyBUaGVNZW51LnN0eWxlLnBpeGVsV2lkdGggOiBUaGVNZW51LmNsaXAud2lk dGg7DQoJdmFyIFRoZVdpbmRvd1dpZHRoID0gSE1fSUUgPyBkb2N1bWVudC5ib2R5 LmNsaWVudFdpZHRoIDogd2luZG93LmlubmVyV2lkdGg7DQoJcmV0dXJuIE1hdGgu bWF4KHBhcnNlSW50KChUaGVXaW5kb3dXaWR0aC1UaGVNZW51V2lkdGgpIC8gMiks TWluaW11bVBpeGVsTGVmdCk7DQp9DQoNCmlmKEhNX0lzTWVudSkgew0KCWRvY3Vt ZW50LndyaXRlKCI8U0NSIiArICJJUFQgTEFOR1VBR0U9J0phdmFTY3JpcHQxLjIn IFNSQz0nIiArIEhNX0RpckpzICsgIi8iICsgSE1faWRpb21hICsgIi9ITUFycmF5 c19pbmU1LmpzJyBUWVBFPSd0ZXh0L2phdmFzY3JpcHQnPjxcL1NDUiIgKyAiSVBU PiIpOw0KCWRvY3VtZW50LndyaXRlKCI8U0NSIiArICJJUFQgTEFOR1VBR0U9J0ph dmFTY3JpcHQxLjInIFNSQz0nIiArIEhNX0RpckpzICsgIi9ITV9TY3JpcHQiKyBI TV9Ccm93c2VyU3RyaW5nICsiLmpzJyBUWVBFPSd0ZXh0L2phdmFzY3JpcHQnPjxc L1NDUiIgKyAiSVBUPiIpOw0KfQ0KLy9lbmQ= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=printer.gif Content-Type: image/gif; name=printer.gif Content-Location: http://www.ine.es/jaxi/imagenes/printer.gif Content-Transfer-Encoding: Base64 R0lGODlhEwATAOZTAAABAAEABAAABAADAP//+n6HggYIBQAABYOChwcIAwQABAQA BwIBB/v/+gUACQADBQgEBQMBDAkABgYIA3x9gQoAAHyCgnp+gQQAAP//+IaFipKA gP/9+/n482dALxIHAHSGhggDCQEBAYaLh32CfPv7+fz/+4yHhHp6ev309ff4+gAB BH2AhQMAAAYABomIhAYABXqFhwYPFHx+eQAFAn1+efb58oGJfv/8+nt9ifP4+3p8 e4SEhAMCCPX/94tybnSAgP/99v//+3mweWKpb3k5OYCEhQYIB/b//IWFg////4aH i3t8dn9+eoSGhfv5/P+wAf/io//Udf/43AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAATABMAAAengFOCg4SFhoeIiYQIFEaK hDpLKkolPCiPUyM+DVFRBEIAAIhNLzadGUEdCYg1JFJMBDgcUSYDhzsnUrpSPxsp SDRQRxiEUFC6REO7TiDGuh+DOcbHUh5FUs67FYMxnVHZ1LtSMINA3p3Z4lIRgywW 59/qEKKEFwU33uE9ClIThQedksyIx8CBLgEiDLkI0UlDAAG6AqxI9OSBjHgGbGGa skBCi40gAwEAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=calen.gif Content-Type: image/gif; name=calen.gif Content-Location: http://www.ine.es/inebase/img/calen.gif Content-Transfer-Encoding: Base64 R0lGODlhZAARAJEAAJkzM////////wAAACH5BAUUAAIALAAAAABkABEAAAKRhI+p y+0Powu02ouz3rz7nxngSJamKZ7qyo6penAADM4t9aKVHdI3mQNqYrjdC2ER8YiB mW0ZdPFK0521Wcwutc/rMYtFVV1D4hMZDm9x5iR4/InWelrwVe3N69NA+Lze1JUm iBfIZUfo1yEnNaX09gU56IRopLh4+aO5KZPJ+QnKCDr6KUp6eiOhusra6mpQAAA7 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=pub.gif Content-Type: image/gif; name=pub.gif Content-Location: http://www.ine.es/inebase/img/pub.gif Content-Transfer-Encoding: Base64 R0lGODlhZAARAJEAAJkzM////////wAAACH5BAUUAAIALAAAAABkABEAAAKihI+p y+0Powu02ouz3rz7nxngSJamKZ7qyo7phnAANgf1erfeq9359bPphiReqFLzUWav JJJ3sESXT990CTXSgkAk9ZtyCsdjJVlsTnvPMq70qgbLt2Hat7xOPHfutTQPiNc1 98dm2NeH1RGU1DgnJlj3GChYmag1CMRE1XR3ZbOJZQY6apXzGZJItMqa2voK26Ma S8uCWYtrK7HL2+v7C1AAADs= ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=logoinebase.gif Content-Type: image/gif; name=logoinebase.gif Content-Location: http://www.ine.es/jaxi/imagenes/logoinebase.gif Content-Transfer-Encoding: Base64 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 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=mnu_epf.jpg Content-Type: image/jpeg; name=mnu_epf.jpg Content-Location: http://www.ine.es/images/mnu_epf.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAICAgICAgICAgICAgICAwQDAgIDBAUE BAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwMDAz/2wBDAQMD AwUEBQkGBgkNCwkLDQ8ODg4ODw8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAz/wAARCACYAGQDAREAAhEBAxEB/8QAHgAAAwADAQEAAwAA AAAAAAAABgcIBAUJAwIAAQr/xABFEAABAwMCBAMFBQQHBgcAAAABAgMEBQYRABIH EyExFCJBCBUyUWEjQnGBkRYkUqElQ2JygqKxCTRzwdHhFzNTY4Wy8P/EABwBAAID AQEBAQAAAAAAAAAAAAMFAgQGAQAHCP/EADgRAAEDAgMGAQoHAQADAAAAAAEAAgME ERIhMQUTIkFRYXEGFCMygZGhsdHwFTNCUmLB4XIHgqL/2gAMAwEAAhEDEQA/AGHe UpRl2qAPgqoKnM/xR3R/PWCAyX1e/EumXDVwucOrMWVEn3W0P0yNbym/Kb4D5L5t V5Tv8T81z/8Ab2eMJy0JZB2iY2F/rqpUN9MPBNqN9qb/ANlF0Nx2pUeuxUh1TT69 xSgeYJPfQwyyOZHEGyNRLkW7RaNEaU834dscvPYhXz1nXvxSFYmSndUSnLNKa7VG BdVOlxEKXIqmXHGvmojTmifiZnyT/Zs5MeE8l43FS66TDnGmym2WWF73AnIG78NX WzsOV0d7HNsSr84C8IW6BbtPrtzxjJuSpoYfaprxw3AjfG3uKe7rgOSPughPfOlN XUhzsI5JlFRNewF6M+J/F6g0qqt0aoSq2y675H1x2cstox2V0PxAY+IaqulLtEwh iDVKdcptxcYKJXqixVoibboTvKhMLKkc8xkfabEqAyltRxgZOPNrgdhUpG3ySfub hbULf4c0y74NSp1yLksrqk1VPKtsJjHKUFtkla1IVkO7PgPdOOuptlBdZVXRkNuF icNuKtZgU8s1aDCr9ubuXPZiqUtcdA/rBnzDHfU3gIThvWFrtCnLWIFRqEpMylNJ m06Q0hUOSSBuR6a7G4WWWkoZoHFjbkckx7kUgN208oZKauwlY+imnRpQ05L6lbMK 6OHnFS0aXZlu0OY5VPG02IGpHKiPuI+IkYWlBB6HW5pCNyzwC+e1dO51Q+37ipU9 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 pVzjBReSwWmKPCRNkVRSNzcdCHPMtSzhKcfMn8AToDg/kcl9M8lDakPin9xEismj U5LAUxDQ24YRX05mUk71Z6+cnp8tU5HZrY041XFzjNSnjdlUqDTy232V+KiST3Dj bu4KHp5Tp7s6XgslG04SXYgqMo9ft/iVwfqlyRYZiXVRYaHq4mJ5ERpbbiGnNzY6 APBW9Jx1/LUJIyyW3JP6aRtVT425OtmOjv8AVLC6Smry30PV6pbe7zQXk/kVavY8 HJJDRGY2Lyguv03mLi0qntKcy4W2mvkhI+JR0WN+pKrV0AY0MathRacQioqTs/en IjCFgdDyzuH/AH0CZ+ntVOGK1/YndCiNcrl+DOGcJRhWPLtSRnoevXSlxTABO6pv L91PqQTtcdRu/wALqFardU0YNCng7PREsFibu2OsTFlCvT/zNFhdkzwPzWZrMtsO /wCf6TDi1B6WxGfWtsuKbQcpAGeny1UcsDNK4yO8UIXVWn2ZVDCy0ha5qUJ8o6n5 DRWaFPdiyF1NUj+KJ3KvPClYDeAOoA664CsqZHpfQLsrbnGWiWzlCqTXojKKmXCQ lltp5K1KwD5s4249c6tMF2FfRPJOR3m3tVVcWanGlQ3mG2UMpjtbWkq+8nG1IQPr jSqeW5W0ooS1q5J8XYBkOcwJ843mSP7+TnPz750yoJLINbHdIexLiqFsVGpR2JUp ujV9vwdxwGzjxEYL5if8SD1B/EeunkwxBLtnzGnf2Ovh9UU3HFfpdQU/HRGTCeQH Ybrbpd3NqHQ7hoTXBwTWpbhdiZotBDIqP7sIy0rlrKnpnxOKbHQNp/hSem4687hS qb0iPoUBqO41HZUha6VIbeqW3GAVrQ2hPl6bU+uqb3H3oQb8E5KLR4/u+OqTyC+4 lKnCvbnO0D1P01Re43Rg1FDzLT9vVhfkcXF5qm39wIwEg9D66C82ene6ti7EozuK Zs4YrxnIfUe/T4xo0fqs9vzWM2hltod2I1o02V4WluoyUclvp+WhOyXzacnfO8UM 8Qqh4erWcD8UuppAz93Uo9Foth5Q1P8AymKtSA6XEuuKeP6agTms4HISti5aVbvH SAupSqWx4yloCZUxClcpLayoqG0HHXHYZ+o1djHoyV9K8h6Z9UzdMF3EnIa5C5VU cS7ekveEq4zLQ2pL3ISclbLiCCry9uvXH4aSTtu6629HIL4dFyk4w1P3ZVqvTpkZ +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 ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=altavoz.gif Content-Type: image/gif; name=altavoz.gif Content-Location: http://www.ine.es/menu/img/altavoz.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAIABAJ4bNP///yH5BAEAAAEALAAAAAAPAA8AAAIjjI+pywbQ3IHs BUrTw9JtK2UfeJXeN5nI1mUrxFVpdLn0zRQAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=cifrasine.gif Content-Type: image/gif; name=cifrasine.gif Content-Location: http://www.ine.es/images/cifrasine.gif Content-Transfer-Encoding: Base64 R0lGODlhXwAjALMAABsZFv///8aLlYOBf15bWY8XLOTj46lMXIQAFrCvrczMzJRB UTw4NsmxtpmZmal0fCH5BAUUAAEALAAAAABfACMAAAT/MMhJq73j6s27/+CWEGFp nqjGOGnrvpbCwHR9Epmt7yrv/6OfUEdIDFOLpHKpfNBIR9RhSq1WYYlcdPsxTgZe n0JAlpAFistY0KgIDslDu+UIB6CcAQslQCAKAQp/fxd9CAcUCwgCgQeHdBQKeBcO AAxzJw0FBQuBm5udbpuIEoqME46hLw57FwkAdgGVsRuanJ6fBU4UAqMSqRUKBQi7 GmkeBJgWsBUDAATHwbG2ncKcn6dmvrbFEwu3agwzyBIK0RIE4xPpAa/nDQwAAFoB 1Lhyn5i9ugEHm9moNimT4ICAQUrRFFgSx/AYgFZ3Ziic5AxaAnX1QOHq1GfThH1O /75xsuJvU7cAA0jQm/AqjIMVxxQ4U1ApWqVA8sKkmyODgj1roUqGAhlA5IEzSMko e9nOlTxMBytUkkcBgIIGONQNoLfVp0ag3kwGIFoS4AaF5yIxuBiNnYV4eAxebPdw a1qMGW+BnZCPW4AHYj08NHYJ3gRJYCw400Lg2boiiiHmraZxgq0CJRHt5eD2wto7 eBwMaLBSltVIKX5W/pgL8y+BF0gppBXocwAGWsBIUoy3hWpwFEr6KvXnnLBdjcOF sbQuzaRyNgwBEoRAVaJBpH79edCggb9i8yzAs1NnwrjnOxosmNLowElUU8x6/yRn 3WkKL9OqDYSeSw3mFKTUQXtBgZTmHw0AykKAZBiQQJor0BkXw4QxxSTBQMGk0YY5 EQZoiUEGXoBDOwzSlEACdZwYyIkJNHAVTQ64aEQDKLaDIisnltcdKwqw6EAaNeaY IopE7pEFbRssiBKSBzZ5mxHQOCllBZ/1N+WBDMjE4JVY4sYllwP09mUKEQAAOw== ------------XjV0HmQQUqrqWKUDdGcJsX Content-Disposition: inline; filename=default.htm Content-Type: text/html; charset=utf-16; name=default.htm Content-Location: about:blank Content-Transfer-Encoding: Base64 //48ACEARABPAEMAVABZAFAARQAgAEgAVABNAEwAIABQAFUAQgBMAEkAQwAgACIA LQAvAC8AVwAzAEMALwAvAEQAVABEACAASABUAE0ATAAgADQALgAwADEALwAvAEUA TgAiAD4ACgA8AGgAdABtAGwAIABkAGkAcgA9ACIAbAB0AHIAIgA+AAoAPABoAGUA YQBkAD4ACgAgADwAdABpAHQAbABlAD4AUADhAGcAaQBuAGEAIAB2AGEAYwDtAGEA PAAvAHQAaQB0AGwAZQA+AAoAPAAvAGgAZQBhAGQAPgAKADwAYgBvAGQAeQA+ADwA LwBiAG8AZAB5AD4APAAvAGgAdABtAGwAPgA= ------------XjV0HmQQUqrqWKUDdGcJsX--