Code
Tutorial de instalacion R y Rstudio
Instalación de R, RStudio y Git
Instalación de R
Para descargar R y Rstudio, debes acceder a la página Posit .
Seleccionar el paso 1, que te llevara a la página de CRAN (Comprehensive R
Archive Network) que es el repositorio central de software de R. Allí,
deberás seleccionar el sistema operativo que utilices.
Luego deberás seleccionar el “install for the first time” (Instalar
por primera vez) en la parte superior de la página:
Instalación de R Studio
Una vez que lo descargas, deberás ejecutar el .exe y seguir los pasos
de la instalación. La última versión de R es la 4.2.1. En cuanto hayas
descargado R, deberás descargar RStudio que es el IDE que estaremos
usando a lo largo del curso.
Para ello vuelve a la página de posit y
selecciona el Paso 2. También podés seleccionar la opción de descarga
que mejor se adapte a tu sistema operativo
Instalacion de Git
Para instalar git tenes que ingresar acá y seleccionar la opcion que
mejor se adapta a tu sistema operativo
¡Felicidades! Ahora tienes R, RStudio y Git instalados en tu
compu.
LS0tDQp0aXRsZTogIlR1dG9yaWFsIGRlIGluc3RhbGFjaW9uIFIgeSBSc3R1ZGlvIg0KYXV0aG9yOiAiQXJpYW5hIEJhcmRhdWlsIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0KbGFuZzogImVzIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyb2JvYm9vazoNCiAgICBsaWdodGJveDogVFJVRQ0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICB0b2M6IDMNCiAgICBudW1iZXItc2VjdGlvbnM6IFRSVUUNCiAgICBjb2RlLWZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCjwhLS0gKsKhQmllbnZlbmlkb3MgYWwgQ3Vyc28gZGUgUjogQW7DoWxpc2lzIGRlIERhdG9zIHkgVmlzdWFsaXphY2nDs24hKiBSIGVzIHVuIC0tPg0KPCEtLSBsZW5ndWFqZSBkZSBwcm9ncmFtYWNpw7NuIGFtcGxpYW1lbnRlIHV0aWxpemFkbyBlbiBsYSBjaWVuY2lhIGRlIGRhdG9zLCAtLT4NCjwhLS0gZXN0YWTDrXN0aWNhcyB5IGFuw6FsaXNpcyBkZSBkYXRvcywgeSBhIGxvIGxhcmdvIGRlIGVzdGUgY3Vyc28sIGFkcXVpcmlyw6FzIC0tPg0KPCEtLSBsYXMgaGFiaWxpZGFkZXMgZXNlbmNpYWxlcyBwYXJhIGNvbnZlcnRpcnRlIGVuIHVuIGV4cGVydG8gZW4gZWwgbWFuZWpvIHkgLS0+DQo8IS0tIGFuw6FsaXNpcyBkZSBkYXRvcyAtLT4NCg0KPCEtLSBQb2RlcyBhY2NlZGVyIGFsIHJlcG9zaXRvcmlvIC0tPg0KPCEtLSBbYWPDoV0oaHR0cHM6Ly9naXRodWIuY29tL2FyaWliYXJkL2FwcmVuZGllbmRvUikgLS0+DQoNCiMgSW5zdGFsYWNpw7NuIGRlIFIsIFJTdHVkaW8geSBHaXQNCg0KIyMjIEluc3RhbGFjacOzbiBkZSBSDQoNClBhcmEgZGVzY2FyZ2FyIFIgeSBSc3R1ZGlvLCBkZWJlcyBhY2NlZGVyIGEgbGEgcMOhZ2luYQ0KW1Bvc2l0XShodHRwczovL3Bvc2l0LmNvL2Rvd25sb2FkL3JzdHVkaW8tZGVza3RvcC8pLg0KDQohW10oaW1hZ2VuZXMvMS1pbnN0YWxhY2lvbi5wbmcpDQoNClNlbGVjY2lvbmFyIGVsIHBhc28gMSwgcXVlIHRlIGxsZXZhcmEgYSBsYSBbcMOhZ2luYSBkZQ0KQ1JBTl0oaHR0cHM6Ly9jcmFuLnJzdHVkaW8uY29tLykgKENvbXByZWhlbnNpdmUgUiBBcmNoaXZlIE5ldHdvcmspIHF1ZQ0KZXMgZWwgcmVwb3NpdG9yaW8gY2VudHJhbCBkZSBzb2Z0d2FyZSBkZSBSLiBBbGzDrSwgZGViZXLDoXMgc2VsZWNjaW9uYXIgZWwNCnNpc3RlbWEgb3BlcmF0aXZvIHF1ZSB1dGlsaWNlcy4NCg0KTHVlZ28gZGViZXLDoXMgc2VsZWNjaW9uYXIgZWwgImluc3RhbGwgZm9yIHRoZSBmaXJzdCB0aW1lIiAoSW5zdGFsYXIgcG9yDQpwcmltZXJhIHZleikgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGUgbGEgcMOhZ2luYToNCg0KIVtdKGltYWdlbmVzLzEuMS1pbnN0YWxhY2lvbi5wbmcpDQoNCiMjIyBJbnN0YWxhY2nDs24gZGUgUiBTdHVkaW8NCg0KVW5hIHZleiBxdWUgbG8gZGVzY2FyZ2FzLCBkZWJlcsOhcyBlamVjdXRhciBlbCAuZXhlIHkgc2VndWlyIGxvcyBwYXNvcyBkZQ0KbGEgaW5zdGFsYWNpw7NuLiBMYSDDumx0aW1hIHZlcnNpw7NuIGRlIFIgZXMgbGEgNC4yLjEuIEVuIGN1YW50byBoYXlhcw0KZGVzY2FyZ2FkbyBSLCBkZWJlcsOhcyBkZXNjYXJnYXIgUlN0dWRpbyBxdWUgZXMgZWwgSURFIHF1ZSBlc3RhcmVtb3MNCnVzYW5kbyBhIGxvIGxhcmdvIGRlbCBjdXJzby4NCg0KUGFyYSBlbGxvIHZ1ZWx2ZSBhIGxhIFtww6FnaW5hIGRlDQpwb3NpdF0oaHR0cHM6Ly9wb3NpdC5jby9kb3dubG9hZC9yc3R1ZGlvLWRlc2t0b3AvKSB5IHNlbGVjY2lvbmEgZWwgUGFzbw0KMi4gVGFtYmnDqW4gcG9kw6lzIHNlbGVjY2lvbmFyIGxhIG9wY2nDs24gZGUgZGVzY2FyZ2EgcXVlIG1lam9yIHNlIGFkYXB0ZSBhDQp0dSBzaXN0ZW1hIG9wZXJhdGl2bw0KDQohW10oaW1hZ2VuZXMvMS4yLWluc3RhbGFjaW9uLnBuZykNCg0KIyMjIEluc3RhbGFjaW9uIGRlIEdpdA0KDQpQYXJhIGluc3RhbGFyIGdpdCB0ZW5lcyBxdWUgaW5ncmVzYXINClthY8OhXShodHRwczovL2dpdC1zY20uY29tL2Rvd25sb2FkcykgeSBzZWxlY2Npb25hciBsYSBvcGNpb24gcXVlIG1lam9yDQpzZSBhZGFwdGEgYSB0dSBzaXN0ZW1hIG9wZXJhdGl2bw0KDQohW10oaW1hZ2VuZXMvMS40JTIwR2l0LnBuZykNCg0KwqFGZWxpY2lkYWRlcyEgQWhvcmEgdGllbmVzIFIsIFJTdHVkaW8geSBHaXQgaW5zdGFsYWRvcyBlbiB0dSBjb21wdS4NCg0KPCEtLSAjIENsYXNlIDEgLSBJbnRyb2R1Y2Npw7NuIGEgUiAtLT4NCg0KPCEtLSBFbiBlc3RhIHByaW1lcmEgY2xhc2UsIGV4cGxvcmFyZW1vcyBsb3MgY29uY2VwdG9zIGLDoXNpY29zIGRlIFIsIHVuIC0tPg0KPCEtLSBsZW5ndWFqZSBkZSBwcm9ncmFtYWNpw7NuIHkgZW50b3JubyBkZSBhbsOhbGlzaXMgZGUgZGF0b3MgYW1wbGlhbWVudGUgLS0+DQo8IS0tIHV0aWxpemFkbyBlbiBsYSBjaWVuY2lhIGRlIGRhdG9zIHkgbGEgZXN0YWTDrXN0aWNhLiBBcHJlbmRlcmVtb3MgY8OzbW8gLS0+DQo8IS0tIGluc3RhbGFyIFIgeSBSU3R1ZGlvLCBjbG9uYXJlbW9zIHVuIHJlcG9zaXRvcmlvIGVuIEdpdCB5IHJlYWxpemFyZW1vcyAtLT4NCjwhLS0gYWxndW5hcyBvcGVyYWNpb25lcyBiw6FzaWNhcyBlbiBSLiAtLT4NCg0KPCEtLSBBaG9yYSBxdWUgdGVuZW1vcyBSIHkgUlN0dWRpbyBpbnN0YWxhZG9zLCBwb2RlbW9zIGNvbWVuemFyIGEgZXhwbG9yYXIgUi4gLS0+DQo8IS0tIEFxdcOtIGhheSBhbGd1bm9zIGNvbmNlcHRvcyBiw6FzaWNvczogLS0+DQoNCjwhLS0gIyMgwr9RdcOpIGVzIFI/IC0tPg0KDQo8IS0tIFIgZXMgdW4gbGVuZ3VhamUgZGUgcHJvZ3JhbWFjacOzbiB5IGVudG9ybm8gZGUgYW7DoWxpc2lzIGRlIGRhdG9zIC0tPg0KPCEtLSBhbXBsaWFtZW50ZSB1dGlsaXphZG8gZW4gbGEgY2llbmNpYSBkZSBkYXRvcywgbGEgZXN0YWTDrXN0aWNhIHkgbGEgLS0+DQo8IS0tIGludmVzdGlnYWNpw7NuLiBFcyBkZSBjw7NkaWdvIGFiaWVydG8geSBvZnJlY2UgdW5hIGFtcGxpYSB2YXJpZWRhZCBkZSAtLT4NCjwhLS0gcGFxdWV0ZXMgeSBiaWJsaW90ZWNhcyBxdWUgZmFjaWxpdGFuIGVsIGFuw6FsaXNpcyB5IGxhIHZpc3VhbGl6YWNpw7NuIGRlIC0tPg0KPCEtLSBkYXRvcyAtLT4NCg0KPCEtLSAjIyBFbnRvcm5vIGRlIFRyYWJham8gZGUgUlN0dWRpbyAtLT4NCg0KPCEtLSBEZXNwdcOpcyBkZSBpbnN0YWxhciBSIHkgUlN0dWRpbywgYWJyaXJlbW9zIFJTdHVkaW8geSBleHBsb3JhcmVtb3Mgc3UgLS0+DQo8IS0tIGVudG9ybm8gZGUgdHJhYmFqbywgcXVlIGNvbnN0YSBkZSBjdWF0cm8gcGFuZWxlcyBwcmluY2lwYWxlczogLS0+DQoNCjwhLS0gMS4gICoqU2NyaXB0Kio6IERvbmRlIHBvZGVzIGVzY3JpYmlyIHkgZ3VhcmRhciB0dSBjw7NkaWdvIFIuIC0tPg0KPCEtLSAyLiAgKipDb25zb2xlKio6IERvbmRlIHBvZGVzIGVqZWN1dGFyIGNvbWFuZG9zIGRlIFIgZGlyZWN0YW1lbnRlLiAtLT4NCjwhLS0gMy4gICoqRW52aXJvbm1lbnQqKjogTXVlc3RyYSBsYXMgdmFyaWFibGVzIHkgb2JqZXRvcyBlbiB0dSBlc3BhY2lvIGRlIC0tPg0KPCEtLSAgICAgdHJhYmFqby4gLS0+DQo8IS0tIDQuICAqKlBsb3RzL0ZpbGVzL1BhY2thZ2VzL0hlbHAqKjogUGFuZWxlcyBwYXJhIGdlc3Rpb25hciBncsOhZmljb3MsIC0tPg0KPCEtLSAgICAgYXJjaGl2b3MsIHBhcXVldGVzIHkgb2J0ZW5lciBheXVkYS4gLS0+DQoNCjwhLS0gIyMgUHJveWVjdG9zIC0tPg0KDQo8IS0tIEVuIFIsIHVuIHByb3llY3RvIGVzIHVuYSBlc3RydWN0dXJhIG9yZ2FuaXphZGEgcXVlIHBlcm1pdGUgdHJhYmFqYXIgZGUgLS0+DQo8IS0tIG1hbmVyYSBlZmljaWVudGUgcG9ycXVlIGNyZWEgdW5hIGNhcnBldGEgZG9uZGUgc2UgYWxvamFuIHRvZG9zIGxvcyAtLT4NCjwhLS0gYXJjaGl2b3MgcXVlIHZhbW9zIGEgdXRpbGl6YXIgZW4gbnVlc3RybyB0cmFiYWpvLiAtLT4NCg0KPCEtLSBQYXJhIGNyZWFyIHVuIHByb3llY3RvIGVuIFIsIHBvZGVzIHNlZ3VpciBlc3RvcyBwYXNvcyBlbiBSU3R1ZGlvOiAtLT4NCg0KPCEtLSAxLiAgQWJyZSBSU3R1ZGlvLiAtLT4NCg0KPCEtLSAyLiAgVmUgYSAiRmlsZSIgKEFyY2hpdm8pIGVuIGxhIGJhcnJhIGRlIG1lbsO6IHkgc2VsZWNjaW9uYSAiTmV3IFByb2plY3QiIC0tPg0KPCEtLSAgICAgKE51ZXZvIFByb3llY3RvKS4gLS0+DQoNCjwhLS0gMy4gIEVsaWdlIGxhIG9wY2nDs24gIk5ldyBEaXJlY3RvcnkiIChOdWV2byBEaXJlY3RvcmlvKSBzaSBlc3TDoXMgY3JlYW5kbyAtLT4NCjwhLS0gICAgIHVuIG51ZXZvIHByb3llY3RvIGRlc2RlIGNlcm8gbyAiRXhpc3RpbmcgRGlyZWN0b3J5IiAoRGlyZWN0b3JpbyAtLT4NCjwhLS0gICAgIEV4aXN0ZW50ZSkgc2kgeWEgdGllbmVzIHVuIGRpcmVjdG9yaW8gZXhpc3RlbnRlIHF1ZSBkZXNlYXMgY29udmVydGlyIC0tPg0KPCEtLSAgICAgZW4gdW4gcHJveWVjdG8uIC0tPg0KDQo8IS0tIDQuICBMdWVnbywgcG9kZXMgZXNwZWNpZmljYXIgbGEgdWJpY2FjacOzbiBkZWwgZGlyZWN0b3JpbyB5IGVsIG5vbWJyZSBkZWwgLS0+DQo8IS0tICAgICBwcm95ZWN0by4gLS0+DQoNCjwhLS0gNS4gIEhheiBjbGljIGVuICJDcmVhdGUgUHJvamVjdCIgKENyZWFyIFByb3llY3RvKSB5IHNlIGFicmlyw6EgdW5hIG51ZXZhIC0tPg0KPCEtLSAgICAgaW5zdGFuY2lhIGRlIFJTdHVkaW8gY29uZmlndXJhZGEgcGFyYSB0dSBwcm95ZWN0by4gLS0+DQoNCjwhLS0gIyMjIMK/Q8OzbW8gQ2xvbmFyIHVuIFJlcG9zaXRvcmlvIGVuIEdpdD8gLS0+DQoNCjwhLS0gQ2xvbmFyIHVuIHJlcG9zaXRvcmlvIGVuIEdpdCBzaWduaWZpY2EgY29waWFyIHVuIHJlcG9zaXRvcmlvIHJlbW90byAtLT4NCjwhLS0gKGdlbmVyYWxtZW50ZSBhbG9qYWRvIGVuIEdpdEh1YiBvIGVuIG90cm8gc2Vydmlkb3IpIGVuIHR1IGNvbXB1dGFkb3JhIC0tPg0KPCEtLSBsb2NhbC4gRXN0byB0ZSBwZXJtaXRlIHRyYWJhamFyIGVuIHVuYSBjb3BpYSBsb2NhbCBkZSBsb3MgYXJjaGl2b3MsIC0tPg0KPCEtLSByZWFsaXphciBjYW1iaW9zIHkgY29udHJpYnVpciBhbCBwcm95ZWN0by4gLS0+DQoNCjwhLS0gUGFzb3MgcGFyYSBjbG9uYXIgdW4gcmVwb3NpdG9yaW8gZW4gR2l0OiAtLT4NCg0KPCEtLSAxLiAgVmUgYWwgbWVuw7ogIkZpbGUiIChBcmNoaXZvKSBlbiBsYSBwYXJ0ZSBzdXBlcmlvciBpenF1aWVyZGEgZGUgbGEgLS0+DQo8IS0tICAgICB2ZW50YW5hIGRlIFJTdHVkaW8uIC0tPg0KDQo8IS0tIDIuICBTZWxlY2Npb25hICJOZXcgUHJvamVjdCIgKE51ZXZvIFByb3llY3RvKS4gLS0+DQoNCjwhLS0gMy4gIEVuIGVsIGN1YWRybyBkZSBkacOhbG9nbyAiTmV3IFByb2plY3QiLCBlbGlnZSAiVmVyc2lvbiBDb250cm9sIiAtLT4NCjwhLS0gICAgIChDb250cm9sIGRlIFZlcnNpb25lcykuIC0tPg0KDQo8IS0tIDQuICBMdWVnbywgc2VsZWNjaW9uYSAiR2l0Ii4gLS0+DQoNCjwhLS0gNS4gIEEgY29udGludWFjacOzbiwgcGVnYSBsYSBVUkwgZGVsIHJlcG9zaXRvcmlvIEdpdCBxdWUgZGVzZWFzIGNsb25hciBlbiAtLT4NCjwhLS0gICAgIGVsIGNhbXBvICJSZXBvc2l0b3J5IFVSTCIgKFVSTCBkZWwgUmVwb3NpdG9yaW8pLiBFc3RhIFVSTCBzZSAtLT4NCjwhLS0gICAgIGVuY3VlbnRyYSBlbiBsYSBww6FnaW5hIGRlbCByZXBvc2l0b3JpbyBlbiBHaXRIdWIgdSBvdHJhIHBsYXRhZm9ybWEgLS0+DQo8IS0tICAgICBkZSBhbG9qYW1pZW50byBkZSBHaXQuIC0tPg0KDQo8IS0tIDYuICBFbiBlbCBjYW1wbyAiUHJvamVjdCBkaXJlY3RvcnkgbmFtZSIgKE5vbWJyZSBkZWwgZGlyZWN0b3JpbyBkZWwgLS0+DQo8IS0tICAgICBwcm95ZWN0byksIHBvZGVzIGVzcGVjaWZpY2FyIGVsIG5vbWJyZSBkZSBsYSBjYXJwZXRhIGxvY2FsIGRvbmRlIHNlIC0tPg0KPCEtLSAgICAgY2xvbmFyw6EgZWwgcmVwb3NpdG9yaW8uIFBvciBkZWZlY3RvLCBSU3R1ZGlvIHV0aWxpemFyw6EgZWwgbm9tYnJlIGRlbCAtLT4NCjwhLS0gICAgIHJlcG9zaXRvcmlvLiAtLT4NCg0KPCEtLSA3LiAgSGF6IGNsaWMgZW4gIkNyZWF0ZSBQcm9qZWN0IiAoQ3JlYXIgUHJveWVjdG8pLiAtLT4NCg0KPCEtLSAjIyBPcmllbnRhY2nDs24gYSBPYmpldG9zIGVuIFIgLS0+DQoNCjwhLS0gUiBlcyB1biBsZW5ndWFqZSBvcmllbnRhZG8gYSBvYmpldG9zLCBsbyBxdWUgc2lnbmlmaWNhIHF1ZSB0b2RvIGVuIFIgZXMgLS0+DQo8IS0tIHVuIG9iamV0by4gSW5jbHVzbyBsb3MgbsO6bWVyb3MsIGxhcyBmdW5jaW9uZXMgeSBsb3MgZGF0b3Mgc29uIG9iamV0b3MgZW4gLS0+DQo8IS0tIFIuIC0tPg0KDQo8IS0tICMjIENyZWFyIHVuICJDaHVuayIgZW4gUiBNYXJrZG93biAtLT4NCg0KPCEtLSBVbiAiY2h1bmsiIGVzIHVuIGJsb3F1ZSBkZSBjw7NkaWdvIFIgcXVlIHBvZGVzIGVqZWN1dGFyIGVuIHVuIGRvY3VtZW50byBSIC0tPg0KPCEtLSBNYXJrZG93bi4gcG9kZXMgaW5zZXJ0YXIgdW4gY2h1bmsgdXRpbGl6YW5kbyB0cmVzIGNvbWlsbGFzIGludmVydGlkYXMgeSAtLT4NCjwhLS0gbGEgZXRpcXVldGEgYHtyfWAgbyBjb24gY3RybCthbHQraSAuIFBvciBlamVtcGxvOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgRXN0byBlcyB1biBjaHVuayBkZSBjw7NkaWdvIFIgLS0+DQo8IS0tIHggPC0gNSAtLT4NCjwhLS0geSA8LSAxMCAtLT4NCjwhLS0geiA8LSB4ICsgeSAtLT4NCjwhLS0geiAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIE9wZXJhY2lvbmVzIELDoXNpY2FzIGVuIFIgLS0+DQoNCjwhLS0gQSBjb250aW51YWNpw7NuLCByZWFsaXphcmVtb3MgYWxndW5hcyBvcGVyYWNpb25lcyBiw6FzaWNhcyBlbiBSOiAtLT4NCg0KPCEtLSAjIyMgQXNpZ25hY2nDs24gZGUgVmFyaWFibGVzIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBFc3RvIGVzIHVuIGNvbWVudGFyaW8gZW4gUiAtLT4NCjwhLS0geCA8LSA1ICMgQXNpZ25hY2nDs24gZGUgdW4gdmFsb3IgYSB1bmEgdmFyaWFibGUgLS0+DQo8IS0tIHkgPC0gMTAgLS0+DQoNCjwhLS0gcm0oeSkgI1BhcmEgYm9ycmFyIGxvcyBvYmpldG9zIGRlbCBlbnRvcm5vIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMjIE9wZXJhY2lvbmVzIG1hdGVtw6F0aWNhcyAtLT4NCg0KPCEtLSBSIGVzIGNvbW8gdW5hIGNhbGN1bGFkb3JhIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0geSA8LSAxMiAtLT4NCjwhLS0gIyBTdW1hIGRlIHZhcmlhYmxlcyAtLT4NCjwhLS0geiA8LSB4ICogeSAtLT4NCjwhLS0gcHJpbnQocGFzdGUoIkxhIHN1bWEgZGUgeCB5IHkgZXM6IiwgeikpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMjIFZlY3RvcmVzIC0tPg0KDQo8IS0tIEVuIFIsIHVuIHZlY3RvciBlcyB1bmEgZXN0cnVjdHVyYSBkZSBkYXRvcyBxdWUgYWxtYWNlbmEgdW5hIHNlY3VlbmNpYSBkZSAtLT4NCjwhLS0gdmFsb3JlcyBkZWwgbWlzbW8gdGlwby4gcG9kZXMgY3JlYXIgdW4gdmVjdG9yIHV0aWxpemFuZG8gbGEgZnVuY2nDs24gLS0+DQo8IS0tIGBjKClgLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgcG9kZXMgY29ycmVyIGVsIGNvZGlnbyBjb24gQ1RSTCtFTlRFUiBvIGNvbiBlbCBib3RvbiAtLT4NCjwhLS0gIyBDcmVhciB1biB2ZWN0b3IgLS0+DQo8IS0tIG1pX3ZlY3RvciA8LSBjKDEsIDIsIDMsIDQsIDUpIC0tPg0KDQo8IS0tICMgQ2FsY3VsYXIgbGEgc3VtYSBkZSBsb3MgZWxlbWVudG9zIGVuIGVsIHZlY3RvciAtLT4NCjwhLS0gc3VtYSA8LSBzdW0obWlfdmVjdG9yKSAtLT4NCg0KPCEtLSAjIENhbGN1bGFyIGxhIG1lZGlhIC0tPg0KPCEtLSBtZWRpYSA8LSBtZWFuKG1pX3ZlY3RvcikgLS0+DQoNCjwhLS0gbWVkaWFuYSA8LSBtZWRpYW4obWlfdmVjdG9yKSAtLT4NCg0KPCEtLSAjY2F0IHBlcm1pdGUgaW1wcmltaXIgdmFsb3JlcyAtLT4NCjwhLS0gY2F0KCJFbCByZXN1bHRhZG8gZXMiLCBzdW1hLCAiXG4iKSAtLT4NCjwhLS0gY2F0KCJNZWRpYTogIiwgbWVkaWEsICJcbiIpIC0tPg0KDQo8IS0tICMgQ3JlYXIgdW4gb2JqZXRvIHB1ZWRlIHNlciBjb24gbGEgYXNpZ25hY2lvbiA8LSBvID0gIC0tPg0KDQo8IS0tIE5vbWJyZSA8LSBjKCJBcmlhbmEiLCJNYXJ0aW5hIikgLS0+DQo8IS0tIE5vbWJyZXMgPSBjKCJBcmlhbmEiLCJNYXJ0aW5hIiwiSm9hcXVpbiIpIC0tPg0KDQo8IS0tICNjb21wYXJhY2lvbiAtLT4NCjwhLS0gTm9tYnJlID09IE5vbWJyZXMgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBcIyMgT3BlcmFkb3JlcyBlbiBSIC0tPg0KDQo8IS0tIFIgb2ZyZWNlIHZhcmlvcyB0aXBvcyBkZSBvcGVyYWRvcmVzOiAtLT4NCg0KPCEtLSAtICAgKipBc2lnbmFjacOzbioqOiBTZSB1dGlsaXphIHBhcmEgYXNpZ25hciB2YWxvcmVzIGEgdmFyaWFibGVzLiBFbCAtLT4NCjwhLS0gICAgIG9wZXJhZG9yIG3DoXMgY29tw7puIGVzIGA8LWAgbyBgPWAuIC0tPg0KDQo8IS0tIC0gICAqKk9wZXJhZG9yZXMgQXJpdG3DqXRpY29zKio6IFNlIHV0aWxpemFuIHBhcmEgcmVhbGl6YXIgb3BlcmFjaW9uZXMgLS0+DQo8IS0tICAgICBtYXRlbcOhdGljYXMsIGNvbW8gYCtgLCBgLWAsIGAqYCwgYC9gLCBlbnRyZSBvdHJvcy4gLS0+DQoNCjwhLS0gLSAgICoqT3BlcmFkb3JlcyBMw7NnaWNvcyoqOiBTZSB1dGlsaXphbiBwYXJhIGV2YWx1YXIgY29uZGljaW9uZXMgLS0+DQo8IS0tICAgICBsw7NnaWNhcywgY29tbyBgJiZgLCBgfHxgLCBgIWAuIC0tPg0KDQo8IS0tIC0gICAqKk9wZXJhZG9yZXMgUmVsYWNpb25hbGVzKio6IFNlIHV0aWxpemFuIHBhcmEgY29tcGFyYXIgdmFsb3JlcywgY29tbyAtLT4NCjwhLS0gICAgIGA9PWAsIGAhPWAsIGA+YCwgYDxgLiAtLT4NCg0KPCEtLSAjIyBUaXBvcyBkZSBPYmpldG9zIGVuIFIgLS0+DQoNCjwhLS0gUiB0aWVuZSB2YXJpb3MgdGlwb3MgZGUgb2JqZXRvcywgaW5jbHV5ZW5kbzogLS0+DQoNCjwhLS0gLSAgICoqTnVtZXJpYyoqOiBOw7ptZXJvcywgcG9yIGVqZW1wbG8sIGAzLjE0YC4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIENyZWFyIHVuIG9iamV0byBudW1lcmljIC0tPg0KPCEtLSBudW1lcm8gPC0gMy4xNCAtLT4NCjwhLS0gY2xhc3MobnVtZXJvKSAgIyBWZXJpZmljYXIgZWwgdGlwbyBkZSBvYmpldG8gKG51bWVyaWMpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gLSAgICoqQ2hhcmFjdGVyKio6IENhZGVuYXMgZGUgdGV4dG8sIHBvciBlamVtcGxvLCBgIkhvbGEsIFIiYC4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIENyZWFyIHVuIG9iamV0byBjaGFyYWN0ZXIgLS0+DQo8IS0tIHRleHRvIDwtICJIb2xhLCBSIiAtLT4NCjwhLS0gY2xhc3ModGV4dG8pICAjIFZlcmlmaWNhciBlbCB0aXBvIGRlIG9iamV0byAoY2hhcmFjdGVyKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIC0gICAqKkxvZ2ljYWwqKjogVmFsb3JlcyBsw7NnaWNvcywgYFRSVUVgIG8gYEZBTFNFYC4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIENyZWFyIHVuIG9iamV0byBsb2dpY2FsIC0tPg0KPCEtLSB2ZXJkYWRlcm8gPC0gVFJVRSAjVCAtLT4NCjwhLS0gZmFsc28gPC0gRkFMU0UgI0YgLS0+DQo8IS0tIGNsYXNzKHZlcmRhZGVybykgICMgVmVyaWZpY2FyIGVsIHRpcG8gZGUgb2JqZXRvIChsb2dpY2FsKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIC0gICAqKkludGVnZXIqKjogTsO6bWVyb3MgZW50ZXJvcywgcG9yIGVqZW1wbG8sIGAyTGAuIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBDcmVhciB1biBvYmpldG8gaW50ZWdlciAtLT4NCjwhLS0gZW50ZXJvIDwtIDJMIC0tPg0KPCEtLSBjbGFzcyhlbnRlcm8pICAjIFZlcmlmaWNhciBlbCB0aXBvIGRlIG9iamV0byAoaW50ZWdlcikgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAtICAgKipUaXBvIEZlY2hhKiogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSBmZWNoYSA8LSBhcy5EYXRlKCIwMS8wMS8yMDIzIikgLS0+DQo8IS0tIGNsYXNzKGZlY2hhKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIEFob3JhLCBtb3N0cmFyZW1vcyBjw7NtbyBjb252ZXJ0aXIgZW50cmUgZXN0b3MgdGlwb3MgZGUgb2JqZXRvcyAtLT4NCjwhLS0gdXRpbGl6YW5kbyBsYXMgZnVuY2lvbmVzIGFzLm51bWVyaWMsIGFzLmNoYXJhY3RlciB5IGFzLmxvZ2ljYWw6IC0tPg0KDQo8IS0tICoqQ29udmVyc2nDs24gYSBOdW1lcmljKiogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIENvbnZlcnRpciBjaGFyYWN0ZXIgYSBudW1lcmljIC0tPg0KPCEtLSB0ZXh0byA8LSAiMTIzLjQ1IiAtLT4NCjwhLS0gY2xhc3ModGV4dG8pIC0tPg0KPCEtLSBudW1lcm8gPC0gYXMubnVtZXJpYyh0ZXh0bykgLS0+DQo8IS0tIGNsYXNzKG51bWVybykgICMgVmVyaWZpY2FyIGVsIHRpcG8gZGUgb2JqZXRvIChudW1lcmljKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICoqQ29udmVyc2nDs24gYSBDaGFyYWN0ZXIqKiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgQ29udmVydGlyIG51bWVyaWMgYSBjaGFyYWN0ZXIgLS0+DQo8IS0tIG51bWVybyA8LSAxMjMuNDUgLS0+DQo8IS0tIGNsYXNzKG51bWVybykgIC0tPg0KPCEtLSB0ZXh0byA8LSBhcy5jaGFyYWN0ZXIobnVtZXJvKSAtLT4NCjwhLS0gY2xhc3ModGV4dG8pICAjIFZlcmlmaWNhciBlbCB0aXBvIGRlIG9iamV0byAoY2hhcmFjdGVyKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICoqQ29udmVyc2lvbiBhIGxvZ2ljYWwqKiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgQ29udmVydGlyIG51bWVyaWMgYSBsb2dpY2FsIC0tPg0KPCEtLSBudW1lcm8gPC0gMCAgIyAwIHNlIGNvbnZpZXJ0ZSBlbiBGQUxTRSwgY3VhbHF1aWVyIG90cm8gbsO6bWVybyBzZSBjb252aWVydGUgZW4gVFJVRSAtLT4NCjwhLS0gbG9naWNvIDwtIGFzLmxvZ2ljYWwobnVtZXJvKSAtLT4NCjwhLS0gY2xhc3MobG9naWNvKSAgIyBWZXJpZmljYXIgZWwgdGlwbyBkZSBvYmpldG8gKGxvZ2ljYWwpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gKipDb252ZXJzaW9uIGEgZmFjdG9yKiogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjY29udmVydGlyIGEgZmFjdG9yIC0tPg0KDQo8IS0tIGdlbmVybyA8LSBjKCJGIiwiTSIsIkYiLCJNIiwiRiIsIk0iLCJGIiwiTSIsIkYiLCJNIiwiRiIsIk0iLCJGIiwiTSIsIkYiLCJNIikgLS0+DQo8IS0tIGNsYXNzKGdlbmVybykgLS0+DQo8IS0tIGdlbmVybyA8LSBhcy5mYWN0b3IoZ2VuZXJvKSAtLT4NCjwhLS0gY2xhc3MoZ2VuZXJvKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIEZ1bmNpb25lcyBlbiBSIC0tPg0KDQo8IS0tIExvIHF1ZSB2aW1vcyByZWNpw6luLCBgYXMuZmFjdG9yKClgIHkgYGFzLmNoYXJhY3RlcigpYCBzb24gZnVuY2lvbmVzLiBMYXMgLS0+DQo8IS0tIGZ1bmNpb25lcyBzb24gYmxvcXVlcyBkZSBjw7NkaWdvIHJldXRpbGl6YWJsZXMgcXVlIHJlYWxpemFuIHRhcmVhcyAtLT4NCjwhLS0gZXNwZWPDrWZpY2FzLiBSIHRpZW5lIG11Y2hhcyBmdW5jaW9uZXMgaW5jb3Jwb3JhZGFzIHkgdGFtYmnDqW4gcG9kZXMgY3JlYXIgLS0+DQo8IS0tIGxhcyB0dXlhcyBwcm9waWFzLiAtLT4NCg0KPCEtLSAjIyMjIFN1bWEgLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIEZ1bmNpw7NuIHBhcmEgc3VtYXIgbsO6bWVyb3MgLS0+DQo8IS0tIHN1bWFfcmVzdWx0YWRvIDwtIHN1bSgxLCAyLCAzLCA0LCA1KSAtLT4NCjwhLS0gc3VtYV9yZXN1bHRhZG8gLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAjIyMjIE1lZGlhIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBGdW5jacOzbiBwYXJhIGNhbGN1bGFyIGxhIG1lZGlhIC0tPg0KPCEtLSB2ZWN0b3IgPC0gYygxLCAyLCAzLCA0LCA1KSAtLT4NCjwhLS0gbWVkaWFfcmVzdWx0YWRvIDwtIG1lYW4odmVjdG9yKSAtLT4NCjwhLS0gbWVkaWFfcmVzdWx0YWRvIC0tPg0KDQo8IS0tIHByaW50KHBhc3RlKCJob2xhIGNvbW8gZXN0YXMiKSkgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAjIyBMaWJyZXLDrWFzIGVuIFIgLS0+DQoNCjwhLS0gTGFzIExpYnJlcsOtYXMgKG8gcGFxdWV0ZXMpIGVuIFIgc29uIGNvbmp1bnRvcyBkZSBmdW5jaW9uZXMgeSBkYXRvcyAtLT4NCjwhLS0gYWRpY2lvbmFsZXMgcXVlIGV4dGllbmRlbiBsYXMgY2FwYWNpZGFkZXMgZGUgUi4gUG9kZXMgaW5zdGFsYXIgeSBjYXJnYXIgLS0+DQo8IS0tIGJpYmxpb3RlY2FzIHBhcmEgYWNjZWRlciBhIGZ1bmNpb25hbGlkYWRlcyBhZGljaW9uYWxlcy4gLS0+DQoNCjwhLS0gUGFyYSBpbnN0YWxhciB1bmEgYmlibGlvdGVjYSwgdXRpbGl6YSBsYSBmdW5jacOzbiAtLT4NCjwhLS0gYGluc3RhbGwucGFja2FnZXMoIm5vbWJyZV9kZWxfcGFxdWV0ZSIpYC4gUGFyYSBjYXJnYXIgdW5hIGJpYmxpb3RlY2EsIC0tPg0KPCEtLSB1dGlsaXphIGBsaWJyYXJ5KG5vbWJyZV9kZWxfcGFxdWV0ZSlgLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKSAtLT4NCjwhLS0gbGlicmFyeSh0aWR5dmVyc2UpIC0tPg0KDQo8IS0tICMlPiUgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAjIyBQcsOhY3RpY2EgLS0+DQoNCjwhLS0gMS4gIENyZWFyIGRvcyBgb2JqZXRvc2AgeSBhc2lnbmFybGVzOiBhIHVubyAqKm5vbWJyZXMqKiB5IGEgb3RybyAtLT4NCjwhLS0gICAgICoqKmN1aXQqKiogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIGNvbnNpZ25hIDEgLS0+DQo8IS0tIGVtcHJlc2FzIDwtIGMoIkNhY2hhZmF6IiwiQ29jYSIsImFkaWRkYXMiLCJQZXBzaSIsIjE2IikgLS0+DQo8IS0tIGVtcHJlc2FzIC0tPg0KDQo8IS0tIGN1aXQgPC0gYygyLDMsNCw1LDYsNykgLS0+DQo8IS0tIGN1aXQgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAyLiAgUGFyYSBsYXMgZG9zIHZhcmlhYmxlcyBjcmVhZGFzIGVuIGVsIHB1bnRvIGFudGVyaW9yLCB2ZXJpZmljYXIgbGEgLS0+DQo8IS0tICAgICBjbGFzZSBvIGVsIHRpcG8gZGUgb2JqZXRvOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgY29uc2lnbmEgMiAtLT4NCjwhLS0gY2xhc3MoZW1wcmVzYXMpIC0tPg0KPCEtLSBjbGFzcyhjdWl0KSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIDMuICBDb252ZXJ0aXIgZWwgb2JqZXRvIGVtcHJlc2FzIGVuIHVubyBkZSB0aXBvIG51bcOpcmljby4gwr9RdcOpIHN1Y2VkZT8gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIGNvbnNpZ25hIDMgLS0+DQoNCjwhLS0gZW1wcmVzYXMgPC0gYXMubnVtZXJpYyhlbXByZXNhcykgLS0+DQo8IS0tIGVtcHJlc2FzIC0tPg0KDQo8IS0tIGN1aXQgPC0gYXMuY2hhcmFjdGVyKGN1aXQpIC0tPg0KPCEtLSBjdWl0IC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyBDbGFzZSAyIC0gSW50cm9kdWNjacOzbiBhIFRpZHl2ZXJzZSAtLT4NCg0KPCEtLSBFbiBlc3RhIHNlZ3VuZGEgY2xhc2UsIHByb2Z1bmRpemFyZW1vcyBlbiBsYXMgZXN0cnVjdHVyYXMgZGUgb2JqZXRvcyBlbiAtLT4NCjwhLS0gUiwgYXByZW5kZXJlbW9zIGPDs21vIGltcG9ydGFyIHkgZXhwb3J0YXIgZGF0b3MsIHkgZXhwbG9yYXJlbW9zIGxhcyAtLT4NCjwhLS0gY2FwYWNpZGFkZXMgZGUgdGlkeXZlcnNlIHBhcmEgZWwgYW7DoWxpc2lzIGRlIGRhdG9zLiAtLT4NCg0KPCEtLSAjIyMgRXN0cnVjdHVyYXMgZGUgZGF0b3MgLS0+DQoNCjwhLS0gRW4gUiwgaGF5IHZhcmlhcyBlc3RydWN0dXJhcyBkZSBvYmpldG9zIHF1ZSBwZXJtaXRlbiBhbG1hY2VuYXIgeSAtLT4NCjwhLS0gbWFuaXB1bGFyIGRhdG9zIGRlIG1hbmVyYSBlZmljaWVudGUuIFVuIHZlY3RvciBlcyB1bmEgc2VjdWVuY2lhIGRlIC0tPg0KPCEtLSB2YWxvcmVzIGRlbCBtaXNtbyB0aXBvLiBTaSB2ZW1vcyBgbWlfdmVjdG9yYCB5IG9ic2VydmFtb3MgbGEgY2xhc2UsIC0tPg0KPCEtLSB2ZW1vcyBxdWUgc2kgcG9uZW1vcyBuw7ptZXJvcyB5IHRleHRvIGFkZW50cm8gdmEgYSB0b21hciB0b2RvcyBjb21vIC0tPg0KPCEtLSAiY2FyYWN0ZXIiLiBBZGVtw6FzLCBkZW50cm8gZGUgdW4gdmVjdG9yIHBvZGVtb3MgcG9uZXIgb2JqZXRvcyB5YSBjcmVhZG9zIC0tPg0KPCEtLSBwcmV2aWFtZW50ZS4gLS0+DQoNCjwhLS0gTk9UQTogUGFyYSBjb3JyZXIgZGUgYSAxIGxpbmVhIGRlIGPDs2RpZ28gcG9kZXMgYXByZXRhciBDVFJMK0VOVEVSIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBPYmpldG9zIC0tPg0KPCEtLSBOb21icmUgPC0gIk1hcnRpbmEiIC0tPg0KDQo8IS0tICMgVmVjdG9yZXMgLS0+DQo8IS0tIG1pX3ZlY3RvciA8LSBjKDEsIDIsIDMsIDQsIDUsTm9tYnJlKSAtLT4NCg0KPCEtLSAjIFBhcmEgYm9ycmFyIGVsIGVudG9ybm8gLS0+DQo8IS0tIHJtKE5vbWJyZSkgLS0+DQoNCjwhLS0gIyBDcmVhbW9zIHVuIHZlY3RvciBjb24gY2FyYWN0ZXJlcyB5IHVubyBjb24gbsO6bWVyb3MgLS0+DQo8IS0tIHBhaXNlcyA8LSBjKCJBcmdlbnRpbmEiLCAiQnJhc2lsIiwgIlVydWd1YXkiKSAtLT4NCg0KPCEtLSBudW1lcm9zIDwtIGMoMSwyLDMpIC0tPg0KDQo8IS0tIGNsYXNzKG51bWVyb3MpIC0tPg0KPCEtLSBjbGFzcyhwYWlzZXMpIC0tPg0KPCEtLSBjbGFzcyhtaV92ZWN0b3IpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gTGFzICoqbWF0cmljZXMqKiBzb24gZXN0cnVjdHVyYXMgYmlkaW1lbnNpb25hbGVzIGRlIGVsZW1lbnRvcyBkZWwgbWlzbW8gLS0+DQo8IS0tIHRpcG8gb3JnYW5pemFkb3MgZW4gZmlsYXMgeSBjb2x1bW5hcy4gVG9kb3MgbG9zIGVsZW1lbnRvcyBkZSB1bmEgbWF0cml6IC0tPg0KPCEtLSBkZWJlbiBzZXIgZGVsIG1pc21vIHRpcG8gZGUgZGF0b3MgKG51bcOpcmljb3MsIGNhcmFjdGVyZXMsIGV0Yy4pIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBDcmVhY2nDs24gZGUgdW5hIG1hdHJpeiAtLT4NCjwhLS0gbWlfbWF0cml6IDwtIG1hdHJpeCgxOjYsIG5yb3cgPSAyLCBuY29sID0gMykgLS0+DQo8IS0tIG1pX21hdHJpeiAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICoqRGF0YSBmcmFtZSoqOiBFcyBzaW1pbGFyIGEgdW5hIG1hdHJpeiwgcGVybyBwdWVkZSBjb250ZW5lciBjb2x1bW5hcyAtLT4NCjwhLS0gY29uIGRpZmVyZW50ZXMgdGlwb3MgZGUgZGF0b3MuIEVzIGxhIGVzdHJ1Y3R1cmEgbcOhcyB1dGlsaXphZGEgcGFyYSAtLT4NCjwhLS0gYWxtYWNlbmFyIGNvbmp1bnRvcyBkZSBkYXRvcyB0YWJ1bGFyZXMsIGNvbW8gdW5hIGhvamEgZGUgY8OhbGN1bG8sIGRvbmRlIC0tPg0KPCEtLSBjYWRhIGNvbHVtbmEgcHVlZGUgc2VyIGRlIHVuIHRpcG8gZGlmZXJlbnRlLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgQ3JlYWNpw7NuIGRlIHVuIGRhdGEgZnJhbWUgLS0+DQo8IS0tIG1pX2RhdGFfZnJhbWUgPC0gZGF0YS5mcmFtZSggLS0+DQo8IS0tICAgTm9tYnJlID0gYygiQW5hIiwgIkNhcmxvcyIsICJFdmEiKSwgLS0+DQo8IS0tICAgRWRhZCA9IGMoMjUsIDMwLCAyMikgLS0+DQo8IS0tICkgLS0+DQoNCjwhLS0gIyBPdHJhIGZvcm1hIGRlIGNyZWFyIGRhdGEgZnJhbWUgLS0+DQo8IS0tIHBsYW50YXMgPC0gYygiTGF2YW5kYSIsIk1lbnRhIiwiUGlubyIsIlBvdHVzIikgLS0+DQo8IS0tIHRpcG8gPC0gYygiQXJvbWF0aWNhIiwiRGVjb3JhdGl2YSIsIkFyYm9sIiwiRGUgaW50ZXJpb3IiKSAtLT4NCjwhLS0gdGFtYW5vIDwtIGMoIkdyYW5kZSIsIkNoaWNhIiwiU3VwZXIgR3JhbmRlIiwgIk1pbmkiKSAtLT4NCg0KPCEtLSBwbGFudGl0YXMgPC0gZGF0YS5mcmFtZShwbGFudGFzLHRpcG8sIHRhbWFubykgI2FzLmRhdGEuZnJhbWUgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAqKkxpc3RhOioqIEVzIHVuYSBlc3RydWN0dXJhIHF1ZSBwdWVkZSBjb250ZW5lciBlbGVtZW50b3MgZGUgZGlmZXJlbnRlcyAtLT4NCjwhLS0gdGlwb3MgKG7Dum1lcm9zLCBjYWRlbmFzLCBvdHJhcyBsaXN0YXMsIGV0Yy4pIG9yZ2FuaXphZG9zIGVuIHVuYSAtLT4NCjwhLS0gc2VjdWVuY2lhIHkgcHVlZGVuIHRlbmVyIGRpZmVyZW50ZXMgbG9uZ2l0dWRlcy4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIENyZWFjacOzbiBkZSB1bmEgbGlzdGEgLS0+DQo8IS0tIG1pX2xpc3RhIDwtIGxpc3QoIC0tPg0KPCEtLSAgIE5vbWJyZXMgPSBjKCJBcmlhbmEiLCAiTWFydGluYSIpLCAtLT4NCjwhLS0gICBDdWl0ID0gYygxMjM0NSwgNjc4OTApIC0tPg0KPCEtLSApIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMgSW1wb3J0YWNpw7NuIHkgZXhwb3J0YWNpw7NuIC0tPg0KDQo8IS0tICMjIyBJbXBvcnRhY2nDs24gLS0+DQoNCjwhLS0gRW4gUiwgcHVlZGVzIGltcG9ydGFyIGRhdG9zIGRlc2RlIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3MsIGNvbW8gLS0+DQo8IS0tIENTViwgRXhjZWwsIHkgbcOhcy4gVXRpbGl6YW1vcyBmdW5jaW9uZXMgZGUgcGFxdWV0ZXMgY29tbyByZWFkLmNzdiwgLS0+DQo8IS0tIHJlYWQueGxzeCAtLT4NCg0KPCEtLSBEZXNkZSB1bmEgKip1cmwqKjogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KDQoNCjwhLS0gI0RlZmlubyB1cmwgLS0+DQo8IS0tIHVybCA8LSAoImh0dHBzOi8vZGF0b3NhYmllcnRvcy5kZXNhcnJvbGxvc29jaWFsLmdvYi5hci9kYXRhc2V0L2Q0NTY4N2MwLWYyYmEtNDFkOS05OTg5LTBhZDk3OTkzMDhhZS9yZXNvdXJjZS9jNWM5MjVlMC03Y2UwLTQxZTUtYjNmZi04ZWJiNTFkNGJlNzIvZG93bmxvYWQvcG90ZW5jaWFyLXRyYWJham8tdGl0dWxhcmVzLTIwMjItMTAtMDEuY3N2IikgLS0+DQoNCjwhLS0gcG90ZW5jaWFyX3RyYWJham8gPC0gcmVhZC5jc3YodXJsKSAtLT4NCg0KDQoNCg0KDQoNCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIyBQYXJhIHRyYWJhamFyIGNvbiBzaGVldHMgZGUgZ29vZ2xlIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gIyBQYXJhIHRyYWJhamFyIGNvbiBzaGVldHMgZGUgZ29vZ2xlIGxpYnJhcnkoZ29vZ2xlc2hlZXRzNCkgLS0+DQo8IS0tIGxpYnJhcnkoZ29vZ2xlc2hlZXRzNCkgLS0+DQoNCjwhLS0gI2dzNF9hdXRoKCkgIC0tPg0KPCEtLSAjcmVjb21lbmRhY2lvbmVzIDwtIHJlYWRfc2hlZXQoImxpbmsgZGVsIGdvb2dsZSBzaGVldCIpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gU2kgbm8gc2FiZXMgbyByZWNvcmRhcyBsb3MgYXJndW1lbnRvcyBkZSB1bmEgZnVuY2nDs24sIHBvZGVzIGxsYW1hciBhIGxhIC0tPg0KPCEtLSBmdW5jacOzbiBgaGVscCgpYCBxdWUgdHJhZSBsYSBkb2N1bWVudGFjacOzbiBkZSBsYSBmdW5jacOzbjogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KDQo8IS0tICNoZWxwKHJlYWRfY3N2KSAtLT4NCjwhLS0gIz9yZWFkX2NzdiAtLT4NCjwhLS0gIz8/cmVhZF9zaGVldCAtLT4NCg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gRGVzZGUgYXJjaGl2byAqKmNzdioqOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tIHBvdGVuY2lhcl90cmFiYWpvIDwtIHJlYWQuY3N2KCJkYXRhL3BvdGVuY2lhci10cmFiYWpvLXRpdHVsYXJlcy0yMDIyLTEwLTAxLmNzdiIpIC0tPg0KDQo8IS0tICM/cmVhZF9jc3YgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBEZXNkZSBhcmNoaXZvICoqLnNhdioqOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICMgaW5zdGFsbC5wYWNrYWdlcygiaGF2ZW4iKSAtLT4NCjwhLS0gbGlicmFyeShoYXZlbikgLS0+DQoNCjwhLS0gYmFzZSA8LSByZWFkX3NhdigiZGF0YS9CYXNlLnNhdiIpIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBEZXNkZSBhcmNoaXZvICoqLnhsc3gqKjogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjIGluc3RhbGwucGFja2FnZXMoInJlYWR4bCIpIC0tPg0KPCEtLSBsaWJyYXJ5KHJlYWR4bCkgLS0+DQoNCg0KPCEtLSBwcmVjaW9zX2NvbWJ1c3RpYmxlcyA8LSAgcmVhZF9leGNlbCgiZGF0YS9wcmVjaW9zX3JlczFfMjAxOC54bHN4IikgLS0+DQoNCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIyBFeHBvcnRhY2nDs24gLS0+DQoNCjwhLS0gVGFtYmnDqW4sIHB1ZWRvIHF1ZXJlciBleHBvcnRhciBsb3MgZGF0b3MgdHJhYmFqYWRvcyBlbiBSIGEgb3Ryb3MgLS0+DQo8IS0tIGZvcm1hdG86IC0tPg0KDQo8IS0tIEEgdW4gYXJjaGl2byAqKi5jc3YqKjogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSB3cml0ZS5jc3YocGxhbnRpdGFzLCBwYXN0ZTAoImRhdGEvZGZfcGxhbnRhcy5jc3YiKSwgcm93Lm5hbWVzID0gRiwgZmlsZUVuY29kaW5nID0gIlVURi04IikgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBBIHVuIGFyY2hpdm8gKioueGxzeCoqOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICNpbnN0YWxsLnBhY2thZ2VzKG9wZW54bHN4KSAtLT4NCjwhLS0gbGlicmFyeShvcGVueGxzeCkgLS0+DQoNCjwhLS0gd3JpdGUueGxzeChwbGFudGl0YXMsImRhdGEvcGxhbnRpdGFzLnhsc3giLCByb3dOYW1lcyA9IEYpIC0tPg0KDQoNCjwhLS0gbGlicmFyeSh3cml0ZXhsKSAtLT4NCg0KPCEtLSAjIFBhcmEgZXhwb3J0YXIgYSB1bmEgY2FycGV0YSBhbnRlcmlvciBhIGxhIGRlIG1pIGRpcmVjdG9yaW8gIC0tPg0KPCEtLSAjd3JpdGVfeGxzeChwbGFudGl0YXMsICJ+L0dpdGh1Yi9hcHJlbmRpZW5kb1IvcHJhY3RpY2EvcGxhbnRpdGFzLnhsc3giKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIEEgdW4gYXJjaGl2byAqKi5zYXYqKjogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KDQo8IS0tICMgT3RyYSBmb3JtYSBkZSBhcm1hciBlbCBwYXRoICAtLT4NCg0KPCEtLSBjYXJwZXRhIDwtICJkYXRhLyIgLS0+DQo8IS0tIG5vbWJyZV9hcmNoaXZvIDwtICJtaV9kYXRhX2ZyYW1lLnNhdiIgLS0+DQoNCjwhLS0gI3Bhc3RlMCgpIC0tPg0KPCEtLSAjbGlicmFyeShoYXZlbikgLS0+DQo8IS0tIHdyaXRlX3NhdihtaV9kYXRhX2ZyYW1lLCBwYXN0ZTAoY2FycGV0YSxub21icmVfYXJjaGl2bykpIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBPdHJhcyBmb3JtYXMgZGUgZXhwb3J0YXIgcG9kZXMgZW5jb250cmFybGFzIC0tPg0KPCEtLSBbYXF1w61dKGh0dHBzOi8vci1jb2Rlci5jb20vZXhwb3J0YXItZGF0b3Mtci8pIG8gLS0+DQo8IS0tIFthcXXDrV0oaHR0cHM6Ly9teXJib29rc3AubmV0bGlmeS5hcHAvaW1wb3J0Lmh0bWwpLiAtLT4NCg0KPCEtLSAjIyBSZXN1bWVuIGRlIGxvcyBkYXRvcyAtLT4NCg0KPCEtLSBFcyB1bmEgYnVlbmEgcHLDoWN0aWNhIGFudGVzIGRlIGNvbWVuemFyIGEgYW5hbGl6YXIsIGdyYWZpY2FyLCBldGMsIHZlciAtLT4NCjwhLS0gbGEgZXN0cnVjdHVyYSBkZSBsb3MgZGF0b3MgLS0+DQoNCjwhLS0gUGFyYSBjb25vY2VybGEgcG9kZW1vcyB1c2FyIGBzdHIoKWA6IC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gI2RmIC0tPg0KPCEtLSBzdHIocG90ZW5jaWFyX3RyYWJham8pIC0tPg0KDQo8IS0tICN2ZWN0b3IgLS0+DQo8IS0tIHN0cihwYWlzZXMpIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBQb2RlcyBhY2NlZGVyIGEgbG9zIG5vbWJyZXMgZGUgbG9zIGVsZW1lbnRvcyBjb24gYG5hbWVzKClgOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQoNCjwhLS0gI0RGIC0tPg0KPCEtLSBuYW1lcyhtaV9kYXRhX2ZyYW1lKSAtLT4NCg0KPCEtLSAjU2UgcHVlZGUgbW9kaWZpY2FyIGVsIG5vbWJyZSBkZSBsYXMgY29sdW1uYXMgY29uIGxhIG1pc21hIGZ1bmNpw7NuOiAgLS0+DQoNCjwhLS0gbmFtZXMobWlfZGF0YV9mcmFtZSkgPC0gYygiTm9tYnJlcyIsICJFZGFkZXMiKSAtLT4NCg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBBY2NlZGVyIGEgbGFzIHByaW1lcmFzIHkgw7psdGltYXMgZmlsYXMgY29uIGBoZWFkKClgeSBgdGFpbCgpYDogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjcHJpbWVyYXMgZmlsYXMgLS0+DQo8IS0tIGhlYWQocG90ZW5jaWFyX3RyYWJham8pIC0tPg0KDQo8IS0tICN1bHRpbWFzIGZpbGFzIC0tPg0KPCEtLSB0YWlsKHBvdGVuY2lhcl90cmFiYWpvKSAtLT4NCg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gT2J0ZW5lciB1biByZXN1bWVuIGNvbiBgc3VtbWFyeSgpYDogLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSBzdW1tYXJ5KHBvdGVuY2lhcl90cmFiYWpvKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tIFkgYWNjZWRlciBhIGxvcyB2YWxvcmVzIMO6bmljb3MgbyBkaXN0aW50b3MgY29uIGB1bmlxdWUoKWA6IC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gdW5pcXVlKHBvdGVuY2lhcl90cmFiYWpvJHByb3ZpbmNpYSkgLS0+DQoNCg0KPCEtLSBkdXBsaWNhdGVkKG1pX2RhdGFfZnJhbWUkTm9tYnJlcykgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBFbCBgJGAgcGVybWl0ZSBhY2NlZGVyIGEgdW4gc3ViY29uanVudG8gbyBlbGVtZW50byBkZSB1biBkZiBvIGRlIHVuYSAtLT4NCjwhLS0gbGlzdGEuIFRhbWJpw6luIHNlIHB1ZWRlbiBhY2NlZGVyIGEgdHJhdsOpcyBkZSBgW1tdXWAuIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCg0KPCEtLSB1bmlxdWUocG90ZW5jaWFyX3RyYWJham9bWyJwcm92aW5jaWEiXV0pIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBQb3Igw7psdGltbywgc2UgcHVlZGVuIHZlciBsYSBjYW50aWRhZCBkZSBjYXRlZ29yw61hcyBkZSB1bmEgdmFyaWFibGUgY29uIC0tPg0KPCEtLSBgbGVuZ2h0KClgIG8gYGRpc3RpbmN0KClgIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCg0KPCEtLSBsaWJyYXJ5KGRwbHlyKSAtLT4NCg0KPCEtLSBsZW5ndGgodW5pcXVlKHBvdGVuY2lhcl90cmFiYWpvJHByb3ZpbmNpYSkpICAtLT4NCjwhLS0gZGlzdGluY3QocG90ZW5jaWFyX3RyYWJham8sIHByb3ZpbmNpYSkgLS0+DQoNCg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMgVGlkeXZlcnNlIC0tPg0KDQo8IS0tIFRpZHl2ZXJzZSBlcyB1biBjb25qdW50byBkZSBwYXF1ZXRlcyBlbiBSIGRpc2XDsWFkb3MgcGFyYSBmYWNpbGl0YXIgbGEgLS0+DQo8IS0tIG1hbmlwdWxhY2nDs24sIHZpc3VhbGl6YWNpw7NuIHkgYW7DoWxpc2lzIGRlIGRhdG9zLiBFc3TDoSBiYXNhZG8gZW4gdW4gLS0+DQo8IS0tIGVuZm9xdWUgY29oZXJlbnRlIHkgc2UgY2VudHJhIGVuIGxhIGNyZWFjacOzbiBkZSBjw7NkaWdvIGNsYXJvIHkgbGVnaWJsZSAtLT4NCg0KPCEtLSBJbmNsdXllIHZhcmlvcyBwYXF1ZXRlcyBjbGF2ZSwgY29tbyBkcGx5ciwgZ2dwbG90MiwgdGlkeXIsIHJlYWRyLCBlbnRyZSAtLT4NCjwhLS0gb3Ryb3MuIENhZGEgdW5vIGRlIGVzdG9zIHBhcXVldGVzIHNlIGNlbnRyYSBlbiB1bmEgdGFyZWEgZXNwZWPDrWZpY2EsIC0tPg0KPCEtLSBjb21vIG1hbmlwdWxhY2nDs24gZGUgZGF0b3MsIHZpc3VhbGl6YWNpw7NuLCBsZWN0dXJhIGRlIGRhdG9zIHkgbcOhcy4gLS0+DQo8IS0tIFtkb2N1bWVudGFjacOzbl0oaHR0cHM6Ly93d3cudGlkeXZlcnNlLm9yZy9wYWNrYWdlcy8pLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKSAtLT4NCjwhLS0gbGlicmFyeSh0aWR5dmVyc2UpIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBWYW1vcyBhIHNlZ3VpciB0cmFiYWphbmRvIGNvbiBlbCBkYXRhZnJhbWUgZGVsIHBvdGVuY2lhciB0cmFiYWpvLiAtLT4NCg0KPCEtLSBFbCBwYXF1ZXRlIGBKYW5pdG9yYCBlcyB1bmEgaGVycmFtaWVudGEgw7p0aWwgZW4gUiBxdWUgc2UgdXRpbGl6YSBwYXJhIC0tPg0KPCEtLSBsaW1waWFyIHkgcHJlcHJvY2VzYXIgZGF0b3MgZGUgdW5hIG1hbmVyYSBlZmVjdGl2YS4gU3UgcHJpbmNpcGFsIC0tPg0KPCEtLSBvYmpldGl2byBlcyBmYWNpbGl0YXIgbGEgbGltcGllemEgeSBvcmdhbml6YWNpw7NuIGRlIGNvbmp1bnRvcyBkZSBkYXRvcyAtLT4NCjwhLS0gZGUgdW5hIG1hbmVyYSBtw6FzIHLDoXBpZGEgeSBzZW5jaWxsYS4gTXVjaGFzIHZlY2VzIGxvcyBmb3JtdWxhcmlvcyBvIGRmIC0tPg0KPCEtLSB2aWVuZW4gY29uIG5vbWJyZXMgZGUgY29sdW1uYXMgY29uIGNhcmFjdGVyZXMgZXNwZWNpYWxlcyBvIGVzcGFjaW9zIGxvIC0tPg0KPCEtLSBxdWUgZGlmaWN1bHRhIHVuIHBvY28gc3UgbWFuaXB1bGFjacOzbi4gTGEgZnVuY2nDs24gYGNsZWFuX25hbWVzKClgIGRlIC0tPg0KPCEtLSBlc3RlIHBhcXVldGUgcGVybWl0ZSByZXNvbHZlciBlc2UgcHJvYmxlbWEuIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gI2luc3RhbGwucGFja2FnZSgiamFuaXRvciIpIC0tPg0KPCEtLSBsaWJyYXJ5KGphbml0b3IpICAjSmFuaXRvciBub3MgcGVybWl0ZSBsaW1waWFyIGxvcyBub21icmVzIGRlIGxhcyB2YXJpYWJsZXMgLS0+DQoNCjwhLS0gIyBFamVtcGxvIGRlIGphbml0b3IgLS0+DQo8IS0tICJOb21icmVzIERFIHBlcnNvw7Fhcz8/ICIgPC0gYygiQXJpYW5hIiwiTWFydGluYSIpIC0tPg0KPCEtLSAiQ2FudGlkYWQgZGUgY29tcHV0YURPUkFTPyIgPC0gYygiMSIsIjMiKSAtLT4NCg0KPCEtLSBkZl9jb21wdXMgPC0gZGF0YS5mcmFtZShgQ2FudGlkYWQgZGUgY29tcHV0YURPUkFTP2AsYE5vbWJyZXMgREUgcGVyc2/DsWFzPz8gYCkgLS0+DQoNCjwhLS0gI09ic2VydmFtb3MgZWwgYW50ZXMgLS0+DQo8IS0tIGRmX2NvbXB1cyAtLT4NCg0KDQo8IS0tIGRmX2NvbXB1cyA8LSBkZl9jb21wdXMgJT4lICAtLT4NCjwhLS0gICBjbGVhbl9uYW1lcygpIC0tPg0KDQo8IS0tICMgT2JzZXJ2YW1vcyBlbCBkZXNwdWVzIC0tPg0KPCEtLSBkZl9jb21wdXMgLS0+DQoNCg0KDQo8IS0tIHBvdGVuY2lhcl90cmFiYWpvX2NsZWFuIDwtcG90ZW5jaWFyX3RyYWJham8lPiUgIC0tPg0KPCEtLSAgIGNsZWFuX25hbWVzKCkgI2xpbXBpYW1vcyBsb3Mgbm9tYnJlcyBwYXJhIG5vIHRlbmVyIGVycm9yZXMgcG9yIGxvcyBjYXJhY3RlcmVzIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBQb2RlbW9zIHZlciBsYXMgY29sdW1uYXMgY29tbyBhcHJlbmRpbW9zOiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tIGNvbG5hbWVzKHBvdGVuY2lhcl90cmFiYWpvKSAtLT4NCjwhLS0gI25hbWVzKGJhcnJpb3NfcG9wdWxhcmVzKSAtLT4NCg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMjIFNlbGVjdCgpIC0tPg0KDQo8IS0tIFBlcm1pdGUgc2VsZWNjaW9uYXIgY29sdW1uYXMgZXNwZWPDrWZpY2FzIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zLiBQdWVkZXMgLS0+DQo8IS0tIGVzcGVjaWZpY2FyIGxhcyBjb2x1bW5hcyBxdWUgcXVpZXJlcyBtYW50ZW5lciB1c2FuZG8gc3VzIG5vbWJyZXMgbyAtLT4NCjwhLS0gdXRpbGl6YW5kbyBmdW5jaW9uZXMgY29tbyAqKmBzdGFydHNfd2l0aCgpYCoqLCAqKmBlbmRzX3dpdGgoKWAqKiwgLS0+DQo8IS0tICoqYGNvbnRhaW5zKClgKiosIGVudHJlIG90cmFzIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gdGl0dWxhcmVzIDwtIHBvdGVuY2lhcl90cmFiYWpvICU+JSAgLS0+DQo8IS0tICAgc2VsZWN0KHByb3ZpbmNpYSwgdGl0dWxhcmVzLCBwZXJpb2RvKSAtLT4NCg0KDQo8IS0tIHRpdHVsYXJlcyA8LSBwb3RlbmNpYXJfdHJhYmFqbyAlPiUgIC0tPg0KPCEtLSAgIHNlbGVjdChzdGFydHNfd2l0aCgicHJvdiIpLCAjIGVtcGllemEgY29uIC0tPg0KPCEtLSAgICAgICAgICBjb250YWlucygidGl0dWxhcmVzIiksICMgY29udGllbmUgLS0+DQo8IS0tICAgICAgICAgIGVuZHNfd2l0aCgicmlvZG8iKSkgJT4lICMgdGVybWluYSBjb24gLS0+DQo8IS0tICAgIyBTaSBvYnNlcnZhbW9zIG1lIHRyYWpvIHRhbWJpZW4gcHJvdmluY2lhX2lkICAtLT4NCjwhLS0gICAjRXN0byBzZSBkZWJlIGEgcXVlIGJ1c2PDsyB0b2RhcyBsYXMgdmFyaWFibGVzIHF1ZSBjb21pZW56YW4gY29uIHByb3YgLS0+DQo8IS0tICAgc2VsZWN0KC1wcm92aW5jaWFfaWQpICMgY29uIGVsIHNpbWJvbG8gLSBkZXNlbGVjaW9uYW1vcyB2YXJpYWJsZXMgLS0+DQoNCjwhLS0gI3RhbWJpw6luIHBvZHLDrWFtb3MgYWNjZWRlciBtZWRpYW50ZSBlbCDDrW5kaWNlLCBlbCBvcmRlbiBkZSBlc2FzIGNvbHVtbmFzOiAgLS0+DQoNCjwhLS0gdGl0dWxhcmVzX2RvcyA8LSBwb3RlbmNpYXJfdHJhYmFqbyAlPiUgc2VsZWN0KDc6OCkgLS0+DQoNCjwhLS0gcm0odGl0dWxhcmVzX2RvcykgLS0+DQoNCjwhLS0gZ2MoKSAjbGltcGlhIGxhIG1lbW9yaWEgLS0+DQoNCjwhLS0gI3JtKGxpc3Q9bHMoKSkgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAjIyMgRmlsdGVyKCkgLS0+DQoNCjwhLS0gU2UgdXNhIHBhcmEgc2VsZWNjaW9uYXIgZmlsYXMgZXNwZWPDrWZpY2FzIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zIHNlZ8O6biAtLT4NCjwhLS0gY2llcnRvcyBjcml0ZXJpb3MgbyBjb25kaWNpb25lcy4gUG9yIGVqZW1wbG8sIHB1ZWRlcyBmaWx0cmFyIGZpbGFzIGRvbmRlIC0tPg0KPCEtLSB1bmEgdmFyaWFibGUgc2VhIG1heW9yIHF1ZSBjaWVydG8gdmFsb3IgbyBjdW1wbGEgdW5hIGNvbmRpY2nDs24gbMOzZ2ljYS4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KDQo8IS0tIGJ1ZW5vc19haXJlcyA8LSB0aXR1bGFyZXMgJT4lIGZpbHRlcihwcm92aW5jaWEgPT0gIkJ1ZW5vcyBBaXJlcyIpIC0tPg0KDQo8IS0tIHNpbl9idWVub3NfYWlyZXMgPC0gdGl0dWxhcmVzICU+JSBmaWx0ZXIoIXN0cl9kZXRlY3QocHJvdmluY2lhLCJCdWVub3MgQWlyZXN8W0NjXW9yfCBlc3RlciIpKSAjc3RyaW5nciAtLT4NCg0KPCEtLSAjcmVnZXggIC0tPg0KDQo8IS0tICM/c3RyX2RldGVjdCAtLT4NCg0KPCEtLSB3cml0ZS54bHN4KGJ1ZW5vc19haXJlcywgImRhdGEvYnVlbm9zX2FpcmVzX3BvdGVuY2lhci54bHN4IikgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBgJWluJWAgU2UgdXRpbGl6YSBwYXJhIGJ1c2NhciB0b2RvIGxvIHF1ZSBjb2luY2lkZSBjb24gbG8gcXVlIGVzdMOhIC0tPg0KPCEtLSBkZW50cm8gZGUgLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KDQo8IS0tIHByb3ZpbmNpYXNfbm9hIDwtIGMoIkp1anV5IiwgIlNhbHRhIiwgIlR1Y3Vtw6FuIiwgIkNhdGFtYXJjYSIsICJMYSBSaW9qYSIsICJTYW50aWFnbyBkZWwgRXN0ZXJvIikgLS0+DQoNCjwhLS0gbm9hIDwtIHRpdHVsYXJlcyAlPiUgZmlsdGVyKHByb3ZpbmNpYSVpbiVwcm92aW5jaWFzX25vYSkgLS0+DQoNCjwhLS0gI3RpdHVsYXJlcyAlPiUgZmlsdGVyKG1vbnRoKHBlcmlvZG8pID09IDAzICkgLS0+DQo8IS0tICN0aXR1bGFyZXMgJT4lIGZpbHRlcih0aXR1bGFyZXMgPiAxMDAgKSAtLT4NCjwhLS0gaGVhZChub2EpIC0tPg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMgQXJyYW5nZSgpIC0tPg0KDQo8IS0tIE9yZGVuYSBsYXMgZmlsYXMgZGUgdW4gY29uanVudG8gZGUgZGF0b3MgYmFzw6FuZG9zZSBlbiB1bmEgbyBtw6FzIC0tPg0KPCEtLSBjb2x1bW5hcy4gUHVlZGVzIG9yZGVuYXIgZGUgZm9ybWEgYXNjZW5kZW50ZSBvIGRlc2NlbmRlbnRlIHVzYW5kbyBlbCAtLT4NCjwhLS0gYXJndW1lbnRvICoqYGRlc2MoKWAqKi4gLS0+DQoNCjwhLS0gYGBge3J9IC0tPg0KPCEtLSAjb3JkZW4gYXNjZW5kZW50ZSAtLT4NCjwhLS0gYnVlbm9zX2FpcmVzIDwtIGJ1ZW5vc19haXJlcyAlPiUgYXJyYW5nZShwZXJpb2RvKSAtLT4NCjwhLS0gaGVhZChidWVub3NfYWlyZXMpIC0tPg0KDQoNCjwhLS0gI29yZGVuIGRlc2NlbmRlbnRlIC0tPg0KPCEtLSBidWVub3NfYWlyZXMgPC0gYnVlbm9zX2FpcmVzICU+JSBhcnJhbmdlKGRlc2MocGVyaW9kbykpIC0tPg0KPCEtLSBidWVub3NfYWlyZXMgLS0+DQoNCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIE11dGF0ZSgpIC0tPg0KDQo8IS0tIENyZWEgbnVldmFzIGNvbHVtbmFzIG8gbW9kaWZpY2EgbGFzIGV4aXN0ZW50ZXMsIGFwbGljYW5kbyBvcGVyYWNpb25lcyBhIC0tPg0KPCEtLSBsb3MgZGF0b3MgZXhpc3RlbnRlcy4gUHVlZGVzIGNhbGN1bGFyIG51ZXZvcyB2YWxvcmVzIG8gdHJhbnNmb3JtYXIgLS0+DQo8IS0tIGNvbHVtbmFzIGV4aXN0ZW50ZXMgY29uIGRpZmVyZW50ZXMgZnVuY2lvbmVzLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tIGJ1ZW5vc19haXJlcyA8LSBidWVub3NfYWlyZXMgJT4lICAtLT4NCjwhLS0gICBtdXRhdGUocG9yY2VudGFqZV9wb3JfcHJvdmluY2lhID0gcm91bmQoKHRpdHVsYXJlcy9zdW0oYnVlbm9zX2FpcmVzJHRpdHVsYXJlcykpKjEwMCwzKSkgLS0+DQoNCjwhLS0gI2NvbiByb3VuZCByZWRvbmRlbyBsb3MgbsO6bWVyb3MgLS0+DQoNCjwhLS0gI211ZXN0cm8gbGEgbnVldmEgdmFyaWFibGUgLS0+DQo8IS0tIHNlbGVjdChidWVub3NfYWlyZXMsIHByb3ZpbmNpYSwgcG9yY2VudGFqZV9wb3JfcHJvdmluY2lhKSAtLT4NCg0KPCEtLSBgYGAgLS0+DQoNCjwhLS0gIyMgR3JvdXBfYnkoKSB5IHN1bW1hcmlzZSgpIC0tPg0KDQo8IS0tIDEuICAqKmBzdW1tYXJpc2UoKWAgLyBgc3VtbWFyaXplKClgOioqIFNlIHVzYSBwYXJhIHJlc3VtaXIgZGF0b3MsIC0tPg0KPCEtLSAgICAgY2FsY3VsYXIgZXN0YWTDrXN0aWNhcyByZXN1bWlkYXMgY29tbyBsYSBtZWRpYSwgbGEgc3VtYSwgZWwgcmVjdWVudG8sIC0tPg0KPCEtLSAgICAgZXRjLiwgcGFyYSBncnVwb3MgZXNwZWPDrWZpY29zIGRlIGRhdG9zLiAtLT4NCg0KPCEtLSAyLiAgKipgZ3JvdXBfYnkoKWA6KiogU2UgdXRpbGl6YSBqdW50byBjb24gb3RyYXMgZnVuY2lvbmVzIHBhcmEgcmVhbGl6YXIgLS0+DQo8IS0tICAgICBvcGVyYWNpb25lcyBwb3IgZ3J1cG9zLiBBZ3J1cGEgbG9zIGRhdG9zIHNlZ8O6biB1bmEgbyBtw6FzIHZhcmlhYmxlcyAtLT4NCjwhLS0gICAgIHBhcmEgcmVhbGl6YXIgY8OhbGN1bG9zIHkgb3BlcmFjaW9uZXMgZXNwZWPDrWZpY2FzIGVuIGNhZGEgZ3J1cG8uIC0tPg0KDQo8IS0tIGBgYHtyfSAtLT4NCjwhLS0gI2NhbnRpZGFkIGRlIGZpbGFzIHBvciBhw7FvIC0tPg0KPCEtLSBwb3RlbmNpYXJfcG9yX2FubyA8LSBidWVub3NfYWlyZXMgJT4lIGdyb3VwX2J5KHllYXIocGVyaW9kbykpICU+JSBzdW1tYXJpc2UodGl0dWxhcmVzID0gc3VtKHRpdHVsYXJlcykpIC0tPg0KDQo8IS0tIHBvdGVuY2lhcl9wb3JfYW5vIC0tPg0KPCEtLSAjdG90YWwgIC0tPg0KPCEtLSB0b3RhbF9wb3JfcHJvdmluY2lhIDwtIHRpdHVsYXJlcyAlPiUgIC0tPg0KPCEtLSAgIG11dGF0ZShhbm8gPSB5ZWFyKHBlcmlvZG8pKSAlPiUgZ3JvdXBfYnkocHJvdmluY2lhLCBhbm8pICU+JSBzdW1tYXJpc2UodG90YWwgPSBzdW0odGl0dWxhcmVzKSkgLS0+DQoNCjwhLS0gdG90YWxfcG9yX3Byb3ZpbmNpYSAtLT4NCg0KPCEtLSAjIG4oKSAtLT4NCjwhLS0gdGl0dWxhcmVzICU+JSAgLS0+DQo8IS0tICAgZ3JvdXBfYnkocGVyaW9kbykgJT4lICAtLT4NCjwhLS0gICBzdW1tYXJpc2UoTiA9IG4oKSkgLS0+DQo8IS0tIGBgYCAtLT4NCg0KPCEtLSBMYSBmdW5jacOzbiBgbigpYCBkZWwgcGFxdWVyZSBgZHBseXJgIHBlcm1pdGUgY29udGFyIGVsIG7Dum1lcm8gZGUgLS0+DQo8IS0tIG9ic2VydmFjaW9uZXMgZW4gdW4gZ3J1cG8gLS0+DQoNCjwhLS0gIyMgUmVuYW1lKCkgLS0+DQoNCjwhLS0gTGEgZnVuY2nDs24gKipgcmVuYW1lKClgKiogZW4gZWwgcGFxdWV0ZSAqKmBkcGx5cmAqKiBzZSB1dGlsaXphIHBhcmEgLS0+DQo8IS0tIGNhbWJpYXIgbG9zIG5vbWJyZXMgZGUgbGFzIGNvbHVtbmFzIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zLiBQZXJtaXRlIC0tPg0KPCEtLSByZW5vbWJyYXIgdW5hIG8gdmFyaWFzIGNvbHVtbmFzIGRlIG1hbmVyYSBzZW5jaWxsYSB5IGNsYXJhLiAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tICNub21icmUgbnVldm8gPSBub21icmUgYSBjYW1iaWFyIC0tPg0KDQo8IS0tIGJ1ZW5vc19haXJlcyA8LSBidWVub3NfYWlyZXMgJT4lICAtLT4NCjwhLS0gICByZW5hbWUoImZlY2hhIiA9IHBlcmlvZG8pIC0tPg0KDQo8IS0tIGBgYCAtLT4NCg0KPCEtLSAqKlBpcGVzIGAlPiVgOioqIEF1bnF1ZSBubyBlcyB1bmEgZnVuY2nDs24gZGUgKipgZHBseXJgKiosIGVsIHVzbyBkZSAtLT4NCjwhLS0gcGlwZXMgZXMgY29tw7puIGVuIGNvbWJpbmFjacOzbiBjb24gKipgZHBseXJgKiouIFBlcm1pdGVuIGVuY2FkZW5hciAtLT4NCjwhLS0gb3BlcmFjaW9uZXMgZGUgbWFuZXJhIG3DoXMgbGVnaWJsZSB5IGVmaWNpZW50ZSwgZmFjaWxpdGFuZG8gbGEgLS0+DQo8IS0tIG1hbmlwdWxhY2nDs24gZGUgZGF0b3MgZW4gcGFzb3Mgc2VjdWVuY2lhbGVzIC0tPg0KDQo8IS0tICMjIEdyw6FmaWNvcyAtLT4NCg0KPCEtLSBFbCBwYXF1ZXRlICJlc3F1aXNzZSIgZXMgdW5hIGhlcnJhbWllbnRhIGRpc2XDsWFkYSBwYXJhIGZhY2lsaXRhciBsYSAtLT4NCjwhLS0gZXhwbG9yYWNpw7NuIHkgdmlzdWFsaXphY2nDs24gaW50ZXJhY3RpdmEgZGUgY29uanVudG9zIGRlIGRhdG9zIGVuIFIsIC0tPg0KPCEtLSBlc3BlY2lhbG1lbnRlIMO6dGlsIHBhcmEgdXN1YXJpb3MgcXVlIHByZWZpZXJlbiBpbnRlcmZhY2VzIGdyw6FmaWNhcyAtLT4NCg0KPCEtLSBgYGB7cn0gLS0+DQoNCjwhLS0gI2luc3RhbGwucGFja2FnZXMoImVzcXVpc3NlIikgLS0+DQo8IS0tICNlc3F1aXNzZTo6ZXNxdWlzc2VyKHBvdGVuY2lhcl90cmFiYWpvKSAtLT4NCg0KPCEtLSBnZ3Bsb3QocG90ZW5jaWFyX3RyYWJham8pICsgLS0+DQo8IS0tICAgYWVzKHggPSBwZXJpb2RvLCB3ZWlnaHQgPSB0aXR1bGFyZXMpICsgLS0+DQo8IS0tICAgZ2VvbV9iYXIoZmlsbCA9ICIjRkY2OUI0IikgKyAtLT4NCjwhLS0gICBsYWJzKCAtLT4NCjwhLS0gICAgIHRpdGxlID0gIlBvdGVuY2lhciB0cmFiYWpvIHBvciBwZXJpb2RvIiwgLS0+DQo8IS0tICAgICBzdWJ0aXRsZSA9ICJTdWJ0aXR1bG8iLCAtLT4NCjwhLS0gICAgIGNhcHRpb24gPSAiRnVlbnRlOiBEYXRvcyBhYmllcnRvcyIgLS0+DQo8IS0tICAgKSArIC0tPg0KPCEtLSAgIGNvb3JkX2ZsaXAoKSArIC0tPg0KPCEtLSAgIGdndGhlbWVzOjp0aGVtZV9iYXNlKCkgKyAtLT4NCjwhLS0gICB0aGVtZSggLS0+DQo8IS0tICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMkwsIC0tPg0KPCEtLSAgICAgZmFjZSA9ICJib2xkIiwgLS0+DQo8IS0tICAgICBoanVzdCA9IDAuNSkgLS0+DQo8IS0tICAgKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQo8IS0tICMjIFByw6FjdGljYSAtLT4NCg0KPCEtLSBSZWNvcmTDoSByZWFsaXphcmxvIGVuIGxhIGNhcnBldGEgcHLDoWN0aWNhcyEgLS0+DQoNCjwhLS0gMS4gICBFbGlnZSB1biBkYXRhc2V0LiBQdWVkZXMgZWxlZ2lybG8gZGUgY3VhbHF1aWVyIHNpdGlvIHdlYi4gUG9yIC0tPg0KPCEtLSAgICAgZWplbXBsbzogZGF0b3MuZ29iLmFyIC0tPg0KDQo8IS0tIDIuICBJbXBvcnRhIGVsIGFyY2hpdm8geSBnZW5lcmEgdW4gb2JqZXRvIHF1ZSBsbyBjb250ZW5nYSAtLT4NCg0KPCEtLSAgICAgYGBge3J9IC0tPg0KPCEtLSAgICAgIyByZWFkLmNzdigpIC0tPg0KDQoNCjwhLS0gICAgIGBgYCAtLT4NCg0KPCEtLSAzLiAgQ3JlYSB1bmEgbnVldmEgY29sdW1uYSBvIGdlbmVyw6EgdW5hIHN1bWFyaXphY2nDs24gYWdydXBhZGEgLS0+DQoNCjwhLS0gICAgIGBgYHtyfSAtLT4NCjwhLS0gICAgICMgbXV0YXRlKCkgLS0+DQo8IS0tICAgICAjIGdyb3VwX2J5KCkgeSBzdW1tYXJpc2UoKSAtLT4NCg0KPCEtLSAgICAgYGBgIC0tPg0KDQo8IS0tIDQuICBDb24gZWwgdXNvIGRlIGVzcXVpc3NlLCBnZW5lcmEgdW4gZ3LDoWZpY28gLS0+DQoNCjwhLS0gICAgIGBgYHtyfSAtLT4NCjwhLS0gICAgICNlc3F1aXNzZTo6ZXNxdWlzc2VyKCkgLS0+DQo8IS0tICAgICBgYGAgLS0+DQo=