IiBWaW0gc3ludGF4IGZpbGUKIiBMYW5ndWFnZToJRm9ydHJhbjk1IChhbmQgRm9ydHJhbjkwLCBGb3J0cmFuNzcsIEYgYW5kIGVsZjkwKQoiIFZlcnNpb246CTAuODkKIiBMYXN0IENoYW5nZToJMjAxMCBKdWx5IDIxCiIgTWFpbnRhaW5lcjoJQWppdCBKLiBUaGFra2FyIChhaml0IEFUIHVuYi5jYSk7IDxodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvPgoiIFVzYWdlOglGb3IgaW5zdHJ1Y3Rpb25zLCBkbyA6aGVscCBmb3J0cmFuLXN5bnRheCBmcm9tIFZpbQoiIENyZWRpdHM6CiIgIFZlcnNpb24gMC4xIHdhcyBiYXNlZCBvbiB0aGUgZm9ydHJhbiA3NyBzeW50YXggZmlsZSBieSBNYXJpbyBFdXNlYmlvIGFuZAoiICBQcmViZW4gR3VsZGJlcmcuIFVzZWZ1bCBzdWdnZXN0aW9ucyB3ZXJlIG1hZGUgYnk6IEFuZHJlaiBQYW5qa292LAoiICBCcmFtIE1vb2xlbmFhciwgVGhvbWFzIE9sc2VuLCBNaWNoYWVsIFN0ZXJuYmVyZywgQ2hyaXN0aWFuIFJlaWxlLAoiICBXYWx0ZXIgRGlldWRvbm7pLCBBbGV4YW5kZXIgV2FnbmVyLCBSb21hbiBCZXJ0bGUsIENoYXJsZXMgUmVuZGxlbWFuLAoiICBBbmRyZXcgR3JpZmZpdGhzLCBKb2UgS3JhaG4sIGFuZCBIZW5kcmlrIE1lcnguCgoiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwoiIEZvciB2ZXJzaW9uIDYueDogUXVpdCBpZiBhIHN5bnRheCBmaWxlIGlzIGFscmVhZHkgbG9hZGVkCmlmIHZlcnNpb24gPCA2MDAKICBzeW50YXggY2xlYXIKZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgZmluaXNoCmVuZGlmCgoiIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9IGZvcnRyYW5fZGlhbGVjdCBpZiBzZXQgY29ycmVjdGx5IGJ5IHVzZXIKaWYgZXhpc3RzKCJmb3J0cmFuX2RpYWxlY3QiKQogIGlmIGZvcnRyYW5fZGlhbGVjdCA9fiAnXDxcKGZcKDlbMDVdXHw3N1wpXHxlbGZcfEZcKVw+JwogICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gbWF0Y2hzdHIoZm9ydHJhbl9kaWFsZWN0LCdcPFwoZlwoOVswNV1cfDc3XClcfGVsZlx8RlwpXD4nKQogIGVsc2UKICAgIGVjaG9obCBXYXJuaW5nTXNnIHwgZWNobyAiVW5rbm93biB2YWx1ZSBvZiBmb3J0cmFuX2RpYWxlY3QiIHwgZWNob2hsIE5vbmUKICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJ1bmtub3duIgogIGVuZGlmCmVsc2UKICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAidW5rbm93biIKZW5kaWYKCiIgZm9ydHJhbl9kaWFsZWN0IG5vdCBzZXQgb3Igc2V0IGluY29ycmVjdGx5IGJ5IHVzZXIsCmlmIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJ1bmtub3duIgogICIgc2V0IGI6Zm9ydHJhbl9kaWFsZWN0IGZyb20gZGlyZWN0aXZlIGluIGZpcnN0IHRocmVlIGxpbmVzIG9mIGZpbGUKICBsZXQgYjpmb3J0cmFuX3JldHlwZSA9IGdldGxpbmUoMSkuIiAiLmdldGxpbmUoMikuIiAiLmdldGxpbmUoMykKICBpZiBiOmZvcnRyYW5fcmV0eXBlID1+ICdcPGZvcnRyYW5fZGlhbGVjdFxzKj1ccypGXD4nCiAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiRiIKICBlbHNlaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqZWxmXD4nCiAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiZWxmIgogIGVsc2VpZiBiOmZvcnRyYW5fcmV0eXBlID1+ICdcPGZvcnRyYW5fZGlhbGVjdFxzKj1ccypmOTBcPicKICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJmOTAiCiAgZWxzZWlmIGI6Zm9ydHJhbl9yZXR5cGUgPX4gJ1w8Zm9ydHJhbl9kaWFsZWN0XHMqPVxzKmY5NVw+JwogICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gImY5NSIKICBlbHNlaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqZjc3XD4nCiAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiZjc3IgogIGVsc2UKICAgICIgbm8gZGlyZWN0aXZlIGZvdW5kLCBzbyBhc3N1bWUgZjk1CiAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiZjk1IgogIGVuZGlmCiAgdW5sZXQgYjpmb3J0cmFuX3JldHlwZQplbmRpZgoKIiBDaG9vc2UgYmV0d2VlbiBmaXhlZCBhbmQgZnJlZSBzb3VyY2UgZm9ybSBpZiB0aGlzIGhhc24ndCBiZWVuIGRvbmUgeWV0CmlmICFleGlzdHMoImI6Zm9ydHJhbl9maXhlZF9zb3VyY2UiKQogIGlmIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJlbGYiIHx8IGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJGIgogICAgIiBlbGYgYW5kIEYgcmVxdWlyZSBmcmVlIHNvdXJjZSBmb3JtCiAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDAKICBlbHNlaWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gImY3NyIKICAgICIgZjc3IHJlcXVpcmVzIGZpeGVkIHNvdXJjZSBmb3JtCiAgICBsZXQgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9IDEKICBlbHNlaWYgZXhpc3RzKCJmb3J0cmFuX2ZyZWVfc291cmNlIikKICAgICIgVXNlciBndWFyYW50ZWVzIGZyZWUgc291cmNlIGZvcm0gZm9yIGFsbCBmOTAgYW5kIGY5NSBmaWxlcwogICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAwCiAgZWxzZWlmIGV4aXN0cygiZm9ydHJhbl9maXhlZF9zb3VyY2UiKQogICAgIiBVc2VyIGd1YXJhbnRlZXMgZml4ZWQgc291cmNlIGZvcm0gZm9yIGFsbCBmOTAgYW5kIGY5NSBmaWxlcwogICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCiAgZWxzZQogICAgIiBmOTAgYW5kIGY5NSBhbGxvdyBib3RoIGZpeGVkIGFuZCBmcmVlIHNvdXJjZSBmb3JtLgogICAgIiBBc3N1bWUgZml4ZWQgc291cmNlIGZvcm0gdW5sZXNzIHNpZ25zIG9mIGZyZWUgc291cmNlIGZvcm0KICAgICIgYXJlIGRldGVjdGVkIGluIHRoZSBmaXJzdCBmaXZlIGNvbHVtbnMgb2YgdGhlIGZpcnN0IHM6bG1heCBsaW5lcy4KICAgICIgRGV0ZWN0aW9uIGJlY29tZXMgbW9yZSBhY2N1cmF0ZSBhbmQgdGltZS1jb25zdW1pbmcgaWYgbW9yZSBsaW5lcwogICAgIiBhcmUgY2hlY2tlZC4gSW5jcmVhc2UgdGhlIGxpbWl0IGJlbG93IGlmIHlvdSBrZWVwIGxvdHMgb2YgY29tbWVudHMgYXQKICAgICIgdGhlIHZlcnkgdG9wIG9mIGVhY2ggZmlsZSBhbmQgeW91IGhhdmUgYSBmYXN0IGNvbXB1dGVyLgogICAgbGV0IHM6bG1heCA9IDUwMAogICAgaWYgKCBzOmxtYXggPiBsaW5lKCIkIikgKQogICAgICBsZXQgczpsbWF4ID0gbGluZSgiJCIpCiAgICBlbmRpZgogICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCiAgICBsZXQgczpsbj0xCiAgICB3aGlsZSBzOmxuIDw9IHM6bG1heAogICAgICBsZXQgczp0ZXN0ID0gc3RycGFydChnZXRsaW5lKHM6bG4pLDAsNSkKICAgICAgaWYgczp0ZXN0ICF+ICdeW0NjKl0nICYmIHM6dGVzdCAhfiAnXiAqWyEjXScgJiYgczp0ZXN0ID1+ICdbXiAwLTlcdF0nICYmIHM6dGVzdCAhfiAnXlsgMC05XSpcdCcKCWxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAoJYnJlYWsKICAgICAgZW5kaWYKICAgICAgbGV0IHM6bG4gPSBzOmxuICsgMQogICAgZW5kd2hpbGUKICAgIHVubGV0ISBzOmxtYXggczpsbiBzOnRlc3QKICBlbmRpZgplbmRpZgoKc3luIGNhc2UgaWdub3JlCgppZiBiOmZvcnRyYW5fZGlhbGVjdCAhPT8gImY3NyIKICBpZiB2ZXJzaW9uID49IDYwMAogICAgaWYgYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9PSAxCiAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZQkiXlxzXHs2LH1cenNcYVx3Klx6ZVxzKjoiCiAgICBlbHNlCiAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZQkiXlxzKlx6c1xhXHcqXHplXHMqOiIKICAgIGVuZGlmCiAgICBpZiBleGlzdHMoImZvcnRyYW5fbW9yZV9wcmVjaXNlIikKICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lICJcKFw8ZW5kXHMqZG9cc1wrXClcQDw9XGFcdyoiCiAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZSAiXChcPGVuZFxzKmlmXHNcK1wpXEA8PVxhXHcqIgogICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUgIlwoXDxlbmRccypzZWxlY3Rcc1wrXClcQDw9XGFcdyoiCiAgICBlbmRpZgogIGVsc2UKICAgIGlmIGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMQogICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUJIl5cc1x7Nix9XGFcdypccyo6IgogICAgZWxzZQogICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUJIl5ccypcYVx3KlxzKjoiCiAgICBlbmRpZgogIGVuZGlmCmVuZGlmCgpzeW4gbWF0Y2ggICBmb3J0cmFuVW5pdEhlYWRlcgkiXDxlbmRcPiIKCnN5biBtYXRjaCBmb3J0cmFuVHlwZQkJIlw8Y2hhcmFjdGVyXD4iCnN5biBtYXRjaCBmb3J0cmFuVHlwZQkJIlw8Y29tcGxleFw+IgpzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJcPGludGVnZXJcPiIKc3luIGtleXdvcmQgZm9ydHJhblR5cGUJCWludHJpbnNpYwpzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJcPGltcGxpY2l0XD4iCnN5biBrZXl3b3JkIGZvcnRyYW5TdHJ1Y3R1cmUJZGltZW5zaW9uCnN5biBrZXl3b3JkIGZvcnRyYW5TdG9yYWdlQ2xhc3MJcGFyYW1ldGVyIHNhdmUKc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPHN1YnJvdXRpbmVcPiIKc3luIGtleXdvcmQgZm9ydHJhbkNhbGwJCWNhbGwKc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGZ1bmN0aW9uXD4iCnN5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxwcm9ncmFtXD4iCnN5biBrZXl3b3JkIGZvcnRyYW5LZXl3b3JkCXJldHVybiBzdG9wCnN5biBrZXl3b3JkIGZvcnRyYW5Db25kaXRpb25hbAllbHNlIHRoZW4Kc3luIG1hdGNoIGZvcnRyYW5Db25kaXRpb25hbAkiXDxpZlw+IgpzeW4gbWF0Y2ggZm9ydHJhblJlcGVhdAkJIlw8ZG9cPiIKCnN5biBrZXl3b3JkIGZvcnRyYW5Ub2RvCQljb250YWluZWQgdG9kbyBmaXhtZQoKIkNhdGNoIGVycm9ycyBjYXVzZWQgYnkgdG9vIG1hbnkgcmlnaHQgcGFyZW50aGVzZXMKc3luIHJlZ2lvbiBmb3J0cmFuUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5QYXJlbkVycm9yLEBmb3J0cmFuQ29tbWVudEdyb3VwLGNJbmNsdWRlZCxAc3BlbGwKc3luIG1hdGNoICBmb3J0cmFuUGFyZW5FcnJvciAgICIpIgoKc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXC5ccypuXD1lcXZccypcLiIKc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXC5ccypcKGFuZFx8b3JcfG5vdFwpXHMqXC4iCnN5biBtYXRjaCBmb3J0cmFuT3BlcmF0b3IJIlwoK1x8LVx8L1x8XCpcKSIKCnN5biBtYXRjaCBmb3J0cmFuQm9vbGVhbgkiXC5ccypcKHRydWVcfGZhbHNlXClccypcLiIKCnN5biBrZXl3b3JkIGZvcnRyYW5SZWFkV3JpdGUJYmFja3NwYWNlIGNsb3NlIGVuZGZpbGUgaW5xdWlyZSBvcGVuIHByaW50IHJlYWQgcmV3aW5kIHdyaXRlCgoiSWYgdGFicyBhcmUgYWxsb3dlZCB0aGVuIHRoZSBsZWZ0IG1hcmdpbiBjaGVja3MgZG8gbm90IHdvcmsKaWYgZXhpc3RzKCJmb3J0cmFuX2hhdmVfdGFicyIpCiAgc3luIG1hdGNoIGZvcnRyYW5UYWIJCSJcdCIgIHRyYW5zcGFyZW50CmVsc2UKICBzeW4gbWF0Y2ggZm9ydHJhblRhYgkJIlx0IgplbmRpZgoKc3luIGtleXdvcmQgZm9ydHJhbklPCQlhY2Nlc3MgYmxhbmsgZGlyZWN0IGV4aXN0IGZpbGUgZm10IGZvcm0gZm9ybWF0dGVkIGlvc3RhdCBuYW1lIG5hbWVkIG5leHRyZWMgbnVtYmVyIG9wZW5lZCByZWMgcmVjbCBzZXF1ZW50aWFsIHN0YXR1cyB1bmZvcm1hdHRlZCB1bml0CgpzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWFsb2cgYWxvZzEwIGFtYXgwIGFtYXgxIGFtaW4wIGFtaW4xIGFtb2QgY2FicyBjY29zIGNleHAgY2xvZyBjc2luIGNzcXJ0IGRhYnMgZGFjb3MgZGFzaW4gZGF0YW4gZGF0YW4yIGRjb3MgZGNvc2ggZGRpbSBkZXhwIGRpbnQgZGxvZyBkbG9nMTAgZG1heDEgZG1pbjEgZG1vZCBkbmludCBkc2lnbiBkc2luIGRzaW5oIGRzcXJ0IGR0YW4gZHRhbmggZmxvYXQgaWFicyBpZGltIGlkaW50IGlkbmludCBpZml4IGlzaWduIG1heDAgbWF4MSBtaW4wIG1pbjEgc25nbAoKIiBJbnRyaW5zaWNzIHByb3ZpZGVkIGJ5IHNvbWUgdmVuZG9ycwpzeW4ga2V5d29yZCBmb3J0cmFuRXh0cmFJbnRyaW5zaWMJYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hIGVyZiBlcmZjIGdhbW1hIGlxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgcW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oCgpzeW4ga2V5d29yZCBmb3J0cmFuNzdJbnRyaW5zaWMJYWJzIGFjb3MgYWltYWcgYWludCBhbmludCBhc2luIGF0YW4gYXRhbjIgY2hhciBjbXBseCBjb25qZyBjb3MgY29zaCBleHAgaWNoYXIgaW5kZXggaW50IGxvZyBsb2cxMCBtYXggbWluIG5pbnQgc2lnbiBzaW4gc2luaCBzcXJ0IHRhbiB0YW5oCnN5biBtYXRjaCBmb3J0cmFuNzdJbnRyaW5zaWMJIlw8bGVuXHMqWygsXSJtZT1zKzMKc3luIG1hdGNoIGZvcnRyYW43N0ludHJpbnNpYwkiXDxyZWFsXHMqKCJtZT1zKzQKc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXDxpbXBsaWNpdFxzXCtyZWFsIgpzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJeXHMqcmVhbFw+IgpzeW4gbWF0Y2ggZm9ydHJhbjkwSW50cmluc2ljCSJcPGxvZ2ljYWxccyooIm1lPXMrNwpzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJcPGltcGxpY2l0XHNcK2xvZ2ljYWwiCnN5biBtYXRjaCBmb3J0cmFuVHlwZQkJIl5ccypsb2dpY2FsXD4iCgoiTnVtYmVycyBvZiB2YXJpb3VzIHNvcnRzCiIgSW50ZWdlcnMKc3luIG1hdGNoIGZvcnRyYW5OdW1iZXIJZGlzcGxheSAiXDxcZFwrXChfXGFcdypcKVw9XD4iCiIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGEgZGVjaW1hbCBwb2ludApzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0Tm9EZWMJZGlzcGxheQkiXDxcZFwrW2RlcV1bLStdXD1cZFwrXChfXGFcdypcKVw9XD4iCiIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBzdGFydGluZyB3aXRoIGEgZGVjaW1hbCBwb2ludApzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0SW5pRGVjCWRpc3BsYXkJIlwuXGRcK1woW2RlcV1bLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgoiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgbm8gZGlnaXRzIGFmdGVyIGRlY2ltYWwKc3luIG1hdGNoIGZvcnRyYW5GbG9hdEVuZERlYwlkaXNwbGF5CSJcPFxkXCtcLlwoW2RlcV1bLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgoiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgRCBvciBRIGV4cG9uZW50cwpzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0REV4cAlkaXNwbGF5CSJcPFxkXCtcLlxkXCtcKFtkcV1bLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgoiIGZsb2F0aW5nIHBvaW50IG51bWJlcgpzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0CWRpc3BsYXkJIlw8XGRcK1wuXGRcK1woZVstK11cPVxkXCtcKVw9XChfXGFcdypcKVw9XD4iCiIgTnVtYmVycyBpbiBmb3JtYXRzCnN5biBtYXRjaCBmb3J0cmFuRm9ybWF0U3BlYwlkaXNwbGF5CSJcZCpmXGRcK1wuXGRcKyIKc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkKmVbc25dXD1cZFwrXC5cZFwrXChlXGQrXD5cKVw9IgpzeW4gbWF0Y2ggZm9ydHJhbkZvcm1hdFNwZWMJZGlzcGxheQkiXGQqXChkXHxxXHxnXClcZFwrXC5cZFwrXChlXGQrXClcPSIKc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkXCt4XD4iCiIgVGhlIG5leHQgbWF0Y2ggY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCB3b3VsZCBwaWNrIHVwIGlkZW50aWZpZXJzIGFzIHdlbGwKIiBzeW4gbWF0Y2ggZm9ydHJhbkZvcm1hdFNwZWMJZGlzcGxheQkiXDxcKGFcfGlcKVxkXCsiCgoiIE51bWJlcnMgYXMgbGFiZWxzCnN5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXlxkXHsxLDV9XHMibWU9ZS0xCnN5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXiBcZFx7MSw0fVxzIm1zPXMrMSxtZT1lLTEKc3luIG1hdGNoIGZvcnRyYW5MYWJlbE51bWJlcglkaXNwbGF5CSJeICBcZFx7MSwzfVxzIm1zPXMrMixtZT1lLTEKc3luIG1hdGNoIGZvcnRyYW5MYWJlbE51bWJlcglkaXNwbGF5CSJeICAgXGRcZFw9XHMibXM9cyszLG1lPWUtMQpzeW4gbWF0Y2ggZm9ydHJhbkxhYmVsTnVtYmVyCWRpc3BsYXkJIl4gICAgXGRccyJtcz1zKzQsbWU9ZS0xCgppZiB2ZXJzaW9uID49IDYwMCAmJiBleGlzdHMoImZvcnRyYW5fbW9yZV9wcmVjaXNlIikKICAiIE51bWJlcnMgYXMgdGFyZ2V0cwogIHN5biBtYXRjaCBmb3J0cmFuVGFyZ2V0CWRpc3BsYXkJIlwoXDxpZlxzKiguXCspXHMqXClcQDw9XChcZFwrXHMqLFxzKlwpXHsyfVxkXCtcPiIKICBzeW4gbWF0Y2ggZm9ydHJhblRhcmdldAlkaXNwbGF5CSJcKFw8ZG9cc1wrXClcQDw9XGRcK1w+IgogIHN5biBtYXRjaCBmb3J0cmFuVGFyZ2V0CWRpc3BsYXkJIlwoXDxnb1xzKnRvXHMqKFw9XClcQDw9XChcZFwrXHMqLFxzKlwpKlxkXCtcPiIKZW5kaWYKCnN5biBrZXl3b3JkIGZvcnRyYW5UeXBlRXgJZXh0ZXJuYWwKc3luIGtleXdvcmQgZm9ydHJhbklPRXgJCWZvcm1hdApzeW4gbWF0Y2ggZm9ydHJhbktleXdvcmRFeAkiXDxjb250aW51ZVw+IgpzeW4gbWF0Y2ggZm9ydHJhbktleXdvcmQJIl5ccypcZFwrXHNcK2NvbnRpbnVlXD4iCnN5biBtYXRjaCBmb3J0cmFuS2V5d29yZEV4CSJcPGdvXHMqdG9cPiIKc3luIHJlZ2lvbiBmb3J0cmFuU3RyaW5nRXgJc3RhcnQ9KycrIGVuZD0rJysgY29udGFpbnM9Zm9ydHJhbkNvbnRpbnVlTWFyayxmb3J0cmFuTGVmdE1hcmdpbixmb3J0cmFuU2VyaWFsTnVtYmVyCnN5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpY0V4CWRpbSBsZ2UgbGd0IGxsZSBsbHQgbW9kCnN5biBrZXl3b3JkIGZvcnRyYW5LZXl3b3JkT2IJYXNzaWduIHBhdXNlIHRvCgppZiBiOmZvcnRyYW5fZGlhbGVjdCAhPSAiZjc3IgoKICBzeW4gbWF0Y2ggZm9ydHJhblR5cGUgICAgICAgICAiXDx0eXBlXD4iCiAgc3luIGtleXdvcmQgZm9ydHJhblR5cGUJbm9uZQoKICBzeW4ga2V5d29yZCBmb3J0cmFuU3RydWN0dXJlCXByaXZhdGUgcHVibGljIGludGVudCBvcHRpb25hbAogIHN5biBrZXl3b3JkIGZvcnRyYW5TdHJ1Y3R1cmUJcG9pbnRlciB0YXJnZXQgYWxsb2NhdGFibGUKICBzeW4ga2V5d29yZCBmb3J0cmFuU3RvcmFnZUNsYXNzCWluIG91dAogIHN5biBtYXRjaCBmb3J0cmFuU3RvcmFnZUNsYXNzCSJcPGtpbmRccyo9Im1lPXMrNAogIHN5biBtYXRjaCBmb3J0cmFuU3RvcmFnZUNsYXNzCSJcPGxlblxzKj0ibWU9cyszCgogIHN5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxtb2R1bGVcPiIKICBzeW4ga2V5d29yZCBmb3J0cmFuVW5pdEhlYWRlcgl1c2Ugb25seSBjb250YWlucwogIHN5biBrZXl3b3JkIGZvcnRyYW5Vbml0SGVhZGVyCXJlc3VsdCBvcGVyYXRvciBhc3NpZ25tZW50CiAgc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGludGVyZmFjZVw+IgogIHN5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxyZWN1cnNpdmVcPiIKICBzeW4ga2V5d29yZCBmb3J0cmFuS2V5d29yZAlhbGxvY2F0ZSBkZWFsbG9jYXRlIG51bGxpZnkgY3ljbGUgZXhpdAogIHN5biBtYXRjaCBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8c2VsZWN0XD4iCiAgc3luIGtleXdvcmQgZm9ydHJhbkNvbmRpdGlvbmFsCWNhc2UgZGVmYXVsdCB3aGVyZSBlbHNld2hlcmUKCiAgc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXChcKD5cfDxcKT1cPVx8PT1cfC89XHw9XCkiCiAgc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiPT4iCgogIHN5biByZWdpb24gZm9ydHJhblN0cmluZwlzdGFydD0rIisgZW5kPSsiKwljb250YWlucz1mb3J0cmFuTGVmdE1hcmdpbixmb3J0cmFuQ29udGludWVNYXJrLGZvcnRyYW5TZXJpYWxOdW1iZXIKICBzeW4ga2V5d29yZCBmb3J0cmFuSU8JCXBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlCiAgc3luIGtleXdvcmQgZm9ydHJhbklPCQllb3IgYWR2YW5jZSBubWwKCiAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWFkanVzdGwgYWRqdXN0ciBhbGwgYWxsb2NhdGVkIGFueSBhc3NvY2lhdGVkIGJpdF9zaXplIGJ0ZXN0IGNlaWxpbmcgY291bnQgY3NoaWZ0IGRhdGVfYW5kX3RpbWUgZGlnaXRzIGRvdF9wcm9kdWN0IGVvc2hpZnQgZXBzaWxvbiBleHBvbmVudCBmbG9vciBmcmFjdGlvbiBodWdlIGlhbmQgaWJjbHIgaWJpdHMgaWJzZXQgaWVvciBpb3IgaXNoZnQgaXNoZnRjIGxib3VuZCBsZW5fdHJpbSBtYXRtdWwgbWF4ZXhwb25lbnQgbWF4bG9jIG1heHZhbCBtZXJnZSBtaW5leHBvbmVudCBtaW5sb2MgbWludmFsIG1vZHVsbyBtdmJpdHMgbmVhcmVzdCBwYWNrIHByZWNpc2lvbiBwcmVzZW50IHByb2R1Y3QgcmFkaXggcmFuZG9tX251bWJlciByYW5kb21fc2VlZCByYW5nZSByZXBlYXQgcmVzaGFwZSBycnNwYWNpbmcKICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJc2NhbGUgc2NhbiBzZWxlY3RlZF9pbnRfa2luZCBzZWxlY3RlZF9yZWFsX2tpbmQgc2V0X2V4cG9uZW50IHNoYXBlIHNpemUgc3BhY2luZyBzcHJlYWQgc3VtIHN5c3RlbV9jbG9jayB0aW55IHRyYW5zcG9zZSB0cmltIHVib3VuZCB1bnBhY2sgdmVyaWZ5CiAgc3luIG1hdGNoIGZvcnRyYW45MEludHJpbnNpYwkJIlw8bm90XD5cKFxzKlwuXClcQCEibWU9cyszCiAgc3luIG1hdGNoIGZvcnRyYW45MEludHJpbnNpYwkiXDxraW5kXD5ccypbKCxdIm1lPXMrNAoKICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKmZ1bmN0aW9uIgogIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqaW50ZXJmYWNlIgogIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqbW9kdWxlIgogIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqcHJvZ3JhbSIKICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKnN1YnJvdXRpbmUiCiAgc3luIG1hdGNoICBmb3J0cmFuUmVwZWF0CSJcPGVuZFxzKmRvIgogIHN5biBtYXRjaCAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVuZFxzKndoZXJlIgogIHN5biBtYXRjaCAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPHNlbGVjdFxzKmNhc2UiCiAgc3luIG1hdGNoICBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8ZW5kXHMqc2VsZWN0IgogIHN5biBtYXRjaCAgZm9ydHJhblR5cGUJIlw8ZW5kXHMqdHlwZSIKICBzeW4gbWF0Y2ggIGZvcnRyYW5UeXBlCSJcPGluXHMqb3V0IgoKICBzeW4ga2V5d29yZCBmb3J0cmFuVW5pdEhlYWRlckV4CXByb2NlZHVyZQogIHN5biBrZXl3b3JkIGZvcnRyYW5JT0V4CQluYW1lbGlzdAogIHN5biBrZXl3b3JkIGZvcnRyYW5Db25kaXRpb25hbEV4CXdoaWxlCiAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljRXgJYWNoYXIgaWFjaGFyIHRyYW5zZmVyCgogIHN5biBrZXl3b3JkIGZvcnRyYW5JbmNsdWRlCQlpbmNsdWRlCiAgc3luIGtleXdvcmQgZm9ydHJhbjkwU3RvcmFnZUNsYXNzUglzZXF1ZW5jZQplbmRpZgoKc3luIG1hdGNoICAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVuZFxzKmlmIgpzeW4gbWF0Y2ggICBmb3J0cmFuSU8JCWNvbnRhaW5zPWZvcnRyYW5PcGVyYXRvciAiXDxlXChuZFx8cnJcKVxzKj1ccypcZFwrIgpzeW4gbWF0Y2ggICBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8ZWxzZVxzKmlmIgoKc3luIGtleXdvcmQgZm9ydHJhblVuaXRIZWFkZXJSCWVudHJ5CnN5biBtYXRjaCBmb3J0cmFuVHlwZVIJCWRpc3BsYXkgImRvdWJsZVxzXCtwcmVjaXNpb24iCnN5biBtYXRjaCBmb3J0cmFuVHlwZVIJCWRpc3BsYXkgImRvdWJsZVxzXCtjb21wbGV4IgpzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXJSCWRpc3BsYXkgImJsb2NrXHNcK2RhdGEiCnN5biBrZXl3b3JkIGZvcnRyYW5TdG9yYWdlQ2xhc3NSCWNvbW1vbiBlcXVpdmFsZW5jZSBkYXRhCnN5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpY1IJZGJsZSBkcHJvZApzeW4gbWF0Y2ggICBmb3J0cmFuNzdPcGVyYXRvclIJIlwuXHMqW2dsXVtldF1ccypcLiIKc3luIG1hdGNoICAgZm9ydHJhbjc3T3BlcmF0b3JSCSJcLlxzKlwoZXFcfG5lXClccypcLiIKCmlmIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJmOTUiIHx8IGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJGIgogIHN5biBrZXl3b3JkIGZvcnRyYW5SZXBlYXQJCWZvcmFsbAogIHN5biBtYXRjaCBmb3J0cmFuUmVwZWF0CQkiXDxlbmRccypmb3JhbGwiCiAgc3luIGtleXdvcmQgZm9ydHJhbjk1SW50cmluc2ljCW51bGwgY3B1X3RpbWUKICBzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCQkiXDxlbGVtZW50YWxcPiIKICBzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCQkiXDxwdXJlXD4iCiAgaWYgZXhpc3RzKCJmb3J0cmFuX21vcmVfcHJlY2lzZSIpCiAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUgIlwoXDxlbmRccypmb3JhbGxcc1wrXClcQDw9XGFcdypcPiIKICBlbmRpZgplbmRpZgoKaWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gImY5NSIKICAiIEYyMDAzCiAgc3luIGtleXdvcmQgZm9ydHJhbjAzSW50cmluc2ljICAgICAgICBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kIGlzX2lvc3RhdF9lb3IgbW92ZV9hbGxvYyBuZXdfbGluZSBzZWxlY3RlZF9jaGFyX2tpbmQgc2FtZV90eXBlX2FzIGV4dGVuZHNfdHlwZV9vZgogICIgSVNPX0NfYmluZGluZwogIHN5biBrZXl3b3JkIGZvcnRyYW4wM0NvbnN0YW50ICAgICAgICAgY19udWxsX2NoYXIgY19hbGVydCBjX2JhY2tzcGFjZSBjX2Zvcm1fZmVlZCBjX25ld19saW5lIGNfY2FycmlhZ2VfcmV0dXJuIGNfaG9yaXpvbnRhbF90YWIgY192ZXJ0aWNhbF90YWIKICBzeW4ga2V5d29yZCBmb3J0cmFuMDNDb25zdGFudCAgICAgICAgIGNfaW50IGNfc2hvcnQgY19sb25nIGNfbG9uZ19sb25nIGNfc2lnbmVkX2NoYXIgY19zaXplX3QgY19pbnQ4X3QgY19pbnQxNl90IGNfaW50MzJfdCBjX2ludDY0X3QgY19pbnRfbGVhc3Q4X3QgY19pbnRfbGVhc3QxNl90IGNfaW50X2xlYXN0MzJfdCBjX2ludF9sZWFzdDY0X3QgY19pbnRfZmFzdDhfdCBjX2ludF9mYXN0MTZfdCBjX2ludF9mYXN0MzJfdCBjX2ludF9mYXN0NjRfdCBjX2ludG1heF90IENfaW50cHRyX3QgY19mbG9hdCBjX2RvdWJsZSBjX2xvbmdfZG91YmxlIGNfZmxvYXRfY29tcGxleCBjX2RvdWJsZV9jb21wbGV4IGNfbG9uZ19kb3VibGVfY29tcGxleCBjX2Jvb2wgY19jaGFyIGNfbnVsbF9wdHIgY19udWxsX2Z1bnB0cgogIHN5biBrZXl3b3JkIGZvcnRyYW4wM0ludHJpbnNpYyAgICAgICAgaXNvX2NfYmluZGluZyBjX2xvYyBjX2Z1bmxvYyBjX2Fzc29jaWF0ZWQgIGNfZl9wb2ludGVyIGNfZl9wcm9jcG9pbnRlcgogIHN5biBrZXl3b3JkIGZvcnRyYW4wM1R5cGUgICAgICAgICAgICAgY19wdHIgY19mdW5wdHIKICAiIElTT19Gb3J0cmFuX2VudgogIHN5biBrZXl3b3JkIGZvcnRyYW4wM0NvbnN0YW50ICAgICAgICAgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciBudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdAogICIgSUVFRV9hcml0aG1ldGljCiAgc3luIGtleXdvcmQgZm9ydHJhbjAzSW50cmluc2ljICAgICAgICBpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sIGllZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlCgogIHN5biBrZXl3b3JkIGZvcnRyYW4wM1JlYWRXcml0ZQlmbHVzaCB3YWl0CiAgc3luIGtleXdvcmQgZm9ydHJhbjAzSU8JICAgICAgICBkZWNpbWFsIHJvdW5kIGlvbXNnCiAgc3luIGtleXdvcmQgZm9ydHJhbjAzVHlwZSAgICAgICAgICAgICBhc3luY2hyb25vdXMgbm9wYXNzIG5vbl9vdmVycmlkYWJsZSBwYXNzIHByb3RlY3RlZCB2b2xhdGlsZSBhYnN0cmFjdCBleHRlbmRzIGltcG9ydAogIHN5biBrZXl3b3JkIGZvcnRyYW4wM1R5cGUgICAgICAgICAgICAgbm9uX2ludHJpbnNpYyB2YWx1ZSBiaW5kIGRlZmVycmVkIGdlbmVyaWMgZmluYWwgZW51bWVyYXRvciBjbGFzcwogIHN5biBtYXRjaCBmb3J0cmFuMDNUeXBlICAgICAgICAgICAgICAgIlw8YXNzb2NpYXRlXD4iCiAgc3luIG1hdGNoIGZvcnRyYW4wM1R5cGUgICAgICAgICAgICAgICAiXDxlbmRccyphc3NvY2lhdGUiCiAgc3luIG1hdGNoIGZvcnRyYW4wM1R5cGUgICAgICAgICAgICAgICAiXDxlbnVtXHMqLFxzKmJpbmRccyooXHMqY1xzKikiCiAgc3luIG1hdGNoIGZvcnRyYW4wM1R5cGUgICAgICAgICAgICAgICAiXDxlbmRccyplbnVtIgogIHN5biBtYXRjaCBmb3J0cmFuMDNDb25kaXRpb25hbAkiXDxzZWxlY3Rccyp0eXBlIgogIHN5biBtYXRjaCBmb3J0cmFuMDNDb25kaXRpb25hbCAgICAgICAgIlw8dHlwZVxzKmlzXD4iCiAgc3luIG1hdGNoIGZvcnRyYW4wM1VuaXRIZWFkZXIgICAgICAgICAiXDxhYnN0cmFjdFxzKmludGVyZmFjZVw+IgogIHN5biBtYXRjaCBmb3J0cmFuMDNPcGVyYXRvciAgICAgICAgICAgIlwoW1x8XVwpIgoKICAiIEYyMDA4CiAgc3luIGtleXdvcmQgZm9ydHJhbjA4SW50cmluc2ljICAgICAgICBhY29zaCBhc2luaCBhdGFuaCBiZXNzZWxfajAgYmVzc2VsX2oxIGJlc3NlbF9qbiBiZXNzZWxfeTAgYmVzc2VsX3kxIGJlc3NlbF95biBlcmYgZXJmYyBlcmZjX3NjYWxlZCBnYW1tYSBsb2dfZ2FtbWEgaHlwb3Qgbm9ybTIKICBzeW4ga2V5d29yZCBmb3J0cmFuMDhJbnRyaW5zaWMgICAgICAgIGF0b21pY19kZWZpbmUgYXRvbWljX3JlZiBleGVjdXRlX2NvbW1hbmRfbGluZSBsZWFkeiB0cmFpbHogc3RvcmFnZV9zaXplIG1lcmdlX2JpdHMKICBzeW4ga2V5d29yZCBmb3J0cmFuMDhJbnRyaW5zaWMgICAgICAgIGJnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciBudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UKICBzeW4ga2V5d29yZCBmb3J0cmFuMDhJTyAgICAgICAgICAgICAgIG5ld3VuaXQKICBzeW4ga2V5d29yZCBmb3J0cmFuMDhUeXBlICAgICAgICAgICAgIGNvbnRpZ3VvdXMKZW5kaWYKCnN5biBjbHVzdGVyIGZvcnRyYW5Db21tZW50R3JvdXAgY29udGFpbnM9Zm9ydHJhblRvZG8KCmlmIChiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEpCiAgaWYgIWV4aXN0cygiZm9ydHJhbl9oYXZlX3RhYnMiKQogICAgIkZsYWcgaXRlbXMgYmV5b25kIGNvbHVtbiA3MgogICAgc3luIG1hdGNoIGZvcnRyYW5TZXJpYWxOdW1iZXIJZXhjbHVkZW5sICJeLlx7NzMsfSQibGM9NzIKICAgICJGbGFnIGxlZnQgbWFyZ2luIGVycm9ycwogICAgc3luIG1hdGNoIGZvcnRyYW5MYWJlbEVycm9yCSJeLlx7LSw0fVteMC05IF0iIGNvbnRhaW5zPWZvcnRyYW5UYWIKICAgIHN5biBtYXRjaCBmb3J0cmFuTGFiZWxFcnJvcgkiXi5cezR9XGRcUyIKICBlbmRpZgogIHN5biBtYXRjaCBmb3J0cmFuQ29tbWVudAkJZXhjbHVkZW5sICJeWyFjKl0uKiQiIGNvbnRhaW5zPUBmb3J0cmFuQ29tbWVudEdyb3VwLEBzcGVsbAogIHN5biBtYXRjaCBmb3J0cmFuTGVmdE1hcmdpbgkJdHJhbnNwYXJlbnQgIl4gXHs1fSIKICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnRpbnVlTWFyawkJZGlzcGxheSAiXi5cezV9XFMibGM9NQplbHNlCiAgc3luIG1hdGNoIGZvcnRyYW5Db250aW51ZU1hcmsJCWRpc3BsYXkgIiYiCmVuZGlmCgppZiBiOmZvcnRyYW5fZGlhbGVjdCAhPSAiZjc3IgogIHN5biBtYXRjaCBmb3J0cmFuQ29tbWVudAlleGNsdWRlbmwgIiEuKiQiIGNvbnRhaW5zPUBmb3J0cmFuQ29tbWVudEdyb3VwLEBzcGVsbAplbmRpZgoKImNwcCBpcyBvZnRlbiB1c2VkIHdpdGggRm9ydHJhbgpzeW4gbWF0Y2gJY1ByZVByb2MJCSJeXHMqI1xzKlwoZGVmaW5lXHxpZmRlZlwpXD4uKiIKc3luIG1hdGNoCWNQcmVQcm9jCQkiXlxzKiNccypcKGVsaWZcfGlmXClcPi4qIgpzeW4gbWF0Y2gJY1ByZVByb2MJCSJeXHMqI1xzKlwoaWZuZGVmXHx1bmRlZlwpXD4uKiIKc3luIG1hdGNoCWNQcmVDb25kaXQJCSJeXHMqI1xzKlwoZWxzZVx8ZW5kaWZcKVw+LioiCnN5biByZWdpb24JY0luY2x1ZGVkCWNvbnRhaW5lZCBzdGFydD0rIlteKF0rIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1mb3J0cmFuTGVmdE1hcmdpbixmb3J0cmFuQ29udGludWVNYXJrLGZvcnRyYW5TZXJpYWxOdW1iZXIKc3luIG1hdGNoCWNJbmNsdWRlZAkJY29udGFpbmVkICI8W14+XSo+IgpzeW4gbWF0Y2gJY0luY2x1ZGUJCSJeXHMqI1xzKmluY2x1ZGVcPlxzKlsiPF0iIGNvbnRhaW5zPWNJbmNsdWRlZAoKIlN5bmNocm9uaXNpbmcgbGltaXRzIGFzc3VtZSB0aGF0IGNvbW1lbnQgYW5kIGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbm90IG1peGVkCmlmIGV4aXN0cygiZm9ydHJhbl9mb2xkIikgfHwgZXhpc3RzKCJmb3J0cmFuX21vcmVfcHJlY2lzZSIpCiAgc3luIHN5bmMgZnJvbXN0YXJ0CmVsc2VpZiAoYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9PSAwKQogIHN5biBzeW5jIGxpbmVjb250ICImIiBtaW5saW5lcz0zMAplbHNlCiAgc3luIHN5bmMgbWlubGluZXM9MzAKZW5kaWYKCmlmIHZlcnNpb24gPj0gNjAwICYmIGV4aXN0cygiZm9ydHJhbl9mb2xkIikKCiAgaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKICAgIHN5biByZWdpb24gZm9ydHJhblByb2dyYW0gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJeXHMqcHJvZ3JhbVxzXCtceihcYVx3KlwpIiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwocHJvZ3JhbVwoXHNcK1x6MVw+XClcPVx8JFwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhbk1vZHVsZQogICAgc3luIHJlZ2lvbiBmb3J0cmFuTW9kdWxlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXlxzKm1vZHVsZVxzXCtcKHByb2NlZHVyZVwpXEAhXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKG1vZHVsZVwoXHNcK1x6MVw+XClcPVx8JFwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0KICAgIHN5biByZWdpb24gZm9ydHJhbkZ1bmN0aW9uIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccypcKGVsZW1lbnRhbCBcfHB1cmUgXHxyZWN1cnNpdmUgXClcPVxzKlwoXChcKHJlYWwgXHxpbnRlZ2VyIFx8bG9naWNhbCBcfGNvbXBsZXggXHxkb3VibGUgXHMqcHJlY2lzaW9uIFwpXHMqXCgoXChccypraW5kXHMqPVwpXD1ccypcd1wrXHMqKVwpXD1cKVx8dHlwZVxzXCsoXHMqXHdcK1xzKikgXHxjaGFyYWN0ZXIgXCgoXChccypsZW5ccyo9XClcPVxzKlxkXCtccyopXHwoXChccypraW5kXHMqPVwpXD1ccypcd1wrXHMqKVwpXD1cKVw9XHMqZnVuY3Rpb25cc1wrXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGZ1bmN0aW9uXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5TdWJyb3V0aW5lIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccypcKGVsZW1lbnRhbCBcfHB1cmUgXHxyZWN1cnNpdmUgXClcPVxzKnN1YnJvdXRpbmVcc1wrXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfHN1YnJvdXRpbmVcKFxzXCtcejFcPlwpXD1cKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUKICAgIHN5biByZWdpb24gZm9ydHJhbkJsb2NrRGF0YSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Ilw8YmxvY2tccypkYXRhXChcc1wrXHooXGFcdypcKVwpXD0iIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXCgkXHxibG9ja1xzKmRhdGFcKFxzXCtcejFcPlwpXD1cKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW43N0xvb3AsZm9ydHJhbkNhc2UsZm9ydHJhbjkwTG9vcCxmb3J0cmFuSWZCbG9jawogICAgc3luIHJlZ2lvbiBmb3J0cmFuSW50ZXJmYWNlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccyppbnRlcmZhY2VcPiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccyppbnRlcmZhY2VcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5UeXBlRGVmIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccyp0eXBlXHMqXCgsXHMqXChwdWJsaWNcfHByaXZhdGVcKVwpXD1ccyo6OiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccyp0eXBlXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW43N0xvb3AsZm9ydHJhbkNhc2UsZm9ydHJhbjkwTG9vcCxmb3J0cmFuSWZCbG9jawogIGVsc2UKICAgIHN5biByZWdpb24gZm9ydHJhblByb2dyYW0gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJeXHMqcHJvZ3JhbVxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKHByb2dyYW1cKFxzXCtcejFcPlwpXD1cfCRcKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Nb2R1bGUKICAgIHN5biByZWdpb24gZm9ydHJhbk1vZHVsZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Il5ccyptb2R1bGVcc1wrXChwcm9jZWR1cmVcKVxAIVx6KFxhXHcqXCkiIHNraXA9Il5ccypbISNdLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwobW9kdWxlXChcc1wrXHoxXD5cKVw9XHwkXCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbQogICAgc3luIHJlZ2lvbiBmb3J0cmFuRnVuY3Rpb24gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKlwoZWxlbWVudGFsIFx8cHVyZSBcfHJlY3Vyc2l2ZSBcKVw9XHMqXChcKFwocmVhbCBcfGludGVnZXIgXHxsb2dpY2FsIFx8Y29tcGxleCBcfGRvdWJsZSBccypwcmVjaXNpb24gXClccypcKChcKFxzKmtpbmRccyo9XClcPVxzKlx3XCtccyopXClcPVwpXHx0eXBlXHNcKyhccypcd1wrXHMqKSBcfGNoYXJhY3RlciBcKChcKFxzKmxlblxzKj1cKVw9XHMqXGRcK1xzKilcfChcKFxzKmtpbmRccyo9XClcPVxzKlx3XCtccyopXClcPVwpXD1ccypmdW5jdGlvblxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGZ1bmN0aW9uXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5TdWJyb3V0aW5lIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccypcKGVsZW1lbnRhbCBcfHB1cmUgXHxyZWN1cnNpdmUgXClcPVxzKnN1YnJvdXRpbmVcc1wrXHooXGFcdypcKSIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXCgkXHxzdWJyb3V0aW5lXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5CbG9ja0RhdGEgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJcPGJsb2NrXHMqZGF0YVwoXHNcK1x6KFxhXHcqXClcKVw9IiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGJsb2NrXHMqZGF0YVwoXHNcK1x6MVw+XClcPVwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5JbnRlcmZhY2UgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKmludGVyZmFjZVw+IiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccyppbnRlcmZhY2VcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCiAgICBzeW4gcmVnaW9uIGZvcnRyYW5UeXBlRGVmIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccyp0eXBlXHMqXCgsXHMqXChwdWJsaWNcfHByaXZhdGVcKVwpXD1ccyo6OiIgc2tpcD0iXlxzKlshI10uKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqdHlwZVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuNzdMb29wLGZvcnRyYW5DYXNlLGZvcnRyYW45MExvb3AsZm9ydHJhbklmQmxvY2sKICBlbmRpZgoKICBpZiBleGlzdHMoImZvcnRyYW5fZm9sZF9jb25kaXRpb25hbHMiKQogICAgaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuNzdMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXDxkb1xzXCtceihcZFwrXCkiIGVuZD0iXlxzKlx6MVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuOTBMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9IlwoXDxlbmRcc1wrXClcQDwhXDxkb1woXHNcK1xhXHxccyokXCkiIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqZG9cPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Vbml0SGVhZGVyLGZvcnRyYW5TdHJ1Y3R1cmUsZm9ydHJhblN0b3JhZ2VDbGFzcyxmb3J0cmFuVHlwZSxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuQmxvY2tEYXRhCiAgICAgIHN5biByZWdpb24gZm9ydHJhbklmQmxvY2sgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXChcPGVcKG5kXHxsc2VcKVxzXCtcKVxAPCFcPGlmXHMqKC5cKylccyp0aGVuXD4iIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGVuZD0iXDxlbmRccyppZlw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuQ2FzZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcPHNlbGVjdFxzKmNhc2VcPiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZW5kPSJcPGVuZFxzKnNlbGVjdFw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKICAgIGVsc2UKICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuNzdMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXDxkb1xzXCtceihcZFwrXCkiIGVuZD0iXlxzKlx6MVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuOTBMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9IlwoXDxlbmRcc1wrXClcQDwhXDxkb1woXHNcK1xhXHxccyokXCkiIHNraXA9Il5ccypbISNdLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKmRvXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQogICAgICBzeW4gcmVnaW9uIGZvcnRyYW5JZkJsb2NrIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9IlwoXDxlXChuZFx8bHNlXClcc1wrXClcQDwhXDxpZlxzKiguXCspXHMqdGhlblw+IiBza2lwPSJeXHMqWyEjXS4qJCIgZW5kPSJcPGVuZFxzKmlmXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQogICAgICBzeW4gcmVnaW9uIGZvcnRyYW5DYXNlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Ilw8c2VsZWN0XHMqY2FzZVw+IiBza2lwPSJeXHMqWyEjXS4qJCIgZW5kPSJcPGVuZFxzKnNlbGVjdFw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKICAgIGVuZGlmCiAgZW5kaWYKCiAgaWYgZXhpc3RzKCJmb3J0cmFuX2ZvbGRfbXVsdGlsaW5lY29tbWVudHMiKQogICAgaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKICAgICAgc3luIG1hdGNoIGZvcnRyYW5NdWx0aUxpbmVDb21tZW50cyB0cmFuc3BhcmVudCBmb2xkICJcKF5bIWMqXS4qXChcblx8XCUkXClcKVx7NCx9IiBjb250YWlucz1BTExCVVQsZm9ydHJhbk11bHRpQ29tbWVudExpbmVzCiAgICBlbHNlCiAgICAgIHN5biBtYXRjaCBmb3J0cmFuTXVsdGlMaW5lQ29tbWVudHMgdHJhbnNwYXJlbnQgZm9sZCAiXCheXHMqIS4qXChcblx8XCUkXClcKVx7NCx9IiBjb250YWlucz1BTExCVVQsZm9ydHJhbk11bHRpQ29tbWVudExpbmVzCiAgICBlbmRpZgogIGVuZGlmCmVuZGlmCgoiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCiIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQoiIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CmlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mb3J0cmFuX3N5bl9pbml0cyIpCiAgaWYgdmVyc2lvbiA8IDUwOAogICAgbGV0IGRpZF9mb3J0cmFuX3N5bl9pbml0cyA9IDEKICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CiAgZWxzZQogICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+CiAgZW5kaWYKCiAgIiBUaGUgZGVmYXVsdCBoaWdobGlnaHRpbmcgZGlmZmVycyBmb3IgZWFjaCBkaWFsZWN0LgogICIgVHJhbnNwYXJlbnQgZ3JvdXBzOgogICIgZm9ydHJhblBhcmVuLCBmb3J0cmFuTGVmdE1hcmdpbgogICIgZm9ydHJhblByb2dyYW0sIGZvcnRyYW5Nb2R1bGUsIGZvcnRyYW5TdWJyb3V0aW5lLCBmb3J0cmFuRnVuY3Rpb24sCiAgIiBmb3J0cmFuQmxvY2tEYXRhCiAgIiBmb3J0cmFuNzdMb29wLCBmb3J0cmFuOTBMb29wLCBmb3J0cmFuSWZCbG9jaywgZm9ydHJhbkNhc2UKICAiIGZvcnRyYW5NdWx0aUNvbW1lbnRMaW5lcwogIEhpTGluayBmb3J0cmFuS2V5d29yZCAJS2V5d29yZAogIEhpTGluayBmb3J0cmFuQ29uc3RydWN0TmFtZQlJZGVudGlmaWVyCiAgSGlMaW5rIGZvcnRyYW4wM0NvbmRpdGlvbmFsCWZvcnRyYW5Db25kaXRpb25hbAogIEhpTGluayBmb3J0cmFuQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKICBIaUxpbmsgZm9ydHJhblJlcGVhdAkJUmVwZWF0CiAgSGlMaW5rIGZvcnRyYW5Ub2RvCQlUb2RvCiAgaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKICAgIEhpTGluayBmb3J0cmFuQ29udGludWVNYXJrCVRvZG8KICBlbHNlCiAgICBIaUxpbmsgZm9ydHJhbkNvbnRpbnVlTWFyawlLZXl3b3JkCiAgZW5kaWYKICBIaUxpbmsgZm9ydHJhblN0cmluZwkJU3RyaW5nCiAgSGlMaW5rIGZvcnRyYW5OdW1iZXIJCU51bWJlcgogIEhpTGluayBmb3J0cmFuMDNPcGVyYXRvcglmb3J0cmFuT3BlcmF0b3IKICBIaUxpbmsgZm9ydHJhbk9wZXJhdG9yCU9wZXJhdG9yCiAgSGlMaW5rIGZvcnRyYW5Cb29sZWFuCQlCb29sZWFuCiAgSGlMaW5rIGZvcnRyYW5MYWJlbEVycm9yCUVycm9yCiAgSGlMaW5rIGZvcnRyYW5PYnNvbGV0ZQlUb2RvCiAgSGlMaW5rIGZvcnRyYW4wM1R5cGUgIAlmb3J0cmFuVHlwZQogIEhpTGluayBmb3J0cmFuMDhUeXBlCSAgICAgICAgZm9ydHJhblR5cGUKICBIaUxpbmsgZm9ydHJhblR5cGUJCVR5cGUKICBIaUxpbmsgZm9ydHJhblN0cnVjdHVyZQlUeXBlCiAgSGlMaW5rIGZvcnRyYW5TdG9yYWdlQ2xhc3MJU3RvcmFnZUNsYXNzCiAgSGlMaW5rIGZvcnRyYW5DYWxsCQlGdW5jdGlvbgogIEhpTGluayBmb3J0cmFuMDNVbml0SGVhZGVyCWZvcnRyYW5Vbml0SGVhZGVyCiAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyCWZvcnRyYW5QcmVDb25kaXQKICBIaUxpbmsgZm9ydHJhbjAzUmVhZFdyaXRlCWZvcnRyYW5SZWFkV3JpdGUKICBIaUxpbmsgZm9ydHJhblJlYWRXcml0ZQlLZXl3b3JkCiAgSGlMaW5rIGZvcnRyYW4wM0lPCQlmb3J0cmFuSU8KICBIaUxpbmsgZm9ydHJhbjA4SU8JCWZvcnRyYW5JTwogIEhpTGluayBmb3J0cmFuSU8JCUtleXdvcmQKICBIaUxpbmsgZm9ydHJhbjk1SW50cmluc2ljCWZvcnRyYW45MEludHJpbnNpYwogIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWMJZm9ydHJhbjkwSW50cmluc2ljCiAgSGlMaW5rIGZvcnRyYW45MEludHJpbnNpYwlGdW5jdGlvbgogIEhpTGluayBmb3J0cmFuMDNJbnRyaW5zaWMJRnVuY3Rpb24KICBIaUxpbmsgZm9ydHJhbjA4SW50cmluc2ljCUZ1bmN0aW9uCiAgSGlMaW5rIGZvcnRyYW4wM0NvbnN0YW50CUZ1bmN0aW9uCgogIGlmICggYjpmb3J0cmFuX2RpYWxlY3QgPT0gImVsZiIgfHwgYjpmb3J0cmFuX2RpYWxlY3QgPT0gIkYiICkKICAgIEhpTGluayBmb3J0cmFuS2V5d29yZE9iCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW42NkludHJpbnNpYwlmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNSCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyUglmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuVHlwZVIJCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5TdG9yYWdlQ2xhc3NSCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW45MFN0b3JhZ2VDbGFzc1IJZm9ydHJhbk9ic29sZXRlCiAgICBIaUxpbmsgZm9ydHJhbjc3T3BlcmF0b3JSCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5JbmNsdWRlCWZvcnRyYW5PYnNvbGV0ZQogIGVsc2UKICAgIEhpTGluayBmb3J0cmFuS2V5d29yZE9iCWZvcnRyYW5LZXl3b3JkCiAgICBIaUxpbmsgZm9ydHJhbjY2SW50cmluc2ljCWZvcnRyYW45MEludHJpbnNpYwogICAgSGlMaW5rIGZvcnRyYW43N0ludHJpbnNpY1IJZm9ydHJhbjkwSW50cmluc2ljCiAgICBIaUxpbmsgZm9ydHJhblVuaXRIZWFkZXJSCWZvcnRyYW5QcmVDb25kaXQKICAgIEhpTGluayBmb3J0cmFuVHlwZVIJCWZvcnRyYW5UeXBlCiAgICBIaUxpbmsgZm9ydHJhblN0b3JhZ2VDbGFzc1IJZm9ydHJhblN0b3JhZ2VDbGFzcwogICAgSGlMaW5rIGZvcnRyYW43N09wZXJhdG9yUglmb3J0cmFuT3BlcmF0b3IKICAgIEhpTGluayBmb3J0cmFuSW5jbHVkZQlJbmNsdWRlCiAgICBIaUxpbmsgZm9ydHJhbjkwU3RvcmFnZUNsYXNzUglmb3J0cmFuU3RvcmFnZUNsYXNzCiAgZW5kaWYKCiAgaWYgKCBiOmZvcnRyYW5fZGlhbGVjdCA9PSAiRiIgKQogICAgSGlMaW5rIGZvcnRyYW5MYWJlbE51bWJlcglmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuVGFyZ2V0CWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5Gb3JtYXRTcGVjCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5GbG9hdERFeHAJZm9ydHJhbk9ic29sZXRlCiAgICBIaUxpbmsgZm9ydHJhbkZsb2F0Tm9EZWMJZm9ydHJhbk9ic29sZXRlCiAgICBIaUxpbmsgZm9ydHJhbkZsb2F0SW5pRGVjCWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5GbG9hdEVuZERlYwlmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuVHlwZUV4CWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5JT0V4CQlmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuS2V5d29yZEV4CWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5TdHJpbmdFeAlmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNFeAlmb3J0cmFuT2Jzb2xldGUKICAgIEhpTGluayBmb3J0cmFuVW5pdEhlYWRlckV4CWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW5Db25kaXRpb25hbEV4CWZvcnRyYW5PYnNvbGV0ZQogICAgSGlMaW5rIGZvcnRyYW45MEludHJpbnNpY0V4CWZvcnRyYW5PYnNvbGV0ZQogIGVsc2UKICAgIEhpTGluayBmb3J0cmFuTGFiZWxOdW1iZXIJU3BlY2lhbAogICAgSGlMaW5rIGZvcnRyYW5UYXJnZXQJU3BlY2lhbAogICAgSGlMaW5rIGZvcnRyYW5Gb3JtYXRTcGVjCUlkZW50aWZpZXIKICAgIEhpTGluayBmb3J0cmFuRmxvYXRERXhwCWZvcnRyYW5GbG9hdAogICAgSGlMaW5rIGZvcnRyYW5GbG9hdE5vRGVjCWZvcnRyYW5GbG9hdAogICAgSGlMaW5rIGZvcnRyYW5GbG9hdEluaURlYwlmb3J0cmFuRmxvYXQKICAgIEhpTGluayBmb3J0cmFuRmxvYXRFbmREZWMJZm9ydHJhbkZsb2F0CiAgICBIaUxpbmsgZm9ydHJhblR5cGVFeAlmb3J0cmFuVHlwZQogICAgSGlMaW5rIGZvcnRyYW5JT0V4CQlmb3J0cmFuSU8KICAgIEhpTGluayBmb3J0cmFuS2V5d29yZEV4CWZvcnRyYW5LZXl3b3JkCiAgICBIaUxpbmsgZm9ydHJhblN0cmluZ0V4CWZvcnRyYW5TdHJpbmcKICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNFeAlmb3J0cmFuOTBJbnRyaW5zaWMKICAgIEhpTGluayBmb3J0cmFuVW5pdEhlYWRlckV4CWZvcnRyYW5Vbml0SGVhZGVyCiAgICBIaUxpbmsgZm9ydHJhbkNvbmRpdGlvbmFsRXgJZm9ydHJhbkNvbmRpdGlvbmFsCiAgICBIaUxpbmsgZm9ydHJhbjkwSW50cmluc2ljRXgJZm9ydHJhbjkwSW50cmluc2ljCiAgZW5kaWYKCiAgSGlMaW5rIGZvcnRyYW5GbG9hdAkJRmxvYXQKICBIaUxpbmsgZm9ydHJhblByZUNvbmRpdAlQcmVDb25kaXQKICBIaUxpbmsgZm9ydHJhbkluY2x1ZGUJCUluY2x1ZGUKICBIaUxpbmsgY0luY2x1ZGVkCQlmb3J0cmFuU3RyaW5nCiAgSGlMaW5rIGNJbmNsdWRlCQlJbmNsdWRlCiAgSGlMaW5rIGNQcmVQcm9jCQlQcmVQcm9jCiAgSGlMaW5rIGNQcmVDb25kaXQJCVByZUNvbmRpdAogIEhpTGluayBmb3J0cmFuUGFyZW5FcnJvcglFcnJvcgogIEhpTGluayBmb3J0cmFuQ29tbWVudAkJQ29tbWVudAogIEhpTGluayBmb3J0cmFuU2VyaWFsTnVtYmVyCVRvZG8KICBIaUxpbmsgZm9ydHJhblRhYgkJRXJyb3IKICAiIFZlbmRvciBleHRlbnNpb25zCiAgSGlMaW5rIGZvcnRyYW5FeHRyYUludHJpbnNpYwlGdW5jdGlvbgoKICBkZWxjb21tYW5kIEhpTGluawplbmRpZgoKbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZm9ydHJhbiIKCiIgdmltOiB0cz04IHR3PTEzMgo=