JwUZVsjxMpZTmoHVAAAMRwAAAAAAAAAAFAIxzgUCBgBib290IHNjcmlwdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD8AAAAAaWYgJHtmc31sb2FkICR7ZHR5cGV9ICR7ZGlza306MSAxMDgwMDAwMCB1RW52LnR4dCA7IHRoZW4KICAgIGVudiBpbXBvcnQgLXQgMTA4MDAwMDAgJGZpbGVzaXplCmVsc2UKICAgIHNldGVudiBib290YXJncyBlbmFibGVfd2FpdF9tb2RlPW9mZgpmaQoKc2V0ZW52IG5leHRjb24gMDsKCmkyYyBkZXYgMSA7CmlmIGkyYyBwcm9iZSAweDUwIDsgdGhlbgoJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyB2aWRlbz1teGNmYiR7bmV4dGNvbn06ZGV2PWhkbWksMTI4MHg3MjBNQDYwLGlmPVJHQjI0CglzZXRlbnYgZmJtZW0gImZibWVtPTI4TSI7CglzZXRleHByIG5leHRjb24gJG5leHRjb24gKyAxCmVsc2UKCWVjaG8gIi0tLS0tLSBubyBIRE1JIG1vbml0b3IiOwpmaQoKaTJjIGRldiAyCmlmIGkyYyBwcm9iZSAweDA0IDsgdGhlbgoJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyB2aWRlbz1teGNmYiR7bmV4dGNvbn06ZGV2PWxkYixMREItWEdBLGlmPVJHQjY2NgoJaWYgdGVzdCAiMCIgLWVxICRuZXh0Y29uOyB0aGVuCgkJc2V0ZW52IGZibWVtICJmYm1lbT0xME0iOwoJZWxzZQoJCXNldGVudiBmYm1lbSAke2ZibWVtfSwxME0KCWZpCglzZXRleHByIG5leHRjb24gJG5leHRjb24gKyAxCmVsc2UKCWVjaG8gIi0tLS0tLSBubyBGcmVlc2NhbGUgZGlzcGxheSI7CmZpCgppZiBpMmMgcHJvYmUgMHgzOCA7IHRoZW4KCWlmIGl0ZXN0LnMgInhMREItV1hHQSIgPT0gIngkcGFuZWwiOyB0aGVuCgkJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyB2aWRlbz1teGNmYiR7bmV4dGNvbn06ZGV2PWxkYiwxMjgweDgwME1SQDYwLGlmPVJHQjY2NgoJCXNjcmVlbnJlcz0xMjgwLDgwMAoJZWxzZQoJCXNldGVudiBib290YXJncyAkYm9vdGFyZ3MgdmlkZW89bXhjZmIke25leHRjb259OmRldj1sZGIsMTAyNHg2MDBNQDYwLGlmPVJHQjY2NgoJCXNjcmVlbnJlcz0xMDI0LDYwMAoJZmkKCWlmIHRlc3QgIjAiIC1lcSAkbmV4dGNvbjsgdGhlbgoJCXNldGVudiBmYm1lbSAiZmJtZW09MTBNIjsKCWVsc2UKCQlzZXRlbnYgZmJtZW0gJHtmYm1lbX0sMTBNCglmaQoJc2V0ZXhwciBuZXh0Y29uICRuZXh0Y29uICsgMQoJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyBmdDV4MDZfdHMuc2NyZWVucmVzPSRzY3JlZW5yZXMKCWlmIGl0ZXN0LnMgIngiIC1uZSAieCRjYWxpYnJhdGlvbiIgOyB0aGVuCgkJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyBmdDV4MDZfdHMuY2FsaWJyYXRpb249JGNhbGlicmF0aW9uCglmaQplbHNlCgllY2hvICItLS0tLS0gbm8gZnQ1eDA2IHRvdWNoIGNvbnRyb2xsZXIiOwpmaQoKaWYgaTJjIHByb2JlIDB4NDggOyB0aGVuCglpZiBpdGVzdC5zICJ4cXZnYSIgPT0gIngkcGFuZWwiIDsgdGhlbgoJCWRpc3BsYXk9IjMyMHgyNDBNUkA2MCxpZj1SR0IyNCI7CgllbHNlCgkJZGlzcGxheT0iQ0xBQS1XVkdBLGlmPVJHQjY2NiI7CglmaQoJc2V0ZW52IGJvb3RhcmdzICRib290YXJncyB2aWRlbz1teGNmYiR7bmV4dGNvbn06ZGV2PWxjZCwkZGlzcGxheQoJaWYgdGVzdCAiMCIgLWVxICRuZXh0Y29uOyB0aGVuCgkJc2V0ZW52IGZibWVtICJmYm1lbT0xME0iOwoJZWxzZQoJCXNldGVudiBmYm1lbSAke2ZibWVtfSwxME0KCWZpCglzZXRleHByIG5leHRjb24gJG5leHRjb24gKyAxCmVsc2UKCWVjaG8gIi0tLS0tLSBubyA4MDB4NDgwIGRpc3BsYXkiOwpmaQoKd2hpbGUgdGVzdCAiNCIgLW5lICRuZXh0Y29uIDsgZG8KCXNldGVudiBib290YXJncyAkYm9vdGFyZ3MgdmlkZW89bXhjZmIke25leHRjb259Om9mZiA7CglzZXRleHByIG5leHRjb24gJG5leHRjb24gKyAxIDsKZG9uZQoKc2V0ZW52IGJvb3RhcmdzICRib290YXJncyAkZmJtZW0Kc2V0ZW52IGJvb3RhcmdzICIkYm9vdGFyZ3MgY29uc29sZT10dHlteGMxLDExNTIwMCB2bWFsbG9jPTQwME0gY29uc29sZWJsYW5rPTAgcm9vdHdhaXQiCgppZiBpdGVzdC5zIHgkYm9vdHBhcnQgPT0geCA7IHRoZW4KCWJvb3RwYXJ0PTEKZmkKCmlmIHRlc3QgInNhdGEiID0gIiR7ZHR5cGV9IiA7IHRoZW4KCXNldGVudiBib290YXJncyAiJGJvb3RhcmdzIHJvb3Q9L2Rldi9zZGEkYm9vdHBhcnQiIDsKZWxzZQogICAgICAgIGlmIHRlc3QgInVzYiIgPSAiJHtkdHlwZX0iIDsgdGhlbgogICAgICAgICAgICAgICAgc2V0ZW52IGJvb3RhcmdzICIkYm9vdGFyZ3Mgcm9vdD0vZGV2L3NkYSRib290cGFydCIgOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNldGVudiBib290YXJncyAiJGJvb3RhcmdzIHJvb3Q9L2Rldi9tbWNibGswcCRib290cGFydCIgOwogICAgICAgIGZpCmZpCgpkdGJuYW1lPSJpbXg2IjsKaWYgaXRlc3QucyB4NlMgIT0gIngkY3B1IiA7IHRoZW4KCWR0Ym5hbWU9JHtkdGJuYW1lfXEtOwplbHNlCglkdGJuYW1lPSR7ZHRibmFtZX1zLTsKZmkKCmlmIGl0ZXN0LnMgeCA9PSAieCRib2FyZCIgOyB0aGVuCglib2FyZD1zYWJyZWxpdGUKZmkKZHRibmFtZT0ke2R0Ym5hbWV9JHtib2FyZH0uZHRiOwoKaWYgaXRlc3QucyB4ID09IHgke2Jvb3RkaXJ9IDsgdGhlbgoJYm9vdGRpcj0vYm9vdC8KZmkKCmlmICR7ZnN9bG9hZCAke2R0eXBlfSAke2Rpc2t9OjEgMTIwMDAwMDAgJHtib290ZGlyfSRkdGJuYW1lIDsgdGhlbgoJaGF2ZWR0Yj0xOwoJc2V0ZW52IGZkdF9hZGRyIDB4MTEwMDAwMDAKCXNldGVudiBmZHRfaGlnaCAweGZmZmZmZmZmCmVsc2UKCWhhdmVkdGI9CmZpCgppZiBpdGVzdC5zIHggPT0geCRhbGxvd19ub25jZWEgOyB0aGVuCglzZXRlbnYgYm9vdGFyZ3MgJGJvb3RhcmdzIG14Y19oZG1pLm9ubHlfY2VhPTE7CgllY2hvICJvbmx5IENFQSBtb2RlcyBhbGxvd2VkIG9uIEhETUkgcG9ydCI7CmVsc2UKICAgICAgICBzZXRlbnYgYm9vdGFyZ3MgJGJvb3RhcmdzIG14Y19oZG1pLm9ubHlfY2VhPTA7CiAgICAgICAgZWNobyAibm9uLUNFQSBtb2RlcyBhbGxvd2VkIG9uIEhETUksIGF1ZGlvIG1heSBiZSBhZmZlY3RlZCI7CmZpCgppZiAke2ZzfWxvYWQgJHtkdHlwZX0gJHtkaXNrfToxIDEwODAwMDAwICR7Ym9vdGRpcn11SW1hZ2UgOyB0aGVuCglpZiBpdGVzdC5zIHgkaGF2ZWR0YiA9PSB4IDsgdGhlbgoJCWJvb3RtIDEwODAwMDAwIDsKCWVsc2UKCQlib290bSAxMDgwMDAwMCAtIDEyMDAwMDAwCglmaQpmaQplY2hvICJFcnJvciBsb2FkaW5nIGtlcm5lbCBpbWFnZSIK