ZGlmZiAtLWdpdCBhL3BsYW5ldHN0YWNrL2NvcmUvcGx1cy9zaXRlcy5weSBiL3BsYW5ldHN0YWNrL2NvcmUvcGx1cy9zaXRlcy5weQppbmRleCAyN2FlMzUyLi5iOTYxNjljIDEwMDY0NAotLS0gYS9wbGFuZXRzdGFjay9jb3JlL3BsdXMvc2l0ZXMucHkKKysrIGIvcGxhbmV0c3RhY2svY29yZS9wbHVzL3NpdGVzLnB5CkBAIC0xMiwxNSArMTIsMjUgQEAKICAgICBkZWYgZ2V0X3VybHMoc2VsZik6CiAgICAgICAgICIiIkFkZCBvdXIgZGFzaGJvYXJkIHZpZXcgdG8gdGhlIGFkbWluIHVybGNvbmYuIERlbGV0ZWQgdGhlIGRlZmF1bHQgaW5kZXguIiIiCiAgICAgICAgIGZyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIHVybAotICAgICAgICBmcm9tIHZpZXdzIGltcG9ydCBEYXNoYm9hcmRXZWxjb21lVmlldywgRGFzaGJvYXJkQWpheFZpZXcKKyAgICAgICAgZnJvbSB2aWV3cyBpbXBvcnQgRGFzaGJvYXJkV2VsY29tZVZpZXcsIERhc2hib2FyZEFqYXhWaWV3LCBTaW11bGF0b3JWaWV3LCBEYXNoYm9hcmRTdW1tYXJ5QWpheFZpZXcsIERhc2hib2FyZEFkZE9yUmVtb3ZlU2xpdmVyVmlldywgRGFzaGJvYXJkVXNlclNpdGVWaWV3LCBEYXNoYm9hcmRBbmFseXRpY3NBamF4VmlldwogCiAgICAgICAgIHVybHMgPSBzdXBlcihBZG1pbk1peGluLCBzZWxmKS5nZXRfdXJscygpCiAgICAgICAgIGRlbCB1cmxzWzBdCiAgICAgICAgIGN1c3RvbV91cmwgPSBwYXR0ZXJucygnJywKLSAgICAgICAgICAgICAgIHVybChyJ14kJywgc2VsZi5hZG1pbl92aWV3KERhc2hib2FyZFdlbGNvbWVWaWV3LmFzX3ZpZXcoKSksIAorICAgICAgICAgICAgICAgdXJsKHInXiQnLCBzZWxmLmFkbWluX3ZpZXcoRGFzaGJvYXJkV2VsY29tZVZpZXcuYXNfdmlldygpKSwKICAgICAgICAgICAgICAgICAgICAgbmFtZT0iaW5kZXgiKSwKLSAgICAgICAgICAgICAgIHVybChyJ15ocGNkYXNoYm9hcmQvJywgc2VsZi5hZG1pbl92aWV3KERhc2hib2FyZEFqYXhWaWV3LmFzX3ZpZXcoKSksIAotICAgICAgICAgICAgICAgICAgICBuYW1lPSJocGNkYXNoYm9hcmQiKQorICAgICAgICAgICAgICAgdXJsKHInXmhwY2Rhc2h1c2Vyc2xpY2VzLycsIHNlbGYuYWRtaW5fdmlldyhEYXNoYm9hcmRVc2VyU2l0ZVZpZXcuYXNfdmlldygpKSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iaHBjZGFzaHVzZXJzbGljZXMiKSwKKyAgICAgICAgICAgICAgIHVybChyJ15ocGNkYXNoYm9hcmQvJywgc2VsZi5hZG1pbl92aWV3KERhc2hib2FyZEFqYXhWaWV3LmFzX3ZpZXcoKSksICAgICAgICAjIERFUFJFQ0FURUQKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iaHBjZGFzaGJvYXJkIiksCisgICAgICAgICAgICAgICB1cmwocidec2ltdWxhdG9yLycsIHNlbGYuYWRtaW5fdmlldyhTaW11bGF0b3JWaWV3LmFzX3ZpZXcoKSksCisgICAgICAgICAgICAgICAgICAgIG5hbWU9InNpbXVsYXRvciIpLAorICAgICAgICAgICAgICAgdXJsKHInXmhwY3N1bW1hcnkvJywgc2VsZi5hZG1pbl92aWV3KERhc2hib2FyZFN1bW1hcnlBamF4Vmlldy5hc192aWV3KCkpLCAgICMgREVQUkVDQVRFRAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJocGNzdW1tYXJ5IiksCisgICAgICAgICAgICAgICB1cmwocideYW5hbHl0aWNzLyg/UDxuYW1lPlx3KykvJCcsIHNlbGYuYWRtaW5fdmlldyhEYXNoYm9hcmRBbmFseXRpY3NBamF4Vmlldy5hc192aWV3KCkpLAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJhbmFseXRpY3MiKSwKKyAgICAgICAgICAgICAgIHVybChyJ15kYXNoYm9hcmRhZGRvcnJlbXNsaXZlci8kJywgc2VsZi5hZG1pbl92aWV3KERhc2hib2FyZEFkZE9yUmVtb3ZlU2xpdmVyVmlldy5hc192aWV3KCkpLAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJhZGRvcnJlbXNsaXZlciIpCiAgICAgICAgICkKIAogICAgICAgICByZXR1cm4gY3VzdG9tX3VybCArIHVybHMKZGlmZiAtLWdpdCBhL3BsYW5ldHN0YWNrL2NvcmUvcGx1cy92aWV3cy5weSBiL3BsYW5ldHN0YWNrL2NvcmUvcGx1cy92aWV3cy5weQppbmRleCA2NTNlZTk1Li5hNTBkOTQ2IDEwMDY0NAotLS0gYS9wbGFuZXRzdGFjay9jb3JlL3BsdXMvdmlld3MucHkKKysrIGIvcGxhbmV0c3RhY2svY29yZS9wbHVzL3ZpZXdzLnB5CkBAIC0xLDE5NiArMSwxNDggQEAKICN2aWV3cy5weQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCiBmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBUZW1wbGF0ZVZpZXcsIFZpZXcKIGltcG9ydCBkYXRldGltZQotCi1pbXBvcnQganNvbiAKLWZyb20gY29yZS5tb2RlbHMgaW1wb3J0IFNsaWNlLFNsaWNlUm9sZSxTbGljZVByaXZpbGVnZSxTaXRlLFJlc2VydmF0aW9uCitmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CitpbXBvcnQganNvbgorZnJvbSBjb3JlLm1vZGVscyBpbXBvcnQgU2xpY2UsU2xpY2VSb2xlLFNsaWNlUHJpdmlsZWdlLFNpdGUsUmVzZXJ2YXRpb24sU2xpdmVyCiBmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UKK2ltcG9ydCB0cmFjZWJhY2sKIAoraWYgb3MucGF0aC5leGlzdHMoIi9ob21lL3NtYmFrZXIvcHJvamVjdHMvdmljY2kvY2RuL2JpZ3F1ZXJ5Iik6CisgICAgc3lzLnBhdGguYXBwZW5kKCIvaG9tZS9zbWJha2VyL3Byb2plY3RzL3ZpY2NpL2Nkbi9iaWdxdWVyeSIpCitlbHNlOgorICAgIHN5cy5wYXRoLmFwcGVuZCgiL29wdC9wbGFuZXRzdGFjay9ocGNfd2l6YXJkIikKK2ltcG9ydCBocGNfd2l6YXJkCitmcm9tIHBsYW5ldHN0YWNrX2FuYWx5dGljcyBpbXBvcnQgRG9QbGFuZXRTdGFja0FuYWx5dGljcwogCiBjbGFzcyBEYXNoYm9hcmRXZWxjb21lVmlldyhUZW1wbGF0ZVZpZXcpOgogICAgIHRlbXBsYXRlX25hbWUgPSAnYWRtaW4vZGFzaGJvYXJkL3dlbGNvbWUuaHRtbCcKIAogICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2l0ZSA9IFNpdGUub2JqZWN0cy5maWx0ZXIoaWQ9cmVxdWVzdC51c2VyLnNpdGUuaWQpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNpdGUgPSBTaXRlLm9iamVjdHMuZmlsdGVyKG5hbWU9IlByaW5jZXRvbiIpCi0gICAgICAgIGNvbnRleHRbJ3NpdGUnXSA9IHNpdGVbMF0KKyAgICAgICAgdXNlckRldGFpbHMgPSBnZXRVc2VyU2xpY2VJbmZvKHJlcXVlc3QudXNlcikKKyAgICAgICAgI2NvbnRleHRbJ3NpdGUnXSA9IHVzZXJEZXRhaWxzWydzaXRlJ10KIAotICAgICAgICBjb250ZXh0Wyd1c2VyU2xpY2VJbmZvJ10gPSBnZXRTbGljZUluZm8ocmVxdWVzdCwgY29udGV4dCkKLSAgICAgICAgY29udGV4dFsnY2RuRGF0YSddID0gZ2V0Q0ROT3BlcmF0b3JEYXRhKCk7CisgICAgICAgIGNvbnRleHRbJ3VzZXJTbGljZUluZm8nXSA9IHVzZXJEZXRhaWxzWyd1c2VyU2xpY2VJbmZvJ10KKyAgICAgICAgY29udGV4dFsnY2RuRGF0YSddID0gdXNlckRldGFpbHNbJ2NkbkRhdGEnXQogICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfdG9fcmVzcG9uc2UoY29udGV4dD1jb250ZXh0KQogCi1kZWYgZ2V0U2xpY2VJbmZvKHJlcXVlc3QsIGNvbnRleHQpOgorZGVmIGdldFVzZXJTbGljZUluZm8odXNlciwgdGFibGVGb3JtYXQgPSBGYWxzZSk6CisgICAgICAgIHVzZXJEZXRhaWxzID0ge30KKyMgICAgICAgIHRyeToKKyMgLy8gICAgICAgICAgIHNpdGUgPSBTaXRlLm9iamVjdHMuZmlsdGVyKGlkPXVzZXIuc2l0ZS5pZCkKKyMgIC8vICAgICAgZXhjZXB0OgorIyAgIC8vICAgICAgICAgc2l0ZSA9IFNpdGUub2JqZWN0cy5maWx0ZXIobmFtZT0iUHJpbmNldG9uIikKKyMgICAgLy8gICAgdXNlckRldGFpbHNbJ3NpdGVuYW1lJ10gPSBzaXRlWzBdLm5hbWUKKyMgICAgIC8vICAgdXNlckRldGFpbHNbJ3NpdGVpZCddID0gc2l0ZVswXS5pZAorCisgICAgICAgIHVzZXJTbGljZURhdGEgPSBnZXRTbGljZUluZm8odXNlcikKKyAgICAgICAgaWYgKHRhYmxlRm9ybWF0KToKKyMgICAgICAgICAgICBwcHJpbnQoIioqKioqKiogICAgICBHRVQgVVNFUiBTTElDRSBJTkZPIikKKyAgICAgICAgICAgIHVzZXJEZXRhaWxzWyd1c2VyU2xpY2VJbmZvJ10gPSB1c2VyU2xpY2VUYWJsZUZvcm1hdHRlcih1c2VyU2xpY2VEYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlckRldGFpbHNbJ3VzZXJTbGljZUluZm8nXSA9IHVzZXJTbGljZURhdGEKKyAgICAgICAgdXNlckRldGFpbHNbJ2NkbkRhdGEnXSA9IGdldENETk9wZXJhdG9yRGF0YSgpOworIyAgICAgICAgcHByaW50KCB1c2VyRGV0YWlscykKKyAgICAgICAgcmV0dXJuIHVzZXJEZXRhaWxzCisKK2RlZiB1c2VyU2xpY2VUYWJsZUZvcm1hdHRlcihkYXRhKToKKyMgICAgcHByaW50KGRhdGEpCisgICAgZm9ybWF0dGVkRGF0YSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICdyb3dzJyA6IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgfQorICAgIHJldHVybiBmb3JtYXR0ZWREYXRhCisKK2RlZiBnZXRTbGljZUluZm8odXNlcik6CiAgICAgc2xpY2VMaXN0ID0gU2xpY2Uub2JqZWN0cy5hbGwoKQotICAgIHNsaWNlUHJpdnMgPSBTbGljZVByaXZpbGVnZS5vYmplY3RzLmZpbHRlcih1c2VyPXJlcXVlc3QudXNlcikKKyAgICBzbGljZVByaXZzID0gU2xpY2VQcml2aWxlZ2Uub2JqZWN0cy5maWx0ZXIodXNlcj11c2VyKQogICAgIHVzZXJTbGljZUluZm8gPSBbXQogICAgIGZvciBlbnRyeSBpbiBzbGljZVByaXZzOgogCisgICAgICAgIHNsaWNlbmFtZSA9IFNsaWNlLm9iamVjdHMuZ2V0KGlkPWVudHJ5LnNsaWNlLmlkKS5uYW1lCisgICAgICAgIHNsaWNlaWQgPSBTbGljZS5vYmplY3RzLmdldChpZD1lbnRyeS5zbGljZS5pZCkuaWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzZXJ2YXRpb25MaXN0ID0gUmVzZXJ2YXRpb24ub2JqZWN0cy5maWx0ZXIoc2xpY2U9ZW50cnkuc2xpY2UpCi0gICAgICAgICAgICByZXNlcnZhdGlvbnMgPSAoVHJ1ZSxyZXNlcnZhdGlvbkxpc3QpCi0KKyAgICAgICAgICAgIHNsaXZlckxpc3QgPSBTbGl2ZXIub2JqZWN0cy5maWx0ZXIoc2xpY2U9ZW50cnkuc2xpY2UuaWQpCisgICAgICAgICAgICBzaXRlTGlzdCA9IHt9CisgICAgICAgICAgICBmb3IgeCBpbiBzbGl2ZXJMaXN0OgorICAgICAgICAgICAgICAgaWYgeC5ub2RlLnNpdGUgbm90IGluIHNpdGVMaXN0OgorICAgICAgICAgICAgICAgICAgc2l0ZUxpc3RbeC5ub2RlLnNpdGVdID0gMQorICAgICAgICAgICAgc2xpdmVyY291bnQgPSBsZW4oc2xpdmVyTGlzdCkKKyAgICAgICAgICAgIHNpdGVjb3VudCA9IGxlbihzaXRlTGlzdCkKICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmVzZXJ2YXRpb25zID0gTm9uZQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICBzbGl2ZXJjb3VudCA9IDAKKyAgICAgICAgICAgIHNpdGVjb3VudCA9IDAKIAotICAgICAgICB1c2VyU2xpY2VJbmZvLmFwcGVuZCh7J3NsaWNlJzogU2xpY2Uub2JqZWN0cy5nZXQoaWQ9ZW50cnkuc2xpY2UuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGUnOiBTbGljZVJvbGUub2JqZWN0cy5nZXQoaWQ9ZW50cnkucm9sZS5pZCkucm9sZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNlcnZhdGlvbnMnOiByZXNlcnZhdGlvbnN9KQorICAgICAgICB1c2VyU2xpY2VJbmZvLmFwcGVuZCh7J3NsaWNlbmFtZSc6IHNsaWNlbmFtZSwgJ3NsaWNlaWQnOnNsaWNlaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9sZSc6IFNsaWNlUm9sZS5vYmplY3RzLmdldChpZD1lbnRyeS5yb2xlLmlkKS5yb2xlLCAnc2xpdmVyY291bnQnOiBzbGl2ZXJjb3VudCwgJ3NpdGVjb3VudCc6c2l0ZWNvdW50fSkKKwogICAgIHJldHVybiB1c2VyU2xpY2VJbmZvCiAKLQogZGVmIGdldENETk9wZXJhdG9yRGF0YShyYW5kb21pemVEYXRhID0gRmFsc2UpOgotICAgIGNkbkRhdGEgPSB7Ci0gICAgICAgICJBcml6b25hIjogewotICAgICAgICAgICAgImxhdCI6IDMyLjIzMzMsCi0gICAgICAgICAgICAibG9uZyI6IC0xMTAuOTQ3OTk5OTk5OTk5OTgsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAyLAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJJMiBTaW5nYXBvcmUiOiB7Ci0gICAgICAgICAgICAibGF0IjogMS4zMzU0NCwKLSAgICAgICAgICAgICJsb25nIjogMTAzLjg4OTk5OTk5OTk5OTk5LAotICAgICAgICAgICAgImhlYWx0aCI6IDAsCi0gICAgICAgICAgICAibnVtTm9kZXMiOiAxNSwKLSAgICAgICAgICAgICJudW1IUENTbGl2ZXJzIjogNSwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cuaW50ZXJuZXQyLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJPTi5MYWIiOiB7Ci0gICAgICAgICAgICAibGF0IjogMzcuNDUyOTU1LAotICAgICAgICAgICAgImxvbmciOiAtMTIyLjE4MTc2NTk5OTk5OTk4LAotICAgICAgICAgICAgImhlYWx0aCI6IDAsCi0gICAgICAgICAgICAibnVtTm9kZXMiOiA0NSwKLSAgICAgICAgICAgICJudW1IUENTbGl2ZXJzIjogMTIsCi0gICAgICAgICAgICAic2l0ZVVybCI6ICJodHRwOi8vd3d3Lm9ubGFiLnVzLyIKLSAgICAgICAgfSwKLSAgICAgICAgIkkyIFdhc2hpbmd0b24gREMiOiB7Ci0gICAgICAgICAgICAibGF0IjogMzguMDA5LAotICAgICAgICAgICAgImxvbmciOiAtNzcuMDAwMjk5OTk5OTk5OTgsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDUwLAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiA3LAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5pbnRlcm5ldDIuZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIkkyIFNlYXR0bGUiOiB7Ci0gICAgICAgICAgICAibGF0IjogNDcuNjUzMSwKLSAgICAgICAgICAgICJsb25nIjogLTEyMi4zMTI5OTk5OTk5OTk5OSwKLSAgICAgICAgICAgICJoZWFsdGgiOiAwLAotICAgICAgICAgICAgIm51bU5vZGVzIjogMTAwLAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cuaW50ZXJuZXQyLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJJMiBTYWx0IExha2UgQ2l0eSI6IHsKLSAgICAgICAgICAgICJsYXQiOiA0MC43NjU5LAotICAgICAgICAgICAgImxvbmciOiAtMTExLjg0NCwKLSAgICAgICAgICAgICJoZWFsdGgiOiAwLAotICAgICAgICAgICAgIm51bU5vZGVzIjogMzUsCi0gICAgICAgICAgICAibnVtSFBDU2xpdmVycyI6IDEwLAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5pbnRlcm5ldDIuZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIkkyIE5ldyBZb3JrIjogewotICAgICAgICAgICAgImxhdCI6IDQwLjcyLAotICAgICAgICAgICAgImxvbmciOiAtNzMuOTkwMDAwMDAwMDAwMDEsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDI1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiA0LAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5pbnRlcm5ldDIuZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIkkyIExvcyBBbmdlbGVzIjogewotICAgICAgICAgICAgImxhdCI6IDMzLjI1MDUsCi0gICAgICAgICAgICAibG9uZyI6IC0xMTcuNTAyOTk5OTk5OTk5OTksCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDIwLAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cuaW50ZXJuZXQyLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJJMiBLYW5zYXMgQ2l0eSI6IHsKLSAgICAgICAgICAgICJsYXQiOiAzOS4wMDEyLAotICAgICAgICAgICAgImxvbmciOiAtOTQuMDA2MzAwMDAwMDAwMDEsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE3LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiA4LAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5pbnRlcm5ldDIuZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIkkyIEhvdXN0b24iOiB7Ci0gICAgICAgICAgICAibGF0IjogMjkuMDA3NywKLSAgICAgICAgICAgICJsb25nIjogLTk1LjAwMzY5OTk5OTk5OTk4LAotICAgICAgICAgICAgImhlYWx0aCI6IDAsCi0gICAgICAgICAgICAibnVtTm9kZXMiOiAxNSwKLSAgICAgICAgICAgICJudW1IUENTbGl2ZXJzIjogMTAsCi0gICAgICAgICAgICAic2l0ZVVybCI6ICJodHRwOi8vd3d3LmludGVybmV0Mi5lZHUvIgotICAgICAgICB9LAotICAgICAgICAiSTIgQ2hpY2FnbyI6IHsKLSAgICAgICAgICAgICJsYXQiOiA0MS4wMDg1LAotICAgICAgICAgICAgImxvbmciOiAtODcuMDA2NTAwMDAwMDAwMDIsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cuaW50ZXJuZXQyLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJJMiBBdGxhbnRhIjogewotICAgICAgICAgICAgImxhdCI6IDMzLjAwNzUsCi0gICAgICAgICAgICAibG9uZyI6IC04NC4wMDM4MDAwMDAwMDAwMSwKLSAgICAgICAgICAgICJoZWFsdGgiOiAwLAotICAgICAgICAgICAgIm51bU5vZGVzIjogMTUsCi0gICAgICAgICAgICAibnVtSFBDU2xpdmVycyI6IDEwLAotICAgICAgICAgICAgInNpdGVVcmwiOiAiaHR0cDovL3d3dy5pbnRlcm5ldDIuZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIk1heFBsYW5jayI6IHsKLSAgICAgICAgICAgICJsYXQiOiA0OS4xNCwKLSAgICAgICAgICAgICJsb25nIjogNi41ODg5OTk5OTk5OTk5NDIsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cubXBpLXN3cy5tcGcuZGUvIgotICAgICAgICB9LAotICAgICAgICAiR2VvcmdpYVRlY2giOiB7Ci0gICAgICAgICAgICAibGF0IjogMzMuNzc3MiwKLSAgICAgICAgICAgICJsb25nIjogLTg0LjM5NzYwMDAwMDAwMDAxLAotICAgICAgICAgICAgImhlYWx0aCI6IDAsCi0gICAgICAgICAgICAibnVtTm9kZXMiOiAxNSwKLSAgICAgICAgICAgICJudW1IUENTbGl2ZXJzIjogMTAsCi0gICAgICAgICAgICAic2l0ZVVybCI6ICJodHRwOi8vd3d3LmdhdGVjaC5lZHUvIgotICAgICAgICB9LAotICAgICAgICAiUHJpbmNldG9uIjogewotICAgICAgICAgICAgImxhdCI6IDQwLjM1MDIsCi0gICAgICAgICAgICAibG9uZyI6IC03NC42NTI0LAotICAgICAgICAgICAgImhlYWx0aCI6IDAsCi0gICAgICAgICAgICAibnVtTm9kZXMiOiAxNSwKLSAgICAgICAgICAgICJudW1IUENTbGl2ZXJzIjogMTAsCi0gICAgICAgICAgICAic2l0ZVVybCI6ICJodHRwOi8vcHJpbmNldG9uLmVkdS8iCi0gICAgICAgIH0sCi0gICAgICAgICJXYXNoaW5ndG9uIjogewotICAgICAgICAgICAgImxhdCI6IDQ3LjY1MzEsCi0gICAgICAgICAgICAibG9uZyI6IC0xMjIuMzEyOTk5OTk5OTk5OTksCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHBzOi8vd3d3Lndhc2hpbmd0b24uZWR1LyIKLSAgICAgICAgfSwKLSAgICAgICAgIlN0YW5mb3JkIjogewotICAgICAgICAgICAgImxhdCI6IDM3LjQyOTQsCi0gICAgICAgICAgICAibG9uZyI6IC0xMjIuMTcyMDAwMDAwMDAwMDMsCi0gICAgICAgICAgICAiaGVhbHRoIjogMCwKLSAgICAgICAgICAgICJudW1Ob2RlcyI6IDE1LAotICAgICAgICAgICAgIm51bUhQQ1NsaXZlcnMiOiAxMCwKLSAgICAgICAgICAgICJzaXRlVXJsIjogImh0dHA6Ly93d3cuc3RhbmZvcmQuZWR1LyIKLSAgICAgICAgfSwKLSAgICB9CisgICAgcmV0dXJuIGhwY193aXphcmQuZ2V0X2hwY193aXphcmQoKS5nZXRfc2l0ZXNfZm9yX3ZpZXcoKQogCi0gICAgaWYgcmFuZG9taXplRGF0YToKLSAgICAgICAgY2RuRGF0YVsiU2lvYmhhbiJdID0geyAibGF0IjogNDMuMzQyMDMsICJsb25nIjogLTcwLjU2MzUxLCAiaGVhbHRoIjogMTAsICJudW1Ob2RlcyI6IDUsICJudW1IUENTbGl2ZXJzIjogMywgInNpdGVVcmwiOiAiaHR0cHM6ZGV2b25yZXhlcyJ9Ci0gICAgICAgIGRlbCBjZG5EYXRhWyJQcmluY2V0b24iXQotICAgICAgICBjZG5EYXRhWyJJMiBTZWF0dGxlIl1bJ3NpdGVVcmwnXSA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCi0gICAgICAgIGNkbkRhdGFbIkkyIFNhbHQgTGFrZSBDaXR5Il1bIm51bUhQQ1NsaXZlcnMiXSA9IDM0CitkZWYgZ2V0UGFnZVN1bW1hcnkocmVxdWVzdCk6CisgICAgc2xpY2UgPSByZXF1ZXN0LkdFVC5nZXQoJ3NsaWNlJywgTm9uZSkKKyAgICBzaXRlID0gcmVxdWVzdC5HRVQuZ2V0KCdzaXRlJywgTm9uZSkKKyAgICBub2RlID0gcmVxdWVzdC5HRVQuZ2V0KCdub2RlJywgTm9uZSkKIAogCi0gICAgcmV0dXJuIGNkbkRhdGEKK2NsYXNzIFNpbXVsYXRvclZpZXcoVmlldyk6CisgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqKmt3YXJncyk6CisgICAgICAgIHNpbSA9IGpzb24ubG9hZHMoZmlsZSgiL3RtcC9zaW11bGF0b3IuanNvbiIsInIiKS5yZWFkKCkpCisgICAgICAgIHRleHQgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiIKKyAgICAgICAgdGV4dCArPSAiSXRlcmF0aW9uOiAlZDxicj4iICUgc2ltWyJpdGVyYXRpb24iXQorICAgICAgICB0ZXh0ICs9ICJFbGFwc2VkIHNpbmNlIHJlcG9ydCAlZDxicj48YnI+IiAlIHNpbVsiZWxhcHNlZF9zaW5jZV9yZXBvcnQiXQorICAgICAgICB0ZXh0ICs9ICI8dGFibGUgYm9yZGVyPTE+IgorICAgICAgICB0ZXh0ICs9ICI8dHI+PHRoPnNpdGU8L3RoPjx0aD50cmVuZDwvdGg+PHRoPndlaWdodDwvdGg+PHRoPmJ5dGVzX3NlbnQ8L3RoPjx0aD5ob3Q8L3RoPjwvdHI+IgorICAgICAgICBmb3Igc2l0ZSBpbiBzaW1bInNpdGVfbG9hZCJdLnZhbHVlcygpOgorICAgICAgICAgICAgdGV4dCArPSAiPHRyPiIKKyAgICAgICAgICAgIHRleHQgKz0gIjx0ZD4lczwvdGQ+PHRkPiUwLjJmPC90ZD48dGQ+JTAuMmY8L3RkPjx0ZD4lZDwvdGQ+PHRkPiUwLjJmPC90ZD4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHNpdGVbIm5hbWUiXSwgc2l0ZVsidHJlbmQiXSwgc2l0ZVsid2VpZ2h0Il0sIHNpdGVbImJ5dGVzX3NlbnQiXSwgc2l0ZVsibG9hZF9mcmFjIl0pCisgICAgICAgICAgICB0ZXh0ICs9ICI8L3RyPiIKKyAgICAgICAgdGV4dCArPSAiPC90YWJsZT4iCisgICAgICAgIHRleHQgKz0gIjwvYm9keT48L2h0bWw+IgorICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKHRleHQpCisKK2NsYXNzIERhc2hib2FyZFVzZXJTaXRlVmlldyhWaWV3KToKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uLmR1bXBzKGdldFVzZXJTbGljZUluZm8ocmVxdWVzdC51c2VyLCBUcnVlKSksIG1pbWV0eXBlPSdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JykKKworY2xhc3MgRGFzaGJvYXJkU3VtbWFyeUFqYXhWaWV3KFZpZXcpOgorICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoaHBjX3dpemFyZC5nZXRfaHBjX3dpemFyZCgpLmdldF9zdW1tYXJ5X2Zvcl92aWV3KCkpLCBtaW1ldHlwZT0nYXBwbGljYXRpb24vamF2YXNjcmlwdCcpCisKK2NsYXNzIERhc2hib2FyZEFkZE9yUmVtb3ZlU2xpdmVyVmlldyhWaWV3KToKKyAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzaXRlTmFtZSA9IHJlcXVlc3QuUE9TVC5nZXQoInNpdGUiLCAiMCIpCisgICAgICAgIGFjdGlvblRvRG8gPSByZXF1ZXN0LlBPU1QuZ2V0KCJhY3Rpb25Ub0RvIiwgIjAiKQorCisgICAgICAgIGlmIChhY3Rpb25Ub0RvID09ICJhZGQiKToKKyAgICAgICAgICAgIGhwY193aXphcmQuZ2V0X2hwY193aXphcmQoKS5pbmNyZWFzZV9zbGl2ZXJzKHNpdGVOYW1lLCAxKQorICAgICAgICBlbGlmIChhY3Rpb25Ub0RvID09ICJyZW0iKToKKyAgICAgICAgICAgIGhwY193aXphcmQuZ2V0X2hwY193aXphcmQoKS5kZWNyZWFzZV9zbGl2ZXJzKHNpdGVOYW1lLCAxKQorCisgICAgICAgIHByaW50ICcqJyAqIDUwCisgICAgICAgIHByaW50ICdBc2sgZm9yIHNpdGU6ICcgKyBzaXRlTmFtZSArICcgdG8gJyArIGFjdGlvblRvRG8gKyAnIGFub3RoZXIgSFBDIFNsaXZlcicKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZSgnVGhpcyBpcyBQT1NUIHJlcXVlc3QgJykKIAogY2xhc3MgRGFzaGJvYXJkQWpheFZpZXcoVmlldyk6CiAgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyhnZXRDRE5PcGVyYXRvckRhdGEoVHJ1ZSkpLCBtaW1ldHlwZT0nYXBwbGljYXRpb24vamF2YXNjcmlwdCcpCi0gICAgICAgIAorCitjbGFzcyBEYXNoYm9hcmRBbmFseXRpY3NBamF4VmlldyhWaWV3KToKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsIG5hbWU9ImhlbGxvX3dvcmxkIiwgKiprd2FyZ3MpOgorICAgICAgICBpZiAobmFtZSA9PSAiaHBjU3VtbWFyeSIpOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uLmR1bXBzKGhwY193aXphcmQuZ2V0X2hwY193aXphcmQoKS5nZXRfc3VtbWFyeV9mb3JfdmlldygpKSwgbWltZXR5cGU9J2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnKQorICAgICAgICBlbGlmIChuYW1lID09ICJocGNVc2VyU2l0ZSIpOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uLmR1bXBzKGdldFVzZXJTbGljZUluZm8ocmVxdWVzdC51c2VyLCBUcnVlKSksIG1pbWV0eXBlPSdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JykKKyAgICAgICAgZWxpZiAobmFtZSA9PSAiaHBjTWFwIik6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoZ2V0Q0ROT3BlcmF0b3JEYXRhKFRydWUpKSwgbWltZXR5cGU9J2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnKQorICAgICAgICBlbGlmIChuYW1lID09ICJiaWdxdWVyeSIpOgorICAgICAgICAgICAgKG1pbWV0eXBlLCBkYXRhKSA9IERvUGxhbmV0U3RhY2tBbmFseXRpY3MocmVxdWVzdCkKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoZGF0YSwgbWltZXR5cGU9bWltZXR5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoIlVua25vd24iKSwgbWltZXR5cGU9J2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnKQorCmRpZmYgLS1naXQgYS9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9ocGNfaGlzdG9yaWNhbC5jc3MgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9ocGNfaGlzdG9yaWNhbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyZTk4NgotLS0gL2Rldi9udWxsCisrKyBiL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL2hwY19oaXN0b3JpY2FsLmNzcwpAQCAtMCwwICsxLDgxMiBAQAorLnJvdyB7CisgIG1hcmdpbi1yaWdodDogLTE1cHg7CisgIG1hcmdpbi1sZWZ0OiAtMTVweDsKK30KKworLnJvdzpiZWZvcmUsCisucm93OmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIgIjsKK30KKworLnJvdzphZnRlciB7CisgIGNsZWFyOiBib3RoOworfQorCisucm93OmJlZm9yZSwKKy5yb3c6YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgY29udGVudDogIiAiOworfQorCisucm93OmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5jb2wteHMtMSwKKy5jb2wtc20tMSwKKy5jb2wtbWQtMSwKKy5jb2wtbGctMSwKKy5jb2wteHMtMiwKKy5jb2wtc20tMiwKKy5jb2wtbWQtMiwKKy5jb2wtbGctMiwKKy5jb2wteHMtMywKKy5jb2wtc20tMywKKy5jb2wtbWQtMywKKy5jb2wtbGctMywKKy5jb2wteHMtNCwKKy5jb2wtc20tNCwKKy5jb2wtbWQtNCwKKy5jb2wtbGctNCwKKy5jb2wteHMtNSwKKy5jb2wtc20tNSwKKy5jb2wtbWQtNSwKKy5jb2wtbGctNSwKKy5jb2wteHMtNiwKKy5jb2wtc20tNiwKKy5jb2wtbWQtNiwKKy5jb2wtbGctNiwKKy5jb2wteHMtNywKKy5jb2wtc20tNywKKy5jb2wtbWQtNywKKy5jb2wtbGctNywKKy5jb2wteHMtOCwKKy5jb2wtc20tOCwKKy5jb2wtbWQtOCwKKy5jb2wtbGctOCwKKy5jb2wteHMtOSwKKy5jb2wtc20tOSwKKy5jb2wtbWQtOSwKKy5jb2wtbGctOSwKKy5jb2wteHMtMTAsCisuY29sLXNtLTEwLAorLmNvbC1tZC0xMCwKKy5jb2wtbGctMTAsCisuY29sLXhzLTExLAorLmNvbC1zbS0xMSwKKy5jb2wtbWQtMTEsCisuY29sLWxnLTExLAorLmNvbC14cy0xMiwKKy5jb2wtc20tMTIsCisuY29sLW1kLTEyLAorLmNvbC1sZy0xMiB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgbWluLWhlaWdodDogMXB4OworICBwYWRkaW5nLXJpZ2h0OiAxNXB4OworICBwYWRkaW5nLWxlZnQ6IDE1cHg7Cit9CisKKy5jb2wteHMtMSwKKy5jb2wteHMtMiwKKy5jb2wteHMtMywKKy5jb2wteHMtNCwKKy5jb2wteHMtNSwKKy5jb2wteHMtNiwKKy5jb2wteHMtNywKKy5jb2wteHMtOCwKKy5jb2wteHMtOSwKKy5jb2wteHMtMTAsCisuY29sLXhzLTExIHsKKyAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5jb2wteHMtMTIgeworICB3aWR0aDogMTAwJTsKK30KKworLmNvbC14cy0xMSB7CisgIHdpZHRoOiA5MS42NjY2NjY2NjY2NjY2NiU7Cit9CisKKy5jb2wteHMtMTAgeworICB3aWR0aDogODMuMzMzMzMzMzMzMzMzMzQlOworfQorCisuY29sLXhzLTkgeworICB3aWR0aDogNzUlOworfQorCisuY29sLXhzLTggeworICB3aWR0aDogNjYuNjY2NjY2NjY2NjY2NjYlOworfQorCisuY29sLXhzLTcgeworICB3aWR0aDogNTguMzMzMzMzMzMzMzMzMzM2JTsKK30KKworLmNvbC14cy02IHsKKyAgd2lkdGg6IDUwJTsKK30KKworLmNvbC14cy01IHsKKyAgd2lkdGg6IDQxLjY2NjY2NjY2NjY2NjY3JTsKK30KKworLmNvbC14cy00IHsKKyAgd2lkdGg6IDMzLjMzMzMzMzMzMzMzMzMzJTsKK30KKworLmNvbC14cy0zIHsKKyAgd2lkdGg6IDI1JTsKK30KKworLmNvbC14cy0yIHsKKyAgd2lkdGg6IDE2LjY2NjY2NjY2NjY2NjY2NCU7Cit9CisKKy5jb2wteHMtMSB7CisgIHdpZHRoOiA4LjMzMzMzMzMzMzMzMzMzMiU7Cit9CisKKy5jb2wteHMtcHVsbC0xMiB7CisgIHJpZ2h0OiAxMDAlOworfQorCisuY29sLXhzLXB1bGwtMTEgeworICByaWdodDogOTEuNjY2NjY2NjY2NjY2NjYlOworfQorCisuY29sLXhzLXB1bGwtMTAgeworICByaWdodDogODMuMzMzMzMzMzMzMzMzMzQlOworfQorCisuY29sLXhzLXB1bGwtOSB7CisgIHJpZ2h0OiA3NSU7Cit9CisKKy5jb2wteHMtcHVsbC04IHsKKyAgcmlnaHQ6IDY2LjY2NjY2NjY2NjY2NjY2JTsKK30KKworLmNvbC14cy1wdWxsLTcgeworICByaWdodDogNTguMzMzMzMzMzMzMzMzMzM2JTsKK30KKworLmNvbC14cy1wdWxsLTYgeworICByaWdodDogNTAlOworfQorCisuY29sLXhzLXB1bGwtNSB7CisgIHJpZ2h0OiA0MS42NjY2NjY2NjY2NjY2NyU7Cit9CisKKy5jb2wteHMtcHVsbC00IHsKKyAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMzMzMzJTsKK30KKworLmNvbC14cy1wdWxsLTMgeworICByaWdodDogMjUlOworfQorCisuY29sLXhzLXB1bGwtMiB7CisgIHJpZ2h0OiAxNi42NjY2NjY2NjY2NjY2NjQlOworfQorCisuY29sLXhzLXB1bGwtMSB7CisgIHJpZ2h0OiA4LjMzMzMzMzMzMzMzMzMzMiU7Cit9CisKKy5jb2wteHMtcHVsbC0wIHsKKyAgcmlnaHQ6IDA7Cit9CisKKy5jb2wteHMtcHVzaC0xMiB7CisgIGxlZnQ6IDEwMCU7Cit9CisKKy5jb2wteHMtcHVzaC0xMSB7CisgIGxlZnQ6IDkxLjY2NjY2NjY2NjY2NjY2JTsKK30KKworLmNvbC14cy1wdXNoLTEwIHsKKyAgbGVmdDogODMuMzMzMzMzMzMzMzMzMzQlOworfQorCisuY29sLXhzLXB1c2gtOSB7CisgIGxlZnQ6IDc1JTsKK30KKworLmNvbC14cy1wdXNoLTggeworICBsZWZ0OiA2Ni42NjY2NjY2NjY2NjY2NiU7Cit9CisKKy5jb2wteHMtcHVzaC03IHsKKyAgbGVmdDogNTguMzMzMzMzMzMzMzMzMzM2JTsKK30KKworLmNvbC14cy1wdXNoLTYgeworICBsZWZ0OiA1MCU7Cit9CisKKy5jb2wteHMtcHVzaC01IHsKKyAgbGVmdDogNDEuNjY2NjY2NjY2NjY2NjclOworfQorCisuY29sLXhzLXB1c2gtNCB7CisgIGxlZnQ6IDMzLjMzMzMzMzMzMzMzMzMzJTsKK30KKworLmNvbC14cy1wdXNoLTMgeworICBsZWZ0OiAyNSU7Cit9CisKKy5jb2wteHMtcHVzaC0yIHsKKyAgbGVmdDogMTYuNjY2NjY2NjY2NjY2NjY0JTsKK30KKworLmNvbC14cy1wdXNoLTEgeworICBsZWZ0OiA4LjMzMzMzMzMzMzMzMzMzMiU7Cit9CisKKy5jb2wteHMtcHVzaC0wIHsKKyAgbGVmdDogMDsKK30KKworLmNvbC14cy1vZmZzZXQtMTIgeworICBtYXJnaW4tbGVmdDogMTAwJTsKK30KKworLmNvbC14cy1vZmZzZXQtMTEgeworICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NjY2NjYlOworfQorCisuY29sLXhzLW9mZnNldC0xMCB7CisgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzMzMzNCU7Cit9CisKKy5jb2wteHMtb2Zmc2V0LTkgeworICBtYXJnaW4tbGVmdDogNzUlOworfQorCisuY29sLXhzLW9mZnNldC04IHsKKyAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjY2NjY2JTsKK30KKworLmNvbC14cy1vZmZzZXQtNyB7CisgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzMzMzMzYlOworfQorCisuY29sLXhzLW9mZnNldC02IHsKKyAgbWFyZ2luLWxlZnQ6IDUwJTsKK30KKworLmNvbC14cy1vZmZzZXQtNSB7CisgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY2NjY2NyU7Cit9CisKKy5jb2wteHMtb2Zmc2V0LTQgeworICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMzMzMzMlOworfQorCisuY29sLXhzLW9mZnNldC0zIHsKKyAgbWFyZ2luLWxlZnQ6IDI1JTsKK30KKworLmNvbC14cy1vZmZzZXQtMiB7CisgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY2NjY2NjQlOworfQorCisuY29sLXhzLW9mZnNldC0xIHsKKyAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMzMzMzMyJTsKK30KKworLmNvbC14cy1vZmZzZXQtMCB7CisgIG1hcmdpbi1sZWZ0OiAwOworfQorCitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsKKyAgLmNvbnRhaW5lciB7CisgICAgd2lkdGg6IDc1MHB4OworICB9CisgIC5jb2wtc20tMSwKKyAgLmNvbC1zbS0yLAorICAuY29sLXNtLTMsCisgIC5jb2wtc20tNCwKKyAgLmNvbC1zbS01LAorICAuY29sLXNtLTYsCisgIC5jb2wtc20tNywKKyAgLmNvbC1zbS04LAorICAuY29sLXNtLTksCisgIC5jb2wtc20tMTAsCisgIC5jb2wtc20tMTEgeworICAgIGZsb2F0OiBsZWZ0OworICB9CisgIC5jb2wtc20tMTIgeworICAgIHdpZHRoOiAxMDAlOworICB9CisgIC5jb2wtc20tMTEgeworICAgIHdpZHRoOiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1zbS0xMCB7CisgICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLXNtLTkgeworICAgIHdpZHRoOiA3NSU7CisgIH0KKyAgLmNvbC1zbS04IHsKKyAgICB3aWR0aDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtc20tNyB7CisgICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1zbS02IHsKKyAgICB3aWR0aDogNTAlOworICB9CisgIC5jb2wtc20tNSB7CisgICAgd2lkdGg6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLTQgeworICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS0zIHsKKyAgICB3aWR0aDogMjUlOworICB9CisgIC5jb2wtc20tMiB7CisgICAgd2lkdGg6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1zbS0xIHsKKyAgICB3aWR0aDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtc20tcHVsbC0xMiB7CisgICAgcmlnaHQ6IDEwMCU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTExIHsKKyAgICByaWdodDogOTEuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtc20tcHVsbC0xMCB7CisgICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLXNtLXB1bGwtOSB7CisgICAgcmlnaHQ6IDc1JTsKKyAgfQorICAuY29sLXNtLXB1bGwtOCB7CisgICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjY2NjY2JTsKKyAgfQorICAuY29sLXNtLXB1bGwtNyB7CisgICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTYgeworICAgIHJpZ2h0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTUgeworICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTQgeworICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTMgeworICAgIHJpZ2h0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1wdWxsLTIgeworICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY2NjY2NjQlOworICB9CisgIC5jb2wtc20tcHVsbC0xIHsKKyAgICByaWdodDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtc20tcHVsbC0wIHsKKyAgICByaWdodDogMDsKKyAgfQorICAuY29sLXNtLXB1c2gtMTIgeworICAgIGxlZnQ6IDEwMCU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTExIHsKKyAgICBsZWZ0OiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTEwIHsKKyAgICBsZWZ0OiA4My4zMzMzMzMzMzMzMzMzNCU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTkgeworICAgIGxlZnQ6IDc1JTsKKyAgfQorICAuY29sLXNtLXB1c2gtOCB7CisgICAgbGVmdDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtc20tcHVzaC03IHsKKyAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzMzMzMzYlOworICB9CisgIC5jb2wtc20tcHVzaC02IHsKKyAgICBsZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTUgeworICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLXB1c2gtNCB7CisgICAgbGVmdDogMzMuMzMzMzMzMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tcHVzaC0zIHsKKyAgICBsZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTIgeworICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1zbS1wdXNoLTEgeworICAgIGxlZnQ6IDguMzMzMzMzMzMzMzMzMzMyJTsKKyAgfQorICAuY29sLXNtLXB1c2gtMCB7CisgICAgbGVmdDogMDsKKyAgfQorICAuY29sLXNtLW9mZnNldC0xMiB7CisgICAgbWFyZ2luLWxlZnQ6IDEwMCU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMTEgeworICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMTAgeworICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzMzMzNCU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtOSB7CisgICAgbWFyZ2luLWxlZnQ6IDc1JTsKKyAgfQorICAuY29sLXNtLW9mZnNldC04IHsKKyAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTcgeworICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzMzMzMzYlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtNSB7CisgICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLXNtLW9mZnNldC00IHsKKyAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMzMzMzMlOworICB9CisgIC5jb2wtc20tb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMiB7CisgICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1zbS1vZmZzZXQtMSB7CisgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMzMzMzMyJTsKKyAgfQorICAuY29sLXNtLW9mZnNldC0wIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorfQorCitAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHsKKyAgLmNvbnRhaW5lciB7CisgICAgd2lkdGg6IDk3MHB4OworICB9CisgIC5jb2wtbWQtMSwKKyAgLmNvbC1tZC0yLAorICAuY29sLW1kLTMsCisgIC5jb2wtbWQtNCwKKyAgLmNvbC1tZC01LAorICAuY29sLW1kLTYsCisgIC5jb2wtbWQtNywKKyAgLmNvbC1tZC04LAorICAuY29sLW1kLTksCisgIC5jb2wtbWQtMTAsCisgIC5jb2wtbWQtMTEgeworICAgIGZsb2F0OiBsZWZ0OworICB9CisgIC5jb2wtbWQtMTIgeworICAgIHdpZHRoOiAxMDAlOworICB9CisgIC5jb2wtbWQtMTEgeworICAgIHdpZHRoOiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1tZC0xMCB7CisgICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLW1kLTkgeworICAgIHdpZHRoOiA3NSU7CisgIH0KKyAgLmNvbC1tZC04IHsKKyAgICB3aWR0aDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtbWQtNyB7CisgICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1tZC02IHsKKyAgICB3aWR0aDogNTAlOworICB9CisgIC5jb2wtbWQtNSB7CisgICAgd2lkdGg6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLTQgeworICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC0zIHsKKyAgICB3aWR0aDogMjUlOworICB9CisgIC5jb2wtbWQtMiB7CisgICAgd2lkdGg6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1tZC0xIHsKKyAgICB3aWR0aDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtbWQtcHVsbC0xMiB7CisgICAgcmlnaHQ6IDEwMCU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTExIHsKKyAgICByaWdodDogOTEuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtbWQtcHVsbC0xMCB7CisgICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLW1kLXB1bGwtOSB7CisgICAgcmlnaHQ6IDc1JTsKKyAgfQorICAuY29sLW1kLXB1bGwtOCB7CisgICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjY2NjY2JTsKKyAgfQorICAuY29sLW1kLXB1bGwtNyB7CisgICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTYgeworICAgIHJpZ2h0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTUgeworICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY2NjY2NyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTQgeworICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTMgeworICAgIHJpZ2h0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1wdWxsLTIgeworICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY2NjY2NjQlOworICB9CisgIC5jb2wtbWQtcHVsbC0xIHsKKyAgICByaWdodDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtbWQtcHVsbC0wIHsKKyAgICByaWdodDogMDsKKyAgfQorICAuY29sLW1kLXB1c2gtMTIgeworICAgIGxlZnQ6IDEwMCU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTExIHsKKyAgICBsZWZ0OiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTEwIHsKKyAgICBsZWZ0OiA4My4zMzMzMzMzMzMzMzMzNCU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTkgeworICAgIGxlZnQ6IDc1JTsKKyAgfQorICAuY29sLW1kLXB1c2gtOCB7CisgICAgbGVmdDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtbWQtcHVzaC03IHsKKyAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzMzMzMzYlOworICB9CisgIC5jb2wtbWQtcHVzaC02IHsKKyAgICBsZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTUgeworICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLXB1c2gtNCB7CisgICAgbGVmdDogMzMuMzMzMzMzMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtcHVzaC0zIHsKKyAgICBsZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTIgeworICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1tZC1wdXNoLTEgeworICAgIGxlZnQ6IDguMzMzMzMzMzMzMzMzMzMyJTsKKyAgfQorICAuY29sLW1kLXB1c2gtMCB7CisgICAgbGVmdDogMDsKKyAgfQorICAuY29sLW1kLW9mZnNldC0xMiB7CisgICAgbWFyZ2luLWxlZnQ6IDEwMCU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMTEgeworICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMTAgeworICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzMzMzNCU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtOSB7CisgICAgbWFyZ2luLWxlZnQ6IDc1JTsKKyAgfQorICAuY29sLW1kLW9mZnNldC04IHsKKyAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTcgeworICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzMzMzMzYlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTYgeworICAgIG1hcmdpbi1sZWZ0OiA1MCU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtNSB7CisgICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLW1kLW9mZnNldC00IHsKKyAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMzMzMzMlOworICB9CisgIC5jb2wtbWQtb2Zmc2V0LTMgeworICAgIG1hcmdpbi1sZWZ0OiAyNSU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMiB7CisgICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1tZC1vZmZzZXQtMSB7CisgICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMzMzMzMyJTsKKyAgfQorICAuY29sLW1kLW9mZnNldC0wIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorfQorCitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC5jb250YWluZXIgeworICAgIHdpZHRoOiAxMTcwcHg7CisgIH0KKyAgLmNvbC1sZy0xLAorICAuY29sLWxnLTIsCisgIC5jb2wtbGctMywKKyAgLmNvbC1sZy00LAorICAuY29sLWxnLTUsCisgIC5jb2wtbGctNiwKKyAgLmNvbC1sZy03LAorICAuY29sLWxnLTgsCisgIC5jb2wtbGctOSwKKyAgLmNvbC1sZy0xMCwKKyAgLmNvbC1sZy0xMSB7CisgICAgZmxvYXQ6IGxlZnQ7CisgIH0KKyAgLmNvbC1sZy0xMiB7CisgICAgd2lkdGg6IDEwMCU7CisgIH0KKyAgLmNvbC1sZy0xMSB7CisgICAgd2lkdGg6IDkxLjY2NjY2NjY2NjY2NjY2JTsKKyAgfQorICAuY29sLWxnLTEwIHsKKyAgICB3aWR0aDogODMuMzMzMzMzMzMzMzMzMzQlOworICB9CisgIC5jb2wtbGctOSB7CisgICAgd2lkdGg6IDc1JTsKKyAgfQorICAuY29sLWxnLTggeworICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1sZy03IHsKKyAgICB3aWR0aDogNTguMzMzMzMzMzMzMzMzMzM2JTsKKyAgfQorICAuY29sLWxnLTYgeworICAgIHdpZHRoOiA1MCU7CisgIH0KKyAgLmNvbC1sZy01IHsKKyAgICB3aWR0aDogNDEuNjY2NjY2NjY2NjY2NjclOworICB9CisgIC5jb2wtbGctNCB7CisgICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLTMgeworICAgIHdpZHRoOiAyNSU7CisgIH0KKyAgLmNvbC1sZy0yIHsKKyAgICB3aWR0aDogMTYuNjY2NjY2NjY2NjY2NjY0JTsKKyAgfQorICAuY29sLWxnLTEgeworICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMzMzMzMiU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTEyIHsKKyAgICByaWdodDogMTAwJTsKKyAgfQorICAuY29sLWxnLXB1bGwtMTEgeworICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTEwIHsKKyAgICByaWdodDogODMuMzMzMzMzMzMzMzMzMzQlOworICB9CisgIC5jb2wtbGctcHVsbC05IHsKKyAgICByaWdodDogNzUlOworICB9CisgIC5jb2wtbGctcHVsbC04IHsKKyAgICByaWdodDogNjYuNjY2NjY2NjY2NjY2NjYlOworICB9CisgIC5jb2wtbGctcHVsbC03IHsKKyAgICByaWdodDogNTguMzMzMzMzMzMzMzMzMzM2JTsKKyAgfQorICAuY29sLWxnLXB1bGwtNiB7CisgICAgcmlnaHQ6IDUwJTsKKyAgfQorICAuY29sLWxnLXB1bGwtNSB7CisgICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjY2NjY3JTsKKyAgfQorICAuY29sLWxnLXB1bGwtNCB7CisgICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMzMzMzJTsKKyAgfQorICAuY29sLWxnLXB1bGwtMyB7CisgICAgcmlnaHQ6IDI1JTsKKyAgfQorICAuY29sLWxnLXB1bGwtMiB7CisgICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjY2NjY2NCU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTEgeworICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMzMzMzMiU7CisgIH0KKyAgLmNvbC1sZy1wdWxsLTAgeworICAgIHJpZ2h0OiAwOworICB9CisgIC5jb2wtbGctcHVzaC0xMiB7CisgICAgbGVmdDogMTAwJTsKKyAgfQorICAuY29sLWxnLXB1c2gtMTEgeworICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjY2NjY2JTsKKyAgfQorICAuY29sLWxnLXB1c2gtMTAgeworICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLWxnLXB1c2gtOSB7CisgICAgbGVmdDogNzUlOworICB9CisgIC5jb2wtbGctcHVzaC04IHsKKyAgICBsZWZ0OiA2Ni42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTcgeworICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTYgeworICAgIGxlZnQ6IDUwJTsKKyAgfQorICAuY29sLWxnLXB1c2gtNSB7CisgICAgbGVmdDogNDEuNjY2NjY2NjY2NjY2NjclOworICB9CisgIC5jb2wtbGctcHVzaC00IHsKKyAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1sZy1wdXNoLTMgeworICAgIGxlZnQ6IDI1JTsKKyAgfQorICAuY29sLWxnLXB1c2gtMiB7CisgICAgbGVmdDogMTYuNjY2NjY2NjY2NjY2NjY0JTsKKyAgfQorICAuY29sLWxnLXB1c2gtMSB7CisgICAgbGVmdDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtbGctcHVzaC0wIHsKKyAgICBsZWZ0OiAwOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTEyIHsKKyAgICBtYXJnaW4tbGVmdDogMTAwJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0xMSB7CisgICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjY2NjY2JTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0xMCB7CisgICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMzMzM0JTsKKyAgfQorICAuY29sLWxnLW9mZnNldC05IHsKKyAgICBtYXJnaW4tbGVmdDogNzUlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTggeworICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY2NjY2NiU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtNyB7CisgICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMzMzMzNiU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtNiB7CisgICAgbWFyZ2luLWxlZnQ6IDUwJTsKKyAgfQorICAuY29sLWxnLW9mZnNldC01IHsKKyAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NjY2NjclOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTQgeworICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzMzMzMyU7CisgIH0KKyAgLmNvbC1sZy1vZmZzZXQtMyB7CisgICAgbWFyZ2luLWxlZnQ6IDI1JTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0yIHsKKyAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NjY2NjY0JTsKKyAgfQorICAuY29sLWxnLW9mZnNldC0xIHsKKyAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzMzMzMzIlOworICB9CisgIC5jb2wtbGctb2Zmc2V0LTAgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9Cit9CmRpZmYgLS1naXQgYS9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wYWdlX2FuYWx5dGljcy5qcyBiL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL3BhZ2VfYW5hbHl0aWNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2I0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wYWdlX2FuYWx5dGljcy5qcwpAQCAtMCwwICsxLDgzIEBACitmdW5jdGlvbiBnZXRPYmplY3RRdWVyeSgpIHsKKyAgICB2YXIgc2VsZWN0ZWROb2RlVHh0ID0gJCgnLmN1cnJlbnRPcmlnaW5hbE5vZGUnKS50ZXh0KCk7CisgICAgc2VsZWN0ZWROb2RlVHh0ID0gc2VsZWN0ZWROb2RlVHh0LnRyaW0oKTsKKyAgICBzZWxlY3RlZE5vZGVUeHQgPSBzZWxlY3RlZE5vZGVUeHQuc3BsaXQoJyAnKS5qb2luKCcnKTsvL3NlbGVjdGVkTm9kZVR4dC5yZXBsYWNlKCIgIiwgIiIpCisgICAgdmFyIHBhcmVudE5vZGVUeHQgPSAkKCcuc2VsZWN0ZWRNYWluTmF2JykudGV4dCgpOworICAgIHBhcmVudE5vZGVUeHQgPSBwYXJlbnROb2RlVHh0LnJlcGxhY2UoIi9cbiIsIiIpOworICAgIHBhcmVudE5vZGVUeHQgPSBwYXJlbnROb2RlVHh0LnJlcGxhY2UoIrsiLCIiKTsKKyAgICBwYXJlbnROb2RlVHh0ID0gcGFyZW50Tm9kZVR4dC50cmltKCk7CisgICAgaWYgKHBhcmVudE5vZGVUeHQubGVuZ3RoID4gMCAmJiBwYXJlbnROb2RlVHh0LmNoYXJBdChwYXJlbnROb2RlVHh0Lmxlbmd0aC0xKT09J3MnKSB7CisgICAgICAgICAgICBwYXJlbnROb2RlVHh0ID0gcGFyZW50Tm9kZVR4dC5zdWJzdHJpbmcoMCwgcGFyZW50Tm9kZVR4dC5sZW5ndGgtMSk7CisgICAgfQorCisgICAgaWYgKHBhcmVudE5vZGVUeHQgPT0gIlNsaWNlIikgeworICAgICAgICByZXR1cm4gIiZzbGljZT0iICsgc2VsZWN0ZWROb2RlVHh0OworICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZVR4dCA9PSAiU2l0ZSIpIHsKKyAgICAgICAgcmV0dXJuICImc2l0ZT0iICsgc2VsZWN0ZWROb2RlVHh0OworICAgIH0gZWxzZSBpZiAocGFyZW50Tm9kZVR4dCA9PSAiTm9kZSIpIHsKKyAgICAgICAgcmV0dXJuICImbm9kZT0iICsgc2VsZWN0ZWROb2RlVHh0OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKKworZnVuY3Rpb24gc2V0UGFnZVN0YXRJbnQobGFiZWxOYW1lLCB2YWx1ZU5hbWUsIGxlZ2VuZCwgdW5pdHMsIHZhbHVlKSB7CisgICAgJCgnLicrbGFiZWxOYW1lKS50ZXh0KGxlZ2VuZCkuc2hvdygpOworICAgICQoJy4nK3ZhbHVlTmFtZSkudGV4dChNYXRoLnJvdW5kKHZhbHVlKSt1bml0cykuc2hvdygpOworfQorCitmdW5jdGlvbiBzZXRQYWdlU3RhdEZsb2F0KGxhYmVsTmFtZSwgdmFsdWVOYW1lLCBsZWdlbmQsIHVuaXRzLCB2YWx1ZSwgZHApIHsKKyAgICAkKCcuJytsYWJlbE5hbWUpLnRleHQobGVnZW5kKS5zaG93KCk7CisgICAgJCgnLicrdmFsdWVOYW1lKS50ZXh0KE51bWJlcih2YWx1ZSkudG9GaXhlZChkcCkrdW5pdHMpLnNob3coKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gbm9kZSBjb3VudCBhbmQgYXZlcmFnZSBjcHUgdXRpbGl6YXRpb24KKworZnVuY3Rpb24gdXBkYXRlUGFnZUFuYWx5dGljc0RhdGEoc3VtbWFyeURhdGEpIHsKKyAgICB3aW5kb3cucGFnZUFuYWx5dGljc0RhdGEgPSBzdW1tYXJ5RGF0YTsKKyAgICBsYXN0Um93ID0gc3VtbWFyeURhdGEucm93cy5sZW5ndGgtMTsKKyAgICBzZXRQYWdlU3RhdEludCgibm9kZXNMYWJlbCIsICJub2Rlc1ZhbHVlIiwgIk5vZGUgQ291bnQiLCAiIiwgc3VtbWFyeURhdGEucm93c1tsYXN0Um93XVsiY291bnRfaG9zdG5hbWUiXSk7CisgICAgc2V0UGFnZVN0YXRJbnQoImNwdUxhYmVsIiwgImNwdVZhbHVlIiwgIkF2ZyBMb2FkIiwgIiUiLCBzdW1tYXJ5RGF0YS5yb3dzW2xhc3RSb3ddWyJhdmdfY3B1Il0pOworfQorCitmdW5jdGlvbiB1cGRhdGVQYWdlQW5hbHl0aWNzKCkgeworICAgICQuYWpheCh7CisgICAgdXJsIDogJy9hbmFseXRpY3MvYmlncXVlcnkvP2F2Zz0lY3B1JmNvdW50PSVob3N0bmFtZScgKyBnZXRPYmplY3RRdWVyeSgpLAorICAgIGRhdGFUeXBlIDogJ2pzb24nLAorICAgIHR5cGUgOiAnR0VUJywKKyAgICBzdWNjZXNzOiBmdW5jdGlvbihuZXdEYXRhKQorICAgIHsKKyAgICAgICAgdXBkYXRlUGFnZUFuYWx5dGljc0RhdGEobmV3RGF0YSk7CisgICAgfQorfSk7CisgICAgc2V0VGltZW91dCh1cGRhdGVQYWdlQW5hbHl0aWNzLCAzMDAwMCk7Cit9CisKK3NldFRpbWVvdXQodXBkYXRlUGFnZUFuYWx5dGljcywgNTAwMCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGJhbmR3aWR0aAorCitmdW5jdGlvbiB1cGRhdGVQYWdlQmFuZHdpZHRoRGF0YShzdW1tYXJ5RGF0YSkgeworICAgIHdpbmRvdy5wYWdlQmFuZERhdGEgPSBzdW1tYXJ5RGF0YTsKKyAgICBsYXN0Um93ID0gc3VtbWFyeURhdGEucm93cy5sZW5ndGgtMTsKKyAgICBzZXRQYWdlU3RhdEZsb2F0KCJiYW5kd2lkdGhMYWJlbCIsICJiYW5kd2lkdGhWYWx1ZSIsICJCYW5kd2lkdGgiLCAiR2JwcyIsIHN1bW1hcnlEYXRhLnJvd3NbbGFzdFJvd11bInN1bV9jb21wdXRlZF9ieXRlc19zZW50X2Rpdl9lbGFwc2VkIl0qOC4wLzEwMjQvMTAyNC8xMDI0LDIpOworfQorCitmdW5jdGlvbiB1cGRhdGVQYWdlQmFuZHdpZHRoKCkgeworICAgICQuYWpheCh7CisgICAgdXJsIDogJy9hbmFseXRpY3MvYmlncXVlcnkvP2NvbXB1dGVkPSVieXRlc19zZW50LyVlbGFwc2VkJyArIGdldE9iamVjdFF1ZXJ5KCksCisgICAgZGF0YVR5cGUgOiAnanNvbicsCisgICAgdHlwZSA6ICdHRVQnLAorICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKG5ld0RhdGEpCisgICAgeworICAgICAgICB1cGRhdGVQYWdlQmFuZHdpZHRoRGF0YShuZXdEYXRhKTsKKyAgICB9Cit9KTsKKyAgICBzZXRUaW1lb3V0KHVwZGF0ZVBhZ2VCYW5kd2lkdGgsIDMwMDAwKTsKK30KKworc2V0VGltZW91dCh1cGRhdGVQYWdlQmFuZHdpZHRoLCA1MDAwKTsKKwpkaWZmIC0tZ2l0IGEvcGxhbmV0c3RhY2svY29yZS9zdGF0aWMvcGxhbmV0c3RhY2suY3NzIGIvcGxhbmV0c3RhY2svY29yZS9zdGF0aWMvcGxhbmV0c3RhY2suY3NzCmluZGV4IGQ1OWFkYjcuLjc2YmMyM2IgMTAwNjQ0Ci0tLSBhL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL3BsYW5ldHN0YWNrLmNzcworKysgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wbGFuZXRzdGFjay5jc3MKQEAgLTEsMyArMSw2NCBAQAorLmFsaWduQ2VudGVyIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKKyAgICBhbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7Cit9Cit0YWJsZS5kYXRhVGFibGUgdHIub2RkIHsKK2JhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cit9Cit0YWJsZS5kYXRhVGFibGUgdHIub2RkIHRkLnNvcnRpbmdfMSB7CitiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OworfQordGFibGUuZGF0YVRhYmxlIHRyLmV2ZW4gdGQuc29ydGluZ18xIHsKK2JhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cit9Cit0YWJsZS5kYXRhVGFibGUgdGhlYWQgdGggZGl2LkRhdGFUYWJsZXNfc29ydF93cmFwcGVyIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKK30KKy5kYXNoYm9hcmQtaHBjLXNsaXZlciAudWktd2lkZ2V0LWhlYWRlciwgLmRhc2hib2FyZC1ocGMtc2xpdmVyIC51aS1kaWFsb2ctdGl0bGUsIC5kYXNoYm9hcmQtaHBjLXNsaXZlciAudWktZGlhbG9nLXRpdGxlYmFyeworfQorLnVpLXdpZGdldC1vdmVybGF5IHsKKyAgICBiYWNrZ3JvdW5kOiBibGFjayAhaW1wb3J0YW50OworfQorLnVpLWNvcm5lci1hbGwgeworYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7Citib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7Cit9CisKKyNzdWl0LWNlbnRlciB7CisgIG1pbi13aWR0aDogOTc3cHggIWltcG9ydGFudDsKK30KKyNtaW5EYXNoYm9hcmQgeworICBtaW4td2lkdGg6NjI1cHg7CisgIGRpc3BsYXk6aW5saW5lOworICBmbG9hdDogcmlnaHQ7Cit9CisudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdHsKK2JhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKK2JvcmRlci10b3A6IDBweCAhaW1wb3J0YW50OworYm9yZGVyLWxlZnQ6IDBweCAhaW1wb3J0YW50OworYm9yZGVyLXJpZ2h0OiAwcHggIWltcG9ydGFudDsKK30KKy51aS13aWRnZXQtaGVhZGVyIHsKK2JhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKK2JvcmRlci10b3A6IDBweCAhaW1wb3J0YW50OworYm9yZGVyLWxlZnQ6IDBweCAhaW1wb3J0YW50OworYm9yZGVyLXJpZ2h0OiAwcHggIWltcG9ydGFudDsKK30KKyNzdWl0X2Zvcm1fdGFicyB7Citib3JkZXItYm90dG9tOiAxcHggc29saWQgI0I1RDFFQTsKK2JvcmRlci1ib3R0b20td2lkdGg6IDFweDsKK2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOworYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKDE4MSwgMjA5LCAyMzQpOworY29sb3I6IzEwNUU5RTsKK30KKyN0YWJzIHsKK2ZvbnQtc2l6ZTogMTJweDsKK2JvcmRlcjogMHB4OworfQorLnVpLXN0YXRlLWRlZmF1bHQgYSwgLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLCAudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQgeworY29sb3I6ICMxMDVFOUUgOworfQorCiAucmVxdWlyZWQ6YWZ0ZXIge2NvbG9yOiByZWQgISBpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMThweCB9CiAjLmJ0bi1zdWNjZXNzIHtjb2xvcjpibGFja30KICNzdWl0LWNlbnRlciB7CkBAIC0yNSw2ICs4Niw3IEBACiAvKkZvciBpbmNyZWFzaW5nIHRoZSBoZWFkZXIgaGVpZ2h0Ki8KIC5oZWFkZXIgewogaGVpZ2h0OiA5MHB4OworbWluLXdpZHRoOiAxMzIxcHg7CiB9CiAKIC8qRm9yIGNoYW5naW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBsZWZ0IHNpZGUgbmF2aWdhdGlvbiBsaXN0IGl0ZW1zKi8KQEAgLTQ4OCwxMiArNTUwLDE1IEBACiAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMDsqLwogfQogCi0uaWNvbi1ob21lICwuaWNvbi1kZXBsb3ltZW50ICwuaWNvbi1zaXRlICwuaWNvbi1zbGljZSAsLmljb24tdXNlciwgLmljb24tcmVzZXJ2YXRpb257CisuaWNvbi1ob21lICwuaWNvbi1kZXBsb3ltZW50ICwuaWNvbi1zaXRlICwuaWNvbi1zbGljZSAsLmljb24tdXNlciwgLmljb24tcmVzZXJ2YXRpb24sIC5pY29uLWFwcHsKIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyOwogd2lkdGg6MjJweDsKIGhlaWdodDoyMnB4OwkKIH0KIAorLmljb24tYXBwIHsKK2JhY2tncm91bmQtaW1hZ2U6IHVybCgib3BlbmNsb3VkQXBwLnBuZyIpOworfQogLmljb24taG9tZSB7CiBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIkhvbWUucG5nIik7CiB9CmRpZmYgLS1naXQgYS9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wbGFuZXRzdGFja19ncmFwaHMuanMgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wbGFuZXRzdGFja19ncmFwaHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2MmM0YgotLS0gL2Rldi9udWxsCisrKyBiL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL3BsYW5ldHN0YWNrX2dyYXBocy5qcwpAQCAtMCwwICsxLDEzOSBAQAorZ29vZ2xlLmxvYWQoJ3Zpc3VhbGl6YXRpb24nLCAnMScsIHsncGFja2FnZXMnIDogWydjb250cm9scycsJ3RhYmxlJywnY29yZWNoYXJ0JywnZ2VvY2hhcnQnXX0pOworCitmdW5jdGlvbiByZW5kZXJDaGFydEpzb24oanNvbmRhdGEsIHlGaWVsZCwgeEZpZWxkLCBsZWdlbmQpIHsKKyAgICAkKCcjZ3JhcGgnKS5lbXB0eSgpOworICAgICQoJyNjaGFydHNNb2RhbCcpLm1vZGFsKCdzaG93Jyk7CisgICAgJCgnLm1vZGFsLWJvZHknKS5zY3JvbGxUb3AoMCk7CisKKyAgICB2YXIgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKKyAgICBkYXRhLmFkZENvbHVtbigibnVtYmVyIiwgIkRhdGUiKTsKKyAgICBkYXRhLmFkZENvbHVtbigibnVtYmVyIiwgIk5vZGVDb3VudCIpOworCisgICAgdmFyIGFyciA9IFtdOworICAgIGpzb25kYXRhLnJvd3MuZm9yRWFjaChmdW5jdGlvbihkKSB7CisgICAgICAgIGFyci5wdXNoKFsgK2RbeUZpZWxkXSwgK2RbeEZpZWxkXSBdKTsKKyAgICB9KTsKKworICAgIGNvbnNvbGUubG9nKGFycik7CisKKyAgICBkYXRhLmFkZFJvd3MoYXJyKTsKKworICAgIHZhciBsaW5lQ2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ2hhcnRXcmFwcGVyKHsKKyAgICAgICAgICAnY2hhcnRUeXBlJzogJ0xpbmVDaGFydCcsCisgICAgICAgICAgJ2NvbnRhaW5lcklkJzogJ2dyYXBoJywKKyAgICAgICAgICAnb3B0aW9ucyc6IHsKKyAgICAgICAgICAgICd3aWR0aCc6IDUyMCwKKyAgICAgICAgICAgICdoZWlnaHQnOiAzMDAsCisgICAgICAgICAgICAndGl0bGUnOiAnTmV0d29yay13aWRlIHVzYWdlJywKKwkJCSdwYWdlcyc6IHRydWUsCisJCQknbnVtUm93cyc6IDkKKyAgICAgICAgICB9LAorICAgICAgICAgICd2aWV3Jzogeydjb2x1bW5zJzogWzAsIDFdfQorICAgICAgICB9KTsKKyAgICAgICAgbGluZUNoYXJ0LnNldERhdGFUYWJsZShkYXRhKTsKKyAgICAgICAgbGluZUNoYXJ0LmRyYXcoKTsKK30KKworZnVuY3Rpb24gcmVuZGVyQ2hhcnQob3JpZ1F1ZXJ5LCB5Q29sdW1uLCB4Q29sdW1uKSB7CisgICAgJCgnI2dyYXBoJykuZW1wdHkoKTsKKyAgICAkKCcjY2hhcnRzTW9kYWwnKS5tb2RhbCgnc2hvdycpOworICAgICQoJy5tb2RhbC1ib2R5Jykuc2Nyb2xsVG9wKDApCisKKyAgICB2YXIgcXVlcnlTdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQob3JpZ1F1ZXJ5KTsKKyAgICB2YXIgc2VydmVyUGFydCA9ICJodHRwOi8vY2xvdWQtc2NydXRpbnkuYXBwc3BvdC5jb20vY29tbWFuZD9hY3Rpb249c2VuZF9xdWVyeSZmb3JjZT1Db2x1bW5DaGFydCZxPSI7CisgICAgdmFyIGRhdGFTb3VyY2VVcmwgPSBzZXJ2ZXJQYXJ0ICsgcXVlcnlTdHJpbmc7CisKKyAgICAvL3ZhciBkYXRhU291cmNlVXJsID0gImh0dHA6Ly9ub2RlMzYucHJpbmNldG9uLnZpY2NpLm9yZzo4MDAwL2FuYWx5dGljcy9iaWdxdWVyeS8/YXZnPSUyNWNwdSZjb3VudD0lMjVob3N0bmFtZSZmb3JtYXQ9cmF3IjsKKworICAgIHZhciBxdWVyeSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5RdWVyeShkYXRhU291cmNlVXJsKQorICAgIHF1ZXJ5ICYmIHF1ZXJ5LmFib3J0KCk7CisgICAgY29uc29sZS5sb2coInF1ZXJ5LnNlbmQiKQorICAgIHF1ZXJ5LnNlbmQoZnVuY3Rpb24ocmVzcG9uc2UpIHtoYW5kbGVSZXNwb25zZV9wc2cocmVzcG9uc2UsIHlDb2x1bW4sIHhDb2x1bW4pO30pOworICAgIGNvbnNvbGUubG9nKCJxdWVyeS5zZW50IikKK30KKworLy8gTk9URTogYXBwZW5kZWQgX3BzZyB0byBzaG93TGluZSgpIGFuZCBoYW5kbGVSZXNwb25zZSgpIHRvIHByZXZlbnQgY29uZmxpY3QKKy8vICAgICAgIHdpdGggU2FwYW4ncyBhbmFseXRpY3MgcGFnZS4KKworZnVuY3Rpb24gc2hvd0xpbmVfcHNnKGR0KSB7CisgICAgY29uc29sZS5sb2coInNob3dsaW5lIikKKyAgICB2YXIgbGluZUNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNoYXJ0V3JhcHBlcih7CisgICAgICAgICAgJ2NoYXJ0VHlwZSc6ICdMaW5lQ2hhcnQnLAorICAgICAgICAgICdjb250YWluZXJJZCc6ICdncmFwaCcsCisgICAgICAgICAgJ29wdGlvbnMnOiB7CisgICAgICAgICAgICAnd2lkdGgnOiA1MjAsCisgICAgICAgICAgICAnaGVpZ2h0JzogMzAwLAorICAgICAgICAgICAgJ3RpdGxlJzogJ05ldHdvcmstd2lkZSB1c2FnZScsCisJCQkncGFnZXMnOiB0cnVlLAorCQkJJ251bVJvd3MnOiA5CisgICAgICAgICAgfSwKKyAgICAgICAgICAndmlldyc6IHsnY29sdW1ucyc6IFswLCAxXX0KKyAgICAgICAgfSk7CisgICAgICAgIGxpbmVDaGFydC5zZXREYXRhVGFibGUoZHQpOworICAgICAgICBsaW5lQ2hhcnQuZHJhdygpOworfQorCitmdW5jdGlvbiBoYW5kbGVSZXNwb25zZV9wc2cocmVzcG9uc2UsIHlDb2x1bW4sIHhDb2x1bW4pIHsKKyAgICBjb25zb2xlLmxvZygiaGFuZGxlUmVzcG9uc2UiKQorCisgICAgdmFyIHN1cHBvcnRlZENsYXNzZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICdUYWJsZSc6Z29vZ2xlLnZpc3VhbGl6YXRpb24uVGFibGUsCisgICAgICAgICAgICAgICAgICAgICdMaW5lQ2hhcnQnOmdvb2dsZS52aXN1YWxpemF0aW9uLkxpbmVDaGFydCwKKyAgICAgICAgICAgICAgICAgICAgJ1NjYXR0ZXJDaGFydCc6Z29vZ2xlLnZpc3VhbGl6YXRpb24uU2NhdHRlckNoYXJ0LAorICAgICAgICAgICAgICAgICAgICAnQ29sdW1uQ2hhcnQnOmdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0LAorICAgICAgICAgICAgICAgICAgICAnR2VvQ2hhcnQnOmdvb2dsZS52aXN1YWxpemF0aW9uLkdlb0NoYXJ0LAorICAgICAgICAgICAgICAgICAgICAnUGllQ2hhcnQnOmdvb2dsZS52aXN1YWxpemF0aW9uLlBpZUNoYXJ0LAorICAgICAgICAgICAgICAgICAgICAnSGlzdG9ncmFtJzpnb29nbGUudmlzdWFsaXphdGlvbi5IaXN0b2dyYW19OworCisgICAgdmFyIHByb3h5ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNoYXJ0V3JhcHBlcih7CisgICAgICAnY2hhcnRUeXBlJzogJ1RhYmxlJywKKyAgICAgICdjb250YWluZXJJZCc6ICdncmFwaF93b3JrJywKKyAgICAgICdvcHRpb25zJzogeworICAgICAgICAnd2lkdGgnOiA4MDAsCisgICAgICAgICdoZWlnaHQnOiAzMDAsCisgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOjUsCisgICAgICAgICAgICAgICAgICAgIHBhZ2U6J2VuYWJsZScsCisgICAgICAgICdsZWdlbmQnOiAnbm9uZScsCisgICAgICAgICd0aXRsZSc6ICdOb2RlcycKKyAgICAgIH0sCisgICAgICAndmlldyc6IHsnY29sdW1ucyc6IFswLDFdfQorICAgIH0pOworCisgICAgZ29vZ2xlLnZpc3VhbGl6YXRpb24uZXZlbnRzLmFkZExpc3RlbmVyKHByb3h5LCAncmVhZHknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8vIDAgLSB0aW1lIDEgLSBjaXR5IDIgLSBub2RlIDMgLSBzaXRlIDQgLSBjcHUgNSAtIGJ5dGVzCisgICAgICAgIHZhciBkdCA9IHByb3h5LmdldERhdGFUYWJsZSgpOworICAgICAgICB2YXIgZ3JvdXBlZERhdGExID0gZ29vZ2xlLnZpc3VhbGl6YXRpb24uZGF0YS5ncm91cChkdCwgW3lDb2x1bW5dLCBbeworICAgICAgICAgICAgY29sdW1uOiB4Q29sdW1uLAorICAgICAgICAgICAgdHlwZTogJ251bWJlcicsCisgICAgICAgICAgICBsYWJlbDogZHQuZ2V0Q29sdW1uTGFiZWwoeENvbHVtbiksCisgICAgICAgICAgICBhZ2dyZWdhdGlvbjogZ29vZ2xlLnZpc3VhbGl6YXRpb24uZGF0YS5zdW19XSk7CisKKyAgICAgICAgc2hvd0xpbmVfcHNnKGdyb3VwZWREYXRhMSk7CisKKyAgICAgICAgY29uc29sZS5sb2coeENvbHVtbik7CisgICAgfSk7CisKKyAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5nZXRSZWFzb25zKCkpOworICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLmdldERhdGFUYWJsZSgpKTsKKyAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5nZXREZXRhaWxlZE1lc3NhZ2UoKSk7CisgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZ2V0TWVzc2FnZSgpKTsKKworICAgIHByb3h5LnNldERhdGFUYWJsZShyZXNwb25zZS5nZXREYXRhVGFibGUoKSk7CisKKyAgICBwcm94eS5kcmF3KCk7Cit9CisKKyQoJy5ub2Rlc0xhYmVsLCAubm9kZXNWYWx1ZScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIganNvbkRhdGEgPSB3aW5kb3cucGFnZUFuYWx5dGljc0RhdGE7CisgICAgICAgIHJlbmRlckNoYXJ0KGpzb25EYXRhLnF1ZXJ5LCAwLCAyKTsKKyAgICAgICAgLy9yZW5kZXJDaGFydEpzb24oanNvbkRhdGEsICJNaW51dGVUaW1lIiwgImNvdW50X2hvc3RuYW1lIiwgIk5vZGUgQ291bnQiKTsKK30pOworCiskKCcuY3B1TGFiZWwsIC5jcHVWYWx1ZScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIganNvbkRhdGEgPSB3aW5kb3cucGFnZUFuYWx5dGljc0RhdGE7CisgICAgICAgIHJlbmRlckNoYXJ0KGpzb25EYXRhLnF1ZXJ5LDAsIDEpOworfSk7CiskKCcuYmFuZHdpZHRoTGFiZWwsIC5iYW5kd2lkdGhWYWx1ZScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIganNvbkRhdGEgPSB3aW5kb3cucGFnZUJhbmREYXRhOworICAgICAgICByZW5kZXJDaGFydChqc29uRGF0YS5xdWVyeSwgMCwgMSk7Cit9KTsKZGlmZiAtLWdpdCBhL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL3BsYW5ldHN0YWNrX2dyYXBoc19vbGQuanMgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wbGFuZXRzdGFja19ncmFwaHNfb2xkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmFmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGFuZXRzdGFjay9jb3JlL3N0YXRpYy9wbGFuZXRzdGFja19ncmFwaHNfb2xkLmpzCkBAIC0wLDAgKzEsODkgQEAKKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworCitmdW5jdGlvbiByZW5kZXJDaGFydChqc29uRGF0YSwgeUZpZWxkLCB4RmllbGQsIGxlZ2VuZCkgeworICAgICQoJyNncmFwaCcpLmVtcHR5KCk7CisgICAgJCgnI2NoYXJ0c01vZGFsJykubW9kYWwoJ3Nob3cnKTsKKyAgICAkKCcubW9kYWwtYm9keScpLnNjcm9sbFRvcCgwKQorICAgIHZhciBtYXJnaW4gPSB7dG9wOiAwLCByaWdodDogMTAwLCBib3R0b206IDEwMCwgbGVmdDogMTc1fSwKKyAgICB3aWR0aCA9IDUyMCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0LAorICAgIGhlaWdodCA9IDMwMCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tOworCisgICAgdmFyIHBhcnNlRGF0ZSA9IGQzLnRpbWUuZm9ybWF0KCIlWS0lbS0lbS0lSC0lTSIpLnBhcnNlOworCisgICAgdmFyIHggPSBkMy50aW1lLnNjYWxlKCkKKyAgICAucmFuZ2UoWzAsIHdpZHRoXSk7CisKKyAgICB2YXIgeSA9IGQzLnNjYWxlLmxpbmVhcigpCisgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTsKKworICAgIHZhciB4QXhpcyA9IGQzLnN2Zy5heGlzKCkKKyAgICAuc2NhbGUoeCkKKyAgICAudGlja3MoZDMudGltZS5taW51dGVzLCAxNSkKKyAgICAub3JpZW50KCJib3R0b20iKTsKKworICAgIHZhciB5QXhpcyA9IGQzLnN2Zy5heGlzKCkKKyAgICAuc2NhbGUoeSkKKyAgICAudGlja3MoNCkKKyAgICAub3JpZW50KCJsZWZ0Iik7CisKKyAgICB2YXIgbGluZSA9IGQzLnN2Zy5saW5lKCkKKyAgICAueChmdW5jdGlvbihkKSB7IHJldHVybiB4KGQuZGF0ZSk7IH0pCisgICAgLnkoZnVuY3Rpb24oZCkgeyByZXR1cm4geShkLnZhbHVlKTsgfSk7CisKKyAgICB2YXIgc3ZnID0gZDMuc2VsZWN0KCIjZ3JhcGgiKS5hcHBlbmQoInN2ZyIpCisgICAgLmF0dHIoIndpZHRoIiwgd2lkdGggKyBtYXJnaW4ubGVmdCArIG1hcmdpbi5yaWdodCkKKyAgICAuYXR0cigiaGVpZ2h0IiwgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pCisgICAgLmFwcGVuZCgiZyIpCisgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIG1hcmdpbi5sZWZ0ICsgIiwiICsgbWFyZ2luLnRvcCArICIpIik7CisKKyAgICBkYXRhID0ganNvbkRhdGEucm93czsKKyAgICAkKCcjY2hhcnRIZWFkaW5nJykudGV4dChsZWdlbmQpOworICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkKSB7CisgICAgICAgICAgICBkLmRhdGUgPSBuZXcgRGF0ZShkW3lGaWVsZF0qMTAwMCk7CisgICAgICAgICAgICBkLnZhbHVlID0gK2RbeEZpZWxkXTsKKyAgICAgICAgICAgIH0pOworCisgICAgeC5kb21haW4oZDMuZXh0ZW50KGRhdGEsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuZGF0ZTsgfSkpOworCisgICAgdmFyIGUgPSBkMy5leHRlbnQoZGF0YSwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC52YWx1ZTt9KTsKKyAgICBlID0gW2VbMF0tMSxlWzFdKzFdOworCisgICAgeS5kb21haW4oZSk7CisKKyAgICBzdmcuYXBwZW5kKCJnIikKKyAgICAuYXR0cigiY2xhc3MiLCAieCBheGlzIikKKyAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCIgKyBoZWlnaHQgKyAiKSIpCisgICAgLmF0dHIoIngiLCA1KQorICAgIC5jYWxsKHhBeGlzKTsKKworICAgIHN2Zy5hcHBlbmQoImciKQorICAgIC5hdHRyKCJjbGFzcyIsICJ5IGF4aXMiKQorICAgIC5jYWxsKHlBeGlzKQorICAgIC5hcHBlbmQoInRleHQiKQorICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAicm90YXRlKC05MCkiKQorICAgIC5hdHRyKCJ5IiwgNikKKyAgICAuYXR0cigiZHkiLCAiLjcxZW0iKQorICAgIC5zdHlsZSgidGV4dC1hbmNob3IiLCAiZW5kIikKKyAgICAudGV4dChsZWdlbmQpCisgICAgLmF0dHIoImNsYXNzIiwgImxlZ2VuZCIpOworCisgICAgc3ZnLmFwcGVuZCgicGF0aCIpCisgICAgLmRhdHVtKGRhdGEpCisgICAgLmF0dHIoImNsYXNzIiwgImxpbmUiKQorICAgIC5hdHRyKCJkIiwgbGluZSk7Cit9CisKKyQoJy5ub2Rlc0xhYmVsLCAubm9kZXNWYWx1ZScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIganNvbkRhdGEgPSB3aW5kb3cucGFnZUFuYWx5dGljc0RhdGE7CisgICAgICAgIHJlbmRlckNoYXJ0KGpzb25EYXRhLCAiTWludXRlVGltZSIsICJjb3VudF9ob3N0bmFtZSIsICJOb2RlIENvdW50Iik7Cit9KTsKKyQoJy5jcHVMYWJlbCwgLmNwdVZhbHVlJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBqc29uRGF0YSA9IHdpbmRvdy5wYWdlQW5hbHl0aWNzRGF0YTsKKyAgICAgICAgcmVuZGVyQ2hhcnQoanNvbkRhdGEsICJNaW51dGVUaW1lIiwgImF2Z19jcHUiLCAiQXZlcmFnZSBDcHUiKTsKK30pOworJCgnLmJhbmR3aWR0aExhYmVsLCAuYmFuZHdpZHRoVmFsdWUnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGpzb25EYXRhID0gd2luZG93LnBhZ2VCYW5kRGF0YTsKKyAgICAgICAgcmVuZGVyQ2hhcnQoanNvbkRhdGEsICJNaW51dGVUaW1lIiwgInN1bV9jb21wdXRlZF9ieXRlc19zZW50X2Rpdl9lbGFwc2VkIiwgIkJhbmR3aWR0aCIpOworfSk7CisKK30pCg==