1688054432
waR3U4bTeM%3A818eb8f6c05f506b234cae0e240efc73-3b2da7ef2c720f344978c98b2e30ed27
s:155044:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjY6IkNoZWNrcyB0aGF0IGNvbnRyb2wgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBhbmQgaW5kZW50ZWQgY29ycmVjdGx5LiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6MTM6IkdyZWcgU2hlcndvb2QiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MTk6ImdzaGVyd29vZEBzcXVpei5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDQ6IjIwMDYtMjAxNSBTcXVpeiBQdHkgTHRkIChBQk4gNzcgMDg0IDY3MCA2MDApIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo4MDoiaHR0cHM6Ly9naXRodWIuY29tL3NxdWl6bGFicy9QSFBfQ29kZVNuaWZmZXIvYmxvYi9tYXN0ZXIvbGljZW5jZS50eHQgQlNEIExpY2VuY2UiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjNiMmRhN2VmMmM3MjBmMzQ0OTc4Yzk4YjJlMzBlZDI3IjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MjA6IlNjb3BlSW5kZW50U25pZmYucGhwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6OTM6InZlbmRvci9zcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyL3NyYy9TdGFuZGFyZHMvR2VuZXJpYy9TbmlmZnMvV2hpdGVTcGFjZS9TY29wZUluZGVudFNuaWZmLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6NzA2MDQ6Ijw/cGhwCi8qKgogKiBDaGVja3MgdGhhdCBjb250cm9sIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgYW5kIGluZGVudGVkIGNvcnJlY3RseS4KICoKICogQGF1dGhvciAgICBHcmVnIFNoZXJ3b29kIDxnc2hlcndvb2RAc3F1aXoubmV0PgogKiBAY29weXJpZ2h0IDIwMDYtMjAxNSBTcXVpeiBQdHkgTHRkIChBQk4gNzcgMDg0IDY3MCA2MDApCiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9naXRodWIuY29tL3NxdWl6bGFicy9QSFBfQ29kZVNuaWZmZXIvYmxvYi9tYXN0ZXIvbGljZW5jZS50eHQgQlNEIExpY2VuY2UKICovCgpuYW1lc3BhY2UgUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlOwoKdXNlIFBIUF9Db2RlU25pZmZlclxDb25maWc7CnVzZSBQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZTsKdXNlIFBIUF9Db2RlU25pZmZlclxTbmlmZnNcU25pZmY7CnVzZSBQSFBfQ29kZVNuaWZmZXJcVXRpbFxUb2tlbnM7CgpjbGFzcyBTY29wZUluZGVudFNuaWZmIGltcGxlbWVudHMgU25pZmYKewoKICAgIC8qKgogICAgICogQSBsaXN0IG9mIHRva2VuaXplcnMgdGhpcyBzbmlmZiBzdXBwb3J0cy4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkc3VwcG9ydGVkVG9rZW5pemVycyA9IFsKICAgICAgICAnUEhQJywKICAgICAgICAnSlMnLAogICAgXTsKCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2Ygc3BhY2VzIGNvZGUgc2hvdWxkIGJlIGluZGVudGVkLgogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgJGluZGVudCA9IDQ7CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSBpbmRlbnQgbmVlZCB0byBiZSBleGFjdGx5IHJpZ2h0PwogICAgICoKICAgICAqIElmIFRSVUUsIGluZGVudCBuZWVkcyB0byBiZSBleGFjdGx5ICRpbmRlbnQgc3BhY2VzLiBJZiBGQUxTRSwKICAgICAqIGluZGVudCBuZWVkcyB0byBiZSBhdCBsZWFzdCAkaW5kZW50IHNwYWNlcyAoYnV0IGNhbiBiZSBtb3JlKS4KICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgcHVibGljICRleGFjdCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogU2hvdWxkIHRhYnMgYmUgdXNlZCBmb3IgaW5kZW50aW5nPwogICAgICoKICAgICAqIElmIFRSVUUsIGZpeGVzIHdpbGwgYmUgbWFkZSB1c2luZyB0YWJzIGluc3RlYWQgb2Ygc3BhY2VzLgogICAgICogVGhlIHNpemUgb2YgZWFjaCB0YWIgaXMgaW1wb3J0YW50LCBzbyBpdCBzaG91bGQgYmUgc3BlY2lmaWVkCiAgICAgKiB1c2luZyB0aGUgLS10YWItd2lkdGggQ0xJIGFyZ3VtZW50LgogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwdWJsaWMgJHRhYkluZGVudCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogVGhlIC0tdGFiLXdpZHRoIENMSSB2YWx1ZSB0aGF0IGlzIGJlaW5nIHVzZWQuCiAgICAgKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgJHRhYldpZHRoID0gbnVsbDsKCiAgICAvKioKICAgICAqIExpc3Qgb2YgdG9rZW5zIG5vdCBuZWVkaW5nIHRvIGJlIGNoZWNrZWQgZm9yIGluZGVudGF0aW9uLgogICAgICoKICAgICAqIFVzZWZ1bCB0byBhbGxvdyBTbmlmZnMgYmFzZWQgb24gdGhpcyB0byBlYXNpbHkgaWdub3JlL3NraXAgc29tZQogICAgICogdG9rZW5zIGZyb20gdmVyaWZpY2F0aW9uLiBGb3IgZXhhbXBsZSwgaW5saW5lIEhUTUwgc2VjdGlvbnMKICAgICAqIG9yIFBIUCBvcGVuL2Nsb3NlIHRhZ3MgY2FuIGVzY2FwZSBmcm9tIGhlcmUgYW5kIGhhdmUgdGhlaXIgb3duCiAgICAgKiBydWxlcyBlbHNld2hlcmUuCiAgICAgKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwdWJsaWMgJGlnbm9yZUluZGVudGF0aW9uVG9rZW5zID0gW107CgogICAgLyoqCiAgICAgKiBMaXN0IG9mIHRva2VucyBub3QgbmVlZGluZyB0byBiZSBjaGVja2VkIGZvciBpbmRlbnRhdGlvbi4KICAgICAqCiAgICAgKiBUaGlzIGlzIGEgY2FjaGVkIGNvcHkgb2YgdGhlIHB1YmxpYyB2ZXJzaW9uIG9mIHRoaXMgdmFyLCB3aGljaAogICAgICogY2FuIGJlIHNldCBpbiBhIHJ1bGVzZXQgZmlsZSwgYW5kIHNvbWUgY29yZSBpZ25vcmVkIHRva2Vucy4KICAgICAqCiAgICAgKiBAdmFyIGludFtdCiAgICAgKi8KICAgIHByaXZhdGUgJGlnbm9yZUluZGVudGF0aW9uID0gW107CgogICAgLyoqCiAgICAgKiBBbnkgc2NvcGUgb3BlbmVycyB0aGF0IHNob3VsZCBub3QgY2F1c2UgYW4gaW5kZW50LgogICAgICoKICAgICAqIEB2YXIgaW50W10KICAgICAqLwogICAgcHJvdGVjdGVkICRub25JbmRlbnRpbmdTY29wZXMgPSBbXTsKCiAgICAvKioKICAgICAqIFNob3cgZGVidWcgb3V0cHV0IGZvciB0aGlzIHNuaWZmLgogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlICRkZWJ1ZyA9IGZhbHNlOwoKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdG9rZW5zIHRoaXMgdGVzdCB3YW50cyB0byBsaXN0ZW4gZm9yLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCkKICAgIHsKICAgICAgICBpZiAoZGVmaW5lZCgnUEhQX0NPREVTTklGRkVSX0lOX1RFU1RTJykgPT09IHRydWUpIHsKICAgICAgICAgICAgJHRoaXMtPmRlYnVnID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW1RfT1BFTl9UQUddOwoKICAgIH0vL2VuZCByZWdpc3RlcigpCgoKICAgIC8qKgogICAgICogUHJvY2Vzc2VzIHRoaXMgdGVzdCwgd2hlbiBvbmUgb2YgaXRzIHRva2VucyBpcyBlbmNvdW50ZXJlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gXFBIUF9Db2RlU25pZmZlclxGaWxlc1xGaWxlICRwaHBjc0ZpbGUgQWxsIHRoZSB0b2tlbnMgZm91bmQgaW4gdGhlIGRvY3VtZW50LgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhY2tQdHIgIFRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB0b2tlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzdGFjayBwYXNzZWQgaW4gJHRva2Vucy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvY2VzcyhGaWxlICRwaHBjc0ZpbGUsICRzdGFja1B0cikKICAgIHsKICAgICAgICAkZGVidWcgPSBDb25maWc6OmdldENvbmZpZ0RhdGEoJ3Njb3BlX2luZGVudF9kZWJ1ZycpOwogICAgICAgIGlmICgkZGVidWcgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPmRlYnVnID0gKGJvb2wpICRkZWJ1ZzsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dGFiV2lkdGggPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRwaHBjc0ZpbGUtPmNvbmZpZy0+dGFiV2lkdGgpID09PSBmYWxzZSB8fCAkcGhwY3NGaWxlLT5jb25maWctPnRhYldpZHRoID09PSAwKSB7CiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgaG93IHdpZGUgdGFicyBhcmUsIHNvIGFzc3VtZSA0IHNwYWNlcyBmb3IgZml4aW5nLgogICAgICAgICAgICAgICAgLy8gSXQgc2hvdWxkbid0IHJlYWxseSBtYXR0ZXIgYmVjYXVzZSBpbmRlbnQgY2hlY2tzIGVsc2V3aGVyZSBpbiB0aGUKICAgICAgICAgICAgICAgIC8vIHN0YW5kYXJkIHNob3VsZCBmaXggdGhpbmdzIHVwLgogICAgICAgICAgICAgICAgJHRoaXMtPnRhYldpZHRoID0gNDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT50YWJXaWR0aCA9ICRwaHBjc0ZpbGUtPmNvbmZpZy0+dGFiV2lkdGg7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRsYXN0T3BlblRhZyAgICAgPSAkc3RhY2tQdHI7CiAgICAgICAgJGxhc3RDbG9zZVRhZyAgICA9IG51bGw7CiAgICAgICAgJG9wZW5TY29wZXMgICAgICA9IFtdOwogICAgICAgICRhZGp1c3RtZW50cyAgICAgPSBbXTsKICAgICAgICAkc2V0SW5kZW50cyAgICAgID0gW107CiAgICAgICAgJGRpc2FibGVFeGFjdEVuZCA9IDA7CgogICAgICAgICR0b2tlbnMgID0gJHBocGNzRmlsZS0+Z2V0VG9rZW5zKCk7CiAgICAgICAgJGZpcnN0ICAgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoVF9JTkxJTkVfSFRNTCwgJHN0YWNrUHRyKTsKICAgICAgICAkdHJpbW1lZCA9IGx0cmltKCR0b2tlbnNbJGZpcnN0XVsnY29udGVudCddKTsKICAgICAgICBpZiAoJHRyaW1tZWQgPT09ICcnKSB7CiAgICAgICAgICAgICRjdXJyZW50SW5kZW50ID0gKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3VycmVudEluZGVudCA9IChzdHJsZW4oJHRva2Vuc1skZmlyc3RdWydjb250ZW50J10pIC0gc3RybGVuKCR0cmltbWVkKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skc3RhY2tQdHJdWydsaW5lJ107CiAgICAgICAgICAgIGVjaG8gIlN0YXJ0IHdpdGggdG9rZW4gJHN0YWNrUHRyIG9uIGxpbmUgJGxpbmUgd2l0aCBpbmRlbnQgJGN1cnJlbnRJbmRlbnQiLlBIUF9FT0w7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmlnbm9yZUluZGVudGF0aW9uKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkdGhpcy0+aWdub3JlSW5kZW50YXRpb24gPSBbVF9JTkxJTkVfSFRNTCA9PiB0cnVlXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmlnbm9yZUluZGVudGF0aW9uVG9rZW5zIGFzICR0b2tlbikgewogICAgICAgICAgICAgICAgaWYgKGlzX2ludCgkdG9rZW4pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCR0b2tlbikgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHRva2VuID0gY29uc3RhbnQoJHRva2VuKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+aWdub3JlSW5kZW50YXRpb25bJHRva2VuXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgJHRoaXMtPmV4YWN0ICAgICA9IChib29sKSAkdGhpcy0+ZXhhY3Q7CiAgICAgICAgJHRoaXMtPnRhYkluZGVudCA9IChib29sKSAkdGhpcy0+dGFiSW5kZW50OwoKICAgICAgICAkY2hlY2tBbm5vdGF0aW9ucyA9ICRwaHBjc0ZpbGUtPmNvbmZpZy0+YW5ub3RhdGlvbnM7CgogICAgICAgIGZvciAoJGkgPSAoJHN0YWNrUHRyICsgMSk7ICRpIDwgJHBocGNzRmlsZS0+bnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkaSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBoYXMgZ29uZSB2ZXJ5IHdyb25nOyBtYXliZSBhIHBhcnNlIGVycm9yLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY2hlY2tBbm5vdGF0aW9ucyA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9QSFBDU19TRVQKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbJGldWydzbmlmZkNvZGUnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWydzbmlmZkNvZGUnXSA9PT0gJ0dlbmVyaWMuV2hpdGVTcGFjZS5TY29wZUluZGVudCcKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWydzbmlmZlByb3BlcnR5J10gPT09ICdleGFjdCcKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkdG9rZW5zWyRpXVsnc25pZmZQcm9wZXJ0eVZhbHVlJ107CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlID09PSAndHJ1ZScpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkdmFsdWUgPT09ICdmYWxzZScpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gKGJvb2wpICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+ZXhhY3QgPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmV4YWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9ICd0cnVlJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAnZmFsc2UnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZWNobyAiKiB0b2tlbiAkaSBvbiBsaW5lICRsaW5lIHNldCBleGFjdCBmbGFnIHRvICR2YWx1ZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgICRjaGVja1Rva2VuICA9IG51bGw7CiAgICAgICAgICAgICRjaGVja0luZGVudCA9IG51bGw7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgRG9uJ3QgY2hlY2sgaW5kZW50cyBleGFjdGx5IGJldHdlZW4gcGFyZW50aGVzaXMgb3IgYXJyYXlzIGFzIHRoZXkKICAgICAgICAgICAgICAgIHRlbmQgdG8gaGF2ZSBjdXN0b20gcnVsZXMsIHN1Y2ggYXMgd2l0aCBtdWx0aS1saW5lIGZ1bmN0aW9uIGNhbGxzCiAgICAgICAgICAgICAgICBhbmQgY29udHJvbCBzdHJ1Y3R1cmUgY29uZGl0aW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICRleGFjdCA9ICR0aGlzLT5leGFjdDsKCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVsnY29kZSddID09PSBUX09QRU5fUEFSRU5USEVTSVMKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbJGldWydwYXJlbnRoZXNpc19jbG9zZXInXSkgPT09IHRydWUKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZGlzYWJsZUV4YWN0RW5kID0gbWF4KCRkaXNhYmxlRXhhY3RFbmQsICR0b2tlbnNbJGldWydwYXJlbnRoZXNpc19jbG9zZXInXSk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZGlzYWJsZUV4YWN0RW5kXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIk9wZW5pbmcgcGFyZW50aGVzaXMgZm91bmQgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGRpc2FibGluZyBleGFjdCBpbmRlbnQgY2hlY2tpbmcgdW50aWwgJGRpc2FibGVFeGFjdEVuZCAoJHR5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGV4YWN0ID09PSB0cnVlICYmICRpIDwgJGRpc2FibGVFeGFjdEVuZCkgewogICAgICAgICAgICAgICAgJGV4YWN0ID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIERldGVjdCBsaW5lIGNoYW5nZXMgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZGVudCBpcy4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydjb2x1bW4nXSA9PT0gMSkgewogICAgICAgICAgICAgICAgJHRyaW1tZWQgPSBsdHJpbSgkdG9rZW5zWyRpXVsnY29udGVudCddKTsKICAgICAgICAgICAgICAgIGlmICgkdHJpbW1lZCA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1soJGkgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWydsaW5lJ10gPT09ICR0b2tlbnNbKCRpICsgMSldWydsaW5lJ10KICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrVG9rZW4gID0gKCRpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbkluZGVudCA9ICgkdG9rZW5zWygkaSArIDEpXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjaGVja1Rva2VuICA9ICRpOwogICAgICAgICAgICAgICAgICAgICR0b2tlbkluZGVudCA9IChzdHJsZW4oJHRva2Vuc1skaV1bJ2NvbnRlbnQnXSkgLSBzdHJsZW4oJHRyaW1tZWQpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ2xvc2luZyBwYXJlbnRoZXNpcyBzaG91bGQganVzdCBiZSBpbmRlbnRlZCB0byBhdCBsZWFzdAogICAgICAgICAgICAvLyB0aGUgc2FtZSBsZXZlbCBhcyB3aGVyZSB0aGV5IHdlcmUgb3BlbmVkIChidXQgY2FuIGJlIG1vcmUpLgogICAgICAgICAgICBpZiAoKCRjaGVja1Rva2VuICE9PSBudWxsCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddID09PSBUX0NMT1NFX1BBUkVOVEhFU0lTCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWyRjaGVja1Rva2VuXVsncGFyZW50aGVzaXNfb3BlbmVyJ10pID09PSB0cnVlKQogICAgICAgICAgICAgICAgfHwgKCR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfQ0xPU0VfUEFSRU5USEVTSVMKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbJGldWydwYXJlbnRoZXNpc19vcGVuZXInXSkgPT09IHRydWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVuQ2xvc2VyID0gJGNoZWNrVG9rZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRwYXJlbkNsb3NlciA9ICRpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2xvc2luZyBwYXJlbnRoZXNpcyBmb3VuZCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwYXJlbk9wZW5lciA9ICR0b2tlbnNbJHBhcmVuQ2xvc2VyXVsncGFyZW50aGVzaXNfb3BlbmVyJ107CiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skcGFyZW5DbG9zZXJdWydsaW5lJ10gIT09ICR0b2tlbnNbJHBhcmVuT3BlbmVyXVsnbGluZSddKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVucyA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJHBhcmVuQ2xvc2VyXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGVtcHR5KCR0b2tlbnNbJHBhcmVuQ2xvc2VyXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW5zID0gJHRva2Vuc1skcGFyZW5DbG9zZXJdWyduZXN0ZWRfcGFyZW50aGVzaXMnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZW5kKCRwYXJlbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW5zID0ga2V5KCRwYXJlbnMpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJHBhcmVuc11bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiBoYXMgbmVzdGVkIHBhcmVudGhlc2lzICRwYXJlbnMgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skcGFyZW5DbG9zZXJdWydjb25kaXRpb25zJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGVtcHR5KCR0b2tlbnNbJHBhcmVuQ2xvc2VyXVsnY29uZGl0aW9ucyddKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGlzc2V0KCR0b2tlbnNbJHBhcmVuQ2xvc2VyXVsncGFyZW50aGVzaXNfb3duZXInXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRwYXJlbnMgPiAwKQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gJHRva2Vuc1skcGFyZW5DbG9zZXJdWydjb25kaXRpb25zJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCgkY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9IGtleSgkY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRjb25kaXRpb25dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGNvbmRpdGlvbl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiBpcyBpbnNpZGUgY29uZGl0aW9uICRjb25kaXRpb24gKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyZW5zID4gJGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdXNpbmcgcGFyZW50aGVzaXMgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVuT3BlbmVyID0gJHBhcmVuczsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiAgID0gMDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRjb25kaXRpb24gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB1c2luZyBjb25kaXRpb24gKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVuT3BlbmVyID0gJGNvbmRpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVucyAgICAgID0gMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRleGFjdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAkbGFzdE9wZW5UYWdDb25kaXRpb25zID0gYXJyYXlfa2V5cygkdG9rZW5zWyRsYXN0T3BlblRhZ11bJ2NvbmRpdGlvbnMnXSk7CiAgICAgICAgICAgICAgICAgICAgJGxhc3RPcGVuVGFnQ29uZGl0aW9uICA9IGFycmF5X3BvcCgkbGFzdE9wZW5UYWdDb25kaXRpb25zKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb24gPiAwICYmICRsYXN0T3BlblRhZ0NvbmRpdGlvbiA9PT0gJGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogb3BlbiB0YWcgaXMgaW5zaWRlIGNvbmRpdGlvbjsgdXNpbmcgb3BlbiB0YWcgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFtUX1dISVRFU1BBQ0UsIFRfSU5MSU5FX0hUTUxdLCAkbGFzdE9wZW5UYWcsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBmaXJzdCB0b2tlbiBvbiBsaW5lICRsaW5lIGlzICRmaXJzdCAoJHR5cGUpICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja0luZGVudCA9ICgkdG9rZW5zWyRmaXJzdF1bJ2NvbHVtbiddIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYWRqdXN0bWVudHNbJGNvbmRpdGlvbl0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRjb25kaXRpb25dOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9ICRjaGVja0luZGVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skbGFzdE9wZW5UYWddWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGNoZWNraW5nIGluZGVudCBvZiAkY2hlY2tJbmRlbnQ7IG1haW4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkbGFzdE9wZW5UYWcgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGNvbmRpdGlvbiA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRva2Vuc1skY29uZGl0aW9uXVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KCRzZXRJbmRlbnRzWyR0b2tlbnNbJGNvbmRpdGlvbl1bJ3Njb3BlX29wZW5lciddXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ID0gJHNldEluZGVudHNbJHRva2Vuc1skY29uZGl0aW9uXVsnc2NvcGVfb3BlbmVyJ11dOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFkanVzdG1lbnRzWyRjb25kaXRpb25dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ICs9ICRhZGp1c3RtZW50c1skY29uZGl0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAkY2hlY2tJbmRlbnQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGNvbmRpdGlvbl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gY2hlY2tpbmcgaW5kZW50IG9mICRjaGVja0luZGVudDsgbWFpbiBpbmRlbnQgc2V0IHRvICRjdXJyZW50SW5kZW50IGJ5IHRva2VuICRjb25kaXRpb24gKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaXJzdCA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRwYXJlbk9wZW5lciwgdHJ1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgPSAoJHRva2Vuc1skZmlyc3RdWydjb2x1bW4nXSAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFkanVzdG1lbnRzWyRmaXJzdF0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRmaXJzdF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skZmlyc3RdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGZpcnN0XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIG9uIGxpbmUgJGxpbmUgaXMgJGZpcnN0ICgkdHlwZSkgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmaXJzdCA9PT0gJHRva2Vuc1skcGFyZW5DbG9zZXJdWydwYXJlbnRoZXNpc19vcGVuZXInXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJGZpcnN0IC0gMSldWydsaW5lJ10gPT09ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmxpa2VseSB0byBiZSB0aGUgc3RhcnQgb2YgdGhlIHN0YXRlbWVudCwgc28gbG9vawogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFjayBmdXJ0aGVyIHRvIGZpbmQgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3QtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIGlzIHRoZSBwYXJlbnRoZXNpcyBvcGVuZXIgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogYW1lbmRlZCBmaXJzdCB0b2tlbiBpcyAkZmlyc3QgKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJHBocGNzRmlsZS0+ZmluZFN0YXJ0T2ZTdGF0ZW1lbnQoJGZpcnN0LCBUX0NPTU1BKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwcmV2ICE9PSAkZmlyc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBzdGFydCBvZiB0aGUgc3RhdGVtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skcHJldl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJHByZXZdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHByZXZpb3VzIGlzICR0eXBlIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoW1RfV0hJVEVTUEFDRSwgVF9JTkxJTkVfSFRNTF0sICRwcmV2LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmlyc3QgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZXYgID0gJHBocGNzRmlsZS0+ZmluZFN0YXJ0T2ZTdGF0ZW1lbnQoJGZpcnN0LCBUX0NPTU1BKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoW1RfV0hJVEVTUEFDRSwgVF9JTkxJTkVfSFRNTF0sICRwcmV2LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gJHByZXY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skZmlyc3RdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogYW1lbmRlZCBmaXJzdCB0b2tlbiBpcyAkZmlyc3QgKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGZpcnN0XVsnc2NvcGVfY2xvc2VyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRmaXJzdF1bJ3Njb3BlX2Nsb3NlciddID09PSAkZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIGlzIGEgc2NvcGUgY2xvc2VyICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGZpcnN0XVsnc2NvcGVfY29uZGl0aW9uJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlQ2xvc2VyID0gJGZpcnN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaXJzdCAgICAgICA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICR0b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ10sIHRydWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9ICgkdG9rZW5zWyRmaXJzdF1bJ2NvbHVtbiddIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCArPSAkYWRqdXN0bWVudHNbJGZpcnN0XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBkaXZpc2libGUgYnkgb3VyIGV4cGVjdGVkIGluZGVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2NvbmRpdGlvbiddXVsnY29kZSddICE9PSBUX0NMT1NVUkUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoaW50KSAoY2VpbCgkY3VycmVudEluZGVudCAvICR0aGlzLT5pbmRlbnQpICogJHRoaXMtPmluZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2V0SW5kZW50c1skZmlyc3RdID0gJGN1cnJlbnRJbmRlbnQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBpbmRlbnQgc2V0IHRvICRjdXJyZW50SW5kZW50IGJ5IHRva2VuICRmaXJzdCAoJHR5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZm9yY2UgY3VycmVudCBpbmRlbnQgdG8gYmUgZGl2aXNpYmxlIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgY3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlcyBpbiBwbGFjZSBiZXR3ZWVuIHBhcmVudGhlc2lzLCBzdWNoIGFzIHdpdGggYXJyYXlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoJHRva2Vuc1skZmlyc3RdWydjb2x1bW4nXSAtIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICs9ICRhZGp1c3RtZW50c1skZmlyc3RdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXRJbmRlbnRzWyRmaXJzdF0gPSAkY3VycmVudEluZGVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGNoZWNraW5nIGluZGVudCBvZiAkY2hlY2tJbmRlbnQ7IG1haW4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkZmlyc3QgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0ICogaWdub3Jpbmcgc2luZ2xlLWxpbmUgZGVmaW5pdGlvbiAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLy8gQ2xvc2luZyBzaG9ydCBhcnJheSBicmFja2V0IHNob3VsZCBqdXN0IGJlIGluZGVudGVkIHRvIGF0IGxlYXN0CiAgICAgICAgICAgIC8vIHRoZSBzYW1lIGxldmVsIGFzIHdoZXJlIGl0IHdhcyBvcGVuZWQgKGJ1dCBjYW4gYmUgbW9yZSkuCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVsnY29kZSddID09PSBUX0NMT1NFX1NIT1JUX0FSUkFZCiAgICAgICAgICAgICAgICB8fCAoJGNoZWNrVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10gPT09IFRfQ0xPU0VfU0hPUlRfQVJSQVkpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJGFycmF5Q2xvc2VyID0gJGNoZWNrVG9rZW47CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRhcnJheUNsb3NlciA9ICRpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGFycmF5Q2xvc2VyXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNsb3Npbmcgc2hvcnQgYXJyYXkgYnJhY2tldCBmb3VuZCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRhcnJheU9wZW5lciA9ICR0b2tlbnNbJGFycmF5Q2xvc2VyXVsnYnJhY2tldF9vcGVuZXInXTsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRhcnJheUNsb3Nlcl1bJ2xpbmUnXSAhPT0gJHRva2Vuc1skYXJyYXlPcGVuZXJdWydsaW5lJ10pIHsKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoVF9XSElURVNQQUNFLCAkYXJyYXlPcGVuZXIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICRleGFjdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skZmlyc3RdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBmaXJzdCB0b2tlbiBvbiBsaW5lICRsaW5lIGlzICRmaXJzdCAoJHR5cGUpICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJGZpcnN0ID09PSAkdG9rZW5zWyRhcnJheUNsb3Nlcl1bJ2JyYWNrZXRfb3BlbmVyJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmxpa2VseSB0byBiZSB0aGUgc3RhcnQgb2YgdGhlIHN0YXRlbWVudCwgc28gbG9vawogICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrIGZ1cnRoZXIgdG8gZmluZCBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0LS07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcHJldiA9ICRwaHBjc0ZpbGUtPmZpbmRTdGFydE9mU3RhdGVtZW50KCRmaXJzdCwgW1RfQ09NTUEsIFRfRE9VQkxFX0FSUk9XXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwcmV2ICE9PSAkZmlyc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIHN0YXJ0IG9mIHRoZSBzdGF0ZW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skcHJldl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skcHJldl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBwcmV2aW91cyBpcyAkdHlwZSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRmaXJzdCA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRwcmV2LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHByZXYgID0gJHBocGNzRmlsZS0+ZmluZFN0YXJ0T2ZTdGF0ZW1lbnQoJGZpcnN0LCBbVF9DT01NQSwgVF9ET1VCTEVfQVJST1ddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFRfV0hJVEVTUEFDRSwgJHByZXYsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBhbWVuZGVkIGZpcnN0IHRva2VuIGlzICRmaXJzdCAoJHR5cGUpIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRva2Vuc1skZmlyc3RdWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kTmV4dChUX1dISVRFU1BBQ0UsICgkZmlyc3QgKyAxKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgPSAoJHRva2Vuc1skZmlyc3RdWydjb2x1bW4nXSAtIDEpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYWRqdXN0bWVudHNbJGZpcnN0XSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ICs9ICRhZGp1c3RtZW50c1skZmlyc3RdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGZpcnN0XVsnc2NvcGVfY2xvc2VyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGZpcnN0XVsnc2NvcGVfY2xvc2VyJ10gPT09ICRmaXJzdAogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaXMgYSBzY29wZSBjbG9zZXIgYW5kIHdvdWxkIGhhdmUgYWxyZWFkeQogICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgc2V0IHRoZSBpbmRlbnQgbGV2ZWwgY29ycmVjdGx5LCBzbwogICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhZGp1c3QgaXQgYWdhaW4uCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBmaXJzdCB0b2tlbiBpcyBhIHNjb3BlIGNsb3NlcjsgaWdub3JpbmcgY2xvc2luZyBzaG9ydCBhcnJheSBicmFja2V0ICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkc2V0SW5kZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAkc2V0SW5kZW50c1skZmlyc3RdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHJlc2V0IHRvICRjdXJyZW50SW5kZW50Ii5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZm9yY2UgY3VycmVudCBpbmRlbnQgdG8gYmUgZGl2aXNpYmxlIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgY3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1bGVzIGluIHBsYWNlIGZvciBhcnJheXMuCiAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ID0gKCR0b2tlbnNbJGZpcnN0XVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRmaXJzdF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRzZXRJbmRlbnRzWyRmaXJzdF0gPSAkY3VycmVudEluZGVudDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGNoZWNraW5nIGluZGVudCBvZiAkY2hlY2tJbmRlbnQ7IG1haW4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkZmlyc3QgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCAqIGlnbm9yaW5nIHNpbmdsZS1saW5lIGRlZmluaXRpb24gKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIEFkanVzdCBsaW5lcyB3aXRoaW4gc2NvcGVzIHdoaWxlIGF1dG8tZml4aW5nLgogICAgICAgICAgICBpZiAoJGNoZWNrVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICYmICRleGFjdCA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICYmIChlbXB0eSgkdG9rZW5zWyRjaGVja1Rva2VuXVsnY29uZGl0aW9ucyddKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgIHx8IChpc3NldCgkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfb3BlbmVyJ10gPT09ICRjaGVja1Rva2VuKSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2NvbmRpdGlvbnMnXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb25kaXRpb25zJ107CiAgICAgICAgICAgICAgICAgICAgZW5kKCRjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSBrZXkoJGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSAkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfY29uZGl0aW9uJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGZpcnN0ID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFRfV0hJVEVTUEFDRSwgJGNvbmRpdGlvbiwgdHJ1ZSk7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmICgoJGFkanVzdG1lbnRzWyRmaXJzdF0gPCAwICYmICR0b2tlbkluZGVudCA+ICRjdXJyZW50SW5kZW50KQogICAgICAgICAgICAgICAgICAgIHx8ICgkYWRqdXN0bWVudHNbJGZpcnN0XSA+IDAgJiYgJHRva2VuSW5kZW50IDwgJGN1cnJlbnRJbmRlbnQpKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxlbmd0aCA9ICgkdG9rZW5JbmRlbnQgKyAkYWRqdXN0bWVudHNbJGZpcnN0XSk7CgogICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gZml4aW5nLCB3ZSdyZSBnb2luZyB0byBhZGp1c3QgdGhlIGluZGVudCBvZiB0aGlzIGxpbmUKICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIGF1dG9tYXRpY2FsbHksIHNvIHVzZSB0aGlzIG5ldyBwYWRkaW5nIHZhbHVlIHdoZW4KICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJpbmcgdGhlIGV4cGVjdGVkIHBhZGRpbmcgdG8gdGhlIGFjdHVhbCBwYWRkaW5nLgogICAgICAgICAgICAgICAgICAgIGlmICgkcGhwY3NGaWxlLT5maXhlci0+ZW5hYmxlZCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5JbmRlbnQgPSAkbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRqdXN0SW5kZW50KCRwaHBjc0ZpbGUsICRjaGVja1Rva2VuLCAkbGVuZ3RoLCAkYWRqdXN0bWVudHNbJGZpcnN0XSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRjaGVja1Rva2VuXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJJbmRlbnQgYWRqdXN0ZWQgdG8gJGxlbmd0aCBmb3IgJHR5cGUgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRhZGp1c3RtZW50c1skY2hlY2tUb2tlbl0gPSAkYWRqdXN0bWVudHNbJGZpcnN0XTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGNoZWNrVG9rZW5dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skY2hlY2tUb2tlbl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBhZGQgYWRqdXN0bWVudCBvZiAiLiRhZGp1c3RtZW50c1skY2hlY2tUb2tlbl0uIiBmb3IgdG9rZW4gJGNoZWNrVG9rZW4gKCR0eXBlKSBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIFNjb3BlIGNsb3NlcnMgcmVzZXQgdGhlIHJlcXVpcmVkIGluZGVudCB0byB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgb3BlbmluZyBjb25kaXRpb24uCiAgICAgICAgICAgIGlmICgoJGNoZWNrVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICYmIGlzc2V0KCRvcGVuU2NvcGVzWyRjaGVja1Rva2VuXSkgPT09IHRydWUKICAgICAgICAgICAgICAgIHx8IChpc3NldCgkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfY29uZGl0aW9uJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfY2xvc2VyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfY2xvc2VyJ10gPT09ICRjaGVja1Rva2VuCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRjaGVja1Rva2VuXVsnbGluZSddICE9PSAkdG9rZW5zWyR0b2tlbnNbJGNoZWNrVG9rZW5dWydzY29wZV9vcGVuZXInXV1bJ2xpbmUnXSkpCiAgICAgICAgICAgICAgICB8fCAoJGNoZWNrVG9rZW4gPT09IG51bGwKICAgICAgICAgICAgICAgICYmIGlzc2V0KCRvcGVuU2NvcGVzWyRpXSkgPT09IHRydWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2hlY2tUb2tlbiA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyR0b2tlbnNbJGNoZWNrVG9rZW5dWydzY29wZV9jb25kaXRpb24nXV1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRjaGVja1Rva2VuXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2xvc2Ugc2NvcGUgKCR0eXBlKSBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRzY29wZUNsb3NlciA9ICRjaGVja1Rva2VuOwogICAgICAgICAgICAgICAgaWYgKCRzY29wZUNsb3NlciA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRzY29wZUNsb3NlciA9ICRpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb25kaXRpb25Ub2tlbiA9IGFycmF5X3BvcCgkb3BlblNjb3Blcyk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRjb25kaXRpb25Ub2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGNvbmRpdGlvblRva2VuXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gcmVtb3ZlZCBvcGVuIHNjb3BlICRjb25kaXRpb25Ub2tlbiAoJHR5cGUpIG9uIGxpbmUgJGxpbmUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFtUX1dISVRFU1BBQ0UsIFRfSU5MSU5FX0hUTUxdLCAkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2NvbmRpdGlvbiddLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skZmlyc3RdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBmaXJzdCB0b2tlbiBpcyAkZmlyc3QgKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHRva2Vuc1skZmlyc3RdWydjb2RlJ10gPT09IFRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRmaXJzdCAtIDEpXVsnY29kZSddID09PSBUX0NPTlNUQU5UX0VOQ0FQU0VEX1NUUklORwogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoVF9XSElURVNQQUNFLCAoJGZpcnN0IC0gMSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBmb3VuZCBtdWx0aS1saW5lIHN0cmluZzsgYW1lbmRlZCBmaXJzdCB0b2tlbiBpcyAkZmlyc3QgKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ID0gKCR0b2tlbnNbJGZpcnN0XVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFkanVzdG1lbnRzWyRmaXJzdF0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICs9ICRhZGp1c3RtZW50c1skZmlyc3RdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHNldEluZGVudHNbJHNjb3BlQ2xvc2VyXSA9ICRjdXJyZW50SW5kZW50OwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skc2NvcGVDbG9zZXJdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkc2NvcGVDbG9zZXIgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2hlY2sgdGhlIGluZGVudCBvZiBzY29wZSBjbG9zZXJzIGlmIHRoZXkgYXJlCiAgICAgICAgICAgICAgICAgICAgLy8gY3VybHkgYnJhY2VzIGJlY2F1c2Ugb3RoZXIgY29uc3RydWN0cyB0ZW5kIHRvIGhhdmUgZGlmZmVyZW50IHJ1bGVzLgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvZGUnXSA9PT0gVF9DTE9TRV9DVVJMWV9CUkFDS0VUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRleGFjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrVG9rZW4gPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIEhhbmRsZSBzY29wZSBmb3IgSlMgb2JqZWN0IG5vdGF0aW9uLgogICAgICAgICAgICBpZiAoJHBocGNzRmlsZS0+dG9rZW5pemVyVHlwZSA9PT0gJ0pTJwogICAgICAgICAgICAgICAgJiYgKCgkY2hlY2tUb2tlbiAhPT0gbnVsbAogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2NvZGUnXSA9PT0gVF9DTE9TRV9PQkpFQ1QKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGNoZWNrVG9rZW5dWydsaW5lJ10gIT09ICR0b2tlbnNbJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2JyYWNrZXRfb3BlbmVyJ11dWydsaW5lJ10pCiAgICAgICAgICAgICAgICB8fCAoJGNoZWNrVG9rZW4gPT09IG51bGwKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfQ0xPU0VfT0JKRUNUCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXVsnbGluZSddICE9PSAkdG9rZW5zWyR0b2tlbnNbJGldWydicmFja2V0X29wZW5lciddXVsnbGluZSddKSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNsb3NlIEpTIG9iamVjdCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRzY29wZUNsb3NlciA9ICRjaGVja1Rva2VuOwogICAgICAgICAgICAgICAgaWYgKCRzY29wZUNsb3NlciA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRzY29wZUNsb3NlciA9ICRpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29uZGl0aW9uVG9rZW4gPSBhcnJheV9wb3AoJG9wZW5TY29wZXMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRjb25kaXRpb25Ub2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRjb25kaXRpb25Ub2tlbl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiByZW1vdmVkIG9wZW4gc2NvcGUgJGNvbmRpdGlvblRva2VuICgkdHlwZSkgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBhcmVucyA9IDA7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skc2NvcGVDbG9zZXJdWyduZXN0ZWRfcGFyZW50aGVzaXMnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBlbXB0eSgkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ25lc3RlZF9wYXJlbnRoZXNpcyddKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRwYXJlbnMgPSAkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ25lc3RlZF9wYXJlbnRoZXNpcyddOwogICAgICAgICAgICAgICAgICAgIGVuZCgkcGFyZW5zKTsKICAgICAgICAgICAgICAgICAgICAkcGFyZW5zID0ga2V5KCRwYXJlbnMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRwYXJlbnNdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiBoYXMgbmVzdGVkIHBhcmVudGhlc2lzICRwYXJlbnMgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gMDsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvbmRpdGlvbnMnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBlbXB0eSgkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvbmRpdGlvbnMnXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gJHRva2Vuc1skc2NvcGVDbG9zZXJdWydjb25kaXRpb25zJ107CiAgICAgICAgICAgICAgICAgICAgZW5kKCRjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSBrZXkoJGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGNvbmRpdGlvbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRjb25kaXRpb25dWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiBpcyBpbnNpZGUgY29uZGl0aW9uICRjb25kaXRpb24gKCR0eXBlKSBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkcGFyZW5zID4gJGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHVzaW5nIHBhcmVudGhlc2lzICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgICAgID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFRfV0hJVEVTUEFDRSwgJHBhcmVucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRjb25kaXRpb24gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdXNpbmcgY29uZGl0aW9uICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFRfV0hJVEVTUEFDRSwgJGNvbmRpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVucyA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyR0b2tlbnNbJHNjb3BlQ2xvc2VyXVsnYnJhY2tldF9vcGVuZXInXV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHRva2VuIGlzIG5vdCBpbiBwYXJlbnRoZXNpcyBvciBjb25kaXRpb247IHVzaW5nIG9wZW5lciBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoVF9XSElURVNQQUNFLCAkdG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2JyYWNrZXRfb3BlbmVyJ10sIHRydWUpOwogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoJHRva2Vuc1skZmlyc3RdWydjb2x1bW4nXSAtIDEpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICs9ICRhZGp1c3RtZW50c1skZmlyc3RdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkcGFyZW5zID4gMCB8fCAkY29uZGl0aW9uID4gMCkgewogICAgICAgICAgICAgICAgICAgICRjaGVja0luZGVudCA9ICgkdG9rZW5zWyRmaXJzdF1bJ2NvbHVtbiddIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skZmlyc3RdKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRmaXJzdF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbiA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ICAgKz0gJHRoaXMtPmluZGVudDsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJHRoaXMtPmluZGVudDsKICAgICAgICAgICAgICAgICAgICAgICAgJGV4YWN0ICAgICAgICAgID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjaGVja0luZGVudCA9ICRjdXJyZW50SW5kZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBkaXZpc2libGUgYnkgb3VyIGV4cGVjdGVkIGluZGVudC4KICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICAgICAgPSAoaW50KSAoY2VpbCgkY3VycmVudEluZGVudCAvICR0aGlzLT5pbmRlbnQpICogJHRoaXMtPmluZGVudCk7CiAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgICAgICAgID0gKGludCkgKGNlaWwoJGNoZWNrSW5kZW50IC8gJHRoaXMtPmluZGVudCkgKiAkdGhpcy0+aW5kZW50KTsKICAgICAgICAgICAgICAgICRzZXRJbmRlbnRzWyRmaXJzdF0gPSAkY3VycmVudEluZGVudDsKCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGNoZWNraW5nIGluZGVudCBvZiAkY2hlY2tJbmRlbnQ7IG1haW4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkZmlyc3QgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICBpZiAoJGNoZWNrVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICYmIGlzc2V0KFRva2Vuczo6JHNjb3BlT3BlbmVyc1skdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGluX2FycmF5KCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10sICR0aGlzLT5ub25JbmRlbnRpbmdTY29wZXMsIHRydWUpID09PSBmYWxzZQogICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRva2Vuc1skY2hlY2tUb2tlbl1bJ3Njb3BlX29wZW5lciddKSA9PT0gdHJ1ZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRleGFjdCA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAoJGRpc2FibGVFeGFjdEVuZCA+ICRjaGVja1Rva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb25kaXRpb25zJ10gPT09ICR0b2tlbnNbJGRpc2FibGVFeGFjdEVuZF1bJ2NvbmRpdGlvbnMnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXhhY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGxhc3RPcGVuZXIgPSBudWxsOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRvcGVuU2NvcGVzKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICBlbmQoJG9wZW5TY29wZXMpOwogICAgICAgICAgICAgICAgICAgICRsYXN0T3BlbmVyID0gY3VycmVudCgkb3BlblNjb3Blcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQSBzY29wZSBvcGVuZXIgdGhhdCBzaGFyZXMgYSBjbG9zZXIgd2l0aCBhbm90aGVyIHRva2VuIChsaWtlIG11bHRpcGxlCiAgICAgICAgICAgICAgICAvLyBDQVNFcyB1c2luZyB0aGUgc2FtZSBCUkVBSykgbmVlZHMgdG8gcmVkdWNlIHRoZSBpbmRlbnQgbGV2ZWwgc28gaXRzCiAgICAgICAgICAgICAgICAvLyBpbmRlbnQgaXMgY2hlY2tlZCBjb3JyZWN0bHkuIEl0IHdpbGwgdGhlbiBpbmNyZWFzZSB0aGUgaW5kZW50IGFnYWluCiAgICAgICAgICAgICAgICAvLyAoYXMgYWxsIG9wZW5lcnMgZG8pIGFmdGVyIGJlaW5nIGNoZWNrZWQuCiAgICAgICAgICAgICAgICBpZiAoJGxhc3RPcGVuZXIgIT09IG51bGwKICAgICAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWyRsYXN0T3BlbmVyXVsnc2NvcGVfY2xvc2VyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skbGFzdE9wZW5lcl1bJ2xldmVsJ10gPT09ICR0b2tlbnNbJGNoZWNrVG9rZW5dWydsZXZlbCddCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skbGFzdE9wZW5lcl1bJ3Njb3BlX2Nsb3NlciddID09PSAkdG9rZW5zWyRjaGVja1Rva2VuXVsnc2NvcGVfY2xvc2VyJ10KICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICAgICAgICAgIC09ICR0aGlzLT5pbmRlbnQ7CiAgICAgICAgICAgICAgICAgICAgJHNldEluZGVudHNbJGxhc3RPcGVuZXJdID0gJGN1cnJlbnRJbmRlbnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skbGFzdE9wZW5lcl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2hhcmVkIGNsb3NlciBmb3VuZCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGluZGVudCBzZXQgdG8gJGN1cnJlbnRJbmRlbnQgYnkgdG9rZW4gJGxhc3RPcGVuZXIgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10gPT09IFRfQ0xPU1VSRQogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbkluZGVudCA+ICRjdXJyZW50SW5kZW50CiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3BlbmVyIGlzIGluZGVudGVkIG1vcmUgdGhhbiBuZWVkZWQsIHdoaWNoIGlzIGZpbmUuCiAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGp1c3QgY2hlY2sgdGhhdCBpdCBpcyBkaXZpc2libGUgYnkgb3VyIGV4cGVjdGVkIGluZGVudC4KICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgPSAoaW50KSAoY2VpbCgkdG9rZW5JbmRlbnQgLyAkdGhpcy0+aW5kZW50KSAqICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICAgICAgICAgICRleGFjdCAgICAgICA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2xvc3VyZSBmb3VuZCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGNoZWNraW5nIGluZGVudCBvZiAkY2hlY2tJbmRlbnQ7IG1haW4gaW5kZW50IHJlbWFpbnMgYXQgJGN1cnJlbnRJbmRlbnQiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIE1ldGhvZCBwcmVmaXggaW5kZW50YXRpb24gaGFzIHRvIGJlIGV4YWN0IG9yIGVsc2UgaXQgd2lsbCBicmVhawogICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBmdXR1cmUgb25lcy4KICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsCiAgICAgICAgICAgICAgICAmJiBpc3NldChUb2tlbnM6OiRtZXRob2RQcmVmaXhlc1skdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRjaGVja1Rva2VuICsgMSldWydjb2RlJ10gIT09IFRfRE9VQkxFX0NPTE9OCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5leHQgPSAkcGhwY3NGaWxlLT5maW5kTmV4dChUb2tlbnM6OiRlbXB0eVRva2VucywgKCRjaGVja1Rva2VuICsgMSksIG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKCRuZXh0ID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgIHx8ICgkdG9rZW5zWyRuZXh0XVsnY29kZSddICE9PSBUX0NMT1NVUkUKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRuZXh0XVsnY29kZSddICE9PSBUX1ZBUklBQkxFCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skbmV4dF1bJ2NvZGUnXSAhPT0gVF9GTikKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRpc01ldGhvZFByZWZpeCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGNoZWNrVG9rZW5dWyduZXN0ZWRfcGFyZW50aGVzaXMnXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudGhlc2lzID0gYXJyYXlfa2V5cygkdG9rZW5zWyRjaGVja1Rva2VuXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkZGVlcGVzdE9wZW4gPSBhcnJheV9wb3AoJHBhcmVudGhlc2lzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGRlZXBlc3RPcGVuXVsncGFyZW50aGVzaXNfb3duZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJHRva2Vuc1skZGVlcGVzdE9wZW5dWydwYXJlbnRoZXNpc19vd25lciddXVsnY29kZSddID09PSBUX0ZVTkNUSU9OCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBwcm9tb3Rpb24gYW5kIG5vdCBhIG1ldGhvZCBwcmVmaXguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNNZXRob2RQcmVmaXggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc01ldGhvZFByZWZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGNoZWNrVG9rZW5dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGNoZWNrVG9rZW5dWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogbWV0aG9kIHByZWZpeCAoJHR5cGUpIGZvdW5kIG9uIGxpbmUgJGxpbmU7IGluZGVudCBzZXQgdG8gZXhhY3QgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGV4YWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvLyBKUyBwcm9wZXJ0eSBpbmRlbnRhdGlvbiBoYXMgdG8gYmUgZXhhY3Qgb3IgZWxzZSBpZiB3aWxsIGJyZWFrCiAgICAgICAgICAgIC8vIHRoaW5ncyBsaWtlIGZ1bmN0aW9uIGFuZCBvYmplY3QgaW5kZW50YXRpb24uCiAgICAgICAgICAgIGlmICgkY2hlY2tUb2tlbiAhPT0gbnVsbCAmJiAkdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddID09PSBUX1BST1BFUlRZKSB7CiAgICAgICAgICAgICAgICAkZXhhY3QgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBPcGVuIFBIUCB0YWdzIG5lZWRzIHRvIGJlIGluZGVudGVkIHRvIGV4YWN0IGNvbHVtbiBwb3NpdGlvbnMKICAgICAgICAgICAgLy8gc28gdGhleSBkb24ndCBjYXVzZSBwcm9ibGVtcyB3aXRoIGluZGVudCBjaGVja3MgZm9yIHRoZSBjb2RlCiAgICAgICAgICAgIC8vIHdpdGhpbiB0aGVtLCBidXQgdGhleSBkb24ndCBuZWVkIHRvIGxpbmUgdXAgd2l0aCB0aGUgY3VycmVudCBpbmRlbnQKICAgICAgICAgICAgLy8gaW4gbW9zdCBjYXNlcy4KICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsCiAgICAgICAgICAgICAgICAmJiAoJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2NvZGUnXSA9PT0gVF9PUEVOX1RBRwogICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2NvZGUnXSA9PT0gVF9PUEVOX1RBR19XSVRIX0VDSE8pCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ID0gKCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2x1bW4nXSAtIDEpOwoKICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSByZS1vcGVuaW5nIGEgYmxvY2sgdGhhdCB3YXMgY2xvc2VkIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAvLyBzY29wZSBhcyB1cywgdGhlbiByZXNldCB0aGUgaW5kZW50IGJhY2sgdG8gd2hhdCB0aGUgc2NvcGUgb3BlbmVyCiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGVhZCBvZiB1c2luZyB3aGF0ZXZlciBpbmRlbnQgdGhpcyBvcGVuIHRhZyBoYXMgc2V0LgogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb25kaXRpb25zJ10pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRjbG9zZSA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhUX0NMT1NFX1RBRywgKCRjaGVja1Rva2VuIC0gMSkpOwogICAgICAgICAgICAgICAgICAgIGlmICgkY2xvc2UgIT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb25kaXRpb25zJ10gPT09ICR0b2tlbnNbJGNsb3NlXVsnY29uZGl0aW9ucyddCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25zICAgID0gYXJyYXlfa2V5cygkdG9rZW5zWyRjaGVja1Rva2VuXVsnY29uZGl0aW9ucyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RDb25kaXRpb24gPSBhcnJheV9wb3AoJGNvbmRpdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdE9wZW5lciAgICA9ICR0b2tlbnNbJGxhc3RDb25kaXRpb25dWydzY29wZV9vcGVuZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RDbG9zZXIgICAgPSAkdG9rZW5zWyRsYXN0Q29uZGl0aW9uXVsnc2NvcGVfY2xvc2VyJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRsYXN0Q2xvc2VyXVsnbGluZSddICE9PSAkdG9rZW5zWyRjaGVja1Rva2VuXVsnbGluZSddCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc3NldCgkc2V0SW5kZW50c1skbGFzdE9wZW5lcl0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ID0gJHNldEluZGVudHNbJGxhc3RPcGVuZXJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIENsb3NlIHRhZ3MgbmVlZHMgdG8gYmUgaW5kZW50ZWQgdG8gZXhhY3QgY29sdW1uIHBvc2l0aW9ucy4KICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsICYmICR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10gPT09IFRfQ0xPU0VfVEFHKSB7CiAgICAgICAgICAgICAgICAkZXhhY3QgICAgICAgPSB0cnVlOwogICAgICAgICAgICAgICAgJGNoZWNrSW5kZW50ID0gJGN1cnJlbnRJbmRlbnQ7CiAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgPSAoaW50KSAoY2VpbCgkY2hlY2tJbmRlbnQgLyAkdGhpcy0+aW5kZW50KSAqICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIEVMU0Ugc3RhdGVtZW50cyB0aGF0IGFyZSBub3Qgb24gdGhlIHNhbWUKICAgICAgICAgICAgLy8gbGluZSBhcyB0aGUgcHJldmlvdXMgSUYgc3RhdGVtZW50cyBjbG9zaW5nIGJyYWNlLiBUaGV5IHN0aWxsIG5lZWQKICAgICAgICAgICAgLy8gdG8gaGF2ZSB0aGUgc2FtZSBpbmRlbnQgb3IgaXQgd2lsbCBicmVhayBjb2RlIGFmdGVyIHRoZSBibG9jay4KICAgICAgICAgICAgaWYgKCRjaGVja1Rva2VuICE9PSBudWxsICYmICR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10gPT09IFRfRUxTRSkgewogICAgICAgICAgICAgICAgJGV4YWN0ID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRG9uJ3QgcGVyZm9ybSBzdHJpY3QgY2hlY2tpbmcgb24gY2hhaW5lZCBtZXRob2QgY2FsbHMgc2luY2UgdGhleQogICAgICAgICAgICAvLyBhcmUgb2Z0ZW4gY292ZXJlZCBieSBjdXN0b20gcnVsZXMuCiAgICAgICAgICAgIGlmICgkY2hlY2tUb2tlbiAhPT0gbnVsbAogICAgICAgICAgICAgICAgJiYgKCR0b2tlbnNbJGNoZWNrVG9rZW5dWydjb2RlJ10gPT09IFRfT0JKRUNUX09QRVJBVE9SCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddID09PSBUX05VTExTQUZFX09CSkVDVF9PUEVSQVRPUikKICAgICAgICAgICAgICAgICYmICRleGFjdCA9PT0gdHJ1ZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRleGFjdCA9IGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNoZWNrSW5kZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQgPSAkY3VycmVudEluZGVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIFRoZSBpbmRlbnQgb2YgdGhlIGxpbmUgaXMgY2hlY2tlZCBieSB0aGUgZm9sbG93aW5nIElGIGJsb2NrLgoKICAgICAgICAgICAgICAgIFVwIHVudGlsIG5vdywgd2UndmUganVzdCBiZWVuIGZpZ3VyaW5nIG91dCB3aGF0IHRoZSBpbmRlbnQKICAgICAgICAgICAgICAgIG9mIHRoaXMgbGluZSBzaG91bGQgYmUuCgogICAgICAgICAgICAgICAgQWZ0ZXIgdGhpcyBJRiBibG9jaywgd2UgYWRqdXN0IHRoZSBpbmRlbnQgYWdhaW4gZm9yCiAgICAgICAgICAgICAgICB0aGUgY2hlY2tpbmcgb2YgZnV0dXJlIGxpbmVzCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJGNoZWNrVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT5pZ25vcmVJbmRlbnRhdGlvblskdG9rZW5zWyRjaGVja1Rva2VuXVsnY29kZSddXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAmJiAoKCR0b2tlbkluZGVudCAhPT0gJGNoZWNrSW5kZW50ICYmICRleGFjdCA9PT0gdHJ1ZSkKICAgICAgICAgICAgICAgIHx8ICgkdG9rZW5JbmRlbnQgPCAkY2hlY2tJbmRlbnQgJiYgJGV4YWN0ID09PSBmYWxzZSkpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHR5cGUgID0gJ0luY29ycmVjdEV4YWN0JzsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdMaW5lIGluZGVudGVkIGluY29ycmVjdGx5OyBleHBlY3RlZCAnOwogICAgICAgICAgICAgICAgaWYgKCRleGFjdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgLj0gJ2F0IGxlYXN0ICc7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgICA9ICdJbmNvcnJlY3QnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dGFiSW5kZW50ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkVGFicyA9IGZsb29yKCRjaGVja0luZGVudCAvICR0aGlzLT50YWJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgJGZvdW5kVGFicyAgICA9IGZsb29yKCR0b2tlbkluZGVudCAvICR0aGlzLT50YWJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgJGZvdW5kU3BhY2VzICA9ICgkdG9rZW5JbmRlbnQgLSAoJGZvdW5kVGFicyAqICR0aGlzLT50YWJXaWR0aCkpOwogICAgICAgICAgICAgICAgICAgIGlmICgkZm91bmRTcGFjZXMgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZm91bmRUYWJzID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yIC49ICclcyB0YWJzLCBmb3VuZCAlcyB0YWJzIGFuZCAlcyBzcGFjZXMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhwZWN0ZWRUYWJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFRhYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvdW5kU3BhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvciAuPSAnJXMgdGFicywgZm91bmQgJXMgc3BhY2VzJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhICAgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkVGFicywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm91bmRTcGFjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yIC49ICclcyB0YWJzLCBmb3VuZCAlcyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhICAgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhwZWN0ZWRUYWJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvdW5kVGFicywKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yIC49ICclcyBzcGFjZXMsIGZvdW5kICVzJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YSAgID0gWwogICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbkluZGVudCwKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRsaW5lICAgID0gJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IHZzcHJpbnRmKCRlcnJvciwgJGRhdGEpOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIltMaW5lICRsaW5lXSAkbWVzc2FnZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhlIGNoYW5nZSB3b3VsZCBiZSBhcHBsaWVkIGFuZCBjb250aW51ZQogICAgICAgICAgICAgICAgLy8gY2hlY2tpbmcgaW5kZW50cyB1bmRlciB0aGlzIGFzc3VtcHRpb24uIFRoaXMgZ2l2ZXMgbW9yZQogICAgICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgYWNjdXJhdGUgZXJyb3IgbWVzc2FnZXMuCiAgICAgICAgICAgICAgICAkYWRqdXN0bWVudHNbJGNoZWNrVG9rZW5dID0gKCRjaGVja0luZGVudCAtICR0b2tlbkluZGVudCk7CgogICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRjaGVja1Rva2VuLCAkdHlwZSwgJGRhdGEpOwogICAgICAgICAgICAgICAgaWYgKCRmaXggPT09IHRydWUgfHwgJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGFjY2VwdGVkID0gJHRoaXMtPmFkanVzdEluZGVudCgkcGhwY3NGaWxlLCAkY2hlY2tUb2tlbiwgJGNoZWNrSW5kZW50LCAoJGNoZWNrSW5kZW50IC0gJHRva2VuSW5kZW50KSk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkYWNjZXB0ZWQgPT09IHRydWUgJiYgJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skY2hlY2tUb2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRjaGVja1Rva2VuXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGFkZCBhZGp1c3RtZW50IG9mICIuJGFkanVzdG1lbnRzWyRjaGVja1Rva2VuXS4iIGZvciB0b2tlbiAkY2hlY2tUb2tlbiAoJHR5cGUpIG9uIGxpbmUgJGxpbmUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmICgkY2hlY2tUb2tlbiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGkgPSAkY2hlY2tUb2tlbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgaW5kZW50cyBleGFjdGx5IGJldHdlZW4gYXJyYXlzIGFzIHRoZXkgdGVuZCB0byBoYXZlIGN1c3RvbSBydWxlcy4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfT1BFTl9TSE9SVF9BUlJBWSkgewogICAgICAgICAgICAgICAgJGRpc2FibGVFeGFjdEVuZCA9IG1heCgkZGlzYWJsZUV4YWN0RW5kLCAkdG9rZW5zWyRpXVsnYnJhY2tldF9jbG9zZXInXSk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgICAgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICR0eXBlICAgID0gJHRva2Vuc1skZGlzYWJsZUV4YWN0RW5kXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICRlbmRMaW5lID0gJHRva2Vuc1skZGlzYWJsZUV4YWN0RW5kXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIk9wZW5pbmcgc2hvcnQgYXJyYXkgYnJhY2tldCBmb3VuZCBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIGlmICgkZGlzYWJsZUV4YWN0RW5kID09PSAkdG9rZW5zWyRpXVsnYnJhY2tldF9jbG9zZXInXSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGRpc2FibGluZyBleGFjdCBpbmRlbnQgY2hlY2tpbmcgdW50aWwgJGRpc2FibGVFeGFjdEVuZCAoJHR5cGUpIG9uIGxpbmUgJGVuZExpbmUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBjb250aW51aW5nIHRvIGRpc2FibGUgZXhhY3QgaW5kZW50IGNoZWNraW5nIHVudGlsICRkaXNhYmxlRXhhY3RFbmQgKCR0eXBlKSBvbiBsaW5lICRlbmRMaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ29tcGxldGVseSBza2lwIGhlcmUvbm93IGRvY3MgYXMgdGhlIGluZGVudCBpcyBhIHBhcnQgb2YgdGhlCiAgICAgICAgICAgIC8vIGNvbnRlbnQgaXRzZWxmLgogICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9TVEFSVF9IRVJFRE9DCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRpXVsnY29kZSddID09PSBUX1NUQVJUX05PV0RPQwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRkaXNhYmxlRXhhY3RFbmRdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiSGVyZS9ub3dkb2MgZm91bmQgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkaSAgICA9ICRwaHBjc0ZpbGUtPmZpbmROZXh0KFtUX0VORF9IRVJFRE9DLCBUX0VORF9OT1dET0NdLCAoJGkgKyAxKSk7CiAgICAgICAgICAgICAgICAkbmV4dCA9ICRwaHBjc0ZpbGUtPmZpbmROZXh0KFRva2Vuczo6JGVtcHR5VG9rZW5zLCAoJGkgKyAxKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skbmV4dF1bJ2NvZGUnXSA9PT0gVF9DT01NQSkgewogICAgICAgICAgICAgICAgICAgICRpID0gJG5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGldWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHNraXBwaW5nIHRvIHRva2VuICRpICgkdHlwZSkgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIENvbXBsZXRlbHkgc2tpcCBtdWx0aS1saW5lIHN0cmluZ3MgYXMgdGhlIGluZGVudCBpcyBhIHBhcnQgb2YgdGhlCiAgICAgICAgICAgIC8vIGNvbnRlbnQgaXRzZWxmLgogICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9DT05TVEFOVF9FTkNBUFNFRF9TVFJJTkcKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfRE9VQkxFX1FVT1RFRF9TVFJJTkcKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkaSA9ICRwaHBjc0ZpbGUtPmZpbmROZXh0KCR0b2tlbnNbJGldWydjb2RlJ10sICgkaSArIDEpLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICRpLS07CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ29tcGxldGVseSBza2lwIGRvYyBjb21tZW50cyBhcyB0aGV5IHRlbmQgdG8gaGF2ZSBjb21wbGV4CiAgICAgICAgICAgIC8vIGluZGVudGF0aW9uIHJ1bGVzLgogICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9ET0NfQ09NTUVOVF9PUEVOX1RBRykgewogICAgICAgICAgICAgICAgJGkgPSAkdG9rZW5zWyRpXVsnY29tbWVudF9jbG9zZXInXTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBPcGVuIHRhZ3MgcmVzZXQgdGhlIGluZGVudCBsZXZlbC4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfT1BFTl9UQUcKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfT1BFTl9UQUdfV0lUSF9FQ0hPCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICBlY2hvICJPcGVuIFBIUCB0YWcgZm91bmQgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGNoZWNrVG9rZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgICAgICAgICA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9IChzdHJsZW4oJHRva2Vuc1skZmlyc3RdWydjb250ZW50J10pIC0gc3RybGVuKGx0cmltKCR0b2tlbnNbJGZpcnN0XVsnY29udGVudCddKSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9ICgkdG9rZW5zWyRpXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbGFzdE9wZW5UYWcgPSAkaTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFkanVzdG1lbnRzWyRpXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCArPSAkYWRqdXN0bWVudHNbJGldOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBkaXZpc2libGUgYnkgb3VyIGV4cGVjdGVkIGluZGVudC4KICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ICA9IChpbnQpIChjZWlsKCRjdXJyZW50SW5kZW50IC8gJHRoaXMtPmluZGVudCkgKiAkdGhpcy0+aW5kZW50KTsKICAgICAgICAgICAgICAgICRzZXRJbmRlbnRzWyRpXSA9ICRjdXJyZW50SW5kZW50OwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGldWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBpbmRlbnQgc2V0IHRvICRjdXJyZW50SW5kZW50IGJ5IHRva2VuICRpICgkdHlwZSkiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLy8gQ2xvc2UgdGFncyByZXNldCB0aGUgaW5kZW50IGxldmVsLCB1bmxlc3MgdGhleSBhcmUgY2xvc2luZyBhIHRhZwogICAgICAgICAgICAvLyBvcGVuZWQgb24gdGhlIHNhbWUgbGluZS4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydjb2RlJ10gPT09IFRfQ0xPU0VfVEFHKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNsb3NlIFBIUCB0YWcgZm91bmQgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skbGFzdE9wZW5UYWddWydsaW5lJ10gIT09ICR0b2tlbnNbJGldWydsaW5lJ10pIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9ICgkdG9rZW5zWyRpXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICAkbGFzdENsb3NlVGFnICA9ICRpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGxhc3RDbG9zZVRhZyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoJHRva2Vuc1skbGFzdENsb3NlVGFnXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhZGp1c3RtZW50c1skaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRpXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgZGl2aXNpYmxlIGJ5IG91ciBleHBlY3RlZCBpbmRlbnQuCiAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCAgPSAoaW50KSAoY2VpbCgkY3VycmVudEluZGVudCAvICR0aGlzLT5pbmRlbnQpICogJHRoaXMtPmluZGVudCk7CiAgICAgICAgICAgICAgICAkc2V0SW5kZW50c1skaV0gPSAkY3VycmVudEluZGVudDsKCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRpXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkaSAoJHR5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIEFub24gY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHNldCB0aGUgaW5kZW50IGJhc2VkIG9uIHRoZWlyIG93biBpbmRlbnQgbGV2ZWwuCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVsnY29kZSddID09PSBUX0NMT1NVUkUgfHwgJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9BTk9OX0NMQVNTKSB7CiAgICAgICAgICAgICAgICAkY2xvc2VyID0gJHRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOwogICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydsaW5lJ10gPT09ICR0b2tlbnNbJGNsb3Nlcl1bJ2xpbmUnXSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBzdHJfcmVwbGFjZSgnXycsICcgJywgc3RydG9sb3dlcihzdWJzdHIoJHRva2Vuc1skaV1bJ3R5cGUnXSwgMikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIqIGlnbm9yaW5nIHNpbmdsZS1saW5lICR0eXBlIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRpID0gJGNsb3NlcjsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBzdHJfcmVwbGFjZSgnXycsICcgJywgc3RydG9sb3dlcihzdWJzdHIoJHRva2Vuc1skaV1bJ3R5cGUnXSwgMikpKTsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiT3BlbiAkdHlwZSBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRmaXJzdCA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRpLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIGlzICRmaXJzdCAoJHR5cGUpIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB3aGlsZSAoJHRva2Vuc1skZmlyc3RdWydjb2RlJ10gPT09IFRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJGZpcnN0IC0gMSldWydjb2RlJ10gPT09IFRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkZmlyc3QgPSAkcGhwY3NGaWxlLT5maW5kRmlyc3RPbkxpbmUoVF9XSElURVNQQUNFLCAoJGZpcnN0IC0gMSksIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRmaXJzdF1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRmaXJzdF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZvdW5kIG11bHRpLWxpbmUgc3RyaW5nOyBhbWVuZGVkIGZpcnN0IHRva2VuIGlzICRmaXJzdCAoJHR5cGUpIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoKCR0b2tlbnNbJGZpcnN0XVsnY29sdW1uJ10gLSAxKSArICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICAgICAgJG9wZW5TY29wZXNbJHRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddXSA9ICR0b2tlbnNbJGldWydzY29wZV9jb25kaXRpb24nXTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkY2xvc2VyVG9rZW4gICAgPSAkdG9rZW5zWyRpXVsnc2NvcGVfY2xvc2VyJ107CiAgICAgICAgICAgICAgICAgICAgJGNsb3NlckxpbmUgICAgID0gJHRva2Vuc1skY2xvc2VyVG9rZW5dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgJGNsb3NlclR5cGUgICAgID0gJHRva2Vuc1skY2xvc2VyVG9rZW5dWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvblRva2VuID0gJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddOwogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25MaW5lICA9ICR0b2tlbnNbJGNvbmRpdGlvblRva2VuXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25UeXBlICA9ICR0b2tlbnNbJGNvbmRpdGlvblRva2VuXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gYWRkZWQgb3BlbiBzY29wZSAkY2xvc2VyVG9rZW4gKCRjbG9zZXJUeXBlKSBvbiBsaW5lICRjbG9zZXJMaW5lLCBwb2ludGluZyB0byBjb25kaXRpb24gJGNvbmRpdGlvblRva2VuICgkY29uZGl0aW9uVHlwZSkgb24gbGluZSAkY29uZGl0aW9uTGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFkanVzdG1lbnRzWyRmaXJzdF0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJGFkanVzdG1lbnRzWyRmaXJzdF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGlzIGRpdmlzaWJsZSBieSBvdXIgZXhwZWN0ZWQgaW5kZW50LgogICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoaW50KSAoZmxvb3IoJGN1cnJlbnRJbmRlbnQgLyAkdGhpcy0+aW5kZW50KSAqICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICAgICAgJGkgPSAkdG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ107CiAgICAgICAgICAgICAgICAkc2V0SW5kZW50c1skaV0gPSAkY3VycmVudEluZGVudDsKCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rZW5zWyRpXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkaSAoJHR5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIFNjb3BlIG9wZW5lcnMgaW5jcmVhc2UgdGhlIGluZGVudCBsZXZlbC4KICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGldWydzY29wZV9jb25kaXRpb24nXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbJGldWydzY29wZV9vcGVuZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWydzY29wZV9vcGVuZXInXSA9PT0gJGkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkY2xvc2VyID0gJHRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOwogICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWydsaW5lJ10gPT09ICR0b2tlbnNbJGNsb3Nlcl1bJ2xpbmUnXSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGldWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiogaWdub3Jpbmcgc2luZ2xlLWxpbmUgJHR5cGUgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGkgPSAkY2xvc2VyOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSAkdG9rZW5zWyR0b2tlbnNbJGldWydzY29wZV9jb25kaXRpb24nXV1bJ2NvZGUnXTsKICAgICAgICAgICAgICAgIGlmICgkY29uZGl0aW9uID09PSBUX0ZOKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIqIGlnbm9yaW5nIGFycm93IGZ1bmN0aW9uIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRpID0gJGNsb3NlcjsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoVG9rZW5zOjokc2NvcGVPcGVuZXJzWyRjb25kaXRpb25dKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmIGluX2FycmF5KCRjb25kaXRpb24sICR0aGlzLT5ub25JbmRlbnRpbmdTY29wZXMsIHRydWUpID09PSBmYWxzZQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skdG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ11dWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIk9wZW4gc2NvcGUgKCR0eXBlKSBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJHRoaXMtPmluZGVudDsKICAgICAgICAgICAgICAgICAgICAkc2V0SW5kZW50c1skaV0gPSAkY3VycmVudEluZGVudDsKICAgICAgICAgICAgICAgICAgICAkb3BlblNjb3Blc1skdG9rZW5zWyRpXVsnc2NvcGVfY2xvc2VyJ11dID0gJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddOwogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNsb3NlclRva2VuICAgID0gJHRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICAgICAkY2xvc2VyTGluZSAgICAgPSAkdG9rZW5zWyRjbG9zZXJUb2tlbl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNsb3NlclR5cGUgICAgID0gJHRva2Vuc1skY2xvc2VyVG9rZW5dWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25Ub2tlbiA9ICR0b2tlbnNbJGldWydzY29wZV9jb25kaXRpb24nXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbkxpbmUgID0gJHRva2Vuc1skY29uZGl0aW9uVG9rZW5dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25UeXBlICA9ICR0b2tlbnNbJGNvbmRpdGlvblRva2VuXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdD0+IGFkZGVkIG9wZW4gc2NvcGUgJGNsb3NlclRva2VuICgkY2xvc2VyVHlwZSkgb24gbGluZSAkY2xvc2VyTGluZSwgcG9pbnRpbmcgdG8gY29uZGl0aW9uICRjb25kaXRpb25Ub2tlbiAoJGNvbmRpdGlvblR5cGUpIG9uIGxpbmUgJGNvbmRpdGlvbkxpbmUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skaV1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBpbmRlbnQgc2V0IHRvICRjdXJyZW50SW5kZW50IGJ5IHRva2VuICRpICgkdHlwZSkiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8vIEpTIG9iamVjdHMgc2V0IHRoZSBpbmRlbnQgbGV2ZWwuCiAgICAgICAgICAgIGlmICgkcGhwY3NGaWxlLT50b2tlbml6ZXJUeXBlID09PSAnSlMnCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXVsnY29kZSddID09PSBUX09CSkVDVAogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRjbG9zZXIgPSAkdG9rZW5zWyRpXVsnYnJhY2tldF9jbG9zZXInXTsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVsnbGluZSddID09PSAkdG9rZW5zWyRjbG9zZXJdWydsaW5lJ10pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiKiBpZ25vcmluZyBzaW5nbGUtbGluZSBKUyBvYmplY3Qgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGkgPSAkY2xvc2VyOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiT3BlbiBKUyBvYmplY3Qgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZmlyc3QgICAgICAgICA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRpLCB0cnVlKTsKICAgICAgICAgICAgICAgICRjdXJyZW50SW5kZW50ID0gKCgkdG9rZW5zWyRmaXJzdF1bJ2NvbHVtbiddIC0gMSkgKyAkdGhpcy0+aW5kZW50KTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYWRqdXN0bWVudHNbJGZpcnN0XSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCArPSAkYWRqdXN0bWVudHNbJGZpcnN0XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgZGl2aXNpYmxlIGJ5IG91ciBleHBlY3RlZCBpbmRlbnQuCiAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCAgICAgID0gKGludCkgKGNlaWwoJGN1cnJlbnRJbmRlbnQgLyAkdGhpcy0+aW5kZW50KSAqICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICAgICAgJHNldEluZGVudHNbJGZpcnN0XSA9ICRjdXJyZW50SW5kZW50OwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGZpcnN0XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkZmlyc3QgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvLyBDbG9zaW5nIGFuIGFub24gY2xhc3MsIGNsb3N1cmUsIG9yIG1hdGNoLgogICAgICAgICAgICAvLyBFYWNoIG1heSBiZSByZXR1cm5lZCwgd2hpY2ggY2FuIGNvbmZ1c2UgY29udHJvbCBzdHJ1Y3R1cmVzIHRoYXQKICAgICAgICAgICAgLy8gdXNlIHJldHVybiBhcyBhIGNsb3NlciwgbGlrZSBDQVNFIHN0YXRlbWVudHMuCiAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXVsnc2NvcGVfY2xvc2VyJ10gPT09ICRpCiAgICAgICAgICAgICAgICAmJiAoJHRva2Vuc1skdG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ11dWydjb2RlJ10gPT09IFRfQ0xPU1VSRQogICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skdG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ11dWydjb2RlJ10gPT09IFRfQU5PTl9DTEFTUwogICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skdG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ11dWydjb2RlJ10gPT09IFRfTUFUQ0gpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gc3RyX3JlcGxhY2UoJ18nLCAnICcsIHN0cnRvbG93ZXIoc3Vic3RyKCR0b2tlbnNbJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddXVsndHlwZSddLCAyKSkpOwogICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICBlY2hvICJDbG9zZSAkdHlwZSBvbiBsaW5lICRsaW5lIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwcmV2ID0gZmFsc2U7CgogICAgICAgICAgICAgICAgJG9iamVjdCA9IDA7CiAgICAgICAgICAgICAgICBpZiAoJHBocGNzRmlsZS0+dG9rZW5pemVyVHlwZSA9PT0gJ0pTJykgewogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb25zID0gJHRva2Vuc1skaV1bJ2NvbmRpdGlvbnMnXTsKICAgICAgICAgICAgICAgICAgICBrcnNvcnQoJGNvbmRpdGlvbnMsIFNPUlRfTlVNRVJJQyk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvbmRpdGlvbnMgYXMgJHRva2VuID0+ICRjb25kaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb25kaXRpb24gPT09IFRfT0JKRUNUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqZWN0ID0gJHRva2VuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUgJiYgJG9iamVjdCAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJG9iamVjdF1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHRva2VuIGlzIGluc2lkZSBKUyBvYmplY3QgJG9iamVjdCBvbiBsaW5lICRsaW5lICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwYXJlbnMgPSAwOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGldWyduZXN0ZWRfcGFyZW50aGVzaXMnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBlbXB0eSgkdG9rZW5zWyRpXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pID09PSBmYWxzZQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVucyA9ICR0b2tlbnNbJGldWyduZXN0ZWRfcGFyZW50aGVzaXMnXTsKICAgICAgICAgICAgICAgICAgICBlbmQoJHBhcmVucyk7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVucyA9IGtleSgkcGFyZW5zKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skcGFyZW5zXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gaGFzIG5lc3RlZCBwYXJlbnRoZXNpcyAkcGFyZW5zIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9IDA7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skaV1bJ2NvbmRpdGlvbnMnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBlbXB0eSgkdG9rZW5zWyRpXVsnY29uZGl0aW9ucyddKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSAkdG9rZW5zWyRpXVsnY29uZGl0aW9ucyddOwogICAgICAgICAgICAgICAgICAgIGVuZCgkY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0ga2V5KCRjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRjb25kaXRpb25dWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skY29uZGl0aW9uXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gaXMgaW5zaWRlIGNvbmRpdGlvbiAkY29uZGl0aW9uICgkdHlwZSkgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHBhcmVucyA+ICRvYmplY3QgJiYgJHBhcmVucyA+ICRjb25kaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB1c2luZyBwYXJlbnRoZXNpcyAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHByZXYgICAgICA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhUb2tlbnM6OiRlbXB0eVRva2VucywgKCRwYXJlbnMgLSAxKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJG9iamVjdCAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvYmplY3QgPiAwICYmICRvYmplY3QgPj0gJGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHVzaW5nIG9iamVjdCAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHByZXYgICAgICA9ICRvYmplY3Q7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVucyAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRjb25kaXRpb24gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5kZWJ1ZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdXNpbmcgY29uZGl0aW9uICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcHJldiAgID0gJGNvbmRpdGlvbjsKICAgICAgICAgICAgICAgICAgICAkb2JqZWN0ID0gMDsKICAgICAgICAgICAgICAgICAgICAkcGFyZW5zID0gMDsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgIGlmICgkcHJldiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkcHJldiA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhbVF9FUVVBTCwgVF9SRVRVUk5dLCAoJHRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddIC0gMSksIG51bGwsIGZhbHNlLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHByZXYgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBjb3VsZCBub3QgZmluZCBhIHByZXZpb3VzIFRfRVFVQUwgb3IgVF9SRVRVUk4gdG9rZW47IHdpbGwgdXNlIGN1cnJlbnQgdG9rZW4gKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRwcmV2XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skcHJldl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogcHJldmlvdXMgdG9rZW4gaXMgJHR5cGUgb24gbGluZSAkbGluZSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRmaXJzdCA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRwcmV2LCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0b2tlbnNbJGZpcnN0XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIG9uIGxpbmUgJGxpbmUgaXMgJGZpcnN0ICgkdHlwZSkgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcHJldiA9ICRwaHBjc0ZpbGUtPmZpbmRTdGFydE9mU3RhdGVtZW50KCRmaXJzdCk7CiAgICAgICAgICAgICAgICBpZiAoJHByZXYgIT09ICRmaXJzdCkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBzdGFydCBvZiB0aGUgc3RhdGVtZW50LgogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdG9rZW5zWyRwcmV2XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJHByZXZdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBhbWVuZGVkIHByZXZpb3VzIGlzICR0eXBlIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRmaXJzdCA9ICRwaHBjc0ZpbGUtPmZpbmRGaXJzdE9uTGluZShUX1dISVRFU1BBQ0UsICRwcmV2LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRva2Vuc1skZmlyc3RdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRva2Vuc1skZmlyc3RdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiBhbWVuZGVkIGZpcnN0IHRva2VuIGlzICRmaXJzdCAoJHR5cGUpIG9uIGxpbmUgJGxpbmUgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgPSAoJHRva2Vuc1skZmlyc3RdWydjb2x1bW4nXSAtIDEpOwogICAgICAgICAgICAgICAgaWYgKCRvYmplY3QgPiAwIHx8ICRjb25kaXRpb24gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRJbmRlbnQgKz0gJHRoaXMtPmluZGVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skZmlyc3RdWydzY29wZV9jbG9zZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRmaXJzdF1bJ3Njb3BlX2Nsb3NlciddID09PSAkZmlyc3QKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGZpcnN0IHRva2VuIGlzIGEgc2NvcGUgY2xvc2VyICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbmRpdGlvbiA9PT0gMCB8fCAkdG9rZW5zWyRjb25kaXRpb25dWydzY29wZV9vcGVuZXInXSA8ICRmaXJzdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCA9ICRzZXRJbmRlbnRzWyRmaXJzdF07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIGlnbm9yaW5nIHNjb3BlIGNsb3NlciAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgaXQgaXMgZGl2aXNpYmxlIGJ5IG91ciBleHBlY3RlZCBpbmRlbnQuCiAgICAgICAgICAgICAgICAkY3VycmVudEluZGVudCAgICAgID0gKGludCkgKGNlaWwoJGN1cnJlbnRJbmRlbnQgLyAkdGhpcy0+aW5kZW50KSAqICR0aGlzLT5pbmRlbnQpOwogICAgICAgICAgICAgICAgJHNldEluZGVudHNbJGZpcnN0XSA9ICRjdXJyZW50SW5kZW50OwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGVidWcgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2tlbnNbJGZpcnN0XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gaW5kZW50IHNldCB0byAkY3VycmVudEluZGVudCBieSB0b2tlbiAkZmlyc3QgKCR0eXBlKSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAvLyBEb24ndCBwcm9jZXNzIHRoZSByZXN0IG9mIHRoZSBmaWxlLgogICAgICAgIHJldHVybiAkcGhwY3NGaWxlLT5udW1Ub2tlbnM7CgogICAgfS8vZW5kIHByb2Nlc3MoKQoKCiAgICAvKioKICAgICAqIFByb2Nlc3NlcyB0aGlzIHRlc3QsIHdoZW4gb25lIG9mIGl0cyB0b2tlbnMgaXMgZW5jb3VudGVyZWQuCiAgICAgKgogICAgICogQHBhcmFtIFxQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZSAkcGhwY3NGaWxlIEFsbCB0aGUgdG9rZW5zIGZvdW5kIGluIHRoZSBkb2N1bWVudC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWNrUHRyICBUaGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgdG9rZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc3RhY2sgcGFzc2VkIGluICR0b2tlbnMuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICRsZW5ndGggICAgVGhlIGxlbmd0aCBvZiB0aGUgbmV3IGluZGVudC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZSAgICBUaGUgZGlmZmVyZW5jZSBpbiBsZW5ndGggYmV0d2VlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvbGQgYW5kIG5ldyBpbmRlbnQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZGp1c3RJbmRlbnQoRmlsZSAkcGhwY3NGaWxlLCAkc3RhY2tQdHIsICRsZW5ndGgsICRjaGFuZ2UpCiAgICB7CiAgICAgICAgJHRva2VucyA9ICRwaHBjc0ZpbGUtPmdldFRva2VucygpOwoKICAgICAgICAvLyBXZSBkb24ndCBhZGp1c3QgaW5kZW50cyBvdXRzaWRlIG9mIFBIUC4KICAgICAgICBpZiAoJHRva2Vuc1skc3RhY2tQdHJdWydjb2RlJ10gPT09IFRfSU5MSU5FX0hUTUwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHBhZGRpbmcgPSAnJzsKICAgICAgICBpZiAoJGxlbmd0aCA+IDApIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT50YWJJbmRlbnQgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICRudW1UYWJzID0gZmxvb3IoJGxlbmd0aCAvICR0aGlzLT50YWJXaWR0aCk7CiAgICAgICAgICAgICAgICBpZiAoJG51bVRhYnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgJG51bVNwYWNlcyA9ICgkbGVuZ3RoIC0gKCRudW1UYWJzICogJHRoaXMtPnRhYldpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgJHBhZGRpbmcgICA9IHN0cl9yZXBlYXQoIlx0IiwgJG51bVRhYnMpLnN0cl9yZXBlYXQoJyAnLCAkbnVtU3BhY2VzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYWRkaW5nID0gc3RyX3JlcGVhdCgnICcsICRsZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRva2Vuc1skc3RhY2tQdHJdWydjb2x1bW4nXSA9PT0gMSkgewogICAgICAgICAgICAkdHJpbW1lZCAgPSBsdHJpbSgkdG9rZW5zWyRzdGFja1B0cl1bJ2NvbnRlbnQnXSk7CiAgICAgICAgICAgICRhY2NlcHRlZCA9ICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oJHN0YWNrUHRyLCAkcGFkZGluZy4kdHJpbW1lZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gRWFzaWVyIHRvIGp1c3QgcmVwbGFjZSB0aGUgZW50aXJlIGluZGVudC4KICAgICAgICAgICAgJGFjY2VwdGVkID0gJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJHN0YWNrUHRyIC0gMSksICRwYWRkaW5nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYWNjZXB0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICgkdG9rZW5zWyRzdGFja1B0cl1bJ2NvZGUnXSA9PT0gVF9ET0NfQ09NTUVOVF9PUEVOX1RBRykgewogICAgICAgICAgICAvLyBXZSBhZGp1c3RlZCB0aGUgc3RhcnQgb2YgYSBjb21tZW50LCBzbyBhZGp1c3QgdGhlIHJlc3Qgb2YgaXQKICAgICAgICAgICAgLy8gYXMgd2VsbCBzbyB0aGUgYWxpZ25tZW50IHJlbWFpbnMgY29ycmVjdC4KICAgICAgICAgICAgZm9yICgkeCA9ICgkc3RhY2tQdHIgKyAxKTsgJHggPCAkdG9rZW5zWyRzdGFja1B0cl1bJ2NvbW1lbnRfY2xvc2VyJ107ICR4KyspIHsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyR4XVsnY29sdW1uJ10gIT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyR4XVsnY29kZSddID09PSBUX0RPQ19DT01NRU5UX1dISVRFU1BBQ0UpIHsKICAgICAgICAgICAgICAgICAgICAkbGVuZ3RoID0gJHRva2Vuc1skeF1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwYWRkaW5nID0gKCRsZW5ndGggKyAkY2hhbmdlKTsKICAgICAgICAgICAgICAgIGlmICgkcGFkZGluZyA+IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnRhYkluZGVudCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbnVtVGFicyAgID0gZmxvb3IoJHBhZGRpbmcgLyAkdGhpcy0+dGFiV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAkbnVtU3BhY2VzID0gKCRwYWRkaW5nIC0gKCRudW1UYWJzICogJHRoaXMtPnRhYldpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYWRkaW5nICAgPSBzdHJfcmVwZWF0KCJcdCIsICRudW1UYWJzKS5zdHJfcmVwZWF0KCcgJywgJG51bVNwYWNlcyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhZGRpbmcgPSBzdHJfcmVwZWF0KCcgJywgJHBhZGRpbmcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHBhZGRpbmcgPSAnJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCR4LCAkcGFkZGluZyk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkcGFkZGluZyk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgICA9ICR0b2tlbnNbJHhdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgICA9ICR0b2tlbnNbJHhdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiBJbmRlbnQgYWRqdXN0ZWQgdG8gJGxlbmd0aCBmb3IgJHR5cGUgb24gbGluZSAkbGluZSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGZvcgogICAgICAgIH0vL2VuZCBpZgoKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9Ly9lbmQgYWRqdXN0SW5kZW50KCkKCgp9Ly9lbmQgY2xhc3MKIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czo1MjoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUyOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTA6IldoaXRlU3BhY2UiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MTp7czo2OToiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTM6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY5OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmYiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoiU2NvcGVJbmRlbnRTbmlmZiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBkb2NCbG9jayI7TjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcGFyZW50IjtOO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjE6e3M6Mjk6IlxQSFBfQ29kZVNuaWZmZXJcU25pZmZzXFNuaWZmIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjk6IlxQSFBfQ29kZVNuaWZmZXJcU25pZmZzXFNuaWZmIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToiU25pZmYiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGNvbnN0YW50cyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHByb3BlcnRpZXMiO2E6OTp7czo5MToiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokc3VwcG9ydGVkVG9rZW5pemVycyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6MTE6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6OTE6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6JHN1cHBvcnRlZFRva2VuaXplcnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxOToic3VwcG9ydGVkVG9rZW5pemVycyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MToiQSBsaXN0IG9mIHRva2VuaXplcnMgdGhpcyBzbmlmZiBzdXBwb3J0cy4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6NTE6IlBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZSI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6NDp7czo2OiJDb25maWciO3M6MjI6IlBIUF9Db2RlU25pZmZlclxDb25maWciO3M6NDoiRmlsZSI7czoyNjoiUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUiO3M6NToiU25pZmYiO3M6Mjg6IlBIUF9Db2RlU25pZmZlclxTbmlmZnNcU25pZmYiO3M6NjoiVG9rZW5zIjtzOjI3OiJQSFBfQ29kZVNuaWZmZXJcVXRpbFxUb2tlbnMiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxMzoiWydQSFAnLCAnSlMnXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtOO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHJlYWRPbmx5IjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbWV0YWRhdGEiO2E6MDp7fX1zOjc4OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiRpbmRlbnQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjExOntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjc4OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiRpbmRlbnQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo2OiJpbmRlbnQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NDU6IlRoZSBudW1iZXIgb2Ygc3BhY2VzIGNvZGUgc2hvdWxkIGJlIGluZGVudGVkLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoxOiI0IjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAcmVhZE9ubHkiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBtZXRhZGF0YSI7YTowOnt9fXM6Nzc6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6JGV4YWN0IjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5IjoxMTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo3NzoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokZXhhY3QiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo1OiJleGFjdCI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0MToiRG9lcyB0aGUgaW5kZW50IG5lZWQgdG8gYmUgZXhhY3RseSByaWdodD8iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTIzOiJJZiBUUlVFLCBpbmRlbnQgbmVlZHMgdG8gYmUgZXhhY3RseSAkaW5kZW50IHNwYWNlcy4gSWYgRkFMU0UsCmluZGVudCBuZWVkcyB0byBiZSBhdCBsZWFzdCAkaW5kZW50IHNwYWNlcyAoYnV0IGNhbiBiZSBtb3JlKS4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo1OiJmYWxzZSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtOO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHJlYWRPbmx5IjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbWV0YWRhdGEiO2E6MDp7fX1zOjgxOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiR0YWJJbmRlbnQiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjExOntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjgxOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiR0YWJJbmRlbnQiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo5OiJ0YWJJbmRlbnQiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzQ6IlNob3VsZCB0YWJzIGJlIHVzZWQgZm9yIGluZGVudGluZz8iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTU0OiJJZiBUUlVFLCBmaXhlcyB3aWxsIGJlIG1hZGUgdXNpbmcgdGFicyBpbnN0ZWFkIG9mIHNwYWNlcy4KVGhlIHNpemUgb2YgZWFjaCB0YWIgaXMgaW1wb3J0YW50LCBzbyBpdCBzaG91bGQgYmUgc3BlY2lmaWVkCnVzaW5nIHRoZSAtLXRhYi13aWR0aCBDTEkgYXJndW1lbnQuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6NToiZmFsc2UiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHN0YXRpYyI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjY6InB1YmxpYyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo1NjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NTY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319czo4MDoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokdGFiV2lkdGgiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjExOntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjgwOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiR0YWJXaWR0aCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InRhYldpZHRoIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQ1OiJUaGUgLS10YWItd2lkdGggQ0xJIHZhbHVlIHRoYXQgaXMgYmVpbmcgdXNlZC4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6NDoibnVsbCI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NzoicHJpdmF0ZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo2MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NjM7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319czo5NToiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokaWdub3JlSW5kZW50YXRpb25Ub2tlbnMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjExOntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjk1OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiRpZ25vcmVJbmRlbnRhdGlvblRva2VucyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIzOiJpZ25vcmVJbmRlbnRhdGlvblRva2VucyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NzoiTGlzdCBvZiB0b2tlbnMgbm90IG5lZWRpbmcgdG8gYmUgY2hlY2tlZCBmb3IgaW5kZW50YXRpb24uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIwMzoiVXNlZnVsIHRvIGFsbG93IFNuaWZmcyBiYXNlZCBvbiB0aGlzIHRvIGVhc2lseSBpZ25vcmUvc2tpcCBzb21lCnRva2VucyBmcm9tIHZlcmlmaWNhdGlvbi4gRm9yIGV4YW1wbGUsIGlubGluZSBIVE1MIHNlY3Rpb25zCm9yIFBIUCBvcGVuL2Nsb3NlIHRhZ3MgY2FuIGVzY2FwZSBmcm9tIGhlcmUgYW5kIGhhdmUgdGhlaXIgb3duCnJ1bGVzIGVsc2V3aGVyZS4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3OTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjI6IltdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjc1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAcmVhZE9ubHkiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBtZXRhZGF0YSI7YTowOnt9fXM6ODk6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6JGlnbm9yZUluZGVudGF0aW9uIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5IjoxMTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo4OToiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokaWdub3JlSW5kZW50YXRpb24iO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoiaWdub3JlSW5kZW50YXRpb24iO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6Ikxpc3Qgb2YgdG9rZW5zIG5vdCBuZWVkaW5nIHRvIGJlIGNoZWNrZWQgZm9yIGluZGVudGF0aW9uLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxMjI6IlRoaXMgaXMgYSBjYWNoZWQgY29weSBvZiB0aGUgcHVibGljIHZlcnNpb24gb2YgdGhpcyB2YXIsIHdoaWNoCmNhbiBiZSBzZXQgaW4gYSBydWxlc2V0IGZpbGUsIGFuZCBzb21lIGNvcmUgaWdub3JlZCB0b2tlbnMuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyOiJbXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NzoicHJpdmF0ZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo4NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6ODU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319czo5MDoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokbm9uSW5kZW50aW5nU2NvcGVzIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5IjoxMTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo5MDoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcR2VuZXJpY1xTbmlmZnNcV2hpdGVTcGFjZVxTY29wZUluZGVudFNuaWZmOjokbm9uSW5kZW50aW5nU2NvcGVzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTg6Im5vbkluZGVudGluZ1Njb3BlcyI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1MDoiQW55IHNjb3BlIG9wZW5lcnMgdGhhdCBzaG91bGQgbm90IGNhdXNlIGFuIGluZGVudC4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyOiJbXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjkyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtOO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHJlYWRPbmx5IjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbWV0YWRhdGEiO2E6MDp7fX1zOjc3OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OiRkZWJ1ZyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6MTE6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Nzc6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6JGRlYnVnIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToiZGVidWciO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzM6IlNob3cgZGVidWcgb3V0cHV0IGZvciB0aGlzIHNuaWZmLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQm9vbGVhbiI6MDp7fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzk7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo1OiJmYWxzZSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NzoicHJpdmF0ZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo5OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6OTk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRob2RzIjthOjM6e3M6ODE6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6cmVnaXN0ZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU3OiJSZXR1cm5zIGFuIGFycmF5IG9mIHRva2VucyB0aGlzIHRlc3Qgd2FudHMgdG8gbGlzdGVuIGZvci4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3OTtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjgxOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OnJlZ2lzdGVyKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo4OiJyZWdpc3RlciI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjgwOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OnByb2Nlc3MoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU5OiJQcm9jZXNzZXMgdGhpcyB0ZXN0LCB3aGVuIG9uZSBvZiBpdHMgdG9rZW5zIGlzIGVuY291bnRlcmVkLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6OToicGhwY3NGaWxlIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJGaWxlIjt9fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6Mzc6IkFsbCB0aGUgdG9rZW5zIGZvdW5kIGluIHRoZSBkb2N1bWVudC4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6ODoic3RhY2tQdHIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IlRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB0b2tlbgppbiB0aGUgc3RhY2sgcGFzc2VkIGluICR0b2tlbnMuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6ODA6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6cHJvY2VzcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoicHJvY2VzcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo5OiJwaHBjc0ZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNzoiXFBIUF9Db2RlU25pZmZlclxGaWxlc1xGaWxlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRmlsZSI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJzdGFja1B0ciI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjEyNztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0ODg7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjg1OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xHZW5lcmljXFNuaWZmc1xXaGl0ZVNwYWNlXFNjb3BlSW5kZW50U25pZmY6OmFkanVzdEluZGVudCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTk6IlByb2Nlc3NlcyB0aGlzIHRlc3QsIHdoZW4gb25lIG9mIGl0cyB0b2tlbnMgaXMgZW5jb3VudGVyZWQuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjU6e2k6MDtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo5OiJwaHBjc0ZpbGUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkZpbGUiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozNzoiQWxsIHRoZSB0b2tlbnMgZm91bmQgaW4gdGhlIGRvY3VtZW50LiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo4OiJzdGFja1B0ciI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzVmFyaWFkaWMiO2I6MDtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNSZWZlcmVuY2UiO2I6MDtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo2NToiVGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRva2VuCmluIHRoZSBzdGFjayBwYXNzZWQgaW4gJHRva2Vucy4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6NjoibGVuZ3RoIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI5OiJUaGUgbGVuZ3RoIG9mIHRoZSBuZXcgaW5kZW50LiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MztPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo2OiJjaGFuZ2UiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NTY6IlRoZSBkaWZmZXJlbmNlIGluIGxlbmd0aCBiZXR3ZWVuCnRoZSBvbGQgYW5kIG5ldyBpbmRlbnQuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEJvb2xlYW4iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc5O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6ODU6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXEdlbmVyaWNcU25pZmZzXFdoaXRlU3BhY2VcU2NvcGVJbmRlbnRTbmlmZjo6YWRqdXN0SW5kZW50KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoiYWRqdXN0SW5kZW50Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjQ6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjk6InBocGNzRmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJGaWxlIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjg6InN0YWNrUHRyIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToyO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NjoibGVuZ3RoIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aTozO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NjoiY2hhbmdlIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTUwMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE1NzU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX19czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNTc4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBtZXRhZGF0YSI7YTowOnt9fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjA6e31zOjQwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGVudW1zIjthOjA6e31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";