MzcgbmV3IGNvbW1pdHMgaW4gZ2FsYXh5LWNlbnRyYWw6CgpodHRwczovL2JpdGJ1Y2tldC5vcmcv Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNzQwZDc1OGMyMjg1LwpDaGFuZ2VzZXQ6ICAg NzQwZDc1OGMyMjg1ClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAgICAyMDE0 LTEyLTE3IDIwOjI2OjQzKzAwOjAwClN1bW1hcnk6ICAgICBJbml0aWFsIGNvbW1pdCBmb3IgY2hh bmdlcyB0byBtYW5hZ2VyczogaW1wbGVtZW50IGJhc2UgTW9kZWxNYT0KbmFnZXIsIFNlcmlhbGl6 ZXIsIGFuZCBEZXNlcmlhbGl6ZXI7IGluY29ycG9yYXRlIGludG8gaGRhcyBhbmQgaGlzdG9yaWVz IG1hPQpuYWdlcnM7IGltcGxlbWVudCB1c2VycywgZGF0YXNldHMgbmFiYWdlcnM7IHJlLXdvcmsg aGlzdG9yaWVzIGFwaSB0byB1c2UgdGg9CmUgbWFuYWdlcnMgYmV0dGVyOyB1bml0IHRlc3RzIGZv ciBtYW5hZ2Vyczsgc2VhcmNoIGFuZCBkZXN0cm95IG9uIFVzZXNIaXN0bz0KcnlNaXhpbjsgbWlu b3IgZml4ZXMgdG8gbGlzdC1wYW5lbApBZmZlY3RlZCAjOiAgMjkgZmlsZXMKCmRpZmYgLXIgY2M3 MTQ3NTE0ZDc3Nzk5OTg5Nzc3ZmQyMWFhODE4ZTQzZDlmM2QzOSAtciA3NDBkNzU4YzIyODViZWMx NDBlNjkwMT0KMDI1ZTkwNmY1MGEwZDdhMmEgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9saXN0 L2xpc3QtcGFuZWwuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9saXN0L2xpc3Qt cGFuZWwuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9saXN0L2xpc3QtcGFuZWwu anMKQEAgLTg3MiwxMCArODcyLDEwIEBACiAgICAgICAgIHRoaXMubG9nKCB0aGlzICsgJy5fc2V0 VXBNb2RlbExpc3RlbmVycycsIHRoaXMubW9kZWwgKTsKICAgICAgICAgLy8gYm91bmNlIG1vZGVs IGVycm9ycyB1cCB0byB0aGUgcGFuZWwKICAgICAgICAgdGhpcy5tb2RlbC5vbiggJ2Vycm9yJywg ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIC8vVE9ETzogbmFtZXNwYWNlPwotICAgICAgICAgICAg Ly92YXIgYXJncyA9M0QgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMCAp OwotICAgICAgICAgICAgLy9hcmdzWzBdID0zRCAnbW9kZWw6JyArIGFyZ3NbMF07Ci0gICAgICAg ICAgICB0aGlzLnRyaWdnZXIuYXBwbHkoIHBhbmVsLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAg IHZhciBhcmdzID0zRCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJndW1lbnRzLCAwICk7 CisgICAgICAgICAgICAvL2FyZ3MudW5zaGlmdCggJ21vZGVsOmVycm9yJyApOworICAgICAgICAg ICAgYXJncy51bnNoaWZ0KCAnZXJyb3InICk7CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIuYXBw bHkoIHRoaXMsIGFyZ3MgKTsKICAgICAgICAgfSwgdGhpcyApOwogICAgICAgICByZXR1cm4gdGhp czsKICAgICB9LAoKZGlmZiAtciBjYzcxNDc1MTRkNzc3OTk5ODk3NzdmZDIxYWE4MThlNDNkOWYz ZDM5IC1yIDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxPQowMjVlOTA2ZjUwYTBkN2EyYSBsaWIvZ2Fs YXh5L21hbmFnZXJzL2Jhc2UucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5Cisr KyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQpAQCAtMSwyMSArMSwyMCBAQAotZnJvbSBn YWxheHkgaW1wb3J0IGV4Y2VwdGlvbnMKK2ltcG9ydCByZQorCitpbXBvcnQgcGtnX3Jlc291cmNl cworcGtnX3Jlc291cmNlcy5yZXF1aXJlKCAiU1FMQWxjaGVteSA+PTNEIDAuNCIgKQoraW1wb3J0 IHNxbGFsY2hlbXkKPTIwCiBmcm9tIGdhbGF4eSBpbXBvcnQgbW9kZWwKK2Zyb20gZ2FsYXh5IGlt cG9ydCBleGNlcHRpb25zCiBmcm9tIGdhbGF4eS5tb2RlbCBpbXBvcnQgdG9vbF9zaGVkX2luc3Rh bGwKK2Zyb20gZ2FsYXh5LnV0aWwgaW1wb3J0IHNhbml0aXplX2h0bWwKPTIwCj0yMAogaW1wb3J0 IGxvZ2dpbmcKIGxvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCj0yMAot Y2xhc3MgTW9kZWxNYW5hZ2VyKCBvYmplY3QgKToKLSAgICBwYXNzCi0KLQotY2xhc3MgTW9kZWxT ZXJpYWxpemVyKCBvYmplY3QgKToKLSAgICBwYXNzCi0KLQorIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGRlZiBzZWN1 cml0eV9jaGVjayggdHJhbnMsIGl0ZW0sIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBjaGVja19h Y2Nlc3NpYmxlPQo9M0RGYWxzZSApOgogICAgICIiIiBTZWN1cml0eSBjaGVja3MgZm9yIGFuIGl0 ZW06IGNoZWNrcyBpZiAoYSkgdXNlciBvd25zIGl0ZW0gb3IgKGIpIGk9CnRlbQogICAgIGlzIGFj Y2Vzc2libGUgdG8gdXNlci4gVGhpcyBpcyBhIGdlbmVyaWMgbWV0aG9kIGZvciBkZWFsaW5nIHdp dGggb2JqZWM9CnRzCkBAIC0xMTgsMyArMTE3LDU0MiBAQAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIGNsYXNzX25hbWUsIGdldGF0dHIoIGk9CnRl bSwgJ25hbWUnLCBpZCApICksIHR5cGU9M0Qid2FybmluZyIgKQogICAgIHJldHVybiBpdGVtCj0y MAorCisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9Cj0zRD0zRD0zRAorY2xhc3MgTW9kZWxNYW5hZ2VyKCBvYmplY3QgKToKKyAgICBtb2Rl bF9jbGFzcyA9M0Qgb2JqZWN0CisgICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgTm9uZQorICAgIGZv cmVpZ25fa2V5X25hbWUgPTNEIE5vbmUKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6 CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKCBzZWxmLm1vZGVsX2NsYXNzLCBvYmplY3QgKSwg KAorICAgICAgICAgICAgIm1vZGVsIGNsYXNzIG11c3QgYmUgc2V0IGZvciAlcyIgJSggc2VsZi5f X2NsYXNzX18uX19uYW1lX18gKSApCisgICAgICAgIHNlbGYubW9kZWxfY2xhc3NfbmFtZSA9M0Qg c2VsZi5tb2RlbF9jbGFzcy5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgYXNzZXJ0IGlzaW5z dGFuY2UoIHNlbGYuZGVmYXVsdF9vcmRlcl9ieSwgdHVwbGUgKSwgKAorICAgICAgICAgICAgImRl ZmF1bHRfb3JkZXJfYnkgZm9yICVzIG11c3QgYmUgYSB0dXBsZSIgJSggc2VsZi5fX2NsYXNzX18u X189Cm5hbWVfXyApICkKKworICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCisKKyAgICAjTk9URTog YXQgdGhpcyBsYXllciwgYWxsIGlkcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZGVjb2RlZCBhbmQgaW4g aW50IGZvPQpybQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIGdldC9yZWFkL3F1ZXJ5CisgICAg ZGVmIHF1ZXJ5KCBzZWxmLCB0cmFucywgZWFnZXJsb2Fkcz0zRFRydWUsIGZpbHRlcnM9M0ROb25l LCBvcmRlcl9ieT0zRD0KTm9uZSwgbGltaXQ9M0ROb25lLCBvZmZzZXQ9M0ROb25lLCAqKmt3YXJn cyApOgorICAgICAgICAjcHJpbnQgJ3F1ZXJ5OicsIGVhZ2VybG9hZHMsIGZpbHRlcnMsIG9yZGVy X2J5LCBsaW1pdCwgb2Zmc2V0LCBrd2E9CnJncworICAgICAgICBxdWVyeSA9M0QgdHJhbnMuc2Ff c2Vzc2lvbi5xdWVyeSggc2VsZi5tb2RlbF9jbGFzcyApCisKKyAgICAgICAgIyBqb2luZWQgdGFi bGUgbG9hZGluZworICAgICAgICBpZiBlYWdlcmxvYWRzIGlzIEZhbHNlOgorICAgICAgICAgICAg cXVlcnkgPTNEIHF1ZXJ5LmVuYWJsZV9lYWdlcmxvYWRzKCBGYWxzZSApCisKKyNUT0RPOiBpZiBu b24tb3JtIGZpbHRlcnMgYXJlIHRoZSBvbmx5IG9wdGlvbiwgaGVyZSBpcyB3aGVyZSB0aGV5J2Qg Z28KKyAgICAgICAgcXVlcnkgPTNEIHNlbGYuX2FwcGx5X2ZpbHRlcnMoIHF1ZXJ5LCBmaWx0ZXJz ICkKKyAgICAgICAgcXVlcnkgPTNEIHNlbGYuX2FwcGx5X29yZGVyX2J5X2xpbWl0X29mZnNldCgg cXVlcnksIG9yZGVyX2J5LCBsaW1pPQp0LCBvZmZzZXQgKQorICAgICAgICByZXR1cm4gcXVlcnkK KworICAgIGRlZiBfYXBwbHlfZmlsdGVycyggc2VsZiwgcXVlcnksIGZpbHRlcnMgKToKKyAgICAg ICAgaWYgZmlsdGVycyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5CisKKyAgICAg ICAgaWYgbm90IGlzaW5zdGFuY2UoIGZpbHRlcnMsIGxpc3QgKToKKyAgICAgICAgICAgIGZpbHRl cnMgPTNEIFsgZmlsdGVycyBdCisgICAgICAgICNub3RlOiBpbXBsaWNpdCBBTkQKKyAgICAgICAg Zm9yIGZpbHRlciBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRl ciggZmlsdGVyICkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5CisKKyAgICBkZWYgX211bmdlX2ZpbHRl cnMoIHNlbGYsIGZpbHRlcnNBLCBmaWx0ZXJzQiApOgorICAgICAgICAjIC4uLiB3aGljaCBzb3Vu ZHMgbGlrZSBhIGV1cGhhbWlzbSBmb3Igc29tZXRoaW5nCisgICAgICAgIGZpbmFsX2ZpbHRlcnMg PTNEIFsgc2VsZi5tb2RlbF9jbGFzcy5pZCA9M0Q9M0QgaWQgXQorICAgICAgICBpZiBmaWx0ZXJz QSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnNCCisgICAgICAgIGlmIGZpbHRl cnNCIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyc0EKKyAgICAgICAgaWYgbm90 IGlzaW5zdGFuY2UoIGZpbHRlcnNBLCBsaXN0ICk6CisgICAgICAgICAgICBmaWx0ZXJzQSA9M0Qg WyBmaWx0ZXJzQSBdCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKCBmaWx0ZXJzQiwgbGlzdCAp OgorICAgICAgICAgICAgZmlsdGVyc0IgPTNEIFsgZmlsdGVyc0IgXQorICAgICAgICByZXR1cm4g ZmlsdGVyc0EgKyBmaWx0ZXJzQgorCisgICAgZGVmIF9hcHBseV9vcmRlcl9ieV9saW1pdF9vZmZz ZXQoIHNlbGYsIHF1ZXJ5LCBvcmRlcl9ieSwgbGltaXQsIG9mZnNldD0KICk6CisgICAgICAgIHF1 ZXJ5ID0zRCBzZWxmLl9hcHBseV9vcmRlcl9ieSggcXVlcnksIG9yZGVyX2J5ICkKKyAgICAgICAg cmV0dXJuIHNlbGYuX2FwcGx5X2xpbWl0X29mZnNldCggcXVlcnksIGxpbWl0LCBvZmZzZXQgKQor CisgICAgZGVmIF9hcHBseV9vcmRlcl9ieSggc2VsZiwgcXVlcnksIG9yZGVyX2J5ICk6CisgICAg ICAgIGlmIG9yZGVyX2J5IGlzIE5vbmU6CisgICAgICAgICAgICAjVE9ETzogYWxsb3cgbm9uLXR1 cGxlIGRlZmF1bHRfb3JkZXJfYnkKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5vcmRlcl9ieSgg KnNlbGYuZGVmYXVsdF9vcmRlcl9ieSApCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSggb3JkZXJf YnksICggbGlzdCwgdHVwbGUgKSApOgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVyX2J5 KCAqb3JkZXJfYnkgKQorICAgICAgICByZXR1cm4gcXVlcnkub3JkZXJfYnkoIG9yZGVyX2J5ICkK KworICAgIGRlZiBfYXBwbHlfbGltaXRfb2Zmc2V0KCBzZWxmLCBxdWVyeSwgbGltaXQsIG9mZnNl dCApOgorICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHF1ZXJ5ID0z RCBxdWVyeS5saW1pdCggbGltaXQgKQorICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6Cisg ICAgICAgICAgICBxdWVyeSA9M0QgcXVlcnkub2Zmc2V0KCBvZmZzZXQgKQorICAgICAgICByZXR1 cm4gcXVlcnkKKworICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGNvbW1vbiBxdWVyaWVzCisjVE9E TzogbmVlZGVkPworICAgIGRlZiBvbmUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgorICAgICAg ICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5xdWVyeSggdHJhbnMsICoqa3dhcmdzICku b25lKCkKKyAgICAgICAgIyByZS1yYWlzZSBhcyBzZXJpYWxpemFibGUgZXJyb3JzCisgICAgICAg IGV4Y2VwdCBzcWxhbGNoZW15Lm9ybS5leGMuTm9SZXN1bHRGb3VuZCwgbm90X2ZvdW5kOgorICAg ICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCggc2VsZi5tb2RlbF9jbGFz cy5fX25hbWVfXyArICc9CiBub3QgZm91bmQnICkKKyAgICAgICAgZXhjZXB0IHNxbGFsY2hlbXku b3JtLmV4Yy5NdWx0aXBsZVJlc3VsdHNGb3VuZCwgbXVsdGlfZm91bmQ6CisgICAgICAgICAgICBy YWlzZSBleGNlcHRpb25zLkNvbmZsaWN0KCAnZm91bmQgbW9yZSB0aGFuIG9uZSAnICsgc2VsZi5t b2RlbD0KX2NsYXNzLl9fbmFtZV9fICkKKworICAgIGRlZiBsaXN0KCBzZWxmLCB0cmFucywgKipr d2FyZ3MgKToKKyAgICAgICAgcmV0dXJuIHNlbGYucXVlcnkoIHRyYW5zLCAqKmt3YXJncyApLmFs bCgpCisKKyAgICBkZWYgYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2FyZ3MgKToKKyAgICAg ICAgaWRfZmlsdGVyID0zRCBzZWxmLm1vZGVsX2NsYXNzLmlkID0zRD0zRCBpZAorICAgICAgICBy ZXR1cm4gc2VsZi5vbmUoIHRyYW5zLCBmaWx0ZXJzPTNEaWRfZmlsdGVyLCAqKmt3YXJncyApCisK KyAgICBkZWYgX3F1ZXJ5X2J5X2lkcyggc2VsZiwgdHJhbnMsIGlkcywgZmlsdGVycz0zRE5vbmUs ICoqa3dhcmdzICk6CisgICAgICAgIGlkc19maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MuaWQu aW5fKCBpZHMgKQorICAgICAgICByZXR1cm4gc2VsZi5xdWVyeSggdHJhbnMsIGZpbHRlcnM9M0Rz ZWxmLl9tdW5nZV9maWx0ZXJzKCBpZHNfZmlsdGU9CnIsIGZpbHRlcnMgKSwgKiprd2FyZ3MgKQor CisgICAgZGVmIGJ5X2lkcyggc2VsZiwgdHJhbnMsIGlkcywgKiprd2FyZ3MgKToKKyAgICAgICAg Zm91bmQgPTNEIHNlbGYuX3F1ZXJ5X2J5X2lkcyggdHJhbnMsIGlkcywgKiprd2FyZ3MgKS5hbGwo KQorICAgICAgICAjVE9ETzogdGhpcyBkb2VzIG5vdCBvcmRlciBieSB0aGUgb3JpZ2luYWwgJ2lk cycgYXJyYXkKKworICAgICAgICAjIC4uLmNvdWxkIHVzZSBnZXQgKHN1cHBvc2VkbHkgc2luY2Ug Zm91bmQgYXJlIGluIHRoZSBzZXNzaW9uLCB0aGU9CiBkYiB3b24ndCBiZSBoaXQgdHdpY2UpCisg ICAgICAgICNyZXR1cm4gbWFwKCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBzZWxmLm1vZGVsX2Ns YXNzICkuZ2V0LCBpZHMgKQorCisgICAgICAgICMgLi4uY291bGQgaW1wbGVtZW50IG93biB2ZXJz aW9uIGhlcmUgLSBzbG93PworICAgICAgICByZXR1cm4gc2VsZi5fb3JkZXJfaXRlbXNfYnlfaWQo IGlkcywgZm91bmQgKQorICAgICAgICAjcmV0dXJuIGZvdW5kCisKKyAgICBkZWYgX29yZGVyX2l0 ZW1zX2J5X2lkKCBzZWxmLCBpZHMsIGl0ZW1zICk6CisgICAgICAgICIiIgorICAgICAgICBHaXZl biBhIGxpc3Qgb2YgKHVuaXF1ZSkgaWRzIGFuZCBhIGxpc3Qgb2YgaXRlbXMgaGF2aW5nIGFuICdp ZCcgYXQ9CnRyaWJ1dGUsCisgICAgICAgIHJldHVybiBpdGVtcyB0aGF0IGhhdmUgdGhlIGdpdmVu IGlkcyBpbiB0aGF0IG9yZGVyLgorCisgICAgICAgIElmIGFuIGlkIGluIGlkcyBpcyBub3QgZm91 bmQgb3IgaWYgYW4gaXRlbSBpbiBpdGVtcyBkb2Vzbid0IGhhdmUgYT0KIGdpdmVuCisgICAgICAg IGlkLCB0aGV5IHdpbGwgbm90IGJlIGluIHRoZSByZXR1cm5lZCBsaXN0LgorICAgICAgICAiIiIK KyAgICAgICAgSURfQVRUUl9OQU1FID0zRCAnaWQnCisgICAgICAgICNUT0RPOj8/IGFzaWRlIGZy b20gc3FsYWx4LmdldCBtZW50aW9uZWQgYWJvdmUsIEkgaGF2ZW4ndCBzZWVuIGFuID0KaW4tU1FM IHdheQorICAgICAgICAjICAgdG8gbWFrZSB0aGlzIGhhcHBlbi4gVGhpcyBtYXkgbm90IGJlIHRo ZSBtb3N0IGVmZmljaWVudCB3YXkgZWk9CnRoZXIuCisgICAgICAgICNOT1RFOiB0aGF0IHRoaXMg aXNuJ3Qgc29ydGluZyBieSBpZCAtIHRoaXMgaXMgbWF0Y2hpbmcgdGhlIG9yZGVyID0KaW4gaXRl bXMgdG8gdGhlIG9yZGVyIGluIGlkcworICAgICAgICAjIG1vdmUgaXRlbXMgbGlzdCBpbnRvIGRp Y3QgYnkgaWQKKyAgICAgICAgaXRlbV9kaWN0ID0zRCB7fQorICAgICAgICBmb3IgaXRlbSBpbiBp dGVtczoKKyAgICAgICAgICAgIGl0ZW1faWQgPTNEIGdldGF0dHIoIGl0ZW0sIElEX0FUVFJfTkFN RSwgTm9uZSApCisgICAgICAgICAgICBpZiBpdGVtX2lkOgorICAgICAgICAgICAgICAgIGl0ZW1f ZGljdFsgaXRlbV9pZCBdID0zRCBpdGVtCisgICAgICAgICMgcHVsbCBmcm9tIG1hcCBpbiBvcmRl ciBvZiBpZHMKKyAgICAgICAgaW5fb3JkZXIgPTNEIFtdCisgICAgICAgIGZvciBpZCBpbiBpZHM6 CisgICAgICAgICAgICBpZiBpZCBpbiBpdGVtX2RpY3Q6CisgICAgICAgICAgICAgICAgaW5fb3Jk ZXIuYXBwZW5kKCBpdGVtX2RpY3RbIGlkIF0gKQorICAgICAgICByZXR1cm4gaW5fb3JkZXIKKwor ICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIGNyZWF0ZQorICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRy YW5zLCBmbHVzaD0zRFRydWUsICphcmdzLCAqKmt3YXJncyApOgorICAgICAgICBpdGVtID0zRCBz ZWxmLm1vZGVsX2NsYXNzKCAqYXJncywgKiprd2FyZ3MgKQorICAgICAgICB0cmFucy5zYV9zZXNz aW9uLmFkZCggaXRlbSApCisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAgdHJhbnMuc2Ff c2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgY29weSggc2Vs ZiwgdHJhbnMsIGl0ZW0sICoqa3dhcmdzICk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm90 SW1wbGVtZW50ZWQoICdBYnN0cmFjdCBtZXRob2QnICkKKworICAgICMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0t LS0tIHVwZGF0ZQorICAgIGRlZiB1cGRhdGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBuZXdfdmFsdWVz LCBmbHVzaD0zRFRydWUsICoqa3dhcmdzICk6CisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRk KCBpdGVtICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbmV3X3ZhbHVlcy5pdGVtcygpOgor ICAgICAgICAgICAgaWYgaGFzYXR0ciggaXRlbSwga2V5ICk6CisgICAgICAgICAgICAgICAgc2V0 YXR0ciggaXRlbSwga2V5LCB2YWx1ZSApCisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAg dHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYg YXNzb2NpYXRlKCBzZWxmLCB0cmFucywgYXNzb2NpYXRlX3dpdGgsIGl0ZW0sIGZvcmVpZ25fa2V5 X25hbWU9M0ROPQpvbmUgKToKKyAgICAgICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgZm9yZWlnbl9r ZXlfbmFtZSBvciBzZWxmLmZvcmVpZ25fa2V5X25hbWUKKyAgICAgICAgc2V0YXR0ciggYXNzb2Np YXRlX3dpdGgsIGZvcmVpZ25fa2V5X25hbWUsIGl0ZW0gKQorICAgICAgICByZXR1cm4gaXRlbQor CisgICAgZGVmIHF1ZXJ5X2Fzc29jaWF0ZWQoIHNlbGYsIHRyYW5zLCBhc3NvY2lhdGVkX21vZGVs X2NsYXNzLCBpdGVtLCBmb3JlaT0KZ25fa2V5X25hbWU9M0ROb25lICk6CisgICAgICAgIGZvcmVp Z25fa2V5X25hbWUgPTNEIGZvcmVpZ25fa2V5X25hbWUgb3Igc2VsZi5mb3JlaWduX2tleV9uYW1l CisgICAgICAgIGZvcmVpZ25fa2V5ID0zRCBnZXRhdHRyKCBhc3NvY2lhdGVkX21vZGVsX2NsYXNz LCBmb3JlaWduX2tleV9uYW1lICkKKyAgICAgICAgcmV0dXJuIHRyYW5zLnNhX3Nlc3Npb24ucXVl cnkoIGFzc29jaWF0ZWRfbW9kZWxfY2xhc3MgKS5maWx0ZXIoIGZvPQpyZWlnbl9rZXkgPTNEPTNE IGl0ZW0gKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gZGVsZXRlCisgICAgIyBhIHJlbmFt ZSBvZiBzcWwgREVMRVRFIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgR2FsYXh5IG5vdGlvbiBv ZiBtYT0KcmtfYXNfZGVsZXRlZAorICAgICNkZWYgcmVtb3ZlX2Zyb21fZGIoIHNlbGYsIHRyYW5z LCBpdGVtLCAqKmt3YXJncyApOgorICAgICMgICAgcmV0dXJuIGl0ZW0KKworCisjID0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0z RAorY2xhc3MgRGVsZXRhYmxlTW9kZWxJbnRlcmZhY2UoIG9iamVjdCApOgorCisgICAgZGVmIGRl bGV0ZSggc2VsZiwgdHJhbnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSwgKiprd2FyZ3MgKToKKyAgICAg ICAgIyBvZnRlbiBvbmx5IGEgbWF0dGVyIG9mICdtYXJraW5nIGFzIGRlbGV0ZWQnCisgICAgICAg IHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVtICkKKyAgICAgICAgaXRlbS5kZWxldGVkID0zRCBU cnVlCisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVz aCgpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgdW5kZWxldGUoIHNlbGYsIHRyYW5z LCBpdGVtLCBmbHVzaD0zRFRydWUsICoqa3dhcmdzICk6CisgICAgICAgIHRyYW5zLnNhX3Nlc3Np b24uYWRkKCBpdGVtICkKKyAgICAgICAgaXRlbS5kZWxldGVkID0zRCBGYWxzZQorICAgICAgICBp ZiBmbHVzaDoKKyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICBy ZXR1cm4gaXRlbQorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBQdXJnYWJsZU1vZGVsSW50ZXJmYWNl KCBEZWxldGFibGVNb2RlbEludGVyZmFjZSApOgorCisgICAgZGVmIGVycm9yX3VubGVzc19kYXRh c2V0X3B1cmdlX2FsbG93ZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBtc2c9M0ROb25lID0KKToKKyAg ICAgICAgaWYgbm90IHRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlOgor ICAgICAgICAgICAgbXNnID0zRCBtc2cgb3IgJ1RoaXMgaW5zdGFuY2UgZG9lcyBub3QgYWxsb3cg dXNlciBkYXRhc2V0IHB1cmc9CmluZycKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29u ZmlnRG9lc05vdEFsbG93RXhjZXB0aW9uKCBtc2cgKQorICAgICAgICAgICAgI3JhaXNlIGV4Y2Vw dGlvbnMuQ29uZmlnRG9lc05vdEFsbG93RXhjZXB0aW9uKCBtc2csIGl0ZW09M0RpdGU9Cm0gKQor ICAgICAgICByZXR1cm4gaXRlbQorCisgICAgZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgaXRlbSwg Zmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCgg aXRlbSApCisgICAgICAgIGl0ZW0ucHVyZ2VkID0zRCBUcnVlCisgICAgICAgIGlmIGZsdXNoOgor ICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHJldHVybiBpdGVt CisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIEFjY2Vzc2libGVNb2RlbEludGVyZmFjZSggb2JqZWN0 ICk6CisKKyAgICAjIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgYnlfaWQgc2luY2UgY29uc3VtZXJz IHdpbGwgYWxzbyB3YW50IHRvIGZldGNoPQogdy9vIGFueSBzZWN1cml0eSBjaGVja3MKKworICAg IGRlZiBhY2Nlc3NpYmxlX2J5X2lkKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6 CisgICAgICAgIGl0ZW0gPTNEIE1vZGVsTWFuYWdlci5ieV9pZCggc2VsZiwgdHJhbnMsIGlkICkK KyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHRyYW5zLCBpdGVt LCB1c2VyICkKKworICAgIGRlZiBlcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMs IGl0ZW0sIHVzZXIgKToKKyAgICAgICAgaWYgc2VsZi5pc19hY2Nlc3NpYmxlKCB0cmFucywgaXRl bSwgdXNlciApOgorICAgICAgICAgICAgcmV0dXJuIGl0ZW0KKyAgICAgICAgcmFpc2UgZXhjZXB0 aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiggIiVzIGlzIG5vdCBhY2Nlc3NpYmxlPQog YnkgdXNlciIgJSBzZWxmLm1vZGVsX2NsYXNzX25hbWUgKQorCisgICAgZGVmIGlzX2FjY2Vzc2li bGUoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyICk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMu Tm90SW1wbGVtZW50ZWQoICJBYnN0cmFjdCBJbnRlcmZhY2UgTWV0aG9kIiApCisgICAgICAgICNP Uj8gcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbGlzdF9hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywg dXNlciwgKiprd2FyZ3MgKToKKyAgICAgICAgaXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBz ZWxmLCB0cmFucywgKiprd2FyZ3MgKQorICAgICAgICByZXR1cm4gWyBzZWxmLmVycm9yX3VubGVz c19hY2Nlc3NpYmxlKCB0cmFucywgaXRlbSwgdXNlciApIGZvciBpdGU9Cm0gaW4gaXRlbXMgXQor CisgICAgZGVmIGZpbHRlcl9hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3Mg KToKKyAgICAgICAgaXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKipr d2FyZ3MgKQorICAgICAgICByZXR1cm4gZmlsdGVyKCBsYW1iZGEgaXRlbTogc2VsZi5pc19hY2Nl c3NpYmxlKCB0cmFucywgaXRlbSwgdXNlciA9CiksIGl0ZW1zICkKKworCisjID0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAor Y2xhc3MgTW9kZWxTZXJpYWxpemluZ0Vycm9yKCBleGNlcHRpb25zLk9iamVjdEF0dHJpYnV0ZUlu dmFsaWRFeGNlcHRpb24gKToKKyAgICAiIiJUaHJvd24gd2hlbiByZXF1ZXN0IG1vZGVsIHZhbHVl cyBjYW4ndCBiZSBzZXJpYWxpemVkIiIiCisgICAgI1RPRE86IGJldHRlciBhcyA1MDA/CisgICAg cGFzcworCisKK2NsYXNzIE1vZGVsRGVzZXJpYWxpemluZ0Vycm9yKCBleGNlcHRpb25zLk9iamVj dEF0dHJpYnV0ZUludmFsaWRFeGNlcHRpb24gPQopOgorICAgICIiIlRocm93biB3aGVuIGFuIGlu Y29taW5nIHZhbHVlIGlzbid0IHVzYWJsZSBieSB0aGUgbW9kZWwKKyAgICAoYmFkIHR5cGUsIG91 dCBvZiByYW5nZSwgZXRjLikKKyAgICAiIiIKKyAgICBwYXNzCisKKworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS09Ci0tLS0tCitjbGFzcyBNb2RlbFNlcmlhbGl6ZXIoIG9iamVjdCApOgorICAgICNtb2RlbF9t Z3JfY2xhc3MgPTNEIE5vbmUKKworICAgICMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciB0dXJuaW5n IG1vZGVscyBpbnRvL2Zyb20gSlNPTmFibGUgZGljdHMKKyAgICAjICAgbW9kZWwgICAtLT4gTW9k ZWxTZXJpYWxpemVyIC0tPiBKU09OCisgICAgIyAgIEpTT04gICAgLS0+IE1vZGVsU2VyaWFsaXpl ciAtLT4gbW9kZWwKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzZWxm LmFwcCA9M0QgYXBwCisgICAgICAgICNUT0RPOgorICAgICAgICAjc2VsZi5tZ3IgPTNEIG1vZGVs X21ncl9jbGFzcyggYXBwICkKKyAgICAgICA9MjAKKyAgICAgICAgIyBhIG1hcCBvZiBkaWN0aW9u YXJ5IGtleXMgdG8gdGhlIGZ1bmN0aW9ucyAob2Z0ZW4gbGFtYmRhcykgdGhhdCBjPQpyZWF0ZSB0 aGUgdmFsdWVzIGZvciB0aG9zZSBrZXlzCisgICAgICAgIHNlbGYuc2VyaWFsaXplcnMgPTNEIHt9 CisgICAgICAgICMgYWRkIHN1YmNsYXNzIHNlcmlhbGl6ZXJzIGRlZmluZWQgdGhlcmUKKyAgICAg ICAgc2VsZi5hZGRfc2VyaWFsaXplcnMoKQorICAgICAgICAjIGEgbGlzdCBvZiB2YWxpZCBzZXJp YWxpemFibGUga2V5cyB0aGF0IGNhbiB1c2UgdGhlIGRlZmF1bHQgKHN0cmk9Cm5nKSBzZXJpYWxp emVyCisgICAgICAgICMgICB0aGlzIGFsbG93cyB1cyB0bzogJ21lbnRpb24nIHRoZSBrZXkgd2l0 aG91dCBhZGRpbmcgdGhlIGRlZmF1bD0KdCBzZXJpYWxpemVyCisgICAgICAgICNOT1RFOiBpZiBh IGtleSBpcyByZXF1ZXN0ZWQgdGhhdCBpcyBpbiBuZWl0aGVyIHNlcmlhbGl6YWJsZV9rZXlzID0K b3Igc2VyaWFsaXplcnMsIGl0IGlzIG5vdCByZXR1cm5lZAorICAgICAgICAjVE9ETzogcmVuYW1l IHRvICdrZXlzX3VzaW5nX2RlZmF1bHRfc2VyaWFsaXplcicKKyAgICAgICAgI1RPRE86IG9yIChh bHQpIGFsbG93IGtleSBpbiBzZXJpYWxpemVycyB3aXRoIE5vbmUgYXMgdmFsdWUgKGluZGljPQph dGluZyB1c2UgZGVmYXVsdF9zZXJpYWxpemVyKQorICAgICAgICBzZWxmLnNlcmlhbGl6YWJsZV9r ZXlzID0zRCBbXQorCisgICAgICAgICMgdmlld3MgYXJlIGNvbGxlY3Rpb25zIG9mIHNlcmlhbGl6 YWJsZSBhdHRyaWJ1dGVzIChhIG5hbWVkIGFycmF5ID0Kb2Yga2V5cykKKyAgICAgICAgIyAgIGlu c3BpcmVkIGJ5IG1vZGVsLmRpY3Rfe3ZpZXd9X3Zpc2libGVfa2V5cworICAgICAgICBzZWxmLnZp ZXdzID0zRCB7fQorICAgICAgICBzZWxmLmRlZmF1bHRfdmlldyA9M0QgTm9uZQorCisgICAgIyAu Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLj0KLi4uLi4gc2VyaWFsaXppbmcKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBz ZWxmICk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBtYXAgb2YgYXR0cmlidXRlIGtleXMgLT4gZnVu Y3Rpb25zIHRoYXQgd2lsbCBzZXJpYWxpej0KZSB0aGUgYXR0cmlidXRlCisgICAgICAgICMgdG8g YmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzCisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXJp YWxpemUoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXlzICk6CisgICAgICAgICMgbWFpbiBpbnRlcmZh Y2UgZm4gZm9yIGNvbnZlcnRpbmcgYSBtb2RlbCB0byBhIGRpY3QKKyAgICAgICAgI1RPRE86IHRy eS9jYXRjaCBoZXJlPworICAgICAgICByZXR1cm5lZCA9M0Qge30KKyAgICAgICAgZm9yIGtleSBp biBrZXlzOgorICAgICAgICAgICAgIyBjaGVjayBib3RoIHNlcmlhbGl6ZXJzIGFuZCBzZXJpYWxp emFibGUga2V5cworICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuc2VyaWFsaXplcnM6CisgICAg ICAgICAgICAgICAgcmV0dXJuZWRbIGtleSBdID0zRCBzZWxmLnNlcmlhbGl6ZXJzWyBrZXkgXSgg dHJhbnMsIGl0ZW0sID0Ka2V5ICkKKyAgICAgICAgICAgIGVsaWYga2V5IGluIHNlbGYuc2VyaWFs aXphYmxlX2tleXM6CisgICAgICAgICAgICAgICAgcmV0dXJuZWRbIGtleSBdID0zRCBzZWxmLmRl ZmF1bHRfc2VyaWFsaXplciggdHJhbnMsIGl0ZW0sID0Ka2V5ICkKKyAgICAgICAgICAgICMgaWdu b3JlIGJhZC91bnJlZyBrZXlzCisgICAgICAgIHJldHVybiByZXR1cm5lZAorCisgICAgIyAuLi4g Y29tbW9uIGRlc2VyaWFsaXplcnMgZm9yIHByaW1pdGl2ZXMKKyAgICBkZWYgZGVmYXVsdF9zZXJp YWxpemVyKCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgIHJldHVybiBnZXRhdHRy KCBpdGVtLCBrZXkgKQorCisgICAgZGVmIHNlcmlhbGl6ZV9kYXRlKCBzZWxmLCB0cmFucywgaXRl bSwga2V5ICk6CisgICAgICAgIGRhdGUgPTNEIGdldGF0dHIoIGl0ZW0sIGtleSApCisgICAgICAg IHJldHVybiBkYXRlLmlzb2Zvcm1hdCgpIGlmIGRhdGUgaXMgbm90IE5vbmUgZWxzZSBOb25lCisK KyAgICAjIC4uLi4gY29tbW9uIHNlcmlhbGl6ZXJzIGZvciBHYWxheHkKKyAgICBkZWYgc2VyaWFs aXplX2lkKCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgIGlkID0zRCBnZXRhdHRy KCBpdGVtLCBrZXkgKQorICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBp ZCApIGlmIGlkIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorCisgICAgIyAuLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4u Li4gc2VyaWFsaXppbmcgdG8gYSB2aWV3CisgICAgIyB3aGVyZSBhIHZpZXcgaXMgYSBwcmVkZWZp ZWQgbGlzdCBvZiBrZXlzIHRvIHNlcmlhbGl6ZQorICAgIGRlZiBzZXJpYWxpemVfdG9fdmlldygg c2VsZiwgdHJhbnMsIGl0ZW0sIHZpZXc9M0ROb25lLCBrZXlzPTNETm9uZSApOgorICAgICAgICBr ZXlzID0zRCBrZXlzIG9yIFtdCisgICAgICAgIGFsbF9rZXlzID0zRCBzZWxmLnZpZXdfdG9fbGlz dCggdmlldyApICsga2V5cworICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemUoIHRyYW5zLCBp dGVtLCBhbGxfa2V5cyApCisKKyAgICBkZWYgdmlld190b19saXN0KCBzZWxmLCB2aWV3PTNETm9u ZSApOgorICAgICAgICBpZiB2aWV3IGlzIE5vbmU6CisgICAgICAgICAgICB2aWV3ID0zRCBzZWxm LmRlZmF1bHRfdmlldworICAgICAgICBpZiB2aWV3IG5vdCBpbiBzZWxmLnZpZXdzOgorICAgICAg ICAgICAgcmFpc2UgTW9kZWxTZXJpYWxpemluZ0Vycm9yKCAndW5rbm93biB2aWV3Jywgdmlldz0z RHZpZXcsIGF2YWk9CmxhYmxlX3ZpZXdzPTNEc2VsZi52aWV3cyApCisgICAgICAgIHJldHVybiBz ZWxmLnZpZXdzWyB2aWV3IF0KKworICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGFsaWFzZXMKKyAg ICAjZGVmIHRvX2RpY3QoIHNlbGYsIHRyYW5zLCBpdGVtLCB2aWV3PTNETm9uZSwgdmlld19rZXlz PTNETm9uZSApOgorICAgICMgICAgdmlld19rZXlzID0zRCB2aWV3X2tleXMgb3Igc2VsZi52aWV3 X3RvX2xpc3QoIHZpZXcgKQorICAgICMgICAgcmV0dXJuIHNlbGYuc2VyaWFsaXplKCB0cmFucywg aXRlbSwgdmlld19rZXlzICkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0KK2NsYXNzIE1v ZGVsVmFsaWRhdG9yKCBvYmplY3QgKToKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwLCAq YXJncywgKiprd2FyZ3MgKToKKyAgICAgICAgc2VsZi5hcHAgPTNEIGFwcAorCisgICAgZGVmIHR5 cGUoIHNlbGYsIGtleSwgdmFsLCB0eXBlcyApOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSgg dmFsLCB0eXBlcyApOgorICAgICAgICAgICAgbXNnID0zRCAnbXVzdCBiZSBhIHR5cGU6ICVzJyAl ICggc3RyKCB0eXBlcyApICkKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBh cmFtZXRlckludmFsaWRFeGNlcHRpb24oIG1zZywga2V5PTNEPQprZXksIHZhbD0zRHZhbCApCisg ICAgICAgIHJldHVybiB2YWwKKworICAgICMgdmFsaWRhdG9ycyBmb3IgcHJpbWl0aXZlcworICAg IGRlZiBiYXNlc3RyaW5nKCBzZWxmLCBrZXksIHZhbCApOgorICAgICAgICByZXR1cm4gc2VsZi50 eXBlKCBrZXksIHZhbCwgYmFzZXN0cmluZyApCisKKyAgICBkZWYgbnVsbGFibGVfYmFzZXN0cmlu Zyggc2VsZiwga2V5LCB2YWwgKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZSgga2V5LCB2YWws ICggYmFzZXN0cmluZywgdHlwZSggTm9uZSApICkgKQorCisgICAgZGVmIGJvb2woIHNlbGYsIGtl eSwgdmFsICk6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUoIGtleSwgdmFsLCBib29sICkKKwor ICAgIGRlZiBpbnQoIHNlbGYsIGtleSwgdmFsICk6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUo IGtleSwgdmFsLCBpbnQgKQorCisgICAgZGVmIGludF9yYW5nZSggc2VsZiwga2V5LCB2YWwsIG1p bj0zRE5vbmUsIG1heD0zRE5vbmUgKToKKyAgICAgICAgdmFsID0zRCBzZWxmLnR5cGUoIGtleSwg dmFsLCBpbnQgKQorICAgICAgICBpZiB2YWwgPCBtaW46CisgICAgICAgICAgICByYWlzZSBleGNl cHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uKCAibGVzcyB0aGFuID0KbWlu aW11bSIsIGtleT0zRGtleSwgdmFsPTNEdmFsLCBtaW49M0RtaW4gKQorICAgICAgICBpZiB2YWwg PiBtYXg6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZh bGlkRXhjZXB0aW9uKCAiZ3JlYXRlciB0aD0KYW4gbWF4aW11bSIsIGtleT0zRGtleSwgdmFsPTNE dmFsLCBtYXg9M0RtYXggKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgYmFzZXN0cmlu Z19saXN0KCBzZWxmLCBrZXksIHZhbCApOgorICAgICAgICB2YWwgPTNEIHNlbGYudHlwZSgga2V5 LCB2YWwsIGxpc3QgKQorICAgICAgICByZXR1cm4gWyBzZWxmLmJhc2VzdHJpbmcoIGtleSwgZWxl bSApIGZvciBlbGVtIGluIHZhbCBdCisKKyAgICAjIHZhbGlkYXRvcnMgZm9yIEdhbGF4eQorICAg IGRlZiBnZW5vbWVfYnVpbGQoIHNlbGYsIHRyYW5zLCBrZXksIHZhbCApOgorICAgICAgICAjVE9E TzogaXMgdGhpcyBjb3JyZWN0PworICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAg IHJldHVybiAnPycKKyAgICAgICAgIyB3b3QuLi53aHkgdHVwbGVzPworICAgICAgICBpZiB2YWwg bm90IGluIGRpY3QoIHRyYW5zLmRiX2J1aWxkcyApOgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0 aW9ucy5SZXF1ZXN0UGFyYW1ldGVySW52YWxpZEV4Y2VwdGlvbiggImludmFsaWQgcmU9CmZlcmVu Y2UiLCBrZXk9M0RrZXksIHZhbD0zRHZhbCApCisgICAgICAgIHJldHVybiB2YWwKKworICAgICNk ZWYgc2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgIyAgICBwYXNzCisK KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBNb2RlbERlc2VyaWFsaXplciggb2Jq ZWN0ICk6CisgICAgI21vZGVsX21ncl9jbGFzcyA9M0QgTm9uZQorCisgICAgIyBwcmltYXJpbHkg ZGVzaWduZWQgZm9yIGNyZWF0aW5nIG1vZGVscyBmcm9tIGRpY3RzCisgICAgIyAgIERpY3QgICAg LS0+IE1vZGVsRGVzZXJpYWxpemVyIC0tPiBtb2RlbAorICAgIGRlZiBfX2luaXRfXyggc2VsZiwg YXBwICk6CisgICAgICAgIHNlbGYuYXBwID0zRCBhcHAKKyAgICAgICAgI1RPRE86CisgICAgICAg ICNzZWxmLm1nciA9M0QgbW9kZWxfbWdyX2NsYXNzKCBhcHAgKQorCisgICAgICAgIHNlbGYuZGVz ZXJpYWxpemVycyA9M0Qge30KKyAgICAgICAgc2VsZi5hZGRfZGVzZXJpYWxpemVycygpCisgICAg ICAgIHNlbGYuZGVzZXJpYWxpemFibGVfa2V5cyA9M0QgW10KKyAgICAgICAgc2VsZi52YWxpZGF0 ZSA9M0QgTW9kZWxWYWxpZGF0b3IoIHNlbGYuYXBwICkKKworICAgICMgLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4u Li4uIGRlc2VyaWFsaXppbmcKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAg ICAgICAgIyByZWdpc3RlciBhIG1hcCBvZiBhdHRyaWJ1dGUga2V5cyAtPiBmdW5jdGlvbnMgdGhh dCB3aWxsIGRlc2VyaWFsPQppemUgZGF0YSBpbnRvIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgIyB0 byBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRl c2VyaWFsaXplKCBzZWxmLCB0cmFucywgaXRlbSwgZGF0YSwgZmx1c2g9M0RUcnVlICk6CisgICAg ICAgIG5ld19kaWN0ID0zRCB7fQorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gZGF0YS5pdGVtcygp OgorICAgICAgICAgICAgI3ByaW50IGtleSwgdmFsCisgICAgICAgICAgICBpZiBrZXkgaW4gc2Vs Zi5kZXNlcmlhbGl6ZXJzOgorICAgICAgICAgICAgICAgICNwcmludCAnXHQgZGVzZXJpYWxpemVy OicsIHNlbGYuZGVzZXJpYWxpemVyc1sga2V5IF0KKyAgICAgICAgICAgICAgICBuZXdfZGljdFsg a2V5IF0gPTNEIHNlbGYuZGVzZXJpYWxpemVyc1sga2V5IF0oIHRyYW5zLCBpdGVtPQosIGtleSwg dmFsICkKKyAgICAgICAgICAgICMhaW1wb3J0YW50OiBkb24ndCBlcnJvciBvbiB1bnJlZy4ga2V5 cyAtLSBtYW55IGNsaWVudHMgd2lsbCBhPQpkZCB3ZWlyZCBhc3Mga2V5cyBvbnRvIHRoZSBtb2Rl bAorICAgICAgICAjVE9ETzo/PyBoZXJlIG9yIGluIG1hbmFnZXI/CisgICAgICAgIGlmIGZsdXNo IGFuZCBsZW4oIG5ld19kaWN0ICk6CisgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCgg aXRlbSApCisgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgcmV0 dXJuIG5ld19kaWN0CisKKyAgICAjIC4uLiBjb21tb24gZGVzZXJpYWxpemVycyBmb3IgcHJpbWl0 aXZlcworICAgIGRlZiBkZWZhdWx0X2Rlc2VyaWFsaXplciggc2VsZiwgdHJhbnMsIGl0ZW0sIGtl eSwgdmFsICk6CisgICAgICAgICNUT0RPOiBzZXRzIHRoZSBpdGVtIGF0dHJpYnV0ZSB0byB2YWx1 ZSAodGhpcyBtYXkgbm90IHdvcmsgaW4gYWxsID0KaW5zdGFuY2VzKQorCisgICAgICAgICMgb25s eSBkbyB0aGUgZm9sbG93aW5nIGlmIHZhbCA9M0Q9M0QgZ2V0YXR0ciggaXRlbSwga2V5ICkKKyAg ICAgICAgaWYgaGFzYXR0ciggaXRlbSwga2V5ICkgYW5kIGdldGF0dHIoIGl0ZW0sIGtleSApICE9 M0QgdmFsOgorICAgICAgICAgICAgc2V0YXR0ciggaXRlbSwga2V5LCB2YWwgKQorICAgICAgICBy ZXR1cm4gdmFsCisKKyAgICBkZWYgZGVzZXJpYWxpemVfYmFzZXN0cmluZyggc2VsZiwgdHJhbnMs IGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAgIHZhbCA9M0Qgc2VsZi52YWxpZGF0ZS5iYXNlc3Ry aW5nKCBrZXksIHZhbCApCisgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfZGVzZXJpYWxpemVy KCB0cmFucywgaXRlbSwga2V5LCB2YWwgKQorCisgICAgZGVmIGRlc2VyaWFsaXplX2Jvb2woIHNl bGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApOgorICAgICAgICB2YWwgPTNEIHNlbGYudmFsaWRh dGUuYm9vbCgga2V5LCB2YWwgKQorICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0X2Rlc2VyaWFs aXplciggdHJhbnMsIGl0ZW0sIGtleSwgdmFsICkKKworICAgIGRlZiBkZXNlcmlhbGl6ZV9pbnQo IHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCwgbWluPTNETm9uZSwgbWF4PTNETm89Cm5lICk6 CisgICAgICAgIHZhbCA9M0Qgc2VsZi52YWxpZGF0ZS5pbnRfcmFuZ2UoIGtleSwgdmFsLCBtaW4s IG1heCApCisgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfZGVzZXJpYWxpemVyKCB0cmFucywg aXRlbSwga2V5LCB2YWwgKQorCisgICAgIyAuLi4gY29tbW9uIGRlc2VyaWFsaXplcnMgZm9yIEdh bGF4eQorICAgIGRlZiBkZXNlcmlhbGl6ZV9nZW5vbWVfYnVpbGQoIHNlbGYsIHRyYW5zLCBpdGVt LCBrZXksIHZhbCApOgorICAgICAgICB2YWwgPTNEIHNlbGYudmFsaWRhdGUuZ2Vub21lX2J1aWxk KCB0cmFucywga2V5LCB2YWwgKQorICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0X2Rlc2VyaWFs aXplciggdHJhbnMsIGl0ZW0sIGtleSwgdmFsICkKKworICAgIGRlZiBkZXNlcmlhbGl6ZV9hbm5v dGF0aW9uKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgdmFsID0zRCBz ZWxmLnZhbGlkYXRlLm51bGxhYmxlX2Jhc2VzdHJpbmcoIGtleSwgdmFsICkKKyAgICAgICAgI1RP RE86IGhhdmUgdG8gYXNzdW1lIHRyYW5zLnVzZXIgaGVyZS4uLgorICAgICAgICByZXR1cm4gaXRl bS5hZGRfaXRlbV9hbm5vdGF0aW9uKCB0cmFucy5zYV9zZXNzaW9uLCB0cmFucy51c2VyLCBpdGU9 Cm0sIHZhbCApCisKKyAgICBkZWYgZGVzZXJpYWxpemVfdGFncyggc2VsZiwgdHJhbnMsIGl0ZW0s IGtleSwgdmFsICk6CisgICAgICAgIG5ld190YWdzX2xpc3QgPTNEIHNlbGYudmFsaWRhdGUuYmFz ZXN0cmluZ19saXN0KCBrZXksIHZhbCApCisgICAgICAgICNUT0RPOiBoYXZlIHRvIGFzc3VtZSB0 cmFucy51c2VyIGhlcmUuLi4KKyAgICAgICAgdXNlciA9M0QgdHJhbnMudXNlcgorICAgICAgICAj VE9ETzogZHVwZWQgZnJvbSB0YWdzIG1hbmFnZXIgLSBkZS1kdXBlIHdoZW4gbW92ZWQgdG8gdGFn Z2FibGUgbWk9CnhpbgorICAgICAgICB0YWdfaGFuZGxlciA9M0QgdHJhbnMuYXBwLnRhZ19oYW5k bGVyCisgICAgICAgIHRhZ19oYW5kbGVyLmRlbGV0ZV9pdGVtX3RhZ3MoIHRyYW5zLCB1c2VyLCBp dGVtICkKKyAgICAgICAgbmV3X3RhZ3Nfc3RyID0zRCAnLCcuam9pbiggbmV3X3RhZ3NfbGlzdCAp CisgICAgICAgIHRhZ19oYW5kbGVyLmFwcGx5X2l0ZW1fdGFncyggdHJhbnMsIHVzZXIsIGl0ZW0s IHVuaWNvZGUoIG5ld190YWdzXz0Kc3RyLmVuY29kZSggJ3V0Zi04JyApLCAndXRmLTgnICkgKQor ICAgICAgICAjdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHJldHVybiBpdGVtLnRh Z3MKKworICAgICNkZWYgZGVzZXJpYWxpemVfcmF0aW5nKCBzZWxmLCB0cmFucywgaXRlbSwga2V5 LCB2YWwgKToKKyAgICAjICAgIHZhbCA9M0Qgc2VsZi52YWxpZGF0ZS5pbnRfcmFuZ2UoIGtleSwg dmFsLCAwLCA1ICkKKyAgICAjICAgIHJldHVybiBzZWxmLnNldF9yYXRpbmcuLi4oIHRyYW5zLCBp dGVtLCB2YWwsIHVzZXI9M0R0cmFucy51c2VyICkKKworICAgICMgLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4u IGFsaWFzZXMKKyAgICAjZGVmIGZyb21fZGljdCggc2VsZiwgdHJhbnMsIGl0ZW0sIGRhdGEgKToK KyAgICAjICAgIHNlbGYuZGVzZXJpYWxpemUoIHRyYW5zLCBpdGVtLCBkYXRhICkKKworCisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT0KLS0tLS0KKyNUT0RPOiB0aGVzZSBhcmUgb2YgcXVlc3Rpb25hYmxlIHZh bHVlIGlmIHdlIGRvbid0IHdhbnQgdG8gZW5hYmxlIHVzZXJzIHRvPQogZGVsZXRlL3B1cmdlIHZp YSB1cGRhdGUKK2NsYXNzIERlbGV0YWJsZU1vZGVsRGVzZXJpYWxpemVyKCBvYmplY3QgKToKKwor ICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBzZWxmLmRlc2VyaWFs aXplcnNbICdkZWxldGVkJyBdID0zRCBzZWxmLmRlc2VyaWFsaXplX2RlbGV0ZWQKKworICAgIGRl ZiBkZXNlcmlhbGl6ZV9kZWxldGVkKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAg ICAgICAgbmV3X2RlbGV0ZWQgPTNEIHNlbGYudmFsaWRhdGUuYm9vbCgga2V5LCB2YWwgKQorICAg ICAgICBpZiBuZXdfZGVsZXRlZCA9M0Q9M0QgaXRlbS5kZWxldGVkOgorICAgICAgICAgICAgcmV0 dXJuIGl0ZW0uZGVsZXRlZAorICAgICAgICAjVE9ETzo/PyBmbHVzaD0zREZhbHNlPworICAgICAg ICBpZiBuZXdfZGVsZXRlZDoKKyAgICAgICAgICAgIHNlbGYubWdyLmRlbGV0ZSggdHJhbnMsIGl0 ZW0gKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tZ3IudW5kZWxldGUoIHRyYW5z LCBpdGVtICkKKyAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAorCisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPQotLS0tLQorY2xhc3MgUHVyZ2FibGVNb2RlbERlc2VyaWFsaXplciggRGVsZXRhYmxlTW9k ZWxEZXNlcmlhbGl6ZXIgKToKKworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgor ICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnNbICdwdXJnZWQnIF0gPTNEIHNlbGYuZGVzZXJpYWxp emVfcHVyZ2VkCisKKyAgICBkZWYgZGVzZXJpYWxpemVfcHVyZ2VkKCBzZWxmLCB0cmFucywgaXRl bSwga2V5LCB2YWwgKToKKyAgICAgICAgbmV3X3B1cmdlZCA9M0Qgc2VsZi52YWxpZGF0ZS5ib29s KCBrZXksIHZhbCApCisgICAgICAgIGlmIG5ld19wdXJnZWQgPTNEPTNEIGl0ZW0ucHVyZ2VkOgor ICAgICAgICAgICAgcmV0dXJuIGl0ZW0ucHVyZ2VkCisgICAgICAgIGlmIG5ld19wdXJnZWQ6Cisg ICAgICAgICAgICBzZWxmLm1nci5wdXJnZSggdHJhbnMsIGl0ZW0gKQorICAgICAgICByZXR1cm4g c2VsZi5wdXJnZWQKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0KK2NsYXNzIFRhZ2dhYmxl U2VyaWFsaXplciggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6 CisgICAgICAgIHNlbGYuc2VyaWFsaXplcnNbICd0YWdzJyBdID0zRCBzZWxmLnNlcmlhbGl6ZV90 YWdzCisKKyAgICBkZWYgc2VyaWFsaXplX3RhZ3MoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToK KyAgICAgICAgaWYgbm90IGhhc2F0dHIoIGl0ZW0sICd0YWdzJyApOgorICAgICAgICAgICAgcmV0 dXJuIE5vbmUKKworICAgICAgICB0YWdzX3N0cl9saXN0ID0zRCBbXQorICAgICAgICBmb3IgdGFn IGluIGl0ZW0udGFnczoKKyAgICAgICAgICAgIHRhZ19zdHIgPTNEIHRhZy51c2VyX3RuYW1lCisg ICAgICAgICAgICBpZiB0YWcudmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGFn X3N0ciArPTNEICI6IiArIHRhZy51c2VyX3ZhbHVlCisgICAgICAgICAgICB0YWdzX3N0cl9saXN0 LmFwcGVuZCggdGFnX3N0ciApCisgICAgICAgIHByaW50ICdcdCB0YWdzX3N0cl9saXN0JywgdGFn c19zdHJfbGlzdAorICAgICAgICByZXR1cm4gdGFnc19zdHJfbGlzdAorCisKK2NsYXNzIEFubm90 YXRhYmxlU2VyaWFsaXphYmxlKCBvYmplY3QgKToKKworICAgIGRlZiBhZGRfc2VyaWFsaXplcnMo IHNlbGYgKToKKyAgICAgICAgc2VsZi5zZXJpYWxpemVyc1sgJ2Fubm90YXRpb24nIF0gPTNEIGxh bWJkYSB0LCBpLCBrOiB1bmljb2RlKCBzZWxmPQouZ2V0X2Fubm90YXRpb24oIHQsIGkgKSApCisK KworY2xhc3MgUmF0YWJsZVNlcmlhbGl6YWJsZSggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX3Nl cmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgIHNlbGYuc2VyaWFsaXplcnNbICd1c2VyX3JhdGlu ZycgXSA9M0Qgc2VsZi5zZXJpYWxpemVfdXNlcl9yYXRpbmcKKyAgICAgICAgc2VsZi5zZXJpYWxp emVyc1sgJ2NvbW11bml0eV9yYXRpbmcnIF0gPTNEIHNlbGYuc2VyaWFsaXplX2NvbW11bml0PQp5 X3JhdGluZworCisgICAgZGVmIHNlcmlhbGl6ZV91c2VyX3JhdGluZyggc2VsZiwgdHJhbnMsIGl0 ZW0sIGtleSApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2VyaWFsaXplX2NvbW11bml0eV9y YXRpbmcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAgICAgcGFzcworCgpkaWZmIC1y IGNjNzE0NzUxNGQ3Nzc5OTk4OTc3N2ZkMjFhYTgxOGU0M2Q5ZjNkMzkgLXIgNzQwZDc1OGMyMjg1 YmVjMTQwZTY5MDE9CjAyNWU5MDZmNTBhMGQ3YTJhIGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVj dGlvbnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQorKysgYi9s aWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zLnB5CkBAIC0zNCwxMCArMzQsMTAgQEAKICAg ICAgICAgc2VsZi5jb2xsZWN0aW9uX3R5cGVfZGVzY3JpcHRpb25zID0zRCBDb2xsZWN0aW9uVHlw ZURlc2NyaXB0aW9uRmFjPQp0b3J5KCBzZWxmLnR5cGVfcmVnaXN0cnkgKQogICAgICAgICBzZWxm Lm1vZGVsID0zRCBhcHAubW9kZWwKICAgICAgICAgc2VsZi5zZWN1cml0eSA9M0QgYXBwLnNlY3Vy aXR5Ci0gICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIGhkYXMuSERBTWFuYWdlcigpCi0gICAg ICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyID0zRCBoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoKQor ICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCisgICAg ICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyID0zRCBoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFw cCApCiAgICAgICAgIHNlbGYudGFnX21hbmFnZXIgPTNEIHRhZ3MuVGFnc01hbmFnZXIoIGFwcCAp Ci0gICAgICAgIHNlbGYubGRkYV9tYW5hZ2VyID0zRCBsZGRhcy5MRERBTWFuYWdlciggKQorICAg ICAgICBzZWxmLmxkZGFfbWFuYWdlciA9M0QgbGRkYXMuTEREQU1hbmFnZXIoIGFwcCApCj0yMAog ICAgIGRlZiBjcmVhdGUoCiAgICAgICAgIHNlbGYsCkBAIC0yNzgsNyArMjc4LDEwIEBACiAgICAg ZGVmIF9fZ2V0X2hpc3RvcnlfY29sbGVjdGlvbl9pbnN0YW5jZSggc2VsZiwgdHJhbnMsIGlkLCBj aGVja19vd25lcnNoaT0KcD0zREZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApOgogICAg ICAgICBpbnN0YW5jZV9pZCA9M0QgaW50KCB0cmFucy5hcHAuc2VjdXJpdHkuZGVjb2RlX2lkKCBp ZCApICkKICAgICAgICAgY29sbGVjdGlvbl9pbnN0YW5jZSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5x dWVyeSggdHJhbnMuYXBwLm1vZGVsLkhpPQpzdG9yeURhdGFzZXRDb2xsZWN0aW9uQXNzb2NpYXRp b24gKS5nZXQoIGluc3RhbmNlX2lkICkKLSAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIuc2Vj dXJlKCB0cmFucywgY29sbGVjdGlvbl9pbnN0YW5jZS5oaXN0b3J5LCBjPQpoZWNrX293bmVyc2hp cD0zRGNoZWNrX293bmVyc2hpcCwgY2hlY2tfYWNjZXNzaWJsZT0zRGNoZWNrX2FjY2Vzc2libGUg KQorICAgICAgICBpZiBjaGVja19vd25lcnNoaXA6CisgICAgICAgICAgICBzZWxmLmhpc3Rvcnlf bWFuYWdlci5lcnJvcl91bmxlc3Nfb3duZXIoIHRyYW5zLCBjb2xsZWN0aW9uX2lucz0KdGFuY2Uu aGlzdG9yeSwgdHJhbnMudXNlciApCisgICAgICAgIGlmIGNoZWNrX2FjY2Vzc2libGU6CisgICAg ICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlci5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggdHJh bnMsIGNvbGxlY3Rpbz0Kbl9pbnN0YW5jZS5oaXN0b3J5LCB0cmFucy51c2VyICkKICAgICAgICAg cmV0dXJuIGNvbGxlY3Rpb25faW5zdGFuY2UKPTIwCiAgICAgZGVmIF9fZ2V0X2xpYnJhcnlfY29s bGVjdGlvbl9pbnN0YW5jZSggc2VsZiwgdHJhbnMsIGlkLCBjaGVja19vd25lcnNoaT0KcD0zREZh bHNlLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApOgoKZGlmZiAtciBjYzcxNDc1MTRkNzc3OTk5 ODk3NzdmZDIxYWE4MThlNDNkOWYzZDM5IC1yIDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxPQowMjVl OTA2ZjUwYTBkN2EyYSBsaWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQpAQCAtMCwwICsxLDEwMiBA QAorIiIiCitNYW5hZ2VyIGFuZCBTZXJpYWxpemVyIGZvciBEYXRhc2V0cy4KKyIiIgorZnJvbSBn YWxheHkgaW1wb3J0IG1vZGVsCitmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucworCitpbXBv cnQgYmFzZQoraW1wb3J0IHVzZXJzCisKK2ltcG9ydCBsb2dnaW5nCitsb2cgPTNEIGxvZ2dpbmcu Z2V0TG9nZ2VyKCBfX25hbWVfXyApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIERhdGFzZXRNYW5h Z2VyKCBiYXNlLk1vZGVsTWFuYWdlciwgYmFzZS5BY2Nlc3NpYmxlTW9kZWxJbnRlcmZhY2UsIGJh PQpzZS5QdXJnYWJsZU1vZGVsSW50ZXJmYWNlICk6CisgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVs LkRhdGFzZXQKKyAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLkRhdGFzZXQuY3JlYXRl X3RpbWUsICkKKyAgICBmb3JlaWduX2tleV9uYW1lID0zRCAnZGF0YXNldCcKKworICAgIGRlZiBf X2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVyKCBEYXRhc2V0TWFuYWdlciwgc2Vs ZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLnVzZXJfbWdyID0zRCB1c2Vycy5Vc2Vy TWFuYWdlciggYXBwICkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIENSVUQKKyAgICBkZWYg Y3JlYXRlKCBzZWxmLCB0cmFucywgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAj IGRlZmF1bHQgdG8gTkVXIHN0YXRlIG9uIG5ldyBkYXRhc2V0cworICAgICAgICBrd2FyZ3MudXBk YXRlKCBkaWN0KCBzdGF0ZT0zRCgga3dhcmdzLmdldCggJ3N0YXRlJywgbW9kZWwuRGF0YXNldC49 CnN0YXRlcy5ORVcgKSApICkgKQorICAgICAgICBkYXRhc2V0ID0zRCBtb2RlbC5EYXRhc2V0KCAq Kmt3YXJncyApCisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBkYXRhc2V0ICkKKyAgICAg ICAgaWYgZmx1c2g6CisgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAg ICAgcmV0dXJuIGRhdGFzZXQKKworICAgICNkZWYgdG9faGRhKCBzZWxmLCB0cmFucywgZGF0YXNl dCwgaGlzdG9yeSwgKiprd2FyZ3MgKToKKyAgICAjICAgIHBhc3MKKworICAgICNkZWYgdG9fbGRk YSggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIGxpYnJhcnlfZm9sZGVyLCAqKmt3YXJncyApOgorICAg ICMgICAgcGFzcworCisgICAgI2RlZiBjb3B5KCBzZWxmICk6CisgICAgIyAgICBwYXNzCisKKyAg ICBkZWYgcHVyZ2UoIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCBmbHVzaD0zRFRydWUgKToKKyAgICAg ICAgc2VsZi5lcnJvcl91bmxlc3NfZGF0YXNldF9wdXJnZV9hbGxvd2VkKCB0cmFucywgZGF0YXNl dCApCisKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGFsc28gbWFya3MgZGF0YXNldCBhcyBwdXJn ZWQgYW5kIGRlbGV0ZWQKKyAgICAgICAgZGF0YXNldC5mdWxsX2RlbGV0ZSgpCisgICAgICAgIHRy YW5zLnNhX3Nlc3Npb24uYWRkKCBkYXRhc2V0ICkKKyAgICAgICAgaWYgZmx1c2g6CisgICAgICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIGRhdGFzZXQKKwor ICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIGFjY2Vzc2liaWxpdHkKKyAgICAjIGRhdGFzZXRzIGNh biBpbXBsZW1lbnQgdGhlIGFjY2Vzc2libGUgaW50ZXJmYWNlLCBidXQgYWNjZXNzaWJpbGl0eSBp PQpzIGNoZWNrZWQgaW4gYW4gZW50aXJlbHkgZGlmZmVyZW50IHdheQorICAgICMgICB0aGFuIHRo b3NlIHJlc291cmNlcyB0aGF0IGhhdmUgYSB1c2VyIGF0dHJpYnV0ZSAoaGlzdG9yaWVzLCBwYWdl cyw9CiBldGMuKQorICAgIGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgZGF0YXNldCwg dXNlciApOgorICAgICAgICBpZiBzZWxmLnVzZXJfbWdyLmlzX2FkbWluKCB0cmFucywgdXNlciAp OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgc2VsZi5oYXNfYWNjZXNzX3Bl cm1pc3Npb24oIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CisgICAgICAgICAgICByZXR1cm4gVHJ1 ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYXNfYWNjZXNzX3Blcm1pc3Npb24o IHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CisgICAgICAgIHJldHVybiB0cmFucy5hcHAu c2VjdXJpdHlfYWdlbnQuY2FuX2FjY2Vzc19kYXRhc2V0KCB1c2VyLnJvbGVzLCBkYT0KdGFzZXQg KQorCisgICAgI2RlZiBnaXZlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNl dCwgdXNlciApOgorICAgICMgICAgcGVybWlzc2lvbiA9M0Qge30KKyAgICAjICAgICNUT0RPOj8/ IGlzIHRoaXMgY29ycmVjdCBhbmQgcmVsaWFibGU/CisgICAgIyAgICB1c2VyX3ByaXZhdGVfcm9s ZSA9M0Qgc2VsZi51c2VyX21nci5wcml2YXRlX3JvbGUoIHRyYW5zLCB1c2VyICkKKyAgICAjICAg IHBlcm1pc3Npb25bIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5wZXJtaXR0ZWRfYWN0aW9ucy5E QVRBU0VUX0FDPQpDRVNTIF0gPTNEIFsgdXNlcl9wcml2YXRlX3JvbGUgXQorICAgICMgICAgdHJh bnMuYXBwLnNlY3VyaXR5X2FnZW50LnNldF9kYXRhc2V0X3Blcm1pc3Npb24oIGRhdGFzZXQsIHBl cm1pc3M9CmlvbiApCisKKworICAgICNkZWYgcmVtb3ZlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxm LCB0cmFucywgZGF0YXNldCwgdXNlciApOgorICAgICMgICAgcGFzcworCisKKyAgICAjZGVmIGhh c19tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKKyAgICAj ICAgIHBhc3MKKyAgICAjCisgICAgI2RlZiBnaXZlX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0 cmFucywgZGF0YXNldCwgdXNlciApOgorICAgICMgICAgcGFzcworICAgICMKKyAgICAjZGVmIHJl bW92ZV9tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKKyAg ICAjICAgIHBhc3MKKworCisgICAgI1RPRE86IGltcGxlbWVudCBhYm92ZSBmb3IgZ3JvdXBzCisK KyNUT0RPOiBkYXRhdHlwZXM/CisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIERhdGFzZXRBc3NvY2lh dGlvbk1hbmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbEluPQp0 ZXJmYWNlLCBiYXNlLlB1cmdhYmxlTW9kZWxJbnRlcmZhY2UgKToKKworICAgIGRlZiBfX2luaXRf Xyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVyKCBEYXRhc2V0QXNzb2NpYXRpb25NYW5hZ2Vy LCBzZWxmICkuX19pbml0X18oIGFwcCApCisgICAgICAgIHNlbGYuZGF0YXNldF9tZ3IgPTNEIERh dGFzZXRNYW5hZ2VyKCBhcHAgKQorCisgICAgZGVmIGlzX2FjY2Vzc2libGUoIHNlbGYsIHRyYW5z LCBkYXRhc2V0X2Fzc29jLCB1c2VyICk6CisgICAgICAgICMgZGVmZXIgdG8gdGhlIGRhdGFzZXQK KyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YXNldF9tZ3IuaXNfYWNjZXNzaWJsZSggdHJhbnMsIGRh dGFzZXRfYXNzb2MuZGF0YXNlPQp0LCB1c2VyICkKCmRpZmYgLXIgY2M3MTQ3NTE0ZDc3Nzk5OTg5 Nzc3ZmQyMWFhODE4ZTQzZDlmM2QzOSAtciA3NDBkNzU4YzIyODViZWMxNDBlNjkwMT0KMDI1ZTkw NmY1MGEwZDdhMmEgbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkv bWFuYWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKQEAgLTQs OTMgKzQsMTA0IEBACiBIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9ucyAoSERBcykgYXJlIGRhdGFz ZXRzIGNvbnRhaW5lZCBvciBjcmVhdGVkIGluIGEKIGhpc3RvcnkuCiAiIiIKLQorZnJvbSBnYWxh eHkgaW1wb3J0IG1vZGVsCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwo9MjAKLWZyb20g Z2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlIGFzIG1hbmFnZXJfYmFzZQotZnJvbSBnYWxheHku bWFuYWdlcnMgaW1wb3J0IGhpc3RvcmllcyBhcyBoaXN0b3J5X21hbmFnZXIKK2ltcG9ydCBiYXNl CitpbXBvcnQgaGlzdG9yaWVzCitpbXBvcnQgZGF0YXNldHMKPTIwCiBpbXBvcnQgZ2FsYXh5Lndl YgogaW1wb3J0IGdhbGF4eS5kYXRhdHlwZXMubWV0YWRhdGEKIGZyb20gZ2FsYXh5IGltcG9ydCBv YmplY3RzdG9yZQo9MjAKLWNsYXNzIEhEQU1hbmFnZXIoIG1hbmFnZXJfYmFzZS5Nb2RlbE1hbmFn ZXIgKToKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIEhEQU1hbmFnZXIoIGRhdGFzZXRzLkRhdGFzZXRB c3NvY2lhdGlvbk1hbmFnZXIgKToKICAgICAiIiIKICAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmpl Y3QgZm9yIGludGVyYWN0aW5nIHdpdGggSERBcy4KICAgICAiIiIKKyAgICBtb2RlbF9jbGFzcyA9 M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbgorICAgIGRlZmF1bHRfb3JkZXJfYnkg PTNEICggbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbi5jcmVhdGVfdGltZSwgKQo9MjAK LSAgICBkZWYgX19pbml0X18oIHNlbGYgKToKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCAp OgogICAgICAgICAiIiIKICAgICAgICAgU2V0IHVwIGFuZCBpbml0aWFsaXplIG90aGVyIG1hbmFn ZXJzIG5lZWRlZCBieSBoZGFzLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5oaXN0b3JpZXNf bWdyID0zRCBoaXN0b3J5X21hbmFnZXIuSGlzdG9yeU1hbmFnZXIoKQorICAgICAgICBzdXBlcigg SERBTWFuYWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQo9MjAKLSAgICBkZWYgZ2V0KCBzZWxm LCB0cmFucywgdW5lbmNvZGVkX2lkLCBjaGVja19vd25lcnNoaXA9M0RUcnVlLCBjaGVja19hY2Nl PQpzc2libGU9M0RUcnVlICk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQgYW4gSERBIGJ5IGl0 cyB1bmVuY29kZWQgZGIgaWQsIGNoZWNraW5nIG93bmVyc2hpcCAodmlhIGl0cyBoaXM9CnRvcnkp Ci0gICAgICAgIG9yIGFjY2Vzc2liaWxpdHkgKHZpYSBkYXRhc2V0IHNoYXJlcy9wZXJtaXNzaW9u cykuCi0gICAgICAgICIiIgotICAgICAgICBoZGEgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnko IHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldEFzc289CmNpYXRpb24gKS5nZXQoIHVuZW5j b2RlZF9pZCApCi0gICAgICAgIGlmIGhkYSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgZXhj ZXB0aW9ucy5PYmplY3ROb3RGb3VuZCgpCi0gICAgICAgIGhkYSA9M0Qgc2VsZi5zZWN1cmUoIHRy YW5zLCBoZGEsIGNoZWNrX293bmVyc2hpcCwgY2hlY2tfYWNjZXNzaWJsZT0KICkKKyAgICBkZWYg Y3JlYXRlKCBzZWxmLCB0cmFucywgaGlzdG9yeT0zRE5vbmUsIGRhdGFzZXQ9M0ROb25lLCBmbHVz aD0zRFRydWUsPQogKiprd2FyZ3MgKToKKyAgICAgICAgaWYgbm90IGRhdGFzZXQ6CisgICAgICAg ICAgICBrd2FyZ3NbICdjcmVhdGVfZGF0YXNldCcgXSA9M0QgVHJ1ZQorICAgICAgICBoZGEgPTNE IHN1cGVyKCBIREFNYW5hZ2VyLCBzZWxmICkuY3JlYXRlKCB0cmFucywgZmx1c2g9M0RmbHVzaCwK KyAgICAgICAgICAgIGhpc3Rvcnk9M0RoaXN0b3J5LCBkYXRhc2V0PTNEZGF0YXNldCwgc2Ffc2Vz c2lvbj0zRHRyYW5zLnNhX3NlPQpzc2lvbiwgKiprd2FyZ3MgKQorICAgICAgICB0cmFucy5zYV9z ZXNzaW9uLmFkZCggaGRhICkKKyAgICAgICAgaWYgZmx1c2g6CisgICAgICAgICAgICB0cmFucy5z YV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIGhkYQo9MjAKLSAgICBkZWYgc2VjdXJl KCBzZWxmLCB0cmFucywgaGRhLCBjaGVja19vd25lcnNoaXA9M0RUcnVlLCBjaGVja19hY2Nlc3Np YmxlPQo9M0RUcnVlICk6Ci0gICAgICAgICIiIgotICAgICAgICBjaGVjayBvd25lcnNoaXAgKHZp YSBpdHMgaGlzdG9yeSkgb3IgYWNjZXNzaWJpbGl0eSAodmlhIGRhdGFzZXQKLSAgICAgICAgc2hh cmVzL3Blcm1pc3Npb25zKS4KLSAgICAgICAgIiIiCi0gICAgICAgICMgYWxsIGl0ZW1zIGFyZSBh Y2Nlc3NpYmxlIHRvIGFuIGFkbWluCi0gICAgICAgIGlmIHRyYW5zLnVzZXIgYW5kIHRyYW5zLnVz ZXJfaXNfYWRtaW4oKToKLSAgICAgICAgICAgIHJldHVybiBoZGEKLSAgICAgICAgaWYgY2hlY2tf b3duZXJzaGlwOgotICAgICAgICAgICAgaGRhID0zRCBzZWxmLmNoZWNrX293bmVyc2hpcCggdHJh bnMsIGhkYSApCi0gICAgICAgIGlmIGNoZWNrX2FjY2Vzc2libGU6Ci0gICAgICAgICAgICBoZGEg PTNEIHNlbGYuY2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYSApCisgICAgZGVmIGNvcHlfaGRh KCBzZWxmLCB0cmFucywgaGRhLCBoaXN0b3J5PTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICAgICAg I1RPRE86Pz8gbm90IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXMgdGhpcyBmbiBkb2VzIG5vdCBzZXQg aGlzdG9yeSBhPQpuZCBDT1BJRVMgaGlkICh0aGlzIGRvZXNuJ3Qgc2VlbSBjb3JyZWN0KQorICAg ICAgICAjcmV0dXJuIGhkYS5jb3B5KCkKKyAgICAgICAgY29weSA9M0QgbW9kZWwuSGlzdG9yeURh dGFzZXRBc3NvY2lhdGlvbigKKyAgICAgICAgICAgIG5hbWUgICAgICAgID0zRCBoZGEubmFtZSwK KyAgICAgICAgICAgIGluZm8gICAgICAgID0zRCBoZGEuaW5mbywKKyAgICAgICAgICAgIGJsdXJi ICAgICAgID0zRCBoZGEuYmx1cmIsCisgICAgICAgICAgICBwZWVrICAgICAgICA9M0QgaGRhLnBl ZWssCisgICAgICAgICAgICB0b29sX3ZlcnNpb249M0QgaGRhLnRvb2xfdmVyc2lvbiwKKyAgICAg ICAgICAgIGV4dGVuc2lvbiAgID0zRCBoZGEuZXh0ZW5zaW9uLAorICAgICAgICAgICAgZGJrZXkg ICAgICAgPTNEIGhkYS5kYmtleSwKKyAgICAgICAgICAgIGRhdGFzZXQgICAgID0zRCBoZGEuZGF0 YXNldCwKKyAgICAgICAgICAgIHZpc2libGUgICAgID0zRCBoZGEudmlzaWJsZSwKKyAgICAgICAg ICAgIGRlbGV0ZWQgICAgID0zRCBoZGEuZGVsZXRlZCwKKyAgICAgICAgICAgIHBhcmVudF9pZCAg ID0zRCBrd2FyZ3MuZ2V0KCAncGFyZW50X2lkJywgTm9uZSApLAorICAgICAgICApCisgICAgICAg ICMgYWRkX2RhdGFzZXQgd2lsbCB1cGRhdGUgdGhlIGhpZCB0byB0aGUgbmV4dCBhdmFpbC4gaW4g aGlzdG9yeQorICAgICAgICBpZiBoaXN0b3J5OgorICAgICAgICAgICAgaGlzdG9yeS5hZGRfZGF0 YXNldCggY29weSApCisKKyAgICAgICAgY29weS5jb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRf YXNzb2NpYXRpb24gPTNEIGhkYQorICAgICAgICBjb3B5LnNldF9zaXplKCkKKworICAgICAgICAj IE5lZWQgdG8gc2V0IGFmdGVyIGZsdXNoZWQsIGFzIE1ldGFkYXRhRmlsZXMgcmVxdWlyZSBkYXRh c2V0LmlkCisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBjb3B5ICkKKyAgICAgICAgdHJh bnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIGNvcHkubWV0YWRhdGEgPTNEIGhkYS5tZXRh ZGF0YQorCisgICAgICAgICMgSW4gc29tZSBpbnN0YW5jZXMgcGVlayByZWxpZXMgb24gZGF0YXNl dF9pZCwgaS5lLiBnbWFqLnppcCBmb3Igdj0KaWV3aW5nIE1BRnMKKyAgICAgICAgaWYgbm90IGhk YS5kYXRhdHlwZS5jb3B5X3NhZmVfcGVlazoKKyAgICAgICAgICAgIGNvcHkuc2V0X3BlZWsoKQor CisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICByZXR1cm4gY29weQor CisgICAgZGVmIGNvcHlfbGRkYSggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGxkZGEsICoqa3dhcmdz ICk6CisgICAgICAgIHJldHVybiBsZGRhLnRvX2hpc3RvcnlfZGF0YXNldF9hc3NvY2lhdGlvbigg aGlzdG9yeSwgYWRkX3RvX2hpc3Rvcj0KeT0zRFRydWUgKQorCisjICAgIGRlZiBieV9oaXN0b3J5 X2lkKCBzZWxmLCB0cmFucywgaGlzdG9yeV9pZCwgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzID0K KToKKyMgICAgICAgIGhpc3RvcnlfaWRfZmlsdGVyID0zRCBzZWxmLm1vZGVsX2NsYXNzLmhpc3Rv cnlfaWQgPTNEPTNEIGhpc3RvcnlfPQppZAorIyAgICAgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVu Z2VfZmlsdGVycyggaGlzdG9yeV9pZF9maWx0ZXIsIGZpbHRlcnMgKQorIyAgICAgICAgcmV0dXJu IHNlbGYubGlzdCggdHJhbnMsIGZpbHRlcnM9M0RmaWx0ZXJzLCAqKmt3YXJncyApCisjCisjICAg ICNkZWYgYnlfaGlzdG9yeSggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGZpbHRlcnM9M0ROb25lLCAq Kmt3YXJncyApOgorIyAgICAjICAgIHJldHVybiBoaXN0b3J5LmRhdGFzZXRzCisKKyAgICBkZWYg cHVyZ2UoIHNlbGYsIHRyYW5zLCBoZGEgKToKKyAgICAgICAgc2VsZi5lcnJvcl91bmxlc3NfZGF0 YXNldF9wdXJnZV9hbGxvd2VkKCB0cmFucywgaGRhICkKKyAgICAgICAgc3VwZXIoIEhEQU1hbmFn ZXIsIHNlbGYgKS5wdXJnZSggdHJhbnMsIGhkYSwgZmx1c2g9M0RUcnVlICkKKworICAgICAgICAj IHNpZ25hbCB0byBzdG9wIHRoZSBjcmVhdGluZyBqb2I/CisgICAgICAgIGlmIGhkYS5jcmVhdGlu Z19qb2JfYXNzb2NpYXRpb25zOgorICAgICAgICAgICAgam9iID0zRCBoZGEuY3JlYXRpbmdfam9i X2Fzc29jaWF0aW9uc1swXS5qb2IKKyAgICAgICAgICAgIGpvYi5tYXJrX2RlbGV0ZWQoIHNlbGYu YXBwLmNvbmZpZy50cmFja19qb2JzX2luX2RhdGFiYXNlICkKKyAgICAgICAgICAgIHNlbGYuYXBw LmpvYl9tYW5hZ2VyLmpvYl9zdG9wX3F1ZXVlLnB1dCggam9iLmlkICkKKworICAgICAgICAjIG1v cmUgaW1wb3J0YW50bHksIHB1cmdlIGRhdGFzZXQgYXMgd2VsbAorICAgICAgICBpZiBoZGEuZGF0 YXNldC51c2VyX2Nhbl9wdXJnZToKKyAgICAgICAgICAgIHNlbGYuZGF0YXNldF9tZ3IucHVyZ2Uo IHRyYW5zLCBoZGEuZGF0YXNldCApCiAgICAgICAgIHJldHVybiBoZGEKPTIwCi0gICAgZGVmIGNh bl9hY2Nlc3NfZGF0YXNldCggc2VsZiwgdHJhbnMsIGhkYSApOgotICAgICAgICAiIiIKLSAgICAg ICAgVXNlIHNlY3VyaXR5IGFnZW50IHRvIHNlZSBpZiBjdXJyZW50IHVzZXIgaGFzIGFjY2VzcyB0 byBkYXRhc2V0LgotICAgICAgICAiIiIKLSAgICAgICAgY3VycmVudF91c2VyX3JvbGVzID0zRCB0 cmFucy5nZXRfY3VycmVudF91c2VyX3JvbGVzKCkKLSAgICAgICAgcmV0dXJuIHRyYW5zLmFwcC5z ZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIGN1cnJlbnRfdXNlcl9yPQpvbGVzLCBo ZGEuZGF0YXNldCApCi0KLSAgICAjVE9ETzogaXNfb3duZXIsIGlzX2FjY2Vzc2libGUKLQotICAg IGRlZiBjaGVja19vd25lcnNoaXAoIHNlbGYsIHRyYW5zLCBoZGEgKToKLSAgICAgICAgIiIiCi0g ICAgICAgIFVzZSBoaXN0b3J5IHRvIHNlZSBpZiBjdXJyZW50IHVzZXIgb3ducyBIREEuCi0gICAg ICAgICIiIgotICAgICAgICBpZiBub3QgdHJhbnMudXNlcjoKLSAgICAgICAgICAgICNpZiBoZGEu aGlzdG9yeSA9M0Q9M0QgdHJhbnMuaGlzdG9yeToKLSAgICAgICAgICAgICMgICAgcmV0dXJuIGhk YQotICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5BdXRoZW50aWNhdGlvblJlcXVpcmVkKCAi TXVzdCBiZSBsb2dnZWQgaW4gdG89CiBtYW5hZ2UgR2FsYXh5IGRhdGFzZXRzIiwgdHlwZT0zRCdl cnJvcicgKQotICAgICAgICBpZiB0cmFucy51c2VyX2lzX2FkbWluKCk6Ci0gICAgICAgICAgICBy ZXR1cm4gaGRhCi0gICAgICAgICMgY2hlY2sgZm9yIG93bmVyc2hpcCBvZiB0aGUgY29udGFpbmlu ZyBoaXN0b3J5IGFuZCBhY2Nlc3NpYmlsaXR5ID0Kb2YgdGhlIHVuZGVybHlpbmcgZGF0YXNldAot ICAgICAgICBpZiggc2VsZi5oaXN0b3JpZXNfbWdyLmlzX293bmVyKCB0cmFucywgaGRhLmhpc3Rv cnkgKQotICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNhbl9hY2Nlc3NfZGF0YXNldCggdHJhbnMs IGhkYSApICk6Ci0gICAgICAgICAgICByZXR1cm4gaGRhCi0gICAgICAgIHJhaXNlIGV4Y2VwdGlv bnMuSXRlbU93bmVyc2hpcEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJIaXN0b3J5RGF0YXNldEFz c29jaWF0aW9uIGlzIG5vdCBvd25lZCBieSB0aGUgY3VycmVudCB1c2VyIiwgPQp0eXBlPTNEJ2Vy cm9yJyApCi0KLSAgICBkZWYgY2hlY2tfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGhkYSApOgot ICAgICAgICAiIiIKLSAgICAgICAgUmFpc2UgZXJyb3IgaWYgSERBIGlzIG5vdCBhY2Nlc3NpYmxl LgotICAgICAgICAiIiIKLSAgICAgICAgaWYgdHJhbnMudXNlciBhbmQgdHJhbnMudXNlcl9pc19h ZG1pbigpOgotICAgICAgICAgICAgcmV0dXJuIGhkYQotICAgICAgICAjIGNoZWNrIGZvciBhY2Nl c3Mgb2YgdGhlIGNvbnRhaW5pbmcgaGlzdG9yeS4uLgotICAgICAgICBzZWxmLmhpc3Rvcmllc19t Z3IuY2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYS5oaXN0b3J5ICkKLSAgICAgICAgIyAuLi50 aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGFzZXQKLSAgICAgICAgaWYgc2VsZi5jYW5fYWNjZXNzX2Rh dGFzZXQoIHRyYW5zLCBoZGEgKToKLSAgICAgICAgICAgIHJldHVybiBoZGEKLSAgICAgICAgcmFp c2UgZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjdXJyZW50 IHVzPQplciIsIHR5cGU9M0QnZXJyb3InICkKLQotICAgIGRlZiBlcnJfaWZfdXBsb2FkaW5nKCBz ZWxmLCB0cmFucywgaGRhICk6CisgICAgZGVmIGVycm9yX2lmX3VwbG9hZGluZyggc2VsZiwgdHJh bnMsIGhkYSApOgogICAgICAgICAiIiIKICAgICAgICAgUmFpc2UgZXJyb3IgaWYgSERBIGlzIHN0 aWxsIHVwbG9hZGluZy4KICAgICAgICAgIiIiCkBAIC05OCw2ICsxMDksOCBAQAogICAgICAgICAg ICAgcmFpc2UgZXhjZXB0aW9ucy5Db25mbGljdCggIlBsZWFzZSB3YWl0IHVudGlsIHRoaXMgZGF0 YXNldCBmaW49CmlzaGVzIHVwbG9hZGluZyIgKQogICAgICAgICByZXR1cm4gaGRhCj0yMAorICAg ICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi49Ci4uLi4uIHNlcmlhbGl6YXRpb24KKyAgICAjVE9ETzogbW92ZSBpbnRv IHNlcmlhbGl6ZXIgYmVsb3cKICAgICBkZWYgZ2V0X2hkYV9kaWN0KCBzZWxmLCB0cmFucywgaGRh ICk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gZnVsbCBkZXRhaWxzIG9mIHRoaXMgSERB IGluIGRpY3Rpb25hcnkgZm9ybS4KQEAgLTIzMiwxMCArMjQ1LDM5MyBAQAo9MjAKICAgICAgICAg cmV0dXJuIGRpc3BsYXlfYXBwcwo9MjAKKyAgICAjZGVmIGdldF9kYXRhc2V0KCBzZWxmLCB0cmFu cywgZGF0YXNldF9pZCwgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlPQpja19hY2Nlc3NpYmxl PTNERmFsc2UsIGNoZWNrX3N0YXRlPTNEVHJ1ZSApOgorICAgICMgICAgIiIiCisgICAgIyAgICBH ZXQgYW4gSERBIG9iamVjdCBieSBpZCBwZXJmb3JtaW5nIHNlY3VyaXR5IGNoZWNrcyB1c2luZwor ICAgICMgICAgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgICAgIyAgICAiIiIKKyAgICAjICAg IHRyeToKKyAgICAjICAgICAgICBkYXRhc2V0X2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVf aWQoIGRhdGFzZXRfaWQgKQorICAgICMgICAgZXhjZXB0ICggQXR0cmlidXRlRXJyb3IsIFR5cGVF cnJvciApOgorICAgICMgICAgICAgICMgREVQUkVDQVRJT046IFdlIHN0aWxsIHN1cHBvcnQgdW5l bmNvZGVkIGlkcyBmb3IgYmFja3dhcmQgY289Cm1wYXRpYmlsaXR5CisgICAgIyAgICAgICAgdHJ5 OgorICAgICMgICAgICAgICAgICBkYXRhc2V0X2lkID0zRCBpbnQoIGRhdGFzZXRfaWQgKQorICAg ICMgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICMgICAgICAgICAgICByYWlzZSBIVFRQ QmFkUmVxdWVzdCggIkludmFsaWQgZGF0YXNldCBpZDogJXMuIiAlIHN0ciggZGE9CnRhc2V0X2lk ICkgKQorICAgICMKKyAgICAjICAgIHRyeToKKyAgICAjICAgICAgICBkYXRhID0zRCB0cmFucy5z YV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFzPQpldEFzc29jaWF0 aW9uICkuZ2V0KCBpbnQoIGRhdGFzZXRfaWQgKSApCisgICAgIyAgICBleGNlcHQ6CisgICAgIyAg ICAgICAgcmFpc2UgSFRUUFJlcXVlc3RSYW5nZU5vdFNhdGlzZmlhYmxlKCAiSW52YWxpZCBkYXRh c2V0IGlkOiAlcz0KLiIgJSBzdHIoIGRhdGFzZXRfaWQgKSApCisgICAgIworICAgICMgICAgaWYg Y2hlY2tfb3duZXJzaGlwOgorICAgICMgICAgICAgICMgVmVyaWZ5IG93bmVyc2hpcC4KKyAgICAj ICAgICAgICB1c2VyID0zRCB0cmFucy5nZXRfdXNlcigpCisgICAgIyAgICAgICAgaWYgbm90IHVz ZXI6CisgICAgIyAgICAgICAgICAgIGVycm9yKCAiTXVzdCBiZSBsb2dnZWQgaW4gdG8gbWFuYWdl IEdhbGF4eSBpdGVtcyIgKQorICAgICMgICAgICAgIGlmIGRhdGEuaGlzdG9yeS51c2VyICE9M0Qg dXNlcjoKKyAgICAjICAgICAgICAgICAgZXJyb3IoICIlcyBpcyBub3Qgb3duZWQgYnkgY3VycmVu dCB1c2VyIiAlIGRhdGEuX19jbGFzc19fPQouX19uYW1lX18gKQorICAgICMKKyAgICAjICAgIGlm IGNoZWNrX2FjY2Vzc2libGU6CisgICAgIyAgICAgICAgY3VycmVudF91c2VyX3JvbGVzID0zRCB0 cmFucy5nZXRfY3VycmVudF91c2VyX3JvbGVzKCkKKyAgICAjCisgICAgIyAgICAgICAgaWYgbm90 IHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIGN1cnJlbnRfdT0K c2VyX3JvbGVzLCBkYXRhLmRhdGFzZXQgKToKKyAgICAjICAgICAgICAgICAgZXJyb3IoICJZb3Ug YXJlIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyB0aGlzIGRhdGFzZXQiICkKKyAgICAjCisgICAgIyAg ICAgICAgaWYgY2hlY2tfc3RhdGUgYW5kIGRhdGEuc3RhdGUgPTNEPTNEIHRyYW5zLm1vZGVsLkRh dGFzZXQuc3RhdD0KZXMuVVBMT0FEOgorICAgICMgICAgICAgICAgICByZXR1cm4gdHJhbnMuc2hv d19lcnJvcl9tZXNzYWdlKCAiUGxlYXNlIHdhaXQgdW50aWwgdGhpcyA9CmRhdGFzZXQgZmluaXNo ZXMgdXBsb2FkaW5nICIKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArICJiZWZvcmUgYXR0ZW1wdGluZyB0PQpvIHZpZXcgaXQuIiApCisgICAgIyAg ICByZXR1cm4gZGF0YQorICAgICMKKyAgICAjZGVmIGdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2Np YXRpb24oIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCBkYXRhc2V0X2lkLAorICAgICMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlY2tf YWM9CmNlc3NpYmxlPTNERmFsc2UsIGNoZWNrX3N0YXRlPTNERmFsc2UgKToKKyAgICAjICAgICIi IgorICAgICMgICAgR2V0IGEgSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiBmcm9tIHRoZSBkYXRh YmFzZSBieSBpZCwgdmVyaWZ5aW49Cmcgb3duZXJzaGlwLgorICAgICMgICAgIiIiCisgICAgIyAg ICAjVE9ETzogZHVwbGljYXRlIG9mIGFib3ZlPyBhbGlhcyB0byBhYm92ZSAob3IgdmlzLXZlcnNh KQorICAgICMgICAgc2VsZi5zZWN1cml0eV9jaGVjayggdHJhbnMsIGhpc3RvcnksIGNoZWNrX293 bmVyc2hpcD0zRGNoZWNrX293bmU9CnJzaGlwLCBjaGVja19hY2Nlc3NpYmxlPTNEY2hlY2tfYWNj ZXNzaWJsZSApCisgICAgIyAgICBoZGEgPTNEIHNlbGYuZ2V0X29iamVjdCggdHJhbnMsIGRhdGFz ZXRfaWQsICdIaXN0b3J5RGF0YXNldEFzc29jaT0KYXRpb24nLAorICAgICMgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0K PTNERmFsc2UgKQorICAgICMKKyAgICAjICAgIGlmIGNoZWNrX2FjY2Vzc2libGU6CisgICAgIyAg ICAgICAgaWYoIG5vdCB0cmFucy51c2VyX2lzX2FkbWluKCkKKyAgICAjICAgICAgICBhbmQgbm90 IHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHRyYW5zLmdlPQp0 X2N1cnJlbnRfdXNlcl9yb2xlcygpLCBoZGEuZGF0YXNldCApICk6CisgICAgIyAgICAgICAgICAg IGVycm9yKCAiWW91IGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlc3MgdGhpcyBkYXRhc2V0IiApCisg ICAgIworICAgICMgICAgICAgIGlmIGNoZWNrX3N0YXRlIGFuZCBoZGEuc3RhdGUgPTNEPTNEIHRy YW5zLm1vZGVsLkRhdGFzZXQuc3RhdGU9CnMuVVBMT0FEOgorICAgICMgICAgICAgICAgICBlcnJv ciggIlBsZWFzZSB3YWl0IHVudGlsIHRoaXMgZGF0YXNldCBmaW5pc2hlcyB1cGxvYWRpbmc9CiBi ZWZvcmUgYXR0ZW1wdGluZyB0byB2aWV3IGl0LiIgKQorICAgICMgICAgcmV0dXJuIGhkYQorICAg ICMKKyAgICAjZGVmIGdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25fZnJvbV9pZHMoIHNl bGYsIHRyYW5zLCBpZCwgaGlzdG9yPQp5X2lkICk6CisgICAgIyAgICAjIEp1c3QgdG8gZWNobyBv dGhlciBUT0RPcywgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBvdmVybGFwIGhlcmUsID0Kc3RpbGwK KyAgICAjICAgICMgdGhpcyBibG9jayBhcHBlYXJzIG11bHRpcGxlIHBsYWNlcyAoZGF0YXNldCBz aG93LCBoaXN0b3J5X2NvbnRlPQpudHMKKyAgICAjICAgICMgc2hvdywgdXBjb21pbmcgaGlzdG9y eSBqb2Igc2hvdykgc28gSSBhbSBjb25zb2xvZGF0aW5nIGl0IGhlcmUuCisgICAgIyAgICAjIFNv bWVvbmUgc21hcnRlciB0aGFuIG1lIHNob3VsZCBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgc29tZSBy ZWR1bj0KZGFuY3kgaGVyZS4KKyAgICAjCisgICAgIyAgICAjIGZvciBhbm9uIHVzZXJzOgorICAg ICMgICAgI1RPRE86IGNoZWNrIGxvZ2luX3JlcXVpcmVkPworICAgICMgICAgI1RPRE86IHRoaXMg aXNuJ3QgYWN0dWFsbHkgbW9zdF9yZWNlbnRseV91c2VkIChhcyBkZWZpbmVkIGluIGhpc3Q9Cm9y aWVzKQorICAgICMgICAgaWYoICggdHJhbnMudXNlciA9M0Q9M0QgTm9uZSApCisgICAgIyAgICBh bmQgKCBoaXN0b3J5X2lkID0zRD0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5zLmhp c3RvcnkuaT0KZCApICkgKToKKyAgICAjICAgICAgICBoaXN0b3J5ID0zRCB0cmFucy5oaXN0b3J5 CisgICAgIyAgICAgICAgI1RPRE86IGRhdGFzZXQvaGRhIGJ5IGlkIChmcm9tIGhpc3RvcnkpIE9S IGNoZWNrX293bmVyc2hpcCBmbz0KciBhbm9uIHVzZXIKKyAgICAjICAgICAgICBoZGEgPTNEIHNl bGYuZ2V0X2hpc3RvcnlfZGF0YXNldF9hc3NvY2lhdGlvbiggdHJhbnMsIGhpc3RvcnksPQogaWQs CisgICAgIyAgICAgICAgICAgIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBjaGVja19hY2Nlc3Np YmxlPTNEVHJ1ZSApCisgICAgIyAgICBlbHNlOgorICAgICMgICAgICAgICNUT0RPOiBkbyB3ZSBy ZWFsbHkgbmVlZCB0aGUgaGlzdG9yeT8KKyAgICAjICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdl dF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCwKKyAgICAjICAgICAgICAgICAgY2hlY2tfb3du ZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlLCBkZWxldGVkPQo9M0RGYWxz ZSApCisgICAgIyAgICAgICAgaGRhID0zRCBzZWxmLmdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2Np YXRpb24oIHRyYW5zLCBoaXN0b3J5LD0KIGlkLAorICAgICMgICAgICAgICAgICBjaGVja19vd25l cnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQorICAgICMgICAgcmV0dXJu IGhkYQorICAgICMKKyAgICAjZGVmIGdldF9oZGFfbGlzdCggc2VsZiwgdHJhbnMsIGhkYV9pZHMs IGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNoZWNrPQpfYWNjZXNzaWJsZT0zREZhbHNlLCBjaGVj a19zdGF0ZT0zRFRydWUgKToKKyAgICAjICAgICIiIgorICAgICMgICAgUmV0dXJucyBvbmUgb3Ig bW9yZSBkYXRhc2V0cyBpbiBhIGxpc3QuCisgICAgIworICAgICMgICAgSWYgYSBkYXRhc2V0IGlz IG5vdCBmb3VuZCBvciBpcyBpbmFjY2Vzc2libGUgdG8gdHJhbnMudXNlciwKKyAgICAjICAgIGFk ZCBOb25lIGluIGl0cyBwbGFjZSBpbiB0aGUgbGlzdC4KKyAgICAjICAgICIiIgorICAgICMgICAg IyBwcmVjb25kdGlvbjogZGF0YXNldF9pZHMgaXMgYSBsaXN0IG9mIGVuY29kZWQgaWQgc3RyaW5n cworICAgICMgICAgaGRhcyA9M0QgW10KKyAgICAjICAgIGZvciBpZCBpbiBoZGFfaWRzOgorICAg ICMgICAgICAgIGhkYSA9M0QgTm9uZQorICAgICMgICAgICAgIHRyeToKKyAgICAjICAgICAgICAg ICAgaGRhID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWQsCisgICAgIyAgICAgICAgICAg ICAgICBjaGVja19vd25lcnNoaXA9M0RjaGVja19vd25lcnNoaXAsCisgICAgIyAgICAgICAgICAg ICAgICBjaGVja19hY2Nlc3NpYmxlPTNEY2hlY2tfYWNjZXNzaWJsZSwKKyAgICAjICAgICAgICAg ICAgICAgIGNoZWNrX3N0YXRlPTNEY2hlY2tfc3RhdGUgKQorICAgICMgICAgICAgIGV4Y2VwdCBF eGNlcHRpb246CisgICAgIyAgICAgICAgICAgIHBhc3MKKyAgICAjICAgICAgICBoZGFzLmFwcGVu ZCggaGRhICkKKyAgICAjICAgIHJldHVybiBoZGFzCisgICAgIworICAgICNkZWYgZ2V0X2RhdGEo IHNlbGYsIGRhdGFzZXQsIHByZXZpZXc9M0RUcnVlICk6CisgICAgIyAgICAiIiIKKyAgICAjICAg IEdldHMgYSBkYXRhc2V0J3MgZGF0YS4KKyAgICAjICAgICIiIgorICAgICMgICAgIyBHZXQgZGF0 YSBmcm9tIGZpbGUsIHRydW5jYXRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICMgICAgdHJ1bmNhdGVk ID0zRCBGYWxzZQorICAgICMgICAgZGF0YXNldF9kYXRhID0zRCBOb25lCisgICAgIyAgICBpZiBv cy5wYXRoLmV4aXN0cyggZGF0YXNldC5maWxlX25hbWUgKToKKyAgICAjICAgICAgICBpZiBpc2lu c3RhbmNlKCBkYXRhc2V0LmRhdGF0eXBlLCBUZXh0ICk6CisgICAgIyAgICAgICAgICAgIG1heF9w ZWVrX3NpemUgPTNEIDEwMDAwMDAgIyAxIE1CCisgICAgIyAgICAgICAgICAgIGlmIHByZXZpZXcg YW5kIG9zLnN0YXQoIGRhdGFzZXQuZmlsZV9uYW1lICkuc3Rfc2l6ZSA+IG1heD0KX3BlZWtfc2l6 ZToKKyAgICAjICAgICAgICAgICAgICAgIGRhdGFzZXRfZGF0YSA9M0Qgb3BlbiggZGF0YXNldC5m aWxlX25hbWUgKS5yZWFkKG1heF9wPQplZWtfc2l6ZSkKKyAgICAjICAgICAgICAgICAgICAgIHRy dW5jYXRlZCA9M0QgVHJ1ZQorICAgICMgICAgICAgICAgICBlbHNlOgorICAgICMgICAgICAgICAg ICAgICAgZGF0YXNldF9kYXRhID0zRCBvcGVuKCBkYXRhc2V0LmZpbGVfbmFtZSApLnJlYWQobWF4 X3A9CmVla19zaXplKQorICAgICMgICAgICAgICAgICAgICAgdHJ1bmNhdGVkID0zRCBGYWxzZQor ICAgICMgICAgICAgIGVsc2U6CisgICAgIyAgICAgICAgICAgICMgRm9yIG5vdywgY2Fubm90IGdl dCBkYXRhIGZyb20gbm9uLXRleHQgZGF0YXNldHMuCisgICAgIyAgICAgICAgICAgIGRhdGFzZXRf ZGF0YSA9M0QgTm9uZQorICAgICMgICAgcmV0dXJuIHRydW5jYXRlZCwgZGF0YXNldF9kYXRhCisg ICAgIworICAgICNkZWYgY2hlY2tfZGF0YXNldF9zdGF0ZSggc2VsZiwgdHJhbnMsIGRhdGFzZXQg KToKKyAgICAjICAgICIiIgorICAgICMgICAgUmV0dXJucyBhIG1lc3NhZ2UgaWYgZGF0YXNldCBp cyBub3QgcmVhZHkgdG8gYmUgdXNlZCBpbiB2aXN1YWxpemE9CnRpb24uCisgICAgIyAgICAiIiIK KyAgICAjICAgIGlmIG5vdCBkYXRhc2V0OgorICAgICMgICAgICAgIHJldHVybiBkYXRhc2V0LmNv bnZlcnNpb25fbWVzc2FnZXMuTk9fREFUQQorICAgICMgICAgaWYgZGF0YXNldC5zdGF0ZSA9M0Q9 M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuRVJST1I6CisgICAgIyAgICAgICAgcmV0dXJu IGRhdGFzZXQuY29udmVyc2lvbl9tZXNzYWdlcy5FUlJPUgorICAgICMgICAgaWYgZGF0YXNldC5z dGF0ZSAhPTNEIHRyYW5zLmFwcC5tb2RlbC5Kb2Iuc3RhdGVzLk9LOgorICAgICMgICAgICAgIHJl dHVybiBkYXRhc2V0LmNvbnZlcnNpb25fbWVzc2FnZXMuUEVORElORworICAgICMgICAgcmV0dXJu IE5vbmUKKyAgICAjCisgICAgI2RlZiBnZXRfaGRhX2RpY3QoIHNlbGYsIHRyYW5zLCBoZGEgKToK KyAgICAjICAgICIiIlJldHVybiBmdWxsIGRldGFpbHMgb2YgdGhpcyBIREEgaW4gZGljdGlvbmFy eSBmb3JtLgorICAgICMgICAgIiIiCisgICAgIyAgICAjcHJlY29uZGl0aW9uOiB0aGUgdXNlcidz IGFjY2VzcyB0byB0aGlzIGhkYSBoYXMgYWxyZWFkeSBiZWVuIGNoZT0KY2tlZAorICAgICMgICAg I1RPRE86Pz8gcG9zdGNvbmRpdGlvbjogYWxsIGlkcyBhcmUgZW5jb2RlZCAoaXMgdGhpcyByZWFs bHkgd2hhdCA9CndlIHdhbnQgYXQgdGhpcyBsZXZlbD8pCisgICAgIyAgICBleHBvc2VfZGF0YXNl dF9wYXRoID0zRCB0cmFucy51c2VyX2lzX2FkbWluKCkgb3IgdHJhbnMuYXBwLmNvbmZpZz0KLmV4 cG9zZV9kYXRhc2V0X3BhdGgKKyAgICAjICAgIGhkYV9kaWN0ID0zRCBoZGEudG9fZGljdCggdmll dz0zRCdlbGVtZW50JywgZXhwb3NlX2RhdGFzZXRfcGF0aD0KPTNEZXhwb3NlX2RhdGFzZXRfcGF0 aCApCisgICAgIyAgICBoZGFfZGljdFsgJ2FwaV90eXBlJyBdID0zRCAiZmlsZSIKKyAgICAjCisg ICAgIyAgICAjIEFkZCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdGhhdCBkZXBlbmQgb24gdHJhbnMg Y2FuIGhlbmNlIG11c3QgYj0KZSBhZGRlZCBoZXJlIHJhdGhlciB0aGFuIGF0IHRoZSBtb2RlbCBs ZXZlbC4KKyAgICAjICAgIGNhbl9hY2Nlc3NfaGRhID0zRCB0cmFucy5hcHAuc2VjdXJpdHlfYWdl bnQuY2FuX2FjY2Vzc19kYXRhc2V0KCB0PQpyYW5zLmdldF9jdXJyZW50X3VzZXJfcm9sZXMoKSwg aGRhLmRhdGFzZXQgKQorICAgICMgICAgY2FuX2FjY2Vzc19oZGEgPTNEICggdHJhbnMudXNlcl9p c19hZG1pbigpIG9yIGNhbl9hY2Nlc3NfaGRhICkKKyAgICAjICAgIGlmIG5vdCBjYW5fYWNjZXNz X2hkYToKKyAgICAjICAgICAgICByZXR1cm4gc2VsZi5nZXRfaW5hY2Nlc3NpYmxlX2hkYV9kaWN0 KCB0cmFucywgaGRhICkKKyAgICAjICAgIGhkYV9kaWN0WyAnYWNjZXNzaWJsZScgXSA9M0QgVHJ1 ZQorICAgICMKKyAgICAjICAgICNUT0RPOiBJJ20gdW5jbGVhciBhcyB0byB3aGljaCBhY2Nlc3Mg cGF0dGVybiBpcyByaWdodAorICAgICMgICAgaGRhX2RpY3RbICdhbm5vdGF0aW9uJyBdID0zRCBo ZGEuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnM9CmFfc2Vzc2lvbiwgdHJhbnMudXNl ciwgaGRhICkKKyAgICAjICAgICNhbm5vdGF0aW9uID0zRCBnZXRhdHRyKCBoZGEsICdhbm5vdGF0 aW9uJywgaGRhLmdldF9pdGVtX2Fubm90YXRpPQpvbl9zdHIoIHRyYW5zLnNhX3Nlc3Npb24sIHRy YW5zLnVzZXIsIGhkYSApICkKKyAgICAjCisgICAgIyAgICAjIC0tLS0gcmV0dXJuIGhlcmUgaWYg ZGVsZXRlZCBBTkQgcHVyZ2VkIE9SIGNhbid0IGFjY2VzcworICAgICMgICAgcHVyZ2VkID0zRCAo IGhkYS5wdXJnZWQgb3IgaGRhLmRhdGFzZXQucHVyZ2VkICkKKyAgICAjICAgIGlmIGhkYS5kZWxl dGVkIGFuZCBwdXJnZWQ6CisgICAgIyAgICAgICAgI1RPRE86IHRvX2RpY3Qgc2hvdWxkIHJlYWxs eSBnbyBBRlRFUiB0aGlzIC0gb25seSBzdW1tYXJ5IGRhdGEKKyAgICAjICAgICAgICByZXR1cm4g dHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRzKCBoZGFfZGljdCApCisgICAgIworICAgICMg ICAgaWYgZXhwb3NlX2RhdGFzZXRfcGF0aDoKKyAgICAjICAgICAgICB0cnk6CisgICAgIyAgICAg ICAgICAgIGhkYV9kaWN0WyAnZmlsZV9uYW1lJyBdID0zRCBoZGEuZmlsZV9uYW1lCisgICAgIyAg ICAgICAgZXhjZXB0IG9iamVjdHN0b3JlLk9iamVjdE5vdEZvdW5kOgorICAgICMgICAgICAgICAg ICBsb2cuZXhjZXB0aW9uKCAnb2JqZWN0c3RvcmUuT2JqZWN0Tm90Rm91bmQsIEhEQSAlcy4nLCBo ZGE9Ci5pZCApCisgICAgIworICAgICMgICAgaGRhX2RpY3RbICdkb3dubG9hZF91cmwnIF0gPTNE IHVybF9mb3IoICdoaXN0b3J5X2NvbnRlbnRzX2Rpc3BsYXk9CicsCisgICAgIyAgICAgICAgaGlz dG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaGlzdG9yeS5pZCApLAor ICAgICMgICAgICAgIGhpc3RvcnlfY29udGVudF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2Rl X2lkKCBoZGEuaWQgKSApCisgICAgIworICAgICMgICAgIyByZXN1Ym1pdHRlZCBpcyBub3QgYSBy ZWFsIHN0YXRlCisgICAgIyAgICBoZGFfZGljdFsgJ3Jlc3VibWl0dGVkJyBdID0zRCBGYWxzZQor ICAgICMgICAgaWYgaGRhLnN0YXRlID0zRD0zRCB0cmFucy5hcHAubW9kZWwuRGF0YXNldC5zdGF0 ZXMuUkVTVUJNSVRURUQ6CisgICAgIyAgICAgICAgaGRhX2RpY3RbICdzdGF0ZScgXSA9M0QgaGRh LmRhdGFzZXQuc3RhdGUKKyAgICAjICAgICAgICBoZGFfZGljdFsgJ3Jlc3VibWl0dGVkJyBdID0z RCBUcnVlCisgICAgIworICAgICMgICAgIyBpbmRlY2VzLCBhc3NvYy4gbWV0YWRhdGEgZmlsZXMs IGV0Yy4KKyAgICAjICAgIG1ldGFfZmlsZXMgPTNEIFtdCisgICAgIyAgICBmb3IgbWV0YV90eXBl IGluIGhkYS5tZXRhZGF0YS5zcGVjLmtleXMoKToKKyAgICAjICAgICAgICBpZiBpc2luc3RhbmNl KCBoZGEubWV0YWRhdGEuc3BlY1sgbWV0YV90eXBlIF0ucGFyYW0sIEZpbGVQYXJhPQptZXRlciAp OgorICAgICMgICAgICAgICAgICBtZXRhX2ZpbGVzLmFwcGVuZCggZGljdCggZmlsZV90eXBlPTNE bWV0YV90eXBlICkgKQorICAgICMgICAgaWYgbWV0YV9maWxlczoKKyAgICAjICAgICAgICBoZGFf ZGljdFsgJ21ldGFfZmlsZXMnIF0gPTNEIG1ldGFfZmlsZXMKKyAgICAjCisgICAgIyAgICAjIGN1 cnJlbnRseSwgdGhlIHZpeiByZWcgaXMgb3B0aW9uYWwgLSBoYW5kbGUgb24vb2ZmCisgICAgIyAg ICBpZiB0cmFucy5hcHAudmlzdWFsaXphdGlvbnNfcmVnaXN0cnk6CisgICAgIyAgICAgICAgaGRh X2RpY3RbICd2aXN1YWxpemF0aW9ucycgXSA9M0QgdHJhbnMuYXBwLnZpc3VhbGl6YXRpb25zX3Jl Zz0KaXN0cnkuZ2V0X3Zpc3VhbGl6YXRpb25zKCB0cmFucywgaGRhICkKKyAgICAjICAgIGVsc2U6 CisgICAgIyAgICAgICAgaGRhX2RpY3RbICd2aXN1YWxpemF0aW9ucycgXSA9M0QgaGRhLmdldF92 aXN1YWxpemF0aW9ucygpCisgICAgIyAgICAjVE9ETzogaXQgbWF5IGFsc28gYmUgd2lzZXIgdG8g cmVtb3ZlIGZyb20gaGVyZSBhbmQgYWRkIGFzIEFQSSBjYT0KbGwgdGhhdCBsb2FkcyB0aGUgdmlz dWFsaXphdGlvbnMKKyAgICAjICAgICMgICAgICAgICAgIHdoZW4gdGhlIHZpc3VhbGl6YXRpb25z IGJ1dHRvbiBpcyBjbGlja2VkIChpbnN0ZWFkIG9mPQogcHJlbG9hZGluZy9wcmUtY2hlY2tpbmcp CisgICAgIworICAgICMgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcygg aGRhX2RpY3QgKQorICAgICMKKyAgICAjZGVmIGdldF9pbmFjY2Vzc2libGVfaGRhX2RpY3QoIHNl bGYsIHRyYW5zLCBoZGEgKToKKyAgICAjICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVf ZGljdF9pZHMoeworICAgICMgICAgICAgICdpZCcgICAgICAgIDogaGRhLmlkLAorICAgICMgICAg ICAgICdoaXN0b3J5X2lkJzogaGRhLmhpc3RvcnkuaWQsCisgICAgIyAgICAgICAgJ2hpZCcgICAg ICAgOiBoZGEuaGlkLAorICAgICMgICAgICAgICduYW1lJyAgICAgIDogaGRhLm5hbWUsCisgICAg IyAgICAgICAgJ3N0YXRlJyAgICAgOiBoZGEuc3RhdGUsCisgICAgIyAgICAgICAgJ2RlbGV0ZWQn ICAgOiBoZGEuZGVsZXRlZCwKKyAgICAjICAgICAgICAndmlzaWJsZScgICA6IGhkYS52aXNpYmxl LAorICAgICMgICAgICAgICdhY2Nlc3NpYmxlJzogRmFsc2UKKyAgICAjICAgIH0pCisgICAgIwor ICAgICNkZWYgZ2V0X2hkYV9kaWN0X3dpdGhfZXJyb3IoIHNlbGYsIHRyYW5zLCBoZGE9M0ROb25l LCBoaXN0b3J5X2lkPTNETm89Cm5lLCBpZD0zRE5vbmUsIGVycm9yX21zZz0zRCdFcnJvcicgKToK KyAgICAjICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoeworICAgICMg ICAgICAgICdpZCcgICAgICAgIDogaGRhLmlkIGlmIGhkYSBlbHNlIGlkLAorICAgICMgICAgICAg ICdoaXN0b3J5X2lkJzogaGRhLmhpc3RvcnkuaWQgaWYgaGRhIGVsc2UgaGlzdG9yeV9pZCwKKyAg ICAjICAgICAgICAnaGlkJyAgICAgICA6IGhkYS5oaWQgaWYgaGRhIGVsc2UgJyh1bmtub3duKScs CisgICAgIyAgICAgICAgJ25hbWUnICAgICAgOiBoZGEubmFtZSBpZiBoZGEgZWxzZSAnKHVua25v d24pJywKKyAgICAjICAgICAgICAnZXJyb3InICAgICA6IGVycm9yX21zZywKKyAgICAjICAgICAg ICAnc3RhdGUnICAgICA6IHRyYW5zLm1vZGVsLkRhdGFzZXQuc3RhdGVzLk5FVworICAgICMgICAg fSkKKyAgICAjCisgICAgI2RlZiBnZXRfZGlzcGxheV9hcHBzKCBzZWxmLCB0cmFucywgaGRhICk6 CisgICAgIyAgICBkaXNwbGF5X2FwcHMgPTNEIFtdCisgICAgIyAgICBmb3IgZGlzcGxheV9hcHAg aW4gaGRhLmdldF9kaXNwbGF5X2FwcGxpY2F0aW9ucyggdHJhbnMgKS5pdGVydmFsdT0KZXMoKToK KyAgICAjCisgICAgIyAgICAgICAgYXBwX2xpbmtzID0zRCBbXQorICAgICMgICAgICAgIGZvciBs aW5rX2FwcCBpbiBkaXNwbGF5X2FwcC5saW5rcy5pdGVydmFsdWVzKCk6CisgICAgIyAgICAgICAg ICAgIGFwcF9saW5rcy5hcHBlbmQoeworICAgICMgICAgICAgICAgICAgICAgJ3RhcmdldCc6IGxp bmtfYXBwLnVybC5nZXQoICd0YXJnZXRfZnJhbWUnLCAnX2JsYW5rJyA9CiksCisgICAgIyAgICAg ICAgICAgICAgICAnaHJlZicgIDogbGlua19hcHAuZ2V0X2Rpc3BsYXlfdXJsKCBoZGEsIHRyYW5z ICksCisgICAgIyAgICAgICAgICAgICAgICAndGV4dCcgIDogZ2V0dGV4dCggbGlua19hcHAubmFt ZSApCisgICAgIyAgICAgICAgICAgIH0pCisgICAgIyAgICAgICAgaWYgYXBwX2xpbmtzOgorICAg ICMgICAgICAgICAgICBkaXNwbGF5X2FwcHMuYXBwZW5kKCBkaWN0KCBsYWJlbD0zRGRpc3BsYXlf YXBwLm5hbWUsIGxpbms9CnM9M0RhcHBfbGlua3MgKSApCisgICAgIworICAgICMgICAgcmV0dXJu IGRpc3BsYXlfYXBwcworICAgICMKKyAgICAjZGVmIGdldF9vbGRfZGlzcGxheV9hcHBsaWNhdGlv bnMoIHNlbGYsIHRyYW5zLCBoZGEgKToKKyAgICAjICAgIGRpc3BsYXlfYXBwcyA9M0QgW10KKyAg ICAjICAgIGlmIG5vdCB0cmFucy5hcHAuY29uZmlnLmVuYWJsZV9vbGRfZGlzcGxheV9hcHBsaWNh dGlvbnM6CisgICAgIyAgICAgICAgcmV0dXJuIGRpc3BsYXlfYXBwcworICAgICMKKyAgICAjICAg IGZvciBkaXNwbGF5X2FwcCBpbiBoZGEuZGF0YXR5cGUuZ2V0X2Rpc3BsYXlfdHlwZXMoKToKKyAg ICAjICAgICAgICB0YXJnZXRfZnJhbWUsIGRpc3BsYXlfbGlua3MgPTNEIGhkYS5kYXRhdHlwZS5n ZXRfZGlzcGxheV9saW5rPQpzKCBoZGEsCisgICAgIyAgICAgICAgICAgIGRpc3BsYXlfYXBwLCB0 cmFucy5hcHAsIHRyYW5zLnJlcXVlc3QuYmFzZSApCisgICAgIworICAgICMgICAgICAgIGlmIGxl biggZGlzcGxheV9saW5rcyApID4gMDoKKyAgICAjICAgICAgICAgICAgZGlzcGxheV9sYWJlbCA9 M0QgaGRhLmRhdGF0eXBlLmdldF9kaXNwbGF5X2xhYmVsKCBkaXNwbGF5PQpfYXBwICkKKyAgICAj CisgICAgIyAgICAgICAgICAgIGFwcF9saW5rcyA9M0QgW10KKyAgICAjICAgICAgICAgICAgZm9y IGRpc3BsYXlfbmFtZSwgZGlzcGxheV9saW5rIGluIGRpc3BsYXlfbGlua3M6CisgICAgIyAgICAg ICAgICAgICAgICBhcHBfbGlua3MuYXBwZW5kKHsKKyAgICAjICAgICAgICAgICAgICAgICAgICAn dGFyZ2V0JzogdGFyZ2V0X2ZyYW1lLAorICAgICMgICAgICAgICAgICAgICAgICAgICdocmVmJyAg OiBkaXNwbGF5X2xpbmssCisgICAgIyAgICAgICAgICAgICAgICAgICAgJ3RleHQnICA6IGdldHRl eHQoIGRpc3BsYXlfbmFtZSApCisgICAgIyAgICAgICAgICAgICAgICB9KQorICAgICMgICAgICAg ICAgICBpZiBhcHBfbGlua3M6CisgICAgIyAgICAgICAgICAgICAgICBkaXNwbGF5X2FwcHMuYXBw ZW5kKCBkaWN0KCBsYWJlbD0zRGRpc3BsYXlfbGFiZWwsIGxpbj0Ka3M9M0RhcHBfbGlua3MgKSAp CisgICAgIworICAgICMgICAgcmV0dXJuIGRpc3BsYXlfYXBwcworICAgICMKKyAgICAjZGVmIHNl dF9oZGFfZnJvbV9kaWN0KCBzZWxmLCB0cmFucywgaGRhLCBuZXdfZGF0YSApOgorICAgICMgICAg IiIiCisgICAgIyAgICBDaGFuZ2VzIEhEQSBkYXRhIHVzaW5nIHRoZSBnaXZlbiBkaWN0aW9uYXJ5 IG5ld19kYXRhLgorICAgICMgICAgIiIiCisgICAgIyAgICAjIHByZWNvbmRpdGlvbjogYWNjZXNz IG9mIHRoZSBoZGEgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkCisgICAgIworICAgICMgICAgIyBz ZW5kIHdoYXQgd2UgY2FuIGRvd24gaW50byB0aGUgbW9kZWwKKyAgICAjICAgIGNoYW5nZWQgPTNE IGhkYS5zZXRfZnJvbV9kaWN0KCBuZXdfZGF0YSApCisgICAgIyAgICAjIHRoZSByZXN0IChvZnRl biBpbnZvbHZpbmcgdGhlIHRyYW5zKSAtIGRvIGhlcmUKKyAgICAjICAgIGlmICdhbm5vdGF0aW9u JyBpbiBuZXdfZGF0YS5rZXlzKCkgYW5kIHRyYW5zLmdldF91c2VyKCk6CisgICAgIyAgICAgICAg aGRhLmFkZF9pdGVtX2Fubm90YXRpb24oIHRyYW5zLnNhX3Nlc3Npb24sIHRyYW5zLmdldF91c2Vy KCksID0KaGRhLCBuZXdfZGF0YVsgJ2Fubm90YXRpb24nIF0gKQorICAgICMgICAgICAgIGNoYW5n ZWRbICdhbm5vdGF0aW9uJyBdID0zRCBuZXdfZGF0YVsgJ2Fubm90YXRpb24nIF0KKyAgICAjICAg IGlmICd0YWdzJyBpbiBuZXdfZGF0YS5rZXlzKCkgYW5kIHRyYW5zLmdldF91c2VyKCk6CisgICAg IyAgICAgICAgc2VsZi5zZXRfdGFnc19mcm9tX2xpc3QoIHRyYW5zLCBoZGEsIG5ld19kYXRhWyAn dGFncycgXSwgdXNlcj0KPTNEdHJhbnMudXNlciApCisgICAgIyAgICAjIHNoYXJpbmcvcGVybWlz c2lvbnM/CisgICAgIyAgICAjIHB1cmdlZAorICAgICMKKyAgICAjICAgIGlmIGNoYW5nZWQua2V5 cygpOgorICAgICMgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICMKKyAgICAj ICAgIHJldHVybiBjaGFuZ2VkCisgICAgIworICAgICNkZWYgZ2V0X2hkYV9qb2IoIHNlbGYsIGhk YSApOgorICAgICMgICAgIyBHZXQgZGF0YXNldCdzIGpvYi4KKyAgICAjICAgIGpvYiA9M0QgTm9u ZQorICAgICMgICAgZm9yIGpvYl9vdXRwdXRfYXNzb2MgaW4gaGRhLmNyZWF0aW5nX2pvYl9hc3Nv Y2lhdGlvbnM6CisgICAgIyAgICAgICAgam9iID0zRCBqb2Jfb3V0cHV0X2Fzc29jLmpvYgorICAg ICMgICAgICAgIGJyZWFrCisgICAgIyAgICByZXR1cm4gam9iCisgICAgIworICAgICNkZWYgc3Rv cF9oZGFfY3JlYXRpbmdfam9iKCBzZWxmLCBoZGEgKToKKyAgICAjICAgICIiIgorICAgICMgICAg U3RvcHMgYW4gSERBJ3MgY3JlYXRpbmcgam9iIGlmIGFsbCB0aGUgam9iJ3Mgb3RoZXIgb3V0cHV0 cyBhcmUgZGU9CmxldGVkLgorICAgICMgICAgIiIiCisgICAgIyAgICBpZiBoZGEucGFyZW50X2lk IGlzIE5vbmUgYW5kIGxlbiggaGRhLmNyZWF0aW5nX2pvYl9hc3NvY2lhdGlvbnMgKT0KID4gMDoK KyAgICAjICAgICAgICAjIE1hcmsgYXNzb2NpYXRlZCBqb2IgZm9yIGRlbGV0aW9uCisgICAgIyAg ICAgICAgam9iID0zRCBoZGEuY3JlYXRpbmdfam9iX2Fzc29jaWF0aW9uc1swXS5qb2IKKyAgICAj ICAgICAgICBpZiBqb2Iuc3RhdGUgaW4gWyBzZWxmLmFwcC5tb2RlbC5Kb2Iuc3RhdGVzLlFVRVVF RCwgc2VsZi5hcHAuPQptb2RlbC5Kb2Iuc3RhdGVzLlJVTk5JTkcsIHNlbGYuYXBwLm1vZGVsLkpv Yi5zdGF0ZXMuTkVXIF06CisgICAgIyAgICAgICAgICAgICMgQXJlICphbGwqIG9mIHRoZSBqb2In cyBvdGhlciBvdXRwdXQgZGF0YXNldHMgZGVsZXRlZD8KKyAgICAjICAgICAgICAgICAgaWYgam9i LmNoZWNrX2lmX291dHB1dF9kYXRhc2V0c19kZWxldGVkKCk6CisgICAgIyAgICAgICAgICAgICAg ICBqb2IubWFya19kZWxldGVkKCBzZWxmLmFwcC5jb25maWcudHJhY2tfam9ic19pbl9kYXRhYj0K YXNlICkKKyAgICAjICAgICAgICAgICAgICAgIHNlbGYuYXBwLmpvYl9tYW5hZ2VyLmpvYl9zdG9w X3F1ZXVlLnB1dCggam9iLmlkICkKKyAgICAjCisgICAgIwo9MjAKICMgPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFz cyBIaXN0b3J5U2VyaWFsaXplciggbWFuYWdlcl9iYXNlLk1vZGVsU2VyaWFsaXplciApOgotICAg ICIiIgotICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3Igc2VyaWFsaXppbmcgSERBcyBp bnRvIGRpY3Rpb25hcmllcy4KLSAgICAiIiIKLSAgICBwYXNzCitjbGFzcyBIREFTZXJpYWxpemVy KCBiYXNlLk1vZGVsU2VyaWFsaXplciApOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmICk6Cisg ICAgICAgIHN1cGVyKCBIREFTZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oKQorCisgICAgICAg ICMgbW9zdCBvZiB0aGVzZSB2aWV3cyBidWlsZC9hZGQgdG8gdGhlIHByZXZpb3VzIHZpZXcKKyAg ICAgICAgc3VtbWFyeV92aWV3ID0zRCBbCisgICAgICAgICAgICAnaWQnLCAnaGlzdG9yeV9pZCcs ICdoaWQnLCAnbmFtZScsICdkYXRhc2V0X2lkJywKKyAgICAgICAgICAgICdzdGF0ZScsICdkZWxl dGVkJywgJ3B1cmdlZCcsICd2aXNpYmxlJworICAgICAgICBdCisgICAgICAgIGRldGFpbGVkX3Zp ZXcgPTNEIHN1bW1hcnlfdmlldyArIFsKKyAgICAgICAgICAgICdkYmtleScsICdpbmZvJywgJ2Js dXJiJywgJ2V4dGVuc2lvbicsICdjcmVhdGVfdGltZScsICd1cGRhdGVfPQp0aW1lJywKKyAgICAg ICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25faWQnLCAnY29w aWVkX2Zyb21fbGliPQpyYXJ5X2RhdGFzZXRfZGF0YXNldF9hc3NvY2lhdGlvbl9pZCcsCisgICAg ICAgICAgICAnbWV0YWRhdGEnLCAnc2l6ZScsCisgICAgICAgICAgICAjbWl4aW46IGFubm90YXRh YmxlCisgICAgICAgICAgICAnYW5ub3RhdGlvbicsCisgICAgICAgICAgICAjbWl4aW46IHRhZ2dh YmxlCisgICAgICAgICAgICAndGFncycsCisgICAgICAgIF0KKyAgICAgICAgZXh0ZW5kZWRfdmll dyA9M0QgZGV0YWlsZWRfdmlldyArIFsKKyAgICAgICAgICAgICNOT1RFOiBzZW5kaW5nIHJhdyAn cGVlaycgKG5vdCBnZXRfZGlzcGxheV9wZWVrKQorICAgICAgICAgICAgJ3BlZWsnLAorICAgICAg ICAgICAgJ3Rvb2xfdmVyc2lvbicsICdwYXJlbnRfaWQnLCAnZGVzaWduYXRpb24nLAorICAgICAg ICBdCisKKyAgICAgICAgc2VsZi5zZXJpYWxpemFibGVfa2V5cyA9M0QgZXh0ZW5kZWRfdmlldyAr IFsKKyAgICAgICAgICAgICdkaXNwbGF5X2FwcHMnLAorICAgICAgICAgICAgJ2Rpc3BsYXlfdHlw ZXMnLAorICAgICAgICAgICAgJ3Zpc3VhbGl6YXRpb25zJworICAgICAgICBdCisgICAgICAgIHNl bGYudmlld3MgPTNEIHsKKyAgICAgICAgICAgICdzdW1tYXJ5JyAgIDogc3VtbWFyeV92aWV3LAor ICAgICAgICAgICAgJ2RldGFpbGVkJyAgOiBkZXRhaWxlZF92aWV3LAorICAgICAgICAgICAgJ2V4 dGVuZGVkJyAgOiBleHRlbmRlZF92aWV3LAorICAgICAgICB9CisgICAgICAgIHNlbGYuZGVmYXVs dF92aWV3ID0zRCAnc3VtbWFyeScKKworICAgIGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToK KyAgICAgICAgc2VsZi5zZXJpYWxpemVycy51cGRhdGUoeworICAgICAgICAgICAgJ2lkJyAgICAg ICAgICAgIDogc2VsZi5zZXJpYWxpemVfaWQsCisgICAgICAgICAgICAnaGlzdG9yeV9pZCcgICAg OiBzZWxmLnNlcmlhbGl6ZV9pZCwKKyAgICAgICAgICAgICdkYXRhc2V0X2lkJyAgICA6IHNlbGYu c2VyaWFsaXplX2lkLAorCisgICAgICAgICAgICAnY3JlYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlh bGl6ZV9kYXRlLAorICAgICAgICAgICAgJ3VwZGF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVf ZGF0ZSwKKyAgICAgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRp b25faWQnICAgICAgICA6IHNlbGYuc2VyPQppYWxpemVfaWQsCisgICAgICAgICAgICAnY29waWVk X2Zyb21fbGlicmFyeV9kYXRhc2V0X2RhdGFzZXRfYXNzb2NpYXRpb25faWQnOiBzZWxmLnNlcj0K aWFsaXplX2lkLAorICAgICAgICAgICAgJ21ldGFkYXRhJyAgICAgIDogc2VsZi5zZXJpYWxpemVf bWV0YWRhdGEsCisgICAgICAgICAgICAnc2l6ZScgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazog aW50KCBpLmdldF9zaXplKCkgKSwKKyAgICAgICAgICAgICduaWNlX3NpemUnICAgICA6IGxhbWJk YSB0LCBpLCBrOiBpLmdldF9zaXplKCBuaWNlX3NpemU9M0RUcnVlPQogKSwKKyAgICAgICAgICAg ICdwYXJlbnRfaWQnICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAorICAgICAgICAgICAgI1RPRE86 IHRvIG1peGluOiBhbm5vdGF0YWJsZQorICAgICAgICAgICAgJ2Fubm90YXRpb24nICAgIDogbGFt YmRhIHQsIGksIGs6IGkuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHQ9Ci5zYV9zZXNzaW9uLCB0 LnVzZXIsIGkgKSwKKyAgICAgICAgICAgICNUT0RPOiB0byBtaXhpbjogdGFnZ2FibGUKKyAgICAg ICAgICAgICd0YWdzJyAgICAgICAgICA6IGxhbWJkYSB0LCBpLCBrOiBbIHRhZy51c2VyX3RuYW1l ICsgKCAnOicgKyB0PQphZy51c2VyX3ZhbHVlIGlmIHRhZy51c2VyX3ZhbHVlIGVsc2UgJycgKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRhZyBp biBpLnRhZ3MgXSwKKyAgICAgICAgfSkKKworICAgIGRlZiBzZXJpYWxpemVfbWV0YWRhdGEoIHNl bGYsIHRyYW5zLCBoZGEsIGtleSApOgorICAgICAgICBub3RfaW5jbHVkZWQgPTNEIFsgJ2Ria2V5 JyBdCisgICAgICAgIG1kID0zRCB7fQorICAgICAgICBmb3IgbmFtZSwgc3BlYyBpbiBoZGEubWV0 YWRhdGEuc3BlYy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBub3RfaW5jbHVkZWQ6 CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHZhbCA9M0QgaGRhLm1ldGFk YXRhLmdldCggbmFtZSApCisgICAgICAgICAgICAjTk9URTogbm8gZmlsZXMKKyAgICAgICAgICAg IGlmIGlzaW5zdGFuY2UoIHZhbCwgbW9kZWwuTWV0YWRhdGFGaWxlICk6CisgICAgICAgICAgICAg ICAgY29udGludWUKKyAgICAgICAgICAgICNUT0RPOj8gcG9zc2libHkgc3BsaXQgdGhpcyBvZmY/ CisgICAgICAgICAgICAjIElmIG5vIHZhbHVlIGZvciBtZXRhZGF0YSwgbG9vayBpbiBkYXRhdHlw ZSBmb3IgbWV0YWRhdGEuCisgICAgICAgICAgICBlbGlmIHZhbCBpcyBOb25lIGFuZCBoYXNhdHRy KCBoZGEuZGF0YXR5cGUsIG5hbWUgKToKKyAgICAgICAgICAgICAgICB2YWwgPTNEIGdldGF0dHIo IGhkYS5kYXRhdHlwZSwgbmFtZSApCisgICAgICAgICAgICBtZFsgbmFtZSBdID0zRCB2YWwKKwor ICAgICAgICByZXR1cm4gbWQKKworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgor ICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnMudXBkYXRlKHsKKyAgICAgICAgICAgICduYW1lJyAg ICAgICAgICA6IHNlbGYuZGVzZXJpYWxpemVfYmFzZXN0cmluZywKKyAgICAgICAgICAgICdnZW5v bWVfYnVpbGQnICA6IHNlbGYuZGVzZXJpYWxpemVfZ2Vub21lX2J1aWxkLAorICAgICAgICAgICAg J2RlbGV0ZWQnICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9ib29sLAorICAgICAgICAgICAgJ3B1 Ymxpc2hlZCcgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9ib29sLAorICAgICAgICAgICAgI1RPRE86 IHRvIG1peGluOiBhbm5vdGF0YWJsZQorICAgICAgICAgICAgIydhbm5vdGF0aW9uJyAgICA6IHNl bGYuZGVzZXJpYWxpemVfYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICNUT0RPOiB0byBtaXhpbjog dGFnZ2FibGUKKyAgICAgICAgICAgICMndGFncycgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgaywg djogLAorICAgICAgICB9KQorICAgICAgICBzZWxmLmRlc2VyaWFsaXphYmxlX2tleXMgPTNEIHNl bGYuZGVzZXJpYWxpemVycy5rZXlzKCkKCmRpZmYgLXIgY2M3MTQ3NTE0ZDc3Nzk5OTg5Nzc3ZmQy MWFhODE4ZTQzZDlmM2QzOSAtciA3NDBkNzU4YzIyODViZWMxNDBlNjkwMT0KMDI1ZTkwNmY1MGEw ZDdhMmEgbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKLS0tIGEvbGliL2dhbGF4eS9t YW5hZ2Vycy9oaXN0b3JpZXMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMu cHkKQEAgLTYsOSArNiwxMiBAQAogIiIiCj0yMAogZnJvbSBnYWxheHkgaW1wb3J0IGV4Y2VwdGlv bnMKK2Zyb20gZ2FsYXh5IGltcG9ydCBtb2RlbAogZnJvbSBnYWxheHkubW9kZWwgaW1wb3J0IG9y bQo9MjAKLWZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlIGFzIG1hbmFnZXJfYmFzZQor aW1wb3J0IGJhc2UKK2ltcG9ydCBzaGFyYWJsZQoraW1wb3J0IGhkYXMKIGltcG9ydCBnYWxheHku bWFuYWdlcnMuY29sbGVjdGlvbnNfdXRpbAo9MjAKIGltcG9ydCBnYWxheHkud2ViCkBAIC0xOCwx MjIgKzIxLDc2IEBACj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFzcyBIaXN0b3J5TWFuYWdlcigg bWFuYWdlcl9iYXNlLk1vZGVsTWFuYWdlciApOgorY2xhc3MgSGlzdG9yeU1hbmFnZXIoIHNoYXJh YmxlLlNoYXJhYmxlTW9kZWxNYW5hZ2VyLCBiYXNlLlB1cmdhYmxlTW9kZWxJbnQ9CmVyZmFjZSAp OgogICAgICIiIgogICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3IgaW50ZXJhY3Rpbmcg d2l0aCBIREFzLgogICAgICIiIgorICAgIG1vZGVsX2NsYXNzID0zRCBtb2RlbC5IaXN0b3J5Cisg ICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2RlbC5IaXN0b3J5LmNyZWF0ZV90aW1lLCApCisg ICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgJ2hpc3RvcnknCisgICAgdXNlcl9zaGFyZV9tb2RlbCA9 M0QgbW9kZWwuSGlzdG9yeVVzZXJTaGFyZUFzc29jaWF0aW9uCj0yMAotICAgICNUT0RPOiBhbGwg dGhlIGZvbGxvd2luZyB3b3VsZCBiZSBtb3JlIHVzZWZ1bCBpZiBwYXNzZWQgdGhlIHVzZXIgaW5z dGU9CmFkIG9mIGRlZmF1bHRpbmcgdG8gdHJhbnMudXNlcgotICAgIGRlZiBfX2luaXRfXyggc2Vs ZiwgKmFyZ3MsICoqa3dhcmdzICk6Ci0gICAgICAgIHN1cGVyKCBIaXN0b3J5TWFuYWdlciwgc2Vs ZiApLl9faW5pdF9fKCAqYXJncywgKiprd2FyZ3MgKQorICAgIGRlZiBfX2luaXRfXyggc2VsZiwg YXBwLCAqYXJncywgKiprd2FyZ3MgKToKKyAgICAgICAgc3VwZXIoIEhpc3RvcnlNYW5hZ2VyLCBz ZWxmICkuX19pbml0X18oIGFwcCwgKmFyZ3MsICoqa3dhcmdzICkKKyAgICAgICAgc2VsZi5oZGFf bWdyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCj0yMAotICAgIGRlZiBnZXQoIHNlbGYsIHRy YW5zLCB1bmVuY29kZWRfaWQsIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNoZWNrX2FjY2U9CnNz aWJsZT0zRFRydWUsIGRlbGV0ZWQ9M0ROb25lICk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQg YSBIaXN0b3J5IGZyb20gdGhlIGRhdGFiYXNlIGJ5IGlkLCB2ZXJpZnlpbmcgb3duZXJzaGlwLgot ICAgICAgICAiIiIKLSAgICAgICAgIyB0aGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFVzZXNIaXN0 b3J5TWl4aW4gYmVjYXVzZSBtaXhpbnMgYXJlIGEgPQpiYWQgc29sbi9zdHJ1Y3R1cmUKLSAgICAg ICAgaGlzdG9yeSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkhp c3RvcnkgKS5nZXQoPQogdW5lbmNvZGVkX2lkICkKLSAgICAgICAgaWYgaGlzdG9yeSBpcyBOb25l OgotICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCgpCi0gICAgICAg IGlmIGRlbGV0ZWQgaXMgVHJ1ZSBhbmQgbm90IGhpc3RvcnkuZGVsZXRlZDoKLSAgICAgICAgICAg IHJhaXNlIGV4Y2VwdGlvbnMuSXRlbURlbGV0aW9uRXhjZXB0aW9uKCAnSGlzdG9yeSAiJXMiIGlz IG5vdCBkPQplbGV0ZWQnICUgKCBoaXN0b3J5Lm5hbWUgKSwgdHlwZT0zRCJlcnJvciIgKQotICAg ICAgICBlbGlmIGRlbGV0ZWQgaXMgRmFsc2UgYW5kIGhpc3RvcnkuZGVsZXRlZDoKLSAgICAgICAg ICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbURlbGV0aW9uRXhjZXB0aW9uKCAnSGlzdG9yeSAiJXMi IGlzIGRlbGV0PQplZCcgJSAoIGhpc3RvcnkubmFtZSApLCB0eXBlPTNEImVycm9yIiApCisgICAg IyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLj0KLi4uLi4gY3J1ZAorICAgIGRlZiBjb3B5KCBzZWxmLCB0cmFucywgaGlz dG9yeSwgdXNlciwgKiprd2FyZ3MgKToKKyAgICAgICAgcmV0dXJuIGhpc3RvcnkuY29weSggdGFy Z2V0X3VzZXI9M0R1c2VyLCAqKmt3YXJncyApCj0yMAotICAgICAgICBoaXN0b3J5ID0zRCBzZWxm LnNlY3VyZSggdHJhbnMsIGhpc3RvcnksIGNoZWNrX293bmVyc2hpcCwgY2hlY2tfYWM9CmNlc3Np YmxlICkKKyAgICBkZWYgZ2V0X2N1cnJlbnQoIHNlbGYsIHRyYW5zICk6CisgICAgICAgIHJldHVy biB0cmFucy5nZXRfaGlzdG9yeSgpCisKKyAgICBkZWYgc2V0X2N1cnJlbnQoIHNlbGYsIHRyYW5z LCBoaXN0b3J5ICk6CisgICAgICAgIHRyYW5zLnNldF9oaXN0b3J5KCBoaXN0b3J5ICkKICAgICAg ICAgcmV0dXJuIGhpc3RvcnkKPTIwCi0gICAgZGVmIGJ5X3VzZXIoIHNlbGYsIHRyYW5zLCB1c2Vy PTNETm9uZSwgaW5jbHVkZV9kZWxldGVkPTNERmFsc2UsIG9ubHlfZD0KZWxldGVkPTNERmFsc2Ug KToKKyAgICBkZWYgc2V0X2N1cnJlbnRfYnlfaWQoIHNlbGYsIHRyYW5zLCBoaXN0b3J5X2lkICk6 CisgICAgICAgIHJldHVybiBzZWxmLnNldF9jdXJyZW50KCB0cmFucywgc2VsZi5ieV9pZCggdHJh bnMsIGhpc3RvcnlfaWQgKSApCisKKyAgICBkZWYgbW9zdF9yZWNlbnQoIHNlbGYsIHRyYW5zLCB1 c2VyLCAqKmt3YXJncyApOgorICAgICAgICBpZiBub3QgdXNlcjoKKyAgICAgICAgICAgIHJldHVy biBOb25lIGlmIHRyYW5zLmhpc3RvcnkuZGVsZXRlZCBlbHNlIHRyYW5zLmhpc3RvcnkKKyAgICAg ICAgZGVzY191cGRhdGVfdGltZSA9M0Qgc2VsZi5tb2RlbF9jbGFzcy50YWJsZS5jLnVwZGF0ZV90 aW1lCisgICAgICAgIHJldHVybiBzZWxmLmJ5X3VzZXIoIHRyYW5zLCB1c2VyLCBvcmRlcl9ieT0z RGRlc2NfdXBkYXRlX3RpbWUsIGxpbT0KaXQ9M0QxLCAqKmt3YXJncyApCisKKyAgICAjIC4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uPQouLi4uLiBzaGFyYWJsZQorICAgICMgb3ZlcnJpZGluZyB0byBoYW5kbGUgYW5vbnlt b3VzIHVzZXJzJyBjdXJyZW50IGhpc3RvcmllcyBpbiBib3RoIGNhc2VzCisgICAgZGVmIGJ5X3Vz ZXIoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKLSAgICAgICAg R2V0IGFsbCB0aGUgaGlzdG9yaWVzIGZvciBhIGdpdmVuIHVzZXIgKGRlZmF1bHRpbmcgdG8gYHRy YW5zLnVzZXJgKQotICAgICAgICBvcmRlcmVkIGJ5IHVwZGF0ZSB0aW1lIGFuZCBmaWx0ZXJlZCBv biB3aGV0aGVyIHRoZXkndmUgYmVlbiBkZWxldGU9CmQuCisgICAgICAgIEdldCBhbGwgdGhlIGhp c3RvcmllcyBmb3IgYSBnaXZlbiB1c2VyIChhbGxvd2luZyBhbm9uIHVzZXJzJyB0aGVpcj0KcykK KyAgICAgICAgb3JkZXJlZCBieSB1cGRhdGUgdGltZS4KICAgICAgICAgIiIiCiAgICAgICAgICMg aGFuZGxlIGRlZmF1bHQgYW5kL29yIGFub255bW91cyB1c2VyICh3aGljaCBzdGlsbCBtYXkgbm90 IGhhdmUgYT0KIGhpc3RvcnkgeWV0KQotICAgICAgICB1c2VyID0zRCB1c2VyIG9yIHRyYW5zLnVz ZXIKLSAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgIGlmIHNlbGYudXNlcl9tZ3IuaXNfYW5v bnltb3VzKCB1c2VyICk6CiAgICAgICAgICAgICBjdXJyZW50X2hpc3RvcnkgPTNEIHRyYW5zLmdl dF9oaXN0b3J5KCkKICAgICAgICAgICAgIHJldHVybiBbIGN1cnJlbnRfaGlzdG9yeSBdIGlmIGN1 cnJlbnRfaGlzdG9yeSBlbHNlIFtdCj0yMAotICAgICAgICBoaXN0b3J5X21vZGVsID0zRCB0cmFu cy5tb2RlbC5IaXN0b3J5Ci0gICAgICAgIHF1ZXJ5ID0zRCAoIHRyYW5zLnNhX3Nlc3Npb24ucXVl cnkoIGhpc3RvcnlfbW9kZWwgKQotICAgICAgICAgICAgICAgICAgLmZpbHRlciggaGlzdG9yeV9t b2RlbC51c2VyID0zRD0zRCB1c2VyICkKLSAgICAgICAgICAgICAgICAgIC5vcmRlcl9ieSggb3Jt LmRlc2MoIGhpc3RvcnlfbW9kZWwudGFibGUuYy51cGRhdGVfdGltZSApPQogKSApCi0gICAgICAg IGlmIG9ubHlfZGVsZXRlZDoKLSAgICAgICAgICAgIHF1ZXJ5ID0zRCBxdWVyeS5maWx0ZXIoIGhp c3RvcnlfbW9kZWwuZGVsZXRlZCA9M0Q9M0QgVHJ1ZSApCi0gICAgICAgIGVsaWYgbm90IGluY2x1 ZGVfZGVsZXRlZDoKLSAgICAgICAgICAgIHF1ZXJ5ID0zRCBxdWVyeS5maWx0ZXIoIGhpc3Rvcnlf bW9kZWwuZGVsZXRlZCA9M0Q9M0QgRmFsc2UgKQotICAgICAgICByZXR1cm4gcXVlcnkuYWxsKCkK KyAgICAgICAgcmV0dXJuIHN1cGVyKCBIaXN0b3J5TWFuYWdlciwgc2VsZiApLmJ5X3VzZXIoIHRy YW5zLCB1c2VyLCAqKmt3YXJnPQpzICkKPTIwCi0gICAgZGVmIHNlY3VyZSggc2VsZiwgdHJhbnMs IGhpc3RvcnksIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNoZWNrX2FjY2Vzcz0KaWJsZT0zRFRy dWUgKToKLSAgICAgICAgIiIiCi0gICAgICAgIENoZWNrcyBpZiAoYSkgdXNlciBvd25zIGl0ZW0g b3IgKGIpIGl0ZW0gaXMgYWNjZXNzaWJsZSB0byB1c2VyLgotICAgICAgICAiIiIKLSAgICAgICAg IyBhbGwgaXRlbXMgYXJlIGFjY2Vzc2libGUgdG8gYW4gYWRtaW4KLSAgICAgICAgaWYgdHJhbnMu dXNlciBhbmQgdHJhbnMudXNlcl9pc19hZG1pbigpOgotICAgICAgICAgICAgcmV0dXJuIGhpc3Rv cnkKLSAgICAgICAgaWYgY2hlY2tfb3duZXJzaGlwOgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qg c2VsZi5jaGVja19vd25lcnNoaXAoIHRyYW5zLCBoaXN0b3J5ICkKLSAgICAgICAgaWYgY2hlY2tf YWNjZXNzaWJsZToKLSAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuY2hlY2tfYWNjZXNzaWJs ZSggdHJhbnMsIGhpc3RvcnkgKQotICAgICAgICByZXR1cm4gaGlzdG9yeQotCi0gICAgZGVmIGlz X2N1cnJlbnQoIHNlbGYsIHRyYW5zLCBoaXN0b3J5ICk6Ci0gICAgICAgICIiIgotICAgICAgICBU cnVlIGlmIHRoZSBnaXZlbiBoaXN0b3J5IGlzIHRoZSB1c2VyJ3MgY3VycmVudCBoaXN0b3J5Lgot Ci0gICAgICAgIFJldHVybnMgRmFsc2UgaWYgdGhlIHNlc3Npb24gaGFzIG5vIGN1cnJlbnQgaGlz dG9yeS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHRyYW5zLmhpc3RvcnkgaXMgTm9uZToKLSAg ICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gdHJhbnMuaGlzdG9yeSA9M0Q9 M0QgaGlzdG9yeQotCi0gICAgZGVmIGlzX293bmVyKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgor ICAgIGRlZiBpc19vd25lciggc2VsZiwgdHJhbnMsIGhpc3RvcnksIHVzZXIgKToKICAgICAgICAg IiIiCiAgICAgICAgIFRydWUgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyB0aGUgb3duZXIgb2YgdGhl IGdpdmVuIGhpc3RvcnkuCiAgICAgICAgICIiIgogICAgICAgICAjIGFub24gdXNlcnMgYXJlIG9u bHkgYWxsb3dlZCB0byB2aWV3IHRoZWlyIGN1cnJlbnQgaGlzdG9yeQotICAgICAgICBpZiBub3Qg dHJhbnMudXNlcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmlzX2N1cnJlbnQoIHRyYW5zLCBo aXN0b3J5ICkKLSAgICAgICAgcmV0dXJuIHRyYW5zLnVzZXIgPTNEPTNEIGhpc3RvcnkudXNlcgor ICAgICAgICBpZiBzZWxmLnVzZXJfbWdyLmlzX2Fub255bW91cyggdXNlciApIGFuZCBoaXN0b3J5 ID0zRD0zRCB0cmFucy5nZXQ9Cl9oaXN0b3J5KCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQor ICAgICAgICByZXR1cm4gc3VwZXIoIEhpc3RvcnlNYW5hZ2VyLCBzZWxmICkuaXNfb3duZXIoIHRy YW5zLCBoaXN0b3J5LCB1c2U9CnIgKQo9MjAKLSAgICBkZWYgY2hlY2tfb3duZXJzaGlwKCBzZWxm LCB0cmFucywgaGlzdG9yeSApOgotICAgICAgICAiIiIKLSAgICAgICAgUmFpc2VzIGVycm9yIGlm IHRoZSBjdXJyZW50IHVzZXIgaXMgbm90IHRoZSBvd25lciBvZiB0aGUgaGlzdG9yeS4KLSAgICAg ICAgIiIiCi0gICAgICAgIGlmIHRyYW5zLnVzZXIgYW5kIHRyYW5zLnVzZXJfaXNfYWRtaW4oKToK LSAgICAgICAgICAgIHJldHVybiBoaXN0b3J5Ci0gICAgICAgIGlmIG5vdCB0cmFucy51c2VyIGFu ZCBub3Qgc2VsZi5pc19jdXJyZW50KCB0cmFucywgaGlzdG9yeSApOgotICAgICAgICAgICAgcmFp c2UgZXhjZXB0aW9ucy5BdXRoZW50aWNhdGlvblJlcXVpcmVkKCAiTXVzdCBiZSBsb2dnZWQgaW4g dG89CiBtYW5hZ2UgR2FsYXh5IGhpc3RvcmllcyIsIHR5cGU9M0QnZXJyb3InICkKLSAgICAgICAg aWYgc2VsZi5pc19vd25lciggdHJhbnMsIGhpc3RvcnkgKToKLSAgICAgICAgICAgIHJldHVybiBo aXN0b3J5Ci0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVyc2hpcEV4Y2VwdGlvbigg Ikhpc3RvcnkgaXMgbm90IG93bmVkIGJ5ID0KdGhlIGN1cnJlbnQgdXNlciIsIHR5cGU9M0QnZXJy b3InICkKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBwdXJnYWJsZQorICAgIGRlZiBwdXJnZSgg c2VsZiwgdHJhbnMsIGhpc3RvcnksIGZsdXNoPTNEVHJ1ZSwgKiprd2FyZ3MgKToKKyAgICAgICAg c2VsZi5lcnJvcl91bmxlc3NfZGF0YXNldF9wdXJnZV9hbGxvd2VkKCB0cmFucywgaGlzdG9yeSAp Cj0yMAotICAgIGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgotICAg ICAgICAiIiIKLSAgICAgICAgVHJ1ZSBpZiB0aGUgdXNlciBjYW4gYWNjZXNzIChyZWFkKSB0aGUg Y3VycmVudCBoaXN0b3J5LgotICAgICAgICAiIiIKLSAgICAgICAgIyBhZG1pbiBhbHdheXMgaGF2 ZSBhY2Nlc3MKLSAgICAgICAgaWYgdHJhbnMudXNlciBhbmQgdHJhbnMudXNlcl9pc19hZG1pbigp OgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgIyBvd25lciBoYXMgaW1wbGljaXQg YWNjZXNzCi0gICAgICAgIGlmIHNlbGYuaXNfb3duZXIoIHRyYW5zLCBoaXN0b3J5ICk6Ci0gICAg ICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAjIGltcG9ydGFibGUgYW5kIHNoYXJlZCBoaXN0 b3JpZXMgYXJlIGFsd2F5cyBhY2Nlc3NpYmxlCi0gICAgICAgIGlmIGhpc3RvcnkuaW1wb3J0YWJs ZToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGlmIHRyYW5zLnVzZXIgaW4gaGlz dG9yeS51c2Vyc19zaGFyZWRfd2l0aF9kb3RfdXNlcnM6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1 ZQotICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBGaXJzdCBwdXJnZSBhbGwgdGhlIGRh dGFzZXRzCisgICAgICAgIGZvciBoZGEgaW4gaGlzdG9yeS5kYXRhc2V0czoKKyAgICAgICAgICAg IGlmIG5vdCBoZGEucHVyZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYuaGRhX21nci5wdXJnZSgg dHJhbnMsIGhkYSwgZmx1c2g9M0RUcnVlICkKPTIwCi0gICAgZGVmIGNoZWNrX2FjY2Vzc2libGUo IHNlbGYsIHRyYW5zLCBoaXN0b3J5ICk6Ci0gICAgICAgICIiIgotICAgICAgICBSYWlzZXMgZXJy b3IgaWYgdGhlIGN1cnJlbnQgdXNlciBjYW4ndCBhY2Nlc3MgdGhlIGhpc3RvcnkuCi0gICAgICAg ICIiIgotICAgICAgICBpZiBzZWxmLmlzX2FjY2Vzc2libGUoIHRyYW5zLCBoaXN0b3J5ICk6Ci0g ICAgICAgICAgICByZXR1cm4gaGlzdG9yeQotICAgICAgICByYWlzZSBleGNlcHRpb25zLkl0ZW1B Y2Nlc3NpYmlsaXR5RXhjZXB0aW9uKCAiSGlzdG9yeSBpcyBub3QgYWNjZXM9CnNpYmxlIHRvIHRo ZSBjdXJyZW50IHVzZXIiLCB0eXBlPTNEJ2Vycm9yJyApCisgICAgICAgICMgTm93IG1hcmsgdGhl IGhpc3RvcnkgYXMgcHVyZ2VkCisgICAgICAgIHN1cGVyKCBIaXN0b3J5TWFuYWdlciwgc2VsZiAp LnB1cmdlKCB0cmFucywgaGlzdG9yeSwgZmx1c2g9M0RmbHVzaD0KLCAqKmt3YXJncyApCj0yMAot ICAgICNUT0RPOiBibGVoLi4uCisgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2VyaWFsaXphdGlv bgorICAgICNUT0RPOiBtb3ZlIHRvIHNlcmlhbGl6ZXIKICAgICBkZWYgX2dldF9oaXN0b3J5X2Rh dGEoIHNlbGYsIHRyYW5zLCBoaXN0b3J5ICk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm5z IGEgZGljdGlvbmFyeSBjb250YWluaW5nIGBgaGlzdG9yeWBgIGFuZCBgYGNvbnRlbnRzYGAsIHNl cmk9CmFsaXplZApAQCAtMTkxLDUzICsxNDgsMTc0IEBACiAgICAgICAgICAgICAnY29udGVudHMn ICA6IGNvbnRlbnRzX2RpY3Rpb25hcmllcwogICAgICAgICB9Cj0yMAotICAgIGRlZiBnZXRfaGlz dG9yeV9kaWN0KCBzZWxmLCB0cmFucywgaGlzdG9yeSwgY29udGVudHNfZGljdGlvbmFyaWVzPTNE Tm89Cm5lICk6CisgICAgIyByZW1vdmUgdGhpcworICAgIGRlZiBnZXRfc3RhdGVfY291bnRzKCBz ZWxmLCB0cmFucywgaGlzdG9yeSwgZXhjbHVkZV9kZWxldGVkPTNEVHJ1ZSwgZXg9CmNsdWRlX2hp ZGRlbj0zREZhbHNlICk6CiAgICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIGhpc3RvcnkgZGF0 YSBpbiB0aGUgZm9ybSBvZiBhIGRpY3Rpb25hcnkuCiAgICAgICAgICIiIgotICAgICAgICAjVE9E TzogdG8gc2VyaWFsaXplcgotICAgICAgICBoaXN0b3J5X2RpY3QgPTNEIGhpc3RvcnkudG9fZGlj dCggdmlldz0zRCdlbGVtZW50JywgdmFsdWVfbWFwcGVyPQo9M0R7ICdpZCc6dHJhbnMuc2VjdXJp dHkuZW5jb2RlX2lkIH0pCi0gICAgICAgIGhpc3RvcnlfZGljdFsgJ3VzZXJfaWQnIF0gPTNEIE5v bmUKLSAgICAgICAgaWYgaGlzdG9yeS51c2VyX2lkOgotICAgICAgICAgICAgaGlzdG9yeV9kaWN0 WyAndXNlcl9pZCcgXSA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoaXN0b3I9CnkudXNl cl9pZCApCisgICAgICAgICNUT0RPOiB0aGUgZGVmYXVsdCBmbGFncyBhYm92ZSBtYXkgbm90IG1h a2UgYSBsb3Qgb2Ygc2Vuc2UgKFQsVD8pCisgICAgICAgIHN0YXRlX2NvdW50cyA9M0Qge30KKyAg ICAgICAgZm9yIHN0YXRlIGluIHRyYW5zLmFwcC5tb2RlbC5EYXRhc2V0LnN0YXRlcy52YWx1ZXMo KToKKyAgICAgICAgICAgIHN0YXRlX2NvdW50c1sgc3RhdGUgXSA9M0QgMAo9MjAKLSAgICAgICAg aGlzdG9yeV9kaWN0WyAnbmljZV9zaXplJyBdID0zRCBoaXN0b3J5LmdldF9kaXNrX3NpemUoIG5p Y2Vfc2l6ZT0KPTNEVHJ1ZSApCi0gICAgICAgIGhpc3RvcnlfZGljdFsgJ2Fubm90YXRpb24nIF0g PTNEIGhpc3RvcnkuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoID0KdHJhbnMuc2Ffc2Vzc2lvbiwg aGlzdG9yeS51c2VyLCBoaXN0b3J5ICkKLSAgICAgICAgaWYgbm90IGhpc3RvcnlfZGljdFsgJ2Fu bm90YXRpb24nIF06Ci0gICAgICAgICAgICBoaXN0b3J5X2RpY3RbICdhbm5vdGF0aW9uJyBdID0z RCAnJworICAgICAgICAjVE9ETzo/PyBjb2xsZWN0aW9ucyBhbmQgY29sbC4gc3RhdGVzPworICAg ICAgICBmb3IgaGRhIGluIGhpc3RvcnkuZGF0YXNldHM6CisgICAgICAgICAgICBpZiBleGNsdWRl X2RlbGV0ZWQgYW5kIGhkYS5kZWxldGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg ICAgICAgICBpZiBleGNsdWRlX2hpZGRlbiBhbmQgbm90IGhkYS52aXNpYmxlOgorICAgICAgICAg ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdGF0ZV9jb3VudHNbIGhkYS5zdGF0ZSBdID0z RCBzdGF0ZV9jb3VudHNbIGhkYS5zdGF0ZSBdICsgMQorICAgICAgICByZXR1cm4gc3RhdGVfY291 bnRzCj0yMAotICAgICAgICAjVE9ETzogaXRlbV9zbHVnIHVybAotICAgICAgICBpZiBoaXN0b3J5 X2RpY3RbICdpbXBvcnRhYmxlJyBdIGFuZCBoaXN0b3J5X2RpY3RbICdzbHVnJyBdOgotICAgICAg ICAgICAgdXNlcm5hbWVfYW5kX3NsdWcgPTNEICggJy8nICkuam9pbigoICd1JywgaGlzdG9yeS51 c2VyLnVzZXJuYW09CmUsICdoJywgaGlzdG9yeV9kaWN0WyAnc2x1ZycgXSApKQotICAgICAgICAg ICAgaGlzdG9yeV9kaWN0WyAndXNlcm5hbWVfYW5kX3NsdWcnIF0gPTNEIHVzZXJuYW1lX2FuZF9z bHVnCisgICAgIyByZW1vdmUgdGhpcworICAgIGRlZiBnZXRfc3RhdGVfaWRzKCBzZWxmLCB0cmFu cywgaGlzdG9yeSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHN0YXRlX2lk cyA9M0Qge30KKyAgICAgICAgZm9yIHN0YXRlIGluIHRyYW5zLmFwcC5tb2RlbC5EYXRhc2V0LnN0 YXRlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHN0YXRlX2lkc1sgc3RhdGUgXSA9M0QgW10KPTIw Ci0jVE9ETzogcmUtYWRkCi0gICAgICAgICNoZGFfc3VtbWFyaWVzID0zRCBoZGFfZGljdGlvbmFy aWVzIGlmIGhkYV9kaWN0aW9uYXJpZXMgZWxzZSBzZWxmLj0KZ2V0X2hkYV9zdW1tYXJ5X2RpY3Rz KCB0cmFucywgaGlzdG9yeSApCi0gICAgICAgICMjVE9ETyByZW1vdmUgdGhlIGZvbGxvd2luZyBp biB2MgotICAgICAgICAjKCBzdGF0ZV9jb3VudHMsIHN0YXRlX2lkcyApID0zRCBzZWxmLl9nZXRf aGRhX3N0YXRlX3N1bW1hcmllcyggdHI9CmFucywgaGRhX3N1bW1hcmllcyApCi0gICAgICAgICNo aXN0b3J5X2RpY3RbICdzdGF0ZV9kZXRhaWxzJyBdID0zRCBzdGF0ZV9jb3VudHMKLSAgICAgICAg I2hpc3RvcnlfZGljdFsgJ3N0YXRlX2lkcycgXSA9M0Qgc3RhdGVfaWRzCi0gICAgICAgICNoaXN0 b3J5X2RpY3RbICdzdGF0ZScgXSA9M0Qgc2VsZi5fZ2V0X2hpc3Rvcnlfc3RhdGVfZnJvbV9oZGFz KCB0cj0KYW5zLCBoaXN0b3J5LCBzdGF0ZV9jb3VudHMgKQorICAgICAgICAjVE9ETzo/PyBjb2xs ZWN0aW9ucyBhbmQgY29sbC4gc3RhdGVzPworICAgICAgICBmb3IgaGRhIGluIGhpc3RvcnkuZGF0 YXNldHM6CisgICAgICAgICAgICAjVE9ETzogZG8gbm90IGVuY29kZSBpZHMgYXQgdGhpcyBsYXll cgorICAgICAgICAgICAgZW5jb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBo ZGEuaWQgKQorICAgICAgICAgICAgc3RhdGVfaWRzWyBoZGEuc3RhdGUgXS5hcHBlbmQoIGVuY29k ZWRfaWQgKQorICAgICAgICByZXR1cm4gc3RhdGVfaWRzCj0yMAotICAgICAgICByZXR1cm4gaGlz dG9yeV9kaWN0CisgICAgI1RPRE86IHJlbW92ZSB0aGlzIChpcyBzdGF0ZSB1c2VkL3VzZWZ1bD8p CisgICAgZGVmIGdldF9oaXN0b3J5X3N0YXRlKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgorICAg ICAgICAiIiJSZXR1cm5zIHRoZSBoaXN0b3J5IHN0YXRlIGJhc2VkIG9uIHRoZSBzdGF0ZXMgb2Yg dGhlIEhEQXMgaXQgY289Cm50YWlucy4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXRlcyA9M0Qg dHJhbnMuYXBwLm1vZGVsLkRhdGFzZXQuc3RhdGVzCj0yMAotICAgIGRlZiBtb3N0X3JlY2VudCgg c2VsZiwgdHJhbnMsIHVzZXI9M0ROb25lLCBkZWxldGVkPTNERmFsc2UgKToKLSAgICAgICAgdXNl ciA9M0QgdXNlciBvciB0cmFucy51c2VyCi0gICAgICAgIGlmIG5vdCB1c2VyOgotICAgICAgICAg ICAgcmV0dXJuIE5vbmUgaWYgdHJhbnMuaGlzdG9yeS5kZWxldGVkIGVsc2UgdHJhbnMuaGlzdG9y eQorICAgICAgICAjIChkZWZhdWx0IHRvIEVSUk9SKQorICAgICAgICBzdGF0ZSA9M0Qgc3RhdGVz LkVSUk9SCj0yMAotICAgICAgICAjVE9ETzogZHVwIHdpdGggYnlfdXNlciAtIHNob3VsZCByZXR1 cm4gcXVlcnkgZnJvbSB0aGVyZSBhbmQgY2FsbCA9CmZpcnN0IGFuZCBub3QgYWxsCi0gICAgICAg IGhpc3RvcnlfbW9kZWwgPTNEIHRyYW5zLm1vZGVsLkhpc3RvcnkKLSAgICAgICAgcXVlcnkgPTNE ICggdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggaGlzdG9yeV9tb2RlbCApCi0gICAgICAgICAgICAg ICAgICAuZmlsdGVyKCBoaXN0b3J5X21vZGVsLnVzZXIgPTNEPTNEIHVzZXIgKQotICAgICAgICAg ICAgICAgICAgLm9yZGVyX2J5KCBvcm0uZGVzYyggaGlzdG9yeV9tb2RlbC50YWJsZS5jLnVwZGF0 ZV90aW1lICk9CiApICkKLSAgICAgICAgaWYgbm90IGRlbGV0ZWQ6Ci0gICAgICAgICAgICBxdWVy eSA9M0QgcXVlcnkuZmlsdGVyKCBoaXN0b3J5X21vZGVsLmRlbGV0ZWQgPTNEPTNEIEZhbHNlICkK LSAgICAgICAgcmV0dXJuIHF1ZXJ5LmZpcnN0KCkKKyAgICAgICAgI1RPRE86IGhpc3Rvcnlfc3Rh dGUgYW5kIHN0YXRlX2NvdW50cyBhcmUgY2xhc3NpY2FsbHkgY2FsYydkIGF0IHRoPQplIHNhbWUg dGltZQorICAgICAgICAjICAgc28gdGhpcyBpcyByZWwuIGluZWZmLiAtIGlmIHdlIGtlZXAgdGhp cy4uLgorICAgICAgICBoZGFfc3RhdGVfY291bnRzID0zRCBzZWxmLmdldF9zdGF0ZV9jb3VudHMo IHRyYW5zLCBoaXN0b3J5LCBleGNsdWQ9CmVfZGVsZXRlZD0zREZhbHNlICkKKyAgICAgICAgbnVt X2hkYXMgPTNEIHN1bSggaGRhX3N0YXRlX2NvdW50cy52YWx1ZXMoKSApCisgICAgICAgIGlmIG51 bV9oZGFzID0zRD0zRCAwOgorICAgICAgICAgICAgc3RhdGUgPTNEIHN0YXRlcy5ORVcKPTIwCi0j ID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRAotY2xhc3MgSGlzdG9yeVNlcmlhbGl6ZXIoIG1hbmFnZXJfYmFzZS5Nb2RlbFNl cmlhbGl6ZXIgKToKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmKCAoIGhkYV9zdGF0ZV9j b3VudHNbIHN0YXRlcy5SVU5OSU5HIF0gPiAwICkKKyAgICAgICAgICAgIG9yICAoIGhkYV9zdGF0 ZV9jb3VudHNbIHN0YXRlcy5TRVRUSU5HX01FVEFEQVRBIF0gPiAwICkKKyAgICAgICAgICAgIG9y ICAoIGhkYV9zdGF0ZV9jb3VudHNbIHN0YXRlcy5VUExPQUQgXSA+IDAgKSApOgorICAgICAgICAg ICAgICAgIHN0YXRlID0zRCBzdGF0ZXMuUlVOTklORworICAgICAgICAgICAgI1RPRE86IHRoaXMg bWV0aG9kIG1heSBiZSBtb3JlIHVzZWZ1bCBpZiB3ZSAqYWxzbyogcG9sbGVkIHRoZSA9Cmhpc3Rv cmllcyBqb2JzIGhlcmUgdG9vCisKKyAgICAgICAgICAgIGVsaWYgaGRhX3N0YXRlX2NvdW50c1sg c3RhdGVzLlFVRVVFRCBdID4gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9M0Qgc3RhdGVzLlFV RVVFRAorCisgICAgICAgICAgICBlbGlmKCAoIGhkYV9zdGF0ZV9jb3VudHNbIHN0YXRlcy5FUlJP UiBdID4gMCApCisgICAgICAgICAgICBvciAgICAoIGhkYV9zdGF0ZV9jb3VudHNbIHN0YXRlcy5G QUlMRURfTUVUQURBVEEgXSA+IDAgKSApOgorICAgICAgICAgICAgICAgIHN0YXRlID0zRCBzdGF0 ZXMuRVJST1IKKworICAgICAgICAgICAgZWxpZiBoZGFfc3RhdGVfY291bnRzWyBzdGF0ZXMuT0sg XSA9M0Q9M0QgbnVtX2hkYXM6CisgICAgICAgICAgICAgICAgc3RhdGUgPTNEIHN0YXRlcy5PSwor CisgICAgICAgIHJldHVybiBzdGF0ZQorCisKKyMjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRAorY2xhc3MgSGlzdG9yeVNl cmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyICk6CiAgICAgIiIiCiAgICAgSW50ZXJmYWNl L3NlcnZpY2Ugb2JqZWN0IGZvciBzZXJpYWxpemluZyBoaXN0b3JpZXMgaW50byBkaWN0aW9uYXJp ZXMuCiAgICAgIiIiCi0gICAgcGFzcworCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToK KyAgICAgICAgc3VwZXIoIEhpc3RvcnlTZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCAp CisgICAgICAgIHNlbGYuaGlzdG9yeV9tZ3IgPTNEIEhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorCisg ICAgICAgIHN1bW1hcnlfdmlldyA9M0QgWworICAgICAgICAgICAgJ2lkJywKKyAgICAgICAgICAg ICdtb2RlbF9jbGFzcycsCisgICAgICAgICAgICAnbmFtZScsCisgICAgICAgICAgICAnZGVsZXRl ZCcsICdwdXJnZWQnLAorICAgICAgICAgICAgJ3B1Ymxpc2hlZCcsCisgICAgICAgICAgICAjJ2Nv dW50JworICAgICAgICAgICAgJ2Fubm90YXRpb24nLAorICAgICAgICAgICAgJ3RhZ3MnLAorICAg ICAgICAgICAgJ3VybCcKKyAgICAgICAgXQorICAgICAgICAjIGluIHRoZSBIaXN0b3J5cycgY2Fz ZSwgZWFjaCBvZiB0aGVzZSB2aWV3cyBpbmNsdWRlcyB0aGUga2V5cyBmcm89Cm0gdGhlIHByZXZp b3VzCisgICAgICAgIGRldGFpbGVkX3ZpZXcgPTNEIHN1bW1hcnlfdmlldyArIFsKKyAgICAgICAg ICAgICdjb250ZW50c191cmwnLAorICAgICAgICAgICAgIydoZGFzJywKKyAgICAgICAgICAgICdl bXB0eScsCisgICAgICAgICAgICAnc2l6ZScsICduaWNlX3NpemUnLAorICAgICAgICAgICAgJ3Vz ZXJfaWQnLAorICAgICAgICAgICAgJ2NyZWF0ZV90aW1lJywgJ3VwZGF0ZV90aW1lJywKKyAgICAg ICAgICAgICdpbXBvcnRhYmxlJywgJ3NsdWcnLAorICAgICAgICAgICAgJ2dlbm9tZV9idWlsZCcs CisgICAgICAgICAgICAjdXNlcm5hbWVfYW5kX3NsdWcgPTNEICggJy8nICkuam9pbigoICd1Jywg aGlzdG9yeS51c2VyLnVzZXJuYT0KbWUsICdoJywgaGlzdG9yeV9kaWN0WyAnc2x1ZycgXSApKQor ICAgICAgICAgICAgI1RPRE86IHJlbW92ZSB0aGUgbmV4dCB0aHJlZSAtIGluc3RlYWQgZ2V0dGlu ZyB0aGUgc2FtZSBpbmZvIGY9CnJvbSB0aGUgJ2hkYXMnIGxpc3QKKyAgICAgICAgICAgICdzdGF0 ZScsCisgICAgICAgICAgICAnc3RhdGVfZGV0YWlscycsCisgICAgICAgICAgICAnc3RhdGVfaWRz JywKKyAgICAgICAgXQorICAgICAgICBleHRlbmRlZF92aWV3ID0zRCBkZXRhaWxlZF92aWV3ICsg WworICAgICAgICBdCisgICAgICAgIHNlbGYuc2VyaWFsaXphYmxlX2tleXMgPTNEIGV4dGVuZGVk X3ZpZXcgKyBbXQorICAgICAgICBzZWxmLnZpZXdzID0zRCB7CisgICAgICAgICAgICAnc3VtbWFy eScgICA6IHN1bW1hcnlfdmlldywKKyAgICAgICAgICAgICdkZXRhaWxlZCcgIDogZGV0YWlsZWRf dmlldywKKyAgICAgICAgICAgICdleHRlbmRlZCcgIDogZXh0ZW5kZWRfdmlldywKKyAgICAgICAg fQorICAgICAgICBzZWxmLmRlZmF1bHRfdmlldyA9M0QgJ3N1bW1hcnknCisKKyAgICAjYXNzdW1l czogb3V0Z29pbmcgdG8ganNvbi5kdW1wcyBhbmQgc2FuaXRpemVkCisgICAgZGVmIGFkZF9zZXJp YWxpemVycyggc2VsZiApOgorICAgICAgICBzdXBlciggSGlzdG9yeVNlcmlhbGl6ZXIsIHNlbGYg KS5hZGRfc2VyaWFsaXplcnMoKQorICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0ZSh7Cisg ICAgICAgICAgICAnbW9kZWxfY2xhc3MnICAgOiBsYW1iZGEgKmE6ICdIaXN0b3J5JywKKyAgICAg ICAgICAgICdpZCcgICAgICAgICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAorICAgICAgICAgICAg J2NvdW50JyAgICAgICAgIDogbGFtYmRhIHRyYW5zLCBpdGVtLCBrZXk6IGxlbiggaXRlbS5kYXRh c2V0cyA9CiksCisgICAgICAgICAgICAnY3JlYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlhbGl6ZV9k YXRlLAorICAgICAgICAgICAgJ3VwZGF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVfZGF0ZSwK KyAgICAgICAgICAgICd1c2VyX2lkJyAgICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAorICAgICAg ICAgICAgJ2hkYXMnICAgICAgICAgIDogbGFtYmRhIHQsIGksIGs6IFsgdC5zZWN1cml0eS5lbmNv ZGVfaWQoIGhkYS49CmlkICkgZm9yIGhkYSBpbiBpLmRhdGFzZXRzIF0sCisgICAgICAgICAgICAn c2l6ZScgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogaW50KCBpLmdldF9kaXNrX3NpemUoKSAp LAorICAgICAgICAgICAgJ25pY2Vfc2l6ZScgICAgIDogbGFtYmRhIHQsIGksIGs6IGkuZ2V0X2Rp c2tfc2l6ZSggbmljZV9zaXplPQo9M0RUcnVlICksCisgICAgICAgICAgICAjVE9ETzogdG8gbWl4 aW5zOiBhbm5vdGF0YWJsZSwgdGFnZ2FibGUKKyAgICAgICAgICAgICdhbm5vdGF0aW9uJyAgICA6 IGxhbWJkYSB0LCBpLCBrOiBpLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCB0PQouc2Ffc2Vzc2lv biwgdC51c2VyLCBpICksCisgICAgICAgICAgICAndGFncycgICAgICAgICAgOiBsYW1iZGEgdCwg aSwgazogWyB0YWcudXNlcl90bmFtZSArICggJzonICsgdD0KYWcudXNlcl92YWx1ZSBpZiB0YWcu dXNlcl92YWx1ZSBlbHNlICcnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciB0YWcgaW4gaS50YWdzIF0sCisgICAgICAgICAgICAndXJsJyAgICAg ICAgICAgOiBsYW1iZGEgdCwgaSwgazogZ2FsYXh5LndlYi51cmxfZm9yKCAnaGlzdG9yeT0KJywg aWQ9M0R0LnNlY3VyaXR5LmVuY29kZV9pZCggaS5pZCApICksCisgICAgICAgICAgICAnY29udGVu dHNfdXJsJyAgOiBsYW1iZGEgdCwgaSwgazoKKyAgICAgICAgICAgICAgICBnYWxheHkud2ViLnVy bF9mb3IoICdoaXN0b3J5X2NvbnRlbnRzJywgaGlzdG9yeV9pZD0zRHQuc2VjPQp1cml0eS5lbmNv ZGVfaWQoIGkuaWQgKSApLAorICAgICAgICAgICAgJ2VtcHR5JyAgICAgICAgIDogbGFtYmRhIHQs IGksIGs6IGxlbiggaS5kYXRhc2V0cyApIDw9M0QgMCwKKworICAgICAgICAgICAgJ3N0YXRlJyAg ICAgICAgIDogbGFtYmRhIHQsIGksIGs6IHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X2hpc3Rvcnk9Cl9z dGF0ZSggdCwgaSApLAorICAgICAgICAgICAgJ3N0YXRlX2RldGFpbHMnIDogbGFtYmRhIHQsIGks IGs6IHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X3N0YXRlX2M9Cm91bnRzKCB0LCBpICksCisgICAgICAg ICAgICAnc3RhdGVfaWRzJyAgICAgOiBsYW1iZGEgdCwgaSwgazogc2VsZi5oaXN0b3J5X21nci5n ZXRfc3RhdGVfaT0KZHMoIHQsIGkgKSwKKyAgICAgICAgfSkKKworIyMgPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNECitjbGFz cyBIaXN0b3J5RGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyICk6CisgICAgIiIi CisgICAgSW50ZXJmYWNlL3NlcnZpY2Ugb2JqZWN0IGZvciB2YWxpZGF0aW5nIGFuZCBkZXNlcmlh bGl6aW5nIGRpY3Rpb25hcmllcz0KIGludG8gaGlzdG9yaWVzLgorICAgICIiIgorCisgICAgZGVm IF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgc3VwZXIoIEhpc3RvcnlEZXNlcmlhbGl6 ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKKyAgICAgICAgc2VsZi5oaXN0b3J5X21nciA9M0Qg SGlzdG9yeU1hbmFnZXIoIGFwcCApCisKKyAgICAjYXNzdW1lczogaW5jb21pbmcgZnJvbSBqc29u LmxvYWRzIGFuZCBzYW5pdGl6ZWQKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToK KyAgICAgICAgc3VwZXIoIEhpc3RvcnlEZXNlcmlhbGl6ZXIsIHNlbGYgKS5hZGRfZGVzZXJpYWxp emVycygpCisgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycy51cGRhdGUoeworICAgICAgICAgICAg J25hbWUnICAgICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9iYXNlc3RyaW5nLAorICAgICAgICAg ICAgJ2dlbm9tZV9idWlsZCcgIDogc2VsZi5kZXNlcmlhbGl6ZV9nZW5vbWVfYnVpbGQsCisgICAg ICAgICAgICAjIG1peGluOiBhbm5vdGF0YWJsZQorICAgICAgICAgICAgJ2Fubm90YXRpb24nICAg IDogc2VsZi5kZXNlcmlhbGl6ZV9hbm5vdGF0aW9uLAorICAgICAgICAgICAgIyBtaXhpbjogdGFn Z2FibGUKKyAgICAgICAgICAgICd0YWdzJyAgICAgICAgICA6IHNlbGYuZGVzZXJpYWxpemVfdGFn cywKKworICAgICAgICAgICAgIyBtaXhpbjogZGVsZXRhYmxlCisgICAgICAgICAgICAnZGVsZXRl ZCcgICAgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jvb2wsCisgICAgICAgICAgICAjIHNoYXJhYmxl CisgICAgICAgICAgICAncHVibGlzaGVkJyAgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jvb2wsCisg ICAgICAgICAgICAnaW1wb3J0YWJsZScgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jvb2wsCisgICAg ICAgIH0pCisgICAgICAgIHNlbGYuZGVzZXJpYWxpemFibGVfa2V5cyA9M0Qgc2VsZi5kZXNlcmlh bGl6ZXJzLmtleXMoKQoKZGlmZiAtciBjYzcxNDc1MTRkNzc3OTk5ODk3NzdmZDIxYWE4MThlNDNk OWYzZDM5IC1yIDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxPQowMjVlOTA2ZjUwYTBkN2EyYSBsaWIv Z2FsYXh5L21hbmFnZXJzL2xkZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvbGRkYXMu cHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9sZGRhcy5weQpAQCAtNSw3ICs1LDcgQEAKICAg ICAiIiIgQSBmYWlybHkgc3BhcnNlIG1hbmFnZXIgZm9yIExEREFzLgogICAgICIiIgo9MjAKLSAg ICBkZWYgX19pbml0X18oIHNlbGYgKToKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgog ICAgICAgICAiIiIKICAgICAgICAgU2V0IHVwIGFuZCBpbml0aWFsaXplIG90aGVyIG1hbmFnZXJz IG5lZWRlZCBieSBsZGRhcy4KICAgICAgICAgIiIiCgpUaGlzIGRpZmYgaXMgc28gYmlnIHRoYXQg d2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIuCgpodHRwczovL2JpdGJ1Y2tldC5v cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOTVlMzA1ZGIyOWI3LwpDaGFuZ2VzZXQ6 ICAgOTVlMzA1ZGIyOWI3ClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAgICAy MDE0LTEyLTE4IDE1OjU3OjIwKzAwOjAwClN1bW1hcnk6ICAgICBNZXJnZWQgZ2FsYXh5L2dhbGF4 eS1jZW50cmFsIGludG8gZGVmYXVsdApBZmZlY3RlZCAjOiAgMTEgZmlsZXMKCmRpZmYgLXIgNzQw ZDc1OGMyMjg1YmVjMTQwZTY5MDEwMjVlOTA2ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5YjdlYjAy OGIwOTc2Mj0KZDAwYmQzMDVjNGM3ODIzZTEgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9kYXRh LmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvZGF0YS5qcworKysgYi9jbGllbnQv Z2FsYXh5L3NjcmlwdHMvbXZjL2RhdGEuanMKQEAgLTE2OSw3ICsxNjksOCBAQAogICAgICAgICB9 KTsKICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKGRhdGFfdGFibGUpOwogICAgICAgICB2YXIgY29s dW1uX25hbWVzID0zRCB0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgnY29sdW1uX25hbWVzJyksCi0g ICAgICAgICAgICBoZWFkZXJfcm93ID0zRCAkKCc8dHIvPicpLmFwcGVuZFRvKGRhdGFfdGFibGUp OworICAgICAgICAgICAgaGVhZGVyX2NvbnRhaW5lciA9M0QgJCgnPHRoZWFkLz4nKS5hcHBlbmRU byhkYXRhX3RhYmxlKSwKKyAgICAgICAgICAgIGhlYWRlcl9yb3cgPTNEICQoJzx0ci8+JykuYXBw ZW5kVG8oaGVhZGVyX2NvbnRhaW5lcik7CiAgICAgICAgIGlmIChjb2x1bW5fbmFtZXMpIHsKICAg ICAgICAgICAgIGhlYWRlcl9yb3cuYXBwZW5kKCc8dGg+JyArIGNvbHVtbl9uYW1lcy5qb2luKCc8 L3RoPjx0aD4nKSArICc8PQovdGg+Jyk7CiAgICAgICAgIH0gZWxzZSB7CgpkaWZmIC1yIDc0MGQ3 NThjMjI4NWJlYzE0MGU2OTAxMDI1ZTkwNmY1MGEwZDdhMmEgLXIgOTVlMzA1ZGIyOWI3ZWIwMjhi MDk3NjI9CmQwMGJkMzA1YzRjNzgyM2UxIGxpYi9nYWxheHkvdG9vbHMvcGFyc2VyL3htbC5weQot LS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3BhcnNlci94bWwucHkKKysrIGIvbGliL2dhbGF4eS90b29s cy9wYXJzZXIveG1sLnB5CkBAIC0xODYsNiArMTg2LDExIEBACiAgICAgcnZhbCA9M0QgZGljdCgK ICAgICAgICAgb3V0cHV0cz0zRF9fcGFyc2Vfb3V0cHV0X2VsZW1zKHRlc3RfZWxlbSksCiAgICAg ICAgIGlucHV0cz0zRF9fcGFyc2VfaW5wdXRfZWxlbXModGVzdF9lbGVtLCBpKSwKKyAgICAgICAg Y29tbWFuZD0zRF9fcGFyc2VfYXNzZXJ0X2xpc3RfZnJvbV9lbGVtKCB0ZXN0X2VsZW0uZmluZCgi YXNzZXJ0X2NvPQptbWFuZCIpICksCisgICAgICAgIHN0ZG91dD0zRF9fcGFyc2VfYXNzZXJ0X2xp c3RfZnJvbV9lbGVtKCB0ZXN0X2VsZW0uZmluZCgiYXNzZXJ0X3N0ZD0Kb3V0IikgKSwKKyAgICAg ICAgc3RkZXJyPTNEX19wYXJzZV9hc3NlcnRfbGlzdF9mcm9tX2VsZW0oIHRlc3RfZWxlbS5maW5k KCJhc3NlcnRfc3RkPQplcnIiKSApLAorICAgICAgICBleHBlY3RfZXhpdF9jb2RlPTNEdGVzdF9l bGVtLmdldCgiZXhwZWN0X2V4aXRfY29kZSIpLAorICAgICAgICBleHBlY3RfZmFpbHVyZT0zRHN0 cmluZ19hc19ib29sKHRlc3RfZWxlbS5nZXQoImV4cGVjdF9mYWlsdXJlIiwgRmE9CmxzZSkpLAog ICAgICkKICAgICBfY29weV90b19kaWN0X2lmX3ByZXNlbnQodGVzdF9lbGVtLCBydmFsLCBbImlu dGVyYWN0b3IiLCAibnVtX291dHB1dHMiPQpdKQogICAgIHJldHVybiBydmFsCkBAIC0yMjIsNiAr MjI3LDExIEBACiAgICAgcmV0dXJuIG5hbWUsIGZpbGUsIGF0dHJpYnV0ZXMKPTIwCj0yMAorZGVm IF9fcGFyc2VfY29tbWFuZF9lbGVtKCB0ZXN0X2VsZW0gKToKKyAgICBhc3NlcnRfZWxlbSA9M0Qg dGVzdF9lbGVtLmZpbmQoImNvbW1hbmQiKQorICAgIHJldHVybiBfX3BhcnNlX2Fzc2VydF9saXN0 X2Zyb21fZWxlbSggYXNzZXJ0X2VsZW0gKQorCisKIGRlZiBfX3BhcnNlX3Rlc3RfYXR0cmlidXRl cyggb3V0cHV0X2VsZW0sIGF0dHJpYiApOgogICAgIGFzc2VydF9saXN0ID0zRCBfX3BhcnNlX2Fz c2VydF9saXN0KCBvdXRwdXRfZWxlbSApCiAgICAgZmlsZSA9M0QgYXR0cmliLnBvcCggJ2ZpbGUn LCBOb25lICkKQEAgLTI1Miw2ICsyNjIsMTAgQEAKPTIwCiBkZWYgX19wYXJzZV9hc3NlcnRfbGlz dCggb3V0cHV0X2VsZW0gKToKICAgICBhc3NlcnRfZWxlbSA9M0Qgb3V0cHV0X2VsZW0uZmluZCgi YXNzZXJ0X2NvbnRlbnRzIikKKyAgICByZXR1cm4gX19wYXJzZV9hc3NlcnRfbGlzdF9mcm9tX2Vs ZW0oIGFzc2VydF9lbGVtICkKKworCitkZWYgX19wYXJzZV9hc3NlcnRfbGlzdF9mcm9tX2VsZW0o IGFzc2VydF9lbGVtICk6CiAgICAgYXNzZXJ0X2xpc3QgPTNEIE5vbmUKPTIwCiAgICAgZGVmIGNv bnZlcnRfZWxlbShlbGVtKToKCmRpZmYgLXIgNzQwZDc1OGMyMjg1YmVjMTQwZTY5MDEwMjVlOTA2 ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5YjdlYjAyOGIwOTc2Mj0KZDAwYmQzMDVjNGM3ODIzZTEg bGliL2dhbGF4eS90b29scy9wYXJzZXIveWFtbC5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3Bh cnNlci95YW1sLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvcGFyc2VyL3lhbWwucHkKQEAgLTE1 MiwyNyArMTUyLDQ3IEBACiAgICAgICAgIGF0dHJpYnV0ZXNbIm1ldGFkYXRhIl0gPTNEIHt9CiAg ICAgICAgICMgVE9ETwogICAgICAgICBhc3NlcnRfbGlzdCA9M0QgW10KLSAgICAgICAgZm9yIGtl eSwgYXNzZXJ0aW9uIGluIGF0dHJpYnV0ZXMuZ2V0KCJhc3NlcnRzIiwge30pLml0ZXJpdGVtcygp OgotICAgICAgICAgICAgIyBUT0RPOiBub3QgaGFuZGxpbmcgbmVzdGVkIGFzc2VydGlvbnMgY29y cmVjdGx5LAotICAgICAgICAgICAgIyBub3Qgc3VyZSB0aGVzZSBhcmUgdXNlZCB0aG91Z2guCi0g ICAgICAgICAgICBjaGlsZHJlbiA9M0QgW10KLSAgICAgICAgICAgIGlmICJjaGlsZHJlbiIgaW4g YXNzZXJ0aW9uOgotICAgICAgICAgICAgICAgIGNoaWxkcmVuID0zRCBhc3NlcnRpb25bImNoaWxk cmVuIl0KLSAgICAgICAgICAgICAgICBkZWwgYXNzZXJ0aW9uWyJjaGlsZHJlbiJdCi0gICAgICAg ICAgICBhc3NlcnRfZGljdCA9M0QgZGljdCgKLSAgICAgICAgICAgICAgICB0YWc9M0RrZXksCi0g ICAgICAgICAgICAgICAgYXR0cmlidXRlcz0zRGFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICBj aGlsZHJlbj0zRGNoaWxkcmVuLAotICAgICAgICAgICAgKQotICAgICAgICAgICAgYXNzZXJ0X2xp c3QuYXBwZW5kKGFzc2VydF9kaWN0KQorICAgICAgICBhc3NlcnRfbGlzdCA9M0QgX190b190ZXN0 X2Fzc2VydF9saXN0KCBhdHRyaWJ1dGVzLmdldCgiYXNzZXJ0cyIsIFs9Cl0gKSApCiAgICAgICAg IGF0dHJpYnV0ZXNbImFzc2VydF9saXN0Il0gPTNEIGFzc2VydF9saXN0Ci0KICAgICAgICAgX2Vu c3VyZV9oYXMoYXR0cmlidXRlcywgZGVmYXVsdHMpCj0yMAogICAgIHRlc3RfZGljdFsib3V0cHV0 cyJdID0zRCBuZXdfb3V0cHV0cworICAgIHRlc3RfZGljdFsiY29tbWFuZCJdID0zRCBfX3RvX3Rl c3RfYXNzZXJ0X2xpc3QoIHRlc3RfZGljdC5nZXQoICJjb21tYW49CmQiLCBbXSApICkKKyAgICB0 ZXN0X2RpY3RbInN0ZG91dCJdID0zRCBfX3RvX3Rlc3RfYXNzZXJ0X2xpc3QoIHRlc3RfZGljdC5n ZXQoICJzdGRvdXQiPQosIFtdICkgKQorICAgIHRlc3RfZGljdFsic3RkZXJyIl0gPTNEIF9fdG9f dGVzdF9hc3NlcnRfbGlzdCggdGVzdF9kaWN0LmdldCggInN0ZGVyciI9CiwgW10gKSApCisgICAg dGVzdF9kaWN0WyJleHBlY3RfZXhpdF9jb2RlIl0gPTNEIHRlc3RfZGljdC5nZXQoICJleHBlY3Rf ZXhpdF9jb2RlIiwgTj0Kb25lICkKKyAgICB0ZXN0X2RpY3RbImV4cGVjdF9mYWlsdXJlIl0gPTNE IHRlc3RfZGljdC5nZXQoICJleHBlY3RfZXhpdF9jb2RlIiwgRmFsPQpzZSApCiAgICAgcmV0dXJu IHRlc3RfZGljdAo9MjAKPTIwCitkZWYgX190b190ZXN0X2Fzc2VydF9saXN0KGFzc2VydGlvbnMp OgorICAgIGRlZiBleHBhbmRfZGljdF9mb3JtKGl0ZW0pOgorICAgICAgICBrZXksIHZhbHVlID0z RCBpdGVtCisgICAgICAgIG5ld192YWx1ZSA9M0QgdmFsdWUuY29weSgpCisgICAgICAgIG5ld192 YWx1ZVsidGhhdCJdID0zRCBrZXkKKyAgICAgICAgcmV0dXJuIG5ld192YWx1ZQorCisgICAgaWYg aXNpbnN0YW5jZSggYXNzZXJ0aW9ucywgZGljdCApOgorICAgICAgICBhc3NlcnRpb25zID0zRCBt YXAoZXhwYW5kX2RpY3RfZm9ybSwgYXNzZXJ0aW9ucy5pdGVtcygpICkKKworICAgIGFzc2VydF9s aXN0ID0zRCBbXQorICAgIGZvciBhc3NlcnRpb24gaW4gYXNzZXJ0aW9uczoKKyAgICAgICAgIyBU T0RPOiBub3QgaGFuZGxpbmcgbmVzdGVkIGFzc2VydGlvbnMgY29ycmVjdGx5LAorICAgICAgICAj IG5vdCBzdXJlIHRoZXNlIGFyZSB1c2VkIHRob3VnaC4KKyAgICAgICAgY2hpbGRyZW4gPTNEIFtd CisgICAgICAgIGlmICJjaGlsZHJlbiIgaW4gYXNzZXJ0aW9uOgorICAgICAgICAgICAgY2hpbGRy ZW4gPTNEIGFzc2VydGlvblsiY2hpbGRyZW4iXQorICAgICAgICAgICAgZGVsIGFzc2VydGlvblsi Y2hpbGRyZW4iXQorICAgICAgICBhc3NlcnRfZGljdCA9M0QgZGljdCgKKyAgICAgICAgICAgIHRh Zz0zRGFzc2VydGlvblsidGhhdCJdLAorICAgICAgICAgICAgYXR0cmlidXRlcz0zRGFzc2VydGlv biwKKyAgICAgICAgICAgIGNoaWxkcmVuPTNEY2hpbGRyZW4sCisgICAgICAgICkKKyAgICAgICAg YXNzZXJ0X2xpc3QuYXBwZW5kKGFzc2VydF9kaWN0KQorCisgICAgcmV0dXJuIGFzc2VydF9saXN0 IG9yIE5vbmUgICMgWE1MIHZhcmlhbnQgaXMgTm9uZSBpZiBubyBhc3NlcnRpb25zIG1hZGUKKwor CiBjbGFzcyBZYW1sUGFnZVNvdXJjZShQYWdlU291cmNlKToKPTIwCiAgICAgZGVmIF9faW5pdF9f KHNlbGYsIGlucHV0c19saXN0KToKCmRpZmYgLXIgNzQwZDc1OGMyMjg1YmVjMTQwZTY5MDEwMjVl OTA2ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5YjdlYjAyOGIwOTc2Mj0KZDAwYmQzMDVjNGM3ODIz ZTEgbGliL2dhbGF4eS90b29scy90ZXN0LnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvdGVzdC5w eQorKysgYi9saWIvZ2FsYXh5L3Rvb2xzL3Rlc3QucHkKQEAgLTEyNyw2ICsxMjcsMTEgQEAKICAg ICAgICAgICAgIGlmIG51bV9vdXRwdXRzOgogICAgICAgICAgICAgICAgIG51bV9vdXRwdXRzID0z RCBpbnQoIG51bV9vdXRwdXRzICkKICAgICAgICAgICAgIHNlbGYubnVtX291dHB1dHMgPTNEIG51 bV9vdXRwdXRzCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRfbGluZSA9M0QgdGVzdF9kaWN0Lmdl dCgiY29tbWFuZCIsIE5vbmUpCisgICAgICAgICAgICBzZWxmLnN0ZG91dCA9M0QgdGVzdF9kaWN0 LmdldCgic3Rkb3V0IiwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0zRCB0ZXN0X2Rp Y3QuZ2V0KCJzdGRlcnIiLCBOb25lKQorICAgICAgICAgICAgc2VsZi5leHBlY3RfZXhpdF9jb2Rl ID0zRCB0ZXN0X2RpY3QuZ2V0KCJleHBlY3RfZXhpdF9jb2RlIiwgTm89Cm5lKQorICAgICAgICAg ICAgc2VsZi5leHBlY3RfZmFpbHVyZSA9M0QgdGVzdF9kaWN0LmdldCgiZXhwZWN0X2ZhaWx1cmUi LCBGYWxzZSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgIHNlbGYu ZXJyb3IgPTNEIFRydWUKICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0zRCBlCgpkaWZmIC1y IDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxMDI1ZTkwNmY1MGEwZDdhMmEgLXIgOTVlMzA1ZGIyOWI3 ZWIwMjhiMDk3NjI9CmQwMGJkMzA1YzRjNzgyM2UxIGxpYi9nYWxheHkvd2ViL2ZyYW1ld29yay9t aWRkbGV3YXJlL3JlbW90ZXVzZXIucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvZnJhbWV3b3JrL21p ZGRsZXdhcmUvcmVtb3RldXNlci5weQorKysgYi9saWIvZ2FsYXh5L3dlYi9mcmFtZXdvcmsvbWlk ZGxld2FyZS9yZW1vdGV1c2VyLnB5CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICMgUmV3cml0 ZSogbWV0aG9kIGZvciBwYXNzaW5nIFJFTU9URV9VU0VSIGFuZCBhIHVzZXIgaXMKICAgICAgICAg IyB1bi1hdXRoZW50aWNhdGVkLiAgQW55IG90aGVyIHBvc3NpYmxlIHZhbHVlcyBuZWVkIHRvIGdv IGhlcmUgYXMgPQp3ZWxsLgogICAgICAgICBwYXRoX2luZm8gPTNEIGVudmlyb24uZ2V0KCdQQVRI X0lORk8nLCAnJykKLSAgICAgICAgaWYgZW52aXJvbi5nZXQoc2VsZi5yZW1vdGVfdXNlcl9oZWFk ZXIsICcobnVsbCknKSAhPTNEICcobnVsbCknOgorICAgICAgICBpZiBub3QgZW52aXJvbi5nZXQo c2VsZi5yZW1vdGVfdXNlcl9oZWFkZXIsICcobnVsbCknKS5zdGFydHN3aXRoKCc9CihudWxsKScp OgogICAgICAgICAgICAgaWYgbm90IGVudmlyb25bIHNlbGYucmVtb3RlX3VzZXJfaGVhZGVyIF0u Y291bnQoICdAJyApOgogICAgICAgICAgICAgICAgIGlmIHNlbGYubWFpbGRvbWFpbiBpcyBub3Qg Tm9uZToKICAgICAgICAgICAgICAgICAgICAgZW52aXJvblsgc2VsZi5yZW1vdGVfdXNlcl9oZWFk ZXIgXSArPTNEICdAJyArIHNlbGYubWFpPQpsZG9tYWluCgpkaWZmIC1yIDc0MGQ3NThjMjI4NWJl YzE0MGU2OTAxMDI1ZTkwNmY1MGEwZDdhMmEgLXIgOTVlMzA1ZGIyOWI3ZWIwMjhiMDk3NjI9CmQw MGJkMzA1YzRjNzgyM2UxIGxpYi9nYWxheHkvd29ya2Zsb3cvcnVuX3JlcXVlc3QucHkKLS0tIGEv bGliL2dhbGF4eS93b3JrZmxvdy9ydW5fcmVxdWVzdC5weQorKysgYi9saWIvZ2FsYXh5L3dvcmtm bG93L3J1bl9yZXF1ZXN0LnB5CkBAIC01NiwxMyArNTYsMTMgQEAKICAgICAgICAgcG9zc2libGVf aW5wdXRfa2V5cyA9M0QgW10KICAgICAgICAgZm9yIGlucHV0c19ieV9lbCBpbiBpbnB1dHNfYnku c3BsaXQoInwiKToKICAgICAgICAgICAgIGlmIGlucHV0c19ieV9lbCA9M0Q9M0QgInN0ZXBfaWQi OgotICAgICAgICAgICAgICAgIHBvc3NpYmxlX2lucHV0X2tleXMgPTNEIFtzdHIoIHN0ZXAuaWQg KV0KKyAgICAgICAgICAgICAgICBwb3NzaWJsZV9pbnB1dF9rZXlzLmFwcGVuZChzdHIoIHN0ZXAu aWQgKSkKICAgICAgICAgICAgIGVsaWYgaW5wdXRzX2J5X2VsID0zRD0zRCAic3RlcF9pbmRleCI6 Ci0gICAgICAgICAgICAgICAgcG9zc2libGVfaW5wdXRfa2V5cyA9M0QgW3N0ciggc3RlcC5vcmRl cl9pbmRleCApXQorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2lucHV0X2tleXMuYXBwZW5kKHN0 ciggc3RlcC5vcmRlcl9pbmRleCApKQogICAgICAgICAgICAgZWxpZiBpbnB1dHNfYnlfZWwgPTNE PTNEICJzdGVwX3V1aWQiOgotICAgICAgICAgICAgICAgIHBvc3NpYmxlX2lucHV0X2tleXMgPTNE IFtzdHIoIHN0ZXAudXVpZCApXQorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2lucHV0X2tleXMu YXBwZW5kKHN0ciggc3RlcC51dWlkICkpCiAgICAgICAgICAgICBlbGlmIGlucHV0c19ieV9lbCA9 M0Q9M0QgIm5hbWUiOgotICAgICAgICAgICAgICAgIHBvc3NpYmxlX2lucHV0X2tleXMgPTNEIFtz dGVwLnRvb2xfaW5wdXRzLmdldCggJ25hbWUnLCBOb249CmUgKV0KKyAgICAgICAgICAgICAgICBw b3NzaWJsZV9pbnB1dF9rZXlzLmFwcGVuZChzdGVwLnRvb2xfaW5wdXRzLmdldCggJ25hbWUnLCBO PQpvbmUgKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWVzc2FnZSA9M0Qg IldvcmtmbG93IGNhbm5vdCBiZSBydW4gYmVjYXVzZSB1bmV4cGVjdGVkIGlucD0KdXRzX2J5IHZh bHVlIHNwZWNpZmllZC4iCiAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5NZXNzYWdl RXhjZXB0aW9uKCBtZXNzYWdlICkKCmRpZmYgLXIgNzQwZDc1OGMyMjg1YmVjMTQwZTY5MDEwMjVl OTA2ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5YjdlYjAyOGIwOTc2Mj0KZDAwYmQzMDVjNGM3ODIz ZTEgc3RhdGljL3NjcmlwdHMvbXZjL2RhdGEuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL2Rh dGEuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL2RhdGEuanMKQEAgLTE2OSw3ICsxNjksOCBA QAogICAgICAgICB9KTsKICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKGRhdGFfdGFibGUpOwogICAg ICAgICB2YXIgY29sdW1uX25hbWVzID0zRCB0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgnY29sdW1u X25hbWVzJyksCi0gICAgICAgICAgICBoZWFkZXJfcm93ID0zRCAkKCc8dHIvPicpLmFwcGVuZFRv KGRhdGFfdGFibGUpOworICAgICAgICAgICAgaGVhZGVyX2NvbnRhaW5lciA9M0QgJCgnPHRoZWFk Lz4nKS5hcHBlbmRUbyhkYXRhX3RhYmxlKSwKKyAgICAgICAgICAgIGhlYWRlcl9yb3cgPTNEICQo Jzx0ci8+JykuYXBwZW5kVG8oaGVhZGVyX2NvbnRhaW5lcik7CiAgICAgICAgIGlmIChjb2x1bW5f bmFtZXMpIHsKICAgICAgICAgICAgIGhlYWRlcl9yb3cuYXBwZW5kKCc8dGg+JyArIGNvbHVtbl9u YW1lcy5qb2luKCc8L3RoPjx0aD4nKSArICc8PQovdGg+Jyk7CiAgICAgICAgIH0gZWxzZSB7Cgpk aWZmIC1yIDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxMDI1ZTkwNmY1MGEwZDdhMmEgLXIgOTVlMzA1 ZGIyOWI3ZWIwMjhiMDk3NjI9CmQwMGJkMzA1YzRjNzgyM2UxIHN0YXRpYy9zY3JpcHRzL3BhY2tl ZC9tdmMvZGF0YS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL2RhdGEuanMKKysr IGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy9kYXRhLmpzCkBAIC0xLDEgKzEsMSBAQAotZGVm aW5lKFsibXZjL3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLWZyYW1lcyIsIm12Yy91aS9pY29uLWJ1 dHRvbiJdLGZ1bmN0aW89Cm4oayxqLGYpe3ZhciBoPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHt9 KTt2YXIgYj0zREJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZD0KZWZhdWx0czp7aWQ6IiIsdHlwZToi IixuYW1lOiIiLGhkYV9sZGRhOiJoZGEiLG1ldGFkYXRhOm51bGx9LGluaXRpYWxpemU6ZnVuPQpj dGlvbigpe2lmKCF0aGlzLmdldCgibWV0YWRhdGEiKSl7dGhpcy5fc2V0X21ldGFkYXRhKCl9dGhp cy5vbigiY2hhbmdlIix0aGk9CnMuX3NldF9tZXRhZGF0YSx0aGlzKX0sX3NldF9tZXRhZGF0YTpm dW5jdGlvbigpe3ZhciBuPTNEbmV3IGgoKTtfLmVhY2goXy5rZT0KeXModGhpcy5hdHRyaWJ1dGVz KSxmdW5jdGlvbihvKXtpZihvLmluZGV4T2YoIm1ldGFkYXRhXyIpPTNEPTNEPTNEMCl7dmFyIHA9 Cj0zRG8uc3BsaXQoIm1ldGFkYXRhXyIpWzFdO24uc2V0KHAsdGhpcy5hdHRyaWJ1dGVzW29dKTtk ZWxldGUgdGhpcy5hdHRyaWJ1dD0KZXNbb119fSx0aGlzKTt0aGlzLnNldCgibWV0YWRhdGEiLG4s e3NpbGVudDp0cnVlfSl9LGdldF9tZXRhZGF0YTpmdW5jdGlvbihuPQope3JldHVybiB0aGlzLmF0 dHJpYnV0ZXMubWV0YWRhdGEuZ2V0KG4pfSx1cmxSb290OmdhbGF4eV9jb25maWcucm9vdCsiYXBp L2Q9CmF0YXNldHMifSk7dmFyIGk9M0RiLmV4dGVuZCh7ZGVmYXVsdHM6Xy5leHRlbmQoe30sYi5w cm90b3R5cGUuZGVmYXVsdHMse2NodT0KbmtfdXJsOm51bGwsZmlyc3RfZGF0YV9jaHVuazpudWxs LGNodW5rX2luZGV4Oi0xLGF0X2VvZjpmYWxzZX0pLGluaXRpYWxpemU6PQpmdW5jdGlvbihuKXti LnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7dGhpcy5hdHRyaWJ1dGVzLmNodW5rX2lu ZGV4PQo9M0QodGhpcy5hdHRyaWJ1dGVzLmZpcnN0X2RhdGFfY2h1bms/MTowKTt0aGlzLmF0dHJp YnV0ZXMuY2h1bmtfdXJsPTNEZ2FsYXg9CnlfY29uZmlnLnJvb3QrImRhdGFzZXQvZGlzcGxheT9k YXRhc2V0X2lkPTNEIit0aGlzLmlkO3RoaXMuYXR0cmlidXRlcy51cmxfdj0KaXo9M0RnYWxheHlf Y29uZmlnLnJvb3QrInZpc3VhbGl6YXRpb24ifSxnZXRfbmV4dF9jaHVuazpmdW5jdGlvbigpe2lm KHRoaXMuPQphdHRyaWJ1dGVzLmF0X2VvZil7cmV0dXJuIG51bGx9dmFyIG49M0R0aGlzLG89M0Qk LkRlZmVycmVkKCk7JC5nZXRKU09OKHRoaXM9Ci5hdHRyaWJ1dGVzLmNodW5rX3VybCx7Y2h1bms6 bi5hdHRyaWJ1dGVzLmNodW5rX2luZGV4Kyt9KS5zdWNjZXNzKGZ1bmN0aW9uKD0KcCl7dmFyIHE7 aWYocC5ja19kYXRhIT0zRD0zRCIiKXtxPTNEcH1lbHNle24uYXR0cmlidXRlcy5hdF9lb2Y9M0R0 cnVlO3E9M0RuPQp1bGx9by5yZXNvbHZlKHEpfSk7cmV0dXJuIG99fSk7dmFyIGU9M0RCYWNrYm9u ZS5Db2xsZWN0aW9uLmV4dGVuZCh7bW9kZWw6Yn09Cik7dmFyIGE9M0RCYWNrYm9uZS5WaWV3LmV4 dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihuKXt0aGlzLnJvd19jb3VudD0zRDA7dD0KaGlzLmxv YWRpbmdfY2h1bms9M0RmYWxzZTtuZXcgZCh7bW9kZWw6bi5tb2RlbCwkZWw6dGhpcy4kZWx9KX0s ZXhwYW5kX3RvX2NvPQpudGFpbmVyOmZ1bmN0aW9uKCl7aWYodGhpcy4kZWwuaGVpZ2h0KCk8dGhp cy5zY3JvbGxfZWx0LmhlaWdodCgpKXt0aGlzLmF0dGU9Cm1wdF90b19mZXRjaCgpfX0sYXR0ZW1w dF90b19mZXRjaDpmdW5jdGlvbihvKXt2YXIgbj0zRHRoaXM7aWYoIXRoaXMubG9hZGluZz0KX2No dW5rJiZ0aGlzLnNjcm9sbGVkX3RvX2JvdHRvbSgpKXt0aGlzLmxvYWRpbmdfY2h1bms9M0R0cnVl O3RoaXMubG9hZGluZ19pPQpuZGljYXRvci5zaG93KCk7JC53aGVuKG4ubW9kZWwuZ2V0X25leHRf Y2h1bmsoKSkudGhlbihmdW5jdGlvbihwKXtpZihwKXtuLl89CnJlbmRlckNodW5rKHApO24ubG9h ZGluZ19jaHVuaz0zRGZhbHNlfW4ubG9hZGluZ19pbmRpY2F0b3IuaGlkZSgpO24uZXhwYW5kXz0K dG9fY29udGFpbmVyKCl9KX19LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMubG9hZGluZ19pbmRpY2F0 b3I9M0QkKCI8ZGl2Lz4iKS5hPQp0dHIoImlkIiwibG9hZGluZ19pbmRpY2F0b3IiKTt0aGlzLiRl bC5hcHBlbmQodGhpcy5sb2FkaW5nX2luZGljYXRvcik7dmFyIHI9Cj0zRCQoIjx0YWJsZS8+Iiku YXR0cih7aWQ6ImNvbnRlbnRfdGFibGUiLGNlbGxwYWRkaW5nOjB9KTt0aGlzLiRlbC5hcHBlbmQo cj0KKTt2YXIgbj0zRHRoaXMubW9kZWwuZ2V0X21ldGFkYXRhKCJjb2x1bW5fbmFtZXMiKSxzPTNE JCgiPHRyLz4iKS5hcHBlbmRUbyhyPQopO2lmKG4pe3MuYXBwZW5kKCI8dGg+IituLmpvaW4oIjwv dGg+PHRoPiIpKyI8L3RoPiIpfWVsc2V7Zm9yKHZhciBxPTNEMTtxPD0KPTNEdGhpcy5tb2RlbC5n ZXRfbWV0YWRhdGEoImNvbHVtbnMiKTtxKyspe3MuYXBwZW5kKCI8dGg+IitxKyI8L3RoPiIpfX12 YXIgPQpwPTNEdGhpcyxvPTNEdGhpcy5tb2RlbC5nZXQoImZpcnN0X2RhdGFfY2h1bmsiKTtpZihv KXt0aGlzLl9yZW5kZXJDaHVuayhvKX09CmVsc2V7JC53aGVuKHAubW9kZWwuZ2V0X25leHRfY2h1 bmsoKSkudGhlbihmdW5jdGlvbih0KXtwLl9yZW5kZXJDaHVuayh0KX0pfT0KdGhpcy5zY3JvbGxf ZWx0LnNjcm9sbChmdW5jdGlvbigpe3AuYXR0ZW1wdF90b19mZXRjaCgpfSl9LHNjcm9sbGVkX3Rv X2JvdHRvPQptOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxfcmVuZGVyQ2VsbDpmdW5jdGlvbihx LG4scil7dmFyIG89M0QkKCI8dGQ+IikudGU9Cnh0KHEpO3ZhciBwPTNEdGhpcy5tb2RlbC5nZXRf bWV0YWRhdGEoImNvbHVtbl90eXBlcyIpO2lmKHIhPTNEPTNEdW5kZWZpbmVkKT0Ke28uYXR0cigi Y29sc3BhbiIscikuYWRkQ2xhc3MoInN0cmluZ2FsaWduIil9ZWxzZXtpZihwKXtpZihuPHAubGVu Z3RoKXtpZihwPQpbbl09M0Q9M0Q9M0Qic3RyInx8cFtuXT0zRD0zRD0zRCJsaXN0Iil7by5hZGRD bGFzcygic3RyaW5nYWxpZ24iKX19fX1yZXR1cm49CiBvfSxfcmVuZGVyUm93OmZ1bmN0aW9uKG4p e3ZhciBvPTNEbi5zcGxpdCgiXHQiKSxxPTNEJCgiPHRyPiIpLHA9M0R0aGlzLm1vZD0KZWwuZ2V0 X21ldGFkYXRhKCJjb2x1bW5zIik7aWYodGhpcy5yb3dfY291bnQlMiE9M0Q9M0QwKXtxLmFkZENs YXNzKCJkYXJrX3JvPQp3Iil9aWYoby5sZW5ndGg9M0Q9M0Q9M0RwKXtfLmVhY2gobyxmdW5jdGlv bihzLHIpe3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGw9CihzLHIpKX0sdGhpcyl9ZWxzZXtpZihv Lmxlbmd0aD5wKXtfLmVhY2goby5zbGljZSgwLHAtMSksZnVuY3Rpb24ocyxyKXtxLmFwcD0KZW5k KHRoaXMuX3JlbmRlckNlbGwocyxyKSl9LHRoaXMpO3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGwo by5zbGljZShwLTEpLmpvPQppbigiXHQiKSxwLTEpKX1lbHNle2lmKHA+NSYmby5sZW5ndGg9M0Q9 M0Q9M0RwLTEpe18uZWFjaChvLGZ1bmN0aW9uKHMscil7cS49CmFwcGVuZCh0aGlzLl9yZW5kZXJD ZWxsKHMscikpfSx0aGlzKTtxLmFwcGVuZCgkKCI8dGQ+IikpfWVsc2V7cS5hcHBlbmQodGhpcz0K Ll9yZW5kZXJDZWxsKG4sMCxwKSl9fX10aGlzLnJvd19jb3VudCsrO3JldHVybiBxfSxfcmVuZGVy Q2h1bms6ZnVuY3Rpb24obil7PQp2YXIgbz0zRHRoaXMuJGVsLmZpbmQoInRhYmxlIik7Xy5lYWNo KG4uY2tfZGF0YS5zcGxpdCgiXG4iKSxmdW5jdGlvbihwLHEpe2k9CmYocCE9M0Q9M0QiIil7by5h cHBlbmQodGhpcy5fcmVuZGVyUm93KHApKX19LHRoaXMpfX0pO3ZhciBnPTNEYS5leHRlbmQoe2lu aT0KdGlhbGl6ZTpmdW5jdGlvbihuKXthLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxu KTtzY3JvbGxfZWx0PTNEXy5maW5kPQoodGhpcy4kZWwucGFyZW50cygpLGZ1bmN0aW9uKG8pe3Jl dHVybiAkKG8pLmNzcygib3ZlcmZsb3ciKT0zRD0zRD0zRCJhdXRvIn09Cik7aWYoIXNjcm9sbF9l bHQpe3Njcm9sbF9lbHQ9M0R3aW5kb3d9dGhpcy5zY3JvbGxfZWx0PTNEJChzY3JvbGxfZWx0KX0s c2Nybz0KbGxlZF90b19ib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy4kZWwuaGVpZ2h0KCkt dGhpcy5zY3JvbGxfZWx0LnNjcm9sbFRvPQpwKCktdGhpcy5zY3JvbGxfZWx0LmhlaWdodCgpPD0z RDApfX0pO3ZhciBtPTNEYS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb249CihuKXthLnByb3Rv dHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxuKTt0aGlzLnNjcm9sbF9lbHQ9M0R0aGlzLiRlbC5j c3Moe3Bvcz0KaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoic2Nyb2xsIixoZWlnaHQ6dGhpcy5v cHRpb25zLmhlaWdodHx8IjUwMHB4In0pfSxzPQpjcm9sbGVkX3RvX2JvdHRvbTpmdW5jdGlvbigp e3JldHVybiB0aGlzLiRlbC5zY3JvbGxUb3AoKSt0aGlzLiRlbC5pbm5lckhlaWc9Cmh0KCk+PTNE dGhpcy5lbC5zY3JvbGxIZWlnaHR9fSk7dmFyIGQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Y29s OntjaHJvbTpudT0KbGwsc3RhcnQ6bnVsbCxlbmQ6bnVsbH0sdXJsX3ZpejpudWxsLGRhdGFzZXRf aWQ6bnVsbCxnZW5vbWVfYnVpbGQ6bnVsbCxmaWxlPQpfZXh0Om51bGwsaW5pdGlhbGl6ZTpmdW5j dGlvbihwKXt2YXIgcz0zRHBhcmVudC5HYWxheHk7aWYocyYmcy5tb2RhbCl7dGhpcy49Cm1vZGFs PTNEcy5tb2RhbH1pZihzJiZzLmZyYW1lKXt0aGlzLmZyYW1lPTNEcy5mcmFtZX1pZighdGhpcy5t b2RhbHx8IXRoaXMuZj0KcmFtZSl7cmV0dXJufXZhciBvPTNEcC5tb2RlbDt2YXIgcj0zRG8uZ2V0 KCJtZXRhZGF0YSIpO2lmKCFvLmdldCgiZmlsZV9leHQiPQopKXtyZXR1cm59dGhpcy5maWxlX2V4 dD0zRG8uZ2V0KCJmaWxlX2V4dCIpO2lmKHRoaXMuZmlsZV9leHQ9M0Q9M0QiYmVkIil7aWY9Cihy LmdldCgiY2hyb21Db2wiKSYmci5nZXQoInN0YXJ0Q29sIikmJnIuZ2V0KCJlbmRDb2wiKSl7dGhp cy5jb2wuY2hyb209M0RyLj0KZ2V0KCJjaHJvbUNvbCIpLTE7dGhpcy5jb2wuc3RhcnQ9M0RyLmdl dCgic3RhcnRDb2wiKS0xO3RoaXMuY29sLmVuZD0zRHIuZ2V0PQooImVuZENvbCIpLTF9ZWxzZXtj b25zb2xlLmxvZygiVGFidWxhckJ1dHRvblRyYWNrc3RlciA6IEJlZC1maWxlIG1ldGFkYXRhIGk9 Cm5jb21wbGV0ZS4iKTtyZXR1cm59fWlmKHRoaXMuZmlsZV9leHQ9M0Q9M0QidmNmIil7ZnVuY3Rp b24gcSh1LHYpe2Zvcih2YXIgdD0KPTNEMDt0PHYubGVuZ3RoO3QrKyl7aWYodlt0XS5tYXRjaCh1 KSl7cmV0dXJuIHR9fXJldHVybiAtMX10aGlzLmNvbC5jaHJvbT0KPTNEcSgiQ2hyb20iLHIuZ2V0 KCJjb2x1bW5fbmFtZXMiKSk7dGhpcy5jb2wuc3RhcnQ9M0RxKCJQb3MiLHIuZ2V0KCJjb2x1bW5f PQpuYW1lcyIpKTt0aGlzLmNvbC5lbmQ9M0RudWxsO2lmKHRoaXMuY29sLmNocm9tPTNEPTNELTF8 fHRoaXMuY29sLnN0YXJ0PTNEPQo9M0QtMSl7Y29uc29sZS5sb2coIlRhYnVsYXJCdXR0b25UcmFj a3N0ZXIgOiBWQ0YtZmlsZSBtZXRhZGF0YSBpbmNvbXBsZXRlLiI9Cik7cmV0dXJufX1pZih0aGlz LmNvbC5jaHJvbT0zRD0zRD0zRHVuZGVmaW5lZCl7cmV0dXJufWlmKG8uaWQpe3RoaXMuZGF0YXNl dD0KX2lkPTNEby5pZH1lbHNle2NvbnNvbGUubG9nKCJUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDog RGF0YXNldCBpZGVudGlmaWNhdGlvPQpuIGlzIG1pc3NpbmcuIik7cmV0dXJufWlmKG8uZ2V0KCJ1 cmxfdml6Iikpe3RoaXMudXJsX3Zpej0zRG8uZ2V0KCJ1cmxfdml6Iik9Cn1lbHNle2NvbnNvbGUu bG9nKCJUYWJ1bGFyQnV0dG9uVHJhY2tzdGVyIDogVXJsIGZvciB2aXN1YWxpemF0aW9uIGNvbnRy b2xsZT0KciBpcyBtaXNzaW5nLiIpO3JldHVybn1pZihvLmdldCgiZ2Vub21lX2J1aWxkIikpe3Ro aXMuZ2Vub21lX2J1aWxkPTNEby5nZXQoPQoiZ2Vub21lX2J1aWxkIil9dmFyIG49M0RuZXcgZi5J Y29uQnV0dG9uVmlldyh7bW9kZWw6bmV3IGYuSWNvbkJ1dHRvbih7dGl0bGU9CjoiVmlzdWFsaXpl IixpY29uX2NsYXNzOiJjaGFydF9jdXJ2ZSIsaWQ6ImJ0bl92aXoifSl9KTt0aGlzLnNldEVsZW1l bnQocC4kZT0KbCk7dGhpcy4kZWwuYXBwZW5kKG4ucmVuZGVyKCkuJGVsKTt0aGlzLmhpZGUoKX0s ZXZlbnRzOnsibW91c2VvdmVyIHRyIjoic2hvPQp3Iixtb3VzZWxlYXZlOiJoaWRlIn0sc2hvdzpm dW5jdGlvbihzKXtmdW5jdGlvbiByKHgpe3JldHVybiAhaXNOYU4ocGFyc2VGbG89CmF0KHgpKSYm aXNGaW5pdGUoeCl9aWYodGhpcy5jb2wuY2hyb209M0Q9M0Q9M0RudWxsKXtyZXR1cm59dmFyIHc9 M0QkKHMudGFyZz0KZXQpLnBhcmVudCgpO3ZhciB0PTNEdy5jaGlsZHJlbigpLmVxKHRoaXMuY29s LmNocm9tKS5odG1sKCk7dmFyIG49M0R3LmNoaWxkPQpyZW4oKS5lcSh0aGlzLmNvbC5zdGFydCku aHRtbCgpO3ZhciBwPTNEdGhpcy5jb2wuZW5kP3cuY2hpbGRyZW4oKS5lcSh0aGlzLmM9Cm9sLmVu ZCkuaHRtbCgpOm47aWYoIXQubWF0Y2goIl4jIikmJnQhPTNEPTNEIiImJnIobikpe3ZhciB2PTNE e2RhdGFzZXRfaWQ6dD0KaGlzLmRhdGFzZXRfaWQsZ2VuZV9yZWdpb246dCsiOiIrbisiLSIrcH07 dmFyIHE9M0R3Lm9mZnNldCgpO3ZhciBvPTNEcS5sZWZ0PQotMTA7dmFyIHU9M0RxLnRvcC0kKHdp bmRvdykuc2Nyb2xsVG9wKCkrMzskKCIjYnRuX3ZpeiIpLmNzcyh7cG9zaXRpb246ImZpeGU9CmQi LHRvcDp1KyJweCIsbGVmdDpvKyJweCJ9KTskKCIjYnRuX3ZpeiIpLm9mZigiY2xpY2siKTskKCIj YnRuX3ZpeiIpLmNsaWNrKD0KdGhpcy5jcmVhdGVfdHJhY2tzdGVyX2FjdGlvbih0aGlzLnVybF92 aXosdix0aGlzLmdlbm9tZV9idWlsZCkpOyQoIiNidG5fdml6PQoiKS5zaG93KCl9ZWxzZXskKCIj YnRuX3ZpeiIpLmhpZGUoKX19LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5maW5kKCIjYnRuX3Y9 Cml6IikuaGlkZSgpfSxjcmVhdGVfdHJhY2tzdGVyX2FjdGlvbjpmdW5jdGlvbihuLHEscCl7dmFy IG89M0R0aGlzO3JldHVybiBmdT0KbmN0aW9uKCl7dmFyIHI9M0R7fTtpZihwKXtyWyJmLWRia2V5 Il09M0RwfSQuYWpheCh7dXJsOm4rIi9saXN0X3RyYWNrcz8iKyQuPQpwYXJhbShyKSxkYXRhVHlw ZToiaHRtbCIsZXJyb3I6ZnVuY3Rpb24oKXtvLm1vZGFsLnNob3coe3RpdGxlOiJTb21ldGhpbmcg d2U9Cm50IHdyb25nISIsYm9keToiVW5mb3J0dW5hdGVseSB3ZSBjb3VsZCBub3QgYWRkIHRoaXMg ZGF0YXNldCB0byB0aGUgdHJhY2sgYj0Kcm93c2VyLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNvbnRh Y3QgdXMuIixidXR0b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtvLm1vZGFsPQouaGlkZSgpfX19KX0s c3VjY2VzczpmdW5jdGlvbihzKXtvLm1vZGFsLnNob3coe3RpdGxlOiJWaWV3IERhdGEgaW4gYSBO ZXcgb3I9CiBTYXZlZCBWaXN1YWxpemF0aW9uIixidXR0b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtv Lm1vZGFsLmhpZGUoKX0sIlZpZXcgaW4gcz0KYXZlZCB2aXN1YWxpemF0aW9uIjpmdW5jdGlvbigp e28ubW9kYWwuc2hvdyh7dGl0bGU6IkFkZCBEYXRhIHRvIFNhdmVkIFZpc3VhPQpsaXphdGlvbiIs Ym9keTpzLGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28ubW9kYWwuaGlkZSgpfSwiQWRkIHRv IHZpc3VhbGk9CnphdGlvbiI6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKTtvLm1vZGFsLiRlbC5m aW5kKCJpbnB1dFtuYW1lPTNEaWRdOmNoZWNrZT0KZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0z RCQodGhpcykudmFsKCk7cS5pZD0zRHQ7by5mcmFtZS5hZGQoe3RpdGxlOiJUcmFjPQprc3RlciIs dHlwZToidXJsIixjb250ZW50Om4rIi90cmFja3N0ZXI/IiskLnBhcmFtKHEpfSl9KX19fSl9LCJW aWV3IGluIG5ldyA9CnZpc3VhbGl6YXRpb24iOmZ1bmN0aW9uKCl7by5tb2RhbC5oaWRlKCk7by5m cmFtZS5hZGQoe3RpdGxlOiJUcmFja3N0ZXIiLHR5cD0KZToidXJsIixjb250ZW50Om4rIi90cmFj a3N0ZXI/IiskLnBhcmFtKHEpfSl9fX0pfX0pO3JldHVybiBmYWxzZX19fSk7dmFyIGw9Cj0zRGZ1 bmN0aW9uKHEsbyxyLG4pe3ZhciBwPTNEbmV3IG8oe21vZGVsOm5ldyBxKHIpfSk7cC5yZW5kZXIo KTtpZihuKXtuLmFwcD0KZW5kKHAuJGVsKX1yZXR1cm4gcH07dmFyIGM9M0RmdW5jdGlvbihwKXtp ZighcC5tb2RlbCl7cC5tb2RlbD0zRG5ldyBpKHAuZGF0PQphc2V0X2NvbmZpZyl9dmFyIG89M0Rw LnBhcmVudF9lbHQ7dmFyIHE9M0RwLmVtYmVkZGVkO2RlbGV0ZSBwLmVtYmVkZGVkO2RlbGU9CnRl IHAucGFyZW50X2VsdDtkZWxldGUgcC5kYXRhc2V0X2NvbmZpZzt2YXIgbj0zRChxP25ldyBtKHAp Om5ldyBnKHApKTtuLnJlbj0KZGVyKCk7aWYobyl7by5hcHBlbmQobi4kZWwpO24uZXhwYW5kX3Rv X2NvbnRhaW5lcigpfXJldHVybiBufTtyZXR1cm57RGF0YXNlPQp0OmIsVGFidWxhckRhdGFzZXQ6 aSxEYXRhc2V0Q29sbGVjdGlvbjplLFRhYnVsYXJEYXRhc2V0Q2h1bmtlZFZpZXc6YSxjcmVhdGU9 ClRhYnVsYXJEYXRhc2V0Q2h1bmtlZFZpZXc6Y319KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkZWZpbmUoWyJtdmMvdWkvdWktbW9kYWwiLCJtdmMvdWkvdWktZnJhbWVzIiwibXZjL3Vp L2ljb24tYnV0dG9uIl0sZnVuY3Rpbz0KbihrLGosZil7dmFyIGg9M0RCYWNrYm9uZS5Nb2RlbC5l eHRlbmQoe30pO3ZhciBiPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkPQplZmF1bHRzOntpZDoi Iix0eXBlOiIiLG5hbWU6IiIsaGRhX2xkZGE6ImhkYSIsbWV0YWRhdGE6bnVsbH0saW5pdGlhbGl6 ZTpmdW49CmN0aW9uKCl7aWYoIXRoaXMuZ2V0KCJtZXRhZGF0YSIpKXt0aGlzLl9zZXRfbWV0YWRh dGEoKX10aGlzLm9uKCJjaGFuZ2UiLHRoaT0Kcy5fc2V0X21ldGFkYXRhLHRoaXMpfSxfc2V0X21l dGFkYXRhOmZ1bmN0aW9uKCl7dmFyIG49M0RuZXcgaCgpO18uZWFjaChfLmtlPQp5cyh0aGlzLmF0 dHJpYnV0ZXMpLGZ1bmN0aW9uKG8pe2lmKG8uaW5kZXhPZigibWV0YWRhdGFfIik9M0Q9M0Q9M0Qw KXt2YXIgcD0KPTNEby5zcGxpdCgibWV0YWRhdGFfIilbMV07bi5zZXQocCx0aGlzLmF0dHJpYnV0 ZXNbb10pO2RlbGV0ZSB0aGlzLmF0dHJpYnV0PQplc1tvXX19LHRoaXMpO3RoaXMuc2V0KCJtZXRh ZGF0YSIsbix7c2lsZW50OnRydWV9KX0sZ2V0X21ldGFkYXRhOmZ1bmN0aW9uKG49Cil7cmV0dXJu IHRoaXMuYXR0cmlidXRlcy5tZXRhZGF0YS5nZXQobil9LHVybFJvb3Q6Z2FsYXh5X2NvbmZpZy5y b290KyJhcGkvZD0KYXRhc2V0cyJ9KTt2YXIgaT0zRGIuZXh0ZW5kKHtkZWZhdWx0czpfLmV4dGVu ZCh7fSxiLnByb3RvdHlwZS5kZWZhdWx0cyx7Y2h1PQpua191cmw6bnVsbCxmaXJzdF9kYXRhX2No dW5rOm51bGwsY2h1bmtfaW5kZXg6LTEsYXRfZW9mOmZhbHNlfSksaW5pdGlhbGl6ZTo9CmZ1bmN0 aW9uKG4pe2IucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKTt0aGlzLmF0dHJpYnV0ZXMu Y2h1bmtfaW5kZXg9Cj0zRCh0aGlzLmF0dHJpYnV0ZXMuZmlyc3RfZGF0YV9jaHVuaz8xOjApO3Ro aXMuYXR0cmlidXRlcy5jaHVua191cmw9M0RnYWxheD0KeV9jb25maWcucm9vdCsiZGF0YXNldC9k aXNwbGF5P2RhdGFzZXRfaWQ9M0QiK3RoaXMuaWQ7dGhpcy5hdHRyaWJ1dGVzLnVybF92PQppej0z RGdhbGF4eV9jb25maWcucm9vdCsidmlzdWFsaXphdGlvbiJ9LGdldF9uZXh0X2NodW5rOmZ1bmN0 aW9uKCl7aWYodGhpcy49CmF0dHJpYnV0ZXMuYXRfZW9mKXtyZXR1cm4gbnVsbH12YXIgbj0zRHRo aXMsbz0zRCQuRGVmZXJyZWQoKTskLmdldEpTT04odGhpcz0KLmF0dHJpYnV0ZXMuY2h1bmtfdXJs LHtjaHVuazpuLmF0dHJpYnV0ZXMuY2h1bmtfaW5kZXgrK30pLnN1Y2Nlc3MoZnVuY3Rpb24oPQpw KXt2YXIgcTtpZihwLmNrX2RhdGEhPTNEPTNEIiIpe3E9M0RwfWVsc2V7bi5hdHRyaWJ1dGVzLmF0 X2VvZj0zRHRydWU7cT0zRG49CnVsbH1vLnJlc29sdmUocSl9KTtyZXR1cm4gb319KTt2YXIgZT0z REJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpifT0KKTt2YXIgYT0zREJhY2tib25l LlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKG4pe3RoaXMucm93X2NvdW50PTNEMDt0 PQpoaXMubG9hZGluZ19jaHVuaz0zRGZhbHNlO25ldyBkKHttb2RlbDpuLm1vZGVsLCRlbDp0aGlz LiRlbH0pfSxleHBhbmRfdG9fY289Cm50YWluZXI6ZnVuY3Rpb24oKXtpZih0aGlzLiRlbC5oZWln aHQoKTx0aGlzLnNjcm9sbF9lbHQuaGVpZ2h0KCkpe3RoaXMuYXR0ZT0KbXB0X3RvX2ZldGNoKCl9 fSxhdHRlbXB0X3RvX2ZldGNoOmZ1bmN0aW9uKG8pe3ZhciBuPTNEdGhpcztpZighdGhpcy5sb2Fk aW5nPQpfY2h1bmsmJnRoaXMuc2Nyb2xsZWRfdG9fYm90dG9tKCkpe3RoaXMubG9hZGluZ19jaHVu az0zRHRydWU7dGhpcy5sb2FkaW5nX2k9Cm5kaWNhdG9yLnNob3coKTskLndoZW4obi5tb2RlbC5n ZXRfbmV4dF9jaHVuaygpKS50aGVuKGZ1bmN0aW9uKHApe2lmKHApe24uXz0KcmVuZGVyQ2h1bmso cCk7bi5sb2FkaW5nX2NodW5rPTNEZmFsc2V9bi5sb2FkaW5nX2luZGljYXRvci5oaWRlKCk7bi5l eHBhbmRfPQp0b19jb250YWluZXIoKX0pfX0scmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5sb2FkaW5n X2luZGljYXRvcj0zRCQoIjxkaXYvPiIpLmE9CnR0cigiaWQiLCJsb2FkaW5nX2luZGljYXRvciIp O3RoaXMuJGVsLmFwcGVuZCh0aGlzLmxvYWRpbmdfaW5kaWNhdG9yKTt2YXIgcj0KPTNEJCgiPHRh YmxlLz4iKS5hdHRyKHtpZDoiY29udGVudF90YWJsZSIsY2VsbHBhZGRpbmc6MH0pO3RoaXMuJGVs LmFwcGVuZChyPQopO3ZhciBuPTNEdGhpcy5tb2RlbC5nZXRfbWV0YWRhdGEoImNvbHVtbl9uYW1l cyIpLHM9M0QkKCI8dGhlYWQvPiIpLmFwcGVuZFQ9Cm8ociksdD0zRCQoIjx0ci8+IikuYXBwZW5k VG8ocyk7aWYobil7dC5hcHBlbmQoIjx0aD4iK24uam9pbigiPC90aD48dGg+IikrIj0KPC90aD4i KX1lbHNle2Zvcih2YXIgcT0zRDE7cTw9M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1u cyIpO3ErKyl7dC5hPQpwcGVuZCgiPHRoPiIrcSsiPC90aD4iKX19dmFyIHA9M0R0aGlzLG89M0R0 aGlzLm1vZGVsLmdldCgiZmlyc3RfZGF0YV9jaHVuayI9Cik7aWYobyl7dGhpcy5fcmVuZGVyQ2h1 bmsobyl9ZWxzZXskLndoZW4ocC5tb2RlbC5nZXRfbmV4dF9jaHVuaygpKS50aGVuKGZ1bj0KY3Rp b24odSl7cC5fcmVuZGVyQ2h1bmsodSl9KX10aGlzLnNjcm9sbF9lbHQuc2Nyb2xsKGZ1bmN0aW9u KCl7cC5hdHRlbXB0X3RvPQpfZmV0Y2goKX0pfSxzY3JvbGxlZF90b19ib3R0b206ZnVuY3Rpb24o KXtyZXR1cm4gZmFsc2V9LF9yZW5kZXJDZWxsOmZ1bmN0aW89Cm4ocSxuLHIpe3ZhciBvPTNEJCgi PHRkPiIpLnRleHQocSk7dmFyIHA9M0R0aGlzLm1vZGVsLmdldF9tZXRhZGF0YSgiY29sdW1uXz0K dHlwZXMiKTtpZihyIT0zRD0zRHVuZGVmaW5lZCl7by5hdHRyKCJjb2xzcGFuIixyKS5hZGRDbGFz cygic3RyaW5nYWxpZ24iKX1lPQpsc2V7aWYocCl7aWYobjxwLmxlbmd0aCl7aWYocFtuXT0zRD0z RD0zRCJzdHIifHxwW25dPTNEPTNEPTNEImxpc3QiKXtvLmFkZEM9Cmxhc3MoInN0cmluZ2FsaWdu Iil9fX19cmV0dXJuIG99LF9yZW5kZXJSb3c6ZnVuY3Rpb24obil7dmFyIG89M0RuLnNwbGl0KCJc dD0KIikscT0zRCQoIjx0cj4iKSxwPTNEdGhpcy5tb2RlbC5nZXRfbWV0YWRhdGEoImNvbHVtbnMi KTtpZih0aGlzLnJvd19jb3VudCUyPQohPTNEPTNEMCl7cS5hZGRDbGFzcygiZGFya19yb3ciKX1p ZihvLmxlbmd0aD0zRD0zRD0zRHApe18uZWFjaChvLGZ1bmN0aW9uKHM9CixyKXtxLmFwcGVuZCh0 aGlzLl9yZW5kZXJDZWxsKHMscikpfSx0aGlzKX1lbHNle2lmKG8ubGVuZ3RoPnApe18uZWFjaChv LnNsaT0KY2UoMCxwLTEpLGZ1bmN0aW9uKHMscil7cS5hcHBlbmQodGhpcy5fcmVuZGVyQ2VsbChz LHIpKX0sdGhpcyk7cS5hcHBlbmQodGhpPQpzLl9yZW5kZXJDZWxsKG8uc2xpY2UocC0xKS5qb2lu KCJcdCIpLHAtMSkpfWVsc2V7aWYocD41JiZvLmxlbmd0aD0zRD0zRD0zRHA9Ci0xKXtfLmVhY2go byxmdW5jdGlvbihzLHIpe3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGwocyxyKSl9LHRoaXMpO3Eu YXBwZW5kKD0KJCgiPHRkPiIpKX1lbHNle3EuYXBwZW5kKHRoaXMuX3JlbmRlckNlbGwobiwwLHAp KX19fXRoaXMucm93X2NvdW50Kys7cmV0dXJuPQogcX0sX3JlbmRlckNodW5rOmZ1bmN0aW9uKG4p e3ZhciBvPTNEdGhpcy4kZWwuZmluZCgidGFibGUiKTtfLmVhY2gobi5ja19kYXQ9CmEuc3BsaXQo IlxuIiksZnVuY3Rpb24ocCxxKXtpZihwIT0zRD0zRCIiKXtvLmFwcGVuZCh0aGlzLl9yZW5kZXJS b3cocCkpfX0sdD0KaGlzKX19KTt2YXIgZz0zRGEuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9u KG4pe2EucHJvdG90eXBlLmluaXRpYWxpemUuY2FsPQpsKHRoaXMsbik7c2Nyb2xsX2VsdD0zRF8u ZmluZCh0aGlzLiRlbC5wYXJlbnRzKCksZnVuY3Rpb24obyl7cmV0dXJuICQobykuY3M9CnMoIm92 ZXJmbG93Iik9M0Q9M0Q9M0QiYXV0byJ9KTtpZighc2Nyb2xsX2VsdCl7c2Nyb2xsX2VsdD0zRHdp bmRvd310aGlzLnNjcj0Kb2xsX2VsdD0zRCQoc2Nyb2xsX2VsdCl9LHNjcm9sbGVkX3RvX2JvdHRv bTpmdW5jdGlvbigpe3JldHVybih0aGlzLiRlbC5oZWlnPQpodCgpLXRoaXMuc2Nyb2xsX2VsdC5z Y3JvbGxUb3AoKS10aGlzLnNjcm9sbF9lbHQuaGVpZ2h0KCk8PTNEMCl9fSk7dmFyIG09M0Q9CmEu ZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKG4pe2EucHJvdG90eXBlLmluaXRpYWxpemUuY2Fs bCh0aGlzLG4pO3RoaXMucz0KY3JvbGxfZWx0PTNEdGhpcy4kZWwuY3NzKHtwb3NpdGlvbjoicmVs YXRpdmUiLG92ZXJmbG93OiJzY3JvbGwiLGhlaWdodDp0aGlzPQoub3B0aW9ucy5oZWlnaHR8fCI1 MDBweCJ9KX0sc2Nyb2xsZWRfdG9fYm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsLnM9 CmNyb2xsVG9wKCkrdGhpcy4kZWwuaW5uZXJIZWlnaHQoKT49M0R0aGlzLmVsLnNjcm9sbEhlaWdo dH19KTt2YXIgZD0zREJhY2tibz0KbmUuVmlldy5leHRlbmQoe2NvbDp7Y2hyb206bnVsbCxzdGFy dDpudWxsLGVuZDpudWxsfSx1cmxfdml6Om51bGwsZGF0YXNldF9pPQpkOm51bGwsZ2Vub21lX2J1 aWxkOm51bGwsZmlsZV9leHQ6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKHApe3ZhciBzPTNEcGFy ZW49CnQuR2FsYXh5O2lmKHMmJnMubW9kYWwpe3RoaXMubW9kYWw9M0RzLm1vZGFsfWlmKHMmJnMu ZnJhbWUpe3RoaXMuZnJhbWU9M0RzLj0KZnJhbWV9aWYoIXRoaXMubW9kYWx8fCF0aGlzLmZyYW1l KXtyZXR1cm59dmFyIG89M0RwLm1vZGVsO3ZhciByPTNEby5nZXQoIm1lPQp0YWRhdGEiKTtpZigh by5nZXQoImZpbGVfZXh0Iikpe3JldHVybn10aGlzLmZpbGVfZXh0PTNEby5nZXQoImZpbGVfZXh0 Iik7aWY9Cih0aGlzLmZpbGVfZXh0PTNEPTNEImJlZCIpe2lmKHIuZ2V0KCJjaHJvbUNvbCIpJiZy LmdldCgic3RhcnRDb2wiKSYmci5nZXQoIj0KZW5kQ29sIikpe3RoaXMuY29sLmNocm9tPTNEci5n ZXQoImNocm9tQ29sIiktMTt0aGlzLmNvbC5zdGFydD0zRHIuZ2V0KCJzdGFyPQp0Q29sIiktMTt0 aGlzLmNvbC5lbmQ9M0RyLmdldCgiZW5kQ29sIiktMX1lbHNle2NvbnNvbGUubG9nKCJUYWJ1bGFy QnV0dG9uVHI9CmFja3N0ZXIgOiBCZWQtZmlsZSBtZXRhZGF0YSBpbmNvbXBsZXRlLiIpO3JldHVy bn19aWYodGhpcy5maWxlX2V4dD0zRD0zRCJ2Yz0KZiIpe2Z1bmN0aW9uIHEodSx2KXtmb3IodmFy IHQ9M0QwO3Q8di5sZW5ndGg7dCsrKXtpZih2W3RdLm1hdGNoKHUpKXtyZXR1cm4gPQp0fX1yZXR1 cm4gLTF9dGhpcy5jb2wuY2hyb209M0RxKCJDaHJvbSIsci5nZXQoImNvbHVtbl9uYW1lcyIpKTt0 aGlzLmNvbC5zdGE9CnJ0PTNEcSgiUG9zIixyLmdldCgiY29sdW1uX25hbWVzIikpO3RoaXMuY29s LmVuZD0zRG51bGw7aWYodGhpcy5jb2wuY2hyb209Cj0zRD0zRC0xfHx0aGlzLmNvbC5zdGFydD0z RD0zRC0xKXtjb25zb2xlLmxvZygiVGFidWxhckJ1dHRvblRyYWNrc3RlciA6IFZDRj0KLWZpbGUg bWV0YWRhdGEgaW5jb21wbGV0ZS4iKTtyZXR1cm59fWlmKHRoaXMuY29sLmNocm9tPTNEPTNEPTNE dW5kZWZpbmVkKXtyPQpldHVybn1pZihvLmlkKXt0aGlzLmRhdGFzZXRfaWQ9M0RvLmlkfWVsc2V7 Y29uc29sZS5sb2coIlRhYnVsYXJCdXR0b25UcmFja3M9CnRlciA6IERhdGFzZXQgaWRlbnRpZmlj YXRpb24gaXMgbWlzc2luZy4iKTtyZXR1cm59aWYoby5nZXQoInVybF92aXoiKSl7dGhpcz0KLnVy bF92aXo9M0RvLmdldCgidXJsX3ZpeiIpfWVsc2V7Y29uc29sZS5sb2coIlRhYnVsYXJCdXR0b25U cmFja3N0ZXIgOiBVcmwgPQpmb3IgdmlzdWFsaXphdGlvbiBjb250cm9sbGVyIGlzIG1pc3Npbmcu Iik7cmV0dXJufWlmKG8uZ2V0KCJnZW5vbWVfYnVpbGQiKSk9Cnt0aGlzLmdlbm9tZV9idWlsZD0z RG8uZ2V0KCJnZW5vbWVfYnVpbGQiKX12YXIgbj0zRG5ldyBmLkljb25CdXR0b25WaWV3KHttbz0K ZGVsOm5ldyBmLkljb25CdXR0b24oe3RpdGxlOiJWaXN1YWxpemUiLGljb25fY2xhc3M6ImNoYXJ0 X2N1cnZlIixpZDoiYnRuX3ZpPQp6In0pfSk7dGhpcy5zZXRFbGVtZW50KHAuJGVsKTt0aGlzLiRl bC5hcHBlbmQobi5yZW5kZXIoKS4kZWwpO3RoaXMuaGlkZSgpfSw9CmV2ZW50czp7Im1vdXNlb3Zl ciB0ciI6InNob3ciLG1vdXNlbGVhdmU6ImhpZGUifSxzaG93OmZ1bmN0aW9uKHMpe2Z1bmN0aW9u ID0Kcih4KXtyZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQoeCkpJiZpc0Zpbml0ZSh4KX1pZih0aGlz LmNvbC5jaHJvbT0zRD0zRD0zRG51PQpsbCl7cmV0dXJufXZhciB3PTNEJChzLnRhcmdldCkucGFy ZW50KCk7dmFyIHQ9M0R3LmNoaWxkcmVuKCkuZXEodGhpcy5jb2wuY2g9CnJvbSkuaHRtbCgpO3Zh ciBuPTNEdy5jaGlsZHJlbigpLmVxKHRoaXMuY29sLnN0YXJ0KS5odG1sKCk7dmFyIHA9M0R0aGlz LmNvbD0KLmVuZD93LmNoaWxkcmVuKCkuZXEodGhpcy5jb2wuZW5kKS5odG1sKCk6bjtpZighdC5t YXRjaCgiXiMiKSYmdCE9M0Q9M0QiIiYmPQpyKG4pKXt2YXIgdj0zRHtkYXRhc2V0X2lkOnRoaXMu ZGF0YXNldF9pZCxnZW5lX3JlZ2lvbjp0KyI6IituKyItIitwfTt2YXIgcT0KPTNEdy5vZmZzZXQo KTt2YXIgbz0zRHEubGVmdC0xMDt2YXIgdT0zRHEudG9wLSQod2luZG93KS5zY3JvbGxUb3AoKSsz OyQoIiNiPQp0bl92aXoiKS5jc3Moe3Bvc2l0aW9uOiJmaXhlZCIsdG9wOnUrInB4IixsZWZ0Om8r InB4In0pOyQoIiNidG5fdml6Iikub2ZmKCI9CmNsaWNrIik7JCgiI2J0bl92aXoiKS5jbGljayh0 aGlzLmNyZWF0ZV90cmFja3N0ZXJfYWN0aW9uKHRoaXMudXJsX3Zpeix2LHRoaT0Kcy5nZW5vbWVf YnVpbGQpKTskKCIjYnRuX3ZpeiIpLnNob3coKX1lbHNleyQoIiNidG5fdml6IikuaGlkZSgpfX0s aGlkZTpmdW5jPQp0aW9uKCl7dGhpcy4kZWwuZmluZCgiI2J0bl92aXoiKS5oaWRlKCl9LGNyZWF0 ZV90cmFja3N0ZXJfYWN0aW9uOmZ1bmN0aW9uKG49CixxLHApe3ZhciBvPTNEdGhpcztyZXR1cm4g ZnVuY3Rpb24oKXt2YXIgcj0zRHt9O2lmKHApe3JbImYtZGJrZXkiXT0zRHB9JC5haj0KYXgoe3Vy bDpuKyIvbGlzdF90cmFja3M/IiskLnBhcmFtKHIpLGRhdGFUeXBlOiJodG1sIixlcnJvcjpmdW5j dGlvbigpe28ubW9kPQphbC5zaG93KHt0aXRsZToiU29tZXRoaW5nIHdlbnQgd3JvbmchIixib2R5 OiJVbmZvcnR1bmF0ZWx5IHdlIGNvdWxkIG5vdCBhZGQ9CiB0aGlzIGRhdGFzZXQgdG8gdGhlIHRy YWNrIGJyb3dzZXIuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCB1cy4iLGJ1dHRvbj0Kczp7 Q2FuY2VsOmZ1bmN0aW9uKCl7by5tb2RhbC5oaWRlKCl9fX0pfSxzdWNjZXNzOmZ1bmN0aW9uKHMp e28ubW9kYWwuc2hvdyh7PQp0aXRsZToiVmlldyBEYXRhIGluIGEgTmV3IG9yIFNhdmVkIFZpc3Vh bGl6YXRpb24iLGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbig9Cil7by5tb2RhbC5oaWRlKCl9LCJW aWV3IGluIHNhdmVkIHZpc3VhbGl6YXRpb24iOmZ1bmN0aW9uKCl7by5tb2RhbC5zaG93KHt0aT0K dGxlOiJBZGQgRGF0YSB0byBTYXZlZCBWaXN1YWxpemF0aW9uIixib2R5OnMsYnV0dG9uczp7Q2Fu Y2VsOmZ1bmN0aW9uKCl7by5tPQpvZGFsLmhpZGUoKX0sIkFkZCB0byB2aXN1YWxpemF0aW9uIjpm dW5jdGlvbigpe28ubW9kYWwuaGlkZSgpO28ubW9kYWwuJGVsLmY9CmluZCgiaW5wdXRbbmFtZT0z RGlkXTpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PTNEJCh0aGlzKS52YWwoKTtxLmlk PQo9M0R0O28uZnJhbWUuYWRkKHt0aXRsZToiVHJhY2tzdGVyIix0eXBlOiJ1cmwiLGNvbnRlbnQ6 bisiL3RyYWNrc3Rlcj8iKyQucGE9CnJhbShxKX0pfSl9fX0pfSwiVmlldyBpbiBuZXcgdmlzdWFs aXphdGlvbiI6ZnVuY3Rpb24oKXtvLm1vZGFsLmhpZGUoKTtvLmZyYT0KbWUuYWRkKHt0aXRsZToi VHJhY2tzdGVyIix0eXBlOiJ1cmwiLGNvbnRlbnQ6bisiL3RyYWNrc3Rlcj8iKyQucGFyYW0ocSl9 KX19PQp9KX19KTtyZXR1cm4gZmFsc2V9fX0pO3ZhciBsPTNEZnVuY3Rpb24ocSxvLHIsbil7dmFy IHA9M0RuZXcgbyh7bW9kZWw6bmV3IHE9CihyKX0pO3AucmVuZGVyKCk7aWYobil7bi5hcHBlbmQo cC4kZWwpfXJldHVybiBwfTt2YXIgYz0zRGZ1bmN0aW9uKHApe2lmKCFwLj0KbW9kZWwpe3AubW9k ZWw9M0RuZXcgaShwLmRhdGFzZXRfY29uZmlnKX12YXIgbz0zRHAucGFyZW50X2VsdDt2YXIgcT0z RHAuZW1iPQplZGRlZDtkZWxldGUgcC5lbWJlZGRlZDtkZWxldGUgcC5wYXJlbnRfZWx0O2RlbGV0 ZSBwLmRhdGFzZXRfY29uZmlnO3ZhciBuPQo9M0QocT9uZXcgbShwKTpuZXcgZyhwKSk7bi5yZW5k ZXIoKTtpZihvKXtvLmFwcGVuZChuLiRlbCk7bi5leHBhbmRfdG9fY29udGE9CmluZXIoKX1yZXR1 cm4gbn07cmV0dXJue0RhdGFzZXQ6YixUYWJ1bGFyRGF0YXNldDppLERhdGFzZXRDb2xsZWN0aW9u OmUsVGFidT0KbGFyRGF0YXNldENodW5rZWRWaWV3OmEsY3JlYXRlVGFidWxhckRhdGFzZXRDaHVu a2VkVmlldzpjfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgNzQwZDc1 OGMyMjg1YmVjMTQwZTY5MDEwMjVlOTA2ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5YjdlYjAyOGIw OTc2Mj0KZDAwYmQzMDVjNGM3ODIzZTEgdGVzdC9mdW5jdGlvbmFsL3Rlc3RfdG9vbGJveC5weQot LS0gYS90ZXN0L2Z1bmN0aW9uYWwvdGVzdF90b29sYm94LnB5CisrKyBiL3Rlc3QvZnVuY3Rpb25h bC90ZXN0X3Rvb2xib3gucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgbmV3CiBpbXBvcnQgc3lz CiBmcm9tIGJhc2UudHdpbGx0ZXN0Y2FzZSBpbXBvcnQgVHdpbGxUZXN0Q2FzZQorZnJvbSBiYXNl LmFzc2VydHMgaW1wb3J0IHZlcmlmeV9hc3NlcnRpb25zCiBmcm9tIGJhc2UuaW50ZXJhY3RvciBp bXBvcnQgYnVpbGRfaW50ZXJhY3Rvciwgc3RhZ2VfZGF0YV9pbl9oaXN0b3J5LCBSdW5Ubz0Kb2xF eGNlcHRpb24KIGZyb20gYmFzZS5pbnN0cnVtZW50IGltcG9ydCByZWdpc3Rlcl9qb2JfZGF0YQog ZnJvbSBnYWxheHkudG9vbHMgaW1wb3J0IERhdGFNYW5hZ2VyVG9vbApAQCAtOTIsNiArOTMsOSBA QAogICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiggIlRlc3QgcGFyc2UgZmFpbHVyZSIg KQo9MjAKICAgICBkZWYgX3ZlcmlmeV9vdXRwdXRzKCBzZWxmLCB0ZXN0ZGVmLCBoaXN0b3J5LCBq b2JzLCBzaGVkX3Rvb2xfaWQsIGRhdGFfPQpsaXN0LCBnYWxheHlfaW50ZXJhY3RvciApOgorICAg ICAgICBhc3NlcnQgbGVuKGpvYnMpID0zRD0zRCAxLCAiVGVzdCBmcmFtZXdvcmsgbG9naWMgZXJy b3IsIHNvbWVob3cgdG89Cm9sIHRlc3QgcmVzdWx0ZWQgaW4gbW9yZSB0aGFuIG9uZSBqb2IuIgor ICAgICAgICBqb2IgPTNEIGpvYnNbIDAgXQorCiAgICAgICAgIG1heHNlY29uZHMgPTNEIHRlc3Rk ZWYubWF4c2Vjb25kcwogICAgICAgICBpZiB0ZXN0ZGVmLm51bV9vdXRwdXRzIGlzIG5vdCBOb25l OgogICAgICAgICAgICAgZXhwZWN0ZWQgPTNEIHRlc3RkZWYubnVtX291dHB1dHMKQEAgLTEwMiw3 ICsxMDYsMzMgQEAKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIG1lc3NhZ2UgKQog ICAgICAgICBmb3VuZF9leGNlcHRpb25zID0zRCBbXQo9MjAKLSAgICAgICAgam9iX3N0ZGlvID0z RCBOb25lCisgICAgICAgIGlmIHRlc3RkZWYuZXhwZWN0X2ZhaWx1cmU6CisgICAgICAgICAgICBp ZiB0ZXN0ZGVmLm91dHB1dHM6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW5u b3Qgc3BlY2lmeSBvdXRwdXRzIGluIGEgdGVzdCBleHBlY3Rpbj0KZyBmYWlsdXJlLiIpCisKKyAg ICAgICAgIyBXYWl0IGZvciB0aGUgam9iIHRvIGNvbXBsZXRlIGFuZCByZWdpc3RlciBleHBlY3Rp b25zIGlmIHRoZSBmaW5hbAorICAgICAgICAjIHN0YXR1cyB3YXMgbm90IHdoYXQgdGVzdCB3YXMg ZXhwZWN0aW5nLgorICAgICAgICBqb2JfZmFpbGVkID0zRCBGYWxzZQorICAgICAgICB0cnk6Cisg ICAgICAgICAgICBnYWxheHlfaW50ZXJhY3Rvci53YWl0X2Zvcl9qb2IoIGpvYlsgJ2lkJyBdLCBo aXN0b3J5LCBtYXhzZWNvbj0KZHMgKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg ICAgICAgICAgICBqb2JfZmFpbGVkID0zRCBUcnVlCisgICAgICAgICAgICBpZiBub3QgdGVzdGRl Zi5leHBlY3RfZmFpbHVyZToKKyAgICAgICAgICAgICAgICBmb3VuZF9leGNlcHRpb25zLmFwcGVu ZChlKQorCisgICAgICAgIGlmIG5vdCBqb2JfZmFpbGVkIGFuZCB0ZXN0ZGVmLmV4cGVjdF9mYWls dXJlOgorICAgICAgICAgICAgZXJyb3IgPTNEIEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBqb2Ig dG8gZmFpbCBidXQgR2FsYXh5IGluZGk9CmNhdGVkIHRoZSBqb2Igc3VjY2Vzc2Z1bGx5IGNvbXBs ZXRlZC4iKQorICAgICAgICAgICAgZm91bmRfZXhjZXB0aW9ucy5hcHBlbmQoZXJyb3IpCisKKyAg ICAgICAgam9iX3N0ZGlvID0zRCBnYWxheHlfaW50ZXJhY3Rvci5nZXRfam9iX3N0ZGlvKCBqb2Jb ICdpZCcgXSApCisKKyAgICAgICAgZXhwZWN0X2V4aXRfY29kZSA9M0QgdGVzdGRlZi5leHBlY3Rf ZXhpdF9jb2RlCisgICAgICAgIGlmIGV4cGVjdF9leGl0X2NvZGUgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICBleGl0X2NvZGUgPTNEIGpvYl9zdGRpb1siZXhpdF9jb2RlIl0KKyAgICAgICAgICAg IGlmIHN0cihleHBlY3RfZXhpdF9jb2RlKSAhPTNEIHN0cihleGl0X2NvZGUpOgorICAgICAgICAg ICAgICAgIGVycm9yID0zRCBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgam9iIHRvIGNvbXBsZXRl IHdpdGggZXg9Cml0IGNvZGUgJXMsIGZvdW5kICVzIiAlIChleHBlY3RfZXhpdF9jb2RlLCBleGl0 X2NvZGUpKQorICAgICAgICAgICAgICAgIGZvdW5kX2V4Y2VwdGlvbnMuYXBwZW5kKGVycm9yKQor CiAgICAgICAgIGZvciBvdXRwdXRfaW5kZXgsIG91dHB1dF90dXBsZSBpbiBlbnVtZXJhdGUodGVz dGRlZi5vdXRwdXRzKToKICAgICAgICAgICAgICMgR2V0IHRoZSBjb3JyZWN0IGhpZAogICAgICAg ICAgICAgbmFtZSwgb3V0ZmlsZSwgYXR0cmlidXRlcyA9M0Qgb3V0cHV0X3R1cGxlCkBAIC0xMjMs MTQgKzE1MywyNSBAQAogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAg ICAgICAgICAgIGlmIG5vdCBmb3VuZF9leGNlcHRpb25zOgogICAgICAgICAgICAgICAgICAgICAj IE9ubHkgcHJpbnQgdGhpcyBzdHVmZiBvdXQgb25jZS4KLSAgICAgICAgICAgICAgICAgICAgZm9y IGpvYiBpbiBqb2JzOgotICAgICAgICAgICAgICAgICAgICAgICAgam9iX3N0ZGlvID0zRCBnYWxh eHlfaW50ZXJhY3Rvci5nZXRfam9iX3N0ZGlvKCBqb2I9ClsgJ2lkJyBdICkKLSAgICAgICAgICAg ICAgICAgICAgICAgIGZvciBzdHJlYW0gaW4gWydzdGRvdXQnLCAnc3RkZXJyJ106Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgc3RyZWFtIGluIGpvYl9zdGRpbzoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBzZWxmLl9mb3JtYXRfc3Ry ZWFtKCBqPQpvYl9zdGRpb1sgc3RyZWFtIF0sIHN0cmVhbT0zRHN0cmVhbSwgZm9ybWF0PTNEVHJ1 ZSApCisgICAgICAgICAgICAgICAgICAgIGZvciBzdHJlYW0gaW4gWydzdGRvdXQnLCAnc3RkZXJy J106CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdHJlYW0gaW4gam9iX3N0ZGlvOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgc2VsZi5fZm9ybWF0 X3N0cmVhbSggam9iX3M9CnRkaW9bIHN0cmVhbSBdLCBzdHJlYW09M0RzdHJlYW0sIGZvcm1hdD0z RFRydWUgKQogICAgICAgICAgICAgICAgIGZvdW5kX2V4Y2VwdGlvbnMuYXBwZW5kKGUpCi0gICAg ICAgIGlmIGpvYl9zdGRpbyBpcyBOb25lOgotICAgICAgICAgICAgam9iX3N0ZGlvID0zRCBnYWxh eHlfaW50ZXJhY3Rvci5nZXRfam9iX3N0ZGlvKCBqb2JzWzBdWyAnaWQnIF09CiApCisKKyAgICAg ICAgb3RoZXJfY2hlY2tzID0zRCB7CisgICAgICAgICAgICAiY29tbWFuZF9saW5lIjogIkNvbW1h bmQgcHJvZHVjZWQgYnkgdGhlIGpvYiIsCisgICAgICAgICAgICAic3Rkb3V0IjogIlN0YW5kYXJk IG91dHB1dCBvZiB0aGUgam9iIiwKKyAgICAgICAgICAgICJzdGRlcnIiOiAiU3RhbmRhcmQgZXJy b3Igb2YgdGhlIGpvYiIsCisgICAgICAgIH0KKyAgICAgICAgZm9yIHdoYXQsIGRlc2NyaXB0aW9u IGluIG90aGVyX2NoZWNrcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgZ2V0YXR0ciggdGVzdGRl Ziwgd2hhdCwgTm9uZSApIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAg ICAgICAgICAgICAgICAgZGF0YSA9M0Qgam9iX3N0ZGlvW3doYXRdCisgICAgICAgICAgICAgICAg ICAgIHZlcmlmeV9hc3NlcnRpb25zKCBkYXRhLCBnZXRhdHRyKCB0ZXN0ZGVmLCB3aGF0ICkgKQor ICAgICAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciwgZXJyOgorICAgICAgICAgICAg ICAgICAgICBlcnJtc2cgPTNEICclcyBkaWZmZXJlbnQgdGhhbiBleHBlY3RlZFxuJyAlIGRlc2Ny aXB0aW9uCisgICAgICAgICAgICAgICAgICAgIGVycm1zZyArPTNEIHN0ciggZXJyICkKKyAgICAg ICAgICAgICAgICAgICAgZm91bmRfZXhjZXB0aW9ucy5hcHBlbmQoIEFzc2VydGlvbkVycm9yKCBl cnJtc2cgKSApCj0yMAogICAgICAgICBpZiBmb3VuZF9leGNlcHRpb25zOgogICAgICAgICAgICAg cmFpc2UgSm9iT3V0cHV0c0Vycm9yKGZvdW5kX2V4Y2VwdGlvbnMsIGpvYl9zdGRpbykKCmRpZmYg LXIgNzQwZDc1OGMyMjg1YmVjMTQwZTY5MDEwMjVlOTA2ZjUwYTBkN2EyYSAtciA5NWUzMDVkYjI5 YjdlYjAyOGIwOTc2Mj0KZDAwYmQzMDVjNGM3ODIzZTEgdGVzdC9mdW5jdGlvbmFsL3Rvb2xzL2pv Yl9wcm9wZXJ0aWVzLnhtbAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZnVuY3Rpb25hbC90b29s cy9qb2JfcHJvcGVydGllcy54bWwKQEAgLTAsMCArMSw2MiBAQAorPHRvb2wgaWQ9M0Qiam9iX3By b3BlcnRpZXMiIG5hbWU9M0QiVGVzdCBKb2IgUHJvcGVydGllcyI+CisgICAgPGNvbW1hbmQ+Cisg ICAgICAgICNpZiAkdGhlYm9vbAorICAgICAgICAgICAgZWNobyAiVGhlIGJvb2wgaXMgdHJ1ZSI7 CisgICAgICAgICAgICBlY2hvICJUaGUgYm9vbCBpcyByZWFsbHkgdHJ1ZSIgMT4mYW1wOzI7Cisg ICAgICAgICAgICBlY2hvICJUaGlzIGlzIGEgbGluZSBvZiB0ZXh0LiIgPiAkb3V0X2ZpbGUxCisg ICAgICAgICNlbHNlCisgICAgICAgICAgICBlY2hvICJUaGUgYm9vbCBpcyBub3QgdHJ1ZSI7Cisg ICAgICAgICAgICBlY2hvICJUaGUgYm9vbCBpcyB2ZXJ5IG5vdCB0cnVlIiAxPiZhbXA7MjsKKyAg ICAgICAgICAgIGVjaG8gIlRoaXMgaXMgYSBkaWZmZXJlbnQgbGluZSBvZiB0ZXh0LiIgPiAkb3V0 X2ZpbGUxOworICAgICAgICAgICAgc2ggLWMgImV4aXQgMiIKKyAgICAgICAgI2VuZCBpZgorICAg ICAgICAjaWYgJGZhaWxib29sCisgICAgICAgICAgICA7IHNoIC1jICJleGl0IDEyNyIKKyAgICAg ICAgI2VuZCBpZgorCisgICAgPC9jb21tYW5kPgorICAgIDxpbnB1dHM+CisgICAgICAgIDxwYXJh bSBuYW1lPTNEInRoZWJvb2wiIHR5cGU9M0QiYm9vbGVhbiIgbGFiZWw9M0QiVGhlIGJvb2xlYW4g cHJvcD0KZXJ0eSIgLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9M0QiZmFpbGJvb2wiIHR5cGU9M0Qi Ym9vbGVhbiIgbGFiZWw9M0QiVGhlIGZhaWx1cmUgcHJvPQpwZXJ0eSIgY2hlY2tlZD0zRCJmYWxz ZSIgLz4KKyAgICA8L2lucHV0cz4KKyAgICA8b3V0cHV0cz4KKyAgICAgICAgPGRhdGEgbmFtZT0z RCJvdXRfZmlsZTEiIC8+CisgICAgPC9vdXRwdXRzPgorICAgIDxzdGRpbz4KKyAgICAgICAgPGV4 aXRfY29kZSByYW5nZT0zRCIxMjciICAgbGV2ZWw9M0QiZmF0YWwiICAgZGVzY3JpcHRpb249M0Qi RmFpbGluPQpnIGV4aXQgY29kZS4iIC8+CisgICAgPC9zdGRpbz4KKyAgICA8dGVzdHM+CisgICAg ICAgIDx0ZXN0IGV4cGVjdF9leGl0X2NvZGU9M0QiMCI+CisgICAgICAgICAgICA8cGFyYW0gbmFt ZT0zRCJ0aGVib29sIiB2YWx1ZT0zRCJ0cnVlIiAvPgorICAgICAgICAgICAgPG91dHB1dCBuYW1l PTNEIm91dF9maWxlMSIgZmlsZT0zRCJzaW1wbGVfbGluZS50eHQiIC8+CisgICAgICAgICAgICA8 YXNzZXJ0X2NvbW1hbmQ+CisgICAgICAgICAgICAgICAgPGhhc190ZXh0IHRleHQ9M0QicmVhbGx5 IiAvPgorICAgICAgICAgICAgPC9hc3NlcnRfY29tbWFuZD4KKyAgICAgICAgICAgIDxhc3NlcnRf c3Rkb3V0PgorICAgICAgICAgICAgICAgIDxoYXNfbGluZSBsaW5lPTNEIlRoZSBib29sIGlzIHRy dWUiIC8+CisgICAgICAgICAgICA8L2Fzc2VydF9zdGRvdXQ+CisgICAgICAgICAgICA8YXNzZXJ0 X3N0ZGVycj4KKyAgICAgICAgICAgICAgICA8aGFzX2xpbmUgbGluZT0zRCJUaGUgYm9vbCBpcyBy ZWFsbHkgdHJ1ZSIgLz4KKyAgICAgICAgICAgIDwvYXNzZXJ0X3N0ZGVycj4KKyAgICAgICAgPC90 ZXN0PgorICAgICAgICA8dGVzdCBleHBlY3RfZXhpdF9jb2RlPTNEIjIiPgorICAgICAgICAgICAg PHBhcmFtIG5hbWU9M0QidGhlYm9vbCIgdmFsdWU9M0QiZmFsc2UiIC8+CisgICAgICAgICAgICA8 b3V0cHV0IG5hbWU9M0Qib3V0X2ZpbGUxIiBmaWxlPTNEInNpbXBsZV9saW5lX2FsdGVybmF0aXZl LnR4dD0KIiAvPgorICAgICAgICAgICAgPGFzc2VydF9jb21tYW5kPgorICAgICAgICAgICAgICAg IDxoYXNfdGV4dCB0ZXh0PTNEInZlcnkgbm90IiAvPgorICAgICAgICAgICAgPC9hc3NlcnRfY29t bWFuZD4KKyAgICAgICAgICAgIDxhc3NlcnRfc3Rkb3V0PgorICAgICAgICAgICAgICAgIDxoYXNf bGluZSBsaW5lPTNEIlRoZSBib29sIGlzIG5vdCB0cnVlIiAvPgorICAgICAgICAgICAgPC9hc3Nl cnRfc3Rkb3V0PgorICAgICAgICAgICAgPGFzc2VydF9zdGRlcnI+CisgICAgICAgICAgICAgICAg PGhhc19saW5lIGxpbmU9M0QiVGhlIGJvb2wgaXMgdmVyeSBub3QgdHJ1ZSIgLz4KKyAgICAgICAg ICAgIDwvYXNzZXJ0X3N0ZGVycj4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8dGVzdCBleHBl Y3RfZXhpdF9jb2RlZD0zRCIxMjciIGV4cGVjdF9mYWlsdXJlPTNEInRydWUiPgorICAgICAgICAg ICAgPHBhcmFtIG5hbWU9M0QidGhlYm9vbCIgdmFsdWU9M0QidHJ1ZSIgLz4KKyAgICAgICAgICAg IDxwYXJhbSBuYW1lPTNEImZhaWxib29sIiB2YWx1ZT0zRCJ0cnVlIiAvPgorICAgICAgICA8L3Rl c3Q+CisgICAgPC90ZXN0cz4KKyAgICA8aGVscD4KKyAgICA8L2hlbHA+Cis8L3Rvb2w+CgpkaWZm IC1yIDc0MGQ3NThjMjI4NWJlYzE0MGU2OTAxMDI1ZTkwNmY1MGEwZDdhMmEgLXIgOTVlMzA1ZGIy OWI3ZWIwMjhiMDk3NjI9CmQwMGJkMzA1YzRjNzgyM2UxIHRlc3QvZnVuY3Rpb25hbC90b29scy9z YW1wbGVzX3Rvb2xfY29uZi54bWwKLS0tIGEvdGVzdC9mdW5jdGlvbmFsL3Rvb2xzL3NhbXBsZXNf dG9vbF9jb25mLnhtbAorKysgYi90ZXN0L2Z1bmN0aW9uYWwvdG9vbHMvc2FtcGxlc190b29sX2Nv bmYueG1sCkBAIC0xMyw2ICsxMyw3IEBACiAgIDx0b29sIGZpbGU9M0QibXVsdGlfb3V0cHV0X2Fz c2lnbl9wcmltYXJ5LnhtbCIgLz48dG9vbCBmaWxlPTNEImNvbXBvc2l0ZT0KX291dHB1dC54bWwi IC8+PHRvb2wgZmlsZT0zRCJtZXRhZGF0YS54bWwiIC8+CisgIDx0b29sIGZpbGU9M0Qiam9iX3By b3BlcnRpZXMueG1sIiAvPjx0b29sIGZpbGU9M0QiZ3ppcHBlZF9pbnB1dHMueG1sIiAvPj0KPHRv b2wgZmlsZT0zRCJvdXRwdXRfb3JkZXIueG1sIiAvPjx0b29sIGZpbGU9M0Qib3V0cHV0X2Zvcm1h dC54bWwiIC8+CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9j b21taXRzLzg2ZDM5M2JlZTAzZS8KQ2hhbmdlc2V0OiAgIDg2ZDM5M2JlZTAzZQpVc2VyOiAgICAg ICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNC0xMi0xOSAxOToxOTowMyswMDowMApT dW1tYXJ5OiAgICAgTWVyZ2VkIGdhbGF4eS9nYWxheHktY2VudHJhbCBpbnRvIGRlZmF1bHQKQWZm ZWN0ZWQgIzogIDYgZmlsZXMKCmRpZmYgLXIgOTVlMzA1ZGIyOWI3ZWIwMjhiMDk3NjJkMDBiZDMw NWM0Yzc4MjNlMSAtciA4NmQzOTNiZWUwM2VkYmQ1NTkyNjU3OT0KNTc1NmFlMzkzZjAxMDdkOWIg bGliL2dhbGF4eS9tb2RlbC9fX2luaXRfXy5weQotLS0gYS9saWIvZ2FsYXh5L21vZGVsL19faW5p dF9fLnB5CisrKyBiL2xpYi9nYWxheHkvbW9kZWwvX19pbml0X18ucHkKQEAgLTUyMCw5ICs1MjAs MTUgQEAKICAgICAgICAgICAgICAgICBkYXRhc2V0LmJsdXJiID0zRCAnZGVsZXRlZCcKICAgICAg ICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEICdKb2IgZGVsZXRlZCcKICAgICAgICAgICAgICAg ICBkYXRhc2V0LmluZm8gPTNEICdKb2Igb3V0cHV0IGRlbGV0ZWQgYnkgdXNlciBiZWZvcmUgam9i IGNvPQptcGxldGVkJwotICAgIGRlZiB0b19kaWN0KCBzZWxmLCB2aWV3PTNEJ2NvbGxlY3Rpb24n ICk6CisKKyAgICBkZWYgdG9fZGljdCggc2VsZiwgdmlldz0zRCdjb2xsZWN0aW9uJywgc3lzdGVt X2RldGFpbHM9M0RGYWxzZSApOgogICAgICAgICBydmFsID0zRCBzdXBlciggSm9iLCBzZWxmICku dG9fZGljdCggdmlldz0zRHZpZXcgKQogICAgICAgICBydmFsWyd0b29sX2lkJ10gPTNEIHNlbGYu dG9vbF9pZAorICAgICAgICBpZiBzeXN0ZW1fZGV0YWlsczoKKyAgICAgICAgICAgICMgU3lzdGVt IGxldmVsIGRldGFpbHMgdGhhdCBvbmx5IGFkbWlucyBzaG91bGQgaGF2ZS4KKyAgICAgICAgICAg IHJ2YWxbJ2V4dGVybmFsX2lkJ10gPTNEIHNlbGYuam9iX3J1bm5lcl9leHRlcm5hbF9pZAorICAg ICAgICAgICAgcnZhbFsnY29tbWFuZF9saW5lJ10gPTNEIHNlbGYuY29tbWFuZF9saW5lCisKICAg ICAgICAgaWYgdmlldyA9M0Q9M0QgJ2VsZW1lbnQnOgogICAgICAgICAgICAgcGFyYW1fZGljdCA9 M0QgZGljdCggWyAoIHAubmFtZSwgcC52YWx1ZSApIGZvciBwIGluIHNlbGYucGFyYW09CmV0ZXJz IF0gKQogICAgICAgICAgICAgcnZhbFsncGFyYW1zJ10gPTNEIHBhcmFtX2RpY3QKCmRpZmYgLXIg OTVlMzA1ZGIyOWI3ZWIwMjhiMDk3NjJkMDBiZDMwNWM0Yzc4MjNlMSAtciA4NmQzOTNiZWUwM2Vk YmQ1NTkyNjU3OT0KNTc1NmFlMzkzZjAxMDdkOWIgbGliL2dhbGF4eS93ZWIvc2VjdXJpdHkvX19p bml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvc2VjdXJpdHkvX19pbml0X18ucHkKKysrIGIv bGliL2dhbGF4eS93ZWIvc2VjdXJpdHkvX19pbml0X18ucHkKQEAgLTczLDcgKzczLDcgQEAKICAg ICAgICAgaWYgbm90IGlzaW5zdGFuY2UoIHJ2YWwsIGRpY3QgKToKICAgICAgICAgICAgIHJldHVy biBydmFsCiAgICAgICAgIGZvciBrLCB2IGluIHJ2YWwuaXRlbXMoKToKLSAgICAgICAgICAgIGlm ICggayA9M0Q9M0QgJ2lkJyBvciBrLmVuZHN3aXRoKCAnX2lkJyApICkgYW5kIHYgaXMgbm90IE5v bmUgPQphbmQgayBub3QgaW4gWyAndG9vbF9pZCcgXToKKyAgICAgICAgICAgIGlmICggayA9M0Q9 M0QgJ2lkJyBvciBrLmVuZHN3aXRoKCAnX2lkJyApICkgYW5kIHYgaXMgbm90IE5vbmUgPQphbmQg ayBub3QgaW4gWyAndG9vbF9pZCcsICdleHRlcm5hbF9pZCcgXToKICAgICAgICAgICAgICAgICB0 cnk6CiAgICAgICAgICAgICAgICAgICAgIHJ2YWxbIGsgXSA9M0Qgc2VsZi5lbmNvZGVfaWQoIHYg KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CgpkaWZmIC1yIDk1ZTMwNWRiMjli N2ViMDI4YjA5NzYyZDAwYmQzMDVjNGM3ODIzZTEgLXIgODZkMzkzYmVlMDNlZGJkNTU5MjY1Nzk9 CjU3NTZhZTM5M2YwMTA3ZDliIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pvYnMucHkK LS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvam9icy5weQorKysgYi9saWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2JzLnB5CkBAIC0yNCwxMCArMjQsMTMgQEAKICAgICBA ZXhwb3NlX2FwaQogICAgIGRlZiBpbmRleCggc2VsZiwgdHJhbnMsICoqa3dkICk6CiAgICAgICAg ICIiIgotICAgICAgICBpbmRleCggdHJhbnMsIHN0YXRlPTNETm9uZSwgdG9vbF9pZD0zRE5vbmUs IGhpc3RvcnlfaWQ9M0ROb25lICkKKyAgICAgICAgaW5kZXgoIHRyYW5zLCBzdGF0ZT0zRE5vbmUs IHRvb2xfaWQ9M0ROb25lLCBoaXN0b3J5X2lkPTNETm9uZSwgZGF0PQplX3JhbmdlX21pbj0zRE5v bmUsIGRhdGVfcmFuZ2VfbWF4PTNETm9uZSwgdXNlcl9kZXRhaWxzPTNERmFsc2UgKQogICAgICAg ICAqIEdFVCAvYXBpL2pvYnM6CiAgICAgICAgICAgICByZXR1cm4gam9icyBmb3IgY3VycmVudCB1 c2VyCj0yMAorICAgICAgICAgICAgISEgaWYgdXNlciBpcyBhZG1pbiBhbmQgdXNlcl9kZXRhaWxz IGlzIFRydWUsIHRoZW4KKyAgICAgICAgICAgICAgICByZXR1cm4gam9icyBmb3IgYWxsIGdhbGF4 eSB1c2VycyBiYXNlZCBvbiBmaWx0ZXJpbmcgLSB0aGlzPQogaXMgYW4gZXh0ZW5kZWQgc2Vydmlj ZQorCiAgICAgICAgIDp0eXBlICAgc3RhdGU6IHN0cmluZyBvciBsaXN0CiAgICAgICAgIDpwYXJh bSAgc3RhdGU6IGxpbWl0IGxpc3Rpbmcgb2Ygam9icyB0byB0aG9zZSB0aGF0IG1hdGNoIG9uZSBv ZiB0aD0KZSBpbmNsdWRlZCBzdGF0ZXMuIElmIG5vbmUsIGFsbCBhcmUgcmV0dXJuZWQuCiAgICAg ICAgIFZhbGlkIEdhbGF4eSBqb2Igc3RhdGVzIGluY2x1ZGU6CkBAIC0zNiwxNyArMzksMjkgQEAK ICAgICAgICAgOnR5cGUgICB0b29sX2lkOiBzdHJpbmcgb3IgbGlzdAogICAgICAgICA6cGFyYW0g IHRvb2xfaWQ6IGxpbWl0IGxpc3Rpbmcgb2Ygam9icyB0byB0aG9zZSB0aGF0IG1hdGNoIG9uZSBv ZiA9CnRoZSBpbmNsdWRlZCB0b29sX2lkcy4gSWYgbm9uZSwgYWxsIGFyZSByZXR1cm5lZC4KPTIw CisgICAgICAgIDp0eXBlICAgdXNlcl9kZXRhaWxzOiBib29sZWFuCisgICAgICAgIDpwYXJhbSAg dXNlcl9kZXRhaWxzOiBpZiB0cnVlLCBhbmQgcmVxdWVzdG9yIGlzIGFuIGFkbWluLCB3aWxsIHJl dD0KdXJuIGV4dGVybmFsIGpvYiBpZCBhbmQgdXNlciBlbWFpbC4KKworICAgICAgICA6dHlwZSAg IGRhdGVfcmFuZ2VfbWluOiBzdHJpbmcgJzIwMTQtMDEtMDEnCisgICAgICAgIDpwYXJhbSAgZGF0 ZV9yYW5nZV9taW46IGxpbWl0IHRoZSBsaXN0aW5nIG9mIGpvYnMgdG8gdGhvc2UgdXBkYXRlZD0K IG9uIG9yIGFmdGVyIHJlcXVlc3RlZCBkYXRlCisKKyAgICAgICAgOnR5cGUgICBkYXRlX3Jhbmdl X21heDogc3RyaW5nICcyMDE0LTEyLTMxJworICAgICAgICA6cGFyYW0gIGRhdGVfcmFuZ2VfbWF4 OiBsaW1pdCB0aGUgbGlzdGluZyBvZiBqb2JzIHRvIHRob3NlIHVwZGF0ZWQ9CiBvbiBvciBiZWZv cmUgcmVxdWVzdGVkIGRhdGUKKwogICAgICAgICA6dHlwZSAgIGhpc3RvcnlfaWQ6IHN0cmluZwog ICAgICAgICA6cGFyYW0gIGhpc3RvcnlfaWQ6IGxpbWl0IGxpc3Rpbmcgb2Ygam9icyB0byB0aG9z ZSB0aGF0IG1hdGNoIHRoZSA9Cmhpc3RvcnlfaWQuIElmIG5vbmUsIGFsbCBhcmUgcmV0dXJuZWQu Cj0yMAogICAgICAgICA6cnR5cGU6ICAgICBsaXN0CiAgICAgICAgIDpyZXR1cm5zOiAgIGxpc3Qg b2YgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgc3VtbWFyeSBqb2IgaW5mb3JtYXRpb24KICAgICAg ICAgIiIiCisgICAgICAgIHN0YXRlID0zRCBrd2QuZ2V0KCAnc3RhdGUnLCBOb25lICkKKyAgICAg ICAgaXNfYWRtaW4gPTNEIHRyYW5zLnVzZXJfaXNfYWRtaW4oKQorICAgICAgICB1c2VyX2RldGFp bHMgPTNEIGt3ZC5nZXQoJ3VzZXJfZGV0YWlscycsIEZhbHNlKQo9MjAKLSAgICAgICAgc3RhdGUg PTNEIGt3ZC5nZXQoICdzdGF0ZScsIE5vbmUgKQotICAgICAgICBxdWVyeSA9M0QgdHJhbnMuc2Ff c2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkpvYiApLmZpbHRlcigKLSAgICAgICAgICAg IHRyYW5zLmFwcC5tb2RlbC5Kb2IudXNlciA9M0Q9M0QgdHJhbnMudXNlcgotICAgICAgICApCisg ICAgICAgIGlmIGlzX2FkbWluOgorICAgICAgICAgICAgcXVlcnkgPTNEIHRyYW5zLnNhX3Nlc3Np b24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5Kb2IgKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcXVlcnkgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5Kb2Ig KS5maWx0ZXI9Cih0cmFucy5hcHAubW9kZWwuSm9iLnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIpCj0y MAogICAgICAgICBkZWYgYnVpbGRfYW5kX2FwcGx5X2ZpbHRlcnMoIHF1ZXJ5LCBvYmplY3RzLCBm aWx0ZXJfZnVuYyApOgogICAgICAgICAgICAgaWYgb2JqZWN0cyBpcyBub3QgTm9uZToKQEAgLTY0 LDYgKzc5LDkgQEAKICAgICAgICAgcXVlcnkgPTNEIGJ1aWxkX2FuZF9hcHBseV9maWx0ZXJzKCBx dWVyeSwga3dkLmdldCggJ3Rvb2xfaWQnLCBOb25lPQogKSwgbGFtYmRhIHQ6IHRyYW5zLmFwcC5t b2RlbC5Kb2IudG9vbF9pZCA9M0Q9M0QgdCApCiAgICAgICAgIHF1ZXJ5ID0zRCBidWlsZF9hbmRf YXBwbHlfZmlsdGVycyggcXVlcnksIGt3ZC5nZXQoICd0b29sX2lkX2xpa2UnLD0KIE5vbmUgKSwg bGFtYmRhIHQ6IHRyYW5zLmFwcC5tb2RlbC5Kb2IudG9vbF9pZC5saWtlKHQpICkKPTIwCisgICAg ICAgIHF1ZXJ5ID0zRCBidWlsZF9hbmRfYXBwbHlfZmlsdGVycyggcXVlcnksIGt3ZC5nZXQoICdk YXRlX3JhbmdlX21pbj0KJywgTm9uZSApLCBsYW1iZGEgZG1pbjogdHJhbnMuYXBwLm1vZGVsLkpv Yi50YWJsZS5jLnVwZGF0ZV90aW1lID49M0QgZG1pbiApCisgICAgICAgIHF1ZXJ5ID0zRCBidWls ZF9hbmRfYXBwbHlfZmlsdGVycyggcXVlcnksIGt3ZC5nZXQoICdkYXRlX3JhbmdlX21heD0KJywg Tm9uZSApLCBsYW1iZGEgZG1heDogdHJhbnMuYXBwLm1vZGVsLkpvYi50YWJsZS5jLnVwZGF0ZV90 aW1lIDw9M0QgZG1heCApCisKICAgICAgICAgaGlzdG9yeV9pZCA9M0Qga3dkLmdldCggJ2hpc3Rv cnlfaWQnLCBOb25lICkKICAgICAgICAgaWYgaGlzdG9yeV9pZCBpcyBub3QgTm9uZToKICAgICAg ICAgICAgIHRyeToKQEAgLTc4LDcgKzk2LDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg ICBvcmRlcl9ieSA9M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi51cGRhdGVfdGltZS5kZXNjKCkKICAg ICAgICAgZm9yIGpvYiBpbiBxdWVyeS5vcmRlcl9ieSggb3JkZXJfYnkgKS5hbGwoKToKLSAgICAg ICAgICAgIG91dC5hcHBlbmQoIHNlbGYuZW5jb2RlX2FsbF9pZHMoIHRyYW5zLCBqb2IudG9fZGlj dCggJ2NvbGxlY3RpPQpvbicgKSwgVHJ1ZSApICkKKyAgICAgICAgICAgIGpvYl9kaWN0ID0zRCBq b2IudG9fZGljdCggJ2NvbGxlY3Rpb24nLCBzeXN0ZW1fZGV0YWlscz0zRGlzX2FkPQptaW4gKQor ICAgICAgICAgICAgaiA9M0Qgc2VsZi5lbmNvZGVfYWxsX2lkcyggdHJhbnMsIGpvYl9kaWN0LCBU cnVlICkKKyAgICAgICAgICAgIGlmIHVzZXJfZGV0YWlsczoKKyAgICAgICAgICAgICAgICBqWyd1 c2VyX2VtYWlsJ10gPTNEIGpvYi51c2VyLmVtYWlsCisgICAgICAgICAgICBvdXQuYXBwZW5kKGop CisKICAgICAgICAgcmV0dXJuIG91dAo9MjAKICAgICBAZXhwb3NlX2FwaQpAQCAtOTgsMTIgKzEy MSwxMyBAQAogICAgICAgICA6cmV0dXJuczogICBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZnVsbCBk ZXNjcmlwdGlvbiBvZiBqb2IgZGF0YQogICAgICAgICAiIiIKICAgICAgICAgam9iID0zRCBzZWxm Ll9fZ2V0X2pvYiggdHJhbnMsIGlkICkKLSAgICAgICAgam9iX2RpY3QgPTNEIHNlbGYuZW5jb2Rl X2FsbF9pZHMoIHRyYW5zLCBqb2IudG9fZGljdCggJ2VsZW1lbnQnICksPQogVHJ1ZSApCisgICAg ICAgIGlzX2FkbWluID0zRCB0cmFucy51c2VyX2lzX2FkbWluKCkKKyAgICAgICAgam9iX2RpY3Qg PTNEIHNlbGYuZW5jb2RlX2FsbF9pZHMoIHRyYW5zLCBqb2IudG9fZGljdCggJ2VsZW1lbnQnLCBz PQp5c3RlbV9kZXRhaWxzPTNEaXNfYWRtaW4gKSwgVHJ1ZSApCiAgICAgICAgIGZ1bGxfb3V0cHV0 ID0zRCB1dGlsLmFzYm9vbCgga3dkLmdldCggJ2Z1bGwnLCAnZmFsc2UnICkgKQogICAgICAgICBp ZiBmdWxsX291dHB1dDoKICAgICAgICAgICAgIGpvYl9kaWN0LnVwZGF0ZSggZGljdCggc3RkZXJy PTNEam9iLnN0ZGVyciwgc3Rkb3V0PTNEam9iLnN0ZG91PQp0ICkgKQotICAgICAgICAgICAgaWYg dHJhbnMudXNlcl9pc19hZG1pbigpOgotICAgICAgICAgICAgICAgIGpvYl9kaWN0Wydjb21tYW5k X2xpbmUnXSA9M0Qgam9iLmNvbW1hbmRfbGluZQorICAgICAgICAgICAgaWYgaXNfYWRtaW46Cisg ICAgICAgICAgICAgICAgam9iX2RpY3RbJ3VzZXJfZW1haWwnXSA9M0Qgam9iLnVzZXIuZW1haWwK PTIwCiAgICAgICAgICAgICAgICAgZGVmIG1ldHJpY190b19kaWN0KG1ldHJpYyk6CiAgICAgICAg ICAgICAgICAgICAgIG1ldHJpY19uYW1lID0zRCBtZXRyaWMubWV0cmljX25hbWUKQEAgLTE3NCwx MCArMTk4LDE2IEBACiAgICAgICAgICAgICBkZWNvZGVkX2pvYl9pZCA9M0QgdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCBpZCApCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAg ICByYWlzZSBleGNlcHRpb25zLk1hbGZvcm1lZElkKCkKLSAgICAgICAgcXVlcnkgPTNEIHRyYW5z LnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5Kb2IgKS5maWx0ZXIoCi0gICAgICAg ICAgICB0cmFucy5hcHAubW9kZWwuSm9iLnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIsCi0gICAgICAg ICAgICB0cmFucy5hcHAubW9kZWwuSm9iLmlkID0zRD0zRCBkZWNvZGVkX2pvYl9pZAotICAgICAg ICApCisgICAgICAgIHF1ZXJ5ID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAu bW9kZWwuSm9iICkKKyAgICAgICAgaWYgdHJhbnMudXNlcl9pc19hZG1pbigpOgorICAgICAgICAg ICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlcigKKyAgICAgICAgICAgICAgICB0cmFucy5hcHAubW9k ZWwuSm9iLmlkID0zRD0zRCBkZWNvZGVkX2pvYl9pZAorICAgICAgICAgICAgKQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlcigKKyAgICAgICAgICAgICAg ICB0cmFucy5hcHAubW9kZWwuSm9iLnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIsCisgICAgICAgICAg ICAgICAgdHJhbnMuYXBwLm1vZGVsLkpvYi5pZCA9M0Q9M0QgZGVjb2RlZF9qb2JfaWQKKyAgICAg ICAgICAgICkKICAgICAgICAgam9iID0zRCBxdWVyeS5maXJzdCgpCiAgICAgICAgIGlmIGpvYiBp cyBOb25lOgogICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCgpCgpk aWZmIC1yIDk1ZTMwNWRiMjliN2ViMDI4YjA5NzYyZDAwYmQzMDVjNGM3ODIzZTEgLXIgODZkMzkz YmVlMDNlZGJkNTU5MjY1Nzk9CjU3NTZhZTM5M2YwMTA3ZDliIHRlc3QvYXBpL3Rlc3Rfam9icy5w eQotLS0gYS90ZXN0L2FwaS90ZXN0X2pvYnMucHkKKysrIGIvdGVzdC9hcGkvdGVzdF9qb2JzLnB5 CkBAIC0xLDQgKzEsNiBAQAoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQganNvbgoraW1wb3J0IHRp bWUKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIKPTIwCiBmcm9tIGJhc2UgaW1wb3J0 IGFwaQpAQCAtMTEsMTMgKzEzLDE4IEBACiAgICAgZGVmIHRlc3RfaW5kZXgoIHNlbGYgKToKICAg ICAgICAgIyBDcmVhdGUgSERBIHRvIGVuc3VyZSBhdCBsZWFzdCBvbmUgam9iIGV4aXN0cy4uLgog ICAgICAgICBzZWxmLl9faGlzdG9yeV93aXRoX25ld19kYXRhc2V0KCkKLSAgICAgICAgam9ic19y ZXNwb25zZSA9M0Qgc2VsZi5fZ2V0KCAiam9icyIgKQorICAgICAgICBqb2JzID0zRCBzZWxmLl9f am9ic19pbmRleCgpCisgICAgICAgIGFzc2VydCAidXBsb2FkMSIgaW4gbWFwKCBpdGVtZ2V0dGVy KCAidG9vbF9pZCIgKSwgam9icyApCj0yMAotICAgICAgICBzZWxmLl9hc3NlcnRfc3RhdHVzX2Nv ZGVfaXMoIGpvYnNfcmVzcG9uc2UsIDIwMCApCisgICAgZGVmIHRlc3Rfc3lzdGVtX2RldGFpbHNf YWRtaW5fb25seSggc2VsZiApOgorICAgICAgICBzZWxmLl9faGlzdG9yeV93aXRoX25ld19kYXRh c2V0KCkKKyAgICAgICAgam9icyA9M0Qgc2VsZi5fX2pvYnNfaW5kZXgoIGFkbWluPTNERmFsc2Ug KQorICAgICAgICBqb2IgPTNEIGpvYnNbMF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X25vdF9oYXNf a2V5cyggam9iLCAiY29tbWFuZF9saW5lIiwgImV4dGVybmFsX2lkIiApCj0yMAotICAgICAgICBq b2JzID0zRCBqb2JzX3Jlc3BvbnNlLmpzb24oKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSgg am9icywgbGlzdCApCi0gICAgICAgIGFzc2VydCAidXBsb2FkMSIgaW4gbWFwKCBpdGVtZ2V0dGVy KCAidG9vbF9pZCIgKSwgam9icyApCisgICAgICAgIGpvYnMgPTNEIHNlbGYuX19qb2JzX2luZGV4 KCBhZG1pbj0zRFRydWUgKQorICAgICAgICBqb2IgPTNEIGpvYnNbMF0KKyAgICAgICAgc2VsZi5f YXNzZXJ0X2hhc19rZXlzKCBqb2IsICJjb21tYW5kX2xpbmUiLCAiZXh0ZXJuYWxfaWQiICkKPTIw CiAgICAgZGVmIHRlc3RfaW5kZXhfc3RhdGVfZmlsdGVyKCBzZWxmICk6CiAgICAgICAgICMgSW5p dGlhbCBudW1iZXIgb2Ygb2sgam9icwpAQCAtMzEsNiArMzgsMzMgQEAKICAgICAgICAgbmV3X2Nv dW50ID0zRCBsZW4oIHNlbGYuX191cGxvYWRzX3dpdGhfc3RhdGUoICJvayIgKSApCiAgICAgICAg IGFzc2VydCBvcmlnaW5hbF9jb3VudCA8IG5ld19jb3VudAo9MjAKKyAgICBkZWYgdGVzdF9pbmRl eF9kYXRlX2ZpbHRlciggc2VsZiApOgorICAgICAgICBzZWxmLl9faGlzdG9yeV93aXRoX25ld19k YXRhc2V0KCkKKyAgICAgICAgdHdvX3dlZWtzX2FnbyA9M0QgKGRhdGV0aW1lLmRhdGV0aW1lLnV0 Y25vdygpIC0gZGF0ZXRpbWUudGltZWRlbHRhPQooNykpLmlzb2Zvcm1hdCgpCisgICAgICAgIGxh c3Rfd2VlayA9M0QgKGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpIC0gZGF0ZXRpbWUudGltZWRl bHRhKDcpKT0KLmlzb2Zvcm1hdCgpCisgICAgICAgIG5leHRfd2VlayA9M0QgKGRhdGV0aW1lLmRh dGV0aW1lLnV0Y25vdygpICsgZGF0ZXRpbWUudGltZWRlbHRhKDcpKT0KLmlzb2Zvcm1hdCgpCisg ICAgICAgIHRvZGF5ID0zRCBkYXRldGltZS5kYXRldGltZS51dGNub3coKS5pc29mb3JtYXQoKQor ICAgICAgICB0b21vcnJvdyA9M0QgKGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdygpICsgZGF0ZXRp bWUudGltZWRlbHRhKDEpKS49Cmlzb2Zvcm1hdCgpCisKKyAgICAgICAgam9icyA9M0Qgc2VsZi5f X2pvYnNfaW5kZXgoIGRhdGE9M0R7ImRhdGVfcmFuZ2VfbWluIjogdG9kYXlbMDoxMF0sPQogImRh dGVfcmFuZ2VfbWF4IjogdG9tb3Jyb3dbMDoxMF19ICkKKyAgICAgICAgYXNzZXJ0IGxlbiggam9i cyApID4gMAorICAgICAgICB0b2RheV9qb2JfaWQgPTNEIGpvYnNbMF1bImlkIl0KKworICAgICAg ICBqb2JzID0zRCBzZWxmLl9fam9ic19pbmRleCggZGF0YT0zRHsiZGF0ZV9yYW5nZV9taW4iOiB0 d29fd2Vla3NfYWc9Cm8sICJkYXRlX3JhbmdlX21heCI6IGxhc3Rfd2Vla30gKQorICAgICAgICBh c3NlcnQgdG9kYXlfam9iX2lkIG5vdCBpbiBtYXAoaXRlbWdldHRlcigiaWQiKSwgam9icykKKwor ICAgICAgICBqb2JzID0zRCBzZWxmLl9fam9ic19pbmRleCggZGF0YT0zRHsiZGF0ZV9yYW5nZV9t aW4iOiBsYXN0X3dlZWssICI9CmRhdGVfcmFuZ2VfbWF4IjogbmV4dF93ZWVrfSApCisgICAgICAg IGFzc2VydCB0b2RheV9qb2JfaWQgaW4gbWFwKGl0ZW1nZXR0ZXIoImlkIiksIGpvYnMpCisKKyAg ICBkZWYgdGVzdF9pbmRleF9oaXN0b3J5KCBzZWxmICk6CisgICAgICAgIGhpc3RvcnlfaWQsIF8g PTNEIHNlbGYuX19oaXN0b3J5X3dpdGhfbmV3X2RhdGFzZXQoKQorICAgICAgICBqb2JzID0zRCBz ZWxmLl9fam9ic19pbmRleCggZGF0YT0zRHsiaGlzdG9yeV9pZCI6IGhpc3RvcnlfaWR9ICkKKyAg ICAgICAgYXNzZXJ0IGxlbiggam9icyApID4gMAorCisgICAgICAgIGhpc3RvcnlfaWQgPTNEIHNl bGYuX25ld19oaXN0b3J5KCkKKyAgICAgICAgam9icyA9M0Qgc2VsZi5fX2pvYnNfaW5kZXgoIGRh dGE9M0R7Imhpc3RvcnlfaWQiOiBoaXN0b3J5X2lkfSApCisgICAgICAgIGFzc2VydCBsZW4oIGpv YnMgKSA9M0Q9M0QgMAorCiAgICAgZGVmIHRlc3RfaW5kZXhfbXVsdGlwbGVfc3RhdGVzX2ZpbHRl ciggc2VsZiApOgogICAgICAgICAjIEluaXRpYWwgbnVtYmVyIG9mIG9rIGpvYnMKICAgICAgICAg b3JpZ2luYWxfY291bnQgPTNEIGxlbiggc2VsZi5fX3VwbG9hZHNfd2l0aF9zdGF0ZSggIm9rIiwg Im5ldyIgKSApCkBAIC01OCw2ICs5MiwyMiBAQAogICAgICAgICBqb2JfZGV0YWlscyA9M0Qgc2hv d19qb2JzX3Jlc3BvbnNlLmpzb24oKQogICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX2tleSggam9i X2RldGFpbHMsICdpZCcsICdzdGF0ZScsICdleGl0X2NvZGUnLCAndXA9CmRhdGVfdGltZScsICdj cmVhdGVfdGltZScgKQo9MjAKKyAgICBkZWYgdGVzdF9zaG93X3NlY3VyaXR5KCBzZWxmICk6Cisg ICAgICAgIGhpc3RvcnlfaWQsIF8gPTNEIHNlbGYuX19oaXN0b3J5X3dpdGhfbmV3X2RhdGFzZXQo KQorICAgICAgICBqb2JzX3Jlc3BvbnNlID0zRCBzZWxmLl9nZXQoICJqb2JzIiwgZGF0YT0zRHsi aGlzdG9yeV9pZCI6IGhpc3Rvcnk9Cl9pZH0gKQorICAgICAgICBqb2IgPTNEIGpvYnNfcmVzcG9u c2UuanNvbigpWyAwIF0KKyAgICAgICAgam9iX2lkID0zRCBqb2JbICJpZCIgXQorCisgICAgICAg IHNob3dfam9ic19yZXNwb25zZSA9M0Qgc2VsZi5fZ2V0KCAiam9icy8lcyIgJSBqb2JfaWQsIGFk bWluPTNERmFscz0KZSApCisgICAgICAgIHNlbGYuX2Fzc2VydF9ub3RfaGFzX2tleXMoIHNob3df am9ic19yZXNwb25zZS5qc29uKCksICJjb21tYW5kX2xpbj0KZSIsICJleHRlcm5hbF9pZCIgKQor CisgICAgICAgIHdpdGggc2VsZi5fZGlmZmVyZW50X3VzZXIoKToKKyAgICAgICAgICAgIHNob3df am9ic19yZXNwb25zZSA9M0Qgc2VsZi5fZ2V0KCAiam9icy8lcyIgJSBqb2JfaWQsIGFkbWluPTNE PQpGYWxzZSApCisgICAgICAgICAgICBzZWxmLl9hc3NlcnRfc3RhdHVzX2NvZGVfaXMoIHNob3df am9ic19yZXNwb25zZSwgNDA0ICkKKworICAgICAgICBzaG93X2pvYnNfcmVzcG9uc2UgPTNEIHNl bGYuX2dldCggImpvYnMvJXMiICUgam9iX2lkLCBhZG1pbj0zRFRydWU9CiApCisgICAgICAgIHNl bGYuX2Fzc2VydF9oYXNfa2V5cyggc2hvd19qb2JzX3Jlc3BvbnNlLmpzb24oKSwgImNvbW1hbmRf bGluZSIsID0KImV4dGVybmFsX2lkIiApCisKICAgICBkZWYgdGVzdF9zZWFyY2goIHNlbGYgKToK ICAgICAgICAgaGlzdG9yeV9pZCwgZGF0YXNldF9pZCA9M0Qgc2VsZi5fX2hpc3Rvcnlfd2l0aF9v a19kYXRhc2V0KCkKPTIwCkBAIC0xMzMsMyArMTgzLDEwIEBACiAgICAgICAgIGhpc3RvcnlfaWQs IGRhdGFzZXRfaWQgPTNEIHNlbGYuX19oaXN0b3J5X3dpdGhfbmV3X2RhdGFzZXQoKQogICAgICAg ICBzZWxmLl93YWl0X2Zvcl9oaXN0b3J5KCBoaXN0b3J5X2lkLCBhc3NlcnRfb2s9M0RUcnVlICkK ICAgICAgICAgcmV0dXJuIGhpc3RvcnlfaWQsIGRhdGFzZXRfaWQKKworICAgIGRlZiBfX2pvYnNf aW5kZXgoIHNlbGYsICoqa3dkcyApOgorICAgICAgICBqb2JzX3Jlc3BvbnNlID0zRCBzZWxmLl9n ZXQoICJqb2JzIiwgKiprd2RzICkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3N0YXR1c19jb2RlX2lz KCBqb2JzX3Jlc3BvbnNlLCAyMDAgKQorICAgICAgICBqb2JzID0zRCBqb2JzX3Jlc3BvbnNlLmpz b24oKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSggam9icywgbGlzdCApCisgICAgICAgIHJl dHVybiBqb2JzCgpkaWZmIC1yIDk1ZTMwNWRiMjliN2ViMDI4YjA5NzYyZDAwYmQzMDVjNGM3ODIz ZTEgLXIgODZkMzkzYmVlMDNlZGJkNTU5MjY1Nzk9CjU3NTZhZTM5M2YwMTA3ZDliIHRlc3QvYmFz ZS9hcGkucHkKLS0tIGEvdGVzdC9iYXNlL2FwaS5weQorKysgYi90ZXN0L2Jhc2UvYXBpLnB5CkBA IC0xMSw2ICsxMSw3IEBACiBmcm9tIC5hcGlfYXNzZXJ0cyBpbXBvcnQgKAogICAgIGFzc2VydF9z dGF0dXNfY29kZV9pcywKICAgICBhc3NlcnRfaGFzX2tleXMsCisgICAgYXNzZXJ0X25vdF9oYXNf a2V5cywKICAgICBhc3NlcnRfZXJyb3JfY29kZV9pcywKICkKPTIwCkBAIC04Myw2ICs4NCw5IEBA CiAgICAgZGVmIF9hc3NlcnRfaGFzX2tleXMoIHNlbGYsIHJlc3BvbnNlLCAqa2V5cyApOgogICAg ICAgICBhc3NlcnRfaGFzX2tleXMoIHJlc3BvbnNlLCAqa2V5cyApCj0yMAorICAgIGRlZiBfYXNz ZXJ0X25vdF9oYXNfa2V5cyggc2VsZiwgcmVzcG9uc2UsICprZXlzICk6CisgICAgICAgIGFzc2Vy dF9ub3RfaGFzX2tleXMoIHJlc3BvbnNlLCAqa2V5cyApCisKICAgICBkZWYgX2Fzc2VydF9lcnJv cl9jb2RlX2lzKCBzZWxmLCByZXNwb25zZSwgZXJyb3JfY29kZSApOgogICAgICAgICBhc3NlcnRf ZXJyb3JfY29kZV9pcyggcmVzcG9uc2UsIGVycm9yX2NvZGUgKQo9MjAKCmRpZmYgLXIgOTVlMzA1 ZGIyOWI3ZWIwMjhiMDk3NjJkMDBiZDMwNWM0Yzc4MjNlMSAtciA4NmQzOTNiZWUwM2VkYmQ1NTky NjU3OT0KNTc1NmFlMzkzZjAxMDdkOWIgdGVzdC9iYXNlL2FwaV9hc3NlcnRzLnB5Ci0tLSBhL3Rl c3QvYmFzZS9hcGlfYXNzZXJ0cy5weQorKysgYi90ZXN0L2Jhc2UvYXBpX2Fzc2VydHMucHkKQEAg LTIwLDYgKzIwLDExIEBACiAgICAgICAgIGFzc2VydCBrZXkgaW4gcmVzcG9uc2UsICJSZXNwb25z ZSBbJXNdIGRvZXMgbm90IGNvbnRhaW4ga2V5IFslc10iID0KJSAoIHJlc3BvbnNlLCBrZXkgKQo9 MjAKPTIwCitkZWYgYXNzZXJ0X25vdF9oYXNfa2V5cyggcmVzcG9uc2UsICprZXlzICk6CisgICAg Zm9yIGtleSBpbiBrZXlzOgorICAgICAgICBhc3NlcnQga2V5IG5vdCBpbiByZXNwb25zZSwgIlJl c3BvbnNlIFslc10gY29udGFpbnMgaW52YWxpZCBrZXkgWyU9CnNdIiAlICggcmVzcG9uc2UsIGtl eSApCisKKwogZGVmIGFzc2VydF9lcnJvcl9jb2RlX2lzKCByZXNwb25zZSwgZXJyb3JfY29kZSAp OgogICAgIGlmIGhhc2F0dHIoIHJlc3BvbnNlLCAianNvbiIgKToKICAgICAgICAgcmVzcG9uc2Ug PTNEIHJlc3BvbnNlLmpzb24oKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5 LWNlbnRyYWwvY29tbWl0cy9lYjIxMGNjYzZkNzYvCkNoYW5nZXNldDogICBlYjIxMGNjYzZkNzYK VXNlcjogICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTQtMTItMTkgMjE6NTY6 MzQrMDA6MDAKU3VtbWFyeTogICAgIFJlZmluaW5nIHRoZSBoZGEgbWFuYWdlciwgc2VyaWFsaXpl ciwgYW5kIGRlLXNlcmlhbGl6ZXI7IHVzaW5nPQogc2FtZSBpbiBoaXN0b3J5IGNvbnRlbnRzIGFu ZCBkYXRhc2V0cyBhcGkKQWZmZWN0ZWQgIzogIDEyIGZpbGVzCgpkaWZmIC1yIDg2ZDM5M2JlZTAz ZWRiZDU1OTI2NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y9 CjQ5ZGJkOGRiMGE0NWQ1YTg4IGxpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQotLS0gYS9saWIv Z2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5 CkBAIC00MDEsNyArNDAxLDggQEAKPTIwCiAgICAgZGVmIHNlcmlhbGl6ZSggc2VsZiwgdHJhbnMs IGl0ZW0sIGtleXMgKToKICAgICAgICAgIyBtYWluIGludGVyZmFjZSBmbiBmb3IgY29udmVydGlu ZyBhIG1vZGVsIHRvIGEgZGljdAotICAgICAgICAjVE9ETzogdHJ5L2NhdGNoIGhlcmU/CisjVE9E TzogdHJ5L2NhdGNoIGhlcmU/IGFkZCBvcHRpb24gJ2ZhaWxfZmFzdCcvJ3JhaXNlJyB0byBhbGxv dyBvcHRpb25hbGx5ID0KKmNhdGNoaW5nKiB0aGUgZXJyb3Igd2l0aG91dCByYWlzaW5nIGl0Cisj ICAgKGFuZCB0aGVuIHJldHVybmluZyB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgc2VyaWFsaXpl ZCBkYXRhKQogICAgICAgICByZXR1cm5lZCA9M0Qge30KICAgICAgICAgZm9yIGtleSBpbiBrZXlz OgogICAgICAgICAgICAgIyBjaGVjayBib3RoIHNlcmlhbGl6ZXJzIGFuZCBzZXJpYWxpemFibGUg a2V5cwpAQCAtNDI1LDkgKzQyNiwyNSBAQAogICAgICAgICBpZCA9M0QgZ2V0YXR0ciggaXRlbSwg a2V5ICkKICAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaWQgKSBpZiBp ZCBpcyBub3QgTm9uZSBlbHNlIE5vbmUKPTIwCisgICAgI1RPRE86IEFubm90YXRhYmxlTWl4aW4K KyAgICBkZWYgc2VyaWFsaXplX2Fubm90YXRpb24oIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToK KyNUT0RPOiB3aGljaCBpcyBjb3JyZWN0IGhlcmU/CisgICAgICAgICN1c2VyID0zRCBpdGVtLnVz ZXIKKyAgICAgICAgdXNlciA9M0QgdHJhbnMudXNlcgorICAgICAgICByZXR1cm4gaXRlbS5nZXRf aXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMuc2Ffc2Vzc2lvbiwgdXNlciwgaXRlbSApCisKKyAg ICAjVE9ETzogVGFnZ2FibGVNaXhpbgorICAgIGRlZiBzZXJpYWxpemVfdGFncyggc2VsZiwgdHJh bnMsIGl0ZW0sIGtleSApOgorI1RPRE86IHdob3NlIHRhZ3MgYXJlIHRoZXNlPworICAgICAgICBy ZXR1cm4gWyB0YWcudXNlcl90bmFtZSArICggJzonICsgdGFnLnVzZXJfdmFsdWUgaWYgdGFnLnVz ZXJfdmFsdWU9CiBlbHNlICcnICkgZm9yIHRhZyBpbiBpdGVtLnRhZ3MgXQorCiAgICAgIyAuLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLj0KLi4uLi4gc2VyaWFsaXppbmcgdG8gYSB2aWV3CiAgICAgIyB3aGVyZSBhIHZpZXcg aXMgYSBwcmVkZWZpZWQgbGlzdCBvZiBrZXlzIHRvIHNlcmlhbGl6ZQogICAgIGRlZiBzZXJpYWxp emVfdG9fdmlldyggc2VsZiwgdHJhbnMsIGl0ZW0sIHZpZXc9M0ROb25lLCBrZXlzPTNETm9uZSAp OgorI1RPRE86IGlmIGtleXMgYW5kIHZpZXcgLSBtdW5nZSB2aWV3IGFuZCBrZXlzCisjICAgIDog aWYga2V5cyBidXQgbm8gdmlldyAtIHVzZSBrZXlzCisjICAgIDogaWYgbm8ga2V5cyBidXQgdmll dyAtIHVzZSB2aWV3CisjICAgIDogaWYgbm8ga2V5cyBhbmQgbm8gdmlldyAtIHVzZSBkZWZhdWx0 IHZpZXcKICAgICAgICAga2V5cyA9M0Qga2V5cyBvciBbXQogICAgICAgICBhbGxfa2V5cyA9M0Qg c2VsZi52aWV3X3RvX2xpc3QoIHZpZXcgKSArIGtleXMKICAgICAgICAgcmV0dXJuIHNlbGYuc2Vy aWFsaXplKCB0cmFucywgaXRlbSwgYWxsX2tleXMgKQpAQCAtNDM5LDYgKzQ1NiwyMCBAQAogICAg ICAgICAgICAgcmFpc2UgTW9kZWxTZXJpYWxpemluZ0Vycm9yKCAndW5rbm93biB2aWV3Jywgdmll dz0zRHZpZXcsIGF2YWk9CmxhYmxlX3ZpZXdzPTNEc2VsZi52aWV3cyApCiAgICAgICAgIHJldHVy biBzZWxmLnZpZXdzWyB2aWV3IF0KPTIwCisgICAgI1RPRE86IHRoaXMgaXMgbW9yZSB1dGlsL2dl bi4gdXNlCisgICAgZGVmIHBsdWNrX2Zyb21fbGlzdCggc2VsZiwgbCwgZWxlbXMgKToKKyAgICAg ICAgIiIiCisgICAgICAgIFJlbW92ZXMgZm91bmQgZWxlbXMgZnJvbSBsaXN0IGwgYW5kIHJldHVy bnMgbGlzdCBvZiBmb3VuZCBlbGVtcyBpZj0KIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAg Zm91bmQgPTNEIFtdCisgICAgICAgIGZvciBlbGVtIGluIGVsZW1zOgorICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIGluZGV4ID0zRCBsLmluZGV4KCBlbGVtICkKKyAgICAgICAgICAg ICAgICBmb3VuZC5hcHBlbmQoIGwucG9wKCBpbmRleCApICkKKyAgICAgICAgICAgIGV4Y2VwdCBW YWx1ZUVycm9yLCB2YWxfZXJyOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJu IGZvdW5kCisKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBhbGlhc2VzCiAgICAgI2RlZiB0b19k aWN0KCBzZWxmLCB0cmFucywgaXRlbSwgdmlldz0zRE5vbmUsIHZpZXdfa2V5cz0zRE5vbmUgKToK ICAgICAjICAgIHZpZXdfa2V5cyA9M0Qgdmlld19rZXlzIG9yIHNlbGYudmlld190b19saXN0KCB2 aWV3ICkKQEAgLTQ5Myw2ICs1MjQsNyBAQAogICAgICAgICByZXR1cm4gdmFsCj0yMAogICAgICNk ZWYgc2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgIyAgICAiIiJ2YWxp ZGF0ZSBzbHVnIiIiCiAgICAgIyAgICBwYXNzCj0yMAo9MjAKCmRpZmYgLXIgODZkMzkzYmVlMDNl ZGJkNTU5MjY1Nzk1NzU2YWUzOTNmMDEwN2Q5YiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZj0K NDlkYmQ4ZGIwYTQ1ZDVhODggbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQotLS0g YS9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zLnB5CisrKyBiL2xpYi9nYWxheHkvbWFu YWdlcnMvY29sbGVjdGlvbnMucHkKQEAgLTcsNiArNyw3IEBACiBmcm9tIGdhbGF4eS5leGNlcHRp b25zIGltcG9ydCBNZXNzYWdlRXhjZXB0aW9uCiBmcm9tIGdhbGF4eS5leGNlcHRpb25zIGltcG9y dCBJdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbgogZnJvbSBnYWxheHkuZXhjZXB0aW9ucyBpbXBv cnQgUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24KK2Zyb20gZ2FsYXh5Lm1hbmFnZXJz IGltcG9ydCBiYXNlCiBmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgaGRhcyAgIyBUT0RPOiBS ZWZhY3RvciBhbGwgbWl4aW4gdXNlIGludG8gbWFuYT0KZ2Vycy4KIGZyb20gZ2FsYXh5Lm1hbmFn ZXJzIGltcG9ydCBoaXN0b3JpZXMKIGZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBsZGRhcwpA QCAtMjQ0LDcgKzI0NSw3IEBACj0yMAogICAgICAgICBpZiBzcmNfdHlwZSA9M0Q9M0QgJ2hkYSc6 CiAgICAgICAgICAgICBkZWNvZGVkX2lkID0zRCBpbnQoIHRyYW5zLmFwcC5zZWN1cml0eS5kZWNv ZGVfaWQoIGVuY29kZWRfaWQgKT0KICkKLSAgICAgICAgICAgIGVsZW1lbnQgPTNEIHNlbGYuaGRh X21hbmFnZXIuZ2V0KCB0cmFucywgZGVjb2RlZF9pZCwgY2hlY2tfb3duPQplcnNoaXA9M0RGYWxz ZSApCisgICAgICAgICAgICBlbGVtZW50ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVf YnlfaWQoIHRyYW5zLCBkZWNvZGVkXz0KaWQsIHRyYW5zLnVzZXIgKQogICAgICAgICBlbGlmIHNy Y190eXBlID0zRD0zRCAnbGRkYSc6CiAgICAgICAgICAgICBlbGVtZW50ID0zRCBzZWxmLmxkZGFf bWFuYWdlci5nZXQoIHRyYW5zLCBlbmNvZGVkX2lkICkKICAgICAgICAgZWxpZiBzcmNfdHlwZSA9 M0Q9M0QgJ2hkY2EnOgpAQCAtMjkzLDMgKzI5NCwxMjIgQEAKICAgICAgICAgICAgIGlmIG5vdCB0 cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQuY2FuX2FjY2Vzc19saWJyYXJ5X2l0ZW0oIHRyYW5zPQou Z2V0X2N1cnJlbnRfdXNlcl9yb2xlcygpLCBjb2xsZWN0aW9uX2luc3RhbmNlLCB0cmFucy51c2Vy ICk6CiAgICAgICAgICAgICAgICAgcmFpc2UgSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb24oICJM aWJyYXJ5RGF0YXNldENvbGxlY3Rpbz0KbkFzc29jaWF0aW9uIGlzIG5vdCBhY2Nlc3NpYmxlIHRv IHRoZSBjdXJyZW50IHVzZXIiLCB0eXBlPTNEJ2Vycm9yJyApCiAgICAgICAgIHJldHVybiBjb2xs ZWN0aW9uX2luc3RhbmNlCisKKworY2xhc3MgRGF0YXNldENvbGxlY3Rpb25TZXJpYWxpemVyKCBi YXNlLk1vZGVsU2VyaWFsaXplciApOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToK KyAgICAgICAgc3VwZXIoIEhEQVNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKKwor ICAgICMgICAgIyBtb3N0IG9mIHRoZXNlIHZpZXdzIGJ1aWxkL2FkZCB0byB0aGUgcHJldmlvdXMg dmlldworICAgICMgICAgc3VtbWFyeV92aWV3ID0zRCBbCisgICAgIyAgICAgICAgJ2lkJywgJ2hp c3RvcnlfaWQnLCAnaGlkJywgJ25hbWUnLCAnZGF0YXNldF9pZCcsCisgICAgIyAgICAgICAgJ3N0 YXRlJywgJ2RlbGV0ZWQnLCAncHVyZ2VkJywgJ3Zpc2libGUnCisgICAgIyAgICBdCisgICAgIyAg ICBkZXRhaWxlZF92aWV3ID0zRCBzdW1tYXJ5X3ZpZXcgKyBbCisgICAgIyAgICAgICAgJ2Ria2V5 JywgJ2luZm8nLCAnYmx1cmInLCAnZXh0ZW5zaW9uJywgJ2NyZWF0ZV90aW1lJywgJ3VwZGF0ZT0K X3RpbWUnLAorICAgICMgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2Np YXRpb25faWQnLCAnY29waWVkX2Zyb21fbGk9CmJyYXJ5X2RhdGFzZXRfZGF0YXNldF9hc3NvY2lh dGlvbl9pZCcsCisgICAgIyAgICAgICAgJ21ldGFkYXRhJywgJ3NpemUnLAorICAgICMgICAgICAg ICNtaXhpbjogYW5ub3RhdGFibGUKKyAgICAjICAgICAgICAnYW5ub3RhdGlvbicsCisgICAgIyAg ICAgICAgI21peGluOiB0YWdnYWJsZQorICAgICMgICAgICAgICd0YWdzJywKKyAgICAjICAgIF0K KyAgICAjICAgIGV4dGVuZGVkX3ZpZXcgPTNEIGRldGFpbGVkX3ZpZXcgKyBbCisgICAgIyAgICAg ICAgI05PVEU6IHNlbmRpbmcgcmF3ICdwZWVrJyAobm90IGdldF9kaXNwbGF5X3BlZWspCisgICAg IyAgICAgICAgJ3BlZWsnLAorICAgICMgICAgICAgICd0b29sX3ZlcnNpb24nLCAncGFyZW50X2lk JywgJ2Rlc2lnbmF0aW9uJywKKyAgICAjICAgIF0KKyAgICAjCisgICAgIyAgICBzZWxmLnNlcmlh bGl6YWJsZV9rZXlzID0zRCBleHRlbmRlZF92aWV3ICsgWworICAgICMgICAgICAgICdkaXNwbGF5 X2FwcHMnLAorICAgICMgICAgICAgICdkaXNwbGF5X3R5cGVzJywKKyAgICAjICAgICAgICAndmlz dWFsaXphdGlvbnMnCisgICAgIyAgICBdCisgICAgIyAgICBzZWxmLnZpZXdzID0zRCB7CisgICAg IyAgICAgICAgJ3N1bW1hcnknICAgOiBzdW1tYXJ5X3ZpZXcsCisgICAgIyAgICAgICAgJ2RldGFp bGVkJyAgOiBkZXRhaWxlZF92aWV3LAorICAgICMgICAgICAgICdleHRlbmRlZCcgIDogZXh0ZW5k ZWRfdmlldywKKyAgICAjICAgIH0KKyAgICAjICAgIHNlbGYuZGVmYXVsdF92aWV3ID0zRCAnc3Vt bWFyeScKKyAgICAjCisgICAgI2RlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAjICAg IHNlbGYuc2VyaWFsaXplcnMudXBkYXRlKHsKKyAgICAjICAgICAgICAnaWQnICAgICAgICAgICAg OiBzZWxmLnNlcmlhbGl6ZV9pZCwKKyAgICAjICAgICAgICAnaGlzdG9yeV9pZCcgICAgOiBzZWxm LnNlcmlhbGl6ZV9pZCwKKyAgICAjICAgICAgICAnZGF0YXNldF9pZCcgICAgOiBzZWxmLnNlcmlh bGl6ZV9pZCwKKyAgICAjCisgICAgIyAgICAgICAgJ2NyZWF0ZV90aW1lJyAgIDogc2VsZi5zZXJp YWxpemVfZGF0ZSwKKyAgICAjICAgICAgICAndXBkYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlhbGl6 ZV9kYXRlLAorICAgICMgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2Np YXRpb25faWQnICAgICAgICA6IHNlbGYuc2U9CnJpYWxpemVfaWQsCisgICAgIyAgICAgICAgJ2Nv cGllZF9mcm9tX2xpYnJhcnlfZGF0YXNldF9kYXRhc2V0X2Fzc29jaWF0aW9uX2lkJzogc2VsZi5z ZT0KcmlhbGl6ZV9pZCwKKyAgICAjCisgICAgIyAgICAgICAgJ21ldGFkYXRhJyAgICAgIDogc2Vs Zi5zZXJpYWxpemVfbWV0YWRhdGEsCisgICAgIyAgICAgICAgJ3NpemUnICAgICAgICAgIDogbGFt YmRhIHQsIGksIGs6IGludCggaS5nZXRfc2l6ZSgpICksCisgICAgIyAgICAgICAgJ25pY2Vfc2l6 ZScgICAgIDogbGFtYmRhIHQsIGksIGs6IGkuZ2V0X3NpemUoIG5pY2Vfc2l6ZT0zRFRydT0KZSAp LAorICAgICMKKyAgICAjICAgICAgICAncGFyZW50X2lkJyAgICAgOiBzZWxmLnNlcmlhbGl6ZV9p ZCwKKyAgICAjICAgICAgICAjVE9ETzogdG8gbWl4aW46IGFubm90YXRhYmxlCisgICAgIyAgICAg ICAgJ2Fubm90YXRpb24nICAgIDogbGFtYmRhIHQsIGksIGs6IGkuZ2V0X2l0ZW1fYW5ub3RhdGlv bl9zdHIoID0KdC5zYV9zZXNzaW9uLCB0LnVzZXIsIGkgKSwKKyAgICAjICAgICAgICAjVE9ETzog dG8gbWl4aW46IHRhZ2dhYmxlCisgICAgIyAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogbGFtYmRh IHQsIGksIGs6IFsgdGFnLnVzZXJfdG5hbWUgKyAoICc6JyArID0KdGFnLnVzZXJfdmFsdWUgaWYg dGFnLnVzZXJfdmFsdWUgZWxzZSAnJyApCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBpLnRhZ3MgXSwKKyAgICAjICAgIH0pCisKKyNk ZWYgZGljdGlmeV9kYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UoIGRhdGFzZXRfY29sbGVjdGlv bl9pbnN0YW5jZSwgcGFyPQplbnQsIHNlY3VyaXR5LCB2aWV3PTNEImVsZW1lbnQiICk6CisjICAg IGRpY3RfdmFsdWUgPTNEIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZS50b19kaWN0KCB2aWV3 PTNEdmlldyApCisjICAgIGVuY29kZWRfaWQgPTNEIHNlY3VyaXR5LmVuY29kZV9pZCggZGF0YXNl dF9jb2xsZWN0aW9uX2luc3RhbmNlLmlkICkKKyMgICAgaWYgaXNpbnN0YW5jZSggcGFyZW50LCBt b2RlbC5IaXN0b3J5ICk6CisjICAgICAgICBlbmNvZGVkX2hpc3RvcnlfaWQgPTNEIHNlY3VyaXR5 LmVuY29kZV9pZCggcGFyZW50LmlkICkKKyMgICAgICAgIGRpY3RfdmFsdWVbICd1cmwnIF0gPTNE IHdlYi51cmxfZm9yKCAnaGlzdG9yeV9jb250ZW50X3R5cGVkJywgaGlzPQp0b3J5X2lkPTNEZW5j b2RlZF9oaXN0b3J5X2lkLCBpZD0zRGVuY29kZWRfaWQsIHR5cGU9M0QiZGF0YXNldF9jb2xsZWN0 aW9uIiApCisjICAgIGVsaWYgaXNpbnN0YW5jZSggcGFyZW50LCBtb2RlbC5MaWJyYXJ5Rm9sZGVy ICk6CisjICAgICAgICBlbmNvZGVkX2xpYnJhcnlfaWQgPTNEIHNlY3VyaXR5LmVuY29kZV9pZCgg cGFyZW50LmxpYnJhcnkuaWQgKQorIyAgICAgICAgZW5jb2RlZF9mb2xkZXJfaWQgPTNEIHNlY3Vy aXR5LmVuY29kZV9pZCggcGFyZW50LmlkICkKKyMgICAgICAgICMgVE9ETzogV29yayBpbiBwcm9n cmVzcyAtIHRoaXMgZW5kLXBvaW50IGlzIG5vdCByaWdodCB5ZXQuLi4KKyMgICAgICAgIGRpY3Rf dmFsdWVbICd1cmwnIF0gPTNEIHdlYi51cmxfZm9yKCAnbGlicmFyeV9jb250ZW50JywgbGlicmFy eV9pPQpkPTNEZW5jb2RlZF9saWJyYXJ5X2lkLCBpZD0zRGVuY29kZWRfaWQsIGZvbGRlcl9pZD0z RGVuY29kZWRfZm9sZGVyX2lkICkKKyMgICAgaWYgdmlldyA9M0Q9M0QgImVsZW1lbnQiOgorIyAg ICAgICAgZGljdF92YWx1ZVsgJ2VsZW1lbnRzJyBdID0zRCBtYXAoIGRpY3RpZnlfZWxlbWVudCwg ZGF0YXNldF9jb2xsZWM9CnRpb25faW5zdGFuY2UuY29sbGVjdGlvbi5lbGVtZW50cyApCisjICAg IHNlY3VyaXR5LmVuY29kZV9hbGxfaWRzKCBkaWN0X3ZhbHVlLCByZWN1cnNpdmU9M0RUcnVlICkg ICMgVE9ETzogVXNlID0KS3lsZSdzIHJlY3Vzcml2ZSBmb3JtdWxhdGlvbiBvZiB0aGlzLgorIyAg ICByZXR1cm4gZGljdF92YWx1ZQorIworIworI2RlZiBkaWN0aWZ5X2VsZW1lbnQoIGVsZW1lbnQg KToKKyMgICAgZGljdGlmaWVkID0zRCBlbGVtZW50LnRvX2RpY3QoIHZpZXc9M0QiZWxlbWVudCIg KQorIyAgICBvYmplY3RfZGV0aWFscyA9M0QgZWxlbWVudC5lbGVtZW50X29iamVjdC50b19kaWN0 KCkKKyMgICAgaWYgZWxlbWVudC5jaGlsZF9jb2xsZWN0aW9uOgorIyAgICAgICAgIyBSZWN1cnNp dmVseSB5aWVsZCBlbGVtZW50cyBmb3IgZWFjaCBuZXN0ZWQgY29sbGVjdGlvbi4uLgorIyAgICAg ICAgb2JqZWN0X2RldGlhbHNbICJlbGVtZW50cyIgXSA9M0QgbWFwKCBkaWN0aWZ5X2VsZW1lbnQs IGVsZW1lbnQuY2g9CmlsZF9jb2xsZWN0aW9uLmVsZW1lbnRzICkKKyMKKyMgICAgZGljdGlmaWVk WyAib2JqZWN0IiBdID0zRCBvYmplY3RfZGV0aWFscworIyAgICByZXR1cm4gZGljdGlmaWVkCisj CisjICAgIGRlZiBzZXJpYWxpemVfbWV0YWRhdGEoIHNlbGYsIHRyYW5zLCBoZGEsIGtleSApOgor IyAgICAgICAgbm90X2luY2x1ZGVkID0zRCBbICdkYmtleScgXQorIyAgICAgICAgbWQgPTNEIHt9 CisjICAgICAgICBmb3IgbmFtZSwgc3BlYyBpbiBoZGEubWV0YWRhdGEuc3BlYy5pdGVtcygpOgor IyAgICAgICAgICAgIGlmIG5hbWUgaW4gbm90X2luY2x1ZGVkOgorIyAgICAgICAgICAgICAgICBj b250aW51ZQorIyAgICAgICAgICAgIHZhbCA9M0QgaGRhLm1ldGFkYXRhLmdldCggbmFtZSApCisj ICAgICAgICAgICAgI05PVEU6IG5vIGZpbGVzCisjICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSgg dmFsLCBtb2RlbC5NZXRhZGF0YUZpbGUgKToKKyMgICAgICAgICAgICAgICAgY29udGludWUKKyMg ICAgICAgICAgICAjVE9ETzo/IHBvc3NpYmx5IHNwbGl0IHRoaXMgb2ZmPworIyAgICAgICAgICAg ICMgSWYgbm8gdmFsdWUgZm9yIG1ldGFkYXRhLCBsb29rIGluIGRhdGF0eXBlIGZvciBtZXRhZGF0 YS4KKyMgICAgICAgICAgICBlbGlmIHZhbCBpcyBOb25lIGFuZCBoYXNhdHRyKCBoZGEuZGF0YXR5 cGUsIG5hbWUgKToKKyMgICAgICAgICAgICAgICAgdmFsID0zRCBnZXRhdHRyKCBoZGEuZGF0YXR5 cGUsIG5hbWUgKQorIyAgICAgICAgICAgIG1kWyBuYW1lIF0gPTNEIHZhbAorIworIyAgICAgICAg cmV0dXJuIG1kCisKKyAgICAjZGVmIGFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgIyAg ICBzZWxmLmRlc2VyaWFsaXplcnMudXBkYXRlKHsKKyAgICAjICAgICAgICAnbmFtZScgICAgICAg ICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jhc2VzdHJpbmcsCisgICAgIyAgICAgICAgJ2dlbm9tZV9i dWlsZCcgIDogc2VsZi5kZXNlcmlhbGl6ZV9nZW5vbWVfYnVpbGQsCisgICAgIyAgICAgICAgJ2Rl bGV0ZWQnICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9ib29sLAorICAgICMgICAgICAgICdwdWJs aXNoZWQnICAgICA6IHNlbGYuZGVzZXJpYWxpemVfYm9vbCwKKyAgICAjICAgICAgICAjVE9ETzog dG8gbWl4aW46IGFubm90YXRhYmxlCisgICAgIyAgICAgICAgIydhbm5vdGF0aW9uJyAgICA6IHNl bGYuZGVzZXJpYWxpemVfYW5ub3RhdGlvbiwKKyAgICAjICAgICAgICAjVE9ETzogdG8gbWl4aW46 IHRhZ2dhYmxlCisgICAgIyAgICAgICAgIyd0YWdzJyAgICAgICAgICA6IGxhbWJkYSB0LCBpLCBr LCB2OiAsCisgICAgIyAgICB9KQorICAgICMgICAgc2VsZi5kZXNlcmlhbGl6YWJsZV9rZXlzID0z RCBzZWxmLmRlc2VyaWFsaXplcnMua2V5cygpCgpkaWZmIC1yIDg2ZDM5M2JlZTAzZWRiZDU1OTI2 NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y9CjQ5ZGJkOGRi MGE0NWQ1YTg4IGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnNfdXRpbC5weQotLS0gYS9s aWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zX3V0aWwucHkKKysrIGIvbGliL2dhbGF4eS9t YW5hZ2Vycy9jb2xsZWN0aW9uc191dGlsLnB5CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgICAg ICB2YWxpZGF0ZV9pbnB1dF9lbGVtZW50X2lkZW50aWZpZXJzKCBlbGVtZW50X2lkZW50aWZpZXJb ICJlbGVtZT0KbnRfaWRlbnRpZmllcnMiIF0gKQo9MjAKPTIwCi1kZWYgZGljdGlmeV9kYXRhc2V0 X2NvbGxlY3Rpb25faW5zdGFuY2UoIGRhdGFzZXRfY29sbGVjaXRvbl9pbnN0YW5jZSwgcGFyZT0K bnQsIHNlY3VyaXR5LCB2aWV3PTNEImVsZW1lbnQiICk6Ci0gICAgZGljdF92YWx1ZSA9M0QgZGF0 YXNldF9jb2xsZWNpdG9uX2luc3RhbmNlLnRvX2RpY3QoIHZpZXc9M0R2aWV3ICkKLSAgICBlbmNv ZGVkX2lkID0zRCBzZWN1cml0eS5lbmNvZGVfaWQoIGRhdGFzZXRfY29sbGVjaXRvbl9pbnN0YW5j ZS5pZCApCitkZWYgZGljdGlmeV9kYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UoIGRhdGFzZXRf Y29sbGVjdGlvbl9pbnN0YW5jZSwgcGFyZT0KbnQsIHNlY3VyaXR5LCB2aWV3PTNEImVsZW1lbnQi ICk6CisgICAgZGljdF92YWx1ZSA9M0QgZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLnRvX2Rp Y3QoIHZpZXc9M0R2aWV3ICkKKyAgICBlbmNvZGVkX2lkID0zRCBzZWN1cml0eS5lbmNvZGVfaWQo IGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZS5pZCApCiAgICAgaWYgaXNpbnN0YW5jZSggcGFy ZW50LCBtb2RlbC5IaXN0b3J5ICk6CiAgICAgICAgIGVuY29kZWRfaGlzdG9yeV9pZCA9M0Qgc2Vj dXJpdHkuZW5jb2RlX2lkKCBwYXJlbnQuaWQgKQogICAgICAgICBkaWN0X3ZhbHVlWyAndXJsJyBd ID0zRCB3ZWIudXJsX2ZvciggJ2hpc3RvcnlfY29udGVudF90eXBlZCcsIGhpc3Q9Cm9yeV9pZD0z RGVuY29kZWRfaGlzdG9yeV9pZCwgaWQ9M0RlbmNvZGVkX2lkLCB0eXBlPTNEImRhdGFzZXRfY29s bGVjdGlvbiIgKQpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAjIFRPRE86IFdvcmsgaW4gcHJv Z3Jlc3MgLSB0aGlzIGVuZC1wb2ludCBpcyBub3QgcmlnaHQgeWV0Li4uCiAgICAgICAgIGRpY3Rf dmFsdWVbICd1cmwnIF0gPTNEIHdlYi51cmxfZm9yKCAnbGlicmFyeV9jb250ZW50JywgbGlicmFy eV9pZD0KPTNEZW5jb2RlZF9saWJyYXJ5X2lkLCBpZD0zRGVuY29kZWRfaWQsIGZvbGRlcl9pZD0z RGVuY29kZWRfZm9sZGVyX2lkICkKICAgICBpZiB2aWV3ID0zRD0zRCAiZWxlbWVudCI6Ci0gICAg ICAgIGRpY3RfdmFsdWVbICdlbGVtZW50cycgXSA9M0QgbWFwKCBkaWN0aWZ5X2VsZW1lbnQsIGRh dGFzZXRfY29sbGVjaT0KdG9uX2luc3RhbmNlLmNvbGxlY3Rpb24uZWxlbWVudHMgKQorICAgICAg ICBkaWN0X3ZhbHVlWyAnZWxlbWVudHMnIF0gPTNEIG1hcCggZGljdGlmeV9lbGVtZW50LCBkYXRh c2V0X2NvbGxlY3Q9Cmlvbl9pbnN0YW5jZS5jb2xsZWN0aW9uLmVsZW1lbnRzICkKICAgICBzZWN1 cml0eS5lbmNvZGVfYWxsX2lkcyggZGljdF92YWx1ZSwgcmVjdXJzaXZlPTNEVHJ1ZSApICAjIFRP RE86IFVzZSBLPQp5bGUncyByZWN1c3JpdmUgZm9ybXVsYXRpb24gb2YgdGhpcy4KICAgICByZXR1 cm4gZGljdF92YWx1ZQo9MjAKCmRpZmYgLXIgODZkMzkzYmVlMDNlZGJkNTU5MjY1Nzk1NzU2YWUz OTNmMDEwN2Q5YiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZj0KNDlkYmQ4ZGIwYTQ1ZDVhODgg bGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJz L2RhdGFzZXRzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKQEAgLTky LDYgKzkyLDkgQEAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3MgRGF0YXNldEFzc29jaWF0aW9uTWFu YWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2UuQWNjZXNzaWJsZU1vZGVsSW49CnRlcmZhY2Us IGJhc2UuUHVyZ2FibGVNb2RlbEludGVyZmFjZSApOgorICAgICMgQSBkYXRhc2V0IGFzc29jaWF0 aW9uIEhBUyBhIGRhdGFzZXQgYnV0IGNvbnRhaW5zIG1ldGFkYXRhIHNwZWNpZmljIHQ9Cm8gYSBs aWJyYXJ5IChsZGEpIG9yIHVzZXIgKGhkYSkKKyAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuRGF0 YXNldEluc3RhbmNlCisgICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2RlbC5EYXRhc2V0LmNy ZWF0ZV90aW1lLCApCj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAg IHN1cGVyKCBEYXRhc2V0QXNzb2NpYXRpb25NYW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCAp CkBAIC0xMDAsMyArMTAzLDkgQEAKICAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMs IGRhdGFzZXRfYXNzb2MsIHVzZXIgKToKICAgICAgICAgIyBkZWZlciB0byB0aGUgZGF0YXNldAog ICAgICAgICByZXR1cm4gc2VsZi5kYXRhc2V0X21nci5pc19hY2Nlc3NpYmxlKCB0cmFucywgZGF0 YXNldF9hc3NvYy5kYXRhc2U9CnQsIHVzZXIgKQorCisgICAgZGVmIG1ldGFkYXRhKCBzZWxmLCB0 cmFucywgZGF0YXNldF9hc3NvYyApOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaXNfYmVpbmdf dXNlZCggc2VsZiwgdHJhbnMsIGRhdGFzZXRfYXNzb2MgKToKKyAgICAgICAgcGFzcwoKZGlmZiAt ciA4NmQzOTNiZWUwM2VkYmQ1NTkyNjU3OTU3NTZhZTM5M2YwMTA3ZDliIC1yIGViMjEwY2NjNmQ3 NjU0N2VjYTY5YTNmPQo0OWRiZDhkYjBhNDVkNWE4OCBsaWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMu cHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFu YWdlcnMvaGRhcy5weQpAQCAtNCw2ICs0LDggQEAKIEhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25z IChIREFzKSBhcmUgZGF0YXNldHMgY29udGFpbmVkIG9yIGNyZWF0ZWQgaW4gYQogaGlzdG9yeS4K ICIiIgoraW1wb3J0IGdldHRleHQKKwogZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCiBmcm9tIGdh bGF4eSBpbXBvcnQgZXhjZXB0aW9ucwo9MjAKQEAgLTExMSw5MyArMTEzLDY0IEBACj0yMAogICAg ICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi49Ci4uLi4uIHNlcmlhbGl6YXRpb24KICAgICAjVE9ETzogbW92ZSBpbnRv IHNlcmlhbGl6ZXIgYmVsb3cKLSAgICBkZWYgZ2V0X2hkYV9kaWN0KCBzZWxmLCB0cmFucywgaGRh ICk6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm4gZnVsbCBkZXRhaWxzIG9mIHRoaXMgSERB IGluIGRpY3Rpb25hcnkgZm9ybS4KLSAgICAgICAgIiIiCi0gICAgICAgICNwcmVjb25kaXRpb246 IHRoZSB1c2VyJ3MgYWNjZXNzIHRvIHRoaXMgaGRhIGhhcyBhbHJlYWR5IGJlZW4gY2hlYz0Ka2Vk Ci0gICAgICAgICNUT0RPOj8/IHBvc3Rjb25kaXRpb246IGFsbCBpZHMgYXJlIGVuY29kZWQgKGlz IHRoaXMgcmVhbGx5IHdoYXQgdz0KZSB3YW50IGF0IHRoaXMgbGV2ZWw/KQotICAgICAgICBleHBv c2VfZGF0YXNldF9wYXRoID0zRCB0cmFucy51c2VyX2lzX2FkbWluKCkgb3IgdHJhbnMuYXBwLmNv bmZpZy49CmV4cG9zZV9kYXRhc2V0X3BhdGgKLSAgICAgICAgaGRhX2RpY3QgPTNEIGhkYS50b19k aWN0KCB2aWV3PTNEJ2VsZW1lbnQnLCBleHBvc2VfZGF0YXNldF9wYXRoPTNEPQpleHBvc2VfZGF0 YXNldF9wYXRoICkKLSAgICAgICAgaGRhX2RpY3RbICdhcGlfdHlwZScgXSA9M0QgImZpbGUiCi0K LSAgICAgICAgIyBBZGQgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRoYXQgZGVwZW5kIG9uIHRyYW5z IG11c3QgYmUgYWRkZWQgaGVyPQplIHJhdGhlciB0aGFuIGF0IHRoZSBtb2RlbCBsZXZlbC4KLSAg ICAgICAgY2FuX2FjY2Vzc19oZGEgPTNEIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNj ZXNzX2RhdGFzZXQoIHRyPQphbnMuZ2V0X2N1cnJlbnRfdXNlcl9yb2xlcygpLCBoZGEuZGF0YXNl dCApCi0gICAgICAgIGNhbl9hY2Nlc3NfaGRhID0zRCAoIHRyYW5zLnVzZXJfaXNfYWRtaW4oKSBv ciBjYW5fYWNjZXNzX2hkYSApCi0gICAgICAgIGlmIG5vdCBjYW5fYWNjZXNzX2hkYToKLSAgICAg ICAgICAgIHJldHVybiBzZWxmLmdldF9pbmFjY2Vzc2libGVfaGRhX2RpY3QoIHRyYW5zLCBoZGEg KQotICAgICAgICBoZGFfZGljdFsgJ2FjY2Vzc2libGUnIF0gPTNEIFRydWUKLQotICAgICAgICAj VE9ETzogSSdtIHVuY2xlYXIgYXMgdG8gd2hpY2ggYWNjZXNzIHBhdHRlcm4gaXMgcmlnaHQKLSAg ICAgICAgaGRhX2RpY3RbICdhbm5vdGF0aW9uJyBdID0zRCBoZGEuZ2V0X2l0ZW1fYW5ub3RhdGlv bl9zdHIoIHRyYW5zLnNhPQpfc2Vzc2lvbiwgaGRhLmhpc3RvcnkudXNlciwgaGRhICkKLSAgICAg ICAgI2Fubm90YXRpb24gPTNEIGdldGF0dHIoIGhkYSwgJ2Fubm90YXRpb24nLCBoZGEuZ2V0X2l0 ZW1fYW5ub3RhdGlvPQpuX3N0ciggdHJhbnMuc2Ffc2Vzc2lvbiwgdHJhbnMudXNlciwgaGRhICkg KQotCi0gICAgICAgICMgLS0tLSByZXR1cm4gaGVyZSBpZiBkZWxldGVkIEFORCBwdXJnZWQgT1Ig Y2FuJ3QgYWNjZXNzCi0gICAgICAgIHB1cmdlZCA9M0QgKCBoZGEucHVyZ2VkIG9yIGhkYS5kYXRh c2V0LnB1cmdlZCApCi0gICAgICAgIGlmICggaGRhLmRlbGV0ZWQgYW5kIHB1cmdlZCApOgotICAg ICAgICAgICAgI1RPRE86IHRvX2RpY3Qgc2hvdWxkIHJlYWxseSBnbyBBRlRFUiB0aGlzIC0gb25s eSBzdW1tYXJ5IGRhdGEKLSAgICAgICAgICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVf ZGljdF9pZHMoIGhkYV9kaWN0ICkKLQotICAgICAgICBpZiBleHBvc2VfZGF0YXNldF9wYXRoOgot ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGhkYV9kaWN0WyAnZmlsZV9uYW1lJyBd ID0zRCBoZGEuZmlsZV9uYW1lCi0gICAgICAgICAgICBleGNlcHQgb2JqZWN0c3RvcmUuT2JqZWN0 Tm90Rm91bmQ6Ci0gICAgICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ29iamVjdHN0b3JlLk9i amVjdE5vdEZvdW5kLCBIREEgJXMuJywgaGRhLj0KaWQgKQotCi0gICAgICAgIGhkYV9kaWN0WyAn ZG93bmxvYWRfdXJsJyBdID0zRCBnYWxheHkud2ViLnVybF9mb3IoICdoaXN0b3J5X2NvbnRlbj0K dHNfZGlzcGxheScsCi0gICAgICAgICAgICBoaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5l bmNvZGVfaWQoIGhkYS5oaXN0b3J5LmlkICksCi0gICAgICAgICAgICBoaXN0b3J5X2NvbnRlbnRf aWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkgKQotCi0gICAgICAgICMg aW5kZWNlcywgYXNzb2MuIG1ldGFkYXRhIGZpbGVzLCBldGMuCi0gICAgICAgIG1ldGFfZmlsZXMg PTNEIFtdCi0gICAgICAgIGZvciBtZXRhX3R5cGUgaW4gaGRhLm1ldGFkYXRhLnNwZWMua2V5cygp OgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSggaGRhLm1ldGFkYXRhLnNwZWNbIG1ldGFfdHlw ZSBdLnBhcmFtLCBnYWxheHkuZGE9CnRhdHlwZXMubWV0YWRhdGEuRmlsZVBhcmFtZXRlciApOgot ICAgICAgICAgICAgICAgIG1ldGFfZmlsZXMuYXBwZW5kKCBkaWN0KCBmaWxlX3R5cGU9M0RtZXRh X3R5cGUgKSApCi0gICAgICAgIGlmIG1ldGFfZmlsZXM6Ci0gICAgICAgICAgICBoZGFfZGljdFsg J21ldGFfZmlsZXMnIF0gPTNEIG1ldGFfZmlsZXMKLQotICAgICAgICAjIGN1cnJlbnRseSwgdGhl IHZpeiByZWcgaXMgb3B0aW9uYWwgLSBoYW5kbGUgb24vb2ZmCi0gICAgICAgIGlmIHRyYW5zLmFw cC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKLSAgICAgICAgICAgIGhkYV9kaWN0WyAndmlzdWFs aXphdGlvbnMnIF0gPTNEIHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpPQpzdHJ5LmdldF92 aXN1YWxpemF0aW9ucyggdHJhbnMsIGhkYSApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBo ZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCBoZGEuZ2V0X3Zpc3VhbGl6YXRpb25zKCkK LSAgICAgICAgI1RPRE86IGl0IG1heSBhbHNvIGJlIHdpc2VyIHRvIHJlbW92ZSBmcm9tIGhlcmUg YW5kIGFkZCBhcyBBUEkgY2FsPQpsIHRoYXQgbG9hZHMgdGhlIHZpc3VhbGl6YXRpb25zCi0gICAg ICAgICMgICAgICAgICAgIHdoZW4gdGhlIHZpc3VhbGl6YXRpb25zIGJ1dHRvbiBpcyBjbGlja2Vk IChpbnN0ZWFkIG9mID0KcHJlbG9hZGluZy9wcmUtY2hlY2tpbmcpCi0KLSAgICAgICAgIyAtLS0t IHJldHVybiBoZXJlIGlmIGRlbGV0ZWQKLSAgICAgICAgaWYgaGRhLmRlbGV0ZWQgYW5kIG5vdCBw dXJnZWQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRz KCBoZGFfZGljdCApCi0KLSAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0 X2lkcyggaGRhX2RpY3QgKQotCi0gICAgZGVmIGdldF9pbmFjY2Vzc2libGVfaGRhX2RpY3QoIHNl bGYsIHRyYW5zLCBoZGEgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0cnVuY2F0ZWQg c2VyaWFsaXphdGlvbiBvZiBIREEgd2hlbiBpbmFjY2Vzc2libGUgdG8gdXNlci4KLSAgICAgICAg IiIiCi0gICAgICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoewotICAg ICAgICAgICAgJ2lkJyAgICAgICAgOiBoZGEuaWQsCi0gICAgICAgICAgICAnaGlzdG9yeV9pZCc6 IGhkYS5oaXN0b3J5LmlkLAotICAgICAgICAgICAgJ2hpZCcgICAgICAgOiBoZGEuaGlkLAotICAg ICAgICAgICAgJ25hbWUnICAgICAgOiBoZGEubmFtZSwKLSAgICAgICAgICAgICdzdGF0ZScgICAg IDogaGRhLnN0YXRlLAotICAgICAgICAgICAgJ2RlbGV0ZWQnICAgOiBoZGEuZGVsZXRlZCwKLSAg ICAgICAgICAgICd2aXNpYmxlJyAgIDogaGRhLnZpc2libGUsCi0gICAgICAgICAgICAnYWNjZXNz aWJsZSc6IEZhbHNlCi0gICAgICAgIH0pCi0KLSAgICBkZWYgZ2V0X2hkYV9kaWN0X3dpdGhfZXJy b3IoIHNlbGYsIHRyYW5zLCBoZGE9M0ROb25lLCBoaXN0b3J5X2lkPTNETm9uPQplLCBpZD0zRE5v bmUsIGVycm9yX21zZz0zRCdFcnJvcicgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0 cnVuY2F0ZWQgc2VyaWFsaXphdGlvbiBvZiBIREEgd2hlbiBlcnJvciByYWlzZWQgZ2V0dGluZwot ICAgICAgICBkZXRhaWxzLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3Vy aXR5LmVuY29kZV9kaWN0X2lkcyh7Ci0gICAgICAgICAgICAnaWQnICAgICAgICA6IGhkYS5pZCBp ZiBoZGEgZWxzZSBpZCwKLSAgICAgICAgICAgICdoaXN0b3J5X2lkJzogaGRhLmhpc3RvcnkuaWQg aWYgaGRhIGVsc2UgaGlzdG9yeV9pZCwKLSAgICAgICAgICAgICdoaWQnICAgICAgIDogaGRhLmhp ZCBpZiBoZGEgZWxzZSAnKHVua25vd24pJywKLSAgICAgICAgICAgICduYW1lJyAgICAgIDogaGRh Lm5hbWUgaWYgaGRhIGVsc2UgJyh1bmtub3duKScsCi0gICAgICAgICAgICAnZXJyb3InICAgICA6 IGVycm9yX21zZywKLSAgICAgICAgICAgICdzdGF0ZScgICAgIDogdHJhbnMubW9kZWwuRGF0YXNl dC5zdGF0ZXMuTkVXCi0gICAgICAgIH0pCisgICAgI2RlZiBnZXRfaGRhX2RpY3QoIHNlbGYsIHRy YW5zLCBoZGEgKToKKyAgICAjICAgICIiIgorICAgICMgICAgUmV0dXJuIGZ1bGwgZGV0YWlscyBv ZiB0aGlzIEhEQSBpbiBkaWN0aW9uYXJ5IGZvcm0uCisgICAgIyAgICAiIiIKKyAgICAjICAgICNw cmVjb25kaXRpb246IHRoZSB1c2VyJ3MgYWNjZXNzIHRvIHRoaXMgaGRhIGhhcyBhbHJlYWR5IGJl ZW4gY2hlPQpja2VkCisgICAgIyAgICAjVE9ETzo/PyBwb3N0Y29uZGl0aW9uOiBhbGwgaWRzIGFy ZSBlbmNvZGVkIChpcyB0aGlzIHJlYWxseSB3aGF0ID0Kd2Ugd2FudCBhdCB0aGlzIGxldmVsPykK KyAgICAjICAgIGV4cG9zZV9kYXRhc2V0X3BhdGggPTNEIHRyYW5zLnVzZXJfaXNfYWRtaW4oKSBv ciB0cmFucy5hcHAuY29uZmlnPQouZXhwb3NlX2RhdGFzZXRfcGF0aAorICAgICMgICAgaGRhX2Rp Y3QgPTNEIGhkYS50b19kaWN0KCB2aWV3PTNEJ2VsZW1lbnQnLCBleHBvc2VfZGF0YXNldF9wYXRo PQo9M0RleHBvc2VfZGF0YXNldF9wYXRoICkKKyAgICAjICAgIGhkYV9kaWN0WyAnYXBpX3R5cGUn IF0gPTNEICJmaWxlIgorICAgICMKKyAgICAjICAgICMgQWRkIGFkZGl0aW9uYWwgYXR0cmlidXRl cyB0aGF0IGRlcGVuZCBvbiB0cmFucyBtdXN0IGJlIGFkZGVkIGhlPQpyZSByYXRoZXIgdGhhbiBh dCB0aGUgbW9kZWwgbGV2ZWwuCisgICAgIyAgICBjYW5fYWNjZXNzX2hkYSA9M0QgdHJhbnMuYXBw LnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggdD0KcmFucy5nZXRfY3VycmVudF91 c2VyX3JvbGVzKCksIGhkYS5kYXRhc2V0ICkKKyAgICAjICAgIGNhbl9hY2Nlc3NfaGRhID0zRCAo IHRyYW5zLnVzZXJfaXNfYWRtaW4oKSBvciBjYW5fYWNjZXNzX2hkYSApCisgICAgIyAgICBpZiBu b3QgY2FuX2FjY2Vzc19oZGE6CisgICAgIyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2luYWNjZXNz aWJsZV9oZGFfZGljdCggdHJhbnMsIGhkYSApCisgICAgIyAgICBoZGFfZGljdFsgJ2FjY2Vzc2li bGUnIF0gPTNEIFRydWUKKyAgICAjCisgICAgIyAgICAjVE9ETzogSSdtIHVuY2xlYXIgYXMgdG8g d2hpY2ggYWNjZXNzIHBhdHRlcm4gaXMgcmlnaHQKKyAgICAjICAgIGhkYV9kaWN0WyAnYW5ub3Rh dGlvbicgXSA9M0QgaGRhLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCB0cmFucy5zPQphX3Nlc3Np b24sIGhkYS5oaXN0b3J5LnVzZXIsIGhkYSApCisgICAgIyAgICAjYW5ub3RhdGlvbiA9M0QgZ2V0 YXR0ciggaGRhLCAnYW5ub3RhdGlvbicsIGhkYS5nZXRfaXRlbV9hbm5vdGF0aT0Kb25fc3RyKCB0 cmFucy5zYV9zZXNzaW9uLCB0cmFucy51c2VyLCBoZGEgKSApCisgICAgIworICAgICMgICAgIyAt LS0tIHJldHVybiBoZXJlIGlmIGRlbGV0ZWQgQU5EIHB1cmdlZCBPUiBjYW4ndCBhY2Nlc3MKKyAg ICAjICAgIHB1cmdlZCA9M0QgKCBoZGEucHVyZ2VkIG9yIGhkYS5kYXRhc2V0LnB1cmdlZCApCisg ICAgIyAgICBpZiAoIGhkYS5kZWxldGVkIGFuZCBwdXJnZWQgKToKKyAgICAjICAgICAgICAjVE9E TzogdG9fZGljdCBzaG91bGQgcmVhbGx5IGdvIEFGVEVSIHRoaXMgLSBvbmx5IHN1bW1hcnkgZGF0 YQorICAgICMgICAgICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoIGhk YV9kaWN0ICkKKyAgICAjCisgICAgIyAgICBpZiBleHBvc2VfZGF0YXNldF9wYXRoOgorICAgICMg ICAgICAgIHRyeToKKyAgICAjICAgICAgICAgICAgaGRhX2RpY3RbICdmaWxlX25hbWUnIF0gPTNE IGhkYS5maWxlX25hbWUKKyAgICAjICAgICAgICBleGNlcHQgb2JqZWN0c3RvcmUuT2JqZWN0Tm90 Rm91bmQ6CisgICAgIyAgICAgICAgICAgIGxvZy5leGNlcHRpb24oICdvYmplY3RzdG9yZS5PYmpl Y3ROb3RGb3VuZCwgSERBICVzLicsIGhkYT0KLmlkICkKKyAgICAjCisgICAgIyAgICBoZGFfZGlj dFsgJ2Rvd25sb2FkX3VybCcgXSA9M0QgZ2FsYXh5LndlYi51cmxfZm9yKCAnaGlzdG9yeV9jb250 ZT0KbnRzX2Rpc3BsYXknLAorICAgICMgICAgICAgIGhpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3Vy aXR5LmVuY29kZV9pZCggaGRhLmhpc3RvcnkuaWQgKSwKKyAgICAjICAgICAgICBoaXN0b3J5X2Nv bnRlbnRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkgKQorICAgICMK KyAgICAjICAgICMgaW5kZWNlcywgYXNzb2MuIG1ldGFkYXRhIGZpbGVzLCBldGMuCisgICAgIyAg ICBtZXRhX2ZpbGVzID0zRCBbXQorICAgICMgICAgZm9yIG1ldGFfdHlwZSBpbiBoZGEubWV0YWRh dGEuc3BlYy5rZXlzKCk6CisgICAgIyAgICAgICAgaWYgaXNpbnN0YW5jZSggaGRhLm1ldGFkYXRh LnNwZWNbIG1ldGFfdHlwZSBdLnBhcmFtLCBnYWxheHkuZD0KYXRhdHlwZXMubWV0YWRhdGEuRmls ZVBhcmFtZXRlciApOgorICAgICMgICAgICAgICAgICBtZXRhX2ZpbGVzLmFwcGVuZCggZGljdCgg ZmlsZV90eXBlPTNEbWV0YV90eXBlICkgKQorICAgICMgICAgaWYgbWV0YV9maWxlczoKKyAgICAj ICAgICAgICBoZGFfZGljdFsgJ21ldGFfZmlsZXMnIF0gPTNEIG1ldGFfZmlsZXMKKyAgICAjCisg ICAgIyAgICAjIGN1cnJlbnRseSwgdGhlIHZpeiByZWcgaXMgb3B0aW9uYWwgLSBoYW5kbGUgb24v b2ZmCisgICAgIyAgICBpZiB0cmFucy5hcHAudmlzdWFsaXphdGlvbnNfcmVnaXN0cnk6CisgICAg IyAgICAgICAgaGRhX2RpY3RbICd2aXN1YWxpemF0aW9ucycgXSA9M0QgdHJhbnMuYXBwLnZpc3Vh bGl6YXRpb25zX3JlZz0KaXN0cnkuZ2V0X3Zpc3VhbGl6YXRpb25zKCB0cmFucywgaGRhICkKKyAg ICAjICAgIGVsc2U6CisgICAgIyAgICAgICAgaGRhX2RpY3RbICd2aXN1YWxpemF0aW9ucycgXSA9 M0QgaGRhLmdldF92aXN1YWxpemF0aW9ucygpCisgICAgIyAgICAjVE9ETzogaXQgbWF5IGFsc28g YmUgd2lzZXIgdG8gcmVtb3ZlIGZyb20gaGVyZSBhbmQgYWRkIGFzIEFQSSBjYT0KbGwgdGhhdCBs b2FkcyB0aGUgdmlzdWFsaXphdGlvbnMKKyAgICAjICAgICMgICAgICAgICAgIHdoZW4gdGhlIHZp c3VhbGl6YXRpb25zIGJ1dHRvbiBpcyBjbGlja2VkIChpbnN0ZWFkIG9mPQogcHJlbG9hZGluZy9w cmUtY2hlY2tpbmcpCisgICAgIworICAgICMgICAgIyAtLS0tIHJldHVybiBoZXJlIGlmIGRlbGV0 ZWQKKyAgICAjICAgIGlmIGhkYS5kZWxldGVkIGFuZCBub3QgcHVyZ2VkOgorICAgICMgICAgICAg IHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoIGhkYV9kaWN0ICkKKyAgICAj CisgICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRzKCBoZGFfZGlj dCApCj0yMAogICAgIGRlZiBnZXRfZGlzcGxheV9hcHBzKCBzZWxmLCB0cmFucywgaGRhICk6CiAg ICAgICAgICIiIgpAQCAtMjExLDcgKzE4NCw3IEBACiAgICAgICAgICAgICAgICAgYXBwX2xpbmtz LmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiBsaW5rX2FwcC51cmwuZ2V0 KCAndGFyZ2V0X2ZyYW1lJywgJ19ibGFuaycgKSwKICAgICAgICAgICAgICAgICAgICAgJ2hyZWYn ICA6IGxpbmtfYXBwLmdldF9kaXNwbGF5X3VybCggaGRhLCB0cmFucyApLAotICAgICAgICAgICAg ICAgICAgICAndGV4dCcgIDogZ2V0dGV4dCggbGlua19hcHAubmFtZSApCisgICAgICAgICAgICAg ICAgICAgICd0ZXh0JyAgOiBnZXR0ZXh0LmdldHRleHQoIGxpbmtfYXBwLm5hbWUgKQogICAgICAg ICAgICAgICAgIH0pCiAgICAgICAgICAgICBpZiBhcHBfbGlua3M6CiAgICAgICAgICAgICAgICAg ZGlzcGxheV9hcHBzLmFwcGVuZCggZGljdCggbGFiZWw9M0RkaXNwbGF5X2FwcC5uYW1lLCBsaW5r cz0KPTNEYXBwX2xpbmtzICkgKQpAQCAtMjM4LDEzICsyMTEsMTkgQEAKICAgICAgICAgICAgICAg ICAgICAgYXBwX2xpbmtzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0 JzogdGFyZ2V0X2ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2hyZWYnICA6IGRpc3Bs YXlfbGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgOiBnZXR0ZXh0KCBkaXNw bGF5X25hbWUgKQorICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnICA6IGdldHRleHQuZ2V0 dGV4dCggZGlzcGxheV9uYW1lICkKICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAg ICAgICBpZiBhcHBfbGlua3M6CiAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfYXBwcy5hcHBl bmQoIGRpY3QoIGxhYmVsPTNEZGlzcGxheV9sYWJlbCwgbGluaz0Kcz0zRGFwcF9saW5rcyApICkK PTIwCiAgICAgICAgIHJldHVybiBkaXNwbGF5X2FwcHMKPTIwCisgICAgZGVmIGdldF92aXN1YWxp emF0aW9ucyggc2VsZiwgdHJhbnMsIGhkYSApOgorICAgICAgICAjIHVzZSBvbGRlciBzeXN0ZW0g aWYgcmVnaXN0cnkgaXMgb2ZmIGluIHRoZSBjb25maWcKKyAgICAgICAgaWYgbm90IHRyYW5zLmFw cC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKKyAgICAgICAgICAgcmV0dXJuIGhkYS5nZXRfdmlz dWFsaXphdGlvbnMoKQorICAgICAgICByZXR1cm4gdHJhbnMuYXBwLnZpc3VhbGl6YXRpb25zX3Jl Z2lzdHJ5LmdldF92aXN1YWxpemF0aW9ucyggdHJhbnM9CiwgaGRhICkKKwogICAgICNkZWYgZ2V0 X2RhdGFzZXQoIHNlbGYsIHRyYW5zLCBkYXRhc2V0X2lkLCBjaGVja19vd25lcnNoaXA9M0RUcnVl LCBjaGU9CmNrX2FjY2Vzc2libGU9M0RGYWxzZSwgY2hlY2tfc3RhdGU9M0RUcnVlICk6CiAgICAg IyAgICAiIiIKICAgICAjICAgIEdldCBhbiBIREEgb2JqZWN0IGJ5IGlkIHBlcmZvcm1pbmcgc2Vj dXJpdHkgY2hlY2tzIHVzaW5nCkBAIC0zNzgsNjcgKzM1Nyw3IEBACiAgICAgIyAgICBpZiBkYXRh c2V0LnN0YXRlICE9M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuT0s6CiAgICAgIyAgICAg ICAgcmV0dXJuIGRhdGFzZXQuY29udmVyc2lvbl9tZXNzYWdlcy5QRU5ESU5HCiAgICAgIyAgICBy ZXR1cm4gTm9uZQotICAgICMKLSAgICAjZGVmIGdldF9oZGFfZGljdCggc2VsZiwgdHJhbnMsIGhk YSApOgotICAgICMgICAgIiIiUmV0dXJuIGZ1bGwgZGV0YWlscyBvZiB0aGlzIEhEQSBpbiBkaWN0 aW9uYXJ5IGZvcm0uCi0gICAgIyAgICAiIiIKLSAgICAjICAgICNwcmVjb25kaXRpb246IHRoZSB1 c2VyJ3MgYWNjZXNzIHRvIHRoaXMgaGRhIGhhcyBhbHJlYWR5IGJlZW4gY2hlPQpja2VkCi0gICAg IyAgICAjVE9ETzo/PyBwb3N0Y29uZGl0aW9uOiBhbGwgaWRzIGFyZSBlbmNvZGVkIChpcyB0aGlz IHJlYWxseSB3aGF0ID0Kd2Ugd2FudCBhdCB0aGlzIGxldmVsPykKLSAgICAjICAgIGV4cG9zZV9k YXRhc2V0X3BhdGggPTNEIHRyYW5zLnVzZXJfaXNfYWRtaW4oKSBvciB0cmFucy5hcHAuY29uZmln PQouZXhwb3NlX2RhdGFzZXRfcGF0aAotICAgICMgICAgaGRhX2RpY3QgPTNEIGhkYS50b19kaWN0 KCB2aWV3PTNEJ2VsZW1lbnQnLCBleHBvc2VfZGF0YXNldF9wYXRoPQo9M0RleHBvc2VfZGF0YXNl dF9wYXRoICkKLSAgICAjICAgIGhkYV9kaWN0WyAnYXBpX3R5cGUnIF0gPTNEICJmaWxlIgotICAg ICMKLSAgICAjICAgICMgQWRkIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB0aGF0IGRlcGVuZCBvbiB0 cmFucyBjYW4gaGVuY2UgbXVzdCBiPQplIGFkZGVkIGhlcmUgcmF0aGVyIHRoYW4gYXQgdGhlIG1v ZGVsIGxldmVsLgotICAgICMgICAgY2FuX2FjY2Vzc19oZGEgPTNEIHRyYW5zLmFwcC5zZWN1cml0 eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHQ9CnJhbnMuZ2V0X2N1cnJlbnRfdXNlcl9yb2xl cygpLCBoZGEuZGF0YXNldCApCi0gICAgIyAgICBjYW5fYWNjZXNzX2hkYSA9M0QgKCB0cmFucy51 c2VyX2lzX2FkbWluKCkgb3IgY2FuX2FjY2Vzc19oZGEgKQotICAgICMgICAgaWYgbm90IGNhbl9h Y2Nlc3NfaGRhOgotICAgICMgICAgICAgIHJldHVybiBzZWxmLmdldF9pbmFjY2Vzc2libGVfaGRh X2RpY3QoIHRyYW5zLCBoZGEgKQotICAgICMgICAgaGRhX2RpY3RbICdhY2Nlc3NpYmxlJyBdID0z RCBUcnVlCi0gICAgIwotICAgICMgICAgI1RPRE86IEknbSB1bmNsZWFyIGFzIHRvIHdoaWNoIGFj Y2VzcyBwYXR0ZXJuIGlzIHJpZ2h0Ci0gICAgIyAgICBoZGFfZGljdFsgJ2Fubm90YXRpb24nIF0g PTNEIGhkYS5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMucz0KYV9zZXNzaW9uLCB0cmFu cy51c2VyLCBoZGEgKQotICAgICMgICAgI2Fubm90YXRpb24gPTNEIGdldGF0dHIoIGhkYSwgJ2Fu bm90YXRpb24nLCBoZGEuZ2V0X2l0ZW1fYW5ub3RhdGk9Cm9uX3N0ciggdHJhbnMuc2Ffc2Vzc2lv biwgdHJhbnMudXNlciwgaGRhICkgKQotICAgICMKLSAgICAjICAgICMgLS0tLSByZXR1cm4gaGVy ZSBpZiBkZWxldGVkIEFORCBwdXJnZWQgT1IgY2FuJ3QgYWNjZXNzCi0gICAgIyAgICBwdXJnZWQg PTNEICggaGRhLnB1cmdlZCBvciBoZGEuZGF0YXNldC5wdXJnZWQgKQotICAgICMgICAgaWYgaGRh LmRlbGV0ZWQgYW5kIHB1cmdlZDoKLSAgICAjICAgICAgICAjVE9ETzogdG9fZGljdCBzaG91bGQg cmVhbGx5IGdvIEFGVEVSIHRoaXMgLSBvbmx5IHN1bW1hcnkgZGF0YQotICAgICMgICAgICAgIHJl dHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoIGhkYV9kaWN0ICkKLSAgICAjCi0g ICAgIyAgICBpZiBleHBvc2VfZGF0YXNldF9wYXRoOgotICAgICMgICAgICAgIHRyeToKLSAgICAj ICAgICAgICAgICAgaGRhX2RpY3RbICdmaWxlX25hbWUnIF0gPTNEIGhkYS5maWxlX25hbWUKLSAg ICAjICAgICAgICBleGNlcHQgb2JqZWN0c3RvcmUuT2JqZWN0Tm90Rm91bmQ6Ci0gICAgIyAgICAg ICAgICAgIGxvZy5leGNlcHRpb24oICdvYmplY3RzdG9yZS5PYmplY3ROb3RGb3VuZCwgSERBICVz LicsIGhkYT0KLmlkICkKLSAgICAjCi0gICAgIyAgICBoZGFfZGljdFsgJ2Rvd25sb2FkX3VybCcg XSA9M0QgdXJsX2ZvciggJ2hpc3RvcnlfY29udGVudHNfZGlzcGxheT0KJywKLSAgICAjICAgICAg ICBoaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5oaXN0b3J5Lmlk ICksCi0gICAgIyAgICAgICAgaGlzdG9yeV9jb250ZW50X2lkID0zRCB0cmFucy5zZWN1cml0eS5l bmNvZGVfaWQoIGhkYS5pZCApICkKLSAgICAjCi0gICAgIyAgICAjIHJlc3VibWl0dGVkIGlzIG5v dCBhIHJlYWwgc3RhdGUKLSAgICAjICAgIGhkYV9kaWN0WyAncmVzdWJtaXR0ZWQnIF0gPTNEIEZh bHNlCi0gICAgIyAgICBpZiBoZGEuc3RhdGUgPTNEPTNEIHRyYW5zLmFwcC5tb2RlbC5EYXRhc2V0 LnN0YXRlcy5SRVNVQk1JVFRFRDoKLSAgICAjICAgICAgICBoZGFfZGljdFsgJ3N0YXRlJyBdID0z RCBoZGEuZGF0YXNldC5zdGF0ZQotICAgICMgICAgICAgIGhkYV9kaWN0WyAncmVzdWJtaXR0ZWQn IF0gPTNEIFRydWUKLSAgICAjCi0gICAgIyAgICAjIGluZGVjZXMsIGFzc29jLiBtZXRhZGF0YSBm aWxlcywgZXRjLgotICAgICMgICAgbWV0YV9maWxlcyA9M0QgW10KLSAgICAjICAgIGZvciBtZXRh X3R5cGUgaW4gaGRhLm1ldGFkYXRhLnNwZWMua2V5cygpOgotICAgICMgICAgICAgIGlmIGlzaW5z dGFuY2UoIGhkYS5tZXRhZGF0YS5zcGVjWyBtZXRhX3R5cGUgXS5wYXJhbSwgRmlsZVBhcmE9Cm1l dGVyICk6Ci0gICAgIyAgICAgICAgICAgIG1ldGFfZmlsZXMuYXBwZW5kKCBkaWN0KCBmaWxlX3R5 cGU9M0RtZXRhX3R5cGUgKSApCi0gICAgIyAgICBpZiBtZXRhX2ZpbGVzOgotICAgICMgICAgICAg IGhkYV9kaWN0WyAnbWV0YV9maWxlcycgXSA9M0QgbWV0YV9maWxlcwotICAgICMKLSAgICAjICAg ICMgY3VycmVudGx5LCB0aGUgdml6IHJlZyBpcyBvcHRpb25hbCAtIGhhbmRsZSBvbi9vZmYKLSAg ICAjICAgIGlmIHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKLSAgICAjICAgICAg ICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCB0cmFucy5hcHAudmlzdWFsaXphdGlv bnNfcmVnPQppc3RyeS5nZXRfdmlzdWFsaXphdGlvbnMoIHRyYW5zLCBoZGEgKQotICAgICMgICAg ZWxzZToKLSAgICAjICAgICAgICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCBoZGEu Z2V0X3Zpc3VhbGl6YXRpb25zKCkKLSAgICAjICAgICNUT0RPOiBpdCBtYXkgYWxzbyBiZSB3aXNl ciB0byByZW1vdmUgZnJvbSBoZXJlIGFuZCBhZGQgYXMgQVBJIGNhPQpsbCB0aGF0IGxvYWRzIHRo ZSB2aXN1YWxpemF0aW9ucwotICAgICMgICAgIyAgICAgICAgICAgd2hlbiB0aGUgdmlzdWFsaXph dGlvbnMgYnV0dG9uIGlzIGNsaWNrZWQgKGluc3RlYWQgb2Y9CiBwcmVsb2FkaW5nL3ByZS1jaGVj a2luZykKLSAgICAjCi0gICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3Rf aWRzKCBoZGFfZGljdCApCi0gICAgIworCiAgICAgI2RlZiBnZXRfaW5hY2Nlc3NpYmxlX2hkYV9k aWN0KCBzZWxmLCB0cmFucywgaGRhICk6CiAgICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHku ZW5jb2RlX2RpY3RfaWRzKHsKICAgICAjICAgICAgICAnaWQnICAgICAgICA6IGhkYS5pZCwKQEAg LTQ1MCw3ICszNjksNyBAQAogICAgICMgICAgICAgICd2aXNpYmxlJyAgIDogaGRhLnZpc2libGUs CiAgICAgIyAgICAgICAgJ2FjY2Vzc2libGUnOiBGYWxzZQogICAgICMgICAgfSkKLSAgICAjCisK ICAgICAjZGVmIGdldF9oZGFfZGljdF93aXRoX2Vycm9yKCBzZWxmLCB0cmFucywgaGRhPTNETm9u ZSwgaGlzdG9yeV9pZD0zRE5vPQpuZSwgaWQ9M0ROb25lLCBlcnJvcl9tc2c9M0QnRXJyb3InICk6 CiAgICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRzKHsKICAgICAj ICAgICAgICAnaWQnICAgICAgICA6IGhkYS5pZCBpZiBoZGEgZWxzZSBpZCwKQEAgLTQ2MCw0NyAr Mzc5LDcgQEAKICAgICAjICAgICAgICAnZXJyb3InICAgICA6IGVycm9yX21zZywKICAgICAjICAg ICAgICAnc3RhdGUnICAgICA6IHRyYW5zLm1vZGVsLkRhdGFzZXQuc3RhdGVzLk5FVwogICAgICMg ICAgfSkKLSAgICAjCi0gICAgI2RlZiBnZXRfZGlzcGxheV9hcHBzKCBzZWxmLCB0cmFucywgaGRh ICk6Ci0gICAgIyAgICBkaXNwbGF5X2FwcHMgPTNEIFtdCi0gICAgIyAgICBmb3IgZGlzcGxheV9h cHAgaW4gaGRhLmdldF9kaXNwbGF5X2FwcGxpY2F0aW9ucyggdHJhbnMgKS5pdGVydmFsdT0KZXMo KToKLSAgICAjCi0gICAgIyAgICAgICAgYXBwX2xpbmtzID0zRCBbXQotICAgICMgICAgICAgIGZv ciBsaW5rX2FwcCBpbiBkaXNwbGF5X2FwcC5saW5rcy5pdGVydmFsdWVzKCk6Ci0gICAgIyAgICAg ICAgICAgIGFwcF9saW5rcy5hcHBlbmQoewotICAgICMgICAgICAgICAgICAgICAgJ3RhcmdldCc6 IGxpbmtfYXBwLnVybC5nZXQoICd0YXJnZXRfZnJhbWUnLCAnX2JsYW5rJyA9CiksCi0gICAgIyAg ICAgICAgICAgICAgICAnaHJlZicgIDogbGlua19hcHAuZ2V0X2Rpc3BsYXlfdXJsKCBoZGEsIHRy YW5zICksCi0gICAgIyAgICAgICAgICAgICAgICAndGV4dCcgIDogZ2V0dGV4dCggbGlua19hcHAu bmFtZSApCi0gICAgIyAgICAgICAgICAgIH0pCi0gICAgIyAgICAgICAgaWYgYXBwX2xpbmtzOgot ICAgICMgICAgICAgICAgICBkaXNwbGF5X2FwcHMuYXBwZW5kKCBkaWN0KCBsYWJlbD0zRGRpc3Bs YXlfYXBwLm5hbWUsIGxpbms9CnM9M0RhcHBfbGlua3MgKSApCi0gICAgIwotICAgICMgICAgcmV0 dXJuIGRpc3BsYXlfYXBwcwotICAgICMKLSAgICAjZGVmIGdldF9vbGRfZGlzcGxheV9hcHBsaWNh dGlvbnMoIHNlbGYsIHRyYW5zLCBoZGEgKToKLSAgICAjICAgIGRpc3BsYXlfYXBwcyA9M0QgW10K LSAgICAjICAgIGlmIG5vdCB0cmFucy5hcHAuY29uZmlnLmVuYWJsZV9vbGRfZGlzcGxheV9hcHBs aWNhdGlvbnM6Ci0gICAgIyAgICAgICAgcmV0dXJuIGRpc3BsYXlfYXBwcwotICAgICMKLSAgICAj ICAgIGZvciBkaXNwbGF5X2FwcCBpbiBoZGEuZGF0YXR5cGUuZ2V0X2Rpc3BsYXlfdHlwZXMoKToK LSAgICAjICAgICAgICB0YXJnZXRfZnJhbWUsIGRpc3BsYXlfbGlua3MgPTNEIGhkYS5kYXRhdHlw ZS5nZXRfZGlzcGxheV9saW5rPQpzKCBoZGEsCi0gICAgIyAgICAgICAgICAgIGRpc3BsYXlfYXBw LCB0cmFucy5hcHAsIHRyYW5zLnJlcXVlc3QuYmFzZSApCi0gICAgIwotICAgICMgICAgICAgIGlm IGxlbiggZGlzcGxheV9saW5rcyApID4gMDoKLSAgICAjICAgICAgICAgICAgZGlzcGxheV9sYWJl bCA9M0QgaGRhLmRhdGF0eXBlLmdldF9kaXNwbGF5X2xhYmVsKCBkaXNwbGF5PQpfYXBwICkKLSAg ICAjCi0gICAgIyAgICAgICAgICAgIGFwcF9saW5rcyA9M0QgW10KLSAgICAjICAgICAgICAgICAg Zm9yIGRpc3BsYXlfbmFtZSwgZGlzcGxheV9saW5rIGluIGRpc3BsYXlfbGlua3M6Ci0gICAgIyAg ICAgICAgICAgICAgICBhcHBfbGlua3MuYXBwZW5kKHsKLSAgICAjICAgICAgICAgICAgICAgICAg ICAndGFyZ2V0JzogdGFyZ2V0X2ZyYW1lLAotICAgICMgICAgICAgICAgICAgICAgICAgICdocmVm JyAgOiBkaXNwbGF5X2xpbmssCi0gICAgIyAgICAgICAgICAgICAgICAgICAgJ3RleHQnICA6IGdl dHRleHQoIGRpc3BsYXlfbmFtZSApCi0gICAgIyAgICAgICAgICAgICAgICB9KQotICAgICMgICAg ICAgICAgICBpZiBhcHBfbGlua3M6Ci0gICAgIyAgICAgICAgICAgICAgICBkaXNwbGF5X2FwcHMu YXBwZW5kKCBkaWN0KCBsYWJlbD0zRGRpc3BsYXlfbGFiZWwsIGxpbj0Ka3M9M0RhcHBfbGlua3Mg KSApCi0gICAgIwotICAgICMgICAgcmV0dXJuIGRpc3BsYXlfYXBwcwotICAgICMKKwogICAgICNk ZWYgc2V0X2hkYV9mcm9tX2RpY3QoIHNlbGYsIHRyYW5zLCBoZGEsIG5ld19kYXRhICk6CiAgICAg IyAgICAiIiIKICAgICAjICAgIENoYW5nZXMgSERBIGRhdGEgdXNpbmcgdGhlIGdpdmVuIGRpY3Rp b25hcnkgbmV3X2RhdGEuCkBAIC01MjIsNyArNDAxLDcgQEAKICAgICAjICAgICAgICB0cmFucy5z YV9zZXNzaW9uLmZsdXNoKCkKICAgICAjCiAgICAgIyAgICByZXR1cm4gY2hhbmdlZAotICAgICMK KwogICAgICNkZWYgZ2V0X2hkYV9qb2IoIHNlbGYsIGhkYSApOgogICAgICMgICAgIyBHZXQgZGF0 YXNldCdzIGpvYi4KICAgICAjICAgIGpvYiA9M0QgTm9uZQpAQCAtNTMwLDcgKzQwOSw3IEBACiAg ICAgIyAgICAgICAgam9iID0zRCBqb2Jfb3V0cHV0X2Fzc29jLmpvYgogICAgICMgICAgICAgIGJy ZWFrCiAgICAgIyAgICByZXR1cm4gam9iCi0gICAgIworCiAgICAgI2RlZiBzdG9wX2hkYV9jcmVh dGluZ19qb2IoIHNlbGYsIGhkYSApOgogICAgICMgICAgIiIiCiAgICAgIyAgICBTdG9wcyBhbiBI REEncyBjcmVhdGluZyBqb2IgaWYgYWxsIHRoZSBqb2IncyBvdGhlciBvdXRwdXRzIGFyZSBkZT0K bGV0ZWQuCkBAIC01NDMsMzkgKzQyMiwxMzggQEAKICAgICAjICAgICAgICAgICAgaWYgam9iLmNo ZWNrX2lmX291dHB1dF9kYXRhc2V0c19kZWxldGVkKCk6CiAgICAgIyAgICAgICAgICAgICAgICBq b2IubWFya19kZWxldGVkKCBzZWxmLmFwcC5jb25maWcudHJhY2tfam9ic19pbl9kYXRhYj0KYXNl ICkKICAgICAjICAgICAgICAgICAgICAgIHNlbGYuYXBwLmpvYl9tYW5hZ2VyLmpvYl9zdG9wX3F1 ZXVlLnB1dCggam9iLmlkICkKKworIyBvbGQgZmlsZQorICAgICNkZWYgZ2V0KCBzZWxmLCB0cmFu cywgdW5lbmNvZGVkX2lkLCBjaGVja19vd25lcnNoaXA9M0RUcnVlLCBjaGVja19hY2M9CmVzc2li bGU9M0RUcnVlICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgIEdldCBhbiBIREEgYnkgaXRzIHVu ZW5jb2RlZCBkYiBpZCwgY2hlY2tpbmcgb3duZXJzaGlwICh2aWEgaXRzIGhpPQpzdG9yeSkKKyAg ICAjICAgIG9yIGFjY2Vzc2liaWxpdHkgKHZpYSBkYXRhc2V0IHNoYXJlcy9wZXJtaXNzaW9ucyku CisgICAgIyAgICAiIiIKKyAgICAjICAgIGhkYSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSgg dHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzPQpvY2lhdGlvbiApLmdldCggdW5lbmNv ZGVkX2lkICkKKyAgICAjICAgIGlmIGhkYSBpcyBOb25lOgorICAgICMgICAgICAgIHJhaXNlIGV4 Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQoKQorICAgICMgICAgaGRhID0zRCBzZWxmLnNlY3VyZSgg dHJhbnMsIGhkYSwgY2hlY2tfb3duZXJzaGlwLCBjaGVja19hY2Nlc3NpYmw9CmUgKQorICAgICMg ICAgcmV0dXJuIGhkYQogICAgICMKKyAgICAjZGVmIHNlY3VyZSggc2VsZiwgdHJhbnMsIGhkYSwg Y2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlY2tfYWNjZXNzaWJsPQplPTNEVHJ1ZSApOgorICAg ICMgICAgIiIiCisgICAgIyAgICBjaGVjayBvd25lcnNoaXAgKHZpYSBpdHMgaGlzdG9yeSkgb3Ig YWNjZXNzaWJpbGl0eSAodmlhIGRhdGFzZXQKKyAgICAjICAgIHNoYXJlcy9wZXJtaXNzaW9ucyku CisgICAgIyAgICAiIiIKKyAgICAjICAgICMgYWxsIGl0ZW1zIGFyZSBhY2Nlc3NpYmxlIHRvIGFu IGFkbWluCisgICAgIyAgICBpZiB0cmFucy51c2VyIGFuZCB0cmFucy51c2VyX2lzX2FkbWluKCk6 CisgICAgIyAgICAgICAgcmV0dXJuIGhkYQorICAgICMgICAgaWYgY2hlY2tfb3duZXJzaGlwOgor ICAgICMgICAgICAgIGhkYSA9M0Qgc2VsZi5jaGVja19vd25lcnNoaXAoIHRyYW5zLCBoZGEgKQor ICAgICMgICAgaWYgY2hlY2tfYWNjZXNzaWJsZToKKyAgICAjICAgICAgICBoZGEgPTNEIHNlbGYu Y2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYSApCisgICAgIyAgICByZXR1cm4gaGRhCiAgICAg IworICAgICNkZWYgY2FuX2FjY2Vzc19kYXRhc2V0KCBzZWxmLCB0cmFucywgaGRhICk6CisgICAg IyAgICAiIiIKKyAgICAjICAgIFVzZSBzZWN1cml0eSBhZ2VudCB0byBzZWUgaWYgY3VycmVudCB1 c2VyIGhhcyBhY2Nlc3MgdG8gZGF0YXNldC4KKyAgICAjICAgICIiIgorICAgICMgICAgY3VycmVu dF91c2VyX3JvbGVzID0zRCB0cmFucy5nZXRfY3VycmVudF91c2VyX3JvbGVzKCkKKyAgICAjICAg IHJldHVybiB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQuY2FuX2FjY2Vzc19kYXRhc2V0KCBjdXJy ZW50X3VzZXJfPQpyb2xlcywgaGRhLmRhdGFzZXQgKQorICAgICMKKyAgICAjI1RPRE86IGlzX293 bmVyLCBpc19hY2Nlc3NpYmxlCisgICAgIworICAgICNkZWYgY2hlY2tfb3duZXJzaGlwKCBzZWxm LCB0cmFucywgaGRhICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgIFVzZSBoaXN0b3J5IHRvIHNl ZSBpZiBjdXJyZW50IHVzZXIgb3ducyBIREEuCisgICAgIyAgICAiIiIKKyAgICAjICAgIGlmIG5v dCB0cmFucy51c2VyOgorICAgICMgICAgICAgICNpZiBoZGEuaGlzdG9yeSA9M0Q9M0QgdHJhbnMu aGlzdG9yeToKKyAgICAjICAgICAgICAjICAgIHJldHVybiBoZGEKKyAgICAjICAgICAgICByYWlz ZSBleGNlcHRpb25zLkF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoICJNdXN0IGJlIGxvZ2dlZCBpbiB0 PQpvIG1hbmFnZSBHYWxheHkgZGF0YXNldHMiLCB0eXBlPTNEJ2Vycm9yJyApCisgICAgIyAgICBp ZiB0cmFucy51c2VyX2lzX2FkbWluKCk6CisgICAgIyAgICAgICAgcmV0dXJuIGhkYQorICAgICMg ICAgIyBjaGVjayBmb3Igb3duZXJzaGlwIG9mIHRoZSBjb250YWluaW5nIGhpc3RvcnkgYW5kIGFj Y2Vzc2liaWxpdHk9CiBvZiB0aGUgdW5kZXJseWluZyBkYXRhc2V0CisgICAgIyAgICBpZiggc2Vs Zi5oaXN0b3JpZXNfbWdyLmlzX293bmVyKCB0cmFucywgaGRhLmhpc3RvcnkgKQorICAgICMgICAg ICAgICAgICBhbmQgc2VsZi5jYW5fYWNjZXNzX2RhdGFzZXQoIHRyYW5zLCBoZGEgKSApOgorICAg ICMgICAgICAgIHJldHVybiBoZGEKKyAgICAjICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVy c2hpcEV4Y2VwdGlvbigKKyAgICAjICAgICAgICAiSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiBp cyBub3Qgb3duZWQgYnkgdGhlIGN1cnJlbnQgdXNlciIsPQogdHlwZT0zRCdlcnJvcicgKQorCisg ICAgI2RlZiBjaGVja19hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgaGRhICk6CisgICAgIyAgICAi IiIKKyAgICAjICAgIFJhaXNlIGVycm9yIGlmIEhEQSBpcyBub3QgYWNjZXNzaWJsZS4KKyAgICAj ICAgICIiIgorICAgICMgICAgaWYgdHJhbnMudXNlciBhbmQgdHJhbnMudXNlcl9pc19hZG1pbigp OgorICAgICMgICAgICAgIHJldHVybiBoZGEKKyAgICAjICAgICMgY2hlY2sgZm9yIGFjY2VzcyBv ZiB0aGUgY29udGFpbmluZyBoaXN0b3J5Li4uCisgICAgIyAgICBzZWxmLmhpc3Rvcmllc19tZ3Iu Y2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYS5oaXN0b3J5ICkKKyAgICAjICAgICMgLi4udGhl biB0aGUgdW5kZXJseWluZyBkYXRhc2V0CisgICAgIyAgICBpZiBzZWxmLmNhbl9hY2Nlc3NfZGF0 YXNldCggdHJhbnMsIGhkYSApOgorICAgICMgICAgICAgIHJldHVybiBoZGEKKyAgICAjICAgIHJh aXNlIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb24oCisgICAgIyAgICAgICAg Ikhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24gaXMgbm90IGFjY2Vzc2libGUgdG8gdGhlIGN1cnJl bnQgdT0Kc2VyIiwgdHlwZT0zRCdlcnJvcicgKQorCj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIEhE QVNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyICk6CisgICAgI1RPRE86IGluaGVyaXQg ZnJvbSBkYXRhc2V0cy5EYXRhc2V0QXNzb2NpYXRpb25TZXJpYWxpemVyCj0yMAotICAgIGRlZiBf X2luaXRfXyggc2VsZiApOgotICAgICAgICBzdXBlciggSERBU2VyaWFsaXplciwgc2VsZiApLl9f aW5pdF9fKCkKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBlcigg SERBU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9t Z3IgPTNEIEhEQU1hbmFnZXIoIGFwcCApCj0yMAogICAgICAgICAjIG1vc3Qgb2YgdGhlc2Ugdmll d3MgYnVpbGQvYWRkIHRvIHRoZSBwcmV2aW91cyB2aWV3CiAgICAgICAgIHN1bW1hcnlfdmlldyA9 M0QgWwotICAgICAgICAgICAgJ2lkJywgJ2hpc3RvcnlfaWQnLCAnaGlkJywgJ25hbWUnLCAnZGF0 YXNldF9pZCcsCi0gICAgICAgICAgICAnc3RhdGUnLCAnZGVsZXRlZCcsICdwdXJnZWQnLCAndmlz aWJsZScKKyAgICAgICAgICAgICdpZCcsICduYW1lJywKKyAgICAgICAgICAgICdoaXN0b3J5X2lk JywgJ2hpZCcsICdoaXN0b3J5X2NvbnRlbnRfdHlwZScsCisgICAgICAgICAgICAjJ2RhdGFzZXRf aWQnLAorICAgICAgICAgICAgJ3N0YXRlJywgJ2V4dGVuc2lvbicsCisgICAgICAgICAgICAnZGVs ZXRlZCcsICdwdXJnZWQnLCAndmlzaWJsZScsICdyZXN1Ym1pdHRlZCcsCisgICAgICAgICAgICAn dHlwZScsICd1cmwnCiAgICAgICAgIF0KLSAgICAgICAgZGV0YWlsZWRfdmlldyA9M0Qgc3VtbWFy eV92aWV3ICsgWwotICAgICAgICAgICAgJ2Ria2V5JywgJ2luZm8nLCAnYmx1cmInLCAnZXh0ZW5z aW9uJywgJ2NyZWF0ZV90aW1lJywgJ3VwZGF0ZV89CnRpbWUnLAotICAgICAgICAgICAgJ2NvcGll ZF9mcm9tX2hpc3RvcnlfZGF0YXNldF9hc3NvY2lhdGlvbl9pZCcsICdjb3BpZWRfZnJvbV9saWI9 CnJhcnlfZGF0YXNldF9kYXRhc2V0X2Fzc29jaWF0aW9uX2lkJywKLSAgICAgICAgICAgICdtZXRh ZGF0YScsICdzaXplJywKKyAgICAgICAgaW5hY2Nlc3NpYmxlID0zRCBbCisgICAgICAgICAgICAn aWQnLCAnbmFtZScsICdoaXN0b3J5X2lkJywgJ2hpZCcsICdoaXN0b3J5X2NvbnRlbnRfdHlwZScs CisgICAgICAgICAgICAnc3RhdGUnLCAnZGVsZXRlZCcsICd2aXNpYmxlJworICAgICAgICBdCisg ICAgICAgIGRldGFpbGVkX3ZpZXcgPTNEIFsKKyAgICAgICAgICAgICdpZCcsICduYW1lJywgJ21v ZGVsX2NsYXNzJywKKyAgICAgICAgICAgICdoaXN0b3J5X2lkJywgJ2hpZCcsCisgICAgICAgICAg ICAjIHdoeSBpbmNsdWRlIGlmIG1vZGVsX2NsYXNzIGlzIHRoZXJlPworICAgICAgICAgICAgJ2hk YV9sZGRhJywgJ2hpc3RvcnlfY29udGVudF90eXBlJywKKyAgICAgICAgICAgICdzdGF0ZScsCisg ICAgICAgICAgICAnYWNjZXNzaWJsZScsCisgICAgICAgICAgICAnZGVsZXRlZCcsICdwdXJnZWQn LCAndmlzaWJsZScsICdyZXN1Ym1pdHRlZCcsCisKKyAgICAgICAgICAgICMgcmVtYXBwZWQKKyAg ICAgICAgICAgICdnZW5vbWVfYnVpbGQnLCAnbWlzY19pbmZvJywgJ21pc2NfYmx1cmInLAorICAg ICAgICAgICAgJ2ZpbGVfZXh0JywgJ2ZpbGVfc2l6ZScsCisKKyAgICAgICAgICAgICdjcmVhdGVf dGltZScsICd1cGRhdGVfdGltZScsCisgICAgICAgICAgICAnbWV0YWRhdGEnLCAnbWV0YV9maWxl cycsICdkYXRhX3R5cGUnLAorICAgICAgICAgICAgJ3BlZWsnLAorCisgICAgICAgICAgICAjVE9E Tzogd2h5IGlzIHRoaXMgbmFtZWQgdXVpZCE/IFRoZSBoZGEgZG9lc24ndCBoYXZlIGEgdXVpZCAt ID0KaXQncyB0aGUgdW5kZXJseWluZyBkYXRhc2V0J3MgdXVpZCEKKyAgICAgICAgICAgICd1dWlk JywKKyAgICAgICAgICAgICMgc2hvdWxkIGJlOgorICAgICAgICAgICAgIydkYXRhc2V0X3V1aWQn LAorCisgICAgICAgICAgICAnZmlsZV9wYXRoJywKKyAgICAgICAgICAgICdkaXNwbGF5X2FwcHMn LAorICAgICAgICAgICAgJ2Rpc3BsYXlfdHlwZXMnLAorICAgICAgICAgICAgJ3Zpc3VhbGl6YXRp b25zJywKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAjJ3VybCcsCisgICAgICAgICAgICAn ZG93bmxvYWRfdXJsJywKKwogICAgICAgICAgICAgI21peGluOiBhbm5vdGF0YWJsZQogICAgICAg ICAgICAgJ2Fubm90YXRpb24nLAogICAgICAgICAgICAgI21peGluOiB0YWdnYWJsZQogICAgICAg ICAgICAgJ3RhZ3MnLAorCisgICAgICAgICAgICAnYXBpX3R5cGUnCiAgICAgICAgIF0KICAgICAg ICAgZXh0ZW5kZWRfdmlldyA9M0QgZGV0YWlsZWRfdmlldyArIFsKICAgICAgICAgICAgICNOT1RF OiBzZW5kaW5nIHJhdyAncGVlaycgKG5vdCBnZXRfZGlzcGxheV9wZWVrKQotICAgICAgICAgICAg J3BlZWsnLAogICAgICAgICAgICAgJ3Rvb2xfdmVyc2lvbicsICdwYXJlbnRfaWQnLCAnZGVzaWdu YXRpb24nLAogICAgICAgICBdCj0yMAogICAgICAgICBzZWxmLnNlcmlhbGl6YWJsZV9rZXlzID0z RCBleHRlbmRlZF92aWV3ICsgWwotICAgICAgICAgICAgJ2Rpc3BsYXlfYXBwcycsCi0gICAgICAg ICAgICAnZGlzcGxheV90eXBlcycsCi0gICAgICAgICAgICAndmlzdWFsaXphdGlvbnMnCiAgICAg ICAgIF0KICAgICAgICAgc2VsZi52aWV3cyA9M0QgewogICAgICAgICAgICAgJ3N1bW1hcnknICAg OiBzdW1tYXJ5X3ZpZXcsCkBAIC01ODYsNTIgKzU2NCwxOTAgQEAKPTIwCiAgICAgZGVmIGFkZF9z ZXJpYWxpemVycyggc2VsZiApOgogICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0ZSh7Cisg ICAgICAgICAgICAnbW9kZWxfY2xhc3MnICAgOiBsYW1iZGEgKmE6ICdIaXN0b3J5RGF0YXNldEFz c29jaWF0aW9uJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmxlJyAgICA6IGxhbWJkYSAqYTogVHJ1 ZSwKKwogICAgICAgICAgICAgJ2lkJyAgICAgICAgICAgIDogc2VsZi5zZXJpYWxpemVfaWQsCiAg ICAgICAgICAgICAnaGlzdG9yeV9pZCcgICAgOiBzZWxmLnNlcmlhbGl6ZV9pZCwKKyAgICAgICAg ICAgICdoaXN0b3J5X2NvbnRlbnRfdHlwZSc6IGxhbWJkYSAqYTogJ2RhdGFzZXQnLAogICAgICAg ICAgICAgJ2RhdGFzZXRfaWQnICAgIDogc2VsZi5zZXJpYWxpemVfaWQsCisgICAgICAgICAgICAn aGRhX2xkZGEnICAgICAgOiBsYW1iZGEgKmE6ICdoZGEnLAorCisgICAgICAgICAgICAjIHJlbWFw cGVkCisgICAgICAgICAgICAnaW5mbycgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogaS5pbmZv LnN0cmlwKCkgaWYgaXNpbnN0YW5jZT0KKCBpLmluZm8sIGJhc2VzdHJpbmcgKSBlbHNlIGkuaW5m bywKKyAgICAgICAgICAgICdtaXNjX2luZm8nICAgICA6IGxhbWJkYSB0LCBpLCBrOiBzZWxmLnNl cmlhbGl6ZXJzWyAnaW5mbycgXSggPQp0LCBpLCBrICksCisgICAgICAgICAgICAnbWlzY19ibHVy YicgICAgOiBsYW1iZGEgdCwgaSwgazogaS5ibHVyYiwKKyAgICAgICAgICAgICdnZW5vbWVfYnVp bGQnICA6IGxhbWJkYSB0LCBpLCBrOiBpLmRia2V5LAorICAgICAgICAgICAgJ2ZpbGVfZXh0JyAg ICAgIDogbGFtYmRhIHQsIGksIGs6IGkuZXh0ZW5zaW9uLAorICAgICAgICAgICAgJ2ZpbGVfc2l6 ZScgICAgIDogbGFtYmRhIHQsIGksIGs6IHNlbGYuc2VyaWFsaXplcnNbICdzaXplJyBdKCA9CnQs IGksIGsgKSwKPTIwCiAgICAgICAgICAgICAnY3JlYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlhbGl6 ZV9kYXRlLAogICAgICAgICAgICAgJ3VwZGF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVfZGF0 ZSwKICAgICAgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25f aWQnICAgICAgICA6IHNlbGYuc2VyPQppYWxpemVfaWQsCiAgICAgICAgICAgICAnY29waWVkX2Zy b21fbGlicmFyeV9kYXRhc2V0X2RhdGFzZXRfYXNzb2NpYXRpb25faWQnOiBzZWxmLnNlcj0KaWFs aXplX2lkLAotICAgICAgICAgICAgJ21ldGFkYXRhJyAgICAgIDogc2VsZi5zZXJpYWxpemVfbWV0 YWRhdGEsCisKKyAgICAgICAgICAgICdyZXN1Ym1pdHRlZCcgICA6IGxhbWJkYSB0LCBpLCBrOiBp Ll9zdGF0ZSA9M0Q9M0QgdC5hcHAubW9kZWwuPQpEYXRhc2V0LnN0YXRlcy5SRVNVQk1JVFRFRCwK KworICAgICAgICAgICAgJ21ldGFfZmlsZXMnICAgIDogc2VsZi5zZXJpYWxpemVfbWV0YV9maWxl cywKKyAgICAgICAgICAgICdmaWxlX3BhdGgnICAgICA6IHNlbGYuc2VyaWFsaXplX2ZpbGVfcGF0 aCwKKwogICAgICAgICAgICAgJ3NpemUnICAgICAgICAgIDogbGFtYmRhIHQsIGksIGs6IGludCgg aS5nZXRfc2l6ZSgpICksCiAgICAgICAgICAgICAnbmljZV9zaXplJyAgICAgOiBsYW1iZGEgdCwg aSwgazogaS5nZXRfc2l6ZSggbmljZV9zaXplPTNEVHJ1ZT0KICksCisgICAgICAgICAgICAnZGF0 YV90eXBlJyAgICAgOiBsYW1iZGEgdCwgaSwgazogaS5kYXRhdHlwZS5fX2NsYXNzX18uX19tb2R1 bD0KZV9fICsgJy4nICsgaS5kYXRhdHlwZS5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAg ICAncGVlaycgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogaS5kaXNwbGF5X3BlZWsoKSBpZiBp LnBlZWsgYT0KbmQgaS5wZWVrICE9M0QgJ25vIHBlZWsnIGVsc2UgTm9uZSwKKworICAgICAgICAg ICAgIyBjdXJyZW50bHkgd2Ugc2VuZCB0aGlzIHN1Yi1vYmogZmxhdHRlbmVkIChzZWUgc2VyaWFs aXplIGFuZCA9CmFkZF9mbGF0dGVuZWRfbWV0YWRhdGEgYmVsb3cpCisgICAgICAgICAgICAjJ21l dGFkYXRhJyAgICAgIDogc2VsZi5zZXJpYWxpemVfbWV0YWRhdGEsCisgICAgICAgICAgICAjICAg bWFrZSBpdCBhdmFpbGFibGUgaGVyZSB1bmRlciBhIGRpZmZlcmVudCBrZXkKKyAgICAgICAgICAg ICdtZXRhZGF0YV9kaWN0JyA6IHNlbGYuc2VyaWFsaXplX21ldGFkYXRhLAorCiAgICAgICAgICAg ICAncGFyZW50X2lkJyAgICAgOiBzZWxmLnNlcmlhbGl6ZV9pZCwKLSAgICAgICAgICAgICNUT0RP OiB0byBtaXhpbjogYW5ub3RhdGFibGUKLSAgICAgICAgICAgICdhbm5vdGF0aW9uJyAgICA6IGxh bWJkYSB0LCBpLCBrOiBpLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCB0PQouc2Ffc2Vzc2lvbiwg dC51c2VyLCBpICksCi0gICAgICAgICAgICAjVE9ETzogdG8gbWl4aW46IHRhZ2dhYmxlCi0gICAg ICAgICAgICAndGFncycgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogWyB0YWcudXNlcl90bmFt ZSArICggJzonICsgdD0KYWcudXNlcl92YWx1ZSBpZiB0YWcudXNlcl92YWx1ZSBlbHNlICcnICkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YWcg aW4gaS50YWdzIF0sCisgICAgICAgICAgICAnYW5ub3RhdGlvbicgICAgOiBzZWxmLnNlcmlhbGl6 ZV9hbm5vdGF0aW9uLAorICAgICAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogc2VsZi5zZXJpYWxp emVfdGFncywKKworICAgICAgICAgICAgJ2Rpc3BsYXlfYXBwcycgIDogbGFtYmRhIHQsIGksIGs6 IHNlbGYuaGRhX21nci5nZXRfZGlzcGxheV9hcHA9CnMoIHQsIGkgKSwKKyAgICAgICAgICAgICdk aXNwbGF5X3R5cGVzJyA6IGxhbWJkYSB0LCBpLCBrOiBzZWxmLmhkYV9tZ3IuZ2V0X29sZF9kaXNw bGF5PQpfYXBwbGljYXRpb25zKCB0LCBpICksCisgICAgICAgICAgICAndmlzdWFsaXphdGlvbnMn OiBsYW1iZGEgdCwgaSwgazogc2VsZi5oZGFfbWdyLmdldF92aXN1YWxpemF0aT0Kb25zKCB0LCBp ICksCisKKyAgICAgICAgICAgICdkYXRhc2V0X3V1aWQnICA6IGxhbWJkYSB0LCBpLCBrOiBzdHIo IGkuZGF0YXNldC51dWlkICkgaWYgaS5kPQphdGFzZXQudXVpZCBlbHNlIE5vbmUsCisgICAgICAg ICAgICAndXVpZCcgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogc2VsZi5zZXJpYWxpemVyc1sg J2RhdGFzZXRfdT0KdWlkJyBdKCB0LCBpLCBrICksCisKKyAgICAgICAgICAgICMndXJsJyAgIDog dXJsX2ZvciggJ2hpc3RvcnlfY29udGVudF90eXBlZCcsIGhpc3RvcnlfaWQ9M0RlbmNvPQpkZWRf aGlzdG9yeV9pZCwgaWQ9M0RlbmNvZGVkX2lkLCB0eXBlPTNEImRhdGFzZXQiICksCisgICAgICAg ICAgICAjVE9ETzogdGhpcyBpbnRlcm1pdHRlbnRseSBjYXVzZXMgYSByb3V0ZXMuR2VuZXJhdGlv bkV4Y2VwdGlvbj0KIC0gdGVtcCB1c2UgdGhlIGxlZ2FjeSByb3V0ZSB0byBwcmV2ZW50IHRoaXMK KyAgICAgICAgICAgICMgICBzZWUgYWxzbzogaHR0cHM6Ly90cmVsbG8uY29tL2MvNWQ2ajRYNXkK KyAgICAgICAgICAgICMgICBzZWUgYWxzbzogaHR0cHM6Ly9zZW50cnkuZ2FsYXh5cHJvamVjdC5v cmcvZ2FsYXh5L2dhbGF4eS1tPQphaW4vZ3JvdXAvMjA3NjkvZXZlbnRzLzkzNTI4ODMvCisgICAg ICAgICAgICAndXJsJyAgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogZ2FsYXh5LndlYi51cmxf Zm9yKCAnaGlzdG9yeT0KX2NvbnRlbnQnLAorICAgICAgICAgICAgICAgIGhpc3RvcnlfaWQ9M0R0 LnNlY3VyaXR5LmVuY29kZV9pZCggaS5oaXN0b3J5X2lkICksIGlkPTNEdC49CnNlY3VyaXR5LmVu Y29kZV9pZCggaS5pZCApICksCisKKyAgICAgICAgICAgICd1cmxzJyAgICAgICAgICA6IHNlbGYu c2VyaWFsaXplX3VybHMsCisgICAgICAgICAgICAnZG93bmxvYWRfdXJsJyAgOiBsYW1iZGEgdCwg aSwgazogZ2FsYXh5LndlYi51cmxfZm9yKCAnaGlzdG9yeT0KX2NvbnRlbnRzX2Rpc3BsYXknLAor ICAgICAgICAgICAgICAgIGhpc3RvcnlfaWQ9M0R0LnNlY3VyaXR5LmVuY29kZV9pZCggaS5oaXN0 b3J5LmlkICksCisgICAgICAgICAgICAgICAgaGlzdG9yeV9jb250ZW50X2lkPTNEdC5zZWN1cml0 eS5lbmNvZGVfaWQoIGkuaWQgKSApLAorCisgICAgICAgICAgICAnYXBpX3R5cGUnICAgICAgOiBs YW1iZGEgKmE6ICdmaWxlJywKKyAgICAgICAgICAgICd0eXBlJyAgICAgICAgICA6IGxhbWJkYSAq YTogJ2ZpbGUnCiAgICAgICAgIH0pCj0yMAotICAgIGRlZiBzZXJpYWxpemVfbWV0YWRhdGEoIHNl bGYsIHRyYW5zLCBoZGEsIGtleSApOgotICAgICAgICBub3RfaW5jbHVkZWQgPTNEIFsgJ2Ria2V5 JyBdCi0gICAgICAgIG1kID0zRCB7fQorICAgIGRlZiBzZXJpYWxpemUoIHNlbGYsIHRyYW5zLCBo ZGEsIGtleXMgKToKKyAgICAgICAgIyBpZiAnbWV0YWRhdGEnIGlzbid0IHJlbW92ZWQgZnJvbSBr ZXlzIGhlcmUgc2VyaWFsaXplIHdpbGwgcmV0cmllPQp2ZSB0aGUgdW4tc2VyaWFsaXphYmxlIE1l dGFkYXRhQ29sbGVjdGlvbgorICAgICAgICAjVE9ETzogcmVtb3ZlIHRoZXNlIHdoZW4gbWV0YWRh dGEgaXMgc3ViLW9iamVjdAorICAgICAgICBLRVlTX0hBTkRMRURfU0VQQVJBVEVMWSA9M0QgKCAn bWV0YWRhdGEnLCApCisgICAgICAgIGxlZnRfdG9faGFuZGxlID0zRCBzZWxmLnBsdWNrX2Zyb21f bGlzdCgga2V5cywgS0VZU19IQU5ETEVEX1NFUEFSQT0KVEVMWSApCisgICAgICAgIHNlcmlhbGl6 ZWQgPTNEIHN1cGVyKCBIREFTZXJpYWxpemVyLCBzZWxmICkuc2VyaWFsaXplKCB0cmFucywgaGRh LD0KIGtleXMgKQorCisgICAgICAgIGlmICdtZXRhZGF0YScgaW4gbGVmdF90b19oYW5kbGU6Cisg ICAgICAgICAgICAjIHdlIGN1cnJlbnRseSBhZGQgbWV0YWRhdGEgZGlyZWN0bHkgdG8gdGhlIGRp Y3QgaW5zdGVhZCBvZiBhcz0KIGEgc3ViLW9iamVjdAorICAgICAgICAgICAgc2VyaWFsaXplZC51 cGRhdGUoIHNlbGYucHJlZml4ZWRfbWV0YWRhdGEoIHRyYW5zLCBoZGEgKSApCisgICAgICAgIHJl dHVybiBzZXJpYWxpemVkCisKKyAgICBkZWYgcHJlZml4ZWRfbWV0YWRhdGEoIHNlbGYsIHRyYW5z LCBoZGEgKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZHMgKGEgcHJlZml4ZWQgdmVyc2lvbiBv ZikgdGhlIGhkYSBtZXRhZGF0YSB0byB0aGUgZGljdCwgcHJlZml4aT0KbmcgZWFjaCBrZXkKKyAg ICAgICAgd2l0aCAnbWV0YWRhdGFfJy4KKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFkYXRhID0z RCBzZWxmLnNlcmlhbGl6ZV9tZXRhZGF0YSggdHJhbnMsIGhkYSwgJ21ldGFkYXRhJyApCisgICAg ICAgICNUT0RPOiB0aGlzIGlzIGZhY3RvcmVkIG91dCBmb3IgcmVtb3ZhbCAtIG1ldGFkYXRhIHNo b3VsZCBiZSBhIHN1Yj0KLW9iamVjdCBpbnN0ZWFkOgorICAgICAgICAjICAgaS5lLiAgJ21ldGFk YXRhJyA6IHNlbGYuc2VyaWFsaXplX21ldGFkYXRhLAorICAgICAgICBwcmVmaXhlZCA9M0Qge30K KyAgICAgICAgZm9yIGtleSwgdmFsIGluIG1ldGFkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBw cmVmaXhlZF9rZXkgPTNEICdtZXRhZGF0YV8nICsga2V5CisgICAgICAgICAgICBwcmVmaXhlZFsg cHJlZml4ZWRfa2V5IF0gPTNEIHZhbAorICAgICAgICByZXR1cm4gcHJlZml4ZWQKKworICAgIGRl ZiBzZXJpYWxpemVfbWV0YWRhdGEoIHNlbGYsIHRyYW5zLCBoZGEsIGtleSwgZXhjbHVkZWQ9M0RO b25lICk6CisgICAgICAgICMgZGJrZXkgaXMgYSByZXBlYXQgYWN0dWFsbHkgKG1ldGFkYXRhX2Ri a2V5ID0zRD0zRCBnZW5vbWVfYnVpbGQpCisgICAgICAgICNleGNsdWRlZCA9M0QgWyAnZGJrZXkn IF0gaWYgZXhjbHVkZWQgaXMgTm9uZSBlbHNlIGV4Y2x1ZGVkCisgICAgICAgIGV4Y2x1ZGVkID0z RCBbXSBpZiBleGNsdWRlZCBpcyBOb25lIGVsc2UgZXhjbHVkZWQKKworICAgICAgICBtZXRhZGF0 YSA9M0Qge30KICAgICAgICAgZm9yIG5hbWUsIHNwZWMgaW4gaGRhLm1ldGFkYXRhLnNwZWMuaXRl bXMoKToKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gbm90X2luY2x1ZGVkOgorICAgICAgICAgICAg aWYgbmFtZSBpbiBleGNsdWRlZDoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAg ICAgdmFsID0zRCBoZGEubWV0YWRhdGEuZ2V0KCBuYW1lICkKICAgICAgICAgICAgICNOT1RFOiBu byBmaWxlcwogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSggdmFsLCBtb2RlbC5NZXRhZGF0YUZp bGUgKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgb25seSB3 aGVuIGV4cGxpY2l0bHkgc2V0OiBmZXRjaGluZyBmaWxlcGF0aHMgY2FuIGJlIGV4cGU9Cm5zaXZl CisgICAgICAgICAgICAgICAgaWYgbm90IHRyYW5zLmFwcC5jb25maWcuZXhwb3NlX2RhdGFzZXRf cGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB2YWwg PTNEIHZhbC5maWxlX25hbWUKICAgICAgICAgICAgICNUT0RPOj8gcG9zc2libHkgc3BsaXQgdGhp cyBvZmY/CiAgICAgICAgICAgICAjIElmIG5vIHZhbHVlIGZvciBtZXRhZGF0YSwgbG9vayBpbiBk YXRhdHlwZSBmb3IgbWV0YWRhdGEuCiAgICAgICAgICAgICBlbGlmIHZhbCBpcyBOb25lIGFuZCBo YXNhdHRyKCBoZGEuZGF0YXR5cGUsIG5hbWUgKToKICAgICAgICAgICAgICAgICB2YWwgPTNEIGdl dGF0dHIoIGhkYS5kYXRhdHlwZSwgbmFtZSApCi0gICAgICAgICAgICBtZFsgbmFtZSBdID0zRCB2 YWwKKyAgICAgICAgICAgIG1ldGFkYXRhWyBuYW1lIF0gPTNEIHZhbAo9MjAKLSAgICAgICAgcmV0 dXJuIG1kCisgICAgICAgIHJldHVybiBtZXRhZGF0YQo9MjAKKyAgICAjIGFkZCB0byBzZXJpYWxp emVfbWV0YWRhdGEgYWJvdmUKKyAgICBkZWYgc2VyaWFsaXplX21ldGFfZmlsZXMoIHNlbGYsIHRy YW5zLCBoZGEsIGtleSApOgorICAgICAgICBtZXRhX2ZpbGVzID0zRCBbXQorICAgICAgICBmb3Ig bWV0YV90eXBlIGluIGhkYS5tZXRhZGF0YS5zcGVjLmtleXMoKToKKyAgICAgICAgICAgIGlmIGlz aW5zdGFuY2UoIGhkYS5tZXRhZGF0YS5zcGVjWyBtZXRhX3R5cGUgXS5wYXJhbSwgZ2FsYXh5LmRh PQp0YXR5cGVzLm1ldGFkYXRhLkZpbGVQYXJhbWV0ZXIgKToKKyAgICAgICAgICAgICAgICBtZXRh X2ZpbGVzLmFwcGVuZCggZGljdCggZmlsZV90eXBlPTNEbWV0YV90eXBlICkgKQorICAgICAgICBy ZXR1cm4gbWV0YV9maWxlcworCisgICAgI2RlZiBmaWxlX2luZm8gI1RPRE8KKyAgICAjVE9ETzog YW5kIHRvIGRhdGFzZXQgaW5zdGVhZCAocGFzc2luZyB0aHJvdWdoIG9iamVjdCBzdG9yZSkKKyAg ICBkZWYgc2VyaWFsaXplX2ZpbGVfcGF0aCggc2VsZiwgdHJhbnMsIGhkYSwga2V5ICk6CisjVE9E TzogYWxsb3cgYWRtaW4KKyAgICAgICAgaWYgdHJhbnMuYXBwLmNvbmZpZy5leHBvc2VfZGF0YXNl dF9wYXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBoZGEuZmls ZV9uYW1lCisgICAgICAgICAgICBleGNlcHQgb2JqZWN0c3RvcmUuT2JqZWN0Tm90Rm91bmQ6Cisg ICAgICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ29iamVjdHN0b3JlLk9iamVjdE5vdEZvdW5k LCBIREEgJXMuJywgaGRhLj0KaWQgKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNl cmlhbGl6ZV91cmxzKCBzZWxmLCB0cmFucywgaGRhLCBrZXkgKToKKyAgICAgICAgdXJsX2ZvciA9 M0QgZ2FsYXh5LndlYi51cmxfZm9yCisgICAgICAgIGVuY29kZWRfaWQgPTNEIHRyYW5zLnNlY3Vy aXR5LmVuY29kZV9pZCggaGRhLmlkICkKKyAgICAgICAgdXJscyA9M0QgeworICAgICAgICAgICAg J3B1cmdlJyAgICAgICAgIDogdXJsX2ZvciggY29udHJvbGxlcj0zRCdkYXRhc2V0JywgYWN0aW9u PTNEJ3A9CnVyZ2VfYXN5bmMnLCBkYXRhc2V0X2lkPTNEZW5jb2RlZF9pZCApLAorICAgICAgICAg ICAgJ2Rpc3BsYXknICAgICAgIDogdXJsX2ZvciggY29udHJvbGxlcj0zRCdkYXRhc2V0JywgYWN0 aW9uPTNEJ2Q9CmlzcGxheScsIGRhdGFzZXRfaWQ9M0RlbmNvZGVkX2lkLCBwcmV2aWV3PTNEVHJ1 ZSApLAorICAgICAgICAgICAgJ2VkaXQnICAgICAgICAgIDogdXJsX2ZvciggY29udHJvbGxlcj0z RCdkYXRhc2V0JywgYWN0aW9uPTNEJ2U9CmRpdCcsIGRhdGFzZXRfaWQ9M0RlbmNvZGVkX2lkICks CisgICAgICAgICAgICAnZG93bmxvYWQnICAgICAgOiB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ2Rh dGFzZXQnLCBhY3Rpb249M0QnZD0KaXNwbGF5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGFzZXRfaWQ9M0RlbmNvZGVkX2lkLCB0b19leHQ9M0RoPQpkYS5leHRl bnNpb24gKSwKKyAgICAgICAgICAgICdyZXBvcnRfZXJyb3InICA6IHVybF9mb3IoIGNvbnRyb2xs ZXI9M0QnZGF0YXNldCcsIGFjdGlvbj0zRCdlPQpycm9ycycsIGlkPTNEZW5jb2RlZF9pZCApLAor ICAgICAgICAgICAgJ3JlcnVuJyAgICAgICAgIDogdXJsX2ZvciggY29udHJvbGxlcj0zRCd0b29s X3J1bm5lcicsIGFjdGlvbj0KPTNEJ3JlcnVuJywgaWQ9M0RlbmNvZGVkX2lkICksCisgICAgICAg ICAgICAnc2hvd19wYXJhbXMnICAgOiB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ2RhdGFzZXQnLCBh Y3Rpb249M0Qncz0KaG93X3BhcmFtcycsIGRhdGFzZXRfaWQ9M0RlbmNvZGVkX2lkICksCisgICAg ICAgICAgICAndmlzdWFsaXphdGlvbicgOiB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ3Zpc3VhbGl6 YXRpb24nLCBhY3Rpbz0Kbj0zRCdpbmRleCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZD0zRGVuY29kZWRfaWQsIG1vZGVsPTNEJ0hpc3RvcnlEYT0KdGFzZXRBc3Nv Y2lhdGlvbicgKSwKKyAgICAgICAgICAgICdtZXRhX2Rvd25sb2FkJyA6IHVybF9mb3IoIGNvbnRy b2xsZXI9M0QnZGF0YXNldCcsIGFjdGlvbj0zRCdnPQpldF9tZXRhZGF0YV9maWxlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkYV9pZD0zRGVuY29kZWRfaWQsIG1l dGFkYXRhX25hbWU9Cj0zRCcnICksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVybHMKKwor CisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRAorY2xhc3MgSERBRGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxp emVyICk6CisgICAgIiIiCisgICAgSW50ZXJmYWNlL3NlcnZpY2Ugb2JqZWN0IGZvciB2YWxpZGF0 aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpY3Rpb25hcmllcz0KIGludG8gaGlzdG9yaWVzLgorICAg ICIiIgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgc3VwZXIoIEhE QURlc2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9t Z3IgPTNEIEhEQU1hbmFnZXIoIGFwcCApCisKKyAgICAjYXNzdW1lczogaW5jb21pbmcgZnJvbSBq c29uLmxvYWRzIGFuZCBzYW5pdGl6ZWQKICAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYg KToKKyAgICAgICAgc3VwZXIoIEhEQURlc2VyaWFsaXplciwgc2VsZiApLmFkZF9kZXNlcmlhbGl6 ZXJzKCkKICAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZSh7CiAgICAgICAgICAgICAn bmFtZScgICAgICAgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jhc2VzdHJpbmcsCi0gICAgICAgICAg ICAnZ2Vub21lX2J1aWxkJyAgOiBzZWxmLmRlc2VyaWFsaXplX2dlbm9tZV9idWlsZCwKKyAgICAg ICAgICAgICd2aXNpYmxlJyAgICAgICA6IHNlbGYuZGVzZXJpYWxpemVfYm9vbCwKKworICAgICAg ICAgICAgIyByZW1hcHBlZAorICAgICAgICAgICAgJ2dlbm9tZV9idWlsZCcgIDogbGFtYmRhIHQs IGksIGssIHY6IHNlbGYuZGVzZXJpYWxpemVfZ2Vub21lX2I9CnVpbGQoIHQsIGksICdkYmtleScs IHYgKSwKKyAgICAgICAgICAgICdtaXNjX2luZm8nICAgICA6IGxhbWJkYSB0LCBpLCBrLCB2OiBz ZWxmLmRlc2VyaWFsaXplX2Jhc2VzdHJpPQpuZyggdCwgaSwgJ2luZm8nLCB2ICksCisKKyAgICAg ICAgICAgICMgbWl4aW46IGFubm90YXRhYmxlCisgICAgICAgICAgICAnYW5ub3RhdGlvbicgICAg OiBzZWxmLmRlc2VyaWFsaXplX2Fubm90YXRpb24sCisgICAgICAgICAgICAjIG1peGluOiB0YWdn YWJsZQorICAgICAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV90YWdz LAorCisgICAgICAgICAgICAjIG1peGluOiBkZWxldGFibGUKICAgICAgICAgICAgICdkZWxldGVk JyAgICAgICA6IHNlbGYuZGVzZXJpYWxpemVfYm9vbCwKKyAgICAgICAgICAgICMgc2hhcmFibGUK ICAgICAgICAgICAgICdwdWJsaXNoZWQnICAgICA6IHNlbGYuZGVzZXJpYWxpemVfYm9vbCwKLSAg ICAgICAgICAgICNUT0RPOiB0byBtaXhpbjogYW5ub3RhdGFibGUKLSAgICAgICAgICAgICMnYW5u b3RhdGlvbicgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Fubm90YXRpb24sCi0gICAgICAgICAgICAj VE9ETzogdG8gbWl4aW46IHRhZ2dhYmxlCi0gICAgICAgICAgICAjJ3RhZ3MnICAgICAgICAgIDog bGFtYmRhIHQsIGksIGssIHY6ICwKKyAgICAgICAgICAgICdpbXBvcnRhYmxlJyAgICA6IHNlbGYu ZGVzZXJpYWxpemVfYm9vbCwKKwogICAgICAgICB9KQogICAgICAgICBzZWxmLmRlc2VyaWFsaXph YmxlX2tleXMgPTNEIHNlbGYuZGVzZXJpYWxpemVycy5rZXlzKCkKCmRpZmYgLXIgODZkMzkzYmVl MDNlZGJkNTU5MjY1Nzk1NzU2YWUzOTNmMDEwN2Q5YiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEz Zj0KNDlkYmQ4ZGIwYTQ1ZDVhODggbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKLS0t IGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy9oaXN0b3JpZXMucHkKQEAgLTkwLDMxICs5MCwyOCBAQAogICAgICAgICBzdXBlciggSGlz dG9yeU1hbmFnZXIsIHNlbGYgKS5wdXJnZSggdHJhbnMsIGhpc3RvcnksIGZsdXNoPTNEZmx1c2g9 CiwgKiprd2FyZ3MgKQo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBzZXJpYWxpemF0aW9u Ci0gICAgI1RPRE86IG1vdmUgdG8gc2VyaWFsaXplcgorICAgICNUT0RPOiBtb3ZlIHRvIHNlcmlh bGl6ZXIgKGkuZS4gaGlzdG9yeSB3aXRoIGNvbnRlbnRzIGF0dHIpCiAgICAgZGVmIF9nZXRfaGlz dG9yeV9kYXRhKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgogICAgICAgICAiIiIKICAgICAgICAg UmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBgYGhpc3RvcnlgYCBhbmQgYGBjb250ZW50 c2BgLCBzZXJpPQphbGl6ZWQKICAgICAgICAgaGlzdG9yeSBhbmQgYW4gYXJyYXkgb2Ygc2VyaWFs aXplZCBoaXN0b3J5IGNvbnRlbnRzIHJlc3BlY3RpdmVseS4KICAgICAgICAgIiIiCi0gICAgICAg ICMgaW1wb3J0IGhlcmUgcHJldmVudHMgcHJvYmxlbXMgcmVsYXRlZCB0byBjaXJjdWxhciBkZXBl bmRlY3kgYmV0dz0KZWVuIGhpc3RvcmllcyBhbmQgaGRhcyBtYW5hZ2Vycy4KLSAgICAgICAgaW1w b3J0IGdhbGF4eS5tYW5hZ2Vycy5oZGFzCi0gICAgICAgIGhkYV9tZ3IgPTNEIGdhbGF4eS5tYW5h Z2Vycy5oZGFzLkhEQU1hbmFnZXIoKQorICAgICAgICAjVE9ETzogaW5zdGFudGlhdGUgaGVyZT8g cmVhbGx5PworICAgICAgICBoaXN0b3J5X3NlcmlhbGl6ZXIgPTNEIEhpc3RvcnlTZXJpYWxpemVy KCBzZWxmLmFwcCApCisgICAgICAgIGhkYV9zZXJpYWxpemVyID0zRCBoZGFzLkhEQVNlcmlhbGl6 ZXIoIHNlbGYuYXBwICkKICAgICAgICAgY29sbGVjdGlvbl9kaWN0aWZpZXIgPTNEIGdhbGF4eS5t YW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsLmRpY3RpZnlfPQpkYXRhc2V0X2NvbGxlY3Rpb25faW5z dGFuY2UKPTIwCiAgICAgICAgIGhpc3RvcnlfZGljdGlvbmFyeSA9M0Qge30KICAgICAgICAgY29u dGVudHNfZGljdGlvbmFyaWVzID0zRCBbXQogICAgICAgICB0cnk6CisgICAgICAgICAgICBoaXN0 b3J5X2RpY3Rpb25hcnkgPTNEIGhpc3Rvcnlfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldygg dD0KcmFucywgaGlzdG9yeSwgdmlldz0zRCdkZXRhaWxlZCcgKQorCiAgICAgICAgICAgICAjZm9y IGNvbnRlbnQgaW4gaGlzdG9yeS5jb250ZW50c19pdGVyKCAqKmNvbnRlbnRzX2t3ZHMgKToKICAg ICAgICAgICAgIGZvciBjb250ZW50IGluIGhpc3RvcnkuY29udGVudHNfaXRlciggdHlwZXM9M0Rb ICdkYXRhc2V0JywgJ2RhPQp0YXNldF9jb2xsZWN0aW9uJyBdICk6Ci0gICAgICAgICAgICAgICAg aGRhX2RpY3QgPTNEIHt9CisgICAgICAgICAgICAgICAgY29udGVudHNfZGljdCA9M0Qge30KPTIw CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSggY29udGVudCwgdHJhbnMuYXBwLm1vZGVs Lkhpc3RvcnlEYXRhc2V0QXNzbz0KY2lhdGlvbiApOgotICAgICAgICAgICAgICAgICAgICB0cnk6 Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZGFfZGljdCA9M0QgaGRhX21nci5nZXRfaGRhX2Rp Y3QoIHRyYW5zLCBjb250ZW50ICkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biwgZXhjOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBmYWlsIGVudGlyZSBsaXN0 IGlmIGhkYSBlcnIncywgcmVjb3JkIGFuZCA9Cm1vdmUgb24KLSAgICAgICAgICAgICAgICAgICAg ICAgIGxvZy5leGNlcHRpb24oICdFcnJvciBib290c3RyYXBwaW5nIGhkYTogJXMnLCBleGMgKQot ICAgICAgICAgICAgICAgICAgICAgICAgaGRhX2RpY3QgPTNEIGhkYV9tZ3IuZ2V0X2hkYV9kaWN0 X3dpdGhfZXJyb3IoIHRyYW49CnMsIGNvbnRlbnQsIHN0ciggZXhjICkgKQorICAgICAgICAgICAg ICAgICAgICBjb250ZW50c19kaWN0ID0zRCBoZGFfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmll dyggdHI9CmFucywgaGRhLCB2aWV3PTNEJ2RldGFpbGVkJyApCj0yMAogICAgICAgICAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSggY29udGVudCwgdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0 Q289CmxsZWN0aW9uQXNzb2NpYXRpb24gKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAt MTI0LDE3ICsxMjEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZV90 eXBlPTNEJ2hpc3RvcnknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPTNEdHJhbnMu c2VjdXJpdHkuZW5jb2RlX2lkKCBjb250ZW50LmlkICksCiAgICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgICAgICAgICAgICAgICAgICAgICBoZGFfZGljdCA9M0QgY29sbGVjdGlvbl9kaWN0 aWZpZXIoIGRhdGFzZXRfY29sbGVjdD0KaW9uX2luc3RhbmNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgY29udGVudHNfZGljdCA9M0QgY29sbGVjdGlvbl9kaWN0aWZpZXIoIGRhdGFzZXRfY289 CmxsZWN0aW9uX2luc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5 PTNEdHJhbnMuc2VjdXJpdHksIHBhcmVudD0zRGRhdGFzZXRfY289CmxsZWN0aW9uX2luc3RhbmNl Lmhpc3RvcnksIHZpZXc9M0QiZWxlbWVudCIgKQo9MjAKICAgICAgICAgICAgICAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiwgZXhjOgogICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmV4Y2VwdGlv biggIkVycm9yIGluIGhpc3RvcnkgQVBJIGF0IGxpc3RpbmcgZGE9CnRhc2V0IGNvbGxlY3Rpb246 ICVzIiwgZXhjICkKICAgICAgICAgICAgICAgICAgICAgICAgICNUT0RPOiByZXR1cm4gc29tZSBk aWN0IHdpdGggdGhlIGVycm9yCj0yMAotICAgICAgICAgICAgICAgIGNvbnRlbnRzX2RpY3Rpb25h cmllcy5hcHBlbmQoIGhkYV9kaWN0ICkKLQotICAgICAgICAgICAgIyByZS11c2UgdGhlIGhkYXMg YWJvdmUgdG8gZ2V0IHRoZSBoaXN0b3J5IGRhdGEuLi4KLSAgICAgICAgICAgIGhpc3RvcnlfZGlj dGlvbmFyeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeV9kaWN0KCB0cmFucywgaGlzdG9yeSwgPQpjb250 ZW50c19kaWN0aW9uYXJpZXM9M0Rjb250ZW50c19kaWN0aW9uYXJpZXMgKQorICAgICAgICAgICAg ICAgIGNvbnRlbnRzX2RpY3Rpb25hcmllcy5hcHBlbmQoIGNvbnRlbnRzX2RpY3QgKQo9MjAKICAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjOgogICAgICAgICAgICAgdXNlcl9pZCA9M0Qgc3Ry KCB0cmFucy51c2VyLmlkICkgaWYgdHJhbnMudXNlciBlbHNlICcoYW5vbnltb3U9CnMpJwpAQCAt MjI2LDYgKzIyMCw4IEBACiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAgICAgICAg c3VwZXIoIEhpc3RvcnlTZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAgICAgICAg IHNlbGYuaGlzdG9yeV9tZ3IgPTNEIEhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxm LmhkYV9tZ3IgPTNEIGhkYXMuSERBTWFuYWdlciggYXBwICkKKyAgICAgICAgc2VsZi5oZGFfc2Vy aWFsaXplciA9M0QgaGRhcy5IREFTZXJpYWxpemVyKCBhcHAgKQo9MjAKICAgICAgICAgc3VtbWFy eV92aWV3ID0zRCBbCiAgICAgICAgICAgICAnaWQnLApAQCAtMjc0LDI0ICsyNzAsNDQgQEAKICAg ICAgICAgICAgICdjcmVhdGVfdGltZScgICA6IHNlbGYuc2VyaWFsaXplX2RhdGUsCiAgICAgICAg ICAgICAndXBkYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlhbGl6ZV9kYXRlLAogICAgICAgICAgICAg J3VzZXJfaWQnICAgICAgIDogc2VsZi5zZXJpYWxpemVfaWQsCi0gICAgICAgICAgICAnaGRhcycg ICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogWyB0LnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLj0K aWQgKSBmb3IgaGRhIGluIGkuZGF0YXNldHMgXSwKICAgICAgICAgICAgICdzaXplJyAgICAgICAg ICA6IGxhbWJkYSB0LCBpLCBrOiBpbnQoIGkuZ2V0X2Rpc2tfc2l6ZSgpICksCiAgICAgICAgICAg ICAnbmljZV9zaXplJyAgICAgOiBsYW1iZGEgdCwgaSwgazogaS5nZXRfZGlza19zaXplKCBuaWNl X3NpemU9Cj0zRFRydWUgKSwKLSAgICAgICAgICAgICNUT0RPOiB0byBtaXhpbnM6IGFubm90YXRh YmxlLCB0YWdnYWJsZQotICAgICAgICAgICAgJ2Fubm90YXRpb24nICAgIDogbGFtYmRhIHQsIGks IGs6IGkuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHQ9Ci5zYV9zZXNzaW9uLCB0LnVzZXIsIGkg KSwKLSAgICAgICAgICAgICd0YWdzJyAgICAgICAgICA6IGxhbWJkYSB0LCBpLCBrOiBbIHRhZy51 c2VyX3RuYW1lICsgKCAnOicgKyB0PQphZy51c2VyX3ZhbHVlIGlmIHRhZy51c2VyX3ZhbHVlIGVs c2UgJycgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIHRhZyBpbiBpLnRhZ3MgXSwKKworICAgICAgICAgICAgJ2Fubm90YXRpb24nICAgIDogc2Vs Zi5zZXJpYWxpemVfYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICd0YWdzJyAgICAgICAgICA6IHNl bGYuc2VyaWFsaXplX3RhZ3MsCiAgICAgICAgICAgICAndXJsJyAgICAgICAgICAgOiBsYW1iZGEg dCwgaSwgazogZ2FsYXh5LndlYi51cmxfZm9yKCAnaGlzdG9yeT0KJywgaWQ9M0R0LnNlY3VyaXR5 LmVuY29kZV9pZCggaS5pZCApICksCiAgICAgICAgICAgICAnY29udGVudHNfdXJsJyAgOiBsYW1i ZGEgdCwgaSwgazoKICAgICAgICAgICAgICAgICBnYWxheHkud2ViLnVybF9mb3IoICdoaXN0b3J5 X2NvbnRlbnRzJywgaGlzdG9yeV9pZD0zRHQuc2VjPQp1cml0eS5lbmNvZGVfaWQoIGkuaWQgKSAp LAogICAgICAgICAgICAgJ2VtcHR5JyAgICAgICAgIDogbGFtYmRhIHQsIGksIGs6IGxlbiggaS5k YXRhc2V0cyApIDw9M0QgMCwKPTIwCisgICAgICAgICAgICAnaGRhcycgICAgICAgICAgOiBsYW1i ZGEgdCwgaSwgazogWyB0LnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLj0KaWQgKSBmb3IgaGRhIGlu IGkuZGF0YXNldHMgXSwKICAgICAgICAgICAgICdzdGF0ZScgICAgICAgICA6IGxhbWJkYSB0LCBp LCBrOiBzZWxmLmhpc3RvcnlfbWdyLmdldF9oaXN0b3J5PQpfc3RhdGUoIHQsIGkgKSwKICAgICAg ICAgICAgICdzdGF0ZV9kZXRhaWxzJyA6IGxhbWJkYSB0LCBpLCBrOiBzZWxmLmhpc3RvcnlfbWdy LmdldF9zdGF0ZV9jPQpvdW50cyggdCwgaSApLAogICAgICAgICAgICAgJ3N0YXRlX2lkcycgICAg IDogbGFtYmRhIHQsIGksIGs6IHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X3N0YXRlX2k9CmRzKCB0LCBp ICksCisgICAgICAgICAgICAnY29udGVudHMnICAgICAgOiBzZWxmLnNlcmlhbGl6ZV9jb250ZW50 cwogICAgICAgICB9KQo9MjAKLSMjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRAorICAgIGRlZiBzZXJpYWxpemVfY29udGVu dHMoIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCBrZXkgKToKKyAgICAgICAgZm9yIGNvbnRlbnQgaW4g aGlzdG9yeS5jb250ZW50c19pdGVyKCB0eXBlcz0zRFsgJ2RhdGFzZXQnLCAnZGF0YXNlPQp0X2Nv bGxlY3Rpb24nIF0gKToKKyAgICAgICAgICAgIGNvbnRlbnRzX2RpY3QgPTNEIHt9CisgICAgICAg ICAgICBpZiBpc2luc3RhbmNlKCBjb250ZW50LCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFz ZXRBc3NvY2lhdD0KaW9uICk6CisgICAgICAgICAgICAgICAgY29udGVudHNfZGljdCA9M0Qgc2Vs Zi5oZGFfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldyggdD0KcmFucywgaGRhLCB2aWV3PTNE J2RldGFpbGVkJyApCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoIGNvbnRlbnQsIHRyYW5z LmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldENvbGxlYz0KdGlvbkFzc29jaWF0aW9uICk6CisgICAg ICAgICAgICAgICAgY29udGVudHNfZGljdCA9M0Qgc2VsZi5zZXJpYWxpemVfY29sbGVjdGlvbigg dHJhbnMsIGNvbGxlYz0KdGlvbiApCisgICAgICAgICAgICBjb250ZW50c19kaWN0aW9uYXJpZXMu YXBwZW5kKCBjb250ZW50c19kaWN0ICkKKworICAgIGRlZiBzZXJpYWxpemVfY29sbGVjdGlvbigg c2VsZiwgdHJhbnMsIGNvbGxlY3Rpb24gKToKKyAgICAgICAgc2VydmljZSA9M0QgdHJhbnMuYXBw LmRhdGFzZXRfY29sbGVjdGlvbnNfc2VydmljZQorICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25f aW5zdGFuY2UgPTNEIHNlcnZpY2UuZ2V0X2RhdGFzZXRfY29sbGVjdGlvbl9pbnM9CnRhbmNlKAor ICAgICAgICAgICAgdHJhbnM9M0R0cmFucywKKyAgICAgICAgICAgIGluc3RhbmNlX3R5cGU9M0Qn aGlzdG9yeScsCisgICAgICAgICAgICBpZD0zRHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggY29s bGVjdGlvbi5pZCApLAorICAgICAgICApCisgICAgICAgIHJldHVybiBjb2xsZWN0aW9uX2RpY3Rp ZmllciggZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLAorICAgICAgICAgICAgc2VjdXJpdHk9 M0R0cmFucy5zZWN1cml0eSwgcGFyZW50PTNEZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmM9CmUu aGlzdG9yeSwgdmlldz0zRCJlbGVtZW50IiApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIEhpc3Rv cnlEZXNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxEZXNlcmlhbGl6ZXIgKToKICAgICAiIiIKICAgICBJ bnRlcmZhY2Uvc2VydmljZSBvYmplY3QgZm9yIHZhbGlkYXRpbmcgYW5kIGRlc2VyaWFsaXppbmcg ZGljdGlvbmFyaWVzPQogaW50byBoaXN0b3JpZXMuCgpkaWZmIC1yIDg2ZDM5M2JlZTAzZWRiZDU1 OTI2NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y9CjQ5ZGJk OGRiMGE0NWQ1YTg4IGxpYi9nYWxheHkvbW9kZWwvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4 eS9tb2RlbC9fX2luaXRfXy5weQorKysgYi9saWIvZ2FsYXh5L21vZGVsL19faW5pdF9fLnB5CkBA IC0xMTExLDE1ICsxMTExLDE2IEBACiAgICAgZGVmIGFjdGl2ZV9kYXRhc2V0c19jaGlsZHJlbl9h bmRfcm9sZXMoIHNlbGYgKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19hY3RpdmVf ZGF0YXNldHNfY2hpbGRyZW5fYW5kX3JvbGVzJyk6CiAgICAgICAgICAgICBkYl9zZXNzaW9uID0z RCBvYmplY3Rfc2Vzc2lvbiggc2VsZiApCi0gICAgICAgICAgICBxdWVyeSA9M0QgZGJfc2Vzc2lv bi5xdWVyeSggSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiApLmZpbHRlcj0KKCBIaXN0b3J5RGF0 YXNldEFzc29jaWF0aW9uLnRhYmxlLmMuaGlzdG9yeV9pZCA9M0Q9M0Qgc2VsZi5pZCApLiBcCi0g ICAgICAgICAgICAgICAgZmlsdGVyKCBub3RfKCBIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uLmRl bGV0ZWQgKSApLiBcCi0gICAgICAgICAgICAgICAgb3JkZXJfYnkoIEhpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb24udGFibGUuYy5oaWQuYXNjKCkgKS4gXAotICAgICAgICAgICAgICAgIG9wdGlvbnMo Ci0gICAgICAgICAgICAgICAgICAgIGpvaW5lZGxvYWQoImNoaWxkcmVuIiksCi0gICAgICAgICAg ICAgICAgICAgIGpvaW5lZGxvYWQoImRhdGFzZXQiKSwKLSAgICAgICAgICAgICAgICAgICAgam9p bmVkbG9hZCgiZGF0YXNldC5hY3Rpb25zIiksCi0gICAgICAgICAgICAgICAgICAgIGpvaW5lZGxv YWQoImRhdGFzZXQuYWN0aW9ucy5yb2xlIiksCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgcXVlcnkgPTNEICggZGJfc2Vzc2lvbi5xdWVyeSggSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlv biApCisgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCBIaXN0b3J5RGF0YXNldEFzc29j aWF0aW9uLnRhYmxlLmMuaGlzdG9yeT0KX2lkID0zRD0zRCBzZWxmLmlkICkKKyAgICAgICAgICAg ICAgICAgICAgICAgIC5maWx0ZXIoIG5vdF8oIEhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24uZGVs ZXRlZCApPQogKQorICAgICAgICAgICAgICAgICAgICAgICAgLm9yZGVyX2J5KCBIaXN0b3J5RGF0 YXNldEFzc29jaWF0aW9uLnRhYmxlLmMuaGlkLmE9CnNjKCkgKQorICAgICAgICAgICAgICAgICAg ICAgICAgLm9wdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbmVkbG9hZCgi Y2hpbGRyZW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luZWRsb2FkKCJkYXRh c2V0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbmVkbG9hZCgiZGF0YXNldC5h Y3Rpb25zIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbmVkbG9hZCgiZGF0YXNl dC5hY3Rpb25zLnJvbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICkpCiAgICAgICAgICAg ICBzZWxmLl9hY3RpdmVfZGF0YXNldHNfY2hpbGRyZW5fYW5kX3JvbGVzID0zRCBxdWVyeS5hbGwo KQogICAgICAgICByZXR1cm4gc2VsZi5fYWN0aXZlX2RhdGFzZXRzX2NoaWxkcmVuX2FuZF9yb2xl cwo9MjAKQEAgLTE1NTEsNyArMTU1Miw5IEBACiAgICAgZGVmIGRhdGF0eXBlKCBzZWxmICk6CiAg ICAgICAgIHJldHVybiBkYXRhdHlwZXNfcmVnaXN0cnkuZ2V0X2RhdGF0eXBlX2J5X2V4dGVuc2lv biggc2VsZi5leHRlbnNpbz0KbiApCiAgICAgZGVmIGdldF9tZXRhZGF0YSggc2VsZiApOgotICAg ICAgICBpZiBub3QgaGFzYXR0ciggc2VsZiwgJ19tZXRhZGF0YV9jb2xsZWN0aW9uJyApIG9yIHNl bGYuX21ldGFkYXRhX2M9Cm9sbGVjdGlvbi5wYXJlbnQgIT0zRCBzZWxmOiAjdXNpbmcgd2Vha3Jl ZiB0byBzdG9yZSBwYXJlbnQgKHRvIHByZXZlbnQgY2lyYz0KIHJlZiksIGRvZXMgYSBTZXNzaW9u LmNsZWFyKCkgY2F1c2UgcGFyZW50IHRvIGJlIGludmFsaWRhdGVkLCB3aGlsZSBzdGlsbCBjPQpv cHlpbmcgb3ZlciB0aGlzIG5vbi1kYXRhYmFzZSBhdHRyaWJ1dGU/CisgICAgICAgICMgdXNpbmcg d2Vha3JlZiB0byBzdG9yZSBwYXJlbnQgKHRvIHByZXZlbnQgY2lyYyByZWYpLAorICAgICAgICAj ICAgZG9lcyBhIFNlc3Npb24uY2xlYXIoKSBjYXVzZSBwYXJlbnQgdG8gYmUgaW52YWxpZGF0ZWQs IHdoaWxlIHM9CnRpbGwgY29weWluZyBvdmVyIHRoaXMgbm9uLWRhdGFiYXNlIGF0dHJpYnV0ZT8K KyAgICAgICAgaWYgbm90IGhhc2F0dHIoIHNlbGYsICdfbWV0YWRhdGFfY29sbGVjdGlvbicgKSBv ciBzZWxmLl9tZXRhZGF0YV9jPQpvbGxlY3Rpb24ucGFyZW50ICE9M0Qgc2VsZjoKICAgICAgICAg ICAgIHNlbGYuX21ldGFkYXRhX2NvbGxlY3Rpb24gPTNEIE1ldGFkYXRhQ29sbGVjdGlvbiggc2Vs ZiApCiAgICAgICAgIHJldHVybiBzZWxmLl9tZXRhZGF0YV9jb2xsZWN0aW9uCiAgICAgZGVmIHNl dF9tZXRhZGF0YSggc2VsZiwgYnVuY2ggKToKQEAgLTIwNzgsNiArMjA4MSw3IEBACiAgICAgICAg ICAgICBydmFsWydleHRlbmRlZF9tZXRhZGF0YSddID0zRCBoZGEuZXh0ZW5kZWRfbWV0YWRhdGEu ZGF0YQo9MjAKICAgICAgICAgcnZhbFsgJ3BlZWsnIF0gPTNEIHRvX3VuaWNvZGUoIGhkYS5kaXNw bGF5X3BlZWsoKSApCisKICAgICAgICAgZm9yIG5hbWUsIHNwZWMgaW4gaGRhLm1ldGFkYXRhLnNw ZWMuaXRlbXMoKToKICAgICAgICAgICAgIHZhbCA9M0QgaGRhLm1ldGFkYXRhLmdldCggbmFtZSAp CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCB2YWwsIE1ldGFkYXRhRmlsZSApOgoKZGlmZiAt ciA4NmQzOTNiZWUwM2VkYmQ1NTkyNjU3OTU3NTZhZTM5M2YwMTA3ZDliIC1yIGViMjEwY2NjNmQ3 NjU0N2VjYTY5YTNmPQo0OWRiZDhkYjBhNDVkNWE4OCBsaWIvZ2FsYXh5L3dlYi9iYXNlL2NvbnRy b2xsZXIucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvYmFzZS9jb250cm9sbGVyLnB5CisrKyBiL2xp Yi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxlci5weQpAQCAtMTA4LDE3ICsxMDgsNiBAQAogICAg ICAgICAiIiIKICAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9hbGxfaWRzKCBy dmFsLCByZWN1cnNpdmU9M0RyZWN1cnNpdmUgKQo9MjAKLSAgICAjIGluY29taW5nIHBhcmFtIHZh bGlkYXRpb24KLSAgICAjIHNob3VsZCBwcm9iYWJseSBiZSBpbiBzZXAuIHNlcmlhbGl6ZXIgY2xh c3Mvb2JqZWN0IF91c2VkXyBieSBjb250cm9sPQpsZXIKLSAgICBkZWYgdmFsaWRhdGVfYW5kX3Nh bml0aXplX2Jhc2VzdHJpbmcoIHNlbGYsIGtleSwgdmFsICk6Ci0gICAgICAgIHJldHVybiB2YWxp ZGF0aW9uLnZhbGlkYXRlX2FuZF9zYW5pdGl6ZV9iYXNlc3RyaW5nKCBrZXksIHZhbCApCi0KLSAg ICBkZWYgdmFsaWRhdGVfYW5kX3Nhbml0aXplX2Jhc2VzdHJpbmdfbGlzdCggc2VsZiwga2V5LCB2 YWwgKToKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRpb24udmFsaWRhdGVfYW5kX3Nhbml0aXplX2Jh c2VzdHJpbmdfbGlzdCgga2V5LCB2YWwgKQotCi0gICAgZGVmIHZhbGlkYXRlX2Jvb2xlYW4oIHNl bGYsIGtleSwgdmFsICk6Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uLnZhbGlkYXRlX2Jvb2xl YW4oIGtleSwgdmFsICkKLQo9MjAKIFJvb3QgPTNEIEJhc2VDb250cm9sbGVyCj0yMApAQCAtNDc5 LDg4ICs0NjgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQuY29udmVyc2lvbl9tZXNz YWdlcy5QRU5ESU5HCiAgICAgICAgIHJldHVybiBOb25lCj0yMAotICAgIGRlZiBnZXRfaGRhX2Rp Y3QoIHNlbGYsIHRyYW5zLCBoZGEgKToKLSAgICAgICAgIiIiUmV0dXJuIGZ1bGwgZGV0YWlscyBv ZiB0aGlzIEhEQSBpbiBkaWN0aW9uYXJ5IGZvcm0uCi0gICAgICAgICIiIgotICAgICAgICAjcHJl Y29uZGl0aW9uOiB0aGUgdXNlcidzIGFjY2VzcyB0byB0aGlzIGhkYSBoYXMgYWxyZWFkeSBiZWVu IGNoZWM9CmtlZAotICAgICAgICAjVE9ETzo/PyBwb3N0Y29uZGl0aW9uOiBhbGwgaWRzIGFyZSBl bmNvZGVkIChpcyB0aGlzIHJlYWxseSB3aGF0IHc9CmUgd2FudCBhdCB0aGlzIGxldmVsPykKLSAg ICAgICAgZXhwb3NlX2RhdGFzZXRfcGF0aCA9M0QgdHJhbnMudXNlcl9pc19hZG1pbigpIG9yIHRy YW5zLmFwcC5jb25maWcuPQpleHBvc2VfZGF0YXNldF9wYXRoCi0gICAgICAgIGhkYV9kaWN0ID0z RCBoZGEudG9fZGljdCggdmlldz0zRCdlbGVtZW50JywgZXhwb3NlX2RhdGFzZXRfcGF0aD0zRD0K ZXhwb3NlX2RhdGFzZXRfcGF0aCApCi0gICAgICAgIGhkYV9kaWN0WyAnYXBpX3R5cGUnIF0gPTNE ICJmaWxlIgotCi0gICAgICAgICMgQWRkIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB0aGF0IGRlcGVu ZCBvbiB0cmFucyBjYW4gaGVuY2UgbXVzdCBiZT0KIGFkZGVkIGhlcmUgcmF0aGVyIHRoYW4gYXQg dGhlIG1vZGVsIGxldmVsLgotICAgICAgICBjYW5fYWNjZXNzX2hkYSA9M0QgdHJhbnMuYXBwLnNl Y3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggdHI9CmFucy5nZXRfY3VycmVudF91c2Vy X3JvbGVzKCksIGhkYS5kYXRhc2V0ICkKLSAgICAgICAgY2FuX2FjY2Vzc19oZGEgPTNEICggdHJh bnMudXNlcl9pc19hZG1pbigpIG9yIGNhbl9hY2Nlc3NfaGRhICkKLSAgICAgICAgaWYgbm90IGNh bl9hY2Nlc3NfaGRhOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2luYWNjZXNzaWJsZV9o ZGFfZGljdCggdHJhbnMsIGhkYSApCi0gICAgICAgIGhkYV9kaWN0WyAnYWNjZXNzaWJsZScgXSA9 M0QgVHJ1ZQotCi0gICAgICAgICNUT0RPOiBJJ20gdW5jbGVhciBhcyB0byB3aGljaCBhY2Nlc3Mg cGF0dGVybiBpcyByaWdodAotICAgICAgICBoZGFfZGljdFsgJ2Fubm90YXRpb24nIF0gPTNEIGhk YS5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMuc2E9Cl9zZXNzaW9uLCB0cmFucy51c2Vy LCBoZGEgKQotICAgICAgICAjYW5ub3RhdGlvbiA9M0QgZ2V0YXR0ciggaGRhLCAnYW5ub3RhdGlv bicsIGhkYS5nZXRfaXRlbV9hbm5vdGF0aW89Cm5fc3RyKCB0cmFucy5zYV9zZXNzaW9uLCB0cmFu cy51c2VyLCBoZGEgKSApCi0KLSAgICAgICAgIyAtLS0tIHJldHVybiBoZXJlIGlmIGRlbGV0ZWQg QU5EIHB1cmdlZCBPUiBjYW4ndCBhY2Nlc3MKLSAgICAgICAgcHVyZ2VkID0zRCAoIGhkYS5wdXJn ZWQgb3IgaGRhLmRhdGFzZXQucHVyZ2VkICkKLSAgICAgICAgaWYgaGRhLmRlbGV0ZWQgYW5kIHB1 cmdlZDoKLSAgICAgICAgICAgICNUT0RPOiB0b19kaWN0IHNob3VsZCByZWFsbHkgZ28gQUZURVIg dGhpcyAtIG9ubHkgc3VtbWFyeSBkYXRhCi0gICAgICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJp dHkuZW5jb2RlX2RpY3RfaWRzKCBoZGFfZGljdCApCi0KLSAgICAgICAgaWYgZXhwb3NlX2RhdGFz ZXRfcGF0aDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBoZGFfZGljdFsgJ2Zp bGVfbmFtZScgXSA9M0QgaGRhLmZpbGVfbmFtZQotICAgICAgICAgICAgZXhjZXB0IG9iamVjdHN0 b3JlLk9iamVjdE5vdEZvdW5kOgotICAgICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oICdvYmpl Y3RzdG9yZS5PYmplY3ROb3RGb3VuZCwgSERBICVzLicsIGhkYS49CmlkICkKLQotICAgICAgICBo ZGFfZGljdFsgJ2Rvd25sb2FkX3VybCcgXSA9M0QgdXJsX2ZvciggJ2hpc3RvcnlfY29udGVudHNf ZGlzcGxheScsCi0gICAgICAgICAgICBoaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNv ZGVfaWQoIGhkYS5oaXN0b3J5LmlkICksCi0gICAgICAgICAgICBoaXN0b3J5X2NvbnRlbnRfaWQg PTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkgKQotCi0gICAgICAgICMgcmVz dWJtaXR0ZWQgaXMgbm90IGEgcmVhbCBzdGF0ZQotICAgICAgICBoZGFfZGljdFsgJ3Jlc3VibWl0 dGVkJyBdID0zRCBGYWxzZQotICAgICAgICBpZiBoZGEuc3RhdGUgPTNEPTNEIHRyYW5zLmFwcC5t b2RlbC5EYXRhc2V0LnN0YXRlcy5SRVNVQk1JVFRFRDoKLSAgICAgICAgICAgIGhkYV9kaWN0WyAn c3RhdGUnIF0gPTNEIGhkYS5kYXRhc2V0LnN0YXRlCi0gICAgICAgICAgICBoZGFfZGljdFsgJ3Jl c3VibWl0dGVkJyBdID0zRCBUcnVlCi0KLSAgICAgICAgIyBpbmRlY2VzLCBhc3NvYy4gbWV0YWRh dGEgZmlsZXMsIGV0Yy4KLSAgICAgICAgbWV0YV9maWxlcyA9M0QgW10KLSAgICAgICAgZm9yIG1l dGFfdHlwZSBpbiBoZGEubWV0YWRhdGEuc3BlYy5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBpc2lu c3RhbmNlKCBoZGEubWV0YWRhdGEuc3BlY1sgbWV0YV90eXBlIF0ucGFyYW0sIEZpbGVQYXJhbT0K ZXRlciApOgotICAgICAgICAgICAgICAgIG1ldGFfZmlsZXMuYXBwZW5kKCBkaWN0KCBmaWxlX3R5 cGU9M0RtZXRhX3R5cGUgKSApCi0gICAgICAgIGlmIG1ldGFfZmlsZXM6Ci0gICAgICAgICAgICBo ZGFfZGljdFsgJ21ldGFfZmlsZXMnIF0gPTNEIG1ldGFfZmlsZXMKLQotICAgICAgICAjIGN1cnJl bnRseSwgdGhlIHZpeiByZWcgaXMgb3B0aW9uYWwgLSBoYW5kbGUgb24vb2ZmCi0gICAgICAgIGlm IHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKLSAgICAgICAgICAgIGhkYV9kaWN0 WyAndmlzdWFsaXphdGlvbnMnIF0gPTNEIHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpPQpz dHJ5LmdldF92aXN1YWxpemF0aW9ucyggdHJhbnMsIGhkYSApCi0gICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCBoZGEuZ2V0X3Zpc3VhbGl6 YXRpb25zKCkKLSAgICAgICAgI1RPRE86IGl0IG1heSBhbHNvIGJlIHdpc2VyIHRvIHJlbW92ZSBm cm9tIGhlcmUgYW5kIGFkZCBhcyBBUEkgY2FsPQpsIHRoYXQgbG9hZHMgdGhlIHZpc3VhbGl6YXRp b25zCi0gICAgICAgICMgICAgICAgICAgIHdoZW4gdGhlIHZpc3VhbGl6YXRpb25zIGJ1dHRvbiBp cyBjbGlja2VkIChpbnN0ZWFkIG9mID0KcHJlbG9hZGluZy9wcmUtY2hlY2tpbmcpCi0KLSAgICAg ICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyggaGRhX2RpY3QgKQotCi0g ICAgZGVmIGdldF9pbmFjY2Vzc2libGVfaGRhX2RpY3QoIHNlbGYsIHRyYW5zLCBoZGEgKToKLSAg ICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyh7Ci0gICAgICAgICAg ICAnaWQnICAgICAgICA6IGhkYS5pZCwKLSAgICAgICAgICAgICdoaXN0b3J5X2lkJzogaGRhLmhp c3RvcnkuaWQsCi0gICAgICAgICAgICAnaGlkJyAgICAgICA6IGhkYS5oaWQsCi0gICAgICAgICAg ICAnbmFtZScgICAgICA6IGhkYS5uYW1lLAotICAgICAgICAgICAgJ3N0YXRlJyAgICAgOiBoZGEu c3RhdGUsCi0gICAgICAgICAgICAnZGVsZXRlZCcgICA6IGhkYS5kZWxldGVkLAotICAgICAgICAg ICAgJ3Zpc2libGUnICAgOiBoZGEudmlzaWJsZSwKLSAgICAgICAgICAgICdhY2Nlc3NpYmxlJzog RmFsc2UKLSAgICAgICAgfSkKLQotICAgIGRlZiBnZXRfaGRhX2RpY3Rfd2l0aF9lcnJvciggc2Vs ZiwgdHJhbnMsIGhkYT0zRE5vbmUsIGhpc3RvcnlfaWQ9M0ROb249CmUsIGlkPTNETm9uZSwgZXJy b3JfbXNnPTNEJ0Vycm9yJyApOgotICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2Rl X2RpY3RfaWRzKHsKLSAgICAgICAgICAgICdpZCcgICAgICAgIDogaGRhLmlkIGlmIGhkYSBlbHNl IGlkLAotICAgICAgICAgICAgJ2hpc3RvcnlfaWQnOiBoZGEuaGlzdG9yeS5pZCBpZiBoZGEgZWxz ZSBoaXN0b3J5X2lkLAotICAgICAgICAgICAgJ2hpZCcgICAgICAgOiBoZGEuaGlkIGlmIGhkYSBl bHNlICcodW5rbm93biknLAotICAgICAgICAgICAgJ25hbWUnICAgICAgOiBoZGEubmFtZSBpZiBo ZGEgZWxzZSAnKHVua25vd24pJywKLSAgICAgICAgICAgICdlcnJvcicgICAgIDogZXJyb3JfbXNn LAotICAgICAgICAgICAgJ3N0YXRlJyAgICAgOiB0cmFucy5tb2RlbC5EYXRhc2V0LnN0YXRlcy5O RVcKLSAgICAgICAgfSkKLQogICAgIGRlZiBnZXRfZGlzcGxheV9hcHBzKCBzZWxmLCB0cmFucywg aGRhICk6CiAgICAgICAgIGRpc3BsYXlfYXBwcyA9M0QgW10KICAgICAgICAgZm9yIGRpc3BsYXlf YXBwIGluIGhkYS5nZXRfZGlzcGxheV9hcHBsaWNhdGlvbnMoIHRyYW5zICkuaXRlcnZhbHVlPQpz KCk6CgpkaWZmIC1yIDg2ZDM5M2JlZTAzZWRiZDU1OTI2NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIg ZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y9CjQ5ZGJkOGRiMGE0NWQ1YTg4IGxpYi9nYWxheHkvd2Vi YXBwcy9nYWxheHkvYXBpL2RhdGFzZXRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxh eHkvYXBpL2RhdGFzZXRzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2Rh dGFzZXRzLnB5CkBAIC0yLDE4ICsyLDM1IEBACiBBUEkgb3BlcmF0aW9ucyBvbiB0aGUgY29udGVu dHMgb2YgYSBoaXN0b3J5IGRhdGFzZXQuCiAiIiIKIGZyb20gZ2FsYXh5IGltcG9ydCB3ZWIKLWZy b20gZ2FsYXh5LnZpc3VhbGl6YXRpb24uZGF0YV9wcm92aWRlcnMuZ2Vub21lIGltcG9ydCBGZWF0 dXJlTG9jYXRpb25JbmRlPQp4RGF0YVByb3ZpZGVyLCBTYW1EYXRhUHJvdmlkZXIsIEJhbURhdGFQ cm92aWRlcgotZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNv bnRyb2xsZXIsIFVzZXNWaXN1YWxpemF0aW89Cm5NaXhpbiwgVXNlc0hpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb25NaXhpbgorZnJvbSBnYWxheHkud2ViLmZyYW1ld29yay5oZWxwZXJzIGltcG9ydCBp c190cnVlCitmcm9tIGdhbGF4eSBpbXBvcnQgdXRpbAorCitmcm9tIGdhbGF4eS52aXN1YWxpemF0 aW9uLmRhdGFfcHJvdmlkZXJzLmdlbm9tZSBpbXBvcnQgRmVhdHVyZUxvY2F0aW9uSW5kZT0KeERh dGFQcm92aWRlcgorZnJvbSBnYWxheHkudmlzdWFsaXphdGlvbi5kYXRhX3Byb3ZpZGVycy5nZW5v bWUgaW1wb3J0IFNhbURhdGFQcm92aWRlcgorZnJvbSBnYWxheHkudmlzdWFsaXphdGlvbi5kYXRh X3Byb3ZpZGVycy5nZW5vbWUgaW1wb3J0IEJhbURhdGFQcm92aWRlcgorZnJvbSBnYWxheHkuZGF0 YXR5cGVzIGltcG9ydCBkYXRhcHJvdmlkZXJzCisKK2Zyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRy b2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyCitmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250 cm9sbGVyIGltcG9ydCBVc2VzVmlzdWFsaXphdGlvbk1peGluCitmcm9tIGdhbGF4eS53ZWIuYmFz ZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluCiBm cm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlzdG9yeU1peGluCi1m cm9tIGdhbGF4eS53ZWIuZnJhbWV3b3JrLmhlbHBlcnMgaW1wb3J0IGlzX3RydWUKLWZyb20gZ2Fs YXh5LmRhdGF0eXBlcyBpbXBvcnQgZGF0YXByb3ZpZGVycwotZnJvbSBnYWxheHkudXRpbCBpbXBv cnQgc3RyaW5nX2FzX2Jvb2xfb3Jfbm9uZQorZnJvbSBnYWxheHkgaW1wb3J0IG1hbmFnZXJzCisK IGltcG9ydCBsb2dnaW5nCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0y MAorCiBjbGFzcyBEYXRhc2V0c0NvbnRyb2xsZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzVmlz dWFsaXphdGlvbk1peGluLCBVc2VzSD0KaXN0b3J5TWl4aW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4gKToKPTIwCisgICAgZGVm IF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgc3VwZXIoIERhdGFzZXRzQ29udHJvbGxl ciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLm1ncnMgPTNEIHV0aWwuYnVu Y2guQnVuY2goCisgICAgICAgICAgICBoaXN0b3JpZXM9M0RtYW5hZ2Vycy5oaXN0b3JpZXMuSGlz dG9yeU1hbmFnZXIoIGFwcCApLAorICAgICAgICAgICAgaGRhcz0zRG1hbmFnZXJzLmhkYXMuSERB TWFuYWdlciggYXBwICkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmhkYV9zZXJpYWxpemVyID0z RCBtYW5hZ2Vycy5oZGFzLkhEQVNlcmlhbGl6ZXIoIHNlbGYuYXBwICkKKwogICAgIEB3ZWIuZXhw b3NlX2FwaQogICAgIGRlZiBpbmRleCggc2VsZiwgdHJhbnMsICoqa3dkICk6CiAgICAgICAgICIi IgpAQCAtNTUsMTAgKzcyLDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAg IyBEZWZhdWx0OiByZXR1cm4gZGF0YXNldCBhcyBkaWN0LgogICAgICAgICAgICAgICAgIGlmIGhk YV9sZGRhID0zRD0zRCAnaGRhJzoKLSAgICAgICAgICAgICAgICAgICAgcnZhbCA9M0Qgc2VsZi5n ZXRfaGRhX2RpY3QoIHRyYW5zLCBkYXRhc2V0ICkKLSAgICAgICAgICAgICAgICAgICAgIyBhZGQg dGhlc2UgdG8gbWF0Y2ggYXBpL2hpc3RvcnlfY29udGVudHMucHksIHNob3cKLSAgICAgICAgICAg ICAgICAgICAgcnZhbFsgJ2Rpc3BsYXlfdHlwZXMnIF0gPTNEIHNlbGYuZ2V0X29sZF9kaXNwbGF5 X2FwcGxpPQpjYXRpb25zKCB0cmFucywgZGF0YXNldCApCi0gICAgICAgICAgICAgICAgICAgIHJ2 YWxbICdkaXNwbGF5X2FwcHMnIF0gPTNEIHNlbGYuZ2V0X2Rpc3BsYXlfYXBwcyggdHJhbj0Kcywg ZGF0YXNldCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhkYV9zZXJpYWxpemVy LnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaD0KZGEsIHZpZXc9M0Rrd2QuZ2V0KCAndmlldycs ICdkZXRhaWxlZCcgKSApCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAg ICAgcnZhbCA9M0QgZGF0YXNldC50b19kaWN0KCkKPTIwCkBAIC0yNjcsNyArMjgxLDcgQEAKICAg ICAgICAgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIHdpdGhvdXQgd2FybmluZy4gR2VuZXJhbGx5 LCBkYXRhIHNob3VsZCBiPQplIHByb2Nlc3NlZCBieSBpdHMKICAgICAgICAgZGF0YXR5cGUgcHJp b3IgdG8gZGlzcGxheSAodGhlIGRlZnVsdCBpZiByYXcgaXMgdW5zcGVjaWZpZWQgb3IgZXhwPQps aWNpdGx5IGZhbHNlLgogICAgICAgICAiIiIKLSAgICAgICAgcmF3ID0zRCBzdHJpbmdfYXNfYm9v bF9vcl9ub25lKCByYXcgKQorICAgICAgICByYXcgPTNEIHV0aWwuc3RyaW5nX2FzX2Jvb2xfb3Jf bm9uZSggcmF3ICkKICAgICAgICAgcnZhbCA9M0QgJycKICAgICAgICAgdHJ5OgogICAgICAgICAg ICAgaGRhID0zRCBzZWxmLmdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25fZnJvbV9pZHMo IHRyYW5zLCA9Cmhpc3RvcnlfY29udGVudF9pZCwgaGlzdG9yeV9pZCApCgpkaWZmIC1yIDg2ZDM5 M2JlZTAzZWRiZDU1OTI2NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNh NjlhM2Y9CjQ5ZGJkOGRiMGE0NWQ1YTg4IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hp c3RvcnlfY29udGVudHMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlz dG9yeV9jb250ZW50cy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0 b3J5X2NvbnRlbnRzLnB5CkBAIC0xOCw3ICsxOCwxMCBAQAo9MjAKIGZyb20gZ2FsYXh5Lm1hbmFn ZXJzIGltcG9ydCBoaXN0b3JpZXMKIGZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBoZGFzCi1m cm9tIGdhbGF4eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsIGltcG9ydCBhcGlfcGF5bG9hZF90 b19jcmVhdGVfcGFyYW1zLD0KIGRpY3RpZnlfZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlCitm cm9tIGdhbGF4eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsIGltcG9ydCBhcGlfcGF5bG9hZF90 b19jcmVhdGVfcGFyYW1zCitmcm9tIGdhbGF4eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsIGlt cG9ydCBkaWN0aWZ5X2RhdGFzZXRfY29sbGVjdGlvbl9pbj0Kc3RhbmNlCitmcm9tIGdhbGF4eS51 dGlsIGltcG9ydCB2YWxpZGF0aW9uCisKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0zRCBsb2dn aW5nLmdldExvZ2dlciggX19uYW1lX18gKQpAQCAtMzMsNiArMzYsOCBAQAogICAgICAgICAgICAg aGlzdG9yaWVzPTNEaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKSwKICAgICAgICAgICAg IGhkYXM9M0RoZGFzLkhEQU1hbmFnZXIoIGFwcCApCiAgICAgICAgICkKKyAgICAgICAgc2VsZi5o ZGFfc2VyaWFsaXplciA9M0QgaGRhcy5IREFTZXJpYWxpemVyKCBhcHAgKQorICAgICAgICBzZWxm LmhkYV9kZXNlcmlhbGl6ZXIgPTNEIGhkYXMuSERBRGVzZXJpYWxpemVyKCBhcHAgKQo9MjAKICAg ICBkZWYgX2RlY29kZV9pZCggc2VsZiwgdHJhbnMsIGlkICk6CiAgICAgICAgIHRyeToKQEAgLTY1 LDkgKzcwLDYgQEAKPTIwCiAgICAgICAgIDpydHlwZTogICAgIGxpc3QKICAgICAgICAgOnJldHVy bnM6ICAgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgc3VtbWFyeSBvciBkZXRhaWxlZCBIREEgaW5m b3JtPQphdGlvbgotICAgICAgICAuLiBzZWVhbHNvOjoKLSAgICAgICAgICAgIDpmdW5jOmBfc3Vt bWFyeV9oZGFfZGljdGAgYW5kCi0gICAgICAgICAgICA6ZnVuYzpgZ2FsYXh5LndlYi5iYXNlLmNv bnRyb2xsZXIuVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpbz0Kbk1peGluLmdldF9oZGFfZGlj dGAKICAgICAgICAgIiIiCiAgICAgICAgIHJ2YWwgPTNEIFtdCj0yMApAQCAtMTEwLDEwICsxMTIs OSBAQAogICAgICAgICAgICAgZGV0YWlsZWQgPTNEIGRldGFpbHMgPTNEPTNEICdhbGwnIG9yICgg ZW5jb2RlZF9jb250ZW50X2lkIGluIGQ9CmV0YWlscyApCj0yMAogICAgICAgICAgICAgaWYgaXNp bnN0YW5jZSggY29udGVudCwgdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXQ9 CmlvbiApOgotICAgICAgICAgICAgICAgIGlmIGRldGFpbGVkOgotICAgICAgICAgICAgICAgICAg ICBydmFsLmFwcGVuZCggc2VsZi5fZGV0YWlsZWRfaGRhX2RpY3QoIHRyYW5zLCBjb250ZW50ICk9 CiApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcnZhbC5hcHBl bmQoIHNlbGYuX3N1bW1hcnlfaGRhX2RpY3QoIHRyYW5zLCBoaXN0b3J5X2lkPQosIGNvbnRlbnQg KSApCisgICAgICAgICAgICAgICAgdmlldyA9M0QgJ2RldGFpbGVkJyBpZiBkZXRhaWxlZCBlbHNl ICdzdW1tYXJ5JworICAgICAgICAgICAgICAgIGhkYV9kaWN0ID0zRCBzZWxmLmhkYV9zZXJpYWxp emVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucyw9CiBjb250ZW50LCB2aWV3PTNEdmlldyApCisg ICAgICAgICAgICAgICAgcnZhbC5hcHBlbmQoIGhkYV9kaWN0ICkKPTIwCiAgICAgICAgICAgICBl bGlmIGlzaW5zdGFuY2UoIGNvbnRlbnQsIHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldENv bGxlYz0KdGlvbkFzc29jaWF0aW9uICk6CiAgICAgICAgICAgICAgICAgaWYgZGV0YWlsZWQ6CkBA IC0xMjMsNjIgKzEyNCwxMCBAQAo9MjAKICAgICAgICAgcmV0dXJuIHJ2YWwKPTIwCi0gICAgI1RP RE86IG1vdmUgdG8gbW9kZWwgb3IgTWl4aW4KLSAgICBkZWYgX3N1bW1hcnlfaGRhX2RpY3QoIHNl bGYsIHRyYW5zLCBlbmNvZGVkX2hpc3RvcnlfaWQsIGhkYSApOgotICAgICAgICAiIiIKLSAgICAg ICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIEhEQSBpbiBzdW1tYXJ5IGZvcm06 OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICdpZCcgICAgOiA8IHRoZSBlbmNvZGVk IGRhdGFzZXQgaWQgPiwKLSAgICAgICAgICAgICAgICAnbmFtZScgIDogPCBjdXJyZW50bHkgb25s eSByZXR1cm5zICdmaWxlJyA+LAotICAgICAgICAgICAgICAgICd0eXBlJyAgOiA8IG5hbWUgb2Yg dGhlIGRhdGFzZXQgPiwKLSAgICAgICAgICAgICAgICAndXJsJyAgIDogPCBhcGkgdXJsIHRvIHJl dHJpZXZlIHRoaXMgZGF0YXNldHMgZnVsbCBkYXRhID4sCi0gICAgICAgICAgICB9Ci0gICAgICAg ICIiIgotICAgICAgICBhcGlfdHlwZSA9M0QgImZpbGUiCi0gICAgICAgIGVuY29kZWRfaWQgPTNE IHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkKLSAgICAgICAgZW5jb2RlZF9kYXRh c2V0X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5kYXRhc2V0X2lkICk7Ci0g ICAgICAgPTIwCi0gICAgICAgICMgVE9ETzogaGFuZGxlIGZhaWxlZF9tZXRhZGF0YSBoZXJlIGFz IHdlbGwKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICdpZCcgICAgOiBlbmNvZGVkX2lk LAotICAgICAgICAgICAgJ2hpc3RvcnlfaWQnIDogZW5jb2RlZF9oaXN0b3J5X2lkLAotICAgICAg ICAgICAgJ2RhdGFzZXRfaWQnIDogZW5jb2RlZF9kYXRhc2V0X2lkLAotICAgICAgICAgICAgJ25h bWUnICA6IGhkYS5uYW1lLAotICAgICAgICAgICAgJ3R5cGUnICA6IGFwaV90eXBlLAotICAgICAg ICAgICAgJ3N0YXRlJyAgOiBoZGEuZGF0YXNldC5zdGF0ZSwKLSAgICAgICAgICAgICdkZWxldGVk JzogaGRhLmRlbGV0ZWQsCi0gICAgICAgICAgICAnZXh0ZW5zaW9uJzogaGRhLmV4dGVuc2lvbiwK LSAgICAgICAgICAgICd2aXNpYmxlJzogaGRhLnZpc2libGUsCi0gICAgICAgICAgICAncHVyZ2Vk JzogaGRhLnB1cmdlZCwKLSAgICAgICAgICAgICdyZXN1Ym1pdHRlZCc6IGhkYS5fc3RhdGUgPTNE PTNEIHRyYW5zLmFwcC5tb2RlbC5EYXRhc2V0LnN0YXRlPQpzLlJFU1VCTUlUVEVELAotICAgICAg ICAgICAgJ2hpZCcgICA6IGhkYS5oaWQsCi0gICAgICAgICAgICAnaGlzdG9yeV9jb250ZW50X3R5 cGUnIDogaGRhLmhpc3RvcnlfY29udGVudF90eXBlLAotICAgICAgICAgICAgIyd1cmwnICAgOiB1 cmxfZm9yKCAnaGlzdG9yeV9jb250ZW50X3R5cGVkJywgaGlzdG9yeV9pZD0zRGVuY289CmRlZF9o aXN0b3J5X2lkLCBpZD0zRGVuY29kZWRfaWQsIHR5cGU9M0QiZGF0YXNldCIgKSwKLSAgICAgICAg ICAgICNUT0RPOiB0aGlzIGludGVybWl0dGVudGx5IGNhdXNlcyBhIHJvdXRlcy5HZW5lcmF0aW9u RXhjZXB0aW9uPQogLSB0ZW1wIHVzZSB0aGUgbGVnYWN5IHJvdXRlIHRvIHByZXZlbnQgdGhpcwot ICAgICAgICAgICAgIyAgIHNlZSBhbHNvOiBodHRwczovL3RyZWxsby5jb20vYy81ZDZqNFg1eQot ICAgICAgICAgICAgIyAgIHNlZSBhbHNvOiBodHRwczovL3NlbnRyeS5nYWxheHlwcm9qZWN0Lm9y Zy9nYWxheHkvZ2FsYXh5LW09CmFpbi9ncm91cC8yMDc2OS9ldmVudHMvOTM1Mjg4My8KLSAgICAg ICAgICAgICd1cmwnICAgOiB1cmxfZm9yKCAnaGlzdG9yeV9jb250ZW50JywgaGlzdG9yeV9pZD0z RGVuY29kZWRfaGlzPQp0b3J5X2lkLCBpZD0zRGVuY29kZWRfaWQgKSwKLSAgICAgICAgfQotCiAg ICAgZGVmIF9fY29sbGVjdGlvbl9kaWN0KCBzZWxmLCB0cmFucywgZGF0YXNldF9jb2xsZWN0aW9u X2luc3RhbmNlLCB2aWV3PQo9M0QiY29sbGVjdGlvbiIgKToKICAgICAgICAgcmV0dXJuIGRpY3Rp ZnlfZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlKCBkYXRhc2V0X2NvbGxlY3Rpb25faW5zPQp0 YW5jZSwKICAgICAgICAgICAgIHNlY3VyaXR5PTNEdHJhbnMuc2VjdXJpdHksIHBhcmVudD0zRGRh dGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jPQplLmhpc3RvcnksIHZpZXc9M0R2aWV3ICkKPTIwCi0g ICAgZGVmIF9kZXRhaWxlZF9oZGFfZGljdCggc2VsZiwgdHJhbnMsIGhkYSApOgotICAgICAgICAi IiIKLSAgICAgICAgRGV0YWlsZWQgZGljdGlvbmFyeSBvZiBoZGEgdmFsdWVzLgotICAgICAgICAi IiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaGRhX2RpY3QgPTNEIHNlbGYuZ2V0X2hkYV9k aWN0KCB0cmFucywgaGRhICkKLSAgICAgICAgICAgIGhkYV9kaWN0WyAnZGlzcGxheV90eXBlcycg XSA9M0Qgc2VsZi5nZXRfb2xkX2Rpc3BsYXlfYXBwbGljYXRpPQpvbnMoIHRyYW5zLCBoZGEgKQot ICAgICAgICAgICAgaGRhX2RpY3RbICdkaXNwbGF5X2FwcHMnIF0gPTNEIHNlbGYuZ2V0X2Rpc3Bs YXlfYXBwcyggdHJhbnMsIGg9CmRhICkKLSAgICAgICAgICAgIHJldHVybiBoZGFfZGljdAotICAg ICAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6Ci0gICAgICAgICAgICAjIGNhdGNoIGVycm9yIGhl cmUgLSByZXR1cm5pbmcgYSBicmllZmVyIGhkYV9kaWN0IHdpdGggYW4gZXJybz0KciBhdHRyaWJ1 dGUKLSAgICAgICAgICAgIGxvZy5leGNlcHRpb24oICJFcnJvciBpbiBoaXN0b3J5IEFQSSBhdCBs aXN0aW5nIGNvbnRlbnRzIHdpdGggPQpoaXN0b3J5ICVzLCBoZGEgJXM6ICglcykgJXMiLAotICAg ICAgICAgICAgICAgIGhkYS5oaXN0b3J5X2lkLCBoZGEuaWQsIHR5cGUoIGV4YyApLCBzdHIoIGV4 YyApICkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oZGFfZGljdF93aXRoX2Vycm9yKCB0 cmFucywgaGRhPTNEaGRhLCBlcnJvcl9tPQpzZz0zRHN0ciggZXhjICkgKQotCiAgICAgQGV4cG9z ZV9hcGlfYW5vbnltb3VzCiAgICAgZGVmIHNob3coIHNlbGYsIHRyYW5zLCBpZCwgaGlzdG9yeV9p ZCwgKiprd2QgKToKICAgICAgICAgIiIiCkBAIC0xOTQsNyArMTQzLDYgQEAKPTIwCiAgICAgICAg IDpydHlwZTogICAgIGRpY3QKICAgICAgICAgOnJldHVybnM6ICAgZGljdGlvbmFyeSBjb250YWlu aW5nIGRldGFpbGVkIEhEQSBpbmZvcm1hdGlvbgotICAgICAgICAuLiBzZWVhbHNvOjogOmZ1bmM6 YGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyLlVzZXNIaXN0b3J5RGF0YXNldEE9CnNzb2NpYXRp b25NaXhpbi5nZXRfaGRhX2RpY3RgCiAgICAgICAgICIiIgogICAgICAgICBjb250ZW50c190eXBl ID0zRCBrd2QuZ2V0KCd0eXBlJywgJ2RhdGFzZXQnKQogICAgICAgICBpZiBjb250ZW50c190eXBl ID0zRD0zRCAnZGF0YXNldCc6CkBAIC0yMDQsNiArMTUyLDEyIEBACiAgICAgICAgIGVsc2U6CiAg ICAgICAgICAgICByZXR1cm4gc2VsZi5fX2hhbmRsZV91bmtub3duX2NvbnRlbnRzX3R5cGUoIHRy YW5zLCBjb250ZW50c190eT0KcGUgKQo9MjAKKyAgICBkZWYgX19zaG93X2RhdGFzZXQoIHNlbGYs IHRyYW5zLCBpZCwgKiprd2QgKToKKyAgICAgICAgaGRhID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nl c3NpYmxlX2J5X2lkKCB0cmFucywgc2VsZi5fZGVjb2RlX2lkKCB0PQpyYW5zLCBpZCApLCB0cmFu cy51c2VyICkKKyAgICAgICAgI2lmIGhkYS5oaXN0b3J5LmlkICE9M0Qgc2VsZi5fZGVjb2RlX2lk KCB0cmFucywgaGlzdG9yeV9pZCApOgorICAgICAgICAjICAgIHJhaXNlIGV4Y2VwdGlvbnMuT2Jq ZWN0Tm90Rm91bmQoICdkYXRhc2V0IHdhcyBub3QgZm91bmQgaW4gdGg9CmlzIGhpc3RvcnknICkK KyAgICAgICAgcmV0dXJuIHNlbGYuaGRhX3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRy YW5zLCBoZGEsIHZpZXc9M0RrPQp3ZC5nZXQoICd2aWV3JywgJ2RldGFpbGVkJyApICkKKwogICAg IGRlZiBfX3Nob3dfZGF0YXNldF9jb2xsZWN0aW9uKCBzZWxmLCB0cmFucywgaWQsIGhpc3Rvcnlf aWQsICoqa3dkICk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlcnZpY2UgPTNEIHRyYW5z LmFwcC5kYXRhc2V0X2NvbGxlY3Rpb25zX3NlcnZpY2UKQEAgLTIxOCwxNSArMTcyLDYgQEAKICAg ICAgICAgICAgIHRyYW5zLnJlc3BvbnNlLnN0YXR1cyA9M0QgNTAwCiAgICAgICAgICAgICByZXR1 cm4geyAnZXJyb3InOiBzdHIoIGUgKSB9Cj0yMAotICAgIGRlZiBfX3Nob3dfZGF0YXNldCggc2Vs ZiwgdHJhbnMsIGlkLCAqKmt3ZCApOgotICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmFj Y2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLl9kZWNvZGVfaWQoIHQ9CnJhbnMsIGlkICksIHRy YW5zLnVzZXIgKQotICAgICAgICAjaWYgaGRhLmhpc3RvcnkuaWQgIT0zRCBzZWxmLl9kZWNvZGVf aWQoIHRyYW5zLCBoaXN0b3J5X2lkICk6Ci0gICAgICAgICMgICAgcmFpc2UgZXhjZXB0aW9ucy5P YmplY3ROb3RGb3VuZCggJ2RhdGFzZXQgd2FzIG5vdCBmb3VuZCBpbiB0aD0KaXMgaGlzdG9yeScg KQotICAgICAgICBoZGFfZGljdCA9M0Qgc2VsZi5nZXRfaGRhX2RpY3QoIHRyYW5zLCBoZGEgKQot ICAgICAgICBoZGFfZGljdFsgJ2Rpc3BsYXlfdHlwZXMnIF0gPTNEIHNlbGYuZ2V0X29sZF9kaXNw bGF5X2FwcGxpY2F0aW9ucyg9CiB0cmFucywgaGRhICkKLSAgICAgICAgaGRhX2RpY3RbICdkaXNw bGF5X2FwcHMnIF0gPTNEIHNlbGYuZ2V0X2Rpc3BsYXlfYXBwcyggdHJhbnMsIGhkYSApCi0gICAg ICAgIHJldHVybiBoZGFfZGljdAotCiAgICAgQGV4cG9zZV9hcGlfYW5vbnltb3VzCiAgICAgZGVm IGNyZWF0ZSggc2VsZiwgdHJhbnMsIGhpc3RvcnlfaWQsIHBheWxvYWQsICoqa3dkICk6CiAgICAg ICAgICIiIgpAQCAtMzI2LDExICsyNzEsNyBAQAogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZs dXNoKCkKICAgICAgICAgaWYgbm90IGhkYToKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAg ICAgICNUT0RPOiBkdXBsaWNhdGUgY29kZSAtIHVzZSBhIHNlcmlhbGl6ZXIgd2l0aCBhIHZpZXcK LSAgICAgICAgaGRhX2RpY3QgPTNEIHNlbGYuZ2V0X2hkYV9kaWN0KCB0cmFucywgaGRhICkKLSAg ICAgICAgaGRhX2RpY3RbICdkaXNwbGF5X3R5cGVzJyBdID0zRCBzZWxmLmdldF9vbGRfZGlzcGxh eV9hcHBsaWNhdGlvbnMoPQogdHJhbnMsIGhkYSApCi0gICAgICAgIGhkYV9kaWN0WyAnZGlzcGxh eV9hcHBzJyBdID0zRCBzZWxmLmdldF9kaXNwbGF5X2FwcHMoIHRyYW5zLCBoZGEgKQotICAgICAg ICByZXR1cm4gaGRhX2RpY3QKKyAgICAgICAgcmV0dXJuIHNlbGYuaGRhX3NlcmlhbGl6ZXIuc2Vy aWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBoZGEsIHZpZXc9M0RrPQp3ZC5nZXQoICd2aWV3JywgJ2Rl dGFpbGVkJyApICkKPTIwCiAgICAgZGVmIF9fY3JlYXRlX2RhdGFzZXRfY29sbGVjdGlvbiggc2Vs ZiwgdHJhbnMsIGhpc3RvcnksIHBheWxvYWQsICoqa3dkID0KKToKICAgICAgICAgc291cmNlID0z RCBrd2QuZ2V0KCJzb3VyY2UiLCAibmV3X2NvbGxlY3Rpb24iKQpAQCAtMzg5LDM4ICszMzAsNDQg QEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9faGFuZGxlX3Vua25vd25fY29udGVudHNfdHlw ZSggdHJhbnMsIGNvbnRlbnRzX3R5PQpwZSApCj0yMAogICAgIGRlZiBfX3VwZGF0ZV9kYXRhc2V0 KCBzZWxmLCB0cmFucywgaGlzdG9yeV9pZCwgaWQsIHBheWxvYWQsICoqa3dkICk6Ci0gICAgICAg IGNoYW5nZWQgPTNEIHt9Ci0gICAgICAgICMgYW5vbiB1c2VyCisgICAgICAgICMgYW5vbiB1c2Vy OiBlbnN1cmUgdGhhdCBoaXN0b3J5IGlkcyBtYXRjaCB1cCBhbmQgdGhlIGhpc3RvcnkgaXMgdD0K aGUgY3VycmVudCwKKyAgICAgICAgIyAgIGNoZWNrIGZvciB1cGxvYWRpbmcsIGFuZCB1c2Ugb25s eSB0aGUgc3Vic2V0IG9mIGF0dHJpYnV0ZSBrZXlzPQogbWFuaXB1bGF0YWJsZSBieSBhbm9uIHVz ZXJzCiAgICAgICAgIGlmIHRyYW5zLnVzZXIgPTNEPTNEIE5vbmU6Ci0gICAgICAgICAgICBpZiBo aXN0b3J5X2lkICE9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5Lmlk ID0KKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkF1dGhlbnRpY2F0aW9uUmVx dWlyZWQoICdZb3UgbXVzdCBiZSBsb2dnPQplZCBpbiB0byB1cGRhdGUgdGhpcyBoaXN0b3J5JyAp CisgICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmJ5X2lkKCB0cmFucywgc2VsZi5f ZGVjb2RlX2lkKCB0cmFucywgaT0KZCApICkKKyAgICAgICAgICAgIGlmIGhkYS5oaXN0b3J5ICE9 M0QgdHJhbnMuaGlzdG9yeToKKyAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkF1dGhl bnRpY2F0aW9uUmVxdWlyZWQoICdZb3UgbXVzdCBiZSBsb2dnPQplZCBpbiB0byB1cGRhdGUgdGhp cyBkYXRhc2V0JyApCisgICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmVycm9yX2lm X3VwbG9hZGluZyggdHJhbnMsIGhkYSApCisKICAgICAgICAgICAgIGFub25fYWxsb3dlZF9wYXls b2FkID0zRCB7fQogICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIHBheWxvYWQ6CiAgICAgICAg ICAgICAgICAgYW5vbl9hbGxvd2VkX3BheWxvYWRbICdkZWxldGVkJyBdID0zRCBwYXlsb2FkWyAn ZGVsZXRlZCcgXQogICAgICAgICAgICAgaWYgJ3Zpc2libGUnIGluIHBheWxvYWQ6CiAgICAgICAg ICAgICAgICAgYW5vbl9hbGxvd2VkX3BheWxvYWRbICd2aXNpYmxlJyBdID0zRCBwYXlsb2FkWyAn dmlzaWJsZScgXQotICAgICAgICAgICAgcGF5bG9hZCA9M0Qgc2VsZi5fdmFsaWRhdGVfYW5kX3Bh cnNlX3VwZGF0ZV9wYXlsb2FkKCBhbm9uX2FsbG89CndlZF9wYXlsb2FkICkKKyAgICAgICAgICAg IHBheWxvYWQgPTNEIGFub25fYWxsb3dlZF9wYXlsb2FkCj0yMAotICAgICAgICAgICAgaGRhID0z RCBzZWxmLm1ncnMuaGRhcy5ieV9pZCggdHJhbnMsIHNlbGYuX2RlY29kZV9pZCggdHJhbnMsIGk9 CmQgKSApCi0gICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmVycm9yX2lmX3VwbG9h ZGluZyggdHJhbnMsIGhkYSApCi0gICAgICAgICAgICBpZiBoZGEuaGlzdG9yeSAhPTNEIHRyYW5z Lmhpc3Rvcnk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5BdXRoZW50aWNhdGlv blJlcXVpcmVkKCAnWW91IG11c3QgYmUgbG9nZz0KZWQgaW4gdG8gdXBkYXRlIHRoaXMgZGF0YXNl dCcgKQorICAgICAgICAjIGxvZ2dlZCBpbiB1c2VyOiB1c2UgZnVsbCBwYXlsb2FkLCBjaGVjayBz dGF0ZSBpZiBkZWxldGluZywgYW5kIG09CmFrZSBzdXJlIHRoZSBoaXN0b3J5IGlzIHRoZWlycwor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGRhID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3Np YmxlX2J5X2lkKCB0cmFucywgc2VsZi5fZGVjb2RlX2k9CmQoIHRyYW5zLCBpZCApLCB0cmFucy51 c2VyICkKKyAgICAgICAgICAgIHNlbGYubWdycy5oaXN0b3JpZXMuZXJyb3JfdW5sZXNzX293bmVy KCB0cmFucywgaGRhLmhpc3RvcnksIHRyPQphbnMudXNlciApCj0yMAotICAgICAgICBlbHNlOgot ICAgICAgICAgICAgcGF5bG9hZCA9M0Qgc2VsZi5fdmFsaWRhdGVfYW5kX3BhcnNlX3VwZGF0ZV9w YXlsb2FkKCBwYXlsb2FkICkKICAgICAgICAgICAgICMgb25seSBjaGVja19zdGF0ZSBpZiBub3Qg ZGVsZXRpbmcsIG90aGVyd2lzZSBjYW5ub3QgZGVsZXRlIHVwPQpsb2FkaW5nIGZpbGVzCiAgICAg ICAgICAgICBjaGVja19zdGF0ZSA9M0Qgbm90IHBheWxvYWQuZ2V0KCAnZGVsZXRlZCcsIEZhbHNl ICkKLSAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCgg dHJhbnMsIHNlbGYuX2RlY29kZV9pPQpkKCB0cmFucywgaWQgKSwgdHJhbnMudXNlciApCiAgICAg ICAgICAgICBpZiBjaGVja19zdGF0ZToKICAgICAgICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdy cy5oZGFzLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhkYSApCi0gICAgICAgICAgICAjaGRh ID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWQsIGNoZWNrX293bmVyc2hpcD0zRFRydWUs ID0KY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUsIGNoZWNrX3N0YXRlPTNEY2hlY2tfc3RhdGUgKQo9 MjAKKyAgICAgICAgIyBtYWtlIHRoZSBhY3R1YWwgY2hhbmdlcworICAgICAgICAjVE9ETzogdG8g ZGVzZXJpYWxpemVyCisgICAgICAgICNUT0RPOiBpcyB0aGlzIGlmIHN0aWxsIG5lZWRlZD8KICAg ICAgICAgaWYgaGRhIGFuZCBpc2luc3RhbmNlKCBoZGEsIHRyYW5zLm1vZGVsLkhpc3RvcnlEYXRh c2V0QXNzb2NpYXRpb24gPQopOgotICAgICAgICAgICAgY2hhbmdlZCA9M0Qgc2VsZi5zZXRfaGRh X2Zyb21fZGljdCggdHJhbnMsIGhkYSwgcGF5bG9hZCApCisgICAgICAgICAgICAjcGF5bG9hZCA9 M0Qgc2VsZi5fdmFsaWRhdGVfYW5kX3BhcnNlX3VwZGF0ZV9wYXlsb2FkKCBwYXlsb2FkICkKKyAg ICAgICAgICAgICNjaGFuZ2VkID0zRCBzZWxmLnNldF9oZGFfZnJvbV9kaWN0KCB0cmFucywgaGRh LCBwYXlsb2FkICkKKyAgICAgICAgICAgIHNlbGYuaGRhX2Rlc2VyaWFsaXplci5kZXNlcmlhbGl6 ZSggdHJhbnMsIGhkYSwgcGF5bG9hZCApCisgICAgICAgICAgICAjVE9ETzogdGhpcyBzaG91bGQg YmUgYW4gZWZmZWN0IG9mIGRlbGV0aW5nIHRoZSBoZGEKICAgICAgICAgICAgIGlmIHBheWxvYWQu Z2V0KCAnZGVsZXRlZCcsIEZhbHNlICk6CiAgICAgICAgICAgICAgICAgc2VsZi5zdG9wX2hkYV9j cmVhdGluZ19qb2IoIGhkYSApCisgICAgICAgICAgICByZXR1cm4gc2VsZi5oZGFfc2VyaWFsaXpl ci5zZXJpYWxpemVfdG9fdmlldyggdHJhbnMsIGhkYSwgdmlldz0KPTNEa3dkLmdldCggJ3ZpZXcn LCAnZGV0YWlsZWQnICkgKQo9MjAKLSAgICAgICAgcmV0dXJuIGNoYW5nZWQKKyAgICAgICAgcmV0 dXJuIHt9Cj0yMAogICAgIGRlZiBfX3VwZGF0ZV9kYXRhc2V0X2NvbGxlY3Rpb24oIHNlbGYsIHRy YW5zLCBoaXN0b3J5X2lkLCBpZCwgcGF5bG9hZCw9CiAqKmt3ZCApOgogICAgICAgICByZXR1cm4g dHJhbnMuYXBwLmRhdGFzZXRfY29sbGVjdGlvbnNfc2VydmljZS51cGRhdGUoIHRyYW5zLCAiaGlz dG89CnJ5IiwgaWQsIHBheWxvYWQgKQpAQCAtNDczLDY4ICs0MjAsNzQgQEAKICAgICAgICAgc2Vs Zi5tZ3JzLmhpc3Rvcmllcy5lcnJvcl91bmxlc3Nfb3duZXJzaGlwKCB0cmFucywgaGRhLmhpc3Rv cnksIHRyPQphbnMudXNlciApCiAgICAgICAgIHNlbGYubWdycy5oZGFzLmVycm9yX2lmX3VwbG9h ZGluZyggdHJhbnMsIGhkYSApCj0yMAotICAgICAgICBydmFsID0zRCB7ICdpZCcgOiBpZCB9Ci0g ICAgICAgIGhkYS5kZWxldGVkID0zRCBUcnVlCiAgICAgICAgIGlmIHB1cmdlOgotICAgICAgICAg ICAgaWYgbm90IHRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlOgotICAg ICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmlnRG9lc05vdEFsbG93RXhjZXB0aW9u KCAnVGhpcyBpbnN0YW49CmNlIGRvZXMgbm90IGFsbG93IHVzZXIgZGF0YXNldCBwdXJnaW5nJyAp Ci0gICAgICAgICAgICBoZGEucHVyZ2VkID0zRCBUcnVlCi0gICAgICAgICAgICB0cmFucy5zYV9z ZXNzaW9uLmFkZCggaGRhICkKLSAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQot ICAgICAgICAgICAgaWYgaGRhLmRhdGFzZXQudXNlcl9jYW5fcHVyZ2U6Ci0gICAgICAgICAgICAg ICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBoZGEuZGF0YXNldC5mdWxsX2RlbGV0ZSgpCi0g ICAgICAgICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBoZGEuZGF0YXNldCApCi0g ICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAg ICAgICAgICAgIyBmbHVzaCBub3cgdG8gcHJlc2VydmUgZGVsZXRlZCBzdGF0ZSBpbiBjYXNlIG9m IGxhdGVyIGludD0KZXJydXB0aW9uCi0gICAgICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5m bHVzaCgpCi0gICAgICAgICAgICBydmFsWyAncHVyZ2VkJyBdID0zRCBUcnVlCisgICAgICAgICAg ICBzZWxmLm1ncnMuaGRhcy5wdXJnZSggdHJhbnMsIGhkYSApCisgICAgICAgIGVsc2U6CisgICAg ICAgICAgICBzZWxmLm1ncnMuaGRhcy5kZWxldGUoIHRyYW5zLCBoZGEgKQorICAgICAgICByZXR1 cm4gc2VsZi5oZGFfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldyggdHJhbnMsIGhkYSwgdmll dz0zRGs9CndkLmdldCggJ3ZpZXcnLCAnZGV0YWlsZWQnICkgKQo9MjAKLSAgICAgICAgc2VsZi5z dG9wX2hkYV9jcmVhdGluZ19qb2IoIGhkYSApCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1 c2goKQorICAgICAgICAjcnZhbCA9M0QgeyAnaWQnIDogaWQgfQorICAgICAgICAjaGRhLmRlbGV0 ZWQgPTNEIFRydWUKKyAgICAgICAgI2lmIHB1cmdlOgorICAgICAgICAjICAgIGlmIG5vdCB0cmFu cy5hcHAuY29uZmlnLmFsbG93X3VzZXJfZGF0YXNldF9wdXJnZToKKyAgICAgICAgIyAgICAgICAg cmFpc2UgZXhjZXB0aW9ucy5Db25maWdEb2VzTm90QWxsb3dFeGNlcHRpb24oICdUaGlzIGluc3Rh PQpuY2UgZG9lcyBub3QgYWxsb3cgdXNlciBkYXRhc2V0IHB1cmdpbmcnICkKKyAgICAgICAgIyAg ICBoZGEucHVyZ2VkID0zRCBUcnVlCisgICAgICAgICMgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQo IGhkYSApCisgICAgICAgICMgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgICMg ICAgaWYgaGRhLmRhdGFzZXQudXNlcl9jYW5fcHVyZ2U6CisgICAgICAgICMgICAgICAgIHRyeToK KyAgICAgICAgIyAgICAgICAgICAgIGhkYS5kYXRhc2V0LmZ1bGxfZGVsZXRlKCkKKyAgICAgICAg IyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBoZGEuZGF0YXNldCApCisgICAgICAg ICMgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgIyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyAg ICAgICAgIyBmbHVzaCBub3cgdG8gcHJlc2VydmUgZGVsZXRlZCBzdGF0ZSBpbiBjYXNlIG9mIGxh dGVyIGluPQp0ZXJydXB0aW9uCisgICAgICAgICMgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1 c2goKQorICAgICAgICAjICAgIHJ2YWxbICdwdXJnZWQnIF0gPTNEIFRydWUKKyAgICAgICAgIwor ICAgICAgICAjc2VsZi5zdG9wX2hkYV9jcmVhdGluZ19qb2IoIGhkYSApCisgICAgICAgICN0cmFu cy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgIworICAgICAgICAjcnZhbFsgJ2RlbGV0ZWQn IF0gPTNEIFRydWUKKyAgICAgICAgI3JldHVybiBydmFsCj0yMAotICAgICAgICBydmFsWyAnZGVs ZXRlZCcgXSA9M0QgVHJ1ZQotICAgICAgICByZXR1cm4gcnZhbAotCi0gICAgZGVmIF92YWxpZGF0 ZV9hbmRfcGFyc2VfdXBkYXRlX3BheWxvYWQoIHNlbGYsIHBheWxvYWQgKToKLSAgICAgICAgIiIi Ci0gICAgICAgIFZhbGlkYXRlIGFuZCBwYXJzZSBpbmNvbW1pbmcgZGF0YSBwYXlsb2FkIGZvciBh biBIREEuCi0gICAgICAgICIiIgotICAgICAgICAjIFRoaXMgbGF5ZXIgaGFuZGxlcyAobW9zdCBv ZiB0aGUgc3RyaWN0ZXIgaWRpb3QgcHJvb2ZpbmcpOgotICAgICAgICAjICAgLSB1bmtub3duL3Vu YWxsb3dlZCBrZXlzCi0gICAgICAgICMgICAtIGNoYW5naW5nIGRhdGEga2V5cyBmcm9tIGFwaSBr ZXkgdG8gYXR0cmlidXRlIG5hbWUKLSAgICAgICAgIyAgIC0gcHJvdGVjdGlvbiBhZ2FpbnN0IGJh ZCBkYXRhIGZvcm0vdHlwZQotICAgICAgICAjICAgLSBwcm90ZWN0aW9uIGFnYWluc3QgbWFsaWNp b3VzIGRhdGEgY29udGVudAotICAgICAgICAjIGFsbCBvdGhlciBjb252ZXJzaW9ucyBhbmQgcHJv Y2Vzc2luZyAoc3VjaCBhcyBwZXJtaXNzaW9ucywgZXRjLik9CiBzaG91bGQgaGFwcGVuIGRvd24g dGhlIGxpbmUKLQotICAgICAgICAjIGtleXMgbGlzdGVkIGhlcmUgZG9uJ3QgZXJyb3Igd2hlbiBh dHRlbXB0aW5nIHRvIHNldCwgYnV0IGZhaWwgc2k9CmxlbnRseQotICAgICAgICAjICAgdGhpcyBh bGxvd3MgUFVUJ2luZyBhbiBlbnRpcmUgbW9kZWwgYmFjayB0byB0aGUgc2VydmVyIHdpdGhvdXQ9 CiBhdHRyaWJ1dGUgZXJyb3JzIG9uIHVuZWRpdGFibGUgYXR0cnMKLSAgICAgICAgdmFsaWRfYnV0 X3VuZWRpdGFibGVfa2V5cyA9M0QgKAotICAgICAgICAgICAgJ2lkJywgJ25hbWUnLCAndHlwZScs ICdhcGlfdHlwZScsICdtb2RlbF9jbGFzcycsICdoaXN0b3J5X2lkJyw9CiAnaGlkJywKLSAgICAg ICAgICAgICdhY2Nlc3NpYmxlJywgJ3B1cmdlZCcsICdzdGF0ZScsICdkYXRhX3R5cGUnLCAnZmls ZV9leHQnLCAnZmlsPQplX3NpemUnLCAnbWlzY19ibHVyYicsCi0gICAgICAgICAgICAnZG93bmxv YWRfdXJsJywgJ3Zpc3VhbGl6YXRpb25zJywgJ2Rpc3BsYXlfYXBwcycsICdkaXNwbGF5X3R5cD0K ZXMnLAotICAgICAgICAgICAgJ21ldGFkYXRhX2Ria2V5JywgJ21ldGFkYXRhX2NvbHVtbl9uYW1l cycsICdtZXRhZGF0YV9jb2x1bW5fdHk9CnBlcycsICdtZXRhZGF0YV9jb2x1bW5zJywKLSAgICAg ICAgICAgICdtZXRhZGF0YV9jb21tZW50X2xpbmVzJywgJ21ldGFkYXRhX2RhdGFfbGluZXMnCi0g ICAgICAgICkKLSAgICAgICAgdmFsaWRhdGVkX3BheWxvYWQgPTNEIHt9Ci0gICAgICAgIGZvciBr ZXksIHZhbCBpbiBwYXlsb2FkLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToK LSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYga2V5IGluICggJ25hbWUn LCAnZ2Vub21lX2J1aWxkJywgJ21pc2NfaW5mbycsICdhbm5vdGF0aW9uJyA9Cik6Ci0gICAgICAg ICAgICAgICAgdmFsID0zRCBzZWxmLnZhbGlkYXRlX2FuZF9zYW5pdGl6ZV9iYXNlc3RyaW5nKCBr ZXksIHZhbCApCi0gICAgICAgICAgICAgICAgI1RPRE86IG5lZWQgYmV0dGVyIHJlbWFwIHN5c3Rl bSBvciBlbGltaW5hdGUgdGhlIG5lZWQgYWx0bz0KZ2V0aGVyCi0gICAgICAgICAgICAgICAga2V5 ID0zRCAnZGJrZXknIGlmIGtleSA9M0Q9M0QgJ2dlbm9tZV9idWlsZCcgZWxzZSBrZXkKLSAgICAg ICAgICAgICAgICBrZXkgPTNEICdpbmZvJyAgaWYga2V5ID0zRD0zRCAnbWlzY19pbmZvJyBlbHNl IGtleQotICAgICAgICAgICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkWyBrZXkgXSA9M0QgdmFsCi0g ICAgICAgICAgICBpZiBrZXkgaW4gKCAnZGVsZXRlZCcsICd2aXNpYmxlJyApOgotICAgICAgICAg ICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkWyBrZXkgXSA9M0Qgc2VsZi52YWxpZGF0ZV9ib29sZWFu KCBrZXksIHY9CmFsICkKLSAgICAgICAgICAgIGVsaWYga2V5ID0zRD0zRCAndGFncyc6Ci0gICAg ICAgICAgICAgICAgdmFsaWRhdGVkX3BheWxvYWRbIGtleSBdID0zRCBzZWxmLnZhbGlkYXRlX2Fu ZF9zYW5pdGl6ZV9iYT0Kc2VzdHJpbmdfbGlzdCgga2V5LCB2YWwgKQotICAgICAgICAgICAgZWxp ZiBrZXkgbm90IGluIHZhbGlkX2J1dF91bmVkaXRhYmxlX2tleXM6Ci0gICAgICAgICAgICAgICAg cGFzcwotICAgICAgICAgICAgICAgICNsb2cud2FybiggJ3Vua25vd24ga2V5OiAlcycsIHN0cigg a2V5ICkgKQotICAgICAgICByZXR1cm4gdmFsaWRhdGVkX3BheWxvYWQKKyAgICAjZGVmIF92YWxp ZGF0ZV9hbmRfcGFyc2VfdXBkYXRlX3BheWxvYWQoIHNlbGYsIHBheWxvYWQgKToKKyAgICAjICAg ICIiIgorICAgICMgICAgVmFsaWRhdGUgYW5kIHBhcnNlIGluY29tbWluZyBkYXRhIHBheWxvYWQg Zm9yIGFuIEhEQS4KKyAgICAjICAgICIiIgorICAgICMgICAgIyBUaGlzIGxheWVyIGhhbmRsZXMg KG1vc3Qgb2YgdGhlIHN0cmljdGVyIGlkaW90IHByb29maW5nKToKKyAgICAjICAgICMgICAtIHVu a25vd24vdW5hbGxvd2VkIGtleXMKKyAgICAjICAgICMgICAtIGNoYW5naW5nIGRhdGEga2V5cyBm cm9tIGFwaSBrZXkgdG8gYXR0cmlidXRlIG5hbWUKKyAgICAjICAgICMgICAtIHByb3RlY3Rpb24g YWdhaW5zdCBiYWQgZGF0YSBmb3JtL3R5cGUKKyAgICAjICAgICMgICAtIHByb3RlY3Rpb24gYWdh aW5zdCBtYWxpY2lvdXMgZGF0YSBjb250ZW50CisgICAgIyAgICAjIGFsbCBvdGhlciBjb252ZXJz aW9ucyBhbmQgcHJvY2Vzc2luZyAoc3VjaCBhcyBwZXJtaXNzaW9ucywgZXRjLj0KKSBzaG91bGQg aGFwcGVuIGRvd24gdGhlIGxpbmUKKyAgICAjCisgICAgIyAgICAjIGtleXMgbGlzdGVkIGhlcmUg ZG9uJ3QgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHNldCwgYnV0IGZhaWwgcz0KaWxlbnRseQor ICAgICMgICAgIyAgIHRoaXMgYWxsb3dzIFBVVCdpbmcgYW4gZW50aXJlIG1vZGVsIGJhY2sgdG8g dGhlIHNlcnZlciB3aXRob3U9CnQgYXR0cmlidXRlIGVycm9ycyBvbiB1bmVkaXRhYmxlIGF0dHJz CisgICAgIyAgICB2YWxpZF9idXRfdW5lZGl0YWJsZV9rZXlzID0zRCAoCisgICAgIyAgICAgICAg J2lkJywgJ25hbWUnLCAndHlwZScsICdhcGlfdHlwZScsICdtb2RlbF9jbGFzcycsICdoaXN0b3J5 X2lkJz0KLCAnaGlkJywKKyAgICAjICAgICAgICAnYWNjZXNzaWJsZScsICdwdXJnZWQnLCAnc3Rh dGUnLCAnZGF0YV90eXBlJywgJ2ZpbGVfZXh0JywgJ2ZpPQpsZV9zaXplJywgJ21pc2NfYmx1cmIn LAorICAgICMgICAgICAgICdkb3dubG9hZF91cmwnLCAndmlzdWFsaXphdGlvbnMnLCAnZGlzcGxh eV9hcHBzJywgJ2Rpc3BsYXlfdHk9CnBlcycsCisgICAgIyAgICAgICAgJ21ldGFkYXRhX2Ria2V5 JywgJ21ldGFkYXRhX2NvbHVtbl9uYW1lcycsICdtZXRhZGF0YV9jb2x1bW5fdD0KeXBlcycsICdt ZXRhZGF0YV9jb2x1bW5zJywKKyAgICAjICAgICAgICAnbWV0YWRhdGFfY29tbWVudF9saW5lcycs ICdtZXRhZGF0YV9kYXRhX2xpbmVzJworICAgICMgICAgKQorICAgICMgICAgdmFsaWRhdGVkX3Bh eWxvYWQgPTNEIHt9CisgICAgIyAgICBmb3Iga2V5LCB2YWwgaW4gcGF5bG9hZC5pdGVtcygpOgor ICAgICMgICAgICAgIGlmIHZhbCBpcyBOb25lOgorICAgICMgICAgICAgICAgICBjb250aW51ZQor ICAgICMgICAgICAgIGlmIGtleSBpbiAoICduYW1lJywgJ2dlbm9tZV9idWlsZCcsICdtaXNjX2lu Zm8nLCAnYW5ub3RhdGlvbic9CiApOgorICAgICMgICAgICAgICAgICB2YWwgPTNEIHZhbGlkYXRp b24udmFsaWRhdGVfYW5kX3Nhbml0aXplX2Jhc2VzdHJpbmcoIGtleSw9CiB2YWwgKQorICAgICMg ICAgICAgICAgICAjVE9ETzogbmVlZCBiZXR0ZXIgcmVtYXAgc3lzdGVtIG9yIGVsaW1pbmF0ZSB0 aGUgbmVlZCBhbHQ9Cm9nZXRoZXIKKyAgICAjICAgICAgICAgICAga2V5ID0zRCAnZGJrZXknIGlm IGtleSA9M0Q9M0QgJ2dlbm9tZV9idWlsZCcgZWxzZSBrZXkKKyAgICAjICAgICAgICAgICAga2V5 ID0zRCAnaW5mbycgIGlmIGtleSA9M0Q9M0QgJ21pc2NfaW5mbycgZWxzZSBrZXkKKyAgICAjICAg ICAgICAgICAgdmFsaWRhdGVkX3BheWxvYWRbIGtleSBdID0zRCB2YWwKKyAgICAjICAgICAgICBp ZiBrZXkgaW4gKCAnZGVsZXRlZCcsICd2aXNpYmxlJyApOgorICAgICMgICAgICAgICAgICB2YWxp ZGF0ZWRfcGF5bG9hZFsga2V5IF0gPTNEIHZhbGlkYXRpb24udmFsaWRhdGVfYm9vbGVhbig9CiBr ZXksIHZhbCApCisgICAgIyAgICAgICAgZWxpZiBrZXkgPTNEPTNEICd0YWdzJzoKKyAgICAjICAg ICAgICAgICAgdmFsaWRhdGVkX3BheWxvYWRbIGtleSBdID0zRCB2YWxpZGF0aW9uLnZhbGlkYXRl X2FuZF9zYW5pPQp0aXplX2Jhc2VzdHJpbmdfbGlzdCgga2V5LCB2YWwgKQorICAgICMgICAgICAg IGVsaWYga2V5IG5vdCBpbiB2YWxpZF9idXRfdW5lZGl0YWJsZV9rZXlzOgorICAgICMgICAgICAg ICAgICBwYXNzCisgICAgIyAgICAgICAgICAgICNsb2cud2FybiggJ3Vua25vd24ga2V5OiAlcycs IHN0cigga2V5ICkgKQorICAgICMgICAgcmV0dXJuIHZhbGlkYXRlZF9wYXlsb2FkCj0yMAogICAg IGRlZiBfX2hhbmRsZV91bmtub3duX2NvbnRlbnRzX3R5cGUoIHNlbGYsIHRyYW5zLCBjb250ZW50 c190eXBlICk6CiAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuVW5rbm93bkNvbnRlbnRzVHlwZSgn VW5rbm93biBjb250ZW50cyB0eXBlOiAlcycgJT0KIHR5cGUpCgpkaWZmIC1yIDg2ZDM5M2JlZTAz ZWRiZDU1OTI2NTc5NTc1NmFlMzkzZjAxMDdkOWIgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y9 CjQ5ZGJkOGRiMGE0NWQ1YTg4IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMv aGlzdG9yeS5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2hp c3RvcnkucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9oaXN0 b3J5LnB5CkBAIC05LDE3ICs5LDI0IEBACiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwog ZnJvbSBnYWxheHkgaW1wb3J0IG1hbmFnZXJzCiBmcm9tIGdhbGF4eS5kYXRhdHlwZXMuZGF0YSBp bXBvcnQgbmljZV9zaXplCi1mcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJzIGltcG9ydCBVc2Vz QW5ub3RhdGlvbnMsIFVzZXNJdGVtUmF0aW5ncwogZnJvbSBnYWxheHkubW9kZWwub3JtIGltcG9y dCBhbmRfLCBlYWdlcmxvYWRfYWxsLCBmdW5jCiBmcm9tIGdhbGF4eSBpbXBvcnQgdXRpbAogZnJv bSBnYWxheHkudXRpbCBpbXBvcnQgUGFyYW1zCiBmcm9tIGdhbGF4eS51dGlsLm9kaWN0IGltcG9y dCBvZGljdAogZnJvbSBnYWxheHkudXRpbC5zYW5pdGl6ZV9odG1sIGltcG9ydCBzYW5pdGl6ZV9o dG1sCiBmcm9tIGdhbGF4eS53ZWIgaW1wb3J0IGVycm9yLCB1cmxfZm9yCi1mcm9tIGdhbGF4eS53 ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9sbGVyLCBTaGFyYWJsZU1peGlu LCBVcz0KZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIFVzZXNIaXN0b3J5TWl4aW4K KworZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZVVJQ29udHJvbGxl cgorZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgU2hhcmFibGVNaXhpbgor ZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgVXNlc0hpc3RvcnlEYXRhc2V0 QXNzb2NpYXRpb25NaXhpbgorZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQg VXNlc0hpc3RvcnlNaXhpbgogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQg RXhwb3J0c0hpc3RvcnlNaXhpbgogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBv cnQgSW1wb3J0c0hpc3RvcnlNaXhpbgorZnJvbSBnYWxheHkubW9kZWwuaXRlbV9hdHRycyBpbXBv cnQgVXNlc0Fubm90YXRpb25zCitmcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJzIGltcG9ydCBV c2VzSXRlbVJhdGluZ3MKKwogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQg RVJST1IsIElORk8sIFNVQ0NFU1MsIFdBUk5JTkcKKwogZnJvbSBnYWxheHkud2ViLmZyYW1ld29y ay5oZWxwZXJzIGltcG9ydCBncmlkcywgaWZmLCB0aW1lX2FnbywgZXNjYXBlCj0yMAogbG9nID0z RCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQoKZGlmZiAtciA4NmQzOTNiZWUwM2VkYmQ1 NTkyNjU3OTU3NTZhZTM5M2YwMTA3ZDliIC1yIGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmPQo0OWRi ZDhkYjBhNDVkNWE4OCB0ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9EYXRhc2V0TWFuYWdlci5weQot LS0gYS90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9EYXRhc2V0TWFuYWdlci5weQorKysgYi90ZXN0 L3VuaXQvbWFuYWdlcnMvdGVzdF9EYXRhc2V0TWFuYWdlci5weQpAQCAtMjAsNiArMjAsOSBAQAog aW1wb3J0IG1vY2sKIGZyb20gdGVzdF9Nb2RlbE1hbmFnZXIgaW1wb3J0IEJhc2VUZXN0Q2FzZQog ZnJvbSBnYWxheHkubWFuYWdlcnMuZGF0YXNldHMgaW1wb3J0IERhdGFzZXRNYW5hZ2VyCitmcm9t IGdhbGF4eS5tYW5hZ2Vycy5kYXRhc2V0cyBpbXBvcnQgRGF0YXNldEFzc29jaWF0aW9uTWFuYWdl cgorZnJvbSBnYWxheHkubWFuYWdlcnMuaGlzdG9yaWVzIGltcG9ydCBIaXN0b3J5TWFuYWdlcgor ZnJvbSBnYWxheHkubWFuYWdlcnMuaGRhcyBpbXBvcnQgSERBTWFuYWdlcgo9MjAKPTIwCiAjID0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRApAQCAtMjksODMgKzMyLDEwMSBAQAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xhc3Mg RGF0YXNldE1hbmFnZXJUZXN0Q2FzZSggQmFzZVRlc3RDYXNlICk6CisjY2xhc3MgRGF0YXNldE1h bmFnZXJUZXN0Q2FzZSggQmFzZVRlc3RDYXNlICk6CisjCisjICAgIGRlZiBzZXRfdXBfbWFuYWdl cnMoIHNlbGYgKToKKyMgICAgICAgIHN1cGVyKCBEYXRhc2V0TWFuYWdlclRlc3RDYXNlLCBzZWxm ICkuc2V0X3VwX21hbmFnZXJzKCkKKyMgICAgICAgIHNlbGYuZGF0YXNldF9tZ3IgPTNEIERhdGFz ZXRNYW5hZ2VyKCBzZWxmLmFwcCApCisjCisjICAgIGRlZiB0ZXN0X2NyZWF0ZSggc2VsZiApOgor IyAgICAgICAgcHJpbnQgInNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIG5ldyBEYXRhc2V0Igor IyAgICAgICAgZGF0YXNldDEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5z ICkKKyMgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggZGF0YXNldDEsIG1vZGVsLkRhdGFz ZXQgKQorIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggZGF0YXNldDEsIHNlbGYudHJhbnMuc2Ff c2Vzc2lvbi5xdWVyeSggbW9kZWwuRGE9CnRhc2V0ICkuZ2V0KCBkYXRhc2V0MS5pZCApICkKKyMK KyMgICAgZGVmIHRlc3RfYmFzZSggc2VsZiApOgorIyAgICAgICAgZGF0YXNldDEgPTNEIHNlbGYu ZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKKyMgICAgICAgIGRhdGFzZXQyID0zRCBz ZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyApCisjCisjICAgICAgICBwcmludCAi c2hvdWxkIGJlIGFibGUgdG8gcXVlcnkiCisjICAgICAgICBkYXRhc2V0cyA9M0Qgc2VsZi50cmFu cy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5EYXRhc2V0ICkuYWxsKCkKKyMgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2VsZi50cmFucyApLCBkYXRhc2V0 cyApCisjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLm9uZSggc2Vs Zi50cmFucywgZmlsdGVycz0zRCggbT0Kb2RlbC5EYXRhc2V0LmlkID0zRD0zRCBkYXRhc2V0MS5p ZCApICksIGRhdGFzZXQxICkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNl dF9tZ3IuYnlfaWQoIHNlbGYudHJhbnMsIGRhdGFzZXQxLmlkPQogKSwgZGF0YXNldDEgKQorIyAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5ieV9pZHMoIHNlbGYudHJh bnMsIFsgZGF0YXNldDI9Ci5pZCwgZGF0YXNldDEuaWQgXSApLCBbIGRhdGFzZXQyLCBkYXRhc2V0 MSBdICkKKyMKKyMgICAgICAgIHByaW50ICJzaG91bGQgYmUgYWJsZSB0byBsaW1pdCBhbmQgb2Zm c2V0IgorIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBz ZWxmLnRyYW5zLCBsaW1pdD0zRDEgKSw9CiBkYXRhc2V0c1swOjFdICkKKyMgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2VsZi50cmFucywgb2Zmc2V0PTNE MSApPQosIGRhdGFzZXRzWzE6XSApCisjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRh dGFzZXRfbWdyLmxpc3QoIHNlbGYudHJhbnMsIGxpbWl0PTNEMSwgbz0KZmZzZXQ9M0QxICksIGRh dGFzZXRzWzE6Ml0gKQorIworIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0 X21nci5saXN0KCBzZWxmLnRyYW5zLCBsaW1pdD0zRDAgKSw9CiBbXSApCisjICAgICAgICBzZWxm LmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYudHJhbnMsIG9mZnNldD0z RDMgKT0KLCBbXSApCisjCisjICAgICAgICBwcmludCAic2hvdWxkIGJlIGFibGUgdG8gb3JkZXIi CisjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYu dHJhbnMsIG9yZGVyX2J5PTNEcz0KcWxhbGNoZW15LmRlc2MoIG1vZGVsLkRhdGFzZXQuY3JlYXRl X3RpbWUgKSApLAorIyAgICAgICAgICAgIFsgZGF0YXNldDIsIGRhdGFzZXQxIF0gKQorIworIyAg ICBkZWYgdGVzdF9kZWxldGUoIHNlbGYgKToKKyMgICAgICAgIGl0ZW0xID0zRCBzZWxmLmRhdGFz ZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyApCisjCisjICAgICAgICBwcmludCAic2hvdWxkIGJl IGFibGUgdG8gZGVsZXRlIGFuZCB1bmRlbGV0ZSBhbiBoZGEiCisjICAgICAgICBzZWxmLmFzc2Vy dEZhbHNlKCBpdGVtMS5kZWxldGVkICkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYu ZGF0YXNldF9tZ3IuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLCBpPQp0ZW0xICkKKyMgICAg ICAgIHNlbGYuYXNzZXJ0VHJ1ZSggaXRlbTEuZGVsZXRlZCApCisjICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLnVuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLD0K IGl0ZW0xICkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLmRlbGV0ZWQgKQorIwor IyAgICBkZWYgdGVzdF9wdXJnZV9hbGxvd2VkKCBzZWxmICk6CisjICAgICAgICBzZWxmLnRyYW5z LmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlID0zRCBUcnVlCisjICAgICAgICBp dGVtMSA9M0Qgc2VsZi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMgKQorIworIyAgICAg ICAgcHJpbnQgInNob3VsZCBwdXJnZSBhbiBoZGEgaWYgY29uZmlnIGRvZXMgYWxsb3ciCisjICAg ICAgICBzZWxmLmFzc2VydEZhbHNlKCBpdGVtMS5wdXJnZWQgKQorIyAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5wdXJnZSggc2VsZi50cmFucywgaXRlbTEgKSwgaXQ9 CmVtMSApCisjICAgICAgICBzZWxmLmFzc2VydFRydWUoIGl0ZW0xLnB1cmdlZCApCisjCisjICAg IGRlZiB0ZXN0X3B1cmdlX25vdF9hbGxvd2VkKCBzZWxmICk6CisjICAgICAgICBzZWxmLnRyYW5z LmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlID0zRCBGYWxzZQorIyAgICAgICAg aXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKKyMKKyMgICAg ICAgIHByaW50ICJzaG91bGQgcmFpc2UgYW4gZXJyb3Igd2hlbiBwdXJnaW5nIGFuIGhkYSBpZiBj b25maWcgZG9lcyBuPQpvdCBhbGxvdyIKKyMgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0x LnB1cmdlZCApCisjICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5Db25maWdE b2VzTm90QWxsb3dFeGNlcHRpb24sIHNlbGYuZD0KYXRhc2V0X21nci5wdXJnZSwgc2VsZi50cmFu cywgaXRlbTEgKQorIyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSggaXRlbTEucHVyZ2VkICkKKyMK KyMgICAgZGVmIHRlc3RfYWNjZXNzaWJsZSggc2VsZiApOgorIyAgICAgICAgb3duZXIgPTNEIHNl bGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIyX2RhdGEgKQorIyAgICAgICAg bm9uX293bmVyID0zRCBzZWxmLnVzZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgKip1c2VyM19k YXRhICkKKyMKKyMgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBz ZWxmLnRyYW5zICkKKyMKKyMgICAgICAgIHByaW50ICIoYnkgZGVmYXVsdCwgZGF0YXNldCBwZXJt aXNzaW9ucyBhcmUgbGF4KSBzaG91bGQgYmUgYWNjZXNzPQppYmxlIHRvIGFsbCIKKyMgICAgICAg IGZvciB1c2VyIGluIHNlbGYudXNlcl9tZ3IubGlzdCggc2VsZi50cmFucyApOgorIyAgICAgICAg ICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5kYXRhc2V0X21nci5pc19hY2Nlc3NpYmxlKCBzZWxm LnRyYW5zLCA9CmRhdGFzZXQsIHVzZXIgKSApCisjCisjICAgICAgICAjVE9ETzogdGhpcyBpcyAu Li4gbm90IHdvcmtpbmcuLi4KKyMgICAgICAgIHNlbGYuZGF0YXNldF9tZ3IuZ2l2ZV9hY2Nlc3Nf cGVybWlzc2lvbiggc2VsZi50cmFucywgZGF0YXNldCwgb3duPQplciApCisjICAgICAgICBzZWxm LmFzc2VydFRydWUoIHNlbGYuZGF0YXNldF9tZ3IuaXNfYWNjZXNzaWJsZSggc2VsZi50cmFucywg ZGF0YT0Kc2V0LCBvd25lciApICkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIHNlbGYuZGF0 YXNldF9tZ3IuaXNfYWNjZXNzaWJsZSggc2VsZi50cmFucywgZGF0PQphc2V0LCBub25fb3duZXIg KSApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIERhdGFzZXRBc3NvY2lhdGlvbk1hbmFnZXJUZXN0 Q2FzZSggQmFzZVRlc3RDYXNlICk6Cj0yMAogICAgIGRlZiBzZXRfdXBfbWFuYWdlcnMoIHNlbGYg KToKLSAgICAgICAgc3VwZXIoIERhdGFzZXRNYW5hZ2VyVGVzdENhc2UsIHNlbGYgKS5zZXRfdXBf bWFuYWdlcnMoKQotICAgICAgICBzZWxmLmRhdGFzZXRfbWdyID0zRCBEYXRhc2V0TWFuYWdlcigg c2VsZi5hcHAgKQorICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uTWFuYWdlclRlc3RD YXNlLCBzZWxmICkuc2V0X3VwX21hbmFnZXJzKCkKKyAgICAgICAgc2VsZi5kYXRhc2V0X21nciA9 M0QgRGF0YXNldEFzc29jaWF0aW9uTWFuYWdlciggc2VsZi5hcHAgKQorICAgICAgICBzZWxmLmhk YV9tZ3IgPTNEIEhEQU1hbmFnZXIoIHNlbGYuYXBwICkKKyAgICAgICAgc2VsZi5oaXN0b3J5X21n ciA9M0QgSGlzdG9yeU1hbmFnZXIoIHNlbGYuYXBwICkKPTIwCi0gICAgZGVmIHRlc3RfY3JlYXRl KCBzZWxmICk6Ci0gICAgICAgIHByaW50ICJzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSBuZXcg RGF0YXNldCIKKyAgICBkZWYgdGVzdF9tZXRhZGF0YSggc2VsZiApOgorICAgICAgICBvd25lciA9 M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMsICoqdXNlcjJfZGF0YSApCisgICAg ICAgIGhpc3RvcnkxID0zRCBzZWxmLmhpc3RvcnlfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgbmFt ZT0zRCdoaXN0b3J5MT0KJywgdXNlcj0zRG93bmVyICkKICAgICAgICAgZGF0YXNldDEgPTNEIHNl bGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKLSAgICAgICAgc2VsZi5hc3NlcnRJ c0luc3RhbmNlKCBkYXRhc2V0MSwgbW9kZWwuRGF0YXNldCApCi0gICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwoIGRhdGFzZXQxLCBzZWxmLnRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLkRhdD0K YXNldCApLmdldCggZGF0YXNldDEuaWQgKSApCj0yMAotICAgIGRlZiB0ZXN0X2Jhc2UoIHNlbGYg KToKLSAgICAgICAgZGF0YXNldDEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRy YW5zICkKLSAgICAgICAgZGF0YXNldDIgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxm LnRyYW5zICkKLQotICAgICAgICBwcmludCAic2hvdWxkIGJlIGFibGUgdG8gcXVlcnkiCi0gICAg ICAgIGRhdGFzZXRzID0zRCBzZWxmLnRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLkRhdGFz ZXQgKS5hbGwoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmxp c3QoIHNlbGYudHJhbnMgKSwgZGF0YXNldHMgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBz ZWxmLmRhdGFzZXRfbWdyLm9uZSggc2VsZi50cmFucywgZmlsdGVycz0zRCggbW89CmRlbC5EYXRh c2V0LmlkID0zRD0zRCBkYXRhc2V0MS5pZCApICksIGRhdGFzZXQxICkKLSAgICAgICAgc2VsZi5h c3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5ieV9pZCggc2VsZi50cmFucywgZGF0YXNldDEu aWQgPQopLCBkYXRhc2V0MSApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNl dF9tZ3IuYnlfaWRzKCBzZWxmLnRyYW5zLCBbIGRhdGFzZXQyLj0KaWQsIGRhdGFzZXQxLmlkIF0g KSwgWyBkYXRhc2V0MiwgZGF0YXNldDEgXSApCi0KLSAgICAgICAgcHJpbnQgInNob3VsZCBiZSBh YmxlIHRvIGxpbWl0IGFuZCBvZmZzZXQiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYu ZGF0YXNldF9tZ3IubGlzdCggc2VsZi50cmFucywgbGltaXQ9M0QxICksID0KZGF0YXNldHNbMDox XSApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2Vs Zi50cmFucywgb2Zmc2V0PTNEMSApLD0KIGRhdGFzZXRzWzE6XSApCi0gICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2VsZi50cmFucywgbGltaXQ9M0QxLCBv Zj0KZnNldD0zRDEgKSwgZGF0YXNldHNbMToyXSApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh bCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBzZWxmLnRyYW5zLCBsaW1pdD0zRDAgKSwgPQpbXSAp Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2VsZi50 cmFucywgb2Zmc2V0PTNEMyApLD0KIFtdICkKLQotICAgICAgICBwcmludCAic2hvdWxkIGJlIGFi bGUgdG8gb3JkZXIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3Iu bGlzdCggc2VsZi50cmFucywgb3JkZXJfYnk9M0RzcT0KbGFsY2hlbXkuZGVzYyggbW9kZWwuRGF0 YXNldC5jcmVhdGVfdGltZSApICksCi0gICAgICAgICAgICBbIGRhdGFzZXQyLCBkYXRhc2V0MSBd ICkKLQotICAgIGRlZiB0ZXN0X2RlbGV0ZSggc2VsZiApOgotICAgICAgICBpdGVtMSA9M0Qgc2Vs Zi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMgKQotCi0gICAgICAgIHByaW50ICJzaG91 bGQgYmUgYWJsZSB0byBkZWxldGUgYW5kIHVuZGVsZXRlIGFuIGhkYSIKLSAgICAgICAgc2VsZi5h c3NlcnRGYWxzZSggaXRlbTEuZGVsZXRlZCApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNl bGYuZGF0YXNldF9tZ3IuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLCBpdD0KZW0xICkKLSAg ICAgICAgc2VsZi5hc3NlcnRUcnVlKCBpdGVtMS5kZWxldGVkICkKLSAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci51bmRlbGV0ZSggc2VsZi50cmFucywgaXRlbTEgKSwg PQppdGVtMSApCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLmRlbGV0ZWQgKQotCi0g ICAgZGVmIHRlc3RfcHVyZ2VfYWxsb3dlZCggc2VsZiApOgotICAgICAgICBzZWxmLnRyYW5zLmFw cC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlID0zRCBUcnVlCi0gICAgICAgIGl0ZW0x ID0zRCBzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyApCi0KLSAgICAgICAgcHJp bnQgInNob3VsZCBwdXJnZSBhbiBoZGEgaWYgY29uZmlnIGRvZXMgYWxsb3ciCi0gICAgICAgIHNl bGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLnB1cmdlZCApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo IHNlbGYuZGF0YXNldF9tZ3IucHVyZ2UoIHNlbGYudHJhbnMsIGl0ZW0xICksIGl0ZT0KbTEgKQot ICAgICAgICBzZWxmLmFzc2VydFRydWUoIGl0ZW0xLnB1cmdlZCApCi0KLSAgICBkZWYgdGVzdF9w dXJnZV9ub3RfYWxsb3dlZCggc2VsZiApOgotICAgICAgICBzZWxmLnRyYW5zLmFwcC5jb25maWcu YWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlID0zRCBGYWxzZQotICAgICAgICBpdGVtMSA9M0Qgc2Vs Zi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMgKQotCi0gICAgICAgIHByaW50ICJzaG91 bGQgcmFpc2UgYW4gZXJyb3Igd2hlbiBwdXJnaW5nIGFuIGhkYSBpZiBjb25maWcgZG9lcyBubz0K dCBhbGxvdyIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSggaXRlbTEucHVyZ2VkICkKLSAgICAg ICAgc2VsZi5hc3NlcnRSYWlzZXMoIGV4Y2VwdGlvbnMuQ29uZmlnRG9lc05vdEFsbG93RXhjZXB0 aW9uLCBzZWxmLmRhPQp0YXNldF9tZ3IucHVyZ2UsIHNlbGYudHJhbnMsIGl0ZW0xICkKLSAgICAg ICAgc2VsZi5hc3NlcnRGYWxzZSggaXRlbTEucHVyZ2VkICkKLQotICAgIGRlZiB0ZXN0X2FjY2Vz c2libGUoIHNlbGYgKToKLSAgICAgICAgb3duZXIgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBz ZWxmLnRyYW5zLCAqKnVzZXIyX2RhdGEgKQotICAgICAgICBub25fb3duZXIgPTNEIHNlbGYudXNl cl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIzX2RhdGEgKQotCi0gICAgICAgIGRhdGFz ZXQgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKLQotICAgICAgICBw cmludCAiKGJ5IGRlZmF1bHQsIGRhdGFzZXQgcGVybWlzc2lvbnMgYXJlIGxheCkgc2hvdWxkIGJl IGFjY2Vzc2k9CmJsZSB0byBhbGwiCi0gICAgICAgIGZvciB1c2VyIGluIHNlbGYudXNlcl9tZ3Iu bGlzdCggc2VsZi50cmFucyApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBzZWxmLmRh dGFzZXRfbWdyLmlzX2FjY2Vzc2libGUoIHNlbGYudHJhbnMsIGQ9CmF0YXNldCwgdXNlciApICkK LQotI1RPRE86IHRoaXMgaXMgLi4uIG5vdCB3b3JraW5nLi4uCi0gICAgICAgIHNlbGYuZGF0YXNl dF9tZ3IuZ2l2ZV9hY2Nlc3NfcGVybWlzc2lvbiggc2VsZi50cmFucywgZGF0YXNldCwgb3duZT0K ciApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5kYXRhc2V0X21nci5pc19hY2Nlc3Np YmxlKCBzZWxmLnRyYW5zLCBkYXRhcz0KZXQsIG93bmVyICkgKQotICAgICAgICBzZWxmLmFzc2Vy dEZhbHNlKCBzZWxmLmRhdGFzZXRfbWdyLmlzX2FjY2Vzc2libGUoIHNlbGYudHJhbnMsIGRhdGE9 CnNldCwgbm9uX293bmVyICkgKQorICAgICAgICBwcmludCAic2hvdWxkIGJlIGFibGUgdG8gY3Jl YXRlIGEgbmV3IEhEQSB3aXRoIGEgc3BlY2lmaWVkIGhpc3Rvcnk9CiBhbmQgZGF0YXNldCIKKyAg ICAgICAgaGRhMSA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeT0z RGhpc3RvcnkxLCBkYXRhPQpzZXQ9M0RkYXRhc2V0MSwgaGlkPTNEMSApCj0yMAo9MjAKICMgPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNECgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21t aXRzL2U2MzM4OGZkNmNiZi8KQ2hhbmdlc2V0OiAgIGU2MzM4OGZkNmNiZgpVc2VyOiAgICAgICAg Y2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0wNSAxNTozNToyMCswMDowMApTdW1t YXJ5OiAgICAgTWVyZ2VkIGdhbGF4eS9nYWxheHktY2VudHJhbCBpbnRvIGRlZmF1bHQKQWZmZWN0 ZWQgIzogIDExOSBmaWxlcwoKZGlmZiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZjQ5ZGJkOGRi MGE0NWQ1YTg4IC1yIGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFkMGRjNjMyNCAu aGd0YWdzCi0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMjAsNCArMjAsNCBAQAogY2E0 NWI3OGFkYjQxNTJmYzZlNzM5NTUxNGQ0NmViYTZiN2QwYjgzOCByZWxlYXNlXzIwMTQuMDguMTEK IDU0OGFiMjQ2NjdkNjIwNjc4MDIzN2JkODA3ZjdkODU3YTQ4NGM0NjEgbGF0ZXN0XzIwMTQuMDgu MTEKIDIwOTI5NDg5MzdhYzMwZWY4MmY3MTQ2M2EyMzVjNjZkMzQ5ODcwODggcmVsZWFzZV8yMDE0 LjEwLjA2Ci03MDg2Yjg3ZDgzYTkwOTJjYmVjZTBmZWM2ZjNlM2VkMDMyNjZiZTBjIGxhdGVzdF8y MDE0LjEwLjA2Cis1ODM0YjEwNjY0NjJkZDIxOWY2N2MxYzNjYmQ3N2M3OGU3Y2YzYTZjIGxhdGVz dF8yMDE0LjEwLjA2CgpkaWZmIC1yIGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1 ZDVhODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGNsaWVu dC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcwotLS0gYS9jbGllbnQv Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKKysrIGIvY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCkBAIC0zMTYsNiArMzE2LDEx IEBACiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZEhpZGRlbihpbnB1 dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgID0yMAor ICAgICAgICAgICAgICAgIC8vIGhpZGRlbiBmaWVsZAorICAgICAgICAgICAgICAgIGNhc2UgJ2hp ZGRlbl9kYXRhJzoKKyAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkSGlk ZGVuKGlucHV0X2RlZik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgPTIwCiAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBmaWVsZAogICAgICAgICAgICAgICAg IGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmll bGRTbGlkZXIoaW5wdXRfZGVmKTsKCmRpZmYgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y0OWRi ZDhkYjBhNDVkNWE4OCAtciBlNjMzODhmZDZjYmYzNDNhN2IwMzQ5Nj0KMWQxMzlmMTRhZDBkYzYz MjQgY29uZmlnL2RhdGF0eXBlc19jb25mLnhtbC5zYW1wbGUKLS0tIGEvY29uZmlnL2RhdGF0eXBl c19jb25mLnhtbC5zYW1wbGUKKysrIGIvY29uZmlnL2RhdGF0eXBlc19jb25mLnhtbC5zYW1wbGUK QEAgLTMsNiArMyw3IEBACiAgIDxyZWdpc3RyYXRpb24gY29udmVydGVyc19wYXRoPTNEImxpYi9n YWxheHkvZGF0YXR5cGVzL2NvbnZlcnRlcnMiIGRpc3BsYT0KeV9wYXRoPTNEImRpc3BsYXlfYXBw bGljYXRpb25zIj48ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEImFiMSIgdHlwZT0zRCJnYWxheHkuPQpk YXRhdHlwZXMuYmluYXJ5OkFiMSIgbWltZXR5cGU9M0QiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt IiBkaXNwbGF5X2luX3VwbG89CmFkPTNEInRydWUiIGRlc2NyaXB0aW9uPTNEIkEgYmluYXJ5IHNl cXVlbmNlIGZpbGUgaW4gJ2FiMScgZm9ybWF0IHdpdGggYSAnLj0KYWIxJyBmaWxlIGV4dGVuc2lv bi4gIFlvdSBtdXN0IG1hbnVhbGx5IHNlbGVjdCB0aGlzICdGaWxlIEZvcm1hdCcgd2hlbiB1cGxv PQphZGluZyB0aGUgZmlsZS4iIGRlc2NyaXB0aW9uX3VybD0zRCJodHRwczovL3dpa2kuZ2FsYXh5 cHJvamVjdC5vcmcvTGVhcm4vRGE9CnRhdHlwZXMjQWIxIi8+PGRhdGF0eXBlIGV4dGVuc2lvbj0z RCJhZmciIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5hc3NlbWJseT0KOkFtb3MiIGRpc3BsYXlf aW5fdXBsb2FkPTNEImZhbHNlIiAvPgorICAgIDxkYXRhdHlwZSBleHRlbnNpb249M0QiYXJmZiIg dHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnRleHQ6QXJmZiIgbWltZXQ9CnlwZT0zRCJ0ZXh0L3Bs YWluIiBkaXNwbGF5X2luX3VwbG9hZD0zRCJUcnVlIiAvPjxkYXRhdHlwZSBleHRlbnNpb249M0Qi YXNuMT0KIiB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuZGF0YTpHZW5lcmljQXNuMSIgbWltZXR5 cGU9M0QidGV4dC9wbGFpbiIgZGlzcGxhPQp5X2luX3VwbG9hZD0zRCJ0cnVlIiAvPjxkYXRhdHlw ZSBleHRlbnNpb249M0QiYXNuMS1iaW5hcnkiIHR5cGU9M0QiZ2FsYXh5LmQ9CmF0YXR5cGVzLmJp bmFyeTpHZW5lcmljQXNuMUJpbmFyeSIgbWltZXR5cGU9M0QiYXBwbGljYXRpb24vb2N0ZXQtc3Ry ZWFtIiBkaT0Kc3BsYXlfaW5fdXBsb2FkPTNEInRydWUiIC8+PGRhdGF0eXBlIGV4dGVuc2lvbj0z RCJheHQiIHR5cGU9M0QiZ2FsYXh5LmRhdGF0PQp5cGVzLnNlcXVlbmNlOkF4dCIgZGlzcGxheV9p bl91cGxvYWQ9M0QidHJ1ZSIgZGVzY3JpcHRpb249M0QiYmxhc3R6IHBhaXJ3aXM9CmUgYWxpZ25t ZW50IGZvcm1hdC4gIEVhY2ggYWxpZ25tZW50IGJsb2NrIGluIGFuIGF4dCBmaWxlIGNvbnRhaW5z IHRocmVlIGxpbj0KZXM6IGEgc3VtbWFyeSBsaW5lIGFuZCAyIHNlcXVlbmNlIGxpbmVzLiAgQmxv Y2tzIGFyZSBzZXBhcmF0ZWQgZnJvbSBvbmUgYW5vPQp0aGVyIGJ5IGJsYW5rIGxpbmVzLiAgVGhl IHN1bW1hcnkgbGluZSBjb250YWlucyBjaHJvbW9zb21hbCBwb3NpdGlvbiBhbmQgc2k9CnplIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBhbGlnbm1lbnQuIEl0IGNvbnNpc3RzIG9mIDkgcmVxdWlyZWQg ZmllbGRzLiIgZGVzYz0KcmlwdGlvbl91cmw9M0QiaHR0cHM6Ly93aWtpLmdhbGF4eXByb2plY3Qu b3JnL0xlYXJuL0RhdGF0eXBlcyNBeHQiLz4KQEAgLTI5OCw2ICsyOTksNyBAQAogICAgIDxzbmlm ZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5kYXRhOk5ld2ljayIvPjxzbmlmZmVyIHR5cGU9 M0QiZ2FsYXg9CnkuZGF0YXR5cGVzLmRhdGE6TmV4dXMiLz48c25pZmZlciB0eXBlPTNEImdhbGF4 eS5kYXRhdHlwZXMudGV4dDpPYm8iLz4KKyAgICA8c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRh dHlwZXMudGV4dC5BcmZmIi8+PHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuPQpkYXRhdHlwZXMudGV4 dDpJcHluYiIvPjxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0Okpzb24iLz48 c25pZmY9CmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5pbWFnZXM6SnBnIi8+CgpkaWZmIC1y IGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODggLXIgZTYzMzg4ZmQ2Y2Jm MzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGNvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQot LS0gYS9jb25maWcvZ2FsYXh5LmluaS5zYW1wbGUKKysrIGIvY29uZmlnL2dhbGF4eS5pbmkuc2Ft cGxlCkBAIC0xNDgsNyArMTQ4LDcgQEAKICMgVG9vbCBjb25maWcgbWFpbnRhaW5lZCBieSB0b29s IG1pZ3JhdGlvbiBzY3JpcHRzLiBJZiB5b3UgdXNlIHRoZSBtaWdyYXRpPQpvbgogIyBzY3JpcHRz IHRvIGluc3RhbGwgdG9vbHMgdGhhdCBoYXZlIGJlZW4gbWlncmF0ZWQgdG8gdGhlIHRvb2wgc2hl ZCB1cG9uIGE9CiBuZXcKICMgcmVsZWFzZSwgdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgdG9v bCBjb25maWcgZmlsZS4KLSNtaWdyYXRlZF90b29sc19jb25maWcgPTNEIG1pZ3JhdGVkX3Rvb2xz X2NvbmYueG1sCisjbWlncmF0ZWRfdG9vbHNfY29uZmlnID0zRCBjb25maWcvbWlncmF0ZWRfdG9v bHNfY29uZi54bWwKPTIwCiAjIEZpbGUgdGhhdCBjb250YWlucyB0aGUgWE1MIHNlY3Rpb24gYW5k IHRvb2wgdGFncyBmcm9tIGFsbCB0b29sIHBhbmVsIGNvbj0KZmlnCiAjIGZpbGVzIGludGVncmF0 ZWQgaW50byBhIHNpbmdsZSBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgdG9vbCBwYW5lbCBsYXlvdXQu ID0KIFRoaXMKQEAgLTcxMyw2ICs3MTMsMTMgQEAKICMgKm5vdCogaW5jbHVkZSAnSFRUUF8nIGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlYWRlciBuYW1lLgogI3JlbW90ZV91c2VyX2hlYWRlciA9 M0QgSFRUUF9SRU1PVEVfVVNFUgo9MjAKKyMgSWYgdXNlX3JlbW90ZV91c2VyIGlzIGVuYWJsZWQs IGFueW9uZSB3aG8gY2FuIGxvZyBpbiB0byB0aGUgR2FsYXh5IGhvc3QgPQptYXkKKyMgaW1wZXJz b25hdGUgYW55IG90aGVyIHVzZXIgYnkgc2ltcGx5IHNlbmRpbmcgdGhlIGFwcHJvcHJpYXRlIGhl YWRlci4gVGh1PQpzIGEKKyMgc2VjcmV0IHNoYXJlZCBiZXR3ZWVuIHRoZSB1cHN0cmVhbSBwcm94 eSBzZXJ2ZXIsIGFuZCBHYWxheHkgaXMgcmVxdWlyZWQuCisjIElmIGFueW9uZSBvdGhlciB0aGFu IHRoZSBHYWxheHkgdXNlciBpcyB1c2luZyB0aGUgc2VydmVyLCB0aGVuIGFwYWNoZS9uZz0KaW54 IHNob3VsZAorIyBwYXNzIGEgdmFsdWUgaW4gdGhlIGhlYWRlciAnR1hfU0VDUkVUJyB0aGF0IGlz IGlkZW50aWNhbCB0aGUgb25lIGJlbG93CisjcmVtb3RlX3VzZXJfc2VjcmV0ID0zRCBVU0lORyBU SEUgREVGQVVMVCBJUyBOT1QgU0VDVVJFIQorCiAjIElmIHVzZV9yZW1vdGVfdXNlciBpcyBlbmFi bGVkLCB5b3UgY2FuIHNldCB0aGlzIHRvIGEgVVJMIHRoYXQgd2lsbCBsb2cgeT0Kb3VyCiAjIHVz ZXJzIG91dC4KICNyZW1vdGVfdXNlcl9sb2dvdXRfaHJlZiA9M0QgTm9uZQpAQCAtOTEwLDE3ICs5 MTcsMjcgQEAKICNjYWNoZV91c2VyX2pvYl9jb3VudCA9M0QgRmFsc2UKPTIwCiAjIFRvb2xCb3gg ZmlsdGVyaW5nCi0jIE1vZHVsZXMgZnJvbSBsaWIvZ2FsYXh5L3Rvb2xzL2ZpbHRlcnMvIGNhbiBi ZSBzcGVjaWZpZWQgaW4gdGhlIGZvbGxvd2luZz0KIGxpbmVzLgotIyB0b29sXyogZmlsdGVycyB3 aWxsIGJlIGFwcGxpZWQgZm9yIGFsbCB1c2VycyBhbmQgY2FuIG5vdCBiZSBjaGFuZ2VkIGJ5IHQ9 CmhlbS4KLSMgdXNlcl90b29sXyogZmlsdGVycyB3aWxsIGJlIHNob3duIHVuZGVyIHVzZXIgcHJl ZmVyZW5jZXMgYW5kIGNhbiBiZSB0b29nPQpsZWQKLSMgb24gYW5kIG9mZiBieSBydW50aW1lCi0j dG9vbF9maWx0ZXJzCi0jdG9vbF9sYWJlbF9maWx0ZXJzCi0jdG9vbF9zZWN0aW9uX2ZpbHRlcnMK KworIyBNb2R1bGVzIGZyb20gbGliL2dhbGF4eS90b29scy90b29sYm94L2ZpbHRlcnMvIGNhbiBi ZSBzcGVjaWZpZWQgaW4KKyMgdGhlIGZvbGxvd2luZyBsaW5lcy4gIHRvb2xfKiBmaWx0ZXJzIHdp bGwgYmUgYXBwbGllZCBmb3IgYWxsIHVzZXJzCisjIGFuZCBjYW4gbm90IGJlIGNoYW5nZWQgYnkg dGhlbS4gIHVzZXJfdG9vbF8qIGZpbHRlcnMgd2lsbCBiZSBzaG93bgorIyB1bmRlciB1c2VyIHBy ZWZlcmVuY2VzIGFuZCBjYW4gYmUgdG9vZ2xlZCBvbiBhbmQgb2ZmIGJ5CisjIHJ1bnRpbWUuIEV4 YW1wbGUgc2hvd24gYmVsb3cgYXJlIG5vdCByZWFsIGRlZmF1bHRzIChubyBjdXN0b20KKyMgZmls dGVycyBhcHBsaWVkIGJ5IGRlZnVhbHQpIGJ1dCBjYW4gYmUgZW5hYmxlZCB3aXRoIGJ5IHJlbmFt aW5nIHRoZQorIyBleGFtcGxlLnB5LnNhbXBsZSBpbiB0aGUgZmlsdGVycyBkaXJlY3RvcnkgdG8g ZXhhbXBsZS5weS4KKworI3Rvb2xfZmlsdGVycyA9M0QKKyN0b29sX2xhYmVsX2ZpbHRlcnMgPTNE CisjdG9vbF9zZWN0aW9uX2ZpbHRlcnMgPTNECiAjdXNlcl90b29sX2ZpbHRlcnMgPTNEIGV4YW1w bGVzOnJlc3RyaWN0X3VwbG9hZF90b19hZG1pbnMsIGV4YW1wbGVzOnJlc3RyaT0KY3RfZW5jb2Rl CiAjdXNlcl90b29sX3NlY3Rpb25fZmlsdGVycyA9M0QgZXhhbXBsZXM6cmVzdHJpY3RfdGV4dAog I3VzZXJfdG9vbF9sYWJlbF9maWx0ZXJzID0zRCBleGFtcGxlczpyZXN0cmljdF91cGxvYWRfdG9f YWRtaW5zLCBleGFtcGxlczo9CnJlc3RyaWN0X2VuY29kZQo9MjAKKyMgVGhlIGJhc2UgbW9kdWxl cyB0aGF0IGFyZSBzZWFyY2hlZCBmb3IgbW9kdWxlcyBhcyBkZXNjcmliZWQgYWJvdmUKKyMgY2Fu IGJlIG1vZGlmaWVkIGFuZCBtb2R1bGVzIGV4dGVybmFsIHRvIEdhbGF4eSBjYW4gYmUgc2VhcmNo ZWQgYnkKKyMgbW9kaWZ5aW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uLgorI3Rvb2xib3hfZmlsdGVy X2Jhc2VfbW9kdWxlcyA9M0QgZ2FsYXh5LnRvb2xzLnRvb2xib3guZmlsdGVycyxnYWxheHkudG9v bHM9Ci5maWx0ZXJzCisKICMgR2FsYXh5IEFwcGxpY2F0aW9uIEludGVybmFsIE1lc3NhZ2UgUXVl dWUKPTIwCiAjIEdhbGF4eSB1c2VzIEFNUVAgaW50ZXJuYWxseSBUT0RPIG1vcmUgZG9jdW1lbnRh dGlvbiBvbiB3aGF0IGZvci4KCmRpZmYgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y0OWRiZDhk YjBhNDVkNWE4OCAtciBlNjMzODhmZDZjYmYzNDNhN2IwMzQ5Nj0KMWQxMzlmMTRhZDBkYzYzMjQg Y29uZmlnL3Rvb2xfc2hlZC5pbmkuc2FtcGxlCi0tLSBhL2NvbmZpZy90b29sX3NoZWQuaW5pLnNh bXBsZQorKysgYi9jb25maWcvdG9vbF9zaGVkLmluaS5zYW1wbGUKQEAgLTY3LDYgKzY3LDEzIEBA CiAjIGh0dHBzOi8vd2lraS5nYWxheHlwcm9qZWN0Lm9yZy9BZG1pbi9Db25maWcvQXBhY2hlUHJv eHkKICN1c2VfcmVtb3RlX3VzZXIgPTNEIEZhbHNlCj0yMAorIyBJZiB1c2VfcmVtb3RlX3VzZXIg aXMgZW5hYmxlZCwgYW55b25lIHdobyBjYW4gbG9nIGluIHRvIHRoZSBHYWxheHkgaG9zdCA9Cm1h eQorIyBpbXBlcnNvbmF0ZSBhbnkgb3RoZXIgdXNlciBieSBzaW1wbHkgc2VuZGluZyB0aGUgYXBw cm9wcmlhdGUgaGVhZGVyLiBUaHU9CnMgYQorIyBzZWNyZXQgc2hhcmVkIGJldHdlZW4gdGhlIHVw c3RyZWFtIHByb3h5IHNlcnZlciwgYW5kIEdhbGF4eSBpcyByZXF1aXJlZC4KKyMgSWYgYW55b25l IG90aGVyIHRoYW4gdGhlIEdhbGF4eSB1c2VyIGlzIHVzaW5nIHRoZSBzZXJ2ZXIsIHRoZW4gYXBh Y2hlL25nPQppbnggc2hvdWxkCisjIHBhc3MgYSB2YWx1ZSBpbiB0aGUgaGVhZGVyICdHWF9TRUNS RVQnIHRoYXQgaXMgaWRlbnRpY2FsIHRoZSBvbmUgYmVsb3cKKyNyZW1vdGVfdXNlcl9zZWNyZXQg PTNEIGNoYW5nZXRoaXNpbnByb2R1Y3Rpb250b28KKwogIyBDb25maWd1cmF0aW9uIGZvciBkZWJ1 Z2dpbmcgbWlkZGxld2FyZQogZGVidWcgPTNEIHRydWUKIHVzZV9saW50ID0zRCBmYWxzZQoKZGlm ZiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZjQ5ZGJkOGRiMGE0NWQ1YTg4IC1yIGU2MzM4OGZk NmNiZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFkMGRjNjMyNCBsaWIvZ2FsYXh5L2NvbmZpZy5weQot LS0gYS9saWIvZ2FsYXh5L2NvbmZpZy5weQorKysgYi9saWIvZ2FsYXh5L2NvbmZpZy5weQpAQCAt ODMsNiArODMsNyBAQAogICAgICAgICAjIFRoZSB2YWx1ZSBvZiBtaWdyYXRlZF90b29sc19jb25m aWcgaXMgdGhlIGZpbGUgcmVzZXJ2ZWQgZm9yIGNvbnQ9CmFpbmluZyBvbmx5IHRob3NlIHRvb2xz IHRoYXQgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uCiAgICAgICAg ICMgYW5kIG1vdmVkIHRvIHRoZSB0b29sIHNoZWQuCiAgICAgICAgIHNlbGYuaW50ZWdyYXRlZF90 b29sX3BhbmVsX2NvbmZpZyA9M0QgcmVzb2x2ZV9wYXRoKCBrd2FyZ3MuZ2V0KCAnaT0KbnRlZ3Jh dGVkX3Rvb2xfcGFuZWxfY29uZmlnJywgJ2ludGVncmF0ZWRfdG9vbF9wYW5lbC54bWwnICksIHNl bGYucm9vdCApCisgICAgICAgIHNlbGYudG9vbGJveF9maWx0ZXJfYmFzZV9tb2R1bGVzID0zRCBs aXN0aWZ5KCBrd2FyZ3MuZ2V0KCAidG9vbGJveD0KX2ZpbHRlcl9iYXNlX21vZHVsZXMiLCAiZ2Fs YXh5LnRvb2xzLmZpbHRlcnMsZ2FsYXh5LnRvb2xzLnRvb2xib3guZmlsdGVycyIgPQopICkKICAg ICAgICAgc2VsZi50b29sX2ZpbHRlcnMgPTNEIGxpc3RpZnkoIGt3YXJncy5nZXQoICJ0b29sX2Zp bHRlcnMiLCBbXSApLCBkPQpvX3N0cmlwPTNEVHJ1ZSApCiAgICAgICAgIHNlbGYudG9vbF9sYWJl bF9maWx0ZXJzID0zRCBsaXN0aWZ5KCBrd2FyZ3MuZ2V0KCAidG9vbF9sYWJlbF9maWx0ZT0KcnMi LCBbXSApLCBkb19zdHJpcD0zRFRydWUgKQogICAgICAgICBzZWxmLnRvb2xfc2VjdGlvbl9maWx0 ZXJzID0zRCBsaXN0aWZ5KCBrd2FyZ3MuZ2V0KCAidG9vbF9zZWN0aW9uX2Y9CmlsdGVycyIsIFtd ICksIGRvX3N0cmlwPTNEVHJ1ZSApCkBAIC0xMzIsNiArMTMzLDcgQEAKICAgICAgICAgc2VsZi5y ZW1vdGVfdXNlcl9tYWlsZG9tYWluID0zRCBrd2FyZ3MuZ2V0KCAicmVtb3RlX3VzZXJfbWFpbGRv bWFpPQpuIiwgTm9uZSApCiAgICAgICAgIHNlbGYucmVtb3RlX3VzZXJfaGVhZGVyID0zRCBrd2Fy Z3MuZ2V0KCAicmVtb3RlX3VzZXJfaGVhZGVyIiwgJ0hUVD0KUF9SRU1PVEVfVVNFUicgKQogICAg ICAgICBzZWxmLnJlbW90ZV91c2VyX2xvZ291dF9ocmVmID0zRCBrd2FyZ3MuZ2V0KCAicmVtb3Rl X3VzZXJfbG9nb3V0X2g9CnJlZiIsIE5vbmUgKQorICAgICAgICBzZWxmLnJlbW90ZV91c2VyX3Nl Y3JldCA9M0Qga3dhcmdzLmdldCggInJlbW90ZV91c2VyX3NlY3JldCIsIE5vbmU9CiApCiAgICAg ICAgIHNlbGYucmVxdWlyZV9sb2dpbiA9M0Qgc3RyaW5nX2FzX2Jvb2woIGt3YXJncy5nZXQoICJy ZXF1aXJlX2xvZ2luIj0KLCAiRmFsc2UiICkgKQogICAgICAgICBzZWxmLmFsbG93X3VzZXJfY3Jl YXRpb24gPTNEIHN0cmluZ19hc19ib29sKCBrd2FyZ3MuZ2V0KCAiYWxsb3dfdXM9CmVyX2NyZWF0 aW9uIiwgIlRydWUiICkgKQogICAgICAgICBzZWxmLmFsbG93X3VzZXJfZGVsZXRpb24gPTNEIHN0 cmluZ19hc19ib29sKCBrd2FyZ3MuZ2V0KCAiYWxsb3dfdXM9CmVyX2RlbGV0aW9uIiwgIkZhbHNl IiApICkKQEAgLTcwNiwxMCArNzA4LDcgQEAKPTIwCiAgICAgICAgIGZyb20gZ2FsYXh5IGltcG9y dCB0b29scwogICAgICAgICBzZWxmLnRvb2xib3ggPTNEIHRvb2xzLlRvb2xCb3goIHRvb2xfY29u Zmlncywgc2VsZi5jb25maWcudG9vbF9wYXQ9CmgsIHNlbGYgKQotICAgICAgICAjIFNlYXJjaCBz dXBwb3J0IGZvciB0b29scwotICAgICAgICBpbXBvcnQgZ2FsYXh5LnRvb2xzLnNlYXJjaAotICAg ICAgICBpbmRleF9oZWxwID0zRCBnZXRhdHRyKCBzZWxmLmNvbmZpZywgImluZGV4X3Rvb2xfaGVs cCIsIFRydWUgKQotICAgICAgICBzZWxmLnRvb2xib3hfc2VhcmNoID0zRCBnYWxheHkudG9vbHMu c2VhcmNoLlRvb2xCb3hTZWFyY2goIHNlbGYudG89Cm9sYm94LCBpbmRleF9oZWxwICkKKyAgICAg ICAgc2VsZi5yZWluZGV4X3Rvb2xfc2VhcmNoKCkKPTIwCiAgICAgICAgIGZyb20gZ2FsYXh5LnRv b2xzLmRlcHMgaW1wb3J0IGNvbnRhaW5lcnMKICAgICAgICAgZ2FsYXh5X3Jvb3RfZGlyID0zRCBv cy5wYXRoLmFic3BhdGgoc2VsZi5jb25maWcucm9vdCkKQEAgLTcyMCw3ICs3MTksMTMgQEAKICAg ICAgICAgICAgIG91dHB1dHNfdG9fd29ya2luZ19kaXJlY3Rvcnk9M0RzZWxmLmNvbmZpZy5vdXRw dXRzX3RvX3dvcmtpbmdfPQpkaXJlY3RvcnksCiAgICAgICAgICAgICBjb250YWluZXJfaW1hZ2Vf Y2FjaGVfcGF0aD0zRHNlbGYuY29uZmlnLmNvbnRhaW5lcl9pbWFnZV9jYWNoZT0KX3BhdGgsCiAg ICAgICAgICkKLSAgICAgICAgc2VsZi5jb250YWluZXJfZmluZGVyID0zRCBnYWxheHkudG9vbHMu ZGVwcy5jb250YWluZXJzLkNvbnRhaW5lckZpPQpuZGVyKGFwcF9pbmZvKQorICAgICAgICBzZWxm LmNvbnRhaW5lcl9maW5kZXIgPTNEIGNvbnRhaW5lcnMuQ29udGFpbmVyRmluZGVyKGFwcF9pbmZv KQorCisgICAgZGVmIHJlaW5kZXhfdG9vbF9zZWFyY2goIHNlbGYgKToKKyAgICAgICAgIyBDYWxs IHRoaXMgd2hlbiB0b29scyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICAgICAgaW1wb3J0IGdh bGF4eS50b29scy5zZWFyY2gKKyAgICAgICAgaW5kZXhfaGVscCA9M0QgZ2V0YXR0ciggc2VsZi5j b25maWcsICJpbmRleF90b29sX2hlbHAiLCBUcnVlICkKKyAgICAgICAgc2VsZi50b29sYm94X3Nl YXJjaCA9M0QgZ2FsYXh5LnRvb2xzLnNlYXJjaC5Ub29sQm94U2VhcmNoKCBzZWxmLnRvPQpvbGJv eCwgaW5kZXhfaGVscCApCj0yMAogICAgIGRlZiBfY29uZmlndXJlX3Rvb2xfZGF0YV90YWJsZXMo IHNlbGYsIGZyb21fc2hlZF9jb25maWcgKToKICAgICAgICAgZnJvbSBnYWxheHkudG9vbHMuZGF0 YSBpbXBvcnQgVG9vbERhdGFUYWJsZU1hbmFnZXIKCmRpZmYgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNh NjlhM2Y0OWRiZDhkYjBhNDVkNWE4OCAtciBlNjMzODhmZDZjYmYzNDNhN2IwMzQ5Nj0KMWQxMzlm MTRhZDBkYzYzMjQgbGliL2dhbGF4eS9kYXRhdHlwZXMvcmVnaXN0cnkucHkKLS0tIGEvbGliL2dh bGF4eS9kYXRhdHlwZXMvcmVnaXN0cnkucHkKKysrIGIvbGliL2dhbGF4eS9kYXRhdHlwZXMvcmVn aXN0cnkucHkKQEAgLTUyOSwxNCArNTI5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29udmVydGVyLmlkID0zRCB0b29sX2RpY3RbICdndWlkJyBdCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBkZWFjdGl2YXRlOgotICAgICAg ICAgICAgICAgICAgICBpZiBjb252ZXJ0ZXIuaWQgaW4gdG9vbGJveC50b29sc19ieV9pZDoKLSAg ICAgICAgICAgICAgICAgICAgICAgIGRlbCB0b29sYm94LnRvb2xzX2J5X2lkWyBjb252ZXJ0ZXIu aWQgXQorICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZV90b29sX2J5X2lkKCBjb252 ZXJ0ZXIuaWQsIHJlbW92ZV9mcm9tX3A9CmFuZWw9M0RGYWxzZSApCiAgICAgICAgICAgICAgICAg ICAgIGlmIHNvdXJjZV9kYXRhdHlwZSBpbiBzZWxmLmRhdGF0eXBlX2NvbnZlcnRlcnM6CiAgICAg ICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRfZGF0YXR5cGUgaW4gc2VsZi5kYXRhdHlwZV9j b252ZXJ0ZXJzWyBzbz0KdXJjZV9kYXRhdHlwZSBdOgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRlbCBzZWxmLmRhdGF0eXBlX2NvbnZlcnRlcnNbIHNvdXJjZV9kYXRhdHlwZSA9Cl1bIHRh cmdldF9kYXRhdHlwZSBdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKCAiRGVh Y3RpdmF0ZWQgY29udmVydGVyOiAlcyIsIGNvbnZlcnRlcj0KLmlkICkKICAgICAgICAgICAgICAg ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0b29sYm94LnRvb2xzX2J5X2lkWyBjb252ZXJ0 ZXIuaWQgXSA9M0QgY29udmVydGVyCisgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVnaXN0 ZXJfdG9vbCggY29udmVydGVyICkKICAgICAgICAgICAgICAgICAgICAgaWYgc291cmNlX2RhdGF0 eXBlIG5vdCBpbiBzZWxmLmRhdGF0eXBlX2NvbnZlcnRlcnM6CiAgICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLmRhdGF0eXBlX2NvbnZlcnRlcnNbIHNvdXJjZV9kYXRhdHlwZSBdID0zRCBvZD0K aWN0KCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhdHlwZV9jb252ZXJ0ZXJzWyBzb3Vy Y2VfZGF0YXR5cGUgXVsgdGFyZ2V0X2RhPQp0YXR5cGUgXSA9M0QgY29udmVydGVyCkBAIC02NDUs OCArNjQ0LDcgQEAKICAgICAgICAgdG1wX25hbWUgPTNEIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5 RmlsZSgpCiAgICAgICAgIHRtcF9uYW1lLndyaXRlKCB0b29sX3htbF90ZXh0ICkKICAgICAgICAg dG1wX25hbWUuZmx1c2goKQotICAgICAgICBzZXRfbWV0YV90b29sID0zRCB0b29sYm94LmxvYWRf dG9vbCggdG1wX25hbWUubmFtZSApCi0gICAgICAgIHRvb2xib3gudG9vbHNfYnlfaWRbIHNldF9t ZXRhX3Rvb2wuaWQgXSA9M0Qgc2V0X21ldGFfdG9vbAorICAgICAgICBzZXRfbWV0YV90b29sID0z RCB0b29sYm94LmxvYWRfaGlkZGVuX3Rvb2woIHRtcF9uYW1lLm5hbWUgKQogICAgICAgICBzZWxm LnNldF9leHRlcm5hbF9tZXRhZGF0YV90b29sID0zRCBzZXRfbWV0YV90b29sCiAgICAgICAgIHNl bGYubG9nLmRlYnVnKCAiTG9hZGVkIGV4dGVybmFsIG1ldGFkYXRhIHRvb2w6ICVzIiwgc2VsZi5z ZXRfZXh0ZT0Kcm5hbF9tZXRhZGF0YV90b29sLmlkICkKPTIwCgpkaWZmIC1yIGViMjEwY2NjNmQ3 NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0OTY9 CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxheHkvZGF0YXR5cGVzL3RleHQucHkKLS0tIGEvbGli L2dhbGF4eS9kYXRhdHlwZXMvdGV4dC5weQorKysgYi9saWIvZ2FsYXh5L2RhdGF0eXBlcy90ZXh0 LnB5CkBAIC02LDYgKzYsNyBAQAogZnJvbSBnYWxheHkuZGF0YXR5cGVzLmRhdGEgaW1wb3J0IFRl eHQKIGZyb20gZ2FsYXh5LmRhdGF0eXBlcy5kYXRhIGltcG9ydCBnZXRfZmlsZV9wZWVrCiBmcm9t IGdhbGF4eS5kYXRhdHlwZXMuZGF0YSBpbXBvcnQgbmljZV9zaXplCitmcm9tIGdhbGF4eS5kYXRh dHlwZXMubWV0YWRhdGEgaW1wb3J0IE1ldGFkYXRhRWxlbWVudAogZnJvbSBnYWxheHkgaW1wb3J0 IHV0aWwKPTIwCiBpbXBvcnQgdGVtcGZpbGUKQEAgLTE1NSwzICsxNTYsMTA2IEBACiAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKPTIwCisK K2NsYXNzIEFyZmYoIFRleHQgKToKKyAgICAiIiIKKyAgICAgICAgQW4gQVJGRiAoQXR0cmlidXRl LVJlbGF0aW9uIEZpbGUgRm9ybWF0KSBmaWxlIGlzIGFuIEFTQ0lJIHRleHQgZmlsPQplIHRoYXQg ZGVzY3JpYmVzIGEgbGlzdCBvZiBpbnN0YW5jZXMgc2hhcmluZyBhIHNldCBvZiBhdHRyaWJ1dGVz Lj0yMAorICAgICAgICBodHRwOi8vd2VrYS53aWtpc3BhY2VzLmNvbS9BUkZGCisgICAgIiIiCisg ICAgZmlsZV9leHQgPTNEICJhcmZmIgorCisKKyAgICAiIiJBZGQgbWV0YWRhdGEgZWxlbWVudHMi IiIKKyAgICBNZXRhZGF0YUVsZW1lbnQoIG5hbWU9M0QiY29tbWVudF9saW5lcyIsIGRlZmF1bHQ9 M0QwLCBkZXNjPTNEIk51bWJlciBvPQpmIGNvbW1lbnQgbGluZXMiLCByZWFkb25seT0zRFRydWUs IG9wdGlvbmFsPTNEVHJ1ZSwgbm9fdmFsdWU9M0QwICkKKyAgICBNZXRhZGF0YUVsZW1lbnQoIG5h bWU9M0QiY29sdW1ucyIsIGRlZmF1bHQ9M0QwLCBkZXNjPTNEIk51bWJlciBvZiBjb2x1PQptbnMi LCByZWFkb25seT0zRFRydWUsIHZpc2libGU9M0RUcnVlLCBub192YWx1ZT0zRDAgKQorCisgICAg ZGVmIHNldF9wZWVrKCBzZWxmLCBkYXRhc2V0LCBpc19tdWx0aV9ieXRlPTNERmFsc2UgKToKKyAg ICAgICAgaWYgbm90IGRhdGFzZXQuZGF0YXNldC5wdXJnZWQ6CisgICAgICAgICAgICBkYXRhc2V0 LnBlZWsgPTNEIGdldF9maWxlX3BlZWsoIGRhdGFzZXQuZmlsZV9uYW1lLCBpc19tdWx0aV9ieT0K dGU9M0Rpc19tdWx0aV9ieXRlICkKKyAgICAgICAgICAgIGRhdGFzZXQuYmx1cmIgPTNEICJBdHRy aWJ1dGUtUmVsYXRpb24gRmlsZSBGb3JtYXQgKEFSRkYpIgorICAgICAgICAgICAgZGF0YXNldC5i bHVyYiArPTNEICIsICVzIGNvbW1lbnRzLCAlcyBhdHRyaWJ1dGVzIiAlICggZGF0YXNldC49Cm1l dGFkYXRhLmNvbW1lbnRfbGluZXMsIGRhdGFzZXQubWV0YWRhdGEuY29sdW1ucyApCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEICdmaWxlIGRvZXMgbm90IGV4aXN0 JworICAgICAgICAgICAgZGF0YXNldC5ibHVyYiA9M0QgJ2ZpbGUgcHVyZ2VkIGZyb20gZGlzYycK KworICAgIGRlZiBzbmlmZiggc2VsZiwgZmlsZW5hbWUgKToKKyAgICAgICAgIiIiCisgICAgICAg ICAgICBUcnkgdG8gZ3Vlc3MgdGhlIEFyZmYgZmlsZXR5cGUuPTIwCisgICAgICAgICAgICBJdCB1 c3VhbGx5IHN0YXJ0cyB3aXRoIGEgImZvcm1hdC12ZXJzaW9uOiIgc3RyaW5nIGFuZCBoYXMgc2V2 ZT0KcmFsIHN0YW56YXMgd2hpY2ggc3RhcnRzIHdpdGggImlkOiIuCisgICAgICAgICIiIgorICAg ICAgICB3aXRoIG9wZW4oIGZpbGVuYW1lICkgYXMgaGFuZGxlOgorICAgICAgICAgICAgcmVsYXRp b25fZm91bmQgPTNEIEZhbHNlCisgICAgICAgICAgICBhdHRyaWJ1dGVfZm91bmQgPTNEIEZhbHNl CisgICAgICAgICAgICBwcmVmaXggPTNEICIiCisgICAgICAgICAgICBmb3IgbGluZV9jb3VudCwg bGluZSBpbiBlbnVtZXJhdGUoIGhhbmRsZSApOgorICAgICAgICAgICAgICAgIGlmIGxpbmVfY291 bnQgPiAxMDAwOgorICAgICAgICAgICAgICAgICAgICAjIG9ubHkgaW52ZXN0aWdhdGUgdGhlIGZp cnN0IDEwMDAgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg ICAgICAgICAgbGluZSA9M0QgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxp bmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdGFy dF9zdHJpbmcgPTNEIGxpbmVbOjIwXS51cHBlcigpCisgICAgICAgICAgICAgICAgaWYgc3RhcnRf c3RyaW5nLnN0YXJ0c3dpdGgoIkBSRUxBVElPTiIpOgorICAgICAgICAgICAgICAgICAgICByZWxh dGlvbl9mb3VuZCA9M0QgVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgc3RhcnRfc3RyaW5nLnN0 YXJ0c3dpdGgoIkBBVFRSSUJVVEUiKToKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlX2Zv dW5kID0zRCBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBzdGFydF9zdHJpbmcuc3RhcnRzd2l0 aCgiQERBVEEiKToKKyAgICAgICAgICAgICAgICAgICAgIyBAREFUQSBzaG91bGQgYmUgdGhlIGxh c3QgZGF0YSBibG9jaworICAgICAgICAgICAgICAgICAgICBpZiByZWxhdGlvbl9mb3VuZCBhbmQg YXR0cmlidXRlX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2V0X21ldGEoIHNlbGYsIGRhdGFzZXQsICoq a3dkICk6CisgICAgICAgICIiIgorICAgICAgICAgICAgVHJ5aW5nIHRvIGNvdW50IHRoZSBjb21t ZW50IGxpbmVzIGFuZCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW49CmNsdWRlZC4KKyAgICAgICAg ICAgIEEgdHlwaWNhbCBBUkZGIGRhdGEgYmxvY2sgbG9va3MgbGlrZSB0aGlzOgorICAgICAgICAg ICAgQERBVEEKKyAgICAgICAgICAgIDUuMSwzLjUsMS40LDAuMixJcmlzLXNldG9zYQorICAgICAg ICAgICAgNC45LDMuMCwxLjQsMC4yLElyaXMtc2V0b3NhCisgICAgICAgICIiIgorICAgICAgICBp ZiBkYXRhc2V0Lmhhc19kYXRhKCk6CisgICAgICAgICAgICBjb21tZW50X2xpbmVzID0zRCAwCisg ICAgICAgICAgICBmaXJzdF9yZWFsX2xpbmUgPTNEIEZhbHNlCisgICAgICAgICAgICBkYXRhX2Js b2NrID0zRCBGYWxzZQorICAgICAgICAgICAgd2l0aCBvcGVuKCBkYXRhc2V0LmZpbGVfbmFtZSAp IGFzIGhhbmRsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBoYW5kbGU6CisgICAgICAg ICAgICAgICAgICAgIGxpbmUgPTNEIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBp ZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg ICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnJScpIGFuZCBub3QgZmlyc3RfcmVhbF9saW5l OgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudF9saW5lcyArPTNEIDEKKyAgICAgICAg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3JlYWxfbGlu ZSA9M0QgVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBkYXRhX2Jsb2NrOgorICAgICAgICAg ICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd7Jyk6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBTcGFyc2UgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRhdGEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgWCwgMCwgWSwgImNsYXNzIEEiLCB7NX0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBAZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSBYLCAzIFksIDQg ImNsYXNzIEEifSwgezV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPTNEIGxpbmUuc3BsaXQoJ30nLDEpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmlyc3RfcGFydCA9M0QgdG9rZW5bMF0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbiA9M0QgZmlyc3RfcGFydC5zcGxpdCgnLCcpWy0x XS5zdHJpPQpwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX3ZhbHVlID0z RCBsYXN0X2NvbHVtbi5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s dW1uX2NvdW50ID0zRCBpbnQobnVtZXJpY192YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiBsZW4odG9rZW4pID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwgd2VpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbHVtbl9jb3VudCAtPTNEIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9M0QgbGluZS5zdHJpcCgpLnNw bGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fY291bnQgPTNEIGxl bihjb2x1bW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbnNbLTFdLnN0 cmlwKCkuc3RhcnRzd2l0aCgneycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IHdlIGhhdmUgYW4gYWRkaXRpb25hbCB3ZWlnaHQgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb2x1bW5fY291bnQgLT0zRCAxCisKKyAgICAgICAgICAgICAgICAg ICAgICAgICMgV2UgaGF2ZSBub3cgdGhlIGNvbHVtbl9jb3VudCBhbmQgd2Uga25vdyB0aGUgaW5p PQp0aWFsIGNvbW1lbnQgbGluZXMuIFNvIHdlIGNhbiB0ZXJtaW5hdGUgaGVyZS4KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbOjVdLnVw cGVyKCkgPTNEPTNEICJAREFUQSI6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Jsb2Nr ID0zRCBUcnVlCisgICAgICAgIGRhdGFzZXQubWV0YWRhdGEuY29tbWVudF9saW5lcyA9M0QgY29t bWVudF9saW5lcworICAgICAgICBkYXRhc2V0Lm1ldGFkYXRhLmNvbHVtbnMgPTNEIGNvbHVtbl9j b3VudAorCgpkaWZmIC1yIGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODgg LXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxheHkv am9icy9fX2luaXRfXy5weQotLS0gYS9saWIvZ2FsYXh5L2pvYnMvX19pbml0X18ucHkKKysrIGIv bGliL2dhbGF4eS9qb2JzL19faW5pdF9fLnB5CkBAIC03MTEsNyArNzExLDcgQEAKICAgICAgICAg c2VsZi5qb2JfaWQgPTNEIGpvYi5pZAogICAgICAgICBzZWxmLnNlc3Npb25faWQgPTNEIGpvYi5z ZXNzaW9uX2lkCiAgICAgICAgIHNlbGYudXNlcl9pZCA9M0Qgam9iLnVzZXJfaWQKLSAgICAgICAg c2VsZi50b29sID0zRCBxdWV1ZS5hcHAudG9vbGJveC50b29sc19ieV9pZC5nZXQoIGpvYi50b29s X2lkLCBOb25lPQogKQorICAgICAgICBzZWxmLnRvb2wgPTNEIHF1ZXVlLmFwcC50b29sYm94Lmdl dF90b29sKCBqb2IudG9vbF9pZCwgam9iLnRvb2xfdmU9CnJzaW9uLCBleGFjdD0zRFRydWUgKQog ICAgICAgICBzZWxmLnF1ZXVlID0zRCBxdWV1ZQogICAgICAgICBzZWxmLmFwcCA9M0QgcXVldWUu YXBwCiAgICAgICAgIHNlbGYuc2Ffc2Vzc2lvbiA9M0Qgc2VsZi5hcHAubW9kZWwuY29udGV4dAoK ZGlmZiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZjQ5ZGJkOGRiMGE0NWQ1YTg4IC1yIGU2MzM4 OGZkNmNiZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFkMGRjNjMyNCBsaWIvZ2FsYXh5L2pvYnMvZGVm ZXJyZWQvZGF0YV90cmFuc2Zlci5weQotLS0gYS9saWIvZ2FsYXh5L2pvYnMvZGVmZXJyZWQvZGF0 YV90cmFuc2Zlci5weQorKysgYi9saWIvZ2FsYXh5L2pvYnMvZGVmZXJyZWQvZGF0YV90cmFuc2Zl ci5weQpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgICAgIGZvciBpLCBzdGVwIGluIGVudW1lcmF0 ZSggd29ya2Zsb3cuc3RlcHMgKToKICAgICAgICAgICAgIGpvYiA9M0QgTm9uZQogICAgICAgICAg ICAgaWYgc3RlcC50eXBlID0zRD0zRCAndG9vbCcgb3Igc3RlcC50eXBlIGlzIE5vbmU6Ci0gICAg ICAgICAgICAgICAgdG9vbCA9M0Qgc2VsZi5hcHAudG9vbGJveC50b29sc19ieV9pZFsgc3RlcC50 b29sX2lkIF0KKyAgICAgICAgICAgICAgICB0b29sID0zRCBzZWxmLmFwcC50b29sYm94LmdldF90 b29sKCBzdGVwLnRvb2xfaWQgKQogICAgICAgICAgICAgICAgIGRlZiBjYWxsYmFjayggaW5wdXQs IHZhbHVlLCBwcmVmaXhlZF9uYW1lLCBwcmVmaXhlZF9sYWJlbCA9Cik6CiAgICAgICAgICAgICAg ICAgICAgIGlmIGlzaW5zdGFuY2UoIGlucHV0LCBEYXRhVG9vbFBhcmFtZXRlciApOgogICAgICAg ICAgICAgICAgICAgICAgICAgaWYgcHJlZml4ZWRfbmFtZSBpbiBzdGVwLmlucHV0X2Nvbm5lY3Rp b25zX2J5X25hbWU6CgpkaWZmIC1yIGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1 ZDVhODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9n YWxheHkvam9icy9oYW5kbGVyLnB5Ci0tLSBhL2xpYi9nYWxheHkvam9icy9oYW5kbGVyLnB5Cisr KyBiL2xpYi9nYWxheHkvam9icy9oYW5kbGVyLnB5CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKCBtb2RlbC5Kb2IuaGFuZGxlciA9 M0Q9M0Qgc2VsZi5hPQpwcC5jb25maWcuc2VydmVyX25hbWUgKSApLmFsbCgpCj0yMAogICAgICAg ICBmb3Igam9iIGluIGpvYnNfYXRfc3RhcnR1cDoKLSAgICAgICAgICAgIGlmIGpvYi50b29sX2lk IG5vdCBpbiBzZWxmLmFwcC50b29sYm94LnRvb2xzX2J5X2lkOgorICAgICAgICAgICAgaWYgbm90 IHNlbGYuYXBwLnRvb2xib3guaGFzX3Rvb2woIGpvYi50b29sX2lkLCBqb2IudG9vbF92ZXJzaW89 Cm4sIGV4YWN0PTNEVHJ1ZSApOgogICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKCAiKCVzKSBU b29sICclcycgcmVtb3ZlZCBmcm9tIHRvb2wgY29uZmlnLCB1bmE9CmJsZSB0byByZWNvdmVyIGpv YiIgJSAoIGpvYi5pZCwgam9iLnRvb2xfaWQgKSApCiAgICAgICAgICAgICAgICAgc2VsZi5qb2Jf d3JhcHBlciggam9iICkuZmFpbCggJ1RoaXMgdG9vbCB3YXMgZGlzYWJsZWQgYmVmbz0KcmUgdGhl IGpvYiBjb21wbGV0ZWQuICBQbGVhc2UgY29udGFjdCB5b3VyIEdhbGF4eSBhZG1pbmlzdHJhdG9y LicgKQogICAgICAgICAgICAgZWxpZiBqb2Iuam9iX3J1bm5lcl9uYW1lIGlzIG5vdCBOb25lIGFu ZCBqb2Iuam9iX3J1bm5lcl9leHRlcm49CmFsX2lkIGlzIE5vbmU6CgpkaWZmIC1yIGViMjEwY2Nj NmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0 OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxheHkvbWFuYWdlcnMvd29ya2Zsb3dzLnB5Ci0t LSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvd29ya2Zsb3dzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFu YWdlcnMvd29ya2Zsb3dzLnB5CkBAIC0yMjQsNyArMjI0LDcgQEAKICAgICAgICAgZXJyb3JzID0z RCBbXQogICAgICAgICBmb3Iga2V5LCBzdGVwX2RpY3QgaW4gZGF0YVsnc3RlcHMnXS5pdGVyaXRl bXMoKToKICAgICAgICAgICAgIGlzX3Rvb2wgPTNEIGlzX3Rvb2xfbW9kdWxlX3R5cGUoIHN0ZXBf ZGljdFsgJ3R5cGUnIF0gKQotICAgICAgICAgICAgaWYgaXNfdG9vbCBhbmQgc3RlcF9kaWN0Wyd0 b29sX2lkJ10gbm90IGluIHRyYW5zLmFwcC50b29sYm94LnQ9Cm9vbHNfYnlfaWQ6CisgICAgICAg ICAgICBpZiBpc190b29sIGFuZCBub3QgdHJhbnMuYXBwLnRvb2xib3guaGFzX3Rvb2woIHN0ZXBf ZGljdFsndG9vbD0KX2lkJ10sIGV4YWN0PTNEVHJ1ZSApOgogICAgICAgICAgICAgICAgIGVycm9y cy5hcHBlbmQoIlN0ZXAgJXMgcmVxdWlyZXMgdG9vbCAnJXMnLiIgJSAoc3RlcF9kaWN0Wyc9Cmlk J10sIHN0ZXBfZGljdFsndG9vbF9pZCddKSkKICAgICAgICAgaWYgZXJyb3JzOgogICAgICAgICAg ICAgcmFpc2UgTWlzc2luZ1Rvb2xzRXhjZXB0aW9uKHdvcmtmbG93LCBlcnJvcnMpCgpkaWZmIC1y IGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODggLXIgZTYzMzg4ZmQ2Y2Jm MzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxheHkvbW9kZWwvdG9vbF9zaGVk X2luc3RhbGwvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS9tb2RlbC90b29sX3NoZWRfaW5z dGFsbC9fX2luaXRfXy5weQorKysgYi9saWIvZ2FsYXh5L21vZGVsL3Rvb2xfc2hlZF9pbnN0YWxs L19faW5pdF9fLnB5CkBAIC0xMSw5ICsxMSw5IEBACj0yMAogY2xhc3MgVG9vbFNoZWRSZXBvc2l0 b3J5KCBvYmplY3QgKToKICAgICBkaWN0X2NvbGxlY3Rpb25fdmlzaWJsZV9rZXlzID0zRCAoICdp ZCcsICd0b29sX3NoZWQnLCAnbmFtZScsICdvd25lcicsPQogJ2luc3RhbGxlZF9jaGFuZ2VzZXRf cmV2aXNpb24nLCAnY2hhbmdlc2V0X3JldmlzaW9uJywgJ2N0eF9yZXYnLCAnaW5jbHVkZXM9Cl9k YXRhdHlwZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rvb2xfc2hl ZF9zdGF0dXMnLCAnZGVsZXRlZCcsICd1bmluc3Q9CmFsbGVkJywgJ2Rpc3RfdG9fc2hlZCcsICdz dGF0dXMnLCAnZXJyb3JfbWVzc2FnZScgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICd0b29sX3NoZWRfc3RhdHVzJywgJ2RlbGV0ZWQnLCAndW5pbnM9CnRhbGxlZCcsICdk aXN0X3RvX3NoZWQnLCAnc3RhdHVzJywgJ2Vycm9yX21lc3NhZ2UnICkKICAgICBkaWN0X2VsZW1l bnRfdmlzaWJsZV9rZXlzID0zRCAoICdpZCcsICd0b29sX3NoZWQnLCAnbmFtZScsICdvd25lcics ICdpPQpuc3RhbGxlZF9jaGFuZ2VzZXRfcmV2aXNpb24nLCAnY2hhbmdlc2V0X3JldmlzaW9uJywg J2N0eF9yZXYnLCAnaW5jbHVkZXNfZGE9CnRhdHlwZXMnLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Rvb2xfc2hlZF9zdGF0dXMnLCAnZGVsZXRlZCcsICd1bmluc3Q9CmFs bGVkJywgJ2Rpc3RfdG9fc2hlZCcsICdzdGF0dXMnLCAnZXJyb3JfbWVzc2FnZScgKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b29sX3NoZWRfc3RhdHVzJywgJ2RlbGV0ZWQn LCAndW5pbnN0YWw9CmxlZCcsICdkaXN0X3RvX3NoZWQnLCAnc3RhdHVzJywgJ2Vycm9yX21lc3Nh Z2UnICkKICAgICBpbnN0YWxsYXRpb25fc3RhdHVzID0zRCBCdW5jaCggTkVXPTNEJ05ldycsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9OSU5HPTNEJ0Nsb25pbmcnLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR19UT09MX1ZFUlNJT05TPTNEJ1Nl dHRpbmcgdG9vbCB2ZXI9CnNpb25zJywKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgaWYgbm90 IHNlbGYuc2hlZF9jb25maWdfZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmd1ZXNzX3NoZWRf Y29uZmlnKCBhcHAsIGRlZmF1bHQ9M0RkZWZhdWx0ICkKICAgICAgICAgaWYgc2VsZi5zaGVkX2Nv bmZpZ19maWxlbmFtZToKLSAgICAgICAgICAgIGZvciBzaGVkX3Rvb2xfY29uZl9kaWN0IGluIGFw cC50b29sYm94LnNoZWRfdG9vbF9jb25mczoKKyAgICAgICAgICAgIGZvciBzaGVkX3Rvb2xfY29u Zl9kaWN0IGluIGFwcC50b29sYm94LmR5bmFtaWNfY29uZnMoIGluY2x1ZGVfPQptaWdyYXRlZF90 b29sX2NvbmY9M0RUcnVlICk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5zaGVkX2NvbmZpZ19m aWxlbmFtZSA9M0Q9M0Qgc2hlZF90b29sX2NvbmZfZGljdFsgJz0KY29uZmlnX2ZpbGVuYW1lJyBd OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hlZF90b29sX2NvbmZfZGljdAogICAgICAg ICByZXR1cm4gZGVmYXVsdApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIG1ldGFkYXRhID0z RCBzZWxmLm1ldGFkYXRhIG9yIHt9CiAgICAgICAgIGZvciB0b29sIGluIG1ldGFkYXRhLmdldCgg J3Rvb2xzJywgW10gKToKICAgICAgICAgICAgIHRvb2xfaWRzLmFwcGVuZCggdG9vbC5nZXQoICdn dWlkJyApICkKLSAgICAgICAgZm9yIHNoZWRfdG9vbF9jb25mX2RpY3QgaW4gYXBwLnRvb2xib3gu c2hlZF90b29sX2NvbmZzOgorICAgICAgICBmb3Igc2hlZF90b29sX2NvbmZfZGljdCBpbiBhcHAu dG9vbGJveC5keW5hbWljX2NvbmZzKCBpbmNsdWRlX21pZ3I9CmF0ZWRfdG9vbF9jb25mPTNEVHJ1 ZSApOgogICAgICAgICAgICAgbmFtZSA9M0Qgc2hlZF90b29sX2NvbmZfZGljdFsgJ2NvbmZpZ19m aWxlbmFtZScgXQogICAgICAgICAgICAgZm9yIGVsZW0gaW4gc2hlZF90b29sX2NvbmZfZGljdFsg J2NvbmZpZ19lbGVtcycgXToKICAgICAgICAgICAgICAgICBpZiBlbGVtLnRhZyA9M0Q9M0QgJ3Rv b2wnOgpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgICAgIGlmIHNlbGYuaW5jbHVkZXNfZGF0YXR5 cGVzOgogICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHNlYXJjaCBieSBmaWxlIHBhdGhzIGhlcmUs IHdoaWNoIGlzIGxlc3MgZGVzaXJhYmw9CmUuCiAgICAgICAgICAgICB0b29sX3NoZWQgPTNEIGNv bW1vbl91dGlsLnJlbW92ZV9wcm90b2NvbF9hbmRfcG9ydF9mcm9tX3Rvb2xfcz0KaGVkX3VybCgg c2VsZi50b29sX3NoZWQgKQotICAgICAgICAgICAgZm9yIHNoZWRfdG9vbF9jb25mX2RpY3QgaW4g YXBwLnRvb2xib3guc2hlZF90b29sX2NvbmZzOgorICAgICAgICAgICAgZm9yIHNoZWRfdG9vbF9j b25mX2RpY3QgaW4gYXBwLnRvb2xib3guZHluYW1pY19jb25mcyggaW5jbHVkZV89Cm1pZ3JhdGVk X3Rvb2xfY29uZj0zRFRydWUgKToKICAgICAgICAgICAgICAgICB0b29sX3BhdGggPTNEIHNoZWRf dG9vbF9jb25mX2RpY3RbICd0b29sX3BhdGgnIF0KICAgICAgICAgICAgICAgICByZWxhdGl2ZV9w YXRoID0zRCBvcy5wYXRoLmpvaW4oIHRvb2xfcGF0aCwgdG9vbF9zaGVkLCAncmVwPQpvcycsIHNl bGYub3duZXIsIHNlbGYubmFtZSwgc2VsZi5pbnN0YWxsZWRfY2hhbmdlc2V0X3JldmlzaW9uICkK ICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyggcmVsYXRpdmVfcGF0aCApOgpAQCAt Mjg0LDcgKzI4NCw3IEBACj0yMAogICAgIGRlZiByZXBvX3BhdGgoIHNlbGYsIGFwcCApOgogICAg ICAgICB0b29sX3NoZWQgPTNEIGNvbW1vbl91dGlsLnJlbW92ZV9wcm90b2NvbF9hbmRfcG9ydF9m cm9tX3Rvb2xfc2hlZF89CnVybCggc2VsZi50b29sX3NoZWQgKQotICAgICAgICBmb3IgaW5kZXgs IHNoZWRfdG9vbF9jb25mX2RpY3QgaW4gZW51bWVyYXRlKCBhcHAudG9vbGJveC5zaGVkX3Rvb2w9 Cl9jb25mcyApOgorICAgICAgICBmb3Igc2hlZF90b29sX2NvbmZfZGljdCBpbiBhcHAudG9vbGJv eC5keW5hbWljX2NvbmZzKCBpbmNsdWRlX21pZ3I9CmF0ZWRfdG9vbF9jb25mPTNEVHJ1ZSApOgog ICAgICAgICAgICAgdG9vbF9wYXRoID0zRCBzaGVkX3Rvb2xfY29uZl9kaWN0WyAndG9vbF9wYXRo JyBdCiAgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0zRCBvcy5wYXRoLmpvaW4oIHRvb2xfcGF0 aCwgdG9vbF9zaGVkLCAncmVwb3MnLD0KIHNlbGYub3duZXIsIHNlbGYubmFtZSwgc2VsZi5pbnN0 YWxsZWRfY2hhbmdlc2V0X3JldmlzaW9uICkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz KCByZWxhdGl2ZV9wYXRoICk6CkBAIC0zNTYsMTIgKzM1NiwxMiBAQAogICAgICAgICAgICAgZm9y IHJkX3R1cCBpbiByZF90dXBzOgogICAgICAgICAgICAgICAgIGlmIGxlbiggcmRfdHVwICkgPTNE PTNEIDU6CiAgICAgICAgICAgICAgICAgICAgIHRvb2xfc2hlZCwgbmFtZSwgb3duZXIsIGNoYW5n ZXNldF9yZXZpc2lvbiwgcHJpb3JfaW5zdD0KYWxsYXRpb25fcmVxdWlyZWQsIG9ubHlfaWZfY29t cGlsaW5nX2NvbnRhaW5lZF90ZCA9M0QgXAotICAgICAgICAgICAgICAgICAgICBjb21tb25fdXRp bC5wYXJzZV9yZXBvc2l0b3J5X2RlcGVuZGVuY3lfdHVwbGUoIHJkX3R1cCw9CiBjb250YWluc19l cnJvcj0zREZhbHNlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbl91dGlsLnBhcnNl X3JlcG9zaXRvcnlfZGVwZW5kZW5jeV90dXBsZSggcmRfPQp0dXAsIGNvbnRhaW5zX2Vycm9yPTNE RmFsc2UgKQogICAgICAgICAgICAgICAgICAgICBpZiBhc2Jvb2woIHByaW9yX2luc3RhbGxhdGlv bl9yZXF1aXJlZCApOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfcmRfdHVwc190 aGF0X211c3RfYmVfaW5zdGFsbGVkLmFwcGVuZCggKCA9CnRvb2xfc2hlZCwgbmFtZSwgb3duZXIs IGNoYW5nZXNldF9yZXZpc2lvbiwgJ1RydWUnLCAnRmFsc2UnICkgKQogICAgICAgICAgICAgICAg IGVsaWYgbGVuKCByZF90dXAgKSA9M0Q9M0QgNjoKICAgICAgICAgICAgICAgICAgICAgdG9vbF9z aGVkLCBuYW1lLCBvd25lciwgY2hhbmdlc2V0X3JldmlzaW9uLCBwcmlvcl9pbnN0PQphbGxhdGlv bl9yZXF1aXJlZCwgb25seV9pZl9jb21waWxpbmdfY29udGFpbmVkX3RkID0zRCBcCi0gICAgICAg ICAgICAgICAgICAgIGNvbW1vbl91dGlsLnBhcnNlX3JlcG9zaXRvcnlfZGVwZW5kZW5jeV90dXBs ZSggcmRfdHVwLD0KIGNvbnRhaW5zX2Vycm9yPTNERmFsc2UgKQorICAgICAgICAgICAgICAgICAg ICAgICAgY29tbW9uX3V0aWwucGFyc2VfcmVwb3NpdG9yeV9kZXBlbmRlbmN5X3R1cGxlKCByZF89 CnR1cCwgY29udGFpbnNfZXJyb3I9M0RGYWxzZSApCiAgICAgICAgICAgICAgICAgICAgICMgVGhl IHJlcG9zaXRvcnkgZGVwZW5kZW5jeSB3aWxsIG9ubHkgYmUgcmVxdWlyZWQgdG8gYj0KZSBwcmV2 aW91c2x5IGluc3RhbGxlZCBpZiBpdCBkb2VzIG5vdCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9m CiAgICAgICAgICAgICAgICAgICAgICMgYSByZXBvc2l0b3J5IHRoYXQgbXVzdCBiZSBpbnN0YWxs ZWQgb25seSBzbyB0aGF0IGl0cz0KIGNvbnRhaW5lZCB0b29sIGRlcGVuZGVuY3kgY2FuIGJlIHVz ZWQgZm9yIGNvbXBpbGluZyB0aGUgdG9vbAogICAgICAgICAgICAgICAgICAgICAjIGRlcGVuZGVu Y3kgb2YgdGhlIGRlcGVuZGVudCByZXBvc2l0b3J5LgpAQCAtNDkzLDEyICs0OTMsMTQgQEAKPTIw Cj0yMAogY2xhc3MgUmVwb3NpdG9yeVJlcG9zaXRvcnlEZXBlbmRlbmN5QXNzb2NpYXRpb24oIG9i amVjdCApOgorCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB0b29sX3NoZWRfcmVwb3NpdG9yeV9p ZD0zRE5vbmUsIHJlcG9zaXRvcnlfZGVwZW5kZT0KbmN5X2lkPTNETm9uZSApOgogICAgICAgICBz ZWxmLnRvb2xfc2hlZF9yZXBvc2l0b3J5X2lkID0zRCB0b29sX3NoZWRfcmVwb3NpdG9yeV9pZAog ICAgICAgICBzZWxmLnJlcG9zaXRvcnlfZGVwZW5kZW5jeV9pZCA9M0QgcmVwb3NpdG9yeV9kZXBl bmRlbmN5X2lkCj0yMAo9MjAKIGNsYXNzIFJlcG9zaXRvcnlEZXBlbmRlbmN5KCBvYmplY3QgKToK KwogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgdG9vbF9zaGVkX3JlcG9zaXRvcnlfaWQ9M0ROb25l ICk6CiAgICAgICAgIHNlbGYudG9vbF9zaGVkX3JlcG9zaXRvcnlfaWQgPTNEIHRvb2xfc2hlZF9y ZXBvc2l0b3J5X2lkCj0yMApAQCAtNjQ3LDYgKzY0OSw3IEBACj0yMAo9MjAKIGNsYXNzIFRvb2xW ZXJzaW9uQXNzb2NpYXRpb24oIG9iamVjdCApOgorCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBp ZD0zRE5vbmUsIHRvb2xfaWQ9M0ROb25lLCBwYXJlbnRfaWQ9M0ROb25lICk6CiAgICAgICAgIHNl bGYuaWQgPTNEIGlkCiAgICAgICAgIHNlbGYudG9vbF9pZCA9M0QgdG9vbF9pZApAQCAtNjU0LDYg KzY1Nyw3IEBACj0yMAo9MjAKIGNsYXNzIE1pZ3JhdGVUb29scyggb2JqZWN0ICk6CisKICAgICBk ZWYgX19pbml0X18oIHNlbGYsIHJlcG9zaXRvcnlfaWQ9M0ROb25lLCByZXBvc2l0b3J5X3BhdGg9 M0ROb25lLCB2ZXJzPQppb249M0ROb25lICk6CiAgICAgICAgIHNlbGYucmVwb3NpdG9yeV9pZCA9 M0QgcmVwb3NpdG9yeV9pZAogICAgICAgICBzZWxmLnJlcG9zaXRvcnlfcGF0aCA9M0QgcmVwb3Np dG9yeV9wYXRoCgpkaWZmIC1yIGViMjEwY2NjNmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVh ODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxh eHkvdG9vbHMvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS90b29scy9fX2luaXRfXy5weQor KysgYi9saWIvZ2FsYXh5L3Rvb2xzL19faW5pdF9fLnB5CkBAIC03LDIwICs3LDEyIEBACiBpbXBv cnQganNvbgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwotaW1wb3J0IHBpcGVzCiBpbXBvcnQg cmUKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJpbmcKLWltcG9ydCB0YXJm aWxlCi1pbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB0cmFjZWJhY2sK IGltcG9ydCB0eXBlcwogaW1wb3J0IHVybGxpYgo9MjAKLWZyb20gbWF0aCBpbXBvcnQgaXNpbmYK LQogZnJvbSBnYWxheHkgaW1wb3J0IGVnZ3MKIGVnZ3MucmVxdWlyZSggIk1hcmt1cFNhZmUiICkg ICMgTWFya3VwU2FmZSBtdXN0IGxvYWQgYmVmb3JlIG1ha28KIGVnZ3MucmVxdWlyZSggIk1ha28i ICkKQEAgLTMyLDE1ICsyNCwxMiBAQAogZnJvbSBlbGVtZW50dHJlZSBpbXBvcnQgRWxlbWVudFRy ZWUKIGZyb20gbWFrby50ZW1wbGF0ZSBpbXBvcnQgVGVtcGxhdGUKIGZyb20gcGFzdGUgaW1wb3J0 IGh0dHBleGNlcHRpb25zCi1mcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGFuZF8KPTIwCi1mcm9tIGdh bGF4eSBpbXBvcnQgam9icywgbW9kZWwKLWZyb20gZ2FsYXh5LmpvYnMuZXJyb3JfbGV2ZWwgaW1w b3J0IFN0ZGlvRXJyb3JMZXZlbAorZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCiBmcm9tIGdhbGF4 eS5kYXRhdHlwZXMubWV0YWRhdGEgaW1wb3J0IEpvYkV4dGVybmFsT3V0cHV0TWV0YWRhdGFXcmFw cGVyCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwotZnJvbSBnYWxheHkuam9icyBpbXBv cnQgUGFyYWxsZWxpc21JbmZvCi1mcm9tIGdhbGF4eS50b29scyBpbXBvcnQgd2F0Y2hlcgogZnJv bSBnYWxheHkudG9vbHMuYWN0aW9ucyBpbXBvcnQgRGVmYXVsdFRvb2xBY3Rpb24KK2Zyb20gZ2Fs YXh5LnRvb2xzLmFjdGlvbnMudXBsb2FkIGltcG9ydCBVcGxvYWRUb29sQWN0aW9uCiBmcm9tIGdh bGF4eS50b29scy5hY3Rpb25zLmRhdGFfc291cmNlIGltcG9ydCBEYXRhU291cmNlVG9vbEFjdGlv bgogZnJvbSBnYWxheHkudG9vbHMuYWN0aW9ucy5kYXRhX21hbmFnZXIgaW1wb3J0IERhdGFNYW5h Z2VyVG9vbEFjdGlvbgogZnJvbSBnYWxheHkudG9vbHMuZGVwcyBpbXBvcnQgYnVpbGRfZGVwZW5k ZW5jeV9tYW5hZ2VyCkBAIC01NCwyNiArNDMsMjEgQEAKIGZyb20gZ2FsYXh5LnRvb2xzLnBhcmFt ZXRlcnMuaW5wdXRfdHJhbnNsYXRpb24gaW1wb3J0IFRvb2xJbnB1dFRyYW5zbGF0b3IKIGZyb20g Z2FsYXh5LnRvb2xzLnBhcmFtZXRlcnMub3V0cHV0IGltcG9ydCBUb29sT3V0cHV0QWN0aW9uR3Jv dXAKIGZyb20gZ2FsYXh5LnRvb2xzLnBhcmFtZXRlcnMudmFsaWRhdGlvbiBpbXBvcnQgTGF0ZVZh bGlkYXRpb25FcnJvcgotZnJvbSBnYWxheHkudG9vbHMuZmlsdGVycyBpbXBvcnQgRmlsdGVyRmFj dG9yeQogZnJvbSBnYWxheHkudG9vbHMudGVzdCBpbXBvcnQgcGFyc2VfdGVzdHMKIGZyb20gZ2Fs YXh5LnRvb2xzLnBhcnNlciBpbXBvcnQgZ2V0X3Rvb2xfc291cmNlCiBmcm9tIGdhbGF4eS50b29s cy5wYXJzZXIueG1sIGltcG9ydCBYbWxQYWdlU291cmNlCi1mcm9tIGdhbGF4eS51dGlsIGltcG9y dCBsaXN0aWZ5LCBwYXJzZV94bWwsIHJzdF90b19odG1sLCBzdHJpbmdfYXNfYm9vbCwgcz0KdHJp bmdfdG9fb2JqZWN0LCB4bWxfdGV4dCwgeG1sX3RvX3N0cmluZworZnJvbSBnYWxheHkudG9vbHMu dG9vbGJveCBpbXBvcnQgQWJzdHJhY3RUb29sQm94Citmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBy c3RfdG9faHRtbCwgc3RyaW5nX2FzX2Jvb2wsIHN0cmluZ190b19vYmplY3QKIGZyb20gZ2FsYXh5 LnRvb2xzLnBhcmFtZXRlcnMubWV0YSBpbXBvcnQgZXhwYW5kX21ldGFfcGFyYW1ldGVycwogZnJv bSBnYWxheHkudXRpbC5idW5jaCBpbXBvcnQgQnVuY2gKIGZyb20gZ2FsYXh5LnV0aWwuZXhwcmVz c2lvbnMgaW1wb3J0IEV4cHJlc3Npb25Db250ZXh0CiBmcm9tIGdhbGF4eS51dGlsLmhhc2hfdXRp bCBpbXBvcnQgaG1hY19uZXcKLWZyb20gZ2FsYXh5LnV0aWwubm9uZV9saWtlIGltcG9ydCBOb25l RGF0YXNldAogZnJvbSBnYWxheHkudXRpbC5vZGljdCBpbXBvcnQgb2RpY3QKIGZyb20gZ2FsYXh5 LnV0aWwudGVtcGxhdGUgaW1wb3J0IGZpbGxfdGVtcGxhdGUKIGZyb20gZ2FsYXh5LndlYiBpbXBv cnQgdXJsX2ZvcgotZnJvbSBnYWxheHkud2ViLmZvcm1fYnVpbGRlciBpbXBvcnQgU2VsZWN0Rmll bGQKLWZyb20gZ2FsYXh5LndlYi5mcmFtZXdvcmsuaGVscGVycyBpbXBvcnQgZXNjYXBlCiBmcm9t IGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJzIGltcG9ydCBEaWN0aWZpYWJsZQotZnJvbSBnYWxheHku bW9kZWwgaW1wb3J0IFdvcmtmbG93Ci1mcm9tIHRvb2xfc2hlZC51dGlsIGltcG9ydCBjb21tb25f dXRpbAogZnJvbSB0b29sX3NoZWQudXRpbCBpbXBvcnQgc2hlZF91dGlsX2NvbW1vbiBhcyBzdWMK LWZyb20gLmxvYWRlciBpbXBvcnQgbG9hZF90b29sLCB0ZW1wbGF0ZV9tYWNyb19wYXJhbXMsIHJh d190b29sX3htbF90cmVlLCBpPQptcG9ydGVkX21hY3JvX3BhdGhzCitmcm9tIC5sb2FkZXIgaW1w b3J0IHRlbXBsYXRlX21hY3JvX3BhcmFtcywgcmF3X3Rvb2xfeG1sX3RyZWUsIGltcG9ydGVkX21h Yz0Kcm9fcGF0aHMKIGZyb20gLmV4ZWN1dGUgaW1wb3J0IGV4ZWN1dGUgYXMgZXhlY3V0ZV9qb2IK IGZyb20gLndyYXBwZXJzIGltcG9ydCAoCiAgICAgVG9vbFBhcmFtZXRlclZhbHVlV3JhcHBlciwK QEAgLTg1LDYgKzY5LDcgQEAKICAgICBEYXRhc2V0TGlzdFdyYXBwZXIsCiAgICAgRGF0YXNldENv bGxlY3Rpb25XcmFwcGVyLAogKQoraW1wb3J0IGdhbGF4eS5qb2JzCj0yMAo9MjAKIGxvZyA9M0Qg bG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKQEAgLTEwOCw2NDUgKzkzLDI1IEBACiAgICAg cGFzcwo9MjAKPTIwCi1kZWYgdG9fZGljdF9oZWxwZXIoIG9iaiwga3dhcmdzICk6Ci0gICAgIiIi IEhlbHBlciBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSBhcHByb3ByaWF0ZSBrd2FyZ3MgdG8g dG9fZGljdCBhbj0KIG9iamVjdC4gIiIiCi0KLSAgICAjIExhYmVsLnRvX2RpY3QgY2Fubm90IGhh dmUga3dhcmdzLgotICAgIGlmIGlzaW5zdGFuY2UoIG9iaiwgVG9vbFNlY3Rpb25MYWJlbCApOgot ICAgICAgICBrd2FyZ3MgPTNEIHt9Ci0KLSAgICByZXR1cm4gb2JqLnRvX2RpY3QoICoqa3dhcmdz ICkKLQotCi1jbGFzcyBUb29sQm94KCBvYmplY3QsIERpY3RpZmlhYmxlICk6Ci0gICAgIiIiQ29u dGFpbmVyIGZvciBhIGNvbGxlY3Rpb24gb2YgdG9vbHMiIiIKK2NsYXNzIFRvb2xCb3goIEFic3Ry YWN0VG9vbEJveCApOgorICAgICIiIiBBIGRlcml2YXRpdmUgb2YgQWJzdHJhY3RUb29sQm94IHdp dGgga25vd2xlZGdlIGFib3V0IFRvb2wgaW50ZXJuYWw9CnMgLQorICAgIGhvdyB0byBjb25zdHJ1 Y3QgdGhlbSwgYWN0aW9uIHR5cGVzLCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQsIGV0Yy4uLi4KKyAg ICAiIiIKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBjb25maWdfZmlsZW5hbWVzLCB0b29s X3Jvb3RfZGlyLCBhcHAgKToKLSAgICAgICAgIiIiCi0gICAgICAgIENyZWF0ZSBhIHRvb2xib3gg ZnJvbSB0aGUgY29uZmlnIGZpbGVzIG5hbWVkIGJ5IGBjb25maWdfZmlsZW5hbWVzYD0KLCB1c2lu ZwotICAgICAgICBgdG9vbF9yb290X2RpcmAgYXMgdGhlIGJhc2UgZGlyZWN0b3J5IGZvciBmaW5k aW5nIGluZGl2aWR1YWwgdG9vbCA9CmNvbmZpZyBmaWxlcy4KLSAgICAgICAgIiIiCi0gICAgICAg ICMgVGhlIHNoZWRfdG9vbF9jb25mcyBsaXN0IGNvbnRhaW5zIGRpY3Rpb25hcmllcyBzdG9yaW5n IGluZm9ybWF0aT0Kb24gYWJvdXQgdGhlIHRvb2xzIGRlZmluZWQgaW4gZWFjaAotICAgICAgICAj IHNoZWQtcmVsYXRlZCBzaGVkX3Rvb2xfY29uZi54bWwgZmlsZS4KLSAgICAgICAgc2VsZi5zaGVk X3Rvb2xfY29uZnMgPTNEIFtdCi0gICAgICAgIHNlbGYudG9vbHNfYnlfaWQgPTNEIHt9Ci0gICAg ICAgIHNlbGYud29ya2Zsb3dzX2J5X2lkID0zRCB7fQotICAgICAgICAjIEluLW1lbW9yeSBkaWN0 aW9uYXJ5IHRoYXQgZGVmaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSB0b29sIHBhbmVsLgotICAgICAg ICBzZWxmLnRvb2xfcGFuZWwgPTNEIG9kaWN0KCkKLSAgICAgICAgc2VsZi5pbmRleCA9M0QgMAot ICAgICAgICBzZWxmLmRhdGFfbWFuYWdlcl90b29scyA9M0Qgb2RpY3QoKQotICAgICAgICAjIEZp bGUgdGhhdCBjb250YWlucyB0aGUgWE1MIHNlY3Rpb24gYW5kIHRvb2wgdGFncyBmcm9tIGFsbCB0 b29sIHA9CmFuZWwgY29uZmlnIGZpbGVzIGludGVncmF0ZWQgaW50byBhCi0gICAgICAgICMgc2lu Z2xlIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSB0b29sIHBhbmVsIGxheW91dC4gIFRoaXMgZmlsZSBj YW4gYj0KZSBjaGFuZ2VkIGJ5IHRoZSBHYWxheHkgYWRtaW5pc3RyYXRvcgotICAgICAgICAjIChp biBhIHdheSBzaW1pbGFyIHRvIHRoZSBzaW5nbGUgdG9vbF9jb25mLnhtbCBmaWxlIGluIHRoZSBw YXN0KSA9CnRvIGFsdGVyIHRoZSBsYXlvdXQgb2YgdGhlIHRvb2wgcGFuZWwuCi0gICAgICAgIHNl bGYuaW50ZWdyYXRlZF90b29sX3BhbmVsX2NvbmZpZyA9M0QgYXBwLmNvbmZpZy5pbnRlZ3JhdGVk X3Rvb2xfcD0KYW5lbF9jb25maWcKLSAgICAgICAgIyBJbi1tZW1vcnkgZGljdGlvbmFyeSB0aGF0 IGRlZmluZXMgdGhlIGxheW91dCBvZiB0aGUgdG9vbF9wYW5lbC54PQptbCBmaWxlIG9uIGRpc2su Ci0gICAgICAgIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsID0zRCBvZGljdCgpCi0gICAgICAg IHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsX2NvbmZpZ19oYXNfY29udGVudHMgPTNEIG9zLnBh dGguZXhpc3RzKD0KIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsX2NvbmZpZyApIGFuZCBvcy5z dGF0KCBzZWxmLmludGVncmF0ZWRfdG9vbF9wYW5lPQpsX2NvbmZpZyApLnN0X3NpemUgPiAwCi0g ICAgICAgIGlmIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsX2NvbmZpZ19oYXNfY29udGVudHM6 Ci0gICAgICAgICAgICBzZWxmLmxvYWRfaW50ZWdyYXRlZF90b29sX3BhbmVsX2tleXMoKQotICAg ICAgICAjIFRoZSBmb2xsb3dpbmcgcmVmZXJzIHRvIHRoZSB0b29sX3BhdGggY29uZmlnIHNldHRp bmcgZm9yIGJhY2t3YXI9CmQgY29tcGF0aWJpbGl0eS4gIFRoZSBzaGVkLXJlbGF0ZWQKLSAgICAg ICAgIyAoZS5nLiwgc2hlZF90b29sX2NvbmYueG1sKSBmaWxlcyBpbmNsdWRlIHRoZSB0b29sX3Bh dGggYXR0cmlidXRlPQogd2l0aGluIHRoZSA8dG9vbGJveD4gdGFnLgotICAgICAgICBzZWxmLnRv b2xfcm9vdF9kaXIgPTNEIHRvb2xfcm9vdF9kaXIKLSAgICAgICAgc2VsZi5hcHAgPTNEIGFwcAot ICAgICAgICBzZWxmLnRvb2xfd2F0Y2hlciA9M0Qgd2F0Y2hlci5nZXRfd2F0Y2hlciggc2VsZiwg YXBwLmNvbmZpZyApCi0gICAgICAgIHNlbGYuZmlsdGVyX2ZhY3RvcnkgPTNEIEZpbHRlckZhY3Rv cnkoIHNlbGYgKQotICAgICAgICBzZWxmLmluaXRfZGVwZW5kZW5jeV9tYW5hZ2VyKCkKLSAgICAg ICAgY29uZmlnX2ZpbGVuYW1lcyA9M0QgbGlzdGlmeSggY29uZmlnX2ZpbGVuYW1lcyApCi0gICAg ICAgIGZvciBjb25maWdfZmlsZW5hbWUgaW4gY29uZmlnX2ZpbGVuYW1lczoKLSAgICAgICAgICAg IGlmIG9zLnBhdGguaXNkaXIoIGNvbmZpZ19maWxlbmFtZSApOgotICAgICAgICAgICAgICAgIGRp cmVjdG9yeV9jb250ZW50cyA9M0Qgc29ydGVkKCBvcy5saXN0ZGlyKCBjb25maWdfZmlsZW5hbWU9 CiApICkKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnlfY29uZmlnX2ZpbGVzID0zRCBbIGNvbmZp Z19maWxlIGZvciBjb25maWdfZmlsZSBpPQpuIGRpcmVjdG9yeV9jb250ZW50cyBpZiBjb25maWdf ZmlsZS5lbmRzd2l0aCggIi54bWwiICkgXQotICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlbmFt ZXMucmVtb3ZlKCBjb25maWdfZmlsZW5hbWUgKQotICAgICAgICAgICAgICAgIGNvbmZpZ19maWxl bmFtZXMuZXh0ZW5kKCBkaXJlY3RvcnlfY29uZmlnX2ZpbGVzICkKLSAgICAgICAgZm9yIGNvbmZp Z19maWxlbmFtZSBpbiBjb25maWdfZmlsZW5hbWVzOgotICAgICAgICAgICAgdHJ5OgotICAgICAg ICAgICAgICAgIHNlbGYuaW5pdF90b29scyggY29uZmlnX2ZpbGVuYW1lICkKLSAgICAgICAgICAg IGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBsb2cuZXhjZXB0aW9uKCAiRXJyb3IgbG9hZGluZyB0 b29scyBkZWZpbmVkIGluIGNvbmZpZyAlcyIsPQogY29uZmlnX2ZpbGVuYW1lICkKLSAgICAgICAg aWYgc2VsZi5hcHAubmFtZSA9M0Q9M0QgJ2dhbGF4eScgYW5kIHNlbGYuaW50ZWdyYXRlZF90b29s X3BhbmVsX2NvPQpuZmlnX2hhc19jb250ZW50czoKLSAgICAgICAgICAgICMgTG9hZCBzZWxmLnRv b2xfcGFuZWwgYmFzZWQgb24gdGhlIG9yZGVyIGluIHNlbGYuaW50ZWdyYXRlZF90PQpvb2xfcGFu ZWwuCi0gICAgICAgICAgICBzZWxmLmxvYWRfdG9vbF9wYW5lbCgpCi0gICAgICAgIGlmIGFwcC5j b25maWcudXBkYXRlX2ludGVncmF0ZWRfdG9vbF9wYW5lbDoKLSAgICAgICAgICAgICMgV3JpdGUg dGhlIGN1cnJlbnQgaW4tbWVtb3J5IGludGVncmF0ZWRfdG9vbF9wYW5lbCB0byB0aGUgaW50PQpl Z3JhdGVkX3Rvb2xfcGFuZWwueG1sIGZpbGUuCi0gICAgICAgICAgICAjIFRoaXMgd2lsbCBjb3Zl ciBjYXNlcyB3aGVyZSB0aGUgR2FsYXh5IGFkbWluaXN0cmF0b3IgbWFudWFsbD0KeSBlZGl0ZWQg b25lIG9yIG1vcmUgb2YgdGhlIHRvb2wgcGFuZWwKLSAgICAgICAgICAgICMgY29uZmlnIGZpbGVz LCBhZGRpbmcgb3IgcmVtb3ZpbmcgbG9jYWxseSBkZXZlbG9wZWQgdG9vbHMgb3IgPQp3b3JrZmxv d3MuICBUaGUgdmFsdWUgb2YgaW50ZWdyYXRlZF90b29sX3BhbmVsCi0gICAgICAgICAgICAjIHdp bGwgYmUgRmFsc2Ugd2hlbiB0aGluZ3MgbGlrZSBmdW5jdGlvbmFsIHRlc3RzIGFyZSB0aGUgY2Fs bD0KZXIuCi0gICAgICAgICAgICBzZWxmLmZpeF9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxfZGljdCgp Ci0gICAgICAgICAgICBzZWxmLndyaXRlX2ludGVncmF0ZWRfdG9vbF9wYW5lbF9jb25maWdfZmls ZSgpCisgICAgICAgIHN1cGVyKCBUb29sQm94LCBzZWxmICkuX19pbml0X18oCisgICAgICAgICAg ICBjb25maWdfZmlsZW5hbWVzPTNEY29uZmlnX2ZpbGVuYW1lcywKKyAgICAgICAgICAgIHRvb2xf cm9vdF9kaXI9M0R0b29sX3Jvb3RfZGlyLAorICAgICAgICAgICAgYXBwPTNEYXBwLAorICAgICAg ICApCisgICAgICAgIHNlbGYuX2luaXRfZGVwZW5kZW5jeV9tYW5hZ2VyKCkKPTIwCi0gICAgZGVm IGZpeF9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxfZGljdCggc2VsZiApOgotICAgICAgICAjIEhBQ0s6 IGluc3RlYWQgb2YgZml4aW5nIGFmdGVyIHRoZSBmYWN0LCBJIHN1Z2dlc3Qgc29tZSBjb21iaW5h dGk9Cm9uIG9mOgotICAgICAgICAjICAxKSBhZGp1c3RpbmcgaW5pdF90b29scygpIGFuZCBjYWxs ZWQgbWV0aG9kcyB0byBnZXQgdGhpcyByaWdodAotICAgICAgICAjICAyKSByZWRlc2lnbmluZyB0 aGUgY29kZSBhbmQvb3IgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZWFkL3dyaXQ9CmUgaW50ZWdy YXRlZF90b29sX3BhbmVsLnhtbAotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLmludGVn cmF0ZWRfdG9vbF9wYW5lbC5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo IHZhbHVlLCBUb29sU2VjdGlvbiApOgotICAgICAgICAgICAgICAgIGZvciBzZWN0aW9uX2tleSwg c2VjdGlvbl92YWx1ZSBpbiB2YWx1ZS5lbGVtcy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAg ICAgICAgaWYgc2VjdGlvbl92YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAg aWYgaXNpbnN0YW5jZSggc2VjdGlvbl92YWx1ZSwgVG9vbCApOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvb2xfaWQgPTNEIHNlY3Rpb25fa2V5WzU6XQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlLmVsZW1zW3NlY3Rpb25fa2V5XSA9M0Qgc2VsZi50b29sc19ieV9pZC49 CmdldCggdG9vbF9pZCApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo IHNlY3Rpb25fdmFsdWUsIFdvcmtmbG93ICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg d29ya2Zsb3dfaWQgPTNEIHNlY3Rpb25fa2V5Wzk6XQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhbHVlLmVsZW1zW3NlY3Rpb25fa2V5XSA9M0Qgc2VsZi53b3JrZmxvd3NfYnk9Cl9pZC5n ZXQoIHdvcmtmbG93X2lkICkKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdG9vbHNfYnlfaWQoIHNl bGYgKToKKyAgICAgICAgIyBEZXByZWNhdGVkIG1ldGhvZCwgVE9ETyAtIGVsaW1pbmF0ZSBjYWxs cyB0byB0aGlzIGluIHRlc3QvLgorICAgICAgICByZXR1cm4gc2VsZi5fdG9vbHNfYnlfaWQKPTIw Ci0gICAgZGVmIGluaXRfdG9vbHMoIHNlbGYsIGNvbmZpZ19maWxlbmFtZSApOgotICAgICAgICAi IiIKLSAgICAgICAgUmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBsb2FkIGVhY2ggdG9v bC4gIFRoZSBmb2xsb3dpbmcgdGFnPQpzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgotCi0gICAg ICAgIC4uIHJhdzo6IHhtbAotCi0gICAgICAgICAgICA8dG9vbGJveD4KLSAgICAgICAgICAgICAg ICA8dG9vbCBmaWxlPTNEImRhdGFfc291cmNlL3VwbG9hZC54bWwiLz4gICAgICAgICAgICAjIHRv b2xzPQogb3V0c2lkZSBzZWN0aW9ucwotICAgICAgICAgICAgICAgIDxsYWJlbCB0ZXh0PTNEIkJh c2ljIFRvb2xzIiBpZD0zRCJiYXNpY190b29scyIgLz4gICAgIyBsYWI9CmVscyBvdXRzaWRlIHNl Y3Rpb25zCi0gICAgICAgICAgICAgICAgPHdvcmtmbG93IGlkPTNEIjUyOWZkNjFhYjFjNmNjMzYi IC8+ICAgICAgICAgICAgICAgIyB3b3JrZj0KbG93cyBvdXRzaWRlIHNlY3Rpb25zCi0gICAgICAg ICAgICAgICAgPHNlY3Rpb24gbmFtZT0zRCJHZXQgRGF0YSIgaWQ9M0QiZ2V0ZXh0Ij4gICAgICAg ICAgICAjIHNlYz0KdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgPHRvb2wgZmlsZT0zRCJkYXRh X3NvdXJjZS9iaW9tYXJ0LnhtbCIgLz4gICAgICAjIHRvb2xzPQogaW5zaWRlIHNlY3Rpb25zCi0g ICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0ZXh0PTNEIkluIFNlY3Rpb24iIGlkPTNEImluX3Nl Y3Rpb24iIC8+ICAjIGxhYj0KZWxzIGluc2lkZSBzZWN0aW9ucwotICAgICAgICAgICAgICAgICAg ICA8d29ya2Zsb3cgaWQ9M0QiYWRiNWY1YzkzZjgyNzk0OSIgLz4gICAgICAgICAgICMgd29ya2Y9 Cmxvd3MgaW5zaWRlIHNlY3Rpb25zCi0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAg ICAgICAgPC90b29sYm94PgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLmFwcC5jb25m aWcuZ2V0X2Jvb2woICdlbmFibGVfdG9vbF90YWdzJywgRmFsc2UgKToKLSAgICAgICAgICAgIGxv Zy5pbmZvKCJyZW1vdmluZyBhbGwgdG9vbCB0YWcgYXNzb2NpYXRpb25zICgiICsgc3RyKCBzZWxm LnNhPQpfc2Vzc2lvbi5xdWVyeSggc2VsZi5hcHAubW9kZWwuVG9vbFRhZ0Fzc29jaWF0aW9uICku Y291bnQoKSApICsgIikiICkKLSAgICAgICAgICAgIHNlbGYuc2Ffc2Vzc2lvbi5xdWVyeSggc2Vs Zi5hcHAubW9kZWwuVG9vbFRhZ0Fzc29jaWF0aW9uICkuZGVsPQpldGUoKQotICAgICAgICAgICAg c2VsZi5zYV9zZXNzaW9uLmZsdXNoKCkKLSAgICAgICAgbG9nLmluZm8oICJQYXJzaW5nIHRoZSB0 b29sIGNvbmZpZ3VyYXRpb24gJXMiICUgY29uZmlnX2ZpbGVuYW1lICkKLSAgICAgICAgdHJlZSA9 M0QgcGFyc2VfeG1sKCBjb25maWdfZmlsZW5hbWUgKQotICAgICAgICByb290ID0zRCB0cmVlLmdl dHJvb3QoKQotICAgICAgICB0b29sX3BhdGggPTNEIHJvb3QuZ2V0KCAndG9vbF9wYXRoJyApCi0g ICAgICAgIGlmIHRvb2xfcGF0aDoKLSAgICAgICAgICAgICMgV2UncmUgcGFyc2luZyBhIHNoZWRf dG9vbF9jb25mIGZpbGUgc2luY2Ugd2UgaGF2ZSBhIHRvb2xfcGF0PQpoIGF0dHJpYnV0ZS4KLSAg ICAgICAgICAgIHBhcnNpbmdfc2hlZF90b29sX2NvbmYgPTNEIFRydWUKLSAgICAgICAgICAgICMg S2VlcCBhbiBpbi1tZW1vcnkgbGlzdCBvZiB4bWwgZWxlbWVudHMgdG8gZW5hYmxlIHBlcnNpc3Rl bmNlPQogb2YgdGhlIGNoYW5naW5nIHRvb2wgY29uZmlnLgotICAgICAgICAgICAgY29uZmlnX2Vs ZW1zID0zRCBbXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFyc2luZ19zaGVkX3Rvb2xf Y29uZiA9M0QgRmFsc2UKLSAgICAgICAgdG9vbF9wYXRoID0zRCBzZWxmLl9fcmVzb2x2ZV90b29s X3BhdGgodG9vbF9wYXRoLCBjb25maWdfZmlsZW5hbWUpCi0gICAgICAgICMgT25seSBsb2FkIHRo ZSBwYW5lbF9kaWN0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KLSAgICAgICAgbG9hZF9wYW5l bF9kaWN0ID0zRCBub3Qgc2VsZi5pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxfY29uZmlnX2hhc19jb250 PQplbnRzCi0gICAgICAgIGZvciBfLCBlbGVtIGluIGVudW1lcmF0ZSggcm9vdCApOgotICAgICAg ICAgICAgaW5kZXggPTNEIHNlbGYuaW5kZXgKLSAgICAgICAgICAgIHNlbGYuaW5kZXggKz0zRCAx Ci0gICAgICAgICAgICBpZiBwYXJzaW5nX3NoZWRfdG9vbF9jb25mOgotICAgICAgICAgICAgICAg IGNvbmZpZ19lbGVtcy5hcHBlbmQoIGVsZW0gKQotICAgICAgICAgICAgaWYgZWxlbS50YWcgPTNE PTNEICd0b29sJzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdG9vbF90YWdfc2V0KCBlbGVt LCBzZWxmLnRvb2xfcGFuZWwsIHNlbGYuaW50ZWdyPQphdGVkX3Rvb2xfcGFuZWwsIHRvb2xfcGF0 aCwgbG9hZF9wYW5lbF9kaWN0LCBndWlkPTNEZWxlbS5nZXQoICdndWlkJyApLCBpbmQ9CmV4PTNE aW5kZXggKQotICAgICAgICAgICAgZWxpZiBlbGVtLnRhZyA9M0Q9M0QgJ3dvcmtmbG93JzoKLSAg ICAgICAgICAgICAgICBzZWxmLmxvYWRfd29ya2Zsb3dfdGFnX3NldCggZWxlbSwgc2VsZi50b29s X3BhbmVsLCBzZWxmLmluPQp0ZWdyYXRlZF90b29sX3BhbmVsLCBsb2FkX3BhbmVsX2RpY3QsIGlu ZGV4PTNEaW5kZXggKQotICAgICAgICAgICAgZWxpZiBlbGVtLnRhZyA9M0Q9M0QgJ3NlY3Rpb24n OgotICAgICAgICAgICAgICAgIHNlbGYubG9hZF9zZWN0aW9uX3RhZ19zZXQoIGVsZW0sIHRvb2xf cGF0aCwgbG9hZF9wYW5lbF9kaWM9CnQsIGluZGV4PTNEaW5kZXggKQotICAgICAgICAgICAgZWxp ZiBlbGVtLnRhZyA9M0Q9M0QgJ2xhYmVsJzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRfbGFi ZWxfdGFnX3NldCggZWxlbSwgc2VsZi50b29sX3BhbmVsLCBzZWxmLmludGVnPQpyYXRlZF90b29s X3BhbmVsLCBsb2FkX3BhbmVsX2RpY3QsIGluZGV4PTNEaW5kZXggKQotICAgICAgICAgICAgZWxp ZiBlbGVtLnRhZyA9M0Q9M0QgJ3Rvb2xfZGlyJzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRf dG9vbGRpcl90YWdfc2V0KCBlbGVtLCBzZWxmLnRvb2xfcGFuZWwsIHNlbGYuaW50PQplZ3JhdGVk X3Rvb2xfcGFuZWwsIHRvb2xfcGF0aCwgbG9hZF9wYW5lbF9kaWN0ICkKLQotICAgICAgICBpZiBw YXJzaW5nX3NoZWRfdG9vbF9jb25mOgotICAgICAgICAgICAgc2hlZF90b29sX2NvbmZfZGljdCA9 M0QgZGljdCggY29uZmlnX2ZpbGVuYW1lPTNEY29uZmlnX2ZpbGVuYW09CmUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbF9wYXRoPTNEdG9vbF9wYXRoLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19lbGVtcz0zRGNvbmZp Z19lbGVtcyApCi0gICAgICAgICAgICBzZWxmLnNoZWRfdG9vbF9jb25mcy5hcHBlbmQoIHNoZWRf dG9vbF9jb25mX2RpY3QgKQotCi0gICAgZGVmIGdldF9zaGVkX2NvbmZpZ19kaWN0X2J5X2ZpbGVu YW1lKCBzZWxmLCBmaWxlbmFtZSwgZGVmYXVsdD0zRE5vbmUgKToKLSAgICAgICAgZm9yIHNoZWRf Y29uZmlnX2RpY3QgaW4gc2VsZi5zaGVkX3Rvb2xfY29uZnM6Ci0gICAgICAgICAgICBpZiBzaGVk X2NvbmZpZ19kaWN0WyAnY29uZmlnX2ZpbGVuYW1lJyBdID0zRD0zRCBmaWxlbmFtZToKLSAgICAg ICAgICAgICAgICByZXR1cm4gc2hlZF9jb25maWdfZGljdAotICAgICAgICByZXR1cm4gZGVmYXVs dAotCi0gICAgZGVmIF9fcmVzb2x2ZV90b29sX3BhdGgoc2VsZiwgdG9vbF9wYXRoLCBjb25maWdf ZmlsZW5hbWUpOgotICAgICAgICBpZiBub3QgdG9vbF9wYXRoOgotICAgICAgICAgICAgIyBEZWZh dWx0IHRvIGJhY2t3YXJkIGNvbXBhdGlibGUgY29uZmlnIHNldHRpbmcuCi0gICAgICAgICAgICB0 b29sX3BhdGggPTNEIHNlbGYudG9vbF9yb290X2RpcgotICAgICAgICBlbHNlOgotICAgICAgICAg ICAgIyBBbGxvdyB1c2Ugb2YgX190b29sX2NvbmZfZGlyX18gaW4gdG9vbGJveCBjb25maWcgZmls ZXMuCi0gICAgICAgICAgICB0b29sX2NvbmZfZGlyID0zRCBvcy5wYXRoLmRpcm5hbWUoY29uZmln X2ZpbGVuYW1lKQotICAgICAgICAgICAgdG9vbF9wYXRoX3ZhcnMgPTNEIHsidG9vbF9jb25mX2Rp ciI6IHRvb2xfY29uZl9kaXJ9Ci0gICAgICAgICAgICB0b29sX3BhdGggPTNEIHN0cmluZy5UZW1w bGF0ZSh0b29sX3BhdGgpLnNhZmVfc3Vic3RpdHV0ZSh0b29sXz0KcGF0aF92YXJzKQotICAgICAg ICByZXR1cm4gdG9vbF9wYXRoCi0KLSAgICBkZWYgX19hZGRfdG9vbF90b190b29sX3BhbmVsKCBz ZWxmLCB0b29sLCBwYW5lbF9jb21wb25lbnQsIHNlY3Rpb249M0RGPQphbHNlICk6Ci0gICAgICAg ICMgU2VlIGlmIGEgdmVyc2lvbiBvZiB0aGlzIHRvb2wgaXMgYWxyZWFkeSBsb2FkZWQgaW50byB0 aGUgdG9vbCBwYT0KbmVsLiAgVGhlIHZhbHVlIG9mIHBhbmVsX2NvbXBvbmVudAotICAgICAgICAj IHdpbGwgYmUgYSBUb29sU2VjdGlvbiAoaWYgdGhlIHZhbHVlIG9mIHNlY3Rpb249M0RUcnVlKSBv ciBzZWxmLnQ9Cm9vbF9wYW5lbCAoaWYgc2VjdGlvbj0zREZhbHNlKS4KLSAgICAgICAgdG9vbF9p ZCA9M0Qgc3RyKCB0b29sLmlkICkKLSAgICAgICAgdG9vbCA9M0Qgc2VsZi50b29sc19ieV9pZFsg dG9vbF9pZCBdCi0gICAgICAgIGlmIHNlY3Rpb246Ci0gICAgICAgICAgICBwYW5lbF9kaWN0ID0z RCBwYW5lbF9jb21wb25lbnQuZWxlbXMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhbmVs X2RpY3QgPTNEIHBhbmVsX2NvbXBvbmVudAotICAgICAgICBhbHJlYWR5X2xvYWRlZCA9M0QgRmFs c2UKLSAgICAgICAgbG9hZGVkX3ZlcnNpb25fa2V5ID0zRCBOb25lCi0gICAgICAgIGxpbmVhZ2Vf aWQgPTNEIE5vbmUKLSAgICAgICAgZm9yIGxpbmVhZ2VfaWQgaW4gdG9vbC5saW5lYWdlX2lkczoK LSAgICAgICAgICAgIGlmIGxpbmVhZ2VfaWQgaW4gc2VsZi50b29sc19ieV9pZDoKLSAgICAgICAg ICAgICAgICBsb2FkZWRfdmVyc2lvbl9rZXkgPTNEICd0b29sXyVzJyAlIGxpbmVhZ2VfaWQKLSAg ICAgICAgICAgICAgICBpZiBsb2FkZWRfdmVyc2lvbl9rZXkgaW4gcGFuZWxfZGljdDoKLSAgICAg ICAgICAgICAgICAgICAgYWxyZWFkeV9sb2FkZWQgPTNEIFRydWUKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWsKLSAgICAgICAgaWYgYWxyZWFkeV9sb2FkZWQ6Ci0gICAgICAgICAgICBpZiB0b29s LmxpbmVhZ2VfaWRzLmluZGV4KCB0b29sX2lkICkgPiB0b29sLmxpbmVhZ2VfaWRzLmluZGV4KD0K IGxpbmVhZ2VfaWQgKToKLSAgICAgICAgICAgICAgICBrZXkgPTNEICd0b29sXyVzJyAlIHRvb2wu aWQKLSAgICAgICAgICAgICAgICBpbmRleCA9M0QgcGFuZWxfZGljdC5rZXlzKCkuaW5kZXgoIGxv YWRlZF92ZXJzaW9uX2tleSApCi0gICAgICAgICAgICAgICAgZGVsIHBhbmVsX2RpY3RbIGxvYWRl ZF92ZXJzaW9uX2tleSBdCi0gICAgICAgICAgICAgICAgcGFuZWxfZGljdC5pbnNlcnQoIGluZGV4 LCBrZXksIHRvb2wgKQotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyggIkxvYWRlZCB0b29sIGlk OiAlcywgdmVyc2lvbjogJXMgaW50byB0b29sIHBhbmU9CmwuIiAlICggdG9vbC5pZCwgdG9vbC52 ZXJzaW9uICkgKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaW5zZXJ0ZWQgPTNEIEZhbHNl Ci0gICAgICAgICAgICBrZXkgPTNEICd0b29sXyVzJyAlIHRvb2wuaWQKLSAgICAgICAgICAgICMg VGhlIHZhbHVlIG9mIHBhbmVsX2NvbXBvbmVudCBpcyB0aGUgaW4tbWVtb3J5IHRvb2wgcGFuZWwg ZGljPQp0aW9uYXJ5LgotICAgICAgICAgICAgZm9yIGluZGV4LCBpbnRlZ3JhdGVkX3BhbmVsX2tl eSBpbiBlbnVtZXJhdGUoIHNlbGYuaW50ZWdyYXRlZF89CnRvb2xfcGFuZWwua2V5cygpICk6Ci0g ICAgICAgICAgICAgICAgaWYga2V5ID0zRD0zRCBpbnRlZ3JhdGVkX3BhbmVsX2tleToKLSAgICAg ICAgICAgICAgICAgICAgcGFuZWxfZGljdC5pbnNlcnQoIGluZGV4LCBrZXksIHRvb2wgKQotICAg ICAgICAgICAgICAgICAgICBpZiBub3QgaW5zZXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICBpbnNlcnRlZCA9M0QgVHJ1ZQotICAgICAgICAgICAgaWYgbm90IGluc2VydGVkOgotICAgICAg ICAgICAgICAgICMgQ2hlY2sgdGhlIHRvb2wncyBpbnN0YWxsZWQgdmVyc2lvbnMuCi0gICAgICAg ICAgICAgICAgZm9yIGxpbmVhZ2VfaWQgaW4gdG9vbC5saW5lYWdlX2lkczoKLSAgICAgICAgICAg ICAgICAgICAgbGluZWFnZV9pZF9rZXkgPTNEICd0b29sXyVzJyAlIGxpbmVhZ2VfaWQKLSAgICAg ICAgICAgICAgICAgICAgZm9yIGluZGV4LCBpbnRlZ3JhdGVkX3BhbmVsX2tleSBpbiBlbnVtZXJh dGUoIHNlbGYuaW50PQplZ3JhdGVkX3Rvb2xfcGFuZWwua2V5cygpICk6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiBsaW5lYWdlX2lkX2tleSA9M0Q9M0QgaW50ZWdyYXRlZF9wYW5lbF9rZXk6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxfZGljdC5pbnNlcnQoIGluZGV4LCBr ZXksIHRvb2wgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbnNlcnRlZDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPTNEIFRydWUKLSAgICAg ICAgICAgICAgICBpZiBub3QgaW5zZXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHRvb2wu Z3VpZCBpcyBOb25lIG9yIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2wudG9vbF9zaGVk IGlzIE5vbmUgb3IgXAotICAgICAgICAgICAgICAgICAgICAgICAgdG9vbC5yZXBvc2l0b3J5X25h bWUgaXMgTm9uZSBvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICB0b29sLnJlcG9zaXRvcnlf b3duZXIgaXMgTm9uZSBvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICB0b29sLmluc3RhbGxl ZF9jaGFuZ2VzZXRfcmV2aXNpb24gaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMg V2UgaGF2ZSBhIHRvb2wgdGhhdCB3YXMgbm90IGluc3RhbGxlZCBmcm9tIHRoZSBUPQpvb2wgU2hl ZCwgYnV0IGlzIGFsc28gbm90IHlldCBkZWZpbmVkIGluCi0gICAgICAgICAgICAgICAgICAgICAg ICAjIGludGVncmF0ZWRfdG9vbF9wYW5lbC54bWwsIHNvIGFwcGVuZCBpdCB0byB0aGUgdD0Kb29s IHBhbmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxfZGljdFsga2V5IF0gPTNEIHRv b2wKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyggIkxvYWRlZCB0b29sIGlkOiAl cywgdmVyc2lvbjogJXMgaW50byB0PQpvb2wgcGFuZWwuLiIgJSAoIHRvb2wuaWQsIHRvb2wudmVy c2lvbiApICkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg ICAgICMgV2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGluc3RhbGxpbmcgdGhlIHRvb2wuCi0gICAg ICAgICAgICAgICAgICAgICAgICB0b29sX3ZlcnNpb24gPTNEIHNlbGYuX19nZXRfdG9vbF92ZXJz aW9uKCB0b29sX2lkICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xfbGluZWFnZV9pZHMg PTNEIHRvb2xfdmVyc2lvbi5nZXRfdmVyc2lvbl9pZHMoPQogc2VsZi5hcHAsIHJldmVyc2U9M0RU cnVlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lYWdlX2lkIGluIHRvb2xfbGlu ZWFnZV9pZHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZWFnZV9pZCBpbiBz ZWxmLnRvb2xzX2J5X2lkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRf dmVyc2lvbl9rZXkgPTNEICd0b29sXyVzJyAlIGxpbmVhZ2U9Cl9pZAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiBsb2FkZWRfdmVyc2lvbl9rZXkgaW4gcGFuZWxfZGljdDoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHJlYWR5X2xvYWRlZDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5X2xvYWRlZCA9 M0QgVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFscmVhZHlfbG9hZGVkOgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIHRvb2wgaXMgbm90IGRlZmluZWQg aW4gaW50ZWdyYXRlZF90b289CmxfcGFuZWwueG1sLCBhcHBlbmQgaXQgdG8gdGhlIHRvb2wgcGFu ZWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxfZGljdFsga2V5IF0gPTNEIHRv b2wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoICJMb2FkZWQgdG9vbCBp ZDogJXMsIHZlcnNpb246ICVzIGluPQp0byB0b29sIHBhbmVsLi4uLiIgJSAoIHRvb2wuaWQsIHRv b2wudmVyc2lvbiApICkKLQotICAgIGRlZiBsb2FkX3Rvb2xfcGFuZWwoIHNlbGYgKToKLSAgICAg ICAgZm9yIGtleSwgdmFsIGluIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsLml0ZW1zKCk6Ci0g ICAgICAgICAgICBpZiBpc2luc3RhbmNlKCB2YWwsIFRvb2wgKToKLSAgICAgICAgICAgICAgICB0 b29sX2lkID0zRCBrZXkucmVwbGFjZSggJ3Rvb2xfJywgJycsIDEgKQotICAgICAgICAgICAgICAg IGlmIHRvb2xfaWQgaW4gc2VsZi50b29sc19ieV9pZDoKLSAgICAgICAgICAgICAgICAgICAgc2Vs Zi5fX2FkZF90b29sX3RvX3Rvb2xfcGFuZWwoIHZhbCwgc2VsZi50b29sX3BhbmVsLCBzPQplY3Rp b249M0RGYWxzZSApCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoIHZhbCwgV29ya2Zsb3cg KToKLSAgICAgICAgICAgICAgICB3b3JrZmxvd19pZCA9M0Qga2V5LnJlcGxhY2UoICd3b3JrZmxv d18nLCAnJywgMSApCi0gICAgICAgICAgICAgICAgaWYgd29ya2Zsb3dfaWQgaW4gc2VsZi53b3Jr Zmxvd3NfYnlfaWQ6Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93ID0zRCBzZWxmLndvcmtm bG93c19ieV9pZFsgd29ya2Zsb3dfaWQgXQotICAgICAgICAgICAgICAgICAgICBzZWxmLnRvb2xf cGFuZWxbIGtleSBdID0zRCB3b3JrZmxvdwotICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWco ICJMb2FkZWQgd29ya2Zsb3c6ICVzICVzIiAlICggd29ya2Zsb3dfaWQsIHc9Cm9ya2Zsb3cubmFt ZSApICkKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSggdmFsLCBUb29sU2VjdGlvbkxhYmVs ICk6Ci0gICAgICAgICAgICAgICAgc2VsZi50b29sX3BhbmVsWyBrZXkgXSA9M0QgdmFsCi0gICAg ICAgICAgICBlbGlmIGlzaW5zdGFuY2UoIHZhbCwgVG9vbFNlY3Rpb24gKToKLSAgICAgICAgICAg ICAgICBlbGVtID0zRCBFbGVtZW50VHJlZS5FbGVtZW50KCAnc2VjdGlvbicgKQotICAgICAgICAg ICAgICAgIGVsZW0uYXR0cmliWyAnaWQnIF0gPTNEIHZhbC5pZCBvciAnJwotICAgICAgICAgICAg ICAgIGVsZW0uYXR0cmliWyAnbmFtZScgXSA9M0QgdmFsLm5hbWUgb3IgJycKLSAgICAgICAgICAg ICAgICBlbGVtLmF0dHJpYlsgJ3ZlcnNpb24nIF0gPTNEIHZhbC52ZXJzaW9uIG9yICcnCi0gICAg ICAgICAgICAgICAgc2VjdGlvbiA9M0QgVG9vbFNlY3Rpb24oIGVsZW0gKQotICAgICAgICAgICAg ICAgIGxvZy5kZWJ1ZyggIkxvYWRpbmcgc2VjdGlvbjogJXMiICUgZWxlbS5nZXQoICduYW1lJyAp ICkKLSAgICAgICAgICAgICAgICBmb3Igc2VjdGlvbl9rZXksIHNlY3Rpb25fdmFsIGluIHZhbC5l bGVtcy5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCBzZWN0aW9u X3ZhbCwgVG9vbCApOgotICAgICAgICAgICAgICAgICAgICAgICAgdG9vbF9pZCA9M0Qgc2VjdGlv bl9rZXkucmVwbGFjZSggJ3Rvb2xfJywgJycsIDEgKQotICAgICAgICAgICAgICAgICAgICAgICAg aWYgdG9vbF9pZCBpbiBzZWxmLnRvb2xzX2J5X2lkOgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX19hZGRfdG9vbF90b190b29sX3BhbmVsKCBzZWN0aW9uX3ZhbCwgc2U9CmN0aW9u LCBzZWN0aW9uPTNEVHJ1ZSApCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSgg c2VjdGlvbl92YWwsIFdvcmtmbG93ICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZmxv d19pZCA9M0Qgc2VjdGlvbl9rZXkucmVwbGFjZSggJ3dvcmtmbG93XycsID0KJycsIDEgKQotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgd29ya2Zsb3dfaWQgaW4gc2VsZi53b3JrZmxvd3NfYnlf aWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3cgPTNEIHNlbGYud29ya2Zs b3dzX2J5X2lkWyB3b3JrZmxvd19pZD0KIF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWN0aW9uLmVsZW1zWyBzZWN0aW9uX2tleSBdID0zRCB3b3JrZmxvdwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvZy5kZWJ1ZyggIkxvYWRlZCB3b3JrZmxvdzogJXMgJXMiICUgKCB3b3Jr Zmw9Cm93X2lkLCB3b3JrZmxvdy5uYW1lICkgKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGlz aW5zdGFuY2UoIHNlY3Rpb25fdmFsLCBUb29sU2VjdGlvbkxhYmVsICk6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBpZiBzZWN0aW9uX3ZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWN0aW9uLmVsZW1zWyBzZWN0aW9uX2tleSBdID0zRCBzZWN0aW9uX3ZhbAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyggIkxvYWRlZCBsYWJlbDogJXMiICUgKCBzZWN0aW9u X3ZhbC49CnRleHQgKSApCi0gICAgICAgICAgICAgICAgc2VsZi50b29sX3BhbmVsWyBrZXkgXSA9 M0Qgc2VjdGlvbgotCi0gICAgZGVmIGxvYWRfaW50ZWdyYXRlZF90b29sX3BhbmVsX2tleXMoIHNl bGYgKToKLSAgICAgICAgIiIiCi0gICAgICAgIExvYWQgdGhlIGludGVncmF0ZWQgdG9vbCBwYW5l bCBrZXlzLCBzZXR0aW5nIHZhbHVlcyBmb3IgdG9vbHMgYW5kID0Kd29ya2Zsb3dzIHRvIE5vbmUu ICBUaGUgdmFsdWVzIHdpbGwKLSAgICAgICAgYmUgcmVzZXQgd2hlbiB0aGUgdmFyaW91cyB0b29s IHBhbmVsIGNvbmZpZyBmaWxlcyBhcmUgcGFyc2VkLCBhdCB3PQpoaWNoIHRpbWUgdGhlIHRvb2xz IGFuZCB3b3JrZmxvd3MgYXJlCi0gICAgICAgIGxvYWRlZC4KLSAgICAgICAgIiIiCi0gICAgICAg IHRyZWUgPTNEIHBhcnNlX3htbCggc2VsZi5pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxfY29uZmlnICkK LSAgICAgICAgcm9vdCA9M0QgdHJlZS5nZXRyb290KCkKLSAgICAgICAgZm9yIGVsZW0gaW4gcm9v dDoKLSAgICAgICAgICAgIGlmIGVsZW0udGFnID0zRD0zRCAndG9vbCc6Ci0gICAgICAgICAgICAg ICAga2V5ID0zRCAndG9vbF8lcycgJSBlbGVtLmdldCggJ2lkJyApCi0gICAgICAgICAgICAgICAg c2VsZi5pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxbIGtleSBdID0zRCBOb25lCi0gICAgICAgICAgICBl bGlmIGVsZW0udGFnID0zRD0zRCAnd29ya2Zsb3cnOgotICAgICAgICAgICAgICAgIGtleSA9M0Qg J3dvcmtmbG93XyVzJyAlIGVsZW0uZ2V0KCAnaWQnICkKLSAgICAgICAgICAgICAgICBzZWxmLmlu dGVncmF0ZWRfdG9vbF9wYW5lbFsga2V5IF0gPTNEIE5vbmUKLSAgICAgICAgICAgIGVsaWYgZWxl bS50YWcgPTNEPTNEICdzZWN0aW9uJzoKLSAgICAgICAgICAgICAgICBzZWN0aW9uID0zRCBUb29s U2VjdGlvbiggZWxlbSApCi0gICAgICAgICAgICAgICAgZm9yIHNlY3Rpb25fZWxlbSBpbiBlbGVt OgotICAgICAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX2VsZW0udGFnID0zRD0zRCAndG9vbCc6 Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPTNEICd0b29sXyVzJyAlIHNlY3Rpb25fZWxl bS5nZXQoICdpZCcgKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5lbGVtc1sga2V5 IF0gPTNEIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWN0aW9uX2VsZW0udGFnID0z RD0zRCAnd29ya2Zsb3cnOgotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0zRCAnd29ya2Zs b3dfJXMnICUgc2VjdGlvbl9lbGVtLmdldCggJ2lkJyApCi0gICAgICAgICAgICAgICAgICAgICAg ICBzZWN0aW9uLmVsZW1zWyBrZXkgXSA9M0QgTm9uZQotICAgICAgICAgICAgICAgICAgICBlbGlm IHNlY3Rpb25fZWxlbS50YWcgPTNEPTNEICdsYWJlbCc6Ci0gICAgICAgICAgICAgICAgICAgICAg ICBrZXkgPTNEICdsYWJlbF8lcycgJSBzZWN0aW9uX2VsZW0uZ2V0KCAnaWQnICkKLSAgICAgICAg ICAgICAgICAgICAgICAgIHNlY3Rpb24uZWxlbXNbIGtleSBdID0zRCBOb25lCi0gICAgICAgICAg ICAgICAga2V5ID0zRCBlbGVtLmdldCggJ2lkJyApCi0gICAgICAgICAgICAgICAgc2VsZi5pbnRl Z3JhdGVkX3Rvb2xfcGFuZWxbIGtleSBdID0zRCBzZWN0aW9uCi0gICAgICAgICAgICBlbGlmIGVs ZW0udGFnID0zRD0zRCAnbGFiZWwnOgotICAgICAgICAgICAgICAgIGtleSA9M0QgJ2xhYmVsXyVz JyAlIGVsZW0uZ2V0KCAnaWQnICkKLSAgICAgICAgICAgICAgICBzZWxmLmludGVncmF0ZWRfdG9v bF9wYW5lbFsga2V5IF0gPTNEIE5vbmUKLQotICAgIGRlZiB3cml0ZV9pbnRlZ3JhdGVkX3Rvb2xf cGFuZWxfY29uZmlnX2ZpbGUoIHNlbGYgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFdyaXRlIHRo ZSBjdXJyZW50IGluLW1lbW9yeSB2ZXJzaW9uIG9mIHRoZSBpbnRlZ3JhdGVkX3Rvb2xfcGFuZWwu eD0KbWwgZmlsZSB0byBkaXNrLiAgU2luY2UgR2FsYXh5IGFkbWluaXN0cmF0b3JzCi0gICAgICAg IHVzZSB0aGlzIGZpbGUgdG8gbWFuYWdlIHRoZSB0b29sIHBhbmVsLCB3ZSdsbCBub3QgdXNlIHht bF90b19zdHJpbj0KZygpIHNpbmNlIGl0IGRvZXNuJ3Qgd3JpdGUgWE1MIHF1aXRlIHJpZ2h0Lgot ICAgICAgICAiIiIKLSAgICAgICAgZmQsIGZpbGVuYW1lID0zRCB0ZW1wZmlsZS5ta3N0ZW1wKCkK LSAgICAgICAgb3Mud3JpdGUoIGZkLCAnPD94bWwgdmVyc2lvbj0zRCIxLjAiPz5cbicgKQotICAg ICAgICBvcy53cml0ZSggZmQsICc8dG9vbGJveD5cbicgKQotICAgICAgICBmb3Iga2V5LCBpdGVt IGluIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBp dGVtOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoIGl0ZW0sIFRvb2wgKToKLSAgICAg ICAgICAgICAgICAgICAgb3Mud3JpdGUoIGZkLCAnICAgIDx0b29sIGlkPTNEIiVzIiAvPlxuJyAl IGl0ZW0uaWQgKQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSggaXRlbSwgV29ya2Zs b3cgKToKLSAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIGZkLCAnICAgIDx3b3JrZmxvdyBp ZD0zRCIlcyIgLz5cbicgJSBpdGVtLmlkPQogKQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSggaXRlbSwgVG9vbFNlY3Rpb25MYWJlbCApOgotICAgICAgICAgICAgICAgICAgICBsYWJl bF9pZCA9M0QgaXRlbS5pZCBvciAnJwotICAgICAgICAgICAgICAgICAgICBsYWJlbF90ZXh0ID0z RCBpdGVtLnRleHQgb3IgJycKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxfdmVyc2lvbiA9M0Qg aXRlbS52ZXJzaW9uIG9yICcnCi0gICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKCBmZCwgJyAg ICA8bGFiZWwgaWQ9M0QiJXMiIHRleHQ9M0QiJXMiIHZlcnNpbz0Kbj0zRCIlcyIgLz5cbicgJSAo IGxhYmVsX2lkLCBsYWJlbF90ZXh0LCBsYWJlbF92ZXJzaW9uICkgKQotICAgICAgICAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSggaXRlbSwgVG9vbFNlY3Rpb24gKToKLSAgICAgICAgICAgICAgICAg ICAgc2VjdGlvbl9pZCA9M0QgaXRlbS5pZCBvciAnJwotICAgICAgICAgICAgICAgICAgICBzZWN0 aW9uX25hbWUgPTNEIGl0ZW0ubmFtZSBvciAnJwotICAgICAgICAgICAgICAgICAgICBzZWN0aW9u X3ZlcnNpb24gPTNEIGl0ZW0udmVyc2lvbiBvciAnJwotICAgICAgICAgICAgICAgICAgICBvcy53 cml0ZSggZmQsICcgICAgPHNlY3Rpb24gaWQ9M0QiJXMiIG5hbWU9M0QiJXMiIHZlcnM9Cmlvbj0z RCIlcyI+XG4nICUgKCBzZWN0aW9uX2lkLCBzZWN0aW9uX25hbWUsIHNlY3Rpb25fdmVyc2lvbiAp ICkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHNlY3Rpb25fa2V5LCBzZWN0aW9uX2l0ZW0gaW4g aXRlbS5lbGVtcy5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5j ZSggc2VjdGlvbl9pdGVtLCBUb29sICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg c2VjdGlvbl9pdGVtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSgg ZmQsICcgICAgICAgIDx0b29sIGlkPTNEIiVzIiAvPlw9Cm4nICUgc2VjdGlvbl9pdGVtLmlkICkK LSAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSggc2VjdGlvbl9pdGVtLCBX b3JrZmxvdyApOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlY3Rpb25faXRlbToK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoIGZkLCAnICAgICAgICA8 d29ya2Zsb3cgaWQ9M0QiJXMiPQogLz5cbicgJSBzZWN0aW9uX2l0ZW0uaWQgKQotICAgICAgICAg ICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKCBzZWN0aW9uX2l0ZW0sIFRvb2xTZWN0aW9u TGFiZWwgKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX2l0ZW06Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX2lkID0zRCBzZWN0aW9uX2l0ZW0u aWQgb3IgJycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxfdGV4dCA9M0Qg c2VjdGlvbl9pdGVtLnRleHQgb3IgJycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGFiZWxfdmVyc2lvbiA9M0Qgc2VjdGlvbl9pdGVtLnZlcnNpb24gb3IgPQonJwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcy53cml0ZSggZmQsICcgICAgICAgIDxsYWJlbCBpZD0z RCIlcyIgdGU9Cnh0PTNEIiVzIiB2ZXJzaW9uPTNEIiVzIiAvPlxuJyAlICggbGFiZWxfaWQsIGxh YmVsX3RleHQsIGxhYmVsX3ZlcnNpb24gKSApCi0gICAgICAgICAgICAgICAgICAgIG9zLndyaXRl KCBmZCwgJyAgICA8L3NlY3Rpb24+XG4nICkKLSAgICAgICAgb3Mud3JpdGUoIGZkLCAnPC90b29s Ym94PlxuJyApCi0gICAgICAgIG9zLmNsb3NlKCBmZCApCi0gICAgICAgIHNodXRpbC5tb3ZlKCBm aWxlbmFtZSwgb3MucGF0aC5hYnNwYXRoKCBzZWxmLmludGVncmF0ZWRfdG9vbF9wYW5lbD0KX2Nv bmZpZyApICkKLSAgICAgICAgb3MuY2htb2QoIHNlbGYuaW50ZWdyYXRlZF90b29sX3BhbmVsX2Nv bmZpZywgMDY0NCApCi0KLSAgICBkZWYgZ2V0X3Rvb2woIHNlbGYsIHRvb2xfaWQsIHRvb2xfdmVy c2lvbj0zRE5vbmUsIGdldF9hbGxfdmVyc2lvbnM9M0RGPQphbHNlICk6Ci0gICAgICAgICIiIkF0 dGVtcHQgdG8gbG9jYXRlIGEgdG9vbCBpbiB0aGUgdG9vbCBib3guIiIiCi0gICAgICAgIGlmIHRv b2xfaWQgaW4gc2VsZi50b29sc19ieV9pZCBhbmQgbm90IGdldF9hbGxfdmVyc2lvbnM6Ci0gICAg ICAgICAgICAjdG9vbF9pZCBleGFjdGx5IG1hdGNoZXMgYW4gYXZhaWxhYmxlIHRvb2wgYnkgaWQg KHdoaWNoIGlzICdvbD0KZCcgdG9vbF9pZCBvciBndWlkKQotICAgICAgICAgICAgcmV0dXJuIHNl bGYudG9vbHNfYnlfaWRbIHRvb2xfaWQgXQotICAgICAgICAjZXhhY3QgdG9vbCBpZCBtYXRjaCBu b3QgZm91bmQsIG9yIGFsbCB2ZXJzaW9ucyByZXF1ZXN0ZWQsIHNlYXJjaCA9CmZvciBvdGhlciBv cHRpb25zLCBlLmcuIG1pZ3JhdGVkIHRvb2xzIG9yIGRpZmZlcmVudCB2ZXJzaW9ucwotICAgICAg ICBydmFsID0zRCBbXQotICAgICAgICB0diA9M0Qgc2VsZi5fX2dldF90b29sX3ZlcnNpb24oIHRv b2xfaWQgKQotICAgICAgICBpZiB0djoKLSAgICAgICAgICAgIHRvb2xfdmVyc2lvbl9pZHMgPTNE IHR2LmdldF92ZXJzaW9uX2lkcyggc2VsZi5hcHAgKQotICAgICAgICAgICAgZm9yIHRvb2xfdmVy c2lvbl9pZCBpbiB0b29sX3ZlcnNpb25faWRzOgotICAgICAgICAgICAgICAgIGlmIHRvb2xfdmVy c2lvbl9pZCBpbiBzZWxmLnRvb2xzX2J5X2lkOgotICAgICAgICAgICAgICAgICAgICBydmFsLmFw cGVuZCggc2VsZi50b29sc19ieV9pZFsgdG9vbF92ZXJzaW9uX2lkIF0gKQotICAgICAgICBpZiBu b3QgcnZhbDoKLSAgICAgICAgICAgICNzdGlsbCBubyB0b29sLCBkbyBhIGRlZXBlciBzZWFyY2gg YW5kIHRyeSB0byBtYXRjaCBieSBvbGQgaWRzCi0gICAgICAgICAgICBmb3IgdG9vbCBpbiBzZWxm LnRvb2xzX2J5X2lkLml0ZXJ2YWx1ZXMoKToKLSAgICAgICAgICAgICAgICBpZiB0b29sLm9sZF9p ZCA9M0Q9M0QgdG9vbF9pZDoKLSAgICAgICAgICAgICAgICAgICAgcnZhbC5hcHBlbmQoIHRvb2wg KQotICAgICAgICBpZiBydmFsOgotICAgICAgICAgICAgaWYgZ2V0X2FsbF92ZXJzaW9uczoKLSAg ICAgICAgICAgICAgICByZXR1cm4gcnZhbAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg ICAgICBpZiB0b29sX3ZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgICNyZXR1cm4gZmlyc3Qg dG9vbCB3aXRoIG1hdGNoaW5nIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgZm9yIHRvb2wg aW4gcnZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvb2wudmVyc2lvbiA9M0Q9M0Qg dG9vbF92ZXJzaW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b29sCi0g ICAgICAgICAgICAgICAgI05vIHRvb2wgbWF0Y2hlcyBieSB2ZXJzaW9uLCBzaW1wbHkgcmV0dXJu IHRoZSBmaXJzdCBhdmFpbD0KYWJsZSB0b29sIGZvdW5kCi0gICAgICAgICAgICAgICAgcmV0dXJu IHJ2YWxbMF0KLSAgICAgICAgI1dlIG5vdyBsaWtlbHkgaGF2ZSBhIFRvb2xzaGVkIGd1aWQgcGFz c2VkIGluLCBidXQgbm8gc3VwcG9ydGluZyBkPQphdGFiYXNlIGVudHJpZXMKLSAgICAgICAgI0lm IHRoZSB0b29sIGV4aXN0cyBieSBleGFjdCBpZCBhbmQgaXMgbG9hZGVkIHRoZW4gcHJvdmlkZSBl eGFjdCBtPQphdGNoIHdpdGhpbiBhIGxpc3QKLSAgICAgICAgaWYgdG9vbF9pZCBpbiBzZWxmLnRv b2xzX2J5X2lkOgotICAgICAgICAgICAgcmV0dXJuWyBzZWxmLnRvb2xzX2J5X2lkWyB0b29sX2lk IF0gXQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9sb2FkZWRfdG9vbHNfYnlf bGluZWFnZSggc2VsZiwgdG9vbF9pZCApOgotICAgICAgICAiIiJHZXQgYWxsIGxvYWRlZCB0b29s cyBhc3NvY2lhdGVkIGJ5IGxpbmVhZ2UgdG8gdGhlIHRvb2wgd2hvc2UgaWQ9CiBpcyB0b29sX2lk LiIiIgotICAgICAgICB0diA9M0Qgc2VsZi5fX2dldF90b29sX3ZlcnNpb24oIHRvb2xfaWQgKQot ICAgICAgICBpZiB0djoKLSAgICAgICAgICAgIHRvb2xfdmVyc2lvbl9pZHMgPTNEIHR2LmdldF92 ZXJzaW9uX2lkcyggc2VsZi5hcHAgKQotICAgICAgICAgICAgYXZhaWxhYmxlX3Rvb2xfdmVyc2lv bnMgPTNEIFtdCi0gICAgICAgICAgICBmb3IgdG9vbF92ZXJzaW9uX2lkIGluIHRvb2xfdmVyc2lv bl9pZHM6Ci0gICAgICAgICAgICAgICAgaWYgdG9vbF92ZXJzaW9uX2lkIGluIHNlbGYudG9vbHNf YnlfaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV90b29sX3ZlcnNpb25zLmFwcGVu ZCggc2VsZi50b29sc19ieV9pZFsgdG9vbD0KX3ZlcnNpb25faWQgXSApCi0gICAgICAgICAgICBy ZXR1cm4gYXZhaWxhYmxlX3Rvb2xfdmVyc2lvbnMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg IGlmIHRvb2xfaWQgaW4gc2VsZi50b29sc19ieV9pZDoKLSAgICAgICAgICAgICAgICB0b29sID0z RCBzZWxmLnRvb2xzX2J5X2lkWyB0b29sX2lkIF0KLSAgICAgICAgICAgICAgICByZXR1cm4gWyB0 b29sIF0KLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBkZWYgX19nZXRfdG9vbF92ZXJzaW9uKCBz ZWxmLCB0b29sX2lkICk6Ci0gICAgICAgICIiIlJldHVybiBhIFRvb2xWZXJzaW9uIGlmIG9uZSBl eGlzdHMgZm9yIHRoZSB0b29sX2lkIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmFwcC5pbnN0YWxs X21vZGVsLmNvbnRleHQucXVlcnkoIHNlbGYuYXBwLmluc3RhbGxfbW9kZT0KbC5Ub29sVmVyc2lv biApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0 ZXIoIHNlbGYuYXBwLmluc3RhbGxfbW9kPQplbC5Ub29sVmVyc2lvbi50YWJsZS5jLnRvb2xfaWQg PTNEPTNEIHRvb2xfaWQgKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuZmlyc3QoKQotCi0gICAgZGVmIF9fZ2V0X3Rvb2xfc2hlZF9yZXBvc2l0b3J5KCBz ZWxmLCB0b29sX3NoZWQsIG5hbWUsIG93bmVyLCBpbnN0YWxsZT0KZF9jaGFuZ2VzZXRfcmV2aXNp b24gKToKLSAgICAgICAgIyBXZSBzdG9yZSBvbmx5IHRoZSBwb3J0LCBpZiBvbmUgZXhpc3RzLCBp biB0aGUgZGF0YWJhc2UuCi0gICAgICAgIHRvb2xfc2hlZCA9M0QgY29tbW9uX3V0aWwucmVtb3Zl X3Byb3RvY29sX2Zyb21fdG9vbF9zaGVkX3VybCggdG9vbD0KX3NoZWQgKQotICAgICAgICByZXR1 cm4gc2VsZi5hcHAuaW5zdGFsbF9tb2RlbC5jb250ZXh0LnF1ZXJ5KCBzZWxmLmFwcC5pbnN0YWxs X21vZGU9CmwuVG9vbFNoZWRSZXBvc2l0b3J5ICkgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmZpbHRlciggYW5kXyggc2VsZi5hcHAuaW5zdGFsbF9tb2RlbC5Ub29sU2g9CmVkUmVw b3NpdG9yeS50YWJsZS5jLnRvb2xfc2hlZCA9M0Q9M0QgdG9vbF9zaGVkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHAuaW5zdGFsbF9tb2RlbC5U b29sU2g9CmVkUmVwb3NpdG9yeS50YWJsZS5jLm5hbWUgPTNEPTNEIG5hbWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcC5pbnN0YWxsX21vZGVs LlRvb2xTaD0KZWRSZXBvc2l0b3J5LnRhYmxlLmMub3duZXIgPTNEPTNEIG93bmVyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHAuaW5zdGFsbF9t b2RlbC5Ub29sU2g9CmVkUmVwb3NpdG9yeS50YWJsZS5jLmluc3RhbGxlZF9jaGFuZ2VzZXRfcmV2 aXNpb24gPTNEPTNEIGluc3RhbGxlZF9jaGFuZ2VzZT0KdF9yZXZpc2lvbiApICkgXAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLmZpcnN0KCkKLQotICAgIGRlZiBnZXRfdG9vbF9jb21w b25lbnRzKCBzZWxmLCB0b29sX2lkLCB0b29sX3ZlcnNpb249M0ROb25lLCBnZXRfbG9hZGU9CmRf dG9vbHNfYnlfbGluZWFnZT0zREZhbHNlLCBzZXRfc2VsZWN0ZWQ9M0RGYWxzZSApOgotICAgICAg ICAiIiIKLSAgICAgICAgUmV0cmlldmUgYWxsIGxvYWRlZCB2ZXJzaW9ucyBvZiBhIHRvb2wgZnJv bSB0aGUgdG9vbGJveCBhbmQgcmV0dXJuPQogYSBzZWxlY3QgbGlzdCBlbmFibGluZwotICAgICAg ICBzZWxlY3Rpb24gb2YgYSBkaWZmZXJlbnQgdmVyc2lvbiwgdGhlIGxpc3Qgb2YgdGhlIHRvb2wn cyBsb2FkZWQgdmU9CnJzaW9ucywgYW5kIHRoZSBzcGVjaWZpZWQgdG9vbC4KLSAgICAgICAgIiIi Ci0gICAgICAgIHRvb2xib3ggPTNEIHNlbGYKLSAgICAgICAgdG9vbF92ZXJzaW9uX3NlbGVjdF9m aWVsZCA9M0QgTm9uZQotICAgICAgICB0b29scyA9M0QgW10KLSAgICAgICAgdG9vbCA9M0QgTm9u ZQotICAgICAgICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBkYXRhc291cmNlIHRvb2xz IHRoYXQgaGF2ZSBkZWZhdWx0IHQ9Cm9vbF9pZCBjb25maWd1cmVkLCBidXQgd2hpY2gKLSAgICAg ICAgIyBhcmUgbm93IHVzaW5nIG9ubHkgR0FMQVhZX1VSTC4KLSAgICAgICAgdG9vbF9pZHMgPTNE IGxpc3RpZnkoIHRvb2xfaWQgKQotICAgICAgICBmb3IgdG9vbF9pZCBpbiB0b29sX2lkczoKLSAg ICAgICAgICAgIGlmIGdldF9sb2FkZWRfdG9vbHNfYnlfbGluZWFnZToKLSAgICAgICAgICAgICAg ICB0b29scyA9M0QgdG9vbGJveC5nZXRfbG9hZGVkX3Rvb2xzX2J5X2xpbmVhZ2UoIHRvb2xfaWQg KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0b29scyA9M0QgdG9vbGJveC5n ZXRfdG9vbCggdG9vbF9pZCwgdG9vbF92ZXJzaW9uPTNEdG9vbF92PQplcnNpb24sIGdldF9hbGxf dmVyc2lvbnM9M0RUcnVlICkKLSAgICAgICAgICAgIGlmIHRvb2xzOgotICAgICAgICAgICAgICAg IHRvb2wgPTNEIHRvb2xib3guZ2V0X3Rvb2woIHRvb2xfaWQsIHRvb2xfdmVyc2lvbj0zRHRvb2xf dmU9CnJzaW9uLCBnZXRfYWxsX3ZlcnNpb25zPTNERmFsc2UgKQotICAgICAgICAgICAgICAgIGlm IGxlbiggdG9vbHMgKSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgIHRvb2xfdmVyc2lvbl9zZWxl Y3RfZmllbGQgPTNEIHNlbGYuYnVpbGRfdG9vbF92ZXJzaW9uXz0Kc2VsZWN0X2ZpZWxkKCB0b29s cywgdG9vbC5pZCwgc2V0X3NlbGVjdGVkICkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAg ICByZXR1cm4gdG9vbF92ZXJzaW9uX3NlbGVjdF9maWVsZCwgdG9vbHMsIHRvb2wKLQotICAgIGRl ZiBidWlsZF90b29sX3ZlcnNpb25fc2VsZWN0X2ZpZWxkKCBzZWxmLCB0b29scywgdG9vbF9pZCwg c2V0X3NlbGVjdGU9CmQgKToKLSAgICAgICAgIiIiQnVpbGQgYSBTZWxlY3RGaWVsZCB3aG9zZSBv cHRpb25zIGFyZSB0aGUgaWRzIGZvciB0aGUgcmVjZWl2ZWQgPQpsaXN0IG9mIHRvb2xzLiIiIgot ICAgICAgICBvcHRpb25zID0zRCBbXQotICAgICAgICByZWZyZXNoX29uX2NoYW5nZV92YWx1ZXMg PTNEIFtdCi0gICAgICAgIGZvciB0b29sIGluIHRvb2xzOgotICAgICAgICAgICAgb3B0aW9ucy5p bnNlcnQoIDAsICggdG9vbC52ZXJzaW9uLCB0b29sLmlkICkgKQotICAgICAgICAgICAgcmVmcmVz aF9vbl9jaGFuZ2VfdmFsdWVzLmFwcGVuZCggdG9vbC5pZCApCi0gICAgICAgIHNlbGVjdF9maWVs ZCA9M0QgU2VsZWN0RmllbGQoIG5hbWU9M0QndG9vbF9pZCcsIHJlZnJlc2hfb25fY2hhbmdlPQo9 M0RUcnVlLCByZWZyZXNoX29uX2NoYW5nZV92YWx1ZXM9M0RyZWZyZXNoX29uX2NoYW5nZV92YWx1 ZXMgKQotICAgICAgICBmb3Igb3B0aW9uX3R1cCBpbiBvcHRpb25zOgotICAgICAgICAgICAgc2Vs ZWN0ZWQgPTNEIHNldF9zZWxlY3RlZCBhbmQgb3B0aW9uX3R1cFsgMSBdID0zRD0zRCB0b29sX2lk Ci0gICAgICAgICAgICBpZiBzZWxlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxlY3RfZmllbGQu YWRkX29wdGlvbiggJ3ZlcnNpb24gJXMnICUgb3B0aW9uX3R1cFsgMCBdLCBvPQpwdGlvbl90dXBb IDEgXSwgc2VsZWN0ZWQ9M0RUcnVlICkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg ICAgc2VsZWN0X2ZpZWxkLmFkZF9vcHRpb24oICd2ZXJzaW9uICVzJyAlIG9wdGlvbl90dXBbIDAg XSwgbz0KcHRpb25fdHVwWyAxIF0gKQotICAgICAgICByZXR1cm4gc2VsZWN0X2ZpZWxkCi0KLSAg ICBkZWYgbG9hZF90b29sX3RhZ19zZXQoIHNlbGYsIGVsZW0sIHBhbmVsX2RpY3QsIGludGVncmF0 ZWRfcGFuZWxfZGljdCwgPQp0b29sX3BhdGgsIGxvYWRfcGFuZWxfZGljdCwgZ3VpZD0zRE5vbmUs IGluZGV4PTNETm9uZSApOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXRoID0zRCBlbGVt LmdldCggImZpbGUiICkKLSAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQgPTNEIE5vbmUKLSAgICAg ICAgICAgIGlmIGd1aWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0b29sX3NoZWRfcmVwb3Np dG9yeSA9M0QgTm9uZQotICAgICAgICAgICAgICAgIGNhbl9sb2FkX2ludG9fcGFuZWxfZGljdCA9 M0QgVHJ1ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIFRoZSB0b29sIGlz IGNvbnRhaW5lZCBpbiBhbiBpbnN0YWxsZWQgdG9vbCBzaGVkIHJlcG9zaXRvPQpyeSwgc28gbG9h ZAotICAgICAgICAgICAgICAgICMgdGhlIHRvb2wgb25seSBpZiB0aGUgcmVwb3NpdG9yeSBoYXMg bm90IGJlZW4gbWFya2VkIGRlbGU9CnRlZC4KLSAgICAgICAgICAgICAgICB0b29sX3NoZWQgPTNE IGVsZW0uZmluZCggInRvb2xfc2hlZCIgKS50ZXh0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9y eV9uYW1lID0zRCBlbGVtLmZpbmQoICJyZXBvc2l0b3J5X25hbWUiICkudGV4dAotICAgICAgICAg ICAgICAgIHJlcG9zaXRvcnlfb3duZXIgPTNEIGVsZW0uZmluZCggInJlcG9zaXRvcnlfb3duZXIi ICkudGV4dAotICAgICAgICAgICAgICAgIGluc3RhbGxlZF9jaGFuZ2VzZXRfcmV2aXNpb25fZWxl bSA9M0QgZWxlbS5maW5kKCAiaW5zdGFsbGU9CmRfY2hhbmdlc2V0X3JldmlzaW9uIiApCi0gICAg ICAgICAgICAgICAgaWYgaW5zdGFsbGVkX2NoYW5nZXNldF9yZXZpc2lvbl9lbGVtIGlzIE5vbmU6 Ci0gICAgICAgICAgICAgICAgICAgICMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSAtIHRo ZSB0YWcgdXNlZCB0byBiZSBuYT0KbWVkICdjaGFuZ2VzZXRfcmV2aXNpb24nLgotICAgICAgICAg ICAgICAgICAgICBpbnN0YWxsZWRfY2hhbmdlc2V0X3JldmlzaW9uX2VsZW0gPTNEIGVsZW0uZmlu ZCggImNoYW49Cmdlc2V0X3JldmlzaW9uIiApCi0gICAgICAgICAgICAgICAgaW5zdGFsbGVkX2No YW5nZXNldF9yZXZpc2lvbiA9M0QgaW5zdGFsbGVkX2NoYW5nZXNldF9yZXZpcz0KaW9uX2VsZW0u dGV4dAotICAgICAgICAgICAgICAgIHRvb2xfc2hlZF9yZXBvc2l0b3J5ID0zRCBzZWxmLl9fZ2V0 X3Rvb2xfc2hlZF9yZXBvc2l0b3J5KCA9CnRvb2xfc2hlZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlPQpw b3NpdG9yeV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmU9CnBvc2l0b3J5X293bmVyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW49CnN0YWxsZWRfY2hhbmdlc2V0X3JldmlzaW9uICkKLSAgICAgICAgICAgICAg ICBpZiB0b29sX3NoZWRfcmVwb3NpdG9yeToKLSAgICAgICAgICAgICAgICAgICAgIyBPbmx5IGxv YWQgdG9vbHMgaWYgdGhlIHJlcG9zaXRvcnkgaXMgbm90IGRlYWN0aXZhdGVkPQogb3IgdW5pbnN0 YWxsZWQuCi0gICAgICAgICAgICAgICAgICAgIGNhbl9sb2FkX2ludG9fcGFuZWxfZGljdCA9M0Qg bm90IHRvb2xfc2hlZF9yZXBvc2l0b3J5Lj0KZGVsZXRlZAotICAgICAgICAgICAgICAgICAgICBy ZXBvc2l0b3J5X2lkID0zRCBzZWxmLmFwcC5zZWN1cml0eS5lbmNvZGVfaWQoIHRvb2xfc2g9CmVk X3JlcG9zaXRvcnkuaWQgKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg ICAgICMgSWYgdGhlcmUgaXMgbm90IHlldCBhIHRvb2xfc2hlZF9yZXBvc2l0b3J5IHJlY29yZCwg dz0KZSdyZSBpbiB0aGUgcHJvY2VzcyBvZiBpbnN0YWxsaW5nCi0gICAgICAgICAgICAgICAgICAg ICMgYSBuZXcgcmVwb3NpdG9yeSwgc28gYW55IGluY2x1ZGVkIHRvb2xzIGNhbiBiZSBsb2FkZT0K ZCBpbnRvIHRoZSB0b29sIHBhbmVsLgotICAgICAgICAgICAgICAgICAgICBjYW5fbG9hZF9pbnRv X3BhbmVsX2RpY3QgPTNEIFRydWUKLSAgICAgICAgICAgIHRvb2wgPTNEIHNlbGYubG9hZF90b29s KCBvcy5wYXRoLmpvaW4oIHRvb2xfcGF0aCwgcGF0aCApLCBndWlkPQo9M0RndWlkLCByZXBvc2l0 b3J5X2lkPTNEcmVwb3NpdG9yeV9pZCApCi0gICAgICAgICAgICBpZiBzdHJpbmdfYXNfYm9vbChl bGVtLmdldCggJ2hpZGRlbicsIEZhbHNlICkpOgotICAgICAgICAgICAgICAgIHRvb2wuaGlkZGVu ID0zRCBUcnVlCi0gICAgICAgICAgICBrZXkgPTNEICd0b29sXyVzJyAlIHN0ciggdG9vbC5pZCAp Ci0gICAgICAgICAgICBpZiBjYW5fbG9hZF9pbnRvX3BhbmVsX2RpY3Q6Ci0gICAgICAgICAgICAg ICAgaWYgZ3VpZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgdG9vbC50b29sX3No ZWQgPTNEIHRvb2xfc2hlZAotICAgICAgICAgICAgICAgICAgICB0b29sLnJlcG9zaXRvcnlfbmFt ZSA9M0QgcmVwb3NpdG9yeV9uYW1lCi0gICAgICAgICAgICAgICAgICAgIHRvb2wucmVwb3NpdG9y eV9vd25lciA9M0QgcmVwb3NpdG9yeV9vd25lcgotICAgICAgICAgICAgICAgICAgICB0b29sLmlu c3RhbGxlZF9jaGFuZ2VzZXRfcmV2aXNpb24gPTNEIGluc3RhbGxlZF9jaGFuZ2U9CnNldF9yZXZp c2lvbgotICAgICAgICAgICAgICAgICAgICB0b29sLmd1aWQgPTNEIGd1aWQKLSAgICAgICAgICAg ICAgICAgICAgdG9vbC52ZXJzaW9uID0zRCBlbGVtLmZpbmQoICJ2ZXJzaW9uIiApLnRleHQKLSAg ICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdG9vbCBoYXMgYSB0b29sX3ZlcnNpb24uCi0g ICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX19nZXRfdG9vbF92ZXJzaW9uKCB0b29sLmlkICk6 Ci0gICAgICAgICAgICAgICAgICAgIHRvb2xfdmVyc2lvbiA9M0Qgc2VsZi5hcHAuaW5zdGFsbF9t b2RlbC5Ub29sVmVyc2lvbiggdD0Kb29sX2lkPTNEdG9vbC5pZCwgdG9vbF9zaGVkX3JlcG9zaXRv cnk9M0R0b29sX3NoZWRfcmVwb3NpdG9yeSApCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXBw Lmluc3RhbGxfbW9kZWwuY29udGV4dC5hZGQoIHRvb2xfdmVyc2lvbiApCi0gICAgICAgICAgICAg ICAgICAgIHNlbGYuYXBwLmluc3RhbGxfbW9kZWwuY29udGV4dC5mbHVzaCgpCi0gICAgICAgICAg ICAgICAgIyBMb2FkIHRoZSB0b29sJ3MgbGluZWFnZSBpZHMuCi0gICAgICAgICAgICAgICAgdG9v bC5saW5lYWdlX2lkcyA9M0QgdG9vbC50b29sX3ZlcnNpb24uZ2V0X3ZlcnNpb25faWRzKCBzZT0K bGYuYXBwICkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmFwcC5jb25maWcuZ2V0X2Jvb2woICdl bmFibGVfdG9vbF90YWdzJywgRmFsc2UgKToKLSAgICAgICAgICAgICAgICAgICAgdGFnX25hbWVz ID0zRCBlbGVtLmdldCggInRhZ3MiLCAiIiApLnNwbGl0KCAiLCIgKQotICAgICAgICAgICAgICAg ICAgICBmb3IgdGFnX25hbWUgaW4gdGFnX25hbWVzOgotICAgICAgICAgICAgICAgICAgICAgICAg aWYgdGFnX25hbWUgPTNEPTNEICcnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPTNEIHNlbGYuc2Ffc2Vzc2lvbi5xdWVy eSggc2VsZi5hcHAubW9kZWwuVGFnID0KKS5maWx0ZXJfYnkoIG5hbWU9M0R0YWdfbmFtZSApLmZp cnN0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0YWc6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGFnID0zRCBzZWxmLmFwcC5tb2RlbC5UYWcoIG5hbWU9M0R0YWdfbmFt ZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYV9zZXNzaW9uLmFkZCggdGFn ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhX3Nlc3Npb24uZmx1c2goKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0YSA9M0Qgc2VsZi5hcHAubW9kZWwuVG9vbFRh Z0Fzc29jaWF0aW9uKCB0b289CmxfaWQ9M0R0b29sLmlkLCB0YWdfaWQ9M0R0YWcuaWQgKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Ffc2Vzc2lvbi5hZGQoIHR0YSApCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYV9zZXNzaW9uLmZsdXNoKCkKLSAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRh Z2dlZF90b29sIGluIHRhZy50YWdnZWRfdG9vbHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIHRhZ2dlZF90b29sLnRvb2xfaWQgPTNEPTNEIHRvb2wuaWQ6Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0YSA9M0Qgc2VsZi5h cHAubW9kZWwuVG9vbFRhZ0Fzc29jaWF0aW9uKD0KIHRvb2xfaWQ9M0R0b29sLmlkLCB0YWdfaWQ9 M0R0YWcuaWQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhX3Nlc3Np b24uYWRkKCB0dGEgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhX3Nl c3Npb24uZmx1c2goKQotICAgICAgICAgICAgICAgIHNlbGYuX19hZGRfdG9vbCggdG9vbCwgbG9h ZF9wYW5lbF9kaWN0LCBwYW5lbF9kaWN0ICkKLSAgICAgICAgICAgICMgQWx3YXlzIGxvYWQgdGhl IHRvb2wgaW50byB0aGUgaW50ZWdyYXRlZF9wYW5lbF9kaWN0LCBvciBpdCB3PQppbGwgbm90IGJl IGluY2x1ZGVkIGluIHRoZSBpbnRlZ3JhdGVkX3Rvb2xfcGFuZWwueG1sIGZpbGUuCi0gICAgICAg ICAgICBpZiBrZXkgaW4gaW50ZWdyYXRlZF9wYW5lbF9kaWN0IG9yIGluZGV4IGlzIE5vbmU6Ci0g ICAgICAgICAgICAgICAgaW50ZWdyYXRlZF9wYW5lbF9kaWN0WyBrZXkgXSA9M0QgdG9vbAotICAg ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkX3BhbmVsX2RpY3QuaW5z ZXJ0KCBpbmRleCwga2V5LCB0b29sICkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAg ICAgICBsb2cuZXJyb3IoICJFcnJvciByZWFkaW5nIHRvb2wgY29uZmlndXJhdGlvbiBmaWxlIGZy b20gcGF0aDogJT0Kcy4iICUgcGF0aCApCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAg ICAgICAgICBsb2cuZXhjZXB0aW9uKCAiRXJyb3IgcmVhZGluZyB0b29sIGZyb20gcGF0aDogJXMi ICUgcGF0aCApCi0KLSAgICBkZWYgX19hZGRfdG9vbCggc2VsZiwgdG9vbCwgbG9hZF9wYW5lbF9k aWN0LCBwYW5lbF9kaWN0ICk6Ci0gICAgICAgICMgQWxsb3cgZm9yIHRoZSBzYW1lIHRvb2wgdG8g YmUgbG9hZGVkIGludG8gbXVsdGlwbGUgcGxhY2VzIGluIHRoZT0KIHRvb2wgcGFuZWwuICBXZSBo YXZlIHRvIGhhbmRsZQotICAgICAgICAjIHRoZSBjYXNlIHdoZXJlIHRoZSB0b29sIGlzIGNvbnRh aW5lZCBpbiBhIHJlcG9zaXRvcnkgaW5zdGFsbGVkIGY9CnJvbSB0aGUgdG9vbCBzaGVkLCBhbmQg dGhlIEdhbGF4eQotICAgICAgICAjIGFkbWluaXN0cmF0b3IgaGFzIHJldHJpZXZlZCB1cGRhdGVz IHRvIHRoZSBpbnN0YWxsZWQgcmVwb3NpdG9yeS49CiAgSW4gdGhpcyBjYXNlLCB0aGUgdG9vbCBt YXkgaGF2ZQotICAgICAgICAjIGJlZW4gdXBkYXRlZCwgYnV0IHRoZSB2ZXJzaW9uIHdhcyBub3Qg Y2hhbmdlZCwgc28gdGhlIHRvb2wgc2hvdWw9CmQgYWx3YXlzIGJlIHJlbG9hZGVkIGhlcmUuICBX ZSB1c2VkCi0gICAgICAgICMgdG8gb25seSBsb2FkIHRoZSB0b29sIGlmIGl0IHdhcyBub3QgZm91 bmQgaW4gc2VsZi50b29sc19ieV9pZCwgYj0KdXQgcGVyZm9ybWluZyB0aGF0IGNoZWNrIGRpZAot ICAgICAgICAjIG5vdCBlbmFibGUgdGhpcyBzY2VuYXJpby4KLSAgICAgICAgc2VsZi50b29sc19i eV9pZFsgdG9vbC5pZCBdID0zRCB0b29sCi0gICAgICAgIGlmIGxvYWRfcGFuZWxfZGljdDoKLSAg ICAgICAgICAgIHNlbGYuX19hZGRfdG9vbF90b190b29sX3BhbmVsKCB0b29sLCBwYW5lbF9kaWN0 LCBzZWN0aW9uPTNEaXNpPQpuc3RhbmNlKCBwYW5lbF9kaWN0LCBUb29sU2VjdGlvbiApICkKLQot ICAgIGRlZiBsb2FkX3dvcmtmbG93X3RhZ19zZXQoIHNlbGYsIGVsZW0sIHBhbmVsX2RpY3QsIGlu dGVncmF0ZWRfcGFuZWxfZGk9CmN0LCBsb2FkX3BhbmVsX2RpY3QsIGluZGV4PTNETm9uZSApOgot ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIFRPRE86IHNob3VsZCBpZCBiZSBlbmNvZGVkPwot ICAgICAgICAgICAgd29ya2Zsb3dfaWQgPTNEIGVsZW0uZ2V0KCAnaWQnICkKLSAgICAgICAgICAg IHdvcmtmbG93ID0zRCBzZWxmLmxvYWRfd29ya2Zsb3coIHdvcmtmbG93X2lkICkKLSAgICAgICAg ICAgIHNlbGYud29ya2Zsb3dzX2J5X2lkWyB3b3JrZmxvd19pZCBdID0zRCB3b3JrZmxvdwotICAg ICAgICAgICAga2V5ID0zRCAnd29ya2Zsb3dfJyArIHdvcmtmbG93X2lkCi0gICAgICAgICAgICBp ZiBsb2FkX3BhbmVsX2RpY3Q6Ci0gICAgICAgICAgICAgICAgcGFuZWxfZGljdFsga2V5IF0gPTNE IHdvcmtmbG93Ci0gICAgICAgICAgICAjIEFsd2F5cyBsb2FkIHdvcmtmbG93cyBpbnRvIHRoZSBp bnRlZ3JhdGVkX3BhbmVsX2RpY3QuCi0gICAgICAgICAgICBpZiBrZXkgaW4gaW50ZWdyYXRlZF9w YW5lbF9kaWN0IG9yIGluZGV4IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgaW50ZWdyYXRlZF9w YW5lbF9kaWN0WyBrZXkgXSA9M0Qgd29ya2Zsb3cKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg ICAgICAgICAgaW50ZWdyYXRlZF9wYW5lbF9kaWN0Lmluc2VydCggaW5kZXgsIGtleSwgd29ya2Zs b3cgKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBsb2cuZXhjZXB0aW9uKCAiRXJyb3Ig bG9hZGluZyB3b3JrZmxvdzogJXMiICUgd29ya2Zsb3dfaWQgKQotCi0gICAgZGVmIGxvYWRfbGFi ZWxfdGFnX3NldCggc2VsZiwgZWxlbSwgcGFuZWxfZGljdCwgaW50ZWdyYXRlZF9wYW5lbF9kaWN0 LD0KIGxvYWRfcGFuZWxfZGljdCwgaW5kZXg9M0ROb25lICk6Ci0gICAgICAgIGxhYmVsID0zRCBU b29sU2VjdGlvbkxhYmVsKCBlbGVtICkKLSAgICAgICAga2V5ID0zRCAnbGFiZWxfJyArIGxhYmVs LmlkCi0gICAgICAgIGlmIGxvYWRfcGFuZWxfZGljdDoKLSAgICAgICAgICAgIHBhbmVsX2RpY3Rb IGtleSBdID0zRCBsYWJlbAotICAgICAgICBpZiBrZXkgaW4gaW50ZWdyYXRlZF9wYW5lbF9kaWN0 IG9yIGluZGV4IGlzIE5vbmU6Ci0gICAgICAgICAgICBpbnRlZ3JhdGVkX3BhbmVsX2RpY3RbIGtl eSBdID0zRCBsYWJlbAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaW50ZWdyYXRlZF9wYW5l bF9kaWN0Lmluc2VydCggaW5kZXgsIGtleSwgbGFiZWwgKQotCi0gICAgZGVmIGxvYWRfc2VjdGlv bl90YWdfc2V0KCBzZWxmLCBlbGVtLCB0b29sX3BhdGgsIGxvYWRfcGFuZWxfZGljdCwgaW5kZT0K eD0zRE5vbmUgKToKLSAgICAgICAga2V5ID0zRCBlbGVtLmdldCggImlkIiApCi0gICAgICAgIGlm IGtleSBpbiBzZWxmLnRvb2xfcGFuZWw6Ci0gICAgICAgICAgICBzZWN0aW9uID0zRCBzZWxmLnRv b2xfcGFuZWxbIGtleSBdCi0gICAgICAgICAgICBlbGVtcyA9M0Qgc2VjdGlvbi5lbGVtcwotICAg ICAgICBlbHNlOgotICAgICAgICAgICAgc2VjdGlvbiA9M0QgVG9vbFNlY3Rpb24oIGVsZW0gKQot ICAgICAgICAgICAgZWxlbXMgPTNEIHNlY3Rpb24uZWxlbXMKLSAgICAgICAgaWYga2V5IGluIHNl bGYuaW50ZWdyYXRlZF90b29sX3BhbmVsOgotICAgICAgICAgICAgaW50ZWdyYXRlZF9zZWN0aW9u ID0zRCBzZWxmLmludGVncmF0ZWRfdG9vbF9wYW5lbFsga2V5IF0KLSAgICAgICAgICAgIGludGVn cmF0ZWRfZWxlbXMgPTNEIGludGVncmF0ZWRfc2VjdGlvbi5lbGVtcwotICAgICAgICBlbHNlOgot ICAgICAgICAgICAgaW50ZWdyYXRlZF9zZWN0aW9uID0zRCBUb29sU2VjdGlvbiggZWxlbSApCi0g ICAgICAgICAgICBpbnRlZ3JhdGVkX2VsZW1zID0zRCBpbnRlZ3JhdGVkX3NlY3Rpb24uZWxlbXMK LSAgICAgICAgZm9yIHN1Yl9pbmRleCwgc3ViX2VsZW0gaW4gZW51bWVyYXRlKCBlbGVtICk6Ci0g ICAgICAgICAgICBpZiBzdWJfZWxlbS50YWcgPTNEPTNEICd0b29sJzoKLSAgICAgICAgICAgICAg ICBzZWxmLmxvYWRfdG9vbF90YWdfc2V0KCBzdWJfZWxlbSwgZWxlbXMsIGludGVncmF0ZWRfZWxl bXMsPQogdG9vbF9wYXRoLCBsb2FkX3BhbmVsX2RpY3QsIGd1aWQ9M0RzdWJfZWxlbS5nZXQoICdn dWlkJyApLCBpbmRleD0zRHN1Yl9pbmQ9CmV4ICkKLSAgICAgICAgICAgIGVsaWYgc3ViX2VsZW0u dGFnID0zRD0zRCAnd29ya2Zsb3cnOgotICAgICAgICAgICAgICAgIHNlbGYubG9hZF93b3JrZmxv d190YWdfc2V0KCBzdWJfZWxlbSwgZWxlbXMsIGludGVncmF0ZWRfZWw9CmVtcywgbG9hZF9wYW5l bF9kaWN0LCBpbmRleD0zRHN1Yl9pbmRleCApCi0gICAgICAgICAgICBlbGlmIHN1Yl9lbGVtLnRh ZyA9M0Q9M0QgJ2xhYmVsJzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRfbGFiZWxfdGFnX3Nl dCggc3ViX2VsZW0sIGVsZW1zLCBpbnRlZ3JhdGVkX2VsZW1zPQosIGxvYWRfcGFuZWxfZGljdCwg aW5kZXg9M0RzdWJfaW5kZXggKQotICAgICAgICAgICAgZWxpZiBzdWJfZWxlbS50YWcgPTNEPTNE ICd0b29sX2Rpcic6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2FkX3Rvb2xkaXJfdGFnX3NldCgg c3ViX2VsZW0sIGVsZW1zLCB0b29sX3BhdGgsIGludD0KZWdyYXRlZF9lbGVtcywgbG9hZF9wYW5l bF9kaWN0ICkKLSAgICAgICAgaWYgbG9hZF9wYW5lbF9kaWN0OgotICAgICAgICAgICAgc2VsZi50 b29sX3BhbmVsWyBrZXkgXSA9M0Qgc2VjdGlvbgotICAgICAgICAjIEFsd2F5cyBsb2FkIHNlY3Rp b25zIGludG8gdGhlIGludGVncmF0ZWRfdG9vbF9wYW5lbC4KLSAgICAgICAgaWYga2V5IGluIHNl bGYuaW50ZWdyYXRlZF90b29sX3BhbmVsIG9yIGluZGV4IGlzIE5vbmU6Ci0gICAgICAgICAgICBz ZWxmLmludGVncmF0ZWRfdG9vbF9wYW5lbFsga2V5IF0gPTNEIGludGVncmF0ZWRfc2VjdGlvbgot ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5pbnRlZ3JhdGVkX3Rvb2xfcGFuZWwuaW5z ZXJ0KCBpbmRleCwga2V5LCBpbnRlZ3JhdGVkX3NlY3Q9CmlvbiApCi0KLSAgICBkZWYgbG9hZF90 b29sZGlyX3RhZ19zZXQoc2VsZiwgc3ViX2VsZW0sIGVsZW1zLCB0b29sX3BhdGgsIGludGVncmF0 ZWRfPQplbGVtcywgbG9hZF9wYW5lbF9kaWN0KToKLSAgICAgICAgZGlyZWN0b3J5ID0zRCBvcy5w YXRoLmpvaW4oIHRvb2xfcGF0aCwgc3ViX2VsZW0uYXR0cmliLmdldCgiZGlyIikgKQotICAgICAg ICByZWN1cnNpdmUgPTNEIHN0cmluZ19hc19ib29sKCBzdWJfZWxlbS5hdHRyaWIuZ2V0KCJyZWN1 cnNpdmUiLCBUcnU9CmUpICkKLSAgICAgICAgc2VsZi5fX3dhdGNoX2RpcmVjdG9yeSggZGlyZWN0 b3J5LCBlbGVtcywgaW50ZWdyYXRlZF9lbGVtcywgbG9hZF9wPQphbmVsX2RpY3QsIHJlY3Vyc2l2 ZSApCi0KLSAgICBkZWYgX193YXRjaF9kaXJlY3RvcnkoIHNlbGYsIGRpcmVjdG9yeSwgZWxlbXMs IGludGVncmF0ZWRfZWxlbXMsIGxvYWRfPQpwYW5lbF9kaWN0LCByZWN1cnNpdmUpOgotCi0gICAg ICAgIGRlZiBxdWlja19sb2FkKCB0b29sX2ZpbGUsIGFzeW5jPTNEVHJ1ZSApOgotICAgICAgICAg ICAgdHJ5OgotICAgICAgICAgICAgICAgIHRvb2wgPTNEIHNlbGYubG9hZF90b29sKCB0b29sX2Zp bGUgKQotICAgICAgICAgICAgICAgIHNlbGYuX19hZGRfdG9vbCggdG9vbCwgbG9hZF9wYW5lbF9k aWN0LCBlbGVtcyApCi0gICAgICAgICAgICAgICAgIyBBbHdheXMgbG9hZCB0aGUgdG9vbCBpbnRv IHRoZSBpbnRlZ3JhdGVkX3BhbmVsX2RpY3QsIG9yID0KaXQgd2lsbCBub3QgYmUgaW5jbHVkZWQg aW4gdGhlIGludGVncmF0ZWRfdG9vbF9wYW5lbC54bWwgZmlsZS4KLSAgICAgICAgICAgICAgICBr ZXkgPTNEICd0b29sXyVzJyAlIHN0ciggdG9vbC5pZCApCi0gICAgICAgICAgICAgICAgaW50ZWdy YXRlZF9lbGVtc1sga2V5IF0gPTNEIHRvb2wKLQotICAgICAgICAgICAgICAgIGlmIGFzeW5jOgot ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdG9vbF9wYW5lbCgpCi0KLSAgICAgICAgICAg ICAgICAgICAgaWYgc2VsZi5hcHAuY29uZmlnLnVwZGF0ZV9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWw6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFdyaXRlIHRoZSBjdXJyZW50IGluLW1lbW9yeSBp bnRlZ3JhdGVkX3Rvb2xfcGFuZT0KbCB0byB0aGUgaW50ZWdyYXRlZF90b29sX3BhbmVsLnhtbCBm aWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgY292ZXIgY2FzZXMgd2hl cmUgdGhlIEdhbGF4eSBhZG1pbmlzdHI9CmF0b3IgbWFudWFsbHkgZWRpdGVkIG9uZSBvciBtb3Jl IG9mIHRoZSB0b29sIHBhbmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGNvbmZpZyBmaWxl cywgYWRkaW5nIG9yIHJlbW92aW5nIGxvY2FsbHkgZGV2ZWxvcD0KZWQgdG9vbHMgb3Igd29ya2Zs b3dzLiAgVGhlIHZhbHVlIG9mIGludGVncmF0ZWRfdG9vbF9wYW5lbAotICAgICAgICAgICAgICAg ICAgICAgICAgIyB3aWxsIGJlIEZhbHNlIHdoZW4gdGhpbmdzIGxpa2UgZnVuY3Rpb25hbCB0ZXN0 cyA9CmFyZSB0aGUgY2FsbGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maXhfaW50 ZWdyYXRlZF90b29sX3BhbmVsX2RpY3QoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53 cml0ZV9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWxfY29uZmlnX2ZpbGUoKQotICAgICAgICAgICAgICAg IHJldHVybiB0b29sLmlkCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAg ICAgICAgIGxvZy5leGNlcHRpb24oIkZhaWxlZCB0byBsb2FkIHBvdGVudGlhbCB0b29sICVzLiIg JSB0b29sX2Y9CmlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHRv b2xfbG9hZGVkID0zRCBGYWxzZQotICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKCBkaXJl Y3RvcnkgKToKLSAgICAgICAgICAgIGNoaWxkX3BhdGggPTNEIG9zLnBhdGguam9pbihkaXJlY3Rv cnksIG5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGNoaWxkX3BhdGgpIGFuZCBy ZWN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fX3dhdGNoX2RpcmVjdG9yeShjaGlsZF9w YXRoLCBlbGVtcywgaW50ZWdyYXRlZF9lbGVtcz0KLCBsb2FkX3BhbmVsX2RpY3QsIHJlY3Vyc2l2 ZSkKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCggIi54bWwiICk6Ci0gICAgICAgICAg ICAgICAgcXVpY2tfbG9hZCggY2hpbGRfcGF0aCwgYXN5bmM9M0RGYWxzZSApCi0gICAgICAgICAg ICAgICAgdG9vbF9sb2FkZWQgPTNEIFRydWUKLSAgICAgICAgaWYgdG9vbF9sb2FkZWQ6Ci0gICAg ICAgICAgICBzZWxmLnRvb2xfd2F0Y2hlci53YXRjaF9kaXJlY3RvcnkoIGRpcmVjdG9yeSwgcXVp Y2tfbG9hZCApCi0KLSAgICBkZWYgbG9hZF90b29sKCBzZWxmLCBjb25maWdfZmlsZSwgZ3VpZD0z RE5vbmUsIHJlcG9zaXRvcnlfaWQ9M0ROb25lLCAqPQoqa3dkcyApOgotICAgICAgICAiIiJMb2Fk IGEgc2luZ2xlIHRvb2wgZnJvbSB0aGUgZmlsZSBuYW1lZCBieSBgY29uZmlnX2ZpbGVgIGFuZCBy ZXQ9CnVybiBhbiBpbnN0YW5jZSBvZiBgVG9vbGAuIiIiCi0gICAgICAgICMgUGFyc2UgWE1MIGNv bmZpZ3VyYXRpb24gZmlsZSBhbmQgZ2V0IHRoZSByb290IGVsZW1lbnQKKyAgICBkZWYgY3JlYXRl X3Rvb2woIHNlbGYsIGNvbmZpZ19maWxlLCByZXBvc2l0b3J5X2lkPTNETm9uZSwgZ3VpZD0zRE5v bmUsPQogKiprd2RzICk6CiAgICAgICAgIHRvb2xfc291cmNlID0zRCBnZXRfdG9vbF9zb3VyY2Uo IGNvbmZpZ19maWxlLCBnZXRhdHRyKCBzZWxmLmFwcC5jbz0KbmZpZywgImVuYWJsZV9iZXRhX3Rv b2xfZm9ybWF0cyIsIEZhbHNlICkgKQogICAgICAgICAjIEFsbG93IHNwZWNpZnlpbmcgYSBkaWZm ZXJlbnQgdG9vbCBzdWJjbGFzcyB0byBpbnN0YW50aWF0ZQogICAgICAgICB0b29sX21vZHVsZSA9 M0QgdG9vbF9zb3VyY2UucGFyc2VfdG9vbF9tb2R1bGUoKQpAQCAtNzYzLDEzICsxMjgsMTMgQEAK ICAgICAgICAgICAgIHJvb3QgPTNEIGdldGF0dHIoIHRvb2xfc291cmNlLCAicm9vdCIsIE5vbmUg KQogICAgICAgICAgICAgIyBUT0RPOiBtdWNraW5nIHdpdGggdGhlIFhNTCBkaXJlY3RseSBsaWtl IHRoaXMgaXMgdGVycmlibGUsCiAgICAgICAgICAgICAjIG1vZGlmeSBpbnB1dHMgZGlyZWN0bHkg cG9zdCBsb2FkIGlmIHBvc3NpYmxlLgotICAgICAgICAgICAgaWYgcm9vdCBhbmQgaGFzYXR0cigg c2VsZi5hcHAsICJqb2JfY29uZmlnIiApOiAgIyB0b29sc2hlZCBtYXk9CiBub3QgaGF2ZSBqb2Jf Y29uZmlnPwotICAgICAgICAgICAgICAgIHRvb2xfaWQgPTNEIHJvb3QuZ2V0KCAnaWQnICkgaWYg cm9vdCBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIHJvb3QgaXMgbm90IE5vbmUgYW5kIGhhc2F0 dHIoIHNlbGYuYXBwLCAiam9iX2NvbmZpZyIgKTogICMgPQp0b29sc2hlZCBtYXkgbm90IGhhdmUg am9iX2NvbmZpZz8KKyAgICAgICAgICAgICAgICB0b29sX2lkID0zRCByb290LmdldCggJ2lkJyAp CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9M0Qgc2VsZi5hcHAuam9iX2NvbmZpZy5nZXRf dG9vbF9yZXNvdXJjZV9wYXJhbT0KZXRlcnMoIHRvb2xfaWQgKQogICAgICAgICAgICAgICAgIGlm IHBhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlucHV0cyA9M0Qgcm9vdC5maW5kKCdp bnB1dHMnKQogICAgICAgICAgICAgICAgICAgICAjIElmIHRvb2wgaGFzIG5vdCBpbnB1dHMsIGNy ZWF0ZSBzb21lIHNvIHdlIGNhbiBpbnNlcnQ9CiBjb25kaXRpb25hbAotICAgICAgICAgICAgICAg ICAgICBpZiBub3QgaW5wdXRzOgorICAgICAgICAgICAgICAgICAgICBpZiBpbnB1dHMgaXMgTm9u ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cyA9M0QgRWxlbWVudFRyZWUuZnJvbXN0 cmluZyggIjxpbnB1dHM+PC9pbnB1PQp0cz4iKQogICAgICAgICAgICAgICAgICAgICAgICAgcm9v dC5hcHBlbmQoIGlucHV0cyApCiAgICAgICAgICAgICAgICAgICAgICMgSW5zZXJ0IGEgY29uZGl0 aW9uYWwgYWxsb3dpbmcgdXNlciB0byBzcGVjaWZ5IHJlc291cj0KY2UgcGFyYW1ldGVycy4KQEAg LTc4MSwzNTUgKzE0NiwxNyBAQAo9MjAKICAgICAgICAgICAgIFRvb2xDbGFzcyA9M0QgVG9vbAog ICAgICAgICB0b29sID0zRCBUb29sQ2xhc3MoIGNvbmZpZ19maWxlLCB0b29sX3NvdXJjZSwgc2Vs Zi5hcHAsIGd1aWQ9M0RndWk9CmQsIHJlcG9zaXRvcnlfaWQ9M0RyZXBvc2l0b3J5X2lkLCAqKmt3 ZHMgKQotICAgICAgICB0b29sX2lkID0zRCB0b29sLmlkCi0gICAgICAgIGlmIG5vdCB0b29sX2lk LnN0YXJ0c3dpdGgoIl9fIik6Ci0gICAgICAgICAgICAjIGRvIG5vdCBtb25pdG9yIHNwZWNpYWwg dG9vbHMgd3JpdHRlbiB0byB0bXAgZGlyZWN0b3J5IC0gbm8gcj0KZWFzb24KLSAgICAgICAgICAg ICMgdG8gbW9uaXRvciBzdWNoIGEgbGFyZ2UgZGlyZWN0b3J5LgotICAgICAgICAgICAgc2VsZi50 b29sX3dhdGNoZXIud2F0Y2hfZmlsZSggY29uZmlnX2ZpbGUsIHRvb2wuaWQgKQogICAgICAgICBy ZXR1cm4gdG9vbAo9MjAKLSAgICBkZWYgcGFja2FnZV90b29sKCBzZWxmLCB0cmFucywgdG9vbF9p ZCApOgotICAgICAgICAiIiIKLSAgICAgICAgQ3JlYXRlIGEgdGFyYmFsbCB3aXRoIHRoZSB0b29s J3MgeG1sLCBoZWxwIGltYWdlcywgYW5kIHRlc3QgZGF0YS4KLSAgICAgICAgOnBhcmFtIHRyYW5z OiB0aGUgd2ViIHRyYW5zYWN0aW9uCi0gICAgICAgIDpwYXJhbSB0b29sX2lkOiB0aGUgdG9vbCBJ RCBmcm9tIGFwcC50b29sYm94Ci0gICAgICAgIDpyZXR1cm5zOiB0dXBsZSBvZiB0YXJiYWxsIGZp bGVuYW1lLCBzdWNjZXNzIFRydWUvRmFsc2UsIG1lc3NhZ2UvTj0Kb25lCi0gICAgICAgICIiIgot ICAgICAgICBtZXNzYWdlID0zRCAnJwotICAgICAgICBzdWNjZXNzID0zRCBUcnVlCi0gICAgICAg ICMgTWFrZSBzdXJlIHRoZSB0b29sIGlzIGFjdHVhbGx5IGxvYWRlZC4KLSAgICAgICAgaWYgdG9v bF9pZCBub3QgaW4gc2VsZi50b29sc19ieV9pZDoKLSAgICAgICAgICAgIHJldHVybiBOb25lLCBG YWxzZSwgIk5vIHRvb2wgd2l0aCBpZCAlcyIgJSBlc2NhcGUoIHRvb2xfaWQgKQotICAgICAgICBl bHNlOgotICAgICAgICAgICAgdG9vbCA9M0Qgc2VsZi50b29sc19ieV9pZFsgdG9vbF9pZCBdCi0g ICAgICAgICAgICB0YXJiYWxsX2ZpbGVzID0zRCBbXQotICAgICAgICAgICAgdGVtcF9maWxlcyA9 M0QgW10KLSAgICAgICAgICAgIHRvb2xfeG1sID0zRCBmaWxlKCBvcy5wYXRoLmFic3BhdGgoIHRv b2wuY29uZmlnX2ZpbGUgKSwgJ3InICkuPQpyZWFkKCkKLSAgICAgICAgICAgICMgUmV0cmlldmUg dG9vbCBoZWxwIGltYWdlcyBhbmQgcmV3cml0ZSB0aGUgdG9vbCdzIHhtbCBpbnRvIGEgPQp0ZW1w b3JhcnkgZmlsZSB3aXRoIHRoZSBwYXRoCi0gICAgICAgICAgICAjIG1vZGlmaWVkIHRvIGJlIHJl bGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuCi0gICAgICAgICAgICBpbWFnZV9mb3VuZCA9 M0QgRmFsc2UKLSAgICAgICAgICAgIGlmIHRvb2wuaGVscCBpcyBub3QgTm9uZToKLSAgICAgICAg ICAgICAgICB0b29sX2hlbHAgPTNEIHRvb2wuaGVscC5fc291cmNlCi0gICAgICAgICAgICAgICAg IyBDaGVjayBlYWNoIGxpbmUgb2YgdGhlIHJlbmRlcmVkIHRvb2wgaGVscCBmb3IgYW4gaW1hZ2Ug dD0KYWcgdGhhdCBwb2ludHMgdG8gYSBsb2NhdGlvbiB1bmRlciBzdGF0aWMvCi0gICAgICAgICAg ICAgICAgZm9yIGhlbHBfbGluZSBpbiB0b29sX2hlbHAuc3BsaXQoICdcbicgKToKLSAgICAgICAg ICAgICAgICAgICAgaW1hZ2VfcmVnZXggPTNEIHJlLmNvbXBpbGUoICdpbWcgYWx0PTNEIlteIl0r IiBzcmM9M0QiPQpcJHtzdGF0aWNfcGF0aH0vKFteIl0rKSInICkKLSAgICAgICAgICAgICAgICAg ICAgbWF0Y2hlcyA9M0QgcmUuc2VhcmNoKCBpbWFnZV9yZWdleCwgaGVscF9saW5lICkKLSAgICAg ICAgICAgICAgICAgICAgaWYgbWF0Y2hlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAg ICAgICAgIHRvb2xfaGVscF9pbWFnZSA9M0QgbWF0Y2hlcy5ncm91cCgxKQotICAgICAgICAgICAg ICAgICAgICAgICAgdGFyYmFsbF9wYXRoID0zRCB0b29sX2hlbHBfaW1hZ2UKLSAgICAgICAgICAg ICAgICAgICAgICAgIGZpbGVzeXN0ZW1fcGF0aCA9M0Qgb3MucGF0aC5hYnNwYXRoKCBvcy5wYXRo LmpvaW4oPQogdHJhbnMuYXBwLmNvbmZpZy5yb290LCAnc3RhdGljJywgdG9vbF9oZWxwX2ltYWdl ICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIGZpbGVzeXN0 ZW1fcGF0aCApOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGxfZmlsZXMuYXBw ZW5kKCAoIGZpbGVzeXN0ZW1fcGF0aCwgdGFyYmE9CmxsX3BhdGggKSApCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW1hZ2VfZm91bmQgPTNEIFRydWUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0b29sX3htbCA9M0QgdG9vbF94bWwucmVwbGFjZSggJyR7c3RhdGljX3BhdGh9PQov JXMnICUgdGFyYmFsbF9wYXRoLCB0YXJiYWxsX3BhdGggKQotICAgICAgICAgICAgIyBJZiBvbmUg b3IgbW9yZSB0b29sIGhlbHAgaW1hZ2VzIHdlcmUgZm91bmQsIGFkZCB0aGUgbW9kaWZpZWQ9CiB0 b29sIFhNTCB0byB0aGUgdGFyYmFsbCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbC4KLSAgICAgICAg ICAgIGlmIGltYWdlX2ZvdW5kOgotICAgICAgICAgICAgICAgIGZkLCBuZXdfdG9vbF9jb25maWcg PTNEIHRlbXBmaWxlLm1rc3RlbXAoIHN1ZmZpeD0zRCcueG1sJyApCi0gICAgICAgICAgICAgICAg b3MuY2xvc2UoIGZkICkKLSAgICAgICAgICAgICAgICBmaWxlKCBuZXdfdG9vbF9jb25maWcsICd3 JyApLndyaXRlKCB0b29sX3htbCApCi0gICAgICAgICAgICAgICAgdG9vbF90dXAgPTNEICggb3Mu cGF0aC5hYnNwYXRoKCBuZXdfdG9vbF9jb25maWcgKSwgb3MucGF0aD0KLnNwbGl0KCB0b29sLmNv bmZpZ19maWxlIClbLTFdICApCi0gICAgICAgICAgICAgICAgdGVtcF9maWxlcy5hcHBlbmQoIG9z LnBhdGguYWJzcGF0aCggbmV3X3Rvb2xfY29uZmlnICkgKQotICAgICAgICAgICAgZWxzZToKLSAg ICAgICAgICAgICAgICB0b29sX3R1cCA9M0QgKCBvcy5wYXRoLmFic3BhdGgoIHRvb2wuY29uZmln X2ZpbGUgKSwgb3MucGF0PQpoLnNwbGl0KCB0b29sLmNvbmZpZ19maWxlIClbLTFdICApCi0gICAg ICAgICAgICB0YXJiYWxsX2ZpbGVzLmFwcGVuZCggdG9vbF90dXAgKQotICAgICAgICAgICAgIyBU T0RPOiBUaGlzIGZlZWxzIGhhY2t5LgotICAgICAgICAgICAgdG9vbF9jb21tYW5kID0zRCB0b29s LmNvbW1hbmQuc3RyaXAoKS5zcGxpdCgpWzBdCi0gICAgICAgICAgICB0b29sX3BhdGggPTNEIG9z LnBhdGguZGlybmFtZSggb3MucGF0aC5hYnNwYXRoKCB0b29sLmNvbmZpZ19maT0KbGUgKSApCi0g ICAgICAgICAgICAjIEFkZCB0aGUgdG9vbCBYTUwgdG8gdGhlIHR1cGxlIHRoYXQgd2lsbCBiZSB1 c2VkIHRvIHBvcHVsYXRlID0KdGhlIHRhcmJhbGwuCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4 aXN0cyggb3MucGF0aC5qb2luKCB0b29sX3BhdGgsIHRvb2xfY29tbWFuZCApICk6Ci0gICAgICAg ICAgICAgICAgdGFyYmFsbF9maWxlcy5hcHBlbmQoICggb3MucGF0aC5qb2luKCB0b29sX3BhdGgs IHRvb2xfY29tbT0KYW5kICksIHRvb2xfY29tbWFuZCApICkKLSAgICAgICAgICAgICMgRmluZCBh bmQgYWRkIG1hY3JvcyBhbmQgY29kZSBmaWxlcy4KLSAgICAgICAgICAgIGZvciBleHRlcm5hbF9m aWxlIGluIHRvb2wuZ2V0X2V4dGVybmFsbHlfcmVmZXJlbmNlZF9wYXRocyggb3MuPQpwYXRoLmFi c3BhdGgoIHRvb2wuY29uZmlnX2ZpbGUgKSApOgotICAgICAgICAgICAgICAgIGV4dGVybmFsX2Zp bGVfYWJzcGF0aCA9M0Qgb3MucGF0aC5hYnNwYXRoKCBvcy5wYXRoLmpvaW4oIHQ9Cm9vbF9wYXRo LCBleHRlcm5hbF9maWxlICkgKQotICAgICAgICAgICAgICAgIHRhcmJhbGxfZmlsZXMuYXBwZW5k KCAoIGV4dGVybmFsX2ZpbGVfYWJzcGF0aCwgZXh0ZXJuYWxfZmk9CmxlICkgKQotICAgICAgICAg ICAgaWYgb3MucGF0aC5leGlzdHMoIG9zLnBhdGguam9pbiggdG9vbF9wYXRoLCAiRG9ja2VyZmls ZSIgKSApOgotICAgICAgICAgICAgICAgIHRhcmJhbGxfZmlsZXMuYXBwZW5kKCAoIG9zLnBhdGgu am9pbiggdG9vbF9wYXRoLCAiRG9ja2VyZmk9CmxlIiApLCAiRG9ja2VyZmlsZSIgKSApCi0gICAg ICAgICAgICAjIEZpbmQgdGVzdHMsIGFuZCBjaGVjayB0aGVtIGZvciB0ZXN0IGRhdGEuCi0gICAg ICAgICAgICB0ZXN0cyA9M0QgdG9vbC50ZXN0cwotICAgICAgICAgICAgaWYgdGVzdHMgaXMgbm90 IE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICAg ICAgICAgICMgQWRkIGlucHV0IGZpbGUgdHVwbGVzIHRvIHRoZSBsaXN0LgotICAgICAgICAgICAg ICAgICAgICBmb3IgaW5wdXQgaW4gdGVzdC5pbnB1dHM6Ci0gICAgICAgICAgICAgICAgICAgICAg ICBmb3IgaW5wdXRfdmFsdWUgaW4gdGVzdC5pbnB1dHNbIGlucHV0IF06Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5wdXRfcGF0aCA9M0Qgb3MucGF0aC5hYnNwYXRoKCBvcy5wYXRoLmpv aW4oID0KJ3Rlc3QtZGF0YScsIGlucHV0X3ZhbHVlICkgKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCBpbnB1dF9wYXRoICk6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkX3R1cCA9M0QgKCBpbnB1dF9wYXRoLCBvcy5wYXRoLmpvaW4oICd0 ZT0Kc3QtZGF0YScsIGlucHV0X3ZhbHVlICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0YXJiYWxsX2ZpbGVzLmFwcGVuZCggdGRfdHVwICkKLSAgICAgICAgICAgICAgICAgICAg IyBBbmQgYWRkIG91dHB1dCBmaWxlIHR1cGxlcyB0byB0aGUgbGlzdC4KLSAgICAgICAgICAgICAg ICAgICAgZm9yIGxhYmVsLCBmaWxlbmFtZSwgXyBpbiB0ZXN0Lm91dHB1dHM6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBvdXRwdXRfZmlsZXBhdGggPTNEIG9zLnBhdGguYWJzcGF0aCggb3MucGF0 aC5qb2luKD0KICd0ZXN0LWRhdGEnLCBmaWxlbmFtZSApICkKLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmIG9zLnBhdGguZXhpc3RzKCBvdXRwdXRfZmlsZXBhdGggKToKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZF90dXAgPTNEICggb3V0cHV0X2ZpbGVwYXRoLCBvcy5wYXRoLmpvaW4o ICd0PQplc3QtZGF0YScsIGZpbGVuYW1lICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRhcmJhbGxfZmlsZXMuYXBwZW5kKCB0ZF90dXAgKQotICAgICAgICAgICAgZm9yIHBhcmFtIGlu IHRvb2wuaW5wdXRfcGFyYW1zOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIHRvb2wgZGF0 YSB0YWJsZSBkZWZpbml0aW9ucy4KLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKCBwYXJhbSwg J29wdGlvbnMnICk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoIHBhcmFtLm9wdGlv bnMsICd0b29sX2RhdGFfdGFibGUnICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3Rh YmxlID0zRCBwYXJhbS5vcHRpb25zLnRvb2xfZGF0YV90YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgaGFzYXR0ciggZGF0YV90YWJsZSwgJ2ZpbGVuYW1lcycgKToKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhX3RhYmxlX2RlZmluaXRpb25zID0zRCBbXQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBkYXRhX3RhYmxlX2ZpbGVuYW1lIGluIGRhdGFfdGFibGUu ZmlsZW5hbWU9CnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IGZy b21fc2hlZF9jb25maWcgc2VlbXMgdG8gYWx3YXlzID0KYmUgRmFsc2UuCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhX3RhYmxlLmZpbGVuYW1lc1sgZGF0YV90YWJs ZV9maT0KbGVuYW1lIF1bICdmcm9tX3NoZWRfY29uZmlnJyBdOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGFyX2ZpbGUgPTNEIGRhdGFfdGFibGUuZmlsZW5hbWVzWyBkYXQ9 CmFfdGFibGVfZmlsZW5hbWUgXVsgJ2ZpbGVuYW1lJyBdICsgJy5zYW1wbGUnCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZmlsZSA9M0Qgb3MucGF0aC5qb2luKCBk YXRhX3RhYj0KbGUuZmlsZW5hbWVzWyBkYXRhX3RhYmxlX2ZpbGVuYW1lIF1bICd0b29sX2RhdGFf cGF0aCcgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0YXJfZmlsZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIFVzZSB0aGUgLnNhbXBsZSBmaWxlLCBpZiBvbmUgZXhpc3RzLj0KIElmIG5vdCwg c2tpcCB0aGlzIGRhdGEgdGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiBvcy5wYXRoLmV4aXN0cyggc2FtcGxlX2ZpbGUgKToKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0YXJmaWxlX3BhdGgsIHRhcmZpbGVfbmFtZSA9M0Qgb3MuPQpw YXRoLnNwbGl0KCB0YXJfZmlsZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGFyZmlsZV9wYXRoID0zRCBvcy5wYXRoLmpvaW4oICd0bz0Kb2wtZGF0YScsIHRhcmZp bGVfbmFtZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl X25hbWUgPTNEIHRhcmZpbGVfcGF0aCArICcucz0KYW1wbGUnCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbF9maWxlcy5hcHBlbmQoICggc2FtcGxlX2ZpbD0K ZSwgdGFyZmlsZV9wYXRoICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YV90YWJsZV9kZWZpbml0aW9ucy5hcHBlbmQoIGRhdGFfdGE9CmJsZS54bWxfc3RyaW5nICkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oIGRhdGFfdGFibGVfZGVmaW5pdGlv bnMgKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUHV0IHRoZSBkYXRh IHRhYmxlIGRlZmluaXRpb24gWE1MIGluIGEgdD0KZW1wb3JhcnkgZmlsZS4KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFibGVfZGVmaW5pdGlvbiA9M0QgJzw/eG1sIHZlcnNpb249 M0QiMS4wPQoiIGVuY29kaW5nPTNEInV0Zi04Ij8+XG48dGFibGVzPlxuICAgICVzPC90YWJsZXM+ JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9kZWZpbml0aW9uID0zRCB0 YWJsZV9kZWZpbml0aW9uICUgJ1w9Cm4nLmpvaW4oIGRhdGFfdGFibGVfZGVmaW5pdGlvbnMgKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZCwgdGFibGVfY29uZiA9M0QgdGVtcGZp bGUubWtzdGVtcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKCBm ZCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUoIHRhYmxlX2NvbmYsICd3 JyApLndyaXRlKCB0YWJsZV9kZWZpbj0KaXRpb24gKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0YXJiYWxsX2ZpbGVzLmFwcGVuZCggKCB0YWJsZV9jb25mLCBvcy5wYXQ9Cmguam9p biggJ3Rvb2wtZGF0YScsICd0b29sX2RhdGFfdGFibGVfY29uZi54bWwuc2FtcGxlJyApICkgKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2ZpbGVzLmFwcGVuZCggdGFibGVf Y29uZiApCi0gICAgICAgICAgICAjIENyZWF0ZSB0aGUgdGFyYmFsbC4KLSAgICAgICAgICAgIGZk LCB0YXJiYWxsX2FyY2hpdmUgPTNEIHRlbXBmaWxlLm1rc3RlbXAoIHN1ZmZpeD0zRCcudGd6JyAp Ci0gICAgICAgICAgICBvcy5jbG9zZSggZmQgKQotICAgICAgICAgICAgdGFyYmFsbCA9M0QgdGFy ZmlsZS5vcGVuKCBuYW1lPTNEdGFyYmFsbF9hcmNoaXZlLCBtb2RlPTNEJ3c6Z3o9CicgKQotICAg ICAgICAgICAgIyBBZGQgdGhlIGZpbGVzIGZyb20gdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGxp c3QuCi0gICAgICAgICAgICBmb3IgZnNwYXRoLCB0YXJwYXRoIGluIHRhcmJhbGxfZmlsZXM6Ci0g ICAgICAgICAgICAgICAgdGFyYmFsbC5hZGQoIGZzcGF0aCwgYXJjbmFtZT0zRHRhcnBhdGggKQot ICAgICAgICAgICAgdGFyYmFsbC5jbG9zZSgpCi0gICAgICAgICAgICAjIERlbGV0ZSBhbnkgdGVt cG9yYXJ5IGZpbGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICBmb3IgdGVtcF9m aWxlIGluIHRlbXBfZmlsZXM6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKCB0ZW1wX2ZpbGUg KQotICAgICAgICAgICAgcmV0dXJuIHRhcmJhbGxfYXJjaGl2ZSwgVHJ1ZSwgTm9uZQotICAgICAg ICByZXR1cm4gTm9uZSwgRmFsc2UsICJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiIKLQotICAg IGRlZiByZWxvYWRfdG9vbF9ieV9pZCggc2VsZiwgdG9vbF9pZCApOgotICAgICAgICAiIiIKLSAg ICAgICAgQXR0ZW1wdCB0byByZWxvYWQgdGhlIHRvb2wgaWRlbnRpZmllZCBieSAndG9vbF9pZCcs IGlmIHN1Y2Nlc3NmdWwKLSAgICAgICAgcmVwbGFjZSB0aGUgb2xkIHRvb2wuCi0gICAgICAgICIi IgotICAgICAgICBpZiB0b29sX2lkIG5vdCBpbiBzZWxmLnRvb2xzX2J5X2lkOgotICAgICAgICAg ICAgbWVzc2FnZSA9M0QgIk5vIHRvb2wgd2l0aCBpZCAlcyIgJSBlc2NhcGUoIHRvb2xfaWQgKQot ICAgICAgICAgICAgc3RhdHVzID0zRCAnZXJyb3InCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg ICBvbGRfdG9vbCA9M0Qgc2VsZi50b29sc19ieV9pZFsgdG9vbF9pZCBdCi0gICAgICAgICAgICBu ZXdfdG9vbCA9M0Qgc2VsZi5sb2FkX3Rvb2woIG9sZF90b29sLmNvbmZpZ19maWxlICkKLSAgICAg ICAgICAgICMgVGhlIHRvb2wgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgZnJvbSBhIHRvb2wgc2hl ZCwgc28gc2V0IHRoPQplIHRvb2wgc2hlZCBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgIyBTaW5j ZSB0aGUgdG9vbCB2ZXJzaW9uIG1heSBoYXZlIGNoYW5nZWQsIHdlIGRvbid0IG92ZXJyaWRlIGk9 CnQgaGVyZS4KLSAgICAgICAgICAgIG5ld190b29sLmlkID0zRCBvbGRfdG9vbC5pZAotICAgICAg ICAgICAgbmV3X3Rvb2wuZ3VpZCA9M0Qgb2xkX3Rvb2wuZ3VpZAotICAgICAgICAgICAgbmV3X3Rv b2wudG9vbF9zaGVkID0zRCBvbGRfdG9vbC50b29sX3NoZWQKLSAgICAgICAgICAgIG5ld190b29s LnJlcG9zaXRvcnlfbmFtZSA9M0Qgb2xkX3Rvb2wucmVwb3NpdG9yeV9uYW1lCi0gICAgICAgICAg ICBuZXdfdG9vbC5yZXBvc2l0b3J5X293bmVyID0zRCBvbGRfdG9vbC5yZXBvc2l0b3J5X293bmVy Ci0gICAgICAgICAgICBuZXdfdG9vbC5pbnN0YWxsZWRfY2hhbmdlc2V0X3JldmlzaW9uID0zRCBv bGRfdG9vbC5pbnN0YWxsZWRfYz0KaGFuZ2VzZXRfcmV2aXNpb24KLSAgICAgICAgICAgIG5ld190 b29sLm9sZF9pZCA9M0Qgb2xkX3Rvb2wub2xkX2lkCi0gICAgICAgICAgICAjIFJlcGxhY2Ugb2xk X3Rvb2wgd2l0aCBuZXdfdG9vbCBpbiBzZWxmLnRvb2xfcGFuZWwKLSAgICAgICAgICAgIHRvb2xf a2V5ID0zRCAndG9vbF8nICsgdG9vbF9pZAotICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIHNl bGYudG9vbF9wYW5lbC5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIGtleSA9M0Q9M0QgdG9v bF9rZXk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbF9wYW5lbFsga2V5IF0gPTNEIG5l d190b29sCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxpZiBr ZXkuc3RhcnRzd2l0aCggJ3NlY3Rpb24nICk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHRvb2xf a2V5IGluIHZhbC5lbGVtczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbF9wYW5l bFsga2V5IF0uZWxlbXNbIHRvb2xfa2V5IF0gPTNEIG5ld190PQpvb2wKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLnRvb2xzX2J5X2lkWyB0b29sX2lkIF0g PTNEIG5ld190b29sCi0gICAgICAgICAgICBtZXNzYWdlID0zRCAiUmVsb2FkZWQgdGhlIHRvb2w6 PGJyLz4iCi0gICAgICAgICAgICBtZXNzYWdlICs9M0QgIjxiPm5hbWU6PC9iPiAlczxici8+IiAl IG9sZF90b29sLm5hbWUKLSAgICAgICAgICAgIG1lc3NhZ2UgKz0zRCAiPGI+aWQ6PC9iPiAlczxi ci8+IiAlIG9sZF90b29sLmlkCi0gICAgICAgICAgICBtZXNzYWdlICs9M0QgIjxiPnZlcnNpb246 PC9iPiAlcyIgJSBvbGRfdG9vbC52ZXJzaW9uCi0gICAgICAgICAgICBzdGF0dXMgPTNEICdkb25l JwotICAgICAgICByZXR1cm4gbWVzc2FnZSwgc3RhdHVzCi0KLSAgICBkZWYgcmVtb3ZlX3Rvb2xf YnlfaWQoIHNlbGYsIHRvb2xfaWQgKToKLSAgICAgICAgIiIiCi0gICAgICAgIEF0dGVtcHQgdG8g cmVtb3ZlIHRoZSB0b29sIGlkZW50aWZpZWQgYnkgJ3Rvb2xfaWQnLgotICAgICAgICAiIiIKLSAg ICAgICAgaWYgdG9vbF9pZCBub3QgaW4gc2VsZi50b29sc19ieV9pZDoKLSAgICAgICAgICAgIG1l c3NhZ2UgPTNEICJObyB0b29sIHdpdGggaWQgJXMiICUgZXNjYXBlKCB0b29sX2lkICkKLSAgICAg ICAgICAgIHN0YXR1cyA9M0QgJ2Vycm9yJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdG9v bCA9M0Qgc2VsZi50b29sc19ieV9pZFsgdG9vbF9pZCBdCi0gICAgICAgICAgICBkZWwgc2VsZi50 b29sc19ieV9pZFsgdG9vbF9pZCBdCi0gICAgICAgICAgICB0b29sX2tleSA9M0QgJ3Rvb2xfJyAr IHRvb2xfaWQKLSAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLnRvb2xfcGFuZWwuaXRl bXMoKToKLSAgICAgICAgICAgICAgICBpZiBrZXkgPTNEPTNEIHRvb2xfa2V5OgotICAgICAgICAg ICAgICAgICAgICBkZWwgc2VsZi50b29sX3BhbmVsWyBrZXkgXQotICAgICAgICAgICAgICAgICAg ICBicmVhawotICAgICAgICAgICAgICAgIGVsaWYga2V5LnN0YXJ0c3dpdGgoICdzZWN0aW9uJyAp OgotICAgICAgICAgICAgICAgICAgICBpZiB0b29sX2tleSBpbiB2YWwuZWxlbXM6Ci0gICAgICAg ICAgICAgICAgICAgICAgICBkZWwgc2VsZi50b29sX3BhbmVsWyBrZXkgXS5lbGVtc1sgdG9vbF9r ZXkgXQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHRvb2xf aWQgaW4gc2VsZi5kYXRhX21hbmFnZXJfdG9vbHM6Ci0gICAgICAgICAgICAgICAgZGVsIHNlbGYu ZGF0YV9tYW5hZ2VyX3Rvb2xzWyB0b29sX2lkIF0KLSAgICAgICAgICAgICNUT0RPOiBkbyB3ZSBu ZWVkIHRvIG1hbnVhbGx5IHJlbW92ZSBmcm9tIHRoZSBpbnRlZ3JhdGVkIHBhbmVsPQogaGVyZT8K LSAgICAgICAgICAgIG1lc3NhZ2UgPTNEICJSZW1vdmVkIHRoZSB0b29sOjxici8+IgotICAgICAg ICAgICAgbWVzc2FnZSArPTNEICI8Yj5uYW1lOjwvYj4gJXM8YnIvPiIgJSB0b29sLm5hbWUKLSAg ICAgICAgICAgIG1lc3NhZ2UgKz0zRCAiPGI+aWQ6PC9iPiAlczxici8+IiAlIHRvb2wuaWQKLSAg ICAgICAgICAgIG1lc3NhZ2UgKz0zRCAiPGI+dmVyc2lvbjo8L2I+ICVzIiAlIHRvb2wudmVyc2lv bgotICAgICAgICAgICAgc3RhdHVzID0zRCAnZG9uZScKLSAgICAgICAgcmV0dXJuIG1lc3NhZ2Us IHN0YXR1cwotCi0gICAgZGVmIGxvYWRfd29ya2Zsb3coIHNlbGYsIHdvcmtmbG93X2lkICk6Ci0g ICAgICAgICIiIgotICAgICAgICBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgJ1dvcmtmbG93JyBpZGVu dGlmaWVkIGJ5IGBpZGAsCi0gICAgICAgIHdoaWNoIGlzIGVuY29kZWQgaW4gdGhlIHRvb2wgcGFu ZWwuCi0gICAgICAgICIiIgotICAgICAgICBpZCA9M0Qgc2VsZi5hcHAuc2VjdXJpdHkuZGVjb2Rl X2lkKCB3b3JrZmxvd19pZCApCi0gICAgICAgIHN0b3JlZCA9M0Qgc2VsZi5hcHAubW9kZWwuY29u dGV4dC5xdWVyeSggc2VsZi5hcHAubW9kZWwuU3RvcmVkV29yaz0KZmxvdyApLmdldCggaWQgKQot ICAgICAgICByZXR1cm4gc3RvcmVkLmxhdGVzdF93b3JrZmxvdwotCi0gICAgZGVmIGluaXRfZGVw ZW5kZW5jeV9tYW5hZ2VyKCBzZWxmICk6CisgICAgZGVmIF9pbml0X2RlcGVuZGVuY3lfbWFuYWdl ciggc2VsZiApOgogICAgICAgICBzZWxmLmRlcGVuZGVuY3lfbWFuYWdlciA9M0QgYnVpbGRfZGVw ZW5kZW5jeV9tYW5hZ2VyKCBzZWxmLmFwcC5jb249CmZpZyApCj0yMAotICAgIEBwcm9wZXJ0eQot ICAgIGRlZiBzYV9zZXNzaW9uKCBzZWxmICk6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm5z IGEgU1FMQWxjaGVteSBzZXNzaW9uCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5h cHAubW9kZWwuY29udGV4dAotCi0gICAgZGVmIHRvX2RpY3QoIHNlbGYsIHRyYW5zLCBpbl9wYW5l bD0zRFRydWUsICoqa3dkcyApOgotICAgICAgICAiIiIKLSAgICAgICAgdG9fZGljdCB0b29sYm94 LgotICAgICAgICAiIiIKLQotICAgICAgICBjb250ZXh0ID0zRCBCdW5jaCggdG9vbGJveD0zRHNl bGYsIHRyYW5zPTNEdHJhbnMsICoqa3dkcyApCi0gICAgICAgIGlmIGluX3BhbmVsOgotICAgICAg ICAgICAgcGFuZWxfZWx0cyA9M0QgWyB2YWwgZm9yIHZhbCBpbiBzZWxmLnRvb2xfcGFuZWwuaXRl cnZhbHVlcygpIF0KLQotICAgICAgICAgICAgZmlsdGVycyA9M0Qgc2VsZi5maWx0ZXJfZmFjdG9y eS5idWlsZF9maWx0ZXJzKCB0cmFucywgKiprd2RzICkKLQotICAgICAgICAgICAgZmlsdGVyZWRf cGFuZWxfZWx0cyA9M0QgW10KLSAgICAgICAgICAgIGZvciBpbmRleCwgZWx0IGluIGVudW1lcmF0 ZSggcGFuZWxfZWx0cyApOgotICAgICAgICAgICAgICAgIGVsdCA9M0QgX2ZpbHRlcl9mb3JfcGFu ZWwoIGVsdCwgZmlsdGVycywgY29udGV4dCApCi0gICAgICAgICAgICAgICAgaWYgZWx0OgotICAg ICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9wYW5lbF9lbHRzLmFwcGVuZCggZWx0ICkKLSAgICAg ICAgICAgIHBhbmVsX2VsdHMgPTNEIGZpbHRlcmVkX3BhbmVsX2VsdHMKLQotICAgICAgICAgICAg IyBQcm9kdWNlIHBhbmVsLgotICAgICAgICAgICAgcnZhbCA9M0QgW10KLSAgICAgICAgICAgIGt3 YXJncyA9M0QgZGljdCgKLSAgICAgICAgICAgICAgICB0cmFucz0zRHRyYW5zLAotICAgICAgICAg ICAgICAgIGxpbmtfZGV0YWlscz0zRFRydWUKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZv ciBlbHQgaW4gcGFuZWxfZWx0czoKLSAgICAgICAgICAgICAgICBydmFsLmFwcGVuZCggdG9fZGlj dF9oZWxwZXIoIGVsdCwga3dhcmdzICkgKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdG9v bHMgPTNEIFtdCi0gICAgICAgICAgICBmb3IgaWQsIHRvb2wgaW4gc2VsZi50b29sc19ieV9pZC5p dGVtcygpOgotICAgICAgICAgICAgICAgIHRvb2xzLmFwcGVuZCggdG9vbC50b19kaWN0KCB0cmFu cywgbGlua19kZXRhaWxzPTNEVHJ1ZSApICkKLSAgICAgICAgICAgIHJ2YWwgPTNEIHRvb2xzCi0K LSAgICAgICAgcmV0dXJuIHJ2YWwKLQotCi1kZWYgX2ZpbHRlcl9mb3JfcGFuZWwoIGl0ZW0sIGZp bHRlcnMsIGNvbnRleHQgKToKLSAgICAiIiIKLSAgICBGaWx0ZXJzIHRvb2wgcGFuZWwgZWxlbWVu dHMgc28gdGhhdCBvbmx5IHRob3NlIHRoYXQgYXJlIGNvbXBhdGlibGUKLSAgICB3aXRoIHByb3Zp ZGVkIGZpbHRlcnMgYXJlIGtlcHQuCi0gICAgIiIiCi0gICAgZGVmIF9hcHBseV9maWx0ZXIoIGZp bHRlcl9pdGVtLCBmaWx0ZXJfbGlzdCApOgotICAgICAgICBmb3IgZmlsdGVyX21ldGhvZCBpbiBm aWx0ZXJfbGlzdDoKLSAgICAgICAgICAgIGlmIG5vdCBmaWx0ZXJfbWV0aG9kKCBjb250ZXh0LCBm aWx0ZXJfaXRlbSApOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1 cm4gVHJ1ZQotICAgIGlmIGlzaW5zdGFuY2UoIGl0ZW0sIFRvb2wgKToKLSAgICAgICAgaWYgX2Fw cGx5X2ZpbHRlciggaXRlbSwgZmlsdGVyc1sgJ3Rvb2wnIF0gKToKLSAgICAgICAgICAgIHJldHVy biBpdGVtCi0gICAgZWxpZiBpc2luc3RhbmNlKCBpdGVtLCBUb29sU2VjdGlvbkxhYmVsICk6Ci0g ICAgICAgIGlmIF9hcHBseV9maWx0ZXIoIGl0ZW0sIGZpbHRlcnNbICdsYWJlbCcgXSApOgotICAg ICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICBlbGlmIGlzaW5zdGFuY2UoIGl0ZW0sIFRvb2xTZWN0 aW9uICk6Ci0gICAgICAgICMgRmlsdGVyIHNlY3Rpb24gaXRlbS1ieS1pdGVtLiBPbmx5IHNob3cg YSBsYWJlbCBpZiB0aGVyZSBhcmUKLSAgICAgICAgIyBub24tZmlsdGVyZWQgdG9vbHMgYmVsb3cg aXQuCi0KLSAgICAgICAgaWYgX2FwcGx5X2ZpbHRlciggaXRlbSwgZmlsdGVyc1sgJ3NlY3Rpb24n IF0gKToKLSAgICAgICAgICAgIGN1cl9sYWJlbF9rZXkgPTNEIE5vbmUKLSAgICAgICAgICAgIHRv b2xzX3VuZGVyX2xhYmVsID0zRCBGYWxzZQotICAgICAgICAgICAgZmlsdGVyZWRfZWxlbXMgPTNE IGl0ZW0uZWxlbXMuY29weSgpCi0gICAgICAgICAgICBmb3Iga2V5LCBzZWN0aW9uX2l0ZW0gaW4g aXRlbS5lbGVtcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoIHNlY3Rp b25faXRlbSwgVG9vbCApOgotICAgICAgICAgICAgICAgICAgICAjIEZpbHRlciB0b29sLgotICAg ICAgICAgICAgICAgICAgICBpZiBfYXBwbHlfZmlsdGVyKCBzZWN0aW9uX2l0ZW0sIGZpbHRlcnNb ICd0b29sJyBdICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b29sc191bmRlcl9sYWJlbCA9 M0QgVHJ1ZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAg ICAgZGVsIGZpbHRlcmVkX2VsZW1zWyBrZXkgXQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSggc2VjdGlvbl9pdGVtLCBUb29sU2VjdGlvbkxhYmVsICk6Ci0gICAgICAgICAgICAgICAg ICAgICMgSWYgdGhlcmUgaXMgYSBsYWJlbCBhbmQgaXQgZG9lcyBub3QgaGF2ZSB0b29scywKLSAg ICAgICAgICAgICAgICAgICAgIyByZW1vdmUgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmICgg Y3VyX2xhYmVsX2tleSBhbmQgbm90IHRvb2xzX3VuZGVyX2xhYmVsICkgb3Igbm90ID0KX2FwcGx5 X2ZpbHRlciggc2VjdGlvbl9pdGVtLCBmaWx0ZXJzWyAnbGFiZWwnIF0gKToKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRlbCBmaWx0ZXJlZF9lbGVtc1sgY3VyX2xhYmVsX2tleSBdCi0KLSAgICAg ICAgICAgICAgICAgICAgIyBSZXNldCBhdHRyaWJ1dGVzIGZvciBuZXcgbGFiZWwuCi0gICAgICAg ICAgICAgICAgICAgIGN1cl9sYWJlbF9rZXkgPTNEIGtleQotICAgICAgICAgICAgICAgICAgICB0 b29sc191bmRlcl9sYWJlbCA9M0QgRmFsc2UKLQotICAgICAgICAgICAgIyBIYW5kbGUgbGFzdCBs YWJlbC4KLSAgICAgICAgICAgIGlmIGN1cl9sYWJlbF9rZXkgYW5kIG5vdCB0b29sc191bmRlcl9s YWJlbDoKLSAgICAgICAgICAgICAgICBkZWwgZmlsdGVyZWRfZWxlbXNbIGN1cl9sYWJlbF9rZXkg XQotCi0gICAgICAgICAgICAjIE9ubHkgcmV0dXJuIHNlY3Rpb24gaWYgdGhlcmUgYXJlIGVsZW1l bnRzLgotICAgICAgICAgICAgaWYgbGVuKCBmaWx0ZXJlZF9lbGVtcyApICE9M0QgMDoKLSAgICAg ICAgICAgICAgICBjb3B5ID0zRCBpdGVtLmNvcHkoKQotICAgICAgICAgICAgICAgIGNvcHkuZWxl bXMgPTNEIGZpbHRlcmVkX2VsZW1zCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvcHkKLQotICAg IHJldHVybiBOb25lCi0KLQotY2xhc3MgVG9vbFNlY3Rpb24oIG9iamVjdCwgRGljdGlmaWFibGUg KToKLSAgICAiIiIKLSAgICBBIGdyb3VwIG9mIHRvb2xzIHdpdGggc2ltaWxhciB0eXBlL3B1cnBv c2UgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBhCi0gICAgZ3JvdXAgaW4gdGhlIHVzZXIgaW50 ZXJmYWNlLgotICAgICIiIgotCi0gICAgZGljdF9jb2xsZWN0aW9uX3Zpc2libGVfa2V5cyA9M0Qg KCAnaWQnLCAnbmFtZScsICd2ZXJzaW9uJyApCi0KLSAgICBkZWYgX19pbml0X18oIHNlbGYsIGVs ZW09M0ROb25lICk6Ci0gICAgICAgIGYgPTNEIGxhbWJkYSBlbGVtLCB2YWw6IGVsZW0gaXMgbm90 IE5vbmUgYW5kIGVsZW0uZ2V0KCB2YWwgKSBvciAnJwotICAgICAgICBzZWxmLm5hbWUgPTNEIGYo IGVsZW0sICduYW1lJyApCi0gICAgICAgIHNlbGYuaWQgPTNEIGYoIGVsZW0sICdpZCcgKQotICAg ICAgICBzZWxmLnZlcnNpb24gPTNEIGYoIGVsZW0sICd2ZXJzaW9uJyApCi0gICAgICAgIHNlbGYu ZWxlbXMgPTNEIG9kaWN0KCkKLQotICAgIGRlZiBjb3B5KCBzZWxmICk6Ci0gICAgICAgIGNvcHkg PTNEIFRvb2xTZWN0aW9uKCkKLSAgICAgICAgY29weS5uYW1lID0zRCBzZWxmLm5hbWUKLSAgICAg ICAgY29weS5pZCA9M0Qgc2VsZi5pZAotICAgICAgICBjb3B5LnZlcnNpb24gPTNEIHNlbGYudmVy c2lvbgotICAgICAgICBjb3B5LmVsZW1zID0zRCBzZWxmLmVsZW1zLmNvcHkoKQotICAgICAgICBy ZXR1cm4gY29weQotCi0gICAgZGVmIHRvX2RpY3QoIHNlbGYsIHRyYW5zLCBsaW5rX2RldGFpbHM9 M0RGYWxzZSApOgotICAgICAgICAiIiIgUmV0dXJuIGEgZGljdCB0aGF0IGluY2x1ZGVzIHNlY3Rp b24ncyBhdHRyaWJ1dGVzLiAiIiIKLQotICAgICAgICBzZWN0aW9uX2RpY3QgPTNEIHN1cGVyKCBU b29sU2VjdGlvbiwgc2VsZiApLnRvX2RpY3QoKQotICAgICAgICBzZWN0aW9uX2VsdHMgPTNEIFtd Ci0gICAgICAgIGt3YXJncyA9M0QgZGljdCgKLSAgICAgICAgICAgIHRyYW5zPTNEdHJhbnMsCi0g ICAgICAgICAgICBsaW5rX2RldGFpbHM9M0RsaW5rX2RldGFpbHMKLSAgICAgICAgKQotICAgICAg ICBmb3IgZWx0IGluIHNlbGYuZWxlbXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBzZWN0aW9uX2Vs dHMuYXBwZW5kKCB0b19kaWN0X2hlbHBlciggZWx0LCBrd2FyZ3MgKSApCi0gICAgICAgIHNlY3Rp b25fZGljdFsgJ2VsZW1zJyBdID0zRCBzZWN0aW9uX2VsdHMKLQotICAgICAgICByZXR1cm4gc2Vj dGlvbl9kaWN0Ci0KLQotY2xhc3MgVG9vbFNlY3Rpb25MYWJlbCggb2JqZWN0LCBEaWN0aWZpYWJs ZSApOgotICAgICIiIgotICAgIEEgbGFiZWwgZm9yIGEgc2V0IG9mIHRvb2xzIHRoYXQgY2FuIGJl IGRpc3BsYXllZCBhYm92ZSBncm91cHMgb2YgdG9vbHMKLSAgICBhbmQgc2VjdGlvbnMgaW4gdGhl IHVzZXIgaW50ZXJmYWNlCi0gICAgIiIiCi0KLSAgICBkaWN0X2NvbGxlY3Rpb25fdmlzaWJsZV9r ZXlzID0zRCAoICdpZCcsICd0ZXh0JywgJ3ZlcnNpb24nICkKLQotICAgIGRlZiBfX2luaXRfXygg c2VsZiwgZWxlbSApOgotICAgICAgICBzZWxmLnRleHQgPTNEIGVsZW0uZ2V0KCAidGV4dCIgKQot ICAgICAgICBzZWxmLmlkID0zRCBlbGVtLmdldCggImlkIiApCi0gICAgICAgIHNlbGYudmVyc2lv biA9M0QgZWxlbS5nZXQoICJ2ZXJzaW9uIiApIG9yICcnCisgICAgZGVmIGhhbmRsZV9kYXRhdHlw ZXNfY2hhbmdlZCggc2VsZiApOgorICAgICAgICAiIiIgUmVmcmVzaCB1cGxvYWQgdG9vbHMgd2hl biBuZXcgZGF0YXR5cGVzIGFyZSBhZGRlZC4gIiIiCisgICAgICAgIGZvciB0b29sX2lkIGluIHNl bGYuX3Rvb2xzX2J5X2lkOgorICAgICAgICAgICAgdG9vbCA9M0Qgc2VsZi5fdG9vbHNfYnlfaWRb IHRvb2xfaWQgXQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSggdG9vbC50b29sX2FjdGlvbiwg VXBsb2FkVG9vbEFjdGlvbiApOgorICAgICAgICAgICAgICAgIHNlbGYucmVsb2FkX3Rvb2xfYnlf aWQoIHRvb2xfaWQgKQo9MjAKPTIwCiBjbGFzcyBEZWZhdWx0VG9vbFN0YXRlKCBvYmplY3QgKToK QEAgLTEzMTMsMTQgKzM0MCw2IEBACiAgICAgICAgIHJldHVybiBbXQo9MjAKICAgICBAcHJvcGVy dHkKLSAgICBkZWYgdG9vbF92ZXJzaW9uX2lkcyggc2VsZiApOgotICAgICAgICAjIElmIHdlIGhh dmUgdmVyc2lvbnMsIHJldHVybiBhIGxpc3Qgb2YgdGhlaXIgdG9vbF9pZHMuCi0gICAgICAgIHRv b2xfdmVyc2lvbiA9M0Qgc2VsZi50b29sX3ZlcnNpb24KLSAgICAgICAgaWYgdG9vbF92ZXJzaW9u OgotICAgICAgICAgICAgcmV0dXJuIHRvb2xfdmVyc2lvbi5nZXRfdmVyc2lvbl9pZHMoIHNlbGYu YXBwICkKLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBAcHJvcGVydHkKICAgICBkZWYgdG9vbF9z aGVkX3JlcG9zaXRvcnkoIHNlbGYgKToKICAgICAgICAgIyBJZiB0aGlzIHRvb2wgaXMgaW5jbHVk ZWQgaW4gYW4gaW5zdGFsbGVkIHRvb2wgc2hlZCByZXBvc2l0b3J5LCByPQpldHVybiBpdC4KICAg ICAgICAgaWYgc2VsZi50b29sX3NoZWQ6CkBAIC0xMzgwLDIwICszOTksNyBAQAogICAgICAgICBy ZXR1cm4gc2VsZi5hcHAuam9iX2NvbmZpZy5nZXRfZGVzdGluYXRpb24oc2VsZi5fX2dldF9qb2Jf dG9vbF9jb249CmZpZ3VyYXRpb24oam9iX3BhcmFtcz0zRGpvYl9wYXJhbXMpLmRlc3RpbmF0aW9u KQo9MjAKICAgICBkZWYgZ2V0X3BhbmVsX3NlY3Rpb24oIHNlbGYgKToKLSAgICAgICAgZm9yIGtl eSwgaXRlbSBpbiBzZWxmLmFwcC50b29sYm94LmludGVncmF0ZWRfdG9vbF9wYW5lbC5pdGVtcygp OgotICAgICAgICAgICAgaWYgaXRlbToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCBp dGVtLCBUb29sICk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGl0ZW0uaWQgPTNEPTNEIHNlbGYu aWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycsICcnCi0gICAgICAgICAgICAg ICAgaWYgaXNpbnN0YW5jZSggaXRlbSwgVG9vbFNlY3Rpb24gKToKLSAgICAgICAgICAgICAgICAg ICAgc2VjdGlvbl9pZCA9M0QgaXRlbS5pZCBvciAnJwotICAgICAgICAgICAgICAgICAgICBzZWN0 aW9uX25hbWUgPTNEIGl0ZW0ubmFtZSBvciAnJwotICAgICAgICAgICAgICAgICAgICBmb3Igc2Vj dGlvbl9rZXksIHNlY3Rpb25faXRlbSBpbiBpdGVtLmVsZW1zLml0ZW1zKCk6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCBzZWN0aW9uX2l0ZW0sIFRvb2wgKToKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX2l0ZW06Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIHNlY3Rpb25faXRlbS5pZCA9M0Q9M0Qgc2VsZi5pZDoKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWN0aW9uX2lkLCBzZWN0aW9u X25hbWUKLSAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuYXBw LnRvb2xib3guZ2V0X2ludGVncmF0ZWRfc2VjdGlvbl9mb3JfdG9vbCggc2VsZiApCj0yMAogICAg IGRlZiBwYXJzZSggc2VsZiwgdG9vbF9zb3VyY2UsIGd1aWQ9M0ROb25lICk6CiAgICAgICAgICIi IgpAQCAtMTU4Miw3ICs1ODgsNyBAQAo9MjAKICAgICAgICAgcm9vdCA9M0QgdG9vbF9zb3VyY2Uu cm9vdAogICAgICAgICBjb25mX3BhcmVudF9lbGVtID0zRCByb290LmZpbmQoImNvbmZpZ2ZpbGVz IikKLSAgICAgICAgaWYgY29uZl9wYXJlbnRfZWxlbToKKyAgICAgICAgaWYgY29uZl9wYXJlbnRf ZWxlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGZvciBjb25mX2VsZW0gaW4gY29uZl9wYXJl bnRfZWxlbS5maW5kYWxsKCAiY29uZmlnZmlsZSIgKToKICAgICAgICAgICAgICAgICBuYW1lID0z RCBjb25mX2VsZW0uZ2V0KCAibmFtZSIgKQogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0zRCBj b25mX2VsZW0uZ2V0KCAiZmlsZW5hbWUiLCBOb25lICkKQEAgLTE3MTYsNyArNzIyLDcgQEAKICAg ICAgICAgcm9vdCA9M0QgdG9vbF9zb3VyY2Uucm9vdAogICAgICAgICBjaXRhdGlvbnMgPTNEIFtd CiAgICAgICAgIGNpdGF0aW9uc19lbGVtID0zRCByb290LmZpbmQoImNpdGF0aW9ucyIpCi0gICAg ICAgIGlmIG5vdCBjaXRhdGlvbnNfZWxlbToKKyAgICAgICAgaWYgY2l0YXRpb25zX2VsZW0gaXMg Tm9uZToKICAgICAgICAgICAgIHJldHVybiBjaXRhdGlvbnMKPTIwCiAgICAgICAgIGZvciBjaXRh dGlvbl9lbGVtIGluIGNpdGF0aW9uc19lbGVtOgpAQCAtMzEyMiw3ICsyMTI4LDcgQEAKICAgICAg ICAganNvbl9wYXJhbXMgPTNEIHt9CiAgICAgICAgIGpzb25fcGFyYW1zWyAncGFyYW1fZGljdCcg XSA9M0Qgc2VsZi5fcHJlcGFyZV9qc29uX3BhcmFtX2RpY3QoIHBhcj0KYW1fZGljdCApICAjIGl0 IHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciB0byBzdG9yZSB0aGUgb3JpZ2luYWwgaW5jb21pbmcg cGFyPQphbWV0ZXJzIGhlcmUsIGluc3RlYWQgb2YgdGhlIEdhbGF4eSBtb2RpZmllZCBvbmVzPwog ICAgICAgICBqc29uX3BhcmFtc1sgJ291dHB1dF9kYXRhJyBdID0zRCBbXQotICAgICAgICBqc29u X3BhcmFtc1sgJ2pvYl9jb25maWcnIF0gPTNEIGRpY3QoIEdBTEFYWV9EQVRBVFlQRVNfQ09ORl9G SUxFPQo9M0RwYXJhbV9kaWN0LmdldCggJ0dBTEFYWV9EQVRBVFlQRVNfQ09ORl9GSUxFJyApLCBH QUxBWFlfUk9PVF9ESVI9M0RwYXJhbV89CmRpY3QuZ2V0KCAnR0FMQVhZX1JPT1RfRElSJyApLCBU T09MX1BST1ZJREVEX0pPQl9NRVRBREFUQV9GSUxFPTNEam9icy5UT09MXz0KUFJPVklERURfSk9C X01FVEFEQVRBX0ZJTEUgKQorICAgICAgICBqc29uX3BhcmFtc1sgJ2pvYl9jb25maWcnIF0gPTNE IGRpY3QoIEdBTEFYWV9EQVRBVFlQRVNfQ09ORl9GSUxFPQo9M0RwYXJhbV9kaWN0LmdldCggJ0dB TEFYWV9EQVRBVFlQRVNfQ09ORl9GSUxFJyApLCBHQUxBWFlfUk9PVF9ESVI9M0RwYXJhbV89CmRp Y3QuZ2V0KCAnR0FMQVhZX1JPT1RfRElSJyApLCBUT09MX1BST1ZJREVEX0pPQl9NRVRBREFUQV9G SUxFPTNEZ2FsYXh5LmpvYj0Kcy5UT09MX1BST1ZJREVEX0pPQl9NRVRBREFUQV9GSUxFICkKICAg ICAgICAganNvbl9maWxlbmFtZSA9M0QgTm9uZQogICAgICAgICBmb3IgaSwgKCBvdXRfbmFtZSwg ZGF0YSApIGluIGVudW1lcmF0ZSggb3V0X2RhdGEuaXRlcml0ZW1zKCkgKToKICAgICAgICAgICAg ICN1c2Ugd3JhcHBlZCBkYXRhc2V0IHRvIGFjY2VzcyBjZXJ0YWluIHZhbHVlcwpAQCAtMzE3Miw3 ICsyMTc4LDcgQEAKICAgICAgICAganNvbl9wYXJhbXMgPTNEIHt9CiAgICAgICAgIGpzb25fcGFy YW1zWyAncGFyYW1fZGljdCcgXSA9M0Qgc2VsZi5fcHJlcGFyZV9qc29uX3BhcmFtX2RpY3QoIHBh cj0KYW1fZGljdCApICAjIGl0IHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciB0byBzdG9yZSB0aGUg b3JpZ2luYWwgaW5jb21pbmcgcGFyPQphbWV0ZXJzIGhlcmUsIGluc3RlYWQgb2YgdGhlIEdhbGF4 eSBtb2RpZmllZCBvbmVzPwogICAgICAgICBqc29uX3BhcmFtc1sgJ291dHB1dF9kYXRhJyBdID0z RCBbXQotICAgICAgICBqc29uX3BhcmFtc1sgJ2pvYl9jb25maWcnIF0gPTNEIGRpY3QoIEdBTEFY WV9EQVRBVFlQRVNfQ09ORl9GSUxFPQo9M0RwYXJhbV9kaWN0LmdldCggJ0dBTEFYWV9EQVRBVFlQ RVNfQ09ORl9GSUxFJyApLCBHQUxBWFlfUk9PVF9ESVI9M0RwYXJhbV89CmRpY3QuZ2V0KCAnR0FM QVhZX1JPT1RfRElSJyApLCBUT09MX1BST1ZJREVEX0pPQl9NRVRBREFUQV9GSUxFPTNEam9icy5U T09MXz0KUFJPVklERURfSk9CX01FVEFEQVRBX0ZJTEUgKQorICAgICAgICBqc29uX3BhcmFtc1sg J2pvYl9jb25maWcnIF0gPTNEIGRpY3QoIEdBTEFYWV9EQVRBVFlQRVNfQ09ORl9GSUxFPQo9M0Rw YXJhbV9kaWN0LmdldCggJ0dBTEFYWV9EQVRBVFlQRVNfQ09ORl9GSUxFJyApLCBHQUxBWFlfUk9P VF9ESVI9M0RwYXJhbV89CmRpY3QuZ2V0KCAnR0FMQVhZX1JPT1RfRElSJyApLCBUT09MX1BST1ZJ REVEX0pPQl9NRVRBREFUQV9GSUxFPTNEZ2FsYXh5LmpvYj0Kcy5UT09MX1BST1ZJREVEX0pPQl9N RVRBREFUQV9GSUxFICkKICAgICAgICAganNvbl9maWxlbmFtZSA9M0QgTm9uZQogICAgICAgICBm b3IgaSwgKCBvdXRfbmFtZSwgZGF0YSApIGluIGVudW1lcmF0ZSggb3V0X2RhdGEuaXRlcml0ZW1z KCkgKToKICAgICAgICAgICAgICN1c2Ugd3JhcHBlZCBkYXRhc2V0IHRvIGFjY2VzcyBjZXJ0YWlu IHZhbHVlcwoKZGlmZiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZjQ5ZGJkOGRiMGE0NWQ1YTg4 IC1yIGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFkMGRjNjMyNCBsaWIvZ2FsYXh5 L3Rvb2xzL2RhdGFfbWFuYWdlci9tYW5hZ2VyLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvZGF0 YV9tYW5hZ2VyL21hbmFnZXIucHkKKysrIGIvbGliL2dhbGF4eS90b29scy9kYXRhX21hbmFnZXIv bWFuYWdlci5weQpAQCAtMjQ0LDEyICsyNDQsMTIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZ3Vp ZCBvciBzZWxmLmRlY2xhcmVkX2lkICNpZiB3ZSBoYXZlIGEgZ3VpZCwgd2Ugd2lsbCB1PQpzZSB0 aGF0IGFzIHRoZSBkYXRhX21hbmFnZXIgaWQKPTIwCiAgICAgZGVmIGxvYWRfdG9vbCggc2VsZiwg dG9vbF9maWxlbmFtZSwgZ3VpZD0zRE5vbmUsIGRhdGFfbWFuYWdlcl9pZD0zRE5vbj0KZSwgdG9v bF9zaGVkX3JlcG9zaXRvcnlfaWQ9M0ROb25lICk6Ci0gICAgICAgIHRvb2wgPTNEIHNlbGYuZGF0 YV9tYW5hZ2Vycy5hcHAudG9vbGJveC5sb2FkX3Rvb2woIHRvb2xfZmlsZW5hbWUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkPTNE Z3VpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGFfbWFuYWdlcl9pZD0KPTNEZGF0YV9tYW5hZ2VyX2lkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9p ZD0zRHQ9Cm9vbF9zaGVkX3JlcG9zaXRvcnlfaWQgKQorICAgICAgICB0b29sYm94ID0zRCBzZWxm LmRhdGFfbWFuYWdlcnMuYXBwLnRvb2xib3gKKyAgICAgICAgdG9vbCA9M0QgdG9vbGJveC5sb2Fk X2hpZGRlbl90b29sKCB0b29sX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBndWlkPTNEZ3VpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YV9tYW5hZ2VyX2lkPTNEZGF0YV9tYW5hZ2VyX2lkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPTNEdG9vbF9zaGVk X3JlcG9zaXQ9Cm9yeV9pZCApCiAgICAgICAgIHNlbGYuZGF0YV9tYW5hZ2Vycy5hcHAudG9vbGJv eC5kYXRhX21hbmFnZXJfdG9vbHNbIHRvb2wuaWQgXSA9M0QgdD0Kb29sCi0gICAgICAgIHNlbGYu ZGF0YV9tYW5hZ2Vycy5hcHAudG9vbGJveC50b29sc19ieV9pZFsgdG9vbC5pZCBdID0zRCB0b29s CiAgICAgICAgIHNlbGYudG9vbCA9M0QgdG9vbAogICAgICAgICByZXR1cm4gdG9vbAo9MjAKCmRp ZmYgLXIgZWIyMTBjY2M2ZDc2NTQ3ZWNhNjlhM2Y0OWRiZDhkYjBhNDVkNWE4OCAtciBlNjMzODhm ZDZjYmYzNDNhN2IwMzQ5Nj0KMWQxMzlmMTRhZDBkYzYzMjQgbGliL2dhbGF4eS90b29scy9kZXBz L19faW5pdF9fLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvZGVwcy9fX2luaXRfXy5weQorKysg Yi9saWIvZ2FsYXh5L3Rvb2xzL2RlcHMvX19pbml0X18ucHkKQEAgLTE0LDcgKzE0LDcgQEAKPTIw Cj0yMAogZGVmIGJ1aWxkX2RlcGVuZGVuY3lfbWFuYWdlciggY29uZmlnICk6Ci0gICAgaWYgY29u ZmlnLnVzZV90b29sX2RlcGVuZGVuY2llczoKKyAgICBpZiBnZXRhdHRyKCBjb25maWcsICJ1c2Vf dG9vbF9kZXBlbmRlbmNpZXMiLCBGYWxzZSApOgogICAgICAgICBkZXBlbmRlbmN5X21hbmFnZXJf a3dkcyA9M0QgewogICAgICAgICAgICAgJ2RlZmF1bHRfYmFzZV9wYXRoJzogY29uZmlnLnRvb2xf ZGVwZW5kZW5jeV9kaXIsCiAgICAgICAgICAgICAnY29uZl9maWxlJzogY29uZmlnLmRlcGVuZGVu Y3lfcmVzb2x2ZXJzX2NvbmZpZ19maWxlLAoKZGlmZiAtciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEz ZjQ5ZGJkOGRiMGE0NWQ1YTg4IC1yIGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFk MGRjNjMyNCBsaWIvZ2FsYXh5L3Rvb2xzL2ZpbHRlcnMvX19pbml0X18ucHkKLS0tIGEvbGliL2dh bGF4eS90b29scy9maWx0ZXJzL19faW5pdF9fLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvZmls dGVycy9fX2luaXRfXy5weQpAQCAtMSw4NyArMSw1IEBACi1pbXBvcnQgbG9nZ2luZwotZnJvbSBn YWxheHkudXRpbCBpbXBvcnQgbGlzdGlmeQotZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQorIiIi RGVwcmVjYXRlZCBtb2R1bGUgZm9yIHRvb2xib3ggZmlsdGVycy4KPTIwCi1sb2cgPTNEIGxvZ2dp bmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCi0KLQotY2xhc3MgRmlsdGVyRmFjdG9yeSggb2JqZWN0 ICk6Ci0gICAgIiIiCi0gICAgQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyByZXNwb25zaWJs ZSBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0Ci0gICAgb2YgdG9vbHMgcHJlc2VudGVkIHRvIGEgZ2l2 ZW4gdXNlciBpbiBhIGdpdmVuIGNvbnRleHQuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18o IHNlbGYsIHRvb2xib3ggKToKLSAgICAgICAgc2VsZi50b29sYm94ID0zRCB0b29sYm94Ci0KLSAg ICAgICAgIyBQcmVwb3B1bGF0ZSBkaWN0IGNvbnRhaW5pbmcgZmlsdGVycyB0aGF0IGFyZSBhbHdh eXMgY2hlY2tlZCwKLSAgICAgICAgIyBvdGhlciBmaWx0ZXJzIHRoYXQgZ2V0IGNoZWNrZWQgZGVw ZW5kaW5nIG9uIGNvbnRleHQgKGUuZy4gY29taW5nPQogZnJvbQotICAgICAgICAjIHRyYWNrc3Rl ciBvciBubyB1c2VyIGZvdW5kIGFyZSBhZGRlZCBpbiBidWlsZCBmaWx0ZXJzKS4KLSAgICAgICAg c2VsZi5kZWZhdWx0X2ZpbHRlcnMgPTNEIGRpY3QoIHRvb2w9M0RbIF9ub3RfaGlkZGVuLCBfaGFu ZGxlX3JlcXVpPQpyZXNfbG9naW4gXSwgc2VjdGlvbj0zRFtdLCBsYWJlbD0zRFtdICkKLSAgICAg ICAgIyBBZGQgZHluYW1pYyBmaWx0ZXJzIHRvIHRoZXNlIGRlZmF1bHQgZmlsdGVycy4KLSAgICAg ICAgY29uZmlnID0zRCB0b29sYm94LmFwcC5jb25maWcKLSAgICAgICAgc2VsZi5fX2luaXRfZmls dGVycyggInRvb2wiLCBjb25maWcudG9vbF9maWx0ZXJzLCBzZWxmLmRlZmF1bHRfZmlsPQp0ZXJz ICkKLSAgICAgICAgc2VsZi5fX2luaXRfZmlsdGVycyggInNlY3Rpb24iLCBjb25maWcudG9vbF9z ZWN0aW9uX2ZpbHRlcnMsIHNlbGYuPQpkZWZhdWx0X2ZpbHRlcnMgKQotICAgICAgICBzZWxmLl9f aW5pdF9maWx0ZXJzKCAibGFiZWwiLCBjb25maWcudG9vbF9sYWJlbF9maWx0ZXJzLCBzZWxmLmRl ZmE9CnVsdF9maWx0ZXJzICkKLQotICAgIGRlZiBidWlsZF9maWx0ZXJzKCBzZWxmLCB0cmFucywg Kiprd2RzICk6Ci0gICAgICAgICIiIgotICAgICAgICBCdWlsZCBsaXN0IG9mIGZpbHRlcnMgdG8g Y2hlY2sgdG9vbHMgYWdhaW5zdCBnaXZlbiBjdXJyZW50IGNvbnRleHQuCi0gICAgICAgICIiIgot ICAgICAgICBmaWx0ZXJzID0zRCBkZWVwY29weSggc2VsZi5kZWZhdWx0X2ZpbHRlcnMgKQotICAg ICAgICBpZiB0cmFucy51c2VyOgotICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHRyYW5z LnVzZXIucHJlZmVyZW5jZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdHJp cCgpOgotICAgICAgICAgICAgICAgICAgICB1c2VyX2ZpbHRlcnMgPTNEIGxpc3RpZnkoIHZhbHVl LCBkb19zdHJpcD0zRFRydWUgKQotICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9M0QgJycK LSAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSA9M0Q9M0QgJ3Rvb2xib3hfdG9vbF9maWx0ZXJz JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0zRCAidG9vbCIKLSAgICAgICAg ICAgICAgICAgICAgZWxpZiBuYW1lID0zRD0zRCAndG9vbGJveF9zZWN0aW9uX2ZpbHRlcnMnOgot ICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPTNEICJzZWN0aW9uIgotICAgICAgICAg ICAgICAgICAgICBlbGlmIG5hbWUgPTNEPTNEICd0b29sYm94X2xhYmVsX2ZpbHRlcnMnOgotICAg ICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPTNEICJsYWJlbCIKLSAgICAgICAgICAgICAg ICAgICAgaWYgY2F0ZWdvcnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9M0Qg Z2V0YXR0ciggdHJhbnMuYXBwLmNvbmZpZywgJ3VzZXJfJXNfZj0KaWx0ZXJzJyAlIGNhdGVnb3J5 LCBbXSApCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW5pdF9maWx0ZXJzKCBjYXRl Z29yeSwgdXNlcl9maWx0ZXJzLCBmaWx0ZT0KcnMsIHZhbGlkYXRlPTNEdmFsaWRhdGUgKQotICAg ICAgICBlbHNlOgotICAgICAgICAgICAgaWYga3dkcy5nZXQoICJ0cmFja3N0ZXIiLCBGYWxzZSAp OgotICAgICAgICAgICAgICAgIGZpbHRlcnNbICJ0b29sIiBdLmFwcGVuZCggX2hhc190cmFja3N0 ZXJfY29uZiApCi0KLSAgICAgICAgcmV0dXJuIGZpbHRlcnMKLQotICAgIGRlZiBfX2luaXRfZmls dGVycyggc2VsZiwga2V5LCBmaWx0ZXJzLCB0b29sYm94X2ZpbHRlcnMsIHZhbGlkYXRlPTNETm89 Cm5lICk6Ci0gICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsdGVyczoKLSAgICAgICAgICAgIGlmIHZh bGlkYXRlIGlzIE5vbmUgb3IgZmlsdGVyIGluIHZhbGlkYXRlIG9yIGZpbHRlciBpbiBzZWxmLmRl PQpmYXVsdF9maWx0ZXJzOgotICAgICAgICAgICAgICAgIGZpbHRlcl9mdW5jdGlvbiA9M0Qgc2Vs Zi5fX2J1aWxkX2ZpbHRlcl9mdW5jdGlvbiggZmlsdGVyICkKLSAgICAgICAgICAgICAgICB0b29s Ym94X2ZpbHRlcnNbIGtleSBdLmFwcGVuZCggZmlsdGVyX2Z1bmN0aW9uICkKLSAgICAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoICJSZWZ1c2luZyB0byBsb2FkICVz IGZpbHRlciAnJXMnIHdoaWNoIGlzIG5vdD0KIGRlZmluZWQgaW4gY29uZmlnIiwga2V5LCBmaWx0 ZXIgKQotICAgICAgICByZXR1cm4gdG9vbGJveF9maWx0ZXJzCi0KLSAgICBkZWYgX19idWlsZF9m aWx0ZXJfZnVuY3Rpb24oIHNlbGYsIGZpbHRlcl9uYW1lICk6Ci0gICAgICAgICIiIk9idGFpbiBw eXRob24gZnVuY3Rpb24gKGltcG9ydGluZyBhIHN1Ym1vZHVsZSBpZiBuZWVkZWQpCi0gICAgICAg IGNvcnJlc3BvbmRpbmcgdG8gZmlsdGVyX25hbWUuCi0gICAgICAgICIiIgotICAgICAgICBpZiAi OiIgaW4gZmlsdGVyX25hbWU6Ci0gICAgICAgICAgICAjIFNob3VsZCBiZSBhIHN1Ym1vZHVsZSBv ZiBmaWx0ZXJzIChlLmcuIGV4YW1wbGVzOnJlc3RyaWN0X2Rldj0KZWxvcG1lbnRfdG9vbHMpCi0g ICAgICAgICAgICAobW9kdWxlX25hbWUsIGZ1bmN0aW9uX25hbWUpID0zRCBmaWx0ZXJfbmFtZS5y c3BsaXQoIjoiLCAxKQotICAgICAgICAgICAgbW9kdWxlID0zRCBfX2ltcG9ydF9fKCBtb2R1bGVf bmFtZS5zdHJpcCgpLCBnbG9iYWxzKCkgKQotICAgICAgICAgICAgZnVuY3Rpb24gPTNEIGdldGF0 dHIoIG1vZHVsZSwgZnVuY3Rpb25fbmFtZS5zdHJpcCgpICkKLSAgICAgICAgZWxzZToKLSAgICAg ICAgICAgICMgTm8gbW9kdWxlIGZvdW5kLCBqdXN0IGxvYWQgYSBmdW5jdGlvbiBmcm9tIHRoaXMg ZmlsZSBvcgotICAgICAgICAgICAgIyBvbmUgdGhhdCBoYXMgYmUgZXhwbGljaXRseSBpbXBvcnRl ZC4KLSAgICAgICAgICAgIGZ1bmN0aW9uID0zRCBnZXRhdHRyKCBnbG9iYWxzKCksIGZpbHRlcl9u YW1lLnN0cmlwKCkgKQotICAgICAgICByZXR1cm4gZnVuY3Rpb24KLQotCi0jIyBTdG9jayBGaWx0 ZXIgRnVuY3Rpb25zCi1kZWYgX25vdF9oaWRkZW4oIGNvbnRleHQsIHRvb2wgKToKLSAgICByZXR1 cm4gbm90IHRvb2wuaGlkZGVuCi0KLQotZGVmIF9oYW5kbGVfcmVxdWlyZXNfbG9naW4oIGNvbnRl eHQsIHRvb2wgKToKLSAgICByZXR1cm4gbm90IHRvb2wucmVxdWlyZV9sb2dpbiBvciBjb250ZXh0 LnRyYW5zLnVzZXIKLQotCi1kZWYgX2hhc190cmFja3N0ZXJfY29uZiggY29udGV4dCwgdG9vbCAp OgotICAgIHJldHVybiB0b29sLnRyYWNrc3Rlcl9jb25mCitGaWx0ZXJzIHBsYWNlZCBpbiB0aGlz IG1vZHVsZSB3aWxsIHN0aWxsIHdvcmsgLSBidXQgZmlsdGVycyBzaG91bGQgYmUKK21vdmVkIHRv IGxpYi9nYWxheHkvdG9vbHMvdG9vbGJveC9maWx0ZXJzLgorIiIiCgpkaWZmIC1yIGViMjEwY2Nj NmQ3NjU0N2VjYTY5YTNmNDlkYmQ4ZGIwYTQ1ZDVhODggLXIgZTYzMzg4ZmQ2Y2JmMzQzYTdiMDM0 OTY9CjFkMTM5ZjE0YWQwZGM2MzI0IGxpYi9nYWxheHkvdG9vbHMvZmlsdGVycy9leGFtcGxlcy5w eQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL2ZpbHRlcnMvZXhhbXBsZXMucHkKKysrIC9kZXYvbnVs bApAQCAtMSwxMTUgKzAsMCBAQAotaW1wb3J0IGxvZ2dpbmcKLWxvZyA9M0QgbG9nZ2luZy5nZXRM b2dnZXIoIF9fbmFtZV9fICkKLQotCi1kZWYgcmVzdHJpY3RfZW5jb2RlKCBjb250ZW50LCB0b29s ICk6Ci0gICAgIiIiCi0gICAgRGlzYWJsZSB0aGUgcmFuZG9tIGludGVydmFsIEVOQ09ERSB0b29s Ci0gICA9MjAKLSAgICBUaGlzIHRvb2wgZmlsdGVyIHdpbGwgZGlzYWJsZSBhbGwgdGhlIEVOQ09E RSB0b29sIHdoZW4gZW5hYmxlZC4KLSAgICAiIiIKLSAgICBpZiB0b29sLmlkID0zRD0zRCAncmFu ZG9tX2ludGVydmFsczEnOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gVHJ1ZQot Ci0KLWRlZiByZXN0cmljdF90ZXh0KCBjb250ZW50LCBzZWN0aW9uICk6Ci0gICAgIiIiCi0gICAg RGlzYWJsZSBUZXh0IHNlY3Rpb25zCi0gICA9MjAKLSAgICBUaGlzIHRvb2wgZmlsdGVyIHdpbGwg ZGlzYWJsZSBhbGwgVG9vbHMgZ3JvdXBzIHVuZGVyIGEgJ1RleHQnIHNlY3Rpb24gPQp3aGVuIGVu YWJsZWQuCi0gICAgIiIiCi0gICAgaWYgc2VjdGlvbi5uYW1lLmZpbmQoJ1RleHQnKSAhPTNEIC0x OgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gVHJ1ZQotCi0KLWRlZiByZXN0cmlj dF91cGxvYWRfdG9fYWRtaW5zKCBjb250ZXh0LCB0b29sICk6Ci0gICAgIiIiCi0gICAgRGlzYWJs ZSBVcGxvYWQgdG9vbCBmb3IgYWxsIG5vbi1hZG1pbiB1c2Vycy4KLSAgID0yMAotICAgIFRoaXMg dG9vbCBmaWx0ZXIgd2lsbCBoaWRlIHRoZSB1cGxvYWQgdG9vbCBmcm9tIGFsbCB1c2VycyBleGNl cHQgYWRtaW4KLSAgICB1c2Vycy4KLQotICAgIFRoaXMgY2FuIGJlIGVuYWJsZWQgYnkgcmVuYW1p bmcgdGhpcyBmaWxlIHRvIGV4YW1wbGVzLnB5IGFuZCBhZGRpbmcKLSAgICB0aGUgZm9sbG93aW5n IHRvIHRoZSBgYGFwcDptYWluYGAgc2VjdGlvbiBvZiBgYGdhbGF4eS5pbmlgYDoKLQotICAgICAg ICB0b29sX2ZpbHRlcnMgPTNEIGV4YW1wbGVzOnJlc3RyaWN0X3VwbG9hZF90b19hZG1pbnMKLSAg ICAiIiIKLSAgICBpZiB0b29sLm5hbWUgPTNEPTNEICJVcGxvYWQgRmlsZSI6Ci0gICAgICAgIHJl dHVybiBjb250ZXh0LnRyYW5zLnVzZXJfaXNfYWRtaW4oKQotICAgIHJldHVybiBUcnVlCi0KLQot ZGVmIGRpc2FibGVfZ2F0ayggY29udGV4dCwgdG9vbCApOgotICAgICIiIgotICAgIFRoaXMgdG9v bCBmaWx0ZXIgd2lsbCBkaXNhYmxlIGFsbCBnYXRrIHRvb2xzIHdoZW4gZW5hYmxlZC4KLQotICAg IFRoaXMgY2FuIGJlIGVuYWJsZWQgYnkgcmVuYW1pbmcgdGhpcyBmaWxlIHRvIGV4YW1wbGVzLnB5 IGFuZCBhZGRpbmcgdGg9CmUgZm9sbG93aW5nIHRvIHRoZQotICAgICBgYGFwcDptYWluYGAgc2Vj dGlvbiBvZiBgYGdhbGF4eS5pbmlgYDoKLQotICAgICAgICB0b29sX2ZpbHRlcnMgPTNEIGV4YW1w bGVzOmRpc2FibGVfZ2F0awotICAgICIiIgotICAgIHJldHVybiBub3QgYW55KCBbIHJlcXVpcmVt ZW50Lm5hbWUgPTNEPTNEICJnYXRrIiBmb3IgcmVxdWlyZW1lbnQgaW4gdG89Cm9sLnJlcXVpcmVt ZW50cyBdICkKLQotCi1kZWYgZXhwbGljaXRfdXNlcl9tYXBwaW5nKCBjb250ZXh0LCBzZWN0aW9u ICk6Ci0gICAgIiIiCi0gICAgVGhpcyB0b29sIHNlY3Rpb24gZmlsdGVyIHVzZXMgYW4gZXhwbGlj aXQgbWFwcGluZyB0byBkZXNjcmliZSB3aGF0IHVzZT0KcnMgY2FuIHZpZXcKLSAgICB3aGljaCB0 b29sIHNlY3Rpb25zLiBBbm9ueW1vdXMgdXNlcnMgd2lsbCBvbmx5IGJlIGFibGUgdG8gdmlldyB0 aGUgIkdlPQp0IERhdGEiCi0gICAgdG9vbCBzZWN0aW9uICh3aXRoIGlkIGdldGV4dCkuIFRoaXMg Y2FuIGJlIGVuYWJsZWQgYnkgcmVuYW1pbmcgdGhpcyBmaT0KbGUgdG8KLSAgICBleGFtcGxlcy5w eSBhbmQgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGBgYXBwOm1haW5gYCBzZWN0aW9uIG9m Ci0gICAgYGBnYWxheHkuaW5pYGA6Ci0KLSAgICAgICAgdG9vbF9zZWN0aW9uX2ZpbHRlcnMgPTNE IGV4YW1wbGVzOmV4cGxpY2l0X3VzZXJfbWFwcGluZwotICAgICIiIgotICAgIHVzZXJzX3NlY3Rp b25zID0zRCB7Ci0gICAgICAgIE5vbmU6IFsgImdldGV4dCIgXSwKLSAgICAgICAgImJvYkBleGFt cGxlLmNvbSI6IFsgImdldGV4dCIsICJ0ZXh0dXRpbCIsICJmaWx0ZXIiIF0sCi0gICAgICAgICJt YXJ5QGV4YW1wbGUuY29tIjogWyAiZ2V0ZXh0IiwgInRleHR1dGlsIiwgImZpbHRlciIsICJuZ3Mi IF0sCi0gICAgfQotICAgIHVzZXIgPTNEIGNvbnRleHQudHJhbnMudXNlcgotICAgIGVtYWlsID0z RCB1c2VyIGFuZCB1c2VyLmVtYWlsCi0gICAgdmFsaWRfc2VjdGlvbnMgPTNEIHVzZXJzX3NlY3Rp b25zLmdldCggZW1haWwsIFtdICkKLSAgICByZXR1cm4gc2VjdGlvbi5pZCBpbiB2YWxpZF9zZWN0 aW9ucwotCi0KLURFVkVMT1BFUlMgPTNEIFsgIm1hcnlAZXhhbXBsZS5jb20iIF0KLQotCi1kZWYg cmVzdHJpY3RfZGV2ZWxvcG1lbnRfdG9vbHMoIGNvbnRleHQsIHRvb2wgKToKLSAgICAiIiIKLSAg ICBUaGlzIHRvb2wgZmlsdGVyIHdpbGwgZGlzYWJsZSBhbGwgdG9vbHMgd2l0aCB0aGUgc3RyaW5n IGFscGhhIGFwcGVhcmluPQpnIGluCi0gICAgdGhlIHZlcnNpb24gZm9yIGFsbCB1c2VycyBleGNl cHQgdGhvc2UgZXhwbGljaXRseSBhcHBlYXJpbmcgaW4gdGhlIERFVj0KRUxPUEVSUyBsaXN0Ci0g ICAgZGVmaW5lZCBhYm92ZS4gVGhpcyBjYW4gYmUgZW5hYmxlZCBieSByZW5hbWluZyB0aGlzIGZp bGUgdG8gZXhhbXBsZXMucD0KeSBhbmQKLSAgICBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUg YGBhcHA6bWFpbmBgIHNlY3Rpb24gb2YgYGBnYWxheHkuaW5pYGA6Ci0KLSAgICAgICAgdG9vbF9m aWx0ZXJzID0zRCBleGFtcGxlczpyZXN0cmljdF9kZXZlbG9wbWVudF90b29scwotICAgICIiIgot ICAgIHZlcnNpb24gPTNEIHRvb2wudmVyc2lvbgotICAgIHVzZXIgPTNEIGNvbnRleHQudHJhbnMu dXNlcgotICAgIGVtYWlsID0zRCB1c2VyIGFuZCB1c2VyLmVtYWlsCi0gICAgcmV0dXJuICJhbHBo YSIgbm90IGluIHZlcnNpb24gb3IgZW1haWwgaW4gREVWRUxPUEVSUwotCi0KLWRlZiBwZXJfaG9z dF90b29sX3NlY3Rpb25zKCBjb250ZXh0LCBzZWN0aW9uICk6Ci0gICAgIiIiCi0gICAgVGhpcyB0 b29sIHNlY3Rpb24gZmlsdGVyIHJlc3VsdHMgaW4gZGlmZmVyZW50IHNlY3Rpb25zIGJlaW5nIGRp c3BsYXkgYj0KYXNlZCBvbgotICAgIHRoZSBVUkwgdGhlIHVzZXIgaXMgbWFraW5nIHRoZSByZXF1 ZXN0IHRvLiBUaGlzIGNvdWxkIGFsbG93IGEgc2luZ2xlIEc9CmFsYXh5IGluc3RhbmNlCi0gICAg dG8gc2VlbSBsaWtlIHNldmVyYWwgZGlmZmVyZW50IGluc3RhbmNlcyBob3N0aW5nIGRpZmZlcmVu dCB0b29scyBiYXNlZD0KIG9uIHRoZSBVUkwgdXNlZAotICAgIHRvIGFjY2VzcyB0aGUgR2FseHku IFRoaXMgY2FuIGJlIGVuYWJsZWQgYnkgcmVuYW1pbmcgdGhpcyBmaWxlIHRvIGV4YW09CnBsZXMu cHkgYW5kIGFkZGluZwotICAgIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGBgYXBwOm1haW5gYCBzZWN0 aW9uIG9mIGBgZ2FsYXh5LmluaWBgOgotCi0gICAgICAgIHRvb2xfc2VjdGlvbl9maWx0ZXJzID0z RCBleGFtcGxlczpwZXJfaG9zdF90b29sX3NlY3Rpb25zCi0gICAgIiIiCi0gICAgaG9zdCA9M0Qg Y29udGV4dC50cmFucy5yZXF1ZXN0Lmhvc3QKLSAgICAjIENvcmUgdG9vbHMgdXNlZCBieSBhbGwg dmlydHVhbCBob3N0cy4KLSAgICB2YWxpZF9zZWN0aW9ucyA9M0QgWyAiZ2V0ZXh0IiwgInRleHR1 dGlsIiwgImZpbHRlciIgXQotICAgIGlmICJuZ3MuZ2FsYXh5LmV4YW1wbGUuY29tIiBpbiBob3N0 OgotICAgICAgICB2YWxpZF9zZWN0aW9ucyArPTNEIFsgIm5ncyIgXQotICAgIGVsaWYgIm1pY3Jv YXJyYXkuZ2FsYXh5LmV4YW1wbGUuY29tIiBpbiBob3N0OgotICAgICAgICB2YWxpZF9zZWN0aW9u cyArPTNEIFsgIm1pY3JvYXJyYXkiIF0KLSAgICBlbGlmICJwcm90ZW9taWNzLmdhbGF4eS5leGFt cGxlLmNvbSIgaW4gaG9zdDoKLSAgICAgICAgdmFsaWRfc2VjdGlvbnMgKz0zRCBbICJwcm90ZW9t aWNzIiBdCi0gICAgcmV0dXJuIHNlY3Rpb24uaWQgaW4gdmFsaWRfc2VjdGlvbnMKLQoKZGlmZiAt ciBlYjIxMGNjYzZkNzY1NDdlY2E2OWEzZjQ5ZGJkOGRiMGE0NWQ1YTg4IC1yIGU2MzM4OGZkNmNi ZjM0M2E3YjAzNDk2PQoxZDEzOWYxNGFkMGRjNjMyNCBsaWIvZ2FsYXh5L3Rvb2xzL2ZpbHRlcnMv ZXhhbXBsZXMucHkuc2FtcGxlCi0tLSBhL2xpYi9nYWxheHkvdG9vbHMvZmlsdGVycy9leGFtcGxl cy5weS5zYW1wbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi1pbXBvcnQgbG9nZ2lu ZwotbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQotCi0KLWRlZiByZXN0cmlj dF91cGxvYWRfdG9fYWRtaW5zKCBjb250ZXh0LCB0b29sICk6Ci0gICAgIiIiCi0gICAgVGhpcyB0 b29sIGZpbHRlciB3aWxsIGhpZGUgdGhlIHVwbG9hZCB0b29sIGZyb20gYWxsIHVzZXJzIGV4Y2Vw dCBhZG1pbgotICAgIHVzZXJzLiBUaGlzIGNhbiBiZSBlbmFibGVkIGJ5IHJlbmFtaW5nIHRoaXMg ZmlsZSB0byBleGFtcGxlcy5weSBhbmQgYWQ9CmRpbmcKLSAgICB0aGUgZm9sbG93aW5nIHRvIHRo ZSBgYGFwcDptYWluYGAgc2VjdGlvbiBvZiBgYGdhbGF4eS5pbmlgYDoKLQotICAgICAgICB0b29s X2ZpbHRlcnMgPTNEIGV4YW1wbGVzOnJlc3RyaWN0X3VwbG9hZF90b19hZG1pbnMKLSAgICAiIiIK LSAgICBpZiB0b29sLm5hbWUgPTNEPTNEICJVcGxvYWQgRmlsZSI6Ci0gICAgICAgIHJldHVybiBj b250ZXh0LnRyYW5zLnVzZXJfaXNfYWRtaW4oKQotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIGRp c2FibGVfZ2F0ayggY29udGV4dCwgdG9vbCApOgotICAgICIiIgotICAgIFRoaXMgdG9vbCBmaWx0 ZXIgd2lsbCBkaXNhYmxlIGFsbCBnYXRrIHRvb2xzIHdoZW4gZW5hYmxlZC4gVGhpcyBjYW4gYmUK LSAgICBlbmFibGVkIGJ5IHJlbmFtaW5nIHRoaXMgZmlsZSB0byBleGFtcGxlcy5weSBhbmQgYWRk aW5nIHRoZSBmb2xsb3dpbmcgPQp0byB0aGUKLSAgICAgYGBhcHA6bWFpbmBgIHNlY3Rpb24gb2Yg YGBnYWxheHkuaW5pYGA6Ci0KLSAgICAgICAgdG9vbF9maWx0ZXJzID0zRCBleGFtcGxlczpkaXNh YmxlX2dhdGsKLSAgICAiIiIKLSAgICByZXR1cm4gbm90IGFueSggWyByZXF1aXJlbWVudC5uYW1l ID0zRD0zRCAiZ2F0ayIgZm9yIHJlcXVpcmVtZW50IGluIHRvPQpvbC5yZXF1aXJlbWVudHMgXSAp Ci0KLQotZGVmIGV4cGxpY2l0X3VzZXJfbWFwcGluZyggY29udGV4dCwgc2VjdGlvbiApOgotICAg ICIiIgotICAgIFRoaXMgdG9vbCBzZWN0aW9uIGZpbHRlciB1c2VzIGFuIGV4cGxpY2l0IG1hcHBp bmcgdG8gZGVzY3JpYmUgd2hhdCB1c2U9CnJzIGNhbiB2aWV3Ci0gICAgd2hpY2ggdG9vbCBzZWN0 aW9ucy4gQW5vbnltb3VzIHVzZXJzIHdpbGwgb25seSBiZSBhYmxlIHRvIHZpZXcgdGhlICJHZT0K dCBEYXRhIgotICAgIHRvb2wgc2VjdGlvbiAod2l0aCBpZCBnZXRleHQpLiBUaGlzIGNhbiBiZSBl bmFibGVkIGJ5IHJlbmFtaW5nIHRoaXMgZmk9CmxlIHRvCi0gICAgZXhhbXBsZXMucHkgYW5kIGFk ZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZSBgYGFwcDptYWluYGAgc2VjdGlvbiBvZgotICAgIGBg Z2FsYXh5LmluaWBgOgotCi0gICAgICAgIHRvb2xfc2VjdGlvbl9maWx0ZXJzID0zRCBleGFtcGxl czpleHBsaWNpdF91c2VyX21hcHBpbmcKLSAgICAiIiIKLSAgICB1c2Vyc19zZWN0aW9ucyA9M0Qg ewotICAgICAgICBOb25lOiBbICJnZXRleHQiIF0sCi0gICAgICAgICJib2JAZXhhbXBsZS5jb20i OiBbICJnZXRleHQiLCAidGV4dHV0aWwiLCAiZmlsdGVyIiBdLAotICAgICAgICAibWFyeUBleGFt cGxlLmNvbSI6IFsgImdldGV4dCIsICJ0ZXh0dXRpbCIsICJmaWx0ZXIiLCAibmdzIiBdLAotICAg IH0KLSAgICB1c2VyID0zRCBjb250ZXh0LnRyYW5zLnVzZXIKLSAgICBlbWFpbCA9M0QgdXNlciBh bmQgdXNlci5lbWFpbAotICAgIHZhbGlkX3NlY3Rpb25zID0zRCB1c2Vyc19zZWN0aW9ucy5nZXQo IGVtYWlsLCBbXSApCi0gICAgcmV0dXJuIHNlY3Rpb24uaWQgaW4gdmFsaWRfc2VjdGlvbnMKLQot Ci1ERVZFTE9QRVJTID0zRCBbICJtYXJ5QGV4YW1wbGUuY29tIiBdCi0KLQotZGVmIHJlc3RyaWN0 X2RldmVsb3BtZW50X3Rvb2xzKCBjb250ZXh0LCB0b29sICk6Ci0gICAgIiIiCi0gICAgVGhpcyB0 b29sIGZpbHRlciB3aWxsIGRpc2FibGUgYWxsIHRvb2xzIHdpdGggdGhlIHN0cmluZyBhbHBoYSBh cHBlYXJpbj0KZyBpbgotICAgIHRoZSB2ZXJzaW9uIGZvciBhbGwgdXNlcnMgZXhjZXB0IHRob3Nl IGV4cGxpY2l0bHkgYXBwZWFyaW5nIGluIHRoZSBERVY9CkVMT1BFUlMgbGlzdAotICAgIGRlZmlu ZWQgYWJvdmUuIFRoaXMgY2FuIGJlIGVuYWJsZWQgYnkgcmVuYW1pbmcgdGhpcyBmaWxlIHRvIGV4 YW1wbGVzLnA9CnkgYW5kCi0gICAgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGBgYXBwOm1h aW5gYCBzZWN0aW9uIG9mIGBgZ2FsYXh5LmluaWBgOgotCi0gICAgICAgIHRvb2xfZmlsdGVycyA9 M0QgZXhhbXBsZXM6cmVzdHJpY3RfZGV2ZWxvcG1lbnRfdG9vbHMKLSAgICAiIiIKLSAgICB2ZXJz aW9uID0zRCB0b29sLnZlcnNpb24KLSAgICB1c2VyID0zRCBjb250ZXh0LnRyYW5zLnVzZXIKLSAg ICBlbWFpbCA9M0QgdXNlciBhbmQgdXNlci5lbWFpbAotICAgIHJldHVybiAiYWxwaGEiIG5vdCBp biB2ZXJzaW9uIG9yIGVtYWlsIGluIERFVkVMT1BFUlMKLQotCi1kZWYgcGVyX2hvc3RfdG9vbF9z ZWN0aW9ucyggY29udGV4dCwgc2VjdGlvbiApOgotICAgICIiIgotICAgIFRoaXMgdG9vbCBzZWN0 aW9uIGZpbHRlciByZXN1bHRzIGluIGRpZmZlcmVudCBzZWN0aW9ucyBiZWluZyBkaXNwbGF5IGI9 CmFzZWQgb24KLSAgICB0aGUgVVJMIHRoZSB1c2VyIGlzIG1ha2luZyB0aGUgcmVxdWVzdCB0by4g VGhpcyBjb3VsZCBhbGxvdyBhIHNpbmdsZSBHPQphbGF4eSBpbnN0YW5jZQotICAgIHRvIHNlZW0g bGlrZSBzZXZlcmFsIGRpZmZlcmVudCBpbnN0YW5jZXMgaG9zdGluZyBkaWZmZXJlbnQgdG9vbHMg YmFzZWQ9CiBvbiB0aGUgVVJMIHVzZWQKLSAgICB0byBhY2Nlc3MgdGhlIEdhbHh5LiBUaGlzIGNh biBiZSBlbmFibGVkIGJ5IHJlbmFtaW5nIHRoaXMgZmlsZSB0byBleGFtPQpwbGVzLnB5IGFuZCBh ZGRpbmcKLSAgICB0aGUgZm9sbG93aW5nIHRvIHRoZSBgYGFwcDptYWluYGAgc2VjdGlvbiBvZiBg YGdhbGF4eS5pbmlgYDoKLQotICAgICAgICB0b29sX3NlY3Rpb25fZmlsdGVycyA9M0QgZXhhbXBs ZXM6cGVyX2hvc3RfdG9vbF9zZWN0aW9ucwotICAgICIiIgotICAgIGhvc3QgPTNEIGNvbnRleHQu dHJhbnMucmVxdWVzdC5ob3N0Ci0gICAgIyBDb3JlIHRvb2xzIHVzZWQgYnkgYWxsIHZpcnR1YWwg aG9zdHMuCi0gICAgdmFsaWRfc2VjdGlvbnMgPTNEIFsgImdldGV4dCIsICJ0ZXh0dXRpbCIsICJm aWx0ZXIiIF0KLSAgICBpZiAibmdzLmdhbGF4eS5leGFtcGxlLmNvbSIgaW4gaG9zdDoKLSAgICAg ICAgdmFsaWRfc2VjdGlvbnMgKz0zRCBbICJuZ3MiIF0KLSAgICBlbGlmICJtaWNyb2FycmF5Lmdh bGF4eS5leGFtcGxlLmNvbSIgaW4gaG9zdDoKLSAgICAgICAgdmFsaWRfc2VjdGlvbnMgKz0zRCBb ICJtaWNyb2FycmF5IiBdCi0gICAgZWxpZiAicHJvdGVvbWljcy5nYWxheHkuZXhhbXBsZS5jb20i IGluIGhvc3Q6Ci0gICAgICAgIHZhbGlkX3NlY3Rpb25zICs9M0QgWyAicHJvdGVvbWljcyIgXQot ICAgIHJldHVybiBzZWN0aW9uLmlkIGluIHZhbGlkX3NlY3Rpb25zCgpUaGlzIGRpZmYgaXMgc28g YmlnIHRoYXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIuCgpodHRwczovL2Jp dGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNWQwZmNhNTkxMzk0LwpD aGFuZ2VzZXQ6ICAgNWQwZmNhNTkxMzk0ClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6 ICAgICAgICAyMDE1LTAxLTA2IDE0OjMxOjQ3KzAwOjAwClN1bW1hcnk6ICAgICBNZXJnZWQgZ2Fs YXh5L2dhbGF4eS1jZW50cmFsIGludG8gZGVmYXVsdApBZmZlY3RlZCAjOiAgNyBmaWxlcwoKZGlm ZiAtciBlNjMzODhmZDZjYmYzNDNhN2IwMzQ5NjFkMTM5ZjE0YWQwZGM2MzI0IC1yIDVkMGZjYTU5 MTM5NGQ3ZTdhYWFiYWRmPQpjZGVkOWY4MzdmZDQzNmVkMiBjb25maWcvZGF0YXR5cGVzX2NvbmYu eG1sLnNhbXBsZQotLS0gYS9jb25maWcvZGF0YXR5cGVzX2NvbmYueG1sLnNhbXBsZQorKysgYi9j b25maWcvZGF0YXR5cGVzX2NvbmYueG1sLnNhbXBsZQpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAg PHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmRhdGE6TmV3aWNrIi8+PHNuaWZmZXIg dHlwZT0zRCJnYWxheD0KeS5kYXRhdHlwZXMuZGF0YTpOZXh1cyIvPjxzbmlmZmVyIHR5cGU9M0Qi Z2FsYXh5LmRhdGF0eXBlcy50ZXh0Ok9ibyIvPgotICAgIDxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5 LmRhdGF0eXBlcy50ZXh0LkFyZmYiLz4KKyAgICA8c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRh dHlwZXMudGV4dDpBcmZmIi8+PHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuPQpkYXRhdHlwZXMudGV4 dDpJcHluYiIvPjxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0Okpzb24iLz48 c25pZmY9CmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5pbWFnZXM6SnBnIi8+CgpkaWZmIC1y IGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2MWQxMzlmMTRhZDBkYzYzMjQgLXIgNWQwZmNhNTkxMzk0 ZDdlN2FhYWJhZGY9CmNkZWQ5ZjgzN2ZkNDM2ZWQyIGxpYi9nYWxheHkvdG9vbHMvdG9vbGJveC9i YXNlLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvdG9vbGJveC9iYXNlLnB5CisrKyBiL2xpYi9n YWxheHkvdG9vbHMvdG9vbGJveC9iYXNlLnB5CkBAIC0yOTUsNyArMjk1LDEwIEBACiAgICAgICAg ICAgICAgICAgaW5zZXJ0ZWQgPTNEIFRydWUKICAgICAgICAgICAgIGlmIG5vdCBpbnNlcnRlZDoK ICAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSB0b29sJ3MgaW5zdGFsbGVkIHZlcnNpb25zLgot ICAgICAgICAgICAgICAgIGZvciB0b29sX2xpbmVhZ2VfdmVyc2lvbiBpbiB0b29sLmxpbmVhZ2Uu Z2V0X3ZlcnNpb25zKCk6CisgICAgICAgICAgICAgICAgdmVyc2lvbnMgPTNEIFtdCisgICAgICAg ICAgICAgICAgaWYgaGFzYXR0ciggdG9vbCwgJ2xpbmVhZ2UnICk6CisgICAgICAgICAgICAgICAg ICAgIHZlcnNpb25zID0zRCB0b29sLmxpbmVhZ2UuZ2V0X3ZlcnNpb25zKCkKKyAgICAgICAgICAg ICAgICBmb3IgdG9vbF9saW5lYWdlX3ZlcnNpb24gaW4gdmVyc2lvbnM6CiAgICAgICAgICAgICAg ICAgICAgIGxpbmVhZ2VfaWQgPTNEIHRvb2xfbGluZWFnZV92ZXJzaW9uLmlkCiAgICAgICAgICAg ICAgICAgICAgIGluZGV4ID0zRCBzZWxmLl9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWwuaW5kZXhfb2Zf dG9vbF9pZD0KKCBsaW5lYWdlX2lkICkKICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXg6Cgpk aWZmIC1yIGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2MWQxMzlmMTRhZDBkYzYzMjQgLXIgNWQwZmNh NTkxMzk0ZDdlN2FhYWJhZGY9CmNkZWQ5ZjgzN2ZkNDM2ZWQyIGxpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvYXBpL3dvcmtmbG93cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Fw aS93b3JrZmxvd3MucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvd29ya2Zs b3dzLnB5CkBAIC0zNzIsOSArMzcyLDkgQEAKICAgICAgICAgcmV0dXJuIGl0ZW0KPTIwCiAgICAg QGV4cG9zZV9hcGkKLSAgICBkZWYgd29ya2Zsb3dfcmVxdWVzdCggc2VsZiwgdHJhbnMsIHdvcmtm bG93X2lkLCBwYXlsb2FkLCAqKmt3ZCApOgorICAgIGRlZiBpbnZva2UoIHNlbGYsIHRyYW5zLCB3 b3JrZmxvd19pZCwgcGF5bG9hZCwgKiprd2QgKToKICAgICAgICAgIiIiCi0gICAgICAgIFBPU1Qg L2FwaS93b3JrZmxvd3Mve2VuY29kZWRfd29ya2Zsb3dfaWR9L3VzYWdlCisgICAgICAgIFBPU1Qg L2FwaS93b3JrZmxvd3Mve2VuY29kZWRfd29ya2Zsb3dfaWR9L2ludm9jYXRpb25zCj0yMAogICAg ICAgICBTY2hlZHVsZSB0aGUgd29ya2Zsb3cgc3BlY2lmaWVkIGJ5IGB3b3JrZmxvd19pZGAgdG8g cnVuLgogICAgICAgICAiIiIKQEAgLTM5OCwxMCArMzk4LDExIEBACiAgICAgICAgIHJldHVybiBz ZWxmLmVuY29kZV9hbGxfaWRzKCB0cmFucywgd29ya2Zsb3dfaW52b2NhdGlvbi50b19kaWN0KCks ID0KcmVjdXJzaXZlPTNEVHJ1ZSApCj0yMAogICAgIEBleHBvc2VfYXBpCi0gICAgZGVmIHdvcmtm bG93X3VzYWdlKHNlbGYsIHRyYW5zLCB3b3JrZmxvd19pZCwgKiprd2QpOgorICAgIGRlZiBpbmRl eF9pbnZvY2F0aW9ucyhzZWxmLCB0cmFucywgd29ya2Zsb3dfaWQsICoqa3dkKToKICAgICAgICAg IiIiCi0gICAgICAgIEdFVCAvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3VzYWdlCi0gICAg ICAgIEdldCB0aGUgbGlzdCBvZiB0aGUgd29ya2Zsb3cgdXNhZ2UKKyAgICAgICAgR0VUIC9hcGkv d29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vaW52b2NhdGlvbnMKKworICAgICAgICBHZXQgdGhlIGxp c3Qgb2YgdGhlIHdvcmtmbG93IGludm9jYXRpb25zCj0yMAogICAgICAgICA6cGFyYW0gIHdvcmtm bG93X2lkOiAgICAgIHRoZSB3b3JrZmxvdyBpZCAocmVxdWlyZWQpCiAgICAgICAgIDp0eXBlICAg d29ya2Zsb3dfaWQ6ICAgICAgc3RyCkBAIC00MTYsNTMgKzQxNyw1MyBAQAogICAgICAgICByZXR1 cm4gb3V0Cj0yMAogICAgIEBleHBvc2VfYXBpCi0gICAgZGVmIHdvcmtmbG93X3VzYWdlX2NvbnRl bnRzKHNlbGYsIHRyYW5zLCB3b3JrZmxvd19pZCwgdXNhZ2VfaWQsICoqa3dkKToKKyAgICBkZWYg c2hvd19pbnZvY2F0aW9uKHNlbGYsIHRyYW5zLCB3b3JrZmxvd19pZCwgaW52b2NhdGlvbl9pZCwg Kiprd2QpOgogICAgICAgICAiIiIKLSAgICAgICAgR0VUIC9hcGkvd29ya2Zsb3dzL3t3b3JrZmxv d19pZH0vdXNhZ2Uve3VzYWdlX2lkfQotICAgICAgICBHZXQgZGV0YWlsZWQgZGVzY3JpcHRpb24g b2Ygd29ya2Zsb3cgdXNhZ2UKKyAgICAgICAgR0VUIC9hcGkvd29ya2Zsb3dzL3t3b3JrZmxvd19p ZH0vaW52b2NhdGlvbi97aW52b2NhdGlvbl9pZH0KKyAgICAgICAgR2V0IGRldGFpbGVkIGRlc2Ny aXB0aW9uIG9mIHdvcmtmbG93IGludm9jYXRpb24KPTIwCi0gICAgICAgIDpwYXJhbSAgd29ya2Zs b3dfaWQ6ICAgICAgdGhlIHdvcmtmbG93IGlkIChyZXF1aXJlZCkKLSAgICAgICAgOnR5cGUgICB3 b3JrZmxvd19pZDogICAgICBzdHIKKyAgICAgICAgOnBhcmFtICB3b3JrZmxvd19pZDogICAgICAg IHRoZSB3b3JrZmxvdyBpZCAocmVxdWlyZWQpCisgICAgICAgIDp0eXBlICAgd29ya2Zsb3dfaWQ6 ICAgICAgICBzdHIKPTIwCi0gICAgICAgIDpwYXJhbSAgdXNhZ2VfaWQ6ICAgICAgdGhlIHVzYWdl IGlkIChyZXF1aXJlZCkKLSAgICAgICAgOnR5cGUgICB1c2FnZV9pZDogICAgICBzdHIKKyAgICAg ICAgOnBhcmFtICBpbnZvY2F0aW9uX2lkOiAgICAgIHRoZSBpbnZvY2F0aW9uIGlkIChyZXF1aXJl ZCkKKyAgICAgICAgOnR5cGUgICBpbnZvY2F0aW9uX2lkOiAgICAgIHN0cgo9MjAKICAgICAgICAg OnJhaXNlczogZXhjZXB0aW9ucy5NZXNzYWdlRXhjZXB0aW9uLCBleGNlcHRpb25zLk9iamVjdE5v dEZvdW5kCiAgICAgICAgICIiIgotICAgICAgICBkZWNvZGVkX3dvcmtmbG93X2ludm9jYXRpb25f aWQgPTNEIHNlbGYuX19kZWNvZGVfaWQoIHRyYW5zLCB1c2FnZV89CmlkICkKKyAgICAgICAgZGVj b2RlZF93b3JrZmxvd19pbnZvY2F0aW9uX2lkID0zRCBzZWxmLl9fZGVjb2RlX2lkKCB0cmFucywg aW52b2NhPQp0aW9uX2lkICkKICAgICAgICAgd29ya2Zsb3dfaW52b2NhdGlvbiA9M0Qgc2VsZi53 b3JrZmxvd19tYW5hZ2VyLmdldF9pbnZvY2F0aW9uKCB0cmFuPQpzLCBkZWNvZGVkX3dvcmtmbG93 X2ludm9jYXRpb25faWQgKQogICAgICAgICBpZiB3b3JrZmxvd19pbnZvY2F0aW9uOgogICAgICAg ICAgICAgcmV0dXJuIHNlbGYuX19lbmNvZGVfaW52b2NhdGlvbiggdHJhbnMsIHdvcmtmbG93X2lu dm9jYXRpb24gKQogICAgICAgICByZXR1cm4gTm9uZQo9MjAKICAgICBAZXhwb3NlX2FwaQotICAg IGRlZiBjYW5jZWxfd29ya2Zsb3dfaW52b2NhdGlvbihzZWxmLCB0cmFucywgd29ya2Zsb3dfaWQs IHVzYWdlX2lkLCAqKms9CndkKToKKyAgICBkZWYgY2FuY2VsX2ludm9jYXRpb24oc2VsZiwgdHJh bnMsIHdvcmtmbG93X2lkLCBpbnZvY2F0aW9uX2lkLCAqKmt3ZCk6CiAgICAgICAgICIiIgotICAg ICAgICBERUxFVEUgL2FwaS93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS91c2FnZS97dXNhZ2VfaWR9 CisgICAgICAgIERFTEVURSAvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2ludm9jYXRpb24v e2ludm9jYXRpb25faWR9CiAgICAgICAgIENhbmNlbCB0aGUgc3BlY2lmaWVkIHdvcmtmbG93IGlu dm9jYXRpb24uCj0yMAogICAgICAgICA6cGFyYW0gIHdvcmtmbG93X2lkOiAgICAgIHRoZSB3b3Jr ZmxvdyBpZCAocmVxdWlyZWQpCiAgICAgICAgIDp0eXBlICAgd29ya2Zsb3dfaWQ6ICAgICAgc3Ry Cj0yMAotICAgICAgICA6cGFyYW0gIHVzYWdlX2lkOiAgICAgIHRoZSB1c2FnZSBpZCAocmVxdWly ZWQpCi0gICAgICAgIDp0eXBlICAgdXNhZ2VfaWQ6ICAgICAgc3RyCisgICAgICAgIDpwYXJhbSAg aW52b2NhdGlvbl9pZDogICAgICB0aGUgdXNhZ2UgaWQgKHJlcXVpcmVkKQorICAgICAgICA6dHlw ZSAgIGludm9jYXRpb25faWQ6ICAgICAgc3RyCj0yMAogICAgICAgICA6cmFpc2VzOiBleGNlcHRp b25zLk1lc3NhZ2VFeGNlcHRpb24sIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQKICAgICAgICAg IiIiCi0gICAgICAgIGRlY29kZWRfd29ya2Zsb3dfaW52b2NhdGlvbl9pZCA9M0Qgc2VsZi5fX2Rl Y29kZV9pZCggdHJhbnMsIHVzYWdlXz0KaWQgKQorICAgICAgICBkZWNvZGVkX3dvcmtmbG93X2lu dm9jYXRpb25faWQgPTNEIHNlbGYuX19kZWNvZGVfaWQoIHRyYW5zLCBpbnZvY2E9CnRpb25faWQg KQogICAgICAgICB3b3JrZmxvd19pbnZvY2F0aW9uID0zRCBzZWxmLndvcmtmbG93X21hbmFnZXIu Y2FuY2VsX2ludm9jYXRpb24oIHQ9CnJhbnMsIGRlY29kZWRfd29ya2Zsb3dfaW52b2NhdGlvbl9p ZCApCiAgICAgICAgIHJldHVybiBzZWxmLl9fZW5jb2RlX2ludm9jYXRpb24oIHRyYW5zLCB3b3Jr Zmxvd19pbnZvY2F0aW9uICkKPTIwCiAgICAgQGV4cG9zZV9hcGkKLSAgICBkZWYgd29ya2Zsb3df aW52b2NhdGlvbl9zdGVwKHNlbGYsIHRyYW5zLCB3b3JrZmxvd19pZCwgdXNhZ2VfaWQsIHN0ZXBf PQppZCwgKiprd2QpOgorICAgIGRlZiBpbnZvY2F0aW9uX3N0ZXAoc2VsZiwgdHJhbnMsIHdvcmtm bG93X2lkLCBpbnZvY2F0aW9uX2lkLCBzdGVwX2lkLCA9Cioqa3dkKToKICAgICAgICAgIiIiCi0g ICAgICAgIEdFVCAvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3VzYWdlL3t1c2FnZV9pZH0v c3RlcHMve3N0ZXBfaWR9CisgICAgICAgIEdFVCAvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9 L2ludm9jYXRpb24ve2ludm9jYXRpb25faWR9L3N0ZXBzLz0Ke3N0ZXBfaWR9Cj0yMAotICAgICAg ICA6cGFyYW0gIHdvcmtmbG93X2lkOiAgICAgIHRoZSB3b3JrZmxvdyBpZCAocmVxdWlyZWQpCi0g ICAgICAgIDp0eXBlICAgd29ya2Zsb3dfaWQ6ICAgICAgc3RyCisgICAgICAgIDpwYXJhbSAgd29y a2Zsb3dfaWQ6ICAgICAgICB0aGUgd29ya2Zsb3cgaWQgKHJlcXVpcmVkKQorICAgICAgICA6dHlw ZSAgIHdvcmtmbG93X2lkOiAgICAgICAgc3RyCj0yMAotICAgICAgICA6cGFyYW0gIHVzYWdlX2lk OiAgICAgIHRoZSB1c2FnZSBpZCAocmVxdWlyZWQpCi0gICAgICAgIDp0eXBlICAgdXNhZ2VfaWQ6 ICAgICAgc3RyCisgICAgICAgIDpwYXJhbSAgaW52b2NhdGlvbl9pZDogICAgICB0aGUgaW52b2Nh dGlvbiBpZCAocmVxdWlyZWQpCisgICAgICAgIDp0eXBlICAgaW52b2NhdGlvbl9pZDogICAgICBz dHIKPTIwCiAgICAgICAgIDpwYXJhbSAgc3RlcF9pZDogICAgICBlbmNvZGVkIGlkIG9mIHRoZSBX b3JrZmxvd0ludm9jYXRpb25TdGVwIChyZT0KcXVpcmVkKQogICAgICAgICA6dHlwZSAgIHN0ZXBf aWQ6ICAgICAgc3RyCkBAIC00ODAsOSArNDgxLDkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX19l bmNvZGVfaW52b2NhdGlvbl9zdGVwKCB0cmFucywgaW52b2NhdGlvbl9zdGVwICkKPTIwCiAgICAg QGV4cG9zZV9hcGkKLSAgICBkZWYgd29ya2Zsb3dfaW52b2NhdGlvbl9zdGVwX3VwZGF0ZShzZWxm LCB0cmFucywgd29ya2Zsb3dfaWQsIHVzYWdlX2lkPQosIHN0ZXBfaWQsIHBheWxvYWQsICoqa3dk KToKKyAgICBkZWYgdXBkYXRlX2ludm9jYXRpb25fc3RlcChzZWxmLCB0cmFucywgd29ya2Zsb3df aWQsIGludm9jYXRpb25faWQsIHN0PQplcF9pZCwgcGF5bG9hZCwgKiprd2QpOgogICAgICAgICAi IiIKLSAgICAgICAgUFVUIC9hcGkvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdXNhZ2Uve3VzYWdl X2lkfS9zdGVwcy97c3RlcF9pZH0KKyAgICAgICAgUFVUIC9hcGkvd29ya2Zsb3dzL3t3b3JrZmxv d19pZH0vaW52b2NhdGlvbi97aW52b2NhdGlvbl9pZH0vc3RlcHMvPQp7c3RlcF9pZH0KICAgICAg ICAgVXBkYXRlIHN0YXRlIG9mIHJ1bm5pbmcgd29ya2Zsb3cgc3RlcCBpbnZvY2F0aW9uIC0gc3Rp bGwgdmVyeSBuZWJ1PQpsb3VzCiAgICAgICAgIGJ1dCB0aGlzIHdvdWxkIGJlIGZvciBzdHVmZiBs aWtlIGNvbmZpcm1pbmcgcGF1c2VkIHN0ZXBzIGNhbiBwcm9jZT0KZWQKICAgICAgICAgZXRjLi4u LgpAQCAtNDkxLDggKzQ5Miw4IEBACiAgICAgICAgIDpwYXJhbSAgd29ya2Zsb3dfaWQ6ICAgICAg dGhlIHdvcmtmbG93IGlkIChyZXF1aXJlZCkKICAgICAgICAgOnR5cGUgICB3b3JrZmxvd19pZDog ICAgICBzdHIKPTIwCi0gICAgICAgIDpwYXJhbSAgdXNhZ2VfaWQ6ICAgICAgdGhlIHVzYWdlIGlk IChyZXF1aXJlZCkKLSAgICAgICAgOnR5cGUgICB1c2FnZV9pZDogICAgICBzdHIKKyAgICAgICAg OnBhcmFtICBpbnZvY2F0aW9uX2lkOiAgICAgIHRoZSB1c2FnZSBpZCAocmVxdWlyZWQpCisgICAg ICAgIDp0eXBlICAgaW52b2NhdGlvbl9pZDogICAgICBzdHIKPTIwCiAgICAgICAgIDpwYXJhbSAg c3RlcF9pZDogICAgICBlbmNvZGVkIGlkIG9mIHRoZSBXb3JrZmxvd0ludm9jYXRpb25TdGVwIChy ZT0KcXVpcmVkKQogICAgICAgICA6dHlwZSAgIHN0ZXBfaWQ6ICAgICAgc3RyCgpkaWZmIC1yIGU2 MzM4OGZkNmNiZjM0M2E3YjAzNDk2MWQxMzlmMTRhZDBkYzYzMjQgLXIgNWQwZmNhNTkxMzk0ZDdl N2FhYWJhZGY9CmNkZWQ5ZjgzN2ZkNDM2ZWQyIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYnVp bGRhcHAucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9idWlsZGFwcC5weQorKysg Yi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2J1aWxkYXBwLnB5CkBAIC0yMjcsMTQgKzIyNyw2 MiBAQAogICAgIHdlYmFwcC5tYXBwZXIuY29ubmVjdCggJ3dvcmtmbG93X2RpY3QnLCAnL2FwaS93 b3JrZmxvd3MvZG93bmxvYWQve3dvcms9CmZsb3dfaWR9JywgY29udHJvbGxlcj0zRCd3b3JrZmxv d3MnLCBhY3Rpb249M0Qnd29ya2Zsb3dfZGljdCcsIGNvbmRpdGlvbnM9Cj0zRGRpY3QoIG1ldGhv ZD0zRFsnR0VUJ10gKSApCiAgICAgIyBEZXByZWNhdGVkIGluIGZhdm9yIG9mIFBPU1QgL2FwaS93 b3JrZmxvd3Mgd2l0aCBzaGFyZWRfd29ya2Zsb3dfaWQgaT0KbiBwYXlsb2FkLgogICAgIHdlYmFw cC5tYXBwZXIuY29ubmVjdCggJ2ltcG9ydF9zaGFyZWRfd29ya2Zsb3dfZGVwcmVjYXRlZCcsICcv YXBpL3dvcms9CmZsb3dzL2ltcG9ydCcsIGNvbnRyb2xsZXI9M0Qnd29ya2Zsb3dzJywgYWN0aW9u PTNEJ2ltcG9ydF9zaGFyZWRfd29ya2Zsb3dfZD0KZXByZWNhdGVkJywgY29uZGl0aW9ucz0zRGRp Y3QoIG1ldGhvZD0zRFsnUE9TVCddICkgKQotICAgIHdlYmFwcC5tYXBwZXIuY29ubmVjdCggJ3dv cmtmbG93X3VzYWdlJywgJy9hcGkvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH09Ci91c2FnZScsIGNv bnRyb2xsZXI9M0Qnd29ya2Zsb3dzJywgYWN0aW9uPTNEJ3dvcmtmbG93X3VzYWdlJywgY29uZGl0 aW9ucz0zRD0KZGljdChtZXRob2Q9M0RbJ0dFVCddKSkKLSAgICB3ZWJhcHAubWFwcGVyLmNvbm5l Y3QoICd3b3JrZmxvd191c2FnZV9jb250ZW50cycsICcvYXBpL3dvcmtmbG93cy97d29yPQprZmxv d19pZH0vdXNhZ2Uve3VzYWdlX2lkfScsIGNvbnRyb2xsZXI9M0Qnd29ya2Zsb3dzJywgYWN0aW9u PTNEJ3dvcmtmbG93X3U9CnNhZ2VfY29udGVudHMnLCBjb25kaXRpb25zPTNEZGljdChtZXRob2Q9 M0RbJ0dFVCddKSkKLSAgICB3ZWJhcHAubWFwcGVyLmNvbm5lY3QoICdjYW5jZWxfd29ya2Zsb3df aW52b2NhdGlvbicsICcvYXBpL3dvcmtmbG93cy97PQp3b3JrZmxvd19pZH0vdXNhZ2Uve3VzYWdl X2lkfScsIGNvbnRyb2xsZXI9M0Qnd29ya2Zsb3dzJywgYWN0aW9uPTNEJ2NhbmNlbF89Cndvcmtm bG93X2ludm9jYXRpb24nLCBjb25kaXRpb25zPTNEZGljdChtZXRob2Q9M0RbJ0RFTEVURSddKSkK PTIwCi0gICAgd2ViYXBwLm1hcHBlci5jb25uZWN0KCAnd29ya2Zsb3dfaW52b2NhdGlvbl9zdGVw JywgJy9hcGkvd29ya2Zsb3dzL3t3bz0KcmtmbG93X2lkfS91c2FnZS97dXNhZ2VfaWR9L3N0ZXBz L3tzdGVwX2lkfScsIGNvbnRyb2xsZXI9M0Qnd29ya2Zsb3dzJywgYWN0PQppb249M0Qnd29ya2Zs b3dfaW52b2NhdGlvbl9zdGVwJywgY29uZGl0aW9ucz0zRGRpY3QobWV0aG9kPTNEWydHRVQnXSkp Ci0gICAgd2ViYXBwLm1hcHBlci5jb25uZWN0KCAnd29ya2Zsb3dfaW52b2NhdGlvbl9zdGVwX3Vw ZGF0ZScsICcvYXBpL3dvcmtmbD0Kb3dzL3t3b3JrZmxvd19pZH0vdXNhZ2Uve3VzYWdlX2lkfS9z dGVwcy97c3RlcF9pZH0nLCBjb250cm9sbGVyPTNEJ3dvcmtmbG93PQpzJywgYWN0aW9uPTNEJ3dv cmtmbG93X2ludm9jYXRpb25fc3RlcF91cGRhdGUnLCBjb25kaXRpb25zPTNEZGljdChtZXRob2Q9 M0Q9ClsnUFVUJ10pKQorICAgICMgQVBJIHJlZmVycyB0byB1c2FnZXMgYW5kIGludm9jYXRpb25z IC0gdGhlc2UgbWVhbiB0aGUgc2FtZSB0aGluZyBidXQ9CiB0aGUKKyAgICAjIHVzYWdlIHJvdXRl cyBzaG91bGQgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLgorICAgIGludm9rZV9uYW1lcyA9M0Qg eworICAgICAgICAiaW52b2NhdGlvbnMiOiAiIiwKKyAgICAgICAgInVzYWdlIjogIl9kZXByZWNh dGVkIiwKKyAgICB9CisgICAgZm9yIG5vdW4sIHN1ZmZpeCBpbiBpbnZva2VfbmFtZXMuaXRlcml0 ZW1zKCk6CisgICAgICAgIG5hbWUgPTNEICIlcyVzIiAlIChub3VuLCBzdWZmaXgpCisgICAgICAg IHdlYmFwcC5tYXBwZXIuY29ubmVjdCgKKyAgICAgICAgICAgICdsaXN0X3dvcmtmbG93XyVzJyAl IG5hbWUsCisgICAgICAgICAgICAnL2FwaS93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS8lcycgJSBu b3VuLAorICAgICAgICAgICAgY29udHJvbGxlcj0zRCd3b3JrZmxvd3MnLAorICAgICAgICAgICAg YWN0aW9uPTNEJ2luZGV4X2ludm9jYXRpb25zJywKKyAgICAgICAgICAgIGNvbmRpdGlvbnM9M0Rk aWN0KG1ldGhvZD0zRFsnR0VUJ10pCisgICAgICAgICkKPTIwCi0gICAgd2ViYXBwLm1hcHBlci5j b25uZWN0KCAnd29ya2Zsb3dfcmVxdWVzdCcsICcvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaT0K ZH0vdXNhZ2UnLCBjb250cm9sbGVyPTNEJ3dvcmtmbG93cycsIGFjdGlvbj0zRCd3b3JrZmxvd19y ZXF1ZXN0JywgY29uZGl0aW9uPQpzPTNEZGljdCggbWV0aG9kPTNEWydQT1NUJ10gKSApCisgICAg ICAgIHdlYmFwcC5tYXBwZXIuY29ubmVjdCgKKyAgICAgICAgICAgICd3b3JrZmxvd18lc19jb250 ZW50cycgJSBuYW1lLAorICAgICAgICAgICAgJy9hcGkvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0v JXMve2ludm9jYXRpb25faWR9JyAlIG5vdW4sCisgICAgICAgICAgICBjb250cm9sbGVyPTNEJ3dv cmtmbG93cycsCisgICAgICAgICAgICBhY3Rpb249M0Qnc2hvd19pbnZvY2F0aW9uJywKKyAgICAg ICAgICAgIGNvbmRpdGlvbnM9M0RkaWN0KG1ldGhvZD0zRFsnR0VUJ10pCisgICAgICAgICkKKwor ICAgICAgICB3ZWJhcHAubWFwcGVyLmNvbm5lY3QoCisgICAgICAgICAgICAnY2FuY2VsX3dvcmtm bG93XyVzJyAlIG5hbWUsCisgICAgICAgICAgICAnL2FwaS93b3JrZmxvd3Mve3dvcmtmbG93X2lk fS8lcy97aW52b2NhdGlvbl9pZH0nICUgbm91biwKKyAgICAgICAgICAgIGNvbnRyb2xsZXI9M0Qn d29ya2Zsb3dzJywKKyAgICAgICAgICAgIGFjdGlvbj0zRCdjYW5jZWxfaW52b2NhdGlvbicsCisg ICAgICAgICAgICBjb25kaXRpb25zPTNEZGljdChtZXRob2Q9M0RbJ0RFTEVURSddKQorICAgICAg ICApCisKKyAgICAgICAgd2ViYXBwLm1hcHBlci5jb25uZWN0KAorICAgICAgICAgICAgJ3dvcmtm bG93XyVzX3N0ZXAnICUgbmFtZSwKKyAgICAgICAgICAgICcvYXBpL3dvcmtmbG93cy97d29ya2Zs b3dfaWR9LyVzL3tpbnZvY2F0aW9uX2lkfS9zdGVwcy97c3RlcF9pPQpkfScgJSBub3VuLAorICAg ICAgICAgICAgY29udHJvbGxlcj0zRCd3b3JrZmxvd3MnLAorICAgICAgICAgICAgYWN0aW9uPTNE J2ludm9jYXRpb25fc3RlcCcsCisgICAgICAgICAgICBjb25kaXRpb25zPTNEZGljdChtZXRob2Q9 M0RbJ0dFVCddKQorICAgICAgICApCisKKyAgICAgICAgd2ViYXBwLm1hcHBlci5jb25uZWN0KAor ICAgICAgICAgICAgJ3dvcmtmbG93XyVzX3N0ZXBfdXBkYXRlJyAlIG5hbWUsCisgICAgICAgICAg ICAnL2FwaS93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS8lcy97aW52b2NhdGlvbl9pZH0vc3RlcHMv e3N0ZXBfaT0KZH0nICUgbm91biwKKyAgICAgICAgICAgIGNvbnRyb2xsZXI9M0Qnd29ya2Zsb3dz JywKKyAgICAgICAgICAgIGFjdGlvbj0zRCd1cGRhdGVfaW52b2NhdGlvbl9zdGVwJywKKyAgICAg ICAgICAgIGNvbmRpdGlvbnM9M0RkaWN0KG1ldGhvZD0zRFsnUFVUJ10pCisgICAgICAgICkKKwor ICAgICAgICB3ZWJhcHAubWFwcGVyLmNvbm5lY3QoCisgICAgICAgICAgICAnd29ya2Zsb3dfJXMn ICUgbmFtZSwKKyAgICAgICAgICAgICcvYXBpL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9LyVzJyAl IG5vdW4sCisgICAgICAgICAgICBjb250cm9sbGVyPTNEJ3dvcmtmbG93cycsCisgICAgICAgICAg ICBhY3Rpb249M0QnaW52b2tlJywKKyAgICAgICAgICAgIGNvbmRpdGlvbnM9M0RkaWN0KCBtZXRo b2Q9M0RbJ1BPU1QnXSApCisgICAgICAgICkKICAgICAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNECiAgICAgIyA9M0Q9M0Q9M0Q9M0Q9M0QgQVVUSEVOVElDQVRFIEFQSSA9M0Q9M0Q9M0Q9 M0Q9M0QKICAgICAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNECgpkaWZmIC1yIGU2MzM4 OGZkNmNiZjM0M2E3YjAzNDk2MWQxMzlmMTRhZDBkYzYzMjQgLXIgNWQwZmNhNTkxMzk0ZDdlN2Fh YWJhZGY9CmNkZWQ5ZjgzN2ZkNDM2ZWQyIGxpYi9nYWxheHkvd29ya2Zsb3cvbW9kdWxlcy5weQot LS0gYS9saWIvZ2FsYXh5L3dvcmtmbG93L21vZHVsZXMucHkKKysrIGIvbGliL2dhbGF4eS93b3Jr Zmxvdy9tb2R1bGVzLnB5CkBAIC0yOSw2ICsyOSwxMyBAQAo9MjAKIGxvZyA9M0QgbG9nZ2luZy5n ZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCisjIEtleSBpbnRvIFRvb2wgc3RhdGUgdG8gZGVzY3Jp YmUgaW52b2NhdGlvbi1zcGVjaWZpYyBydW50aW1lIHByb3BlcnRpZXMuCitSVU5USU1FX1NURVBf TUVUQV9TVEFURV9LRVkgPTNEICJfX1NURVBfTUVUQV9TVEFURV9fIgorIyBLZXkgaW50byBzdGVw IHJ1bnRpbWUgc3RhdGUgZGljdCBkZXNjcmliaW5nIGludm9jYXRpb24tc3BlY2lmaWMgcG9zdCBq b2IKKyMgYWN0aW9ucyAoaS5lLiBQSkEgc3BlY2lmaWVkIGF0IHJ1bnRpbWUgb24gdG9wIG9mIHRo ZSB3b3JrZmxvdy13aWRlIGRlZmluPQplZAorIyBvbmVzLgorUlVOVElNRV9QT1NUX0pPQl9BQ1RJ T05TX0tFWSA9M0QgIl9fUE9TVF9KT0JfQUNUSU9OU19fIgorCj0yMAogY2xhc3MgV29ya2Zsb3dN b2R1bGUoIG9iamVjdCApOgo9MjAKQEAgLTQ3Miw2ICs0NzksNyBAQAogICAgICAgICBzZWxmLnRv b2xfaWQgPTNEIHRvb2xfaWQKICAgICAgICAgc2VsZi50b29sID0zRCB0cmFucy5hcHAudG9vbGJv eC5nZXRfdG9vbCggdG9vbF9pZCwgdG9vbF92ZXJzaW9uPTNEPQp0b29sX3ZlcnNpb24gKQogICAg ICAgICBzZWxmLnBvc3Rfam9iX2FjdGlvbnMgPTNEIHt9CisgICAgICAgIHNlbGYucnVudGltZV9w b3N0X2pvYl9hY3Rpb25zID0zRCB7fQogICAgICAgICBzZWxmLndvcmtmbG93X291dHB1dHMgPTNE IFtdCiAgICAgICAgIHNlbGYuc3RhdGUgPTNEIE5vbmUKICAgICAgICAgc2VsZi52ZXJzaW9uX2No YW5nZXMgPTNEIFtdCkBAIC01NTYsNiArNTY0LDkgQEAKICAgICAgICAgc3RhdGUgPTNEIGdhbGF4 eS50b29scy5EZWZhdWx0VG9vbFN0YXRlKCkKICAgICAgICAgYXBwID0zRCBzZWxmLnRyYW5zLmFw cAogICAgICAgICBzdGF0ZS5kZWNvZGUoIHJ1bnRpbWVfc3RhdGUsIHNlbGYudG9vbCwgYXBwLCBz ZWN1cmU9M0RGYWxzZSApCisgICAgICAgIHN0YXRlX2RpY3QgPTNEIGxvYWRzKCBydW50aW1lX3N0 YXRlICkKKyAgICAgICAgaWYgUlVOVElNRV9TVEVQX01FVEFfU1RBVEVfS0VZIGluIHN0YXRlX2Rp Y3Q6CisgICAgICAgICAgICBzZWxmLl9fcmVzdG9yZV9zdGVwX21ldGFfcnVudGltZV9zdGF0ZSgg bG9hZHMoIHN0YXRlX2RpY3RbIFJVTj0KVElNRV9TVEVQX01FVEFfU1RBVEVfS0VZIF0gKSApCiAg ICAgICAgIHJldHVybiBzdGF0ZQo9MjAKICAgICBkZWYgbm9ybWFsaXplX3J1bnRpbWVfc3RhdGUo IHNlbGYsIHJ1bnRpbWVfc3RhdGUgKToKQEAgLTU3MiwxNiArNTgzLDE5IEBACiAgICAgICAgICAg ICBzdGVwLnRvb2xfaW5wdXRzID0zRCBOb25lCiAgICAgICAgIHN0ZXAudG9vbF9lcnJvcnMgPTNE IHNlbGYuZXJyb3JzCiAgICAgICAgIGZvciBrLCB2IGluIHNlbGYucG9zdF9qb2JfYWN0aW9ucy5p dGVyaXRlbXMoKToKLSAgICAgICAgICAgICMgTXVzdCBoYXZlIGFjdGlvbl90eXBlLCBzdGVwLiAg b3V0cHV0IGFuZCBhX2FyZ3MgYXJlIG9wdGlvbmFsLgotICAgICAgICAgICAgaWYgJ291dHB1dF9u YW1lJyBpbiB2OgotICAgICAgICAgICAgICAgIG91dHB1dF9uYW1lID0zRCB2WydvdXRwdXRfbmFt ZSddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dHB1dF9uYW1lID0zRCBO b25lCi0gICAgICAgICAgICBpZiAnYWN0aW9uX2FyZ3VtZW50cycgaW4gdjoKLSAgICAgICAgICAg ICAgICBhY3Rpb25fYXJndW1lbnRzID0zRCB2WydhY3Rpb25fYXJndW1lbnRzJ10KLSAgICAgICAg ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYWN0aW9uX2FyZ3VtZW50cyA9M0QgTm9uZQotICAg ICAgICAgICAgc2VsZi50cmFucy5zYV9zZXNzaW9uLmFkZChQb3N0Sm9iQWN0aW9uKHZbJ2FjdGlv bl90eXBlJ10sIHN0ZXA9Ciwgb3V0cHV0X25hbWUsIGFjdGlvbl9hcmd1bWVudHMpKQorICAgICAg ICAgICAgcGphID0zRCBzZWxmLl9fdG9fcGphKCBrLCB2LCBzdGVwICkKKyAgICAgICAgICAgIHNl bGYudHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHBqYSApCisKKyAgICBkZWYgX190b19wamEoIHNlbGYs IGtleSwgdmFsdWUsIHN0ZXAgKToKKyAgICAgICAgaWYgJ291dHB1dF9uYW1lJyBpbiB2YWx1ZToK KyAgICAgICAgICAgIG91dHB1dF9uYW1lID0zRCB2YWx1ZVsnb3V0cHV0X25hbWUnXQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X25hbWUgPTNEIE5vbmUKKyAgICAgICAgaWYgJ2Fj dGlvbl9hcmd1bWVudHMnIGluIHZhbHVlOgorICAgICAgICAgICAgYWN0aW9uX2FyZ3VtZW50cyA9 M0QgdmFsdWVbJ2FjdGlvbl9hcmd1bWVudHMnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg YWN0aW9uX2FyZ3VtZW50cyA9M0QgTm9uZQorICAgICAgICByZXR1cm4gUG9zdEpvYkFjdGlvbih2 YWx1ZVsnYWN0aW9uX3R5cGUnXSwgc3RlcCwgb3V0cHV0X25hbWUsIGFjdGk9Cm9uX2FyZ3VtZW50 cykKPTIwCiAgICAgZGVmIGdldF9uYW1lKCBzZWxmICk6CiAgICAgICAgIGlmIHNlbGYudG9vbDoK QEAgLTY3Nyw3ICs2OTEsOCBAQAogICAgICAgICAgICAgdG9vbD0zRHNlbGYudG9vbCwgdmFsdWVz PTNEc2VsZi5zdGF0ZS5pbnB1dHMsIGVycm9ycz0zRCggc2VsZi49CmVycm9ycyBvciB7fSApICkK PTIwCiAgICAgZGVmIGVuY29kZV9ydW50aW1lX3N0YXRlKCBzZWxmLCB0cmFucywgc3RhdGUgKToK LSAgICAgICAgcmV0dXJuIHN0YXRlLmVuY29kZSggc2VsZi50b29sLCBzZWxmLnRyYW5zLmFwcCAp CisgICAgICAgIGVuY29kZWQgPTNEIHN0YXRlLmVuY29kZSggc2VsZi50b29sLCBzZWxmLnRyYW5z LmFwcCApCisgICAgICAgIHJldHVybiBlbmNvZGVkCj0yMAogICAgIGRlZiB1cGRhdGVfc3RhdGUo IHNlbGYsIGluY29taW5nICk6CiAgICAgICAgICMgQnVpbGQgYSBjYWxsYmFjayB0aGF0IGhhbmRs ZXMgc2V0dGluZyBhbiBpbnB1dCB0byBiZSByZXF1aXJlZCBhdApAQCAtNzEyLDI2ICs3MjcsNDYg QEAKICAgICAgICAgc2VsZi5lcnJvcnMgPTNEIGVycm9ycyBvciBOb25lCj0yMAogICAgIGRlZiBj aGVja19hbmRfdXBkYXRlX3N0YXRlKCBzZWxmICk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRvb2wu Y2hlY2tfYW5kX3VwZGF0ZV9wYXJhbV92YWx1ZXMoIHNlbGYuc3RhdGUuaW5wdXRzLD0KIHNlbGYu dHJhbnMsIGFsbG93X3dvcmtmbG93X3BhcmFtZXRlcnM9M0RUcnVlICkKKyAgICAgICAgaW5wdXRz ID0zRCBzZWxmLnN0YXRlLmlucHV0cworICAgICAgICByZXR1cm4gc2VsZi50b29sLmNoZWNrX2Fu ZF91cGRhdGVfcGFyYW1fdmFsdWVzKCBpbnB1dHMsIHNlbGYudHJhbnM9CiwgYWxsb3dfd29ya2Zs b3dfcGFyYW1ldGVycz0zRFRydWUgKQo9MjAKICAgICBkZWYgY29tcHV0ZV9ydW50aW1lX3N0YXRl KCBzZWxmLCB0cmFucywgc3RlcF91cGRhdGVzPTNETm9uZSwgc291cmNlPTNEPQoiaHRtbCIgKToK ICAgICAgICAgIyBXYXJuaW5nOiBUaGlzIG1ldGhvZCBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGV4 aXN0aW5nIHN0ZXAgc3RhdGUuCiAgICAgICAgIHN0ZXBfZXJyb3JzID0zRCBOb25lCiAgICAgICAg IHN0YXRlID0zRCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYucnVudGltZV9wb3N0X2pvYl9hY3Rp b25zID0zRCB7fQogICAgICAgICBpZiBzdGVwX3VwZGF0ZXM6CiAgICAgICAgICAgICAjIEdldCB0 aGUgdG9vbAogICAgICAgICAgICAgdG9vbCA9M0Qgc2VsZi50b29sCiAgICAgICAgICAgICAjIEdl dCBvbGQgZXJyb3JzCiAgICAgICAgICAgICBvbGRfZXJyb3JzID0zRCBzdGF0ZS5pbnB1dHMucG9w KCAiX19lcnJvcnNfXyIsIHt9ICkKICAgICAgICAgICAgICMgVXBkYXRlIHRoZSBzdGF0ZQorICAg ICAgICAgICAgc2VsZi5ydW50aW1lX3Bvc3Rfam9iX2FjdGlvbnMgPTNEIHN0ZXBfdXBkYXRlcy5n ZXQoUlVOVElNRV9QT1M9ClRfSk9CX0FDVElPTlNfS0VZLCB7fSkKICAgICAgICAgICAgIHN0ZXBf ZXJyb3JzID0zRCB0b29sLnVwZGF0ZV9zdGF0ZSggdHJhbnMsIHRvb2wuaW5wdXRzLCBzdGF0ZS5p PQpucHV0cywgc3RlcF91cGRhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdXBkYXRlX29ubHk9M0RUcnVlLCBvbGRfZXJyb3I9CnM9M0RvbGRfZXJyb3Jz LCBzb3VyY2U9M0Rzb3VyY2UgKQorICAgICAgICAgICAgc3RlcF9tZXRhZGF0YV9ydW50aW1lX3N0 YXRlID0zRCBzZWxmLl9fc3RlcF9tZXRhX3J1bnRpbWVfc3RhdGU9CigpCisgICAgICAgICAgICBp ZiBzdGVwX21ldGFkYXRhX3J1bnRpbWVfc3RhdGU6CisgICAgICAgICAgICAgICAgc3RhdGUuaW5w dXRzWyBSVU5USU1FX1NURVBfTUVUQV9TVEFURV9LRVkgXSA9M0Qgc3RlcF9tZXRhZD0KYXRhX3J1 bnRpbWVfc3RhdGUKICAgICAgICAgcmV0dXJuIHN0YXRlLCBzdGVwX2Vycm9ycwo9MjAKKyAgICBk ZWYgX19zdGVwX21ldGFfcnVudGltZV9zdGF0ZSggc2VsZiApOgorICAgICAgICAiIiIgQnVpbGQg YSBkaWN0aW9uYXJ5IGEgb2YgbWV0YS1zdGVwIHJ1bnRpbWUgc3RhdGUgKHN0YXRlIGFib3V0IGg9 Cm93CisgICAgICAgIHRoZSB3b3JrZmxvdyBzdGVwIC0gbm90IHRoZSB0b29sIHN0YXRlKSB0byBi ZSBzZXJpYWxpemVkIHdpdGggdGhlID0KVG9vbAorICAgICAgICBzdGF0ZS4KKyAgICAgICAgIiIi CisgICAgICAgIHJldHVybiB7IFJVTlRJTUVfUE9TVF9KT0JfQUNUSU9OU19LRVk6IHNlbGYucnVu dGltZV9wb3N0X2pvYl9hY3Rpbz0KbnMgfQorCisgICAgZGVmIF9fcmVzdG9yZV9zdGVwX21ldGFf cnVudGltZV9zdGF0ZSggc2VsZiwgc3RlcF9ydW50aW1lX3N0YXRlICk6CisgICAgICAgIGlmIFJV TlRJTUVfUE9TVF9KT0JfQUNUSU9OU19LRVkgaW4gc3RlcF9ydW50aW1lX3N0YXRlOgorICAgICAg ICAgICAgc2VsZi5ydW50aW1lX3Bvc3Rfam9iX2FjdGlvbnMgPTNEIHN0ZXBfcnVudGltZV9zdGF0 ZVsgUlVOVElNRV89ClBPU1RfSk9CX0FDVElPTlNfS0VZIF0KKwogICAgIGRlZiBleGVjdXRlKCBz ZWxmLCB0cmFucywgcHJvZ3Jlc3MsIGludm9jYXRpb24sIHN0ZXAgKToKICAgICAgICAgdG9vbCA9 M0QgdHJhbnMuYXBwLnRvb2xib3guZ2V0X3Rvb2woIHN0ZXAudG9vbF9pZCwgdG9vbF92ZXJzaW9u PTNEPQpzdGVwLnRvb2xfdmVyc2lvbiApCiAgICAgICAgIHRvb2xfc3RhdGUgPTNEIHN0ZXAuc3Rh dGUKLQorICAgICAgICAjIE5vdCBzdHJpY3RseSBuZWVkZWQgLSBidXQga2VlcCBUb29sIHN0YXRl IGNsZWFuIGJ5IHN0cmlwcGluZyBydW49CnRpbWUKKyAgICAgICAgIyBtZXRhZGF0YSBwYXJhbWV0 ZXJzIGZyb20gaXQuCisgICAgICAgIGlmIFJVTlRJTUVfU1RFUF9NRVRBX1NUQVRFX0tFWSBpbiB0 b29sX3N0YXRlLmlucHV0czoKKyAgICAgICAgICAgIGRlbCB0b29sX3N0YXRlLmlucHV0c1sgUlVO VElNRV9TVEVQX01FVEFfU1RBVEVfS0VZIF0KICAgICAgICAgY29sbGVjdGlvbnNfdG9fbWF0Y2gg PTNEIHNlbGYuX2ZpbmRfY29sbGVjdGlvbnNfdG9fbWF0Y2goIHRvb2wsIHByPQpvZ3Jlc3MsIHN0 ZXAgKQogICAgICAgICAjIEhhdmUgaW1wbGljaXQgY29sbGVjdGlvbnMuLi4KICAgICAgICAgaWYg Y29sbGVjdGlvbnNfdG9fbWF0Y2guaGFzX2NvbGxlY3Rpb25zKCk6CkBAIC04MTUsNyArODUwLDEw IEBACiAgICAgICAgICMgQ3JlYXRlIG5ldyBQSkEgYXNzb2NpYXRpb25zIHdpdGggdGhlIGNyZWF0 ZWQgam9iLCB0byBiZSBydW4gb24gYz0Kb21wbGV0aW9uLgogICAgICAgICAjIFBKQSBQYXJhbWV0 ZXIgUmVwbGFjZW1lbnQgKG9ubHkgYXBwbGllcyB0byBpbW1lZGlhdGUgYWN0aW9ucy0tIHI9CmVu YW1lIHNwZWNpZmljYWxseSwgZm9yIG5vdykKICAgICAgICAgIyBQYXNzIGFsb25nIHJlcGxhY2Vt ZW50IGRpY3Qgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBQSkEgc28gd2UgPQpkb24ndCBoYXZl IHRvIG1vZGlmeSB0aGUgb2JqZWN0LgotICAgICAgICBmb3IgcGphIGluIHN0ZXAucG9zdF9qb2Jf YWN0aW9uczoKKyAgICAgICAgcG9zdF9qb2JfYWN0aW9ucyA9M0Qgc3RlcC5wb3N0X2pvYl9hY3Rp b25zCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYucnVudGltZV9wb3N0X2pvYl9hY3Rp b25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgcG9zdF9qb2JfYWN0aW9ucy5hcHBlbmQoIHNl bGYuX190b19wamEoIGtleSwgdmFsdWUsIHN0ZXAgKSApCisgICAgICAgIGZvciBwamEgaW4gcG9z dF9qb2JfYWN0aW9uczoKICAgICAgICAgICAgIGlmIHBqYS5hY3Rpb25fdHlwZSBpbiBBY3Rpb25C b3guaW1tZWRpYXRlX2FjdGlvbnM6CiAgICAgICAgICAgICAgICAgQWN0aW9uQm94LmV4ZWN1dGUo IHNlbGYudHJhbnMuYXBwLCBzZWxmLnRyYW5zLnNhX3Nlc3Npb24sID0KcGphLCBqb2IsIHJlcGxh Y2VtZW50X2RpY3QgKQogICAgICAgICAgICAgZWxzZToKCmRpZmYgLXIgZTYzMzg4ZmQ2Y2JmMzQz YTdiMDM0OTYxZDEzOWYxNGFkMGRjNjMyNCAtciA1ZDBmY2E1OTEzOTRkN2U3YWFhYmFkZj0KY2Rl ZDlmODM3ZmQ0MzZlZDIgbGliL2dhbGF4eS93b3JrZmxvdy9ydW5fcmVxdWVzdC5weQotLS0gYS9s aWIvZ2FsYXh5L3dvcmtmbG93L3J1bl9yZXF1ZXN0LnB5CisrKyBiL2xpYi9nYWxheHkvd29ya2Zs b3cvcnVuX3JlcXVlc3QucHkKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBlbHNlOgogICAg ICAgICAgICAgZWZmZWN0aXZlX2tleSA9M0Qga2V5CiAgICAgICAgIHZhbHVlID0zRCBwYXJhbV9k aWN0W2tleV0KLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCkgYW5kIG5vdCAoJ3Ny YycgaW4gdmFsdWUgYW5kICdpZCcgaW4gdmFsPQp1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGRpY3QpIGFuZCAobm90ICgnc3JjJyBpbiB2YWx1ZSBhbmQgJ2lkJyBpbiB2YT0KbHVl KSBhbmQga2V5ICE9M0QgIl9fUE9TVF9KT0JfQUNUSU9OU19fIik6CiAgICAgICAgICAgICBuZXdf cGFyYW1zLnVwZGF0ZShfZmxhdHRlbl9zdGVwX3BhcmFtcyggdmFsdWUsIGVmZmVjdGl2ZV9rZXkp ICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5ld19wYXJhbXNbZWZmZWN0aXZlX2tleV0g PTNEIHZhbHVlCgpkaWZmIC1yIGU2MzM4OGZkNmNiZjM0M2E3YjAzNDk2MWQxMzlmMTRhZDBkYzYz MjQgLXIgNWQwZmNhNTkxMzk0ZDdlN2FhYWJhZGY9CmNkZWQ5ZjgzN2ZkNDM2ZWQyIHRlc3QvYXBp L3Rlc3Rfd29ya2Zsb3dzLnB5Ci0tLSBhL3Rlc3QvYXBpL3Rlc3Rfd29ya2Zsb3dzLnB5CisrKyBi L3Rlc3QvYXBpL3Rlc3Rfd29ya2Zsb3dzLnB5CkBAIC0xNjMsOCArMTYzLDcgQEAKICAgICAgICAg IyBXYWl0IGZvciB3b3JrZmxvdyB0byBiZWNvbWUgZnVsbHkgc2NoZWR1bGVkIGFuZCB0aGVuIGZv ciBhbGwgam9icwogICAgICAgICAjIGNvbXBsZXRlLgogICAgICAgICBpZiB3YWl0OgotICAgICAg ICAgICAgc2VsZi53YWl0X2Zvcl9pbnZvY2F0aW9uKCB3b3JrZmxvd19pZCwgaW52b2NhdGlvbl9p ZCApCi0gICAgICAgICAgICBzZWxmLmRhdGFzZXRfcG9wdWxhdG9yLndhaXRfZm9yX2hpc3Rvcnko IGhpc3RvcnlfaWQsIGFzc2VydF9vaz0KPTNEVHJ1ZSApCisgICAgICAgICAgICBzZWxmLl93YWl0 X2Zvcl93b3JrZmxvdyggd29ya2Zsb3dfaWQsIGludm9jYXRpb25faWQsIGhpc3RvcnlfaT0KZCAp CiAgICAgICAgIGpvYnMgPTNEIHNlbGYuX2hpc3Rvcnlfam9icyggaGlzdG9yeV9pZCApCiAgICAg ICAgIHJldHVybiBSdW5Kb2JzU3VtbWFyeSgKICAgICAgICAgICAgIGhpc3RvcnlfaWQ9M0RoaXN0 b3J5X2lkLApAQCAtMTgwLDYgKzE3OSwxMiBAQAogICAgIGRlZiBfaGlzdG9yeV9qb2JzKCBzZWxm LCBoaXN0b3J5X2lkICk6CiAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoImpvYnMiLCB7ICJoaXN0 b3J5X2lkIjogaGlzdG9yeV9pZCwgIm9yZGVyX2J5IjogIj0KY3JlYXRlX3RpbWUiIH0gKS5qc29u KCkKPTIwCisgICAgZGVmIF93YWl0X2Zvcl93b3JrZmxvdyggc2VsZiwgd29ya2Zsb3dfaWQsIGlu dm9jYXRpb25faWQsIGhpc3RvcnlfaWQsID0KYXNzZXJ0X29rPTNEVHJ1ZSApOgorICAgICAgICAi IiIgV2FpdCBmb3IgYSB3b3JrZmxvdyBpbnZvY2F0aW9uIHRvIGNvbXBsZXRlbHkgc2NoZWR1bGUg YW5kIHRoZW49CiBoaXN0b3J5CisgICAgICAgIHRvIGJlIGNvbXBsZXRlLiAiIiIKKyAgICAgICAg c2VsZi53YWl0X2Zvcl9pbnZvY2F0aW9uKCB3b3JrZmxvd19pZCwgaW52b2NhdGlvbl9pZCApCisg ICAgICAgIHNlbGYuZGF0YXNldF9wb3B1bGF0b3Iud2FpdF9mb3JfaGlzdG9yeSggaGlzdG9yeV9p ZCwgYXNzZXJ0X29rPTNEVD0KcnVlICkKKwo9MjAKICMgV29ya2Zsb3cgQVBJIFRPRE86CiAjIC0g QWxsb3cgaGlzdG9yeV9pZCBhcyBwYXJhbSB0byB3b3JrZmxvdyBydW4gYWN0aW9uLiAoaGlzdF9p ZCkKQEAgLTc0Myw2ICs3NDgsODcgQEAKICAgICAgICAgY29udGVudCA9M0Qgc2VsZi5kYXRhc2V0 X3BvcHVsYXRvci5nZXRfaGlzdG9yeV9kYXRhc2V0X2RldGFpbHMoIGhpPQpzdG9yeV9pZCwgd2Fp dD0zRFRydWUsIGFzc2VydF9vaz0zRFRydWUgKQogICAgICAgICBhc3NlcnQgY29udGVudFsgIm5h bWUiIF0gPTNEPTNEICJmb28gd2FzIHJlcGxhY2VkIgo9MjAKKyAgICBAc2tpcF93aXRob3V0X3Rv b2woICJjYXQxIiApCisgICAgZGVmIHRlc3RfcnVuX3dpdGhfcnVudGltZV9wamEoIHNlbGYgKToK KyAgICAgICAgd29ya2Zsb3cgPTNEIHNlbGYud29ya2Zsb3dfcG9wdWxhdG9yLmxvYWRfd29ya2Zs b3coIG5hbWU9M0QidGVzdF9mPQpvcl9wamFfcnVudGltZSIgKQorICAgICAgICB1dWlkMCwgdXVp ZDEsIHV1aWQyID0zRCBzdHIodXVpZDQoKSksIHN0cih1dWlkNCgpKSwgc3RyKHV1aWQ0KCkpCisg ICAgICAgIHdvcmtmbG93WyJzdGVwcyJdWyIwIl1bInV1aWQiXSA9M0QgdXVpZDAKKyAgICAgICAg d29ya2Zsb3dbInN0ZXBzIl1bIjEiXVsidXVpZCJdID0zRCB1dWlkMQorICAgICAgICB3b3JrZmxv d1sic3RlcHMiXVsiMiJdWyJ1dWlkIl0gPTNEIHV1aWQyCisgICAgICAgIHdvcmtmbG93X3JlcXVl c3QsIGhpc3RvcnlfaWQgPTNEIHNlbGYuX3NldHVwX3dvcmtmbG93X3J1biggd29ya2Zsbz0Kdywg aW5wdXRzX2J5PTNEJ3N0ZXBfaW5kZXgnICkKKyAgICAgICAgd29ya2Zsb3dfcmVxdWVzdFsgInJl cGxhY2VtZW50X3BhcmFtcyIgXSA9M0QgZHVtcHMoIGRpY3QoIHJlcGxhY2VtPQplPTNEIndhcyBy ZXBsYWNlZCIgKSApCisKKyAgICAgICAgcGphX21hcCA9M0QgeworICAgICAgICAgICAgIlJlbmFt ZURhdGFzZXRBY3Rpb25vdXRfZmlsZTEiOiBkaWN0KAorICAgICAgICAgICAgICAgIGFjdGlvbl90 eXBlPTNEIlJlbmFtZURhdGFzZXRBY3Rpb24iLAorICAgICAgICAgICAgICAgIG91dHB1dF9uYW1l PTNEIm91dF9maWxlMSIsCisgICAgICAgICAgICAgICAgYWN0aW9uX2FyZ3VtZW50cz0zRGRpY3Qo IG5ld25hbWU9M0QiZm9vICR7cmVwbGFjZW1lfSIgKSwKKyAgICAgICAgICAgICkKKyAgICAgICAg fQorICAgICAgICB3b3JrZmxvd19yZXF1ZXN0WyAicGFyYW1ldGVycyIgXSA9M0QgZHVtcHMoewor ICAgICAgICAgICAgdXVpZDI6IHsgIl9fUE9TVF9KT0JfQUNUSU9OU19fIjogcGphX21hcCB9Cisg ICAgICAgIH0pCisKKyAgICAgICAgcnVuX3dvcmtmbG93X3Jlc3BvbnNlID0zRCBzZWxmLl9wb3N0 KCAid29ya2Zsb3dzIiwgZGF0YT0zRHdvcmtmbG93PQpfcmVxdWVzdCApCisgICAgICAgIHNlbGYu X2Fzc2VydF9zdGF0dXNfY29kZV9pcyggcnVuX3dvcmtmbG93X3Jlc3BvbnNlLCAyMDAgKQorICAg ICAgICBjb250ZW50ID0zRCBzZWxmLmRhdGFzZXRfcG9wdWxhdG9yLmdldF9oaXN0b3J5X2RhdGFz ZXRfZGV0YWlscyggaGk9CnN0b3J5X2lkLCB3YWl0PTNEVHJ1ZSwgYXNzZXJ0X29rPTNEVHJ1ZSAp CisgICAgICAgIGFzc2VydCBjb250ZW50WyAibmFtZSIgXSA9M0Q9M0QgImZvbyB3YXMgcmVwbGFj ZWQiLCBjb250ZW50WyAibmFtZT0KIiBdCisKKyAgICBAc2tpcF93aXRob3V0X3Rvb2woICJjYXQx IiApCisgICAgZGVmIHRlc3RfcnVuX3dpdGhfZGVsYXllZF9ydW50aW1lX3BqYSggc2VsZiApOgor ICAgICAgICB3b3JrZmxvd19pZCA9M0Qgc2VsZi5fdXBsb2FkX3lhbWxfd29ya2Zsb3coIiIiCist IGxhYmVsOiB0ZXN0X2lucHV0CisgIHR5cGU6IGlucHV0CistIGxhYmVsOiBmaXJzdF9jYXQKKyAg dG9vbF9pZDogY2F0MQorICBzdGF0ZToKKyAgICBpbnB1dDE6CisgICAgICAkbGluazogdGVzdF9p bnB1dAorLSBsYWJlbDogdGhlX3BhdXNlCisgIHR5cGU6IHBhdXNlCisgIGNvbm5lY3Q6CisgICAg aW5wdXQ6CisgICAgLSBmaXJzdF9jYXQjb3V0X2ZpbGUxCistIGxhYmVsOiBzZWNvbmRfY2F0Cisg IHRvb2xfaWQ6IGNhdDEKKyAgc3RhdGU6CisgICAgaW5wdXQxOgorICAgICAgJGxpbms6IHRoZV9w YXVzZQorIiIiKQorICAgICAgICBkb3dubG9hZGVkX3dvcmtmbG93ID0zRCBzZWxmLl9kb3dubG9h ZF93b3JrZmxvdyggd29ya2Zsb3dfaWQgKQorICAgICAgICBwcmludCBkb3dubG9hZGVkX3dvcmtm bG93CisgICAgICAgIHV1aWRfZGljdCA9M0QgZGljdCggbWFwKCBsYW1iZGEgKGluZGV4LCBzdGVw KTogKCBpbnQoIGluZGV4ICksIHN0ZT0KcFsidXVpZCJdICksIGRvd25sb2FkZWRfd29ya2Zsb3db InN0ZXBzIl0uaXRlcml0ZW1zKCkgKSApCisgICAgICAgIGhpc3RvcnlfaWQgPTNEIHNlbGYuZGF0 YXNldF9wb3B1bGF0b3IubmV3X2hpc3RvcnkoKQorICAgICAgICBoZGEgPTNEIHNlbGYuZGF0YXNl dF9wb3B1bGF0b3IubmV3X2RhdGFzZXQoIGhpc3RvcnlfaWQsIGNvbnRlbnQ9M0Q9CiIxIDIgMyIg KQorICAgICAgICBzZWxmLmRhdGFzZXRfcG9wdWxhdG9yLndhaXRfZm9yX2hpc3RvcnkoIGhpc3Rv cnlfaWQgKQorICAgICAgICBpbnB1dHMgPTNEIHsKKyAgICAgICAgICAgICcwJzogc2VsZi5fZHNf ZW50cnkoIGhkYSApLAorICAgICAgICB9CisgICAgICAgIHByaW50IGlucHV0cworICAgICAgICB1 dWlkMiA9M0QgdXVpZF9kaWN0WyAzIF0KKyAgICAgICAgd29ya2Zsb3dfcmVxdWVzdCA9M0Qge30K KyAgICAgICAgd29ya2Zsb3dfcmVxdWVzdFsgInJlcGxhY2VtZW50X3BhcmFtcyIgXSA9M0QgZHVt cHMoIGRpY3QoIHJlcGxhY2VtPQplPTNEIndhcyByZXBsYWNlZCIgKSApCisgICAgICAgIHBqYV9t YXAgPTNEIHsKKyAgICAgICAgICAgICJSZW5hbWVEYXRhc2V0QWN0aW9ub3V0X2ZpbGUxIjogZGlj dCgKKyAgICAgICAgICAgICAgICBhY3Rpb25fdHlwZT0zRCJSZW5hbWVEYXRhc2V0QWN0aW9uIiwK KyAgICAgICAgICAgICAgICBvdXRwdXRfbmFtZT0zRCJvdXRfZmlsZTEiLAorICAgICAgICAgICAg ICAgIGFjdGlvbl9hcmd1bWVudHM9M0RkaWN0KCBuZXduYW1lPTNEImZvbyAke3JlcGxhY2VtZX0i ICksCisgICAgICAgICAgICApCisgICAgICAgIH0KKyAgICAgICAgd29ya2Zsb3dfcmVxdWVzdFsg InBhcmFtZXRlcnMiIF0gPTNEIGR1bXBzKHsKKyAgICAgICAgICAgIHV1aWQyOiB7ICJfX1BPU1Rf Sk9CX0FDVElPTlNfXyI6IHBqYV9tYXAgfQorICAgICAgICB9KQorICAgICAgICBpbnZvY2F0aW9u X2lkID0zRCBzZWxmLl9faW52b2tlX3dvcmtmbG93KCBoaXN0b3J5X2lkLCB3b3JrZmxvd19pZCw9 CiBpbnB1dHM9M0RpbnB1dHMsIHJlcXVlc3Q9M0R3b3JrZmxvd19yZXF1ZXN0ICkKKworICAgICAg ICB0aW1lLnNsZWVwKCAyICkKKyAgICAgICAgc2VsZi5kYXRhc2V0X3BvcHVsYXRvci53YWl0X2Zv cl9oaXN0b3J5KCBoaXN0b3J5X2lkICkKKyAgICAgICAgc2VsZi5fX3Jldmlld19wYXVzZWRfc3Rl cHMoIHdvcmtmbG93X2lkLCBpbnZvY2F0aW9uX2lkLCBvcmRlcl9pbmRlPQp4PTNEMiwgYWN0aW9u PTNEVHJ1ZSApCisKKyAgICAgICAgc2VsZi5fd2FpdF9mb3Jfd29ya2Zsb3coIHdvcmtmbG93X2lk LCBpbnZvY2F0aW9uX2lkLCBoaXN0b3J5X2lkICkKKyAgICAgICAgdGltZS5zbGVlcCggMSApCisg ICAgICAgIGNvbnRlbnQgPTNEIHNlbGYuZGF0YXNldF9wb3B1bGF0b3IuZ2V0X2hpc3RvcnlfZGF0 YXNldF9kZXRhaWxzKCBoaT0Kc3RvcnlfaWQgKQorICAgICAgICBhc3NlcnQgY29udGVudFsgIm5h bWUiIF0gPTNEPTNEICJmb28gd2FzIHJlcGxhY2VkIiwgY29udGVudFsgIm5hbWU9CiIgXQorCiAg ICAgQHNraXBfd2l0aG91dF90b29sKCAicmFuZG9tX2xpbmVzMSIgKQogICAgIGRlZiB0ZXN0X3J1 bl9yZXBsYWNlX3BhcmFtc19ieV90b29sKCBzZWxmICk6CiAgICAgICAgIHdvcmtmbG93X3JlcXVl c3QsIGhpc3RvcnlfaWQgPTNEIHNlbGYuX3NldHVwX3JhbmRvbV94Ml93b3JrZmxvdyggIj0KdGVz dF9mb3JfcmVwbGFjZV90b29sX3BhcmFtcyIgKQpAQCAtOTMyLDE1ICsxMDE4LDEzIEBACiAgICAg ICAgIHNlbGYuX2Fzc2VydF9zdGF0dXNfY29kZV9pcyggaGRhX2luZm9fcmVzcG9uc2UsIDIwMCAp CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCBoZGFfaW5mb19yZXNwb25zZS5qc29uKClbICJt ZXRhZGF0YV9kYXRhX2xpbmVzIj0KIF0sIGxpbmVzICkKPTIwCi0gICAgZGVmIF9faW52b2tlX3dv cmtmbG93KCBzZWxmLCBoaXN0b3J5X2lkLCB3b3JrZmxvd19pZCwgaW5wdXRzPTNEe30sIGFzcz0K ZXJ0X29rPTNEVHJ1ZSApOgotICAgICAgICB3b3JrZmxvd19yZXF1ZXN0ID0zRCBkaWN0KAotICAg ICAgICAgICAgaGlzdG9yeT0zRCJoaXN0X2lkPTNEJXMiICUgaGlzdG9yeV9pZCwKLSAgICAgICAg KQotICAgICAgICB3b3JrZmxvd19yZXF1ZXN0WyAiaW5wdXRzIiBdID0zRCBkdW1wcyggaW5wdXRz ICkKLSAgICAgICAgd29ya2Zsb3dfcmVxdWVzdFsgImlucHV0c19ieSIgXSA9M0QgJ3N0ZXBfaW5k ZXgnCisgICAgZGVmIF9faW52b2tlX3dvcmtmbG93KCBzZWxmLCBoaXN0b3J5X2lkLCB3b3JrZmxv d19pZCwgaW5wdXRzPTNEe30sIHJlcT0KdWVzdD0zRHt9LCBhc3NlcnRfb2s9M0RUcnVlICk6Cisg ICAgICAgIHJlcXVlc3RbImhpc3RvcnkiXSA9M0QgImhpc3RfaWQ9M0QlcyIgJSBoaXN0b3J5X2lk LAorICAgICAgICBpZiBpbnB1dHM6CisgICAgICAgICAgICByZXF1ZXN0WyAiaW5wdXRzIiBdID0z RCBkdW1wcyggaW5wdXRzICkKKyAgICAgICAgICAgIHJlcXVlc3RbICJpbnB1dHNfYnkiIF0gPTNE ICdzdGVwX2luZGV4JwogICAgICAgICB1cmwgPTNEICJ3b3JrZmxvd3MvJXMvdXNhZ2UiICUgKCB3 b3JrZmxvd19pZCApCi0KLSAgICAgICAgaW52b2NhdGlvbl9yZXNwb25zZSA9M0Qgc2VsZi5fcG9z dCggdXJsLCBkYXRhPTNEd29ya2Zsb3dfcmVxdWVzdCApCisgICAgICAgIGludm9jYXRpb25fcmVz cG9uc2UgPTNEIHNlbGYuX3Bvc3QoIHVybCwgZGF0YT0zRHJlcXVlc3QgKQogICAgICAgICBpZiBh c3NlcnRfb2s6CiAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfc3RhdHVzX2NvZGVfaXMoIGludm9j YXRpb25fcmVzcG9uc2UsIDIwMCApCiAgICAgICAgICAgICBpbnZvY2F0aW9uX2lkID0zRCBpbnZv Y2F0aW9uX3Jlc3BvbnNlLmpzb24oKVsgImlkIiBdCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzRiZGU3MGM2NzdhOS8KQ2hhbmdlc2V0OiAgIDRi ZGU3MGM2NzdhOQpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0w MS0wNiAyMDowMTozNCswMDowMApTdW1tYXJ5OiAgICAgU3BsaXQgb3V0IE93bmFibGVNb2RlbElu dGVyZmFjZSAoSERBcyBhdCB0aGUgbGVhc3QgbWF5IG5lZWQgdGg9CmlzKTsgQ2xlYW4tdXA7IENh dGNoaW5nIHVwIG9uIGRvY3VtZW50YXRpb24KQWZmZWN0ZWQgIzogIDE3IGZpbGVzCgpkaWZmIC1y IDVkMGZjYTU5MTM5NGQ3ZTdhYWFiYWRmY2RlZDlmODM3ZmQ0MzZlZDIgLXIgNGJkZTcwYzY3N2E5 MmRkYTcyMTJlY2M9CjRjZDllYTljNGQzZWM2OTUyIGxpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5w eQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy9iYXNlLnB5CkBAIC0xMjAsMjIgKzEyMCwyNiBAQAo9MjAKICMgPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECiBjbGFz cyBNb2RlbE1hbmFnZXIoIG9iamVjdCApOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGFs bCBtb2RlbC9yZXNvdXJjZSBtYW5hZ2Vycy4KKworICAgIFByb3ZpZGVzIGNvbW1vbiBxdWVyaWVz IGFuZCBDUlVEIG9wZXJhdGlvbnMgYXMgYSAoaG9wZWZ1bGx5KSBsaWdodCBsYXk9CmVyCisgICAg b3ZlciB0aGUgT1JNLgorICAgICIiIgogICAgIG1vZGVsX2NsYXNzID0zRCBvYmplY3QKICAgICBk ZWZhdWx0X29yZGVyX2J5ID0zRCBOb25lCiAgICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgTm9uZQo9 MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgotICAgICAgICBhc3NlcnQgaXNpbnN0 YW5jZSggc2VsZi5tb2RlbF9jbGFzcywgb2JqZWN0ICksICgKLSAgICAgICAgICAgICJtb2RlbCBj bGFzcyBtdXN0IGJlIHNldCBmb3IgJXMiICUoIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICkgKQot ICAgICAgICBzZWxmLm1vZGVsX2NsYXNzX25hbWUgPTNEIHNlbGYubW9kZWxfY2xhc3MuX19jbGFz c19fLl9fbmFtZV9fCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKCBzZWxmLmRlZmF1bHRfb3Jk ZXJfYnksIHR1cGxlICksICgKLSAgICAgICAgICAgICJkZWZhdWx0X29yZGVyX2J5IGZvciAlcyBt dXN0IGJlIGEgdHVwbGUiICUoIHNlbGYuX19jbGFzc19fLl9fPQpuYW1lX18gKSApCi0KKyAgICAg ICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCj0yMAogICAgICNO T1RFOiBhdCB0aGlzIGxheWVyLCBhbGwgaWRzIGFyZSBleHBlY3RlZCB0byBiZSBkZWNvZGVkIGFu ZCBpbiBpbnQgZm89CnJtCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gZ2V0L3JlYWQvcXVlcnkK ICAgICBkZWYgcXVlcnkoIHNlbGYsIHRyYW5zLCBlYWdlcmxvYWRzPTNEVHJ1ZSwgZmlsdGVycz0z RE5vbmUsIG9yZGVyX2J5PTNEPQpOb25lLCBsaW1pdD0zRE5vbmUsIG9mZnNldD0zRE5vbmUsICoq a3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgI3ByaW50ICdxdWVy eTonLCBlYWdlcmxvYWRzLCBmaWx0ZXJzLCBvcmRlcl9ieSwgbGltaXQsIG9mZnNldCwga3dhPQpy Z3MKICAgICAgICAgcXVlcnkgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHNlbGYubW9kZWxf Y2xhc3MgKQo9MjAKQEAgLTE0OSw2ICsxNTMsOCBAQAogICAgICAgICByZXR1cm4gcXVlcnkKPTIw CiAgICAgZGVmIF9hcHBseV9maWx0ZXJzKCBzZWxmLCBxdWVyeSwgZmlsdGVycyApOgorICAgICAg ICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZToKICAgICAgICAg ICAgIHJldHVybiBxdWVyeQo9MjAKQEAgLTE2MCw2ICsxNjYsOCBAQAogICAgICAgICByZXR1cm4g cXVlcnkKPTIwCiAgICAgZGVmIF9tdW5nZV9maWx0ZXJzKCBzZWxmLCBmaWx0ZXJzQSwgZmlsdGVy c0IgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICAjIC4uLiB3aGljaCBzb3Vu ZHMgbGlrZSBhIGV1cGhhbWlzbSBmb3Igc29tZXRoaW5nCiAgICAgICAgIGZpbmFsX2ZpbHRlcnMg PTNEIFsgc2VsZi5tb2RlbF9jbGFzcy5pZCA9M0Q9M0QgaWQgXQogICAgICAgICBpZiBmaWx0ZXJz QSBpcyBOb25lOgpAQCAtMTczLDEwICsxODEsMTQgQEAKICAgICAgICAgcmV0dXJuIGZpbHRlcnNB ICsgZmlsdGVyc0IKPTIwCiAgICAgZGVmIF9hcHBseV9vcmRlcl9ieV9saW1pdF9vZmZzZXQoIHNl bGYsIHF1ZXJ5LCBvcmRlcl9ieSwgbGltaXQsIG9mZnNldD0KICk6CisgICAgICAgICIiIgorICAg ICAgICAiIiIKICAgICAgICAgcXVlcnkgPTNEIHNlbGYuX2FwcGx5X29yZGVyX2J5KCBxdWVyeSwg b3JkZXJfYnkgKQogICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHlfbGltaXRfb2Zmc2V0KCBxdWVy eSwgbGltaXQsIG9mZnNldCApCj0yMAogICAgIGRlZiBfYXBwbHlfb3JkZXJfYnkoIHNlbGYsIHF1 ZXJ5LCBvcmRlcl9ieSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG9y ZGVyX2J5IGlzIE5vbmU6CiAgICAgICAgICAgICAjVE9ETzogYWxsb3cgbm9uLXR1cGxlIGRlZmF1 bHRfb3JkZXJfYnkKICAgICAgICAgICAgIHJldHVybiBxdWVyeS5vcmRlcl9ieSggKnNlbGYuZGVm YXVsdF9vcmRlcl9ieSApCkBAIC0xODYsNiArMTk4LDggQEAKICAgICAgICAgcmV0dXJuIHF1ZXJ5 Lm9yZGVyX2J5KCBvcmRlcl9ieSApCj0yMAogICAgIGRlZiBfYXBwbHlfbGltaXRfb2Zmc2V0KCBz ZWxmLCBxdWVyeSwgbGltaXQsIG9mZnNldCApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAg ICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5 LmxpbWl0KCBsaW1pdCApCiAgICAgICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToKQEAgLTE5NSw2 ICsyMDksOCBAQAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGNvbW1vbiBxdWVyaWVzCiAjVE9E TzogbmVlZGVkPwogICAgIGRlZiBvbmUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgorICAgICAg ICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxm LnF1ZXJ5KCB0cmFucywgKiprd2FyZ3MgKS5vbmUoKQogICAgICAgICAjIHJlLXJhaXNlIGFzIHNl cmlhbGl6YWJsZSBlcnJvcnMKQEAgLTIwNCwxNyArMjIwLDI1IEBACiAgICAgICAgICAgICByYWlz ZSBleGNlcHRpb25zLkNvbmZsaWN0KCAnZm91bmQgbW9yZSB0aGFuIG9uZSAnICsgc2VsZi5tb2Rl bD0KX2NsYXNzLl9fbmFtZV9fICkKPTIwCiAgICAgZGVmIGxpc3QoIHNlbGYsIHRyYW5zLCAqKmt3 YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnF1 ZXJ5KCB0cmFucywgKiprd2FyZ3MgKS5hbGwoKQo9MjAKICAgICBkZWYgYnlfaWQoIHNlbGYsIHRy YW5zLCBpZCwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBp ZF9maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MuaWQgPTNEPTNEIGlkCiAgICAgICAgIHJldHVy biBzZWxmLm9uZSggdHJhbnMsIGZpbHRlcnM9M0RpZF9maWx0ZXIsICoqa3dhcmdzICkKPTIwCiAg ICAgZGVmIF9xdWVyeV9ieV9pZHMoIHNlbGYsIHRyYW5zLCBpZHMsIGZpbHRlcnM9M0ROb25lLCAq Kmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlkc19maWx0ZXIg PTNEIHNlbGYubW9kZWxfY2xhc3MuaWQuaW5fKCBpZHMgKQogICAgICAgICByZXR1cm4gc2VsZi5x dWVyeSggdHJhbnMsIGZpbHRlcnM9M0RzZWxmLl9tdW5nZV9maWx0ZXJzKCBpZHNfZmlsdGU9CnIs IGZpbHRlcnMgKSwgKiprd2FyZ3MgKQo9MjAKICAgICBkZWYgYnlfaWRzKCBzZWxmLCB0cmFucywg aWRzLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGZvdW5k ID0zRCBzZWxmLl9xdWVyeV9ieV9pZHMoIHRyYW5zLCBpZHMsICoqa3dhcmdzICkuYWxsKCkKICAg ICAgICAgI1RPRE86IHRoaXMgZG9lcyBub3Qgb3JkZXIgYnkgdGhlIG9yaWdpbmFsICdpZHMnIGFy cmF5Cj0yMApAQCAtMjUyLDYgKzI3Niw4IEBACj0yMAogICAgICMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0t IGNyZWF0ZQogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCBmbHVzaD0zRFRydWUsICphcmdz LCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGl0ZW0gPTNE IHNlbGYubW9kZWxfY2xhc3MoICphcmdzLCAqKmt3YXJncyApCiAgICAgICAgIHRyYW5zLnNhX3Nl c3Npb24uYWRkKCBpdGVtICkKICAgICAgICAgaWYgZmx1c2g6CkBAIC0yNTksMTAgKzI4NSwxNCBA QAogICAgICAgICByZXR1cm4gaXRlbQo9MjAKICAgICBkZWYgY29weSggc2VsZiwgdHJhbnMsIGl0 ZW0sICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgcmFpc2Ug ZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZCggJ0Fic3RyYWN0IG1ldGhvZCcgKQo9MjAKICAgICAj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPQotLS0tLSB1cGRhdGUKICAgICBkZWYgdXBkYXRlKCBzZWxmLCB0cmFucywg aXRlbSwgbmV3X3ZhbHVlcywgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAiIiIK KyAgICAgICAgIiIiCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVtICkKICAgICAg ICAgZm9yIGtleSwgdmFsdWUgaW4gbmV3X3ZhbHVlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYg aGFzYXR0ciggaXRlbSwga2V5ICk6CkBAIC0yNzIsMTEgKzMwMiwxNSBAQAogICAgICAgICByZXR1 cm4gaXRlbQo9MjAKICAgICBkZWYgYXNzb2NpYXRlKCBzZWxmLCB0cmFucywgYXNzb2NpYXRlX3dp dGgsIGl0ZW0sIGZvcmVpZ25fa2V5X25hbWU9M0ROPQpvbmUgKToKKyAgICAgICAgIiIiCisgICAg ICAgICIiIgogICAgICAgICBmb3JlaWduX2tleV9uYW1lID0zRCBmb3JlaWduX2tleV9uYW1lIG9y IHNlbGYuZm9yZWlnbl9rZXlfbmFtZQogICAgICAgICBzZXRhdHRyKCBhc3NvY2lhdGVfd2l0aCwg Zm9yZWlnbl9rZXlfbmFtZSwgaXRlbSApCiAgICAgICAgIHJldHVybiBpdGVtCj0yMAogICAgIGRl ZiBxdWVyeV9hc3NvY2lhdGVkKCBzZWxmLCB0cmFucywgYXNzb2NpYXRlZF9tb2RlbF9jbGFzcywg aXRlbSwgZm9yZWk9CmduX2tleV9uYW1lPTNETm9uZSApOgorICAgICAgICAiIiIKKyAgICAgICAg IiIiCiAgICAgICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEIGZvcmVpZ25fa2V5X25hbWUgb3Igc2Vs Zi5mb3JlaWduX2tleV9uYW1lCiAgICAgICAgIGZvcmVpZ25fa2V5ID0zRCBnZXRhdHRyKCBhc3Nv Y2lhdGVkX21vZGVsX2NsYXNzLCBmb3JlaWduX2tleV9uYW1lICkKICAgICAgICAgcmV0dXJuIHRy YW5zLnNhX3Nlc3Npb24ucXVlcnkoIGFzc29jaWF0ZWRfbW9kZWxfY2xhc3MgKS5maWx0ZXIoIGZv PQpyZWlnbl9rZXkgPTNEPTNEIGl0ZW0gKQpAQCAtMjg5LDkgKzMyMywxOCBAQAo9MjAKICMgPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNECiBjbGFzcyBEZWxldGFibGVNb2RlbEludGVyZmFjZSggb2JqZWN0ICk6CisgICAgIiIi CisgICAgQSBtaXhpbi9pbnRlcmZhY2UgZm9yIGEgbW9kZWwgdGhhdCBpcyBkZWxldGFibGUgKGku ZS4gaGFzIGEgJ2RlbGV0ZWQnID0KYXR0cikuCisKKyAgICBNYW55IHJlc291cmNlcyBpbiBHYWxh eHkgY2FuIGJlIG1hcmtlZCBhcyBkZWxldGVkIC0gbWVhbmluZyAoaW4gbW9zdCBjPQphc2VzKQor ICAgIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZCwgc2hvdWxkIG5vdCBiZSBkaXNwbGF5 ZWQsIG9yIG1heSBiZSBhY3Q9CnVhbGx5CisgICAgcmVtb3ZlZCBieSBhbiBhZG1pbi9zY3JpcHQu CisgICAgIiIiCj0yMAogICAgIGRlZiBkZWxldGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0z RFRydWUsICoqa3dhcmdzICk6Ci0gICAgICAgICMgb2Z0ZW4gb25seSBhIG1hdHRlciBvZiAnbWFy a2luZyBhcyBkZWxldGVkJworICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhcyBkZWxldGVkIGFu ZCByZXR1cm4uCisgICAgICAgICIiIgogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRl bSApCiAgICAgICAgIGl0ZW0uZGVsZXRlZCA9M0QgVHJ1ZQogICAgICAgICBpZiBmbHVzaDoKQEAg LTI5OSw2ICszNDIsOSBAQAogICAgICAgICByZXR1cm4gaXRlbQo9MjAKICAgICBkZWYgdW5kZWxl dGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRydWUsICoqa3dhcmdzICk6CisgICAgICAg ICIiIgorICAgICAgICBNYXJrIGFzIG5vdCBkZWxldGVkIGFuZCByZXR1cm4uCisgICAgICAgICIi IgogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCiAgICAgICAgIGl0ZW0uZGVs ZXRlZCA9M0QgRmFsc2UKICAgICAgICAgaWYgZmx1c2g6CkBAIC0zMDgsMTUgKzM1NCwxOCBAQAo9 MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNECiBjbGFzcyBQdXJnYWJsZU1vZGVsSW50ZXJmYWNlKCBEZWxldGFibGVN b2RlbEludGVyZmFjZSApOgotCi0gICAgZGVmIGVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2Fs bG93ZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBtc2c9M0ROb25lID0KKToKLSAgICAgICAgaWYgbm90 IHRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlOgotICAgICAgICAgICAg bXNnID0zRCBtc2cgb3IgJ1RoaXMgaW5zdGFuY2UgZG9lcyBub3QgYWxsb3cgdXNlciBkYXRhc2V0 IHB1cmc9CmluZycKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmlnRG9lc05vdEFs bG93RXhjZXB0aW9uKCBtc2cgKQotICAgICAgICAgICAgI3JhaXNlIGV4Y2VwdGlvbnMuQ29uZmln RG9lc05vdEFsbG93RXhjZXB0aW9uKCBtc2csIGl0ZW09M0RpdGU9Cm0gKQotICAgICAgICByZXR1 cm4gaXRlbQorICAgICIiIgorICAgIEEgbWFuYWdlciBpbnRlcmZhY2UvbWl4aW4gZm9yIGEgcmVz b3VyY2UgdGhhdCBhbGxvd3MgZGVsZXRpbmcgYW5kIHB1cmc9CmluZyB3aGVyZQorICAgIHB1cmdp bmcgaXMgb2Z0ZW4gcmVtb3ZhbCBvZiBzb21lIGFkZGl0aW9uYWwsIG5vbi1kYiByZXNvdXJjZSAo ZS5nLiBhIGQ9CmF0YXNldCdzCisgICAgZmlsZSkuCisgICAgIiIiCj0yMAogICAgIGRlZiBwdXJn ZSggc2VsZiwgdHJhbnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSwgKiprd2FyZ3MgKToKKyAgICAgICAg IiIiCisgICAgICAgIE1hcmsgYXMgcHVyZ2VkIGFuZCByZXR1cm4uCisKKyAgICAgICAgT3ZlcnJp ZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvIGRvIHRoZSBhZGRpdGlvbmFsIHJlc291cmNlIHJlbW92 YWwuCisgICAgICAgICIiIgogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCiAg ICAgICAgIGl0ZW0ucHVyZ2VkID0zRCBUcnVlCiAgICAgICAgIGlmIGZsdXNoOgpAQCAtMzI2LDMy ICszNzUsMTIyIEBACj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIEFjY2Vzc2libGVNb2RlbEludGVy ZmFjZSggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQSBzZWN1cml0eSBpbnRlcmZhY2UgdG8gY2hl Y2sgaWYgYSBVc2VyIGNhbiByZWFkL3ZpZXcgYW4gaXRlbSdzLgorCisgICAgVGhpcyBjYW4gYWxz byBiZSB0aG91Z2h0IG9mIGFzICdyZWFkIGJ1dCBub3QgbW9kaWZ5JyBwcml2aWxlZ2VzLgorICAg ICIiIgo9MjAKICAgICAjIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgYnlfaWQgc2luY2UgY29uc3Vt ZXJzIHdpbGwgYWxzbyB3YW50IHRvIGZldGNoPQogdy9vIGFueSBzZWN1cml0eSBjaGVja3MKKyAg ICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGl0ZW0sIHVzZXIgKToKKyAgICAgICAg IiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBpdGVtIGFjY2Vzc2libGUgdG8gdXNlci4K KyAgICAgICAgIiIiCisgICAgICAgICMgb3ZlcnJpZGUgaGVyZQorICAgICAgICByYWlzZSBleGNl cHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNlIE1ldGhvZCIgKQorICAg ICAgICAjT1I/IHJldHVybiBGYWxzZQo9MjAKICAgICBkZWYgYWNjZXNzaWJsZV9ieV9pZCggc2Vs ZiwgdHJhbnMsIGlkLCB1c2VyLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0 dXJuIHRoZSBpdGVtIHdpdGggdGhlIGdpdmVuIGlkIGlmIGl0J3MgYWNjZXNzaWJsZSB0byB1c2Vy LAorICAgICAgICBvdGhlcndpc2UgcmFpc2UgYW4gZXJyb3IuCisKKyAgICAgICAgOnJhaXNlcyBl eGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uOgorICAgICAgICAiIiIKICAgICAg ICAgaXRlbSA9M0QgTW9kZWxNYW5hZ2VyLmJ5X2lkKCBzZWxmLCB0cmFucywgaWQgKQogICAgICAg ICByZXR1cm4gc2VsZi5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggdHJhbnMsIGl0ZW0sIHVzZXIg KQo9MjAKICAgICBkZWYgZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCBpdGVt LCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgaXRl bSBpcyBOT1QgYWNjZXNzaWJsZSB0byB1c2VyLCBvdGhlcndpc2UgcmU9CnR1cm4gdGhlIGl0ZW0u CisKKyAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9u OgorICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5pc19hY2Nlc3NpYmxlKCB0cmFucywgaXRl bSwgdXNlciApOgogICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAgICAgcmFpc2UgZXhjZXB0 aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiggIiVzIGlzIG5vdCBhY2Nlc3NpYmxlPQog YnkgdXNlciIgJSBzZWxmLm1vZGVsX2NsYXNzX25hbWUgKQorICAgICAgICByYWlzZSBleGNlcHRp b25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uKCAiJXMgaXMgbm90IGFjY2Vzc2libGU9CiBi eSB1c2VyIiAlICggc2VsZi5tb2RlbF9jbGFzcy5fX25hbWVfXyApICkKPTIwCi0gICAgZGVmIGlz X2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyICk6Ci0gICAgICAgIHJhaXNlIGV4 Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWQoICJBYnN0cmFjdCBJbnRlcmZhY2UgTWV0aG9kIiApCi0g ICAgICAgICNPUj8gcmV0dXJuIEZhbHNlCisgICAgI1RPRE86Pz8gYXJlIHRoZXNlIGV2ZW4gdXNl ZnVsPworICAgIGRlZiBsaXN0X2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJn cyApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBpdGVtcyBhY2Nlc3Np YmxlIHRvIHRoZSB1c2VyLCByYWlzaW5nIGFuIGVycm9yIGlmPQogQU5ZCisgICAgICAgIGFyZSBp bmFjY2Vzc2libGUuCj0yMAotICAgIGRlZiBsaXN0X2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCB1 c2VyLCAqKmt3YXJncyApOgorICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2li aWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJl IGEgbGFyZ2UsIGluZWZmaWNpZW50IGxpc3QgaWYgZmlsdGVycyBhcmUgcGFzc2U9CmQgaW4ga3dh cmdzCiAgICAgICAgIGl0ZW1zID0zRCBNb2RlbE1hbmFnZXIubGlzdCggc2VsZiwgdHJhbnMsICoq a3dhcmdzICkKICAgICAgICAgcmV0dXJuIFsgc2VsZi5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSgg dHJhbnMsIGl0ZW0sIHVzZXIgKSBmb3IgaXRlPQptIGluIGl0ZW1zIF0KPTIwCiAgICAgZGVmIGZp bHRlcl9hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3MgKToKKyAgICAgICAg IiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgaXRlbXMgYWNjZXNzaWJsZSB0byB0aGUgdXNl ci4KKyAgICAgICAgIiIiCisgICAgICAgICNOT1RFOiB0aGlzIHdpbGwgYmUgYSBsYXJnZSwgaW5l ZmZpY2llbnQgbGlzdCBpZiBmaWx0ZXJzIGFyZSBwYXNzZT0KZCBpbiBrd2FyZ3MKICAgICAgICAg aXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQogICAg ICAgICByZXR1cm4gZmlsdGVyKCBsYW1iZGEgaXRlbTogc2VsZi5pc19hY2Nlc3NpYmxlKCB0cmFu cywgaXRlbSwgdXNlciA9CiksIGl0ZW1zICkKPTIwCj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIE93 bmFibGVNb2RlbEludGVyZmFjZSggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQSBzZWN1cml0eSBp bnRlcmZhY2UgdG8gY2hlY2sgaWYgYSBVc2VyIGlzIGFuIGl0ZW0ncyBvd25lci4KKworICAgIFNv bWUgcmVzb3VyY2VzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIFVzZXIgdGhhdCBjcmVhdGVkIG9y IGltcG9ydGVkIHQ9CmhlbQorICAgIGFuZCB0aGVzZSBVc2VycyBjYW4gYmUgY29uc2lkZXJlZCB0 aGUgbW9kZWxzJyBvd25lci4KKworICAgIFRoaXMgY2FuIGFsc28gYmUgdGhvdWdodCBvZiBhcyB3 cml0ZS9lZGl0IHByaXZpbGVnZXMuCisgICAgIiIiCisKKyAgICBkZWYgaXNfb3duZXIoIHNlbGYs IHRyYW5zLCBpdGVtLCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVHJ1ZSBp ZiB1c2VyIG93bnMgdGhlIGl0ZW0uCisgICAgICAgICIiIgorICAgICAgICAjIG92ZXJyaWRlIGhl cmUKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZCggIkFic3RyYWN0IElu dGVyZmFjZSBNZXRob2QiICkKKyAgICAgICAgI09SPyByZXR1cm4gRmFsc2UKKworICAgIGRlZiBv d25lZF9ieV9pZCggc2VsZiwgdHJhbnMsIGlkLCB1c2VyLCAqKmt3YXJncyApOgorICAgICAgICAi IiIKKyAgICAgICAgUmV0dXJuIHRoZSBpdGVtIHdpdGggdGhlIGdpdmVuIGlkIGlmIG93bmVkIGJ5 IHRoZSB1c2VyLAorICAgICAgICBvdGhlcndpc2UgcmFpc2UgYW4gZXJyb3IuCisKKyAgICAgICAg OnJhaXNlcyBleGNlcHRpb25zLkl0ZW1Pd25lcnNoaXBFeGNlcHRpb246CisgICAgICAgICIiIgor ICAgICAgICBpdGVtID0zRCBNb2RlbE1hbmFnZXIuYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCApCisg ICAgICAgIHJldHVybiBzZWxmLmVycm9yX3VubGVzc19vd25lciggdHJhbnMsIGl0ZW0sIHVzZXIg KQorCisgICAgZGVmIGVycm9yX3VubGVzc19vd25lciggc2VsZiwgdHJhbnMsIGl0ZW0sIHVzZXIg KToKKyAgICAgICAgIiIiCisgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBpdGVtIGlzIE5P VCBvd25lZCBieSB1c2VyLCBvdGhlcndpc2UgcmV0dXJuID0KdGhlIGl0ZW0uCisKKyAgICAgICAg OnJhaXNlcyBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uOgorICAgICAgICAi IiIKKyAgICAgICAgaWYgc2VsZi5pc19vd25lciggdHJhbnMsIGl0ZW0sIHVzZXIgKToKKyAgICAg ICAgICAgIHJldHVybiBpdGVtCisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVyc2hp cEV4Y2VwdGlvbiggIiVzIGlzIG5vdCBvd25lZCBieSB1c2VyIj0KICUgKCBzZWxmLm1vZGVsX2Ns YXNzLl9fbmFtZV9fICkgKQorCisgICAgI1RPRE86Pz8gYXJlIHRoZXNlIGV2ZW4gdXNlZnVsPyBE b2Vzbid0IGJ5X3VzZXIgd29yayBoZXJlIG1vc3Qgb2Z0ZW4/CisgICAgZGVmIGxpc3Rfb3duZWQo IHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0 dXJuIGEgbGlzdCBvZiBpdGVtcyBvd25lZCBieSB0aGUgdXNlciwgcmFpc2luZyBhbiBlcnJvciBp ZiBBTlkKKyAgICAgICAgYXJlIG5vdC4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRl bUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAgICAjTk9URTogdGhp cyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZmaWNpZW50IGxpc3QgaWYgZmlsdGVycyBhcmUgcGFzc2U9 CmQgaW4ga3dhcmdzCisgICAgICAgIGl0ZW1zID0zRCBNb2RlbE1hbmFnZXIubGlzdCggc2VsZiwg dHJhbnMsICoqa3dhcmdzICkKKyAgICAgICAgcmV0dXJuIFsgc2VsZi5lcnJvcl91bmxlc3Nfb3du ZXIoIHRyYW5zLCBpdGVtLCB1c2VyICkgZm9yIGl0ZW0gaW4gPQppdGVtcyBdCisKKyAgICBkZWYg ZmlsdGVyX293bmVkKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIi CisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgaXRlbXMgb3duZWQgYnkgdGhlIHVzZXIuCisgICAg ICAgICIiIgorICAgICAgICBpdGVtcyA9M0QgTW9kZWxNYW5hZ2VyLmxpc3QoIHNlbGYsIHRyYW5z LCAqKmt3YXJncyApCisgICAgICAgIHJldHVybiBmaWx0ZXIoIGxhbWJkYSBpdGVtOiBzZWxmLmlz X293bmVkKCB0cmFucywgaXRlbSwgdXNlciApLCBpdD0KZW1zICkKKworCisjID0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRCBT RVJJQUxJWkVSUy90b19kaWN0LGZyb21fZGljdAogY2xhc3MgTW9kZWxTZXJpYWxpemluZ0Vycm9y KCBleGNlcHRpb25zLk9iamVjdEF0dHJpYnV0ZUludmFsaWRFeGNlcHRpb24gKToKICAgICAiIiJU aHJvd24gd2hlbiByZXF1ZXN0IG1vZGVsIHZhbHVlcyBjYW4ndCBiZSBzZXJpYWxpemVkIiIiCiAg ICAgI1RPRE86IGJldHRlciBhcyA1MDA/CkBAIC0zNjcsMTUgKzUwNiwyNiBAQAo9MjAKICMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPQotLS0tLQogY2xhc3MgTW9kZWxTZXJpYWxpemVyKCBvYmplY3QgKToKLSAg ICAjbW9kZWxfbWdyX2NsYXNzID0zRCBOb25lCisgICAgIiIiCisgICAgVHVybnMgbW9kZWxzIGlu dG8gSlNPTmFibGUgZGljdHMuCj0yMAotICAgICMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciB0dXJu aW5nIG1vZGVscyBpbnRvL2Zyb20gSlNPTmFibGUgZGljdHMKLSAgICAjICAgbW9kZWwgICAtLT4g TW9kZWxTZXJpYWxpemVyIC0tPiBKU09OCi0gICAgIyAgIEpTT04gICAgLS0+IE1vZGVsU2VyaWFs aXplciAtLT4gbW9kZWwKKyAgICBNYWludGFpbnMgYSBtYXAgb2YgcmVxdWVzdGFibGUga2V5cyBh bmQgdGhlIENhbGxhYmxlKCkgc2VyaWFsaXplciBmdW5jPQp0aW9ucworICAgIHRoYXQgc2hvdWxk IGJlIGNhbGxlZCBmb3IgdGhvc2Uga2V5cy4KKyAgICBFLmcuIHsgJ3gnIDogbGFtYmRhIHRyYW5z LCBpdGVtLCBrZXk6IGl0ZW0ueCwgLi4uIH0KKworICAgIFRvIHNlcmlhbGl6ZSBjYWxsOgorICAg ICAgICBteV9zZXJpYWxpemVyID0zRCBNeVNlcmlhbGl6ZXIoIGFwcCApCisgICAgICAgIC4uLgor ICAgICAgICBrZXlzX3RvX3NlcmlhbGl6ZSA9M0QgWyAnaWQnLCAnbmFtZScsICdhdHRyMScsICdh dHRyMicsIC4uLiBdCisgICAgICAgIGl0ZW1fZGljdCA9M0QgTXlTZXJpYWxpemVyLnNlcmlhbGl6 ZSggdHJhbnMsIG15X2l0ZW0sIGtleXNfdG9fc2VyaT0KYWxpemUgKQorICAgICAgICAjIGlmIGEg a2V5IHRvIHNlcmlhbGl6ZSBpcyBub3QgbGlzdGVkIGluIHRoZSBTZXJpYWxpemVyLnNlcmlhbGl6 YWI9CmxlX2tleXMgb3Igc2VyaWFsaXplcnMsIGl0IHdpbGwgbm90IGJlIGFkZGVkCisgICAgIiIi CisKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICAiIiIKKyAgICAgICAg U2V0IHVwIHNlcmlhbGl6ZXIgbWFwLCBhbnkgYWRkaXRpb25hbCBzZXJpYWxpemFibGUga2V5cywg YW5kIHZpZXdzPQogaGVyZS4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXBwID0zRCBhcHAK LSAgICAgICAgI1RPRE86Ci0gICAgICAgICNzZWxmLm1nciA9M0QgbW9kZWxfbWdyX2NsYXNzKCBh cHAgKQogICAgICAgID0yMAogICAgICAgICAjIGEgbWFwIG9mIGRpY3Rpb25hcnkga2V5cyB0byB0 aGUgZnVuY3Rpb25zIChvZnRlbiBsYW1iZGFzKSB0aGF0IGM9CnJlYXRlIHRoZSB2YWx1ZXMgZm9y IHRob3NlIGtleXMKICAgICAgICAgc2VsZi5zZXJpYWxpemVycyA9M0Qge30KQEAgLTM5NSwxNCAr NTQ1LDIyIEBACj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIHNlcmlhbGl6aW5nCiAgICAg ZGVmIGFkZF9zZXJpYWxpemVycyggc2VsZiApOgotICAgICAgICAjIHJlZ2lzdGVyIGEgbWFwIG9m IGF0dHJpYnV0ZSBrZXlzIC0+IGZ1bmN0aW9ucyB0aGF0IHdpbGwgc2VyaWFsaXo9CmUgdGhlIGF0 dHJpYnV0ZQorICAgICAgICAiIiIKKyAgICAgICAgUmVnaXN0ZXIgYSBtYXAgb2YgYXR0cmlidXRl IGtleXMgLT4gc2VyaWFsaXppbmcgZnVuY3Rpb25zIHRoYXQgd2lsPQpsIHNlcmlhbGl6ZQorICAg ICAgICB0aGUgYXR0cmlidXRlLgorICAgICAgICAiIiIKICAgICAgICAgIyB0byBiZSBvdmVycmlk ZGVuIGluIHN1YmNsYXNzZXMKICAgICAgICAgcGFzcwo9MjAKICAgICBkZWYgc2VyaWFsaXplKCBz ZWxmLCB0cmFucywgaXRlbSwga2V5cyApOgorICAgICAgICAiIiIKKyAgICAgICAgU2VyaWFsaXpl IHRoZSBtb2RlbCBgaXRlbWAgdG8gYSBkaWN0aW9uYXJ5LgorCisgICAgICAgIEdpdmVuIG1vZGVs IGBpdGVtYCBhbmQgdGhlIGxpc3QgYGtleXNgLCBjcmVhdGUgYW5kIHJldHVybiBhIGRpY3Rpbz0K bmFyeQorICAgICAgICBidWlsdCBmcm9tIGVhY2gga2V5IGluIGBrZXlzYCB0aGF0IGFsc28gZXhp c3RzIGluIGBzZXJpYWxpemVyc2AgYW5kCisgICAgICAgIHZhbHVlcyBvZiBjYWxsaW5nIHRoZSBr ZXllZC9uYW1lZCBzZXJpYWxpemVycyBvbiBpdGVtLgorICAgICAgICAiIiIKICAgICAgICAgIyBt YWluIGludGVyZmFjZSBmbiBmb3IgY29udmVydGluZyBhIG1vZGVsIHRvIGEgZGljdAotI1RPRE86 IHRyeS9jYXRjaCBoZXJlPyBhZGQgb3B0aW9uICdmYWlsX2Zhc3QnLydyYWlzZScgdG8gYWxsb3cg b3B0aW9uYWxseSA9CipjYXRjaGluZyogdGhlIGVycm9yIHdpdGhvdXQgcmFpc2luZyBpdAotIyAg IChhbmQgdGhlbiByZXR1cm5pbmcgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIHNlcmlhbGl6ZWQg ZGF0YSkKICAgICAgICAgcmV0dXJuZWQgPTNEIHt9CiAgICAgICAgIGZvciBrZXkgaW4ga2V5czoK ICAgICAgICAgICAgICMgY2hlY2sgYm90aCBzZXJpYWxpemVycyBhbmQgc2VyaWFsaXphYmxlIGtl eXMKQEAgLTQxMywyMSArNTcxLDMzIEBACiAgICAgICAgICAgICAjIGlnbm9yZSBiYWQvdW5yZWcg a2V5cwogICAgICAgICByZXR1cm4gcmV0dXJuZWQKPTIwCi0gICAgIyAuLi4gY29tbW9uIGRlc2Vy aWFsaXplcnMgZm9yIHByaW1pdGl2ZXMKICAgICBkZWYgZGVmYXVsdF9zZXJpYWxpemVyKCBzZWxm LCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgICIiIgorICAgICAgICBTZXJpYWxpemUgdGhl IGBpdGVtYCdzIGF0dHJpYnV0ZSBuYW1lZCBga2V5YC4KKyAgICAgICAgIiIiCisgICAgICAgICNU T0RPOj8/IHBvaW50IG9mIGNoYW5nZSBidXQgbm90IHJlYWxseSBuZWNlc3Nhcnk/CiAgICAgICAg IHJldHVybiBnZXRhdHRyKCBpdGVtLCBrZXkgKQo9MjAKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4u LiBzZXJpYWxpemVycyBmb3IgY29tbW9uIGdhbGF4eSBvYmplY3RzCiAgICAgZGVmIHNlcmlhbGl6 ZV9kYXRlKCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgICIiIgorICAgICAgICBT ZXJpYWxpemUgYSBkYXRlIGF0dHJpYnV0ZSBvZiBgaXRlbWAuCisgICAgICAgICIiIgogICAgICAg ICBkYXRlID0zRCBnZXRhdHRyKCBpdGVtLCBrZXkgKQogICAgICAgICByZXR1cm4gZGF0ZS5pc29m b3JtYXQoKSBpZiBkYXRlIGlzIG5vdCBOb25lIGVsc2UgTm9uZQo9MjAKLSAgICAjIC4uLi4gY29t bW9uIHNlcmlhbGl6ZXJzIGZvciBHYWxheHkKICAgICBkZWYgc2VyaWFsaXplX2lkKCBzZWxmLCB0 cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgICIiIgorICAgICAgICBTZXJpYWxpemUgYW4gaWQg YXR0cmlidXRlIG9mIGBpdGVtYC4KKyAgICAgICAgIiIiCiAgICAgICAgIGlkID0zRCBnZXRhdHRy KCBpdGVtLCBrZXkgKQogICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBp ZCApIGlmIGlkIGlzIG5vdCBOb25lIGVsc2UgTm9uZQo9MjAKICAgICAjVE9ETzogQW5ub3RhdGFi bGVNaXhpbgogICAgIGRlZiBzZXJpYWxpemVfYW5ub3RhdGlvbiggc2VsZiwgdHJhbnMsIGl0ZW0s IGtleSApOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGFuZCBzZXJpYWxpemUgYW4gYGl0ZW1g J3MgYW5ub3RhdGlvbi4KKyAgICAgICAgIiIiCiAjVE9ETzogd2hpY2ggaXMgY29ycmVjdCBoZXJl PwogICAgICAgICAjdXNlciA9M0QgaXRlbS51c2VyCiAgICAgICAgIHVzZXIgPTNEIHRyYW5zLnVz ZXIKQEAgLTQzNSw0MSArNjA1LDUzIEBACj0yMAogICAgICNUT0RPOiBUYWdnYWJsZU1peGluCiAg ICAgZGVmIHNlcmlhbGl6ZV90YWdzKCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAg ICIiIgorICAgICAgICBHZXQgYW5kIHNlcmlhbGl6ZSBhbiBgaXRlbWAncyB0YWdzLgorICAgICAg ICAiIiIKICNUT0RPOiB3aG9zZSB0YWdzIGFyZSB0aGVzZT8KICAgICAgICAgcmV0dXJuIFsgdGFn LnVzZXJfdG5hbWUgKyAoICc6JyArIHRhZy51c2VyX3ZhbHVlIGlmIHRhZy51c2VyX3ZhbHVlPQog ZWxzZSAnJyApIGZvciB0YWcgaW4gaXRlbS50YWdzIF0KPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0K Li4uLi4gc2VyaWFsaXppbmcgdG8gYSB2aWV3CiAgICAgIyB3aGVyZSBhIHZpZXcgaXMgYSBwcmVk ZWZpZWQgbGlzdCBvZiBrZXlzIHRvIHNlcmlhbGl6ZQotICAgIGRlZiBzZXJpYWxpemVfdG9fdmll dyggc2VsZiwgdHJhbnMsIGl0ZW0sIHZpZXc9M0ROb25lLCBrZXlzPTNETm9uZSApOgotI1RPRE86 IGlmIGtleXMgYW5kIHZpZXcgLSBtdW5nZSB2aWV3IGFuZCBrZXlzCi0jICAgIDogaWYga2V5cyBi dXQgbm8gdmlldyAtIHVzZSBrZXlzCi0jICAgIDogaWYgbm8ga2V5cyBidXQgdmlldyAtIHVzZSB2 aWV3Ci0jICAgIDogaWYgbm8ga2V5cyBhbmQgbm8gdmlldyAtIHVzZSBkZWZhdWx0IHZpZXcKKyAg ICBkZWYgc2VyaWFsaXplX3RvX3ZpZXcoIHNlbGYsIHRyYW5zLCBpdGVtLCB2aWV3PTNETm9uZSwg a2V5cz0zRE5vbmUsIGRlPQpmYXVsdF92aWV3PTNETm9uZSApOgorICAgICAgICAiIiIKKyAgICAg ICAgVXNlIGEgcHJlZGVmaW5lZCBsaXN0IG9mIGtleXMgKHRoZSBzdHJpbmcgYHZpZXdgKSBhbmQg YW55IGFkZGl0aW9uPQphbCBrZXlzCisgICAgICAgIGxpc3RlZCBpbiBga2V5c2AuCisKKyAgICAg ICAgVGhlIGNvbWJpbmF0aW9ucyBjYW4gYmU6CisgICAgICAgICAgICBgdmlld2Agb25seTogcmV0 dXJuIHRob3NlIGtleXMgbGlzdGVkIGluIHRoZSBuYW1lZCB2aWV3CisgICAgICAgICAgICBga2V5 c2Agb25seTogcmV0dXJuIHRob3NlIGtleXMgbGlzdGVkCisgICAgICAgICAgICBubyBgdmlld2Ag b3IgYGtleXNgOiB1c2UgdGhlIGBkZWZhdWx0X3ZpZXdgIGlmIGFueQorICAgICAgICAgICAgYHZp ZXdgIGFuZCBga2V5c2A6IGNvbWJpbmUgYm90aCBpbnRvIG9uZSBsaXN0IG9mIGtleXMKKyAgICAg ICAgIiIiCisgICAgICAgIGFsbF9rZXlzID0zRCBbXQogICAgICAgICBrZXlzID0zRCBrZXlzIG9y IFtdCi0gICAgICAgIGFsbF9rZXlzID0zRCBzZWxmLnZpZXdfdG9fbGlzdCggdmlldyApICsga2V5 cworICAgICAgICAjIGNob3NlIGV4cGxpY2l0IG92ZXIgY29uY2lzZSBoZXJlCisgICAgICAgIGlm IHZpZXc6CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGFsbF9rZXlzID0z RCBzZWxmLl92aWV3X3RvX2tleXMoIHZpZXcgKSArIGtleXMKKyAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgYWxsX2tleXMgPTNEIHNlbGYuX3ZpZXdfdG9fa2V5cyggdmlldyApCisg ICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGFsbF9r ZXlzID0zRCBrZXlzCisgICAgICAgICAgICBlbGlmIGRlZmF1bHRfdmlldzoKKyAgICAgICAgICAg ICAgICBhbGxfa2V5cyA9M0Qgc2VsZi5fdmlld190b19rZXlzKCBkZWZhdWx0X3ZpZXcgKQorCiAg ICAgICAgIHJldHVybiBzZWxmLnNlcmlhbGl6ZSggdHJhbnMsIGl0ZW0sIGFsbF9rZXlzICkKPTIw Ci0gICAgZGVmIHZpZXdfdG9fbGlzdCggc2VsZiwgdmlldz0zRE5vbmUgKToKKyAgICBkZWYgX3Zp ZXdfdG9fa2V5cyggc2VsZiwgdmlldz0zRE5vbmUgKToKKyAgICAgICAgIiIiCisgICAgICAgIENv bnZlcnRzIGEga25vd24gdmlldyBpbnRvIGEgbGlzdCBvZiBrZXlzLgorCisgICAgICAgIDpyYWlz ZXMgTW9kZWxTZXJpYWxpemluZ0Vycm9yOiBpZiB0aGUgdmlldyBpcyBub3QgbGlzdGVkIGluIGBz ZWxmLj0Kdmlld3NgLgorICAgICAgICAiIiIKICAgICAgICAgaWYgdmlldyBpcyBOb25lOgogICAg ICAgICAgICAgdmlldyA9M0Qgc2VsZi5kZWZhdWx0X3ZpZXcKICAgICAgICAgaWYgdmlldyBub3Qg aW4gc2VsZi52aWV3czoKICAgICAgICAgICAgIHJhaXNlIE1vZGVsU2VyaWFsaXppbmdFcnJvcigg J3Vua25vd24gdmlldycsIHZpZXc9M0R2aWV3LCBhdmFpPQpsYWJsZV92aWV3cz0zRHNlbGYudmll d3MgKQogICAgICAgICByZXR1cm4gc2VsZi52aWV3c1sgdmlldyBdCj0yMAotICAgICNUT0RPOiB0 aGlzIGlzIG1vcmUgdXRpbC9nZW4uIHVzZQotICAgIGRlZiBwbHVja19mcm9tX2xpc3QoIHNlbGYs IGwsIGVsZW1zICk6Ci0gICAgICAgICIiIgotICAgICAgICBSZW1vdmVzIGZvdW5kIGVsZW1zIGZy b20gbGlzdCBsIGFuZCByZXR1cm5zIGxpc3Qgb2YgZm91bmQgZWxlbXMgaWY9CiBmb3VuZC4KLSAg ICAgICAgIiIiCi0gICAgICAgIGZvdW5kID0zRCBbXQotICAgICAgICBmb3IgZWxlbSBpbiBlbGVt czoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbmRleCA9M0QgbC5pbmRleCgg ZWxlbSApCi0gICAgICAgICAgICAgICAgZm91bmQuYXBwZW5kKCBsLnBvcCggaW5kZXggKSApCi0g ICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgdmFsX2VycjoKLSAgICAgICAgICAgICAgICBw YXNzCi0gICAgICAgIHJldHVybiBmb3VuZAotCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gYWxp YXNlcwogICAgICNkZWYgdG9fZGljdCggc2VsZiwgdHJhbnMsIGl0ZW0sIHZpZXc9M0ROb25lLCB2 aWV3X2tleXM9M0ROb25lICk6CiAgICAgIyAgICB2aWV3X2tleXMgPTNEIHZpZXdfa2V5cyBvciBz ZWxmLnZpZXdfdG9fbGlzdCggdmlldyApCkBAIC00NzcsOTUgKzY1OSw1OCBAQAo9MjAKPTIwCiAj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0KLWNsYXNzIE1vZGVsVmFsaWRhdG9yKCBvYmplY3QgKToK K2NsYXNzIE1vZGVsRGVzZXJpYWxpemVyKCBvYmplY3QgKToKKyAgICAiIiIKKyAgICBBbiBvYmpl Y3QgdGhhdCBjb252ZXJ0cyBhbiBpbmNvbWluZyBzZXJpYWxpemVkIGRpY3QgaW50byB2YWx1ZXMg dGhhdCBjPQphbiBiZQorICAgIGRpcmVjdGx5IGFzc2lnbmVkIHRvIGFuIGl0ZW0ncyBhdHRyaWJ1 dGVzIGFuZCBhc3NpZ25zIHRoZW0uCisgICAgIiIiCisgICAgI1RPRE86Pz8gSSdtIG5vdCBjb252 aW5jZXMgdGhlIGZvbGxvd2luZyB0d28gbmVlZCB0byBleGlzdC4uLgo9MjAKLSAgICBkZWYgX19p bml0X18oIHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzICk6CisgICAgZGVmIF9faW5pdF9fKCBz ZWxmLCBhcHAgKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB1cCBkZXNlcmlhbGl6ZXJzIGFu ZCB2YWxpZGF0b3IuCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCj0yMAot ICAgIGRlZiB0eXBlKCBzZWxmLCBrZXksIHZhbCwgdHlwZXMgKToKLSAgICAgICAgaWYgbm90IGlz aW5zdGFuY2UoIHZhbCwgdHlwZXMgKToKLSAgICAgICAgICAgIG1zZyA9M0QgJ211c3QgYmUgYSB0 eXBlOiAlcycgJSAoIHN0ciggdHlwZXMgKSApCi0gICAgICAgICAgICByYWlzZSBleGNlcHRpb25z LlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uKCBtc2csIGtleT0zRD0Ka2V5LCB2YWw9 M0R2YWwgKQotICAgICAgICByZXR1cm4gdmFsCi0KLSAgICAjIHZhbGlkYXRvcnMgZm9yIHByaW1p dGl2ZXMKLSAgICBkZWYgYmFzZXN0cmluZyggc2VsZiwga2V5LCB2YWwgKToKLSAgICAgICAgcmV0 dXJuIHNlbGYudHlwZSgga2V5LCB2YWwsIGJhc2VzdHJpbmcgKQotCi0gICAgZGVmIG51bGxhYmxl X2Jhc2VzdHJpbmcoIHNlbGYsIGtleSwgdmFsICk6Ci0gICAgICAgIHJldHVybiBzZWxmLnR5cGUo IGtleSwgdmFsLCAoIGJhc2VzdHJpbmcsIHR5cGUoIE5vbmUgKSApICkKLQotICAgIGRlZiBib29s KCBzZWxmLCBrZXksIHZhbCApOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlKCBrZXksIHZhbCwg Ym9vbCApCi0KLSAgICBkZWYgaW50KCBzZWxmLCBrZXksIHZhbCApOgotICAgICAgICByZXR1cm4g c2VsZi50eXBlKCBrZXksIHZhbCwgaW50ICkKLQotICAgIGRlZiBpbnRfcmFuZ2UoIHNlbGYsIGtl eSwgdmFsLCBtaW49M0ROb25lLCBtYXg9M0ROb25lICk6Ci0gICAgICAgIHZhbCA9M0Qgc2VsZi50 eXBlKCBrZXksIHZhbCwgaW50ICkKLSAgICAgICAgaWYgdmFsIDwgbWluOgotICAgICAgICAgICAg cmFpc2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFyYW1ldGVySW52YWxpZEV4Y2VwdGlvbiggImxlc3Mg dGhhbiA9Cm1pbmltdW0iLCBrZXk9M0RrZXksIHZhbD0zRHZhbCwgbWluPTNEbWluICkKLSAgICAg ICAgaWYgdmFsID4gbWF4OgotICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFy YW1ldGVySW52YWxpZEV4Y2VwdGlvbiggImdyZWF0ZXIgdGg9CmFuIG1heGltdW0iLCBrZXk9M0Rr ZXksIHZhbD0zRHZhbCwgbWF4PTNEbWF4ICkKLSAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgZGVm IGJhc2VzdHJpbmdfbGlzdCggc2VsZiwga2V5LCB2YWwgKToKLSAgICAgICAgdmFsID0zRCBzZWxm LnR5cGUoIGtleSwgdmFsLCBsaXN0ICkKLSAgICAgICAgcmV0dXJuIFsgc2VsZi5iYXNlc3RyaW5n KCBrZXksIGVsZW0gKSBmb3IgZWxlbSBpbiB2YWwgXQotCi0gICAgIyB2YWxpZGF0b3JzIGZvciBH YWxheHkKLSAgICBkZWYgZ2Vub21lX2J1aWxkKCBzZWxmLCB0cmFucywga2V5LCB2YWwgKToKLSAg ICAgICAgI1RPRE86IGlzIHRoaXMgY29ycmVjdD8KLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0g ICAgICAgICAgICByZXR1cm4gJz8nCi0gICAgICAgICMgd290Li4ud2h5IHR1cGxlcz8KLSAgICAg ICAgaWYgdmFsIG5vdCBpbiBkaWN0KCB0cmFucy5kYl9idWlsZHMgKToKLSAgICAgICAgICAgIHJh aXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24oICJpbnZhbGlk IHJlPQpmZXJlbmNlIiwga2V5PTNEa2V5LCB2YWw9M0R2YWwgKQotICAgICAgICByZXR1cm4gdmFs Ci0KLSAgICAjZGVmIHNsdWcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApOgotICAgICMg ICAgIiIidmFsaWRhdGUgc2x1ZyIiIgotICAgICMgICAgcGFzcwotCi0KLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPQotLS0tLQotY2xhc3MgTW9kZWxEZXNlcmlhbGl6ZXIoIG9iamVjdCApOgotICAgICNtb2Rl bF9tZ3JfY2xhc3MgPTNEIE5vbmUKLQotICAgICMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBjcmVh dGluZyBtb2RlbHMgZnJvbSBkaWN0cwotICAgICMgICBEaWN0ICAgIC0tPiBNb2RlbERlc2VyaWFs aXplciAtLT4gbW9kZWwKLSAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgotICAgICAgICBz ZWxmLmFwcCA9M0QgYXBwCi0gICAgICAgICNUT0RPOgotICAgICAgICAjc2VsZi5tZ3IgPTNEIG1v ZGVsX21ncl9jbGFzcyggYXBwICkKLQogICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnMgPTNEIHt9 CiAgICAgICAgIHNlbGYuYWRkX2Rlc2VyaWFsaXplcnMoKQogICAgICAgICBzZWxmLmRlc2VyaWFs aXphYmxlX2tleXMgPTNEIFtdCisgICAgICAgICMgYSBzdWIgb2JqZWN0IHRoYXQgY2FuIHZhbGlk YXRlIGluY29taW5nIHZhbHVlcwogICAgICAgICBzZWxmLnZhbGlkYXRlID0zRCBNb2RlbFZhbGlk YXRvciggc2VsZi5hcHAgKQo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZXNlcmlhbGl6 aW5nCiAgICAgZGVmIGFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6Ci0gICAgICAgICMgcmVnaXN0 ZXIgYSBtYXAgb2YgYXR0cmlidXRlIGtleXMgLT4gZnVuY3Rpb25zIHRoYXQgd2lsbCBkZXNlcmlh bD0KaXplIGRhdGEgaW50byB0aGUgYXR0cmlidXRlCisgICAgICAgICIiIgorICAgICAgICBSZWdp c3RlciBhIG1hcCBvZiBhdHRyaWJ1dGUga2V5cyAtPiBmdW5jdGlvbnMgdGhhdCB3aWxsIGRlc2Vy aWFsaXo9CmUgZGF0YQorICAgICAgICBpbnRvIGF0dHJpYnV0ZXMgdG8gYmUgYXNzaWduZWQgdG8g dGhlIGl0ZW0uCisgICAgICAgICIiIgogICAgICAgICAjIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3Vi Y2xhc3NlcwogICAgICAgICBwYXNzCj0yMAogICAgIGRlZiBkZXNlcmlhbGl6ZSggc2VsZiwgdHJh bnMsIGl0ZW0sIGRhdGEsIGZsdXNoPTNEVHJ1ZSApOgorICAgICAgICAiIiIKKyAgICAgICAgQ29u dmVydCBhbiBpbmNvbWluZyBzZXJpYWxpemVkIGRpY3QgaW50byB2YWx1ZXMgdGhhdCBjYW4gYmUK KyAgICAgICAgZGlyZWN0bHkgYXNzaWduZWQgdG8gYW4gaXRlbSdzIGF0dHJpYnV0ZXMgYW5kIGFz c2lnbiB0aGVtCisgICAgICAgICIiIgogICAgICAgICBuZXdfZGljdCA9M0Qge30KICAgICAgICAg Zm9yIGtleSwgdmFsIGluIGRhdGEuaXRlbXMoKToKLSAgICAgICAgICAgICNwcmludCBrZXksIHZh bAogICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuZGVzZXJpYWxpemVyczoKLSAgICAgICAgICAg ICAgICAjcHJpbnQgJ1x0IGRlc2VyaWFsaXplcjonLCBzZWxmLmRlc2VyaWFsaXplcnNbIGtleSBd CiAgICAgICAgICAgICAgICAgbmV3X2RpY3RbIGtleSBdID0zRCBzZWxmLmRlc2VyaWFsaXplcnNb IGtleSBdKCB0cmFucywgaXRlbT0KLCBrZXksIHZhbCApCiAgICAgICAgICAgICAjIWltcG9ydGFu dDogZG9uJ3QgZXJyb3Igb24gdW5yZWcuIGtleXMgLS0gbWFueSBjbGllbnRzIHdpbGwgYT0KZGQg d2VpcmQgYXNzIGtleXMgb250byB0aGUgbW9kZWwKLSAgICAgICAgI1RPRE86Pz8gaGVyZSBvciBp biBtYW5hZ2VyPworCisgICAgICAgICNUT0RPOj8/IGFkZCBhbmQgZmx1c2ggaGVyZSBvciBpbiBt YW5hZ2VyPwogICAgICAgICBpZiBmbHVzaCBhbmQgbGVuKCBuZXdfZGljdCApOgogICAgICAgICAg ICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGl0ZW0gKQogICAgICAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5mbHVzaCgpCisKICAgICAgICAgcmV0dXJuIG5ld19kaWN0Cj0yMAogICAgICMgLi4uIGNv bW1vbiBkZXNlcmlhbGl6ZXJzIGZvciBwcmltaXRpdmVzCiAgICAgZGVmIGRlZmF1bHRfZGVzZXJp YWxpemVyKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAg ICAgIElmIHRoZSBpbmNvbWluZyBgdmFsYCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgYGl0ZW1gIHZh bHVlIGNoYW5nZSBpdAorICAgICAgICBhbmQsIGluIGVpdGhlciBjYXNlLCByZXR1cm4gdGhlIHZh bHVlLgorICAgICAgICAiIiIKICAgICAgICAgI1RPRE86IHNldHMgdGhlIGl0ZW0gYXR0cmlidXRl IHRvIHZhbHVlICh0aGlzIG1heSBub3Qgd29yayBpbiBhbGwgPQppbnN0YW5jZXMpCj0yMAogICAg ICAgICAjIG9ubHkgZG8gdGhlIGZvbGxvd2luZyBpZiB2YWwgPTNEPTNEIGdldGF0dHIoIGl0ZW0s IGtleSApCkBAIC01ODcsMTUgKzczMiwyNiBAQAo9MjAKICAgICAjIC4uLiBjb21tb24gZGVzZXJp YWxpemVycyBmb3IgR2FsYXh5CiAgICAgZGVmIGRlc2VyaWFsaXplX2dlbm9tZV9idWlsZCggc2Vs ZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHN1 cmUgYHZhbGAgaXMgYSB2YWxpZCBkYmtleSBhbmQgYXNzaWduIGl0LgorICAgICAgICAiIiIKICAg ICAgICAgdmFsID0zRCBzZWxmLnZhbGlkYXRlLmdlbm9tZV9idWlsZCggdHJhbnMsIGtleSwgdmFs ICkKICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9kZXNlcmlhbGl6ZXIoIHRyYW5zLCBpdGVt LCBrZXksIHZhbCApCj0yMAogICAgIGRlZiBkZXNlcmlhbGl6ZV9hbm5vdGF0aW9uKCBzZWxmLCB0 cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2Ugc3VyZSBg dmFsYCBpcyBhIHZhbGlkIGFubm90YXRpb24gYW5kIGFzc2lnbiBpdC4KKyAgICAgICAgIiIiCiAg ICAgICAgIHZhbCA9M0Qgc2VsZi52YWxpZGF0ZS5udWxsYWJsZV9iYXNlc3RyaW5nKCBrZXksIHZh bCApCiAgICAgICAgICNUT0RPOiBoYXZlIHRvIGFzc3VtZSB0cmFucy51c2VyIGhlcmUuLi4KICAg ICAgICAgcmV0dXJuIGl0ZW0uYWRkX2l0ZW1fYW5ub3RhdGlvbiggdHJhbnMuc2Ffc2Vzc2lvbiwg dHJhbnMudXNlciwgaXRlPQptLCB2YWwgKQo9MjAKICAgICBkZWYgZGVzZXJpYWxpemVfdGFncygg c2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAgICBNYWtl IHN1cmUgYHZhbGAgaXMgYSB2YWxpZCBsaXN0IG9mIHRhZyBzdHJpbmdzIGFuZCBhc3NpZ24gdGhl bS4KKworICAgICAgICBOb3RlOiB0aGlzIHdpbGwgZXJhc2UgYW55IHByZXZpb3VzIHRhZ3MuCisg ICAgICAgICIiIgogICAgICAgICBuZXdfdGFnc19saXN0ID0zRCBzZWxmLnZhbGlkYXRlLmJhc2Vz dHJpbmdfbGlzdCgga2V5LCB2YWwgKQogICAgICAgICAjVE9ETzogaGF2ZSB0byBhc3N1bWUgdHJh bnMudXNlciBoZXJlLi4uCiAgICAgICAgIHVzZXIgPTNEIHRyYW5zLnVzZXIKQEAgLTYwNSw2ICs3 NjEsOCBAQAogICAgICAgICBuZXdfdGFnc19zdHIgPTNEICcsJy5qb2luKCBuZXdfdGFnc19saXN0 ICkKICAgICAgICAgdGFnX2hhbmRsZXIuYXBwbHlfaXRlbV90YWdzKCB0cmFucywgdXNlciwgaXRl bSwgdW5pY29kZSggbmV3X3RhZ3NfPQpzdHIuZW5jb2RlKCAndXRmLTgnICksICd1dGYtOCcgKSAp CiAgICAgICAgICN0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKworI1RPRE86ISEgZG9lcyB0aGUg Y3JlYXRpb24gb2YgbmV3X3RhZ3NfbGlzdCBtZWFuIHRoZXJlIGFyZSBub3cgbW9yZSBhbmQgbW89 CnJlIHVudXNlZCB0YWcgcm93cyBpbiB0aGUgZGI/CiAgICAgICAgIHJldHVybiBpdGVtLnRhZ3MK PTIwCiAgICAgI2RlZiBkZXNlcmlhbGl6ZV9yYXRpbmcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXks IHZhbCApOgpAQCAtNjE3LDEzICs3NzUsOTMgQEAKPTIwCj0yMAogIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09 Ci0tLS0tCisjVE9ETzo/PyBhIGxhcmdlciBxdWVzdGlvbiBpczogd2hpY2ggc2hvdWxkIGJlIGZp cnN0PyBEZXNlcmlhbGl6ZSB0aGVuIHZhbD0KaWRhdGUgLSBvciAtIHZhbGlkYXRlIHRoZW4gZGVz ZXJpYWxpemU/CitjbGFzcyBNb2RlbFZhbGlkYXRvciggb2JqZWN0ICk6CisgICAgIiIiCisgICAg QW4gb2JqZWN0IHRoYXQgaW5zcGVjdHMgYSBkaWN0aW9uYXJ5IChnZW5lcmFsbHkgbWVhbnQgdG8g YmUgYSBzZXQgb2YKKyAgICBuZXcvdXBkYXRlZCB2YWx1ZXMgZm9yIHRoZSBtb2RlbCkgYW5kIHJh aXNlcyBhbiBlcnJvciBpZiBhIHZhbHVlIGlzCisgICAgbm90IGFjY2VwdGFibGUuCisgICAgIiIi CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzICk6CisgICAg ICAgIHNlbGYuYXBwID0zRCBhcHAKKworICAgIGRlZiB0eXBlKCBzZWxmLCBrZXksIHZhbCwgdHlw ZXMgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5j ZSggdmFsLCB0eXBlcyApOgorICAgICAgICAgICAgbXNnID0zRCAnbXVzdCBiZSBhIHR5cGU6ICVz JyAlICggc3RyKCB0eXBlcyApICkKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVz dFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24oIG1zZywga2V5PTNEPQprZXksIHZhbD0zRHZhbCAp CisgICAgICAgIHJldHVybiB2YWwKKworICAgICMgdmFsaWRhdG9ycyBmb3IgcHJpbWl0aXZlcyBh bmQgY29tcG91bmRzIG9mIHByaW1pdGl2ZXMKKyAgICBkZWYgYmFzZXN0cmluZyggc2VsZiwga2V5 LCB2YWwgKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZSgga2V5LCB2YWwsIGJhc2VzdHJpbmcg KQorCisgICAgZGVmIGJvb2woIHNlbGYsIGtleSwgdmFsICk6CisgICAgICAgIHJldHVybiBzZWxm LnR5cGUoIGtleSwgdmFsLCBib29sICkKKworICAgIGRlZiBpbnQoIHNlbGYsIGtleSwgdmFsICk6 CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUoIGtleSwgdmFsLCBpbnQgKQorCisgICAgZGVmIG51 bGxhYmxlX2Jhc2VzdHJpbmcoIHNlbGYsIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAg ICBNdXN0IGJlIGEgYmFzZXN0cmluZyBvciBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0 dXJuIHNlbGYudHlwZSgga2V5LCB2YWwsICggYmFzZXN0cmluZywgdHlwZSggTm9uZSApICkgKQor CisgICAgZGVmIGludF9yYW5nZSggc2VsZiwga2V5LCB2YWwsIG1pbj0zRE5vbmUsIG1heD0zRE5v bmUgKToKKyAgICAgICAgIiIiCisgICAgICAgIE11c3QgYmUgYSBpbnQgYmV0d2VlbiBtaW4gYW5k IG1heC4KKyAgICAgICAgIiIiCisgICAgICAgIHZhbCA9M0Qgc2VsZi50eXBlKCBrZXksIHZhbCwg aW50ICkKKyAgICAgICAgaWYgbWluIGlzIG5vdCBOb25lIGFuZCB2YWwgPCBtaW46CisgICAgICAg ICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uKCAi bGVzcyB0aGFuID0KbWluaW11bSIsIGtleT0zRGtleSwgdmFsPTNEdmFsLCBtaW49M0RtaW4gKQor ICAgICAgICBpZiBtYXggaXMgbm90IE5vbmUgYW5kIHZhbCA+IG1heDoKKyAgICAgICAgICAgIHJh aXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24oICJncmVhdGVy IHRoPQphbiBtYXhpbXVtIiwga2V5PTNEa2V5LCB2YWw9M0R2YWwsIG1heD0zRG1heCApCisgICAg ICAgIHJldHVybiB2YWwKKworICAgIGRlZiBiYXNlc3RyaW5nX2xpc3QoIHNlbGYsIGtleSwgdmFs ICk6CisgICAgICAgICIiIgorICAgICAgICBNdXN0IGJlIGEgbGlzdCBvZiBiYXNlc3RyaW5ncy4K KyAgICAgICAgIiIiCisgICAgICAgICNUT0RPOiBIZXJlJ3Mgd2hlcmUgY29tcG91bmQgdHlwZXMg c3RhcnQgYmVjb21pbmcgYSBuaWdodG1hcmUuIEFueT0KIG1vcmUgb3IgbW9yZSBjb21wbGV4Cisg ICAgICAgICMgICBhbmQgc2hvdWxkIGZpbmQgYSBkaWZmZXJlbnQgd2F5LgorICAgICAgICB2YWwg PTNEIHNlbGYudHlwZSgga2V5LCB2YWwsIGxpc3QgKQorICAgICAgICByZXR1cm4gWyBzZWxmLmJh c2VzdHJpbmcoIGtleSwgZWxlbSApIGZvciBlbGVtIGluIHZhbCBdCisKKyAgICAjIHZhbGlkYXRv cnMgZm9yIEdhbGF4eQorICAgIGRlZiBnZW5vbWVfYnVpbGQoIHNlbGYsIHRyYW5zLCBrZXksIHZh bCApOgorICAgICAgICAiIiIKKyAgICAgICAgTXVzdCBiZSBhIHZhbGlkIGdlbm9tZV9idWlsZC9k YmtleS9yZWZlcmVuY2Uvd2hhdGV2ZXItdGhlLWhlbGwtd2VyPQplLWNhbGxpbmctdGhlbS1ub3cu CisgICAgICAgICIiIgorICAgICAgICAjVE9ETzogaXMgdGhpcyBjb3JyZWN0PworICAgICAgICBp ZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPycKKyAgICAgICAgIyB3b3QuLi53 aHkgdHVwbGVzPworICAgICAgICBpZiB2YWwgbm90IGluIGRpY3QoIHRyYW5zLmRiX2J1aWxkcyAp OgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFyYW1ldGVySW52YWxpZEV4 Y2VwdGlvbiggImludmFsaWQgcmU9CmZlcmVuY2UiLCBrZXk9M0RrZXksIHZhbD0zRHZhbCApCisg ICAgICAgIHJldHVybiB2YWwKKworICAgICNkZWYgc2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtl eSwgdmFsICk6CisgICAgIyAgICAiIiJ2YWxpZGF0ZSBzbHVnIiIiCisgICAgIyAgICBwYXNzCisK KworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPQo9M0Q9M0Q9M0QKKyMgTWl4aW5zIChoZXJlIGZvciBub3cpCisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LT0KLS0tLS0KICNUT0RPOiB0aGVzZSBhcmUgb2YgcXVlc3Rpb25hYmxlIHZhbHVlIGlmIHdlIGRv bid0IHdhbnQgdG8gZW5hYmxlIHVzZXJzIHRvPQogZGVsZXRlL3B1cmdlIHZpYSB1cGRhdGUKIGNs YXNzIERlbGV0YWJsZU1vZGVsRGVzZXJpYWxpemVyKCBvYmplY3QgKToKPTIwCiAgICAgZGVmIGFk ZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAg ICAgc2VsZi5kZXNlcmlhbGl6ZXJzWyAnZGVsZXRlZCcgXSA9M0Qgc2VsZi5kZXNlcmlhbGl6ZV9k ZWxldGVkCj0yMAogICAgIGRlZiBkZXNlcmlhbGl6ZV9kZWxldGVkKCBzZWxmLCB0cmFucywgaXRl bSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBuZXdfZGVs ZXRlZCA9M0Qgc2VsZi52YWxpZGF0ZS5ib29sKCBrZXksIHZhbCApCiAgICAgICAgIGlmIG5ld19k ZWxldGVkID0zRD0zRCBpdGVtLmRlbGV0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gaXRlbS5kZWxl dGVkCkBAIC02MzksOSArODc3LDEzIEBACiBjbGFzcyBQdXJnYWJsZU1vZGVsRGVzZXJpYWxpemVy KCBEZWxldGFibGVNb2RlbERlc2VyaWFsaXplciApOgo9MjAKICAgICBkZWYgYWRkX2Rlc2VyaWFs aXplcnMoIHNlbGYgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmRl c2VyaWFsaXplcnNbICdwdXJnZWQnIF0gPTNEIHNlbGYuZGVzZXJpYWxpemVfcHVyZ2VkCj0yMAog ICAgIGRlZiBkZXNlcmlhbGl6ZV9wdXJnZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIG5ld19wdXJnZWQgPTNEIHNlbGYu dmFsaWRhdGUuYm9vbCgga2V5LCB2YWwgKQogICAgICAgICBpZiBuZXdfcHVyZ2VkID0zRD0zRCBp dGVtLnB1cmdlZDoKICAgICAgICAgICAgIHJldHVybiBpdGVtLnB1cmdlZApAQCAtNjU0LDkgKzg5 NiwxMyBAQAogY2xhc3MgVGFnZ2FibGVTZXJpYWxpemVyKCBvYmplY3QgKToKPTIwCiAgICAgZGVm IGFkZF9zZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAg ICAgIHNlbGYuc2VyaWFsaXplcnNbICd0YWdzJyBdID0zRCBzZWxmLnNlcmlhbGl6ZV90YWdzCj0y MAogICAgIGRlZiBzZXJpYWxpemVfdGFncyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSApOgorICAg ICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKCBpdGVtLCAndGFn cycgKToKICAgICAgICAgICAgIHJldHVybiBOb25lCj0yMApAQCAtNjczLDE4ICs5MTksMjUgQEAK IGNsYXNzIEFubm90YXRhYmxlU2VyaWFsaXphYmxlKCBvYmplY3QgKToKPTIwCiAgICAgZGVmIGFk ZF9zZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAg IHNlbGYuc2VyaWFsaXplcnNbICdhbm5vdGF0aW9uJyBdID0zRCBsYW1iZGEgdCwgaSwgazogdW5p Y29kZSggc2VsZj0KLmdldF9hbm5vdGF0aW9uKCB0LCBpICkgKQo9MjAKPTIwCiBjbGFzcyBSYXRh YmxlU2VyaWFsaXphYmxlKCBvYmplY3QgKToKPTIwCiAgICAgZGVmIGFkZF9zZXJpYWxpemVycygg c2VsZiApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuc2VyaWFsaXpl cnNbICd1c2VyX3JhdGluZycgXSA9M0Qgc2VsZi5zZXJpYWxpemVfdXNlcl9yYXRpbmcKICAgICAg ICAgc2VsZi5zZXJpYWxpemVyc1sgJ2NvbW11bml0eV9yYXRpbmcnIF0gPTNEIHNlbGYuc2VyaWFs aXplX2NvbW11bml0PQp5X3JhdGluZwo9MjAKICAgICBkZWYgc2VyaWFsaXplX3VzZXJfcmF0aW5n KCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAg ICAgICAgcGFzcwo9MjAKICAgICBkZWYgc2VyaWFsaXplX2NvbW11bml0eV9yYXRpbmcoIHNlbGYs IHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBw YXNzCi0KCmRpZmYgLXIgNWQwZmNhNTkxMzk0ZDdlN2FhYWJhZGZjZGVkOWY4MzdmZDQzNmVkMiAt ciA0YmRlNzBjNjc3YTkyZGRhNzIxMmVjYz0KNGNkOWVhOWM0ZDNlYzY5NTIgbGliL2dhbGF4eS9t YW5hZ2Vycy9jb2xsZWN0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rp b25zLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKQEAgLTI5OSw2 MiArMjk5LDcgQEAKIGNsYXNzIERhdGFzZXRDb2xsZWN0aW9uU2VyaWFsaXplciggYmFzZS5Nb2Rl bFNlcmlhbGl6ZXIgKToKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKLSAgICAg ICAgc3VwZXIoIEhEQVNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKLQotICAgICMg ICAgIyBtb3N0IG9mIHRoZXNlIHZpZXdzIGJ1aWxkL2FkZCB0byB0aGUgcHJldmlvdXMgdmlldwot ICAgICMgICAgc3VtbWFyeV92aWV3ID0zRCBbCi0gICAgIyAgICAgICAgJ2lkJywgJ2hpc3Rvcnlf aWQnLCAnaGlkJywgJ25hbWUnLCAnZGF0YXNldF9pZCcsCi0gICAgIyAgICAgICAgJ3N0YXRlJywg J2RlbGV0ZWQnLCAncHVyZ2VkJywgJ3Zpc2libGUnCi0gICAgIyAgICBdCi0gICAgIyAgICBkZXRh aWxlZF92aWV3ID0zRCBzdW1tYXJ5X3ZpZXcgKyBbCi0gICAgIyAgICAgICAgJ2Ria2V5JywgJ2lu Zm8nLCAnYmx1cmInLCAnZXh0ZW5zaW9uJywgJ2NyZWF0ZV90aW1lJywgJ3VwZGF0ZT0KX3RpbWUn LAotICAgICMgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25f aWQnLCAnY29waWVkX2Zyb21fbGk9CmJyYXJ5X2RhdGFzZXRfZGF0YXNldF9hc3NvY2lhdGlvbl9p ZCcsCi0gICAgIyAgICAgICAgJ21ldGFkYXRhJywgJ3NpemUnLAotICAgICMgICAgICAgICNtaXhp bjogYW5ub3RhdGFibGUKLSAgICAjICAgICAgICAnYW5ub3RhdGlvbicsCi0gICAgIyAgICAgICAg I21peGluOiB0YWdnYWJsZQotICAgICMgICAgICAgICd0YWdzJywKLSAgICAjICAgIF0KLSAgICAj ICAgIGV4dGVuZGVkX3ZpZXcgPTNEIGRldGFpbGVkX3ZpZXcgKyBbCi0gICAgIyAgICAgICAgI05P VEU6IHNlbmRpbmcgcmF3ICdwZWVrJyAobm90IGdldF9kaXNwbGF5X3BlZWspCi0gICAgIyAgICAg ICAgJ3BlZWsnLAotICAgICMgICAgICAgICd0b29sX3ZlcnNpb24nLCAncGFyZW50X2lkJywgJ2Rl c2lnbmF0aW9uJywKLSAgICAjICAgIF0KLSAgICAjCi0gICAgIyAgICBzZWxmLnNlcmlhbGl6YWJs ZV9rZXlzID0zRCBleHRlbmRlZF92aWV3ICsgWwotICAgICMgICAgICAgICdkaXNwbGF5X2FwcHMn LAotICAgICMgICAgICAgICdkaXNwbGF5X3R5cGVzJywKLSAgICAjICAgICAgICAndmlzdWFsaXph dGlvbnMnCi0gICAgIyAgICBdCi0gICAgIyAgICBzZWxmLnZpZXdzID0zRCB7Ci0gICAgIyAgICAg ICAgJ3N1bW1hcnknICAgOiBzdW1tYXJ5X3ZpZXcsCi0gICAgIyAgICAgICAgJ2RldGFpbGVkJyAg OiBkZXRhaWxlZF92aWV3LAotICAgICMgICAgICAgICdleHRlbmRlZCcgIDogZXh0ZW5kZWRfdmll dywKLSAgICAjICAgIH0KLSAgICAjICAgIHNlbGYuZGVmYXVsdF92aWV3ID0zRCAnc3VtbWFyeScK LSAgICAjCi0gICAgI2RlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKLSAgICAjICAgIHNlbGYu c2VyaWFsaXplcnMudXBkYXRlKHsKLSAgICAjICAgICAgICAnaWQnICAgICAgICAgICAgOiBzZWxm LnNlcmlhbGl6ZV9pZCwKLSAgICAjICAgICAgICAnaGlzdG9yeV9pZCcgICAgOiBzZWxmLnNlcmlh bGl6ZV9pZCwKLSAgICAjICAgICAgICAnZGF0YXNldF9pZCcgICAgOiBzZWxmLnNlcmlhbGl6ZV9p ZCwKLSAgICAjCi0gICAgIyAgICAgICAgJ2NyZWF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVf ZGF0ZSwKLSAgICAjICAgICAgICAndXBkYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlhbGl6ZV9kYXRl LAotICAgICMgICAgICAgICdjb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25f aWQnICAgICAgICA6IHNlbGYuc2U9CnJpYWxpemVfaWQsCi0gICAgIyAgICAgICAgJ2NvcGllZF9m cm9tX2xpYnJhcnlfZGF0YXNldF9kYXRhc2V0X2Fzc29jaWF0aW9uX2lkJzogc2VsZi5zZT0Kcmlh bGl6ZV9pZCwKLSAgICAjCi0gICAgIyAgICAgICAgJ21ldGFkYXRhJyAgICAgIDogc2VsZi5zZXJp YWxpemVfbWV0YWRhdGEsCi0gICAgIyAgICAgICAgJ3NpemUnICAgICAgICAgIDogbGFtYmRhIHQs IGksIGs6IGludCggaS5nZXRfc2l6ZSgpICksCi0gICAgIyAgICAgICAgJ25pY2Vfc2l6ZScgICAg IDogbGFtYmRhIHQsIGksIGs6IGkuZ2V0X3NpemUoIG5pY2Vfc2l6ZT0zRFRydT0KZSApLAotICAg ICMKLSAgICAjICAgICAgICAncGFyZW50X2lkJyAgICAgOiBzZWxmLnNlcmlhbGl6ZV9pZCwKLSAg ICAjICAgICAgICAjVE9ETzogdG8gbWl4aW46IGFubm90YXRhYmxlCi0gICAgIyAgICAgICAgJ2Fu bm90YXRpb24nICAgIDogbGFtYmRhIHQsIGksIGs6IGkuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIo ID0KdC5zYV9zZXNzaW9uLCB0LnVzZXIsIGkgKSwKLSAgICAjICAgICAgICAjVE9ETzogdG8gbWl4 aW46IHRhZ2dhYmxlCi0gICAgIyAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogbGFtYmRhIHQsIGks IGs6IFsgdGFnLnVzZXJfdG5hbWUgKyAoICc6JyArID0KdGFnLnVzZXJfdmFsdWUgaWYgdGFnLnVz ZXJfdmFsdWUgZWxzZSAnJyApCi0gICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIHRhZyBpbiBpLnRhZ3MgXSwKLSAgICAjICAgIH0pCisgICAgICAgIHN1 cGVyKCBEYXRhc2V0Q29sbGVjdGlvblNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkK PTIwCiAjZGVmIGRpY3RpZnlfZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlKCBkYXRhc2V0X2Nv bGxlY3Rpb25faW5zdGFuY2UsIHBhcj0KZW50LCBzZWN1cml0eSwgdmlldz0zRCJlbGVtZW50IiAp OgogIyAgICBkaWN0X3ZhbHVlID0zRCBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UudG9fZGlj dCggdmlldz0zRHZpZXcgKQpAQCAtNDAxLDYgKzM0NiwyNiBAQAogIwogIyAgICAgICAgcmV0dXJu IG1kCj0yMAorCitjbGFzcyBEYXRhc2V0Q29sbGVjdGlvbkRlc2VyaWFsaXplciggYmFzZS5Nb2Rl bERlc2VyaWFsaXplciApOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAg ICAgc3VwZXIoIERhdGFzZXRDb2xsZWN0aW9uU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBh cHAgKQorCisgICAgI2RlZiBfdmFsaWRhdGVfYW5kX3BhcnNlX3VwZGF0ZV9wYXlsb2FkKCBzZWxm LCBwYXlsb2FkICk6CisgICAgIyAgICB2YWxpZGF0ZWRfcGF5bG9hZCA9M0Qge30KKyAgICAjICAg IGZvciBrZXksIHZhbCBpbiBwYXlsb2FkLml0ZW1zKCk6CisgICAgIyAgICAgICAgaWYgdmFsIGlz IE5vbmU6CisgICAgIyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgIyAgICAgICAgaWYga2V5IGlu ICggJ25hbWUnICk6CisgICAgIyAgICAgICAgICAgIHZhbCA9M0QgdmFsaWRhdGlvbi52YWxpZGF0 ZV9hbmRfc2FuaXRpemVfYmFzZXN0cmluZygga2V5LD0KIHZhbCApCisgICAgIyAgICAgICAgICAg IHZhbGlkYXRlZF9wYXlsb2FkWyBrZXkgXSA9M0QgdmFsCisgICAgIyAgICAgICAgaWYga2V5IGlu ICggJ2RlbGV0ZWQnLCAndmlzaWJsZScgKToKKyAgICAjICAgICAgICAgICAgdmFsaWRhdGVkX3Bh eWxvYWRbIGtleSBdID0zRCB2YWxpZGF0aW9uLnZhbGlkYXRlX2Jvb2xlYW4oPQoga2V5LCB2YWwg KQorICAgICMgICAgICAgIGVsaWYga2V5ID0zRD0zRCAndGFncyc6CisgICAgIyAgICAgICAgICAg IHZhbGlkYXRlZF9wYXlsb2FkWyBrZXkgXSA9M0QgdmFsaWRhdGlvbi52YWxpZGF0ZV9hbmRfc2Fu aT0KdGl6ZV9iYXNlc3RyaW5nX2xpc3QoIGtleSwgdmFsICkKKyAgICAjICAgIHJldHVybiB2YWxp ZGF0ZWRfcGF5bG9hZAorCiAgICAgI2RlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgogICAg ICMgICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZSh7CiAgICAgIyAgICAgICAgJ25hbWUnICAg ICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9iYXNlc3RyaW5nLAoKZGlmZiAtciA1ZDBmY2E1OTEz OTRkN2U3YWFhYmFkZmNkZWQ5ZjgzN2ZkNDM2ZWQyIC1yIDRiZGU3MGM2NzdhOTJkZGE3MjEyZWNj PQo0Y2Q5ZWE5YzRkM2VjNjk1MiBsaWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5Ci0tLSBh L2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vy cy9kYXRhc2V0cy5weQpAQCAtMTMsMTYgKzEzLDIyIEBACj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNz IERhdGFzZXRNYW5hZ2VyKCBiYXNlLk1vZGVsTWFuYWdlciwgYmFzZS5BY2Nlc3NpYmxlTW9kZWxJ bnRlcmZhY2UsIGJhPQpzZS5QdXJnYWJsZU1vZGVsSW50ZXJmYWNlICk6CisgICAgIiIiCisgICAg IiIiCiAgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVsLkRhdGFzZXQKICAgICBkZWZhdWx0X29yZGVy X2J5ID0zRCAoIG1vZGVsLkRhdGFzZXQuY3JlYXRlX3RpbWUsICkKICAgICBmb3JlaWduX2tleV9u YW1lID0zRCAnZGF0YXNldCcKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAg ICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBzdXBlciggRGF0YXNldE1hbmFnZXIsIHNl bGYgKS5fX2luaXRfXyggYXBwICkKICAgICAgICAgc2VsZi51c2VyX21nciA9M0QgdXNlcnMuVXNl ck1hbmFnZXIoIGFwcCApCj0yMAotICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIENSVUQKKyAgICAj IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uPQouLi4uLiBjcmVhdGUKICAgICBkZWYgY3JlYXRlKCBzZWxmLCB0cmFucywg Zmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAg ICAgICMgZGVmYXVsdCB0byBORVcgc3RhdGUgb24gbmV3IGRhdGFzZXRzCiAgICAgICAgIGt3YXJn cy51cGRhdGUoIGRpY3QoIHN0YXRlPTNEKCBrd2FyZ3MuZ2V0KCAnc3RhdGUnLCBtb2RlbC5EYXRh c2V0Lj0Kc3RhdGVzLk5FVyApICkgKSApCiAgICAgICAgIGRhdGFzZXQgPTNEIG1vZGVsLkRhdGFz ZXQoICoqa3dhcmdzICkKQEAgLTMxLDE2ICszNywyNiBAQAogICAgICAgICAgICAgdHJhbnMuc2Ff c2Vzc2lvbi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBkYXRhc2V0Cj0yMAotICAgICNkZWYgdG9f aGRhKCBzZWxmLCB0cmFucywgZGF0YXNldCwgaGlzdG9yeSwgKiprd2FyZ3MgKToKLSAgICAjICAg IHBhc3MKKyAgICBkZWYgY29weSggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisg ICAgICAgIHBhc3MKPTIwCi0gICAgI2RlZiB0b19sZGRhKCBzZWxmLCB0cmFucywgZGF0YXNldCwg bGlicmFyeV9mb2xkZXIsICoqa3dhcmdzICk6Ci0gICAgIyAgICBwYXNzCisgICAgIyAuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLj0KLi4uLi4gYWRkIHRvIGRhdGFzZXQgYXNzb2NpYXRpb24KKyAgICBkZWYgdG9faGRhKCBz ZWxmLCB0cmFucywgZGF0YXNldCwgaGlzdG9yeSwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisg ICAgICAgICIiIgorICAgICAgICBwYXNzCj0yMAotICAgICNkZWYgY29weSggc2VsZiApOgotICAg ICMgICAgcGFzcworICAgIGRlZiB0b19sZGRhKCBzZWxmLCB0cmFucywgZGF0YXNldCwgbGlicmFy eV9mb2xkZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAg cGFzcwo9MjAKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZWxldGUKICAgICBkZWYgcHVyZ2Uo IHNlbGYsIHRyYW5zLCBkYXRhc2V0LCBmbHVzaD0zRFRydWUgKToKKyAgICAgICAgIiIiCisgICAg ICAgICIiIgogICAgICAgICBzZWxmLmVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2FsbG93ZWQo IHRyYW5zLCBkYXRhc2V0ICkKPTIwCiAgICAgICAgICMgdGhlIGZvbGxvd2luZyBhbHNvIG1hcmtz IGRhdGFzZXQgYXMgcHVyZ2VkIGFuZCBkZWxldGVkCkBAIC01MCwxMCArNjYsMTIgQEAKICAgICAg ICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQogICAgICAgICByZXR1cm4gZGF0YXNldAo9 MjAKLSAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSBhY2Nlc3NpYmlsaXR5CisgICAgIyAuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLj0KLi4uLi4gYWNjZXNzaWJpbGl0eQogICAgICMgZGF0YXNldHMgY2FuIGltcGxlbWVudCB0 aGUgYWNjZXNzaWJsZSBpbnRlcmZhY2UsIGJ1dCBhY2Nlc3NpYmlsaXR5IGk9CnMgY2hlY2tlZCBp biBhbiBlbnRpcmVseSBkaWZmZXJlbnQgd2F5CiAgICAgIyAgIHRoYW4gdGhvc2UgcmVzb3VyY2Vz IHRoYXQgaGF2ZSBhIHVzZXIgYXR0cmlidXRlIChoaXN0b3JpZXMsIHBhZ2VzLD0KIGV0Yy4pCiAg ICAgZGVmIGlzX2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CisgICAg ICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi51c2VyX21nci5pc19hZG1pbigg dHJhbnMsIHVzZXIgKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHNlbGYu aGFzX2FjY2Vzc19wZXJtaXNzaW9uKCB0cmFucywgZGF0YXNldCwgdXNlciApOgpAQCAtNjEsNTEg Kzc5LDExMyBAQAogICAgICAgICByZXR1cm4gRmFsc2UKPTIwCiAgICAgZGVmIGhhc19hY2Nlc3Nf cGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKLSAgICAgICAgcmV0dXJu IHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHVzZXIucm9sZXMs IGRhPQp0YXNldCApCisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgcm9sZXMgPTNE IHVzZXIucm9sZXMgaWYgdXNlciBlbHNlIFtdCisgICAgICAgIHJldHVybiB0cmFucy5hcHAuc2Vj dXJpdHlfYWdlbnQuY2FuX2FjY2Vzc19kYXRhc2V0KCByb2xlcywgZGF0YXNldD0KICkKPTIwCi0g ICAgI2RlZiBnaXZlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNldCwgdXNl ciApOgotICAgICMgICAgcGVybWlzc2lvbiA9M0Qge30KLSAgICAjICAgICNUT0RPOj8/IGlzIHRo aXMgY29ycmVjdCBhbmQgcmVsaWFibGU/Ci0gICAgIyAgICB1c2VyX3ByaXZhdGVfcm9sZSA9M0Qg c2VsZi51c2VyX21nci5wcml2YXRlX3JvbGUoIHRyYW5zLCB1c2VyICkKLSAgICAjICAgIHBlcm1p c3Npb25bIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5wZXJtaXR0ZWRfYWN0aW9ucy5EQVRBU0VU X0FDPQpDRVNTIF0gPTNEIFsgdXNlcl9wcml2YXRlX3JvbGUgXQotICAgICMgICAgdHJhbnMuYXBw LnNlY3VyaXR5X2FnZW50LnNldF9kYXRhc2V0X3Blcm1pc3Npb24oIGRhdGFzZXQsIHBlcm1pc3M9 CmlvbiApCisgICAgZGVmIGdpdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRh c2V0LCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgI3Blcm1pc3Np b24gPTNEIHt9CisgICAgICAgICMjVE9ETzo/PyBpcyB0aGlzIGNvcnJlY3QgYW5kIHJlbGlhYmxl PworICAgICAgICAjdXNlcl9wcml2YXRlX3JvbGUgPTNEIHNlbGYudXNlcl9tZ3IucHJpdmF0ZV9y b2xlKCB0cmFucywgdXNlciApCisgICAgICAgICNwZXJtaXNzaW9uWyB0cmFucy5hcHAuc2VjdXJp dHlfYWdlbnQucGVybWl0dGVkX2FjdGlvbnMuREFUQVNFVF9BQz0KQ0VTUyBdID0zRCBbIHVzZXJf cHJpdmF0ZV9yb2xlIF0KKyAgICAgICAgI3RyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5zZXRfZGF0 YXNldF9wZXJtaXNzaW9uKCBkYXRhc2V0LCBwZXJtaXNzPQppb24gKQorICAgICAgICBwYXNzCj0y MAorICAgIGRlZiByZW1vdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0 LCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcwo9MjAKLSAg ICAjZGVmIHJlbW92ZV9hY2Nlc3NfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVz ZXIgKToKLSAgICAjICAgIHBhc3MKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBtYW5hZ2UvbW9k aWZ5CisgICAgZGVmIGhhc19tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQs IHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICBwYXNzCj0yMAorICAg IGRlZiBnaXZlX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNldCwgdXNlciAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKPTIwCi0gICAgI2RlZiBo YXNfbWFuYWdlX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6Ci0gICAg IyAgICBwYXNzCi0gICAgIwotICAgICNkZWYgZ2l2ZV9tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwg dHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKLSAgICAjICAgIHBhc3MKLSAgICAjCi0gICAgI2RlZiBy ZW1vdmVfbWFuYWdlX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6Ci0g ICAgIyAgICBwYXNzCi0KKyAgICBkZWYgcmVtb3ZlX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0 cmFucywgZGF0YXNldCwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAg IHBhc3MKPTIwCiAgICAgI1RPRE86IGltcGxlbWVudCBhYm92ZSBmb3IgZ3JvdXBzCisgICAgI1RP RE86IGRhdGF0eXBlcz8KKyAgICAjVE9ETzogZGF0YSwgb2JqZWN0X3N0b3JlCj0yMAotI1RPRE86 IGRhdGF0eXBlcz8KKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIERhdGFzZXRTZXJpYWxpemVyKCBiYXNl Lk1vZGVsU2VyaWFsaXplciApOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAg ICAgICAgc3VwZXIoIERhdGFzZXRTZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCisK KyAgICAgICAgIyBtb3N0IG9mIHRoZXNlIHZpZXdzIGJ1aWxkL2FkZCB0byB0aGUgcHJldmlvdXMg dmlldworICAgICAgICBzdW1tYXJ5X3ZpZXcgPTNEIFsKKyAgICAgICAgICAgICdpZCcsCisgICAg ICAgICAgICAnY3JlYXRlX3RpbWUnLCAndXBkYXRlX3RpbWUnLAorICAgICAgICAgICAgJ3N0YXRl JywKKyAgICAgICAgICAgICdkZWxldGVkJywgJ3B1cmdlZCcsICdwdXJnYWJsZScsCisgICAgICAg ICAgICAjJ29iamVjdF9zdG9yZV9pZCcsCisgICAgICAgICAgICAjJ2V4dGVybmFsX2ZpbGVuYW1l JywKKyAgICAgICAgICAgICMnZXh0cmFfZmlsZXNfcGF0aCcsCisgICAgICAgICAgICAnZmlsZV9z aXplJywgJ3RvdGFsX3NpemUnLAorICAgICAgICAgICAgJ3V1aWQnLAorICAgICAgICBdCisgICAg ICAgICMgY291bGQgZG8gdmlzdWFsaXphdGlvbnMgYW5kL29yIGRpc3BsYXlfYXBwcworCisgICAg ICAgIHNlbGYuc2VyaWFsaXphYmxlX2tleXMgPTNEIHN1bW1hcnlfdmlldyArIFsKKyAgICAgICAg XQorICAgICAgICBzZWxmLnZpZXdzID0zRCB7CisgICAgICAgICAgICAnc3VtbWFyeScgICA6IHN1 bW1hcnlfdmlldywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmRlZmF1bHRfdmlldyA9M0QgJ3N1 bW1hcnknCisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgIHNlbGYu c2VyaWFsaXplcnMudXBkYXRlKHsKKyAgICAgICAgICAgICdpZCcgICAgICAgICAgICA6IHNlbGYu c2VyaWFsaXplX2lkLAorICAgICAgICAgICAgJ2NyZWF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxp emVfZGF0ZSwKKyAgICAgICAgICAgICd1cGRhdGVfdGltZScgICA6IHNlbGYuc2VyaWFsaXplX2Rh dGUsCisgICAgICAgICAgICAndXVpZCcgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogc3RyKCBp LnV1aWQgKSBpZiBpLnV1aWQgZWxzZT0KIE5vbmUsCisgICAgICAgIH0pCisKKworY2xhc3MgRGF0 YXNldERlc2VyaWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciApOgorICAgIHBhc3MKPTIw Cj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIERhdGFzZXRBc3NvY2lhdGlvbk1hbmFnZXIoIGJhc2Uu TW9kZWxNYW5hZ2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbEluPQp0ZXJmYWNlLCBiYXNlLlB1cmdh YmxlTW9kZWxJbnRlcmZhY2UgKToKKyAgICAiIiIKKyAgICAiIiIKICAgICAjIEEgZGF0YXNldCBh c3NvY2lhdGlvbiBIQVMgYSBkYXRhc2V0IGJ1dCBjb250YWlucyBtZXRhZGF0YSBzcGVjaWZpYyB0 PQpvIGEgbGlicmFyeSAobGRhKSBvciB1c2VyIChoZGEpCiAgICAgbW9kZWxfY2xhc3MgPTNEIG1v ZGVsLkRhdGFzZXRJbnN0YW5jZQogICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuRGF0 YXNldC5jcmVhdGVfdGltZSwgKQo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgor ICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHN1cGVyKCBEYXRhc2V0QXNzb2NpYXRp b25NYW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAgICAgICAgIHNlbGYuZGF0YXNldF9t Z3IgPTNEIERhdGFzZXRNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICBkZWYgaXNfYWNjZXNzaWJsZSgg c2VsZiwgdHJhbnMsIGRhdGFzZXRfYXNzb2MsIHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAg ICIiIgogICAgICAgICAjIGRlZmVyIHRvIHRoZSBkYXRhc2V0CiAgICAgICAgIHJldHVybiBzZWxm LmRhdGFzZXRfbWdyLmlzX2FjY2Vzc2libGUoIHRyYW5zLCBkYXRhc2V0X2Fzc29jLmRhdGFzZT0K dCwgdXNlciApCj0yMAogICAgIGRlZiBtZXRhZGF0YSggc2VsZiwgdHJhbnMsIGRhdGFzZXRfYXNz b2MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBwYXNzCj0yMAogICAgIGRl ZiBpc19iZWluZ191c2VkKCBzZWxmLCB0cmFucywgZGF0YXNldF9hc3NvYyApOgorICAgICAgICAi IiIKKyAgICAgICAgIiIiCiAgICAgICAgIHBhc3MKCmRpZmYgLXIgNWQwZmNhNTkxMzk0ZDdlN2Fh YWJhZGZjZGVkOWY4MzdmZDQzNmVkMiAtciA0YmRlNzBjNjc3YTkyZGRhNzIxMmVjYz0KNGNkOWVh OWM0ZDNlYzY5NTIgbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkv bWFuYWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKQEAgLTQs NiArNCw3IEBACiBIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9ucyAoSERBcykgYXJlIGRhdGFzZXRz IGNvbnRhaW5lZCBvciBjcmVhdGVkIGluIGEKIGhpc3RvcnkuCiAiIiIKKwogaW1wb3J0IGdldHRl eHQKPTIwCiBmcm9tIGdhbGF4eSBpbXBvcnQgbW9kZWwKQEAgLTE5LDcgKzIwLDggQEAKPTIwCj0y MAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPQo9M0Q9M0Q9M0QKLWNsYXNzIEhEQU1hbmFnZXIoIGRhdGFzZXRzLkRhdGFzZXRBc3NvY2lh dGlvbk1hbmFnZXIgKToKK2NsYXNzIEhEQU1hbmFnZXIoIGRhdGFzZXRzLkRhdGFzZXRBc3NvY2lh dGlvbk1hbmFnZXIsIGJhc2UuT3duYWJsZU1vZGVsSW50PQplcmZhY2UgKToKKyAgICAjVE9ETzog bW92ZSB3aGF0IG1ha2VzIHNlbnNlIGludG8gRGF0YXNldE1hbmFnZXIKICAgICAiIiIKICAgICBJ bnRlcmZhY2Uvc2VydmljZSBvYmplY3QgZm9yIGludGVyYWN0aW5nIHdpdGggSERBcy4KICAgICAi IiIKQEAgLTMyLDcgKzM0LDIzIEBACiAgICAgICAgICIiIgogICAgICAgICBzdXBlciggSERBTWFu YWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQo9MjAKKyAgICBkZWYgaXNfYWNjZXNzaWJsZSgg c2VsZiwgdHJhbnMsIGhkYSwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAg ICAgIGlmIHNlbGYuaXNfb3duZWQoIHRyYW5zLCBoZGEsIHVzZXIgKToKKyAgICAgICAgICAgIHJl dHVybiBUcnVlCisgICAgICAgIHJldHVybiBzdXBlciggSERBTWFuYWdlciwgc2VsZiApLmlzX2Fj Y2Vzc2libGUoIHRyYW5zLCBoZGEsIHVzZXIgKQorCisgICAgZGVmIGlzX293bmVkKCBzZWxmLCB0 cmFucywgaGRhLCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICBVc2UgaGlzdG9yeSB0byBz ZWUgaWYgY3VycmVudCB1c2VyIG93bnMgSERBLgorICAgICAgICAiIiIKKyAgICAgICAgI1RPRE86 IHRoaXMgbWF5IGJlIHNsb3cgZHVlIHRvIEhpc3RvcnlNYW5hZ2VyIGluc3RhbnRpYXRpb24gYW5k IHBvPQpzc2libGUgMm5kIHRyYW5zYWN0aW9uIHRvIGdldCB0aGUgaGRhLmhpc3RvcnkKKyAgICAg ICAgcmV0dXJuIGhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggc2VsZi5hcHAgKS5pc19vd25lcigg dHJhbnMsIGhkYS5oPQppc3RvcnksIHVzZXIgKQorCiAgICAgZGVmIGNyZWF0ZSggc2VsZiwgdHJh bnMsIGhpc3Rvcnk9M0ROb25lLCBkYXRhc2V0PTNETm9uZSwgZmx1c2g9M0RUcnVlLD0KICoqa3dh cmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IGRhdGFzZXQ6 CiAgICAgICAgICAgICBrd2FyZ3NbICdjcmVhdGVfZGF0YXNldCcgXSA9M0QgVHJ1ZQogICAgICAg ICBoZGEgPTNEIHN1cGVyKCBIREFNYW5hZ2VyLCBzZWxmICkuY3JlYXRlKCB0cmFucywgZmx1c2g9 M0RmbHVzaCwKQEAgLTQzLDYgKzYxLDggQEAKICAgICAgICAgcmV0dXJuIGhkYQo9MjAKICAgICBk ZWYgY29weV9oZGEoIHNlbGYsIHRyYW5zLCBoZGEsIGhpc3Rvcnk9M0ROb25lLCAqKmt3YXJncyAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOj8/IG5vdCB1c2luZyB0 aGUgZm9sbG93aW5nIGFzIHRoaXMgZm4gZG9lcyBub3Qgc2V0IGhpc3RvcnkgYT0KbmQgQ09QSUVT IGhpZCAodGhpcyBkb2Vzbid0IHNlZW0gY29ycmVjdCkKICAgICAgICAgI3JldHVybiBoZGEuY29w eSgpCiAgICAgICAgIGNvcHkgPTNEIG1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24oCkBA IC03OCwxNyArOTgsMjQgQEAKICAgICAgICAgcmV0dXJuIGNvcHkKPTIwCiAgICAgZGVmIGNvcHlf bGRkYSggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGxkZGEsICoqa3dhcmdzICk6CisgICAgICAgICIi IgorICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIGxkZGEudG9faGlzdG9yeV9kYXRhc2V0X2Fz c29jaWF0aW9uKCBoaXN0b3J5LCBhZGRfdG9faGlzdG9yPQp5PTNEVHJ1ZSApCj0yMAogIyAgICBk ZWYgYnlfaGlzdG9yeV9pZCggc2VsZiwgdHJhbnMsIGhpc3RvcnlfaWQsIGZpbHRlcnM9M0ROb25l LCAqKmt3YXJncyA9Cik6CiAjICAgICAgICBoaXN0b3J5X2lkX2ZpbHRlciA9M0Qgc2VsZi5tb2Rl bF9jbGFzcy5oaXN0b3J5X2lkID0zRD0zRCBoaXN0b3J5Xz0KaWQKICMgICAgICAgIGZpbHRlcnMg PTNEIHNlbGYuX211bmdlX2ZpbHRlcnMoIGhpc3RvcnlfaWRfZmlsdGVyLCBmaWx0ZXJzICkKICMg ICAgICAgIHJldHVybiBzZWxmLmxpc3QoIHRyYW5zLCBmaWx0ZXJzPTNEZmlsdGVycywgKiprd2Fy Z3MgKQotIworCiAjICAgICNkZWYgYnlfaGlzdG9yeSggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGZp bHRlcnM9M0ROb25lLCAqKmt3YXJncyApOgogIyAgICAjICAgIHJldHVybiBoaXN0b3J5LmRhdGFz ZXRzCj0yMAorICAgICNkZWYgYnlfdXNlciggc2VsZiwgdHJhbnMsIHVzZXIgKToKKyAgICAjICAg IHBhc3MKKwogICAgIGRlZiBwdXJnZSggc2VsZiwgdHJhbnMsIGhkYSApOgorICAgICAgICAiIiIK KyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZXJyb3JfdW5sZXNzX2RhdGFzZXRfcHVyZ2VfYWxs b3dlZCggdHJhbnMsIGhkYSApCiAgICAgICAgIHN1cGVyKCBIREFNYW5hZ2VyLCBzZWxmICkucHVy Z2UoIHRyYW5zLCBoZGEsIGZsdXNoPTNEVHJ1ZSApCj0yMApAQCAtMjE5LDYgKzI0Niw4IEBACiAg ICAgICAgIHJldHVybiBkaXNwbGF5X2FwcHMKPTIwCiAgICAgZGVmIGdldF92aXN1YWxpemF0aW9u cyggc2VsZiwgdHJhbnMsIGhkYSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAg ICMgdXNlIG9sZGVyIHN5c3RlbSBpZiByZWdpc3RyeSBpcyBvZmYgaW4gdGhlIGNvbmZpZwogICAg ICAgICBpZiBub3QgdHJhbnMuYXBwLnZpc3VhbGl6YXRpb25zX3JlZ2lzdHJ5OgogICAgICAgICAg ICByZXR1cm4gaGRhLmdldF92aXN1YWxpemF0aW9ucygpCkBAIC00MjMsNzYgKzQ1MiwxMCBAQAog ICAgICMgICAgICAgICAgICAgICAgam9iLm1hcmtfZGVsZXRlZCggc2VsZi5hcHAuY29uZmlnLnRy YWNrX2pvYnNfaW5fZGF0YWI9CmFzZSApCiAgICAgIyAgICAgICAgICAgICAgICBzZWxmLmFwcC5q b2JfbWFuYWdlci5qb2Jfc3RvcF9xdWV1ZS5wdXQoIGpvYi5pZCApCj0yMAotIyBvbGQgZmlsZQot ICAgICNkZWYgZ2V0KCBzZWxmLCB0cmFucywgdW5lbmNvZGVkX2lkLCBjaGVja19vd25lcnNoaXA9 M0RUcnVlLCBjaGVja19hY2M9CmVzc2libGU9M0RUcnVlICk6Ci0gICAgIyAgICAiIiIKLSAgICAj ICAgIEdldCBhbiBIREEgYnkgaXRzIHVuZW5jb2RlZCBkYiBpZCwgY2hlY2tpbmcgb3duZXJzaGlw ICh2aWEgaXRzIGhpPQpzdG9yeSkKLSAgICAjICAgIG9yIGFjY2Vzc2liaWxpdHkgKHZpYSBkYXRh c2V0IHNoYXJlcy9wZXJtaXNzaW9ucykuCi0gICAgIyAgICAiIiIKLSAgICAjICAgIGhkYSA9M0Qg dHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNz PQpvY2lhdGlvbiApLmdldCggdW5lbmNvZGVkX2lkICkKLSAgICAjICAgIGlmIGhkYSBpcyBOb25l OgotICAgICMgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQoKQotICAgICMg ICAgaGRhID0zRCBzZWxmLnNlY3VyZSggdHJhbnMsIGhkYSwgY2hlY2tfb3duZXJzaGlwLCBjaGVj a19hY2Nlc3NpYmw9CmUgKQotICAgICMgICAgcmV0dXJuIGhkYQotICAgICMKLSAgICAjZGVmIHNl Y3VyZSggc2VsZiwgdHJhbnMsIGhkYSwgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlY2tfYWNj ZXNzaWJsPQplPTNEVHJ1ZSApOgotICAgICMgICAgIiIiCi0gICAgIyAgICBjaGVjayBvd25lcnNo aXAgKHZpYSBpdHMgaGlzdG9yeSkgb3IgYWNjZXNzaWJpbGl0eSAodmlhIGRhdGFzZXQKLSAgICAj ICAgIHNoYXJlcy9wZXJtaXNzaW9ucykuCi0gICAgIyAgICAiIiIKLSAgICAjICAgICMgYWxsIGl0 ZW1zIGFyZSBhY2Nlc3NpYmxlIHRvIGFuIGFkbWluCi0gICAgIyAgICBpZiB0cmFucy51c2VyIGFu ZCB0cmFucy51c2VyX2lzX2FkbWluKCk6Ci0gICAgIyAgICAgICAgcmV0dXJuIGhkYQotICAgICMg ICAgaWYgY2hlY2tfb3duZXJzaGlwOgotICAgICMgICAgICAgIGhkYSA9M0Qgc2VsZi5jaGVja19v d25lcnNoaXAoIHRyYW5zLCBoZGEgKQotICAgICMgICAgaWYgY2hlY2tfYWNjZXNzaWJsZToKLSAg ICAjICAgICAgICBoZGEgPTNEIHNlbGYuY2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYSApCi0g ICAgIyAgICByZXR1cm4gaGRhCi0gICAgIwotICAgICNkZWYgY2FuX2FjY2Vzc19kYXRhc2V0KCBz ZWxmLCB0cmFucywgaGRhICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgIFVzZSBzZWN1cml0eSBh Z2VudCB0byBzZWUgaWYgY3VycmVudCB1c2VyIGhhcyBhY2Nlc3MgdG8gZGF0YXNldC4KLSAgICAj ICAgICIiIgotICAgICMgICAgY3VycmVudF91c2VyX3JvbGVzID0zRCB0cmFucy5nZXRfY3VycmVu dF91c2VyX3JvbGVzKCkKLSAgICAjICAgIHJldHVybiB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQu Y2FuX2FjY2Vzc19kYXRhc2V0KCBjdXJyZW50X3VzZXJfPQpyb2xlcywgaGRhLmRhdGFzZXQgKQot ICAgICMKLSAgICAjI1RPRE86IGlzX293bmVyLCBpc19hY2Nlc3NpYmxlCi0gICAgIwotICAgICNk ZWYgY2hlY2tfb3duZXJzaGlwKCBzZWxmLCB0cmFucywgaGRhICk6Ci0gICAgIyAgICAiIiIKLSAg ICAjICAgIFVzZSBoaXN0b3J5IHRvIHNlZSBpZiBjdXJyZW50IHVzZXIgb3ducyBIREEuCi0gICAg IyAgICAiIiIKLSAgICAjICAgIGlmIG5vdCB0cmFucy51c2VyOgotICAgICMgICAgICAgICNpZiBo ZGEuaGlzdG9yeSA9M0Q9M0QgdHJhbnMuaGlzdG9yeToKLSAgICAjICAgICAgICAjICAgIHJldHVy biBoZGEKLSAgICAjICAgICAgICByYWlzZSBleGNlcHRpb25zLkF1dGhlbnRpY2F0aW9uUmVxdWly ZWQoICJNdXN0IGJlIGxvZ2dlZCBpbiB0PQpvIG1hbmFnZSBHYWxheHkgZGF0YXNldHMiLCB0eXBl PTNEJ2Vycm9yJyApCi0gICAgIyAgICBpZiB0cmFucy51c2VyX2lzX2FkbWluKCk6Ci0gICAgIyAg ICAgICAgcmV0dXJuIGhkYQotICAgICMgICAgIyBjaGVjayBmb3Igb3duZXJzaGlwIG9mIHRoZSBj b250YWluaW5nIGhpc3RvcnkgYW5kIGFjY2Vzc2liaWxpdHk9CiBvZiB0aGUgdW5kZXJseWluZyBk YXRhc2V0Ci0gICAgIyAgICBpZiggc2VsZi5oaXN0b3JpZXNfbWdyLmlzX293bmVyKCB0cmFucywg aGRhLmhpc3RvcnkgKQotICAgICMgICAgICAgICAgICBhbmQgc2VsZi5jYW5fYWNjZXNzX2RhdGFz ZXQoIHRyYW5zLCBoZGEgKSApOgotICAgICMgICAgICAgIHJldHVybiBoZGEKLSAgICAjICAgIHJh aXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVyc2hpcEV4Y2VwdGlvbigKLSAgICAjICAgICAgICAiSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbiBpcyBub3Qgb3duZWQgYnkgdGhlIGN1cnJlbnQgdXNlciIs PQogdHlwZT0zRCdlcnJvcicgKQotCi0gICAgI2RlZiBjaGVja19hY2Nlc3NpYmxlKCBzZWxmLCB0 cmFucywgaGRhICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgIFJhaXNlIGVycm9yIGlmIEhEQSBp cyBub3QgYWNjZXNzaWJsZS4KLSAgICAjICAgICIiIgotICAgICMgICAgaWYgdHJhbnMudXNlciBh bmQgdHJhbnMudXNlcl9pc19hZG1pbigpOgotICAgICMgICAgICAgIHJldHVybiBoZGEKLSAgICAj ICAgICMgY2hlY2sgZm9yIGFjY2VzcyBvZiB0aGUgY29udGFpbmluZyBoaXN0b3J5Li4uCi0gICAg IyAgICBzZWxmLmhpc3Rvcmllc19tZ3IuY2hlY2tfYWNjZXNzaWJsZSggdHJhbnMsIGhkYS5oaXN0 b3J5ICkKLSAgICAjICAgICMgLi4udGhlbiB0aGUgdW5kZXJseWluZyBkYXRhc2V0Ci0gICAgIyAg ICBpZiBzZWxmLmNhbl9hY2Nlc3NfZGF0YXNldCggdHJhbnMsIGhkYSApOgotICAgICMgICAgICAg IHJldHVybiBoZGEKLSAgICAjICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlF eGNlcHRpb24oCi0gICAgIyAgICAgICAgIkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24gaXMgbm90 IGFjY2Vzc2libGUgdG8gdGhlIGN1cnJlbnQgdT0Kc2VyIiwgdHlwZT0zRCdlcnJvcicgKQotCi0K ICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0KPTNEPTNEPTNECiBjbGFzcyBIREFTZXJpYWxpemVyKCBiYXNlLk1vZGVsU2VyaWFsaXplciAp OgogICAgICNUT0RPOiBpbmhlcml0IGZyb20gZGF0YXNldHMuRGF0YXNldEFzc29jaWF0aW9uU2Vy aWFsaXplcgorICAgICNUT0RPOiBtb3ZlIHdoYXQgbWFrZXMgc2Vuc2UgaW50byBEYXRhc2V0U2Vy aWFsaXplcgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBl ciggSERBU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQpAQCAtNTE3LDYgKzQ4MCw3 IEBACiAgICAgICAgICAgICAjIHdoeSBpbmNsdWRlIGlmIG1vZGVsX2NsYXNzIGlzIHRoZXJlPwog ICAgICAgICAgICAgJ2hkYV9sZGRhJywgJ2hpc3RvcnlfY29udGVudF90eXBlJywKICAgICAgICAg ICAgICdzdGF0ZScsCisgICAgICAgICAgICAjVE9ETzogYWNjZXNzaWJsZSBuZWVkcyB0byBnbyBh d2F5CiAgICAgICAgICAgICAnYWNjZXNzaWJsZScsCiAgICAgICAgICAgICAnZGVsZXRlZCcsICdw dXJnZWQnLCAndmlzaWJsZScsICdyZXN1Ym1pdHRlZCcsCj0yMApAQCAtNTY1LDYgKzUyOSw3IEBA CiAgICAgZGVmIGFkZF9zZXJpYWxpemVycyggc2VsZiApOgogICAgICAgICBzZWxmLnNlcmlhbGl6 ZXJzLnVwZGF0ZSh7CiAgICAgICAgICAgICAnbW9kZWxfY2xhc3MnICAgOiBsYW1iZGEgKmE6ICdI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uJywKKyAgICAgICAgICAgICNUT0RPOiBhY2Nlc3NpYmxl IG5lZWRzIHRvIGdvIGF3YXkKICAgICAgICAgICAgICdhY2Nlc3NpYmxlJyAgICA6IGxhbWJkYSAq YTogVHJ1ZSwKPTIwCiAgICAgICAgICAgICAnaWQnICAgICAgICAgICAgOiBzZWxmLnNlcmlhbGl6 ZV9pZCwKQEAgLTYyOSw2ICs1OTQsOCBAQAogICAgICAgICB9KQo9MjAKICAgICBkZWYgc2VyaWFs aXplKCBzZWxmLCB0cmFucywgaGRhLCBrZXlzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIK ICAgICAgICAgIyBpZiAnbWV0YWRhdGEnIGlzbid0IHJlbW92ZWQgZnJvbSBrZXlzIGhlcmUgc2Vy aWFsaXplIHdpbGwgcmV0cmllPQp2ZSB0aGUgdW4tc2VyaWFsaXphYmxlIE1ldGFkYXRhQ29sbGVj dGlvbgogICAgICAgICAjVE9ETzogcmVtb3ZlIHRoZXNlIHdoZW4gbWV0YWRhdGEgaXMgc3ViLW9i amVjdAogICAgICAgICBLRVlTX0hBTkRMRURfU0VQQVJBVEVMWSA9M0QgKCAnbWV0YWRhdGEnLCAp CkBAIC02NDAsNiArNjA3LDIwIEBACiAgICAgICAgICAgICBzZXJpYWxpemVkLnVwZGF0ZSggc2Vs Zi5wcmVmaXhlZF9tZXRhZGF0YSggdHJhbnMsIGhkYSApICkKICAgICAgICAgcmV0dXJuIHNlcmlh bGl6ZWQKPTIwCisgICAgI1RPRE86IHRoaXMgaXMgbW9yZSB1dGlsL2dlbi4gdXNlCisgICAgZGVm IHBsdWNrX2Zyb21fbGlzdCggc2VsZiwgbCwgZWxlbXMgKToKKyAgICAgICAgIiIiCisgICAgICAg IFJlbW92ZXMgZm91bmQgZWxlbXMgZnJvbSBsaXN0IGwgYW5kIHJldHVybnMgbGlzdCBvZiBmb3Vu ZCBlbGVtcyBpZj0KIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgZm91bmQgPTNEIFtdCisg ICAgICAgIGZvciBlbGVtIGluIGVsZW1zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg ICAgIGluZGV4ID0zRCBsLmluZGV4KCBlbGVtICkKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBl bmQoIGwucG9wKCBpbmRleCApICkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCB2YWxf ZXJyOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGZvdW5kCisKICAgICBk ZWYgcHJlZml4ZWRfbWV0YWRhdGEoIHNlbGYsIHRyYW5zLCBoZGEgKToKICAgICAgICAgIiIiCiAg ICAgICAgIEFkZHMgKGEgcHJlZml4ZWQgdmVyc2lvbiBvZikgdGhlIGhkYSBtZXRhZGF0YSB0byB0 aGUgZGljdCwgcHJlZml4aT0KbmcgZWFjaCBrZXkKQEAgLTY1NSw2ICs2MzYsOCBAQAogICAgICAg ICByZXR1cm4gcHJlZml4ZWQKPTIwCiAgICAgZGVmIHNlcmlhbGl6ZV9tZXRhZGF0YSggc2VsZiwg dHJhbnMsIGhkYSwga2V5LCBleGNsdWRlZD0zRE5vbmUgKToKKyAgICAgICAgIiIiCisgICAgICAg ICIiIgogICAgICAgICAjIGRia2V5IGlzIGEgcmVwZWF0IGFjdHVhbGx5IChtZXRhZGF0YV9kYmtl eSA9M0Q9M0QgZ2Vub21lX2J1aWxkKQogICAgICAgICAjZXhjbHVkZWQgPTNEIFsgJ2Ria2V5JyBd IGlmIGV4Y2x1ZGVkIGlzIE5vbmUgZWxzZSBleGNsdWRlZAogICAgICAgICBleGNsdWRlZCA9M0Qg W10gaWYgZXhjbHVkZWQgaXMgTm9uZSBlbHNlIGV4Y2x1ZGVkCkBAIC02ODAsNiArNjYzLDggQEAK PTIwCiAgICAgIyBhZGQgdG8gc2VyaWFsaXplX21ldGFkYXRhIGFib3ZlCiAgICAgZGVmIHNlcmlh bGl6ZV9tZXRhX2ZpbGVzKCBzZWxmLCB0cmFucywgaGRhLCBrZXkgKToKKyAgICAgICAgIiIiCisg ICAgICAgICIiIgogICAgICAgICBtZXRhX2ZpbGVzID0zRCBbXQogICAgICAgICBmb3IgbWV0YV90 eXBlIGluIGhkYS5tZXRhZGF0YS5zcGVjLmtleXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFu Y2UoIGhkYS5tZXRhZGF0YS5zcGVjWyBtZXRhX3R5cGUgXS5wYXJhbSwgZ2FsYXh5LmRhPQp0YXR5 cGVzLm1ldGFkYXRhLkZpbGVQYXJhbWV0ZXIgKToKQEAgLTY4OSw2ICs2NzQsOCBAQAogICAgICNk ZWYgZmlsZV9pbmZvICNUT0RPCiAgICAgI1RPRE86IGFuZCB0byBkYXRhc2V0IGluc3RlYWQgKHBh c3NpbmcgdGhyb3VnaCBvYmplY3Qgc3RvcmUpCiAgICAgZGVmIHNlcmlhbGl6ZV9maWxlX3BhdGgo IHNlbGYsIHRyYW5zLCBoZGEsIGtleSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAjVE9E TzogYWxsb3cgYWRtaW4KICAgICAgICAgaWYgdHJhbnMuYXBwLmNvbmZpZy5leHBvc2VfZGF0YXNl dF9wYXRoOgogICAgICAgICAgICAgdHJ5OgpAQCAtNjk4LDYgKzY4NSw4IEBACiAgICAgICAgIHJl dHVybiBOb25lCj0yMAogICAgIGRlZiBzZXJpYWxpemVfdXJscyggc2VsZiwgdHJhbnMsIGhkYSwg a2V5ICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgdXJsX2ZvciA9M0QgZ2Fs YXh5LndlYi51cmxfZm9yCiAgICAgICAgIGVuY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVu Y29kZV9pZCggaGRhLmlkICkKICAgICAgICAgdXJscyA9M0QgewoKZGlmZiAtciA1ZDBmY2E1OTEz OTRkN2U3YWFhYmFkZmNkZWQ5ZjgzN2ZkNDM2ZWQyIC1yIDRiZGU3MGM2NzdhOTJkZGE3MjEyZWNj PQo0Y2Q5ZWE5YzRkM2VjNjk1MiBsaWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQotLS0g YS9saWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFn ZXJzL2hpc3Rvcmllcy5weQpAQCAtMjMsNyArMjMsNiBAQAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIEhp c3RvcnlNYW5hZ2VyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsTWFuYWdlciwgYmFzZS5QdXJnYWJs ZU1vZGVsSW50PQplcmZhY2UgKToKICAgICAiIiIKLSAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmpl Y3QgZm9yIGludGVyYWN0aW5nIHdpdGggSERBcy4KICAgICAiIiIKICAgICBtb2RlbF9jbGFzcyA9 M0QgbW9kZWwuSGlzdG9yeQogICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuSGlzdG9y eS5jcmVhdGVfdGltZSwgKQpAQCAtMzEsMjQgKzMwLDM2IEBACiAgICAgdXNlcl9zaGFyZV9tb2Rl bCA9M0QgbW9kZWwuSGlzdG9yeVVzZXJTaGFyZUFzc29jaWF0aW9uCj0yMAogICAgIGRlZiBfX2lu aXRfXyggc2VsZiwgYXBwLCAqYXJncywgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAg ICIiIgogICAgICAgICBzdXBlciggSGlzdG9yeU1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBw LCAqYXJncywgKiprd2FyZ3MgKQogICAgICAgICBzZWxmLmhkYV9tZ3IgPTNEIGhkYXMuSERBTWFu YWdlciggYXBwICkKPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gY3J1ZAogICAgIGRlZiBj b3B5KCBzZWxmLCB0cmFucywgaGlzdG9yeSwgdXNlciwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIi CisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gaGlzdG9yeS5jb3B5KCB0YXJnZXRfdXNlcj0z RHVzZXIsICoqa3dhcmdzICkKPTIwCiAgICAgZGVmIGdldF9jdXJyZW50KCBzZWxmLCB0cmFucyAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiB0cmFucy5nZXRfaGlz dG9yeSgpCj0yMAogICAgIGRlZiBzZXRfY3VycmVudCggc2VsZiwgdHJhbnMsIGhpc3RvcnkgKToK KyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICB0cmFucy5zZXRfaGlzdG9yeSggaGlz dG9yeSApCiAgICAgICAgIHJldHVybiBoaXN0b3J5Cj0yMAogICAgIGRlZiBzZXRfY3VycmVudF9i eV9pZCggc2VsZiwgdHJhbnMsIGhpc3RvcnlfaWQgKToKKyAgICAgICAgIiIiCisgICAgICAgICIi IgogICAgICAgICByZXR1cm4gc2VsZi5zZXRfY3VycmVudCggdHJhbnMsIHNlbGYuYnlfaWQoIHRy YW5zLCBoaXN0b3J5X2lkICkgKQo9MjAKICAgICBkZWYgbW9zdF9yZWNlbnQoIHNlbGYsIHRyYW5z LCB1c2VyLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlm IG5vdCB1c2VyOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUgaWYgdHJhbnMuaGlzdG9yeS5kZWxl dGVkIGVsc2UgdHJhbnMuaGlzdG9yeQogICAgICAgICBkZXNjX3VwZGF0ZV90aW1lID0zRCBzZWxm Lm1vZGVsX2NsYXNzLnRhYmxlLmMudXBkYXRlX3RpbWUKQEAgLTc5LDYgKzkwLDggQEAKPTIwCiAg ICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gcHVyZ2FibGUKICAgICBkZWYgcHVyZ2UoIHNlbGYsIHRy YW5zLCBoaXN0b3J5LCBmbHVzaD0zRFRydWUsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAg ICAgICAiIiIKICAgICAgICAgc2VsZi5lcnJvcl91bmxlc3NfZGF0YXNldF9wdXJnZV9hbGxvd2Vk KCB0cmFucywgaGlzdG9yeSApCj0yMAogICAgICAgICAjIEZpcnN0IHB1cmdlIGFsbCB0aGUgZGF0 YXNldHMKCmRpZmYgLXIgNWQwZmNhNTkxMzk0ZDdlN2FhYWJhZGZjZGVkOWY4MzdmZDQzNmVkMiAt ciA0YmRlNzBjNjc3YTkyZGRhNzIxMmVjYz0KNGNkOWVhOWM0ZDNlYzY5NTIgbGliL2dhbGF4eS9t YW5hZ2Vycy9zaGFyYWJsZS5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5 CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFibGUucHkKQEAgLTEyLDM3ICsxMiwzNyBA QAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xhc3MgU2hhcmFibGVNb2RlbE1hbmFnZXIoIGJhc2Uu TW9kZWxNYW5hZ2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbEludGVyZmE9CmNlICk6Ci0gICAgIyBz dXBlcmNsYXNzIHRoYXQgdXNlcyBpdHMgaW1wb3J0YWJsZSwgcGx1Ymxpc2hlZCwgb3IgdXNlcl9z aGFyZV9hc3NvYz0KaWF0aW9ucyB0byBjaGVjayBhY2Nlc3NpYmlsaXR5CitjbGFzcyBTaGFyYWJs ZU1vZGVsTWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2UuT3duYWJsZU1vZGVsSW50ZXJm YWNlLD0KIGJhc2UuQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlICk6CisgICAgIiIiCisgICAgU3Vw ZXJjbGFzcyBmb3IgbWFuYWdlcnMgb2YgYSBtb2RlbCB0aGF0OgorICAgICAgICBoYXMgYW4gb3du ZXIvY3JlYXRvciBVc2VyCisgICAgICAgIGlzIHNoYXJhYmxlIHdpdGggb3RoZXIsIHNwZWNpZmlj IFVzZXJzCisgICAgICAgIGlzIGltcG9ydGFibGUgKGNvcHlhYmxlKSBieSB1c2VycyB0aGF0IGhh dmUgYWNjZXNzCisgICAgICAgIGhhcyBhIHNsdWcgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSBsaW5r IHRvIHZpZXcgdGhlIHJlc291cmNlCisgICAgICAgIGNhbiBiZSBwdWJsaXNoZWQgZWZmZWN0aXZl bHkgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgVXNlcnMKKyAgICAgICAgY2FuIGJl IHJhdGVkCisgICAgIiIiCiAgICAgIyBoaXN0b3JpZXMsIHBhZ2VzLCBzdG9yZWQgd29ya2Zsb3dz LCB2aXN1YWxpemF0aW9ucwogICAgIHVzZXJfc2hhcmVfbW9kZWwgPTNEIE5vbmUKPTIwCiAgICAg ZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAg ICAgICBzdXBlciggU2hhcmFibGVNb2RlbE1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkK LSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoIHNlbGYubW9kZWxfY2xhc3MsICd1c2VyX2lkJyApLCAo Ci0gICAgICAgICAgICAnTm8gdXNlcl9pZCBvbiBTaGFyYWJsZSBtb2RlbDogJXMnICUoIHNlbGYu bW9kZWxfY2xhc3NfbmFtZSApICkKLQotICAgICAgICBhc3NlcnQgc2VsZi51c2VyX3NoYXJlX21v ZGVsLCAoCi0gICAgICAgICAgICAnTm8gVXNlclNoYXJlQXNzb2NpYXRpb24gb24gU2hhcmFibGUg bW9kZWw6ICVzJyAlKCBzZWxmLm1vZGVsXz0KY2xhc3MuX19uYW1lX18gKSApCi0gICAgICAgIGFz c2VydCBoYXNhdHRyKCBzZWxmLm1vZGVsX2NsYXNzLCAndXNlcnNfc2hhcmVkX3dpdGhfZG90X3Vz ZXJzJyApLD0KICgKLSAgICAgICAgICAgICdObyB1c2Vyc19zaGFyZWRfd2l0aF9kb3RfdXNlcnMg b24gU2hhcmFibGUgbW9kZWw6ICVzJyAlKCBzZWxmPQoubW9kZWxfY2xhc3MuX19uYW1lX18gKSAp Ci0KLSNUT0RPOiBsaWJyYXJpZXMgZG8gbm90IGhhdmUgaW1wb3J0YWJsZQotICAgICAgICBhc3Nl cnQgaGFzYXR0ciggc2VsZi5tb2RlbF9jbGFzcywgJ2ltcG9ydGFibGUnICksICgKLSAgICAgICAg ICAgICdObyB1c2Vyc19zaGFyZWRfd2l0aF9kb3RfdXNlcnMgb24gU2hhcmFibGUgbW9kZWw6ICVz JyAlKCBzZWxmPQoubW9kZWxfY2xhc3MuX19uYW1lX18gKSApCi0gICAgICAgIGFzc2VydCBoYXNh dHRyKCBzZWxmLm1vZGVsX2NsYXNzLCAncHVibGlzaGVkJyApLCAoCi0gICAgICAgICAgICAnTm8g cHVibGlzaGVkIG9uIFNoYXJhYmxlIG1vZGVsOiAlcycgJSggc2VsZi5tb2RlbF9jbGFzcy5fX25h bT0KZV9fICkgKQotCiAgICAgICAgICMgdXNlciBtYW5hZ2VyIGlzIG5lZWRlZCB0byBjaGVjayBh Y2Nlc3Mvb3duZXJzaGlwL2FkbWluCiAgICAgICAgIHNlbGYudXNlcl9tZ3IgPTNEIHVzZXJzLlVz ZXJNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBoYXMgYSB1c2Vy CiAgICAgZGVmIF9xdWVyeV9ieV91c2VyKCBzZWxmLCB0cmFucywgdXNlciwgZmlsdGVycz0zRE5v bmUsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgdXNlcl9m aWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MudXNlcl9pZCA9M0Q9M0QgdXNlci5pZAogICAgICAg ICBmaWx0ZXJzPTNEc2VsZi5fbXVuZ2VfZmlsdGVycyggdXNlcl9maWx0ZXIsIGZpbHRlcnMgKQog ICAgICAgICByZXR1cm4gc2VsZi5xdWVyeSggdHJhbnMsIGZpbHRlcnM9M0RmaWx0ZXJzLCAqKmt3 YXJncyApCj0yMAogICAgIGRlZiBieV91c2VyKCBzZWxmLCB0cmFucywgdXNlciwgZmlsdGVycz0z RE5vbmUsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgdXNl cl9maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MudXNlcl9pZCA9M0Q9M0QgdXNlci5pZAogICAg ICAgICBmaWx0ZXJzPTNEc2VsZi5fbXVuZ2VfZmlsdGVycyggdXNlcl9maWx0ZXIsIGZpbHRlcnMg KQogICAgICAgICAjbm90ZTogbm8gb3duZXJzaGlwIGNoZWNrIG5lZWRlZApAQCAtNTAsMTEgKzUw LDkgQEAKPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gb3duZWQgbW9kZWwgaW50ZXJmYWNl CiAjIHRoaXMgcmVhbGx5IGlzIG1vcmUgb2YgYSAnY2hlY2tfKmVkaXRhYmxlL3dyaXRlKicgLSBp biBlc3NlbmNlIHRoYXQncyB3aD0KYXQgY2hlY2tfb3duZXJzaGlwIGJvaWxzIGRvd24gdG8gb2Z0 ZW4KLSAgICBkZWYgb3duZXJzaGlwX2J5X2lkKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dh cmdzICk6Ci0gICAgICAgIGl0ZW0gPTNEIHN1cGVyKCBTaGFyYWJsZU1vZGVsTWFuYWdlciwgc2Vs ZiApLmJ5X2lkKCB0cmFucywgaWQsICoqaz0Kd2FyZ3MgKQotICAgICAgICByZXR1cm4gc2VsZi5l cnJvcl91bmxlc3Nfb3duZXIoIHRyYW5zLCBpdGVtLCB1c2VyICkKLQogICAgIGRlZiBpc19vd25l ciggc2VsZiwgdHJhbnMsIGl0ZW0sIHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgog ICAgICAgICBpZiBzZWxmLnVzZXJfbWdyLmlzX2Fub255bW91cyggdXNlciApOgogICAgICAgICAg ICAgIyBub3RlOiB0aGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGNhc2Ugb2YgYW5v biB1c2VycyA9CmFuZCBzZXNzaW9uLmN1cnJlbnRfaGlzdG9yeQogICAgICAgICAgICAgcmV0dXJu IEZhbHNlCkBAIC02MiwyMCArNjAsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAg ICAgIHJldHVybiBpdGVtLnVzZXIgPTNEPTNEIHVzZXIKPTIwCi0gICAgZGVmIGVycm9yX3VubGVz c19vd25lciggc2VsZiwgdHJhbnMsIGl0ZW0sIHVzZXIgKToKLSAgICAgICAgaWYgc2VsZi5pc19v d25lciggdHJhbnMsIGl0ZW0sIHVzZXIgKToKLSAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAg ICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVyc2hpcEV4Y2VwdGlvbiggIiVzIGlzIG5vdCBv d25lZCBieSB1c2VyIj0KICUgKCBzZWxmLm1vZGVsX2NsYXNzX25hbWUgKSApCi0KLSAgICBkZWYg bGlzdF9vd25lZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6Ci0gICAgICAgIGl0ZW1z ID0zRCBiYXNlLk1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQotICAg ICAgICByZXR1cm4gWyBzZWxmLmVycm9yX3VubGVzc19vd25lciggdHJhbnMsIGl0ZW0sIHVzZXIg KSBmb3IgaXRlbSBpbiA9Cml0ZW1zIF0KLQotICAgIGRlZiBmaWx0ZXJfb3duZWQoIHNlbGYsIHRy YW5zLCB1c2VyLCAqKmt3YXJncyApOgotICAgICAgICBwYXNzCi0KICAgICAjIC4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u PQouLi4uLiBhY2Nlc3NpYmxlIGludGVyZmFjZQogICAgIGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxm LCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAg IGlmIGl0ZW0uaW1wb3J0YWJsZToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICMg bm90ZTogb3duZXJzIGFsd2F5cyBoYXZlIGFjY2VzcyAtIGNoZWNraW5nIGZvciBhY2Nlc3NpYmxl IGltcGxpYz0KaXRseSBjaGVja3MgZm9yIG93bmVyc2hpcApAQCAtMTA3LDYgKzk1LDcgQEAKICAg ICAgICAgRG9lcyBub3QgZmx1c2gvY29tbWl0IGNoYW5nZXMsIGhvd2V2ZXIuIEl0ZW0gbXVzdCBo YXZlIG5hbWUsIHVzZXIsCiAgICAgICAgIGltcG9ydGFibGUsIGFuZCBzbHVnIGF0dHJpYnV0ZXMu CiAgICAgICAgICIiIgorICAgICAgICAjPz86IGNhbiBhIHB1Ymxpc2hlZCBpdGVtIGJlIG5vbi1p bXBvcnRhYmxlPwogICAgICAgICAjaWYgaXRlbS5wdWJsaXNoZWQ6CiAgICAgICAgICMgICAgaWYg dW5wdWJsaXNoOgogICAgICAgICAjICAgICAgICBzZWxmLnVucHVibGlzaCggdHJhbnMsIGl0ZW0s IGZsdXNoPTNERmFsc2UgKQpAQCAtMTIwLDYgKzEwOSw4IEBACj0yMAogICAgIGRlZiBsaXN0X2lt cG9ydGFibGUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgogI1RPRE86CisgICAgICAgICIiIgor ICAgICAgICAiIiIKICAgICAgICAgcGFzcwo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBw dWJsaXNoZWQKQEAgLTEzMiw2ICsxMjMsOCBAQAogICAgICMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPQo9M0RzdHIoIGl0 ZW0gKSApCiAgICAgIyBhIHB1Ymxpc2hlZCBpdGVtIGlzIGFsc28vYWxyZWFkeSBpbXBvcnRhYmxl KD0zRFRydWUpIGltcGxpY2l0bHkKICAgICBkZWYgcHVibGlzaCggc2VsZiwgdHJhbnMsIGl0ZW0s IGZsdXNoPTNEVHJ1ZSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5v dCBpdGVtLmltcG9ydGFibGU6CiAgICAgICAgICAgICBzZWxmLm1ha2VfaW1wb3J0YWJsZSggdHJh bnMsIGl0ZW0sIGZsdXNoPTNERmFsc2UgKQogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCgg aXRlbSApCkBAIC0xNDEsNiArMTM0LDggQEAKICAgICAgICAgcmV0dXJuIGl0ZW0KPTIwCiAgICAg ZGVmIHVucHVibGlzaCggc2VsZiwgdHJhbnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSApOgorICAgICAg ICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVtICkK ICAgICAgICAgaXRlbS5wdWJsaXNoZWQgPTNEIEZhbHNlCiAgICAgICAgIGlmIGZsdXNoOgpAQCAt MTQ5LDE3ICsxNDQsMjMgQEAKPTIwCiAgICAgZGVmIGxpc3RfcHVibGlzaGVkKCBzZWxmLCB0cmFu cywgKiprd2FyZ3MgKToKICNUT0RPOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAg IHBhc3MKPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gdXNlciBzaGFyaW5nCiAgICAgIyBz aGFyaW5nIGlzIG9mdGVuIGRvbmUgdmlhIGEgM3JkIHRhYmxlIGJ0d24gYSBVc2VyIGFuZCBhbiBp dGVtIC0+IGEgPD0KSXRlbT5Vc2VyU2hhcmVBc3NvY2lhdGlvbgogICAgIGRlZiBnZXRfc2hhcmVf YXNzb2NzKCBzZWxmLCB0cmFucywgaXRlbSwgdXNlcj0zRE5vbmUgKToKKyAgICAgICAgIiIiCisg ICAgICAgICIiIgogICAgICAgICBxdWVyeSA9M0Qgc2VsZi5xdWVyeV9hc3NvY2lhdGVkKCB0cmFu cywgc2VsZi51c2VyX3NoYXJlX21vZGVsLCBpdGU9Cm0gKQogICAgICAgICBpZiB1c2VyIGlzIG5v dCBOb25lOgogICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlcl9ieSggdXNlcj0zRHVz ZXIgKQogICAgICAgICByZXR1cm4gcXVlcnkuYWxsKCkKPTIwCiAgICAgZGVmIHNoYXJlX3dpdGgo IHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyLCBmbHVzaD0zRFRydWUgKToKKyAgICAgICAgIiIiCisg ICAgICAgICIiIgogICAgICAgICAjIGFsbG93IHVzZXIgdG8gYmUgYSBsaXN0IGFuZCBjYWxsIHJl Y3Vyc2l2bHkKICAgICAgICAgaWYgaXNpbnN0YW5jZSggdXNlciwgbGlzdCApOgogICAgICAgICAg ICAgcmV0dXJuIG1hcCggbGFtYmRhIHVzZXI6IHNlbGYuc2hhcmVfd2l0aCggdHJhbnMsIGl0ZW0s IHVzZXIsIGY9Cmx1c2g9M0RGYWxzZSApLCB1c2VyICkKQEAgLTE3NCw2ICsxNzUsOCBAQAogICAg ICAgICByZXR1cm4gaXRlbQo9MjAKICAgICBkZWYgdW5zaGFyZV93aXRoKCBzZWxmLCB0cmFucywg aXRlbSwgdXNlciwgZmx1c2g9M0RUcnVlICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAg ICAgICAgaWYgaXNpbnN0YW5jZSggdXNlciwgbGlzdCApOgogICAgICAgICAgICAgcmV0dXJuIG1h cCggbGFtYmRhIHVzZXI6IHNlbGYudW5zaGFyZV93aXRoKCB0cmFucywgaXRlbSwgdXNlciw9CiBm bHVzaD0zREZhbHNlICksIHVzZXIgKQogICAgICAgICAjIExvb2sgZm9yIGFuZCBkZWxldGUgc2hh cmluZyByZWxhdGlvbiBmb3IgaGlzdG9yeS11c2VyLgpAQCAtMTg1LDYgKzE4OCw4IEBACj0yMAog ICAgIGRlZiBsaXN0X3NoYXJlZF93aXRoKCBzZWxmLCB0cmFucywgaXRlbSwgdXNlciwgKiprd2Fy Z3MgKToKICNUT0RPOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHBhc3MKPTIw CiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2x1Z3MKQEAgLTE5Nyw2ICsyMDIsOCBAQAogICAg ICAgICByZXR1cm4gVkFMSURfU0xVR19SRS5tYXRjaCggc2x1ZyApCj0yMAogICAgIGRlZiBzZXRf c2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIG5ld19zbHVnLCBmbHVzaD0zRFRydWUgKToKKyAgICAg ICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBpZiBub3Qgc2VsZi5pc192YWxpZF9zbHVnKCBu ZXdfc2x1ZyApOgogICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFyYW1ldGVy SW52YWxpZEV4Y2VwdGlvbiggIkludmFsaWQgc2w9CnVnIiwgc2x1Zz0zRG5ld19zbHVnICkKPTIw CkBAIC0yNTAsNiArMjU3LDggQEAKICAgICAgICAgcmV0dXJuIG5ld19zbHVnCj0yMAogICAgIGRl ZiBjcmVhdGVfdW5pcXVlX3NsdWcoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRydWUgKToK KyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBpdGVtLnNsdWcgPTNEIHNlbGYuZ2V0 X3VuaXF1ZV9zbHVnKCB0cmFucywgaXRlbSApCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRk KCBpdGVtICkKICAgICAgICAgaWYgZmx1c2g6CkBAIC0yNTcsNiArMjY2LDggQEAKICAgICAgICAg cmV0dXJuIGl0ZW0KPTIwCiAgICAgZGVmIGJ5X3NsdWcoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3 YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHBhc3MKPTIwCiAgICAg IyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLj0KLi4uLi4gZGlzcGxheQpAQCAtMjc1LDE0ICsyODYsMjAgQEAKIGNsYXNz IFNoYXJhYmxlTW9kZWxEZXNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxEZXNlcmlhbGl6ZXIgKToKPTIw CiAgICAgZGVmIGRlc2VyaWFsaXplX3B1Ymxpc2hlZCggc2VsZiwgdHJhbnMsIGl0ZW0sIHZhbCAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOiBjYWxsIG1hbmFnZXIu cHVibGlzaC91bnB1Ymxpc2gKICAgICAgICAgcGFzcwo9MjAKICAgICBkZWYgZGVzZXJpYWxpemVf aW1wb3J0YWJsZSggc2VsZiwgdHJhbnMsIGl0ZW0sIHZhbCApOgorICAgICAgICAiIiIKKyAgICAg ICAgIiIiCiAgICAgICAgICNUT0RPOiBjYWxsIG1hbmFnZXIubWFrZV9pbXBvcnRhYmxlL25vbl9p bXBvcnRhYmxlCiAgICAgICAgIHBhc3MKPTIwCiAgICAgZGVmIGRlc2VyaWFsaXplX3NsdWcoIHNl bGYsIHRyYW5zLCBpdGVtLCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAg ICAjVE9ETzogY2FsbCBtYW5hZ2VyLnNldF9zbHVnCiAgICAgICAgIHBhc3MKPTIwCgpkaWZmIC1y IDVkMGZjYTU5MTM5NGQ3ZTdhYWFiYWRmY2RlZDlmODM3ZmQ0MzZlZDIgLXIgNGJkZTcwYzY3N2E5 MmRkYTcyMTJlY2M9CjRjZDllYTljNGQzZWM2OTUyIGxpYi9nYWxheHkvbWFuYWdlcnMvdGFncy5w eQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3RhZ3MucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy90YWdzLnB5CkBAIC0xLDQgKzEsNSBAQAotCisiIiIKKyIiIgo9MjAKIGNsYXNzIFRhZ3NN YW5hZ2VyKCBvYmplY3QgKToKICAgICAiIiIgTWFuYWdlcyBDUlVEIG9wZXJhdGlvbnMgcmVsYXRl ZCB0byB0YWdnaW5nIG9iamVjdHMuCgpkaWZmIC1yIDVkMGZjYTU5MTM5NGQ3ZTdhYWFiYWRmY2Rl ZDlmODM3ZmQ0MzZlZDIgLXIgNGJkZTcwYzY3N2E5MmRkYTcyMTJlY2M9CjRjZDllYTljNGQzZWM2 OTUyIGxpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vy cy91c2Vycy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL3VzZXJzLnB5CkBAIC0xLDUgKzEs NiBAQAogIiIiCiAiIiIKKwogaW1wb3J0IHBrZ19yZXNvdXJjZXMKIHBrZ19yZXNvdXJjZXMucmVx dWlyZSggIlNRTEFsY2hlbXkgPj0zRCAwLjQiICkKIGltcG9ydCBzcWxhbGNoZW15CkBAIC0xNiwx MSArMTcsMTUgQEAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3MgVXNlck1hbmFnZXIoIGJhc2UuTW9k ZWxNYW5hZ2VyICk6CisgICAgIiIiCisgICAgIiIiCiAgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVs LlVzZXIKICAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLlVzZXIuY3JlYXRlX3RpbWUs ICkKICAgICBmb3JlaWduX2tleV9uYW1lID0zRCAndXNlcicKPTIwCiAgICAgZGVmIGNyZWF0ZSgg c2VsZiwgdHJhbnMsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAg ICAgI1RPRE86IGRlc2VyaWFsaXplIGFuZCB2YWxpZGF0ZSBoZXJlCiAgICAgICAgIGVtYWlsID0z RCBrd2FyZ3NbICdlbWFpbCcgXQogICAgICAgICB1c2VybmFtZSA9M0Qga3dhcmdzWyAndXNlcm5h bWUnIF0KQEAgLTU1LDEyICs2MCwxNiBAQAogICAgICNUT0RPOiBpbmNvcnBvcmF0ZSBzZWN1cml0 eS92YWxpZGF0ZV91c2VyX2lucHV0LnB5Cj0yMAogICAgIGRlZiBfZXJyb3Jfb25fZHVwbGljYXRl X2VtYWlsKCBzZWxmLCB0cmFucywgZW1haWwgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgog ICAgICAgICAjVE9ETzogcmVtb3ZlIHRoaXMgY2hlY2sgd2hlbiB1bmlxdWU9M0RUcnVlIGlzIGFk ZGVkIHRvIHRoZSBlbWFpbCA9CmNvbHVtbgogICAgICAgICBpZiBzZWxmLmJ5X2VtYWlsKCB0cmFu cywgZW1haWwgKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29u ZmxpY3QoICdFbWFpbCBtdXN0IGJlIHVuaXF1ZScsIGVtYWlsPTNEZW1hPQppbCApCj0yMAogICAg ICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS09Ci0tLS0tIGZpbHRlcnMKICAgICBkZWYgYnlfZW1haWwoIHNlbGYsIHRy YW5zLCBlbWFpbCwgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAg ICAgICAiIiIKICAgICAgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVuZ2VfZmlsdGVycyggc2VsZi5t b2RlbF9jbGFzcy5lbWFpbCA9M0Q9M0QgZW1hPQppbCwgZmlsdGVycyApCiAgICAgICAgIHRyeToK ICAgICAgICAgICAgIHJldHVybiBzdXBlciggVXNlck1hbmFnZXIsIHNlbGYgKS5vbmUoIHRyYW5z LCBmaWx0ZXJzPTNEZmlsdGVyPQpzLCAqKmt3YXJncyApCkBAIC02OCwzNCArNzcsNDcgQEAKICAg ICAgICAgICAgIHJldHVybiBOb25lCj0yMAogICAgIGRlZiBieV9lbWFpbF9saWtlKCBzZWxmLCB0 cmFucywgZW1haWxfd2l0aF93aWxkY2FyZHMsIGZpbHRlcnM9M0ROb25lLCA9Cm9yZGVyX2J5PTNE Tm9uZSwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBmaWx0 ZXJzID0zRCBzZWxmLl9tdW5nZV9maWx0ZXJzKCBzZWxmLm1vZGVsX2NsYXNzLmVtYWlsLmxpa2Uo IGVtYWk9Cmxfd2l0aF93aWxkY2FyZHMgKSwgZmlsdGVycyApCiAgICAgICAgIG9yZGVyX2J5ID0z RCBvcmRlcl9ieSBvciAoIG1vZGVsLlVzZXIuZW1haWwsICkKICAgICAgICAgcmV0dXJuIHN1cGVy KCBVc2VyTWFuYWdlciwgc2VsZiApLmxpc3QoIHRyYW5zLCBmaWx0ZXJzPTNEZmlsdGVycywgPQpv cmRlcl9ieT0zRG9yZGVyX2J5LCAqKmt3YXJncyApCj0yMAogICAgICMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0t LS0tIGFkbWluCiAgICAgZGVmIGlzX2FkbWluKCBzZWxmLCB0cmFucywgdXNlciApOgorICAgICAg ICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIGFkbWluX2VtYWlscyA9M0Qgc2VsZi5fYWRtaW5f ZW1haWxzKCB0cmFucyApCiAgICAgICAgIHJldHVybiB1c2VyIGFuZCBhZG1pbl9lbWFpbHMgYW5k IHVzZXIuZW1haWwgaW4gYWRtaW5fZW1haWxzCj0yMAogICAgIGRlZiBfYWRtaW5fZW1haWxzKCBz ZWxmLCB0cmFucyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBb IHguc3RyaXAoKSBmb3IgeCBpbiB0cmFucy5hcHAuY29uZmlnLmdldCggImFkbWluX3VzZXJzIiwg Ij0KIiApLnNwbGl0KCAiLCIgKSBdCj0yMAogICAgIGRlZiBhZG1pbnMoIHNlbGYsIHRyYW5zLCBm aWx0ZXJzPTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAg ICAgICBmaWx0ZXJzID0zRCBzZWxmLl9tdW5nZV9maWx0ZXJzKCBzZWxmLm1vZGVsX2NsYXNzLmVt YWlsLmluXyggc2VsZi49Cl9hZG1pbl9lbWFpbHMoIHRyYW5zICkgKSwgZmlsdGVycyApCiAgICAg ICAgIHJldHVybiBzdXBlciggVXNlck1hbmFnZXIsIHNlbGYgKS5saXN0KCB0cmFucywgZmlsdGVy cz0zRGZpbHRlcnMsID0KKiprd2FyZ3MgKQo9MjAKICAgICBkZWYgZXJyb3JfdW5sZXNzX2FkbWlu KCBzZWxmLCB0cmFucywgdXNlciwgbXNnPTNEIkFkbWluaXN0cmF0b3JzIG9ubHkiPQosICoqa3dh cmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHNlbGYuaXNf YWRtaW4oIHRyYW5zLCB1c2VyICk6CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkFkbWlu UmVxdWlyZWRFeGNlcHRpb24oIG1zZywgKiprd2FyZ3MgKQogICAgICAgICByZXR1cm4gdXNlcgo9 MjAKICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSBhbm9ueW1vdXMKICAgICBkZWYgaXNfYW5vbnlt b3VzKCBzZWxmLCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgIyBk ZWZpbmUgaGVyZSBmb3Igc2luZ2xlIHBvaW50IG9mIGNoYW5nZQogICAgICAgICByZXR1cm4gdXNl ciBpcyBOb25lCj0yMAogICAgIGRlZiBlcnJvcl9pZl9hbm9ueW1vdXMoIHNlbGYsIHRyYW5zLCB1 c2VyLCBtc2c9M0QiTG9nLWluIHJlcXVpcmVkIiwgKio9Cmt3YXJncyApOgotICAgICAgICBwcmlu dCAnZXJyb3JfaWZfYW5vbnltb3VzJywgdXNlcgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAg ICAgICAgIGlmIHVzZXIgaXMgTm9uZToKICAgICAgICAgICAgICNUT0RPOiBjb2RlIGlzIGNvcnJl Y3QgKDQwMyksIGJ1dCBzaG91bGQgYmUgbmFtZWQgQXV0aGVudGljYXRpPQpvblJlcXVpcmVkICg0 MDEgYW5kIDQwMyBhcmUgZmxpcHBlZCkKICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQXV0 aGVudGljYXRpb25GYWlsZWQoIG1zZywgKiprd2FyZ3MgKQpAQCAtMTAzLDEyICsxMjUsMTggQEAK PTIwCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gY3VycmVudAogICAgIGRlZiBpc19jdXJyZW50 X3VzZXIoIHNlbGYsIHRyYW5zLCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKICAg ICAgICAgcmV0dXJuIHVzZXIgPTNEPTNEIHRyYW5zLnVzZXIKPTIwCiAgICAgZGVmIGlzX2N1cnJl bnRfdXNlcl9hbm9ueW1vdXMoIHNlbGYsIHRyYW5zICk6CisgICAgICAgICIiIgorICAgICAgICAi IiIKICAgICAgICAgcmV0dXJuIHRyYW5zLnVzZXIgaXMgTm9uZQo9MjAKICAgICBkZWYgaXNfY3Vy cmVudF91c2VyX2FkbWluKCBzZWxmLCB0cmFucyApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIi CiAgICAgICAgIHJldHVybiBzZWxmLmlzX2FkbWluKCB0cmFucywgdHJhbnMudXNlciApCj0yMAog ICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tID8KQEAgLTEyMiwxMCArMTUwLDE0IEBACj0yMAogICAg ICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS09Ci0tLS0tIGFwaSBrZXlzCiAgICAgZGVmIGNyZWF0ZV9hcGlfa2V5KCBz ZWxmLCB0cmFucywgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgIHJl dHVybiBhcGlfa2V5cy5BcGlLZXlNYW5hZ2VyKCB0cmFucy5hcHAgKS5jcmVhdGVfYXBpX2tleSgg dXNlciApCj0yMAogICAgICMgbmVlZGVkPwogICAgIGRlZiBhcGlfa2V5KCBzZWxmLCB0cmFucywg dXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOiBjYXRjaCBO b1Jlc3VsdEZvdW5kCiAgICAgICAgIHJldHVybiB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2Rl bC5BUElLZXlzICkuZmlsdGVyX2J5KCB1c2VyPTNEdT0Kc2VyICkub25lKCkKPTIwCkBAIC0xMzQs NiArMTY2LDggQEAKPTIwCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gcm9sZXMKICAgICBkZWYg cHJpdmF0ZV9yb2xlKCBzZWxmLCB0cmFucywgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAg IiIiCiAgICAgICAgICNUT0RPOiBub3Qgc3VyZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggc2VjIGFn ZW50Li4uIGl0J3MganVzdCB0aGUgZj0KaXJzdCByb2xlIG9mIHR5cGUgcHJpdmF0ZQogICAgICAg ICByZXR1cm4gdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmdldF9wcml2YXRlX3VzZXJfcm9sZSgg dXNlciApCj0yMApAQCAtMTQyLDYgKzE3Niw4IEBACiBjbGFzcyBVc2VyU2VyaWFsaXplciggYmFz ZS5Nb2RlbFNlcmlhbGl6ZXIgKToKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmICk6CisgICAg ICAgICIiIgorICAgICAgICAiIiIKICAgICAgICAgc3VwZXIoIFVzZXJTZXJpYWxpemVyLCBzZWxm ICkuX19pbml0X18oKQo9MjAKICAgICAgICAgc3VtbWFyeV92aWV3ID0zRCBbCgpkaWZmIC1yIDVk MGZjYTU5MTM5NGQ3ZTdhYWFiYWRmY2RlZDlmODM3ZmQ0MzZlZDIgLXIgNGJkZTcwYzY3N2E5MmRk YTcyMTJlY2M9CjRjZDllYTljNGQzZWM2OTUyIGxpYi9nYWxheHkvbW9kZWwvX19pbml0X18ucHkK LS0tIGEvbGliL2dhbGF4eS9tb2RlbC9fX2luaXRfXy5weQorKysgYi9saWIvZ2FsYXh5L21vZGVs L19faW5pdF9fLnB5CkBAIC0xNTExLDYgKzE1MTEsOCBAQAogICAgICAgICBzZWxmLnRvb2xfdmVy c2lvbiA9M0QgdG9vbF92ZXJzaW9uCiAgICAgICAgIHNlbGYuZXh0ZW5zaW9uID0zRCBleHRlbnNp b24KICAgICAgICAgc2VsZi5kZXNpZ25hdGlvbiA9M0QgZGVzaWduYXRpb24KKyAgICAgICAgIyBz ZXQgcHJpdmF0ZSB2YXJpYWJsZSB0byBOb25lIGhlcmUsIHNpbmNlIHRoZSBhdHRyaWJ1dGUgbWF5 IGJlIG5lPQplZGVkIGluIGJ5IE1ldGFkYXRhQ29sbGVjdGlvbi5fX2luaXRfXworICAgICAgICBz ZWxmLl9tZXRhZGF0YSA9M0QgTm9uZQogICAgICAgICBzZWxmLm1ldGFkYXRhID0zRCBtZXRhZGF0 YSBvciBkaWN0KCkKICAgICAgICAgc2VsZi5leHRlbmRlZF9tZXRhZGF0YSA9M0QgZXh0ZW5kZWRf bWV0YWRhdGEKICAgICAgICAgaWYgZGJrZXk6ICNkYmtleSBpcyBzdG9yZWQgaW4gbWV0YWRhdGEs IG9ubHkgc2V0IGlmIG5vbi16ZXJvLCBvciBlPQpsc2Ugd2UgY291bGQgY2xvYmJlciBvbmUgc3Vw cGxpZWQgYnkgaW5wdXQgJ21ldGFkYXRhJwoKZGlmZiAtciA1ZDBmY2E1OTEzOTRkN2U3YWFhYmFk ZmNkZWQ5ZjgzN2ZkNDM2ZWQyIC1yIDRiZGU3MGM2NzdhOTJkZGE3MjEyZWNjPQo0Y2Q5ZWE5YzRk M2VjNjk1MiBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3JpZXMucHkKLS0tIGEv bGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9yaWVzLnB5CisrKyBiL2xpYi9nYWxh eHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3Rvcmllcy5weQpAQCAtNDUsNiArNDUsMTMgQEAKICAg ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTWFsZm9ybWVkSWQoICJNYWxmb3JtZWQgSGlzdG9y eSBpZCAoICVzICkgc3BlPQpjaWZpZWQsIHVuYWJsZSB0byBkZWNvZGUiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICggc3RyKCBpZCApICksIHR5cGU9M0QnZXJy b3InICkKPTIwCisgICAgZGVmIF9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcyggc2VsZiwga3dk LCBkZWZhdWx0X3ZpZXcgKToKKyAgICAgICAgdmlldyA9M0Qga3dkLmdldCggJ3ZpZXcnLCBOb25l ICkKKyAgICAgICAga2V5cyA9M0Qga3dkLmdldCggJ2tleXMnICkKKyAgICAgICAgaWYgaXNpbnN0 YW5jZSgga2V5cywgYmFzZXN0cmluZyApOgorICAgICAgICAgICAga2V5cyA9M0Qga2V5cy5zcGxp dCggJywnICkKKyAgICAgICAgcmV0dXJuIGRpY3QoIHZpZXc9M0R2aWV3LCBrZXlzPTNEa2V5cywg ZGVmYXVsdF92aWV3PTNEZGVmYXVsdF92aWV3PQogKQorCiAgICAgQGV4cG9zZV9hcGlfYW5vbnlt b3VzCiAgICAgZGVmIGluZGV4KCBzZWxmLCB0cmFucywgZGVsZXRlZD0zRCdGYWxzZScsICoqa3dk ICk6CiAgICAgICAgICIiIgpAQCAtNjIsNiArNjksNyBAQAogICAgICAgICA6cmV0dXJuczogICBs aXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHN1bW1hcnkgaGlzdG9yeSBpbmZvcm09CmF0 aW9uCiAgICAgICAgICIiIgogICAgICAgICBydmFsID0zRCBbXQorICAgICAgICBzZXJpYWxpemF0 aW9uX3BhcmFtcyA9M0Qgc2VsZi5fcGFyc2Vfc2VyaWFsaXphdGlvbl9wYXJhbXMoIGt3ZCwgJ3M9 CnVtbWFyeScgKQo9MjAKICAgICAgICAgZGVsZXRlZF9maWx0ZXIgPTNEICggc2VsZi5hcHAubW9k ZWwuSGlzdG9yeS5kZWxldGVkID0zRD0zRCBGYWxzZSApCiAgICAgICAgIGlmIHN0cmluZ19hc19i b29sKCBkZWxldGVkICk6CkBAIC02OSw3ICs3Nyw3IEBACj0yMAogICAgICAgICBoaXN0b3JpZXMg PTNEIHNlbGYubWdycy5oaXN0b3JpZXMuYnlfdXNlciggdHJhbnMsIHVzZXI9M0R0cmFucy51c2U9 CnIsIGZpbHRlcnM9M0RkZWxldGVkX2ZpbHRlciApCiAgICAgICAgIGZvciBoaXN0b3J5IGluIGhp c3RvcmllczoKLSAgICAgICAgICAgIGhpc3RvcnlfZGljdCA9M0Qgc2VsZi5oaXN0b3J5X3Nlcmlh bGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyPQphbnMsIGhpc3RvcnksIHZpZXc9M0Qnc3VtbWFy eScgKQorICAgICAgICAgICAgaGlzdG9yeV9kaWN0ID0zRCBzZWxmLmhpc3Rvcnlfc2VyaWFsaXpl ci5zZXJpYWxpemVfdG9fdmlldyggdHI9CmFucywgaGlzdG9yeSwgKipzZXJpYWxpemF0aW9uX3Bh cmFtcyApCiAgICAgICAgICAgICBydmFsLmFwcGVuZCggaGlzdG9yeV9kaWN0ICkKPTIwCiAgICAg ICAgIHJldHVybiBydmFsCkBAIC0xMDIsMTAgKzExMCwxMyBAQAogICAgICAgICBlbHNlOgogICAg ICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3JzLmhpc3Rvcmllcy5hY2Nlc3NpYmxlX2J5X2lk KCB0cmFucywgc2VsZi49Cl9kZWNvZGVfaWQoIHRyYW5zLCBoaXN0b3J5X2lkICksIHRyYW5zLnVz ZXIgKQo9MjAKLSAgICAgICAgcmV0dXJuIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6 ZV90b192aWV3KCB0cmFucywgaGlzdG9yeSwgPQp2aWV3PTNEa3dkLmdldCggJ3ZpZXcnLCAnZGV0 YWlsZWQnICkgKQorICAgICAgICByZXR1cm4gc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFs aXplX3RvX3ZpZXcoIHRyYW5zLCBoaXN0b3J5LAorICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9z ZXJpYWxpemF0aW9uX3BhcmFtcygga3dkLCAnZGV0YWlsZWQnICkgKQo9MjAKICAgICBAZXhwb3Nl X2FwaV9hbm9ueW1vdXMKICAgICBkZWYgY2l0YXRpb25zKCBzZWxmLCB0cmFucywgaGlzdG9yeV9p ZCwgKiprd2QgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgogICAgICAgICBoaXN0b3J5ID0z RCBzZWxmLm1ncnMuaGlzdG9yaWVzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLl9kZWM9 Cm9kZV9pZCggdHJhbnMsIGhpc3RvcnlfaWQgKSwgdHJhbnMudXNlciApCiAgICAgICAgIHRvb2xf aWRzID0zRCBzZXQoW10pCiAgICAgICAgIGZvciBkYXRhc2V0IGluIGhpc3RvcnkuZGF0YXNldHM6 CkBAIC0xMTYsNyArMTI3LDggQEAKICAgICAgICAgICAgIGlmIG5vdCB0b29sX2lkOgogICAgICAg ICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0b29sX2lkcy5hZGQodG9vbF9pZCkKLSAg ICAgICAgcmV0dXJuIG1hcCggbGFtYmRhIGNpdGF0aW9uOiBjaXRhdGlvbi50b19kaWN0KCAiYmli dGV4IiApLCBzZWxmLmNpPQp0YXRpb25zX21hbmFnZXIuY2l0YXRpb25zX2Zvcl90b29sX2lkcygg dG9vbF9pZHMgKSApCisgICAgICAgIHJldHVybiBtYXAoIGxhbWJkYSBjaXRhdGlvbjogY2l0YXRp b24udG9fZGljdCggImJpYnRleCIgKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaXRhdGlv bnNfbWFuYWdlci5jaXRhdGlvbnNfZm9yX3Rvb2xfaWRzKCB0b29sX2lkPQpzICkgKQo9MjAKICAg ICBAZXhwb3NlX2FwaQogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCBwYXlsb2FkLCAqKmt3 ZCApOgpAQCAtMTYxLDcgKzE3Myw4IEBACiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBu ZXdfaGlzdG9yeSApCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQo9MjAKLSAgICAg ICAgcmV0dXJuIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFu cywgbmV3X2hpc3RvPQpyeSwgdmlldz0zRGt3ZC5nZXQoICd2aWV3JywgJ2RldGFpbGVkJyApICkK KyAgICAgICAgcmV0dXJuIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3 KCB0cmFucywgbmV3X2hpc3RvPQpyeSwKKyAgICAgICAgICAgICoqc2VsZi5fcGFyc2Vfc2VyaWFs aXphdGlvbl9wYXJhbXMoIGt3ZCwgJ2RldGFpbGVkJyApICkKPTIwCiAgICAgQGV4cG9zZV9hcGkK ICAgICBkZWYgZGVsZXRlKCBzZWxmLCB0cmFucywgaWQsICoqa3dkICk6CkBAIC0xOTEsMTIgKzIw NCwxMyBAQAogICAgICAgICBpZiBrd2QuZ2V0KCAncGF5bG9hZCcsIE5vbmUgKToKICAgICAgICAg ICAgIHB1cmdlID0zRCBzdHJpbmdfYXNfYm9vbCgga3dkWydwYXlsb2FkJ10uZ2V0KCAncHVyZ2Un LCBGYWxzZSApPQogKQo9MjAKLSAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3JzLmhpc3Rvcmll cy5vd25lcnNoaXBfYnlfaWQoIHRyYW5zLCBzZWxmLl9kZWNvPQpkZV9pZCggdHJhbnMsIGhpc3Rv cnlfaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0 b3JpZXMub3duZWRfYnlfaWQoIHRyYW5zLCBzZWxmLl9kZWNvZGVfaT0KZCggdHJhbnMsIGhpc3Rv cnlfaWQgKSwgdHJhbnMudXNlciApCiAgICAgICAgIHNlbGYubWdycy5oaXN0b3JpZXMuZGVsZXRl KCB0cmFucywgaGlzdG9yeSApCiAgICAgICAgIGlmIHB1cmdlOgogICAgICAgICAgICAgc2VsZi5t Z3JzLmhpc3Rvcmllcy5wdXJnZSggdHJhbnMsIGhpc3RvcnkgKQo9MjAKLSAgICAgICAgcmV0dXJu IHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGlzdG9y eSwgPQp2aWV3PTNEa3dkLmdldCggJ3ZpZXcnLCAnZGV0YWlsZWQnICkgKQorICAgICAgICByZXR1 cm4gc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBuZXdf aGlzdG89CnJ5LAorICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFt cygga3dkLCAnZGV0YWlsZWQnICkgKQo9MjAKICAgICBAZXhwb3NlX2FwaQogICAgIGRlZiB1bmRl bGV0ZSggc2VsZiwgdHJhbnMsIGlkLCAqKmt3ZCApOgpAQCAtMjEyLDEwICsyMjYsMTEgQEAKICAg ICAgICAgOnJldHVybnM6ICAgJ09LJyBpZiB0aGUgaGlzdG9yeSB3YXMgdW5kZWxldGVkCiAgICAg ICAgICIiIgogICAgICAgICBoaXN0b3J5X2lkID0zRCBpZAotICAgICAgICBoaXN0b3J5ID0zRCBz ZWxmLm1ncnMuaGlzdG9yaWVzLm93bmVyc2hpcF9ieV9pZCggdHJhbnMsIHNlbGYuX2RlY289CmRl X2lkKCB0cmFucywgaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9yeSA9 M0Qgc2VsZi5tZ3JzLmhpc3Rvcmllcy5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuX2RlY29kZV9p PQpkKCB0cmFucywgaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkKICAgICAgICAgc2VsZi5tZ3Jz Lmhpc3Rvcmllcy51bmRlbGV0ZSggdHJhbnMsIGhpc3RvcnkgKQo9MjAKLSAgICAgICAgcmV0dXJu IHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGlzdG9y eSwgPQp2aWV3PTNEa3dkLmdldCggJ3ZpZXcnLCAnZGV0YWlsZWQnICkgKQorICAgICAgICByZXR1 cm4gc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBoaXN0 b3J5LAorICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dk LCAnZGV0YWlsZWQnICkgKQo9MjAKICAgICBAZXhwb3NlX2FwaQogICAgIGRlZiB1cGRhdGUoIHNl bGYsIHRyYW5zLCBpZCwgcGF5bG9hZCwgKiprd2QgKToKQEAgLTIzNywxMSArMjUyLDEyIEBACiAg ICAgICAgICAgICBhbnkgdmFsdWVzIHRoYXQgd2VyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2lu YWwgYW5kLCB0aGVyZWZvcj0KZSwgdXBkYXRlZAogICAgICAgICAiIiIKICAgICAgICAgI1RPRE86 IFBVVCAvYXBpL2hpc3Rvcmllcy97ZW5jb2RlZF9oaXN0b3J5X2lkfSBwYXlsb2FkID0zRCB7IHJh dGluPQpnOiByYXRpbmcgfSAody8gbm8gc2VjdXJpdHkgY2hlY2tzKQotICAgICAgICBoaXN0b3J5 ID0zRCBzZWxmLm1ncnMuaGlzdG9yaWVzLm93bmVyc2hpcF9ieV9pZCggdHJhbnMsIHNlbGYuX2Rl Y289CmRlX2lkKCB0cmFucywgaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNE IHNlbGYubWdycy5oaXN0b3JpZXMub3duZWRfYnlfaWQoIHRyYW5zLCBzZWxmLl9kZWNvZGVfaT0K ZCggdHJhbnMsIGlkICksIHRyYW5zLnVzZXIgKQo9MjAKICAgICAgICAgI1RPRE86IGZsdXNoaW5n IGluIGRlc2VyaWFsaXplIGlzIGFuIGlmZnkgcGF0dGVybi4uLgogICAgICAgICBzZWxmLmhpc3Rv cnlfZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCB0cmFucywgaGlzdG9yeSwgcGF5bG9hZCApCi0g ICAgICAgIHJldHVybiBzZWxmLmhpc3Rvcnlfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldygg dHJhbnMsIGhpc3RvcnksID0Kdmlldz0zRGt3ZC5nZXQoICd2aWV3JywgJ2RldGFpbGVkJyApICkK KyAgICAgICAgcmV0dXJuIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3 KCB0cmFucywgaGlzdG9yeSwKKyAgICAgICAgICAgICoqc2VsZi5fcGFyc2Vfc2VyaWFsaXphdGlv bl9wYXJhbXMoIGt3ZCwgJ2RldGFpbGVkJyApICkKPTIwCiAgICAgQGV4cG9zZV9hcGkKICAgICBk ZWYgYXJjaGl2ZV9leHBvcnQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2RzICk6CgpUaGlzIGRpZmYg aXMgc28gYmlnIHRoYXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIuCgpodHRw czovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOGViNmQ4YjBi ZjEwLwpDaGFuZ2VzZXQ6ICAgOGViNmQ4YjBiZjEwClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJk CkRhdGU6ICAgICAgICAyMDE1LTAxLTA3IDE5OjU1OjM3KzAwOjAwClN1bW1hcnk6ICAgICBNb3Jl IGRvY3VtZW50YXRpb247IG1pbm9yIGZpeGVzCkFmZmVjdGVkICM6ICA4IGZpbGVzCgpkaWZmIC1y IDRiZGU3MGM2NzdhOTJkZGE3MjEyZWNjNGNkOWVhOWM0ZDNlYzY5NTIgLXIgOGViNmQ4YjBiZjEw YWQxYWQ1YjY5Zjk9CmRhODdkOGQwMDkzYjk3MmYxIGxpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5w eQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy9iYXNlLnB5CkBAIC0xMzEsMTQgKzEzMSwxNSBAQAogICAgIGZvcmVpZ25fa2V5X25hbWUg PTNEIE5vbmUKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKLSAgICAgICAgIiIi Ci0gICAgICAgICIiIgogICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCj0yMAogICAgICNOT1RFOiBh dCB0aGlzIGxheWVyLCBhbGwgaWRzIGFyZSBleHBlY3RlZCB0byBiZSBkZWNvZGVkIGFuZCBpbiBp bnQgZm89CnJtCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gZ2V0L3JlYWQvcXVlcnkKICAgICBk ZWYgcXVlcnkoIHNlbGYsIHRyYW5zLCBlYWdlcmxvYWRzPTNEVHJ1ZSwgZmlsdGVycz0zRE5vbmUs IG9yZGVyX2J5PTNEPQpOb25lLCBsaW1pdD0zRE5vbmUsIG9mZnNldD0zRE5vbmUsICoqa3dhcmdz ICk6CiAgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBiYXNpYyBxdWVyeSBmcm9tIG1vZGVs X2NsYXNzLCBmaWx0ZXJzLCBvcmRlcl9ieSwgYW5kIGxpbWk9CnQgYW5kIG9mZnNldC4KKworICAg ICAgICBTZXQgZWFnZXJsb2FkcyB0byBGYWxzZSB0byBkaXNhYmxlIHRoZW0gZm9yIHRoaXMgcXVl cnkuCiAgICAgICAgICIiIgogICAgICAgICAjcHJpbnQgJ3F1ZXJ5OicsIGVhZ2VybG9hZHMsIGZp bHRlcnMsIG9yZGVyX2J5LCBsaW1pdCwgb2Zmc2V0LCBrd2E9CnJncwogICAgICAgICBxdWVyeSA9 M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggc2VsZi5tb2RlbF9jbGFzcyApCkBAIC0xNTQsNiAr MTU1LDcgQEAKPTIwCiAgICAgZGVmIF9hcHBseV9maWx0ZXJzKCBzZWxmLCBxdWVyeSwgZmlsdGVy cyApOgogICAgICAgICAiIiIKKyAgICAgICAgQWRkIGFueSBmaWx0ZXJzIHRvIHRoZSBnaXZlbiBx dWVyeS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZToKICAgICAgICAg ICAgIHJldHVybiBxdWVyeQpAQCAtMTY3LDkgKzE2OSwxMSBAQAo9MjAKICAgICBkZWYgX211bmdl X2ZpbHRlcnMoIHNlbGYsIGZpbHRlcnNBLCBmaWx0ZXJzQiApOgogICAgICAgICAiIiIKKyAgICAg ICAgQ29tYmluZSB0d28gbGlzdHMgaW50byBhIHNpbmdsZSBsaXN0LgorCisgICAgICAgIChXaGls ZSBhbGxvd2luZyB0aGVtIHRvIGJlIE5vbmUsIG5vbi1saXN0cywgb3IgbGlzdHMuKQogICAgICAg ICAiIiIKICAgICAgICAgIyAuLi4gd2hpY2ggc291bmRzIGxpa2UgYSBldXBoYW1pc20gZm9yIHNv bWV0aGluZwotICAgICAgICBmaW5hbF9maWx0ZXJzID0zRCBbIHNlbGYubW9kZWxfY2xhc3MuaWQg PTNEPTNEIGlkIF0KICAgICAgICAgaWYgZmlsdGVyc0EgaXMgTm9uZToKICAgICAgICAgICAgIHJl dHVybiBmaWx0ZXJzQgogICAgICAgICBpZiBmaWx0ZXJzQiBpcyBOb25lOgpAQCAtMTgyLDEyICsx ODYsMTYgQEAKPTIwCiAgICAgZGVmIF9hcHBseV9vcmRlcl9ieV9saW1pdF9vZmZzZXQoIHNlbGYs IHF1ZXJ5LCBvcmRlcl9ieSwgbGltaXQsIG9mZnNldD0KICk6CiAgICAgICAgICIiIgorICAgICAg ICBSZXR1cm4gdGhlIHF1ZXJ5IGFmdGVyIGFkZGluZyB0aGUgb3JkZXJfYnksIGxpbWl0LCBhbmQg b2Zmc2V0IGNsYXU9CnNlcy4KICAgICAgICAgIiIiCiAgICAgICAgIHF1ZXJ5ID0zRCBzZWxmLl9h cHBseV9vcmRlcl9ieSggcXVlcnksIG9yZGVyX2J5ICkKICAgICAgICAgcmV0dXJuIHNlbGYuX2Fw cGx5X2xpbWl0X29mZnNldCggcXVlcnksIGxpbWl0LCBvZmZzZXQgKQo9MjAKICAgICBkZWYgX2Fw cGx5X29yZGVyX2J5KCBzZWxmLCBxdWVyeSwgb3JkZXJfYnkgKToKICAgICAgICAgIiIiCisgICAg ICAgIFJldHVybiB0aGUgcXVlcnkgYWZ0ZXIgYWRkaW5nIHRoZSBvcmRlcl9ieSBjbGF1c2VzLgor CisgICAgICAgIFVzZSB0aGUgbWFuYWdlcidzIGRlZmF1bHRfb3JkZXJfYnkgaWYgb3JkZXJfYnkg aXMgTm9uZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG9yZGVyX2J5IGlzIE5vbmU6CiAgICAg ICAgICAgICAjVE9ETzogYWxsb3cgbm9uLXR1cGxlIGRlZmF1bHRfb3JkZXJfYnkKQEAgLTE5OSw2 ICsyMDcsNyBAQAo9MjAKICAgICBkZWYgX2FwcGx5X2xpbWl0X29mZnNldCggc2VsZiwgcXVlcnks IGxpbWl0LCBvZmZzZXQgKToKICAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcXVlcnkg YWZ0ZXIgYXBwbHlpbmcgdGhlIGdpdmVuIGxpbWl0IGFuZCBvZmZzZXQgKGlmIG5vdD0KIE5vbmUp LgogICAgICAgICAiIiIKICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAg ICBxdWVyeSA9M0QgcXVlcnkubGltaXQoIGxpbWl0ICkKQEAgLTIwNywzNyArMjE2LDQ3IEBACiAg ICAgICAgIHJldHVybiBxdWVyeQo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBjb21tb24g cXVlcmllcwotI1RPRE86IG5lZWRlZD8KKyAgICAjVE9ETzogbmVlZGVkPwogICAgIGRlZiBvbmUo IHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgU2VuZHMga3dh cmdzIHRvIGJ1aWxkIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBvbmUgYW5kIG9ubHkgb25lIG1vZGVs LgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZDogaWYgbm8gbW9k ZWwgaXMgZm91bmQKKyAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkNvbmZsaWN0OiBpZiBtb3Jl IHRoYW4gb25lIG1vZGVsIGlzIGZvdW5kCiAgICAgICAgICIiIgorICAgICAgICAjIG92ZXJyaWRk ZW4gdG8gcmFpc2Ugc2VyaWFsaXphYmxlIGVycm9ycwogICAgICAgICB0cnk6CiAgICAgICAgICAg ICByZXR1cm4gc2VsZi5xdWVyeSggdHJhbnMsICoqa3dhcmdzICkub25lKCkKLSAgICAgICAgIyBy ZS1yYWlzZSBhcyBzZXJpYWxpemFibGUgZXJyb3JzCiAgICAgICAgIGV4Y2VwdCBzcWxhbGNoZW15 Lm9ybS5leGMuTm9SZXN1bHRGb3VuZCwgbm90X2ZvdW5kOgogICAgICAgICAgICAgcmFpc2UgZXhj ZXB0aW9ucy5PYmplY3ROb3RGb3VuZCggc2VsZi5tb2RlbF9jbGFzcy5fX25hbWVfXyArICc9CiBu b3QgZm91bmQnICkKKyNUT0RPOiBleGNlcHRpb25zLkluY29uc2lzdGVudERhdGFiYXNlPwogICAg ICAgICBleGNlcHQgc3FsYWxjaGVteS5vcm0uZXhjLk11bHRpcGxlUmVzdWx0c0ZvdW5kLCBtdWx0 aV9mb3VuZDoKICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmxpY3QoICdmb3VuZCBt b3JlIHRoYW4gb25lICcgKyBzZWxmLm1vZGVsPQpfY2xhc3MuX19uYW1lX18gKQo9MjAKLSAgICBk ZWYgbGlzdCggc2VsZiwgdHJhbnMsICoqa3dhcmdzICk6CisgICAgZGVmIGxpc3QoIHNlbGYsIHRy YW5zLCBxdWVyeT0zRE5vbmUsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBTZW5k cyBrd2FyZ3MgdG8gYnVpbGQgdGhlIHF1ZXJ5IHJldHVybiBhbGwgbW9kZWxzIGZvdW5kLgogICAg ICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucXVlcnkoIHRyYW5zLCAqKmt3YXJncyApLmFs bCgpCisgICAgICAgIHF1ZXJ5ID0zRCBxdWVyeSBvciBzZWxmLnF1ZXJ5KCB0cmFucywgKiprd2Fy Z3MgKQorICAgICAgICByZXR1cm4gcXVlcnkuYWxsKCkKPTIwCiAgICAgZGVmIGJ5X2lkKCBzZWxm LCB0cmFucywgaWQsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBHZXRzIGEgbW9k ZWwgYnkgcHJpbWFyeSBpZC4KICAgICAgICAgIiIiCiAgICAgICAgIGlkX2ZpbHRlciA9M0Qgc2Vs Zi5tb2RlbF9jbGFzcy5pZCA9M0Q9M0QgaWQKICAgICAgICAgcmV0dXJuIHNlbGYub25lKCB0cmFu cywgZmlsdGVycz0zRGlkX2ZpbHRlciwgKiprd2FyZ3MgKQo9MjAKICAgICBkZWYgX3F1ZXJ5X2J5 X2lkcyggc2VsZiwgdHJhbnMsIGlkcywgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzICk6CiAgICAg ICAgICIiIgorICAgICAgICBCdWlsZHMgYSBxdWVyeSB0byBmaW5kIGEgbGlzdCBvZiBtb2RlbHMg d2l0aCB0aGUgZ2l2ZW4gbGlzdCBvZiBgaWQ9CnNgLgogICAgICAgICAiIiIKICAgICAgICAgaWRz X2ZpbHRlciA9M0Qgc2VsZi5tb2RlbF9jbGFzcy5pZC5pbl8oIGlkcyApCiAgICAgICAgIHJldHVy biBzZWxmLnF1ZXJ5KCB0cmFucywgZmlsdGVycz0zRHNlbGYuX211bmdlX2ZpbHRlcnMoIGlkc19m aWx0ZT0KciwgZmlsdGVycyApLCAqKmt3YXJncyApCj0yMAogICAgIGRlZiBieV9pZHMoIHNlbGYs IHRyYW5zLCBpZHMsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGFu IGluLW9yZGVyIGxpc3Qgb2YgbW9kZWxzIHdpdGggdGhlIG1hdGNoaW5nIGlkcyBpbiBgaWRzYC4K ICAgICAgICAgIiIiCiAgICAgICAgIGZvdW5kID0zRCBzZWxmLl9xdWVyeV9ieV9pZHMoIHRyYW5z LCBpZHMsICoqa3dhcmdzICkuYWxsKCkKICAgICAgICAgI1RPRE86IHRoaXMgZG9lcyBub3Qgb3Jk ZXIgYnkgdGhlIG9yaWdpbmFsICdpZHMnIGFycmF5CkBAIC0yNzcsNyArMjk2LDkgQEAKICAgICAj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPQotLS0tLSBjcmVhdGUKICAgICBkZWYgY3JlYXRlKCBzZWxmLCB0cmFucywg Zmx1c2g9M0RUcnVlLCAqYXJncywgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIEdl bmVyaWNhbGx5IGNyZWF0ZSBhIG5ldyBtb2RlbC4KICAgICAgICAgIiIiCisgICAgICAgICMgb3Zl cnJpZGUgaW4gc3ViY2xhc3NlcwogICAgICAgICBpdGVtID0zRCBzZWxmLm1vZGVsX2NsYXNzKCAq YXJncywgKiprd2FyZ3MgKQogICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCiAg ICAgICAgIGlmIGZsdXNoOgpAQCAtMjg2LDEyICszMDcsMTYgQEAKPTIwCiAgICAgZGVmIGNvcHko IHNlbGYsIHRyYW5zLCBpdGVtLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgQ2xv bmUgb3IgY29weSBhbiBpdGVtLgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgZXhjZXB0aW9u cy5Ob3RJbXBsZW1lbnRlZCggJ0Fic3RyYWN0IG1ldGhvZCcgKQo9MjAKICAgICAjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPQotLS0tLSB1cGRhdGUKICAgICBkZWYgdXBkYXRlKCBzZWxmLCB0cmFucywgaXRlbSwgbmV3 X3ZhbHVlcywgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAg R2l2ZW4gYSBkaWN0aW9uYXJ5IG9mIG5ldyB2YWx1ZXMsIHVwZGF0ZSBgaXRlbWAgYW5kIHJldHVy biBpdC4KKworICAgICAgICAuLm5vdGU6IE5PIHZhbGlkYXRpb24gb3IgZGVzZXJpYWxpemF0aW9u IG9jY3VycyBoZXJlLgogICAgICAgICAiIiIKICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQo IGl0ZW0gKQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBuZXdfdmFsdWVzLml0ZW1zKCk6CkBA IC0zMDEsOCArMzI2LDEwIEBACiAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkK ICAgICAgICAgcmV0dXJuIGl0ZW0KPTIwCisgICAgI1RPRE86IHlhZ25pPwogICAgIGRlZiBhc3Nv Y2lhdGUoIHNlbGYsIHRyYW5zLCBhc3NvY2lhdGVfd2l0aCwgaXRlbSwgZm9yZWlnbl9rZXlfbmFt ZT0zRE49Cm9uZSApOgogICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJpY2FsbHkgYXNzb2NpYXRl IGBpdGVtYCB3aXRoIGBhc3NvY2lhdGVfd2l0aGAgYmFzZWQgb24gYGZvcmVpPQpnbl9rZXlfbmFt ZWAuCiAgICAgICAgICIiIgogICAgICAgICBmb3JlaWduX2tleV9uYW1lID0zRCBmb3JlaWduX2tl eV9uYW1lIG9yIHNlbGYuZm9yZWlnbl9rZXlfbmFtZQogICAgICAgICBzZXRhdHRyKCBhc3NvY2lh dGVfd2l0aCwgZm9yZWlnbl9rZXlfbmFtZSwgaXRlbSApCkBAIC0zMTAsNiArMzM3LDcgQEAKPTIw CiAgICAgZGVmIHF1ZXJ5X2Fzc29jaWF0ZWQoIHNlbGYsIHRyYW5zLCBhc3NvY2lhdGVkX21vZGVs X2NsYXNzLCBpdGVtLCBmb3JlaT0KZ25fa2V5X25hbWU9M0ROb25lICk6CiAgICAgICAgICIiIgor ICAgICAgICBHZW5lcmljYWxseSBxdWVyeSBvdGhlciBpdGVtcyB0aGF0IGhhdmUgYmVlbiBhc3Nv Y2lhdGVkIHdpdGggdGhpcyA9CmBpdGVtYC4KICAgICAgICAgIiIiCiAgICAgICAgIGZvcmVpZ25f a2V5X25hbWUgPTNEIGZvcmVpZ25fa2V5X25hbWUgb3Igc2VsZi5mb3JlaWduX2tleV9uYW1lCiAg ICAgICAgIGZvcmVpZ25fa2V5ID0zRCBnZXRhdHRyKCBhc3NvY2lhdGVkX21vZGVsX2NsYXNzLCBm b3JlaWduX2tleV9uYW1lICkKCmRpZmYgLXIgNGJkZTcwYzY3N2E5MmRkYTcyMTJlY2M0Y2Q5ZWE5 YzRkM2VjNjk1MiAtciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOT0KZGE4N2Q4ZDAwOTNiOTcyZjEg bGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJz L2RhdGFzZXRzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKQEAgLTMy LDYgKzMyLDcgQEAKICAgICAgICAgIyBkZWZhdWx0IHRvIE5FVyBzdGF0ZSBvbiBuZXcgZGF0YXNl dHMKICAgICAgICAga3dhcmdzLnVwZGF0ZSggZGljdCggc3RhdGU9M0QoIGt3YXJncy5nZXQoICdz dGF0ZScsIG1vZGVsLkRhdGFzZXQuPQpzdGF0ZXMuTkVXICkgKSApICkKICAgICAgICAgZGF0YXNl dCA9M0QgbW9kZWwuRGF0YXNldCggKiprd2FyZ3MgKQorCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Np b24uYWRkKCBkYXRhc2V0ICkKICAgICAgICAgaWYgZmx1c2g6CiAgICAgICAgICAgICB0cmFucy5z YV9zZXNzaW9uLmZsdXNoKCkKQEAgLTU0LDYgKzU1LDEyIEBACiAgICAgICAgIHBhc3MKPTIwCiAg ICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gZGVsZXRlCisgICAgZGVmIGVycm9yX3VubGVzc19kYXRh c2V0X3B1cmdlX2FsbG93ZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBtc2c9M0ROb25lID0KKToKKyAg ICAgICAgaWYgbm90IHRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlOgor ICAgICAgICAgICAgbXNnID0zRCBtc2cgb3IgJ1RoaXMgaW5zdGFuY2UgZG9lcyBub3QgYWxsb3cg dXNlciBkYXRhc2V0IHB1cmc9CmluZycKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29u ZmlnRG9lc05vdEFsbG93RXhjZXB0aW9uKCBtc2cgKQorICAgICAgICByZXR1cm4gaXRlbQorCiAg ICAgZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgZGF0YXNldCwgZmx1c2g9M0RUcnVlICk6CiAgICAg ICAgICIiIgogICAgICAgICAiIiIKQEAgLTc4LDQyICs4NSw5MSBAQAogICAgICAgICAgICAgcmV0 dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCj0yMAorICAgIGRlZiBfYWNjZXNzX3Blcm1p c3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyPTNETm9uZSwgcm9sZT0zRE5vbmU9CiAp OgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHNlY3VyaXR5X2FnZW50ID0zRCB0 cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQKKyAgICAgICAgYWNjZXNzX2FjdGlvbiA9M0Qgc2VjdXJp dHlfYWdlbnQucGVybWl0dGVkX2FjdGlvbnMuREFUQVNFVF9BQ0NFU1MuPQphY3Rpb24KKworICAg ICAgICAjIGdldCBhIGxpc3Qgb2Ygcm9sZSBpZHMgdG8gY2hlY2sgYWNjZXNzIGZvciAoZGVmYXVs dGluZyB0byBhbGxfcm89CmxlcykKKyAgICAgICAgdXNlcl9yb2xlcyA9M0QgWyByb2xlIF0gaWYg cm9sZSBlbHNlIHVzZXIuYWxsX3JvbGVzKCkKKyAgICAgICAgdXNlcl9yb2xlX2lkcyA9M0QgWyBy b2xlLmlkIGZvciByb2xlIGluIHVzZXJfcm9sZXMgXQorICAgICAgICBxdWVyeSA9M0QgKCB0cmFu cy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnMgKQorICAgICAgICAg ICAgICAgICAgICAuZmlsdGVyKCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnMuYWN0aW9uID0zRD0z RCBhY2Nlc3M9Cl9hY3Rpb24gKQorICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCBtb2RlbC5E YXRhc2V0UGVybWlzc2lvbnMuZGF0YXNldCA9M0Q9M0QgZGF0YXM9CmV0ICkKKyAgICAgICAgICAg ICAgICAgICAgLmZpbHRlciggbW9kZWwuRGF0YXNldFBlcm1pc3Npb25zLnJvbGVfaWQuaW5fKCB1 c2VyX3JvPQpsZV9pZHMgKSApICkKKyAgICAgICAgcGVybXMgPTNEIHF1ZXJ5LmFsbCgpCisgICAg ICAgIGlmIGxlbiggcGVybXMgKToKKyAgICAgICAgICAgIHJldHVybiBwZXJtc1swXQorICAgICAg ICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9jcmVhdGVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYs IHRyYW5zLCBkYXRhc2V0LCByb2xlLCBmbHVzaD0zRFRydT0KZSApOgorICAgICAgICAiIiIKKyAg ICAgICAgIiIiCisgICAgICAgIGFjY2Vzc19hY3Rpb24gPTNEIHRyYW5zLmFwcC5zZWN1cml0eV9h Z2VudC5wZXJtaXR0ZWRfYWN0aW9ucy5EQVRBUz0KRVRfQUNDRVNTLmFjdGlvbgorICAgICAgICBw ZXJtaXNzaW9uID0zRCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnMoIGFjY2Vzc19hY3Rpb24sIGRh dGFzZXQsIHI9Cm9sZSApCisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBwZXJtaXNzaW9u ICkKKyAgICAgICAgaWYgZmx1c2g6CisgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNo KCkKKyAgICAgICAgcmV0dXJuIHBlcm1pc3Npb24KKwogICAgIGRlZiBoYXNfYWNjZXNzX3Blcm1p c3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CiAgICAgICAgICIiIgogICAgICAg ICAiIiIKLSAgICAgICAgcm9sZXMgPTNEIHVzZXIucm9sZXMgaWYgdXNlciBlbHNlIFtdCisgICAg ICAgPTIwCisgICAgICAgIHJvbGVzID0zRCB1c2VyLmFsbF9yb2xlcygpIGlmIHVzZXIgZWxzZSBb XQogICAgICAgICByZXR1cm4gdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0 YXNldCggcm9sZXMsIGRhdGFzZXQ9CiApCj0yMAotICAgIGRlZiBnaXZlX2FjY2Vzc19wZXJtaXNz aW9uKCBzZWxmLCB0cmFucywgZGF0YXNldCwgdXNlciApOgotICAgICAgICAiIiIKLSAgICAgICAg IiIiCi0gICAgICAgICNwZXJtaXNzaW9uID0zRCB7fQotICAgICAgICAjI1RPRE86Pz8gaXMgdGhp cyBjb3JyZWN0IGFuZCByZWxpYWJsZT8KLSAgICAgICAgI3VzZXJfcHJpdmF0ZV9yb2xlID0zRCBz ZWxmLnVzZXJfbWdyLnByaXZhdGVfcm9sZSggdHJhbnMsIHVzZXIgKQotICAgICAgICAjcGVybWlz c2lvblsgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LnBlcm1pdHRlZF9hY3Rpb25zLkRBVEFTRVRf QUM9CkNFU1MgXSA9M0QgWyB1c2VyX3ByaXZhdGVfcm9sZSBdCi0gICAgICAgICN0cmFucy5hcHAu c2VjdXJpdHlfYWdlbnQuc2V0X2RhdGFzZXRfcGVybWlzc2lvbiggZGF0YXNldCwgcGVybWlzcz0K aW9uICkKLSAgICAgICAgcGFzcworICAgICNUT0RPOiB0aGlzIG5lZWRzIHdvcmsKKyAgICAjZGVm IGdpdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyLCBmbHVz aD0zRFRydWUgPQopOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAgICMgZm9y IG5vdywgdXNlIHRoZSB1c2VyJ3MgcHJpdmF0ZSByb2xlCisgICAgIyAgICBzZWN1cml0eV9hZ2Vu dCA9M0QgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50CisgICAgIyAgICB1c2VyX3JvbGUgPTNEIHNl Y3VyaXR5X2FnZW50LmdldF9wcml2YXRlX3VzZXJfcm9sZSggdXNlciApCisgICAgIworICAgICMg ICAgZXhpc3RpbmdfcGVybWlzc2lvbiA9M0Qgc2VsZi5fYWNjZXNzX3Blcm1pc3Npb24oIHRyYW5z LCBkYXRhc2V0LCA9CnJvbGU9M0R1c2VyX3JvbGUgKQorICAgICMgICAgcHJpbnQgJ2V4aXN0aW5n IGFjY2Vzc19wZXJtOicsIGV4aXN0aW5nX3Blcm1pc3Npb24KKyAgICAjICAgIGlmIGV4aXN0aW5n X3Blcm1pc3Npb246CisgICAgIyAgICAgICAgcmV0dXJuIGRhdGFzZXQKKyAgICAjCisgICAgIyAg ICBwZXJtaXNzaW9uID0zRCBzZWxmLl9jcmVhdGVfYWNjZXNzX3Blcm1pc3Npb24oIHRyYW5zLCBk YXRhc2V0LCB1cz0KZXJfcm9sZSApCisgICAgIyAgICBwcmludCAnYWNjZXNzX3JvbGVzOicsIFsg cm9sZS5uYW1lIGZvciByb2xlIGluIGRhdGFzZXQuZ2V0X2FjY2Vzcz0KX3JvbGVzKCB0cmFucyAp IF0KKyAgICAjCisgICAgIyAgICAjYWNjZXNzX2FjdGlvbiA9M0Qgc2VjdXJpdHlfYWdlbnQucGVy bWl0dGVkX2FjdGlvbnMuREFUQVNFVF9BQ0NFUz0KUy5hY3Rpb24KKyAgICAjICAgICNhY2Nlc3Nf YWN0aW9uID0zRCBzZWN1cml0eV9hZ2VudC5nZXRfYWN0aW9uKCBhY2Nlc3NfYWN0aW9uICkKKyAg ICAjICAgICNwZXJtaXNzaW9ucyA9M0QgeyBhY2Nlc3NfYWN0aW9uIDogWyB1c2VyX3JvbGUgXSB9 CisgICAgIyAgICAjc2VjdXJpdHlfYWdlbnQuc2V0X2RhdGFzZXRfcGVybWlzc2lvbiggZGF0YXNl dCwgcGVybWlzc2lvbnMgKQorICAgICMKKyAgICAjICAgICN0cmFucy5zYV9zZXNzaW9uLmFkZCgg ZGF0YXNldCApCisgICAgIyAgICAjaWYgZmx1c2g6CisgICAgIyAgICAjICAgIHRyYW5zLnNhX3Nl c3Npb24uZmx1c2goKQorICAgICMKKyAgICAjICAgIGRibF9jaGsgPTNEIHNlbGYuX2FjY2Vzc19w ZXJtaXNzaW9uKCB0cmFucywgZGF0YXNldCwgcm9sZT0zRHVzZXJfPQpyb2xlICkKKyAgICAjICAg IHByaW50ICdhY2Nlc3NfcGVybTonLCBkYmxfY2hrCisgICAgIworICAgICMgICAgcmV0dXJuIGRh dGFzZXQKPTIwCi0gICAgZGVmIHJlbW92ZV9hY2Nlc3NfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMs IGRhdGFzZXQsIHVzZXIgKToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBwYXNz CisgICAgI2RlZiByZW1vdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0 LCB1c2VyICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgICIiIgorICAgICMgICAgcGFzcwo9MjAK ICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBtYW5hZ2UvbW9kaWZ5Ci0gICAgZGVmIGhhc19tYW5h Z2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKLSAgICAgICAgIiIi Ci0gICAgICAgICIiIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZ2l2ZV9tYW5hZ2VfcGVybWlz c2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKLSAgICAgICAgIiIiCi0gICAgICAg ICIiIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVtb3ZlX21hbmFnZV9wZXJtaXNzaW9uKCBz ZWxmLCB0cmFucywgZGF0YXNldCwgdXNlciApOgotICAgICAgICAiIiIKLSAgICAgICAgIiIiCi0g ICAgICAgIHBhc3MKKyAgICAjZGVmIGhhc19tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMs IGRhdGFzZXQsIHVzZXIgKToKKyAgICAjICAgICIiIgorICAgICMgICAgIiIiCisgICAgIyAgICBw YXNzCisgICAgIworICAgICNkZWYgZ2l2ZV9tYW5hZ2VfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMs IGRhdGFzZXQsIHVzZXIgKToKKyAgICAjICAgICIiIgorICAgICMgICAgIiIiCisgICAgIyAgICBw YXNzCisgICAgIworICAgICNkZWYgcmVtb3ZlX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0cmFu cywgZGF0YXNldCwgdXNlciApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAg IHBhc3MKPTIwCiAgICAgI1RPRE86IGltcGxlbWVudCBhYm92ZSBmb3IgZ3JvdXBzCiAgICAgI1RP RE86IGRhdGF0eXBlcz8KQEAgLTE4Myw5ICsyMzksMTEgQEAKICAgICBkZWYgbWV0YWRhdGEoIHNl bGYsIHRyYW5zLCBkYXRhc2V0X2Fzc29jICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKKyAg ICAgICAgIyBnZXQgbWV0YWRhdGEKICAgICAgICAgcGFzcwo9MjAKICAgICBkZWYgaXNfYmVpbmdf dXNlZCggc2VsZiwgdHJhbnMsIGRhdGFzZXRfYXNzb2MgKToKICAgICAgICAgIiIiCiAgICAgICAg ICIiIgorICAgICAgICAjVE9ETzogY2hlY2sgaGlzdG9yeV9hc3NvY2lhdGlvbnMsIGxpYnJhcnlf YXNzb2NpYXRpb25zCiAgICAgICAgIHBhc3MKCmRpZmYgLXIgNGJkZTcwYzY3N2E5MmRkYTcyMTJl Y2M0Y2Q5ZWE5YzRkM2VjNjk1MiAtciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOT0KZGE4N2Q4ZDAw OTNiOTcyZjEgbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFu YWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKQEAgLTM3LDEx ICszNywxMSBAQAogICAgIGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgaGRhLCB1c2Vy ICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5pc19vd25lZCgg dHJhbnMsIGhkYSwgdXNlciApOgorICAgICAgICBpZiBzZWxmLmlzX293bmVyKCB0cmFucywgaGRh LCB1c2VyICk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIo IEhEQU1hbmFnZXIsIHNlbGYgKS5pc19hY2Nlc3NpYmxlKCB0cmFucywgaGRhLCB1c2VyICkKPTIw Ci0gICAgZGVmIGlzX293bmVkKCBzZWxmLCB0cmFucywgaGRhLCB1c2VyICk6CisgICAgZGVmIGlz X293bmVyKCBzZWxmLCB0cmFucywgaGRhLCB1c2VyICk6CiAgICAgICAgICIiIgogICAgICAgICBV c2UgaGlzdG9yeSB0byBzZWUgaWYgY3VycmVudCB1c2VyIG93bnMgSERBLgogICAgICAgICAiIiIK QEAgLTExNiw3ICsxMTYsOSBAQAogICAgIGRlZiBwdXJnZSggc2VsZiwgdHJhbnMsIGhkYSApOgog ICAgICAgICAiIiIKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXJyb3JfdW5sZXNzX2RhdGFz ZXRfcHVyZ2VfYWxsb3dlZCggdHJhbnMsIGhkYSApCisgICAgICAgICMgZXJyb3IgaGVyZSBpZiBk aXNhbGxvd2VkIC0gYmVmb3JlIGpvYnMgYXJlIHN0b3BwZWQKKyAgICAgICAgI1RPRE86IHBvc3Mu IG1vdmUgdG8gRGF0YXNldEFzc29jaWF0aW9uTWFuYWdlcgorICAgICAgICBzZWxmLmRhdGFzZXRf bWdyLmVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2FsbG93ZWQoIHRyYW5zLCBoZGEgKQogICAg ICAgICBzdXBlciggSERBTWFuYWdlciwgc2VsZiApLnB1cmdlKCB0cmFucywgaGRhLCBmbHVzaD0z RFRydWUgKQo9MjAKICAgICAgICAgIyBzaWduYWwgdG8gc3RvcCB0aGUgY3JlYXRpbmcgam9iPwoK ZGlmZiAtciA0YmRlNzBjNjc3YTkyZGRhNzIxMmVjYzRjZDllYTljNGQzZWM2OTUyIC1yIDhlYjZk OGIwYmYxMGFkMWFkNWI2OWY5PQpkYTg3ZDhkMDA5M2I5NzJmMSBsaWIvZ2FsYXh5L21hbmFnZXJz L2hpc3Rvcmllcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQorKysg Yi9saWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQpAQCAtMjI1LDcgKzIyNSw3IEBACj0y MAo9MjAKICMjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9Cj0zRD0zRD0zRD0zRAotY2xhc3MgSGlzdG9yeVNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxT ZXJpYWxpemVyICk6CitjbGFzcyBIaXN0b3J5U2VyaWFsaXplciggc2hhcmFibGUuU2hhcmFibGVN b2RlbFNlcmlhbGl6ZXIgKToKICAgICAiIiIKICAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmplY3Qg Zm9yIHNlcmlhbGl6aW5nIGhpc3RvcmllcyBpbnRvIGRpY3Rpb25hcmllcy4KICAgICAiIiIKQEAg LTMyMSw3ICszMjEsNyBAQAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xhc3MgSGlzdG9yeURlc2Vy aWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciApOgorY2xhc3MgSGlzdG9yeURlc2VyaWFs aXplciggc2hhcmFibGUuU2hhcmFibGVNb2RlbERlc2VyaWFsaXplciApOgogICAgICIiIgogICAg IEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3IgdmFsaWRhdGluZyBhbmQgZGVzZXJpYWxpemlu ZyBkaWN0aW9uYXJpZXM9CiBpbnRvIGhpc3Rvcmllcy4KICAgICAiIiIKCmRpZmYgLXIgNGJkZTcw YzY3N2E5MmRkYTcyMTJlY2M0Y2Q5ZWE5YzRkM2VjNjk1MiAtciA4ZWI2ZDhiMGJmMTBhZDFhZDVi NjlmOT0KZGE4N2Q4ZDAwOTNiOTcyZjEgbGliL2dhbGF4eS9tYW5hZ2Vycy9zaGFyYWJsZS5weQot LS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5CisrKyBiL2xpYi9nYWxheHkvbWFu YWdlcnMvc2hhcmFibGUucHkKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICBjYW4gYmUgcHVi bGlzaGVkIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYWxsIG90aGVyIFVzZXJz CiAgICAgICAgIGNhbiBiZSByYXRlZAogICAgICIiIgotICAgICMgaGlzdG9yaWVzLCBwYWdlcywg c3RvcmVkIHdvcmtmbG93cywgdmlzdWFsaXphdGlvbnMKKyAgICAjIGUuZy4gaGlzdG9yaWVzLCBw YWdlcywgc3RvcmVkIHdvcmtmbG93cywgdmlzdWFsaXphdGlvbnMKKworICAgICMgdGhlIG1vZGVs IHVzZWQgZm9yIFVzZXJTaGFyZUFzc29jaWF0aW9ucyB3aXRoIHRoaXMgbW9kZWwKICAgICB1c2Vy X3NoYXJlX21vZGVsID0zRCBOb25lCj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6 Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKICAgICAgICAgc3VwZXIoIFNoYXJhYmxlTW9kZWxN YW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAgICAgICAgICMgdXNlciBtYW5hZ2VyIGlz IG5lZWRlZCB0byBjaGVjayBhY2Nlc3Mvb3duZXJzaGlwL2FkbWluCiAgICAgICAgIHNlbGYudXNl cl9tZ3IgPTNEIHVzZXJzLlVzZXJNYW5hZ2VyKCBhcHAgKQpAQCAtNDAsMjIgKzQwLDIxIEBACiAg ICAgICAgIGZpbHRlcnM9M0RzZWxmLl9tdW5nZV9maWx0ZXJzKCB1c2VyX2ZpbHRlciwgZmlsdGVy cyApCiAgICAgICAgIHJldHVybiBzZWxmLnF1ZXJ5KCB0cmFucywgZmlsdGVycz0zRGZpbHRlcnMs ICoqa3dhcmdzICkKPTIwCi0gICAgZGVmIGJ5X3VzZXIoIHNlbGYsIHRyYW5zLCB1c2VyLCBmaWx0 ZXJzPTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICBkZWYgYnlfdXNlciggc2VsZiwgdHJhbnMsIHVz ZXIsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKLSAgICAgICAgdXNlcl9m aWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MudXNlcl9pZCA9M0Q9M0QgdXNlci5pZAotICAgICAg ICBmaWx0ZXJzPTNEc2VsZi5fbXVuZ2VfZmlsdGVycyggdXNlcl9maWx0ZXIsIGZpbHRlcnMgKQot ICAgICAgICAjbm90ZTogbm8gb3duZXJzaGlwIGNoZWNrIG5lZWRlZAotICAgICAgICByZXR1cm4g c2VsZi5saXN0KCB0cmFucywgZmlsdGVycz0zRGZpbHRlcnMsICoqa3dhcmdzICkKKyAgICAgICAg cXVlcnkgPTNEIHNlbGYuX3F1ZXJ5X2J5X3VzZXIoIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApCisg ICAgICAgIHJldHVybiBzZWxmLmxpc3QoIHRyYW5zLCBxdWVyeT0zRHF1ZXJ5LCAqKmt3YXJncyAp Cj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIG93bmVkIG1vZGVsIGludGVyZmFjZQotIyB0 aGlzIHJlYWxseSBpcyBtb3JlIG9mIGEgJ2NoZWNrXyplZGl0YWJsZS93cml0ZSonIC0gaW4gZXNz ZW5jZSB0aGF0J3Mgd2g9CmF0IGNoZWNrX293bmVyc2hpcCBib2lscyBkb3duIHRvIG9mdGVuCiAg ICAgZGVmIGlzX293bmVyKCBzZWxmLCB0cmFucywgaXRlbSwgdXNlciApOgogICAgICAgICAiIiIK KyAgICAgICAgUmV0dXJuIHRydWUgaWYgdGhpcyBzaGFyYWJsZSBiZWxvbmdzIHRvIGB1c2VyYCAo b3IgYHVzZXJgIGlzIGFuIGFkPQptaW4pLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi51 c2VyX21nci5pc19hbm9ueW1vdXMoIHVzZXIgKToKICAgICAgICAgICAgICMgbm90ZTogdGhpcyBu ZWVkcyB0byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIG9mIGFub24gdXNlcnMgPQphbmQgc2Vz c2lvbi5jdXJyZW50X2hpc3RvcnkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAj IC4uLiBlZmZlY3RpdmVseSBhIGdvb2QgZml0IHRvIGhhdmUgdGhpcyBoZXJlLCBidXQgbm90IHNl bWFudGljYWw9Cmx5CiAgICAgICAgIGlmIHNlbGYudXNlcl9tZ3IuaXNfYWRtaW4oIHRyYW5zLCB1 c2VyICk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gaXRlbS51c2Vy ID0zRD0zRCB1c2VyCkBAIC02Myw2ICs2Miw4IEBACiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4g YWNjZXNzaWJsZSBpbnRlcmZhY2UKICAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMs IGl0ZW0sIHVzZXIgKToKICAgICAgICAgIiIiCisgICAgICAgIElmIHRoZSBpdGVtIGlzIGltcG9y dGFibGUsIGlzIG93bmVkIGJ5IGB1c2VyYCwgb3IgKHRoZSB2YWxpZCkgYHVzZT0KcmAKKyAgICAg ICAgaXMgaW4gJ3VzZXJzIHNoYXJlZCB3aXRoJyBsaXN0IGZvciB0aGUgaXRlbTogcmV0dXJuIFRy dWUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBpdGVtLmltcG9ydGFibGU6CiAgICAgICAgICAg ICByZXR1cm4gVHJ1ZQpAQCAtNzYsNiArNzcsOCBAQAogICAgICAgICByZXR1cm4gRmFsc2UKPTIw CiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gaW1wb3J0YWJsZQorI1RPRE86IHRoZSByZWxhdGlv bnNoaXAgYmV0d2VlbiBpbXBvcnRhYmxlIGFuZCBwdWJsaXNoZWQgaXMgaWxsIGRlZmluZWQKKyM/ PzogY2FuIGEgcHVibGlzaGVkIGl0ZW0gYmUgbm9uLWltcG9ydGFibGU/CiAgICAgZGVmIG1ha2Vf aW1wb3J0YWJsZSggc2VsZiwgdHJhbnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSApOgogICAgICAgICAi IiIKICAgICAgICAgTWFrZXMgaXRlbSBhY2Nlc3NpYmxlLS12aWV3YWJsZSBhbmQgaW1wb3J0YWJs ZS0tYW5kIHNldHMgaXRlbSdzIHNsPQp1Zy4KQEAgLTk1LDcgKzk4LDYgQEAKICAgICAgICAgRG9l cyBub3QgZmx1c2gvY29tbWl0IGNoYW5nZXMsIGhvd2V2ZXIuIEl0ZW0gbXVzdCBoYXZlIG5hbWUs IHVzZXIsCiAgICAgICAgIGltcG9ydGFibGUsIGFuZCBzbHVnIGF0dHJpYnV0ZXMuCiAgICAgICAg ICIiIgotICAgICAgICAjPz86IGNhbiBhIHB1Ymxpc2hlZCBpdGVtIGJlIG5vbi1pbXBvcnRhYmxl PwogICAgICAgICAjaWYgaXRlbS5wdWJsaXNoZWQ6CiAgICAgICAgICMgICAgaWYgdW5wdWJsaXNo OgogICAgICAgICAjICAgICAgICBzZWxmLnVucHVibGlzaCggdHJhbnMsIGl0ZW0sIGZsdXNoPTNE RmFsc2UgKQpAQCAtMTA3LDEzICsxMDksMjEgQEAKICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Np b24uZmx1c2goKQogICAgICAgICByZXR1cm4gaXRlbQo9MjAKLSAgICBkZWYgbGlzdF9pbXBvcnRh YmxlKCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKToKLSNUT0RPOgotICAgICAgICAiIiIKLSAgICAg ICAgIiIiCi0gICAgICAgIHBhc3MKKyAgICAjZGVmIF9xdWVyeV9pbXBvcnRhYmxlKCBzZWxmLCB0 cmFucywgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzICk6CisgICAgIyAgICAiIiIKKyAgICAjICAg ICIiIgorICAgICMgICAgaW1wb3J0YWJsZV9maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MuaW1w b3J0YWJsZSA9M0Q9M0QgVHJ1ZQorICAgICMgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVuZ2VfZmls dGVycyggaW1wb3J0YWJsZV9maWx0ZXIsIGZpbHRlcnMgKQorICAgICMgICAgcmV0dXJuIHNlbGYu bGlzdCggdHJhbnMsIGZpbHRlcnM9M0RmaWx0ZXJzLCAqKmt3YXJncyApCisgICAgIworICAgICNk ZWYgbGlzdF9pbXBvcnRhYmxlKCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKToKKyAgICAjICAgICIi IgorICAgICMgICAgIiIiCisgICAgIyAgICBxdWVyeSA9M0Qgc2VsZi5fcXVlcnlfaW1wb3J0YWJs ZSggdHJhbnMsIHVzZXIsICoqa3dhcmdzICkKKyAgICAjICAgIHJldHVybiBzZWxmLmxpc3QoIHRy YW5zLCBxdWVyeT0zRHF1ZXJ5LCAqKmt3YXJncyApCj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4u Li4uIHB1Ymxpc2hlZAorI1RPRE86IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbXBvcnRhYmxl IGFuZCBwdWJsaXNoZWQgaXMgaWxsIGRlZmluZWQKICAgICAjZGVmIHB1Ymxpc2goIHNlbGYsIHRy YW5zLCBpdGVtLCBtYWtlX2FjY2Vzc2libGU9M0RUcnVlLCBmbHVzaD0zRFRydWUgPQopOgogICAg ICMgICAgaWYgbm90IGl0ZW0uaW1wb3J0YWJsZToKICAgICAjICAgICAgICBpZiBtYWtlX2FjY2Vz c2libGU6CkBAIC0xMjQsNiArMTM0LDcgQEAKICAgICAjIGEgcHVibGlzaGVkIGl0ZW0gaXMgYWxz by9hbHJlYWR5IGltcG9ydGFibGUoPTNEVHJ1ZSkgaW1wbGljaXRseQogICAgIGRlZiBwdWJsaXNo KCBzZWxmLCB0cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlICk6CiAgICAgICAgICIiIgorICAgICAg ICBTZXQgYm90aCB0aGUgaW1wb3J0YWJsZSBhbmQgcHVibGlzaGVkIGZsYWdzIG9uIGBpdGVtYCB0 byBUcnVlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IGl0ZW0uaW1wb3J0YWJsZToKICAg ICAgICAgICAgIHNlbGYubWFrZV9pbXBvcnRhYmxlKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxz ZSApCkBAIC0xMzUsNiArMTQ2LDcgQEAKPTIwCiAgICAgZGVmIHVucHVibGlzaCggc2VsZiwgdHJh bnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSApOgogICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBw dWJsaXNoZWQgZmxhZyBvbiBgaXRlbWAgdG8gRmFsc2UuCiAgICAgICAgICIiIgogICAgICAgICB0 cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCiAgICAgICAgIGl0ZW0ucHVibGlzaGVkID0zRCBG YWxzZQpAQCAtMTQyLDExICsxNTQsMTggQEAKICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24u Zmx1c2goKQogICAgICAgICByZXR1cm4gaXRlbQo9MjAKLSAgICBkZWYgbGlzdF9wdWJsaXNoZWQo IHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgotI1RPRE86Ci0gICAgICAgICIiIgotICAgICAgICAi IiIKLSAgICAgICAgcGFzcworICAgICNkZWYgX3F1ZXJ5X3B1Ymxpc2hlZCggc2VsZiwgdHJhbnMs IGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIK KyAgICAjICAgIHB1Ymxpc2hlZF9maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MucHVibGlzaGVk ID0zRD0zRCBUcnVlCisgICAgIyAgICBmaWx0ZXJzID0zRCBzZWxmLl9tdW5nZV9maWx0ZXJzKCBw dWJsaXNoZWRfZmlsdGVyLCBmaWx0ZXJzICkKKyAgICAjICAgIHJldHVybiBzZWxmLmxpc3QoIHRy YW5zLCBmaWx0ZXJzPTNEZmlsdGVycywgKiprd2FyZ3MgKQorICAgICMKKyAgICAjZGVmIGxpc3Rf cHVibGlzaGVkKCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKToKKyAgICAjICAgICIiIgorICAgICMg ICAgIiIiCisgICAgIyAgICBxdWVyeSA9M0Qgc2VsZi5fcXVlcnlfcHVibGlzaGVkKCB0cmFucywg dXNlciwgKiprd2FyZ3MgKQorICAgICMgICAgcmV0dXJuIHNlbGYubGlzdCggdHJhbnMsIHF1ZXJ5 PTNEcXVlcnksICoqa3dhcmdzICkKPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gdXNlciBz aGFyaW5nCiAgICAgIyBzaGFyaW5nIGlzIG9mdGVuIGRvbmUgdmlhIGEgM3JkIHRhYmxlIGJ0d24g YSBVc2VyIGFuZCBhbiBpdGVtIC0+IGEgPD0KSXRlbT5Vc2VyU2hhcmVBc3NvY2lhdGlvbgpAQCAt MTg2LDIzICsyMDUsMzEgQEAKICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQog ICAgICAgICByZXR1cm4gaXRlbQo9MjAKLSAgICBkZWYgbGlzdF9zaGFyZWRfd2l0aCggc2VsZiwg dHJhbnMsIGl0ZW0sIHVzZXIsICoqa3dhcmdzICk6Ci0jVE9ETzoKLSAgICAgICAgIiIiCi0gICAg ICAgICIiIgotICAgICAgICBwYXNzCisgICAgI2RlZiBfcXVlcnlfc2hhcmVkX3dpdGgoIHNlbGYs IHRyYW5zLCB1c2VyLCBmaWx0ZXJzPTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICAjI1RPRE86Cisg ICAgIyAgICAiIiIKKyAgICAjICAgICIiIgorICAgICMgICAgcGFzcworCisgICAgI2RlZiBsaXN0 X3B1Ymxpc2hlZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgIyAgICAiIiIK KyAgICAjICAgICIiIgorICAgICMgICAgcXVlcnkgPTNEIHNlbGYuX3F1ZXJ5X3NoYXJlZF93aXRo KCB0cmFucywgdXNlciwgKiprd2FyZ3MgKQorICAgICMgICAgcmV0dXJuIHNlbGYubGlzdCggdHJh bnMsIHF1ZXJ5PTNEcXVlcnksICoqa3dhcmdzICkKPTIwCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4u Li4gc2x1Z3MKICAgICAjIHNsdWdzIGFyZSBodW1hbiByZWFkYWJsZSBzdHJpbmdzIG9mdGVuIHVz ZWQgdG8gbGluayB0byBzaGFyYWJsZSByZXNvPQp1cmNlcyAocmVwbGFjaW5nIGlkcykKKyAgICAj VE9ETzogYXMgdmFsaWRhdG9yLCBkZXNlcmlhbGl6ZXIsIGV0Yy4gKG1heWJlIGFub3RoZXIgb2Jq ZWN0IGVudGlyZWx5PQo/KQogICAgIGRlZiBpc192YWxpZF9zbHVnKCBzZWxmLCBzbHVnICk6CiAg ICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIHRydWUgaWYgc2x1ZyBpcyB2YWxpZC4KKyAgICAg ICAgUmV0dXJucyB0cnVlIGlmIGBzbHVnYCBpcyB2YWxpZC4KICAgICAgICAgIiIiCiAgICAgICAg IFZBTElEX1NMVUdfUkUgPTNEIHJlLmNvbXBpbGUoICJeW2EtejAtOVwtXSskIiApCiAgICAgICAg IHJldHVybiBWQUxJRF9TTFVHX1JFLm1hdGNoKCBzbHVnICkKPTIwCiAgICAgZGVmIHNldF9zbHVn KCBzZWxmLCB0cmFucywgaXRlbSwgbmV3X3NsdWcsIGZsdXNoPTNEVHJ1ZSApOgogICAgICAgICAi IiIKKyAgICAgICAgVmFsaWRhdGUgYW5kIHNldCB0aGUgbmV3IHNsdWcgZm9yIGBpdGVtYC4KICAg ICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX3ZhbGlkX3NsdWcoIG5ld19zbHVnICk6 CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhj ZXB0aW9uKCAiSW52YWxpZCBzbD0KdWciLCBzbHVnPTNEbmV3X3NsdWcgKQpAQCAtMjI4LDYgKzI1 NSw3IEBACiAgICAgICAgICMgU2V0dXAgc2x1ZyBiYXNlLgogICAgICAgICBpZiBjdXJfc2x1ZyBp cyBOb25lIG9yIGN1cl9zbHVnID0zRD0zRCAiIjoKICAgICAgICAgICAgICMgSXRlbSBjYW4gaGF2 ZSBlaXRoZXIgYSBuYW1lIG9yIGEgdGl0bGUuCisjVE9ETzogdGhpcyBkZXBlbmRzIG9uIHRoZSBt b2RlbCBoYXZpbmcgbmFtZSBvciB0aXRsZQogICAgICAgICAgICAgaWYgaGFzYXR0ciggaXRlbSwg J25hbWUnICk6CiAgICAgICAgICAgICAgICAgaXRlbV9uYW1lID0zRCBpdGVtLm5hbWUKICAgICAg ICAgICAgIGVsaWYgaGFzYXR0ciggaXRlbSwgJ3RpdGxlJyApOgpAQCAtMjgzLDYgKzMxMSwxNiBA QAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAorY2xhc3MgU2hhcmFibGVNb2RlbFNlcmlhbGl6ZXIoIGJh c2UuTW9kZWxTZXJpYWxpemVyICk6CisgICAgcGFzcworCisgICAgIyB0aGUgb25seSBvbmVzIHRo YXQgbmVlZHMgYW55IGZuczoKKyAgICAjICAgdXNlci91c2VyX2lkCisgICAgIyAgIHVzZXJfc2hh cmVzPworICAgICMgICB1c2VybmFtZV9hbmRfc2x1Zz8KKworCisjID0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3Mg U2hhcmFibGVNb2RlbERlc2VyaWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciApOgo9MjAK ICAgICBkZWYgZGVzZXJpYWxpemVfcHVibGlzaGVkKCBzZWxmLCB0cmFucywgaXRlbSwgdmFsICk6 CgpkaWZmIC1yIDRiZGU3MGM2NzdhOTJkZGE3MjEyZWNjNGNkOWVhOWM0ZDNlYzY5NTIgLXIgOGVi NmQ4YjBiZjEwYWQxYWQ1YjY5Zjk9CmRhODdkOGQwMDkzYjk3MmYxIGxpYi9nYWxheHkvbWFuYWdl cnMvdXNlcnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy91c2Vycy5weQorKysgYi9saWIv Z2FsYXh5L21hbmFnZXJzL3VzZXJzLnB5CkBAIC0xNjEsOSArMTYxLDYgQEAKICAgICAgICAgI1RP RE86IGNhdGNoIE5vUmVzdWx0Rm91bmQKICAgICAgICAgcmV0dXJuIHRyYW5zLnNhX3Nlc3Npb24u cXVlcnkoIG1vZGVsLkFQSUtleXMgKS5maWx0ZXJfYnkoIHVzZXI9M0R1PQpzZXIgKS5vbmUoKQo9 MjAKLSAgICAjVE9ETzogdGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZnVuY3Rpb25hbGl0eSBhcm91 bmQgdGhlIHVzZXIgKGF1dGhlbnRpPQpjYXRpb24sIHF1b3RhcywgZ3JvdXBzL3JvbGVzKQotICAg ICMgICBtb3N0IG9mIHdoaWNoIGl0IG1heSBiZSB1bm5lY2Nlc3NhcnkgdG8gaGF2ZSBoZXJlCi0K ICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSByb2xlcwogICAgIGRlZiBwcml2YXRlX3JvbGUoIHNl bGYsIHRyYW5zLCB1c2VyICk6CiAgICAgICAgICIiIgpAQCAtMTcxLDYgKzE2OCw5IEBACiAgICAg ICAgICNUT0RPOiBub3Qgc3VyZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggc2VjIGFnZW50Li4uIGl0 J3MganVzdCB0aGUgZj0KaXJzdCByb2xlIG9mIHR5cGUgcHJpdmF0ZQogICAgICAgICByZXR1cm4g dHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmdldF9wcml2YXRlX3VzZXJfcm9sZSggdXNlciApCj0y MAorICAgICNUT0RPOiB0aGVyZSBpcyBxdWl0ZSBhIGJpdCBvZiBmdW5jdGlvbmFsaXR5IGFyb3Vu ZCB0aGUgdXNlciAoYXV0aGVudGk9CmNhdGlvbiwgcXVvdGFzLCBncm91cHMvcm9sZXMpCisgICAg IyAgIG1vc3Qgb2Ygd2hpY2ggaXQgbWF5IGJlIHVubmVjY2Vzc2FyeSB0byBoYXZlIGhlcmUKKwo9 MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNECiBjbGFzcyBVc2VyU2VyaWFsaXplciggYmFzZS5Nb2RlbFNlcmlhbGl6 ZXIgKToKCmRpZmYgLXIgNGJkZTcwYzY3N2E5MmRkYTcyMTJlY2M0Y2Q5ZWE5YzRkM2VjNjk1MiAt ciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOT0KZGE4N2Q4ZDAwOTNiOTcyZjEgdGVzdC91bml0L21h bmFnZXJzL3Rlc3RfRGF0YXNldE1hbmFnZXIucHkKLS0tIGEvdGVzdC91bml0L21hbmFnZXJzL3Rl c3RfRGF0YXNldE1hbmFnZXIucHkKKysrIGIvdGVzdC91bml0L21hbmFnZXJzL3Rlc3RfRGF0YXNl dE1hbmFnZXIucHkKQEAgLTk1LDYgKzk1LDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz KCBleGNlcHRpb25zLkNvbmZpZ0RvZXNOb3RBbGxvd0V4Y2VwdGlvbiwgc2VsZi5kYT0KdGFzZXRf bWdyLnB1cmdlLCBzZWxmLnRyYW5zLCBpdGVtMSApCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo IGl0ZW0xLnB1cmdlZCApCj0yMAorICAgICMjVE9ETzogSSdtIHVuY2xlYXIgYXMgdG8gaG93IHRo ZXNlIHdvcmssIHNvIEknbSBraWNraW5nIHRoaXMgZG93biB0aGU9CiByb2FkIGEgYml0Li4uLgor ICAgICNkZWYgdGVzdF9hY2Nlc3NfcGVybWlzc2lvbiggc2VsZiApOgorICAgICMgICAgb3duZXIg PTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIyX2RhdGEgKQorICAg ICMgICAgZGF0YXNldCA9M0Qgc2VsZi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMgKQor ICAgICMgICAgIyBnaXZpbmcgb25lIHVzZXIgYWNjZXNzIHBlcm1pc3Npb24gbWFrZXMgaXQgbm9u LXB1YmxpYywgcmVtb3Zpbmc9CiBhY2Nlc3MgZm9yIGFueW9uZSBlbHNlCisgICAgIyAgICBzZWxm LmRhdGFzZXRfbWdyLmdpdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYudHJhbnMsIGRhdGFzZXQs IG93bj0KZXIgKQorICAgICMKKyAgICAjICAgIHVzZXIzID0zRCBzZWxmLnVzZXJfbWdyLmNyZWF0 ZSggc2VsZi50cmFucywgKip1c2VyM19kYXRhICkKKyAgICAjICAgIHVzZXI0ID0zRCBzZWxmLnVz ZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFucywKKyAgICAjICAgICAgICBlbWFpbD0zRCd1c2VyNEB1 c2VyNC51c2VyNCcsIHVzZXJuYW1lPTNEJ3VzZXI0JywgcGFzc3dvcmQ9M0RkPQplZmF1bHRfcGFz c3dvcmQgKQorICAgICMKKyAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5kYXRhc2V0X21n ci5oYXNfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYudHJhPQpucywgZGF0YXNldCwgb3duZXIgKSAp CisgICAgIyAgICBzZWxmLmFzc2VydEZhbHNlKCBzZWxmLmRhdGFzZXRfbWdyLmhhc19hY2Nlc3Nf cGVybWlzc2lvbiggc2VsZi50cj0KYW5zLCBkYXRhc2V0LCB1c2VyMyApICkKKyAgICAjICAgIHNl bGYuYXNzZXJ0RmFsc2UoIHNlbGYuZGF0YXNldF9tZ3IuaGFzX2FjY2Vzc19wZXJtaXNzaW9uKCBz ZWxmLnRyPQphbnMsIGRhdGFzZXQsIHVzZXI0ICkgKQorICAgICMKKyAgICAjICAgICMgc2hvdWxk IGJlIGFibGUgdG8gcHJvZ3Jlc3NpdmVseSBhZGQgbW9yZSByb2xlcyB3aXRob3V0IHJlbW92aW5n PQogdGhlIHByZXZpb3VzCisgICAgIyAgICBzZWxmLmRhdGFzZXRfbWdyLmdpdmVfYWNjZXNzX3Bl cm1pc3Npb24oIHNlbGYudHJhbnMsIGRhdGFzZXQsIHVzZT0KcjMgKQorICAgICMgICAgc2VsZi5h c3NlcnRUcnVlKCBzZWxmLmRhdGFzZXRfbWdyLmhhc19hY2Nlc3NfcGVybWlzc2lvbiggc2VsZi50 cmE9Cm5zLCBkYXRhc2V0LCB1c2VyMyApICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2Vs Zi5kYXRhc2V0X21nci5oYXNfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYudHJhPQpucywgZGF0YXNl dCwgb3duZXIgKSApCisgICAgIyAgICBzZWxmLmFzc2VydEZhbHNlKCBzZWxmLmRhdGFzZXRfbWdy Lmhhc19hY2Nlc3NfcGVybWlzc2lvbiggc2VsZi50cj0KYW5zLCBkYXRhc2V0LCB1c2VyNCApICkK KyAgICAjCisgICAgIyAgICAjc2VsZi5hc3NlcnRUcnVlKCBzZWxmLmRhdGFzZXRfbWdyLmlzX2Fj Y2Vzc2libGUoIHNlbGYudHJhbnMsIGRhdD0KYXNldCwgb3duZXIgKSApCisgICAgIyAgICAjc2Vs Zi5hc3NlcnRGYWxzZSggc2VsZi5kYXRhc2V0X21nci5pc19hY2Nlc3NpYmxlKCBzZWxmLnRyYW5z LCBkYT0KdGFzZXQsIG5vbl9vd25lciApICkKKwogICAgIGRlZiB0ZXN0X2FjY2Vzc2libGUoIHNl bGYgKToKICAgICAgICAgb3duZXIgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5z LCAqKnVzZXIyX2RhdGEgKQogICAgICAgICBub25fb3duZXIgPTNEIHNlbGYudXNlcl9tZ3IuY3Jl YXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIzX2RhdGEgKQpAQCAtMTA1LDExICsxMjksNiBAQAogICAg ICAgICBmb3IgdXNlciBpbiBzZWxmLnVzZXJfbWdyLmxpc3QoIHNlbGYudHJhbnMgKToKICAgICAg ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5kYXRhc2V0X21nci5pc19hY2Nlc3NpYmxlKCBz ZWxmLnRyYW5zLCBkPQphdGFzZXQsIHVzZXIgKSApCj0yMAotICAgICAgICAjVE9ETzogdGhpcyBp cyAuLi4gbm90IHdvcmtpbmcuLi4KLSAgICAgICAgI3NlbGYuZGF0YXNldF9tZ3IuZ2l2ZV9hY2Nl c3NfcGVybWlzc2lvbiggc2VsZi50cmFucywgZGF0YXNldCwgb3duPQplciApCi0gICAgICAgICNz ZWxmLmFzc2VydFRydWUoIHNlbGYuZGF0YXNldF9tZ3IuaXNfYWNjZXNzaWJsZSggc2VsZi50cmFu cywgZGF0YT0Kc2V0LCBvd25lciApICkKLSAgICAgICAgI3NlbGYuYXNzZXJ0RmFsc2UoIHNlbGYu ZGF0YXNldF9tZ3IuaXNfYWNjZXNzaWJsZSggc2VsZi50cmFucywgZGF0PQphc2V0LCBub25fb3du ZXIgKSApCi0KPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3MgRGF0YXNldEFzc29jaWF0aW9uTWFuYWdl clRlc3RDYXNlKCBCYXNlVGVzdENhc2UgKToKCmRpZmYgLXIgNGJkZTcwYzY3N2E5MmRkYTcyMTJl Y2M0Y2Q5ZWE5YzRkM2VjNjk1MiAtciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOT0KZGE4N2Q4ZDAw OTNiOTcyZjEgdGVzdC91bml0L21hbmFnZXJzL3Rlc3RfSERBTWFuYWdlci5weQotLS0gYS90ZXN0 L3VuaXQvbWFuYWdlcnMvdGVzdF9IREFNYW5hZ2VyLnB5CisrKyBiL3Rlc3QvdW5pdC9tYW5hZ2Vy cy90ZXN0X0hEQU1hbmFnZXIucHkKQEAgLTM2LDYgKzM2LDMzIEBACiAgICAgICAgIHNlbGYuZGF0 YXNldF9tZ3IgPTNEIERhdGFzZXRNYW5hZ2VyKCBzZWxmLmFwcCApCiAgICAgICAgIHNlbGYuaGRh X21nciA9M0QgSERBTWFuYWdlciggc2VsZi5hcHAgKQo9MjAKKyAgICBkZWYgdGVzdF9iYXNlKCBz ZWxmICk6CisgICAgICAgIGhkYV9tb2RlbCA9M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lh dGlvbgorICAgICAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMs ICoqdXNlcjJfZGF0YSApCisgICAgICAgIGhpc3RvcnkxID0zRCBzZWxmLmhpc3RvcnlfbWdyLmNy ZWF0ZSggc2VsZi50cmFucywgbmFtZT0zRCdoaXN0b3J5MT0KJywgdXNlcj0zRG93bmVyICkKKyAg ICAgICAgaGRhMSA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeT0z RGhpc3RvcnkxLCBoaWQ9Cj0zRDEgKQorICAgICAgICBoZGEyID0zRCBzZWxmLmhkYV9tZ3IuY3Jl YXRlKCBzZWxmLnRyYW5zLCBoaXN0b3J5PTNEaGlzdG9yeTEsIGhpZD0KPTNEMiApCisgICAgICAg IGhkYTMgPTNEIHNlbGYuaGRhX21nci5jcmVhdGUoIHNlbGYudHJhbnMsIGhpc3Rvcnk9M0RoaXN0 b3J5MSwgaGlkPQo9M0QzICkKKworICAgICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRv IHF1ZXJ5IiApCisgICAgICAgIGhkYXMgPTNEIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSgg aGRhX21vZGVsICkuYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdy Lmxpc3QoIHNlbGYudHJhbnMgKSwgaGRhcyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNl bGYuaGRhX21nci5vbmUoIHNlbGYudHJhbnMsIGZpbHRlcnM9M0QoIGhkYV9tbz0KZGVsLmlkID0z RD0zRCBoZGExLmlkICkgKSwgaGRhMSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYu aGRhX21nci5ieV9pZCggc2VsZi50cmFucywgaGRhMS5pZCApLCBoZGExICkKKyAgICAgICAgc2Vs Zi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdyLmJ5X2lkcyggc2VsZi50cmFucywgWyBoZGEyLmlk LCBoZGExPQouaWQgXSApLCBbIGhkYTIsIGhkYTEgXSApCisKKyAgICAgICAgc2VsZi5sb2coICJz aG91bGQgYmUgYWJsZSB0byBsaW1pdCBhbmQgb2Zmc2V0IiApCisgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwoIHNlbGYuaGRhX21nci5saXN0KCBzZWxmLnRyYW5zLCBsaW1pdD0zRDEgKSwgaGRhcz0K WzA6MV0gKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmhkYV9tZ3IubGlzdCggc2Vs Zi50cmFucywgb2Zmc2V0PTNEMSApLCBoZGE9CnNbMTpdICkKKyAgICAgICAgc2VsZi5hc3NlcnRF cXVhbCggc2VsZi5oZGFfbWdyLmxpc3QoIHNlbGYudHJhbnMsIGxpbWl0PTNEMSwgb2Zmc2V0PQo9 M0QxICksIGhkYXNbMToyXSApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFf bWdyLmxpc3QoIHNlbGYudHJhbnMsIGxpbWl0PTNEMCApLCBbXSApCisgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5saXN0KCBzZWxmLnRyYW5zLCBvZmZzZXQ9M0QzICksIFtd ICkKKworICAgICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIG9yZGVyIiApCisgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5saXN0KCBzZWxmLnRyYW5zLCBvcmRl cl9ieT0zRHNxbGFsYz0KaGVteS5kZXNjKCBoZGFfbW9kZWwuY3JlYXRlX3RpbWUgKSApLAorICAg ICAgICAgICAgWyBoZGEzLCBoZGEyLCBoZGExIF0gKQorCiAgICAgZGVmIHRlc3RfY3JlYXRlKCBz ZWxmICk6CiAgICAgICAgIG93bmVyID0zRCBzZWxmLnVzZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFu cywgKip1c2VyMl9kYXRhICkKICAgICAgICAgbm9uX293bmVyID0zRCBzZWxmLnVzZXJfbWdyLmNy ZWF0ZSggc2VsZi50cmFucywgKip1c2VyM19kYXRhICkKQEAgLTg3LDMzICsxMTQsNiBAQAogICAg ICMgICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBjb3B5IGFuIEhEQSIgKQogICAgICMg ICAgaGRhMiA9M0Qgc2VsZi5oZGFfbWdyLmNvcHlfbGRkYSggc2VsZi50cmFucywgaGlzdG9yeTEs IGhkYTEgKQo9MjAKLSAgICBkZWYgdGVzdF9iYXNlKCBzZWxmICk6Ci0gICAgICAgIGhkYV9tb2Rl bCA9M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbgotICAgICAgICBvd25lciA9M0Qg c2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMsICoqdXNlcjJfZGF0YSApCi0gICAgICAg IGhpc3RvcnkxID0zRCBzZWxmLmhpc3RvcnlfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgbmFtZT0z RCdoaXN0b3J5MT0KJywgdXNlcj0zRG93bmVyICkKLSAgICAgICAgaGRhMSA9M0Qgc2VsZi5oZGFf bWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeT0zRGhpc3RvcnkxLCBoaWQ9Cj0zRDEgKQot ICAgICAgICBoZGEyID0zRCBzZWxmLmhkYV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBoaXN0b3J5 PTNEaGlzdG9yeTEsIGhpZD0KPTNEMiApCi0gICAgICAgIGhkYTMgPTNEIHNlbGYuaGRhX21nci5j cmVhdGUoIHNlbGYudHJhbnMsIGhpc3Rvcnk9M0RoaXN0b3J5MSwgaGlkPQo9M0QzICkKLQotICAg ICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIHF1ZXJ5IiApCi0gICAgICAgIGhkYXMg PTNEIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggaGRhX21vZGVsICkuYWxsKCkKLSAgICAg ICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdyLmxpc3QoIHNlbGYudHJhbnMgKSwgaGRh cyApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5vbmUoIHNlbGYudHJh bnMsIGZpbHRlcnM9M0QoIGhkYV9tbz0KZGVsLmlkID0zRD0zRCBoZGExLmlkICkgKSwgaGRhMSAp Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5ieV9pZCggc2VsZi50cmFu cywgaGRhMS5pZCApLCBoZGExICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFf bWdyLmJ5X2lkcyggc2VsZi50cmFucywgWyBoZGEyLmlkLCBoZGExPQouaWQgXSApLCBbIGhkYTIs IGhkYTEgXSApCi0KLSAgICAgICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBsaW1pdCBh bmQgb2Zmc2V0IiApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5saXN0 KCBzZWxmLnRyYW5zLCBsaW1pdD0zRDEgKSwgaGRhcz0KWzA6MV0gKQotICAgICAgICBzZWxmLmFz c2VydEVxdWFsKCBzZWxmLmhkYV9tZ3IubGlzdCggc2VsZi50cmFucywgb2Zmc2V0PTNEMSApLCBo ZGE9CnNbMTpdICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdyLmxpc3Qo IHNlbGYudHJhbnMsIGxpbWl0PTNEMSwgb2Zmc2V0PQo9M0QxICksIGhkYXNbMToyXSApCi0KLSAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdyLmxpc3QoIHNlbGYudHJhbnMsIGxp bWl0PTNEMCApLCBbXSApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5s aXN0KCBzZWxmLnRyYW5zLCBvZmZzZXQ9M0QzICksIFtdICkKLQotICAgICAgICBzZWxmLmxvZygg InNob3VsZCBiZSBhYmxlIHRvIG9yZGVyIiApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNl bGYuaGRhX21nci5saXN0KCBzZWxmLnRyYW5zLCBvcmRlcl9ieT0zRHNxbGFsYz0KaGVteS5kZXNj KCBoZGFfbW9kZWwuY3JlYXRlX3RpbWUgKSApLAotICAgICAgICAgICAgWyBoZGEzLCBoZGEyLCBo ZGExIF0gKQotCiAgICAgZGVmIHRlc3RfZGVsZXRlKCBzZWxmICk6CiAgICAgICAgIG93bmVyID0z RCBzZWxmLnVzZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgKip1c2VyMl9kYXRhICkKICAgICAg ICAgaGlzdG9yeTEgPTNEIHNlbGYuaGlzdG9yeV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBuYW1l PTNEJ2hpc3RvcnkxPQonLCB1c2VyPTNEb3duZXIgKQpAQCAtMTQyLDggKzE0Miw2IEBACj0yMAog ICAgIGRlZiB0ZXN0X3B1cmdlX25vdF9hbGxvd2VkKCBzZWxmICk6CiAgICAgICAgIHNlbGYudHJh bnMuYXBwLmNvbmZpZy5hbGxvd191c2VyX2RhdGFzZXRfcHVyZ2UgPTNEIEZhbHNlCi0gICAgICAg IHNlbGYuYXNzZXJ0UmFpc2VzKCBleGNlcHRpb25zLkNvbmZpZ0RvZXNOb3RBbGxvd0V4Y2VwdGlv biwKLSAgICAgICAgICAgIHNlbGYuaGRhX21nci5lcnJvcl91bmxlc3NfZGF0YXNldF9wdXJnZV9h bGxvd2VkLCBzZWxmLnRyYW5zLCBOPQpvbmUgKQo9MjAKICAgICAgICAgb3duZXIgPTNEIHNlbGYu dXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIyX2RhdGEgKQogICAgICAgICBoaXN0 b3J5MSA9M0Qgc2VsZi5oaXN0b3J5X21nci5jcmVhdGUoIHNlbGYudHJhbnMsIG5hbWU9M0QnaGlz dG9yeTE9CicsIHVzZXI9M0Rvd25lciApCkBAIC0xNTUsMjcgKzE1MywzMSBAQAogICAgICAgICBz ZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5Db25maWdEb2VzTm90QWxsb3dFeGNlcHRpb24s IHNlbGYuaGQ9CmFfbWdyLnB1cmdlLCBzZWxmLnRyYW5zLCBpdGVtMSApCiAgICAgICAgIHNlbGYu YXNzZXJ0RmFsc2UoIGl0ZW0xLnB1cmdlZCApCj0yMAotICAgICNkZWYgdGVzdF9vd25hYmxlKCBz ZWxmICk6Ci0gICAgIyAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJh bnMsICoqdXNlcjJfZGF0YSApCi0gICAgIyAgICBub25fb3duZXIgPTNEIHNlbGYudXNlcl9tZ3Iu Y3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIzX2RhdGEgKQotICAgICMKLSAgICAjICAgIGhpc3Rv cnkxID0zRCBzZWxmLmhpc3RvcnlfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgbmFtZT0zRCdoaXN0 b3J5PQoxJywgdXNlcj0zRG93bmVyICkKLSAgICAjICAgIGRhdGFzZXQxID0zRCBzZWxmLmRhdGFz ZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyApCi0gICAgIyAgICBpdGVtMSA9M0Qgc2VsZi5oZGFf bWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeTEsIGRhdGFzZXQxICkKLSAgICAjCi0gICAg IyAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIHBvbGwgd2hldGhlciBhIGdpdmVuIHVz ZXIgb3ducyBhbiBpdD0KZW0iICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1ZSggIHNlbGYuaGRh X21nci5pc19vd25lciggc2VsZi50cmFucywgaXRlbTEsIG93bmVyPQogKSApCi0gICAgIyAgICBz ZWxmLmFzc2VydEZhbHNlKCBzZWxmLmhkYV9tZ3IuaXNfb3duZXIoIHNlbGYudHJhbnMsIGl0ZW0x LCBub25fbz0Kd25lciApICkKLSAgICAjCi0gICAgIyAgICBzZWxmLmxvZyggInNob3VsZCByYWlz ZSBhbiBlcnJvciB3aGVuIGNoZWNraW5nIG93bmVyc2hpcCB3aXRoIG5vbj0KLW93bmVyIiApCi0g ICAgIyAgICBzZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5JdGVtT3duZXJzaGlwRXhjZXB0 aW9uLAotICAgICMgICAgICAgIHNlbGYuaGRhX21nci5jaGVja19vd25lcnNoaXAsIHNlbGYudHJh bnMsIGl0ZW0xLCBub25fb3duZXIgKQotICAgICMKLSAgICAjICAgIHNlbGYubG9nKCAic2hvdWxk IG5vdCByYWlzZSBhbiBlcnJvciB3aGVuIGNoZWNraW5nIG93bmVyc2hpcCB3aXRoPQogb3duZXIi ICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGRhX21nci5jaGVja19vd25lcnNo aXAoIHNlbGYudHJhbnMsIGl0ZW0xPQosIG93bmVyICksIGl0ZW0xICkKLSAgICAjCi0gICAgIyAg ICAjc2VsZi5sb2coICJzaG91bGQgbm90IHJhaXNlIGFuIGVycm9yIHdoZW4gY2hlY2tpbmcgb3du ZXJzaGlwIHdpdD0KaCBhZG1pbiIgKQotICAgICMgICAgI3NlbGYuYXNzZXJ0RXF1YWwoIHNlbGYu aGRhX21nci5jaGVja19vd25lcnNoaXAoIHNlbGYudHJhbnMsIGl0ZW09CjEsIHNlbGYuYWRtaW5f dXNlciApLCBpdGVtMSApCisgICAgZGVmIHRlc3Rfb3duYWJsZSggc2VsZiApOgorICAgICAgICBv d25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMsICoqdXNlcjJfZGF0YSAp CisgICAgICAgIG5vbl9vd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMs ICoqdXNlcjNfZGF0YSApCisKKyAgICAgICAgaGlzdG9yeTEgPTNEIHNlbGYuaGlzdG9yeV9tZ3Iu Y3JlYXRlKCBzZWxmLnRyYW5zLCBuYW1lPTNEJ2hpc3RvcnkxPQonLCB1c2VyPTNEb3duZXIgKQor ICAgICAgICBkYXRhc2V0MSA9M0Qgc2VsZi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMg KQorICAgICAgICBpdGVtMSA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlz dG9yeTEsIGRhdGFzZXQxICkKKworICAgICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRv IHBvbGwgd2hldGhlciBhIGdpdmVuIHVzZXIgb3ducyBhbiBpdGU9Cm0iICkKKyAgICAgICAgc2Vs Zi5hc3NlcnRUcnVlKCAgc2VsZi5oZGFfbWdyLmlzX293bmVyKCBzZWxmLnRyYW5zLCBpdGVtMSwg b3duZXIgPQopICkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSggc2VsZi5oZGFfbWdyLmlzX293 bmVyKCBzZWxmLnRyYW5zLCBpdGVtMSwgbm9uX293PQpuZXIgKSApCisKKyAgICAgICAgc2VsZi5s b2coICJzaG91bGQgcmFpc2UgYW4gZXJyb3Igd2hlbiBjaGVja2luZyBvd25lcnNoaXAgd2l0aCBu b24tPQpvd25lciIgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5JdGVt T3duZXJzaGlwRXhjZXB0aW9uLAorICAgICAgICAgICAgc2VsZi5oZGFfbWdyLmVycm9yX3VubGVz c19vd25lciwgc2VsZi50cmFucywgaXRlbTEsIG5vbl9vd25lciApCisKKyAgICAgICAgc2VsZi5s b2coICJzaG91bGQgcmFpc2UgYW4gZXJyb3Igd2hlbiBjaGVja2luZyBvd25lcnNoaXAgd2l0aCBh bm9uPQp5bW91cyIgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5JdGVt T3duZXJzaGlwRXhjZXB0aW9uLAorICAgICAgICAgICAgc2VsZi5oZGFfbWdyLmVycm9yX3VubGVz c19vd25lciwgc2VsZi50cmFucywgaXRlbTEsIE5vbmUgKQorCisgICAgICAgIHNlbGYubG9nKCAi c2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvciB3aGVuIGNoZWNraW5nIG93bmVyc2hpcCB3aXRoID0K b3duZXIiICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oZGFfbWdyLmVycm9yX3Vu bGVzc19vd25lciggc2VsZi50cmFucywgaXRlPQptMSwgb3duZXIgKSwgaXRlbTEgKQorCisgICAg ICAgIHNlbGYubG9nKCAic2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvciB3aGVuIGNoZWNraW5nIG93 bmVyc2hpcCB3aXRoID0KYWRtaW4iICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5o ZGFfbWdyLmVycm9yX3VubGVzc19vd25lciggc2VsZi50cmFucywgaXRlPQptMSwgc2VsZi5hZG1p bl91c2VyICksIGl0ZW0xICkKPTIwCiAgICAgZGVmIHRlc3RfYWNjZXNzaWJsZSggc2VsZiApOgog ICAgICAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYudHJhbnMsICoqdXNl cjJfZGF0YSApCkBAIC0xODksNiArMTkxLDI2IEBACiAgICAgICAgIGZvciB1c2VyIGluIHNlbGYu dXNlcl9tZ3IubGlzdCggc2VsZi50cmFucyApOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl KCBzZWxmLmhkYV9tZ3IuaXNfYWNjZXNzaWJsZSggc2VsZi50cmFucywgaXRlbTE9CiwgdXNlciAp ICkKPTIwCisgICAgICAgICNUT0RPOiBzZXQgcGVybXMgb24gdW5kZXJseWluZyBkYXRhc2V0IGFu ZCB0aGVuIHRlc3QgYWNjZXNzaWJsZQorCisgICAgZGVmIHRlc3RfYW5vbiggc2VsZiApOgorICAg ICAgICBhbm9uX3VzZXIgPTNEIE5vbmUKKyAgICAgICAgc2VsZi50cmFucy5zZXRfdXNlciggYW5v bl91c2VyICkKKworICAgICAgICBoaXN0b3J5MSA9M0Qgc2VsZi5oaXN0b3J5X21nci5jcmVhdGUo IHNlbGYudHJhbnMsIG5hbWU9M0QnYW5vbl9oaXM9CnRvcnknLCB1c2VyPTNEYW5vbl91c2VyICkK KyAgICAgICAgc2VsZi50cmFucy5zZXRfaGlzdG9yeSggaGlzdG9yeTEgKQorICAgICAgICBkYXRh c2V0MSA9M0Qgc2VsZi5kYXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhbnMgKQorICAgICAgICBp dGVtMSA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeTEsIGRhdGFz ZXQxICkKKworICAgICAgICBzZWxmLmxvZyggInNob3VsZCBub3QgcmFpc2UgYW4gZXJyb3Igd2hl biBjaGVja2luZyBvd25lcnNoaXAvYWNjZXM9CnMgb24gYW5vbnltb3VzJyBvd24gZGF0YXNldCIg KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIHNlbGYuaGRhX21nci5pc19hY2Nlc3NpYmxlKCBz ZWxmLnRyYW5zLCBpdGVtMSwgYW49Cm9uX3VzZXIgKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoIHNlbGYuaGRhX21nci5lcnJvcl91bmxlc3Nfb3duZXIoIHNlbGYudHJhbnMsIGl0ZT0KbTEs IGFub25fdXNlciApLCBpdGVtMSApCisKKyAgICAgICAgc2VsZi5sb2coICJzaG91bGQgcmFpc2Ug YW4gZXJyb3Igd2hlbiBjaGVja2luZyBvd25lcnNoaXAgb24gYW5vbnltPQpvdXMnIGRhdGFzZXQg d2l0aCBvdGhlciB1c2VyIiApCisgICAgICAgIG5vbl9vd25lciA9M0Qgc2VsZi51c2VyX21nci5j cmVhdGUoIHNlbGYudHJhbnMsICoqdXNlcjNfZGF0YSApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp c2VzKCBleGNlcHRpb25zLkl0ZW1Pd25lcnNoaXBFeGNlcHRpb24sCisgICAgICAgICAgICBzZWxm LmhkYV9tZ3IuZXJyb3JfdW5sZXNzX293bmVyLCBzZWxmLnRyYW5zLCBpdGVtMSwgbm9uX293bmVy ICkKKwo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNECiBpZiBfX25hbWVfXyA9M0Q9M0QgJ19fbWFpbl9fJzoKCgpo dHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMDk0MjA1 YjQ1MWFhLwpDaGFuZ2VzZXQ6ICAgMDk0MjA1YjQ1MWFhClVzZXI6ICAgICAgICBjYXJsZmViZXJo YXJkCkRhdGU6ICAgICAgICAyMDE1LTAxLTA3IDE5OjU4OjQ1KzAwOjAwClN1bW1hcnk6ICAgICBt YW51YWwgc3luYwpBZmZlY3RlZCAjOiAgOCBmaWxlcwoKZGlmZiAtciA4ZWI2ZDhiMGJmMTBhZDFh ZDViNjlmOWRhODdkOGQwMDkzYjk3MmYxIC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyPQowMDU0 MmE2YzgxZWIzZWYwYyBsaWIvZ2FsYXh5L2FwcC5weQotLS0gYS9saWIvZ2FsYXh5L2FwcC5weQor KysgYi9saWIvZ2FsYXh5L2FwcC5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCBnYWxheHkuc2Vj dXJpdHkKIGZyb20gZ2FsYXh5Lm1hbmFnZXJzLmNvbGxlY3Rpb25zIGltcG9ydCBEYXRhc2V0Q29s bGVjdGlvbk1hbmFnZXIKIGltcG9ydCBnYWxheHkucXVvdGEKLWZyb20gZ2FsYXh5LnRhZ3MudGFn X2hhbmRsZXIgaW1wb3J0IEdhbGF4eVRhZ0hhbmRsZXIKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzLnRh Z3MgaW1wb3J0IEdhbGF4eVRhZ01hbmFnZXIKIGZyb20gZ2FsYXh5LnZpc3VhbGl6YXRpb24uZ2Vu b21lcyBpbXBvcnQgR2Vub21lcwogZnJvbSBnYWxheHkudmlzdWFsaXphdGlvbi5kYXRhX3Byb3Zp ZGVycy5yZWdpc3RyeSBpbXBvcnQgRGF0YVByb3ZpZGVyUmVnaXM9CnRyeQogZnJvbSBnYWxheHku dmlzdWFsaXphdGlvbi5yZWdpc3RyeSBpbXBvcnQgVmlzdWFsaXphdGlvbnNSZWdpc3RyeQpAQCAt NTgsNyArNTgsNyBAQAogICAgICAgICAjIFNlY3VyaXR5IGhlbHBlcgogICAgICAgICBzZWxmLl9j b25maWd1cmVfc2VjdXJpdHkoKQogICAgICAgICAjIFRhZyBoYW5kbGVyCi0gICAgICAgIHNlbGYu dGFnX2hhbmRsZXIgPTNEIEdhbGF4eVRhZ0hhbmRsZXIoKQorICAgICAgICBzZWxmLnRhZ19oYW5k bGVyID0zRCBHYWxheHlUYWdNYW5hZ2VyKCBzZWxmICkKICAgICAgICAgIyBEYXRhc2V0IENvbGxl Y3Rpb24gUGx1Z2lucwogICAgICAgICBzZWxmLmRhdGFzZXRfY29sbGVjdGlvbnNfc2VydmljZSA9 M0QgRGF0YXNldENvbGxlY3Rpb25NYW5hZ2VyKHNlbGYpCj0yMAoKZGlmZiAtciA4ZWI2ZDhiMGJm MTBhZDFhZDViNjlmOWRhODdkOGQwMDkzYjk3MmYxIC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYy PQowMDU0MmE2YzgxZWIzZWYwYyBsaWIvZ2FsYXh5L2pvYnMvYWN0aW9ucy9wb3N0LnB5Ci0tLSBh L2xpYi9nYWxheHkvam9icy9hY3Rpb25zL3Bvc3QucHkKKysrIGIvbGliL2dhbGF4eS9qb2JzL2Fj dGlvbnMvcG9zdC5weQpAQCAtMSw1ICsxLDYgQEAKICIiIgotQWN0aW9ucyB0byBiZSBydW4gYXQg am9iIGNvbXBsZXRpb24uICBDdXJyZW50bHkgb25seSB1c2VkIGluIHdvcmtmbG93cy4KK0FjdGlv bnMgdG8gYmUgcnVuIGF0IGpvYiBjb21wbGV0aW9uIChvciBvdXRwdXQgaGRhIGNyZWF0aW9uLCBh cyBpbiB0aGUgY2FzPQplIG9mCitpbW1lZGlhdGVfYWN0aW9ucyBsaXN0ZWQgYmVsb3cuICBDdXJy ZW50bHkgb25seSB1c2VkIGluIHdvcmtmbG93cy4KICIiIgo9MjAKIGltcG9ydCBkYXRldGltZQpA QCAtNDIwLDYgKzQyMSw0MiBAQAogICAgICAgICByZXR1cm4gIkRlbGV0ZSBwYXJlbnQgZGF0YXNl dHMgb2YgdGhpcyBzdGVwIGNyZWF0ZWQgaW4gdGhpcyB3b3JrZmw9Cm93IHRoYXQgYXJlbid0IGZs YWdnZWQgYXMgb3V0cHV0cy4iCj0yMAo9MjAKK2NsYXNzIFRhZ0RhdGFzZXRBY3Rpb24oRGVmYXVs dEpvYkFjdGlvbik6CisgICAgbmFtZSA9M0QgIlRhZ0RhdGFzZXRBY3Rpb24iCisgICAgdmVyYm9z ZV9uYW1lID0zRCAiQWRkIHRhZyB0byBkYXRhc2V0IgorCisgICAgQGNsYXNzbWV0aG9kCisgICAg ZGVmIGV4ZWN1dGUoY2xzLCBhcHAsIHNhX3Nlc3Npb24sIGFjdGlvbiwgam9iLCByZXBsYWNlbWVu dF9kaWN0KToKKyAgICAgICAgaWYgYWN0aW9uLmFjdGlvbl9hcmd1bWVudHM6CisgICAgICAgICAg ICB0YWdzID0zRCBbdC5zdHJpcCgpIGZvciB0IGluIGFjdGlvbi5hY3Rpb25fYXJndW1lbnRzLmdl dCgndGFncz0KJywgJycpLnNwbGl0KCcsJyldCisgICAgICAgICAgICBpZiB0YWdzOgorICAgICAg ICAgICAgICAgIGZvciBkYXRhc2V0X2Fzc29jIGluIGpvYi5vdXRwdXRfZGF0YXNldHM6CisgICAg ICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5vdXRwdXRfbmFtZSA9M0Q9M0QgJycgb3IgZGF0YXNl dF9hc3NvYy5uYW1lID0KPTNEPTNEIGFjdGlvbi5vdXRwdXRfbmFtZToKKyAgICAgICAgICAgICAg ICAgICAgICAgIGFwcC50YWdfaGFuZGxlci5zZXRfdGFnc19mcm9tX2xpc3QoIGpvYi51c2VyLCBk YXRhPQpzZXRfYXNzb2MuZGF0YXNldCwgdGFncykKKyAgICAgICAgICAgIHNhX3Nlc3Npb24uZmx1 c2goKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9jb25maWdfZm9ybShjbHMsIHRy YW5zKToKKyAgICAgICAgZm9ybSA9M0QgIiIiCisgICAgICAgICAgICBpZiAocGphLmFjdGlvbl9h cmd1bWVudHMgJiYgcGphLmFjdGlvbl9hcmd1bWVudHMudGFncyl7CisgICAgICAgICAgICAgICAg cF9zdHIgKz0zRCAiPGxhYmVsIGZvcj0zRCdwamFfXyIrcGphLm91dHB1dF9uYW1lKyJfX1RhZ0Rh dD0KYXNldEFjdGlvbl9fdGFncyc+VGFnczo8L2xhYmVsPlwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgPGlucHV0IHR5cGU9M0QndGV4dCcgbmFtZT0zRCdwamFfXyIrcGphLm91dHB1dF9uPQph bWUrIl9fVGFnRGF0YXNldEFjdGlvbl9fdGFncycgdmFsdWU9M0RcXCIiICsgcGphLmFjdGlvbl9h cmd1bWVudHMudGFncy5yZXA9CmxhY2UoLyIvZywgIiZxdW90OyIpICsgIlxcIi8+IjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgcF9zdHIgKz0zRCAi PGxhYmVsIGZvcj0zRCdwamFfXyIrcGphLm91dHB1dF9uYW1lKyJfX1RhZ0RhdD0KYXNldEFjdGlv bl9fdGFncyc+VGFnczo8L2xhYmVsPlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0 IHR5cGU9M0QndGV4dCcgbmFtZT0zRCdwamFfXyIrcGphLm91dHB1dF9uPQphbWUrIl9fVGFnRGF0 YXNldEFjdGlvbl9fdGFncycgdmFsdWU9M0QnJy8+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICIiIgorICAgICAgICByZXR1cm4gZ2V0X2Zvcm1fdGVtcGxhdGUoY2xzLm5hbWUsIGNscy52 ZXJib3NlX25hbWUsIGZvcm0sICJUaGlzIGE9CmN0aW9uIHdpbGwgc2V0IHRhZ3MgZm9yIHRoZSBk YXRhc2V0LiIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X3Nob3J0X3N0cihjbHMs IHBqYSk6CisgICAgICAgIGlmIHBqYS5hY3Rpb25fYXJndW1lbnRzIGFuZCBwamEuYWN0aW9uX2Fy Z3VtZW50cy5nZXQoJ3RhZ3MnLCAnJyk6CisgICAgICAgICAgICByZXR1cm4gIkFkZCB0YWcocykg JyVzJyB0byAnJXMnLiIgJSAocGphLmFjdGlvbl9hcmd1bWVudHNbJ3RhZz0KcyddLCBwamEub3V0 cHV0X25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlRhZyBhZGRpdGlv biBhY3Rpb24gdXNlZCB3aXRob3V0IGEgdGFnIHNwZWNpZmllZC4gIE5vID0KdGFnIHdpbGwgYmUg YWRkZWQuIgorCisKIGNsYXNzIEFjdGlvbkJveChvYmplY3QpOgo9MjAKICAgICBhY3Rpb25zID0z RCB7ICJSZW5hbWVEYXRhc2V0QWN0aW9uIjogUmVuYW1lRGF0YXNldEFjdGlvbiwKQEAgLTQyOCwx MSArNDY1LDEzIEBACiAgICAgICAgICAgICAgICAgIkNvbHVtblNldEFjdGlvbiI6IENvbHVtblNl dEFjdGlvbiwKICAgICAgICAgICAgICAgICAiRW1haWxBY3Rpb24iOiBFbWFpbEFjdGlvbiwKICAg ICAgICAgICAgICAgICAiRGVsZXRlSW50ZXJtZWRpYXRlc0FjdGlvbiI6IERlbGV0ZUludGVybWVk aWF0ZXNBY3Rpb24sCisgICAgICAgICAgICAgICAgIlRhZ0RhdGFzZXRBY3Rpb24iOiBUYWdEYXRh c2V0QWN0aW9uLAogICAgICAgICAgICAgICAgIH0KICAgICBwdWJsaWNfYWN0aW9ucyA9M0QgWydS ZW5hbWVEYXRhc2V0QWN0aW9uJywgJ0NoYW5nZURhdGF0eXBlQWN0aW9uJywKICAgICAgICAgICAg ICAgICAgICAgICAnQ29sdW1uU2V0QWN0aW9uJywgJ0VtYWlsQWN0aW9uJywKLSAgICAgICAgICAg ICAgICAgICAgICAnRGVsZXRlSW50ZXJtZWRpYXRlc0FjdGlvbiddCi0gICAgaW1tZWRpYXRlX2Fj dGlvbnMgPTNEIFsnQ2hhbmdlRGF0YXR5cGVBY3Rpb24nLCAnUmVuYW1lRGF0YXNldEFjdGlvbidd CisgICAgICAgICAgICAgICAgICAgICAgJ0RlbGV0ZUludGVybWVkaWF0ZXNBY3Rpb24nLCAnVGFn RGF0YXNldEFjdGlvbiddCisgICAgaW1tZWRpYXRlX2FjdGlvbnMgPTNEIFsnQ2hhbmdlRGF0YXR5 cGVBY3Rpb24nLCAnUmVuYW1lRGF0YXNldEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAg ICAgJ1RhZ0RhdGFzZXRBY3Rpb24nXQo9MjAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZ2V0 X3Nob3J0X3N0cihjbHMsIGFjdGlvbik6CgpkaWZmIC1yIDhlYjZkOGIwYmYxMGFkMWFkNWI2OWY5 ZGE4N2Q4ZDAwOTNiOTcyZjEgLXIgMDk0MjA1YjQ1MWFhY2VmNzc3YzBhZjI9CjAwNTQyYTZjODFl YjNlZjBjIGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKLS0tIGEvbGliL2dhbGF4 eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxl Y3Rpb25zLnB5CkBAIC0zNSw2ICszNSw3IEBACiAgICAgICAgIHNlbGYuY29sbGVjdGlvbl90eXBl X2Rlc2NyaXB0aW9ucyA9M0QgQ29sbGVjdGlvblR5cGVEZXNjcmlwdGlvbkZhYz0KdG9yeSggc2Vs Zi50eXBlX3JlZ2lzdHJ5ICkKICAgICAgICAgc2VsZi5tb2RlbCA9M0QgYXBwLm1vZGVsCiAgICAg ICAgIHNlbGYuc2VjdXJpdHkgPTNEIGFwcC5zZWN1cml0eQorCiAgICAgICAgIHNlbGYuaGRhX21h bmFnZXIgPTNEIGhkYXMuSERBTWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi5oaXN0b3J5X21h bmFnZXIgPTNEIGhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi50 YWdfbWFuYWdlciA9M0QgdGFncy5UYWdzTWFuYWdlciggYXBwICkKQEAgLTE2NCw3ICsxNjUsNyBA QAogICAgICAgICAgICAgZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLmFkZF9pdGVtX2Fubm90 YXRpb24oIHRyYW5zLnNhX3Nlc3M9CmlvbiwgdHJhbnMuZ2V0X3VzZXIoKSwgZGF0YXNldF9jb2xs ZWN0aW9uX2luc3RhbmNlLCBuZXdfZGF0YVsgJ2Fubm90YXRpb24nID0KXSApCiAgICAgICAgICAg ICBjaGFuZ2VkWyAnYW5ub3RhdGlvbicgXSA9M0QgbmV3X2RhdGFbICdhbm5vdGF0aW9uJyBdCiAg ICAgICAgIGlmICd0YWdzJyBpbiBuZXdfZGF0YS5rZXlzKCkgYW5kIHRyYW5zLmdldF91c2VyKCk6 Ci0gICAgICAgICAgICBzZWxmLnRhZ19tYW5hZ2VyLnNldF90YWdzX2Zyb21fbGlzdCggdHJhbnMs IGRhdGFzZXRfY29sbGVjdGlvbj0KX2luc3RhbmNlLCBuZXdfZGF0YVsgJ3RhZ3MnIF0sIHVzZXI9 M0R0cmFucy51c2VyICkKKyAgICAgICAgICAgIHNlbGYudGFnX21hbmFnZXIuc2V0X3RhZ3NfZnJv bV9saXN0KCB0cmFucy5nZXRfdXNlcigpLCBkYXRhc2V0PQpfY29sbGVjdGlvbl9pbnN0YW5jZSwg bmV3X2RhdGFbICd0YWdzJyBdICkKPTIwCiAgICAgICAgIGlmIGNoYW5nZWQua2V5cygpOgogICAg ICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCgpkaWZmIC1yIDhlYjZkOGIwYmYxMGFk MWFkNWI2OWY5ZGE4N2Q4ZDAwOTNiOTcyZjEgLXIgMDk0MjA1YjQ1MWFhY2VmNzc3YzBhZjI9CjAw NTQyYTZjODFlYjNlZjBjIGxpYi9nYWxheHkvbWFuYWdlcnMvdGFncy5weQotLS0gYS9saWIvZ2Fs YXh5L21hbmFnZXJzL3RhZ3MucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy90YWdzLnB5CkBA IC0xLDIxICsxLDMxNyBAQAotIiIiCi0iIiIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKPTIw Ci1jbGFzcyBUYWdzTWFuYWdlciggb2JqZWN0ICk6Ci0gICAgIiIiIE1hbmFnZXMgQ1JVRCBvcGVy YXRpb25zIHJlbGF0ZWQgdG8gdGFnZ2luZyBvYmplY3RzLgorZnJvbSBzcWxhbGNoZW15LnNxbCBp bXBvcnQgc2VsZWN0Citmcm9tIHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24gaW1wb3J0IGZ1bmMK KworbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQorCisKKyMgSXRlbS1zcGVj aWZpYyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcGVyZm9ybSB0YWdnaW5nLgorY2xhc3MgSXRlbVRh Z0Fzc29jSW5mbyggb2JqZWN0ICk6CisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBpdGVtX2NsYXNz LCB0YWdfYXNzb2NfY2xhc3MsIGl0ZW1faWRfY29sICk6CisgICAgICAgIHNlbGYuaXRlbV9jbGFz cyA9M0QgaXRlbV9jbGFzcworICAgICAgICBzZWxmLnRhZ19hc3NvY19jbGFzcyA9M0QgdGFnX2Fz c29jX2NsYXNzCisgICAgICAgIHNlbGYuaXRlbV9pZF9jb2wgPTNEIGl0ZW1faWRfY29sCisKKwor Y2xhc3MgVGFnTWFuYWdlciggb2JqZWN0ICk6CisgICAgIiIiCisgICAgTWFuYWdlcyBDUlVEIG9w ZXJhdGlvbnMgcmVsYXRlZCB0byB0YWdnaW5nIG9iamVjdHMuCiAgICAgIiIiCj0yMAogICAgIGRl ZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHNlbGYuYXBwID0zRCBhcHAKLSAgICAg ICAgc2VsZi50YWdfaGFuZGxlciA9M0QgYXBwLnRhZ19oYW5kbGVyCisgICAgICAgICMgTWluaW11 bSB0YWcgbGVuZ3RoLgorICAgICAgICBzZWxmLm1pbl90YWdfbGVuID0zRCAyCisgICAgICAgICMg TWF4aW11bSB0YWcgbGVuZ3RoLgorICAgICAgICBzZWxmLm1heF90YWdfbGVuID0zRCAyNTUKKyAg ICAgICAgIyBUYWcgc2VwYXJhdG9yLgorICAgICAgICBzZWxmLnRhZ19zZXBhcmF0b3JzID0zRCAn LDsnCisgICAgICAgICMgSGllcmFyY2h5IHNlcGFyYXRvci4KKyAgICAgICAgc2VsZi5oaWVyYXJj aHlfc2VwYXJhdG9yID0zRCAnLicKKyAgICAgICAgIyBLZXktdmFsdWUgc2VwYXJhdG9yLgorICAg ICAgICBzZWxmLmtleV92YWx1ZV9zZXBhcmF0b3JzID0zRCAiPTNEOiIKKyAgICAgICAgIyBJbml0 aWFsaXplIHdpdGgga25vd24gY2xhc3NlcyAtIGFkZCB0byB0aGlzIGluIHN1YmNsYXNzZXMuCisg ICAgICAgIHNlbGYuaXRlbV90YWdfYXNzb2NfaW5mbyA9M0Qge30KPTIwCi0gICAgZGVmIHNldF90 YWdzX2Zyb21fbGlzdCggc2VsZiwgdHJhbnMsIGl0ZW0sIG5ld190YWdzX2xpc3QsIHVzZXI9M0RO b25lID0KKToKLSAgICAgICAgI3ByZWNvbmRpdGlvbjogaXRlbSBpcyBhbHJlYWR5IHNlY3VyaXR5 IGNoZWNrZWQgYWdhaW5zdCB1c2VyCi0gICAgICAgICNwcmVjb25kaXRpb246IGluY29taW5nIHRh Z3MgaXMgYSBsaXN0IG9mIHNhbml0aXplZC9mb3JtYXR0ZWQgc3RyaT0KbmdzCi0gICAgICAgIHVz ZXIgPTNEIHVzZXIgb3IgdHJhbnMudXNlcgorICAgIGRlZiBzZXRfdGFnc19mcm9tX2xpc3QoIHNl bGYsIHVzZXIsIGl0ZW0sIG5ld190YWdzX2xpc3QgKToKKyAgICAgICAgIyBwcmVjb25kaXRpb246 IGl0ZW0gaXMgYWxyZWFkeSBzZWN1cml0eSBjaGVja2VkIGFnYWluc3QgdXNlcgorICAgICAgICAj IHByZWNvbmRpdGlvbjogaW5jb21pbmcgdGFncyBpcyBhIGxpc3Qgb2Ygc2FuaXRpemVkL2Zvcm1h dHRlZCBzdHI9CmluZ3MKPTIwCi0gICAgICAgIHNlbGYudGFnX2hhbmRsZXIuZGVsZXRlX2l0ZW1f dGFncyggdHJhbnMsIHVzZXIsIGl0ZW0gKQorICAgICAgICBzZWxmLmRlbGV0ZV9pdGVtX3RhZ3Mo IHVzZXIsIGl0ZW0gKQogICAgICAgICBuZXdfdGFnc19zdHIgPTNEICcsJy5qb2luKCBuZXdfdGFn c19saXN0ICkKLSAgICAgICAgc2VsZi50YWdfaGFuZGxlci5hcHBseV9pdGVtX3RhZ3MoIHRyYW5z LCB1c2VyLCBpdGVtLCB1bmljb2RlKCBuZXdfPQp0YWdzX3N0ci5lbmNvZGUoICd1dGYtOCcgKSwg J3V0Zi04JyApICkKLSAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHNl bGYuYXBwbHlfaXRlbV90YWdzKCB1c2VyLCBpdGVtLCB1bmljb2RlKCBuZXdfdGFnc19zdHIuZW5j b2RlKCAndT0KdGYtOCcgKSwgJ3V0Zi04JyApICkKKyAgICAgICAgc2VsZi5hcHAubW9kZWwuY29u dGV4dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiBpdGVtLnRhZ3MKKworICAgIGRlZiBnZXRfdGFn X2Fzc29jX2NsYXNzKCBzZWxmLCBpdGVtX2NsYXNzICk6CisgICAgICAgICIiIlJldHVybnMgdGFn IGFzc29jaWF0aW9uIGNsYXNzIGZvciBpdGVtIGNsYXNzLiIiIgorICAgICAgICByZXR1cm4gc2Vs Zi5pdGVtX3RhZ19hc3NvY19pbmZvW2l0ZW1fY2xhc3MuX19uYW1lX19dLnRhZ19hc3NvY19jbGE9 CnNzCisKKyAgICBkZWYgZ2V0X2lkX2NvbF9pbl9pdGVtX3RhZ19hc3NvY190YWJsZSggc2VsZiwg aXRlbV9jbGFzcyApOgorICAgICAgICAiIiJSZXR1cm5zIGl0ZW0gaWQgY29sdW1uIGluIGNsYXNz JyBpdGVtLXRhZyBhc3NvY2lhdGlvbiB0YWJsZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaXRl bV90YWdfYXNzb2NfaW5mb1tpdGVtX2NsYXNzLl9fbmFtZV9fXS5pdGVtX2lkX2NvbAorCisgICAg ZGVmIGdldF9jb21tdW5pdHlfdGFncyggc2VsZiwgaXRlbT0zRE5vbmUsIGxpbWl0PTNETm9uZSAp OgorICAgICAgICAiIiJSZXR1cm5zIGNvbW11bml0eSB0YWdzIGZvciBhbiBpdGVtLiIiIgorICAg ICAgICAjIEdldCBpdGVtLXRhZyBhc3NvY2lhdGlvbiBjbGFzcy4KKyAgICAgICAgaXRlbV9jbGFz cyA9M0QgaXRlbS5fX2NsYXNzX18KKyAgICAgICAgaXRlbV90YWdfYXNzb2NfY2xhc3MgPTNEIHNl bGYuZ2V0X3RhZ19hc3NvY19jbGFzcyggaXRlbV9jbGFzcyApCisgICAgICAgIGlmIG5vdCBpdGVt X3RhZ19hc3NvY19jbGFzczoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICAjIEJ1aWxk IHNlbGVjdCBzdGF0ZW1lbnQuCisgICAgICAgIGNvbHNfdG9fc2VsZWN0ID0zRCBbIGl0ZW1fdGFn X2Fzc29jX2NsYXNzLnRhYmxlLmMudGFnX2lkLCBmdW5jLmNvdT0KbnQoICcqJyApIF0KKyAgICAg ICAgZnJvbV9vYmogPTNEIGl0ZW1fdGFnX2Fzc29jX2NsYXNzLnRhYmxlLmpvaW4oIGl0ZW1fY2xh c3MudGFibGUgKS5qPQpvaW4oIHNlbGYuYXBwLm1vZGVsLlRhZy50YWJsZSApCisgICAgICAgIHdo ZXJlX2NsYXVzZSA9M0QgKCBzZWxmLmdldF9pZF9jb2xfaW5faXRlbV90YWdfYXNzb2NfdGFibGUo IGl0ZW1fYz0KbGFzcyApID0zRD0zRCBpdGVtLmlkICkKKyAgICAgICAgb3JkZXJfYnkgPTNEIFsg ZnVuYy5jb3VudCggIioiICkuZGVzYygpIF0KKyAgICAgICAgZ3JvdXBfYnkgPTNEIGl0ZW1fdGFn X2Fzc29jX2NsYXNzLnRhYmxlLmMudGFnX2lkCisgICAgICAgICMgRG8gcXVlcnkgYW5kIGdldCBy ZXN1bHQgc2V0LgorICAgICAgICBxdWVyeSA9M0Qgc2VsZWN0KCBjb2x1bW5zPTNEY29sc190b19z ZWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX29iaj0zRGZyb21fb2JqLAorICAg ICAgICAgICAgICAgICAgICAgICAgd2hlcmVjbGF1c2U9M0R3aGVyZV9jbGF1c2UsCisgICAgICAg ICAgICAgICAgICAgICAgICBncm91cF9ieT0zRGdyb3VwX2J5LAorICAgICAgICAgICAgICAgICAg ICAgICAgb3JkZXJfYnk9M0RvcmRlcl9ieSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0 PTNEbGltaXQgKQorICAgICAgICByZXN1bHRfc2V0ID0zRCBzZWxmLmFwcC5tb2RlbC5jb250ZXh0 LmV4ZWN1dGUoIHF1ZXJ5ICkKKyAgICAgICAgIyBSZXR1cm4gY29tbXVuaXR5IHRhZ3MuCisgICAg ICAgIGNvbW11bml0eV90YWdzID0zRCBbXQorICAgICAgICBmb3Igcm93IGluIHJlc3VsdF9zZXQ6 CisgICAgICAgICAgICB0YWdfaWQgPTNEIHJvd1swXQorICAgICAgICAgICAgY29tbXVuaXR5X3Rh Z3MuYXBwZW5kKCBzZWxmLmdldF90YWdfYnlfaWQoIHRhZ19pZCApICkKKyAgICAgICAgcmV0dXJu IGNvbW11bml0eV90YWdzCisKKyAgICBkZWYgZ2V0X3Rvb2xfdGFncyggc2VsZiApOgorICAgICAg ICByZXN1bHRfc2V0ID0zRCBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmV4ZWN1dGUoIHNlbGVjdCgg Y29sdW1ucz0zRFs9CiBzZWxmLmFwcC5tb2RlbC5Ub29sVGFnQXNzb2NpYXRpb24udGFibGUuYy50 YWdfaWQgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmcm9tX29iaj0zRHNlPQpsZi5hcHAubW9kZWwuVG9vbFRhZ0Fzc29jaWF0 aW9uLnRhYmxlICkuZGlzdGluY3QoKSApCisKKyAgICAgICAgdGFncyA9M0QgW10KKyAgICAgICAg Zm9yIHJvdyBpbiByZXN1bHRfc2V0OgorICAgICAgICAgICAgdGFnX2lkID0zRCByb3dbMF0KKyAg ICAgICAgICAgIHRhZ3MuYXBwZW5kKCBzZWxmLmdldF90YWdfYnlfaWQoIHRhZ19pZCApICkKKyAg ICAgICAgcmV0dXJuIHRhZ3MKKworICAgIGRlZiByZW1vdmVfaXRlbV90YWcoIHNlbGYsIHVzZXIs IGl0ZW0sIHRhZ19uYW1lICk6CisgICAgICAgICIiIlJlbW92ZSBhIHRhZyBmcm9tIGFuIGl0ZW0u IiIiCisgICAgICAgICMgR2V0IGl0ZW0gdGFnIGFzc29jaWF0aW9uLgorICAgICAgICBpdGVtX3Rh Z19hc3NvYyA9M0Qgc2VsZi5fZ2V0X2l0ZW1fdGFnX2Fzc29jKCB1c2VyLCBpdGVtLCB0YWdfbmFt ZSApCisgICAgICAgICMgUmVtb3ZlIGFzc29jaWF0aW9uLgorICAgICAgICBpZiBpdGVtX3RhZ19h c3NvYzoKKyAgICAgICAgICAgICMgRGVsZXRlIGFzc29jaWF0aW9uLgorICAgICAgICAgICAgc2Vs Zi5hcHAubW9kZWwuY29udGV4dC5kZWxldGUoIGl0ZW1fdGFnX2Fzc29jICkKKyAgICAgICAgICAg IGl0ZW0udGFncy5yZW1vdmUoIGl0ZW1fdGFnX2Fzc29jICkKKyAgICAgICAgICAgIHJldHVybiBU cnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRlbGV0ZV9pdGVtX3RhZ3MoIHNl bGYsIHVzZXIsIGl0ZW0gKToKKyAgICAgICAgIiIiRGVsZXRlIHRhZ3MgZnJvbSBhbiBpdGVtLiIi IgorICAgICAgICAjIERlbGV0ZSBpdGVtLXRhZyBhc3NvY2lhdGlvbnMuCisgICAgICAgIGZvciB0 YWcgaW4gaXRlbS50YWdzOgorICAgICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5kZWxl dGUoIHRhZyApCisgICAgICAgICMgRGVsZXRlIHRhZ3MgZnJvbSBpdGVtLgorICAgICAgICBkZWwg aXRlbS50YWdzWzpdCisKKyAgICBkZWYgaXRlbV9oYXNfdGFnKCBzZWxmLCB1c2VyLCBpdGVtLCB0 YWcgKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgaGFzIGEgZ2l2ZW4gdGFn LiIiIgorICAgICAgICAjIEdldCB0YWcgbmFtZS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSggdGFn LCBiYXNlc3RyaW5nICk6CisgICAgICAgICAgICB0YWdfbmFtZSA9M0QgdGFnCisgICAgICAgIGVs aWYgaXNpbnN0YW5jZSggdGFnLCBzZWxmLmFwcC5tb2RlbC5UYWcgKToKKyAgICAgICAgICAgIHRh Z19uYW1lID0zRCB0YWcubmFtZQorICAgICAgICAjIENoZWNrIGZvciBhbiBpdGVtLXRhZyBhc3Nv Y2lhdGlvbiB0byBzZWUgaWYgaXRlbSBoYXMgYSBnaXZlbiB0YWcuCisgICAgICAgIGl0ZW1fdGFn X2Fzc29jID0zRCBzZWxmLl9nZXRfaXRlbV90YWdfYXNzb2MoIHVzZXIsIGl0ZW0sIHRhZ19uYW1l ICkKKyAgICAgICAgaWYgaXRlbV90YWdfYXNzb2M6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQor ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhcHBseV9pdGVtX3RhZyggc2VsZiwgdXNl ciwgaXRlbSwgbmFtZSwgdmFsdWU9M0ROb25lICk6CisgICAgICAgICMgVXNlIGxvd2VyY2FzZSBu YW1lIGZvciBzZWFyY2hpbmcvY3JlYXRpbmcgdGFnLgorICAgICAgICBsY19uYW1lID0zRCBuYW1l Lmxvd2VyKCkKKyAgICAgICAgIyBHZXQgb3IgY3JlYXRlIGl0ZW0tdGFnIGFzc29jaWF0aW9uLgor ICAgICAgICBpdGVtX3RhZ19hc3NvYyA9M0Qgc2VsZi5fZ2V0X2l0ZW1fdGFnX2Fzc29jKCB1c2Vy LCBpdGVtLCBsY19uYW1lICkKKyAgICAgICAgaWYgbm90IGl0ZW1fdGFnX2Fzc29jOgorICAgICAg ICAgICAgIyBDcmVhdGUgaXRlbS10YWcgYXNzb2NpYXRpb24uCisgICAgICAgICAgICAjIENyZWF0 ZSB0YWc7IGlmIE5vbmUsIHNraXAgdGhlIHRhZyAoYW5kIGxvZyBlcnJvcikuCisgICAgICAgICAg ICB0YWcgPTNEIHNlbGYuX2dldF9vcl9jcmVhdGVfdGFnKCBsY19uYW1lICkKKyAgICAgICAgICAg IGlmIG5vdCB0YWc6CisgICAgICAgICAgICAgICAgbG9nLndhcm4oICJGYWlsZWQgdG8gY3JlYXRl IHRhZyB3aXRoIG5hbWUgJXMiICUgbGNfbmFtZSApCisgICAgICAgICAgICAgICAgcmV0dXJuCisg ICAgICAgICAgICAjIENyZWF0ZSB0YWcgYXNzb2NpYXRpb24gYmFzZWQgb24gaXRlbSBjbGFzcy4K KyAgICAgICAgICAgIGl0ZW1fdGFnX2Fzc29jX2NsYXNzID0zRCBzZWxmLmdldF90YWdfYXNzb2Nf Y2xhc3MoIGl0ZW0uX19jbGFzPQpzX18gKQorICAgICAgICAgICAgaXRlbV90YWdfYXNzb2MgPTNE IGl0ZW1fdGFnX2Fzc29jX2NsYXNzKCkKKyAgICAgICAgICAgICMgQWRkIHRhZyB0byBhc3NvY2lh dGlvbi4KKyAgICAgICAgICAgIGl0ZW0udGFncy5hcHBlbmQoIGl0ZW1fdGFnX2Fzc29jICkKKyAg ICAgICAgICAgIGl0ZW1fdGFnX2Fzc29jLnRhZyA9M0QgdGFnCisgICAgICAgICAgICBpdGVtX3Rh Z19hc3NvYy51c2VyID0zRCB1c2VyCisgICAgICAgICMgQXBwbHkgYXR0cmlidXRlcyB0byBpdGVt LXRhZyBhc3NvY2lhdGlvbi4gU3RyaXAgd2hpdGVzcGFjZSBmcm9tID0KdXNlciBuYW1lIGFuZCB0 YWcuCisgICAgICAgIGxjX3ZhbHVlID0zRCBOb25lCisgICAgICAgIGlmIHZhbHVlOgorICAgICAg ICAgICAgbGNfdmFsdWUgPTNEIHZhbHVlLmxvd2VyKCkKKyAgICAgICAgaXRlbV90YWdfYXNzb2Mu dXNlcl90bmFtZSA9M0QgbmFtZQorICAgICAgICBpdGVtX3RhZ19hc3NvYy51c2VyX3ZhbHVlID0z RCB2YWx1ZQorICAgICAgICBpdGVtX3RhZ19hc3NvYy52YWx1ZSA9M0QgbGNfdmFsdWUKKyAgICAg ICAgcmV0dXJuIGl0ZW1fdGFnX2Fzc29jCisKKyAgICBkZWYgYXBwbHlfaXRlbV90YWdzKCBzZWxm LCB1c2VyLCBpdGVtLCB0YWdzX3N0ciApOgorICAgICAgICAiIiJBcHBseSB0YWdzIHRvIGFuIGl0 ZW0uIiIiCisgICAgICAgICMgUGFyc2UgdGFncy4KKyAgICAgICAgcGFyc2VkX3RhZ3MgPTNEIHNl bGYucGFyc2VfdGFncyggdGFnc19zdHIgKQorICAgICAgICAjIEFwcGx5IGVhY2ggdGFnLgorICAg ICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcGFyc2VkX3RhZ3MuaXRlbXMoKToKKyAgICAgICAgICAg IHNlbGYuYXBwbHlfaXRlbV90YWcoIHVzZXIsIGl0ZW0sIG5hbWUsIHZhbHVlICkKKworICAgIGRl ZiBnZXRfdGFnc19zdHIoIHNlbGYsIHRhZ3MgKToKKyAgICAgICAgIiIiQnVpbGQgYSBzdHJpbmcg ZnJvbSBhbiBpdGVtJ3MgdGFncy4iIiIKKyAgICAgICAgIyBSZXR1cm4gZW1wdHkgc3RyaW5nIGlm IHRoZXJlIGFyZSBubyB0YWdzLgorICAgICAgICBpZiBub3QgdGFnczoKKyAgICAgICAgICAgIHJl dHVybiAiIgorICAgICAgICAjIENyZWF0ZSBzdHJpbmcgb2YgdGFncy4KKyAgICAgICAgdGFnc19z dHJfbGlzdCA9M0QgbGlzdCgpCisgICAgICAgIGZvciB0YWcgaW4gdGFnczoKKyAgICAgICAgICAg IHRhZ19zdHIgPTNEIHRhZy51c2VyX3RuYW1lCisgICAgICAgICAgICBpZiB0YWcudmFsdWUgaXMg bm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGFnX3N0ciArPTNEICI6IiArIHRhZy51c2VyX3Zh bHVlCisgICAgICAgICAgICB0YWdzX3N0cl9saXN0LmFwcGVuZCggdGFnX3N0ciApCisgICAgICAg IHJldHVybiAiLCAiLmpvaW4oIHRhZ3Nfc3RyX2xpc3QgKQorCisgICAgZGVmIGdldF90YWdfYnlf aWQoIHNlbGYsIHRhZ19pZCApOgorICAgICAgICAiIiJHZXQgYSBUYWcgb2JqZWN0IGZyb20gYSB0 YWcgaWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LnF1ZXJ5KCBz ZWxmLmFwcC5tb2RlbC5UYWcgKS5maWx0ZXJfYj0KeSggaWQ9M0R0YWdfaWQgKS5maXJzdCgpCisK KyAgICBkZWYgZ2V0X3RhZ19ieV9uYW1lKCBzZWxmLCB0YWdfbmFtZSApOgorICAgICAgICAiIiJH ZXQgYSBUYWcgb2JqZWN0IGZyb20gYSB0YWcgbmFtZSAoc3RyaW5nKS4iIiIKKyAgICAgICAgaWYg dGFnX25hbWU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hcHAubW9kZWwuY29udGV4dC5xdWVy eSggc2VsZi5hcHAubW9kZWwuVGFnICkuZmlsdD0KZXJfYnkoIG5hbWU9M0R0YWdfbmFtZS5sb3dl cigpICkuZmlyc3QoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9jcmVhdGVfdGFn KCBzZWxmLCB0YWdfc3RyICk6CisgICAgICAgICIiIkNyZWF0ZSBhIFRhZyBvYmplY3QgZnJvbSBh IHRhZyBzdHJpbmcuIiIiCisgICAgICAgIHRhZ19oaWVyYXJjaHkgPTNEIHRhZ19zdHIuc3BsaXQo IHNlbGYuaGllcmFyY2h5X3NlcGFyYXRvciApCisgICAgICAgIHRhZ19wcmVmaXggPTNEICIiCisg ICAgICAgIHBhcmVudF90YWcgPTNEIE5vbmUKKyAgICAgICAgZm9yIHN1Yl90YWcgaW4gdGFnX2hp ZXJhcmNoeToKKyAgICAgICAgICAgICMgR2V0IG9yIGNyZWF0ZSBzdWJ0YWcuCisgICAgICAgICAg ICB0YWdfbmFtZSA9M0QgdGFnX3ByZWZpeCArIHNlbGYuX3NjcnViX3RhZ19uYW1lKCBzdWJfdGFn ICkKKyAgICAgICAgICAgIHRhZyA9M0Qgc2VsZi5hcHAubW9kZWwuY29udGV4dC5xdWVyeSggc2Vs Zi5hcHAubW9kZWwuVGFnICkuZmlsPQp0ZXJfYnkoIG5hbWU9M0R0YWdfbmFtZSkuZmlyc3QoKQor ICAgICAgICAgICAgaWYgbm90IHRhZzoKKyAgICAgICAgICAgICAgICB0YWcgPTNEIHNlbGYuYXBw Lm1vZGVsLlRhZyggdHlwZT0zRDAsIG5hbWU9M0R0YWdfbmFtZSApCisgICAgICAgICAgICAjIFNl dCB0YWcgcGFyZW50LgorICAgICAgICAgICAgdGFnLnBhcmVudCA9M0QgcGFyZW50X3RhZworICAg ICAgICAgICAgIyBVcGRhdGUgcGFyZW50IGFuZCB0YWcgcHJlZml4LgorICAgICAgICAgICAgcGFy ZW50X3RhZyA9M0QgdGFnCisgICAgICAgICAgICB0YWdfcHJlZml4ID0zRCB0YWcubmFtZSArIHNl bGYuaGllcmFyY2h5X3NlcGFyYXRvcgorICAgICAgICByZXR1cm4gdGFnCisKKyAgICBkZWYgX2dl dF9vcl9jcmVhdGVfdGFnKCBzZWxmLCB0YWdfc3RyICk6CisgICAgICAgICIiIkdldCBvciBjcmVh dGUgYSBUYWcgb2JqZWN0IGZyb20gYSB0YWcgc3RyaW5nLiIiIgorICAgICAgICAjIFNjcnViIHRh ZzsgaWYgdGFnIGlzIE5vbmUgYWZ0ZXIgYmVpbmcgc2NydWJiZWQsIHJldHVybiBOb25lLgorICAg ICAgICBzY3J1YmJlZF90YWdfc3RyID0zRCBzZWxmLl9zY3J1Yl90YWdfbmFtZSggdGFnX3N0ciAp CisgICAgICAgIGlmIG5vdCBzY3J1YmJlZF90YWdfc3RyOgorICAgICAgICAgICAgcmV0dXJuIE5v bmUKKyAgICAgICAgIyBHZXQgaXRlbSB0YWcuCisgICAgICAgIHRhZyA9M0Qgc2VsZi5nZXRfdGFn X2J5X25hbWUoIHNjcnViYmVkX3RhZ19zdHIgKQorICAgICAgICAjIENyZWF0ZSB0YWcgaWYgbmVj ZXNzYXJ5LgorICAgICAgICBpZiB0YWcgaXMgTm9uZToKKyAgICAgICAgICAgIHRhZyA9M0Qgc2Vs Zi5fY3JlYXRlX3RhZyggc2NydWJiZWRfdGFnX3N0ciApCisgICAgICAgIHJldHVybiB0YWcKKwor ICAgIGRlZiBfZ2V0X2l0ZW1fdGFnX2Fzc29jKCBzZWxmLCB1c2VyLCBpdGVtLCB0YWdfbmFtZSAp OgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIEl0ZW1UYWdBc3NvY2lhdGlvbiBvYmplY3Qg Zm9yIGEgdXNlciwgaXRlbSwgYW5kIHRhZyBzdHJpbmc7PQogcmV0dXJucyBOb25lIGlmIHRoZXJl IGlzCisgICAgICAgIG5vIHN1Y2ggYXNzb2NpYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBz Y3J1YmJlZF90YWdfbmFtZSA9M0Qgc2VsZi5fc2NydWJfdGFnX25hbWUoIHRhZ19uYW1lICkKKyAg ICAgICAgZm9yIGl0ZW1fdGFnX2Fzc29jIGluIGl0ZW0udGFnczoKKyAgICAgICAgICAgIGlmICgg aXRlbV90YWdfYXNzb2MudXNlciA9M0Q9M0QgdXNlciApIGFuZCAoIGl0ZW1fdGFnX2Fzc29jLnVz PQplcl90bmFtZSA9M0Q9M0Qgc2NydWJiZWRfdGFnX25hbWUgKToKKyAgICAgICAgICAgICAgICBy ZXR1cm4gaXRlbV90YWdfYXNzb2MKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwYXJz ZV90YWdzKCBzZWxmLCB0YWdfc3RyICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEg bGlzdCBvZiByYXcgKHRhZy1uYW1lLCB2YWx1ZSkgcGFpcnMgZGVyaXZlZCBmcm9tIGEgc3RyaW49 Cmc7IG1ldGhvZCBzY3J1YnMgdGFnIG5hbWVzIGFuZCB2YWx1ZXMgYXMgd2VsbC4KKyAgICAgICAg UmV0dXJuIHZhbHVlIGlzIGEgZGljdGlvbmFyeSB3aGVyZSB0YWctbmFtZXMgYXJlIGtleXMuCisg ICAgICAgICIiIgorICAgICAgICAjIEdyYWNlZnVsbHkgaGFuZGxlIE5vbmUuCisgICAgICAgIGlm IG5vdCB0YWdfc3RyOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoKQorICAgICAgICAjIFNwbGl0 IHRhZ3MgYmFzZWQgb24gc2VwYXJhdG9ycy4KKyAgICAgICAgcmVnX2V4cCA9M0QgcmUuY29tcGls ZSggJ1snICsgc2VsZi50YWdfc2VwYXJhdG9ycyArICddJyApCisgICAgICAgIHJhd190YWdzID0z RCByZWdfZXhwLnNwbGl0KCB0YWdfc3RyICkKKyAgICAgICAgIyBFeHRyYWN0IG5hbWUtdmFsdWUg cGFpcnMuCisgICAgICAgIG5hbWVfdmFsdWVfcGFpcnMgPTNEIGRpY3QoKQorICAgICAgICBmb3Ig cmF3X3RhZyBpbiByYXdfdGFnczoKKyAgICAgICAgICAgIG52X3BhaXIgPTNEIHNlbGYuX2dldF9u YW1lX3ZhbHVlX3BhaXIoIHJhd190YWcgKQorICAgICAgICAgICAgc2NydWJiZWRfbmFtZSA9M0Qg c2VsZi5fc2NydWJfdGFnX25hbWUoIG52X3BhaXJbMF0gKQorICAgICAgICAgICAgc2NydWJiZWRf dmFsdWUgPTNEIHNlbGYuX3NjcnViX3RhZ192YWx1ZSggbnZfcGFpclsxXSApCisgICAgICAgICAg ICBuYW1lX3ZhbHVlX3BhaXJzW3NjcnViYmVkX25hbWVdID0zRCBzY3J1YmJlZF92YWx1ZQorICAg ICAgICByZXR1cm4gbmFtZV92YWx1ZV9wYWlycworCisgICAgZGVmIF9zY3J1Yl90YWdfdmFsdWUo IHNlbGYsIHZhbHVlICk6CisgICAgICAgICIiIlNjcnViIGEgdGFnIHZhbHVlLiIiIgorICAgICAg ICAjIEdyYWNlZnVsbHkgaGFuZGxlIE5vbmU6CisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAg ICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgUmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSB2YWx1 ZS4KKyAgICAgICAgcmVnX2V4cCA9M0QgcmUuY29tcGlsZSggJ1xzJyApCisgICAgICAgIHNjcnVi YmVkX3ZhbHVlID0zRCByZS5zdWIoIHJlZ19leHAsICIiLCB2YWx1ZSApCisgICAgICAgIHJldHVy biBzY3J1YmJlZF92YWx1ZQorCisgICAgZGVmIF9zY3J1Yl90YWdfbmFtZSggc2VsZiwgbmFtZSAp OgorICAgICAgICAiIiJTY3J1YiBhIHRhZyBuYW1lLiIiIgorICAgICAgICAjIEdyYWNlZnVsbHkg aGFuZGxlIE5vbmU6CisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgcmV0dXJuIE5v bmUKKyAgICAgICAgIyBSZW1vdmUgd2hpdGVzcGFjZSBmcm9tIG5hbWUuCisgICAgICAgIHJlZ19l eHAgPTNEIHJlLmNvbXBpbGUoICdccycgKQorICAgICAgICBzY3J1YmJlZF9uYW1lID0zRCByZS5z dWIoIHJlZ19leHAsICIiLCBuYW1lICkKKyAgICAgICAgIyBJZ25vcmUgc3RhcnRpbmcgJzonIGNo YXIuCisgICAgICAgIGlmIHNjcnViYmVkX25hbWUuc3RhcnRzd2l0aCggc2VsZi5oaWVyYXJjaHlf c2VwYXJhdG9yICk6CisgICAgICAgICAgICBzY3J1YmJlZF9uYW1lID0zRCBzY3J1YmJlZF9uYW1l WzE6XQorICAgICAgICAjIElmIG5hbWUgaXMgdG9vIHNob3J0IG9yIHRvbyBsb25nLCByZXR1cm4g Tm9uZS4KKyAgICAgICAgaWYgbGVuKCBzY3J1YmJlZF9uYW1lICkgPCBzZWxmLm1pbl90YWdfbGVu IG9yIGxlbiggc2NydWJiZWRfbmFtZSApPQogPiBzZWxmLm1heF90YWdfbGVuOgorICAgICAgICAg ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNjcnViYmVkX25hbWUKKworICAgIGRlZiBf c2NydWJfdGFnX25hbWVfbGlzdCggc2VsZiwgdGFnX25hbWVfbGlzdCApOgorICAgICAgICAiIiJT Y3J1YiBhIHRhZyBuYW1lIGxpc3QuIiIiCisgICAgICAgIHNjcnViYmVkX3RhZ19saXN0ID0zRCBs aXN0KCkKKyAgICAgICAgZm9yIHRhZyBpbiB0YWdfbmFtZV9saXN0OgorICAgICAgICAgICAgc2Ny dWJiZWRfdGFnX2xpc3QuYXBwZW5kKCBzZWxmLl9zY3J1Yl90YWdfbmFtZSggdGFnICkgKQorICAg ICAgICByZXR1cm4gc2NydWJiZWRfdGFnX2xpc3QKKworICAgIGRlZiBfZ2V0X25hbWVfdmFsdWVf cGFpciggc2VsZiwgdGFnX3N0ciApOgorICAgICAgICAiIiJHZXQgbmFtZSwgdmFsdWUgcGFpciBm cm9tIGEgdGFnIHN0cmluZy4iIiIKKyAgICAgICAgIyBVc2UgcmVndWxhciBleHByZXNzaW9uIHRv IHBhcnNlIG5hbWUsIHZhbHVlLgorICAgICAgICByZWdfZXhwID0zRCByZS5jb21waWxlKCAiWyIg KyBzZWxmLmtleV92YWx1ZV9zZXBhcmF0b3JzICsgIl0iICkKKyAgICAgICAgbmFtZV92YWx1ZV9w YWlyID0zRCByZWdfZXhwLnNwbGl0KCB0YWdfc3RyICkKKyAgICAgICAgIyBBZGQgZW1wdHkgc2xv dCBpZiB0YWcgZG9lcyBub3QgaGF2ZSB2YWx1ZS4KKyAgICAgICAgaWYgbGVuKCBuYW1lX3ZhbHVl X3BhaXIgKSA8IDI6CisgICAgICAgICAgICBuYW1lX3ZhbHVlX3BhaXIuYXBwZW5kKCBOb25lICkK KyAgICAgICAgcmV0dXJuIG5hbWVfdmFsdWVfcGFpcgorCisKK2NsYXNzIEdhbGF4eVRhZ01hbmFn ZXIoIFRhZ01hbmFnZXIgKToKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAg ICBmcm9tIGdhbGF4eSBpbXBvcnQgbW9kZWwKKyAgICAgICAgVGFnTWFuYWdlci5fX2luaXRfXygg c2VsZiwgYXBwICkKKyAgICAgICAgc2VsZi5pdGVtX3RhZ19hc3NvY19pbmZvWyJIaXN0b3J5Il0g PTNEIEl0ZW1UYWdBc3NvY0luZm8oIG1vZGVsLkhpPQpzdG9yeSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5IaXN0 PQpvcnlUYWdBc3NvY2lhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5IaXN0PQpvcnlUYWdBc3NvY2lhdGlv bi50YWJsZS5jLmhpc3RvcnlfaWQgKQorICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9b Ikhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24iXSA9M0QgXAorICAgICAgICAgICAgSXRlbVRhZ0Fz c29jSW5mbyggbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25UYWdBc3NvY2lh dGlvPQpuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuSGlzdG9yeURhdGFz ZXRBc3NvY2lhdGlvblRhZ0Fzc29jaWF0aW89Cm4udGFibGUuYy5oaXN0b3J5X2RhdGFzZXRfYXNz b2NpYXRpb25faWQgKQorICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9bIlBhZ2UiXSA9 M0QgSXRlbVRhZ0Fzc29jSW5mbyggbW9kZWwuUGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5QYWdlVGFnPQpBc3Nv Y2lhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtb2RlbC5QYWdlVGFnPQpBc3NvY2lhdGlvbi50YWJsZS5jLnBhZ2VfaWQg KQorICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9bIlN0b3JlZFdvcmtmbG93Il0gPTNE IEl0ZW1UYWdBc3NvY0luZm8oIG09Cm9kZWwuU3RvcmVkV29ya2Zsb3csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1vZD0KZWwuU3RvcmVkV29ya2Zsb3dUYWdBc3NvY2lhdGlvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k PQplbC5TdG9yZWRXb3JrZmxvd1RhZ0Fzc29jaWF0aW9uLnRhYmxlLmMuc3RvcmVkX3dvcmtmbG93 X2lkICkKKyAgICAgICAgc2VsZi5pdGVtX3RhZ19hc3NvY19pbmZvWyJWaXN1YWxpemF0aW9uIl0g PTNEIEl0ZW1UYWdBc3NvY0luZm8oIG1vPQpkZWwuVmlzdWFsaXphdGlvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb2RlPQpsLlZpc3VhbGl6YXRpb25UYWdBc3NvY2lhdGlvbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rl PQpsLlZpc3VhbGl6YXRpb25UYWdBc3NvY2lhdGlvbi50YWJsZS5jLnZpc3VhbGl6YXRpb25faWQg KQorCisKK2NsYXNzIENvbW11bml0eVRhZ01hbmFnZXIoIFRhZ01hbmFnZXIpOgorICAgIGRlZiBf X2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIFRhZ01hbmFnZXIuX19pbml0X18oIHNlbGYs IGFwcCApCgpkaWZmIC1yIDhlYjZkOGIwYmYxMGFkMWFkNWI2OWY5ZGE4N2Q4ZDAwOTNiOTcyZjEg LXIgMDk0MjA1YjQ1MWFhY2VmNzc3YzBhZjI9CjAwNTQyYTZjODFlYjNlZjBjIGxpYi9nYWxheHkv dGFncy90YWdfaGFuZGxlci5weQotLS0gYS9saWIvZ2FsYXh5L3RhZ3MvdGFnX2hhbmRsZXIucHkK KysrIGIvbGliL2dhbGF4eS90YWdzL3RhZ19oYW5kbGVyLnB5CkBAIC0xLDMwMSArMCwwIEBACi1p bXBvcnQgcmUKLWltcG9ydCBsb2dnaW5nCi1mcm9tIHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24g aW1wb3J0IGZ1bmMKLWZyb20gc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbiBpbXBvcnQgYW5kXwot ZnJvbSBzcWxhbGNoZW15LnNxbCBpbXBvcnQgc2VsZWN0Ci0KLWxvZyA9M0QgbG9nZ2luZy5nZXRM b2dnZXIoIF9fbmFtZV9fICkKLQotIyBJdGVtLXNwZWNpZmljIGluZm9ybWF0aW9uIG5lZWRlZCB0 byBwZXJmb3JtIHRhZ2dpbmcuCi1jbGFzcyBJdGVtVGFnQXNzb2NJbmZvKCBvYmplY3QgKToKLSAg ICBkZWYgX19pbml0X18oIHNlbGYsIGl0ZW1fY2xhc3MsIHRhZ19hc3NvY19jbGFzcywgaXRlbV9p ZF9jb2wgKToKLSAgICAgICAgc2VsZi5pdGVtX2NsYXNzID0zRCBpdGVtX2NsYXNzCi0gICAgICAg IHNlbGYudGFnX2Fzc29jX2NsYXNzID0zRCB0YWdfYXNzb2NfY2xhc3MKLSAgICAgICAgc2VsZi5p dGVtX2lkX2NvbCA9M0QgaXRlbV9pZF9jb2wKLQotY2xhc3MgVGFnSGFuZGxlciggb2JqZWN0ICk6 Ci0gICAgZGVmIF9faW5pdF9fKCBzZWxmICk6Ci0gICAgICAgICMgTWluaW11bSB0YWcgbGVuZ3Ro LgotICAgICAgICBzZWxmLm1pbl90YWdfbGVuID0zRCAyCi0gICAgICAgICMgTWF4aW11bSB0YWcg bGVuZ3RoLgotICAgICAgICBzZWxmLm1heF90YWdfbGVuID0zRCAyNTUKLSAgICAgICAgIyBUYWcg c2VwYXJhdG9yLgotICAgICAgICBzZWxmLnRhZ19zZXBhcmF0b3JzID0zRCAnLDsnCi0gICAgICAg ICMgSGllcmFyY2h5IHNlcGFyYXRvci4KLSAgICAgICAgc2VsZi5oaWVyYXJjaHlfc2VwYXJhdG9y ID0zRCAnLicKLSAgICAgICAgIyBLZXktdmFsdWUgc2VwYXJhdG9yLgotICAgICAgICBzZWxmLmtl eV92YWx1ZV9zZXBhcmF0b3JzID0zRCAiPTNEOiIKLSAgICAgICAgIyBJbml0aWFsaXplIHdpdGgg a25vd24gY2xhc3NlcyAtIGFkZCB0byB0aGlzIGluIHN1YmNsYXNzZXMuCi0gICAgICAgIHNlbGYu aXRlbV90YWdfYXNzb2NfaW5mbyA9M0Qge30KLQotICAgIGRlZiBnZXRfdGFnX2Fzc29jX2NsYXNz KCBzZWxmLCBpdGVtX2NsYXNzICk6Ci0gICAgICAgICIiIlJldHVybnMgdGFnIGFzc29jaWF0aW9u IGNsYXNzIGZvciBpdGVtIGNsYXNzLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5pdGVtX3RhZ19h c3NvY19pbmZvW2l0ZW1fY2xhc3MuX19uYW1lX19dLnRhZ19hc3NvY19jbGE9CnNzCi0KLSAgICBk ZWYgZ2V0X2lkX2NvbF9pbl9pdGVtX3RhZ19hc3NvY190YWJsZSggc2VsZiwgaXRlbV9jbGFzcyAp OgotICAgICAgICAiIiJSZXR1cm5zIGl0ZW0gaWQgY29sdW1uIGluIGNsYXNzJyBpdGVtLXRhZyBh c3NvY2lhdGlvbiB0YWJsZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuaXRlbV90YWdfYXNzb2Nf aW5mb1tpdGVtX2NsYXNzLl9fbmFtZV9fXS5pdGVtX2lkX2NvbAotCi0gICAgZGVmIGdldF9jb21t dW5pdHlfdGFncyggc2VsZiwgdHJhbnMsIGl0ZW09M0ROb25lLCBsaW1pdD0zRE5vbmUgKToKLSAg ICAgICAgIiIiUmV0dXJucyBjb21tdW5pdHkgdGFncyBmb3IgYW4gaXRlbS4iIiIKLSAgICAgICAg IyBHZXQgaXRlbS10YWcgYXNzb2NpYXRpb24gY2xhc3MuCi0gICAgICAgIGl0ZW1fY2xhc3MgPTNE IGl0ZW0uX19jbGFzc19fCi0gICAgICAgIGl0ZW1fdGFnX2Fzc29jX2NsYXNzID0zRCBzZWxmLmdl dF90YWdfYXNzb2NfY2xhc3MoIGl0ZW1fY2xhc3MgKQotICAgICAgICBpZiBub3QgaXRlbV90YWdf YXNzb2NfY2xhc3M6Ci0gICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgIyBCdWlsZCBzZWxl Y3Qgc3RhdGVtZW50LgotICAgICAgICBjb2xzX3RvX3NlbGVjdCA9M0QgWyBpdGVtX3RhZ19hc3Nv Y19jbGFzcy50YWJsZS5jLnRhZ19pZCwgZnVuYy5jb3U9Cm50KCAnKicgKSBdCi0gICAgICAgIGZy b21fb2JqID0zRCBpdGVtX3RhZ19hc3NvY19jbGFzcy50YWJsZS5qb2luKCBpdGVtX2NsYXNzLnRh YmxlICkuaj0Kb2luKCB0cmFucy5hcHAubW9kZWwuVGFnLnRhYmxlICkKLSAgICAgICAgd2hlcmVf Y2xhdXNlID0zRCAoIHNlbGYuZ2V0X2lkX2NvbF9pbl9pdGVtX3RhZ19hc3NvY190YWJsZSggaXRl bV9jPQpsYXNzICkgPTNEPTNEIGl0ZW0uaWQgKQotICAgICAgICBvcmRlcl9ieSA9M0QgWyBmdW5j LmNvdW50KCAiKiIgKS5kZXNjKCkgXQotICAgICAgICBncm91cF9ieSA9M0QgaXRlbV90YWdfYXNz b2NfY2xhc3MudGFibGUuYy50YWdfaWQKLSAgICAgICAgIyBEbyBxdWVyeSBhbmQgZ2V0IHJlc3Vs dCBzZXQuCi0gICAgICAgIHF1ZXJ5ID0zRCBzZWxlY3QoIGNvbHVtbnM9M0Rjb2xzX3RvX3NlbGVj dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fb2JqPTNEZnJvbV9vYmosCi0gICAgICAg ICAgICAgICAgICAgICAgICB3aGVyZWNsYXVzZT0zRHdoZXJlX2NsYXVzZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGdyb3VwX2J5PTNEZ3JvdXBfYnksCi0gICAgICAgICAgICAgICAgICAgICAg ICBvcmRlcl9ieT0zRG9yZGVyX2J5LAotICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9M0Rs aW1pdCApCi0gICAgICAgIHJlc3VsdF9zZXQgPTNEIHRyYW5zLnNhX3Nlc3Npb24uZXhlY3V0ZSgg cXVlcnkgKQotICAgICAgICAjIFJldHVybiBjb21tdW5pdHkgdGFncy4KLSAgICAgICAgY29tbXVu aXR5X3RhZ3MgPTNEIFtdCi0gICAgICAgIGZvciByb3cgaW4gcmVzdWx0X3NldDoKLSAgICAgICAg ICAgIHRhZ19pZCA9M0Qgcm93WzBdCi0gICAgICAgICAgICBjb21tdW5pdHlfdGFncy5hcHBlbmQo IHNlbGYuZ2V0X3RhZ19ieV9pZCggdHJhbnMsIHRhZ19pZCApICkKLSAgICAgICAgcmV0dXJuIGNv bW11bml0eV90YWdzCi0KLSAgICBkZWYgZ2V0X3Rvb2xfdGFncyggc2VsZiwgdHJhbnMgKToKLSAg ICAgICAgcmVzdWx0X3NldCA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5leGVjdXRlKCBzZWxlY3QoIGNv bHVtbnM9M0RbIHRyYW5zPQouYXBwLm1vZGVsLlRvb2xUYWdBc3NvY2lhdGlvbi50YWJsZS5jLnRh Z19pZCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyb21fb2JqPTNEdHJhbnMuYXA9CnAubW9kZWwuVG9vbFRhZ0Fzc29jaWF0aW9uLnRh YmxlICkuZGlzdGluY3QoKSApCi0KLSAgICAgICAgdGFncyA9M0QgW10KLSAgICAgICAgZm9yIHJv dyBpbiByZXN1bHRfc2V0OgotICAgICAgICAgICAgdGFnX2lkID0zRCByb3dbMF0KLSAgICAgICAg ICAgIHRhZ3MuYXBwZW5kKCBzZWxmLmdldF90YWdfYnlfaWQoIHRyYW5zLCB0YWdfaWQgKSApCi0g ICAgICAgIHJldHVybiB0YWdzCi0KLSAgICBkZWYgcmVtb3ZlX2l0ZW1fdGFnKCBzZWxmLCB0cmFu cywgdXNlciwgaXRlbSwgdGFnX25hbWUgKToKLSAgICAgICAgIiIiUmVtb3ZlIGEgdGFnIGZyb20g YW4gaXRlbS4iIiIKLSAgICAgICAgIyBHZXQgaXRlbSB0YWcgYXNzb2NpYXRpb24uCi0gICAgICAg IGl0ZW1fdGFnX2Fzc29jID0zRCBzZWxmLl9nZXRfaXRlbV90YWdfYXNzb2MoIHVzZXIsIGl0ZW0s IHRhZ19uYW1lICkKLSAgICAgICAgIyBSZW1vdmUgYXNzb2NpYXRpb24uCi0gICAgICAgIGlmIGl0 ZW1fdGFnX2Fzc29jOgotICAgICAgICAgICAgIyBEZWxldGUgYXNzb2NpYXRpb24uCi0gICAgICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmRlbGV0ZSggaXRlbV90YWdfYXNzb2MgKQotICAgICAgICAg ICAgaXRlbS50YWdzLnJlbW92ZSggaXRlbV90YWdfYXNzb2MgKQotICAgICAgICAgICAgcmV0dXJu IFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgZGVsZXRlX2l0ZW1fdGFncygg c2VsZiwgdHJhbnMsIHVzZXIsIGl0ZW0gKToKLSAgICAgICAgIiIiRGVsZXRlIHRhZ3MgZnJvbSBh biBpdGVtLiIiIgotICAgICAgICAjIERlbGV0ZSBpdGVtLXRhZyBhc3NvY2lhdGlvbnMuCi0gICAg ICAgIGZvciB0YWcgaW4gaXRlbS50YWdzOgotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5k ZWxldGUoIHRhZyApCi0gICAgICAgICMgRGVsZXRlIHRhZ3MgZnJvbSBpdGVtLgotICAgICAgICBk ZWwgaXRlbS50YWdzWzpdCi0KLSAgICBkZWYgaXRlbV9oYXNfdGFnKCBzZWxmLCB0cmFucywgdXNl ciwgaXRlbSwgdGFnICk6Ci0gICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIGhhcyBh IGdpdmVuIHRhZy4iIiIKLSAgICAgICAgIyBHZXQgdGFnIG5hbWUuCi0gICAgICAgIGlmIGlzaW5z dGFuY2UoIHRhZywgYmFzZXN0cmluZyApOgotICAgICAgICAgICAgdGFnX25hbWUgPTNEIHRhZwot ICAgICAgICBlbGlmIGlzaW5zdGFuY2UoIHRhZywgdHJhbnMuYXBwLm1vZGVsLlRhZyApOgotICAg ICAgICAgICAgdGFnX25hbWUgPTNEIHRhZy5uYW1lCi0gICAgICAgICMgQ2hlY2sgZm9yIGFuIGl0 ZW0tdGFnIGFzc29jaWF0aW9uIHRvIHNlZSBpZiBpdGVtIGhhcyBhIGdpdmVuIHRhZy4KLSAgICAg ICAgaXRlbV90YWdfYXNzb2MgPTNEIHNlbGYuX2dldF9pdGVtX3RhZ19hc3NvYyggdXNlciwgaXRl bSwgdGFnX25hbWUgKQotICAgICAgICBpZiBpdGVtX3RhZ19hc3NvYzoKLSAgICAgICAgICAgIHJl dHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIGFwcGx5X2l0ZW1fdGFn KCBzZWxmLCB0cmFucywgdXNlciwgaXRlbSwgbmFtZSwgdmFsdWU9M0ROb25lICk6Ci0gICAgICAg ICMgVXNlIGxvd2VyY2FzZSBuYW1lIGZvciBzZWFyY2hpbmcvY3JlYXRpbmcgdGFnLgotICAgICAg ICBsY19uYW1lID0zRCBuYW1lLmxvd2VyKCkKLSAgICAgICAgIyBHZXQgb3IgY3JlYXRlIGl0ZW0t dGFnIGFzc29jaWF0aW9uLgotICAgICAgICBpdGVtX3RhZ19hc3NvYyA9M0Qgc2VsZi5fZ2V0X2l0 ZW1fdGFnX2Fzc29jKCB1c2VyLCBpdGVtLCBsY19uYW1lICkKLSAgICAgICAgaWYgbm90IGl0ZW1f dGFnX2Fzc29jOgotICAgICAgICAgICAgIyBDcmVhdGUgaXRlbS10YWcgYXNzb2NpYXRpb24uCi0g ICAgICAgICAgICAjIENyZWF0ZSB0YWc7IGlmIE5vbmUsIHNraXAgdGhlIHRhZyAoYW5kIGxvZyBl cnJvcikuCi0gICAgICAgICAgICB0YWcgPTNEIHNlbGYuX2dldF9vcl9jcmVhdGVfdGFnKCB0cmFu cywgbGNfbmFtZSApCi0gICAgICAgICAgICBpZiBub3QgdGFnOgotICAgICAgICAgICAgICAgIGxv Zy53YXJuKCAiRmFpbGVkIHRvIGNyZWF0ZSB0YWcgd2l0aCBuYW1lICVzIiAlIGxjX25hbWUgKQot ICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgIyBDcmVhdGUgdGFnIGFzc29jaWF0 aW9uIGJhc2VkIG9uIGl0ZW0gY2xhc3MuCi0gICAgICAgICAgICBpdGVtX3RhZ19hc3NvY19jbGFz cyA9M0Qgc2VsZi5nZXRfdGFnX2Fzc29jX2NsYXNzKCBpdGVtLl9fY2xhcz0Kc19fICkKLSAgICAg ICAgICAgIGl0ZW1fdGFnX2Fzc29jID0zRCBpdGVtX3RhZ19hc3NvY19jbGFzcygpCi0gICAgICAg ICAgICAjIEFkZCB0YWcgdG8gYXNzb2NpYXRpb24uCi0gICAgICAgICAgICBpdGVtLnRhZ3MuYXBw ZW5kKCBpdGVtX3RhZ19hc3NvYyApCi0gICAgICAgICAgICBpdGVtX3RhZ19hc3NvYy50YWcgPTNE IHRhZwotICAgICAgICAgICAgaXRlbV90YWdfYXNzb2MudXNlciA9M0QgdXNlcgotICAgICAgICAj IEFwcGx5IGF0dHJpYnV0ZXMgdG8gaXRlbS10YWcgYXNzb2NpYXRpb24uIFN0cmlwIHdoaXRlc3Bh Y2UgZnJvbSA9CnVzZXIgbmFtZSBhbmQgdGFnLgotICAgICAgICBsY192YWx1ZSA9M0QgTm9uZQot ICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgIGxjX3ZhbHVlID0zRCB2YWx1ZS5sb3dlcigp Ci0gICAgICAgIGl0ZW1fdGFnX2Fzc29jLnVzZXJfdG5hbWUgPTNEIG5hbWUKLSAgICAgICAgaXRl bV90YWdfYXNzb2MudXNlcl92YWx1ZSA9M0QgdmFsdWUKLSAgICAgICAgaXRlbV90YWdfYXNzb2Mu dmFsdWUgPTNEIGxjX3ZhbHVlCi0gICAgICAgIHJldHVybiBpdGVtX3RhZ19hc3NvYwotCi0gICAg ZGVmIGFwcGx5X2l0ZW1fdGFncyggc2VsZiwgdHJhbnMsIHVzZXIsIGl0ZW0sIHRhZ3Nfc3RyICk6 Ci0gICAgICAgICIiIkFwcGx5IHRhZ3MgdG8gYW4gaXRlbS4iIiIKLSAgICAgICAgIyBQYXJzZSB0 YWdzLgotICAgICAgICBwYXJzZWRfdGFncyA9M0Qgc2VsZi5wYXJzZV90YWdzKCB0YWdzX3N0ciAp Ci0gICAgICAgICMgQXBwbHkgZWFjaCB0YWcuCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBw YXJzZWRfdGFncy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5hcHBseV9pdGVtX3RhZyggdHJh bnMsIHVzZXIsIGl0ZW0sIG5hbWUsIHZhbHVlICkKLQotICAgIGRlZiBnZXRfdGFnc19zdHIoIHNl bGYsIHRhZ3MgKToKLSAgICAgICAgIiIiQnVpbGQgYSBzdHJpbmcgZnJvbSBhbiBpdGVtJ3MgdGFn cy4iIiIKLSAgICAgICAgIyBSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGFyZSBubyB0YWdz LgotICAgICAgICBpZiBub3QgdGFnczoKLSAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICAj IENyZWF0ZSBzdHJpbmcgb2YgdGFncy4KLSAgICAgICAgdGFnc19zdHJfbGlzdCA9M0QgbGlzdCgp Ci0gICAgICAgIGZvciB0YWcgaW4gdGFnczoKLSAgICAgICAgICAgIHRhZ19zdHIgPTNEIHRhZy51 c2VyX3RuYW1lCi0gICAgICAgICAgICBpZiB0YWcudmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAg ICAgICAgICAgdGFnX3N0ciArPTNEICI6IiArIHRhZy51c2VyX3ZhbHVlCi0gICAgICAgICAgICB0 YWdzX3N0cl9saXN0LmFwcGVuZCggdGFnX3N0ciApCi0gICAgICAgIHJldHVybiAiLCAiLmpvaW4o IHRhZ3Nfc3RyX2xpc3QgKQotCi0gICAgZGVmIGdldF90YWdfYnlfaWQoIHNlbGYsIHRyYW5zLCB0 YWdfaWQgKToKLSAgICAgICAgIiIiR2V0IGEgVGFnIG9iamVjdCBmcm9tIGEgdGFnIGlkLiIiIgot ICAgICAgICByZXR1cm4gdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLlRh ZyApLmZpbHRlcl9ieSggaWQ9Cj0zRHRhZ19pZCApLmZpcnN0KCkKLQotICAgIGRlZiBnZXRfdGFn X2J5X25hbWUoIHNlbGYsIHRyYW5zLCB0YWdfbmFtZSApOgotICAgICAgICAiIiJHZXQgYSBUYWcg b2JqZWN0IGZyb20gYSB0YWcgbmFtZSAoc3RyaW5nKS4iIiIKLSAgICAgICAgaWYgdGFnX25hbWU6 Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1v ZGVsLlRhZyApLmZpbHRlcl9ieT0KKCBuYW1lPTNEdGFnX25hbWUubG93ZXIoKSApLmZpcnN0KCkK LSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfY3JlYXRlX3RhZyggc2VsZiwgdHJhbnMs IHRhZ19zdHIgKToKLSAgICAgICAgIiIiQ3JlYXRlIGEgVGFnIG9iamVjdCBmcm9tIGEgdGFnIHN0 cmluZy4iIiIKLSAgICAgICAgdGFnX2hpZXJhcmNoeSA9M0QgdGFnX3N0ci5zcGxpdCggc2VsZi5o aWVyYXJjaHlfc2VwYXJhdG9yICkKLSAgICAgICAgdGFnX3ByZWZpeCA9M0QgIiIKLSAgICAgICAg cGFyZW50X3RhZyA9M0QgTm9uZQotICAgICAgICBmb3Igc3ViX3RhZyBpbiB0YWdfaGllcmFyY2h5 OgotICAgICAgICAgICAgIyBHZXQgb3IgY3JlYXRlIHN1YnRhZy4KLSAgICAgICAgICAgIHRhZ19u YW1lID0zRCB0YWdfcHJlZml4ICsgc2VsZi5fc2NydWJfdGFnX25hbWUoIHN1Yl90YWcgKQotICAg ICAgICAgICAgdGFnID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwu VGFnICkuZmlsdGVyX2I9CnkoIG5hbWU9M0R0YWdfbmFtZSkuZmlyc3QoKQotICAgICAgICAgICAg aWYgbm90IHRhZzoKLSAgICAgICAgICAgICAgICB0YWcgPTNEIHRyYW5zLmFwcC5tb2RlbC5UYWco IHR5cGU9M0QwLCBuYW1lPTNEdGFnX25hbWUgKQotICAgICAgICAgICAgIyBTZXQgdGFnIHBhcmVu dC4KLSAgICAgICAgICAgIHRhZy5wYXJlbnQgPTNEIHBhcmVudF90YWcKLSAgICAgICAgICAgICMg VXBkYXRlIHBhcmVudCBhbmQgdGFnIHByZWZpeC4KLSAgICAgICAgICAgIHBhcmVudF90YWcgPTNE IHRhZwotICAgICAgICAgICAgdGFnX3ByZWZpeCA9M0QgdGFnLm5hbWUgKyBzZWxmLmhpZXJhcmNo eV9zZXBhcmF0b3IKLSAgICAgICAgcmV0dXJuIHRhZwotCi0gICAgZGVmIF9nZXRfb3JfY3JlYXRl X3RhZyggc2VsZiwgdHJhbnMsIHRhZ19zdHIgKToKLSAgICAgICAgIiIiR2V0IG9yIGNyZWF0ZSBh IFRhZyBvYmplY3QgZnJvbSBhIHRhZyBzdHJpbmcuIiIiCi0gICAgICAgICMgU2NydWIgdGFnOyBp ZiB0YWcgaXMgTm9uZSBhZnRlciBiZWluZyBzY3J1YmJlZCwgcmV0dXJuIE5vbmUuCi0gICAgICAg IHNjcnViYmVkX3RhZ19zdHIgPTNEIHNlbGYuX3NjcnViX3RhZ19uYW1lKCB0YWdfc3RyICkKLSAg ICAgICAgaWYgbm90IHNjcnViYmVkX3RhZ19zdHI6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQot ICAgICAgICAjIEdldCBpdGVtIHRhZy4KLSAgICAgICAgdGFnID0zRCBzZWxmLmdldF90YWdfYnlf bmFtZSggdHJhbnMsIHNjcnViYmVkX3RhZ19zdHIgKQotICAgICAgICAjIENyZWF0ZSB0YWcgaWYg bmVjZXNzYXJ5LgotICAgICAgICBpZiB0YWcgaXMgTm9uZToKLSAgICAgICAgICAgIHRhZyA9M0Qg c2VsZi5fY3JlYXRlX3RhZyggdHJhbnMsIHNjcnViYmVkX3RhZ19zdHIgKQotICAgICAgICByZXR1 cm4gdGFnCi0KLSAgICBkZWYgX2dldF9pdGVtX3RhZ19hc3NvYyggc2VsZiwgdXNlciwgaXRlbSwg dGFnX25hbWUgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBJdGVtVGFnQXNzb2NpYXRp b24gb2JqZWN0IGZvciBhIHVzZXIsIGl0ZW0sIGFuZCB0YWcgc3RyaW5nOz0KIHJldHVybnMgTm9u ZSBpZiB0aGVyZSBpcwotICAgICAgICBubyBzdWNoIGFzc29jaWF0aW9uLgotICAgICAgICAiIiIK LSAgICAgICAgc2NydWJiZWRfdGFnX25hbWUgPTNEIHNlbGYuX3NjcnViX3RhZ19uYW1lKCB0YWdf bmFtZSApCi0gICAgICAgIGZvciBpdGVtX3RhZ19hc3NvYyBpbiBpdGVtLnRhZ3M6Ci0gICAgICAg ICAgICBpZiAoIGl0ZW1fdGFnX2Fzc29jLnVzZXIgPTNEPTNEIHVzZXIgKSBhbmQgKCBpdGVtX3Rh Z19hc3NvYy51cz0KZXJfdG5hbWUgPTNEPTNEIHNjcnViYmVkX3RhZ19uYW1lICk6Ci0gICAgICAg ICAgICAgICAgcmV0dXJuIGl0ZW1fdGFnX2Fzc29jCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAg ICBkZWYgcGFyc2VfdGFncyggc2VsZiwgdGFnX3N0ciApOgotICAgICAgICAiIiIKLSAgICAgICAg UmV0dXJucyBhIGxpc3Qgb2YgcmF3ICh0YWctbmFtZSwgdmFsdWUpIHBhaXJzIGRlcml2ZWQgZnJv bSBhIHN0cmluPQpnOyBtZXRob2Qgc2NydWJzIHRhZyBuYW1lcyBhbmQgdmFsdWVzIGFzIHdlbGwu Ci0gICAgICAgIFJldHVybiB2YWx1ZSBpcyBhIGRpY3Rpb25hcnkgd2hlcmUgdGFnLW5hbWVzIGFy ZSBrZXlzLgotICAgICAgICAiIiIKLSAgICAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSBOb25lLgot ICAgICAgICBpZiBub3QgdGFnX3N0cjoKLSAgICAgICAgICAgIHJldHVybiBkaWN0KCkKLSAgICAg ICAgIyBTcGxpdCB0YWdzIGJhc2VkIG9uIHNlcGFyYXRvcnMuCi0gICAgICAgIHJlZ19leHAgPTNE IHJlLmNvbXBpbGUoICdbJyArIHNlbGYudGFnX3NlcGFyYXRvcnMgKyAnXScgKQotICAgICAgICBy YXdfdGFncyA9M0QgcmVnX2V4cC5zcGxpdCggdGFnX3N0ciApCi0gICAgICAgICMgRXh0cmFjdCBu YW1lLXZhbHVlIHBhaXJzLgotICAgICAgICBuYW1lX3ZhbHVlX3BhaXJzID0zRCBkaWN0KCkKLSAg ICAgICAgZm9yIHJhd190YWcgaW4gcmF3X3RhZ3M6Ci0gICAgICAgICAgICBudl9wYWlyID0zRCBz ZWxmLl9nZXRfbmFtZV92YWx1ZV9wYWlyKCByYXdfdGFnICkKLSAgICAgICAgICAgIHNjcnViYmVk X25hbWUgPTNEIHNlbGYuX3NjcnViX3RhZ19uYW1lKCBudl9wYWlyWzBdICkKLSAgICAgICAgICAg IHNjcnViYmVkX3ZhbHVlID0zRCBzZWxmLl9zY3J1Yl90YWdfdmFsdWUoIG52X3BhaXJbMV0gKQot ICAgICAgICAgICAgbmFtZV92YWx1ZV9wYWlyc1tzY3J1YmJlZF9uYW1lXSA9M0Qgc2NydWJiZWRf dmFsdWUKLSAgICAgICAgcmV0dXJuIG5hbWVfdmFsdWVfcGFpcnMKLQotICAgIGRlZiBfc2NydWJf dGFnX3ZhbHVlKCBzZWxmLCB2YWx1ZSApOgotICAgICAgICAiIiJTY3J1YiBhIHRhZyB2YWx1ZS4i IiIKLSAgICAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSBOb25lOgotICAgICAgICBpZiBub3QgdmFs dWU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAjIFJlbW92ZSB3aGl0ZXNwYWNl IGZyb20gdmFsdWUuCi0gICAgICAgIHJlZ19leHAgPTNEIHJlLmNvbXBpbGUoICdccycgKQotICAg ICAgICBzY3J1YmJlZF92YWx1ZSA9M0QgcmUuc3ViKCByZWdfZXhwLCAiIiwgdmFsdWUgKQotICAg ICAgICByZXR1cm4gc2NydWJiZWRfdmFsdWUKLQotICAgIGRlZiBfc2NydWJfdGFnX25hbWUoIHNl bGYsIG5hbWUgKToKLSAgICAgICAgIiIiU2NydWIgYSB0YWcgbmFtZS4iIiIKLSAgICAgICAgIyBH cmFjZWZ1bGx5IGhhbmRsZSBOb25lOgotICAgICAgICBpZiBub3QgbmFtZToKLSAgICAgICAgICAg IHJldHVybiBOb25lCi0gICAgICAgICMgUmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBuYW1lLgotICAg ICAgICByZWdfZXhwID0zRCByZS5jb21waWxlKCAnXHMnICkKLSAgICAgICAgc2NydWJiZWRfbmFt ZSA9M0QgcmUuc3ViKCByZWdfZXhwLCAiIiwgbmFtZSApCi0gICAgICAgICMgSWdub3JlIHN0YXJ0 aW5nICc6JyBjaGFyLgotICAgICAgICBpZiBzY3J1YmJlZF9uYW1lLnN0YXJ0c3dpdGgoIHNlbGYu aGllcmFyY2h5X3NlcGFyYXRvciApOgotICAgICAgICAgICAgc2NydWJiZWRfbmFtZSA9M0Qgc2Ny dWJiZWRfbmFtZVsxOl0KLSAgICAgICAgIyBJZiBuYW1lIGlzIHRvbyBzaG9ydCBvciB0b28gbG9u ZywgcmV0dXJuIE5vbmUuCi0gICAgICAgIGlmIGxlbiggc2NydWJiZWRfbmFtZSApIDwgc2VsZi5t aW5fdGFnX2xlbiBvciBsZW4oIHNjcnViYmVkX25hbWUgKT0KID4gc2VsZi5tYXhfdGFnX2xlbjoK LSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBzY3J1YmJlZF9uYW1lCi0K LSAgICBkZWYgX3NjcnViX3RhZ19uYW1lX2xpc3QoIHNlbGYsIHRhZ19uYW1lX2xpc3QgKToKLSAg ICAgICAgIiIiU2NydWIgYSB0YWcgbmFtZSBsaXN0LiIiIgotICAgICAgICBzY3J1YmJlZF90YWdf bGlzdCA9M0QgbGlzdCgpCi0gICAgICAgIGZvciB0YWcgaW4gdGFnX25hbWVfbGlzdDoKLSAgICAg ICAgICAgIHNjcnViYmVkX3RhZ19saXN0LmFwcGVuZCggc2VsZi5fc2NydWJfdGFnX25hbWUoIHRh ZyApICkKLSAgICAgICAgcmV0dXJuIHNjcnViYmVkX3RhZ19saXN0Ci0KLSAgICBkZWYgX2dldF9u YW1lX3ZhbHVlX3BhaXIoIHNlbGYsIHRhZ19zdHIgKToKLSAgICAgICAgIiIiR2V0IG5hbWUsIHZh bHVlIHBhaXIgZnJvbSBhIHRhZyBzdHJpbmcuIiIiCi0gICAgICAgICMgVXNlIHJlZ3VsYXIgZXhw cmVzc2lvbiB0byBwYXJzZSBuYW1lLCB2YWx1ZS4KLSAgICAgICAgcmVnX2V4cCA9M0QgcmUuY29t cGlsZSggIlsiICsgc2VsZi5rZXlfdmFsdWVfc2VwYXJhdG9ycyArICJdIiApCi0gICAgICAgIG5h bWVfdmFsdWVfcGFpciA9M0QgcmVnX2V4cC5zcGxpdCggdGFnX3N0ciApCi0gICAgICAgICMgQWRk IGVtcHR5IHNsb3QgaWYgdGFnIGRvZXMgbm90IGhhdmUgdmFsdWUuCi0gICAgICAgIGlmIGxlbigg bmFtZV92YWx1ZV9wYWlyICkgPCAyOgotICAgICAgICAgICAgbmFtZV92YWx1ZV9wYWlyLmFwcGVu ZCggTm9uZSApCi0gICAgICAgIHJldHVybiBuYW1lX3ZhbHVlX3BhaXIKLQotCi1jbGFzcyBHYWxh eHlUYWdIYW5kbGVyKCBUYWdIYW5kbGVyICk6Ci0gICAgZGVmIF9faW5pdF9fKCBzZWxmICk6Ci0g ICAgICAgIGZyb20gZ2FsYXh5IGltcG9ydCBtb2RlbAotICAgICAgICBUYWdIYW5kbGVyLl9faW5p dF9fKCBzZWxmICkKLSAgICAgICAgc2VsZi5pdGVtX3RhZ19hc3NvY19pbmZvWyJIaXN0b3J5Il0g PTNEIEl0ZW1UYWdBc3NvY0luZm8oIG1vZGVsLkhpPQpzdG9yeSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5IaXN0 PQpvcnlUYWdBc3NvY2lhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5IaXN0PQpvcnlUYWdBc3NvY2lhdGlv bi50YWJsZS5jLmhpc3RvcnlfaWQgKQotICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9b Ikhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24iXSA9M0QgXAotICAgICAgICAgICAgSXRlbVRhZ0Fz c29jSW5mbyggbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25UYWdBc3NvY2lh dGlvPQpuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuSGlzdG9yeURhdGFz ZXRBc3NvY2lhdGlvblRhZ0Fzc29jaWF0aW89Cm4udGFibGUuYy5oaXN0b3J5X2RhdGFzZXRfYXNz b2NpYXRpb25faWQgKQotICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9bIlBhZ2UiXSA9 M0QgSXRlbVRhZ0Fzc29jSW5mbyggbW9kZWwuUGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5QYWdlVGFnPQpBc3Nv Y2lhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtb2RlbC5QYWdlVGFnPQpBc3NvY2lhdGlvbi50YWJsZS5jLnBhZ2VfaWQg KQotICAgICAgICBzZWxmLml0ZW1fdGFnX2Fzc29jX2luZm9bIlN0b3JlZFdvcmtmbG93Il0gPTNE IEl0ZW1UYWdBc3NvY0luZm8oIG09Cm9kZWwuU3RvcmVkV29ya2Zsb3csCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1vZD0KZWwuU3RvcmVkV29ya2Zsb3dUYWdBc3NvY2lhdGlvbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k PQplbC5TdG9yZWRXb3JrZmxvd1RhZ0Fzc29jaWF0aW9uLnRhYmxlLmMuc3RvcmVkX3dvcmtmbG93 X2lkICkKLSAgICAgICAgc2VsZi5pdGVtX3RhZ19hc3NvY19pbmZvWyJWaXN1YWxpemF0aW9uIl0g PTNEIEl0ZW1UYWdBc3NvY0luZm8oIG1vPQpkZWwuVmlzdWFsaXphdGlvbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb2RlPQpsLlZpc3VhbGl6YXRpb25UYWdBc3NvY2lhdGlvbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rl PQpsLlZpc3VhbGl6YXRpb25UYWdBc3NvY2lhdGlvbi50YWJsZS5jLnZpc3VhbGl6YXRpb25faWQg KQotCi0KLWNsYXNzIENvbW11bml0eVRhZ0hhbmRsZXIoIFRhZ0hhbmRsZXIgKToKLSAgICBkZWYg X19pbml0X18oIHNlbGYgKToKLSAgICAgICAgZnJvbSBnYWxheHkud2ViYXBwcy50b29sX3NoZWQg aW1wb3J0IG1vZGVsCi0gICAgICAgIFRhZ0hhbmRsZXIuX19pbml0X18oIHNlbGYgKQoKZGlmZiAt ciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOWRhODdkOGQwMDkzYjk3MmYxIC1yIDA5NDIwNWI0NTFh YWNlZjc3N2MwYWYyPQowMDU0MmE2YzgxZWIzZWYwYyBsaWIvZ2FsYXh5L3Rvb2xzL2Vycm9ycy5w eQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL2Vycm9ycy5weQorKysgYi9saWIvZ2FsYXh5L3Rvb2xz L2Vycm9ycy5weQpAQCAtODYsNyArODYsNyBAQAogICAgICAgICBpZiB1c2VyIGFuZCB1c2VyLmVt YWlsICE9M0QgZW1haWw6CiAgICAgICAgICAgICBlbWFpbF9zdHIgPTNEICInJXMnIChwcm92aWRp bmcgcHJlZmVycmVkIGNvbnRhY3QgZW1haWwgJyVzJykiID0KJSAodXNlci5lbWFpbCwgZW1haWwp CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlbWFpbF9zdHIgPTNEICInJXMnIiAlIGVtYWls CisgICAgICAgICAgICBlbWFpbF9zdHIgPTNEICInJXMnIiAlIChlbWFpbCBvciAnYW5vbnltb3Vz bHknKQogICAgICAgICBzZWxmLnJlcG9ydCA9M0Qgc3RyaW5nLlRlbXBsYXRlKCBlcnJvcl9yZXBv cnRfdGVtcGxhdGUgKSBcCiAgICAgICAgICAgICAuc2FmZV9zdWJzdGl0dXRlKCBob3N0PTNEaG9z dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRfaWQ9M0RoZGEuZGF0YXNl dF9pZCwKCmRpZmYgLXIgOGViNmQ4YjBiZjEwYWQxYWQ1YjY5ZjlkYTg3ZDhkMDA5M2I5NzJmMSAt ciAwOTQyMDViNDUxYWFjZWY3NzdjMGFmMj0KMDA1NDJhNmM4MWViM2VmMGMgbGliL2dhbGF4eS93 ZWIvYmFzZS9jb250cm9sbGVyLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxl ci5weQorKysgYi9saWIvZ2FsYXh5L3dlYi9iYXNlL2NvbnRyb2xsZXIucHkKQEAgLTIyMjIsOCAr MjIyMiw4IEBACj0yMAogICAgIGRlZiBzZXRfdGFnc19mcm9tX2xpc3QoIHNlbGYsIHRyYW5zLCBp dGVtLCBuZXdfdGFnc19saXN0LCB1c2VyPTNETm9uZSA9Cik6CiAgICAgICAgICMgTWV0aG9kIGRl cHJlY2F0ZWQgLSB0cnkgdG8gdXNlIFRhZ3NIYW5kbGVyIGluc3RlYWQuCi0gICAgICAgIHRhZ3Nf bWFuYWdlciA9M0QgdGFncy5UYWdzTWFuYWdlciggdHJhbnMuYXBwICkKLSAgICAgICAgcmV0dXJu IHRhZ3NfbWFuYWdlci5zZXRfdGFnc19mcm9tX2xpc3QoIHRyYW5zLCBpdGVtLCBuZXdfdGFnc19s aXN0PQosIHVzZXI9M0R1c2VyICkKKyAgICAgICAgdGFnc19tYW5hZ2VyID0zRCB0YWdzLkdhbGF4 eVRhZ01hbmFnZXIoIHRyYW5zLmFwcCApCisgICAgICAgIHJldHVybiB0YWdzX21hbmFnZXIuc2V0 X3RhZ3NfZnJvbV9saXN0KCB1c2VyLCBpdGVtLCBuZXdfdGFnc19saXN0ICkKPTIwCiAgICAgZGVm IGdldF91c2VyX3RhZ3NfdXNlZCggc2VsZiwgdHJhbnMsIHVzZXI9M0ROb25lICk6CiAgICAgICAg ICIiIgoKZGlmZiAtciA4ZWI2ZDhiMGJmMTBhZDFhZDViNjlmOWRhODdkOGQwMDkzYjk3MmYxIC1y IDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyPQowMDU0MmE2YzgxZWIzZWYwYyBsaWIvZ2FsYXh5L3dl YmFwcHMvdG9vbF9zaGVkL2FwcC5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVk L2FwcC5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL2FwcC5weQpAQCAtOCw3 ICs4LDcgQEAKIGZyb20gZ2FsYXh5Lm9wZW5pZC5wcm92aWRlcnMgaW1wb3J0IE9wZW5JRFByb3Zp ZGVycwogZnJvbSBnYWxheHkudXRpbC5kYmtleXMgaW1wb3J0IEdlbm9tZUJ1aWxkcwogZnJvbSBn YWxheHkud2ViIGltcG9ydCBzZWN1cml0eQotZnJvbSBnYWxheHkudGFncy50YWdfaGFuZGxlciBp bXBvcnQgQ29tbXVuaXR5VGFnSGFuZGxlcgorZnJvbSBnYWxheHkubWFuYWdlcnMudGFncyBpbXBv cnQgQ29tbXVuaXR5VGFnTWFuYWdlcgogZnJvbSB0b29sX3NoZWQuZ3JpZHMucmVwb3NpdG9yeV9n cmlkX2ZpbHRlcl9tYW5hZ2VyIGltcG9ydCBSZXBvc2l0b3J5R3JpZEY9CmlsdGVyTWFuYWdlcgog aW1wb3J0IHRvb2xfc2hlZC5yZXBvc2l0b3J5X3JlZ2lzdHJ5CiBpbXBvcnQgdG9vbF9zaGVkLnJl cG9zaXRvcnlfdHlwZXMucmVnaXN0cnkKQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgICAgICBzZWxm Lm1vZGVsID0zRCBtYXBwaW5nLmluaXQoIHNlbGYuY29uZmlnLmZpbGVfcGF0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJfdXJsLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5kYXRhYmFzZV9lbmdpbmVfb3B0aW9ucyApCi0gICAg ICAgICMgSW5pdGlhbGl6ZSB0aGUgVG9vbCBTSGVkIHNlY3VyaXR5IGhlbHBlci4KKyAgICAgICAg IyBJbml0aWFsaXplIHRoZSBUb29sIFNoZWQgc2VjdXJpdHkgaGVscGVyLgogICAgICAgICBzZWxm LnNlY3VyaXR5ID0zRCBzZWN1cml0eS5TZWN1cml0eUhlbHBlciggaWRfc2VjcmV0PTNEc2VsZi5j b25maWc9Ci5pZF9zZWNyZXQgKQogICAgICAgICAjIGluaXRpYWxpemUgdGhlIFRvb2wgU2hlZCB0 YWcgaGFuZGxlci4KLSAgICAgICAgc2VsZi50YWdfaGFuZGxlciA9M0QgQ29tbXVuaXR5VGFnSGFu ZGxlcigpCisgICAgICAgIHNlbGYudGFnX2hhbmRsZXIgPTNEIENvbW11bml0eVRhZ01hbmFnZXIo IHNlbGYgKQogICAgICAgICAjIEluaXRpYWxpemUgdGhlIFRvb2wgU2hlZCB0b29sIGRhdGEgdGFi bGVzLiAgTmV2ZXIgcGFzcyBhIGNvbmZpZ3U9CnJhdGlvbiBmaWxlIGhlcmUKICAgICAgICAgIyBi ZWNhdXNlIHRoZSBUb29sIFNoZWQgc2hvdWxkIGFsd2F5cyBoYXZlIGFuIGVtcHR5IGRpY3Rpb25h cnkhCiAgICAgICAgIHNlbGYudG9vbF9kYXRhX3RhYmxlcyA9M0QgZ2FsYXh5LnRvb2xzLmRhdGEu VG9vbERhdGFUYWJsZU1hbmFnZXIoID0Kc2VsZi5jb25maWcudG9vbF9kYXRhX3BhdGggKQoKCmh0 dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy84MzQ5Yjhi Yjk5NmQvCkNoYW5nZXNldDogICA4MzQ5YjhiYjk5NmQKVXNlcjogICAgICAgIGNhcmxmZWJlcmhh cmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDggMTc6NDA6MzQrMDA6MDAKU3VtbWFyeTogICAgIE1l cmdlZCBnYWxheHkvZ2FsYXh5LWNlbnRyYWwgaW50byBkZWZhdWx0CkFmZmVjdGVkICM6ICA4IGZp bGVzCgpkaWZmIC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyMDA1NDJhNmM4MWViM2VmMGMgLXIg ODM0OWI4YmI5OTZkZDgyYmVmZWFlMDI9CmRjZTcwYTZlNTA2NGQwY2FmIGxpYi9nYWxheHkvdG9v bHMvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS90b29scy9fX2luaXRfXy5weQorKysgYi9s aWIvZ2FsYXh5L3Rvb2xzL19faW5pdF9fLnB5CkBAIC0xODQzLDcgKzE4NDMsOCBAQAogICAgICAg ICAiIiJSZXR1cm4gYSBsaXN0IG9mIGNvbW1hbmRzIHRvIGJlIHJ1biB0byBwb3B1bGF0ZSB0aGUg Y3VycmVudCBlbnY9Cmlyb25tZW50IHRvIGluY2x1ZGUgdGhpcyB0b29scyByZXF1aXJlbWVudHMu IiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFwcC50b29sYm94LmRlcGVuZGVuY3lfbWFuYWdlci5k ZXBlbmRlbmN5X3NoZWxsX2NvbW1hbj0KZHMoCiAgICAgICAgICAgICBzZWxmLnJlcXVpcmVtZW50 cywKLSAgICAgICAgICAgIGluc3RhbGxlZF90b29sX2RlcGVuZGVuY2llcz0zRHNlbGYuaW5zdGFs bGVkX3Rvb2xfZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpbnN0YWxsZWRfdG9vbF9kZXBlbmRl bmNpZXM9M0RzZWxmLmluc3RhbGxlZF90b29sX2RlcGVuZGVuY2llcywKKyAgICAgICAgICAgIHRv b2xfZGlyPTNEc2VsZi50b29sX2RpciwKICAgICAgICAgKQo9MjAKICAgICBAcHJvcGVydHkKCmRp ZmYgLXIgMDk0MjA1YjQ1MWFhY2VmNzc3YzBhZjIwMDU0MmE2YzgxZWIzZWYwYyAtciA4MzQ5Yjhi Yjk5NmRkODJiZWZlYWUwMj0KZGNlNzBhNmU1MDY0ZDBjYWYgbGliL2dhbGF4eS90b29scy9kZXBz L2JyZXdfZXh0cy5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL2RlcHMvYnJld19leHRzLnB5Cisr KyBiL2xpYi9nYWxheHkvdG9vbHMvZGVwcy9icmV3X2V4dHMucHkKQEAgLTI4LDYgKzI4LDcgQEAK IGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCiBpbXBvcnQg c3VicHJvY2Vzcwo9MjAKIFdISVRFU1BBQ0VfUEFUVEVSTiA9M0QgcmUuY29tcGlsZSgiW1xzXSsi KQpAQCAtNDMsNiArNDQsNyBAQAogQ0FOTk9UX0RFVEVSTUlORV9UQVBfRVJST1JfTUVTU0FHRSA9 M0QgIkNhbm5vdCBkZXRlcm1pbmUgdGFwIG9mIHNwZWNpZmllZCA9CnJlY2lwZSAtIHBsZWFzZSB1 c2UgZnVsbHkgcXVhbGlmaWVkIHJlY2lwZSAoZS5nLiBob21lYnJldy9zY2llbmNlL3NhbXRvb2xz KT0KLiIKIFZFUkJPU0UgPTNEIEZhbHNlCiBSRUxBWEVEID0zRCBGYWxzZQorQlJFV19BUkdTID0z RCBbXQo9MjAKPTIwCiBjbGFzcyBCcmV3Q29udGV4dChvYmplY3QpOgpAQCAtMTA0LDYgKzEwNiw3 IEBACiBkZWYgbWFpbigpOgogICAgIGdsb2JhbCBWRVJCT1NFCiAgICAgZ2xvYmFsIFJFTEFYRUQK KyAgICBnbG9iYWwgQlJFV19BUkdTCiAgICAgcGFyc2VyID0zRCBhcmdwYXJzZS5Bcmd1bWVudFBh cnNlcihkZXNjcmlwdGlvbj0zRERFU0NSSVBUSU9OKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQo Ii0tYnJldyIsIGhlbHA9M0QiUGF0aCB0byBsaW51eGJyZXcgJ2JyZXcnIGV4ZWN1dGE9CmJsZSB0 byB0YXJnZXQiKQogICAgIGFjdGlvbnMgPTNEIFsidmluc3RhbGwiLCAidnVuaW5zdGFsbCIsICJ2 ZGVwcyIsICJ2aW5mbyIsICJlbnYiXQpAQCAtMTE0LDExICsxMTcsMTMgQEAKICAgICBwYXJzZXIu YWRkX2FyZ3VtZW50KCd2ZXJzaW9uJywgbWV0YXZhcj0zRCd2ZXJzaW9uJywgaGVscD0zRCJWZXJz aW9uIGZvPQpyIGFjdGlvbiAoZS5nLiAwLjEuMTkpLiIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVu dCgnLS1yZWxheGVkJywgYWN0aW9uPTNEJ3N0b3JlX3RydWUnLCBoZWxwPTNEIlJlbGF4ZT0KZCBw cm9jZXNzaW5nIC0gZm9yIGluc3RhbmNlIGFsbG93IHVzZSBvZiBlbnYgb24gbm9uLXZpbnN0YWxs LWVkIHJlY2lwZXMuIikKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcmJvc2UnLCBhY3Rp b249M0Qnc3RvcmVfdHJ1ZScsIGhlbHA9M0QiVmVyYm9zPQplIG91dHB1dCIpCisgICAgcGFyc2Vy LmFkZF9hcmd1bWVudCgncmVzdGFyZ3MnLCBuYXJncz0zRGFyZ3BhcnNlLlJFTUFJTkRFUikKICAg ICBhcmdzID0zRCBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgaWYgYXJncy52ZXJib3NlOgogICAg ICAgICBWRVJCT1NFID0zRCBUcnVlCiAgICAgaWYgYXJncy5yZWxheGVkOgogICAgICAgICBSRUxB WEVEID0zRCBUcnVlCisgICAgQlJFV19BUkdTID0zRCBhcmdzLnJlc3RhcmdzCiAgICAgaWYgbm90 IGFjdGlvbjoKICAgICAgICAgYWN0aW9uID0zRCBhcmdzLmFjdGlvbgogICAgIGJyZXdfY29udGV4 dCA9M0QgQnJld0NvbnRleHQoYXJncykKQEAgLTE1OSw3ICsxNjQsNyBAQAogICAgICAgICByZXR1 cm4gc2VsZi5tZXNzYWdlCj0yMAo9MjAKLWRlZiB2ZXJzaW9uZWRfaW5zdGFsbChyZWNpcGVfY29u dGV4dCwgcGFja2FnZT0zRE5vbmUsIHZlcnNpb249M0ROb25lKToKK2RlZiB2ZXJzaW9uZWRfaW5z dGFsbChyZWNpcGVfY29udGV4dCwgcGFja2FnZT0zRE5vbmUsIHZlcnNpb249M0ROb25lLCBpbnN0 PQphbGxlZF9kZXBzPTNEW10pOgogICAgIGlmIHBhY2thZ2UgaXMgTm9uZToKICAgICAgICAgcGFj a2FnZSA9M0QgcmVjaXBlX2NvbnRleHQucmVjaXBlCiAgICAgICAgIHZlcnNpb24gPTNEIHJlY2lw ZV9jb250ZXh0LnZlcnNpb24KQEAgLTE3NiwxMCArMTgxLDE1IEBACiAgICAgICAgICAgICB2ZXJz aW9uZWQgPTNEIHZlcnNpb25faW5mb1syXQogICAgICAgICAgICAgaWYgdmVyc2lvbmVkOgogICAg ICAgICAgICAgICAgIGRlcF90b192ZXJzaW9uW2RlcF0gPTNEIGRlcF92ZXJzaW9uCisgICAgICAg ICAgICAgICAgaWYgZGVwIGluIGluc3RhbGxlZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICBj b250aW51ZQogICAgICAgICAgICAgICAgIHZlcnNpb25lZF9pbnN0YWxsKHJlY2lwZV9jb250ZXh0 LCBkZXAsIGRlcF92ZXJzaW9uKQorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9kZXBzLmFwcGVu ZChkZXApCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgSW5zdGFsbCBsYXRl c3QuCiAgICAgICAgICAgICAgICAgZGVwX3RvX3ZlcnNpb25bZGVwXSA9M0QgTm9uZQorICAgICAg ICAgICAgICAgIGlmIGRlcCBpbiBpbnN0YWxsZWRfZGVwczoKKyAgICAgICAgICAgICAgICAgICAg Y29udGludWUKICAgICAgICAgICAgICAgICB1bnZlcnNpb25lZF9pbnN0YWxsKGRlcCkKICAgICAg ICAgdHJ5OgogICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgpAQCAtMTk4LDcgKzIwOCwxNiBA QAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZXBzX21ldGFkYXRhLmFwcGVu ZChkZXBfbWV0YWRhdGEpCj0yMAotICAgICAgICAgICAgYnJld19leGVjdXRlKFsiaW5zdGFsbCIs IHBhY2thZ2VdKQorICAgICAgICAgICAgY2VsbGFyX3Jvb3QgPTNEIHJlY2lwZV9jb250ZXh0LmJy ZXdfY29udGV4dC5ob21lYnJld19jZWxsYXIKKyAgICAgICAgICAgIGNlbGxhcl9wYXRoID0zRCBy ZWNpcGVfY29udGV4dC5jZWxsYXJfcGF0aAorICAgICAgICAgICAgZW52X2FjdGlvbnMgPTNEIGJ1 aWxkX2Vudl9hY3Rpb25zKGRlcHNfbWV0YWRhdGEsIGNlbGxhcl9yb290LCA9CmNlbGxhcl9wYXRo LCBjdXN0b21fb25seT0zRFRydWUpCisgICAgICAgICAgICBlbnYgPTNEIEVudkFjdGlvbi5idWls ZF9lbnYoZW52X2FjdGlvbnMpCisgICAgICAgICAgICBhcmdzID0zRCBbImluc3RhbGwiXQorICAg ICAgICAgICAgaWYgVkVSQk9TRToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS12ZXJi b3NlIikKKyAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKEJSRVdfQVJHUykKKyAgICAgICAgICAgIGFy Z3MuYXBwZW5kKHBhY2thZ2UpCisgICAgICAgICAgICBicmV3X2V4ZWN1dGUoYXJncywgZW52PTNE ZW52KQogICAgICAgICAgICAgZGVwcyA9M0QgYnJld19leGVjdXRlKFsiZGVwcyIsIHBhY2thZ2Vd KQogICAgICAgICAgICAgZGVwcyA9M0QgW2Quc3RyaXAoKSBmb3IgZCBpbiBkZXBzLnNwbGl0KCJc biIpIGlmIGRdCiAgICAgICAgICAgICBtZXRhZGF0YSA9M0QgewpAQCAtMjc4LDEwICsyOTcsMTAg QEAKICAgICAgICAgcGFzcwo9MjAKPTIwCi1kZWYgYnJld19leGVjdXRlKGFyZ3MpOgorZGVmIGJy ZXdfZXhlY3V0ZShhcmdzLCBlbnY9M0ROb25lKToKICAgICBvcy5lbnZpcm9uWyJIT01FQlJFV19O T19FTU9KSSJdID0zRCAiMSIgICMgc2ltcGxpZnkgYnJldyBwYXJzaW5nLgogICAgIGNtZHMgPTNE IFsiYnJldyJdICsgYXJncwotICAgIHJldHVybiBleGVjdXRlKGNtZHMpCisgICAgcmV0dXJuIGV4 ZWN1dGUoY21kcywgZW52PTNEZW52KQo9MjAKPTIwCiBkZWYgYnVpbGRfZW52X3N0YXRlbWVudHNf ZnJvbV9yZWNpcGVfY29udGV4dChyZWNpcGVfY29udGV4dCwgKiprd2RzKToKQEAgLTI5MCwxMSAr MzA5LDIwIEBACiAgICAgcmV0dXJuIGVudl9zdGF0ZW1lbnRzCj0yMAo9MjAKLWRlZiBidWlsZF9l bnZfc3RhdGVtZW50cyhjZWxsYXJfcm9vdCwgY2VsbGFyX3BhdGgsIHJlbGF4ZWQ9M0ROb25lKToK K2RlZiBidWlsZF9lbnZfc3RhdGVtZW50cyhjZWxsYXJfcm9vdCwgY2VsbGFyX3BhdGgsIHJlbGF4 ZWQ9M0ROb25lLCBjdXN0b21fPQpvbmx5PTNERmFsc2UpOgogICAgIGRlcHMgPTNEIGxvYWRfdmVy c2lvbmVkX2RlcHMoY2VsbGFyX3BhdGgsIHJlbGF4ZWQ9M0RyZWxheGVkKQorICAgIGFjdGlvbnMg PTNEIGJ1aWxkX2Vudl9hY3Rpb25zKGRlcHMsIGNlbGxhcl9yb290LCBjZWxsYXJfcGF0aCwgcmVs YXhlZCw9CiBjdXN0b21fb25seSkKKyAgICBlbnZfc3RhdGVtZW50cyA9M0QgW10KKyAgICBmb3Ig YWN0aW9uIGluIGFjdGlvbnM6CisgICAgICAgIGVudl9zdGF0ZW1lbnRzLmV4dGVuZChhY3Rpb24u dG9fc3RhdGVtZW50cygpKQorICAgIHJldHVybiAiXG4iLmpvaW4oZW52X3N0YXRlbWVudHMpCisK KworZGVmIGJ1aWxkX2Vudl9hY3Rpb25zKGRlcHMsIGNlbGxhcl9yb290LCBjZWxsYXJfcGF0aCwg cmVsYXhlZD0zRE5vbmUsIGN1c3Q9Cm9tX29ubHk9M0RGYWxzZSk6Cj0yMAogICAgIHBhdGhfYXBw ZW5kcyA9M0QgW10KICAgICBsZF9wYXRoX2FwcGVuZHMgPTNEIFtdCisgICAgYWN0aW9ucyA9M0Qg W10KPTIwCiAgICAgZGVmIGhhbmRsZV9rZWcoY2VsbGFyX3BhdGgpOgogICAgICAgICBiaW5fcGF0 aCA9M0Qgb3MucGF0aC5qb2luKGNlbGxhcl9wYXRoLCAiYmluIikKQEAgLTMwMyw2ICszMzEsMTQg QEAKICAgICAgICAgbGliX3BhdGggPTNEIG9zLnBhdGguam9pbihjZWxsYXJfcGF0aCwgImxpYiIp CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobGliX3BhdGgpOgogICAgICAgICAgICAgbGRfcGF0 aF9hcHBlbmRzLmFwcGVuZChsaWJfcGF0aCkKKyAgICAgICAgZW52X3BhdGggPTNEIG9zLnBhdGgu am9pbihjZWxsYXJfcGF0aCwgInBsYXRmb3JtX2Vudmlyb25tZW50Lmpzb24iKQorICAgICAgICBp ZiBvcy5wYXRoLmV4aXN0cyhlbnZfcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZW52X3Bh dGgsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBlbnZfbWV0YWRhdGEgPTNEIGpzb24ubG9h ZChmKQorICAgICAgICAgICAgICAgIGlmICJhY3Rpb25zIiBpbiBlbnZfbWV0YWRhdGE6CisgICAg ICAgICAgICAgICAgICAgIGRlZiB0b19hY3Rpb24oZGVzYyk6CisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gRW52QWN0aW9uKGNlbGxhcl9wYXRoLCBkZXNjKQorICAgICAgICAgICAgICAg ICAgICBhY3Rpb25zLmV4dGVuZChtYXAodG9fYWN0aW9uLCBlbnZfbWV0YWRhdGFbImFjdGlvbnMi XSkpCj0yMAogICAgIGZvciBkZXAgaW4gZGVwczoKICAgICAgICAgcGFja2FnZSA9M0QgZGVwWydu YW1lJ10KQEAgLTMxMSwxNCArMzQ3LDU0IEBACiAgICAgICAgIGhhbmRsZV9rZWcoIGRlcF9jZWxs YXJfcGF0aCApCj0yMAogICAgIGhhbmRsZV9rZWcoIGNlbGxhcl9wYXRoICkKLSAgICBlbnZfc3Rh dGVtZW50cyA9M0QgW10KLSAgICBpZiBwYXRoX2FwcGVuZHM6Ci0gICAgICAgIGVudl9zdGF0ZW1l bnRzLmFwcGVuZCgiUEFUSD0zRCIgKyAiOiIuam9pbihwYXRoX2FwcGVuZHMpICsgIjokUEFUSD0K IikKLSAgICAgICAgZW52X3N0YXRlbWVudHMuYXBwZW5kKCJleHBvcnQgUEFUSCIpCi0gICAgaWYg bGRfcGF0aF9hcHBlbmRzOgotICAgICAgICBlbnZfc3RhdGVtZW50cy5hcHBlbmQoIkxEX0xJQlJB UllfUEFUSD0zRCIgKyAiOiIuam9pbihsZF9wYXRoX2FwcGU9Cm5kcykgKyAiOiRMRF9MSUJSQVJZ X1BBVEgiKQotICAgICAgICBlbnZfc3RhdGVtZW50cy5hcHBlbmQoImV4cG9ydCBMRF9MSUJSQVJZ X1BBVEgiKQotICAgIHJldHVybiAiXG4iLmpvaW4oZW52X3N0YXRlbWVudHMpCisgICAgaWYgbm90 IGN1c3RvbV9vbmx5OgorICAgICAgICBpZiBwYXRoX2FwcGVuZHM6CisgICAgICAgICAgICBhY3Rp b25zLmFwcGVuZChFbnZBY3Rpb24oY2VsbGFyX3BhdGgsIHsiYWN0aW9uIjogInByZXBlbmQiLCAi dj0KYXJpYWJsZSI6ICJQQVRIIiwgInZhbHVlIjogIjoiLmpvaW4ocGF0aF9hcHBlbmRzKX0pKQor ICAgICAgICBpZiBsZF9wYXRoX2FwcGVuZHM6CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChF bnZBY3Rpb24oY2VsbGFyX3BhdGgsIHsiYWN0aW9uIjogInByZXBlbmQiLCAidj0KYXJpYWJsZSI6 ICJMRF9MSUJSQVJZX1BBVEgiLCAidmFsdWUiOiAiOiIuam9pbihwYXRoX2FwcGVuZHMpfSkpCisg ICAgcmV0dXJuIGFjdGlvbnMKKworCitjbGFzcyBFbnZBY3Rpb24ob2JqZWN0KToKKworICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBrZWdfcm9vdCwgYWN0aW9uX2Rlc2NyaXB0aW9uKToKKyAgICAgICAg c2VsZi52YXJpYWJsZSA9M0QgYWN0aW9uX2Rlc2NyaXB0aW9uWyJ2YXJpYWJsZSJdCisgICAgICAg IHNlbGYuYWN0aW9uID0zRCBhY3Rpb25fZGVzY3JpcHRpb25bImFjdGlvbiJdCisgICAgICAgIHNl bGYudmFsdWUgPTNEIHN0cmluZy5UZW1wbGF0ZShhY3Rpb25fZGVzY3JpcHRpb25bInZhbHVlIl0p LnNhZmVfcz0KdWJzdGl0dXRlKHsKKyAgICAgICAgICAgICdLRUdfUk9PVCc6IGtlZ19yb290LAor ICAgICAgICB9KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBidWlsZF9lbnYoZW52X2Fj dGlvbnMpOgorICAgICAgICBuZXdfZW52ID0zRCBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBt YXAobGFtYmRhIGVudl9hY3Rpb246IGVudl9hY3Rpb24ubW9kaWZ5X2Vudmlyb24obmV3X2Vudiks IGVudl9hY3Q9CmlvbnMpCisgICAgICAgIHJldHVybiBuZXdfZW52CisKKyAgICBkZWYgbW9kaWZ5 X2Vudmlyb24oc2VsZiwgZW52aXJvbik6CisgICAgICAgIGlmIHNlbGYuYWN0aW9uID0zRD0zRCAi c2V0IiBvciBub3QgZW52aXJvbi5nZXQoc2VsZi52YXJpYWJsZSwgIiIpOgorICAgICAgICAgICAg ZW52aXJvbltzZWxmLnZhcmlhYmxlXSA9M0Qgc2VsZi5fX2V2YWwoIiR7dmFsdWV9IikKKyAgICAg ICAgZWxpZiBzZWxmLmFjdGlvbiA9M0Q9M0QgInByZXBlbmQiOgorICAgICAgICAgICAgZW52aXJv bltzZWxmLnZhcmlhYmxlXSA9M0Qgc2VsZi5fX2V2YWwoIiR7dmFsdWV9OiVzIiAlIGVudmlyb249 CltzZWxmLnZhcmlhYmxlXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudmlyb25bc2Vs Zi52YXJpYWJsZV0gPTNEIHNlbGYuX19ldmFsKCIlczoke3ZhbHVlfSIgJSBlbnZpcm9uPQpbc2Vs Zi52YXJpYWJsZV0pCisKKyAgICBkZWYgX19ldmFsKHNlbGYsIHRlbXBsYXRlKToKKyAgICAgICAg cmV0dXJuIHN0cmluZy5UZW1wbGF0ZSh0ZW1wbGF0ZSkuc2FmZV9zdWJzdGl0dXRlKAorICAgICAg ICAgICAgdmFyaWFibGU9M0RzZWxmLnZhcmlhYmxlLAorICAgICAgICAgICAgdmFsdWU9M0RzZWxm LnZhbHVlLAorICAgICAgICApCisKKyAgICBkZWYgdG9fc3RhdGVtZW50cyhzZWxmKToKKyAgICAg ICAgaWYgc2VsZi5hY3Rpb24gPTNEPTNEICJzZXQiOgorICAgICAgICAgICAgdGVtcGxhdGUgPTNE ICcnJyR7dmFyaWFibGV9PTNEIiR7dmFsdWV9IicnJworICAgICAgICBlbGlmIHNlbGYuYWN0aW9u ID0zRD0zRCAicHJlcGVuZCI6CisgICAgICAgICAgICB0ZW1wbGF0ZSA9M0QgJycnJHt2YXJpYWJs ZX09M0QiJHt2YWx1ZX06JCQke3ZhcmlhYmxlfSInJycKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICAgIHRlbXBsYXRlID0zRCAnJycke3ZhcmlhYmxlfT0zRCIkJCR7dmFyaWFibGV9OiR7dmFsdWV9 IicnJworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgc2VsZi5fX2V2YWwodGVtcGxhdGUp LAorICAgICAgICAgICAgImV4cG9ydCAlcyIgJSBzZWxmLnZhcmlhYmxlCisgICAgICAgIF0KPTIw Cj0yMAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKQEAgLTM1MCw4ICs0MjYsMTUgQEAKICAg ICByZXR1cm4gZXhlY3V0ZShjbWRzKQo9MjAKPTIwCi1kZWYgZXhlY3V0ZShjbWRzKToKLSAgICBw ID0zRCBzdWJwcm9jZXNzLlBvcGVuKGNtZHMsIHNoZWxsPTNERmFsc2UsIHN0ZG91dD0zRHN1YnBy b2Nlc3MuUElQRSwgPQpzdGRlcnI9M0RzdWJwcm9jZXNzLlBJUEUpCitkZWYgZXhlY3V0ZShjbWRz LCBlbnY9M0ROb25lKToKKyAgICBzdWJwcm9jZXNzX2t3ZHMgPTNEIGRpY3QoCisgICAgICAgIHNo ZWxsPTNERmFsc2UsCisgICAgICAgIHN0ZG91dD0zRHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAg c3RkZXJyPTNEc3VicHJvY2Vzcy5QSVBFLAorICAgICkKKyAgICBpZiBlbnY6CisgICAgICAgIHN1 YnByb2Nlc3Nfa3dkc1siZW52Il0gPTNEIGVudgorICAgIHAgPTNEIHN1YnByb2Nlc3MuUG9wZW4o Y21kcywgKipzdWJwcm9jZXNzX2t3ZHMpCiAgICAgI2xvZyA9M0QgcC5zdGRvdXQucmVhZCgpCiAg ICAgZ2xvYmFsIFZFUkJPU0UKICAgICBzdGRvdXQsIHN0ZGVyciA9M0QgcC5jb21tdW5pY2F0ZSgp CkBAIC0zNjMsNyArNDQ2LDEwIEBACj0yMAo9MjAKIGRlZiBicmV3X2RlcHMocGFja2FnZSk6Ci0g ICAgc3Rkb3V0ID0zRCBicmV3X2V4ZWN1dGUoWyJkZXBzIiwgcGFja2FnZV0pCisgICAgYXJncyA9 M0QgWyJkZXBzIl0KKyAgICBhcmdzLmV4dGVuZChCUkVXX0FSR1MpCisgICAgYXJncy5hcHBlbmQo cGFja2FnZSkKKyAgICBzdGRvdXQgPTNEIGJyZXdfZXhlY3V0ZShhcmdzKQogICAgIHJldHVybiBb cC5zdHJpcCgpIGZvciBwIGluIHN0ZG91dC5zcGxpdCgiXG4iKSBpZiBwXQo9MjAKPTIwCgpkaWZm IC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyMDA1NDJhNmM4MWViM2VmMGMgLXIgODM0OWI4YmI5 OTZkZDgyYmVmZWFlMDI9CmRjZTcwYTZlNTA2NGQwY2FmIGxpYi9nYWxheHkvdG9vbHMvZGVwcy9y ZXNvbHZlcnMvYnJld2VkX3Rvb2xfc2hlZF9wYWNrYWdlcz0KLnB5Ci0tLSAvZGV2L251bGwKKysr IGIvbGliL2dhbGF4eS90b29scy9kZXBzL3Jlc29sdmVycy9icmV3ZWRfdG9vbF9zaGVkX3BhY2th Z2VzLnB5CkBAIC0wLDAgKzEsMTUwIEBACisiIiIKK1RoaXMgZGVwZW5kZW5jeSByZXNvbHZlciBy ZXNvbHZlcyB0b29sIHNoZWQgZGVwZW5kZW5jaWVzICh0aG9zZSBkZWZpbmVkCit0b29sX2RlcGVu ZGVuY2llcy54bWwpIGluc3RhbGxlZCB1c2luZyBQbGF0Zm9ybSBIb21lYnJldyBhbmQgY29udmVy dGVkCit2aWEgc2hlZDJ0YXAgKGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2ptY2hpbHRvbi9ob21l YnJldy10b29sc2hlZCkuCisiIiIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2Zyb20geG1s LmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorCitmcm9tIC5yZXNvbHZlcl9taXhpbnMg aW1wb3J0ICgKKyAgICBVc2VzSG9tZWJyZXdNaXhpbiwKKyAgICBVc2VzVG9vbERlcGVuZGVuY3lE aXJNaXhpbiwKKyAgICBVc2VzSW5zdGFsbGVkUmVwb3NpdG9yaWVzTWl4aW4sCispCitmcm9tIC4u cmVzb2x2ZXJzIGltcG9ydCBEZXBlbmRlbmN5UmVzb2x2ZXIsIElOREVURVJNSU5BVEVfREVQRU5E RU5DWQorCitsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIEhv bWVicmV3VG9vbFNoZWREZXBlbmRlbmN5UmVzb2x2ZXIoCisgICAgRGVwZW5kZW5jeVJlc29sdmVy LAorICAgIFVzZXNIb21lYnJld01peGluLAorICAgIFVzZXNUb29sRGVwZW5kZW5jeURpck1peGlu LAorICAgIFVzZXNJbnN0YWxsZWRSZXBvc2l0b3JpZXNNaXhpbiwKKyk6CisgICAgcmVzb2x2ZXJf dHlwZSA9M0QgInRvb2xfc2hlZF90YXAiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVwZW5k ZW5jeV9tYW5hZ2VyLCAqKmt3ZHMpOgorICAgICAgICBzZWxmLl9pbml0X2hvbWVicmV3KCoqa3dk cykKKyAgICAgICAgc2VsZi5faW5pdF9iYXNlX3BhdGgoZGVwZW5kZW5jeV9tYW5hZ2VyLCAqKmt3 ZHMpCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBuYW1lLCB2ZXJzaW9uLCB0eXBlLCAqKmt3ZHMp OgorICAgICAgICBpZiB0eXBlICE9M0QgInBhY2thZ2UiOgorICAgICAgICAgICAgcmV0dXJuIElO REVURVJNSU5BVEVfREVQRU5ERU5DWQorCisgICAgICAgIGlmIHZlcnNpb24gaXMgTm9uZToKKyAg ICAgICAgICAgIHJldHVybiBJTkRFVEVSTUlOQVRFX0RFUEVOREVOQ1kKKworICAgICAgICByZXR1 cm4gc2VsZi5fZmluZF90b29sX2RlcGVuZGVuY2llcyhuYW1lLCB2ZXJzaW9uLCB0eXBlLCAqKmt3 ZHMpCisKKyAgICBkZWYgX2ZpbmRfdG9vbF9kZXBlbmRlbmNpZXMoc2VsZiwgbmFtZSwgdmVyc2lv biwgdHlwZSwgKiprd2RzKToKKyAgICAgICAgaW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeSA9M0Qg c2VsZi5fZ2V0X2luc3RhbGxlZF9kZXBlbmRlbmN5KG5hbWUsPQogdHlwZSwgdmVyc2lvbj0zRHZl cnNpb24sICoqa3dkcykKKyAgICAgICAgaWYgaW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeToKKyAg ICAgICAgICAgIHJldHVybiBzZWxmLl9yZXNvbHZlX2Zyb21faW5zdGFsbGVkX3Rvb2xfZGVwZW5k ZW5jeShuYW1lLCB2ZXJzPQppb24sIGluc3RhbGxlZF90b29sX2RlcGVuZGVuY3kpCisKKyAgICAg ICAgaWYgInRvb2xfZGlyIiBpbiBrd2RzOgorICAgICAgICAgICAgdG9vbF9kaXJlY3RvcnkgPTNE IG9zLnBhdGguYWJzcGF0aChrd2RzWyJ0b29sX2RpciJdKQorICAgICAgICAgICAgdG9vbF9kZXBl bmVkZW5jaWVzX3BhdGggPTNEIG9zLnBhdGguam9pbih0b29sX2RpcmVjdG9yeSwgInRvb2w9Cl9k ZXBlbmRlbmNpZXMueG1sIikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRvb2xfZGVw ZW5lZGVuY2llc19wYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVzb2x2ZV9m cm9tX3Rvb2xfZGVwZW5kZW5jaWVzX3BhdGgobmFtZSwgdmVyPQpzaW9uLCB0b29sX2RlcGVuZWRl bmNpZXNfcGF0aCkKKworICAgICAgICByZXR1cm4gSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZCisK KyAgICBkZWYgX3Jlc29sdmVfZnJvbV9pbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmN5KHNlbGYsIG5h bWUsIHZlcnNpb24sIGluc3RhPQpsbGVkX3Rvb2xfZGVwZW5kZW5jeSk6CisgICAgICAgIHRvb2xf c2hlZF9yZXBvc2l0b3J5ID0zRCBpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmN5LnRvb2xfc2hlZF9y ZXBvcz0KaXRvcnkKKyAgICAgICAgcmVjaXBlX25hbWUgPTNEIGJ1aWxkX3JlY2lwZV9uYW1lKAor ICAgICAgICAgICAgcGFja2FnZV9uYW1lPTNEbmFtZSwKKyAgICAgICAgICAgIHBhY2thZ2VfdmVy c2lvbj0zRHZlcnNpb24sCisgICAgICAgICAgICByZXBvc2l0b3J5X293bmVyPTNEdG9vbF9zaGVk X3JlcG9zaXRvcnkub3duZXIsCisgICAgICAgICAgICByZXBvc2l0b3J5X25hbWU9M0R0b29sX3No ZWRfcmVwb3NpdG9yeS5uYW1lLAorICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9maW5k X2RlcF9kZWZhdWx0KHJlY2lwZV9uYW1lLCBOb25lKQorCisgICAgZGVmIF9yZXNvbHZlX2Zyb21f dG9vbF9kZXBlbmRlbmNpZXNfcGF0aChzZWxmLCBuYW1lLCB2ZXJzaW9uLCB0b29sX2RlcD0KZW5k ZW5jaWVzX3BhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYXdfZGVwZW5kZW5jaWVz ID0zRCBSYXdEZXBlbmRlbmNpZXModG9vbF9kZXBlbmRlbmNpZXNfcGF0aCkKKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiRmFpbGVkIHRvIHBhcnNlIGRl cGVuZGVuY2llcyBpbiBmaWxlICVzIiAlIHRvb2xfZGVwPQplbmRlbmNpZXNfcGF0aCkKKyAgICAg ICAgICAgIHJldHVybiBJTkRFVEVSTUlOQVRFX0RFUEVOREVOQ1kKKworICAgICAgICByYXdfZGVw ZW5kZW5jeSA9M0QgcmF3X2RlcGVuZGVuY2llcy5maW5kKG5hbWUsIHZlcnNpb24pCisgICAgICAg IGlmIG5vdCByYXdfZGVwZW5kZW5jeToKKyAgICAgICAgICAgIHJldHVybiBJTkRFVEVSTUlOQVRF X0RFUEVOREVOQ1kKKworICAgICAgICByZWNpcGVfbmFtZSA9M0QgYnVpbGRfcmVjaXBlX25hbWUo CisgICAgICAgICAgICBwYWNrYWdlX25hbWU9M0RuYW1lLAorICAgICAgICAgICAgcGFja2FnZV92 ZXJzaW9uPTNEdmVyc2lvbiwKKyAgICAgICAgICAgIHJlcG9zaXRvcnlfb3duZXI9M0RyYXdfZGVw ZW5kZW5jeS5yZXBvc2l0b3J5X293bmVyLAorICAgICAgICAgICAgcmVwb3NpdG9yeV9uYW1lPTNE cmF3X2RlcGVuZGVuY3kucmVwb3NpdG9yeV9uYW1lCisgICAgICAgICkKKyAgICAgICAgZGVwID0z RCBzZWxmLl9maW5kX2RlcF9kZWZhdWx0KHJlY2lwZV9uYW1lLCBOb25lKQorICAgICAgICByZXR1 cm4gZGVwCisKKworY2xhc3MgUmF3RGVwZW5kZW5jaWVzKG9iamVjdCk6CisKKyAgICBkZWYgX19p bml0X18oc2VsZiwgZGVwZW5kZW5jaWVzX2ZpbGUpOgorICAgICAgICBzZWxmLnJvb3QgPTNEIEVU LnBhcnNlKGRlcGVuZGVuY2llc19maWxlKS5nZXRyb290KCkKKyAgICAgICAgZGVwZW5kZW5jaWVz ID0zRCBbXQorICAgICAgICBwYWNrYWdlX2VscyA9M0Qgc2VsZi5yb290LmZpbmRhbGwoInBhY2th Z2UiKSBvciBbXQorICAgICAgICBmb3IgcGFja2FnZV9lbCBpbiBwYWNrYWdlX2VsczoKKyAgICAg ICAgICAgIHJlcG9zaXRvcnlfZWwgPTNEIHBhY2thZ2VfZWwuZmluZCgicmVwb3NpdG9yeSIpCisg ICAgICAgICAgICBpZiByZXBvc2l0b3J5X2VsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29u dGludWUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgPTNEIFJhd0RlcGVuZGVuY3koc2VsZiwgcGFj a2FnZV9lbCwgcmVwb3NpdG9yeV9lbCkKKyAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQo ZGVwZW5kZW5jeSkKKyAgICAgICAgc2VsZi5kZXBlbmRlbmNpZXMgPTNEIGRlcGVuZGVuY2llcwor CisgICAgZGVmIGZpbmQoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3ZlcnNpb24pOgorICAg ICAgICB0YXJnZXRfZGVwZW5kZW5jeSA9M0QgTm9uZQorCisgICAgICAgIGZvciBkZXBlbmRlbmN5 IGluIHNlbGYuZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgaWYgZGVwZW5kZW5jeS5wYWNrYWdl X25hbWUgPTNEPTNEIHBhY2thZ2VfbmFtZSBhbmQgZGVwZW5kZW5jeS49CnBhY2thZ2VfdmVyc2lv biA9M0Q9M0QgcGFja2FnZV92ZXJzaW9uOgorICAgICAgICAgICAgICAgIHRhcmdldF9kZXBlbmRl bmN5ID0zRCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJu IHRhcmdldF9kZXBlbmRlbmN5CisKKworY2xhc3MgUmF3RGVwZW5kZW5jeShvYmplY3QpOgorCisg ICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGVuZGVuY2llcywgcGFja2FnZV9lbCwgcmVwb3NpdG9y eV9lbCk6CisgICAgICAgIHNlbGYuZGVwZW5kZW5jaWVzID0zRCBkZXBlbmRlbmNpZXMKKyAgICAg ICAgc2VsZi5wYWNrYWdlX2VsID0zRCBwYWNrYWdlX2VsCisgICAgICAgIHNlbGYucmVwb3NpdG9y eV9lbCA9M0QgcmVwb3NpdG9yeV9lbAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg ICB0ZW1wID0zRCAiRGVwZW5kZW5jeVtwYWNrYWdlX25hbWU9M0Qlcyx2ZXJzaW9uPTNEJXMsZGVw ZW5kZW50X3BhY2s9CmFnZT0zRCVzXSIKKyAgICAgICAgcmV0dXJuIHRlbXAgJSAoCisgICAgICAg ICAgICBzZWxmLnBhY2thZ2VfZWwuYXR0cmliWyJuYW1lIl0sCisgICAgICAgICAgICBzZWxmLnBh Y2thZ2VfZWwuYXR0cmliWyJ2ZXJzaW9uIl0sCisgICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnlf ZWwuYXR0cmliWyJuYW1lIl0KKyAgICAgICAgKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJl cG9zaXRvcnlfb3duZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlcG9zaXRvcnlfZWwu YXR0cmliWyJvd25lciJdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVwb3NpdG9yeV9uYW1l KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yZXBvc2l0b3J5X2VsLmF0dHJpYlsibmFtZSJd CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFja2FnZV9uYW1lKHNlbGYpOgorICAgICAgICBy ZXR1cm4gc2VsZi5wYWNrYWdlX2VsLmF0dHJpYlsibmFtZSJdCisKKyAgICBAcHJvcGVydHkKKyAg ICBkZWYgcGFja2FnZV92ZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYWNrYWdl X2VsLmF0dHJpYlsidmVyc2lvbiJdCisKKworZGVmIGJ1aWxkX3JlY2lwZV9uYW1lKHBhY2thZ2Vf bmFtZSwgcGFja2FnZV92ZXJzaW9uLCByZXBvc2l0b3J5X293bmVyLCByZXA9Cm9zaXRvcnlfbmFt ZSk6CisgICAgIyBUT0RPOiBDb25zaWRlciBiYWtpbmcgcGFja2FnZV9uYW1lIGFuZCBwYWNrYWdl X3ZlcnNpb24gaW50byBuYW1lPyAodz0Kb3VsZCBiZSBtb3JlICJjb3JyZWN0IikKKyAgICBvd25l ciA9M0QgcmVwb3NpdG9yeV9vd25lci5yZXBsYWNlKCItIiwgIiIpCisgICAgbmFtZSA9M0QgcmVw b3NpdG9yeV9uYW1lCisgICAgbmFtZSA9M0QgbmFtZS5yZXBsYWNlKCJfIiwgIiIpLnJlcGxhY2Uo Ii0iLCAiIikKKyAgICBiYXNlID0zRCAiJXNfJXMiICUgKG93bmVyLCBuYW1lKQorICAgIHJldHVy biBiYXNlCisKKworX19hbGxfXyA9M0QgW0hvbWVicmV3VG9vbFNoZWREZXBlbmRlbmN5UmVzb2x2 ZXJdCgpkaWZmIC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyMDA1NDJhNmM4MWViM2VmMGMgLXIg ODM0OWI4YmI5OTZkZDgyYmVmZWFlMDI9CmRjZTcwYTZlNTA2NGQwY2FmIGxpYi9nYWxheHkvdG9v bHMvZGVwcy9yZXNvbHZlcnMvZ2FsYXh5X3BhY2thZ2VzLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9v bHMvZGVwcy9yZXNvbHZlcnMvZ2FsYXh5X3BhY2thZ2VzLnB5CisrKyBiL2xpYi9nYWxheHkvdG9v bHMvZGVwcy9yZXNvbHZlcnMvZ2FsYXh5X3BhY2thZ2VzLnB5CkBAIC0xLDEyICsxLDEzIEBACi1m cm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIGlzbGluaywgcmVhbHBhdGgsIGJhc2VuYW1lLCBleGlz dHMsIGFic3BhdGgKK2Zyb20gb3MucGF0aCBpbXBvcnQgam9pbiwgaXNsaW5rLCByZWFscGF0aCwg YmFzZW5hbWUsIGV4aXN0cwo9MjAKIGZyb20gLi5yZXNvbHZlcnMgaW1wb3J0IERlcGVuZGVuY3lS ZXNvbHZlciwgSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZLCBEZXBlPQpuZGVuY3kKK2Zyb20gLnJl c29sdmVyX21peGlucyBpbXBvcnQgVXNlc1Rvb2xEZXBlbmRlbmN5RGlyTWl4aW4KPTIwCiBpbXBv cnQgbG9nZ2luZwogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQo9MjAKPTIw Ci1jbGFzcyBHYWxheHlQYWNrYWdlRGVwZW5kZW5jeVJlc29sdmVyKERlcGVuZGVuY3lSZXNvbHZl cik6CitjbGFzcyBHYWxheHlQYWNrYWdlRGVwZW5kZW5jeVJlc29sdmVyKERlcGVuZGVuY3lSZXNv bHZlciwgVXNlc1Rvb2xEZXBlbmRlbj0KY3lEaXJNaXhpbik6CiAgICAgcmVzb2x2ZXJfdHlwZSA9 M0QgImdhbGF4eV9wYWNrYWdlcyIKPTIwCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGVuZGVu Y3lfbWFuYWdlciwgKiprd2RzKToKQEAgLTE2LDcgKzE3LDcgQEAKICAgICAgICAgIyMgcmVzb2x2 ZXIgdGhhdCB3aWxsIGp1c3QgZ3JhYiAnZGVmYXVsdCcgdmVyc2lvbiBvZiBleGFjdCB2ZXJzaW9u CiAgICAgICAgICMjIHVuYXZhaWxhYmxlLgogICAgICAgICBzZWxmLnZlcnNpb25sZXNzID0zRCBz dHIoa3dkcy5nZXQoJ3ZlcnNpb25sZXNzJywgImZhbHNlIikpLmxvd2VyKCk9CiA9M0Q9M0QgInRy dWUiCi0gICAgICAgIHNlbGYuYmFzZV9wYXRoID0zRCBhYnNwYXRoKCBrd2RzLmdldCgnYmFzZV9w YXRoJywgZGVwZW5kZW5jeV9tYW5hZz0KZXIuZGVmYXVsdF9iYXNlX3BhdGgpICkKKyAgICAgICAg c2VsZi5faW5pdF9iYXNlX3BhdGgoIGRlcGVuZGVuY3lfbWFuYWdlciwgKiprd2RzICkKPTIwCiAg ICAgZGVmIHJlc29sdmUoIHNlbGYsIG5hbWUsIHZlcnNpb24sIHR5cGUsICoqa3dkcyApOgogICAg ICAgICAiIiIKCmRpZmYgLXIgMDk0MjA1YjQ1MWFhY2VmNzc3YzBhZjIwMDU0MmE2YzgxZWIzZWYw YyAtciA4MzQ5YjhiYjk5NmRkODJiZWZlYWUwMj0KZGNlNzBhNmU1MDY0ZDBjYWYgbGliL2dhbGF4 eS90b29scy9kZXBzL3Jlc29sdmVycy9ob21lYnJldy5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xz L2RlcHMvcmVzb2x2ZXJzL2hvbWVicmV3LnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvZGVwcy9y ZXNvbHZlcnMvaG9tZWJyZXcucHkKQEAgLTEyLDIwICsxMiwxOSBAQAogaW5jb21wYXRpYmxlIGNo YW5nZXMgY29taW5nLgogIiIiCj0yMAotaW1wb3J0IG9zCj0yMAotZnJvbSAuLmJyZXdfZXh0cyBp bXBvcnQgREVGQVVMVF9IT01FQlJFV19ST09ULCByZWNpcGVfY2VsbGFyX3BhdGgsIGJ1aWxkX2U9 Cm52X3N0YXRlbWVudHMKLWZyb20gLi5yZXNvbHZlcnMgaW1wb3J0IERlcGVuZGVuY3lSZXNvbHZl ciwgSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZLCBEZXBlPQpuZGVuY3kKK2Zyb20gLnJlc29sdmVy X21peGlucyBpbXBvcnQgVXNlc0hvbWVicmV3TWl4aW4KK2Zyb20gLi5yZXNvbHZlcnMgaW1wb3J0 IERlcGVuZGVuY3lSZXNvbHZlciwgSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZCj0yMAogIyBUT0RP OiBJbXBsZW1lbnQgcHJlZmVyIHZlcnNpb24gbGlua2VkLi4uCiBQUkVGRVJfVkVSU0lPTl9MSU5L RUQgPTNEICdsaW5rZWQnCiBQUkVGRVJfVkVSU0lPTl9MQVRFU1QgPTNEICdsYXRlc3QnCi1VTktO T1dOX1BSRUZFUl9WRVJTSU9OX01FU1NBR0VfVEVNUExBVEUgPTNEICJIb21lYnJld0RlcGVuZGVu Y3lSZXNvbHZlciBwcj0KZWZlcl92ZXJzaW9uIG11c3QgYmUgbGF0ZXN0ICVzIgorVU5LTk9XTl9Q UkVGRVJfVkVSU0lPTl9NRVNTQUdFX1RFTVBMQVRFID0zRCAiSG9tZWJyZXdEZXBlbmRlbmN5UmVz b2x2ZXIgcHI9CmVmZXJfdmVyc2lvbiBtdXN0IGJlICVzIgogVU5LTk9XTl9QUkVGRVJfVkVSU0lP Tl9NRVNTQUdFID0zRCBVTktOT1dOX1BSRUZFUl9WRVJTSU9OX01FU1NBR0VfVEVNUExBVEU9CiAl IChQUkVGRVJfVkVSU0lPTl9MQVRFU1QpCiBERUZBVUxUX1BSRUZFUl9WRVJTSU9OID0zRCBQUkVG RVJfVkVSU0lPTl9MQVRFU1QKPTIwCj0yMAotY2xhc3MgSG9tZWJyZXdEZXBlbmRlbmN5UmVzb2x2 ZXIoRGVwZW5kZW5jeVJlc29sdmVyKToKK2NsYXNzIEhvbWVicmV3RGVwZW5kZW5jeVJlc29sdmVy KERlcGVuZGVuY3lSZXNvbHZlciwgVXNlc0hvbWVicmV3TWl4aW4pOgogICAgIHJlc29sdmVyX3R5 cGUgPTNEICJob21lYnJldyIKPTIwCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGVuZGVuY3lf bWFuYWdlciwgKiprd2RzKToKQEAgLTM4LDExICszNyw3IEBACiAgICAgICAgIGlmIHNlbGYudmVy c2lvbmxlc3MgYW5kIHNlbGYucHJlZmVyX3ZlcnNpb24gbm90IGluIFtQUkVGRVJfVkVSU0lPTj0K X0xBVEVTVF06CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oVU5LTk9XTl9QUkVGRVJfVkVS U0lPTl9NRVNTQUdFKQo9MjAKLSAgICAgICAgY2VsbGFyX3Jvb3QgPTNEIGt3ZHMuZ2V0KCdjZWxs YXInLCBOb25lKQotICAgICAgICBpZiBjZWxsYXJfcm9vdCBpcyBOb25lOgotICAgICAgICAgICAg Y2VsbGFyX3Jvb3QgPTNEIG9zLnBhdGguam9pbihERUZBVUxUX0hPTUVCUkVXX1JPT1QsICJDZWxs YXIiKQotCi0gICAgICAgIHNlbGYuY2VsbGFyX3Jvb3QgPTNEIGNlbGxhcl9yb290CisgICAgICAg IHNlbGYuX2luaXRfaG9tZWJyZXcoKiprd2RzKQo9MjAKICAgICBkZWYgcmVzb2x2ZShzZWxmLCBu YW1lLCB2ZXJzaW9uLCB0eXBlLCAqKmt3ZHMpOgogICAgICAgICBpZiB0eXBlICE9M0QgInBhY2th Z2UiOgpAQCAtNTMsNDEgKzQ4LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVy biBzZWxmLl9maW5kX2RlcF92ZXJzaW9uZWQobmFtZSwgdmVyc2lvbikKPTIwCi0gICAgZGVmIF9m aW5kX2RlcF92ZXJzaW9uZWQoc2VsZiwgbmFtZSwgdmVyc2lvbik6Ci0gICAgICAgIHJlY2lwZV9w YXRoID0zRCByZWNpcGVfY2VsbGFyX3BhdGgoc2VsZi5jZWxsYXJfcm9vdCwgbmFtZSwgdmVyc2lv bikKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9wYXRoKSBvciBub3Qgb3Mu cGF0aC5pc2RpcihyZWNpcGVfcGF0PQpoKToKLSAgICAgICAgICAgIHJldHVybiBJTkRFVEVSTUlO QVRFX0RFUEVOREVOQ1kKLQotICAgICAgICBjb21tYW5kcyA9M0QgYnVpbGRfZW52X3N0YXRlbWVu dHMoc2VsZi5jZWxsYXJfcm9vdCwgcmVjaXBlX3BhdGgsIHI9CmVsYXhlZD0zRFRydWUpCi0gICAg ICAgIHJldHVybiBIb21lYnJld0RlcGVuZGVuY3koY29tbWFuZHMpCi0KLSAgICBkZWYgX2ZpbmRf ZGVwX2RlZmF1bHQoc2VsZiwgbmFtZSwgdmVyc2lvbik6Ci0gICAgICAgIGluc3RhbGxlZF92ZXJz aW9ucyA9M0Qgc2VsZi5faW5zdGFsbGVkX3ZlcnNpb25zKG5hbWUpCi0gICAgICAgIGlmIG5vdCBp bnN0YWxsZWRfdmVyc2lvbnM6Ci0gICAgICAgICAgICByZXR1cm4gSU5ERVRFUk1JTkFURV9ERVBF TkRFTkNZCi0KLSAgICAgICAgIyBKdXN0IGdyYWIgbmV3ZXN0IGluc3RhbGxlZCB2ZXJzaW9uIC0g bWF5IG1ha2Ugc2Vuc2Ugc29tZSBkYXkgdG8gPQpmaW5kCi0gICAgICAgICMgdGhlIGxpbmtlZCB2 ZXJzaW9uIGluc3RlYWQuCi0gICAgICAgIGRlZmF1bHRfdmVyc2lvbiA9M0Qgc29ydGVkKGluc3Rh bGxlZF92ZXJzaW9ucywgcmV2ZXJzZT0zRFRydWUpWzBdCi0gICAgICAgIHJldHVybiBzZWxmLl9m aW5kX2RlcF92ZXJzaW9uZWQobmFtZSwgZGVmYXVsdF92ZXJzaW9uKQotCi0gICAgZGVmIF9pbnN0 YWxsZWRfdmVyc2lvbnMoc2VsZiwgcmVjaXBlKToKLSAgICAgICAgcmVjaXBlX2Jhc2VfcGF0aCA9 M0Qgb3MucGF0aC5qb2luKHNlbGYuY2VsbGFyX3Jvb3QsIHJlY2lwZSkKLSAgICAgICAgaWYgbm90 IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9iYXNlX3BhdGgpOgotICAgICAgICAgICAgcmV0dXJuIFtd Ci0KLSAgICAgICAgbmFtZXMgPTNEIG9zLmxpc3RkaXIocmVjaXBlX2Jhc2VfcGF0aCkKLSAgICAg ICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgbjogb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocmVj aXBlX2Jhc2VfcGF0PQpoLCBuKSksIG5hbWVzKQotCi0KLWNsYXNzIEhvbWVicmV3RGVwZW5kZW5j eShEZXBlbmRlbmN5KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kcyk6Ci0gICAg ICAgIHNlbGYuY29tbWFuZHMgPTNEIGNvbW1hbmRzCi0KLSAgICBkZWYgc2hlbGxfY29tbWFuZHMo c2VsZiwgcmVxdWlyZW1lbnQpOgotICAgICAgICByZXR1cm4gc2VsZi5jb21tYW5kcy5yZXBsYWNl KCJcbiIsICI7IikgKyAiXG4iCi0KPTIwCiBkZWYgX3N0cmluZ19hc19ib29sKCB2YWx1ZSApOgog ICAgIHJldHVybiBzdHIoIHZhbHVlICkubG93ZXIoKSA9M0Q9M0QgInRydWUiCgpkaWZmIC1yIDA5 NDIwNWI0NTFhYWNlZjc3N2MwYWYyMDA1NDJhNmM4MWViM2VmMGMgLXIgODM0OWI4YmI5OTZkZDgy YmVmZWFlMDI9CmRjZTcwYTZlNTA2NGQwY2FmIGxpYi9nYWxheHkvdG9vbHMvZGVwcy9yZXNvbHZl cnMvcmVzb2x2ZXJfbWl4aW5zLnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS90b29s cy9kZXBzL3Jlc29sdmVycy9yZXNvbHZlcl9taXhpbnMucHkKQEAgLTAsMCArMSw3MyBAQAoraW1w b3J0IG9zCitmcm9tIC4uYnJld19leHRzIGltcG9ydCBERUZBVUxUX0hPTUVCUkVXX1JPT1QsIHJl Y2lwZV9jZWxsYXJfcGF0aCwgYnVpbGRfZT0KbnZfc3RhdGVtZW50cworZnJvbSAuLnJlc29sdmVy cyBpbXBvcnQgSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZLCBEZXBlbmRlbmN5CisKKworY2xhc3Mg VXNlc0hvbWVicmV3TWl4aW46CisKKyAgICBkZWYgX2luaXRfaG9tZWJyZXcoc2VsZiwgKiprd2Rz KToKKyAgICAgICAgY2VsbGFyX3Jvb3QgPTNEIGt3ZHMuZ2V0KCdjZWxsYXInLCBOb25lKQorICAg ICAgICBpZiBjZWxsYXJfcm9vdCBpcyBOb25lOgorICAgICAgICAgICAgY2VsbGFyX3Jvb3QgPTNE IG9zLnBhdGguam9pbihERUZBVUxUX0hPTUVCUkVXX1JPT1QsICJDZWxsYXIiKQorCisgICAgICAg IHNlbGYuY2VsbGFyX3Jvb3QgPTNEIGNlbGxhcl9yb290CisKKyAgICBkZWYgX2ZpbmRfZGVwX3Zl cnNpb25lZChzZWxmLCBuYW1lLCB2ZXJzaW9uKToKKyAgICAgICAgcmVjaXBlX3BhdGggPTNEIHJl Y2lwZV9jZWxsYXJfcGF0aChzZWxmLmNlbGxhcl9yb290LCBuYW1lLCB2ZXJzaW9uKQorICAgICAg ICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVjaXBlX3BhdGgpIG9yIG5vdCBvcy5wYXRoLmlzZGly KHJlY2lwZV9wYXQ9CmgpOgorICAgICAgICAgICAgcmV0dXJuIElOREVURVJNSU5BVEVfREVQRU5E RU5DWQorCisgICAgICAgIGNvbW1hbmRzID0zRCBidWlsZF9lbnZfc3RhdGVtZW50cyhzZWxmLmNl bGxhcl9yb290LCByZWNpcGVfcGF0aCwgcj0KZWxheGVkPTNEVHJ1ZSkKKyAgICAgICAgcmV0dXJu IEhvbWVicmV3RGVwZW5kZW5jeShjb21tYW5kcykKKworICAgIGRlZiBfZmluZF9kZXBfZGVmYXVs dChzZWxmLCBuYW1lLCB2ZXJzaW9uKToKKyAgICAgICAgaW5zdGFsbGVkX3ZlcnNpb25zID0zRCBz ZWxmLl9pbnN0YWxsZWRfdmVyc2lvbnMobmFtZSkKKyAgICAgICAgaWYgbm90IGluc3RhbGxlZF92 ZXJzaW9uczoKKyAgICAgICAgICAgIHJldHVybiBJTkRFVEVSTUlOQVRFX0RFUEVOREVOQ1kKKwor ICAgICAgICAjIEp1c3QgZ3JhYiBuZXdlc3QgaW5zdGFsbGVkIHZlcnNpb24gLSBtYXkgbWFrZSBz ZW5zZSBzb21lIGRheSB0byA9CmZpbmQKKyAgICAgICAgIyB0aGUgbGlua2VkIHZlcnNpb24gaW5z dGVhZC4KKyAgICAgICAgZGVmYXVsdF92ZXJzaW9uID0zRCBzb3J0ZWQoaW5zdGFsbGVkX3ZlcnNp b25zLCByZXZlcnNlPTNEVHJ1ZSlbMF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfZGVwX3Zl cnNpb25lZChuYW1lLCBkZWZhdWx0X3ZlcnNpb24pCisKKyAgICBkZWYgX2luc3RhbGxlZF92ZXJz aW9ucyhzZWxmLCByZWNpcGUpOgorICAgICAgICByZWNpcGVfYmFzZV9wYXRoID0zRCBvcy5wYXRo LmpvaW4oc2VsZi5jZWxsYXJfcm9vdCwgcmVjaXBlKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5l eGlzdHMocmVjaXBlX2Jhc2VfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAg ICBuYW1lcyA9M0Qgb3MubGlzdGRpcihyZWNpcGVfYmFzZV9wYXRoKQorICAgICAgICByZXR1cm4g ZmlsdGVyKGxhbWJkYSBuOiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihyZWNpcGVfYmFzZV9w YXQ9CmgsIG4pKSwgbmFtZXMpCisKKworY2xhc3MgVXNlc1Rvb2xEZXBlbmRlbmN5RGlyTWl4aW46 CisKKyAgICBkZWYgX2luaXRfYmFzZV9wYXRoKHNlbGYsIGRlcGVuZGVuY3lfbWFuYWdlciwgKipr d2RzKToKKyAgICAgICAgc2VsZi5iYXNlX3BhdGggPTNEIG9zLnBhdGguYWJzcGF0aCgga3dkcy5n ZXQoJ2Jhc2VfcGF0aCcsIGRlcGVuZGVuPQpjeV9tYW5hZ2VyLmRlZmF1bHRfYmFzZV9wYXRoKSAp CisKKworY2xhc3MgVXNlc0luc3RhbGxlZFJlcG9zaXRvcmllc01peGluOgorCisgICAgZGVmIF9n ZXRfaW5zdGFsbGVkX2RlcGVuZGVuY3koIHNlbGYsIG5hbWUsIHR5cGUsIHZlcnNpb249M0ROb25l LCAqKmt3ZD0KcyApOgorICAgICAgICBpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmNpZXMgPTNEIGt3 ZHMuZ2V0KCJpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmM9CmllcyIsIFtdKQorICAgICAgICBmb3Ig aW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeSBpbiAoaW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jaWVz IG9yIFs9Cl0pOgorICAgICAgICAgICAgbmFtZV9hbmRfdHlwZV9lcXVhbCA9M0QgaW5zdGFsbGVk X3Rvb2xfZGVwZW5kZW5jeS5uYW1lID0zRD0zRCA9Cm5hbWUgYW5kIGluc3RhbGxlZF90b29sX2Rl cGVuZGVuY3kudHlwZSA9M0Q9M0QgdHlwZQorICAgICAgICAgICAgaWYgdmVyc2lvbjoKKyAgICAg ICAgICAgICAgICBpZiBuYW1lX2FuZF90eXBlX2VxdWFsIGFuZCBpbnN0YWxsZWRfdG9vbF9kZXBl bmRlbmN5LnZlcnNpPQpvbiA9M0Q9M0QgdmVyc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGluc3RhbGxlZF90b29sX2RlcGVuZGVuY3kKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgaWYgbmFtZV9hbmRfdHlwZV9lcXVhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGluc3RhbGxlZF90b29sX2RlcGVuZGVuY3kKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitj bGFzcyBIb21lYnJld0RlcGVuZGVuY3koRGVwZW5kZW5jeSk6CisKKyAgICBkZWYgX19pbml0X18o c2VsZiwgY29tbWFuZHMpOgorICAgICAgICBzZWxmLmNvbW1hbmRzID0zRCBjb21tYW5kcworCisg ICAgZGVmIHNoZWxsX2NvbW1hbmRzKHNlbGYsIHJlcXVpcmVtZW50KToKKyAgICAgICAgcmF3X2Nv bW1hbmRzID0zRCBzZWxmLmNvbW1hbmRzLnJlcGxhY2UoIlxuIiwgIjsiKQorICAgICAgICByZXR1 cm4gcmF3X2NvbW1hbmRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy biAiUGxhdGZvcm1CcmV3RGVwZW5kZW5jeVtjb21tYW5kcz0zRCVzXSIgJSBzZWxmLmNvbW1hbmRz CgpkaWZmIC1yIDA5NDIwNWI0NTFhYWNlZjc3N2MwYWYyMDA1NDJhNmM4MWViM2VmMGMgLXIgODM0 OWI4YmI5OTZkZDgyYmVmZWFlMDI9CmRjZTcwYTZlNTA2NGQwY2FmIGxpYi9nYWxheHkvdG9vbHMv ZGVwcy9yZXNvbHZlcnMvdG9vbF9zaGVkX3BhY2thZ2VzLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9v bHMvZGVwcy9yZXNvbHZlcnMvdG9vbF9zaGVkX3BhY2thZ2VzLnB5CisrKyBiL2xpYi9nYWxheHkv dG9vbHMvZGVwcy9yZXNvbHZlcnMvdG9vbF9zaGVkX3BhY2thZ2VzLnB5CkBAIC0xLDEwICsxLDEx IEBACiBmcm9tIG9zLnBhdGggaW1wb3J0IGFic3BhdGgsIGpvaW4sIGV4aXN0cwo9MjAKK2Zyb20g LnJlc29sdmVyX21peGlucyBpbXBvcnQgVXNlc0luc3RhbGxlZFJlcG9zaXRvcmllc01peGluCiBm cm9tIC5nYWxheHlfcGFja2FnZXMgaW1wb3J0IEdhbGF4eVBhY2thZ2VEZXBlbmRlbmN5UmVzb2x2 ZXIsIEdhbGF4eVBhY2thZz0KZURlcGVuZGVuY3kKIGZyb20gLi5yZXNvbHZlcnMgaW1wb3J0IElO REVURVJNSU5BVEVfREVQRU5ERU5DWQo9MjAKPTIwCi1jbGFzcyBUb29sU2hlZFBhY2thZ2VEZXBl bmRlbmN5UmVzb2x2ZXIoR2FsYXh5UGFja2FnZURlcGVuZGVuY3lSZXNvbHZlcik6CitjbGFzcyBU b29sU2hlZFBhY2thZ2VEZXBlbmRlbmN5UmVzb2x2ZXIoR2FsYXh5UGFja2FnZURlcGVuZGVuY3lS ZXNvbHZlciwgVT0Kc2VzSW5zdGFsbGVkUmVwb3NpdG9yaWVzTWl4aW4pOgogICAgIHJlc29sdmVy X3R5cGUgPTNEICJ0b29sX3NoZWRfcGFja2FnZXMiCj0yMAogICAgIGRlZiBfX2luaXRfXyhzZWxm LCBkZXBlbmRlbmN5X21hbmFnZXIsICoqa3dkcyk6CkBAIC0xMiw5ICsxMyw4IEBACj0yMAogICAg IGRlZiBfZmluZF9kZXBfdmVyc2lvbmVkKCBzZWxmLCBuYW1lLCB2ZXJzaW9uLCB0eXBlPTNEJ3Bh Y2thZ2UnLCAqKmt3ZHM9CiApOgogICAgICAgICBpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmN5ID0z RCBzZWxmLl9nZXRfaW5zdGFsbGVkX2RlcGVuZGVuY3koIG5hbWU9CiwgdHlwZSwgdmVyc2lvbj0z RHZlcnNpb24sICoqa3dkcyApCi0gICAgICAgIGJhc2VfcGF0aCA9M0Qgc2VsZi5iYXNlX3BhdGgK ICAgICAgICAgaWYgaW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeToKLSAgICAgICAgICAgIHBhdGgg PTNEIHNlbGYuX2dldF9wYWNrYWdlX2luc3RhbGxlZF9kZXBlbmRlbmN5X3BhdGgoIGluc3RhbGxl PQpkX3Rvb2xfZGVwZW5kZW5jeSwgYmFzZV9wYXRoLCBuYW1lLCB2ZXJzaW9uICkKKyAgICAgICAg ICAgIHBhdGggPTNEIHNlbGYuX2dldF9wYWNrYWdlX2luc3RhbGxlZF9kZXBlbmRlbmN5X3BhdGgo IGluc3RhbGxlPQpkX3Rvb2xfZGVwZW5kZW5jeSwgbmFtZSwgdmVyc2lvbiApCiAgICAgICAgICAg ICByZXR1cm4gc2VsZi5fZ2FsYXh5X3BhY2thZ2VfZGVwKHBhdGgsIHZlcnNpb24pCiAgICAgICAg IGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZCkBAIC0y OSwyNiArMjksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdhbGF4eVBhY2thZ2VE ZXBlbmRlbmN5KGRlcGVuZGVuY3kuc2NyaXB0LCBkZXBlPQpuZGVuY3kucGF0aCwgTm9uZSkKICAg ICAgICAgcmV0dXJuIElOREVURVJNSU5BVEVfREVQRU5ERU5DWQo9MjAKLSAgICBkZWYgX2dldF9p bnN0YWxsZWRfZGVwZW5kZW5jeSggc2VsZiwgbmFtZSwgdHlwZSwgdmVyc2lvbj0zRE5vbmUsICoq a3dkPQpzICk6Ci0gICAgICAgIGluc3RhbGxlZF90b29sX2RlcGVuZGVuY2llcyA9M0Qga3dkcy5n ZXQoImluc3RhbGxlZF90b29sX2RlcGVuZGVuYz0KaWVzIiwgW10pCi0gICAgICAgIGZvciBpbnN0 YWxsZWRfdG9vbF9kZXBlbmRlbmN5IGluIChpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmNpZXMgb3Ig Wz0KXSk6Ci0gICAgICAgICAgICBuYW1lX2FuZF90eXBlX2VxdWFsID0zRCBpbnN0YWxsZWRfdG9v bF9kZXBlbmRlbmN5Lm5hbWUgPTNEPTNEID0KbmFtZSBhbmQgaW5zdGFsbGVkX3Rvb2xfZGVwZW5k ZW5jeS50eXBlID0zRD0zRCB0eXBlCi0gICAgICAgICAgICBpZiB2ZXJzaW9uOgotICAgICAgICAg ICAgICAgIGlmIG5hbWVfYW5kX3R5cGVfZXF1YWwgYW5kIGluc3RhbGxlZF90b29sX2RlcGVuZGVu Y3kudmVyc2k9Cm9uID0zRD0zRCB2ZXJzaW9uOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g aW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg ICAgICBpZiBuYW1lX2FuZF90eXBlX2VxdWFsOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g aW5zdGFsbGVkX3Rvb2xfZGVwZW5kZW5jeQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVm IF9nZXRfcGFja2FnZV9pbnN0YWxsZWRfZGVwZW5kZW5jeV9wYXRoKCBzZWxmLCBpbnN0YWxsZWRf dG9vbF9kZXBlbj0KZGVuY3ksIGJhc2VfcGF0aCwgbmFtZSwgdmVyc2lvbiApOgorICAgIGRlZiBf Z2V0X3BhY2thZ2VfaW5zdGFsbGVkX2RlcGVuZGVuY3lfcGF0aCggc2VsZiwgaW5zdGFsbGVkX3Rv b2xfZGVwZW49CmRlbmN5LCBuYW1lLCB2ZXJzaW9uICk6CiAgICAgICAgIHRvb2xfc2hlZF9yZXBv c2l0b3J5ID0zRCBpbnN0YWxsZWRfdG9vbF9kZXBlbmRlbmN5LnRvb2xfc2hlZF9yZXBvcz0KaXRv cnkKLSAgICAgICAgcmV0dXJuIGpvaW4oIGJhc2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbF9zaGVkX3JlcG9zaXRvcnkub3duZXIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xfc2hlZF9yZXBvc2l0b3J5Lm5hbWUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xfc2hlZF9yZXBvc2l0b3J5Lmluc3RhbGxl ZF9jaGFuZ2VzZXRfcmV2aT0Kc2lvbiApCisgICAgICAgIGJhc2VfcGF0aCA9M0Qgc2VsZi5iYXNl X3BhdGgKKyAgICAgICAgcmV0dXJuIGpvaW4oCisgICAgICAgICAgICBiYXNlX3BhdGgsCisgICAg ICAgICAgICBuYW1lLAorICAgICAgICAgICAgdmVyc2lvbiwKKyAgICAgICAgICAgIHRvb2xfc2hl ZF9yZXBvc2l0b3J5Lm93bmVyLAorICAgICAgICAgICAgdG9vbF9zaGVkX3JlcG9zaXRvcnkubmFt ZSwKKyAgICAgICAgICAgIHRvb2xfc2hlZF9yZXBvc2l0b3J5Lmluc3RhbGxlZF9jaGFuZ2VzZXRf cmV2aXNpb24KKyAgICAgICAgKQo9MjAKICAgICBkZWYgX2dldF9zZXRfZW52aXJvbm1lbnRfaW5z dGFsbGVkX2RlcGVuZGVuY3lfc2NyaXB0X3BhdGgoIHNlbGYsIGluc3RhPQpsbGVkX3Rvb2xfZGVw ZW5kZW5jeSwgbmFtZSApOgogICAgICAgICB0b29sX3NoZWRfcmVwb3NpdG9yeSA9M0QgaW5zdGFs bGVkX3Rvb2xfZGVwZW5kZW5jeS50b29sX3NoZWRfcmVwb3M9Cml0b3J5CkBAIC02NCw0ICs1NSw1 IEBACiAgICAgICAgICAgICByZXR1cm4gR2FsYXh5UGFja2FnZURlcGVuZGVuY3koc2NyaXB0LCBw YXRoLCBOb25lKQogICAgICAgICByZXR1cm4gSU5ERVRFUk1JTkFURV9ERVBFTkRFTkNZCj0yMAor CiBfX2FsbF9fID0zRCBbVG9vbFNoZWRQYWNrYWdlRGVwZW5kZW5jeVJlc29sdmVyXQoKZGlmZiAt ciAwOTQyMDViNDUxYWFjZWY3NzdjMGFmMjAwNTQyYTZjODFlYjNlZjBjIC1yIDgzNDliOGJiOTk2 ZGQ4MmJlZmVhZTAyPQpkY2U3MGE2ZTUwNjRkMGNhZiBsaWIvZ2FsYXh5L3V0aWwvcGx1Z2luX2Nv bmZpZy5weQotLS0gYS9saWIvZ2FsYXh5L3V0aWwvcGx1Z2luX2NvbmZpZy5weQorKysgYi9saWIv Z2FsYXh5L3V0aWwvcGx1Z2luX2NvbmZpZy5weQpAQCAtMjQsNyArMjQsNyBAQAogICAgIGZvciBw bHVnaW5fbW9kdWxlIGluIHN1Ym1vZHVsZXMoIG1vZHVsZSApOgogICAgICAgICAjIEZJWE1FOiB0 aGlzIGlzIG5vdCBob3cgb25lIGlzIHN1cHBvc2UgdG8gdXNlIF9fYWxsX18gd2h5IGRpZCB5b3U9 CiBkbwogICAgICAgICAjIHRoaXMgcGFzdCBKb2huPwotICAgICAgICBmb3IgY2xhenogaW4gcGx1 Z2luX21vZHVsZS5fX2FsbF9fOgorICAgICAgICBmb3IgY2xhenogaW4gZ2V0YXR0ciggcGx1Z2lu X21vZHVsZSwgIl9fYWxsX18iLCBbXSApOgogICAgICAgICAgICAgcGx1Z2luX3R5cGUgPTNEIGdl dGF0dHIoIGNsYXp6LCBwbHVnaW5fdHlwZV9pZGVudGlmaWVyLCBOb25lICkKICAgICAgICAgICAg IGlmIHBsdWdpbl90eXBlOgogICAgICAgICAgICAgICAgIHBsdWdpbl9kaWN0WyBwbHVnaW5fdHlw ZSBdID0zRCBjbGF6egoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy YWwvY29tbWl0cy9hM2U3MjI1MDg2Y2IvCkNoYW5nZXNldDogICBhM2U3MjI1MDg2Y2IKVXNlcjog ICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDggMTg6MjM6MTUrMDA6 MDAKU3VtbWFyeTogICAgIE1pbm9yIGZpeGVzLCBjcnVmdC1yZW1vdmFsOyBFeHBsb3JpbmcgY29t bW9uIGRhdGFzZXQgY29udGFpbmVyPQogaW50ZXJmYWNlIGZvciBIaXN0b3JpZXMsIENvbGxlY3Rp b25zLCBMaWJyYXJpZXMKQWZmZWN0ZWQgIzogIDEwIGZpbGVzCgpkaWZmIC1yIDgzNDliOGJiOTk2 ZGQ4MmJlZmVhZTAyZGNlNzBhNmU1MDY0ZDBjYWYgLXIgYTNlNzIyNTA4NmNiYzQzMWY5OThiNGI9 CjE4NzhkNzU1Yjg1OTM3MTU2IGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKLS0t IGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L21h bmFnZXJzL2NvbGxlY3Rpb25zLnB5CkBAIC0zOCw3ICszOCw3IEBACj0yMAogICAgICAgICBzZWxm LmhkYV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCiAgICAgICAgIHNlbGYuaGlz dG9yeV9tYW5hZ2VyID0zRCBoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCi0gICAgICAg IHNlbGYudGFnX21hbmFnZXIgPTNEIHRhZ3MuVGFnc01hbmFnZXIoIGFwcCApCisgICAgICAgIHNl bGYudGFnX21hbmFnZXIgPTNEIHRhZ3MuVGFnTWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi5s ZGRhX21hbmFnZXIgPTNEIGxkZGFzLkxEREFNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICBkZWYgY3Jl YXRlKApAQCAtNjUsNiArNjUsNyBAQAogICAgICAgICAgICAgZWxlbWVudF9pZGVudGlmaWVycz0z RGVsZW1lbnRfaWRlbnRpZmllcnMsCiAgICAgICAgICAgICBlbGVtZW50cz0zRGVsZW1lbnRzLAog ICAgICAgICApCisKICAgICAgICAgaWYgaXNpbnN0YW5jZSggcGFyZW50LCBtb2RlbC5IaXN0b3J5 ICk6CiAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UgPTNEIHNlbGYubW9k ZWwuSGlzdG9yeURhdGFzZXRDb2xsZT0KY3Rpb25Bc3NvY2lhdGlvbigKICAgICAgICAgICAgICAg ICBjb2xsZWN0aW9uPTNEZGF0YXNldF9jb2xsZWN0aW9uLApAQCAtNzgsMTUgKzc5LDE4IEBACiAg ICAgICAgICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBvdXRwdXRfZGF0YXNldCAp Cj0yMAogICAgICAgICAgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZS5pbXBsaWNp dF9vdXRwdXRfbmFtZSA9M0QgaW1wbGk9CmNpdF9jb2xsZWN0aW9uX2luZm9bICJpbXBsaWNpdF9v dXRwdXRfbmFtZSIgXQorCiAgICAgICAgICAgICBsb2cuZGVidWcoIkNyZWF0ZWQgY29sbGVjdGlv biB3aXRoICVkIGVsZW1lbnRzIiAlICggbGVuKCBkYXRhcz0KZXRfY29sbGVjdGlvbl9pbnN0YW5j ZS5jb2xsZWN0aW9uLmVsZW1lbnRzICkgKSApCiAgICAgICAgICAgICAjIEhhbmRsZSBzZXR0aW5n IGhpZAogICAgICAgICAgICAgcGFyZW50LmFkZF9kYXRhc2V0X2NvbGxlY3Rpb24oIGRhdGFzZXRf Y29sbGVjdGlvbl9pbnN0YW5jZSApCisKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKCBwYXJlbnQs IG1vZGVsLkxpYnJhcnlGb2xkZXIgKToKICAgICAgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbl9p bnN0YW5jZSA9M0Qgc2VsZi5tb2RlbC5MaWJyYXJ5RGF0YXNldENvbGxlPQpjdGlvbkFzc29jaWF0 aW9uKAogICAgICAgICAgICAgICAgIGNvbGxlY3Rpb249M0RkYXRhc2V0X2NvbGxlY3Rpb24sCiAg ICAgICAgICAgICAgICAgZm9sZGVyPTNEcGFyZW50LAogICAgICAgICAgICAgICAgIG5hbWU9M0Ru YW1lLAogICAgICAgICAgICAgKQorCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtZXNzYWdl ID0zRCAiSW50ZXJuYWwgbG9naWMgZXJyb3IgLSBjcmVhdGUgY2FsbGVkIHdpdGggdW5rbm93bj0K IHBhcmVudCB0eXBlICVzIiAlIHR5cGUoIHBhcmVudCApCiAgICAgICAgICAgICBsb2cuZXhjZXB0 aW9uKCBtZXNzYWdlICkKCmRpZmYgLXIgODM0OWI4YmI5OTZkZDgyYmVmZWFlMDJkY2U3MGE2ZTUw NjRkMGNhZiAtciBhM2U3MjI1MDg2Y2JjNDMxZjk5OGI0Yj0KMTg3OGQ3NTViODU5MzcxNTYgbGli L2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9uc191dGlsLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFu YWdlcnMvY29sbGVjdGlvbnNfdXRpbC5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxl Y3Rpb25zX3V0aWwucHkKQEAgLTI4LDcgKzI4LDYgQEAKICAgICAgICAgZWxlbWVudF9pZGVudGlm aWVycz0zRHBheWxvYWQuZ2V0KCAiZWxlbWVudF9pZGVudGlmaWVycyIgKSwKICAgICAgICAgbmFt ZT0zRHBheWxvYWQuZ2V0KCAibmFtZSIsIE5vbmUgKSwKICAgICApCi0KICAgICByZXR1cm4gcGFy YW1zCj0yMAo9MjAKCmRpZmYgLXIgODM0OWI4YmI5OTZkZDgyYmVmZWFlMDJkY2U3MGE2ZTUwNjRk MGNhZiAtciBhM2U3MjI1MDg2Y2JjNDMxZjk5OGI0Yj0KMTg3OGQ3NTViODU5MzcxNTYgbGliL2dh bGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFz ZXRzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKQEAgLTE0LDcgKzE0 LDEwIEBACiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3MgRGF0YXNldE1hbmFnZXIoIGJhc2UuTW9kZWxNYW5h Z2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbEludGVyZmFjZSwgYmE9CnNlLlB1cmdhYmxlTW9kZWxJ bnRlcmZhY2UgKToKICAgICAiIiIKKyAgICBNYW5pcHVsYXRlIGRhdGFzZXRzOiB0aGUgY29tcG9u ZW50cyBjb250YWluZWQgaW4gRGF0YXNldEFzc29jaWF0aW9ucy9EPQphdGFzZXRJbnN0YW5jZXMv SERBcy9MRERBcworICAgPTIwCiAgICAgIiIiCisKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwu RGF0YXNldAogICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuRGF0YXNldC5jcmVhdGVf dGltZSwgKQogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdkYXRhc2V0JwoKZGlmZiAtciA4MzQ5 YjhiYjk5NmRkODJiZWZlYWUwMmRjZTcwYTZlNTA2NGQwY2FmIC1yIGEzZTcyMjUwODZjYmM0MzFm OTk4YjRiPQoxODc4ZDc1NWI4NTkzNzE1NiBsaWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKLS0t IGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMv aGRhcy5weQpAQCAtNTAsMTEgKzUwLDIxIEBACj0yMAogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRy YW5zLCBoaXN0b3J5PTNETm9uZSwgZGF0YXNldD0zRE5vbmUsIGZsdXNoPTNEVHJ1ZSw9CiAqKmt3 YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IGhkYSBvcHRpb25hbGx5 IHBhc3NpbmcgaW4gaXQncyBoaXN0b3J5IGFuZCBkYXRhc2V0LgorCisgICAgICAgIC4ubm90ZTog dG8gZXhwbGljaXRseSBzZXQgaGlkIHRvIGBOb25lYCB5b3UgbXVzdCBwYXNzIGluIGBoaWQ9M0RO bz0KbmVgLCBvdGhlcndpc2UKKyAgICAgICAgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldC4K ICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBkYXRhc2V0OgogICAgICAgICAgICAga3dhcmdz WyAnY3JlYXRlX2RhdGFzZXQnIF0gPTNEIFRydWUKICAgICAgICAgaGRhID0zRCBzdXBlciggSERB TWFuYWdlciwgc2VsZiApLmNyZWF0ZSggdHJhbnMsIGZsdXNoPTNEZmx1c2gsCiAgICAgICAgICAg ICBoaXN0b3J5PTNEaGlzdG9yeSwgZGF0YXNldD0zRGRhdGFzZXQsIHNhX3Nlc3Npb249M0R0cmFu cy5zYV9zZT0Kc3Npb24sICoqa3dhcmdzICkKKworICAgICAgICBpZiBoaXN0b3J5OgorICAgICAg ICAgICAgc2V0X2hpZCA9M0Qgbm90ICggJ2hpZCcgaW4ga3dhcmdzICkKKyAgICAgICAgICAgIGhp c3RvcnkuYWRkX2RhdGFzZXQoIGhkYSApCisgICAgICAgICNUT0RPOj8/IHNvbWUgaW50ZXJuYWwg c2FuaXR5IGNoZWNrIGhlcmUgKG9yIG1heWJlIGluIGFkZF9kYXRhc2V0KT0KIHRvIG1ha2Ugc3Vy ZSBoaWRzIGFyZSBub3QgZHVwZWQ/CisKICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGhk YSApCiAgICAgICAgIGlmIGZsdXNoOgogICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVz aCgpCgpkaWZmIC1yIDgzNDliOGJiOTk2ZGQ4MmJlZmVhZTAyZGNlNzBhNmU1MDY0ZDBjYWYgLXIg YTNlNzIyNTA4NmNiYzQzMWY5OThiNGI9CjE4NzhkNzU1Yjg1OTM3MTU2IGxpYi9nYWxheHkvbWFu YWdlcnMvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5 CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC0xMDIsNiArMTAyLDkg QEAKICAgICAgICAgIyBOb3cgbWFyayB0aGUgaGlzdG9yeSBhcyBwdXJnZWQKICAgICAgICAgc3Vw ZXIoIEhpc3RvcnlNYW5hZ2VyLCBzZWxmICkucHVyZ2UoIHRyYW5zLCBoaXN0b3J5LCBmbHVzaD0z RGZsdXNoPQosICoqa3dhcmdzICkKPTIwCisgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gY29udGVu dHMKKyAgID0yMAorCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2VyaWFsaXphdGlvbgogICAg ICNUT0RPOiBtb3ZlIHRvIHNlcmlhbGl6ZXIgKGkuZS4gaGlzdG9yeSB3aXRoIGNvbnRlbnRzIGF0 dHIpCiAgICAgZGVmIF9nZXRfaGlzdG9yeV9kYXRhKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgoK ZGlmZiAtciA4MzQ5YjhiYjk5NmRkODJiZWZlYWUwMmRjZTcwYTZlNTA2NGQwY2FmIC1yIGEzZTcy MjUwODZjYmM0MzFmOTk4YjRiPQoxODc4ZDc1NWI4NTkzNzE1NiBsaWIvZ2FsYXh5L3dlYi9iYXNl L2NvbnRyb2xsZXIucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvYmFzZS9jb250cm9sbGVyLnB5Cisr KyBiL2xpYi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxlci5weQpAQCAtMjUyLDI5ICsyNTIsMTEg QEAKICAgICAgICAgICAgIGNoZWNrX293bmVyc2hpcD0zRGNoZWNrX293bmVyc2hpcCwgY2hlY2tf YWNjZXNzaWJsZT0zRGNoZWNrX2FjPQpjZXNzaWJsZSwgZGVsZXRlZD0zRGRlbGV0ZWQgKQogICAg ICAgICBoaXN0b3J5ID0zRCBzZWxmLnNlY3VyaXR5X2NoZWNrKCB0cmFucywgaGlzdG9yeSwgY2hl Y2tfb3duZXJzaGlwLCA9CmNoZWNrX2FjY2Vzc2libGUgKQogICAgICAgICByZXR1cm4gaGlzdG9y eQotCi0gICAgZGVmIGdldF91c2VyX2hpc3Rvcmllcyggc2VsZiwgdHJhbnMsIHVzZXI9M0ROb25l LCBpbmNsdWRlX2RlbGV0ZWQ9M0RGYT0KbHNlLCBvbmx5X2RlbGV0ZWQ9M0RGYWxzZSApOgotICAg ICAgICAiIiIKLSAgICAgICAgR2V0IGFsbCB0aGUgaGlzdG9yaWVzIGZvciBhIGdpdmVuIHVzZXIg KGRlZmF1bHRpbmcgdG8gYHRyYW5zLnVzZXJgKQotICAgICAgICBvcmRlcmVkIGJ5IHVwZGF0ZSB0 aW1lIGFuZCBmaWx0ZXJlZCBvbiB3aGV0aGVyIHRoZXkndmUgYmVlbiBkZWxldGU9CmQuCi0gICAg ICAgICIiIgotICAgICAgICAjIGhhbmRsZSBkZWZhdWx0IGFuZC9vciBhbm9ueW1vdXMgdXNlciAo d2hpY2ggc3RpbGwgbWF5IG5vdCBoYXZlIGE9CiBoaXN0b3J5IHlldCkKLSAgICAgICAgdXNlciA9 M0QgdXNlciBvciB0cmFucy51c2VyCi0gICAgICAgIGlmIG5vdCB1c2VyOgotICAgICAgICAgICAg Y3VycmVudF9oaXN0b3J5ID0zRCB0cmFucy5nZXRfaGlzdG9yeSgpCi0gICAgICAgICAgICByZXR1 cm4gWyBjdXJyZW50X2hpc3RvcnkgXSBpZiBjdXJyZW50X2hpc3RvcnkgZWxzZSBbXQotCi0gICAg ICAgIGhpc3RvcnlfbW9kZWwgPTNEIHRyYW5zLm1vZGVsLkhpc3RvcnkKLSAgICAgICAgcXVlcnkg PTNEICggdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggaGlzdG9yeV9tb2RlbCApCi0gICAgICAgICAg ICAuZmlsdGVyKCBoaXN0b3J5X21vZGVsLnVzZXIgPTNEPTNEIHVzZXIgKQotICAgICAgICAgICAg Lm9yZGVyX2J5KCBkZXNjKCBoaXN0b3J5X21vZGVsLnRhYmxlLmMudXBkYXRlX3RpbWUgKSApICkK LSAgICAgICAgaWYgb25seV9kZWxldGVkOgotICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZp bHRlciggaGlzdG9yeV9tb2RlbC5kZWxldGVkID0zRD0zRCBUcnVlICkKLSAgICAgICAgZWxpZiBu b3QgaW5jbHVkZV9kZWxldGVkOgotICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlcigg aGlzdG9yeV9tb2RlbC5kZWxldGVkID0zRD0zRCBGYWxzZSApCi0KLSAgICAgICAgcmV0dXJuIHF1 ZXJ5LmFsbCgpCi0gICAgICAgICNVU0VEIElOOiBoaXN0b3J5LnB5LCA2NDAKKyNsaWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weTo1NTogICAgICAgIGhpc3QgPTNEIHNl bGYuZ2V0PQpfaGlzdG9yeSggdHJhbnMsIGlkc3RyICkKKyNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2FwaS9kYXRhc2V0X2NvbGxlY3Rpb25zLnB5OjQ0OiAgICAgICAgICAgIGhpc3RvPQpyeSA9 M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQsIGNoZWNrX293bmVyc2hpcD0z RFRydWUsIGNoZWNrX2E9CmNjZXNzaWJsZT0zREZhbHNlICkKKyNsaWIvZ2FsYXh5L3dlYmFwcHMv Z2FsYXh5L2FwaS93b3JrZmxvd3MucHk6MTUyOiAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlPQps Zi5nZXRfaGlzdG9yeSggdHJhbnMsIGZyb21faGlzdG9yeV9pZCwgY2hlY2tfb3duZXJzaGlwPTNE RmFsc2UsIGNoZWNrX2FjY2U9CnNzaWJsZT0zRFRydWUgKQorI2xpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvY29udHJvbGxlcnMvZGF0YXNldC5weTo5OTY6ICAgICAgICAgICAgaGlzdG9yeSA9Cj0z RCBzZWxmLmdldF9oaXN0b3J5KHRyYW5zLCBzb3VyY2VfaGlzdG9yeSkKKyMgYW5kIGFsbGwgb3Zl ciBoaXN0b3J5IGNvbnRyb2xsZXIKPTIwCiAgICAgZGVmIGdldF9oaXN0b3J5X2RhdGFzZXRzKCBz ZWxmLCB0cmFucywgaGlzdG9yeSwgc2hvd19kZWxldGVkPTNERmFsc2UsID0Kc2hvd19oaWRkZW49 M0RGYWxzZSwgc2hvd19wdXJnZWQ9M0RGYWxzZSApOgogICAgICAgICAiIiIgUmV0dXJucyBoaXN0 b3J5J3MgZGF0YXNldHMuICIiIgpAQCAtMjg5LDcgKzI3MSw5IEBACiAgICAgICAgIGlmIG5vdCBz aG93X3B1cmdlZDoKICAgICAgICAgICAgIHF1ZXJ5ID0zRCBxdWVyeS5maWx0ZXIoIHRyYW5zLm1v ZGVsLkRhdGFzZXQucHVyZ2VkID0zRD0zRCBGYWxzPQplICkKICAgICAgICAgcmV0dXJuIHF1ZXJ5 LmFsbCgpCi0KKyNsaWIvZ2FsYXh5L3Rvb2xzL2ltcF9leHAvX19pbml0X18ucHk6NDE3OiAgICAg ICAgZGF0YXNldHMgPTNEIHNlbGYuZ2V0X2hpPQpzdG9yeV9kYXRhc2V0cyggdHJhbnMsIGhpc3Rv cnkgKQorI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weTox MjgwOiAgICAgICAgZGF0YXNldHMgPQo9M0Qgc2VsZi5nZXRfaGlzdG9yeV9kYXRhc2V0cyggdHJh bnMsIGhpc3RvcnkgKQorI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcGFn ZS5weTo3NDI6ICAgICAgICBkYXRhc2V0cyA9M0Qgc2U9CmxmLmdldF9oaXN0b3J5X2RhdGFzZXRz KCB0cmFucywgaGlzdG9yeSApCj0yMAogY2xhc3MgRXhwb3J0c0hpc3RvcnlNaXhpbjoKPTIwCgpk aWZmIC1yIDgzNDliOGJiOTk2ZGQ4MmJlZmVhZTAyZGNlNzBhNmU1MDY0ZDBjYWYgLXIgYTNlNzIy NTA4NmNiYzQzMWY5OThiNGI9CjE4NzhkNzU1Yjg1OTM3MTU2IGxpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvYXBpL2RhdGFzZXRfY29sbGVjdGlvbnMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBz L2dhbGF4eS9hcGkvZGF0YXNldF9jb2xsZWN0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9kYXRhc2V0X2NvbGxlY3Rpb25zLnB5CkBAIC01Miw3ICs1Miw4IEBACiAg ICAgICAgICAgICB0cmFucy5zdGF0dXMgPTNEIDUwMQogICAgICAgICAgICAgcmV0dXJuCiAgICAg ICAgIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSA9M0Qgc2VsZi5fX3NlcnZpY2UoIHRyYW5z ICkuY3JlYXRlKCB0cj0KYW5zPTNEdHJhbnMsICoqY3JlYXRlX3BhcmFtcyApCi0gICAgICAgIHJl dHVybiBkaWN0aWZ5X2RhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSggZGF0YXNldF9jb2xsZWN0 aW9uX2lucz0KdGFuY2UsIHNlY3VyaXR5PTNEdHJhbnMuc2VjdXJpdHksIHBhcmVudD0zRGNyZWF0 ZV9wYXJhbXNbICJwYXJlbnQiIF0gKQorICAgICAgICByZXR1cm4gZGljdGlmeV9kYXRhc2V0X2Nv bGxlY3Rpb25faW5zdGFuY2UoIGRhdGFzZXRfY29sbGVjdGlvbl9pbnM9CnRhbmNlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5PTNE dHJhbnMuc2VjdXI9Cml0eSwgcGFyZW50PTNEY3JlYXRlX3BhcmFtc1sgInBhcmVudCIgXSApCj0y MAogICAgIEBleHBvc2VfYXBpCiAgICAgZGVmIHNob3coIHNlbGYsIHRyYW5zLCBpbnN0YW5jZV90 eXBlLCBpZCwgKiprd2RzICk6CgpkaWZmIC1yIDgzNDliOGJiOTk2ZGQ4MmJlZmVhZTAyZGNlNzBh NmU1MDY0ZDBjYWYgLXIgYTNlNzIyNTA4NmNiYzQzMWY5OThiNGI9CjE4NzhkNzU1Yjg1OTM3MTU2 IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weQotLS0gYS9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2hpc3RvcnkucHkKKysrIGIvbGli L2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9oaXN0b3J5LnB5CkBAIC02NDAsMTEg KzY0MCwxNSBAQAogICAgICAgICBpbmNsdWRlX2RlbGV0ZWRfaGlzdG9yaWVzID0zRCBnYWxheHku dXRpbC5zdHJpbmdfYXNfYm9vbCggaW5jbHVkZV89CmRlbGV0ZWRfaGlzdG9yaWVzICkKICAgICAg ICAgb3JkZXIgPTNEIG9yZGVyIGlmIG9yZGVyIGluICggJ3VwZGF0ZScsICduYW1lJywgJ3NpemUn ICkgZWxzZSAndXBkPQphdGUnCj0yMAorICAgICAgICBkZWxldGVkX2ZpbHRlciA9M0QgTm9uZQor ICAgICAgICBpZiBub3QgaW5jbHVkZV9kZWxldGVkX2hpc3RvcmllczoKKyAgICAgICAgICAgIGRl bGV0ZWRfZmlsdGVyID0zRCBtb2RlbC5IaXN0b3J5LmRlbGV0ZWQgPTNEPTNEIEZhbHNlCisKICAg ICAgICAgY3VycmVudF9oaXN0b3J5ID0zRCB0cmFucy5nZXRfaGlzdG9yeSgpCiAgICAgICAgIGN1 cnJlbnRfaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBjdXJyZW50X2hp c3RvcnkuaT0KZCApIGlmIGN1cnJlbnRfaGlzdG9yeSBlbHNlIE5vbmUKPTIwCiAgICAgICAgIGhp c3RvcnlfZGljdGlvbmFyaWVzID0zRCBbXQotICAgICAgICBmb3IgaGlzdG9yeSBpbiBzZWxmLmdl dF91c2VyX2hpc3RvcmllcyggdHJhbnMsIHVzZXI9M0R0cmFucy51c2VyLCA9CmluY2x1ZGVfZGVs ZXRlZD0zRGluY2x1ZGVfZGVsZXRlZF9oaXN0b3JpZXMgKToKKyAgICAgICAgZm9yIGhpc3Rvcnkg aW4gc2VsZi5tZ3JzLmhpc3Rvcmllcy5ieV91c2VyKCB0cmFucywgdHJhbnMudXNlciwgZmlsPQp0 ZXJzPTNEZGVsZXRlZF9maWx0ZXIgKToKICAgICAgICAgICAgIGhpc3RvcnlfZGljdGlvbmFyeSA9 M0Qgc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpPQpldyggdHJhbnMsIGhp c3RvcnksIHZpZXc9M0QnZGV0YWlsZWQnICkKICAgICAgICAgICAgIGhpc3RvcnlfZGljdGlvbmFy aWVzLmFwcGVuZCggaGlzdG9yeV9kaWN0aW9uYXJ5ICkKPTIwCgpkaWZmIC1yIDgzNDliOGJiOTk2 ZGQ4MmJlZmVhZTAyZGNlNzBhNmU1MDY0ZDBjYWYgLXIgYTNlNzIyNTA4NmNiYzQzMWY5OThiNGI9 CjE4NzhkNzU1Yjg1OTM3MTU2IHRlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0NvbGxlY3Rpb25NYW5h Z2VyLnB5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC91bml0L21hbmFnZXJzL3Rlc3RfQ29sbGVj dGlvbk1hbmFnZXIucHkKQEAgLTAsMCArMSwxNzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor IiIiCisiIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHBwcmludAoraW1wb3J0IHVu aXR0ZXN0CisKK19fR0FMQVhZX1JPT1RfXyA9M0Qgb3MuZ2V0Y3dkKCkgKyAnLy4uLy4uLy4uLycK K3N5cy5wYXRoLmFwcGVuZCggX19HQUxBWFlfUk9PVF9fICsgJ2xpYicgKQorCitmcm9tIGdhbGF4 eSBpbXBvcnQgZWdncworZWdncy5yZXF1aXJlKCAnU1FMQWxjaGVteSA+PTNEIDAuNCcgKQoraW1w b3J0IHNxbGFsY2hlbXkKKworZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCitmcm9tIGdhbGF4eSBp bXBvcnQgZXhjZXB0aW9ucworCitpbXBvcnQgbW9jaworZnJvbSB0ZXN0X01vZGVsTWFuYWdlciBp bXBvcnQgQmFzZVRlc3RDYXNlCitmcm9tIGdhbGF4eS5tYW5hZ2Vycy5kYXRhc2V0cyBpbXBvcnQg RGF0YXNldE1hbmFnZXIKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzLmhpc3RvcmllcyBpbXBvcnQgSGlz dG9yeU1hbmFnZXIKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzLmhkYXMgaW1wb3J0IEhEQU1hbmFnZXIK KworZnJvbSBnYWxheHkubWFuYWdlcnMuY29sbGVjdGlvbnMgaW1wb3J0IERhdGFzZXRDb2xsZWN0 aW9uTWFuYWdlcgorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitkZWZhdWx0X3Bhc3N3b3JkID0zRCAnMTIzNDU2 JwordXNlcjJfZGF0YSA9M0QgZGljdCggZW1haWw9M0QndXNlcjJAdXNlcjIudXNlcjInLCB1c2Vy bmFtZT0zRCd1c2VyMicsIHBhc3M9CndvcmQ9M0RkZWZhdWx0X3Bhc3N3b3JkICkKK3VzZXIzX2Rh dGEgPTNEIGRpY3QoIGVtYWlsPTNEJ3VzZXIzQHVzZXIzLnVzZXIzJywgdXNlcm5hbWU9M0QndXNl cjMnLCBwYXNzPQp3b3JkPTNEZGVmYXVsdF9wYXNzd29yZCApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2Ns YXNzIERhdGFzZXRDb2xsZWN0aW9uTWFuYWdlclRlc3RDYXNlKCBCYXNlVGVzdENhc2UgKToKKwor ICAgIGRlZiBzZXRfdXBfbWFuYWdlcnMoIHNlbGYgKToKKyAgICAgICAgc3VwZXIoIERhdGFzZXRD b2xsZWN0aW9uTWFuYWdlclRlc3RDYXNlLCBzZWxmICkuc2V0X3VwX21hbmFnZXJzKCkKKyAgICAg ICAgc2VsZi5kYXRhc2V0X21nciA9M0QgRGF0YXNldE1hbmFnZXIoIHNlbGYuYXBwICkKKyAgICAg ICAgc2VsZi5oZGFfbWdyID0zRCBIREFNYW5hZ2VyKCBzZWxmLmFwcCApCisgICAgICAgIHNlbGYu aGlzdG9yeV9tZ3IgPTNEIEhpc3RvcnlNYW5hZ2VyKCBzZWxmLmFwcCApCisgICAgICAgIHNlbGYu Y29sbGVjdGlvbl9tZ3IgPTNEIERhdGFzZXRDb2xsZWN0aW9uTWFuYWdlciggc2VsZi5hcHAgKQor CisgICAgZGVmIGJ1aWxkX2VsZW1lbnRfaWRlbnRpZmllcnMoIHNlbGYsIGVsZW1lbnRzICk6Cisg ICAgICAgIGlkZW50aWZpZXJfbGlzdCA9M0QgW10KKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxl bWVudHM6CisgICAgICAgICAgICBzcmMgPTNEICdoZGEnCisgICAgICAgICAgICAjaWYgaXNpbnN0 YW5jZSggZWxlbWVudCwgbW9kZWwuRGF0YXNldENvbGxlY3Rpb24gKToKKyAgICAgICAgICAgICMg ICAgc3JjID0zRCAnY29sbGVjdGlvbicjPworICAgICAgICAgICAgI2VsaWYgaXNpbnN0YW5jZSgg ZWxlbWVudCwgbW9kZWwuTGlicmFyeURhdGFzZXREYXRhc2V0QXNzb2NpYXQ9CmlvbiApOgorICAg ICAgICAgICAgIyAgICBzcmMgPTNEICdsZGRhJyM/CisgICAgICAgICAgICBlbmNvZGVkX2lkID0z RCBzZWxmLnRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggZWxlbWVudC5pZCApCisgICAgICAgICAg ICBpZGVudGlmaWVyX2xpc3QuYXBwZW5kKCBkaWN0KCBzcmM9M0RzcmMsIG5hbWU9M0RlbGVtZW50 Lm5hbWUsID0KaWQ9M0RlbmNvZGVkX2lkICkgKQorICAgICAgICByZXR1cm4gaWRlbnRpZmllcl9s aXN0CisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2ltcGxlX2xpc3QoIHNlbGYgKToKKyAgICAgICAg b3duZXIgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIyX2RhdGEg KQorCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tZ3IuY3JlYXRlKCBzZWxmLnRy YW5zLCBuYW1lPTNEJ2hpc3RvcnkxJz0KLCB1c2VyPTNEb3duZXIgKQorCisgICAgICAgIGhkYTEg PTNEIHNlbGYuaGRhX21nci5jcmVhdGUoIHNlbGYudHJhbnMsIG5hbWU9M0Qnb25lJywKKyAgICAg ICAgICAgIGhpc3Rvcnk9M0RoaXN0b3J5LCBkYXRhc2V0PTNEc2VsZi5kYXRhc2V0X21nci5jcmVh dGUoIHNlbGYudHJhPQpucyApICkKKyAgICAgICAgaGRhMiA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0 ZSggc2VsZi50cmFucywgbmFtZT0zRCd0d28nLAorICAgICAgICAgICAgaGlzdG9yeT0zRGhpc3Rv cnksIGRhdGFzZXQ9M0RzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmE9Cm5zICkgKQor ICAgICAgICBoZGEzID0zRCBzZWxmLmhkYV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBuYW1lPTNE J3RocmVlJywKKyAgICAgICAgICAgIGhpc3Rvcnk9M0RoaXN0b3J5LCBkYXRhc2V0PTNEc2VsZi5k YXRhc2V0X21nci5jcmVhdGUoIHNlbGYudHJhPQpucyApICkKKworICAgICAgICBzZWxmLmxvZygg InNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIG5ldyBDb2xsZWN0aW9uIHZpYSBpZHMiICkKKyAg ICAgICAgZWxlbWVudF9pZGVudGlmaWVycyA9M0Qgc2VsZi5idWlsZF9lbGVtZW50X2lkZW50aWZp ZXJzKCBbIGhkYTEsIGhkPQphMiwgaGRhMyBdICkKKyAgICAgICAgaGRjYSA9M0Qgc2VsZi5jb2xs ZWN0aW9uX21nci5jcmVhdGUoIHNlbGYudHJhbnMsIGhpc3RvcnksICd0ZXN0IGNvPQpsbGVjdGlv bicsICdsaXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bGVtZW50X2lkZW50aWZpZXJzPTNEZWxlbWVudF9pPQpkZW50aWZpZXJzICkKKyAgICAgICAgc2Vs Zi5hc3NlcnRJc0luc3RhbmNlKCBoZGNhLCBtb2RlbC5IaXN0b3J5RGF0YXNldENvbGxlY3Rpb25B c3NvY2lhPQp0aW9uICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggaGRjYS5uYW1lLCAndGVz dCBjb2xsZWN0aW9uJyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGhkY2EuaGlkLCA0ICkK KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSggaGRjYS5kZWxldGVkICkKKyAgICAgICAgc2VsZi5h c3NlcnRUcnVlKCBoZGNhLnZpc2libGUgKQorCisgICAgICAgICNwcmludCAnaGRjYSBkaXI6Jwor ICAgICAgICAjZm9yIGsgaW4gZGlyKCBoZGNhICk6CisgICAgICAgICMgICAgcHJpbnQgaywgZ2V0 YXR0ciggaGRjYSwgaywgJyg/KScgKQorCisgICAgICAgIHNlbGYubG9nKCAic2hvdWxkIGNvbnRh aW4gYW4gdW5kZXJseWluZywgd2VsbC1mb3JtZWQgRGF0YXNldENvbGxlYz0KdGlvbiIgKQorICAg ICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoIGhkY2EuY29sbGVjdGlvbiwgbW9kZWwuRGF0YXNl dENvbGxlY3Rpb24gKQorICAgICAgICBjb2xsZWN0aW9uID0zRCBoZGNhLmNvbGxlY3Rpb24KKyAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbCggY29sbGVjdGlvbi5jb2xsZWN0aW9uX3R5cGUsICdsaXN0 JyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGNvbGxlY3Rpb24uc3RhdGUsICdvaycgKQor ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBsZW4oIGNvbGxlY3Rpb24uZGF0YXNldF9pbnN0YW5j ZXMgKSwgMyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGxlbiggY29sbGVjdGlvbi5lbGVt ZW50cyApLCAzICkKKworICAgICAgICAjcHJpbnQgJ2hkY2EuY29sbGVjdGlvbiBkaXI6JworICAg ICAgICAjZm9yIGsgaW4gZGlyKCBoZGNhLmNvbGxlY3Rpb24gKToKKyAgICAgICAgIyAgICBwcmlu dCBrLCBnZXRhdHRyKCBoZGNhLmNvbGxlY3Rpb24sIGssICcoPyknICkKKworICAgICAgICAjZWxl bWVudHMgPTNEIGNvbGxlY3Rpb24uZWxlbWVudHMKKyAgICAgICAgI3ByaW50ICdoZGNhLmNvbGxl Y3Rpb24gZWxlbWVudCBkaXI6JworICAgICAgICAjZm9yIGsgaW4gZGlyKCBlbGVtZW50c1swXSAp OgorICAgICAgICAjICAgIHByaW50IGssIGdldGF0dHIoIGVsZW1lbnRzWzBdLCBrLCAnKD8pJyAp CisKKyAgICAgICAgc2VsZi5sb2coICJhbmQgdGhhdCBjb2xsZWN0aW9uIHNob3VsZCBoYXZlIHRo cmVlIHdlbGwtZm9ybWVkIEVsZW1lPQpudHMiICkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3Rh bmNlKCBjb2xsZWN0aW9uLmVsZW1lbnRzWzBdLCBtb2RlbC5EYXRhc2V0Q29sbGVjPQp0aW9uRWxl bWVudCApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGNvbGxlY3Rpb24uZWxlbWVudHNbMF0u ZWxlbWVudF9pZGVudGlmaWVyLCAnb25lJz0KICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgg Y29sbGVjdGlvbi5lbGVtZW50c1swXS5lbGVtZW50X2luZGV4LCAwICkKKyAgICAgICAgc2VsZi5h c3NlcnRFcXVhbCggY29sbGVjdGlvbi5lbGVtZW50c1swXS5lbGVtZW50X3R5cGUsICdoZGEnICkK KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggY29sbGVjdGlvbi5lbGVtZW50c1swXS5lbGVtZW50 X29iamVjdCwgaGRhMSApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCBjb2xsZWN0 aW9uLmVsZW1lbnRzWzFdLCBtb2RlbC5EYXRhc2V0Q29sbGVjPQp0aW9uRWxlbWVudCApCisgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGNvbGxlY3Rpb24uZWxlbWVudHNbMV0uZWxlbWVudF9pZGVu dGlmaWVyLCAndHdvJz0KICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggY29sbGVjdGlvbi5l bGVtZW50c1sxXS5lbGVtZW50X2luZGV4LCAxICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgg Y29sbGVjdGlvbi5lbGVtZW50c1sxXS5lbGVtZW50X3R5cGUsICdoZGEnICkKKyAgICAgICAgc2Vs Zi5hc3NlcnRFcXVhbCggY29sbGVjdGlvbi5lbGVtZW50c1sxXS5lbGVtZW50X29iamVjdCwgaGRh MiApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCBjb2xsZWN0aW9uLmVsZW1lbnRz WzJdLCBtb2RlbC5EYXRhc2V0Q29sbGVjPQp0aW9uRWxlbWVudCApCisgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwoIGNvbGxlY3Rpb24uZWxlbWVudHNbMl0uZWxlbWVudF9pZGVudGlmaWVyLCAndGhy ZT0KZScgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBjb2xsZWN0aW9uLmVsZW1lbnRzWzJd LmVsZW1lbnRfaW5kZXgsIDIgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBjb2xsZWN0aW9u LmVsZW1lbnRzWzJdLmVsZW1lbnRfdHlwZSwgJ2hkYScgKQorICAgICAgICBzZWxmLmFzc2VydEVx dWFsKCBjb2xsZWN0aW9uLmVsZW1lbnRzWzJdLmVsZW1lbnRfb2JqZWN0LCBoZGEzICkKKworICAg ICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIG5ldyBDb2xsZWN0aW9u IHZpYSBvYmplY3RzIiApCisgICAgICAgIGVsZW1lbnRzID0zRCBkaWN0KCBvbmU9M0RoZGExLCB0 d289M0RoZGEyLCB0aHJlZT0zRGhkYTMgKQorICAgICAgICBoZGNhMiA9M0Qgc2VsZi5jb2xsZWN0 aW9uX21nci5jcmVhdGUoIHNlbGYudHJhbnMsIGhpc3RvcnksICd0ZXN0IGM9Cm9sbGVjdGlvbiAy JywgJ2xpc3QnLCBlbGVtZW50cz0zRGVsZW1lbnRzICkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0lu c3RhbmNlKCBoZGNhMiwgbW9kZWwuSGlzdG9yeURhdGFzZXRDb2xsZWN0aW9uQXNzb2NpPQphdGlv biApCisKKyAgICAjZGVmIHRlc3RfYmFzZSggc2VsZiApOgorICAgICMgICAgZGF0YXNldDEgPTNE IHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKKyAgICAjICAgIGRhdGFzZXQy ID0zRCBzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyApCisgICAgIworICAgICMg ICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBxdWVyeSIgKQorICAgICMgICAgZGF0YXNl dHMgPTNEIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuRGF0YXNldCApLmFsbCgp CisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYu dHJhbnMgKSwgZGF0YXNldHMgKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRh c2V0X21nci5vbmUoIHNlbGYudHJhbnMsIGZpbHRlcnM9M0QoIG09Cm9kZWwuRGF0YXNldC5pZCA9 M0Q9M0QgZGF0YXNldDEuaWQgKSApLCBkYXRhc2V0MSApCisgICAgIyAgICBzZWxmLmFzc2VydEVx dWFsKCBzZWxmLmRhdGFzZXRfbWdyLmJ5X2lkKCBzZWxmLnRyYW5zLCBkYXRhc2V0MS5pZD0KICks IGRhdGFzZXQxICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3Iu YnlfaWRzKCBzZWxmLnRyYW5zLCBbIGRhdGFzZXQyPQouaWQsIGRhdGFzZXQxLmlkIF0gKSwgWyBk YXRhc2V0MiwgZGF0YXNldDEgXSApCisgICAgIworICAgICMgICAgc2VsZi5sb2coICJzaG91bGQg YmUgYWJsZSB0byBsaW1pdCBhbmQgb2Zmc2V0IiApCisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFs KCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYudHJhbnMsIGxpbWl0PTNEMSApLD0KIGRhdGFz ZXRzWzA6MV0gKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5s aXN0KCBzZWxmLnRyYW5zLCBvZmZzZXQ9M0QxICk9CiwgZGF0YXNldHNbMTpdICkKKyAgICAjICAg IHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCggc2VsZi50cmFucywgbGlt aXQ9M0QxLCBvPQpmZnNldD0zRDEgKSwgZGF0YXNldHNbMToyXSApCisgICAgIworICAgICMgICAg c2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBzZWxmLnRyYW5zLCBsaW1p dD0zRDAgKSw9CiBbXSApCisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRf bWdyLmxpc3QoIHNlbGYudHJhbnMsIG9mZnNldD0zRDMgKT0KLCBbXSApCisgICAgIworICAgICMg ICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBvcmRlciIgKQorICAgICMgICAgc2VsZi5h c3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBzZWxmLnRyYW5zLCBvcmRlcl9ieT0z RHM9CnFsYWxjaGVteS5kZXNjKCBtb2RlbC5EYXRhc2V0LmNyZWF0ZV90aW1lICkgKSwKKyAgICAj ICAgICAgICBbIGRhdGFzZXQyLCBkYXRhc2V0MSBdICkKKyAgICAjCisgICAgI2RlZiB0ZXN0X2Rl bGV0ZSggc2VsZiApOgorICAgICMgICAgaXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRl KCBzZWxmLnRyYW5zICkKKyAgICAjCisgICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxl IHRvIGRlbGV0ZSBhbmQgdW5kZWxldGUgYW4gaGRhIiApCisgICAgIyAgICBzZWxmLmFzc2VydEZh bHNlKCBpdGVtMS5kZWxldGVkICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0 YXNldF9tZ3IuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLCBpPQp0ZW0xICkKKyAgICAjICAg IHNlbGYuYXNzZXJ0VHJ1ZSggaXRlbTEuZGVsZXRlZCApCisgICAgIyAgICBzZWxmLmFzc2VydEVx dWFsKCBzZWxmLmRhdGFzZXRfbWdyLnVuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLD0KIGl0 ZW0xICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLmRlbGV0ZWQgKQorICAgICMK KyAgICAjZGVmIHRlc3RfcHVyZ2VfYWxsb3dlZCggc2VsZiApOgorICAgICMgICAgc2VsZi50cmFu cy5hcHAuY29uZmlnLmFsbG93X3VzZXJfZGF0YXNldF9wdXJnZSA9M0QgVHJ1ZQorICAgICMgICAg aXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKKyAgICAjCisg ICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBwdXJnZSBhbiBoZGEgaWYgY29uZmlnIGRvZXMgYWxs b3ciICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLnB1cmdlZCApCisgICAgIyAg ICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLnB1cmdlKCBzZWxmLnRyYW5zLCBp dGVtMSApLCBpdD0KZW0xICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1ZSggaXRlbTEucHVyZ2Vk ICkKKyAgICAjCisgICAgI2RlZiB0ZXN0X3B1cmdlX25vdF9hbGxvd2VkKCBzZWxmICk6CisgICAg IyAgICBzZWxmLnRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRhc2V0X3B1cmdlID0zRCBG YWxzZQorICAgICMgICAgaXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRy YW5zICkKKyAgICAjCisgICAgIyAgICBzZWxmLmxvZyggInNob3VsZCByYWlzZSBhbiBlcnJvciB3 aGVuIHB1cmdpbmcgYW4gaGRhIGlmIGNvbmZpZyBkbz0KZXMgbm90IGFsbG93IiApCisgICAgIyAg ICBzZWxmLmFzc2VydEZhbHNlKCBpdGVtMS5wdXJnZWQgKQorICAgICMgICAgc2VsZi5hc3NlcnRS YWlzZXMoIGV4Y2VwdGlvbnMuQ29uZmlnRG9lc05vdEFsbG93RXhjZXB0aW9uLCBzZWxmLmQ9CmF0 YXNldF9tZ3IucHVyZ2UsIHNlbGYudHJhbnMsIGl0ZW0xICkKKyAgICAjICAgIHNlbGYuYXNzZXJ0 RmFsc2UoIGl0ZW0xLnB1cmdlZCApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2lmIF9fbmFtZV9fID0zRD0z RCAnX19tYWluX18nOgorICAgICMgb3IgbW9yZSBnZW5lcmFsbHksIG5vc2V0ZXN0cyB0ZXN0X3Jl c291cmNlbWFuYWdlcnMucHkgLXMgLXYKKyAgICB1bml0dGVzdC5tYWluKCkKCmRpZmYgLXIgODM0 OWI4YmI5OTZkZDgyYmVmZWFlMDJkY2U3MGE2ZTUwNjRkMGNhZiAtciBhM2U3MjI1MDg2Y2JjNDMx Zjk5OGI0Yj0KMTg3OGQ3NTViODU5MzcxNTYgdGVzdC91bml0L21hbmFnZXJzL3Rlc3RfSERBTWFu YWdlci5weQotLS0gYS90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9IREFNYW5hZ2VyLnB5CisrKyBi L3Rlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hEQU1hbmFnZXIucHkKQEAgLTcxLDcgKzcxLDcgQEAK ICAgICAgICAgZGF0YXNldDEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5z ICkKPTIwCiAgICAgICAgIHNlbGYubG9nKCAic2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgbmV3 IEhEQSB3aXRoIGEgc3BlY2lmaWVkIGhpcz0KdG9yeSBhbmQgZGF0YXNldCIgKQotICAgICAgICBo ZGExID0zRCBzZWxmLmhkYV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBoaXN0b3J5PTNEaGlzdG9y eTEsIGRhdGE9CnNldD0zRGRhdGFzZXQxLCBoaWQ9M0QxICkKKyAgICAgICAgaGRhMSA9M0Qgc2Vs Zi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeT0zRGhpc3RvcnkxLCBkYXRhPQpz ZXQ9M0RkYXRhc2V0MSApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggaGRhMSwgbW9k ZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo IGhkYTEsIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuSGlzdG9yeT0KRGF0YXNl dEFzc29jaWF0aW9uICkuZ2V0KCBoZGExLmlkICkgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs KCBoZGExLmhpc3RvcnksIGhpc3RvcnkxICkKQEAgLTc5LDE4ICs3OSwxOCBAQAogICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKCBoZGExLmhpZCwgMSApCj0yMAogICAgICAgICBzZWxmLmxvZyggInNo b3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIG5ldyBIREEgd2l0aCBvbmx5IGEgc3BlY2lmaWU9CmQg aGlzdG9yeSBhbmQgbm8gZGF0YXNldCIgKQotICAgICAgICBoZGEyID0zRCBzZWxmLmhkYV9tZ3Iu Y3JlYXRlKCBzZWxmLnRyYW5zLCBoaXN0b3J5PTNEaGlzdG9yeTEsIGhpZD0KPTNEMiApCisgICAg ICAgIGhkYTIgPTNEIHNlbGYuaGRhX21nci5jcmVhdGUoIHNlbGYudHJhbnMsIGhpc3Rvcnk9M0Ro aXN0b3J5MSApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggaGRhMiwgbW9kZWwuSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbiApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgg aGRhMi5kYXRhc2V0LCBtb2RlbC5EYXRhc2V0ICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgg aGRhMi5oaXN0b3J5LCBoaXN0b3J5MSApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGhkYTIu aGlkLCAyICkKPTIwCiAgICAgICAgIHNlbGYubG9nKCAic2hvdWxkIGJlIGFibGUgdG8gY3JlYXRl IGEgbmV3IEhEQSB3aXRoIG5vIGhpc3RvcnkgYW5kID0Kbm8gZGF0YXNldCIgKQotICAgICAgICBo ZGEzID0zRCBzZWxmLmhkYV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKKyAgICAgICAgaGRhMyA9 M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgaGlkPTNETm9uZSApCiAgICAgICAg IHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggaGRhMywgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lh dGlvbiApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggaGRhMy5kYXRhc2V0LCBtb2Rl bC5EYXRhc2V0LCBtc2c9M0QiZGF0YXNldD0KIHdpbGwgYmUgYXV0byBjcmVhdGVkIiApCiAgICAg ICAgIHNlbGYuYXNzZXJ0SXNOb25lKCBoZGEzLmhpc3RvcnksIG1zZz0zRCJoaXN0b3J5IHdpbGwg YmUgTm9uZSIgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBoZGEzLmhpZCwgTm9uZSApCisg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIGhkYTMuaGlkLCBOb25lLCBtc2c9M0Qic2hvdWxkIGFs bG93IHNldHRpbmcgaGlkID0KdG8gTm9uZSAob3IgYW55IG90aGVyIHZhbHVlKSIgKQo9MjAKICAg ICBkZWYgdGVzdF9jb3B5X2Zyb21faGRhKCBzZWxmICk6CiAgICAgICAgIG93bmVyID0zRCBzZWxm LnVzZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgKip1c2VyMl9kYXRhICkKCgpodHRwczovL2Jp dGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOThkNGNiNTgxZjYyLwpD aGFuZ2VzZXQ6ICAgOThkNGNiNTgxZjYyClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6 ICAgICAgICAyMDE1LTAxLTA4IDIxOjIzOjUxKzAwOjAwClN1bW1hcnk6ICAgICBVbml0IHRlc3Qg dGhlIGNvbGxlY3Rpb25zIG1hbmFnZXI7IHR3ZWFrcyB0byB1c2VyX3NoYXJlcyBpbiBzaD0KYXJh YmxlCkFmZmVjdGVkICM6ICA1IGZpbGVzCgpkaWZmIC1yIGEzZTcyMjUwODZjYmM0MzFmOTk4YjRi MTg3OGQ3NTViODU5MzcxNTYgLXIgOThkNGNiNTgxZjYyMDEzNTlhN2RkMDg9CjQ1YWIyZDg1YjEx ZTk4NWQ3IGxpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFn ZXJzL2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5CkBAIC0yMjAsMTkg KzIyMCwzNyBAQAogICAgIGRlZiBvbmUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgogICAgICAg ICAiIiIKICAgICAgICAgU2VuZHMga3dhcmdzIHRvIGJ1aWxkIHRoZSBxdWVyeSBhbmQgcmV0dXJu cyBvbmUgYW5kIG9ubHkgb25lIG1vZGVsLgorICAgICAgICAiIiIKKyAgICAgICAgcXVlcnkgPTNE IHNlbGYucXVlcnkoIHRyYW5zLCAqKmt3YXJncyApCisgICAgICAgIHJldHVybiBzZWxmLl9vbmVf d2l0aF9yZWNhc3RfZXJyb3JzKCBxdWVyeSApCisKKyAgICBkZWYgX29uZV93aXRoX3JlY2FzdF9l cnJvcnMoIHNlbGYsIHF1ZXJ5ICk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsIHNxbGFsY2hl bXkncyBvbmUgYW5kIHJlY2FzdCBlcnJvcnMgdG8gc2VyaWFsaXphYmxlIGVycm9ycyBpZiA9CmFu eS4KPTIwCiAgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZDogaWYgbm8g bW9kZWwgaXMgZm91bmQKICAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkNvbmZsaWN0OiBpZiBt b3JlIHRoYW4gb25lIG1vZGVsIGlzIGZvdW5kCiAgICAgICAgICIiIgogICAgICAgICAjIG92ZXJy aWRkZW4gdG8gcmFpc2Ugc2VyaWFsaXphYmxlIGVycm9ycwogICAgICAgICB0cnk6Ci0gICAgICAg ICAgICByZXR1cm4gc2VsZi5xdWVyeSggdHJhbnMsICoqa3dhcmdzICkub25lKCkKKyAgICAgICAg ICAgIHJldHVybiBxdWVyeS5vbmUoKQogICAgICAgICBleGNlcHQgc3FsYWxjaGVteS5vcm0uZXhj Lk5vUmVzdWx0Rm91bmQsIG5vdF9mb3VuZDoKICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMu T2JqZWN0Tm90Rm91bmQoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKyAnPQogbm90IGZvdW5k JyApCiAjVE9ETzogZXhjZXB0aW9ucy5JbmNvbnNpc3RlbnREYXRhYmFzZT8KICAgICAgICAgZXhj ZXB0IHNxbGFsY2hlbXkub3JtLmV4Yy5NdWx0aXBsZVJlc3VsdHNGb3VuZCwgbXVsdGlfZm91bmQ6 CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkNvbmZsaWN0KCAnZm91bmQgbW9yZSB0aGFu IG9uZSAnICsgc2VsZi5tb2RlbD0KX2NsYXNzLl9fbmFtZV9fICkKPTIwCisgICAgZGVmIF9vbmVf b3Jfbm9uZSggc2VsZiwgcXVlcnkgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUg b2JqZWN0IGlmIGZvdW5kLCBOb25lIGlmIGl0J3Mgbm90LgorCisgICAgICAgIDpyYWlzZXMgZXhj ZXB0aW9ucy5Db25mbGljdDogaWYgbW9yZSB0aGFuIG9uZSBtb2RlbCBpcyBmb3VuZAorICAgICAg ICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29uZV93aXRoX3Jl Y2FzdF9lcnJvcnMoIHF1ZXJ5ICkKKyAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnMuT2JqZWN0Tm90 Rm91bmQsIG5vdF9mb3VuZDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKICAgICBkZWYgbGlz dCggc2VsZiwgdHJhbnMsIHF1ZXJ5PTNETm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCiAg ICAgICAgIFNlbmRzIGt3YXJncyB0byBidWlsZCB0aGUgcXVlcnkgcmV0dXJuIGFsbCBtb2RlbHMg Zm91bmQuCkBAIC0zNDUsNyArMzYzLDcgQEAKPTIwCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0g ZGVsZXRlCiAgICAgIyBhIHJlbmFtZSBvZiBzcWwgREVMRVRFIHRvIGRpZmZlcmVudGlhdGUgZnJv bSB0aGUgR2FsYXh5IG5vdGlvbiBvZiBtYT0KcmtfYXNfZGVsZXRlZAotICAgICNkZWYgcmVtb3Zl X2Zyb21fZGIoIHNlbGYsIHRyYW5zLCBpdGVtLCAqKmt3YXJncyApOgorICAgICNkZWYgZGVzdHJv eSggc2VsZiwgdHJhbnMsIGl0ZW0sICoqa3dhcmdzICk6CiAgICAgIyAgICByZXR1cm4gaXRlbQo9 MjAKPTIwCgpkaWZmIC1yIGEzZTcyMjUwODZjYmM0MzFmOTk4YjRiMTg3OGQ3NTViODU5MzcxNTYg LXIgOThkNGNiNTgxZjYyMDEzNTlhN2RkMDg9CjQ1YWIyZDg1YjExZTk4NWQ3IGxpYi9nYWxheHkv bWFuYWdlcnMvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVz LnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC05Miw3ICs5Miw3 IEBACiAgICAgZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgaGlzdG9yeSwgZmx1c2g9M0RUcnVlLCAq Kmt3YXJncyApOgogICAgICAgICAiIiIKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXJyb3Jf dW5sZXNzX2RhdGFzZXRfcHVyZ2VfYWxsb3dlZCggdHJhbnMsIGhpc3RvcnkgKQorICAgICAgICBz ZWxmLmhkYV9tZ3IuZGF0YXNldF9tZ3IuZXJyb3JfdW5sZXNzX2RhdGFzZXRfcHVyZ2VfYWxsb3dl ZCggdHJhbnM9CiwgaGlzdG9yeSApCj0yMAogICAgICAgICAjIEZpcnN0IHB1cmdlIGFsbCB0aGUg ZGF0YXNldHMKICAgICAgICAgZm9yIGhkYSBpbiBoaXN0b3J5LmRhdGFzZXRzOgoKZGlmZiAtciBh M2U3MjI1MDg2Y2JjNDMxZjk5OGI0YjE4NzhkNzU1Yjg1OTM3MTU2IC1yIDk4ZDRjYjU4MWY2MjAx MzU5YTdkZDA4PQo0NWFiMmQ4NWIxMWU5ODVkNyBsaWIvZ2FsYXh5L21hbmFnZXJzL3NoYXJhYmxl LnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFibGUucHkKKysrIGIvbGliL2dhbGF4 eS9tYW5hZ2Vycy9zaGFyYWJsZS5weQpAQCAtMzUsNiArMzUsOCBAQAogICAgICMgLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li49Ci4uLi4uIGhhcyBhIHVzZXIKICAgICBkZWYgX3F1ZXJ5X2J5X3VzZXIoIHNlbGYsIHRyYW5z LCB1c2VyLCBmaWx0ZXJzPTNETm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAg IFJldHVybiBxdWVyeSBmb3IgYWxsIGl0ZW1zIChvZiBtb2RlbF9jbGFzcyB0eXBlKSBhc3NvY2lh dGVkIHdpdGggdD0KaGUgZ2l2ZW4KKyAgICAgICAgYHVzZXJgLgogICAgICAgICAiIiIKICAgICAg ICAgdXNlcl9maWx0ZXIgPTNEIHNlbGYubW9kZWxfY2xhc3MudXNlcl9pZCA9M0Q9M0QgdXNlci5p ZAogICAgICAgICBmaWx0ZXJzPTNEc2VsZi5fbXVuZ2VfZmlsdGVycyggdXNlcl9maWx0ZXIsIGZp bHRlcnMgKQpAQCAtNDIsNiArNDQsOCBAQAo9MjAKICAgICBkZWYgYnlfdXNlciggc2VsZiwgdHJh bnMsIHVzZXIsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gbGlzdCBm b3IgYWxsIGl0ZW1zIChvZiBtb2RlbF9jbGFzcyB0eXBlKSBhc3NvY2lhdGVkIHdpdGggdGg9CmUg Z2l2ZW4KKyAgICAgICAgYHVzZXJgLgogICAgICAgICAiIiIKICAgICAgICAgcXVlcnkgPTNEIHNl bGYuX3F1ZXJ5X2J5X3VzZXIoIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApCiAgICAgICAgIHJldHVy biBzZWxmLmxpc3QoIHRyYW5zLCBxdWVyeT0zRHF1ZXJ5LCAqKmt3YXJncyApCkBAIC0xNzEsNiAr MTc1LDkgQEAKICAgICAjIHNoYXJpbmcgaXMgb2Z0ZW4gZG9uZSB2aWEgYSAzcmQgdGFibGUgYnR3 biBhIFVzZXIgYW5kIGFuIGl0ZW0gLT4gYSA8PQpJdGVtPlVzZXJTaGFyZUFzc29jaWF0aW9uCiAg ICAgZGVmIGdldF9zaGFyZV9hc3NvY3MoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyPTNETm9uZSAp OgogICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBVc2VyU2hhcmVBc3NvY2lhdGlvbnMgZm9y IHRoZSBgaXRlbWAuCisKKyAgICAgICAgT3B0aW9uYWxseSBzZW5kIGluIGB1c2VyYCB0byB0ZXN0 IGZvciBhIHNpbmdsZSBtYXRjaC4KICAgICAgICAgIiIiCiAgICAgICAgIHF1ZXJ5ID0zRCBzZWxm LnF1ZXJ5X2Fzc29jaWF0ZWQoIHRyYW5zLCBzZWxmLnVzZXJfc2hhcmVfbW9kZWwsIGl0ZT0KbSAp CiAgICAgICAgIGlmIHVzZXIgaXMgbm90IE5vbmU6CkBAIC0xNzksMzEgKzE4Niw0NSBAQAo9MjAK ICAgICBkZWYgc2hhcmVfd2l0aCggc2VsZiwgdHJhbnMsIGl0ZW0sIHVzZXIsIGZsdXNoPTNEVHJ1 ZSApOgogICAgICAgICAiIiIKKyAgICAgICAgR2V0IG9yIGNyZWF0ZSBhIHNoYXJlIGZvciB0aGUg Z2l2ZW4gdXNlciAob3IgdXNlcnMgaWYgYHVzZXJgIGlzIGEgPQpsaXN0KS4KICAgICAgICAgIiIi CiAgICAgICAgICMgYWxsb3cgdXNlciB0byBiZSBhIGxpc3QgYW5kIGNhbGwgcmVjdXJzaXZseQog ICAgICAgICBpZiBpc2luc3RhbmNlKCB1c2VyLCBsaXN0ICk6CiAgICAgICAgICAgICByZXR1cm4g bWFwKCBsYW1iZGEgdXNlcjogc2VsZi5zaGFyZV93aXRoKCB0cmFucywgaXRlbSwgdXNlciwgZj0K bHVzaD0zREZhbHNlICksIHVzZXIgKQorICAgICAgICAjIGdldCBvciBjcmVhdGUKKyAgICAgICAg ZXhpc3RpbmcgPTNEIHNlbGYuZ2V0X3NoYXJlX2Fzc29jcyggdHJhbnMsIGl0ZW0sIHVzZXI9M0R1 c2VyICkKKyAgICAgICAgaWYgZXhpc3Rpbmc6CisgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmcu cG9wKCAwICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV91c2VyX3NoYXJlX2Fzc29jKCB0 cmFucywgaXRlbSwgdXNlciwgZmx1c2g9M0RmPQpsdXNoICkKPTIwCi0gICAgICAgIHNoYXJlID0z RCBzZWxmLnVzZXJfc2hhcmVfbW9kZWwoKQotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCgg c2hhcmUgKQotICAgICAgICBzZWxmLmFzc29jaWF0ZSggdHJhbnMsIHNoYXJlLCBpdGVtICkKLSAg ICAgICAgc2hhcmUudXNlciA9M0QgdXNlcgorICAgIGRlZiBfY3JlYXRlX3VzZXJfc2hhcmVfYXNz b2MoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyLCBmbHVzaD0zRFRydWUgKToKKyAgICAgICAgIiIi CisgICAgICAgIENyZWF0ZSBhIHNoYXJlIGZvciB0aGUgZ2l2ZW4gdXNlci4KKyAgICAgICAgIiIi CisgICAgICAgIHVzZXJfc2hhcmVfYXNzb2MgPTNEIHNlbGYudXNlcl9zaGFyZV9tb2RlbCgpCisg ICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCB1c2VyX3NoYXJlX2Fzc29jICkKKyAgICAgICAg c2VsZi5hc3NvY2lhdGUoIHRyYW5zLCB1c2VyX3NoYXJlX2Fzc29jLCBpdGVtICkKKyAgICAgICAg dXNlcl9zaGFyZV9hc3NvYy51c2VyID0zRCB1c2VyCisKKyAgICAgICAgIyB3YWF0PwogICAgICAg ICBzZWxmLmNyZWF0ZV91bmlxdWVfc2x1ZyggdHJhbnMsIGl0ZW0gKQorCiAgICAgICAgIGlmIGZs dXNoOgogICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCi0gICAgICAgIHJldHVy biBpdGVtCisgICAgICAgIHJldHVybiB1c2VyX3NoYXJlX2Fzc29jCj0yMAogICAgIGRlZiB1bnNo YXJlX3dpdGgoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyLCBmbHVzaD0zRFRydWUgKToKICAgICAg ICAgIiIiCisgICAgICAgIERlbGV0ZSBhIHVzZXIgc2hhcmUgKG9yIGxpc3Qgb2Ygc2hhcmVzKSBm cm9tIHRoZSBkYXRhYmFzZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoIHVz ZXIsIGxpc3QgKToKICAgICAgICAgICAgIHJldHVybiBtYXAoIGxhbWJkYSB1c2VyOiBzZWxmLnVu c2hhcmVfd2l0aCggdHJhbnMsIGl0ZW0sIHVzZXIsPQogZmx1c2g9M0RGYWxzZSApLCB1c2VyICkK LSAgICAgICAgIyBMb29rIGZvciBhbmQgZGVsZXRlIHNoYXJpbmcgcmVsYXRpb24gZm9yIGhpc3Rv cnktdXNlci4KLSAgICAgICAgZm9yIGFzc29jIGluIHNlbGYuZ2V0X3NoYXJlX2Fzc29jcyggdHJh bnMsIGl0ZW0sIHVzZXI9M0R1c2VyICk6Ci0gICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmRl bGV0ZSggYXNzb2MgKQorICAgICAgICAjIExvb2sgZm9yIGFuZCBkZWxldGUgc2hhcmluZyByZWxh dGlvbiBmb3IgdXNlci4KKyAgICAgICAgdXNlcl9zaGFyZV9hc3NvYyA9M0Qgc2VsZi5nZXRfc2hh cmVfYXNzb2NzKCB0cmFucywgaXRlbSwgdXNlcj0zRHVzPQplciApWzBdCisgICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uZGVsZXRlKCB1c2VyX3NoYXJlX2Fzc29jICkKICAgICAgICAgaWYgZmx1c2g6 CiAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIGl0 ZW0KKyAgICAgICAgcmV0dXJuIHVzZXJfc2hhcmVfYXNzb2MKPTIwCiAgICAgI2RlZiBfcXVlcnlf c2hhcmVkX3dpdGgoIHNlbGYsIHRyYW5zLCB1c2VyLCBmaWx0ZXJzPTNETm9uZSwgKiprd2FyZ3Mg KToKICAgICAjI1RPRE86CkBAIC0yMTEsNyArMjMyLDcgQEAKICAgICAjICAgICIiIgogICAgICMg ICAgcGFzcwo9MjAKLSAgICAjZGVmIGxpc3RfcHVibGlzaGVkKCBzZWxmLCB0cmFucywgdXNlciwg Kiprd2FyZ3MgKToKKyAgICAjZGVmIGxpc3Rfc2hhcmVkX3dpdGgoIHNlbGYsIHRyYW5zLCB1c2Vy LCAqKmt3YXJncyApOgogICAgICMgICAgIiIiCiAgICAgIyAgICAiIiIKICAgICAjICAgIHF1ZXJ5 ID0zRCBzZWxmLl9xdWVyeV9zaGFyZWRfd2l0aCggdHJhbnMsIHVzZXIsICoqa3dhcmdzICkKQEAg LTI4Niw2ICszMDcsNyBAQAo9MjAKICAgICBkZWYgY3JlYXRlX3VuaXF1ZV9zbHVnKCBzZWxmLCB0 cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlICk6CiAgICAgICAgICIiIgorICAgICAgICBTZXQgYSBu ZXcsIHVuaXF1ZSBzbHVnIG9uIHRoZSBpdGVtLgogICAgICAgICAiIiIKICAgICAgICAgaXRlbS5z bHVnID0zRCBzZWxmLmdldF91bmlxdWVfc2x1ZyggdHJhbnMsIGl0ZW0gKQogICAgICAgICB0cmFu cy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCkBAIC0yOTMsMTAgKzMxNSwxMCBAQAogICAgICAgICAg ICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBpdGVtCj0yMAotICAg IGRlZiBieV9zbHVnKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3MgKToKLSAgICAgICAgIiIi Ci0gICAgICAgICIiIgotICAgICAgICBwYXNzCisgICAgI2RlZiBieV9zbHVnKCBzZWxmLCB0cmFu cywgdXNlciwgKiprd2FyZ3MgKToKKyAgICAjICAgICIiIgorICAgICMgICAgIiIiCisgICAgIyAg ICBwYXNzCj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGRpc3BsYXkKICAgICAjZGVmIGRp c3BsYXlfYnlfdXNlcm5hbWVfYW5kX3NsdWcoIHNlbGYsIHRyYW5zLCB1c2VybmFtZSwgc2x1ZyAp OgoKZGlmZiAtciBhM2U3MjI1MDg2Y2JjNDMxZjk5OGI0YjE4NzhkNzU1Yjg1OTM3MTU2IC1yIDk4 ZDRjYjU4MWY2MjAxMzU5YTdkZDA4PQo0NWFiMmQ4NWIxMWU5ODVkNyB0ZXN0L3VuaXQvbWFuYWdl cnMvdGVzdF9Db2xsZWN0aW9uTWFuYWdlci5weQotLS0gYS90ZXN0L3VuaXQvbWFuYWdlcnMvdGVz dF9Db2xsZWN0aW9uTWFuYWdlci5weQorKysgYi90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9Db2xs ZWN0aW9uTWFuYWdlci5weQpAQCAtMTIwLDU2ICsxMjAsNDEgQEAKICAgICAgICAgaGRjYTIgPTNE IHNlbGYuY29sbGVjdGlvbl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBoaXN0b3J5LCAndGVzdCBj PQpvbGxlY3Rpb24gMicsICdsaXN0JywgZWxlbWVudHM9M0RlbGVtZW50cyApCiAgICAgICAgIHNl bGYuYXNzZXJ0SXNJbnN0YW5jZSggaGRjYTIsIG1vZGVsLkhpc3RvcnlEYXRhc2V0Q29sbGVjdGlv bkFzc29jaT0KYXRpb24gKQo9MjAKLSAgICAjZGVmIHRlc3RfYmFzZSggc2VsZiApOgotICAgICMg ICAgZGF0YXNldDEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKLSAg ICAjICAgIGRhdGFzZXQyID0zRCBzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmFucyAp Ci0gICAgIwotICAgICMgICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBxdWVyeSIgKQot ICAgICMgICAgZGF0YXNldHMgPTNEIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwu RGF0YXNldCApLmFsbCgpCi0gICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRf bWdyLmxpc3QoIHNlbGYudHJhbnMgKSwgZGF0YXNldHMgKQotICAgICMgICAgc2VsZi5hc3NlcnRF cXVhbCggc2VsZi5kYXRhc2V0X21nci5vbmUoIHNlbGYudHJhbnMsIGZpbHRlcnM9M0QoIG09Cm9k ZWwuRGF0YXNldC5pZCA9M0Q9M0QgZGF0YXNldDEuaWQgKSApLCBkYXRhc2V0MSApCi0gICAgIyAg ICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmJ5X2lkKCBzZWxmLnRyYW5zLCBk YXRhc2V0MS5pZD0KICksIGRhdGFzZXQxICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNl bGYuZGF0YXNldF9tZ3IuYnlfaWRzKCBzZWxmLnRyYW5zLCBbIGRhdGFzZXQyPQouaWQsIGRhdGFz ZXQxLmlkIF0gKSwgWyBkYXRhc2V0MiwgZGF0YXNldDEgXSApCi0gICAgIwotICAgICMgICAgc2Vs Zi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBsaW1pdCBhbmQgb2Zmc2V0IiApCi0gICAgIyAgICBz ZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYudHJhbnMsIGxpbWl0 PTNEMSApLD0KIGRhdGFzZXRzWzA6MV0gKQotICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbCggc2Vs Zi5kYXRhc2V0X21nci5saXN0KCBzZWxmLnRyYW5zLCBvZmZzZXQ9M0QxICk9CiwgZGF0YXNldHNb MTpdICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IubGlzdCgg c2VsZi50cmFucywgbGltaXQ9M0QxLCBvPQpmZnNldD0zRDEgKSwgZGF0YXNldHNbMToyXSApCi0g ICAgIwotICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBz ZWxmLnRyYW5zLCBsaW1pdD0zRDAgKSw9CiBbXSApCi0gICAgIyAgICBzZWxmLmFzc2VydEVxdWFs KCBzZWxmLmRhdGFzZXRfbWdyLmxpc3QoIHNlbGYudHJhbnMsIG9mZnNldD0zRDMgKT0KLCBbXSAp Ci0gICAgIwotICAgICMgICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBvcmRlciIgKQot ICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5kYXRhc2V0X21nci5saXN0KCBzZWxmLnRy YW5zLCBvcmRlcl9ieT0zRHM9CnFsYWxjaGVteS5kZXNjKCBtb2RlbC5EYXRhc2V0LmNyZWF0ZV90 aW1lICkgKSwKLSAgICAjICAgICAgICBbIGRhdGFzZXQyLCBkYXRhc2V0MSBdICkKLSAgICAjCi0g ICAgI2RlZiB0ZXN0X2RlbGV0ZSggc2VsZiApOgotICAgICMgICAgaXRlbTEgPTNEIHNlbGYuZGF0 YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zICkKLSAgICAjCi0gICAgIyAgICBzZWxmLmxvZygg InNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSBhbmQgdW5kZWxldGUgYW4gaGRhIiApCi0gICAgIyAg ICBzZWxmLmFzc2VydEZhbHNlKCBpdGVtMS5kZWxldGVkICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0 RXF1YWwoIHNlbGYuZGF0YXNldF9tZ3IuZGVsZXRlKCBzZWxmLnRyYW5zLCBpdGVtMSApLCBpPQp0 ZW0xICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1ZSggaXRlbTEuZGVsZXRlZCApCi0gICAgIyAg ICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLnVuZGVsZXRlKCBzZWxmLnRyYW5z LCBpdGVtMSApLD0KIGl0ZW0xICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLmRl bGV0ZWQgKQotICAgICMKLSAgICAjZGVmIHRlc3RfcHVyZ2VfYWxsb3dlZCggc2VsZiApOgotICAg ICMgICAgc2VsZi50cmFucy5hcHAuY29uZmlnLmFsbG93X3VzZXJfZGF0YXNldF9wdXJnZSA9M0Qg VHJ1ZQotICAgICMgICAgaXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3IuY3JlYXRlKCBzZWxmLnRy YW5zICkKLSAgICAjCi0gICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBwdXJnZSBhbiBoZGEgaWYg Y29uZmlnIGRvZXMgYWxsb3ciICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLnB1 cmdlZCApCi0gICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmRhdGFzZXRfbWdyLnB1cmdl KCBzZWxmLnRyYW5zLCBpdGVtMSApLCBpdD0KZW0xICkKLSAgICAjICAgIHNlbGYuYXNzZXJ0VHJ1 ZSggaXRlbTEucHVyZ2VkICkKLSAgICAjCi0gICAgI2RlZiB0ZXN0X3B1cmdlX25vdF9hbGxvd2Vk KCBzZWxmICk6Ci0gICAgIyAgICBzZWxmLnRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNlcl9kYXRh c2V0X3B1cmdlID0zRCBGYWxzZQotICAgICMgICAgaXRlbTEgPTNEIHNlbGYuZGF0YXNldF9tZ3Iu Y3JlYXRlKCBzZWxmLnRyYW5zICkKLSAgICAjCi0gICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBy YWlzZSBhbiBlcnJvciB3aGVuIHB1cmdpbmcgYW4gaGRhIGlmIGNvbmZpZyBkbz0KZXMgbm90IGFs bG93IiApCi0gICAgIyAgICBzZWxmLmFzc2VydEZhbHNlKCBpdGVtMS5wdXJnZWQgKQotICAgICMg ICAgc2VsZi5hc3NlcnRSYWlzZXMoIGV4Y2VwdGlvbnMuQ29uZmlnRG9lc05vdEFsbG93RXhjZXB0 aW9uLCBzZWxmLmQ9CmF0YXNldF9tZ3IucHVyZ2UsIHNlbGYudHJhbnMsIGl0ZW0xICkKLSAgICAj ICAgIHNlbGYuYXNzZXJ0RmFsc2UoIGl0ZW0xLnB1cmdlZCApCisgICAgZGVmIHRlc3RfdXBkYXRl X2Zyb21fZGljdCggc2VsZiApOgorICAgICAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVh dGUoIHNlbGYudHJhbnMsICoqdXNlcjJfZGF0YSApCisKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2Vs Zi5oaXN0b3J5X21nci5jcmVhdGUoIHNlbGYudHJhbnMsIG5hbWU9M0QnaGlzdG9yeTEnPQosIHVz ZXI9M0Rvd25lciApCisKKyAgICAgICAgaGRhMSA9M0Qgc2VsZi5oZGFfbWdyLmNyZWF0ZSggc2Vs Zi50cmFucywgbmFtZT0zRCdvbmUnLAorICAgICAgICAgICAgaGlzdG9yeT0zRGhpc3RvcnksIGRh dGFzZXQ9M0RzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmE9Cm5zICkgKQorICAgICAg ICBoZGEyID0zRCBzZWxmLmhkYV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCBuYW1lPTNEJ3R3bycs CisgICAgICAgICAgICBoaXN0b3J5PTNEaGlzdG9yeSwgZGF0YXNldD0zRHNlbGYuZGF0YXNldF9t Z3IuY3JlYXRlKCBzZWxmLnRyYT0KbnMgKSApCisgICAgICAgIGhkYTMgPTNEIHNlbGYuaGRhX21n ci5jcmVhdGUoIHNlbGYudHJhbnMsIG5hbWU9M0QndGhyZWUnLAorICAgICAgICAgICAgaGlzdG9y eT0zRGhpc3RvcnksIGRhdGFzZXQ9M0RzZWxmLmRhdGFzZXRfbWdyLmNyZWF0ZSggc2VsZi50cmE9 Cm5zICkgKQorCisgICAgICAgIGVsZW1lbnRzID0zRCBkaWN0KCBvbmU9M0RoZGExLCB0d289M0Ro ZGEyLCB0aHJlZT0zRGhkYTMgKQorICAgICAgICBoZGNhID0zRCBzZWxmLmNvbGxlY3Rpb25fbWdy LmNyZWF0ZSggc2VsZi50cmFucywgaGlzdG9yeSwgJ3Rlc3QgY289CmxsZWN0aW9uJywgJ2xpc3Qn LCBlbGVtZW50cz0zRGVsZW1lbnRzICkKKworICAgICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBz ZXQgZnJvbSBhIGRpY3Rpb25hcnkiICkKKyAgICAgICAgc2VsZi5jb2xsZWN0aW9uX21nci5fc2V0 X2Zyb21fZGljdCggc2VsZi50cmFucywgaGRjYSwgeworICAgICAgICAgICAgJ2RlbGV0ZWQnICAg OiBUcnVlLAorICAgICAgICAgICAgJ3Zpc2libGUnICAgOiBGYWxzZSwKKyAgICAgICAgICAgICdu YW1lJyAgICAgIDogJ05ldyBOYW1lJywKKyAgICAgICAgICAgICNUT0RPOiBkb2Vzbid0IHdvcmsK KyAgICAgICAgICAgICMndGFncycgICAgICA6IFsgJ29uZScsICd0d28nLCAndGhyZWUnIF0KKyAg ICAgICAgICAgICMnYW5ub3RhdGlvbnMnICAgICAgOiBbP10KKyAgICAgICAgfSkKKyAgICAgICAg c2VsZi5hc3NlcnRFcXVhbCggaGRjYS5uYW1lLCAnTmV3IE5hbWUnICkKKyAgICAgICAgc2VsZi5h c3NlcnRUcnVlKCBoZGNhLmRlbGV0ZWQgKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCBoZGNh LnZpc2libGUgKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCggaGRjYS50YWdzLCBbICdvbmUn LCAndHdvJywgJ3RocmVlJyBdICkKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoIGhkY2EuYW5u b3RhdGlvbnMsIFsgJ29uZScsICd0d28nLCAndGhyZWUnIF0gKQorCisgICAgI2RlZiB0ZXN0X3Zh bGlkYXRpb24oIHNlbGYgKToKKyAgICAjICAgIHNlbGYubG9nKCAic2hvdWxkIGJlIGFibGUgdG8g Y2hhbmdlIHRoZSBuYW1lIiApCisgICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRv IHNldCBkZWxldGVkIiApCisgICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIHNl dCB2aXNpYmxlIiApCisgICAgIyAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRvIHNldCB0 YWdzIiApCj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECgpkaWZmIC1yIGEzZTcyMjUwODZjYmM0MzFmOTk4 YjRiMTg3OGQ3NTViODU5MzcxNTYgLXIgOThkNGNiNTgxZjYyMDEzNTlhN2RkMDg9CjQ1YWIyZDg1 YjExZTk4NWQ3IHRlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlNYW5hZ2VyLnB5Ci0tLSBh L3Rlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlNYW5hZ2VyLnB5CisrKyBiL3Rlc3QvdW5p dC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlNYW5hZ2VyLnB5CkBAIC0yNiw2ICsyNiw3IEBACiBkZWZh dWx0X3Bhc3N3b3JkID0zRCAnMTIzNDU2JwogdXNlcjJfZGF0YSA9M0QgZGljdCggZW1haWw9M0Qn dXNlcjJAdXNlcjIudXNlcjInLCB1c2VybmFtZT0zRCd1c2VyMicsIHBhc3M9CndvcmQ9M0RkZWZh dWx0X3Bhc3N3b3JkICkKIHVzZXIzX2RhdGEgPTNEIGRpY3QoIGVtYWlsPTNEJ3VzZXIzQHVzZXIz LnVzZXIzJywgdXNlcm5hbWU9M0QndXNlcjMnLCBwYXNzPQp3b3JkPTNEZGVmYXVsdF9wYXNzd29y ZCApCit1c2VyNF9kYXRhID0zRCBkaWN0KCBlbWFpbD0zRCd1c2VyNEB1c2VyNC51c2VyNCcsIHVz ZXJuYW1lPTNEJ3VzZXI0JywgcGFzcz0Kd29yZD0zRGRlZmF1bHRfcGFzc3dvcmQgKQo9MjAKPTIw CiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRApAQCAtMjEzLDI5ICsyMTQsMzAgQEAKICAgICBkZWYgdGVzdF9zaGFyYWJs ZSggc2VsZiApOgogICAgICAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVhdGUoIHNlbGYu dHJhbnMsICoqdXNlcjJfZGF0YSApCiAgICAgICAgIHNlbGYudHJhbnMuc2V0X3VzZXIoIG93bmVy ICkKKyAgICAgICAgaXRlbTEgPTNEIHNlbGYuaGlzdG9yeV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5z LCB1c2VyPTNEb3duZXIgKQorCiAgICAgICAgIG5vbl9vd25lciA9M0Qgc2VsZi51c2VyX21nci5j cmVhdGUoIHNlbGYudHJhbnMsICoqdXNlcjNfZGF0YSApCi0KLSAgICAgICAgaXRlbTEgPTNEIHNl bGYuaGlzdG9yeV9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCB1c2VyPTNEb3duZXIgKQorICAgICAg ICAjdGhpcmRfcGFydHkgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVz ZXI0X2RhdGEgKQo9MjAKICAgICAgICAgc2VsZi5sb2coICJzaG91bGQgYmUgdW5zaGFyZWQgYnkg ZGVmYXVsdCIgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmhpc3RvcnlfbWdyLmdl dF9zaGFyZV9hc3NvY3MoIHNlbGYudHJhbnMsIGk9CnRlbTEgKSwgW10gKQo9MjAKICAgICAgICAg c2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBzaGFyZSB3aXRoIHNwZWNpZmljIHVzZXJzIiAp Ci0gICAgICAgIHNoYXJlZF9pdGVtID0zRCBzZWxmLmhpc3RvcnlfbWdyLnNoYXJlX3dpdGgoIHNl bGYudHJhbnMsIGl0ZW0xLCBubz0Kbl9vd25lciApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo IHNoYXJlZF9pdGVtLCBpdGVtMSApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5oaXN0 b3J5X21nci5pc19hY2Nlc3NpYmxlKCBzZWxmLnRyYW5zLCBzaGFyZT0KZF9pdGVtLCBub25fb3du ZXIgKSApCisgICAgICAgIHNoYXJlX2Fzc29jID0zRCBzZWxmLmhpc3RvcnlfbWdyLnNoYXJlX3dp dGgoIHNlbGYudHJhbnMsIGl0ZW0xLCBubz0Kbl9vd25lciApCisgICAgICAgIHNlbGYuYXNzZXJ0 SXNJbnN0YW5jZSggc2hhcmVfYXNzb2MsIG1vZGVsLkhpc3RvcnlVc2VyU2hhcmVBc3NvY2lhdD0K aW9uICkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBzZWxmLmhpc3RvcnlfbWdyLmlzX2FjY2Vz c2libGUoIHNlbGYudHJhbnMsIGl0ZW0xPQosIG5vbl9vd25lciApICkKICAgICAgICAgc2VsZi5h c3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGxlbiggc2VsZi5oaXN0b3J5X21nci5nZXRfc2hhcmVf YXNzb2NzKCBzZWxmLnRyYW5zLCBzaGFyZWRfaXRlPQptICkgKSwgMSApCisgICAgICAgICAgICBs ZW4oIHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X3NoYXJlX2Fzc29jcyggc2VsZi50cmFucywgaXRlbTEg KSApLD0KIDEgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgbGVuKCBz ZWxmLmhpc3RvcnlfbWdyLmdldF9zaGFyZV9hc3NvY3MoIHNlbGYudHJhbnMsIHNoYXJlZF9pdGU9 Cm0sIHVzZXI9M0Rub25fb3duZXIgKSApLCAxICkKKyAgICAgICAgICAgIGxlbiggc2VsZi5oaXN0 b3J5X21nci5nZXRfc2hhcmVfYXNzb2NzKCBzZWxmLnRyYW5zLCBpdGVtMSwgdXNlPQpyPTNEbm9u X293bmVyICkgKSwgMSApCj0yMAogICAgICAgICBzZWxmLmxvZyggInNob3VsZCBiZSBhYmxlIHRv IHVuc2hhcmUgd2l0aCBzcGVjaWZpYyB1c2VycyIgKQotICAgICAgICB1bnNoYXJlZF9pdGVtID0z RCBzZWxmLmhpc3RvcnlfbWdyLnVuc2hhcmVfd2l0aCggc2VsZi50cmFucywgc2hhcmU9CmRfaXRl bSwgbm9uX293bmVyICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2hhcmVkX2l0ZW0sIHVu c2hhcmVkX2l0ZW0gKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCBzZWxmLmhpc3RvcnlfbWdy LmlzX2FjY2Vzc2libGUoIHNlbGYudHJhbnMsIHNoYXI9CmVkX2l0ZW0sIG5vbl9vd25lciApICkK LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oaXN0b3J5X21nci5nZXRfc2hhcmVfYXNz b2NzKCBzZWxmLnRyYW5zLCB1PQpuc2hhcmVkX2l0ZW0gKSwgW10gKQorICAgICAgICBzaGFyZV9h c3NvYyA9M0Qgc2VsZi5oaXN0b3J5X21nci51bnNoYXJlX3dpdGgoIHNlbGYudHJhbnMsIGl0ZW0x LCA9Cm5vbl9vd25lciApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggc2hhcmVfYXNz b2MsIG1vZGVsLkhpc3RvcnlVc2VyU2hhcmVBc3NvY2lhdD0KaW9uICkKKyAgICAgICAgc2VsZi5h c3NlcnRGYWxzZSggc2VsZi5oaXN0b3J5X21nci5pc19hY2Nlc3NpYmxlKCBzZWxmLnRyYW5zLCBp dGVtPQoxLCBub25fb3duZXIgKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGlz dG9yeV9tZ3IuZ2V0X3NoYXJlX2Fzc29jcyggc2VsZi50cmFucywgaT0KdGVtMSApLCBbXSApCiAg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzZWxmLmhpc3RvcnlfbWdyLmdl dF9zaGFyZV9hc3NvY3MoIHNlbGYudHJhbnMsIHVuc2hhcmVkX2l0ZW0sID0KdXNlcj0zRG5vbl9v d25lciApLCBbXSApCisgICAgICAgICAgICBzZWxmLmhpc3RvcnlfbWdyLmdldF9zaGFyZV9hc3Nv Y3MoIHNlbGYudHJhbnMsIGl0ZW0xLCB1c2VyPTNEbj0Kb25fb3duZXIgKSwgW10gKQo9MjAKICAg ICAjVE9ETzogdGVzdCBzbHVnIGZvcm1hdGlvbgo9MjAKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMTQzZjAyMmJhZTY5LwpDaGFuZ2VzZXQ6ICAg MTQzZjAyMmJhZTY5ClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAgICAyMDE1 LTAxLTA5IDE4OjIyOjA2KzAwOjAwClN1bW1hcnk6ICAgICBIaXN0b3J5IE1ncjogZWxpbWluYXRl IHRoZSBVc2VzSGlzdG9yeU1peGluOyBIREEgTWdyOiBtb3ZlIHNlcj0KdmVyYWwgbWV0aG9kcyBp bnRvIG1nciBmcm9tIFVzZXNIREFNaXhpbjsgVXNlciBNZ3I6IGltcHJvdmUgYXBpIGdlbmVyYXRp b24vPQpjaGVja2luZwpBZmZlY3RlZCAjOiAgMjMgZmlsZXMKCmRpZmYgLXIgOThkNGNiNTgxZjYy MDEzNTlhN2RkMDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNmMDIyYmFlNjlkOGFhYTA1ZmI5Mz0K OGJlOTlkMzY0NjY2OTlhNTQgbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5Ci0tLSBhL2xpYi9n YWxheHkvbWFuYWdlcnMvYmFzZS5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkK QEAgLTgwMyw5ICs4MDMsOSBAQAogICAgICAgICB1c2VyID0zRCB0cmFucy51c2VyCiAgICAgICAg ICNUT0RPOiBkdXBlZCBmcm9tIHRhZ3MgbWFuYWdlciAtIGRlLWR1cGUgd2hlbiBtb3ZlZCB0byB0 YWdnYWJsZSBtaT0KeGluCiAgICAgICAgIHRhZ19oYW5kbGVyID0zRCB0cmFucy5hcHAudGFnX2hh bmRsZXIKLSAgICAgICAgdGFnX2hhbmRsZXIuZGVsZXRlX2l0ZW1fdGFncyggdHJhbnMsIHVzZXIs IGl0ZW0gKQorICAgICAgICB0YWdfaGFuZGxlci5kZWxldGVfaXRlbV90YWdzKCB1c2VyLCBpdGVt ICkKICAgICAgICAgbmV3X3RhZ3Nfc3RyID0zRCAnLCcuam9pbiggbmV3X3RhZ3NfbGlzdCApCi0g ICAgICAgIHRhZ19oYW5kbGVyLmFwcGx5X2l0ZW1fdGFncyggdHJhbnMsIHVzZXIsIGl0ZW0sIHVu aWNvZGUoIG5ld190YWdzXz0Kc3RyLmVuY29kZSggJ3V0Zi04JyApLCAndXRmLTgnICkgKQorICAg ICAgICB0YWdfaGFuZGxlci5hcHBseV9pdGVtX3RhZ3MoIHVzZXIsIGl0ZW0sIHVuaWNvZGUoIG5l d190YWdzX3N0ci5lbmM9Cm9kZSggJ3V0Zi04JyApLCAndXRmLTgnICkgKQogICAgICAgICAjdHJh bnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCj0yMAogI1RPRE86ISEgZG9lcyB0aGUgY3JlYXRpb24gb2Yg bmV3X3RhZ3NfbGlzdCBtZWFuIHRoZXJlIGFyZSBub3cgbW9yZSBhbmQgbW89CnJlIHVudXNlZCB0 YWcgcm93cyBpbiB0aGUgZGI/CgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJk ODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0 IGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5h Z2Vycy9jb2xsZWN0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25z LnB5CkBAIC0xNjAsOCArMTYwLDYgQEAKICAgICAgICAgcmV0dXJuIHNvdXJjZV9oZGNhCj0yMAog ICAgIGRlZiBfc2V0X2Zyb21fZGljdCggc2VsZiwgdHJhbnMsIGRhdGFzZXRfY29sbGVjdGlvbl9p bnN0YW5jZSwgbmV3X2RhdGE9CiApOgotICAgICAgICAjIEJsYXRhbnRseSBzdG9sZW4gZnJvbSBV c2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLnNldF9oZGE9Cl9mcm9tX2RpY3QuCi0K ICAgICAgICAgIyBzZW5kIHdoYXQgd2UgY2FuIGRvd24gaW50byB0aGUgbW9kZWwKICAgICAgICAg Y2hhbmdlZCA9M0QgZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLnNldF9mcm9tX2RpY3QoIG5l d19kYXRhICkKICAgICAgICAgIyB0aGUgcmVzdCAob2Z0ZW4gaW52b2x2aW5nIHRoZSB0cmFucykg LSBkbyBoZXJlCgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODViMTFlOTg1 ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxpYi9nYWxh eHkvbWFuYWdlcnMvZGF0YXNldHMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0 cy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5CkBAIC0xNSw3ICsxNSw2 IEBACiBjbGFzcyBEYXRhc2V0TWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2UuQWNjZXNz aWJsZU1vZGVsSW50ZXJmYWNlLCBiYT0Kc2UuUHVyZ2FibGVNb2RlbEludGVyZmFjZSApOgogICAg ICIiIgogICAgIE1hbmlwdWxhdGUgZGF0YXNldHM6IHRoZSBjb21wb25lbnRzIGNvbnRhaW5lZCBp biBEYXRhc2V0QXNzb2NpYXRpb25zL0Q9CmF0YXNldEluc3RhbmNlcy9IREFzL0xEREFzCi0gICA9 MjAKICAgICAiIiIKPTIwCiAgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVsLkRhdGFzZXQKQEAgLTIz LDE0ICsyMiwxNCBAQAogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdkYXRhc2V0Jwo9MjAKICAg ICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgotICAgICAgICAiIiIKLSAgICAgICAgIiIiCiAg ICAgICAgIHN1cGVyKCBEYXRhc2V0TWFuYWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAg ICAgICAjIG5lZWQgZm9yIGFkbWluIHRlc3QKICAgICAgICAgc2VsZi51c2VyX21nciA9M0QgdXNl cnMuVXNlck1hbmFnZXIoIGFwcCApCj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGNyZWF0 ZQogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCBmbHVzaD0zRFRydWUsICoqa3dhcmdzICk6 CiAgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBEYXRhc2V0IG9i amVjdC4KICAgICAgICAgIiIiCiAgICAgICAgICMgZGVmYXVsdCB0byBORVcgc3RhdGUgb24gbmV3 IGRhdGFzZXRzCiAgICAgICAgIGt3YXJncy51cGRhdGUoIGRpY3QoIHN0YXRlPTNEKCBrd2FyZ3Mu Z2V0KCAnc3RhdGUnLCBtb2RlbC5EYXRhc2V0Lj0Kc3RhdGVzLk5FVyApICkgKSApCkBAIC00MSwy MyArNDAsMjggQEAKICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQogICAgICAg ICByZXR1cm4gZGF0YXNldAo9MjAKLSAgICBkZWYgY29weSggc2VsZiApOgotICAgICAgICAiIiIK LSAgICAgICAgIiIiCi0gICAgICAgIHBhc3MKKyAgICAjZGVmIGNvcHkoIHNlbGYsIGRhdGFzZXQs ICoqa3dhcmdzICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgIENsb25lLCB1cGRhdGUsIGFuZCBy ZXR1cm4gdGhlIGdpdmVuIGRhdGFzZXQuCisgICAgIyAgICAiIiIKKyAgICAjICAgIHBhc3MKPTIw CiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gYWRkIHRvIGRhdGFzZXQgYXNzb2NpYXRpb24KLSAg ICBkZWYgdG9faGRhKCBzZWxmLCB0cmFucywgZGF0YXNldCwgaGlzdG9yeSwgKiprd2FyZ3MgKToK LSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBwYXNzCisgICAgI2RlZiB0b19oZGEo IHNlbGYsIHRyYW5zLCBkYXRhc2V0LCBoaXN0b3J5LCAqKmt3YXJncyApOgorICAgICMgICAgIiIi CisgICAgIyAgICBDcmVhdGUgYW4gaGRhIGZyb20gdGhpcyBkYXRhc2V0LgorICAgICMgICAgIiIi CisgICAgIyAgICBwYXNzCj0yMAotICAgIGRlZiB0b19sZGRhKCBzZWxmLCB0cmFucywgZGF0YXNl dCwgbGlicmFyeV9mb2xkZXIsICoqa3dhcmdzICk6Ci0gICAgICAgICIiIgotICAgICAgICAiIiIK LSAgICAgICAgcGFzcworICAgICNkZWYgdG9fbGRkYSggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIGxp YnJhcnlfZm9sZGVyLCAqKmt3YXJncyApOgorICAgICMgICAgIiIiCisgICAgIyAgICBDcmVhdGUg YW4gbGRkYSBmcm9tIHRoaXMgZGF0YXNldC4KKyAgICAjICAgICIiIgorICAgICMgICAgcGFzcwo9 MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZWxldGUKKyAgICAjVE9ETzogdGhpcyBtYXkg YmUgbW9yZSBjb252LiBzb21ld2hlcmUgZWxzZQorI1RPRE86IGFsbG93IGFkbWluIGJ5cGFzcwog ICAgIGRlZiBlcnJvcl91bmxlc3NfZGF0YXNldF9wdXJnZV9hbGxvd2VkKCBzZWxmLCB0cmFucywg aXRlbSwgbXNnPTNETm9uZSA9Cik6CiAgICAgICAgIGlmIG5vdCB0cmFucy5hcHAuY29uZmlnLmFs bG93X3VzZXJfZGF0YXNldF9wdXJnZToKICAgICAgICAgICAgIG1zZyA9M0QgbXNnIG9yICdUaGlz IGluc3RhbmNlIGRvZXMgbm90IGFsbG93IHVzZXIgZGF0YXNldCBwdXJnPQppbmcnCkBAIC02Niw2 ICs3MCwxMCBAQAo9MjAKICAgICBkZWYgcHVyZ2UoIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCBmbHVz aD0zRFRydWUgKToKICAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGUgb2JqZWN0X3N0b3Jl L2ZpbGUgZm9yIHRoaXMgZGF0YXNldCBmcm9tIHN0b3JhZ2UgYW5kIG1hcmsKKyAgICAgICAgYXMg cHVyZ2VkLgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5Db25maWdEb2VzTm90QWxsb3dF eGNlcHRpb246IGlmIHRoZSBpbnN0YW5jZSBkbz0KZXNuJ3QgYWxsb3cKICAgICAgICAgIiIiCiAg ICAgICAgIHNlbGYuZXJyb3JfdW5sZXNzX2RhdGFzZXRfcHVyZ2VfYWxsb3dlZCggdHJhbnMsIGRh dGFzZXQgKQo9MjAKQEAgLTgxLDYgKzg5LDcgQEAKICAgICAjICAgdGhhbiB0aG9zZSByZXNvdXJj ZXMgdGhhdCBoYXZlIGEgdXNlciBhdHRyaWJ1dGUgKGhpc3RvcmllcywgcGFnZXMsPQogZXRjLikK ICAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKICAg ICAgICAgIiIiCisgICAgICAgIElzIHRoaXMgZGF0YXNldCByZWFkYWJsZS92aWV3YWJsZSB0byB1 c2VyPwogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi51c2VyX21nci5pc19hZG1pbiggdHJh bnMsIHVzZXIgKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC04OCw4ICs5NywxNyBAQAog ICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCj0yMAorICAgIGRl ZiBoYXNfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6Cisg ICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVC9GIGlmIHRoZSB1c2VyIGhhcyByb2xlLWJhc2Vk IGFjY2VzcyB0byB0aGUgZGF0YXNldC4KKyAgICAgICAgIiIiCisgICAgICAgIHJvbGVzID0zRCB1 c2VyLmFsbF9yb2xlcygpIGlmIHVzZXIgZWxzZSBbXQorICAgICAgICByZXR1cm4gdHJhbnMuYXBw LnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggcm9sZXMsIGRhdGFzZXQ9CiApCisK KyNUT0RPOiB0aGVzZSBuZWVkIHdvcmsKICAgICBkZWYgX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxm LCB0cmFucywgZGF0YXNldCwgdXNlcj0zRE5vbmUsIHJvbGU9M0ROb25lPQogKToKICAgICAgICAg IiIiCisgICAgICAgIFJldHVybiBtb3N0IHJlY2VudCBEYXRhc2V0UGVybWlzc2lvbnMgZm9yIHRo ZSBkYXRhc2V0IGFuZCB1c2VyLgogICAgICAgICAiIiIKICAgICAgICAgc2VjdXJpdHlfYWdlbnQg PTNEIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudAogICAgICAgICBhY2Nlc3NfYWN0aW9uID0zRCBz ZWN1cml0eV9hZ2VudC5wZXJtaXR0ZWRfYWN0aW9ucy5EQVRBU0VUX0FDQ0VTUy49CmFjdGlvbgpA QCAtMTAxLDEzICsxMTksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgLmZpbHRlciggbW9kZWwu RGF0YXNldFBlcm1pc3Npb25zLmFjdGlvbiA9M0Q9M0QgYWNjZXNzPQpfYWN0aW9uICkKICAgICAg ICAgICAgICAgICAgICAgLmZpbHRlciggbW9kZWwuRGF0YXNldFBlcm1pc3Npb25zLmRhdGFzZXQg PTNEPTNEIGRhdGFzPQpldCApCiAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIG1vZGVsLkRh dGFzZXRQZXJtaXNzaW9ucy5yb2xlX2lkLmluXyggdXNlcl9ybz0KbGVfaWRzICkgKSApCi0gICAg ICAgIHBlcm1zID0zRCBxdWVyeS5hbGwoKQotICAgICAgICBpZiBsZW4oIHBlcm1zICk6Ci0gICAg ICAgICAgICByZXR1cm4gcGVybXNbMF0KLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgI1RP RE86Pz8gbW9zdCByZWNlbnQ/CisgICAgICAgIHJldHVybiBxdWVyeS5maXJzdCgpCj0yMAogICAg IGRlZiBfY3JlYXRlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNldCwgcm9s ZSwgZmx1c2g9M0RUcnU9CmUgKToKICAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyBE YXRhc2V0UGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiBkYXRhc2V0IGFuZCByb2xlLgogICAgICAg ICAiIiIKICAgICAgICAgYWNjZXNzX2FjdGlvbiA9M0QgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50 LnBlcm1pdHRlZF9hY3Rpb25zLkRBVEFTPQpFVF9BQ0NFU1MuYWN0aW9uCiAgICAgICAgIHBlcm1p c3Npb24gPTNEIG1vZGVsLkRhdGFzZXRQZXJtaXNzaW9ucyggYWNjZXNzX2FjdGlvbiwgZGF0YXNl dCwgcj0Kb2xlICkKQEAgLTExNiwxNCArMTMzLDYgQEAKICAgICAgICAgICAgIHRyYW5zLnNhX3Nl c3Npb24uZmx1c2goKQogICAgICAgICByZXR1cm4gcGVybWlzc2lvbgo9MjAKLSAgICBkZWYgaGFz X2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNldCwgdXNlciApOgotICAgICAg ICAiIiIKLSAgICAgICAgIiIiCi0gICAgICAgPTIwCi0gICAgICAgIHJvbGVzID0zRCB1c2VyLmFs bF9yb2xlcygpIGlmIHVzZXIgZWxzZSBbXQotICAgICAgICByZXR1cm4gdHJhbnMuYXBwLnNlY3Vy aXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggcm9sZXMsIGRhdGFzZXQ9CiApCi0KLSAgICAj VE9ETzogdGhpcyBuZWVkcyB3b3JrCiAgICAgI2RlZiBnaXZlX2FjY2Vzc19wZXJtaXNzaW9uKCBz ZWxmLCB0cmFucywgZGF0YXNldCwgdXNlciwgZmx1c2g9M0RUcnVlID0KKToKICAgICAjICAgICIi IgogICAgICMgICAgIiIiCgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODVi MTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxp Yi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMu cHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5CkBAIC03MCw4ICs3MCw5IEBACiAg ICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIGhkYQo9 MjAKLSAgICBkZWYgY29weV9oZGEoIHNlbGYsIHRyYW5zLCBoZGEsIGhpc3Rvcnk9M0ROb25lLCAq Kmt3YXJncyApOgorICAgIGRlZiBjb3B5KCBzZWxmLCB0cmFucywgaGRhLCBoaXN0b3J5PTNETm9u ZSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIENvcHkgYW5kIHJldHVybiB0aGUg Z2l2ZW4gSERBLgogICAgICAgICAiIiIKICAgICAgICAgI1RPRE86Pz8gbm90IHVzaW5nIHRoZSBm b2xsb3dpbmcgYXMgdGhpcyBmbiBkb2VzIG5vdCBzZXQgaGlzdG9yeSBhPQpuZCBDT1BJRVMgaGlk ICh0aGlzIGRvZXNuJ3Qgc2VlbSBjb3JyZWN0KQogICAgICAgICAjcmV0dXJuIGhkYS5jb3B5KCkK QEAgLTk1LDYgKzk2LDggQEAKICAgICAgICAgY29weS5jb3BpZWRfZnJvbV9oaXN0b3J5X2RhdGFz ZXRfYXNzb2NpYXRpb24gPTNEIGhkYQogICAgICAgICBjb3B5LnNldF9zaXplKCkKPTIwCisgICAg ICAgICNUT0RPOiB1cGRhdGUgZnJvbSBrd2FyZ3M/CisKICAgICAgICAgIyBOZWVkIHRvIHNldCBh ZnRlciBmbHVzaGVkLCBhcyBNZXRhZGF0YUZpbGVzIHJlcXVpcmUgZGF0YXNldC5pZAogICAgICAg ICB0cmFucy5zYV9zZXNzaW9uLmFkZCggY29weSApCiAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24u Zmx1c2goKQpAQCAtMTUxLDY2ICsxNTQsNiBAQAogICAgICAgICByZXR1cm4gaGRhCj0yMAogICAg ICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi49Ci4uLi4uIHNlcmlhbGl6YXRpb24KLSAgICAjVE9ETzogbW92ZSBpbnRv IHNlcmlhbGl6ZXIgYmVsb3cKLSAgICAjZGVmIGdldF9oZGFfZGljdCggc2VsZiwgdHJhbnMsIGhk YSApOgotICAgICMgICAgIiIiCi0gICAgIyAgICBSZXR1cm4gZnVsbCBkZXRhaWxzIG9mIHRoaXMg SERBIGluIGRpY3Rpb25hcnkgZm9ybS4KLSAgICAjICAgICIiIgotICAgICMgICAgI3ByZWNvbmRp dGlvbjogdGhlIHVzZXIncyBhY2Nlc3MgdG8gdGhpcyBoZGEgaGFzIGFscmVhZHkgYmVlbiBjaGU9 CmNrZWQKLSAgICAjICAgICNUT0RPOj8/IHBvc3Rjb25kaXRpb246IGFsbCBpZHMgYXJlIGVuY29k ZWQgKGlzIHRoaXMgcmVhbGx5IHdoYXQgPQp3ZSB3YW50IGF0IHRoaXMgbGV2ZWw/KQotICAgICMg ICAgZXhwb3NlX2RhdGFzZXRfcGF0aCA9M0QgdHJhbnMudXNlcl9pc19hZG1pbigpIG9yIHRyYW5z LmFwcC5jb25maWc9Ci5leHBvc2VfZGF0YXNldF9wYXRoCi0gICAgIyAgICBoZGFfZGljdCA9M0Qg aGRhLnRvX2RpY3QoIHZpZXc9M0QnZWxlbWVudCcsIGV4cG9zZV9kYXRhc2V0X3BhdGg9Cj0zRGV4 cG9zZV9kYXRhc2V0X3BhdGggKQotICAgICMgICAgaGRhX2RpY3RbICdhcGlfdHlwZScgXSA9M0Qg ImZpbGUiCi0gICAgIwotICAgICMgICAgIyBBZGQgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRoYXQg ZGVwZW5kIG9uIHRyYW5zIG11c3QgYmUgYWRkZWQgaGU9CnJlIHJhdGhlciB0aGFuIGF0IHRoZSBt b2RlbCBsZXZlbC4KLSAgICAjICAgIGNhbl9hY2Nlc3NfaGRhID0zRCB0cmFucy5hcHAuc2VjdXJp dHlfYWdlbnQuY2FuX2FjY2Vzc19kYXRhc2V0KCB0PQpyYW5zLmdldF9jdXJyZW50X3VzZXJfcm9s ZXMoKSwgaGRhLmRhdGFzZXQgKQotICAgICMgICAgY2FuX2FjY2Vzc19oZGEgPTNEICggdHJhbnMu dXNlcl9pc19hZG1pbigpIG9yIGNhbl9hY2Nlc3NfaGRhICkKLSAgICAjICAgIGlmIG5vdCBjYW5f YWNjZXNzX2hkYToKLSAgICAjICAgICAgICByZXR1cm4gc2VsZi5nZXRfaW5hY2Nlc3NpYmxlX2hk YV9kaWN0KCB0cmFucywgaGRhICkKLSAgICAjICAgIGhkYV9kaWN0WyAnYWNjZXNzaWJsZScgXSA9 M0QgVHJ1ZQotICAgICMKLSAgICAjICAgICNUT0RPOiBJJ20gdW5jbGVhciBhcyB0byB3aGljaCBh Y2Nlc3MgcGF0dGVybiBpcyByaWdodAotICAgICMgICAgaGRhX2RpY3RbICdhbm5vdGF0aW9uJyBd ID0zRCBoZGEuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnM9CmFfc2Vzc2lvbiwgaGRh Lmhpc3RvcnkudXNlciwgaGRhICkKLSAgICAjICAgICNhbm5vdGF0aW9uID0zRCBnZXRhdHRyKCBo ZGEsICdhbm5vdGF0aW9uJywgaGRhLmdldF9pdGVtX2Fubm90YXRpPQpvbl9zdHIoIHRyYW5zLnNh X3Nlc3Npb24sIHRyYW5zLnVzZXIsIGhkYSApICkKLSAgICAjCi0gICAgIyAgICAjIC0tLS0gcmV0 dXJuIGhlcmUgaWYgZGVsZXRlZCBBTkQgcHVyZ2VkIE9SIGNhbid0IGFjY2VzcwotICAgICMgICAg cHVyZ2VkID0zRCAoIGhkYS5wdXJnZWQgb3IgaGRhLmRhdGFzZXQucHVyZ2VkICkKLSAgICAjICAg IGlmICggaGRhLmRlbGV0ZWQgYW5kIHB1cmdlZCApOgotICAgICMgICAgICAgICNUT0RPOiB0b19k aWN0IHNob3VsZCByZWFsbHkgZ28gQUZURVIgdGhpcyAtIG9ubHkgc3VtbWFyeSBkYXRhCi0gICAg IyAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyggaGRhX2RpY3Qg KQotICAgICMKLSAgICAjICAgIGlmIGV4cG9zZV9kYXRhc2V0X3BhdGg6Ci0gICAgIyAgICAgICAg dHJ5OgotICAgICMgICAgICAgICAgICBoZGFfZGljdFsgJ2ZpbGVfbmFtZScgXSA9M0QgaGRhLmZp bGVfbmFtZQotICAgICMgICAgICAgIGV4Y2VwdCBvYmplY3RzdG9yZS5PYmplY3ROb3RGb3VuZDoK LSAgICAjICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ29iamVjdHN0b3JlLk9iamVjdE5vdEZv dW5kLCBIREEgJXMuJywgaGRhPQouaWQgKQotICAgICMKLSAgICAjICAgIGhkYV9kaWN0WyAnZG93 bmxvYWRfdXJsJyBdID0zRCBnYWxheHkud2ViLnVybF9mb3IoICdoaXN0b3J5X2NvbnRlPQpudHNf ZGlzcGxheScsCi0gICAgIyAgICAgICAgaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5j b2RlX2lkKCBoZGEuaGlzdG9yeS5pZCApLAotICAgICMgICAgICAgIGhpc3RvcnlfY29udGVudF9p ZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaWQgKSApCi0gICAgIwotICAgICMg ICAgIyBpbmRlY2VzLCBhc3NvYy4gbWV0YWRhdGEgZmlsZXMsIGV0Yy4KLSAgICAjICAgIG1ldGFf ZmlsZXMgPTNEIFtdCi0gICAgIyAgICBmb3IgbWV0YV90eXBlIGluIGhkYS5tZXRhZGF0YS5zcGVj LmtleXMoKToKLSAgICAjICAgICAgICBpZiBpc2luc3RhbmNlKCBoZGEubWV0YWRhdGEuc3BlY1sg bWV0YV90eXBlIF0ucGFyYW0sIGdhbGF4eS5kPQphdGF0eXBlcy5tZXRhZGF0YS5GaWxlUGFyYW1l dGVyICk6Ci0gICAgIyAgICAgICAgICAgIG1ldGFfZmlsZXMuYXBwZW5kKCBkaWN0KCBmaWxlX3R5 cGU9M0RtZXRhX3R5cGUgKSApCi0gICAgIyAgICBpZiBtZXRhX2ZpbGVzOgotICAgICMgICAgICAg IGhkYV9kaWN0WyAnbWV0YV9maWxlcycgXSA9M0QgbWV0YV9maWxlcwotICAgICMKLSAgICAjICAg ICMgY3VycmVudGx5LCB0aGUgdml6IHJlZyBpcyBvcHRpb25hbCAtIGhhbmRsZSBvbi9vZmYKLSAg ICAjICAgIGlmIHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKLSAgICAjICAgICAg ICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCB0cmFucy5hcHAudmlzdWFsaXphdGlv bnNfcmVnPQppc3RyeS5nZXRfdmlzdWFsaXphdGlvbnMoIHRyYW5zLCBoZGEgKQotICAgICMgICAg ZWxzZToKLSAgICAjICAgICAgICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCBoZGEu Z2V0X3Zpc3VhbGl6YXRpb25zKCkKLSAgICAjICAgICNUT0RPOiBpdCBtYXkgYWxzbyBiZSB3aXNl ciB0byByZW1vdmUgZnJvbSBoZXJlIGFuZCBhZGQgYXMgQVBJIGNhPQpsbCB0aGF0IGxvYWRzIHRo ZSB2aXN1YWxpemF0aW9ucwotICAgICMgICAgIyAgICAgICAgICAgd2hlbiB0aGUgdmlzdWFsaXph dGlvbnMgYnV0dG9uIGlzIGNsaWNrZWQgKGluc3RlYWQgb2Y9CiBwcmVsb2FkaW5nL3ByZS1jaGVj a2luZykKLSAgICAjCi0gICAgIyAgICAjIC0tLS0gcmV0dXJuIGhlcmUgaWYgZGVsZXRlZAotICAg ICMgICAgaWYgaGRhLmRlbGV0ZWQgYW5kIG5vdCBwdXJnZWQ6Ci0gICAgIyAgICAgICAgcmV0dXJu IHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyggaGRhX2RpY3QgKQotICAgICMKLSAgICAj ICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoIGhkYV9kaWN0ICkKLQog ICAgIGRlZiBnZXRfZGlzcGxheV9hcHBzKCBzZWxmLCB0cmFucywgaGRhICk6CiAgICAgICAgICIi IgogICAgICAgICBSZXR1cm4gZGljdGlvbmFyeSBjb250YWluaW5nIG5ldy1zdHlsZSBkaXNwbGF5 IGFwcCB1cmxzLgpAQCAtMzAyLDcwICsyNDUsNyBAQAogICAgICMgICAgICAgICAgICByZXR1cm4g dHJhbnMuc2hvd19lcnJvcl9tZXNzYWdlKCAiUGxlYXNlIHdhaXQgdW50aWwgdGhpcyA9CmRhdGFz ZXQgZmluaXNoZXMgdXBsb2FkaW5nICIKICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArICJiZWZvcmUgYXR0ZW1wdGluZyB0PQpvIHZpZXcgaXQuIiAp CiAgICAgIyAgICByZXR1cm4gZGF0YQotICAgICMKLSAgICAjZGVmIGdldF9oaXN0b3J5X2RhdGFz ZXRfYXNzb2NpYXRpb24oIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCBkYXRhc2V0X2lkLAotICAgICMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfb3duZXJzaGlwPTNEVHJ1 ZSwgY2hlY2tfYWM9CmNlc3NpYmxlPTNERmFsc2UsIGNoZWNrX3N0YXRlPTNERmFsc2UgKToKLSAg ICAjICAgICIiIgotICAgICMgICAgR2V0IGEgSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiBmcm9t IHRoZSBkYXRhYmFzZSBieSBpZCwgdmVyaWZ5aW49Cmcgb3duZXJzaGlwLgotICAgICMgICAgIiIi Ci0gICAgIyAgICAjVE9ETzogZHVwbGljYXRlIG9mIGFib3ZlPyBhbGlhcyB0byBhYm92ZSAob3Ig dmlzLXZlcnNhKQotICAgICMgICAgc2VsZi5zZWN1cml0eV9jaGVjayggdHJhbnMsIGhpc3Rvcnks IGNoZWNrX293bmVyc2hpcD0zRGNoZWNrX293bmU9CnJzaGlwLCBjaGVja19hY2Nlc3NpYmxlPTNE Y2hlY2tfYWNjZXNzaWJsZSApCi0gICAgIyAgICBoZGEgPTNEIHNlbGYuZ2V0X29iamVjdCggdHJh bnMsIGRhdGFzZXRfaWQsICdIaXN0b3J5RGF0YXNldEFzc29jaT0KYXRpb24nLAotICAgICMgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNj ZXNzaWJsZT0KPTNERmFsc2UgKQotICAgICMKLSAgICAjICAgIGlmIGNoZWNrX2FjY2Vzc2libGU6 Ci0gICAgIyAgICAgICAgaWYoIG5vdCB0cmFucy51c2VyX2lzX2FkbWluKCkKLSAgICAjICAgICAg ICBhbmQgbm90IHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHRy YW5zLmdlPQp0X2N1cnJlbnRfdXNlcl9yb2xlcygpLCBoZGEuZGF0YXNldCApICk6Ci0gICAgIyAg ICAgICAgICAgIGVycm9yKCAiWW91IGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlc3MgdGhpcyBkYXRh c2V0IiApCi0gICAgIwotICAgICMgICAgICAgIGlmIGNoZWNrX3N0YXRlIGFuZCBoZGEuc3RhdGUg PTNEPTNEIHRyYW5zLm1vZGVsLkRhdGFzZXQuc3RhdGU9CnMuVVBMT0FEOgotICAgICMgICAgICAg ICAgICBlcnJvciggIlBsZWFzZSB3YWl0IHVudGlsIHRoaXMgZGF0YXNldCBmaW5pc2hlcyB1cGxv YWRpbmc9CiBiZWZvcmUgYXR0ZW1wdGluZyB0byB2aWV3IGl0LiIgKQotICAgICMgICAgcmV0dXJu IGhkYQotICAgICMKLSAgICAjZGVmIGdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb25fZnJv bV9pZHMoIHNlbGYsIHRyYW5zLCBpZCwgaGlzdG9yPQp5X2lkICk6Ci0gICAgIyAgICAjIEp1c3Qg dG8gZWNobyBvdGhlciBUT0RPcywgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBvdmVybGFwIGhlcmUs ID0Kc3RpbGwKLSAgICAjICAgICMgdGhpcyBibG9jayBhcHBlYXJzIG11bHRpcGxlIHBsYWNlcyAo ZGF0YXNldCBzaG93LCBoaXN0b3J5X2NvbnRlPQpudHMKLSAgICAjICAgICMgc2hvdywgdXBjb21p bmcgaGlzdG9yeSBqb2Igc2hvdykgc28gSSBhbSBjb25zb2xvZGF0aW5nIGl0IGhlcmUuCi0gICAg IyAgICAjIFNvbWVvbmUgc21hcnRlciB0aGFuIG1lIHNob3VsZCBkZXRlcm1pbmUgaWYgdGhlcmUg aXMgc29tZSByZWR1bj0KZGFuY3kgaGVyZS4KLSAgICAjCi0gICAgIyAgICAjIGZvciBhbm9uIHVz ZXJzOgotICAgICMgICAgI1RPRE86IGNoZWNrIGxvZ2luX3JlcXVpcmVkPwotICAgICMgICAgI1RP RE86IHRoaXMgaXNuJ3QgYWN0dWFsbHkgbW9zdF9yZWNlbnRseV91c2VkIChhcyBkZWZpbmVkIGlu IGhpc3Q9Cm9yaWVzKQotICAgICMgICAgaWYoICggdHJhbnMudXNlciA9M0Q9M0QgTm9uZSApCi0g ICAgIyAgICBhbmQgKCBoaXN0b3J5X2lkID0zRD0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQo IHRyYW5zLmhpc3RvcnkuaT0KZCApICkgKToKLSAgICAjICAgICAgICBoaXN0b3J5ID0zRCB0cmFu cy5oaXN0b3J5Ci0gICAgIyAgICAgICAgI1RPRE86IGRhdGFzZXQvaGRhIGJ5IGlkIChmcm9tIGhp c3RvcnkpIE9SIGNoZWNrX293bmVyc2hpcCBmbz0KciBhbm9uIHVzZXIKLSAgICAjICAgICAgICBo ZGEgPTNEIHNlbGYuZ2V0X2hpc3RvcnlfZGF0YXNldF9hc3NvY2lhdGlvbiggdHJhbnMsIGhpc3Rv cnksPQogaWQsCi0gICAgIyAgICAgICAgICAgIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBjaGVj a19hY2Nlc3NpYmxlPTNEVHJ1ZSApCi0gICAgIyAgICBlbHNlOgotICAgICMgICAgICAgICNUT0RP OiBkbyB3ZSByZWFsbHkgbmVlZCB0aGUgaGlzdG9yeT8KLSAgICAjICAgICAgICBoaXN0b3J5ID0z RCBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCwKLSAgICAjICAgICAgICAgICAg Y2hlY2tfb3duZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlLCBkZWxldGVk PQo9M0RGYWxzZSApCi0gICAgIyAgICAgICAgaGRhID0zRCBzZWxmLmdldF9oaXN0b3J5X2RhdGFz ZXRfYXNzb2NpYXRpb24oIHRyYW5zLCBoaXN0b3J5LD0KIGlkLAotICAgICMgICAgICAgICAgICBj aGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQotICAgICMg ICAgcmV0dXJuIGhkYQotICAgICMKLSAgICAjZGVmIGdldF9oZGFfbGlzdCggc2VsZiwgdHJhbnMs IGhkYV9pZHMsIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNoZWNrPQpfYWNjZXNzaWJsZT0zREZh bHNlLCBjaGVja19zdGF0ZT0zRFRydWUgKToKLSAgICAjICAgICIiIgotICAgICMgICAgUmV0dXJu cyBvbmUgb3IgbW9yZSBkYXRhc2V0cyBpbiBhIGxpc3QuCi0gICAgIwotICAgICMgICAgSWYgYSBk YXRhc2V0IGlzIG5vdCBmb3VuZCBvciBpcyBpbmFjY2Vzc2libGUgdG8gdHJhbnMudXNlciwKLSAg ICAjICAgIGFkZCBOb25lIGluIGl0cyBwbGFjZSBpbiB0aGUgbGlzdC4KLSAgICAjICAgICIiIgot ICAgICMgICAgIyBwcmVjb25kdGlvbjogZGF0YXNldF9pZHMgaXMgYSBsaXN0IG9mIGVuY29kZWQg aWQgc3RyaW5ncwotICAgICMgICAgaGRhcyA9M0QgW10KLSAgICAjICAgIGZvciBpZCBpbiBoZGFf aWRzOgotICAgICMgICAgICAgIGhkYSA9M0QgTm9uZQotICAgICMgICAgICAgIHRyeToKLSAgICAj ICAgICAgICAgICAgaGRhID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWQsCi0gICAgIyAg ICAgICAgICAgICAgICBjaGVja19vd25lcnNoaXA9M0RjaGVja19vd25lcnNoaXAsCi0gICAgIyAg ICAgICAgICAgICAgICBjaGVja19hY2Nlc3NpYmxlPTNEY2hlY2tfYWNjZXNzaWJsZSwKLSAgICAj ICAgICAgICAgICAgICAgIGNoZWNrX3N0YXRlPTNEY2hlY2tfc3RhdGUgKQotICAgICMgICAgICAg IGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgIyAgICAgICAgICAgIHBhc3MKLSAgICAjICAgICAgICBo ZGFzLmFwcGVuZCggaGRhICkKLSAgICAjICAgIHJldHVybiBoZGFzCi0gICAgIworCiAgICAgI2Rl ZiBnZXRfZGF0YSggc2VsZiwgZGF0YXNldCwgcHJldmlldz0zRFRydWUgKToKICAgICAjICAgICIi IgogICAgICMgICAgR2V0cyBhIGRhdGFzZXQncyBkYXRhLgpAQCAtMzk5LDQ5ICsyNzksNiBAQAog ICAgICMgICAgICAgIHJldHVybiBkYXRhc2V0LmNvbnZlcnNpb25fbWVzc2FnZXMuUEVORElORwog ICAgICMgICAgcmV0dXJuIE5vbmUKPTIwCi0gICAgI2RlZiBnZXRfaW5hY2Nlc3NpYmxlX2hkYV9k aWN0KCBzZWxmLCB0cmFucywgaGRhICk6Ci0gICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHku ZW5jb2RlX2RpY3RfaWRzKHsKLSAgICAjICAgICAgICAnaWQnICAgICAgICA6IGhkYS5pZCwKLSAg ICAjICAgICAgICAnaGlzdG9yeV9pZCc6IGhkYS5oaXN0b3J5LmlkLAotICAgICMgICAgICAgICdo aWQnICAgICAgIDogaGRhLmhpZCwKLSAgICAjICAgICAgICAnbmFtZScgICAgICA6IGhkYS5uYW1l LAotICAgICMgICAgICAgICdzdGF0ZScgICAgIDogaGRhLnN0YXRlLAotICAgICMgICAgICAgICdk ZWxldGVkJyAgIDogaGRhLmRlbGV0ZWQsCi0gICAgIyAgICAgICAgJ3Zpc2libGUnICAgOiBoZGEu dmlzaWJsZSwKLSAgICAjICAgICAgICAnYWNjZXNzaWJsZSc6IEZhbHNlCi0gICAgIyAgICB9KQot Ci0gICAgI2RlZiBnZXRfaGRhX2RpY3Rfd2l0aF9lcnJvciggc2VsZiwgdHJhbnMsIGhkYT0zRE5v bmUsIGhpc3RvcnlfaWQ9M0RObz0KbmUsIGlkPTNETm9uZSwgZXJyb3JfbXNnPTNEJ0Vycm9yJyAp OgotICAgICMgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyh7Ci0gICAg IyAgICAgICAgJ2lkJyAgICAgICAgOiBoZGEuaWQgaWYgaGRhIGVsc2UgaWQsCi0gICAgIyAgICAg ICAgJ2hpc3RvcnlfaWQnOiBoZGEuaGlzdG9yeS5pZCBpZiBoZGEgZWxzZSBoaXN0b3J5X2lkLAot ICAgICMgICAgICAgICdoaWQnICAgICAgIDogaGRhLmhpZCBpZiBoZGEgZWxzZSAnKHVua25vd24p JywKLSAgICAjICAgICAgICAnbmFtZScgICAgICA6IGhkYS5uYW1lIGlmIGhkYSBlbHNlICcodW5r bm93biknLAotICAgICMgICAgICAgICdlcnJvcicgICAgIDogZXJyb3JfbXNnLAotICAgICMgICAg ICAgICdzdGF0ZScgICAgIDogdHJhbnMubW9kZWwuRGF0YXNldC5zdGF0ZXMuTkVXCi0gICAgIyAg ICB9KQotCi0gICAgI2RlZiBzZXRfaGRhX2Zyb21fZGljdCggc2VsZiwgdHJhbnMsIGhkYSwgbmV3 X2RhdGEgKToKLSAgICAjICAgICIiIgotICAgICMgICAgQ2hhbmdlcyBIREEgZGF0YSB1c2luZyB0 aGUgZ2l2ZW4gZGljdGlvbmFyeSBuZXdfZGF0YS4KLSAgICAjICAgICIiIgotICAgICMgICAgIyBw cmVjb25kaXRpb246IGFjY2VzcyBvZiB0aGUgaGRhIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZAot ICAgICMKLSAgICAjICAgICMgc2VuZCB3aGF0IHdlIGNhbiBkb3duIGludG8gdGhlIG1vZGVsCi0g ICAgIyAgICBjaGFuZ2VkID0zRCBoZGEuc2V0X2Zyb21fZGljdCggbmV3X2RhdGEgKQotICAgICMg ICAgIyB0aGUgcmVzdCAob2Z0ZW4gaW52b2x2aW5nIHRoZSB0cmFucykgLSBkbyBoZXJlCi0gICAg IyAgICBpZiAnYW5ub3RhdGlvbicgaW4gbmV3X2RhdGEua2V5cygpIGFuZCB0cmFucy5nZXRfdXNl cigpOgotICAgICMgICAgICAgIGhkYS5hZGRfaXRlbV9hbm5vdGF0aW9uKCB0cmFucy5zYV9zZXNz aW9uLCB0cmFucy5nZXRfdXNlcigpLCA9CmhkYSwgbmV3X2RhdGFbICdhbm5vdGF0aW9uJyBdICkK LSAgICAjICAgICAgICBjaGFuZ2VkWyAnYW5ub3RhdGlvbicgXSA9M0QgbmV3X2RhdGFbICdhbm5v dGF0aW9uJyBdCi0gICAgIyAgICBpZiAndGFncycgaW4gbmV3X2RhdGEua2V5cygpIGFuZCB0cmFu cy5nZXRfdXNlcigpOgotICAgICMgICAgICAgIHNlbGYuc2V0X3RhZ3NfZnJvbV9saXN0KCB0cmFu cywgaGRhLCBuZXdfZGF0YVsgJ3RhZ3MnIF0sIHVzZXI9Cj0zRHRyYW5zLnVzZXIgKQotICAgICMg ICAgIyBzaGFyaW5nL3Blcm1pc3Npb25zPwotICAgICMgICAgIyBwdXJnZWQKLSAgICAjCi0gICAg IyAgICBpZiBjaGFuZ2VkLmtleXMoKToKLSAgICAjICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZs dXNoKCkKLSAgICAjCi0gICAgIyAgICByZXR1cm4gY2hhbmdlZAo9MjAKICAgICAjZGVmIGdldF9o ZGFfam9iKCBzZWxmLCBoZGEgKToKICAgICAjICAgICMgR2V0IGRhdGFzZXQncyBqb2IuCkBAIC03 MTgsNiArNTU1LDg5IEBACiAgICAgICAgIHJldHVybiB1cmxzCj0yMAo9MjAKKyAgICAjVE9ETzog bW92ZSBpbnRvIHNlcmlhbGl6ZXIgYmVsb3cKKyAgICAjZGVmIGdldF9oZGFfZGljdCggc2VsZiwg dHJhbnMsIGhkYSApOgorICAgICMgICAgIiIiCisgICAgIyAgICBSZXR1cm4gZnVsbCBkZXRhaWxz IG9mIHRoaXMgSERBIGluIGRpY3Rpb25hcnkgZm9ybS4KKyAgICAjICAgICIiIgorICAgICMgICAg I3ByZWNvbmRpdGlvbjogdGhlIHVzZXIncyBhY2Nlc3MgdG8gdGhpcyBoZGEgaGFzIGFscmVhZHkg YmVlbiBjaGU9CmNrZWQKKyAgICAjICAgICNUT0RPOj8/IHBvc3Rjb25kaXRpb246IGFsbCBpZHMg YXJlIGVuY29kZWQgKGlzIHRoaXMgcmVhbGx5IHdoYXQgPQp3ZSB3YW50IGF0IHRoaXMgbGV2ZWw/ KQorICAgICMgICAgZXhwb3NlX2RhdGFzZXRfcGF0aCA9M0QgdHJhbnMudXNlcl9pc19hZG1pbigp IG9yIHRyYW5zLmFwcC5jb25maWc9Ci5leHBvc2VfZGF0YXNldF9wYXRoCisgICAgIyAgICBoZGFf ZGljdCA9M0QgaGRhLnRvX2RpY3QoIHZpZXc9M0QnZWxlbWVudCcsIGV4cG9zZV9kYXRhc2V0X3Bh dGg9Cj0zRGV4cG9zZV9kYXRhc2V0X3BhdGggKQorICAgICMgICAgaGRhX2RpY3RbICdhcGlfdHlw ZScgXSA9M0QgImZpbGUiCisgICAgIworICAgICMgICAgIyBBZGQgYWRkaXRpb25hbCBhdHRyaWJ1 dGVzIHRoYXQgZGVwZW5kIG9uIHRyYW5zIG11c3QgYmUgYWRkZWQgaGU9CnJlIHJhdGhlciB0aGFu IGF0IHRoZSBtb2RlbCBsZXZlbC4KKyAgICAjICAgIGNhbl9hY2Nlc3NfaGRhID0zRCB0cmFucy5h cHAuc2VjdXJpdHlfYWdlbnQuY2FuX2FjY2Vzc19kYXRhc2V0KCB0PQpyYW5zLmdldF9jdXJyZW50 X3VzZXJfcm9sZXMoKSwgaGRhLmRhdGFzZXQgKQorICAgICMgICAgY2FuX2FjY2Vzc19oZGEgPTNE ICggdHJhbnMudXNlcl9pc19hZG1pbigpIG9yIGNhbl9hY2Nlc3NfaGRhICkKKyAgICAjICAgIGlm IG5vdCBjYW5fYWNjZXNzX2hkYToKKyAgICAjICAgICAgICByZXR1cm4gc2VsZi5nZXRfaW5hY2Nl c3NpYmxlX2hkYV9kaWN0KCB0cmFucywgaGRhICkKKyAgICAjICAgIGhkYV9kaWN0WyAnYWNjZXNz aWJsZScgXSA9M0QgVHJ1ZQorICAgICMKKyAgICAjICAgICNUT0RPOiBJJ20gdW5jbGVhciBhcyB0 byB3aGljaCBhY2Nlc3MgcGF0dGVybiBpcyByaWdodAorICAgICMgICAgaGRhX2RpY3RbICdhbm5v dGF0aW9uJyBdID0zRCBoZGEuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnM9CmFfc2Vz c2lvbiwgaGRhLmhpc3RvcnkudXNlciwgaGRhICkKKyAgICAjICAgICNhbm5vdGF0aW9uID0zRCBn ZXRhdHRyKCBoZGEsICdhbm5vdGF0aW9uJywgaGRhLmdldF9pdGVtX2Fubm90YXRpPQpvbl9zdHIo IHRyYW5zLnNhX3Nlc3Npb24sIHRyYW5zLnVzZXIsIGhkYSApICkKKyAgICAjCisgICAgIyAgICAj IC0tLS0gcmV0dXJuIGhlcmUgaWYgZGVsZXRlZCBBTkQgcHVyZ2VkIE9SIGNhbid0IGFjY2Vzcwor ICAgICMgICAgcHVyZ2VkID0zRCAoIGhkYS5wdXJnZWQgb3IgaGRhLmRhdGFzZXQucHVyZ2VkICkK KyAgICAjICAgIGlmICggaGRhLmRlbGV0ZWQgYW5kIHB1cmdlZCApOgorICAgICMgICAgICAgICNU T0RPOiB0b19kaWN0IHNob3VsZCByZWFsbHkgZ28gQUZURVIgdGhpcyAtIG9ubHkgc3VtbWFyeSBk YXRhCisgICAgIyAgICAgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcygg aGRhX2RpY3QgKQorICAgICMKKyAgICAjICAgIGlmIGV4cG9zZV9kYXRhc2V0X3BhdGg6CisgICAg IyAgICAgICAgdHJ5OgorICAgICMgICAgICAgICAgICBoZGFfZGljdFsgJ2ZpbGVfbmFtZScgXSA9 M0QgaGRhLmZpbGVfbmFtZQorICAgICMgICAgICAgIGV4Y2VwdCBvYmplY3RzdG9yZS5PYmplY3RO b3RGb3VuZDoKKyAgICAjICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ29iamVjdHN0b3JlLk9i amVjdE5vdEZvdW5kLCBIREEgJXMuJywgaGRhPQouaWQgKQorICAgICMKKyAgICAjICAgIGhkYV9k aWN0WyAnZG93bmxvYWRfdXJsJyBdID0zRCBnYWxheHkud2ViLnVybF9mb3IoICdoaXN0b3J5X2Nv bnRlPQpudHNfZGlzcGxheScsCisgICAgIyAgICAgICAgaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2Vj dXJpdHkuZW5jb2RlX2lkKCBoZGEuaGlzdG9yeS5pZCApLAorICAgICMgICAgICAgIGhpc3Rvcnlf Y29udGVudF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaWQgKSApCisgICAg IworICAgICMgICAgIyBpbmRlY2VzLCBhc3NvYy4gbWV0YWRhdGEgZmlsZXMsIGV0Yy4KKyAgICAj ICAgIG1ldGFfZmlsZXMgPTNEIFtdCisgICAgIyAgICBmb3IgbWV0YV90eXBlIGluIGhkYS5tZXRh ZGF0YS5zcGVjLmtleXMoKToKKyAgICAjICAgICAgICBpZiBpc2luc3RhbmNlKCBoZGEubWV0YWRh dGEuc3BlY1sgbWV0YV90eXBlIF0ucGFyYW0sIGdhbGF4eS5kPQphdGF0eXBlcy5tZXRhZGF0YS5G aWxlUGFyYW1ldGVyICk6CisgICAgIyAgICAgICAgICAgIG1ldGFfZmlsZXMuYXBwZW5kKCBkaWN0 KCBmaWxlX3R5cGU9M0RtZXRhX3R5cGUgKSApCisgICAgIyAgICBpZiBtZXRhX2ZpbGVzOgorICAg ICMgICAgICAgIGhkYV9kaWN0WyAnbWV0YV9maWxlcycgXSA9M0QgbWV0YV9maWxlcworICAgICMK KyAgICAjICAgICMgY3VycmVudGx5LCB0aGUgdml6IHJlZyBpcyBvcHRpb25hbCAtIGhhbmRsZSBv bi9vZmYKKyAgICAjICAgIGlmIHRyYW5zLmFwcC52aXN1YWxpemF0aW9uc19yZWdpc3RyeToKKyAg ICAjICAgICAgICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBdID0zRCB0cmFucy5hcHAudmlz dWFsaXphdGlvbnNfcmVnPQppc3RyeS5nZXRfdmlzdWFsaXphdGlvbnMoIHRyYW5zLCBoZGEgKQor ICAgICMgICAgZWxzZToKKyAgICAjICAgICAgICBoZGFfZGljdFsgJ3Zpc3VhbGl6YXRpb25zJyBd ID0zRCBoZGEuZ2V0X3Zpc3VhbGl6YXRpb25zKCkKKyAgICAjICAgICNUT0RPOiBpdCBtYXkgYWxz byBiZSB3aXNlciB0byByZW1vdmUgZnJvbSBoZXJlIGFuZCBhZGQgYXMgQVBJIGNhPQpsbCB0aGF0 IGxvYWRzIHRoZSB2aXN1YWxpemF0aW9ucworICAgICMgICAgIyAgICAgICAgICAgd2hlbiB0aGUg dmlzdWFsaXphdGlvbnMgYnV0dG9uIGlzIGNsaWNrZWQgKGluc3RlYWQgb2Y9CiBwcmVsb2FkaW5n L3ByZS1jaGVja2luZykKKyAgICAjCisgICAgIyAgICAjIC0tLS0gcmV0dXJuIGhlcmUgaWYgZGVs ZXRlZAorICAgICMgICAgaWYgaGRhLmRlbGV0ZWQgYW5kIG5vdCBwdXJnZWQ6CisgICAgIyAgICAg ICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyggaGRhX2RpY3QgKQorICAg ICMKKyAgICAjICAgIHJldHVybiB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoIGhkYV9k aWN0ICkKKworICAgICNkZWYgZ2V0X2luYWNjZXNzaWJsZV9oZGFfZGljdCggc2VsZiwgdHJhbnMs IGhkYSApOgorICAgICMgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyh7 CisgICAgIyAgICAgICAgJ2lkJyAgICAgICAgOiBoZGEuaWQsCisgICAgIyAgICAgICAgJ2hpc3Rv cnlfaWQnOiBoZGEuaGlzdG9yeS5pZCwKKyAgICAjICAgICAgICAnaGlkJyAgICAgICA6IGhkYS5o aWQsCisgICAgIyAgICAgICAgJ25hbWUnICAgICAgOiBoZGEubmFtZSwKKyAgICAjICAgICAgICAn c3RhdGUnICAgICA6IGhkYS5zdGF0ZSwKKyAgICAjICAgICAgICAnZGVsZXRlZCcgICA6IGhkYS5k ZWxldGVkLAorICAgICMgICAgICAgICd2aXNpYmxlJyAgIDogaGRhLnZpc2libGUsCisgICAgIyAg ICAgICAgJ2FjY2Vzc2libGUnOiBGYWxzZQorICAgICMgICAgfSkKKworICAgICNkZWYgZ2V0X2hk YV9kaWN0X3dpdGhfZXJyb3IoIHNlbGYsIHRyYW5zLCBoZGE9M0ROb25lLCBoaXN0b3J5X2lkPTNE Tm89Cm5lLCBpZD0zRE5vbmUsIGVycm9yX21zZz0zRCdFcnJvcicgKToKKyAgICAjICAgIHJldHVy biB0cmFucy5zZWN1cml0eS5lbmNvZGVfZGljdF9pZHMoeworICAgICMgICAgICAgICdpZCcgICAg ICAgIDogaGRhLmlkIGlmIGhkYSBlbHNlIGlkLAorICAgICMgICAgICAgICdoaXN0b3J5X2lkJzog aGRhLmhpc3RvcnkuaWQgaWYgaGRhIGVsc2UgaGlzdG9yeV9pZCwKKyAgICAjICAgICAgICAnaGlk JyAgICAgICA6IGhkYS5oaWQgaWYgaGRhIGVsc2UgJyh1bmtub3duKScsCisgICAgIyAgICAgICAg J25hbWUnICAgICAgOiBoZGEubmFtZSBpZiBoZGEgZWxzZSAnKHVua25vd24pJywKKyAgICAjICAg ICAgICAnZXJyb3InICAgICA6IGVycm9yX21zZywKKyAgICAjICAgICAgICAnc3RhdGUnICAgICA6 IHRyYW5zLm1vZGVsLkRhdGFzZXQuc3RhdGVzLk5FVworICAgICMgICAgfSkKKworCiAjID0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRAogY2xhc3MgSERBRGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyICk6CiAg ICAgIiIiCgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODViMTFlOTg1ZDcg LXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxpYi9nYWxheHkv bWFuYWdlcnMvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVz LnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC0xMjcsNyArMTI3 LDcgQEAKICAgICAgICAgICAgICAgICBjb250ZW50c19kaWN0ID0zRCB7fQo9MjAKICAgICAgICAg ICAgICAgICBpZiBpc2luc3RhbmNlKCBjb250ZW50LCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURh dGFzZXRBc3NvPQpjaWF0aW9uICk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzX2RpY3Qg PTNEIGhkYV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cj0KYW5zLCBoZGEsIHZpZXc9 M0QnZGV0YWlsZWQnICkKKyAgICAgICAgICAgICAgICAgICAgY29udGVudHNfZGljdCA9M0QgaGRh X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyPQphbnMsIGNvbnRlbnQsIHZpZXc9M0Qn ZGV0YWlsZWQnICkKPTIwCiAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKCBjb250ZW50 LCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFzZXRDbz0KbGxlY3Rpb25Bc3NvY2lhdGlvbiAp OgogICAgICAgICAgICAgICAgICAgICB0cnk6CgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdk ZDA4NDVhYjJkODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2 NDY2Njk5YTU0IGxpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKLS0tIGEvbGliL2dhbGF4eS9t YW5hZ2Vycy91c2Vycy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL3VzZXJzLnB5CkBAIC0y Myw4ICsyMywxNyBAQAogICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuVXNlci5jcmVh dGVfdGltZSwgKQogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICd1c2VyJwo9MjAKKyAgICAjVE9E TzogdGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZnVuY3Rpb25hbGl0eSBhcm91bmQgdGhlIHVzZXIg KGF1dGhlbnRpPQpjYXRpb24sIHBlcm1pc3Npb25zLCBxdW90YXMsIGdyb3Vwcy9yb2xlcykKKyAg ICAjICAgbW9zdCBvZiB3aGljaCBpdCBtYXkgYmUgdW5uZWNjZXNzYXJ5IHRvIGhhdmUgaGVyZQor CisgICAgI1RPRE86IGluY29ycCBCYXNlQVBJQ29udHJvbGxlci52YWxpZGF0ZV9pbl91c2Vyc19h bmRfZ3JvdXBzCisgICAgI1RPRE86IGluY29ycCBDcmVhdGVzVXNlcnNNaXhpbgorICAgICNUT0RP OiBpbmNvcnAgQ3JlYXRlc0FwaUtleXNNaXhpbgorCisKICAgICBkZWYgY3JlYXRlKCBzZWxmLCB0 cmFucywgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyB1c2Vy LgogICAgICAgICAiIiIKICAgICAgICAgI1RPRE86IGRlc2VyaWFsaXplIGFuZCB2YWxpZGF0ZSBo ZXJlCiAgICAgICAgIGVtYWlsID0zRCBrd2FyZ3NbICdlbWFpbCcgXQpAQCAtNjEsNiArNzAsOSBA QAo9MjAKICAgICBkZWYgX2Vycm9yX29uX2R1cGxpY2F0ZV9lbWFpbCggc2VsZiwgdHJhbnMsIGVt YWlsICk6CiAgICAgICAgICIiIgorICAgICAgICBDaGVjayBmb3IgYSBkdXBsaWNhdGUgZW1haWwg YW5kIHJhaXNlIGlmIGZvdW5kLgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5Db25mbGlj dDogaWYgYW55IGFyZSBmb3VuZAogICAgICAgICAiIiIKICAgICAgICAgI1RPRE86IHJlbW92ZSB0 aGlzIGNoZWNrIHdoZW4gdW5pcXVlPTNEVHJ1ZSBpcyBhZGRlZCB0byB0aGUgZW1haWwgPQpjb2x1 bW4KICAgICAgICAgaWYgc2VsZi5ieV9lbWFpbCggdHJhbnMsIGVtYWlsICkgaXMgbm90IE5vbmU6 CkBAIC03Miw2ICs4NCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBmaWx0ZXJzID0zRCBzZWxm Ll9tdW5nZV9maWx0ZXJzKCBzZWxmLm1vZGVsX2NsYXNzLmVtYWlsID0zRD0zRCBlbWE9CmlsLCBm aWx0ZXJzICkKICAgICAgICAgdHJ5OgorI1RPRE86IHVzZSBvbmVfb3Jfbm9uZQogICAgICAgICAg ICAgcmV0dXJuIHN1cGVyKCBVc2VyTWFuYWdlciwgc2VsZiApLm9uZSggdHJhbnMsIGZpbHRlcnM9 M0RmaWx0ZXI9CnMsICoqa3dhcmdzICkKICAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnMuT2JqZWN0 Tm90Rm91bmQsIG5vdF9mb3VuZDoKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC04NiwyNCAr OTksMzEgQEAKICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSBhZG1pbgogICAgIGRlZiBpc19hZG1p biggc2VsZiwgdHJhbnMsIHVzZXIgKToKICAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVl IGlmIHRoaXMgdXNlciBpcyBhbiBhZG1pbi4KICAgICAgICAgIiIiCiAgICAgICAgIGFkbWluX2Vt YWlscyA9M0Qgc2VsZi5fYWRtaW5fZW1haWxzKCB0cmFucyApCiAgICAgICAgIHJldHVybiB1c2Vy IGFuZCBhZG1pbl9lbWFpbHMgYW5kIHVzZXIuZW1haWwgaW4gYWRtaW5fZW1haWxzCj0yMAogICAg IGRlZiBfYWRtaW5fZW1haWxzKCBzZWxmLCB0cmFucyApOgogICAgICAgICAiIiIKKyAgICAgICAg UmV0dXJuIGEgbGlzdCBvZiBhZG1pbiBlbWFpbCBhZGRyZXNzZXMgZnJvbSB0aGUgY29uZmlnIGZp bGUuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gWyB4LnN0cmlwKCkgZm9yIHggaW4gdHJh bnMuYXBwLmNvbmZpZy5nZXQoICJhZG1pbl91c2VycyIsICI9CiIgKS5zcGxpdCggIiwiICkgXQo9 MjAKICAgICBkZWYgYWRtaW5zKCBzZWxmLCB0cmFucywgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdz ICk6CiAgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGFkbWluIFVzZXJzLgog ICAgICAgICAiIiIKICAgICAgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVuZ2VfZmlsdGVycyggc2Vs Zi5tb2RlbF9jbGFzcy5lbWFpbC5pbl8oIHNlbGYuPQpfYWRtaW5fZW1haWxzKCB0cmFucyApICks IGZpbHRlcnMgKQogICAgICAgICByZXR1cm4gc3VwZXIoIFVzZXJNYW5hZ2VyLCBzZWxmICkubGlz dCggdHJhbnMsIGZpbHRlcnM9M0RmaWx0ZXJzLCA9Cioqa3dhcmdzICkKPTIwCiAgICAgZGVmIGVy cm9yX3VubGVzc19hZG1pbiggc2VsZiwgdHJhbnMsIHVzZXIsIG1zZz0zRCJBZG1pbmlzdHJhdG9y cyBvbmx5Ij0KLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgUmFpc2UgYW4gZXJy b3IgaWYgYHVzZXJgIGlzIG5vdCBhbiBhZG1pbi4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlv bnMuQWRtaW5SZXF1aXJlZEV4Y2VwdGlvbjogaWYgYHVzZXJgIGlzIG5vdCBhbiBhZG09CmluLgog ICAgICAgICAiIiIKKyAgICAgICAgIyB1c2VmdWwgaW4gYWRtaW4gb25seSBtZXRob2RzCiAgICAg ICAgIGlmIG5vdCBzZWxmLmlzX2FkbWluKCB0cmFucywgdXNlciApOgogICAgICAgICAgICAgcmFp c2UgZXhjZXB0aW9ucy5BZG1pblJlcXVpcmVkRXhjZXB0aW9uKCBtc2csICoqa3dhcmdzICkKICAg ICAgICAgcmV0dXJuIHVzZXIKQEAgLTExMSwxMiArMTMxLDE0IEBACiAgICAgIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LT0KLS0tLS0gYW5vbnltb3VzCiAgICAgZGVmIGlzX2Fub255bW91cyggc2VsZiwgdXNlciApOgog ICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgYHVzZXJgIGlzIGFub255bW91cy4K ICAgICAgICAgIiIiCi0gICAgICAgICMgZGVmaW5lIGhlcmUgZm9yIHNpbmdsZSBwb2ludCBvZiBj aGFuZ2UKKyAgICAgICAgIyBkZWZpbmUgaGVyZSBmb3Igc2luZ2xlIHBvaW50IG9mIGNoYW5nZSBh bmQgbWFrZSBtb3JlIHJlYWRhYmxlCiAgICAgICAgIHJldHVybiB1c2VyIGlzIE5vbmUKPTIwCiAg ICAgZGVmIGVycm9yX2lmX2Fub255bW91cyggc2VsZiwgdHJhbnMsIHVzZXIsIG1zZz0zRCJMb2ct aW4gcmVxdWlyZWQiLCAqKj0Ka3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBSYWlzZSBh biBlcnJvciBpZiBgdXNlcmAgaXMgYW5vbnltb3VzLgogICAgICAgICAiIiIKICAgICAgICAgaWYg dXNlciBpcyBOb25lOgogICAgICAgICAgICAgI1RPRE86IGNvZGUgaXMgY29ycmVjdCAoNDAzKSwg YnV0IHNob3VsZCBiZSBuYW1lZCBBdXRoZW50aWNhdGk9Cm9uUmVxdWlyZWQgKDQwMSBhbmQgNDAz IGFyZSBmbGlwcGVkKQpAQCAtMTI2LDE2ICsxNDgsMjAgQEAKICAgICAjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQot LS0tLSBjdXJyZW50CiAgICAgZGVmIGlzX2N1cnJlbnRfdXNlciggc2VsZiwgdHJhbnMsIHVzZXIg KToKICAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIHRoaXMgdXNlciBpcyB0aGUg dHJhbnMnIGN1cnJlbnQgdXNlci4KICAgICAgICAgIiIiCisgICAgICAgICMgZGVmaW5lIGhlcmUg Zm9yIHNpbmdsZSBwb2ludCBvZiBjaGFuZ2UgYW5kIG1ha2UgbW9yZSByZWFkYWJsZQogICAgICAg ICByZXR1cm4gdXNlciA9M0Q9M0QgdHJhbnMudXNlcgo9MjAKICAgICBkZWYgaXNfY3VycmVudF91 c2VyX2Fub255bW91cyggc2VsZiwgdHJhbnMgKToKICAgICAgICAgIiIiCisgICAgICAgIFJldHVy biBUcnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaXMgYW5vbnltb3VzLgogICAgICAgICAiIiIKLSAg ICAgICAgcmV0dXJuIHRyYW5zLnVzZXIgaXMgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5pc19h bm9ueW1vdXMoIHRyYW5zLnVzZXIgKQo9MjAKICAgICBkZWYgaXNfY3VycmVudF91c2VyX2FkbWlu KCBzZWxmLCB0cmFucyApOgogICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgdGhl IGN1cnJlbnQgdXNlciBpcyBhZG1pbi4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxm LmlzX2FkbWluKCB0cmFucywgdHJhbnMudXNlciApCj0yMApAQCAtMTUxLDMyICsxNzcsNDcgQEAK ICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSBhcGkga2V5cwogICAgIGRlZiBjcmVhdGVfYXBpX2tl eSggc2VsZiwgdHJhbnMsIHVzZXIgKToKICAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhbmQg cmV0dXJuIGFuIEFQSSBrZXkgZm9yIGB1c2VyYC4KICAgICAgICAgIiIiCisgICAgICAgICNUT0RP OiBzZWVtcyBsaWtlIHRoaXMgc2hvdWxkIHJldHVybiB0aGUgbW9kZWwKICAgICAgICAgcmV0dXJu IGFwaV9rZXlzLkFwaUtleU1hbmFnZXIoIHRyYW5zLmFwcCApLmNyZWF0ZV9hcGlfa2V5KCB1c2Vy ICkKPTIwCi0gICAgIyBuZWVkZWQ/Ci0gICAgZGVmIGFwaV9rZXkoIHNlbGYsIHRyYW5zLCB1c2Vy ICk6CisgICAgI1RPRE86IHBvc3NpYmx5IG1vdmUgdG8gQXBpS2V5TWFuYWdlcgorICAgIGRlZiB2 YWxpZF9hcGlfa2V5KCBzZWxmLCB0cmFucywgdXNlciApOgogICAgICAgICAiIiIKKyAgICAgICAg UmV0dXJuIHRoaXMgbW9zdCByZWNlbnQgQVBJS2V5IGZvciB0aGlzIHVzZXIgb3IgTm9uZSBpZiBu b25lIGhhdmUgPQpiZWVuIGNyZWF0ZWQuCiAgICAgICAgICIiIgotICAgICAgICAjVE9ETzogY2F0 Y2ggTm9SZXN1bHRGb3VuZAotICAgICAgICByZXR1cm4gdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSgg bW9kZWwuQVBJS2V5cyApLmZpbHRlcl9ieSggdXNlcj0zRHU9CnNlciApLm9uZSgpCisgICAgICAg IHF1ZXJ5ID0zRCAoIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLkFQSUtleXMgKQorICAg ICAgICAgICAgICAgICAgICAuZmlsdGVyX2J5KCB1c2VyPTNEdXNlciApCisgICAgICAgICAgICAg ICAgICAgIC5vcmRlcl9ieSggbW9kZWwuQVBJS2V5cy5jcmVhdGVfdGltZSApICkKKyAgICAgICAg cmV0dXJuIHF1ZXJ5LmZpcnN0KCkKKworICAgICNUT0RPOiBwb3NzaWJseSBtb3ZlIHRvIEFwaUtl eU1hbmFnZXIKKyAgICBkZWYgZ2V0X29yX2NyZWF0ZV92YWxpZF9hcGlfa2V5KCBzZWxmLCB0cmFu cywgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoaXMgbW9zdCByZWNlbnQg QVBJS2V5IGZvciB0aGlzIHVzZXIgb3IgY3JlYXRlIG9uZSBpZiBub25lPQogaGF2ZSBiZWVuCisg ICAgICAgIGNyZWF0ZWQuCisgICAgICAgICIiIgorICAgICAgICBleGlzdGluZyA9M0Qgc2VsZi52 YWxpZF9hcGlfa2V5KCB0cmFucywgdXNlciApCisgICAgICAgIGlmIGV4aXN0aW5nOgorICAgICAg ICAgICAgcmV0dXJuIGV4aXN0aW5nCisgICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZV9hcGlfa2V5 KCBzZWxmLCB0cmFucywgdXNlciApCj0yMAogICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIHJvbGVz CiAgICAgZGVmIHByaXZhdGVfcm9sZSggc2VsZiwgdHJhbnMsIHVzZXIgKToKICAgICAgICAgIiIi CisgICAgICAgIFJldHVybiB0aGUgc2VjdXJpdHkgYWdlbnQncyBwcml2YXRlIHJvbGUgZm9yIGB1 c2VyYC4KICAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOiBub3Qgc3VyZSB3ZSBuZWVkIHRvIGdv IHRocm91Z2ggc2VjIGFnZW50Li4uIGl0J3MganVzdCB0aGUgZj0KaXJzdCByb2xlIG9mIHR5cGUg cHJpdmF0ZQogICAgICAgICByZXR1cm4gdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmdldF9wcml2 YXRlX3VzZXJfcm9sZSggdXNlciApCj0yMAotICAgICNUT0RPOiB0aGVyZSBpcyBxdWl0ZSBhIGJp dCBvZiBmdW5jdGlvbmFsaXR5IGFyb3VuZCB0aGUgdXNlciAoYXV0aGVudGk9CmNhdGlvbiwgcXVv dGFzLCBncm91cHMvcm9sZXMpCi0gICAgIyAgIG1vc3Qgb2Ygd2hpY2ggaXQgbWF5IGJlIHVubmVj Y2Vzc2FyeSB0byBoYXZlIGhlcmUKLQo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECiBjbGFzcyBVc2VyU2VyaWFs aXplciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIgKToKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxm ICk6CiAgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGEgVXNlciBhbmQgYXNzb2NpYXRlZCBk YXRhIHRvIGEgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAg IHN1cGVyKCBVc2VyU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCkKPTIwCkBAIC0xOTIsOCAr MjMzLDggQEAKICAgICAgICAgXQogICAgICAgICBleHRlbmRlZF92aWV3ID0zRCBkZXRhaWxlZF92 aWV3ICsgWwogICAgICAgICAgICAgIydwcmVmZXJlbmNlcycsCi0gICAgICAgICAgICAjJ3RhZ3Mn LAotICAgICAgICAgICAgIydhbm5vdGF0aW9ucycKKyAgICAgICAgICAgICMndGFncycsICMgYWxs IHRhZ3MKKyAgICAgICAgICAgICMnYW5ub3RhdGlvbnMnICMgYWxsIGFubm90YXRpb25zCiAgICAg ICAgIF0KICAgICAgICAgc2VsZi5zZXJpYWxpemFibGVfa2V5cyA9M0QgZXh0ZW5kZWRfdmlldwog ICAgICAgICBzZWxmLnZpZXdzID0zRCB7CgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4 NDVhYjJkODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2 Njk5YTU0IGxpYi9nYWxheHkvdG9vbHMvaW1wX2V4cC9fX2luaXRfXy5weQotLS0gYS9saWIvZ2Fs YXh5L3Rvb2xzL2ltcF9leHAvX19pbml0X18ucHkKKysrIGIvbGliL2dhbGF4eS90b29scy9pbXBf ZXhwL19faW5pdF9fLnB5CkBAIC05LDcgKzksNiBAQAogZnJvbSBnYWxheHkud2ViLmZyYW1ld29y ay5oZWxwZXJzIGltcG9ydCB0b191bmljb2RlCiBmcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJz IGltcG9ydCBVc2VzQW5ub3RhdGlvbnMKIGZyb20gZ2FsYXh5LnV0aWwuanNvbiBpbXBvcnQgbG9h ZHMsIGR1bXBzCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlz dG9yeU1peGluCj0yMAogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKPTIwCkBA IC00OSw3ICs0OCw3IEBACiAgICAgbG9nLmRlYnVnKCAiTG9hZGVkIGhpc3RvcnkgaW1wb3J0IHRv b2w6ICVzIiwgaGlzdG9yeV9pbXBfdG9vbC5pZCApCj0yMAo9MjAKLWNsYXNzIEpvYkltcG9ydEhp c3RvcnlBcmNoaXZlV3JhcHBlciggb2JqZWN0LCBVc2VzSGlzdG9yeU1peGluLCBVc2VzQW5ub3Rh PQp0aW9ucyApOgorY2xhc3MgSm9iSW1wb3J0SGlzdG9yeUFyY2hpdmVXcmFwcGVyKCBvYmplY3Qs IFVzZXNBbm5vdGF0aW9ucyApOgogICAgICIiIgogICAgICAgICBDbGFzcyBwcm92aWRlcyBzdXBw b3J0IGZvciBwZXJmb3JtaW5nIGpvYnMgdGhhdCBpbXBvcnQgYSBoaXN0b3J5IGY9CnJvbQogICAg ICAgICBhbiBhcmNoaXZlLgpAQCAtMzE1LDE0ICszMTQsMjggQEAKICAgICAgICAgICAgICAgICBz ZWxmLnNhX3Nlc3Npb24uZmx1c2goKQo9MjAKPTIwCi1jbGFzcyBKb2JFeHBvcnRIaXN0b3J5QXJj aGl2ZVdyYXBwZXIoIG9iamVjdCwgVXNlc0hpc3RvcnlNaXhpbiwgVXNlc0Fubm90YT0KdGlvbnMg KToKK2NsYXNzIEpvYkV4cG9ydEhpc3RvcnlBcmNoaXZlV3JhcHBlciggb2JqZWN0LCBVc2VzQW5u b3RhdGlvbnMgKToKICAgICAiIiIKLSAgICAgICAgQ2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3Ig cGVyZm9ybWluZyBqb2JzIHRoYXQgZXhwb3J0IGEgaGlzdG9yeSB0PQpvIGFuCi0gICAgICAgIGFy Y2hpdmUuCisgICAgQ2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcGVyZm9ybWluZyBqb2JzIHRo YXQgZXhwb3J0IGEgaGlzdG9yeSB0byBhbgorICAgIGFyY2hpdmUuCiAgICAgIiIiCiAgICAgZGVm IF9faW5pdF9fKCBzZWxmLCBqb2JfaWQgKToKICAgICAgICAgc2VsZi5qb2JfaWQgPTNEIGpvYl9p ZAo9MjAKKyAgICBkZWYgZ2V0X2hpc3RvcnlfZGF0YXNldHMoIHNlbGYsIHRyYW5zLCBoaXN0b3J5 ICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGhpc3RvcnkncyBkYXRhc2V0cy4KKyAg ICAgICAgIiIiCisgICAgICAgIHF1ZXJ5ID0zRCAoIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRy YW5zLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzbz0KY2lhdGlvbiApCisgICAgICAgICAgICAgICAg ICAgIC5maWx0ZXIoIHRyYW5zLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24uaGlzdG9y eT0KID0zRD0zRCBoaXN0b3J5ICkKKyAgICAgICAgICAgICAgICAgICAgLm9wdGlvbnMoIGVhZ2Vy bG9hZCggImNoaWxkcmVuIiApICkKKyAgICAgICAgICAgICAgICAgICAgLmpvaW4oICJkYXRhc2V0 IiApCisgICAgICAgICAgICAgICAgICAgIC5vcHRpb25zKCBlYWdlcmxvYWRfYWxsKCAiZGF0YXNl dC5hY3Rpb25zIiApICkKKyAgICAgICAgICAgICAgICAgICAgLm9yZGVyX2J5KCB0cmFucy5tb2Rl bC5IaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uLmhpZCApCisgICAgICAgICAgICAgICAgICAgIC5m aWx0ZXIoIHRyYW5zLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24uZGVsZXRlZD0KID0z RD0zRCBGYWxzZSApCisgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIHRyYW5zLm1vZGVsLkRh dGFzZXQucHVyZ2VkID0zRD0zRCBGYWxzZSApICkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LmFsbCgp CisKICAgICAjIFRPRE86IHNob3VsZCB1c2UgZGJfc2Vzc2lvbiByYXRoZXIgdGhhbiB0cmFucyBp biB0aGlzIG1ldGhvZC4KICAgICBkZWYgc2V0dXBfam9iKCBzZWxmLCB0cmFucywgamVoYSwgaW5j bHVkZV9oaWRkZW49M0RGYWxzZSwgaW5jbHVkZV9kZWxlPQp0ZWQ9M0RGYWxzZSApOgogICAgICAg ICAiIiIgUGVyZm9ybSBzZXR1cCBmb3Igam9iIHRvIGV4cG9ydCBhIGhpc3RvcnkgaW50byBhbiBh cmNoaXZlLiBNZXQ9CmhvZCBnZW5lcmF0ZXMKCmRpZmYgLXIgOThkNGNiNTgxZjYyMDEzNTlhN2Rk MDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNmMDIyYmFlNjlkOGFhYTA1ZmI5Mz0KOGJlOTlkMzY0 NjY2OTlhNTQgbGliL2dhbGF4eS93ZWIvYmFzZS9jb250cm9sbGVyLnB5Ci0tLSBhL2xpYi9nYWxh eHkvd2ViL2Jhc2UvY29udHJvbGxlci5weQorKysgYi9saWIvZ2FsYXh5L3dlYi9iYXNlL2NvbnRy b2xsZXIucHkKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICBpZiB0cmFucy53ZWJhcHAubmFt ZSA9M0Q9M0QgJ2dhbGF4eSc6CiAgICAgICAgICAgICAjIFdlIHNldCBkZWZhdWx0IHVzZXIgcGVy bWlzc2lvbnMsIGJlZm9yZSB3ZSBsb2cgaW4gYW5kIHNldCB0aD0KZSBkZWZhdWx0IGhpc3Rvcnkg cGVybWlzc2lvbnMKICAgICAgICAgICAgIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC51c2VyX3Nl dF9kZWZhdWx0X3Blcm1pc3Npb25zKCB1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Cl9hY2Nlc3Nf cHJpdmF0ZT0zRHRyYW5zLmFwcC5jb25maWcubmV3X3VzZXJfZGF0YXNldF9hY2Nlc3Nfcm9sZV9k ZWZhdWx0X3ByaT0KdmF0ZSApCisgICAgICAgICAgICAgICAgZGVmYXVsdF9hY2Nlc3NfcHJpdmF0 ZT0zRHRyYW5zLmFwcC5jb25maWcubmV3X3VzZXJfZGF0YXNldD0KX2FjY2Vzc19yb2xlX2RlZmF1 bHRfcHJpdmF0ZSApCiAgICAgICAgIHJldHVybiB1c2VyCj0yMAo9MjAKQEAgLTIzNiw0NSArMjM2 LDYgQEAKICAgICAgICAgcmV0dXJuIG1hbmFnZXJzX2Jhc2Uuc2VjdXJpdHlfY2hlY2soIHRyYW5z LCBpdGVtLCBjaGVja19vd25lcnNoaXA9Cj0zRGNoZWNrX293bmVyc2hpcCwgY2hlY2tfYWNjZXNz aWJsZT0zRGNoZWNrX2FjY2Vzc2libGUgKQo9MjAKPTIwCi1jbGFzcyBVc2VzSGlzdG9yeU1peGlu KCBTaGFyYWJsZUl0ZW1TZWN1cml0eU1peGluICk6Ci0gICAgIiIiIE1peGluIGZvciBjb250cm9s bGVycyB0aGF0IHVzZSBIaXN0b3J5IG9iamVjdHMuICIiIgotCi0gICAgZGVmIGdldF9oaXN0b3J5 KCBzZWxmLCB0cmFucywgaWQsIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNoZWNrX2FjY2Vzcz0K aWJsZT0zREZhbHNlLCBkZWxldGVkPTNETm9uZSApOgotICAgICAgICAiIiIKLSAgICAgICAgR2V0 IGEgSGlzdG9yeSBmcm9tIHRoZSBkYXRhYmFzZSBieSBpZCwgdmVyaWZ5aW5nIG93bmVyc2hpcC4K LSAgICAgICAgIiIiCi0gICAgICAgIGlmIHRyYW5zLnVzZXIgaXMgTm9uZSBhbmQgdHJhbnMuaGlz dG9yeToKLSAgICAgICAgICAgIGlmIGlkID0zRD0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQo IHRyYW5zLmhpc3RvcnkuaWQgKToKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnMuaGlzdG9y eQotICAgICAgICAgICAgcmFpc2UgSXRlbU93bmVyc2hpcEV4Y2VwdGlvbiggIk11c3QgYmUgbG9n Z2VkIGluIHRvIG1hbmFnZSBHYWw9CmF4eSBpdGVtcyIsIHR5cGU9M0QnZXJyb3InICkKLQotICAg ICAgICBoaXN0b3J5ID0zRCBzZWxmLmdldF9vYmplY3QoIHRyYW5zLCBpZCwgJ0hpc3RvcnknLAot ICAgICAgICAgICAgY2hlY2tfb3duZXJzaGlwPTNEY2hlY2tfb3duZXJzaGlwLCBjaGVja19hY2Nl c3NpYmxlPTNEY2hlY2tfYWM9CmNlc3NpYmxlLCBkZWxldGVkPTNEZGVsZXRlZCApCi0gICAgICAg IGhpc3RvcnkgPTNEIHNlbGYuc2VjdXJpdHlfY2hlY2soIHRyYW5zLCBoaXN0b3J5LCBjaGVja19v d25lcnNoaXAsID0KY2hlY2tfYWNjZXNzaWJsZSApCi0gICAgICAgIHJldHVybiBoaXN0b3J5Ci0j bGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvYW5ub3RhdGlvbnMucHk6NTU6ICAgICAgICBo aXN0ID0zRCBzZWxmLmdldD0KX2hpc3RvcnkoIHRyYW5zLCBpZHN0ciApCi0jbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNldF9jb2xsZWN0aW9ucy5weTo0NDogICAgICAgICAgICBo aXN0bz0KcnkgPTNEIHNlbGYuZ2V0X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkLCBjaGVja19v d25lcnNoaXA9M0RUcnVlLCBjaGVja19hPQpjY2Vzc2libGU9M0RGYWxzZSApCi0jbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9hcGkvd29ya2Zsb3dzLnB5OjE1MjogICAgICAgICAgICBoaXN0b3J5 ID0zRCBzZT0KbGYuZ2V0X2hpc3RvcnkoIHRyYW5zLCBmcm9tX2hpc3RvcnlfaWQsIGNoZWNrX293 bmVyc2hpcD0zREZhbHNlLCBjaGVja19hY2NlPQpzc2libGU9M0RUcnVlICkKLSNsaWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2RhdGFzZXQucHk6OTk2OiAgICAgICAgICAgIGhp c3RvcnkgPQo9M0Qgc2VsZi5nZXRfaGlzdG9yeSh0cmFucywgc291cmNlX2hpc3RvcnkpCi0jIGFu ZCBhbGxsIG92ZXIgaGlzdG9yeSBjb250cm9sbGVyCi0KLSAgICBkZWYgZ2V0X2hpc3RvcnlfZGF0 YXNldHMoIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCBzaG93X2RlbGV0ZWQ9M0RGYWxzZSwgPQpzaG93 X2hpZGRlbj0zREZhbHNlLCBzaG93X3B1cmdlZD0zREZhbHNlICk6Ci0gICAgICAgICIiIiBSZXR1 cm5zIGhpc3RvcnkncyBkYXRhc2V0cy4gIiIiCi0gICAgICAgIHF1ZXJ5ID0zRCB0cmFucy5zYV9z ZXNzaW9uLnF1ZXJ5KCB0cmFucy5tb2RlbC5IaXN0b3J5RGF0YXNldEFzc29jaT0KYXRpb24gKSBc Ci0gICAgICAgICAgICAuZmlsdGVyKCB0cmFucy5tb2RlbC5IaXN0b3J5RGF0YXNldEFzc29jaWF0 aW9uLmhpc3RvcnkgPTNEPTNEID0KaGlzdG9yeSApIFwKLSAgICAgICAgICAgIC5vcHRpb25zKCBl YWdlcmxvYWQoICJjaGlsZHJlbiIgKSApIFwKLSAgICAgICAgICAgIC5qb2luKCAiZGF0YXNldCIg KSBcCi0gICAgICAgICAgICAub3B0aW9ucyggZWFnZXJsb2FkX2FsbCggImRhdGFzZXQuYWN0aW9u cyIgKSApIFwKLSAgICAgICAgICAgIC5vcmRlcl9ieSggdHJhbnMubW9kZWwuSGlzdG9yeURhdGFz ZXRBc3NvY2lhdGlvbi5oaWQgKQotICAgICAgICBpZiBub3Qgc2hvd19kZWxldGVkOgotICAgICAg ICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlciggdHJhbnMubW9kZWwuSGlzdG9yeURhdGFzZXRB c3NvY2lhdGlvbi49CmRlbGV0ZWQgPTNEPTNEIEZhbHNlICkKLSAgICAgICAgaWYgbm90IHNob3df cHVyZ2VkOgotICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlciggdHJhbnMubW9kZWwu RGF0YXNldC5wdXJnZWQgPTNEPTNEIEZhbHM9CmUgKQotICAgICAgICByZXR1cm4gcXVlcnkuYWxs KCkKLSNsaWIvZ2FsYXh5L3Rvb2xzL2ltcF9leHAvX19pbml0X18ucHk6NDE3OiAgICAgICAgZGF0 YXNldHMgPTNEIHNlbGYuZ2V0X2hpPQpzdG9yeV9kYXRhc2V0cyggdHJhbnMsIGhpc3RvcnkgKQot I2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weToxMjgwOiAg ICAgICAgZGF0YXNldHMgPQo9M0Qgc2VsZi5nZXRfaGlzdG9yeV9kYXRhc2V0cyggdHJhbnMsIGhp c3RvcnkgKQotI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcGFnZS5weTo3 NDI6ICAgICAgICBkYXRhc2V0cyA9M0Qgc2U9CmxmLmdldF9oaXN0b3J5X2RhdGFzZXRzKCB0cmFu cywgaGlzdG9yeSApCi0KIGNsYXNzIEV4cG9ydHNIaXN0b3J5TWl4aW46Cj0yMAogICAgIGRlZiBz ZXJ2ZV9yZWFkeV9oaXN0b3J5X2V4cG9ydCggc2VsZiwgdHJhbnMsIGplaGEgKToKQEAgLTI4OSw3 ICsyNTAsNiBAQAo9MjAKICAgICBkZWYgcXVldWVfaGlzdG9yeV9leHBvcnQoIHNlbGYsIHRyYW5z LCBoaXN0b3J5LCBnemlwPTNEVHJ1ZSwgaW5jbHVkZV9oPQppZGRlbj0zREZhbHNlLCBpbmNsdWRl X2RlbGV0ZWQ9M0RGYWxzZSApOgogICAgICAgICAjIENvbnZlcnQgb3B0aW9ucyB0byBib29sZWFu cy4KLSAgICAgICAgIwogICAgICAgICBpZiBpc2luc3RhbmNlKCBnemlwLCBiYXNlc3RyaW5nICk6 CiAgICAgICAgICAgICBnemlwID0zRCAoIGd6aXAgaW4gWyAnVHJ1ZScsICd0cnVlJywgJ1QnLCAn dCcgXSApCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoIGluY2x1ZGVfaGlkZGVuLCBiYXNlc3RyaW5n ICk6CkBAIC0zNjEsNjkgKzMyMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArICJiZWZvcmUgYXR0ZW1wdGluZyB0bz0KIHZpZXcgaXQuIiAp CiAgICAgICAgIHJldHVybiBkYXRhCj0yMAotICAgIGRlZiBnZXRfaGlzdG9yeV9kYXRhc2V0X2Fz c29jaWF0aW9uKCBzZWxmLCB0cmFucywgaGlzdG9yeSwgZGF0YXNldF9pZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hl Y2tfYWNjPQplc3NpYmxlPTNERmFsc2UsIGNoZWNrX3N0YXRlPTNERmFsc2UgKToKLSAgICAgICAg IiIiCi0gICAgICAgIEdldCBhIEhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24gZnJvbSB0aGUgZGF0 YWJhc2UgYnkgaWQsIHZlcmlmeWluZz0KIG93bmVyc2hpcC4KLSAgICAgICAgIiIiCi0gICAgICAg ICNUT0RPOiBkdXBsaWNhdGUgb2YgYWJvdmU/IGFsaWFzIHRvIGFib3ZlIChvciB2aXMtdmVyc2Ep Ci0gICAgICAgIHNlbGYuc2VjdXJpdHlfY2hlY2soIHRyYW5zLCBoaXN0b3J5LCBjaGVja19vd25l cnNoaXA9M0RjaGVja19vd25lcj0Kc2hpcCwgY2hlY2tfYWNjZXNzaWJsZT0zRGNoZWNrX2FjY2Vz c2libGUgKQotICAgICAgICBoZGEgPTNEIHNlbGYuZ2V0X29iamVjdCggdHJhbnMsIGRhdGFzZXRf aWQsICdIaXN0b3J5RGF0YXNldEFzc29jaWE9CnRpb24nLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPQo9M0RG YWxzZSApCi0KLSAgICAgICAgaWYgY2hlY2tfYWNjZXNzaWJsZToKLSAgICAgICAgICAgIGlmKCBu b3QgdHJhbnMudXNlcl9pc19hZG1pbigpCi0gICAgICAgICAgICBhbmQgbm90IHRyYW5zLmFwcC5z ZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHRyYW5zLmdldD0KX2N1cnJlbnRfdXNl cl9yb2xlcygpLCBoZGEuZGF0YXNldCApICk6Ci0gICAgICAgICAgICAgICAgZXJyb3IoICJZb3Ug YXJlIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyB0aGlzIGRhdGFzZXQiICkKLQotICAgICAgICAgICAg aWYgY2hlY2tfc3RhdGUgYW5kIGhkYS5zdGF0ZSA9M0Q9M0QgdHJhbnMubW9kZWwuRGF0YXNldC5z dGF0ZXM9Ci5VUExPQUQ6Ci0gICAgICAgICAgICAgICAgZXJyb3IoICJQbGVhc2Ugd2FpdCB1bnRp bCB0aGlzIGRhdGFzZXQgZmluaXNoZXMgdXBsb2FkaW5nID0KYmVmb3JlIGF0dGVtcHRpbmcgdG8g dmlldyBpdC4iICkKLSAgICAgICAgcmV0dXJuIGhkYQotCi0gICAgZGVmIGdldF9oaXN0b3J5X2Rh dGFzZXRfYXNzb2NpYXRpb25fZnJvbV9pZHMoIHNlbGYsIHRyYW5zLCBpZCwgaGlzdG9yeT0KX2lk ICk6Ci0gICAgICAgICMgSnVzdCB0byBlY2hvIG90aGVyIFRPRE9zLCB0aGVyZSBzZWVtcyB0byBi ZSBzb21lIG92ZXJsYXAgaGVyZSwgcz0KdGlsbAotICAgICAgICAjIHRoaXMgYmxvY2sgYXBwZWFy cyBtdWx0aXBsZSBwbGFjZXMgKGRhdGFzZXQgc2hvdywgaGlzdG9yeV9jb250ZW49CnRzCi0gICAg ICAgICMgc2hvdywgdXBjb21pbmcgaGlzdG9yeSBqb2Igc2hvdykgc28gSSBhbSBjb25zb2xvZGF0 aW5nIGl0IGhlcmUuCi0gICAgICAgICMgU29tZW9uZSBzbWFydGVyIHRoYW4gbWUgc2hvdWxkIGRl dGVybWluZSBpZiB0aGVyZSBpcyBzb21lIHJlZHVuZD0KYW5jeSBoZXJlLgotCi0gICAgICAgICMg Zm9yIGFub24gdXNlcnM6Ci0gICAgICAgICNUT0RPOiBjaGVjayBsb2dpbl9yZXF1aXJlZD8KLSAg ICAgICAgI1RPRE86IHRoaXMgaXNuJ3QgYWN0dWFsbHkgbW9zdF9yZWNlbnRseV91c2VkIChhcyBk ZWZpbmVkIGluIGhpc3RvPQpyaWVzKQotICAgICAgICBpZiggKCB0cmFucy51c2VyID0zRD0zRCBO b25lICkKLSAgICAgICAgYW5kICggaGlzdG9yeV9pZCA9M0Q9M0QgdHJhbnMuc2VjdXJpdHkuZW5j b2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkPQogKSApICk6Ci0gICAgICAgICAgICBoaXN0b3J5ID0z RCB0cmFucy5oaXN0b3J5Ci0gICAgICAgICAgICAjVE9ETzogZGF0YXNldC9oZGEgYnkgaWQgKGZy b20gaGlzdG9yeSkgT1IgY2hlY2tfb3duZXJzaGlwIGZvcj0KIGFub24gdXNlcgotICAgICAgICAg ICAgaGRhID0zRCBzZWxmLmdldF9oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb24oIHRyYW5zLCBo aXN0b3J5LCA9CmlkLAotICAgICAgICAgICAgICAgIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBj aGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjVE9E TzogZG8gd2UgcmVhbGx5IG5lZWQgdGhlIGhpc3Rvcnk/Ci0gICAgICAgICAgICBoaXN0b3J5ID0z RCBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCwKLSAgICAgICAgICAgICAgICBj aGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUsIGRlbGV0ZWQ9 Cj0zREZhbHNlICkKLSAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5nZXRfaGlzdG9yeV9kYXRhc2V0 X2Fzc29jaWF0aW9uKCB0cmFucywgaGlzdG9yeSwgPQppZCwKLSAgICAgICAgICAgICAgICBjaGVj a19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQotICAgICAgICBy ZXR1cm4gaGRhCi0KLSAgICBkZWYgZ2V0X2hkYV9saXN0KCBzZWxmLCB0cmFucywgaGRhX2lkcywg Y2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlY2tfPQphY2Nlc3NpYmxlPTNERmFsc2UsIGNoZWNr X3N0YXRlPTNEVHJ1ZSApOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJucyBvbmUgb3IgbW9y ZSBkYXRhc2V0cyBpbiBhIGxpc3QuCi0KLSAgICAgICAgSWYgYSBkYXRhc2V0IGlzIG5vdCBmb3Vu ZCBvciBpcyBpbmFjY2Vzc2libGUgdG8gdHJhbnMudXNlciwKLSAgICAgICAgYWRkIE5vbmUgaW4g aXRzIHBsYWNlIGluIHRoZSBsaXN0LgotICAgICAgICAiIiIKLSAgICAgICAgIyBwcmVjb25kdGlv bjogZGF0YXNldF9pZHMgaXMgYSBsaXN0IG9mIGVuY29kZWQgaWQgc3RyaW5ncwotICAgICAgICBo ZGFzID0zRCBbXQotICAgICAgICBmb3IgaWQgaW4gaGRhX2lkczoKLSAgICAgICAgICAgIGhkYSA9 M0QgTm9uZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5n ZXRfZGF0YXNldCggdHJhbnMsIGlkLAotICAgICAgICAgICAgICAgICAgICBjaGVja19vd25lcnNo aXA9M0RjaGVja19vd25lcnNoaXAsCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrX2FjY2Vzc2li bGU9M0RjaGVja19hY2Nlc3NpYmxlLAotICAgICAgICAgICAgICAgICAgICBjaGVja19zdGF0ZT0z RGNoZWNrX3N0YXRlICkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAg ICAgICAgcGFzcwotICAgICAgICAgICAgaGRhcy5hcHBlbmQoIGhkYSApCi0gICAgICAgIHJldHVy biBoZGFzCi0KICAgICBkZWYgZ2V0X2RhdGEoIHNlbGYsIGRhdGFzZXQsIHByZXZpZXc9M0RUcnVl ICk6CiAgICAgICAgICIiIgogICAgICAgICBHZXRzIGEgZGF0YXNldCdzIGRhdGEuCkBAIC00NDQs NiArMzQxLDEwIEBACiAgICAgICAgICAgICAgICAgIyBGb3Igbm93LCBjYW5ub3QgZ2V0IGRhdGEg ZnJvbSBub24tdGV4dCBkYXRhc2V0cy4KICAgICAgICAgICAgICAgICBkYXRhc2V0X2RhdGEgPTNE IE5vbmUKICAgICAgICAgcmV0dXJuIHRydW5jYXRlZCwgZGF0YXNldF9kYXRhCisjbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9kYXRhc2V0LnB5OjU2NjogICAgICAgICAgICB0 cnVuY2F0ZT0KZCwgZGF0YXNldF9kYXRhID0zRCBzZWxmLmdldF9kYXRhKCBkYXRhc2V0LCBwcmV2 aWV3ICkKKyNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2RhdGFzZXQucHk6 NjA0OiAgICAgICAgdHJ1bmNhdGVkLCBkPQphdGFzZXRfZGF0YSA9M0Qgc2VsZi5nZXRfZGF0YSgg ZGF0YXNldCwgcHJldmlldz0zRFRydWUgKQorI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29u dHJvbGxlcnMvcGFnZS5weTo3ODc6ICAgICAgICAgICAgICAgIGRhdGEgPQo9M0Qgc2VsZi5nZXRf ZGF0YSggZGF0YXNldCApCisjbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy92 aXN1YWxpemF0aW9uLnB5OjEwMTI6ICAgICAgICBkYXRhID0KPTNEIHBkLmdldF9kYXRhKCB0cmVl X2luZGV4PTNEdHJlZV9pbmRleCApCj0yMAogICAgIGRlZiBjaGVja19kYXRhc2V0X3N0YXRlKCBz ZWxmLCB0cmFucywgZGF0YXNldCApOgogICAgICAgICAiIiIKQEAgLTQ1Niw2OCArMzU3LDExIEBA CiAgICAgICAgIGlmIGRhdGFzZXQuc3RhdGUgIT0zRCB0cmFucy5hcHAubW9kZWwuSm9iLnN0YXRl cy5PSzoKICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0LmNvbnZlcnNpb25fbWVzc2FnZXMuUEVO RElORwogICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9kaXNwbGF5X2FwcHMoIHNl bGYsIHRyYW5zLCBoZGEgKToKLSAgICAgICAgZGlzcGxheV9hcHBzID0zRCBbXQotICAgICAgICBm b3IgZGlzcGxheV9hcHAgaW4gaGRhLmdldF9kaXNwbGF5X2FwcGxpY2F0aW9ucyggdHJhbnMgKS5p dGVydmFsdWU9CnMoKToKLQotICAgICAgICAgICAgYXBwX2xpbmtzID0zRCBbXQotICAgICAgICAg ICAgZm9yIGxpbmtfYXBwIGluIGRpc3BsYXlfYXBwLmxpbmtzLml0ZXJ2YWx1ZXMoKToKLSAgICAg ICAgICAgICAgICBhcHBfbGlua3MuYXBwZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgJ3Rhcmdl dCc6IGxpbmtfYXBwLnVybC5nZXQoICd0YXJnZXRfZnJhbWUnLCAnX2JsYW5rJyApLAotICAgICAg ICAgICAgICAgICAgICAnaHJlZicgIDogbGlua19hcHAuZ2V0X2Rpc3BsYXlfdXJsKCBoZGEsIHRy YW5zICksCi0gICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgOiBnZXR0ZXh0KCBsaW5rX2FwcC5u YW1lICkKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgaWYgYXBwX2xpbmtzOgotICAg ICAgICAgICAgICAgIGRpc3BsYXlfYXBwcy5hcHBlbmQoIGRpY3QoIGxhYmVsPTNEZGlzcGxheV9h cHAubmFtZSwgbGlua3M9Cj0zRGFwcF9saW5rcyApICkKLQotICAgICAgICByZXR1cm4gZGlzcGxh eV9hcHBzCi0KLSAgICBkZWYgZ2V0X29sZF9kaXNwbGF5X2FwcGxpY2F0aW9ucyggc2VsZiwgdHJh bnMsIGhkYSApOgotICAgICAgICBkaXNwbGF5X2FwcHMgPTNEIFtdCi0gICAgICAgIGlmIG5vdCB0 cmFucy5hcHAuY29uZmlnLmVuYWJsZV9vbGRfZGlzcGxheV9hcHBsaWNhdGlvbnM6Ci0gICAgICAg ICAgICByZXR1cm4gZGlzcGxheV9hcHBzCi0KLSAgICAgICAgZm9yIGRpc3BsYXlfYXBwIGluIGhk YS5kYXRhdHlwZS5nZXRfZGlzcGxheV90eXBlcygpOgotICAgICAgICAgICAgdGFyZ2V0X2ZyYW1l LCBkaXNwbGF5X2xpbmtzID0zRCBoZGEuZGF0YXR5cGUuZ2V0X2Rpc3BsYXlfbGlua3M9CiggaGRh LAotICAgICAgICAgICAgICAgIGRpc3BsYXlfYXBwLCB0cmFucy5hcHAsIHRyYW5zLnJlcXVlc3Qu YmFzZSApCi0KLSAgICAgICAgICAgIGlmIGxlbiggZGlzcGxheV9saW5rcyApID4gMDoKLSAgICAg ICAgICAgICAgICBkaXNwbGF5X2xhYmVsID0zRCBoZGEuZGF0YXR5cGUuZ2V0X2Rpc3BsYXlfbGFi ZWwoIGRpc3BsYXlfPQphcHAgKQotCi0gICAgICAgICAgICAgICAgYXBwX2xpbmtzID0zRCBbXQot ICAgICAgICAgICAgICAgIGZvciBkaXNwbGF5X25hbWUsIGRpc3BsYXlfbGluayBpbiBkaXNwbGF5 X2xpbmtzOgotICAgICAgICAgICAgICAgICAgICBhcHBfbGlua3MuYXBwZW5kKHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXRfZnJhbWUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAnaHJlZicgIDogZGlzcGxheV9saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAg J3RleHQnICA6IGdldHRleHQoIGRpc3BsYXlfbmFtZSApCi0gICAgICAgICAgICAgICAgICAgIH0p Ci0gICAgICAgICAgICAgICAgaWYgYXBwX2xpbmtzOgotICAgICAgICAgICAgICAgICAgICBkaXNw bGF5X2FwcHMuYXBwZW5kKCBkaWN0KCBsYWJlbD0zRGRpc3BsYXlfbGFiZWwsIGxpbms9CnM9M0Rh cHBfbGlua3MgKSApCi0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXlfYXBwcwotCi0gICAgZGVmIHNl dF9oZGFfZnJvbV9kaWN0KCBzZWxmLCB0cmFucywgaGRhLCBuZXdfZGF0YSApOgotICAgICAgICAi IiIKLSAgICAgICAgQ2hhbmdlcyBIREEgZGF0YSB1c2luZyB0aGUgZ2l2ZW4gZGljdGlvbmFyeSBu ZXdfZGF0YS4KLSAgICAgICAgIiIiCi0gICAgICAgICMgcHJlY29uZGl0aW9uOiBhY2Nlc3Mgb2Yg dGhlIGhkYSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQKLQotICAgICAgICAjIHNlbmQgd2hhdCB3 ZSBjYW4gZG93biBpbnRvIHRoZSBtb2RlbAotICAgICAgICBjaGFuZ2VkID0zRCBoZGEuc2V0X2Zy b21fZGljdCggbmV3X2RhdGEgKQotICAgICAgICAjIHRoZSByZXN0IChvZnRlbiBpbnZvbHZpbmcg dGhlIHRyYW5zKSAtIGRvIGhlcmUKLSAgICAgICAgaWYgJ2Fubm90YXRpb24nIGluIG5ld19kYXRh LmtleXMoKSBhbmQgdHJhbnMuZ2V0X3VzZXIoKToKLSAgICAgICAgICAgIGhkYS5hZGRfaXRlbV9h bm5vdGF0aW9uKCB0cmFucy5zYV9zZXNzaW9uLCB0cmFucy5nZXRfdXNlcigpLCBoPQpkYSwgbmV3 X2RhdGFbICdhbm5vdGF0aW9uJyBdICkKLSAgICAgICAgICAgIGNoYW5nZWRbICdhbm5vdGF0aW9u JyBdID0zRCBuZXdfZGF0YVsgJ2Fubm90YXRpb24nIF0KLSAgICAgICAgaWYgJ3RhZ3MnIGluIG5l d19kYXRhLmtleXMoKSBhbmQgdHJhbnMuZ2V0X3VzZXIoKToKLSAgICAgICAgICAgIHNlbGYuc2V0 X3RhZ3NfZnJvbV9saXN0KCB0cmFucywgaGRhLCBuZXdfZGF0YVsgJ3RhZ3MnIF0sIHVzZXI9Cj0z RHRyYW5zLnVzZXIgKQotICAgICAgICAjIHNoYXJpbmcvcGVybWlzc2lvbnM/Ci0gICAgICAgICMg cHVyZ2VkCi0KLSAgICAgICAgaWYgY2hhbmdlZC5rZXlzKCk6Ci0gICAgICAgICAgICB0cmFucy5z YV9zZXNzaW9uLmZsdXNoKCkKLQotICAgICAgICByZXR1cm4gY2hhbmdlZAorI2xpYi9nYWxheHkv d2ViYXBwcy9nYWxheHkvYXBpL2RhdGFzZXRzLnB5Ojg5OiAgICAgICAgbXNnID0zRCBzZWxmLmNo ZWNrX2Q9CmF0YXNldF9zdGF0ZSggdHJhbnMsIGRhdGFzZXQgKQorI2xpYi9nYWxheHkvd2ViYXBw cy9nYWxheHkvYXBpL2RhdGFzZXRzLnB5OjEwMDogICAgICAgIG1zZyA9M0Qgc2VsZi5jaGVja189 CmRhdGFzZXRfc3RhdGUoIHRyYW5zLCBkYXRhc2V0ICkKKyNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2FwaS9kYXRhc2V0cy5weToxNDk6ICAgICAgICBtc2cgPTNEIHNlbGYuY2hlY2tfPQpkYXRh c2V0X3N0YXRlKCB0cmFucywgZGF0YXNldCApCisjbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvZGF0YXNldHMucHk6MjQyOiAgICAgICAgbXNnID0zRCBzZWxmLmNoZWNrXz0KZGF0YXNldF9z dGF0ZSggdHJhbnMsIGRhdGFzZXQgKQorI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rv b2xzLnB5OjI4NzogICAgICAgIG1zZyA9M0Qgc2VsZi5jaGVja19kYXQ9CmFzZXRfc3RhdGUoIHRy YW5zLCBvcmlnaW5hbF9kYXRhc2V0ICkKPTIwCiAgICAgZGVmIGdldF9oZGFfam9iKCBzZWxmLCBo ZGEgKToKICAgICAgICAgIyBHZXQgZGF0YXNldCdzIGpvYi4KQEAgLTUyNiw2ICszNzAsOSBAQAog ICAgICAgICAgICAgam9iID0zRCBqb2Jfb3V0cHV0X2Fzc29jLmpvYgogICAgICAgICAgICAgYnJl YWsKICAgICAgICAgcmV0dXJuIGpvYgorI2xpYi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxlci5w eTo4NDY6ICAgICAgICBqb2IgPTNEIHNlbGYuZ2V0X2hkYV9qb2IoIGg9CmRhICkKKyNsaWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS90b29scy5weToyOTY6ICAgICAgICBvcmlnaW5hbF9qb2Ig PTNEIHNlbGYuPQpnZXRfaGRhX2pvYiggb3JpZ2luYWxfZGF0YXNldCApCisjbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy92aXN1YWxpemF0aW9uLnB5Ojk3NzogICAgICAgICAg ICBqbz0KYiA9M0Qgc2VsZi5nZXRfaGRhX2pvYiggZGF0YXNldCApCj0yMAogICAgIGRlZiBzdG9w X2hkYV9jcmVhdGluZ19qb2IoIHNlbGYsIGhkYSApOgogICAgICAgICAiIiIKQEAgLTUzOSw3ICsz ODYsOCBAQAogICAgICAgICAgICAgICAgIGlmIGpvYi5jaGVja19pZl9vdXRwdXRfZGF0YXNldHNf ZGVsZXRlZCgpOgogICAgICAgICAgICAgICAgICAgICBqb2IubWFya19kZWxldGVkKCBzZWxmLmFw cC5jb25maWcudHJhY2tfam9ic19pbl9kYXRhYmE9CnNlICkKICAgICAgICAgICAgICAgICAgICAg c2VsZi5hcHAuam9iX21hbmFnZXIuam9iX3N0b3BfcXVldWUucHV0KCBqb2IuaWQgKQotCisjbGli L2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9yeV9jb250ZW50cy5weTozNjY6ICAgICAg ICAgICAgICAgIHNlbD0KZi5zdG9wX2hkYV9jcmVhdGluZ19qb2IoIGhkYSApCisjbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9kYXRhc2V0LnB5Ojc3MjogICAgICAgICAgICBz ZWxmLnN0bz0KcF9oZGFfY3JlYXRpbmdfam9iKCBoZGEgKQo9MjAKIGNsYXNzIFVzZXNMaWJyYXJ5 TWl4aW46Cj0yMAoKZGlmZiAtciA5OGQ0Y2I1ODFmNjIwMTM1OWE3ZGQwODQ1YWIyZDg1YjExZTk4 NWQ3IC1yIDE0M2YwMjJiYWU2OWQ4YWFhMDVmYjkzPQo4YmU5OWQzNjQ2NjY5OWE1NCBsaWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMv Z2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQpAQCAtNSwxMiArNSwxNCBAQAogZnJvbSBnYWxheHkg aW1wb3J0IHdlYgogZnJvbSBnYWxheHkubW9kZWwuaXRlbV9hdHRycyBpbXBvcnQgVXNlc0Fubm90 YXRpb25zCiBmcm9tIGdhbGF4eS51dGlsLnNhbml0aXplX2h0bWwgaW1wb3J0IHNhbml0aXplX2h0 bWwKLWZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9s bGVyLCBIVFRQTm90SW1wbGVtZW50PQplZCwgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25N aXhpbiwgVXNlc0hpc3RvcnlNaXhpbiwgVXNlc1N0b3JlZFdvcmtmbG89CndNaXhpbgorZnJvbSBn YWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIsIEhUVFBO b3RJbXBsZW1lbnQ9CmVkLCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2Vz U3RvcmVkV29ya2Zsb3dNaXhpbgorCitmcm9tIGdhbGF4eSBpbXBvcnQgbWFuYWdlcnMKPTIwCiBs b2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAo9MjAKLWNsYXNzIEJhc2VB bm5vdGF0aW9uc0NvbnRyb2xsZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzSGlzdG9yeU1peGlu LCBVc2VzPQpIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIFVzZXNTdG9yZWRXb3JrZmxv d01peGluLCBVc2VzQW5ub3RhdGlvbnMgKToKK2NsYXNzIEJhc2VBbm5vdGF0aW9uc0NvbnRyb2xs ZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvPQpjaWF0aW9uTWl4 aW4sIFVzZXNTdG9yZWRXb3JrZmxvd01peGluLCBVc2VzQW5ub3RhdGlvbnMgKToKPTIwCiAgICAg QHdlYi5leHBvc2VfYXBpCiAgICAgZGVmIGluZGV4KCBzZWxmLCB0cmFucywgKiprd2QgKToKQEAg LTUxLDkgKzUzLDE0IEBACiAgICAgY29udHJvbGxlcl9uYW1lID0zRCAiaGlzdG9yeV9hbm5vdGF0 aW9ucyIKICAgICB0YWdnZWRfaXRlbV9pZCA9M0QgImhpc3RvcnlfaWQiCj0yMAorICAgIGRlZiBf X2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVyKCBIaXN0b3J5QW5ub3RhdGlvbnND b250cm9sbGVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCisgICAgICAgIHNlbGYuaGlzdG9yeV9t YW5hZ2VyID0zRCBtYW5hZ2Vycy5oaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCisKICAg ICBkZWYgX2dldF9pdGVtX2Zyb21faWQoc2VsZiwgdHJhbnMsIGlkc3RyKToKLSAgICAgICAgaGlz dCA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGlkc3RyICkKLSAgICAgICAgcmV0dXJuIGhp c3QKKyAgICAgICAgZGVjb2RlZF9pZHN0ciA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBp ZHN0ciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2li bGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkXz0KaWRzdHIsIHRyYW5zLnVlciApCisgICAgICAgIHJl dHVybiBoaXN0b3J5Cj0yMAo9MjAKIGNsYXNzIEhpc3RvcnlDb250ZW50QW5ub3RhdGlvbnNDb250 cm9sbGVyKEJhc2VBbm5vdGF0aW9uc0NvbnRyb2xsZXIpOgoKZGlmZiAtciA5OGQ0Y2I1ODFmNjIw MTM1OWE3ZGQwODQ1YWIyZDg1YjExZTk4NWQ3IC1yIDE0M2YwMjJiYWU2OWQ4YWFhMDVmYjkzPQo4 YmU5OWQzNjQ2NjY5OWE1NCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0X2Nv bGxlY3Rpb25zLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2RhdGFzZXRf Y29sbGVjdGlvbnMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNl dF9jb2xsZWN0aW9ucy5weQpAQCAtMSw5ICsxLDkgQEAKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQg X2Z1dHVyZV9leHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKPTIwCiBmcm9tIGdhbGF4eS53ZWIuYmFz ZS5jb250cm9sbGVyIGltcG9ydCBCYXNlQVBJQ29udHJvbGxlcgotZnJvbSBnYWxheHkud2ViLmJh c2UuY29udHJvbGxlciBpbXBvcnQgVXNlc0hpc3RvcnlNaXhpbgogZnJvbSBnYWxheHkud2ViLmJh c2UuY29udHJvbGxlciBpbXBvcnQgVXNlc0xpYnJhcnlNaXhpbkl0ZW1zCj0yMAorZnJvbSBnYWxh eHkgaW1wb3J0IG1hbmFnZXJzCiBmcm9tIGdhbGF4eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGls IGltcG9ydCBhcGlfcGF5bG9hZF90b19jcmVhdGVfcGFyYW1zLD0KIGRpY3RpZnlfZGF0YXNldF9j b2xsZWN0aW9uX2luc3RhbmNlCj0yMAogZnJvbSBsb2dnaW5nIGltcG9ydCBnZXRMb2dnZXIKQEAg LTEyLDEwICsxMiwxMyBAQAo9MjAKIGNsYXNzIERhdGFzZXRDb2xsZWN0aW9uc0NvbnRyb2xsZXIo CiAgICAgQmFzZUFQSUNvbnRyb2xsZXIsCi0gICAgVXNlc0hpc3RvcnlNaXhpbiwKICAgICBVc2Vz TGlicmFyeU1peGluSXRlbXMsCiApOgo9MjAKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCAp OgorICAgICAgICBzdXBlciggRGF0YXNldENvbGxlY3Rpb25zQ29udHJvbGxlciwgc2VsZiApLl9f aW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlciA9M0QgbWFuYWdlcnMu aGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorCiAgICAgQGV4cG9zZV9hcGkKICAgICBk ZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCAqKmt3ZCApOgogICAgICAgICB0cmFucy5yZXNwb25zZS5z dGF0dXMgPTNEIDUwMQpAQCAtNDEsNyArNDQsOCBAQAogICAgICAgICBpbnN0YW5jZV90eXBlID0z RCBwYXlsb2FkLnBvcCggImluc3RhbmNlX3R5cGUiLCAiaGlzdG9yeSIgKQogICAgICAgICBpZiBp bnN0YW5jZV90eXBlID0zRD0zRCAiaGlzdG9yeSI6CiAgICAgICAgICAgICBoaXN0b3J5X2lkID0z RCBwYXlsb2FkLmdldCggJ2hpc3RvcnlfaWQnICkKLSAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNl bGYuZ2V0X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkLCBjaGVja19vd25lcnNoPQppcD0zRFRy dWUsIGNoZWNrX2FjY2Vzc2libGU9M0RGYWxzZSApCisgICAgICAgICAgICBoaXN0b3J5X2lkID0z RCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKQorICAgICAgICAgICAgaGlz dG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBoaXN0b3J5 X2k9CmQsIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgY3JlYXRlX3BhcmFtc1sgInBhcmVudCIg XSA9M0QgaGlzdG9yeQogICAgICAgICBlbGlmIGluc3RhbmNlX3R5cGUgPTNEPTNEICJsaWJyYXJ5 IjoKICAgICAgICAgICAgIGZvbGRlcl9pZCA9M0QgcGF5bG9hZC5nZXQoICdmb2xkZXJfaWQnICkK CmRpZmYgLXIgOThkNGNiNTgxZjYyMDEzNTlhN2RkMDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNm MDIyYmFlNjlkOGFhYTA1ZmI5Mz0KOGJlOTlkMzY0NjY2OTlhNTQgbGliL2dhbGF4eS93ZWJhcHBz L2dhbGF4eS9hcGkvZGF0YXNldHMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvZGF0YXNldHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNl dHMucHkKQEAgLTEzLDE1ICsxMywxMyBAQAogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxl ciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xs ZXIgaW1wb3J0IFVzZXNWaXN1YWxpemF0aW9uTWl4aW4KIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNv bnRyb2xsZXIgaW1wb3J0IFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4KLWZyb20g Z2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IFVzZXNIaXN0b3J5TWl4aW4KIGZyb20g Z2FsYXh5IGltcG9ydCBtYW5hZ2Vycwo9MjAKIGltcG9ydCBsb2dnaW5nCiBsb2cgPTNEIGxvZ2dp bmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAo9MjAKLWNsYXNzIERhdGFzZXRzQ29udHJvbGxl ciggQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNWaXN1YWxpemF0aW9uTWl4aW4sIFVzZXNIPQppc3Rv cnlNaXhpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlc0hpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb25NaXhpbiApOgorY2xhc3MgRGF0YXNldHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJv bGxlciwgVXNlc1Zpc3VhbGl6YXRpb25NaXhpbiwgVXNlc0g9CmlzdG9yeURhdGFzZXRBc3NvY2lh dGlvbk1peGluICk6Cj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAg IHN1cGVyKCBEYXRhc2V0c0NvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKQEAgLTI4 MSwyNCArMjc5LDI1IEBACiAgICAgICAgIHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSB3aXRob3V0 IHdhcm5pbmcuIEdlbmVyYWxseSwgZGF0YSBzaG91bGQgYj0KZSBwcm9jZXNzZWQgYnkgaXRzCiAg ICAgICAgIGRhdGF0eXBlIHByaW9yIHRvIGRpc3BsYXkgKHRoZSBkZWZ1bHQgaWYgcmF3IGlzIHVu c3BlY2lmaWVkIG9yIGV4cD0KbGljaXRseSBmYWxzZS4KICAgICAgICAgIiIiCisgICAgICAgIGRl Y29kZWRfY29udGVudF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBoaXN0b3J5X2Nv bnRlbnRfaT0KZCApCiAgICAgICAgIHJhdyA9M0QgdXRpbC5zdHJpbmdfYXNfYm9vbF9vcl9ub25l KCByYXcgKQorCiAgICAgICAgIHJ2YWwgPTNEICcnCiAgICAgICAgIHRyeToKLSAgICAgICAgICAg IGhkYSA9M0Qgc2VsZi5nZXRfaGlzdG9yeV9kYXRhc2V0X2Fzc29jaWF0aW9uX2Zyb21faWRzKCB0 cmFucywgPQpoaXN0b3J5X2NvbnRlbnRfaWQsIGhpc3RvcnlfaWQgKQorICAgICAgICAgICAgaGRh ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9jb250 ZW49CnRfaWQsIHRyYW5zLnVzZXIgKQo9MjAKLSAgICAgICAgICAgIGRpc3BsYXlfa3dkID0zRCBr d2QuY29weSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZGVsIGRpc3BsYXlf a3dkWyJrZXkiXQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAg IHBhc3MKICAgICAgICAgICAgIGlmIHJhdzoKICAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZSBh bmQgZmlsZW5hbWUgIT0zRCAnaW5kZXgnOgotICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGgg PTNEIHRyYW5zLmFwcC5vYmplY3Rfc3RvcmUuZ2V0X2ZpbGVuYW1lKGhkYS49CmRhdGFzZXQsIGV4 dHJhX2Rpcj0zRCdkYXRhc2V0XyVzX2ZpbGVzJyAlIGhkYS5kYXRhc2V0LmlkLCBhbHRfbmFtZT0z RGZpbGVuYT0KbWUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9M0QgdHJhbnMuYXBw Lm9iamVjdF9zdG9yZS5nZXRfZmlsZW5hbWUoIGhkYT0KLmRhdGFzZXQsCisgICAgICAgICAgICAg ICAgICAgICAgICBleHRyYV9kaXI9M0QoICdkYXRhc2V0XyVzX2ZpbGVzJyAlIGhkYS5kYXRhc2V0 LmlkID0KKSwgYWx0X25hbWU9M0RmaWxlbmFtZSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAg ICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPTNEIGhkYS5maWxlX25hbWUKICAgICAgICAgICAg ICAgICBydmFsID0zRCBvcGVuKCBmaWxlX3BhdGggKQo9MjAKICAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgZGlzcGxheV9rd2QgPTNEIGt3ZC5jb3B5KCkKKyAgICAgICAgICAgICAg ICBpZiAna2V5JyBpbiBkaXNwbGF5X2t3ZDoKKyAgICAgICAgICAgICAgICAgICAgZGVsIGRpc3Bs YXlfa3dkWyJrZXkiXQogICAgICAgICAgICAgICAgIHJ2YWwgPTNEIGhkYS5kYXRhdHlwZS5kaXNw bGF5X2RhdGEoIHRyYW5zLCBoZGEsIHByZXZpZXcsIGY9CmlsZW5hbWUsIHRvX2V4dCwgY2h1bmss ICoqZGlzcGxheV9rd2QgKQo9MjAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjZXB0aW9u OgoKZGlmZiAtciA5OGQ0Y2I1ODFmNjIwMTM1OWE3ZGQwODQ1YWIyZDg1YjExZTk4NWQ3IC1yIDE0 M2YwMjJiYWU2OWQ4YWFhMDVmYjkzPQo4YmU5OWQzNjQ2NjY5OWE1NCBsaWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQpAQCAtMywxMSArMywxMSBAQAogIiIi CiBpbXBvcnQgbG9nZ2luZwogZnJvbSBnYWxheHkgaW1wb3J0IHdlYgotZnJvbSBnYWxheHkud2Vi LmJhc2UuY29udHJvbGxlciBpbXBvcnQgIEJhc2VBUElDb250cm9sbGVyLCBVc2VzSGlzdG9yeU1p eGk9Cm4sIFVzZXNMaWJyYXJ5TWl4aW5JdGVtcywgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRp b25NaXhpbiwgVXNlc1N0b3JlZFdvcj0Ka2Zsb3dNaXhpbiwgVXNlc0V4dGVuZGVkTWV0YWRhdGFN aXhpbiwgSFRUUE5vdEltcGxlbWVudGVkCitmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVy IGltcG9ydCAgQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNMaWJyYXJ5TWl4aT0Kbkl0ZW1zLCBVc2Vz SGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2VzU3RvcmVkV29ya2Zsb3dNaXhpbiwg VXNlc0V4PQp0ZW5kZWRNZXRhZGF0YU1peGluLCBIVFRQTm90SW1wbGVtZW50ZWQKPTIwCiBsb2cg PTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAotY2xhc3MgQmFzZUV4dGVuZGVk TWV0YWRhdGFDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0V4dGVuZGVkTWV0YWQ9 CmF0YU1peGluLCBVc2VzSGlzdG9yeU1peGluLCBVc2VzTGlicmFyeU1peGluSXRlbXMsIFVzZXNI aXN0b3J5RGF0YXNldEFzc29jaT0KYXRpb25NaXhpbiwgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4g KToKK2NsYXNzIEJhc2VFeHRlbmRlZE1ldGFkYXRhQ29udHJvbGxlciggQmFzZUFQSUNvbnRyb2xs ZXIsIFVzZXNFeHRlbmRlZE1ldGFkPQphdGFNaXhpbiwgVXNlc0xpYnJhcnlNaXhpbkl0ZW1zLCBV c2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2VzU3Q9Cm9yZWRXb3JrZmxvd01p eGluICk6Cj0yMAogICAgIEB3ZWIuZXhwb3NlX2FwaQogICAgIGRlZiBpbmRleCggc2VsZiwgdHJh bnMsICoqa3dkICk6CgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODViMTFl OTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxpYi9n YWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3RvcnlfY29udGVudHMucHkKLS0tIGEvbGliL2dh bGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9yeV9jb250ZW50cy5weQorKysgYi9saWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3J5X2NvbnRlbnRzLnB5CkBAIC0xMSw3ICsxMSw2 IEBACj0yMAogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNv bnRyb2xsZXIKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IFVzZXNIaXN0 b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4KLWZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xs ZXIgaW1wb3J0IFVzZXNIaXN0b3J5TWl4aW4KIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xs ZXIgaW1wb3J0IFVzZXNMaWJyYXJ5TWl4aW4KIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xs ZXIgaW1wb3J0IFVzZXNMaWJyYXJ5TWl4aW5JdGVtcwogZnJvbSBnYWxheHkud2ViLmJhc2UuY29u dHJvbGxlciBpbXBvcnQgVXNlc1RhZ3NNaXhpbgpAQCAtMjcsNyArMjYsNyBAQAogbG9nID0zRCBs b2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQo9MjAKPTIwCi1jbGFzcyBIaXN0b3J5Q29udGVu dHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0hpc3RvcnlEYXRhc2V0QXNzbz0K Y2lhdGlvbk1peGluLCBVc2VzSGlzdG9yeU1peGluLAorY2xhc3MgSGlzdG9yeUNvbnRlbnRzQ29u dHJvbGxlciggQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5RGF0YXNldEFzc289CmNpYXRp b25NaXhpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXNMaWJyYXJ5TWl4 aW4sIFVzZXNMaWJyYXJ5TWl4aW5JdGVtcywgPQpVc2VzVGFnc01peGluICk6Cj0yMAogICAgIGRl ZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CkBAIC0zNTgsMTEgKzM1Nyw4IEBACiAgICAgICAgICAg ICAgICAgaGRhID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91cGxvYWRpbmcoIHRyYW5zLCBo ZGEgKQo9MjAKICAgICAgICAgIyBtYWtlIHRoZSBhY3R1YWwgY2hhbmdlcwotICAgICAgICAjVE9E TzogdG8gZGVzZXJpYWxpemVyCiAgICAgICAgICNUT0RPOiBpcyB0aGlzIGlmIHN0aWxsIG5lZWRl ZD8KICAgICAgICAgaWYgaGRhIGFuZCBpc2luc3RhbmNlKCBoZGEsIHRyYW5zLm1vZGVsLkhpc3Rv cnlEYXRhc2V0QXNzb2NpYXRpb24gPQopOgotICAgICAgICAgICAgI3BheWxvYWQgPTNEIHNlbGYu X3ZhbGlkYXRlX2FuZF9wYXJzZV91cGRhdGVfcGF5bG9hZCggcGF5bG9hZCApCi0gICAgICAgICAg ICAjY2hhbmdlZCA9M0Qgc2VsZi5zZXRfaGRhX2Zyb21fZGljdCggdHJhbnMsIGhkYSwgcGF5bG9h ZCApCiAgICAgICAgICAgICBzZWxmLmhkYV9kZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoIHRyYW5z LCBoZGEsIHBheWxvYWQgKQogICAgICAgICAgICAgI1RPRE86IHRoaXMgc2hvdWxkIGJlIGFuIGVm ZmVjdCBvZiBkZWxldGluZyB0aGUgaGRhCiAgICAgICAgICAgICBpZiBwYXlsb2FkLmdldCggJ2Rl bGV0ZWQnLCBGYWxzZSApOgoKZGlmZiAtciA5OGQ0Y2I1ODFmNjIwMTM1OWE3ZGQwODQ1YWIyZDg1 YjExZTk4NWQ3IC1yIDE0M2YwMjJiYWU2OWQ4YWFhMDVmYjkzPQo4YmU5OWQzNjQ2NjY5OWE1NCBs aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9wcm92ZW5hbmNlLnB5Ci0tLSBhL2xpYi9nYWxh eHkvd2ViYXBwcy9nYWxheHkvYXBpL3Byb3ZlbmFuY2UucHkKKysrIGIvbGliL2dhbGF4eS93ZWJh cHBzL2dhbGF4eS9hcGkvcHJvdmVuYW5jZS5weQpAQCAtMywxNCArMywxNCBAQAogIiIiCiBpbXBv cnQgbG9nZ2luZwogZnJvbSBnYWxheHkgaW1wb3J0IHdlYgotZnJvbSBnYWxheHkud2ViLmJhc2Uu Y29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5TWl4aW4KK2Zy b20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyCiBm cm9tIHBhc3RlLmh0dHBleGNlcHRpb25zIGltcG9ydCBIVFRQTm90SW1wbGVtZW50ZWQsIEhUVFBC YWRSZXF1ZXN0CiBmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgaGRhcwo9MjAKIGxvZyA9M0Qg bG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCj0yMAotY2xhc3MgQmFzZVByb3ZlbmFu Y2VDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0hpc3RvcnlNaXhpbiApOgorY2xh c3MgQmFzZVByb3ZlbmFuY2VDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciApOgogICAgICIi IgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CgpkaWZmIC1yIDk4ZDRj YjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEw NWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rv b2xzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rvb2xzLnB5CisrKyBi L2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rvb2xzLnB5CkBAIC03LDcgKzcsNiBAQAog ZnJvbSBnYWxheHkud2ViIGltcG9ydCBfZnV0dXJlX2V4cG9zZV9hcGkKIGZyb20gZ2FsYXh5Lndl Yi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyCiBmcm9tIGdhbGF4eS53 ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzVmlzdWFsaXphdGlvbk1peGluCi1mcm9tIGdh bGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlzdG9yeU1peGluCiBmcm9tIGdh bGF4eS52aXN1YWxpemF0aW9uLmdlbm9tZXMgaW1wb3J0IEdlbm9tZVJlZ2lvbgogZnJvbSBnYWxh eHkudXRpbC5qc29uIGltcG9ydCBkdW1wcwogZnJvbSBnYWxheHkudmlzdWFsaXphdGlvbi5kYXRh X3Byb3ZpZGVycy5nZW5vbWUgaW1wb3J0ICoKQEAgLTI1LDcgKzI0LDcgQEAKIGxvZyA9M0QgbG9n Z2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCj0yMAotY2xhc3MgVG9vbHNDb250cm9sbGVy KCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc1Zpc3VhbGl6YXRpb25NaXhpbiwgVXNlc0hpc3Q9Cm9y eU1peGluICk6CitjbGFzcyBUb29sc0NvbnRyb2xsZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2Vz VmlzdWFsaXphdGlvbk1peGluICk6CiAgICAgIiIiCiAgICAgUkVTVGZ1bCBjb250cm9sbGVyIGZv ciBpbnRlcmFjdGlvbnMgd2l0aCB0b29scy4KICAgICAiIiIKCmRpZmYgLXIgOThkNGNiNTgxZjYy MDEzNTlhN2RkMDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNmMDIyYmFlNjlkOGFhYTA1ZmI5Mz0K OGJlOTlkMzY0NjY2OTlhNTQgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvd29ya2Zsb3dz LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3dvcmtmbG93cy5weQorKysg Yi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS93b3JrZmxvd3MucHkKQEAgLTEzLDcgKzEz LDYgQEAKIGZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCB3b3JrZmxvd3MKIGZyb20gZ2FsYXh5 LndlYiBpbXBvcnQgX2Z1dHVyZV9leHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKIGZyb20gZ2FsYXh5 LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyLCB1cmxfZm9yLCBV c2VzU3RvPQpyZWRXb3JrZmxvd01peGluCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVy IGltcG9ydCBVc2VzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVy IGltcG9ydCBTaGFyYWJsZU1peGluCiBmcm9tIGdhbGF4eS53b3JrZmxvdy5leHRyYWN0IGltcG9y dCBleHRyYWN0X3dvcmtmbG93CiBmcm9tIGdhbGF4eS53b3JrZmxvdy5ydW4gaW1wb3J0IGludm9r ZSwgcXVldWVfaW52b2tlCkBAIC0yMiwxMCArMjEsMTAgQEAKIGxvZyA9M0QgbG9nZ2luZy5nZXRM b2dnZXIoX19uYW1lX18pCj0yMAo9MjAKLWNsYXNzIFdvcmtmbG93c0FQSUNvbnRyb2xsZXIoQmFz ZUFQSUNvbnRyb2xsZXIsIFVzZXNTdG9yZWRXb3JrZmxvd01peGluLCBVPQpzZXNIaXN0b3J5TWl4 aW4sIFVzZXNBbm5vdGF0aW9ucywgU2hhcmFibGVNaXhpbik6CitjbGFzcyBXb3JrZmxvd3NBUElD b250cm9sbGVyKEJhc2VBUElDb250cm9sbGVyLCBVc2VzU3RvcmVkV29ya2Zsb3dNaXhpbiwgVT0K c2VzQW5ub3RhdGlvbnMsIFNoYXJhYmxlTWl4aW4pOgo9MjAKICAgICBkZWYgX19pbml0X18oIHNl bGYsIGFwcCApOgotICAgICAgICBzdXBlciggQmFzZUFQSUNvbnRyb2xsZXIsIHNlbGYgKS5fX2lu aXRfXyggYXBwICkKKyAgICAgICAgc3VwZXIoIFdvcmtmbG93c0FQSUNvbnRyb2xsZXIsIHNlbGYg KS5fX2luaXRfXyggYXBwICkKICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIGhpc3Rv cmllcy5IaXN0b3J5TWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi53b3JrZmxvd19tYW5hZ2Vy ID0zRCB3b3JrZmxvd3MuV29ya2Zsb3dzTWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi53b3Jr Zmxvd19jb250ZW50c19tYW5hZ2VyID0zRCB3b3JrZmxvd3MuV29ya2Zsb3dDb250ZW50c01hbmFn PQplcigpCkBAIC0xNDksNyArMTQ4LDkgQEAKPTIwCiAgICAgICAgIGlmICdmcm9tX2hpc3Rvcnlf aWQnIGluIHBheWxvYWQ6CiAgICAgICAgICAgICBmcm9tX2hpc3RvcnlfaWQgPTNEIHBheWxvYWQu Z2V0KCAnZnJvbV9oaXN0b3J5X2lkJyApCi0gICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdl dF9oaXN0b3J5KCB0cmFucywgZnJvbV9oaXN0b3J5X2lkLCBjaGVja19vdz0KbmVyc2hpcD0zREZh bHNlLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCisgICAgICAgICAgICBmcm9tX2hpc3Rvcnlf aWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggZnJvbV9oaXN0b3J5X2lkICkKKyAgICAg ICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQo IHRyYW5zLCBmcm9tPQpfaGlzdG9yeV9pZCwgdHJhbnMudXNlciApCisKICAgICAgICAgICAgIGpv Yl9pZHMgPTNEIG1hcCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkLCBwYXlsb2FkLmdldCggJ2pv Yl9pPQpkcycsIFtdICkgKQogICAgICAgICAgICAgZGF0YXNldF9pZHMgPTNEIHBheWxvYWQuZ2V0 KCAnZGF0YXNldF9pZHMnLCBbXSApCiAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faWRz ID0zRCBwYXlsb2FkLmdldCggJ2RhdGFzZXRfY29sbGVjdGlvbl9pZD0KcycsIFtdICkKCmRpZmYg LXIgOThkNGNiNTgxZjYyMDEzNTlhN2RkMDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNmMDIyYmFl NjlkOGFhYTA1ZmI5Mz0KOGJlOTlkMzY0NjY2OTlhNTQgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4 eS9jb250cm9sbGVycy9kYXRhc2V0LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkv Y29udHJvbGxlcnMvZGF0YXNldC5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Nv bnRyb2xsZXJzL2RhdGFzZXQucHkKQEAgLTMsMTIgKzMsMTMgQEAKIGltcG9ydCB1cmxsaWIKPTIw CiBmcm9tIGdhbGF4eSBpbXBvcnQgZGF0YXR5cGVzLCBlZ2dzLCBtb2RlbCwgdXRpbCwgd2ViCitm cm9tIGdhbGF4eSBpbXBvcnQgbWFuYWdlcnMKIGZyb20gZ2FsYXh5LmRhdGF0eXBlcy5kaXNwbGF5 X2FwcGxpY2F0aW9ucy51dGlsIGltcG9ydCBkZWNvZGVfZGF0YXNldF91c2VyPQosIGVuY29kZV9k YXRhc2V0X3VzZXIKIGZyb20gZ2FsYXh5Lm1vZGVsLml0ZW1fYXR0cnMgaW1wb3J0IFVzZXNBbm5v dGF0aW9ucywgVXNlc0l0ZW1SYXRpbmdzCiBmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBpbmZsZWN0 b3IsIHNtYXJ0X3N0cgogZnJvbSBnYWxheHkudXRpbC5zYW5pdGl6ZV9odG1sIGltcG9ydCBzYW5p dGl6ZV9odG1sCiBmcm9tIGdhbGF4eS51dGlsLmpzb24gaW1wb3J0IGxvYWRzCi1mcm9tIGdhbGF4 eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9sbGVyLCBFUlJPUiwgU1VD Q0VTUywgdT0KcmxfZm9yLCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2Vz SGlzdG9yeU1peGluLCBVc2VzRXh0ZW5kZWRNPQpldGFkYXRhTWl4aW4KK2Zyb20gZ2FsYXh5Lndl Yi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VVSUNvbnRyb2xsZXIsIEVSUk9SLCBTVUNDRVNT LCB1PQpybF9mb3IsIFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIFVzZXNFeHRl bmRlZE1ldGFkYXRhTWl4aW4KIGZyb20gZ2FsYXh5LndlYi5mcmFtZXdvcmsuaGVscGVycyBpbXBv cnQgZ3JpZHMsIGlmZiwgdGltZV9hZ28sIHRvX3VuaWNvZGUsPQogZXNjYXBlCiBmcm9tIGdhbGF4 eS50b29scy5lcnJvcnMgaW1wb3J0IEVtYWlsRXJyb3JSZXBvcnRlcgo9MjAKQEAgLTg1LDEwICs4 NiwxNiBAQAogICAgICAgICAgICAgICAgIC5maWx0ZXIoIG1vZGVsLkhpc3RvcnkuZGVsZXRlZD0z RD0zREZhbHNlICkgXAogICAgICAgICAgICAgICAgIC5maWx0ZXIoIHNlbGYubW9kZWxfY2xhc3Mu dmlzaWJsZT0zRD0zRFRydWUgKQo9MjAKLWNsYXNzIERhdGFzZXRJbnRlcmZhY2UoIEJhc2VVSUNv bnRyb2xsZXIsIFVzZXNBbm5vdGF0aW9ucywgVXNlc0hpc3RvcnlNaXhpPQpuLCBVc2VzSGlzdG9y eURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2VzSXRlbVJhdGluZ3MsIFVzZXNFeHRlbmRlZE1l dGFkYXQ9CmFNaXhpbiApOgorY2xhc3MgRGF0YXNldEludGVyZmFjZSggQmFzZVVJQ29udHJvbGxl ciwgVXNlc0Fubm90YXRpb25zLCBVc2VzSGlzdG9yeURhdGE9CnNldEFzc29jaWF0aW9uTWl4aW4s IFVzZXNJdGVtUmF0aW5ncywgVXNlc0V4dGVuZGVkTWV0YWRhdGFNaXhpbiApOgo9MjAKICAgICBz dG9yZWRfbGlzdF9ncmlkID0zRCBIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTGlzdEdyaWQoKQo9 MjAKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBlciggRGF0YXNl dEludGVyZmFjZSwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLm1ncnMgPTNE IHV0aWwuYnVuY2guQnVuY2goCisgICAgICAgICAgICBoaXN0b3JpZXM9M0RtYW5hZ2Vycy5oaXN0 b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCisgICAgICAgICkKKwogICAgIGRlZiBfZ2V0X2pv Yl9mb3JfZGF0YXNldCggc2VsZiwgdHJhbnMsIGRhdGFzZXRfaWQgKToKICAgICAgICAgJycnCiAg ICAgICAgIFJldHVybiB0aGUgam9iIGZvciB0aGUgZ2l2ZW4gZGF0YXNldC4gVGhpcyB3aWxsIHRo cm93IGFuIGVycm9yIGlmID0KdGhlCkBAIC05OTMsNyArMTAwMCw4IEBACiAgICAgZGVmIGNvcHlf ZGF0YXNldHMoIHNlbGYsIHRyYW5zLCBzb3VyY2VfaGlzdG9yeT0zRE5vbmUsIHNvdXJjZV9jb250 ZW50Xz0KaWRzPTNEIiIsIHRhcmdldF9oaXN0b3J5X2lkPTNETm9uZSwgdGFyZ2V0X2hpc3Rvcnlf aWRzPTNEIiIsIG5ld19oaXN0b3J5X25hPQptZT0zRCIiLCBkb19jb3B5PTNERmFsc2UsICoqa3dk ICk6CiAgICAgICAgIHVzZXIgPTNEIHRyYW5zLmdldF91c2VyKCkKICAgICAgICAgaWYgc291cmNl X2hpc3RvcnkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdldF9o aXN0b3J5KHRyYW5zLCBzb3VyY2VfaGlzdG9yeSkKKyAgICAgICAgICAgIGRlY29kZWRfc291cmNl X2hpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggc291cmNlPQpfaGlzdG9y eSApCisgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLm1ncnMuaGlzdG9yaWVzLm93bmVkX2J5 X2lkKCB0cmFucywgZGVjb2RlZF9zbz0KdXJjZV9oaXN0b3J5X2lkLCB0cmFucy51c2VyICkKICAg ICAgICAgICAgIGN1cnJlbnRfaGlzdG9yeSA9M0QgdHJhbnMuZ2V0X2hpc3RvcnkoKQogICAgICAg ICBlbHNlOgogICAgICAgICAgICAgaGlzdG9yeSA9M0QgY3VycmVudF9oaXN0b3J5ID0zRCB0cmFu cy5nZXRfaGlzdG9yeSgpCgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODVi MTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IGxp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weQotLS0gYS9saWIv Z2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2hpc3RvcnkucHkKKysrIGIvbGliL2dh bGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9oaXN0b3J5LnB5CkBAIC0xOSw3ICsxOSw2 IEBACiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9s bGVyCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBTaGFyYWJsZU1peGlu CiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlzdG9yeURhdGFz ZXRBc3NvY2lhdGlvbk1peGluCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9y dCBVc2VzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9y dCBFeHBvcnRzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGlt cG9ydCBJbXBvcnRzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJzIGlt cG9ydCBVc2VzQW5ub3RhdGlvbnMKQEAgLTQwLDcgKzM5LDcgQEAKIGNsYXNzIEhpc3RvcnlMaXN0 R3JpZCggZ3JpZHMuR3JpZCApOgo9MjAKICAgICAjIEN1c3RvbSBjb2x1bW4gdHlwZXMKLSAgICBj bGFzcyBEYXRhc2V0c0J5U3RhdGVDb2x1bW4oIGdyaWRzLkdyaWRDb2x1bW4sIFVzZXNIaXN0b3J5 TWl4aW4gKToKKyAgICBjbGFzcyBEYXRhc2V0c0J5U3RhdGVDb2x1bW4oIGdyaWRzLkdyaWRDb2x1 bW4gKToKICAgICAgICAgZGVmIGdldF92YWx1ZSggc2VsZiwgdHJhbnMsIGdyaWQsIGhpc3Rvcnkg KToKICAgICAgICAgICAgIHN0YXRlX2NvdW50cyA9M0QgewogICAgICAgICAgICAgICAgICdvaycg OiAwLApAQCAtMjEyLDcgKzIxMSw3IEBACiAgICAgICAgIHJldHVybiBxdWVyeS5maWx0ZXIoIHNl bGYubW9kZWxfY2xhc3MucHVibGlzaGVkID0zRD0zRCBUcnVlICkuZmlsdD0KZXIoIHNlbGYubW9k ZWxfY2xhc3Muc2x1ZyAhPTNEIE5vbmUgKS5maWx0ZXIoIHNlbGYubW9kZWxfY2xhc3MuZGVsZXRl ZCA9M0Q9Cj0zRCBGYWxzZSApCj0yMAogY2xhc3MgSGlzdG9yeUNvbnRyb2xsZXIoIEJhc2VVSUNv bnRyb2xsZXIsIFNoYXJhYmxlTWl4aW4sIFVzZXNBbm5vdGF0aW9ucyw9CiBVc2VzSXRlbVJhdGlu Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVXNlc0hpc3RvcnlNaXhpbiwgVXNlc0hpc3Rv cnlEYXRhc2V0QXNzb2NpYXRpb25NaT0KeGluLCBFeHBvcnRzSGlzdG9yeU1peGluLAorICAgICAg ICAgICAgICAgICAgICAgICAgIFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIEV4 cG9ydHNIaXN0b3I9CnlNaXhpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBvcnRzSGlz dG9yeU1peGluICk6Cj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CkBAIC0yMjIs NiArMjIxLDE5IEBACiAgICAgICAgICkKICAgICAgICAgc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIg PTNEIG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5U2VyaWFsaXplciggPQpzZWxmLmFwcCApCj0y MAorICAgIGRlZiBfZ2V0X2hpc3RvcnkoIHNlbGYsIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlw PTNEVHJ1ZSwgY2hlY2tfYWNjZXM9CnNpYmxlPTNERmFsc2UsIGRlbGV0ZWQ9M0ROb25lICk6Cisg ICAgICAgICIiIgorICAgICAgICBHZXQgYSBIaXN0b3J5IGZyb20gdGhlIGRhdGFiYXNlIGJ5IGlk LCB2ZXJpZnlpbmcgb3duZXJzaGlwLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdHJhbnMudXNl ciBpcyBOb25lIGFuZCB0cmFucy5oaXN0b3J5OgorICAgICAgICAgICAgaWYgaWQgPTNEPTNEIHRy YW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApOgorICAgICAgICAgICAg ICAgIHJldHVybiB0cmFucy5oaXN0b3J5CisgICAgICAgICAgICByYWlzZSBJdGVtT3duZXJzaGlw RXhjZXB0aW9uKCAiTXVzdCBiZSBsb2dnZWQgaW4gdG8gbWFuYWdlIEdhbD0KYXh5IGl0ZW1zIiwg dHlwZT0zRCdlcnJvcicgKQorCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuZ2V0X29iamVjdCgg dHJhbnMsIGlkLCAnSGlzdG9yeScsCisgICAgICAgICAgICBjaGVja19vd25lcnNoaXA9M0RjaGVj a19vd25lcnNoaXAsIGNoZWNrX2FjY2Vzc2libGU9M0RjaGVja19hYz0KY2Vzc2libGUsIGRlbGV0 ZWQ9M0RkZWxldGVkICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5zZWN1cml0eV9jaGVjaygg dHJhbnMsIGhpc3RvcnksIGNoZWNrX293bmVyc2hpcCwgPQpjaGVja19hY2Nlc3NpYmxlICkKKyAg ICAgICAgcmV0dXJuIGhpc3RvcnkKPTIwCiAgICAgQHdlYi5leHBvc2UKICAgICBkZWYgaW5kZXgo IHNlbGYsIHRyYW5zICk6CkBAIC0yNjQsNyArMjc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAg ZGVsIGt3YXJnc1snbmFtZSddICMgUmVtb3ZlIGFqYXggbmFtZSBwYXJhbSB0aGF0IHJlbmFtPQpl IG1ldGhvZCB1c2VzCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVuYW1lKCB0cmFucywg Kiprd2FyZ3MgKQogICAgICAgICAgICAgaWYgb3BlcmF0aW9uID0zRD0zRCAidmlldyI6Ci0gICAg ICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGt3YXJncy5n ZXQoICdpZCcsIE5vbj0KZSApICkKKyAgICAgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLl9n ZXRfaGlzdG9yeSggdHJhbnMsIGt3YXJncy5nZXQoICdpZCcsIE5vPQpuZSApICkKICAgICAgICAg ICAgICAgICBpZiBoaXN0b3J5OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnMucmVz cG9uc2Uuc2VuZF9yZWRpcmVjdCggdXJsX2ZvciggY29udHJvbGw9CmVyPTNEJ2hpc3RvcnknLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWN0aW9uPQo9M0QndmlldycsCkBAIC0yODEsNyArMjkzLDcgQEAKICAgICAgICAg ICAgICMgTG9hZCB0aGUgaGlzdG9yaWVzIGFuZCBlbnN1cmUgdGhleSBhbGwgYmVsb25nIHRvIHRo ZSBjdXJyZW50PQogdXNlcgogICAgICAgICAgICAgaGlzdG9yaWVzID0zRCBbXQogICAgICAgICAg ICAgZm9yIGhpc3RvcnlfaWQgaW4gaGlzdG9yeV9pZHM6Ci0gICAgICAgICAgICAgICAgaGlzdG9y eSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQgKQorICAgICAgICAgICAg ICAgIGhpc3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCApCiAg ICAgICAgICAgICAgICAgaWYgaGlzdG9yeToKICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUg aGlzdG9yeSBpcyBvd25lZCBieSBjdXJyZW50IHVzZXIKICAgICAgICAgICAgICAgICAgICAgaWYg aGlzdG9yeS51c2VyX2lkICE9M0QgTm9uZSBhbmQgdHJhbnMudXNlcjoKQEAgLTMyNCw3ICszMzYs NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2VfaXRlbV9pbXBvcnRh YmxlKCB0cmFucy5zYV9zZXNzaW9uLCA9Cmhpc3RvcnkgKQogICAgICAgICAgICAgICAgIGVsaWYg b3BlcmF0aW9uID0zRD0zRCAiZGlzYWJsZSBpbXBvcnQgdmlhIGxpbmsiOgogICAgICAgICAgICAg ICAgICAgICBpZiBoaXN0b3J5X2lkczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rvcmll cyA9M0QgWyBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pPQpkICkgZm9yIGhpc3Rv cnlfaWQgaW4gaGlzdG9yeV9pZHMgXQorICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yaWVz ID0zRCBbIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV89CmlkICkgZm9yIGhpc3Rv cnlfaWQgaW4gaGlzdG9yeV9pZHMgXQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhpc3Rv cnkgaW4gaGlzdG9yaWVzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhpc3Rvcnku aW1wb3J0YWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5pbXBv cnRhYmxlID0zRCBGYWxzZQpAQCAtNDQxLDcgKzQ1Myw3IEBACiAgICAgICAgICAgICBvcGVyYXRp b24gPTNEIGt3YXJnc1snb3BlcmF0aW9uJ10ubG93ZXIoKQogICAgICAgICAgICAgaWYgb3BlcmF0 aW9uID0zRD0zRCAidmlldyI6CiAgICAgICAgICAgICAgICAgIyBEaXNwbGF5IGhpc3RvcnkuCi0g ICAgICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGlkc1sw XSwgRmFsc2UpCisgICAgICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5fZ2V0X2hpc3Rvcnko IHRyYW5zLCBpZHNbMF0sIEZhbHNlKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRpc3Bs YXlfYnlfdXNlcm5hbWVfYW5kX3NsdWcoIHRyYW5zLCBoaXN0b3J5LnU9CnNlci51c2VybmFtZSwg aGlzdG9yeS5zbHVnICkKICAgICAgICAgICAgIGVsaWYgb3BlcmF0aW9uID0zRD0zRCAiY29weSI6 CiAgICAgICAgICAgICAgICAgaWYgbm90IGlkczoKQEAgLTQ1Niw3ICs0NjgsNyBAQAogICAgICAg ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaGFyZWRfbGlzdF9ncmlkKCB0cmFucywgc3RhdHVz PTNEJ2Vycm9yJyw9CiBtZXNzYWdlPTNEbWVzc2FnZSwgKiprd2FyZ3MgKQogICAgICAgICAgICAg ICAgICMgTm8gbmVlZCB0byBjaGVjayBzZWN1cml0eSwgYXNzb2NpYXRpb24gYmVsb3cgd29uJ3Qg eWllbGQ9CiBhCiAgICAgICAgICAgICAgICAgIyBoaXQgaWYgdGhpcyB1c2VyIGlzbid0IGhhdmlu ZyB0aGUgaGlzdG9yeSBzaGFyZWQgd2l0aCBoZT0Kci4KLSAgICAgICAgICAgICAgICBoaXN0b3Jp ZXMgPTNEIFsgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQsIGNoZWNrPQpfb3du ZXJzaGlwPTNERmFsc2UgKSBmb3IgaGlzdG9yeV9pZCBpbiBpZHMgXQorICAgICAgICAgICAgICAg IGhpc3RvcmllcyA9M0QgWyBzZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQsIGNo ZWM9Cmtfb3duZXJzaGlwPTNERmFsc2UgKSBmb3IgaGlzdG9yeV9pZCBpbiBpZHMgXQogICAgICAg ICAgICAgICAgIGZvciBoaXN0b3J5IGluIGhpc3RvcmllczoKICAgICAgICAgICAgICAgICAgICAg IyBDdXJyZW50IHVzZXIgaXMgdGhlIHVzZXIgd2l0aCB3aGljaCB0aGUgaGlzdG9yaWVzIHdlPQpy ZSBzaGFyZWQKICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb24gPTNEIHRyYW5zLnNhX3Nl c3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlPQpsLkhpc3RvcnlVc2VyU2hhcmVBc3NvY2lhdGlv biApLmZpbHRlcl9ieSggdXNlcj0zRHRyYW5zLnVzZXIsIGhpc3Rvcnk9M0RoaXM9CnRvcnkgKS5v bmUoKQpAQCAtNTU2LDcgKzU2OCw3IEBACiAgICAgICAgIGlmIG5vdCBpZDoKICAgICAgICAgICAg IGlkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5zLmhpc3RvcnkuaWQgKQo9MjAK LSAgICAgICAgaGlzdG9yeV90b192aWV3ID0zRCBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywgaWQs IGNoZWNrX293bmVyc2hpcD0KPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICkKKyAg ICAgICAgaGlzdG9yeV90b192aWV3ID0zRCBzZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBj aGVja19vd25lcnNoaXA9Cj0zREZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCiAgICAg ICAgIGhpc3RvcnlfZGF0YSA9M0Qgc2VsZi5tZ3JzLmhpc3Rvcmllcy5fZ2V0X2hpc3RvcnlfZGF0 YSggdHJhbnMsIGhpcz0KdG9yeV90b192aWV3ICkKICAgICAgICAgaGlzdG9yeV9kaWN0aW9uYXJ5 ID0zRCBoaXN0b3J5X2RhdGFbICdoaXN0b3J5JyBdCiAgICAgICAgIGhkYV9kaWN0aW9uYXJpZXMg ICA9M0QgaGlzdG9yeV9kYXRhWyAnY29udGVudHMnIF0KQEAgLTU5NSw3ICs2MDcsNyBAQAogICAg ICAgICBoZGFfZGljdGlvbmFyaWVzICAgPTNEIFtdCiAgICAgICAgIHVzZXJfaXNfb3duZXIgPTNE IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGhpc3RvcnlfdG9fdmlldyA9M0Qgc2Vs Zi5nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBjaGVja19vd25lcnNoPQppcD0zREZhbHNlLCBjaGVj a19hY2Nlc3NpYmxlPTNERmFsc2UgKQorICAgICAgICAgICAgaGlzdG9yeV90b192aWV3ID0zRCBz ZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBjaGVja19vd25lcnM9CmhpcD0zREZhbHNlLCBj aGVja19hY2Nlc3NpYmxlPTNERmFsc2UgKQogICAgICAgICAgICAgaWYgbm90IGhpc3RvcnlfdG9f dmlldzoKICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnMuc2hvd19lcnJvcl9tZXNzYWdlKCAi VGhlIHNwZWNpZmllZCBoaXN0b3J5IGRvPQplcyBub3QgZXhpc3QuIiApCiAgICAgICAgICAgICBp ZiBoaXN0b3J5X3RvX3ZpZXcudXNlciA9M0Q9M0QgdHJhbnMudXNlcjoKQEAgLTcwOCw3ICs3MjAs NyBAQAogICAgICAgICBpZiBpZDoKICAgICAgICAgICAgIGlkcyA9M0QgZ2FsYXh5LnV0aWwubGlz dGlmeSggaWQgKQogICAgICAgICAgICAgaWYgaWRzOgotICAgICAgICAgICAgICAgIGhpc3Rvcmll cyA9M0QgWyBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCApIGZvciA9Cmhpc3Rv cnlfaWQgaW4gaWRzIF0KKyAgICAgICAgICAgICAgICBoaXN0b3JpZXMgPTNEIFsgc2VsZi5fZ2V0 X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkICkgZm9yPQogaGlzdG9yeV9pZCBpbiBpZHMgXQog ICAgICAgICBlbGlmIG5vdCBoaXN0b3JpZXM6CiAgICAgICAgICAgICBoaXN0b3JpZXMgPTNEIFsg dHJhbnMuaGlzdG9yeSBdCj0yMApAQCAtNzc3LDcgKzc4OSw3IEBACiAgICAgICAgICAgICBzZW5k X3RvX2VyciA9M0QgZXJyX21zZwogICAgICAgICAgICAgaGlzdG9yaWVzID0zRCBbXQogICAgICAg ICAgICAgZm9yIGhpc3RvcnlfaWQgaW4gaWQ6Ci0gICAgICAgICAgICAgICAgaGlzdG9yaWVzLmFw cGVuZCggc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQgKSApCisgICAgICAgICAg ICAgICAgaGlzdG9yaWVzLmFwcGVuZCggc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5 X2lkICkgKQogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLmZpbGxfdGVtcGxhdGUoICIvaGlzdG9y eS9zaGFyZS5tYWtvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo aXN0b3JpZXM9M0RoaXN0b3JpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW1haWw9M0RlbWFpbCwKQEAgLTg4NSw3ICs4OTcsNyBAQAogICAgICAgICBzZW5kX3Rv X2VyciA9M0QgIiIKICAgICAgICAgaGlzdG9yaWVzID0zRCBbXQogICAgICAgICBmb3IgaGlzdG9y eV9pZCBpbiBpZDoKLSAgICAgICAgICAgIGhpc3Rvcmllcy5hcHBlbmQoIHNlbGYuZ2V0X2hpc3Rv cnkoIHRyYW5zLCBoaXN0b3J5X2lkICkgKQorICAgICAgICAgICAgaGlzdG9yaWVzLmFwcGVuZCgg c2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkICkgKQogICAgICAgICBzZW5kX3Rv X3VzZXJzID0zRCBbXQogICAgICAgICBmb3IgZW1haWxfYWRkcmVzcyBpbiBnYWxheHkudXRpbC5s aXN0aWZ5KCBlbWFpbCApOgogICAgICAgICAgICAgZW1haWxfYWRkcmVzcyA9M0QgZW1haWxfYWRk cmVzcy5zdHJpcCgpCkBAIC0xMTY0LDcgKzExNzYsNyBAQAogICAgIEB3ZWIuanNvbgogICAgIGRl ZiByYXRlX2FzeW5jKCBzZWxmLCB0cmFucywgaWQsIHJhdGluZyApOgogICAgICAgICAiIiIgUmF0 ZSBhIGhpc3RvcnkgYXN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB1cGRhdGVkIGNvbW11bml0eSBk YXQ9CmEuICIiIgotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdldF9oaXN0b3J5KCB0cmFucywg aWQsIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCA9CmNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICkK KyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tf b3duZXJzaGlwPTNERmFsc2UsPQogY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQogICAgICAgICBp ZiBub3QgaGlzdG9yeToKICAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vycm9yX21lc3Nh Z2UoICJUaGUgc3BlY2lmaWVkIGhpc3RvcnkgZG9lcyBuPQpvdCBleGlzdC4iICkKICAgICAgICAg IyBSYXRlIGhpc3RvcnkuCkBAIC0xMjA4LDcgKzEyMjAsNyBAQAogICAgICAgICAjIEdldCBoaXN0 b3J5IHRvIGV4cG9ydC4KICAgICAgICAgIwogICAgICAgICBpZiBpZDoKLSAgICAgICAgICAgIGhp c3RvcnkgPTNEIHNlbGYuZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPTNE RmFsPQpzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQorICAgICAgICAgICAgaGlzdG9yeSA9 M0Qgc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPTNERmE9Cmxz ZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAg IyBVc2UgY3VycmVudCBoaXN0b3J5LgogICAgICAgICAgICAgaGlzdG9yeSA9M0QgdHJhbnMuaGlz dG9yeQpAQCAtMTI0Niw3ICsxMjU4LDcgQEAKICAgICBAd2ViLnJlcXVpcmVfbG9naW4oICJnZXQg aGlzdG9yeSBuYW1lIGFuZCBsaW5rIiApCiAgICAgZGVmIGdldF9uYW1lX2FuZF9saW5rX2FzeW5j KCBzZWxmLCB0cmFucywgaWQ9M0ROb25lICk6CiAgICAgICAgICIiIiBSZXR1cm5zIGhpc3Rvcnkn cyBuYW1lIGFuZCBsaW5rLiAiIiIKLSAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9y eSggdHJhbnMsIGlkLCBGYWxzZSApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0 b3J5KCB0cmFucywgaWQsIEZhbHNlICkKICAgICAgICAgaWYgc2VsZi5jcmVhdGVfaXRlbV9zbHVn KCB0cmFucy5zYV9zZXNzaW9uLCBoaXN0b3J5ICk6CiAgICAgICAgICAgICB0cmFucy5zYV9zZXNz aW9uLmZsdXNoKCkKICAgICAgICAgcmV0dXJuX2RpY3QgPTNEIHsKQEAgLTEyNjAsNyArMTI3Miw3 IEBACiAgICAgQHdlYi5yZXF1aXJlX2xvZ2luKCAic2V0IGhpc3RvcnkncyBhY2Nlc3NpYmxlIGZs YWciICkKICAgICBkZWYgc2V0X2FjY2Vzc2libGVfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5v bmUsIGFjY2Vzc2libGU9M0RGYWxzZSApOgogICAgICAgICAiIiIgU2V0IGhpc3RvcnkncyBpbXBv cnRhYmxlIGF0dHJpYnV0ZSBhbmQgc2x1Zy4gIiIiCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYu Z2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgVHJ1ZSApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYu X2dldF9oaXN0b3J5KCB0cmFucywgaWQsIFRydWUgKQogICAgICAgICAjIE9ubHkgc2V0IGlmIGlt cG9ydGFibGUgdmFsdWUgd291bGQgY2hhbmdlOyB0aGlzIHByZXZlbnRzIGEgY2hhbmc9CmUgaW4g dGhlIHVwZGF0ZV90aW1lIHVubGVzcyBhdHRyaWJ1dGUgcmVhbGx5IGNoYW5nZWQuCiAgICAgICAg IGltcG9ydGFibGUgPTNEIGFjY2Vzc2libGUgaW4gWydUcnVlJywgJ3RydWUnLCAndCcsICdUJ107 CiAgICAgICAgIGlmIGhpc3RvcnkgYW5kIGhpc3RvcnkuaW1wb3J0YWJsZSAhPTNEIGltcG9ydGFi bGU6CkBAIC0xMjczLDIzICsxMjg1LDYgQEAKICAgICAgICAgI1RPRE86IHVzZWQgaW4gcGFnZS9l ZGl0b3IubWFrbwo9MjAKICAgICBAd2ViLmV4cG9zZQotICAgIGRlZiBnZXRfaXRlbV9jb250ZW50 X2FzeW5jKCBzZWxmLCB0cmFucywgaWQgKToKLSAgICAgICAgIiIiIFJldHVybnMgaXRlbSBjb250 ZW50IGluIEhUTUwgZm9ybWF0LiAiIiIKLQotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdldF9o aXN0b3J5KCB0cmFucywgaWQsIEZhbHNlLCBUcnVlICkKLSAgICAgICAgaWYgaGlzdG9yeSBpcyBO b25lOgotICAgICAgICAgICAgcmFpc2Ugd2ViLmh0dHBleGNlcHRpb25zLkhUVFBOb3RGb3VuZCgp Ci0KLSAgICAgICAgIyBHZXQgZGF0YXNldHMuCi0gICAgICAgIGRhdGFzZXRzID0zRCBzZWxmLmdl dF9oaXN0b3J5X2RhdGFzZXRzKCB0cmFucywgaGlzdG9yeSApCi0gICAgICAgICMgR2V0IGFubm90 YXRpb25zLgotICAgICAgICBoaXN0b3J5LmFubm90YXRpb24gPTNEIHNlbGYuZ2V0X2l0ZW1fYW5u b3RhdGlvbl9zdHIoIHRyYW5zLnNhX3Nlc3M9CmlvbiwgaGlzdG9yeS51c2VyLCBoaXN0b3J5ICkK LSAgICAgICAgZm9yIGRhdGFzZXQgaW4gZGF0YXNldHM6Ci0gICAgICAgICAgICBkYXRhc2V0LmFu bm90YXRpb24gPTNEIHNlbGYuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnNhXz0Kc2Vz c2lvbiwgaGlzdG9yeS51c2VyLCBkYXRhc2V0ICkKLSAgICAgICAgcmV0dXJuIHRyYW5zLnN0cmVh bV90ZW1wbGF0ZV9tYWtvKCAiL2hpc3RvcnkvaXRlbV9jb250ZW50Lm1ha28iLCBpPQp0ZW0gPTNE IGhpc3RvcnksIGl0ZW1fZGF0YSA9M0QgZGF0YXNldHMgKQotICAgICAgICAjVE9ETzogdXNlZCBp biBlbWJlZF9iYXNlLm1ha28KLQotICAgIEB3ZWIuZXhwb3NlCiAgICAgZGVmIG5hbWVfYXV0b2Nv bXBsZXRlX2RhdGEoIHNlbGYsIHRyYW5zLCBxPTNETm9uZSwgbGltaXQ9M0ROb25lLCB0aW1lcz0K dGFtcD0zRE5vbmUgKToKICAgICAgICAgIiIiUmV0dXJuIGF1dG9jb21wbGV0ZSBkYXRhIGZvciBo aXN0b3J5IG5hbWVzIiIiCiAgICAgICAgIHVzZXIgPTNEIHRyYW5zLmdldF91c2VyKCkKQEAgLTEz MjYsNyArMTMyMSw3IEBACiAgICAgICAgICMgRG8gaW1wb3J0LgogICAgICAgICBpZiBub3QgaWQ6 CiAgICAgICAgICAgICByZXR1cm4gdHJhbnMuc2hvd19lcnJvcl9tZXNzYWdlKCAiWW91IG11c3Qg c3BlY2lmeSBhIGhpc3RvcnkgeT0Kb3Ugd2FudCB0byBpbXBvcnQuPGJyPllvdSBjYW4gJXMuIiAl IHJlZmVyZXJfbWVzc2FnZSwgdXNlX3BhbmVscz0zRFRydWUgKQotICAgICAgICBpbXBvcnRfaGlz dG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBjaGVja19vd25lcnNoaXA9M0Q9 CkZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPTNERmFsc2UgKQorICAgICAgICBpbXBvcnRfaGlzdG9y eSA9M0Qgc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPQo9M0RG YWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zREZhbHNlICkKICAgICAgICAgaWYgbm90IGltcG9ydF9o aXN0b3J5OgogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3JfbWVzc2FnZSggIlRo ZSBzcGVjaWZpZWQgaGlzdG9yeSBkb2VzIG49Cm90IGV4aXN0Ljxicj5Zb3UgY2FuICVzLiIgJSBy ZWZlcmVyX21lc3NhZ2UsIHVzZV9wYW5lbHM9M0RUcnVlICkKICAgICAgICAgIyBIaXN0b3J5IGlz IGltcG9ydGFibGUgaWYgdXNlciBpcyBhZG1pbiBvciBpdCdzIGFjY2Vzc2libGUuIFRPRE86PQog cHJvYmFibHkgd2FudCB0byBoYXZlIGFwcCBzZXR0aW5nIHRvIGVuYWJsZSBhZG1pbiBhY2Nlc3Mg dG8gaGlzdG9yaWVzLgpAQCAtMTM5Niw3ICsxMzkxLDcgQEAKICAgICAgICAgaGlzdG9yaWVzID0z RCBbXQogICAgICAgICBjdXJfbmFtZXMgPTNEIFtdCiAgICAgICAgIGZvciBoaXN0b3J5X2lkIGlu IGlkOgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhp c3RvcnlfaWQgKQorICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5fZ2V0X2hpc3RvcnkoIHRy YW5zLCBoaXN0b3J5X2lkICkKICAgICAgICAgICAgIGlmIGhpc3RvcnkgYW5kIGhpc3RvcnkudXNl cl9pZCA9M0Q9M0QgdXNlci5pZDoKICAgICAgICAgICAgICAgICBoaXN0b3JpZXMuYXBwZW5kKCBo aXN0b3J5ICkKICAgICAgICAgICAgICAgICBjdXJfbmFtZXMuYXBwZW5kKCBoaXN0b3J5LmdldF9k aXNwbGF5X25hbWUoKSApCkBAIC0xNDM4LDcgKzE0MzMsNyBAQAogICAgICAgICAgICAgaWRzID0z RCBnYWxheHkudXRpbC5saXN0aWZ5KCBpZCApCiAgICAgICAgICAgICBoaXN0b3JpZXMgPTNEIFtd CiAgICAgICAgICAgICBmb3IgaGlzdG9yeV9pZCBpbiBpZHM6Ci0gICAgICAgICAgICAgICAgaGlz dG9yeSA9M0Qgc2VsZi5nZXRfaGlzdG9yeSggdHJhbnMsIGhpc3RvcnlfaWQsIGNoZWNrX293bj0K ZXJzaGlwPTNERmFsc2UgKQorICAgICAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuX2dldF9o aXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCwgY2hlY2tfb3c9Cm5lcnNoaXA9M0RGYWxzZSApCiAg ICAgICAgICAgICAgICAgaGlzdG9yaWVzLmFwcGVuZCggaGlzdG9yeSApCiAgICAgICAgIHVzZXIg PTNEIHRyYW5zLmdldF91c2VyKCkKICAgICAgICAgZm9yIGhpc3RvcnkgaW4gaGlzdG9yaWVzOgpA QCAtMTQ3NSw3ICsxNDcwLDcgQEAKICAgICAgICAgcmV0dXJuIHRyYW5zLnJlc3BvbnNlLnNlbmRf cmVkaXJlY3QoIHVybF9mb3IoICIvIiApICkKPTIwCiAgICAgZGVmIGdldF9pdGVtKCBzZWxmLCB0 cmFucywgaWQgKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCAp CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkICkKICAgICAgICAg I1RPRE86IG92ZXJyaWRlIG9mIGJhc2UgdWkgY29udHJvbGxlcj8KPTIwCiAgICAgZGVmIGhpc3Rv cnlfZGF0YSggc2VsZiwgdHJhbnMsIGhpc3RvcnkgKToKCmRpZmYgLXIgOThkNGNiNTgxZjYyMDEz NTlhN2RkMDg0NWFiMmQ4NWIxMWU5ODVkNyAtciAxNDNmMDIyYmFlNjlkOGFhYTA1ZmI5Mz0KOGJl OTlkMzY0NjY2OTlhNTQgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9wYWdl LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcGFnZS5weQor KysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3BhZ2UucHkKQEAgLTMs NyArMyw3IEBACiBmcm9tIGdhbGF4eSBpbXBvcnQgbWFuYWdlcnMKIGZyb20gZ2FsYXh5LndlYiBp bXBvcnQgZXJyb3IsIHVybF9mb3IKIGZyb20gZ2FsYXh5Lm1vZGVsLml0ZW1fYXR0cnMgaW1wb3J0 IFVzZXNJdGVtUmF0aW5ncwotZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQg QmFzZVVJQ29udHJvbGxlciwgU2hhcmFibGVNaXhpbiwgVXM9CmVzSGlzdG9yeU1peGluLCBVc2Vz U3RvcmVkV29ya2Zsb3dNaXhpbiwgVXNlc1Zpc3VhbGl6YXRpb25NaXhpbgorZnJvbSBnYWxheHku d2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZVVJQ29udHJvbGxlciwgU2hhcmFibGVNaXhp biwgVXM9CmVzU3RvcmVkV29ya2Zsb3dNaXhpbiwgVXNlc1Zpc3VhbGl6YXRpb25NaXhpbgogZnJv bSBnYWxheHkud2ViLmZyYW1ld29yay5oZWxwZXJzIGltcG9ydCB0aW1lX2FnbywgZ3JpZHMKIGZy b20gZ2FsYXh5IGltcG9ydCB1dGlsCiBmcm9tIGdhbGF4eS51dGlsLnNhbml0aXplX2h0bWwgaW1w b3J0IHNhbml0aXplX2h0bWwsIF9CYXNlSFRNTFByb2Nlc3NvcgpAQCAtMjc2LDcgKzI3Niw3IEBA CiAgICAgICAgICMgRGVmYXVsdCBiZWhhdmlvcjoKICAgICAgICAgX0Jhc2VIVE1MUHJvY2Vzc29y LnVua25vd25fZW5kdGFnKCBzZWxmLCB0YWcgKQo9MjAKLWNsYXNzIFBhZ2VDb250cm9sbGVyKCBC YXNlVUlDb250cm9sbGVyLCBTaGFyYWJsZU1peGluLCBVc2VzSGlzdG9yeU1peGluLAorY2xhc3Mg UGFnZUNvbnRyb2xsZXIoIEJhc2VVSUNvbnRyb2xsZXIsIFNoYXJhYmxlTWl4aW4sCiAgICAgICAg ICAgICAgICAgICAgICAgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4sIFVzZXNWaXN1YWxpemF0aW9u TWl4aW4sIFVzZT0Kc0l0ZW1SYXRpbmdzICk6Cj0yMAogICAgIF9wYWdlX2xpc3QgPTNEIFBhZ2VM aXN0R3JpZCgpCkBAIC03MjksNyArNzI5LDggQEAKICAgICAgICAgUmV0dXJucyBodG1sIHN1aXRh YmxlIGZvciBlbWJlZGRpbmcgaW4gYW5vdGhlciBwYWdlLgogICAgICAgICAiIiIKICAgICAgICAg I1RPRE86IHNob3VsZCBiZSBtb3ZlZCB0byBoaXN0b3J5IGNvbnRyb2xsZXIgYW5kL29yIGNhbGxl ZCB2aWEgYWphPQp4IGZyb20gdGhlIHRlbXBsYXRlCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYu Z2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgRmFsc2UsIFRydWUgKQorICAgICAgICBkZWNvZGVkX2lk ID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgaGlzdG9yeSA9M0Qg c2VsZi5tZ3JzLmhpc3Rvcmllcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pPQpk LCB0cmFucy51c2VyICkKICAgICAgICAgaWYgbm90IGhpc3Rvcnk6CiAgICAgICAgICAgICByZXR1 cm4gTm9uZQo9MjAKQEAgLTczOCwxNyArNzM5LDEzIEBACiAgICAgICAgIHVzZXJfaXNfb3duZXIg PTNEIHRyYW5zLnVzZXIgPTNEPTNEIGhpc3RvcnkudXNlcgogICAgICAgICBoaXN0b3J5LmFubm90 YXRpb24gPTNEIHNlbGYuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnNhX3Nlc3M9Cmlv biwgaGlzdG9yeS51c2VyLCBoaXN0b3J5ICkKPTIwCi0gICAgICAgIGhkYV9kaWN0cyA9M0QgW10K LSAgICAgICAgZGF0YXNldHMgPTNEIHNlbGYuZ2V0X2hpc3RvcnlfZGF0YXNldHMoIHRyYW5zLCBo aXN0b3J5ICkKLQogICAgICAgICAjIGluY2x1ZGUgYWxsIGRhdGFzZXRzOiBoaWRkZW4sIGRlbGV0 ZWQsIGFuZCBwdXJnZWQKLSAgICAgICAgI1RPRE8hOiBkb3VibGVkIHF1ZXJ5IChoZGFfZGljdGlv bmFyaWVzICsgZGF0YXNldHMpCiAgICAgICAgIGhpc3RvcnlfZGF0YSA9M0Qgc2VsZi5tZ3JzLmhp c3Rvcmllcy5fZ2V0X2hpc3RvcnlfZGF0YSggdHJhbnMsIGhpcz0KdG9yeSApCiAgICAgICAgIGhp c3RvcnlfZGljdGlvbmFyeSA9M0QgaGlzdG9yeV9kYXRhWyAnaGlzdG9yeScgXQogICAgICAgICBo ZGFfZGljdGlvbmFyaWVzICAgPTNEIGhpc3RvcnlfZGF0YVsgJ2NvbnRlbnRzJyBdCiAgICAgICAg IGhpc3RvcnlfZGljdGlvbmFyeVsgJ2Fubm90YXRpb24nIF0gPTNEIGhpc3RvcnkuYW5ub3RhdGlv bgo9MjAKLSAgICAgICAgZmlsbGVkID0zRCB0cmFucy5maWxsX3RlbXBsYXRlKCAiaGlzdG9yeS9l bWJlZC5tYWtvIiwgaXRlbT0zRGhpc3RvPQpyeSwgaXRlbV9kYXRhPTNEZGF0YXNldHMsCisgICAg ICAgIGZpbGxlZCA9M0QgdHJhbnMuZmlsbF90ZW1wbGF0ZSggImhpc3RvcnkvZW1iZWQubWFrbyIs IGl0ZW09M0RoaXN0bz0KcnksCiAgICAgICAgICAgICB1c2VyX2lzX293bmVyPTNEdXNlcl9pc19v d25lciwgaGlzdG9yeV9kaWN0PTNEaGlzdG9yeV9kaWN0aW9uYT0KcnksIGhkYV9kaWN0cz0zRGhk YV9kaWN0aW9uYXJpZXMgKQogICAgICAgICByZXR1cm4gZmlsbGVkCj0yMAoKZGlmZiAtciA5OGQ0 Y2I1ODFmNjIwMTM1OWE3ZGQwODQ1YWIyZDg1YjExZTk4NWQ3IC1yIDE0M2YwMjJiYWU2OWQ4YWFh MDVmYjkzPQo4YmU5OWQzNjQ2NjY5OWE1NCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRy b2xsZXJzL3Jvb3QucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVy cy9yb290LnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcm9v dC5weQpAQCAtNyw3ICs3LDcgQEAKPTIwCiBmcm9tIHBhc3RlLmh0dHBleGNlcHRpb25zIGltcG9y dCBIVFRQTm90Rm91bmQsIEhUVFBCYWRHYXRld2F5Cj0yMAotZnJvbSBnYWxheHkud2ViLmJhc2Uu Y29udHJvbGxlciBpbXBvcnQgQmFzZVVJQ29udHJvbGxlciwgVXNlc0hpc3RvcnlEYXRhc2U9CnRB c3NvY2lhdGlvbk1peGluLCBVc2VzSGlzdG9yeU1peGluCitmcm9tIGdhbGF4eS53ZWIuYmFzZS5j b250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9sbGVyLCBVc2VzSGlzdG9yeURhdGFzZT0KdEFz c29jaWF0aW9uTWl4aW4KIGZyb20gZ2FsYXh5IGltcG9ydCBtYW5hZ2Vycwo9MjAKIGZyb20gZ2Fs YXh5IGltcG9ydCB3ZWIKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBsb2dnaW5nCiBsb2cgPTNE IGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAotY2xhc3MgUm9vdENvbnRyb2xsZXIo IEJhc2VVSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5TWl4aW4sIFVzZXNIaXN0b3J5RGF0YXM9CmV0 QXNzb2NpYXRpb25NaXhpbiwgVXNlc0Fubm90YXRpb25zICk6CitjbGFzcyBSb290Q29udHJvbGxl ciggQmFzZVVJQ29udHJvbGxlciwgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25NaXhpbj0K LCBVc2VzQW5ub3RhdGlvbnMgKToKICAgICAiIiIKICAgICBDb250cm9sbGVyIGNsYXNzIHRoYXQg bWFwcyB0byB0aGUgdXJsIHJvb3Qgb2YgR2FsYXh5IChpLmUuICcvJykuCiAgICAgIiIiCgpkaWZm IC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVhYjJkODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJh ZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5YTU0IHRlbXBsYXRlcy90YWdnaW5nX2NvbW1v bi5tYWtvCi0tLSBhL3RlbXBsYXRlcy90YWdnaW5nX2NvbW1vbi5tYWtvCisrKyBiL3RlbXBsYXRl cy90YWdnaW5nX2NvbW1vbi5tYWtvCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAjIyBCdWlsZCBI VE1MLgogICAgIDwlPTIwCiAgICAgICAgIGVsdF9pZCA9M0QgaW50ICggZmxvb3IgKCByYW5kb20o KSptYXhpbnQgKSApPTIwCi0gICAgICAgIGNvbW11bml0eV90YWdzID0zRCB0cmFucy5hcHAudGFn X2hhbmRsZXIuZ2V0X2NvbW11bml0eV90YWdzKCB0cmFucz0KLCBpdGVtPTNEdGFnZ2VkX2l0ZW0s IGxpbWl0PTNENSApCisgICAgICAgIGNvbW11bml0eV90YWdzID0zRCB0cmFucy5hcHAudGFnX2hh bmRsZXIuZ2V0X2NvbW11bml0eV90YWdzKCBpdGVtPQo9M0R0YWdnZWRfaXRlbSwgbGltaXQ9M0Q1 ICkKICAgICAlPgogICAgICR7c2VsZi5yZW5kZXJfdGFnZ2luZ19lbGVtZW50X2h0bWwoZWx0X2lk PTNEZWx0X2lkLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFn cz0zRGNvbW11bml0eV90YWdzLCBcCgpkaWZmIC1yIDk4ZDRjYjU4MWY2MjAxMzU5YTdkZDA4NDVh YjJkODViMTFlOTg1ZDcgLXIgMTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM9CjhiZTk5ZDM2NDY2Njk5 YTU0IHRlbXBsYXRlcy93ZWJhcHBzL2dhbGF4eS9oaXN0b3J5L2VtYmVkLm1ha28KLS0tIGEvdGVt cGxhdGVzL3dlYmFwcHMvZ2FsYXh5L2hpc3RvcnkvZW1iZWQubWFrbworKysgYi90ZW1wbGF0ZXMv d2ViYXBwcy9nYWxheHkvaGlzdG9yeS9lbWJlZC5tYWtvCkBAIC0yMyw3ICsyMyw4IEBACiAgICAg ICAgICAgICA8L2E+PC9oND4KICAgICAgICAgJWlmIGhhc2F0dHIoIGl0ZW0sICJhbm5vdGF0aW9u IikgYW5kIGl0ZW0uYW5ub3RhdGlvbjoKLSAgICAgICAgPGRpdiBjbGFzcz0zRCJhbm5vdGF0aW9u Ij4ke2l0ZW0uYW5ub3RhdGlvbiB8IGh9PC9kaXY+CisgICAgICAgIDwlIHByaW50IHR5cGUoIGl0 ZW0uYW5ub3RhdGlvbiApLCBpdGVtLmFubm90YXRpb24gJT4KKyAgICAgICAgPGRpdiBjbGFzcz0z RCJhbm5vdGF0aW9uIj4keyBpdGVtLmFubm90YXRpb24gfCBoIH08L2Rpdj4KICAgICAgICAgJWVu ZGlmCiAgICAgPC9kaXY+PGRpdiBjbGFzcz0zRCdzdW1tYXJ5LWNvbnRlbnQnPgoKZGlmZiAtciA5 OGQ0Y2I1ODFmNjIwMTM1OWE3ZGQwODQ1YWIyZDg1YjExZTk4NWQ3IC1yIDE0M2YwMjJiYWU2OWQ4 YWFhMDVmYjkzPQo4YmU5OWQzNjQ2NjY5OWE1NCB0ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9Vc2Vy TWFuYWdlci5weQotLS0gYS90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9Vc2VyTWFuYWdlci5weQor KysgYi90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9Vc2VyTWFuYWdlci5weQpAQCAtMTE3LDEyICsx MTcsMTggQEAKICAgICAgICAgdXNlcjIgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRy YW5zLCAqKnVzZXIyX2RhdGEgKQogICAgICAgICB1c2VyMyA9M0Qgc2VsZi51c2VyX21nci5jcmVh dGUoIHNlbGYudHJhbnMsICoqdXNlcjNfZGF0YSApCj0yMAotICAgICAgICBzZWxmLmxvZyggInNo b3VsZCBiZSBhYmxlIHRvIGdlbmVyYXRlIGFuZCByZXRyaWV2ZSBhcGkga2V5cyIgKQorICAgICAg ICBzZWxmLmxvZyggInNob3VsZCByZXR1cm4gTm9uZSBpZiBubyBBUElLZXkgaGFzIGJlZW4gY3Jl YXRlZCIgKQorICAgICAgICBub19hcGlfa2V5X3lldCA9M0Qgc2VsZi51c2VyX21nci5hcGlfa2V5 KCBzZWxmLnRyYW5zLCB1c2VyMiApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYudXNl cl9tZ3IudmFsaWRfYXBpX2tleSggc2VsZi50cmFucywgdXNlcjIgKT0KLmtleSwgTm9uZSApCisK KyAgICAgICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSBhbmQgcmV0cmll dmUgdmFsaWQgYXBpIGtleSIgKQogICAgICAgICB1c2VyMl9hcGlfa2V5ID0zRCBzZWxmLnVzZXJf bWdyLmNyZWF0ZV9hcGlfa2V5KCBzZWxmLnRyYW5zLCB1c2VyMiApCi0gICAgICAgICNzZWxmLmFz c2VydElzSW5zdGFuY2UoIHVzZXIyX2FwaV9rZXksIG1vZGVsLkFQSUtleXMgKQogICAgICAgICBz ZWxmLmFzc2VydElzSW5zdGFuY2UoIHVzZXIyX2FwaV9rZXksIGJhc2VzdHJpbmcgKQotICAgICAg ICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLnVzZXJfbWdyLmFwaV9rZXkoIHNlbGYudHJhbnMsIHVz ZXIyICkua2V5LCA9CnVzZXIyX2FwaV9rZXkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBz ZWxmLnVzZXJfbWdyLnZhbGlkX2FwaV9rZXkoIHNlbGYudHJhbnMsIHVzZXIyICk9Ci5rZXksIHVz ZXIyX2FwaV9rZXkgKQo9MjAKKyAgICAgICAgc2VsZi5sb2coICJzaG91bGQgcmV0dXJuIHRoZSBt b3N0IHJlY2VudCAoaS5lLiBtb3N0IHZhbGlkKSBhcGkga2V5PQoiICkKKyAgICAgICAgdXNlcjJf YXBpX2tleV8yID0zRCBzZWxmLnVzZXJfbWdyLmNyZWF0ZV9hcGlfa2V5KCBzZWxmLnRyYW5zLCB1 c2VyPQoyICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi51c2VyX21nci52YWxpZF9h cGlfa2V5KCBzZWxmLnRyYW5zLCB1c2VyMiApPQoua2V5LCB1c2VyMl9hcGlfa2V5XzIgKQo9MjAK PTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9Cj0zRD0zRD0zRAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl bnRyYWwvY29tbWl0cy9hM2E2YzcyOTkzYTcvCkNoYW5nZXNldDogICBhM2E2YzcyOTkzYTcKVXNl cjogICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDkgMjA6Mzk6MjUr MDA6MDAKU3VtbWFyeTogICAgIE1lcmdlZCBnYWxheHkvZ2FsYXh5LWNlbnRyYWwgaW50byBkZWZh dWx0CkFmZmVjdGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDE0M2YwMjJiYWU2OWQ4YWFhMDVmYjkz OGJlOTlkMzY0NjY2OTlhNTQgLXIgYTNhNmM3Mjk5M2E3YTYzYjc0NzM5Y2I9CmI2YTkxYjk5NjUw MWQxMTM3IGNvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2FtcGxlCi0tLSBhL2NvbmZpZy9kYXRh dHlwZXNfY29uZi54bWwuc2FtcGxlCisrKyBiL2NvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2Ft cGxlCkBAIC0xODEsNyArMTgxLDggQEAKICAgICA8ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEInRheG9u b215IiB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMudGFidWxhcjpUYXhvPQpub215IiBkaXNwbGF5 X2luX3VwbG9hZD0zRCJ0cnVlIi8+PGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJ0YWJ1bGFyIiB0eXBl PTNEImc9CmFsYXh5LmRhdGF0eXBlcy50YWJ1bGFyOlRhYnVsYXIiIGRpc3BsYXlfaW5fdXBsb2Fk PTNEInRydWUiIGRlc2NyaXB0aW9uPTNEIj0KQW55IGRhdGEgaW4gdGFiIGRlbGltaXRlZCBmb3Jt YXQgKHRhYnVsYXIpLiIgZGVzY3JpcHRpb25fdXJsPTNEImh0dHBzOi8vd2lrPQppLmdhbGF4eXBy b2plY3Qub3JnL0xlYXJuL0RhdGF0eXBlcyNUYWJ1bGFyXy4yOHRhYl9kZWxpbWl0ZWQuMjkiLz48 ZGF0YXR5cGU9CiBleHRlbnNpb249M0QidHdvYml0IiB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMu YmluYXJ5OlR3b0JpdCIgbWltZXR5cGU9M0QiYT0KcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIGRp c3BsYXlfaW5fdXBsb2FkPTNEInRydWUiLz4KLSAgICA8ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEInNx bGl0ZSIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmJpbmFyeTpTUWxpdGUiPQogbWltZXR5cGU9 M0QiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiBkaXNwbGF5X2luX3VwbG9hZD0zRCJ0cnVlIi8+ ICAgPTIwCisgICAgPGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJzcWxpdGUiIHR5cGU9M0QiZ2FsYXh5 LmRhdGF0eXBlcy5iaW5hcnk6U1FsaXRlIj0KIG1pbWV0eXBlPTNEImFwcGxpY2F0aW9uL29jdGV0 LXN0cmVhbSIgZGlzcGxheV9pbl91cGxvYWQ9M0QidHJ1ZSIvPgorICAgIDxkYXRhdHlwZSBleHRl bnNpb249M0QiZ2VtaW5pLnNxbGl0ZSIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmJpbmFyeTo9 CkdlbWluaVNRTGl0ZSIgbWltZXR5cGU9M0QiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiBkaXNw bGF5X2luX3VwbG9hZD0zRCJUcj0KdWUiIC8+PGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJ0eHQiIHR5 cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5kYXRhOlRleHQiIGRpc3BsPQpheV9pbl91cGxvYWQ9M0Qi dHJ1ZSIgZGVzY3JpcHRpb249M0QiQW55IHRleHQgZmlsZS4iIGRlc2NyaXB0aW9uX3VybD0zRCJo dHQ9CnBzOi8vd2lraS5nYWxheHlwcm9qZWN0Lm9yZy9MZWFybi9EYXRhdHlwZXMjUGxhaW5fdGV4 dCIvPjxkYXRhdHlwZSBleHRlbnNpbz0Kbj0zRCJsaW5lY291bnQiIHR5cGU9M0QiZ2FsYXh5LmRh dGF0eXBlcy5kYXRhOkxpbmVDb3VudCIgZGlzcGxheV9pbl91cGxvYWQ9Cj0zRCJmYWxzZSIvPjxk YXRhdHlwZSBleHRlbnNpb249M0QibWVtZXhtbCIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnht bDpNRT0KTUVYbWwiIG1pbWV0eXBlPTNEImFwcGxpY2F0aW9uL3htbCIgZGlzcGxheV9pbl91cGxv YWQ9M0QidHJ1ZSIvPgpAQCAtMjcxLDYgKzI3Miw3IEBACiAgICAgLS0+PHNuaWZmZXIgdHlwZT0z RCJnYWxheHkuZGF0YXR5cGVzLnRhYnVsYXI6VmNmIi8+PHNuaWZmZXIgdHlwZT0zRCJnYT0KbGF4 eS5kYXRhdHlwZXMuYmluYXJ5OlR3b0JpdCIvPgorICAgIDxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5 LmRhdGF0eXBlcy5iaW5hcnk6R2VtaW5pU1FMaXRlIi8+PHNuaWZmZXIgdHlwZT0KPTNEImdhbGF4 eS5kYXRhdHlwZXMuYmluYXJ5OlNRbGl0ZSIvPjxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0 eXBlcy5iaW5hPQpyeTpCYW0iLz48c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuYmlu YXJ5OlNmZiIvPgoKZGlmZiAtciAxNDNmMDIyYmFlNjlkOGFhYTA1ZmI5MzhiZTk5ZDM2NDY2Njk5 YTU0IC1yIGEzYTZjNzI5OTNhN2E2M2I3NDczOWNiPQpiNmE5MWI5OTY1MDFkMTEzNyBsaWIvZ2Fs YXh5L2RhdGF0eXBlcy9iaW5hcnkucHkKLS0tIGEvbGliL2dhbGF4eS9kYXRhdHlwZXMvYmluYXJ5 LnB5CisrKyBiL2xpYi9nYWxheHkvZGF0YXR5cGVzL2JpbmFyeS5weQpAQCAtMjAsNyArMjAsNyBA QAogZnJvbSBieC5zZXEudHdvYml0IGltcG9ydCBUV09CSVRfTUFHSUNfTlVNQkVSLCBUV09CSVRf TUFHSUNfTlVNQkVSX1NXQVAsIFQ9CldPQklUX01BR0lDX1NJWkUKPTIwCiBmcm9tIGdhbGF4eS51 dGlsIGltcG9ydCBzcWxpdGUKLWZyb20gZ2FsYXh5LmRhdGF0eXBlcy5tZXRhZGF0YSBpbXBvcnQg TWV0YWRhdGFFbGVtZW50LExpc3RQYXJhbWV0ZXIsRGljdFBhPQpyYW1ldGVyCitmcm9tIGdhbGF4 eS5kYXRhdHlwZXMubWV0YWRhdGEgaW1wb3J0IE1ldGFkYXRhRWxlbWVudCwgTWV0YWRhdGFQYXJh bWV0ZXIsID0KTGlzdFBhcmFtZXRlciwgRGljdFBhcmFtZXRlcgogZnJvbSBnYWxheHkuZGF0YXR5 cGVzIGltcG9ydCBtZXRhZGF0YQogaW1wb3J0IGRhdGFwcm92aWRlcnMKPTIwCkBAIC02NDAsOCAr NjQwLDY2IEBACiAgICAgICAgIHJldHVybiBkYXRhcHJvdmlkZXJzLmRhdGFzZXQuU1FsaXRlRGF0 YURpY3RQcm92aWRlciggZGF0YXNldF9zb3VyYz0KZSwgKipzZXR0aW5ncyApCj0yMAo9MjAKKyNC aW5hcnkucmVnaXN0ZXJfc25pZmZhYmxlX2JpbmFyeV9mb3JtYXQoInNxbGl0ZSIsICJzcWxpdGUi LCBTUWxpdGUpCisKKworY2xhc3MgR2VtaW5pU1FMaXRlKCBTUWxpdGUgKToKKyAgICAiIiJDbGFz cyBkZXNjcmliaW5nIGEgR2VtaW5pIFNxbGl0ZSBkYXRhYmFzZSAiIiIKKyAgICBNZXRhZGF0YUVs ZW1lbnQoIG5hbWU9M0QiZ2VtaW5pX3ZlcnNpb24iLCBkZWZhdWx0PTNEJzAuMTAuMCcgLCBwYXJh bT0KPTNETWV0YWRhdGFQYXJhbWV0ZXIsIGRlc2M9M0QiR2VtaW5pIFZlcnNpb24iLD0yMAorICAg ICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9M0RUcnVlLCB2aXNpYmxlPTNEVHJ1ZSwgbm9fdmFs dWU9M0QnMC4xMC4wJyApCisgICAgZmlsZV9leHQgPTNEICJnZW1pbmkuc3FsaXRlIgorCisgICAg ZGVmIHNldF9tZXRhKCBzZWxmLCBkYXRhc2V0LCBvdmVyd3JpdGUgPTNEIFRydWUsICoqa3dkICk6 CisgICAgICAgIHN1cGVyKCBHZW1pbmlTUUxpdGUsIHNlbGYgKS5zZXRfbWV0YSggZGF0YXNldCwg b3ZlcndyaXRlID0zRCBvdmVydz0Kcml0ZSwgKiprd2QgKQorICAgICAgICB0cnk6CisgICAgICAg ICAgICBjb25uID0zRCBzcWxpdGUuY29ubmVjdCggZGF0YXNldC5maWxlX25hbWUgKQorICAgICAg ICAgICAgYyA9M0QgY29ubi5jdXJzb3IoKQorICAgICAgICAgICAgdGFibGVzX3F1ZXJ5ID0zRCAi U0VMRUNUIHZlcnNpb24gRlJPTSB2ZXJzaW9uIgorICAgICAgICAgICAgcmVzdWx0ID0zRCBjLmV4 ZWN1dGUoIHRhYmxlc19xdWVyeSApLmZldGNoYWxsKCkKKyAgICAgICAgICAgIGZvciB2ZXJzaW9u LCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgZGF0YXNldC5tZXRhZGF0YS5nZW1pbmlfdmVy c2lvbiA9M0QgdmVyc2lvbgorICAgICAgICAgICAgIyBUT0RPOiBDYW4vc2hvdWxkIHdlIGRldGVj dCBldmVuIG1vcmUgYXR0cmlidXRlcywgc3VjaCBhcyB1c2U9CiBvZiBQRUQgZmlsZSwgd2hhdCB3 YXMgaW5wdXQgYW5ub3RhdGlvbiB0eXBlLCBldGMuCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s IGU6CisgICAgICAgICAgICBsb2cud2FybiggJyVzLCBzZXRfbWV0YSBFeGNlcHRpb246ICVzJywg c2VsZiwgZSApCisKKyAgICBkZWYgc25pZmYoIHNlbGYsIGZpbGVuYW1lICk6CisgICAgICAgIGlm IHN1cGVyKCBHZW1pbmlTUUxpdGUsIHNlbGYgKS5zbmlmZiggZmlsZW5hbWUgKToKKyAgICAgICAg ICAgIGdlbWluaV90YWJsZV9uYW1lcyA9M0QgWyAiZ2VuZV9kZXRhaWxlZCIsICJnZW5lX3N1bW1h cnkiLCAicmVzPQpvdXJjZXMiLCAic2FtcGxlX2dlbm90eXBlX2NvdW50cyIsICJzYW1wbGVfZ2Vu b3R5cGVzIiwgInNhbXBsZXMiLD0yMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJ2YXJpYW50X2ltcGFjdHMiLCAidmFyaWFudHMiLCAidmVyc2lvbiI9CiBdCisgICAgICAgICAg ICB0cnk6CisgICAgICAgICAgICAgICAgY29ubiA9M0Qgc3FsaXRlLmNvbm5lY3QoIGZpbGVuYW1l ICkKKyAgICAgICAgICAgICAgICBjID0zRCBjb25uLmN1cnNvcigpCisgICAgICAgICAgICAgICAg dGFibGVzX3F1ZXJ5ID0zRCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5 cD0KZT0zRCd0YWJsZScgT1JERVIgQlkgbmFtZSIKKyAgICAgICAgICAgICAgICByZXN1bHQgPTNE IGMuZXhlY3V0ZSggdGFibGVzX3F1ZXJ5ICkuZmV0Y2hhbGwoKQorICAgICAgICAgICAgICAgIHJl c3VsdCA9M0QgbWFwKCBsYW1iZGEgeDogeFswXSwgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICBm b3IgdGFibGVfbmFtZSBpbiBnZW1pbmlfdGFibGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAg IGlmIHRhYmxlX25hbWUgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNl cHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIGxvZy53YXJuKCAnJXMsIHNuaWZmIEV4 Y2VwdGlvbjogJXMnLCBzZWxmLCBlICkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg c2V0X3BlZWsoIHNlbGYsIGRhdGFzZXQsIGlzX211bHRpX2J5dGU9M0RGYWxzZSApOgorICAgICAg ICBpZiBub3QgZGF0YXNldC5kYXRhc2V0LnB1cmdlZDoKKyAgICAgICAgICAgIGRhdGFzZXQucGVl ayAgPTNEICJHZW1pbmkgU1FMaXRlIERhdGFiYXNlLCB2ZXJzaW9uICVzIiAlICggZGF0PQphc2V0 Lm1ldGFkYXRhLmdlbWluaV92ZXJzaW9uIG9yICd1bmtub3duJyApCisgICAgICAgICAgICBkYXRh c2V0LmJsdXJiID0zRCBkYXRhLm5pY2Vfc2l6ZSggZGF0YXNldC5nZXRfc2l6ZSgpICkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIGRhdGFzZXQucGVlayA9M0QgJ2ZpbGUgZG9lcyBub3QgZXhp c3QnCisgICAgICAgICAgICBkYXRhc2V0LmJsdXJiID0zRCAnZmlsZSBwdXJnZWQgZnJvbSBkaXNr JworCisgICAgZGVmIGRpc3BsYXlfcGVlayggc2VsZiwgZGF0YXNldCApOgorICAgICAgICB0cnk6 CisgICAgICAgICAgICByZXR1cm4gZGF0YXNldC5wZWVrCisgICAgICAgIGV4Y2VwdDoKKyAgICAg ICAgICAgIHJldHVybiAiR2VtaW5pIFNRTGl0ZSBEYXRhYmFzZSwgdmVyc2lvbiAlcyIgJSAoIGRh dGFzZXQubWV0YWRhPQp0YS5nZW1pbmlfdmVyc2lvbiBvciAndW5rbm93bicgKQorCitCaW5hcnku cmVnaXN0ZXJfc25pZmZhYmxlX2JpbmFyeV9mb3JtYXQoICJnZW1pbmkuc3FsaXRlIiwgImdlbWlu aS5zcWxpdGUiLD0KIEdlbWluaVNRTGl0ZSApCisjIEZJWE1FOiBXZSBuZWVkIHRvIHJlZ2lzdGVy IGdlbWluaS5zcWxpdGUgYmVmb3JlIHNxbGl0ZSwgc2luY2UgcmVnaXN0ZXJfcz0KbmlmZmFibGVf YmluYXJ5X2Zvcm1hdCBhbmQgaXNfc25pZmZhYmxlX2JpbmFyeSBjYWxsZWQgaW4gdXBsb2FkLnB5 CisjIGlnbm9yZXMgc25pZmYgb3JkZXIgZGVjbGFyZWQgaW4gZGF0YXR5cGVzX2NvbmYueG1sCiBC aW5hcnkucmVnaXN0ZXJfc25pZmZhYmxlX2JpbmFyeV9mb3JtYXQoInNxbGl0ZSIsICJzcWxpdGUi LCBTUWxpdGUpCj0yMAorCiBjbGFzcyBYbHN4KEJpbmFyeSk6CiAgICAgIiIiQ2xhc3MgZm9yIEV4 Y2VsIDIwMDcgKHhsc3gpIGZpbGVzIiIiCiAgICAgZmlsZV9leHQ9M0QieGxzeCIKCmRpZmYgLXIg MTQzZjAyMmJhZTY5ZDhhYWEwNWZiOTM4YmU5OWQzNjQ2NjY5OWE1NCAtciBhM2E2YzcyOTkzYTdh NjNiNzQ3MzljYj0KYjZhOTFiOTk2NTAxZDExMzcgdG9vbHMvZGF0YV9zb3VyY2UvdXBsb2FkLnB5 Ci0tLSBhL3Rvb2xzL2RhdGFfc291cmNlL3VwbG9hZC5weQorKysgYi90b29scy9kYXRhX3NvdXJj ZS91cGxvYWQucHkKQEAgLTExMyw2ICsxMTMsOCBAQAogICAgICAgICBleHQgPTNEIHNuaWZmLmd1 ZXNzX2V4dCggZGF0YXNldC5wYXRoLCBpc19tdWx0aV9ieXRlPTNEVHJ1ZSApCiAgICAgIyBJcyBk YXRhc2V0IGNvbnRlbnQgc3VwcG9ydGVkIHNuaWZmYWJsZSBiaW5hcnk/CiAgICAgZWxzZToKKyAg ICAgICAgIyBGSVhNRTogVGhpcyBpZ25vcmVzIHRoZSBkZWNsYXJlZCBzbmlmZiBvcmRlciBpbiBk YXRhdHlwZV9jb25mLnhtbAorICAgICAgICAjIHJlc3VsdGluZyBpbiBpbXByb3BlciBiZWhhdmlv cgogICAgICAgICB0eXBlX2luZm8gPTNEIEJpbmFyeS5pc19zbmlmZmFibGVfYmluYXJ5KCBkYXRh c2V0LnBhdGggKQogICAgICAgICBpZiB0eXBlX2luZm86CiAgICAgICAgICAgICBkYXRhX3R5cGUg PTNEIHR5cGVfaW5mb1swXQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl bnRyYWwvY29tbWl0cy8zOWZiZjFkOTI1MDcvCkNoYW5nZXNldDogICAzOWZiZjFkOTI1MDcKVXNl cjogICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDkgMjI6Mzk6MjAr MDA6MDAKU3VtbWFyeTogICAgIFJlbW92ZSBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1p eGluCkFmZmVjdGVkICM6ICAxNyBmaWxlcwoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3Mzlj YmI2YTkxYjk5NjUwMWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2Qx MjcxOGZiOSBsaWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5Ci0tLSBhL2xpYi9nYWxheHkv bWFuYWdlcnMvZGF0YXNldHMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5w eQpAQCAtMTg1LDcgKzE4NSw4IEBACj0yMAogICAgICNUT0RPOiBpbXBsZW1lbnQgYWJvdmUgZm9y IGdyb3VwcwogICAgICNUT0RPOiBkYXRhdHlwZXM/Ci0gICAgI1RPRE86IGRhdGEsIG9iamVjdF9z dG9yZQorCisgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gZGF0YSwgb2JqZWN0X3N0b3JlCj0yMAo9 MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNECgpkaWZmIC1yIGEzYTZjNzI5OTNhN2E2M2I3NDczOWNiYjZhOTFiOTk2 NTAxZDExMzcgLXIgMzlmYmYxZDkyNTA3Nzk3ZjEwMTE0NTA9CjgzZWYzMjdjZDEyNzE4ZmI5IGxp Yi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMu cHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5CkBAIC01LDEwICs1LDEyIEBACiBo aXN0b3J5LgogIiIiCj0yMAoraW1wb3J0IG9zCiBpbXBvcnQgZ2V0dGV4dAo9MjAKIGZyb20gZ2Fs YXh5IGltcG9ydCBtb2RlbAogZnJvbSBnYWxheHkgaW1wb3J0IGV4Y2VwdGlvbnMKK2Zyb20gZ2Fs YXh5IGltcG9ydCBkYXRhdHlwZXMKPTIwCiBpbXBvcnQgYmFzZQogaW1wb3J0IGhpc3RvcmllcwpA QCAtMjgsMTIgKzMwLDE1IEBACiAgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVsLkhpc3RvcnlEYXRh c2V0QXNzb2NpYXRpb24KICAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLkhpc3RvcnlE YXRhc2V0QXNzb2NpYXRpb24uY3JlYXRlX3RpbWUsICkKPTIwCisgICAgI1RPRE86IHdoaWNoIG9m IHRoZXNlIGFyZSBjb21tb24gd2l0aCBMRERBcyBhbmQgY2FuIGJlIHB1c2hlZCBkb3duIGludD0K byBEYXRhc2V0QXNzb2NpYXRpb25NYW5hZ2VyPworCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBh cHAgKToKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB1cCBhbmQgaW5pdGlhbGl6ZSBvdGhlciBt YW5hZ2VycyBuZWVkZWQgYnkgaGRhcy4KICAgICAgICAgIiIiCiAgICAgICAgIHN1cGVyKCBIREFN YW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCApCj0yMAorICAgICMgLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4u Li4uIHNlY3VyaXR5IGFuZCBwZXJtaXNzaW9ucwogICAgIGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxm LCB0cmFucywgaGRhLCB1c2VyICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKQEAgLTQ4LDYg KzUzLDcgQEAKICAgICAgICAgI1RPRE86IHRoaXMgbWF5IGJlIHNsb3cgZHVlIHRvIEhpc3RvcnlN YW5hZ2VyIGluc3RhbnRpYXRpb24gYW5kIHBvPQpzc2libGUgMm5kIHRyYW5zYWN0aW9uIHRvIGdl dCB0aGUgaGRhLmhpc3RvcnkKICAgICAgICAgcmV0dXJuIGhpc3Rvcmllcy5IaXN0b3J5TWFuYWdl ciggc2VsZi5hcHAgKS5pc19vd25lciggdHJhbnMsIGhkYS5oPQppc3RvcnksIHVzZXIgKQo9MjAK KyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBjcmVhdGUgYW5kIGNvcHkKICAgICBkZWYgY3JlYXRl KCBzZWxmLCB0cmFucywgaGlzdG9yeT0zRE5vbmUsIGRhdGFzZXQ9M0ROb25lLCBmbHVzaD0zRFRy dWUsPQogKiprd2FyZ3MgKToKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSBhIG5ldyBoZGEg b3B0aW9uYWxseSBwYXNzaW5nIGluIGl0J3MgaGlzdG9yeSBhbmQgZGF0YXNldC4KQEAgLTExNSw2 ICsxMjEsMTMgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBsZGRhLnRvX2hpc3Rvcnlf ZGF0YXNldF9hc3NvY2lhdGlvbiggaGlzdG9yeSwgYWRkX3RvX2hpc3Rvcj0KeT0zRFRydWUgKQo9 MjAKKyAgICBkZWYgaXNfYV9jb3B5KCBzZWxmLCB0cmFucywgaGRhICk6CisgICAgICAgIHBhc3MK KworICAgIGRlZiBjb3BpZWRfZnJvbSggc2VsZiwgdHJhbnMsIGhkYSApOgorICAgICAgICBwYXNz CisKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLgogIyAgICBkZWYgYnlfaGlzdG9yeV9pZCggc2Vs ZiwgdHJhbnMsIGhpc3RvcnlfaWQsIGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyA9Cik6CiAjICAg ICAgICBoaXN0b3J5X2lkX2ZpbHRlciA9M0Qgc2VsZi5tb2RlbF9jbGFzcy5oaXN0b3J5X2lkID0z RD0zRCBoaXN0b3J5Xz0KaWQKICMgICAgICAgIGZpbHRlcnMgPTNEIHNlbGYuX211bmdlX2ZpbHRl cnMoIGhpc3RvcnlfaWRfZmlsdGVyLCBmaWx0ZXJzICkKQEAgLTE1Myw2ICsxNjYsMTUgQEAKICAg ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmxpY3QoICJQbGVhc2Ugd2FpdCB1bnRpbCB0 aGlzIGRhdGFzZXQgZmluPQppc2hlcyB1cGxvYWRpbmciICkKICAgICAgICAgcmV0dXJuIGhkYQo9 MjAKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBhc3NvY2lhdGVkCisjVE9ETzogaXMgdGhpcyBu ZWVkZWQ/IENhbid0IHlvdSB1c2UgdGhlIGhkYS5jcmVhdGluZ19qb2IgYXR0cmlidXRlPyBXaGVu ID0KaXMgdGhpcyBOb25lPworICAgIGRlZiBjcmVhdGluZ19qb2IoIHNlbGYsIHRyYW5zLCBoZGEg KToKKyAgICAgICAgam9iID0zRCBOb25lCisgICAgICAgIGZvciBqb2Jfb3V0cHV0X2Fzc29jIGlu IGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zOgorICAgICAgICAgICAgam9iID0zRCBqb2Jf b3V0cHV0X2Fzc29jLmpvYgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGpvYgor CiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2VyaWFsaXphdGlvbgogICAgIGRlZiBnZXRfZGlz cGxheV9hcHBzKCBzZWxmLCB0cmFucywgaGRhICk6CiAgICAgICAgICIiIgpAQCAtMjA4LDYgKzIz MCwyNyBAQAogICAgICAgICAgICByZXR1cm4gaGRhLmdldF92aXN1YWxpemF0aW9ucygpCiAgICAg ICAgIHJldHVybiB0cmFucy5hcHAudmlzdWFsaXphdGlvbnNfcmVnaXN0cnkuZ2V0X3Zpc3VhbGl6 YXRpb25zKCB0cmFucz0KLCBoZGEgKQo9MjAKKyAgICAjVE9ETzogdG8gZGF0YSBwcm92aWRlciBv ciBUZXh0IGRhdGF0eXBlIGRpcmVjdGx5CisgICAgZGVmIHRleHRfZGF0YSggc2VsZiwgZGF0YXNl dCwgcHJldmlldz0zRFRydWUgKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBkYXRhIGZyb20g dGV4dCBmaWxlLCB0cnVuY2F0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisgICAgICAg IHRydW5jYXRlZCA9M0QgRmFsc2UKKyAgICAgICAgZGF0YXNldF9kYXRhID0zRCBOb25lCisgICAg ICAgIGlmIG9zLnBhdGguZXhpc3RzKCBkYXRhc2V0LmZpbGVfbmFtZSApOgorICAgICAgICAgICAg aWYgaXNpbnN0YW5jZSggZGF0YXNldC5kYXRhdHlwZSwgZGF0YXR5cGVzLmRhdGEuVGV4dCApOgor ICAgICAgICAgICAgICAgIG1heF9wZWVrX3NpemUgPTNEIDEwMDAwMDAgIyAxIE1CCisgICAgICAg ICAgICAgICAgaWYgcHJldmlldyBhbmQgb3Muc3RhdCggZGF0YXNldC5maWxlX25hbWUgKS5zdF9z aXplID4gbWF4Xz0KcGVla19zaXplOgorICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2RhdGEg PTNEIG9wZW4oIGRhdGFzZXQuZmlsZV9uYW1lICkucmVhZCggbWF4X3A9CmVla19zaXplICkKKyAg ICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkID0zRCBUcnVlCisgICAgICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YXNldF9kYXRhID0zRCBvcGVuKCBkYXRhc2V0LmZp bGVfbmFtZSApLnJlYWQoIG1heF9wPQplZWtfc2l6ZSApCisgICAgICAgICAgICAgICAgICAgIHRy dW5jYXRlZCA9M0QgRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBG b3Igbm93LCBjYW5ub3QgZ2V0IGRhdGEgZnJvbSBub24tdGV4dCBkYXRhc2V0cy4KKyAgICAgICAg ICAgICAgICBkYXRhc2V0X2RhdGEgPTNEIE5vbmUKKyAgICAgICAgcmV0dXJuIHRydW5jYXRlZCwg ZGF0YXNldF9kYXRhCisKICAgICAjZGVmIGdldF9kYXRhc2V0KCBzZWxmLCB0cmFucywgZGF0YXNl dF9pZCwgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlPQpja19hY2Nlc3NpYmxlPTNERmFsc2Us IGNoZWNrX3N0YXRlPTNEVHJ1ZSApOgogICAgICMgICAgIiIiCiAgICAgIyAgICBHZXQgYW4gSERB IG9iamVjdCBieSBpZCBwZXJmb3JtaW5nIHNlY3VyaXR5IGNoZWNrcyB1c2luZwpAQCAtMjQ2LDYw ICsyODksMzggQEAKICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArICJiZWZvcmUgYXR0ZW1wdGluZyB0PQpvIHZpZXcgaXQuIiApCiAgICAgIyAgICBy ZXR1cm4gZGF0YQo9MjAKLSAgICAjZGVmIGdldF9kYXRhKCBzZWxmLCBkYXRhc2V0LCBwcmV2aWV3 PTNEVHJ1ZSApOgotICAgICMgICAgIiIiCi0gICAgIyAgICBHZXRzIGEgZGF0YXNldCdzIGRhdGEu Ci0gICAgIyAgICAiIiIKLSAgICAjICAgICMgR2V0IGRhdGEgZnJvbSBmaWxlLCB0cnVuY2F0aW5n IGlmIG5lY2Vzc2FyeS4KLSAgICAjICAgIHRydW5jYXRlZCA9M0QgRmFsc2UKLSAgICAjICAgIGRh dGFzZXRfZGF0YSA9M0QgTm9uZQotICAgICMgICAgaWYgb3MucGF0aC5leGlzdHMoIGRhdGFzZXQu ZmlsZV9uYW1lICk6Ci0gICAgIyAgICAgICAgaWYgaXNpbnN0YW5jZSggZGF0YXNldC5kYXRhdHlw ZSwgVGV4dCApOgotICAgICMgICAgICAgICAgICBtYXhfcGVla19zaXplID0zRCAxMDAwMDAwICMg MSBNQgotICAgICMgICAgICAgICAgICBpZiBwcmV2aWV3IGFuZCBvcy5zdGF0KCBkYXRhc2V0LmZp bGVfbmFtZSApLnN0X3NpemUgPiBtYXg9Cl9wZWVrX3NpemU6Ci0gICAgIyAgICAgICAgICAgICAg ICBkYXRhc2V0X2RhdGEgPTNEIG9wZW4oIGRhdGFzZXQuZmlsZV9uYW1lICkucmVhZChtYXhfcD0K ZWVrX3NpemUpCi0gICAgIyAgICAgICAgICAgICAgICB0cnVuY2F0ZWQgPTNEIFRydWUKLSAgICAj ICAgICAgICAgICAgZWxzZToKLSAgICAjICAgICAgICAgICAgICAgIGRhdGFzZXRfZGF0YSA9M0Qg b3BlbiggZGF0YXNldC5maWxlX25hbWUgKS5yZWFkKG1heF9wPQplZWtfc2l6ZSkKLSAgICAjICAg ICAgICAgICAgICAgIHRydW5jYXRlZCA9M0QgRmFsc2UKLSAgICAjICAgICAgICBlbHNlOgotICAg ICMgICAgICAgICAgICAjIEZvciBub3csIGNhbm5vdCBnZXQgZGF0YSBmcm9tIG5vbi10ZXh0IGRh dGFzZXRzLgotICAgICMgICAgICAgICAgICBkYXRhc2V0X2RhdGEgPTNEIE5vbmUKLSAgICAjICAg IHJldHVybiB0cnVuY2F0ZWQsIGRhdGFzZXRfZGF0YQotICAgICMKLSAgICAjZGVmIGNoZWNrX2Rh dGFzZXRfc3RhdGUoIHNlbGYsIHRyYW5zLCBkYXRhc2V0ICk6Ci0gICAgIyAgICAiIiIKLSAgICAj ICAgIFJldHVybnMgYSBtZXNzYWdlIGlmIGRhdGFzZXQgaXMgbm90IHJlYWR5IHRvIGJlIHVzZWQg aW4gdmlzdWFsaXphPQp0aW9uLgotICAgICMgICAgIiIiCi0gICAgIyAgICBpZiBub3QgZGF0YXNl dDoKLSAgICAjICAgICAgICByZXR1cm4gZGF0YXNldC5jb252ZXJzaW9uX21lc3NhZ2VzLk5PX0RB VEEKLSAgICAjICAgIGlmIGRhdGFzZXQuc3RhdGUgPTNEPTNEIHRyYW5zLmFwcC5tb2RlbC5Kb2Iu c3RhdGVzLkVSUk9SOgotICAgICMgICAgICAgIHJldHVybiBkYXRhc2V0LmNvbnZlcnNpb25fbWVz c2FnZXMuRVJST1IKLSAgICAjICAgIGlmIGRhdGFzZXQuc3RhdGUgIT0zRCB0cmFucy5hcHAubW9k ZWwuSm9iLnN0YXRlcy5PSzoKLSAgICAjICAgICAgICByZXR1cm4gZGF0YXNldC5jb252ZXJzaW9u X21lc3NhZ2VzLlBFTkRJTkcKLSAgICAjICAgIHJldHVybiBOb25lCisgICAgIyB0aGlzIGlzIGEg d2VpcmQgc3ludGF4IGFuZCByZXR1cm4gdmFsCisgICAgZGVmIGRhdGFfY29udmVyc2lvbl9zdGF0 dXMoIHNlbGYsIHRyYW5zLCBoZGEgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBt ZXNzYWdlIGlmIGRhdGFzZXQgaXMgbm90IHJlYWR5IHRvIGJlIHVzZWQgaW4gdmlzdWFsaXphdD0K aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGhkYToKKyAgICAgICAgICAgIHJldHVy biBoZGEuY29udmVyc2lvbl9tZXNzYWdlcy5OT19EQVRBCisgICAgICAgIGlmIGhkYS5zdGF0ZSA9 M0Q9M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuRVJST1I6CisgICAgICAgICAgICByZXR1 cm4gaGRhLmNvbnZlcnNpb25fbWVzc2FnZXMuRVJST1IKKyAgICAgICAgaWYgaGRhLnN0YXRlICE9 M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuT0s6CisgICAgICAgICAgICByZXR1cm4gaGRh LmNvbnZlcnNpb25fbWVzc2FnZXMuUEVORElORworICAgICAgICByZXR1cm4gTm9uZQo9MjAKLQot ICAgICNkZWYgZ2V0X2hkYV9qb2IoIHNlbGYsIGhkYSApOgotICAgICMgICAgIyBHZXQgZGF0YXNl dCdzIGpvYi4KLSAgICAjICAgIGpvYiA9M0QgTm9uZQotICAgICMgICAgZm9yIGpvYl9vdXRwdXRf YXNzb2MgaW4gaGRhLmNyZWF0aW5nX2pvYl9hc3NvY2lhdGlvbnM6Ci0gICAgIyAgICAgICAgam9i ID0zRCBqb2Jfb3V0cHV0X2Fzc29jLmpvYgotICAgICMgICAgICAgIGJyZWFrCi0gICAgIyAgICBy ZXR1cm4gam9iCi0KLSAgICAjZGVmIHN0b3BfaGRhX2NyZWF0aW5nX2pvYiggc2VsZiwgaGRhICk6 Ci0gICAgIyAgICAiIiIKLSAgICAjICAgIFN0b3BzIGFuIEhEQSdzIGNyZWF0aW5nIGpvYiBpZiBh bGwgdGhlIGpvYidzIG90aGVyIG91dHB1dHMgYXJlIGRlPQpsZXRlZC4KLSAgICAjICAgICIiIgot ICAgICMgICAgaWYgaGRhLnBhcmVudF9pZCBpcyBOb25lIGFuZCBsZW4oIGhkYS5jcmVhdGluZ19q b2JfYXNzb2NpYXRpb25zICk9CiA+IDA6Ci0gICAgIyAgICAgICAgIyBNYXJrIGFzc29jaWF0ZWQg am9iIGZvciBkZWxldGlvbgotICAgICMgICAgICAgIGpvYiA9M0QgaGRhLmNyZWF0aW5nX2pvYl9h c3NvY2lhdGlvbnNbMF0uam9iCi0gICAgIyAgICAgICAgaWYgam9iLnN0YXRlIGluIFsgc2VsZi5h cHAubW9kZWwuSm9iLnN0YXRlcy5RVUVVRUQsIHNlbGYuYXBwLj0KbW9kZWwuSm9iLnN0YXRlcy5S VU5OSU5HLCBzZWxmLmFwcC5tb2RlbC5Kb2Iuc3RhdGVzLk5FVyBdOgotICAgICMgICAgICAgICAg ICAjIEFyZSAqYWxsKiBvZiB0aGUgam9iJ3Mgb3RoZXIgb3V0cHV0IGRhdGFzZXRzIGRlbGV0ZWQ/ Ci0gICAgIyAgICAgICAgICAgIGlmIGpvYi5jaGVja19pZl9vdXRwdXRfZGF0YXNldHNfZGVsZXRl ZCgpOgotICAgICMgICAgICAgICAgICAgICAgam9iLm1hcmtfZGVsZXRlZCggc2VsZi5hcHAuY29u ZmlnLnRyYWNrX2pvYnNfaW5fZGF0YWI9CmFzZSApCi0gICAgIyAgICAgICAgICAgICAgICBzZWxm LmFwcC5qb2JfbWFuYWdlci5qb2Jfc3RvcF9xdWV1ZS5wdXQoIGpvYi5pZCApCisgICAgZGVmIHN0 b3BfY3JlYXRpbmdfam9iKCBzZWxmLCBoZGEgKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3Bz IGFuIEhEQSdzIGNyZWF0aW5nIGpvYiBpZiBhbGwgdGhlIGpvYidzIG90aGVyIG91dHB1dHMgYXJl IGRlbD0KZXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIFJVTk5JTkdfU1RBVEVTID0zRCAoCisg ICAgICAgICAgICBzZWxmLmFwcC5tb2RlbC5Kb2Iuc3RhdGVzLlFVRVVFRCwKKyAgICAgICAgICAg IHNlbGYuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuUlVOTklORywKKyAgICAgICAgICAgIHNlbGYuYXBw Lm1vZGVsLkpvYi5zdGF0ZXMuTkVXCisgICAgICAgICkKKyAgICAgICAgaWYgaGRhLnBhcmVudF9p ZCBpcyBOb25lIGFuZCBsZW4oIGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zICkgPQo+IDA6 CisgICAgICAgICAgICAjIE1hcmsgYXNzb2NpYXRlZCBqb2IgZm9yIGRlbGV0aW9uCisgICAgICAg ICAgICBqb2IgPTNEIGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zWzBdLmpvYgorICAgICAg ICAgICAgaWYgam9iLnN0YXRlIGluIFJVTk5JTkdfU1RBVEVTOgorICAgICAgICAgICAgICAgICMg QXJlICphbGwqIG9mIHRoZSBqb2IncyBvdGhlciBvdXRwdXQgZGF0YXNldHMgZGVsZXRlZD8KKyAg ICAgICAgICAgICAgICBpZiBqb2IuY2hlY2tfaWZfb3V0cHV0X2RhdGFzZXRzX2RlbGV0ZWQoKToK KyAgICAgICAgICAgICAgICAgICAgam9iLm1hcmtfZGVsZXRlZCggc2VsZi5hcHAuY29uZmlnLnRy YWNrX2pvYnNfaW5fZGF0YWJhPQpzZSApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwLmpv Yl9tYW5hZ2VyLmpvYl9zdG9wX3F1ZXVlLnB1dCggam9iLmlkICkKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNs YXNzIEhEQVNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyICk6CgpkaWZmIC1yIGEzYTZj NzI5OTNhN2E2M2I3NDczOWNiYjZhOTFiOTk2NTAxZDExMzcgLXIgMzlmYmYxZDkyNTA3Nzk3ZjEw MTE0NTA9CjgzZWYzMjdjZDEyNzE4ZmI5IGxpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5 Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CisrKyBiL2xpYi9nYWxheHkv bWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC0yNCw2ICsyNCw3IEBACiBjbGFzcyBIaXN0b3J5TWFu YWdlciggc2hhcmFibGUuU2hhcmFibGVNb2RlbE1hbmFnZXIsIGJhc2UuUHVyZ2FibGVNb2RlbElu dD0KZXJmYWNlICk6CiAgICAgIiIiCiAgICAgIiIiCisKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9k ZWwuSGlzdG9yeQogICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuSGlzdG9yeS5jcmVh dGVfdGltZSwgKQogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdoaXN0b3J5JwpAQCAtMzUsMjgg KzM2LDExIEBACiAgICAgICAgIHN1cGVyKCBIaXN0b3J5TWFuYWdlciwgc2VsZiApLl9faW5pdF9f KCBhcHAsICphcmdzLCAqKmt3YXJncyApCiAgICAgICAgIHNlbGYuaGRhX21nciA9M0QgaGRhcy5I REFNYW5hZ2VyKCBhcHAgKQo9MjAKLSAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBjcnVkCiAgICAg ZGVmIGNvcHkoIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCB1c2VyLCAqKmt3YXJncyApOgogICAgICAg ICAiIiIKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBoaXN0b3J5LmNvcHkoIHRhcmdldF91 c2VyPTNEdXNlciwgKiprd2FyZ3MgKQo9MjAKLSAgICBkZWYgZ2V0X2N1cnJlbnQoIHNlbGYsIHRy YW5zICk6Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHRyYW5zLmdl dF9oaXN0b3J5KCkKLQotICAgIGRlZiBzZXRfY3VycmVudCggc2VsZiwgdHJhbnMsIGhpc3Rvcnkg KToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICB0cmFucy5zZXRfaGlzdG9yeSgg aGlzdG9yeSApCi0gICAgICAgIHJldHVybiBoaXN0b3J5Ci0KLSAgICBkZWYgc2V0X2N1cnJlbnRf YnlfaWQoIHNlbGYsIHRyYW5zLCBoaXN0b3J5X2lkICk6Ci0gICAgICAgICIiIgotICAgICAgICAi IiIKLSAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2N1cnJlbnQoIHRyYW5zLCBzZWxmLmJ5X2lkKCB0 cmFucywgaGlzdG9yeV9pZCApICkKLQogICAgIGRlZiBtb3N0X3JlY2VudCggc2VsZiwgdHJhbnMs IHVzZXIsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKQEAgLTEwNSw2ICs4 OSwyMyBAQAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGNvbnRlbnRzCiAgICA9MjAKPTIwCisg ICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gY3VycmVudAorICAgIGRlZiBnZXRfY3VycmVudCggc2Vs ZiwgdHJhbnMgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdHJh bnMuZ2V0X2hpc3RvcnkoKQorCisgICAgZGVmIHNldF9jdXJyZW50KCBzZWxmLCB0cmFucywgaGlz dG9yeSApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHRyYW5zLnNldF9oaXN0 b3J5KCBoaXN0b3J5ICkKKyAgICAgICAgcmV0dXJuIGhpc3RvcnkKKworICAgIGRlZiBzZXRfY3Vy cmVudF9ieV9pZCggc2VsZiwgdHJhbnMsIGhpc3RvcnlfaWQgKToKKyAgICAgICAgIiIiCisgICAg ICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5zZXRfY3VycmVudCggdHJhbnMsIHNlbGYuYnlf aWQoIHRyYW5zLCBoaXN0b3J5X2lkICkgKQorCiAgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2Vy aWFsaXphdGlvbgogICAgICNUT0RPOiBtb3ZlIHRvIHNlcmlhbGl6ZXIgKGkuZS4gaGlzdG9yeSB3 aXRoIGNvbnRlbnRzIGF0dHIpCiAgICAgZGVmIF9nZXRfaGlzdG9yeV9kYXRhKCBzZWxmLCB0cmFu cywgaGlzdG9yeSApOgoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3MzljYmI2YTkxYjk5NjUw MWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2QxMjcxOGZiOSBsaWIv Z2FsYXh5L3dlYi9iYXNlL2NvbnRyb2xsZXIucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvYmFzZS9j b250cm9sbGVyLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxlci5weQpAQCAt MzIsNyArMzIsNiBAQAogZnJvbSBnYWxheHkubW9kZWwuaXRlbV9hdHRycyBpbXBvcnQgRGljdGlm aWFibGUsIFVzZXNBbm5vdGF0aW9ucwo9MjAKIGZyb20gZ2FsYXh5LmRhdGF0eXBlcy5pbnRlcnZh bCBpbXBvcnQgQ2hyb21hdGluSW50ZXJhY3Rpb25zCi1mcm9tIGdhbGF4eS5kYXRhdHlwZXMuZGF0 YSBpbXBvcnQgVGV4dAo9MjAKIGZyb20gZ2FsYXh5Lm1vZGVsIGltcG9ydCBFeHRlbmRlZE1ldGFk YXRhLCBFeHRlbmRlZE1ldGFkYXRhSW5kZXgsIExpYnJhcnlEPQphdGFzZXREYXRhc2V0QXNzb2Np YXRpb24sIEhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24KPTIwCkBAIC0yNzgsMTE3ICsyNzcsNiBA QAogICAgICAgICBoaXN0b3J5X2ltcF90b29sLmV4ZWN1dGUoIHRyYW5zLCBpbmNvbWluZz0zRGlu Y29taW5nICkKPTIwCj0yMAotY2xhc3MgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25NaXhp bjoKLSAgICAiIiIKLSAgICBNaXhpbiBmb3IgY29udHJvbGxlcnMgdGhhdCB1c2UgSGlzdG9yeURh dGFzZXRBc3NvY2lhdGlvbiBvYmplY3RzLgotICAgICIiIgotCi0gICAgZGVmIGdldF9kYXRhc2V0 KCBzZWxmLCB0cmFucywgZGF0YXNldF9pZCwgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZSwgY2hlYz0K a19hY2Nlc3NpYmxlPTNERmFsc2UsIGNoZWNrX3N0YXRlPTNEVHJ1ZSApOgotICAgICAgICAiIiIK LSAgICAgICAgR2V0IGFuIEhEQSBvYmplY3QgYnkgaWQgcGVyZm9ybWluZyBzZWN1cml0eSBjaGVj a3MgdXNpbmcKLSAgICAgICAgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCi0gICAgICAgICIiIgot ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYXRhc2V0X2lkID0zRCB0cmFucy5zZWN1cml0eS5k ZWNvZGVfaWQoIGRhdGFzZXRfaWQgKQotICAgICAgICBleGNlcHQgKCBBdHRyaWJ1dGVFcnJvciwg VHlwZUVycm9yICk6Ci0gICAgICAgICAgICAjIERFUFJFQ0FUSU9OOiBXZSBzdGlsbCBzdXBwb3J0 IHVuZW5jb2RlZCBpZHMgZm9yIGJhY2t3YXJkIGNvbT0KcGF0aWJpbGl0eQotICAgICAgICAgICAg dHJ5OgotICAgICAgICAgICAgICAgIGRhdGFzZXRfaWQgPTNEIGludCggZGF0YXNldF9pZCApCi0g ICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBIVFRQ QmFkUmVxdWVzdCggIkludmFsaWQgZGF0YXNldCBpZDogJXMuIiAlIHN0ciggZGF0PQphc2V0X2lk ICkgKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRhdGEgPTNEIHRyYW5zLnNhX3Nlc3Np b24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNlPQp0QXNzb2NpYXRpb24gKS5n ZXQoIGludCggZGF0YXNldF9pZCApICkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFp c2UgSFRUUFJlcXVlc3RSYW5nZU5vdFNhdGlzZmlhYmxlKCAiSW52YWxpZCBkYXRhc2V0IGlkOiAl cy49CiIgJSBzdHIoIGRhdGFzZXRfaWQgKSApCi0KLSAgICAgICAgaWYgY2hlY2tfb3duZXJzaGlw OgotICAgICAgICAgICAgIyBWZXJpZnkgb3duZXJzaGlwLgotICAgICAgICAgICAgdXNlciA9M0Qg dHJhbnMuZ2V0X3VzZXIoKQotICAgICAgICAgICAgaWYgbm90IHVzZXI6Ci0gICAgICAgICAgICAg ICAgZXJyb3IoICJNdXN0IGJlIGxvZ2dlZCBpbiB0byBtYW5hZ2UgR2FsYXh5IGl0ZW1zIiApCi0g ICAgICAgICAgICBpZiBkYXRhLmhpc3RvcnkudXNlciAhPTNEIHVzZXI6Ci0gICAgICAgICAgICAg ICAgZXJyb3IoICIlcyBpcyBub3Qgb3duZWQgYnkgY3VycmVudCB1c2VyIiAlIGRhdGEuX19jbGFz c19fLj0KX19uYW1lX18gKQotCi0gICAgICAgIGlmIGNoZWNrX2FjY2Vzc2libGU6Ci0gICAgICAg ICAgICBjdXJyZW50X3VzZXJfcm9sZXMgPTNEIHRyYW5zLmdldF9jdXJyZW50X3VzZXJfcm9sZXMo KQotCi0gICAgICAgICAgICBpZiBub3QgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nl c3NfZGF0YXNldCggY3VycmVudF91cz0KZXJfcm9sZXMsIGRhdGEuZGF0YXNldCApOgotICAgICAg ICAgICAgICAgIGVycm9yKCAiWW91IGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlc3MgdGhpcyBkYXRh c2V0IiApCi0KLSAgICAgICAgICAgIGlmIGNoZWNrX3N0YXRlIGFuZCBkYXRhLnN0YXRlID0zRD0z RCB0cmFucy5tb2RlbC5EYXRhc2V0LnN0YXRlPQpzLlVQTE9BRDoKLSAgICAgICAgICAgICAgICBy ZXR1cm4gdHJhbnMuc2hvd19lcnJvcl9tZXNzYWdlKCAiUGxlYXNlIHdhaXQgdW50aWwgdGhpcyBk PQphdGFzZXQgZmluaXNoZXMgdXBsb2FkaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsgImJlZm9yZSBhdHRlbXB0aW5nIHRvPQogdmlldyBp dC4iICkKLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBnZXRfZGF0YSggc2VsZiwgZGF0 YXNldCwgcHJldmlldz0zRFRydWUgKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldHMgYSBkYXRh c2V0J3MgZGF0YS4KLSAgICAgICAgIiIiCi0gICAgICAgICMgR2V0IGRhdGEgZnJvbSBmaWxlLCB0 cnVuY2F0aW5nIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgdHJ1bmNhdGVkID0zRCBGYWxzZQotICAg ICAgICBkYXRhc2V0X2RhdGEgPTNEIE5vbmUKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIGRh dGFzZXQuZmlsZV9uYW1lICk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKCBkYXRhc2V0LmRh dGF0eXBlLCBUZXh0ICk6Ci0gICAgICAgICAgICAgICAgbWF4X3BlZWtfc2l6ZSA9M0QgMTAwMDAw MCAjIDEgTUIKLSAgICAgICAgICAgICAgICBpZiBwcmV2aWV3IGFuZCBvcy5zdGF0KCBkYXRhc2V0 LmZpbGVfbmFtZSApLnN0X3NpemUgPiBtYXhfPQpwZWVrX3NpemU6Ci0gICAgICAgICAgICAgICAg ICAgIGRhdGFzZXRfZGF0YSA9M0Qgb3BlbiggZGF0YXNldC5maWxlX25hbWUgKS5yZWFkKG1heF9w ZT0KZWtfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkID0zRCBUcnVlCi0gICAg ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZGF0YXNldF9kYXRhID0zRCBv cGVuKCBkYXRhc2V0LmZpbGVfbmFtZSApLnJlYWQobWF4X3BlPQpla19zaXplKQotICAgICAgICAg ICAgICAgICAgICB0cnVuY2F0ZWQgPTNEIEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAg ICAgICAgICAgICMgRm9yIG5vdywgY2Fubm90IGdldCBkYXRhIGZyb20gbm9uLXRleHQgZGF0YXNl dHMuCi0gICAgICAgICAgICAgICAgZGF0YXNldF9kYXRhID0zRCBOb25lCi0gICAgICAgIHJldHVy biB0cnVuY2F0ZWQsIGRhdGFzZXRfZGF0YQotI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29u dHJvbGxlcnMvZGF0YXNldC5weTo1NjY6ICAgICAgICAgICAgdHJ1bmNhdGU9CmQsIGRhdGFzZXRf ZGF0YSA9M0Qgc2VsZi5nZXRfZGF0YSggZGF0YXNldCwgcHJldmlldyApCi0jbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9kYXRhc2V0LnB5OjYwNDogICAgICAgIHRydW5jYXRl ZCwgZD0KYXRhc2V0X2RhdGEgPTNEIHNlbGYuZ2V0X2RhdGEoIGRhdGFzZXQsIHByZXZpZXc9M0RU cnVlICkKLSNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3BhZ2UucHk6Nzg3 OiAgICAgICAgICAgICAgICBkYXRhID0KPTNEIHNlbGYuZ2V0X2RhdGEoIGRhdGFzZXQgKQotI2xp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdmlzdWFsaXphdGlvbi5weToxMDEy OiAgICAgICAgZGF0YSA9Cj0zRCBwZC5nZXRfZGF0YSggdHJlZV9pbmRleD0zRHRyZWVfaW5kZXgg KQotCi0gICAgZGVmIGNoZWNrX2RhdGFzZXRfc3RhdGUoIHNlbGYsIHRyYW5zLCBkYXRhc2V0ICk6 Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIGEgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5v dCByZWFkeSB0byBiZSB1c2VkIGluIHZpc3VhbGl6YXQ9Cmlvbi4KLSAgICAgICAgIiIiCi0gICAg ICAgIGlmIG5vdCBkYXRhc2V0OgotICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQuY29udmVyc2lv bl9tZXNzYWdlcy5OT19EQVRBCi0gICAgICAgIGlmIGRhdGFzZXQuc3RhdGUgPTNEPTNEIHRyYW5z LmFwcC5tb2RlbC5Kb2Iuc3RhdGVzLkVSUk9SOgotICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQu Y29udmVyc2lvbl9tZXNzYWdlcy5FUlJPUgotICAgICAgICBpZiBkYXRhc2V0LnN0YXRlICE9M0Qg dHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuT0s6Ci0gICAgICAgICAgICByZXR1cm4gZGF0YXNl dC5jb252ZXJzaW9uX21lc3NhZ2VzLlBFTkRJTkcKLSAgICAgICAgcmV0dXJuIE5vbmUKLSNsaWIv Z2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weTo4OTogICAgICAgIG1zZyA9M0Qg c2VsZi5jaGVja19kPQphdGFzZXRfc3RhdGUoIHRyYW5zLCBkYXRhc2V0ICkKLSNsaWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weToxMDA6ICAgICAgICBtc2cgPTNEIHNlbGYu Y2hlY2tfPQpkYXRhc2V0X3N0YXRlKCB0cmFucywgZGF0YXNldCApCi0jbGliL2dhbGF4eS93ZWJh cHBzL2dhbGF4eS9hcGkvZGF0YXNldHMucHk6MTQ5OiAgICAgICAgbXNnID0zRCBzZWxmLmNoZWNr Xz0KZGF0YXNldF9zdGF0ZSggdHJhbnMsIGRhdGFzZXQgKQotI2xpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvYXBpL2RhdGFzZXRzLnB5OjI0MjogICAgICAgIG1zZyA9M0Qgc2VsZi5jaGVja189CmRh dGFzZXRfc3RhdGUoIHRyYW5zLCBkYXRhc2V0ICkKLSNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5 L2FwaS90b29scy5weToyODc6ICAgICAgICBtc2cgPTNEIHNlbGYuY2hlY2tfZGF0PQphc2V0X3N0 YXRlKCB0cmFucywgb3JpZ2luYWxfZGF0YXNldCApCi0KLSAgICBkZWYgZ2V0X2hkYV9qb2IoIHNl bGYsIGhkYSApOgotICAgICAgICAjIEdldCBkYXRhc2V0J3Mgam9iLgotICAgICAgICBqb2IgPTNE IE5vbmUKLSAgICAgICAgZm9yIGpvYl9vdXRwdXRfYXNzb2MgaW4gaGRhLmNyZWF0aW5nX2pvYl9h c3NvY2lhdGlvbnM6Ci0gICAgICAgICAgICBqb2IgPTNEIGpvYl9vdXRwdXRfYXNzb2Muam9iCi0g ICAgICAgICAgICBicmVhawotICAgICAgICByZXR1cm4gam9iCi0jbGliL2dhbGF4eS93ZWIvYmFz ZS9jb250cm9sbGVyLnB5Ojg0NjogICAgICAgIGpvYiA9M0Qgc2VsZi5nZXRfaGRhX2pvYiggaD0K ZGEgKQotI2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rvb2xzLnB5OjI5NjogICAgICAg IG9yaWdpbmFsX2pvYiA9M0Qgc2VsZi49CmdldF9oZGFfam9iKCBvcmlnaW5hbF9kYXRhc2V0ICkK LSNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3Zpc3VhbGl6YXRpb24ucHk6 OTc3OiAgICAgICAgICAgIGpvPQpiID0zRCBzZWxmLmdldF9oZGFfam9iKCBkYXRhc2V0ICkKLQot ICAgIGRlZiBzdG9wX2hkYV9jcmVhdGluZ19qb2IoIHNlbGYsIGhkYSApOgotICAgICAgICAiIiIK LSAgICAgICAgU3RvcHMgYW4gSERBJ3MgY3JlYXRpbmcgam9iIGlmIGFsbCB0aGUgam9iJ3Mgb3Ro ZXIgb3V0cHV0cyBhcmUgZGVsPQpldGVkLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgaGRhLnBh cmVudF9pZCBpcyBOb25lIGFuZCBsZW4oIGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zICkg PQo+IDA6Ci0gICAgICAgICAgICAjIE1hcmsgYXNzb2NpYXRlZCBqb2IgZm9yIGRlbGV0aW9uCi0g ICAgICAgICAgICBqb2IgPTNEIGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zWzBdLmpvYgot ICAgICAgICAgICAgaWYgam9iLnN0YXRlIGluIFsgc2VsZi5hcHAubW9kZWwuSm9iLnN0YXRlcy5R VUVVRUQsIHNlbGYuYXBwLm09Cm9kZWwuSm9iLnN0YXRlcy5SVU5OSU5HLCBzZWxmLmFwcC5tb2Rl bC5Kb2Iuc3RhdGVzLk5FVyBdOgotICAgICAgICAgICAgICAgICMgQXJlICphbGwqIG9mIHRoZSBq b2IncyBvdGhlciBvdXRwdXQgZGF0YXNldHMgZGVsZXRlZD8KLSAgICAgICAgICAgICAgICBpZiBq b2IuY2hlY2tfaWZfb3V0cHV0X2RhdGFzZXRzX2RlbGV0ZWQoKToKLSAgICAgICAgICAgICAgICAg ICAgam9iLm1hcmtfZGVsZXRlZCggc2VsZi5hcHAuY29uZmlnLnRyYWNrX2pvYnNfaW5fZGF0YWJh PQpzZSApCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwLmpvYl9tYW5hZ2VyLmpvYl9zdG9w X3F1ZXVlLnB1dCggam9iLmlkICkKLSNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0 b3J5X2NvbnRlbnRzLnB5OjM2NjogICAgICAgICAgICAgICAgc2VsPQpmLnN0b3BfaGRhX2NyZWF0 aW5nX2pvYiggaGRhICkKLSNsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2Rh dGFzZXQucHk6NzcyOiAgICAgICAgICAgIHNlbGYuc3RvPQpwX2hkYV9jcmVhdGluZ19qb2IoIGhk YSApCi0KIGNsYXNzIFVzZXNMaWJyYXJ5TWl4aW46Cj0yMAogICAgIGRlZiBnZXRfbGlicmFyeSgg c2VsZiwgdHJhbnMsIGlkLCBjaGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXM9CnNp YmxlPTNEVHJ1ZSApOgpAQCAtNTI3LDcgKzQxNSw3IEBACiAgICAgICAgIHJldHVybiBzZWN1cml0 eV9hZ2VudC5nZXRfcGVybWlzc2lvbnMoIGxkZGEgKQo9MjAKPTIwCi1jbGFzcyBVc2VzVmlzdWFs aXphdGlvbk1peGluKCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLCBVc2VzTGli cj0KYXJ5TWl4aW5JdGVtcyApOgorY2xhc3MgVXNlc1Zpc3VhbGl6YXRpb25NaXhpbiggVXNlc0xp YnJhcnlNaXhpbkl0ZW1zICk6CiAgICAgIiIiCiAgICAgTWl4aW4gZm9yIGNvbnRyb2xsZXJzIHRo YXQgdXNlIFZpc3VhbGl6YXRpb24gb2JqZWN0cy4KICAgICAiIiIKQEAgLTgxNiw5ICs3MDQsMTQg QEAKICAgICBkZWYgZ2V0X3Rvb2xfZGVmKCBzZWxmLCB0cmFucywgaGRhICk6CiAgICAgICAgICIi IiBSZXR1cm5zIGRlZmluaXRpb24gb2YgYW4gaW50ZXJhY3RpdmUgdG9vbCBmb3IgYW4gSERBLiAi IiIKPTIwCi0gICAgICAgIGpvYiA9M0Qgc2VsZi5nZXRfaGRhX2pvYiggaGRhICkKKyAgICAgICAg IyBHZXQgZGF0YXNldCdzIGpvYi4KKyAgICAgICAgam9iID0zRCBOb25lCisgICAgICAgIGZvciBq b2Jfb3V0cHV0X2Fzc29jIGluIGhkYS5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zOgorICAgICAg ICAgICAgam9iID0zRCBqb2Jfb3V0cHV0X2Fzc29jLmpvYgorICAgICAgICAgICAgYnJlYWsKICAg ICAgICAgaWYgbm90IGpvYjoKICAgICAgICAgICAgIHJldHVybiBOb25lCisKICAgICAgICAgdG9v bCA9M0QgdHJhbnMuYXBwLnRvb2xib3guZ2V0X3Rvb2woIGpvYi50b29sX2lkICkKICAgICAgICAg aWYgbm90IHRvb2w6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtOTU2LDEwICs4NDksNDgg QEAKICAgICBkZWYgZ2V0X2hkYV9vcl9sZGRhKCBzZWxmLCB0cmFucywgaGRhX2xkZGEsIGRhdGFz ZXRfaWQgKToKICAgICAgICAgIiIiIFJldHVybnMgZWl0aGVyIEhEQSBvciBMRERBIGZvciBoZGEv bGRkYSBhbmQgaWQgY29tYmluYXRpb24uICIiIgogICAgICAgICBpZiBoZGFfbGRkYSA9M0Q9M0Qg ImhkYSI6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIGRhdGFz ZXRfaWQsIGNoZWNrX293bmVyc2hpcD0zRD0KRmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVl ICkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oZGEoIHRyYW5zLCBkYXRhc2V0X2lkLCBj aGVja19vd25lcnNoaXA9M0RGYWxzPQplLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCiAgICAg ICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGlicmFyeV9kYXRhc2V0X2Rh dGFzZXRfYXNzb2NpYXRpb24oIHRyYW5zLCBkYT0KdGFzZXRfaWQgKQo9MjAKKyAgICBkZWYgZ2V0 X2hkYSggc2VsZiwgdHJhbnMsIGRhdGFzZXRfaWQsIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNo ZWNrX2FjPQpjZXNzaWJsZT0zREZhbHNlLCBjaGVja19zdGF0ZT0zRFRydWUgKToKKyAgICAgICAg IiIiCisgICAgICAgIEdldCBhbiBIREEgb2JqZWN0IGJ5IGlkIHBlcmZvcm1pbmcgc2VjdXJpdHkg Y2hlY2tzIHVzaW5nCisgICAgICAgIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgorICAgICAgICAi IiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YXNldF9pZCA9M0QgdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkKKyAgICAgICAgZXhjZXB0ICggQXR0cmlidXRlRXJy b3IsIFR5cGVFcnJvciApOgorICAgICAgICAgICAgIyBERVBSRUNBVElPTjogV2Ugc3RpbGwgc3Vw cG9ydCB1bmVuY29kZWQgaWRzIGZvciBiYWNrd2FyZCBjb209CnBhdGliaWxpdHkKKyAgICAgICAg ICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhc2V0X2lkID0zRCBpbnQoIGRhdGFzZXRfaWQg KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2Ug SFRUUEJhZFJlcXVlc3QoICJJbnZhbGlkIGRhdGFzZXQgaWQ6ICVzLiIgJSBzdHIoIGRhdD0KYXNl dF9pZCApICkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0zRCB0cmFucy5zYV9z ZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFzZT0KdEFzc29jaWF0aW9u ICkuZ2V0KCBpbnQoIGRhdGFzZXRfaWQgKSApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg IHJhaXNlIEhUVFBSZXF1ZXN0UmFuZ2VOb3RTYXRpc2ZpYWJsZSggIkludmFsaWQgZGF0YXNldCBp ZDogJXMuPQoiICUgc3RyKCBkYXRhc2V0X2lkICkgKQorCisgICAgICAgIGlmIGNoZWNrX293bmVy c2hpcDoKKyAgICAgICAgICAgICMgVmVyaWZ5IG93bmVyc2hpcC4KKyAgICAgICAgICAgIHVzZXIg PTNEIHRyYW5zLmdldF91c2VyKCkKKyAgICAgICAgICAgIGlmIG5vdCB1c2VyOgorICAgICAgICAg ICAgICAgIGVycm9yKCAiTXVzdCBiZSBsb2dnZWQgaW4gdG8gbWFuYWdlIEdhbGF4eSBpdGVtcyIg KQorICAgICAgICAgICAgaWYgZGF0YS5oaXN0b3J5LnVzZXIgIT0zRCB1c2VyOgorICAgICAgICAg ICAgICAgIGVycm9yKCAiJXMgaXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciIgJSBkYXRhLl9f Y2xhc3NfXy49Cl9fbmFtZV9fICkKKworICAgICAgICBpZiBjaGVja19hY2Nlc3NpYmxlOgorICAg ICAgICAgICAgY3VycmVudF91c2VyX3JvbGVzID0zRCB0cmFucy5nZXRfY3VycmVudF91c2VyX3Jv bGVzKCkKKworICAgICAgICAgICAgaWYgbm90IHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5f YWNjZXNzX2RhdGFzZXQoIGN1cnJlbnRfdXM9CmVyX3JvbGVzLCBkYXRhLmRhdGFzZXQgKToKKyAg ICAgICAgICAgICAgICBlcnJvciggIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoaXMg ZGF0YXNldCIgKQorCisgICAgICAgICAgICBpZiBjaGVja19zdGF0ZSBhbmQgZGF0YS5zdGF0ZSA9 M0Q9M0QgdHJhbnMubW9kZWwuRGF0YXNldC5zdGF0ZT0Kcy5VUExPQUQ6CisgICAgICAgICAgICAg ICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3JfbWVzc2FnZSggIlBsZWFzZSB3YWl0IHVudGlsIHRo aXMgZD0KYXRhc2V0IGZpbmlzaGVzIHVwbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJiZWZvcmUgYXR0ZW1wdGluZyB0bz0KIHZp ZXcgaXQuIiApCisgICAgICAgIHJldHVybiBkYXRhCisKICAgICAjIC0tIEhlbHBlciBmdW5jdGlv bnMgLS0KPTIwCiAgICAgZGVmIF9jcmVhdGVfdmlzdWFsaXphdGlvbiggc2VsZiwgdHJhbnMsIHRp dGxlLCB0eXBlLCBkYmtleT0zRE5vbmUsIHNsdT0KZz0zRE5vbmUsIGFubm90YXRpb249M0ROb25l LCBzYXZlPTNEVHJ1ZSApOgoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3MzljYmI2YTkxYjk5 NjUwMWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2QxMjcxOGZiOSBs aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQotLS0gYS9saWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQpAQCAtNSwxNCArNSwxNCBAQAogZnJvbSBn YWxheHkgaW1wb3J0IHdlYgogZnJvbSBnYWxheHkubW9kZWwuaXRlbV9hdHRycyBpbXBvcnQgVXNl c0Fubm90YXRpb25zCiBmcm9tIGdhbGF4eS51dGlsLnNhbml0aXplX2h0bWwgaW1wb3J0IHNhbml0 aXplX2h0bWwKLWZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElD b250cm9sbGVyLCBIVFRQTm90SW1wbGVtZW50PQplZCwgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2Np YXRpb25NaXhpbiwgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4KK2Zyb20gZ2FsYXh5LndlYi5iYXNl LmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyLCBIVFRQTm90SW1wbGVtZW50PQpl ZCwgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4KPTIwCiBmcm9tIGdhbGF4eSBpbXBvcnQgbWFuYWdl cnMKPTIwCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAo9MjAKLWNs YXNzIEJhc2VBbm5vdGF0aW9uc0NvbnRyb2xsZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzSGlz dG9yeURhdGFzZXRBc3NvPQpjaWF0aW9uTWl4aW4sIFVzZXNTdG9yZWRXb3JrZmxvd01peGluLCBV c2VzQW5ub3RhdGlvbnMgKToKK2NsYXNzIEJhc2VBbm5vdGF0aW9uc0NvbnRyb2xsZXIoIEJhc2VB UElDb250cm9sbGVyLCBVc2VzU3RvcmVkV29ya2Zsb3dNaXhpPQpuLCBVc2VzQW5ub3RhdGlvbnMg KToKPTIwCiAgICAgQHdlYi5leHBvc2VfYXBpCiAgICAgZGVmIGluZGV4KCBzZWxmLCB0cmFucywg Kiprd2QgKToKQEAgLTU5LDcgKzU5LDcgQEAKPTIwCiAgICAgZGVmIF9nZXRfaXRlbV9mcm9tX2lk KHNlbGYsIHRyYW5zLCBpZHN0cik6CiAgICAgICAgIGRlY29kZWRfaWRzdHIgPTNEIHRyYW5zLnNl Y3VyaXR5LmRlY29kZV9pZCggaWRzdHIgKQotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3Rv cnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF89Cmlkc3RyLCB0cmFu cy51ZXIgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3Np YmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF89Cmlkc3RyLCB0cmFucy51c2VyICkKICAgICAgICAg cmV0dXJuIGhpc3RvcnkKPTIwCj0yMApAQCAtNjcsOCArNjcsMTQgQEAKICAgICBjb250cm9sbGVy X25hbWUgPTNEICJoaXN0b3J5X2NvbnRlbnRfYW5ub3RhdGlvbnMiCiAgICAgdGFnZ2VkX2l0ZW1f aWQgPTNEICJoaXN0b3J5X2NvbnRlbnRfaWQiCj0yMAorICAgIGRlZiBfX2luaXRfXyggc2VsZiwg YXBwICk6CisgICAgICAgIHN1cGVyKCBIaXN0b3J5Q29udGVudEFubm90YXRpb25zQ29udHJvbGxl ciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBt YW5hZ2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCisKICAgICBkZWYgX2dldF9pdGVtX2Zyb21f aWQoc2VsZiwgdHJhbnMsIGlkc3RyKToKLSAgICAgICAgaGRhID0zRCBzZWxmLmdldF9kYXRhc2V0 KHRyYW5zLCBpZHN0cikKKyAgICAgICAgZGVjb2RlZF9pZHN0ciA9M0QgdHJhbnMuc2VjdXJpdHku ZGVjb2RlX2lkKCBpZHN0ciApCisgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nl c3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZHN0ciwgdD0KcmFucy51c2VyICkKKyAgICAg ICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhk YSApCiAgICAgICAgIHJldHVybiBoZGEKPTIwCj0yMAoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNi NzQ3MzljYmI2YTkxYjk5NjUwMWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2Vm MzI3Y2QxMjcxOGZiOSBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weQot LS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weQorKysgYi9saWIv Z2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weQpAQCAtMTIsMTQgKzEyLDEzIEBA Cj0yMAogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRy b2xsZXIKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IFVzZXNWaXN1YWxp emF0aW9uTWl4aW4KLWZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IFVzZXNI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4KIGZyb20gZ2FsYXh5IGltcG9ydCBtYW5hZ2Vy cwo9MjAKIGltcG9ydCBsb2dnaW5nCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVf XyApCj0yMAo9MjAKLWNsYXNzIERhdGFzZXRzQ29udHJvbGxlciggQmFzZUFQSUNvbnRyb2xsZXIs IFVzZXNWaXN1YWxpemF0aW9uTWl4aW4sIFVzZXNIPQppc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25N aXhpbiApOgorY2xhc3MgRGF0YXNldHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNl c1Zpc3VhbGl6YXRpb25NaXhpbiApOgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCAp OgogICAgICAgICBzdXBlciggRGF0YXNldHNDb250cm9sbGVyLCBzZWxmICkuX19pbml0X18oIGFw cCApCkBAIC04NCw3ICs4Myw3IEBACiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm5zIHN0YXRl IG9mIGRhdGFzZXQuCiAgICAgICAgICIiIgotICAgICAgICBtc2cgPTNEIHNlbGYuY2hlY2tfZGF0 YXNldF9zdGF0ZSggdHJhbnMsIGRhdGFzZXQgKQorICAgICAgICBtc2cgPTNEIHNlbGYubWdycy5o ZGFzLmRhdGFfY29udmVyc2lvbl9zdGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkKICAgICAgICAgaWYg bm90IG1zZzoKICAgICAgICAgICAgIG1zZyA9M0QgZGF0YXNldC5jb252ZXJzaW9uX21lc3NhZ2Vz LkRBVEEKPTIwCkBAIC05NSw3ICs5NCw3IEBACiAgICAgICAgIEluaXQtbGlrZSBtZXRob2QgdGhh dCByZXR1cm5zIHN0YXRlIG9mIGRhdGFzZXQncyBjb252ZXJ0ZWQgZGF0YXNldD0Kcy4KICAgICAg ICAgUmV0dXJucyB2YWxpZCBjaHJvbXMgZm9yIHRoYXQgZGF0YXNldCBhcyB3ZWxsLgogICAgICAg ICAiIiIKLSAgICAgICAgbXNnID0zRCBzZWxmLmNoZWNrX2RhdGFzZXRfc3RhdGUoIHRyYW5zLCBk YXRhc2V0ICkKKyAgICAgICAgbXNnID0zRCBzZWxmLm1ncnMuaGRhcy5kYXRhX2NvbnZlcnNpb25f c3RhdHVzKCB0cmFucywgZGF0YXNldCApCiAgICAgICAgIGlmIG1zZzoKICAgICAgICAgICAgIHJl dHVybiBtc2cKPTIwCkBAIC0xNDQsNyArMTQzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBkYXRh c2V0LmNvbnZlcnNpb25fbWVzc2FnZXMuTk9fREFUQQo9MjAKICAgICAgICAgIyBEYXRhc2V0IGNo ZWNrLgotICAgICAgICBtc2cgPTNEIHNlbGYuY2hlY2tfZGF0YXNldF9zdGF0ZSggdHJhbnMsIGRh dGFzZXQgKQorICAgICAgICBtc2cgPTNEIHNlbGYubWdycy5oZGFzLmRhdGFfY29udmVyc2lvbl9z dGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkKICAgICAgICAgaWYgbXNnOgogICAgICAgICAgICAgcmV0 dXJuIG1zZwo9MjAKQEAgLTIzNyw3ICsyMzYsNyBAQAogICAgICAgICBiZSBzbG93IGJlY2F1c2Ug aW5kZXhlcyBuZWVkIHRvIGJlIGNyZWF0ZWQuCiAgICAgICAgICIiIgogICAgICAgICAjIERhdGFz ZXQgY2hlY2suCi0gICAgICAgIG1zZyA9M0Qgc2VsZi5jaGVja19kYXRhc2V0X3N0YXRlKCB0cmFu cywgZGF0YXNldCApCisgICAgICAgIG1zZyA9M0Qgc2VsZi5tZ3JzLmhkYXMuZGF0YV9jb252ZXJz aW9uX3N0YXR1cyggdHJhbnMsIGRhdGFzZXQgKQogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAg ICByZXR1cm4gbXNnCj0yMAoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3MzljYmI2YTkxYjk5 NjUwMWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2QxMjcxOGZiOSBs aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQotLS0gYS9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQorKysgYi9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9leHRlbmRlZF9tZXRhZGF0YS5weQpAQCAtMywx MSArMywxMSBAQAogIiIiCiBpbXBvcnQgbG9nZ2luZwogZnJvbSBnYWxheHkgaW1wb3J0IHdlYgot ZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgIEJhc2VBUElDb250cm9sbGVy LCBVc2VzTGlicmFyeU1peGk9Cm5JdGVtcywgVXNlc0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb25N aXhpbiwgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4sIFVzZXNFeD0KdGVuZGVkTWV0YWRhdGFNaXhp biwgSFRUUE5vdEltcGxlbWVudGVkCitmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGlt cG9ydCAgQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNMaWJyYXJ5TWl4aT0Kbkl0ZW1zLCBVc2VzU3Rv cmVkV29ya2Zsb3dNaXhpbiwgVXNlc0V4dGVuZGVkTWV0YWRhdGFNaXhpbiwgSFRUUE5vdEltcGxl bWVuPQp0ZWQKPTIwCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAot Y2xhc3MgQmFzZUV4dGVuZGVkTWV0YWRhdGFDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwg VXNlc0V4dGVuZGVkTWV0YWQ9CmF0YU1peGluLCBVc2VzTGlicmFyeU1peGluSXRlbXMsIFVzZXNI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIFVzZXNTdD0Kb3JlZFdvcmtmbG93TWl4aW4g KToKK2NsYXNzIEJhc2VFeHRlbmRlZE1ldGFkYXRhQ29udHJvbGxlciggQmFzZUFQSUNvbnRyb2xs ZXIsIFVzZXNFeHRlbmRlZE1ldGFkPQphdGFNaXhpbiwgVXNlc0xpYnJhcnlNaXhpbkl0ZW1zLCBV c2VzU3RvcmVkV29ya2Zsb3dNaXhpbiApOgo9MjAKICAgICBAd2ViLmV4cG9zZV9hcGkKICAgICBk ZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCAqKmt3ZCApOgpAQCAtNjEsOCArNjEsMTUgQEAKIGNsYXNz IEhpc3RvcnlEYXRhc2V0RXh0ZW5kTWV0YWRhdGFDb250cm9sbGVyKEJhc2VFeHRlbmRlZE1ldGFk YXRhQ29udHJvbGxlPQpyKToKICAgICBjb250cm9sbGVyX25hbWUgPTNEICJoaXN0b3J5X2RhdGFz ZXRfZXh0ZW5kZWRfbWV0YWRhdGEiCiAgICAgZXhtZXRhX2l0ZW1faWQgPTNEICJoaXN0b3J5X2Nv bnRlbnRfaWQiCisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBl ciggSGlzdG9yeURhdGFzZXRFeHRlbmRNZXRhZGF0YUNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRf XyggYXA9CnAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBtYW5hZ2Vycy5oZGFzLkhE QU1hbmFnZXIoIGFwcCApCisKICAgICBkZWYgX2dldF9pdGVtX2Zyb21faWQoc2VsZiwgdHJhbnMs IGlkc3RyLCBjaGVja193cml0YWJsZT0zRFRydWUpOgorICAgICAgICBkZWNvZGVkX2lkc3RyID0z RCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkc3RyICkKICAgICAgICAgaWYgY2hlY2tfd3Jp dGFibGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIGlkc3Ry LCAgY2hlY2tfb3duZXJzaGlwPTNEVHJ1ZT0KLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSwgY2hl Y2tfc3RhdGU9M0RUcnVlICkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhkYV9tYW5hZ2VyLm93 bmVkX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZHN0ciwgdHJhPQpucy51c2VyICkKICAgICAgICAg ZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWRzdHIs ICBjaGVja19vd25lcnNoaXA9M0RGYWxzPQplLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSwgY2hl Y2tfc3RhdGU9M0RUcnVlICkKKyAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5h Y2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZHN0PQpyLCB0cmFucy51c2VyICkKKyAg ICAgICAgICAgIHJldHVybiBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggdHJh bnMsIGhkYSApCgpkaWZmIC1yIGEzYTZjNzI5OTNhN2E2M2I3NDczOWNiYjZhOTFiOTk2NTAxZDEx MzcgLXIgMzlmYmYxZDkyNTA3Nzk3ZjEwMTE0NTA9CjgzZWYzMjdjZDEyNzE4ZmI5IGxpYi9nYWxh eHkvd2ViYXBwcy9nYWxheHkvYXBpL2ZvbGRlcl9jb250ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9mb2xkZXJfY29udGVudHMucHkKKysrIGIvbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZm9sZGVyX2NvbnRlbnRzLnB5CkBAIC00LDE4ICs0LDE5IEBACiBm cm9tIGdhbGF4eSBpbXBvcnQgd2ViCiBmcm9tIGdhbGF4eSBpbXBvcnQgdXRpbAogZnJvbSBnYWxh eHkgaW1wb3J0IGV4Y2VwdGlvbnMKK2Zyb20gZ2FsYXh5IGltcG9ydCBtYW5hZ2VycwogZnJvbSBn YWxheHkubWFuYWdlcnMgaW1wb3J0IGZvbGRlcnMKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1 dHVyZV9leHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1 dHVyZV9leHBvc2VfYXBpX2Fub255bW91cyBhcyBleHBvc2VfYXBpX2Fub255bW91cwogZnJvbSBz cWxhbGNoZW15Lm9ybS5leGMgaW1wb3J0IE11bHRpcGxlUmVzdWx0c0ZvdW5kCiBmcm9tIHNxbGFs Y2hlbXkub3JtLmV4YyBpbXBvcnQgTm9SZXN1bHRGb3VuZAotZnJvbSBnYWxheHkud2ViLmJhc2Uu Y29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNMaWJyYXJ5TWl4aW49Ciwg VXNlc0xpYnJhcnlNaXhpbkl0ZW1zLCBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGlu Citmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlQVBJQ29udHJvbGxl ciwgVXNlc0xpYnJhcnlNaXhpbj0KLCBVc2VzTGlicmFyeU1peGluSXRlbXMKPTIwCiBpbXBvcnQg bG9nZ2luZwogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQo9MjAKPTIwCi1j bGFzcyBGb2xkZXJDb250ZW50c0NvbnRyb2xsZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzTGli cmFyeU1peGluLCBVc2VzTD0KaWJyYXJ5TWl4aW5JdGVtcywgVXNlc0hpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb25NaXhpbiApOgorY2xhc3MgRm9sZGVyQ29udGVudHNDb250cm9sbGVyKCBCYXNlQVBJ Q29udHJvbGxlciwgVXNlc0xpYnJhcnlNaXhpbiwgVXNlc0w9CmlicmFyeU1peGluSXRlbXMgKToK ICAgICAiIiIKICAgICBDbGFzcyBjb250cm9scyByZXRyaWV2YWwsIGNyZWF0aW9uIGFuZCB1cGRh dGluZyBvZiBmb2xkZXIgY29udGVudHMuCiAgICAgIiIiCkBAIC0yMyw2ICsyNCw3IEBACiAgICAg ZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAgICAgICAgc3VwZXIoIEZvbGRlckNvbnRlbnRz Q29udHJvbGxlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQogICAgICAgICBzZWxmLmZvbGRlcl9t YW5hZ2VyID0zRCBmb2xkZXJzLkZvbGRlck1hbmFnZXIoKQorICAgICAgICBzZWxmLmhkYV9tYW5h Z2VyID0zRCBtYW5hZ2Vycy5oZGFzLkhEQU1hbmFnZXIoKQo9MjAKICAgICBAZXhwb3NlX2FwaV9h bm9ueW1vdXMKICAgICBkZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCBmb2xkZXJfaWQsICoqa3dkICk6 CkBAIC0yNjUsNyArMjY3LDkgQEAKICAgICAgICAgICAgIGxkZGFfbWVzc2FnZSA9M0QgdXRpbC5z YW5pdGl6ZV9odG1sLnNhbml0aXplX2h0bWwoIGxkZGFfbWVzc2FnPQplLCAndXRmLTgnICkKICAg ICAgICAgcnZhbCA9M0Qge30KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaGRhID0zRCBzZWxm LmdldF9kYXRhc2V0KCB0cmFucywgZnJvbV9oZGFfaWQsIGNoZWNrX293bmVyc2hpcD0KPTNEVHJ1 ZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUsIGNoZWNrX3N0YXRlPTNEVHJ1ZSApCisgICAgICAg ICAgICBkZWNvZGVkX2hkYV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBmcm9tX2hk YV9pZCApCisgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIub3duZWRfYnlfaWQo IHRyYW5zLCBkZWNvZGVkX2hkYV9pZCwgdD0KcmFucy51c2VyICkKKyAgICAgICAgICAgIGhkYSA9 M0Qgc2VsZi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIHRyYW5zLCBoZGEgKQogICAg ICAgICAgICAgZm9sZGVyID0zRCBzZWxmLmdldF9saWJyYXJ5X2ZvbGRlciggdHJhbnMsIGVuY29k ZWRfZm9sZGVyX2lkXzE9CjYsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICkKPTIwCiAgICAgICAg ICAgICBsaWJyYXJ5ID0zRCBmb2xkZXIucGFyZW50X2xpYnJhcnkKCmRpZmYgLXIgYTNhNmM3Mjk5 M2E3YTYzYjc0NzM5Y2JiNmE5MWI5OTY1MDFkMTEzNyAtciAzOWZiZjFkOTI1MDc3OTdmMTAxMTQ1 MD0KODNlZjMyN2NkMTI3MThmYjkgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9y eV9jb250ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3J5 X2NvbnRlbnRzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3Rvcnlf Y29udGVudHMucHkKQEAgLTEwLDcgKzEwLDYgQEAKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgdXJs X2Zvcgo9MjAKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElD b250cm9sbGVyCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9s bGVyIGltcG9ydCBVc2VzTGlicmFyeU1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9s bGVyIGltcG9ydCBVc2VzTGlicmFyeU1peGluSXRlbXMKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNv bnRyb2xsZXIgaW1wb3J0IFVzZXNUYWdzTWl4aW4KQEAgLTI2LDggKzI1LDcgQEAKIGxvZyA9M0Qg bG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCj0yMAotY2xhc3MgSGlzdG9yeUNvbnRl bnRzQ29udHJvbGxlciggQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5RGF0YXNldEFzc289 CmNpYXRpb25NaXhpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXNMaWJy YXJ5TWl4aW4sIFVzZXNMaWJyYXJ5TWl4aW5JdGVtcywgPQpVc2VzVGFnc01peGluICk6CitjbGFz cyBIaXN0b3J5Q29udGVudHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0xpYnJh cnlNaXhpbiwgVXNlcz0KTGlicmFyeU1peGluSXRlbXMsIFVzZXNUYWdzTWl4aW4gKToKPTIwCiAg ICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAgICAgICAgc3VwZXIoIEhpc3RvcnlDb250 ZW50c0NvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKQEAgLTM2Miw3ICszNjAsNyBA QAogICAgICAgICAgICAgc2VsZi5oZGFfZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCB0cmFucywg aGRhLCBwYXlsb2FkICkKICAgICAgICAgICAgICNUT0RPOiB0aGlzIHNob3VsZCBiZSBhbiBlZmZl Y3Qgb2YgZGVsZXRpbmcgdGhlIGhkYQogICAgICAgICAgICAgaWYgcGF5bG9hZC5nZXQoICdkZWxl dGVkJywgRmFsc2UgKToKLSAgICAgICAgICAgICAgICBzZWxmLnN0b3BfaGRhX2NyZWF0aW5nX2pv YiggaGRhICkKKyAgICAgICAgICAgICAgICBzZWxmLm1ncnMuaGRhcy5zdG9wX2NyZWF0aW5nX2pv YiggaGRhICkKICAgICAgICAgICAgIHJldHVybiBzZWxmLmhkYV9zZXJpYWxpemVyLnNlcmlhbGl6 ZV90b192aWV3KCB0cmFucywgaGRhLAogICAgICAgICAgICAgICAgICoqc2VsZi5fcGFyc2Vfc2Vy aWFsaXphdGlvbl9wYXJhbXMoIGt3ZCwgJ2RldGFpbGVkJyApICkKPTIwCgpkaWZmIC1yIGEzYTZj NzI5OTNhN2E2M2I3NDczOWNiYjZhOTFiOTk2NTAxZDExMzcgLXIgMzlmYmYxZDkyNTA3Nzk3ZjEw MTE0NTA9CjgzZWYzMjdjZDEyNzE4ZmI5IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pv YnMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvam9icy5weQorKysgYi9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2JzLnB5CkBAIC05LDcgKzksNiBAQAogaW1w b3J0IGpzb24KIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1dHVyZV9leHBvc2VfYXBpIGFzIGV4 cG9zZV9hcGkKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElD b250cm9sbGVyCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9s bGVyIGltcG9ydCBVc2VzTGlicmFyeU1peGluSXRlbXMKIGZyb20gZ2FsYXh5IGltcG9ydCBleGNl cHRpb25zCiBmcm9tIGdhbGF4eSBpbXBvcnQgdXRpbApAQCAtMTksNyArMTgsMTEgQEAKIGxvZyA9 M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKPTIwCj0yMAotY2xhc3MgSm9iQ29udHJv bGxlciggQmFzZUFQSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4 aW49CiwgVXNlc0xpYnJhcnlNaXhpbkl0ZW1zICk6CitjbGFzcyBKb2JDb250cm9sbGVyKCBCYXNl QVBJQ29udHJvbGxlciwgVXNlc0xpYnJhcnlNaXhpbkl0ZW1zICk6CisKKyAgICBkZWYgX19pbml0 X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBlciggSm9iQ29udHJvbGxlciwgc2VsZiApLl9f aW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBtYW5hZ2Vycy5oZGFz LkhEQU1hbmFnZXIoKQo9MjAKICAgICBAZXhwb3NlX2FwaQogICAgIGRlZiBpbmRleCggc2VsZiwg dHJhbnMsICoqa3dkICk6CkBAIC0yNTYsNyArMjU5LDggQEAKICAgICAgICAgICAgIGlmIGlzaW5z dGFuY2UoIHYsIGRpY3QgKToKICAgICAgICAgICAgICAgICBpZiAnaWQnIGluIHY6CiAgICAgICAg ICAgICAgICAgICAgIGlmICdzcmMnIG5vdCBpbiB2IG9yIHZbICdzcmMnIF0gPTNEPTNEICdoZGEn OgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNldCgg dHJhbnMsIHZbJ2lkJ10sIGNoZWM9Cmtfb3duZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2li bGU9M0RUcnVlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhkYV9pZCA9M0QgdHJhbnMuc2Vj dXJpdHkuZGVjb2RlX2lkKCB2WydpZCddICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFz ZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhPQpucywgaGRhX2lk LCB0cmFucy51c2VyICkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuZ2V0X2xpYnJhcnlfZGF0YXNldF9kYXRhc2V0X2Fz c29jPQppYXRpb24oIHRyYW5zLCB2WydpZCddICkKICAgICAgICAgICAgICAgICAgICAgaWYgZGF0 YXNldCBpcyBOb25lOgoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3MzljYmI2YTkxYjk5NjUw MWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2QxMjcxOGZiOSBsaWIv Z2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9saWJyYXJ5X2NvbnRlbnRzLnB5Ci0tLSBhL2xpYi9n YWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2xpYnJhcnlfY29udGVudHMucHkKKysrIGIvbGliL2dh bGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvbGlicmFyeV9jb250ZW50cy5weQpAQCAtNiw3ICs2LDYg QEAKIGZyb20gZ2FsYXh5IGltcG9ydCBleGNlcHRpb25zCiBmcm9tIGdhbGF4eS53ZWIgaW1wb3J0 IF9mdXR1cmVfZXhwb3NlX2FwaSBhcyBleHBvc2VfYXBpCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5j b250cm9sbGVyIGltcG9ydCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0xpYnJhcnlNaXhpbj0KLCBV c2VzTGlicmFyeU1peGluSXRlbXMKLWZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1w b3J0IFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4KIGZyb20gZ2FsYXh5LndlYi5i YXNlLmNvbnRyb2xsZXIgaW1wb3J0IEhUVFBCYWRSZXF1ZXN0LCB1cmxfZm9yCiBmcm9tIGdhbGF4 eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsIGltcG9ydCBhcGlfcGF5bG9hZF90b19jcmVhdGVf cGFyYW1zLD0KIGRpY3RpZnlfZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlCiBmcm9tIGdhbGF4 eS5tb2RlbCBpbXBvcnQgRXh0ZW5kZWRNZXRhZGF0YSwgRXh0ZW5kZWRNZXRhZGF0YUluZGV4CkBA IC0xNyw3ICsxNiwxMSBAQAogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQo9 MjAKPTIwCi1jbGFzcyBMaWJyYXJ5Q29udGVudHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxl ciwgVXNlc0xpYnJhcnlNaXhpbiwgVXNlcz0KTGlicmFyeU1peGluSXRlbXMsIFVzZXNIaXN0b3J5 RGF0YXNldEFzc29jaWF0aW9uTWl4aW4gKToKK2NsYXNzIExpYnJhcnlDb250ZW50c0NvbnRyb2xs ZXIoIEJhc2VBUElDb250cm9sbGVyLCBVc2VzTGlicmFyeU1peGluLCBVc2VzPQpMaWJyYXJ5TWl4 aW5JdGVtcyApOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgc3Vw ZXIoIEpvYkNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKKyAgICAgICAgc2VsZi5o ZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2VyKCkKPTIwCiAgICAgQGV4cG9z ZV9hcGkKICAgICBkZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCBsaWJyYXJ5X2lkLCAqKmt3ZCApOgpA QCAtMjg4LDcgKzI5MSw5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgY2hlY2sgcGVy bWlzc2lvbnMgb24gKGFsbCB0aHJlZT8pIHJlc291cmNlczogaGRhLCBsaWJyYXJ5LCBmPQpvbGRl cgogICAgICAgICAgICAgI1RPRE86IGRvIHdlIHJlYWxseSBuZWVkIHRoZSBsaWJyYXJ5Pz8KLSAg ICAgICAgICAgIGhkYSA9M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIGZyb21faGRhX2lkLCBj aGVja19vd25lcnNoaXA9Cj0zRFRydWUsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlLCBjaGVja19z dGF0ZT0zRFRydWUgKQorICAgICAgICAgICAgZnJvbV9oZGFfaWQgPTNEIHRyYW5zLnNlY3VyaXR5 LmRlY29kZV9pZCggZnJvbV9oZGFfaWQgKQorICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9t YW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgZnJvbV9oZGFfaWQsIHRyYW49CnMudXNlciApCisg ICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0 cmFucywgaGRhICkKICAgICAgICAgICAgICMgbGlicmFyeSA9M0Qgc2VsZi5nZXRfbGlicmFyeSgg dHJhbnMsIGxpYnJhcnlfaWQsIGNoZWNrX2FjY2VzPQpzaWJsZT0zRFRydWUgKQogICAgICAgICAg ICAgZm9sZGVyID0zRCBzZWxmLmdldF9saWJyYXJ5X2ZvbGRlciggdHJhbnMsIGZvbGRlcl9pZCwg Y2hlY2tfYWM9CmNlc3NpYmxlPTNEVHJ1ZSApCj0yMAoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNi NzQ3MzljYmI2YTkxYjk5NjUwMWQxMTM3IC1yIDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2Vm MzI3Y2QxMjcxOGZiOSBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS90b29scy5weQotLS0g YS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS90b29scy5weQorKysgYi9saWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS90b29scy5weQpAQCAtMzIsNyArMzIsOCBAQAogICAgIGRlZiBf X2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVyKCBUb29sc0NvbnRyb2xsZXIsIHNl bGYgKS5fX2luaXRfXyggYXBwICkKICAgICAgICAgc2VsZi5tZ3JzID0zRCB1dGlsLmJ1bmNoLkJ1 bmNoKAotICAgICAgICAgICAgaGlzdG9yaWVzPTNEbWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlN YW5hZ2VyKCBhcHAgKQorICAgICAgICAgICAgaGlzdG9yaWVzPTNEbWFuYWdlcnMuaGlzdG9yaWVz Lkhpc3RvcnlNYW5hZ2VyKCBhcHAgKSwKKyAgICAgICAgICAgIGhkYXM9M0RtYW5hZ2Vycy5oZGFz LkhEQU1hbmFnZXIoIGFwcCApCiAgICAgICAgICkKPTIwCiAgICAgQHdlYi5leHBvc2VfYXBpCkBA IC0yODIsMTcgKzI4MywxOCBAQAogICAgICAgICAgICAgcnVuX29uX3JlZ2lvbnMgPTNEIFRydWUK PTIwCiAgICAgICAgICMgRGF0YXNldCBjaGVjay4KLSAgICAgICAgb3JpZ2luYWxfZGF0YXNldCA9 M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIHBheWxvYWRbICd0YXJnZXRfZGF0PQphc2V0X2lk JyBdLCBjaGVja19vd25lcnNoaXA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQot ICAgICAgICBtc2cgPTNEIHNlbGYuY2hlY2tfZGF0YXNldF9zdGF0ZSggdHJhbnMsIG9yaWdpbmFs X2RhdGFzZXQgKQorICAgICAgICBkZWNvZGVkX2RhdGFzZXRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5 LmRlY29kZV9pZCggcGF5bG9hZC5nZXQoICd0YXI9CmdldF9kYXRhc2V0X2lkJyApICkKKyAgICAg ICAgb3JpZ2luYWxfZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCgg dHJhbnMsIGRlY29kPQplZF9kYXRhc2V0X2lkLCB1c2VyPTNEdHJhbnMudXNlciApCisgICAgICAg IG9yaWdpbmFsX2RhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5n KCB0cmFucywgbz0KcmlnaW5hbF9kYXRhc2V0ICkKKyAgICAgICAgbXNnID0zRCBzZWxmLm1ncnMu aGRhcy5kYXRhX2NvbnZlcnNpb25fc3RhdHVzKCB0cmFucywgb3JpZ2luYWxfZGF0PQphc2V0ICkK ICAgICAgICAgaWYgbXNnOgogICAgICAgICAgICAgcmV0dXJuIG1zZwo9MjAKLSAgICAgICAgIwog ICAgICAgICAjIFNldCB0b29sIHBhcmFtZXRlcnMtLWV4Y2VwdCBub24taGlkZGVuIGRhdGFzZXQg cGFyYW1ldGVycy0tdXNpbmc9CiBjb21iaW5hdGlvbiBvZgogICAgICAgICAjIGpvYidzIHByZXZp b3VzIHBhcmFtZXRlcnMgYW5kIGluY29taW5nIHBhcmFtZXRlcnMuIEluY29taW5nIHBhcmE9Cm1l dGVycwogICAgICAgICAjIGhhdmUgcHJpb3JpdHkuCiAgICAgICAgICMKLSAgICAgICAgb3JpZ2lu YWxfam9iID0zRCBzZWxmLmdldF9oZGFfam9iKCBvcmlnaW5hbF9kYXRhc2V0ICkKKyAgICAgICAg b3JpZ2luYWxfam9iID0zRCBzZWxmLm1ncnMuaGRhcy5jcmVhdGluZ19qb2IoIG9yaWdpbmFsX2Rh dGFzZXQgKQogICAgICAgICB0b29sID0zRCB0cmFucy5hcHAudG9vbGJveC5nZXRfdG9vbCggb3Jp Z2luYWxfam9iLnRvb2xfaWQgKQogICAgICAgICBpZiBub3QgdG9vbDoKICAgICAgICAgICAgIHJl dHVybiB0cmFucy5hcHAubW9kZWwuRGF0YXNldC5jb252ZXJzaW9uX21lc3NhZ2VzLk5PX1RPT0wK CmRpZmYgLXIgYTNhNmM3Mjk5M2E3YTYzYjc0NzM5Y2JiNmE5MWI5OTY1MDFkMTEzNyAtciAzOWZi ZjFkOTI1MDc3OTdmMTAxMTQ1MD0KODNlZjMyN2NkMTI3MThmYjkgbGliL2dhbGF4eS93ZWJhcHBz L2dhbGF4eS9jb250cm9sbGVycy9kYXRhc2V0LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvY29udHJvbGxlcnMvZGF0YXNldC5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2NvbnRyb2xsZXJzL2RhdGFzZXQucHkKQEAgLTksNyArOSw3IEBACiBmcm9tIGdhbGF4eS51 dGlsIGltcG9ydCBpbmZsZWN0b3IsIHNtYXJ0X3N0cgogZnJvbSBnYWxheHkudXRpbC5zYW5pdGl6 ZV9odG1sIGltcG9ydCBzYW5pdGl6ZV9odG1sCiBmcm9tIGdhbGF4eS51dGlsLmpzb24gaW1wb3J0 IGxvYWRzCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250 cm9sbGVyLCBFUlJPUiwgU1VDQ0VTUywgdT0KcmxfZm9yLCBVc2VzSGlzdG9yeURhdGFzZXRBc3Nv Y2lhdGlvbk1peGluLCBVc2VzRXh0ZW5kZWRNZXRhZGF0YU1peGluCitmcm9tIGdhbGF4eS53ZWIu YmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9sbGVyLCBFUlJPUiwgU1VDQ0VTUywg dT0KcmxfZm9yLCBVc2VzRXh0ZW5kZWRNZXRhZGF0YU1peGluCiBmcm9tIGdhbGF4eS53ZWIuZnJh bWV3b3JrLmhlbHBlcnMgaW1wb3J0IGdyaWRzLCBpZmYsIHRpbWVfYWdvLCB0b191bmljb2RlLD0K IGVzY2FwZQogZnJvbSBnYWxheHkudG9vbHMuZXJyb3JzIGltcG9ydCBFbWFpbEVycm9yUmVwb3J0 ZXIKPTIwCkBAIC04NiwxNCArODYsMTUgQEAKICAgICAgICAgICAgICAgICAuZmlsdGVyKCBtb2Rl bC5IaXN0b3J5LmRlbGV0ZWQ9M0Q9M0RGYWxzZSApIFwKICAgICAgICAgICAgICAgICAuZmlsdGVy KCBzZWxmLm1vZGVsX2NsYXNzLnZpc2libGU9M0Q9M0RUcnVlICkKPTIwCi1jbGFzcyBEYXRhc2V0 SW50ZXJmYWNlKCBCYXNlVUlDb250cm9sbGVyLCBVc2VzQW5ub3RhdGlvbnMsIFVzZXNIaXN0b3J5 RGF0YT0Kc2V0QXNzb2NpYXRpb25NaXhpbiwgVXNlc0l0ZW1SYXRpbmdzLCBVc2VzRXh0ZW5kZWRN ZXRhZGF0YU1peGluICk6CitjbGFzcyBEYXRhc2V0SW50ZXJmYWNlKCBCYXNlVUlDb250cm9sbGVy LCBVc2VzQW5ub3RhdGlvbnMsIFVzZXNJdGVtUmF0aW5ncz0KLCBVc2VzRXh0ZW5kZWRNZXRhZGF0 YU1peGluICk6Cj0yMAogICAgIHN0b3JlZF9saXN0X2dyaWQgPTNEIEhpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb25MaXN0R3JpZCgpCj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAg ICAgICAgIHN1cGVyKCBEYXRhc2V0SW50ZXJmYWNlLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAg ICAgICAgIHNlbGYubWdycyA9M0QgdXRpbC5idW5jaC5CdW5jaCgKLSAgICAgICAgICAgIGhpc3Rv cmllcz0zRG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggYXBwICkKKyAgICAgICAg ICAgIGhpc3Rvcmllcz0zRG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggYXBwICks CisgICAgICAgICAgICBoZGFzPTNEbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2VyKCBhcHAgKSwKICAg ICAgICAgKQo9MjAKICAgICBkZWYgX2dldF9qb2JfZm9yX2RhdGFzZXQoIHNlbGYsIHRyYW5zLCBk YXRhc2V0X2lkICk6CkBAIC01MjksMTQgKzUzMCwxOCBAQAogICAgIEB3ZWIucmVxdWlyZV9sb2dp biggInVzZSBHYWxheHkgZGF0YXNldHMiICkKICAgICBkZWYgZ2V0X25hbWVfYW5kX2xpbmtfYXN5 bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5vbmUgKToKICAgICAgICAgIiIiIFJldHVybnMgZGF0YXNl dCdzIG5hbWUgYW5kIGxpbmsuICIiIgotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmdldF9kYXRh c2V0KCB0cmFucywgaWQsIEZhbHNlLCBUcnVlICkKKyAgICAgICAgZGVjb2RlZF9pZCA9M0QgdHJh bnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdy cy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVzZXIg KQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91cGxvYWRpbmco IGRhdGFzZXQgKQogICAgICAgICByZXR1cm5fZGljdCA9M0QgeyAibmFtZSIgOiBkYXRhc2V0Lm5h bWUsICJsaW5rIiA6IHVybF9mb3IoIGNvbnRyb2w9Cmxlcj0zRCdkYXRhc2V0JywgYWN0aW9uPTNE ImRpc3BsYXlfYnlfdXNlcm5hbWVfYW5kX3NsdWciLCB1c2VybmFtZT0zRGRhdGFzZT0KdC5oaXN0 b3J5LnVzZXIudXNlcm5hbWUsIHNsdWc9M0R0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGRhdGFz ZXQuaWQgKSApIH0KICAgICAgICAgcmV0dXJuIHJldHVybl9kaWN0Cj0yMAogICAgIEB3ZWIuZXhw b3NlCiAgICAgZGVmIGdldF9lbWJlZF9odG1sX2FzeW5jKCBzZWxmLCB0cmFucywgaWQgKToKICAg ICAgICAgIiIiIFJldHVybnMgSFRNTCBmb3IgZW1iZWRkaW5nIGEgZGF0YXNldCBpbiBhIHBhZ2Uu ICIiIgotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWQsIEZh bHNlLCBUcnVlICkKKyAgICAgICAgZGVjb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2Rl X2lkKCBpZCApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVf YnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVzZXIgKQorICAgICAgICBkYXRhc2V0 ID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQogICAgICAg ICBpZiBkYXRhc2V0OgogICAgICAgICAgICAgcmV0dXJuICJFbWJlZGRlZCBEYXRhc2V0ICclcyci ICUgZGF0YXNldC5uYW1lCj0yMApAQCAtNTUyLDcgKzU1Nyw5IEBACiAgICAgZGVmIHJhdGVfYXN5 bmMoIHNlbGYsIHRyYW5zLCBpZCwgcmF0aW5nICk6CiAgICAgICAgICIiIiBSYXRlIGEgZGF0YXNl dCBhc3luY2hyb25vdXNseSBhbmQgcmV0dXJuIHVwZGF0ZWQgY29tbXVuaXR5IGRhdD0KYS4gIiIi Cj0yMAotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgaWQsIGNo ZWNrX293bmVyc2hpcD0zREZhbHNlLCA9CmNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICkKKyAgICAg ICAgZGVjb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCisgICAgICAg IGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNv ZGVkX2lkLCB0cj0KYW5zLnVzZXIgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRh cy5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQogICAgICAgICBpZiBub3QgZGF0YXNldDoK ICAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vycm9yX21lc3NhZ2UoICJUaGUgc3BlY2lm aWVkIGRhdGFzZXQgZG9lcyBuPQpvdCBleGlzdC4iICkKPTIwCkBAIC01NjQsMTMgKzU3MSwxNiBA QAogICAgIEB3ZWIuZXhwb3NlCiAgICAgZGVmIGRpc3BsYXlfYnlfdXNlcm5hbWVfYW5kX3NsdWco IHNlbGYsIHRyYW5zLCB1c2VybmFtZSwgc2x1ZywgZmlsZW5hbT0KZT0zRE5vbmUsIHByZXZpZXc9 M0RUcnVlICk6CiAgICAgICAgICIiIiBEaXNwbGF5IGRhdGFzZXQgYnkgdXNlcm5hbWUgYW5kIHNs dWc7IGJlY2F1c2UgZGF0YXNldHMgZG8gbm90ID0KeWV0IGhhdmUgc2x1Z3MsIHRoZSBzbHVnIGlz IHRoZSBkYXRhc2V0J3MgaWQuICIiIgotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmdldF9kYXRh c2V0KCB0cmFucywgc2x1ZywgRmFsc2UsIFRydWUgKQorICAgICAgICBpZCA9M0Qgc2x1ZworICAg ICAgICBkZWNvZGVkX2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAgICAg ICAgZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRl Y29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5o ZGFzLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCiAgICAgICAgIGlmIGRhdGFzZXQ6CiAg ICAgICAgICAgICAjIEZpbGVuYW1lIHVzZWQgZm9yIGNvbXBvc2l0ZSB0eXBlcy4KICAgICAgICAg ICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRpc3BsYXkoIHRy YW5zLCBkYXRhc2V0X2lkPTNEc2x1ZywgZmlsZW5hbWU9M0Q9CmZpbGVuYW1lKQo9MjAKLSAgICAg ICAgICAgIHRydW5jYXRlZCwgZGF0YXNldF9kYXRhID0zRCBzZWxmLmdldF9kYXRhKCBkYXRhc2V0 LCBwcmV2aWV3ICkKKyAgICAgICAgICAgIHRydW5jYXRlZCwgZGF0YXNldF9kYXRhID0zRCBzZWxm Lm1ncnMuaGRhcy50ZXh0X2RhdGEoIGRhdGFzZXQsPQogcHJldmlldyApCiAgICAgICAgICAgICBk YXRhc2V0LmFubm90YXRpb24gPTNEIHNlbGYuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5z LnNhXz0Kc2Vzc2lvbiwgZGF0YXNldC5oaXN0b3J5LnVzZXIsIGRhdGFzZXQgKQo9MjAKICAgICAg ICAgICAgICMgSWYgZGF0YXNldCBpcyBjaHVua2FibGUsIGdldCBmaXJzdCBjaHVuay4KQEAgLTYw NSwxNyArNjE1LDIyIEBACiAgICAgZGVmIGdldF9pdGVtX2NvbnRlbnRfYXN5bmMoIHNlbGYsIHRy YW5zLCBpZCApOgogICAgICAgICAiIiIgUmV0dXJucyBpdGVtIGNvbnRlbnQgaW4gSFRNTCBmb3Jt YXQuICIiIgo9MjAKLSAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMs IGlkLCBGYWxzZSwgVHJ1ZSApCisgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5 LmRlY29kZV9pZCggaWQgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nl c3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51c2VyICkKKyAgICAgICAg ZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0ICkK ICAgICAgICAgaWYgZGF0YXNldCBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2Ugd2ViLmh0dHBl eGNlcHRpb25zLkhUVFBOb3RGb3VuZCgpCi0gICAgICAgIHRydW5jYXRlZCwgZGF0YXNldF9kYXRh ID0zRCBzZWxmLmdldF9kYXRhKCBkYXRhc2V0LCBwcmV2aWV3PTNEVHJ1ZT0KICkKKyAgICAgICAg dHJ1bmNhdGVkLCBkYXRhc2V0X2RhdGEgPTNEIHNlbGYubWdycy5oZGFzLnRleHRfZGF0YSggZGF0 YXNldCwgcHJlPQp2aWV3PTNEVHJ1ZSApCiAgICAgICAgICMgR2V0IGFubm90YXRpb24uCiAgICAg ICAgIGRhdGFzZXQuYW5ub3RhdGlvbiA9M0Qgc2VsZi5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0cigg dHJhbnMuc2Ffc2Vzcz0KaW9uLCB0cmFucy51c2VyLCBkYXRhc2V0ICkKICAgICAgICAgcmV0dXJu IHRyYW5zLnN0cmVhbV90ZW1wbGF0ZV9tYWtvKCAiL2RhdGFzZXQvaXRlbV9jb250ZW50Lm1ha28i LCBpPQp0ZW09M0RkYXRhc2V0LCBpdGVtX2RhdGE9M0RkYXRhc2V0X2RhdGEsIHRydW5jYXRlZD0z RHRydW5jYXRlZCApCj0yMAogICAgIEB3ZWIuZXhwb3NlCiAgICAgZGVmIGFubm90YXRlX2FzeW5j KCBzZWxmLCB0cmFucywgaWQsIG5ld19hbm5vdGF0aW9uPTNETm9uZSwgKiprd2FyZ3MgKToKLSAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIGlkLCBGYWxzZSwgVHJ1 ZSApCisgICAgICAgICNUT0RPOj8/IHdoeSBpcyB0aGlzIGFuIGFjY2VzcyBjaGVjayBvbmx5Pwor ICAgICAgICBkZWNvZGVkX2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMs IGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdy cy5oZGFzLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCiAgICAgICAgIGlmIG5vdCBkYXRh c2V0OgogICAgICAgICAgICAgd2ViLmh0dHBleGNlcHRpb25zLkhUVFBOb3RGb3VuZCgpCiAgICAg ICAgIGlmIGRhdGFzZXQgYW5kIG5ld19hbm5vdGF0aW9uOgpAQCAtNjI3LDcgKzY0Miw5IEBACj0y MAogICAgIEB3ZWIuZXhwb3NlCiAgICAgZGVmIGdldF9hbm5vdGF0aW9uX2FzeW5jKCBzZWxmLCB0 cmFucywgaWQgKToKLSAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMs IGlkLCBGYWxzZSwgVHJ1ZSApCisgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5 LmRlY29kZV9pZCggaWQgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nl c3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51c2VyICkKKyAgICAgICAg ZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0ICkK ICAgICAgICAgaWYgbm90IGRhdGFzZXQ6CiAgICAgICAgICAgICB3ZWIuaHR0cGV4Y2VwdGlvbnMu SFRUUE5vdEZvdW5kKCkKICAgICAgICAgYW5ub3RhdGlvbiA9M0Qgc2VsZi5nZXRfaXRlbV9hbm5v dGF0aW9uX3N0ciggdHJhbnMuc2Ffc2Vzc2lvbiwgdHJhPQpucy51c2VyLCBkYXRhc2V0ICkKQEAg LTc3Niw3ICs3OTMsNyBAQAogICAgICAgICAgICAgaGRhLm1hcmtfZGVsZXRlZCgpCiAgICAgICAg ICAgICBoZGEuY2xlYXJfYXNzb2NpYXRlZF9maWxlcygpCiAgICAgICAgICAgICB0cmFucy5sb2df ZXZlbnQoICJEYXRhc2V0IGlkICVzIG1hcmtlZCBhcyBkZWxldGVkIiAlIHN0cihpZCkgKQotICAg ICAgICAgICAgc2VsZi5zdG9wX2hkYV9jcmVhdGluZ19qb2IoIGhkYSApCisgICAgICAgICAgICBz ZWxmLm1ncnMuaGRhcy5zdG9wX2NyZWF0aW5nX2pvYiggaGRhICkKICAgICAgICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uZmx1c2goKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAg ICAgICAgbXNnID0zRCAnSERBIGRlbGV0aW9uIGZhaWxlZCAoZW5jb2RlZDogJXMsIGRlY29kZWQ6 ICVzKScgJSAoIGQ9CmF0YXNldF9pZCwgaWQgKQpAQCAtMTEwMiw3ICsxMTE5LDEwIEBACiAgICAg ICAgICAgICAgICAgaWYgdXNlciAhPTNEIGhpc3RvcnkudXNlcjoKICAgICAgICAgICAgICAgICAg ICAgZXJyb3JfbXNnID0zRCBlcnJvcl9tc2cgKyAiWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24g PQp0byBhZGQgZGF0YXNldHMgdG8gJWkgcmVxdWVzdGVkIGhpc3Rvcmllcy4gICIgJSAoIGxlbigg dGFyZ2V0X2hpc3RvcmllcyApICkKICAgICAgICAgICAgIGZvciBkYXRhc2V0X2lkIGluIGRhdGFz ZXRfaWRzOgotICAgICAgICAgICAgICAgIGRhdGEgPTNEIHNlbGYuZ2V0X2RhdGFzZXQoIHRyYW5z LCBkYXRhc2V0X2lkLCBGYWxzZSwgVHJ1ZSApCisgICAgICAgICAgICAgICAgZGVjb2RlZF9pZCA9 M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkKKyAgICAgICAgICAgICAg ICBkYXRhID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2Rl ZF9pPQpkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgICAgICBkYXRhID0zRCBzZWxmLm1ncnMu aGRhcy5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGEgKQorCiAgICAgICAgICAgICAgICAgaWYgZGF0 YSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPTNEIGVycm9yX21zZyAr ICJZb3UgdHJpZWQgdG8gY29weSBhIGRhdGFzZXQ9CiB0aGF0IGRvZXMgbm90IGV4aXN0IG9yIHRo YXQgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0by4gICIKICAgICAgICAgICAgICAgICAgICAgaW52 YWxpZF9kYXRhc2V0cyArPTNEIDEKCmRpZmYgLXIgYTNhNmM3Mjk5M2E3YTYzYjc0NzM5Y2JiNmE5 MWI5OTY1MDFkMTEzNyAtciAzOWZiZjFkOTI1MDc3OTdmMTAxMTQ1MD0KODNlZjMyN2NkMTI3MThm YjkgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9oaXN0b3J5LnB5Ci0tLSBh L2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weQorKysgYi9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2hpc3RvcnkucHkKQEAgLTE4LDcg KzE4LDYgQEAKPTIwCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNl VUlDb250cm9sbGVyCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBTaGFy YWJsZU1peGluCi1mcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBVc2VzSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250cm9s bGVyIGltcG9ydCBFeHBvcnRzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS53ZWIuYmFzZS5jb250 cm9sbGVyIGltcG9ydCBJbXBvcnRzSGlzdG9yeU1peGluCiBmcm9tIGdhbGF4eS5tb2RlbC5pdGVt X2F0dHJzIGltcG9ydCBVc2VzQW5ub3RhdGlvbnMKQEAgLTIxMSw4ICsyMTAsNyBAQAogICAgICAg ICByZXR1cm4gcXVlcnkuZmlsdGVyKCBzZWxmLm1vZGVsX2NsYXNzLnB1Ymxpc2hlZCA9M0Q9M0Qg VHJ1ZSApLmZpbHQ9CmVyKCBzZWxmLm1vZGVsX2NsYXNzLnNsdWcgIT0zRCBOb25lICkuZmlsdGVy KCBzZWxmLm1vZGVsX2NsYXNzLmRlbGV0ZWQgPTNEPQo9M0QgRmFsc2UgKQo9MjAKIGNsYXNzIEhp c3RvcnlDb250cm9sbGVyKCBCYXNlVUlDb250cm9sbGVyLCBTaGFyYWJsZU1peGluLCBVc2VzQW5u b3RhdGlvbnMsPQogVXNlc0l0ZW1SYXRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgIFVz ZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uTWl4aW4sIEV4cG9ydHNIaXN0b3I9CnlNaXhpbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICBJbXBvcnRzSGlzdG9yeU1peGluICk6CisgICAgICAg ICAgICAgICAgICAgICAgICAgRXhwb3J0c0hpc3RvcnlNaXhpbiwgSW1wb3J0c0hpc3RvcnlNaXhp biApOgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlcigg SGlzdG9yeUNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKCmRpZmYgLXIgYTNhNmM3 Mjk5M2E3YTYzYjc0NzM5Y2JiNmE5MWI5OTY1MDFkMTEzNyAtciAzOWZiZjFkOTI1MDc3OTdmMTAx MTQ1MD0KODNlZjMyN2NkMTI3MThmYjkgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9s bGVycy9wYWdlLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMv cGFnZS5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3BhZ2Uu cHkKQEAgLTI5MCw3ICsyOTAsOCBAQAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAg ICAgICAgIHN1cGVyKCBQYWdlQ29udHJvbGxlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQogICAg ICAgICBzZWxmLm1ncnMgPTNEIHV0aWwuYnVuY2guQnVuY2goCi0gICAgICAgICAgICBoaXN0b3Jp ZXM9M0RtYW5hZ2Vycy5oaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCisgICAgICAgICAg ICBoaXN0b3JpZXM9M0RtYW5hZ2Vycy5oaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApLAor ICAgICAgICAgICAgaGRhcz0zRG1hbmFnZXJzLmhkYXMuSERBTWFuYWdlciggYXBwICksCiAgICAg ICAgICkKPTIwCiAgICAgQHdlYi5leHBvc2UKQEAgLTc3OCwxMCArNzc5LDEzIEBACiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5fZ2V0X2VtYmVkZGVkX2hpc3RvcnlfaHRtbCggdHJhbnMsIGl0ZW1f aWQgKQo9MjAKICAgICAgICAgZWxpZiBpdGVtX2NsYXNzID0zRD0zRCBtb2RlbC5IaXN0b3J5RGF0 YXNldEFzc29jaWF0aW9uOgotICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNl dCggdHJhbnMsIGl0ZW1faWQsIEZhbHNlLCBUcnVlICkKKyAgICAgICAgICAgIGRlY29kZWRfaWQg PTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggaXRlbV9pZCApCisgICAgICAgICAgICBkYXRh c2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9p ZD0KLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFz LmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCisKICAgICAgICAgICAgIGRhdGFzZXQuYW5u b3RhdGlvbiA9M0Qgc2VsZi5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMuc2FfPQpzZXNz aW9uLCBkYXRhc2V0Lmhpc3RvcnkudXNlciwgZGF0YXNldCApCiAgICAgICAgICAgICBpZiBkYXRh c2V0OgotICAgICAgICAgICAgICAgIGRhdGEgPTNEIHNlbGYuZ2V0X2RhdGEoIGRhdGFzZXQgKQor ICAgICAgICAgICAgICAgIGRhdGEgPTNEIHNlbGYubWdycy5oZGFzLnRleHRfZGF0YSggZGF0YXNl dCApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zLmZpbGxfdGVtcGxhdGUoICJkYXRhc2V0 L2VtYmVkLm1ha28iLCBpdGVtPTNEZD0KYXRhc2V0LCBpdGVtX2RhdGE9M0RkYXRhICkKPTIwCiAg ICAgICAgIGVsaWYgaXRlbV9jbGFzcyA9M0Q9M0QgbW9kZWwuU3RvcmVkV29ya2Zsb3c6CgpkaWZm IC1yIGEzYTZjNzI5OTNhN2E2M2I3NDczOWNiYjZhOTFiOTk2NTAxZDExMzcgLXIgMzlmYmYxZDky NTA3Nzk3ZjEwMTE0NTA9CjgzZWYzMjdjZDEyNzE4ZmI5IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxh eHkvY29udHJvbGxlcnMvcm9vdC5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Nv bnRyb2xsZXJzL3Jvb3QucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9s bGVycy9yb290LnB5CkBAIC03LDcgKzcsNyBAQAo9MjAKIGZyb20gcGFzdGUuaHR0cGV4Y2VwdGlv bnMgaW1wb3J0IEhUVFBOb3RGb3VuZCwgSFRUUEJhZEdhdGV3YXkKPTIwCi1mcm9tIGdhbGF4eS53 ZWIuYmFzZS5jb250cm9sbGVyIGltcG9ydCBCYXNlVUlDb250cm9sbGVyLCBVc2VzSGlzdG9yeURh dGFzZT0KdEFzc29jaWF0aW9uTWl4aW4KK2Zyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIg aW1wb3J0IEJhc2VVSUNvbnRyb2xsZXIKIGZyb20gZ2FsYXh5IGltcG9ydCBtYW5hZ2Vycwo9MjAK IGZyb20gZ2FsYXh5IGltcG9ydCB3ZWIKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBsb2dnaW5n CiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAotY2xhc3MgUm9vdENv bnRyb2xsZXIoIEJhc2VVSUNvbnRyb2xsZXIsIFVzZXNIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9u TWl4aW49CiwgVXNlc0Fubm90YXRpb25zICk6CitjbGFzcyBSb290Q29udHJvbGxlciggQmFzZVVJ Q29udHJvbGxlciwgVXNlc0Fubm90YXRpb25zICk6CiAgICAgIiIiCiAgICAgQ29udHJvbGxlciBj bGFzcyB0aGF0IG1hcHMgdG8gdGhlIHVybCByb290IG9mIEdhbGF4eSAoaS5lLiAnLycpLgogICAg ICIiIgoKZGlmZiAtciBhM2E2YzcyOTkzYTdhNjNiNzQ3MzljYmI2YTkxYjk5NjUwMWQxMTM3IC1y IDM5ZmJmMWQ5MjUwNzc5N2YxMDExNDUwPQo4M2VmMzI3Y2QxMjcxOGZiOSBsaWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3Zpc3VhbGl6YXRpb24ucHkKLS0tIGEvbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy92aXN1YWxpemF0aW9uLnB5CisrKyBiL2xpYi9n YWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdmlzdWFsaXphdGlvbi5weQpAQCAtNyw2 ICs3LDcgQEAKIGZyb20gcGFzdGUuaHR0cGV4Y2VwdGlvbnMgaW1wb3J0IEhUVFBOb3RGb3VuZCwg SFRUUEJhZFJlcXVlc3QKPTIwCiBmcm9tIGdhbGF4eSBpbXBvcnQgbW9kZWwsIHdlYgorZnJvbSBn YWxheHkgaW1wb3J0IG1hbmFnZXJzCiBmcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJzIGltcG9y dCBVc2VzQW5ub3RhdGlvbnMsIFVzZXNJdGVtUmF0aW5ncwogZnJvbSBnYWxheHkud2ViLmJhc2Uu Y29udHJvbGxlciBpbXBvcnQgQmFzZVVJQ29udHJvbGxlciwgU2hhcmFibGVNaXhpbiwgVXM9CmVz VmlzdWFsaXphdGlvbk1peGluCiBmcm9tIGdhbGF4eS53ZWIuZnJhbWV3b3JrLmhlbHBlcnMgaW1w b3J0IHRpbWVfYWdvLCBncmlkcywgZXNjYXBlCkBAIC0yNzEsOSArMjcyLDggQEAKICAgICAgICAg cmV0dXJuIHF1ZXJ5LmZpbHRlciggc2VsZi5tb2RlbF9jbGFzcy5kZWxldGVkPTNEPTNERmFsc2Ug KS5maWx0ZXIoPQogc2VsZi5tb2RlbF9jbGFzcy5wdWJsaXNoZWQ9M0Q9M0RUcnVlICkKPTIwCj0y MAotY2xhc3MgVmlzdWFsaXphdGlvbkNvbnRyb2xsZXIoIEJhc2VVSUNvbnRyb2xsZXIsIFNoYXJh YmxlTWl4aW4sIFVzZXNBbm5vdGE9CnRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2VzVmlzdWFsaXphdGlvbk1peGluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2VzSXRlbVJhdGluZ3MgKToKK2NsYXNzIFZpc3VhbGl6YXRpb25Db250cm9sbGVyKCBC YXNlVUlDb250cm9sbGVyLCBTaGFyYWJsZU1peGluLCBVc2VzVmlzdWFsPQppemF0aW9uTWl4aW4s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlc0Fubm90YXRpb25zLCBVc2VzSXRl bVJhdGluZ3MgKToKICAgICBfdXNlcl9saXN0X2dyaWQgPTNEIFZpc3VhbGl6YXRpb25MaXN0R3Jp ZCgpCiAgICAgX3B1Ymxpc2hlZF9saXN0X2dyaWQgPTNEIFZpc3VhbGl6YXRpb25BbGxQdWJsaXNo ZWRHcmlkKCkKICAgICBfbGlicmFyaWVzX2dyaWQgPTNEIExpYnJhcnlTZWxlY3Rpb25HcmlkKCkK QEAgLTI4MSw2ICsyODEsMTIgQEAKICAgICBfaGlzdG9yeV9kYXRhc2V0c19ncmlkID0zRCBIaXN0 b3J5RGF0YXNldHNTZWxlY3Rpb25HcmlkKCkKICAgICBfdHJhY2tzX2dyaWQgPTNEIFRyYWNrc3Rl clNlbGVjdGlvbkdyaWQoKQo9MjAKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAg ICAgICBzdXBlciggVmlzdWFsaXphdGlvbkNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBw ICkKKyAgICAgICAgc2VsZi5tZ3JzID0zRCB1dGlsLmJ1bmNoLkJ1bmNoKAorICAgICAgICAgICAg aGRhcz0zRG1hbmFnZXJzLmhkYXMuSERBTWFuYWdlciggYXBwICksCisgICAgICAgICkKKwogICAg ICMKICAgICAjIC0tIEZ1bmN0aW9ucyBmb3IgbGlzdGluZyB2aXN1YWxpemF0aW9ucy4gLS0KICAg ICAjCkBAIC04NjIsNyArODY4LDkgQEAKICAgICAgICAgICAgICMgdXNlIGRia2V5IGZyb20gZGF0 YXNldCB0byBiZSBhZGRlZCBvciBmcm9tIGluY29taW5nIHBhcmFtZXRlcgogICAgICAgICAgICAg ZGJrZXkgPTNEIE5vbmUKICAgICAgICAgICAgIGlmIG5ld19kYXRhc2V0X2lkOgotICAgICAgICAg ICAgICAgIGRia2V5ID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgbmV3X2RhdGFzZXRfaWQg KS5kYmtleQorICAgICAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRl Y29kZV9pZCggbmV3X2RhdGFzZXRfaWQgKQorICAgICAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5t Z3JzLmhkYXMub3duZWRfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cmE9Cm5zLnVzZXIgKQor ICAgICAgICAgICAgICAgIGRia2V5ID0zRCBoZGEuZGJrZXkKICAgICAgICAgICAgICAgICBpZiBk YmtleSA9M0Q9M0QgJz8nOgogICAgICAgICAgICAgICAgICAgICBkYmtleSA9M0Qga3dhcmdzLmdl dCggImRia2V5IiwgTm9uZSApCj0yMApAQCAtOTcwLDExICs5NzgsMTIgQEAKICAgICAgICAgICAg ICMgTG9hZGluZyBhIHNoYXJlZCB2aXN1YWxpemF0aW9uLgogICAgICAgICAgICAgdml6ID0zRCBz ZWxmLmdldF92aXN1YWxpemF0aW9uKCB0cmFucywgaWQgKQogICAgICAgICAgICAgdml6X2NvbmZp ZyA9M0Qgc2VsZi5nZXRfdmlzdWFsaXphdGlvbl9jb25maWcoIHRyYW5zLCB2aXogKQotICAgICAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfZGF0YXNldCggdHJhbnMsIHZpel9jb25maWdbICdk YXRhc2V0X2lkJyA9Cl0gKQorICAgICAgICAgICAgZGVjb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCB2aXpfY29uZmlnWyAnZGF0YXNldF89CmlkJyBdICkKKyAgICAgICAgICAg IGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLm93bmVkX2J5X2lkKCB0cmFucywgZGVjb2RlZF9p ZCwgdHJhPQpucy51c2VyICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTG9hZGluZyBu ZXcgdmlzdWFsaXphdGlvbi4KICAgICAgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuZ2V0X2hkYV9v cl9sZGRhKCB0cmFucywgaGRhX2xkZGEsIGRhdGFzZXRfaWQgKQotICAgICAgICAgICAgam9iID0z RCBzZWxmLmdldF9oZGFfam9iKCBkYXRhc2V0ICkKKyAgICAgICAgICAgIGpvYiA9M0Qgc2VsZi5t Z3JzLmhkYXMuY3JlYXRpbmdfam9iKCBkYXRhc2V0ICkKICAgICAgICAgICAgIHZpel9jb25maWcg PTNEIHsKICAgICAgICAgICAgICAgICAnZGF0YXNldF9pZCc6IGRhdGFzZXRfaWQsCiAgICAgICAg ICAgICAgICAgJ3Rvb2xfaWQnOiBqb2IudG9vbF9pZCwKQEAgLTEwMDQsNyArMTAxMyw5IEBACj0y MAogICAgICAgICAjIGdldCB0aGUgaGRhIGlmIHdlIGNhbiwgdGhlbiBpdHMgZGF0YSB1c2luZyB0 aGUgcGh5bG92aXogcGFyc2VycwogICAgICAgICBpZiBkYXRhc2V0X2lkOgotICAgICAgICAgICAg aGRhID0zRCBzZWxmLmdldF9kYXRhc2V0KCB0cmFucywgZGF0YXNldF9pZCwgY2hlY2tfb3duZXJz aGlwPQo9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQorICAgICAgICAgICAgZGVj b2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkKKyAgICAg ICAgICAgIGhkYSA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRl Y29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5o ZGFzLmVycm9yX2lmX3VwbG9hZGluZyggaGRhICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAg IHJldHVybiB0cmFucy5zaG93X21lc3NhZ2UoICJQaHlsb3ZpeiBjb3VsZG4ndCBmaW5kIGEgZGF0 YXNldF9pPQpkIiApCj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl bnRyYWwvY29tbWl0cy81ZjEyZTNmYTZjOGEvCkNoYW5nZXNldDogICA1ZjEyZTNmYTZjOGEKVXNl cjogICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDkgMjI6NDA6MDEr MDA6MDAKU3VtbWFyeTogICAgIFJlbW92ZSBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1p eGluCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgMzlmYmYxZDkyNTA3Nzk3ZjEwMTE0NTA4 M2VmMzI3Y2QxMjcxOGZiOSAtciA1ZjEyZTNmYTZjOGFkNTc5ODkzMjk4YT0KNzNmMjhhZDdmOTVk NzE0OWUgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkK LS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkK KysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkK QEAgLTMsNiArMyw4IEBACiAiIiIKIGltcG9ydCBsb2dnaW5nCiBmcm9tIGdhbGF4eSBpbXBvcnQg d2ViCitmcm9tIGdhbGF4eSBpbXBvcnQgbWFuYWdlcnMKKwogZnJvbSBnYWxheHkud2ViLmJhc2Uu Y29udHJvbGxlciBpbXBvcnQgIEJhc2VBUElDb250cm9sbGVyLCBVc2VzTGlicmFyeU1peGk9Cm5J dGVtcywgVXNlc1N0b3JlZFdvcmtmbG93TWl4aW4sIFVzZXNFeHRlbmRlZE1ldGFkYXRhTWl4aW4s IEhUVFBOb3RJbXBsZW1lbj0KdGVkCj0yMAogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19u YW1lX18gKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29t bWl0cy81MzA1ZTRkMWM5OWQvCkNoYW5nZXNldDogICA1MzA1ZTRkMWM5OWQKVXNlcjogICAgICAg IGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMDkgMjI6NDM6MzYrMDA6MDAKU3Vt bWFyeTogICAgIFNlZSAuLi50aGlzIGlzIHdoYXQgSSBnZXQgdHJ5aW5nIHRvIGNvbW1pdCBvbiBh IEZyaWRheSBFdmVuaW5nPQouLi4KQWZmZWN0ZWQgIzogIDMgZmlsZXMKCmRpZmYgLXIgNWYxMmUz ZmE2YzhhZDU3OTg5MzI5OGE3M2YyOGFkN2Y5NWQ3MTQ5ZSAtciA1MzA1ZTRkMWM5OWQ0NzhhZGE1 ZmQ2Mj0KOTMwZTQyODc1ZGE0OGZkMWMgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZm9s ZGVyX2NvbnRlbnRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2ZvbGRl cl9jb250ZW50cy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9mb2xkZXJf Y29udGVudHMucHkKQEAgLTI0LDcgKzI0LDcgQEAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFw cCApOgogICAgICAgICBzdXBlciggRm9sZGVyQ29udGVudHNDb250cm9sbGVyLCBzZWxmICkuX19p bml0X18oIGFwcCApCiAgICAgICAgIHNlbGYuZm9sZGVyX21hbmFnZXIgPTNEIGZvbGRlcnMuRm9s ZGVyTWFuYWdlcigpCi0gICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIG1hbmFnZXJzLmhkYXMu SERBTWFuYWdlcigpCisgICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIG1hbmFnZXJzLmhkYXMu SERBTWFuYWdlciggYXBwICkKPTIwCiAgICAgQGV4cG9zZV9hcGlfYW5vbnltb3VzCiAgICAgZGVm IGluZGV4KCBzZWxmLCB0cmFucywgZm9sZGVyX2lkLCAqKmt3ZCApOgoKZGlmZiAtciA1ZjEyZTNm YTZjOGFkNTc5ODkzMjk4YTczZjI4YWQ3Zjk1ZDcxNDllIC1yIDUzMDVlNGQxYzk5ZDQ3OGFkYTVm ZDYyPQo5MzBlNDI4NzVkYTQ4ZmQxYyBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2Jz LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pvYnMucHkKKysrIGIvbGli L2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvam9icy5weQpAQCAtMTMsNiArMTMsNyBAQAogZnJv bSBnYWxheHkgaW1wb3J0IGV4Y2VwdGlvbnMKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCiBmcm9t IGdhbGF4eSBpbXBvcnQgbW9kZWwKK2Zyb20gZ2FsYXh5IGltcG9ydCBtYW5hZ2Vycwo9MjAKIGlt cG9ydCBsb2dnaW5nCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCkBAIC0y Miw3ICsyMyw3IEBACj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAg IHN1cGVyKCBKb2JDb250cm9sbGVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCi0gICAgICAgIHNl bGYuaGRhX21hbmFnZXIgPTNEIG1hbmFnZXJzLmhkYXMuSERBTWFuYWdlcigpCisgICAgICAgIHNl bGYuaGRhX21hbmFnZXIgPTNEIG1hbmFnZXJzLmhkYXMuSERBTWFuYWdlciggYXBwICkKPTIwCiAg ICAgQGV4cG9zZV9hcGkKICAgICBkZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCAqKmt3ZCApOgoKZGlm ZiAtciA1ZjEyZTNmYTZjOGFkNTc5ODkzMjk4YTczZjI4YWQ3Zjk1ZDcxNDllIC1yIDUzMDVlNGQx Yzk5ZDQ3OGFkYTVmZDYyPQo5MzBlNDI4NzVkYTQ4ZmQxYyBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2FwaS9saWJyYXJ5X2NvbnRlbnRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxh eHkvYXBpL2xpYnJhcnlfY29udGVudHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4 eS9hcGkvbGlicmFyeV9jb250ZW50cy5weQpAQCAtNCw2ICs0LDcgQEAKIGZyb20gZ2FsYXh5IGlt cG9ydCB1dGlsCiBmcm9tIGdhbGF4eSBpbXBvcnQgd2ViCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhj ZXB0aW9ucworZnJvbSBnYWxheHkgaW1wb3J0IG1hbmFnZXJzCiBmcm9tIGdhbGF4eS53ZWIgaW1w b3J0IF9mdXR1cmVfZXhwb3NlX2FwaSBhcyBleHBvc2VfYXBpCiBmcm9tIGdhbGF4eS53ZWIuYmFz ZS5jb250cm9sbGVyIGltcG9ydCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0xpYnJhcnlNaXhpbj0K LCBVc2VzTGlicmFyeU1peGluSXRlbXMKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIg aW1wb3J0IEhUVFBCYWRSZXF1ZXN0LCB1cmxfZm9yCkBAIC0xOSw4ICsyMCw4IEBACiBjbGFzcyBM aWJyYXJ5Q29udGVudHNDb250cm9sbGVyKCBCYXNlQVBJQ29udHJvbGxlciwgVXNlc0xpYnJhcnlN aXhpbiwgVXNlcz0KTGlicmFyeU1peGluSXRlbXMgKToKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBz ZWxmLCBhcHAgKToKLSAgICAgICAgc3VwZXIoIEpvYkNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRf XyggYXBwICkKLSAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFN YW5hZ2VyKCkKKyAgICAgICAgc3VwZXIoIExpYnJhcnlDb250ZW50c0NvbnRyb2xsZXIsIHNlbGYg KS5fX2luaXRfXyggYXBwICkKKyAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMu aGRhcy5IREFNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICBAZXhwb3NlX2FwaQogICAgIGRlZiBpbmRl eCggc2VsZiwgdHJhbnMsIGxpYnJhcnlfaWQsICoqa3dkICk6CgoKaHR0cHM6Ly9iaXRidWNrZXQu b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzZhOGE3OWY5YjZkNS8KQ2hhbmdlc2V0 OiAgIDZhOGE3OWY5YjZkNQpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAg MjAxNS0wMS0xMiAxNToxODo1NiswMDowMApTdW1tYXJ5OiAgICAgTWVyZ2VkIGdhbGF4eS9nYWxh eHktY2VudHJhbCBpbnRvIGRlZmF1bHQKQWZmZWN0ZWQgIzogIDUzIGZpbGVzCgpkaWZmIC1yIDUz MDVlNGQxYzk5ZDQ3OGFkYTVmZDYyOTMwZTQyODc1ZGE0OGZkMWMgLXIgNmE4YTc5ZjliNmQ1MmJm OTZlMjJkOTQ9Cjc0MGY5YzM3YjQ0NGQ4ZDEyIGNsaWVudC9nYWxheHkvc2NyaXB0cy9nYWxheHku d29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvZ2Fs YXh5LndvcmtmbG93X2VkaXRvci5jYW52YXMuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRz L2dhbGF4eS53b3JrZmxvd19lZGl0b3IuY2FudmFzLmpzCkBAIC04MDUsNyArODA1LDcgQEAKICAg ICAgICAgICAgIG5vZGVWaWV3LmFkZERhdGFPdXRwdXQoIG91dHB1dCApOwogICAgICAgICB9ICk7 CiAgICAgICAgIG5vZGVWaWV3LnJlbmRlcigpOwotICAgICAgICB3b3JrZmxvdy5ub2RlX2NoYW5n ZWQoIHRoaXMgKTsKKyAgICAgICAgd29ya2Zsb3cubm9kZV9jaGFuZ2VkKCB0aGlzLCB0cnVlKTsK ICAgICB9LAogICAgIHVwZGF0ZV9maWVsZF9kYXRhIDogZnVuY3Rpb24oIGRhdGEgKSB7CiAgICAg ICAgIHZhciBub2RlID0zRCB0aGlzOwpAQCAtMTA5NCw5ICsxMDk0LDkgQEAKICAgICAgICAgICAg IHRoaXMuYWN0aXZlX25vZGUgPTNEIG5vZGU7CiAgICAgICAgIH0KICAgICB9LAotICAgIG5vZGVf Y2hhbmdlZCA6IGZ1bmN0aW9uICggbm9kZSApIHsKKyAgICBub2RlX2NoYW5nZWQgOiBmdW5jdGlv biAoIG5vZGUsIGZvcmNlICkgewogICAgICAgICB0aGlzLmhhc19jaGFuZ2VzID0zRCB0cnVlOwot ICAgICAgICBpZiAoIHRoaXMuYWN0aXZlX25vZGUgPTNEPTNEIG5vZGUgKSB7CisgICAgICAgIGlm ICggdGhpcy5hY3RpdmVfbm9kZSA9M0Q9M0Qgbm9kZSAmJiAoIXBhcmVudC5fX05FV1RPT0xGT1JN X18gfHwgZj0Kb3JjZSkpIHsKICAgICAgICAgICAgIC8vIFJlYWN0aXZlIHdpdGggbmV3IGZvcm1f aHRtbAogICAgICAgICAgICAgdGhpcy5jaGVja19jaGFuZ2VzX2luX2FjdGl2ZV9mb3JtKCk7IC8v Rm9yY2UgY2hhbmdlcyB0byBiZSBzYXY9CmVkIGV2ZW4gb24gbmV3IGNvbm5lY3Rpb24gKHByZXZp b3VzbHkgZHVtcGVkKQogICAgICAgICAgICAgcGFyZW50LnNob3dfZm9ybV9mb3JfdG9vbCggbm9k ZS5mb3JtX2h0bWwgKyBub2RlLnRvb2x0aXAsIG5vZGU9CiApOwpAQCAtMTMwNSw2ICsxMzA1LDEy IEBACiAgICAgcmV0dXJuIG5vZGU7CiB9Cj0yMAorZnVuY3Rpb24gdXBkYXRlX25vZGUoIGRhdGEg KSB7CisgICAgdmFyIG5vZGUgPTNEIHdvcmtmbG93LmFjdGl2ZV9ub2RlOworICAgIGlmIChub2Rl KSB7CisgICAgICAgIG5vZGUudXBkYXRlX2ZpZWxkX2RhdGEoZGF0YSwgdHJ1ZSk7CisgICAgfQor fQo9MjAKIHZhciBleHRfdG9fdHlwZSA9M0QgbnVsbDsKIHZhciB0eXBlX3RvX3R5cGUgPTNEIG51 bGw7CgpkaWZmIC1yIDUzMDVlNGQxYzk5ZDQ3OGFkYTVmZDYyOTMwZTQyODc1ZGE0OGZkMWMgLXIg NmE4YTc5ZjliNmQ1MmJmOTZlMjJkOTQ9Cjc0MGY5YzM3YjQ0NGQ4ZDEyIGNsaWVudC9nYWxheHkv c2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCi0tLSAvZGV2L251bGwKKysrIGIv Y2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKQEAgLTAs MCArMSwzMTUgQEAKKy8qKgorICAgIFRoaXMgaXMgdGhlIG1haW4gY2xhc3Mgb2YgdGhlIHRvb2wg Zm9ybSBwbHVnaW4uIEl0IGlzIHJlZmVyZW5jZWQgYXMgJ2E9CnBwJyBpbiBhbGwgbG93ZXIgbGV2 ZWwgbW9kdWxlcy4KKyovCitkZWZpbmUoWyd1dGlscy91dGlscycsICd1dGlscy9kZWZlcnJlZCcs ICdtdmMvdWkvdWktcG9ydGxldCcsICdtdmMvdWkvdWktbT0KaXNjJywKKyAgICAgICAgJ212Yy9j aXRhdGlvbi9jaXRhdGlvbi1tb2RlbCcsICdtdmMvY2l0YXRpb24vY2l0YXRpb24tdmlldycsCisg ICAgICAgICdtdmMvdG9vbHMnLCAnbXZjL3Rvb2xzL3Rvb2xzLXRlbXBsYXRlJywgJ212Yy90b29s cy90b29scy1jb250ZW50Jz0KLCAnbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24nLCAnbXZjL3Rvb2xz L3Rvb2xzLXRyZWUnXSwKKyAgICBmdW5jdGlvbihVdGlscywgRGVmZXJyZWQsIFBvcnRsZXQsIFVp LCBDaXRhdGlvbk1vZGVsLCBDaXRhdGlvblZpZXcsCisgICAgICAgICAgICAgVG9vbHMsIFRvb2xU ZW1wbGF0ZSwgVG9vbENvbnRlbnQsIFRvb2xTZWN0aW9uLCBUb29sVHJlZSkgeworCisgICAgLy8g Y3JlYXRlIGZvcm0gdmlldworICAgIHJldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CisgICAg ICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykg eworICAgICAgICAgICAgLy8gbG9nIG9wdGlvbnMKKyAgICAgICAgICAgIGNvbnNvbGUuZGVidWco b3B0aW9ucyk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gbGluayBnYWxheHkgbW9k YWwgb3IgY3JlYXRlIG9uZQorICAgICAgICAgICAgdmFyIGdhbGF4eSA9M0QgcGFyZW50LkdhbGF4 eTsKKyAgICAgICAgICAgIGlmIChnYWxheHkgJiYgZ2FsYXh5Lm1vZGFsKSB7CisgICAgICAgICAg ICAgICAgdGhpcy5tb2RhbCA9M0QgZ2FsYXh5Lm1vZGFsOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0zRCBuZXcgVWkuTW9kYWwuVmlldygpOworICAg ICAgICAgICAgfQorICAgPTIwCisgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXNlciBpcyBh biBhZG1pbgorICAgICAgICAgICAgaWYgKGdhbGF4eSAmJiBnYWxheHkuY3VyclVzZXIpIHsKKyAg ICAgICAgICAgICAgICB0aGlzLmlzX2FkbWluID0zRCBnYWxheHkuY3VyclVzZXIuZ2V0KCdpc19h ZG1pbicpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLmlzX2Fk bWluID0zRCBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgPTIwCisgICAgICAgICAg ICAvLyBsaW5rIG9wdGlvbnMKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9M0Qgb3B0aW9uczsK KyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBsaW5rIGNvbnRhaW5lcgorICAgICAgICAg ICAgdGhpcy5jb250YWluZXIgPTNEIHRoaXMub3B0aW9ucy5jb250YWluZXIgfHwgJ2JvZHknOwor ICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBkZWZlcnJlZCBwcm9jZXNzaW5n IHF1ZXVlIGhhbmRsZXIKKyAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlciByZWR1Y2VzIHRoZSBu dW1iZXIgb2YgcmVxdWVzdHMgdG8gdGhlIGFwaSBieSBmPQppbHRlcmluZyByZWR1bmRhbnQgcmVx dWVzdHMKKyAgICAgICAgICAgIHRoaXMuZGVmZXJyZWQgPTNEIG5ldyBEZWZlcnJlZCgpOworICAg ICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIHNldCBlbGVtZW50CisgICAgICAgICAgICB0aGlz LnNldEVsZW1lbnQoJzxkaXYvPicpOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFk ZCB0byBtYWluIGVsZW1lbnQKKyAgICAgICAgICAgICQodGhpcy5jb250YWluZXIpLmFwcGVuZCh0 aGlzLiRlbCk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gYnVpbGQgdGhpcyBmb3Jt CisgICAgICAgICAgICB0aGlzLl9idWlsZEZvcm0oKTsKKyAgICAgICAgfSwKKyAgICAgICA9MjAK KyAgICAgICAgLyoqIFNob3dzIHRoZSBmaW5hbCBtZXNzYWdlICh1c3VhbGx5IHVwb24gc3VjY2Vz c2Z1bCBqb2Igc3VibWlzc2lvPQpuKQorICAgICAgICAqLworICAgICAgICByZWNpZXB0OiBmdW5j dGlvbigkZWwpIHsKKyAgICAgICAgICAgICQodGhpcy5jb250YWluZXIpLmVtcHR5KCk7CisgICAg ICAgICAgICAkKHRoaXMuY29udGFpbmVyKS5hcHBlbmQoJGVsKTsKKyAgICAgICAgfSwKKyAgICAg ICAgICAgICAgID0yMAorICAgICAgICAvKiogSGlnaGxpZ2h0IGFuZCBzY3JvbGwgdG8gaW5wdXQg ZWxlbWVudCAoY3VycmVudGx5IG9ubHkgdXNlZCBmb3I9CiBlcnJvciBub3RpZmljYXRpb25zKQor ICAgICAgICAqLworICAgICAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uIChpbnB1dF9pZCwgbWVzc2Fn ZSwgc2lsZW50KSB7CisgICAgICAgICAgICAvLyBnZXQgaW5wdXQgZmllbGQKKyAgICAgICAgICAg IHZhciBpbnB1dF9lbGVtZW50ID0zRCB0aGlzLmVsZW1lbnRfbGlzdFtpbnB1dF9pZF07CisgICAg ICAgICAgID0yMAorICAgICAgICAgICAgLy8gY2hlY2sgaW5wdXQgZWxlbWVudAorICAgICAgICAg ICAgaWYgKGlucHV0X2VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBtYXJrIGVycm9yCisg ICAgICAgICAgICAgICAgaW5wdXRfZWxlbWVudC5lcnJvcihtZXNzYWdlIHx8ICdQbGVhc2UgdmVy aWZ5IHRoaXMgcGFyYW1ldD0KZXIuJyk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgICAg IC8vIHNjcm9sbCB0byBmaXJzdCBpbnB1dCBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgKCFz aWxlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmNvbnRhaW5lcikuYW5pbWF0ZSh7 CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IGlucHV0X2VsZW1lbnQuJGVsLm9m ZnNldCgpLnRvcCAtIDIwCisgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgID0yMAorICAgICAgICAv KiogTWFpbiB0b29sIGZvcm0gYnVpbGQgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IG9uY2UgYSA9Cm5ldyBtb2RlbCBpcyBhdmFpbGFibGUuCisgICAgICAgICovCisgICAgICAgIF9i dWlsZEZvcm06IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgLy8gbGluayB0aGlzCisgICAgICAg ICAgICB2YXIgc2VsZiA9M0QgdGhpczsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBy ZXNldCBldmVudHMKKyAgICAgICAgICAgIHRoaXMub2ZmKCdyZWZyZXNoJyk7CisgICAgICAgICAg ICB0aGlzLm9mZigncmVzZXQnKTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyByZXNl dCBmaWVsZCBsaXN0LCB3aGljaCBjb250YWlucyB0aGUgaW5wdXQgZmllbGQgZWxlbWVudHMKKyAg ICAgICAgICAgIHRoaXMuZmllbGRfbGlzdCA9M0Qge307CisgICAgICAgICAgID0yMAorICAgICAg ICAgICAgLy8gcmVzZXQgc2VxdWVudGlhbCBpbnB1dCBkZWZpbml0aW9uIGxpc3QsIHdoaWNoIGNv bnRhaW5zIHRoZSA9CmlucHV0IGRlZmluaXRpb25zIGFzIHByb3ZpZGVkIGZyb20gdGhlIGFwaQor ICAgICAgICAgICAgdGhpcy5pbnB1dF9saXN0ID0zRCB7fTsKKyAgICAgICAgICAgPTIwCisgICAg ICAgICAgICAvLyByZXNldCBpbnB1dCBlbGVtZW50IGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBk b20gZWxlbWVudHMgbz0KZiBlYWNoIGlucHV0IGVsZW1lbnQgKGluY2x1ZGVzIGFsc28gdGhlIGlu cHV0IGZpZWxkKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50X2xpc3QgPTNEIHt9OworICAgICAg ICAgICA9MjAKKyAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSB0cmVlL2pzb24gZGF0YSBzdHJ1Y3R1 cmUgZnJvbSB0aGUgaW5wdXQgZm9ybQorICAgICAgICAgICAgdGhpcy50cmVlID0zRCBuZXcgVG9v bFRyZWUodGhpcyk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gcmVxdWVzdCBoaXN0 b3J5IGNvbnRlbnQgYW5kIGJ1aWxkIGZvcm0KKyAgICAgICAgICAgIHRoaXMuY29udGVudCA9M0Qg bmV3IFRvb2xDb250ZW50KHRoaXMpOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGxp bmsgbW9kZWwgb3B0aW9ucworICAgICAgICAgICAgdmFyIG9wdGlvbnMgPTNEIHRoaXMub3B0aW9u czsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBjcmVhdGUgdWkgZWxlbWVudHMKKyAg ICAgICAgICAgIHRoaXMuX3JlbmRlckZvcm0ob3B0aW9ucyk7CisgICAgICAgICAgID0yMAorICAg ICAgICAgICAgLy8gcmVidWlsZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZQorICAgICAg ICAgICAgdGhpcy50cmVlLmZpbmFsaXplKCk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAg Ly8gc2hvdyBlcnJvcnMKKyAgICAgICAgICAgIGlmICghdGhpcy53b3JrZmxvdyAmJiBvcHRpb25z LmVycm9ycykgeworICAgICAgICAgICAgICAgIHZhciBlcnJvcl9tZXNzYWdlcyA9M0QgdGhpcy50 cmVlLm1hdGNoUmVzcG9uc2Uob3B0aW9ucy5lcnI9Cm9ycyk7CisgICAgICAgICAgICAgICAgZm9y ICh2YXIgaW5wdXRfaWQgaW4gZXJyb3JfbWVzc2FnZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg dGhpcy5oaWdobGlnaHQoaW5wdXRfaWQsIGVycm9yX21lc3NhZ2VzW2lucHV0X2lkXSwgdHJ1PQpl KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgID0yMAorICAg ICAgICAgICAgLy8gYWRkIHJlZnJlc2ggbGlzdGVuZXIKKyAgICAgICAgICAgIHRoaXMub24oJ3Jl ZnJlc2gnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBieSB1c2luZy9yZXNldGlu ZyB0aGUgZGVmZXJyZWQgYWpheCBxdWV1ZSB0aGUgbnVtYmVyIG9mPQogcmVkdW5kYW50IGNhbGxz IGlzIHJlZHVjZWQKKyAgICAgICAgICAgICAgICBzZWxmLmRlZmVycmVkLnJlc2V0KCk7CisgICAg ICAgICAgICAgICAgc2VsZi5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7c2VsZi5fdXBkYXRl TW9kZWwoKX0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAg Ly8gYWRkIHJlc2V0IGxpc3RlbmVyCisgICAgICAgICAgICB0aGlzLm9uKCdyZXNldCcsIGZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5lbGVtZW50X2xpc3Qp IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50X2xpc3RbaV0ucmVzZXQoKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAv KiogUmVuZGVycyB0aGUgVUkgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHRoZSBmb3JtCisgICAgICAg ICovCisgICAgICAgIF9yZW5kZXJGb3JtOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgICAg ICAvLyBsaW5rIHRoaXMKKyAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOworICAgICAgICAg ICA9MjAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBtZXNzYWdlIHZpZXcKKyAgICAgICAgICAgIHRo aXMubWVzc2FnZSA9M0QgbmV3IFVpLk1lc3NhZ2UoKTsKKyAgICAgICAgICAgPTIwCisgICAgICAg ICAgICAvLyBidXR0b24gZm9yIHZlcnNpb24gc2VsZWN0aW9uCisgICAgICAgICAgICB2YXIgcmVx dWlyZW1lbnRzX2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbkljb24oeworICAgICAgICAgICAgICAg IGljb24gICAgOiAnZmEtaW5mby1jaXJjbGUnLAorICAgICAgICAgICAgICAgIHRpdGxlICAgOiAn UmVxdWlyZW1lbnRzJywKKyAgICAgICAgICAgICAgICB0b29sdGlwIDogJ0Rpc3BsYXkgdG9vbCBy ZXF1aXJlbWVudHMnLAorICAgICAgICAgICAgICAgIG9uY2xpY2sgOiBmdW5jdGlvbigpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMudmlzaWJsZSA9M0QgdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl bGYubWVzc2FnZS51cGRhdGUoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3Rl bnQgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICAgICA6IFRv b2xUZW1wbGF0ZS5yZXF1aXJlbWVudHMob3B0aW9uPQpzKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGF0dXMgICAgICA6ICdpbmZvJworICAgICAgICAgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzLnZpc2libGUgPTNEIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNz YWdlLnVwZGF0ZSh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSAgICAgOiAn JworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICghb3B0aW9u cy5yZXF1aXJlbWVudHMgfHwgb3B0aW9ucy5yZXF1aXJlbWVudHMubGVuZ3RoID0zRD0KPTNEIDAp IHsKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHNfYnV0dG9uLiRlbC5oaWRlKCk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gYnV0dG9uIGZvciB2ZXJz aW9uIHNlbGVjdGlvbgorICAgICAgICAgICAgdmFyIHZlcnNpb25zX2J1dHRvbiA9M0QgbmV3IFVp LkJ1dHRvbk1lbnUoeworICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtY3ViZXMnLAorICAg ICAgICAgICAgICAgIHRpdGxlICAgOiAnVmVyc2lvbnMnLAorICAgICAgICAgICAgICAgIHRvb2x0 aXAgOiAnU2VsZWN0IGFub3RoZXIgdG9vbCB2ZXJzaW9uJworICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9ucyAmJiBvcHRpb25zLnZlcnNpb25zLmxlbmd0aCA+ IDEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMudmVyc2lvbnMpIHsK KyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPTNEIG9wdGlvbnMudmVyc2lvbnNbaV07 CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9M0Qgb3B0aW9ucy52ZXJzaW9uKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uc19idXR0b24uYWRkTWVudSh7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgICA6ICdTd2l0Y2ggdG8gJyArIHZlcnNpb24s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA6IHZlcnNpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6ICdmYS1jdWJlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbmNsaWNrIDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGhlcmUgd2UgdXBkYXRlIHRoZSB0b29sIHZlcnNpb24gKHNvbWUgdD0K b29scyBlbmNvZGUgdGhlIHZlcnNpb24gYWxzbyBpbiB0aGUgaWQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wdGlvbnMuaWQgPTNEIG9wdGlvbnMuaWQucmVwbGFjZShvcHRpb25z Lj0KdmVyc2lvbiwgdGhpcy52ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3B0aW9ucy52ZXJzaW9uID0zRCB0aGlzLnZlcnNpb247CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPTIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYnVp bGQgdGhlIG1vZGVsIGFuZCBmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl bGYuZGVmZXJyZWQucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7c2VsZi5fYnVpPQpsZE1vZGVsKCl9KTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgdmVyc2lvbnNfYnV0dG9uLiRlbC5oaWRlKCk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gYnV0dG9uIG1lbnUKKyAg ICAgICAgICAgIHZhciBtZW51X2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbk1lbnUoeworICAgICAg ICAgICAgICAgIGljb24gICAgOiAnZmEtY2FyZXQtZG93bicsCisgICAgICAgICAgICAgICAgdGl0 bGUgICA6ICdPcHRpb25zJywKKyAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1ZpZXcgYXZhaWxh YmxlIG9wdGlvbnMnCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAg ICAvLyBjb25maWd1cmUgYnV0dG9uIHNlbGVjdGlvbgorICAgICAgICAgICAgaWYob3B0aW9ucy5i aW9zdGFyX3VybCkgeworICAgICAgICAgICAgICAgIC8vIGFkZCBxdWVzdGlvbiBvcHRpb24KKyAg ICAgICAgICAgICAgICBtZW51X2J1dHRvbi5hZGRNZW51KHsKKyAgICAgICAgICAgICAgICAgICAg aWNvbiAgICA6ICdmYS1xdWVzdGlvbi1jaXJjbGUnLAorICAgICAgICAgICAgICAgICAgICB0aXRs ZSAgIDogJ1F1ZXN0aW9uPycsCisgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgOiAnQXNrIGEg cXVlc3Rpb24gYWJvdXQgdGhpcyB0b29sIChCaW9zdGFyKScsCisgICAgICAgICAgICAgICAgICAg IG9uY2xpY2sgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5v cGVuKG9wdGlvbnMuYmlvc3Rhcl91cmwgKyAnL3AvbmV3L3Bvc3QvJyk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgID0yMAorICAgICAg ICAgICAgICAgIC8vIGNyZWF0ZSBzZWFyY2ggYnV0dG9uCisgICAgICAgICAgICAgICAgbWVudV9i dXR0b24uYWRkTWVudSh7CisgICAgICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtc2VhcmNo JywKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgICA6ICdTZWFyY2gnLAorICAgICAgICAgICAg ICAgICAgICB0b29sdGlwIDogJ1NlYXJjaCBoZWxwIGZvciB0aGlzIHRvb2wgKEJpb3N0YXIpJywK KyAgICAgICAgICAgICAgICAgICAgb25jbGljayA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgd2luZG93Lm9wZW4ob3B0aW9ucy5iaW9zdGFyX3VybCArICcvdC8nICsgb3B0 aW9ucy49CmlkICsgJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBjcmVh dGUgc2hhcmUgYnV0dG9uCisgICAgICAgICAgICBtZW51X2J1dHRvbi5hZGRNZW51KHsKKyAgICAg ICAgICAgICAgICBpY29uICAgIDogJ2ZhLXNoYXJlJywKKyAgICAgICAgICAgICAgICB0aXRsZSAg IDogJ1NoYXJlJywKKyAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1NoYXJlIHRoaXMgdG9vbCcs CisgICAgICAgICAgICAgICAgb25jbGljayA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg ICAgICBwcm9tcHQoJ0NvcHkgdG8gY2xpcGJvYXJkOiBDdHJsK0MsIEVudGVyJywgd2luZG93Lmxv Y2E9CnRpb24ub3JpZ2luICsgZ2FsYXh5X2NvbmZpZy5yb290ICsgJ3Jvb3Q/dG9vbF9pZD0zRCcg KyBvcHRpb25zLmlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAg ICAgICAgPTIwCisgICAgICAgICAgICAvLyBhZGQgYWRtaW4gb3BlcmF0aW9ucworICAgICAgICAg ICAgaWYgKHRoaXMuaXNfYWRtaW4pIHsKKyAgICAgICAgICAgICAgICAvLyBjcmVhdGUgZG93bmxv YWQgYnV0dG9uCisgICAgICAgICAgICAgICAgbWVudV9idXR0b24uYWRkTWVudSh7CisgICAgICAg ICAgICAgICAgICAgIGljb24gICAgOiAnZmEtZG93bmxvYWQnLAorICAgICAgICAgICAgICAgICAg ICB0aXRsZSAgIDogJ0Rvd25sb2FkJywKKyAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA6ICdE b3dubG9hZCB0aGlzIHRvb2wnLAorICAgICAgICAgICAgICAgICAgICBvbmNsaWNrIDogZnVuY3Rp b24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9M0Qg Z2FsYXh5X2NvbmZpZy5yb290ICsgJ2FwaT0KL3Rvb2xzLycgKyBvcHRpb25zLmlkICsgJy9kb3du bG9hZCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBjcmVhdGUgdG9vbCBmb3Jt IHNlY3Rpb24KKyAgICAgICAgICAgIHRoaXMuc2VjdGlvbiA9M0QgbmV3IFRvb2xTZWN0aW9uLlZp ZXcoc2VsZiwgeworICAgICAgICAgICAgICAgIGlucHV0cyA6IG9wdGlvbnMuaW5wdXRzLAorICAg ICAgICAgICAgICAgIGNscyAgICA6ICd1aS10YWJsZS1wbGFpbicKKyAgICAgICAgICAgIH0pOwor ICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIHN3aXRjaCB0byBjbGFzc2ljIHRvb2wgZm9y bSBtYWtvIGlmIHRoZSBmb3JtIGRlZmluaXRpb24gaXMgPQppbmNvbXBhdGlibGUKKyAgICAgICAg ICAgIGlmICh0aGlzLmluY29tcGF0aWJsZSkgeworICAgICAgICAgICAgICAgIHRoaXMuJGVsLmhp ZGUoKTsKKyAgICAgICAgICAgICAgICAkKCcjdG9vbC1mb3JtLWNsYXNzaWMnKS5zaG93KCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICA9MjAKKyAg ICAgICAgICAgIC8vIGNyZWF0ZSBwb3J0bGV0CisgICAgICAgICAgICB0aGlzLnBvcnRsZXQgPTNE IG5ldyBQb3J0bGV0LlZpZXcoeworICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtd3JlbmNo JywKKyAgICAgICAgICAgICAgICB0aXRsZSAgIDogJzxiPicgKyBvcHRpb25zLm5hbWUgKyAnPC9i PiAnICsgb3B0aW9ucy5kZXNjcmlwPQp0aW9uICsgJyAoR2FsYXh5IFRvb2wgVmVyc2lvbiAnICsg b3B0aW9ucy52ZXJzaW9uICsgJyknLAorICAgICAgICAgICAgICAgIGNscyAgICAgOiAndWktcG9y dGxldC1zbGltJywKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiB7CisgICAgICAgICAgICAg ICAgICAgIHJlcXVpcmVtZW50cyAgICA6IHJlcXVpcmVtZW50c19idXR0b24sCisgICAgICAgICAg ICAgICAgICAgIG1lbnUgICAgICAgICAgICA6IG1lbnVfYnV0dG9uLAorICAgICAgICAgICAgICAg ICAgICB2ZXJzaW9ucyAgICAgICAgOiB2ZXJzaW9uc19idXR0b24KKyAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgIGJ1dHRvbnMgOiB0aGlzLmJ1dHRvbnMKKyAgICAgICAgICAgIH0p OworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFwcGVuZCBtZXNzYWdlCisgICAgICAg ICAgICB0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMubWVzc2FnZS4kZWwsIHRydWUpOworICAgICAg ICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFwcGVuZCB0b29sIHNlY3Rpb24KKyAgICAgICAgICAg IHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5zZWN0aW9uLiRlbCk7CisgICAgICAgICAgID0yMAor ICAgICAgICAgICAgLy8gc3RhcnQgZm9ybQorICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTsK KyAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZCh0aGlzLnBvcnRsZXQuJGVsKTsKKyAgICAgICAg ICAgPTIwCisgICAgICAgICAgICAvLyBhcHBlbmQgaGVscAorICAgICAgICAgICAgaWYgKG9wdGlv bnMuaGVscCAhPTNEICcnKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKFRvb2xU ZW1wbGF0ZS5oZWxwKG9wdGlvbnMuaGVscCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICA9 MjAKKyAgICAgICAgICAgIC8vIGFwcGVuZCBjaXRhdGlvbnMKKyAgICAgICAgICAgIGlmIChvcHRp b25zLmNpdGF0aW9ucykgeworICAgICAgICAgICAgICAgIHZhciAkY2l0YXRpb25zID0zRCAkKCc8 ZGl2Lz4nKTsKKyAgICAgICAgICAgICAgICB2YXIgY2l0YXRpb25zID0zRCBuZXcgQ2l0YXRpb25N b2RlbC5Ub29sQ2l0YXRpb25Db2xsZWN0aW9uPQooKTsKKyAgICAgICAgICAgICAgICBjaXRhdGlv bnMudG9vbF9pZCA9M0Qgb3B0aW9ucy5pZDsKKyAgICAgICAgICAgICAgICB2YXIgY2l0YXRpb25f bGlzdF92aWV3ID0zRCBuZXcgQ2l0YXRpb25WaWV3LkNpdGF0aW9uTGlzdFZpPQpldyh7IGVsOiAk Y2l0YXRpb25zLCBjb2xsZWN0aW9uOiBjaXRhdGlvbnMgfSApOworICAgICAgICAgICAgICAgIGNp dGF0aW9uX2xpc3Rfdmlldy5yZW5kZXIoKTsKKyAgICAgICAgICAgICAgICBjaXRhdGlvbnMuZmV0 Y2goKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQoJGNpdGF0aW9ucyk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gc2hvdyBtZXNzYWdlIGlm IGF2YWlsYWJsZSBpbiBtb2RlbAorICAgICAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSkgewor ICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZS51cGRhdGUoeworICAgICAgICAgICAgICAgICAg ICBwZXJzaXN0ZW50ICA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgIDog J3dhcm5pbmcnLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICAgICA6IG9wdGlvbnMubWVz c2FnZQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fSk7Cit9KTsKCmRpZmYgLXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQx YyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCi0tLSAvZGV2L251 bGwKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtm bG93LmpzCkBAIC0wLDAgKzEsNjYgQEAKKy8qKgorICAgIFRoaXMgaXMgdGhlIG1haW4gY2xhc3Mg b2YgdGhlIHRvb2wgZm9ybSBwbHVnaW4uIEl0IGlzIHJlZmVyZW5jZWQgYXMgJ2E9CnBwJyBpbiBh bGwgbG93ZXIgbGV2ZWwgbW9kdWxlcy4KKyovCitkZWZpbmUoWyd1dGlscy91dGlscycsICdtdmMv dG9vbHMvdG9vbHMtZm9ybS1iYXNlJ10sCisgICAgZnVuY3Rpb24oVXRpbHMsIFRvb2xGb3JtQmFz ZSkgeworCisgICAgLy8gY3JlYXRlIGZvcm0gdmlldworICAgIHZhciBWaWV3ID0zRCBUb29sRm9y bUJhc2UuZXh0ZW5kKHsKKyAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykgewor ICAgICAgICAgICAgdGhpcy53b3JrZmxvdyA9M0QgdHJ1ZTsKKyAgICAgICAgICAgIFRvb2xGb3Jt QmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIG9wdGlvbnMpOworICAgICAgICB9 LAorICAgICAgID0yMAorICAgICAgICAvKiogQnVpbGRzIGEgbmV3IG1vZGVsIHRocm91Z2ggYXBp IGNhbGwgYW5kIHJlY3JlYXRlcyB0aGUgZW50aXJlIGY9Cm9ybQorICAgICAgICAqLworICAgICAg ICBfYnVpbGRNb2RlbDogZnVuY3Rpb24oKSB7CisgICAgICAgIH0sCisgICAgICAgPTIwCisgICAg ICAgIC8qKiBSZXF1ZXN0IGEgbmV3IG1vZGVsIGZvciBhbiBhbHJlYWR5IGNyZWF0ZWQgdG9vbCBm b3JtIGFuZCB1cGRhdD0KZXMgdGhlIGZvcm0gaW5wdXRzCisgICAgICAgICovCisgICAgICAgIF91 cGRhdGVNb2RlbDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIHJlcXVl c3QgZGljdGlvbmFyeQorICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisgICAgICAgICAg ICB2YXIgY3VycmVudF9zdGF0ZSA9M0QgdGhpcy50cmVlLmZpbmFsaXplKCk7CisgICAgICAgICAg ID0yMAorICAgICAgICAgICAgLy8gbG9nIHRvb2wgc3RhdGUKKyAgICAgICAgICAgIGNvbnNvbGUu ZGVidWcoJ3Rvb2xzLWZvcm0td29ya2Zsb3c6Ol9yZWZyZXNoRm9ybSgpIC0gUmVmcmVzaGluPQpn IHN0YXRlcy4nKTsKKyAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoY3VycmVudF9zdGF0ZSk7Cisg ICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgcHJvY2VzcworICAgICAgICAg ICAgdmFyIHByb2Nlc3NfaWQgPTNEIHRoaXMuZGVmZXJyZWQucmVnaXN0ZXIoKTsKKworICAgICAg ICAgICAgLy8gYnVpbGQgbW9kZWwgdXJsIGZvciByZXF1ZXN0CisgICAgICAgICAgICB2YXIgbW9k ZWxfdXJsID0zRCBnYWxheHlfY29uZmlnLnJvb3QgKyAnd29ya2Zsb3cvZWRpdG9yX2Zvcm1fcD0K b3N0P3Rvb2xfaWQ9M0QnICsgdGhpcy5vcHRpb25zLmlkOworICAgICAgICAgICA9MjAKKyAgICAg ICAgICAgIC8vIHBvc3Qgam9iCisgICAgICAgICAgICBVdGlscy5yZXF1ZXN0KHsKKyAgICAgICAg ICAgICAgICB0eXBlICAgIDogJ0dFVCcsCisgICAgICAgICAgICAgICAgdXJsICAgICA6IG1vZGVs X3VybCwKKyAgICAgICAgICAgICAgICBkYXRhICAgIDogY3VycmVudF9zdGF0ZSwKKyAgICAgICAg ICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgICAgICAgICBw YXJlbnQudXBkYXRlX25vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgPTIwCisgICAgICAg ICAgICAgICAgICAgIC8vIHByb2Nlc3MgY29tcGxldGVkCisgICAgICAgICAgICAgICAgICAgIHNl bGYuZGVmZXJyZWQuZG9uZShwcm9jZXNzX2lkKTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAg ICAgICAgICAgIC8vIGxvZyBzdWNjZXNzCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVi dWcoJ3Rvb2xzLWZvcm06Ol9yZWZyZXNoRm9ybSgpIC0gU3RhdGVzIHJlZj0KcmVzaGVkLicpOwor ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKG5vZGUpOworICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgZXJyb3IgICA6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAg ICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgY29tcGxldGVkCisgICAgICAgICAgICAgICAgICAg IHNlbGYuZGVmZXJyZWQuZG9uZShwcm9jZXNzX2lkKTsKKyAgICAgICAgICAgICAgICAgICA9MjAK KyAgICAgICAgICAgICAgICAgICAgLy8gbG9nIGVycm9yCisgICAgICAgICAgICAgICAgICAgIGNv bnNvbGUuZGVidWcoJ3Rvb2xzLWZvcm06Ol9yZWZyZXNoRm9ybSgpIC0gUmVmcmVzaCByZT0KcXVl c3QgZmFpbGVkLicpOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHJlc3BvbnNl KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0p OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgVmlldzogVmlldworICAgIH07Cit9KTsKCmRpZmYg LXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2YThhNzlmOWI2 ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212 Yy90b29scy90b29scy1mb3JtLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9v bHMvdG9vbHMtZm9ybS5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rv b2xzLWZvcm0uanMKQEAgLTEsNzkgKzEsMjggQEAKIC8qKgogICAgIFRoaXMgaXMgdGhlIG1haW4g Y2xhc3Mgb2YgdGhlIHRvb2wgZm9ybSBwbHVnaW4uIEl0IGlzIHJlZmVyZW5jZWQgYXMgJ2E9CnBw JyBpbiBhbGwgbG93ZXIgbGV2ZWwgbW9kdWxlcy4KICovCi1kZWZpbmUoWyd1dGlscy91dGlscycs ICd1dGlscy9kZWZlcnJlZCcsICdtdmMvdWkvdWktcG9ydGxldCcsICdtdmMvdWkvdWktbT0KaXNj JywKLSAgICAgICAgJ212Yy9jaXRhdGlvbi9jaXRhdGlvbi1tb2RlbCcsICdtdmMvY2l0YXRpb24v Y2l0YXRpb24tdmlldycsCi0gICAgICAgICdtdmMvdG9vbHMnLCAnbXZjL3Rvb2xzL3Rvb2xzLXRl bXBsYXRlJywgJ212Yy90b29scy90b29scy1jb250ZW50Jz0KLCAnbXZjL3Rvb2xzL3Rvb2xzLXNl Y3Rpb24nLCAnbXZjL3Rvb2xzL3Rvb2xzLXRyZWUnLCAnbXZjL3Rvb2xzL3Rvb2xzLWpvYnMnPQpd LAotICAgIGZ1bmN0aW9uKFV0aWxzLCBEZWZlcnJlZCwgUG9ydGxldCwgVWksIENpdGF0aW9uTW9k ZWwsIENpdGF0aW9uVmlldywKLSAgICAgICAgICAgICBUb29scywgVG9vbFRlbXBsYXRlLCBUb29s Q29udGVudCwgVG9vbFNlY3Rpb24sIFRvb2xUcmVlLCBUb29sPQpKb2JzKSB7CitkZWZpbmUoWyd1 dGlscy91dGlscycsICdtdmMvdWkvdWktbWlzYycsICdtdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNl JywgJ212Yz0KL3Rvb2xzL3Rvb2xzLWpvYnMnXSwKKyAgICBmdW5jdGlvbihVdGlscywgVWksIFRv b2xGb3JtQmFzZSwgVG9vbEpvYnMpIHsKPTIwCiAgICAgLy8gY3JlYXRlIGZvcm0gdmlldwotICAg IHZhciBWaWV3ID0zRCBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Ci0gICAgICAgIC8vIGJhc2UgZWxl bWVudAotICAgICAgICBjb250YWluZXI6ICdib2R5JywKLSAgICAgICA9MjAKKyAgICB2YXIgVmll dyA9M0QgVG9vbEZvcm1CYXNlLmV4dGVuZCh7CiAgICAgICAgIC8vIGluaXRpYWxpemUKICAgICAg ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgICAgICAgLy8gbG9nIG9w dGlvbnMKLSAgICAgICAgICAgIGNvbnNvbGUuZGVidWcob3B0aW9ucyk7Ci0gICAgICAgICAgID0y MAotICAgICAgICAgICAgLy8gbGluayBnYWxheHkgbW9kYWwgb3IgY3JlYXRlIG9uZQotICAgICAg ICAgICAgdmFyIGdhbGF4eSA9M0QgcGFyZW50LkdhbGF4eTsKLSAgICAgICAgICAgIGlmIChnYWxh eHkgJiYgZ2FsYXh5Lm1vZGFsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9M0QgZ2Fs YXh5Lm1vZGFsOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLm1v ZGFsID0zRCBuZXcgVWkuTW9kYWwuVmlldygpOworICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRo aXM7CisgICAgICAgICAgICB0aGlzLmpvYl9oYW5kbGVyID0zRCBuZXcgVG9vbEpvYnModGhpcyk7 CisgICAgICAgICAgICB0aGlzLmJ1dHRvbnMgPTNEIHsKKyAgICAgICAgICAgICAgICBleGVjdXRl IDogbmV3IFVpLkJ1dHRvbih7CisgICAgICAgICAgICAgICAgICAgIGljb24gICAgIDogJ2ZhLWNo ZWNrJywKKyAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCAgOiAnRXhlY3V0ZTogJyArIG9wdGlv bnMubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgICAgOiAnRXhlY3V0ZScsCisgICAg ICAgICAgICAgICAgICAgIGNscyAgICAgIDogJ2J0biBidG4tcHJpbWFyeScsCisgICAgICAgICAg ICAgICAgICAgIGZsb2F0aW5nIDogJ2NsZWFyJywKKyAgICAgICAgICAgICAgICAgICAgb25jbGlj ayAgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuam9iX2hhbmRs ZXIuc3VibWl0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KQog ICAgICAgICAgICAgfQotICAgPTIwCi0gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXNlciBp cyBhbiBhZG1pbgotICAgICAgICAgICAgaWYgKGdhbGF4eSAmJiBnYWxheHkuY3VyclVzZXIpIHsK LSAgICAgICAgICAgICAgICB0aGlzLmlzX2FkbWluID0zRCBnYWxheHkuY3VyclVzZXIuZ2V0KCdp c19hZG1pbicpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuaXNf YWRtaW4gPTNEIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKLSAgICAgICAg ICAgIC8vIGxpbmsgb3B0aW9ucwotICAgICAgICAgICAgdGhpcy5vcHRpb25zID0zRCBvcHRpb25z OwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBkZWZlcnJlZCBwcm9jZXNz aW5nIHF1ZXVlIGhhbmRsZXIKLSAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlciByZWR1Y2VzIHRo ZSBudW1iZXIgb2YgcmVxdWVzdHMgdG8gdGhlIGFwaSBieSBmPQppbHRlcmluZyByZWR1bmRhbnQg cmVxdWVzdHMKLSAgICAgICAgICAgIHRoaXMuZGVmZXJyZWQgPTNEIG5ldyBEZWZlcnJlZCgpOwot ICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIHNldCBlbGVtZW50Ci0gICAgICAgICAgICB0 aGlzLnNldEVsZW1lbnQoJzxkaXYvPicpOwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8v IGFkZCB0byBtYWluIGVsZW1lbnQKLSAgICAgICAgICAgICQodGhpcy5jb250YWluZXIpLmFwcGVu ZCh0aGlzLiRlbCk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gYnVpbGQgdGhpcyBm b3JtCi0gICAgICAgICAgICB0aGlzLl9idWlsZEZvcm0oKTsKLSAgICAgICAgfSwKLSAgICAgICA9 MjAKLSAgICAgICAgLyoqIFNob3dzIHRoZSBmaW5hbCBtZXNzYWdlICh1c3VhbGx5IHVwb24gc3Vj Y2Vzc2Z1bCBqb2Igc3VibWlzc2lvPQpuKQotICAgICAgICAqLwotICAgICAgICByZWNpZXB0OiBm dW5jdGlvbigkZWwpIHsKLSAgICAgICAgICAgICQodGhpcy5jb250YWluZXIpLmVtcHR5KCk7Ci0g ICAgICAgICAgICAkKHRoaXMuY29udGFpbmVyKS5hcHBlbmQoJGVsKTsKLSAgICAgICAgfSwKLSAg ICAgICAgICAgICAgID0yMAotICAgICAgICAvKiogSGlnaGxpZ2h0IGFuZCBzY3JvbGwgdG8gaW5w dXQgZWxlbWVudCAoY3VycmVudGx5IG9ubHkgdXNlZCBmb3I9CiBlcnJvciBub3RpZmljYXRpb25z KQotICAgICAgICAqLwotICAgICAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uIChpbnB1dF9pZCwgbWVz c2FnZSwgc2lsZW50KSB7Ci0gICAgICAgICAgICAvLyBnZXQgaW5wdXQgZmllbGQKLSAgICAgICAg ICAgIHZhciBpbnB1dF9lbGVtZW50ID0zRCB0aGlzLmVsZW1lbnRfbGlzdFtpbnB1dF9pZF07Ci0g ICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gY2hlY2sgaW5wdXQgZWxlbWVudAotICAgICAg ICAgICAgaWYgKGlucHV0X2VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBtYXJrIGVycm9y Ci0gICAgICAgICAgICAgICAgaW5wdXRfZWxlbWVudC5lcnJvcihtZXNzYWdlIHx8ICdQbGVhc2Ug dmVyaWZ5IHRoaXMgcGFyYW1ldD0KZXIuJyk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAg ICAgIC8vIHNjcm9sbCB0byBmaXJzdCBpbnB1dCBlbGVtZW50Ci0gICAgICAgICAgICAgICAgaWYg KCFzaWxlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmNvbnRhaW5lcikuYW5pbWF0 ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IGlucHV0X2VsZW1lbnQuJGVs Lm9mZnNldCgpLnRvcCAtIDIwCi0gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgVG9vbEZvcm1CYXNlLnByb3Rv dHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICAgICAgIH0sCiAgICAgICAg PTIwCiAgICAgICAgIC8qKiBCdWlsZHMgYSBuZXcgbW9kZWwgdGhyb3VnaCBhcGkgY2FsbCBhbmQg cmVjcmVhdGVzIHRoZSBlbnRpcmUgZj0Kb3JtCkBAIC0yNTAsMjU2ICsxOTksNiBAQAogICAgICAg ICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICA9MjAKLSAgICAgICAgLyoqIE1h aW4gdG9vbCBmb3JtIGJ1aWxkIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNl IGEgPQpuZXcgbW9kZWwgaXMgYXZhaWxhYmxlLgotICAgICAgICAqLwotICAgICAgICBfYnVpbGRG b3JtOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8vIGxpbmsgdGhpcwotICAgICAgICAgICAg dmFyIHNlbGYgPTNEIHRoaXM7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gcmVzZXQg ZXZlbnRzCi0gICAgICAgICAgICB0aGlzLm9mZigncmVmcmVzaCcpOwotICAgICAgICAgICAgdGhp cy5vZmYoJ3Jlc2V0Jyk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gcmVzZXQgZmll bGQgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhlIGlucHV0IGZpZWxkIGVsZW1lbnRzCi0gICAgICAg ICAgICB0aGlzLmZpZWxkX2xpc3QgPTNEIHt9OwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAg IC8vIHJlc2V0IHNlcXVlbnRpYWwgaW5wdXQgZGVmaW5pdGlvbiBsaXN0LCB3aGljaCBjb250YWlu cyB0aGUgPQppbnB1dCBkZWZpbml0aW9ucyBhcyBwcm92aWRlZCBmcm9tIHRoZSBhcGkKLSAgICAg ICAgICAgIHRoaXMuaW5wdXRfbGlzdCA9M0Qge307Ci0gICAgICAgICAgID0yMAotICAgICAgICAg ICAgLy8gcmVzZXQgaW5wdXQgZWxlbWVudCBsaXN0LCB3aGljaCBjb250YWlucyB0aGUgZG9tIGVs ZW1lbnRzIG89CmYgZWFjaCBpbnB1dCBlbGVtZW50IChpbmNsdWRlcyBhbHNvIHRoZSBpbnB1dCBm aWVsZCkKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudF9saXN0ID0zRCB7fTsKLSAgICAgICAgICAg PTIwCi0gICAgICAgICAgICAvLyBjcmVhdGVzIGEgdHJlZS9qc29uIGRhdGEgc3RydWN0dXJlIGZy b20gdGhlIGlucHV0IGZvcm0KLSAgICAgICAgICAgIHRoaXMudHJlZSA9M0QgbmV3IFRvb2xUcmVl KHRoaXMpOwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIGNyZWF0ZXMgdGhlIGpvYiBo YW5kbGVyCi0gICAgICAgICAgICB0aGlzLmpvYl9oYW5kbGVyID0zRCBuZXcgVG9vbEpvYnModGhp cyk7Ci0KLSAgICAgICAgICAgIC8vIHJlcXVlc3QgaGlzdG9yeSBjb250ZW50IGFuZCBidWlsZCBm b3JtCi0gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPTNEIG5ldyBUb29sQ29udGVudCh0aGlzKTsK LSAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBsaW5rIG1vZGVsIG9wdGlvbnMKLSAgICAg ICAgICAgIHZhciBvcHRpb25zID0zRCB0aGlzLm9wdGlvbnM7Ci0gICAgICAgICAgID0yMAotICAg ICAgICAgICAgLy8gY3JlYXRlIHVpIGVsZW1lbnRzCi0gICAgICAgICAgICB0aGlzLl9yZW5kZXJG b3JtKG9wdGlvbnMpOwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIHJlYnVpbGQgdGhl IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgIHRoaXMudHJlZS5maW5hbGl6 ZSgpOwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIHNob3cgZXJyb3JzCi0gICAgICAg ICAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXJyb3JfbWVz c2FnZXMgPTNEIHRoaXMudHJlZS5tYXRjaFJlc3BvbnNlKG9wdGlvbnMuZXJyPQpvcnMpOwotICAg ICAgICAgICAgICAgIGZvciAodmFyIGlucHV0X2lkIGluIGVycm9yX21lc3NhZ2VzKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KGlucHV0X2lkLCBlcnJvcl9tZXNzYWdlc1tp bnB1dF9pZF0sIHRydT0KZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIGFkZCByZWZyZXNoIGxpc3RlbmVyCi0gICAgICAg ICAgICB0aGlzLm9uKCdyZWZyZXNoJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8g YnkgdXNpbmcvcmVzZXRpbmcgdGhlIGRlZmVycmVkIGFqYXggcXVldWUgdGhlIG51bWJlciBvZj0K IHJlZHVuZGFudCBjYWxscyBpcyByZWR1Y2VkCi0gICAgICAgICAgICAgICAgc2VsZi5kZWZlcnJl ZC5yZXNldCgpOwotICAgICAgICAgICAgICAgIHNlbGYuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlv bigpe3NlbGYuX3VwZGF0ZU1vZGVsKCl9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICA9 MjAKLSAgICAgICAgICAgIC8vIGFkZCByZXNldCBsaXN0ZW5lcgotICAgICAgICAgICAgdGhpcy5v bigncmVzZXQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRo aXMuZWxlbWVudF9saXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudF9saXN0 W2ldLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg IH0sCi0KLSAgICAgICAgLyoqIFJlbmRlcnMgdGhlIFVJIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB0 aGUgZm9ybQotICAgICAgICAqLwotICAgICAgICBfcmVuZGVyRm9ybTogZnVuY3Rpb24ob3B0aW9u cykgewotICAgICAgICAgICAgLy8gbGluayB0aGlzCi0gICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKLSAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBjcmVhdGUgbWVzc2FnZSB2aWV3 Ci0gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPTNEIG5ldyBVaS5NZXNzYWdlKCk7Ci0gICAgICAg ICAgID0yMAotICAgICAgICAgICAgLy8gYnV0dG9uIGZvciB2ZXJzaW9uIHNlbGVjdGlvbgotICAg ICAgICAgICAgdmFyIHJlcXVpcmVtZW50c19idXR0b24gPTNEIG5ldyBVaS5CdXR0b25JY29uKHsK LSAgICAgICAgICAgICAgICBpY29uICAgIDogJ2ZhLWluZm8tY2lyY2xlJywKLSAgICAgICAgICAg ICAgICB0aXRsZSAgIDogJ1JlcXVpcmVtZW50cycsCi0gICAgICAgICAgICAgICAgdG9vbHRpcCA6 ICdEaXNwbGF5IHRvb2wgcmVxdWlyZW1lbnRzJywKLSAgICAgICAgICAgICAgICBvbmNsaWNrIDog ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPTNEIHRydWU7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UudXBkYXRlKHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZXJzaXN0ZW50ICA6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg bWVzc2FnZSAgICAgOiBUb29sVGVtcGxhdGUucmVxdWlyZW1lbnRzKG9wdGlvbj0KcyksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgOiAnaW5mbycKLSAgICAgICAgICAg ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0zRCBmYWxzZTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYubWVzc2FnZS51cGRhdGUoewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1lc3NhZ2UgICAgIDogJycKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg ICAgICBpZiAoIW9wdGlvbnMucmVxdWlyZW1lbnRzIHx8IG9wdGlvbnMucmVxdWlyZW1lbnRzLmxl bmd0aCA9M0Q9Cj0zRCAwKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzX2J1dHRvbi4k ZWwuaGlkZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8v IGJ1dHRvbiBmb3IgdmVyc2lvbiBzZWxlY3Rpb24KLSAgICAgICAgICAgIHZhciB2ZXJzaW9uc19i dXR0b24gPTNEIG5ldyBVaS5CdXR0b25NZW51KHsKLSAgICAgICAgICAgICAgICBpY29uICAgIDog J2ZhLWN1YmVzJywKLSAgICAgICAgICAgICAgICB0aXRsZSAgIDogJ1ZlcnNpb25zJywKLSAgICAg ICAgICAgICAgICB0b29sdGlwIDogJ1NlbGVjdCBhbm90aGVyIHRvb2wgdmVyc2lvbicKLSAgICAg ICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyc2lvbnMgJiYgb3B0aW9ucy52 ZXJzaW9ucy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRp b25zLnZlcnNpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0zRCBvcHRp b25zLnZlcnNpb25zW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbiAhPTNEIG9w dGlvbnMudmVyc2lvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnNfYnV0dG9u LmFkZE1lbnUoewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICAgOiAnU3dpdGNo IHRvICcgKyB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gOiB2 ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtY3ViZScs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljayA6IGZ1bmN0aW9uKCkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIHdlIHVwZGF0ZSB0aGUgdG9vbCB2 ZXJzaW9uIChzb21lIHQ9Cm9vbHMgZW5jb2RlIHRoZSB2ZXJzaW9uIGFsc28gaW4gdGhlIGlkKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmlkID0zRCBvcHRpb25zLmlk LnJlcGxhY2Uob3B0aW9ucy49CnZlcnNpb24sIHRoaXMudmVyc2lvbik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudmVyc2lvbiA9M0QgdGhpcy52ZXJzaW9uOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0yMAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyByZWJ1aWxkIHRoZSBtb2RlbCBhbmQgZm9ybQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmRlZmVycmVkLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpe3NlbGYuX2J1aT0K bGRNb2RlbCgpfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZlcnNpb25zX2J1dHRvbi4k ZWwuaGlkZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8v IGJ1dHRvbiBtZW51Ci0gICAgICAgICAgICB2YXIgbWVudV9idXR0b24gPTNEIG5ldyBVaS5CdXR0 b25NZW51KHsKLSAgICAgICAgICAgICAgICBpY29uICAgIDogJ2ZhLWNhcmV0LWRvd24nLAotICAg ICAgICAgICAgICAgIHRpdGxlICAgOiAnT3B0aW9ucycsCi0gICAgICAgICAgICAgICAgdG9vbHRp cCA6ICdWaWV3IGF2YWlsYWJsZSBvcHRpb25zJwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg ID0yMAotICAgICAgICAgICAgLy8gY29uZmlndXJlIGJ1dHRvbiBzZWxlY3Rpb24KLSAgICAgICAg ICAgIGlmKG9wdGlvbnMuYmlvc3Rhcl91cmwpIHsKLSAgICAgICAgICAgICAgICAvLyBhZGQgcXVl c3Rpb24gb3B0aW9uCi0gICAgICAgICAgICAgICAgbWVudV9idXR0b24uYWRkTWVudSh7Ci0gICAg ICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtcXVlc3Rpb24tY2lyY2xlJywKLSAgICAgICAg ICAgICAgICAgICAgdGl0bGUgICA6ICdRdWVzdGlvbj8nLAotICAgICAgICAgICAgICAgICAgICB0 b29sdGlwIDogJ0FzayBhIHF1ZXN0aW9uIGFib3V0IHRoaXMgdG9vbCAoQmlvc3RhciknLAotICAg ICAgICAgICAgICAgICAgICBvbmNsaWNrIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB3aW5kb3cub3BlbihvcHRpb25zLmJpb3N0YXJfdXJsICsgJy9wL25ldy9wb3N0Lycp OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg ICAgICA9MjAKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgc2VhcmNoIGJ1dHRvbgotICAgICAg ICAgICAgICAgIG1lbnVfYnV0dG9uLmFkZE1lbnUoewotICAgICAgICAgICAgICAgICAgICBpY29u ICAgIDogJ2ZhLXNlYXJjaCcsCi0gICAgICAgICAgICAgICAgICAgIHRpdGxlICAgOiAnU2VhcmNo JywKLSAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA6ICdTZWFyY2ggaGVscCBmb3IgdGhpcyB0 b29sIChCaW9zdGFyKScsCi0gICAgICAgICAgICAgICAgICAgIG9uY2xpY2sgOiBmdW5jdGlvbigp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKG9wdGlvbnMuYmlvc3Rhcl91 cmwgKyAnL3QvJyArIG9wdGlvbnMuPQppZCArICcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgID0yMAotICAg ICAgICAgICAgLy8gY3JlYXRlIHNoYXJlIGJ1dHRvbgotICAgICAgICAgICAgbWVudV9idXR0b24u YWRkTWVudSh7Ci0gICAgICAgICAgICAgICAgaWNvbiAgICA6ICdmYS1zaGFyZScsCi0gICAgICAg ICAgICAgICAgdGl0bGUgICA6ICdTaGFyZScsCi0gICAgICAgICAgICAgICAgdG9vbHRpcCA6ICdT aGFyZSB0aGlzIHRvb2wnLAotICAgICAgICAgICAgICAgIG9uY2xpY2sgOiBmdW5jdGlvbigpIHsK LSAgICAgICAgICAgICAgICAgICAgcHJvbXB0KCdDb3B5IHRvIGNsaXBib2FyZDogQ3RybCtDLCBF bnRlcicsIHdpbmRvdy5sb2NhPQp0aW9uLm9yaWdpbiArIGdhbGF4eV9jb25maWcucm9vdCArICdy b290P3Rvb2xfaWQ9M0QnICsgb3B0aW9ucy5pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfSk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gYWRkIGFkbWluIG9wZXJh dGlvbnMKLSAgICAgICAgICAgIGlmICh0aGlzLmlzX2FkbWluKSB7Ci0gICAgICAgICAgICAgICAg Ly8gY3JlYXRlIGRvd25sb2FkIGJ1dHRvbgotICAgICAgICAgICAgICAgIG1lbnVfYnV0dG9uLmFk ZE1lbnUoewotICAgICAgICAgICAgICAgICAgICBpY29uICAgIDogJ2ZhLWRvd25sb2FkJywKLSAg ICAgICAgICAgICAgICAgICAgdGl0bGUgICA6ICdEb3dubG9hZCcsCi0gICAgICAgICAgICAgICAg ICAgIHRvb2x0aXAgOiAnRG93bmxvYWQgdGhpcyB0b29sJywKLSAgICAgICAgICAgICAgICAgICAg b25jbGljayA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lmxv Y2F0aW9uLmhyZWYgPTNEIGdhbGF4eV9jb25maWcucm9vdCArICdhcGk9Ci90b29scy8nICsgb3B0 aW9ucy5pZCArICcvZG93bmxvYWQnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8g Y3JlYXRlIHRvb2wgZm9ybSBzZWN0aW9uCi0gICAgICAgICAgICB0aGlzLnNlY3Rpb24gPTNEIG5l dyBUb29sU2VjdGlvbi5WaWV3KHNlbGYsIHsKLSAgICAgICAgICAgICAgICBpbnB1dHMgOiBvcHRp b25zLmlucHV0cywKLSAgICAgICAgICAgICAgICBjbHMgICAgOiAndWktdGFibGUtcGxhaW4nCi0g ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBzd2l0Y2ggdG8g Y2xhc3NpYyB0b29sIGZvcm0gbWFrbyBpZiB0aGUgZm9ybSBkZWZpbml0aW9uIGlzID0KaW5jb21w YXRpYmxlCi0gICAgICAgICAgICBpZiAodGhpcy5pbmNvbXBhdGlibGUpIHsKLSAgICAgICAgICAg ICAgICB0aGlzLiRlbC5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgJCgnI3Rvb2wtZm9ybS1jbGFz c2ljJykuc2hvdygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBjcmVhdGUgcG9ydGxldAotICAgICAgICAgICAg dGhpcy5wb3J0bGV0ID0zRCBuZXcgUG9ydGxldC5WaWV3KHsKLSAgICAgICAgICAgICAgICBpY29u ICAgIDogJ2ZhLXdyZW5jaCcsCi0gICAgICAgICAgICAgICAgdGl0bGUgICA6ICc8Yj4nICsgb3B0 aW9ucy5uYW1lICsgJzwvYj4gJyArIG9wdGlvbnMuZGVzY3JpcD0KdGlvbiArICcgKEdhbGF4eSBU b29sIFZlcnNpb24gJyArIG9wdGlvbnMudmVyc2lvbiArICcpJywKLSAgICAgICAgICAgICAgICBj bHMgICAgIDogJ3VpLXBvcnRsZXQtc2xpbScsCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9uczog ewotICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgICAgOiByZXF1aXJlbWVudHNfYnV0 dG9uLAotICAgICAgICAgICAgICAgICAgICBtZW51ICAgICAgICAgICAgOiBtZW51X2J1dHRvbiwK LSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgICAgICAgIDogdmVyc2lvbnNfYnV0dG9uCi0g ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBidXR0b25zOiB7Ci0gICAgICAgICAg ICAgICAgICAgIGV4ZWN1dGUgOiBuZXcgVWkuQnV0dG9uKHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGljb24gICAgIDogJ2ZhLWNoZWNrJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0 aXAgIDogJ0V4ZWN1dGU6ICcgKyBvcHRpb25zLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICB0aXRsZSAgICA6ICdFeGVjdXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNscyAgICAg IDogJ2J0biBidG4tcHJpbWFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyA6 ICdjbGVhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrICA6IGZ1bmN0aW9uKCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuam9iX2hhbmRsZXIuc3VibWl0KCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAg ICAgLy8gYXBwZW5kIG1lc3NhZ2UKLSAgICAgICAgICAgIHRoaXMucG9ydGxldC5hcHBlbmQodGhp cy5tZXNzYWdlLiRlbCwgdHJ1ZSk7Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gYXBw ZW5kIHRvb2wgc2VjdGlvbgotICAgICAgICAgICAgdGhpcy5wb3J0bGV0LmFwcGVuZCh0aGlzLnNl Y3Rpb24uJGVsKTsKLSAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBzdGFydCBmb3JtCi0g ICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpOwotICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5k KHRoaXMucG9ydGxldC4kZWwpOwotICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIGFwcGVu ZCBoZWxwCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5oZWxwICE9M0QgJycpIHsKLSAgICAgICAg ICAgICAgICB0aGlzLiRlbC5hcHBlbmQoVG9vbFRlbXBsYXRlLmhlbHAob3B0aW9ucy5oZWxwKSk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAotICAgICAgICAgICAgLy8gYXBwZW5kIGNp dGF0aW9ucwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2l0YXRpb25zKSB7Ci0gICAgICAgICAg ICAgICAgdmFyICRjaXRhdGlvbnMgPTNEICQoJzxkaXYvPicpOwotICAgICAgICAgICAgICAgIHZh ciBjaXRhdGlvbnMgPTNEIG5ldyBDaXRhdGlvbk1vZGVsLlRvb2xDaXRhdGlvbkNvbGxlY3Rpb249 CigpOwotICAgICAgICAgICAgICAgIGNpdGF0aW9ucy50b29sX2lkID0zRCBvcHRpb25zLmlkOwot ICAgICAgICAgICAgICAgIHZhciBjaXRhdGlvbl9saXN0X3ZpZXcgPTNEIG5ldyBDaXRhdGlvblZp ZXcuQ2l0YXRpb25MaXN0Vmk9CmV3KHsgZWw6ICRjaXRhdGlvbnMsIGNvbGxlY3Rpb246IGNpdGF0 aW9ucyB9ICk7Ci0gICAgICAgICAgICAgICAgY2l0YXRpb25fbGlzdF92aWV3LnJlbmRlcigpOwot ICAgICAgICAgICAgICAgIGNpdGF0aW9ucy5mZXRjaCgpOwotICAgICAgICAgICAgICAgIHRoaXMu JGVsLmFwcGVuZCgkY2l0YXRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgPTIwCi0g ICAgICAgICAgICAvLyBzaG93IG1lc3NhZ2UgaWYgYXZhaWxhYmxlIGluIG1vZGVsCi0gICAgICAg ICAgICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdl LnVwZGF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbnQgIDogdHJ1ZSwKLSAgICAg ICAgICAgICAgICAgICAgc3RhdHVzICAgICAgOiAnd2FybmluZycsCi0gICAgICAgICAgICAgICAg ICAgIG1lc3NhZ2UgICAgIDogb3B0aW9ucy5tZXNzYWdlCi0gICAgICAgICAgICAgICAgfSk7Ci0g ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9KTsKPTIwCgpkaWZmIC1yIDUzMDVlNGQxYzk5 ZDQ3OGFkYTVmZDYyOTMwZTQyODc1ZGE0OGZkMWMgLXIgNmE4YTc5ZjliNmQ1MmJmOTZlMjJkOTQ9 Cjc0MGY5YzM3YjQ0NGQ4ZDEyIGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMt am9icy5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWpvYnMu anMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1qb2JzLmpzCkBA IC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgID0yMAogICAgICAgICAg ICAgLy8gdmFsaWRhdGUgbm9uLW9wdGlvbmFsIGZpZWxkcwotICAgICAgICAgICAgaWYgKCFpbnB1 dF9kZWYub3B0aW9uYWwgJiYgaW5wdXRfZmllbGQudmFsaWRhdGUgJiYgIWlucHV0X2ZpZWw9CmQu dmFsaWRhdGUoKSkgeworICAgICAgICAgICAgaWYgKCFpbnB1dF9kZWYub3B0aW9uYWwgJiYgaW5w dXRfdmFsdWUgPTNEPTNEIG51bGwpIHsKICAgICAgICAgICAgICAgICB0aGlzLmFwcC5oaWdobGln aHQoaW5wdXRfaWQpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg IH0KCmRpZmYgLXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2 YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50L2dhbGF4eS9z Y3JpcHRzL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2Ny aXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcworKysgYi9jbGllbnQvZ2FsYXh5L3Njcmlw dHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKQEAgLTM4Miw2ICszODIsMTEgQEAKICAgICAg ICAgLyoqIERhdGEgaW5wdXQgZmllbGQKICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkRGF0YSA6 IGZ1bmN0aW9uKGlucHV0X2RlZikgeworICAgICAgICAgICAgaWYgKHRoaXMuYXBwLndvcmtmbG93 KSB7CisgICAgICAgICAgICAgICAgdmFyIGV4dGVuc2lvbnMgPTNEIFV0aWxzLnRleHRpZnkoaW5w dXRfZGVmLmV4dGVuc2lvbnMudG9TdD0KcmluZygpKTsKKyAgICAgICAgICAgICAgICBpbnB1dF9k ZWYuaW5mbyA9M0QgJ0RhdGEgaW5wdXQgXCcnICsgaW5wdXRfZGVmLm5hbWUgKyAnXCcgPQooJyAr IGV4dGVuc2lvbnMgKyAnKSc7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkSGlk ZGVuKGlucHV0X2RlZik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0Q29udGVudC5WaWV3KHRoaXMuYXBw LCB7CiAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5p ZCwKQEAgLTM5OCw2ICs0MDMsMTQgQEAKICAgICAgICAgLyoqIFNlbGVjdC9DaGVja2JveC9SYWRp byBvcHRpb25zIGZpZWxkCiAgICAgICAgICovCiAgICAgICAgIF9maWVsZFNlbGVjdCA6IGZ1bmN0 aW9uIChpbnB1dF9kZWYpIHsKKyAgICAgICAgICAgIC8vIHNob3cgdGV4dCBmaWVsZCBpbiB3b3Jr ZmxvdworICAgICAgICAgICAgaWYgKHRoaXMuYXBwLndvcmtmbG93ICYmIGlucHV0X2RlZi5pc19k eW5hbWljKSB7CisgICAgICAgICAgICAgICAgaWYgKCFVdGlscy52YWxpZGF0ZShpbnB1dF9kZWYu dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0X2RlZi52YWx1ZSA9M0QgJyc7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWVsZFRleHQo aW5wdXRfZGVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAv LyBjb25maWd1cmUgb3B0aW9ucyBmaWVsZHMKICAgICAgICAgICAgIHZhciBvcHRpb25zID0zRCBb XTsKICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gaW5wdXRfZGVmLm9wdGlvbnMpIHsKQEAgLTQ3 NSw3ICs0ODgsOCBAQAogICAgICAgICAqLwogICAgICAgICBfZmllbGRIaWRkZW4gOiBmdW5jdGlv bihpbnB1dF9kZWYpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgVWkuSGlkZGVuKHsKLSAgICAg ICAgICAgICAgICBpZCAgICAgIDogJ2ZpZWxkLScgKyBpbnB1dF9kZWYuaWQKKyAgICAgICAgICAg ICAgICBpZCAgICAgIDogJ2ZpZWxkLScgKyBpbnB1dF9kZWYuaWQsCisgICAgICAgICAgICAgICAg aW5mbyAgICA6IGlucHV0X2RlZi5pbmZvCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAg ICAgICA9MjAKCmRpZmYgLXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQx YyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWxlY3QtY29udGVudC5qcwotLS0gYS9jbGll bnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlbGVjdC1jb250ZW50LmpzCisrKyBi L2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VsZWN0LWNvbnRlbnQuanMK QEAgLTM2LDE0ICszNiw3IEBACiAgICAgICAgIHRoaXMubGlzdCA9M0Qge307CiAgICAgICAgPTIw CiAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2VzCi0gICAgICAgIHZhciBleHRlbnNpb25zID0zRCBv cHRpb25zLmV4dGVuc2lvbnMudG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHsK LSAgICAgICAgICAgIGV4dGVuc2lvbnMgPTNEIGV4dGVuc2lvbnMucmVwbGFjZSgvLC9nLCAnLCAn KTsKLSAgICAgICAgICAgIHZhciBwb3MgPTNEIGV4dGVuc2lvbnMubGFzdEluZGV4T2YoJywgJyk7 Ci0gICAgICAgICAgICBpZiAocG9zICE9M0QgLTEpIHsKLSAgICAgICAgICAgICAgICBleHRlbnNp b25zID0zRCBleHRlbnNpb25zLnN1YnN0cigwLCBwb3MpICsgJyBvciAnICsgZXh0ZW5zPQppb25z LnN1YnN0cihwb3MrMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGV4 dGVuc2lvbnMgPTNEIFV0aWxzLnRleHRpZnkob3B0aW9ucy5leHRlbnNpb25zKTsKICAgICAgICAg dmFyIGhkYV9lcnJvciA9M0QgJ05vIGRhdGFzZXQgYXZhaWxhYmxlLic7CiAgICAgICAgIGlmIChl eHRlbnNpb25zKSB7CiAgICAgICAgICAgICBoZGFfZXJyb3IgPTNEICdObyAnICsgZXh0ZW5zaW9u cyArICcgZGF0YXNldCBhdmFpbGFibGUuJzsKCmRpZmYgLXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZk NjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdi NDQ0ZDhkMTIgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCi0t LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcworKysgYi9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKQEAgLTIsNyArMiw3 IEBACiAgICAgVGhpcyBjbGFzcyBtYXBzIHRoZSB0b29sIGZvcm0gZG9tIHRvIGFuIGFwaSBjb21w YXRpYmxlIGphdmFzY3JpcHQgZGljdD0KaW9uYXJ5LgogKi8KIC8vIGRlcGVuZGVuY2llcwotZGVm aW5lKFtdLCBmdW5jdGlvbigpIHsKK2RlZmluZShbJ3V0aWxzL3V0aWxzJ10sIGZ1bmN0aW9uKFV0 aWxzKSB7Cj0yMAogLy8gdG9vbCBmb3JtIHRyZWUKIHJldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRl bmQoewpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9MjAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCB2YWx1ZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmllbGQuc2tpcCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQub3B0aW9uYWwgJiYgZmllbGQudmFsaWRhdGUg JiYgIWY9CmllbGQudmFsaWRhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZmllbGQudmFsaWRhdGUgJiYgIWZpZWxkLnZhbGlkYXRlKHZhbHU9CmUpKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgbnVsbDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGQgKGpvYl9pbnB1dF9pZCwgaW5wdXQuaWQsIHZhbHVlKTsKCmRpZmYgLXIgNTMwNWU0ZDFj OTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5 ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy91aS91aS1taXNj LmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvdWktbWlzYy5qcworKysgYi9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3VpLW1pc2MuanMKQEAgLTQxMiw3ICs0MTIsNyBA QAogICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgIC8vIGNvbmZp Z3VyZSBvcHRpb25zCiAgICAgICAgIHRoaXMub3B0aW9ucyA9M0Qgb3B0aW9uczsKLSAgICAgICAg ICAgPTIwCisgICAgICAgPTIwCiAgICAgICAgIC8vIGNyZWF0ZSBuZXcgZWxlbWVudAogICAgICAg ICB0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7CiAgICAgICAg PTIwCkBAIC00MjUsMTQgKzQyNSwyMCBAQAogICAgIC8vIHZhbHVlCiAgICAgdmFsdWUgOiBmdW5j dGlvbiAobmV3X3ZhbCkgewogICAgICAgICBpZiAobmV3X3ZhbCAhPTNEPTNEIHVuZGVmaW5lZCkg ewotICAgICAgICAgICAgdGhpcy4kZWwudmFsKG5ld192YWwpOworICAgICAgICAgICAgdGhpcy4k KCdoaWRkZW4nKS52YWwobmV3X3ZhbCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMu JGVsLnZhbCgpOworICAgICAgICByZXR1cm4gdGhpcy4kKCdoaWRkZW4nKS52YWwoKTsKICAgICB9 LAogICAgPTIwCiAgICAgLy8gZWxlbWVudAogICAgIF90ZW1wbGF0ZTogZnVuY3Rpb24ob3B0aW9u cykgewotICAgICAgICByZXR1cm4gJzxoaWRkZW4gaWQ9M0QiJyArIG9wdGlvbnMuaWQgKyAnIiB2 YWx1ZT0zRCInICsgb3B0aW9ucy52YWw9CnVlICsgJyIvPic7CisgICAgICAgIHZhciB0bXBsID0z RCAgJzxkaXYgaWQ9M0QiJyArIG9wdGlvbnMuaWQgKyAnIiA+JzsKKyAgICAgICAgaWYgKG9wdGlv bnMuaW5mbykgeworICAgICAgICAgICAgdG1wbCArPTNEICAgICAnPGxhYmVsPicgKyBvcHRpb25z LmluZm8gKyAnPC9sYWJlbD4nOworICAgICAgICB9CisgICAgICAgIHRtcGwgKz0zRCAgICAgICAg ICc8aGlkZGVuIHZhbHVlPTNEIicgKyBvcHRpb25zLnZhbHVlICsgJyIvPicgKworICAgICAgICAg ICAgICAgICAgICAnPC9kaXY+JzsKKyAgICAgICAgcmV0dXJuIHRtcGw7CiAgICAgfQogfSk7Cj0y MAoKZGlmZiAtciA1MzA1ZTRkMWM5OWQ0NzhhZGE1ZmQ2MjkzMGU0Mjg3NWRhNDhmZDFjIC1yIDZh OGE3OWY5YjZkNTJiZjk2ZTIyZDk0PQo3NDBmOWMzN2I0NDRkOGQxMiBjbGllbnQvZ2FsYXh5L3Nj cmlwdHMvbXZjL3VpL3VpLW9wdGlvbnMuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212 Yy91aS91aS1vcHRpb25zLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvdWkt b3B0aW9ucy5qcwpAQCAtMTM3LDE2ICsxMzcsNyBAQAogICAgIC8qKiBWYWxpZGF0ZSB0aGUgc2Vs ZWN0ZWQgb3B0aW9uL29wdGlvbnMKICAgICAqLwogICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpIHsK LSAgICAgICAgdmFyIGN1cnJlbnQgPTNEIHRoaXMudmFsdWUoKTsKLSAgICAgICAgaWYgKCEoY3Vy cmVudCBpbnN0YW5jZW9mIEFycmF5KSkgewotICAgICAgICAgICAgY3VycmVudCA9M0QgW2N1cnJl bnRdOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkgaW4gY3VycmVudCkgewotICAgICAg ICAgICAgaWYgKFtudWxsLCAnbnVsbCcsIHVuZGVmaW5lZF0uaW5kZXhPZihjdXJyZW50W2ldKSA+ IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gVXRpbHMudmFsaWRh dGUodGhpcy52YWx1ZSgpKTsKICAgICB9LAogICAgPTIwCiAgICAgLyoqIFdhaXQgbWVzc2FnZSBk dXJpbmcgcmVxdWVzdCBwcm9jZXNzaW5nCgpkaWZmIC1yIDUzMDVlNGQxYzk5ZDQ3OGFkYTVmZDYy OTMwZTQyODc1ZGE0OGZkMWMgLXIgNmE4YTc5ZjliNmQ1MmJmOTZlMjJkOTQ9Cjc0MGY5YzM3YjQ0 NGQ4ZDEyIGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvdWktc2VsZWN0LWRlZmF1bHQuanMK LS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy91aS91aS1zZWxlY3QtZGVmYXVsdC5qcwor KysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3VpLXNlbGVjdC1kZWZhdWx0LmpzCkBA IC05NiwxNiArOTYsNyBAQAogICAgIC8qKiBWYWxpZGF0ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24K ICAgICAqLwogICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGN1cnJlbnQg PTNEIHRoaXMudmFsdWUoKTsKLSAgICAgICAgaWYgKCEoY3VycmVudCBpbnN0YW5jZW9mIEFycmF5 KSkgewotICAgICAgICAgICAgY3VycmVudCA9M0QgW2N1cnJlbnRdOwotICAgICAgICB9Ci0gICAg ICAgIGZvciAodmFyIGkgaW4gY3VycmVudCkgewotICAgICAgICAgICAgaWYgKFtudWxsLCAnbnVs bCcsIHVuZGVmaW5lZF0uaW5kZXhPZihjdXJyZW50W2ldKSA+IC0xKSB7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy biB0cnVlOworICAgICAgICByZXR1cm4gVXRpbHMudmFsaWRhdGUodGhpcy52YWx1ZSgpKTsKICAg ICB9LAogICAgPTIwCiAgICAgLyoqIFJldHVybiB0aGUgbGFiZWwvdGV4dCBvZiB0aGUgY3VycmVu dCBzZWxlY3Rpb24KCmRpZmYgLXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4 ZmQxYyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgY2xpZW50 L2dhbGF4eS9zY3JpcHRzL212Yy91cGxvYWQvdXBsb2FkLXZpZXcuanMKLS0tIGEvY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy91cGxvYWQvdXBsb2FkLXZpZXcuanMKKysrIGIvY2xpZW50L2dhbGF4 eS9zY3JpcHRzL212Yy91cGxvYWQvdXBsb2FkLXZpZXcuanMKQEAgLTEwNCw3ICsxMDQsNyBAQAog ICAgICAgICB9KTsKICAgICAgICA9MjAKICAgICAgICAgLy8gZGVmaW5lIGxvY2F0aW9uCi0gICAg ICAgICQoJyNsZWZ0IC51bmlmaWVkLXBhbmVsLWhlYWRlci1pbm5lcicpLmFwcGVuZCgobmV3IFVw bG9hZEJ1dHRvbi5WaT0KZXcodGhpcy51aV9idXR0b24pKS4kZWwpOworICAgICAgICAkKCcud2l0 aC11cGxvYWQtYnV0dG9uJykuYXBwZW5kKChuZXcgVXBsb2FkQnV0dG9uLlZpZXcodGhpcy51aV9i dXQ9CnRvbikpLiRlbCk7CiAgICAgICAgPTIwCiAgICAgICAgIC8vIGxvYWQgZXh0ZW5zaW9uCiAg ICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwoKZGlmZiAtciA1MzA1ZTRkMWM5OWQ0NzhhZGE1ZmQ2 MjkzMGU0Mjg3NWRhNDhmZDFjIC1yIDZhOGE3OWY5YjZkNTJiZjk2ZTIyZDk0PQo3NDBmOWMzN2I0 NDRkOGQxMiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvdXRpbHMvdXRpbHMuanMKLS0tIGEvY2xpZW50 L2dhbGF4eS9zY3JpcHRzL3V0aWxzL3V0aWxzLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0 cy91dGlscy91dGlscy5qcwpAQCAtMTUsNiArMTUsNDAgQEAKIH07Cj0yMAogLyoqCisgKiBWYWxp ZGF0ZSBhdG9taWMgdmFsdWVzIG9yIGxpc3Qgb2YgdmFsdWVzCisgKiB1c3VhbGx5IHVzZWQgZm9y IHNlbGVjdGFibGUgb3B0aW9ucworICogQHBhcmFte1N0cmluZ30gICB2YWx1ZSAtIFZhbHVlIG9y IGxpc3QgdG8gYmUgdmFsaWRhdGVkCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlICh2YWx1ZSkgewor ICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7CisgICAgICAgIHZhbHVlID0zRCBb dmFsdWVdOworICAgIH0KKyAgICBmb3IgKHZhciBpIGluIHZhbHVlKSB7CisgICAgICAgIGlmIChb J05vbmUnLCBudWxsLCAnbnVsbCcsIHVuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLmluZGV4T2YodmFs dWVbaT0KXSkgPiAtMSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg ICAgfQorICAgIHJldHVybiB0cnVlOworfTsKKworLyoqCisgKiBDb252ZXJ0IGxpc3QgdG8gcHJl dHR5IHN0cmluZworICogQHBhcmFte1N0cmluZ30gICBsc3QgLSBMaXN0IG9mIHN0cmluZ3MgdG8g YmUgY29udmVydGVkIGluIGh1bWFuIHJlYWRhYmw9CmUgbGlzdCBzZW50ZW5jZQorICovCitmdW5j dGlvbiB0ZXh0aWZ5KGxzdCkgeworICAgIHZhciBsc3QgPTNEIGxzdC50b1N0cmluZygpOworICAg IGlmIChsc3QpIHsKKyAgICAgICAgbHN0ID0zRCBsc3QucmVwbGFjZSgvLC9nLCAnLCAnKTsKKyAg ICAgICAgdmFyIHBvcyA9M0QgbHN0Lmxhc3RJbmRleE9mKCcsICcpOworICAgICAgICBpZiAocG9z ICE9M0QgLTEpIHsKKyAgICAgICAgICAgIGxzdCA9M0QgbHN0LnN1YnN0cigwLCBwb3MpICsgJyBv ciAnICsgbHN0LnN1YnN0cihwb3MrMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxzdDsK KyAgICB9CisgICAgcmV0dXJuICcnOworfTsKKworLyoqCiAgKiBSZXF1ZXN0IGhhbmRsZXIgZm9y IEdFVAogICogQHBhcmFte1N0cmluZ30gICB1cmwgICAgIC0gVXJsIHJlcXVlc3QgaXMgbWFkZSB0 bwogICogQHBhcmFte0Z1bmN0aW9ufSBzdWNjZXNzIC0gQ2FsbGJhY2sgb24gc3VjY2VzcwpAQCAt MjEyLDcgKzI0Niw5IEBACiAgICAgdGltZTogdGltZSwKICAgICB3cmFwOiB3cmFwLAogICAgIHJl cXVlc3Q6IHJlcXVlc3QsCi0gICAgc2FuaXRpemU6IHNhbml0aXplCisgICAgc2FuaXRpemU6IHNh bml0aXplLAorICAgIHRleHRpZnk6IHRleHRpZnksCisgICAgdmFsaWRhdGU6IHZhbGlkYXRlCiB9 Owo9MjAKIH0pOwoKZGlmZiAtciA1MzA1ZTRkMWM5OWQ0NzhhZGE1ZmQ2MjkzMGU0Mjg3NWRhNDhm ZDFjIC1yIDZhOGE3OWY5YjZkNTJiZjk2ZTIyZDk0PQo3NDBmOWMzN2I0NDRkOGQxMiBsaWIvZ2Fs YXh5L3Rvb2xzL19faW5pdF9fLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvX19pbml0X18ucHkK KysrIGIvbGliL2dhbGF4eS90b29scy9fX2luaXRfXy5weQpAQCAtMzMsNyArMzMsNyBAQAogZnJv bSBnYWxheHkudG9vbHMuYWN0aW9ucy5kYXRhX3NvdXJjZSBpbXBvcnQgRGF0YVNvdXJjZVRvb2xB Y3Rpb24KIGZyb20gZ2FsYXh5LnRvb2xzLmFjdGlvbnMuZGF0YV9tYW5hZ2VyIGltcG9ydCBEYXRh TWFuYWdlclRvb2xBY3Rpb24KIGZyb20gZ2FsYXh5LnRvb2xzLmRlcHMgaW1wb3J0IGJ1aWxkX2Rl cGVuZGVuY3lfbWFuYWdlcgotZnJvbSBnYWxheHkudG9vbHMucGFyYW1ldGVycyBpbXBvcnQgY2hl Y2tfcGFyYW0sIHBhcmFtc19mcm9tX3N0cmluZ3MsIHBhcmE9Cm1zX3RvX3N0cmluZ3MKK2Zyb20g Z2FsYXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0IHBhcmFtc190b19pbmNvbWluZywgY2hlY2tf cGFyYW0sIHBhcmFtPQpzX2Zyb21fc3RyaW5ncywgcGFyYW1zX3RvX3N0cmluZ3MKIGZyb20gZ2Fs YXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0IG91dHB1dF9jb2xsZWN0CiBmcm9tIGdhbGF4eS50 b29scy5wYXJhbWV0ZXJzLmJhc2ljIGltcG9ydCAoQmFzZVVSTFRvb2xQYXJhbWV0ZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVRvb2xQYXJhbWV0ZXIs IEhpZGRlblRvb2xQYT0KcmFtZXRlciwgTGlicmFyeURhdGFzZXRUb29sUGFyYW1ldGVyLApAQCAt MjA3Myw2ICsyMDczLDMzNiBAQAo9MjAKICAgICAgICAgcmV0dXJuIHRvb2xfZGljdAo9MjAKKyAg ICBkZWYgdG9fanNvbiAoc2VsZiwgdHJhbnMsICoqa3dkKToKKyAgICAgICAgIiIiCisgICAgICAg IFJlY3Vyc2l2ZWx5IGNyZWF0ZXMgYSB0b29sIGRpY3Rpb25hcnkgY29udGFpbmluZyByZXBlYXRz LCBkeW5hbWljID0Kb3B0aW9ucyBhbmQgdXBkYXRlZCBzdGF0ZXMuCisgICAgICAgICIiIgorICAg ICAgICBqb2JfaWQgPTNEIGt3ZC5nZXQoJ2pvYl9pZCcsIE5vbmUpCisgICAgICAgIGRhdGFzZXRf aWQgPTNEIGt3ZC5nZXQoJ2RhdGFzZXRfaWQnLCBOb25lKQorICAgICAgID0yMAorICAgICAgICAj IGxvYWQgam9iIGRldGFpbHMgaWYgcHJvdmlkZWQKKyAgICAgICAgam9iID0zRCBOb25lCisgICAg ICAgIGlmIGpvYl9pZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBqb2JfaWQg PTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggam9iX2lkICkKKyAgICAgICAgICAgICAgICBq b2IgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5Kb2IgKS5nZXQo PQogam9iX2lkICkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4Y2VwdGlvbjoKKyAg ICAgICAgICAgICAgICB0cmFucy5yZXNwb25zZS5zdGF0dXMgPTNEIDUwMAorICAgICAgICAgICAg ICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIGpvYi4nKQorICAgICAgICAgICAgICAg IHJldHVybiB7ICdlcnJvcic6ICdGYWlsZWQgdG8gcmV0cmlldmUgam9iLicgfQorICAgICAgICBl bGlmIGRhdGFzZXRfaWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YXNl dF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkKKyAgICAgICAg ICAgICAgICBkYXRhID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwu SGlzdG9yeURhPQp0YXNldEFzc29jaWF0aW9uICkuZ2V0KCBkYXRhc2V0X2lkICkKKyAgICAgICAg ICAgICAgICBpZiBub3QgKCB0cmFucy51c2VyX2lzX2FkbWluKCkgb3IgdHJhbnMuYXBwLnNlY3Vy aXR5X2FnZW50PQouY2FuX2FjY2Vzc19kYXRhc2V0KCB0cmFucy5nZXRfY3VycmVudF91c2VyX3Jv bGVzKCksIGRhdGEuZGF0YXNldCApICk6CisgICAgICAgICAgICAgICAgICAgIHRyYW5zLnJlc3Bv bnNlLnN0YXR1cyA9M0QgNTAwCisgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcignVXNlciBo YXMgbm8gYWNjZXNzIHRvIGRhdGFzZXQuJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsg J2Vycm9yJzogJ1VzZXIgaGFzIG5vIGFjY2VzcyB0byBkYXRhc2V0LicgfQorICAgICAgICAgICAg ICAgIGpvYiA9M0QgZGF0YS5jcmVhdGluZ19qb2IKKyAgICAgICAgICAgICAgICBpZiBub3Qgam9i OgorICAgICAgICAgICAgICAgICAgICB0cmFucy5yZXNwb25zZS5zdGF0dXMgPTNEIDUwMAorICAg ICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0NyZWF0aW5nIGpvYiBub3QgZm91bmQuJykKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzogJ0NyZWF0aW5nIGpvYiBub3QgZm91 bmQuJyB9CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleGNlcHRpb246CisgICAgICAg ICAgICAgICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA1MDAKKyAgICAgICAgICAgICAgICBs b2cuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgam9iIGluZm9ybWF0aW9uLicpCisgICAgICAgICAgICAg ICAgcmV0dXJuIHsgJ2Vycm9yJzogJ0ZhaWxlZCB0byBnZXQgam9iIGluZm9ybWF0aW9uLicgfQor ICAgICAgICAgICA9MjAKKyAgICAgICAgIyBsb2FkIGpvYiBwYXJhbWV0ZXJzIGludG8gaW5jb21p bmcKKyAgICAgICAgdG9vbF9tZXNzYWdlID0zRCAnJworICAgICAgICBpZiBqb2I6CisgICAgICAg ICAgICB0cnk6CisgICAgICAgICAgICAgICAgam9iX3BhcmFtcyA9M0Qgam9iLmdldF9wYXJhbV92 YWx1ZXMoIHRyYW5zLmFwcCwgaWdub3JlX2Vycj0Kb3JzID0zRCBUcnVlICkKKyAgICAgICAgICAg ICAgICBqb2JfbWVzc2FnZXMgPTNEIHNlbGYuY2hlY2tfYW5kX3VwZGF0ZV9wYXJhbV92YWx1ZXMo IGpvYl9wPQphcmFtcywgdHJhbnMsIHVwZGF0ZV92YWx1ZXM9M0RGYWxzZSApCisgICAgICAgICAg ICAgICAgdG9vbF9tZXNzYWdlID0zRCBzZWxmLl9jb21wYXJlX3Rvb2xfdmVyc2lvbih0cmFucywg am9iKQorICAgICAgICAgICAgICAgIHBhcmFtc190b19pbmNvbWluZygga3dkLCBzZWxmLmlucHV0 cywgam9iX3BhcmFtcywgdHJhbnMuYXA9CnAgKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biwgZXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHRyYW5zLnJlc3BvbnNlLnN0YXR1cyA9M0Qg NTAwCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzogc3RyKCBleGNlcHRpb24gKSB9 CisKKyAgICAgICAgIyBjcmVhdGUgcGFyYW1ldGVyIG9iamVjdAorICAgICAgICBwYXJhbXMgPTNE IGdhbGF4eS51dGlsLlBhcmFtcygga3dkLCBzYW5pdGl6ZSA9M0QgRmFsc2UgKQorICAgICAgID0y MAorICAgICAgICAjIGNvbnZlcnQgdmFsdWUgdG8ganNvbmlmaWFibGUgdmFsdWUKKyAgICAgICAg ZGVmIGpzb25pZnkodik6CisgICAgICAgICAgICAjIGNoZWNrIGlmIHZhbHVlIGlzIG51bWVyaWMK KyAgICAgICAgICAgIGlzbnVtYmVyID0zRCBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAg ICAgICAgICAgIGZsb2F0KHYpCisgICAgICAgICAgICAgICAgaXNudW1iZXIgPTNEIFRydWUKKyAg ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworCisgICAg ICAgICAgICAjIGZpeCBoZGEgcGFyc2luZworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0 cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbik6CisgICAgICAgICAgICAg ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgJ2lkJyAgOiB0cmFucy5zZWN1cml0eS5l bmNvZGVfaWQodi5pZCksCisgICAgICAgICAgICAgICAgICAgICdzcmMnIDogJ2hkYScKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodiwgYm9vbCk6CisgICAg ICAgICAgICAgICAgaWYgdiBpcyBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3Ry dWUnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdm YWxzZScKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBiYXNlc3RyaW5nKSBvciBpc251 bWJlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgZW5zdXJlcyB0aGF0IGlucHV0IGRp Y3Rpb25hcnkgaXMganNvbmlmaWFibGUKKyAgICAgICAgZGVmIHNhbml0aXplKGRpY3QpOgorICAg ICAgICAgICAgIyBnZXQgY3VycmVudCB2YWx1ZQorICAgICAgICAgICAgdmFsdWUgPTNEIGRpY3Rb J3ZhbHVlJ10gaWYgJ3ZhbHVlJyBpbiBkaWN0IGVsc2UgTm9uZQorCisgICAgICAgICAgICAjIGpz b25pZnkgYnkgdHlwZQorICAgICAgICAgICAgaWYgZGljdFsndHlwZSddIGluIFsnZGF0YSddOgor ICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAg ICAgICAgICB2YWx1ZSA9M0QgWyBqc29uaWZ5KHYpIGZvciB2IGluIHZhbHVlIF0KKyAgICAgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgWyBqc29uaWZ5KHZh bHVlKSBdCisgICAgICAgICAgICAgICAgdmFsdWUgPTNEIHsgJ3ZhbHVlcyc6IHZhbHVlIH0KKyAg ICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAg dmFsdWUgPTNEIFsganNvbmlmeSh2KSBmb3IgdiBpbiB2YWx1ZSBdCisgICAgICAgICAgICBlbHNl OgorICAgICAgICAgICAgICAgIHZhbHVlID0zRCBqc29uaWZ5KHZhbHVlKQorCisgICAgICAgICAg ICAjIHVwZGF0ZSBhbmQgcmV0dXJuCisgICAgICAgICAgICBkaWN0Wyd2YWx1ZSddID0zRCB2YWx1 ZQorICAgICAgICAgICAgcmV0dXJuIGRpY3QKKyAgICAgICA9MjAKKyAgICAgICAgIyBpbml0aWFs aXplIHN0YXRlIHVzaW5nIGRlZmF1bHQgcGFyYW1ldGVycworICAgICAgICBkZWYgaW5pdGlhbGl6 ZV9zdGF0ZSh0cmFucywgaW5wdXRzLCBzdGF0ZSwgY29udGV4dD0zRE5vbmUpOgorICAgICAgICAg ICAgY29udGV4dCA9M0QgRXhwcmVzc2lvbkNvbnRleHQoc3RhdGUsIGNvbnRleHQpCisgICAgICAg ICAgICBmb3IgaW5wdXQgaW4gaW5wdXRzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBz dGF0ZVtpbnB1dC5uYW1lXSA9M0QgaW5wdXQuZ2V0X2luaXRpYWxfdmFsdWUodHJhbnMsIGNvbnRl PQp4dCkKKyAgID0yMAorICAgICAgICAjIGNoZWNrIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgdmFs dWUgYW5kIHVwZGF0ZSBpdCBpZiBuZWNlc3NhcnkKKyAgICAgICAgZGVmIGNoZWNrX3N0YXRlKHRy YW5zLCBpbnB1dCwgZGVmYXVsdF92YWx1ZSwgY29udGV4dCk6CisgICAgICAgICAgICB2YWx1ZSA9 M0QgZGVmYXVsdF92YWx1ZQorICAgICAgICAgICAgZXJyb3IgPTNEICdTdGF0ZSB2YWxpZGF0aW9u IGZhaWxlZC4nCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyByZXNvbHZlcyB0 aGUgaW5jb25zaXN0ZW50IGRlZmluaXRpb24gb2YgYm9vbGVhbiBwYXJhbWV0ZT0KcnMgKHNlZSBi YXNlLnB5KSB3aXRob3V0IG1vZGlmeWluZyBzaGFyZWQgY29kZQorICAgICAgICAgICAgICAgIGlm IGlucHV0LnR5cGUgPTNEPTNEICdib29sZWFuJyBhbmQgaXNpbnN0YW5jZShkZWZhdWx0X3ZhbHU9 CmUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZXJyb3IgPTNEIFt1 dGlsLnN0cmluZ19hc19ib29sKGRlZmF1bHRfdmFsdWUpLCA9Ck5vbmVdCisgICAgICAgICAgICAg ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGVycm9yID0zRCBjaGVja19wYXJh bSh0cmFucywgaW5wdXQsIGRlZmF1bHRfdmFsPQp1ZSwgY29udGV4dCkKKyAgICAgICAgICAgIGV4 Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0NoZWNraW5n IHBhcmFtZXRlciBmYWlsZWQuICVzJywgc3RyKGVycikpCisgICAgICAgICAgICAgICAgcGFzcwor ICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgZXJyb3JdCisgICA9MjAKKyAgICAgICAgIyBwb3B1 bGF0ZXMgc3RhdGUgd2l0aCBpbmNvbWluZyB1cmwgcGFyYW1ldGVycworICAgICAgICBkZWYgcG9w dWxhdGVfc3RhdGUodHJhbnMsIGlucHV0cywgc3RhdGUsIGVycm9ycywgaW5jb21pbmcsIHByZWZp eD0KPTNEIiIsIGNvbnRleHQ9M0ROb25lICk6CisgICAgICAgICAgICBjb250ZXh0ID0zRCBFeHBy ZXNzaW9uQ29udGV4dChzdGF0ZSwgY29udGV4dCkKKyAgICAgICAgICAgIGZvciBpbnB1dCBpbiBp bnB1dHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGtleSA9M0QgcHJlZml4ICsgaW5w dXQubmFtZQorICAgICAgICAgICAgICAgIGlmIGlucHV0LnR5cGUgPTNEPTNEICdyZXBlYXQnOgor ICAgICAgICAgICAgICAgICAgICBncm91cF9zdGF0ZSA9M0Qgc3RhdGVbaW5wdXQubmFtZV0KKyAg ICAgICAgICAgICAgICAgICAgcmVwX2luZGV4ID0zRCAwCisgICAgICAgICAgICAgICAgICAgIGRl bCBncm91cF9zdGF0ZVs6XQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg ICAgICAgICAgICAgICAgICAgcmVwX25hbWUgPTNEICIlc18lZCIgJSAoa2V5LCByZXBfaW5kZXgp CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYW55KFtpbmNvbWluZ19rZXkuc3RhcnRz d2l0aChyZXBfbmFtZSkgZm9yID0KaW5jb21pbmdfa2V5IGluIGluY29taW5nLmtleXMoKV0pOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAg ICBpZiByZXBfaW5kZXggPCBpbnB1dC5tYXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmV3X3N0YXRlID0zRCB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0ZVsn X19pbmRleF9fJ10gPTNEIHJlcF9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu aXRpYWxpemVfc3RhdGUodHJhbnMsIGlucHV0LmlucHV0cywgbmV3X3N0YXQ9CmUsIGNvbnRleHQp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfc3RhdGUuYXBwZW5kKG5ld19zdGF0 ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZV9zdGF0ZSh0cmFucywgaW5w dXQuaW5wdXRzLCBuZXdfc3RhdGUsPQogZXJyb3JzLCBpbmNvbWluZywgcHJlZml4PTNEcmVwX25h bWUgKyAifCIsIGNvbnRleHQ9M0Rjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVw X2luZGV4ICs9M0QgMQorICAgICAgICAgICAgICAgIGVsaWYgaW5wdXQudHlwZSA9M0Q9M0QgJ2Nv bmRpdGlvbmFsJzoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBfc3RhdGUgPTNEIHN0YXRlW2lu cHV0Lm5hbWVdCisgICAgICAgICAgICAgICAgICAgIGdyb3VwX3ByZWZpeCA9M0QgIiVzfCIgJSAo IGtleSApCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFyYW1fa2V5ID0zRCBncm91cF9wcmVm aXggKyBpbnB1dC50ZXN0X3BhcmFtLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92 YWx1ZSA9M0QgaW5jb21pbmcuZ2V0KHRlc3RfcGFyYW1fa2V5LCBncm91cF9zPQp0YXRlLmdldChp bnB1dC50ZXN0X3BhcmFtLm5hbWUsIE5vbmUpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwg ZXJyb3IgPTNEIGNoZWNrX3N0YXRlKHRyYW5zLCBpbnB1dC50ZXN0X3BhcmFtLCA9CmRlZmF1bHRf dmFsdWUsIGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAg ICAgICAgICAgICAgICAgZXJyb3JzW3Rlc3RfcGFyYW1fa2V5XSA9M0QgZXJyb3IKKyAgICAgICAg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2Nhc2UgPTNEIGlucHV0LmdldF9jdXJyZW50X2Nh c2UodmFsdWUsPQogdHJhbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfc3Rh dGUgPTNEIHN0YXRlW2lucHV0Lm5hbWVdID0zRCB7fQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluaXRpYWxpemVfc3RhdGUodHJhbnMsIGlucHV0LmNhc2VzW2N1cnJlbnRfY2E9CnNlXS5p bnB1dHMsIGdyb3VwX3N0YXRlLCBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBvcHVsYXRlX3N0YXRlKCB0cmFucywgaW5wdXQuY2FzZXNbY3VycmVudF9jYXM9CmVdLmlucHV0 cywgZ3JvdXBfc3RhdGUsIGVycm9ycywgaW5jb21pbmcsIHByZWZpeD0zRGdyb3VwX3ByZWZpeCwg Y29udGV4dD0zRD0KY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9z dGF0ZVsnX19jdXJyZW50X2Nhc2VfXyddID0zRCBjdXJyZW50X2NhPQpzZQorICAgICAgICAgICAg ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlcnJvcnNbdGVzdF9wYXJhbV9rZXldID0zRCAnVGhlIHNlbGVjdGVkIGNhc2UgPQppcyB1 bmF2YWlsYWJsZS9pbnZhbGlkLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisg ICAgICAgICAgICAgICAgICAgIGdyb3VwX3N0YXRlW2lucHV0LnRlc3RfcGFyYW0ubmFtZV0gPTNE IHZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs dF92YWx1ZSA9M0QgaW5jb21pbmcuZ2V0KGtleSwgc3RhdGUuZ2V0KGlucHV0Lm5hPQptZSwgTm9u ZSkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBlcnJvciA9M0QgY2hlY2tfc3RhdGUodHJh bnMsIGlucHV0LCBkZWZhdWx0X3ZhbD0KdWUsIGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAg IGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzW2tleV0gPTNEIGVycm9y CisgICAgICAgICAgICAgICAgICAgIHN0YXRlW2lucHV0Lm5hbWVdID0zRCB2YWx1ZQorICAgICAg ID0yMAorICAgICAgICAjIGJ1aWxkcyB0b29sIG1vZGVsIGluY2x1ZGluZyBhbGwgYXR0cmlidXRl cworICAgICAgICBkZWYgaXRlcmF0ZShncm91cF9pbnB1dHMsIGlucHV0cywgc3RhdGVfaW5wdXRz LCBvdGhlcl92YWx1ZXM9M0ROb249CmUpOgorICAgICAgICAgICAgb3RoZXJfdmFsdWVzID0zRCBF eHByZXNzaW9uQ29udGV4dCggc3RhdGVfaW5wdXRzLCBvdGhlcl92YWx1ZXM9CiApCisgICAgICAg ICAgICBmb3IgaW5wdXRfaW5kZXgsIGlucHV0IGluIGVudW1lcmF0ZSggaW5wdXRzLml0ZXJ2YWx1 ZXMoKSApOgorICAgICAgICAgICAgICAgICMgY3JlYXRlIG1vZGVsIGRpY3Rpb25hcnkKKyAgICAg ICAgICAgICAgICB0b29sX2RpY3QgPTNEIGlucHV0LnRvX2RpY3QodHJhbnMpCisgICAgICAgICAg ICAgICAgaWYgdG9vbF9kaWN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl CisKKyAgICAgICAgICAgICAgICAjIHN0YXRlIGZvciBzdWJzZWN0aW9uL2dyb3VwCisgICAgICAg ICAgICAgICAgZ3JvdXBfc3RhdGUgPTNEIHN0YXRlX2lucHV0c1tpbnB1dC5uYW1lXQorCisgICAg ICAgICAgICAgICAgIyBpdGVyYXRlIGFuZCB1cGRhdGUgdmFsdWVzCisgICAgICAgICAgICAgICAg aWYgaW5wdXQudHlwZSA9M0Q9M0QgJ3JlcGVhdCc6CisgICAgICAgICAgICAgICAgICAgIGdyb3Vw X2NhY2hlID0zRCB0b29sX2RpY3RbJ2NhY2hlJ10gPTNEIHt9CisgICAgICAgICAgICAgICAgICAg IGZvciBpIGluIHJhbmdlKCBsZW4oIGdyb3VwX3N0YXRlICkgKToKKyAgICAgICAgICAgICAgICAg ICAgICAgIGdyb3VwX2NhY2hlW2ldID0zRCB7fQorICAgICAgICAgICAgICAgICAgICAgICAgaXRl cmF0ZSggZ3JvdXBfY2FjaGVbaV0sIGlucHV0LmlucHV0cywgZ3JvdXBfc3RhdGU9CltpXSwgb3Ro ZXJfdmFsdWVzICkKKyAgICAgICAgICAgICAgICBlbGlmIGlucHV0LnR5cGUgPTNEPTNEICdjb25k aXRpb25hbCc6CisgICAgICAgICAgICAgICAgICAgIGlmICd0ZXN0X3BhcmFtJyBpbiB0b29sX2Rp Y3Q6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhcmFtID0zRCB0b29sX2RpY3RbJ3Rl c3RfcGFyYW0nXQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXJhbVsndmFsdWUnXSA9 M0QganNvbmlmeShncm91cF9zdGF0ZVt0ZXN0X3A9CmFyYW1bJ25hbWUnXV0pCisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAnX19jdXJyZW50X2Nhc2VfXycgaW4gZ3JvdXBfc3RhdGU6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaSA9M0QgZ3JvdXBfc3RhdGVbJ19fY3VycmVudF9jYXNl X18nXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUodG9vbF9kaWN0WydjYXNl cyddW2ldWydpbnB1dHMnXSwgaW5wdXQ9Ci5jYXNlc1tpXS5pbnB1dHMsIGdyb3VwX3N0YXRlLCBv dGhlcl92YWx1ZXMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg IyBjcmVhdGUgaW5wdXQgZGljdGlvbmFyeSwgdHJ5IHRvIHBhc3Mgb3RoZXJfdmFsdWVzIGlmPQog dG9fZGljdCBmdW5jdGlvbiBzdXBwb3J0cyBpdCBlLmcuIGR5bmFtaWMgb3B0aW9ucworICAgICAg ICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0b29sX2RpY3QgPTNE IGlucHV0LnRvX2RpY3QodHJhbnMsIG90aGVyX3ZhbHVlcz0zRD0Kb3RoZXJfdmFsdWVzKQorICAg ICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAg ICAgcGFzcworICAgICAgICAgICAgICAgPTIwCisgICAgICAgICAgICAgICAgICAgICMgaWRlbnRp ZnkgbmFtZQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9uYW1lID0zRCB0b29sX2RpY3QuZ2V0 KCduYW1lJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5wdXRfbmFtZToKKyAgICAgICAgICAg ICAgICAgICAgICAgICMgdXBkYXRlIGlucHV0IHZhbHVlIGZyb20gdG9vbCBzdGF0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgaWYgaW5wdXRfbmFtZSBpbiBzdGF0ZV9pbnB1dHM6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG9vbF9kaWN0Wyd2YWx1ZSddID0zRCBzdGF0ZV9pbnB1dHNb aW5wdXRfbmFtZV0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyBzYW5pdGl6ZSBpZiB2YWx1 ZSBleGlzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xfZGljdCA9M0Qgc2FuaXRpemUo dG9vbF9kaWN0KQorICAgICAgICAgICA9MjAKKyAgICAgICAgICAgICAgICAjIGJhY2t1cCBmaW5h bCBpbnB1dCBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICAgZ3JvdXBfaW5wdXRzW2lucHV0X2lu ZGV4XSA9M0QgdG9vbF9kaWN0CisKKyAgICAgICAgIyBzYW5hdGl6YXRpb24gZm9yIHRoZSBmaW5h bCB0b29sIHN0YXRlCisgICAgICAgIGRlZiBzYW5pdGl6ZV9zdGF0ZShzdGF0ZSk6CisgICAgICAg ICAgICBrZXlzID0zRCBOb25lCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHN0YXRlLCBkaWN0 KToKKyAgICAgICAgICAgICAgICBrZXlzID0zRCBzdGF0ZQorICAgICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHN0YXRlLCBsaXN0KToKKyAgICAgICAgICAgICAgICBrZXlzID0zRCByYW5nZSggbGVu KHN0YXRlKSApCisgICAgICAgICAgICBpZiBrZXlzOgorICAgICAgICAgICAgICAgIGZvciBrIGlu IGtleXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RhdGVba10sIGRpY3Qp IG9yIGlzaW5zdGFuY2Uoc3RhdGVba10sID0KbGlzdCk6CisgICAgICAgICAgICAgICAgICAgICAg ICBzYW5pdGl6ZV9zdGF0ZShzdGF0ZVtrXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW2tdID0zRCBqc29uaWZ5KHN0YXRlW2tdKQorICAg ICAgICAgICA9MjAKKyAgICAgICAgIyBkbyBwYXJhbSB0cmFuc2xhdGlvbiBoZXJlLCB1c2VkIGJ5 IGRhdGFzb3VyY2UgdG9vbHMKKyAgICAgICAgaWYgc2VsZi5pbnB1dF90cmFuc2xhdG9yOgorICAg ICAgICAgICAgc2VsZi5pbnB1dF90cmFuc2xhdG9yLnRyYW5zbGF0ZSggcGFyYW1zICkKKyAgICAg ICA9MjAKKyAgICAgICAgIyBpbml0aWFsaXplIGFuZCBwb3B1bGF0ZSB0b29sIHN0YXRlCisgICAg ICAgIHN0YXRlX2lucHV0cyA9M0Qge30KKyAgICAgICAgc3RhdGVfZXJyb3JzID0zRCB7fQorICAg ICAgICBpbml0aWFsaXplX3N0YXRlKHRyYW5zLCBzZWxmLmlucHV0cywgc3RhdGVfaW5wdXRzKQor ICAgICAgICBwb3B1bGF0ZV9zdGF0ZSh0cmFucywgc2VsZi5pbnB1dHMsIHN0YXRlX2lucHV0cywg c3RhdGVfZXJyb3JzLCBwYXI9CmFtcy5fX2RpY3RfXykKKworICAgICAgICAjIGNyZWF0ZSBiYXNp YyB0b29sIG1vZGVsCisgICAgICAgIHRvb2xfbW9kZWwgPTNEIHNlbGYudG9fZGljdCh0cmFucykK KyAgICAgICAgdG9vbF9tb2RlbFsnaW5wdXRzJ10gPTNEIHt9CisgICAgICAgPTIwCisgICAgICAg ICMgYnVpbGQgdG9vbCBtb2RlbCBhbmQgdG9vbCBzdGF0ZQorICAgICAgICBpdGVyYXRlKHRvb2xf bW9kZWxbJ2lucHV0cyddLCBzZWxmLmlucHV0cywgc3RhdGVfaW5wdXRzLCAnJykKKworICAgICAg ICAjIHNhbml0aXplIHRvb2wgc3RhdGUKKyAgICAgICAgc2FuaXRpemVfc3RhdGUoc3RhdGVfaW5w dXRzKQorCisgICAgICAgICMgbG9hZCB0b29sIGhlbHAKKyAgICAgICAgdG9vbF9oZWxwID0zRCAn JworICAgICAgICBpZiBzZWxmLmhlbHA6CisgICAgICAgICAgICB0b29sX2hlbHAgPTNEIHNlbGYu aGVscAorICAgICAgICAgICAgdG9vbF9oZWxwID0zRCB0b29sX2hlbHAucmVuZGVyKCBzdGF0aWNf cGF0aD0zRHVybF9mb3IoICcvc3RhdGk9CmMnICksIGhvc3RfdXJsPTNEdXJsX2ZvcignLycsIHF1 YWxpZmllZD0zRFRydWUpICkKKyAgICAgICAgICAgIGlmIHR5cGUoIHRvb2xfaGVscCApIGlzIG5v dCB1bmljb2RlOgorICAgICAgICAgICAgICAgIHRvb2xfaGVscCA9M0QgdW5pY29kZSggdG9vbF9o ZWxwLCAndXRmLTgnKQorICAgICAgID0yMAorICAgICAgICAjIGNoZWNrIGlmIGNpdGF0aW9ucyBl eGlzdAorICAgICAgICB0b29sX2NpdGF0aW9ucyA9M0QgRmFsc2UKKyAgICAgICAgaWYgc2VsZi5j aXRhdGlvbnM6CisgICAgICAgICAgICB0b29sX2NpdGF0aW9ucyA9M0QgVHJ1ZQorICAgPTIwCisg ICAgICAgICMgZ2V0IHRvb2wgdmVyc2lvbnMKKyAgICAgICAgdG9vbF92ZXJzaW9ucyA9M0QgW10K KyAgICAgICAgdG9vbHMgPTNEIHNlbGYuYXBwLnRvb2xib3guZ2V0X2xvYWRlZF90b29sc19ieV9s aW5lYWdlKHNlbGYuaWQpCisgICAgICAgIGZvciB0IGluIHRvb2xzOgorICAgICAgICAgICAgdG9v bF92ZXJzaW9ucy5hcHBlbmQodC52ZXJzaW9uKQorICAgICAgID0yMAorICAgICAgICAjIyBhZGQg aW5mb3JtYXRpb24gd2l0aCB1bmRlcmx5aW5nIHJlcXVpcmVtZW50cyBhbmQgdGhlaXIgdmVyc2lv bnMKKyAgICAgICAgdG9vbF9yZXF1aXJlbWVudHMgPTNEIFtdCisgICAgICAgIGlmIHNlbGYucmVx dWlyZW1lbnRzOgorICAgICAgICAgICAgZm9yIHJlcXVpcmVtZW50IGluIHNlbGYucmVxdWlyZW1l bnRzOgorICAgICAgICAgICAgICAgIHRvb2xfcmVxdWlyZW1lbnRzLmFwcGVuZCh7CisgICAgICAg ICAgICAgICAgICAgICduYW1lJyAgICAgIDogcmVxdWlyZW1lbnQubmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgJ3ZlcnNpb24nICAgOiByZXF1aXJlbWVudC52ZXJzaW9uCisgICAgICAgICAgICAg ICAgfSkKKworICAgICAgICAjIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMKKyAgICAgICAgdG9v bF9tb2RlbC51cGRhdGUoeworICAgICAgICAgICAgJ2hlbHAnICAgICAgICAgIDogdG9vbF9oZWxw LAorICAgICAgICAgICAgJ2NpdGF0aW9ucycgICAgIDogdG9vbF9jaXRhdGlvbnMsCisgICAgICAg ICAgICAnYmlvc3Rhcl91cmwnICAgOiB0cmFucy5hcHAuY29uZmlnLmJpb3N0YXJfdXJsLAorICAg ICAgICAgICAgJ21lc3NhZ2UnICAgICAgIDogdG9vbF9tZXNzYWdlLAorICAgICAgICAgICAgJ3Zl cnNpb25zJyAgICAgIDogdG9vbF92ZXJzaW9ucywKKyAgICAgICAgICAgICdyZXF1aXJlbWVudHMn ICA6IHRvb2xfcmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgJ2Vycm9ycycgICAgICAgIDogc3Rh dGVfZXJyb3JzLAorICAgICAgICAgICAgJ3N0YXRlX2lucHV0cycgIDogc3RhdGVfaW5wdXRzCisg ICAgICAgIH0pCisKKyAgICAgICAgIyBjaGVjayBmb3IgZXJyb3JzCisgICAgICAgIGlmICdlcnJv cicgaW4gdG9vbF9tZXNzYWdlOgorICAgICAgICAgICAgcmV0dXJuIHRvb2xfbWVzc2FnZQorCisg ICAgICAgICMgcmV0dXJuIGVucmljaGVkIHRvb2wgbW9kZWwKKyAgICAgICAgcmV0dXJuIHRvb2xf bW9kZWwKKworICAgIGRlZiBfY29tcGFyZV90b29sX3ZlcnNpb24oIHNlbGYsIHRyYW5zLCBqb2Ig KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXBhcmVzIGEgdG9vbCB2ZXJzaW9uIHdpdGggdGhl IHRvb2wgdmVyc2lvbiBmcm9tIGEgam9iIChmcm9tIFRvbz0KbFJ1bm5lcikuCisgICAgICAgICIi IgorICAgICAgICB0b29sX2lkID0zRCBqb2IudG9vbF9pZAorICAgICAgICB0b29sX3ZlcnNpb24g PTNEIGpvYi50b29sX3ZlcnNpb24KKyAgICAgICAgbWVzc2FnZSA9M0QgJycKKyAgICAgICAgdHJ5 OgorICAgICAgICAgICAgc2VsZWN0X2ZpZWxkLCB0b29scywgdG9vbCA9M0Qgc2VsZi5hcHAudG9v bGJveC5nZXRfdG9vbF9jb21wb249CmVudHMoIHRvb2xfaWQsIHRvb2xfdmVyc2lvbj0zRHRvb2xf dmVyc2lvbiwgZ2V0X2xvYWRlZF90b29sc19ieV9saW5lYWdlPTNERj0KYWxzZSwgc2V0X3NlbGVj dGVkPTNEVHJ1ZSApCisgICAgICAgICAgICBpZiB0b29sIGlzIE5vbmU6CisgICAgICAgICAgICAg ICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA1MDAKKyAgICAgICAgICAgICAgICByZXR1cm4g eyAnZXJyb3InOiAnVGhpcyBkYXRhc2V0IHdhcyBjcmVhdGVkIGJ5IGFuIG9ic29sZXRlPQogdG9v bCAoJXMpLiBDYW5cJ3QgcmUtcnVuLicgJSB0b29sX2lkIH0KKyAgICAgICAgICAgIGlmICggc2Vs Zi5pZCAhPTNEIHRvb2xfaWQgYW5kIHNlbGYub2xkX2lkICE9M0QgdG9vbF9pZCApIG9yIHNlPQps Zi52ZXJzaW9uICE9M0QgdG9vbF92ZXJzaW9uOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaWQg PTNEPTNEIHRvb2xfaWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHRvb2xfdmVyc2lvbiA9M0Q9 M0QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIHNvbWUgcmVhc29uIGpvYnMg ZG9uJ3QgYWx3YXlzIGtlZXAgdHJhY2sgb2YgPQp0aGUgdG9vbCB2ZXJzaW9uLgorICAgICAgICAg ICAgICAgICAgICAgICAgbWVzc2FnZSA9M0QgJycKKyAgICAgICAgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPTNEICdUaGlzIGpvYiB3YXMgaW5pdGlh bGx5IHJ1biB3aXRoIHRvb2wgPQp2ZXJzaW9uICIlcyIsIHdoaWNoIGlzIGN1cnJlbnRseSBub3Qg YXZhaWxhYmxlLiAgJyAlIHRvb2xfdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg bGVuKCB0b29scyApID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9 M0QgJ1lvdSBjYW4gcmUtcnVuIHRoZSBqb2Igd2l0aCB0aGUgPQpzZWxlY3RlZCB0b29sIG9yIGNo b29zZSBhbm90aGVyIGRlcml2YXRpb24gb2YgdGhlIHRvb2wuJworICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9M0QgJ1lv dSBjYW4gcmUtcnVuIHRoZSBqb2Igd2l0aCB0aGlzPQogdG9vbCB2ZXJzaW9uLCB3aGljaCBpcyBh IGRlcml2YXRpb24gb2YgdGhlIG9yaWdpbmFsIHRvb2wuJworICAgICAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbiggdG9vbHMgKSA+IDE6CisgICAgICAgICAgICAg ICAgICAgICAgICBtZXNzYWdlID0zRCAnVGhpcyBqb2Igd2FzIGluaXRpYWxseSBydW4gd2l0aCB0 b29sID0KdmVyc2lvbiAiJXMiLCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4gICcg JSB0b29sX3ZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0zRCAnWW91 IGNhbiByZS1ydW4gdGhlIGpvYiB3aXRoIHRoZSBzZWxlPQpjdGVkIHRvb2wgb3IgY2hvb3NlIGFu b3RoZXIgZGVyaXZhdGlvbiBvZiB0aGUgdG9vbC4nCisgICAgICAgICAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0zRCAnVGhpcyBqb2Igd2FzIGluaXRp YWxseSBydW4gd2l0aCB0b29sID0KaWQgIiVzIiwgdmVyc2lvbiAiJXMiLCB3aGljaCBpcyAnICUg KCB0b29sX2lkLCB0b29sX3ZlcnNpb24gKQorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn ZSArPTNEICdjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4gIFlvdSBjYW4gcmU9Ci1ydW4gdGhlIGpv YiB3aXRoIHRoaXMgdG9vbCwgd2hpY2ggaXMgYSBkZXJpdmF0aW9uIG9mIHRoZSBvcmlnaW5hbCB0 b29sLicKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyb3I6CisgICAgICAgICAgICB0cmFu cy5yZXNwb25zZS5zdGF0dXMgPTNEIDUwMAorICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzog c3RyIChlcnJvcikgfQorICAgICAgICAgICAgICAgPTIwCisgICAgICAgICMgY2FuJ3QgcmVydW4g dXBsb2FkLCBleHRlcm5hbCBkYXRhIHNvdXJjZXMsIGV0IGNldGVyYS4gd29ya2Zsb3cgYz0Kb21w YXRpYmxlIHdpbGwgcHJveHkgdGhpcyBmb3Igbm93CisgICAgICAgICNpZiBub3Qgc2VsZi5pc193 b3JrZmxvd19jb21wYXRpYmxlOgorICAgICAgICAjICAgIHRyYW5zLnJlc3BvbnNlLnN0YXR1cyA9 M0QgNTAwCisgICAgICAgICMgICAgcmV0dXJuIHsgJ2Vycm9yJzogJ1RoZSBcJyVzXCcgdG9vbCBk b2VzIGN1cnJlbnRseSBub3Qgc3VwcG9ydD0KIHJlLXJ1bm5pbmcuJyAlIHNlbGYubmFtZSB9Cisg ICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgPTIwCiAgICAgZGVmIGdldF9kZWZhdWx0X2hp c3RvcnlfYnlfdHJhbnMoIHNlbGYsIHRyYW5zLCBjcmVhdGU9M0RGYWxzZSApOgogICAgICAgICBy ZXR1cm4gdHJhbnMuZ2V0X2hpc3RvcnkoIGNyZWF0ZT0zRGNyZWF0ZSApCj0yMAoKZGlmZiAtciA1 MzA1ZTRkMWM5OWQ0NzhhZGE1ZmQ2MjkzMGU0Mjg3NWRhNDhmZDFjIC1yIDZhOGE3OWY5YjZkNTJi Zjk2ZTIyZDk0PQo3NDBmOWMzN2I0NDRkOGQxMiBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Fw aS9saWJyYXJpZXMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvbGlicmFy aWVzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2xpYnJhcmllcy5weQpA QCAtNiwxMCArNiw3IEBACiBmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgbGlicmFyaWVzLCBm b2xkZXJzLCByb2xlcwogZnJvbSBnYWxheHkud2ViIGltcG9ydCBfZnV0dXJlX2V4cG9zZV9hcGkg YXMgZXhwb3NlX2FwaQogZnJvbSBnYWxheHkud2ViIGltcG9ydCBfZnV0dXJlX2V4cG9zZV9hcGlf YW5vbnltb3VzIGFzIGV4cG9zZV9hcGlfYW5vbnltb3VzCi1mcm9tIGdhbGF4eS5tb2RlbC5vcm0g aW1wb3J0IGFuZF8sIG5vdF8sIG9yXwogZnJvbSBnYWxheHkud2ViLmJhc2UuY29udHJvbGxlciBp bXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIKLWZyb20gc3FsYWxjaGVteS5vcm0uZXhjIGltcG9ydCBN dWx0aXBsZVJlc3VsdHNGb3VuZAotZnJvbSBzcWxhbGNoZW15Lm9ybS5leGMgaW1wb3J0IE5vUmVz dWx0Rm91bmQKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlcigg X19uYW1lX18gKQpAQCAtNDgsNyArNDUsNyBAQAo9MjAKICAgICBkZWYgX19kZWNvZGVfaWQoIHNl bGYsIHRyYW5zLCBlbmNvZGVkX2lkLCBvYmplY3RfbmFtZT0zRE5vbmUgKToKICAgICAgICAgIiIi Ci0gICAgICAgIFRyeSB0byBkZWNvZGUgdGhlIGlkLj0yMAorICAgICAgICBUcnkgdG8gZGVjb2Rl IHRoZSBpZC4KPTIwCiAgICAgICAgIDpwYXJhbSAgb2JqZWN0X25hbWU6ICAgICAgTmFtZSBvZiB0 aGUgb2JqZWN0IHRoZSBpZCBiZWxvbmdzIHRvLiAobz0KcHRpb25hbCkKICAgICAgICAgOnR5cGUg ICBvYmplY3RfbmFtZTogICAgICBzdHIKQEAgLTE0OSw3ICsxNDYsNyBAQAogICAgICAgICAgICAg ICAgIHN5bm9wc2lzID0zRCBwYXlsb2FkLmdldCggJ3N5bm9wc2lzJywgTm9uZSApCiAgICAgICAg IGVsc2U6CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJNaXNz aW5nRXhjZXB0aW9uKCAiWW91IGRpZCBubz0KdCBzcGVjaWZ5IGFueSBwYXlsb2FkLiIgKQotICAg ICAgICB1cGRhdGVkX2xpYnJhcnkgPTNEIHNlbGYubGlicmFyeV9tYW5hZ2VyLnVwZGF0ZSggdHJh bnMsIGxpYnJhcnksIG49CmFtZSwgZGVzY3JpcHRpb24sIHN5bm9wc2lzICkgICAgICAgICAgID0y MAorICAgICAgICB1cGRhdGVkX2xpYnJhcnkgPTNEIHNlbGYubGlicmFyeV9tYW5hZ2VyLnVwZGF0 ZSggdHJhbnMsIGxpYnJhcnksIG49CmFtZSwgZGVzY3JpcHRpb24sIHN5bm9wc2lzICkKICAgICAg ICAgbGlicmFyeV9kaWN0ID0zRCBzZWxmLmxpYnJhcnlfbWFuYWdlci5nZXRfbGlicmFyeV9kaWN0 KCB0cmFucywgdXBkPQphdGVkX2xpYnJhcnkgKQogICAgICAgICByZXR1cm4gbGlicmFyeV9kaWN0 Cj0yMApAQCAtMjQ4LDIwICsyNDUsMjAgQEAKICAgICAgICAgICAgICpQT1NUIC9hcGkvbGlicmFy aWVzL3tlbmNvZGVkX2xpYnJhcnlfaWR9L3Blcm1pc3Npb25zCj0yMAogICAgICAgICA6cGFyYW0g IGVuY29kZWRfbGlicmFyeV9pZDogICAgICB0aGUgZW5jb2RlZCBpZCBvZiB0aGUgbGlicmFyeSB0 byA9CnNldCB0aGUgcGVybWlzc2lvbnMgb2YKLSAgICAgICAgOnR5cGUgICBlbmNvZGVkX2xpYnJh cnlfaWQ6ICAgICAgYW4gZW5jb2RlZCBpZCBzdHJpbmcgICAgID0yMAorICAgICAgICA6dHlwZSAg IGVuY29kZWRfbGlicmFyeV9pZDogICAgICBhbiBlbmNvZGVkIGlkIHN0cmluZwo9MjAKICAgICAg ICAgOnBhcmFtICBhY3Rpb246ICAgICAocmVxdWlyZWQpIGRlc2NyaWJlcyB3aGF0IGFjdGlvbiBz aG91bGQgYmUgcGVyPQpmb3JtZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFi bGUgYWN0aW9uczogcmVtb3ZlX3Jlc3RyaWN0aW9ucywgc2V0X3BlPQpybWlzc2lvbnMKLSAgICAg ICAgOnR5cGUgICBhY3Rpb246ICAgICBzdHJpbmcgICAgICAgPTIwCisgICAgICAgIDp0eXBlICAg YWN0aW9uOiAgICAgc3RyaW5nCj0yMAogICAgICAgICA6cGFyYW0gIGFjY2Vzc19pZHNbXTogICAg ICBsaXN0IG9mIFJvbGUuaWQgZGVmaW5pbmcgcm9sZXMgdGhhdCBzaG89CnVsZCBoYXZlIGFjY2Vz cyBwZXJtaXNzaW9uIG9uIHRoZSBsaWJyYXJ5Ci0gICAgICAgIDp0eXBlICAgYWNjZXNzX2lkc1td OiAgICAgIHN0cmluZyBvciBsaXN0ID0yMAorICAgICAgICA6dHlwZSAgIGFjY2Vzc19pZHNbXTog ICAgICBzdHJpbmcgb3IgbGlzdAogICAgICAgICA6cGFyYW0gIGFkZF9pZHNbXTogICAgICAgICBs aXN0IG9mIFJvbGUuaWQgZGVmaW5pbmcgcm9sZXMgdGhhdCBzaG89CnVsZCBoYXZlIGFkZCBpdGVt IHBlcm1pc3Npb24gb24gdGhlIGxpYnJhcnkKLSAgICAgICAgOnR5cGUgICBhZGRfaWRzW106ICAg ICAgICAgc3RyaW5nIG9yIGxpc3QgPTIwCisgICAgICAgIDp0eXBlICAgYWRkX2lkc1tdOiAgICAg ICAgIHN0cmluZyBvciBsaXN0CiAgICAgICAgIDpwYXJhbSAgbWFuYWdlX2lkc1tdOiAgICAgIGxp c3Qgb2YgUm9sZS5pZCBkZWZpbmluZyByb2xlcyB0aGF0IHNobz0KdWxkIGhhdmUgbWFuYWdlIHBl cm1pc3Npb24gb24gdGhlIGxpYnJhcnkKLSAgICAgICAgOnR5cGUgICBtYW5hZ2VfaWRzW106ICAg ICAgc3RyaW5nIG9yIGxpc3QgPTIwCisgICAgICAgIDp0eXBlICAgbWFuYWdlX2lkc1tdOiAgICAg IHN0cmluZyBvciBsaXN0CiAgICAgICAgIDpwYXJhbSAgbW9kaWZ5X2lkc1tdOiAgICAgIGxpc3Qg b2YgUm9sZS5pZCBkZWZpbmluZyByb2xlcyB0aGF0IHNobz0KdWxkIGhhdmUgbW9kaWZ5IHBlcm1p c3Npb24gb24gdGhlIGxpYnJhcnkKLSAgICAgICAgOnR5cGUgICBtb2RpZnlfaWRzW106ICAgICAg c3RyaW5nIG9yIGxpc3QgICAgICAgICA9MjAKKyAgICAgICAgOnR5cGUgICBtb2RpZnlfaWRzW106 ICAgICAgc3RyaW5nIG9yIGxpc3QKPTIwCiAgICAgICAgIDpydHlwZTogICAgIGRpY3Rpb25hcnkK ICAgICAgICAgOnJldHVybnM6ICAgZGljdCBvZiBjdXJyZW50IHJvbGVzIGZvciBhbGwgYXZhaWxh YmxlIHBlcm1pc3Npb24gdHlwPQplcwpAQCAtMzA2LDcgKzMwMyw3IEBACiAgICAgICAgICAgICAg ICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9hY2Nlc3Nfcm9sZXNfbmFtZXMu YXBwZW5kKCByb2xlX2lkICkKICAgICAgICAgICAgIGlmIGxlbiggaW52YWxpZF9hY2Nlc3Nfcm9s ZXNfbmFtZXMgKSA+IDA6Ci0gICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoICJUaGUgZm9sbG93 aW5nIHJvbGVzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aD0KZSBsaWJyYXJ5IGFjY2VzcyBwZXJt aXNzaW9uOiAiICsgc3RyKCBpbnZhbGlkX2FjY2Vzc19yb2xlc19uYW1lcyApICkgICAgICAgPQog ICAgICAgID0yMAorICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKCAiVGhlIGZvbGxvd2luZyBy b2xlcyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGg9CmUgbGlicmFyeSBhY2Nlc3MgcGVybWlzc2lv bjogIiArIHN0ciggaW52YWxpZF9hY2Nlc3Nfcm9sZXNfbmFtZXMgKSApCj0yMAogICAgICAgICAg ICAgIyBBREQgVE8gTElCUkFSWSBST0xFUwogICAgICAgICAgICAgdmFsaWRfYWRkX3JvbGVzID0z RCBbXQpAQCAtMzE5LDggKzMxNiw4IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAg ICAgICAgICAgICAgaW52YWxpZF9hZGRfcm9sZXNfbmFtZXMuYXBwZW5kKCByb2xlX2lkICkKICAg ICAgICAgICAgIGlmIGxlbiggaW52YWxpZF9hZGRfcm9sZXNfbmFtZXMgKSA+IDA6Ci0gICAgICAg ICAgICAgICAgbG9nLndhcm5pbmcoICJUaGUgZm9sbG93aW5nIHJvbGVzIGNvdWxkIG5vdCBiZSBh ZGRlZCB0byB0aD0KZSBhZGQgbGlicmFyeSBpdGVtIHBlcm1pc3Npb246ICIgKyBzdHIoIGludmFs aWRfYWRkX3JvbGVzX25hbWVzICkgKT0yMAotICAgICAgICAgICA9MjAKKyAgICAgICAgICAgICAg ICBsb2cud2FybmluZyggIlRoZSBmb2xsb3dpbmcgcm9sZXMgY291bGQgbm90IGJlIGFkZGVkIHRv IHRoPQplIGFkZCBsaWJyYXJ5IGl0ZW0gcGVybWlzc2lvbjogIiArIHN0ciggaW52YWxpZF9hZGRf cm9sZXNfbmFtZXMgKSApCisKICAgICAgICAgICAgICMgTUFOQUdFIExJQlJBUlkgUk9MRVMKICAg ICAgICAgICAgIHZhbGlkX21hbmFnZV9yb2xlcyA9M0QgW10KICAgICAgICAgICAgIGludmFsaWRf bWFuYWdlX3JvbGVzX25hbWVzID0zRCBbXQpAQCAtMzMyLDggKzMyOSw4IEBACiAgICAgICAgICAg ICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9tYW5hZ2Vfcm9sZXNfbmFt ZXMuYXBwZW5kKCByb2xlX2lkICkKICAgICAgICAgICAgIGlmIGxlbiggaW52YWxpZF9tYW5hZ2Vf cm9sZXNfbmFtZXMgKSA+IDA6Ci0gICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoICJUaGUgZm9s bG93aW5nIHJvbGVzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aD0KZSBtYW5hZ2UgbGlicmFyeSBw ZXJtaXNzaW9uOiAiICsgc3RyKCBpbnZhbGlkX21hbmFnZV9yb2xlc19uYW1lcyApICk9MjAKLSAg ICAgICAgICAgPTIwCisgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoICJUaGUgZm9sbG93aW5n IHJvbGVzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aD0KZSBtYW5hZ2UgbGlicmFyeSBwZXJtaXNz aW9uOiAiICsgc3RyKCBpbnZhbGlkX21hbmFnZV9yb2xlc19uYW1lcyApICkKKwogICAgICAgICAg ICAgIyBNT0RJRlkgTElCUkFSWSBST0xFUwogICAgICAgICAgICAgdmFsaWRfbW9kaWZ5X3JvbGVz ID0zRCBbXQogICAgICAgICAgICAgaW52YWxpZF9tb2RpZnlfcm9sZXNfbmFtZXMgPTNEIFtdCkBA IC0zNDUsNyArMzQyLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg ICAgICBpbnZhbGlkX21vZGlmeV9yb2xlc19uYW1lcy5hcHBlbmQoIHJvbGVfaWQgKQogICAgICAg ICAgICAgaWYgbGVuKCBpbnZhbGlkX21vZGlmeV9yb2xlc19uYW1lcyApID4gMDoKLSAgICAgICAg ICAgICAgICBsb2cud2FybmluZyggIlRoZSBmb2xsb3dpbmcgcm9sZXMgY291bGQgbm90IGJlIGFk ZGVkIHRvIHRoPQplIG1vZGlmeSBsaWJyYXJ5IHBlcm1pc3Npb246ICIgKyBzdHIoIGludmFsaWRf bW9kaWZ5X3JvbGVzX25hbWVzICkgKSAgICAgICA9CiAgICAgICAgPTIwCisgICAgICAgICAgICAg ICAgbG9nLndhcm5pbmcoICJUaGUgZm9sbG93aW5nIHJvbGVzIGNvdWxkIG5vdCBiZSBhZGRlZCB0 byB0aD0KZSBtb2RpZnkgbGlicmFyeSBwZXJtaXNzaW9uOiAiICsgc3RyKCBpbnZhbGlkX21vZGlm eV9yb2xlc19uYW1lcyApICkKPTIwCiAgICAgICAgICAgICBwZXJtaXNzaW9ucyA9M0QgeyB0cmFu cy5hcHAuc2VjdXJpdHlfYWdlbnQucGVybWl0dGVkX2FjdGlvbnMuTD0KSUJSQVJZX0FDQ0VTUyA6 IHZhbGlkX2FjY2Vzc19yb2xlcyB9CiAgICAgICAgICAgICBwZXJtaXNzaW9ucy51cGRhdGUoIHsg dHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LnBlcm1pdHRlZF9hY3Rpbz0KbnMuTElCUkFSWV9BREQg OiB2YWxpZF9hZGRfcm9sZXMgfSApCkBAIC0zNTcsNyArMzU0LDcgQEAKICAgICAgICAgICAgICMg Q29weSB0aGUgcGVybWlzc2lvbnMgdG8gdGhlIHJvb3QgZm9sZGVyCiAgICAgICAgICAgICB0cmFu cy5hcHAuc2VjdXJpdHlfYWdlbnQuY29weV9saWJyYXJ5X3Blcm1pc3Npb25zKCB0cmFucywgbGli cj0KYXJ5LCBsaWJyYXJ5LnJvb3RfZm9sZGVyICkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAg IHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24oICdUaGUg bWFuZGF0PQpvcnkgcGFyYW1ldGVyICJhY3Rpb24iIGhhcyBhbiBpbnZhbGlkIHZhbHVlLic9MjAK KyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNl cHRpb24oICdUaGUgbWFuZGF0PQpvcnkgcGFyYW1ldGVyICJhY3Rpb24iIGhhcyBhbiBpbnZhbGlk IHZhbHVlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FsbG93ZWQgdmFsdWVz IGFyZTogInJlbW92ZV9yZXN0cmljdGlvbnMiPQosIHNldF9wZXJtaXNzaW9ucyInICkKICAgICAg ICAgcm9sZXMgPTNEIHNlbGYubGlicmFyeV9tYW5hZ2VyLmdldF9jdXJyZW50X3JvbGVzKCB0cmFu cywgbGlicmFyeSApCiAgICAgICAgIHJldHVybiByb2xlcwpAQCAtMzY5LDE4ICszNjYsMTYgQEAK ICAgICAgICAgUE9TVCAvYXBpL2xpYnJhcmllcy97ZW5jb2RlZF9saWJyYXJ5X2lkfS9wZXJtaXNz aW9ucwogICAgICAgICBVcGRhdGVzIHRoZSBsaWJyYXJ5IHBlcm1pc3Npb25zLgogICAgICAgICAi IiIKLSAgICAgICAgaW1wb3J0IGdhbGF4eS51dGlsCi0gICAgICAgIHBhcmFtcyA9M0QgZ2FsYXh5 LnV0aWwuUGFyYW1zKCBwYXlsb2FkICkKKyAgICAgICAgcGFyYW1zID0zRCB1dGlsLlBhcmFtcygg cGF5bG9hZCApCiAgICAgICAgIHBlcm1pc3Npb25zID0zRCB7fQogICAgICAgICBmb3IgaywgdiBp biB0cmFucy5hcHAubW9kZWwuTGlicmFyeS5wZXJtaXR0ZWRfYWN0aW9ucy5pdGVtcygpOgogICAg ICAgICAgICAgcm9sZV9wYXJhbXMgPTNEIHBhcmFtcy5nZXQoIGsgKyAnX2luJywgW10gKQotICAg ICAgICAgICAgaW5fcm9sZXMgPTNEIFsgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBw Lm1vZGVsLlJvbGUgKS49CmdldCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCB4ICkgKSBmb3Ig eCBpbiBnYWxheHkudXRpbC5saXN0aWZ5KCByb2xlX3Bhcj0KYW1zICkgXQorICAgICAgICAgICAg aW5fcm9sZXMgPTNEIFsgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLlJv bGUgKS49CmdldCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCB4ICkgKSBmb3IgeCBpbiB1dGls Lmxpc3RpZnkoIHJvbGVfcGFyYW1zICkgXQogICAgICAgICAgICAgcGVybWlzc2lvbnNbIHRyYW5z LmFwcC5zZWN1cml0eV9hZ2VudC5nZXRfYWN0aW9uKCB2LmFjdGlvbiApIF09CiA9M0QgaW5fcm9s ZXMKICAgICAgICAgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LnNldF9hbGxfbGlicmFyeV9wZXJt aXNzaW9ucyggdHJhbnMsIGxpYnJhPQpyeSwgcGVybWlzc2lvbnMgKQogICAgICAgICB0cmFucy5z YV9zZXNzaW9uLnJlZnJlc2goIGxpYnJhcnkgKQogICAgICAgICAjIENvcHkgdGhlIHBlcm1pc3Np b25zIHRvIHRoZSByb290IGZvbGRlcgogICAgICAgICB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQu Y29weV9saWJyYXJ5X3Blcm1pc3Npb25zKCB0cmFucywgbGlicmFyeSw9CiBsaWJyYXJ5LnJvb3Rf Zm9sZGVyICkKLSAgICAgICAgbWVzc2FnZSA9M0QgIlBlcm1pc3Npb25zIHVwZGF0ZWQgZm9yIGxp YnJhcnkgJyVzJy4iICUgbGlicmFyeS5uYW1lCiAgICAgICAgIGl0ZW0gPTNEIGxpYnJhcnkudG9f ZGljdCggdmlldz0zRCdlbGVtZW50JywgdmFsdWVfbWFwcGVyPTNEeyAnaWQnID0KOiB0cmFucy5z ZWN1cml0eS5lbmNvZGVfaWQgLCAncm9vdF9mb2xkZXJfaWQnIDogdHJhbnMuc2VjdXJpdHkuZW5j b2RlX2lkIH0gKQogICAgICAgICByZXR1cm4gaXRlbQo9MjAKCmRpZmYgLXIgNTMwNWU0ZDFjOTlk NDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5ND0K NzQwZjljMzdiNDQ0ZDhkMTIgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvbGlicmFyeV9j b250ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9saWJyYXJ5X2Nv bnRlbnRzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2xpYnJhcnlfY29u dGVudHMucHkKQEAgLTMzLDEyICszMywxMiBAQAogICAgICAgICAuLiBub3RlOjogTWF5IGJlIHNs b3chIFJldHVybnMgYWxsIGNvbnRlbnQgdHJhdmVyc2luZyByZWN1cnNpdmVseSA9CnRocm91Z2gg YWxsIGZvbGRlcnMuCiAgICAgICAgIC4uIHNlZWFsc286OiA6Y2xhc3M6YGdhbGF4eS53ZWJhcHBz LmdhbGF4eS5hcGkuRm9sZGVyQ29udGVudHNDb250cj0Kb2xsZXIuaW5kZXhgIGZvciBhIG5vbi1y ZWN1cnNpdmUgc29sdXRpb24KPTIwCi0gICAgICAgIDpwYXJhbSAgbGlicmFyeV9pZDogZW5jb2Rl ZCBpZCBzdHJpbmcgb2YgdGhlIGxpYnJhcnkKLSAgICAgICAgOnR5cGUgICBsaWJyYXJ5X2lkOiBz dHJpbmcKKyAgICAgICAgOnBhcmFtICBsaWJyYXJ5X2lkOiB0aGUgZW5jb2RlZCBpZCBvZiB0aGUg bGlicmFyeQorICAgICAgICA6dHlwZSAgIGxpYnJhcnlfaWQ6IHN0cgo9MjAKICAgICAgICAgOnJl dHVybnM6ICAgbGlzdCBvZiBkaWN0aW9uYXJpZXMgb2YgdGhlIGZvcm06CiAgICAgICAgICAgICAq IGlkOiAgIHRoZSBlbmNvZGVkIGlkIG9mIHRoZSBsaWJyYXJ5IGl0ZW0KLSAgICAgICAgICAgICog bmFtZTogdGhlICdsaWJhcnkgcGF0aCcKKyAgICAgICAgICAgICogbmFtZTogdGhlICdsaWJyYXJ5 IHBhdGgnCiAgICAgICAgICAgICAgICAgb3IgcmVsYXRpb25zaGlwIG9mIHRoZSBsaWJyYXJ5IGl0 ZW0gdG8gdGhlIHJvb3QKICAgICAgICAgICAgICogdHlwZTogJ2ZpbGUnIG9yICdmb2xkZXInCiAg ICAgICAgICAgICAqIHVybDogIHRoZSB1cmwgdG8gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9u IHRoZSBsaWJyYXJ5IGl0ZW0KQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICA6cGFyYW0gIGlk OiAgICAgICAgIHRoZSBlbmNvZGVkIGlkIG9mIHRoZSBsaWJyYXJ5IGl0ZW0gdG8gcmV0dXJuCiAg ICAgICAgIDp0eXBlICAgaWQ6ICAgICAgICAgc3RyCj0yMAotICAgICAgICA6cGFyYW0gIGxpYnJh cnlfaWQ6IGVuY29kZWQgaWQgc3RyaW5nIG9mIHRoZSBsaWJyYXJ5IHRoYXQgY29udGFpbnM9CiB0 aGlzIGl0ZW0KKyAgICAgICAgOnBhcmFtICBsaWJyYXJ5X2lkOiB0aGUgZW5jb2RlZCBpZCBvZiB0 aGUgbGlicmFyeSB0aGF0IGNvbnRhaW5zIHRoPQppcyBpdGVtCiAgICAgICAgIDp0eXBlICAgbGli cmFyeV9pZDogc3RyCj0yMAogICAgICAgICA6cmV0dXJuczogICBkZXRhaWxlZCBsaWJyYXJ5IGl0 ZW0gaW5mb3JtYXRpb24KQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgOmZ1bmM6YGdh bGF4eS5tb2RlbC5MaWJyYXJ5RGF0YXNldC50b19kaWN0YCBhbmQKICAgICAgICAgICAgIDphdHRy OmBnYWxheHkubW9kZWwuTGlicmFyeUZvbGRlci5kaWN0X2VsZW1lbnRfdmlzaWJsZV9rZXlzYAog ICAgICAgICAiIiIKLSAgICAgICAgY2xhc3NfbmFtZSwgY29udGVudF9pZCA9M0Qgc2VsZi5fX2Rl Y29kZV9saWJyYXJ5X2NvbnRlbnRfaWQoIHRyYW5zPQosIGlkICkKKyAgICAgICAgY2xhc3NfbmFt ZSwgY29udGVudF9pZCA9M0Qgc2VsZi5fX2RlY29kZV9saWJyYXJ5X2NvbnRlbnRfaWQoIGlkICkK ICAgICAgICAgaWYgY2xhc3NfbmFtZSA9M0Q9M0QgJ0xpYnJhcnlGb2xkZXInOgogICAgICAgICAg ICAgY29udGVudCA9M0Qgc2VsZi5nZXRfbGlicmFyeV9mb2xkZXIoIHRyYW5zLCBjb250ZW50X2lk LCBjaGVja189Cm93bmVyc2hpcD0zREZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCiAg ICAgICAgICAgICBydmFsID0zRCBjb250ZW50LnRvX2RpY3QoIHZpZXc9M0QnZWxlbWVudCcsIHZh bHVlX21hcHBlcj0zRHsgJz0KaWQnOiB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQgfSApCkBAIC0x NTAsMjcgKzE1MCwzOSBAQAogICAgICAgICB0aGUgSERBJ3MgZW5jb2RlZCBpZCBpbiBgYGZyb21f aGRhX2lkYGAgKGFuZCBvcHRpb25hbGx5IGBgbGRkYV9tZXM9CnNhZ2VgYCkuCj0yMAogICAgICAg ICA6dHlwZSAgIGxpYnJhcnlfaWQ6IHN0cgotICAgICAgICA6cGFyYW0gIGxpYnJhcnlfaWQ6IGVu Y29kZWQgaWQgc3RyaW5nIG9mIHRoZSBsaWJyYXJ5IHdoZXJlIHRvIGNyZWE9CnRlIHRoZSBuZXcg aXRlbQorICAgICAgICA6cGFyYW0gIGxpYnJhcnlfaWQ6IHRoZSBlbmNvZGVkIGlkIG9mIHRoZSBs aWJyYXJ5IHdoZXJlIHRvIGNyZWF0ZSA9CnRoZSBuZXcgaXRlbQogICAgICAgICA6dHlwZSAgIHBh eWxvYWQ6ICAgIGRpY3QKICAgICAgICAgOnBhcmFtICBwYXlsb2FkOiAgICBkaWN0aW9uYXJ5IHN0 cnVjdHVyZSBjb250YWluaW5nOgo9MjAKLSAgICAgICAgICAgICogZm9sZGVyX2lkOiAgICB0aGUg cGFyZW50IGZvbGRlciBvZiB0aGUgbmV3IGl0ZW0KKyAgICAgICAgICAgICogZm9sZGVyX2lkOiAg ICB0aGUgZW5jb2RlZCBpZCBvZiB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGUgbmV3PQogaXRlbQog ICAgICAgICAgICAgKiBjcmVhdGVfdHlwZTogIHRoZSB0eXBlIG9mIGl0ZW0gdG8gY3JlYXRlICgn ZmlsZScsICdmb2xkZXInIG89CnIgJ2NvbGxlY3Rpb24nKQotICAgICAgICAgICAgKiBmcm9tX2hk YV9pZDogIChvcHRpb25hbCkgdGhlIGlkIG9mIGFuIGFjY2Vzc2libGUgSERBIHRvIGNvcHk9CiBp bnRvIHRoZQotICAgICAgICAgICAgICAgIGxpYnJhcnkKKyAgICAgICAgICAgICogZnJvbV9oZGFf aWQ6ICAob3B0aW9uYWwsIG9ubHkgaWYgY3JlYXRlX3R5cGUgaXMgJ2ZpbGUnKSB0aGUKKyAgICAg ICAgICAgICAgICBlbmNvZGVkIGlkIG9mIGFuIGFjY2Vzc2libGUgSERBIHRvIGNvcHkgaW50byB0 aGUgbGlicmFyeQogICAgICAgICAgICAgKiBsZGRhX21lc3NhZ2U6IChvcHRpb25hbCkgdGhlIG5l dyBtZXNzYWdlIGF0dHJpYnV0ZSBvZiB0aGUgTEQ9CkRBIGNyZWF0ZWQKICAgICAgICAgICAgICog ZXh0ZW5kZWRfbWV0YWRhdGE6IChvcHRpb25hbCkgZHViLWRpY3Rpb25hcnkgY29udGFpbmluZyBh bnkgPQpleHRlbmRlZAogICAgICAgICAgICAgICAgIG1ldGFkYXRhIHRvIGFzc29jaWF0ZSB3aXRo IHRoZSBpdGVtCi0gICAgICAgICAgICAqIGxpbmtfZGF0YV9vbmx5OiAob3B0aW9uYWwpIGVpdGhl ciAnY29weV9maWxlcycgKGRlZmF1bHQpIG9yID0KJ2xpbmtfdG9fZmlsZXMnCiAgICAgICAgICAg ICAqIHVwbG9hZF9vcHRpb246IChvcHRpb25hbCkgb25lIG9mICd1cGxvYWRfZmlsZScgKGRlZmF1 bHQpLCAndT0KcGxvYWRfZGlyZWN0b3J5JyBvciAndXBsb2FkX3BhdGhzJwotICAgICAgICAgICAg KiBzZXJ2ZXJfZGlyOiAob3B0aW9uYWwpIG9ubHkgaWYgdXBsb2FkX29wdGlvbiBpcyAndXBsb2Fk X2RpcmU9CmN0b3J5JwotICAgICAgICAgICAgKiBmaWxlc3lzdGVtX3BhdGhzOiAob3B0aW9uYWwp IG9ubHkgaWYgdXBsb2FkX29wdGlvbiBpcyAndXBsb2E9CmRfcGF0aHMnIGFuZCB0aGUgdXNlciBp cyBhbiBhZG1pbgorICAgICAgICAgICAgKiBzZXJ2ZXJfZGlyOiAob3B0aW9uYWwsIG9ubHkgaWYg dXBsb2FkX29wdGlvbiBpcworICAgICAgICAgICAgICAgICd1cGxvYWRfZGlyZWN0b3J5JykgcmVs YXRpdmUgcGF0aCBvZiB0aGUgc3ViZGlyZWN0b3J5IG9mIEc9CmFsYXh5CisgICAgICAgICAgICAg ICAgYGBsaWJyYXJ5X2ltcG9ydF9kaXJgYCB0byB1cGxvYWQuIEFsbCBhbmQgb25seSB0aGUgZmls ZXMgKD0KaS5lLgorICAgICAgICAgICAgICAgIG5vIHN1YmRpcmVjdG9yaWVzKSBjb250YWluZWQg aW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgd2k9CmxsIGJlCisgICAgICAgICAgICAgICAgdXBs b2FkZWQuCisgICAgICAgICAgICAqIGZpbGVzeXN0ZW1fcGF0aHM6IChvcHRpb25hbCwgb25seSBp ZiB1cGxvYWRfb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgJ3VwbG9hZF9wYXRocycgYW5kIHRo ZSB1c2VyIGlzIGFuIGFkbWluKSBmaWxlIHBhdGhzIG9uIHRoZQorICAgICAgICAgICAgICAgIEdh bGF4eSBzZXJ2ZXIgdG8gdXBsb2FkIHRvIHRoZSBsaWJyYXJ5LCBvbmUgZmlsZSBwZXIgbGluZQor ICAgICAgICAgICAgKiBsaW5rX2RhdGFfb25seTogKG9wdGlvbmFsLCBvbmx5IHdoZW4gdXBsb2Fk X29wdGlvbiBpcworICAgICAgICAgICAgICAgICd1cGxvYWRfZGlyZWN0b3J5JyBvciAndXBsb2Fk X3BhdGhzJykgZWl0aGVyICdjb3B5X2ZpbGVzJworICAgICAgICAgICAgICAgIChkZWZhdWx0KSBv ciAnbGlua190b19maWxlcycuIFNldHRpbmcgdG8gJ2xpbmtfdG9fZmlsZXMnCisgICAgICAgICAg ICAgICAgc3ltbGlua3MgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlcworICAgICAgICAgICAg KiBuYW1lOiAob3B0aW9uYWwsIG9ubHkgaWYgY3JlYXRlX3R5cGUgaXMgJ2ZvbGRlcicpIG5hbWUg b2YgdGhlCisgICAgICAgICAgICAgICAgZm9sZGVyIHRvIGNyZWF0ZQorICAgICAgICAgICAgKiBk ZXNjcmlwdGlvbjogKG9wdGlvbmFsLCBvbmx5IGlmIGNyZWF0ZV90eXBlIGlzICdmb2xkZXInKQor ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlCj0yMAog ICAgICAgICA6cnR5cGU6ICAgICBkaWN0CiAgICAgICAgIDpyZXR1cm5zOiAgIGEgZGljdGlvbmFy eSBjb250YWluaW5nIHRoZSBpZCwgbmFtZSwKICAgICAgICAgICAgIGFuZCAnc2hvdycgdXJsIG9m IHRoZSBuZXcgaXRlbQogICAgICAgICAiIiIKLSAgICAgICAgY3JlYXRlX3R5cGUgPTNEIE5vbmUK ICAgICAgICAgaWYgJ2NyZWF0ZV90eXBlJyBub3QgaW4gcGF5bG9hZDoKICAgICAgICAgICAgIHRy YW5zLnJlc3BvbnNlLnN0YXR1cyA9M0QgNDAwCiAgICAgICAgICAgICByZXR1cm4gIk1pc3Npbmcg cmVxdWlyZWQgJ2NyZWF0ZV90eXBlJyBwYXJhbWV0ZXIuIgpAQCAtMTgyLDEwICsxOTQsMTAgQEAK PTIwCiAgICAgICAgIGlmICdmb2xkZXJfaWQnIG5vdCBpbiBwYXlsb2FkOgogICAgICAgICAgICAg dHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA0MDAKLSAgICAgICAgICAgIHJldHVybiAiTWlzc2lu ZyByZXF1cmVkICdmb2xkZXJfaWQnIHBhcmFtZXRlci4iCisgICAgICAgICAgICByZXR1cm4gIk1p c3NpbmcgcmVxdWlyZWQgJ2ZvbGRlcl9pZCcgcGFyYW1ldGVyLiIKICAgICAgICAgZWxzZToKICAg ICAgICAgICAgIGZvbGRlcl9pZCA9M0QgcGF5bG9hZC5wb3AoICdmb2xkZXJfaWQnICkKLSAgICAg ICAgICAgIGNsYXNzX25hbWUsIGZvbGRlcl9pZCA9M0Qgc2VsZi5fX2RlY29kZV9saWJyYXJ5X2Nv bnRlbnRfaWQoIHRyPQphbnMsIGZvbGRlcl9pZCApCisgICAgICAgICAgICBjbGFzc19uYW1lLCBm b2xkZXJfaWQgPTNEIHNlbGYuX19kZWNvZGVfbGlicmFyeV9jb250ZW50X2lkKCBmbz0KbGRlcl9p ZCApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc2VjdXJpdHkgaXMgY2hlY2tlZCBpbiB0 aGUgZG93bnN0cmVhbSBjb250cm9sbGVyCiAgICAgICAgICAgICBwYXJlbnQgPTNEIHNlbGYuZ2V0 X2xpYnJhcnlfZm9sZGVyKCB0cmFucywgZm9sZGVyX2lkLCBjaGVja19vdz0KbmVyc2hpcD0zREZh bHNlLCBjaGVja19hY2Nlc3NpYmxlPTNERmFsc2UgKQpAQCAtMjAyLDkgKzIxNCw3IEBACj0yMAog ICAgICAgICAjY2hlY2sgZm9yIGV4dGVuZGVkIG1ldGFkYXRhLCBzdG9yZSBpdCBhbmQgcG9wIGl0 IG91dCBvZiB0aGUgcGFyYW0KICAgICAgICAgI290aGVyd2lzZSBzYW5pdGl6ZV9wYXJhbSB3aWxs IGhhdmUgYSBmaXQKLSAgICAgICAgZXhfbWV0YV9wYXlsb2FkID0zRCBOb25lCi0gICAgICAgIGlm ICdleHRlbmRlZF9tZXRhZGF0YScgaW4gcGF5bG9hZDoKLSAgICAgICAgICAgIGV4X21ldGFfcGF5 bG9hZCA9M0QgcGF5bG9hZC5wb3AoJ2V4dGVuZGVkX21ldGFkYXRhJykKKyAgICAgICAgZXhfbWV0 YV9wYXlsb2FkID0zRCBwYXlsb2FkLnBvcCgnZXh0ZW5kZWRfbWV0YWRhdGEnLCBOb25lKQo9MjAK ICAgICAgICAgIyBOb3cgY3JlYXRlIHRoZSBkZXNpcmVkIGNvbnRlbnQgb2JqZWN0LCBlaXRoZXIg ZmlsZSBvciBmb2xkZXIuCiAgICAgICAgIGlmIGNyZWF0ZV90eXBlID0zRD0zRCAnZmlsZSc6CkBA IC0yNzYsNyArMjg2LDcgQEAKPTIwCiAgICAgZGVmIF9jb3B5X2hkYV90b19saWJyYXJ5X2ZvbGRl ciggc2VsZiwgdHJhbnMsIGZyb21faGRhX2lkLCBsaWJyYXJ5X2lkLD0KIGZvbGRlcl9pZCwgbGRk YV9tZXNzYWdlPTNEJycgKToKICAgICAgICAgIiIiCi0gICAgICAgIENvcGllcyBoZGEgYGBmcm9t X2hkYV9pZGBgIHRvIGxpYnJhcnkgZm9sZGVyIGBgbGlicmFyeV9mb2xkZXJfaWRgYD0KIG9wdGlv bmFsbHkKKyAgICAgICAgQ29waWVzIGhkYSBgYGZyb21faGRhX2lkYGAgdG8gbGlicmFyeSBmb2xk ZXIgYGBmb2xkZXJfaWRgYCwgb3B0aW9uPQphbGx5CiAgICAgICAgIGFkZGluZyBgYGxkZGFfbWVz c2FnZWBgIHRvIHRoZSBuZXcgbGRkYSdzIGBgbWVzc2FnZWBgLgo9MjAKICAgICAgICAgYGBsaWJy YXJ5X2NvbnRlbnRzLmNyZWF0ZWBgIHdpbGwgYnJhbmNoIHRvIHRoaXMgaWYgY2FsbGVkIHdpdGgg J2ZyPQpvbV9oZGFfaWQnCkBAIC0zMzEsNyArMzQxLDcgQEAKICAgICAgICAgOnR5cGUgICBpZDog ICAgICAgICBzdHIKICAgICAgICAgOnBhcmFtICBpZDogICAgICAgICB0aGUgZW5jb2RlZCBpZCBv ZiB0aGUgbGlicmFyeSBpdGVtIHRvIHJldHVybgogICAgICAgICA6dHlwZSAgIGxpYnJhcnlfaWQ6 IHN0cgotICAgICAgICA6cGFyYW0gIGxpYnJhcnlfaWQ6IGVuY29kZWQgaWQgc3RyaW5nIG9mIHRo ZSBsaWJyYXJ5IHRoYXQgY29udGFpbnM9CiB0aGlzIGl0ZW0KKyAgICAgICAgOnBhcmFtICBsaWJy YXJ5X2lkOiB0aGUgZW5jb2RlZCBpZCBvZiB0aGUgbGlicmFyeSB0aGF0IGNvbnRhaW5zIHRoPQpp cyBpdGVtCiAgICAgICAgIDp0eXBlICAgcGF5bG9hZDogICAgZGljdAogICAgICAgICA6cGFyYW0g IHBheWxvYWQ6ICAgIGRpY3Rpb25hcnkgc3RydWN0dXJlIGNvbnRhaW5pbmc6OgogICAgICAgICAg ICAgJ2NvbnZlcnRlZF9kYXRhc2V0X2lkJzoKQEAgLTM1MCw3ICszNjAsNyBAQAogICAgICAgICAg ICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGFzc29jICkKICAgICAgICAgICAgIHRyYW5zLnNhX3Nl c3Npb24uZmx1c2goKQo9MjAKLSAgICBkZWYgX19kZWNvZGVfbGlicmFyeV9jb250ZW50X2lkKCBz ZWxmLCB0cmFucywgY29udGVudF9pZCApOgorICAgIGRlZiBfX2RlY29kZV9saWJyYXJ5X2NvbnRl bnRfaWQoIHNlbGYsIGNvbnRlbnRfaWQgKToKICAgICAgICAgaWYgbGVuKCBjb250ZW50X2lkICkg JSAxNiA9M0Q9M0QgMDoKICAgICAgICAgICAgIHJldHVybiAnTGlicmFyeURhdGFzZXQnLCBjb250 ZW50X2lkCiAgICAgICAgIGVsaWYgY29udGVudF9pZC5zdGFydHN3aXRoKCAnRicgKToKCmRpZmYg LXIgNTMwNWU0ZDFjOTlkNDc4YWRhNWZkNjI5MzBlNDI4NzVkYTQ4ZmQxYyAtciA2YThhNzlmOWI2 ZDUyYmY5NmUyMmQ5ND0KNzQwZjljMzdiNDQ0ZDhkMTIgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4 eS9hcGkvdG9vbHMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvdG9vbHMu cHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvdG9vbHMucHkKQEAgLTEwLDcg KzEwLDcgQEAKIGZyb20gZ2FsYXh5LnZpc3VhbGl6YXRpb24uZ2Vub21lcyBpbXBvcnQgR2Vub21l UmVnaW9uCiBmcm9tIGdhbGF4eS51dGlsLmpzb24gaW1wb3J0IGR1bXBzCiBmcm9tIGdhbGF4eS52 aXN1YWxpemF0aW9uLmRhdGFfcHJvdmlkZXJzLmdlbm9tZSBpbXBvcnQgKgotZnJvbSBnYWxheHku dG9vbHMucGFyYW1ldGVycyBpbXBvcnQgcGFyYW1zX3RvX2luY29taW5nLCBjaGVja19wYXJhbQor ZnJvbSBnYWxheHkudG9vbHMucGFyYW1ldGVycyBpbXBvcnQgY2hlY2tfcGFyYW0KIGZyb20gZ2Fs YXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0IHZpc2l0X2lucHV0X3ZhbHVlcwogZnJvbSBnYWxh eHkudG9vbHMucGFyYW1ldGVycy5tZXRhIGltcG9ydCBleHBhbmRfbWV0YV9wYXJhbWV0ZXJzCiBm cm9tIGdhbGF4eS5tYW5hZ2Vycy5jb2xsZWN0aW9uc191dGlsIGltcG9ydCBkaWN0aWZ5X2RhdGFz ZXRfY29sbGVjdGlvbl9pbj0Kc3RhbmNlCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGlmIG5v dCB0b29sOgogICAgICAgICAgICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA1MDAKICAgICAg ICAgICAgIHJldHVybiB7ICdlcnJvcic6ICdDb3VsZCBub3QgZmluZCB0b29sIHdpdGggaWQgXCcl c1wnJyAlIHRvb2xfPQppZCB9Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9kaWN0KHRyYW5z LCB0b29sLCBrd2QpCisgICAgICAgIHJldHVybiB0b29sLnRvX2pzb24odHJhbnMsICoqa3dkKQog ICAgPTIwCiAgICAgQF9mdXR1cmVfZXhwb3NlX2FwaQogICAgIEB3ZWIucmVxdWlyZV9hZG1pbgpA QCAtNDkzLDMwOCArNDkzLDMgQEAKICAgICAgICAgZGF0YXNldF9kaWN0WyAnaWQnIF0gPTNEIHRy YW5zLnNlY3VyaXR5LmVuY29kZV9pZCggZGF0YXNldF9kaWN0WyAnPQppZCcgXSApCiAgICAgICAg IGRhdGFzZXRfZGljdFsgJ3RyYWNrX2NvbmZpZycgXSA9M0Qgc2VsZi5nZXRfbmV3X3RyYWNrX2Nv bmZpZyggdHJhbj0Kcywgb3V0cHV0X2RhdGFzZXQgKQogICAgICAgICByZXR1cm4gZGF0YXNldF9k aWN0Ci0KLSAgICBkZWYgX2J1aWxkX2RpY3Qoc2VsZiwgdHJhbnMsIHRvb2wsIGt3ZD0zRHt9KToK LSAgICAgICAgIiIiCi0gICAgICAgIFJlY3Vyc2l2ZWx5IGNyZWF0ZXMgYSB0b29sIGRpY3Rpb25h cnkgY29udGFpbmluZyByZXBlYXRzLCBkeW5hbWljID0Kb3B0aW9ucyBhbmQgdXBkYXRlZCBzdGF0 ZXMuCi0gICAgICAgICIiIgotICAgICAgICBqb2JfaWQgPTNEIGt3ZC5nZXQoJ2pvYl9pZCcsIE5v bmUpCi0gICAgICAgIGRhdGFzZXRfaWQgPTNEIGt3ZC5nZXQoJ2RhdGFzZXRfaWQnLCBOb25lKQot ICAgICAgID0yMAotICAgICAgICAjIGxvYWQgam9iIGRldGFpbHMgaWYgcHJvdmlkZWQKLSAgICAg ICAgam9iID0zRCBOb25lCi0gICAgICAgIGlmIGpvYl9pZDoKLSAgICAgICAgICAgIHRyeToKLSAg ICAgICAgICAgICAgICBqb2JfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggam9iX2lk ICkKLSAgICAgICAgICAgICAgICBqb2IgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5z LmFwcC5tb2RlbC5Kb2IgKS5nZXQoPQogam9iX2lkICkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24sIGV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICB0cmFucy5yZXNwb25zZS5zdGF0dXMg PTNEIDUwMAotICAgICAgICAgICAgICAgIHJldHVybiB7ICdlcnJvcic6ICdGYWlsZWQgdG8gcmV0 cmlldmUgam9iLicgfQotICAgICAgICBlbGlmIGRhdGFzZXRfaWQ6Ci0gICAgICAgICAgICB0cnk6 Ci0gICAgICAgICAgICAgICAgZGF0YXNldF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lk KCBkYXRhc2V0X2lkICkKLSAgICAgICAgICAgICAgICBkYXRhID0zRCB0cmFucy5zYV9zZXNzaW9u LnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhPQp0YXNldEFzc29jaWF0aW9uICkuZ2V0 KCBkYXRhc2V0X2lkICkKLSAgICAgICAgICAgICAgICBpZiBub3QgKCB0cmFucy51c2VyX2lzX2Fk bWluKCkgb3IgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50PQouY2FuX2FjY2Vzc19kYXRhc2V0KCB0 cmFucy5nZXRfY3VycmVudF91c2VyX3JvbGVzKCksIGRhdGEuZGF0YXNldCApICk6Ci0gICAgICAg ICAgICAgICAgICAgIHRyYW5zLnJlc3BvbnNlLnN0YXR1cyA9M0QgNTAwCi0gICAgICAgICAgICAg ICAgICAgIHJldHVybiB7ICdlcnJvcic6ICdVc2VyIGhhcyBubyBhY2Nlc3MgdG8gZGF0YXNldC4n IH0KLSAgICAgICAgICAgICAgICBqb2IgPTNEIGRhdGEuY3JlYXRpbmdfam9iCi0gICAgICAgICAg ICAgICAgaWYgbm90IGpvYjoKLSAgICAgICAgICAgICAgICAgICAgdHJhbnMucmVzcG9uc2Uuc3Rh dHVzID0zRCA1MDAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzogJ0NyZWF0 aW5nIGpvYiBub3QgZm91bmQuJyB9Ci0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleGNl cHRpb246Ci0gICAgICAgICAgICAgICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA1MDAKLSAg ICAgICAgICAgICAgICByZXR1cm4geyAnZXJyb3InOiAnRmFpbGVkIHRvIGdldCBqb2IgaW5mb3Jt YXRpb24uJyB9Ci0gICAgICAgPTIwCi0gICAgICAgICMgbG9hZCBqb2IgcGFyYW1ldGVycyBpbnRv IGluY29taW5nCi0gICAgICAgIHRvb2xfbWVzc2FnZSA9M0QgJycKLSAgICAgICAgaWYgam9iOgot ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGpvYl9wYXJhbXMgPTNEIGpvYi5nZXRf cGFyYW1fdmFsdWVzKCB0cmFucy5hcHAsIGlnbm9yZV9lcnI9Cm9ycyA9M0QgVHJ1ZSApCi0gICAg ICAgICAgICAgICAgam9iX21lc3NhZ2VzID0zRCB0b29sLmNoZWNrX2FuZF91cGRhdGVfcGFyYW1f dmFsdWVzKCBqb2JfcD0KYXJhbXMsIHRyYW5zLCB1cGRhdGVfdmFsdWVzPTNERmFsc2UgKQotICAg ICAgICAgICAgICAgIHRvb2xfbWVzc2FnZSA9M0Qgc2VsZi5fY29tcGFyZV90b29sX3ZlcnNpb24o dHJhbnMsIHRvb2wsIGo9Cm9iKQotICAgICAgICAgICAgICAgIHBhcmFtc190b19pbmNvbWluZygg a3dkLCB0b29sLmlucHV0cywgam9iX3BhcmFtcywgdHJhbnMuYXA9CnAgKQotICAgICAgICAgICAg ZXhjZXB0IEV4Y2VwdGlvbiwgZXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIHRyYW5zLnJlc3Bv bnNlLnN0YXR1cyA9M0QgNTAwCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzogc3Ry KCBleGNlcHRpb24gKSB9Ci0gICAgICAgICAgICAgICA9MjAKLSAgICAgICAgIyBjcmVhdGUgcGFy YW1ldGVyIG9iamVjdAotICAgICAgICBwYXJhbXMgPTNEIGdhbGF4eS51dGlsLlBhcmFtcygga3dk LCBzYW5pdGl6ZSA9M0QgRmFsc2UgKQotICAgICAgID0yMAotICAgICAgICAjIGNvbnZlcnQgdmFs dWUgdG8ganNvbmlmaWFibGUgdmFsdWUKLSAgICAgICAgZGVmIGNvbnZlcnQodik6Ci0gICAgICAg ICAgICAjIGNoZWNrIGlmIHZhbHVlIGlzIG51bWVyaWMKLSAgICAgICAgICAgIGlzbnVtYmVyID0z RCBGYWxzZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZsb2F0KHYpCi0gICAg ICAgICAgICAgICAgaXNudW1iZXIgPTNEIFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRp b246Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAjIGZpeCBoZGEgcGFyc2lu ZwotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9u KToKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAnaWQnICA6 IHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCh2LmlkKSwKLSAgICAgICAgICAgICAgICAgICAgJ3Ny YycgOiAnaGRhJwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2LCBib29sKToKLSAgICAgICAgICAgICAgICBpZiB2IGlzIFRydWU6Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybiAndHJ1ZScKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg ICAgICAgICByZXR1cm4gJ2ZhbHNlJwotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGJh c2VzdHJpbmcpIG9yIGlzbnVtYmVyOgotICAgICAgICAgICAgICAgIHJldHVybiB2Ci0gICAgICAg ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgIyBlbnN1 cmVzIHRoYXQgaW5wdXQgZGljdGlvbmFyeSBpcyBqc29uaWZpYWJsZQotICAgICAgICBkZWYgc2Fu aXRpemUoZGljdCk6Ci0gICAgICAgICAgICAjIGdldCBjdXJyZW50IHZhbHVlCi0gICAgICAgICAg ICB2YWx1ZSA9M0QgZGljdFsndmFsdWUnXSBpZiAndmFsdWUnIGluIGRpY3QgZWxzZSBOb25lCi0K LSAgICAgICAgICAgICMgaWRlbnRpZnkgbGlzdHMKLSAgICAgICAgICAgIGlmIGRpY3RbJ3R5cGUn XSBpbiBbJ2RhdGEnXToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0 KToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPTNEIFsgY29udmVydCh2KSBmb3IgdiBpbiB2 YWx1ZSBdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUg PTNEIFsgY29udmVydCh2YWx1ZSkgXQotICAgICAgICAgICAgICAgIHZhbHVlID0zRCB7Ci0gICAg ICAgICAgICAgICAgICAgICdiYXRjaCcgICAgIDogZGljdFsnbXVsdGlwbGUnXSwKLSAgICAgICAg ICAgICAgICAgICAgJ3ZhbHVlcycgICAgOiB2YWx1ZQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6Ci0gICAgICAgICAgICAgICAgdmFs dWUgPTNEIFsgY29udmVydCh2KSBmb3IgdiBpbiB2YWx1ZSBdCi0gICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgIHZhbHVlID0zRCBjb252ZXJ0KHZhbHVlKQotCi0gICAgICAgICAgICAj IHVwZGF0ZSBhbmQgcmV0dXJuCi0gICAgICAgICAgICBkaWN0Wyd2YWx1ZSddID0zRCB2YWx1ZQot ICAgICAgICAgICAgcmV0dXJuIGRpY3QKLSAgICAgICA9MjAKLSAgICAgICAgIyBpbml0aWFsaXpl IHN0YXRlIHVzaW5nIGRlZmF1bHQgcGFyYW1ldGVycwotICAgICAgICBkZWYgaW5pdGlhbGl6ZV9z dGF0ZSh0cmFucywgaW5wdXRzLCBzdGF0ZSwgY29udGV4dD0zRE5vbmUpOgotICAgICAgICAgICAg Y29udGV4dCA9M0QgRXhwcmVzc2lvbkNvbnRleHQoc3RhdGUsIGNvbnRleHQpCi0gICAgICAgICAg ICBmb3IgaW5wdXQgaW4gaW5wdXRzLml0ZXJ2YWx1ZXMoKToKLSAgICAgICAgICAgICAgICBzdGF0 ZVtpbnB1dC5uYW1lXSA9M0QgaW5wdXQuZ2V0X2luaXRpYWxfdmFsdWUodHJhbnMsIGNvbnRlPQp4 dCkKLSAgID0yMAotICAgICAgICAjIGNoZWNrIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgdmFsdWUg YW5kIHVwZGF0ZSBpdCBpZiBuZWNlc3NhcnkKLSAgICAgICAgZGVmIGNoZWNrX3N0YXRlKHRyYW5z LCBpbnB1dCwgZGVmYXVsdF92YWx1ZSwgY29udGV4dCk6Ci0gICAgICAgICAgICB2YWx1ZSA9M0Qg ZGVmYXVsdF92YWx1ZQotICAgICAgICAgICAgZXJyb3IgPTNEICdTdGF0ZSB2YWxpZGF0aW9uIGZh aWxlZC4nCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyByZXNvbHZlcyB0aGUg aW5jb25zaXN0ZW50IGRlZmluaXRpb24gb2YgYm9vbGVhbiBwYXJhbWV0ZT0KcnMgKHNlZSBiYXNl LnB5KSB3aXRob3V0IG1vZGlmeWluZyBzaGFyZWQgY29kZQotICAgICAgICAgICAgICAgIGlmIGlu cHV0LnR5cGUgPTNEPTNEICdib29sZWFuJyBhbmQgaXNpbnN0YW5jZShkZWZhdWx0X3ZhbHU9CmUs IGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZXJyb3IgPTNEIFt1dGls LnN0cmluZ19hc19ib29sKGRlZmF1bHRfdmFsdWUpLCA9Ck5vbmVdCi0gICAgICAgICAgICAgICAg ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGVycm9yID0zRCBjaGVja19wYXJhbSh0 cmFucywgaW5wdXQsIGRlZmF1bHRfdmFsPQp1ZSwgY29udGV4dCkKLSAgICAgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKCdDaGVja2luZyBwYXJhbWV0 ZXIgJXMgZmFpbGVkLicsIGlucHV0Lm5hbWUpCi0gICAgICAgICAgICAgICAgcGFzcwotICAgICAg ICAgICAgcmV0dXJuIFt2YWx1ZSwgZXJyb3JdCi0gICA9MjAKLSAgICAgICAgIyBwb3B1bGF0ZXMg c3RhdGUgd2l0aCBpbmNvbWluZyB1cmwgcGFyYW1ldGVycwotICAgICAgICBkZWYgcG9wdWxhdGVf c3RhdGUodHJhbnMsIGlucHV0cywgc3RhdGUsIGVycm9ycywgaW5jb21pbmcsIHByZWZpeD0KPTNE IiIsIGNvbnRleHQ9M0ROb25lICk6Ci0gICAgICAgICAgICBjb250ZXh0ID0zRCBFeHByZXNzaW9u Q29udGV4dChzdGF0ZSwgY29udGV4dCkKLSAgICAgICAgICAgIGZvciBpbnB1dCBpbiBpbnB1dHMu aXRlcnZhbHVlcygpOgotICAgICAgICAgICAgICAgIGtleSA9M0QgcHJlZml4ICsgaW5wdXQubmFt ZQotICAgICAgICAgICAgICAgIGlmIGlucHV0LnR5cGUgPTNEPTNEICdyZXBlYXQnOgotICAgICAg ICAgICAgICAgICAgICBncm91cF9zdGF0ZSA9M0Qgc3RhdGVbaW5wdXQubmFtZV0KLSAgICAgICAg ICAgICAgICAgICAgcmVwX2luZGV4ID0zRCAwCi0gICAgICAgICAgICAgICAgICAgIGRlbCBncm91 cF9zdGF0ZVs6XQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAg ICAgICAgICAgICAgcmVwX25hbWUgPTNEICIlc18lZCIgJSAoa2V5LCByZXBfaW5kZXgpCi0gICAg ICAgICAgICAgICAgICAgICAgICBpZiBub3QgYW55KFtpbmNvbWluZ19rZXkuc3RhcnRzd2l0aChy ZXBfbmFtZSkgZm9yID0KaW5jb21pbmdfa2V5IGluIGluY29taW5nLmtleXMoKV0pOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBy ZXBfaW5kZXggPCBpbnB1dC5tYXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0 YXRlID0zRCB7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0ZVsnX19pbmRl eF9fJ10gPTNEIHJlcF9pbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxp emVfc3RhdGUodHJhbnMsIGlucHV0LmlucHV0cywgbmV3X3N0YXQ9CmUsIGNvbnRleHQpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfc3RhdGUuYXBwZW5kKG5ld19zdGF0ZSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZV9zdGF0ZSh0cmFucywgaW5wdXQuaW5w dXRzLCBuZXdfc3RhdGUsPQogZXJyb3JzLCBpbmNvbWluZywgcHJlZml4PTNEcmVwX25hbWUgKyAi fCIsIGNvbnRleHQ9M0Rjb250ZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2luZGV4 ICs9M0QgMQotICAgICAgICAgICAgICAgIGVsaWYgaW5wdXQudHlwZSA9M0Q9M0QgJ2NvbmRpdGlv bmFsJzoKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBfc3RhdGUgPTNEIHN0YXRlW2lucHV0Lm5h bWVdCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwX3ByZWZpeCA9M0QgIiVzfCIgJSAoIGtleSAp Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfcGFyYW1fa2V5ID0zRCBncm91cF9wcmVmaXggKyBp bnB1dC50ZXN0X3BhcmFtLm5hbWUKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZSA9 M0QgaW5jb21pbmcuZ2V0KHRlc3RfcGFyYW1fa2V5LCBncm91cF9zPQp0YXRlLmdldChpbnB1dC50 ZXN0X3BhcmFtLm5hbWUsIE5vbmUpKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZXJyb3Ig PTNEIGNoZWNrX3N0YXRlKHRyYW5zLCBpbnB1dC50ZXN0X3BhcmFtLCA9CmRlZmF1bHRfdmFsdWUs IGNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgotICAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3JzW3Rlc3RfcGFyYW1fa2V5XSA9M0QgZXJyb3IKLSAgICAgICAgICAgICAg ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfY2FzZSA9M0QgaW5w dXQuZ2V0X2N1cnJlbnRfY2FzZSh2YWx1ZSwgdHJhPQpucykKLSAgICAgICAgICAgICAgICAgICAg ICAgIGdyb3VwX3N0YXRlID0zRCBzdGF0ZVtpbnB1dC5uYW1lXSA9M0Qge30KLSAgICAgICAgICAg ICAgICAgICAgICAgIGluaXRpYWxpemVfc3RhdGUodHJhbnMsIGlucHV0LmNhc2VzW2N1cnJlbnRf Y2FzZV0uPQppbnB1dHMsIGdyb3VwX3N0YXRlLCBjb250ZXh0KQotICAgICAgICAgICAgICAgICAg ICAgICAgcG9wdWxhdGVfc3RhdGUoIHRyYW5zLCBpbnB1dC5jYXNlc1tjdXJyZW50X2Nhc2VdLmk9 Cm5wdXRzLCBncm91cF9zdGF0ZSwgZXJyb3JzLCBpbmNvbWluZywgcHJlZml4PTNEZ3JvdXBfcHJl Zml4LCBjb250ZXh0PTNEY29udD0KZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBf c3RhdGVbJ19fY3VycmVudF9jYXNlX18nXSA9M0QgY3VycmVudF9jYXNlCi0gICAgICAgICAgICAg ICAgICAgIGdyb3VwX3N0YXRlW2lucHV0LnRlc3RfcGFyYW0ubmFtZV0gPTNEIHZhbHVlCi0gICAg ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZSA9M0Qg aW5jb21pbmcuZ2V0KGtleSwgc3RhdGUuZ2V0KGlucHV0Lm5hPQptZSwgTm9uZSkpCi0gICAgICAg ICAgICAgICAgICAgIHZhbHVlLCBlcnJvciA9M0QgY2hlY2tfc3RhdGUodHJhbnMsIGlucHV0LCBk ZWZhdWx0X3ZhbD0KdWUsIGNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgot ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzW2tleV0gPTNEIGVycm9yCi0gICAgICAgICAg ICAgICAgICAgIHN0YXRlW2lucHV0Lm5hbWVdID0zRCB2YWx1ZQotICAgICAgID0yMAotICAgICAg ICAjIGJ1aWxkcyB0b29sIG1vZGVsIGluY2x1ZGluZyBhbGwgYXR0cmlidXRlcwotICAgICAgICBk ZWYgaXRlcmF0ZShncm91cF9pbnB1dHMsIGlucHV0cywgdG9vbF9zdGF0ZSwgb3RoZXJfdmFsdWVz PTNETm9uZSk6Ci0gICAgICAgICAgICBvdGhlcl92YWx1ZXMgPTNEIEV4cHJlc3Npb25Db250ZXh0 KCB0b29sX3N0YXRlLCBvdGhlcl92YWx1ZXMgKQotICAgICAgICAgICAgZm9yIGlucHV0X2luZGV4 LCBpbnB1dCBpbiBlbnVtZXJhdGUoIGlucHV0cy5pdGVydmFsdWVzKCkgKToKLSAgICAgICAgICAg ICAgICAjIGNyZWF0ZSBtb2RlbCBkaWN0aW9uYXJ5Ci0gICAgICAgICAgICAgICAgZ3JvdXBfaW5w dXRzW2lucHV0X2luZGV4XSA9M0QgaW5wdXQudG9fZGljdCh0cmFucykKLSAgICAgICAgICAgICAg ICBpZiBncm91cF9pbnB1dHNbaW5wdXRfaW5kZXhdIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICAjIGlkZW50aWZ5IHN0YXQgZm9yIHN1YnNl Y3Rpb24vZ3JvdXAKLSAgICAgICAgICAgICAgICBncm91cF9zdGF0ZSA9M0QgdG9vbF9zdGF0ZVtp bnB1dC5uYW1lXQotCi0gICAgICAgICAgICAgICAgIyBpdGVyYXRlIGFuZCB1cGRhdGUgdmFsdWVz Ci0gICAgICAgICAgICAgICAgaWYgaW5wdXQudHlwZSA9M0Q9M0QgJ3JlcGVhdCc6Ci0gICAgICAg ICAgICAgICAgICAgIGdyb3VwX2NhY2hlID0zRCBncm91cF9pbnB1dHNbaW5wdXRfaW5kZXhdWydj YWNoZSddID0zRD0KIHt9Ci0gICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKCBsZW4o IGdyb3VwX3N0YXRlICkgKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2NhY2hlW2ld ID0zRCB7fQotICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSggZ3JvdXBfY2FjaGVbaV0s IGlucHV0LmlucHV0cywgZ3JvdXBfc3RhdGU9CltpXSwgb3RoZXJfdmFsdWVzICkKLSAgICAgICAg ICAgICAgICBlbGlmIGlucHV0LnR5cGUgPTNEPTNEICdjb25kaXRpb25hbCc6Ci0gICAgICAgICAg ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFyYW0gPTNEIGdy b3VwX2lucHV0c1tpbnB1dF9pbmRleF1bJ3Rlc3RfcGFyPQphbSddCi0gICAgICAgICAgICAgICAg ICAgICAgICB0ZXN0X3BhcmFtWyd2YWx1ZSddID0zRCBjb252ZXJ0KGdyb3VwX3N0YXRlW3Rlc3Rf cD0KYXJhbVsnbmFtZSddXSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK LSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgaSA9M0Qg Z3JvdXBfc3RhdGVbJ19fY3VycmVudF9jYXNlX18nXQotICAgICAgICAgICAgICAgICAgICBpdGVy YXRlKGdyb3VwX2lucHV0c1tpbnB1dF9pbmRleF1bJ2Nhc2VzJ11baV1bJ2lucHV0cyc9Cl0sIGlu cHV0LmNhc2VzW2ldLmlucHV0cywgZ3JvdXBfc3RhdGUsIG90aGVyX3ZhbHVlcykKLSAgICAgICAg ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBpbnB1dCBkaWN0aW9u YXJ5LCB0cnkgdG8gcGFzcyBvdGhlcl92YWx1ZXMgaWY9CiB0b19kaWN0IGZ1bmN0aW9uIHN1cHBv cnRzIGl0IGUuZy4gZHluYW1pYyBvcHRpb25zCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAg ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2lucHV0c1tpbnB1dF9pbmRleF0gPTNEIGlucHV0 LnRvX2RpY3QodHJhbnMsPQogb3RoZXJfdmFsdWVzPTNEb3RoZXJfdmFsdWVzKQotICAgICAgICAg ICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFz cwotCi0gICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGlucHV0IHZhbHVlIGZyb20gdG9vbCBz dGF0ZQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBn cm91cF9pbnB1dHNbaW5wdXRfaW5kZXhdWyd2YWx1ZSddID0zRCB0b29sX3N0YXRlWz0KZ3JvdXBf aW5wdXRzW2lucHV0X2luZGV4XVsnbmFtZSddXQotICAgICAgICAgICAgICAgICAgICBleGNlcHQg RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAg ICAgICAgICMgc2FuaXRpemUgaWYgdmFsdWUgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAgIGlm IGdyb3VwX2lucHV0c1tpbnB1dF9pbmRleF1bJ3ZhbHVlJ106Ci0gICAgICAgICAgICAgICAgICAg ICAgICBncm91cF9pbnB1dHNbaW5wdXRfaW5kZXhdID0zRCBzYW5pdGl6ZShncm91cF9pbnB1dD0K c1tpbnB1dF9pbmRleF0pCi0KLSAgICAgICAgIyBkbyBwYXJhbSB0cmFuc2xhdGlvbiBoZXJlLCB1 c2VkIGJ5IGRhdGFzb3VyY2UgdG9vbHMKLSAgICAgICAgaWYgdG9vbC5pbnB1dF90cmFuc2xhdG9y OgotICAgICAgICAgICAgdG9vbC5pbnB1dF90cmFuc2xhdG9yLnRyYW5zbGF0ZSggcGFyYW1zICkK LSAgICAgICA9MjAKLSAgICAgICAgIyBjcmVhdGUgdG9vbCBzdGF0ZQotICAgICAgICBzdGF0ZV9p bnB1dHMgPTNEIHt9Ci0gICAgICAgIHN0YXRlX2Vycm9ycyA9M0Qge30KLSAgICAgICAgaW5pdGlh bGl6ZV9zdGF0ZSh0cmFucywgdG9vbC5pbnB1dHMsIHN0YXRlX2lucHV0cykKLSAgICAgICAgcG9w dWxhdGVfc3RhdGUodHJhbnMsIHRvb2wuaW5wdXRzLCBzdGF0ZV9pbnB1dHMsIHN0YXRlX2Vycm9y cywgcGFyPQphbXMuX19kaWN0X18pCi0KLSAgICAgICAgIyBjcmVhdGUgYmFzaWMgdG9vbCBtb2Rl bAotICAgICAgICB0b29sX21vZGVsID0zRCB0b29sLnRvX2RpY3QodHJhbnMpCi0gICAgICAgIHRv b2xfbW9kZWxbJ2lucHV0cyddID0zRCB7fQotCi0gICAgICAgICMgYnVpbGQgdG9vbCBtb2RlbAot ICAgICAgICBpdGVyYXRlKHRvb2xfbW9kZWxbJ2lucHV0cyddLCB0b29sLmlucHV0cywgc3RhdGVf aW5wdXRzLCAnJykKLQotICAgICAgICAjIGxvYWQgdG9vbCBoZWxwCi0gICAgICAgIHRvb2xfaGVs cCA9M0QgJycKLSAgICAgICAgaWYgdG9vbC5oZWxwOgotICAgICAgICAgICAgdG9vbF9oZWxwID0z RCB0b29sLmhlbHAKLSAgICAgICAgICAgIHRvb2xfaGVscCA9M0QgdG9vbF9oZWxwLnJlbmRlcigg c3RhdGljX3BhdGg9M0R3ZWIudXJsX2ZvciggJy9zPQp0YXRpYycgKSwgaG9zdF91cmw9M0R3ZWIu dXJsX2ZvcignLycsIHF1YWxpZmllZD0zRFRydWUpICkKLSAgICAgICAgICAgIGlmIHR5cGUoIHRv b2xfaGVscCApIGlzIG5vdCB1bmljb2RlOgotICAgICAgICAgICAgICAgIHRvb2xfaGVscCA9M0Qg dW5pY29kZSggdG9vbF9oZWxwLCAndXRmLTgnKQotICAgICAgID0yMAotICAgICAgICAjIGNoZWNr IGlmIGNpdGF0aW9ucyBleGlzdAotICAgICAgICB0b29sX2NpdGF0aW9ucyA9M0QgRmFsc2UKLSAg ICAgICAgaWYgdG9vbC5jaXRhdGlvbnM6Ci0gICAgICAgICAgICB0b29sX2NpdGF0aW9ucyA9M0Qg VHJ1ZQotICAgPTIwCi0gICAgICAgICMgZ2V0IHRvb2wgdmVyc2lvbnMKLSAgICAgICAgdG9vbF92 ZXJzaW9ucyA9M0QgW10KLSAgICAgICAgdG9vbHMgPTNEIHNlbGYuYXBwLnRvb2xib3guZ2V0X2xv YWRlZF90b29sc19ieV9saW5lYWdlKHRvb2wuaWQpCi0gICAgICAgIGZvciB0IGluIHRvb2xzOgot ICAgICAgICAgICAgdG9vbF92ZXJzaW9ucy5hcHBlbmQodC52ZXJzaW9uKQotICAgICAgID0yMAot ICAgICAgICAjIyBhZGQgaW5mb3JtYXRpb24gd2l0aCB1bmRlcmx5aW5nIHJlcXVpcmVtZW50cyBh bmQgdGhlaXIgdmVyc2lvbnMKLSAgICAgICAgdG9vbF9yZXF1aXJlbWVudHMgPTNEIFtdCi0gICAg ICAgIGlmIHRvb2wucmVxdWlyZW1lbnRzOgotICAgICAgICAgICAgZm9yIHJlcXVpcmVtZW50IGlu IHRvb2wucmVxdWlyZW1lbnRzOgotICAgICAgICAgICAgICAgIHRvb2xfcmVxdWlyZW1lbnRzLmFw cGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICduYW1lJyAgICAgIDogcmVxdWlyZW1lbnQubmFt ZSwKLSAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nICAgOiByZXF1aXJlbWVudC52ZXJzaW9u Ci0gICAgICAgICAgICAgICAgfSkKLQotICAgICAgICAjIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRp ZXMKLSAgICAgICAgdG9vbF9tb2RlbC51cGRhdGUoewotICAgICAgICAgICAgJ2hlbHAnICAgICAg ICAgIDogdG9vbF9oZWxwLAotICAgICAgICAgICAgJ2NpdGF0aW9ucycgICAgIDogdG9vbF9jaXRh dGlvbnMsCi0gICAgICAgICAgICAnYmlvc3Rhcl91cmwnICAgOiB0cmFucy5hcHAuY29uZmlnLmJp b3N0YXJfdXJsLAotICAgICAgICAgICAgJ21lc3NhZ2UnICAgICAgIDogdG9vbF9tZXNzYWdlLAot ICAgICAgICAgICAgJ3ZlcnNpb25zJyAgICAgIDogdG9vbF92ZXJzaW9ucywKLSAgICAgICAgICAg ICdyZXF1aXJlbWVudHMnICA6IHRvb2xfcmVxdWlyZW1lbnRzLAotICAgICAgICAgICAgJ2Vycm9y cycgICAgICAgIDogc3RhdGVfZXJyb3JzCi0gICAgICAgIH0pCi0KLSAgICAgICAgIyBjaGVjayBm b3IgZXJyb3JzCi0gICAgICAgIGlmICdlcnJvcicgaW4gdG9vbF9tZXNzYWdlOgotICAgICAgICAg ICAgcmV0dXJuIHRvb2xfbWVzc2FnZQotCi0gICAgICAgICMgcmV0dXJuIGVucmljaGVkIHRvb2wg bW9kZWwKLSAgICAgICAgcmV0dXJuIHRvb2xfbW9kZWwKLQotICAgIGRlZiBfY29tcGFyZV90b29s X3ZlcnNpb24oIHNlbGYsIHRyYW5zLCB0b29sLCBqb2IgKToKLSAgICAgICAgIiIiCi0gICAgICAg IENvbXBhcmVzIGEgdG9vbCB2ZXJzaW9uIHdpdGggdGhlIHRvb2wgdmVyc2lvbiBmcm9tIGEgam9i IChmcm9tIFRvbz0KbFJ1bm5lcikuCi0gICAgICAgICIiIgotICAgICAgICB0b29sX2lkID0zRCBq b2IudG9vbF9pZAotICAgICAgICB0b29sX3ZlcnNpb24gPTNEIGpvYi50b29sX3ZlcnNpb24KLSAg ICAgICAgbWVzc2FnZSA9M0QgJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZWN0X2Zp ZWxkLCB0b29scywgdG9vbCA9M0Qgc2VsZi5hcHAudG9vbGJveC5nZXRfdG9vbF9jb21wb249CmVu dHMoIHRvb2xfaWQsIHRvb2xfdmVyc2lvbj0zRHRvb2xfdmVyc2lvbiwgZ2V0X2xvYWRlZF90b29s c19ieV9saW5lYWdlPTNERj0KYWxzZSwgc2V0X3NlbGVjdGVkPTNEVHJ1ZSApCi0gICAgICAgICAg ICBpZiB0b29sIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVz ID0zRCA1MDAKLSAgICAgICAgICAgICAgICByZXR1cm4geyAnZXJyb3InOiAnVGhpcyBkYXRhc2V0 IHdhcyBjcmVhdGVkIGJ5IGFuIG9ic29sZXRlPQogdG9vbCAoJXMpLiBDYW5cJ3QgcmUtcnVuLicg JSB0b29sX2lkIH0KLSAgICAgICAgICAgIGlmICggdG9vbC5pZCAhPTNEIHRvb2xfaWQgYW5kIHRv b2wub2xkX2lkICE9M0QgdG9vbF9pZCApIG9yIHRvPQpvbC52ZXJzaW9uICE9M0QgdG9vbF92ZXJz aW9uOgotICAgICAgICAgICAgICAgIGlmIHRvb2wuaWQgPTNEPTNEIHRvb2xfaWQ6Ci0gICAgICAg ICAgICAgICAgICAgIGlmIHRvb2xfdmVyc2lvbiA9M0Q9M0QgTm9uZToKLSAgICAgICAgICAgICAg ICAgICAgICAgICMgZm9yIHNvbWUgcmVhc29uIGpvYnMgZG9uJ3QgYWx3YXlzIGtlZXAgdHJhY2sg b2YgPQp0aGUgdG9vbCB2ZXJzaW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9 M0QgJycKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAg IG1lc3NhZ2UgPTNEICdUaGlzIGpvYiB3YXMgaW5pdGlhbGx5IHJ1biB3aXRoIHRvb2wgPQp2ZXJz aW9uICIlcyIsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgYXZhaWxhYmxlLiAgJyAlIHRvb2xfdmVy c2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKCB0b29scyApID4gMToKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9M0QgJ1lvdSBjYW4gcmUtcnVuIHRoZSBq b2Igd2l0aCB0aGUgPQpzZWxlY3RlZCB0b29sIG9yIGNob29zZSBhbm90aGVyIGRlcml2YXRpb24g b2YgdGhlIHRvb2wuJwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZXNzYWdlICs9M0QgJ1lvdSBjYW4gcmUtcnVuIHRoZSBqb2Igd2l0 aCB0aGlzPQogdG9vbCB2ZXJzaW9uLCB3aGljaCBpcyBhIGRlcml2YXRpb24gb2YgdGhlIG9yaWdp bmFsIHRvb2wuJwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlm IGxlbiggdG9vbHMgKSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0zRCAn VGhpcyBqb2Igd2FzIGluaXRpYWxseSBydW4gd2l0aCB0b29sID0KdmVyc2lvbiAiJXMiLCB3aGlj aCBpcyBjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4gICcgJSB0b29sX3ZlcnNpb24KLSAgICAgICAg ICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0zRCAnWW91IGNhbiByZS1ydW4gdGhlIGpvYiB3aXRo IHRoZSBzZWxlPQpjdGVkIHRvb2wgb3IgY2hvb3NlIGFub3RoZXIgZGVyaXZhdGlvbiBvZiB0aGUg dG9vbC4nCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAg ICBtZXNzYWdlID0zRCAnVGhpcyBqb2Igd2FzIGluaXRpYWxseSBydW4gd2l0aCB0b29sID0KaWQg IiVzIiwgdmVyc2lvbiAiJXMiLCB3aGljaCBpcyAnICUgKCB0b29sX2lkLCB0b29sX3ZlcnNpb24g KQotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPTNEICdjdXJyZW50bHkgbm90IGF2 YWlsYWJsZS4gIFlvdSBjYW4gcmU9Ci1ydW4gdGhlIGpvYiB3aXRoIHRoaXMgdG9vbCwgd2hpY2gg aXMgYSBkZXJpdmF0aW9uIG9mIHRoZSBvcmlnaW5hbCB0b29sLicKLSAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbiwgZXJyb3I6Ci0gICAgICAgICAgICB0cmFucy5yZXNwb25zZS5zdGF0dXMgPTNEIDUw MAotICAgICAgICAgICAgcmV0dXJuIHsgJ2Vycm9yJzogc3RyIChlcnJvcikgfQotICAgICAgICAg ICAgICAgPTIwCi0gICAgICAgICMgY2FuJ3QgcmVydW4gdXBsb2FkLCBleHRlcm5hbCBkYXRhIHNv dXJjZXMsIGV0IGNldGVyYS4gd29ya2Zsb3cgYz0Kb21wYXRpYmxlIHdpbGwgcHJveHkgdGhpcyBm b3Igbm93Ci0gICAgICAgIGlmIG5vdCB0b29sLmlzX3dvcmtmbG93X2NvbXBhdGlibGU6Ci0gICAg ICAgICAgICB0cmFucy5yZXNwb25zZS5zdGF0dXMgPTNEIDUwMAotICAgICAgICAgICAgcmV0dXJu IHsgJ2Vycm9yJzogJ1RoZSBcJyVzXCcgdG9vbCBkb2VzIGN1cnJlbnRseSBub3Qgc3VwcG9ydCA9 CnJlLXJ1bm5pbmcuJyAlIHRvb2wubmFtZSB9Ci0gICAgICAgIHJldHVybiBtZXNzYWdlCgpUaGlz IGRpZmYgaXMgc28gYmlnIHRoYXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIu CgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvODdm MWU2Yjk2Zjk0LwpDaGFuZ2VzZXQ6ICAgODdmMWU2Yjk2Zjk0ClVzZXI6ICAgICAgICBjYXJsZmVi ZXJoYXJkCkRhdGU6ICAgICAgICAyMDE1LTAxLTEyIDE1OjM5OjI3KzAwOjAwClN1bW1hcnk6ICAg ICBNZXJnZWQgZ2FsYXh5L2dhbGF4eS1jZW50cmFsIGludG8gZGVmYXVsdApBZmZlY3RlZCAjOiAg MiBmaWxlcwoKZGlmZiAtciA2YThhNzlmOWI2ZDUyYmY5NmUyMmQ5NDc0MGY5YzM3YjQ0NGQ4ZDEy IC1yIDg3ZjFlNmI5NmY5NGNhZTIwOTUxZmQ3PQpjYTFhY2MzZGYyMDBjODI5OSBlZ2dzLmluaQot LS0gYS9lZ2dzLmluaQorKysgYi9lZ2dzLmluaQpAQCAtMTUsNyArMTUsNyBAQAogYnhfcHl0aG9u ID0zRCAwLjcuMgogQ2hlZXRhaCA9M0QgMi4yLjIKIE1hcmt1cFNhZmUgPTNEIDAuMTIKLW1lcmN1 cmlhbCA9M0QgMi4yLjMKK21lcmN1cmlhbCA9M0QgMy4yLjQKIE15U1FMX3B5dGhvbiA9M0QgMS4y LjNjMQogUHlSb2RzID0zRCAzLjIuNAogbnVtcHkgPTNEIDEuNi4wCgpkaWZmIC1yIDZhOGE3OWY5 YjZkNTJiZjk2ZTIyZDk0NzQwZjljMzdiNDQ0ZDhkMTIgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFm ZDc9CmNhMWFjYzNkZjIwMGM4Mjk5IGxpYi90b29sX3NoZWQvdXRpbC9oZ191dGlsLnB5Ci0tLSBh L2xpYi90b29sX3NoZWQvdXRpbC9oZ191dGlsLnB5CisrKyBiL2xpYi90b29sX3NoZWQvdXRpbC9o Z191dGlsLnB5CkBAIC0xNiw3ICsxNiw3IEBACiBmcm9tIG1lcmN1cmlhbCBpbXBvcnQgY29tbWFu ZHMKIGZyb20gbWVyY3VyaWFsIGltcG9ydCBoZwogZnJvbSBtZXJjdXJpYWwgaW1wb3J0IHVpCi1m cm9tIG1lcmN1cmlhbC5jaGFuZ2Vncm91cCBpbXBvcnQgcmVhZGJ1bmRsZQorZnJvbSBtZXJjdXJp YWwuZXhjaGFuZ2UgaW1wb3J0IHJlYWRidW5kbGUKIGZyb20gbWVyY3VyaWFsLmNoYW5nZWdyb3Vw IGltcG9ydCByZWFkZXhhY3RseQo9MjAKIGZyb20gdG9vbF9zaGVkLnV0aWwgaW1wb3J0IGJhc2lj X3V0aWwKQEAgLTI2LDcgKzI2LDcgQEAKIElOSVRJQUxfQ0hBTkdFTE9HX0hBU0ggPTNEICcwMDAw MDAwMDAwMDAnCj0yMAogZGVmIGFkZF9jaGFuZ2VzZXQoIHJlcG9fdWksIHJlcG8sIHBhdGhfdG9f ZmlsZW5hbWVfaW5fYXJjaGl2ZSApOgotICAgIGNvbW1hbmRzLmFkZCggcmVwb191aSwgcmVwbywg cGF0aF90b19maWxlbmFtZV9pbl9hcmNoaXZlICkKKyAgICBjb21tYW5kcy5hZGQoIHJlcG9fdWks IHJlcG8sIHN0ciggcGF0aF90b19maWxlbmFtZV9pbl9hcmNoaXZlICkgKQo9MjAKIGRlZiBhcmNo aXZlX3JlcG9zaXRvcnlfcmV2aXNpb24oIGFwcCwgcmVwb3NpdG9yeSwgYXJjaGl2ZV9kaXIsIGNo YW5nZXNldF9yPQpldmlzaW9uICk6CiAgICAgJycnQ3JlYXRlIGFuIHVuLXZlcnNpb25lZCBhcmNo aXZlIG9mIGEgcmVwb3NpdG9yeS4nJycKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBjb21tYW5kIGxp bmUpIHRvIGEganNvbiBvYmplY3QuCiAgICAgIiIiCiAgICAgIyBTZWUgaHR0cDovL3d3dy53c3Rl aW4ub3JnL2hvbWUvd3N0ZWluL3d3dy9ob21lL3dhcy9wYXRjaGVzL2hnX2pzb24KLSAgICBoZ191 bmJ1bmRsZTEwX29iaiA9M0QgcmVhZGJ1bmRsZSggZmgsIE5vbmUgKQorICAgIGhnX3VuYnVuZGxl MTBfb2JqID0zRCByZWFkYnVuZGxlKCBOb25lLCBmaCwgTm9uZSApCiAgICAgZ3JvdXBzID0zRCBb IGdyb3VwIGZvciBncm91cCBpbiB1bnBhY2tfZ3JvdXBzKCBoZ191bmJ1bmRsZTEwX29iaiApIF0K ICAgICByZXR1cm4ganNvbi5kdW1wcyggZ3JvdXBzLCBpbmRlbnQ9M0Q0ICkKPTIwCgoKaHR0cHM6 Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzY5Yzc0YmM5OTYy NS8KQ2hhbmdlc2V0OiAgIDY5Yzc0YmM5OTYyNQpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApE YXRlOiAgICAgICAgMjAxNS0wMS0xMiAxNTo1MTowMCswMDowMApTdW1tYXJ5OiAgICAgTW92ZSBw YXJhbSBwYXJzaW5nIGRvd24gaW50byBiYXNlIGNvbnRyb2xsZXJzLCBub3JtYWxpemUgbWFuYWc9 CmVyIG9iamVjdCBuYW1lcyBpbiBhcGkgYW5kIHdlYiBjb250cm9sbGVycwpBZmZlY3RlZCAjOiAg MjEgZmlsZXMKCmRpZmYgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5 OSAtciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOD0KYjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4 eS9tYW5hZ2Vycy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQorKysg Yi9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKQEAgLTI1MSw0NCArMjUxLDYgQEAKICAgICAg ICAgICAgICAgICBkYXRhc2V0X2RhdGEgPTNEIE5vbmUKICAgICAgICAgcmV0dXJuIHRydW5jYXRl ZCwgZGF0YXNldF9kYXRhCj0yMAotICAgICNkZWYgZ2V0X2RhdGFzZXQoIHNlbGYsIHRyYW5zLCBk YXRhc2V0X2lkLCBjaGVja19vd25lcnNoaXA9M0RUcnVlLCBjaGU9CmNrX2FjY2Vzc2libGU9M0RG YWxzZSwgY2hlY2tfc3RhdGU9M0RUcnVlICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgIEdldCBh biBIREEgb2JqZWN0IGJ5IGlkIHBlcmZvcm1pbmcgc2VjdXJpdHkgY2hlY2tzIHVzaW5nCi0gICAg IyAgICB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KLSAgICAjICAgICIiIgotICAgICMgICAgdHJ5 OgotICAgICMgICAgICAgIGRhdGFzZXRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCgg ZGF0YXNldF9pZCApCi0gICAgIyAgICBleGNlcHQgKCBBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9y ICk6Ci0gICAgIyAgICAgICAgIyBERVBSRUNBVElPTjogV2Ugc3RpbGwgc3VwcG9ydCB1bmVuY29k ZWQgaWRzIGZvciBiYWNrd2FyZCBjbz0KbXBhdGliaWxpdHkKLSAgICAjICAgICAgICB0cnk6Ci0g ICAgIyAgICAgICAgICAgIGRhdGFzZXRfaWQgPTNEIGludCggZGF0YXNldF9pZCApCi0gICAgIyAg ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgIyAgICAgICAgICAgIHJhaXNlIEhUVFBCYWRS ZXF1ZXN0KCAiSW52YWxpZCBkYXRhc2V0IGlkOiAlcy4iICUgc3RyKCBkYT0KdGFzZXRfaWQgKSAp Ci0gICAgIwotICAgICMgICAgdHJ5OgotICAgICMgICAgICAgIGRhdGEgPTNEIHRyYW5zLnNhX3Nl c3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXM9CmV0QXNzb2NpYXRpb24g KS5nZXQoIGludCggZGF0YXNldF9pZCApICkKLSAgICAjICAgIGV4Y2VwdDoKLSAgICAjICAgICAg ICByYWlzZSBIVFRQUmVxdWVzdFJhbmdlTm90U2F0aXNmaWFibGUoICJJbnZhbGlkIGRhdGFzZXQg aWQ6ICVzPQouIiAlIHN0ciggZGF0YXNldF9pZCApICkKLSAgICAjCi0gICAgIyAgICBpZiBjaGVj a19vd25lcnNoaXA6Ci0gICAgIyAgICAgICAgIyBWZXJpZnkgb3duZXJzaGlwLgotICAgICMgICAg ICAgIHVzZXIgPTNEIHRyYW5zLmdldF91c2VyKCkKLSAgICAjICAgICAgICBpZiBub3QgdXNlcjoK LSAgICAjICAgICAgICAgICAgZXJyb3IoICJNdXN0IGJlIGxvZ2dlZCBpbiB0byBtYW5hZ2UgR2Fs YXh5IGl0ZW1zIiApCi0gICAgIyAgICAgICAgaWYgZGF0YS5oaXN0b3J5LnVzZXIgIT0zRCB1c2Vy OgotICAgICMgICAgICAgICAgICBlcnJvciggIiVzIGlzIG5vdCBvd25lZCBieSBjdXJyZW50IHVz ZXIiICUgZGF0YS5fX2NsYXNzX189Ci5fX25hbWVfXyApCi0gICAgIwotICAgICMgICAgaWYgY2hl Y2tfYWNjZXNzaWJsZToKLSAgICAjICAgICAgICBjdXJyZW50X3VzZXJfcm9sZXMgPTNEIHRyYW5z LmdldF9jdXJyZW50X3VzZXJfcm9sZXMoKQotICAgICMKLSAgICAjICAgICAgICBpZiBub3QgdHJh bnMuYXBwLnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggY3VycmVudF91PQpzZXJf cm9sZXMsIGRhdGEuZGF0YXNldCApOgotICAgICMgICAgICAgICAgICBlcnJvciggIllvdSBhcmUg bm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoaXMgZGF0YXNldCIgKQotICAgICMKLSAgICAjICAgICAg ICBpZiBjaGVja19zdGF0ZSBhbmQgZGF0YS5zdGF0ZSA9M0Q9M0QgdHJhbnMubW9kZWwuRGF0YXNl dC5zdGF0PQplcy5VUExPQUQ6Ci0gICAgIyAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vy cm9yX21lc3NhZ2UoICJQbGVhc2Ugd2FpdCB1bnRpbCB0aGlzID0KZGF0YXNldCBmaW5pc2hlcyB1 cGxvYWRpbmcgIgotICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgImJlZm9yZSBhdHRlbXB0aW5nIHQ9Cm8gdmlldyBpdC4iICkKLSAgICAjICAgIHJl dHVybiBkYXRhCi0KICAgICAjIHRoaXMgaXMgYSB3ZWlyZCBzeW50YXggYW5kIHJldHVybiB2YWwK ICAgICBkZWYgZGF0YV9jb252ZXJzaW9uX3N0YXR1cyggc2VsZiwgdHJhbnMsIGhkYSApOgogICAg ICAgICAiIiIKQEAgLTMyMiw2ICsyODQsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4g VHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKPTIwCisKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECiBjbGFzcyBIREFT ZXJpYWxpemVyKCBiYXNlLk1vZGVsU2VyaWFsaXplciApOgogICAgICNUT0RPOiBpbmhlcml0IGZy b20gZGF0YXNldHMuRGF0YXNldEFzc29jaWF0aW9uU2VyaWFsaXplcgoKZGlmZiAtciA4N2YxZTZi OTZmOTRjYWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNh ZDA4PQpiOGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5Ci0t LSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFibGUucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy9zaGFyYWJsZS5weQpAQCAtMzQwLDYgKzM0MCwxMyBAQAogICAgICMgICB1c2VyL3VzZXJf aWQKICAgICAjICAgdXNlcl9zaGFyZXM/CiAgICAgIyAgIHVzZXJuYW1lX2FuZF9zbHVnPworICAg ICNkZWYgZ2V0X25hbWVfYW5kX2xpbmtfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5vbmUgKToK KyAgICAjZGVmIHB1Ymxpc2hlZF91cmwoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAj ICAgICIiIgorICAgICMgICAgIiIiCisgICAgIyAgICB1cmwgPTNEIHVybF9mb3IoY29udHJvbGxl cj0zRCdoaXN0b3J5JywgYWN0aW9uPTNEImRpc3BsYXlfYnlfdXNlcj0KbmFtZV9hbmRfc2x1ZyIs CisgICAgIyAgICAgICAgdXNlcm5hbWU9M0RpdGVtLnVzZXIudXNlcm5hbWUsIHNsdWc9M0RpdGVt LnNsdWcgKQorICAgICMgICAgcmV0dXJuIHVybAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAoKZGlmZiAt ciA4N2YxZTZiOTZmOTRjYWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYy NWUzNjNiZWNhZDA4PQpiOGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L21hbmFnZXJzL3VzZXJz LnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKKysrIGIvbGliL2dhbGF4eS9t YW5hZ2Vycy91c2Vycy5weQpAQCAtMzAsNyArMzAsNiBAQAogICAgICNUT0RPOiBpbmNvcnAgQ3Jl YXRlc1VzZXJzTWl4aW4KICAgICAjVE9ETzogaW5jb3JwIENyZWF0ZXNBcGlLZXlzTWl4aW4KPTIw Ci0KICAgICBkZWYgY3JlYXRlKCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKToKICAgICAgICAgIiIi CiAgICAgICAgIENyZWF0ZSBhIG5ldyB1c2VyLgoKZGlmZiAtciA4N2YxZTZiOTZmOTRjYWUyMDk1 MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpiOGY5YzU1 YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYi9iYXNlL2NvbnRyb2xsZXIucHkKLS0tIGEvbGliL2dh bGF4eS93ZWIvYmFzZS9jb250cm9sbGVyLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViL2Jhc2UvY29u dHJvbGxlci5weQpAQCAtOTksNiArOTksMTMgQEAKICAgICBkZWYgZ2V0X3JvbGUoIHNlbGYsIHRy YW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2liPQpsZT0zREZh bHNlLCBkZWxldGVkPTNETm9uZSApOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfb2JqZWN0KCB0 cmFucywgaWQsICdSb2xlJywgY2hlY2tfb3duZXJzaGlwPTNERmFsc2U9CiwgY2hlY2tfYWNjZXNz aWJsZT0zREZhbHNlLCBkZWxldGVkPTNEZGVsZXRlZCApCj0yMAorICAgIGRlZiBkZWNvZGVfaWQo IHNlbGYsIGlkICk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFwcC5z ZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbXNn ID0zRCAiTWFsZm9ybWVkIEhpc3RvcnkgaWQgKCAlcyApIHNwZWNpZmllZCwgdW5hYmxlIHRvIGRl Y289CmRlIiAlICggc3RyKCBpZCApICkKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTWFs Zm9ybWVkSWQoIG1zZywgaWQ9M0RzdHIoIGlkICkgKQorCiAgICAgZGVmIGVuY29kZV9hbGxfaWRz KCBzZWxmLCB0cmFucywgcnZhbCwgcmVjdXJzaXZlPTNERmFsc2UgKToKICAgICAgICAgIiIiCiAg ICAgICAgIEVuY29kZXMgYWxsIGludGVnZXIgdmFsdWVzIGluIHRoZSBkaWN0IHJ2YWwgd2hvc2Ug a2V5cyBhcmUgJ2lkJyBvcj0KIGVuZCB3aXRoICdfaWQnCkBAIC0xNzQsNiArMTgxLDEzIEBACiAg ICAgZGVmIG5vdF9pbXBsZW1lbnRlZCggc2VsZiwgdHJhbnMsICoqa3dkICk6CiAgICAgICAgIHJh aXNlIEhUVFBOb3RJbXBsZW1lbnRlZCgpCj0yMAorICAgIGRlZiBfcGFyc2Vfc2VyaWFsaXphdGlv bl9wYXJhbXMoIHNlbGYsIGt3ZCwgZGVmYXVsdF92aWV3ICk6CisgICAgICAgIHZpZXcgPTNEIGt3 ZC5nZXQoICd2aWV3JywgTm9uZSApCisgICAgICAgIGtleXMgPTNEIGt3ZC5nZXQoICdrZXlzJyAp CisgICAgICAgIGlmIGlzaW5zdGFuY2UoIGtleXMsIGJhc2VzdHJpbmcgKToKKyAgICAgICAgICAg IGtleXMgPTNEIGtleXMuc3BsaXQoICcsJyApCisgICAgICAgIHJldHVybiBkaWN0KCB2aWV3PTNE dmlldywga2V5cz0zRGtleXMsIGRlZmF1bHRfdmlldz0zRGRlZmF1bHRfdmlldz0KICkKKwo9MjAK IGNsYXNzIERhdGF0eXBlKCBvYmplY3QgKToKICAgICAiIiJVc2VkIGZvciBzdG9yaW5nIGluLW1l bW9yeSBsaXN0IG9mIGRhdGF0eXBlcyBjdXJyZW50bHkgaW4gdGhlIGRhdGF0PQp5cGVzIHJlZ2lz dHJ5LiIiIgoKZGlmZiAtciA4N2YxZTZiOTZmOTRjYWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5 IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpiOGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9hbm5vdGF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2FwaS9hbm5vdGF0aW9ucy5weQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICBzZWxmLmhp c3RvcnlfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAg KQo9MjAKICAgICBkZWYgX2dldF9pdGVtX2Zyb21faWQoc2VsZiwgdHJhbnMsIGlkc3RyKToKLSAg ICAgICAgZGVjb2RlZF9pZHN0ciA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZHN0ciAp CisgICAgICAgIGRlY29kZWRfaWRzdHIgPTNEIHNlbGYuZGVjb2RlX2lkKCBpZHN0ciApCiAgICAg ICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRy YW5zLCBkZWNvZGVkXz0KaWRzdHIsIHRyYW5zLnVzZXIgKQogICAgICAgICByZXR1cm4gaGlzdG9y eQo9MjAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFu YWdlcnMuaGRhcy5IREFNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICBkZWYgX2dldF9pdGVtX2Zyb21f aWQoc2VsZiwgdHJhbnMsIGlkc3RyKToKLSAgICAgICAgZGVjb2RlZF9pZHN0ciA9M0QgdHJhbnMu c2VjdXJpdHkuZGVjb2RlX2lkKCBpZHN0ciApCisgICAgICAgIGRlY29kZWRfaWRzdHIgPTNEIHNl bGYuZGVjb2RlX2lkKCBpZHN0ciApCiAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5h Y2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZHN0ciwgdD0KcmFucy51c2VyICkKICAg ICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMs IGhkYSApCiAgICAgICAgIHJldHVybiBoZGEKCmRpZmYgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFm ZDdjYTFhY2MzZGYyMDBjODI5OSAtciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOD0KYjhmOWM1NWMy Mzg0NDk3NTAgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNldF9jb2xsZWN0aW9u cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0X2NvbGxlY3Rp b25zLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2RhdGFzZXRfY29sbGVj dGlvbnMucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgaW5zdGFuY2VfdHlwZSA9M0QgcGF5 bG9hZC5wb3AoICJpbnN0YW5jZV90eXBlIiwgImhpc3RvcnkiICkKICAgICAgICAgaWYgaW5zdGFu Y2VfdHlwZSA9M0Q9M0QgImhpc3RvcnkiOgogICAgICAgICAgICAgaGlzdG9yeV9pZCA9M0QgcGF5 bG9hZC5nZXQoICdoaXN0b3J5X2lkJyApCi0gICAgICAgICAgICBoaXN0b3J5X2lkID0zRCB0cmFu cy5zZWN1cml0eS5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKQorICAgICAgICAgICAgaGlzdG9yeV9p ZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKQogICAgICAgICAgICAgaGlzdG9yeSA9 M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBoaXN0b3J5X2k9CmQs IHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgY3JlYXRlX3BhcmFtc1sgInBhcmVudCIgXSA9M0Qg aGlzdG9yeQogICAgICAgICBlbGlmIGluc3RhbmNlX3R5cGUgPTNEPTNEICJsaWJyYXJ5IjoKCmRp ZmYgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5OSAtciA2OWM3NGJj OTk2MjVlMzYzYmVjYWQwOD0KYjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4eS93ZWJhcHBzL2dh bGF4eS9hcGkvZGF0YXNldHMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkv ZGF0YXNldHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNldHMu cHkKQEAgLTIyLDEwICsyMiw3IEBACj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6 CiAgICAgICAgIHN1cGVyKCBEYXRhc2V0c0NvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBw ICkKLSAgICAgICAgc2VsZi5tZ3JzID0zRCB1dGlsLmJ1bmNoLkJ1bmNoKAotICAgICAgICAgICAg aGlzdG9yaWVzPTNEbWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKSwKLSAg ICAgICAgICAgIGhkYXM9M0RtYW5hZ2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCi0gICAgICAg ICkKKyAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2Vy KCBhcHAgKQogICAgICAgICBzZWxmLmhkYV9zZXJpYWxpemVyID0zRCBtYW5hZ2Vycy5oZGFzLkhE QVNlcmlhbGl6ZXIoIHNlbGYuYXBwICkKPTIwCiAgICAgQHdlYi5leHBvc2VfYXBpCkBAIC04Myw3 ICs4MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm5zIHN0YXRlIG9mIGRhdGFzZXQu CiAgICAgICAgICIiIgotICAgICAgICBtc2cgPTNEIHNlbGYubWdycy5oZGFzLmRhdGFfY29udmVy c2lvbl9zdGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkKKyAgICAgICAgbXNnID0zRCBzZWxmLmhkYV9t YW5hZ2VyLmRhdGFfY29udmVyc2lvbl9zdGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkKICAgICAgICAg aWYgbm90IG1zZzoKICAgICAgICAgICAgIG1zZyA9M0QgZGF0YXNldC5jb252ZXJzaW9uX21lc3Nh Z2VzLkRBVEEKPTIwCkBAIC05NCw3ICs5MSw3IEBACiAgICAgICAgIEluaXQtbGlrZSBtZXRob2Qg dGhhdCByZXR1cm5zIHN0YXRlIG9mIGRhdGFzZXQncyBjb252ZXJ0ZWQgZGF0YXNldD0Kcy4KICAg ICAgICAgUmV0dXJucyB2YWxpZCBjaHJvbXMgZm9yIHRoYXQgZGF0YXNldCBhcyB3ZWxsLgogICAg ICAgICAiIiIKLSAgICAgICAgbXNnID0zRCBzZWxmLm1ncnMuaGRhcy5kYXRhX2NvbnZlcnNpb25f c3RhdHVzKCB0cmFucywgZGF0YXNldCApCisgICAgICAgIG1zZyA9M0Qgc2VsZi5oZGFfbWFuYWdl ci5kYXRhX2NvbnZlcnNpb25fc3RhdHVzKCB0cmFucywgZGF0YXNldCApCiAgICAgICAgIGlmIG1z ZzoKICAgICAgICAgICAgIHJldHVybiBtc2cKPTIwCkBAIC0xNDMsNyArMTQwLDcgQEAKICAgICAg ICAgICAgIHJldHVybiBkYXRhc2V0LmNvbnZlcnNpb25fbWVzc2FnZXMuTk9fREFUQQo9MjAKICAg ICAgICAgIyBEYXRhc2V0IGNoZWNrLgotICAgICAgICBtc2cgPTNEIHNlbGYubWdycy5oZGFzLmRh dGFfY29udmVyc2lvbl9zdGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkKKyAgICAgICAgbXNnID0zRCBz ZWxmLmhkYV9tYW5hZ2VyLmRhdGFfY29udmVyc2lvbl9zdGF0dXMoIHRyYW5zLCBkYXRhc2V0ICkK ICAgICAgICAgaWYgbXNnOgogICAgICAgICAgICAgcmV0dXJuIG1zZwo9MjAKQEAgLTIzNiw3ICsy MzMsNyBAQAogICAgICAgICBiZSBzbG93IGJlY2F1c2UgaW5kZXhlcyBuZWVkIHRvIGJlIGNyZWF0 ZWQuCiAgICAgICAgICIiIgogICAgICAgICAjIERhdGFzZXQgY2hlY2suCi0gICAgICAgIG1zZyA9 M0Qgc2VsZi5tZ3JzLmhkYXMuZGF0YV9jb252ZXJzaW9uX3N0YXR1cyggdHJhbnMsIGRhdGFzZXQg KQorICAgICAgICBtc2cgPTNEIHNlbGYuaGRhX21hbmFnZXIuZGF0YV9jb252ZXJzaW9uX3N0YXR1 cyggdHJhbnMsIGRhdGFzZXQgKQogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAgICByZXR1cm4g bXNnCj0yMApAQCAtMjc4LDEyICsyNzUsMTIgQEAKICAgICAgICAgc29tZSBwb2ludCBpbiB0aGUg ZnV0dXJlIHdpdGhvdXQgd2FybmluZy4gR2VuZXJhbGx5LCBkYXRhIHNob3VsZCBiPQplIHByb2Nl c3NlZCBieSBpdHMKICAgICAgICAgZGF0YXR5cGUgcHJpb3IgdG8gZGlzcGxheSAodGhlIGRlZnVs dCBpZiByYXcgaXMgdW5zcGVjaWZpZWQgb3IgZXhwPQpsaWNpdGx5IGZhbHNlLgogICAgICAgICAi IiIKLSAgICAgICAgZGVjb2RlZF9jb250ZW50X2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVf aWQoIGhpc3RvcnlfY29udGVudF9pPQpkICkKKyAgICAgICAgZGVjb2RlZF9jb250ZW50X2lkID0z RCBzZWxmLmRlY29kZV9pZCggaGlzdG9yeV9jb250ZW50X2lkICkKICAgICAgICAgcmF3ID0zRCB1 dGlsLnN0cmluZ19hc19ib29sX29yX25vbmUoIHJhdyApCj0yMAogICAgICAgICBydmFsID0zRCAn JwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vz c2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2NvbnRlbj0KdF9pZCwgdHJhbnMudXNlciApCisg ICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJh bnMsIGRlY29kZWRfY29udD0KZW50X2lkLCB0cmFucy51c2VyICkKPTIwCiAgICAgICAgICAgICBp ZiByYXc6CiAgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgYW5kIGZpbGVuYW1lICE9M0QgJ2lu ZGV4JzoKCmRpZmYgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5OSAt ciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOD0KYjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKLS0tIGEvbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKKysrIGIvbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKQEAgLTY5LDcgKzY5LDcgQEAK ICAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2VyKCBh cHAgKQo9MjAKICAgICBkZWYgX2dldF9pdGVtX2Zyb21faWQoc2VsZiwgdHJhbnMsIGlkc3RyLCBj aGVja193cml0YWJsZT0zRFRydWUpOgotICAgICAgICBkZWNvZGVkX2lkc3RyID0zRCB0cmFucy5z ZWN1cml0eS5kZWNvZGVfaWQoIGlkc3RyICkKKyAgICAgICAgZGVjb2RlZF9pZHN0ciA9M0Qgc2Vs Zi5kZWNvZGVfaWQoIGlkc3RyICkKICAgICAgICAgaWYgY2hlY2tfd3JpdGFibGU6CiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5oZGFfbWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIGRlY29kZWRf aWRzdHIsIHRyYT0KbnMudXNlciApCiAgICAgICAgIGVsc2U6CgpkaWZmIC1yIDg3ZjFlNmI5NmY5 NGNhZTIwOTUxZmQ3Y2ExYWNjM2RmMjAwYzgyOTkgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDg9 CmI4ZjljNTVjMjM4NDQ5NzUwIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2ZvbGRlcl9j b250ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9mb2xkZXJfY29u dGVudHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZm9sZGVyX2NvbnRl bnRzLnB5CkBAIC0yNjcsNyArMjY3LDcgQEAKICAgICAgICAgICAgIGxkZGFfbWVzc2FnZSA9M0Qg dXRpbC5zYW5pdGl6ZV9odG1sLnNhbml0aXplX2h0bWwoIGxkZGFfbWVzc2FnPQplLCAndXRmLTgn ICkKICAgICAgICAgcnZhbCA9M0Qge30KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVjb2Rl ZF9oZGFfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggZnJvbV9oZGFfaWQgKQorICAg ICAgICAgICAgZGVjb2RlZF9oZGFfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBmcm9tX2hkYV9pZCAp CiAgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5z LCBkZWNvZGVkX2hkYV9pZCwgdD0KcmFucy51c2VyICkKICAgICAgICAgICAgIGhkYSA9M0Qgc2Vs Zi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIHRyYW5zLCBoZGEgKQogICAgICAgICAg ICAgZm9sZGVyID0zRCBzZWxmLmdldF9saWJyYXJ5X2ZvbGRlciggdHJhbnMsIGVuY29kZWRfZm9s ZGVyX2lkXzE9CjYsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICkKCmRpZmYgLXIgODdmMWU2Yjk2 Zjk0Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5OSAtciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQw OD0KYjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9y aWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3Rvcmllcy5weQor KysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3JpZXMucHkKQEAgLTMyLDI2 ICszMiwxMCBAQAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVy KCBIaXN0b3JpZXNDb250cm9sbGVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAgICAgICAgIHNl bGYuY2l0YXRpb25zX21hbmFnZXIgPTNEIGNpdGF0aW9ucy5DaXRhdGlvbnNNYW5hZ2VyKCBhcHAg KQotICAgICAgICBzZWxmLm1ncnMgPTNEIHV0aWwuYnVuY2guQnVuY2goCi0gICAgICAgICAgICBo aXN0b3JpZXM9M0RoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCi0gICAgICAgICkKKyAg ICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIGhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlcigg YXBwICkKICAgICAgICAgc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIgPTNEIGhpc3Rvcmllcy5IaXN0 b3J5U2VyaWFsaXplciggYXBwICkKICAgICAgICAgc2VsZi5oaXN0b3J5X2Rlc2VyaWFsaXplciA9 M0QgaGlzdG9yaWVzLkhpc3RvcnlEZXNlcmlhbGl6ZXIoIGFwcCApCj0yMAotICAgIGRlZiBfZGVj b2RlX2lkKCBzZWxmLCB0cmFucywgaWQgKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0 dXJuIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggaWQgKQotICAgICAgICBleGNlcHQ6Ci0gICAg ICAgICAgICByYWlzZSBleGNlcHRpb25zLk1hbGZvcm1lZElkKCAiTWFsZm9ybWVkIEhpc3Rvcnkg aWQgKCAlcyApIHNwZT0KY2lmaWVkLCB1bmFibGUgdG8gZGVjb2RlIgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIHN0ciggaWQgKSApLCB0eXBlPTNEJ2Vycm9y JyApCi0KLSAgICBkZWYgX3BhcnNlX3NlcmlhbGl6YXRpb25fcGFyYW1zKCBzZWxmLCBrd2QsIGRl ZmF1bHRfdmlldyApOgotICAgICAgICB2aWV3ID0zRCBrd2QuZ2V0KCAndmlldycsIE5vbmUgKQot ICAgICAgICBrZXlzID0zRCBrd2QuZ2V0KCAna2V5cycgKQotICAgICAgICBpZiBpc2luc3RhbmNl KCBrZXlzLCBiYXNlc3RyaW5nICk6Ci0gICAgICAgICAgICBrZXlzID0zRCBrZXlzLnNwbGl0KCAn LCcgKQotICAgICAgICByZXR1cm4gZGljdCggdmlldz0zRHZpZXcsIGtleXM9M0RrZXlzLCBkZWZh dWx0X3ZpZXc9M0RkZWZhdWx0X3ZpZXc9CiApCi0KICAgICBAZXhwb3NlX2FwaV9hbm9ueW1vdXMK ICAgICBkZWYgaW5kZXgoIHNlbGYsIHRyYW5zLCBkZWxldGVkPTNEJ0ZhbHNlJywgKiprd2QgKToK ICAgICAgICAgIiIiCkBAIC03NSw3ICs1OSw3IEBACiAgICAgICAgIGlmIHN0cmluZ19hc19ib29s KCBkZWxldGVkICk6CiAgICAgICAgICAgICBkZWxldGVkX2ZpbHRlciA9M0QgKCBzZWxmLmFwcC5t b2RlbC5IaXN0b3J5LmRlbGV0ZWQgPTNEPTNEIFRydT0KZSApCj0yMAotICAgICAgICBoaXN0b3Jp ZXMgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMuYnlfdXNlciggdHJhbnMsIHVzZXI9M0R0cmFucy51 c2U9CnIsIGZpbHRlcnM9M0RkZWxldGVkX2ZpbHRlciApCisgICAgICAgIGhpc3RvcmllcyA9M0Qg c2VsZi5oaXN0b3J5X21hbmFnZXIuYnlfdXNlciggdHJhbnMsIHVzZXI9M0R0cmFucy51cz0KZXIs IGZpbHRlcnM9M0RkZWxldGVkX2ZpbHRlciApCiAgICAgICAgIGZvciBoaXN0b3J5IGluIGhpc3Rv cmllczoKICAgICAgICAgICAgIGhpc3RvcnlfZGljdCA9M0Qgc2VsZi5oaXN0b3J5X3NlcmlhbGl6 ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyPQphbnMsIGhpc3RvcnksICoqc2VyaWFsaXphdGlvbl9w YXJhbXMgKQogICAgICAgICAgICAgcnZhbC5hcHBlbmQoIGhpc3RvcnlfZGljdCApCkBAIC0xMDUs MTAgKzg5LDEwIEBACiAgICAgICAgIGRlbGV0ZWQgPTNEIHN0cmluZ19hc19ib29sKCBkZWxldGVk ICkKPTIwCiAgICAgICAgIGlmIGhpc3RvcnlfaWQgPTNEPTNEICJtb3N0X3JlY2VudGx5X3VzZWQi OgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3JzLmhpc3Rvcmllcy5tb3N0X3JlY2Vu dCggdHJhbnMsIHRyYW5zLnVzZXIsCisgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3Rv cnlfbWFuYWdlci5tb3N0X3JlY2VudCggdHJhbnMsIHRyYW5zLnVzZT0KciwKICAgICAgICAgICAg ICAgICBmaWx0ZXJzPTNEKCBzZWxmLmFwcC5tb2RlbC5IaXN0b3J5LmRlbGV0ZWQgPTNEPTNEIEZh bHNlICkgKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3Jz Lmhpc3Rvcmllcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgc2VsZi49Cl9kZWNvZGVfaWQoIHRy YW5zLCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgaGlzdG9yeSA9M0Qg c2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIHNlbGY9Ci5kZWNv ZGVfaWQoIGhpc3RvcnlfaWQgKSwgdHJhbnMudXNlciApCj0yMAogICAgICAgICByZXR1cm4gc2Vs Zi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBoaXN0b3J5LAog ICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dkLCAnZGV0 YWlsZWQnICkgKQpAQCAtMTE3LDcgKzEwMSw3IEBACiAgICAgZGVmIGNpdGF0aW9ucyggc2VsZiwg dHJhbnMsIGhpc3RvcnlfaWQsICoqa3dkICk6CiAgICAgICAgICIiIgogICAgICAgICAiIiIKLSAg ICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3JzLmhpc3Rvcmllcy5hY2Nlc3NpYmxlX2J5X2lkKCB0 cmFucywgc2VsZi5fZGVjPQpvZGVfaWQoIHRyYW5zLCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIg KQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5 X2lkKCB0cmFucywgc2VsZi5kZWM9Cm9kZV9pZCggaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkK ICAgICAgICAgdG9vbF9pZHMgPTNEIHNldChbXSkKICAgICAgICAgZm9yIGRhdGFzZXQgaW4gaGlz dG9yeS5kYXRhc2V0czoKICAgICAgICAgICAgIGpvYiA9M0QgZGF0YXNldC5jcmVhdGluZ19qb2IK QEAgLTE2MSw4ICsxNDUsOCBAQAogICAgICAgICBuZXdfaGlzdG9yeSA9M0QgTm9uZQogICAgICAg ICAjIGlmIGEgaGlzdG9yeSBpZCB3YXMgcGFzc2VkLCBjb3B5IHRoYXQgaGlzdG9yeQogICAgICAg ICBpZiBjb3B5X3RoaXNfaGlzdG9yeV9pZDoKLSAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNl bGYuX2RlY29kZV9pZCggdHJhbnMsIGNvcHlfdGhpc19oaXN0b3J5X2lkICkKLSAgICAgICAgICAg IG9yaWdpbmFsX2hpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMuYWNjZXNzaWJsZV9ieV9p ZCggdHJhPQpucywgZGVjb2RlZF9pZCwgdHJhbnMudXNlciApCisgICAgICAgICAgICBkZWNvZGVk X2lkID0zRCBzZWxmLmRlY29kZV9pZCggY29weV90aGlzX2hpc3RvcnlfaWQgKQorICAgICAgICAg ICAgb3JpZ2luYWxfaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9i eV9pZCggdHI9CmFucywgZGVjb2RlZF9pZCwgdHJhbnMudXNlciApCiAgICAgICAgICAgICBoaXN0 X25hbWUgPTNEIGhpc3RfbmFtZSBvciAoICJDb3B5IG9mICclcyciICUgb3JpZ2luYWxfaGlzdG9y eT0KLm5hbWUgKQogICAgICAgICAgICAgbmV3X2hpc3RvcnkgPTNEIG9yaWdpbmFsX2hpc3Rvcnku Y29weSggbmFtZT0zRGhpc3RfbmFtZSwgdGFyZ2U9CnRfdXNlcj0zRHRyYW5zLnVzZXIgKQo9MjAK QEAgLTIwNCwxMCArMTg4LDEwIEBACiAgICAgICAgIGlmIGt3ZC5nZXQoICdwYXlsb2FkJywgTm9u ZSApOgogICAgICAgICAgICAgcHVyZ2UgPTNEIHN0cmluZ19hc19ib29sKCBrd2RbJ3BheWxvYWQn XS5nZXQoICdwdXJnZScsIEZhbHNlICk9CiApCj0yMAotICAgICAgICBoaXN0b3J5ID0zRCBzZWxm Lm1ncnMuaGlzdG9yaWVzLm93bmVkX2J5X2lkKCB0cmFucywgc2VsZi5fZGVjb2RlX2k9CmQoIHRy YW5zLCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIgKQotICAgICAgICBzZWxmLm1ncnMuaGlzdG9y aWVzLmRlbGV0ZSggdHJhbnMsIGhpc3RvcnkgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhp c3RvcnlfbWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2RlX2k9CmQoIGhpc3Rv cnlfaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmRlbGV0 ZSggdHJhbnMsIGhpc3RvcnkgKQogICAgICAgICBpZiBwdXJnZToKLSAgICAgICAgICAgIHNlbGYu bWdycy5oaXN0b3JpZXMucHVyZ2UoIHRyYW5zLCBoaXN0b3J5ICkKKyAgICAgICAgICAgIHNlbGYu aGlzdG9yeV9tYW5hZ2VyLnB1cmdlKCB0cmFucywgaGlzdG9yeSApCj0yMAogICAgICAgICByZXR1 cm4gc2VsZi5oaXN0b3J5X3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBuZXdf aGlzdG89CnJ5LAogICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFt cygga3dkLCAnZGV0YWlsZWQnICkgKQpAQCAtMjI2LDggKzIxMCw4IEBACiAgICAgICAgIDpyZXR1 cm5zOiAgICdPSycgaWYgdGhlIGhpc3Rvcnkgd2FzIHVuZGVsZXRlZAogICAgICAgICAiIiIKICAg ICAgICAgaGlzdG9yeV9pZCA9M0QgaWQKLSAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5tZ3JzLmhp c3Rvcmllcy5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuX2RlY29kZV9pPQpkKCB0cmFucywgaGlz dG9yeV9pZCApLCB0cmFucy51c2VyICkKLSAgICAgICAgc2VsZi5tZ3JzLmhpc3Rvcmllcy51bmRl bGV0ZSggdHJhbnMsIGhpc3RvcnkgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3Rvcnlf bWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2RlX2k9CmQoIGhpc3RvcnlfaWQg KSwgdHJhbnMudXNlciApCisgICAgICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLnVuZGVsZXRlKCB0 cmFucywgaGlzdG9yeSApCj0yMAogICAgICAgICByZXR1cm4gc2VsZi5oaXN0b3J5X3NlcmlhbGl6 ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBoaXN0b3J5LAogICAgICAgICAgICAgKipzZWxm Ll9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dkLCAnZGV0YWlsZWQnICkgKQpAQCAtMjUy LDcgKzIzNiw3IEBACiAgICAgICAgICAgICBhbnkgdmFsdWVzIHRoYXQgd2VyZSBkaWZmZXJlbnQg ZnJvbSB0aGUgb3JpZ2luYWwgYW5kLCB0aGVyZWZvcj0KZSwgdXBkYXRlZAogICAgICAgICAiIiIK ICAgICAgICAgI1RPRE86IFBVVCAvYXBpL2hpc3Rvcmllcy97ZW5jb2RlZF9oaXN0b3J5X2lkfSBw YXlsb2FkID0zRCB7IHJhdGluPQpnOiByYXRpbmcgfSAody8gbm8gc2VjdXJpdHkgY2hlY2tzKQot ICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLm1ncnMuaGlzdG9yaWVzLm93bmVkX2J5X2lkKCB0cmFu cywgc2VsZi5fZGVjb2RlX2k9CmQoIHRyYW5zLCBpZCApLCB0cmFucy51c2VyICkKKyAgICAgICAg aGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBzZWxm LmRlY29kZV9pPQpkKCBpZCApLCB0cmFucy51c2VyICkKPTIwCiAgICAgICAgICNUT0RPOiBmbHVz aGluZyBpbiBkZXNlcmlhbGl6ZSBpcyBhbiBpZmZ5IHBhdHRlcm4uLi4KICAgICAgICAgc2VsZi5o aXN0b3J5X2Rlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSggdHJhbnMsIGhpc3RvcnksIHBheWxvYWQg KQpAQCAtMjc1LDcgKzI1OSw3IEBACiAgICAgICAgICIiIgogICAgICAgICAjIFBVVCBpbnN0ZWFk IG9mIFBPU1QgYmVjYXVzZSBtdWx0aXBsZSByZXF1ZXN0cyBzaG91bGQganVzdCByZXN1bHQKICAg ICAgICAgIyBpbiBvbmUgb2JqZWN0IGJlaW5nIGNyZWF0ZWQuCi0gICAgICAgIGhpc3RvcnkgPTNE IHNlbGYubWdycy5oaXN0b3JpZXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIHNlbGYuX2RlYz0K b2RlX2lkKCB0cmFucywgaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNl bGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLmRlYz0Kb2Rl X2lkKCBpZCApLCB0cmFucy51c2VyICkKICAgICAgICAgamVoYSA9M0QgaGlzdG9yeS5sYXRlc3Rf ZXhwb3J0CiAgICAgICAgIHVwX3RvX2RhdGUgPTNEIGplaGEgYW5kIGplaGEudXBfdG9fZGF0ZQog ICAgICAgICBpZiAnZm9yY2UnIGluIGt3ZHM6CkBAIC0zMDgsNyArMjkyLDcgQEAKICAgICAgICAg IiIiCiAgICAgICAgICMgU2VlbXMgc2lsbHkgdG8gcHV0IGplaGFfaWQgaW4gaGVyZSwgYnV0IHdh bnQgR0VUIHRvIGJlIGltbXVhdGFibD0KZT8KICAgICAgICAgIyBhbmQgdGhpcyBpcyBiZWluZyBh Y2NvbXBsaXNoZWQgdGhpcyB3YXkuCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0 b3JpZXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIHNlbGYuX2RlYz0Kb2RlX2lkKCB0cmFucywg aWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5h Z2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLmRlYz0Kb2RlX2lkKCBpZCApLCB0cmFu cy51c2VyICkKICAgICAgICAgbWF0Y2hpbmdfZXhwb3J0cyA9M0QgZmlsdGVyKCBsYW1iZGEgZTog dHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBlPQouaWQgKSA9M0Q9M0QgamVoYV9pZCwgaGlzdG9y eS5leHBvcnRzICkKICAgICAgICAgaWYgbm90IG1hdGNoaW5nX2V4cG9ydHM6CiAgICAgICAgICAg ICByYWlzZSBleGNlcHRpb25zLk9iamVjdE5vdEZvdW5kKCkKCmRpZmYgLXIgODdmMWU2Yjk2Zjk0 Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5OSAtciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOD0K YjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9yeV9j b250ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3J5X2Nv bnRlbnRzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3RvcnlfY29u dGVudHMucHkKQEAgLTI5LDIwICsyOSwxMSBAQAo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYs IGFwcCApOgogICAgICAgICBzdXBlciggSGlzdG9yeUNvbnRlbnRzQ29udHJvbGxlciwgc2VsZiAp Ll9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxmLm1ncnMgPTNEIHV0aWwuYnVuY2guQnVuY2go Ci0gICAgICAgICAgICBoaXN0b3JpZXM9M0RoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCAp LAotICAgICAgICAgICAgaGRhcz0zRGhkYXMuSERBTWFuYWdlciggYXBwICkKLSAgICAgICAgKQor ICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCisgICAg ICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyID0zRCBoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFw cCApCiAgICAgICAgIHNlbGYuaGRhX3NlcmlhbGl6ZXIgPTNEIGhkYXMuSERBU2VyaWFsaXplcigg YXBwICkKICAgICAgICAgc2VsZi5oZGFfZGVzZXJpYWxpemVyID0zRCBoZGFzLkhEQURlc2VyaWFs aXplciggYXBwICkKPTIwCi0gICAgZGVmIF9kZWNvZGVfaWQoIHNlbGYsIHRyYW5zLCBpZCApOgot ICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lk KCBpZCApCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTWFs Zm9ybWVkSWQoICJNYWxmb3JtZWQgSGlzdG9yeSBpZCAoICVzICkgc3BlPQpjaWZpZWQsIHVuYWJs ZSB0byBkZWNvZGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl ICggc3RyKCBpZCApICksIHR5cGU9M0QnZXJyb3InICkKLQogICAgIGRlZiBfcGFyc2Vfc2VyaWFs aXphdGlvbl9wYXJhbXMoIHNlbGYsIGt3ZCwgZGVmYXVsdF92aWV3ICk6CiAgICAgICAgIHZpZXcg PTNEIGt3ZC5nZXQoICd2aWV3JywgTm9uZSApCiAgICAgICAgIGtleXMgPTNEIGt3ZC5nZXQoICdr ZXlzJyApCkBAIC03NywxMyArNjgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgcnZhbCA9M0Qg W10KPTIwCi0gICAgICAgICMgZ2V0IHRoZSBoaXN0b3J5LCBpZiBhbm9uIHVzZXIgYW5kIHJlcXVl c3RpbmcgY3VycmVudCBoaXN0b3J5IC0gYT0KbGxvdyBpdAotICAgICAgICBpZiggKCB0cmFucy51 c2VyID0zRD0zRCBOb25lICkKLSAgICAgICAgYW5kICggaGlzdG9yeV9pZCA9M0Q9M0QgdHJhbnMu c2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkPQogKSApICk6Ci0gICAgICAgICAg ICBoaXN0b3J5ID0zRCB0cmFucy5oaXN0b3J5Ci0gICAgICAgICMgb3RoZXJ3aXNlLCBjaGVjayBw ZXJtaXNzaW9ucyBmb3IgdGhlIGhpc3RvcnkgZmlyc3QKLSAgICAgICAgZWxzZToKLSAgICAgICAg ICAgIGhpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMuYWNjZXNzaWJsZV9ieV9pZCggdHJh bnMsIHNlbGYuPQpfZGVjb2RlX2lkKCB0cmFucywgaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkK KyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9p ZCggdHJhbnMsIHNlbGYuZGVjPQpvZGVfaWQoIGhpc3RvcnlfaWQgKSwgdHJhbnMudXNlciApCj0y MAogICAgICAgICAjIEFsbG93IHBhc3NpbmcgaW4gdHlwZSBvciB0eXBlcyAtIGZvciBjb250aW51 aXR5IHJlc3Qgb2YgbWV0aG9kcwogICAgICAgICAjIHRha2UgaW4gdHlwZSAtIGJ1dCB0aGlzIG9u ZSBjYW4gYmUgcGFzc2VkIG11bHRpcGxlIHR5cGVzIGFuZApAQCAtOTYsNyArODEsNyBAQAo9MjAK ICAgICAgICAgY29udGVudHNfa3dkcyA9M0QgeyAndHlwZXMnOiB0eXBlcyB9CiAgICAgICAgIGlm IGlkczoKLSAgICAgICAgICAgIGlkcyA9M0QgbWFwKCBsYW1iZGEgaWQ6IHRyYW5zLnNlY3VyaXR5 LmRlY29kZV9pZCggaWQgKSwgaWRzLnNwPQpsaXQoICcsJyApICkKKyAgICAgICAgICAgIGlkcyA9 M0QgbWFwKCBsYW1iZGEgaWQ6IHNlbGYuZGVjb2RlX2lkKCBpZCApLCBpZHMuc3BsaXQoICcsJyAp PQogKQogICAgICAgICAgICAgY29udGVudHNfa3dkc1sgJ2lkcycgXSA9M0QgaWRzCiAgICAgICAg ICAgICAjIElmIGV4cGxpY2l0IGlkcyBnaXZlbiwgYWx3YXlzIHVzZWQgZGV0YWlsZWQgcmVzdWx0 LgogICAgICAgICAgICAgZGV0YWlscyA9M0QgJ2FsbCcKQEAgLTE1Niw5ICsxNDEsNyBAQAogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuX19oYW5kbGVfdW5rbm93bl9jb250ZW50c190eXBlKCB0cmFu cywgY29udGVudHNfdHk9CnBlICkKPTIwCiAgICAgZGVmIF9fc2hvd19kYXRhc2V0KCBzZWxmLCB0 cmFucywgaWQsICoqa3dkICk6Ci0gICAgICAgIGhkYSA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNz aWJsZV9ieV9pZCggdHJhbnMsIHNlbGYuX2RlY29kZV9pZCggdD0KcmFucywgaWQgKSwgdHJhbnMu dXNlciApCi0gICAgICAgICNpZiBoZGEuaGlzdG9yeS5pZCAhPTNEIHNlbGYuX2RlY29kZV9pZCgg dHJhbnMsIGhpc3RvcnlfaWQgKToKLSAgICAgICAgIyAgICByYWlzZSBleGNlcHRpb25zLk9iamVj dE5vdEZvdW5kKCAnZGF0YXNldCB3YXMgbm90IGZvdW5kIGluIHRoPQppcyBoaXN0b3J5JyApCisg ICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywg c2VsZi5kZWNvZGVfaWQoID0KaWQgKSwgdHJhbnMudXNlciApCiAgICAgICAgIHJldHVybiBzZWxm LmhkYV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGRhLAogICAgICAgICAg ICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dkLCAnZGV0YWlsZWQnICkg KQo9MjAKQEAgLTIyOSw3ICsyMTIsNyBAQAogICAgICAgICAjIFRPRE86IEZsdXNoIG91dCBjcmVh dGUgbmV3IGNvbGxlY3Rpb24gZG9jdW1lbnRhdGlvbiBhYm92ZSwgbmVlZCA9CnNvbWUKICAgICAg ICAgIyBleGFtcGxlcy4gU2VlIGFsc28gYmlvYmxlbmQgYW5kIEFQSSB0ZXN0cyBmb3Igc3BlY2lm aWMgZXhhbXBsZXMuCj0yMAotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLm1ncnMuaGlzdG9yaWVz Lm93bmVkX2J5X2lkKCB0cmFucywgc2VsZi5fZGVjb2RlX2k9CmQoIHRyYW5zLCBoaXN0b3J5X2lk ICksIHRyYW5zLnVzZXIgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdl ci5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2RlX2k9CmQoIGhpc3RvcnlfaWQgKSwgdHJh bnMudXNlciApCj0yMAogICAgICAgICB0eXBlID0zRCBwYXlsb2FkLmdldCggJ3R5cGUnLCAnZGF0 YXNldCcgKQogICAgICAgICBpZiB0eXBlID0zRD0zRCAnZGF0YXNldCc6CkBAIC0yNjEsOCArMjQ0 LDggQEAKPTIwCiAgICAgICAgICMgY29weSBhbiBleGlzdGluZywgYWNjZXNzaWJsZSBoZGEKICAg ICAgICAgZWxpZiBzb3VyY2UgPTNEPTNEICdoZGEnOgotICAgICAgICAgICAgdW5lbmNvZGVkX2hk YV9pZCA9M0Qgc2VsZi5fZGVjb2RlX2lkKCB0cmFucywgY29udGVudCApCi0gICAgICAgICAgICBv cmlnaW5hbCA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIHVuZW5j b2RlZD0KX2hkYV9pZCwgdHJhbnMudXNlciApCisgICAgICAgICAgICB1bmVuY29kZWRfaGRhX2lk ID0zRCBzZWxmLmRlY29kZV9pZCggY29udGVudCApCisgICAgICAgICAgICBvcmlnaW5hbCA9M0Qg c2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgdW5lbmNvZD0KZWRfaGRh X2lkLCB0cmFucy51c2VyICkKICAgICAgICAgICAgIGRhdGFfY29weSA9M0Qgb3JpZ2luYWwuY29w eSggY29weV9jaGlsZHJlbj0zRFRydWUgKQogICAgICAgICAgICAgaGRhID0zRCBoaXN0b3J5LmFk ZF9kYXRhc2V0KCBkYXRhX2NvcHkgKQo9MjAKQEAgLTMzMiwxMCArMzE1LDEwIEBACiAgICAgICAg ICMgYW5vbiB1c2VyOiBlbnN1cmUgdGhhdCBoaXN0b3J5IGlkcyBtYXRjaCB1cCBhbmQgdGhlIGhp c3RvcnkgaXMgdD0KaGUgY3VycmVudCwKICAgICAgICAgIyAgIGNoZWNrIGZvciB1cGxvYWRpbmcs IGFuZCB1c2Ugb25seSB0aGUgc3Vic2V0IG9mIGF0dHJpYnV0ZSBrZXlzPQogbWFuaXB1bGF0YWJs ZSBieSBhbm9uIHVzZXJzCiAgICAgICAgIGlmIHRyYW5zLnVzZXIgPTNEPTNEIE5vbmU6Ci0gICAg ICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmJ5X2lkKCB0cmFucywgc2VsZi5fZGVjb2Rl X2lkKCB0cmFucywgaT0KZCApICkKKyAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdl ci5ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2RlX2lkKCBpZCApICkKICAgICAgICAgICAgIGlmIGhk YS5oaXN0b3J5ICE9M0QgdHJhbnMuaGlzdG9yeToKICAgICAgICAgICAgICAgICByYWlzZSBleGNl cHRpb25zLkF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoICdZb3UgbXVzdCBiZSBsb2dnPQplZCBpbiB0 byB1cGRhdGUgdGhpcyBkYXRhc2V0JyApCi0gICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5o ZGFzLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhkYSApCisgICAgICAgICAgICBoZGEgPTNE IHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgaGRhICkKPTIwCiAg ICAgICAgICAgICBhbm9uX2FsbG93ZWRfcGF5bG9hZCA9M0Qge30KICAgICAgICAgICAgIGlmICdk ZWxldGVkJyBpbiBwYXlsb2FkOgpAQCAtMzQ2LDEzICszMjksMTMgQEAKPTIwCiAgICAgICAgICMg bG9nZ2VkIGluIHVzZXI6IHVzZSBmdWxsIHBheWxvYWQsIGNoZWNrIHN0YXRlIGlmIGRlbGV0aW5n LCBhbmQgbT0KYWtlIHN1cmUgdGhlIGhpc3RvcnkgaXMgdGhlaXJzCiAgICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5z LCBzZWxmLl9kZWNvZGVfaT0KZCggdHJhbnMsIGlkICksIHRyYW5zLnVzZXIgKQotICAgICAgICAg ICAgc2VsZi5tZ3JzLmhpc3Rvcmllcy5lcnJvcl91bmxlc3Nfb3duZXIoIHRyYW5zLCBoZGEuaGlz dG9yeSwgdHI9CmFucy51c2VyICkKKyAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdl ci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgc2VsZi5kZWNvZGVfPQppZCggaWQgKSwgdHJhbnMu dXNlciApCisgICAgICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlci5lcnJvcl91bmxlc3Nfb3du ZXIoIHRyYW5zLCBoZGEuaGlzdG9yeSwgdD0KcmFucy51c2VyICkKPTIwCiAgICAgICAgICAgICAj IG9ubHkgY2hlY2tfc3RhdGUgaWYgbm90IGRlbGV0aW5nLCBvdGhlcndpc2UgY2Fubm90IGRlbGV0 ZSB1cD0KbG9hZGluZyBmaWxlcwogICAgICAgICAgICAgY2hlY2tfc3RhdGUgPTNEIG5vdCBwYXls b2FkLmdldCggJ2RlbGV0ZWQnLCBGYWxzZSApCiAgICAgICAgICAgICBpZiBjaGVja19zdGF0ZToK LSAgICAgICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmVycm9yX2lmX3VwbG9hZGlu ZyggdHJhbnMsIGhkYSApCisgICAgICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2Vy LmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhkYSApCj0yMAogICAgICAgICAjIG1ha2UgdGhl IGFjdHVhbCBjaGFuZ2VzCiAgICAgICAgICNUT0RPOiBpcyB0aGlzIGlmIHN0aWxsIG5lZWRlZD8K QEAgLTM2MCw3ICszNDMsNyBAQAogICAgICAgICAgICAgc2VsZi5oZGFfZGVzZXJpYWxpemVyLmRl c2VyaWFsaXplKCB0cmFucywgaGRhLCBwYXlsb2FkICkKICAgICAgICAgICAgICNUT0RPOiB0aGlz IHNob3VsZCBiZSBhbiBlZmZlY3Qgb2YgZGVsZXRpbmcgdGhlIGhkYQogICAgICAgICAgICAgaWYg cGF5bG9hZC5nZXQoICdkZWxldGVkJywgRmFsc2UgKToKLSAgICAgICAgICAgICAgICBzZWxmLm1n cnMuaGRhcy5zdG9wX2NyZWF0aW5nX2pvYiggaGRhICkKKyAgICAgICAgICAgICAgICBzZWxmLmhk YV9tYW5hZ2VyLnN0b3BfY3JlYXRpbmdfam9iKCBoZGEgKQogICAgICAgICAgICAgcmV0dXJuIHNl bGYuaGRhX3NlcmlhbGl6ZXIuc2VyaWFsaXplX3RvX3ZpZXcoIHRyYW5zLCBoZGEsCiAgICAgICAg ICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dkLCAnZGV0YWls ZWQnICkgKQo9MjAKQEAgLTQxMywxNCArMzk2LDE0IEBACiAgICAgICAgICAgICAjIHBheWxvYWQg dGFrZXMgcHJpb3JpdHkKICAgICAgICAgICAgIHB1cmdlID0zRCB1dGlsLnN0cmluZ19hc19ib29s KCBrd2RbJ3BheWxvYWQnXS5nZXQoICdwdXJnZScsIHB1PQpyZ2UgKSApCj0yMAotICAgICAgICBo ZGEgPTNEIHNlbGYubWdycy5oZGFzLmJ5X2lkKCB0cmFucywgc2VsZi5fZGVjb2RlX2lkKCB0cmFu cywgaWQgKSw9CiB0cmFucy51c2VyICkKLSAgICAgICAgc2VsZi5tZ3JzLmhpc3Rvcmllcy5lcnJv cl91bmxlc3Nfb3duZXJzaGlwKCB0cmFucywgaGRhLmhpc3RvcnksIHRyPQphbnMudXNlciApCi0g ICAgICAgIHNlbGYubWdycy5oZGFzLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhkYSApCisg ICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2Rl X2lkKCBpZCApLCB0cmFucz0KLnVzZXIgKQorICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlci5l cnJvcl91bmxlc3Nfb3duZXJzaGlwKCB0cmFucywgaGRhLmhpc3RvcnksIHQ9CnJhbnMudXNlciAp CisgICAgICAgIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgaGRh ICkKPTIwCiAgICAgICAgIGlmIHB1cmdlOgotICAgICAgICAgICAgc2VsZi5tZ3JzLmhkYXMucHVy Z2UoIHRyYW5zLCBoZGEgKQorICAgICAgICAgICAgc2VsZi5oZGFfbWFuYWdlci5wdXJnZSggdHJh bnMsIGhkYSApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm1ncnMuaGRhcy5kZWxl dGUoIHRyYW5zLCBoZGEgKQorICAgICAgICAgICAgc2VsZi5oZGFfbWFuYWdlci5kZWxldGUoIHRy YW5zLCBoZGEgKQogICAgICAgICByZXR1cm4gc2VsZi5oZGFfc2VyaWFsaXplci5zZXJpYWxpemVf dG9fdmlldyggdHJhbnMsIGhkYSwKICAgICAgICAgICAgICoqc2VsZi5fcGFyc2Vfc2VyaWFsaXph dGlvbl9wYXJhbXMoIGt3ZCwgJ2RldGFpbGVkJyApICkKPTIwCgpkaWZmIC1yIDg3ZjFlNmI5NmY5 NGNhZTIwOTUxZmQ3Y2ExYWNjM2RmMjAwYzgyOTkgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDg9 CmI4ZjljNTVjMjM4NDQ5NzUwIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pvYnMucHkK LS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvam9icy5weQorKysgYi9saWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2JzLnB5CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAg IGhpc3RvcnlfaWQgPTNEIGt3ZC5nZXQoICdoaXN0b3J5X2lkJywgTm9uZSApCiAgICAgICAgIGlm IGhpc3RvcnlfaWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg ICAgZGVjb2RlZF9oaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoaGlzdG9y eV9pZCkKKyAgICAgICAgICAgICAgICBkZWNvZGVkX2hpc3RvcnlfaWQgPTNEIHNlbGYuZGVjb2Rl X2lkKGhpc3RvcnlfaWQpCiAgICAgICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmZpbHRlcigg dHJhbnMuYXBwLm1vZGVsLkpvYi5oaXN0b3J5X2lkID0zRD0KPTNEIGRlY29kZWRfaGlzdG9yeV9p ZCApCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9u cy5PYmplY3RBdHRyaWJ1dGVJbnZhbGlkRXhjZXB0aW9uKCkKQEAgLTE5OSw3ICsxOTksNyBAQAo9 MjAKICAgICBkZWYgX19nZXRfam9iKCBzZWxmLCB0cmFucywgaWQgKToKICAgICAgICAgdHJ5Ogot ICAgICAgICAgICAgZGVjb2RlZF9qb2JfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCgg aWQgKQorICAgICAgICAgICAgZGVjb2RlZF9qb2JfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBpZCAp CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25z Lk1hbGZvcm1lZElkKCkKICAgICAgICAgcXVlcnkgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnko IHRyYW5zLmFwcC5tb2RlbC5Kb2IgKQpAQCAtMjYwLDcgKzI2MCw3IEBACiAgICAgICAgICAgICBp ZiBpc2luc3RhbmNlKCB2LCBkaWN0ICk6CiAgICAgICAgICAgICAgICAgaWYgJ2lkJyBpbiB2Ogog ICAgICAgICAgICAgICAgICAgICBpZiAnc3JjJyBub3QgaW4gdiBvciB2WyAnc3JjJyBdID0zRD0z RCAnaGRhJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhkYV9pZCA9M0QgdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCB2WydpZCddICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhkYV9pZCA9 M0Qgc2VsZi5kZWNvZGVfaWQoIHZbJ2lkJ10gKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmE9Cm5zLCBoZGFf aWQsIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfbGlicmFyeV9kYXRhc2V0X2RhdGFzZXRf YXNzb2M9CmlhdGlvbiggdHJhbnMsIHZbJ2lkJ10gKQoKZGlmZiAtciA4N2YxZTZiOTZmOTRjYWUy MDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpiOGY5 YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9saWJyYXJ5X2NvbnRl bnRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2xpYnJhcnlfY29udGVu dHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvbGlicmFyeV9jb250ZW50 cy5weQpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICBydmFsLmFwcGVuZCgg bGQgKQogICAgICAgICAgICAgcmV0dXJuIHJ2YWwKICAgICAgICAgdHJ5OgotICAgICAgICAgICAg ZGVjb2RlZF9saWJyYXJ5X2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGxpYnJhcnlf aWQgKQorICAgICAgICAgICAgZGVjb2RlZF9saWJyYXJ5X2lkID0zRCBzZWxmLmRlY29kZV9pZCgg bGlicmFyeV9pZCApCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICByYWlz ZSBleGNlcHRpb25zLk1hbGZvcm1lZElkKCAnTWFsZm9ybWVkIGxpYnJhcnkgaWQgKCAlcyApIHNw ZT0KY2lmaWVkLCB1bmFibGUgdG8gZGVjb2RlLicgJSBsaWJyYXJ5X2lkICkKICAgICAgICAgdHJ5 OgpAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgY2hlY2sg cGVybWlzc2lvbnMgb24gKGFsbCB0aHJlZT8pIHJlc291cmNlczogaGRhLCBsaWJyYXJ5LCBmPQpv bGRlcgogICAgICAgICAgICAgI1RPRE86IGRvIHdlIHJlYWxseSBuZWVkIHRoZSBsaWJyYXJ5Pz8K LSAgICAgICAgICAgIGZyb21faGRhX2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGZy b21faGRhX2lkICkKKyAgICAgICAgICAgIGZyb21faGRhX2lkID0zRCBzZWxmLmRlY29kZV9pZCgg ZnJvbV9oZGFfaWQgKQogICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLm93bmVk X2J5X2lkKCB0cmFucywgZnJvbV9oZGFfaWQsIHRyYW49CnMudXNlciApCiAgICAgICAgICAgICBo ZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgaGRhICkK ICAgICAgICAgICAgICMgbGlicmFyeSA9M0Qgc2VsZi5nZXRfbGlicmFyeSggdHJhbnMsIGxpYnJh cnlfaWQsIGNoZWNrX2FjY2VzPQpzaWJsZT0zRFRydWUgKQoKZGlmZiAtciA4N2YxZTZiOTZmOTRj YWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpi OGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9wcm92ZW5hbmNl LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Byb3ZlbmFuY2UucHkKKysr IGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvcHJvdmVuYW5jZS5weQpAQCAtNSw3ICs1 LDcgQEAKIGZyb20gZ2FsYXh5IGltcG9ydCB3ZWIKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRy b2xsZXIgaW1wb3J0IEJhc2VBUElDb250cm9sbGVyCiBmcm9tIHBhc3RlLmh0dHBleGNlcHRpb25z IGltcG9ydCBIVFRQTm90SW1wbGVtZW50ZWQsIEhUVFBCYWRSZXF1ZXN0Ci1mcm9tIGdhbGF4eS5t YW5hZ2VycyBpbXBvcnQgaGRhcworZnJvbSBnYWxheHkgaW1wb3J0IG1hbmFnZXJzCj0yMAogbG9n ID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQo9MjAKQEAgLTE1LDcgKzE1LDcgQEAK ICAgICAiIiIKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlcigg QmFzZVByb3ZlbmFuY2VDb250cm9sbGVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCi0gICAgICAg IHNlbGYuaGRhcyA9M0QgaGRhcy5IREFNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9t YW5hZ2VyID0zRCBtYW5hZ2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCj0yMAogICAgIEB3ZWIu ZXhwb3NlX2FwaQogICAgIGRlZiBpbmRleCggc2VsZiwgdHJhbnMsICoqa3dkICk6CkBAIC0zOCwx MyArMzgsMTMgQEAKICAgICBkZWYgZGVsZXRlKCBzZWxmLCB0cmFucywgdGFnX25hbWUsICoqa3dk ICk6CiAgICAgICAgIHJhaXNlIEhUVFBCYWRSZXF1ZXN0KCJDYW5ub3QgRGVsZXRlIFByb3ZlbmFu Y2UiKQo9MjAKLSAgICBkZWYgX2dldF9wcm92ZW5hbmNlKHNlbGYsIHRyYW5zLCBpdGVtX2NsYXNz X25hbWUsIGl0ZW1faWQsIGZvbGxvdz0zRFRyPQp1ZSk6CisgICAgZGVmIF9nZXRfcHJvdmVuYW5j ZSggc2VsZiwgdHJhbnMsIGl0ZW1fY2xhc3NfbmFtZSwgaXRlbV9pZCwgZm9sbG93PTNEVD0KcnVl ICk6CiAgICAgICAgIHByb3ZlbmFuY2VfaXRlbSA9M0Qgc2VsZi5nZXRfb2JqZWN0KCB0cmFucywg aXRlbV9pZCwgaXRlbV9jbGFzc19uYT0KbWUsIGNoZWNrX293bmVyc2hpcD0zREZhbHNlLCBjaGVj a19hY2Nlc3NpYmxlPTNERmFsc2UpCiAgICAgICAgIGlmIGl0ZW1fY2xhc3NfbmFtZSA9M0Q9M0Qg Ikhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24iOgotICAgICAgICAgICAgc2VsZi5oZGFzLmNoZWNr X2FjY2Vzc2libGUodHJhbnMsIHByb3ZlbmFuY2VfaXRlbSkKKyAgICAgICAgICAgIHNlbGYuaGRh X21hbmFnZXIuZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHRyYW5zLCBwcm92ZW5hbmNlX2l0PQpl bSApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNlY3VyaXR5X2NoZWNrKHRyYW5z LCBwcm92ZW5hbmNlX2l0ZW0sIGNoZWNrX2FjY2Vzc2libGU9Cj0zRFRydWUpCi0gICAgICAgIG91 dCA9M0Qgc2VsZi5fZ2V0X3JlY29yZCh0cmFucywgcHJvdmVuYW5jZV9pdGVtLCBmb2xsb3cpCisg ICAgICAgICAgICBzZWxmLnNlY3VyaXR5X2NoZWNrKCB0cmFucywgcHJvdmVuYW5jZV9pdGVtLCBj aGVja19hY2Nlc3NpYmxlPQo9M0RUcnVlICkKKyAgICAgICAgb3V0ID0zRCBzZWxmLl9nZXRfcmVj b3JkKCB0cmFucywgcHJvdmVuYW5jZV9pdGVtLCBmb2xsb3cgKQogICAgICAgICByZXR1cm4gb3V0 Cj0yMAogICAgIGRlZiBfZ2V0X3JlY29yZChzZWxmLCB0cmFucywgaXRlbSwgZm9sbG93KToKCmRp ZmYgLXIgODdmMWU2Yjk2Zjk0Y2FlMjA5NTFmZDdjYTFhY2MzZGYyMDBjODI5OSAtciA2OWM3NGJj OTk2MjVlMzYzYmVjYWQwOD0KYjhmOWM1NWMyMzg0NDk3NTAgbGliL2dhbGF4eS93ZWJhcHBzL2dh bGF4eS9hcGkvdG9vbHMucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvdG9v bHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvdG9vbHMucHkKQEAgLTMx LDEwICszMSw4IEBACj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAg IHN1cGVyKCBUb29sc0NvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKLSAgICAgICAg c2VsZi5tZ3JzID0zRCB1dGlsLmJ1bmNoLkJ1bmNoKAotICAgICAgICAgICAgaGlzdG9yaWVzPTNE bWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKSwKLSAgICAgICAgICAgIGhk YXM9M0RtYW5hZ2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCi0gICAgICAgICkKKyAgICAgICAg c2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdl ciggYXBwICkKKyAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFN YW5hZ2VyKCBhcHAgKQo9MjAKICAgICBAd2ViLmV4cG9zZV9hcGkKICAgICBkZWYgaW5kZXgoIHNl bGYsIHRyYW5zLCAqKmt3ZHMgKToKQEAgLTQ3LDcgKzQ1LDYgQEAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmNsdWRpbmcgc2VjdGlvbnMgYW5kIGxhYmVscwogICAgICAgICAgICAgICAg IHRyYWNrc3RlciAtIGlmIHRydWUsIG9ubHkgdG9vbHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2tzdGVyIGFyZSByZXR1cm5lZAotCiAg ICAgICAgICIiIgo9MjAKICAgICAgICAgIyBSZWFkIHBhcmFtcy4KQEAgLTE0NCw4ICsxNDEsOCBA QAogICAgICAgICAjIGRhdGFzZXQgdXBsb2FkLgogICAgICAgICBoaXN0b3J5X2lkID0zRCBwYXls b2FkLmdldCgiaGlzdG9yeV9pZCIsIE5vbmUpCiAgICAgICAgIGlmIGhpc3RvcnlfaWQ6Ci0gICAg ICAgICAgICBkZWNvZGVkX2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGhpc3Rvcnlf aWQgKQotICAgICAgICAgICAgdGFyZ2V0X2hpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMu b3duZWRfYnlfaWQoIHRyYW5zLCBkZWM9Cm9kZWRfaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAg ICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKQorICAgICAgICAg ICAgdGFyZ2V0X2hpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLm93bmVkX2J5X2lkKCB0 cmFucywgZGU9CmNvZGVkX2lkLCB0cmFucy51c2VyICkKICAgICAgICAgZWxzZToKICAgICAgICAg ICAgIHRhcmdldF9oaXN0b3J5ID0zRCBOb25lCj0yMApAQCAtMTYwLDcgKzE1Nyw3IEBACiAgICAg ICAgIGlucHV0X3BhdGNoID0zRCB7fQogICAgICAgICBmb3IgaywgdiBpbiBpbnB1dHMuaXRlcml0 ZW1zKCk6CiAgICAgICAgICAgICBpZiAgaXNpbnN0YW5jZSh2LCBkaWN0KSBhbmQgdi5nZXQoJ3Ny YycsICcnKSA9M0Q9M0QgJ2xkZGEnIGFuZD0KICdpZCcgaW4gdjoKLSAgICAgICAgICAgICAgICBs ZGRhID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuTGlicmFyeURh PQp0YXNldERhdGFzZXRBc3NvY2lhdGlvbiApLmdldCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lk KHZbJ2lkJ10pICkKKyAgICAgICAgICAgICAgICBsZGRhID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1 ZXJ5KCB0cmFucy5hcHAubW9kZWwuTGlicmFyeURhPQp0YXNldERhdGFzZXRBc3NvY2lhdGlvbiAp LmdldCggc2VsZi5kZWNvZGVfaWQodlsnaWQnXSkgKQogICAgICAgICAgICAgICAgIGlmIHRyYW5z LnVzZXJfaXNfYWRtaW4oKSBvciB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQuY2FuX2E9CmNjZXNz X2RhdGFzZXQoIHRyYW5zLmdldF9jdXJyZW50X3VzZXJfcm9sZXMoKSwgbGRkYS5kYXRhc2V0ICk6 CiAgICAgICAgICAgICAgICAgICAgIGlucHV0X3BhdGNoW2tdID0zRCBsZGRhLnRvX2hpc3Rvcnlf ZGF0YXNldF9hc3NvY2lhdGlvbj0KKHRhcmdldF9oaXN0b3J5LCBhZGRfdG9faGlzdG9yeT0zRFRy dWUpCj0yMApAQCAtMjgzLDEwICsyODAsMTAgQEAKICAgICAgICAgICAgIHJ1bl9vbl9yZWdpb25z ID0zRCBUcnVlCj0yMAogICAgICAgICAjIERhdGFzZXQgY2hlY2suCi0gICAgICAgIGRlY29kZWRf ZGF0YXNldF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBwYXlsb2FkLmdldCggJ3Rh cj0KZ2V0X2RhdGFzZXRfaWQnICkgKQotICAgICAgICBvcmlnaW5hbF9kYXRhc2V0ID0zRCBzZWxm Lm1ncnMuaGRhcy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2Q9CmVkX2RhdGFzZXRfaWQs IHVzZXI9M0R0cmFucy51c2VyICkKKyAgICAgICAgZGVjb2RlZF9kYXRhc2V0X2lkID0zRCBzZWxm LmRlY29kZV9pZCggcGF5bG9hZC5nZXQoICd0YXJnZXRfZGF0YXNlPQp0X2lkJyApICkKKyAgICAg ICAgb3JpZ2luYWxfZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lk KCB0cmFucywgZGVjPQpvZGVkX2RhdGFzZXRfaWQsIHVzZXI9M0R0cmFucy51c2VyICkKICAgICAg ICAgb3JpZ2luYWxfZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRp bmcoIHRyYW5zLCBvPQpyaWdpbmFsX2RhdGFzZXQgKQotICAgICAgICBtc2cgPTNEIHNlbGYubWdy cy5oZGFzLmRhdGFfY29udmVyc2lvbl9zdGF0dXMoIHRyYW5zLCBvcmlnaW5hbF9kYXQ9CmFzZXQg KQorICAgICAgICBtc2cgPTNEIHNlbGYuaGRhX21hbmFnZXIuZGF0YV9jb252ZXJzaW9uX3N0YXR1 cyggdHJhbnMsIG9yaWdpbmFsX2Q9CmF0YXNldCApCiAgICAgICAgIGlmIG1zZzoKICAgICAgICAg ICAgIHJldHVybiBtc2cKPTIwCkBAIC0yOTQsNyArMjkxLDcgQEAKICAgICAgICAgIyBqb2IncyBw cmV2aW91cyBwYXJhbWV0ZXJzIGFuZCBpbmNvbWluZyBwYXJhbWV0ZXJzLiBJbmNvbWluZyBwYXJh PQptZXRlcnMKICAgICAgICAgIyBoYXZlIHByaW9yaXR5LgogICAgICAgICAjCi0gICAgICAgIG9y aWdpbmFsX2pvYiA9M0Qgc2VsZi5tZ3JzLmhkYXMuY3JlYXRpbmdfam9iKCBvcmlnaW5hbF9kYXRh c2V0ICkKKyAgICAgICAgb3JpZ2luYWxfam9iID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmNyZWF0aW5n X2pvYiggb3JpZ2luYWxfZGF0YXNldCApCiAgICAgICAgIHRvb2wgPTNEIHRyYW5zLmFwcC50b29s Ym94LmdldF90b29sKCBvcmlnaW5hbF9qb2IudG9vbF9pZCApCiAgICAgICAgIGlmIG5vdCB0b29s OgogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLmFwcC5tb2RlbC5EYXRhc2V0LmNvbnZlcnNpb25f bWVzc2FnZXMuTk9fVE9PTAoKZGlmZiAtciA4N2YxZTZiOTZmOTRjYWUyMDk1MWZkN2NhMWFjYzNk ZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpiOGY5YzU1YzIzODQ0OTc1MCBs aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS93b3JrZmxvd3MucHkKLS0tIGEvbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9hcGkvd29ya2Zsb3dzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBw cy9nYWxheHkvYXBpL3dvcmtmbG93cy5weQpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKPTIwCiAgICAg ICAgIGlmICdmcm9tX2hpc3RvcnlfaWQnIGluIHBheWxvYWQ6CiAgICAgICAgICAgICBmcm9tX2hp c3RvcnlfaWQgPTNEIHBheWxvYWQuZ2V0KCAnZnJvbV9oaXN0b3J5X2lkJyApCi0gICAgICAgICAg ICBmcm9tX2hpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggZnJvbV9oaXN0 b3J5X2lkICkKKyAgICAgICAgICAgIGZyb21faGlzdG9yeV9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQo IGZyb21faGlzdG9yeV9pZCApCiAgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3Rvcnlf bWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZnJvbT0KX2hpc3RvcnlfaWQsIHRyYW5z LnVzZXIgKQo9MjAKLSAgICAgICAgICAgIGpvYl9pZHMgPTNEIG1hcCggdHJhbnMuc2VjdXJpdHku ZGVjb2RlX2lkLCBwYXlsb2FkLmdldCggJ2pvYl9pPQpkcycsIFtdICkgKQorICAgICAgICAgICAg am9iX2lkcyA9M0QgbWFwKCBzZWxmLmRlY29kZV9pZCwgcGF5bG9hZC5nZXQoICdqb2JfaWRzJywg W10gKSApCiAgICAgICAgICAgICBkYXRhc2V0X2lkcyA9M0QgcGF5bG9hZC5nZXQoICdkYXRhc2V0 X2lkcycsIFtdICkKICAgICAgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbl9pZHMgPTNEIHBheWxv YWQuZ2V0KCAnZGF0YXNldF9jb2xsZWN0aW9uX2lkPQpzJywgW10gKQogICAgICAgICAgICAgd29y a2Zsb3dfbmFtZSA9M0QgcGF5bG9hZFsgJ3dvcmtmbG93X25hbWUnIF0KQEAgLTI0Miw3ICsyNDIs NyBAQAogICAgICAgICB3b3JrZmxvd19pZCA9M0QgaWQKPTIwCiAgICAgICAgIHRyeToKLSAgICAg ICAgICAgIHN0b3JlZF93b3JrZmxvdyA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeShzZWxmLmFw cC5tb2RlbC5TdG9yPQplZFdvcmtmbG93KS5nZXQodHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKHdv cmtmbG93X2lkKSkKKyAgICAgICAgICAgIHN0b3JlZF93b3JrZmxvdyA9M0QgdHJhbnMuc2Ffc2Vz c2lvbi5xdWVyeShzZWxmLmFwcC5tb2RlbC5TdG9yPQplZFdvcmtmbG93KS5nZXQoc2VsZi5kZWNv ZGVfaWQod29ya2Zsb3dfaWQpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgogICAgICAg ICAgICAgdHJhbnMucmVzcG9uc2Uuc3RhdHVzID0zRCA0MDAKICAgICAgICAgICAgIHJldHVybiAo IldvcmtmbG93IHdpdGggSUQ9M0QnJXMnIGNhbiBub3QgYmUgZm91bmRcbiBFeGNlcHRpb246PQog JXMiKSAlICh3b3JrZmxvd19pZCwgc3RyKCBlICkpCkBAIC00MzEsNyArNDMxLDcgQEAKPTIwCiAg ICAgICAgIDpyYWlzZXM6IGV4Y2VwdGlvbnMuTWVzc2FnZUV4Y2VwdGlvbiwgZXhjZXB0aW9ucy5P YmplY3ROb3RGb3VuZAogICAgICAgICAiIiIKLSAgICAgICAgZGVjb2RlZF93b3JrZmxvd19pbnZv Y2F0aW9uX2lkID0zRCBzZWxmLl9fZGVjb2RlX2lkKCB0cmFucywgaW52b2NhPQp0aW9uX2lkICkK KyAgICAgICAgZGVjb2RlZF93b3JrZmxvd19pbnZvY2F0aW9uX2lkID0zRCBzZWxmLmRlY29kZV9p ZCggaW52b2NhdGlvbl9pZCApCiAgICAgICAgIHdvcmtmbG93X2ludm9jYXRpb24gPTNEIHNlbGYu d29ya2Zsb3dfbWFuYWdlci5nZXRfaW52b2NhdGlvbiggdHJhbj0KcywgZGVjb2RlZF93b3JrZmxv d19pbnZvY2F0aW9uX2lkICkKICAgICAgICAgaWYgd29ya2Zsb3dfaW52b2NhdGlvbjoKICAgICAg ICAgICAgIHJldHVybiBzZWxmLl9fZW5jb2RlX2ludm9jYXRpb24oIHRyYW5zLCB3b3JrZmxvd19p bnZvY2F0aW9uICkKQEAgLTQ1MSw3ICs0NTEsNyBAQAo9MjAKICAgICAgICAgOnJhaXNlczogZXhj ZXB0aW9ucy5NZXNzYWdlRXhjZXB0aW9uLCBleGNlcHRpb25zLk9iamVjdE5vdEZvdW5kCiAgICAg ICAgICIiIgotICAgICAgICBkZWNvZGVkX3dvcmtmbG93X2ludm9jYXRpb25faWQgPTNEIHNlbGYu X19kZWNvZGVfaWQoIHRyYW5zLCBpbnZvY2E9CnRpb25faWQgKQorICAgICAgICBkZWNvZGVkX3dv cmtmbG93X2ludm9jYXRpb25faWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBpbnZvY2F0aW9uX2lkICkK ICAgICAgICAgd29ya2Zsb3dfaW52b2NhdGlvbiA9M0Qgc2VsZi53b3JrZmxvd19tYW5hZ2VyLmNh bmNlbF9pbnZvY2F0aW9uKCB0PQpyYW5zLCBkZWNvZGVkX3dvcmtmbG93X2ludm9jYXRpb25faWQg KQogICAgICAgICByZXR1cm4gc2VsZi5fX2VuY29kZV9pbnZvY2F0aW9uKCB0cmFucywgd29ya2Zs b3dfaW52b2NhdGlvbiApCj0yMApAQCAtNDc0LDcgKzQ3NCw3IEBACj0yMAogICAgICAgICA6cmFp c2VzOiBleGNlcHRpb25zLk1lc3NhZ2VFeGNlcHRpb24sIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91 bmQKICAgICAgICAgIiIiCi0gICAgICAgIGRlY29kZWRfaW52b2NhdGlvbl9zdGVwX2lkID0zRCBz ZWxmLl9fZGVjb2RlX2lkKCB0cmFucywgc3RlcF9pZCApCisgICAgICAgIGRlY29kZWRfaW52b2Nh dGlvbl9zdGVwX2lkID0zRCBzZWxmLmRlY29kZV9pZCggc3RlcF9pZCApCiAgICAgICAgIGludm9j YXRpb25fc3RlcCA9M0Qgc2VsZi53b3JrZmxvd19tYW5hZ2VyLmdldF9pbnZvY2F0aW9uX3N0ZXAo CiAgICAgICAgICAgICB0cmFucywKICAgICAgICAgICAgIGRlY29kZWRfaW52b2NhdGlvbl9zdGVw X2lkCkBAIC01MDEsNyArNTAxLDcgQEAKPTIwCiAgICAgICAgIDpyYWlzZXM6IGV4Y2VwdGlvbnMu TWVzc2FnZUV4Y2VwdGlvbiwgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZAogICAgICAgICAiIiIK LSAgICAgICAgZGVjb2RlZF9pbnZvY2F0aW9uX3N0ZXBfaWQgPTNEIHNlbGYuX19kZWNvZGVfaWQo IHRyYW5zLCBzdGVwX2lkICkKKyAgICAgICAgZGVjb2RlZF9pbnZvY2F0aW9uX3N0ZXBfaWQgPTNE IHNlbGYuZGVjb2RlX2lkKCBzdGVwX2lkICkKICAgICAgICAgYWN0aW9uID0zRCBwYXlsb2FkLmdl dCggImFjdGlvbiIsIE5vbmUgKQo9MjAKICAgICAgICAgaW52b2NhdGlvbl9zdGVwID0zRCBzZWxm LndvcmtmbG93X21hbmFnZXIudXBkYXRlX2ludm9jYXRpb25fc3RlcCgKQEAgLTU0MCw3ICs1NDAs NyBAQAogICAgICAgICAgICAgaWYgc3RvcmVkX3dvcmtmbG93IGlzIE5vbmU6CiAgICAgICAgICAg ICAgICAgcmFpc2UgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCggIldvcmtmbG93IG5vdCBmb3Vu ZDogJXMiID0KJSB3b3JrZmxvd19pZCApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3b3Jr Zmxvd19pZCA9M0Qgc2VsZi5fX2RlY29kZV9pZCggdHJhbnMsIHdvcmtmbG93X2lkICkKKyAgICAg ICAgICAgIHdvcmtmbG93X2lkID0zRCBzZWxmLmRlY29kZV9pZCggd29ya2Zsb3dfaWQgKQogICAg ICAgICAgICAgcXVlcnkgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2Rl bC5TdG9yZWRXb3JrZmw9Cm93ICkKICAgICAgICAgICAgIHN0b3JlZF93b3JrZmxvdyA9M0QgcXVl cnkuZ2V0KCB3b3JrZmxvd19pZCApCiAgICAgICAgIGlmIHN0b3JlZF93b3JrZmxvdyBpcyBOb25l OgpAQCAtNTUzLDEwICs1NTMsMyBAQAogICAgICAgICAgICAgaW52b2NhdGlvbi50b19kaWN0KCB2 aWV3ICksCiAgICAgICAgICAgICBUcnVlCiAgICAgICAgICkKLQotICAgIGRlZiBfX2RlY29kZV9p ZCggc2VsZiwgdHJhbnMsIHdvcmtmbG93X2lkLCBtb2RlbF90eXBlPTNEIndvcmtmbG93IiApOgot ICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lk KCB3b3JrZmxvd19pZCApCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICBt ZXNzYWdlID0zRCAiTWFsZm9ybWVkICVzIGlkICggJXMgKSBzcGVjaWZpZWQsIHVuYWJsZSB0byBk ZWNvZD0KZSIgJSAoIG1vZGVsX3R5cGUsIHdvcmtmbG93X2lkICkKLSAgICAgICAgICAgIHJhaXNl IGV4Y2VwdGlvbnMuTWFsZm9ybWVkSWQoIG1lc3NhZ2UgKQoKZGlmZiAtciA4N2YxZTZiOTZmOTRj YWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpi OGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2Rh dGFzZXQucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9kYXRh c2V0LnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvZGF0YXNl dC5weQpAQCAtOTIsMTcgKzkyLDE1IEBACj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBw ICk6CiAgICAgICAgIHN1cGVyKCBEYXRhc2V0SW50ZXJmYWNlLCBzZWxmICkuX19pbml0X18oIGFw cCApCi0gICAgICAgIHNlbGYubWdycyA9M0QgdXRpbC5idW5jaC5CdW5jaCgKLSAgICAgICAgICAg IGhpc3Rvcmllcz0zRG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggYXBwICksCi0g ICAgICAgICAgICBoZGFzPTNEbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2VyKCBhcHAgKSwKLSAgICAg ICAgKQorICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGlzdG9yaWVz Lkhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBtYW5h Z2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCj0yMAogICAgIGRlZiBfZ2V0X2pvYl9mb3JfZGF0 YXNldCggc2VsZiwgdHJhbnMsIGRhdGFzZXRfaWQgKToKICAgICAgICAgJycnCiAgICAgICAgIFJl dHVybiB0aGUgam9iIGZvciB0aGUgZ2l2ZW4gZGF0YXNldC4gVGhpcyB3aWxsIHRocm93IGFuIGVy cm9yIGlmID0KdGhlCiAgICAgICAgIGRhdGFzZXQgaXMgZWl0aGVyIG5vbmV4aXN0ZW50IG9yIGlu YWNjZXNzaWJsZSB0byB0aGUgdXNlci4KICAgICAgICAgJycnCi0gICAgICAgIGhkYSA9M0QgdHJh bnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzbz0K Y2lhdGlvbiApLmdldCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkgKQor ICAgICAgICBoZGEgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5I aXN0b3J5RGF0YXNldEFzc289CmNpYXRpb24gKS5nZXQoIHNlbGYuZGVjb2RlX2lkKCBkYXRhc2V0 X2lkICkgKQogICAgICAgICBhc3NlcnQgaGRhIGFuZCBzZWxmLl9jYW5fYWNjZXNzX2RhdGFzZXQo IHRyYW5zLCBoZGEgKQogICAgICAgICByZXR1cm4gaGRhLmNyZWF0aW5nX2pvYgo9MjAKQEAgLTEx OSw3ICsxMTcsNyBAQAogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBoZGEgPTNEIE5vbmUK ICAgICAgICAgaWYgbm90IGhkYToKLSAgICAgICAgICAgIGhkYSA9M0QgdHJhbnMuc2Ffc2Vzc2lv bi5xdWVyeSggbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvPQpuICkuZ2V0KCB0cmFucy5z ZWN1cml0eS5kZWNvZGVfaWQoIGlkICkgKQorICAgICAgICAgICAgaGRhID0zRCB0cmFucy5zYV9z ZXNzaW9uLnF1ZXJ5KCBtb2RlbC5IaXN0b3J5RGF0YXNldEFzc29jaWF0aW89Cm4gKS5nZXQoIHNl bGYuZGVjb2RlX2lkKCBpZCApICkKICAgICAgICAgaWYgbm90IGhkYSBvciBub3Qgc2VsZi5fY2Fu X2FjY2Vzc19kYXRhc2V0KCB0cmFucywgaGRhICk6CiAgICAgICAgICAgICByZXR1cm4gdHJhbnMu c2hvd19lcnJvcl9tZXNzYWdlKCAiRWl0aGVyIHRoaXMgZGF0YXNldCBkb2VzIG5vdD0KIGV4aXN0 IG9yIHlvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4iICkKICAgICAgICAg cmV0dXJuIHRyYW5zLmZpbGxfdGVtcGxhdGUoICJkYXRhc2V0L2Vycm9ycy5tYWtvIiwgaGRhPTNE aGRhICkKQEAgLTE3Nyw3ICsxNzUsNyBAQAogICAgIEB3ZWIuZXhwb3NlCiAgICAgZGVmIGdldF9t ZXRhZGF0YV9maWxlKHNlbGYsIHRyYW5zLCBoZGFfaWQsIG1ldGFkYXRhX25hbWUpOgogICAgICAg ICAiIiIgQWxsb3dzIHRoZSBkb3dubG9hZGluZyBvZiBtZXRhZGF0YSBmaWxlcyBhc3NvY2lhdGVk IHdpdGggZGF0YXM9CmV0cyAoZWcuIGJhaSBpbmRleCBmb3IgYmFtIGZpbGVzKSAiIiIKLSAgICAg ICAgZGF0YSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkhpc3Rv cnlEYXRhc2V0QXNzPQpvY2lhdGlvbiApLmdldCggdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBo ZGFfaWQgKSApCisgICAgICAgIGRhdGEgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5z LmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldEFzcz0Kb2NpYXRpb24gKS5nZXQoIHNlbGYuZGVjb2Rl X2lkKCBoZGFfaWQgKSApCiAgICAgICAgIGlmIG5vdCBkYXRhIG9yIG5vdCBzZWxmLl9jYW5fYWNj ZXNzX2RhdGFzZXQoIHRyYW5zLCBkYXRhICk6CiAgICAgICAgICAgICByZXR1cm4gdHJhbnMuc2hv d19lcnJvcl9tZXNzYWdlKCAiWW91IGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlcz0KcyB0aGlzIGRh dGFzZXQiICkKPTIwCkBAIC0xOTIsNyArMTkwLDcgQEAKICAgICBkZWYgX2NoZWNrX2RhdGFzZXQo c2VsZiwgdHJhbnMsIGhkYV9pZCk6CiAgICAgICAgICMgREVQUkVDQVRJT046IFdlIHN0aWxsIHN1 cHBvcnQgdW5lbmNvZGVkIGlkcyBmb3IgYmFja3dhcmQgY29tcGF0aT0KYmlsaXR5CiAgICAgICAg IHRyeToKLSAgICAgICAgICAgIGRhdGEgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5z LmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNlPQp0QXNzb2NpYXRpb24gKS5nZXQoIHRyYW5zLnNlY3Vy aXR5LmRlY29kZV9pZCggaGRhX2lkKSApCisgICAgICAgICAgICBkYXRhID0zRCB0cmFucy5zYV9z ZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuSGlzdG9yeURhdGFzZT0KdEFzc29jaWF0aW9u ICkuZ2V0KCBzZWxmLmRlY29kZV9pZCggaGRhX2lkKSApCiAgICAgICAgICAgICBpZiBkYXRhIGlz IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciggJ0ludmFsaWQgcmVmZXJl bmNlIGRhdGFzZXQgaWQ6ICVzLicgJSBoZD0KYV9pZCkKICAgICAgICAgZXhjZXB0OgpAQCAtNDYz LDcgKzQ2MSw3IEBACiAgICAgICAgICAgICAjIExvYWQgdGhlIGhkYXMgYW5kIGVuc3VyZSB0aGV5 IGFsbCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgaGRhcyA9M0QgW10K ICAgICAgICAgICAgIGZvciBlbmNvZGVkX2hkYV9pZCBpbiBoZGFfaWRzOgotICAgICAgICAgICAg ICAgIGhkYV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBlbmNvZGVkX2hkYV9pZCAp CisgICAgICAgICAgICAgICAgaGRhX2lkID0zRCBzZWxmLmRlY29kZV9pZCggZW5jb2RlZF9oZGFf aWQgKQogICAgICAgICAgICAgICAgIGhkYSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9k ZWwuSGlzdG9yeURhdGFzZXRBc3NvY2k9CmF0aW9uICkuZmlsdGVyX2J5KCBpZD0zRGhkYV9pZCAp LmZpcnN0KCkKICAgICAgICAgICAgICAgICBpZiBoZGE6CiAgICAgICAgICAgICAgICAgICAgICMg RW5zdXJlIGhpc3RvcnkgaXMgb3duZWQgYnkgY3VycmVudCB1c2VyCkBAIC01MzAsMTggKzUyOCwx OCBAQAogICAgIEB3ZWIucmVxdWlyZV9sb2dpbiggInVzZSBHYWxheHkgZGF0YXNldHMiICkKICAg ICBkZWYgZ2V0X25hbWVfYW5kX2xpbmtfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5vbmUgKToK ICAgICAgICAgIiIiIFJldHVybnMgZGF0YXNldCdzIG5hbWUgYW5kIGxpbmsuICIiIgotICAgICAg ICBkZWNvZGVkX2lkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKLSAgICAgICAg ZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29k ZWRfaWQsIHRyPQphbnMudXNlciApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFz LmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCisgICAgICAgIGRlY29kZWRfaWQgPTNEIHNl bGYuZGVjb2RlX2lkKCBpZCApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIu YWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMudXNlciApCisgICAg ICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRh c2V0ICkKICAgICAgICAgcmV0dXJuX2RpY3QgPTNEIHsgIm5hbWUiIDogZGF0YXNldC5uYW1lLCAi bGluayIgOiB1cmxfZm9yKCBjb250cm9sPQpsZXI9M0QnZGF0YXNldCcsIGFjdGlvbj0zRCJkaXNw bGF5X2J5X3VzZXJuYW1lX2FuZF9zbHVnIiwgdXNlcm5hbWU9M0RkYXRhc2U9CnQuaGlzdG9yeS51 c2VyLnVzZXJuYW1lLCBzbHVnPTNEdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBkYXRhc2V0Lmlk ICkgKSB9CiAgICAgICAgIHJldHVybiByZXR1cm5fZGljdAo9MjAKICAgICBAd2ViLmV4cG9zZQog ICAgIGRlZiBnZXRfZW1iZWRfaHRtbF9hc3luYyggc2VsZiwgdHJhbnMsIGlkICk6CiAgICAgICAg ICIiIiBSZXR1cm5zIEhUTUwgZm9yIGVtYmVkZGluZyBhIGRhdGFzZXQgaW4gYSBwYWdlLiAiIiIK LSAgICAgICAgZGVjb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCi0g ICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5z LCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVzZXIgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1n cnMuaGRhcy5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQorICAgICAgICBkZWNvZGVkX2lk ID0zRCBzZWxmLmRlY29kZV9pZCggaWQgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9t YW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCA9CnRyYW5zLnVzZXIg KQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGlu ZyggZGF0YXNldCApCiAgICAgICAgIGlmIGRhdGFzZXQ6CiAgICAgICAgICAgICByZXR1cm4gIkVt YmVkZGVkIERhdGFzZXQgJyVzJyIgJSBkYXRhc2V0Lm5hbWUKPTIwCkBAIC01NTcsOSArNTU1LDkg QEAKICAgICBkZWYgcmF0ZV9hc3luYyggc2VsZiwgdHJhbnMsIGlkLCByYXRpbmcgKToKICAgICAg ICAgIiIiIFJhdGUgYSBkYXRhc2V0IGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm4gdXBkYXRlZCBj b21tdW5pdHkgZGF0PQphLiAiIiIKPTIwCi0gICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNl Y3VyaXR5LmRlY29kZV9pZCggaWQgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRh cy5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51c2VyICkKLSAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRh c2V0ICkKKyAgICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGlkICkKKyAgICAg ICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywg ZGVjb2RlZF9pZCwgPQp0cmFucy51c2VyICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFf bWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQogICAgICAgICBpZiBub3QgZGF0 YXNldDoKICAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vycm9yX21lc3NhZ2UoICJUaGUg c3BlY2lmaWVkIGRhdGFzZXQgZG9lcyBuPQpvdCBleGlzdC4iICkKPTIwCkBAIC01NzIsMTUgKzU3 MCwxNSBAQAogICAgIGRlZiBkaXNwbGF5X2J5X3VzZXJuYW1lX2FuZF9zbHVnKCBzZWxmLCB0cmFu cywgdXNlcm5hbWUsIHNsdWcsIGZpbGVuYW09CmU9M0ROb25lLCBwcmV2aWV3PTNEVHJ1ZSApOgog ICAgICAgICAiIiIgRGlzcGxheSBkYXRhc2V0IGJ5IHVzZXJuYW1lIGFuZCBzbHVnOyBiZWNhdXNl IGRhdGFzZXRzIGRvIG5vdCA9CnlldCBoYXZlIHNsdWdzLCB0aGUgc2x1ZyBpcyB0aGUgZGF0YXNl dCdzIGlkLiAiIiIKICAgICAgICAgaWQgPTNEIHNsdWcKLSAgICAgICAgZGVjb2RlZF9pZCA9M0Qg dHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYu bWdycy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVz ZXIgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91cGxvYWRp bmcoIGRhdGFzZXQgKQorICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggaWQg KQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQo IHRyYW5zLCBkZWNvZGVkX2lkLCA9CnRyYW5zLnVzZXIgKQorICAgICAgICBkYXRhc2V0ID0zRCBz ZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCiAgICAgICAgIGlm IGRhdGFzZXQ6CiAgICAgICAgICAgICAjIEZpbGVuYW1lIHVzZWQgZm9yIGNvbXBvc2l0ZSB0eXBl cy4KICAgICAgICAgICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxm LmRpc3BsYXkoIHRyYW5zLCBkYXRhc2V0X2lkPTNEc2x1ZywgZmlsZW5hbWU9M0Q9CmZpbGVuYW1l KQo9MjAKLSAgICAgICAgICAgIHRydW5jYXRlZCwgZGF0YXNldF9kYXRhID0zRCBzZWxmLm1ncnMu aGRhcy50ZXh0X2RhdGEoIGRhdGFzZXQsPQogcHJldmlldyApCisgICAgICAgICAgICB0cnVuY2F0 ZWQsIGRhdGFzZXRfZGF0YSA9M0Qgc2VsZi5oZGFfbWFuYWdlci50ZXh0X2RhdGEoIGRhdGFzZT0K dCwgcHJldmlldyApCiAgICAgICAgICAgICBkYXRhc2V0LmFubm90YXRpb24gPTNEIHNlbGYuZ2V0 X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHRyYW5zLnNhXz0Kc2Vzc2lvbiwgZGF0YXNldC5oaXN0b3J5 LnVzZXIsIGRhdGFzZXQgKQo9MjAKICAgICAgICAgICAgICMgSWYgZGF0YXNldCBpcyBjaHVua2Fi bGUsIGdldCBmaXJzdCBjaHVuay4KQEAgLTYxNSwxMiArNjEzLDEyIEBACiAgICAgZGVmIGdldF9p dGVtX2NvbnRlbnRfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZCApOgogICAgICAgICAiIiIgUmV0dXJu cyBpdGVtIGNvbnRlbnQgaW4gSFRNTCBmb3JtYXQuICIiIgo9MjAKLSAgICAgICAgZGVjb2RlZF9p ZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNE IHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0K YW5zLnVzZXIgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91 cGxvYWRpbmcoIGRhdGFzZXQgKQorICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9p ZCggaWQgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVf YnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCA9CnRyYW5zLnVzZXIgKQorICAgICAgICBkYXRhc2V0 ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCiAgICAg ICAgIGlmIGRhdGFzZXQgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIHdlYi5odHRwZXhjZXB0 aW9ucy5IVFRQTm90Rm91bmQoKQotICAgICAgICB0cnVuY2F0ZWQsIGRhdGFzZXRfZGF0YSA9M0Qg c2VsZi5tZ3JzLmhkYXMudGV4dF9kYXRhKCBkYXRhc2V0LCBwcmU9CnZpZXc9M0RUcnVlICkKKyAg ICAgICAgdHJ1bmNhdGVkLCBkYXRhc2V0X2RhdGEgPTNEIHNlbGYuaGRhX21hbmFnZXIudGV4dF9k YXRhKCBkYXRhc2V0LCBwPQpyZXZpZXc9M0RUcnVlICkKICAgICAgICAgIyBHZXQgYW5ub3RhdGlv bi4KICAgICAgICAgZGF0YXNldC5hbm5vdGF0aW9uID0zRCBzZWxmLmdldF9pdGVtX2Fubm90YXRp b25fc3RyKCB0cmFucy5zYV9zZXNzPQppb24sIHRyYW5zLnVzZXIsIGRhdGFzZXQgKQogICAgICAg ICByZXR1cm4gdHJhbnMuc3RyZWFtX3RlbXBsYXRlX21ha28oICIvZGF0YXNldC9pdGVtX2NvbnRl bnQubWFrbyIsIGk9CnRlbT0zRGRhdGFzZXQsIGl0ZW1fZGF0YT0zRGRhdGFzZXRfZGF0YSwgdHJ1 bmNhdGVkPTNEdHJ1bmNhdGVkICkKQEAgLTYyOCw5ICs2MjYsOSBAQAogICAgIEB3ZWIuZXhwb3Nl CiAgICAgZGVmIGFubm90YXRlX2FzeW5jKCBzZWxmLCB0cmFucywgaWQsIG5ld19hbm5vdGF0aW9u PTNETm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgI1RPRE86Pz8gd2h5IGlzIHRoaXMgYW4gYWNj ZXNzIGNoZWNrIG9ubHk/Ci0gICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRl Y29kZV9pZCggaWQgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3Np YmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51c2VyICkKLSAgICAgICAgZGF0 YXNldCA9M0Qgc2VsZi5tZ3JzLmhkYXMuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0ICkKKyAg ICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgZGF0YXNl dCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9p ZCwgPQp0cmFucy51c2VyICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5l cnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQogICAgICAgICBpZiBub3QgZGF0YXNldDoKICAg ICAgICAgICAgIHdlYi5odHRwZXhjZXB0aW9ucy5IVFRQTm90Rm91bmQoKQogICAgICAgICBpZiBk YXRhc2V0IGFuZCBuZXdfYW5ub3RhdGlvbjoKQEAgLTY0Miw5ICs2NDAsOSBAQAo9MjAKICAgICBA d2ViLmV4cG9zZQogICAgIGRlZiBnZXRfYW5ub3RhdGlvbl9hc3luYyggc2VsZiwgdHJhbnMsIGlk ICk6Ci0gICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggaWQg KQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3NpYmxlX2J5X2lkKCB0 cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51c2VyICkKLSAgICAgICAgZGF0YXNldCA9M0Qgc2Vs Zi5tZ3JzLmhkYXMuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0ICkKKyAgICAgICAgZGVjb2Rl ZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5o ZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZCwgPQp0cmFucy51 c2VyICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxv YWRpbmcoIGRhdGFzZXQgKQogICAgICAgICBpZiBub3QgZGF0YXNldDoKICAgICAgICAgICAgIHdl Yi5odHRwZXhjZXB0aW9ucy5IVFRQTm90Rm91bmQoKQogICAgICAgICBhbm5vdGF0aW9uID0zRCBz ZWxmLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCB0cmFucy5zYV9zZXNzaW9uLCB0cmE9Cm5zLnVz ZXIsIGRhdGFzZXQgKQpAQCAtNzkzLDcgKzc5MSw3IEBACiAgICAgICAgICAgICBoZGEubWFya19k ZWxldGVkKCkKICAgICAgICAgICAgIGhkYS5jbGVhcl9hc3NvY2lhdGVkX2ZpbGVzKCkKICAgICAg ICAgICAgIHRyYW5zLmxvZ19ldmVudCggIkRhdGFzZXQgaWQgJXMgbWFya2VkIGFzIGRlbGV0ZWQi ICUgc3RyKGlkKSApCi0gICAgICAgICAgICBzZWxmLm1ncnMuaGRhcy5zdG9wX2NyZWF0aW5nX2pv YiggaGRhICkKKyAgICAgICAgICAgIHNlbGYuaGRhX21hbmFnZXIuc3RvcF9jcmVhdGluZ19qb2Io IGhkYSApCiAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgIG1zZyA9M0QgJ0hEQSBkZWxldGlvbiBmYWls ZWQgKGVuY29kZWQ6ICVzLCBkZWNvZGVkOiAlcyknICUgKCBkPQphdGFzZXRfaWQsIGlkICkKQEAg LTk1OSw3ICs5NTcsNyBAQAogICAgICAgICBTaG93IHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIHRo ZSBqb2IgYXNzb2NpYXRlZCB3aXRoIGFuIEhEQQogICAgICAgICAiIiIKICAgICAgICAgdHJ5Ogot ICAgICAgICAgICAgaGRhID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9k ZWwuSGlzdG9yeURhdGFzZXQ9CkFzc29jaWF0aW9uICkuZ2V0KCB0cmFucy5zZWN1cml0eS5kZWNv ZGVfaWQoIGRhdGFzZXRfaWQgKSApCisgICAgICAgICAgICBoZGEgPTNEIHRyYW5zLnNhX3Nlc3Np b24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldD0KQXNzb2NpYXRpb24gKS5n ZXQoIHNlbGYuZGVjb2RlX2lkKCBkYXRhc2V0X2lkICkgKQogICAgICAgICBleGNlcHQgVmFsdWVF cnJvcjoKICAgICAgICAgICAgIGhkYSA9M0QgTm9uZQogICAgICAgICBpZiBub3QgaGRhOgpAQCAt MTAxNyw4ICsxMDE1LDggQEAKICAgICBkZWYgY29weV9kYXRhc2V0cyggc2VsZiwgdHJhbnMsIHNv dXJjZV9oaXN0b3J5PTNETm9uZSwgc291cmNlX2NvbnRlbnRfPQppZHM9M0QiIiwgdGFyZ2V0X2hp c3RvcnlfaWQ9M0ROb25lLCB0YXJnZXRfaGlzdG9yeV9pZHM9M0QiIiwgbmV3X2hpc3RvcnlfbmE9 Cm1lPTNEIiIsIGRvX2NvcHk9M0RGYWxzZSwgKiprd2QgKToKICAgICAgICAgdXNlciA9M0QgdHJh bnMuZ2V0X3VzZXIoKQogICAgICAgICBpZiBzb3VyY2VfaGlzdG9yeSBpcyBub3QgTm9uZToKLSAg ICAgICAgICAgIGRlY29kZWRfc291cmNlX2hpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRl Y29kZV9pZCggc291cmNlPQpfaGlzdG9yeSApCi0gICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxm Lm1ncnMuaGlzdG9yaWVzLm93bmVkX2J5X2lkKCB0cmFucywgZGVjb2RlZF9zbz0KdXJjZV9oaXN0 b3J5X2lkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIGRlY29kZWRfc291cmNlX2hpc3Rvcnlf aWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBzb3VyY2VfaGlzdG9yeSApCisgICAgICAgICAgICBoaXN0 b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIGRlY29kZWRf cz0Kb3VyY2VfaGlzdG9yeV9pZCwgdHJhbnMudXNlciApCiAgICAgICAgICAgICBjdXJyZW50X2hp c3RvcnkgPTNEIHRyYW5zLmdldF9oaXN0b3J5KCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAg IGhpc3RvcnkgPTNEIGN1cnJlbnRfaGlzdG9yeSA9M0QgdHJhbnMuZ2V0X2hpc3RvcnkoKQpAQCAt MTAzNCwxMSArMTAzMiwxMSBAQAogICAgICAgICAgICAgZGVjb2RlZF9kYXRhc2V0X2NvbGxlY3Rp b25faWRzID0zRCBbXQogICAgICAgICAgICAgZGVjb2RlZF9kYXRhc2V0X2lkcyA9M0QgW10KICAg ICAgICAgaWYgdGFyZ2V0X2hpc3RvcnlfaWQ6Ci0gICAgICAgICAgICB0YXJnZXRfaGlzdG9yeV9p ZHMgPTNEIFsgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKHRhcmdldF9oaXN0bz0KcnlfaWQpIF0K KyAgICAgICAgICAgIHRhcmdldF9oaXN0b3J5X2lkcyA9M0QgWyBzZWxmLmRlY29kZV9pZCh0YXJn ZXRfaGlzdG9yeV9pZCkgXQogICAgICAgICBlbGlmIHRhcmdldF9oaXN0b3J5X2lkczoKICAgICAg ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKCB0YXJnZXRfaGlzdG9yeV9pZHMsIGxpc3QgKToKICAg ICAgICAgICAgICAgICB0YXJnZXRfaGlzdG9yeV9pZHMgPTNEIHRhcmdldF9oaXN0b3J5X2lkcy5z cGxpdCgiLCIpCi0gICAgICAgICAgICB0YXJnZXRfaGlzdG9yeV9pZHMgPTNEIGxpc3Qoc2V0KFsg dHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKGgpID0KZm9yIGggaW4gdGFyZ2V0X2hpc3RvcnlfaWRz IGlmIGggXSkpCisgICAgICAgICAgICB0YXJnZXRfaGlzdG9yeV9pZHMgPTNEIGxpc3Qoc2V0KFsg c2VsZi5kZWNvZGVfaWQoaCkgZm9yIGggaW4gdD0KYXJnZXRfaGlzdG9yeV9pZHMgaWYgaCBdKSkK ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRhcmdldF9oaXN0b3J5X2lkcyA9M0QgW10KICAg ICAgICAgZG9uZV9tc2cgPTNEIGVycm9yX21zZyA9M0QgIiIKQEAgLTExMTksOSArMTExNyw5IEBA CiAgICAgICAgICAgICAgICAgaWYgdXNlciAhPTNEIGhpc3RvcnkudXNlcjoKICAgICAgICAgICAg ICAgICAgICAgZXJyb3JfbXNnID0zRCBlcnJvcl9tc2cgKyAiWW91IGRvIG5vdCBoYXZlIHBlcm1p c3Npb24gPQp0byBhZGQgZGF0YXNldHMgdG8gJWkgcmVxdWVzdGVkIGhpc3Rvcmllcy4gICIgJSAo IGxlbiggdGFyZ2V0X2hpc3RvcmllcyApICkKICAgICAgICAgICAgIGZvciBkYXRhc2V0X2lkIGlu IGRhdGFzZXRfaWRzOgotICAgICAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3Vy aXR5LmRlY29kZV9pZCggZGF0YXNldF9pZCApCi0gICAgICAgICAgICAgICAgZGF0YSA9M0Qgc2Vs Zi5tZ3JzLmhkYXMuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaT0KZCwgdHJhbnMu dXNlciApCi0gICAgICAgICAgICAgICAgZGF0YSA9M0Qgc2VsZi5tZ3JzLmhkYXMuZXJyb3JfaWZf dXBsb2FkaW5nKCBkYXRhICkKKyAgICAgICAgICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRl Y29kZV9pZCggZGF0YXNldF9pZCApCisgICAgICAgICAgICAgICAgZGF0YSA9M0Qgc2VsZi5oZGFf bWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZD0KX2lkLCB0cmFucy51c2Vy ICkKKyAgICAgICAgICAgICAgICBkYXRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3Vw bG9hZGluZyggZGF0YSApCj0yMAogICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKICAg ICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0zRCBlcnJvcl9tc2cgKyAiWW91IHRyaWVkIHRv IGNvcHkgYSBkYXRhc2V0PQogdGhhdCBkb2VzIG5vdCBleGlzdCBvciB0aGF0IHlvdSBkbyBub3Qg aGF2ZSBhY2Nlc3MgdG8uICAiCgpkaWZmIC1yIDg3ZjFlNmI5NmY5NGNhZTIwOTUxZmQ3Y2ExYWNj M2RmMjAwYzgyOTkgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDg9CmI4ZjljNTVjMjM4NDQ5NzUw IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvaGlzdG9yeS5weQotLS0gYS9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2hpc3RvcnkucHkKKysrIGIvbGli L2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9oaXN0b3J5LnB5CkBAIC0yMTQsMTUg KzIxNCwxNCBAQAo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBz dXBlciggSGlzdG9yeUNvbnRyb2xsZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKLSAgICAgICAg c2VsZi5tZ3JzID0zRCB1dGlsLmJ1bmNoLkJ1bmNoKAotICAgICAgICAgICAgaGlzdG9yaWVzPTNE bWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKQotICAgICAgICApCisgICAg ICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyID0zRCBtYW5hZ2Vycy5oaXN0b3JpZXMuSGlzdG9yeU1h bmFnZXIoIGFwcCApCiAgICAgICAgIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyID0zRCBtYW5hZ2Vy cy5oaXN0b3JpZXMuSGlzdG9yeVNlcmlhbGl6ZXIoID0Kc2VsZi5hcHAgKQo9MjAKICAgICBkZWYg X2dldF9oaXN0b3J5KCBzZWxmLCB0cmFucywgaWQsIGNoZWNrX293bmVyc2hpcD0zRFRydWUsIGNo ZWNrX2FjY2VzPQpzaWJsZT0zREZhbHNlLCBkZWxldGVkPTNETm9uZSApOgogICAgICAgICAiIiIK ICAgICAgICAgR2V0IGEgSGlzdG9yeSBmcm9tIHRoZSBkYXRhYmFzZSBieSBpZCwgdmVyaWZ5aW5n IG93bmVyc2hpcC4KICAgICAgICAgIiIiCisgICAgICAgICNUT0RPOiBtb3ZlZCBmcm9tIHRoZSBt aXhpbiAtIHRvIG1hbmFnZXIKICAgICAgICAgaWYgdHJhbnMudXNlciBpcyBOb25lIGFuZCB0cmFu cy5oaXN0b3J5OgogICAgICAgICAgICAgaWYgaWQgPTNEPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29k ZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApOgogICAgICAgICAgICAgICAgIHJldHVybiB0cmFucy5o aXN0b3J5CkBAIC00OTUsNyArNDk0LDcgQEAKICAgICAgICAgaWYgaWQgaXMgTm9uZToKICAgICAg ICAgICAgIGlkID0zRCB0cmFucy5oaXN0b3J5LmlkCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg ICBpZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCisgICAgICAgICAgICBpZCA9 M0Qgc2VsZi5kZWNvZGVfaWQoIGlkICkKICAgICAgICAgIyBFeHB1bmdlIGhpc3RvcnkgZnJvbSB0 aGUgc2Vzc2lvbiB0byBhbGxvdyB1cyB0byBmb3JjZSBhIHJlbG9hZAogICAgICAgICAjIHdpdGgg YSBidW5jaCBvZiBlYWdlciBsb2FkZWQgam9pbnMKICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5l eHB1bmdlKCB0cmFucy5oaXN0b3J5ICkKQEAgLTU2MywxNyArNTYyLDE2IEBACiAgICAgZGVmIHN0 cnVjdHVyZSggc2VsZiwgdHJhbnMsIGlkPTNETm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIi CiAgICAgICAgICIiIgotICAgICAgICBpZiBub3QgaWQ6Ci0gICAgICAgICAgICBpZCA9M0QgdHJh bnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKKyAgICAgICAgaWQgPTNE IHNlbGYuZGVjb2RlX2lkKCBpZCApIGlmIGlkIGVsc2UgdHJhbnMuaGlzdG9yeS5pZAorICAgICAg ICBoaXN0b3J5X3RvX3ZpZXcgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlf aWQoIHRyYW5zLCA9CmlkLCB0cmFucy51c2VyICkKPTIwCi0gICAgICAgIGhpc3RvcnlfdG9fdmll dyA9M0Qgc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPQo9M0RG YWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQotICAgICAgICBoaXN0b3J5X2RhdGEgPTNE IHNlbGYubWdycy5oaXN0b3JpZXMuX2dldF9oaXN0b3J5X2RhdGEoIHRyYW5zLCBoaXM9CnRvcnlf dG9fdmlldyApCisgICAgICAgIGhpc3RvcnlfZGF0YSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIu X2dldF9oaXN0b3J5X2RhdGEoIHRyYW5zLCBoaT0Kc3RvcnlfdG9fdmlldyApCiAgICAgICAgIGhp c3RvcnlfZGljdGlvbmFyeSA9M0QgaGlzdG9yeV9kYXRhWyAnaGlzdG9yeScgXQogICAgICAgICBo ZGFfZGljdGlvbmFyaWVzICAgPTNEIGhpc3RvcnlfZGF0YVsgJ2NvbnRlbnRzJyBdCj0yMAogICAg ICAgICBqb2JzID0zRCAoIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5K b2IgKQogICAgICAgICAgICAgLmZpbHRlciggdHJhbnMuYXBwLm1vZGVsLkpvYi51c2VyID0zRD0z RCB0cmFucy51c2VyICkKLSAgICAgICAgICAgIC5maWx0ZXIoIHRyYW5zLmFwcC5tb2RlbC5Kb2Iu aGlzdG9yeV9pZCA9M0Q9M0QgdHJhbnMuc2VjdXJpdHkuPQpkZWNvZGVfaWQoIGlkICkgKSApLmFs bCgpCisgICAgICAgICAgICAuZmlsdGVyKCB0cmFucy5hcHAubW9kZWwuSm9iLmhpc3RvcnlfaWQg PTNEPTNEIHNlbGYuZGVjb2RlX2lkKD0KIGlkICkgKSApLmFsbCgpCiAgICAgICAgIGpvYnMgPTNE IG1hcCggbGFtYmRhIGo6IHNlbGYuZW5jb2RlX2FsbF9pZHMoIHRyYW5zLCBqLnRvX2RpY3QoICdl bD0KZW1lbnQnICksIFRydWUgKSwgam9icyApCj0yMAogICAgICAgICB0b29scyA9M0Qge30KQEAg LTYwNSwyMiArNjAzLDExIEBACiAgICAgICAgIGhkYV9kaWN0aW9uYXJpZXMgICA9M0QgW10KICAg ICAgICAgdXNlcl9pc19vd25lciA9M0QgRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAg aGlzdG9yeV90b192aWV3ID0zRCBzZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBjaGVja19v d25lcnM9CmhpcD0zREZhbHNlLCBjaGVja19hY2Nlc3NpYmxlPTNERmFsc2UgKQotICAgICAgICAg ICAgaWYgbm90IGhpc3RvcnlfdG9fdmlldzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnMu c2hvd19lcnJvcl9tZXNzYWdlKCAiVGhlIHNwZWNpZmllZCBoaXN0b3J5IGRvPQplcyBub3QgZXhp c3QuIiApCi0gICAgICAgICAgICBpZiBoaXN0b3J5X3RvX3ZpZXcudXNlciA9M0Q9M0QgdHJhbnMu dXNlcjoKLSAgICAgICAgICAgICAgICB1c2VyX2lzX293bmVyID0zRCBUcnVlCi0KLSAgICAgICAg ICAgIGlmKCAoIGhpc3RvcnlfdG9fdmlldy51c2VyICE9M0QgdHJhbnMudXNlciApCi0gICAgICAg ICAgICAjIEFkbWluIHVzZXJzIGNhbiB2aWV3IGFueSBoaXN0b3J5Ci0gICAgICAgICAgICBhbmQg KCBub3QgdHJhbnMudXNlcl9pc19hZG1pbigpICkKLSAgICAgICAgICAgIGFuZCAoIG5vdCBoaXN0 b3J5X3RvX3ZpZXcuaW1wb3J0YWJsZSApCi0gICAgICAgICAgICBhbmQgKCB0cmFucy51c2VyIG5v dCBpbiBoaXN0b3J5X3RvX3ZpZXcudXNlcnNfc2hhcmVkX3dpdGhfZG90Xz0KdXNlcnMgKSApOgot ICAgICAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vycm9yX21lc3NhZ2UoICJFaXRoZXIg eW91IGFyZSBub3QgYWxsb3c9CmVkIHRvIHZpZXcgdGhpcyBoaXN0b3J5IgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgb3IgdGhlIG93bmVyIG9mIHRo aXMgaGk9CnN0b3J5IGhhcyBub3QgbWFkZSBpdCBhY2Nlc3NpYmxlLiIgKQorICAgICAgICAgICAg aGlzdG9yeV90b192aWV3ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lk KCB0cmE9Cm5zLCBpZCwgdHJhbnMudXNlciApCisgICAgICAgICAgICB1c2VyX2lzX293bmVyID0z RCBoaXN0b3J5X3RvX3ZpZXcudXNlciA9M0Q9M0QgdHJhbnMudXNlcgo9MjAKICAgICAgICAgICAg ICMgaW5jbHVkZSBhbGwgZGF0YXNldHM6IGhpZGRlbiwgZGVsZXRlZCwgYW5kIHB1cmdlZAotICAg ICAgICAgICAgaGlzdG9yeV9kYXRhID0zRCBzZWxmLm1ncnMuaGlzdG9yaWVzLl9nZXRfaGlzdG9y eV9kYXRhKCB0cmFucyw9CiBoaXN0b3J5X3RvX3ZpZXcgKQorICAgICAgICAgICAgaGlzdG9yeV9k YXRhID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5fZ2V0X2hpc3RvcnlfZGF0YSggdHJhbnM9Ciwg aGlzdG9yeV90b192aWV3ICkKICAgICAgICAgICAgIGhpc3RvcnlfZGljdGlvbmFyeSA9M0QgaGlz dG9yeV9kYXRhWyAnaGlzdG9yeScgXQogICAgICAgICAgICAgaGRhX2RpY3Rpb25hcmllcyAgID0z RCBoaXN0b3J5X2RhdGFbICdjb250ZW50cycgXQo9MjAKQEAgLTY1OCw3ICs2NDUsNyBAQAogICAg ICAgICBjdXJyZW50X2hpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggY3Vy cmVudF9oaXN0b3J5Lmk9CmQgKSBpZiBjdXJyZW50X2hpc3RvcnkgZWxzZSBOb25lCj0yMAogICAg ICAgICBoaXN0b3J5X2RpY3Rpb25hcmllcyA9M0QgW10KLSAgICAgICAgZm9yIGhpc3RvcnkgaW4g c2VsZi5tZ3JzLmhpc3Rvcmllcy5ieV91c2VyKCB0cmFucywgdHJhbnMudXNlciwgZmlsPQp0ZXJz PTNEZGVsZXRlZF9maWx0ZXIgKToKKyAgICAgICAgZm9yIGhpc3RvcnkgaW4gc2VsZi5oaXN0b3J5 X21hbmFnZXIuYnlfdXNlciggdHJhbnMsIHRyYW5zLnVzZXIsIGZpPQpsdGVycz0zRGRlbGV0ZWRf ZmlsdGVyICk6CiAgICAgICAgICAgICBoaXN0b3J5X2RpY3Rpb25hcnkgPTNEIHNlbGYuaGlzdG9y eV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aT0KZXcoIHRyYW5zLCBoaXN0b3J5LCB2aWV3PTNE J2RldGFpbGVkJyApCiAgICAgICAgICAgICBoaXN0b3J5X2RpY3Rpb25hcmllcy5hcHBlbmQoIGhp c3RvcnlfZGljdGlvbmFyeSApCj0yMApAQCAtNjkyLDcgKzY3OSw3IEBACj0yMAogICAgICAgICAj IGNyZWF0ZSBvd25lcnNoaXAgZmxhZyBmb3IgdGVtcGxhdGUsIGRpY3RpZnkgbW9kZWxzCiAgICAg ICAgIHVzZXJfaXNfb3duZXIgPTNEIHRyYW5zLnVzZXIgPTNEPTNEIGhpc3RvcnkudXNlcgotICAg ICAgICBoaXN0b3J5X2RhdGEgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMuX2dldF9oaXN0b3J5X2Rh dGEoIHRyYW5zLCBoaXM9CnRvcnkgKQorICAgICAgICBoaXN0b3J5X2RhdGEgPTNEIHNlbGYuaGlz dG9yeV9tYW5hZ2VyLl9nZXRfaGlzdG9yeV9kYXRhKCB0cmFucywgaGk9CnN0b3J5ICkKICAgICAg ICAgaGlzdG9yeV9kaWN0ID0zRCBoaXN0b3J5X2RhdGFbICdoaXN0b3J5JyBdCiAgICAgICAgIGhk YV9kaWN0cyA9M0QgaGlzdG9yeV9kYXRhWyAnY29udGVudHMnIF0KPTIwCkBAIC03NDIsNyArNzI5 LDcgQEAKICAgICAgICAgICAgIGVsaWYgJ2Rpc2FibGVfbGlua19hY2Nlc3NfYW5kX3VucHVibGlz aCcgaW4ga3dhcmdzOgogICAgICAgICAgICAgICAgIGhpc3RvcnkuaW1wb3J0YWJsZSA9M0QgaGlz dG9yeS5wdWJsaXNoZWQgPTNEIEZhbHNlCiAgICAgICAgICAgICBlbGlmICd1bnNoYXJlX3VzZXIn IGluIGt3YXJnczoKLSAgICAgICAgICAgICAgICB1c2VyID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1 ZXJ5KCB0cmFucy5hcHAubW9kZWwuVXNlciApLmdlPQp0KCB0cmFucy5zZWN1cml0eS5kZWNvZGVf aWQoIGt3YXJnc1sgJ3Vuc2hhcmVfdXNlcicgXSApICkKKyAgICAgICAgICAgICAgICB1c2VyID0z RCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuVXNlciApLmdlPQp0KCBz ZWxmLmRlY29kZV9pZCgga3dhcmdzWyAndW5zaGFyZV91c2VyJyBdICkgKQogICAgICAgICAgICAg ICAgICMgTG9vayBmb3IgYW5kIGRlbGV0ZSBzaGFyaW5nIHJlbGF0aW9uIGZvciBoaXN0b3J5LXVz ZXIuCiAgICAgICAgICAgICAgICAgZGVsZXRlZF9zaGFyaW5nX3JlbGF0aW9uID0zRCBGYWxzZQog ICAgICAgICAgICAgICAgIGh1c2FzID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cmFucy5h cHAubW9kZWwuSGlzdG9yeVU9CnNlclNoYXJlQXNzb2NpYXRpb24gKS5maWx0ZXJfYnkoIHVzZXI9 M0R1c2VyLCBoaXN0b3J5PTNEaGlzdG9yeSApLmFsbCgpCkBAIC0xMTMwLDcgKzExMTcsNyBAQAog ICAgICAgICAgICAgICAgICAgICB0cmFucy5hcHAuam9iX21hbmFnZXIuam9iX3N0b3BfcXVldWUu cHV0KCBqb2IuaWQgKQo9MjAKICAgICAgICAgIyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgd2Fz IHByZXZpb3VzbHkgZGVsZXRlZCwgZ2V0IHRoZSBtb3N0IHJlPQpjZW50IGhpc3Rvcnkgb3IgY3Jl YXRlIGEgbmV3IG9uZS4KLSAgICAgICAgbW9zdF9yZWNlbnRfaGlzdG9yeSA9M0Qgc2VsZi5tZ3Jz Lmhpc3Rvcmllcy5tb3N0X3JlY2VudCggdHJhbnMsIHVzPQplcj0zRHRyYW5zLnVzZXIgKQorICAg ICAgICBtb3N0X3JlY2VudF9oaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5tb3N0X3Jl Y2VudCggdHJhbnMsIHU9CnNlcj0zRHRyYW5zLnVzZXIgKQogICAgICAgICBpZiBtb3N0X3JlY2Vu dF9oaXN0b3J5OgogICAgICAgICAgICAgdHJhbnMuc2V0X2hpc3RvcnkoIG1vc3RfcmVjZW50X2hp c3RvcnkgKQogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfb2tfbWVzc2FnZSggIkhpc3Rv cnkgZGVsZXRlZCwgeW91ciBtb3N0IHJlY2U9Cm50IGhpc3RvcnkgaXMgbm93IGFjdGl2ZSIsCkBA IC0xNDgzLDcgKzE0NzAsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIiIiCiAgICAgICAgIHRy eToKLSAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMub3duZWRfYnlf aWQoIHRyYW5zLCB0cmFucy5zZWN1PQpyaXR5LmRlY29kZV9pZCggaWQgKSwgdHJhbnMudXNlciAp CisgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5vd25lZF9ieV9p ZCggdHJhbnMsIHNlbGYuZGVjbz0KZGVfaWQoIGlkICksIHRyYW5zLnVzZXIgKQogICAgICAgICAg ICAgdHJhbnMuc2V0X2hpc3RvcnkoIGhpc3RvcnkgKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYu aGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGlzdG89CnJ5LCB2 aWV3PTNEJ2RldGFpbGVkJyApCiAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLk1lc3NhZ2VFeGNl cHRpb24sIG1zZ19leGM6CgpkaWZmIC1yIDg3ZjFlNmI5NmY5NGNhZTIwOTUxZmQ3Y2ExYWNjM2Rm MjAwYzgyOTkgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDg9CmI4ZjljNTVjMjM4NDQ5NzUwIGxp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcGFnZS5weQotLS0gYS9saWIvZ2Fs YXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3BhZ2UucHkKKysrIGIvbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9wYWdlLnB5CkBAIC0yODksMTAgKzI4OSw4IEBACj0y MAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVyKCBQYWdlQ29u dHJvbGxlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxmLm1ncnMgPTNEIHV0 aWwuYnVuY2guQnVuY2goCi0gICAgICAgICAgICBoaXN0b3JpZXM9M0RtYW5hZ2Vycy5oaXN0b3Jp ZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApLAotICAgICAgICAgICAgaGRhcz0zRG1hbmFnZXJzLmhk YXMuSERBTWFuYWdlciggYXBwICksCi0gICAgICAgICkKKyAgICAgICAgc2VsZi5oaXN0b3J5X21h bmFnZXIgPTNEIG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdlciggYXBwICkKKyAgICAg ICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgbWFuYWdlcnMuaGRhcy5IREFNYW5hZ2VyKCBhcHAgKQo9 MjAKICAgICBAd2ViLmV4cG9zZQogICAgIEB3ZWIucmVxdWlyZV9sb2dpbigpCkBAIC0zMDQsNyAr MzAyLDcgQEAKICAgICAgICAgICAgIG9wZXJhdGlvbiA9M0Qga3dhcmdzWydvcGVyYXRpb24nXS5s b3dlcigpCiAgICAgICAgICAgICBpZHMgPTNEIHV0aWwubGlzdGlmeSgga3dhcmdzWydpZCddICkK ICAgICAgICAgICAgIGZvciBpZCBpbiBpZHM6Ci0gICAgICAgICAgICAgICAgaXRlbSA9M0Qgc2Vz c2lvbi5xdWVyeSggbW9kZWwuUGFnZSApLmdldCggdHJhbnMuc2VjdXJpdHkuZD0KZWNvZGVfaWQo IGlkICkgKQorICAgICAgICAgICAgICAgIGl0ZW0gPTNEIHNlc3Npb24ucXVlcnkoIG1vZGVsLlBh Z2UgKS5nZXQoIHNlbGYuZGVjb2RlX2lkKCA9CmlkICkgKQogICAgICAgICAgICAgICAgIGlmIG9w ZXJhdGlvbiA9M0Q9M0QgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVsZXRl ZCA9M0QgVHJ1ZQogICAgICAgICAgICAgICAgIGlmIG9wZXJhdGlvbiA9M0Q9M0QgInNoYXJlIG9y IHB1Ymxpc2giOgpAQCAtMzk3LDcgKzM5NSw3IEBACiAgICAgICAgIEVkaXQgYSBwYWdlJ3MgYXR0 cmlidXRlcy4KICAgICAgICAgIiIiCiAgICAgICAgIGVuY29kZWRfaWQgPTNEIGlkCi0gICAgICAg IGlkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgaWQgPTNEIHNl bGYuZGVjb2RlX2lkKCBpZCApCiAgICAgICAgIHNlc3Npb24gPTNEIHRyYW5zLnNhX3Nlc3Npb24K ICAgICAgICAgcGFnZSA9M0Qgc2Vzc2lvbi5xdWVyeSggbW9kZWwuUGFnZSApLmdldCggaWQgKQog ICAgICAgICB1c2VyID0zRCB0cmFucy51c2VyCkBAIC00NDcsNyArNDQ1LDcgQEAKICAgICAgICAg IiIiCiAgICAgICAgIFJlbmRlciB0aGUgbWFpbiBwYWdlIGVkaXRvciBpbnRlcmZhY2UuCiAgICAg ICAgICIiIgotICAgICAgICBpZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBpZCApCisg ICAgICAgIGlkID0zRCBzZWxmLmRlY29kZV9pZCggaWQgKQogICAgICAgICBwYWdlID0zRCB0cmFu cy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5QYWdlICkuZ2V0KCBpZCApCiAgICAgICAgIGFzc2Vy dCBwYWdlLnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIKICAgICAgICAgcmV0dXJuIHRyYW5zLmZpbGxf dGVtcGxhdGUoICJwYWdlL2VkaXRvci5tYWtvIiwgcGFnZT0zRHBhZ2UgKQpAQCAtNDU5LDcgKzQ1 Nyw3IEBACj0yMAogICAgICAgICAjIEdldCBzZXNzaW9uIGFuZCBwYWdlLgogICAgICAgICBzZXNz aW9uID0zRCB0cmFucy5zYV9zZXNzaW9uCi0gICAgICAgIHBhZ2UgPTNEIHRyYW5zLnNhX3Nlc3Np b24ucXVlcnkoIG1vZGVsLlBhZ2UgKS5nZXQoIHRyYW5zLnNlY3VyaXR5Lj0KZGVjb2RlX2lkKCBp ZCApICkKKyAgICAgICAgcGFnZSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuUGFn ZSApLmdldCggc2VsZi5kZWNvZGVfaWQoPQogaWQgKSApCj0yMAogICAgICAgICAjIERvIG9wZXJh dGlvbiBvbiBwYWdlLgogICAgICAgICBpZiAnbWFrZV9hY2Nlc3NpYmxlX3ZpYV9saW5rJyBpbiBr d2FyZ3M6CkBAIC00NzYsNyArNDc0LDcgQEAKICAgICAgICAgZWxpZiAnZGlzYWJsZV9saW5rX2Fj Y2Vzc19hbmRfdW5wdWJsaXNoJyBpbiBrd2FyZ3M6CiAgICAgICAgICAgICBwYWdlLmltcG9ydGFi bGUgPTNEIHBhZ2UucHVibGlzaGVkID0zRCBGYWxzZQogICAgICAgICBlbGlmICd1bnNoYXJlX3Vz ZXInIGluIGt3YXJnczoKLSAgICAgICAgICAgIHVzZXIgPTNEIHNlc3Npb24ucXVlcnkoIG1vZGVs LlVzZXIgKS5nZXQoIHRyYW5zLnNlY3VyaXR5LmRlY29kPQplX2lkKCBrd2FyZ3NbJ3Vuc2hhcmVf dXNlcicgXSApICkKKyAgICAgICAgICAgIHVzZXIgPTNEIHNlc3Npb24ucXVlcnkoIG1vZGVsLlVz ZXIgKS5nZXQoIHNlbGYuZGVjb2RlX2lkKCBrd2FyPQpnc1sndW5zaGFyZV91c2VyJyBdICkgKQog ICAgICAgICAgICAgaWYgbm90IHVzZXI6CiAgICAgICAgICAgICAgICAgZXJyb3IoICJVc2VyIG5v dCBmb3VuZCBmb3IgcHJvdmlkZWQgaWQiICkKICAgICAgICAgICAgIGFzc29jaWF0aW9uID0zRCBz ZXNzaW9uLnF1ZXJ5KCBtb2RlbC5QYWdlVXNlclNoYXJlQXNzb2NpYXRpb24gPQopIFwKQEAgLTQ5 Myw3ICs0OTEsNyBAQAogICAgIGRlZiBzaGFyZSggc2VsZiwgdHJhbnMsIGlkLCBlbWFpbD0zRCIi LCB1c2VfcGFuZWxzPTNERmFsc2UgKToKICAgICAgICAgIiIiIEhhbmRsZSBzaGFyaW5nIHdpdGgg YW4gaW5kaXZpZHVhbCB1c2VyLiAiIiIKICAgICAgICAgbXNnID0zRCBtdHlwZSA9M0QgTm9uZQot ICAgICAgICBwYWdlID0zRCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5QYWdlICkuZ2V0 KCB0cmFucy5zZWN1cml0eS49CmRlY29kZV9pZCggaWQgKSApCisgICAgICAgIHBhZ2UgPTNEIHRy YW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLlBhZ2UgKS5nZXQoIHNlbGYuZGVjb2RlX2lkKD0K IGlkICkgKQogICAgICAgICBpZiBlbWFpbDoKICAgICAgICAgICAgIG90aGVyID0zRCB0cmFucy5z YV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5Vc2VyICkgXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmZpbHRlciggYW5kXyggbW9kZWwuVXNlci50YWJsZS5jLmVtYWk9Cmw9M0Q9 M0RlbWFpbCwKQEAgLTUzMSw3ICs1MjksNyBAQAogICAgIEB3ZWIuZXhwb3NlCiAgICAgQHdlYi5y ZXF1aXJlX2xvZ2luKCkKICAgICBkZWYgc2F2ZSggc2VsZiwgdHJhbnMsIGlkLCBjb250ZW50LCBh bm5vdGF0aW9ucyApOgotICAgICAgICBpZCA9M0QgdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2lkKCBp ZCApCisgICAgICAgIGlkID0zRCBzZWxmLmRlY29kZV9pZCggaWQgKQogICAgICAgICBwYWdlID0z RCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5QYWdlICkuZ2V0KCBpZCApCiAgICAgICAg IGFzc2VydCBwYWdlLnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIKPTIwCkBAIC01NDgsNyArNTQ2LDcg QEAKICAgICAgICAgIyBTYXZlIGFubm90YXRpb25zLgogICAgICAgICBhbm5vdGF0aW9ucyA9M0Qg bG9hZHMoIGFubm90YXRpb25zICkKICAgICAgICAgZm9yIGFubm90YXRpb25fZGljdCBpbiBhbm5v dGF0aW9uczoKLSAgICAgICAgICAgIGl0ZW1faWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9p ZCggYW5ub3RhdGlvbl9kaWN0WyAnaXRlbV9pPQpkJyBdICkKKyAgICAgICAgICAgIGl0ZW1faWQg PTNEIHNlbGYuZGVjb2RlX2lkKCBhbm5vdGF0aW9uX2RpY3RbICdpdGVtX2lkJyBdICkKICAgICAg ICAgICAgIGl0ZW1fY2xhc3MgPTNEIHNlbGYuZ2V0X2NsYXNzKCBhbm5vdGF0aW9uX2RpY3RbICdp dGVtX2NsYXNzJyBdPQogKQogICAgICAgICAgICAgaXRlbSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5x dWVyeSggaXRlbV9jbGFzcyApLmZpbHRlcl9ieSggaWQ9M0Q9Cml0ZW1faWQgKS5maXJzdCgpCiAg ICAgICAgICAgICBpZiBub3QgaXRlbToKQEAgLTU4MSw3ICs1NzksNyBAQAogICAgIEB3ZWIuZXhw b3NlCiAgICAgQHdlYi5yZXF1aXJlX2xvZ2luKCkKICAgICBkZWYgZGlzcGxheSggc2VsZiwgdHJh bnMsIGlkICk6Ci0gICAgICAgIGlkID0zRCB0cmFucy5zZWN1cml0eS5kZWNvZGVfaWQoIGlkICkK KyAgICAgICAgaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBpZCApCiAgICAgICAgIHBhZ2UgPTNEIHRy YW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLlBhZ2UgKS5nZXQoIGlkICkKICAgICAgICAgaWYg bm90IHBhZ2U6CiAgICAgICAgICAgICByYWlzZSB3ZWIuaHR0cGV4Y2VwdGlvbnMuSFRUUE5vdEZv dW5kKCkKQEAgLTcxNSw3ICs3MTMsNyBAQAogICAgIGRlZiBnZXRfcGFnZSggc2VsZiwgdHJhbnMs IGlkLCBjaGVja19vd25lcnNoaXA9M0RUcnVlLCBjaGVja19hY2Nlc3NpYmw9CmU9M0RGYWxzZSAp OgogICAgICAgICAiIiJHZXQgYSBwYWdlIGZyb20gdGhlIGRhdGFiYXNlIGJ5IGlkLiIiIgogICAg ICAgICAjIExvYWQgaGlzdG9yeSBmcm9tIGRhdGFiYXNlCi0gICAgICAgIGlkID0zRCB0cmFucy5z ZWN1cml0eS5kZWNvZGVfaWQoIGlkICkKKyAgICAgICAgaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBp ZCApCiAgICAgICAgIHBhZ2UgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLlBhZ2Ug KS5nZXQoIGlkICkKICAgICAgICAgaWYgbm90IHBhZ2U6CiAgICAgICAgICAgICBlcnJvciggIlBh Z2Ugbm90IGZvdW5kIiApCkBAIC03MzAsOCArNzI4LDggQEAKICAgICAgICAgUmV0dXJucyBodG1s IHN1aXRhYmxlIGZvciBlbWJlZGRpbmcgaW4gYW5vdGhlciBwYWdlLgogICAgICAgICAiIiIKICAg ICAgICAgI1RPRE86IHNob3VsZCBiZSBtb3ZlZCB0byBoaXN0b3J5IGNvbnRyb2xsZXIgYW5kL29y IGNhbGxlZCB2aWEgYWphPQp4IGZyb20gdGhlIHRlbXBsYXRlCi0gICAgICAgIGRlY29kZWRfaWQg PTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggaWQgKQotICAgICAgICBoaXN0b3J5ID0zRCBz ZWxmLm1ncnMuaGlzdG9yaWVzLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2k9CmQs IHRyYW5zLnVzZXIgKQorICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggaWQg KQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5 X2lkKCB0cmFucywgZGVjb2RlZF89CmlkLCB0cmFucy51c2VyICkKICAgICAgICAgaWYgbm90IGhp c3Rvcnk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQo9MjAKQEAgLTc0MSw3ICs3MzksNyBAQAog ICAgICAgICBoaXN0b3J5LmFubm90YXRpb24gPTNEIHNlbGYuZ2V0X2l0ZW1fYW5ub3RhdGlvbl9z dHIoIHRyYW5zLnNhX3Nlc3M9CmlvbiwgaGlzdG9yeS51c2VyLCBoaXN0b3J5ICkKPTIwCiAgICAg ICAgICMgaW5jbHVkZSBhbGwgZGF0YXNldHM6IGhpZGRlbiwgZGVsZXRlZCwgYW5kIHB1cmdlZAot ICAgICAgICBoaXN0b3J5X2RhdGEgPTNEIHNlbGYubWdycy5oaXN0b3JpZXMuX2dldF9oaXN0b3J5 X2RhdGEoIHRyYW5zLCBoaXM9CnRvcnkgKQorICAgICAgICBoaXN0b3J5X2RhdGEgPTNEIHNlbGYu aGlzdG9yeV9tYW5hZ2VyLl9nZXRfaGlzdG9yeV9kYXRhKCB0cmFucywgaGk9CnN0b3J5ICkKICAg ICAgICAgaGlzdG9yeV9kaWN0aW9uYXJ5ID0zRCBoaXN0b3J5X2RhdGFbICdoaXN0b3J5JyBdCiAg ICAgICAgIGhkYV9kaWN0aW9uYXJpZXMgICA9M0QgaGlzdG9yeV9kYXRhWyAnY29udGVudHMnIF0K ICAgICAgICAgaGlzdG9yeV9kaWN0aW9uYXJ5WyAnYW5ub3RhdGlvbicgXSA9M0QgaGlzdG9yeS5h bm5vdGF0aW9uCkBAIC03NzksMTMgKzc3NywxMyBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYu X2dldF9lbWJlZGRlZF9oaXN0b3J5X2h0bWwoIHRyYW5zLCBpdGVtX2lkICkKPTIwCiAgICAgICAg IGVsaWYgaXRlbV9jbGFzcyA9M0Q9M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbjoK LSAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggaXRl bV9pZCApCi0gICAgICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLm1ncnMuaGRhcy5hY2Nlc3NpYmxl X2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZD0KLCB0cmFucy51c2VyICkKLSAgICAgICAgICAgIGRh dGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNldCApCisg ICAgICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggaXRlbV9pZCApCisgICAg ICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRy YW5zLCBkZWNvZGVkXz0KaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgZGF0YXNldCA9M0Qg c2VsZi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQo9MjAKICAgICAg ICAgICAgIGRhdGFzZXQuYW5ub3RhdGlvbiA9M0Qgc2VsZi5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0 ciggdHJhbnMuc2FfPQpzZXNzaW9uLCBkYXRhc2V0Lmhpc3RvcnkudXNlciwgZGF0YXNldCApCiAg ICAgICAgICAgICBpZiBkYXRhc2V0OgotICAgICAgICAgICAgICAgIGRhdGEgPTNEIHNlbGYubWdy cy5oZGFzLnRleHRfZGF0YSggZGF0YXNldCApCisgICAgICAgICAgICAgICAgZGF0YSA9M0Qgc2Vs Zi5oZGFfbWFuYWdlci50ZXh0X2RhdGEoIGRhdGFzZXQgKQogICAgICAgICAgICAgICAgIHJldHVy biB0cmFucy5maWxsX3RlbXBsYXRlKCAiZGF0YXNldC9lbWJlZC5tYWtvIiwgaXRlbT0zRGQ9CmF0 YXNldCwgaXRlbV9kYXRhPTNEZGF0YSApCj0yMAogICAgICAgICBlbGlmIGl0ZW1fY2xhc3MgPTNE PTNEIG1vZGVsLlN0b3JlZFdvcmtmbG93OgoKZGlmZiAtciA4N2YxZTZiOTZmOTRjYWUyMDk1MWZk N2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4PQpiOGY5YzU1YzIz ODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3Jvb3QucHkKLS0t IGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9yb290LnB5CisrKyBiL2xp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcm9vdC5weQpAQCAtMjYsOSArMjYs NyBAQAogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1 cGVyKCBSb290Q29udHJvbGxlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxm Lm1ncnMgPTNEIHV0aWwuYnVuY2guQnVuY2goCi0gICAgICAgICAgICBoaXN0b3JpZXM9M0RtYW5h Z2Vycy5oaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCi0gICAgICAgICkKKyAgICAgICAg c2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIG1hbmFnZXJzLmhpc3Rvcmllcy5IaXN0b3J5TWFuYWdl ciggYXBwICkKPTIwCiAgICAgQHdlYi5leHBvc2UKICAgICBkZWYgZGVmYXVsdChzZWxmLCB0cmFu cywgdGFyZ2V0MT0zRE5vbmUsIHRhcmdldDI9M0ROb25lLCAqKmt3ZCk6CkBAIC0xMjgsNyArMTI2 LDcgQEAKICAgICAgICAgaGlzdG9yeV9kaWN0aW9uYXJ5ID0zRCB7fQogICAgICAgICBoZGFfZGlj dGlvbmFyaWVzID0zRCBbXQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoaXN0b3J5X2RhdGEg PTNEIHNlbGYubWdycy5oaXN0b3JpZXMuX2dldF9oaXN0b3J5X2RhdGEoIHRyYW5zLD0KIHRyYW5z LmdldF9oaXN0b3J5KCBjcmVhdGU9M0RUcnVlICkgKQorICAgICAgICAgICAgaGlzdG9yeV9kYXRh ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5fZ2V0X2hpc3RvcnlfZGF0YSggdHJhbnM9CiwgdHJh bnMuZ2V0X2hpc3RvcnkoIGNyZWF0ZT0zRFRydWUgKSApCiAgICAgICAgICAgICBoaXN0b3J5X2Rp Y3Rpb25hcnkgPTNEIGhpc3RvcnlfZGF0YVsgJ2hpc3RvcnknIF0KICAgICAgICAgICAgIGhkYV9k aWN0aW9uYXJpZXMgICA9M0QgaGlzdG9yeV9kYXRhWyAnY29udGVudHMnIF0KPTIwCkBAIC0xNzAs NyArMTY4LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oICJObyBkYXRhc2V0 IHdpdGggaGlkICclZCciICUgaGlkICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGVu Y29kZWRfaWQgYW5kIG5vdCBpZDoKLSAgICAgICAgICAgICAgICBpZCA9M0QgdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCBlbmNvZGVkX2lkICkKKyAgICAgICAgICAgICAgICBpZCA9M0Qgc2VsZi5k ZWNvZGVfaWQoIGVuY29kZWRfaWQgKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAg IGRhdGEgPTNEIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHNlbGYuYXBwLm1vZGVsLkhpc3RvcnlE YXQ9CmFzZXRBc3NvY2lhdGlvbiApLmdldCggaWQgKQogICAgICAgICAgICAgZXhjZXB0OgoKZGlm ZiAtciA4N2YxZTZiOTZmOTRjYWUyMDk1MWZkN2NhMWFjYzNkZjIwMGM4Mjk5IC1yIDY5Yzc0YmM5 OTYyNWUzNjNiZWNhZDA4PQpiOGY5YzU1YzIzODQ0OTc1MCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2NvbnRyb2xsZXJzL3Zpc3VhbGl6YXRpb24ucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBz L2dhbGF4eS9jb250cm9sbGVycy92aXN1YWxpemF0aW9uLnB5CisrKyBiL2xpYi9nYWxheHkvd2Vi YXBwcy9nYWxheHkvY29udHJvbGxlcnMvdmlzdWFsaXphdGlvbi5weQpAQCAtMTI5LDcgKzEyOSw3 IEBACiBjbGFzcyBIaXN0b3J5Q29sdW1uKCBncmlkcy5HcmlkQ29sdW1uICk6CiAgICAgIiIiIENv bHVtbiBmb3IgZmlsdGVyaW5nIGJ5IGhpc3RvcnkgaWQuICIiIgogICAgIGRlZiBmaWx0ZXIoIHNl bGYsIHRyYW5zLCB1c2VyLCBxdWVyeSwgaGlzdG9yeV9pZCApOgotICAgICAgICByZXR1cm4gcXVl cnkuZmlsdGVyKCBtb2RlbC5IaXN0b3J5LmlkPTNEPTNEdHJhbnMuc2VjdXJpdHkuZGVjb2RlX2k9 CmQoaGlzdG9yeV9pZCkgKQorICAgICAgICByZXR1cm4gcXVlcnkuZmlsdGVyKCBtb2RlbC5IaXN0 b3J5LmlkPTNEPTNEc2VsZi5kZWNvZGVfaWQoaGlzdG9yeV89CmlkKSApCj0yMAogY2xhc3MgSGlz dG9yeURhdGFzZXRzU2VsZWN0aW9uR3JpZCggZ3JpZHMuR3JpZCApOgogICAgICMgR3JpZCBkZWZp bml0aW9uLgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIEN1cnJlbnQgaXRlbSBmb3IgZ3Jp ZCBpcyB0aGUgaGlzdG9yeSBiZWluZyBxdWVyaWVkLiBUaGlzIGlzIGEgYml0CiAgICAgICAgIG9m IGhhY2sgc2luY2UgY3VycmVudF9pdGVtIHR5cGljYWxseSBtZWFucyB0aGUgY3VycmVudCBpdGVt IGluIHRoZT0KIGdyaWQuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gdHJhbnMuc2Ffc2Vz c2lvbi5xdWVyeSggbW9kZWwuSGlzdG9yeSApLmdldCggdHJhbnMuc2VjdXJpdHk9Ci5kZWNvZGVf aWQoIGt3YXJnc1sgJ2YtaGlzdG9yeScgXSApICkKKyAgICAgICAgcmV0dXJuIHRyYW5zLnNhX3Nl c3Npb24ucXVlcnkoIG1vZGVsLkhpc3RvcnkgKS5nZXQoIHNlbGYuZGVjb2RlX2lkPQooIGt3YXJn c1sgJ2YtaGlzdG9yeScgXSApICkKICAgICBkZWYgYnVpbGRfaW5pdGlhbF9xdWVyeSggc2VsZiwg dHJhbnMsICoqa3dhcmdzICk6CiAgICAgICAgIHJldHVybiB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5 KCBzZWxmLm1vZGVsX2NsYXNzICkuam9pbiggbW9kZWwuSGlzdD0Kb3J5LnRhYmxlICkuam9pbigg bW9kZWwuRGF0YXNldC50YWJsZSApCiAgICAgZGVmIGFwcGx5X3F1ZXJ5X2ZpbHRlciggc2VsZiwg dHJhbnMsIHF1ZXJ5LCAqKmt3YXJncyApOgpAQCAtMjgzLDkgKzI4Myw3IEBACj0yMAogICAgIGRl ZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVyKCBWaXN1YWxpemF0aW9uQ29u dHJvbGxlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxmLm1ncnMgPTNEIHV0 aWwuYnVuY2guQnVuY2goCi0gICAgICAgICAgICBoZGFzPTNEbWFuYWdlcnMuaGRhcy5IREFNYW5h Z2VyKCBhcHAgKSwKLSAgICAgICAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBtYW5h Z2Vycy5oZGFzLkhEQU1hbmFnZXIoIGFwcCApCj0yMAogICAgICMKICAgICAjIC0tIEZ1bmN0aW9u cyBmb3IgbGlzdGluZyB2aXN1YWxpemF0aW9ucy4gLS0KQEAgLTMwNCw3ICszMDIsNyBAQAogICAg IGRlZiBsaXN0X2xpYnJhcnlfZGF0YXNldHMoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgogICAg ICAgICAiIiJMaXN0IGEgbGlicmFyeSdzIGRhdGFzZXRzIHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEg dmlzdWFsaXphdGlvbi49CiIiIgo9MjAKLSAgICAgICAgbGlicmFyeSA9M0QgdHJhbnMuc2Ffc2Vz c2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkxpYnJhcnkgKS5nZXQoPQogdHJhbnMuc2VjdXJp dHkuZGVjb2RlX2lkKCBrd2FyZ3MuZ2V0KCdmLWxpYnJhcnknKSApICkKKyAgICAgICAgbGlicmFy eSA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLkxpYnJhcnkgKS5n ZXQoPQogc2VsZi5kZWNvZGVfaWQoIGt3YXJncy5nZXQoJ2YtbGlicmFyeScpICkgKQogICAgICAg ICByZXR1cm4gdHJhbnMuZmlsbF90ZW1wbGF0ZSggJy90cmFja3MvbGlicmFyeV9kYXRhc2V0c19z ZWxlY3RfZ3JpZC49Cm1ha28nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y250cmxsZXI9M0QibGlicmFyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1c2VfcGFuZWxzPTNERmFsc2UsCkBAIC0zNzMsNyArMzcxLDcgQEAKICAgICAgICAgICAgIG9w ZXJhdGlvbiA9M0Qga3dhcmdzWydvcGVyYXRpb24nXS5sb3dlcigpCiAgICAgICAgICAgICBpZHMg PTNEIHV0aWwubGlzdGlmeSgga3dhcmdzWydpZCddICkKICAgICAgICAgICAgIGZvciBpZCBpbiBp ZHM6Ci0gICAgICAgICAgICAgICAgaXRlbSA9M0Qgc2Vzc2lvbi5xdWVyeSggbW9kZWwuVmlzdWFs aXphdGlvbiApLmdldCggdHJhbnMucz0KZWN1cml0eS5kZWNvZGVfaWQoIGlkICkgKQorICAgICAg ICAgICAgICAgIGl0ZW0gPTNEIHNlc3Npb24ucXVlcnkoIG1vZGVsLlZpc3VhbGl6YXRpb24gKS5n ZXQoIHNlbGYuZGU9CmNvZGVfaWQoIGlkICkgKQogICAgICAgICAgICAgICAgIGlmIG9wZXJhdGlv biA9M0Q9M0QgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVsZXRlZCA9M0Qg VHJ1ZQogICAgICAgICAgICAgICAgIGlmIG9wZXJhdGlvbiA9M0Q9M0QgInNoYXJlIG9yIHB1Ymxp c2giOgpAQCAtNTE3LDcgKzUxNSw3IEBACiAgICAgICAgIGVsaWYgJ2Rpc2FibGVfbGlua19hY2Nl c3NfYW5kX3VucHVibGlzaCcgaW4ga3dhcmdzOgogICAgICAgICAgICAgdmlzdWFsaXphdGlvbi5p bXBvcnRhYmxlID0zRCB2aXN1YWxpemF0aW9uLnB1Ymxpc2hlZCA9M0QgRmFsc2UKICAgICAgICAg ZWxpZiAndW5zaGFyZV91c2VyJyBpbiBrd2FyZ3M6Ci0gICAgICAgICAgICB1c2VyID0zRCBzZXNz aW9uLnF1ZXJ5KCBtb2RlbC5Vc2VyICkuZ2V0KCB0cmFucy5zZWN1cml0eS5kZWNvZD0KZV9pZCgg a3dhcmdzWyd1bnNoYXJlX3VzZXInIF0gKSApCisgICAgICAgICAgICB1c2VyID0zRCBzZXNzaW9u LnF1ZXJ5KCBtb2RlbC5Vc2VyICkuZ2V0KCBzZWxmLmRlY29kZV9pZCgga3dhcj0KZ3NbJ3Vuc2hh cmVfdXNlcicgXSApICkKICAgICAgICAgICAgIGlmIG5vdCB1c2VyOgogICAgICAgICAgICAgICAg IGVycm9yKCAiVXNlciBub3QgZm91bmQgZm9yIHByb3ZpZGVkIGlkIiApCiAgICAgICAgICAgICBh c3NvY2lhdGlvbiA9M0Qgc2Vzc2lvbi5xdWVyeSggbW9kZWwuVmlzdWFsaXphdGlvblVzZXJTaGFy ZUFzcz0Kb2NpYXRpb24gKSBcCkBAIC04NjgsOCArODY2LDggQEAKICAgICAgICAgICAgICMgdXNl IGRia2V5IGZyb20gZGF0YXNldCB0byBiZSBhZGRlZCBvciBmcm9tIGluY29taW5nIHBhcmFtZXRl cgogICAgICAgICAgICAgZGJrZXkgPTNEIE5vbmUKICAgICAgICAgICAgIGlmIG5ld19kYXRhc2V0 X2lkOgotICAgICAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29k ZV9pZCggbmV3X2RhdGFzZXRfaWQgKQotICAgICAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5tZ3Jz LmhkYXMub3duZWRfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cmE9Cm5zLnVzZXIgKQorICAg ICAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBuZXdfZGF0YXNldF9p ZCApCisgICAgICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLm93bmVkX2J5X2lk KCB0cmFucywgZGVjb2RlZF9pZCwgdD0KcmFucy51c2VyICkKICAgICAgICAgICAgICAgICBkYmtl eSA9M0QgaGRhLmRia2V5CiAgICAgICAgICAgICAgICAgaWYgZGJrZXkgPTNEPTNEICc/JzoKICAg ICAgICAgICAgICAgICAgICAgZGJrZXkgPTNEIGt3YXJncy5nZXQoICJkYmtleSIsIE5vbmUgKQpA QCAtOTc4LDEyICs5NzYsMTIgQEAKICAgICAgICAgICAgICMgTG9hZGluZyBhIHNoYXJlZCB2aXN1 YWxpemF0aW9uLgogICAgICAgICAgICAgdml6ID0zRCBzZWxmLmdldF92aXN1YWxpemF0aW9uKCB0 cmFucywgaWQgKQogICAgICAgICAgICAgdml6X2NvbmZpZyA9M0Qgc2VsZi5nZXRfdmlzdWFsaXph dGlvbl9jb25maWcoIHRyYW5zLCB2aXogKQotICAgICAgICAgICAgZGVjb2RlZF9pZCA9M0QgdHJh bnMuc2VjdXJpdHkuZGVjb2RlX2lkKCB2aXpfY29uZmlnWyAnZGF0YXNldF89CmlkJyBdICkKLSAg ICAgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYubWdycy5oZGFzLm93bmVkX2J5X2lkKCB0cmFucywg ZGVjb2RlZF9pZCwgdHJhPQpucy51c2VyICkKKyAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNl bGYuZGVjb2RlX2lkKCB2aXpfY29uZmlnWyAnZGF0YXNldF9pZCcgXSApCisgICAgICAgICAgICBk YXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgZGVjb2RlZF9p ZCwgdD0KcmFucy51c2VyICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTG9hZGluZyBu ZXcgdmlzdWFsaXphdGlvbi4KICAgICAgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuZ2V0X2hkYV9v cl9sZGRhKCB0cmFucywgaGRhX2xkZGEsIGRhdGFzZXRfaWQgKQotICAgICAgICAgICAgam9iID0z RCBzZWxmLm1ncnMuaGRhcy5jcmVhdGluZ19qb2IoIGRhdGFzZXQgKQorICAgICAgICAgICAgam9i ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmNyZWF0aW5nX2pvYiggZGF0YXNldCApCiAgICAgICAgICAg ICB2aXpfY29uZmlnID0zRCB7CiAgICAgICAgICAgICAgICAgJ2RhdGFzZXRfaWQnOiBkYXRhc2V0 X2lkLAogICAgICAgICAgICAgICAgICd0b29sX2lkJzogam9iLnRvb2xfaWQsCkBAIC0xMDEzLDkg KzEwMTEsOSBAQAo9MjAKICAgICAgICAgIyBnZXQgdGhlIGhkYSBpZiB3ZSBjYW4sIHRoZW4gaXRz IGRhdGEgdXNpbmcgdGhlIHBoeWxvdml6IHBhcnNlcnMKICAgICAgICAgaWYgZGF0YXNldF9pZDoK LSAgICAgICAgICAgIGRlY29kZWRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmRlY29kZV9pZCggZGF0 YXNldF9pZCApCi0gICAgICAgICAgICBoZGEgPTNEIHNlbGYubWdycy5oZGFzLmFjY2Vzc2libGVf YnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVzZXIgKQotICAgICAgICAgICAgaGRh ID0zRCBzZWxmLm1ncnMuaGRhcy5lcnJvcl9pZl91cGxvYWRpbmcoIGhkYSApCisgICAgICAgICAg ICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggZGF0YXNldF9pZCApCisgICAgICAgICAg ICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29k ZWRfaWQsID0KdHJhbnMudXNlciApCisgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFn ZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBoZGEgKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAg cmV0dXJuIHRyYW5zLnNob3dfbWVzc2FnZSggIlBoeWxvdml6IGNvdWxkbid0IGZpbmQgYSBkYXRh c2V0X2k9CmQiICkKPTIwCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2Vu dHJhbC9jb21taXRzLzhlZWZjMDljNDFkYy8KQ2hhbmdlc2V0OiAgIDhlZWZjMDljNDFkYwpVc2Vy OiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0xMiAxODowMToyOCsw MDowMApTdW1tYXJ5OiAgICAgTm9ybWFsaXplIG5hbWVzIGZyb20gb3duZWQvYWNjZXNzaWJsZV9i eV9pZCB0byBnZXRfb3duZWQvYWNjZXM9CnNpYmxlOyBmaXggc29tZSBoaXN0b3J5IGVycm9ycwpB ZmZlY3RlZCAjOiAgMTcgZmlsZXMKCmRpZmYgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5 YzU1YzIzODQ0OTc1MCAtciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0 MjEgbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMv YmFzZS5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKQEAgLTI1MSwxMiArMjUx LDEyIEBACiAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLk9iamVjdE5vdEZvdW5kLCBub3RfZm91 bmQ6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQo9MjAKLSAgICBkZWYgbGlzdCggc2VsZiwgdHJh bnMsIHF1ZXJ5PTNETm9uZSwgKiprd2FyZ3MgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFNlbmRz IGt3YXJncyB0byBidWlsZCB0aGUgcXVlcnkgcmV0dXJuIGFsbCBtb2RlbHMgZm91bmQuCi0gICAg ICAgICIiIgotICAgICAgICBxdWVyeSA9M0QgcXVlcnkgb3Igc2VsZi5xdWVyeSggdHJhbnMsICoq a3dhcmdzICkKLSAgICAgICAgcmV0dXJuIHF1ZXJ5LmFsbCgpCisgICAgI2RlZiBnZXQoIHNlbGYs IHRyYW5zLCBpZCwgKiprd2FyZ3MgKToKKyAgICAjICAgICIiIgorICAgICMgICAgIiIiCisgICAg IyAgICAjVE9ETzogZWl0aGVyIHJlbW92ZSB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIHNxbGFs eCBnZXQgb3IgbWFrZT0KIGl0IGJlaGF2ZSAqbXVjaCogbW9yZSBsaWtlIGl0OiBvYmovTm9uZQor ICAgICMgICAgaWRfZmlsdGVyID0zRCBzZWxmLm1vZGVsX2NsYXNzLmlkID0zRD0zRCBpZAorICAg ICMgICAgcmV0dXJuIHNlbGYub25lKCB0cmFucywgZmlsdGVycz0zRGlkX2ZpbHRlciwgKiprd2Fy Z3MgKQo9MjAKICAgICBkZWYgYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2FyZ3MgKToKICAg ICAgICAgIiIiCkBAIC0yNjUsNiArMjY1LDEzIEBACiAgICAgICAgIGlkX2ZpbHRlciA9M0Qgc2Vs Zi5tb2RlbF9jbGFzcy5pZCA9M0Q9M0QgaWQKICAgICAgICAgcmV0dXJuIHNlbGYub25lKCB0cmFu cywgZmlsdGVycz0zRGlkX2ZpbHRlciwgKiprd2FyZ3MgKQo9MjAKKyAgICBkZWYgbGlzdCggc2Vs ZiwgdHJhbnMsIHF1ZXJ5PTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAg IFNlbmRzIGt3YXJncyB0byBidWlsZCB0aGUgcXVlcnkgcmV0dXJuIGFsbCBtb2RlbHMgZm91bmQu CisgICAgICAgICIiIgorICAgICAgICBxdWVyeSA9M0QgcXVlcnkgb3Igc2VsZi5xdWVyeSggdHJh bnMsICoqa3dhcmdzICkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LmFsbCgpCisKICAgICBkZWYgX3F1 ZXJ5X2J5X2lkcyggc2VsZiwgdHJhbnMsIGlkcywgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzICk6 CiAgICAgICAgICIiIgogICAgICAgICBCdWlsZHMgYSBxdWVyeSB0byBmaW5kIGEgbGlzdCBvZiBt b2RlbHMgd2l0aCB0aGUgZ2l2ZW4gbGlzdCBvZiBgaWQ9CnNgLgpAQCAtNDM2LDcgKzQ0Myw3IEBA CiAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWQoICJBYnN0cmFjdCBJbnRl cmZhY2UgTWV0aG9kIiApCiAgICAgICAgICNPUj8gcmV0dXJuIEZhbHNlCj0yMAotICAgIGRlZiBh Y2Nlc3NpYmxlX2J5X2lkKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6CisgICAg ZGVmIGdldF9hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6CiAg ICAgICAgICIiIgogICAgICAgICBSZXR1cm4gdGhlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYg aXQncyBhY2Nlc3NpYmxlIHRvIHVzZXIsCiAgICAgICAgIG90aGVyd2lzZSByYWlzZSBhbiBlcnJv ci4KQEAgLTQ5Niw3ICs1MDMsNyBAQAogICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxl bWVudGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNlIE1ldGhvZCIgKQogICAgICAgICAjT1I/IHJldHVy biBGYWxzZQo9MjAKLSAgICBkZWYgb3duZWRfYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCwgdXNlciwg Kiprd2FyZ3MgKToKKyAgICBkZWYgZ2V0X293bmVkKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoq a3dhcmdzICk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gdGhlIGl0ZW0gd2l0aCB0aGUg Z2l2ZW4gaWQgaWYgb3duZWQgYnkgdGhlIHVzZXIsCiAgICAgICAgIG90aGVyd2lzZSByYWlzZSBh biBlcnJvci4KCmRpZmYgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1 MCAtciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4 eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxl Y3Rpb25zLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKQEAgLTI0 OCw3ICsyNDgsNyBAQAo9MjAKICAgICAgICAgaWYgc3JjX3R5cGUgPTNEPTNEICdoZGEnOgogICAg ICAgICAgICAgZGVjb2RlZF9pZCA9M0QgaW50KCB0cmFucy5hcHAuc2VjdXJpdHkuZGVjb2RlX2lk KCBlbmNvZGVkX2lkICk9CiApCi0gICAgICAgICAgICBlbGVtZW50ID0zRCBzZWxmLmhkYV9tYW5h Z2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkXz0KaWQsIHRyYW5zLnVzZXIgKQor ICAgICAgICAgICAgZWxlbWVudCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSgg dHJhbnMsIGRlY29kZWRfaWQ9CiwgdHJhbnMudXNlciApCiAgICAgICAgIGVsaWYgc3JjX3R5cGUg PTNEPTNEICdsZGRhJzoKICAgICAgICAgICAgIGVsZW1lbnQgPTNEIHNlbGYubGRkYV9tYW5hZ2Vy LmdldCggdHJhbnMsIGVuY29kZWRfaWQgKQogICAgICAgICBlbGlmIHNyY190eXBlID0zRD0zRCAn aGRjYSc6CgpkaWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3NTAg LXIgOGVlZmMwOWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxheHkv d2ViYXBwcy9nYWxheHkvYXBpL2Fubm90YXRpb25zLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBw cy9nYWxheHkvYXBpL2Fubm90YXRpb25zLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxh eHkvYXBpL2Fubm90YXRpb25zLnB5CkBAIC01OSw3ICs1OSw3IEBACj0yMAogICAgIGRlZiBfZ2V0 X2l0ZW1fZnJvbV9pZChzZWxmLCB0cmFucywgaWRzdHIpOgogICAgICAgICBkZWNvZGVkX2lkc3Ry ID0zRCBzZWxmLmRlY29kZV9pZCggaWRzdHIgKQotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhp c3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2RlZF89Cmlkc3RyLCB0 cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0 X2FjY2Vzc2libGUoIHRyYW5zLCBkZWNvZGVkX2lkPQpzdHIsIHRyYW5zLnVzZXIgKQogICAgICAg ICByZXR1cm4gaGlzdG9yeQo9MjAKPTIwCkBAIC03Myw3ICs3Myw3IEBACj0yMAogICAgIGRlZiBf Z2V0X2l0ZW1fZnJvbV9pZChzZWxmLCB0cmFucywgaWRzdHIpOgogICAgICAgICBkZWNvZGVkX2lk c3RyID0zRCBzZWxmLmRlY29kZV9pZCggaWRzdHIgKQotICAgICAgICBoZGEgPTNEIHNlbGYuaGRh X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWRzdHIsIHQ9CnJhbnMu dXNlciApCisgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSgg dHJhbnMsIGRlY29kZWRfaWRzdHIsIHRyYT0KbnMudXNlciApCiAgICAgICAgIGhkYSA9M0Qgc2Vs Zi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIHRyYW5zLCBoZGEgKQogICAgICAgICBy ZXR1cm4gaGRhCj0yMAoKZGlmZiAtciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOGI4ZjljNTVjMjM4 NDQ5NzUwIC1yIDhlZWZjMDljNDFkY2ZjMzk5ZTM3ZTIwPQo4Y2M3MGMwZjMzNDkxNjQyMSBsaWIv Z2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0X2NvbGxlY3Rpb25zLnB5Ci0tLSBhL2xp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2RhdGFzZXRfY29sbGVjdGlvbnMucHkKKysrIGIv bGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvZGF0YXNldF9jb2xsZWN0aW9ucy5weQpAQCAt NDUsNyArNDUsNyBAQAogICAgICAgICBpZiBpbnN0YW5jZV90eXBlID0zRD0zRCAiaGlzdG9yeSI6 CiAgICAgICAgICAgICBoaXN0b3J5X2lkID0zRCBwYXlsb2FkLmdldCggJ2hpc3RvcnlfaWQnICkK ICAgICAgICAgICAgIGhpc3RvcnlfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBoaXN0b3J5X2lkICkK LSAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLm93bmVkX2J5X2lk KCB0cmFucywgaGlzdG9yeV9pPQpkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIGhpc3Rvcnkg PTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9vd25lZCggdHJhbnMsIGhpc3RvcnlfaWQsPQog dHJhbnMudXNlciApCiAgICAgICAgICAgICBjcmVhdGVfcGFyYW1zWyAicGFyZW50IiBdID0zRCBo aXN0b3J5CiAgICAgICAgIGVsaWYgaW5zdGFuY2VfdHlwZSA9M0Q9M0QgImxpYnJhcnkiOgogICAg ICAgICAgICAgZm9sZGVyX2lkID0zRCBwYXlsb2FkLmdldCggJ2ZvbGRlcl9pZCcgKQoKZGlmZiAt ciA2OWM3NGJjOTk2MjVlMzYzYmVjYWQwOGI4ZjljNTVjMjM4NDQ5NzUwIC1yIDhlZWZjMDljNDFk Y2ZjMzk5ZTM3ZTIwPQo4Y2M3MGMwZjMzNDkxNjQyMSBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5 L2FwaS9kYXRhc2V0cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRh c2V0cy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9kYXRhc2V0cy5weQpA QCAtMjgwLDcgKzI4MCw3IEBACj0yMAogICAgICAgICBydmFsID0zRCAnJwogICAgICAgICB0cnk6 Ci0gICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCgg dHJhbnMsIGRlY29kZWRfY29udD0KZW50X2lkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIGhk YSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIGRlY29kZWRfY29u dGVuPQp0X2lkLCB0cmFucy51c2VyICkKPTIwCiAgICAgICAgICAgICBpZiByYXc6CiAgICAgICAg ICAgICAgICAgaWYgZmlsZW5hbWUgYW5kIGZpbGVuYW1lICE9M0QgJ2luZGV4JzoKCmRpZmYgLXIg NjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1MCAtciA4ZWVmYzA5YzQxZGNm YzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvZXh0ZW5kZWRfbWV0YWRhdGEucHkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICBkZWYgX2dldF9p dGVtX2Zyb21faWQoc2VsZiwgdHJhbnMsIGlkc3RyLCBjaGVja193cml0YWJsZT0zRFRydWUpOgog ICAgICAgICBkZWNvZGVkX2lkc3RyID0zRCBzZWxmLmRlY29kZV9pZCggaWRzdHIgKQogICAgICAg ICBpZiBjaGVja193cml0YWJsZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmhkYV9tYW5hZ2Vy Lm93bmVkX2J5X2lkKCB0cmFucywgZGVjb2RlZF9pZHN0ciwgdHJhPQpucy51c2VyICkKKyAgICAg ICAgICAgIHJldHVybiBzZWxmLmhkYV9tYW5hZ2VyLmdldF9vd25lZCggdHJhbnMsIGRlY29kZWRf aWRzdHIsIHRyYW5zPQoudXNlciApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZGEgPTNE IHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWRzdD0K ciwgdHJhbnMudXNlciApCisgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0 X2FjY2Vzc2libGUoIHRyYW5zLCBkZWNvZGVkX2lkc3RyLD0KIHRyYW5zLnVzZXIgKQogICAgICAg ICAgICAgcmV0dXJuIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywg aGRhICkKCmRpZmYgLXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1MCAt ciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4eS93 ZWJhcHBzL2dhbGF4eS9hcGkvZm9sZGVyX2NvbnRlbnRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2Vi YXBwcy9nYWxheHkvYXBpL2ZvbGRlcl9jb250ZW50cy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9mb2xkZXJfY29udGVudHMucHkKQEAgLTI2OCw3ICsyNjgsNyBAQAogICAg ICAgICBydmFsID0zRCB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkZWNvZGVkX2hkYV9p ZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGZyb21faGRhX2lkICkKLSAgICAgICAgICAgIGhkYSA9M0Qg c2VsZi5oZGFfbWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIGRlY29kZWRfaGRhX2lkLCB0PQpy YW5zLnVzZXIgKQorICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9vd25l ZCggdHJhbnMsIGRlY29kZWRfaGRhX2lkLCB0cmE9Cm5zLnVzZXIgKQogICAgICAgICAgICAgaGRh ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGhkYSApCiAg ICAgICAgICAgICBmb2xkZXIgPTNEIHNlbGYuZ2V0X2xpYnJhcnlfZm9sZGVyKCB0cmFucywgZW5j b2RlZF9mb2xkZXJfaWRfMT0KNiwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKQo9MjAKCmRpZmYg LXIgNjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1MCAtciA4ZWVmYzA5YzQx ZGNmYzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4 eS9hcGkvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hp c3Rvcmllcy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3JpZXMu cHkKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9y eV9tYW5hZ2VyLm1vc3RfcmVjZW50KCB0cmFucywgdHJhbnMudXNlPQpyLAogICAgICAgICAgICAg ICAgIGZpbHRlcnM9M0QoIHNlbGYuYXBwLm1vZGVsLkhpc3RvcnkuZGVsZXRlZCA9M0Q9M0QgRmFs c2UgKSApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3Rv cnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgc2VsZj0KLmRlY29kZV9pZCggaGlz dG9yeV9pZCApLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlz dG9yeV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgc2VsZi5kPQplY29kZV9pZCggaGlz dG9yeV9pZCApLCB0cmFucy51c2VyICkKPTIwCiAgICAgICAgIHJldHVybiBzZWxmLmhpc3Rvcnlf c2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldyggdHJhbnMsIGhpc3RvcnksCiAgICAgICAgICAg ICAqKnNlbGYuX3BhcnNlX3NlcmlhbGl6YXRpb25fcGFyYW1zKCBrd2QsICdkZXRhaWxlZCcgKSAp CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICBkZWYgY2l0YXRpb25zKCBzZWxmLCB0cmFucywgaGlz dG9yeV9pZCwgKiprd2QgKToKICAgICAgICAgIiIiCiAgICAgICAgICIiIgotICAgICAgICBoaXN0 b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgc2Vs Zi5kZWM9Cm9kZV9pZCggaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9y eSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBzZWxmLmRl Y29kPQplX2lkKCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIgKQogICAgICAgICB0b29sX2lkcyA9 M0Qgc2V0KFtdKQogICAgICAgICBmb3IgZGF0YXNldCBpbiBoaXN0b3J5LmRhdGFzZXRzOgogICAg ICAgICAgICAgam9iID0zRCBkYXRhc2V0LmNyZWF0aW5nX2pvYgpAQCAtMTQ2LDcgKzE0Niw3IEBA CiAgICAgICAgICMgaWYgYSBoaXN0b3J5IGlkIHdhcyBwYXNzZWQsIGNvcHkgdGhhdCBoaXN0b3J5 CiAgICAgICAgIGlmIGNvcHlfdGhpc19oaXN0b3J5X2lkOgogICAgICAgICAgICAgZGVjb2RlZF9p ZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGNvcHlfdGhpc19oaXN0b3J5X2lkICkKLSAgICAgICAgICAg IG9yaWdpbmFsX2hpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlf aWQoIHRyPQphbnMsIGRlY29kZWRfaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgb3JpZ2lu YWxfaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW49 CnMsIGRlY29kZWRfaWQsIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgaGlzdF9uYW1lID0zRCBo aXN0X25hbWUgb3IgKCAiQ29weSBvZiAnJXMnIiAlIG9yaWdpbmFsX2hpc3Rvcnk9Ci5uYW1lICkK ICAgICAgICAgICAgIG5ld19oaXN0b3J5ID0zRCBvcmlnaW5hbF9oaXN0b3J5LmNvcHkoIG5hbWU9 M0RoaXN0X25hbWUsIHRhcmdlPQp0X3VzZXI9M0R0cmFucy51c2VyICkKPTIwCkBAIC0xODgsNyAr MTg4LDcgQEAKICAgICAgICAgaWYga3dkLmdldCggJ3BheWxvYWQnLCBOb25lICk6CiAgICAgICAg ICAgICBwdXJnZSA9M0Qgc3RyaW5nX2FzX2Jvb2woIGt3ZFsncGF5bG9hZCddLmdldCggJ3B1cmdl JywgRmFsc2UgKT0KICkKPTIwCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5h Z2VyLm93bmVkX2J5X2lkKCB0cmFucywgc2VsZi5kZWNvZGVfaT0KZCggaGlzdG9yeV9pZCApLCB0 cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0 X293bmVkKCB0cmFucywgc2VsZi5kZWNvZGVfaWQoPQogaGlzdG9yeV9pZCApLCB0cmFucy51c2Vy ICkKICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIuZGVsZXRlKCB0cmFucywgaGlzdG9yeSAp CiAgICAgICAgIGlmIHB1cmdlOgogICAgICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIucHVy Z2UoIHRyYW5zLCBoaXN0b3J5ICkKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgICAgICA6cmV0dXJu czogICAnT0snIGlmIHRoZSBoaXN0b3J5IHdhcyB1bmRlbGV0ZWQKICAgICAgICAgIiIiCiAgICAg ICAgIGhpc3RvcnlfaWQgPTNEIGlkCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9t YW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgc2VsZi5kZWNvZGVfaT0KZCggaGlzdG9yeV9pZCAp LCB0cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIu Z2V0X293bmVkKCB0cmFucywgc2VsZi5kZWNvZGVfaWQoPQogaGlzdG9yeV9pZCApLCB0cmFucy51 c2VyICkKICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIudW5kZWxldGUoIHRyYW5zLCBoaXN0 b3J5ICkKPTIwCiAgICAgICAgIHJldHVybiBzZWxmLmhpc3Rvcnlfc2VyaWFsaXplci5zZXJpYWxp emVfdG9fdmlldyggdHJhbnMsIGhpc3RvcnksCkBAIC0yMzYsNyArMjM2LDcgQEAKICAgICAgICAg ICAgIGFueSB2YWx1ZXMgdGhhdCB3ZXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBhbmQs IHRoZXJlZm9yPQplLCB1cGRhdGVkCiAgICAgICAgICIiIgogICAgICAgICAjVE9ETzogUFVUIC9h cGkvaGlzdG9yaWVzL3tlbmNvZGVkX2hpc3RvcnlfaWR9IHBheWxvYWQgPTNEIHsgcmF0aW49Cmc6 IHJhdGluZyB9ICh3LyBubyBzZWN1cml0eSBjaGVja3MpCi0gICAgICAgIGhpc3RvcnkgPTNEIHNl bGYuaGlzdG9yeV9tYW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgc2VsZi5kZWNvZGVfaT0KZCgg aWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5h Z2VyLmdldF9vd25lZCggdHJhbnMsIHNlbGYuZGVjb2RlX2lkKD0KIGlkICksIHRyYW5zLnVzZXIg KQo9MjAKICAgICAgICAgI1RPRE86IGZsdXNoaW5nIGluIGRlc2VyaWFsaXplIGlzIGFuIGlmZnkg cGF0dGVybi4uLgogICAgICAgICBzZWxmLmhpc3RvcnlfZGVzZXJpYWxpemVyLmRlc2VyaWFsaXpl KCB0cmFucywgaGlzdG9yeSwgcGF5bG9hZCApCkBAIC0yNTksNyArMjU5LDcgQEAKICAgICAgICAg IiIiCiAgICAgICAgICMgUFVUIGluc3RlYWQgb2YgUE9TVCBiZWNhdXNlIG11bHRpcGxlIHJlcXVl c3RzIHNob3VsZCBqdXN0IHJlc3VsdAogICAgICAgICAjIGluIG9uZSBvYmplY3QgYmVpbmcgY3Jl YXRlZC4KLSAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJs ZV9ieV9pZCggdHJhbnMsIHNlbGYuZGVjPQpvZGVfaWQoIGlkICksIHRyYW5zLnVzZXIgKQorICAg ICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJh bnMsIHNlbGYuZGVjb2Q9CmVfaWQoIGlkICksIHRyYW5zLnVzZXIgKQogICAgICAgICBqZWhhID0z RCBoaXN0b3J5LmxhdGVzdF9leHBvcnQKICAgICAgICAgdXBfdG9fZGF0ZSA9M0QgamVoYSBhbmQg amVoYS51cF90b19kYXRlCiAgICAgICAgIGlmICdmb3JjZScgaW4ga3dkczoKQEAgLTI5Miw3ICsy OTIsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBTZWVtcyBzaWxseSB0byBwdXQgamVoYV9p ZCBpbiBoZXJlLCBidXQgd2FudCBHRVQgdG8gYmUgaW1tdWF0YWJsPQplPwogICAgICAgICAjIGFu ZCB0aGlzIGlzIGJlaW5nIGFjY29tcGxpc2hlZCB0aGlzIHdheS4KLSAgICAgICAgaGlzdG9yeSA9 M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIHNlbGYuZGVj PQpvZGVfaWQoIGlkICksIHRyYW5zLnVzZXIgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhp c3RvcnlfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIHNlbGYuZGVjb2Q9CmVfaWQoIGlk ICksIHRyYW5zLnVzZXIgKQogICAgICAgICBtYXRjaGluZ19leHBvcnRzID0zRCBmaWx0ZXIoIGxh bWJkYSBlOiB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGU9Ci5pZCApID0zRD0zRCBqZWhhX2lk LCBoaXN0b3J5LmV4cG9ydHMgKQogICAgICAgICBpZiBub3QgbWF0Y2hpbmdfZXhwb3J0czoKICAg ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQoKQoKZGlmZiAtciA2OWM3 NGJjOTk2MjVlMzYzYmVjYWQwOGI4ZjljNTVjMjM4NDQ5NzUwIC1yIDhlZWZjMDljNDFkY2ZjMzk5 ZTM3ZTIwPQo4Y2M3MGMwZjMzNDkxNjQyMSBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9o aXN0b3J5X2NvbnRlbnRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hp c3RvcnlfY29udGVudHMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlz dG9yeV9jb250ZW50cy5weQpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAg cnZhbCA9M0QgW10KPTIwCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2Vy LmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLmRlYz0Kb2RlX2lkKCBoaXN0b3J5X2lkICks IHRyYW5zLnVzZXIgKQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5n ZXRfYWNjZXNzaWJsZSggdHJhbnMsIHNlbGYuZGVjb2Q9CmVfaWQoIGhpc3RvcnlfaWQgKSwgdHJh bnMudXNlciApCj0yMAogICAgICAgICAjIEFsbG93IHBhc3NpbmcgaW4gdHlwZSBvciB0eXBlcyAt IGZvciBjb250aW51aXR5IHJlc3Qgb2YgbWV0aG9kcwogICAgICAgICAjIHRha2UgaW4gdHlwZSAt IGJ1dCB0aGlzIG9uZSBjYW4gYmUgcGFzc2VkIG11bHRpcGxlIHR5cGVzIGFuZApAQCAtMTQxLDcg KzE0MSw3IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2hhbmRsZV91bmtub3duX2NvbnRl bnRzX3R5cGUoIHRyYW5zLCBjb250ZW50c190eT0KcGUgKQo9MjAKICAgICBkZWYgX19zaG93X2Rh dGFzZXQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2QgKToKLSAgICAgICAgaGRhID0zRCBzZWxmLmhk YV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBzZWxmLmRlY29kZV9pZCggPQppZCAp LCB0cmFucy51c2VyICkKKyAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9hY2Nl c3NpYmxlKCB0cmFucywgc2VsZi5kZWNvZGVfaWQoIGlkPQogKSwgdHJhbnMudXNlciApCiAgICAg ICAgIHJldHVybiBzZWxmLmhkYV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywg aGRhLAogICAgICAgICAgICAgKipzZWxmLl9wYXJzZV9zZXJpYWxpemF0aW9uX3BhcmFtcygga3dk LCAnZGV0YWlsZWQnICkgKQo9MjAKQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgICAjIFRPRE86 IEZsdXNoIG91dCBjcmVhdGUgbmV3IGNvbGxlY3Rpb24gZG9jdW1lbnRhdGlvbiBhYm92ZSwgbmVl ZCA9CnNvbWUKICAgICAgICAgIyBleGFtcGxlcy4gU2VlIGFsc28gYmlvYmxlbmQgYW5kIEFQSSB0 ZXN0cyBmb3Igc3BlY2lmaWMgZXhhbXBsZXMuCj0yMAotICAgICAgICBoaXN0b3J5ID0zRCBzZWxm Lmhpc3RvcnlfbWFuYWdlci5vd25lZF9ieV9pZCggdHJhbnMsIHNlbGYuZGVjb2RlX2k9CmQoIGhp c3RvcnlfaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9y eV9tYW5hZ2VyLmdldF9vd25lZCggdHJhbnMsIHNlbGYuZGVjb2RlX2lkKD0KIGhpc3RvcnlfaWQg KSwgdHJhbnMudXNlciApCj0yMAogICAgICAgICB0eXBlID0zRCBwYXlsb2FkLmdldCggJ3R5cGUn LCAnZGF0YXNldCcgKQogICAgICAgICBpZiB0eXBlID0zRD0zRCAnZGF0YXNldCc6CkBAIC0yNDUs NyArMjQ1LDcgQEAKICAgICAgICAgIyBjb3B5IGFuIGV4aXN0aW5nLCBhY2Nlc3NpYmxlIGhkYQog ICAgICAgICBlbGlmIHNvdXJjZSA9M0Q9M0QgJ2hkYSc6CiAgICAgICAgICAgICB1bmVuY29kZWRf aGRhX2lkID0zRCBzZWxmLmRlY29kZV9pZCggY29udGVudCApCi0gICAgICAgICAgICBvcmlnaW5h bCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgdW5lbmNvZD0K ZWRfaGRhX2lkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIG9yaWdpbmFsID0zRCBzZWxmLmhk YV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgdW5lbmNvZGVkPQpfaGRhX2lkLCB0cmFu cy51c2VyICkKICAgICAgICAgICAgIGRhdGFfY29weSA9M0Qgb3JpZ2luYWwuY29weSggY29weV9j aGlsZHJlbj0zRFRydWUgKQogICAgICAgICAgICAgaGRhID0zRCBoaXN0b3J5LmFkZF9kYXRhc2V0 KCBkYXRhX2NvcHkgKQo9MjAKQEAgLTMyOSw3ICszMjksNyBAQAo9MjAKICAgICAgICAgIyBsb2dn ZWQgaW4gdXNlcjogdXNlIGZ1bGwgcGF5bG9hZCwgY2hlY2sgc3RhdGUgaWYgZGVsZXRpbmcsIGFu ZCBtPQpha2Ugc3VyZSB0aGUgaGlzdG9yeSBpcyB0aGVpcnMKICAgICAgICAgZWxzZToKLSAgICAg ICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywg c2VsZi5kZWNvZGVfPQppZCggaWQgKSwgdHJhbnMudXNlciApCisgICAgICAgICAgICBoZGEgPTNE IHNlbGYuaGRhX21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBzZWxmLmRlY29kZV9pZD0K KCBpZCApLCB0cmFucy51c2VyICkKICAgICAgICAgICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmVy cm9yX3VubGVzc19vd25lciggdHJhbnMsIGhkYS5oaXN0b3J5LCB0PQpyYW5zLnVzZXIgKQo9MjAK ICAgICAgICAgICAgICMgb25seSBjaGVja19zdGF0ZSBpZiBub3QgZGVsZXRpbmcsIG90aGVyd2lz ZSBjYW5ub3QgZGVsZXRlIHVwPQpsb2FkaW5nIGZpbGVzCgpkaWZmIC1yIDY5Yzc0YmM5OTYyNWUz NjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3NTAgLXIgOGVlZmMwOWM0MWRjZmMzOTllMzdlMjA9Cjhj YzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pvYnMucHkKLS0t IGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvam9icy5weQorKysgYi9saWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2JzLnB5CkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgICAg ICAgICAgICBpZiAnaWQnIGluIHY6CiAgICAgICAgICAgICAgICAgICAgIGlmICdzcmMnIG5vdCBp biB2IG9yIHZbICdzcmMnIF0gPTNEPTNEICdoZGEnOgogICAgICAgICAgICAgICAgICAgICAgICAg aGRhX2lkID0zRCBzZWxmLmRlY29kZV9pZCggdlsnaWQnXSApCi0gICAgICAgICAgICAgICAgICAg ICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYT0K bnMsIGhkYV9pZCwgdHJhbnMudXNlciApCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0 ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucz0KLCBoZGFfaWQsIHRy YW5zLnVzZXIgKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5nZXRfbGlicmFyeV9kYXRhc2V0X2RhdGFzZXRfYXNzb2M9 CmlhdGlvbiggdHJhbnMsIHZbJ2lkJ10gKQogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhc2V0 IGlzIE5vbmU6CgpkaWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3 NTAgLXIgOGVlZmMwOWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxh eHkvd2ViYXBwcy9nYWxheHkvYXBpL2xpYnJhcnlfY29udGVudHMucHkKLS0tIGEvbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9hcGkvbGlicmFyeV9jb250ZW50cy5weQorKysgYi9saWIvZ2FsYXh5 L3dlYmFwcHMvZ2FsYXh5L2FwaS9saWJyYXJ5X2NvbnRlbnRzLnB5CkBAIC0zMDMsNyArMzAzLDcg QEAKICAgICAgICAgICAgICMgY2hlY2sgcGVybWlzc2lvbnMgb24gKGFsbCB0aHJlZT8pIHJlc291 cmNlczogaGRhLCBsaWJyYXJ5LCBmPQpvbGRlcgogICAgICAgICAgICAgI1RPRE86IGRvIHdlIHJl YWxseSBuZWVkIHRoZSBsaWJyYXJ5Pz8KICAgICAgICAgICAgIGZyb21faGRhX2lkID0zRCBzZWxm LmRlY29kZV9pZCggZnJvbV9oZGFfaWQgKQotICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9t YW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgZnJvbV9oZGFfaWQsIHRyYW49CnMudXNlciApCisg ICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0X293bmVkKCB0cmFucywgZnJv bV9oZGFfaWQsIHRyYW5zLj0KdXNlciApCiAgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21h bmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgaGRhICkKICAgICAgICAgICAgICMgbGli cmFyeSA9M0Qgc2VsZi5nZXRfbGlicmFyeSggdHJhbnMsIGxpYnJhcnlfaWQsIGNoZWNrX2FjY2Vz PQpzaWJsZT0zRFRydWUgKQogICAgICAgICAgICAgZm9sZGVyID0zRCBzZWxmLmdldF9saWJyYXJ5 X2ZvbGRlciggdHJhbnMsIGZvbGRlcl9pZCwgY2hlY2tfYWM9CmNlc3NpYmxlPTNEVHJ1ZSApCgpk aWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3NTAgLXIgOGVlZmMw OWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvYXBpL3Rvb2xzLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rv b2xzLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL3Rvb2xzLnB5CkBAIC0x NDIsNyArMTQyLDcgQEAKICAgICAgICAgaGlzdG9yeV9pZCA9M0QgcGF5bG9hZC5nZXQoImhpc3Rv cnlfaWQiLCBOb25lKQogICAgICAgICBpZiBoaXN0b3J5X2lkOgogICAgICAgICAgICAgZGVjb2Rl ZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKQotICAgICAgICAgICAgdGFyZ2V0 X2hpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLm93bmVkX2J5X2lkKCB0cmFucywgZGU9 CmNvZGVkX2lkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgIHRhcmdldF9oaXN0b3J5ID0zRCBz ZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRyYW5zLCBkZWNvPQpkZWRfaWQsIHRyYW5z LnVzZXIgKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGFyZ2V0X2hpc3RvcnkgPTNEIE5v bmUKPTIwCkBAIC0yODEsNyArMjgxLDcgQEAKPTIwCiAgICAgICAgICMgRGF0YXNldCBjaGVjay4K ICAgICAgICAgZGVjb2RlZF9kYXRhc2V0X2lkID0zRCBzZWxmLmRlY29kZV9pZCggcGF5bG9hZC5n ZXQoICd0YXJnZXRfZGF0YXNlPQp0X2lkJyApICkKLSAgICAgICAgb3JpZ2luYWxfZGF0YXNldCA9 M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjPQpvZGVkX2Rh dGFzZXRfaWQsIHVzZXI9M0R0cmFucy51c2VyICkKKyAgICAgICAgb3JpZ2luYWxfZGF0YXNldCA9 M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIGRlY29kPQplZF9kYXRh c2V0X2lkLCB1c2VyPTNEdHJhbnMudXNlciApCiAgICAgICAgIG9yaWdpbmFsX2RhdGFzZXQgPTNE IHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgbz0KcmlnaW5hbF9k YXRhc2V0ICkKICAgICAgICAgbXNnID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmRhdGFfY29udmVyc2lv bl9zdGF0dXMoIHRyYW5zLCBvcmlnaW5hbF9kPQphdGFzZXQgKQogICAgICAgICBpZiBtc2c6Cgpk aWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3NTAgLXIgOGVlZmMw OWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxheHkvd2ViYXBwcy9n YWxheHkvYXBpL3dvcmtmbG93cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Fw aS93b3JrZmxvd3MucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvd29ya2Zs b3dzLnB5CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgaWYgJ2Zyb21faGlzdG9yeV9pZCcg aW4gcGF5bG9hZDoKICAgICAgICAgICAgIGZyb21faGlzdG9yeV9pZCA9M0QgcGF5bG9hZC5nZXQo ICdmcm9tX2hpc3RvcnlfaWQnICkKICAgICAgICAgICAgIGZyb21faGlzdG9yeV9pZCA9M0Qgc2Vs Zi5kZWNvZGVfaWQoIGZyb21faGlzdG9yeV9pZCApCi0gICAgICAgICAgICBoaXN0b3J5ID0zRCBz ZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZnJvbT0KX2hpc3Rv cnlfaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5 X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBmcm9tX2g9CmlzdG9yeV9pZCwgdHJhbnMu dXNlciApCj0yMAogICAgICAgICAgICAgam9iX2lkcyA9M0QgbWFwKCBzZWxmLmRlY29kZV9pZCwg cGF5bG9hZC5nZXQoICdqb2JfaWRzJywgW10gKSApCiAgICAgICAgICAgICBkYXRhc2V0X2lkcyA9 M0QgcGF5bG9hZC5nZXQoICdkYXRhc2V0X2lkcycsIFtdICkKCmRpZmYgLXIgNjljNzRiYzk5NjI1 ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1MCAtciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMD0K OGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9k YXRhc2V0LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvZGF0 YXNldC5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL2RhdGFz ZXQucHkKQEAgLTUyOSw4ICs1MjksOCBAQAogICAgIGRlZiBnZXRfbmFtZV9hbmRfbGlua19hc3lu Yyggc2VsZiwgdHJhbnMsIGlkPTNETm9uZSApOgogICAgICAgICAiIiIgUmV0dXJucyBkYXRhc2V0 J3MgbmFtZSBhbmQgbGluay4gIiIiCiAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNlbGYuZGVjb2Rl X2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNjZXNzaWJs ZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMudXNlciApCi0gICAgICAgIGRhdGFz ZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0ICkKKyAg ICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMs IGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRh X21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgZGF0YXNldCApCiAgICAgICAgIHJl dHVybl9kaWN0ID0zRCB7ICJuYW1lIiA6IGRhdGFzZXQubmFtZSwgImxpbmsiIDogdXJsX2Zvcigg Y29udHJvbD0KbGVyPTNEJ2RhdGFzZXQnLCBhY3Rpb249M0QiZGlzcGxheV9ieV91c2VybmFtZV9h bmRfc2x1ZyIsIHVzZXJuYW1lPTNEZGF0YXNlPQp0Lmhpc3RvcnkudXNlci51c2VybmFtZSwgc2x1 Zz0zRHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggZGF0YXNldC5pZCApICkgfQogICAgICAgICBy ZXR1cm4gcmV0dXJuX2RpY3QKPTIwCkBAIC01MzgsOCArNTM4LDggQEAKICAgICBkZWYgZ2V0X2Vt YmVkX2h0bWxfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZCApOgogICAgICAgICAiIiIgUmV0dXJucyBI VE1MIGZvciBlbWJlZGRpbmcgYSBkYXRhc2V0IGluIGEgcGFnZS4gIiIiCiAgICAgICAgIGRlY29k ZWRfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYu aGRhX21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMu dXNlciApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBs b2FkaW5nKCBkYXRhc2V0ICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5n ZXRfYWNjZXNzaWJsZSggdHJhbnMsIGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAg IGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywg ZGF0YXNldCApCiAgICAgICAgIGlmIGRhdGFzZXQ6CiAgICAgICAgICAgICByZXR1cm4gIkVtYmVk ZGVkIERhdGFzZXQgJyVzJyIgJSBkYXRhc2V0Lm5hbWUKPTIwCkBAIC01NTYsOCArNTU2LDggQEAK ICAgICAgICAgIiIiIFJhdGUgYSBkYXRhc2V0IGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm4gdXBk YXRlZCBjb21tdW5pdHkgZGF0PQphLiAiIiIKPTIwCiAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNl bGYuZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIu YWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMudXNlciApCi0gICAg ICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRh c2V0ICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJs ZSggdHJhbnMsIGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQgPTNE IHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgZGF0YXNldCApCiAg ICAgICAgIGlmIG5vdCBkYXRhc2V0OgogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJy b3JfbWVzc2FnZSggIlRoZSBzcGVjaWZpZWQgZGF0YXNldCBkb2VzIG49Cm90IGV4aXN0LiIgKQo9 MjAKQEAgLTU3MSw4ICs1NzEsOCBAQAogICAgICAgICAiIiIgRGlzcGxheSBkYXRhc2V0IGJ5IHVz ZXJuYW1lIGFuZCBzbHVnOyBiZWNhdXNlIGRhdGFzZXRzIGRvIG5vdCA9CnlldCBoYXZlIHNsdWdz LCB0aGUgc2x1ZyBpcyB0aGUgZGF0YXNldCdzIGlkLiAiIiIKICAgICAgICAgaWQgPTNEIHNsdWcK ICAgICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQoIGlkICkKLSAgICAgICAgZGF0 YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVjb2Rl ZF9pZCwgPQp0cmFucy51c2VyICkKLSAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdl ci5lcnJvcl9pZl91cGxvYWRpbmcoIGRhdGFzZXQgKQorICAgICAgICBkYXRhc2V0ID0zRCBzZWxm LmhkYV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgZGVjb2RlZF9pZCwgdHI9CmFucy51 c2VyICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5lcnJvcl9pZl91cGxv YWRpbmcoIHRyYW5zLCBkYXRhc2V0ICkKICAgICAgICAgaWYgZGF0YXNldDoKICAgICAgICAgICAg ICMgRmlsZW5hbWUgdXNlZCBmb3IgY29tcG9zaXRlIHR5cGVzLgogICAgICAgICAgICAgaWYgZmls ZW5hbWU6CkBAIC02MTQsOCArNjE0LDggQEAKICAgICAgICAgIiIiIFJldHVybnMgaXRlbSBjb250 ZW50IGluIEhUTUwgZm9ybWF0LiAiIiIKPTIwCiAgICAgICAgIGRlY29kZWRfaWQgPTNEIHNlbGYu ZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuYWNj ZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMudXNlciApCi0gICAgICAg IGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBkYXRhc2V0 ICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSgg dHJhbnMsIGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQgPTNEIHNl bGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgZGF0YXNldCApCiAgICAg ICAgIGlmIGRhdGFzZXQgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIHdlYi5odHRwZXhjZXB0 aW9ucy5IVFRQTm90Rm91bmQoKQogICAgICAgICB0cnVuY2F0ZWQsIGRhdGFzZXRfZGF0YSA9M0Qg c2VsZi5oZGFfbWFuYWdlci50ZXh0X2RhdGEoIGRhdGFzZXQsIHA9CnJldmlldz0zRFRydWUgKQpA QCAtNjI3LDggKzYyNyw4IEBACiAgICAgZGVmIGFubm90YXRlX2FzeW5jKCBzZWxmLCB0cmFucywg aWQsIG5ld19hbm5vdGF0aW9uPTNETm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgI1RPRE86Pz8g d2h5IGlzIHRoaXMgYW4gYWNjZXNzIGNoZWNrIG9ubHk/CiAgICAgICAgIGRlY29kZWRfaWQgPTNE IHNlbGYuZGVjb2RlX2lkKCBpZCApCi0gICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFn ZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsID0KdHJhbnMudXNlciApCi0g ICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCBk YXRhc2V0ICkKKyAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNz aWJsZSggdHJhbnMsIGRlY29kZWRfaWQsIHRyPQphbnMudXNlciApCisgICAgICAgIGRhdGFzZXQg PTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgZGF0YXNldCAp CiAgICAgICAgIGlmIG5vdCBkYXRhc2V0OgogICAgICAgICAgICAgd2ViLmh0dHBleGNlcHRpb25z LkhUVFBOb3RGb3VuZCgpCiAgICAgICAgIGlmIGRhdGFzZXQgYW5kIG5ld19hbm5vdGF0aW9uOgpA QCAtNjQxLDggKzY0MSw4IEBACiAgICAgQHdlYi5leHBvc2UKICAgICBkZWYgZ2V0X2Fubm90YXRp b25fYXN5bmMoIHNlbGYsIHRyYW5zLCBpZCApOgogICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxm LmRlY29kZV9pZCggaWQgKQotICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFj Y2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCA9CnRyYW5zLnVzZXIgKQotICAgICAg ICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YXNl dCApCisgICAgICAgIGRhdGFzZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0X2FjY2Vzc2libGUo IHRyYW5zLCBkZWNvZGVkX2lkLCB0cj0KYW5zLnVzZXIgKQorICAgICAgICBkYXRhc2V0ID0zRCBz ZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggdHJhbnMsIGRhdGFzZXQgKQogICAg ICAgICBpZiBub3QgZGF0YXNldDoKICAgICAgICAgICAgIHdlYi5odHRwZXhjZXB0aW9ucy5IVFRQ Tm90Rm91bmQoKQogICAgICAgICBhbm5vdGF0aW9uID0zRCBzZWxmLmdldF9pdGVtX2Fubm90YXRp b25fc3RyKCB0cmFucy5zYV9zZXNzaW9uLCB0cmE9Cm5zLnVzZXIsIGRhdGFzZXQgKQpAQCAtMTAx Niw3ICsxMDE2LDcgQEAKICAgICAgICAgdXNlciA9M0QgdHJhbnMuZ2V0X3VzZXIoKQogICAgICAg ICBpZiBzb3VyY2VfaGlzdG9yeSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGRlY29kZWRfc291 cmNlX2hpc3RvcnlfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBzb3VyY2VfaGlzdG9yeSApCi0gICAg ICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5vd25lZF9ieV9pZCggdHJh bnMsIGRlY29kZWRfcz0Kb3VyY2VfaGlzdG9yeV9pZCwgdHJhbnMudXNlciApCisgICAgICAgICAg ICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRyYW5zLCBkZWNv ZGVkX3NvdT0KcmNlX2hpc3RvcnlfaWQsIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgY3VycmVu dF9oaXN0b3J5ID0zRCB0cmFucy5nZXRfaGlzdG9yeSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAg ICAgICBoaXN0b3J5ID0zRCBjdXJyZW50X2hpc3RvcnkgPTNEIHRyYW5zLmdldF9oaXN0b3J5KCkK QEAgLTExMTgsOCArMTExOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9M0Qg ZXJyb3JfbXNnICsgIllvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uID0KdG8gYWRkIGRhdGFzZXRz IHRvICVpIHJlcXVlc3RlZCBoaXN0b3JpZXMuICAiICUgKCBsZW4oIHRhcmdldF9oaXN0b3JpZXMg KSApCiAgICAgICAgICAgICBmb3IgZGF0YXNldF9pZCBpbiBkYXRhc2V0X2lkczoKICAgICAgICAg ICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggZGF0YXNldF9pZCApCi0gICAg ICAgICAgICAgICAgZGF0YSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0 cmFucywgZGVjb2RlZD0KX2lkLCB0cmFucy51c2VyICkKLSAgICAgICAgICAgICAgICBkYXRhID0z RCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9hZGluZyggZGF0YSApCisgICAgICAgICAg ICAgICAgZGF0YSA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIGRl Y29kZWRfaT0KZCwgdHJhbnMudXNlciApCisgICAgICAgICAgICAgICAgZGF0YSA9M0Qgc2VsZi5o ZGFfbWFuYWdlci5lcnJvcl9pZl91cGxvYWRpbmcoIHRyYW5zLCBkYXRhICkKPTIwCiAgICAgICAg ICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cg PTNEIGVycm9yX21zZyArICJZb3UgdHJpZWQgdG8gY29weSBhIGRhdGFzZXQ9CiB0aGF0IGRvZXMg bm90IGV4aXN0IG9yIHRoYXQgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0by4gICIKCmRpZmYgLXIg NjljNzRiYzk5NjI1ZTM2M2JlY2FkMDhiOGY5YzU1YzIzODQ0OTc1MCAtciA4ZWVmYzA5YzQxZGNm YzM5OWUzN2UyMD0KOGNjNzBjMGYzMzQ5MTY0MjEgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9j b250cm9sbGVycy9oaXN0b3J5LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29u dHJvbGxlcnMvaGlzdG9yeS5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRy b2xsZXJzL2hpc3RvcnkucHkKQEAgLTIwOSw2ICsyMDksNyBAQAogICAgICAgICAjIEEgcHVibGlj IGhpc3RvcnkgaXMgcHVibGlzaGVkLCBoYXMgYSBzbHVnLCBhbmQgaXMgbm90IGRlbGV0ZWQuCiAg ICAgICAgIHJldHVybiBxdWVyeS5maWx0ZXIoIHNlbGYubW9kZWxfY2xhc3MucHVibGlzaGVkID0z RD0zRCBUcnVlICkuZmlsdD0KZXIoIHNlbGYubW9kZWxfY2xhc3Muc2x1ZyAhPTNEIE5vbmUgKS5m aWx0ZXIoIHNlbGYubW9kZWxfY2xhc3MuZGVsZXRlZCA9M0Q9Cj0zRCBGYWxzZSApCj0yMAorCiBj bGFzcyBIaXN0b3J5Q29udHJvbGxlciggQmFzZVVJQ29udHJvbGxlciwgU2hhcmFibGVNaXhpbiwg VXNlc0Fubm90YXRpb25zLD0KIFVzZXNJdGVtUmF0aW5ncywKICAgICAgICAgICAgICAgICAgICAg ICAgICBFeHBvcnRzSGlzdG9yeU1peGluLCBJbXBvcnRzSGlzdG9yeU1peGluICk6Cj0yMApAQCAt MjE3LDIxICsyMTgsNiBAQAogICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlciA9M0QgbWFuYWdl cnMuaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCBhcHAgKQogICAgICAgICBzZWxmLmhpc3Rvcnlf c2VyaWFsaXplciA9M0QgbWFuYWdlcnMuaGlzdG9yaWVzLkhpc3RvcnlTZXJpYWxpemVyKCA9CnNl bGYuYXBwICkKPTIwCi0gICAgZGVmIF9nZXRfaGlzdG9yeSggc2VsZiwgdHJhbnMsIGlkLCBjaGVj a19vd25lcnNoaXA9M0RUcnVlLCBjaGVja19hY2Nlcz0Kc2libGU9M0RGYWxzZSwgZGVsZXRlZD0z RE5vbmUgKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldCBhIEhpc3RvcnkgZnJvbSB0aGUgZGF0 YWJhc2UgYnkgaWQsIHZlcmlmeWluZyBvd25lcnNoaXAuCi0gICAgICAgICIiIgotICAgICAgICAj VE9ETzogbW92ZWQgZnJvbSB0aGUgbWl4aW4gLSB0byBtYW5hZ2VyCi0gICAgICAgIGlmIHRyYW5z LnVzZXIgaXMgTm9uZSBhbmQgdHJhbnMuaGlzdG9yeToKLSAgICAgICAgICAgIGlmIGlkID0zRD0z RCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5zLmhpc3RvcnkuaWQgKToKLSAgICAgICAg ICAgICAgICByZXR1cm4gdHJhbnMuaGlzdG9yeQotICAgICAgICAgICAgcmFpc2UgSXRlbU93bmVy c2hpcEV4Y2VwdGlvbiggIk11c3QgYmUgbG9nZ2VkIGluIHRvIG1hbmFnZSBHYWw9CmF4eSBpdGVt cyIsIHR5cGU9M0QnZXJyb3InICkKLQotICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmdldF9vYmpl Y3QoIHRyYW5zLCBpZCwgJ0hpc3RvcnknLAotICAgICAgICAgICAgY2hlY2tfb3duZXJzaGlwPTNE Y2hlY2tfb3duZXJzaGlwLCBjaGVja19hY2Nlc3NpYmxlPTNEY2hlY2tfYWM9CmNlc3NpYmxlLCBk ZWxldGVkPTNEZGVsZXRlZCApCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuc2VjdXJpdHlfY2hl Y2soIHRyYW5zLCBoaXN0b3J5LCBjaGVja19vd25lcnNoaXAsID0KY2hlY2tfYWNjZXNzaWJsZSAp Ci0gICAgICAgIHJldHVybiBoaXN0b3J5Ci0KICAgICBAd2ViLmV4cG9zZQogICAgIGRlZiBpbmRl eCggc2VsZiwgdHJhbnMgKToKICAgICAgICAgcmV0dXJuICIiCkBAIC0yNTcsNyArMjQzLDYgQEAK ICAgICAgICAgZ3JpZCA9M0Qgc2VsZi5wdWJsaXNoZWRfbGlzdF9ncmlkKCB0cmFucywgKiprd2Fy Z3MgKQogICAgICAgICByZXR1cm4gdHJhbnMuZmlsbF90ZW1wbGF0ZSggImhpc3RvcnkvbGlzdF9w dWJsaXNoZWQubWFrbyIsIGVtYmVkZGU9CmRfZ3JpZD0zRGdyaWQgKQo9MjAKLQogICAgIEB3ZWIu ZXhwb3NlCiAgICAgQHdlYi5yZXF1aXJlX2xvZ2luKCAid29yayB3aXRoIG11bHRpcGxlIGhpc3Rv cmllcyIgKQogICAgIGRlZiBsaXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKToKQEAgLTI3Mywx NCArMjU4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ25hbWUnXSAjIFJl bW92ZSBhamF4IG5hbWUgcGFyYW0gdGhhdCByZW5hbT0KZSBtZXRob2QgdXNlcwogICAgICAgICAg ICAgICAgIHJldHVybiBzZWxmLnJlbmFtZSggdHJhbnMsICoqa3dhcmdzICkKICAgICAgICAgICAg IGlmIG9wZXJhdGlvbiA9M0Q9M0QgInZpZXciOgotICAgICAgICAgICAgICAgIGhpc3RvcnkgPTNE IHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywga3dhcmdzLmdldCggJ2lkJywgTm89Cm5lICkgKQot ICAgICAgICAgICAgICAgIGlmIGhpc3Rvcnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0 cmFucy5yZXNwb25zZS5zZW5kX3JlZGlyZWN0KCB1cmxfZm9yKCBjb250cm9sbD0KZXI9M0QnaGlz dG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhY3Rpb249Cj0zRCd2aWV3JywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPTNEa3dhPQpy Z3NbJ2lkJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaG93X2RlbD0KZXRlZD0zRGhpc3RvcnkuZGVsZXRlZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVzZV9wYW5lPQpscz0zREZhbHNlICkgKQotICAgICAgICAgICAgICAgICAgICAjcmV0 dXJuIHNlbGYudmlldyggdHJhbnMsIGlkPTNEa3dhcmdzWydpZCddLCBzaG93X2RlbGU9CnRlZD0z RGhpc3RvcnkuZGVsZXRlZCwgdXNlX3BhbmVscz0zREZhbHNlICkKKyAgICAgICAgICAgICAgICBk ZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCgga3dhcmdzLmdldCggJ2lkJywgTm9uZSApICkK KyAgICAgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3du ZWQoIHRyYW5zLCBkZWNvZGVkPQpfaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgICAgIHJl dHVybiB0cmFucy5yZXNwb25zZS5zZW5kX3JlZGlyZWN0KCB1cmxfZm9yKCBjb250cm9sbGVyPQo9 M0QnaGlzdG9yeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFjdGlvbj0zRCd2aT0KZXcnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0zRGt3YXJnc1s9 CidpZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaG93X2RlbGV0ZWQ9Cj0zRGhpc3RvcnkuZGVsZXRlZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl X3BhbmVscz0KPTNERmFsc2UgKSApCiAgICAgICAgICAgICBpZiBvcGVyYXRpb24gPTNEPTNEICdj b3B5JyBhbmQga3dhcmdzLmdldCggJ2lkJywgTm9uZSApOgogICAgICAgICAgICAgICAgIHJldHVy biBzZWxmLmNvcHkoIHRyYW5zLCBpZD0zRGt3YXJncy5nZXQoICdpZCcsIE5vbmUgKSApCiAgICAg ICAgICAgICBoaXN0b3J5X2lkcyA9M0QgZ2FsYXh5LnV0aWwubGlzdGlmeSgga3dhcmdzLmdldCgg J2lkJywgW10gKSApCkBAIC0yOTAsNyArMjc0LDcgQEAKICAgICAgICAgICAgICMgTG9hZCB0aGUg aGlzdG9yaWVzIGFuZCBlbnN1cmUgdGhleSBhbGwgYmVsb25nIHRvIHRoZSBjdXJyZW50PQogdXNl cgogICAgICAgICAgICAgaGlzdG9yaWVzID0zRCBbXQogICAgICAgICAgICAgZm9yIGhpc3Rvcnlf aWQgaW4gaGlzdG9yeV9pZHM6Ci0gICAgICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5fZ2V0 X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkICkKKyAgICAgICAgICAgICAgICBoaXN0b3J5ID0z RCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRyYW5zLCBzZWxmLmRlPQpjb2RlX2lk KCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgICAgIGlmIGhpc3Rvcnk6 CiAgICAgICAgICAgICAgICAgICAgICMgRW5zdXJlIGhpc3RvcnkgaXMgb3duZWQgYnkgY3VycmVu dCB1c2VyCiAgICAgICAgICAgICAgICAgICAgIGlmIGhpc3RvcnkudXNlcl9pZCAhPTNEIE5vbmUg YW5kIHRyYW5zLnVzZXI6CkBAIC0zMzMsMTAgKzMxNywxMyBAQAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuX21ha2VfaXRlbV9pbXBvcnRhYmxlKCB0cmFucy5zYV9zZXNzaW9uLCA9 Cmhpc3RvcnkgKQogICAgICAgICAgICAgICAgIGVsaWYgb3BlcmF0aW9uID0zRD0zRCAiZGlzYWJs ZSBpbXBvcnQgdmlhIGxpbmsiOgogICAgICAgICAgICAgICAgICAgICBpZiBoaXN0b3J5X2lkczoK LSAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcmllcyA9M0QgWyBzZWxmLl9nZXRfaGlzdG9y eSggdHJhbnMsIGhpc3RvcnlfPQppZCApIGZvciBoaXN0b3J5X2lkIGluIGhpc3RvcnlfaWRzIF0K LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBoaXN0b3J5IGluIGhpc3RvcmllczoKKyAgICAg ICAgICAgICAgICAgICAgICAgIGhpc3RvcmllcyA9M0QgW10KKyAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBoaXN0b3J5X2lkIGluIGhpc3RvcnlfaWRzOgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9vd25lZCggdHI9CmFu cywgc2VsZi5kZWNvZGVfaWQoIGhpc3RvcnlfaWQgKSwgdHJhbnMudXNlciApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgaGlzdG9yeS5pbXBvcnRhYmxlOgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoaXN0b3J5LmltcG9ydGFibGUgPTNEIEZhbHNlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaGlzdG9yaWVzLmFwcGVuZCggaGlzdG9yeSApCisKICAgICAgICAg ICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgIyBSZW5kZXIgdGhlIGxp c3QgdmlldwogICAgICAgICByZXR1cm4gc2VsZi5zdG9yZWRfbGlzdF9ncmlkKCB0cmFucywgc3Rh dHVzPTNEc3RhdHVzLCBtZXNzYWdlPTNEbWU9CnNzYWdlLCAqKmt3YXJncyApCkBAIC00NTAsNyAr NDM3LDcgQEAKICAgICAgICAgICAgIG9wZXJhdGlvbiA9M0Qga3dhcmdzWydvcGVyYXRpb24nXS5s b3dlcigpCiAgICAgICAgICAgICBpZiBvcGVyYXRpb24gPTNEPTNEICJ2aWV3IjoKICAgICAgICAg ICAgICAgICAjIERpc3BsYXkgaGlzdG9yeS4KLSAgICAgICAgICAgICAgICBoaXN0b3J5ID0zRCBz ZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkc1swXSwgRmFsc2UpCisgICAgICAgICAgICAgICAg aGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBz ZT0KbGYuZGVjb2RlX2lkKCBpZHNbMF0gKSwgdHJhbnMudXNlciApCiAgICAgICAgICAgICAgICAg cmV0dXJuIHNlbGYuZGlzcGxheV9ieV91c2VybmFtZV9hbmRfc2x1ZyggdHJhbnMsIGhpc3Rvcnku dT0Kc2VyLnVzZXJuYW1lLCBoaXN0b3J5LnNsdWcgKQogICAgICAgICAgICAgZWxpZiBvcGVyYXRp b24gPTNEPTNEICJjb3B5IjoKICAgICAgICAgICAgICAgICBpZiBub3QgaWRzOgpAQCAtNDYzLDEy ICs0NTAsMTMgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgaWRzOgogICAgICAgICAgICAgICAg ICAgICBtZXNzYWdlID0zRCAiU2VsZWN0IGEgaGlzdG9yeSB0byB1bnNoYXJlIgogICAgICAgICAg ICAgICAgICAgICByZXR1cm4gc2VsZi5zaGFyZWRfbGlzdF9ncmlkKCB0cmFucywgc3RhdHVzPTNE J2Vycm9yJyw9CiBtZXNzYWdlPTNEbWVzc2FnZSwgKiprd2FyZ3MgKQotICAgICAgICAgICAgICAg ICMgTm8gbmVlZCB0byBjaGVjayBzZWN1cml0eSwgYXNzb2NpYXRpb24gYmVsb3cgd29uJ3QgeWll bGQ9CiBhCi0gICAgICAgICAgICAgICAgIyBoaXQgaWYgdGhpcyB1c2VyIGlzbid0IGhhdmluZyB0 aGUgaGlzdG9yeSBzaGFyZWQgd2l0aCBoZT0Kci4KLSAgICAgICAgICAgICAgICBoaXN0b3JpZXMg PTNEIFsgc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBoaXN0b3J5X2lkLCBjaGVjPQprX293bmVy c2hpcD0zREZhbHNlICkgZm9yIGhpc3RvcnlfaWQgaW4gaWRzIF0KLSAgICAgICAgICAgICAgICBm b3IgaGlzdG9yeSBpbiBoaXN0b3JpZXM6CisgICAgICAgICAgICAgICAgZm9yIGlkIGluIGlkczoK KyAgICAgICAgICAgICAgICAgICAgIyBObyBuZWVkIHRvIGNoZWNrIHNlY3VyaXR5LCBhc3NvY2lh dGlvbiBiZWxvdyB3b24ndCB5PQppZWxkIGEKKyAgICAgICAgICAgICAgICAgICAgIyBoaXQgaWYg dGhpcyB1c2VyIGlzbid0IGhhdmluZyB0aGUgaGlzdG9yeSBzaGFyZWQgd2l0PQpoIGhlci4KKyAg ICAgICAgICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYnlfaWQo IHRyYW5zLCBzZWxmLmRlPQpjb2RlX2lkKCBpZCApICkKICAgICAgICAgICAgICAgICAgICAgIyBD dXJyZW50IHVzZXIgaXMgdGhlIHVzZXIgd2l0aCB3aGljaCB0aGUgaGlzdG9yaWVzIHdlPQpyZSBz aGFyZWQKLSAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb24gPTNEIHRyYW5zLnNhX3Nlc3Np b24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlPQpsLkhpc3RvcnlVc2VyU2hhcmVBc3NvY2lhdGlvbiAp LmZpbHRlcl9ieSggdXNlcj0zRHRyYW5zLnVzZXIsIGhpc3Rvcnk9M0RoaXM9CnRvcnkgKS5vbmUo KQorICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbiA9M0QgKCB0cmFucy5zYV9zZXNzaW9u LnF1ZXJ5KCB0cmFucy5hcHAubW89CmRlbC5IaXN0b3J5VXNlclNoYXJlQXNzb2NpYXRpb24gKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXJfYnkoIHVzZXI9 M0R0cmFucy51c2VyLCBoaXM9CnRvcnk9M0RoaXN0b3J5ICkub25lKCkgKQogICAgICAgICAgICAg ICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmRlbGV0ZSggYXNzb2NpYXRpb24gKQogICAgICAgICAg ICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgICAgICAgICBtZXNz YWdlID0zRCAiVW5zaGFyZWQgJWQgc2hhcmVkIGhpc3RvcmllcyIgJSBsZW4oIGlkcyApCkBAIC01 NjMsNyArNTUxLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgICIiIgogICAgICAgICBpZCA9M0Qg c2VsZi5kZWNvZGVfaWQoIGlkICkgaWYgaWQgZWxzZSB0cmFucy5oaXN0b3J5LmlkCi0gICAgICAg IGhpc3RvcnlfdG9fdmlldyA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9p ZCggdHJhbnMsID0KaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICBoaXN0b3J5X3RvX3ZpZXcgPTNE IHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgaWQ9CiwgdHJhbnMu dXNlciApCj0yMAogICAgICAgICBoaXN0b3J5X2RhdGEgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2Vy Ll9nZXRfaGlzdG9yeV9kYXRhKCB0cmFucywgaGk9CnN0b3J5X3RvX3ZpZXcgKQogICAgICAgICBo aXN0b3J5X2RpY3Rpb25hcnkgPTNEIGhpc3RvcnlfZGF0YVsgJ2hpc3RvcnknIF0KQEAgLTYwMyw3 ICs1OTEsNyBAQAogICAgICAgICBoZGFfZGljdGlvbmFyaWVzICAgPTNEIFtdCiAgICAgICAgIHVz ZXJfaXNfb3duZXIgPTNEIEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGhpc3Rvcnlf dG9fdmlldyA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuYWNjZXNzaWJsZV9ieV9pZCggdHJhPQpu cywgaWQsIHRyYW5zLnVzZXIgKQorICAgICAgICAgICAgaGlzdG9yeV90b192aWV3ID0zRCBzZWxm Lmhpc3RvcnlfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnM9Ciwgc2VsZi5kZWNvZGVfaWQo IGlkICksIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAgdXNlcl9pc19vd25lciA9M0QgaGlzdG9y eV90b192aWV3LnVzZXIgPTNEPTNEIHRyYW5zLnVzZXIKPTIwCiAgICAgICAgICAgICAjIGluY2x1 ZGUgYWxsIGRhdGFzZXRzOiBoaWRkZW4sIGRlbGV0ZWQsIGFuZCBwdXJnZWQKQEAgLTY2NSw3ICs2 NTMsNyBAQAogICAgICAgICBpZiBoaXN0b3J5IGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIHdl Yi5odHRwZXhjZXB0aW9ucy5IVFRQTm90Rm91bmQoKQogICAgICAgICAjIFNlY3VyaXR5IGNoZWNr IHJhaXNlcyBlcnJvciBpZiB1c2VyIGNhbm5vdCBhY2Nlc3MgaGlzdG9yeS4KLSAgICAgICAgc2Vs Zi5zZWN1cml0eV9jaGVjayggdHJhbnMsIGhpc3RvcnksIEZhbHNlLCBUcnVlKQorICAgICAgICBz ZWxmLmhpc3RvcnlfbWFuYWdlci5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggdHJhbnMsIGhpc3Rv cnksIHRyYW49CnMudXNlciApCj0yMAogICAgICAgICAjIEdldCByYXRpbmcgZGF0YS4KICAgICAg ICAgdXNlcl9pdGVtX3JhdGluZyA9M0QgMApAQCAtNzA1LDcgKzY5Myw4IEBACiAgICAgICAgIGlm IGlkOgogICAgICAgICAgICAgaWRzID0zRCBnYWxheHkudXRpbC5saXN0aWZ5KCBpZCApCiAgICAg ICAgICAgICBpZiBpZHM6Ci0gICAgICAgICAgICAgICAgaGlzdG9yaWVzID0zRCBbIHNlbGYuX2dl dF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCApIGZvcj0KIGhpc3RvcnlfaWQgaW4gaWRzIF0K KyAgICAgICAgICAgICAgICBoaXN0b3JpZXMgPTNEIFsgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0 X2FjY2Vzc2libGUoIHRyYW5zPQosIHNlbGYuZGVjb2RlX2lkKCBoaXN0b3J5X2lkICksIHRyYW5z LnVzZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhpc3RvcnlfaWQgaW4g aWRzIF0KICAgICAgICAgZWxpZiBub3QgaGlzdG9yaWVzOgogICAgICAgICAgICAgaGlzdG9yaWVz ID0zRCBbIHRyYW5zLmhpc3RvcnkgXQo9MjAKQEAgLTc3NCw3ICs3NjMsNyBAQAogICAgICAgICAg ICAgc2VuZF90b19lcnIgPTNEIGVycl9tc2cKICAgICAgICAgICAgIGhpc3RvcmllcyA9M0QgW10K ICAgICAgICAgICAgIGZvciBoaXN0b3J5X2lkIGluIGlkOgotICAgICAgICAgICAgICAgIGhpc3Rv cmllcy5hcHBlbmQoIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCApICkKKyAg ICAgICAgICAgICAgICBoaXN0b3JpZXMuYXBwZW5kKCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRf b3duZWQoIHRyYW5zLCBzPQplbGYuZGVjb2RlX2lkKCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIg KSApCiAgICAgICAgICAgICByZXR1cm4gdHJhbnMuZmlsbF90ZW1wbGF0ZSggIi9oaXN0b3J5L3No YXJlLm1ha28iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rv cmllcz0zRGhpc3RvcmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbWFpbD0zRGVtYWlsLApAQCAtODgyLDcgKzg3MSw3IEBACiAgICAgICAgIHNlbmRfdG9fZXJy ID0zRCAiIgogICAgICAgICBoaXN0b3JpZXMgPTNEIFtdCiAgICAgICAgIGZvciBoaXN0b3J5X2lk IGluIGlkOgotICAgICAgICAgICAgaGlzdG9yaWVzLmFwcGVuZCggc2VsZi5fZ2V0X2hpc3Rvcnko IHRyYW5zLCBoaXN0b3J5X2lkICkgKQorICAgICAgICAgICAgaGlzdG9yaWVzLmFwcGVuZCggc2Vs Zi5oaXN0b3J5X21hbmFnZXIuZ2V0X293bmVkKCB0cmFucywgc2VsZi49CmRlY29kZV9pZCggaGlz dG9yeV9pZCApLCB0cmFucy51c2VyICkgKQogICAgICAgICBzZW5kX3RvX3VzZXJzID0zRCBbXQog ICAgICAgICBmb3IgZW1haWxfYWRkcmVzcyBpbiBnYWxheHkudXRpbC5saXN0aWZ5KCBlbWFpbCAp OgogICAgICAgICAgICAgZW1haWxfYWRkcmVzcyA9M0QgZW1haWxfYWRkcmVzcy5zdHJpcCgpCkBA IC0xMTYxLDcgKzExNTAsNyBAQAogICAgIEB3ZWIuanNvbgogICAgIGRlZiByYXRlX2FzeW5jKCBz ZWxmLCB0cmFucywgaWQsIHJhdGluZyApOgogICAgICAgICAiIiIgUmF0ZSBhIGhpc3RvcnkgYXN5 bmNocm9ub3VzbHkgYW5kIHJldHVybiB1cGRhdGVkIGNvbW11bml0eSBkYXQ9CmEuICIiIgotICAg ICAgICBoaXN0b3J5ID0zRCBzZWxmLl9nZXRfaGlzdG9yeSggdHJhbnMsIGlkLCBjaGVja19vd25l cnNoaXA9M0RGYWxzZSw9CiBjaGVja19hY2Nlc3NpYmxlPTNEVHJ1ZSApCisgICAgICAgIGhpc3Rv cnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgc2VsZi5k ZWNvZD0KZV9pZCggaWQgKSwgdHJhbnMudXNlciApCiAgICAgICAgIGlmIG5vdCBoaXN0b3J5Ogog ICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3JfbWVzc2FnZSggIlRoZSBzcGVjaWZp ZWQgaGlzdG9yeSBkb2VzIG49Cm90IGV4aXN0LiIgKQogICAgICAgICAjIFJhdGUgaGlzdG9yeS4K QEAgLTEyMDUsNyArMTE5NCw3IEBACiAgICAgICAgICMgR2V0IGhpc3RvcnkgdG8gZXhwb3J0Lgog ICAgICAgICAjCiAgICAgICAgIGlmIGlkOgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5f Z2V0X2hpc3RvcnkoIHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGlwPTNERmE9CmxzZSwgY2hlY2tf YWNjZXNzaWJsZT0zRFRydWUgKQorICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5 X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBzZWxmLmQ9CmVjb2RlX2lkKCBpZCApLCB0 cmFucy51c2VyICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVXNlIGN1cnJlbnQgaGlz dG9yeS4KICAgICAgICAgICAgIGhpc3RvcnkgPTNEIHRyYW5zLmhpc3RvcnkKQEAgLTEyNDMsNyAr MTIzMiw3IEBACiAgICAgQHdlYi5yZXF1aXJlX2xvZ2luKCAiZ2V0IGhpc3RvcnkgbmFtZSBhbmQg bGluayIgKQogICAgIGRlZiBnZXRfbmFtZV9hbmRfbGlua19hc3luYyggc2VsZiwgdHJhbnMsIGlk PTNETm9uZSApOgogICAgICAgICAiIiIgUmV0dXJucyBoaXN0b3J5J3MgbmFtZSBhbmQgbGluay4g IiIiCi0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaWQsIEZh bHNlICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0X2FjY2Vz c2libGUoIHRyYW5zLCBzZWxmLmRlY29kPQplX2lkKCBpZCApLCB0cmFucy51c2VyICkKICAgICAg ICAgaWYgc2VsZi5jcmVhdGVfaXRlbV9zbHVnKCB0cmFucy5zYV9zZXNzaW9uLCBoaXN0b3J5ICk6 CiAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKICAgICAgICAgcmV0dXJuX2Rp Y3QgPTNEIHsKQEAgLTEyNTcsNyArMTI0Niw3IEBACiAgICAgQHdlYi5yZXF1aXJlX2xvZ2luKCAi c2V0IGhpc3RvcnkncyBhY2Nlc3NpYmxlIGZsYWciICkKICAgICBkZWYgc2V0X2FjY2Vzc2libGVf YXN5bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5vbmUsIGFjY2Vzc2libGU9M0RGYWxzZSApOgogICAg ICAgICAiIiIgU2V0IGhpc3RvcnkncyBpbXBvcnRhYmxlIGF0dHJpYnV0ZSBhbmQgc2x1Zy4gIiIi Ci0gICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaWQsIFRydWUg KQorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRy YW5zLCBzZWxmLmRlY29kZV9pZCg9CiBpZCApLCB0cmFucy51c2VyICkKICAgICAgICAgIyBPbmx5 IHNldCBpZiBpbXBvcnRhYmxlIHZhbHVlIHdvdWxkIGNoYW5nZTsgdGhpcyBwcmV2ZW50cyBhIGNo YW5nPQplIGluIHRoZSB1cGRhdGVfdGltZSB1bmxlc3MgYXR0cmlidXRlIHJlYWxseSBjaGFuZ2Vk LgogICAgICAgICBpbXBvcnRhYmxlID0zRCBhY2Nlc3NpYmxlIGluIFsnVHJ1ZScsICd0cnVlJywg J3QnLCAnVCddOwogICAgICAgICBpZiBoaXN0b3J5IGFuZCBoaXN0b3J5LmltcG9ydGFibGUgIT0z RCBpbXBvcnRhYmxlOgpAQCAtMTMwNiwxMSArMTI5NSwxMSBAQAogICAgICAgICAjIERvIGltcG9y dC4KICAgICAgICAgaWYgbm90IGlkOgogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJy b3JfbWVzc2FnZSggIllvdSBtdXN0IHNwZWNpZnkgYSBoaXN0b3J5IHk9Cm91IHdhbnQgdG8gaW1w b3J0Ljxicj5Zb3UgY2FuICVzLiIgJSByZWZlcmVyX21lc3NhZ2UsIHVzZV9wYW5lbHM9M0RUcnVl ICkKLSAgICAgICAgaW1wb3J0X2hpc3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywg aWQsIGNoZWNrX293bmVyc2hpcD0KPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RGYWxzZSAp CisgICAgICAgIGltcG9ydF9oaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5ieV9pZCgg dHJhbnMsIHNlbGYuZGVjb2RlXz0KaWQoIGlkICkgKQogICAgICAgICBpZiBub3QgaW1wb3J0X2hp c3Rvcnk6CiAgICAgICAgICAgICByZXR1cm4gdHJhbnMuc2hvd19lcnJvcl9tZXNzYWdlKCAiVGhl IHNwZWNpZmllZCBoaXN0b3J5IGRvZXMgbj0Kb3QgZXhpc3QuPGJyPllvdSBjYW4gJXMuIiAlIHJl ZmVyZXJfbWVzc2FnZSwgdXNlX3BhbmVscz0zRFRydWUgKQogICAgICAgICAjIEhpc3RvcnkgaXMg aW1wb3J0YWJsZSBpZiB1c2VyIGlzIGFkbWluIG9yIGl0J3MgYWNjZXNzaWJsZS4gVE9ETzo9CiBw cm9iYWJseSB3YW50IHRvIGhhdmUgYXBwIHNldHRpbmcgdG8gZW5hYmxlIGFkbWluIGFjY2VzcyB0 byBoaXN0b3JpZXMuCi0gICAgICAgIGlmIG5vdCB0cmFucy51c2VyX2lzX2FkbWluKCkgYW5kIG5v dCBzZWxmLnNlY3VyaXR5X2NoZWNrKCB0cmFucywgaT0KbXBvcnRfaGlzdG9yeSwgY2hlY2tfb3du ZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9M0RUcnVlICk6CisgICAgICAgIGlmIG5v dCBzZWxmLmhpc3RvcnlfbWFuYWdlci5pc19hY2Nlc3NpYmxlKCB0cmFucywgaW1wb3J0X2hpc3Rv cnksID0KdHJhbnMudXNlciApOgogICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3Jf bWVzc2FnZSggIllvdSBjYW5ub3QgYWNjZXNzIHRoaXMgaGlzdG89CnJ5Ljxicj5Zb3UgY2FuICVz LiIgJSByZWZlcmVyX21lc3NhZ2UsIHVzZV9wYW5lbHM9M0RUcnVlICkKICAgICAgICAgaWYgdXNl cjoKICAgICAgICAgICAgICNkYW46IEkgY2FuIGltcG9ydCBteSBvd24gaGlzdG9yeS4KQEAgLTEz NzYsNyArMTM2NSw3IEBACiAgICAgICAgIGhpc3RvcmllcyA9M0QgW10KICAgICAgICAgY3VyX25h bWVzID0zRCBbXQogICAgICAgICBmb3IgaGlzdG9yeV9pZCBpbiBpZDoKLSAgICAgICAgICAgIGhp c3RvcnkgPTNEIHNlbGYuX2dldF9oaXN0b3J5KCB0cmFucywgaGlzdG9yeV9pZCApCisgICAgICAg ICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRyYW5zLCBz ZWxmLmRlY29kZT0KX2lkKCBoaXN0b3J5X2lkICksIHRyYW5zLnVzZXIgKQogICAgICAgICAgICAg aWYgaGlzdG9yeSBhbmQgaGlzdG9yeS51c2VyX2lkID0zRD0zRCB1c2VyLmlkOgogICAgICAgICAg ICAgICAgIGhpc3Rvcmllcy5hcHBlbmQoIGhpc3RvcnkgKQogICAgICAgICAgICAgICAgIGN1cl9u YW1lcy5hcHBlbmQoIGhpc3RvcnkuZ2V0X2Rpc3BsYXlfbmFtZSgpICkKQEAgLTE0MTgsNyArMTQw Nyw3IEBACiAgICAgICAgICAgICBpZHMgPTNEIGdhbGF4eS51dGlsLmxpc3RpZnkoIGlkICkKICAg ICAgICAgICAgIGhpc3RvcmllcyA9M0QgW10KICAgICAgICAgICAgIGZvciBoaXN0b3J5X2lkIGlu IGlkczoKLSAgICAgICAgICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLl9nZXRfaGlzdG9yeSggdHJh bnMsIGhpc3RvcnlfaWQsIGNoZWNrX293PQpuZXJzaGlwPTNERmFsc2UgKQorICAgICAgICAgICAg ICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFu cywgc2U9CmxmLmRlY29kZV9pZCggaGlzdG9yeV9pZCApLCB0cmFucy51c2VyICkKICAgICAgICAg ICAgICAgICBoaXN0b3JpZXMuYXBwZW5kKCBoaXN0b3J5ICkKICAgICAgICAgdXNlciA9M0QgdHJh bnMuZ2V0X3VzZXIoKQogICAgICAgICBmb3IgaGlzdG9yeSBpbiBoaXN0b3JpZXM6CkBAIC0xNDU1 LDcgKzE0NDQsNyBAQAogICAgICAgICByZXR1cm4gdHJhbnMucmVzcG9uc2Uuc2VuZF9yZWRpcmVj dCggdXJsX2ZvciggIi8iICkgKQo9MjAKICAgICBkZWYgZ2V0X2l0ZW0oIHNlbGYsIHRyYW5zLCBp ZCApOgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2hpc3RvcnkoIHRyYW5zLCBpZCApCisgICAg ICAgIHJldHVybiBzZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfb3duZWQoIHRyYW5zLCBzZWxmLmRl Y29kZV9pZCggaWQgKT0KLCB0cmFucy51c2VyICkKICAgICAgICAgI1RPRE86IG92ZXJyaWRlIG9m IGJhc2UgdWkgY29udHJvbGxlcj8KPTIwCiAgICAgZGVmIGhpc3RvcnlfZGF0YSggc2VsZiwgdHJh bnMsIGhpc3RvcnkgKToKQEAgLTE0NzAsNyArMTQ1OSw3IEBACiAgICAgICAgICIiIgogICAgICAg ICAiIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5 X21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBzZWxmLmRlY289CmRlX2lkKCBpZCApLCB0cmFu cy51c2VyICkKKyAgICAgICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdl dF9vd25lZCggdHJhbnMsIHNlbGYuZGVjb2RlPQpfaWQoIGlkICksIHRyYW5zLnVzZXIgKQogICAg ICAgICAgICAgdHJhbnMuc2V0X2hpc3RvcnkoIGhpc3RvcnkgKQogICAgICAgICAgICAgcmV0dXJu IHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGlzdG89 CnJ5LCB2aWV3PTNEJ2RldGFpbGVkJyApCiAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLk1lc3Nh Z2VFeGNlcHRpb24sIG1zZ19leGM6CgpkaWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4Yjhm OWM1NWMyMzg0NDk3NTAgLXIgOGVlZmMwOWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2 NDIxIGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvcGFnZS5weQotLS0gYS9s aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3BhZ2UucHkKKysrIGIvbGliL2dh bGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy9wYWdlLnB5CkBAIC03MjksNyArNzI5LDcg QEAKICAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOiBzaG91bGQgYmUgbW92ZWQgdG8gaGlzdG9y eSBjb250cm9sbGVyIGFuZC9vciBjYWxsZWQgdmlhIGFqYT0KeCBmcm9tIHRoZSB0ZW1wbGF0ZQog ICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9pZCggaWQgKQotICAgICAgICBoaXN0 b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5hY2Nlc3NpYmxlX2J5X2lkKCB0cmFucywgZGVj b2RlZF89CmlkLCB0cmFucy51c2VyICkKKyAgICAgICAgaGlzdG9yeSA9M0Qgc2VsZi5oaXN0b3J5 X21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBkZWNvZGVkX2lkPQosIHRyYW5zLnVzZXIg KQogICAgICAgICBpZiBub3QgaGlzdG9yeToKICAgICAgICAgICAgIHJldHVybiBOb25lCj0yMApA QCAtNzc4LDggKzc3OCw4IEBACj0yMAogICAgICAgICBlbGlmIGl0ZW1fY2xhc3MgPTNEPTNEIG1v ZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb246CiAgICAgICAgICAgICBkZWNvZGVkX2lkID0z RCBzZWxmLmRlY29kZV9pZCggaXRlbV9pZCApCi0gICAgICAgICAgICBkYXRhc2V0ID0zRCBzZWxm LmhkYV9tYW5hZ2VyLmFjY2Vzc2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkXz0KaWQsIHRyYW5z LnVzZXIgKQotICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5lcnJvcl9p Zl91cGxvYWRpbmcoIGRhdGFzZXQgKQorICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFf bWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIGRlY29kZWRfaWQ9CiwgdHJhbnMudXNlciAp CisgICAgICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmVycm9yX2lmX3VwbG9h ZGluZyggdHJhbnMsIGRhdGFzZT0KdCApCj0yMAogICAgICAgICAgICAgZGF0YXNldC5hbm5vdGF0 aW9uID0zRCBzZWxmLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCB0cmFucy5zYV89CnNlc3Npb24s IGRhdGFzZXQuaGlzdG9yeS51c2VyLCBkYXRhc2V0ICkKICAgICAgICAgICAgIGlmIGRhdGFzZXQ6 CgpkaWZmIC1yIDY5Yzc0YmM5OTYyNWUzNjNiZWNhZDA4YjhmOWM1NWMyMzg0NDk3NTAgLXIgOGVl ZmMwOWM0MWRjZmMzOTllMzdlMjA9CjhjYzcwYzBmMzM0OTE2NDIxIGxpYi9nYWxheHkvd2ViYXBw cy9nYWxheHkvY29udHJvbGxlcnMvdmlzdWFsaXphdGlvbi5weQotLS0gYS9saWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3Zpc3VhbGl6YXRpb24ucHkKKysrIGIvbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy92aXN1YWxpemF0aW9uLnB5CkBAIC04NjcsNyAr ODY3LDcgQEAKICAgICAgICAgICAgIGRia2V5ID0zRCBOb25lCiAgICAgICAgICAgICBpZiBuZXdf ZGF0YXNldF9pZDoKICAgICAgICAgICAgICAgICBkZWNvZGVkX2lkID0zRCBzZWxmLmRlY29kZV9p ZCggbmV3X2RhdGFzZXRfaWQgKQotICAgICAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFu YWdlci5vd25lZF9ieV9pZCggdHJhbnMsIGRlY29kZWRfaWQsIHQ9CnJhbnMudXNlciApCisgICAg ICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9vd25lZCggdHJhbnMsIGRl Y29kZWRfaWQsIHRyYT0KbnMudXNlciApCiAgICAgICAgICAgICAgICAgZGJrZXkgPTNEIGhkYS5k YmtleQogICAgICAgICAgICAgICAgIGlmIGRia2V5ID0zRD0zRCAnPyc6CiAgICAgICAgICAgICAg ICAgICAgIGRia2V5ID0zRCBrd2FyZ3MuZ2V0KCAiZGJrZXkiLCBOb25lICkKQEAgLTk3Nyw3ICs5 NzcsNyBAQAogICAgICAgICAgICAgdml6ID0zRCBzZWxmLmdldF92aXN1YWxpemF0aW9uKCB0cmFu cywgaWQgKQogICAgICAgICAgICAgdml6X2NvbmZpZyA9M0Qgc2VsZi5nZXRfdmlzdWFsaXphdGlv bl9jb25maWcoIHRyYW5zLCB2aXogKQogICAgICAgICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5k ZWNvZGVfaWQoIHZpel9jb25maWdbICdkYXRhc2V0X2lkJyBdICkKLSAgICAgICAgICAgIGRhdGFz ZXQgPTNEIHNlbGYuaGRhX21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0 PQpyYW5zLnVzZXIgKQorICAgICAgICAgICAgZGF0YXNldCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5n ZXRfb3duZWQoIHRyYW5zLCBkZWNvZGVkX2lkLCB0cmE9Cm5zLnVzZXIgKQogICAgICAgICBlbHNl OgogICAgICAgICAgICAgIyBMb2FkaW5nIG5ldyB2aXN1YWxpemF0aW9uLgogICAgICAgICAgICAg ZGF0YXNldCA9M0Qgc2VsZi5nZXRfaGRhX29yX2xkZGEoIHRyYW5zLCBoZGFfbGRkYSwgZGF0YXNl dF9pZCApCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogICAgICAgICAjIGdldCB0aGUgaGRhIGlmIHdl IGNhbiwgdGhlbiBpdHMgZGF0YSB1c2luZyB0aGUgcGh5bG92aXogcGFyc2VycwogICAgICAgICBp ZiBkYXRhc2V0X2lkOgogICAgICAgICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNvZGVfaWQo IGRhdGFzZXRfaWQgKQotICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmFjY2Vz c2libGVfYnlfaWQoIHRyYW5zLCBkZWNvZGVkX2lkLCA9CnRyYW5zLnVzZXIgKQorICAgICAgICAg ICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0cmFucywgZGVjb2Rl ZF9pZCwgdHI9CmFucy51c2VyICkKICAgICAgICAgICAgIGhkYSA9M0Qgc2VsZi5oZGFfbWFuYWdl ci5lcnJvcl9pZl91cGxvYWRpbmcoIGhkYSApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBy ZXR1cm4gdHJhbnMuc2hvd19tZXNzYWdlKCAiUGh5bG92aXogY291bGRuJ3QgZmluZCBhIGRhdGFz ZXRfaT0KZCIgKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv Y29tbWl0cy83YTkwZDQwNTMxM2QvCkNoYW5nZXNldDogICA3YTkwZDQwNTMxM2QKVXNlcjogICAg ICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMTIgMTk6MTU6NDIrMDA6MDAK U3VtbWFyeTogICAgIFJlbW92ZSB0cmFucyBmcm9tIG1ldGhvZCBib2RpZXMgd2hlcmUgcG9zc2li bGUKQWZmZWN0ZWQgIzogIDkgZmlsZXMKCmRpZmYgLXIgOGVlZmMwOWM0MWRjZmMzOTllMzdlMjA4 Y2M3MGMwZjMzNDkxNjQyMSAtciA3YTkwZDQwNTMxM2RkNGUzNzFlZTEzOT0KMjc5N2JhMDI5YTJh MDViMTEgbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdl cnMvYmFzZS5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKQEAgLTY0NCw3ICs2 NDQsNyBAQAogICAgICAgICBTZXJpYWxpemUgYW4gaWQgYXR0cmlidXRlIG9mIGBpdGVtYC4KICAg ICAgICAgIiIiCiAgICAgICAgIGlkID0zRCBnZXRhdHRyKCBpdGVtLCBrZXkgKQotICAgICAgICBy ZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBpZCApIGlmIGlkIGlzIG5vdCBOb25lIGVs c2UgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5hcHAuc2VjdXJpdHkuZW5jb2RlX2lkKCBpZCAp IGlmIGlkIGlzIG5vdCBOb25lIGVsc2UgTm89Cm5lCj0yMAogICAgICNUT0RPOiBBbm5vdGF0YWJs ZU1peGluCiAgICAgZGVmIHNlcmlhbGl6ZV9hbm5vdGF0aW9uKCBzZWxmLCB0cmFucywgaXRlbSwg a2V5ICk6CkBAIC02NTQsNyArNjU0LDggQEAKICNUT0RPOiB3aGljaCBpcyBjb3JyZWN0IGhlcmU/ CiAgICAgICAgICN1c2VyID0zRCBpdGVtLnVzZXIKICAgICAgICAgdXNlciA9M0QgdHJhbnMudXNl cgotICAgICAgICByZXR1cm4gaXRlbS5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMuc2Ff c2Vzc2lvbiwgdXNlciwgaXRlbSApCisgICAgICAgIHNhX3Nlc3Npb24gPTNEIHNlbGYuYXBwLm1v ZGVsLmNvbnRleHQKKyAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIo IHNhX3Nlc3Npb24sIHVzZXIsIGl0ZW0gKQo9MjAKICAgICAjVE9ETzogVGFnZ2FibGVNaXhpbgog ICAgIGRlZiBzZXJpYWxpemVfdGFncyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSApOgpAQCAtNzQ1 LDYgKzc0Niw3IEBACiAgICAgICAgIENvbnZlcnQgYW4gaW5jb21pbmcgc2VyaWFsaXplZCBkaWN0 IGludG8gdmFsdWVzIHRoYXQgY2FuIGJlCiAgICAgICAgIGRpcmVjdGx5IGFzc2lnbmVkIHRvIGFu IGl0ZW0ncyBhdHRyaWJ1dGVzIGFuZCBhc3NpZ24gdGhlbQogICAgICAgICAiIiIKKyAgICAgICAg c2Ffc2Vzc2lvbiA9M0Qgc2VsZi5hcHAubW9kZWwuY29udGV4dAogICAgICAgICBuZXdfZGljdCA9 M0Qge30KICAgICAgICAgZm9yIGtleSwgdmFsIGluIGRhdGEuaXRlbXMoKToKICAgICAgICAgICAg IGlmIGtleSBpbiBzZWxmLmRlc2VyaWFsaXplcnM6CkBAIC03NTMsOCArNzU1LDggQEAKPTIwCiAg ICAgICAgICNUT0RPOj8/IGFkZCBhbmQgZmx1c2ggaGVyZSBvciBpbiBtYW5hZ2VyPwogICAgICAg ICBpZiBmbHVzaCBhbmQgbGVuKCBuZXdfZGljdCApOgotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5hZGQoIGl0ZW0gKQotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisg ICAgICAgICAgICBzYV9zZXNzaW9uLmFkZCggaXRlbSApCisgICAgICAgICAgICBzYV9zZXNzaW9u LmZsdXNoKCkKPTIwCiAgICAgICAgIHJldHVybiBuZXdfZGljdAo9MjAKQEAgLTg5MSwxMCArODkz LDEwIEBACiAgICAgICAgICNUT0RPOiBpcyB0aGlzIGNvcnJlY3Q/CiAgICAgICAgIGlmIHZhbCBp cyBOb25lOgogICAgICAgICAgICAgcmV0dXJuICc/JwotICAgICAgICAjIHdvdC4uLndoeSB0dXBs ZXM/Ci0gICAgICAgIGlmIHZhbCBub3QgaW4gZGljdCggdHJhbnMuZGJfYnVpbGRzICk6Ci0gICAg ICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9u KCAiaW52YWxpZCByZT0KZmVyZW5jZSIsIGtleT0zRGtleSwgdmFsPTNEdmFsICkKLSAgICAgICAg cmV0dXJuIHZhbAorICAgICAgICBmb3IgZ2Vub21lX2J1aWxkX3Nob3J0bmFtZSwgbG9uZ25hbWUg aW4gc2VsZi5hcHAuZ2Vub21lX2J1aWxkcy5nZXQ9Cl9nZW5vbWVfYnVpbGRfbmFtZXMoIHRyYW5z PTNEdHJhbnMgKToKKyAgICAgICAgICAgIGlmIHZhbCA9M0Q9M0QgZ2Vub21lX2J1aWxkX3Nob3J0 bmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAgIHJhaXNlIGV4Y2VwdGlv bnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24oICJpbnZhbGlkIHJlZmVyZT0KbmNl Iiwga2V5PTNEa2V5LCB2YWw9M0R2YWwgKQo9MjAKICAgICAjZGVmIHNsdWcoIHNlbGYsIHRyYW5z LCBpdGVtLCBrZXksIHZhbCApOgogICAgICMgICAgIiIidmFsaWRhdGUgc2x1ZyIiIgoKZGlmZiAt ciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMDhjYzcwYzBmMzM0OTE2NDIxIC1yIDdhOTBkNDA1MzEz ZGQ0ZTM3MWVlMTM5PQoyNzk3YmEwMjlhMmEwNWIxMSBsaWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFz ZXRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKKysrIGIvbGliL2dh bGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQpAQCAtMjEsNiArMjEsOCBAQAogICAgIGRlZmF1bHRf b3JkZXJfYnkgPTNEICggbW9kZWwuRGF0YXNldC5jcmVhdGVfdGltZSwgKQogICAgIGZvcmVpZ25f a2V5X25hbWUgPTNEICdkYXRhc2V0Jwo9MjAKKyAgICAjVE9ETzo/PyBnZXQgKyBlcnJvcl9pZl91 cGxvYWRpbmcgaXMgY29tbW9uIHBhdHRlcm4sIHNob3VsZCB1cGxvYWQgY2hlPQpjayBiZSB3b3Jr ZWQgaW50byBhY2Nlc3Mvb3dlZD8KKwogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAg ICAgICAgIHN1cGVyKCBEYXRhc2V0TWFuYWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQogICAg ICAgICAjIG5lZWQgZm9yIGFkbWluIHRlc3QKQEAgLTM1LDkgKzM3LDkgQEAKICAgICAgICAga3dh cmdzLnVwZGF0ZSggZGljdCggc3RhdGU9M0QoIGt3YXJncy5nZXQoICdzdGF0ZScsIG1vZGVsLkRh dGFzZXQuPQpzdGF0ZXMuTkVXICkgKSApICkKICAgICAgICAgZGF0YXNldCA9M0QgbW9kZWwuRGF0 YXNldCggKiprd2FyZ3MgKQo9MjAKLSAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGRhdGFz ZXQgKQorICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmFkZCggZGF0YXNldCApCiAgICAg ICAgIGlmIGZsdXNoOgotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAg ICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmZsdXNoKCkKICAgICAgICAgcmV0dXJuIGRh dGFzZXQKPTIwCiAgICAgI2RlZiBjb3B5KCBzZWxmLCBkYXRhc2V0LCAqKmt3YXJncyApOgpAQCAt NjEsOSArNjMsOSBAQAo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZWxldGUKICAgICAj VE9ETzogdGhpcyBtYXkgYmUgbW9yZSBjb252LiBzb21ld2hlcmUgZWxzZQotI1RPRE86IGFsbG93 IGFkbWluIGJ5cGFzcworI1RPRE86IGhvdyB0byBhbGxvdyBhZG1pbiBieXBhc3M/CiAgICAgZGVm IGVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2FsbG93ZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBt c2c9M0ROb25lID0KKToKLSAgICAgICAgaWYgbm90IHRyYW5zLmFwcC5jb25maWcuYWxsb3dfdXNl cl9kYXRhc2V0X3B1cmdlOgorICAgICAgICBpZiBub3Qgc2VsZi5hcHAuY29uZmlnLmFsbG93X3Vz ZXJfZGF0YXNldF9wdXJnZToKICAgICAgICAgICAgIG1zZyA9M0QgbXNnIG9yICdUaGlzIGluc3Rh bmNlIGRvZXMgbm90IGFsbG93IHVzZXIgZGF0YXNldCBwdXJnPQppbmcnCiAgICAgICAgICAgICBy YWlzZSBleGNlcHRpb25zLkNvbmZpZ0RvZXNOb3RBbGxvd0V4Y2VwdGlvbiggbXNnICkKICAgICAg ICAgcmV0dXJuIGl0ZW0KQEAgLTc5LDkgKzgxLDkgQEAKPTIwCiAgICAgICAgICMgdGhlIGZvbGxv d2luZyBhbHNvIG1hcmtzIGRhdGFzZXQgYXMgcHVyZ2VkIGFuZCBkZWxldGVkCiAgICAgICAgIGRh dGFzZXQuZnVsbF9kZWxldGUoKQotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggZGF0YXNl dCApCisgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRkKCBkYXRhc2V0ICkKICAgICAg ICAgaWYgZmx1c2g6Ci0gICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAg ICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQogICAgICAgICByZXR1cm4gZGF0 YXNldAo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBhY2Nlc3NpYmlsaXR5CkBAIC0xMDIs MjAgKzEwNCwyMCBAQAogICAgICAgICBSZXR1cm4gVC9GIGlmIHRoZSB1c2VyIGhhcyByb2xlLWJh c2VkIGFjY2VzcyB0byB0aGUgZGF0YXNldC4KICAgICAgICAgIiIiCiAgICAgICAgIHJvbGVzID0z RCB1c2VyLmFsbF9yb2xlcygpIGlmIHVzZXIgZWxzZSBbXQotICAgICAgICByZXR1cm4gdHJhbnMu YXBwLnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfZGF0YXNldCggcm9sZXMsIGRhdGFzZXQ9CiAp CisgICAgICAgIHJldHVybiBzZWxmLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFz ZXQoIHJvbGVzLCBkYXRhc2V0ICkKPTIwCiAjVE9ETzogdGhlc2UgbmVlZCB3b3JrCiAgICAgZGVm IF9hY2Nlc3NfcGVybWlzc2lvbiggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXI9M0ROb25lLCBy b2xlPTNETm9uZT0KICk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gbW9zdCByZWNlbnQg RGF0YXNldFBlcm1pc3Npb25zIGZvciB0aGUgZGF0YXNldCBhbmQgdXNlci4KICAgICAgICAgIiIi Ci0gICAgICAgIHNlY3VyaXR5X2FnZW50ID0zRCB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQKKyAg ICAgICAgc2VjdXJpdHlfYWdlbnQgPTNEIHNlbGYuYXBwLnNlY3VyaXR5X2FnZW50CiAgICAgICAg IGFjY2Vzc19hY3Rpb24gPTNEIHNlY3VyaXR5X2FnZW50LnBlcm1pdHRlZF9hY3Rpb25zLkRBVEFT RVRfQUNDRVNTLj0KYWN0aW9uCj0yMAogICAgICAgICAjIGdldCBhIGxpc3Qgb2Ygcm9sZSBpZHMg dG8gY2hlY2sgYWNjZXNzIGZvciAoZGVmYXVsdGluZyB0byBhbGxfcm89CmxlcykKICAgICAgICAg dXNlcl9yb2xlcyA9M0QgWyByb2xlIF0gaWYgcm9sZSBlbHNlIHVzZXIuYWxsX3JvbGVzKCkKICAg ICAgICAgdXNlcl9yb2xlX2lkcyA9M0QgWyByb2xlLmlkIGZvciByb2xlIGluIHVzZXJfcm9sZXMg XQotICAgICAgICBxdWVyeSA9M0QgKCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5EYXRh c2V0UGVybWlzc2lvbnMgKQorICAgICAgICBxdWVyeSA9M0QgKCBzZWxmLmFwcC5tb2RlbC5jb250 ZXh0LnF1ZXJ5KCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnM9CiApCiAgICAgICAgICAgICAgICAg ICAgIC5maWx0ZXIoIG1vZGVsLkRhdGFzZXRQZXJtaXNzaW9ucy5hY3Rpb24gPTNEPTNEIGFjY2Vz cz0KX2FjdGlvbiApCiAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIG1vZGVsLkRhdGFzZXRQ ZXJtaXNzaW9ucy5kYXRhc2V0ID0zRD0zRCBkYXRhcz0KZXQgKQogICAgICAgICAgICAgICAgICAg ICAuZmlsdGVyKCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnMucm9sZV9pZC5pbl8oIHVzZXJfcm89 CmxlX2lkcyApICkgKQpAQCAtMTI2LDE4ICsxMjgsMTggQEAKICAgICAgICAgIiIiCiAgICAgICAg IENyZWF0ZSBhIG5ldyBEYXRhc2V0UGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiBkYXRhc2V0IGFu ZCByb2xlLgogICAgICAgICAiIiIKLSAgICAgICAgYWNjZXNzX2FjdGlvbiA9M0QgdHJhbnMuYXBw LnNlY3VyaXR5X2FnZW50LnBlcm1pdHRlZF9hY3Rpb25zLkRBVEFTPQpFVF9BQ0NFU1MuYWN0aW9u CisgICAgICAgIGFjY2Vzc19hY3Rpb24gPTNEIHNlbGYuYXBwLnNlY3VyaXR5X2FnZW50LnBlcm1p dHRlZF9hY3Rpb25zLkRBVEFTRT0KVF9BQ0NFU1MuYWN0aW9uCiAgICAgICAgIHBlcm1pc3Npb24g PTNEIG1vZGVsLkRhdGFzZXRQZXJtaXNzaW9ucyggYWNjZXNzX2FjdGlvbiwgZGF0YXNldCwgcj0K b2xlICkKLSAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHBlcm1pc3Npb24gKQorICAgICAg ICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmFkZCggcGVybWlzc2lvbiApCiAgICAgICAgIGlmIGZs dXNoOgotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgICAgICBz ZWxmLmFwcC5tb2RlbC5jb250ZXh0LmZsdXNoKCkKICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb24K PTIwCiAgICAgI2RlZiBnaXZlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0YXNl dCwgdXNlciwgZmx1c2g9M0RUcnVlID0KKToKICAgICAjICAgICIiIgogICAgICMgICAgIiIiCiAg ICAgIyAgICAjIGZvciBub3csIHVzZSB0aGUgdXNlcidzIHByaXZhdGUgcm9sZQotICAgICMgICAg c2VjdXJpdHlfYWdlbnQgPTNEIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudAorICAgICMgICAgc2Vj dXJpdHlfYWdlbnQgPTNEIHNlbGYuYXBwLnNlY3VyaXR5X2FnZW50CiAgICAgIyAgICB1c2VyX3Jv bGUgPTNEIHNlY3VyaXR5X2FnZW50LmdldF9wcml2YXRlX3VzZXJfcm9sZSggdXNlciApCiAgICAg IwogICAgICMgICAgZXhpc3RpbmdfcGVybWlzc2lvbiA9M0Qgc2VsZi5fYWNjZXNzX3Blcm1pc3Np b24oIHRyYW5zLCBkYXRhc2V0LCA9CnJvbGU9M0R1c2VyX3JvbGUgKQpAQCAtMTUzLDkgKzE1NSw5 IEBACiAgICAgIyAgICAjcGVybWlzc2lvbnMgPTNEIHsgYWNjZXNzX2FjdGlvbiA6IFsgdXNlcl9y b2xlIF0gfQogICAgICMgICAgI3NlY3VyaXR5X2FnZW50LnNldF9kYXRhc2V0X3Blcm1pc3Npb24o IGRhdGFzZXQsIHBlcm1pc3Npb25zICkKICAgICAjCi0gICAgIyAgICAjdHJhbnMuc2Ffc2Vzc2lv bi5hZGQoIGRhdGFzZXQgKQorICAgICMgICAgI3NlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRkKCBk YXRhc2V0ICkKICAgICAjICAgICNpZiBmbHVzaDoKLSAgICAjICAgICMgICAgdHJhbnMuc2Ffc2Vz c2lvbi5mbHVzaCgpCisgICAgIyAgICAjICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2go KQogICAgICMKICAgICAjICAgIGRibF9jaGsgPTNEIHNlbGYuX2FjY2Vzc19wZXJtaXNzaW9uKCB0 cmFucywgZGF0YXNldCwgcm9sZT0zRHVzZXJfPQpyb2xlICkKICAgICAjICAgIHByaW50ICdhY2Nl c3NfcGVybTonLCBkYmxfY2hrCkBAIC0yMzMsNyArMjM1LDggQEAKIGNsYXNzIERhdGFzZXRBc3Nv Y2lhdGlvbk1hbmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbElu PQp0ZXJmYWNlLCBiYXNlLlB1cmdhYmxlTW9kZWxJbnRlcmZhY2UgKToKICAgICAiIiIKICAgICAi IiIKLSAgICAjIEEgZGF0YXNldCBhc3NvY2lhdGlvbiBIQVMgYSBkYXRhc2V0IGJ1dCBjb250YWlu cyBtZXRhZGF0YSBzcGVjaWZpYyB0PQpvIGEgbGlicmFyeSAobGRhKSBvciB1c2VyIChoZGEpCisg ICAgIyBEQSdzIHdlcmUgbWVhbnQgdG8gYmUgcHJveGllcyAtIGJ1dCB3ZXJlIG5ldmVyIGZ1bGx5 IGltcGxlbWVudGVkIGFzID0KdGhlbQorICAgICMgSW5zdGVhZCwgYSBkYXRhc2V0IGFzc29jaWF0 aW9uIEhBUyBhIGRhdGFzZXQgYnV0IGNvbnRhaW5zIG1ldGFkYXRhIHM9CnBlY2lmaWMgdG8gYSBs aWJyYXJ5IChsZGEpIG9yIHVzZXIgKGhkYSkKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuRGF0 YXNldEluc3RhbmNlCiAgICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2RlbC5EYXRhc2V0LmNy ZWF0ZV90aW1lLCApCj0yMAoKZGlmZiAtciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMDhjYzcwYzBm MzM0OTE2NDIxIC1yIDdhOTBkNDA1MzEzZGQ0ZTM3MWVlMTM5PQoyNzk3YmEwMjlhMmEwNWIxMSBs aWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFz LnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQpAQCAtNjQsMTYgKzY0LDE2IEBA CiAgICAgICAgIGlmIG5vdCBkYXRhc2V0OgogICAgICAgICAgICAga3dhcmdzWyAnY3JlYXRlX2Rh dGFzZXQnIF0gPTNEIFRydWUKICAgICAgICAgaGRhID0zRCBzdXBlciggSERBTWFuYWdlciwgc2Vs ZiApLmNyZWF0ZSggdHJhbnMsIGZsdXNoPTNEZmx1c2gsCi0gICAgICAgICAgICBoaXN0b3J5PTNE aGlzdG9yeSwgZGF0YXNldD0zRGRhdGFzZXQsIHNhX3Nlc3Npb249M0R0cmFucy5zYV9zZT0Kc3Np b24sICoqa3dhcmdzICkKKyAgICAgICAgICAgIGhpc3Rvcnk9M0RoaXN0b3J5LCBkYXRhc2V0PTNE ZGF0YXNldCwgc2Ffc2Vzc2lvbj0zRHNlbGYuYXBwLm1vPQpkZWwuY29udGV4dCwgKiprd2FyZ3Mg KQo9MjAKICAgICAgICAgaWYgaGlzdG9yeToKICAgICAgICAgICAgIHNldF9oaWQgPTNEIG5vdCAo ICdoaWQnIGluIGt3YXJncyApCiAgICAgICAgICAgICBoaXN0b3J5LmFkZF9kYXRhc2V0KCBoZGEg KQogICAgICAgICAjVE9ETzo/PyBzb21lIGludGVybmFsIHNhbml0eSBjaGVjayBoZXJlIChvciBt YXliZSBpbiBhZGRfZGF0YXNldCk9CiB0byBtYWtlIHN1cmUgaGlkcyBhcmUgbm90IGR1cGVkPwo9 MjAKLSAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGhkYSApCisgICAgICAgIHNlbGYuYXBw Lm1vZGVsLmNvbnRleHQuYWRkKCBoZGEgKQogICAgICAgICBpZiBmbHVzaDoKLSAgICAgICAgICAg IHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29u dGV4dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiBoZGEKPTIwCiAgICAgZGVmIGNvcHkoIHNlbGYs IHRyYW5zLCBoZGEsIGhpc3Rvcnk9M0ROb25lLCAqKmt3YXJncyApOgpAQCAtMTA1LDE1ICsxMDUs MTUgQEAKICAgICAgICAgI1RPRE86IHVwZGF0ZSBmcm9tIGt3YXJncz8KPTIwCiAgICAgICAgICMg TmVlZCB0byBzZXQgYWZ0ZXIgZmx1c2hlZCwgYXMgTWV0YWRhdGFGaWxlcyByZXF1aXJlIGRhdGFz ZXQuaWQKLSAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGNvcHkgKQotICAgICAgICB0cmFu cy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5hZGQo IGNvcHkgKQorICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmZsdXNoKCkKICAgICAgICAg Y29weS5tZXRhZGF0YSA9M0QgaGRhLm1ldGFkYXRhCj0yMAogICAgICAgICAjIEluIHNvbWUgaW5z dGFuY2VzIHBlZWsgcmVsaWVzIG9uIGRhdGFzZXRfaWQsIGkuZS4gZ21hai56aXAgZm9yIHY9Cmll d2luZyBNQUZzCiAgICAgICAgIGlmIG5vdCBoZGEuZGF0YXR5cGUuY29weV9zYWZlX3BlZWs6CiAg ICAgICAgICAgICBjb3B5LnNldF9wZWVrKCkKPTIwCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24u Zmx1c2goKQorICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmZsdXNoKCkKICAgICAgICAg cmV0dXJuIGNvcHkKPTIwCiAgICAgZGVmIGNvcHlfbGRkYSggc2VsZiwgdHJhbnMsIGhpc3Rvcnks IGxkZGEsICoqa3dhcmdzICk6CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgIiIiCiAgICAg ICAgIFJhaXNlIGVycm9yIGlmIEhEQSBpcyBzdGlsbCB1cGxvYWRpbmcuCiAgICAgICAgICIiIgot ICAgICAgICBpZiBoZGEuc3RhdGUgPTNEPTNEIHRyYW5zLm1vZGVsLkRhdGFzZXQuc3RhdGVzLlVQ TE9BRDoKKyAgICAgICAgaWYgaGRhLnN0YXRlID0zRD0zRCBtb2RlbC5EYXRhc2V0LnN0YXRlcy5V UExPQUQ6CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkNvbmZsaWN0KCAiUGxlYXNlIHdh aXQgdW50aWwgdGhpcyBkYXRhc2V0IGZpbj0KaXNoZXMgdXBsb2FkaW5nIiApCiAgICAgICAgIHJl dHVybiBoZGEKPTIwCkBAIC0yMDAsMTIgKzIwMCwxMiBAQAogICAgICAgICBSZXR1cm4gZGljdGlv bmFyeSBjb250YWluaW5nIG9sZC1zdHlsZSBkaXNwbGF5IGFwcCB1cmxzLgogICAgICAgICAiIiIK ICAgICAgICAgZGlzcGxheV9hcHBzID0zRCBbXQotICAgICAgICBpZiBub3QgdHJhbnMuYXBwLmNv bmZpZy5lbmFibGVfb2xkX2Rpc3BsYXlfYXBwbGljYXRpb25zOgorICAgICAgICBpZiBub3Qgc2Vs Zi5hcHAuY29uZmlnLmVuYWJsZV9vbGRfZGlzcGxheV9hcHBsaWNhdGlvbnM6CiAgICAgICAgICAg ICByZXR1cm4gZGlzcGxheV9hcHBzCj0yMAogICAgICAgICBmb3IgZGlzcGxheV9hcHAgaW4gaGRh LmRhdGF0eXBlLmdldF9kaXNwbGF5X3R5cGVzKCk6CiAgICAgICAgICAgICB0YXJnZXRfZnJhbWUs IGRpc3BsYXlfbGlua3MgPTNEIGhkYS5kYXRhdHlwZS5nZXRfZGlzcGxheV9saW5rcz0KKCBoZGEs Ci0gICAgICAgICAgICAgICAgZGlzcGxheV9hcHAsIHRyYW5zLmFwcCwgdHJhbnMucmVxdWVzdC5i YXNlICkKKyAgICAgICAgICAgICAgICBkaXNwbGF5X2FwcCwgc2VsZi5hcHAsIHRyYW5zLnJlcXVl c3QuYmFzZSApCj0yMAogICAgICAgICAgICAgaWYgbGVuKCBkaXNwbGF5X2xpbmtzICkgPiAwOgog ICAgICAgICAgICAgICAgIGRpc3BsYXlfbGFiZWwgPTNEIGhkYS5kYXRhdHlwZS5nZXRfZGlzcGxh eV9sYWJlbCggZGlzcGxheV89CmFwcCApCkBAIC0yMjYsOSArMjI2LDkgQEAKICAgICAgICAgIiIi CiAgICAgICAgICIiIgogICAgICAgICAjIHVzZSBvbGRlciBzeXN0ZW0gaWYgcmVnaXN0cnkgaXMg b2ZmIGluIHRoZSBjb25maWcKLSAgICAgICAgaWYgbm90IHRyYW5zLmFwcC52aXN1YWxpemF0aW9u c19yZWdpc3RyeToKKyAgICAgICAgaWYgbm90IHNlbGYuYXBwLnZpc3VhbGl6YXRpb25zX3JlZ2lz dHJ5OgogICAgICAgICAgICByZXR1cm4gaGRhLmdldF92aXN1YWxpemF0aW9ucygpCi0gICAgICAg IHJldHVybiB0cmFucy5hcHAudmlzdWFsaXphdGlvbnNfcmVnaXN0cnkuZ2V0X3Zpc3VhbGl6YXRp b25zKCB0cmFucz0KLCBoZGEgKQorICAgICAgICByZXR1cm4gc2VsZi5hcHAudmlzdWFsaXphdGlv bnNfcmVnaXN0cnkuZ2V0X3Zpc3VhbGl6YXRpb25zKCB0cmFucyw9CiBoZGEgKQo9MjAKICAgICAj VE9ETzogdG8gZGF0YSBwcm92aWRlciBvciBUZXh0IGRhdGF0eXBlIGRpcmVjdGx5CiAgICAgZGVm IHRleHRfZGF0YSggc2VsZiwgZGF0YXNldCwgcHJldmlldz0zRFRydWUgKToKQEAgLTI1OCw5ICsy NTgsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IGhkYToKICAgICAgICAgICAgIHJl dHVybiBoZGEuY29udmVyc2lvbl9tZXNzYWdlcy5OT19EQVRBCi0gICAgICAgIGlmIGhkYS5zdGF0 ZSA9M0Q9M0QgdHJhbnMuYXBwLm1vZGVsLkpvYi5zdGF0ZXMuRVJST1I6CisgICAgICAgIGlmIGhk YS5zdGF0ZSA9M0Q9M0QgbW9kZWwuSm9iLnN0YXRlcy5FUlJPUjoKICAgICAgICAgICAgIHJldHVy biBoZGEuY29udmVyc2lvbl9tZXNzYWdlcy5FUlJPUgotICAgICAgICBpZiBoZGEuc3RhdGUgIT0z RCB0cmFucy5hcHAubW9kZWwuSm9iLnN0YXRlcy5PSzoKKyAgICAgICAgaWYgaGRhLnN0YXRlICE9 M0QgbW9kZWwuSm9iLnN0YXRlcy5PSzoKICAgICAgICAgICAgIHJldHVybiBoZGEuY29udmVyc2lv bl9tZXNzYWdlcy5QRU5ESU5HCiAgICAgICAgIHJldHVybiBOb25lCj0yMApAQCAtNDgzLDcgKzQ4 Myw3IEBACiAgICAgICAgICAgICAjTk9URTogbm8gZmlsZXMKICAgICAgICAgICAgIGlmIGlzaW5z dGFuY2UoIHZhbCwgbW9kZWwuTWV0YWRhdGFGaWxlICk6CiAgICAgICAgICAgICAgICAgIyBvbmx5 IHdoZW4gZXhwbGljaXRseSBzZXQ6IGZldGNoaW5nIGZpbGVwYXRocyBjYW4gYmUgZXhwZT0KbnNp dmUKLSAgICAgICAgICAgICAgICBpZiBub3QgdHJhbnMuYXBwLmNvbmZpZy5leHBvc2VfZGF0YXNl dF9wYXRoOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFwcC5jb25maWcuZXhwb3NlX2Rh dGFzZXRfcGF0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAg ICB2YWwgPTNEIHZhbC5maWxlX25hbWUKICAgICAgICAgICAgICNUT0RPOj8gcG9zc2libHkgc3Bs aXQgdGhpcyBvZmY/CkBAIC01MTAsNyArNTEwLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgICIi IgogI1RPRE86IGFsbG93IGFkbWluCi0gICAgICAgIGlmIHRyYW5zLmFwcC5jb25maWcuZXhwb3Nl X2RhdGFzZXRfcGF0aDoKKyAgICAgICAgaWYgc2VsZi5hcHAuY29uZmlnLmV4cG9zZV9kYXRhc2V0 X3BhdGg6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGhkYS5maWxl X25hbWUKICAgICAgICAgICAgIGV4Y2VwdCBvYmplY3RzdG9yZS5PYmplY3ROb3RGb3VuZDoKQEAg LTUyMSw3ICs1MjEsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIiIiCiAgICAgICAgIHVybF9m b3IgPTNEIGdhbGF4eS53ZWIudXJsX2ZvcgotICAgICAgICBlbmNvZGVkX2lkID0zRCB0cmFucy5z ZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5pZCApCisgICAgICAgIGVuY29kZWRfaWQgPTNEIHNlbGYu c2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaWQgKQogICAgICAgICB1cmxzID0zRCB7CiAgICAgICAg ICAgICAncHVyZ2UnICAgICAgICAgOiB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ2RhdGFzZXQnLCBh Y3Rpb249M0QncD0KdXJnZV9hc3luYycsIGRhdGFzZXRfaWQ9M0RlbmNvZGVkX2lkICksCiAgICAg ICAgICAgICAnZGlzcGxheScgICAgICAgOiB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ2RhdGFzZXQn LCBhY3Rpb249M0QnZD0KaXNwbGF5JywgZGF0YXNldF9pZD0zRGVuY29kZWRfaWQsIHByZXZpZXc9 M0RUcnVlICksCgpkaWZmIC1yIDhlZWZjMDljNDFkY2ZjMzk5ZTM3ZTIwOGNjNzBjMGYzMzQ5MTY0 MjEgLXIgN2E5MGQ0MDUzMTNkZDRlMzcxZWUxMzk9CjI3OTdiYTAyOWEyYTA1YjExIGxpYi9nYWxh eHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9y aWVzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC00NCw2ICs0 NCw3IEBACiAgICAgZGVmIG1vc3RfcmVjZW50KCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3Mg KToKICAgICAgICAgIiIiCiAgICAgICAgICIiIgorI1RPRE86IG5vcm1hbGl6ZSB0aGlzCiAgICAg ICAgIGlmIG5vdCB1c2VyOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUgaWYgdHJhbnMuaGlzdG9y eS5kZWxldGVkIGVsc2UgdHJhbnMuaGlzdG9yeQogICAgICAgICBkZXNjX3VwZGF0ZV90aW1lID0z RCBzZWxmLm1vZGVsX2NsYXNzLnRhYmxlLmMudXBkYXRlX3RpbWUKQEAgLTEyNywxOSArMTI4LDE5 IEBACiAgICAgICAgICAgICBmb3IgY29udGVudCBpbiBoaXN0b3J5LmNvbnRlbnRzX2l0ZXIoIHR5 cGVzPTNEWyAnZGF0YXNldCcsICdkYT0KdGFzZXRfY29sbGVjdGlvbicgXSApOgogICAgICAgICAg ICAgICAgIGNvbnRlbnRzX2RpY3QgPTNEIHt9Cj0yMAotICAgICAgICAgICAgICAgIGlmIGlzaW5z dGFuY2UoIGNvbnRlbnQsIHRyYW5zLmFwcC5tb2RlbC5IaXN0b3J5RGF0YXNldEFzc289CmNpYXRp b24gKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCBjb250ZW50LCBtb2RlbC5IaXN0 b3J5RGF0YXNldEFzc29jaWF0aW9uICk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzX2Rp Y3QgPTNEIGhkYV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cj0KYW5zLCBjb250ZW50 LCB2aWV3PTNEJ2RldGFpbGVkJyApCj0yMAotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSggY29udGVudCwgdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0Q289CmxsZWN0aW9uQXNz b2NpYXRpb24gKToKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoIGNvbnRlbnQsIG1v ZGVsLkhpc3RvcnlEYXRhc2V0Q29sbGVjdGlvbkFzPQpzb2NpYXRpb24gKToKICAgICAgICAgICAg ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSA9M0QgdHJhbnMu YXBwLmRhdGFzZXRfY29sbGVjdGlvbnNfc2VydmljZQorICAgICAgICAgICAgICAgICAgICAgICAg c2VydmljZSA9M0Qgc2VsZi5hcHAuZGF0YXNldF9jb2xsZWN0aW9uc19zZXJ2aWNlCiAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UgPTNEIHNlcnZpY2Uu Z2V0X2RhdGFzZT0KdF9jb2xsZWN0aW9uX2luc3RhbmNlKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRyYW5zPTNEdHJhbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFu Y2VfdHlwZT0zRCdoaXN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0zRHRy YW5zLnNlY3VyaXR5LmVuY29kZV9pZCggY29udGVudC5pZCApLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlkPTNEc2VsZi5hcHAuc2VjdXJpdHkuZW5jb2RlX2lkKCBjb250ZW50LmlkICks CiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250 ZW50c19kaWN0ID0zRCBjb2xsZWN0aW9uX2RpY3RpZmllciggZGF0YXNldF9jbz0KbGxlY3Rpb25f aW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHk9M0R0cmFucy5z ZWN1cml0eSwgcGFyZW50PTNEZGF0YXNldF9jbz0KbGxlY3Rpb25faW5zdGFuY2UuaGlzdG9yeSwg dmlldz0zRCJlbGVtZW50IiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHk9 M0RzZWxmLmFwcC5zZWN1cml0eSwgcGFyZW50PTNEZGF0YXNldD0KX2NvbGxlY3Rpb25faW5zdGFu Y2UuaGlzdG9yeSwgdmlldz0zRCJlbGVtZW50IiApCj0yMAogICAgICAgICAgICAgICAgICAgICBl eGNlcHQgRXhjZXB0aW9uLCBleGM6CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXhjZXB0 aW9uKCAiRXJyb3IgaW4gaGlzdG9yeSBBUEkgYXQgbGlzdGluZyBkYT0KdGFzZXQgY29sbGVjdGlv bjogJXMiLCBleGMgKQpAQCAtMTY1LDcgKzE2Niw3IEBACiAgICAgICAgICIiIgogICAgICAgICAj VE9ETzogdGhlIGRlZmF1bHQgZmxhZ3MgYWJvdmUgbWF5IG5vdCBtYWtlIGEgbG90IG9mIHNlbnNl IChULFQ/KQogICAgICAgICBzdGF0ZV9jb3VudHMgPTNEIHt9Ci0gICAgICAgIGZvciBzdGF0ZSBp biB0cmFucy5hcHAubW9kZWwuRGF0YXNldC5zdGF0ZXMudmFsdWVzKCk6CisgICAgICAgIGZvciBz dGF0ZSBpbiBtb2RlbC5EYXRhc2V0LnN0YXRlcy52YWx1ZXMoKToKICAgICAgICAgICAgIHN0YXRl X2NvdW50c1sgc3RhdGUgXSA9M0QgMAo9MjAKICAgICAgICAgI1RPRE86Pz8gY29sbGVjdGlvbnMg YW5kIGNvbGwuIHN0YXRlcz8KQEAgLTE4MiwxMyArMTgzLDEzIEBACiAgICAgICAgICIiIgogICAg ICAgICAiIiIKICAgICAgICAgc3RhdGVfaWRzID0zRCB7fQotICAgICAgICBmb3Igc3RhdGUgaW4g dHJhbnMuYXBwLm1vZGVsLkRhdGFzZXQuc3RhdGVzLnZhbHVlcygpOgorICAgICAgICBmb3Igc3Rh dGUgaW4gbW9kZWwuRGF0YXNldC5zdGF0ZXMudmFsdWVzKCk6CiAgICAgICAgICAgICBzdGF0ZV9p ZHNbIHN0YXRlIF0gPTNEIFtdCj0yMAogICAgICAgICAjVE9ETzo/PyBjb2xsZWN0aW9ucyBhbmQg Y29sbC4gc3RhdGVzPwogICAgICAgICBmb3IgaGRhIGluIGhpc3RvcnkuZGF0YXNldHM6CiAgICAg ICAgICAgICAjVE9ETzogZG8gbm90IGVuY29kZSBpZHMgYXQgdGhpcyBsYXllcgotICAgICAgICAg ICAgZW5jb2RlZF9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaWQgKQorICAg ICAgICAgICAgZW5jb2RlZF9pZCA9M0Qgc2VsZi5hcHAuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEu aWQgKQogICAgICAgICAgICAgc3RhdGVfaWRzWyBoZGEuc3RhdGUgXS5hcHBlbmQoIGVuY29kZWRf aWQgKQogICAgICAgICByZXR1cm4gc3RhdGVfaWRzCj0yMApAQCAtMTk2LDcgKzE5Nyw3IEBACiAg ICAgZGVmIGdldF9oaXN0b3J5X3N0YXRlKCBzZWxmLCB0cmFucywgaGlzdG9yeSApOgogICAgICAg ICAiIiJSZXR1cm5zIHRoZSBoaXN0b3J5IHN0YXRlIGJhc2VkIG9uIHRoZSBzdGF0ZXMgb2YgdGhl IEhEQXMgaXQgY289Cm50YWlucy4KICAgICAgICAgIiIiCi0gICAgICAgIHN0YXRlcyA9M0QgdHJh bnMuYXBwLm1vZGVsLkRhdGFzZXQuc3RhdGVzCisgICAgICAgIHN0YXRlcyA9M0QgbW9kZWwuRGF0 YXNldC5zdGF0ZXMKPTIwCiAgICAgICAgICMgKGRlZmF1bHQgdG8gRVJST1IpCiAgICAgICAgIHN0 YXRlID0zRCBzdGF0ZXMuRVJST1IKQEAgLTMwNywyMSArMzA4LDIxIEBACiAgICAgZGVmIHNlcmlh bGl6ZV9jb250ZW50cyggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGtleSApOgogICAgICAgICBmb3Ig Y29udGVudCBpbiBoaXN0b3J5LmNvbnRlbnRzX2l0ZXIoIHR5cGVzPTNEWyAnZGF0YXNldCcsICdk YXRhc2U9CnRfY29sbGVjdGlvbicgXSApOgogICAgICAgICAgICAgY29udGVudHNfZGljdCA9M0Qg e30KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoIGNvbnRlbnQsIHRyYW5zLmFwcC5tb2RlbC5I aXN0b3J5RGF0YXNldEFzc29jaWF0PQppb24gKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo IGNvbnRlbnQsIG1vZGVsLkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24gKToKICAgICAgICAgICAg ICAgICBjb250ZW50c19kaWN0ID0zRCBzZWxmLmhkYV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192 aWV3KCB0PQpyYW5zLCBoZGEsIHZpZXc9M0QnZGV0YWlsZWQnICkKLSAgICAgICAgICAgIGVsaWYg aXNpbnN0YW5jZSggY29udGVudCwgdHJhbnMuYXBwLm1vZGVsLkhpc3RvcnlEYXRhc2V0Q29sbGVj PQp0aW9uQXNzb2NpYXRpb24gKToKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSggY29udGVu dCwgbW9kZWwuSGlzdG9yeURhdGFzZXRDb2xsZWN0aW9uQXNzb2NpPQphdGlvbiApOgogICAgICAg ICAgICAgICAgIGNvbnRlbnRzX2RpY3QgPTNEIHNlbGYuc2VyaWFsaXplX2NvbGxlY3Rpb24oIHRy YW5zLCBjb2xsZWM9CnRpb24gKQogICAgICAgICAgICAgY29udGVudHNfZGljdGlvbmFyaWVzLmFw cGVuZCggY29udGVudHNfZGljdCApCj0yMAogICAgIGRlZiBzZXJpYWxpemVfY29sbGVjdGlvbigg c2VsZiwgdHJhbnMsIGNvbGxlY3Rpb24gKToKLSAgICAgICAgc2VydmljZSA9M0QgdHJhbnMuYXBw LmRhdGFzZXRfY29sbGVjdGlvbnNfc2VydmljZQorICAgICAgICBzZXJ2aWNlID0zRCBzZWxmLmFw cC5kYXRhc2V0X2NvbGxlY3Rpb25zX3NlcnZpY2UKICAgICAgICAgZGF0YXNldF9jb2xsZWN0aW9u X2luc3RhbmNlID0zRCBzZXJ2aWNlLmdldF9kYXRhc2V0X2NvbGxlY3Rpb25faW5zPQp0YW5jZSgK ICAgICAgICAgICAgIHRyYW5zPTNEdHJhbnMsCiAgICAgICAgICAgICBpbnN0YW5jZV90eXBlPTNE J2hpc3RvcnknLAotICAgICAgICAgICAgaWQ9M0R0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGNv bGxlY3Rpb24uaWQgKSwKKyAgICAgICAgICAgIGlkPTNEc2VsZi5zZWN1cml0eS5lbmNvZGVfaWQo IGNvbGxlY3Rpb24uaWQgKSwKICAgICAgICAgKQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbl9k aWN0aWZpZXIoIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSwKLSAgICAgICAgICAgIHNlY3Vy aXR5PTNEdHJhbnMuc2VjdXJpdHksIHBhcmVudD0zRGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5j PQplLmhpc3RvcnksIHZpZXc9M0QiZWxlbWVudCIgKQorICAgICAgICAgICAgc2VjdXJpdHk9M0Rz ZWxmLmFwcC5zZWN1cml0eSwgcGFyZW50PTNEZGF0YXNldF9jb2xsZWN0aW9uX2luc3Q9CmFuY2Uu aGlzdG9yeSwgdmlldz0zRCJlbGVtZW50IiApCj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECgpkaWZmIC1y IDhlZWZjMDljNDFkY2ZjMzk5ZTM3ZTIwOGNjNzBjMGYzMzQ5MTY0MjEgLXIgN2E5MGQ0MDUzMTNk ZDRlMzcxZWUxMzk9CjI3OTdiYTAyOWEyYTA1YjExIGxpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFi bGUucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9zaGFyYWJsZS5weQorKysgYi9saWIvZ2Fs YXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5CkBAIC04OSwxMSArODksMTEgQEAKICAgICAgICAgRG9l cyBub3QgZmx1c2gvY29tbWl0IGNoYW5nZXMsIGhvd2V2ZXIuIEl0ZW0gbXVzdCBoYXZlIG5hbWUs IHVzZXIsCiAgICAgICAgIGltcG9ydGFibGUsIGFuZCBzbHVnIGF0dHJpYnV0ZXMuCiAgICAgICAg ICIiIgotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCisgICAgICAgIHNlbGYu YXBwLm1vZGVsLmNvbnRleHQuYWRkKCBpdGVtICkKICAgICAgICAgaXRlbS5pbXBvcnRhYmxlID0z RCBUcnVlCiAgICAgICAgIHNlbGYuY3JlYXRlX3VuaXF1ZV9zbHVnKCB0cmFucywgaXRlbSwgZmx1 c2g9M0RGYWxzZSApCiAgICAgICAgIGlmIGZsdXNoOgotICAgICAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmZsdXNoKCkK ICAgICAgICAgcmV0dXJuIGl0ZW0KPTIwCiAgICAgZGVmIG1ha2Vfbm9uX2ltcG9ydGFibGUoIHNl bGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRydWUgKToKQEAgLTEwNywxMCArMTA3LDEwIEBACiAg ICAgICAgICMgICAgICAgIHNlbGYudW5wdWJsaXNoKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxz ZSApCiAgICAgICAgICMgICAgZWxzZToKICAgICAgICAgIyAgICAgICAgcmFpc2UgZXhjZXB0aW9u cy5CYWRSZXF1ZXN0KCAnSXRlbSBtdXN0IGJlIG5vbi1wdWJsaXNoZWQgPQp0byBiZSBpbmFjY2Vz c2libGUnLCBpdGVtPTNEaXRlbSApCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVt ICkKKyAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5hZGQoIGl0ZW0gKQogICAgICAgICBp dGVtLmltcG9ydGFibGUgPTNEIEZhbHNlCiAgICAgICAgIGlmIGZsdXNoOgotICAgICAgICAgICAg dHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250 ZXh0LmZsdXNoKCkKICAgICAgICAgcmV0dXJuIGl0ZW0KPTIwCiAgICAgI2RlZiBfcXVlcnlfaW1w b3J0YWJsZSggc2VsZiwgdHJhbnMsIGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyApOgpAQCAtMTQy LDIwICsxNDIsMjAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBpdGVtLmltcG9ydGFi bGU6CiAgICAgICAgICAgICBzZWxmLm1ha2VfaW1wb3J0YWJsZSggdHJhbnMsIGl0ZW0sIGZsdXNo PTNERmFsc2UgKQotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCisgICAgICAg IHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRkKCBpdGVtICkKICAgICAgICAgaXRlbS5wdWJsaXNo ZWQgPTNEIFRydWUKICAgICAgICAgaWYgZmx1c2g6Ci0gICAgICAgICAgICB0cmFucy5zYV9zZXNz aW9uLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQog ICAgICAgICByZXR1cm4gaXRlbQo9MjAKICAgICBkZWYgdW5wdWJsaXNoKCBzZWxmLCB0cmFucywg aXRlbSwgZmx1c2g9M0RUcnVlICk6CiAgICAgICAgICIiIgogICAgICAgICBTZXQgdGhlIHB1Ymxp c2hlZCBmbGFnIG9uIGBpdGVtYCB0byBGYWxzZS4KICAgICAgICAgIiIiCi0gICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uYWRkKCBpdGVtICkKKyAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5h ZGQoIGl0ZW0gKQogICAgICAgICBpdGVtLnB1Ymxpc2hlZCA9M0QgRmFsc2UKICAgICAgICAgaWYg Zmx1c2g6Ci0gICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgICAg IHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQogICAgICAgICByZXR1cm4gaXRlbQo9MjAK ICAgICAjZGVmIF9xdWVyeV9wdWJsaXNoZWQoIHNlbGYsIHRyYW5zLCBmaWx0ZXJzPTNETm9uZSwg Kiprd2FyZ3MgKToKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgICBDcmVhdGUgYSBzaGFyZSBm b3IgdGhlIGdpdmVuIHVzZXIuCiAgICAgICAgICIiIgogICAgICAgICB1c2VyX3NoYXJlX2Fzc29j ID0zRCBzZWxmLnVzZXJfc2hhcmVfbW9kZWwoKQotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFk ZCggdXNlcl9zaGFyZV9hc3NvYyApCisgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRk KCB1c2VyX3NoYXJlX2Fzc29jICkKICAgICAgICAgc2VsZi5hc3NvY2lhdGUoIHRyYW5zLCB1c2Vy X3NoYXJlX2Fzc29jLCBpdGVtICkKICAgICAgICAgdXNlcl9zaGFyZV9hc3NvYy51c2VyID0zRCB1 c2VyCj0yMApAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgIHNlbGYuY3JlYXRlX3VuaXF1ZV9z bHVnKCB0cmFucywgaXRlbSApCj0yMAogICAgICAgICBpZiBmbHVzaDoKLSAgICAgICAgICAgIHRy YW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4 dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiB1c2VyX3NoYXJlX2Fzc29jCj0yMAogICAgIGRlZiB1 bnNoYXJlX3dpdGgoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyLCBmbHVzaD0zRFRydWUgKToKQEAg LTIyMSw5ICsyMjEsOSBAQAogICAgICAgICAgICAgcmV0dXJuIG1hcCggbGFtYmRhIHVzZXI6IHNl bGYudW5zaGFyZV93aXRoKCB0cmFucywgaXRlbSwgdXNlciw9CiBmbHVzaD0zREZhbHNlICksIHVz ZXIgKQogICAgICAgICAjIExvb2sgZm9yIGFuZCBkZWxldGUgc2hhcmluZyByZWxhdGlvbiBmb3Ig dXNlci4KICAgICAgICAgdXNlcl9zaGFyZV9hc3NvYyA9M0Qgc2VsZi5nZXRfc2hhcmVfYXNzb2Nz KCB0cmFucywgaXRlbSwgdXNlcj0zRHVzPQplciApWzBdCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Np b24uZGVsZXRlKCB1c2VyX3NoYXJlX2Fzc29jICkKKyAgICAgICAgc2VsZi5hcHAubW9kZWwuY29u dGV4dC5kZWxldGUoIHVzZXJfc2hhcmVfYXNzb2MgKQogICAgICAgICBpZiBmbHVzaDoKLSAgICAg ICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hcHAubW9k ZWwuY29udGV4dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiB1c2VyX3NoYXJlX2Fzc29jCj0yMAog ICAgICNkZWYgX3F1ZXJ5X3NoYXJlZF93aXRoKCBzZWxmLCB0cmFucywgdXNlciwgZmlsdGVycz0z RE5vbmUsICoqa3dhcmdzICk6CkBAIC0yNTYsMTQgKzI1NiwxNCBAQAogICAgICAgICAgICAgcmFp c2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFyYW1ldGVySW52YWxpZEV4Y2VwdGlvbiggIkludmFsaWQg c2w9CnVnIiwgc2x1Zz0zRG5ld19zbHVnICkKPTIwCiAgICAgICAgICMgZXJyb3IgaWYgc2x1ZyBp cyBhbHJlYWR5IGluIHVzZQotICAgICAgICBleGlzdGluZ19tYXRjaCA9M0QgKCB0cmFucy5zYV9z ZXNzaW9uLnF1ZXJ5KCBzZWxmLm1vZGVsX2NsYXNzICkKKyAgICAgICAgZXhpc3RpbmdfbWF0Y2gg PTNEICggc2VsZi5hcHAubW9kZWwuY29udGV4dC5xdWVyeSggc2VsZi5tb2RlbF9jbGFzPQpzICkK ICAgICAgICAgICAgIC5maWx0ZXJfYnkoIHVzZXI9M0RpdGVtLnVzZXIsIHNsdWc9M0RuZXdfc2x1 ZywgaW1wb3J0YWJsZT0zRFRyPQp1ZSApICkKICAgICAgICAgaWYoIGV4aXN0aW5nX21hdGNoLmNv dW50KCkgIT0zRCAwICk6CiAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkJhZFJlcXVlc3Qo ICJTbHVnIGFscmVhZHkgZXhpc3RzIiwgc2x1Zz0zRG5ldz0KX3NsdWcgKQo9MjAKICAgICAgICAg aXRlbS5zbHVnID0zRCBuZXdfc2x1ZwogICAgICAgICBpZiBmbHVzaDoKLSAgICAgICAgICAgIHRy YW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4 dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiBpdGVtCj0yMAogICAgIGRlZiBnZXRfdW5pcXVlX3Ns dWcoIHNlbGYsIHRyYW5zLCBpdGVtICk6CkBAIC0yOTUsNyArMjk1LDcgQEAKICAgICAgICAgIyBh ZGQgaW50ZWdlciB0byBlbmQuCiAgICAgICAgIG5ld19zbHVnID0zRCBzbHVnX2Jhc2UKICAgICAg ICAgY291bnQgPTNEIDEKLSAgICAgICAgd2hpbGUgKCB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBp dGVtLl9fY2xhc3NfXyApCisgICAgICAgIHdoaWxlICggc2VsZi5hcHAubW9kZWwuY29udGV4dC5x dWVyeSggaXRlbS5fX2NsYXNzX18gKQogICAgICAgICAgICAgICAgICAgICAuZmlsdGVyX2J5KCB1 c2VyPTNEaXRlbS51c2VyLCBzbHVnPTNEbmV3X3NsdWcsIGltcG9ydGE9CmJsZT0zRFRydWUgKQog ICAgICAgICAgICAgICAgICAgICAuY291bnQoKSAhPTNEIDAgKToKICAgICAgICAgICAgICMgU2x1 ZyB0YWtlbjsgY2hvb3NlIGEgbmV3IHNsdWcgYmFzZWQgb24gY291bnQuIFRoaXMgYXBwcm9hY2gg PQpjYW4KQEAgLTMxMCw5ICszMTAsOSBAQAogICAgICAgICBTZXQgYSBuZXcsIHVuaXF1ZSBzbHVn IG9uIHRoZSBpdGVtLgogICAgICAgICAiIiIKICAgICAgICAgaXRlbS5zbHVnID0zRCBzZWxmLmdl dF91bmlxdWVfc2x1ZyggdHJhbnMsIGl0ZW0gKQotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFk ZCggaXRlbSApCisgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRkKCBpdGVtICkKICAg ICAgICAgaWYgZmx1c2g6Ci0gICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAg ICAgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQogICAgICAgICByZXR1cm4g aXRlbQo9MjAKICAgICAjZGVmIGJ5X3NsdWcoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJncyAp OgoKZGlmZiAtciA4ZWVmYzA5YzQxZGNmYzM5OWUzN2UyMDhjYzcwYzBmMzM0OTE2NDIxIC1yIDdh OTBkNDA1MzEzZGQ0ZTM3MWVlMTM5PQoyNzk3YmEwMjlhMmEwNWIxMSBsaWIvZ2FsYXh5L21hbmFn ZXJzL3VzZXJzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKKysrIGIvbGli L2dhbGF4eS9tYW5hZ2Vycy91c2Vycy5weQpAQCAtNDMsMjYgKzQzLDI3IEBACiAgICAgICAgIHVz ZXIgPTNEIG1vZGVsLlVzZXIoIGVtYWlsPTNEZW1haWwsIHBhc3N3b3JkPTNEcGFzc3dvcmQgKQog ICAgICAgICB1c2VyLnVzZXJuYW1lID0zRCB1c2VybmFtZQo9MjAKLSAgICAgICAgaWYgdHJhbnMu YXBwLmNvbmZpZy51c2VyX2FjdGl2YXRpb25fb246CisgICAgICAgIGlmIHNlbGYuYXBwLmNvbmZp Zy51c2VyX2FjdGl2YXRpb25fb246CiAgICAgICAgICAgICB1c2VyLmFjdGl2ZSA9M0QgRmFsc2UK ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQWN0aXZhdGlvbiBpcyBvZmYsIGV2ZXJ5IG5l dyB1c2VyIGlzIGFjdGl2ZSBieSBkZWZhdWx0LgogICAgICAgICAgICAgdXNlci5hY3RpdmUgPTNE IFRydWUKPTIwCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCB1c2VyICkKKyAgICAgICAg c2VsZi5hcHAubW9kZWwuY29udGV4dC5hZGQoIHVzZXIgKQogICAgICAgICB0cnk6Ci0gICAgICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXBwLm1vZGVs LmNvbnRleHQuZmx1c2goKQogICAgICAgICAgICAgI1RPRE86Pz8gZmx1c2ggbmVlZGVkIGZvciBw ZXJtaXNzaW9ucyBiZWxvdz8gSWYgbm90LCBtYWtlIG9wdGk9Cm9uYWwKICAgICAgICAgZXhjZXB0 IHNxbGFsY2hlbXkuZXhjZXB0aW9ucy5JbnRlZ3JpdHlFcnJvciwgZGJfZXJyOgogICAgICAgICAg ICAgcmFpc2UgZXhjZXB0aW9ucy5Db25mbGljdCggZGJfZXJyLm1lc3NhZ2UgKQo9MjAKICAgICAg ICAgIyBjYW4gdGhyb3cgYW4gc3FsYWx4LkludGVncml0eUVycm9yIGlmIHVzZXJuYW1lIG5vdCB1 bmlxdWUKPTIwCi0gICAgICAgIHRyYW5zLmFwcC5zZWN1cml0eV9hZ2VudC5jcmVhdGVfcHJpdmF0 ZV91c2VyX3JvbGUoIHVzZXIgKQorICAgICAgICBzZWxmLmFwcC5zZWN1cml0eV9hZ2VudC5jcmVh dGVfcHJpdmF0ZV91c2VyX3JvbGUoIHVzZXIgKQorI1RPRE86IGFueSBvdGhlciByb3V0ZSB0byB3 ZWJhcHA/CiAgICAgICAgIGlmIHRyYW5zLndlYmFwcC5uYW1lID0zRD0zRCAnZ2FsYXh5JzoKICAg ICAgICAgICAgICMgV2Ugc2V0IGRlZmF1bHQgdXNlciBwZXJtaXNzaW9ucywgYmVmb3JlIHdlIGxv ZyBpbiBhbmQgc2V0IHRoPQplIGRlZmF1bHQgaGlzdG9yeSBwZXJtaXNzaW9ucwotICAgICAgICAg ICAgcGVybWlzc2lvbnMgPTNEIHRyYW5zLmFwcC5jb25maWcubmV3X3VzZXJfZGF0YXNldF9hY2Nl c3Nfcm9sZV89CmRlZmF1bHRfcHJpdmF0ZQotICAgICAgICAgICAgdHJhbnMuYXBwLnNlY3VyaXR5 X2FnZW50LnVzZXJfc2V0X2RlZmF1bHRfcGVybWlzc2lvbnMoIHVzZXIsIGQ9CmVmYXVsdF9hY2Nl c3NfcHJpdmF0ZT0zRHBlcm1pc3Npb25zICkKKyAgICAgICAgICAgIHBlcm1pc3Npb25zID0zRCBz ZWxmLmFwcC5jb25maWcubmV3X3VzZXJfZGF0YXNldF9hY2Nlc3Nfcm9sZV9kPQplZmF1bHRfcHJp dmF0ZQorICAgICAgICAgICAgc2VsZi5hcHAuc2VjdXJpdHlfYWdlbnQudXNlcl9zZXRfZGVmYXVs dF9wZXJtaXNzaW9ucyggdXNlciwgZGU9CmZhdWx0X2FjY2Vzc19wcml2YXRlPTNEcGVybWlzc2lv bnMgKQogICAgICAgICByZXR1cm4gdXNlcgo9MjAKICAgICAjVE9ETzogaW5jb3Jwb3JhdGUgc2Vj dXJpdHkvdmFsaWRhdGVfdXNlcl9pbnB1dC5weQpAQCAtMTA3LDcgKzEwOCw3IEBACiAgICAgICAg ICIiIgogICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGFkbWluIGVtYWlsIGFkZHJlc3NlcyBmcm9t IHRoZSBjb25maWcgZmlsZS4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBbIHguc3RyaXAo KSBmb3IgeCBpbiB0cmFucy5hcHAuY29uZmlnLmdldCggImFkbWluX3VzZXJzIiwgIj0KIiApLnNw bGl0KCAiLCIgKSBdCisgICAgICAgIHJldHVybiBbIHguc3RyaXAoKSBmb3IgeCBpbiBzZWxmLmFw cC5jb25maWcuZ2V0KCAiYWRtaW5fdXNlcnMiLCAiIj0KICkuc3BsaXQoICIsIiApIF0KPTIwCiAg ICAgZGVmIGFkbWlucyggc2VsZiwgdHJhbnMsIGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyApOgog ICAgICAgICAiIiIKQEAgLTE3OSwxNCArMTgwLDE0IEBACiAgICAgICAgIENyZWF0ZSBhbmQgcmV0 dXJuIGFuIEFQSSBrZXkgZm9yIGB1c2VyYC4KICAgICAgICAgIiIiCiAgICAgICAgICNUT0RPOiBz ZWVtcyBsaWtlIHRoaXMgc2hvdWxkIHJldHVybiB0aGUgbW9kZWwKLSAgICAgICAgcmV0dXJuIGFw aV9rZXlzLkFwaUtleU1hbmFnZXIoIHRyYW5zLmFwcCApLmNyZWF0ZV9hcGlfa2V5KCB1c2VyICkK KyAgICAgICAgcmV0dXJuIGFwaV9rZXlzLkFwaUtleU1hbmFnZXIoIHNlbGYuYXBwICkuY3JlYXRl X2FwaV9rZXkoIHVzZXIgKQo9MjAKICAgICAjVE9ETzogcG9zc2libHkgbW92ZSB0byBBcGlLZXlN YW5hZ2VyCiAgICAgZGVmIHZhbGlkX2FwaV9rZXkoIHNlbGYsIHRyYW5zLCB1c2VyICk6CiAgICAg ICAgICIiIgogICAgICAgICBSZXR1cm4gdGhpcyBtb3N0IHJlY2VudCBBUElLZXkgZm9yIHRoaXMg dXNlciBvciBOb25lIGlmIG5vbmUgaGF2ZSA9CmJlZW4gY3JlYXRlZC4KICAgICAgICAgIiIiCi0g ICAgICAgIHF1ZXJ5ID0zRCAoIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIG1vZGVsLkFQSUtleXMg KQorICAgICAgICBxdWVyeSA9M0QgKCBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LnF1ZXJ5KCBtb2Rl bC5BUElLZXlzICkKICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcl9ieSggdXNlcj0zRHVzZXIg KQogICAgICAgICAgICAgICAgICAgICAub3JkZXJfYnkoIG1vZGVsLkFQSUtleXMuY3JlYXRlX3Rp bWUgKSApCiAgICAgICAgIHJldHVybiBxdWVyeS5maXJzdCgpCkBAIC0yMDgsNyArMjA5LDcgQEAK ICAgICAgICAgUmV0dXJuIHRoZSBzZWN1cml0eSBhZ2VudCdzIHByaXZhdGUgcm9sZSBmb3IgYHVz ZXJgLgogICAgICAgICAiIiIKICAgICAgICAgI1RPRE86IG5vdCBzdXJlIHdlIG5lZWQgdG8gZ28g dGhyb3VnaCBzZWMgYWdlbnQuLi4gaXQncyBqdXN0IHRoZSBmPQppcnN0IHJvbGUgb2YgdHlwZSBw cml2YXRlCi0gICAgICAgIHJldHVybiB0cmFucy5hcHAuc2VjdXJpdHlfYWdlbnQuZ2V0X3ByaXZh dGVfdXNlcl9yb2xlKCB1c2VyICkKKyAgICAgICAgcmV0dXJuIHNlbGYuYXBwLnNlY3VyaXR5X2Fn ZW50LmdldF9wcml2YXRlX3VzZXJfcm9sZSggdXNlciApCj0yMAo9MjAKICMgPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECgpk aWZmIC1yIDhlZWZjMDljNDFkY2ZjMzk5ZTM3ZTIwOGNjNzBjMGYzMzQ5MTY0MjEgLXIgN2E5MGQ0 MDUzMTNkZDRlMzcxZWUxMzk9CjI3OTdiYTAyOWEyYTA1YjExIHRlc3QvdW5pdC9tYW5hZ2Vycy90 ZXN0X0hEQU1hbmFnZXIucHkKLS0tIGEvdGVzdC91bml0L21hbmFnZXJzL3Rlc3RfSERBTWFuYWdl ci5weQorKysgYi90ZXN0L3VuaXQvbWFuYWdlcnMvdGVzdF9IREFNYW5hZ2VyLnB5CkBAIC05OSw3 ICs5OSw3IEBACiAgICAgICAgIGhkYTEgPTNEIHNlbGYuaGRhX21nci5jcmVhdGUoIHNlbGYudHJh bnMsIGhpc3Rvcnk9M0RoaXN0b3J5MSwgZGF0YT0Kc2V0PTNEZGF0YXNldDEgKQo9MjAKICAgICAg ICAgc2VsZi5sb2coICJzaG91bGQgYmUgYWJsZSB0byBjb3B5IGFuIEhEQSIgKQotICAgICAgICBo ZGEyID0zRCBzZWxmLmhkYV9tZ3IuY29weV9oZGEoIHNlbGYudHJhbnMsIGhkYTEsIGhpc3Rvcnk9 M0RoaXN0b3I9CnkxICkKKyAgICAgICAgaGRhMiA9M0Qgc2VsZi5oZGFfbWdyLmNvcHkoIHNlbGYu dHJhbnMsIGhkYTEsIGhpc3Rvcnk9M0RoaXN0b3J5MSApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJ bnN0YW5jZSggaGRhMiwgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiApCiAgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWwoIGhkYTIsIHNlbGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9k ZWwuSGlzdG9yeT0KRGF0YXNldEFzc29jaWF0aW9uICkuZ2V0KCBoZGEyLmlkICkgKQogICAgICAg ICBzZWxmLmFzc2VydEVxdWFsKCBoZGEyLm5hbWUsIGhkYTEubmFtZSApCgpkaWZmIC1yIDhlZWZj MDljNDFkY2ZjMzk5ZTM3ZTIwOGNjNzBjMGYzMzQ5MTY0MjEgLXIgN2E5MGQ0MDUzMTNkZDRlMzcx ZWUxMzk9CjI3OTdiYTAyOWEyYTA1YjExIHRlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlN YW5hZ2VyLnB5Ci0tLSBhL3Rlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlNYW5hZ2VyLnB5 CisrKyBiL3Rlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X0hpc3RvcnlNYW5hZ2VyLnB5CkBAIC0xMDcs MTYgKzEwNywxNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyggZXhjZXB0aW9ucy5JdGVt T3duZXJzaGlwRXhjZXB0aW9uLAogICAgICAgICAgICAgc2VsZi5oaXN0b3J5X21nci5lcnJvcl91 bmxlc3Nfb3duZXIsIHNlbGYudHJhbnMsIGl0ZW0xLCBub25fb3c9Cm5lciApCiAgICAgICAgIHNl bGYuYXNzZXJ0UmFpc2VzKCBleGNlcHRpb25zLkl0ZW1Pd25lcnNoaXBFeGNlcHRpb24sCi0gICAg ICAgICAgICBzZWxmLmhpc3RvcnlfbWdyLm93bmVkX2J5X2lkLCBzZWxmLnRyYW5zLCBpdGVtMS5p ZCwgbm9uX293bmVyICkKKyAgICAgICAgICAgIHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X293bmVkLCBz ZWxmLnRyYW5zLCBpdGVtMS5pZCwgbm9uX293bmVyICkKPTIwCiAgICAgICAgIHNlbGYubG9nKCAi c2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvciB3aGVuIGNoZWNraW5nIG93bmVyc2hpcCB3aXRoID0K b3duZXIiICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oaXN0b3J5X21nci5lcnJv cl91bmxlc3Nfb3duZXIoIHNlbGYudHJhbnMsPQogaXRlbTEsIG93bmVyICksIGl0ZW0xICkKLSAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2VsZi5oaXN0b3J5X21nci5vd25lZF9ieV9pZCggc2Vs Zi50cmFucywgaXRlbTEuPQppZCwgb3duZXIgKSwgaXRlbTEgKQorICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKCBzZWxmLmhpc3RvcnlfbWdyLmdldF9vd25lZCggc2VsZi50cmFucywgaXRlbTEuaWQ9 Ciwgb3duZXIgKSwgaXRlbTEgKQo9MjAKICAgICAgICAgc2VsZi5sb2coICJzaG91bGQgbm90IHJh aXNlIGFuIGVycm9yIHdoZW4gY2hlY2tpbmcgb3duZXJzaGlwIHdpdGggPQphZG1pbiIgKQogICAg ICAgICBzZWxmLmFzc2VydFRydWUoIHNlbGYuaGlzdG9yeV9tZ3IuaXNfb3duZXIoIHNlbGYudHJh bnMsIGl0ZW0xLCBzZWw9CmYuYWRtaW5fdXNlciApICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh bCggc2VsZi5oaXN0b3J5X21nci5lcnJvcl91bmxlc3Nfb3duZXIoIHNlbGYudHJhbnMsPQogaXRl bTEsIHNlbGYuYWRtaW5fdXNlciApLCBpdGVtMSApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo IHNlbGYuaGlzdG9yeV9tZ3Iub3duZWRfYnlfaWQoIHNlbGYudHJhbnMsIGl0ZW0xLj0KaWQsIHNl bGYuYWRtaW5fdXNlciApLCBpdGVtMSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNlbGYu aGlzdG9yeV9tZ3IuZ2V0X293bmVkKCBzZWxmLnRyYW5zLCBpdGVtMS5pZD0KLCBzZWxmLmFkbWlu X3VzZXIgKSwgaXRlbTEgKQo9MjAKICAgICBkZWYgdGVzdF9hY2Nlc3NpYmxlKCBzZWxmICk6CiAg ICAgICAgIG93bmVyID0zRCBzZWxmLnVzZXJfbWdyLmNyZWF0ZSggc2VsZi50cmFucywgKip1c2Vy Ml9kYXRhICkKQEAgLTEzMywxNiArMTMzLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz KCBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uLAogICAgICAgICAgICAgc2Vs Zi5oaXN0b3J5X21nci5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSwgc2VsZi50cmFucywgaXRlbTEs IG49Cm9uX293bmVyICkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoIGV4Y2VwdGlvbnMuSXRl bUFjY2Vzc2liaWxpdHlFeGNlcHRpb24sCi0gICAgICAgICAgICBzZWxmLmhpc3RvcnlfbWdyLmFj Y2Vzc2libGVfYnlfaWQsIHNlbGYudHJhbnMsIGl0ZW0xLmlkLCBub25fbz0Kd25lciApCisgICAg ICAgICAgICBzZWxmLmhpc3RvcnlfbWdyLmdldF9hY2Nlc3NpYmxlLCBzZWxmLnRyYW5zLCBpdGVt MS5pZCwgbm9uX293bj0KZXIgKQo9MjAKICAgICAgICAgc2VsZi5sb2coICJzaG91bGQgbm90IHJh aXNlIGFuIGVycm9yIHdoZW4gY2hlY2tpbmcgb3duZXJzaGlwIHdpdGggPQpvd25lciIgKQogICAg ICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLmhpc3RvcnlfbWdyLmVycm9yX3VubGVzc19hY2Nl c3NpYmxlKCBzZWxmLnQ9CnJhbnMsIGl0ZW0xLCBvd25lciApLCBpdGVtMSApCi0gICAgICAgIHNl bGYuYXNzZXJ0RXF1YWwoIHNlbGYuaGlzdG9yeV9tZ3IuYWNjZXNzaWJsZV9ieV9pZCggc2VsZi50 cmFucywgaT0KdGVtMS5pZCwgb3duZXIgKSwgaXRlbTEgKQorICAgICAgICBzZWxmLmFzc2VydEVx dWFsKCBzZWxmLmhpc3RvcnlfbWdyLmdldF9hY2Nlc3NpYmxlKCBzZWxmLnRyYW5zLCBpdGU9Cm0x LmlkLCBvd25lciApLCBpdGVtMSApCj0yMAogICAgICAgICBzZWxmLmxvZyggInNob3VsZCBub3Qg cmFpc2UgYW4gZXJyb3Igd2hlbiBjaGVja2luZyBvd25lcnNoaXAgd2l0aCA9CmFkbWluIiApCiAg ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggc2VsZi5oaXN0b3J5X21nci5pc19hY2Nlc3NpYmxlKCBz ZWxmLnRyYW5zLCBpdGVtMT0KLCBzZWxmLmFkbWluX3VzZXIgKSApCiAgICAgICAgIHNlbGYuYXNz ZXJ0RXF1YWwoIHNlbGYuaGlzdG9yeV9tZ3IuZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHNlbGYu dD0KcmFucywgaXRlbTEsIHNlbGYuYWRtaW5fdXNlciApLCBpdGVtMSApCi0gICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoIHNlbGYuaGlzdG9yeV9tZ3IuYWNjZXNzaWJsZV9ieV9pZCggc2VsZi50cmFu cywgaT0KdGVtMS5pZCwgc2VsZi5hZG1pbl91c2VyICksIGl0ZW0xICkKKyAgICAgICAgc2VsZi5h c3NlcnRFcXVhbCggc2VsZi5oaXN0b3J5X21nci5nZXRfYWNjZXNzaWJsZSggc2VsZi50cmFucywg aXRlPQptMS5pZCwgc2VsZi5hZG1pbl91c2VyICksIGl0ZW0xICkKPTIwCiAgICAgZGVmIHRlc3Rf aW1wb3J0YWJsZSggc2VsZiApOgogICAgICAgICBvd25lciA9M0Qgc2VsZi51c2VyX21nci5jcmVh dGUoIHNlbGYudHJhbnMsICoqdXNlcjJfZGF0YSApCgpkaWZmIC1yIDhlZWZjMDljNDFkY2ZjMzk5 ZTM3ZTIwOGNjNzBjMGYzMzQ5MTY0MjEgLXIgN2E5MGQ0MDUzMTNkZDRlMzcxZWUxMzk9CjI3OTdi YTAyOWEyYTA1YjExIHRlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X1VzZXJNYW5hZ2VyLnB5Ci0tLSBh L3Rlc3QvdW5pdC9tYW5hZ2Vycy90ZXN0X1VzZXJNYW5hZ2VyLnB5CisrKyBiL3Rlc3QvdW5pdC9t YW5hZ2Vycy90ZXN0X1VzZXJNYW5hZ2VyLnB5CkBAIC0xMTgsOCArMTE4LDcgQEAKICAgICAgICAg dXNlcjMgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlKCBzZWxmLnRyYW5zLCAqKnVzZXIzX2RhdGEg KQo9MjAKICAgICAgICAgc2VsZi5sb2coICJzaG91bGQgcmV0dXJuIE5vbmUgaWYgbm8gQVBJS2V5 IGhhcyBiZWVuIGNyZWF0ZWQiICkKLSAgICAgICAgbm9fYXBpX2tleV95ZXQgPTNEIHNlbGYudXNl cl9tZ3IuYXBpX2tleSggc2VsZi50cmFucywgdXNlcjIgKQotICAgICAgICBzZWxmLmFzc2VydEVx dWFsKCBzZWxmLnVzZXJfbWdyLnZhbGlkX2FwaV9rZXkoIHNlbGYudHJhbnMsIHVzZXIyICk9Ci5r ZXksIE5vbmUgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzZWxmLnVzZXJfbWdyLnZhbGlk X2FwaV9rZXkoIHNlbGYudHJhbnMsIHVzZXIyICk9CiwgTm9uZSApCj0yMAogICAgICAgICBzZWxm LmxvZyggInNob3VsZCBiZSBhYmxlIHRvIGdlbmVyYXRlIGFuZCByZXRyaWV2ZSB2YWxpZCBhcGkg a2V5IiApCiAgICAgICAgIHVzZXIyX2FwaV9rZXkgPTNEIHNlbGYudXNlcl9tZ3IuY3JlYXRlX2Fw aV9rZXkoIHNlbGYudHJhbnMsIHVzZXIyICkKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5 L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMTU5NjJiM2Q5YWFjLwpDaGFuZ2VzZXQ6ICAgMTU5NjJi M2Q5YWFjClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAgICAyMDE1LTAxLTEy IDIxOjExOjMyKzAwOjAwClN1bW1hcnk6ICAgICBNZXJnZWQgZ2FsYXh5L2dhbGF4eS1jZW50cmFs IGludG8gZGVmYXVsdApBZmZlY3RlZCAjOiAgNSBmaWxlcwoKZGlmZiAtciA3YTkwZDQwNTMxM2Rk NGUzNzFlZTEzOTI3OTdiYTAyOWEyYTA1YjExIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxPQo3 NWM4ZDJlMmJjNGJhNWNhYiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvdml6L3RyYWNrc3Rlci5qcwot LS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvdml6L3RyYWNrc3Rlci5qcworKysgYi9jbGllbnQv Z2FsYXh5L3NjcmlwdHMvdml6L3RyYWNrc3Rlci5qcwpAQCAtMTIsNyArMTIsNiBAQAogWwogICAg IC8vIGxvYWQganMgbGlicmFyaWVzCiAgICAgJ3V0aWxzL3V0aWxzJywKLSAgICAnbXZjL3VpL2lj b24tYnV0dG9uJywKICAgICAnbGlicy9qcXVlcnkvanF1ZXJ5LmV2ZW50LmRyYWcnLAogICAgICds aWJzL2pxdWVyeS9qcXVlcnkuZXZlbnQuaG92ZXInLAogICAgICdsaWJzL2pxdWVyeS9qcXVlcnku bW91c2V3aGVlbCcsCkBAIC0zMiw5ICszMSw4IEBACiB9KTsKPTIwCiAvLyB0cmFja3N0ZXIgdmll d2VyCi1kZWZpbmUoIFsibGlicy91bmRlcnNjb3JlIiwgImJhc2UiLCAidml6L3RyYWNrc3Rlci90 cmFja3MiLCAidml6L3Zpc3VhbGl6YT0KdGlvbiJdLD0yMAotICAgICAgICBmdW5jdGlvbihfLCBi YXNlLCB0cmFja3MsIHZpc3VhbGl6YXRpb24pIHsKLQorZGVmaW5lKCBbImxpYnMvdW5kZXJzY29y ZSIsICJiYXNlIiwgInZpei90cmFja3N0ZXIvdHJhY2tzIiwgInZpei92aXN1YWxpemE9CnRpb24i LCAibXZjL3VpL2ljb24tYnV0dG9uIiBdLAorICAgICAgICBmdW5jdGlvbihfLCBiYXNlLCB0cmFj a3MsIHZpc3VhbGl6YXRpb24sIG1vZF9pY29uX2J0bikgewogLyoqCiAgKiBVc2VyIGludGVyZmFj ZSBjb250cm9scyBmb3IgdHJhY2tzdGVyPTIwCiAgKi8KCmRpZmYgLXIgN2E5MGQ0MDUzMTNkZDRl MzcxZWUxMzkyNzk3YmEwMjlhMmEwNWIxMSAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MT0KNzVj OGQyZTJiYzRiYTVjYWIgbGliL2dhbGF4eS90b29scy90b29sYm94L2Jhc2UucHkKLS0tIGEvbGli L2dhbGF4eS90b29scy90b29sYm94L2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS90b29scy90b29s Ym94L2Jhc2UucHkKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAg c2VjdGlvbi5lbGVtcy5zdHViX2xhYmVsKCBzZWN0aW9uX2lkICkKICAgICAgICAgICAgICAgICBz ZWxmLl9pbnRlZ3JhdGVkX3Rvb2xfcGFuZWwuYXBwZW5kX3NlY3Rpb24oIGtleSwgc2VjdGlvbiAp CiAgICAgICAgICAgICBlbGlmIGVsZW0udGFnID0zRD0zRCAnbGFiZWwnOgotICAgICAgICAgICAg ICAgIHNlY3Rpb24uc3R1Yl9sYWJlbCgga2V5ICkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRl Z3JhdGVkX3Rvb2xfcGFuZWwuc3R1Yl9sYWJlbCgga2V5ICkKPTIwCiAgICAgZGVmIF93cml0ZV9p bnRlZ3JhdGVkX3Rvb2xfcGFuZWxfY29uZmlnX2ZpbGUoIHNlbGYgKToKICAgICAgICAgIiIiCgpk aWZmIC1yIDdhOTBkNDA1MzEzZGQ0ZTM3MWVlMTM5Mjc5N2JhMDI5YTJhMDViMTEgLXIgMTU5NjJi M2Q5YWFjMDYxZTk1NDFmODE9Cjc1YzhkMmUyYmM0YmE1Y2FiIHN0YXRpYy9zY3JpcHRzL3BhY2tl ZC92aXovdHJhY2tzdGVyLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC92aXovdHJhY2tz dGVyLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC92aXovdHJhY2tzdGVyLmpzCkBAIC0x LDEgKzEsMSBAQAotdmFyIHVpPTNEbnVsbDt2YXIgdmlldz0zRG51bGw7dmFyIGJyb3dzZXJfcm91 dGVyPTNEbnVsbDtyZXF1aXJlKFsidXRpbHMvdXQ9CmlscyIsIm12Yy91aS9pY29uLWJ1dHRvbiIs ImxpYnMvanF1ZXJ5L2pxdWVyeS5ldmVudC5kcmFnIiwibGlicy9qcXVlcnkvanF1ZT0KcnkuZXZl bnQuaG92ZXIiLCJsaWJzL2pxdWVyeS9qcXVlcnkubW91c2V3aGVlbCIsImxpYnMvanF1ZXJ5L2px dWVyeS11aSIsImxpPQpicy9qcXVlcnkvc2VsZWN0MiIsImxpYnMvZmFyYnRhc3RpYyIsImxpYnMv anF1ZXJ5L2pxdWVyeS5mb3JtIiwibGlicy9qcXVlcnk9Ci9qcXVlcnkucmF0aW5nIl0sZnVuY3Rp b24oYixhKXtiLmNzc0xvYWRGaWxlKCJzdGF0aWMvc3R5bGUvanF1ZXJ5LnJhdGluZy5jcz0KcyIp O2IuY3NzTG9hZEZpbGUoInN0YXRpYy9zdHlsZS9hdXRvY29tcGxldGVfdGFnZ2luZy5jc3MiKTti LmNzc0xvYWRGaWxlKCJzPQp0YXRpYy9zdHlsZS9qcXVlcnktdWkvc21vb3RobmVzcy9qcXVlcnkt dWkuY3NzIik7Yi5jc3NMb2FkRmlsZSgic3RhdGljL3N0eWw9CmUvbGlicmFyeS5jc3MiKTtiLmNz c0xvYWRGaWxlKCJzdGF0aWMvc3R5bGUvdHJhY2tzdGVyLmNzcyIpfSk7ZGVmaW5lKFsibGlicz0K L3VuZGVyc2NvcmUiLCJiYXNlIiwidml6L3RyYWNrc3Rlci90cmFja3MiLCJ2aXovdmlzdWFsaXph dGlvbiJdLGZ1bmN0aW9uKGIsPQplLGEsYyl7dmFyIGQ9M0RlLkJhc2UuZXh0ZW5kKHtpbml0aWFs aXplOmZ1bmN0aW9uKGcpe3RoaXMuYmFzZVVSTD0zRGd9LHNhdmU9Cl92aXo6ZnVuY3Rpb24oKXtH YWxheHkubW9kYWwuc2hvdyh7dGl0bGU6IlNhdmluZy4uLiIsYm9keToicHJvZ3Jlc3MifSk7dmFy ID0KZz0zRFtdOyQoIi5ib29rbWFyayIpLmVhY2goZnVuY3Rpb24oKXtnLnB1c2goe3Bvc2l0aW9u OiQodGhpcykuY2hpbGRyZW4oIi5wPQpvc2l0aW9uIikudGV4dCgpLGFubm90YXRpb246JCh0aGlz KS5jaGlsZHJlbigiLmFubm90YXRpb24iKS50ZXh0KCl9KX0pO3ZhciA9Cmg9M0Qodmlldy5vdmVy dmlld19kcmF3YWJsZT92aWV3Lm92ZXJ2aWV3X2RyYXdhYmxlLmNvbmZpZy5nZXRfdmFsdWUoIm5h bWUiKT0KOm51bGwpLGo9M0R7dmlldzp2aWV3LnRvX2RpY3QoKSx2aWV3cG9ydDp7Y2hyb206dmll dy5jaHJvbSxzdGFydDp2aWV3LmxvdyxlPQpuZDp2aWV3LmhpZ2gsb3ZlcnZpZXc6aH0sYm9va21h cmtzOmd9O3JldHVybiAkLmFqYXgoe3VybDpnYWxheHlfY29uZmlnLnJvb3Q9CisidmlzdWFsaXph dGlvbi9zYXZlIix0eXBlOiJQT1NUIixkYXRhVHlwZToianNvbiIsZGF0YTp7aWQ6dmlldy52aXNf aWQsdGl0bD0KZTp2aWV3LmNvbmZpZy5nZXRfdmFsdWUoIm5hbWUiKSxkYmtleTp2aWV3LmRia2V5 LHR5cGU6InRyYWNrc3RlciIsdmlzX2pzb246PQpKU09OLnN0cmluZ2lmeShqKX19KS5zdWNjZXNz KGZ1bmN0aW9uKGspe0dhbGF4eS5tb2RhbC5oaWRlKCk7dmlldy52aXNfaWQ9M0Q9CmsudmlzX2lk O3ZpZXcuaGFzX2NoYW5nZXM9M0RmYWxzZTt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIiIs ay51cmwrd2luZD0Kb3cubG9jYXRpb24uaGFzaCl9KS5lcnJvcihmdW5jdGlvbigpe0dhbGF4eS5t b2RhbC5zaG93KHt0aXRsZToiQ291bGQgTm90IFNhPQp2ZSIsYm9keToiQ291bGQgbm90IHNhdmUg dmlzdWFsaXphdGlvbi4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iLGJ1dHRvbnM6e0M9CmFuY2Vs OmZ1bmN0aW9uKCl7R2FsYXh5Lm1vZGFsLmhpZGUoKX19fSl9KX0sY3JlYXRlQnV0dG9uTWVudTpm dW5jdGlvbigpe3Zhcj0KIGc9M0R0aGlzLGg9M0Rtb2RfaWNvbl9idG4uY3JlYXRlX2ljb25fYnV0 dG9uc19tZW51KFt7aWNvbl9jbGFzczoicGx1cy1idXR0PQpvbiIsdGl0bGU6IkFkZCB0cmFja3Mi LG9uX2NsaWNrOmZ1bmN0aW9uKCl7Yy5zZWxlY3RfZGF0YXNldHMoZ2FsYXh5X2NvbmZpZy49CnJv b3QrInZpc3VhbGl6YXRpb24vbGlzdF9jdXJyZW50X2hpc3RvcnlfZGF0YXNldHMiLGdhbGF4eV9j b25maWcucm9vdCsiYXBpLz0KZGF0YXNldHMiLHsiZi1kYmtleSI6dmlldy5kYmtleX0sZnVuY3Rp b24oail7Yi5lYWNoKGosZnVuY3Rpb24oayl7dmlldy5hZGRfPQpkcmF3YWJsZShhLm9iamVjdF9m cm9tX3RlbXBsYXRlKGssdmlldyx2aWV3KSl9KX0pfX0se2ljb25fY2xhc3M6ImJsb2NrLS1wbHU9 CnMiLHRpdGxlOiJBZGQgZ3JvdXAiLG9uX2NsaWNrOmZ1bmN0aW9uKCl7dmlldy5hZGRfZHJhd2Fi bGUobmV3IGEuRHJhd2FibGVHcj0Kb3VwKHZpZXcsdmlldyx7bmFtZToiTmV3IEdyb3VwIn0pKX19 LHtpY29uX2NsYXNzOiJib29rbWFya3MiLHRpdGxlOiJCb29rbWFyPQprcyIsb25fY2xpY2s6ZnVu Y3Rpb24oKXtmb3JjZV9yaWdodF9wYW5lbCgoJCgiZGl2I3JpZ2h0IikuY3NzKCJyaWdodCIpPTNE PQo9M0QiMHB4Ij8iaGlkZSI6InNob3ciKSl9fSx7aWNvbl9jbGFzczoiZ2xvYmUiLHRpdGxlOiJD aXJjc3RlciIsb25fY2xpY2s6ZnU9Cm5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbj0zRGcuYmFzZVVS TCsidmlzdWFsaXphdGlvbi9jaXJjc3Rlcj9pZD0zRCIrdmlldy52aT0Kc19pZH19LHtpY29uX2Ns YXNzOiJkaXNrLS1hcnJvdyIsdGl0bGU6IlNhdmUiLG9uX2NsaWNrOmZ1bmN0aW9uKCl7Zy5zYXZl X3ZpPQp6KCl9fSx7aWNvbl9jbGFzczoiY3Jvc3MtY2lyY2xlIix0aXRsZToiQ2xvc2UiLG9uX2Ns aWNrOmZ1bmN0aW9uKCl7Zy5oYW5kbGU9Cl91bnNhdmVkX2NoYW5nZXModmlldyl9fV0se3Rvb2x0 aXBfY29uZmlnOntwbGFjZW1lbnQ6ImJvdHRvbSJ9fSk7dGhpcy5idXR0bz0Kbk1lbnU9M0RoO3Jl dHVybiBofSxhZGRfYm9va21hcmtzOmZ1bmN0aW9uKCl7dmFyIGc9M0R0aGlzLGg9M0R0aGlzLmJh c2VVUkw7PQpHYWxheHkubW9kYWwuc2hvdyh7dGl0bGU6IlNlbGVjdCBkYXRhc2V0IGZvciBuZXcg Ym9va21hcmtzIixib2R5OiJwcm9ncmVzcyI9Cn0pOyQuYWpheCh7dXJsOnRoaXMuYmFzZVVSTCsi L3Zpc3VhbGl6YXRpb24vbGlzdF9oaXN0b3JpZXMiLGRhdGE6eyJmLWRia2V5Ij0KOnZpZXcuZGJr ZXl9LGVycm9yOmZ1bmN0aW9uKCl7YWxlcnQoIkdyaWQgZmFpbGVkIil9LHN1Y2Nlc3M6ZnVuY3Rp b24oail7R2FsPQpheHkubW9kYWwuc2hvdyh7dGl0bGU6IlNlbGVjdCBkYXRhc2V0IGZvciBuZXcg Ym9va21hcmtzIixib2R5OmosYnV0dG9uczp7Q2E9Cm5jZWw6ZnVuY3Rpb24oKXtHYWxheHkubW9k YWwuaGlkZSgpfSxJbnNlcnQ6ZnVuY3Rpb24oKXskKCJpbnB1dFtuYW1lPTNEaWRdOj0KY2hlY2tl ZCxpbnB1dFtuYW1lPTNEbGRkYV9pZHNdOmNoZWNrZWQiKS5maXJzdCgpLmVhY2goZnVuY3Rpb24o KXt2YXIgayxsPTNEPQokKHRoaXMpLnZhbCgpO2lmKCQodGhpcykuYXR0cigibmFtZSIpPTNEPTNE PTNEImlkIil7az0zRHtoZGFfaWQ6bH19ZWxzZXtrPQo9M0R7bGRkYV9pZDpsfX0kLmFqYXgoe3Vy bDp0aGlzLmJhc2VVUkwrIi92aXN1YWxpemF0aW9uL2Jvb2ttYXJrc19mcm9tX2RhdGE9CnNldCIs ZGF0YTprLGRhdGFUeXBlOiJqc29uIn0pLnRoZW4oZnVuY3Rpb24obSl7Zm9yKGk9M0QwO2k8bS5k YXRhLmxlbmd0aDtpKz0KKyl7dmFyIG49M0RtLmRhdGFbaV07Zy5hZGRfYm9va21hcmsoblswXSxu WzFdKX19KX0pO0dhbGF4eS5tb2RhbC5oaWRlKCl9fX0pPQp9fSl9LGFkZF9ib29rbWFyazpmdW5j dGlvbihsLGosZyl7dmFyIG49M0QkKCIjcmlnaHQgLnVuaWZpZWQtcGFuZWwtYm9keSIpLHA9Cj0z RCQoIjxkaXYvPiIpLmFkZENsYXNzKCJib29rbWFyayIpLmFwcGVuZFRvKG4pO3ZhciBxPTNEJCgi PGRpdi8+IikuYWRkQ2xhcz0KcygicG9zaXRpb24iKS5hcHBlbmRUbyhwKSxtPTNEJCgiPGEgaHJl Zj0zRCcnLz4iKS50ZXh0KGwpLmFwcGVuZFRvKHEpLmNsaWNrPQooZnVuY3Rpb24oKXt2aWV3Lmdv X3RvKGwpO3JldHVybiBmYWxzZX0pLGs9M0QkKCI8ZGl2Lz4iKS50ZXh0KGopLmFwcGVuZFRvKHA9 Cik7aWYoZyl7dmFyIG89M0QkKCI8ZGl2Lz4iKS5hZGRDbGFzcygiZGVsZXRlLWljb24tY29udGFp bmVyIikucHJlcGVuZFRvKHApLj0KY2xpY2soZnVuY3Rpb24oKXtwLnNsaWRlVXAoImZhc3QiKTtw LnJlbW92ZSgpO3ZpZXcuaGFzX2NoYW5nZXM9M0R0cnVlO3JldHVyPQpuIGZhbHNlfSksaD0zRCQo IjxhIGhyZWY9M0QnJy8+IikuYWRkQ2xhc3MoImljb24tYnV0dG9uIGRlbGV0ZSIpLmFwcGVuZFRv KG89Cik7ay5tYWtlX3RleHRfZWRpdGFibGUoe251bV9yb3dzOjMsdXNlX3RleHRhcmVhOnRydWUs aGVscF90ZXh0OiJFZGl0IGJvb2ttYT0Kcmsgbm90ZSJ9KS5hZGRDbGFzcygiYW5ub3RhdGlvbiIp fXZpZXcuaGFzX2NoYW5nZXM9M0R0cnVlO3JldHVybiBwfSxjcmVhdGVfPQp2aXN1YWxpemF0aW9u OmZ1bmN0aW9uKG0sZyxsLG4sayl7dmFyIGo9M0R0aGlzLGg9M0RuZXcgYS5UcmFja3N0ZXJWaWV3 KGIuZXg9CnRlbmQobSx7aGVhZGVyOmZhbHNlfSkpO2guZWRpdG9yPTNEdHJ1ZTskLndoZW4oaC5s b2FkX2Nocm9tc19kZWZlcnJlZCkudGhlbj0KKGZ1bmN0aW9uKHkpe2lmKGcpe3ZhciB3PTNEZy5j aHJvbSxvPTNEZy5zdGFydCx0PTNEZy5lbmQscT0zRGcub3ZlcnZpZXc7aWYoPQp3JiYobyE9M0Q9 M0R1bmRlZmluZWQpJiZ0KXtoLmNoYW5nZV9jaHJvbSh3LG8sdCl9ZWxzZXtoLmNoYW5nZV9jaHJv bSh5WzBdLmM9Cmhyb20pfX1lbHNle2guY2hhbmdlX2Nocm9tKHlbMF0uY2hyb20pfWlmKGwpe3Zh ciByLHAscztmb3IodmFyIHU9M0QwO3U8bC5sZT0Kbmd0aDt1Kyspe2guYWRkX2RyYXdhYmxlKGEu b2JqZWN0X2Zyb21fdGVtcGxhdGUobFt1XSxoLGgpKX19dmFyIHg7Zm9yKHZhciB1PQo9M0QwO3U8 aC5kcmF3YWJsZXMubGVuZ3RoO3UrKyl7aWYoaC5kcmF3YWJsZXNbdV0uY29uZmlnLmdldF92YWx1 ZSgibmFtZSIpPQo9M0Q9M0Q9M0RxKXtoLnNldF9vdmVydmlldyhoLmRyYXdhYmxlc1t1XSk7YnJl YWt9fWlmKG4pe3ZhciB2O2Zvcih2YXIgdT0zRDA9Cjt1PG4ubGVuZ3RoO3UrKyl7dj0zRG5bdV07 ai5hZGRfYm9va21hcmsodi5wb3NpdGlvbix2LmFubm90YXRpb24sayl9fWguaGFzXz0KY2hhbmdl cz0zRGZhbHNlfSk7dGhpcy5zZXRfdXBfcm91dGVyKHt2aWV3Omh9KTtyZXR1cm4gaH0sc2V0X3Vw X3JvdXRlcjpmdW5jPQp0aW9uKGcpe25ldyBjLlRyYWNrQnJvd3NlclJvdXRlcihnKTtCYWNrYm9u ZS5oaXN0b3J5LnN0YXJ0KCl9LGluaXRfa2V5Ym9hcmQ9Cl9uYXY6ZnVuY3Rpb24oZyl7JChkb2N1 bWVudCkua2V5dXAoZnVuY3Rpb24oaCl7aWYoJChoLnNyY0VsZW1lbnQpLmlzKCI6aW5wdT0KdCIp KXtyZXR1cm59c3dpdGNoKGgud2hpY2gpe2Nhc2UgMzc6Zy5tb3ZlX2ZyYWN0aW9uKDAuMjUpO2Jy ZWFrO2Nhc2UgMzg6dmFyPQogaj0zRE1hdGgucm91bmQoZy52aWV3cG9ydF9jb250YWluZXIuaGVp Z2h0KCkvMTUpO2cudmlld3BvcnRfY29udGFpbmVyLnNjcm89CmxsVG9wKGcudmlld3BvcnRfY29u dGFpbmVyLnNjcm9sbFRvcCgpLTIwKTticmVhaztjYXNlIDM5OmcubW92ZV9mcmFjdGlvbigtMD0K LjI1KTticmVhaztjYXNlIDQwOnZhciBqPTNETWF0aC5yb3VuZChnLnZpZXdwb3J0X2NvbnRhaW5l ci5oZWlnaHQoKS8xNSk7Zy52PQppZXdwb3J0X2NvbnRhaW5lci5zY3JvbGxUb3AoZy52aWV3cG9y dF9jb250YWluZXIuc2Nyb2xsVG9wKCkrMjApO2JyZWFrfX0pfSw9CmhhbmRsZV91bnNhdmVkX2No YW5nZXM6ZnVuY3Rpb24oZyl7aWYoZy5oYXNfY2hhbmdlcyl7dmFyIGg9M0R0aGlzO0dhbGF4eS5t bz0KZGFsLnNob3coe3RpdGxlOiJDbG9zZSB2aXN1YWxpemF0aW9uIixib2R5OiJUaGVyZSBhcmUg dW5zYXZlZCBjaGFuZ2VzIHRvIHlvPQp1ciB2aXN1YWxpemF0aW9uIHdoaWNoIHdpbGwgYmUgbG9z dCBpZiB5b3UgZG8gbm90IHNhdmUgdGhlbS4iLGJ1dHRvbnM6e0NhbmM9CmVsOmZ1bmN0aW9uKCl7 R2FsYXh5Lm1vZGFsLmhpZGUoKX0sIkxlYXZlIHdpdGhvdXQgU2F2aW5nIjpmdW5jdGlvbigpeyQo d2luZD0Kb3cpLm9mZigiYmVmb3JldW5sb2FkIik7d2luZG93LmxvY2F0aW9uPTNEZ2FsYXh5X2Nv bmZpZy5yb290KyJ2aXN1YWxpemF0aW9uPQoifSxTYXZlOmZ1bmN0aW9uKCl7JC53aGVuKGguc2F2 ZV92aXooKSkudGhlbihmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbj0zRGc9CmFsYXh5X2NvbmZp Zy5yb290KyJ2aXN1YWxpemF0aW9uIn0pfX19KX1lbHNle3dpbmRvdy5sb2NhdGlvbj0zRGdhbGF4 eV9jb25maT0KZy5yb290KyJ2aXN1YWxpemF0aW9uIn19fSk7dmFyIGY9M0RlLkJhY2tib25lLlZp ZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0PQppb24oKXt1aT0zRG5ldyBkKGdhbGF4eV9jb25m aWcucm9vdCk7dWkuY3JlYXRlQnV0dG9uTWVudSgpO3VpLmJ1dHRvbk1lbnUuJGU9CmwuYXR0cigi c3R5bGUiLCJmbG9hdDogcmlnaHQiKTskKCIjY2VudGVyIC51bmlmaWVkLXBhbmVsLWhlYWRlci1p bm5lciIpLmFwcD0KZW5kKHVpLmJ1dHRvbk1lbnUuJGVsKTskKCIjcmlnaHQgLnVuaWZpZWQtcGFu ZWwtdGl0bGUiKS5hcHBlbmQoIkJvb2ttYXJrcyIpPQo7JCgiI3JpZ2h0IC51bmlmaWVkLXBhbmVs LWljb25zIikuYXBwZW5kKCI8YSBpZD0zRCdhZGQtYm9va21hcmstYnV0dG9uJyBjbGE9CnNzPTNE J2ljb24tYnV0dG9uIG1lbnUtYnV0dG9uIHBsdXMtYnV0dG9uJyBocmVmPTNEJ2phdmFzY3JpcHQ6 dm9pZCgwKTsnIHRpdD0KbGU9M0QnQWRkIGJvb2ttYXJrJz48L2E+Iik7JCgiI3JpZ2h0LWJvcmRl ciIpLmNsaWNrKGZ1bmN0aW9uKCl7dmlldy5yZXNpemVfPQp3aW5kb3coKX0pO2ZvcmNlX3JpZ2h0 X3BhbmVsKCJoaWRlIik7aWYoZ2FsYXh5X2NvbmZpZy5hcHAuaWQpe3RoaXMudmlld19leGk9CnN0 aW5nKCl9ZWxzZXt0aGlzLnZpZXdfbmV3KCl9fSx2aWV3X2V4aXN0aW5nOmZ1bmN0aW9uKCl7dmFy IGc9M0RnYWxheHlfY29uZj0KaWcuYXBwLnZpel9jb25maWc7dmlldz0zRHVpLmNyZWF0ZV92aXN1 YWxpemF0aW9uKHtjb250YWluZXI6JCgiI2NlbnRlciAudW5pPQpmaWVkLXBhbmVsLWJvZHkiKSxu YW1lOmcudGl0bGUsdmlzX2lkOmcudmlzX2lkLGRia2V5OmcuZGJrZXl9LGcudmlld3BvcnQsZy49 CnRyYWNrcyxnLmJvb2ttYXJrcyx0cnVlKTt0aGlzLmluaXRfZWRpdG9yKCl9LHZpZXdfbmV3OmZ1 bmN0aW9uKCl7dmFyIGc9M0R0aD0KaXM7JC5hamF4KHt1cmw6Z2FsYXh5X2NvbmZpZy5yb290KyJh cGkvZ2Vub21lcz9jaHJvbV9pbmZvPTNEVHJ1ZSIsZGF0YTp7fSxlPQpycm9yOmZ1bmN0aW9uKCl7 YWxlcnQoIkNvdWxkbid0IGNyZWF0ZSBuZXcgYnJvd3Nlci4iKX0sc3VjY2VzczpmdW5jdGlvbiho KXs9CkdhbGF4eS5tb2RhbC5zaG93KHt0aXRsZToiTmV3IFZpc3VhbGl6YXRpb24iLGJvZHk6Zy50 ZW1wbGF0ZV92aWV3X25ldyhoKSxidT0KdHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe3dpbmRvdy5s b2NhdGlvbj0zRGdhbGF4eV9jb25maWcucm9vdCsidmlzdWFsaXphdGlvPQpuL2xpc3QifSxDcmVh dGU6ZnVuY3Rpb24oKXtnLmNyZWF0ZV9icm93c2VyKCQoIiNuZXctdGl0bGUiKS52YWwoKSwkKCIj bmV3LWQ9CmJrZXkiKS52YWwoKSk7R2FsYXh5Lm1vZGFsLmhpZGUoKX19fSk7aWYoZ2FsYXh5X2Nv bmZpZy5hcHAuZGVmYXVsdF9kYmtleSl7JD0KKCIjbmV3LWRia2V5IikudmFsKGdhbGF4eV9jb25m aWcuYXBwLmRlZmF1bHRfZGJrZXkpfSQoIiNuZXctdGl0bGUiKS5mb2N1cygpPQo7JCgic2VsZWN0 W25hbWU9M0QnZGJrZXknXSIpLnNlbGVjdDIoKTskKCIjb3ZlcmxheSIpLmNzcygib3ZlcmZsb3ci LCJhdXRvIik9Cn19KX0sdGVtcGxhdGVfdmlld19uZXc6ZnVuY3Rpb24oZyl7dmFyIGo9M0QnPGZv cm0gaWQ9M0QibmV3LWJyb3dzZXItZm9ybSIgYT0KY3Rpb249M0QiamF2YXNjcmlwdDp2b2lkKDAp OyIgbWV0aG9kPTNEInBvc3QiIG9uc3VibWl0PTNEInJldHVybiBmYWxzZTsiPjxkPQppdiBjbGFz cz0zRCJmb3JtLXJvdyI+PGxhYmVsIGZvcj0zRCJuZXctdGl0bGUiPkJyb3dzZXIgbmFtZTo8L2xh YmVsPjxkaXYgY2w9CmFzcz0zRCJmb3JtLXJvdy1pbnB1dCI+PGlucHV0IHR5cGU9M0QidGV4dCIg bmFtZT0zRCJ0aXRsZSIgaWQ9M0QibmV3LXRpdGxlIj0KIHZhbHVlPTNEIlVubmFtZWQiPjwvaW5w dXQ+PC9kaXY+PGRpdiBzdHlsZT0zRCJjbGVhcjogYm90aDsiPjwvZGl2PjwvZGl2PjxkPQppdiBj bGFzcz0zRCJmb3JtLXJvdyI+PGxhYmVsIGZvcj0zRCJuZXctZGJrZXkiPlJlZmVyZW5jZSBnZW5v bWUgYnVpbGQgKGRia2U9CnkpOiA8L2xhYmVsPjxkaXYgY2xhc3M9M0QiZm9ybS1yb3ctaW5wdXQi PjxzZWxlY3QgbmFtZT0zRCJkYmtleSIgaWQ9M0QibmV3LT0KZGJrZXkiPic7Zm9yKHZhciBoPTNE MDtoPGcubGVuZ3RoO2grKyl7ais9M0QnPG9wdGlvbiB2YWx1ZT0zRCInK2dbaF1bMV0rJyI+PQon K2dbaF1bMF0rIjwvb3B0aW9uPiJ9ais9M0QnPC9zZWxlY3Q+PC9kaXY+PGRpdiBzdHlsZT0zRCJj bGVhcjogYm90aDsiPjwvZGk9CnY+PC9kaXY+PGRpdiBjbGFzcz0zRCJmb3JtLXJvdyI+SXMgdGhl IGJ1aWxkIG5vdCBsaXN0ZWQgaGVyZT8gPGEgaHJlZj0zRCInKz0KZ2FsYXh5X2NvbmZpZy5yb290 Kyd1c2VyL2Ria2V5cz91c2VfcGFuZWxzPTNEVHJ1ZSI+QWRkIGEgQ3VzdG9tIEJ1aWxkPC9hPjwv PQpkaXY+PC9mb3JtPic7cmV0dXJuIGp9LGNyZWF0ZV9icm93c2VyOmZ1bmN0aW9uKGgsZyl7JChk b2N1bWVudCkudHJpZ2dlcigiY289Cm52ZXJ0X3RvX3ZhbHVlcyIpO3ZpZXc9M0R1aS5jcmVhdGVf dmlzdWFsaXphdGlvbih7Y29udGFpbmVyOiQoIiNjZW50ZXIgLnVuaT0KZmllZC1wYW5lbC1ib2R5 IiksbmFtZTpoLGRia2V5Omd9LGdhbGF4eV9jb25maWcuYXBwLmdlbmVfcmVnaW9uKTt0aGlzLmlu aXRfPQplZGl0b3IoKTt2aWV3LmVkaXRvcj0zRHRydWV9LGluaXRfZWRpdG9yOmZ1bmN0aW9uKCl7 JCgiI2NlbnRlciAudW5pZmllZC1wYW49CmVsLXRpdGxlIikudGV4dCh2aWV3LmNvbmZpZy5nZXRf dmFsdWUoIm5hbWUiKSsiICgiK3ZpZXcuZGJrZXkrIikiKTtpZihnYWxheD0KeV9jb25maWcuYXBw LmFkZF9kYXRhc2V0KXskLmFqYXgoe3VybDpnYWxheHlfY29uZmlnLnJvb3QrImFwaS9kYXRhc2V0 cy8iK2dhPQpsYXh5X2NvbmZpZy5hcHAuYWRkX2RhdGFzZXQsZGF0YTp7aGRhX2xkZGE6ImhkYSIs ZGF0YV90eXBlOiJ0cmFja19jb25maWcifSw9CmRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0 aW9uKGcpe3ZpZXcuYWRkX2RyYXdhYmxlKGEub2JqZWN0X2Zyb21fdGVtcGxhdD0KZShnLHZpZXcs dmlldykpfX0pfSQoIiNhZGQtYm9va21hcmstYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oKXt2YXIg aD0zRHZpZXcuPQpjaHJvbSsiOiIrdmlldy5sb3crIi0iK3ZpZXcuaGlnaCxnPTNEIkJvb2ttYXJr IGRlc2NyaXB0aW9uIjtyZXR1cm4gdWkuYWRkX2I9Cm9va21hcmsoaCxnLHRydWUpfSk7dWkuaW5p dF9rZXlib2FyZF9uYXYodmlldyk7JCh3aW5kb3cpLm9uKCJiZWZvcmV1bmxvYWQiLD0KZnVuY3Rp b24oKXtpZih2aWV3Lmhhc19jaGFuZ2VzKXtyZXR1cm4iVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdl cyB0byB5b3VyIHZpPQpzdWFsaXphdGlvbiB0aGF0IHdpbGwgYmUgbG9zdCBpZiB5b3UgbGVhdmUg dGhpcyBwYWdlLiJ9fSl9fSk7cmV0dXJue1RyYWNrc3Q9CmVyVUk6ZCxHYWxheHlBcHA6Zn19KTsK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit2YXIgdWk9M0RudWxsO3ZhciB2aWV3PTNEbnVs bDt2YXIgYnJvd3Nlcl9yb3V0ZXI9M0RudWxsO3JlcXVpcmUoWyJ1dGlscy91dD0KaWxzIiwibGli cy9qcXVlcnkvanF1ZXJ5LmV2ZW50LmRyYWciLCJsaWJzL2pxdWVyeS9qcXVlcnkuZXZlbnQuaG92 ZXIiLCJsaWJzPQovanF1ZXJ5L2pxdWVyeS5tb3VzZXdoZWVsIiwibGlicy9qcXVlcnkvanF1ZXJ5 LXVpIiwibGlicy9qcXVlcnkvc2VsZWN0MiIsImw9Cmlicy9mYXJidGFzdGljIiwibGlicy9qcXVl cnkvanF1ZXJ5LmZvcm0iLCJsaWJzL2pxdWVyeS9qcXVlcnkucmF0aW5nIl0sZnVuYz0KdGlvbihi LGEpe2IuY3NzTG9hZEZpbGUoInN0YXRpYy9zdHlsZS9qcXVlcnkucmF0aW5nLmNzcyIpO2IuY3Nz TG9hZEZpbGUoInN0PQphdGljL3N0eWxlL2F1dG9jb21wbGV0ZV90YWdnaW5nLmNzcyIpO2IuY3Nz TG9hZEZpbGUoInN0YXRpYy9zdHlsZS9qcXVlcnktdWk9Ci9zbW9vdGhuZXNzL2pxdWVyeS11aS5j c3MiKTtiLmNzc0xvYWRGaWxlKCJzdGF0aWMvc3R5bGUvbGlicmFyeS5jc3MiKTtiLmNzcz0KTG9h ZEZpbGUoInN0YXRpYy9zdHlsZS90cmFja3N0ZXIuY3NzIil9KTtkZWZpbmUoWyJsaWJzL3VuZGVy c2NvcmUiLCJiYXNlIiwiPQp2aXovdHJhY2tzdGVyL3RyYWNrcyIsInZpei92aXN1YWxpemF0aW9u IiwibXZjL3VpL2ljb24tYnV0dG9uIl0sZnVuY3Rpb24oYiw9CmYsYSxkLGMpe3ZhciBlPTNEZi5C YXNlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihoKXt0aGlzLmJhc2VVUkw9M0RofSxzYT0K dmVfdml6OmZ1bmN0aW9uKCl7R2FsYXh5Lm1vZGFsLnNob3coe3RpdGxlOiJTYXZpbmcuLi4iLGJv ZHk6InByb2dyZXNzIn0pO3ZhPQpyIGg9M0RbXTskKCIuYm9va21hcmsiKS5lYWNoKGZ1bmN0aW9u KCl7aC5wdXNoKHtwb3NpdGlvbjokKHRoaXMpLmNoaWxkcmVuKCI9Ci5wb3NpdGlvbiIpLnRleHQo KSxhbm5vdGF0aW9uOiQodGhpcykuY2hpbGRyZW4oIi5hbm5vdGF0aW9uIikudGV4dCgpfSl9KTt2 YT0KciBqPTNEKHZpZXcub3ZlcnZpZXdfZHJhd2FibGU/dmlldy5vdmVydmlld19kcmF3YWJsZS5j b25maWcuZ2V0X3ZhbHVlKCJuYW1lPQoiKTpudWxsKSxrPTNEe3ZpZXc6dmlldy50b19kaWN0KCks dmlld3BvcnQ6e2Nocm9tOnZpZXcuY2hyb20sc3RhcnQ6dmlldy5sb3c9CixlbmQ6dmlldy5oaWdo LG92ZXJ2aWV3Omp9LGJvb2ttYXJrczpofTtyZXR1cm4gJC5hamF4KHt1cmw6Z2FsYXh5X2NvbmZp Zy5ybz0Kb3QrInZpc3VhbGl6YXRpb24vc2F2ZSIsdHlwZToiUE9TVCIsZGF0YVR5cGU6Impzb24i LGRhdGE6e2lkOnZpZXcudmlzX2lkLHRpPQp0bGU6dmlldy5jb25maWcuZ2V0X3ZhbHVlKCJuYW1l IiksZGJrZXk6dmlldy5kYmtleSx0eXBlOiJ0cmFja3N0ZXIiLHZpc19qc289Cm46SlNPTi5zdHJp bmdpZnkoayl9fSkuc3VjY2VzcyhmdW5jdGlvbihsKXtHYWxheHkubW9kYWwuaGlkZSgpO3ZpZXcu dmlzX2lkPQo9M0RsLnZpc19pZDt2aWV3Lmhhc19jaGFuZ2VzPTNEZmFsc2U7d2luZG93Lmhpc3Rv cnkucHVzaFN0YXRlKHt9LCIiLGwudXJsK3c9CmluZG93LmxvY2F0aW9uLmhhc2gpfSkuZXJyb3Io ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuc2hvdyh7dGl0bGU6IkNvdWxkIE5vdD0KIFNhdmUiLGJv ZHk6IkNvdWxkIG5vdCBzYXZlIHZpc3VhbGl6YXRpb24uIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIu IixidXR0b25zPQo6e0NhbmNlbDpmdW5jdGlvbigpe0dhbGF4eS5tb2RhbC5oaWRlKCl9fX0pfSl9 LGNyZWF0ZUJ1dHRvbk1lbnU6ZnVuY3Rpb24oKXs9CnZhciBoPTNEdGhpcyxqPTNEYy5jcmVhdGVf aWNvbl9idXR0b25zX21lbnUoW3tpY29uX2NsYXNzOiJwbHVzLWJ1dHRvbiIsdGl0bD0KZToiQWRk IHRyYWNrcyIsb25fY2xpY2s6ZnVuY3Rpb24oKXtkLnNlbGVjdF9kYXRhc2V0cyhnYWxheHlfY29u ZmlnLnJvb3QrInZpPQpzdWFsaXphdGlvbi9saXN0X2N1cnJlbnRfaGlzdG9yeV9kYXRhc2V0cyIs Z2FsYXh5X2NvbmZpZy5yb290KyJhcGkvZGF0YXNldHM9CiIseyJmLWRia2V5Ijp2aWV3LmRia2V5 fSxmdW5jdGlvbihrKXtiLmVhY2goayxmdW5jdGlvbihsKXt2aWV3LmFkZF9kcmF3YWJsZT0KKGEu b2JqZWN0X2Zyb21fdGVtcGxhdGUobCx2aWV3LHZpZXcpKX0pfSl9fSx7aWNvbl9jbGFzczoiYmxv Y2stLXBsdXMiLHRpdGxlPQo6IkFkZCBncm91cCIsb25fY2xpY2s6ZnVuY3Rpb24oKXt2aWV3LmFk ZF9kcmF3YWJsZShuZXcgYS5EcmF3YWJsZUdyb3VwKHZpZXc9Cix2aWV3LHtuYW1lOiJOZXcgR3Jv dXAifSkpfX0se2ljb25fY2xhc3M6ImJvb2ttYXJrcyIsdGl0bGU6IkJvb2ttYXJrcyIsb25fYz0K bGljazpmdW5jdGlvbigpe2ZvcmNlX3JpZ2h0X3BhbmVsKCgkKCJkaXYjcmlnaHQiKS5jc3MoInJp Z2h0Iik9M0Q9M0QiMHB4Ij8iPQpoaWRlIjoic2hvdyIpKX19LHtpY29uX2NsYXNzOiJnbG9iZSIs dGl0bGU6IkNpcmNzdGVyIixvbl9jbGljazpmdW5jdGlvbigpe3c9CmluZG93LmxvY2F0aW9uPTNE aC5iYXNlVVJMKyJ2aXN1YWxpemF0aW9uL2NpcmNzdGVyP2lkPTNEIit2aWV3LnZpc19pZH19LHtp Yz0Kb25fY2xhc3M6ImRpc2stLWFycm93Iix0aXRsZToiU2F2ZSIsb25fY2xpY2s6ZnVuY3Rpb24o KXtoLnNhdmVfdml6KCl9fSx7aWNvPQpuX2NsYXNzOiJjcm9zcy1jaXJjbGUiLHRpdGxlOiJDbG9z ZSIsb25fY2xpY2s6ZnVuY3Rpb24oKXtoLmhhbmRsZV91bnNhdmVkX2M9Cmhhbmdlcyh2aWV3KX19 XSx7dG9vbHRpcF9jb25maWc6e3BsYWNlbWVudDoiYm90dG9tIn19KTt0aGlzLmJ1dHRvbk1lbnU9 M0RqOz0KcmV0dXJuIGp9LGFkZF9ib29rbWFya3M6ZnVuY3Rpb24oKXt2YXIgaD0zRHRoaXMsaj0z RHRoaXMuYmFzZVVSTDtHYWxheHkubW9kPQphbC5zaG93KHt0aXRsZToiU2VsZWN0IGRhdGFzZXQg Zm9yIG5ldyBib29rbWFya3MiLGJvZHk6InByb2dyZXNzIn0pOyQuYWpheCg9Cnt1cmw6dGhpcy5i YXNlVVJMKyIvdmlzdWFsaXphdGlvbi9saXN0X2hpc3RvcmllcyIsZGF0YTp7ImYtZGJrZXkiOnZp ZXcuZGJrZT0KeX0sZXJyb3I6ZnVuY3Rpb24oKXthbGVydCgiR3JpZCBmYWlsZWQiKX0sc3VjY2Vz czpmdW5jdGlvbihrKXtHYWxheHkubW9kYWwuPQpzaG93KHt0aXRsZToiU2VsZWN0IGRhdGFzZXQg Zm9yIG5ldyBib29rbWFya3MiLGJvZHk6ayxidXR0b25zOntDYW5jZWw6ZnVuY3Q9Cmlvbigpe0dh bGF4eS5tb2RhbC5oaWRlKCl9LEluc2VydDpmdW5jdGlvbigpeyQoImlucHV0W25hbWU9M0RpZF06 Y2hlY2tlZCxpbj0KcHV0W25hbWU9M0RsZGRhX2lkc106Y2hlY2tlZCIpLmZpcnN0KCkuZWFjaChm dW5jdGlvbigpe3ZhciBsLG09M0QkKHRoaXMpLnZhPQpsKCk7aWYoJCh0aGlzKS5hdHRyKCJuYW1l Iik9M0Q9M0Q9M0QiaWQiKXtsPTNEe2hkYV9pZDptfX1lbHNle2w9M0R7bGRkYV9pZDo9Cm19fSQu YWpheCh7dXJsOnRoaXMuYmFzZVVSTCsiL3Zpc3VhbGl6YXRpb24vYm9va21hcmtzX2Zyb21fZGF0 YXNldCIsZGF0YTpsLD0KZGF0YVR5cGU6Impzb24ifSkudGhlbihmdW5jdGlvbihuKXtmb3IoaT0z RDA7aTxuLmRhdGEubGVuZ3RoO2krKyl7dmFyIG89M0RuPQouZGF0YVtpXTtoLmFkZF9ib29rbWFy ayhvWzBdLG9bMV0pfX0pfSk7R2FsYXh5Lm1vZGFsLmhpZGUoKX19fSl9fSl9LGFkZF9ib289Cmtt YXJrOmZ1bmN0aW9uKG0sayxoKXt2YXIgbz0zRCQoIiNyaWdodCAudW5pZmllZC1wYW5lbC1ib2R5 IikscT0zRCQoIjxkaXYvPj0KIikuYWRkQ2xhc3MoImJvb2ttYXJrIikuYXBwZW5kVG8obyk7dmFy IHI9M0QkKCI8ZGl2Lz4iKS5hZGRDbGFzcygicG9zaXRpb24iPQopLmFwcGVuZFRvKHEpLG49M0Qk KCI8YSBocmVmPTNEJycvPiIpLnRleHQobSkuYXBwZW5kVG8ocikuY2xpY2soZnVuY3Rpb24oKXs9 CnZpZXcuZ29fdG8obSk7cmV0dXJuIGZhbHNlfSksbD0zRCQoIjxkaXYvPiIpLnRleHQoaykuYXBw ZW5kVG8ocSk7aWYoaCl7dmFyID0KcD0zRCQoIjxkaXYvPiIpLmFkZENsYXNzKCJkZWxldGUtaWNv bi1jb250YWluZXIiKS5wcmVwZW5kVG8ocSkuY2xpY2soZnVuY3RpPQpvbigpe3Euc2xpZGVVcCgi ZmFzdCIpO3EucmVtb3ZlKCk7dmlldy5oYXNfY2hhbmdlcz0zRHRydWU7cmV0dXJuIGZhbHNlfSks aj0KPTNEJCgiPGEgaHJlZj0zRCcnLz4iKS5hZGRDbGFzcygiaWNvbi1idXR0b24gZGVsZXRlIiku YXBwZW5kVG8ocCk7bC5tYWtlX3RlPQp4dF9lZGl0YWJsZSh7bnVtX3Jvd3M6Myx1c2VfdGV4dGFy ZWE6dHJ1ZSxoZWxwX3RleHQ6IkVkaXQgYm9va21hcmsgbm90ZSJ9KS49CmFkZENsYXNzKCJhbm5v dGF0aW9uIil9dmlldy5oYXNfY2hhbmdlcz0zRHRydWU7cmV0dXJuIHF9LGNyZWF0ZV92aXN1YWxp emF0aT0Kb246ZnVuY3Rpb24obixoLG0sbyxsKXt2YXIgaz0zRHRoaXMsaj0zRG5ldyBhLlRyYWNr c3RlclZpZXcoYi5leHRlbmQobix7aGVhPQpkZXI6ZmFsc2V9KSk7ai5lZGl0b3I9M0R0cnVlOyQu d2hlbihqLmxvYWRfY2hyb21zX2RlZmVycmVkKS50aGVuKGZ1bmN0aW9uKHo9Cil7aWYoaCl7dmFy IHg9M0RoLmNocm9tLHA9M0RoLnN0YXJ0LHU9M0RoLmVuZCxyPTNEaC5vdmVydmlldztpZih4JiYo cCE9M0Q9Cj0zRHVuZGVmaW5lZCkmJnUpe2ouY2hhbmdlX2Nocm9tKHgscCx1KX1lbHNle2ouY2hh bmdlX2Nocm9tKHpbMF0uY2hyb20pfX1lbD0Kc2V7ai5jaGFuZ2VfY2hyb20oelswXS5jaHJvbSl9 aWYobSl7dmFyIHMscSx0O2Zvcih2YXIgdj0zRDA7djxtLmxlbmd0aDt2KyspPQp7ai5hZGRfZHJh d2FibGUoYS5vYmplY3RfZnJvbV90ZW1wbGF0ZShtW3ZdLGosaikpfX12YXIgeTtmb3IodmFyIHY9 M0QwO3Y8ai49CmRyYXdhYmxlcy5sZW5ndGg7disrKXtpZihqLmRyYXdhYmxlc1t2XS5jb25maWcu Z2V0X3ZhbHVlKCJuYW1lIik9M0Q9M0Q9M0RyKT0Ke2ouc2V0X292ZXJ2aWV3KGouZHJhd2FibGVz W3ZdKTticmVha319aWYobyl7dmFyIHc7Zm9yKHZhciB2PTNEMDt2PG8ubGVuZ3RoPQo7disrKXt3 PTNEb1t2XTtrLmFkZF9ib29rbWFyayh3LnBvc2l0aW9uLHcuYW5ub3RhdGlvbixsKX19ai5oYXNf Y2hhbmdlcz0zRGY9CmFsc2V9KTt0aGlzLnNldF91cF9yb3V0ZXIoe3ZpZXc6an0pO3JldHVybiBq fSxzZXRfdXBfcm91dGVyOmZ1bmN0aW9uKGgpe25ldz0KIGQuVHJhY2tCcm93c2VyUm91dGVyKGgp O0JhY2tib25lLmhpc3Rvcnkuc3RhcnQoKX0saW5pdF9rZXlib2FyZF9uYXY6ZnVuY3RpPQpvbiho KXskKGRvY3VtZW50KS5rZXl1cChmdW5jdGlvbihqKXtpZigkKGouc3JjRWxlbWVudCkuaXMoIjpp bnB1dCIpKXtyZXR1cm49Cn1zd2l0Y2goai53aGljaCl7Y2FzZSAzNzpoLm1vdmVfZnJhY3Rpb24o MC4yNSk7YnJlYWs7Y2FzZSAzODp2YXIgaz0zRE1hdGgucj0Kb3VuZChoLnZpZXdwb3J0X2NvbnRh aW5lci5oZWlnaHQoKS8xNSk7aC52aWV3cG9ydF9jb250YWluZXIuc2Nyb2xsVG9wKGgudmllPQp3 cG9ydF9jb250YWluZXIuc2Nyb2xsVG9wKCktMjApO2JyZWFrO2Nhc2UgMzk6aC5tb3ZlX2ZyYWN0 aW9uKC0wLjI1KTticmVhazs9CmNhc2UgNDA6dmFyIGs9M0RNYXRoLnJvdW5kKGgudmlld3BvcnRf Y29udGFpbmVyLmhlaWdodCgpLzE1KTtoLnZpZXdwb3J0X2Nvbj0KdGFpbmVyLnNjcm9sbFRvcCho LnZpZXdwb3J0X2NvbnRhaW5lci5zY3JvbGxUb3AoKSsyMCk7YnJlYWt9fSl9LGhhbmRsZV91bnNh PQp2ZWRfY2hhbmdlczpmdW5jdGlvbihoKXtpZihoLmhhc19jaGFuZ2VzKXt2YXIgaj0zRHRoaXM7 R2FsYXh5Lm1vZGFsLnNob3coe3Q9Cml0bGU6IkNsb3NlIHZpc3VhbGl6YXRpb24iLGJvZHk6IlRo ZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciB2aXN1YWxpej0KYXRpb24gd2hpY2ggd2ls bCBiZSBsb3N0IGlmIHlvdSBkbyBub3Qgc2F2ZSB0aGVtLiIsYnV0dG9uczp7Q2FuY2VsOmZ1bmN0 aW9uPQooKXtHYWxheHkubW9kYWwuaGlkZSgpfSwiTGVhdmUgd2l0aG91dCBTYXZpbmciOmZ1bmN0 aW9uKCl7JCh3aW5kb3cpLm9mZigiYmU9CmZvcmV1bmxvYWQiKTt3aW5kb3cubG9jYXRpb249M0Rn YWxheHlfY29uZmlnLnJvb3QrInZpc3VhbGl6YXRpb24ifSxTYXZlOmZ1bj0KY3Rpb24oKXskLndo ZW4oai5zYXZlX3ZpeigpKS50aGVuKGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uPTNEZ2FsYXh5 X2NvbmZpPQpnLnJvb3QrInZpc3VhbGl6YXRpb24ifSl9fX0pfWVsc2V7d2luZG93LmxvY2F0aW9u PTNEZ2FsYXh5X2NvbmZpZy5yb290KyJ2aXM9CnVhbGl6YXRpb24ifX19KTt2YXIgZz0zRGYuQmFj a2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oKXt1aT0zRD0KbmV3IGUoZ2Fs YXh5X2NvbmZpZy5yb290KTt1aS5jcmVhdGVCdXR0b25NZW51KCk7dWkuYnV0dG9uTWVudS4kZWwu YXR0cigic3R5PQpsZSIsImZsb2F0OiByaWdodCIpOyQoIiNjZW50ZXIgLnVuaWZpZWQtcGFuZWwt aGVhZGVyLWlubmVyIikuYXBwZW5kKHVpLmJ1dHQ9Cm9uTWVudS4kZWwpOyQoIiNyaWdodCAudW5p ZmllZC1wYW5lbC10aXRsZSIpLmFwcGVuZCgiQm9va21hcmtzIik7JCgiI3JpZ2h0ID0KLnVuaWZp ZWQtcGFuZWwtaWNvbnMiKS5hcHBlbmQoIjxhIGlkPTNEJ2FkZC1ib29rbWFyay1idXR0b24nIGNs YXNzPTNEJ2ljb24tPQpidXR0b24gbWVudS1idXR0b24gcGx1cy1idXR0b24nIGhyZWY9M0QnamF2 YXNjcmlwdDp2b2lkKDApOycgdGl0bGU9M0QnQWRkIGI9Cm9va21hcmsnPjwvYT4iKTskKCIjcmln aHQtYm9yZGVyIikuY2xpY2soZnVuY3Rpb24oKXt2aWV3LnJlc2l6ZV93aW5kb3coKX0pOz0KZm9y Y2VfcmlnaHRfcGFuZWwoImhpZGUiKTtpZihnYWxheHlfY29uZmlnLmFwcC5pZCl7dGhpcy52aWV3 X2V4aXN0aW5nKCl9ZWxzPQple3RoaXMudmlld19uZXcoKX19LHZpZXdfZXhpc3Rpbmc6ZnVuY3Rp b24oKXt2YXIgaD0zRGdhbGF4eV9jb25maWcuYXBwLnZpel89CmNvbmZpZzt2aWV3PTNEdWkuY3Jl YXRlX3Zpc3VhbGl6YXRpb24oe2NvbnRhaW5lcjokKCIjY2VudGVyIC51bmlmaWVkLXBhbmVsLT0K Ym9keSIpLG5hbWU6aC50aXRsZSx2aXNfaWQ6aC52aXNfaWQsZGJrZXk6aC5kYmtleX0saC52aWV3 cG9ydCxoLnRyYWNrcyxoLmJvPQpva21hcmtzLHRydWUpO3RoaXMuaW5pdF9lZGl0b3IoKX0sdmll d19uZXc6ZnVuY3Rpb24oKXt2YXIgaD0zRHRoaXM7JC5hamF4KHs9CnVybDpnYWxheHlfY29uZmln LnJvb3QrImFwaS9nZW5vbWVzP2Nocm9tX2luZm89M0RUcnVlIixkYXRhOnt9LGVycm9yOmZ1bmN0 aT0Kb24oKXthbGVydCgiQ291bGRuJ3QgY3JlYXRlIG5ldyBicm93c2VyLiIpfSxzdWNjZXNzOmZ1 bmN0aW9uKGope0dhbGF4eS5tb2RhPQpsLnNob3coe3RpdGxlOiJOZXcgVmlzdWFsaXphdGlvbiIs Ym9keTpoLnRlbXBsYXRlX3ZpZXdfbmV3KGopLGJ1dHRvbnM6e0NhbmM9CmVsOmZ1bmN0aW9uKCl7 d2luZG93LmxvY2F0aW9uPTNEZ2FsYXh5X2NvbmZpZy5yb290KyJ2aXN1YWxpemF0aW9uL2xpc3Qi fSxDcj0KZWF0ZTpmdW5jdGlvbigpe2guY3JlYXRlX2Jyb3dzZXIoJCgiI25ldy10aXRsZSIpLnZh bCgpLCQoIiNuZXctZGJrZXkiKS52YWwoPQopKTtHYWxheHkubW9kYWwuaGlkZSgpfX19KTtpZihn YWxheHlfY29uZmlnLmFwcC5kZWZhdWx0X2Ria2V5KXskKCIjbmV3LWRia2U9CnkiKS52YWwoZ2Fs YXh5X2NvbmZpZy5hcHAuZGVmYXVsdF9kYmtleSl9JCgiI25ldy10aXRsZSIpLmZvY3VzKCk7JCgi c2VsZWN0Wz0KbmFtZT0zRCdkYmtleSddIikuc2VsZWN0MigpOyQoIiNvdmVybGF5IikuY3NzKCJv dmVyZmxvdyIsImF1dG8iKX19KX0sdGVtcGxhPQp0ZV92aWV3X25ldzpmdW5jdGlvbihoKXt2YXIg az0zRCc8Zm9ybSBpZD0zRCJuZXctYnJvd3Nlci1mb3JtIiBhY3Rpb249M0QiamE9CnZhc2NyaXB0 OnZvaWQoMCk7IiBtZXRob2Q9M0QicG9zdCIgb25zdWJtaXQ9M0QicmV0dXJuIGZhbHNlOyI+PGRp diBjbGFzcz0zRD0KImZvcm0tcm93Ij48bGFiZWwgZm9yPTNEIm5ldy10aXRsZSI+QnJvd3NlciBu YW1lOjwvbGFiZWw+PGRpdiBjbGFzcz0zRCJmb3JtPQotcm93LWlucHV0Ij48aW5wdXQgdHlwZT0z RCJ0ZXh0IiBuYW1lPTNEInRpdGxlIiBpZD0zRCJuZXctdGl0bGUiIHZhbHVlPTNEIlU9Cm5uYW1l ZCI+PC9pbnB1dD48L2Rpdj48ZGl2IHN0eWxlPTNEImNsZWFyOiBib3RoOyI+PC9kaXY+PC9kaXY+ PGRpdiBjbGFzcz0zRD0KImZvcm0tcm93Ij48bGFiZWwgZm9yPTNEIm5ldy1kYmtleSI+UmVmZXJl bmNlIGdlbm9tZSBidWlsZCAoZGJrZXkpOiA8L2xhYmVsPQo+PGRpdiBjbGFzcz0zRCJmb3JtLXJv dy1pbnB1dCI+PHNlbGVjdCBuYW1lPTNEImRia2V5IiBpZD0zRCJuZXctZGJrZXkiPic7Zm89CnIo dmFyIGo9M0QwO2o8aC5sZW5ndGg7aisrKXtrKz0zRCc8b3B0aW9uIHZhbHVlPTNEIicraFtqXVsx XSsnIj4nK2hbal1bMF0rIj0KPC9vcHRpb24+In1rKz0zRCc8L3NlbGVjdD48L2Rpdj48ZGl2IHN0 eWxlPTNEImNsZWFyOiBib3RoOyI+PC9kaXY+PC9kaXY+PGRpPQp2IGNsYXNzPTNEImZvcm0tcm93 Ij5JcyB0aGUgYnVpbGQgbm90IGxpc3RlZCBoZXJlPyA8YSBocmVmPTNEIicrZ2FsYXh5X2NvbmY9 CmlnLnJvb3QrJ3VzZXIvZGJrZXlzP3VzZV9wYW5lbHM9M0RUcnVlIj5BZGQgYSBDdXN0b20gQnVp bGQ8L2E+PC9kaXY+PC9mb3JtPj0KJztyZXR1cm4ga30sY3JlYXRlX2Jyb3dzZXI6ZnVuY3Rpb24o aixoKXskKGRvY3VtZW50KS50cmlnZ2VyKCJjb252ZXJ0X3RvX3ZhPQpsdWVzIik7dmlldz0zRHVp LmNyZWF0ZV92aXN1YWxpemF0aW9uKHtjb250YWluZXI6JCgiI2NlbnRlciAudW5pZmllZC1wYW5l bC09CmJvZHkiKSxuYW1lOmosZGJrZXk6aH0sZ2FsYXh5X2NvbmZpZy5hcHAuZ2VuZV9yZWdpb24p O3RoaXMuaW5pdF9lZGl0b3IoKTt2aT0KZXcuZWRpdG9yPTNEdHJ1ZX0saW5pdF9lZGl0b3I6ZnVu Y3Rpb24oKXskKCIjY2VudGVyIC51bmlmaWVkLXBhbmVsLXRpdGxlIikuPQp0ZXh0KHZpZXcuY29u ZmlnLmdldF92YWx1ZSgibmFtZSIpKyIgKCIrdmlldy5kYmtleSsiKSIpO2lmKGdhbGF4eV9jb25m aWcuYXA9CnAuYWRkX2RhdGFzZXQpeyQuYWpheCh7dXJsOmdhbGF4eV9jb25maWcucm9vdCsiYXBp L2RhdGFzZXRzLyIrZ2FsYXh5X2NvbmZpZz0KLmFwcC5hZGRfZGF0YXNldCxkYXRhOntoZGFfbGRk YToiaGRhIixkYXRhX3R5cGU6InRyYWNrX2NvbmZpZyJ9LGRhdGFUeXBlOiJqPQpzb24iLHN1Y2Nl c3M6ZnVuY3Rpb24oaCl7dmlldy5hZGRfZHJhd2FibGUoYS5vYmplY3RfZnJvbV90ZW1wbGF0ZSho LHZpZXcsdmk9CmV3KSl9fSl9JCgiI2FkZC1ib29rbWFyay1idXR0b24iKS5jbGljayhmdW5jdGlv bigpe3ZhciBqPTNEdmlldy5jaHJvbSsiOiIrdj0KaWV3LmxvdysiLSIrdmlldy5oaWdoLGg9M0Qi Qm9va21hcmsgZGVzY3JpcHRpb24iO3JldHVybiB1aS5hZGRfYm9va21hcmsoaixoPQosdHJ1ZSl9 KTt1aS5pbml0X2tleWJvYXJkX25hdih2aWV3KTskKHdpbmRvdykub24oImJlZm9yZXVubG9hZCIs ZnVuY3Rpb24oKXs9CmlmKHZpZXcuaGFzX2NoYW5nZXMpe3JldHVybiJUaGVyZSBhcmUgdW5zYXZl ZCBjaGFuZ2VzIHRvIHlvdXIgdmlzdWFsaXphdGlvbj0KIHRoYXQgd2lsbCBiZSBsb3N0IGlmIHlv dSBsZWF2ZSB0aGlzIHBhZ2UuIn19KX19KTtyZXR1cm57VHJhY2tzdGVyVUk6ZSxHYWxhPQp4eUFw cDpnfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgN2E5MGQ0MDUzMTNk ZDRlMzcxZWUxMzkyNzk3YmEwMjlhMmEwNWIxMSAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MT0K NzVjOGQyZTJiYzRiYTVjYWIgc3RhdGljL3NjcmlwdHMvdml6L3RyYWNrc3Rlci5qcwotLS0gYS9z dGF0aWMvc2NyaXB0cy92aXovdHJhY2tzdGVyLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3Zpei90 cmFja3N0ZXIuanMKQEAgLTEyLDcgKzEyLDYgQEAKIFsKICAgICAvLyBsb2FkIGpzIGxpYnJhcmll cwogICAgICd1dGlscy91dGlscycsCi0gICAgJ212Yy91aS9pY29uLWJ1dHRvbicsCiAgICAgJ2xp YnMvanF1ZXJ5L2pxdWVyeS5ldmVudC5kcmFnJywKICAgICAnbGlicy9qcXVlcnkvanF1ZXJ5LmV2 ZW50LmhvdmVyJywKICAgICAnbGlicy9qcXVlcnkvanF1ZXJ5Lm1vdXNld2hlZWwnLApAQCAtMzIs OSArMzEsOCBAQAogfSk7Cj0yMAogLy8gdHJhY2tzdGVyIHZpZXdlcgotZGVmaW5lKCBbImxpYnMv dW5kZXJzY29yZSIsICJiYXNlIiwgInZpei90cmFja3N0ZXIvdHJhY2tzIiwgInZpei92aXN1YWxp emE9CnRpb24iXSw9MjAKLSAgICAgICAgZnVuY3Rpb24oXywgYmFzZSwgdHJhY2tzLCB2aXN1YWxp emF0aW9uKSB7Ci0KK2RlZmluZSggWyJsaWJzL3VuZGVyc2NvcmUiLCAiYmFzZSIsICJ2aXovdHJh Y2tzdGVyL3RyYWNrcyIsICJ2aXovdmlzdWFsaXphPQp0aW9uIiwgIm12Yy91aS9pY29uLWJ1dHRv biIgXSwKKyAgICAgICAgZnVuY3Rpb24oXywgYmFzZSwgdHJhY2tzLCB2aXN1YWxpemF0aW9uLCBt b2RfaWNvbl9idG4pIHsKIC8qKgogICogVXNlciBpbnRlcmZhY2UgY29udHJvbHMgZm9yIHRyYWNr c3Rlcj0yMAogICovCgpkaWZmIC1yIDdhOTBkNDA1MzEzZGQ0ZTM3MWVlMTM5Mjc5N2JhMDI5YTJh MDViMTEgLXIgMTU5NjJiM2Q5YWFjMDYxZTk1NDFmODE9Cjc1YzhkMmUyYmM0YmE1Y2FiIHRlbXBs YXRlcy90YWdnaW5nX2NvbW1vbi5tYWtvCi0tLSBhL3RlbXBsYXRlcy90YWdnaW5nX2NvbW1vbi5t YWtvCisrKyBiL3RlbXBsYXRlcy90YWdnaW5nX2NvbW1vbi5tYWtvCkBAIC04OSw3ICs4OSw3IEBA CiA8JWRlZiBuYW1lPTNEInJlbmRlcl90b29sX3RhZ2dpbmdfZWxlbWVudHMoKSI+PCUKICAgICAg ICAgZWx0X2lkID0zRCBpbnQgKCBmbG9vciAoIHJhbmRvbSgpKm1heGludCApICkKLSAgICAgICAg dGFncyA9M0QgdHJhbnMuYXBwLnRhZ19oYW5kbGVyLmdldF90b29sX3RhZ3MoIHRyYW5zICkKKyAg ICAgICAgdGFncyA9M0QgdHJhbnMuYXBwLnRhZ19oYW5kbGVyLmdldF90b29sX3RhZ3MoKQogICAg ICU+CiAgICAgJHtzZWxmLnJlbmRlcl90YWdnaW5nX2VsZW1lbnRfaHRtbChlbHRfaWQ9M0RlbHRf aWQsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzPTNEdGFn cywgXAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0 cy8yZTk5MGNhZWZjOTQvCkNoYW5nZXNldDogICAyZTk5MGNhZWZjOTQKVXNlcjogICAgICAgIGNh cmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMTMgMTM6NDQ6NDIrMDA6MDAKU3VtbWFy eTogICAgIE1lcmdlZCBnYWxheHkvZ2FsYXh5LWNlbnRyYWwgaW50byBkZWZhdWx0CkFmZmVjdGVk ICM6ICAzMSBmaWxlcwoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0 YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiBjbGll bnQvZ2FsYXh5L3NjcmlwdHMvZ2FsYXh5LndvcmtmbG93X2VkaXRvci5jYW52YXMuanMKLS0tIGEv Y2xpZW50L2dhbGF4eS9zY3JpcHRzL2dhbGF4eS53b3JrZmxvd19lZGl0b3IuY2FudmFzLmpzCisr KyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9nYWxheHkud29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5q cwpAQCAtMTA4OSw3ICsxMDg5LDExIEBACiAgICAgICAgIGlmICggdGhpcy5hY3RpdmVfbm9kZSAh PTNEIG5vZGUgKSB7CiAgICAgICAgICAgICB0aGlzLmNoZWNrX2NoYW5nZXNfaW5fYWN0aXZlX2Zv cm0oKTsKICAgICAgICAgICAgIHRoaXMuY2xlYXJfYWN0aXZlX25vZGUoKTsKLSAgICAgICAgICAg IHBhcmVudC5zaG93X2Zvcm1fZm9yX3Rvb2woIG5vZGUuZm9ybV9odG1sICsgbm9kZS50b29sdGlw LCBub2RlPQogKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQuX19ORVdUT09MRk9STV9fKSB7Cisg ICAgICAgICAgICAgICAgcGFyZW50LnNob3dfZm9ybV9mb3JfdG9vbCggbm9kZS5mb3JtX2h0bWws IG5vZGUgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnNo b3dfZm9ybV9mb3JfdG9vbCggbm9kZS5mb3JtX2h0bWwgKyBub2RlLnRvb2x0aXAsID0Kbm9kZSAp OworICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZS5tYWtlX2FjdGl2ZSgpOwogICAgICAg ICAgICAgdGhpcy5hY3RpdmVfbm9kZSA9M0Qgbm9kZTsKICAgICAgICAgfQpAQCAtMTA5OSw3ICsx MTAzLDExIEBACiAgICAgICAgIGlmICggdGhpcy5hY3RpdmVfbm9kZSA9M0Q9M0Qgbm9kZSAmJiAo IXBhcmVudC5fX05FV1RPT0xGT1JNX18gfHwgZj0Kb3JjZSkpIHsKICAgICAgICAgICAgIC8vIFJl YWN0aXZlIHdpdGggbmV3IGZvcm1faHRtbAogICAgICAgICAgICAgdGhpcy5jaGVja19jaGFuZ2Vz X2luX2FjdGl2ZV9mb3JtKCk7IC8vRm9yY2UgY2hhbmdlcyB0byBiZSBzYXY9CmVkIGV2ZW4gb24g bmV3IGNvbm5lY3Rpb24gKHByZXZpb3VzbHkgZHVtcGVkKQotICAgICAgICAgICAgcGFyZW50LnNo b3dfZm9ybV9mb3JfdG9vbCggbm9kZS5mb3JtX2h0bWwgKyBub2RlLnRvb2x0aXAsIG5vZGU9CiAp OworICAgICAgICAgICAgaWYgKHBhcmVudC5fX05FV1RPT0xGT1JNX18pIHsKKyAgICAgICAgICAg ICAgICBwYXJlbnQuc2hvd19mb3JtX2Zvcl90b29sKCBub2RlLmZvcm1faHRtbCwgbm9kZSApOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuc2hvd19mb3JtX2Zv cl90b29sKCBub2RlLmZvcm1faHRtbCArIG5vZGUudG9vbHRpcCwgPQpub2RlICk7CisgICAgICAg ICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGxheW91dCA6IGZ1bmN0aW9uICgpIHsKQEAg LTEzMDUsMTMgKzEzMTMsNiBAQAogICAgIHJldHVybiBub2RlOwogfQo9MjAKLWZ1bmN0aW9uIHVw ZGF0ZV9ub2RlKCBkYXRhICkgewotICAgIHZhciBub2RlID0zRCB3b3JrZmxvdy5hY3RpdmVfbm9k ZTsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBub2RlLnVwZGF0ZV9maWVsZF9kYXRhKGRhdGEs IHRydWUpOwotICAgIH0KLX0KLQogdmFyIGV4dF90b190eXBlID0zRCBudWxsOwogdmFyIHR5cGVf dG9fdHlwZSA9M0QgbnVsbDsKPTIwCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVj OGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3 ZmE2IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCi0t LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCisr KyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCkBA IC0yNzYsNiArMjc2LDExIEBACiAgICAgICAgICAgICAgICAgYnV0dG9ucyA6IHRoaXMuYnV0dG9u cwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gcmVtb3Zl IHBhZGRpbmcKKyAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMud29ya2Zsb3cpIHsKKyAgICAg ICAgICAgICAgICB0aGlzLnBvcnRsZXQuJGNvbnRlbnQuY3NzKCdwYWRkaW5nJywgJzBweCcpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIGFwcGVuZCBtZXNz YWdlCiAgICAgICAgICAgICB0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMubWVzc2FnZS4kZWwsIHRy dWUpOwogICAgICAgICAgICA9MjAKCmRpZmYgLXIgMTU5NjJiM2Q5YWFjMDYxZTk1NDFmODE3NWM4 ZDJlMmJjNGJhNWNhYiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5ND0KYWY1MDhjMjJiYjM0Yjdm YTYgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93Lmpz Ci0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxv dy5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29y a2Zsb3cuanMKQEAgLTcsOCArNywxOTkgQEAKICAgICAvLyBjcmVhdGUgZm9ybSB2aWV3CiAgICAg dmFyIFZpZXcgPTNEIFRvb2xGb3JtQmFzZS5leHRlbmQoewogICAgICAgICBpbml0aWFsaXplOiBm dW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgICAgICAvLyBsaW5rIHdpdGggbm9kZSByZXByZXNl bnRhdGlvbiBpbiB3b3JrZmxvdyBtb2R1bGUKKyAgICAgICAgICAgIHRoaXMubm9kZSA9M0Qgd29y a2Zsb3cuYWN0aXZlX25vZGU7CisgICAgICAgICAgICBpZiAoIXRoaXMubm9kZSkgeworICAgICAg ICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0ZBSUxFRCAtIHRvb2xzLWZvcm0td29ya2Zsb3c6aW5p dGlhbGl6ZSgpIC09CiBOb2RlIG5vdCBmb3VuZCBpbiB3b3JrZmxvdy4nKTsKKyAgICAgICAgICAg ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgID0yMAorICAgICAgICAgICAg Ly8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCiAgICAgICAgICAgICB0aGlzLndvcmtmbG93ID0zRCB0 cnVlOwotICAgICAgICAgICAgVG9vbEZvcm1CYXNlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwo dGhpcywgb3B0aW9ucyk7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPTNEIG9wdGlvbnM7CisK KyAgICAgICAgICAgIC8vIGxvYWQgZXh0ZW5zaW9uCisgICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKKyAgICAgICAgICAgIFV0aWxzLmdldCh7CisgICAgICAgICAgICAgICAgdXJsICAgICA6 IGdhbGF4eV9jb25maWcucm9vdCArICdhcGkvZGF0YXR5cGVzJywKKyAgICAgICAgICAgICAgICBj YWNoZSAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24oZGF0YXR5 cGVzKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YXR5cGVzID0zRCBkYXRhdHlwZXM7 CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2VTZWN0aW9ucyhvcHRpb25zLmlucHV0cyk7 CisgICAgICAgICAgICAgICAgICAgIFRvb2xGb3JtQmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5j YWxsKHNlbGYsIG9wdGlvbnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor ICAgICAgICB9LAorICAgICAgID0yMAorICAgICAgICAvKiogQnVpbGRzIGFsbCBzdWIgc2VjdGlv bnMKKyAgICAgICAgKi8KKyAgICAgICAgX21ha2VTZWN0aW9uczogZnVuY3Rpb24oaW5wdXRzKXsK KyAgICAgICAgICAgIC8vIGZvciBhbm5vdGF0aW9uCisgICAgICAgICAgICBpbnB1dHNbVXRpbHMu dXVpZCgpXSA9M0QgeworICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnRWRpdCBTdGVwIEF0dHJp YnV0ZXMnLAorICAgICAgICAgICAgICAgIHR5cGUgICAgOiAnc2VjdGlvbicsCisgICAgICAgICAg ICAgICAgaW5wdXRzICA6IFt7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQW5ub3Rh dGlvbiAvIE5vdGVzJywKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAgICA6ICdhbm5vdGF0aW9u JywKKyAgICAgICAgICAgICAgICAgICAgdHlwZSAgICA6ICd0ZXh0JywKKyAgICAgICAgICAgICAg ICAgICAgYXJlYSAgICA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgOiAnQWRk IGFuIGFubm90YXRpb24gb3Igbm90ZXMgdG8gdGhpcyBzdGVwOyBhbj0Kbm90YXRpb25zIGFyZSBh dmFpbGFibGUgd2hlbiBhIHdvcmtmbG93IGlzIHZpZXdlZC4nLAorICAgICAgICAgICAgICAgICAg ICB2YWx1ZSAgIDogdGhpcy5ub2RlLmFubm90YXRpb24KKyAgICAgICAgICAgICAgICB9XQorICAg ICAgICAgICAgfQorICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGZvciBhY3Rpb25zCisg ICAgICAgICAgICB0aGlzLnBvc3Rfam9iX2FjdGlvbnMgPTNEIHRoaXMubm9kZS5wb3N0X2pvYl9h Y3Rpb25zOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLm5vZGUub3V0cHV0X3Rlcm1p bmFscykgeworICAgICAgICAgICAgICAgIGlucHV0c1tVdGlscy51dWlkKCldID0zRCB0aGlzLl9t YWtlU2VjdGlvbihpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICA9MjAKKyAg ICAgICAgLyoqIEJ1aWxkcyBzdWIgc2VjdGlvbiB3aXRoIHN0ZXAgYWN0aW9ucy9hbm5vdGF0aW9u CisgICAgICAgICovCisgICAgICAgIF9tYWtlU2VjdGlvbjogZnVuY3Rpb24ob3V0cHV0X2lkKXsK KyAgICAgICAgICAgIC8vIGZvcm1hdCBkYXRhdHlwZXMKKyAgICAgICAgICAgIHZhciBleHRlbnNp b25zID0zRCBbXTsKKyAgICAgICAgICAgIGZvciAoa2V5IGluIHRoaXMuZGF0YXR5cGVzKSB7Cisg ICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgMCA6 IHRoaXMuZGF0YXR5cGVzW2tleV0sCisgICAgICAgICAgICAgICAgICAgIDEgOiB0aGlzLmRhdGF0 eXBlc1trZXldCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ID0yMAorICAgICAgICAgICAgLy8gc29ydCBleHRlbnNpb25zCisgICAgICAgICAgICBleHRlbnNp b25zLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmxhYmVs ID4gYi5sYWJlbCA/IDEgOiBhLmxhYmVsIDwgYi5sYWJlbCA/IC0xIDogMDsKKyAgICAgICAgICAg IH0pOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFkZCBhZGRpdGlvbmFsIG9wdGlv bnMKKyAgICAgICAgICAgIGV4dGVuc2lvbnMudW5zaGlmdCh7CisgICAgICAgICAgICAgICAgMCA6 ICdTZXF1ZW5jZXMnLAorICAgICAgICAgICAgICAgIDEgOiAnU2VxdWVuY2VzJworICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICBleHRlbnNpb25zLnVuc2hpZnQoeworICAgICAgICAgICAgICAg IDAgOiAnUm9hZG1hcHMnLAorICAgICAgICAgICAgICAgIDEgOiAnUm9hZG1hcHMnCisgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMudW5zaGlmdCh7CisgICAgICAgICAgICAg ICAgMCA6ICdMZWF2ZSB1bmNoYW5nZWQnLAorICAgICAgICAgICAgICAgIDEgOiAnTm9uZScKKyAg ICAgICAgICAgIH0pOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBjdXN0 b20gc3ViIHNlY3Rpb24KKyAgICAgICAgICAgIHZhciBpbnB1dF9jb25maWcgPTNEIHsKKyAgICAg ICAgICAgICAgICBsYWJlbCAgIDogJ0VkaXQgU3RlcCBBY3Rpb246IFwnJyArIG91dHB1dF9pZCAr ICdcJycsCisgICAgICAgICAgICAgICAgdHlwZSAgICA6ICdzZWN0aW9uJywKKyAgICAgICAgICAg ICAgICBpbnB1dHMgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgOiAnUmVu YW1lRGF0YXNldEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ25l d25hbWUnLAorICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdSZW5hbWUgZGF0YXNl dCcsCisgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3RleHQnLAorICAgICAgICAg ICAgICAgICAgICB2YWx1ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmUg ICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlv biB3aWxsIHJlbmFtZSB0aGUgcmVzdWx0IGRhdGE9CnNldC4gQ2xpY2sgPGEgaHJlZj0zRCJodHRw czovL3dpa2kuZ2FsYXh5cHJvamVjdC5vcmcvTGVhcm4vQWR2YW5jZWRXb3JrZmxvdz0KL1Zhcmlh YmxlcyI+aGVyZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uJworICAgICAgICAgICAgICAgIH0s eworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gICAgICA6ICdDaGFuZ2VEYXRhdHlwZUFjdGlv bicsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ25ld3R5cGUnLAorICAgICAg ICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaGFuZ2UgZGF0YXR5cGUnLAorICAgICAgICAg ICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAorICAgICAgICAgICAgICAgICAgICBp Z25vcmUgICAgICA6ICdOb25lJywKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgICAgOiBl eHRlbnNpb25zLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlv biB3aWxsIGNoYW5nZSB0aGUgZGF0YXR5cGUgb2Y9CiB0aGUgb3V0cHV0IHRvIHRoZSBpbmRpY2F0 ZWQgdmFsdWUuJworICAgICAgICAgICAgICAgIH0seworICAgICAgICAgICAgICAgICAgICBhY3Rp b24gICAgICA6ICdUYWdEYXRhc2V0QWN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgYXJndW1l bnQgICAgOiAndGFncycsCisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgICAgIDogJ1RhZ3Mn LAorICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICd0ZXh0JywKKyAgICAgICAgICAg ICAgICAgICAgdmFsdWUgICAgICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgaWdub3JlICAg ICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgaGVscCAgICAgICAgOiAnVGhpcyBhY3Rpb24g d2lsbCBzZXQgdGFncyBmb3IgdGhlIGRhdGFzPQpldC4nCisgICAgICAgICAgICAgICAgfSx7Cisg ICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQXNzaWduIGNvbHVtbnMnLAorICAgICAgICAg ICAgICAgICAgICB0eXBlICAgIDogJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICAgICBpbnB1 dHMgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0NvbHVtblNl dEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCAgICA6ICdjaHJvbUNv bCcsCisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaHJvbSBjb2x1bW4n LAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgOiAndGV4dCcsCisgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICAg ICAgaWdub3JlICAgICAgOiAnJworICAgICAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0NvbHVtblNldEFjdGlvbicsCisgICAgICAgICAg ICAgICAgICAgICAgICBhcmd1bWVudCAgICA6ICdzdGFydENvbCcsCisgICAgICAgICAgICAgICAg ICAgICAgICBsYWJlbCAgICAgICA6ICdTdGFydCBjb2x1bW4nLAorICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZSAgICAgICAgOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1 ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnJwor ICAgICAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAg ICAgIDogJ0NvbHVtblNldEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu dCAgICA6ICdlbmRDb2wnLAorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgICAgICAgOiAn RW5kIGNvbHVtbicsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICd0ZXh0 JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJycsCisgICAgICAgICAg ICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnCisgICAgICAgICAgICAgICAgICAgIH0sewor ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgOiAnQ29sdW1uU2V0QWN0aW9uJywK KyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ3N0cmFuZENvbCcsCisgICAg ICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdTdHJhbmQgY29sdW1uJywKKyAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3RleHQnLAorICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWUgICAgICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9y ZSAgICAgIDogJycKKyAgICAgICAgICAgICAgICAgICAgfSx7CisgICAgICAgICAgICAgICAgICAg ICAgICBhY3Rpb24gICAgICA6ICdDb2x1bW5TZXRBY3Rpb24nLAorICAgICAgICAgICAgICAgICAg ICAgICAgYXJndW1lbnQgICAgOiAnbmFtZUNvbCcsCisgICAgICAgICAgICAgICAgICAgICAgICBs YWJlbCAgICAgICA6ICdOYW1lIGNvbHVtbicsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl ICAgICAgICA6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDog JycsCisgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnCisgICAgICAgICAg ICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgIDogJ1RoaXMgYWN0aW9u IHdpbGwgc2V0IGNvbHVtbiBhc3NpZ25tZW50cyBpbiA9CnRoZSBvdXRwdXQgZGF0YXNldC4gQmxh bmsgZmllbGRzIGFyZSBpZ25vcmVkLicKKyAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAg ICAgICAgICAgYWN0aW9uICAgICAgOiAnRW1haWxBY3Rpb24nLAorICAgICAgICAgICAgICAgICAg ICBsYWJlbCAgICAgICA6ICdFbWFpbCBub3RpZmljYXRpb24nLAorICAgICAgICAgICAgICAgICAg ICB0eXBlICAgICAgICA6ICdib29sZWFuJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAg ICAgOiAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDogJ1RoaXMgYWN0aW9uIHdpbGwgc2Vu ZCBhbiBlbWFpbCBub3RpZnlpbj0KZyB5b3Ugd2hlbiB0aGUgam9iIGlzIGRvbmUuJworICAgICAg ICAgICAgICAgIH0seworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gICAgICA6ICdEZWxldGVJ bnRlcm1lZGlhdGVzQWN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICAgICAgOiAn RGVsZXRlIG5vbi1vdXRwdXRzJywKKyAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgOiAn Ym9vbGVhbicsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICBoZWxwICAgICAgICA6ICdBbGwgbm9uLW91dHB1dCBzdGVwcyBvZiB0aGlzIHdvcmtmbG93 IHc9CmlsbCBoYXZlIGRhdGFzZXRzIGRlbGV0ZWQgaWYgdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5n IHVzZWQgYXMgam9iIGlucHV0cyB3aD0KZW4gdGhlIGpvYiB0aGlzIGFjdGlvbiBpcyBhdHRhY2hl ZCB0byBpcyBmaW5pc2hlZC4gWW91ICptdXN0KiBiZSB1c2luZyB3b3JrPQpmbG93IG91dHB1dHMg KHRoZSBzbm93Zmxha2UpIGluIHlvdXIgd29ya2Zsb3cgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZm ZWN0LicKKyAgICAgICAgICAgICAgICB9XQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgPTIw CisgICAgICAgICAgICAvLyB2aXNpdCBpbnB1dCBub2RlcyBhbmQgZW5yaWNoIGJ5IG5hbWUvdmFs dWUgcGFpcnMgZnJvbSBzZXJ2ZT0KciBkYXRhCisgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhp czsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZpc2l0IChpbnB1dHMpIHsKKyAgICAgICAgICAgICAg ICBmb3IgKHZhciBpIGluIGlucHV0cykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQg PTNEIGlucHV0c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmFjdGlvbikgewor ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQubmFtZSA9M0QgJ3BqYV9fJyArIG91dHB1dF9p ZCArICdfXycgKyBpbnB1dC49CmFjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp bnB1dC5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUg Kz0zRCAnX18nICsgaW5wdXQuYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9M0Qgc2VsZi5wb3N0X2pvYl9hY3Rpb25zW2lu cHV0LmFjdGlvbiArIG91dD0KcHV0X2lkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmFyZ3VtZW50KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0zRCBkLmFjdGlvbl9h cmd1bWVudHMgJiYgZC5hYz0KdGlvbl9hcmd1bWVudHNbaW5wdXQuYXJndW1lbnRdIHx8IGlucHV0 LnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0zRCAndHJ1ZSc7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Lmlu cHV0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGlucHV0LmlucHV0cyk7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2aXNpdChpbnB1dF9jb25m aWcuaW5wdXRzKTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyByZXR1cm4gZmluYWwg Y29uZmlndXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvbmZpZzsKICAgICAgICAg fSwKICAgICAgICA9MjAKICAgICAgICAgLyoqIEJ1aWxkcyBhIG5ldyBtb2RlbCB0aHJvdWdoIGFw aSBjYWxsIGFuZCByZWNyZWF0ZXMgdGhlIGVudGlyZSBmPQpvcm0KQEAgLTM4LDE1ICsyMjksMTYg QEAKICAgICAgICAgICAgICAgICB0eXBlICAgIDogJ0dFVCcsCiAgICAgICAgICAgICAgICAgdXJs ICAgICA6IG1vZGVsX3VybCwKICAgICAgICAgICAgICAgICBkYXRhICAgIDogY3VycmVudF9zdGF0 ZSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg ICAgICAgICAgICBwYXJlbnQudXBkYXRlX25vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgc3Vj Y2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIG5v ZGUgaW4gd29ya2Zsb3cgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYubm9kZS51cGRh dGVfZmllbGRfZGF0YShkYXRhLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICA9MjAKICAgICAg ICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAg c2VsZi5kZWZlcnJlZC5kb25lKHByb2Nlc3NfaWQpOwogICAgICAgICAgICA9MjAKICAgICAgICAg ICAgICAgICAgICAgLy8gbG9nIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5k ZWJ1ZygndG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgLSBTdGF0ZXMgcmVmPQpyZXNoZWQuJyk7 Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobm9kZSk7CisgICAgICAgICAgICAg ICAgICAgIGNvbnNvbGUuZGVidWcoZGF0YSk7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAg ICAgICAgICBlcnJvciAgIDogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAg ICAgLy8gcHJvY2VzcyBjb21wbGV0ZWQKCmRpZmYgLXIgMTU5NjJiM2Q5YWFjMDYxZTk1NDFmODE3 NWM4ZDJlMmJjNGJhNWNhYiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5ND0KYWY1MDhjMjJiYjM0 YjdmYTYgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCi0t LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcworKysg Yi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKQEAgLTEs OCArMSw4IEBACiAvKioKICAgICBUaGlzIGNsYXNzIGNyZWF0ZXMgYSB0b29sIGZvcm0gc2VjdGlv biBhbmQgcG9wdWxhdGVzIGl0IHdpdGggaW5wdXQgZWxlPQptZW50cy4gSXQgYWxzbyBoYW5kbGVz IHJlcGVhdCBibG9ja3MgYW5kIGNvbmRpdGlvbmFscyBieSByZWN1cnNpdmVseSBjcmVhdGk9Cm5n IG5ldyBzdWIgc2VjdGlvbnMuIE5ldyBpbnB1dCBlbGVtZW50cyBjYW4gYmUgcGx1Z2dlZCBpbiBi eSBhZGRpbmcgY2FzZXMgdD0KbyB0aGUgc3dpdGNoIGJsb2NrIGRlZmluZWQgaW4gdGhlIF9jcmVh dGVGaWVsZCgpIGZ1bmN0aW9uLgogKi8KLWRlZmluZShbJ3V0aWxzL3V0aWxzJywgJ212Yy91aS91 aS10YWJsZScsICdtdmMvdWkvdWktbWlzYycsICdtdmMvdG9vbHMvdG9vPQpscy1yZXBlYXQnLCAn bXZjL3Rvb2xzL3Rvb2xzLXNlbGVjdC1jb250ZW50JywgJ212Yy90b29scy90b29scy1pbnB1dCdd LAotICAgIGZ1bmN0aW9uKFV0aWxzLCBUYWJsZSwgVWksIFJlcGVhdCwgU2VsZWN0Q29udGVudCwg SW5wdXRFbGVtZW50KSB7CitkZWZpbmUoWyd1dGlscy91dGlscycsICdtdmMvdWkvdWktdGFibGUn LCAnbXZjL3VpL3VpLW1pc2MnLCAnbXZjL3VpL3VpLXBvcj0KdGxldCcsICdtdmMvdG9vbHMvdG9v bHMtcmVwZWF0JywgJ212Yy90b29scy90b29scy1zZWxlY3QtY29udGVudCcsICdtdmMvdG9vPQps cy90b29scy1pbnB1dCddLAorICAgIGZ1bmN0aW9uKFV0aWxzLCBUYWJsZSwgVWksIFBvcnRsZXQs IFJlcGVhdCwgU2VsZWN0Q29udGVudCwgSW5wdXRFbGVtZW49CnQpIHsKPTIwCiAgICAgLy8gY3Jl YXRlIGZvcm0gdmlldwogICAgIHZhciBWaWV3ID0zRCBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CkBA IC0zNiwxMyArMzYsMTMgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBsb2FkIHNl dHRpbmdzIGVsZW1lbnRzIGludG8gdGFibGUKICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGhp cy5pbnB1dHMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGQodGhpcy5pbnB1dHNbaV0pOwor ICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuaW5wdXRzW2ldKTsKICAgICAgICAgICAgIH0K ICAgICAgICAgfSwKICAgICAgICA9MjAKICAgICAgICAgLyoqIEFkZCBhIG5ldyBpbnB1dCBlbGVt ZW50CiAgICAgICAgICovCi0gICAgICAgIF9hZGQ6IGZ1bmN0aW9uKGlucHV0KSB7CisgICAgICAg IGFkZDogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgIC8vIGxpbmsgdGhpcwogICAgICAg ICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAgICAgICAgID0yMApAQCAtNjYsNiArNjYsMTAg QEAKICAgICAgICAgICAgICAgICBjYXNlICdyZXBlYXQnOgogICAgICAgICAgICAgICAgICAgICB0 aGlzLl9hZGRSZXBlYXQoaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgLy8gY3VzdG9taXplZCBzZWN0aW9uCisgICAgICAgICAgICAgICAgY2Fz ZSAnc2VjdGlvbic6CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNlY3Rpb24oaW5wdXRf ZGVmKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gZGVm YXVsdCBzaW5nbGUgZWxlbWVudCByb3cKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAgICAgICAgICB0aGlzLl9hZGRSb3coaW5wdXRfZGVmKTsKQEAgLTEwMyw4ICsxMDcsNyBA QAogICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBub24taGlkZGVuIGVsZW1lbnRzIGV4 aXN0CiAgICAgICAgICAgICAgICAgICAgIHZhciBub25oaWRkZW4gPTNEIGZhbHNlOwogICAgICAg ICAgICAgICAgICAgICBmb3IgKHZhciBqIGluIGNhc2VfZGVmLmlucHV0cykgewotICAgICAgICAg ICAgICAgICAgICAgICAgdmFyIHR5cGUgPTNEIGNhc2VfZGVmLmlucHV0c1tqXS50eXBlOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPTNEPTNEICdoaWRkZW4nKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhc2VfZGVmLmlucHV0c1tqXS5oaWRkZW4p IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25oaWRkZW4gPTNEIHRydWU7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9 CkBAIC0yNDQsNiArMjQ3LDU4IEBACiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZChpbnB1 dF9kZWYuaWQpOwogICAgICAgICB9LAogICAgICAgID0yMAorICAgICAgICAvKiogQWRkIGEgY3Vz dG9taXplZCBzZWN0aW9uCisgICAgICAgICovCisgICAgICAgIF9hZGRTZWN0aW9uOiBmdW5jdGlv bihpbnB1dF9kZWYpIHsKKyAgICAgICAgICAgIC8vIGxpbmsgdGhpcworICAgICAgICAgICAgdmFy IHNlbGYgPTNEIHRoaXM7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gY3JlYXRlIHN1 YiBzZWN0aW9uCisgICAgICAgICAgICB2YXIgc3ViX3NlY3Rpb24gPTNEIG5ldyBWaWV3KHNlbGYu YXBwLCB7CisgICAgICAgICAgICAgICAgaW5wdXRzICA6IGlucHV0X2RlZi5pbnB1dHMsCisgICAg ICAgICAgICAgICAgY2xzICAgICA6ICd1aS10YWJsZS1wbGFpbicKKyAgICAgICAgICAgIH0pOwor ICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGRlbGV0ZSBidXR0b24KKyAgICAgICAgICAg IHZhciBidXR0b25fdmlzaWJsZSA9M0QgbmV3IFVpLkJ1dHRvbkljb24oeworICAgICAgICAgICAg ICAgIGljb24gICAgOiAnZmEtZXllLXNsYXNoJywKKyAgICAgICAgICAgICAgICB0b29sdGlwIDog J1Nob3cvaGlkZSBzZWN0aW9uJywKKyAgICAgICAgICAgICAgICBjbHMgICAgIDogJ3VpLWJ1dHRv bi1pY29uLXBsYWluJworICAgICAgICAgICAgfSk7CisgICAgICAgICAgID0yMAorICAgICAgICAg ICAgLy8gY3JlYXRlIHBvcnRsZXQgZm9yIHN1YiBzZWN0aW9uCisgICAgICAgICAgICB2YXIgcG9y dGxldCA9M0QgbmV3IFBvcnRsZXQuVmlldyh7CisgICAgICAgICAgICAgICAgdGl0bGUgICAgICAg OiBpbnB1dF9kZWYubGFiZWwsCisgICAgICAgICAgICAgICAgY2xzICAgICAgICAgOiAndWktcG9y dGxldC1zZWN0aW9uJywKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zICA6IHsKKyAgICAgICAg ICAgICAgICAgICAgYnV0dG9uX3Zpc2libGU6IGJ1dHRvbl92aXNpYmxlCisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwb3J0bGV0LmFwcGVuZChzdWJfc2Vj dGlvbi4kZWwpOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFkZCBldmVudCBoYW5k bGVyIHZpc2liaWxpdHkgYnV0dG9uCisgICAgICAgICAgICB2YXIgdmlzaWJsZSA9M0QgZmFsc2U7 CisgICAgICAgICAgICBwb3J0bGV0LiRjb250ZW50LmhpZGUoKTsKKyAgICAgICAgICAgIHBvcnRs ZXQuJGhlYWRlci5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7CisgICAgICAgICAgICBwb3J0bGV0 LiRoZWFkZXIub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHZp c2libGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9M0QgZmFsc2U7CisgICAgICAg ICAgICAgICAgICAgIHBvcnRsZXQuJGNvbnRlbnQuaGlkZSgpOworICAgICAgICAgICAgICAgICAg ICBidXR0b25fdmlzaWJsZS5zZXRJY29uKCdmYS1leWUtc2xhc2gnKTsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0zRCB0cnVlOworICAgICAg ICAgICAgICAgICAgICBwb3J0bGV0LiRjb250ZW50LmZhZGVJbignZmFzdCcpOworICAgICAgICAg ICAgICAgICAgICBidXR0b25fdmlzaWJsZS5zZXRJY29uKCdmYS1leWUnKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBj cmVhdGUgdGFibGUgcm93CisgICAgICAgICAgICB0aGlzLnRhYmxlLmFkZChwb3J0bGV0LiRlbCk7 CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCByb3cgdG8gdGFibGUKKyAgICAgICAgICAgIHRoaXMu dGFibGUuYXBwZW5kKGlucHV0X2RlZi5pZCk7CisgICAgICAgIH0sCisKICAgICAgICAgLyoqIEFk ZCBhIHNpbmdsZSBpbnB1dCBmaWVsZCBlbGVtZW50CiAgICAgICAgICovCiAgICAgICAgIF9hZGRS b3c6IGZ1bmN0aW9uKGlucHV0X2RlZikgewpAQCAtMjczLDYgKzMyOCwxMSBAQAogICAgICAgICAg ICAgLy8gYXBwZW5kIHRvIHRhYmxlCiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZChpZCk7 CiAgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gaGlkZSByb3cgaWYgbmVjY2Vzc2FyeQor ICAgICAgICAgICAgaWYgKGlucHV0X2RlZi5oaWRkZW4pIHsKKyAgICAgICAgICAgICAgICB0aGlz LnRhYmxlLmdldChpZCkuaGlkZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICA9MjAKICAg ICAgICAgICAgIC8vIHJldHVybiBjcmVhdGVkIGZpZWxkCiAgICAgICAgICAgICByZXR1cm4gZmll bGQ7CiAgICAgICAgIH0sCkBAIC0zMTYsNyArMzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAg ZmllbGQgPTNEIHRoaXMuX2ZpZWxkSGlkZGVuKGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAgICAgLy8gaGlkZGVu IGZpZWxkCisgICAgICAgICAgICAgICAgLy8gaGlkZGVuIGRhdGEgZmllbGQKICAgICAgICAgICAg ICAgICBjYXNlICdoaWRkZW5fZGF0YSc6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0 aGlzLl9maWVsZEhpZGRlbihpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK QEAgLTQ2NSw5ICs1MjUsOSBAQAogICAgICAgICBfZmllbGRUZXh0IDogZnVuY3Rpb24oaW5wdXRf ZGVmKSB7CiAgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKICAgICAgICAgICAgIHJldHVy biBuZXcgVWkuSW5wdXQoewotICAgICAgICAgICAgICAgIGlkICAgICAgOiAnZmllbGQtJyArIGlu cHV0X2RlZi5pZCwKLSAgICAgICAgICAgICAgICBhcmVhICAgIDogaW5wdXRfZGVmLmFyZWEsCi0g ICAgICAgICAgICAgICAgb25jaGFuZ2U6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlk ICAgICAgICAgIDogJ2ZpZWxkLScgKyBpbnB1dF9kZWYuaWQsCisgICAgICAgICAgICAgICAgYXJl YSAgICAgICAgOiBpbnB1dF9kZWYuYXJlYSwKKyAgICAgICAgICAgICAgICBvbmNoYW5nZSAgICA6 IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcC50cmlnZ2VyKCdyZWZy ZXNoJyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CkBAIC00NzYsMTEgKzUz NiwxNSBAQAogICAgICAgICAvKiogU2xpZGVyIGZpZWxkCiAgICAgICAgICovCiAgICAgICAgIF9m aWVsZFNsaWRlcjogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9 M0QgdGhpczsKICAgICAgICAgICAgIHJldHVybiBuZXcgVWkuU2xpZGVyLlZpZXcoewotICAgICAg ICAgICAgICAgIGlkICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKLSAgICAgICAgICAg ICAgICBwcmVjaXNlIDogaW5wdXRfZGVmLnR5cGUgPTNEPTNEICdmbG9hdCcsCi0gICAgICAgICAg ICAgICAgbWluICAgICA6IGlucHV0X2RlZi5taW4sCi0gICAgICAgICAgICAgICAgbWF4ICAgICA6 IGlucHV0X2RlZi5tYXgKKyAgICAgICAgICAgICAgICBpZCAgICAgICAgICA6ICdmaWVsZC0nICsg aW5wdXRfZGVmLmlkLAorICAgICAgICAgICAgICAgIHByZWNpc2UgICAgIDogaW5wdXRfZGVmLnR5 cGUgPTNEPTNEICdmbG9hdCcsCisgICAgICAgICAgICAgICAgbWluICAgICAgICAgOiBpbnB1dF9k ZWYubWluLAorICAgICAgICAgICAgICAgIG1heCAgICAgICAgIDogaW5wdXRfZGVmLm1heCwKKyAg ICAgICAgICAgICAgICBvbmNoYW5nZSAgICA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg ICAgICBzZWxmLmFwcC50cmlnZ2VyKCdyZWZyZXNoJyk7CisgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAgICAgICAgPTIwCkBAIC00ODgsMTggKzU1MiwyMiBA QAogICAgICAgICAqLwogICAgICAgICBfZmllbGRIaWRkZW4gOiBmdW5jdGlvbihpbnB1dF9kZWYp IHsKICAgICAgICAgICAgIHJldHVybiBuZXcgVWkuSGlkZGVuKHsKLSAgICAgICAgICAgICAgICBp ZCAgICAgIDogJ2ZpZWxkLScgKyBpbnB1dF9kZWYuaWQsCi0gICAgICAgICAgICAgICAgaW5mbyAg ICA6IGlucHV0X2RlZi5pbmZvCisgICAgICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQt JyArIGlucHV0X2RlZi5pZCwKKyAgICAgICAgICAgICAgICBpbmZvICAgICAgICA6IGlucHV0X2Rl Zi5pbmZvCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKICAgICAgICA9MjAKICAgICAgICAg LyoqIEJvb2xlYW4gZmllbGQKICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkQm9vbGVhbiA6IGZ1 bmN0aW9uKGlucHV0X2RlZikgeworICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAg ICAgICAgICByZXR1cm4gbmV3IFVpLlJhZGlvQnV0dG9uLlZpZXcoewotICAgICAgICAgICAgICAg IGlkICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKLSAgICAgICAgICAgICAgICBkYXRh ICAgIDogWyB7IGxhYmVsIDogJ1llcycsIHZhbHVlIDogJ3RydWUnICB9LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsgbGFiZWwgOiAnTm8nLCAgdmFsdWUgOiAnZmFsc2UnIH1dCisgICAg ICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKKyAgICAg ICAgICAgICAgICBkYXRhICAgICAgICA6IFsgeyBsYWJlbCA6ICdZZXMnLCB2YWx1ZSA6ICd0cnVl JyAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbCA6ICdObycsICB2 YWx1ZSA6ICdmYWxzZScgfV0sCisgICAgICAgICAgICAgICAgb25jaGFuZ2UgICAgOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHAudHJpZ2dlcigncmVmcmVzaCcpOwor ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfSk7Cgpk aWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBj YWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IGNsaWVudC9nYWxheHkvc2NyaXB0 cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZj L3Rvb2xzL3Rvb2xzLXRyZWUuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29s cy90b29scy10cmVlLmpzCkBAIC0xMDgsMjIgKzEwOCwyOSBAQAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb252ZXJ0KGpvYl9pbnB1dF9pZCwgaGVhZFtpbnB1dC5pZCArICctc2U9 CmN0aW9uLScgKyBzZWxlY3RlZENhc2VdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg ICAgICAvLyBoYW5kbGUgY3VzdG9tIHN1YiBzZWN0aW9ucworICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAnc2VjdGlvbic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCgn Jywgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdl dCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9M0Qgc2VsZi5h cHAuZmllbGRfbGlzdFtpbnB1dC5pZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA9MjAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgYW5kIHBhdGNoIGZpZWxkIHZhbHVl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0zRCBmaWVsZC52YWx1ZSgp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaFtpbnB1dC50eXBlXSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgcGF0Y2hbaW5wdXQudHlw ZV0odmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgID0yMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBk ZWZhdWx0IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5za2lw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0ZSAm JiAhZmllbGQudmFsaWRhdGUodmFsdT0KZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0zRCBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChmaWVsZCAmJiBmaWVsZC52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBnZXQgYW5kIHBhdGNoIGZpZWxkIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhciB2YWx1ZSA9M0QgZmllbGQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHBhdGNoW2lucHV0LnR5cGVdKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgcGF0Y2hbaW5wdXQudHlwZV0odmFsdWUpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFkZCAoam9iX2lucHV0X2lkLCBpbnB1dC5pZCwgdmFsdWUpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0yMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBoYW5kbGUgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIWZpZWxkLnNraXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChmaWVsZC52YWxpZGF0ZSAmJiAhZmllbGQudmFsaWRhdGUoPQp2YWx1ZSkpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgbnVsbDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChpbnB1dC5pZ25vcmUgPTNEPTNEPTNEIHVuZGVmaW5lZCB8PQp8ICh2YWx1 ZSAmJiBpbnB1dC5pZ25vcmUgIT0zRCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhZGQgKGpvYl9pbnB1dF9pZCwgaW5wdXQuaWQsIHZhbHVlPQopOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFl OTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUw OGMyMmJiMzRiN2ZhNiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3VpLW1pc2MuanMKLS0t IGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy91aS91aS1taXNjLmpzCisrKyBiL2NsaWVudC9n YWxheHkvc2NyaXB0cy9tdmMvdWkvdWktbWlzYy5qcwpAQCAtMTkzLDYgKzE5MywxMiBAQAogICAg ICAgICB0aGlzLmRpc2FibGVkID0zRCBmYWxzZTsKICAgICB9LAogICAgPTIwCisgICAgLy8gY2hh bmdlIGljb24KKyAgICBzZXRJY29uOiBmdW5jdGlvbihpY29uX2NscykgeworICAgICAgICB0aGlz LiQoJ2knKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbikuYWRkQ2xhc3MoaWNvbl9jbHMp OworICAgICAgICB0aGlzLm9wdGlvbnMuaWNvbiA9M0QgaWNvbl9jbHM7CisgICAgfSwKKyAgID0y MAogICAgIC8vIHRlbXBsYXRlCiAgICAgX3RlbXBsYXRlOiBmdW5jdGlvbihvcHRpb25zKSB7CiAg ICAgICAgIC8vIHdpZHRoCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJi YzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IGNs aWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvdWktcG9ydGxldC5qcwotLS0gYS9jbGllbnQvZ2Fs YXh5L3NjcmlwdHMvbXZjL3VpL3VpLXBvcnRsZXQuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3Jp cHRzL212Yy91aS91aS1wb3J0bGV0LmpzCkBAIC0yNSw2ICsyNSw3IEBACiAgICAgJGNvbnRlbnQg OiBudWxsLAogICAgICRidXR0b25zIDogbnVsbCwKICAgICAkb3BlcmF0aW9ucyA6IG51bGwsCisg ICAgJGhlYWRlciA6IG51bGwsCiAgICA9MjAKICAgICAvLyBpbml0aWFsaXplCiAgICAgaW5pdGlh bGl6ZSA6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKQEAgLTM1LDEzICszNiwxNiBAQAogICAgICAgICB0 aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7CiAgICAgICAgPTIw CiAgICAgICAgIC8vIGxpbmsgY29udGVudAotICAgICAgICB0aGlzLiRjb250ZW50ID0zRCB0aGlz LiRlbC5maW5kKCcjY29udGVudCcpOworICAgICAgICB0aGlzLiRjb250ZW50ID0zRCB0aGlzLiRl bC5maW5kKCcuY29udGVudCcpOwogICAgICAgID0yMAogICAgICAgICAvLyBsaW5rIHRpdGxlCi0g ICAgICAgIHRoaXMuJHRpdGxlID0zRCB0aGlzLiRlbC5maW5kKCcjcG9ydGxldC10aXRsZS10ZXh0 Jyk7CisgICAgICAgIHRoaXMuJHRpdGxlID0zRCB0aGlzLiRlbC5maW5kKCcucG9ydGxldC10aXRs ZS10ZXh0Jyk7CisgICAgICAgPTIwCisgICAgICAgIC8vIGxpbmsgaGVhZGVyCisgICAgICAgIHRo aXMuJGhlYWRlciA9M0QgdGhpcy4kZWwuZmluZCgnLnBvcnRsZXQtaGVhZGVyJyk7CiAgICAgICAg PTIwCiAgICAgICAgIC8vIHNldCBjb250ZW50IGZvcm1hdAotICAgICAgICB2YXIgJHBvcnRsZXRf Y29udGVudCA9M0QgdGhpcy4kZWwuZmluZCgnI3BvcnRsZXQtY29udGVudCcpOworICAgICAgICB2 YXIgJHBvcnRsZXRfY29udGVudCA9M0QgdGhpcy4kZWwuZmluZCgnLnBvcnRsZXQtY29udGVudCcp OwogICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zY3JvbGxhYmxlKSB7CiAgICAgICAgICAgICBp ZiAodGhpcy5vcHRpb25zLnRpdGxlKSB7CiAgICAgICAgICAgICAgICAgJHBvcnRsZXRfY29udGVu dC5hZGRDbGFzcygnbm8tc2Nyb2xsJyk7CkBAIC01OSw3ICs2Myw3IEBACiAgICAgICAgIH0KICAg ICAgICA9MjAKICAgICAgICAgLy8gYXBwZW5kIGJ1dHRvbnMKLSAgICAgICAgdGhpcy4kYnV0dG9u cyA9M0QgJCh0aGlzLmVsKS5maW5kKCcjYnV0dG9ucycpOworICAgICAgICB0aGlzLiRidXR0b25z ID0zRCAkKHRoaXMuZWwpLmZpbmQoJy5idXR0b25zJyk7CiAgICAgICAgIGlmICh0aGlzLm9wdGlv bnMuYnV0dG9ucykgewogICAgICAgICAgICAgLy8gbGluayBmdW5jdGlvbnMKICAgICAgICAgICAg IHZhciBzZWxmID0zRCB0aGlzOwpAQCAtNzIsNyArNzYsNyBAQAogICAgICAgICB9CiAgICAgICAg PTIwCiAgICAgICAgIC8vIGFwcGVuZCBvcGVyYXRpb25zCi0gICAgICAgIHRoaXMuJG9wZXJhdGlv bnMgPTNEICQodGhpcy5lbCkuZmluZCgnI29wZXJhdGlvbnMnKTsKKyAgICAgICAgdGhpcy4kb3Bl cmF0aW9ucyA9M0QgJCh0aGlzLmVsKS5maW5kKCcub3BlcmF0aW9ucycpOwogICAgICAgICBpZiAo dGhpcy5vcHRpb25zLm9wZXJhdGlvbnMpIHsKICAgICAgICAgICAgIC8vIGxpbmsgZnVuY3Rpb25z CiAgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKQEAgLTE2MSwyNyArMTY1LDI3IEBACiAg ICAgICAgIHZhciB0bXBsID0zRCAgJzxkaXYgaWQ9M0QiJyArIG9wdGlvbnMuaWQgKyAnIiBjbGFz cz0zRCInICsgb3B0aW9ucz0KLmNscyArICciPic7CiAgICAgICAgPTIwCiAgICAgICAgIGlmIChv cHRpb25zLnRpdGxlKSB7Ci0gICAgICAgICAgICB0bXBsICs9M0QgICAgICc8ZGl2IGlkPTNEInBv cnRsZXQtaGVhZGVyIiBjbGFzcz0zRCJwb3J0bGV0LWhlYT0KZGVyIj4nICsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnPGRpdiBpZD0zRCJvcGVyYXRpb25zIiBzdHlsZT0zRCJmbG9hdDog JyArIG9wPQp0aW9ucy5vcGVyYXRpb25zX2ZsdCArICc7Ij48L2Rpdj4nICsKKyAgICAgICAgICAg IHRtcGwgKz0zRCAgICAgJzxkaXYgY2xhc3M9M0QicG9ydGxldC1oZWFkZXIiPicgKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNE ImZsb2F0OiAnICs9CiBvcHRpb25zLm9wZXJhdGlvbnNfZmx0ICsgJzsiPjwvZGl2PicgKwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPTNEInBvcnRsZXQtdGl0bGUiPic7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9MjAKICAgICAgICAgICAgIGlmIChvcHRpb25z Lmljb24pCiAgICAgICAgICAgICAgICAgdG1wbCArPTNEICAgICAgICAgJzxpIGNsYXNzPTNEImlj b24gZmEgJyArIG9wdGlvbnMuaWNvbiArID0KJyI+Jm5ic3A7PC9pPic7CiAgICAgICAgPTIwCi0g ICAgICAgICAgICB0bXBsICs9M0QgICAgICAgICAgICAgJzxzcGFuIGlkPTNEInBvcnRsZXQtdGl0 bGUtdGV4dCIgY2xhc3M9Cj0zRCJwb3J0bGV0LXRpdGxlLXRleHQiPicgKyBvcHRpb25zLnRpdGxl ICsgJzwvc3Bhbj4nICsKKyAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgICAgICAgICAnPHNwYW4g Y2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0Ij4nICsgPQpvcHRpb25zLnRpdGxlICsgJzwvc3Bh bj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAg ICAgICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICAgfQotICAgICAgICB0bXBsICs9M0QgICAg ICAgICAnPGRpdiBpZD0zRCJwb3J0bGV0LWNvbnRlbnQiIGNsYXNzPTNEInBvcnRsZXQtY289Cm50 ZW50Ij4nOworICAgICAgICB0bXBsICs9M0QgICAgICAgICAnPGRpdiBjbGFzcz0zRCJwb3J0bGV0 LWNvbnRlbnQiPic7CiAgICAgICAgPTIwCiAgICAgICAgIGlmIChvcHRpb25zLnBsYWNlbWVudCA9 M0Q9M0QgJ3RvcCcpIHsKLSAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGlkPTNE ImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2PQo+JzsKKyAgICAgICAgICAgIHRtcGwg Kz0zRCAgICAgICAgICc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Pic7CiAgICAgICAgIH0K ICAgICAgICA9MjAKLSAgICAgICAgdG1wbCArPTNEICAgICAgICAgICAgICc8ZGl2IGlkPTNEImNv bnRlbnQiIGNsYXNzPTNEImNvbnRlbnQiPjwvZGl2PQo+JzsKKyAgICAgICAgdG1wbCArPTNEICAg ICAgICAgICAgICc8ZGl2IGNsYXNzPTNEImNvbnRlbnQiPjwvZGl2Pic7CiAgICAgICAgPTIwCiAg ICAgICAgIGlmIChvcHRpb25zLnBsYWNlbWVudCA9M0Q9M0QgJ2JvdHRvbScpIHsKLSAgICAgICAg ICAgIHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGlkPTNEImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRv bnMiPjwvZGl2PQo+JzsKKyAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGNsYXNz PTNEImJ1dHRvbnMiPjwvZGl2Pic7CiAgICAgICAgIH0KICAgICAgICA9MjAKICAgICAgICAgdG1w bCArPTNEICAgICAgICAgJzwvZGl2PicgKwoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4 MTc1YzhkMmUyYmM0YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJi MzRiN2ZhNiBjb25maWcvZGF0YXR5cGVzX2NvbmYueG1sLnNhbXBsZQotLS0gYS9jb25maWcvZGF0 YXR5cGVzX2NvbmYueG1sLnNhbXBsZQorKysgYi9jb25maWcvZGF0YXR5cGVzX2NvbmYueG1sLnNh bXBsZQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgPGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJyZ2Ii IHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5pbWFnZXM6UmdiIiBtaW1ldD0KeXBlPTNEImltYWdl L3JnYiIvPjxkYXRhdHlwZSBleHRlbnNpb249M0QicGJtIiB0eXBlPTNEImdhbGF4eS5kYXRhdHlw ZXMuaW1hPQpnZXM6UGJtIiBtaW1ldHlwZT0zRCJpbWFnZS9wYm0iLz48ZGF0YXR5cGUgZXh0ZW5z aW9uPTNEInBnbSIgdHlwZT0zRCJnYWxheHk9Ci5kYXRhdHlwZXMuaW1hZ2VzOlBnbSIgbWltZXR5 cGU9M0QiaW1hZ2UvcGdtIi8+CisgICAgPGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJybmFfZXBzIiB0 eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuc2VxdWVuY2U6Uk5BRD0Kb3RQbG90TWF0cml4IiBtaW1l dHlwZT0zRCJpbWFnZS9lcHMiIGRpc3BsYXlfaW5fdXBsb2FkPTNEIlRydWUiLz48ZGF0YXR5cGUg PQpleHRlbnNpb249M0QiZXBzIiB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuaW1hZ2VzOkVwcyIg bWltZXR5cGU9M0QiaW1hZ2UvZXA9CnMiLz48ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEInJhc3QiIHR5 cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5pbWFnZXM6UmFzdCIgbWltZT0KdHlwZT0zRCJpbWFnZS9y YXN0Ii8+PGRhdGF0eXBlIGV4dGVuc2lvbj0zRCJsYWoiIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBl cy5pPQptYWdlczpMYWoiLz4KQEAgLTMwNCw2ICszMDUsNyBAQAogICAgIDxzbmlmZmVyIHR5cGU9 M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0OkFyZmYiLz48c25pZmZlciB0eXBlPTNEImdhbGF4eS49 CmRhdGF0eXBlcy50ZXh0OklweW5iIi8+PHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVz LnRleHQ6SnNvbiIvPgorICAgIDxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5zZXF1 ZW5jZTpSTkFEb3RQbG90TWF0cml4Ii8+PHNuaWZmZXI9CiB0eXBlPTNEImdhbGF4eS5kYXRhdHlw ZXMuaW1hZ2VzOkpwZyIvPjxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5pbT0KYWdl czpQbmciLz48c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuaW1hZ2VzOlRpZmYiLz4K CmRpZmYgLXIgMTU5NjJiM2Q5YWFjMDYxZTk1NDFmODE3NWM4ZDJlMmJjNGJhNWNhYiAtciAyZTk5 MGNhZWZjOTQzZWIyYjFkNGE5ND0KYWY1MDhjMjJiYjM0YjdmYTYgY29uZmlnL3BsdWdpbnMvdmlz dWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKLS0tIGEvY29uZmlnL3BsdWdp bnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKKysrIGIvY29uZmln L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKQEAgLTEs NiArMSw2IEBACi0vLyAgICAgVW5kZXJzY29yZS5qcyAxLjQuNAorLy8gICAgIFVuZGVyc2NvcmUu anMgMS43LjAKIC8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZwotLy8gICAgIChjKSAyMDA5 LTIwMTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4KKy8vICAgICAoYykgMjAw OS0yMDE0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBS ZXBvPQpydGVycyAmIEVkaXRvcnMKIC8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlz dHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgo9MjAKLWRlZmluZSgibXZjL3VpL3VpLW1v ZGFsIixbXSxmdW5jdGlvbigpe3ZhciBlPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2VsTWFpPQpu OiJib2R5IixvcHRpb25zRGVmYXVsdDp7dGl0bGU6InVpLW1vZGFsIixib2R5OiIiLGJhY2tkcm9w OiEwLGhlaWdodDpudWxsLHc9CmlkdGg6bnVsbCxjbG9zaW5nX2V2ZW50czohMSxjbG9zaW5nX2Nh bGxiYWNrOm51bGx9LGJ1dHRvbkxpc3Q6e30saW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGUpe2UmJnRo aXMuX2NyZWF0ZShlKX0sc2hvdzpmdW5jdGlvbihlKXt0aGlzLmluaXRpYWxpemUoZSksdGhpcy5v PQpwdGlvbnMuaGVpZ2h0Pyh0aGlzLiRib2R5LmNzcygiaGVpZ2h0Iix0aGlzLm9wdGlvbnMuaGVp Z2h0KSx0aGlzLiRib2R5LmNzcyg9CiJvdmVyZmxvdyIsImhpZGRlbiIpKTp0aGlzLiRib2R5LmNz cygibWF4LWhlaWdodCIsJCh3aW5kb3cpLmhlaWdodCgpLzIpLHRoaT0Kcy5vcHRpb25zLndpZHRo JiZ0aGlzLiRkaWFsb2cuY3NzKCJ3aWR0aCIsdGhpcy5vcHRpb25zLndpZHRoKSx0aGlzLnZpc2li bGU/PQp0aGlzLiRlbC5zaG93KCk6dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxl PTNEITB9LGhpZGU6ZnVuY3Rpb24oKXs9CnRoaXMudmlzaWJsZT0zRCExLHRoaXMuJGVsLmZhZGVP dXQoImZhc3QiKSx0aGlzLm9wdGlvbnMuY2xvc2luZ19jYWxsYmFjayYmdD0KaGlzLm9wdGlvbnMu Y2xvc2luZ19jYWxsYmFjaygpfSxlbmFibGVCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlz LmJ1dHRvPQpuTGlzdFtlXTt0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVk IiwhMSl9LGRpc2FibGVCdXR0b246ZnVuY3Q9CmlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlz dFtlXTt0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVkIj0KLCEwKX0sc2hv d0J1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRidXR0 b25zLmZpbmQoPQoiIyIrdCkuc2hvdygpfSxoaWRlQnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNE dGhpcy5idXR0b25MaXN0W2VdO3RoaXMuJGJ1dHQ9Cm9ucy5maW5kKCIjIit0KS5oaWRlKCl9LGdl dEJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTtyZT0KdHVybiB0 aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpfSxzY3JvbGxUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy4kYm9keS5zY3JvPQpsbFRvcCgpfSxfY3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0 aGlzLm9wdGlvbnM9M0RfLmRlZmF1bHRzKGUsdGhpcy49Cm9wdGlvbnNEZWZhdWx0KSx0aGlzLm9w dGlvbnMuYm9keT0zRD0zRCJwcm9ncmVzcyImJih0aGlzLm9wdGlvbnMuYm9keT0zRCQoJz0KPGRp diBjbGFzcz0zRCJwcm9ncmVzcyBwcm9ncmVzcy1zdHJpcGVkIGFjdGl2ZSI+PGRpdiBjbGFzcz0z RCJwcm9ncmVzcy1iYXIgPQpwcm9ncmVzcy1iYXItaW5mbyIgc3R5bGU9M0Qid2lkdGg6MTAwJSI+ PC9kaXY+PC9kaXY+JykpLHRoaXMuJGVsJiYodGhpcy4kZWw9Ci5yZW1vdmUoKSwkKGRvY3VtZW50 KS5vZmYoImtleXVwLnVpLW1vZGFsIikpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZT0K KHRoaXMub3B0aW9ucy50aXRsZSkpLHRoaXMuJGRpYWxvZz0zRHRoaXMuJGVsLmZpbmQoIi5tb2Rh bC1kaWFsb2ciKSx0aGlzLiRiPQpvZHk9M0R0aGlzLiRlbC5maW5kKCIubW9kYWwtYm9keSIpLHRo aXMuJGZvb3Rlcj0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1mb289CnRlciIpLHRoaXMuJGJ1dHRv bnM9M0R0aGlzLiRlbC5maW5kKCIuYnV0dG9ucyIpLHRoaXMuJGJhY2tkcm9wPTNEdGhpcy4kZWwu Zj0KaW5kKCIubW9kYWwtYmFja2Ryb3AiKSx0aGlzLiRib2R5Lmh0bWwodGhpcy5vcHRpb25zLmJv ZHkpLHRoaXMub3B0aW9ucy5iYWNrPQpkcm9wfHx0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygi aW4iKTtpZih0aGlzLm9wdGlvbnMuYnV0dG9ucyl7dGhpcy5idXR0b249Ckxpc3Q9M0R7fTt2YXIg bj0zRDA7JC5lYWNoKHRoaXMub3B0aW9ucy5idXR0b25zLGZ1bmN0aW9uKGUscil7dmFyIGk9M0Qi YnV0dD0Kb24tIituKys7dC4kYnV0dG9ucy5hcHBlbmQoJCgnPGJ1dHRvbiBpZD0zRCInK2krJyI+ PC9idXR0b24+JykudGV4dChlKS5jbGljPQprKHIpKS5hcHBlbmQoIiAiKSx0LmJ1dHRvbkxpc3Rb ZV09M0RpfSl9ZWxzZSB0aGlzLiRmb290ZXIuaGlkZSgpOyQodGhpcy5lbE09CmFpbikuYXBwZW5k KCQodGhpcy5lbCkpLHRoaXMub3B0aW9ucy5jbG9zaW5nX2V2ZW50cyYmKCQoZG9jdW1lbnQpLm9u KCJrZXl1cD0KLnVpLW1vZGFsIixmdW5jdGlvbihlKXtlLmtleUNvZGU9M0Q9M0QyNyYmdC5oaWRl KCl9KSx0aGlzLiRlbC5maW5kKCIubW9kYWwtPQpiYWNrZHJvcCIpLm9uKCJjbGljayIsZnVuY3Rp b24oKXt0LmhpZGUoKX0pKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic9CjxkaXYgY2xh c3M9M0QidWktbW9kYWwgbW9kYWwiPjxkaXYgY2xhc3M9M0QibW9kYWwtYmFja2Ryb3AgZmFkZSBp biIgc3R5bGU9Cj0zRCJ6LWluZGV4OiAtMTsiPjwvZGl2PjxkaXYgY2xhc3M9M0QibW9kYWwtZGlh bG9nIj48ZGl2IGNsYXNzPTNEIm1vZGFsLWNvbj0KdGVudCI+PGRpdiBjbGFzcz0zRCJtb2RhbC1o ZWFkZXIiPjxidXR0b24gdHlwZT0zRCJidXR0b24iIGNsYXNzPTNEImNsb3NlIiBzPQp0eWxlPTNE ImRpc3BsYXk6IG5vbmU7Ij4mdGltZXM7PC9idXR0b24+PGg0IGNsYXNzPTNEInRpdGxlIj4nK2Ur IjwvaDQ+IisiPC89CmRpdj4iKyc8ZGl2IGNsYXNzPTNEIm1vZGFsLWJvZHkiIHN0eWxlPTNEInBv c2l0aW9uOiBzdGF0aWM7Ij48L2Rpdj4nKyc8ZGl2ID0KY2xhc3M9M0QibW9kYWwtZm9vdGVyIj4n Kyc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiIHN0eWxlPTNEImZsb2F0OiByaWdodDsiPjwvPQpkaXY+ JysiPC9kaXY+IisiPC9kaXYiKyI8L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3OmV9fSks ZnVuY3Rpb24oKXt2YXI9CiBlPTNEdGhpcyx0PTNEZS5fLG49M0R7fSxyPTNEQXJyYXkucHJvdG90 eXBlLGk9M0RPYmplY3QucHJvdG90eXBlLHM9M0RGdW5jdD0KaW9uLnByb3RvdHlwZSxvPTNEci5w dXNoLHU9M0RyLnNsaWNlLGE9M0RyLmNvbmNhdCxmPTNEaS50b1N0cmluZyxsPTNEaS5oYXNPPQp3 blByb3BlcnR5LGM9M0RyLmZvckVhY2gsaD0zRHIubWFwLHA9M0RyLnJlZHVjZSxkPTNEci5yZWR1 Y2VSaWdodCx2PTNEci5maWw9CnRlcixtPTNEci5ldmVyeSxnPTNEci5zb21lLHk9M0RyLmluZGV4 T2YsYj0zRHIubGFzdEluZGV4T2Ysdz0zREFycmF5LmlzQXJyYT0KeSxFPTNET2JqZWN0LmtleXMs Uz0zRHMuYmluZCx4PTNEZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHgpcmV0dXJuIGU7aWYo PQohKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHgoZSk7dGhpcy5fd3JhcHBlZD0zRGV9 O3R5cGVvZiBleHBvcnRzIT0zRCI9CnVuZGVmaW5lZCI/KHR5cGVvZiBtb2R1bGUhPTNEInVuZGVm aW5lZCImJm1vZHVsZS5leHBvcnRzJiYoZXhwb3J0cz0zRG1vZHVsZT0KLmV4cG9ydHM9M0R4KSxl eHBvcnRzLl89M0R4KTplLl89M0R4LHguVkVSU0lPTj0zRCIxLjQuNCI7dmFyIFQ9M0R4LmVhY2g9 M0R4PQouZm9yRWFjaD0zRGZ1bmN0aW9uKGUsdCxyKXtpZihlPTNEPTNEbnVsbClyZXR1cm47aWYo YyYmZS5mb3JFYWNoPTNEPTNEPTNEYyk9CmUuZm9yRWFjaCh0LHIpO2Vsc2UgaWYoZS5sZW5ndGg9 M0Q9M0Q9M0QrZS5sZW5ndGgpe2Zvcih2YXIgaT0zRDAscz0zRGUubGVuZz0KdGg7aTxzO2krKylp Zih0LmNhbGwocixlW2ldLGksZSk9M0Q9M0Q9M0RuKXJldHVybn1lbHNlIGZvcih2YXIgbyBpbiBl KWlmKHguPQpoYXMoZSxvKSYmdC5jYWxsKHIsZVtvXSxvLGUpPTNEPTNEPTNEbilyZXR1cm59O3gu bWFwPTNEeC5jb2xsZWN0PTNEZnVuY3Rpb249CihlLHQsbil7dmFyIHI9M0RbXTtyZXR1cm4gZT0z RD0zRG51bGw/cjpoJiZlLm1hcD0zRD0zRD0zRGg/ZS5tYXAodCxuKTooVChlLD0KZnVuY3Rpb24o ZSxpLHMpe3IucHVzaCh0LmNhbGwobixlLGkscykpfSkscil9O3ZhciBOPTNEIlJlZHVjZSBvZiBl bXB0eSBhcnJhPQp5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSI7eC5yZWR1Y2U9M0R4LmZvbGRsPTNE eC5pbmplY3Q9M0RmdW5jdGlvbihlLHQsbixyKXs9CnZhciBpPTNEYXJndW1lbnRzLmxlbmd0aD4y O2U9M0Q9M0RudWxsJiYoZT0zRFtdKTtpZihwJiZlLnJlZHVjZT0zRD0zRD0zRHApcj0KZXR1cm4g ciYmKHQ9M0R4LmJpbmQodCxyKSksaT9lLnJlZHVjZSh0LG4pOmUucmVkdWNlKHQpO1QoZSxmdW5j dGlvbihlLHMsbyl7PQppP249M0R0LmNhbGwocixuLGUscyxvKToobj0zRGUsaT0zRCEwKX0pO2lm KCFpKXRocm93IG5ldyBUeXBlRXJyb3IoTik7cmV0dXI9Cm4gbn0seC5yZWR1Y2VSaWdodD0zRHgu Zm9sZHI9M0RmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0zRGFyZ3VtZW50cy5sZW5ndGg+Mj0KO2U9 M0Q9M0RudWxsJiYoZT0zRFtdKTtpZihkJiZlLnJlZHVjZVJpZ2h0PTNEPTNEPTNEZClyZXR1cm4g ciYmKHQ9M0R4LmJpbmQoPQp0LHIpKSxpP2UucmVkdWNlUmlnaHQodCxuKTplLnJlZHVjZVJpZ2h0 KHQpO3ZhciBzPTNEZS5sZW5ndGg7aWYocyE9M0Q9M0Qrcyk9Cnt2YXIgbz0zRHgua2V5cyhlKTtz PTNEby5sZW5ndGh9VChlLGZ1bmN0aW9uKHUsYSxmKXthPTNEbz9vWy0tc106LS1zLGk/bj0zRD0K dC5jYWxsKHIsbixlW2FdLGEsZik6KG49M0RlW2FdLGk9M0QhMCl9KTtpZighaSl0aHJvdyBuZXcg VHlwZUVycm9yKE4pO3JldHVyPQpuIG59LHguZmluZD0zRHguZGV0ZWN0PTNEZnVuY3Rpb24oZSx0 LG4pe3ZhciByO3JldHVybiBDKGUsZnVuY3Rpb24oZSxpLHMpe2k9CmYodC5jYWxsKG4sZSxpLHMp KXJldHVybiByPTNEZSwhMH0pLHJ9LHguZmlsdGVyPTNEeC5zZWxlY3Q9M0RmdW5jdGlvbihlLHQs bj0KKXt2YXIgcj0zRFtdO3JldHVybiBlPTNEPTNEbnVsbD9yOnYmJmUuZmlsdGVyPTNEPTNEPTNE dj9lLmZpbHRlcih0LG4pOihUKGUsPQpmdW5jdGlvbihlLGkscyl7dC5jYWxsKG4sZSxpLHMpJiZy LnB1c2goZSl9KSxyKX0seC5yZWplY3Q9M0RmdW5jdGlvbihlLHQsbik9CntyZXR1cm4geC5maWx0 ZXIoZSxmdW5jdGlvbihlLHIsaSl7cmV0dXJuIXQuY2FsbChuLGUscixpKX0sbil9LHguZXZlcnk9 M0R4Lj0KYWxsPTNEZnVuY3Rpb24oZSx0LHIpe3R8fCh0PTNEeC5pZGVudGl0eSk7dmFyIGk9M0Qh MDtyZXR1cm4gZT0zRD0zRG51bGw/aTptPQomJmUuZXZlcnk9M0Q9M0Q9M0RtP2UuZXZlcnkodCxy KTooVChlLGZ1bmN0aW9uKGUscyxvKXtpZighKGk9M0RpJiZ0LmNhbGwociw9CmUscyxvKSkpcmV0 dXJuIG59KSwhIWkpfTt2YXIgQz0zRHguc29tZT0zRHguYW55PTNEZnVuY3Rpb24oZSx0LHIpe3R8 fCh0PTNEeD0KLmlkZW50aXR5KTt2YXIgaT0zRCExO3JldHVybiBlPTNEPTNEbnVsbD9pOmcmJmUu c29tZT0zRD0zRD0zRGc/ZS5zb21lKHQscik6PQooVChlLGZ1bmN0aW9uKGUscyxvKXtpZihpfHwo aT0zRHQuY2FsbChyLGUscyxvKSkpcmV0dXJuIG59KSwhIWkpfTt4LmNvbnRhaW49CnM9M0R4Lmlu Y2x1ZGU9M0RmdW5jdGlvbihlLHQpe3JldHVybiBlPTNEPTNEbnVsbD8hMTp5JiZlLmluZGV4T2Y9 M0Q9M0Q9M0R5Pz0KZS5pbmRleE9mKHQpIT0zRC0xOkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT0z RD0zRD0zRHR9KX0seC5pbnZva2U9M0RmdW5jdGlvPQpuKGUsdCl7dmFyIG49M0R1LmNhbGwoYXJn dW1lbnRzLDIpLHI9M0R4LmlzRnVuY3Rpb24odCk7cmV0dXJuIHgubWFwKGUsZnVuY3Q9Cmlvbihl KXtyZXR1cm4ocj90OmVbdF0pLmFwcGx5KGUsbil9KX0seC5wbHVjaz0zRGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHgubWFwKD0KZSxmdW5jdGlvbihlKXtyZXR1cm4gZVt0XX0pfSx4LndoZXJlPTNEZnVu Y3Rpb24oZSx0LG4pe3JldHVybiB4LmlzRW1wdHkodCk/PQpuP3ZvaWQgMDpbXTp4W24/ImZpbmQi OiJmaWx0ZXIiXShlLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbiBpbiB0KWlmKHRbbl0hPTNEPQo9M0Rl W25dKXJldHVybiExO3JldHVybiEwfSl9LHguZmluZFdoZXJlPTNEZnVuY3Rpb24oZSx0KXtyZXR1 cm4geC53aGVyZShlLHQ9CiwhMCl9LHgubWF4PTNEZnVuY3Rpb24oZSx0LG4pe2lmKCF0JiZ4Lmlz QXJyYXkoZSkmJmVbMF09M0Q9M0Q9M0QrZVswXSYmZS5sZT0Kbmd0aDw2NTUzNSlyZXR1cm4gTWF0 aC5tYXguYXBwbHkoTWF0aCxlKTtpZighdCYmeC5pc0VtcHR5KGUpKXJldHVybi1JbmZpbml0PQp5 O3ZhciByPTNEe2NvbXB1dGVkOi1JbmZpbml0eSx2YWx1ZTotSW5maW5pdHl9O3JldHVybiBUKGUs ZnVuY3Rpb24oZSxpLHMpe3Y9CmFyIG89M0R0P3QuY2FsbChuLGUsaSxzKTplO28+PTNEci5jb21w dXRlZCYmKHI9M0R7dmFsdWU6ZSxjb21wdXRlZDpvfSl9KSxyLj0KdmFsdWV9LHgubWluPTNEZnVu Y3Rpb24oZSx0LG4pe2lmKCF0JiZ4LmlzQXJyYXkoZSkmJmVbMF09M0Q9M0Q9M0QrZVswXSYmZS5s PQplbmd0aDw2NTUzNSlyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlKTtpZighdCYmeC5pc0Vt cHR5KGUpKXJldHVybiBJbmZpbmk9CnR5O3ZhciByPTNEe2NvbXB1dGVkOkluZmluaXR5LHZhbHVl OkluZmluaXR5fTtyZXR1cm4gVChlLGZ1bmN0aW9uKGUsaSxzKXt2YT0KciBvPTNEdD90LmNhbGwo bixlLGkscyk6ZTtvPHIuY29tcHV0ZWQmJihyPTNEe3ZhbHVlOmUsY29tcHV0ZWQ6b30pfSksci52 YWx1PQplfSx4LnNodWZmbGU9M0RmdW5jdGlvbihlKXt2YXIgdCxuPTNEMCxyPTNEW107cmV0dXJu IFQoZSxmdW5jdGlvbihlKXt0PTNEeC49CnJhbmRvbShuKyspLHJbbi0xXT0zRHJbdF0sclt0XT0z RGV9KSxyfTt2YXIgaz0zRGZ1bmN0aW9uKGUpe3JldHVybiB4LmlzRnVuYz0KdGlvbihlKT9lOmZ1 bmN0aW9uKHQpe3JldHVybiB0W2VdfX07eC5zb3J0Qnk9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9 M0RrKHQpPQo7cmV0dXJuIHgucGx1Y2soeC5tYXAoZSxmdW5jdGlvbihlLHQsaSl7cmV0dXJue3Zh bHVlOmUsaW5kZXg6dCxjcml0ZXJpYTpyLmM9CmFsbChuLGUsdCxpKX19KS5zb3J0KGZ1bmN0aW9u KGUsdCl7dmFyIG49M0RlLmNyaXRlcmlhLHI9M0R0LmNyaXRlcmlhO2lmKG4hPQo9M0Q9M0RyKXtp ZihuPnJ8fG49M0Q9M0Q9M0R2b2lkIDApcmV0dXJuIDE7aWYobjxyfHxyPTNEPTNEPTNEdm9pZCAw KXJldHVybi09CjF9cmV0dXJuIGUuaW5kZXg8dC5pbmRleD8tMToxfSksInZhbHVlIil9O3ZhciBM PTNEZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Cj0zRHt9LHM9M0RrKHQ9M0Q9M0RudWxsP3guaWRl bnRpdHk6dCk7cmV0dXJuIFQoZSxmdW5jdGlvbih0LG8pe3ZhciB1PTNEcy5jYT0KbGwobix0LG8s ZSk7cihpLHUsdCl9KSxpfTt4Lmdyb3VwQnk9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwoZSx0 LG4sZnVuY3RpPQpvbihlLHQsbil7KHguaGFzKGUsdCk/ZVt0XTplW3RdPTNEW10pLnB1c2gobil9 KX0seC5jb3VudEJ5PTNEZnVuY3Rpb24oZSx0LG49Cil7cmV0dXJuIEwoZSx0LG4sZnVuY3Rpb24o ZSx0KXt4LmhhcyhlLHQpfHwoZVt0XT0zRDApLGVbdF0rK30pfSx4LnNvcnRlZEluZD0KZXg9M0Rm dW5jdGlvbihlLHQsbixyKXtuPTNEbj0zRD0zRG51bGw/eC5pZGVudGl0eTprKG4pO3ZhciBpPTNE bi5jYWxsKHIsdCksPQpzPTNEMCxvPTNEZS5sZW5ndGg7d2hpbGUoczxvKXt2YXIgdT0zRHMrbz4+ PjE7bi5jYWxsKHIsZVt1XSk8aT9zPTNEdSsxOm89M0Q9CnV9cmV0dXJuIHN9LHgudG9BcnJheT0z RGZ1bmN0aW9uKGUpe3JldHVybiBlP3guaXNBcnJheShlKT91LmNhbGwoZSk6ZS5sZW5ndD0KaD0z RD0zRD0zRCtlLmxlbmd0aD94Lm1hcChlLHguaWRlbnRpdHkpOngudmFsdWVzKGUpOltdfSx4LnNp emU9M0RmdW5jdGlvbihlPQope3JldHVybiBlPTNEPTNEbnVsbD8wOmUubGVuZ3RoPTNEPTNEPTNE K2UubGVuZ3RoP2UubGVuZ3RoOngua2V5cyhlKS5sZW5ndGg9Cn0seC5maXJzdD0zRHguaGVhZD0z RHgudGFrZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0zRD0zRG51bGw/dm9pZCAwOnQhPQo9 M0RudWxsJiYhbj91LmNhbGwoZSwwLHQpOmVbMF19LHguaW5pdGlhbD0zRGZ1bmN0aW9uKGUsdCxu KXtyZXR1cm4gdS5jYWxsKGU9CiwwLGUubGVuZ3RoLSh0PTNEPTNEbnVsbHx8bj8xOnQpKX0seC5s YXN0PTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPTNEPTNEbj0KdWxsP3ZvaWQgMDp0IT0zRG51 bGwmJiFuP3UuY2FsbChlLE1hdGgubWF4KGUubGVuZ3RoLXQsMCkpOmVbZS5sZW5ndGgtMV19LHgu PQpyZXN0PTNEeC50YWlsPTNEeC5kcm9wPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1LmNhbGwo ZSx0PTNEPTNEbnVsbHx8bj8xOnQ9Cil9LHguY29tcGFjdD0zRGZ1bmN0aW9uKGUpe3JldHVybiB4 LmZpbHRlcihlLHguaWRlbnRpdHkpfTt2YXIgQT0zRGZ1bmN0aW9uKD0KZSx0LG4pe3JldHVybiBU KGUsZnVuY3Rpb24oZSl7eC5pc0FycmF5KGUpP3Q/by5hcHBseShuLGUpOkEoZSx0LG4pOm4ucHVz aChlPQopfSksbn07eC5mbGF0dGVuPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gQShlLHQsW10pfSx4 LndpdGhvdXQ9M0RmdW5jdGlvbihlKXs9CnJldHVybiB4LmRpZmZlcmVuY2UoZSx1LmNhbGwoYXJn dW1lbnRzLDEpKX0seC51bmlxPTNEeC51bmlxdWU9M0RmdW5jdGlvbihlLD0KdCxuLHIpe3guaXNG dW5jdGlvbih0KSYmKHI9M0RuLG49M0R0LHQ9M0QhMSk7dmFyIGk9M0RuP3gubWFwKGUsbixyKTpl LHM9M0RbPQpdLG89M0RbXTtyZXR1cm4gVChpLGZ1bmN0aW9uKG4scil7aWYodD8hcnx8b1tvLmxl bmd0aC0xXSE9M0Q9M0RuOiF4LmNvbnRhaW49CnMobyxuKSlvLnB1c2gobikscy5wdXNoKGVbcl0p fSksc30seC51bmlvbj0zRGZ1bmN0aW9uKCl7cmV0dXJuIHgudW5pcShhLmFwcD0KbHkocixhcmd1 bWVudHMpKX0seC5pbnRlcnNlY3Rpb249M0RmdW5jdGlvbihlKXt2YXIgdD0zRHUuY2FsbChhcmd1 bWVudHMsMSk7PQpyZXR1cm4geC5maWx0ZXIoeC51bmlxKGUpLGZ1bmN0aW9uKGUpe3JldHVybiB4 LmV2ZXJ5KHQsZnVuY3Rpb24odCl7cmV0dXJuIHg9Ci5pbmRleE9mKHQsZSk+PTNEMH0pfSl9LHgu ZGlmZmVyZW5jZT0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEYS5hcHBseShyLHUuY2FsbD0KKGFyZ3Vt ZW50cywxKSk7cmV0dXJuIHguZmlsdGVyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIXguY29udGFpbnMo dCxlKX0pfSx4LnppPQpwPTNEZnVuY3Rpb24oKXt2YXIgZT0zRHUuY2FsbChhcmd1bWVudHMpLHQ9 M0R4Lm1heCh4LnBsdWNrKGUsImxlbmd0aCIpKSxuPQo9M0RuZXcgQXJyYXkodCk7Zm9yKHZhciBy PTNEMDtyPHQ7cisrKW5bcl09M0R4LnBsdWNrKGUsIiIrcik7cmV0dXJuIG59LHgudW49CnppcD0z RGZ1bmN0aW9uKGUpe3ZhciB0PTNEW107cmV0dXJuIHguZWFjaChlLGZ1bmN0aW9uKGUsbil7eC5l YWNoKGUsZnVuY3Rpbz0KbihlLHIpe3QubGVuZ3RoPD0zRHImJih0W3JdPTNEW10pLHRbcl1bbl09 M0RlfSl9KSx0fSx4Lm9iamVjdD0zRGZ1bmN0aW9uKGUsPQp0KXtpZihlPTNEPTNEbnVsbClyZXR1 cm57fTt2YXIgbj0zRHt9O2Zvcih2YXIgcj0zRDAsaT0zRGUubGVuZ3RoO3I8aTtyKyspdD89Cm5b ZVtyXV09M0R0W3JdOm5bZVtyXVswXV09M0RlW3JdWzFdO3JldHVybiBufSx4LmluZGV4T2Y9M0Rm dW5jdGlvbihlLHQsbil7aT0KZihlPTNEPTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRDAsaT0zRGUu bGVuZ3RoO2lmKG4pe2lmKHR5cGVvZiBuIT0zRCJudW1iZXIiPQopcmV0dXJuIHI9M0R4LnNvcnRl ZEluZGV4KGUsdCksZVtyXT0zRD0zRD0zRHQ/cjotMTtyPTNEbjwwP01hdGgubWF4KDAsaStuKTo9 Cm59aWYoeSYmZS5pbmRleE9mPTNEPTNEPTNEeSlyZXR1cm4gZS5pbmRleE9mKHQsbik7Zm9yKDty PGk7cisrKWlmKGVbcl09M0Q9Cj0zRD0zRHQpcmV0dXJuIHI7cmV0dXJuLTF9LHgubGFzdEluZGV4 T2Y9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcj0KZXR1cm4tMTt2YXIgcj0zRG4h PTNEbnVsbDtpZihiJiZlLmxhc3RJbmRleE9mPTNEPTNEPTNEYilyZXR1cm4gcj9lLmxhc3RJbmRl PQp4T2YodCxuKTplLmxhc3RJbmRleE9mKHQpO3ZhciBpPTNEcj9uOmUubGVuZ3RoO3doaWxlKGkt LSlpZihlW2ldPTNEPTNEPTNEdCk9CnJldHVybiBpO3JldHVybi0xfSx4LnJhbmdlPTNEZnVuY3Rp b24oZSx0LG4pe2FyZ3VtZW50cy5sZW5ndGg8PTNEMSYmKHQ9M0RlfD0KfDAsZT0zRDApLG49M0Rh cmd1bWVudHNbMl18fDE7dmFyIHI9M0RNYXRoLm1heChNYXRoLmNlaWwoKHQtZSkvbiksMCksaT0z RDAsPQpzPTNEbmV3IEFycmF5KHIpO3doaWxlKGk8cilzW2krK109M0RlLGUrPTNEbjtyZXR1cm4g c307dmFyIE89M0RmdW5jdGlvbigpe309Cjt4LmJpbmQ9M0RmdW5jdGlvbihlLHQpe3ZhciBuLHI7 aWYoZS5iaW5kPTNEPTNEPTNEUyYmUylyZXR1cm4gUy5hcHBseShlLHUuYz0KYWxsKGFyZ3VtZW50 cywxKSk7aWYoIXguaXNGdW5jdGlvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yO3JldHVybiBuPTNE dS5jYWxsPQooYXJndW1lbnRzLDIpLHI9M0RmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBy KXtPLnByb3RvdHlwZT0zRGUucHJvdG90eXA9CmU7dmFyIGk9M0RuZXcgTztPLnByb3RvdHlwZT0z RG51bGw7dmFyIHM9M0RlLmFwcGx5KGksbi5jb25jYXQodS5jYWxsKGFyZ3VtZT0KbnRzKSkpO3Jl dHVybiBPYmplY3Qocyk9M0Q9M0Q9M0RzP3M6aX1yZXR1cm4gZS5hcHBseSh0LG4uY29uY2F0KHUu Y2FsbChhcmd1PQptZW50cykpKX19LHgucGFydGlhbD0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEdS5j YWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Q9Cmlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMs dC5jb25jYXQodS5jYWxsKGFyZ3VtZW50cykpKX19LHguYmluZEFsbD0zRGZ1bmN0aT0Kb24oZSl7 dmFyIHQ9M0R1LmNhbGwoYXJndW1lbnRzLDEpO2lmKHQubGVuZ3RoPTNEPTNEPTNEMCl0aHJvdyBu ZXcgRXJyb3IoImJpPQpuZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcyIpO3JldHVy biBUKHQsZnVuY3Rpb24odCl7ZVt0XT0zRHguYmluZCg9CmVbdF0sZSl9KSxlfSx4Lm1lbW9pemU9 M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEe307cmV0dXJuIHR8fCh0PTNEeC5pZGVudGl0eT0KKSxm dW5jdGlvbigpe3ZhciByPTNEdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHguaGFzKG4s cik/bltyXTpuW3JdPTNEPQplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHguZGVsYXk9M0RmdW5j dGlvbihlLHQpe3ZhciBuPTNEdS5jYWxsKGFyZ3VtZW50cyw9CjIpO3JldHVybiBzZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxuKX0sdCl9LHguZGVmZXI9M0RmdW5jdD0K aW9uKGUpe3JldHVybiB4LmRlbGF5LmFwcGx5KHgsW2UsMV0uY29uY2F0KHUuY2FsbChhcmd1bWVu dHMsMSkpKX0seC50aHJvdHRsPQplPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxvLHU9M0Qw LGE9M0RmdW5jdGlvbigpe3U9M0RuZXcgRGF0ZSxzPTNEbnVsbCw9Cm89M0RlLmFwcGx5KHIsaSl9 O3JldHVybiBmdW5jdGlvbigpe3ZhciBmPTNEbmV3IERhdGU7IXUmJm49M0Q9M0Q9M0QhMSYmKHU9 Cj0zRGYpO3ZhciBsPTNEdC0oZi11KTtyZXR1cm4gcj0zRHRoaXMsaT0zRGFyZ3VtZW50cyxsPD0z RDA/KGNsZWFyVGltZW91dChzKT0KLHM9M0RudWxsLHU9M0RmLG89M0RlLmFwcGx5KHIsaSkpOnN8 fChzPTNEc2V0VGltZW91dChhLGwpKSxvfX0seC5kZWJvdW5jZT0KPTNEZnVuY3Rpb24oZSx0LG4p e3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9M0R0aGlzLG89M0Rhcmd1bWVudHMsdT0K PTNEZnVuY3Rpb24oKXtyPTNEbnVsbCxufHwoaT0zRGUuYXBwbHkocyxvKSl9LGE9M0RuJiYhcjty ZXR1cm4gY2xlYXJUaW1lb3V0PQoocikscj0zRHNldFRpbWVvdXQodSx0KSxhJiYoaT0zRGUuYXBw bHkocyxvKSksaX19LHgub25jZT0zRGZ1bmN0aW9uKGUpe3ZhciA9CnQ9M0QhMSxuO3JldHVybiBm dW5jdGlvbigpe3JldHVybiB0P246KHQ9M0QhMCxuPTNEZS5hcHBseSh0aGlzLGFyZ3VtZW50cyks ZT0KPTNEbnVsbCxuKX19LHgud3JhcD0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7 dmFyIG49M0RbZV07cmV0dXJuIG8uPQphcHBseShuLGFyZ3VtZW50cyksdC5hcHBseSh0aGlzLG4p fX0seC5jb21wb3NlPTNEZnVuY3Rpb24oKXt2YXIgZT0zRGFyZ3VtZW49CnRzO3JldHVybiBmdW5j dGlvbigpe3ZhciB0PTNEYXJndW1lbnRzO2Zvcih2YXIgbj0zRGUubGVuZ3RoLTE7bj49M0QwO24t LSl0PQo9M0RbZVtuXS5hcHBseSh0aGlzLHQpXTtyZXR1cm4gdFswXX19LHguYWZ0ZXI9M0RmdW5j dGlvbihlLHQpe3JldHVybiBlPD0zRDA9Cj90KCk6ZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4g dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx4LmtleXM9M0RFfHxmdW5jdD0KaW9uKGUpe2lmKGUh PTNEPTNET2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgb2JqZWN0Iik7dmFy IHQ9M0RbPQpdO2Zvcih2YXIgbiBpbiBlKXguaGFzKGUsbikmJnQucHVzaChuKTtyZXR1cm4gdH0s eC52YWx1ZXM9M0RmdW5jdGlvbihlKXt2YXI9CiB0PTNEW107Zm9yKHZhciBuIGluIGUpeC5oYXMo ZSxuKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fSx4LnBhaXJzPTNEZnVuY3Rpbz0KbihlKXt2YXIg dD0zRFtdO2Zvcih2YXIgbiBpbiBlKXguaGFzKGUsbikmJnQucHVzaChbbixlW25dXSk7cmV0dXJu IHR9LHguaW52PQplcnQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRHt9O2Zvcih2YXIgbiBpbiBlKXgu aGFzKGUsbikmJih0W2Vbbl1dPTNEbik7cmV0dXI9Cm4gdH0seC5mdW5jdGlvbnM9M0R4Lm1ldGhv ZHM9M0RmdW5jdGlvbihlKXt2YXIgdD0zRFtdO2Zvcih2YXIgbiBpbiBlKXguaXNGdT0KbmN0aW9u KGVbbl0pJiZ0LnB1c2gobik7cmV0dXJuIHQuc29ydCgpfSx4LmV4dGVuZD0zRGZ1bmN0aW9uKGUp e3JldHVybiBUKHUuPQpjYWxsKGFyZ3VtZW50cywxKSxmdW5jdGlvbih0KXtpZih0KWZvcih2YXIg biBpbiB0KWVbbl09M0R0W25dfSksZX0seC5waWNrPQo9M0RmdW5jdGlvbihlKXt2YXIgdD0zRHt9 LG49M0RhLmFwcGx5KHIsdS5jYWxsKGFyZ3VtZW50cywxKSk7cmV0dXJuIFQobixmdW49CmN0aW9u KG4pe24gaW4gZSYmKHRbbl09M0RlW25dKX0pLHR9LHgub21pdD0zRGZ1bmN0aW9uKGUpe3ZhciB0 PTNEe30sbj0zRGEuYT0KcHBseShyLHUuY2FsbChhcmd1bWVudHMsMSkpO2Zvcih2YXIgaSBpbiBl KXguY29udGFpbnMobixpKXx8KHRbaV09M0RlW2ldKTtyPQpldHVybiB0fSx4LmRlZmF1bHRzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIFQodS5jYWxsKGFyZ3VtZW50cywxKSxmdW5jdGlvbih0KXs9Cmlm KHQpZm9yKHZhciBuIGluIHQpZVtuXT0zRD0zRD0zRHZvaWQgMCYmKGVbbl09M0R0W25dKX0pLGV9 LHguY2xvbmU9M0RmdW5jdD0KaW9uKGUpe3JldHVybiB4LmlzT2JqZWN0KGUpP3guaXNBcnJheShl KT9lLnNsaWNlKCk6eC5leHRlbmQoe30sZSk6ZX0seC50YXA9Cj0zRGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIHQoZSksZX07dmFyIE09M0RmdW5jdGlvbihlLHQsbixyKXtpZihlPTNEPTNEPTNEdClyZT0K dHVybiBlIT0zRD0zRDB8fDEvZT0zRD0zRDEvdDtpZihlPTNEPTNEbnVsbHx8dD0zRD0zRG51bGwp cmV0dXJuIGU9M0Q9M0Q9M0R0PQo7ZSBpbnN0YW5jZW9mIHgmJihlPTNEZS5fd3JhcHBlZCksdCBp bnN0YW5jZW9mIHgmJih0PTNEdC5fd3JhcHBlZCk7dmFyIGk9M0Q9CmYuY2FsbChlKTtpZihpIT0z RGYuY2FsbCh0KSlyZXR1cm4hMTtzd2l0Y2goaSl7Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVy bj0KIGU9M0Q9M0RTdHJpbmcodCk7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBlIT0zRCtl P3QhPTNEK3Q6ZT0zRD0zRDA/MS9lPQo9M0Q9M0QxL3Q6ZT0zRD0zRCt0O2Nhc2UiW29iamVjdCBE YXRlXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rZT0zRD0KPTNEK3Q7Y2FzZSJbb2Jq ZWN0IFJlZ0V4cF0iOnJldHVybiBlLnNvdXJjZT0zRD0zRHQuc291cmNlJiZlLmdsb2JhbD0zRD0z RHQuPQpnbG9iYWwmJmUubXVsdGlsaW5lPTNEPTNEdC5tdWx0aWxpbmUmJmUuaWdub3JlQ2FzZT0z RD0zRHQuaWdub3JlQ2FzZX1pZih0eXA9CmVvZiBlIT0zRCJvYmplY3QifHx0eXBlb2YgdCE9M0Qi b2JqZWN0IilyZXR1cm4hMTt2YXIgcz0zRG4ubGVuZ3RoO3doaWxlKHMtLT0KKWlmKG5bc109M0Q9 M0RlKXJldHVybiByW3NdPTNEPTNEdDtuLnB1c2goZSksci5wdXNoKHQpO3ZhciBvPTNEMCx1PTNE ITA7aWYoPQppPTNEPTNEIltvYmplY3QgQXJyYXldIil7bz0zRGUubGVuZ3RoLHU9M0RvPTNEPTNE dC5sZW5ndGg7aWYodSl3aGlsZShvLS0paWY9CighKHU9M0RNKGVbb10sdFtvXSxuLHIpKSlicmVh a31lbHNle3ZhciBhPTNEZS5jb25zdHJ1Y3RvcixsPTNEdC5jb25zdHJ1Y3Rvcj0KO2lmKGEhPTNE PTNEbCYmISh4LmlzRnVuY3Rpb24oYSkmJmEgaW5zdGFuY2VvZiBhJiZ4LmlzRnVuY3Rpb24obCkm JmwgaW5zdGFuPQpjZW9mIGwpKXJldHVybiExO2Zvcih2YXIgYyBpbiBlKWlmKHguaGFzKGUsYykp e28rKztpZighKHU9M0R4Lmhhcyh0LGMpJiZNKGU9CltjXSx0W2NdLG4scikpKWJyZWFrfWlmKHUp e2ZvcihjIGluIHQpaWYoeC5oYXModCxjKSYmIShvLS0pKWJyZWFrO3U9M0Qhb319cj0KZXR1cm4g bi5wb3AoKSxyLnBvcCgpLHV9O3guaXNFcXVhbD0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE0oZSx0 LFtdLFtdKX0seC5pPQpzRW1wdHk9M0RmdW5jdGlvbihlKXtpZihlPTNEPTNEbnVsbClyZXR1cm4h MDtpZih4LmlzQXJyYXkoZSl8fHguaXNTdHJpbmcoZSk9CilyZXR1cm4gZS5sZW5ndGg9M0Q9M0Q9 M0QwO2Zvcih2YXIgdCBpbiBlKWlmKHguaGFzKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9LD0KeC5p c0VsZW1lbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4hIWUmJmUubm9kZVR5cGU9M0Q9M0Q9M0QxfSx4 LmlzQXJyYXk9M0R3fHxmPQp1bmN0aW9uKGUpe3JldHVybiBmLmNhbGwoZSk9M0Q9M0QiW29iamVj dCBBcnJheV0ifSx4LmlzT2JqZWN0PTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gZT0zRD0zRD0zRE9i amVjdChlKX0sVChbIkFyZ3VtZW50cyIsIkZ1bmN0aW9uIiwiU3RyaW5nIiwiTnVtYmVyIiwiRD0K YXRlIiwiUmVnRXhwIl0sZnVuY3Rpb24oZSl7eFsiaXMiK2VdPTNEZnVuY3Rpb24odCl7cmV0dXJu IGYuY2FsbCh0KT0zRD0zRCJbPQpvYmplY3QgIitlKyJdIn19KSx4LmlzQXJndW1lbnRzKGFyZ3Vt ZW50cyl8fCh4LmlzQXJndW1lbnRzPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4hIWUmJiEheC5oYXMo ZSwiY2FsbGVlIil9KSx0eXBlb2YgLy4vIT0zRCJmdW5jdGlvbiImJih4LmlzRnVuY3Rpb249M0Rm dT0KbmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT0zRD0zRCJmdW5jdGlvbiJ9KSx4LmlzRmluaXRl PTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogaXNGaW5pdGUoZSkmJiFpc05hTihwYXJzZUZsb2F0KGUp KX0seC5pc05hTj0zRGZ1bmN0aW9uKGUpe3JldHVybiB4LmlzTnVtYmU9CnIoZSkmJmUhPTNEK2V9 LHguaXNCb29sZWFuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9M0Q9M0Q9M0QhMHx8ZT0zRD0zRD0z RCExfD0KfGYuY2FsbChlKT0zRD0zRCJbb2JqZWN0IEJvb2xlYW5dIn0seC5pc051bGw9M0RmdW5j dGlvbihlKXtyZXR1cm4gZT0zRD0zRD0KPTNEbnVsbH0seC5pc1VuZGVmaW5lZD0zRGZ1bmN0aW9u KGUpe3JldHVybiBlPTNEPTNEPTNEdm9pZCAwfSx4Lmhhcz0zRGZ1bmN0PQppb24oZSx0KXtyZXR1 cm4gbC5jYWxsKGUsdCl9LHgubm9Db25mbGljdD0zRGZ1bmN0aW9uKCl7cmV0dXJuIGUuXz0zRHQs dGhpc309Cix4LmlkZW50aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHgudGltZXM9M0RmdW5j dGlvbihlLHQsbil7dmFyIHI9M0RBcnJheT0KKGUpO2Zvcih2YXIgaT0zRDA7aTxlO2krKylyW2ld PTNEdC5jYWxsKG4saSk7cmV0dXJuIHJ9LHgucmFuZG9tPTNEZnVuY3Rpb24oPQplLHQpe3JldHVy biB0PTNEPTNEbnVsbCYmKHQ9M0RlLGU9M0QwKSxlK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoo dC1lKzEpKX09Cjt2YXIgXz0zRHtlc2NhcGU6eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiIm Z3Q7IiwnIic6IiZxdW90OyIsIiciOiImI3gyNz0KOyIsIi8iOiImI3gyRjsifX07Xy51bmVzY2Fw ZT0zRHguaW52ZXJ0KF8uZXNjYXBlKTt2YXIgRD0zRHtlc2NhcGU6bmV3IFJlZ0V4PQpwKCJbIit4 LmtleXMoXy5lc2NhcGUpLmpvaW4oIiIpKyJdIiwiZyIpLHVuZXNjYXBlOm5ldyBSZWdFeHAoIigi K3gua2V5cyhfLnU9Cm5lc2NhcGUpLmpvaW4oInwiKSsiKSIsImciKX07eC5lYWNoKFsiZXNjYXBl IiwidW5lc2NhcGUiXSxmdW5jdGlvbihlKXt4W2VdPQo9M0RmdW5jdGlvbih0KXtyZXR1cm4gdD0z RD0zRG51bGw/IiI6KCIiK3QpLnJlcGxhY2UoRFtlXSxmdW5jdGlvbih0KXtyZXR1cm49CiBfW2Vd W3RdfSl9fSkseC5yZXN1bHQ9M0RmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0RudWxsKXJldHVybiB2 b2lkIDA7dmFyIG49Cj0zRGVbdF07cmV0dXJuIHguaXNGdW5jdGlvbihuKT9uLmNhbGwoZSk6bn0s eC5taXhpbj0zRGZ1bmN0aW9uKGUpe1QoeC5mdW5jdD0KaW9ucyhlKSxmdW5jdGlvbih0KXt2YXIg bj0zRHhbdF09M0RlW3RdO3gucHJvdG90eXBlW3RdPTNEZnVuY3Rpb24oKXt2YXIgZT0KPTNEW3Ro aXMuX3dyYXBwZWRdO3JldHVybiBvLmFwcGx5KGUsYXJndW1lbnRzKSxGLmNhbGwodGhpcyxuLmFw cGx5KHgsZSkpfX0pPQp9O3ZhciBQPTNEMDt4LnVuaXF1ZUlkPTNEZnVuY3Rpb24oZSl7dmFyIHQ9 M0QrK1ArIiI7cmV0dXJuIGU/ZSt0OnR9LHgudGVtcGw9CmF0ZVNldHRpbmdzPTNEe2V2YWx1YXRl Oi88JShbXHNcU10rPyklPi9nLGludGVycG9sYXRlOi88JT0zRChbXHNcU10rPyklPi9nLD0KZXNj YXBlOi88JS0oW1xzXFNdKz8pJT4vZ307dmFyIEg9M0QvKC4pXi8sQj0zRHsiJyI6IiciLCJcXCI6 IlxcIiwiXHIiOiJyIiwiPQpcbiI6Im4iLCIJIjoidCIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5 IjoidTIwMjkifSxqPTNEL1xcfCd8XHJ8XG58XHR8XHUyMDI9Cjh8XHUyMDI5L2c7eC50ZW1wbGF0 ZT0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtuPTNEeC5kZWZhdWx0cyh7fSxuLHgudGVtcGxhdD0K ZVNldHRpbmdzKTt2YXIgaT0zRG5ldyBSZWdFeHAoWyhuLmVzY2FwZXx8SCkuc291cmNlLChuLmlu dGVycG9sYXRlfHxIKS5zb3VyPQpjZSwobi5ldmFsdWF0ZXx8SCkuc291cmNlXS5qb2luKCJ8Iikr InwkIiwiZyIpLHM9M0QwLG89M0QiX19wKz0zRCciO2UucmVwbGE9CmNlKGksZnVuY3Rpb24odCxu LHIsaSx1KXtyZXR1cm4gbys9M0RlLnNsaWNlKHMsdSkucmVwbGFjZShqLGZ1bmN0aW9uKGUpe3Jl dD0KdXJuIlxcIitCW2VdfSksbiYmKG8rPTNEIicrXG4oKF9fdD0zRCgiK24rIikpPTNEPTNEbnVs bD8nJzpfLmVzY2FwZShfX3QpKStcPQpuJyIpLHImJihvKz0zRCInK1xuKChfX3Q9M0QoIityKyIp KT0zRD0zRG51bGw/Jyc6X190KStcbiciKSxpJiYobys9M0QiJztcbiI9CitpKyJcbl9fcCs9M0Qn Iikscz0zRHUrdC5sZW5ndGgsdH0pLG8rPTNEIic7XG4iLG4udmFyaWFibGV8fChvPTNEIndpdGgo b2JqfD0KfHt9KXtcbiIrbysifVxuIiksbz0zRCJ2YXIgX190LF9fcD0zRCcnLF9faj0zREFycmF5 LnByb3RvdHlwZS5qb2luLHByaW50PTNEPQpmdW5jdGlvbigpe19fcCs9M0RfX2ouY2FsbChhcmd1 bWVudHMsJycpO307XG4iK28rInJldHVybiBfX3A7XG4iO3RyeXtyPTNEbmU9CncgRnVuY3Rpb24o bi52YXJpYWJsZXx8Im9iaiIsIl8iLG8pfWNhdGNoKHUpe3Rocm93IHUuc291cmNlPTNEbyx1fWlm KHQpcmV0dT0Kcm4gcih0LHgpO3ZhciBhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIHIuY2FsbCh0aGlz LGUseCl9O3JldHVybiBhLnNvdXJjZT0zRCJmPQp1bmN0aW9uKCIrKG4udmFyaWFibGV8fCJvYmoi KSsiKXtcbiIrbysifSIsYX0seC5jaGFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CngoZSkuY2hh aW4oKX07dmFyIEY9M0RmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hhaW4/eChlKS5jaGFpbigp OmV9O3gubWl4aT0Kbih4KSxUKFsicG9wIiwicHVzaCIsInJldmVyc2UiLCJzaGlmdCIsInNvcnQi LCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24oPQplKXt2YXIgdD0zRHJbZV07eC5wcm90b3R5 cGVbZV09M0RmdW5jdGlvbigpe3ZhciBuPTNEdGhpcy5fd3JhcHBlZDtyZXR1cm4gdC49CmFwcGx5 KG4sYXJndW1lbnRzKSwoZT0zRD0zRCJzaGlmdCJ8fGU9M0Q9M0Qic3BsaWNlIikmJm4ubGVuZ3Ro PTNEPTNEPTNEMCYmZD0KZWxldGUgblswXSxGLmNhbGwodGhpcyxuKX19KSxUKFsiY29uY2F0Iiwi am9pbiIsInNsaWNlIl0sZnVuY3Rpb24oZSl7dmFyIHQ9Cj0zRHJbZV07eC5wcm90b3R5cGVbZV09 M0RmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcyx0LmFwcGx5KHRoaXMuX3dyYXBwZT0KZCxh cmd1bWVudHMpKX19KSx4LmV4dGVuZCh4LnByb3RvdHlwZSx7Y2hhaW46ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5fY2hhaW49Cj0zRCEwLHRoaXN9LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu X3dyYXBwZWR9fSl9LmNhbGwodGhpcyksZGVmaW5lKCJsaT0KYnMvdW5kZXJzY29yZSIsZnVuY3Rp b24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdHx8ZS5ffX0odGhpcykpPQos ZGVmaW5lKCJ1dGlscy91dGlscyIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5jdGlvbihlKXtmdW5j dGlvbiB0KGUpe3JldHVybiA9CiQoIjxkaXYvPiIpLnRleHQoZSkuaHRtbCgpfWZ1bmN0aW9uIG4o ZSl7dG9wLl9fdXRpbHNfX2dldF9fPTNEdG9wLl9fdXRpbHNfXz0KZ2V0X198fHt9LGUuY2FjaGUm JnRvcC5fX3V0aWxzX19nZXRfX1tlLnVybF0/KGUuc3VjY2VzcyYmZS5zdWNjZXNzKHRvcC5fX3V0 PQppbHNfX2dldF9fW2UudXJsXSksY29uc29sZS5kZWJ1ZygidXRpbHMuanM6OmdldCgpIC0gRmV0 Y2hpbmcgZnJvbSBjYWNoZSBbIis9CmUudXJsKyJdLiIpKTpyKHt1cmw6ZS51cmwsZGF0YTplLmRh dGEsc3VjY2VzczpmdW5jdGlvbih0KXt0b3AuX191dGlsc19fZ2V0Xz0KX1tlLnVybF09M0R0LGUu c3VjY2VzcyYmZS5zdWNjZXNzKHQpfSxlcnJvcjpmdW5jdGlvbih0KXtlLmVycm9yJiZlLmVycm9y KHQpPQp9fSl9ZnVuY3Rpb24gcihlKXt2YXIgdD0zRHtjb250ZW50VHlwZToiYXBwbGljYXRpb24v anNvbiIsdHlwZTplLnR5cGV8fCJHRVQ9CiIsZGF0YTplLmRhdGF8fHt9LHVybDplLnVybH07dC50 eXBlPTNEPTNEIkdFVCJ8fHQudHlwZT0zRD0zRCJERUxFVEUiPyh0LnVybD0KLmluZGV4T2YoIj8i KT0zRD0zRC0xP3QudXJsKz0zRCI/Ijp0LnVybCs9M0QiJiIsdC51cmw9M0R0LnVybCskLnBhcmFt KHQuZGF0PQphKSx0LmRhdGE9M0RudWxsKToodC5kYXRhVHlwZT0zRCJqc29uIix0LnVybD0zRHQu dXJsLHQuZGF0YT0zREpTT04uc3RyaW5naWY9CnkodC5kYXRhKSksJC5hamF4KHQpLmRvbmUoZnVu Y3Rpb24odCl7aWYodHlwZW9mIHQ9M0Q9M0Qic3RyaW5nIil0cnl7dD0zRHQucj0KZXBsYWNlKCJJ bmZpbml0eSwiLCciSW5maW5pdHkiLCcpLHQ9M0RqUXVlcnkucGFyc2VKU09OKHQpfWNhdGNoKG4p e2NvbnNvbGUuPQpkZWJ1ZyhuKX1lLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0pLmZhaWwoZnVuY3Rp b24odCl7dmFyIG49M0RudWxsO3RyeXtuPTNEalE9CnVlcnkucGFyc2VKU09OKHQucmVzcG9uc2VU ZXh0KX1jYXRjaChyKXtuPTNEdC5yZXNwb25zZVRleHR9ZS5lcnJvciYmZS5lcnJvcj0KKG4sdCl9 KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49M0QkKCc8ZGl2IGNsYXNzPTNEIicrZSsnIj48L2Rpdj4n KTtuLmFwcGVuZFRvPQooIjplcSgwKSIpO3ZhciByPTNEbi5jc3ModCk7cmV0dXJuIG4ucmVtb3Zl KCkscn1mdW5jdGlvbiBzKGUpeyQoJ2xpbmtbaHJlZl49Cj0zRCInK2UrJyJdJykubGVuZ3RofHwk KCc8bGluayBocmVmPTNEIicrZ2FsYXh5X2NvbmZpZy5yb290K2UrJyIgcmVsPTNEInN0eT0KbGVz aGVldCI+JykuYXBwZW5kVG8oImhlYWQiKX1mdW5jdGlvbiBvKHQsbil7cmV0dXJuIHQ/ZS5kZWZh dWx0cyh0LG4pOm59ZnVuPQpjdGlvbiB1KGUsdCl7dmFyIG49M0QiIjtpZihlPj0zRDFlMTEpZS89 M0QxZTExLG49M0QiVEIiO2Vsc2UgaWYoZT49M0QxZTgpZS89Cj0zRDFlOCxuPTNEIkdCIjtlbHNl IGlmKGU+PTNEMWU1KWUvPTNEMWU1LG49M0QiTUIiO2Vsc2UgaWYoZT49M0QxMDApZS89M0QxMD0K MCxuPTNEIktCIjtlbHNle2lmKCEoZT4wKSlyZXR1cm4iPHN0cm9uZz4tPC9zdHJvbmc+IjtlKj0z RDEwLG49M0QiYiJ9dmFyIHI9Cj0zRE1hdGgucm91bmQoZSkvMTA7cmV0dXJuIHQ/cisiICIrbjoi PHN0cm9uZz4iK3IrIjwvc3Ryb25nPiAiK259ZnVuY3Rpb24gYT0KKCl7cmV0dXJuIngiK01hdGgu cmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9 Cj0zRCQoIjxwPjwvcD4iKTtyZXR1cm4gdC5hcHBlbmQoZSksdH1mdW5jdGlvbiBsKCl7dmFyIGU9 M0RuZXcgRGF0ZSx0PTNEKGUuZz0KZXRIb3VycygpPDEwPyIwIjoiIikrZS5nZXRIb3VycygpLG49 M0QoZS5nZXRNaW51dGVzKCk8MTA/IjAiOiIiKStlLmdldE1pbnV0PQplcygpLHI9M0RlLmdldERh dGUoKSsiLyIrKGUuZ2V0TW9udGgoKSsxKSsiLyIrZS5nZXRGdWxsWWVhcigpKyIsICIrdCsiOiIr bjs9CnJldHVybiByfXJldHVybntjc3NMb2FkRmlsZTpzLGNzc0dldEF0dHJpYnV0ZTppLGdldDpu LG1lcmdlOm8sYnl0ZXNUb1N0cmluZz0KOnUsdXVpZDphLHRpbWU6bCx3cmFwOmYscmVxdWVzdDpy LHNhbml0aXplOnR9fSksZGVmaW5lKCJtdmMvdWkvdWktcG9ydGxldCIsPQpbInV0aWxzL3V0aWxz Il0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7dmlzaWJsZTohMSxv cHRpb249CnNEZWZhdWx0Ont0aXRsZToiIixpY29uOiIiLGJ1dHRvbnM6bnVsbCxib2R5Om51bGws c2Nyb2xsYWJsZTohMCxub3BhZGRpbmc6IT0KMSxvcGVyYXRpb25zOm51bGwscGxhY2VtZW50OiJi b3R0b20iLGNsczoidWktcG9ydGxldCIsb3BlcmF0aW9uc19mbHQ6InJpZ2h0PQoifSwkdGl0bGU6 bnVsbCwkY29udGVudDpudWxsLCRidXR0b25zOm51bGwsJG9wZXJhdGlvbnM6bnVsbCxpbml0aWFs aXplOmZ1bmM9CnRpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0Rl ZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLj0KX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRo aXMuJGNvbnRlbnQ9M0R0aGlzLiRlbC5maW5kKCIjY29udGVudCIpLHRoaXMuJHRpPQp0bGU9M0R0 aGlzLiRlbC5maW5kKCIjcG9ydGxldC10aXRsZS10ZXh0Iik7dmFyIG49M0R0aGlzLiRlbC5maW5k KCIjcG9ydGxldC09CmNvbnRlbnQiKTt0aGlzLm9wdGlvbnMuc2Nyb2xsYWJsZT9uLmFkZENsYXNz KCJzY3JvbGwiKTp0aGlzLm9wdGlvbnMudGl0bGU/bj0KLmFkZENsYXNzKCJuby1zY3JvbGwiKTpu LmFkZENsYXNzKCJuby1zY3JvbGwtbm8tdGl0bGUiKSx0aGlzLm9wdGlvbnMubm9wYWRkPQppbmcm JihuLmNzcygicGFkZGluZyIsIjBweCIpLHRoaXMuJGNvbnRlbnQuY3NzKCJwYWRkaW5nIiwiMHB4 IikpLHRoaXMuJGJ1dHQ9Cm9ucz0zRCQodGhpcy5lbCkuZmluZCgiI2J1dHRvbnMiKTtpZih0aGlz Lm9wdGlvbnMuYnV0dG9ucyl7dmFyIHI9M0R0aGlzOyQuZT0KYWNoKHRoaXMub3B0aW9ucy5idXR0 b25zLGZ1bmN0aW9uKGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJGJ1dHRvbnMuYXBwZW5kPQoo dC4kZWwpfSl9ZWxzZSB0aGlzLiRidXR0b25zLnJlbW92ZSgpO3RoaXMuJG9wZXJhdGlvbnM9M0Qk KHRoaXMuZWwpLmZpbmQoIiM9Cm9wZXJhdGlvbnMiKTtpZih0aGlzLm9wdGlvbnMub3BlcmF0aW9u cyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMubz0KcGVyYXRpb25zLGZ1bmN0aW9u KGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJG9wZXJhdGlvbnMuYXBwZW5kKHQuJGVsKX0pfXRo PQppcy5vcHRpb25zLmJvZHkmJnRoaXMuYXBwZW5kKHRoaXMub3B0aW9ucy5ib2R5KX0sYXBwZW5k OmZ1bmN0aW9uKHQsbil7bj90aGk9CnMuJGNvbnRlbnQuYXBwZW5kKHQpOnRoaXMuJGNvbnRlbnQu YXBwZW5kKGUud3JhcCh0KSl9LGNvbnRlbnQ6ZnVuY3Rpb24oKXtyZT0KdHVybiB0aGlzLiRjb250 ZW50fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxl PTNEPQohMH0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmZhZGVPdXQoImZhc3QiKSx0aGlzLnZp c2libGU9M0QhMX0sZW5hYmxlQnV0dG89Cm46ZnVuY3Rpb24oZSl7dGhpcy4kYnV0dG9ucy5maW5k KCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOj0KZnVuY3Rpb24oZSl7 dGhpcy4kYnV0dG9ucy5maW5kKCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITApfSxoaWRlT3BlcmF0 aW9uOmZ1PQpuY3Rpb24oZSl7dGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitlKS5oaWRlKCl9LHNo b3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGg9CmlzLiRvcGVyYXRpb25zLmZpbmQoIiMiK2UpLnNo b3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLj0KJG9wZXJhdGlv bnMuZmluZCgiIyIrZSk7bi5vZmYoImNsaWNrIiksbi5vbigiY2xpY2siLHQpfSx0aXRsZTpmdW5j dGlvbihlKXt2PQphciB0PTNEdGhpcy4kdGl0bGU7cmV0dXJuIGUmJnQuaHRtbChlKSx0Lmh0bWwo KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciA9CnQ9M0QnPGRpdiBpZD0zRCInK2UuaWQrJyIg Y2xhc3M9M0QiJytlLmNscysnIj4nO3JldHVybiBlLnRpdGxlJiYodCs9M0QnPGRpdj0KIGlkPTNE InBvcnRsZXQtaGVhZGVyIiBjbGFzcz0zRCJwb3J0bGV0LWhlYWRlciI+PGRpdiBpZD0zRCJvcGVy YXRpb25zIiBzdHlsPQplPTNEImZsb2F0OiAnK2Uub3BlcmF0aW9uc19mbHQrJzsiPjwvZGl2Picr JzxkaXYgY2xhc3M9M0QicG9ydGxldC10aXRsZSI+Jyw9CmUuaWNvbiYmKHQrPTNEJzxpIGNsYXNz PTNEImljb24gZmEgJytlLmljb24rJyI+Jm5ic3A7PC9pPicpLHQrPTNEJzxzcGFuIGlkPQo9M0Qi cG9ydGxldC10aXRsZS10ZXh0IiBjbGFzcz0zRCJwb3J0bGV0LXRpdGxlLXRleHQiPicrZS50aXRs ZSsiPC9zcGFuPiIrIjw9Ci9kaXY+IisiPC9kaXY+IiksdCs9M0QnPGRpdiBpZD0zRCJwb3J0bGV0 LWNvbnRlbnQiIGNsYXNzPTNEInBvcnRsZXQtY29udGVudD0KIj4nLGUucGxhY2VtZW50PTNEPTNE InRvcCImJih0Kz0zRCc8ZGl2IGlkPTNEImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMiPjwvPQpk aXY+JyksdCs9M0QnPGRpdiBpZD0zRCJjb250ZW50IiBjbGFzcz0zRCJjb250ZW50Ij48L2Rpdj4n LGUucGxhY2VtZW50PTNEPQo9M0QiYm90dG9tIiYmKHQrPTNEJzxkaXYgaWQ9M0QiYnV0dG9ucyIg Y2xhc3M9M0QiYnV0dG9ucyI+PC9kaXY+JyksdCs9M0QiPC89CmRpdj48L2Rpdj4iLHR9fSk7cmV0 dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1zZWxlY3QtZGVmYXVsdCIsWyJ1dGlscz0K L3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9u c0RlZmF1bHQ6e2lkOiIiLGNsPQpzOiIiLGVycm9yX3RleHQ6Ik5vIGRhdGEgYXZhaWxhYmxlIix2 aXNpYmxlOiEwLHdhaXQ6ITEsbXVsdGlwbGU6ITEsc2VhcmNoYWI9CmxlOiExfSxpbml0aWFsaXpl OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0 KT0KLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRz ZWxlY3Q9M0R0aGlzLiRlbC5maW5kPQooIi5zZWxlY3QiKSx0aGlzLiRpY29uPTNEdGhpcy4kZWwu ZmluZCgiLmljb24iKSx0aGlzLiRidXR0b249M0R0aGlzLiRlbC5maW49CmQoIi5idXR0b24iKSx0 aGlzLm9wdGlvbnMubXVsdGlwbGU/KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWx0aXBsZSIsITApLHRo aXMuJD0Kc2VsZWN0LmFkZENsYXNzKCJ1aS1zZWxlY3QtbXVsdGlwbGUiKSx0aGlzLiRpY29uLnJl bW92ZSgpKTp0aGlzLiRlbC5hZGRDbGFzPQpzKCJ1aS1zZWxlY3QiKSx0aGlzLnVwZGF0ZSh0aGlz Lm9wdGlvbnMuZGF0YSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGU9CmZpbmVkJiZ0aGlz LnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuaGlk ZSgpLHRoaT0Kcy5vcHRpb25zLndhaXQ/dGhpcy53YWl0KCk6dGhpcy5zaG93KCk7dmFyIG49M0R0 aGlzO3RoaXMuJHNlbGVjdC5vbigiY2hhbmdlPQoiLGZ1bmN0aW9uKCl7bi5fY2hhbmdlKCl9KSx0 aGlzLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hhbmdlKCl9KX0sdmFsdWU9CjpmdW5jdGlv bihlKXtyZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGUpLHRoaXMu JHNlbGVjdC5zZT0KbGVjdDImJnRoaXMuJHNlbGVjdC5zZWxlY3QyKCJ2YWwiLGUpKSx0aGlzLiRz ZWxlY3QudmFsKCl9LGZpcnN0OmZ1bmN0aW9uKCl7PQp2YXIgZT0zRHRoaXMuJHNlbGVjdC5maW5k KCJvcHRpb24iKTtyZXR1cm4gZS5sZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0sdmE9CmxpZGF0 ZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy52YWx1ZSgpO2UgaW5zdGFuY2VvZiBBcnJheXx8KGU9 M0RbZV0pO2Zvcih2YT0KciB0IGluIGUpaWYoW251bGwsIm51bGwiLHVuZGVmaW5lZF0uaW5kZXhP ZihlW3RdKT4tMSlyZXR1cm4hMTtyZXR1cm4hMH0sdGV4PQp0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMuJHNlbGVjdC5maW5kKCJvcHRpb246c2VsZWN0ZWQiKS50ZXh0KCl9LHNob3c6ZnVuY3Q9Cmlv bigpe3RoaXMudW53YWl0KCksdGhpcy4kc2VsZWN0LnNob3coKSx0aGlzLiRlbC5zaG93KCl9LGhp ZGU6ZnVuY3Rpb24oKXt0aD0KaXMuJGVsLmhpZGUoKX0sd2FpdDpmdW5jdGlvbigpe3RoaXMuJGlj b24ucmVtb3ZlQ2xhc3MoKSx0aGlzLiRpY29uLmFkZENsYXNzPQooImZhIGZhLXNwaW5uZXIgZmEt c3BpbiIpfSx1bndhaXQ6ZnVuY3Rpb24oKXt0aGlzLiRpY29uLnJlbW92ZUNsYXNzKCksdGhpcy49 CiRpY29uLmFkZENsYXNzKCJmYSBmYS1jYXJldC1kb3duIil9LGRpc2FibGVkOmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuJHNlbGVjdD0KLmlzKCI6ZGlzYWJsZWQiKX0sZW5hYmxlOmZ1bmN0aW9uKCl7 dGhpcy4kc2VsZWN0LnByb3AoImRpc2FibGVkIiwhMSl9LGRpc2FiPQpsZTpmdW5jdGlvbigpe3Ro aXMuJHNlbGVjdC5wcm9wKCJkaXNhYmxlZCIsITApfSxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy4kc2Vs ZWM9CnQuYXBwZW5kKHRoaXMuX3RlbXBsYXRlT3B0aW9uKGUpKSx0aGlzLl9yZWZyZXNoKCl9LGRl bDpmdW5jdGlvbihlKXt0aGlzLiRzZT0KbGVjdC5maW5kKCJvcHRpb25bdmFsdWU9M0QiK2UrIl0i KS5yZW1vdmUoKSx0aGlzLiRzZWxlY3QudHJpZ2dlcigiY2hhbmdlIiksPQp0aGlzLl9yZWZyZXNo KCl9LHVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuJHNlbGVjdC52YWwoKTt0aGlzLiRz ZWxlY3Q9Ci5maW5kKCJvcHRpb24iKS5yZW1vdmUoKTtmb3IodmFyIG4gaW4gZSl0aGlzLiRzZWxl Y3QuYXBwZW5kKHRoaXMuX3RlbXBsYXRlTz0KcHRpb24oZVtuXSkpO3RoaXMuX3JlZnJlc2goKSx0 aGlzLiRzZWxlY3QudmFsKHQpLHRoaXMuJHNlbGVjdC52YWwoKXx8dGhpcy4kPQpzZWxlY3QudmFs KHRoaXMuZmlyc3QoKSksdGhpcy5vcHRpb25zLnNlYXJjaGFibGUmJih0aGlzLiRidXR0b24uaGlk ZSgpLHRoaXM9Ci4kc2VsZWN0LnNlbGVjdDIoImRlc3Ryb3kiKSx0aGlzLiRzZWxlY3Quc2VsZWN0 MigpKX0sc2V0T25DaGFuZ2U6ZnVuY3Rpb24oZT0KKXt0aGlzLm9wdGlvbnMub25jaGFuZ2U9M0Rl fSxleGlzdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHNlbGVjdC5maW5kKCdvPQpwdGlvblt2 YWx1ZT0zRCInK2UrJyJdJykubGVuZ3RoPjB9LF9jaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLm9wdGlv bnMub25jaGFuZ2U9CiYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKHRoaXMuJHNlbGVjdC52YWwoKSl9 LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy4kc2VsZT0KY3QuZmluZCgib3B0aW9uW3ZhbHVlPTNE bnVsbF0iKS5yZW1vdmUoKTt2YXIgZT0zRHRoaXMuJHNlbGVjdC5maW5kKCJvcHRpb24iPQopLmxl bmd0aDtlPTNEPTNEMD8odGhpcy5kaXNhYmxlKCksdGhpcy4kc2VsZWN0LmFwcGVuZCh0aGlzLl90 ZW1wbGF0ZU9wdGlvbig9Cnt2YWx1ZToibnVsbCIsbGFiZWw6dGhpcy5vcHRpb25zLmVycm9yX3Rl eHR9KSkpOnRoaXMuZW5hYmxlKCl9LF90ZW1wbGF0ZU9wdD0KaW9uOmZ1bmN0aW9uKGUpe3JldHVy bic8b3B0aW9uIHZhbHVlPTNEIicrZS52YWx1ZSsnIj4nK2UubGFiZWwrIjwvb3B0aW9uPiJ9PQos X3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIj4nKyc8c2Vs ZWN0IGlkPTNEInNlbGVjdCI9CiBjbGFzcz0zRCJzZWxlY3QgJytlLmNscysiICIrZS5pZCsnIj48 L3NlbGVjdD4nKyc8ZGl2IGNsYXNzPTNEImJ1dHRvbiI+JysnPD0KaSBjbGFzcz0zRCJpY29uIi8+ JysiPC9kaXY+IisiPC9kaXY+In19KTtyZXR1cm57Vmlldzp0fX0pLGRlZmluZSgibXZjL3VpL3Vp PQotc2xpZGVyIixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5W aWV3LmV4dGVuZCh7b3B0aW9uc0Q9CmVmYXVsdDp7bWluOm51bGwsbWF4Om51bGwsc3RlcDpudWxs LHByZWNpc2U6ITEsc3BsaXQ6MWU0fSxpbml0aWFsaXplOmZ1bmN0aT0Kb24odCl7dmFyIG49M0R0 aGlzO3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNl dEVsPQplbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLnVzZXNsaWRlcj0z RHRoaXMub3B0aW9ucy5tYXghPTNEPQo9M0RudWxsJiZ0aGlzLm9wdGlvbnMubWluIT0zRD0zRG51 bGwmJnRoaXMub3B0aW9ucy5tYXg+dGhpcy5vcHRpb25zLm1pbix0aGk9CnMub3B0aW9ucy5zdGVw PTNEPTNEPTNEbnVsbCYmKHRoaXMub3B0aW9ucy5zdGVwPTNEMSx0aGlzLm9wdGlvbnMucHJlY2lz ZSYmdD0KaGlzLnVzZXNsaWRlciYmKHRoaXMub3B0aW9ucy5zdGVwPTNEKHRoaXMub3B0aW9ucy5t YXgtdGhpcy5vcHRpb25zLm1pbikvdGhpPQpzLm9wdGlvbnMuc3BsaXQpKSx0aGlzLnVzZXNsaWRl cj8odGhpcy4kc2xpZGVyPTNEdGhpcy4kZWwuZmluZCgiI3NsaWRlciIpLHQ9Cmhpcy4kc2xpZGVy LnNsaWRlcih0aGlzLm9wdGlvbnMpLHRoaXMuJHNsaWRlci5vbigic2xpZGUiLGZ1bmN0aW9uKGUs dCl7bi52YT0KbHVlKHQudmFsdWUpfSkpOnRoaXMuJGVsLmZpbmQoIi51aS1mb3JtLXNsaWRlci10 ZXh0IikuY3NzKCJ3aWR0aCIsIjEwMCUiKSx0PQpoaXMuJHRleHQ9M0R0aGlzLiRlbC5maW5kKCIj dGV4dCIpLHRoaXMub3B0aW9ucy52YWx1ZSE9M0Q9M0R1bmRlZmluZWQmJnRoaXM9Ci52YWx1ZSh0 aGlzLm9wdGlvbnMudmFsdWUpLHRoaXMuJHRleHQub24oImNoYW5nZSIsZnVuY3Rpb24oKXtuLnZh bHVlKCQodGhpcz0KKS52YWwoKSl9KTt2YXIgcj0zRFtdO3RoaXMuJHRleHQub24oImtleXVwIixm dW5jdGlvbihlKXtyW2Uud2hpY2hdPTNEITF9KSx0PQpoaXMuJHRleHQub24oImtleWRvd24iLGZ1 bmN0aW9uKGUpe3ZhciB0PTNEZS53aGljaDtyW3RdPTNEITAsdD0zRD0zRDh8fHQ9M0Q9Cj0zRDl8 fHQ9M0Q9M0QxM3x8dD0zRD0zRDM3fHx0PTNEPTNEMzl8fHQ+PTNENDgmJnQ8PTNENTd8fHQ9M0Q9 M0QxOTAmJiQodGhpcz0KKS52YWwoKS5pbmRleE9mKCIuIik9M0Q9M0QtMSYmbi5vcHRpb25zLnBy ZWNpc2V8fHQ9M0Q9M0QxODkmJiQodGhpcykudmFsKCkuPQppbmRleE9mKCItIik9M0Q9M0QtMXx8 cls5MV18fHJbMTddfHxldmVudC5wcmV2ZW50RGVmYXVsdCgpfSl9LHZhbHVlOmZ1bmN0aW89Cm4o ZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYoaXNOYU4oZSkmJihlPTNEMCksdGhpcy5vcHRp b25zLm1heCE9M0Q9M0RudT0KbGwmJihlPTNETWF0aC5taW4oZSx0aGlzLm9wdGlvbnMubWF4KSks dGhpcy5vcHRpb25zLm1pbiE9M0Q9M0RudWxsJiYoZT0zRE1hPQp0aC5tYXgoZSx0aGlzLm9wdGlv bnMubWluKSksdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UoZSk9 Cix0aGlzLiRzbGlkZXImJnRoaXMuJHNsaWRlci5zbGlkZXIoInZhbHVlIixlKSx0aGlzLiR0ZXh0 LnZhbChlKSksdGhpcy4kdGV4dD0KLnZhbCgpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJu JzxkaXYgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEInVpLWZvcm0tPQpzbGlkZXIiPicrJzxpbnB1 dCBpZD0zRCJ0ZXh0IiB0eXBlPTNEInRleHQiIGNsYXNzPTNEInVpLWZvcm0tc2xpZGVyLXRleHQi Lz49CicrJzxkaXYgaWQ9M0Qic2xpZGVyIiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlci1lbGVtZW50 Ii8+JysiPC9kaXY+In19KTtyZXR1cj0KbntWaWV3OnR9fSksZGVmaW5lKCJtdmMvdWkvdWktb3B0 aW9ucyIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEPQpCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnNEZWZhdWx0PTNEe3Zp c2libGU9CjohMCxkYXRhOltdLGlkOmUudXVpZCgpLGVycm9yX3RleHQ6Ik5vIGRhdGEgYXZhaWxh YmxlLiIsd2FpdF90ZXh0OiJQbGVhc2Ugdz0KYWl0Li4uIn0sdGhpcy5vcHRpb25zPTNEZS5tZXJn ZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgiPGRpPQp2Lz4iKSx0aGlz LiRtZXNzYWdlPTNEJCgiPGRpdi8+IiksdGhpcy4kb3B0aW9ucz0zRCQodGhpcy5fdGVtcGxhdGUo dCkpLHRoaXM9Ci4kZWwuYXBwZW5kKHRoaXMuJG1lc3NhZ2UpLHRoaXMuJGVsLmFwcGVuZCh0aGlz LiRvcHRpb25zKSx0aGlzLm9wdGlvbnMudmlzaT0KYmxlfHx0aGlzLiRlbC5oaWRlKCksdGhpcy51 cGRhdGUodGhpcy5vcHRpb25zLmRhdGEpLHRoaXMub3B0aW9ucy52YWx1ZSE9M0Q9Cj0zRHVuZGVm aW5lZCYmdGhpcy52YWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpO3ZhciBuPTNEdGhpczt0aGlzLm9u KCJjaGFuZ2UiLD0KZnVuY3Rpb24oKXtuLl9jaGFuZ2UoKX0pfSx1cGRhdGU6ZnVuY3Rpb24oZSl7 dmFyIHQ9M0R0aGlzLl9nZXRWYWx1ZSgpO3RoaXMuPQokb3B0aW9ucy5lbXB0eSgpO2lmKHRoaXMu X3RlbXBsYXRlT3B0aW9ucyl0aGlzLiRvcHRpb25zLmFwcGVuZCh0aGlzLl90ZW1wbGE9CnRlT3B0 aW9ucyhlKSk7ZWxzZSBmb3IodmFyIG4gaW4gZSl7dmFyIHI9M0QkKHRoaXMuX3RlbXBsYXRlT3B0 aW9uKGVbbl0pKTtyLj0KYWRkQ2xhc3MoInVpLW9wdGlvbiIpLHRoaXMuJG9wdGlvbnMuYXBwZW5k KHIpfXZhciBpPTNEdGhpczt0aGlzLiRlbC5maW5kKCJpPQpucHV0Iikub24oImNoYW5nZSIsZnVu Y3Rpb24oKXtpLnZhbHVlKGkuX2dldFZhbHVlKCkpLGkuX2NoYW5nZSgpfSksdGhpcy5fcmU9CmZy ZXNoKCksdGhpcy52YWx1ZSh0KX0sdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSE9M0Q9M0R1bmRlZmlu ZWQpe2UgaW5zdGFuY2VvZj0KIEFycmF5fHwoZT0zRFtlXSksdGhpcy4kZWwuZmluZCgiaW5wdXQi KS5wcm9wKCJjaGVja2VkIiwhMSk7Zm9yKHZhciB0IGluIGUpPQp0aGlzLiRlbC5maW5kKCdpbnB1 dFt2YWx1ZT0zRCInK2VbdF0rJyJdJykuZmlyc3QoKS5wcm9wKCJjaGVja2VkIiwhMCl9cmV0dXI9 Cm4gdGhpcy5fZ2V0VmFsdWUoKX0sZXhpc3RzOmZ1bmN0aW9uKGUpe2lmKGUhPTNEPTNEdW5kZWZp bmVkKXtlIGluc3RhbmNlb2YgQT0KcnJheXx8KGU9M0RbZV0pO2Zvcih2YXIgdCBpbiBlKWlmKHRo aXMuJGVsLmZpbmQoJ2lucHV0W3ZhbHVlPTNEIicrZVt0XSsnIl0nPQopLmxlbmd0aD4wKXJldHVy biEwfXJldHVybiExfSxmaXJzdDpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy4kZWwuZmluZCgiaW5w dXQ9CiIpO3JldHVybiBlLmxlbmd0aD4wP2UudmFsKCk6dW5kZWZpbmVkfSx2YWxpZGF0ZTpmdW5j dGlvbigpe3ZhciBlPTNEdGhpcy52YT0KbHVlKCk7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRFtl XSk7Zm9yKHZhciB0IGluIGUpaWYoW251bGwsIm51bGwiLHVuZGVmaW5lPQpkXS5pbmRleE9mKGVb dF0pPi0xKXJldHVybiExO3JldHVybiEwfSx3YWl0OmZ1bmN0aW9uKCl7dGhpcy5fc2l6ZSgpPTNE PTNEMCY9CiYodGhpcy5fbWVzc2FnZVNob3codGhpcy5vcHRpb25zLndhaXRfdGV4dCwiaW5mbyIp LHRoaXMuJG9wdGlvbnMuaGlkZSgpKX0sdT0KbndhaXQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXNzYWdl SGlkZSgpLHRoaXMuX3JlZnJlc2goKX0sX2NoYW5nZTpmdW5jdGlvbigpe3RoPQppcy5vcHRpb25z Lm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy5fZ2V0VmFsdWUoKSl9LF9yZWZy ZXNoOmZ1bmM9CnRpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwPyh0aGlzLl9tZXNzYWdlU2hvdyh0 aGlzLm9wdGlvbnMuZXJyb3JfdGV4dCwiZGFuZz0KZXIiKSx0aGlzLiRvcHRpb25zLmhpZGUoKSk6 KHRoaXMuX21lc3NhZ2VIaWRlKCksdGhpcy4kb3B0aW9ucy5jc3MoImRpc3BsYXkiPQosImlubGlu ZS1ibG9jayIpKX0sX2dldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLiRlbC5maW5kKCI6 Y2hlY2tlZCIpO2k9CmYoZS5sZW5ndGg9M0Q9M0QwKXJldHVybiJudWxsIjtpZih0aGlzLm9wdGlv bnMubXVsdGlwbGUpe3ZhciB0PTNEW107cmV0dXJuID0KZS5lYWNoKGZ1bmN0aW9uKCl7dC5wdXNo KCQodGhpcykudmFsKCkpfSksdH1yZXR1cm4gZS52YWwoKX0sX3NpemU6ZnVuY3Rpb24oPQope3Jl dHVybiB0aGlzLiRlbC5maW5kKCIudWktb3B0aW9uIikubGVuZ3RofSxfbWVzc2FnZVNob3c6ZnVu Y3Rpb24oZSx0KXt0aGk9CnMuJG1lc3NhZ2Uuc2hvdygpLHRoaXMuJG1lc3NhZ2UucmVtb3ZlQ2xh c3MoKSx0aGlzLiRtZXNzYWdlLmFkZENsYXNzKCJ1aS1tZT0Kc3NhZ2UgYWxlcnQgYWxlcnQtIit0 KSx0aGlzLiRtZXNzYWdlLmh0bWwoZSl9LF9tZXNzYWdlSGlkZTpmdW5jdGlvbigpe3RoaXMuPQok bWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNE InVpLW9wdGlvbnMiLz4nfX09Ciksbj0zRHt9O24uVmlldz0zRHQuZXh0ZW5kKHtpbml0aWFsaXpl OmZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLmluaXRpYWxpemUuYz0KYWxsKHRoaXMsZSl9LF90ZW1w bGF0ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48aW5wdXQgdHlwZT0zRCJyYWRpbyIg PQpuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+Jytl LmxhYmVsKyI8YnI+IisiPC9kaXY9Cj4ifX0pO3ZhciByPTNEe307ci5WaWV3PTNEdC5leHRlbmQo e2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7ZS5tdWx0aXBsZT0zRCEwLD0KdC5wcm90b3R5cGUuaW5p dGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4n PGRpPQp2PjxpbnB1dCB0eXBlPTNEImNoZWNrYm94IiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlk KyciIHZhbHVlPTNEIicrZS52YWx1ZSs9CiciLz4nK2UubGFiZWwrIjxicj4iKyI8L2Rpdj4ifX0p O3ZhciBpPTNEe307cmV0dXJuIGkuVmlldz0zRHQuZXh0ZW5kKHtpbml0aT0KYWxpemU6ZnVuY3Rp b24oZSl7dC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LHZhbHVlOmZ1bmN0aW9u KGUpe3JlPQp0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kZWwuZmluZCgiaW5wdXQiKS5w cm9wKCJjaGVja2VkIiwhMSksdGhpcy4kZWw9Ci5maW5kKCJsYWJlbCIpLnJlbW92ZUNsYXNzKCJh Y3RpdmUiKSx0aGlzLiRlbC5maW5kKCdbdmFsdWU9M0QiJytlKyciXScpLnBybz0KcCgiY2hlY2tl ZCIsITApLmNsb3Nlc3QoImxhYmVsIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSx0aGlzLl9nZXRWYWx1 ZSgpfSxfdGVtPQpwbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGFiZWwgY2xhc3M9 M0QiYnRuIGJ0bi1kZWZhdWx0Ij4nO3JldHVybiA9CmUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNE ImZhICcrZS5pY29uKyciLz4nKSx0Kz0zRCc8aW5wdXQgdHlwZT0zRCJyYWRpbyIgbj0KYW1lPTNE IicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIj4nK2UubGFiZWwrIjwv bGFiZWw+Iix0fSxfPQp0ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEImJ0 bi1ncm91cCB1aS1yYWRpb2J1dHRvbiIgZGF0YS10b2c9CmdsZT0zRCJidXR0b25zIi8+J319KSx7 QmFzZTp0LFJhZGlvOm4sUmFkaW9CdXR0b246aSxDaGVja2JveDpyfX0pLGRlZmluZSgibT0KdmMv dWkvdWktZHJpbGxkb3duIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW9wdGlvbnMiXSxmdW5j dGlvbihlLHQpe3ZhciBuPQo9M0R0LkJhc2UuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUp e3RoaXMuZGlzcGxheT0zRGUuZGlzcGxheXx8ImNoZWNrYm89CngiLGUubXVsdGlwbGU9M0R0aGlz LmRpc3BsYXk9M0Q9M0QiY2hlY2tib3giLHQuQmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYT0K bGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4nPGRpdj48 aW5wdXQgbmFtZT0zRCInK3RoPQppcy5vcHRpb25zLmlkKyciIGNsYXNzPTNEInVpLW9wdGlvbiIg dHlwZT0zRCInK3RoaXMuZGlzcGxheSsnIiB2YWx1ZT0zRCInK3Q9CisnIj4nK2UrIjxkaXYvPiJ9 LF90ZW1wbGF0ZU9wdGlvbnM6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe2Z1bmN0aW9uIG4o bj0KKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUucmVtb3ZlQ2xhc3MoInRvZ2dsZS1leHBhbmQiKSxl LmFkZENsYXNzKCJ0b2dnbGUiKSxlPQouaXNfZXhwYW5kZWQ9M0QhMCk6KHQuaGlkZSgpLGUucmVt b3ZlQ2xhc3MoInRvZ2dsZSIpLGUuYWRkQ2xhc3MoInRvZ2dsZS1leHA9CmFuZCIpLGUuaXNfZXhw YW5kZWQ9M0QhMSl9ZS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bighZS5pc19leHBhbmRlZCl9KX1m dW5jdD0KaW9uIHIoZSxzKXtmb3IoaSBpbiBzKXt2YXIgbz0zRHNbaV0sdT0zRG8ub3B0aW9ucy5s ZW5ndGg+MCxhPTNEJCgiPGRpdi8+Iik7PQppZih1KXt2YXIgZj0zRCQoJzxzcGFuIGNsYXNzPTNE InVpLWRyaWxsZG93bi1idXR0b24gZm9ybS10b2dnbGUgaWNvbi1idXR0b249CiB0b2dnbGUtZXhw YW5kIiBzdHlsZT0zRCJwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogMnB4OyIvPicpLGw9M0QkKCI8 ZGl2Lz4iKT0KO2wuYXBwZW5kKGYpLGwuYXBwZW5kKHQuX3RlbXBsYXRlT3B0aW9uKG8ubmFtZSxv LnZhbHVlKSksYS5hcHBlbmQobCk7dmFyIGM9Cj0zRCQoJzxkaXYgc3R5bGU9M0QiZGlzcGxheTog bm9uZTsgbWFyZ2luLWxlZnQ6IDI1cHg7Ii8+Jyk7cihjLG8ub3B0aW9ucyksYT0KLmFwcGVuZChj KSxuKGYsYyl9ZWxzZSBhLmFwcGVuZCh0Ll90ZW1wbGF0ZU9wdGlvbihvLm5hbWUsby52YWx1ZSkp O2UuYXBwZW5kPQooYSl9fXZhciB0PTNEdGhpcyxzPTNEJCgiPGRpdi8+Iik7cmV0dXJuIHIocyxl KSxzfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmU9CnR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1vcHRp b25zIGRyaWxsZG93bi1jb250YWluZXIiIGlkPTNEIicrZS5pZCsnIi8+J319KTtyZT0KdHVybntW aWV3Om59fSksZGVmaW5lKCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLFsidXRpbHMvdXRpbHMiXSxm dW5jdGlvbihlKXtyPQpldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6 e2lkOiIiLHRpdGxlOiIiLGZsb2F0aW5nOiJyaWdodCI9CixpY29uOm51bGwsb25jbGljazpudWxs LGNsczoidWktYnV0dG9uLWljb24gdWktYnV0dG9uLW1lbnUiLHRvb2x0aXA6IiIsdGFyZz0KZXQ6 IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHZpc2libGU6ITAsdGFnOiIifSwkbWVudTpudWxsLGlu aXRpYWxpemU6ZnVuY3RpPQpvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRp b25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KCQodGhpcy49Cl90ZW1wbGF0ZSh0aGlzLm9wdGlv bnMpKSk7dmFyIG49M0QkKHRoaXMuZWwpLmZpbmQoIi5yb290Iikscj0zRHRoaXM7bi5vbigiYz0K bGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXAiKS5oaWRlKCksZS5wcmV2ZW50RGVmYXVsdCgp LHIub3B0aW9ucy5vbmNsaWNrPQomJnIub3B0aW9ucy5vbmNsaWNrKCl9KSx0aGlzLm9wdGlvbnMu dmlzaWJsZXx8dGhpcy5oaWRlKCksbi50b29sdGlwKHt0aXRsZTo9CnQudG9vbHRpcCxwbGFjZW1l bnQ6ImJvdHRvbSJ9KX0sc2hvdzpmdW5jdGlvbigpeyQodGhpcy5lbCkuc2hvdygpfSxoaWRlOmZ1 bj0KY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUoKX0sYWRkTWVudTpmdW5jdGlvbih0KXt2YXIgbj0z RHt0aXRsZToiIix0YXJnZXQ6IiIsPQpocmVmOiIiLG9uY2xpY2s6bnVsbCxkaXZpZGVyOiExLGlj b246bnVsbCxjbHM6ImJ1dHRvbi1tZW51IGJ0bi1ncm91cCJ9O249M0Q9CmUubWVyZ2UodCxuKSx0 aGlzLiRtZW51fHwoJCh0aGlzLmVsKS5hcHBlbmQodGhpcy5fdGVtcGxhdGVNZW51KCkpLHRoaXMu JG1lbj0KdT0zRCQodGhpcy5lbCkuZmluZCgiLm1lbnUiKSk7dmFyIHI9M0QkKHRoaXMuX3RlbXBs YXRlTWVudUl0ZW0obikpO3Iub24oImNsPQppY2siLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1 bHQoKSxuLm9uY2xpY2smJm4ub25jbGljaygpfSksdGhpcy4kbWVudS5hcHA9CmVuZChyKSxuLmRp dmlkZXImJnRoaXMuJG1lbnUuYXBwZW5kKCQodGhpcy5fdGVtcGxhdGVEaXZpZGVyKCkpKX0sX3Rl bXBsYXRlTT0KZW51SXRlbTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGk+PGEgY2xhc3M9M0QiZHJv cGRvd24taXRlbSIgaHJlZj0zRCInK2UuaHJlPQpmKyciIHRhcmdldD0zRCInK2UudGFyZ2V0Kyci Pic7cmV0dXJuIGUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNEImZhICcrZS5pY289Cm4rJyI+PC9p PicpLHQrPTNEIiAiK2UudGl0bGUrIjwvYT4iKyI8L2xpPiIsdH0sX3RlbXBsYXRlTWVudTpmdW5j dGlvbigpe3JldD0KdXJuJzx1bCBjbGFzcz0zRCJtZW51IGRyb3Bkb3duLW1lbnUgcHVsbC1yaWdo dCIgcm9sZT0zRCJtZW51Ij48L3VsPid9LF90ZW1wPQpsYXRlRGl2aWRlcjpmdW5jdGlvbigpe3Jl dHVybic8bGkgY2xhc3M9M0QiZGl2aWRlciI+PC9saT4nfSxfdGVtcGxhdGU6ZnVuY3Q9Cmlvbihl KXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpdGxlP3Q9M0Qid2lkdGg6IGF1dG87IjpuPTNEIm1hcmdp bjogMHB4OyI7dmFyID0Kcj0zRCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBzdHlsZT0zRCJmbG9hdDog JytlLmZsb2F0aW5nKyI7ICIrdCsnIiBjbGFzcz0zRCJkPQpyb3Bkb3duICcrZS5jbHMrJyI+Jysn PGRpdiBjbGFzcz0zRCJyb290IGJ1dHRvbiBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2w9CmU9 M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisnIj4nKyc8aSBjbGFzcz0zRCJpY29uIGZhICcrZS5p Y29uKyciLz4nO3JldHVybj0KIGUudGl0bGUmJihyKz0zRCcmbmJzcDs8c3BhbiBjbGFzcz0zRCJ0 aXRsZSI+JytlLnRpdGxlKyI8L3NwYW4+Iikscis9M0QiPC9kPQppdj48L2Rpdj4iLHJ9fSl9KSxk ZWZpbmUoIm12Yy91aS91aS1taXNjIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLXNlbGVjdC09 CmRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVyIiwibXZjL3VpL3VpLW9wdGlvbnMiLCJtdmMvdWkv dWktZHJpbGxkb3duIiwibXZjLz0KdWkvdWktYnV0dG9uLW1lbnUiLCJtdmMvdWkvdWktbW9kYWwi XSxmdW5jdGlvbihlLHQsbixyLGkscyxvKXt2YXIgdT0zREJhY2tiPQpvbmUuVmlldy5leHRlbmQo e29wdGlvbnNEZWZhdWx0Ont1cmw6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3Ro aXM9Ci5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxl bWVudCh0aGlzLl90ZW1wbGF0ZSh0aD0KaXMub3B0aW9ucykpfSxfdGVtcGxhdGU6ZnVuY3Rpb24o ZSl7cmV0dXJuJzxpbWcgY2xhc3M9M0QidWktaW1hZ2UgJytlLmNscysnPQoiIHNyYz0zRCInK2Uu dXJsKyciLz4nfX0pLGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e3Rp dGxlOiI9CiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUu bWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdT0KbHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1w bGF0ZSh0aGlzLm9wdGlvbnMpKX0sdGl0bGU6ZnVuY3Rpb24oZSl7dGhpcy4kPQplbC5odG1sKGUp fSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxsYWJlbCBjbGFzcz0zRCJ1aS1sYWJlbCAn K2UuY2xzKyc9CiI+JytlLnRpdGxlKyI8L2xhYmVsPiJ9LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJu IG9wdGlvbnMudGl0bGV9fSksZj0zREJhY2tibz0KbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZh dWx0OntmbG9hdGluZzoicmlnaHQiLGljb246IiIsdG9vbHRpcDoiIixwbGFjZW1lPQpudDoiYm90 dG9tIix0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25z PTNEZS5tZXJnZSg9CnQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMu X3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLCQodGhpcz0KLmVsKS50b29sdGlwKHt0aXRsZTp0LnRv b2x0aXAscGxhY2VtZW50OiJib3R0b20ifSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyPQpldHVy bic8ZGl2PjxzcGFuIGNsYXNzPTNEImZhICcrZS5pY29uKyciIGNsYXNzPTNEInVpLWljb24iLz4m bmJzcDsnK2UudGl0bGU9CisiPC9kaXY+In19KSxsPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29w dGlvbnNEZWZhdWx0OntpZDpudWxsLHRpdGxlOiIiLGZsbz0KYXRpbmc6InJpZ2h0IixjbHM6InVp LWJ1dHRvbiBidG4gYnRuLWRlZmF1bHQiLGljb246IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oPQp0 KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRF bGVtZW50KHRoaXMuX3RlbXA9CmxhdGUodGhpcy5vcHRpb25zKSksJCh0aGlzLmVsKS5vbigiY2xp Y2siLGZ1bmN0aW9uKCl7JCgiLnRvb2x0aXAiKS5oaWRlKCksdD0KLm9uY2xpY2smJnQub25jbGlj aygpfSksJCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0LnRvb2x0aXAscGxhY2VtZW50OiJib3R0 PQpvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxidXR0b24gaWQ9M0QiJytl LmlkKyciIHR5cGU9M0Qic3VibWk9CnQiIHN0eWxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrJzsi IHR5cGU9M0QiYnV0dG9uIiBjbGFzcz0zRCInK2UuY2xzKyciPic7cj0KZXR1cm4gZS5pY29uJiYo dCs9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNvbisnIj48L2k+Jm5ic3A7JyksdCs9M0Rl LnRpPQp0bGUrIjwvYnV0dG9uPiIsdH19KSxjPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlv bnNEZWZhdWx0OntpZDpudWxsLHRpdGw9CmU6IiIsZmxvYXRpbmc6InJpZ2h0IixjbHM6InVpLWJ1 dHRvbi1pY29uIixpY29uOiIiLHRvb2x0aXA6IiIsb25jbGljazpudWxsfT0KLGluaXRpYWxpemU6 ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQp LHRoaXMuPQpzZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRoaXMuJGJ1 dHRvbj0zRHRoaXMuJGVsLmZpbmQoIi5idXQ9CnRvbiIpO3ZhciBuPTNEdGhpczskKHRoaXMuZWwp Lm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIudG9vbHRpcCIpLmhpZGUoKSx0Lj0Kb25jbGljayYm IW4uZGlzYWJsZWQmJnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0LnRv b2x0aXAscGxhPQpjZW1lbnQ6ImJvdHRvbSJ9KX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuJGJ1 dHRvbi5hZGRDbGFzcygiZGlzYWJsZWQiKSx0aGk9CnMuZGlzYWJsZWQ9M0QhMH0sZW5hYmxlOmZ1 bmN0aW9uKCl7dGhpcy4kYnV0dG9uLnJlbW92ZUNsYXNzKCJkaXNhYmxlZCIpLHRoaT0Kcy5kaXNh YmxlZD0zRCExfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QiIjtlLnRpdGxlJiYodD0z RCJ3aWR0aDogYXV0PQpvOyIpO3ZhciBuPTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciIHN0eWxlPTNE ImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGM9Cmxhc3M9M0QiJytlLmNscysnIj4nO3Jl dHVybiBlLnRpdGxlP24rPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9uIj48aSBjbGFzcz0zRD0KImlj b24gZmEgJytlLmljb24rJyIvPiZuYnNwOycrJzxzcGFuIGNsYXNzPTNEInRpdGxlIj4nK2UudGl0 bGUrIjwvc3Bhbj4iKyI8PQovZGl2PiI6bis9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNv bisnIi8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2s9CmJvbmUuVmlldy5leHRlbmQoe29w dGlvbnNEZWZhdWx0Ont0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dD0K aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXRlPQoodGhpcy5vcHRpb25zKSksJCh0aGlzLmVsKS5vbigiY2xpY2si LHQub25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXQ9CnVybic8ZGl2PjxhIGhyZWY9 M0QiamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0zRCJ1aS1hbmNob3IgJytlLmNscysnIj4nK2Uu dD0KaXRsZSsiPC9hPjwvZGl2PiJ9fSkscD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25z RGVmYXVsdDp7bWVzc2FnZTpudWxsPQosc3RhdHVzOiJpbmZvIixwZXJzaXN0ZW50OiExfSxpbml0 aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2U9Cih0LHRoaXMub3B0aW9u c0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgiPGRpdj48L2Rpdj4iKSx0aGlzLm9wdGlvbnMubWVz c2FnZT0KJiZ0aGlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoPQppcy5vcHRpb25zRGVmYXVsdCk7aWYodC5tZXNzYWdl IT0zRCIiKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRoaXMub3A9CnRpb25zKSksdGhp cy4kZWwuZmluZCgiLmFsZXJ0IikuYXBwZW5kKHQubWVzc2FnZSksdGhpcy4kZWwuZmFkZUluKCks dGhpcy50aT0KbWVvdXQmJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtpZighdC5w ZXJzaXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpPQpzLnRpbWVvdXQ9M0R3aW5kb3cuc2V0VGltZW91 dChmdW5jdGlvbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVsLmZhZGVPdXQ9CigpOm4uJGVs LmhpZGUoKX0sM2UzKX19ZWxzZSB0aGlzLiRlbC5mYWRlT3V0KCl9LF90ZW1wbGF0ZTpmdW5jdGlv bihlKXtyZXR1cj0Kbic8ZGl2IGNsYXNzPTNEInVpLW1lc3NhZ2UgYWxlcnQgYWxlcnQtJytlLnN0 YXR1cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmllPQp3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6 e29uY2xpY2s6bnVsbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQ9Cil7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90ZW1wbD0KYXRlKHRoaXMub3B0aW9ucykpO3ZhciBuPTNEdGhpczt0aGlzLm9wdGlv bnMub25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsPQpmdW5jdGlvbihlKXt2YXIgdD0zRG4u JGVsLmZpbmQoIiNzZWFyY2giKTtuLm9wdGlvbnMub25jbGljayh0LnZhbCgpKX0pfSxfdGU9Cm1w bGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1zZWFyY2giPjxmb3JtIG9u c3VibWl0PTNEInJldHVybj0KIGZhbHNlOyI+PGlucHV0IGlkPTNEInNlYXJjaCIgY2xhc3M9M0Qi Zm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiPQogbmFtZT0zRCJzZWFyY2giIHBs YWNlaG9sZGVyPTNEIlNlYXJjaC4uLiIgdmFsdWU9M0QiJytlLnNlYXJjaHdvcmQrJyI+JysnPGI9 CnV0dG9uIHR5cGU9M0Qic3VibWl0IiBjbGFzcz0zRCJidG4gc2VhcmNoLWJ0biI+JysnPGkgY2xh c3M9M0QiZmEgZmEtc2VhcmNoIj0KPjwvaT4nKyI8L2J1dHRvbj4iKyI8L2Zvcm0+IisiPC9kaXY+ In19KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEPQplZmF1bHQ6e3R5cGU6InRl eHQiLHBsYWNlaG9sZGVyOiIiLGRpc2FibGVkOiExLHZpc2libGU6ITAsY2xzOiIiLGFyZWE6ITF9 LGk9Cm5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCksdGhpcy5zZT0KdEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRp b25zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmPQp0aGlzLnZhbHVlKHRo aXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLiRlbC5wcm9wKCJk aXNhYmw9CmVkIiwhMCksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuJGVsLmhpZGUoKTt2YXIg bj0zRHRoaXM7dGhpcy4kZWwub24oImlucD0KdXQiLGZ1bmN0aW9uKCl7bi5vcHRpb25zLm9uY2hh bmdlJiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9LHZhbHVlPQo6ZnVuY3Rpb24o ZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiRlbC52YWwoZSksdGhpcy4kZWwudmFs KCl9LF90ZW09CnBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFyZWE/Jzx0ZXh0YXJlYSBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dD0KYXJlYSAnK2UuY2xzKyciPjwvdGV4dGFyZWE+ JzonPGlucHV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50eXBlKyciIHZhPQpsdWU9M0Qi JytlLnZhbHVlKyciIHBsYWNlaG9sZGVyPTNEIicrZS5wbGFjZWhvbGRlcisnIiBjbGFzcz0zRCJ1 aS1pbnB1dCAnK2U9Ci5jbHMrJyI+J319KSxtPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPQo9M0RlLHRoaXMuc2V0RWxlbWVudCh0aGlz Ll90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPQo9M0R1bmRl ZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7 cmV0dXJuIGUhPQo9M0Q9M0R1bmRlZmluZWQmJnRoaXMuJGVsLnZhbChlKSx0aGlzLiRlbC52YWwo KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHU9CnJuJzxoaWRkZW4gaWQ9M0QiJytlLmlkKyci IHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+J319KTtyZXR1cm57QW5jaG9yOmgsQnV0dD0Kb246bCxC dXR0b25JY29uOmMsQnV0dG9uTWVudTpzLEljb246ZixJbWFnZTp1LElucHV0OnYsTGFiZWw6YSxN ZXNzYWdlOnAsTW9kPQphbDpvLFJhZGlvQnV0dG9uOnIuUmFkaW9CdXR0b24sQ2hlY2tib3g6ci5D aGVja2JveCxSYWRpbzpyLlJhZGlvLFNlYXJjaGJveDo9CmQsU2VsZWN0OnQsSGlkZGVuOm0sU2xp ZGVyOm4sRHJpbGxkb3duOml9fSksZGVmaW5lKCJwbHVnaW4vbGlicmFyeS9qb2JzIixbIj0KdXRp bHMvdXRpbHMiXSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtpbml0 aWFsaXplOmZ1bmN0aW9uPQoodCxuKXt0aGlzLmFwcD0zRHQsdGhpcy5vcHRpb25zPTNEZS5tZXJn ZShuLHRoaXMub3B0aW9uc0RlZmF1bHQpfSxyZXF1ZXN0OmY9CnVuY3Rpb24oZSx0LG4scixpKXt2 YXIgcz0zRHRoaXM7ZS5zdGF0ZSgid2FpdCIsIlJlcXVlc3Rpbmcgam9iIHJlc3VsdHMuLi4iKT0K O3ZhciBvPTNEZS5nZXQoImRhdGFzZXRfaWRfam9iIik7byE9M0QiIj9zLl93YWl0KGUscixpKTpz Ll9zdWJtaXQoZSx0LG4scixpPQopfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBuPTNEdGhpcyxy PTNEdC5nZXQoImRhdGFzZXRfaWRfam9iIik7ciE9M0QiIiYmKGU9Ci5yZXF1ZXN0KHt0eXBlOiJQ VVQiLHVybDpjb25maWcucm9vdCsiYXBpL2hpc3Rvcmllcy9ub25lL2NvbnRlbnRzLyIrcixkYXRh Oj0Ke2RlbGV0ZWQ6ITB9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtuLl9yZWZyZXNoSGRhcygpfX0pLHQu c2V0KCJkYXRhc2V0X2lkX2pvYiIsPQoiIikpfSxfc3VibWl0OmZ1bmN0aW9uKHQsbixyLGkscyl7 dmFyIG89M0R0aGlzLHU9M0R0LmlkLGE9M0R0LmdldCgidHlwZSIpLGY9Cj0zRHQuZGVmaW5pdGlv bjtkYXRhPTNEe3Rvb2xfaWQ6ImNoYXJ0cyIsaW5wdXRzOntpbnB1dDp7aWQ6dC5nZXQoImRhdGFz ZXRfaT0KZCIpLHNyYzoiaGRhIn0sbW9kdWxlOmYuZXhlY3V0ZSxjb2x1bW5zOnIsc2V0dGluZ3M6 bn19LHQuc3RhdGUoIndhaXQiLCJTZW5kPQppbmcgam9iIHJlcXVlc3QuLi4iKSxlLnJlcXVlc3Qo e3R5cGU6IlBPU1QiLHVybDpjb25maWcucm9vdCsiYXBpL3Rvb2xzIixkYXQ9CmE6ZGF0YSxzdWNj ZXNzOmZ1bmN0aW9uKGUpe2lmKCFlLm91dHB1dHN8fGUub3V0cHV0cy5sZW5ndGg9M0Q9M0QwKXQu c3RhdGUoIj0KZmFpbGVkIiwiSm9iIHN1Ym1pc3Npb24gZmFpbGVkLiBObyByZXNwb25zZS4iKSxz JiZzKCk7ZWxzZXtvLl9yZWZyZXNoSGRhcygpPQo7dmFyIG49M0RlLm91dHB1dHNbMF07dC5zdGF0 ZSgid2FpdCIsIllvdXIgam9iIGhhcyBiZWVuIHF1ZXVlZC4gWW91IG1heSBjbG89CnNlIHRoZSBi cm93c2VyIHdpbmRvdy4gVGhlIGpvYiB3aWxsIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4iKSx0LnNl dCgiZGF0YXNldD0KX2lkX2pvYiIsbi5pZCksby5hcHAuc3RvcmFnZS5zYXZlKCksby5fd2FpdCh0 LGkscyl9fSxlcnJvcjpmdW5jdGlvbihlKXt2YXIgPQpuPTNEIiI7ZSYmZS5tZXNzYWdlJiZlLm1l c3NhZ2UuZGF0YSYmZS5tZXNzYWdlLmRhdGEuaW5wdXQmJihuPTNEZS5tZXNzYWdlLmQ9CmF0YS5p bnB1dCsiLiIpLHQuc3RhdGUoImZhaWxlZCIsIlRoaXMgdmlzdWFsaXphdGlvbiByZXF1aXJlcyB0 aGUgJ2NoYXJ0cycgdD0Kb29sLiBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGluc3RhbGxlZC4gIitu KSxzJiZzKCl9fSl9LF93YWl0OmZ1bmN0aW9uKHQsbixyPQope3ZhciBpPTNEdGhpcztlLnJlcXVl c3Qoe3R5cGU6IkdFVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvZGF0YXNldHMvIit0LmdldCg9CiJk YXRhc2V0X2lkX2pvYiIpLGRhdGE6e30sc3VjY2VzczpmdW5jdGlvbihlKXt2YXIgcz0zRCExO3N3 aXRjaChlLnN0YXRlKXtjYT0Kc2Uib2siOnQuc3RhdGUoIndhaXQiLCJKb2IgY29tcGxldGVkIHN1 Y2Nlc3NmdWxseS4uLiIpLG4mJm4oZSkscz0zRCEwO2JyZWFrPQo7Y2FzZSJlcnJvciI6dC5zdGF0 ZSgiZmFpbGVkIiwiSm9iIGhhcyBmYWlsZWQuIFBsZWFzZSBjaGVjayB0aGUgaGlzdG9yeSBmb3I9 CiBkZXRhaWxzLiIpLHImJnIoZSkscz0zRCEwO2JyZWFrO2Nhc2UicnVubmluZyI6dC5zdGF0ZSgi d2FpdCIsIllvdXIgam9iIGlzID0KcnVubmluZy4gWW91IG1heSBjbG9zZSB0aGUgYnJvd3NlciB3 aW5kb3cuIFRoZSBqb2Igd2lsbCBjb250aW51ZSBpbiB0aGUgYmFjPQprZ3JvdW5kLiIpfXN8fHNl dFRpbWVvdXQoZnVuY3Rpb24oKXtpLl93YWl0KHQsbixyKX0saS5hcHAuY29uZmlnLmdldCgicXVl cnk9Cl90aW1lb3V0IikpfX0pfSxfcmVmcmVzaEhkYXM6ZnVuY3Rpb24oKXtHYWxheHkmJkdhbGF4 eS5jdXJySGlzdG9yeVBhbmVsJiZHYT0KbGF4eS5jdXJySGlzdG9yeVBhbmVsLnJlZnJlc2hDb250 ZW50cygpfX0pfSksZGVmaW5lKCJwbHVnaW4vbGlicmFyeS9kYXRhc2V0PQpzIixbInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb24oZSl7cmV0dXJuIEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHtsaXN0 Ont9LGM9CmFjaGU6e30saW5pdGlhbGl6ZTpmdW5jdGlvbih0LG4pe3RoaXMuYXBwPTNEdCx0aGlz Lm9wdGlvbnM9M0RlLm1lcmdlKG4sdGhpcz0KLm9wdGlvbnNEZWZhdWx0KX0scmVxdWVzdDpmdW5j dGlvbihlKXtlLmdyb3Vwcz90aGlzLl9nZXRfYmxvY2tzKGUpOnRoaXMuX2dlPQp0X2RhdGFzZXQo ZS5pZCxlLnN1Y2Nlc3MsZS5lcnJvcil9LF9nZXRfYmxvY2tzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9u IGMoaSl7bC49Cl9nZXQoaSxmdW5jdGlvbigpe3ZhciBzPTNEITE7Zm9yKHZhciBvIGluIGUuZ3Jv dXBzKXtkZXN0aW5hdGlvbl9ncm91cD0zRGUuZz0Kcm91cHNbb10sc291cmNlX2dyb3VwPTNEaS5n cm91cHNbb10sZGVzdGluYXRpb25fZ3JvdXAudmFsdWVzfHwoZGVzdGluYXRpb25fPQpncm91cC52 YWx1ZXM9M0RbXSksZGVzdGluYXRpb25fZ3JvdXAudmFsdWVzPTNEZGVzdGluYXRpb25fZ3JvdXAu dmFsdWVzLmNvbmM9CmF0KHNvdXJjZV9ncm91cC52YWx1ZXMpO2lmKHNvdXJjZV9ncm91cC52YWx1 ZXMubGVuZ3RoPTNEPTNEMCl7cz0zRCEwO2JyZWFrfT0KfWlmKCsrZjx1JiYhcyl7biYmbihwYXJz ZUludChmL3UqMTAwKSk7dmFyIGw9M0RpLnN0YXJ0K3I7aT0zRCQuZXh0ZW5kKCEwLGEsPQp7c3Rh cnQ6bH0pLGMoaSl9ZWxzZSB0KCl9KX12YXIgdD0zRGUuc3VjY2VzcyxuPTNEZS5wcm9ncmVzcyxy PTNEdGhpcy5hcHAuY289Cm5maWcuZ2V0KCJxdWVyeV9saW1pdCIpLGk9M0RlLnN0YXJ0fHwwLHM9 M0RpK2UucXVlcnlfbGltaXR8fGkrdGhpcy5hcHAuY29uZj0KaWcuZ2V0KCJxdWVyeV9saW1pdCIp LG89M0RNYXRoLmFicyhzLWkpO2lmKG88PTNEMCl7Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gPQpE YXRhc2V0czo6cmVxdWVzdCgpIC0gSW52YWxpZCBxdWVyeSByYW5nZS4iKTtyZXR1cm59dmFyIHU9 M0RNYXRoLmNlaWwoby9yKXw9CnwxLGE9M0QkLmV4dGVuZCghMCx7fSxlKSxmPTNEMCxsPTNEdGhp cyxoPTNEJC5leHRlbmQoITAsYSx7c3RhcnQ6aX0pO3RoaXMuXz0KZ2V0X2RhdGFzZXQoZS5pZCxm dW5jdGlvbigpe2MoaCl9KX0sX2dldF9kYXRhc2V0OmZ1bmN0aW9uKHQsbixyKXt2YXIgaT0zRHRo PQppcy5saXN0W3RdO2lmKGkpe24oaSk7cmV0dXJufXZhciBzPTNEdGhpcztlLnJlcXVlc3Qoe3R5 cGU6IkdFVCIsdXJsOmNvbmZpZy49CnJvb3QrImFwaS9kYXRhc2V0cy8iK3Qsc3VjY2VzczpmdW5j dGlvbihlKXtzd2l0Y2goZS5zdGF0ZSl7Y2FzZSJlcnJvciI6ciYmcj0KKGUpO2JyZWFrO2RlZmF1 bHQ6cy5saXN0W3RdPTNEZSxuKGUpfX19KX0sX2Jsb2NrX2lkOmZ1bmN0aW9uKGUsdCl7cmV0dXJu IGUuPQppZCsiXyIrZS5zdGFydCsiXyIrZS5zdGFydCt0aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVy eV9saW1pdCIpKyJfIit0fSxfZ2V0OmY9CnVuY3Rpb24oZSx0KXtlLnN0YXJ0PTNEZS5zdGFydHx8 MDt2YXIgbj0zRFtdLHI9M0R7fSxpPTNEMDtmb3IodmFyIHMgaW4gZS5ncj0Kb3Vwcyl7dmFyIG89 M0RlLmdyb3Vwc1tzXTtmb3IodmFyIHUgaW4gby5jb2x1bW5zKXt2YXIgYT0zRG8uY29sdW1uc1t1 XS5pbmRlPQp4LGY9M0R0aGlzLl9ibG9ja19pZChlLGEpO2lmKHRoaXMuY2FjaGVbZl18fGE9M0Q9 M0Q9M0QiYXV0byJ8fGE9M0Q9M0Q9M0QiemU9CnJvIiljb250aW51ZTshclthXSYmYSE9M0Q9M0R1 bmRlZmluZWQmJihyW2FdPTNEaSxuLnB1c2goYSksaSsrKX19aWYobi5sZW5ndD0KaD0zRD0zRDAp e3RoaXMuX2ZpbGxfZnJvbV9jYWNoZShlKSx0KGUpO3JldHVybn12YXIgbD0zRHtkYXRhc2V0X2lk OmUuaWQsc3RhPQpydDplLnN0YXJ0LGNvbHVtbnM6bn0sYz0zRHRoaXM7dGhpcy5fZmV0Y2gobCxm dW5jdGlvbihyKXtmb3IodmFyIGkgaW4gcil7dmE9CnIgcz0zRG5baV0sbz0zRGMuX2Jsb2NrX2lk KGUscyk7Yy5jYWNoZVtvXT0zRHJbaV19Yy5fZmlsbF9mcm9tX2NhY2hlKGUpLHQoZT0KKX0pfSxf ZmlsbF9mcm9tX2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEZS5zdGFydDtjb25zb2xlLmRlYnVn KCJEYXRhc2V0czo6PQpfZmlsbF9mcm9tX2NhY2hlKCkgLSBGaWxsaW5nIHJlcXVlc3QgZnJvbSBj YWNoZSBhdCAiK3QrIi4iKTt2YXIgbj0zRDA7Zm9yKHY9CmFyIHIgaW4gZS5ncm91cHMpe3ZhciBp PTNEZS5ncm91cHNbcl07Zm9yKHZhciBzIGluIGkuY29sdW1ucyl7dmFyIG89M0RpLmNvbD0KdW1u c1tzXSx1PTNEdGhpcy5fYmxvY2tfaWQoZSxvLmluZGV4KSxhPTNEdGhpcy5jYWNoZVt1XTthJiYo bj0zRE1hdGgubWF4KG4sPQphLmxlbmd0aCkpfX1uPTNEPTNEMCYmY29uc29sZS5kZWJ1ZygiRGF0 YXNldHM6Ol9maWxsX2Zyb21fY2FjaGUoKSAtIFJlYWNoZWQ9CiBkYXRhIHJhbmdlIGxpbWl0LiIp O2Zvcih2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtpLnZhbHVlcz0zRD0K W107Zm9yKHZhciBmPTNEMDtmPG47ZisrKWkudmFsdWVzW2ZdPTNEe3g6cGFyc2VJbnQoZikrdH19 Zm9yKHZhciByIGluIGUuZ3JvPQp1cHMpe3ZhciBpPTNEZS5ncm91cHNbcl07Zm9yKHZhciBzIGlu IGkuY29sdW1ucyl7dmFyIG89M0RpLmNvbHVtbnNbc107c3dpdGM9Cmgoby5pbmRleCl7Y2FzZSJh dXRvIjpmb3IodmFyIGY9M0QwO2Y8bjtmKyspe3ZhciBsPTNEaS52YWx1ZXNbZl07bFtzXT0zRHBh cj0Kc2VJbnQoZikrdH1icmVhaztjYXNlInplcm8iOmZvcih2YXIgZj0zRDA7ZjxuO2YrKyl7dmFy IGw9M0RpLnZhbHVlc1tmXTtsW3NdPQo9M0QwfWJyZWFrO2RlZmF1bHQ6dmFyIHU9M0R0aGlzLl9i bG9ja19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2Zvcig9CnZhciBmPTNEMDtmPG47 ZisrKXt2YXIgbD0zRGkudmFsdWVzW2ZdLGM9M0RhW2ZdO2lzTmFOKGMpJiYhby5pc19sYWJlbCYm KGM9Cj0zRDApLGxbc109M0RjfX19fX0sX2ZldGNoOmZ1bmN0aW9uKHQsbil7dmFyIHI9M0R0LnN0 YXJ0P3Quc3RhcnQ6MCxpPTNEdGhpcz0KLmFwcC5jb25maWcuZ2V0KCJxdWVyeV9saW1pdCIpLHM9 M0QwO3QuY29sdW1ucyYmKHM9M0R0LmNvbHVtbnMubGVuZ3RoLGNvbnNvPQpsZS5kZWJ1ZygiRGF0 YXNldHM6Ol9mZXRjaCgpIC0gRmV0Y2hpbmcgIitzKyIgY29sdW1uKHMpIGF0ICIrcisiLiIpKSxz PTNEPQo9M0QwJiZjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBObyBjb2x1bW5z IHJlcXVlc3RlZCIpO3ZhciBvPTNEIiI9Cjtmb3IodmFyIHUgaW4gdC5jb2x1bW5zKW8rPTNEdC5j b2x1bW5zW3VdKyIsIjtvPTNEby5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKT0KO3ZhciBhPTNEdGhp cztlLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvZGF0YXNldHMvIit0 LmRhdGFzPQpldF9pZCxkYXRhOntkYXRhX3R5cGU6InJhd19kYXRhIixwcm92aWRlcjoiZGF0YXNl dC1jb2x1bW4iLGxpbWl0Omksb2Zmc2V0OnI9CixpbmRlY2VzOm99LHN1Y2Nlc3M6ZnVuY3Rpb24o ZSl7dmFyIHQ9M0RuZXcgQXJyYXkocyk7Zm9yKHZhciByPTNEMDtyPHM7cisrKT0KdFtyXT0zRFtd O2Zvcih2YXIgciBpbiBlLmRhdGEpe3ZhciBpPTNEZS5kYXRhW3JdO2Zvcih2YXIgbyBpbiBpKXt2 YXIgdT0zRGlbPQpvXTt1IT0zRD0zRHVuZGVmaW5lZCYmdSE9M0QyMTQ3NDgzNjQ3JiZ0W29dLnB1 c2godSl9fWNvbnNvbGUuZGVidWcoIkRhdGFzZXQ9CnM6Ol9mZXRjaCgpIC0gRmV0Y2hpbmcgY29t cGxldGUuIiksbih0KX19KX19KX0pLGRlZmluZSgicGx1Z2luL21vZGVscy9ncm91cD0KIixbXSxm dW5jdGlvbigpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOntrZXk6IkRh dGEgbGFiZWwiLGRhPQp0ZToiIn0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKHtzaWxlbnQ6 ITB9KS5zZXQodGhpcy5kZWZhdWx0cyksdGhpcy50cmk9CmdnZXIoInJlc2V0Iix0aGlzKX19KX0p LGRlZmluZSgicGx1Z2luL21vZGVscy9ncm91cHMiLFsicGx1Z2luL21vZGVscy9ncm91cD0KIl0s ZnVuY3Rpb24oZSl7cmV0dXJuIEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDplfSl9 KSxkZWZpbmUoInBsdWdpPQpuL21vZGVscy9jaGFydCIsWyJwbHVnaW4vbW9kZWxzL2dyb3VwcyJd LGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC49CmV4dGVuZCh7ZGVmYXVsdHM6e2lk Om51bGwsdGl0bGU6IiIsdHlwZToiIixkYXRlOm51bGwsc3RhdGU6IiIsc3RhdGVfaW5mbzoiIj0K LG1vZGlmaWVkOiExLGRhdGFzZXRfaWQ6IiIsZGF0YXNldF9pZF9qb2I6IiJ9LGluaXRpYWxpemU6 ZnVuY3Rpb24odCl7dGhpcy5nPQpyb3Vwcz0zRG5ldyBlLHRoaXMuc2V0dGluZ3M9M0RuZXcgQmFj a2JvbmUuTW9kZWx9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5jbGU9CmFyKHtzaWxlbnQ6ITB9KS5z ZXQodGhpcy5kZWZhdWx0cyksdGhpcy5ncm91cHMucmVzZXQoKSx0aGlzLnNldHRpbmdzLmNsZWFy KD0KKSx0aGlzLnRyaWdnZXIoInJlc2V0Iix0aGlzKX0sY29weTpmdW5jdGlvbihlKXt2YXIgdD0z RHRoaXM7dC5jbGVhcih7c2lsZW50PQo6ITB9KS5zZXQodGhpcy5kZWZhdWx0cyksdC5zZXQoZS5h dHRyaWJ1dGVzKSx0LnNldHRpbmdzPTNEZS5zZXR0aW5ncy5jbG9uZSg9CiksdC5ncm91cHMucmVz ZXQoKSxlLmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKGUpe3QuZ3JvdXBzLmFkZChlLmNsb25lKCkpfSks dC50cj0KaWdnZXIoImNoYW5nZSIsdCl9LHN0YXRlOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXQoInN0 YXRlIixlKSx0aGlzLnNldCgic3RhdGVfPQppbmZvIix0KSx0aGlzLnRyaWdnZXIoInNldDpzdGF0 ZSIpLGNvbnNvbGUuZGVidWcoIkNoYXJ0OnN0YXRlKCkgLSAiK3QrIiAoIis9CmUrIikiKX19KX0p O3ZhciBWaXN1YWxpemF0aW9uPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7Y29u ZmlnOnt9fT0KLHVybFJvb3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRCIvYXBpL3Zpc3VhbGl6YXRpb25z IjtyZXR1cm4gd2luZG93LmdhbGF4eV9jb25mPQppZyYmZ2FsYXh5X2NvbmZpZy5yb290P2dhbGF4 eV9jb25maWcucm9vdCtlOmV9LGluaXRpYWxpemU6ZnVuY3Rpb24oZSl7Xy5pc089CmJqZWN0KGUu Y29uZmlnKSYmXy5pc09iamVjdCh0aGlzLmRlZmF1bHRzLmNvbmZpZykmJl8uZGVmYXVsdHMoZS5j b25maWcsdGhpcz0KLmRlZmF1bHRzLmNvbmZpZyksdGhpcy5fc2V0VXBMaXN0ZW5lcnMoKX0sX3Nl dFVwTGlzdGVuZXJzOmZ1bmN0aW9uKCl7fSxzZXQ6PQpmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0Q9 M0QiY29uZmlnIil7dmFyIG49M0R0aGlzLmdldCgiY29uZmlnIik7Xy5pc09iamVjdCg9Cm4pJiYo dD0zRF8uZXh0ZW5kKF8uY2xvbmUobiksdCkpfXJldHVybiBCYWNrYm9uZS5Nb2RlbC5wcm90b3R5 cGUuc2V0LmNhbGwodD0KaGlzLGUsdCksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0z RHRoaXMuZ2V0KCJpZCIpfHwiIjtyZXR1cm4gdGhpcy5nPQpldCgidGl0bGUiKSYmKGUrPTNEIjoi K3RoaXMuZ2V0KCJ0aXRsZSIpKSwiVmlzdWFsaXphdGlvbigiK2UrIikifX0pLFZpc3VhbGk9Cnph dGlvbkNvbGxlY3Rpb249M0RCYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7bW9kZWw6VmlzdWFs aXphdGlvbix1cmw6ZnVuYz0KdGlvbigpe3JldHVybiBnYWxheHlfY29uZmlnLnJvb3QrImFwaS92 aXN1YWxpemF0aW9ucyJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oPQplLHQpe3Q9M0R0fHx7fX0sc2V0 OmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzO2U9M0RfLm1hcChlLGZ1bmN0aW9uKGUpe3ZhciA9 CnQ9M0RuLmdldChlLmlkKTtpZighdClyZXR1cm4gZTt2YXIgcj0zRHQudG9KU09OKCk7cmV0dXJu IF8uZXh0ZW5kKHIsZSkscn0pLD0KQmFja2JvbmUuQ29sbGVjdGlvbi5wcm90b3R5cGUuc2V0LmNh bGwodGhpcyxlLHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVyPQpuWyJWaXN1YWxpemF0aW9u Q29sbGVjdGlvbigiLFt0aGlzLmhpc3RvcnlJZCx0aGlzLmxlbmd0aF0uam9pbigpLCIpIl0uam9p big9CiIiKX19KTtkZWZpbmUoIm12Yy92aXN1YWxpemF0aW9uL3Zpc3VhbGl6YXRpb24tbW9kZWwi LGZ1bmN0aW9uKCl7fSksZGVmaW5lKD0KInBsdWdpbi9saWJyYXJ5L3N0b3JhZ2UiLFsidXRpbHMv dXRpbHMiLCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2luL21vZGVsPQpzL2dyb3VwIiwibXZj L3Zpc3VhbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCJdLGZ1bmN0aW9uKGUsdCxuKXtyZXR1 cm4gQmE9CmNrYm9uZS5Nb2RlbC5leHRlbmQoe3ZpczpudWxsLGluaXRpYWxpemU6ZnVuY3Rpb24o ZSl7dGhpcy5hcHA9M0RlLHRoaXMuY2hhcj0KdD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMub3B0aW9u cz0zRHRoaXMuYXBwLm9wdGlvbnMsdGhpcy5pZD0zRHRoaXMub3B0aW9ucy5pPQpkLHRoaXMudmlz PTNEbmV3IFZpc3VhbGl6YXRpb24oe3R5cGU6ImNoYXJ0cyIsY29uZmlnOntkYXRhc2V0X2lkOnRo aXMub3B0aW89Cm5zLmNvbmZpZy5kYXRhc2V0X2lkLGNoYXJ0X2RpY3Q6e319fSksdGhpcy5pZCYm KHRoaXMudmlzLmlkPTNEdGhpcy5pZCk7dmFyID0KdD0zRHRoaXMub3B0aW9ucy5jb25maWcuY2hh cnRfZGljdDt0JiYodGhpcy52aXMuZ2V0KCJjb25maWciKS5jaGFydF9kaWN0PTNEPQp0KX0sc2F2 ZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5hcHAuY2hhcnQ7dGhpcy52aXMuZ2V0KCJjb25maWci KS5jaGFydF9kaWM9CnQ9M0R7fTt2YXIgdD0zRGUuZ2V0KCJ0aXRsZSIpO3QhPTNEIiImJnRoaXMu dmlzLnNldCgidGl0bGUiLHQpO3ZhciBuPTNEe2F0dD0KcmlidXRlczplLmF0dHJpYnV0ZXMsc2V0 dGluZ3M6ZS5zZXR0aW5ncy5hdHRyaWJ1dGVzLGdyb3VwczpbXX07ZS5ncm91cHMuZWFjPQpoKGZ1 bmN0aW9uKGUpe24uZ3JvdXBzLnB1c2goZS5hdHRyaWJ1dGVzKX0pLHRoaXMudmlzLmdldCgiY29u ZmlnIikuY2hhcnRfZGk9CmN0PTNEbjt2YXIgcj0zRHRoaXM7dGhpcy52aXMuc2F2ZSgpLmZhaWwo ZnVuY3Rpb24oZSx0LG4pe2NvbnNvbGUuZXJyb3IoZSx0LD0Kbil9KS50aGVuKGZ1bmN0aW9uKGUp e2UmJmUuaWQmJihyLmlkPTNEZS5pZCl9KX0sbG9hZDpmdW5jdGlvbigpe3ZhciBlPTNEdGhpPQpz LnZpcy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q7aWYoIWUuYXR0cmlidXRlcylyZXR1cm4hMTt2 YXIgdD0zRGUuYXR0cmlidXQ9CmVzLnR5cGU7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZGVidWcoIlN0 b3JhZ2U6OmxvYWQoKSAtIENoYXJ0IHR5cGUgbm90IHByb3ZpZD0KZWQuIEludmFsaWQgZm9ybWF0 LiIpLCExO3ZhciByPTNEdGhpcy5hcHAudHlwZXMuZ2V0KHQpO2lmKCFyKXJldHVybiBjb25zb2xl PQouZGVidWcoIlN0b3JhZ2U6OmxvYWQoKSAtIENoYXJ0IHR5cGUgbm90IHN1cHBvcnRlZC4gUGxl YXNlIHJlLWNvbmZpZ3VyZSB0aGU9CiBjaGFydC4gUmVzZXR0aW5nIGNoYXJ0LiIpLCExO2NvbnNv bGUuZGVidWcoIlN0b3JhZ2U6OmxvYWQoKSAtIExvYWRpbmcgY2hhcj0KdCB0eXBlICIrdCsiLiIp LHRoaXMuY2hhcnQuZGVmaW5pdGlvbj0zRHIsdGhpcy5jaGFydC5zZXQoZS5hdHRyaWJ1dGVzKSx0 aGlzPQouY2hhcnQuc3RhdGUoIm9rIiwiTG9hZGluZyBzYXZlZCB2aXN1YWxpemF0aW9uLi4uIiks dGhpcy5jaGFydC5zZXR0aW5ncy5zZXQ9CihlLnNldHRpbmdzKTtmb3IodmFyIGkgaW4gZS5ncm91 cHMpdGhpcy5jaGFydC5ncm91cHMuYWRkKG5ldyBuKGUuZ3JvdXBzW2ldKT0KKTtyZXR1cm4gdGhp cy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMSksITB9fSl9KSxkZWZpbmUoInV0aWxzL2RlZmVycmVk IixbInV0PQppbHMvdXRpbHMiXSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuTW9kZWwuZXh0 ZW5kKHtxdWV1ZTpbXSxwcm9jZXNzOnt9LGM9Cm91bnRlcjowLGluaXRpYWxpemU6ZnVuY3Rpb24o KXt0aGlzLm9uKCJyZWZyZXNoIixmdW5jdGlvbigpe2lmKHRoaXMucXVldWUubD0KZW5ndGg+MCYm dGhpcy5yZWFkeSgpKXt2YXIgZT0zRHRoaXMucXVldWVbMF07dGhpcy5xdWV1ZS5zcGxpY2UoMCwx KSxlJiZlKCl9PQp9KX0sZXhlY3V0ZTpmdW5jdGlvbihlKXt0aGlzLnF1ZXVlLnB1c2goZSksdGhp cy50cmlnZ2VyKCJyZWZyZXNoIil9LHJlZ2lzdGU9CnI6ZnVuY3Rpb24oKXt2YXIgdD0zRGUudXVp ZCgpO3JldHVybiB0aGlzLnByb2Nlc3NbdF09M0QhMCx0aGlzLmNvdW50ZXIrKyxjbz0KbnNvbGUu ZGVidWcoIkRlZmVycmVkOnJlZ2lzdGVyKCkgLSBSZWdpc3RlcmluZyAiK3QpLHR9LGRvbmU6ZnVu Y3Rpb24oZSl7dGhpPQpzLnByb2Nlc3NbZV0mJihkZWxldGUgdGhpcy5wcm9jZXNzW2VdLHRoaXMu Y291bnRlci0tLGNvbnNvbGUuZGVidWcoIkRlZmVycmU9CmQ6ZG9uZSgpIC0gVW5yZWdpc3Rlcmlu ZyAiK2UpLHRoaXMudHJpZ2dlcigicmVmcmVzaCIpKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aD0KaXMu cXVldWU9M0RbXX0scmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb3VudGVyPTNEPTNEMH19 KX0pLGRlZmluZSgicGx1PQpnaW4vdmlld3Mvdmlld3BvcnQiLFsibXZjL3VpL3VpLXBvcnRsZXQi LCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnU9Cm5jdGlvbihlLHQsbil7cmV0dXJu IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtjb250YWluZXJfbGlzdDpbXSxjYW52YXNfbGlzdDpbXT0K LGluaXRpYWxpemU6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcD0zRGUsdGhpcy5jaGFydD0zRHRoaXMu YXBwLmNoYXJ0LHRoaXMub3B0PQppb25zPTNEbi5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQp LHRoaXMuc2V0RWxlbWVudCgkKHRoaXMuX3RlbXBsYXRlKCkpKSw9CnRoaXMuX2Z1bGxzY3JlZW4o dGhpcy4kZWwsMTAwKSx0aGlzLl9jcmVhdGVDb250YWluZXIoImRpdiIpO3ZhciByPTNEdGhpczt0 aD0KaXMuY2hhcnQub24oInJlZHJhdyIsZnVuY3Rpb24oKXtyLl9kcmF3KHIuY2hhcnQpfSksdGhp cy5jaGFydC5vbigic2V0OnN0YXRlPQoiLGZ1bmN0aW9uKCl7dmFyIGU9M0RyLiRlbC5maW5kKCIj aW5mbyIpLHQ9M0RyLiRlbC5maW5kKCIuY2hhcnRzLXZpZXdwb3J0LWM9Cm9udGFpbmVyIiksbj0z RGUuZmluZCgiI2ljb24iKTtuLnJlbW92ZUNsYXNzKCksZS5zaG93KCksZS5maW5kKCIjdGV4dCIp Lmh0bT0KbChyLmNoYXJ0LmdldCgic3RhdGVfaW5mbyIpKTt2YXIgaT0zRHIuY2hhcnQuZ2V0KCJz dGF0ZSIpO3N3aXRjaChpKXtjYXNlIm9rPQoiOmUuaGlkZSgpLHQuc2hvdygpO2JyZWFrO2Nhc2Ui ZmFpbGVkIjpuLmFkZENsYXNzKCJpY29uIGZhIGZhLXdhcm5pbmciKSx0Lmg9CmlkZSgpO2JyZWFr O2RlZmF1bHQ6bi5hZGRDbGFzcygiaWNvbiBmYSBmYS1zcGlubmVyIGZhLXNwaW4iKSx0LnNob3co KX19KX0scz0KaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7 dGhpcy4kZWwuaGlkZSgpfSxfZnVsbHNjcmVlPQpuOmZ1bmN0aW9uKGUsdCl7ZS5jc3MoImhlaWdo dCIsJCh3aW5kb3cpLmhlaWdodCgpLXQpLCQod2luZG93KS5yZXNpemUoZnVuY3Q9Cmlvbigpe2Uu Y3NzKCJoZWlnaHQiLCQod2luZG93KS5oZWlnaHQoKS10KX0pfSxfY3JlYXRlQ29udGFpbmVyOmZ1 bmN0aW9uKGUsdD0KKXt0PTNEdHx8MTtmb3IodmFyIG4gaW4gdGhpcy5jb250YWluZXJfbGlzdCl0 aGlzLmNvbnRhaW5lcl9saXN0W25dLnJlbW92ZSgpPQo7dGhpcy5jb250YWluZXJfbGlzdD0zRFtd LHRoaXMuY2FudmFzX2xpc3Q9M0RbXTtmb3IodmFyIG49M0QwO248dDtuKyspe3ZhciA9CnI9M0Qk KHRoaXMuX3RlbXBsYXRlQ29udGFpbmVyKGUscGFyc2VJbnQoMTAwL3QpKSk7dGhpcy4kZWwuYXBw ZW5kKHIpLHRoaXMuYz0Kb250YWluZXJfbGlzdFtuXT0zRHIsdGhpcy5jYW52YXNfbGlzdFtuXT0z RHIuZmluZCgiLmNoYXJ0cy12aWV3cG9ydC1jYW52YXMiPQopLmF0dHIoImlkIil9fSxfZHJhdzpm dW5jdGlvbihlKXt2YXIgdD0zRHRoaXMsbj0zRHRoaXMuYXBwLmRlZmVycmVkLnJlZ2lzdGU9CnIo KSxyPTNEZS5nZXQoInR5cGUiKTt0aGlzLmNoYXJ0X2RlZmluaXRpb249M0RlLmRlZmluaXRpb247 dmFyIGk9M0QxO2Uuc2V0dD0KaW5ncy5nZXQoInVzZV9wYW5lbHMiKT0zRD0zRD0zRCJ0cnVlIiYm KGk9M0RlLmdyb3Vwcy5sZW5ndGgpLHRoaXMuX2NyZWF0ZUNvPQpudGFpbmVyKHRoaXMuY2hhcnRf ZGVmaW5pdGlvbi50YWcsaSksZS5zdGF0ZSgid2FpdCIsIlBsZWFzZSB3YWl0Li4uIik7aWYoIXQ9 Cmhpcy5jaGFydF9kZWZpbml0aW9uLmV4ZWN1dGV8fHRoaXMuY2hhcnRfZGVmaW5pdGlvbi5leGVj dXRlJiZlLmdldCgibW9kaWZpZT0KZCIpKXRoaXMuYXBwLmpvYnMuY2xlYW51cChlKSxlLnNldCgi bW9kaWZpZWQiLCExKTt2YXIgdD0zRHRoaXM7cmVxdWlyZShbInBsPQp1Z2luL2NoYXJ0cy8iK3Ro aXMuYXBwLmNoYXJ0UGF0aChyKSsiL3dyYXBwZXIiXSxmdW5jdGlvbihyKXtpZih0LmNoYXJ0X2Rl Zmk9Cm5pdGlvbi5leGVjdXRlKXQuYXBwLmpvYnMucmVxdWVzdChlLHQuX2RlZmF1bHRTZXR0aW5n c1N0cmluZyhlKSx0Ll9kZWZhdWx0Uj0KZXF1ZXN0U3RyaW5nKGUpLGZ1bmN0aW9uKCl7dmFyIGk9 M0RuZXcgcih0LmFwcCx7cHJvY2Vzc19pZDpuLGNoYXJ0OmUscmVxdWVzPQp0X2RpY3Rpb25hcnk6 dC5fZGVmYXVsdFJlcXVlc3REaWN0aW9uYXJ5KGUpLGNhbnZhc19saXN0OnQuY2FudmFzX2xpc3R9 KX0sZnU9Cm5jdGlvbigpe3RoaXMuYXBwLmRlZmVycmVkLmRvbmUobil9KTtlbHNlIHZhciBpPTNE bmV3IHIodC5hcHAse3Byb2Nlc3NfaWQ6bj0KLGNoYXJ0OmUscmVxdWVzdF9kaWN0aW9uYXJ5OnQu X2RlZmF1bHRSZXF1ZXN0RGljdGlvbmFyeShlKSxjYW52YXNfbGlzdDp0LmNhPQpudmFzX2xpc3R9 KX0pfSxfZGVmYXVsdFJlcXVlc3RTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QiIixuPTNEMCxy PTNEdGhpczs9CnJldHVybiBlLmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKGUpe24rKztmb3IodmFyIGkg aW4gci5jaGFydF9kZWZpbml0aW9uLmNvbHVtbj0Kcyl0Kz0zRGkrIl8iK24rIjoiKyhwYXJzZUlu dChlLmdldChpKSkrMSkrIiwgIn0pLHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMil9PQosX2RlZmF1 bHRTZXR0aW5nc1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0zRCIiO2ZvcihrZXkgaW4gZS5zZXR0 aW5ncy5hdHRyaWI9CnV0ZXMpdCs9M0RrZXkrIjoiK2Uuc2V0dGluZ3MuZ2V0KGtleSkrIiwgIjty ZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKT0KfSxfZGVmYXVsdFJlcXVlc3REaWN0aW9u YXJ5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEe2dyb3VwczpbXX07dGhpcy5jaGFydF9kZWZpPQpuaXRp b24uZXhlY3V0ZT90LmlkPTNEZS5nZXQoImRhdGFzZXRfaWRfam9iIik6dC5pZD0zRGUuZ2V0KCJk YXRhc2V0X2lkIik7dmE9CnIgcj0zRDAsaT0zRHRoaXM7cmV0dXJuIGUuZ3JvdXBzLmVhY2goZnVu Y3Rpb24oZSl7dmFyIHM9M0R7fTtmb3IodmFyIG8gaW4gaT0KLmNoYXJ0X2RlZmluaXRpb24uY29s dW1ucyl7dmFyIHU9M0RpLmNoYXJ0X2RlZmluaXRpb24uY29sdW1uc1tvXTtzW29dPTNEbi5tPQpl cmdlKHtpbmRleDplLmdldChvKX0sdSl9dC5ncm91cHMucHVzaCh7a2V5OisrcisiOiIrZS5nZXQo ImtleSIpLGNvbHVtbnM6c309Cil9KSx0fSxfdGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4nPGRp diBjbGFzcz0zRCJjaGFydHMtdmlld3BvcnQiPjxkaXYgaWQ9Cj0zRCJpbmZvIiBjbGFzcz0zRCJp bmZvIj48c3BhbiBpZD0zRCJpY29uIiBjbGFzcz0zRCJpY29uIi8+PHNwYW4gaWQ9M0QidGV4dD0K IiBjbGFzcz0zRCJ0ZXh0IiAvPjwvZGl2PjwvZGl2Pid9LF90ZW1wbGF0ZUNvbnRhaW5lcjpmdW5j dGlvbihlLHQpe3JldHVybic8PQpkaXYgY2xhc3M9M0QiY2hhcnRzLXZpZXdwb3J0LWNvbnRhaW5l ciIgc3R5bGU9M0Qid2lkdGg6Jyt0KyclOyI+JysnPGRpdiBpZD0KPTNEIm1lbnUiLz4nKyI8Iitl KycgaWQ9M0QiJytuLnV1aWQoKSsnIiBjbGFzcz0zRCJjaGFydHMtdmlld3BvcnQtY2FudmFzIj4n PQorIjwvZGl2PiJ9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3NjcmVlbnNob3QiLFsibGli cy91bmRlcnNjb3JlIl0sZnVuY3Q9CmlvbihlKXtmdW5jdGlvbiB0KGUpe2UuJGVsLmZpbmQoInN2 ZyIpLmxlbmd0aD4wP3IoZSk6bihlKX1mdW5jdGlvbiBuKGUpe3RyeT0Ke3ZhciB0PTNEZS4kZWwu ZmluZCgiLmpxcGxvdC10YXJnZXQiKSxuPTNEdC5qcXBsb3RUb0ltYWdlU3RyKHt9KTtuJiYod2lu ZG93PQoubG9jYXRpb24uaHJlZj0zRG4ucmVwbGFjZSgiaW1hZ2UvcG5nIiwiaW1hZ2Uvb2N0ZXQt c3RyZWFtIikpfWNhdGNoKHIpe2NvbnM9Cm9sZS5kZWJ1ZygiRkFJTEVEIC0gU2NyZWVuc2hvdDo6 X2Zyb21DYW52YXMoKSAtICIrciksZS5lcnJvciYmZS5lcnJvcigiUGxlYT0Kc2UgcmVkdWNlIHlv dXIgY2hhcnQgdG8gYSBzaW5nbGUgcGFuZWwgYW5kIHRyeSBhZ2Fpbi4iKX19ZnVuY3Rpb24gcihl KXt2YXIgPQp0PTNEZS4kZWwsbj0zRGUudXJsLHI9M0RlLm5hbWUscz0zRG5ldyBYTUxTZXJpYWxp emVyLG89M0Rkb2N1bWVudC5jcmVhdGVFbGU9Cm1lbnQoImNhbnZhcyIpLHU9M0QkKG8pLGE9M0R0 LmZpbmQoInN2ZyIpLmxlbmd0aCxmPTNEdC5maW5kKCJzdmciKS5maXJzdCgpLD0KbD0zRHBhcnNl SW50KGYuY3NzKCJoZWlnaHQiKSksYz0zRHBhcnNlSW50KGYuY3NzKCJ3aWR0aCIpKTt1LmF0dHIo IndpZHRoIixjPQoqYSksdS5hdHRyKCJoZWlnaHQiLGwpLCghby5nZXRDb250ZXh0fHwhby5nZXRD b250ZXh0KCIyZCIpKSYmYWxlcnQoIllvdXIgYnI9Cm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlz IGZlYXR1cmUsIHBsZWFzZSB1c2UgYSBtb2Rlcm4gYnJvd3NlciIpO3ZhciBoPTNEbz0KLmdldENv bnRleHQoIjJkIikscD0zRDA7dC5maW5kKCJzdmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9M0Qk KHRoaXMpO2UuYXR0PQpyKHt2ZXJzaW9uOiIxLjEiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8y MDAwL3N2ZyIsd2lkdGg6YyxoZWlnaHQ6bH0pO3ZhciA9CnQ9M0RzLnNlcmlhbGl6ZVRvU3RyaW5n KHRoaXMpO2guZHJhd1N2Zyh0LHAsMCxjLGwpLHArPTNEY30pLHdpbmRvdy5sb2NhdGlvbj0KLmhy ZWY9M0RpKG8sby5nZXRDb250ZXh0KCIyZCIpLCJ3aGl0ZSIpLnJlcGxhY2UoImltYWdlL3BuZyIs ImltYWdlL29jdGV0LXN0PQpyZWFtIil9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9M0RlLndpZHRo LGk9M0RlLmhlaWdodCxzO2lmKG4pe3M9M0R0LmdldEltYWc9CmVEYXRhKDAsMCxyLGkpO3ZhciBv PTNEdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpbz0K bj0zRCJkZXN0aW5hdGlvbi1vdmVyIix0LmZpbGxTdHlsZT0zRG4sdC5maWxsUmVjdCgwLDAscixp KX12YXIgdT0zRGUudG9EYXRhPQpVUkwoImltYWdlL3BuZyIpO3JldHVybiBuJiYodC5jbGVhclJl Y3QoMCwwLHIsaSksdC5wdXRJbWFnZURhdGEocywwLDApLHQuZ2w9Cm9iYWxDb21wb3NpdGVPcGVy YXRpb249M0RvKSx1fWZ1bmN0aW9uIHMoZSl7d2luZG93LmxvY2F0aW9uLmhyZWY9M0QiZGF0YTpu bz0KbmUvbm9uZTtiYXNlNjQsIitidG9hKGEoZSkuc3RyaW5nKX1mdW5jdGlvbiBvKGUpe2Zvcih2 YXIgdCBpbiBkb2N1bWVudC5zdHlsPQplU2hlZXRzKXt2YXIgbj0zRGRvY3VtZW50LnN0eWxlU2hl ZXRzW3RdLHI9M0RuLmNzc1J1bGVzO2lmKHIpZm9yKHZhciBpPTNEMCw9CnM9M0RyLmxlbmd0aDtp PHM7aSsrKXRyeXtlLmZpbmQocltpXS5zZWxlY3RvclRleHQpLmVhY2goZnVuY3Rpb24oZSx0KXt0 LnN0eT0KbGUuY3NzVGV4dCs9M0RyW2ldLnN0eWxlLmNzc1RleHR9KX1jYXRjaChvKXt9fX1mdW5j dGlvbiB1KGUpe3ZhciB0PTNEYShlKSxuPQo9M0R7ZmlsZW5hbWU6bmFtZXx8ImNoYXJ0Iix0eXBl OiJhcHBsaWNhdGlvbi9wZGYiLGhlaWdodDp0LmhlaWdodCx3aWR0aDp0Lnc9CmlkdGgsc2NhbGU6 Mixzdmc6dC5zdHJpbmd9LHI9M0QkKCJib2R5IiksaT0zRHIuZmluZCgiI3ZpZXdwb3J0LWZvcm0i KTtpLmxlbj0KZ3RoPTNEPTNEPTNEMCYmKGk9M0QkKCI8Zm9ybT4iLHtpZDoidmlld3BvcnQtZm9y bSIsbWV0aG9kOiJwb3N0IixhY3Rpb246Imh0PQp0cDovL2V4cG9ydC5oaWdoY2hhcnRzLmNvbS8i LGRpc3BsYXk6Im5vbmUifSksci5hcHBlbmQoaSkpLGkuZW1wdHkoKTtmb3IobmE9Cm1lIGluIG4p e3ZhciBzPTNEJCgiPGlucHV0Lz4iLHt0eXBlOiJoaWRkZW4iLG5hbWU6bmFtZSx2YWx1ZTpuW25h bWVdfSk7aS5hcD0KcGVuZChzKX10cnl7aS5zdWJtaXQoKX1jYXRjaChvKXtjb25zb2xlLmxvZyhv KX19ZnVuY3Rpb24gYShlKXtpZihlLiRlbC5maW5kPQooInN2ZyIpLmxlbmd0aD0zRD0zRDAmJmUu ZXJyb3Ipe2UuZXJyb3IoIk5vIFNWRyBmb3VuZC4gVGhpcyBjaGFydCB0eXBlIGRvZXM9CiBub3Qg c3VwcG9ydCBTVkcvUERGIGV4cG9ydC4iKTtyZXR1cm59dmFyIHQ9M0RlLiRlbCxuPTNEdC5maW5k KCJzdmciKS5sZW5ndD0KaCxyPTNEcGFyc2VJbnQodC5maW5kKCJzdmciKS5maXJzdCgpLmNzcygi aGVpZ2h0IikpLGk9M0RwYXJzZUludCh0LmZpbmQoInN2PQpnIikuZmlyc3QoKS5jc3MoIndpZHRo IikpLHM9M0RuZXcgWE1MU2VyaWFsaXplcix1PTNEJCgiPHN2Zy8+Iik7dS5hdHRyKHt2ZXI9CnNp b246IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDppKm4saGVp Z2h0OnJ9KTt2YXIgYT0zRD0KIiIsZj0zRDA7cmV0dXJuIHQuZmluZCgic3ZnIikuZWFjaChmdW5j dGlvbigpe3ZhciBlPTNEJCh0aGlzKS5jbG9uZSgpO28oZSk7PQp2YXIgdD0zRCQoJzxnIHRyYW5z Zm9ybT0zRCJ0cmFuc2xhdGUoJytmKycsIDApIj4nKTt0LmFwcGVuZChlLmZpbmQoImciKS5maXI9 CnN0KCkpLHUuYXBwZW5kKHQpLGYrPTNEaX0pLHtzdHJpbmc6cy5zZXJpYWxpemVUb1N0cmluZyh1 WzBdKSxoZWlnaHQ6cix3aWR0aD0KOml9fXJldHVybntjcmVhdGVQTkc6dCxjcmVhdGVTVkc6cyxj cmVhdGVQREY6dX19KSxkZWZpbmUoInBsdWdpbi92aWV3cy92aWV3PQplciIsWyJ1dGlscy91dGls cyIsIm12Yy91aS91aS1taXNjIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJwbHVnaW4vdmlld3Mvdmll d3A9Cm9ydCIsInBsdWdpbi9saWJyYXJ5L3NjcmVlbnNob3QiXSxmdW5jdGlvbihlLHQsbixyLGkp e3JldHVybiBCYWNrYm9uZS5WaWV3Lj0KZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUscyl7 dGhpcy5hcHA9M0RlLHRoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0PQpoaXMudmlld3BvcnRf dmlldz0zRG5ldyByKGUpO3ZhciBvPTNEdGhpczt0aGlzLm1lc3NhZ2U9M0RuZXcgdC5NZXNzYWdl O3ZhciA9CnU9M0RuZXcgdC5CdXR0b25NZW51KHtpY29uOiJmYS1jYW1lcmEiLHRpdGxlOiJTY3Jl ZW5zaG90Iix0b29sdGlwOiJEb3dubG9hZD0KIGFzIFBORywgU1ZHIG9yIFBERiBmaWxlIn0pO3Uu YWRkTWVudSh7aWQ6ImJ1dHRvbi1wbmciLHRpdGxlOiJTYXZlIGFzIFBORyIsPQppY29uOiJmYS1m aWxlIixvbmNsaWNrOmZ1bmN0aW9uKCl7by5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7aS5jcmVh dGVQTkcoeyQ9CmVsOm8udmlld3BvcnRfdmlldy4kZWwsdGl0bGU6by5jaGFydC5nZXQoInRpdGxl IiksZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYT0KZ2UudXBkYXRlKHttZXNzYWdlOmUsc3RhdHVz OiJkYW5nZXIifSl9fSl9KX19KSx1LmFkZE1lbnUoe2lkOiJidXR0b24tc3ZnIix0PQppdGxlOiJT YXZlIGFzIFNWRyIsaWNvbjoiZmEtZmlsZS10ZXh0LW8iLG9uY2xpY2s6ZnVuY3Rpb24oKXtvLl93 YWl0KG8uY2hhcnQ9CixmdW5jdGlvbigpe2kuY3JlYXRlU1ZHKHskZWw6by52aWV3cG9ydF92aWV3 LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKT0KLGVycm9yOmZ1bmN0aW9uKGUpe28ubWVz c2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX0pLHUuPQphZGRN ZW51KHtpZDoiYnV0dG9uLXBuZyIsdGl0bGU6IlNhdmUgYXMgUERGIixpY29uOiJmYS1maWxlLW8i LG9uY2xpY2s6ZnVuY3Q9Cmlvbigpe28uYXBwLm1vZGFsLnNob3coe3RpdGxlOiJTZW5kIGNoYXJ0 IGRhdGEgZm9yIFBERiBjcmVhdGlvbiIsYm9keToiR2FsYT0KeHkgZG9lcyBub3QgcHJvdmlkZSBp bnRlZ3JhdGVkIFBERiBleHBvcnQgc2NyaXB0cy4gWW91IG1heSBjbGljayAnQ29udGludWUnPQog dG8gY3JlYXRlIHRoZSBQREYgYnkgdXNpbmcgYSAzcmQgcGFydHkgc2VydmljZSAoaHR0cHM6Ly9l eHBvcnQuaGlnaGNoYXJ0cy49CmNvbSkuIixidXR0b25zOntDYW5jZWw6ZnVuY3Rpb24oKXtvLmFw cC5tb2RhbC5oaWRlKCl9LENvbnRpbnVlOmZ1bmN0aW9uKCl7bz0KLmFwcC5tb2RhbC5oaWRlKCks by5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7aS5jcmVhdGVQREYoeyRlbDpvLnZpZXdwb3J0X3Zp PQpldy4kZWwsdGl0bGU6by5jaGFydC5nZXQoInRpdGxlIiksZXJyb3I6ZnVuY3Rpb24oZSl7by5t ZXNzYWdlLnVwZGF0ZSh7bWVzc2E9CmdlOmUsc3RhdHVzOiJkYW5nZXIifSl9fSl9KX19fSl9fSks dGhpcy5wb3J0bGV0PTNEbmV3IG4uVmlldyh7aWNvbjoiZmEtYmFyLT0KY2hhcnQtbyIsdGl0bGU6 IlZpZXdwb3J0IixzY3JvbGxhYmxlOiExLG9wZXJhdGlvbnM6e2VkaXRfYnV0dG9uOm5ldyB0LkJ1 dHRvPQpuSWNvbih7aWNvbjoiZmEtZWRpdCIsdG9vbHRpcDoiQ3VzdG9taXplIHRoaXMgY2hhcnQi LHRpdGxlOiJFZGl0b3IiLG9uY2xpY2s9CjpmdW5jdGlvbigpe28uX3dhaXQoby5jaGFydCxmdW5j dGlvbigpe28uYXBwLmdvKCJlZGl0b3IiKX0pfX0pLHBpY3R1cmVfYnV0dD0Kb25fbWVudTp1fX0p LHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCksdGhpcy5wb3J0bGV0LmFwcGVu ZCh0aGlzPQoudmlld3BvcnRfdmlldy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQu JGVsKTt2YXIgbz0zRHRoaXM7dGhpcy5jaGE9CnJ0Lm9uKCJjaGFuZ2U6dGl0bGUiLGZ1bmN0aW9u KCl7by5fcmVmcmVzaFRpdGxlKCl9KX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuJD0KZWwuc2hvdygp LCQod2luZG93KS50cmlnZ2VyKCJyZXNpemUiKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhp ZGUoKX0sX3JlPQpmcmVzaFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0LmdldCgi dGl0bGUiKTt0aGlzLnBvcnRsZXQudGl0bGUoZSk9Cn0sX3dhaXQ6ZnVuY3Rpb24oZSx0KXt0aGlz LmFwcC5kZWZlcnJlZC5yZWFkeSgpP3QoKTp0aGlzLm1lc3NhZ2UudXBkYXRlKHttZT0Kc3NhZ2U6 IllvdXIgY2hhcnQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gUGxlYXNlIHdhaXQgYW5k IHRyeSBhZ2Fpbi4iPQp9KX19KX0pLGRlZmluZSgibXZjL3VpL3VpLXRhYnMiLFsidXRpbHMvdXRp bHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib249CmUuVmlldy5leHRlbmQoe29wdGlvbnNE ZWZhdWx0Ont0aXRsZV9uZXc6IiIsb3BlcmF0aW9uczpudWxsLG9ubmV3Om51bGwsbWF4Oj0KbnVs bCxvbmNoYW5nZTpudWxsfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT0zRCEx LHRoaXMuJG5hdj0zRG51PQpsbCx0aGlzLiRjb250ZW50PTNEbnVsbCx0aGlzLmZpcnN0X3RhYj0z RG51bGwsdGhpcy5jdXJyZW50X2lkPTNEbnVsbCx0aGlzLm89CnB0aW9ucz0zRGUubWVyZ2UodCx0 aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpbz0K bnMpKTt0aGlzLiRuYXY9M0RuLmZpbmQoIi50YWItbmF2aWdhdGlvbiIpLHRoaXMuJGNvbnRlbnQ9 M0RuLmZpbmQoIi50YWItY29uPQp0ZW50IiksdGhpcy5zZXRFbGVtZW50KG4pLHRoaXMubGlzdD0z RHt9O3ZhciByPTNEdGhpczt0aGlzLm9wdGlvbnMub3BlcmF0aW89Cm5zJiYkLmVhY2godGhpcy5v cHRpb25zLm9wZXJhdGlvbnMsZnVuY3Rpb24oZSx0KXt0LiRlbC5wcm9wKCJpZCIsZSksci4kbmF2 Lj0KZmluZCgiLm9wZXJhdGlvbnMiKS5hcHBlbmQodC4kZWwpfSk7aWYodGhpcy5vcHRpb25zLm9u bmV3KXt2YXIgaT0zRCQodGhpcy5fPQp0ZW1wbGF0ZV90YWJfbmV3KHRoaXMub3B0aW9ucykpO3Ro aXMuJG5hdi5hcHBlbmQoaSksaS50b29sdGlwKHt0aXRsZToiQWRkIGE9CiBuZXcgdGFiIixwbGFj ZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyOnIuJGVsfSksaS5vbigiY2xpY2siLGZ1bmN0aW9uKGUp e2kudD0Kb29sdGlwKCJoaWRlIiksci5vcHRpb25zLm9ubmV3KCl9KX19LHNpemU6ZnVuY3Rpb24o KXtyZXR1cm4gXy5zaXplKHRoaXMubGlzPQp0KX0sY3VycmVudDpmdW5jdGlvbigpe3JldHVybiB0 aGlzLiRlbC5maW5kKCIudGFiLXBhbmUuYWN0aXZlIikuYXR0cigiaWQiKX09CixhZGQ6ZnVuY3Rp b24oZSl7dmFyIHQ9M0R0aGlzLG49M0RlLmlkLHI9M0QkKHRoaXMuX3RlbXBsYXRlX3RhYihlKSks aT0zRCQodD0KaGlzLl90ZW1wbGF0ZV90YWJfY29udGVudChlKSk7dGhpcy5saXN0W25dPTNEZS5v bmRlbD8hMDohMSx0aGlzLm9wdGlvbnMub25uPQpldz90aGlzLiRuYXYuZmluZCgiI25ldy10YWIi KS5iZWZvcmUocik6dGhpcy4kbmF2LmFwcGVuZChyKSxpLmFwcGVuZChlLiRlbCk9Cix0aGlzLiRj b250ZW50LmFwcGVuZChpKSx0aGlzLnNpemUoKT0zRD0zRDEmJihyLmFkZENsYXNzKCJhY3RpdmUi KSxpLmFkZENsYT0Kc3MoImFjdGl2ZSIpLHRoaXMuZmlyc3RfdGFiPTNEbiksdGhpcy5vcHRpb25z Lm1heCYmdGhpcy5zaXplKCk+PTNEdGhpcy5vcHRpPQpvbnMubWF4JiZ0aGlzLiRlbC5maW5kKCIj bmV3LXRhYiIpLmhpZGUoKTtpZihlLm9uZGVsKXt2YXIgcz0zRHIuZmluZCgiI2RlbGU9CnRlIik7 cy50b29sdGlwKHt0aXRsZToiRGVsZXRlIHRoaXMgdGFiIixwbGFjZW1lbnQ6ImJvdHRvbSIsY29u dGFpbmVyOnQuJGVsfT0KKSxzLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcy50b29sdGlw KCJkZXN0cm95IiksdC4kZWwuZmluZCgiLnRvb2x0aXAiPQopLnJlbW92ZSgpLGUub25kZWwoKSwh MX0pfXIub24oImNsaWNrIixmdW5jdGlvbihyKXtyLnByZXZlbnREZWZhdWx0KCksZS5vbmM9Cmxp Y2s/ZS5vbmNsaWNrKCk6dC5zaG93KG4pfSksdGhpcy5jdXJyZW50X2lkfHwodGhpcy5jdXJyZW50 X2lkPTNEbil9LGRlbDpmdT0KbmN0aW9uKGUpe3RoaXMuJGVsLmZpbmQoIiN0YWItIitlKS5yZW1v dmUoKSx0aGlzLiRlbC5maW5kKCIjIitlKS5yZW1vdmUoKSx0PQpoaXMuZmlyc3RfdGFiPTNEPTNE ZSYmKHRoaXMuZmlyc3RfdGFiPTNEbnVsbCksdGhpcy5maXJzdF90YWIhPTNEbnVsbCYmdGhpcy49 CnNob3codGhpcy5maXJzdF90YWIpLHRoaXMubGlzdFtlXSYmZGVsZXRlIHRoaXMubGlzdFtlXSx0 aGlzLnNpemUoKTx0aGlzLm9wdD0KaW9ucy5tYXgmJnRoaXMuJGVsLmZpbmQoIiNuZXctdGFiIiku c2hvdygpfSxkZWxSZW1vdmFibGU6ZnVuY3Rpb24oKXtmb3IodmFyPQogZSBpbiB0aGlzLmxpc3Qp dGhpcy5kZWwoZSl9LHNob3c6ZnVuY3Rpb24oZSl7dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhp cy49CnZpc2libGU9M0QhMCxlJiYodGhpcy4kZWwuZmluZCgiI3RhYi0iK3RoaXMuY3VycmVudF9p ZCkucmVtb3ZlQ2xhc3MoImFjdGl2ZT0KIiksdGhpcy4kZWwuZmluZCgiIyIrdGhpcy5jdXJyZW50 X2lkKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWwuZmluZCgiPQojdGFiLSIrZSkuYWRk Q2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsLmZpbmQoIiMiK2UpLmFkZENsYXNzKCJhY3RpdmUiKSx0 aGlzLmM9CnVycmVudF9pZD0zRGUpLHRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25z Lm9uY2hhbmdlKGUpfSxoaWRlOmZ1bmN0aT0Kb24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0Iiks dGhpcy52aXNpYmxlPTNEITF9LGhpZGVPcGVyYXRpb246ZnVuY3Rpb24oZSl7PQp0aGlzLiRuYXYu ZmluZCgiIyIrZSkuaGlkZSgpfSxzaG93T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuJG5hdi5m aW5kKCIjIis9CmUpLnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0 aGlzLiRuYXYuZmluZCgiIyIrZSk7bi5vZmYoIj0KY2xpY2siKSxuLm9uKCJjbGljayIsdCl9LHRp dGxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRlbC5maW5kKCIjdGFiLXRpPQp0bGUtdGV4 dC0iK2UpO3JldHVybiB0JiZuLmh0bWwodCksbi5odG1sKCl9LHJldGl0bGU6ZnVuY3Rpb24oZSl7 dmFyIHQ9M0QwO2Y9Cm9yKHZhciBuIGluIHRoaXMubGlzdCl0aGlzLnRpdGxlKG4sKyt0KyI6ICIr ZSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cj0Kbic8ZGl2IGNsYXNzPTNEInVpLXRhYnMg dGFiYmFibGUgdGFicy1sZWZ0Ij48dWwgaWQ9M0QidGFiLW5hdmlnYXRpb24iIGNsYXNzPQo9M0Qi dGFiLW5hdmlnYXRpb24gbmF2IG5hdi10YWJzIj48ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0 eWxlPTNEImZsb2F0OiA9CnJpZ2h0OyBtYXJnaW4tYm90dG9tOiA0cHg7Ij48L2Rpdj48L3VsPjxk aXYgaWQ9M0QidGFiLWNvbnRlbnQiIGNsYXNzPTNEInRhYj0KLWNvbnRlbnQiLz48L2Rpdj4nfSxf dGVtcGxhdGVfdGFiX25ldzpmdW5jdGlvbihlKXtyZXR1cm4nPGxpIGlkPTNEIm5ldy10YWIiPQo+ PGEgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCk7Ij48aSBjbGFzcz0zRCJ1aS10YWJzLWFkZCBm YSBmYS1wbHVzLWNpcmNsZSI9Ci8+JytlLnRpdGxlX25ldysiPC9hPiIrIjwvbGk+In0sX3RlbXBs YXRlX3RhYjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGkgaWQ9Cj0zRCJ0YWItJytlLmlkKyciIGNs YXNzPTNEInRhYi1lbGVtZW50Ij4nKyc8YSBpZD0zRCJ0YWItdGl0bGUtbGluay0nK2UuaWQrJz0K IiB0aXRsZT0zRCIiIGhyZWY9M0QiIycrZS5pZCsnIiBkYXRhLW9yaWdpbmFsLXRpdGxlPTNEIiI+ JysnPHNwYW4gaWQ9M0QidGFiPQotdGl0bGUtdGV4dC0nK2UuaWQrJyIgY2xhc3M9M0QidGFiLXRp dGxlLXRleHQiPicrZS50aXRsZSsiPC9zcGFuPiI7cmV0dXJuIGU9Ci5vbmRlbCYmKHQrPTNEJzxp IGlkPTNEImRlbGV0ZSIgY2xhc3M9M0QidWktdGFicy1kZWxldGUgZmEgZmEtbWludXMtY2lyY2xl Ij0KLz4nKSx0Kz0zRCI8L2E+PC9saT4iLHR9LF90ZW1wbGF0ZV90YWJfY29udGVudDpmdW5jdGlv bihlKXtyZXR1cm4nPGRpdiBpZD0KPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJ0YWItcGFuZSIvPid9 fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS10PQphYmxlIixbInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7cm93Om51bGws cm89CndfY291bnQ6MCxvcHRpb25zRGVmYXVsdDp7Y29udGVudDoiTm8gY29udGVudCBhdmFpbGFi bGUuIixvbmNoYW5nZTpudWxsLG9uZD0KYmxjbGljazpudWxsLG9uY29uZmlybTpudWxsLGNsczoi dWktdGFibGUiLGNsc190cjoiIn0sZXZlbnRzOntjbGljazoiX29uY2xpPQpjayIsZGJsY2xpY2s6 Il9vbmRibGNsaWNrIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1l cmdlKHQ9Cix0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQodGhpcy5fdGVtcGxhdGUodGhp cy5vcHRpb25zKSk7dGhpcy4kdGhlYWQ9Cj0zRG4uZmluZCgidGhlYWQiKSx0aGlzLiR0Ym9keT0z RG4uZmluZCgidGJvZHkiKSx0aGlzLiR0bWVzc2FnZT0zRG4uZmluZCgidD0KbWVzc2FnZSIpLHRo aXMuc2V0RWxlbWVudChuKSx0aGlzLnJvdz0zRHRoaXMuX3JvdygpfSxhZGRIZWFkZXI6ZnVuY3Rp b24oZSl7PQp2YXIgdD0zRCQoIjx0aD48L3RoPiIpO3QuYXBwZW5kKGUpLHRoaXMucm93LmFwcGVu ZCh0KX0sYXBwZW5kSGVhZGVyOmZ1bmN0aW89Cm4oKXt0aGlzLiR0aGVhZC5hcHBlbmQodGhpcy5y b3cpLHRoaXMucm93PTNEJCgiPHRyPjwvdHI+Iil9LGFkZDpmdW5jdGlvbihlLD0KdCxuKXt2YXIg cj0zRCQoIjx0ZD48L3RkPiIpO3QmJnIuY3NzKCJ3aWR0aCIsdCksbiYmci5jc3MoInRleHQtYWxp Z24iLG4pLHIuPQphcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5kKHIpfSxhcHBlbmQ6ZnVuY3Rpb24o ZSx0KXt0aGlzLl9jb21taXQoZSx0LCExKX0scHI9CmVwZW5kOmZ1bmN0aW9uKGUsdCl7dGhpcy5f Y29tbWl0KGUsdCwhMCl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kZWwuZj0KaW5kKCIj IitlKX0sZGVsOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy4kdGJvZHkuZmluZCgiIyIrZSk7dC5s ZW5ndGg+MCYmKHQuPQpyZW1vdmUoKSx0aGlzLnJvd19jb3VudC0tLHRoaXMuX3JlZnJlc2goKSl9 LGRlbEFsbDpmdW5jdGlvbigpe3RoaXMuJHRib2R5LmU9Cm1wdHkoKSx0aGlzLnJvd19jb3VudD0z RDAsdGhpcy5fcmVmcmVzaCgpfSx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmJlZm9yZT0zRD0KdGhp cy4kdGJvZHkuZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpLGUhPTNEPTNEdW5kZWZpbmVkJiYo dGhpcy4kdGJvZHkuZmluPQpkKCJ0ciIpLnJlbW92ZUNsYXNzKCJjdXJyZW50IiksZSYmdGhpcy4k dGJvZHkuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImN1cnJlbnQ9CiIpKTt2YXIgdD0zRHRoaXMuJHRi b2R5LmZpbmQoIi5jdXJyZW50IikuYXR0cigiaWQiKTtyZXR1cm4gdD0zRD0zRD0zRHVuZGVmaT0K bmVkP251bGw6KHQhPTNEdGhpcy5iZWZvcmUmJnRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5v cHRpb25zLm9uY2hhbmdlKGUpPQosdCl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGJv ZHkuZmluZCgidHIiKS5sZW5ndGh9LF9jb21taXQ6ZnVuY3Rpb249CihlLHQsbil7dGhpcy5kZWwo ZSksdGhpcy5yb3cuYXR0cigiaWQiLGUpLG4/dGhpcy4kdGJvZHkucHJlcGVuZCh0aGlzLnJvdyk6 dD0KaGlzLiR0Ym9keS5hcHBlbmQodGhpcy5yb3cpLHQmJih0aGlzLnJvdy5oaWRlKCksdGhpcy5y b3cuZmFkZUluKCkpLHRoaXMucm93PQo9M0R0aGlzLl9yb3coKSx0aGlzLnJvd19jb3VudCsrLHRo aXMuX3JlZnJlc2goKX0sX3JvdzpmdW5jdGlvbigpe3JldHVybiAkKCc9Cjx0ciBjbGFzcz0zRCIn K3RoaXMub3B0aW9ucy5jbHNfdHIrJyI+PC90cj4nKX0sX29uY2xpY2s6ZnVuY3Rpb24oZSl7dmFy IHQ9Cj0zRHRoaXMudmFsdWUoKSxuPTNEJChlLnRhcmdldCkuY2xvc2VzdCgidHIiKS5hdHRyKCJp ZCIpO24hPTNEIiImJm4mJnQhPTNEbj0KJiYodGhpcy5vcHRpb25zLm9uY29uZmlybT90aGlzLm9w dGlvbnMub25jb25maXJtKG4pOnRoaXMudmFsdWUobikpfSxfb25kYmxjPQpsaWNrOmZ1bmN0aW9u KGUpe3ZhciB0PTNEdGhpcy52YWx1ZSgpO3QmJnRoaXMub3B0aW9ucy5vbmRibGNsaWNrJiZ0aGlz Lm9wdGk9Cm9ucy5vbmRibGNsaWNrKHQpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMucm93X2Nv dW50PTNEPTNEMD90aGlzLiR0bWVzc2FnZT0KLnNob3coKTp0aGlzLiR0bWVzc2FnZS5oaWRlKCl9 LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48dGFibGUgY2xhPQpzcz0zRCInK2Uu Y2xzKyciPicrIjx0aGVhZD48L3RoZWFkPiIrIjx0Ym9keT48L3Rib2R5PiIrIjwvdGFibGU+Iisi PHRtZXNzYWc9CmU+IitlLmNvbnRlbnQrIjwvdG1lc3NhZ2U+IisiPGRpdj4ifX0pO3JldHVybntW aWV3OnR9fSksZGVmaW5lKCJwbHVnaW4vdmlldz0Kcy9ncm91cCIsWyJtdmMvdWkvdWktdGFibGUi LCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSx0LG4pPQp7cmV0dXJu IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHIsaSl7dGhpcy5hcHA9 M0RyO3ZhciBzPQo9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLmdyb3Vw PTNEaS5ncm91cCx0aGlzLmdyb3VwX2tleT0zRG49CmV3IHQuSW5wdXQoe3BsYWNlaG9sZGVyOiJE YXRhIGxhYmVsIixvbmNoYW5nZTpmdW5jdGlvbihlKXtzLmdyb3VwLnNldCgia2V5Ij0KLGUpfX0p LHRoaXMudGFibGU9M0RuZXcgZS5WaWV3KHtjb250ZW50OiJObyBkYXRhIGNvbHVtbi4ifSk7dmFy IG89M0QkKCI8ZGl2PQovPiIpO28uYXBwZW5kKG4ud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJQ cm92aWRlIGEgbGFiZWw6In0pKS4kZWwpKSxvLmFwcGU9Cm5kKG4ud3JhcCh0aGlzLmdyb3VwX2tl eS4kZWwpKSxvLmFwcGVuZChuLndyYXAoKG5ldyB0LkxhYmVsKHt0aXRsZToiU2VsZWN0ID0KY29s dW1uczoifSkpLiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLnRhYmxlLiRlbCkpLHRoaXMuc2V0 RWxlbWVudChvKTt2YXIgPQpzPTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6ZGF0YXNldF9p ZCIsZnVuY3Rpb24oKXtzLl9yZWZyZXNoVGFibGUoKX0pLHQ9Cmhpcy5jaGFydC5vbigiY2hhbmdl OnR5cGUiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaFRhYmxlKCl9KSx0aGlzLmdyb3VwLm9uKCJjaD0K YW5nZTprZXkiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaEdyb3VwS2V5KCl9KSx0aGlzLmdyb3VwLm9u KCJjaGFuZ2UiLGZ1bmN0aW9uPQooKXtzLl9yZWZyZXNoR3JvdXAoKX0pLHRoaXMuX3JlZnJlc2hU YWJsZSgpLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMuX3I9CmVmcmVzaEdyb3VwKCl9LF9y ZWZyZXNoVGFibGU6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJkYXRhc2V0X2lk Ij0KKSxuPTNEdGhpcy5jaGFydC5nZXQoInR5cGUiKTtpZighZXx8IW4pcmV0dXJuO3ZhciByPTNE dGhpcyxpPTNEdGhpcy5jaGFydC5kPQplZmluaXRpb247dGhpcy50YWJsZS5kZWxBbGwoKTt2YXIg cz0zRHt9O2Zvcih2YXIgbyBpbiBpLmNvbHVtbnMpe3ZhciB1PTNEaS49CmNvbHVtbnNbb107aWYo IXUpe2NvbnNvbGUuZGVidWcoIkdyb3VwOjpfcmVmcmVzaFRhYmxlKCkgLSBTa2lwcGluZyBjb2x1 bW4gZD0KZWZpbml0aW9uLiIpO2NvbnRpbnVlfXZhciBhPTNEbmV3IHQuU2VsZWN0LlZpZXcoe2lk OiJzZWxlY3RfIitvLHdhaXQ6ITB9KSxmPQo9M0R1LnRpdGxlO3UuaXNfdW5pcXVlJiYoZis9M0Qi Jm5ic3A7KGFsbCBkYXRhIGxhYmVscykiKSx0aGlzLnRhYmxlLmFkZChmLCI9CjI1JSIpLHRoaXMu dGFibGUuYWRkKGEuJGVsKSx0aGlzLnRhYmxlLmFwcGVuZChvKSxzW29dPTNEYX10aGlzLmNoYXJ0 LnN0YXRlKD0KIndhaXQiLCJMb2FkaW5nIG1ldGFkYXRhLi4uIik7dmFyIGw9M0R0aGlzLmFwcC5k ZWZlcnJlZC5yZWdpc3RlcigpLGM9M0R7aWQ6PQplLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7Zm9yKHZh ciB0IGluIHMpci5fYWRkUm93KHQsZSxzLGkuY29sdW1uc1t0XSk7ci5jaGFydC49CnN0YXRlKCJv ayIsIk1ldGFkYXRhIGluaXRpYWxpemVkLi4uIiksci5hcHAuZGVmZXJyZWQuZG9uZShsKX19O3Ro aXMuYXBwLmRhdD0KYXNldHMucmVxdWVzdChjKX0sX2FkZFJvdzpmdW5jdGlvbihlLHQsbixyKXt2 YXIgaT0zRHRoaXMscz0zRHIuaXNfbGFiZWwsbz0KPTNEci5pc19hdXRvLHU9M0RyLmlzX251bWVy aWMsYT0zRHIuaXNfdW5pcXVlLGY9M0RyLmlzX3plcm8sbD0zRFtdLGM9M0RuW2VdPQo7byYmbC5w dXNoKHtsYWJlbDoiQ29sdW1uOiBSb3cgTnVtYmVyIix2YWx1ZToiYXV0byJ9KSxmJiZsLnB1c2go e2xhYmVsOiJDb2w9CnVtbjogTm9uZSIsdmFsdWU6Inplcm8ifSk7dmFyIGg9M0R0Lm1ldGFkYXRh X2NvbHVtbl90eXBlcztmb3IodmFyIHAgaW4gaCl7dj0KYXIgZD0zRCExO2hbcF09M0Q9M0QiaW50 Inx8aFtwXT0zRD0zRCJmbG9hdCI/ZD0zRHU6ZD0zRHMsZCYmbC5wdXNoKHtsYWJlbDoiPQpDb2x1 bW46ICIrKHBhcnNlSW50KHApKzEpKyIgWyIraFtwXSsiXSIsdmFsdWU6cH0pfWMudXBkYXRlKGwp LGEmJnRoaXMuY2hhcnQ9Ci5ncm91cHMuZmlyc3QoKSYmdGhpcy5ncm91cC5zZXQoZSx0aGlzLmNo YXJ0Lmdyb3Vwcy5maXJzdCgpLmdldChlKSk7aWYoIWMuZT0KeGlzdHModGhpcy5ncm91cC5nZXQo ZSkpKXt2YXIgdj0zRGMuZmlyc3QoKTtjb25zb2xlLmRlYnVnKCdHcm91cCgpOjpfYWRkUm93PQoo KSAtIFN3aXRjaGluZyBtb2RlbCB2YWx1ZSBmcm9tICInK3RoaXMuZ3JvdXAuZ2V0KGUpKyciIHRv ICInK3YrJyIuJyksdGhpcy49Cmdyb3VwLnNldChlLHYpfWMudmFsdWUodGhpcy5ncm91cC5nZXQo ZSkpLHRoaXMuZ3JvdXAub2ZmKCJjaGFuZ2U6IitlKSx0aGlzLj0KZ3JvdXAub24oImNoYW5nZToi K2UsZnVuY3Rpb24oKXtjLnZhbHVlKGkuZ3JvdXAuZ2V0KGUpKX0pLGMuc2V0T25DaGFuZ2UoZnVu PQpjdGlvbih0KXthP2kuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rpb24obil7bi5zZXQoZSx0KX0p OmkuZ3JvdXAuc2V0KGUsdCksaS49CmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKX0pLGMuc2hvdygp fSxfcmVmcmVzaEdyb3VwOmZ1bmN0aW9uKCl7dGhpcy5ncm91cC5zZT0KdCgiZGF0ZSIsbi50aW1l KCkpfSxfcmVmcmVzaEdyb3VwS2V5OmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmdyb3VwLmdldCgi a2V5PQoiKTtlPTNEPTNEPTNEdW5kZWZpbmVkJiYoZT0zRCIiKSx0aGlzLmdyb3VwX2tleS52YWx1 ZShlKX19KX0pLGRlZmluZSgicGx1Z2k9Cm4vbGlicmFyeS91aS10YWJsZS1mb3JtIixbIm12Yy91 aS91aS10YWJsZSIsIm12Yy91aS91aS1taXNjIiwidXRpbHMvdXRpbHMiXT0KLGZ1bmN0aW9uKGUs dCxuKXt2YXIgcj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dGl0bGU6 IiIsY29uPQp0ZW50OiIiLG1vZGU6IiJ9LGxpc3Q6W10saW5pdGlhbGl6ZTpmdW5jdGlvbihyLGkp e3RoaXMuYXBwPTNEcix0aGlzLm9wdGlvbnM9Cj0zRG4ubWVyZ2UoaSx0aGlzLm9wdGlvbnNEZWZh dWx0KSx0aGlzLnRhYmxlX3RpdGxlPTNEbmV3IHQuTGFiZWwoe3RpdGxlOnRoaT0Kcy5vcHRpb25z LnRpdGxlfSksdGhpcy50YWJsZT0zRG5ldyBlLlZpZXcoe2NvbnRlbnQ6dGhpcy5vcHRpb25zLmNv bnRlbnR9KTt2PQphciBzPTNEJCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtIi8+Jyk7dGhp cy5vcHRpb25zLnRpdGxlJiZzLmFwcGVuZChuLnc9CnJhcCh0aGlzLnRhYmxlX3RpdGxlLiRlbCkp LHMuYXBwZW5kKG4ud3JhcCh0aGlzLnRhYmxlLiRlbCkpLHRoaXMuc2V0RWxlbWVudD0KKHMpfSx0 aXRsZTpmdW5jdGlvbihlKXt0aGlzLnRhYmxlX3RpdGxlLnRpdGxlKGUpfSx1cGRhdGU6ZnVuY3Rp b24oZSx0KXt0aGlzPQoudGFibGUuZGVsQWxsKCksdGhpcy5saXN0PTNEW107Zm9yKHZhciBuIGlu IGUpdGhpcy5fYWRkKGVbbl0uaWR8fG4sZVtuXSx0KTs9CmZvcih2YXIgbiBpbiB0aGlzLmxpc3Qp dGhpcy5saXN0W25dLnRyaWdnZXIoImNoYW5nZSIpfSxfYWRkOmZ1bmN0aW9uKGUsbixyKT0Ke3Zh ciBpPTNEdGhpcyxzPTNEbnVsbCxvPTNEbi50eXBlO3N3aXRjaChvKXtjYXNlInRleHQiOnM9M0Ru ZXcgdC5JbnB1dCh7aWQ6PQoiZmllbGQtIitlLHBsYWNlaG9sZGVyOm4ucGxhY2Vob2xkZXIsdmFs dWU6ci5nZXQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci49CnNldChlLHQpfX0pO2JyZWFrO2Nh c2UicmFkaW9idXR0b24iOnM9M0RuZXcgdC5SYWRpb0J1dHRvbi5WaWV3KHtpZDoiZmllbGQtIj0K K2UsZGF0YTpuLmRhdGEsdmFsdWU6ci5nZXQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQo ZSx0KTt2YXIgcz0zRF8uZmluPQpkV2hlcmUobi5kYXRhLHt2YWx1ZTp0fSk7aWYocyYmcy5vcGVy YXRpb25zKXt2YXIgbz0zRHMub3BlcmF0aW9ucztmb3IodmFyIHU9CiBpbiBvLnNob3cpe3ZhciBh PTNEby5zaG93W3VdO2kudGFibGUuZ2V0KGEpLnNob3coKX1mb3IodmFyIHUgaW4gby5oaWRlKXt2 YT0KciBhPTNEby5oaWRlW3VdO2kudGFibGUuZ2V0KGEpLmhpZGUoKX19fX0pO2JyZWFrO2Nhc2Ui c2VsZWN0IjpzPTNEbmV3IHQuU2VsPQplY3QuVmlldyh7aWQ6ImZpZWxkLSIrZSxkYXRhOm4uZGF0 YSx2YWx1ZTpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvbih0KXtyLnM9CmV0KGUsdCk7dmFyIHM9 M0RfLmZpbmRXaGVyZShuLmRhdGEse3ZhbHVlOnR9KTtpZihzJiZzLm9wZXJhdGlvbnMpe3ZhciBv PTNEcz0KLm9wZXJhdGlvbnM7Zm9yKHZhciB1IGluIG8uc2hvdyl7dmFyIGE9M0RvLnNob3dbdV07 aS50YWJsZS5nZXQoYSkuc2hvdygpfWZvPQpyKHZhciB1IGluIG8uaGlkZSl7dmFyIGE9M0RvLmhp ZGVbdV07aS50YWJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlYWs7Y2FzZSI9CmRhdGFzZXQiOnM9 M0RuZXcgdC5TZWxlY3QuVmlldyh7aWQ6ImZpZWxkLSIrZSxvbmNoYW5nZTpmdW5jdGlvbih0KXty LnNldChlLD0KdCl9fSksaS5hcHAuZGF0YXNldHMub24oImFsbCIsZnVuY3Rpb24oKXt2YXIgdD0z RFtdO2kuYXBwLmRhdGFzZXRzLmVhY2goZnVuPQpjdGlvbihlKXtlLmdldCgiZGF0YXR5cGVfaWQi KT0zRD0zRG4uZGF0YSYmdC5wdXNoKHt2YWx1ZTplLmdldCgiaWQiKSxsYWJlbDo9CmUuZ2V0KCJu YW1lIil9KX0pLHMudXBkYXRlKHQpLHIuZ2V0KGUpfHxyLnNldChlLHMuZmlyc3QoKSkscy52YWx1 ZShyLmdldChlKT0KKX0pLGkuYXBwLmRhdGFzZXRzLnRyaWdnZXIoImFsbC5kYXRhc2V0cyIpO2Jy ZWFrO2Nhc2UidGV4dGFyZWEiOnM9M0RuZXcgdC5UPQpleHRhcmVhKHtpZDoiZmllbGQtIitlLG9u Y2hhbmdlOmZ1bmN0aW9uKCl7ci5zZXQoZSxzLnZhbHVlKCkpfX0pO2JyZWFrO2Nhc2U9CiJzZXBh cmF0b3IiOnM9M0QkKCI8ZGl2Lz4iKTticmVhaztkZWZhdWx0OnM9M0RuZXcgdC5JbnB1dCh7aWQ6 ImZpZWxkLSIrZSxwbD0KYWNlaG9sZGVyOm4ucGxhY2Vob2xkZXIsdHlwZTpuLnR5cGUsb25jaGFu Z2U6ZnVuY3Rpb24oKXtyLnNldChlLHMudmFsdWUoKSl9PQp9KX1pZihvIT0zRCJzZXBhcmF0b3Ii KXtyLmdldChlKXx8ci5zZXQoZSxuLmluaXQpLHMudmFsdWUoci5nZXQoZSkpLHRoaXMubGk9CnN0 W2VdPTNEczt2YXIgdT0zRCQoIjxkaXYvPiIpO3UuYXBwZW5kKHMuJGVsKSxuLmluZm8mJnUuYXBw ZW5kKCc8ZGl2IGNsYXNzPQo9M0QidWktdGFibGUtZm9ybS1pbmZvIj4nK24uaW5mbysiPC9kaXY+ IiksdGhpcy5vcHRpb25zLnN0eWxlPTNEPTNEImJvbGQiPyg9CnRoaXMudGFibGUuYWRkKChuZXcg dC5MYWJlbCh7dGl0bGU6bi50aXRsZSxjbHM6ImZvcm0tbGFiZWwifSkpLiRlbCksdGhpcy50YT0K YmxlLmFkZCh1KSk6KHRoaXMudGFibGUuYWRkKCc8c3BhbiBjbGFzcz0zRCJ1aS10YWJsZS1mb3Jt LXRpdGxlIj4nK24udGl0bGUrPQoiPC9zcGFuPiIsIjI1JSIpLHRoaXMudGFibGUuYWRkKHUpKX1l bHNlIHRoaXMudGFibGUuYWRkKCc8ZGl2IGNsYXNzPTNEInVpLXQ9CmFibGUtZm9ybS1zZXBhcmF0 b3IiPicrbi50aXRsZSsiOjxkaXYvPiIpLHRoaXMudGFibGUuYWRkKCQoIjxkaXYvPiIpKTt0aGlz Lj0KdGFibGUuYXBwZW5kKGUpLG4uaGlkZSYmdGhpcy50YWJsZS5nZXQoZSkuaGlkZSgpfX0pO3Jl dHVybntWaWV3OnJ9fSksZGVmaW5lPQooInBsdWdpbi92aWV3cy9zZXR0aW5ncyIsWyJtdmMvdWkv dWktbWlzYyIsInBsdWdpbi9saWJyYXJ5L3VpLXRhYmxlLWZvcm0iLCI9CnV0aWxzL3V0aWxzIl0s ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZTpm dW5jdD0KaW9uKGUsbil7dGhpcy5hcHA9M0RlO3ZhciByPTNEdGhpczt0aGlzLmNoYXJ0PTNEdGhp cy5hcHAuY2hhcnQsdGhpcy5mb3JtPTNEPQpuZXcgdC5WaWV3KGUse3RpdGxlOiJDb25maWd1cmF0 aW9uIixjb250ZW50OiJUaGlzIGNoYXJ0IHR5cGUgZG9lcyBub3QgcHJvdmk9CmRlIGFueSBvcHRp b25zLiJ9KSx0aGlzLnNldEVsZW1lbnQodGhpcy5mb3JtLiRlbCk7dmFyIHI9M0R0aGlzO3RoaXMu Y2hhcnQubz0KbigiY2hhbmdlIixmdW5jdGlvbigpe3IuX3JlZnJlc2goKX0pfSxfcmVmcmVzaDpm dW5jdGlvbigpe3ZhciBlPTNEdGhpcy5jaGFyPQp0LmRlZmluaXRpb247aWYoIWUpcmV0dXJuO3Ro aXMuZm9ybS50aXRsZShlLmNhdGVnb3J5KyIgLSAiK2UudGl0bGUrIjoiKSx0aGk9CnMuZm9ybS51 cGRhdGUoZS5zZXR0aW5ncyx0aGlzLmNoYXJ0LnNldHRpbmdzKX19KX0pLGRlZmluZSgicGx1Z2lu L3ZpZXdzL3R5cD0KZXMiLFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktbWlzYyJdLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0PQplbmQoe29wdGlvbnNEZWZhdWx0OntvbmNo YW5nZTpudWxsLG9uZGJsY2xpY2s6bnVsbH0sZXZlbnRzOntjbGljazoiX29uY2xpY2s9CiIsZGJs Y2xpY2s6Il9vbmRibGNsaWNrIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihuLHIpe3ZhciBpPTNEdGhp czt0aGlzLmFwcD0zRD0Kbix0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHIsdGhpcy5vcHRpb25zRGVm YXVsdCk7dmFyIHM9M0QkKCc8ZGl2IGNsYXNzPTNEImNoPQphcnRzLWdyaWQiLz4nKTtzLmFwcGVu ZChlLndyYXAoKG5ldyB0LkxhYmVsKHt0aXRsZToiSG93IG1hbnkgZGF0YSBwb2ludHMgd289CnVs ZCB5b3UgbGlrZSB0byBhbmFseXplPyJ9KSkuJGVsKSksdGhpcy5saWJyYXJ5PTNEbmV3IHQuUmFk aW9CdXR0b24uVmlldyh7ZD0KYXRhOlt7bGFiZWw6IkZldyAoPDUwMCkiLHZhbHVlOiJzbWFsbCJ9 LHtsYWJlbDoiU29tZSAoPDEwaykiLHZhbHVlOiJtZWRpdW0iPQp9LHtsYWJlbDoiTWFueSAoPjEw aykiLHZhbHVlOiJsYXJnZSJ9XSxvbmNoYW5nZTpmdW5jdGlvbihlKXtpLl9maWx0ZXIoZSl9fSk9 CixzLmFwcGVuZChlLndyYXAodGhpcy5saWJyYXJ5LiRlbCkpLHRoaXMuc2V0RWxlbWVudChzKSx0 aGlzLl9yZW5kZXIoKSx0aGlzLj0KbGlicmFyeS52YWx1ZSgic21hbGwiKSx0aGlzLmxpYnJhcnku dHJpZ2dlcigiY2hhbmdlIil9LHZhbHVlOmZ1bmN0aW9uKGUpe3ZhPQpyIHQ9M0R0aGlzLiRlbC5m aW5kKCIuY3VycmVudCIpLmF0dHIoImlkIik7ZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiRlbC5m aW49CmQoIi5jdXJyZW50IikucmVtb3ZlQ2xhc3MoImN1cnJlbnQiKSx0aGlzLiRlbC5maW5kKCIj IitlKS5hZGRDbGFzcygiY3VycmVudD0KIikpO3ZhciBuPTNEdGhpcy4kZWwuZmluZCgiLmN1cnJl bnQiKS5hdHRyKCJpZCIpO3JldHVybiBuPTNEPTNEPTNEdW5kZWZpbmVkPQo/bnVsbDoobiE9M0R0 JiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UmJnRoaXMub3B0aW9ucy5vbmNoYW5nZShlKSxuKX0sX2Zp bHRlcjo9CmZ1bmN0aW9uKGUpe3RoaXMuJGVsLmZpbmQoIi5oZWFkZXIiKS5oaWRlKCk7dmFyIHQ9 M0R0aGlzLmFwcC50eXBlcy5hdHRyaWJ1dD0KZXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPTNEdFtu XSxpPTNEdGhpcy4kZWwuZmluZCgiIyIrbikscz0zRHRoaXMuJGVsLmZpbmQoPQoiI3R5cGVzLWhl YWRlci0iK3RoaXMuY2F0ZWdvcmllc19pbmRleFtyLmNhdGVnb3J5XSksbz0zRHIua2V5d29yZHN8 fCIiO28uaW49CmRleE9mKGUpPj0zRDA/KGkuc2hvdygpLHMuc2hvdygpKTppLmhpZGUoKX19LF9y ZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmNhdGVnbz0Kcmllcz0zRHt9LHRoaXMuY2F0ZWdvcmllc19p bmRleD0zRHt9O3ZhciBlPTNEMCx0PTNEdGhpcy5hcHAudHlwZXMuYXR0cmlidXRlPQpzO2Zvcih2 YXIgbiBpbiB0KXt2YXIgcj0zRHRbbl0saT0zRHIuY2F0ZWdvcnk7dGhpcy5jYXRlZ29yaWVzW2ld fHwodGhpcy5jYXQ9CmVnb3JpZXNbaV09M0R7fSx0aGlzLmNhdGVnb3JpZXNfaW5kZXhbaV09M0Rl KyspLHRoaXMuY2F0ZWdvcmllc1tpXVtuXT0zRHJ9Zj0Kb3IodmFyIGkgaW4gdGhpcy5jYXRlZ29y aWVzKXt2YXIgcz0zRCQoJzxkaXYgc3R5bGU9M0QiY2xlYXI6IGJvdGg7Ii8+Jyk7cy5hPQpwcGVu ZCh0aGlzLl90ZW1wbGF0ZV9oZWFkZXIoe2lkOiJ0eXBlcy1oZWFkZXItIit0aGlzLmNhdGVnb3Jp ZXNfaW5kZXhbaV0sdGk9CnRsZTppfSkpO2Zvcih2YXIgbiBpbiB0aGlzLmNhdGVnb3JpZXNbaV0p e3ZhciByPTNEdGhpcy5jYXRlZ29yaWVzW2ldW25dLG89Cj0zRHIudGl0bGUrIiAoIityLmxpYnJh cnkrIikiO3Iuem9vbWFibGUmJihvPTNEJzxzcGFuIGNsYXNzPTNEImZhIGZhLXNlYXJjaD0KLXBs dXMiLz4nK28pLHMuYXBwZW5kKHRoaXMuX3RlbXBsYXRlX2l0ZW0oe2lkOm4sdGl0bGU6byx1cmw6 Y29uZmlnLmFwcF9yb290PQorImNoYXJ0cy8iK3RoaXMuYXBwLmNoYXJ0UGF0aChuKSsiL2xvZ28u cG5nIn0pKX10aGlzLiRlbC5hcHBlbmQocyl9fSxfb25jbGk9CmNrOmZ1bmN0aW9uKGUpe3ZhciB0 PTNEdGhpcy52YWx1ZSgpLG49M0QkKGUudGFyZ2V0KS5jbG9zZXN0KCIuaXRlbSIpLmF0dHIoIj0K aWQiKTtuIT0zRCIiJiZuJiZ0IT0zRG4mJnRoaXMudmFsdWUobil9LF9vbmRibGNsaWNrOmZ1bmN0 aW9uKGUpe3ZhciB0PTNEdGhpPQpzLnZhbHVlKCk7dCYmdGhpcy5vcHRpb25zLm9uZGJsY2xpY2sm JnRoaXMub3B0aW9ucy5vbmRibGNsaWNrKHQpfSxfdGVtcGxhdGU9Cl9oZWFkZXI6ZnVuY3Rpb24o ZSl7cmV0dXJuJzxkaXYgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEImhlYWRlciI+JysiJmJ1bGw7 ID0KIitlLnRpdGxlKyI8ZGl2PiJ9LF90ZW1wbGF0ZV9pdGVtOmZ1bmN0aW9uKGUpe3JldHVybic8 ZGl2IGlkPTNEIicrZS5pZCsnIiBjPQpsYXNzPTNEIml0ZW0iPicrJzxpbWcgY2xhc3M9M0QiaW1h Z2UiIHNyYz0zRCInK2UudXJsKyciPicrJzxkaXYgY2xhc3M9M0QidGk9CnRsZSI+JytlLnRpdGxl KyI8L2Rpdj4iKyI8ZGl2PiJ9fSl9KSxkZWZpbmUoInBsdWdpbi92aWV3cy9lZGl0b3IiLFsibXZj L3VpLz0KdWktdGFicyIsIm12Yy91aS91aS1taXNjIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJ1dGls cy91dGlscyIsInBsdWdpbi9tb2RlbHMvPQpjaGFydCIsInBsdWdpbi9tb2RlbHMvZ3JvdXAiLCJw bHVnaW4vdmlld3MvZ3JvdXAiLCJwbHVnaW4vdmlld3Mvc2V0dGluZ3MiLCI9CnBsdWdpbi92aWV3 cy90eXBlcyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSxhKXtyZXR1cm4gQmFja2JvbmUuVmll dy5leHRlbj0KZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihpLHMpe3ZhciBvPTNEdGhpczt0aGlzLmFw cD0zRGksdGhpcy5jaGFydD0zRHRoaXMuYXBwPQouY2hhcnQsdGhpcy5tZXNzYWdlPTNEbmV3IHQu TWVzc2FnZSx0aGlzLnBvcnRsZXQ9M0RuZXcgbi5WaWV3KHtpY29uOiJmYS1iYXI9Ci1jaGFydC1v Iix0aXRsZToiRWRpdG9yIixvcGVyYXRpb25zOntzYXZlOm5ldyB0LkJ1dHRvbkljb24oe2ljb246 ImZhLXNhdmUiLD0KdG9vbHRpcDoiRHJhdyBDaGFydCIsdGl0bGU6IkRyYXciLG9uY2xpY2s6ZnVu Y3Rpb24oKXtvLl9zYXZlQ2hhcnQoKX19KSxiYWNrPQo6bmV3IHQuQnV0dG9uSWNvbih7aWNvbjoi ZmEtY2FyZXQtbGVmdCIsdG9vbHRpcDoiUmV0dXJuIHRvIFZpZXdlciIsdGl0bGU6IkM9CmFuY2Vs IixvbmNsaWNrOmZ1bmN0aW9uKCl7by5hcHAuZ28oInZpZXdlciIpLG8uYXBwLnN0b3JhZ2UubG9h ZCgpfX0pfX0pLHRoaT0Kcy50eXBlcz0zRG5ldyBhKGkse29uY2hhbmdlOmZ1bmN0aW9uKGUpe3Zh ciB0PTNEby5hcHAudHlwZXMuZ2V0KGUpO3R8fGNvbnNvPQpsZS5kZWJ1ZygiRkFJTEVEIC0gRWRp dG9yOjpvbmNoYW5nZSgpIC0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiIpLG8uY2hhcnQ9Ci5k ZWZpbml0aW9uPTNEdCxvLmNoYXJ0LnNldHRpbmdzLmNsZWFyKCksby5jaGFydC5zZXQoe3R5cGU6 ZX0pLG8uY2hhcnQuc2V0KD0KIm1vZGlmaWVkIiwhMCksY29uc29sZS5kZWJ1ZygiRWRpdG9yOjpv bmNoYW5nZSgpIC0gU3dpdGNoZWQgY2hhcnQgdHlwZS4iKX0sPQpvbmRibGNsaWNrOmZ1bmN0aW9u KGUpe28uX3NhdmVDaGFydCgpfX0pLHRoaXMudGFicz0zRG5ldyBlLlZpZXcoe3RpdGxlX25ldzo9 CiJBZGQgRGF0YSIsb25uZXc6ZnVuY3Rpb24oKXt2YXIgZT0zRG8uX2FkZEdyb3VwTW9kZWwoKTtv LnRhYnMuc2hvdyhlLmlkKX19KT0KLHRoaXMudGl0bGU9M0RuZXcgdC5JbnB1dCh7cGxhY2Vob2xk ZXI6IkNoYXJ0IHRpdGxlIixvbmNoYW5nZTpmdW5jdGlvbigpe28uPQpjaGFydC5zZXQoInRpdGxl IixvLnRpdGxlLnZhbHVlKCkpfX0pO3ZhciBmPTNEJCgiPGRpdi8+Iik7Zi5hcHBlbmQoci53cmFw KCg9Cm5ldyB0LkxhYmVsKHt0aXRsZToiUHJvdmlkZSBhIGNoYXJ0IHRpdGxlOiJ9KSkuJGVsKSks Zi5hcHBlbmQoci53cmFwKHRoaXMudD0KaXRsZS4kZWwpKSxmLmFwcGVuZChyLndyYXAodGhpcy50 eXBlcy4kZWwpKSx0aGlzLnRhYnMuYWRkKHtpZDoibWFpbiIsdGl0bGU6PQoiU3RhcnQiLCRlbDpm fSksdGhpcy5zZXR0aW5ncz0zRG5ldyB1KHRoaXMuYXBwKSx0aGlzLnRhYnMuYWRkKHtpZDoic2V0 dGluZ3M9CiIsdGl0bGU6IkNvbmZpZ3VyYXRpb24iLCRlbDp0aGlzLnNldHRpbmdzLiRlbH0pLHRo aXMucG9ydGxldC5hcHBlbmQodGhpcy5tZT0Kc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQuYXBwZW5k KHRoaXMudGFicy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQuPQokZWwpLHRoaXMu dGFicy5oaWRlT3BlcmF0aW9uKCJiYWNrIik7dmFyIG89M0R0aGlzO3RoaXMuY2hhcnQub24oImNo YW5nZTp0aXQ9CmxlIixmdW5jdGlvbihlKXtvLl9yZWZyZXNoVGl0bGUoKX0pLHRoaXMuY2hhcnQu b24oImNoYW5nZTp0eXBlIixmdW5jdGlvbihlKT0Ke28udHlwZXMudmFsdWUoZS5nZXQoInR5cGUi KSl9KSx0aGlzLmNoYXJ0Lm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVzZXRDPQpoYXJ0KCl9 KSx0aGlzLmFwcC5jaGFydC5vbigicmVkcmF3IixmdW5jdGlvbihlKXtvLnBvcnRsZXQuc2hvd09w ZXJhdGlvbigiYmE9CmNrIil9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub24oImFkZCIsZnVuY3Rp b24oZSl7by5fYWRkR3JvdXAoZSl9KSx0aGlzLmFwcD0KLmNoYXJ0Lmdyb3Vwcy5vbigicmVtb3Zl IixmdW5jdGlvbihlKXtvLl9yZW1vdmVHcm91cChlKX0pLHRoaXMuYXBwLmNoYXJ0LmdyPQpvdXBz Lm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVtb3ZlQWxsR3JvdXBzKCl9KSx0aGlzLmFwcC5j aGFydC5ncm91cHMub249CigiY2hhbmdlOmtleSIsZnVuY3Rpb24oZSl7by5fcmVmcmVzaEdyb3Vw S2V5KCl9KSx0aGlzLl9yZXNldENoYXJ0KCl9LHNob3c6Zj0KdW5jdGlvbigpe3RoaXMuJGVsLnNo b3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhpZGUoKX0sX3JlZnJlc2hUaXRsZTpmPQp1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRsZXQudGl0 bGUoZSksdGhpcy50aXRsZS49CnZhbHVlKGUpfSxfcmVmcmVzaEdyb3VwS2V5OmZ1bmN0aW9uKCl7 dmFyIGU9M0R0aGlzLHQ9M0QwO3RoaXMuY2hhcnQuZ3JvdXBzLj0KZWFjaChmdW5jdGlvbihuKXt2 YXIgcj0zRG4uZ2V0KCJrZXkiLCIiKTtyPTNEPTNEIiImJihyPTNEIkRhdGEgbGFiZWwiKSxlLnRh PQpicy50aXRsZShuLmlkLCsrdCsiOiAiK3IpfSl9LF9hZGRHcm91cE1vZGVsOmZ1bmN0aW9uKCl7 dmFyIGU9M0RuZXcgcyh7aWQ6ci49CnV1aWQoKX0pO3JldHVybiB0aGlzLmNoYXJ0Lmdyb3Vwcy5h ZGQoZSksZX0sX2FkZEdyb3VwOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdD0KaGlzLG49M0RuZXcgbyh0 aGlzLmFwcCx7Z3JvdXA6ZX0pO3RoaXMudGFicy5hZGQoe2lkOmUuaWQsJGVsOm4uJGVsLG9uZGVs OmZ1PQpuY3Rpb24oKXt0LmNoYXJ0Lmdyb3Vwcy5yZW1vdmUoZS5pZCl9fSksdGhpcy5fcmVmcmVz aEdyb3VwS2V5KCksdGhpcy5jaGFydC49CnNldCgibW9kaWZpZWQiLCEwKX0sX3JlbW92ZUdyb3Vw OmZ1bmN0aW9uKGUpe3RoaXMudGFicy5kZWwoZS5pZCksdGhpcy5fcmVmcj0KZXNoR3JvdXBLZXko KSx0aGlzLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKX0sX3JlbW92ZUFsbEdyb3VwczpmdW5jdGlv bihlKXt0PQpoaXMudGFicy5kZWxSZW1vdmFibGUoKX0sX3Jlc2V0Q2hhcnQ6ZnVuY3Rpb24oKXt0 aGlzLmNoYXJ0LnNldCgiaWQiLHIudXVpZCg9CikpLHRoaXMuY2hhcnQuc2V0KCJ0eXBlIiwibnZk M19iYXIiKSx0aGlzLmNoYXJ0LnNldCgiZGF0YXNldF9pZCIsdGhpcy5hcHAubz0KcHRpb25zLmNv bmZpZy5kYXRhc2V0X2lkKSx0aGlzLmNoYXJ0LnNldCgidGl0bGUiLCJOZXcgQ2hhcnQiKSx0aGlz LnBvcnRsZXQuPQpoaWRlT3BlcmF0aW9uKCJiYWNrIil9LF9zYXZlQ2hhcnQ6ZnVuY3Rpb24oKXt0 aGlzLmNoYXJ0LnNldCh7dHlwZTp0aGlzLnR5cGU9CnMudmFsdWUoKSx0aXRsZTp0aGlzLnRpdGxl LnZhbHVlKCksZGF0ZTpyLnRpbWUoKX0pO2lmKHRoaXMuY2hhcnQuZ3JvdXBzLmxlbj0KZ3RoPTNE PTNEMCl7dGhpcy5tZXNzYWdlLnVwZGF0ZSh7bWVzc2FnZToiUGxlYXNlIHNlbGVjdCBkYXRhIGNv bHVtbnMgYmVmb3JlPQogZHJhd2luZyB0aGUgY2hhcnQuIn0pO3ZhciBlPTNEdGhpcy5fYWRkR3Jv dXBNb2RlbCgpO3RoaXMudGFicy5zaG93KGUuaWQpO3I9CmV0dXJufXZhciB0PTNEdGhpcyxuPTNE ITAsaT0zRHRoaXMuY2hhcnQuZGVmaW5pdGlvbjt0aGlzLmNoYXJ0Lmdyb3Vwcy5lYWNoKD0KZnVu Y3Rpb24oZSl7aWYoIW4pcmV0dXJuO2Zvcih2YXIgciBpbiBpLmNvbHVtbnMpaWYoZS5hdHRyaWJ1 dGVzW3JdPTNEPTNEIm51PQpsbCIpe3QubWVzc2FnZS51cGRhdGUoe3N0YXR1czoiZGFuZ2VyIixt ZXNzYWdlOiJUaGlzIGNoYXJ0IHR5cGUgcmVxdWlyZXMgY289Cmx1bW4gdHlwZXMgbm90IGZvdW5k IGluIHlvdXIgdGFidWxhciBmaWxlLiJ9KSx0LnRhYnMuc2hvdyhlLmlkKSxuPTNEITE7cmV0dT0K cm59fSk7aWYoIW4pcmV0dXJuO3RoaXMuYXBwLmdvKCJ2aWV3ZXIiKTt2YXIgdD0zRHRoaXM7dGhp cy5hcHAuZGVmZXJyZWQuZXhlPQpjdXRlKGZ1bmN0aW9uKCl7dC5hcHAuc3RvcmFnZS5zYXZlKCks dC5jaGFydC50cmlnZ2VyKCJyZWRyYXciKX0pfX0pfSksZGVmaW49CmUoInBsdWdpbi9tb2RlbHMv Y29uZmlnIixbXSxmdW5jdGlvbigpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1 bD0KdHM6e3F1ZXJ5X2xpbWl0OjFlNCxxdWVyeV90aW1lb3V0OjEwMH19KX0pLGRlZmluZSgicGx1 Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhPQp1bHQiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue3RpdGxlOiIi LGNhdGVnb3J5OiIiLGxpYnJhcnk6IiIsdGFnOiIiLGtleXdvcmRzOiI9CiIsc2V0dGluZ3M6e3Nl cGFyYXRvcl94Ont0aXRsZToiWCBheGlzIix0eXBlOiJzZXBhcmF0b3IifSx4X2F4aXNfbGFiZWw6 e3RpdD0KbGU6IkF4aXMgbGFiZWwiLGluZm86IlByb3ZpZGUgYSBsYWJlbCBmb3IgdGhlIGF4aXMu Iix0eXBlOiJ0ZXh0Iixpbml0OiJYLWF4PQppcyIscGxhY2Vob2xkZXI6IkF4aXMgbGFiZWwifSx4 X2F4aXNfdHlwZTp7dGl0bGU6IkF4aXMgdmFsdWUgdHlwZSIsaW5mbzoiU2U9CmxlY3QgdGhlIHZh bHVlIHR5cGUgb2YgdGhlIGF4aXMuIix0eXBlOiJzZWxlY3QiLGluaXQ6ImF1dG8iLGRhdGE6W3ts YWJlbDoiLT0KLSBEbyBub3Qgc2hvdyB2YWx1ZXMgLS0iLHZhbHVlOiJoaWRlIixvcGVyYXRpb25z OntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdPQp9fSx7bGFiZWw6IkF1dG8iLHZhbHVlOiJhdXRv IixvcGVyYXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmU9Cmw6IkZsb2F0 Iix2YWx1ZToiZiIsb3BlcmF0aW9uczp7c2hvdzpbInhfYXhpc19wcmVjaXNpb24iXX19LHtsYWJl bDoiRXhwb25lbj0KdCIsdmFsdWU6ImUiLG9wZXJhdGlvbnM6e3Nob3c6WyJ4X2F4aXNfcHJlY2lz aW9uIl19fSx7bGFiZWw6IkludGVnZXIiLHZhbHVlPQo6ImQiLG9wZXJhdGlvbnM6e2hpZGU6WyJ4 X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IlBlcmNlbnRhZ2UiLHZhbHVlOiJwIiw9Cm9wZXJh dGlvbnM6e3Nob3c6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IlNJLXByZWZpeCIsdmFs dWU6InMiLG9wZXJhdD0KaW9uczp7aGlkZTpbInhfYXhpc19wcmVjaXNpb24iXX19XX0seF9heGlz X3ByZWNpc2lvbjp7dGl0bGU6IkF4aXMgdGljayBmb3JtPQphdCIsaW5mbzoiU2VsZWN0IHRoZSB0 aWNrIGZvcm1hdCBmb3IgdGhlIGF4aXMuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjEiLGRhdGE9Cjpb e2xhYmVsOiIwLjAwMDAxIix2YWx1ZToiNSJ9LHtsYWJlbDoiMC4wMDAxIix2YWx1ZToiNCJ9LHts YWJlbDoiMC4wMDEiLHZhbD0KdWU6IjMifSx7bGFiZWw6IjAuMDEiLHZhbHVlOiIyIn0se2xhYmVs OiIwLjEiLHZhbHVlOiIxIn0se2xhYmVsOiIxIix2YWx1ZToiPQowIn1dfSxzZXBhcmF0b3JfeTp7 dGl0bGU6IlkgYXhpcyIsdHlwZToic2VwYXJhdG9yIn0seV9heGlzX2xhYmVsOnt0aXRsZToiQXg9 CmlzIGxhYmVsIixpbmZvOiJQcm92aWRlIGEgbGFiZWwgZm9yIHRoZSBheGlzLiIsdHlwZToidGV4 dCIsaW5pdDoiWS1heGlzIixwbD0KYWNlaG9sZGVyOiJBeGlzIGxhYmVsIn0seV9heGlzX3R5cGU6 e3RpdGxlOiJBeGlzIHZhbHVlIHR5cGUiLGluZm86IlNlbGVjdCB0PQpoZSB2YWx1ZSB0eXBlIG9m IHRoZSBheGlzLiIsdHlwZToic2VsZWN0Iixpbml0OiJhdXRvIixkYXRhOlt7bGFiZWw6Ii0tIERv IG49Cm90IHNob3cgdmFsdWVzIC0tIix2YWx1ZToiaGlkZSIsb3BlcmF0aW9uczp7aGlkZTpbInlf YXhpc19wcmVjaXNpb24iXX19LHtsYT0KYmVsOiJBdXRvIix2YWx1ZToiYXV0byIsb3BlcmF0aW9u czp7aGlkZTpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiRmxvPQphdCIsdmFsdWU6ImYi LG9wZXJhdGlvbnM6e3Nob3c6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkV4cG9uZW50 Iix2YWw9CnVlOiJlIixvcGVyYXRpb25zOntzaG93OlsieV9heGlzX3ByZWNpc2lvbiJdfX0se2xh YmVsOiJJbnRlZ2VyIix2YWx1ZToiZCIsbz0KcGVyYXRpb25zOntoaWRlOlsieV9heGlzX3ByZWNp c2lvbiJdfX0se2xhYmVsOiJQZXJjZW50YWdlIix2YWx1ZToicCIsb3BlcmF0PQppb25zOntzaG93 OlsieV9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJTSS1wcmVmaXgiLHZhbHVlOiJzIixvcGVy YXRpb25zOns9CmhpZGU6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fV19LHlfYXhpc19wcmVjaXNpb246 e3RpdGxlOiJBeGlzIHRpY2sgZm9ybWF0Iixpbj0KZm86IlNlbGVjdCB0aGUgdGljayBmb3JtYXQg Zm9yIHRoZSBheGlzLiIsdHlwZToic2VsZWN0Iixpbml0OiIxIixkYXRhOlt7bGFiPQplbDoiMC4w MDAwMSIsdmFsdWU6IjUifSx7bGFiZWw6IjAuMDAwMSIsdmFsdWU6IjQifSx7bGFiZWw6IjAuMDAx Iix2YWx1ZToiMyI9Cn0se2xhYmVsOiIwLjAxIix2YWx1ZToiMiJ9LHtsYWJlbDoiMC4xIix2YWx1 ZToiMSJ9LHtsYWJlbDoiMSIsdmFsdWU6IjAifV19LD0Kc2VwYXJhdG9yX2xlZ2VuZDp7dGl0bGU6 Ik90aGVycyIsdHlwZToic2VwYXJhdG9yIn0sc2hvd19sZWdlbmQ6e3RpdGxlOiJTaG93PQogbGVn ZW5kIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBhZGQgYSBsZWdlbmQ/Iix0eXBlOiJyYWRpb2J1 dHRvbiIsaW5pdDoidHI9CnVlIixkYXRhOlt7bGFiZWw6IlllcyIsdmFsdWU6InRydWUifSx7bGFi ZWw6Ik5vIix2YWx1ZToiZmFsc2UifV19LHVzZV9wYW5lbD0Kczp7dGl0bGU6IlVzZSBtdWx0aS1w YW5lbHMiLGluZm86IldvdWxkIHlvdSBsaWtlIHRvIHNlcGFyYXRlIHlvdXIgZGF0YSBpbnRvPQog aW5kaXZpZHVhbCBwYW5lbHM/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoiZmFsc2UiLGRhdGE6 W3tsYWJlbDoiWWVzIix2YWw9CnVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1d fX19fSksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7cmV0dT0Kcm4obmV3IERhdGUodCxlKzEs MCkpLmdldERhdGUoKX1mdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixpLHMpe3Zh PQpyIG89M0RlKHIpLHU9M0RbXTtvPHImJnQobyk7aWYocz4xKXdoaWxlKG88aSl7dmFyIGE9M0Ru ZXcgRGF0ZSgrbyk7bihhKSVzPQo9M0Q9M0Q9M0QwJiZ1LnB1c2goYSksdChvKX1lbHNlIHdoaWxl KG88aSl1LnB1c2gobmV3IERhdGUoK28pKSx0KG8pO3JldHVybiA9CnV9fXZhciBlPTNEd2luZG93 Lm52fHx7fTtlLnZlcnNpb249M0QiMS4xLjE1YiIsZS5kZXY9M0QhMCx3aW5kb3cubnY9M0RlLGUu dD0Kb29sdGlwPTNEZS50b29sdGlwfHx7fSxlLnV0aWxzPTNEZS51dGlsc3x8e30sZS5tb2RlbHM9 M0RlLm1vZGVsc3x8e30sZS5jaGFyPQp0cz0zRHt9LGUuZ3JhcGhzPTNEW10sZS5sb2dzPTNEe30s ZS5kaXNwYXRjaD0zRGQzLmRpc3BhdGNoKCJyZW5kZXJfc3RhcnQiLCI9CnJlbmRlcl9lbmQiKSxl LmRldiYmKGUuZGlzcGF0Y2gub24oInJlbmRlcl9zdGFydCIsZnVuY3Rpb24odCl7ZS5sb2dzLnN0 YXJ0VD0KaW1lPTNEKyhuZXcgRGF0ZSl9KSxlLmRpc3BhdGNoLm9uKCJyZW5kZXJfZW5kIixmdW5j dGlvbih0KXtlLmxvZ3MuZW5kVGltZT0KPTNEKyhuZXcgRGF0ZSksZS5sb2dzLnRvdGFsVGltZT0z RGUubG9ncy5lbmRUaW1lLWUubG9ncy5zdGFydFRpbWUsZS5sb2coInRvPQp0YWwiLGUubG9ncy50 b3RhbFRpbWUpfSkpLGUubG9nPTNEZnVuY3Rpb24oKXtpZihlLmRldiYmY29uc29sZS5sb2cmJmNv bnNvbGU9Ci5sb2cuYXBwbHkpY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpO2Vs c2UgaWYoZS5kZXYmJnR5cGVvZiBjb25zbz0KbGUubG9nPTNEPTNEImZ1bmN0aW9uIiYmRnVuY3Rp b24ucHJvdG90eXBlLmJpbmQpe3ZhciB0PTNERnVuY3Rpb24ucHJvdG90eXBlPQouYmluZC5jYWxs KGNvbnNvbGUubG9nLGNvbnNvbGUpO3QuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpfXJldHVybiBh cmd1bWVudHM9Clthcmd1bWVudHMubGVuZ3RoLTFdfSxlLnJlbmRlcj0zRGZ1bmN0aW9uKG4pe249 M0RufHwxLGUucmVuZGVyLmFjdGl2ZT0zRCEwLD0KZS5kaXNwYXRjaC5yZW5kZXJfc3RhcnQoKSxz ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQscjtmb3IodmFyIGk9M0QwO2k8biYmPQoocj0zRGUu cmVuZGVyLnF1ZXVlW2ldKTtpKyspdD0zRHIuZ2VuZXJhdGUoKSx0eXBlb2Ygci5jYWxsYmFjaz0z RD0zRHR5cGVvZiA9CkZ1bmN0aW9uJiZyLmNhbGxiYWNrKHQpLGUuZ3JhcGhzLnB1c2godCk7ZS5y ZW5kZXIucXVldWUuc3BsaWNlKDAsaSksZS5yZW5kZT0Kci5xdWV1ZS5sZW5ndGg/c2V0VGltZW91 dChhcmd1bWVudHMuY2FsbGVlLDApOihlLmRpc3BhdGNoLnJlbmRlcl9lbmQoKSxlLnJlPQpuZGVy LmFjdGl2ZT0zRCExKX0sMCl9LGUucmVuZGVyLmFjdGl2ZT0zRCExLGUucmVuZGVyLnF1ZXVlPTNE W10sZS5hZGRHcmFwaD0KPTNEZnVuY3Rpb24odCl7dHlwZW9mIGFyZ3VtZW50c1swXT0zRD0zRHR5 cGVvZiBGdW5jdGlvbiYmKHQ9M0R7Z2VuZXJhdGU6YXJnPQp1bWVudHNbMF0sY2FsbGJhY2s6YXJn dW1lbnRzWzFdfSksZS5yZW5kZXIucXVldWUucHVzaCh0KSxlLnJlbmRlci5hY3RpdmV8fGU9Ci5y ZW5kZXIoKX0sZS5pZGVudGl0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlfSxlLnN0cmlwPTNEZnVu Y3Rpb24oZSl7cmV0dXJuID0KZS5yZXBsYWNlKC8oXHN8JikvZywiIil9LGQzLnRpbWUubW9udGhF bmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERhdGUoZS5nPQpldEZ1bGxZZWFyKCksZS5nZXRN b250aCgpLDApfSxkMy50aW1lLm1vbnRoRW5kcz0zRG4oZDMudGltZS5tb250aEVuZCxmdW5jdGk9 Cm9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSsxKSxlLnNldERhdGUodChlLmdldE1v bnRoKCkrMSxlLmdldEZ1bGxZZT0KYXIoKSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250 aCgpfSksZS5pbnRlcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uPQooKXtmdW5jdGlvbiBjKG8p e28uZWFjaChmdW5jdGlvbihvKXtmdW5jdGlvbiBnKCl7dmFyIGU9M0RkMy5tb3VzZSh0aGlzKSxu PQo9M0RlWzBdLHI9M0RlWzFdLG89M0QhMCxhPTNEITE7bCYmKG49M0RkMy5ldmVudC5vZmZzZXRY LHI9M0RkMy5ldmVudC5vZmZzZXQ9ClksZDMuZXZlbnQudGFyZ2V0LnRhZ05hbWUhPTNEPTNEInN2 ZyImJihvPTNEITEpLGQzLmV2ZW50LnRhcmdldC5jbGFzc05hbWUuYj0KYXNlVmFsLm1hdGNoKCJu di1sZWdlbmQiKSYmKGE9M0QhMCkpLG8mJihuLT0zRGkubGVmdCxyLT0zRGkudG9wKTtpZihuPDB8 fHI8PQowfHxuPnB8fHI+ZHx8ZDMuZXZlbnQucmVsYXRlZFRhcmdldCYmZDMuZXZlbnQucmVsYXRl ZFRhcmdldC5vd25lclNWR0VsZW1lbnQ9Cj0zRD0zRD0zRHVuZGVmaW5lZHx8YSl7aWYobCYmZDMu ZXZlbnQucmVsYXRlZFRhcmdldCYmZDMuZXZlbnQucmVsYXRlZFRhcmdldD0KLm93bmVyU1ZHRWxl bWVudD0zRD0zRD0zRHVuZGVmaW5lZCYmZDMuZXZlbnQucmVsYXRlZFRhcmdldC5jbGFzc05hbWUu bWF0Y2goPQp0Lm52UG9pbnRlckV2ZW50c0NsYXNzKSlyZXR1cm47dS5lbGVtZW50TW91c2VvdXQo e21vdXNlWDpuLG1vdXNlWTpyfSksYy5yZW49CmRlckd1aWRlTGluZShudWxsKTtyZXR1cm59dmFy IGY9M0RzLmludmVydChuKTt1LmVsZW1lbnRNb3VzZW1vdmUoe21vdXNlWDpuLD0KbW91c2VZOnIs cG9pbnRYVmFsdWU6Zn0pLGQzLmV2ZW50LnR5cGU9M0Q9M0Q9M0QiZGJsY2xpY2siJiZ1LmVsZW1l bnREYmxjbGljPQprKHttb3VzZVg6bixtb3VzZVk6cixwb2ludFhWYWx1ZTpmfSl9dmFyIGg9M0Rk My5zZWxlY3QodGhpcykscD0zRG58fDk2MCxkPQo9M0RyfHw0MDAsdj0zRGguc2VsZWN0QWxsKCJn Lm52LXdyYXAubnYtaW50ZXJhY3RpdmVMaW5lTGF5ZXIiKS5kYXRhKFtvXSksbT0KPTNEdi5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiIG52LXdyYXAgbnYtaW50ZXJhY3RpdmVMaW5l TGF5ZXIiKTttPQouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZUd1aWRl TGluZSIpO2lmKCFmKXJldHVybjtmLm9uKCJtb3U9CnNlbW92ZSIsZywhMCkub24oIm1vdXNlb3V0 IixnLCEwKS5vbigiZGJsY2xpY2siLGcpLGMucmVuZGVyR3VpZGVMaW5lPTNEZnVuYz0KdGlvbih0 KXtpZighYSlyZXR1cm47dmFyIG49M0R2LnNlbGVjdCgiLm52LWludGVyYWN0aXZlR3VpZGVMaW5l Iikuc2VsZWN0QWxsPQooImxpbmUiKS5kYXRhKHQhPTNEbnVsbD9bZS51dGlscy5OYU50b1plcm8o dCldOltdLFN0cmluZyk7bi5lbnRlcigpLmFwcGVuZCg9CiJsaW5lIikuYXR0cigiY2xhc3MiLCJu di1ndWlkZWxpbmUiKS5hdHRyKCJ4MSIsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5hdHRyKD0KIngy IixmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmF0dHIoInkxIixkKS5hdHRyKCJ5MiIsMCksbi5leGl0 KCkucmVtb3ZlKCl9fSl9PQp2YXIgdD0zRGUubW9kZWxzLnRvb2x0aXAoKSxuPTNEbnVsbCxyPTNE bnVsbCxpPTNEe2xlZnQ6MCx0b3A6MH0scz0zRGQzLnNjYWw9CmUubGluZWFyKCksbz0zRGQzLnNj YWxlLmxpbmVhcigpLHU9M0RkMy5kaXNwYXRjaCgiZWxlbWVudE1vdXNlbW92ZSIsImVsZW1lbj0K dE1vdXNlb3V0IiwiZWxlbWVudERibGNsaWNrIiksYT0zRCEwLGY9M0RudWxsLGw9M0RuYXZpZ2F0 b3IudXNlckFnZW50LmluZGV4PQpPZigiTVNJRSIpIT0zRD0zRC0xO3JldHVybiBjLmRpc3BhdGNo PTNEdSxjLnRvb2x0aXA9M0R0LGMubWFyZ2luPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6aS50 bz0KcCxpLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDppLmxlZnQs Yyk6aX0sYy53aWR0aD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49 M0RlLGMpOm59LGMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0 aD8ocj0zRGUsYyk6cn0sYy54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD0KPyhzPTNEZSxjKTpzfSxjLnNob3dHdWlkZUxpbmU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsPQpjKTphfSxjLnN2Z0NvbnRhaW5lcj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxjKTpmfSxjfSw9CmUuaW50ZXJhY3Rp dmVCaXNlY3Q9M0RmdW5jdGlvbihlLHQsbil7aWYoIWUgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4g bnVsbDt0eT0KcGVvZiBuIT0zRCJmdW5jdGlvbiImJihuPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS54fSk7dmFyIHI9M0RkMy5iaXNlY3RvcihuPQopLmxlZnQsaT0zRGQzLm1heChbMCxyKGUsdCkt MV0pLHM9M0RuKGVbaV0saSk7dHlwZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9Cj0zRGkpO2lm KHM9M0Q9M0Q9M0R0KXJldHVybiBpO3ZhciBvPTNEZDMubWluKFtpKzEsZS5sZW5ndGgtMV0pLHU9 M0RuKGVbb10sbz0KKTtyZXR1cm4gdHlwZW9mIHU9M0Q9M0QidW5kZWZpbmVkIiYmKHU9M0RvKSxN YXRoLmFicyh1LXQpPj0zRE1hdGguYWJzKHMtdCk/PQppOm99LGUubmVhcmVzdFZhbHVlSW5kZXg9 M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0RJbmZpbml0eSxpPTNEbnVsbDtyZXR1cm49CiBlLmZv ckVhY2goZnVuY3Rpb24oZSxzKXt2YXIgbz0zRE1hdGguYWJzKHQtZSk7bzw9M0RyJiZvPG4mJihy PTNEbyxpPTNEcyl9KT0KLGl9LGZ1bmN0aW9uKCl7d2luZG93Lm52LnRvb2x0aXA9M0R7fSx3aW5k b3cubnYubW9kZWxzLnRvb2x0aXA9M0RmdW5jdGlvbigpPQp7ZnVuY3Rpb24geSgpe2lmKGEpe3Zh ciBlPTNEZDMuc2VsZWN0KGEpO2Uubm9kZSgpLnRhZ05hbWUhPTNEPTNEInN2ZyImJihlPQo9M0Rl LnNlbGVjdCgic3ZnIikpO3ZhciB0PTNEZS5ub2RlKCk/ZS5hdHRyKCJ2aWV3Qm94Iik6bnVsbDtp Zih0KXt0PTNEdC5zcGw9Cml0KCIgIik7dmFyIG49M0RwYXJzZUludChlLnN0eWxlKCJ3aWR0aCIp KS90WzJdO2wubGVmdD0zRGwubGVmdCpuLGwudG9wPTNEbD0KLnRvcCpufX19ZnVuY3Rpb24gYihl KXt2YXIgdDthP3Q9M0RkMy5zZWxlY3QoYSk6dD0zRGQzLnNlbGVjdCgiYm9keSIpO3ZhciBuPQo9 M0R0LnNlbGVjdCgiLm52dG9vbHRpcCIpO3JldHVybiBuLm5vZGUoKT0zRD0zRD0zRG51bGwmJihu PTNEdC5hcHBlbmQoImRpdiI9CikuYXR0cigiY2xhc3MiLCJudnRvb2x0aXAgIisodT91OiJ4eS10 b29sdGlwIikpLmF0dHIoImlkIixoKSksbi5ub2RlKCkuaW5uZT0KckhUTUw9M0RlLG4uc3R5bGUo InRvcCIsMCkuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvcGFjaXR5IiwwKSxuLnNlbGVjdEFsbCgi PQpkaXYsIHRhYmxlLCB0ZCwgdHIiKS5jbGFzc2VkKHAsITApLG4uY2xhc3NlZChwLCEwKSxuLm5v ZGUoKX1mdW5jdGlvbiB3KCl7aWY9CighYylyZXR1cm47aWYoIWcobikpcmV0dXJuO3koKTt2YXIg dD0zRGwubGVmdCx1PTNEbyE9M0RudWxsP286bC50b3AsaD0zRGIobT0KKG4pKTtmPTNEaDtpZihh KXt2YXIgcD0zRGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLGQ9M0RwP3AuZ2V0Qm91 bmRpPQpuZ0NsaWVudFJlY3QoKTphLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9M0R7bGVmdDow LHRvcDowfTtpZihwKXt2YXIgRT0zRHA9Ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxTPTNEYS5n ZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PTNERS50b3A7aWYoeDwwKXt2YT0KciBUPTNEYS5nZXRC b3VuZGluZ0NsaWVudFJlY3QoKTt4PTNETWF0aC5hYnMoeCk+VC5oZWlnaHQ/MDp4fXYudG9wPTNE TWF0aC5hPQpicyh4LVMudG9wKSx2LmxlZnQ9M0RNYXRoLmFicyhFLmxlZnQtUy5sZWZ0KX10Kz0z RGEub2Zmc2V0TGVmdCt2LmxlZnQtMiphLnM9CmNyb2xsTGVmdCx1Kz0zRGEub2Zmc2V0VG9wK3Yu dG9wLTIqYS5zY3JvbGxUb3B9cmV0dXJuIHMmJnM+MCYmKHU9M0RNYXRoLmZsbz0Kb3IodS9zKSpz KSxlLnRvb2x0aXAuY2FsY1Rvb2x0aXBQb3NpdGlvbihbdCx1XSxyLGksaCksd312YXIgdD0zRG51 bGwsbj0zRG51PQpsbCxyPTNEInciLGk9M0Q1MCxzPTNEMjUsbz0zRG51bGwsdT0zRG51bGwsYT0z RG51bGwsZj0zRG51bGwsbD0zRHtsZWZ0Om51bGw9Cix0b3A6bnVsbH0sYz0zRCEwLGg9M0QibnZ0 b29sdGlwLSIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNSkscD0zRCJudi1wbz0KaW50ZXIt ZXZlbnRzLW5vbmUiLGQ9M0RmdW5jdGlvbihlLHQpe3JldHVybiBlfSx2PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGV9LG09Cj0zRGZ1bmN0aW9uKGUpe2lmKHQhPTNEbnVsbClyZXR1cm4gdDtpZihlPTNE PTNEbnVsbClyZXR1cm4iIjt2YXIgbj0zRGQzLnNlbD0KZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoInRhYmxlIikpLHI9M0RuLnNlbGVjdEFsbCgidGhlYWQiKS5kYXRhKFtlXSkuZW50PQplcigp LmFwcGVuZCgidGhlYWQiKTtyLmFwcGVuZCgidHIiKS5hcHBlbmQoInRkIikuYXR0cigiY29sc3Bh biIsMykuYXBwZW5kKCI9CnN0cm9uZyIpLmNsYXNzZWQoIngtdmFsdWUiLCEwKS5odG1sKHYoZS52 YWx1ZSkpO3ZhciBpPTNEbi5zZWxlY3RBbGwoInRib2R5Ij0KKS5kYXRhKFtlXSkuZW50ZXIoKS5h cHBlbmQoInRib2R5Iikscz0zRGkuc2VsZWN0QWxsKCJ0ciIpLmRhdGEoZnVuY3Rpb24oZSl7PQpy ZXR1cm4gZS5zZXJpZXN9KS5lbnRlcigpLmFwcGVuZCgidHIiKS5jbGFzc2VkKCJoaWdobGlnaHQi LGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUuaGlnaGxpZ2h0fSk7cy5hcHBlbmQoInRkIikuY2xhc3Nl ZCgibGVnZW5kLWNvbG9yLWd1aWRlIiwhMCkuYXBwZW5kKCJkaT0KdiIpLnN0eWxlKCJiYWNrZ3Jv dW5kLWNvbG9yIixmdW5jdGlvbihlKXtyZXR1cm4gZS5jb2xvcn0pLHMuYXBwZW5kKCJ0ZCIpLmNs PQphc3NlZCgia2V5IiwhMCkuaHRtbChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KSxzLmFwcGVu ZCgidGQiKS5jbGFzc2VkKCJ2YWw9CnVlIiwhMCkuaHRtbChmdW5jdGlvbihlLHQpe3JldHVybiBk KGUudmFsdWUsdCl9KSxzLnNlbGVjdEFsbCgidGQiKS5lYWNoKGZ1bj0KY3Rpb24oZSl7aWYoZS5o aWdobGlnaHQpe3ZhciB0PTNEZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKS5yYW5nZShb IiNmPQpmZiIsZS5jb2xvcl0pLG49M0QuNjtkMy5zZWxlY3QodGhpcykuc3R5bGUoImJvcmRlci1i b3R0b20tY29sb3IiLHQobikpLnN0eWw9CmUoImJvcmRlci10b3AtY29sb3IiLHQobikpfX0pO3Zh ciBvPTNEbi5ub2RlKCkub3V0ZXJIVE1MO3JldHVybiBlLmZvb3RlciE9Cj0zRD0zRHVuZGVmaW5l ZCYmKG8rPTNEIjxkaXYgY2xhc3M9M0QnZm9vdGVyJz4iK2UuZm9vdGVyKyI8L2Rpdj4iKSxvfSxn PTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5zZXJpZXMmJmUuc2VyaWVzLmxlbmd0aD4wPyEw OiExfTtyZXR1cm4gdy5udlBvaW50ZXJFPQp2ZW50c0NsYXNzPTNEcCx3LmNvbnRlbnQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0zRGUsdyk6dH09Cix3LnRvb2x0aXBF bGVtPTNEZnVuY3Rpb24oKXtyZXR1cm4gZn0sdy5jb250ZW50R2VuZXJhdG9yPTNEZnVuY3Rpb24o ZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8odHlwZW9mIGU9M0Q9M0QiZnVuY3Rpb24iJiYo bT0zRGUpLHcpOm19LHcuZGF0YT0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KG49M0RlLHcpOm59LHcuZ3Jhdml0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50 cy5sZW5ndGg/KHI9M0RlLHcpOnJ9LHcuZGlzdGFuY2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbj0KZ3RoPyhpPTNEZSx3KTppfSx3LnNuYXBEaXN0YW5jZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEPQplLHcpOnN9LHcuY2xhc3Nlcz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSx3KTp1fSx3LmNoYXI9CnRDb250 YWluZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsdyk6YX0s dy5wb3NpdGlvbj0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGwubGVm dD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/PQplLmxlZnQ6bC5sZWZ0LGwudG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmwudG9wLHcpOmx9LHcuZml4ZWQ9ClRv cD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx3KTpvfSx3LmVu YWJsZWQ9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx3KTpj fSx3LnZhbHVlRm9ybWF0dGVyPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0 aD8odHlwZW9mIGU9M0Q9M0QiZnVuY3Rpb24iJiYoZD0zRGUpLHcpOmR9LHcuaGVhZGVyRm9ybWE9 CnR0ZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odHlwZW9mIGU9M0Q9 M0QiZnVuY3Rpb24iJiYodj0zRD0KZSksdyk6dn0sdy5pZD0zRGZ1bmN0aW9uKCl7cmV0dXJuIGh9 LHd9LGUudG9vbHRpcC5zaG93PTNEZnVuY3Rpb24odCxuLHIsaSxzPQosbyl7dmFyIHU9M0Rkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTmFtZT0zRCJudnRvb2x0aXAgIisobz9v OiI9Cnh5LXRvb2x0aXAiKTt2YXIgYT0zRHM7aWYoIXN8fHMudGFnTmFtZS5tYXRjaCgvZ3xzdmcv aSkpYT0zRGRvY3VtZW50LmdldEVsZT0KbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTt1LnN0eWxl LmxlZnQ9M0QwLHUuc3R5bGUudG9wPTNEMCx1LnN0eWxlLm9wYWNpdHk9Cj0zRDAsdS5pbm5lckhU TUw9M0RuLGEuYXBwZW5kQ2hpbGQodSkscyYmKHRbMF09M0R0WzBdLXMuc2Nyb2xsTGVmdCx0WzFd PTNEdD0KWzFdLXMuc2Nyb2xsVG9wKSxlLnRvb2x0aXAuY2FsY1Rvb2x0aXBQb3NpdGlvbih0LHIs aSx1KX0sZS50b29sdGlwLmZpbmRGaXJzPQp0Tm9uU1ZHUGFyZW50PTNEZnVuY3Rpb24oZSl7d2hp bGUoZS50YWdOYW1lLm1hdGNoKC9eZ3xzdmckL2kpIT0zRD0zRG51bGwpZT0KPTNEZS5wYXJlbnRO b2RlO3JldHVybiBlfSxlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0VG9wPTNEZnVuY3Rpb24oZSx0 KXt2YXIgPQpuPTNEdDtkbyBpc05hTihlLm9mZnNldFRvcCl8fChuKz0zRGUub2Zmc2V0VG9wKTt3 aGlsZShlPTNEZS5vZmZzZXRQYXJlbnQpO3I9CmV0dXJuIG59LGUudG9vbHRpcC5maW5kVG90YWxP ZmZzZXRMZWZ0PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHQ7ZG8gaXNOYU4oZT0KLm9mZnNldExl ZnQpfHwobis9M0RlLm9mZnNldExlZnQpO3doaWxlKGU9M0RlLm9mZnNldFBhcmVudCk7cmV0dXJu IG59LGUudG9vPQpsdGlwLmNhbGNUb29sdGlwUG9zaXRpb249M0RmdW5jdGlvbih0LG4scixpKXt2 YXIgcz0zRHBhcnNlSW50KGkub2Zmc2V0SGVpZ2g9CnQpLG89M0RwYXJzZUludChpLm9mZnNldFdp ZHRoKSx1PTNEZS51dGlscy53aW5kb3dTaXplKCkud2lkdGgsYT0zRGUudXRpbHMudz0KaW5kb3dT aXplKCkuaGVpZ2h0LGY9M0R3aW5kb3cucGFnZVlPZmZzZXQsbD0zRHdpbmRvdy5wYWdlWE9mZnNl dCxjLGg7YT0zRHdpPQpuZG93LmlubmVyV2lkdGg+PTNEZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0 aD9hOmEtMTYsdT0zRHdpbmRvdy5pbm5lckhlaWdodD49Cj0zRGRvY3VtZW50LmJvZHkuc2Nyb2xs SGVpZ2h0P3U6dS0xNixuPTNEbnx8InMiLHI9M0RyfHwyMDt2YXIgcD0zRGZ1bmN0aW9uKD0KdCl7 cmV0dXJuIGUudG9vbHRpcC5maW5kVG90YWxPZmZzZXRUb3AodCxoKX0sZD0zRGZ1bmN0aW9uKHQp e3JldHVybiBlLnRvb2x0PQppcC5maW5kVG90YWxPZmZzZXRMZWZ0KHQsYyl9O3N3aXRjaChuKXtj YXNlImUiOmM9M0R0WzBdLW8tcixoPTNEdFsxXS1zLzI7dmE9CnIgdj0zRGQoaSksbT0zRHAoaSk7 djxsJiYoYz0zRHRbMF0rcj5sP3RbMF0rcjpsLXYrYyksbTxmJiYoaD0zRGYtbStoKSxtK3M+Zj0K K2EmJihoPTNEZithLW0raC1zKTticmVhaztjYXNlInciOmM9M0R0WzBdK3IsaD0zRHRbMV0tcy8y O3ZhciB2PTNEZChpKSxtPTNEPQpwKGkpO3Yrbz51JiYoYz0zRHRbMF0tby1yKSxtPGYmJihoPTNE Zis1KSxtK3M+ZithJiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7Y2E9CnNlIm4iOmM9M0R0WzBdLW8v Mi01LGg9M0R0WzFdK3I7dmFyIHY9M0RkKGkpLG09M0RwKGkpO3Y8bCYmKGM9M0RsKzUpLHYrbz51 Jj0KJihjPTNEYy1vLzIrNSksbStzPmYrYSYmKGg9M0RmK2EtbStoLXMpO2JyZWFrO2Nhc2UicyI6 Yz0zRHRbMF0tby8yLGg9M0R0WzFdPQotcy1yO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2PGwmJihj PTNEbCs1KSx2K28+dSYmKGM9M0RjLW8vMis1KSxmPm0mJihoPTNEZik9CjticmVhaztjYXNlIm5v bmUiOmM9M0R0WzBdLGg9M0R0WzFdLXI7dmFyIHY9M0RkKGkpLG09M0RwKGkpfXJldHVybiBpLnN0 eWxlLj0KbGVmdD0zRGMrInB4IixpLnN0eWxlLnRvcD0zRGgrInB4IixpLnN0eWxlLm9wYWNpdHk9 M0QxLGkuc3R5bGUucG9zaXRpb249M0QiPQphYnNvbHV0ZSIsaX0sZS50b29sdGlwLmNsZWFudXA9 M0RmdW5jdGlvbigpe3ZhciBlPTNEZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUM9Cmxhc3NOYW1lKCJu dnRvb2x0aXAiKSx0PTNEW107d2hpbGUoZS5sZW5ndGgpdC5wdXNoKGVbMF0pLGVbMF0uc3R5bGUu dHJhbnNpdD0KaW9uRGVsYXk9M0QiMCAhaW1wb3J0YW50IixlWzBdLnN0eWxlLm9wYWNpdHk9M0Qw LGVbMF0uY2xhc3NOYW1lPTNEIm52dG9vbHRpPQpwLXBlbmRpbmctcmVtb3ZhbCI7c2V0VGltZW91 dChmdW5jdGlvbigpe3doaWxlKHQubGVuZ3RoKXt2YXIgZT0zRHQucG9wKCk7ZS49CnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQoZSl9fSw1MDApfX0oKSxlLnV0aWxzLndpbmRvd1NpemU9M0RmdW5jdGlv bigpe3ZhciBlPQo9M0R7d2lkdGg6NjQwLGhlaWdodDo0ODB9O3JldHVybiBkb2N1bWVudC5ib2R5 JiZkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoJiY9CihlLndpZHRoPTNEZG9jdW1lbnQuYm9keS5v ZmZzZXRXaWR0aCxlLmhlaWdodD0zRGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KT0KLGRvY3Vt ZW50LmNvbXBhdE1vZGU9M0Q9M0QiQ1NTMUNvbXBhdCImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVu dCYmZG9jdW1lbnQuPQpkb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgmJihlLndpZHRoPTNEZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHQ9CmgsZS5oZWlnaHQ9M0Rkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KSx3aW5kb3cuaW5uZXJXaWR0aCYmd2luZD0Kb3cu aW5uZXJIZWlnaHQmJihlLndpZHRoPTNEd2luZG93LmlubmVyV2lkdGgsZS5oZWlnaHQ9M0R3aW5k b3cuaW5uZXJIZWlnaHQpPQosZX0sZS51dGlscy53aW5kb3dSZXNpemU9M0RmdW5jdGlvbihlKXtp ZihlPTNEPTNEPTNEdW5kZWZpbmVkKXJldHVybjt2YXIgdD0KPTNEd2luZG93Lm9ucmVzaXplO3dp bmRvdy5vbnJlc2l6ZT0zRGZ1bmN0aW9uKG4pe3R5cGVvZiB0PTNEPTNEImZ1bmN0aW9uIiYmPQp0 KG4pLGUobil9fSxlLnV0aWxzLmdldENvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/T2JqZWN0LnA9CnJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9M0Q9M0Q9M0QiW29i amVjdCBBcnJheV0iP2Z1bmN0aW9uKGUsbil7cmV0dXJuIGUuYz0Kb2xvcnx8dFtuJXQubGVuZ3Ro XX06dDplLnV0aWxzLmRlZmF1bHRDb2xvcigpfSxlLnV0aWxzLmRlZmF1bHRDb2xvcj0zRGZ1bmN0 PQppb24oKXt2YXIgZT0zRGQzLnNjYWxlLmNhdGVnb3J5MjAoKS5yYW5nZSgpO3JldHVybiBmdW5j dGlvbih0LG4pe3JldHVybiB0LmM9Cm9sb3J8fGVbbiVlLmxlbmd0aF19fSxlLnV0aWxzLmN1c3Rv bVRoZW1lPTNEZnVuY3Rpb24oZSx0LG4pe3Q9M0R0fHxmdW5jdGlvbj0KKGUpe3JldHVybiBlLmtl eX0sbj0zRG58fGQzLnNjYWxlLmNhdGVnb3J5MjAoKS5yYW5nZSgpO3ZhciByPTNEbi5sZW5ndGg7 cmV0PQp1cm4gZnVuY3Rpb24oaSxzKXt2YXIgbz0zRHQoaSk7cmV0dXJuIHJ8fChyPTNEbi5sZW5n dGgpLHR5cGVvZiBlW29dIT0zRCJ1bmQ9CmVmaW5lZCI/dHlwZW9mIGVbb109M0Q9M0QiZnVuY3Rp b24iP2Vbb10oKTplW29dOm5bLS1yXX19LGUudXRpbHMucGpheD0zRGZ1bj0KY3Rpb24odCxuKXtm dW5jdGlvbiByKHIpe2QzLmh0bWwocixmdW5jdGlvbihyKXt2YXIgaT0zRGQzLnNlbGVjdChuKS5u b2RlKCk7PQppLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQzLnNlbGVjdChyKS5zZWxlY3Qobiku bm9kZSgpLGkpLGUudXRpbHMucGpheCh0LG49Cil9KX1kMy5zZWxlY3RBbGwodCkub24oImNsaWNr IixmdW5jdGlvbigpe2hpc3RvcnkucHVzaFN0YXRlKHRoaXMuaHJlZix0aGlzLj0KdGV4dENvbnRl bnQsdGhpcy5ocmVmKSxyKHRoaXMuaHJlZiksZDMuZXZlbnQucHJldmVudERlZmF1bHQoKX0pLGQz LnNlbGVjdCh3PQppbmRvdykub24oInBvcHN0YXRlIixmdW5jdGlvbigpe2QzLmV2ZW50LnN0YXRl JiZyKGQzLmV2ZW50LnN0YXRlKX0pfSxlLnV0aWw9CnMuY2FsY0FwcHJveFRleHRXaWR0aD0zRGZ1 bmN0aW9uKGUpe2lmKHR5cGVvZiBlLnN0eWxlPTNEPTNEImZ1bmN0aW9uIiYmdHlwZT0Kb2YgZS50 ZXh0PTNEPTNEImZ1bmN0aW9uIil7dmFyIHQ9M0RwYXJzZUludChlLnN0eWxlKCJmb250LXNpemUi KS5yZXBsYWNlKCJwPQp4IiwiIikpLG49M0RlLnRleHQoKS5sZW5ndGg7cmV0dXJuIG4qdCouNX1y ZXR1cm4gMH0sZS51dGlscy5OYU50b1plcm89M0RmdW49CmN0aW9uKGUpe3JldHVybiB0eXBlb2Yg ZSE9M0QibnVtYmVyInx8aXNOYU4oZSl8fGU9M0Q9M0Q9M0RudWxsfHxlPTNEPTNEPTNEST0KbmZp bml0eT8wOmV9LGUudXRpbHMub3B0aW9uc0Z1bmM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZSYmZDMu bWFwKGUpLmZvckVhY2goPQpmdW5jdGlvbihlLHQpe3R5cGVvZiB0aGlzW2VdPTNEPTNEImZ1bmN0 aW9uIiYmdGhpc1tlXSh0KX0uYmluZCh0aGlzKSksdGhpc309CixlLm1vZGVscy5heGlzPTNEZnVu Y3Rpb24oKXtmdW5jdGlvbiBtKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9Cj0z RGQzLnNlbGVjdCh0aGlzKSxtPTNEaS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1heGlzIikuZGF0 YShbZV0pLGc9M0RtLmVudD0KZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt d3JhcCBudi1heGlzIikseT0zRGcuYXBwZW5kKCJnIiksYj0KPTNEbS5zZWxlY3QoImciKTtwIT0z RD0zRG51bGw/dC50aWNrcyhwKToodC5vcmllbnQoKT0zRD0zRCJ0b3AifHx0Lm9yaWVudCgpPQo9 M0Q9M0QiYm90dG9tIikmJnQudGlja3MoTWF0aC5hYnMocy5yYW5nZSgpWzFdLXMucmFuZ2UoKVsw XSkvMTAwKSxiLmNhbGwodCk9Cix2PTNEdnx8dC5zY2FsZSgpO3ZhciB3PTNEdC50aWNrRm9ybWF0 KCk7dz0zRD0zRG51bGwmJih3PTNEdi50aWNrRm9ybWF0KCkpOz0KdmFyIEU9M0RiLnNlbGVjdEFs bCgidGV4dC5udi1heGlzbGFiZWwiKS5kYXRhKFtvfHxudWxsXSk7RS5leGl0KCkucmVtb3ZlKCk7 PQpzd2l0Y2godC5vcmllbnQoKSl7Y2FzZSJ0b3AiOkUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5h dHRyKCJjbGFzcyIsIm52LWF4aXM9CmxhYmVsIik7dmFyIFM9M0RzLnJhbmdlKCkubGVuZ3RoPTNE PTNEMj9zLnJhbmdlKClbMV06cy5yYW5nZSgpW3MucmFuZ2UoKS5sZT0Kbmd0aC0xXSsocy5yYW5n ZSgpWzFdLXMucmFuZ2UoKVswXSk7RS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIo InkiPQosMCkuYXR0cigieCIsUy8yKTtpZih1KXt2YXIgeD0zRG0uc2VsZWN0QWxsKCJnLm52LWF4 aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWk9Cm4oKSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLHguZT0KeGl0KCkucmVtb3Zl KCkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Mo ZSkrIiwwPQopIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5IiwiLTAuNWVtIikuYXR0cigieSIs LXQudGlja1BhZGRpbmcoKSkuYXR0cigidGU9Cnh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZnVu Y3Rpb24oZSx0KXt2YXIgbj0zRHcoZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYT0KTiIpPyIiOm59 KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrcy5y YW5nZSgpW3RdPQorIiwwKSJ9KX1icmVhaztjYXNlImJvdHRvbSI6dmFyIFQ9M0QzNixOPTNEMzAs Qz0zRGIuc2VsZWN0QWxsKCJnIikuc2VsZWN0KCI9CnRleHQiKTtpZihmJTM2MCl7Qy5lYWNoKGZ1 bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLmdldEJCb3goKS53aWR0aDtuPk4mJihOPQo9M0RuKX0p O3ZhciBrPTNETWF0aC5hYnMoTWF0aC5zaW4oZipNYXRoLlBJLzE4MCkpLFQ9M0Qoaz9rKk46Tikr MzA7Qy5hdHRyKCI9CnRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiJyb3RhdGUoIitm KyIgMCwwKSJ9KS5zdHlsZSgidGV4dC1hbmNob3IiLD0KZiUzNjA+MD8ic3RhcnQiOiJlbmQiKX1F LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFiZWwiPQopO3Zh ciBTPTNEcy5yYW5nZSgpLmxlbmd0aD0zRD0zRDI/cy5yYW5nZSgpWzFdOnMucmFuZ2UoKVtzLnJh bmdlKCkubGVuZ3RoLTE9Cl0rKHMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYXR0cigidGV4 dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IixUKS5hdD0KdHIoIngiLFMvMik7aWYodSl7dmFy IHg9M0RtLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShbcy5kb21haW4oKVswPQpd LHMuZG9tYWluKClbcy5kb21haW4oKS5sZW5ndGgtMV1dKTt4LmVudGVyKCkuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi09CmF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKSx4LmV4aXQoKS5y ZW1vdmUoKSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZT0KLHQpe3JldHVybiJ0cmFuc2xh dGUoIisocyhlKSsoaD9zLnJhbmdlQmFuZCgpLzI6MCkpKyIsMCkifSkuc2VsZWN0KCJ0ZXh0Iiku PQphdHRyKCJkeSIsIi43MWVtIikuYXR0cigieSIsdC50aWNrUGFkZGluZygpKS5hdHRyKCJ0cmFu c2Zvcm0iLGZ1bmN0aW9uKGUsdCw9Cm4pe3JldHVybiJyb3RhdGUoIitmKyIgMCwwKSJ9KS5zdHls ZSgidGV4dC1hbmNob3IiLGY/ZiUzNjA+MD8ic3RhcnQiOiJlbmQiOj0KIm1pZGRsZSIpLnRleHQo ZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHcoZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4iKT8iIjpu fSksPQp4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIr KHMoZSkrKGg/cy5yYW5nZUJhbmQoKS89CjI6MCkpKyIsMCkifSl9YyYmQy5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQlMj0KPTNEPTNEMD8iMCI6 IjEyIikrIikifSk7YnJlYWs7Y2FzZSJyaWdodCI6RS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0 dHIoImNsPQphc3MiLCJudi1heGlzbGFiZWwiKSxFLnN0eWxlKCJ0ZXh0LWFuY2hvciIsbD8ibWlk ZGxlIjoiYmVnaW4iKS5hdHRyKCJ0cmFuc2Y9Cm9ybSIsbD8icm90YXRlKDkwKSI6IiIpLmF0dHIo InkiLGw/LU1hdGgubWF4KG4ucmlnaHQscikrMTI6LTEwKS5hdHRyKCJ4IixsPz0Kcy5yYW5nZSgp WzBdLzI6dC50aWNrUGFkZGluZygpKTtpZih1KXt2YXIgeD0zRG0uc2VsZWN0QWxsKCJnLm52LWF4 aXNNYXhNaW4iPQopLmRhdGEocy5kb21haW4oKSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGU9Cm5kKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHki LDApLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbj0KKGUsdCl7 cmV0dXJuInRyYW5zbGF0ZSgwLCIrcyhlKSsiKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIs Ii4zMmVtIikuYXR0PQpyKCJ5IiwwKS5hdHRyKCJ4Iix0LnRpY2tQYWRkaW5nKCkpLnN0eWxlKCJ0 ZXh0LWFuY2hvciIsInN0YXJ0IikudGV4dChmdW5jdGk9Cm9uKGUsdCl7dmFyIG49M0R3KGUpO3Jl dHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLHguYXR0cigidHJhbnNmb3JtIixmdT0KbmN0 aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrcy5yYW5nZSgpW3RdKyIpIn0pLnNlbGVjdCgi dGV4dCIpLnN0eWxlKCJvPQpwYWNpdHkiLDEpfWJyZWFrO2Nhc2UibGVmdCI6RS5lbnRlcigpLmFw cGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtYXhpc2w9CmFiZWwiKSxFLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsbD8ibWlkZGxlIjoiZW5kIikuYXR0cigidHJhbnNmb3JtIixsPyJyb3RhdGUoLT0K OTApIjoiIikuYXR0cigieSIsbD8tTWF0aC5tYXgobi5sZWZ0LHIpK2Q6LTEwKS5hdHRyKCJ4Iixs Py1zLnJhbmdlKClbMF0vMjotPQp0LnRpY2tQYWRkaW5nKCkpO2lmKHUpe3ZhciB4PTNEbS5zZWxl Y3RBbGwoImcubnYtYXhpc01heE1pbiIpLmRhdGEocy5kb21haW49CigpKTt4LmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0Iikuc3R5 bD0KZSgib3BhY2l0eSIsMCkseC5leGl0KCkucmVtb3ZlKCkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuInRyPQphbnNsYXRlKDAsIit2KGUpKyIpIn0pLnNlbGVjdCgidGV4 dCIpLmF0dHIoImR5IiwiLjMyZW0iKS5hdHRyKCJ5IiwwKS5hdHRyKCI9CngiLC10LnRpY2tQYWRk aW5nKCkpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChmdW5jdGlvbihlLHQpe3ZhciBu PTNEdz0KKGUpO3JldHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLHguYXR0cigidHJhbnNm b3JtIixmdW5jdGlvbihlLHQpe3JldHVyPQpuInRyYW5zbGF0ZSgwLCIrcy5yYW5nZSgpW3RdKyIp In0pLnNlbGVjdCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKX19RS50ZXg9CnQoZnVuY3Rpb24o ZSl7cmV0dXJuIGV9KSx1JiYodC5vcmllbnQoKT0zRD0zRD0zRCJsZWZ0Inx8dC5vcmllbnQoKT0z RD0zRD0zRD0KInJpZ2h0IikmJihiLnNlbGVjdEFsbCgiZyIpLmVhY2goZnVuY3Rpb24oZSx0KXtk My5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0PQoiKS5hdHRyKCJvcGFjaXR5IiwxKTtpZihzKGUp PHMucmFuZ2UoKVsxXSsxMHx8cyhlKT5zLnJhbmdlKClbMF0tMTApKGU+MWUtMTA9Cnx8ZTwtMWUt MTApJiZkMy5zZWxlY3QodGhpcykuYXR0cigib3BhY2l0eSIsMCksZDMuc2VsZWN0KHRoaXMpLnNl bGVjdCgidGV4dD0KIikuYXR0cigib3BhY2l0eSIsMCl9KSxzLmRvbWFpbigpWzBdPTNEPTNEcy5k b21haW4oKVsxXSYmcy5kb21haW4oKVswXT0zRD0KPTNEMCYmbS5zZWxlY3RBbGwoImcubnYtYXhp c01heE1pbiIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlLHQpe3JldHVybiB0PQo/MDoxfSkp O2lmKHUmJih0Lm9yaWVudCgpPTNEPTNEPTNEInRvcCJ8fHQub3JpZW50KCk9M0Q9M0Q9M0QiYm90 dG9tIikpe3ZhciA9Ckw9M0RbXTttLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZWFjaChm dW5jdGlvbihlLHQpe3RyeXt0P0wucHVzaChzKGUpLT0KdGhpcy5nZXRCQm94KCkud2lkdGgtNCk6 TC5wdXNoKHMoZSkrdGhpcy5nZXRCQm94KCkud2lkdGgrNCl9Y2F0Y2gobil7dD9MLnB1PQpzaChz KGUpLTQpOkwucHVzaChzKGUpKzQpfX0pLGIuc2VsZWN0QWxsKCJnIikuZWFjaChmdW5jdGlvbihl LHQpe2lmKHMoZSk8TFs9CjBdfHxzKGUpPkxbMV0pZT4xZS0xMHx8ZTwtMWUtMTA/ZDMuc2VsZWN0 KHRoaXMpLnJlbW92ZSgpOmQzLnNlbGVjdCh0aGlzKS5zZT0KbGVjdCgidGV4dCIpLnJlbW92ZSgp fSl9YSYmYi5zZWxlY3RBbGwoIi50aWNrIikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFwPQph cnNlRmxvYXQoTWF0aC5yb3VuZChlLl9fZGF0YV9fKjFlNSkvMWU2KSYmZS5fX2RhdGFfXyE9M0Q9 M0R1bmRlZmluZWR9KS5jbGE9CnNzZWQoInplcm8iLCEwKSx2PTNEcy5jb3B5KCl9KSxtfXZhciB0 PTNEZDMuc3ZnLmF4aXMoKSxuPTNEe3RvcDowLHJpZ2h0OjAsYj0Kb3R0b206MCxsZWZ0OjB9LHI9 M0Q3NSxpPTNENjAscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RudWxsLHU9M0QhMCxhPTNEITAs PQpmPTNEMCxsPTNEITAsYz0zRCExLGg9M0QhMSxwPTNEbnVsbCxkPTNEMTI7dC5zY2FsZShzKS5v cmllbnQoImJvdHRvbSIpLnRpY2s9CkZvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZX0pO3ZhciB2 O3JldHVybiBtLmF4aXM9M0R0LGQzLnJlYmluZChtLHQsIm9yaWVudD0KIiwidGlja1ZhbHVlcyIs InRpY2tTdWJkaXZpZGUiLCJ0aWNrU2l6ZSIsInRpY2tQYWRkaW5nIiwidGlja0Zvcm1hdCIpLGQz LnJlPQpiaW5kKG0scywiZG9tYWluIiwicmFuZ2UiLCJyYW5nZUJhbmQiLCJyYW5nZUJhbmRzIiks bS5vcHRpb25zPTNEZS51dGlscy5vcHQ9CmlvbnNGdW5jLmJpbmQobSksbS5tYXJnaW49M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi50b3A9M0R0eT0KcGVvZiBlLnRvcCE9 M0QidW5kZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVu ZGVmaW5lPQpkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNE InVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3Q9CnRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0z RCJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsbSk6bn0sbS53aWR0aD0zRGZ1bj0KY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLG0pOnJ9LG0udGlja3M9M0RmdW5jdGlvbihl KXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSxtLmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGk9M0RlLG0pOml9LG0uYXhpc0xhYmVs PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOj0Kb30sbS5z aG93TWF4TWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLG0p OnV9LG0uaGlnaGxpPQpnaHRaZXJvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLG0pOmF9LG0uc2NhbGU9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhzPTNEZSx0LnNjYWxlKHMpLGg9M0R0eXBlb2Ygcy5yYW5nZUJhbmRzPTNEPQo9M0Qi ZnVuY3Rpb24iLGQzLnJlYmluZChtLHMsImRvbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5kIiwicmFu Z2VCYW5kcyIpLG0pOnM9Cn0sbS5yb3RhdGVZTGFiZWw9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS5yb3RhdD0KZUxhYmVscz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxtKTpmfSxtLnN0YWdnZXJMYWJlbHM9Cj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxtKTpjfSxtLmF4aXNM YWJlbERpc3RhbmNlPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0z RGUsbSk6ZH0sbX0sZS5tb2RlbHMuaGlzdG9yaWNhbEJhcj0KPTNEZnVuY3Rpb24oKXtmdW5jdGlv biB3KEUpe3JldHVybiBFLmVhY2goZnVuY3Rpb24odyl7dmFyIEU9M0RuLXQubGVmdC10LnJpPQpn aHQsUz0zRHItdC50b3AtdC5ib3R0b20sVD0zRGQzLnNlbGVjdCh0aGlzKTtzLmRvbWFpbihkfHxk My5leHRlbnQod1swXS52YWw9CnVlcy5tYXAodSkuY29uY2F0KGYpKSksYz9zLnJhbmdlKG18fFtF Ki41L3dbMF0udmFsdWVzLmxlbmd0aCxFKih3WzBdLnZhbHVlcz0KLmxlbmd0aC0uNSkvd1swXS52 YWx1ZXMubGVuZ3RoXSk6cy5yYW5nZShtfHxbMCxFXSksby5kb21haW4odnx8ZDMuZXh0ZW50KHdb PQowXS52YWx1ZXMubWFwKGEpLmNvbmNhdChsKSkpLnJhbmdlKGd8fFtTLDBdKSxzLmRvbWFpbigp WzBdPTNEPTNEPTNEcy5kb21haW49CigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5k b21haW4oKVswXS1zLmRvbWFpbigpWzBdKi4wMSxzLmRvbWFpbigpWz0KMV0rcy5kb21haW4oKVsx XSouMDFdKTpzLmRvbWFpbihbLTEsMV0pKSxvLmRvbWFpbigpWzBdPTNEPTNEPTNEby5kb21haW4o KVsxPQpdJiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21haW4oKVswXStvLmRvbWFpbigp WzBdKi4wMSxvLmRvbWFpbigpWzFdLW89Ci5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEs MV0pKTt2YXIgTj0zRFQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtaGlzdD0Kb3JpY2FsQmFyLSIr aSkuZGF0YShbd1swXS52YWx1ZXNdKSxDPTNETi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwiPQpudmQzIG52LXdyYXAgbnYtaGlzdG9yaWNhbEJhci0iK2kpLGs9M0RDLmFwcGVuZCgi ZGVmcyIpLEw9M0RDLmFwcGVuZCgiZyIpLEE9Cj0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LWJhcnMiKSxOLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNsYXRl KCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLFQub24oImNsaWNrIixmdW5jdGlvbihlLHQpe3kuY2hh cnRDbGljayh7PQpkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0pfSksay5hcHBlbmQo ImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1jaGE9CnJ0LWNsaXAtcGF0aC0iK2kpLmFwcGVuZCgi cmVjdCIpLE4uc2VsZWN0KCIjbnYtY2hhcnQtY2xpcC1wYXRoLSIraSsiIHJlY3QiKT0KLmF0dHIo IndpZHRoIixFKS5hdHRyKCJoZWlnaHQiLFMpLEEuYXR0cigiY2xpcC1wYXRoIixoPyJ1cmwoI252 LWNoYXJ0LWNsaXAtPQpwYXRoLSIraSsiKSI6IiIpO3ZhciBPPTNETi5zZWxlY3QoIi5udi1iYXJz Iikuc2VsZWN0QWxsKCIubnYtYmFyIikuZGF0YShmdW49CmN0aW9uKGUpe3JldHVybiBlfSxmdW5j dGlvbihlLHQpe3JldHVybiB1KGUsdCl9KTtPLmV4aXQoKS5yZW1vdmUoKTt2YXIgTT0zRD0KTy5l bnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKHQsbil7 cmV0dXJuIGUudXRpbHMuPQpOYU50b1plcm8obyhNYXRoLm1heCgwLGEodCxuKSkpKX0pLmF0dHIo ImhlaWdodCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGk9CmxzLk5hTnRvWmVybyhNYXRoLmFi cyhvKGEodCxuKSktbygwKSkpfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldD0K dXJuInRyYW5zbGF0ZSgiKyhzKHUoZSx0KSktRS93WzBdLnZhbHVlcy5sZW5ndGgqLjQ1KSsiLDAp In0pLm9uKCJtb3VzZW92ZXIiPQosZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47ZDMuc2VsZWN0 KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCkseS5lbGVtZW50TW89CnVzZW92ZXIoe3BvaW50OmUs c2VyaWVzOndbMF0scG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxwb2ludEluZGV4OnQsc2VyaWVz ST0KbmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtpZigh YilyZXR1cm47ZDMuc2VsZWN0KHRoPQppcykuY2xhc3NlZCgiaG92ZXIiLCExKSx5LmVsZW1lbnRN b3VzZW91dCh7cG9pbnQ6ZSxzZXJpZXM6d1swXSxwb2ludEluZGV4OnQ9CixzZXJpZXNJbmRleDow LGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47eS5l bGVtZT0KbnRDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkp LG8oYShlLHQpKV0sZTpkMy5ldmVudCxpPQpkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24o KX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm49Cjt5LmVsZW1lbnRE YmxDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkpLG8oYShl LHQpKV0sZT0KOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pO08u YXR0cigiZmlsbCIsZnVuY3Rpb24oZSx0KXtyPQpldHVybiBwKGUsdCl9KS5hdHRyKCJjbGFzcyIs ZnVuY3Rpb24oZSx0LG4pe3JldHVybihhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXY9CmUiOiJudi1i YXIgcG9zaXRpdmUiKSsiIG52LWJhci0iK24rIi0iK3R9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUsdCl7cj0KZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsdWVzLmxl bmd0aCouNDUpKyIsMCkifSkuYXR0cigid2lkdGgiPQosRS93WzBdLnZhbHVlcy5sZW5ndGgqLjkp LE8uYXR0cigieSIsZnVuY3Rpb24odCxuKXt2YXIgcj0zRGEodCxuKTwwP28oMCk6byg9CjApLW8o YSh0LG4pKTwxP28oMCktMTpvKGEodCxuKSk7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKHIpfSku YXR0cigiaGVpZ2h0Ij0KLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKE1h dGgubWF4KE1hdGguYWJzKG8oYSh0LG4pKS1vKDApKSwxPQopKX0pfSksd312YXIgdD0zRHt0b3A6 MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9M0RNYXRoLmY9Cmxv b3IoTWF0aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMuc2NhbGUu bGluZWFyKCksdT0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnl9LGY9M0RbXSxsPTNEWzBdLGM9M0QhMSxoPTNEPQohMCxwPTNEZS51dGlscy5kZWZh dWx0Q29sb3IoKSxkLHYsbSxnLHk9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnQ9 CkNsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3Vz ZW91dCIpLGI9M0QhMDtyZXR1cj0KbiB3LmhpZ2hsaWdodFBvaW50PTNEZnVuY3Rpb24oZSx0KXtk My5zZWxlY3QoIi5udi1oaXN0b3JpY2FsQmFyLSIraSkuc2VsZWN0PQooIi5udi1iYXJzIC5udi1i YXItMC0iK2UpLmNsYXNzZWQoImhvdmVyIix0KX0sdy5jbGVhckhpZ2hsaWdodHM9M0RmdW5jdGlv big9Cil7ZDMuc2VsZWN0KCIubnYtaGlzdG9yaWNhbEJhci0iK2kpLnNlbGVjdCgiLm52LWJhcnMg Lm52LWJhci5ob3ZlciIpLmNsYXNzZT0KZCgiaG92ZXIiLCExKX0sdy5kaXNwYXRjaD0zRHksdy5v cHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHcpLHcueD0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLHcpOnV9LHcueT0zRGZ1bmN0aW9uKGUpe3Jl dHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9LHcubWFyZ2luPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVu ZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZz0KaHQhPTNEInVuZGVm aW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRl ZmluZWQiPQo/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5k ZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LHcpOnQ9Cn0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSx3KTpufSx3LmhlaWdodD0zRGZ1bj0KY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLHcpOnJ9LHcueFNjYWxlPTNEZnVuY3Rpb24o ZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdyk6c30sdy55U2NhbGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhvPTNEZSx3KTpvfSx3LnhEb21haW49 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsdyk6ZD0KfSx3LnlE b21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsdyk6dn0s dy54UmFuZ2U9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSx3 KTptfSx3LnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9 M0RlLHcpOmd9LHcuZm9yY2VYPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0 aD8oZj0zRGUsdyk6Zn0sdy5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obD0zRGUsdyk6PQpsfSx3LnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYz0zRGUsdyk6Y30sdy5jbGlwRWRnZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHcpOmh9LHcuY29sb3I9M0RmdW5jdGlvbih0KXtyPQpl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZS51dGlscy5nZXRDb2xvcih0KSx3KTpwfSx3Lmlk PTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdyk6aX0sdy5p bnRlcmFjdGl2ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5sZW5ndGg/KGI9M0Qh MSx3KTpifSx3fSxlLm1vZGVscy5idWxsZXQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIG0oZSl7cmV0 PQp1cm4gZS5lYWNoKGZ1bmN0aW9uKGUsbil7dmFyIHA9M0RjLXQubGVmdC10LnJpZ2h0LG09M0Ro LXQudG9wLXQuYm90dG9tLGc9M0Q9CmQzLnNlbGVjdCh0aGlzKSx5PTNEaS5jYWxsKHRoaXMsZSxu KS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksYj0zRHMuY2FsbD0KKHRoaXMsZSxuKS5zbGlj ZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksdz0zRG8uY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0 KGQzPQouZGVzY2VuZGluZyksRT0zRHUuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSxTPTNEYS5jYWxs KHRoaXMsZSxuKS5zbGljZSgpLHg9M0Q9CmYuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSxUPTNEZDMu c2NhbGUubGluZWFyKCkuZG9tYWluKGQzLmV4dGVudChkMy5tZXJnZShbbD0KLHldKSkpLnJhbmdl KHI/W3AsMF06WzAscF0pLE49M0R0aGlzLl9fY2hhcnRfX3x8ZDMuc2NhbGUubGluZWFyKCkuZG9t YWluKFswPQosSW5maW5pdHldKS5yYW5nZShULnJhbmdlKCkpO3RoaXMuX19jaGFydF9fPTNEVDt2 YXIgQz0zRGQzLm1pbih5KSxrPTNEZDMubWE9CngoeSksTD0zRHlbMV0sQT0zRGcuc2VsZWN0QWxs KCJnLm52LXdyYXAubnYtYnVsbGV0IikuZGF0YShbZV0pLE89M0RBLmVudGVyKD0KKS5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1idWxsZXQiKSxNPTNETy5hcHBlbmQo ImciKSxfPTNEPQpBLnNlbGVjdCgiZyIpO00uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJu di1yYW5nZSBudi1yYW5nZU1heCIpLE0uYXBwZW49CmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52 LXJhbmdlIG52LXJhbmdlQXZnIiksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcz0KIiwibnYt cmFuZ2UgbnYtcmFuZ2VNaW4iKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtbWVh c3VyZSIpLE0uYXBwPQplbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm52LW1hcmtlclRyaWFuZ2xl IiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGU9CigiK3QubGVmdCsiLCIrdC50b3ArIiki KTt2YXIgRD0zRGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhOKGUpLU4oMCkpfSxQPQo9M0Rm dW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoVChlKS1UKDApKX0sSD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlPDA/TihlKTo9Ck4oMCl9LEI9M0RmdW5jdGlvbihlKXtyZXR1cm4gZTwwP1QoZSk6VCgw KX07Xy5zZWxlY3QoInJlY3QubnYtcmFuZ2VNYXgiKS5hdD0KdHIoImhlaWdodCIsbSkuYXR0cigi d2lkdGgiLFAoaz4wP2s6QykpLmF0dHIoIngiLEIoaz4wP2s6QykpLmRhdHVtKGs+MD9rOkMpPQos Xy5zZWxlY3QoInJlY3QubnYtcmFuZ2VBdmciKS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoIndpZHRo IixQKEwpKS5hdHRyKCJ4Iiw9CkIoTCkpLmRhdHVtKEwpLF8uc2VsZWN0KCJyZWN0Lm52LXJhbmdl TWluIikuYXR0cigiaGVpZ2h0IixtKS5hdHRyKCJ3aWR0aCIsUD0KKGspKS5hdHRyKCJ4IixCKGsp KS5hdHRyKCJ3aWR0aCIsUChrPjA/QzprKSkuYXR0cigieCIsQihrPjA/QzprKSkuZGF0dW0oaz4w PQo/QzprKSxfLnNlbGVjdCgicmVjdC5udi1tZWFzdXJlIikuc3R5bGUoImZpbGwiLGQpLmF0dHIo ImhlaWdodCIsbS8zKS5hdHRyKCI9CnkiLG0vMykuYXR0cigid2lkdGgiLHc8MD9UKDApLVQod1sw XSk6VCh3WzBdKS1UKDApKS5hdHRyKCJ4IixCKHcpKS5vbigibW91cz0KZW92ZXIiLGZ1bmN0aW9u KCl7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTp3WzBdLGxhYmVsOnhbMF18fCJDdXJyZW50Iixw b3M6PQpbVCh3WzBdKSxtLzJdfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7di5lbGVtZW50 TW91c2VvdXQoe3ZhbHVlOndbMF0sbGE9CmJlbDp4WzBdfHwiQ3VycmVudCJ9KX0pO3ZhciBqPTNE bS82O2JbMF0/Xy5zZWxlY3RBbGwoInBhdGgubnYtbWFya2VyVHJpYW5nbD0KZSIpLmF0dHIoInRy YW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK1QoYlswXSkrIiwiK20vMisi KSJ9KS5hPQp0dHIoImQiLCJNMCwiK2orIkwiK2orIiwiKyAtaisiICIrIC1qKyIsIisgLWorIloi KS5vbigibW91c2VvdmVyIixmdW5jdGlvbig9Cil7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTpi WzBdLGxhYmVsOlNbMF18fCJQcmV2aW91cyIscG9zOltUKGJbMF0pLG0vMl19KT0KfSkub24oIm1v dXNlb3V0IixmdW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTpiWzBdLGxhYmVsOlNb MF18fCJQcmV2PQppb3VzIn0pfSk6Xy5zZWxlY3RBbGwoInBhdGgubnYtbWFya2VyVHJpYW5nbGUi KS5yZW1vdmUoKSxBLnNlbGVjdEFsbCgiLm52LXI9CmFuZ2UiKS5vbigibW91c2VvdmVyIixmdW5j dGlvbihlLHQpe3ZhciBuPTNERVt0XXx8KHQ/dD0zRD0zRDE/Ik1lYW4iOiJNaW5pbT0KdW0iOiJN YXhpbXVtIik7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTplLGxhYmVsOm4scG9zOltUKGUpLG0v Ml19KX0pLm9uKCJtPQpvdXNlb3V0IixmdW5jdGlvbihlLHQpe3ZhciBuPTNERVt0XXx8KHQ/dD0z RD0zRDE/Ik1lYW4iOiJNaW5pbXVtIjoiTWF4aW11bSI9Cik7di5lbGVtZW50TW91c2VvdXQoe3Zh bHVlOmUsbGFiZWw6bn0pfSl9KSxtfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOj0KMCxs ZWZ0OjB9LG49M0QibGVmdCIscj0zRCExLGk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5yYW5nZXN9 LHM9M0RmdW5jdGlvbihlPQope3JldHVybiBlLm1hcmtlcnN9LG89M0RmdW5jdGlvbihlKXtyZXR1 cm4gZS5tZWFzdXJlc30sdT0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUucmFuZ2VMYWJlbHM/ZS5y YW5nZUxhYmVsczpbXX0sYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcmtlckxhYmVscz9lLj0K bWFya2VyTGFiZWxzOltdfSxmPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3VyZUxhYmVscz9l Lm1lYXN1cmVMYWJlbHM6W119PQosbD0zRFswXSxjPTNEMzgwLGg9M0QzMCxwPTNEbnVsbCxkPTNE ZS51dGlscy5nZXRDb2xvcihbIiMxZjc3YjQiXSksdj0zRGQzLmQ9CmlzcGF0Y2goImVsZW1lbnRN b3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1cm4gbS5kaXNwYXRjaD0zRHYsbS5vcHRp bz0KbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5vcmllbnQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhuPTNEZSxyPTNEbj0zRD0zRCJyaWdodCJ8fG49 M0Q9M0QiYm90dG9tIixtKTpufSxtLnJhbmdlcz0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGk9M0RlLG0pOml9LG0ubWFya2Vycz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bT0KZW50cy5sZW5ndGg/KHM9M0RlLG0pOnN9LG0ubWVhc3VyZXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpvPTNEZSxtKTpvfSxtLmZvcmNlWD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLnc9CmlkdGg9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsbSk6Y30sbS5oZWlnaHQ9M0Rm dW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxtKTpofSxtLm1hcmdp bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXA9CmVvZiBlLnJp Z2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJv dHRvbSE9M0QidT0KbmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQuPQpsZWZ0LG0pOnR9LG0udGlja0Zvcm1hdD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSw9Cm0uY29s b3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUudXRpbHMuZ2V0 Q29sb3IodCksbSk6ZD0KfSxtfSxlLm1vZGVscy5idWxsZXRDaGFydD0zRGZ1bmN0aW9uKCl7ZnVu Y3Rpb24gbShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uPQoobixoKXt2YXIgZz0zRGQzLnNlbGVj dCh0aGlzKSx5PTNEKGF8fHBhcnNlSW50KGcuc3R5bGUoIndpZHRoIikpfHw5NjApLWkubGU9CmZ0 LWkucmlnaHQsYj0zRGYtaS50b3AtaS5ib3R0b20sdz0zRHRoaXM7bS51cGRhdGU9M0RmdW5jdGlv bigpe20oZSl9LG0uY29udD0KYWluZXI9M0R0aGlzO2lmKCFufHwhcy5jYWxsKHRoaXMsbixoKSl7 dmFyIEU9M0RnLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhPQp0YShbcF0pO3JldHVybiBFLmVu dGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHI9 CigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEUuYXR0cigieCIs aS5sZWZ0K3kvMikuYXR0cigieT0KIiwxOCtpLnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0 dXJuIGV9KSxtfWcuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtPQpvdmUoKTt2YXIgUz0zRHMu Y2FsbCh0aGlzLG4saCkuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLHg9M0RvLmNhbGwodGhp cyw9Cm4saCkuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLFQ9M0R1LmNhbGwodGhpcyxuLGgp LnNsaWNlKCkuc29ydChkMy5kZXNjZT0KbmRpbmcpLE49M0RnLnNlbGVjdEFsbCgiZy5udi13cmFw Lm52LWJ1bGxldENoYXJ0IikuZGF0YShbbl0pLEM9M0ROLmVudGVyKCkuPQphcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1idWxsZXRDaGFydCIpLGs9M0RDLmFwcGVuZCgi ZyIpLEw9Cj0zRE4uc2VsZWN0KCJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJ1 bGxldFdyYXAiKSxrLmFwcGVuZCgiZyIpLj0KYXR0cigiY2xhc3MiLCJudi10aXRsZXMiKSxOLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArPQoiKSIpO3ZhciBB PTNEZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLE1hdGgubWF4KFNbMF0seFswXSxUWzBdKV0p LnJhbmdlKHI9Cj9beSwwXTpbMCx5XSksTz0zRHRoaXMuX19jaGFydF9ffHxkMy5zY2FsZS5saW5l YXIoKS5kb21haW4oWzAsSW5maW5pdHldKS5yYT0KbmdlKEEucmFuZ2UoKSk7dGhpcy5fX2NoYXJ0 X189M0RBO3ZhciBNPTNEZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKE8oZSktPQpPKDApKX0s Xz0zRGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhBKGUpLUEoMCkpfSxEPTNEay5zZWxlY3Qo Ii5udi10aXRsZXM9CiIpLmFwcGVuZCgiZyIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC02LCIrKD0KZi1pLnRvcC1pLmJvdHRvbSkvMisiKSIp O0QuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi10aXRsZSIpLnRleHQoZnVuPQpjdGlv bihlKXtyZXR1cm4gZS50aXRsZX0pLEQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1z dWJ0aXRsZSIpLmF0dHI9CigiZHkiLCIxZW0iKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1 YnRpdGxlfSksdC53aWR0aCh5KS5oZWlnaHQoYik7dmFyID0KUD0zREwuc2VsZWN0KCIubnYtYnVs bGV0V3JhcCIpO2QzLnRyYW5zaXRpb24oUCkuY2FsbCh0KTt2YXIgSD0zRGx8fEEudGlja0ZvPQpy bWF0KHkvMTAwKSxCPTNETC5zZWxlY3RBbGwoImcubnYtdGljayIpLmRhdGEoQS50aWNrcyh5LzUw KSxmdW5jdGlvbihlKXtyZXQ9CnVybiB0aGlzLnRleHRDb250ZW50fHxIKGUpfSksaj0zREIuZW50 ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpYz0KayIpLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK08oZSkrIiwwKSJ9KS5zdHlsZSgib3Bh PQpjaXR5IiwxZS02KTtqLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIixiKS5hdHRyKCJ5MiIsYio3 LzYpLGouYXBwZW5kKCJ0ZXh0Iik9Ci5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIo ImR5IiwiMWVtIikuYXR0cigieSIsYio3LzYpLnRleHQoSCk7dmFyID0KRj0zRGQzLnRyYW5zaXRp b24oQikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrQShl KSsiPQosMCkifSkuc3R5bGUoIm9wYWNpdHkiLDEpO0Yuc2VsZWN0KCJsaW5lIikuYXR0cigieTEi LGIpLmF0dHIoInkyIixiKjcvNiksRi49CnNlbGVjdCgidGV4dCIpLmF0dHIoInkiLGIqNy82KSxk My50cmFuc2l0aW9uKEIuZXhpdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bj0KY3Rpb24oZSl7cmV0 dXJuInRyYW5zbGF0ZSgiK0EoZSkrIiwwKSJ9KS5zdHlsZSgib3BhY2l0eSIsMWUtNikucmVtb3Zl KCksZC5vPQpuKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5rZXk9M0RuLnRpdGxlLGMmJnYo ZSx3LnBhcmVudE5vZGUpfSl9KSxkMy50aW09CmVyLmZsdXNoKCksbX12YXIgdD0zRGUubW9kZWxz LmJ1bGxldCgpLG49M0QibGVmdCIscj0zRCExLGk9M0R7dG9wOjUscmlnaHQ6ND0KMCxib3R0b206 MjAsbGVmdDoxMjB9LHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5yYW5nZXN9LG89M0RmdW5jdGlv bihlKXtyZXR1PQpybiBlLm1hcmtlcnN9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWFzdXJl c30sYT0zRG51bGwsZj0zRDU1LGw9M0RudWxsLGM9Cj0zRCEwLGg9M0RmdW5jdGlvbihlLHQsbixy LGkpe3JldHVybiI8aDM+Iit0KyI8L2gzPiIrIjxwPiIrbisiPC9wPiJ9LHA9M0QiTj0KbyBEYXRh IEF2YWlsYWJsZS4iLGQ9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIp LHY9M0RmdW5jdGlvPQpuKHQsbil7dmFyIHI9M0R0LnBvc1swXSsobi5vZmZzZXRMZWZ0fHwwKStp LmxlZnQscz0zRHQucG9zWzFdKyhuLm9mZnNldFRvcHw9CnwwKStpLnRvcCxvPTNEaCh0LmtleSx0 LmxhYmVsLHQudmFsdWUsdCxtKTtlLnRvb2x0aXAuc2hvdyhbcixzXSxvLHQudmFsdWU8MD0KPyJl IjoidyIsbnVsbCxuKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcCIsZnVuY3Rpb24oPQplKXtkLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2Q9Ci50b29sdGlwSGlkZShlKX0pLGQu b24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe2MmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxtLj0K ZGlzcGF0Y2g9M0RkLG0uYnVsbGV0PTNEdCxkMy5yZWJpbmQobSx0LCJjb2xvciIpLG0ub3B0aW9u cz0zRGUudXRpbHMub3B0aW9uPQpzRnVuYy5iaW5kKG0pLG0ub3JpZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLHI9M0RuPQo9M0Q9M0QicmlnaHQifHxuPTNE PTNEImJvdHRvbSIsbSk6bn0sbS5yYW5nZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9 CnMubGVuZ3RoPyhzPTNEZSxtKTpzfSxtLm1hcmtlcnM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obz0zRD0KZSxtKTpvfSxtLm1lYXN1cmVzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLG0pOnV9LG0ud2lkPQp0aD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxtKTphfSxtLmhlaWdodD0zRGZ1bmN0aW9u KGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLG0pOmZ9LG0ubWFyZ2luPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3Ah PTNEInVuZGVmaW5lZCI/ZS50b3A6aS50b3AsaS5yaWdodD0zRHR5cGVvPQpmIGUucmlnaHQhPTNE InVuZGVmaW5lZCI/ZS5yaWdodDppLnJpZ2h0LGkuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0z RCJ1bmQ9CmVmaW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9 M0QidW5kZWZpbmVkIj9lLmxlZnQ6aS5sZT0KZnQsbSk6aX0sbS50aWNrRm9ybWF0PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0uPQp0b29sdGlwcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxtKTpjfSxtLnRvb2x0 aXBDb250ZW49CnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUs bSk6aH0sbS5ub0RhdGE9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhw PTNEZSxtKTpwfSxtfSxlLm1vZGVscy5jdW11bGF0aXZlTGluZUNoYXJ0PTNEZnVuPQpjdGlvbigp e2Z1bmN0aW9uIEQoYil7cmV0dXJuIGIuZWFjaChmdW5jdGlvbihiKXtmdW5jdGlvbiBJKGUsdCl7 ZDMuc2VsZWN0KEQ9Ci5jb250YWluZXIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKX1mdW5j dGlvbiBxKGUsdCl7TS54PTNEZDMuZXZlbnQueCxNLj0KaT0zRE1hdGgucm91bmQoTy5pbnZlcnQo TS54KSksbnQoKX1mdW5jdGlvbiBSKGUsdCl7ZDMuc2VsZWN0KEQuY29udGFpbmVyKS5zPQp0eWxl KCJjdXJzb3IiLCJhdXRvIikseC5pbmRleD0zRE0uaSxrLnN0YXRlQ2hhbmdlKHgpfWZ1bmN0aW9u IG50KCl7dHQuZGF0YSg9CltNXSk7dmFyIGU9M0RELnRyYW5zaXRpb25EdXJhdGlvbigpO0QudHJh bnNpdGlvbkR1cmF0aW9uKDApLEQudXBkYXRlKCksRC50cj0KYW5zaXRpb25EdXJhdGlvbihlKX12 YXIgTD0zRGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1jaGFydC0iK1MsITApLEE9M0R0PQpo aXMsSD0zRChmfHxwYXJzZUludChMLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdo dCxCPTNEKGx8fHBhcnNlSW49CnQoTC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90 dG9tO0QudXBkYXRlPTNEZnVuY3Rpb24oKXtMLmNhbGwoRCl9LD0KRC5jb250YWluZXI9M0R0aGlz LHguZGlzYWJsZWQ9M0RiLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigh PQpUKXt2YXIgajtUPTNEe307Zm9yKGogaW4geCl4W2pdaW5zdGFuY2VvZiBBcnJheT9UW2pdPTNE eFtqXS5zbGljZSgwKTpUW2pdPQo9M0R4W2pdfXZhciBGPTNEZDMuYmVoYXZpb3IuZHJhZygpLm9u KCJkcmFnc3RhcnQiLEkpLm9uKCJkcmFnIixxKS5vbigiZHJhZ2U9Cm5kIixSKTtpZighYnx8IWIu bGVuZ3RofHwhYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxl bj0KZ3RoKXt2YXIgVT0zREwuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbTl0pO3JldHVy biBVLmVudGVyKCkuYXBwZW5kKCJ0PQpleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRh IikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciI9CiwibWlkZGxlIiksVS5h dHRyKCJ4Iix1LmxlZnQrSC8yKS5hdHRyKCJ5Iix1LnRvcCtCLzIpLnRleHQoZnVuY3Rpb24oZSl7 cmV0dT0Kcm4gZX0pLER9TC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSx3PTNEdC54 U2NhbGUoKSxFPTNEdC55U2NhbGUoKTtpPQpmKCF5KXt2YXIgej0zRGIuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKGUsbil7dmE9CnIgcj0zRGQzLmV4 dGVudChlLnZhbHVlcyx0LnkoKSk7cmV0dXJuIHJbMF08LTAuOTUmJihyWzBdPTNELTAuOTUpLFso clswXS1yWz0KMV0pLygxK3JbMV0pLChyWzFdLXJbMF0pLygxK3JbMF0pXX0pLFc9M0RbZDMubWlu KHosZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19PQopLGQzLm1heCh6LGZ1bmN0aW9uKGUpe3JldHVy biBlWzFdfSldO3QueURvbWFpbihXKX1lbHNlIHQueURvbWFpbihudWxsKTtPLmQ9Cm9tYWluKFsw LGJbMF0udmFsdWVzLmxlbmd0aC0xXSkucmFuZ2UoWzAsSF0pLmNsYW1wKCEwKTt2YXIgYj0zRFAo TS5pLGIpLFg9Cj0zRGc/Im5vbmUiOiJhbGwiLFY9M0RMLnNlbGVjdEFsbCgiZy5udi13cmFwLm52 LWN1bXVsYXRpdmVMaW5lIikuZGF0YShbYl0pLD0KJD0zRFYuZW50ZXIoKS5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1jdW11bGF0aXZlTGluZSIpLmFwPQpwZW5kKCJn IiksSj0zRFYuc2VsZWN0KCJnIik7JC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWludGVy YWN0aXZlIiksJC49CmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIikuc3R5 bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLCQuYT0KcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LXkgbnYtYXhpcyIpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYWNrPQpncm91 bmQiKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIikuc3R5bGUoInBv aW50ZXItZXZlbnRzIiw9ClgpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1hdmdMaW5l c1dyYXAiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJubz0KbmUiKSwkLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiPQos Im52LWNvbnRyb2xzV3JhcCIpLGMmJihpLndpZHRoKEgpLEouc2VsZWN0KCIubnYtbGVnZW5kV3Jh cCIpLmRhdHVtKGIpLmNhbGw9CihpKSx1LnRvcCE9M0RpLmhlaWdodCgpJiYodS50b3A9M0RpLmhl aWdodCgpLEI9M0QobHx8cGFyc2VJbnQoTC5zdHlsZSgiaGVpZz0KaHQiKSl8fDQwMCktdS50b3At dS5ib3R0b20pLEouc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRy PQphbnNsYXRlKDAsIisgLXUudG9wKyIpIikpO2lmKG0pe3ZhciBLPTNEW3trZXk6IlJlLXNjYWxl IHktYXhpcyIsZGlzYWJsZWQ6IXk9Cn1dO3Mud2lkdGgoMTQwKS5jb2xvcihbIiM0NDQiLCIjNDQ0 IiwiIzQ0NCJdKS5yaWdodEFsaWduKCExKS5tYXJnaW4oe3RvcDo1LD0KcmlnaHQ6MCxib3R0b206 NSxsZWZ0OjIwfSksSi5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bShLKS5hdHRyKCJ0 cmFuPQpzZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIpLmNhbGwocyl9Vi5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIis9CnUubGVmdCsiLCIrdS50b3ArIikiKSxkJiZKLnNlbGVj dCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbD0KYXRlKCIrSCsiLDAp Iik7dmFyIFE9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS50ZW1wRGlzYWJsZWR9KTtW LnNlbGVjPQp0KCIudGVtcERpc2FibGVkIikucmVtb3ZlKCksUS5sZW5ndGgmJlYuYXBwZW5kKCJ0 ZXh0IikuYXR0cigiY2xhc3MiLCJ0ZW1wRGk9CnNhYmxlZCIpLmF0dHIoIngiLEgvMikuYXR0cigi eSIsIi0uNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLnRleHQoUT0KLm1hcChmdW5j dGlvbihlKXtyZXR1cm4gZS5rZXl9KS5qb2luKCIsICIpKyIgdmFsdWVzIGNhbm5vdCBiZSBjYWxj dWxhdGVkIGZvPQpyIHRoaXMgdGltZSBwZXJpb2QuIiksZyYmKG8ud2lkdGgoSCkuaGVpZ2h0KEIp Lm1hcmdpbih7bGVmdDp1LmxlZnQsdG9wOnUudG89CnB9KS5zdmdDb250YWluZXIoTCkueFNjYWxl KHcpLFYuc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWxsKG8pKSwkLnNlbGVjdD0KKCIubnYt YmFja2dyb3VuZCIpLmFwcGVuZCgicmVjdCIpLEouc2VsZWN0KCIubnYtYmFja2dyb3VuZCByZWN0 IikuYXR0cigid2lkPQp0aCIsSCkuYXR0cigiaGVpZ2h0IixCKSx0LnkoZnVuY3Rpb24oZSl7cmV0 dXJuIGUuZGlzcGxheS55fSkud2lkdGgoSCkuaGVpZ2g9CnQoQikuY29sb3IoYi5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YShlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdD0KKXty ZXR1cm4hYlt0XS5kaXNhYmxlZCYmIWJbdF0udGVtcERpc2FibGVkfSkpO3ZhciBHPTNESi5zZWxl Y3QoIi5udi1saW5lc1dyPQphcCIpLmRhdHVtKGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFl LmRpc2FibGVkJiYhZS50ZW1wRGlzYWJsZWR9KSk7Ry5jYWw9CmwodCksYi5mb3JFYWNoKGZ1bmN0 aW9uKGUsdCl7ZS5zZXJpZXNJbmRleD0zRHR9KTt2YXIgWT0zRGIuZmlsdGVyKGZ1bmN0aW9uKD0K ZSl7cmV0dXJuIWUuZGlzYWJsZWQmJiEhQyhlKX0pLFo9M0RKLnNlbGVjdCgiLm52LWF2Z0xpbmVz V3JhcCIpLnNlbGVjdEFsbCgiPQpsaW5lIikuZGF0YShZLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtl eX0pLGV0PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RFKEMoZSkpO3I9CmV0dXJuIHQ8MD8wOnQ+Qj9C OnR9O1ouZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHls ZT0KKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsMTAiKS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihl LG4pe3JldHVybiB0LmNvbG9yKCkoPQplLGUuc2VyaWVzSW5kZXgpfSkuYXR0cigieDEiLDApLmF0 dHIoIngyIixIKS5hdHRyKCJ5MSIsZXQpLmF0dHIoInkyIixldCksWi49CnN0eWxlKCJzdHJva2Ut b3BhY2l0eSIsZnVuY3Rpb24oZSl7dmFyIHQ9M0RFKEMoZSkpO3JldHVybiB0PDB8fHQ+Qj8wOjF9 KS5hdD0KdHIoIngxIiwwKS5hdHRyKCJ4MiIsSCkuYXR0cigieTEiLGV0KS5hdHRyKCJ5MiIsZXQp LFouZXhpdCgpLnJlbW92ZSgpO3ZhciB0PQp0PTNERy5zZWxlY3RBbGwoIi5udi1pbmRleExpbmUi KS5kYXRhKFtNXSk7dHQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCI9CmNsYXNzIiwibnYt aW5kZXhMaW5lIikuYXR0cigid2lkdGgiLDMpLmF0dHIoIngiLC0yKS5hdHRyKCJmaWxsIiwicmVk IikuYXR0cj0KKCJmaWxsLW9wYWNpdHkiLC41KS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwi KS5jYWxsKEYpLHR0LmF0dHIoInRyYW5zZm9yPQptIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNs YXRlKCIrTyhlLmkpKyIsMCkifSkuYXR0cigiaGVpZ2h0IixCKSxoJiYobi5zY2E9CmxlKHcpLnRp Y2tzKE1hdGgubWluKGJbMF0udmFsdWVzLmxlbmd0aCxILzcwKSkudGlja1NpemUoLUIsMCksSi5z ZWxlY3QoIi5udj0KLXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIr RS5yYW5nZSgpWzBdKyIpIiksZDMudHJhbnNpdGlvPQpuKEouc2VsZWN0KCIubnYteC5udi1heGlz IikpLmNhbGwobikpLHAmJihyLnNjYWxlKEUpLnRpY2tzKEIvMzYpLnRpY2tTaXplKC09CkgsMCks ZDMudHJhbnNpdGlvbihKLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpKS5jYWxsKHIpKSxKLnNlbGVj dCgiLm52LWJhY2tncj0Kb3VuZCByZWN0Iikub24oImNsaWNrIixmdW5jdGlvbigpe00ueD0zRGQz Lm1vdXNlKHRoaXMpWzBdLE0uaT0zRE1hdGgucm91bmQoPQpPLmludmVydChNLngpKSx4LmluZGV4 PTNETS5pLGsuc3RhdGVDaGFuZ2UoeCksbnQoKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnQ9CkNs aWNrIixmdW5jdGlvbihlKXtNLmk9M0RlLnBvaW50SW5kZXgsTS54PTNETyhNLmkpLHguaW5kZXg9 M0RNLmksay5zdGF0ZUNoYT0KbmdlKHgpLG50KCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGlj ayIsZnVuY3Rpb24oZSx0KXtlLmRpc2FibGVkPTNEIWUuZGlzPQphYmxlZCx5PTNEIWUuZGlzYWJs ZWQseC5yZXNjYWxlWT0zRHksay5zdGF0ZUNoYW5nZSh4KSxELnVwZGF0ZSgpfSksaS5kaXNwYXQ9 CmNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7eC5kaXNhYmxlZD0zRGUuZGlzYWJsZWQs ay5zdGF0ZUNoYW5nZSh4KSxELj0KdXBkYXRlKCl9KSxvLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2Vtb3ZlIixmdW5jdGlvbihpKXt0LmNsZWFySGlnaGxpZ2h0cygpPQo7dmFyIHMsZixsLGM9M0Rb XTtiLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnNlcmllc0luZGV4PTNEdCwhZS5kaXNh Ymw9CmVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9M0RlLmludGVyYWN0aXZlQmlzZWN0KG4u dmFsdWVzLGkucG9pbnRYVmFsdWUsRD0KLngoKSksdC5oaWdobGlnaHRQb2ludChyLGYsITApO3Zh ciBvPTNEbi52YWx1ZXNbZl07aWYodHlwZW9mIG89M0Q9M0QidW5kZWZpPQpuZWQiKXJldHVybjt0 eXBlb2Ygcz0zRD0zRCJ1bmRlZmluZWQiJiYocz0zRG8pLHR5cGVvZiBsPTNEPTNEInVuZGVmaW5l ZCImJig9Cmw9M0RELnhTY2FsZSgpKEQueCgpKG8sZikpKSxjLnB1c2goe2tleTpuLmtleSx2YWx1 ZTpELnkoKShvLGYpLGNvbG9yOmEobixuLj0Kc2VyaWVzSW5kZXgpfSl9KTtpZihjLmxlbmd0aD4y KXt2YXIgaD0zREQueVNjYWxlKCkuaW52ZXJ0KGkubW91c2VZKSxwPTNETWF0PQpoLmFicyhELnlT Y2FsZSgpLmRvbWFpbigpWzBdLUQueVNjYWxlKCkuZG9tYWluKClbMV0pLGQ9M0QuMDMqcCxtPTNE ZS5uZWFyZXM9CnRWYWx1ZUluZGV4KGMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSks aCxkKTttIT0zRD0zRG51bGwmJihjW21dLmhpZz0KaGxpZ2h0PTNEITApfXZhciBnPTNEbi50aWNr Rm9ybWF0KCkoRC54KCkocyxmKSxmKTtvLnRvb2x0aXAucG9zaXRpb24oe2xlZnQ6PQpsK3UubGVm dCx0b3A6aS5tb3VzZVkrdS50b3B9KS5jaGFydENvbnRhaW5lcihBLnBhcmVudE5vZGUpLmVuYWJs ZWQodikudmFsdWU9CkZvcm1hdHRlcihmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtYXQo KShlKX0pLmRhdGEoe3ZhbHVlOmcsc2VyaWVzOmN9KT0KKCksby5yZW5kZXJHdWlkZUxpbmUobCl9 KSxvLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQiLGZ1bmN0aW9uKGUpe2sudG9vPQpsdGlw SGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxrLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24o ZSl7diYmXyhlLEEucGE9CnJlbnROb2RlKX0pLGsub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihl KXt0eXBlb2YgZS5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIj0KJiYoYi5mb3JFYWNoKGZ1bmN0aW9u KHQsbil7dC5kaXNhYmxlZD0zRGUuZGlzYWJsZWRbbl19KSx4LmRpc2FibGVkPTNEZS5kaXNhPQpi bGVkKSx0eXBlb2YgZS5pbmRleCE9M0QidW5kZWZpbmVkIiYmKE0uaT0zRGUuaW5kZXgsTS54PTNE TyhNLmkpLHguaW5kZXg9M0Q9CmUuaW5kZXgsdHQuZGF0YShbTV0pKSx0eXBlb2YgZS5yZXNjYWxl WSE9M0QidW5kZWZpbmVkIiYmKHk9M0RlLnJlc2NhbGVZKSxELj0KdXBkYXRlKCl9KX0pLER9ZnVu Y3Rpb24gUChlLG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHIpe2lmKCFuLnZhbHVlcylyZXR1 PQpybiBuO3ZhciBpPTNEbi52YWx1ZXNbZV07aWYoaT0zRD0zRG51bGwpcmV0dXJuIG47dmFyIHM9 M0R0LnkoKShpLGUpO3JldHVybiA9CnM8LTAuOTUmJiFBPyhuLnRlbXBEaXNhYmxlZD0zRCEwLG4p OihuLnRlbXBEaXNhYmxlZD0zRCExLG4udmFsdWVzPTNEbi52YWx1ZT0Kcy5tYXAoZnVuY3Rpb24o ZSxuKXtyZXR1cm4gZS5kaXNwbGF5PTNEe3k6KHQueSgpKGUsbiktcykvKDErcyl9LGV9KSxuKX0p fXZhPQpyIHQ9M0RlLm1vZGVscy5saW5lKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2Rl bHMuYXhpcygpLGk9M0RlLm1vZGVscy49CmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxv PTNEZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgpLHU9M0R7dG9wOjMwLHJpZz0KaHQ6MzAsYm90dG9t OjUwLGxlZnQ6NjB9LGE9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGY9M0RudWxsLGw9M0RudWxs LGM9M0QhPQowLGg9M0QhMCxwPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEITAsZz0zRCExLHk9M0Qh MCxiPTNEZnVuY3Rpb24oZSx0LG4scixpKXs9CnJldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIr bisiIGF0ICIrdCsiPC9wPiJ9LHcsRSxTPTNEdC5pZCgpLHg9M0R7aW5kZXg6MD0KLHJlc2NhbGVZ Onl9LFQ9M0RudWxsLE49M0QiTm8gRGF0YSBBdmFpbGFibGUuIixDPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGUuYXZlPQpyYWdlfSxrPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhp ZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXQ9CmUiKSxMPTNEMCxBPTNEITE7bi5vcmllbnQo ImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW50KGQ/InJpZ2h0IjoibGVmdD0KIikscy51 cGRhdGVTdGF0ZSghMSk7dmFyIE89M0RkMy5zY2FsZS5saW5lYXIoKSxNPTNEe2k6MCx4OjB9LF89 M0RmdW5jdGlvbihpPQoscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNE aS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEbi49CnRpY2tGb3JtYXQoKSh0LngoKShpLnBv aW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LD0KaS5w b2ludEluZGV4KSksbD0zRGIoaS5zZXJpZXMua2V5LGEsZixpLEQpO2UudG9vbHRpcC5zaG93KFtv LHVdLGwsbnVsbCxudWxsPQoscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2U9Ci5wb3NbMF0rdS5sZWZ0LGUucG9z WzFdK3UudG9wXSxrLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdT0K c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7ay50b29sdGlwSGlkZShlKX0pLGsub24oInRvb2x0 aXBIaWRlIixmdW5jdGlvbigpPQp7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLEQuZGlzcGF0Y2g9 M0RrLEQubGluZXM9M0R0LEQubGVnZW5kPTNEaSxELnhBeGlzPQo9M0RuLEQueUF4aXM9M0RyLEQu aW50ZXJhY3RpdmVMYXllcj0zRG8sZDMucmViaW5kKEQsdCwiZGVmaW5lZCIsImlzQXJlYSIsIng9 CiIsInkiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJzaXplIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFu Z2UiLCJ5UmFuZ2UiLCJmb3JjZT0KWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2Ui LCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJpZCIpLEQub3B0PQppb25zPTNEZS51dGlscy5v cHRpb25zRnVuYy5iaW5kKEQpLEQubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy49Cmxlbmd0aD8odS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dS50 b3AsdS5yaWdodD0zRHR5cGVvZiBlLj0KcmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJp Z2h0LHUuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluPQplZCI/ZS5ib3R0b206 dS5ib3R0b20sdS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dS5s ZWZ0LEQ9Cik6dX0sRC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhmPTNEZSxEKTpmfSxELmhlaWdodD0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGw9M0RlLEQpOmx9LEQuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1PQpybiBhcmd1bWVu dHMubGVuZ3RoPyhhPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGEpLEQpOmF9LEQucmVz Y2FsZVk9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxEKTp5 fSxELnNob3dDb250cm9scz0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG09M0RlLEQpOm19LEQudXNlSW50ZXJhY3RpdmVHdWlkZWxpbmU9M0RmdW5jdGlvPQpuKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxlPTNEPTNEPTNEITAmJihELmludGVyYWN0aXZl KCExKSxELnVzZVY9Cm9yb25vaSghMSkpLEQpOmd9LEQuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZT0KLEQpOmN9LEQuc2hvd1hBeGlzPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLEQpOmh9LEQuc2hvPQp3WUF4 aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsRCk6cH0sRC5y aWdodEFsaWduWUF4aXM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhk PTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxEKT0KOmR9LEQudG9vbHRpcHM9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsRCk6dn0sRC50b29sdGlwPQpD b250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLEQpOmJ9 LEQuc3RhdGU9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxE KTp4fSxELmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5n dGg/KFQ9M0RlLEQpOlR9LEQubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s PQplbmd0aD8oTj0zRGUsRCk6Tn0sRC5hdmVyYWdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KEM9M0RlLEQ9Cik6Q30sRC50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0zRGUsRCk6TD0KfSxELm5vRXJyb3JDaGVj az0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNEZSxEKTpBfSxEfSxl Lm1vPQpkZWxzLmRpc2NyZXRlQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBFKGUpe3JldHVybiBl LmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9Cj0zRG4tdC5sZWZ0LXQucmlnaHQsRT0zRHItdC50b3At dC5ib3R0b20sUz0zRGQzLnNlbGVjdCh0aGlzKTtlLmZvckVhY2goZnVuYz0KdGlvbihlLHQpe2Uu dmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXJpZXM9M0R0fSl9KTt2YXIgVD0zRHAmJmQ/ W106ZS5tPQphcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7 cmV0dXJue3g6dShlLHQpLHk6YShlLHQpLHk9CjA6ZS55MH19KX0pO3MuZG9tYWluKHB8fGQzLm1l cmdlKFQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlQmFuZD0Kcyh2fHxbMCxp XSwuMSksby5kb21haW4oZHx8ZDMuZXh0ZW50KGQzLm1lcmdlKFQpLm1hcChmdW5jdGlvbihlKXty ZXR1cm4gZS55PQp9KS5jb25jYXQoZikpKSxjP28ucmFuZ2UobXx8W0UtKG8uZG9tYWluKClbMF08 MD8xMjowKSxvLmRvbWFpbigpWzFdPjA/MTI6MF09Cik6by5yYW5nZShtfHxbRSwwXSksYj0zRGJ8 fHMsdz0zRHd8fG8uY29weSgpLnJhbmdlKFtvKDApLG8oMCldKTt2YXIgTj0zRFMucz0KZWxlY3RB bGwoImcubnYtd3JhcC5udi1kaXNjcmV0ZWJhciIpLmRhdGEoW2VdKSxDPTNETi5lbnRlcigpLmFw cGVuZCgiZyIpLmF0PQp0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGViYXIiKSxr PTNEQy5hcHBlbmQoImciKSxMPTNETi5zZWxlY3QoImc9CiIpO2suYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1ncm91cHMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKz0KdC5s ZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBBPTNETi5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RB bGwoIi5udi1ncm91cCIpPQouZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7 cmV0dXJuIGUua2V5fSk7QS5lbnRlcigpLmFwcGVuZCgiZyI9Cikuc3R5bGUoInN0cm9rZS1vcGFj aXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KSxBLmV4aXQoKS5zdHlsZSgicz0K dHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNikucmVtb3ZlKCks QS5hdHRyKCJjbGFzcyIsZnVuPQpjdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMt Iit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUuaG92ZXJ9KSxBLnN0 eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjc1KTt2YXIgTz0z RD0KQS5zZWxlY3RBbGwoImcubnYtYmFyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1 ZXN9KTtPLmV4aXQoKS5yZW1vdmUoPQopO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0 dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiJ0cmE9Cm5zbGF0ZSgiKyhzKHUo ZSx0KSkrcy5yYW5nZUJhbmQoKSouMDUpKyIsICIrbygwKSsiKSJ9KS5vbigibW91c2VvdmVyIixm dW5jdD0KaW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCksZy5lbGVt ZW50TW91c2VvdmVyKHt2YWx1ZTphKHQsPQpuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxw b3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgpKih0LnNlcmllcysuNSkvZS49Cmxlbmd0aCxvKGEo dCxuKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5v bigibW91cz0KZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92 ZXIiLCExKSxnLmVsZW1lbnRNb3VzZW91dCh7PQp2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6 ZVt0LnNlcmllc10scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU9CjpkMy5ldmVu dH0pfSkub24oImNsaWNrIixmdW5jdGlvbih0LG4pe2cuZWxlbWVudENsaWNrKHt2YWx1ZTphKHQs bikscG9pbnQ6dD0KLHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFu ZCgpKih0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhPQoodCxuKSldLHBvaW50SW5kZXg6bixzZXJp ZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2E9CnRpb24o KX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24odCxuKXtnLmVsZW1lbnREYmxDbGljayh7dmFsdWU6 YSh0LG4pLHBvaW50Oj0KdCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5n ZUJhbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oPQphKHQsbikpXSxwb2ludEluZGV4Om4s c2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWc9CmF0 aW9uKCl9KTtNLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsMCkuYXR0cigid2lkdGgiLHMu cmFuZ2VCYW5kKCkqLjkvZT0KLmxlbmd0aCksYz8oTS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0 LWFuY2hvciIsIm1pZGRsZSIpLE8uc2VsZWN0KCJ0ZXh0IikuPQp0ZXh0KGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGgoYShlLHQpKX0pLmF0dHIoIngiLHMucmFuZ2VCYW5kKCkqLjkvMikuYXR0cigieSI9 CixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD9vKGEoZSx0KSktbygwKSsxMjotNH0pKTpP LnNlbGVjdEFsbCgidGV4dCIpLj0KcmVtb3ZlKCksTy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52PQotYmFyIHBvc2l0aXZlIn0p LnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxsKGUsdCl9KS5zdHls ZSg9CiJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGwoZSx0KX0pLnNlbGVj dCgicmVjdCIpLmF0dHIoImNsYXNzIj0KLHkpLmF0dHIoIndpZHRoIixzLnJhbmdlQmFuZCgpKi45 L2UubGVuZ3RoKSxPLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0PQope3ZhciBuPTNEcyh1 KGUsdCkpK3MucmFuZ2VCYW5kKCkqLjA1LHI9M0RhKGUsdCk8MD9vKDApOm8oMCktbyhhKGUsdCkp PDE/byg9CjApLTE6byhhKGUsdCkpO3JldHVybiJ0cmFuc2xhdGUoIituKyIsICIrcisiKSJ9KS5z ZWxlY3QoInJlY3QiKS5hdHRyKCJoZWlnaD0KdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5t YXgoTWF0aC5hYnMobyhhKGUsdCkpLW8oZCYmZFswXXx8MCkpfHwxKX0pLGI9Cj0zRHMuY29weSgp LHc9M0RvLmNvcHkoKX0pLEV9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9 LG49M0Q5Nj0KMCxyPTNENTAwLGk9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSxzPTNE ZDMuc2NhbGUub3JkaW5hbCgpLG89M0RkMy5zPQpjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihl KXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRFs9CjBdLGw9M0Rl LnV0aWxzLmRlZmF1bHRDb2xvcigpLGM9M0QhMSxoPTNEZDMuZm9ybWF0KCIsLjJmIikscCxkLHYs bSxnPTNEZDMuZD0KaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImVsZW1lbnRE YmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlPQpsZW1lbnRNb3VzZW91dCIpLHk9M0QiZGlz Y3JldGVCYXIiLGIsdztyZXR1cm4gRS5kaXNwYXRjaD0zRGcsRS5vcHRpb25zPTNEZS49CnV0aWxz Lm9wdGlvbnNGdW5jLmJpbmQoRSksRS54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHU9M0RlLD0KRSk6dX0sRS55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGE9M0RlLEUpOmF9LEUubWFyZ2luPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A9Cjp0 LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJp Z2h0LHQuYm90dG9tPTNEdD0KeXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206 dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QiPQp1bmRlZmluZWQiP2UubGVmdDp0 LmxlZnQsRSk6dH0sRS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9 Cmg/KG49M0RlLEUpOm59LEUuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHI9M0RlLEUpOnJ9LD0KRS54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocz0zRGUsRSk6c30sRS55U2NhbGU9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhvPTNEZSxFKTpvfSxFLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1 cm49CiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxFKTpwfSxFLnlEb21haW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhkPTNEZSxFKTpkfSxFLnhSYW5nZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxFKTp2PQp9LEUueVJhbmdlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEUpOm19LEUuZm9yY2VZ PTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsRSk6Zn0sRS5j b2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxz LmdldENvbG9yKHQpLEUpOmx9LEUuaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMu bGVuZ3RoPyhpPTNEZSxFKTppfSxFLnNob3dWYWx1ZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmw9CmVuZ3RoPyhjPTNEZSxFKTpjfSxFLnZhbHVlRm9ybWF0PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9Cj0zRGUsRSk6aH0sRS5yZWN0Q2xhc3M9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsRSk6eX0sRT0KfSxlLm1vZGVs cy5kaXNjcmV0ZUJhckNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB3KGUpe3JldHVybiBlLmVh Y2goZnVuY3RpPQpvbihlKXt2YXIgdT0zRGQzLnNlbGVjdCh0aGlzKSxwPTNEdGhpcyx5PTNEKHN8 fHBhcnNlSW50KHUuc3R5bGUoIndpZHRoIikpfHw9Cjk2MCktaS5sZWZ0LWkucmlnaHQsRT0zRChv fHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktaS50b3AtaS5ib3R0bz0KbTt3LnVw ZGF0ZT0zRGZ1bmN0aW9uKCl7Zy5iZWZvcmVVcGRhdGUoKSx1LmNhbGwodyl9LHcuY29udGFpbmVy PTNEdGhpcztpZighPQplfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4g ZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgUz0KPTNEdS5zZWxlY3RBbGwoIi5udi1ub0Rh dGEiKS5kYXRhKFttXSk7cmV0dXJuIFMuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyPQooImNs YXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5j aG9yIiwibWlkZGxlIik9CixTLmF0dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLGkudG9wK0Uv MikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHd9dT0KLnNlbGVjdEFsbCgiLm52LW5vRGF0 YSIpLnJlbW92ZSgpLGQ9M0R0LnhTY2FsZSgpLHY9M0R0LnlTY2FsZSgpLmNsYW1wKCEwKTt2PQph ciBUPTNEdS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1kaXNjcmV0ZUJhcldpdGhBeGVzIikuZGF0 YShbZV0pLE49M0RULmVudGU9CnIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt d3JhcCBudi1kaXNjcmV0ZUJhcldpdGhBeGVzIikuYXBwZW5kKD0KImciKSxDPTNETi5hcHBlbmQo ImRlZnMiKSxrPTNEVC5zZWxlY3QoImciKTtOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt PQp4IG52LWF4aXMiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiku YXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LXplcm9MaW5lIikuYXBwZW5kKCJsaW5lIiks Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIj0KKSxrLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArIikiKSxsJiZrLnNlbGVjdCgiLm52 LXkuPQpudi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreSsiLDApIiksdC53 aWR0aCh5KS5oZWlnaHQoRSk7dmFyIEw9Cj0zRGsuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1 bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKT0KO0wuY2FsbCh0KSxD LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LXgtbGFiZWwtY2xpcC0iK3QuaWQoKSku YXBwZW5kPQooInJlY3QiKSxrLnNlbGVjdCgiI252LXgtbGFiZWwtY2xpcC0iK3QuaWQoKSsiIHJl Y3QiKS5hdHRyKCJ3aWR0aCIsZC5yYW5nZUI9CmFuZCgpKihjPzI6MSkpLmF0dHIoImhlaWdodCIs MTYpLmF0dHIoIngiLC1kLnJhbmdlQmFuZCgpLyhjPzE6MikpO2lmKGEpe24ucz0KY2FsZShkKS50 aWNrcyh5LzEwMCkudGlja1NpemUoLUUsMCksay5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRy KCJ0cmFuc2ZvPQpybSIsInRyYW5zbGF0ZSgwLCIrKHYucmFuZ2UoKVswXSsodC5zaG93VmFsdWVz KCkmJnYuZG9tYWluKClbMF08MD8xNjowKSkrIik9CiIpLGsuc2VsZWN0KCIubnYteC5udi1heGlz IikuY2FsbChuKTt2YXIgQT0zRGsuc2VsZWN0KCIubnYteC5udi1heGlzIikuc2VsZT0KY3RBbGwo ImciKTtjJiZBLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0 LG4pe3JldHVybiJ0PQpyYW5zbGF0ZSgwLCIrKG4lMj0zRD0zRDA/IjUiOiIxNyIpKyIpIn0pfWYm JihyLnNjYWxlKHYpLnRpY2tzKEUvMzYpLnRpY2tTaXo9CmUoLXksMCksay5zZWxlY3QoIi5udi15 Lm52LWF4aXMiKS5jYWxsKHIpKSxrLnNlbGVjdCgiLm52LXplcm9MaW5lIGxpbmUiKS5hdD0KdHIo IngxIiwwKS5hdHRyKCJ4MiIseSkuYXR0cigieTEiLHYoMCkpLmF0dHIoInkyIix2KDApKSxnLm9u KCJ0b29sdGlwU2hvdyIsPQpmdW5jdGlvbihlKXtoJiZiKGUscC5wYXJlbnROb2RlKX0pfSksd312 YXIgdD0zRGUubW9kZWxzLmRpc2NyZXRlQmFyKCksbj0zRGU9Ci5tb2RlbHMuYXhpcygpLHI9M0Rl Lm1vZGVscy5heGlzKCksaT0zRHt0b3A6MTUscmlnaHQ6MTAsYm90dG9tOjUwLGxlZnQ6NjB9LD0K cz0zRG51bGwsbz0zRG51bGwsdT0zRGUudXRpbHMuZ2V0Q29sb3IoKSxhPTNEITAsZj0zRCEwLGw9 M0QhMSxjPTNEITEsaD0zRCEwPQoscD0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4i K3QrIjwvaDM+IisiPHA+IituKyI8L3A+In0sZCx2LG09M0QiTm89CiBEYXRhIEF2YWlsYWJsZS4i LGc9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsImJlZm9yZVVwZGF0 ZT0KIikseT0zRDA7bi5vcmllbnQoImJvdHRvbSIpLmhpZ2hsaWdodFplcm8oITEpLnNob3dNYXhN aW4oITEpLnRpY2tGb3JtYXQoZnVuPQpjdGlvbihlKXtyZXR1cm4gZX0pLHIub3JpZW50KGw/InJp Z2h0IjoibGVmdCIpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCIsLjFmIik9Cik7dmFyIGI9M0RmdW5j dGlvbihpLHMpe3ZhciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFd KyhzLj0Kb2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBv aW50SW5kZXgpKSxmPTNEci50aWNrRm9yPQptYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRl eCkpLGw9M0RwKGkuc2VyaWVzLmtleSxhLGYsaSx3KTtlLnRvb2x0aXAuc2g9Cm93KFtvLHVdLGws aS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRN b3VzZW92ZT0Kci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStpLmxlZnQs ZS5wb3NbMV0raS50b3BdLGcudG9vbHRpcFNoPQpvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1l bnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtnLnRvb2x0aXBIaWRlKGU9Cil9KSxnLm9u KCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtoJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksdy5kaXNw YXRjaD0zRGcsdz0KLmRpc2NyZXRlYmFyPTNEdCx3LnhBeGlzPTNEbix3LnlBeGlzPTNEcixkMy5y ZWJpbmQodyx0LCJ4IiwieSIsInhEb21haW4iLCJ5PQpEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2Ui LCJmb3JjZVgiLCJmb3JjZVkiLCJpZCIsInNob3dWYWx1ZXMiLCJ2YWx1ZUZvcm1hdCI9Ciksdy5v cHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHcpLHcubWFyZ2luPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVu ZGVmaW5lZCI/ZS50b3A6aS50b3AsaS5yaWdodD0zRHR5PQpwZW9mIGUucmlnaHQhPTNEInVuZGVm aW5lZCI/ZS5yaWdodDppLnJpZ2h0LGkuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCI9CnVu ZGVmaW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5k ZWZpbmVkIj9lLmxlZnQ6aT0KLmxlZnQsdyk6aX0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSx3KTpzfSx3LmhlPQppZ2h0PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLHcpOm99LHcuY29sb3I9M0RmdW5jdGlvbig9 Cm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZS51dGlscy5nZXRDb2xvcihuKSx0LmNv bG9yKHUpLHcpOnV9LHcuc2hvdz0KWEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYT0zRGUsdyk6YX0sdy5zaG93WUF4aXM9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZSx3KTpmfSx3LnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9u KGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHIub3JpZW50KGU/InJpZ2h0Ijoi bGVmdCIpLHcpOmx9LHcuc3RhZ2dlcj0KTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGM9M0RlLHcpOmN9LHcudG9vbHRpcHM9M0RmdW5jPQp0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx3KTpofSx3LnRvb2x0aXBDb250ZW50PTNEZnVuY3Rp b24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsdyk6cH0sdy5ub0RhdGE9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhtPTNEZSx3KTptfSx3LnRyYW5z aXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KHk9 M0RlLHcpOnl9LHd9LGUubW9kZWxzLmRpc3RyaWJ1dGlvbj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24g bChlKXtyZXQ9CnVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9M0RuLShpPTNEPTNEPTNEIngi P3QubGVmdCt0LnJpZ2h0OnQudG9wK3QuYm90dD0Kb20pLGw9M0RpPTNEPTNEIngiPyJ5IjoieCIs Yz0zRGQzLnNlbGVjdCh0aGlzKTtmPTNEZnx8dTt2YXIgaD0zRGMuc2VsZWN0QWxsPQooImcubnYt ZGlzdHJpYnV0aW9uIikuZGF0YShbZV0pLHA9M0RoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQ9CjMgbnYtZGlzdHJpYnV0aW9uIiksZD0zRHAuYXBwZW5kKCJnIiksdj0zRGgu c2VsZWN0KCJnIik7aC5hdHRyKCJ0cmFuc2Zvcm0iLD0KInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIr dC50b3ArIikiKTt2YXIgbT0zRHYuc2VsZWN0QWxsKCJnLm52LWRpc3QiKS5kYXRhKGZ1PQpuY3Rp b24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO20uZW50ZXIoKS5hcHBl bmQoImciKSxtLmF0dHI9CigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWRpc3QgbnYt c2VyaWVzLSIrdH0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aT0Kb24oZSx0KXtyZXR1cm4gbyhlLHQp fSk7dmFyIGc9M0RtLnNlbGVjdEFsbCgibGluZS5udi1kaXN0IitpKS5kYXRhKGZ1bmN0aW9uPQoo ZSl7cmV0dXJuIGUudmFsdWVzfSk7Zy5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoaSsiMSIs ZnVuY3Rpb24oZSx0KXtyZXQ9CnVybiBmKHMoZSx0KSl9KS5hdHRyKGkrIjIiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIGYocyhlLHQpKX0pLG0uZXhpdCgpLnNlbGVjdD0KQWxsKCJsaW5lLm52LWRpc3Qi K2kpLmF0dHIoaSsiMSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSkuYXR0cihpKyIy PQoiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0 eSIsMCkucmVtb3ZlKCksZy5hdHQ9CnIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1k aXN0IitpKyIgbnYtZGlzdCIraSsiLSIrdH0pLmF0dHIobCsiMSIsMD0KKS5hdHRyKGwrIjIiLHIp LGcuYXR0cihpKyIxIixmdW5jdGlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KS5hdHRyKGkrIjIi LGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSksZj0zRHUuY29weSgpfSksbH12YXIg dD0zRHt0b3A6MCxyaWdodDowLGJvdHQ9Cm9tOjAsbGVmdDowfSxuPTNENDAwLHI9M0Q4LGk9M0Qi eCIscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlW2ldfSxvPTNEZS51dGlscz0KLmRlZmF1bHRDb2xv cigpLHU9M0RkMy5zY2FsZS5saW5lYXIoKSxhLGY7cmV0dXJuIGwub3B0aW9ucz0zRGUudXRpbHMu b3B0aW9uPQpzRnVuYy5iaW5kKGwpLGwubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW89CmYgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6 dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiPz0KZS5yaWdodDp0 LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9t OnQuYm90dG9tPQosdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6 dC5sZWZ0LGwpOnR9LGwud2lkdGg9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhuPTNEZSxsKTpufSxsLmF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMu bGVuZ3RoPyhpPTNEZSxsKTppfSxsLnNpemU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocj0KPTNEZSxsKTpyfSxsLmdldERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGQzLmZ1bmN0b3IoPQplKSxsKTpzfSxsLnNjYWxlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLGwpOnV9LGwuY29sb3I9Cj0zRGZ1 bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZS51dGlscy5nZXRDb2xvcih0 KSxsKTpvfSxsfSxlLj0KbW9kZWxzLmhpc3RvcmljYWxCYXJDaGFydD0zRGZ1bmN0aW9uKCl7ZnVu Y3Rpb24geChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uPQooZCl7dmFyIEU9M0RkMy5zZWxlY3Qo dGhpcyksVD0zRHRoaXMsTj0zRCh1fHxwYXJzZUludChFLnN0eWxlKCJ3aWR0aCIpKXx8OTY9CjAp LXMubGVmdC1zLnJpZ2h0LEM9M0QoYXx8cGFyc2VJbnQoRS5zdHlsZSgiaGVpZ2h0IikpfHw0MDAp LXMudG9wLXMuYm90dG9tOz0KeC51cGRhdGU9M0RmdW5jdGlvbigpe0UuY2FsbCh4KX0seC5jb250 YWluZXI9M0R0aGlzLGcuZGlzYWJsZWQ9M0RkLm1hcChmdW5jPQp0aW9uKGUpe3JldHVybiEhZS5k aXNhYmxlZH0pO2lmKCF5KXt2YXIgazt5PTNEe307Zm9yKGsgaW4gZylnW2tdaW5zdGFuY2VvZiA9 CkFycmF5P3lba109M0RnW2tdLnNsaWNlKDApOnlba109M0RnW2tdfWlmKCFkfHwhZC5sZW5ndGh8 fCFkLmZpbHRlcihmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgp e3ZhciBMPTNERS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhPQooW2JdKTtyZXR1cm4gTC5l bnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRy KCI9CmR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxMLmF0dHIoIngi LHMubGVmdCtOLzIpLmF0dHIoInkiLD0Kcy50b3ArQy8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVy biBlfSkseH1FLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpPQosdj0zRHQueFNjYWxl KCksbT0zRHQueVNjYWxlKCk7dmFyIEE9M0RFLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWhpc3Rv cmljYWw9CkJhckNoYXJ0IikuZGF0YShbZF0pLE89M0RBLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbj0Kdi1oaXN0b3JpY2FsQmFyQ2hhcnQiKS5hcHBlbmQo ImciKSxNPTNEQS5zZWxlY3QoImciKTtPLmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3MiLCJudi14 IG52LWF4aXMiKSxPLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksTy5h cHBlbmQoImc9CiIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxPLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLD0KZiYmKGkud2lkdGgoTiksTS5zZWxlY3QoIi5u di1sZWdlbmRXcmFwIikuZGF0dW0oZCkuY2FsbChpKSxzLnRvcCE9M0RpLmhlaWdoPQp0KCkmJihz LnRvcD0zRGkuaGVpZ2h0KCksQz0zRChhfHxwYXJzZUludChFLnN0eWxlKCJoZWlnaHQiKSl8fDQw MCktcy50b3Atcy49CmJvdHRvbSksQS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLXMudG9wKz0KIikiKSksQS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitzLmxlZnQrIiwiK3MudG9wKyIpIiksaCYmTS5zZWxlY3QoIi5uPQp2LXku bnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK04rIiwwKSIpLHQud2lkdGgo TikuaGVpZ2h0KEMpLmM9Cm9sb3IoZC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8 byhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dT0Kcm4hZFt0XS5kaXNhYmxlZH0pKTt2 YXIgXz0zRE0uc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShkLmZpbHRlcihmdW5jdGlvPQpu KGUpe3JldHVybiFlLmRpc2FibGVkfSkpO18uY2FsbCh0KSxsJiYobi5zY2FsZSh2KS50aWNrU2l6 ZSgtQywwKSxNLnNlbGVjdCg9CiIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDAsIittLnJhbmdlKClbMF0rIikiKSxNLnNlbGVjdD0KKCIubnYteC5udi1heGlzIiku Y2FsbChuKSksYyYmKHIuc2NhbGUobSkudGlja3MoQy8zNikudGlja1NpemUoLU4sMCksTS5zZWxl PQpjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLGkuZGlzcGF0Y2gub24oImxlZ2VuZENsaWNr IixmdW5jdGlvbih0LG4pe3QuZGk9CnNhYmxlZD0zRCF0LmRpc2FibGVkLGQuZmlsdGVyKGZ1bmN0 aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RofHxkLm1hcD0KKGZ1bmN0aW9uKGUpe3Jl dHVybiBlLmRpc2FibGVkPTNEITEsQS5zZWxlY3RBbGwoIi5udi1zZXJpZXMiKS5jbGFzc2VkKCJk aXNhPQpibGVkIiwhMSksZX0pLGcuZGlzYWJsZWQ9M0RkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4h IWUuZGlzYWJsZWR9KSx3LnN0YXRlQ2g9CmFuZ2UoZyksZS5jYWxsKHgpfSksaS5kaXNwYXRjaC5v bigibGVnZW5kRGJsY2xpY2siLGZ1bmN0aW9uKGUpe2QuZm9yRWFjaChmdT0KbmN0aW9uKGUpe2Uu ZGlzYWJsZWQ9M0QhMH0pLGUuZGlzYWJsZWQ9M0QhMSxnLmRpc2FibGVkPTNEZC5tYXAoZnVuY3Rp b24oZSl7PQpyZXR1cm4hIWUuZGlzYWJsZWR9KSx3LnN0YXRlQ2hhbmdlKGcpLHgudXBkYXRlKCl9 KSx3Lm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Q9CmlvbihlKXtwJiZTKGUsVC5wYXJlbnROb2RlKX0p LHcub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlKXt0eXBlb2YgZS5kaXNhYj0KbGVkIT0zRCJ1 bmRlZmluZWQiJiYoZC5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0zRGUuZGlzYWJs ZWRbbl19KSxnPQouZGlzYWJsZWQ9M0RlLmRpc2FibGVkKSx4LnVwZGF0ZSgpfSl9KSx4fXZhciB0 PTNEZS5tb2RlbHMuaGlzdG9yaWNhbEJhcigpLG49Cj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5t b2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEe3RvcDozMCxyaT0KZ2h0Ojkw LGJvdHRvbTo1MCxsZWZ0OjkwfSxvPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSx1PTNEbnVsbCxh PTNEbnVsbCxmPTNEPQohMSxsPTNEITAsYz0zRCEwLGg9M0QhMSxwPTNEITAsZD0zRGZ1bmN0aW9u KGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM9Cj4iKyI8cD4iK24rIiBhdCAiK3QrIjwv cD4ifSx2LG0sZz0zRHt9LHk9M0RudWxsLGI9M0QiTm8gRGF0YSBBdmFpbGFibGUuIix3PQo9M0Rk My5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hh bmdlU3RhdGUiKSxFPQo9M0QwO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9y aWVudChoPyJyaWdodCI6ImxlZnQiKTt2YXIgUz0zRGY9CnVuY3Rpb24oaSxzKXtpZihzKXt2YXIg bz0zRGQzLnNlbGVjdChzKS5zZWxlY3QoInN2ZyIpLHU9M0RvLm5vZGUoKT9vLmF0dHIoIj0Kdmll d0JveCIpOm51bGw7aWYodSl7dT0zRHUuc3BsaXQoIiAiKTt2YXIgYT0zRHBhcnNlSW50KG8uc3R5 bGUoIndpZHRoIikpL3VbPQoyXTtpLnBvc1swXT0zRGkucG9zWzBdKmEsaS5wb3NbMV09M0RpLnBv c1sxXSphfX12YXIgZj0zRGkucG9zWzBdKyhzLm9mZnNldEw9CmVmdHx8MCksbD0zRGkucG9zWzFd KyhzLm9mZnNldFRvcHx8MCksYz0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wbz0K aW50SW5kZXgpKSxoPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgp KSxwPTNEZChpLnNlcmllcy5rPQpleSxjLGgsaSx4KTtlLnRvb2x0aXAuc2hvdyhbZixsXSxwLG51 bGwsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW09CmVudE1vdXNlb3Zlci50b29s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStzLmxlZnQsZS5wb3NbMV0rcy50b3Bd LD0Kdy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXt3LnRvPQpvbHRpcEhpZGUoZSl9KSx3Lm9uKCJ0b29sdGlwSGlkZSIs ZnVuY3Rpb24oKXtwJiZlLnRvb2x0aXAuY2xlYW51cCgpfSkseC5kaXM9CnBhdGNoPTNEdyx4LmJh cnM9M0R0LHgubGVnZW5kPTNEaSx4LnhBeGlzPTNEbix4LnlBeGlzPTNEcixkMy5yZWJpbmQoeCx0 LCJkZT0KZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4 RG9tYWluIiwieURvbWFpbiIsInhSYW5nPQplIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwi aW50ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNsaXBWb3Jvbm9pIiwiaWQiLCI9CmludGVycG9sYXRl IiwiaGlnaGxpZ2h0UG9pbnQiLCJjbGVhckhpZ2hsaWdodHMiLCJpbnRlcmFjdGl2ZSIpLHgub3B0 aW9ucz0zRD0KZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHgpLHgubWFyZ2luPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocy50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVu ZGVmaW5lZCI/ZS50b3A6cy50b3Ascy5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0KPTNEInVuZGVm aW5lZCI/ZS5yaWdodDpzLnJpZ2h0LHMuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRl ZmluZWQiP2UuPQpib3R0b206cy5ib3R0b20scy5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5k ZWZpbmVkIj9lLmxlZnQ6cy5sZWZ0LHgpOnN9LHg9Ci53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSx4KTp1fSx4LmhlaWdodD0zRGZ1bmN0aT0Kb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHgpOmF9LHguY29sb3I9M0RmdW5jdGlvbih0 KXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhvPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNv bG9yKG8pLHgpOm99LHguc2hvd0xlZ2VuZD0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLHgpOmZ9LHguc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4g YXJndW1lbnRzLmxlbmd0aD8obD0zRGUseCk6bH0seC5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhjPTNEZSx4KTpjfSx4LnJpZ2h0QWxpZ25ZQXhpcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGg9M0RlLHIub3JpZW50KGU/ InJpZ2h0IjoibGVmdCIpLHgpOmh9LHgudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0K cmd1bWVudHMubGVuZ3RoPyhwPTNEZSx4KTpwfSx4LnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oZD0zRGUseCk6ZH0seC5zdGF0ZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSw9CngpOmd9LHguZGVmYXVsdFN0 YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLHgpOnl9LHgu bj0Kb0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUseCk6 Yn0seC50cmFuc2l0aW9uRHVyYXRpPQpvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhFPTNEZSx4KTpFfSx4fSxlLm1vZGVscy5pbmRlbnRlZFQ9CnJlZT0zRGZ1bmN0aW9u KCl7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGsoZSx0 LG4pez0KZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoZDMuZXZlbnQuc2hpZnRLZXkmJiFu KXJldHVybiBkMy5ldmVudC5zaGlmdEtlPQp5PTNEITEsZS52YWx1ZXMmJmUudmFsdWVzLmZvckVh Y2goZnVuY3Rpb24oZSl7KGUudmFsdWVzfHxlLl92YWx1ZXMpJiZrKGUsMCw9CiEwKX0pLCEwO2lm KCFPKGUpKXJldHVybiEwO2UudmFsdWVzPyhlLl92YWx1ZXM9M0RlLnZhbHVlcyxlLnZhbHVlcz0z RG51bGwpOj0KKGUudmFsdWVzPTNEZS5fdmFsdWVzLGUuX3ZhbHVlcz0zRG51bGwpLGcudXBkYXRl KCl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gZS5fPQp2YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGg/aDpl LnZhbHVlcyYmZS52YWx1ZXMubGVuZ3RoP3A6IiJ9ZnVuY3Rpb24gQShlKXtyZXQ9CnVybiBlLl92 YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGh9ZnVuY3Rpb24gTyhlKXt2YXIgdD0zRGUudmFsdWVzfHxl Ll92YWx1ZXM7cj0KZXR1cm4gdCYmdC5sZW5ndGh9dmFyIHQ9M0QxLG49M0RkMy5zZWxlY3QodGhp cyksaT0zRGQzLmxheW91dC50cmVlKCkuY2hpbGRyPQplbihmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZXN9KS5zaXplKFtyLGZdKTtnLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7bi5jYWxsKGc9Cil9LGVb MF18fChlWzBdPTNEe2tleTphfSk7dmFyIHM9M0RpLm5vZGVzKGVbMF0pLHk9M0RkMy5zZWxlY3Qo dGhpcykuc2VsZWN0QT0KbGwoImRpdiIpLmRhdGEoW1tzXV0pLGI9M0R5LmVudGVyKCkuYXBwZW5k KCJkaXYiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhPQpwIG52LWluZGVudGVkdHJlZSIpLHc9 M0RiLmFwcGVuZCgidGFibGUiKSxFPTNEeS5zZWxlY3QoInRhYmxlIikuYXR0cigid2lkdGg9CiIs IjEwMCUiKS5hdHRyKCJjbGFzcyIsYyk7aWYobyl7dmFyIFM9M0R3LmFwcGVuZCgidGhlYWQiKSx4 PTNEUy5hcHBlbmQoInRyIj0KKTtsLmZvckVhY2goZnVuY3Rpb24oZSl7eC5hcHBlbmQoInRoIiku YXR0cigid2lkdGgiLGUud2lkdGg/ZS53aWR0aDoiMTAlIikuPQpzdHlsZSgidGV4dC1hbGlnbiIs ZS50eXBlPTNEPTNEIm51bWVyaWMiPyJyaWdodCI6ImxlZnQiKS5hcHBlbmQoInNwYW4iKS50ZXg9 CnQoZS5sYWJlbCl9KX12YXIgVD0zREUuc2VsZWN0QWxsKCJ0Ym9keSIpLmRhdGEoZnVuY3Rpb24o ZSl7cmV0dXJuIGV9KTtULmVudD0KZXIoKS5hcHBlbmQoInRib2R5IiksdD0zRGQzLm1heChzLGZ1 bmN0aW9uKGUpe3JldHVybiBlLmRlcHRofSksaS5zaXplKFtyLHQqPQpmXSk7dmFyIE49M0RULnNl bGVjdEFsbCgidHIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihl KXs9CnJldHVybiB1JiYhZS5jaGlsZHJlbj91KGUpOiEwfSl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGUuaWR8fGUuaWR8fCsrbX0pO04uZT0KeGl0KCkucmVtb3ZlKCksTi5zZWxlY3QoImltZy5udi10 cmVlaWNvbiIpLmF0dHIoInNyYyIsTCkuY2xhc3NlZCgiZm9sZGVkIixBPQopO3ZhciBDPTNETi5l bnRlcigpLmFwcGVuZCgidHIiKTtsLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj0zREMuYXBw ZW5kKCI9CnRkIikuc3R5bGUoInBhZGRpbmctbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKHQ/MDpl LmRlcHRoKmYrMTIrKEwoZSk/MDoxNikpKz0KInB4In0sImltcG9ydGFudCIpLnN0eWxlKCJ0ZXh0 LWFsaWduIixlLnR5cGU9M0Q9M0QibnVtZXJpYyI/InJpZ2h0IjoibGVmdCIpPQo7dD0zRD0zRDAm Jm4uYXBwZW5kKCJpbWciKS5jbGFzc2VkKCJudi10cmVlaWNvbiIsITApLmNsYXNzZWQoIm52LWZv bGRlZCIsQSk9Ci5hdHRyKCJzcmMiLEwpLnN0eWxlKCJ3aWR0aCIsIjE0cHgiKS5zdHlsZSgiaGVp Z2h0IiwiMTRweCIpLnN0eWxlKCJwYWRkaW5nIj0KLCIwIDFweCIpLnN0eWxlKCJkaXNwbGF5Iixm dW5jdGlvbihlKXtyZXR1cm4gTChlKT8iaW5saW5lLWJsb2NrIjoibm9uZSJ9KS5vPQpuKCJjbGlj ayIsayksbi5lYWNoKGZ1bmN0aW9uKG4peyF0JiZ2KG4pP2QzLnNlbGVjdCh0aGlzKS5hcHBlbmQo ImEiKS5hdHRyKCI9CmhyZWYiLHYpLmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2xhc3Nlcykp LmFwcGVuZCgic3BhbiIpOmQzLnNlbGVjdCh0aGlzKT0KLmFwcGVuZCgic3BhbiIpLGQzLnNlbGVj dCh0aGlzKS5zZWxlY3QoInNwYW4iKS5hdHRyKCJjbGFzcyIsZDMuZnVuY3RvcihlLmNsPQphc3Nl cykpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIGUuZm9ybWF0P3RbZS5rZXldP2UuZm9ybWF0KHRb ZS5rZXldKToiLSI6dFs9CmUua2V5XXx8Ii0ifSl9KSxlLnNob3dDb3VudCYmKG4uYXBwZW5kKCJz cGFuIikuYXR0cigiY2xhc3MiLCJudi1jaGlsZHJlbkNvdT0KbnQiKSxOLnNlbGVjdEFsbCgic3Bh bi5udi1jaGlsZHJlbkNvdW50IikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMmPQom ZS52YWx1ZXMubGVuZ3RofHxlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGg/IigiKyhlLnZhbHVl cyYmZS52YWx1ZXMuZmlsdGU9CnIoZnVuY3Rpb24oZSl7cmV0dXJuIHU/dShlKTohMH0pLmxlbmd0 aHx8ZS5fdmFsdWVzJiZlLl92YWx1ZXMuZmlsdGVyKGZ1bmN0aT0Kb24oZSl7cmV0dXJuIHU/dShl KTohMH0pLmxlbmd0aHx8MCkrIikiOiIifSkpfSksTi5vcmRlcigpLm9uKCJjbGljayIsZnVuY3Rp PQpvbihlKXtkLmVsZW1lbnRDbGljayh7cm93OnRoaXMsZGF0YTplLHBvczpbZS54LGUueV19KX0p Lm9uKCJkYmxjbGljayIsZnVuY3Q9CmlvbihlKXtkLmVsZW1lbnREYmxjbGljayh7cm93OnRoaXMs ZGF0YTplLHBvczpbZS54LGUueV19KX0pLm9uKCJtb3VzZW92ZXIiLD0KZnVuY3Rpb24oZSl7ZC5l bGVtZW50TW91c2VvdmVyKHtyb3c6dGhpcyxkYXRhOmUscG9zOltlLngsZS55XX0pfSkub24oIm1v dXNlPQpvdXQiLGZ1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3V0KHtyb3c6dGhpcyxkYXRhOmUs cG9zOltlLngsZS55XX0pfSl9KSxnfXY9CmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxs ZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Qz0Kb2xvcigpLHM9M0RN YXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSxvPTNEITAsdT0zRCExLGE9M0QiTm8gRGF0YSBB dmFpbGFiPQpsZS4iLGY9M0QyMCxsPTNEW3trZXk6ImtleSIsbGFiZWw6Ik5hbWUiLHR5cGU6InRl eHQifV0sYz0zRG51bGwsaD0zRCJpbWFnZXM9Ci9ncmV5LXBsdXMucG5nIixwPTNEImltYWdlcy9n cmV5LW1pbnVzLnBuZyIsZD0zRGQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLD0KImVsZW1lbnRE YmxjbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSx2PTNEZnVuY3Rp b24oZSl7cmV0PQp1cm4gZS51cmx9LG09M0QwO3JldHVybiBnLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoZyksZy5tYXJnaW49M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLj0KdG9wOnQu dG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmln aHQsdC5ib3R0b209Cj0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0 LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0KPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQu bGVmdCxnKTp0fSxnLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0 aD8obj0zRGUsZyk6bn0sZy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocj0zRGUsZyk9CjpyfSxnLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLD0Kc2NhdHRlci5jb2xvcihpKSxnKTpp fSxnLmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLGcpPQo6 c30sZy5oZWFkZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUs Zyk6b30sZy5ub0RhdGE9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh PTNEZSxnKTphfSxnLmZpbHRlclplcm89M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh1PTNEZSxnKTp1fSxnLmNvbHVtbnM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l PQpudHMubGVuZ3RoPyhsPTNEZSxnKTpsfSxnLnRhYmxlQ2xhc3M9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD89CihjPTNEZSxnKTpjfSxnLmljb25PcGVuPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLGcpOmh9LD0KZy5pY29uQ2xvc2U9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsZyk6cH0sZy5nZXRVcmw9 M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxnKTp2fSxnfSxl Lm1vZGVscy5sZWdlbmQ9M0RmdW5jdGk9Cm9uKCl7ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5lYWNo KGZ1bmN0aW9uKGMpe3ZhciBoPTNEbi10LmxlZnQtdC5yaWdodCxwPTNEZD0KMy5zZWxlY3QodGhp cyksZD0zRHAuc2VsZWN0QWxsKCJnLm52LWxlZ2VuZCIpLmRhdGEoW2NdKSx2PTNEZC5lbnRlcigp LmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LWxlZ2VuZCIpLmFwcGVuZCgiZyIp LG09M0RkLnNlbGVjdCgiZyIpO2QuYXR0cig9CiJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0Lmxl ZnQrIiwiK3QudG9wKyIpIik7dmFyIGc9M0RtLnNlbGVjdEFsbCgiLm52LXNlcj0KaWVzIikuZGF0 YShmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHk9M0RnLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJuPQp2LXNlcmllcyIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUsdCl7bC5sZWdl bmRNb3VzZW92ZXIoZSx0KX0pLm9uKCJtb3VzZW89CnV0IixmdW5jdGlvbihlLHQpe2wubGVnZW5k TW91c2VvdXQoZSx0KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtsLmxlZ2VuZD0KQ2xpY2so ZSx0KSxhJiYoZj8oYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMH0pLGUuZGlz YWJsZWQ9M0QhMSk6PQooZS5kaXNhYmxlZD0zRCFlLmRpc2FibGVkLGMuZXZlcnkoZnVuY3Rpb24o ZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSYmYy5mb3JFYWM9CmgoZnVuY3Rpb24oZSl7ZS5kaXNhYmxl ZD0zRCExfSkpLGwuc3RhdGVDaGFuZ2Uoe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9uKGUpez0KcmV0 dXJuISFlLmRpc2FibGVkfSl9KSl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKGUsdCl7bC5sZWdl bmREYmxjbGljayhlLHQpPQosYSYmKGMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPTNE ITB9KSxlLmRpc2FibGVkPTNEITEsbC5zdGF0ZUNoYW5nZSg9CntkaXNhYmxlZDpjLm1hcChmdW5j dGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KX0pKX0pO3kuYXBwZW5kKCJjaXJjbGUiKS5zdD0K eWxlKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kLXN5bWJvbCIpLmF0 dHIoInIiLDUpLHkuYXBwZW5kPQooInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iiku YXR0cigiY2xhc3MiLCJudi1sZWdlbmQtdGV4dCIpLmF0dHIoImQ9CnkiLCIuMzJlbSIpLmF0dHIo ImR4IiwiOCIpLGcuY2xhc3NlZCgiZGlzYWJsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2Fi bD0KZWR9KSxnLmV4aXQoKS5yZW1vdmUoKSxnLnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoImZpbGwi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuPQogZS5jb2xvcnx8cyhlLHQpfSkuc3R5bGUoInN0cm9rZSIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8cyhlLHQpfSksZy49CnNlbGVjdCgidGV4dCIp LnRleHQoaSk7aWYobyl7dmFyIGI9M0RbXTtnLmVhY2goZnVuY3Rpb24odCxuKXt2YXIgcj0zRGQz LnNlbD0KZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLGk7dHJ5e2k9M0RyLmdldENvbXB1dGVkVGV4 dExlbmd0aCgpO2lmKGk8PTNEMCl0aHJvPQp3IEVycm9yKCl9Y2F0Y2gocyl7aT0zRGUudXRpbHMu Y2FsY0FwcHJveFRleHRXaWR0aChyKX1iLnB1c2goaSsyOCl9KTt2YXIgdz0KPTNEMCxFPTNEMCxT PTNEW107d2hpbGUoRTxoJiZ3PGIubGVuZ3RoKVNbd109M0RiW3ddLEUrPTNEYlt3KytdO3c9M0Q9 M0Q9M0QwPQomJih3PTNEMSk7d2hpbGUoRT5oJiZ3PjEpe1M9M0RbXSx3LS07Zm9yKHZhciB4PTNE MDt4PGIubGVuZ3RoO3grKyliW3hdPihTW3g9CiV3XXx8MCkmJihTW3gld109M0RiW3hdKTtFPTNE Uy5yZWR1Y2UoZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUrdH0pfXZhciBUPQo9M0RbXTtmb3Io dmFyIE49M0QwLEM9M0QwO048dztOKyspVFtOXT0zREMsQys9M0RTW05dO2cuYXR0cigidHJhbnNm b3JtIixmdW49CmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK1RbdCV3XSsiLCIrKDUrTWF0 aC5mbG9vcih0L3cpKjIwKSsiKSJ9KSx1P20uYT0KdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo Iisobi10LnJpZ2h0LUUpKyIsIit0LnRvcCsiKSIpOm0uYXR0cigidHJhbnNmb3JtPQoiLCJ0cmFu c2xhdGUoMCwiK3QudG9wKyIpIikscj0zRHQudG9wK3QuYm90dG9tK01hdGguY2VpbChiLmxlbmd0 aC93KSoyMH1lbHM9CmV7dmFyIGs9M0Q1LEw9M0Q1LEE9M0QwLE87Zy5hdHRyKCJ0cmFuc2Zvcm0i LGZ1bmN0aW9uKGUscil7dmFyIGk9M0RkMy5zZWxlYz0KdCh0aGlzKS5zZWxlY3QoInRleHQiKS5u b2RlKCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkrMjg7cmV0dXJuIE89M0RMLG48dC5sPQplZnQr dC5yaWdodCtPK2kmJihMPTNETz0zRDUsays9M0QyMCksTCs9M0RpLEw+QSYmKEE9M0RMKSwidHJh bnNsYXRlKCIrTysiLCI9CitrKyIpIn0pLG0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr KG4tdC5yaWdodC1BKSsiLCIrdC50b3ArIikiKSxyPTNEdD0KLnRvcCt0LmJvdHRvbStrKzE1fX0p LGN9dmFyIHQ9M0R7dG9wOjUscmlnaHQ6MCxib3R0b206NSxsZWZ0OjB9LG49M0Q0MDAscj0KPTNE MjAsaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0scz0zRGUudXRpbHMuZGVmYXVsdENvbG9y KCksbz0zRCEwLHU9M0QhPQowLGE9M0QhMCxmPTNEITEsbD0zRGQzLmRpc3BhdGNoKCJsZWdlbmRD bGljayIsImxlZ2VuZERibGNsaWNrIiwibGVnZW5kTW91c2U9Cm92ZXIiLCJsZWdlbmRNb3VzZW91 dCIsInN0YXRlQ2hhbmdlIik7cmV0dXJuIGMuZGlzcGF0Y2g9M0RsLGMub3B0aW9ucz0zRGUudT0K dGlscy5vcHRpb25zRnVuYy5iaW5kKGMpLGMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHQuPQp0b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50 b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCI9CnVuZGVmaW5lZCI/ZS5yaWdo dDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90 dD0Kb206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxl ZnQ6dC5sZWZ0LGMpOnR9LGMud2lkPQp0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhuPTNEZSxjKTpufSxjLmhlaWdodD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHI9M0RlLGMpOnJ9LGMua2V5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cz0KLmxlbmd0aD8oaT0zRGUsYyk6aX0sYy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhzPTNEZS51PQp0aWxzLmdldENvbG9yKHQpLGMpOnN9LGMuYWxpZ249 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGU9CixjKTpvfSxjLnJp Z2h0QWxpZ249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsYyk6 dX0sYy51cD0KZGF0ZVN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGE9M0RlLGMpOmF9LGMucmFkaW9CdXR0b25NPQpvZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZj0zRGUsYyk6Zn0sY30sZS5tb2RlbHMubGluZT0zRGY9CnVuY3Rpb24o KXtmdW5jdGlvbiBtKGcpe3JldHVybiBnLmVhY2goZnVuY3Rpb24obSl7dmFyIGc9M0RyLW4ubGVm dC1uLnJpZ2h0LD0KYj0zRGktbi50b3Atbi5ib3R0b20sdz0zRGQzLnNlbGVjdCh0aGlzKTtjPTNE dC54U2NhbGUoKSxoPTNEdC55U2NhbGUoKSxkPTNEPQpkfHxjLHY9M0R2fHxoO3ZhciBFPTNEdy5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lIikuZGF0YShbbV0pLFM9M0RFLmVudGU9CnIoKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW5lIiksVD0zRFMuYXBw ZW5kKCJkZWZzIiksTj0KPTNEUy5hcHBlbmQoImciKSxDPTNERS5zZWxlY3QoImciKTtOLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksPQpOLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtc2NhdHRlcldyYXAiKSxFLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg9CiIr bi5sZWZ0KyIsIituLnRvcCsiKSIpLHQud2lkdGgoZykuaGVpZ2h0KGIpO3ZhciBrPTNERS5zZWxl Y3QoIi5udi1zY2F0dGVyVz0KcmFwIik7ay5jYWxsKHQpLFQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0 dHIoImlkIiwibnYtZWRnZS1jbGlwLSIrdC5pZCgpKS5hcHBlPQpuZCgicmVjdCIpLEUuc2VsZWN0 KCIjbnYtZWRnZS1jbGlwLSIrdC5pZCgpKyIgcmVjdCIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCI9 CmhlaWdodCIsYj4wP2I6MCksQy5hdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlw LSIrdC5pZCgpKyIpIjoiIiksaz0KLmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNs aXAtIit0LmlkKCkrIikiOiIiKTt2YXIgTD0zREUuc2VsZWN0KCIuPQpudi1ncm91cHMiKS5zZWxl Y3RBbGwoIi5udi1ncm91cCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUp e3I9CmV0dXJuIGUua2V5fSk7TC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3Bh Y2l0eSIsMWUtNikuc3R5bGUoImZpbD0KbC1vcGFjaXR5IiwxZS02KSxMLmV4aXQoKS5yZW1vdmUo KSxMLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1nPQpyb3VwIG52LXNlcmll cy0iK3R9KS5jbGFzc2VkKCJob3ZlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KS5zdHls ZSgiZmk9CmxsIixmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixm dW5jdGlvbihlLHQpe3JldHVybiBzKGUsdD0KKX0pLEwuc3R5bGUoInN0cm9rZS1vcGFjaXR5Iiwx KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNSk7dmFyIEE9M0RMLnNlbGVjdEFsPQpsKCJwYXRoLm52 LWFyZWEiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBmKGUpP1tlXTpbXX0pO0EuZW50ZXIoKS5h cHBlbmQoInA9CmF0aCIpLmF0dHIoImNsYXNzIiwibnYtYXJlYSIpLmF0dHIoImQiLGZ1bmN0aW9u KHQpe3JldHVybiBkMy5zdmcuYXJlYSgpLmludD0KZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1 bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGQobyh0LG4pKSl9PQopLnkwKGZ1 bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKHYodSh0LG4pKSl9KS55MShmdW5j dGlvbihlLHQpe3I9CmV0dXJuIHYoaC5kb21haW4oKVswXTw9M0QwP2guZG9tYWluKClbMV0+PTNE MD8wOmguZG9tYWluKClbMV06aC5kb21haW4oKVswXT0KKX0pLmFwcGx5KHRoaXMsW3QudmFsdWVz XSl9KSxMLmV4aXQoKS5zZWxlY3RBbGwoInBhdGgubnYtYXJlYSIpLnJlbW92ZSgpLEEuPQphdHRy KCJkIixmdW5jdGlvbih0KXtyZXR1cm4gZDMuc3ZnLmFyZWEoKS5pbnRlcnBvbGF0ZShwKS5kZWZp bmVkKGEpLngoZnVuY3Q9Cmlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhjKG8odCxu KSkpfSkueTAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dD0KaWxzLk5hTnRvWmVybyhoKHUodCxu KSkpfSkueTEoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaChoLmRvbWFpbigpWzBdPD0zRDA/aC5kPQpv bWFpbigpWzFdPj0zRDA/MDpoLmRvbWFpbigpWzFdOmguZG9tYWluKClbMF0pfSkuYXBwbHkodGhp cyxbdC52YWx1ZXNdKX0pO3Y9CmFyIE89M0RMLnNlbGVjdEFsbCgicGF0aC5udi1saW5lIikuZGF0 YShmdW5jdGlvbihlKXtyZXR1cm5bZS52YWx1ZXNdfSk7Ty5lbj0KdGVyKCkuYXBwZW5kKCJwYXRo IikuYXR0cigiY2xhc3MiLCJudi1saW5lIikuYXR0cigiZCIsZDMuc3ZnLmxpbmUoKS5pbnRlcnBv PQpsYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRv WmVybyhkKG8odCxuKSkpfSkueSg9CmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9a ZXJvKHYodSh0LG4pKSl9KSksTy5hdHRyKCJkIixkMy5zdmcubGluZT0KKCkuaW50ZXJwb2xhdGUo cCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGMo byh0PQosbikpKX0pLnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oaCh1 KHQsbikpKX0pKSxkPTNEYy5jb3B5KCk9Cix2PTNEaC5jb3B5KCl9KSxtfXZhciB0PTNEZS5tb2Rl bHMuc2NhdHRlcigpLG49M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZT0KZnQ6MH0scj0zRDk2 MCxpPTNENTAwLHM9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLG89M0RmdW5jdGlvbihlKXtyZXR1 cm4gZS54PQp9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxhPTNEZnVuY3Rpb24oZSx0KXty ZXR1cm4haXNOYU4odShlLHQpKSYmdShlLHQ9CikhPTNEPTNEbnVsbH0sZj0zRGZ1bmN0aW9uKGUp e3JldHVybiBlLmFyZWF9LGw9M0QhMSxjLGgscD0zRCJsaW5lYXIiO3Quc2l6ZT0KKDE2KS5zaXpl RG9tYWluKFsxNiwyNTZdKTt2YXIgZCx2O3JldHVybiBtLmRpc3BhdGNoPTNEdC5kaXNwYXRjaCxt LnNjYXR0ZXI9Cj0zRHQsZDMucmViaW5kKG0sdCwiaWQiLCJpbnRlcmFjdGl2ZSIsInNpemUiLCJ4 U2NhbGUiLCJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RD0Kb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwi eVJhbmdlIiwic2l6ZURvbWFpbiIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6PQplIiwiY2xp cFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwiY2xpcFJhZGl1cyIsInBhZERhdGEiLCJoaWdobGlnaHRQ b2ludCIsImNsZWE9CnJIaWdobGlnaHRzIiksbS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVu Yy5iaW5kKG0pLG0ubWFyZ2luPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obi50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3AsPQpuLnJp Z2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4uYm90 dG9tPTNEdHlwZW9mIGU9Ci5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3R0b20s bi5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbj0KZWQiP2UubGVmdDpuLmxlZnQsbSk6 bn0sbS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEPQpl LG0pOnJ9LG0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9 M0RlLG0pOml9LG0ueD0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89 M0RlLHQueChlKSxtKTpvfSxtLnk9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVu Z3RoPyh1PTNEZSx0LnkoZSksbSk6dX0sbS5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh PQpyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0uY29sb3I9M0RmdW5jdGlvbihuKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD89CihzPTNEZS51dGlscy5nZXRDb2xvcihuKSx0LmNvbG9yKHMp LG0pOnN9LG0uaW50ZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVu Z3RoPyhwPTNEZSxtKTpwfSxtLmRlZmluZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz LmxlPQpuZ3RoPyhhPTNEZSxtKTphfSxtLmlzQXJlYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhmPTNEZDMuZnU9Cm5jdG9yKGUpLG0pOmZ9LG19LGUubW9kZWxzLmxpbmVD aGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTihtKXtyZXR1cm4gbS5lYT0KY2goZnVuY3Rpb24o bSl7dmFyIHg9M0RkMy5zZWxlY3QodGhpcyksQz0zRHRoaXMsaz0zRChhfHxwYXJzZUludCh4LnN0 eWxlKCJ3PQppZHRoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LEw9M0QoZnx8cGFyc2VJbnQoeC5z dHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG89CnAtby5ib3R0b207Ti51cGRhdGU9M0RmdW5jdGlv bigpe3guY2FsbChOKX0sTi5jb250YWluZXI9M0R0aGlzLGIuZGlzYWJsZWQ9Cj0zRG0ubWFwKGZ1 bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgQTt3PTNEe307Zm9yKEEg aW4gYiliWz0KQV1pbnN0YW5jZW9mIEFycmF5P3dbQV09M0RiW0FdLnNsaWNlKDApOndbQV09M0Ri W0FdfWlmKCFtfHwhbS5sZW5ndGh8fCFtLmZpPQpsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZh bHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBPPTNEeC5zZWxlY3RBbGwoIi5udi09Cm5vRGF0YSIp LmRhdGEoW0VdKTtyZXR1cm4gTy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwi bnZkMyBudi1ubz0KRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3Ii LCJtaWRkbGUiKSxPLmF0dHIoIngiLG8ubGVmdCtrPQovMikuYXR0cigieSIsby50b3ArTC8yKS50 ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksTn14LnNlbGVjdEFsbCgiLm52LW5vRGE9CnRhIiku cmVtb3ZlKCksZz0zRHQueFNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyIE09M0R4LnNlbGVjdEFs bCgiZy5udi13cmFwLj0KbnYtbGluZUNoYXJ0IikuZGF0YShbbV0pLF89M0RNLmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyPQphcCBudi1saW5lQ2hhcnQiKS5hcHBl bmQoImciKSxEPTNETS5zZWxlY3QoImciKTtfLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJvcGE9CmNp dHkiLDApLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxfLmFwcGVu ZCgiZyIpLmF0dHIoImNsYT0Kc3MiLCJudi15IG52LWF4aXMiKSxfLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtbGluZXNXcmFwIiksXy5hcHBlbmQoImciPQopLmF0dHIoImNsYXNzIiwibnYt bGVnZW5kV3JhcCIpLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZSI9 CiksRC5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsaykuYXR0cigiaGVpZ2h0IixMPjA/TDow KSxsJiYoaS53aWR0aChrKSxELj0Kc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKG0pLmNh bGwoaSksby50b3AhPTNEaS5oZWlnaHQoKSYmKG8udG9wPTNEaS5oPQplaWdodCgpLEw9M0QoZnx8 cGFyc2VJbnQoeC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tKSxNLnNlbGVj dCg9CiIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1v LnRvcCsiKSIpKSxNLmF0dHIoInRyYT0KbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitv LnRvcCsiKSIpLHAmJkQuc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0PQpyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitrKyIsMCkiKSxkJiYocy53aWR0aChrKS5oZWlnaHQoTCkubWFyZ2luKHts ZWZ0Om89Ci5sZWZ0LHRvcDpvLnRvcH0pLnN2Z0NvbnRhaW5lcih4KS54U2NhbGUoZyksTS5zZWxl Y3QoIi5udi1pbnRlcmFjdGl2ZSIpLmNhbD0KbChzKSksdC53aWR0aChrKS5oZWlnaHQoTCkuY29s b3IobS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dShlLHQpPQp9KS5maWx0ZXIo ZnVuY3Rpb24oZSx0KXtyZXR1cm4hbVt0XS5kaXNhYmxlZH0pKTt2YXIgUD0zREQuc2VsZWN0KCIu bnYtbGluZXM9CldyYXAiKS5kYXR1bShtLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNh YmxlZH0pKTtQLmNhbGwodCksYyYmKG4uc2NhbD0KZShnKS50aWNrcyhrLzEwMCkudGlja1NpemUo LUwsMCksRC5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iPQosInRyYW5z bGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksRC5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxs KG4pKSxoJiYoci49CnNjYWxlKHkpLnRpY2tzKEwvMzYpLnRpY2tTaXplKC1rLDApLEQuc2VsZWN0 KCIubnYteS5udi1heGlzIikuY2FsbChyKSksaS5kaT0Kc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIs ZnVuY3Rpb24oZSl7Yj0zRGUsUy5zdGF0ZUNoYW5nZShiKSxOLnVwZGF0ZSgpfSkscy5kPQppc3Bh dGNoLm9uKCJlbGVtZW50TW91c2Vtb3ZlIixmdW5jdGlvbihpKXt0LmNsZWFySGlnaGxpZ2h0cygp O3ZhciBhLGYsbCxjPQo9M0RbXTttLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnNlcmll c0luZGV4PTNEdCwhZS5kaXNhYmxlZH0pLmZvckVhY2g9CihmdW5jdGlvbihuLHIpe2Y9M0RlLmlu dGVyYWN0aXZlQmlzZWN0KG4udmFsdWVzLGkucG9pbnRYVmFsdWUsTi54KCkpLHQuaGlnaD0KbGln aHRQb2ludChyLGYsITApO3ZhciBzPTNEbi52YWx1ZXNbZl07aWYodHlwZW9mIHM9M0Q9M0QidW5k ZWZpbmVkIilyZXR1cm47PQp0eXBlb2YgYT0zRD0zRCJ1bmRlZmluZWQiJiYoYT0zRHMpLHR5cGVv ZiBsPTNEPTNEInVuZGVmaW5lZCImJihsPTNETi54U2NhbGU9CigpKE4ueCgpKHMsZikpKSxjLnB1 c2goe2tleTpuLmtleSx2YWx1ZTpOLnkoKShzLGYpLGNvbG9yOnUobixuLnNlcmllc0luZGV4KT0K fSl9KTtpZihjLmxlbmd0aD4yKXt2YXIgaD0zRE4ueVNjYWxlKCkuaW52ZXJ0KGkubW91c2VZKSxw PTNETWF0aC5hYnMoTi55U2NhPQpsZSgpLmRvbWFpbigpWzBdLU4ueVNjYWxlKCkuZG9tYWluKClb MV0pLGQ9M0QuMDMqcCxnPTNEZS5uZWFyZXN0VmFsdWVJbmRleCg9CmMubWFwKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlfSksaCxkKTtnIT0zRD0zRG51bGwmJihjW2ddLmhpZ2hsaWdodD0zRCEw KT0KfXZhciB5PTNEbi50aWNrRm9ybWF0KCkoTi54KCkoYSxmKSk7cy50b29sdGlwLnBvc2l0aW9u KHtsZWZ0Omwrby5sZWZ0LHRvcDppPQoubW91c2VZK28udG9wfSkuY2hhcnRDb250YWluZXIoQy5w YXJlbnROb2RlKS5lbmFibGVkKHYpLnZhbHVlRm9ybWF0dGVyKGZ1bmM9CnRpb24oZSx0KXtyZXR1 cm4gci50aWNrRm9ybWF0KCkoZSl9KS5kYXRhKHt2YWx1ZTp5LHNlcmllczpjfSkoKSxzLnJlbmRl ckd1aT0KZGVMaW5lKGwpfSkscy5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0IixmdW5jdGlv bihlKXtTLnRvb2x0aXBIaWRlKCksdC5jPQpsZWFySGlnaGxpZ2h0cygpfSksUy5vbigidG9vbHRp cFNob3ciLGZ1bmN0aW9uKGUpe3YmJlQoZSxDLnBhcmVudE5vZGUpfSksUy49Cm9uKCJjaGFuZ2VT dGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJm0ubGVu Z3RoPTNEPQo9M0Q9M0RlLmRpc2FibGVkLmxlbmd0aCYmKG0uZm9yRWFjaChmdW5jdGlvbih0LG4p e3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkW249Cl19KSxiLmRpc2FibGVkPTNEZS5kaXNhYmxlZCks Ti51cGRhdGUoKX0pfSksTn12YXIgdD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZT0KLm1vZGVscy5h eGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRGUuaW50 ZXJhY3RpdmVHPQp1aWRlbGluZSgpLG89M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0 OjYwfSx1PTNEZS51dGlscy5kZWZhdWx0Q29sb3I9CigpLGE9M0RudWxsLGY9M0RudWxsLGw9M0Qh MCxjPTNEITAsaD0zRCEwLHA9M0QhMSxkPTNEITEsdj0zRCEwLG09M0RmdW5jdGlvbj0KKGUsdCxu LHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sZyx5 LGI9M0R7fSx3PTNEPQpudWxsLEU9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNEZDMuZGlzcGF0 Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCI9CnN0YXRlQ2hhbmdlIiwiY2hhbmdlU3Rh dGUiKSx4PTNEMDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllbj0KdChw PyJyaWdodCI6ImxlZnQiKTt2YXIgVD0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSso cy5vZmZzZXRMZWZ0fHwwPQopLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRp Y2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmQ9CmV4KSksZj0zRHIudGlja0Zvcm1h dCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRG0oaS5zZXJpZXMua2V5LGEsZj0K LGksTik7ZS50b29sdGlwLnNob3coW28sdV0sbCxudWxsLG51bGwscyl9O3JldHVybiB0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91PQpzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0Rb ZS5wb3NbMF0rby5sZWZ0LGUucG9zWzFdK28udG9wXSxTLnRvb2w9CnRpcFNob3coZSl9KSx0LmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Uy50b29sdGlw SD0KaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7diYmZS50b29sdGlwLmNs ZWFudXAoKX0pLE4uZGlzcGF0Y2g9Cj0zRFMsTi5saW5lcz0zRHQsTi5sZWdlbmQ9M0RpLE4ueEF4 aXM9M0RuLE4ueUF4aXM9M0RyLE4uaW50ZXJhY3RpdmVMYXllcj0zRD0KcyxkMy5yZWJpbmQoTix0 LCJkZWZpbmVkIiwiaXNBcmVhIiwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwieERv bWFpPQpuIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImlu dGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCI9CmNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImlkIiwi aW50ZXJwb2xhdGUiKSxOLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdT0KbmMuYmluZChOKSxO Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnRvcD0zRHR5 cGVvZiBlPQoudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9M0R0eXBlb2Yg ZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnI9CmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVv ZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLj0KbGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om8ubGVmdCxOKTpvfSxOLndpZHRoPTNE ZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsTik6YX0sTi5oZWln aHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhmPTNEZSxOKTpmfSxO LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9Cj0zRGUudXRp bHMuZ2V0Q29sb3IodCksaS5jb2xvcih1KSxOKTp1fSxOLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxOKTpsfSxOLnNob3dYQXhpcz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGM9M0RlLE4pOmN9LE4uc2hvd1lB eGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLE49Cik6aH0s Ti5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cD0zRGUsci5vcmllbj0KdChlPyJyaWdodCI6ImxlZnQiKSxOKTpwfSxOLnVzZUludGVyYWN0aXZl R3VpZGVsaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oZD0zRGUs ZT0zRD0zRD0zRCEwJiYoTi5pbnRlcmFjdGl2ZSghMSksTi51c2VWb3Jvbm9pKCExKSksTik9Cjpk fSxOLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Rl LE4pOnZ9LE4udG9vbHRpcD0KQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhtPTNEZSxOKTptfSxOLnN0YXRlPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYj0zRGUsTik6Yn0sTi5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXQ9 CnVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxOKTp3fSxOLm5vRGF0YT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KEU9M0RlLE4pOkV9LE4udHJhbnNpdGlvbkR1cmF0 aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8oeD0zRGUsTik6eH0s Tn0sZS5tb2RlbHMubGluZVBsdXNCYXJDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVChlKXty ZXQ9CnVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGw9M0RkMy5zZWxlY3QodGhpcyksYz0zRHRo aXMsdj0zRChhfHxwYXJzZUludChsLj0Kc3R5bGUoIndpZHRoIikpfHw5NjApLXUubGVmdC11LnJp Z2h0LE49M0QoZnx8cGFyc2VJbnQobC5zdHlsZSgiaGVpZ2h0IikpfHw0PQowMCktdS50b3AtdS5i b3R0b207VC51cGRhdGU9M0RmdW5jdGlvbigpe2wuY2FsbChUKX0sYi5kaXNhYmxlZD0zRGUubWFw KGZ1bmM9CnRpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXcpe3ZhciBDO3c9M0R7fTtm b3IoQyBpbiBiKWJbQ11pbnN0YW5jZW9mID0KQXJyYXk/d1tDXT0zRGJbQ10uc2xpY2UoMCk6d1tD XT0zRGJbQ119aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uPQooZSl7cmV0dXJu IGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIGs9M0RsLnNlbGVjdEFsbCgiLm52LW5vRGF0 YSIpLmRhdGE9CihbRV0pO3JldHVybiBrLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xh c3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoIj0KZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFu Y2hvciIsIm1pZGRsZSIpLGsuYXR0cigieCIsdS5sZWZ0K3YvMikuYXR0cigieSIsPQp1LnRvcCtO LzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxUfWwuc2VsZWN0QWxsKCIubnYtbm9EYXRh IikucmVtb3ZlKCk9Cjt2YXIgTD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGVkJiZlLmJhcn0pLEE9M0RlLmZpbHRlcihmdW5jdD0KaW9uKGUpe3JldHVybiFlLmJhcn0pO209 M0RBLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aCYmPQpBLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pWzBdLnZhbHVlcy5sZW5ndGg/dC54 U2NhbGUoKTpuLnhTY2E9CmxlKCksZz0zRG4ueVNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyIE89 M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52LT0Kd3JhcC5udi1saW5lUGx1c0JhciIp LmRhdGEoW2VdKSxNPTNETy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkPQoz IG52LXdyYXAgbnYtbGluZVBsdXNCYXIiKS5hcHBlbmQoImciKSxfPTNETy5zZWxlY3QoImciKTtN LmFwcGVuZCgiZyIpLmF0dHI9CigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxNLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYteTEgbnYtYXhpcyIpLE0uYXBwZT0KbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXkyIG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dy PQphcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxNLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiw9CiJudi1sZWdlbmRXcmFwIikscCYmKG8ud2lkdGgodi8yKSxf LnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdT0KbmN0aW9uKGUpe3JldHVy biBlLm9yaWdpbmFsS2V5PTNEZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuZGVmaW5lZD9lLmtleTpl Lm9yPQppZ2luYWxLZXksZS5rZXk9M0RlLm9yaWdpbmFsS2V5KyhlLmJhcj8iIChsZWZ0IGF4aXMp IjoiIChyaWdodCBheGlzKSIpLGV9KSk9Ci5jYWxsKG8pLHUudG9wIT0zRG8uaGVpZ2h0KCkmJih1 LnRvcD0zRG8uaGVpZ2h0KCksTj0zRChmfHxwYXJzZUludChsLnN0eWxlKD0KImhlaWdodCIpKXx8 NDAwKS11LnRvcC11LmJvdHRvbSksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJh bnNmb3JtPQoiLCJ0cmFuc2xhdGUoIit2LzIrIiwiKyAtdS50b3ArIikiKSksTy5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQ9CisiLCIrdS50b3ArIikiKSx0LndpZHRoKHYpLmhl aWdodChOKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbD0Kb3J8fGgoZSx0 KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiYhZVtuXS5iYXJ9 KSksbi53aWR0PQpoKHYpLmhlaWdodChOKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxoKGUsdCl9KS5maWx0ZXIoZnU9Cm5jdGlvbih0LG4pe3JldHVybiFlW25dLmRp c2FibGVkJiZlW25dLmJhcn0pKTt2YXIgRD0zRF8uc2VsZWN0KCIubnYtYmFyc1dyYT0KcCIpLmRh dHVtKEwubGVuZ3RoP0w6W3t2YWx1ZXM6W119XSksUD0zRF8uc2VsZWN0KCIubnYtbGluZXNXcmFw IikuZGF0dW0oQVswPQpdJiYhQVswXS5kaXNhYmxlZD9BOlt7dmFsdWVzOltdfV0pO2QzLnRyYW5z aXRpb24oRCkuY2FsbChuKSxkMy50cmFuc2l0aW9uKFA9CikuY2FsbCh0KSxyLnNjYWxlKG0pLnRp Y2tzKHYvMTAwKS50aWNrU2l6ZSgtTiwwKSxfLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLj0KYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitnLnJhbmdlKClbMF0rIikiKSxkMy50cmFuc2l0 aW9uKF8uc2VsZWN0KCIuPQpudi14Lm52LWF4aXMiKSkuY2FsbChyKSxpLnNjYWxlKGcpLnRpY2tz KE4vMzYpLnRpY2tTaXplKC12LDApLGQzLnRyYW5zaXRpb249CihfLnNlbGVjdCgiLm52LXkxLm52 LWF4aXMiKSkuc3R5bGUoIm9wYWNpdHkiLEwubGVuZ3RoPzE6MCkuY2FsbChpKSxzLnNjYWxlKD0K eSkudGlja3MoTi8zNikudGlja1NpemUoTC5sZW5ndGg/MDotdiwwKSxfLnNlbGVjdCgiLm52LXky Lm52LWF4aXMiKS5zdHlsZSgiPQpvcGFjaXR5IixBLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiK3YrIiwwKSIpLGQzLnRyYW5zaXRpb249CihfLnNlbGVjdCgiLm52LXky Lm52LWF4aXMiKSkuY2FsbChzKSxvLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24o ZT0KKXtiPTNEZSxTLnN0YXRlQ2hhbmdlKGIpLFQudXBkYXRlKCl9KSxTLm9uKCJ0b29sdGlwU2hv dyIsZnVuY3Rpb24oZSl7ZCYmeChlPQosYy5wYXJlbnROb2RlKX0pLFMub24oImNoYW5nZVN0YXRl IixmdW5jdGlvbih0KXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5kZWY9CmluZWQiJiYoZS5mb3JF YWNoKGZ1bmN0aW9uKGUsbil7ZS5kaXNhYmxlZD0zRHQuZGlzYWJsZWRbbl19KSxiLmRpc2FibGVk PTNEdD0KLmRpc2FibGVkKSxULnVwZGF0ZSgpfSl9KSxUfXZhciB0PTNEZS5tb2RlbHMubGluZSgp LG49M0RlLm1vZGVscy5oaXN0b3JpY2FsPQpCYXIoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0Rl Lm1vZGVscy5heGlzKCkscz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5tb2Q9CmVscy5sZWdlbmQo KSx1PTNEe3RvcDozMCxyaWdodDo2MCxib3R0b206NTAsbGVmdDo2MH0sYT0zRG51bGwsZj0zRG51 bGwsbD0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBl Lnl9LGg9M0RlLnV0aWxzLmRlZmF1bHRDb2xvPQpyKCkscD0zRCEwLGQ9M0QhMCx2PTNEZnVuY3Rp b24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiA9CmF0ICIrdCsi PC9wPiJ9LG0sZyx5LGI9M0R7fSx3PTNEbnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsUz0z RGQzLmRpc3BhdD0KY2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIs ImNoYW5nZVN0YXRlIik7bi5wYWREYXRhKCEwKSx0PQouY2xpcEVkZ2UoITEpLnBhZERhdGEoITAp LHIub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KS5oaWdobGlnaHRaZXJvKCE9CjEpLGku b3JpZW50KCJsZWZ0Iikscy5vcmllbnQoInJpZ2h0Iik7dmFyIHg9M0RmdW5jdGlvbihuLG8pe3Zh ciB1PTNEbi5wb3NbMD0KXSsoby5vZmZzZXRMZWZ0fHwwKSxhPTNEbi5wb3NbMV0rKG8ub2Zmc2V0 VG9wfHwwKSxmPTNEci50aWNrRm9ybWF0KCkodC54KCkoPQpuLnBvaW50LG4ucG9pbnRJbmRleCkp LGw9M0Qobi5zZXJpZXMuYmFyP2k6cykudGlja0Zvcm1hdCgpKHQueSgpKG4ucG9pbnQsbi49CnBv aW50SW5kZXgpKSxjPTNEdihuLnNlcmllcy5rZXksZixsLG4sVCk7ZS50b29sdGlwLnNob3coW3Us YV0sYyxuLnZhbHVlPDA/Ij0KbiI6InMiLG51bGwsbyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJl bGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpPQp7ZS5wb3M9M0RbZS5wb3NbMF0r dS5sZWZ0LGUucG9zWzFdK3UudG9wXSxTLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbig9 CiJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZShlKX0p LG4uZGlzcGF0Y2gub24oImVsZT0KbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtl LnBvcz0zRFtlLnBvc1swXSt1LmxlZnQsZS5wb3NbMV0rdS50b3BdPQosUy50b29sdGlwU2hvdyhl KX0pLG4uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtT LnQ9Cm9vbHRpcEhpZGUoZSl9KSxTLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtkJiZlLnRv b2x0aXAuY2xlYW51cCgpfSksVC5kaT0Kc3BhdGNoPTNEUyxULmxlZ2VuZD0zRG8sVC5saW5lcz0z RHQsVC5iYXJzPTNEbixULnhBeGlzPTNEcixULnkxQXhpcz0zRGksVC55PQoyQXhpcz0zRHMsZDMu cmViaW5kKFQsdCwiZGVmaW5lZCIsInNpemUiLCJjbGlwVm9yb25vaSIsImludGVycG9sYXRlIiks VC5vcHQ9CmlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoVCksVC54PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8obD0zRGUsdC54KGUpLG4ueChlKSxUKTpsfSxU Lnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0KPTNEZSx0LnkoZSks bi55KGUpLFQpOmN9LFQubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHUuPQp0b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dS50b3AsdS5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCI9CnVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUu Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dD0Kb206dS5ib3R0 b20sdS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dS5sZWZ0LFQp OnV9LFQud2lkPQp0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNE ZSxUKTphfSxULmhlaWdodD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0RlLFQpOmZ9LFQuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbj0KdHMubGVu Z3RoPyhoPTNEZS51dGlscy5nZXRDb2xvcih0KSxvLmNvbG9yKGgpLFQpOmh9LFQuc2hvd0xlZ2Vu ZD0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLFQpOnB9LFQu dG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhkPTNEZSxU KTpkfSxULnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxl bmd0aD8odj0zRGUsVCk6dn0sVC5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhiPTNEZSxUPQopOmJ9LFQuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLFQpOnd9LFQubm89CkRhdGE9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsVCk6RX0sVH0sZS5tb2RlbHMubGluZVdpdD0K aEZvY3VzQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGsoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXtmdW5jdGlvbiBSPQooZSl7dmFyIHQ9M0QrKGU9M0Q9M0QiZSIpLG49M0R0PzE6LTEs cj0zRE8vMztyZXR1cm4iTSIrLjUqbisiLCIrcisiQTYsNiAwIDA9CiAiK3QrIiAiKzYuNSpuKyIs Iisocis2KSsiViIrKDIqci02KSsiQTYsNiAwIDAgIit0KyIgIisuNSpuKyIsIisyKnIrIloiKyJN Ij0KKzIuNSpuKyIsIisocis4KSsiViIrKDIqci04KSsiTSIrNC41Km4rIiwiKyhyKzgpKyJWIiso MipyLTgpfWZ1bmN0aW9uIFUoKXthPQouZW1wdHkoKXx8YS5leHRlbnQodyksRi5kYXRhKFthLmVt cHR5KCk/Zy5kb21haW4oKTp3XSkuZWFjaChmdW5jdGlvbihlLHQpe3Y9CmFyIG49M0RnKGVbMF0p LXYucmFuZ2UoKVswXSxyPTNEdi5yYW5nZSgpWzFdLWcoZVsxXSk7ZDMuc2VsZWN0KHRoaXMpLnNl bGVjdD0KKCIubGVmdCIpLmF0dHIoIndpZHRoIixuPDA/MDpuKSxkMy5zZWxlY3QodGhpcykuc2Vs ZWN0KCIucmlnaHQiKS5hdHRyKCJ4IixnPQooZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0p fWZ1bmN0aW9uIHooKXt3PTNEYS5lbXB0eSgpP251bGw6YS5leHRlbnQoKTs9CnZhciBuPTNEYS5l bXB0eSgpP2cuZG9tYWluKCk6YS5leHRlbnQoKTtpZihNYXRoLmFicyhuWzBdLW5bMV0pPD0zRDEp cmV0dXJuOz0KVC5icnVzaCh7ZXh0ZW50Om4sYnJ1c2g6YX0pLFUoKTt2YXIgcz0zRFAuc2VsZWN0 KCIubnYtZm9jdXMgLm52LWxpbmVzV3JhcCIpPQouZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWR9KS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm57a2U9Cnk6ZS5rZXks dmFsdWVzOmUudmFsdWVzLmZpbHRlcihmdW5jdGlvbihlLHIpe3JldHVybiB0LngoKShlLHIpPj0z RG5bMF0mJnQueD0KKCkoZSxyKTw9M0RuWzFdfSl9fSkpO3MuY2FsbCh0KSxQLnNlbGVjdCgiLm52 LWZvY3VzIC5udi14Lm52LWF4aXMiKS5jYWxsKHIpPQosUC5zZWxlY3QoIi5udi1mb2N1cyAubnYt eS5udi1heGlzIikuY2FsbChpKX12YXIgUz0zRGQzLnNlbGVjdCh0aGlzKSxOPTNEdGg9CmlzLEw9 M0QoaHx8cGFyc2VJbnQoUy5zdHlsZSgid2lkdGgiKSl8fDk2MCktZi5sZWZ0LWYucmlnaHQsQT0z RChwfHxwYXJzZUludD0KKFMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1mLnRvcC1mLmJvdHRvbS1k LE89M0RkLWwudG9wLWwuYm90dG9tO2sudXBkYXRlPTNEPQpmdW5jdGlvbigpe1MuY2FsbChrKX0s ay5jb250YWluZXI9M0R0aGlzO2lmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGk9Cm9u KGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBNPTNEUy5zZWxlY3RBbGwo Ii5udi1ub0RhdGEiKS5kYT0KdGEoW3hdKTtyZXR1cm4gTS5lbnRlcigpLmFwcGVuZCgidGV4dCIp LmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyPQooImR5IiwiLS43ZW0iKS5zdHls ZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxNLmF0dHIoIngiLGYubGVmdCtMLzIpLmF0dHIoInk9 CiIsZi50b3ArQS8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksa31TLnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLnJlbW92ZT0KKCksdj0zRHQueFNjYWxlKCksbT0zRHQueVNjYWxlKCksZz0z RG4ueFNjYWxlKCkseT0zRG4ueVNjYWxlKCk7dmFyIF89M0RTLnNlPQpsZWN0QWxsKCJnLm52LXdy YXAubnYtbGluZVdpdGhGb2N1c0NoYXJ0IikuZGF0YShbZV0pLEQ9M0RfLmVudGVyKCkuYXBwZW5k KCI9CmciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW5lV2l0aEZvY3VzQ2hhcnQi KS5hcHBlbmQoImciKSxQPTNEXy5zZT0KbGVjdCgiZyIpO0QuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi1sZWdlbmRXcmFwIik7dmFyIEg9M0RELmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3Mi LCJudi1mb2N1cyIpO0guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxI LmFwcGU9Cm5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxILmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtbGluZXNXcj0KYXAiKTt2YXIgQj0zREQuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1jb250ZXh0Iik7Qi5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnYt eCBudi1heGlzIiksQi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLEIu YXBwZW5kKCI9CmciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLEIuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1icnVzaEJhY2tncj0Kb3VuZCIpLEIuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi14IG52LWJydXNoIiksYiYmKHUud2lkdGgoTCksUC5zZWxlY3QoPQoiLm52LWxl Z2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKHUpLGYudG9wIT0zRHUuaGVpZ2h0KCkmJihmLnRvcD0z RHUuaGVpZ2h0KCk9CixBPTNEKHB8fHBhcnNlSW50KFMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1m LnRvcC1mLmJvdHRvbS1kKSxQLnNlbGVjdCgiLm52LT0KbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1mLnRvcCsiKSIpKSxfLmF0dHIoInRyYW5zZm9yPQptIiwi dHJhbnNsYXRlKCIrZi5sZWZ0KyIsIitmLnRvcCsiKSIpLHQud2lkdGgoTCkuaGVpZ2h0KEEpLmNv bG9yKGUubWFwKGZ1bmM9CnRpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVy KGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZT0KZH0pKSxuLmRlZmluZWQodC5kZWZp bmVkKCkpLndpZHRoKEwpLmhlaWdodChPKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JlPQp0 dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRp c2FibGVkfSkpLFAuc2VsZWM9CnQoIi5udi1jb250ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDAsIisoQStmLmJvdHRvbStsLnRvcCkrIikiKTt2YT0KciBqPTNEUC5zZWxlY3QoIi5u di1jb250ZXh0IC5udi1saW5lc1dyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1 PQpybiFlLmRpc2FibGVkfSkpO2QzLnRyYW5zaXRpb24oaikuY2FsbChuKSxyLnNjYWxlKHYpLnRp Y2tzKEwvMTAwKS50aWNrU2l6ZSg9Ci1BLDApLGkuc2NhbGUobSkudGlja3MoQS8zNikudGlja1Np emUoLUwsMCksUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heD0KaXMiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0ErIikiKSxhLngoZykub24oImJydXNoIixmdW5jdGlvbigp e3ZhPQpyIGU9M0RrLnRyYW5zaXRpb25EdXJhdGlvbigpO2sudHJhbnNpdGlvbkR1cmF0aW9uKDAp LHooKSxrLnRyYW5zaXRpb25EdXJhdGk9Cm9uKGUpfSksdyYmYS5leHRlbnQodyk7dmFyIEY9M0RQ LnNlbGVjdCgiLm52LWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZz0KIikuZGF0YShbd3x8 YS5leHRlbnQoKV0pLEk9M0RGLmVudGVyKCkuYXBwZW5kKCJnIik7SS5hcHBlbmQoInJlY3QiKS5h dHRyKCJjPQpsYXNzIiwibGVmdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImhlaWdo dCIsTyksSS5hcHBlbmQoInJlY3QiKS5hdHQ9CnIoImNsYXNzIiwicmlnaHQiKS5hdHRyKCJ4Iiww KS5hdHRyKCJ5IiwwKS5hdHRyKCJoZWlnaHQiLE8pO3ZhciBxPTNEUC5zZWxlYz0KdCgiLm52LXgu bnYtYnJ1c2giKS5jYWxsKGEpO3Euc2VsZWN0QWxsKCJyZWN0IikuYXR0cigiaGVpZ2h0IixPKSxx LnNlbGVjdEFsPQpsKCIucmVzaXplIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsUikseigpLHMu c2NhbGUoZykudGlja3MoTC8xMDApLnRpY2tTaXo9CmUoLU8sMCksUC5zZWxlY3QoIi5udi1jb250 ZXh0IC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMD0KLCIreS5y YW5nZSgpWzBdKyIpIiksZDMudHJhbnNpdGlvbihQLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgu bnYtYXhpcyIpKS5jPQphbGwocyksby5zY2FsZSh5KS50aWNrcyhPLzM2KS50aWNrU2l6ZSgtTCww KSxkMy50cmFuc2l0aW9uKFAuc2VsZWN0KCIubnYtY289Cm50ZXh0IC5udi15Lm52LWF4aXMiKSku Y2FsbChvKSxQLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoIj0KdHJh bnNmb3JtIiwidHJhbnNsYXRlKDAsIit5LnJhbmdlKClbMF0rIikiKSx1LmRpc3BhdGNoLm9uKCJz dGF0ZUNoYW5nZSIsZnVuPQpjdGlvbihlKXtrLnVwZGF0ZSgpfSksVC5vbigidG9vbHRpcFNob3ci LGZ1bmN0aW9uKGUpe0UmJkMoZSxOLnBhcmVudE5vZGUpfSk9Cn0pLGt9dmFyIHQ9M0RlLm1vZGVs cy5saW5lKCksbj0zRGUubW9kZWxzLmxpbmUoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLj0K bW9kZWxzLmF4aXMoKSxzPTNEZS5tb2RlbHMuYXhpcygpLG89M0RlLm1vZGVscy5heGlzKCksdT0z RGUubW9kZWxzLmxlZ2VuZCgpPQosYT0zRGQzLnN2Zy5icnVzaCgpLGY9M0R7dG9wOjMwLHJpZ2h0 OjMwLGJvdHRvbTozMCxsZWZ0OjYwfSxsPTNEe3RvcDowLHJpZ2g9CnQ6MzAsYm90dG9tOjIwLGxl ZnQ6NjB9LGM9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGg9M0RudWxsLHA9M0RudWxsLGQ9M0Qx MD0KMCx2LG0sZyx5LGI9M0QhMCx3PTNEbnVsbCxFPTNEITAsUz0zRGZ1bmN0aW9uKGUsdCxuLHIs aSl7cmV0dXJuIjxoMz4iK2UrIjwvPQpoMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx4PTNE Ik5vIERhdGEgQXZhaWxhYmxlLiIsVD0zRGQzLmRpc3BhdGNoKCJ0b289Cmx0aXBTaG93IiwidG9v bHRpcEhpZGUiLCJicnVzaCIpLE49M0QwO3QuY2xpcEVkZ2UoITApLG4uaW50ZXJhY3RpdmUoITEp LHIubz0KcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLGkub3JpZW50KCJsZWZ0Iikscy5v cmllbnQoImJvdHRvbSIpLnRpY2tQYWRkPQppbmcoNSksby5vcmllbnQoImxlZnQiKTt2YXIgQz0z RGZ1bmN0aW9uKG4scyl7dmFyIG89M0RuLnBvc1swXSsocy5vZmZzZXRMZWY9CnR8fDApLHU9M0Ru LnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RyLnRpY2tGb3JtYXQoKSh0LngoKShuLnBvaW50 LG4ucG9pbj0KdEluZGV4KSksZj0zRGkudGlja0Zvcm1hdCgpKHQueSgpKG4ucG9pbnQsbi5wb2lu dEluZGV4KSksbD0zRFMobi5zZXJpZXMua2V5PQosYSxmLG4sayk7ZS50b29sdGlwLnNob3coW28s dV0sbCxudWxsLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW49CnRNb3VzZW92 ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rZi5sZWZ0LGUucG9zWzFd K2YudG9wXSxULj0KdG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sPQp0aXBIaWRlKGUpfSksVC5vbigidG9vbHRp cEhpZGUiLGZ1bmN0aW9uKCl7RSYmZS50b29sdGlwLmNsZWFudXAoKX0pLGsuZGlzcGE9CnRjaD0z RFQsay5sZWdlbmQ9M0R1LGsubGluZXM9M0R0LGsubGluZXMyPTNEbixrLnhBeGlzPTNEcixrLnlB eGlzPTNEaSxrLngyQT0KeGlzPTNEcyxrLnkyQXhpcz0zRG8sZDMucmViaW5kKGssdCwiZGVmaW5l ZCIsImlzQXJlYSIsInNpemUiLCJ4RG9tYWluIiwieURvPQptYWluIiwieFJhbmdlIiwieVJhbmdl IiwiZm9yY2VYIiwiZm9yY2VZIiwiaW50ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNsaXBWb3I9Cm9u b2kiLCJpZCIpLGsub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChrKSxrLng9M0Rm dW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyh0LngoZSksbi54KGUpLGspOnQu eH0say55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8odC55KGUpLG4u eShlKSxrKTp0Lnl9LGsubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49 Cmd0aD8oZi50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6Zi50b3AsZi5y aWdodD0zRHR5cGVvZiBlLnJpZz0KaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpmLnJpZ2h0LGYu Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiPQo/ZS5ib3R0b206Zi5ib3R0 b20sZi5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6Zi5sZWZ0LGsp OmY9Cn0say5tYXJnaW4yPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9 M0RlLGspOmx9LGsud2lkdGg9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZSxrKTpofSxrLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5s ZW5ndGg/KHA9M0RlLGspOnB9LGsuaGVpZ2h0Mj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGU9Cm5ndGg/KGQ9M0RlLGspOmR9LGsuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oYz0zRGUudXRpbD0Kcy5nZXRDb2xvcih0KSx1LmNvbG9yKGMpLGspOmN9 LGsuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KGI9 M0RlLGspOmJ9LGsudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oRT0zRGU9CixrKTpFfSxrLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KFM9M0RlLGspOlN9LD0Kay5pbnRlcnBvbGF0ZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LmludGVycG9sYXRlKGUpLG4uaW50PQplcnBvbGF0 ZShlKSxrKTp0LmludGVycG9sYXRlKCl9LGsubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW49Cmd0aD8oeD0zRGUsayk6eH0say54VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLnRpYz0Ka0Zvcm1hdChlKSxzLnRpY2tGb3JtYXQo ZSksayk6ci50aWNrRm9ybWF0KCl9LGsueVRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyPQpldHVy biBhcmd1bWVudHMubGVuZ3RoPyhpLnRpY2tGb3JtYXQoZSksby50aWNrRm9ybWF0KGUpLGspOmku dGlja0Zvcm1hdCgpfSw9CmsuYnJ1c2hFeHRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odz0zRGUsayk6d30say50cmFuc2l0aT0Kb25EdXJhdGlvbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPTNEZSxrKTpOfSxrfSxlLm1vZGVscy5sPQpp bmVQbHVzQmFyV2l0aEZvY3VzQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEIoZSl7cmV0dXJu IGUuZWFjaChmdW5jdGlvbig9CmUpe2Z1bmN0aW9uIHR0KGUpe3ZhciB0PTNEKyhlPTNEPTNEImUi KSxuPTNEdD8xOi0xLHI9M0RJLzM7cmV0dXJuIk0iKy41Km4rIj0KLCIrcisiQTYsNiAwIDAgIit0 KyIgIis2LjUqbisiLCIrKHIrNikrIlYiKygyKnItNikrIkE2LDYgMCAwICIrdCsiICIrLjUqbisi PQosIisyKnIrIloiKyJNIisyLjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCkrIk0iKzQuNSpuKyIs Iisocis4KSsiViIrKDIqci04KX09CmZ1bmN0aW9uIG50KCl7aC5lbXB0eSgpfHxoLmV4dGVudCh4 KSxZLmRhdGEoW2guZW1wdHkoKT9rLmRvbWFpbigpOnhdKS5lYWNoKD0KZnVuY3Rpb24oZSx0KXt2 YXIgbj0zRGsoZVswXSktay5yYW5nZSgpWzBdLHI9M0RrLnJhbmdlKClbMV0tayhlWzFdKTtkMy5z ZWxlPQpjdCh0aGlzKS5zZWxlY3QoIi5sZWZ0IikuYXR0cigid2lkdGgiLG48MD8wOm4pLGQzLnNl bGVjdCh0aGlzKS5zZWxlY3QoIi5yaWc9Cmh0IikuYXR0cigieCIsayhlWzFdKSkuYXR0cigid2lk dGgiLHI8MD8wOnIpfSl9ZnVuY3Rpb24gcnQoKXt4PTNEaC5lbXB0eSgpPz0KbnVsbDpoLmV4dGVu dCgpLFM9M0RoLmVtcHR5KCk/ay5kb21haW4oKTpoLmV4dGVudCgpLEQuYnJ1c2goe2V4dGVudDpT LGJydXNoPQo6aH0pLG50KCksci53aWR0aChqKS5oZWlnaHQoRikuY29sb3IoZS5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyg9CmUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXty ZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSksdC53aWR0aChqKS5oZT0KaWdodChGKS5j b2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIo ZnVuY3Rpb24oPQp0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiYhZVtuXS5iYXJ9KSk7dmFyIG49 M0QkLnNlbGVjdCgiLm52LWZvY3VzIC5udi1iYXI9CnNXcmFwIikuZGF0dW0oUi5sZW5ndGg/Ui5t YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVlcz0KLmZpbHRl cihmdW5jdGlvbihlLHQpe3JldHVybiByLngoKShlLHQpPj0zRFNbMF0mJnIueCgpKGUsdCk8PTNE U1sxXX0pfX0pOlt7PQp2YWx1ZXM6W119XSksaT0zRCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LWxp bmVzV3JhcCIpLmRhdHVtKFVbMF0uZGlzYWJsZWQ/W3s9CnZhbHVlczpbXX1dOlUubWFwKGZ1bmN0 aW9uKGUsbil7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVyKGZ1bj0KY3Rp b24oZSxuKXtyZXR1cm4gdC54KCkoZSxuKT49M0RTWzBdJiZ0LngoKShlLG4pPD0zRFNbMV19KX19 KSk7Ui5sZW5ndGg/Qz0KPTNEci54U2NhbGUoKTpDPTNEdC54U2NhbGUoKSxzLnNjYWxlKEMpLnRp Y2tzKGovMTAwKS50aWNrU2l6ZSgtRiwwKSxzLmRvbWFpPQpuKFtNYXRoLmNlaWwoU1swXSksTWF0 aC5mbG9vcihTWzFdKV0pLCQuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChzKSxuLmM9CmFs bChyKSxpLmNhbGwodCksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbj0Kc2xhdGUoMCwiK0wucmFuZ2UoKVswXSsiKSIpLHUuc2NhbGUoTCku dGlja3MoRi8zNikudGlja1NpemUoLWosMCksJC5zZWxlY3QoPQoiLm52LWZvY3VzIC5udi15MS5u di1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFIubGVuZ3RoPzE6MCksYS5zY2FsZShBKS50aWNrcyg9 CkYvMzYpLnRpY2tTaXplKFIubGVuZ3RoPzA6LWosMCksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYt eTIubnYtYXhpcyIpLnN0eWxlKD0KIm9wYWNpdHkiLFUubGVuZ3RoPzE6MCkuYXR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKCIrQy5yYW5nZSgpWzFdKyIsMCkiKSwkPQouc2VsZWN0KCIubnYtZm9j dXMgLm52LXkxLm52LWF4aXMiKS5jYWxsKHUpLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkyLm52 LWE9CnhpcyIpLmNhbGwoYSl9dmFyIE49M0RkMy5zZWxlY3QodGhpcyksUD0zRHRoaXMsaj0zRCh2 fHxwYXJzZUludChOLnN0eWxlKCJ3aT0KZHRoIikpfHw5NjApLXAubGVmdC1wLnJpZ2h0LEY9M0Qo bXx8cGFyc2VJbnQoTi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wPQotcC5ib3R0b20tZyxJ PTNEZy1kLnRvcC1kLmJvdHRvbTtCLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7Ti5jYWxsKEIpfSxCLmNv bnRhaW49CmVyPTNEdGhpcztpZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLj0KbGVuZ3RoKXt2YXIgcT0zRE4uc2VsZWN0QWxsKCIu bnYtbm9EYXRhIikuZGF0YShbX10pO3JldHVybiBxLmVudGVyKCkuYXBwZW5kPQooInRleHQiKS5h dHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0 ZXh0LWFuY2g9Cm9yIiwibWlkZGxlIikscS5hdHRyKCJ4IixwLmxlZnQrai8yKS5hdHRyKCJ5Iixw LnRvcCtGLzIpLnRleHQoZnVuY3Rpb24oZSl7cj0KZXR1cm4gZX0pLEJ9Ti5zZWxlY3RBbGwoIi5u di1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgUj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpPQp7cmV0dXJu IWUuZGlzYWJsZWQmJmUuYmFyfSksVT0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJh cn0pO0M9M0RyLng9ClNjYWxlKCksaz0zRG8uc2NhbGUoKSxMPTNEci55U2NhbGUoKSxBPTNEdC55 U2NhbGUoKSxPPTNEaS55U2NhbGUoKSxNPTNEbi55Uz0KY2FsZSgpO3ZhciB6PTNEZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUuYmFyfSkubWFwKGZ1bmN0aW9uPQooZSl7 cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnkoZSx0KSx5OmIoZSx0 KX19KX0pLFc9M0RlLmY9CmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiYhZS5i YXJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdT0KZXMubWFwKGZ1bmN0aW9uKGUsdCl7 cmV0dXJue3g6eShlLHQpLHk6YihlLHQpfX0pfSk7Qy5yYW5nZShbMCxqXSksay5kb21haW4oPQpk My5leHRlbnQoZDMubWVyZ2Uoei5jb25jYXQoVykpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KSku cmFuZ2UoWzAsal0pO3ZhciA9Clg9M0ROLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVQbHVz QmFyIikuZGF0YShbZV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKD0KImciKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtd3JhcCBudi1saW5lUGx1c0JhciIpLmFwcGVuZCgiZyIpLCQ9M0RYLnNlbGVjdCgi PQpnIik7Vi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKTt2YXIgSj0z RFYuYXBwZW5kKCJnIikuYXR0cig9CiJjbGFzcyIsIm52LWZvY3VzIik7Si5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEouYXBwZW5kKCJnIj0KKS5hdHRyKCJjbGFzcyIs Im52LXkxIG52LWF4aXMiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtYXhp cyIpPQosSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksSi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LWw9CmluZXNXcmFwIik7dmFyIEs9M0RWLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtY29udGV4dCIpO0suYXBwZW5kKCJnIikuYT0KdHRyKCJjbGFzcyIs Im52LXggbnYtYXhpcyIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlz IiksSy5hPQpwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtYXhpcyIpLEsuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXI9CnNXcmFwIiksSy5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWxpbmVzV3JhcCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhcz0KcyIsIm52LWJy dXNoQmFja2dyb3VuZCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWJydXNo IiksRSYmKGMuPQp3aWR0aChqLzIpLCQuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUu bWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWc9CmluYWxLZXk9M0RlLm9yaWdpbmFsS2V5PTNE PTNEPTNEdW5kZWZpbmVkP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9M0RlLm9yaT0KZ2luYWxL ZXkrKGUuYmFyPyIgKGxlZnQgYXhpcykiOiIgKHJpZ2h0IGF4aXMpIiksZX0pKS5jYWxsKGMpLHAu dG9wIT0zRGMuaGVpPQpnaHQoKSYmKHAudG9wPTNEYy5oZWlnaHQoKSxGPTNEKG18fHBhcnNlSW50 KE4uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1wLnRvcC09CnAuYm90dG9tLWcpLCQuc2VsZWN0KCIu bnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ovMisiLD0KIisg LXAudG9wKyIpIikpLFguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcC5sZWZ0KyIsIitw LnRvcCsiKSIpLGkud2lkPQp0aChqKS5oZWlnaHQoSSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGY9CnVuY3Rpb24odCxuKXtyZXR1cm4h ZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSksbi53aWR0aChqKS5oZWlnaHQoSSkuY29sb3IoZT0K Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rp b24odCxuKXtyZXR1cm4hZVtuPQpdLmRpc2FibGVkJiYhZVtuXS5iYXJ9KSk7dmFyIFE9M0QkLnNl bGVjdCgiLm52LWNvbnRleHQgLm52LWJhcnNXcmFwIikuZGF0dW09CihSLmxlbmd0aD9SOlt7dmFs dWVzOltdfV0pLEc9M0QkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LWxpbmVzV3JhcCIpLmRhdHVt KD0KVVswXS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOlUpOyQuc2VsZWN0KCIubnYtY29udGV4dCIp LmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNsYXRlKDAsIisoRitwLmJvdHRvbStkLnRvcCkrIiki KSxRLmNhbGwoaSksRy5jYWxsKG4pLGgueChrKS5vbigiYnJ1c2giLHI9CnQpLHgmJmguZXh0ZW50 KHgpO3ZhciBZPTNEJC5zZWxlY3QoIi5udi1icnVzaEJhY2tncm91bmQiKS5zZWxlY3RBbGwoImci KS5kYT0KdGEoW3h8fGguZXh0ZW50KCldKSxaPTNEWS5lbnRlcigpLmFwcGVuZCgiZyIpO1ouYXBw ZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiPQosImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5Iiww KS5hdHRyKCJoZWlnaHQiLEkpLFouYXBwZW5kKCJyZWN0IikuYXR0cigiY2w9CmFzcyIsInJpZ2h0 IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixJKTt2YXIgZXQ9M0QkLnNl bGVjdCgiLj0KbnYteC5udi1icnVzaCIpLmNhbGwoaCk7ZXQuc2VsZWN0QWxsKCJyZWN0IikuYXR0 cigiaGVpZ2h0IixJKSxldC5zZWxlY3RBbGwoPQoiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0 dHIoImQiLHR0KSxvLnRpY2tzKGovMTAwKS50aWNrU2l6ZSgtSSwwKSwkLnNlbGU9CmN0KCIubnYt Y29udGV4dCAubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitP LnJhbmdlKClbMD0KXSsiKSIpLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlzIiku Y2FsbChvKSxmLnNjYWxlKE8pLnRpY2tzKEkvMzYpPQoudGlja1NpemUoLWosMCksJC5zZWxlY3Qo Ii5udi1jb250ZXh0IC5udi15MS5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFIubGU9Cm5ndGg/ MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK2sucmFuZ2UoKVswXSsiKSIpLCQu c2VsZWN0KCIubnYtYz0Kb250ZXh0IC5udi15MS5udi1heGlzIikuY2FsbChmKSxsLnNjYWxlKE0p LnRpY2tzKEkvMzYpLnRpY2tTaXplKFIubGVuZ3RoPzA6PQotaiwwKSwkLnNlbGVjdCgiLm52LWNv bnRleHQgLm52LXkyLm52LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsVS5sZW5ndGg/MTowKS49CmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2sucmFuZ2UoKVsxXSsiLDApIiksJC5zZWxlY3Qo Ii5udi1jb250ZXh0IC5udj0KLXkyLm52LWF4aXMiKS5jYWxsKGwpLGMuZGlzcGF0Y2gub24oInN0 YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtCLnVwZGF0ZSgpfSksPQpELm9uKCJ0b29sdGlwU2hvdyIs ZnVuY3Rpb24oZSl7VCYmSChlLFAucGFyZW50Tm9kZSl9KSxydCgpfSksQn12YXIgdD0zRGUubW89 CmRlbHMubGluZSgpLG49M0RlLm1vZGVscy5saW5lKCkscj0zRGUubW9kZWxzLmhpc3RvcmljYWxC YXIoKSxpPTNEZS5tb2RlbHMuaD0KaXN0b3JpY2FsQmFyKCkscz0zRGUubW9kZWxzLmF4aXMoKSxv PTNEZS5tb2RlbHMuYXhpcygpLHU9M0RlLm1vZGVscy5heGlzKCksPQphPTNEZS5tb2RlbHMuYXhp cygpLGY9M0RlLm1vZGVscy5heGlzKCksbD0zRGUubW9kZWxzLmF4aXMoKSxjPTNEZS5tb2RlbHMu bGU9CmdlbmQoKSxoPTNEZDMuc3ZnLmJydXNoKCkscD0zRHt0b3A6MzAscmlnaHQ6MzAsYm90dG9t OjMwLGxlZnQ6NjB9LGQ9M0R7dG9wOj0KMCxyaWdodDozMCxib3R0b206MjAsbGVmdDo2MH0sdj0z RG51bGwsbT0zRG51bGwsZz0zRDEwMCx5PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gZS54fSxiPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sdz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksRT0zRCEw LFMseD0KPTNEbnVsbCxUPTNEITAsTj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4i K2UrIjwvaDM+IisiPHA+IituKyIgYXQgPQoiK3QrIjwvcD4ifSxDLGssTCxBLE8sTSxfPTNEIk5v IERhdGEgQXZhaWxhYmxlLiIsRD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2g9Cm93IiwidG9vbHRp cEhpZGUiLCJicnVzaCIpLFA9M0QwO3QuY2xpcEVkZ2UoITApLG4uaW50ZXJhY3RpdmUoITEpLHMu b3JpZW50KD0KImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLHUub3JpZW50KCJsZWZ0IiksYS5vcmll bnQoInJpZ2h0Iiksby5vcmllbnQoImJvdHRvPQptIikudGlja1BhZGRpbmcoNSksZi5vcmllbnQo ImxlZnQiKSxsLm9yaWVudCgicmlnaHQiKTt2YXIgSD0zRGZ1bmN0aW9uKG4scik9CntTJiYobi5w b2ludEluZGV4Kz0zRE1hdGguY2VpbChTWzBdKSk7dmFyIGk9M0RuLnBvc1swXSsoci5vZmZzZXRM ZWZ0fHwwKSxvPQo9M0RuLnBvc1sxXSsoci5vZmZzZXRUb3B8fDApLGY9M0RzLnRpY2tGb3JtYXQo KSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCk9CiksbD0zRChuLnNlcmllcy5iYXI/dTphKS50 aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxjPTNETihuLj0Kc2VyaWVz LmtleSxmLGwsbixCKTtlLnRvb2x0aXAuc2hvdyhbaSxvXSxjLG4udmFsdWU8MD8ibiI6InMiLG51 bGwscil9O3JldHVyPQpuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIs ZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcC49CmxlZnQsZS5wb3NbMV0rcC50b3BdLEQu dG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbD0KdGlw IixmdW5jdGlvbihlKXtELnRvb2x0aXBIaWRlKGUpfSksci5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3Zlci50b29sdGlwPQoiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3AubGVmdCxl LnBvc1sxXStwLnRvcF0sRC50b29sdGlwU2hvdyhlKX0pLHI9Ci5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe0QudG9vbHRpcEhpZGUoZSl9KSxELm9uKD0K InRvb2x0aXBIaWRlIixmdW5jdGlvbigpe1QmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxCLmRpc3Bh dGNoPTNERCxCLmxlZ2VuZD0KPTNEYyxCLmxpbmVzPTNEdCxCLmxpbmVzMj0zRG4sQi5iYXJzPTNE cixCLmJhcnMyPTNEaSxCLnhBeGlzPTNEcyxCLngyQXhpcz0KPTNEbyxCLnkxQXhpcz0zRHUsQi55 MkF4aXM9M0RhLEIueTNBeGlzPTNEZixCLnk0QXhpcz0zRGwsZDMucmViaW5kKEIsdCwiZGVmPQpp bmVkIiwic2l6ZSIsImNsaXBWb3Jvbm9pIiwiaW50ZXJwb2xhdGUiKSxCLm9wdGlvbnM9M0RlLnV0 aWxzLm9wdGlvbnNGdW5jLmI9CmluZChCKSxCLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oeT0zRGUsdC54KGUpLHIueChlKSxCKTp5fT0KLEIueT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSx0LnkoZSksci55KGUpLEIpOmJ9LEIubWFy PQpnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocC50b3A9M0R0eXBl b2YgZS50b3AhPTNEInVuZGVmaW49CmVkIj9lLnRvcDpwLnRvcCxwLnJpZ2h0PTNEdHlwZW9mIGUu cmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpwLnJpZ2h0LHAuYj0Kb3R0b209M0R0eXBlb2Yg ZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206cC5ib3R0b20scC5sZWZ0PTNEdHlwZW9m IGUuPQpsZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpwLmxlZnQsQik6cH0sQi53aWR0aD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuaGVpZ2h0 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09Cj0zRGUsQik6bX0sQi5j b2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZS51dGlscy5n ZXRDbz0KbG9yKHQpLGMuY29sb3IodyksQik6d30sQi5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooRT0zRGUsQik6RX0sQi50b29sdGlwcz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxCKTpUfSw9CkIudG9vbHRpcENv bnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj0zRGUsQik6Tn0s Qi5ub0RhdD0KYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPTNEZSxC KTpffSxCLmJydXNoRXh0ZW50PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oeD0zRGUsQik6eH0sQn0sZS5tb2RlbHMubXVsdGlCYXI9M0RmdW5jdGlvbig9Cil7ZnVuY3Rp b24gQyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPTNEbi10LmxlZnQtdC5yaWdo dCxDPTNEci10Lj0KdG9wLXQuYm90dG9tLGs9M0RkMy5zZWxlY3QodGhpcyk7ZCYmZS5sZW5ndGgm JihkPTNEW3t2YWx1ZXM6ZVswXS52YWx1ZXMubWFwPQooZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54 LHk6MCxzZXJpZXM6ZS5zZXJpZXMsc2l6ZTouMDF9fSl9XSksYyYmKGU9M0RkMy5sYXk9Cm91dC5z dGFjaygpLm9mZnNldChoKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkueShh KSghZS5sZW5ndGgmJj0KZD9kOmUpKSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlcy5m b3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pPQp9KSxjJiZlWzBdLnZhbHVlcy5tYXAo ZnVuY3Rpb24odCxuKXt2YXIgcj0zRDAsaT0zRDA7ZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9Cj0z RGUudmFsdWVzW25dO3Quc2l6ZT0zRE1hdGguYWJzKHQueSksdC55PDA/KHQueTE9M0RpLGktPTNE dC5zaXplKToodC55MT0zRD0KdC5zaXplK3Iscis9M0R0LnNpemUpfSl9KTt2YXIgTD0zRHkmJmI/ W106ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzPQoubWFwKGZ1bmN0aW9uKGUsdCl7 cmV0dXJue3g6dShlLHQpLHk6YShlLHQpLHkwOmUueTAseTE6ZS55MX19KX0pO2kuZG9tYWluKHk9 Cnx8ZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KSkucmFuZ2VCYW5kcyh3 fHxbMCxnXSxTKSxzLmRvbWFpbj0KKGJ8fGQzLmV4dGVudChkMy5tZXJnZShMKS5tYXAoZnVuY3Rp b24oZSl7cmV0dXJuIGM/ZS55PjA/ZS55MTplLnkxK2UueTplLnl9PQopLmNvbmNhdChmKSkpLnJh bmdlKEV8fFtDLDBdKSxpLmRvbWFpbigpWzBdPTNEPTNEPTNEaS5kb21haW4oKVsxXSYmKGkuZG9t YWk9Cm4oKVswXT9pLmRvbWFpbihbaS5kb21haW4oKVswXS1pLmRvbWFpbigpWzBdKi4wMSxpLmRv bWFpbigpWzFdK2kuZG9tYWluKClbMT0KXSouMDFdKTppLmRvbWFpbihbLTEsMV0pKSxzLmRvbWFp bigpWzBdPTNEPTNEPTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbPQowXT9zLmRvbWFpbihb cy5kb21haW4oKVswXStzLmRvbWFpbigpWzBdKi4wMSxzLmRvbWFpbigpWzFdLXMuZG9tYWluKClb MV0qLjA9CjFdKTpzLmRvbWFpbihbLTEsMV0pKSxUPTNEVHx8aSxOPTNETnx8czt2YXIgQT0zRGsu c2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbT0KdWx0aWJhciIpLmRhdGEoW2VdKSxPPTNEQS5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52PQotbXVsdGliYXIi KSxNPTNETy5hcHBlbmQoImRlZnMiKSxfPTNETy5hcHBlbmQoImciKSxEPTNEQS5zZWxlY3QoImci KTtfLmFwcGU9Cm5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxBLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLD0KIit0LnRvcCsiKSIpLE0uYXBwZW5kKCJjbGlw UGF0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1jbGlwLSIrbykuYXBwZW5kKCJyZWN0PQoiKSxBLnNl bGVjdCgiI252LWVkZ2UtY2xpcC0iK28rIiByZWN0IikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhl aWdodCIsQyksRC49CmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNsaXAtIitvKyIp IjoiIik7dmFyIFA9M0RBLnNlbGVjdCgiLm52LWdybz0KdXBzIikuc2VsZWN0QWxsKCIubnYtZ3Jv dXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVyPQpuIHR9 KTtQLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHls ZSgiZmlsbC1vcGFjaXQ9CnkiLDFlLTYpLFAuZXhpdCgpLnNlbGVjdEFsbCgicmVjdC5udi1iYXIi KS5hdHRyKCJ5IixmdW5jdGlvbihlKXtyZXR1cm4gYz9OKD0KZS55MCk6TigwKX0pLmF0dHIoImhl aWdodCIsMCkucmVtb3ZlKCksUC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4iPQpu di1ncm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHVy biBlLmhvdmVyfSkuc3R5bGU9CigiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSku c3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcD0KKGUsdCl9KSxQLnN0eWxlKCJz dHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjc1KTt2YXIgSD0zRFAuc2Vs PQplY3RBbGwoInJlY3QubnYtYmFyIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gZCYmIWUubGVu Z3RoP2QudmFsdWVzOnQudmFsdWU9CnN9KTtILmV4aXQoKS5yZW1vdmUoKTt2YXIgQj0zREguZW50 ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpbz0KbihlLHQpe3JldHVybiBh KGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIn0pLmF0dHIoIngiLGZ1 bmN0PQppb24odCxuLHIpe3JldHVybiBjPzA6cippLnJhbmdlQmFuZCgpL2UubGVuZ3RofSkuYXR0 cigieSIsZnVuY3Rpb24oZSl7cmV0dXI9Cm4gTihjP2UueTA6MCl9KS5hdHRyKCJoZWlnaHQiLDAp LmF0dHIoIndpZHRoIixpLnJhbmdlQmFuZCgpLyhjPzE6ZS5sZW5ndGgpKT0KLmF0dHIoInRyYW5z Zm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIraSh1KGUsdCkpKyIsMCkifSk7 SC5zdHlsPQplKCJmaWxsIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIHAoZSxuLHQpfSkuc3R5bGUo InN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3I9CmV0dXJuIHAoZSxuLHQpfSkub24oIm1vdXNlb3Zl ciIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZT0KciIsITApLHgu ZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNd LHBvczpbaSh1PQoodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2VyaWVzKy41 KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjA9CikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5k ZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbj0KKHQsbil7 ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSkseC5lbGVtZW50TW91c2VvdXQoe3Zh bHVlOmEodCxuKSxwPQpvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJp ZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS49Cm9uKCJjbGljayIsZnVuY3Rpb24odCxu KXt4LmVsZW1lbnRDbGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZT0Kcmll c10scG9zOltpKHUodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2VyaWVzKy41 KS9lLmxlbmd0aCxzKGEoPQp0LG4pKyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5k ZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnM9CnRvcFByb3BhZ2F0aW9uKCl9KS5v bigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbil7eC5lbGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEodD0K LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbaSh1KHQsbikpK2kucmFuZ2VCYW5k KCkqKGM/ZS5sZW5ndGgvMjp0PQouc2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90Lnkw OjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWU9CnMsZTpkMy5ldmVudH0pLGQz LmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksSC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXty ZT0KdHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIn0pLmF0 dHIoInRyYW5zZm9ybSIsZnVuY3RpPQpvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitpKHUoZSx0 KSkrIiwwKSJ9KSx2JiYobXx8KG09M0RlLm1hcChmdW5jdGlvbigpe3I9CmV0dXJuITB9KSksSC5z dHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkMy5yZ2IodihlLHQpKS5kYXJrZXIo bS5tYT0KcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIW1bdF19KVtuXSkudG9TdHJpbmcoPQopfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0 LG4pe3JldHVybiBkMy5yZ2IodihlLHQpKS5kYXJrZXIobS5tYXAoZnVuY3Q9CmlvbihlLHQpe3Jl dHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIW1bdF19KVtuXSkudG9TdHJpbmco KX0pKSxjPz0KSC5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBzKGM/ZS55MTowKX0pLmF0 dHIoImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyPQpldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGUu eSsoYz9lLnkwOjApKS1zKGM/ZS55MDowKSksMSl9KS5hdHRyKCJ4IixmdW5jdGk9Cm9uKHQsbil7 cmV0dXJuIGM/MDp0LnNlcmllcyppLnJhbmdlQmFuZCgpL2UubGVuZ3RofSkuYXR0cigid2lkdGgi LGkucmFuZ2VCYT0KbmQoKS8oYz8xOmUubGVuZ3RoKSk6SC5hdHRyKCJ4IixmdW5jdGlvbih0LG4p e3JldHVybiB0LnNlcmllcyppLnJhbmdlQmFuZCgpPQovZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIs aS5yYW5nZUJhbmQoKS9lLmxlbmd0aCkuYXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXQ9CnVybiBh KGUsdCk8MD9zKDApOnMoMCktcyhhKGUsdCkpPDE/cygwKS0xOnMoYShlLHQpKXx8MH0pLmF0dHIo ImhlaWdodCIsZnVuYz0KdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGEoZSx0 KSktcygwKSksMSl8fDB9KSxUPTNEaS5jb3B5KCksTj0KPTNEcy5jb3B5KCl9KSxDfXZhciB0PTNE e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0KPTNEZDMu c2NhbGUub3JkaW5hbCgpLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNETWF0aC5mbG9vcihNYXRo LnJhbmRvbSgpKjFlPQo0KSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnl9LGY9M0RbMF0sbD0zRCEwLGM9Cj0zRCExLGg9M0QiemVybyIscD0zRGUu dXRpbHMuZGVmYXVsdENvbG9yKCksZD0zRCExLHY9M0RudWxsLG0sZz0zRDEyMDAseSxiLD0KdyxF LFM9M0QuMSx4PTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVt ZW50RGJsQ2xpY2siLCJlPQpsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxULE47 cmV0dXJuIEMuZGlzcGF0Y2g9M0R4LEMub3B0aW9ucz0zRGU9Ci51dGlscy5vcHRpb25zRnVuYy5i aW5kKEMpLEMueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZT0K LEMpOnV9LEMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxD KTphfSxDLm1hcmdpbj0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQu dG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG89CnA6dC50b3AsdC5yaWdodD0z RHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0z RD0KdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVm dD0zRHR5cGVvZiBlLmxlZnQhPTNEPQoidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEMpOnR9LEMu d2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhuPTNEZSxDKTpu fSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxD KTpyfT0KLEMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9 M0RlLEMpOml9LEMueVNjYWxlPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocz0zRGUsQyk6c30sQy54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRz Lmxlbmd0aD8oeT0zRGUsQyk6eX0sQy55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZT0Kbmd0aD8oYj0zRGUsQyk6Yn0sQy54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odz0zRGUsQyk6PQp3fSxDLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxDKTpFfSxDLmZvcmNlWT0zRGY9CnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEMpOmZ9LEMuc3RhY2tlZD0zRGZ1bmN0 aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMuc3RhY2tPZmZz ZXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhoPTNEZSxDKTpofSxD LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Cj0zRGUs Qyk6bH0sQy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNE ZS51dGlscy5nZXRDbz0KbG9yKHQpLEMpOnB9LEMuYmFyQ29sb3I9M0RmdW5jdGlvbih0KXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUudXRpbHMuPQpnZXRDb2xvcih0KSxDKTp2fSxDLmRp c2FibGVkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEM9Cik6 bX0sQy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxDKTpv fSxDLmhpZGVhYmxlPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0z RGUsQyk6ZH0sQy5kZWxheT0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/ KGc9M0RlLEMpOmd9LEMuZ3JvdXBTcGFjaW5nPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49 CnRzLmxlbmd0aD8oUz0zRGUsQyk6U30sQ30sZS5tb2RlbHMubXVsdGlCYXJDaGFydD0zRGZ1bmN0 aW9uKCl7ZnVuY3Rpb24gQShlKT0Ke3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGI9M0Rk My5zZWxlY3QodGhpcyksaz0zRHRoaXMsTz0zRCh1fHxwYXJzZUluPQp0KGIuc3R5bGUoIndpZHRo IikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LE09M0QoYXx8cGFyc2VJbnQoYi5zdHlsZSgiaGVpZ2h0 Iik9Cil8fDQwMCktby50b3Atby5ib3R0b207QS51cGRhdGU9M0RmdW5jdGlvbigpe2IuY2FsbChB KX0sQS5jb250YWluZXI9M0R0aGlzLD0KUy5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3Jl dHVybiEhZS5kaXNhYmxlZH0pO2lmKCF4KXt2YXIgXzt4PTNEe307Zm9yPQooXyBpbiBTKVNbX11p bnN0YW5jZW9mIEFycmF5P3hbX109M0RTW19dLnNsaWNlKDApOnhbX109M0RTW19dfWlmKCFlfHwh ZS5sZW49Cmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9 KS5sZW5ndGgpe3ZhciBEPTNEYi5zZWxlYz0KdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW1RdKTty ZXR1cm4gRC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiPQpudmQzIG52LW5v RGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxE LmF0dHIoIng9CiIsby5sZWZ0K08vMikuYXR0cigieSIsby50b3ArTS8yKS50ZXh0KGZ1bmN0aW9u KGUpe3JldHVybiBlfSksQX1iLnNlbGVjdEFsbD0KKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz0z RHQueFNjYWxlKCksRT0zRHQueVNjYWxlKCk7dmFyIFA9M0RiLnNlbGVjdEFsbCgiPQpnLm52LXdy YXAubnYtbXVsdGlCYXJXaXRoTGVnZW5kIikuZGF0YShbZV0pLEg9M0RQLmVudGVyKCkuYXBwZW5k KCJnIikuYXR0cig9CiJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1tdWx0aUJhcldpdGhMZWdlbmQi KS5hcHBlbmQoImciKSxCPTNEUC5zZWxlY3QoImciKT0KO0guYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi14IG52LWF4aXMiKSxILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtPQp5IG52 LWF4aXMiKSxILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxILmFwcGVu ZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudi1sZWdlbmRXcmFwIiksSC5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLGMmJihpLj0Kd2lkdGgoTy1DKCkpLHQuYmFyQ29s b3IoKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5jb2xvcj0zRGQzLnJnYigiI2NjYyIpPQou ZGFya2VyKHQqMS41KS50b1N0cmluZygpfSksQi5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0 dW0oZSkuY2FsbChpKSxvLnQ9Cm9wIT0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCks TT0zRChhfHxwYXJzZUludChiLnN0eWxlKCJoZWlnaHQiKSl8fD0KNDAwKS1vLnRvcC1vLmJvdHRv bSksQi5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl PQooIitDKCkrIiwiKyAtby50b3ArIikiKSk7aWYobCl7dmFyIGo9M0Rbe2tleToiR3JvdXBlZCIs ZGlzYWJsZWQ6dC5zdGFja2VkKCk9Cn0se2tleToiU3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tl ZCgpfV07cy53aWR0aChDKCkpLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLD0KIiM0NDQiXSksQi5zZWxl Y3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bShqKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoPQowLCIrIC1vLnRvcCsiKSIpLmNhbGwocyl9UC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIitvLmxlZnQrIiwiK28udG9wKyI9CikiKSxkJiZCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK08rIiwwKSIpLHQuZD0KaXNhYmxlZChlLm1h cChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZH0pKS53aWR0aChPKS5oZWlnaHQoTSkuY29s b3IoZS5tPQphcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCl9KS5maWx0ZXIo ZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS49CmRpc2FibGVkfSkpO3ZhciBGPTNEQi5zZWxlY3Qo Ii5udi1iYXJzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldD0KdXJuIWUuZGlz YWJsZWR9KSk7Ri5jYWxsKHQpO2lmKGgpe24uc2NhbGUodykudGlja3MoTy8xMDApLnRpY2tTaXpl KC1NLDApLEIuPQpzZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoMCwiK0UucmFuZ2UoKVswXSsiKSIpLEI9Ci5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5j YWxsKG4pO3ZhciBJPTNEQi5zZWxlY3QoIi5udi14Lm52LWF4aXMgPiBnIikuc2VsZT0KY3RBbGwo ImciKTtJLnNlbGVjdEFsbCgibGluZSwgdGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKTtpZihtKXt2 YXIgcT0zRGZ1bmN0PQppb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9LFI9 M0Q1LFU9M0QxNztJLnNlbGVjdEFsbCgidGV4dCIpLmE9CnR0cigidHJhbnNmb3JtIixmdW5jdGlv bihlLHQsbil7cmV0dXJuIHEoMCxuJTI9M0Q9M0QwP1I6VSl9KTt2YXIgej0zRGQzLnNlbD0KZWN0 QWxsKCIubnYteC5udi1heGlzIC5udi13cmFwIGcgZyB0ZXh0IilbMF0ubGVuZ3RoO0Iuc2VsZWN0 QWxsKCIubnYteC5udi1hPQp4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCIpLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcSgwLHQ9M0Q9M0Q9Cj0zRDB8fHolMiE9M0Q9M0QwP1U6 Uil9KX12JiZJLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiBuJU1hdGguY2VpbChlWzBdLj0K dmFsdWVzLmxlbmd0aC8oTy8xMDApKSE9M0Q9M0QwfSkuc2VsZWN0QWxsKCJ0ZXh0LCBsaW5lIiku c3R5bGUoIm9wYWNpdHkiLDApPQosZyYmSS5zZWxlY3RBbGwoIi50aWNrIHRleHQiKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJyb3RhdGUoIitnKyIgMCwwKSIpLnN0eWxlKCI9CnRleHQtYW5jaG9yIixnPjA/ InN0YXJ0IjoiZW5kIiksQi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImcubnYt YT0KeGlzTWF4TWluIHRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSl9cCYmKHIuc2NhbGUoRSkudGlj a3MoTS8zNikudGlja1NpemUoLU8sPQowKSxCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwo cikpLGkuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbig9CmUpe1M9M0RlLE4uc3Rh dGVDaGFuZ2UoUyksQS51cGRhdGUoKX0pLHMuZGlzcGF0Y2gub24oImxlZ2VuZENsaWNrIixmdW5j dGlvbj0KKGUsbil7aWYoIWUuZGlzYWJsZWQpcmV0dXJuO2o9M0RqLm1hcChmdW5jdGlvbihlKXty ZXR1cm4gZS5kaXNhYmxlZD0zRCEwLGV9PQopLGUuZGlzYWJsZWQ9M0QhMTtzd2l0Y2goZS5rZXkp e2Nhc2UiR3JvdXBlZCI6dC5zdGFja2VkKCExKTticmVhaztjYXNlIlN0YWM9CmtlZCI6dC5zdGFj a2VkKCEwKX1TLnN0YWNrZWQ9M0R0LnN0YWNrZWQoKSxOLnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRl KCl9KSxOLj0Kb24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXt5JiZMKGUsay5wYXJlbnROb2Rl KX0pLE4ub24oImNoYW5nZVN0YXRlIixmdW5jPQp0aW9uKG4pe3R5cGVvZiBuLmRpc2FibGVkIT0z RCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmw9CmVkPTNEbi5k aXNhYmxlZFt0XX0pLFMuZGlzYWJsZWQ9M0RuLmRpc2FibGVkKSx0eXBlb2Ygbi5zdGFja2VkIT0z RCJ1bmRlZmluZT0KZCImJih0LnN0YWNrZWQobi5zdGFja2VkKSxTLnN0YWNrZWQ9M0RuLnN0YWNr ZWQpLEEudXBkYXRlKCl9KX0pLEF9dmFyIHQ9M0RlPQoubW9kZWxzLm11bHRpQmFyKCksbj0zRGUu bW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWc9CmVuZCgp LHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEe3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVm dDo2MH0sdT0zRG51bD0KbCxhPTNEbnVsbCxmPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxsPTNE ITAsYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCExLHY9Cj0zRCEwLG09M0QhMSxnPTNEMCx5PTNE ITAsYj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPD0KcD4i K24rIiBvbiAiK3QrIjwvcD4ifSx3LEUsUz0zRHtzdGFja2VkOiExfSx4PTNEbnVsbCxUPTNEIk5v IERhdGEgQXZhaWxhYmxlPQouIixOPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRp cEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIik9CixDPTNEZnVuY3Rpb24oKXtyZXR1 cm4gbD8xODA6MH0saz0zRDA7dC5zdGFja2VkKCExKSxuLm9yaWVudCgiYm90dG9tIikudGljaz0K UGFkZGluZyg3KS5oaWdobGlnaHRaZXJvKCEwKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0KGZ1 bmN0aW9uKGUpe3JldHVybiBlPQp9KSxyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKS50aWNrRm9y bWF0KGQzLmZvcm1hdCgiLC4xZiIpKSxzLnVwZGF0ZVN0YXRlKCE9CjEpO3ZhciBMPTNEZnVuY3Rp b24oaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSso cz0KLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2lu dEluZGV4KSksZj0zRHIudGlja0ZvPQpybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgp KSxsPTNEYihpLnNlcmllcy5rZXksYSxmLGksQSk7ZS50b29sdGlwLnM9Cmhvdyhbbyx1XSxsLGku dmFsdWU8MD8ibiI6InMiLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2Vvdj0KZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rby5sZWZ0LGUu cG9zWzFdK28udG9wXSxOLnRvb2x0aXBTPQpob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZSg9CmUpfSksTi5vbigi dG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7eSYmZS50b29sdGlwLmNsZWFudXAoKX0pLEEuZGlzcGF0 Y2g9M0ROLD0KQS5tdWx0aWJhcj0zRHQsQS5sZWdlbmQ9M0RpLEEueEF4aXM9M0RuLEEueUF4aXM9 M0RyLGQzLnJlYmluZChBLHQsIngiLCJ5IiwiPQp4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIs InlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImNsaXBFZGdlIiwiaWQiLCJzdGE9CmNrZWQiLCJz dGFja09mZnNldCIsImRlbGF5IiwiYmFyQ29sb3IiLCJncm91cFNwYWNpbmciKSxBLm9wdGlvbnM9 M0RlLnV0aWxzLj0Kb3B0aW9uc0Z1bmMuYmluZChBKSxBLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnRvcD0KPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmlu ZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kPQplZmluZWQi P2UucmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVk Ij9lLmJvdHRvbTo9Cm8uYm90dG9tLG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5l ZCI/ZS5sZWZ0Om8ubGVmdCxBKTpvfSxBLndpZHRoPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odT0zRGUsQSk6dX0sQS5oZWlnaHQ9M0RmdW5jdGlvbihlKXs9CnJldHVy biBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxBKTphfSxBLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0 dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihm KSxBKTpmfSxBLnNob3dDb250cm9scz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGw9M0RlLEEpOmx9LEEuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFy Z3VtZW50cy5sZW5ndGg/KGM9M0RlLEEpOmN9LEEuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oaD0zRGUsQSk6aH0sQS5zaG93WUF4aXM9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsPQpBKTpwfSxBLnJpZ2h0QWxpZ25Z QXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxyLm9yaWU9 Cm50KGU/InJpZ2h0IjoibGVmdCIpLEEpOmR9LEEucmVkdWNlWFRpY2tzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8odj0zRGUsQSk6dn0sQS5yb3RhdGVMYWJlbHM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0KPTNEZSxBKTpnfSxBLnN0YWdn ZXJMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQSk6 PQptfSxBLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0z RGUsQSk6Yn0sQS50b29sdGlwcz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHk9M0RlLEEpOnl9LEEudG9vbHRpcENvbnRlbnQ9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhiPTNEZSxBKTpifSxBLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGE9CnJndW1lbnRzLmxlbmd0aD8oUz0zRGUsQSk6U30sQS5kZWZhdWx0U3RhdGU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyh4PTNEZSxBKTp4fSxBLm5vRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxBPQopOlR9LEEudHJhbnNp dGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9M0Rl LEEpOms9Cn0sQX0sZS5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsPTNEZnVuY3Rpb24oKXtmdW5j dGlvbiBDKGUpe3JldHVybiBlLmVhY2goZj0KdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQu cmlnaHQseT0zRHItdC50b3AtdC5ib3R0b20sQz0zRGQzLnNlbGVjdCh0aGlzPQopO3AmJihlPTNE ZDMubGF5b3V0LnN0YWNrKCkub2Zmc2V0KCJ6ZXJvIikudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHU9CmVzfSkueShhKShlKSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52YWx1ZXMu Zm9yRWFjaChmdW5jdGlvbihlKXtlLnNlcmllcz0KPTNEdH0pfSkscCYmZVswXS52YWx1ZXMubWFw KGZ1bmN0aW9uKHQsbil7dmFyIHI9M0QwLGk9M0QwO2UubWFwKGZ1bmN0aW9uKGUpPQp7dmFyIHQ9 M0RlLnZhbHVlc1tuXTt0LnNpemU9M0RNYXRoLmFicyh0LnkpLHQueTwwPyh0LnkxPTNEaS10LnNp emUsaS09M0R0LnM9Cml6ZSk6KHQueTE9M0RyLHIrPTNEdC5zaXplKX0pfSk7dmFyIGs9M0RiJiZ3 P1tdOmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLj0KdmFsdWVzLm1hcChmdW5jdGlvbihlLHQp e3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5MDplLnkwLHkxOmUueTF9fSl9KTtzLmRvPQptYWlu KGJ8fGQzLm1lcmdlKGspLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlQmFuZHMo RXx8WzAseV0sLjEpLG89Ci5kb21haW4od3x8ZDMuZXh0ZW50KGQzLm1lcmdlKGspLm1hcChmdW5j dGlvbihlKXtyZXR1cm4gcD9lLnk+MD9lLnkxK2UueTplLj0KeTE6ZS55fSkuY29uY2F0KGYpKSks ZCYmIXA/by5yYW5nZShTfHxbby5kb21haW4oKVswXTwwP206MCxpLShvLmRvbWFpbigpWzFdPQo+ MD9tOjApXSk6by5yYW5nZShTfHxbMCxpXSksVD0zRFR8fHMsTj0zRE58fGQzLnNjYWxlLmxpbmVh cigpLmRvbWFpbihvLmRvbWE9CmluKCkpLnJhbmdlKFtvKDApLG8oMCldKTt2YXIgTD0zRGQzLnNl bGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1tdT0KbHRpYmFySG9yaXpvbnRhbCIp LmRhdGEoW2VdKSxBPTNETC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBu PQp2LXdyYXAgbnYtbXVsdGliYXJIb3Jpem9udGFsIiksTz0zREEuYXBwZW5kKCJkZWZzIiksTT0z REEuYXBwZW5kKCJnIiksXz0zREw9Ci5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtZ3JvdXBzIiksTC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cj0KYW5zbGF0ZSgiK3QubGVm dCsiLCIrdC50b3ArIikiKTt2YXIgRD0zREwuc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxs KCIuPQpudi1ncm91cCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHR9KTtELmVudGVyKCkuYXA9CnBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHki LDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLEQuZXhpdCgpLj0Kc3R5bGUoInN0cm9r ZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KS5yZW1vdmUoKSxELmF0 dHIoImNsPQphc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcmllcy0iK3R9 KS5jbGFzc2VkKCJob3ZlciIsZnVuY3Rpb249CihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlKCJm aWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCl9KS5zdHlsZSgic3Rybz0Ka2UiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGwoZSx0KX0pLEQuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxKS5zdHls ZSgiZmlsbC1vPQpwYWNpdHkiLC43NSk7dmFyIFA9M0RELnNlbGVjdEFsbCgiZy5udi1iYXIiKS5k YXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHU9CmVzfSk7UC5leGl0KCkucmVtb3ZlKCk7dmFy IEg9M0RQLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixmdW5jdD0KaW9uKHQs bixyKXtyZXR1cm4idHJhbnNsYXRlKCIrTihwP3QueTA6MCkrIiwiKyhwPzA6cipzLnJhbmdlQmFu ZCgpL2UubGVuZ3RoPQorcyh1KHQsbikpKSsiKSJ9KTtILmFwcGVuZCgicmVjdCIpLmF0dHIoIndp ZHRoIiwwKS5hdHRyKCJoZWlnaHQiLHMucmFuZ2VCYW49CmQoKS8ocD8xOmUubGVuZ3RoKSksUC5v bigibW91c2VvdmVyIixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKD0KImhv dmVyIiwhMCkseC5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6 ZVt0LnNlcmllc10scG9zPQo6W28oYSh0LG4pKyhwP3QueTA6MCkpLHModSh0LG4pKStzLnJhbmdl QmFuZCgpKihwP2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2U9Ci5sZW5ndGhdLHBvaW50SW5kZXg6 bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bj0K Y3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSx4LmVsZW1lbnRN b3VzZW91dCh7dmFsdWU6YSh0PQosbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9pbnRJ bmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnQ9Cn0pfSkub24oImNsaWNrIixm dW5jdGlvbih0LG4pe3guZWxlbWVudENsaWNrKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6 ZT0KW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgpKihwP2UubGVuZ3RoLzI6 dC5zZXJpZXMrLjUpL2UubGVuZ3RoPQosbyhhKHQsbikrKHA/dC55MDowKSldLHBvaW50SW5kZXg6 bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXY9CmVudC5zdG9wUHJvcGFn YXRpb24oKX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24odCxuKXt4LmVsZW1lbnREYmxDbGljayh7 dmFsdT0KZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkr cy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0PQpoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0 LG4pKyhwP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC49CnNlcmllcyxlOmQz LmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KSxILmFwcGVuZCgidGV4dCIpLGQm JiFwPyhQLj0Kc2VsZWN0KCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGEoZSx0KTwwPyJlbmQiOiJzdGFyPQp0In0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCkv KGUubGVuZ3RoKjIpKS5hdHRyKCJkeSIsIi4zMmVtIikudGV4dChmdW5jdGlvbig9CmUsdCl7cmV0 dXJuIGcoYShlLHQpKX0pLFAuc2VsZWN0KCJ0ZXh0IikuYXR0cigieCIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gYShlLD0KdCk8MD8tNDpvKGEoZSx0KSktbygwKSs0fSkpOlAuc2VsZWN0QWxsKCJ0ZXh0 IikudGV4dCgiIiksdiYmIXA/KEguYXBwZW5kKCJ0PQpleHQiKS5jbGFzc2VkKCJudi1iYXItbGFi ZWwiLCEwKSxQLnNlbGVjdCgidGV4dC5udi1iYXItbGFiZWwiKS5hdHRyKCJ0ZXh0LWE9Cm5jaG9y IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8ic3RhcnQiOiJlbmQifSkuYXR0cigieSIs cy5yYW5nZUJhbmQoKT0KLyhlLmxlbmd0aCoyKSkuYXR0cigiZHkiLCIuMzJlbSIpLnRleHQoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpfSksUC5zZWxlPQpjdCgidGV4dC5udi1iYXItbGFiZWwi KS5hdHRyKCJ4IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD9vKDApLW8oYShlLHQ9Cikp KzQ6LTR9KSk6UC5zZWxlY3RBbGwoInRleHQubnYtYmFyLWxhYmVsIikudGV4dCgiIiksUC5hdHRy KCJjbGFzcyIsZnVuY3Rpbz0KbihlLHQpe3JldHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZl IjoibnYtYmFyIHBvc2l0aXZlIn0pLGMmJihofHwoaD0zRGUuPQptYXAoZnVuY3Rpb24oKXtyZXR1 cm4hMH0pKSxQLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGQzLnJnYihjKGU9 Cix0KSkuZGFya2VyKGgubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KS5maWx0ZXIoZnVuY3Rp b24oZSx0KXtyZXR1cm4haFt0XT0KfSlbbl0pLnRvU3RyaW5nKCl9KS5zdHlsZSgic3Ryb2tlIixm dW5jdGlvbihlLHQsbil7cmV0dXJuIGQzLnJnYihjKGUsdCkpLmRhPQpya2VyKGgubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIHR9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4haFt0XX0pW25d KS49CnRvU3RyaW5nKCl9KSkscD9QLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4idHJhbnNsYXRlKCIrbyhlLnkxKT0KKyIsIitzKHUoZSx0KSkrIikifSkuc2VsZWN0KCJyZWN0 IikuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguPQphYnMobyhhKGUsdCkr ZS55MCktbyhlLnkwKSl9KS5hdHRyKCJoZWlnaHQiLHMucmFuZ2VCYW5kKCkpOlAuYXR0cigidHJh bnNmb3I9Cm0iLGZ1bmN0aW9uKHQsbil7cmV0dXJuInRyYW5zbGF0ZSgiKyhhKHQsbik8MD9vKGEo dCxuKSk6bygwKSkrIiwiKyh0LnNlcmllcz0KKnMucmFuZ2VCYW5kKCkvZS5sZW5ndGgrcyh1KHQs bikpKSsiKSJ9KS5zZWxlY3QoInJlY3QiKS5hdHRyKCJoZWlnaHQiLHMucmFuPQpnZUJhbmQoKS9l Lmxlbmd0aCkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGgu YWJzKG8oYSg9CmUsdCkpLW8oMCkpLDEpfSksVD0zRHMuY29weSgpLE49M0RvLmNvcHkoKX0pLEN9 dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0bz0KbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAw LGk9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSxzPTNEZDMuc2NhbGUuPQpvcmRpbmFs KCksbz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNE ZnVuY3Rpb24oZSk9CntyZXR1cm4gZS55fSxmPTNEWzBdLGw9M0RlLnV0aWxzLmRlZmF1bHRDb2xv cigpLGM9M0RudWxsLGgscD0zRCExLGQ9M0QhMSx2PQo9M0QhMSxtPTNENjAsZz0zRGQzLmZvcm1h dCgiLC4yZiIpLHk9M0QxMjAwLGIsdyxFLFMseD0zRGQzLmRpc3BhdGNoKCJjaGFydEM9CmxpY2si LCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxl bWVudE1vdXNlb3V0Ij0KKSxULE47cmV0dXJuIEMuZGlzcGF0Y2g9M0R4LEMub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh1PTNEZSxDKTp1fSxDLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1 bWVudHMubGVuZ3RoPyhhPTNEZSxDKTphfSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPz0KKHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2Uu dG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9Cj0zRCJ1bmRlZmluZWQiP2Uucmln aHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLj0K Ym90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5s ZWZ0OnQubGVmdCxDKTp0fSxDPQoud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obj0zRGUsQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhyPTNEZSxDKTpyfSxDLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cj0KZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoobz0zRGUsQyk6b30sQy54RG9tYWluPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLEMpOmJ9LEM9Ci55RG9tYWluPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEMpOnd9LEMueFJhbmdlPTNE ZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQyk6RX0sQy55UmFu Z2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxDKTpTfSxD LmZvcmNlWT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGY9M0RlLEMp OmZ9LEMuc3RhY2tlZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNE ZSxDKTpwfT0KLEMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bD0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6PQpsfSxDLmJhckNvbG9yPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQ9CiksQyk6Y30s Qy5kaXNhYmxlZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxD KTpofSxDLmlkPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs Qyk6aX0sQy5kZWxheT0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9 M0RlLEMpOnl9LEMuc2hvd1ZhbHVlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5s ZW5ndGg/KGQ9M0RlLEMpOmR9LEMuc2hvd0JhckxhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuPQpndGg/KHY9M0RlLEMpOnZ9LEMudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGU9CixDKTpnfSxDLnZhbHVlUGFkZGluZz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDfT0KLGUu bW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbENoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBDKGUp e3JldHVybiBlLmVhY2goPQpmdW5jdGlvbihlKXt2YXIgZD0zRGQzLnNlbGVjdCh0aGlzKSxtPTNE dGhpcyxUPTNEKHV8fHBhcnNlSW50KGQuc3R5bGUoIndpZHQ9CmgiKSl8fDk2MCktby5sZWZ0LW8u cmlnaHQsaz0zRChhfHxwYXJzZUludChkLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atbz0K LmJvdHRvbTtDLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7ZC5jYWxsKEMpfSxDLmNvbnRhaW5lcj0zRHRo aXMsYi5kaXNhYmxlZD0zRGUuPQptYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7 aWYoIXcpe3ZhciBMO3c9M0R7fTtmb3IoTCBpbiBiKWJbTF1pbnM9CnRhbmNlb2YgQXJyYXk/d1tM XT0zRGJbTF0uc2xpY2UoMCk6d1tMXT0zRGJbTF19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVy KD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEE9M0Rk LnNlbGVjdEFsbCgiLm52LW5vRGF0PQphIikuZGF0YShbRV0pO3JldHVybiBBLmVudGVyKCkuYXBw ZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSI9CikuYXR0cigiZHkiLCIt LjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEEuYXR0cigieCIsby5sZWZ0K1Qv MikuYT0KdHRyKCJ5IixvLnRvcCtrLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxDfWQu c2VsZWN0QWxsKCIubnYtbm9EYXRhIikuPQpyZW1vdmUoKSxnPTNEdC54U2NhbGUoKSx5PTNEdC55 U2NhbGUoKTt2YXIgTz0zRGQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXU9Cmx0aUJhckhvcml6 b250YWxDaGFydCIpLmRhdGEoW2VdKSxNPTNETy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibj0KdmQzIG52LXdyYXAgbnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5hcHBlbmQo ImciKSxfPTNETy5zZWxlY3QoImciKTtNLmFwPQpwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14 IG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi09CmF4aXMiKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXplcm9MaW5lIikuYXBwZW5kKCJsaW5lIiksTS5h cHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLE0uPQphcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LWNvbnRyb2xzV3JhcCIpLGMmJihpLndpZHRoKFQteCgpKSx0LmJhckNvbG9yKCk9CiYmZS5m b3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5jb2xvcj0zRGQzLnJnYigiI2NjYyIpLmRhcmtlcih0KjEu NSkudG9TdHJpbmcoKT0KfSksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2Fs bChpKSxvLnRvcCE9M0RpLmhlaWdodCgpJiYoby50b3A9Cj0zRGkuaGVpZ2h0KCksaz0zRChhfHxw YXJzZUludChkLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLF8ucz0KZWxl Y3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreCgpKyIs IisgLW8udG9wKyIpIikpPQo7aWYobCl7dmFyIEQ9M0Rbe2tleToiR3JvdXBlZCIsZGlzYWJsZWQ6 dC5zdGFja2VkKCl9LHtrZXk6IlN0YWNrZWQiLGRpc2FibGU9CmQ6IXQuc3RhY2tlZCgpfV07cy53 aWR0aCh4KCkpLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0pLF8uc2VsZWN0KCIubnYtYz0K b250cm9sc1dyYXAiKS5kYXR1bShEKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAt by50b3ArIikiKS5jYWxsKHMpPQp9Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxl ZnQrIiwiK28udG9wKyIpIiksdC5kaXNhYmxlZChlLm1hcChmdW49CmN0aW9uKGUpe3JldHVybiBl LmRpc2FibGVkfSkpLndpZHRoKFQpLmhlaWdodChrKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQp ez0KcmV0dXJuIGUuY29sb3J8fGYoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFl W25dLmRpc2FibGVkfSkpO3ZhciBQPQo9M0RfLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0o ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk9CjtQLmNhbGwodCk7aWYo aCl7bi5zY2FsZShnKS50aWNrcyhrLzI0KS50aWNrU2l6ZSgtVCwwKSxfLnNlbGVjdCgiLm52LXgu bnYtYT0KeGlzIikuY2FsbChuKTt2YXIgSD0zRF8uc2VsZWN0KCIubnYteC5udi1heGlzIikuc2Vs ZWN0QWxsKCJnIik7SC5zZWxlY3RBbGwoPQoibGluZSwgdGV4dCIpfXAmJihyLnNjYWxlKHkpLnRp Y2tzKFQvMTAwKS50aWNrU2l6ZSgtaywwKSxfLnNlbGVjdCgiLm52LXkubnY9Ci1heGlzIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitrKyIpIiksXy5zZWxlY3QoIi5udi15Lm52LWF4 aXMiKS5jYT0KbGwocikpLF8uc2VsZWN0KCIubnYtemVyb0xpbmUgbGluZSIpLmF0dHIoIngxIix5 KDApKS5hdHRyKCJ4MiIseSgwKSkuYXR0cigiPQp5MSIsMCkuYXR0cigieTIiLC1rKSxpLmRpc3Bh dGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Yj0zRGUsUy5zdGF0ZUM9CmhhbmdlKGIp LEMudXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxuKXtp ZighZS5kaXNhYj0KbGVkKXJldHVybjtEPTNERC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlz YWJsZWQ9M0QhMCxlfSksZS5kaXNhYmxlZD0zRCExPQo7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3Vw ZWQiOnQuc3RhY2tlZCghMSk7YnJlYWs7Y2FzZSJTdGFja2VkIjp0LnN0YWNrZWQoITA9Cil9Yi5z dGFja2VkPTNEdC5zdGFja2VkKCksUy5zdGF0ZUNoYW5nZShiKSxDLnVwZGF0ZSgpfSksUy5vbigi dG9vbHRpcFNob3ciLD0KZnVuY3Rpb24oZSl7diYmTihlLG0ucGFyZW50Tm9kZSl9KSxTLm9uKCJj aGFuZ2VTdGF0ZSIsZnVuY3Rpb24obil7dHlwZW9mIG4uPQpkaXNhYmxlZCE9M0QidW5kZWZpbmVk IiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuZGlzYWJsZWQ9M0RuLmRpc2FibGVkW3Q9Cl19 KSxiLmRpc2FibGVkPTNEbi5kaXNhYmxlZCksdHlwZW9mIG4uc3RhY2tlZCE9M0QidW5kZWZpbmVk IiYmKHQuc3RhY2tlZChuLj0Kc3RhY2tlZCksYi5zdGFja2VkPTNEbi5zdGFja2VkKSxDLnVwZGF0 ZSgpfSl9KSxDfXZhciB0PTNEZS5tb2RlbHMubXVsdGlCYXJIPQpvcml6b250YWwoKSxuPTNEZS5t b2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLmg9 CmVpZ2h0KDMwKSxzPTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxvPTNEe3RvcDozMCxy aWdodDoyMCxib3R0b206NTAsbD0KZWZ0OjYwfSx1PTNEbnVsbCxhPTNEbnVsbCxmPTNEZS51dGls cy5kZWZhdWx0Q29sb3IoKSxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPQo9M0QhMCxkPTNEITEsdj0z RCEwLG09M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyIgLSAiK3QrIjwvaDM+ Iis9CiI8cD4iK24rIjwvcD4ifSxnLHksYj0zRHtzdGFja2VkOmR9LHc9M0RudWxsLEU9M0QiTm8g RGF0YSBBdmFpbGFibGUuIixTPTNEZD0KMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlw SGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSx4PTNEZnVuPQpjdGlvbigpe3JldHVy biBsPzE4MDowfSxUPTNEMDt0LnN0YWNrZWQoZCksbi5vcmllbnQoImxlZnQiKS50aWNrUGFkZGlu Zyg1KS49CmhpZ2hsaWdodFplcm8oITEpLnNob3dNYXhNaW4oITEpLnRpY2tGb3JtYXQoZnVuY3Rp b24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudD0KKCJib3R0b20iKS50aWNrRm9ybWF0KGQzLmZvcm1h dCgiLC4xZiIpKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTj0zRGZ1bmN0aW9uPQooaSxzKXt2YXIg bz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8 fDApLGE9M0Q9Cm4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj0z RHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbj0KdCxpLnBvaW50SW5kZXgpKSxsPTNEbShpLnNl cmllcy5rZXksYSxmLGksQyk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPQo8MD8iZSI6 InciLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0 aXAiLGZ1bmN0aW89Cm4oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rby5sZWZ0LGUucG9zWzFdK28udG9w XSxTLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaD0KLm9uKCJlbGVtZW50TW91c2VvdXQudG9v bHRpcCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZShlKX0pLFMub24oInRvb2x0aXBIPQppZGUi LGZ1bmN0aW9uKCl7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLEMuZGlzcGF0Y2g9M0RTLEMubXVs dGliYXI9M0R0LEMubGU9CmdlbmQ9M0RpLEMueEF4aXM9M0RuLEMueUF4aXM9M0RyLGQzLnJlYmlu ZChDLHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLD0KInhSYW5nZSIsInlSYW5nZSIsImZv cmNlWCIsImZvcmNlWSIsImNsaXBFZGdlIiwiaWQiLCJkZWxheSIsInNob3dWYWx1ZXMiLCJzPQpo b3dCYXJMYWJlbHMiLCJ2YWx1ZUZvcm1hdCIsInN0YWNrZWQiLCJiYXJDb2xvciIpLEMub3B0aW9u cz0zRGUudXRpbHMub3B0aW89Cm5zRnVuYy5iaW5kKEMpLEMubWFyZ2luPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPTNEdHlwZT0Kb2YgZS50b3AhPTNEInVuZGVm aW5lZCI/ZS50b3A6by50b3Asby5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQi PQo/ZS5yaWdodDpvLnJpZ2h0LG8uYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOm8uYm90dG89Cm0sby5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZp bmVkIj9lLmxlZnQ6by5sZWZ0LEMpOm99LEMud2lkdGg9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh1PTNEZSxDKTp1fSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhPQpyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLEMpOmF9LEMuY29sb3I9M0RmdW5jdGlvbih0KXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihmPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9y KGYpLEMpOmZ9LEMuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRz Lmxlbmd0aD8obD0zRGUsQyk6bH0sQy5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50PQpzLmxlbmd0aD8oYz0zRGUsQyk6Y30sQy5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0KPTNEZSxDKTpofSxDLnNob3dZQXhpcz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxDKTpwfSxDPQoudG9vbHRpcD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDLnRvb2x0 aXBzPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQyk6dn0s Qy50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG09M0RlLEMpOm19LEMuc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVu Z3RoPyhiPTNEZSxDKTpifSxDLmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3Q9Cmg/KHc9M0RlLEMpOnd9LEMubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEMpOkV9LD0KQy50cmFuc2l0aW9uRHVyYXRpb249M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQyk6VH0sQ30sPQplLm1v ZGVscy5tdWx0aUNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBDKGUpe3JldHVybiBlLmVhY2go ZnVuY3Rpb24oZSl7dmE9CnIgdT0zRGQzLnNlbGVjdCh0aGlzKSxmPTNEdGhpcztDLnVwZGF0ZT0z RGZ1bmN0aW9uKCl7dS5jYWxsKEMpfSxDLmNvbnRhaW5lcj0KPTNEdGhpczt2YXIgaz0zRChyfHxw YXJzZUludCh1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS10LmxlZnQtdC5yaWdodCxMPTNEKGl8PQp8 cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXQudG9wLXQuYm90dG9tLEE9M0RlLmZp bHRlcihmdW5jdGlvbihlKXs9CnJldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSIm JmUueUF4aXM9M0Q9M0QxfSksTz0zRGUuZmlsdGVyKGZ1bmN0aT0Kb24oZSl7cmV0dXJuIWUuZGlz YWJsZWQmJmUudHlwZT0zRD0zRCJsaW5lIiYmZS55QXhpcz0zRD0zRDJ9KSxNPTNEZS5maWx0ZXIo PQpmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEImJhciImJmUueUF4 aXM9M0Q9M0QxfSksXz0zRGUuZmk9Cmx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQm JmUudHlwZT0zRD0zRCJiYXIiJiZlLnlBeGlzPTNEPTNEMn0pLEQ9Cj0zRGUuZmlsdGVyKGZ1bmN0 aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QiYXJlYSImJmUueUF4aXM9M0Q9 Cj0zRDF9KSxQPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlw ZT0zRD0zRCJhcmVhIiYmZS55QT0KeGlzPTNEPTNEMn0pLEg9M0RlLmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4hZS5kaXNhYmxlZCYmZS55QXhpcz0zRD0zRDF9KS5tPQphcChmdW5jdGlvbihlKXty ZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZS54LHk6ZS55fX0pfSks Qj0KPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUF4aXM9M0Q9 M0QyfSkubWFwKGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQp e3JldHVybnt4OmUueCx5OmUueX19KX0pO2EuZG9tYWluKGQzLmV4dGU9Cm50KGQzLm1lcmdlKEgu Y29uY2F0KEIpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlKFswLGtdKTt2YXIgaj0z RHUucz0KZWxlY3RBbGwoImcud3JhcC5tdWx0aUNoYXJ0IikuZGF0YShbZV0pLEY9M0RqLmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhPQpzcyIsIndyYXAgbnZkMyBtdWx0aUNoYXJ0IikuYXBw ZW5kKCJnIik7Ri5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInggYXhpcyI9CiksRi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsInkxIGF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi eTIgYXhpcz0KIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVzMVdyYXAiKSxGLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluPQplczJXcmFwIiksRi5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsImJhcnMxV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsImJhcnMy V3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGFjazFXcmFwIiksRi5hcHBlbmQo ImciKS5hdHRyKD0KImNsYXNzIiwic3RhY2syV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJsZWdlbmRXcmFwIik7dmFyIEk9M0RqLnNlPQpsZWN0KCJnIik7cyYmKHgud2lkdGgoay8y KSxJLnNlbGVjdCgiLmxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXs9CnJldHVy biBlLm9yaWdpbmFsS2V5PTNEZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuZGVmaW5lZD9lLmtleTpl Lm9yaWdpbmFsS2V5LD0KZS5rZXk9M0RlLm9yaWdpbmFsS2V5KyhlLnlBeGlzPTNEPTNEMT8iIjoi IChyaWdodCBheGlzKSIpLGV9KSkuY2FsbCh4KSx0LnRvPQpwIT0zRHguaGVpZ2h0KCkmJih0LnRv cD0zRHguaGVpZ2h0KCksTD0zRChpfHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQ9CjAw KS10LnRvcC10LmJvdHRvbSksSS5zZWxlY3QoIi5sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3Jt IiwidHJhbnNsYXRlKCIraz0KLzIrIiwiKyAtdC50b3ArIikiKSksZC53aWR0aChrKS5oZWlnaHQo TCkuaW50ZXJwb2xhdGUoIm1vbm90b25lIikuY29sb3IoZS5tPQphcChmdW5jdGlvbihlLHQpe3Jl dHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXI9 Cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0zRD0zRCJsaW5l In0pKSx2LndpZHRoKGspLmhlaT0KZ2h0KEwpLmludGVycG9sYXRlKCJtb25vdG9uZSIpLmNvbG9y KGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bPQp0JW4ubGVuZ3RoXX0pLmZp bHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNE MiY9CiZlW25dLnR5cGU9M0Q9M0QibGluZSJ9KSksbS53aWR0aChrKS5oZWlnaHQoTCkuY29sb3Io ZS5tYXAoZnVuY3Rpb24oZSx0KXtyZT0KdHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmls dGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbPQpuXS55QXhpcz0zRD0z RDEmJmVbbl0udHlwZT0zRD0zRCJiYXIifSkpLGcud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUu bWFwKGY9CnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRl cihmdW5jdGlvbih0LG4pe3JldHVybiFlWz0Kbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0Qy JiZlW25dLnR5cGU9M0Q9M0QiYmFyIn0pKSx5LndpZHRoKGspLmhlaWdodChMPQopLmNvbG9yKGUu bWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIo ZnVuY3Rpb249Cih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMSYm ZVtuXS50eXBlPTNEPTNEImFyZWEifSkpLGIudz0KaWR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5t YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pPQouZmlsdGVy KGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QyJiZl W25dLnR5cGU9M0Q9Cj0zRCJhcmVhIn0pKSxJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgi K3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgcT0zRD0KSS5zZWxlY3QoIi5saW5lczFXcmFwIiku ZGF0dW0oQSksUj0zREkuc2VsZWN0KCIuYmFyczFXcmFwIikuZGF0dW0oTSksVT0zREkuPQpzZWxl Y3QoIi5zdGFjazFXcmFwIikuZGF0dW0oRCksej0zREkuc2VsZWN0KCIubGluZXMyV3JhcCIpLmRh dHVtKE8pLFc9M0RJLnM9CmVsZWN0KCIuYmFyczJXcmFwIikuZGF0dW0oXyksWD0zREkuc2VsZWN0 KCIuc3RhY2syV3JhcCIpLmRhdHVtKFApLFY9M0RELmxlbj0KZ3RoP0QubWFwKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlc30pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmPQp1 bmN0aW9uKGUsbil7cmV0dXJue3g6ZS54LHk6ZS55K3Rbbl0ueX19KX0pLmNvbmNhdChbe3g6MCx5 OjB9XSk6W10sJD0zRFAubGU9Cm5ndGg/UC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVz fSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKD0KZnVuY3Rpb24oZSxuKXtyZXR1 cm57eDplLngseTplLnkrdFtuXS55fX0pfSkuY29uY2F0KFt7eDowLHk6MH1dKTpbXTtoLmRvbWFp PQpuKGx8fGQzLmV4dGVudChkMy5tZXJnZShIKS5jb25jYXQoViksZnVuY3Rpb24oZSl7cmV0dXJu IGUueX0pKS5yYW5nZShbMCxMXSk9CixwLmRvbWFpbihjfHxkMy5leHRlbnQoZDMubWVyZ2UoQiku Y29uY2F0KCQpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9KSkucmFuZz0KZShbMCxMXSksZC55RG9t YWluKGguZG9tYWluKCkpLG0ueURvbWFpbihoLmRvbWFpbigpKSx5LnlEb21haW4oaC5kb21haW4o KSksPQp2LnlEb21haW4ocC5kb21haW4oKSksZy55RG9tYWluKHAuZG9tYWluKCkpLGIueURvbWFp bihwLmRvbWFpbigpKSxELmxlbmd0aCY9CiZkMy50cmFuc2l0aW9uKFUpLmNhbGwoeSksUC5sZW5n dGgmJmQzLnRyYW5zaXRpb24oWCkuY2FsbChiKSxNLmxlbmd0aCYmZDMudD0KcmFuc2l0aW9uKFIp LmNhbGwobSksXy5sZW5ndGgmJmQzLnRyYW5zaXRpb24oVykuY2FsbChnKSxBLmxlbmd0aCYmZDMu dHJhbnNpPQp0aW9uKHEpLmNhbGwoZCksTy5sZW5ndGgmJmQzLnRyYW5zaXRpb24oeikuY2FsbCh2 KSx3LnRpY2tzKGsvMTAwKS50aWNrU2l6ZSg9Ci1MLDApLEkuc2VsZWN0KCIueC5heGlzIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitMKyIpIiksZDMudHJhbnNpdD0KaW9uKEkuc2Vs ZWN0KCIueC5heGlzIikpLmNhbGwodyksRS50aWNrcyhMLzM2KS50aWNrU2l6ZSgtaywwKSxkMy50 cmFuc2l0aW9uPQooSS5zZWxlY3QoIi55MS5heGlzIikpLmNhbGwoRSksUy50aWNrcyhMLzM2KS50 aWNrU2l6ZSgtaywwKSxkMy50cmFuc2l0aW9uKEk9Ci5zZWxlY3QoIi55Mi5heGlzIikpLmNhbGwo UyksSS5zZWxlY3QoIi55Mi5heGlzIikuc3R5bGUoIm9wYWNpdHkiLEIubGVuZ3RoPz0KMTowKS5h dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLnJhbmdlKClbMV0rIiwwKSIpLHguZGlzcGF0 Y2gub24oInN0YXRlPQpDaGFuZ2UiLGZ1bmN0aW9uKGUpe0MudXBkYXRlKCl9KSxULm9uKCJ0b29s dGlwU2hvdyIsZnVuY3Rpb24oZSl7byYmTihlLGYucGE9CnJlbnROb2RlKX0pfSksQ312YXIgdD0z RHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NjB9LG49M0RkMy5zY2FsZS5jYT0KdGVn b3J5MjAoKS5yYW5nZSgpLHI9M0RudWxsLGk9M0RudWxsLHM9M0QhMCxvPTNEITAsdT0zRGZ1bmN0 aW9uKGUsdCxuLHIsaSl7PQpyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3Qr IjwvcD4ifSxhLGYsbCxjLGE9M0RkMy5zY2FsZS5saW5lYXI9CigpLGg9M0RkMy5zY2FsZS5saW5l YXIoKSxwPTNEZDMuc2NhbGUubGluZWFyKCksZD0zRGUubW9kZWxzLmxpbmUoKS55U2NhbGUoaD0K KSx2PTNEZS5tb2RlbHMubGluZSgpLnlTY2FsZShwKSxtPTNEZS5tb2RlbHMubXVsdGlCYXIoKS5z dGFja2VkKCExKS55U2NhbGUoPQpoKSxnPTNEZS5tb2RlbHMubXVsdGlCYXIoKS5zdGFja2VkKCEx KS55U2NhbGUocCkseT0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCk9Ci55U2NhbGUoaCksYj0zRGUu bW9kZWxzLnN0YWNrZWRBcmVhKCkueVNjYWxlKHApLHc9M0RlLm1vZGVscy5heGlzKCkuc2NhbGUo YT0KKS5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLEU9M0RlLm1vZGVscy5heGlzKCku c2NhbGUoaCkub3JpZW50KCJsZWZ0PQoiKSxTPTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKHApLm9y aWVudCgicmlnaHQiKSx4PTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2g9CnQoMzApLFQ9M0RkMy5k aXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIpLE49M0RmdW5jdGlvbih0LG4pe3Zh ciByPQo9M0R0LnBvc1swXSsobi5vZmZzZXRMZWZ0fHwwKSxpPTNEdC5wb3NbMV0rKG4ub2Zmc2V0 VG9wfHwwKSxzPTNEdy50aWNrRm9ybWE9CnQoKShkLngoKSh0LnBvaW50LHQucG9pbnRJbmRleCkp LG89M0QodC5zZXJpZXMueUF4aXM9M0Q9M0QyP1M6RSkudGlja0Zvcm1hdD0KKCkoZC55KCkodC5w b2ludCx0LnBvaW50SW5kZXgpKSxhPTNEdSh0LnNlcmllcy5rZXkscyxvLHQsQyk7ZS50b29sdGlw LnNob3coPQpbcixpXSxhLHVuZGVmaW5lZCx1bmRlZmluZWQsbi5vZmZzZXRQYXJlbnQpfTtyZXR1 cm4gZC5kaXNwYXRjaC5vbigiZWxlbWVudE09Cm91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUp e2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50bz0Kb2x0aXBTaG93 KGUpfSksZC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUp e1QudG9vbHRpPQpwSGlkZShlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS49CnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50 b3BdLFQudG9vbHRpcFNob3coZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91cz0KZW91dC50 b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksbS5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3ZlPQpyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3Qu bGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2g9Cm93KGUpfSksbS5kaXNwYXRjaC5vbigi ZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZT0KKX0p LGcuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5w b3M9M0RbZS5wb3NbMF0rPQp0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9 KSxnLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG89Cm9sdGlwIixmdW5jdGlvbihlKXtU LnRvb2x0aXBIaWRlKGUpfSkseS5kaXNwYXRjaC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKD0K ZSl7aWYoIU1hdGgucm91bmQoeS55KCkoZS5wb2ludCkqMTAwKSlyZXR1cm4gc2V0VGltZW91dChm dW5jdGlvbigpe2QzLnNlbGVjPQp0QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIs ITEpfSwwKSwhMTtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS49CnBvc1sxXSt0LnRvcF0sVC50 b29sdGlwU2hvdyhlKX0pLHkuZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbihlKXtU Lj0KdG9vbHRpcEhpZGUoZSl9KSxiLmRpc3BhdGNoLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24o ZSl7aWYoIU1hdGgucm91bmQoYi55PQooKShlLnBvaW50KSoxMDApKXJldHVybiBzZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIucG9pbnQuaG92ZXIiKS49CmNsYXNzZWQoImhvdmVy IiwhMSl9LDApLCExO2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50 b29sdD0KaXBTaG93KGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUp e1QudG9vbHRpcEhpZGUoZSl9KSxkLmRpPQpzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGU9Ci5wb3NbMV0rdC50 b3BdLFQudG9vbHRpcFNob3coZSl9KSxkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9v bHRpcCIsZj0KdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksdi5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jPQp0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3Qu bGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLHYuZGlzcGE9CnRjaC5vbigi ZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxU Lm9uKCJ0b29sdD0KaXBIaWRlIixmdW5jdGlvbigpe28mJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxD LmRpc3BhdGNoPTNEVCxDLmxpbmVzMT0zRGQsQy5sPQppbmVzMj0zRHYsQy5iYXJzMT0zRG0sQy5i YXJzMj0zRGcsQy5zdGFjazE9M0R5LEMuc3RhY2syPTNEYixDLnhBeGlzPTNEdyxDLnk9CkF4aXMx PTNERSxDLnlBeGlzMj0zRFMsQy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEMp LEMueD0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFg9M0RlLGQu eChlKSxtLngoZSksQyk6Z2V0WH0sQy55PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZ2V0WT0zRGUsZC55KGUpLG0ueShlKSxDKTpnZXRZfSxDLnlEb21haW4xPQo9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQyk6bH0sQy55RG9tYWlu Mj0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMu bWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8odD0zRGUsQyk6 dH0sQy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEPQpl LEMpOnJ9LEMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9 M0RlLEMpOml9LEMuY29sb3I9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhuPTNEZSx4LmNvbG9yKGUpLEMpOm59LEMuc2hvd0xlZ2VuZD0KPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMudG9vbHRpcHM9M0RmdW5jdGlvbihl PQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxDKTpvfSxDLnRvb2x0aXBDb250ZW50 PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQ30s ZS5tb2RlbHMub2hsY0Jhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24geD0KKGUpe3JldHVybiBlLmVh Y2goZnVuY3Rpb24oZSl7dmFyIGc9M0RuLXQubGVmdC10LnJpZ2h0LHg9M0RyLXQudG9wLXQuYm90 dG9tPQosVD0zRGQzLnNlbGVjdCh0aGlzKTtzLmRvbWFpbih5fHxkMy5leHRlbnQoZVswXS52YWx1 ZXMubWFwKHUpLmNvbmNhdChwKSkpLHY9Cj9zLnJhbmdlKHd8fFtnKi41L2VbMF0udmFsdWVzLmxl bmd0aCxnKihlWzBdLnZhbHVlcy5sZW5ndGgtLjUpL2VbMF0udmFsdWVzLj0KbGVuZ3RoXSk6cy5y YW5nZSh3fHxbMCxnXSksby5kb21haW4oYnx8W2QzLm1pbihlWzBdLnZhbHVlcy5tYXAoaCkuY29u Y2F0KGQpPQopLGQzLm1heChlWzBdLnZhbHVlcy5tYXAoYykuY29uY2F0KGQpKV0pLnJhbmdlKEV8 fFt4LDBdKSxzLmRvbWFpbigpWzBdPTNEPQo9M0Q9M0RzLmRvbWFpbigpWzFdJiYocy5kb21haW4o KVswXT9zLmRvbWFpbihbcy5kb21haW4oKVswXS1zLmRvbWFpbigpWzBdKi49CjAxLHMuZG9tYWlu KClbMV0rcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihbLTEsMV0pKSxvLmRvbWFpbigpWzBd PTNEPTNEPQo9M0RvLmRvbWFpbigpWzFdJiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21h aW4oKVswXStvLmRvbWFpbigpWzBdKi4wMSw9Cm8uZG9tYWluKClbMV0tby5kb21haW4oKVsxXSou MDFdKTpvLmRvbWFpbihbLTEsMV0pKTt2YXIgTj0zRGQzLnNlbGVjdCh0aGlzKT0KLnNlbGVjdEFs bCgiZy5udi13cmFwLm52LW9obGNCYXIiKS5kYXRhKFtlWzBdLnZhbHVlc10pLEM9M0ROLmVudGVy KCkuYXBwZW5kPQooImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1vaGxjQmFyIiks az0zREMuYXBwZW5kKCJkZWZzIiksTD0zREMuYXA9CnBlbmQoImciKSxBPTNETi5zZWxlY3QoImci KTtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtdGlja3MiKSxOLmF0dHIoIj0KdHJhbnNm b3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLFQub24oImNsaWNrIixmdW5j dGlvbihlLHQpe1MuPQpjaGFydENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6 aX0pfSksay5hcHBlbmQoImNsaXBQYXRoIikuYXR0cig9CiJpZCIsIm52LWNoYXJ0LWNsaXAtcGF0 aC0iK2kpLmFwcGVuZCgicmVjdCIpLE4uc2VsZWN0KCIjbnYtY2hhcnQtY2xpcC1wYXRoLT0KIitp KyIgcmVjdCIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCJoZWlnaHQiLHgpLEEuYXR0cigiY2xpcC1w YXRoIixtPyJ1cmwoI252PQotY2hhcnQtY2xpcC1wYXRoLSIraSsiKSI6IiIpO3ZhciBPPTNETi5z ZWxlY3QoIi5udi10aWNrcyIpLnNlbGVjdEFsbCgiLm52LXQ9CmljayIpLmRhdGEoZnVuY3Rpb24o ZSl7cmV0dXJuIGV9KTtPLmV4aXQoKS5yZW1vdmUoKTt2YXIgTT0zRE8uZW50ZXIoKS5hcHBlbj0K ZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQsbil7cmV0dXJuKGYoZSx0KT5sKGUs dCk/Im52LXRpY2sgbmVnYXRpPQp2ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiIG52LXRpY2stIitu KyItIit0fSkuYXR0cigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0KPTNEZy9lWzBdLnZhbHVlcy5s ZW5ndGgqLjk7cmV0dXJuIm0wLDBsMCwiKyhvKGYodCxuKSktbyhjKHQsbikpKSsibCIrIC1yLzIr PQoiLDBsIityLzIrIiwwbDAsIisobyhoKHQsbikpLW8oZih0LG4pKSkrImwwLCIrKG8obCh0LG4p KS1vKGgodCxuKSkpKyJsIityLzI9CisiLDBsIisgLXIvMisiLDB6In0pLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrcyh1KD0KZSx0KSkrIiwiK28oYyhl LHQpKSsiKSJ9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5j bGFzPQpzZWQoImhvdmVyIiwhMCksUy5lbGVtZW50TW91c2VvdmVyKHtwb2ludDp0LHNlcmllczpl WzBdLHBvczpbcyh1KHQsbikpLG8oYSg9CnQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6 MCxlOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbj0KKXtkMy5zZWxlY3Qo dGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxTLmVsZW1lbnRNb3VzZW91dCh7cG9pbnQ6dCxzZXJp ZXM6ZVswPQpdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJj bGljayIsZnVuY3Rpb24oZSx0KXtTLmVsZW09CmVudENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTpl LGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LD0KaWQ6aX0pLGQz LmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbihlLHQpe1Mu ZWxlbWVudERiPQpsQ2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShl LHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ9CjppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0 aW9uKCl9KTtPLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQsbil7cmV0dXJuKGYoZT0KLHQpPmwo ZSx0KT8ibnYtdGljayBuZWdhdGl2ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiIG52LXRpY2stIitu KyItIit0fSksZDMuPQp0cmFuc2l0aW9uKE8pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4idHJhbnNsYXRlKCIrcyh1KGUsdCkpKyI9CiwiK28oYyhlLHQpKSsiKSJ9KS5hdHRy KCJkIixmdW5jdGlvbih0LG4pe3ZhciByPTNEZy9lWzBdLnZhbHVlcy5sZW5ndGgqLjk7cj0KZXR1 cm4ibTAsMGwwLCIrKG8oZih0LG4pKS1vKGModCxuKSkpKyJsIisgLXIvMisiLDBsIityLzIrIiww bDAsIisobyhoKHQsbikpPQotbyhmKHQsbikpKSsibDAsIisobyhsKHQsbikpLW8oaCh0LG4pKSkr ImwiK3IvMisiLDBsIisgLXIvMisiLDB6In0pfSkseH12YXI9CiB0PTNEe3RvcDowLHJpZ2h0OjAs Ym90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRE1hdGguZmxvb3IoTWF0aC5yYT0K bmRvbSgpKjFlNCkscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1 PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0s Zj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm9wZW59LGw9M0RmdW49CmN0aW9uKGUpe3JldHVybiBl LmNsb3NlfSxjPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlnaH0saD0zRGZ1bmN0aW9uKGUpe3Jl dD0KdXJuIGUubG93fSxwPTNEW10sZD0zRFtdLHY9M0QhMSxtPTNEITAsZz0zRGUudXRpbHMuZGVm YXVsdENvbG9yKCkseSxiLHcsRSxTPQo9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1l bnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW89CnZlciIsImVsZW1lbnRN b3VzZW91dCIpO3JldHVybiB4LmRpc3BhdGNoPTNEUyx4Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlv bnNGdT0KbmMuYmluZCh4KSx4Lng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odT0zRGUseCk6dX0seC55PTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYT0zRGUseCk6YX0seC5vcGVuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxl bmd0aD8oZj0zRGUseCk6Zn0seC5jbG9zZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPz0KKGw9M0RlLHgpOmx9LHguaGlnaD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhjPTNEZSx4KTpjfSx4LmxvPQp3PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGg9M0RlLHgpOmh9LHgubWFyZ2luPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50 b3A6dC50b3AsdD0KLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdo dDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuPQpib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmU9CmQiP2Uu bGVmdDp0LmxlZnQseCk6dH0seC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhuPTNEZT0KLHgpOm59LHguaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHI9M0RlLHgpOnJ9LHgueFNjYWxlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8ocz0zRGUseCk6c30seC55U2NhbGU9M0RmdW5jdGlvbihlKXs9CnJl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx4KTpvfSx4LnhEb21haW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyh5PTNEZSx4KTp5fSx4LnlEb21haW49M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0KPTNEZSx4KTpifSx4LnhSYW5nZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSx4KTp3fSx4LnlSPQph bmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHgpOkV9LHgu Zm9yY2VYPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUseCk6 cH0seC5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3RoPyhkPTNE ZSx4KTpkfSx4LnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o PQp2PTNEZSx4KTp2fSx4LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG09M0RlLHgpOm19LHg9Ci5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhnPTNEZS51dGlscy5nZXRDb2xvcih0KSx4KTpnfT0KLHguaWQ9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUseCk6aX0seH0sZS5tb2RlbHMucGll PTNEPQpmdW5jdGlvbigpe2Z1bmN0aW9uIFMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtm dW5jdGlvbiBxKGUpe3ZhciB0PTNEKGU9Ci5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpKjkwL01hdGgu UEktOTA7cmV0dXJuIHQ+OTA/dC0xODA6dH1mdW5jdGlvbiBSKGUpe2UuZT0KbmRBbmdsZT0zRGlz TmFOKGUuZW5kQW5nbGUpPzA6ZS5lbmRBbmdsZSxlLnN0YXJ0QW5nbGU9M0Rpc05hTihlLnN0YXJ0 QW5nbGUpPQo/MDplLnN0YXJ0QW5nbGUsbXx8KGUuaW5uZXJSYWRpdXM9M0QwKTt2YXIgdD0zRGQz LmludGVycG9sYXRlKHRoaXMuX2N1cnJlbnQ9CixlKTtyZXR1cm4gdGhpcy5fY3VycmVudD0zRHQo MCksZnVuY3Rpb24oZSl7cmV0dXJuIEEodChlKSl9fWZ1bmN0aW9uIFUoZSl7ZT0KLmlubmVyUmFk aXVzPTNEMDt2YXIgdD0zRGQzLmludGVycG9sYXRlKHtzdGFydEFuZ2xlOjAsZW5kQW5nbGU6MH0s ZSk7cmV0dXJuPQogZnVuY3Rpb24oZSl7cmV0dXJuIEEodChlKSl9fXZhciBvPTNEbi10LmxlZnQt dC5yaWdodCxmPTNEci10LnRvcC10LmJvdHRvbSw9ClM9M0RNYXRoLm1pbihvLGYpLzIseD0zRFMt Uy81LFQ9M0RkMy5zZWxlY3QodGhpcyksTj0zRFQuc2VsZWN0QWxsKCIubnYtd3JhcD0KLm52LXBp ZSIpLmRhdGEoZSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMg bnYtd3JhcCBudi1wPQppZSBudi1jaGFydC0iK3UpLGs9M0RDLmFwcGVuZCgiZyIpLEw9M0ROLnNl bGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LXBpZSIpLGsuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1waWVMYWJlbHMiKSxOLmF0dHIoInRyYW5zZm9ybT0KIiwi dHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLEwuc2VsZWN0KCIubnYtcGllIikuYXR0 cigidHJhbnNmb3JtIiwiPQp0cmFuc2xhdGUoIitvLzIrIiwiK2YvMisiKSIpLEwuc2VsZWN0KCIu bnYtcGllTGFiZWxzIikuYXR0cigidHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoIitvLzIrIiwiK2Yv MisiKSIpLFQub24oImNsaWNrIixmdW5jdGlvbihlLHQpe0UuY2hhcnRDbGljayh7ZGF0YTplLD0K aW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pfSk7dmFyIEE9M0RkMy5zdmcuYXJjKCkub3V0ZXJS YWRpdXMoeCk7eSYmQS5zdGFyPQp0QW5nbGUoeSksYiYmQS5lbmRBbmdsZShiKSxtJiZBLmlubmVy UmFkaXVzKFMqdyk7dmFyIE89M0RkMy5sYXlvdXQucGllKCkuc289CnJ0KG51bGwpLnZhbHVlKGZ1 bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPzA6cyhlKX0pLE09M0ROLnNlbGVjdCgiLm52LXBp ZT0KIikuc2VsZWN0QWxsKCIubnYtc2xpY2UiKS5kYXRhKE8pLF89M0ROLnNlbGVjdCgiLm52LXBp ZUxhYmVscyIpLnNlbGVjdEFsbCgiPQoubnYtbGFiZWwiKS5kYXRhKE8pO00uZXhpdCgpLnJlbW92 ZSgpLF8uZXhpdCgpLnJlbW92ZSgpO3ZhciBEPTNETS5lbnRlcigpLmE9CnBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1zbGljZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUsdCl7ZDMuc2Vs ZWN0KD0KdGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxFLmVsZW1lbnRNb3VzZW92ZXIoe2xhYmVs OmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0PQphKSxwb2ludDplLmRhdGEscG9pbnRJbmRleDp0LHBv czpbZDMuZXZlbnQucGFnZVgsZDMuZXZlbnQucGFnZVldLGlkOnV9KX0pLm89Cm4oIm1vdXNlb3V0 IixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLEUuZWxl bWVudE1vdT0Kc2VvdXQoe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5k YXRhLGluZGV4OnQsaWQ6dX0pfSkub24oImNsPQppY2siLGZ1bmN0aW9uKGUsdCl7RS5lbGVtZW50 Q2xpY2soe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS49CmRhdGEsaW5k ZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24o ImRibGNsaWNrIj0KLGZ1bmN0aW9uKGUsdCl7RS5lbGVtZW50RGJsQ2xpY2soe2xhYmVsOmkoZS5k YXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kPQphdGEsaW5kZXg6dCxwb3M6ZDMuZXZlbnQs aWQ6dX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7TS5hdHRyKCJmaWxsIiw9CmZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4gYShlLHQpfSk7dj0KYXIgUD0zREQuYXBwZW5kKCJwYXRoIikuZWFjaChmdW5jdGlvbihlKXt0 aGlzLl9jdXJyZW50PTNEZX0pO00uc2VsZWN0KCJwYXRoPQoiKS5hdHRyKCJkIixBKTtpZihsKXt2 YXIgSD0zRGQzLnN2Zy5hcmMoKS5pbm5lclJhZGl1cygwKTtjJiYoSD0zREEpLGgmJihIPQo9M0Rk My5zdmcuYXJjKCkub3V0ZXJSYWRpdXMoQS5vdXRlclJhZGl1cygpKSksXy5lbnRlcigpLmFwcGVu ZCgiZyIpLmNsYXNzZWQ9CigibnYtbGFiZWwiLCEwKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49 M0RkMy5zZWxlY3QodGhpcyk7bi5hdHRyKCJ0cmFuc2Zvcj0KbSIsZnVuY3Rpb24oZSl7aWYoZyl7 ZS5vdXRlclJhZGl1cz0zRHgrMTAsZS5pbm5lclJhZGl1cz0zRHgrMTU7dmFyIHQ9M0QoZS5zPQp0 YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMiooMTgwL01hdGguUEkpO3JldHVybihlLnN0YXJ0QW5nbGUr ZS5lbmRBbmdsZSkvMjxNYXQ9CmguUEk/dC09M0Q5MDp0Kz0zRDkwLCJ0cmFuc2xhdGUoIitILmNl bnRyb2lkKGUpKyIpIHJvdGF0ZSgiK3QrIikifXJldHVybiBlLj0Kb3V0ZXJSYWRpdXM9M0RTKzEw LGUuaW5uZXJSYWRpdXM9M0RTKzE1LCJ0cmFuc2xhdGUoIitILmNlbnRyb2lkKGUpKyIpIn0pLG4u PQphcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiI2ZmZiIpLnN0eWxlKCJmaWxsIiwiI2Zm ZiIpLmF0dHIoInJ4IiwzKS5hdHQ9CnIoInJ5IiwzKSxuLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJ0 ZXh0LWFuY2hvciIsZz8oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLz0KMjxNYXRoLlBJPyJzdGFy dCI6ImVuZCI6Im1pZGRsZSIpLnN0eWxlKCJmaWxsIiwiIzAwMCIpfSk7dmFyIEI9M0R7fSxqPTNE MTQsPQpGPTNEMTQwLEk9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlWzBdL0YpKkYr IiwiK01hdGguZmxvb3IoZVsxXS9qKSo9Cmp9O18uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihl KXtpZihnKXtlLm91dGVyUmFkaXVzPTNEeCsxMCxlLmlubmVyUmFkaXVzPQo9M0R4KzE1O3ZhciB0 PTNEKGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yKigxODAvTWF0aC5QSSk7cmV0dXJuKGUuc3Rh cnRBbmc9CmxlK2UuZW5kQW5nbGUpLzI8TWF0aC5QST90LT0zRDkwOnQrPTNEOTAsInRyYW5zbGF0 ZSgiK0guY2VudHJvaWQoZSkrIikgcm90YT0KdGUoIit0KyIpIn1lLm91dGVyUmFkaXVzPTNEUysx MCxlLmlubmVyUmFkaXVzPTNEUysxNTt2YXIgbj0zREguY2VudHJvaWQoZSksPQpyPTNESShuKTty ZXR1cm4gQltyXSYmKG5bMV0tPTNEaiksQltJKG4pXT0zRCEwLCJ0cmFuc2xhdGUoIituKyIpIn0p LF8uc2VsZWM9CnQoIi5udi1sYWJlbCB0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIixnPyhkLnN0 YXJ0QW5nbGUrZC5lbmRBbmdsZSkvMjxNYXRoLj0KUEk/InN0YXJ0IjoiZW5kIjoibWlkZGxlIiku dGV4dChmdW5jdGlvbihlLHQpe3ZhciBuPTNEKGUuZW5kQW5nbGUtZS5zdGFydEFuPQpnbGUpLygy Kk1hdGguUEkpLHI9M0R7a2V5OmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscGVyY2VudDpkMy5m b3JtYXQoIiUiKSg9Cm4pfTtyZXR1cm4gZS52YWx1ZSYmbj52P3JbcF06IiJ9KX19KSxTfXZhciB0 PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdD0KOjB9LG49M0Q1MDAscj0zRDUwMCxpPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9PQosbz0z RGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlc2NyaXB0aW9ufSx1PTNETWF0aC5mbG9vcihNYXRoLnJh bmRvbSgpKjFlNCksYT0KPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxmPTNEZDMuZm9ybWF0KCIs LjJmIiksbD0zRCEwLGM9M0QhMCxoPTNEITEscD0zRCJrPQpleSIsdj0zRC4wMixtPTNEITEsZz0z RCExLHk9M0QhMSxiPTNEITEsdz0zRC41LEU9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayI9Ciwi ZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1l bnRNb3VzZW91dCIpO3JldD0KdXJuIFMuZGlzcGF0Y2g9M0RFLFMub3B0aW9ucz0zRGUudXRpbHMu b3B0aW9uc0Z1bmMuYmluZChTKSxTLm1hcmdpbj0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQ9 Ci50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5y aWdodCx0LmJvdHRvbT0zRHR5cD0KZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9t OnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuPQpkZWZpbmVkIj9lLmxlZnQ6 dC5sZWZ0LFMpOnR9LFMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD89CihuPTNEZSxTKTpufSxTLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhyPTNEZSxTKTpyfSxTLj0KdmFsdWVzPTNEZnVuY3Rpb24odCl7cmV0dXJuIGUubG9n KCJwaWUudmFsdWVzKCkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKSxTPQp9LFMueD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxTKTppfSxTLnk9M0RmdW5jdGlv bihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZDMuZnVuY3RvcihlKSxTKTpzfSxT LmRlc2NyaXB0aW9uPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0z RGUsUyk6b30sUy5zaG93TGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxl bmd0aD8obD0zRGUsUyk6bH0sUy5sYWJlbFN1bmJlYW1MYXlvdXQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW09CmVudHMubGVuZ3RoPyhnPTNEZSxTKTpnfSxTLmRvbnV0TGFiZWxzT3V0c2lkZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KGg9M0RlLFMpOmh9LFMucGll TGFiZWxzT3V0c2lkZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGM9 M0RlLFMpOmN9LFMubGFiZWxUeXBlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHA9M0RlLHA9Cj0zRHB8fCJrZXkiLFMpOnB9LFMuZG9udXQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsUyk6bT0KfSxTLmRvbnV0UmF0aW89M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsUyk6d30sUy5zdGFydEFuPQpnbGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsUyk6eX0sUy5lbmRB bmdsZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLFMpOmJ9 LFMuaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyh1PTNEZSxTKTp1 fSxTLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlPQou dXRpbHMuZ2V0Q29sb3IodCksUyk6YX0sUy52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3Q9Cmg/KGY9M0RlLFMpOmZ9LFMubGFiZWxUaHJlc2hvbGQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRD0KZSxTKTp2fSxTfSxlLm1vZGVs cy5waWVDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0 PQppb24oZSl7dmFyIHU9M0RkMy5zZWxlY3QodGhpcyksYT0zRHRoaXMsZj0zRChpfHxwYXJzZUlu dCh1LnN0eWxlKCJ3aWR0aCIpKXw9Cnw5NjApLXIubGVmdC1yLnJpZ2h0LGQ9M0Qoc3x8cGFyc2VJ bnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXIudG9wLXIuYm90dD0Kb207di51cGRhdGU9M0Rm dW5jdGlvbigpe3UuY2FsbCh2KX0sdi5jb250YWluZXI9M0R0aGlzLGwuZGlzYWJsZWQ9M0RlLm1h cChmPQp1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFjKXt2YXIgbTtjPTNEe307 Zm9yKG0gaW4gbClsW21daW5zdGFuY2U9Cm9mIEFycmF5P2NbbV09M0RsW21dLnNsaWNlKDApOmNb bV09M0RsW21dfWlmKCFlfHwhZS5sZW5ndGgpe3ZhciBnPTNEdS5zZWxlYz0KdEFsbCgiLm52LW5v RGF0YSIpLmRhdGEoW2hdKTtyZXR1cm4gZy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNs YXNzIiwiPQpudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1h bmNob3IiLCJtaWRkbGUiKSxnLmF0dHIoIng9CiIsci5sZWZ0K2YvMikuYXR0cigieSIsci50b3Ar ZC8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdn11LnNlbGVjdEFsbD0KKCIubnYtbm9E YXRhIikucmVtb3ZlKCk7dmFyIHk9M0R1LnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXBpZUNoYXJ0 IikuZGF0YShbPQplXSksYj0zRHkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 ZDMgbnYtd3JhcCBudi1waWVDaGFydCIpLmFwcGU9Cm5kKCJnIiksdz0zRHkuc2VsZWN0KCJnIik7 Yi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXBpZVdyYXAiKSxiLmFwcGVuZD0KKCJnIiku YXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksbyYmKG4ud2lkdGgoZikua2V5KHQueCgpKSx5 LnNlbGVjdCgiLm52PQotbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwobiksci50b3AhPTNEbi5o ZWlnaHQoKSYmKHIudG9wPTNEbi5oZWlnaHQoKSxkPQo9M0Qoc3x8cGFyc2VJbnQodS5zdHlsZSgi aGVpZ2h0IikpfHw0MDApLXIudG9wLXIuYm90dG9tKSx5LnNlbGVjdCgiLm52LWxlZ2U9Cm5kV3Jh cCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1yLnRvcCsiKSIpKSx5LmF0dHIo InRyYW5zZm9ybSIsIj0KdHJhbnNsYXRlKCIrci5sZWZ0KyIsIityLnRvcCsiKSIpLHQud2lkdGgo ZikuaGVpZ2h0KGQpO3ZhciBFPTNEdy5zZWxlY3QoIi5uPQp2LXBpZVdyYXAiKS5kYXR1bShbZV0p O2QzLnRyYW5zaXRpb24oRSkuY2FsbCh0KSxuLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSI9Cixm dW5jdGlvbihlKXtsPTNEZSxwLnN0YXRlQ2hhbmdlKGwpLHYudXBkYXRlKCl9KSx0LmRpc3BhdGNo Lm9uKCJlbGVtZW50TW91cz0KZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtwLnRvb2x0aXBIaWRl KGUpfSkscC5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpPQp7dHlwZW9mIHQuZGlzYWJsZWQh PTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdC49 CmRpc2FibGVkW25dfSksbC5kaXNhYmxlZD0zRHQuZGlzYWJsZWQpLHYudXBkYXRlKCl9KX0pLHZ9 dmFyIHQ9M0RlLm1vZGVscy5waT0KZSgpLG49M0RlLm1vZGVscy5sZWdlbmQoKSxyPTNEe3RvcDoz MCxyaWdodDoyMCxib3R0b206MjAsbGVmdDoyMH0saT0zRG51bGwsPQpzPTNEbnVsbCxvPTNEITAs dT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksYT0zRCEwLGY9M0RmdW5jdGlvbihlLHQsbixyKXty ZXQ9CnVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrdCsiPC9wPiJ9LGw9M0R7fSxjPTNEbnVsbCxo PTNEIk5vIERhdGEgQXZhaWxhYmxlLj0KIixwPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93Iiwi dG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksPQpkPTNEZnVuY3Rpb24o bixyKXt2YXIgaT0zRHQuZGVzY3JpcHRpb24oKShuLnBvaW50KXx8dC54KCkobi5wb2ludCkscz0z RG4ucG89CnNbMF0rKHImJnIub2Zmc2V0TGVmdHx8MCksbz0zRG4ucG9zWzFdKyhyJiZyLm9mZnNl dFRvcHx8MCksdT0zRHQudmFsdWVGb3JtYT0KdCgpKHQueSgpKG4ucG9pbnQpKSxhPTNEZihpLHUs bix2KTtlLnRvb2x0aXAuc2hvdyhbcyxvXSxhLG4udmFsdWU8MD8ibiI6InMiPQosbnVsbCxyKX07 cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24o ZSl7ZS5wb3M9Cj0zRFtlLnBvc1swXStyLmxlZnQsZS5wb3NbMV0rci50b3BdLHAudG9vbHRpcFNo b3coZSl9KSxwLm9uKCJ0b29sdGlwU2hvdyIsZj0KdW5jdGlvbihlKXthJiZkKGUpfSkscC5vbigi dG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7YSYmZS50b29sdGlwLmNsZWFudXAoKX0pPQosdi5sZWdl bmQ9M0RuLHYuZGlzcGF0Y2g9M0RwLHYucGllPTNEdCxkMy5yZWJpbmQodix0LCJ2YWx1ZUZvcm1h dCIsInZhbHVlcyI9CiwieCIsInkiLCJkZXNjcmlwdGlvbiIsImlkIiwic2hvd0xhYmVscyIsImRv bnV0TGFiZWxzT3V0c2lkZSIsInBpZUxhYmVsc091dD0Kc2lkZSIsImxhYmVsVHlwZSIsImRvbnV0 IiwiZG9udXRSYXRpbyIsImxhYmVsVGhyZXNob2xkIiksdi5vcHRpb25zPTNEZS51dGlsPQpzLm9w dGlvbnNGdW5jLmJpbmQodiksdi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oci50b3A9Cj0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpyLnRv cCxyLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZD0KZWZpbmVkIj9lLnJpZ2h0OnIucmln aHQsci5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206PQpy LmJvdHRvbSxyLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpyLmxl ZnQsdik6cn0sdi53aWR0aD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLHYpOml9LHYuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocz0zRGUsdik6c30sdi5jb2xvcj0zRGZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHM9 Ci5sZW5ndGg/KHU9M0RlLnV0aWxzLmdldENvbG9yKHIpLG4uY29sb3IodSksdC5jb2xvcih1KSx2 KTp1fSx2LnNob3dMZWdlbmQ9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhvPTNEZSx2KTpvfSx2LnRvb2x0aXBzPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYT0zRGUsdik6YX0sdi50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVy PQpuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHYpOmZ9LHYuc3RhdGU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhsPTNEZSx2KTpsfSx2LmRlZmF1bHRTdGF0ZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZT0KLHYpOmN9LHYubm9EYXRh PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHYpOmh9LHZ9LGUu bW9kPQplbHMuc2NhdHRlcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSShxKXtyZXR1cm4gcS5lYWNo KGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFE9Cigpe2lmKCFnKXJldHVybiExO3ZhciBlLGk9M0RkMy5t ZXJnZShJLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLnZhbHVlcy5tYT0KcChmdW5jdGlvbihl LG4pe3ZhciByPTNEZihlLG4pLGk9M0RsKGUsbik7cmV0dXJuW28ociksdShpKSx0LG4sZV19KS5m aWx0ZXIoPQpmdW5jdGlvbihlLHQpe3JldHVybiBiKGVbNF0sdCl9KX0pKTtpZihEPTNEPTNEPTNE ITApe2lmKHgpe3ZhciBhPTNEWC5zZWxlY3Q9CigiZGVmcyIpLnNlbGVjdEFsbCgiLm52LXBvaW50 LWNsaXBzIikuZGF0YShbc10pLmVudGVyKCk7YS5hcHBlbmQoImNsaXBQYXRoIj0KKS5hdHRyKCJj bGFzcyIsIm52LXBvaW50LWNsaXBzIikuYXR0cigiaWQiLCJudi1wb2ludHMtY2xpcC0iK3MpO3Zh ciBjPTNEWC5zPQplbGVjdCgiI252LXBvaW50cy1jbGlwLSIrcykuc2VsZWN0QWxsKCJjaXJjbGUi KS5kYXRhKGkpO2MuZW50ZXIoKS5hcHBlbmQoImM9CmlyY2xlIikuYXR0cigiciIsVCksYy5leGl0 KCkucmVtb3ZlKCksYy5hdHRyKCJjeCIsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KT0KLmF0dHIo ImN5IixmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pLFguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMi KS5hdHRyKCJjbGlwPQotcGF0aCIsInVybCgjbnYtcG9pbnRzLWNsaXAtIitzKyIpIil9aS5sZW5n dGgmJihpLnB1c2goW28ucmFuZ2UoKVswXS0yMCx1LnI9CmFuZ2UoKVswXS0yMCxudWxsLG51bGxd KSxpLnB1c2goW28ucmFuZ2UoKVsxXSsyMCx1LnJhbmdlKClbMV0rMjAsbnVsbCxudWxsXT0KKSxp LnB1c2goW28ucmFuZ2UoKVswXS0yMCx1LnJhbmdlKClbMF0rMjAsbnVsbCxudWxsXSksaS5wdXNo KFtvLnJhbmdlKClbMV0rPQoyMCx1LnJhbmdlKClbMV0tMjAsbnVsbCxudWxsXSkpO3ZhciBoPTNE ZDMuZ2VvbS5wb2x5Z29uKFtbLTEwLC0xMF0sWy0xMCxyKzE9CjBdLFtuKzEwLHIrMTBdLFtuKzEw LC0xMF1dKSxwPTNEMWUtNjtpPTNEaS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMF0tdD0K WzBdfHxlWzFdLXRbMV19KTtmb3IodmFyIGQ9M0QwO2Q8aS5sZW5ndGgtMTspTWF0aC5hYnMoaVtk XVswXS1pW2QrMV1bMF0pPHAmPQomTWF0aC5hYnMoaVtkXVsxXS1pW2QrMV1bMV0pPHA/aS5zcGxp Y2UoZCsxLDEpOmQrKzt2YXIgdj0zRGQzLmdlb20udm9yb25vaSg9CmkpLm1hcChmdW5jdGlvbihl LHQpe3JldHVybntkYXRhOmguY2xpcChlKSxzZXJpZXM6aVt0XVsyXSxwb2ludDppW3RdWzNdfX0p LD0KbT0zRFguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRh KHYpO20uZW50ZXIoKS5hcHBlbmQoPQoicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQp e3JldHVybiJudi1wYXRoLSIrdH0pLG0uZXhpdCgpLnJlbW92ZSgpLG09Ci5hdHRyKCJkIixmdW5j dGlvbihlKXtyZXR1cm4hZXx8IWUuZGF0YXx8ZS5kYXRhLmxlbmd0aD0zRD0zRD0zRDA/Ik0gMCAw IjoiTT0KIitlLmRhdGEuam9pbigiTCIpKyJaIn0pO3ZhciB5PTNEZnVuY3Rpb24oZSxuKXtpZihG KXJldHVybiAwO3ZhciByPTNESVtlLnNlPQpyaWVzXTtpZih0eXBlb2Ygcj0zRD0zRCJ1bmRlZmlu ZWQiKXJldHVybjt2YXIgaT0zRHIudmFsdWVzW2UucG9pbnRdO24oe3BvaW49CnQ6aSxzZXJpZXM6 cixwb3M6W28oZihpLGUucG9pbnQpKSt0LmxlZnQsdShsKGksZS5wb2ludCkpK3QudG9wXSxzZXJp ZXNJbmRleD0KOmUuc2VyaWVzLHBvaW50SW5kZXg6ZS5wb2ludH0pfTttLm9uKCJjbGljayIsZnVu Y3Rpb24oZSl7eShlLF8uZWxlbWVudENsaWNrPQopfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24o ZSl7eShlLF8uZWxlbWVudE1vdXNlb3Zlcil9KS5vbigibW91c2VvdXQiLGZ1bmM9CnRpb24oZSx0 KXt5KGUsXy5lbGVtZW50TW91c2VvdXQpfSl9ZWxzZSBYLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNl bGVjdEFsbCgiLj0KbnYtZ3JvdXAiKS5zZWxlY3RBbGwoIi5udi1wb2ludCIpLm9uKCJjbGljayIs ZnVuY3Rpb24oZSxuKXtpZihGfHwhSVtlLnNlcmllPQpzXSlyZXR1cm4gMDt2YXIgcj0zRElbZS5z ZXJpZXNdLGk9M0RyLnZhbHVlc1tuXTtfLmVsZW1lbnRDbGljayh7cG9pbnQ6aSxzZXI9Cmllczpy LHBvczpbbyhmKGksbikpK3QubGVmdCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luZGV4OmUuc2Vy aWVzLHBvaW50SW5kZT0KeDpufSl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLG4pe2lmKEZ8 fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgcj0zRElbPQplLnNlcmllc10saT0zRHIudmFsdWVz W25dO18uZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ6aSxzZXJpZXM6cixwb3M6W28oZihpLG49Cikp K3QubGVmdCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6 bn0pfSkub24oIm1vdXNlbz0KdXQiLGZ1bmN0aW9uKGUsdCl7aWYoRnx8IUlbZS5zZXJpZXNdKXJl dHVybiAwO3ZhciBuPTNESVtlLnNlcmllc10scj0zRG4udmFsPQp1ZXNbdF07Xy5lbGVtZW50TW91 c2VvdXQoe3BvaW50OnIsc2VyaWVzOm4sc2VyaWVzSW5kZXg6ZS5zZXJpZXMscG9pbnRJbmRleDo9 CnR9KX0pO0Y9M0QhMX12YXIgcT0zRG4tdC5sZWZ0LXQucmlnaHQsUj0zRHItdC50b3AtdC5ib3R0 b20sVT0zRGQzLnNlbGVjdCh0aD0KaXMpO0kuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVz LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXJpZXM9M0R0fSl9KTt2PQphciBXPTNETiYmQyYmQT9b XTpkMy5tZXJnZShJLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9u KGU9Cix0KXtyZXR1cm57eDpmKGUsdCkseTpsKGUsdCksc2l6ZTpjKGUsdCl9fSl9KSk7by5kb21h aW4oTnx8ZDMuZXh0ZW50KFcubWFwKD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pLmNvbmNhdChk KSkpLHcmJklbMF0/by5yYW5nZShrfHxbKHEqRStxKS8oMipJWzBdLnZhPQpsdWVzLmxlbmd0aCks cS1xKigxK0UpLygyKklbMF0udmFsdWVzLmxlbmd0aCldKTpvLnJhbmdlKGt8fFswLHFdKSx1LmRv bWFpbig9CkN8fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkuY29uY2F0 KHYpKSkucmFuZ2UoTHx8W1IsMF0pLGEuZD0Kb21haW4oQXx8ZDMuZXh0ZW50KFcubWFwKGZ1bmN0 aW9uKGUpe3JldHVybiBlLnNpemV9KS5jb25jYXQobSkpKS5yYW5nZShPfHxbPQoxNiwyNTZdKTtp ZihvLmRvbWFpbigpWzBdPTNEPTNEPTNEby5kb21haW4oKVsxXXx8dS5kb21haW4oKVswXT0zRD0z RD0zRHUuZG89Cm1haW4oKVsxXSlNPTNEITA7by5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWlu KClbMV0mJihvLmRvbWFpbigpWzBdP28uZG9tYT0KaW4oW28uZG9tYWluKClbMF0tby5kb21haW4o KVswXSouMDEsby5kb21haW4oKVsxXStvLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9tPQphaW4oWy0x LDFdKSksdS5kb21haW4oKVswXT0zRD0zRD0zRHUuZG9tYWluKClbMV0mJih1LmRvbWFpbigpWzBd P3UuZG9tYWluKFs9CnUuZG9tYWluKClbMF0tdS5kb21haW4oKVswXSouMDEsdS5kb21haW4oKVsx XSt1LmRvbWFpbigpWzFdKi4wMV0pOnUuZG9tYWluKD0KWy0xLDFdKSksaXNOYU4oby5kb21haW4o KVswXSkmJm8uZG9tYWluKFstMSwxXSksaXNOYU4odS5kb21haW4oKVswXSkmJnUuZG9tPQphaW4o Wy0xLDFdKSxQPTNEUHx8byxIPTNESHx8dSxCPTNEQnx8YTt2YXIgWD0zRFUuc2VsZWN0QWxsKCJn Lm52LXdyYXAubnYtc2M9CmF0dGVyIikuZGF0YShbSV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtcz0KY2F0dGVyIG52LWNoYXJ0LSIrcyso TT8iIG52LXNpbmdsZS1wb2ludCI6IiIpKSwkPTNEVi5hcHBlbmQoImRlZnMiKSxKPTNEVi5hPQpw cGVuZCgiZyIpLEs9M0RYLnNlbGVjdCgiZyIpO0ouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1ncm91cHMiKSxKLmFwcGU9Cm5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1wb2ludC1wYXRocyIp LFguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZT0KZnQrIiwiK3QudG9wKyIpIiks JC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1lZGdlLWNsaXAtIitzKS5hcHBlbmQo PQoicmVjdCIpLFguc2VsZWN0KCIjbnYtZWRnZS1jbGlwLSIrcysiIHJlY3QiKS5hdHRyKCJ3aWR0 aCIscSkuYXR0cigiaGVpZ2h0Iiw9ClI+MD9SOjApLEsuYXR0cigiY2xpcC1wYXRoIixTPyJ1cmwo I252LWVkZ2UtY2xpcC0iK3MrIikiOiIiKSxGPTNEITA7dmFyIEc9Cj0zRFguc2VsZWN0KCIubnYt Z3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBl fT0KLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO0cuZW50ZXIoKS5hcHBlbmQoImciKS5zdHls ZSgic3Ryb2tlLW9wYWNpdHkiLDFlPQotNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksRy5l eGl0KCkucmVtb3ZlKCksRy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSw9CnQpe3JldHVybiJudi1n cm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHVybiBl Lmhvdj0KZXJ9KSxHLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5z dHlsZSgic3Ryb2tlIixmdW5jdGlvbihlPQosdCl7cmV0dXJuIGkoZSx0KX0pLnN0eWxlKCJzdHJv a2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjUpO2lmKHA9Cil7dmFyIFk9M0RH LnNlbGVjdEFsbCgiY2lyY2xlLm52LXBvaW50IikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZXN9LD0KeSk7WS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuc3R5bGUoImZpbGwiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J9KS5zPQp0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuY29sb3J9KS5hdHRyKCJjeCIsZnVuY3Rpb24odCxuKXtyZXR1cm49CiBlLnV0aWxz Lk5hTnRvWmVybyhQKGYodCxuKSkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUu dXRpbHMuTmFOdD0Kb1plcm8oSChsKHQsbikpKX0pLmF0dHIoInIiLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIE1hdGguc3FydChhKGMoZSx0KSkvTWF0aC5QPQpJKX0pLFkuZXhpdCgpLnJlbW92ZSgpLEcu ZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1wb2ludCIpLmF0dHIoImN4IixmdW5jdGk9Cm9uKHQs bil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oZih0LG4pKSl9KS5hdHRyKCJjeSIsZnVuY3Rp b24odCxuKXtyZXR1cj0KbiBlLnV0aWxzLk5hTnRvWmVybyh1KGwodCxuKSkpfSkucmVtb3ZlKCks WS5lYWNoKGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoPQppcykuY2xhc3NlZCgibnYtcG9pbnQi LCEwKS5jbGFzc2VkKCJudi1wb2ludC0iK3QsITApLmNsYXNzZWQoImhvdmVyIiwhMSl9KSw9Clku YXR0cigiY3giLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oZih0LG4p KSl9KS5hdHRyKCJjeSIsZj0KdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh1 KGwodCxuKSkpfSkuYXR0cigiciIsZnVuY3Rpb24oZSx0KXtyPQpldHVybiBNYXRoLnNxcnQoYShj KGUsdCkpL01hdGguUEkpfSl9ZWxzZXt2YXIgWT0zREcuc2VsZWN0QWxsKCJwYXRoLm52LXBvaW49 CnQiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO1kuZW50ZXIoKS5hcHBlbmQo InBhdGgiKS5zdHlsZSgiZmlsbD0KIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuc3R5 bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvPQpyfSkuYXR0cigidHJhbnNm b3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitQKGYoZSx0KSkrIiwiK0gobChl LHQ9CikpKyIpIn0pLmF0dHIoImQiLGQzLnN2Zy5zeW1ib2woKS50eXBlKGgpLnNpemUoZnVuY3Rp b24oZSx0KXtyZXR1cm4gYShjKGUsdD0KKSl9KSksWS5leGl0KCkucmVtb3ZlKCksRy5leGl0KCku c2VsZWN0QWxsKCJwYXRoLm52LXBvaW50IikuYXR0cigidHJhbnNmb3JtPQoiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuInRyYW5zbGF0ZSgiK28oZihlLHQpKSsiLCIrdShsKGUsdCkpKyIpIn0pLnJlbW92 ZSgpLFk9Ci5lYWNoKGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoIm52LXBv aW50IiwhMCkuY2xhc3NlZCgibnYtcG9pbj0KdC0iK3QsITApLmNsYXNzZWQoImhvdmVyIiwhMSl9 KSxZLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhPQpuc2xhdGUoIitv KGYoZSx0KSkrIiwiK3UobChlLHQpKSsiKSJ9KS5hdHRyKCJkIixkMy5zdmcuc3ltYm9sKCkudHlw ZShoKS5zaXo9CmUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShjKGUsdCkpfSkpfWNsZWFyVGltZW91 dChqKSxqPTNEc2V0VGltZW91dChRLDMwMCksUD0KPTNEby5jb3B5KCksSD0zRHUuY29weSgpLEI9 M0RhLmNvcHkoKX0pLEl9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsPQplZnQ6MH0s bj0zRDk2MCxyPTNENTAwLGk9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9M0RNYXRoLmZsb29y KE1hdGgucmFuZG89Cm0oKSoxZTUpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuc2NhbGUu bGluZWFyKCksYT0zRGQzLnNjYWxlLmxpbmVhcigpLD0KZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBl Lnh9LGw9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxjPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4g ZS5zaXplfHwxfSxoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2hhcGV8fCJjaXJjbGUifSxwPTNE ITAsZD0zRFtdLHY9M0Q9CltdLG09M0RbXSxnPTNEITAseT0zRG51bGwsYj0zRGZ1bmN0aW9uKGUp e3JldHVybiFlLm5vdEFjdGl2ZX0sdz0zRCExLEU9M0QuMT0KLFM9M0QhMSx4PTNEITAsVD0zRGZ1 bmN0aW9uKCl7cmV0dXJuIDI1fSxOPTNEbnVsbCxDPTNEbnVsbCxrPTNEbnVsbCxMPTNEbnVsPQps LEE9M0RudWxsLE89M0RudWxsLE09M0QhMSxfPTNEZDMuZGlzcGF0Y2goImVsZW1lbnRDbGljayIs ImVsZW1lbnRNb3VzZW92ZXI9CiIsImVsZW1lbnRNb3VzZW91dCIpLEQ9M0QhMCxQLEgsQixqLEY9 M0QhMTtyZXR1cm4gSS5jbGVhckhpZ2hsaWdodHM9M0RmdW5jdD0KaW9uKCl7ZDMuc2VsZWN0QWxs KCIubnYtY2hhcnQtIitzKyIgLm52LXBvaW50LmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0s PQpJLmhpZ2hsaWdodFBvaW50PTNEZnVuY3Rpb24oZSx0LG4pe2QzLnNlbGVjdCgiLm52LWNoYXJ0 LSIrcysiIC5udi1zZXJpZXMtIis9CmUrIiAubnYtcG9pbnQtIit0KS5jbGFzc2VkKCJob3ZlciIs bil9LF8ub24oImVsZW1lbnRNb3VzZW92ZXIucG9pbnQiLGZ1bmN0aT0Kb24oZSl7ZyYmSS5oaWdo bGlnaHRQb2ludChlLnNlcmllc0luZGV4LGUucG9pbnRJbmRleCwhMCl9KSxfLm9uKCJlbGVtZW50 TW91PQpzZW91dC5wb2ludCIsZnVuY3Rpb24oZSl7ZyYmSS5oaWdobGlnaHRQb2ludChlLnNlcmll c0luZGV4LGUucG9pbnRJbmRleCwhMSk9Cn0pLEkuZGlzcGF0Y2g9M0RfLEkub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChJKSxJLng9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhmPTNEZDMuZnVuY3RvcihlKSxJKTpmfSxJLnk9M0RmdW5jdGlvbihlKXty ZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhsPTNEZDMuZnVuY3RvcihlKSxJKTpsfSxJLnNpemU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhjPTNEZDMuZnVuY3Rvcihl KSxJKTpjfSxJLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/ KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9 M0R0eXBlb2YgPQplLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRv bT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWY9CmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQu bGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdD0KLEkpOnR9 LEkud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsSSk6 bn0sSS5oZWlnaHQ9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNE ZSxJKTpyfSxJLnhTY2FsZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG89M0RlLEkpOm99LEkueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxl bmd0aD8odT0zRGUsSSk6dX0sSS56U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYT0zRGU9CixJKTphfSxJLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oTj0zRGUsSSk6Tn0sSS55RG9tYT0KaW49M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0zRGUsSSk6Q30sSS5zaXplRG9tYWluPTNEZnVuY3RpPQpv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0zRGUsSSk6QX0sSS54UmFuZ2U9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhrPTNEZSxJKTprfSxJLnlSYW5nZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKEw9M0RlLEkpOkx9LEkuc2l6 ZVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89M0RlLEkpOk99 PQosSS5mb3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUs SSk6ZH0sSS5mb3JjZVk9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2 PTNEZSxJKTp2fSxJLmZvcmNlU2l6ZT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG09M0RlLEkpOm19LEkuaW50ZXJhY3RpdmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lPQpudHMubGVuZ3RoPyhnPTNEZSxJKTpnfSxJLnBvaW50S2V5PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9Cj0zRGUsSSk6eX0sSS5wb2ludEFjdGl2ZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxJKTpifT0KLEkucGFkRGF0YT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxJKTp3fSxJLnBhZERh dGFPdXRlPQpyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEkp OkV9LEkuY2xpcEVkZ2U9M0RmdW5jdGlvbig9CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhT PTNEZSxJKTpTfSxJLmNsaXBWb3Jvbm9pPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRz Lmxlbmd0aD8oeD0zRGUsSSk6eH0sSS51c2VWb3Jvbm9pPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sPQplbmd0aD8oRD0zRGUsRD0zRD0zRD0zRCExJiYoeD0zRCExKSxJKTpEfSxJLmNs aXBSYWRpdXM9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxJ KTpUfSxJLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8oaT0z RGUudXRpbHMuZ2V0Q29sb3IodCksSSk6aX0sSS5zaGFwZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuPQpndGg/KGg9M0RlLEkpOmh9LEkub25seUNpcmNsZXM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGU9CixJKTpwfSxJLmlkPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEkpOnN9LEkuc2luZ2xlUG9pbj0KdD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPTNEZSxJKTpNfSxJfSxlLm1v ZGVscy5zY2F0dGVyQ2hhPQpydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5l YWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIEooKXtpZihUKXI9CmV0dXJuIFcuc2VsZWN0KCIubnYt cG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSwhMTtXLnNlbGVjdD0K KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIGk9 M0RkMy5tb3VzZSh0aGlzKTtoPQouZGlzdG9ydGlvbih4KS5mb2N1cyhpWzBdKSxwLmRpc3RvcnRp b24oeCkuZm9jdXMoaVsxXSksVy5zZWxlY3QoIi5udi1zY2F0dGU9CnJXcmFwIikuY2FsbCh0KSxi JiZXLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksdyYmVy5zZWxlY3QoIi5udi15Lm52 LT0KYXhpcyIpLmNhbGwociksVy5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25YIikuZGF0dW0oZS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0PQp1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pLFcuc2VsZWN0 KCIubnYtZGlzdHJpYnV0aW9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmM9CnRpb24oZSl7cmV0dXJu IWUuZGlzYWJsZWR9KSkuY2FsbCh1KX12YXIgQz0zRGQzLnNlbGVjdCh0aGlzKSxrPTNEdGhpcyxM PTNEKD0KZnx8cGFyc2VJbnQoQy5zdHlsZSgid2lkdGgiKSl8fDk2MCktYS5sZWZ0LWEucmlnaHQs RD0zRChsfHxwYXJzZUludChDLnN0eWxlPQooImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRv bTtGLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7Qy5jYWxsKEYpfSxGLmNvbnRhaW49CmVyPTNEdGhpcyxB LmRpc2FibGVkPTNEZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIU8p e3ZhciBJOz0KTz0zRHt9O2ZvcihJIGluIEEpQVtJXWluc3RhbmNlb2YgQXJyYXk/T1tJXT0zREFb SV0uc2xpY2UoMCk6T1tJXT0zREFbSV19aWYoPQohZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIHE9Cj0zREMuc2Vs ZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbX10pO3JldHVybiBxLmVudGVyKCkuYXBwZW5kKCJ0 ZXh0IikuYXR0cj0KKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIp LnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpPQoscS5hdHRyKCJ4IixhLmxlZnQrTC8yKS5h dHRyKCJ5IixhLnRvcCtELzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxGfUM9Ci5zZWxl Y3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxQPTNEUHx8aCxIPTNESHx8cDt2YXIgUj0zREMu c2VsZWN0QWxsKCJnLj0KbnYtd3JhcC5udi1zY2F0dGVyQ2hhcnQiKS5kYXRhKFtlXSksVT0zRFIu ZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnZkMyBudi13cmFwIG52LXNjYXR0 ZXJDaGFydCBudi1jaGFydC0iK3QuaWQoKSksej0zRFUuYXBwZW5kKCJnIiksVz0zRFIuc2U9Cmxl Y3QoImciKTt6LmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1iYWNrZ3JvdW5k Iiksei5hcHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksei5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLHouPQphcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWQ9 CmlzdFdyYXAiKSx6LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLHou YXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpO2lmKHkpe3ZhciBY PTNEUz9MLzI6TDtpLndpZHRoKFgpLFIuc2VsZWN0KCIubnYtbGVnPQplbmRXcmFwIikuZGF0dW0o ZSkuY2FsbChpKSxhLnRvcCE9M0RpLmhlaWdodCgpJiYoYS50b3A9M0RpLmhlaWdodCgpLEQ9M0Qo bHw9CnxwYXJzZUludChDLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b20pLFIu c2VsZWN0KCIubnYtbGVnZW5kV3JhcD0KIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr KEwtWCkrIiwiKyAtYS50b3ArIikiKX1TJiYocy53aWR0aCgxODApLmNvPQpsb3IoWyIjNDQ0Il0p LFcuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oaikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnM9CmxhdGUoMCwiKyAtYS50b3ArIikiKS5jYWxsKHMpKSxSLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgiK2EubGVmdCsiLCIrYT0KLnRvcCsiKSIpLEUmJlcuc2VsZWN0KCIubnYteS5u di1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTCsiLDApPQoiKSx0LndpZHRo KEwpLmhlaWdodChEKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxj KGUsdCl9KS49CmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLGQh PTNEPTNEMCYmdC54RG9tYWluKG51bGwpLHYhPQo9M0Q9M0QwJiZ0LnlEb21haW4obnVsbCksUi5z ZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW89Cm4oZSl7cmV0 dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KTtpZihkIT0zRD0zRDApe3ZhciBWPTNEaC5kb21haW4o KVsxXS1oLmRvbT0KYWluKClbMF07dC54RG9tYWluKFtoLmRvbWFpbigpWzBdLWQqVixoLmRvbWFp bigpWzFdK2QqVl0pfWlmKHYhPTNEPTNEMCl7dmFyPQogJD0zRHAuZG9tYWluKClbMV0tcC5kb21h aW4oKVswXTt0LnlEb21haW4oW3AuZG9tYWluKClbMF0tdiokLHAuZG9tYWluKClbMV09Cit2KiRd KX0odiE9M0Q9M0QwfHxkIT0zRD0zRDApJiZSLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0 dW0oZS5maWx0ZXIoZj0KdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLGIm JihuLnNjYWxlKGgpLnRpY2tzKG4udGlja3MoKSYmbi50PQppY2tzKCkubGVuZ3RoP24udGlja3Mo KTpMLzEwMCkudGlja1NpemUoLUQsMCksVy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHQ9CnIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbChuKSksdyYm KHIuc2NhbGUocCkudGljaz0KcyhyLnRpY2tzKCkmJnIudGlja3MoKS5sZW5ndGg/ci50aWNrcygp OkQvMzYpLnRpY2tTaXplKC1MLDApLFcuc2VsZWN0KCIubnYtPQp5Lm52LWF4aXMiKS5jYWxsKHIp KSxtJiYoby5nZXREYXRhKHQueCgpKS5zY2FsZShoKS53aWR0aChMKS5jb2xvcihlLm1hcChmdW49 CmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4p e3JldHVybiFlW25dLmRpc2FibD0KZWR9KSksei5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpPQosVy5zZWxlY3QoIi5udi1k aXN0cmlidXRpb25YIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClb MF09CisiKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkp LmNhbGwobykpLGcmJih1LmdldERhdD0KYSh0LnkoKSkuc2NhbGUocCkud2lkdGgoRCkuY29sb3Io ZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpPQp9KS5maWx0ZXIoZnVu Y3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSx6LnNlbGVjdCgiLm52LWRpc3RXcmFw IikuYXA9CnBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblkiKSxXLnNlbGVj dCgiLm52LWRpc3RyaWJ1dGlvblkiKS5hdD0KdHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhF P0w6LXUuc2l6ZSgpKSsiLDApIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oPQplKXtyZXR1cm4h ZS5kaXNhYmxlZH0pKS5jYWxsKHUpKSxkMy5maXNoZXllJiYoVy5zZWxlY3QoIi5udi1iYWNrZ3Jv dW5kIikuYXQ9CnRyKCJ3aWR0aCIsTCkuYXR0cigiaGVpZ2h0IixEKSxXLnNlbGVjdCgiLm52LWJh Y2tncm91bmQiKS5vbigibW91c2Vtb3ZlIixKKT0KLFcuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIp Lm9uKCJjbGljayIsZnVuY3Rpb24oKXtUPTNEIVR9KSx0LmRpc3BhdGNoLm9uKCJlPQpsZW1lbnRD bGljay5mcmVlemVGaXNoZXllIixmdW5jdGlvbigpe1Q9M0QhVH0pKSxzLmRpc3BhdGNoLm9uKCJs ZWdlbmRDbGljayI9CixmdW5jdGlvbihlLGkpe2UuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCx4PTNE ZS5kaXNhYmxlZD8wOjIuNSxXLnNlbGVjdCgiLm52LT0KYmFja2dyb3VuZCIpLnN0eWxlKCJwb2lu dGVyLWV2ZW50cyIsZS5kaXNhYmxlZD8ibm9uZSI6ImFsbCIpLFcuc2VsZWN0KCIubnYtPQpwb2lu dC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsZS5kaXNhYmxlZD8iYWxsIjoibm9uZSIp LGUuZGlzYWJsZWQ/KGg9Ci5kaXN0b3J0aW9uKHgpLmZvY3VzKDApLHAuZGlzdG9ydGlvbih4KS5m b2N1cygwKSxXLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIj0KKS5jYWxsKHQpLFcuc2VsZWN0KCIu bnYteC5udi1heGlzIikuY2FsbChuKSxXLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwoPQpy KSk6VD0zRCExLEYudXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rp b24oZSl7QS5kaXNhYmxlZD0KPTNEZS5kaXNhYmxlZCxNLnN0YXRlQ2hhbmdlKEEpLEYudXBkYXRl KCl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyPQoudG9vbHRpcCIsZnVuY3Rpb24o ZSl7ZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXM9 CkluZGV4KyIgLm52LWRpc3R4LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsZnVuY3Rpb24odCxu KXtyZXR1cm4gZS5wb3NbMV0tRD0KfSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAu bnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iPQorZS5wb2ludEluZGV4KS5h dHRyKCJ4MiIsZS5wb3NbMF0rby5zaXplKCkpLGUucG9zPTNEW2UucG9zWzBdK2EubGVmdCxlLnBv c1s9CjFdK2EudG9wXSxNLnRvb2x0aXBTaG93KGUpfSksTS5vbigidG9vbHRpcFNob3ciLGZ1bmN0 aW9uKGUpe04mJkIoZSxrLnBhcmVudD0KTm9kZSl9KSxNLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rp b24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlPQouZm9yRWFjaChmdW5j dGlvbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVkW25dfSksQS5kaXNhYmxlZD0zRHQuZGlz YWJsZWQ9CiksRi51cGRhdGUoKX0pLFA9M0RoLmNvcHkoKSxIPTNEcC5jb3B5KCl9KSxGfXZhciB0 PTNEZS5tb2RlbHMuc2NhdHRlcigpLG49Cj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMu YXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMubD0KZWdlbmQoKSxvPTNE ZS5tb2RlbHMuZGlzdHJpYnV0aW9uKCksdT0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLGE9M0R7 dG9wOjMwPQoscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9 M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGg9Cj0zRGQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2Fs ZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC54U2NhbGUoKSxwPQo9M0RkMy5maXNo ZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueVNj YWxlKCksZD0KPTNEMCx2PTNEMCxtPTNEITEsZz0zRCExLHk9M0QhMCxiPTNEITAsdz0zRCEwLEU9 M0QhMSxTPTNEISFkMy5maXNoZXllLHg9M0QwPQosVD0zRCExLE49M0QhMCxDPTNEZnVuY3Rpb24o ZSx0LG4pe3JldHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0saz0zRGZ1bmM9CnRpb24oZSx0 LG4pe3JldHVybiI8c3Ryb25nPiIrbisiPC9zdHJvbmc+In0sTD0zRG51bGwsQT0zRHt9LE89M0Ru dWxsLE09M0RkMz0KLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVD aGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLF89M0QiTm8gPQpEYXRhIEF2YWlsYWJsZS4iLEQ9M0QwO3Qu eFNjYWxlKGgpLnlTY2FsZShwKSxuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmc9CigxMCks ci5vcmllbnQoRT8icmlnaHQiOiJsZWZ0IikudGlja1BhZGRpbmcoMTApLG8uYXhpcygieCIpLHUu YXhpcygieSIpLHMudT0KcGRhdGVTdGF0ZSghMSk7dmFyIFAsSCxCPTNEZnVuY3Rpb24oaSxzKXt2 YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApPQosdT0zRGkucG9zWzFdKyhzLm9mZnNl dFRvcHx8MCksZj0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLGw9M0RwLnJhbmdlKCk9Clsw XSthLnRvcCsocy5vZmZzZXRUb3B8fDApLGM9M0RoLnJhbmdlKClbMF0rYS5sZWZ0KyhzLm9mZnNl dExlZnR8fDApLGQ9M0RpLj0KcG9zWzFdKyhzLm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Zvcm1h dCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbT0KPTNEci50aWNrRm9ybWF0KCkodC55 KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKTtDIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtmPQos bF0sQyhpLnNlcmllcy5rZXksdixtLGksRiksIm4iLDEscywieC1udnRvb2x0aXAiKSxrIT0zRG51 bGwmJmUudG9vbHRpcC5zaG89CncoW2MsZF0sayhpLnNlcmllcy5rZXksdixtLGksRiksImUiLDEs cywieS1udnRvb2x0aXAiKSxMIT0zRG51bGwmJmUudG9vbHRpcD0KLnNob3coW28sdV0sTChpLnNl cmllcy5rZXksdixtLGksRiksaS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX0saj0zRFt7a2V5OiJN PQphZ25pZnkiLGRpc2FibGVkOiEwfV07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3Vz ZW91dC50b29sdGlwIixmdW5jdGk9Cm9uKGUpe00udG9vbHRpcEhpZGUoZSksZDMuc2VsZWN0KCIu bnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZT0Kc0luZGV4KyIgLm52LWRp c3R4LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsMCksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0 LmlkPQooKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2lu dEluZGV4KS5hdHRyKCJ4MiIsdS5zaXo9CmUoKSl9KSxNLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rp b24oKXtOJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksRi5kaXNwYXRjaD0zRD0KTSxGLnNjYXR0ZXI9 M0R0LEYubGVnZW5kPTNEaSxGLmNvbnRyb2xzPTNEcyxGLnhBeGlzPTNEbixGLnlBeGlzPTNEcixG LmRpc3RYPQo9M0RvLEYuZGlzdFk9M0R1LGQzLnJlYmluZChGLHQsImlkIiwiaW50ZXJhY3RpdmUi LCJwb2ludEFjdGl2ZSIsIngiLCJ5Iiwic2g9CmFwZSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUi LCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZT0KIiwic2l6ZURv bWFpbiIsInNpemVSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jv bm9pIiwiY2xpPQpwUmFkaXVzIiwidXNlVm9yb25vaSIpLEYub3B0aW9ucz0zRGUudXRpbHMub3B0 aW9uc0Z1bmMuYmluZChGKSxGLm1hcmdpbj0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGEudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudD0Kb3A6YS50 b3AsYS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6YS5yaWdo dCxhLmJvdHRvbT0KPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmEu Ym90dG9tLGEubGVmdD0zRHR5cGVvZiBlLmxlZnQhPQo9M0QidW5kZWZpbmVkIj9lLmxlZnQ6YS5s ZWZ0LEYpOmF9LEYud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3Ro PyhmPTNEZSxGKTpmfSxGLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSxGKT0KOmx9LEYuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksPQppLmNvbG9yKGMpLG8uY29sb3IoYyks dS5jb2xvcihjKSxGKTpjfSxGLnNob3dEaXN0WD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVt ZW50cy5sZW5ndGg/KG09M0RlLEYpOm19LEYuc2hvd0Rpc3RZPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndD0KaD8oZz0zRGUsRik6Z30sRi5zaG93Q29udHJvbHM9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsPQpGKTpTfSxGLnNob3dMZWdlbmQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsRik6eX0sRi5zaG89 CndYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxGKTpi fSxGLnNob3dZQXhpcz0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9 M0RlLEYpOnd9LEYucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oRT0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksRik6RX0sRi5maXNo ZXk9CmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsRik6eH0s Ri54UGFkZGluZz0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0Rl LEYpOmR9LEYueVBhZGRpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3Ro Pyh2PTNEZSxGKTp2fSxGLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg9Cj8oTj0zRGUsRik6Tn0sRi50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZT0KLEYpOkx9LEYudG9vbHRpcFhDb250ZW50PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0RlLEYpOkN9PQosRi50b29sdGlw WUNvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsRik6 a30sRi5zdGE9CnRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0Rl LEYpOkF9LEYuZGVmYXVsdFN0YXRlPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oTz0zRGUsRik6T30sRi5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVu dHMubGVuZ3RoPyhfPTNEZSxGKTpffSxGLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KEQ9M0RlLEYpOkR9LEZ9LGUubW9kZWxzLnNjYXR0 ZXJQbHVzTGluZUNoYXJ0PTNEZnVuY3Rpb24oKXtmdT0KbmN0aW9uIEIoZSl7cmV0dXJuIGUuZWFj aChmdW5jdGlvbihlKXtmdW5jdGlvbiBWKCl7aWYoUylyZXR1cm4gVS5zZWxlY3QoIi5uPQp2LXBv aW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksITE7VS5zZWxlY3QoIi5u di1wb2ludC1wYXRocyI9Cikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBpPTNE ZDMubW91c2UodGhpcyk7aC5kaXN0b3J0aW9uKEUpLmZvYz0KdXMoaVswXSkscC5kaXN0b3J0aW9u KEUpLmZvY3VzKGlbMV0pLFUuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlLmZpPQps dGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCksZyYmVS5zZWxlY3Qo Ii5udi14Lm52LWF4aXMiKS49CmNhbGwobikseSYmVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5j YWxsKHIpLFUuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLj0KZGF0dW0oZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSxVLnNlbGVjdCgiLm52LWRpc3Ry PQppYnV0aW9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVk fSkpLmNhbGwodSl9dmFyIFQ9M0Q9CmQzLnNlbGVjdCh0aGlzKSxOPTNEdGhpcyxDPTNEKGZ8fHBh cnNlSW50KFQuc3R5bGUoIndpZHRoIikpfHw5NjApLWEubGVmdC1hLj0KcmlnaHQsTT0zRChsfHxw YXJzZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b207Qi51cGRhdGU9 M0RmPQp1bmN0aW9uKCl7VC5jYWxsKEIpfSxCLmNvbnRhaW5lcj0zRHRoaXMsay5kaXNhYmxlZD0z RGUubWFwKGZ1bmN0aW9uKGUpe3JldHU9CnJuISFlLmRpc2FibGVkfSk7aWYoIUwpe3ZhciBqO0w9 M0R7fTtmb3IoaiBpbiBrKWtbal1pbnN0YW5jZW9mIEFycmF5P0xbal09Cj0zRGtbal0uc2xpY2Uo MCk6TFtqXT0zRGtbal19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3Jl dHVybj0KIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEY9M0RULnNlbGVjdEFsbCgiLm52 LW5vRGF0YSIpLmRhdGEoW09dKTtyZXR1PQpybiBGLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0 cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW09CiIpLnN0eWxlKCJ0 ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEYuYXR0cigieCIsYS5sZWZ0K0MvMikuYXR0cigieSIsYS50 b3ArTS8yKT0KLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxCfVQuc2VsZWN0QWxsKCIubnYt bm9EYXRhIikucmVtb3ZlKCksaD0zRHQueFNjPQphbGUoKSxwPTNEdC55U2NhbGUoKSxfPTNEX3x8 aCxEPTNERHx8cDt2YXIgST0zRFQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc2M9CmF0dGVyQ2hh cnQiKS5kYXRhKFtlXSkscT0zREkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 ZDMgbnYtd3JhcD0KIG52LXNjYXR0ZXJDaGFydCBudi1jaGFydC0iK3QuaWQoKSksUj0zRHEuYXBw ZW5kKCJnIiksVT0zREkuc2VsZWN0KCJnIik7Ui5hPQpwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNz IiwibnZkMyBudi1iYWNrZ3JvdW5kIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm89Cm5lIiks Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLFIuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLD0KIm52LXkgbnYtYXhpcyIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1zY2F0dGVyV3JhcCIpLFIuYXBwZW5kKCJnIikuPQphdHRyKCJjbGFzcyIsIm52LXJlZ3Jl c3Npb25MaW5lc1dyYXAiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdFc9CnJh cCIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksUi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcz0KIiwibnYtY29udHJvbHNXcmFwIiksSS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIithLmxlZnQrIiwiK2EudG9wKyIpIiksPQpiJiZVLnNlbGVjdCgiLm52LXku bnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwwKSIpLG0mJihpLnc9 CmlkdGgoQy8yKSxJLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLGEu dG9wIT0zRGkuaGVpZ2h0KCkmJj0KKGEudG9wPTNEaS5oZWlnaHQoKSxNPTNEKGx8fHBhcnNlSW50 KFQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvPQptKSxJLnNlbGVjdCgiLm52 LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDLzIrIiwiKyAtYS50 b3A9CisiKSIpKSx3JiYocy53aWR0aCgxODApLmNvbG9yKFsiIzQ0NCJdKSxVLnNlbGVjdCgiLm52 LWNvbnRyb2xzV3JhcCIpLmRhdHVtKD0KSCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs IisgLWEudG9wKyIpIikuY2FsbChzKSksdC53aWR0aChDKS5oZWlnaHQoPQpNKS5jb2xvcihlLm1h cChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24o dCxuKXs9CnJldHVybiFlW25dLmRpc2FibGVkfSkpLEkuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAi KS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbj0KKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwo dCksSS5zZWxlY3QoIi5udi1yZWdyZXNzaW9uTGluZXNXcmFwIikuYXR0cigiPQpjbGlwLXBhdGgi LCJ1cmwoI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiKSIpO3ZhciB6PTNESS5zZWxlY3QoIi5udi1y ZWdyZXNzaW89Cm5MaW5lc1dyYXAiKS5zZWxlY3RBbGwoIi5udi1yZWdMaW5lcyIpLmRhdGEoZnVu Y3Rpb24oZSl7cmV0dXJuIGV9KTt6LmVudGVyKD0KKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LXJlZ0xpbmVzIik7dmFyIFc9M0R6LnNlbGVjdEFsbCgiLm52LXJlZ0xpbmUiPQopLmRhdGEo ZnVuY3Rpb24oZSl7cmV0dXJuW2VdfSksWD0zRFcuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRy KCJjbGFzcyIsIm49CnYtcmVnTGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCk7Vy5hdHRy KCJ4MSIsaC5yYW5nZSgpWzBdKS5hdHRyKCJ4MiIsaD0KLnJhbmdlKClbMV0pLmF0dHIoInkxIixm dW5jdGlvbihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMF0qZS5zbG9wZStlLmludGVyPQpjZXB0 KX0pLmF0dHIoInkyIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMV0qZS5zbG9w ZStlLmludGVyY2VwdCk9Cn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g YyhlLG4pfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIGUu ZGlzYWJsZWR8fHR5cGVvZiBlLnNsb3BlPTNEPTNEInVuZGVmaW5lZCJ8fHR5cGVvZiBlLmluPQp0 ZXJjZXB0PTNEPTNEInVuZGVmaW5lZCI/MDoxfSksZyYmKG4uc2NhbGUoaCkudGlja3Mobi50aWNr cygpP24udGlja3MoKTpDLzE9CjAwKS50aWNrU2l6ZSgtTSwwKSxVLnNlbGVjdCgiLm52LXgubnYt YXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLD0KIitwLnJhbmdlKClbMF0rIiki KS5jYWxsKG4pKSx5JiYoci5zY2FsZShwKS50aWNrcyhyLnRpY2tzKCk/ci50aWNrcygpOk0vMzYp PQoudGlja1NpemUoLUMsMCksVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxkJiYo by5nZXREYXRhKHQueCgpKS5zY2E9CmxlKGgpLndpZHRoKEMpLmNvbG9yKGUubWFwKGZ1bmN0aW9u KGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdT0KbmN0aW9uKHQsbil7cmV0 dXJuIWVbbl0uZGlzYWJsZWR9KSksUi5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgiZyIp LmF0PQp0cigiY2xhc3MiLCJudi1kaXN0cmlidXRpb25YIiksVS5zZWxlY3QoIi5udi1kaXN0cmli dXRpb25YIikuYXR0cigidHJhbnNmb3I9Cm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsi KSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpcz0KYWJsZWR9KSkuY2Fs bChvKSksdiYmKHUuZ2V0RGF0YSh0LnkoKSkuc2NhbGUocCkud2lkdGgoTSkuY29sb3IoZS5tYXAo ZnVuY3RpPQpvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24o dCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH09CikpLFIuc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblkiKSxVLj0Kc2VsZWN0KCIu bnYtZGlzdHJpYnV0aW9uWSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiP0M6LXUu c2l6ZSgpKSsiPQosMCkiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNh YmxlZH0pKS5jYWxsKHUpKSxkMy5maXNoZXllJiY9CihVLnNlbGVjdCgiLm52LWJhY2tncm91bmQi KS5hdHRyKCJ3aWR0aCIsQykuYXR0cigiaGVpZ2h0IixNKSxVLnNlbGVjdCgiLm52LT0KYmFja2dy b3VuZCIpLm9uKCJtb3VzZW1vdmUiLFYpLFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uKCJj bGljayIsZnVuY3RpPQpvbigpe1M9M0QhU30pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5m cmVlemVGaXNoZXllIixmdW5jdGlvbigpe1M9M0QhU309CikpLHMuZGlzcGF0Y2gub24oImxlZ2Vu ZENsaWNrIixmdW5jdGlvbihlLGkpe2UuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCxFPTNEZT0KLmRp c2FibGVkPzA6Mi41LFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVyLWV2 ZW50cyIsZS5kaXNhYmxlPQpkPyJub25lIjoiYWxsIiksVS5zZWxlY3QoIi5udi1wb2ludC1wYXRo cyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsZS5kaXNhYmw9CmVkPyJhbGwiOiJub25lIiksZS5k aXNhYmxlZD8oaC5kaXN0b3J0aW9uKEUpLmZvY3VzKDApLHAuZGlzdG9ydGlvbihFKS5mb2N1cz0K KDApLFUuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5jYWxsKHQpLFUuc2VsZWN0KCIubnYteC5u di1heGlzIikuY2FsbChuKSxVPQouc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6Uz0z RCExLEIudXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUM9CmhhbmdlIixmdW5jdGlvbihl KXtrPTNEZSxBLnN0YXRlQ2hhbmdlKGspLEIudXBkYXRlKCl9KSx0LmRpc3BhdGNoLm9uKCJlbGVt ZT0KbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZDMuc2VsZWN0KCIubnYtY2hhcnQt Iit0LmlkKCkrIiAubnYtc2VyaWVzPQotIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIrZS5w b2ludEluZGV4KS5hdHRyKCJ5MSIsZS5wb3NbMV0tTSksZDMuc2VsZWM9CnQoIi5udi1jaGFydC0i K3QuaWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2lu dEluZD0KZXgpLmF0dHIoIngyIixlLnBvc1swXStvLnNpemUoKSksZS5wb3M9M0RbZS5wb3NbMF0r YS5sZWZ0LGUucG9zWzFdK2EudG9wXSxBPQoudG9vbHRpcFNob3coZSl9KSxBLm9uKCJ0b29sdGlw U2hvdyIsZnVuY3Rpb24oZSl7eCYmUChlLE4ucGFyZW50Tm9kZSl9KSxBLm89Cm4oImNoYW5nZVN0 YXRlIixmdW5jdGlvbih0KXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9y RWFjaChmdT0KbmN0aW9uKGUsbil7ZS5kaXNhYmxlZD0zRHQuZGlzYWJsZWRbbl19KSxrLmRpc2Fi bGVkPTNEdC5kaXNhYmxlZCksQi51cGRhdGUoPQopfSksXz0zRGguY29weSgpLEQ9M0RwLmNvcHko KX0pLEJ9dmFyIHQ9M0RlLm1vZGVscy5zY2F0dGVyKCksbj0zRGUubW9kZWxzLmE9CnhpcygpLHI9 M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdl bmQoKSxvPTNEZT0KLm1vZGVscy5kaXN0cmlidXRpb24oKSx1PTNEZS5tb2RlbHMuZGlzdHJpYnV0 aW9uKCksYT0zRHt0b3A6MzAscmlnaHQ6MjAsYm90PQp0b206NTAsbGVmdDo3NX0sZj0zRG51bGws bD0zRG51bGwsYz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksaD0zRGQzLmZpc2hleWU9Cj9kMy5m aXNoZXllLnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlzdG9ydGlvbigwKTp0LnhTY2FsZSgpLHA9 M0RkMy5maXNoZXllPz0KZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRp b24oMCk6dC55U2NhbGUoKSxkPTNEITEsdj0zRCExLG09Cj0zRCEwLGc9M0QhMCx5PTNEITAsYj0z RCExLHc9M0QhIWQzLmZpc2hleWUsRT0zRDAsUz0zRCExLHg9M0QhMCxUPTNEZnVuY3Rpbz0Kbihl LHQsbil7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4ifSxOPTNEZnVuY3Rpb24oZSx0LG4p e3JldHVybiI8c3Ryb25nPQo+IituKyI8L3N0cm9uZz4ifSxDPTNEZnVuY3Rpb24oZSx0LG4scil7 cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IityKyI8L3A9Cj4ifSxrPTNEe30sTD0zRG51bGws QT0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZz0K ZSIsImNoYW5nZVN0YXRlIiksTz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLE09M0QwO3QueFNjYWxl KGgpLnlTY2FsZShwKSxuLm9yPQppZW50KCJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5vcmll bnQoYj8icmlnaHQiOiJsZWZ0IikudGlja1BhZGRpbmcoMTApLG89Ci5heGlzKCJ4IiksdS5heGlz KCJ5Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIF8sRCxQPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0z RD0KaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8 MCksZj0zRGkucG9zWzBdKyhzLm9mPQpmc2V0TGVmdHx8MCksbD0zRHAucmFuZ2UoKVswXSthLnRv cCsocy5vZmZzZXRUb3B8fDApLGM9M0RoLnJhbmdlKClbMF0rYS5sZWY9CnQrKHMub2Zmc2V0TGVm dHx8MCksZD0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Zvcm1hdCgpKHQu eCgpKD0KaS5wb2ludCxpLnBvaW50SW5kZXgpKSxtPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5w b2ludCxpLnBvaW50SW5kZXgpKTtUIT0KPTNEbnVsbCYmZS50b29sdGlwLnNob3coW2YsbF0sVChp LnNlcmllcy5rZXksdixtLGksQiksIm4iLDEscywieC1udnRvb2x0aXAiPQopLE4hPTNEbnVsbCYm ZS50b29sdGlwLnNob3coW2MsZF0sTihpLnNlcmllcy5rZXksdixtLGksQiksImUiLDEscywieS1u dnRvb2w9CnRpcCIpLEMhPTNEbnVsbCYmZS50b29sdGlwLnNob3coW28sdV0sQyhpLnNlcmllcy5r ZXksdixtLGkucG9pbnQudG9vbHRpcCxpLD0KQiksaS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX0s SD0zRFt7a2V5OiJNYWduaWZ5IixkaXNhYmxlZDohMH1dO3JldHVybiB0LmRpPQpzcGF0Y2gub24o ImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtBLnRvb2x0aXBIaWRlKGUpLGQz LnNlbGVjdCg9CiIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRl eCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleD0KKS5hdHRyKCJ5MSIsMCksZDMuc2VsZWN0KCIu bnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiPQogLm52LWRp c3R5LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ4MiIsdS5zaXplKCkpfSksQS5vbigidG9vbHRpcEhp ZGUiLGZ1bmN0aW89Cm4oKXt4JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQi5kaXNwYXRjaD0zREEs Qi5zY2F0dGVyPTNEdCxCLmxlZ2VuZD0zRGksQi5jbz0KbnRyb2xzPTNEcyxCLnhBeGlzPTNEbixC LnlBeGlzPTNEcixCLmRpc3RYPTNEbyxCLmRpc3RZPTNEdSxkMy5yZWJpbmQoQix0LCJpPQpkIiwi aW50ZXJhY3RpdmUiLCJwb2ludEFjdGl2ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxl IiwieVNjYWxlIiwielM9CmNhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5n ZSIsInNpemVEb21haW4iLCJzaXplUmFuZ2UiLCJmb3JjZT0KWCIsImZvcmNlWSIsImZvcmNlU2l6 ZSIsImNsaXBWb3Jvbm9pIiwiY2xpcFJhZGl1cyIsInVzZVZvcm9ub2kiKSxCLm9wdGlvbnM9Cj0z RGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChCKSxCLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZz0KdGg/KGEudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UudG9wOmEudG9wLGEucmlnaHQ9M0R0eXBlb2YgZS5yaWdoPQp0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6YS5yaWdodCxhLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj89 CmUuYm90dG9tOmEuYm90dG9tLGEubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ ZS5sZWZ0OmEubGVmdCxCKTphfT0KLEIud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oZj0zRGUsQik6Zn0sQi5oZWlnaHQ9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhsPTNEZSxCKTpsfSxCLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJu IGE9CnJndW1lbnRzLmxlbmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxv LmNvbG9yKGMpLHUuY29sb3IoYyksQj0KKTpjfSxCLnNob3dEaXN0WD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxCKTpkfSxCLnNob3dEPQppc3RZPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuc2hvd0NvbnRyb2xz PTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsQik6d30sQi5z aG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUs Qik6bX0sQi5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3Ro PyhnPTNEZSxCKTpnfSxCLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyg9Cnk9M0RlLEIpOnl9LEIucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLD0Kci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0Iiks Qik6Yn0sQi5maXNoZXllPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8o RT0zRGUsQik6RX0sQi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh4PTNEZSw9CkIpOnh9LEIudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oQz0zRGUsQik6Q30sQj0KLnRvb2x0aXBYQ29udGVudD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxCKTpUfSxCLnRvb2x0PQppcFlD b250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEIpOk59 LEIuc3RhdGU9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPTNEZSxC KTprfSxCLmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KEw9M0RlLEIpOkx9LEIubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpz Lmxlbmd0aD8oTz0zRGUsQik6T30sQi50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyhNPTNEZSxCKTpNfSxCfSxlLm1vZGVscy5zcGFya2xp bmU9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSl7cmV0dXJuID0KZS5lYWNoKGZ1bmN0aW9uKGUp e3ZhciBpPTNEbi10LmxlZnQtdC5yaWdodCxkPTNEci10LnRvcC10LmJvdHRvbSx2PTNEZDMuc2Vs PQplY3QodGhpcyk7cy5kb21haW4obHx8ZDMuZXh0ZW50KGUsdSkpLnJhbmdlKGh8fFswLGldKSxv LmRvbWFpbihjfHxkMy5leHRlbnQ9CihlLGEpKS5yYW5nZShwfHxbZCwwXSk7dmFyIG09M0R2LnNl bGVjdEFsbCgiZy5udi13cmFwLm52LXNwYXJrbGluZSIpLmRhdGEoWz0KZV0pLGc9M0RtLmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3BhcmtsaW5lIiks Yj0KPTNEZy5hcHBlbmQoImciKSx3PTNEbS5zZWxlY3QoImciKTttLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgiK3QubGVmdCsiPQosIit0LnRvcCsiKSIpO3ZhciBFPTNEbS5zZWxlY3RBbGwo InBhdGgiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pO0UuZW49CnRlcigpLmFwcGVuZCgi cGF0aCIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXty ZXR1cj0KbiBlLmNvbG9yfHxmKGUsdCl9KS5hdHRyKCJkIixkMy5zdmcubGluZSgpLngoZnVuY3Rp b24oZSx0KXtyZXR1cm4gcyh1KGUsdCkpPQp9KS55KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShl LHQpKX0pKTt2YXIgUz0zRG0uc2VsZWN0QWxsKCJjaXJjbGUubnYtcG9pbnQ9CiIpLmRhdGEoZnVu Y3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpZih0IT0zRC0xKXt2YXIgbj0zRGVbdF07cmV0dXJuIG4u cG9pbnRJbj0KZGV4PTNEdCxufXJldHVybiBudWxsfXZhciB0PTNEZS5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gYShlLHQpfSkscj0zRG4odC5sPQphc3RJbmRleE9mKG8uZG9tYWluKClbMV0pKSxp PTNEbih0LmluZGV4T2Yoby5kb21haW4oKVswXSkpLHM9M0RuKHQubGVuZ3RoLTE9Cik7cmV0dXJu W2kscixzXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEbnVsbH0pfSk7Uy5lbnRlcigp LmFwcGVuZCgiYz0KaXJjbGUiKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImN4IixmdW5jdGlv bihlLHQpe3JldHVybiBzKHUoZSxlLnBvaW50SW5kPQpleCkpfSkuYXR0cigiY3kiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIG8oYShlLGUucG9pbnRJbmRleCkpfSkuYXR0cigiciIsMikuYXQ9CnRyKCJj bGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLGUucG9pbnRJbmRleCk9M0Q9M0RzLmRvbWFp bigpWzFdPyJudi1wbz0KaW50IG52LWN1cnJlbnRWYWx1ZSI6YShlLGUucG9pbnRJbmRleCk9M0Q9 M0RvLmRvbWFpbigpWzBdPyJudi1wb2ludCBudi1taW5WPQphbHVlIjoibnYtcG9pbnQgbnYtbWF4 VmFsdWUifSl9KSxkfXZhciB0PTNEe3RvcDoyLHJpZ2h0OjAsYm90dG9tOjIsbGVmdDowfSw9Cm49 M0Q0MDAscj0zRDMyLGk9M0QhMCxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxp bmVhcigpLHU9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1 cm4gZS55fSxmPTNEZS51dGlscy5nZXRDb2xvcihbIiMwMDAiPQpdKSxsLGMsaCxwO3JldHVybiBk Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoZCksZC5tYXJnaW49M0RmdW5jdGk9 Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0Qi dW5kZWZpbmVkIj9lLnRvcDp0Lj0KdG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5k ZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlPQpvZiBlLmJvdHRvbSE9M0Qi dW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1 bmQ9CmVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxkKTp0fSxkLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kbj0zRGUsZCk6bn0sZC5oZWlnaHQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsZCk6cn0sZC54PQo9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGQzLmZ1bmN0b3IoZSksZCk6dX0sZC55PTNE ZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGQzLmZ1bmN0b3IoZSks ZCk6YX0sZC54U2NhbGU9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhz PTNEZSxkKTpzfSxkLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5n dGg/KG89M0RlLGQpOm99LGQueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyg9Cmw9M0RlLGQpOmx9LGQueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhjPTNEZSxkKTpjfSxkLj0KeFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLGQpOmh9LGQueVJhbmdlPTNEZnVuY3RpPQpvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsZCk6cH0sZC5hbmltYXRlPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oaT0zRGUsZCk6aX0sZC5jb2xvcj0zRGZ1bmN0 aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGY9M0RlLnV0aWxzLmdldENvbG9yKHQp LGQpOmZ9LGR9LGUubW9kZWxzLnNwYXJrbGluZVBsdXM9M0RmdW5jdGlvbigpe2Z1bmN0PQppb24g dihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIE8oKXtpZihhKXJldHVybjt2 YXIgZT0zREMuc2VsZWM9CnRBbGwoIi5udi1ob3ZlclZhbHVlIikuZGF0YSh1KSxyPTNEZS5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtaD0Kb3ZlclZhbHVlIikuc3R5bGUoInN0 cm9rZS1vcGFjaXR5IiwwKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKTtlLmV4aXQoKS5zdHlsPQpl KCJzdHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCksZS5h dHRyKCJ0cmFuc2Zvcm0iLGY9CnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModC54KCko Y1tlXSxlKSkrIiwwKSJ9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdD0KeSIsMSkuc3R5bGUoImZpbGwt b3BhY2l0eSIsMSk7aWYoIXUubGVuZ3RoKXJldHVybjtyLmFwcGVuZCgibGluZSIpLmF0dHIoIngx PQoiLDApLmF0dHIoInkxIiwtbi50b3ApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsYiksci5hcHBl bmQoInRleHQiKS5hdHRyKCJjbGE9CnNzIiwibnYteFZhbHVlIikuYXR0cigieCIsLTYpLmF0dHIo InkiLC1uLnRvcCkuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5hdD0KdHIoImR5IiwiLjllbSIp LEMuc2VsZWN0KCIubnYtaG92ZXJWYWx1ZSAubnYteFZhbHVlIikudGV4dChmKHQueCgpKGNbdVsw XV0sPQp1WzBdKSkpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi15VmFsdWUiKS5h dHRyKCJ4Iiw2KS5hdHRyKCJ5Iiwtbi49CnRvcCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIp LmF0dHIoImR5IiwiLjllbSIpLEMuc2VsZWN0KCIubnYtaG92ZXJWYWx1ZT0KIC5udi15VmFsdWUi KS50ZXh0KGwodC55KCkoY1t1WzBdXSx1WzBdKSkpfWZ1bmN0aW9uIE0oKXtmdW5jdGlvbiByKGUs bil7dmFyPQogcj0zRE1hdGguYWJzKHQueCgpKGVbMF0sMCktbiksaT0zRDA7Zm9yKHZhciBzPTNE MDtzPGUubGVuZ3RoO3MrKylNYXRoLmFicyg9CnQueCgpKGVbc10scyktbik8ciYmKHI9M0RNYXRo LmFicyh0LngoKShlW3NdLHMpLW4pLGk9M0RzKTtyZXR1cm4gaX1pZihhKXJldD0KdXJuO3ZhciBl PTNEZDMubW91c2UodGhpcylbMF0tbi5sZWZ0O3U9M0RbcihjLE1hdGgucm91bmQocy5pbnZlcnQo ZSkpKV0sTygpPQp9dmFyIG09M0RkMy5zZWxlY3QodGhpcyksZz0zRChyfHxwYXJzZUludChtLnN0 eWxlKCJ3aWR0aCIpKXx8OTYwKS1uLmxlZnQtbi49CnJpZ2h0LGI9M0QoaXx8cGFyc2VJbnQobS5z dHlsZSgiaGVpZ2h0IikpfHw0MDApLW4udG9wLW4uYm90dG9tO3YudXBkYXRlPTNEZj0KdW5jdGlv bigpe3YoZSl9LHYuY29udGFpbmVyPTNEdGhpcztpZighY3x8IWMubGVuZ3RoKXt2YXIgdz0zRG0u c2VsZWN0QWxsKCIuPQpudi1ub0RhdGEiKS5kYXRhKFtkXSk7cmV0dXJuIHcuZW50ZXIoKS5hcHBl bmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnY9Ci1ub0RhdGEiKS5hdHRyKCJkeSIsIi0u N2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJ4IixuLmxlZj0KdCtn LzIpLmF0dHIoInkiLG4udG9wK2IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHZ9bS5z ZWxlY3RBbGwoIi5udi1uPQpvRGF0YSIpLnJlbW92ZSgpO3ZhciBFPTNEdC55KCkoY1tjLmxlbmd0 aC0xXSxjLmxlbmd0aC0xKTtzPTNEdC54U2NhbGUoKSxvPQo9M0R0LnlTY2FsZSgpO3ZhciBTPTNE bS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFya2xpbmVwbHVzIikuZGF0YShbY10pLFQ9Cj0z RFMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zcGFy a2xpbmVwbHVzIiksTj0zRD0KVC5hcHBlbmQoImciKSxDPTNEUy5zZWxlY3QoImciKTtOLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc3BhcmtsaW5lV3JhPQpwIiksTi5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXZhbHVlV3JhcCIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCI9 Cm52LWhvdmVyQXJlYSIpLFMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5sZWZ0KyIs IituLnRvcCsiKSIpO3ZhciBrPQo9M0RDLnNlbGVjdCgiLm52LXNwYXJrbGluZVdyYXAiKTt0Lndp ZHRoKGcpLmhlaWdodChiKSxrLmNhbGwodCk7dmFyIEw9M0RDLnM9CmVsZWN0KCIubnYtdmFsdWVX cmFwIiksQT0zREwuc2VsZWN0QWxsKCIubnYtY3VycmVudFZhbHVlIikuZGF0YShbRV0pO0EuZW50 ZT0KcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtY3VycmVudFZhbHVlIikuYXR0 cigiZHgiLHA/LTg6OCkuYXR0cigiPQpkeSIsIi45ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLHA/ ImVuZCI6InN0YXJ0IiksQS5hdHRyKCJ4IixnKyhwP24ucmlnaHQ6MCk9CikuYXR0cigieSIsaD9m dW5jdGlvbihlKXtyZXR1cm4gbyhlKX06MCkuc3R5bGUoImZpbGwiLHQuY29sb3IoKShjW2MubGVu Z3RoLT0KMV0sYy5sZW5ndGgtMSkpLnRleHQobChFKSksTi5zZWxlY3QoIi5udi1ob3ZlckFyZWEi KS5hcHBlbmQoInJlY3QiKS5vbigibW91PQpzZW1vdmUiLE0pLm9uKCJjbGljayIsZnVuY3Rpb24o KXthPTNEIWF9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dT0zRFtdLE89CigpfSksQy5zZWxl Y3QoIi5udi1ob3ZlckFyZWEgcmVjdCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0 dXJuInRyYT0KbnNsYXRlKCIrIC1uLmxlZnQrIiwiKyAtbi50b3ArIikifSkuYXR0cigid2lkdGgi LGcrbi5sZWZ0K24ucmlnaHQpLmF0dHIoImhlPQppZ2h0IixiK24udG9wKX0pLHZ9dmFyIHQ9M0Rl Lm1vZGVscy5zcGFya2xpbmUoKSxuPTNEe3RvcDoxNSxyaWdodDoxMDAsYm90dG89Cm06MTAsbGVm dDo1MH0scj0zRG51bGwsaT0zRG51bGwscyxvLHU9M0RbXSxhPTNEITEsZj0zRGQzLmZvcm1hdCgi LHIiKSxsPTNEZD0KMy5mb3JtYXQoIiwuMmYiKSxjPTNEITAsaD0zRCEwLHA9M0QhMSxkPTNEIk5v IERhdGEgQXZhaWxhYmxlLiI7cmV0dXJuIHYuc3BhPQpya2xpbmU9M0R0LGQzLnJlYmluZCh2LHQs IngiLCJ5IiwieFNjYWxlIiwieVNjYWxlIiwiY29sb3IiKSx2Lm9wdGlvbnM9M0RlLnU9CnRpbHMu b3B0aW9uc0Z1bmMuYmluZCh2KSx2Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhuLj0KdG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm4u dG9wLG4ucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QiPQp1bmRlZmluZWQiP2UucmlnaHQ6bi5y aWdodCxuLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHQ9Cm9t Om4uYm90dG9tLG4ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om4u bGVmdCx2KTpufSx2LndpZD0KdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocj0zRGUsdik6cn0sdi5oZWlnaHQ9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhpPTNEZSx2KTppfSx2LnhUaWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9 CnJndW1lbnRzLmxlbmd0aD8oZj0zRGUsdik6Zn0sdi55VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGw9M0RlLHYpOmx9LHYuc2hvd1ZhbHVlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlPQosdik6Y30sdi5hbGlnblZh bHVlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHYpOmh9LHYu cmk9CmdodEFsaWduVmFsdWU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cD0zRGUsdik6cH0sdi5ub0RhdGE9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhkPTNEZSx2KTpkfSx2fSxlLm1vZGVscy5zdGFja2VkQXJlYT0KPTNEZnVuY3Rpb24oKXtm dW5jdGlvbiBnKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9M0RuLXQubGVmdC10 LnJpPQpnaHQsYj0zRHItdC50b3AtdC5ib3R0b20sdz0zRGQzLnNlbGVjdCh0aGlzKTtwPTNEdi54 U2NhbGUoKSxkPTNEdi55U2NhbGUoKTs9CnZhciBFPTNEZTtlLmZvckVhY2goZnVuY3Rpb24oZSx0 KXtlLnNlcmllc0luZGV4PTNEdCxlLnZhbHVlcz0zRGUudmFsdWVzLm1hcD0KKGZ1bmN0aW9uKGUs bil7cmV0dXJuIGUuaW5kZXg9M0RuLGUuc2VyaWVzSW5kZXg9M0R0LGV9KX0pO3ZhciBTPTNEZS5m aWx0ZXIoPQpmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pO2U9M0RkMy5sYXlvdXQuc3Rh Y2soKS5vcmRlcihsKS5vZmZzZXQoZikudmE9Cmx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFs dWVzfSkueChvKS55KHUpLm91dChmdW5jdGlvbihlLHQsbil7dmFyIHI9M0R1KD0KZSk9M0Q9M0Q9 M0QwPzA6bjtlLmRpc3BsYXk9M0R7eTpyLHkwOnR9fSkoUyk7dmFyIFQ9M0R3LnNlbGVjdEFsbCgi Zy5udi13cmFwPQoubnYtc3RhY2tlZGFyZWEiKS5kYXRhKFtlXSksTj0zRFQuZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnY9Ci13cmFwIG52LXN0YWNrZWRhcmVhIiksQz0z RE4uYXBwZW5kKCJkZWZzIiksaz0zRE4uYXBwZW5kKCJnIiksTD0zRFQuc2VsZWN0KD0KImciKTtr LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXJlYVdyYXAiKSxrLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwiPQpudi1zY2F0dGVyV3JhcCIpLFQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLHYud2k9CmR0aChhKS5oZWlnaHQoYikueChvKS55 KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3BsYXkueStlLmRpc3BsYXkueTB9KS5mb3JjZT0KWShb MF0pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmll c0luZGV4KX0pKTt2YXIgPQpBPTNETC5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVtKGUp O0EuY2FsbCh2KSxDLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHQ9CnIoImlkIiwibnYtZWRnZS1jbGlw LSIrcykuYXBwZW5kKCJyZWN0IiksVC5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitzKyIgcmVjdD0K IikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsYiksTC5hdHRyKCJjbGlwLXBhdGgiLGg/ InVybCgjbnYtZWRnZS1jbGlwPQotIitzKyIpIjoiIik7dmFyIE89M0RkMy5zdmcuYXJlYSgpLngo ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChvKGUsdCkpfSkueTAoZnU9Cm5jdGlvbihlKXtyZXR1cm4g ZChlLmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5LnkrZS5k aT0Kc3BsYXkueTApfSkuaW50ZXJwb2xhdGUoYyksTT0zRGQzLnN2Zy5hcmVhKCkueChmdW5jdGlv bihlLHQpe3JldHVybiBwKG8oZSx0PQopKX0pLnkwKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlz cGxheS55MCl9KS55MShmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3A9CmxheS55MCl9KSxfPTNE TC5zZWxlY3QoIi5udi1hcmVhV3JhcCIpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGF0YShm dW5jdD0KaW9uKGUpe3JldHVybiBlfSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNs YXNzIixmdW5jdGlvbihlLHQpe3JldHVyPQpuIm52LWFyZWEgbnYtYXJlYS0iK3R9KS5hdHRyKCJk IixmdW5jdGlvbihlLHQpe3JldHVybiBNKGUudmFsdWVzLGUuc2VyaWVzSW49CmRleCl9KS5vbigi bW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIs ITApLG0uYT0KcmVhTW91c2VvdmVyKHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50 LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpPQplc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9u KCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3M9CmVkKCJob3Zl ciIsITEpLG0uYXJlYU1vdXNlb3V0KHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50 LnBhZ2VYLGQzLj0KZXZlbnQucGFnZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9u KCJjbGljayIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlPQpjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIs ITEpLG0uYXJlYUNsaWNrKHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW49CnQucGFn ZVgsZDMuZXZlbnQucGFnZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLF8uZXhpdCgp LnJlbW92ZSgpLF8ucz0KdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8 aShlLGUuc2VyaWVzSW5kZXgpfSkuc3R5bGUoInN0cm9rPQplIixmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxpKGUsZS5zZXJpZXNJbmRleCl9KSxfLmF0dHIoImQiLGZ1bmN0aW9uKGU9Cix0 KXtyZXR1cm4gTyhlLnZhbHVlcyx0KX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIu YXJlYSIsZnVuY3Rpb24oZT0KKXtMLnNlbGVjdCgiLm52LWNoYXJ0LSIrcysiIC5udi1hcmVhLSIr ZS5zZXJpZXNJbmRleCkuY2xhc3NlZCgiaG92ZXIiLCEwKX0pPQosdi5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LmFyZWEiLGZ1bmN0aW9uKGUpe0wuc2VsZWN0KCIubnYtY2hhcnQtIitzKyI9 CiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxnLmQzX3N0 YWNrZWRPZmZzZXRfc3RhY2tQZT0KcmNlbnQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRGUubGVuZ3Ro LG49M0RlWzBdLmxlbmd0aCxyPTNEMS90LGkscyxvLGE9M0RbXTtmPQpvcihzPTNEMDtzPG47Kytz KXtmb3IoaT0zRDAsbz0zRDA7aTxFLmxlbmd0aDtpKyspbys9M0R1KEVbaV0udmFsdWVzW3NdKTtp Zig9Cm8pZm9yKGk9M0QwO2k8dDtpKyspZVtpXVtzXVsxXS89M0RvO2Vsc2UgZm9yKGk9M0QwO2k8 dDtpKyspZVtpXVtzXVsxXT0zRHJ9Zj0Kb3Iocz0zRDA7czxuOysrcylhW3NdPTNEMDtyZXR1cm4g YX19KSxnfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmPQp0OjB9LG49M0Q5NjAs cj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoLnJh bmRvbSg9CikqMWU1KSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sdT0zRGZ1bmN0aW9uKGUp e3JldHVybiBlLnl9LGE9M0Qic3RhY2siLD0KZj0zRCJ6ZXJvIixsPTNEImRlZmF1bHQiLGM9M0Qi bGluZWFyIixoPTNEITEscCxkLHY9M0RlLm1vZGVscy5zY2F0dGVyKCksbT0KPTNEZDMuZGlzcGF0 Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJhcmVhQ2xpY2siLCJhcmVhTW91c2VvdmVy IiwiYXJlPQphTW91c2VvdXQiKTtyZXR1cm4gdi5zaXplKDIuMikuc2l6ZURvbWFpbihbMi4yLDIu Ml0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnQ9CkNsaWNrLmFyZWEiLGZ1bmN0aW9uKGUpe20uYXJl YUNsaWNrKGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50bz0Kb2x0aXAiLGZ1 bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sbS50b29s dGlwU2hvdyhlPQopfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe20udG9vbHRpcEhpZGUoZSl9KSw9CmcuZGlzcGF0Y2g9M0RtLGcuc2NhdHRlcj0z RHYsZDMucmViaW5kKGcsdiwiaW50ZXJhY3RpdmUiLCJzaXplIiwieFNjYWxlIiwieT0KU2NhbGUi LCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21h aW4iLCJmb3JjZVgiPQosImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9y b25vaSIsImNsaXBSYWRpdXMiLCJoaWdobGlnaHRQb2k9Cm50IiwiY2xlYXJIaWdobGlnaHRzIiks Zy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGcpLGcueD0zRGZ1bmN0aT0Kb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RkMy5mdW5jdG9yKGUpLGcpOm99LGcueT0z RGZ1bmN0aW9uKGUpe3JlPQp0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9yKGUp LGcpOnV9LGcubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8o dC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0K PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9t PTNEdHlwZW9mIGUuYm90dG9tPQohPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5s ZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmw9CmVmdDp0LmxlZnQsZyk6dH0s Zy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxnKTpu fT0KLGcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0Rl LGcpOnJ9LGcuY2xpcEVkZ2U9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZSxnKTpofSxnLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXI9Cm4gYXJndW1lbnRzLmxl bmd0aD8oaT0zRGUudXRpbHMuZ2V0Q29sb3IodCksZyk6aX0sZy5vZmZzZXQ9M0RmdW5jdGlvbihl KXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxnKTpmfSxnLm9yZGVyPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8obD0zRGUsZyk6bH0sZy5zdHlsZT0zRGZ1 bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhO2E9M0Q9CmU7c3dpdGNoKGEp e2Nhc2Uic3RhY2siOmcub2Zmc2V0KCJ6ZXJvIiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nh c2Uic3RyZT0KYW0iOmcub2Zmc2V0KCJ3aWdnbGUiKSxnLm9yZGVyKCJpbnNpZGUtb3V0Iik7YnJl YWs7Y2FzZSJzdHJlYW0tY2VudGVyIjpnLm9mPQpmc2V0KCJzaWxob3VldHRlIiksZy5vcmRlcigi aW5zaWRlLW91dCIpO2JyZWFrO2Nhc2UiZXhwYW5kIjpnLm9mZnNldCgiZXhwYW49CmQiKSxnLm9y ZGVyKCJkZWZhdWx0Iik7YnJlYWs7Y2FzZSJzdGFja19wZXJjZW50IjpnLm9mZnNldChnLmQzX3N0 YWNrZWRPZmZzZT0KdF9zdGFja1BlcmNlbnQpLGcub3JkZXIoImRlZmF1bHQiKX1yZXR1cm4gZ30s Zy5pbnRlcnBvbGF0ZT0zRGZ1bmN0aW9uKGUpe3JlPQp0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9 M0RlLGcpOmN9LGd9LGUubW9kZWxzLnN0YWNrZWRBcmVhQ2hhcnQ9M0RmdW5jdGlvbig9Cil7ZnVu Y3Rpb24gTSh5KXtyZXR1cm4geS5lYWNoKGZ1bmN0aW9uKHkpe3ZhciBBPTNEZDMuc2VsZWN0KHRo aXMpLF89M0R0aGlzLD0KRD0zRChhfHxwYXJzZUludChBLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11 LmxlZnQtdS5yaWdodCxQPTNEKGZ8fHBhcnNlSW50KEEuPQpzdHlsZSgiaGVpZ2h0IikpfHw0MDAp LXUudG9wLXUuYm90dG9tO00udXBkYXRlPTNEZnVuY3Rpb24oKXtBLmNhbGwoTSl9LE0uY289Cm50 YWluZXI9M0R0aGlzLFMuZGlzYWJsZWQ9M0R5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlz YWJsZWR9KTtpZigheCl7dj0KYXIgSDt4PTNEe307Zm9yKEggaW4gUylTW0hdaW5zdGFuY2VvZiBB cnJheT94W0hdPTNEU1tIXS5zbGljZSgwKTp4W0hdPTNEU1tIPQpdfWlmKCF5fHwheS5sZW5ndGh8 fCF5LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXs9 CnZhciBCPTNEQS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEIuZW50 ZXIoKS5hcHBlbmQoInRleHQiKT0KLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRy KCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkPQpkbGUiKSxCLmF0dHIoIngi LHUubGVmdCtELzIpLmF0dHIoInkiLHUudG9wK1AvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4g ZX09CiksTX1BLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGI9M0R0LnhTY2FsZSgp LHc9M0R0LnlTY2FsZSgpO3ZhciBqPQo9M0RBLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXN0YWNr ZWRBcmVhQ2hhcnQiKS5kYXRhKFt5XSksRj0zRGouZW50ZXIoKS5hcHA9CmVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnZkMyBudi13cmFwIG52LXN0YWNrZWRBcmVhQ2hhcnQiKS5hcHBlbmQoImciKSxJ PTNEaj0KLnNlbGVjdCgiZyIpO0YuYXBwZW5kKCJyZWN0Iikuc3R5bGUoIm9wYWNpdHkiLDApLEYu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiPQosIm52LXggbnYtYXhpcyIpLEYuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxGLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3Mi LCJudi1zdGFja2VkV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRX cmFwIiksRj0KLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksRi5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52PQotaW50ZXJhY3RpdmUiKSxJLnNlbGVjdCgicmVj dCIpLmF0dHIoIndpZHRoIixEKS5hdHRyKCJoZWlnaHQiLFApO2lmKGgpe3ZhciA9CnE9M0RjP0Qt QzpEO2kud2lkdGgocSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oeSkuY2FsbChp KSx1LnRvcCE9Cj0zRGkuaGVpZ2h0KCkmJih1LnRvcD0zRGkuaGVpZ2h0KCksUD0zRChmfHxwYXJz ZUludChBLnN0eWxlKCJoZWlnaHQiKSl8fDQwMD0KKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3Qo Ii5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrPQooRC1xKSsi LCIrIC11LnRvcCsiKSIpfWlmKGMpe3ZhciBSPTNEW3trZXk6TC5zdGFja2VkfHwiU3RhY2tlZCIs bWV0YUtleToiU3Q9CmFja2VkIixkaXNhYmxlZDp0LnN0eWxlKCkhPTNEInN0YWNrIixzdHlsZToi c3RhY2sifSx7a2V5Okwuc3RyZWFtfHwiU3RyZWFtIj0KLG1ldGFLZXk6IlN0cmVhbSIsZGlzYWJs ZWQ6dC5zdHlsZSgpIT0zRCJzdHJlYW0iLHN0eWxlOiJzdHJlYW0ifSx7a2V5OkwuZXhwPQphbmRl ZHx8IkV4cGFuZGVkIixtZXRhS2V5OiJFeHBhbmRlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJl eHBhbmQiLHN0eWxlOiI9CmV4cGFuZCJ9LHtrZXk6TC5zdGFja19wZXJjZW50fHwiU3RhY2sgJSIs bWV0YUtleToiU3RhY2tfUGVyY2VudCIsZGlzYWJsZWQ6dD0KLnN0eWxlKCkhPTNEInN0YWNrX3Bl cmNlbnQiLHN0eWxlOiJzdGFja19wZXJjZW50In1dO0M9M0RrLmxlbmd0aC8zKjI2MCxSPTNEPQpS LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gay5pbmRleE9mKGUubWV0YUtleSkhPTNEPTNELTF9 KSxzLndpZHRoKEMpLmNvbG89CnIoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksSS5zZWxlY3QoIi5u di1jb250cm9sc1dyYXAiKS5kYXR1bShSKS5jYWxsKHMpLHUudD0Kb3AhPTNETWF0aC5tYXgocy5o ZWlnaHQoKSxpLmhlaWdodCgpKSYmKHUudG9wPTNETWF0aC5tYXgocy5oZWlnaHQoKSxpLmhlaWdo PQp0KCkpLFA9M0QoZnx8cGFyc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUu Ym90dG9tKSxJLnNlbGVjdCgiLm49CnYtY29udHJvbHNXcmFwIikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKDAsIisgLXUudG9wKyIpIil9ai5hdHRyKCJ0cmFucz0KZm9ybSIsInRyYW5zbGF0 ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSx2JiZJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0 dHIoPQoidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRCsiLDApIiksbSYmKG8ud2lkdGgoRCkuaGVp Z2h0KFApLm1hcmdpbih7bGVmdDp1Lmw9CmVmdCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoQSku eFNjYWxlKGIpLGouc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWxsKD0KbykpLHQud2lkdGgo RCkuaGVpZ2h0KFApO3ZhciBVPTNESS5zZWxlY3QoIi5udi1zdGFja2VkV3JhcCIpLmRhdHVtKHkp O1UuY2FsPQpsKHQpLHAmJihuLnNjYWxlKGIpLnRpY2tzKEQvMTAwKS50aWNrU2l6ZSgtUCwwKSxJ LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmE9CnR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs IitQKyIpIiksSS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pKSxkJj0KJihyLnNjYWxl KHcpLnRpY2tzKHQub2Zmc2V0KCk9M0Q9M0Qid2lnZ2xlIj8wOlAvMzYpLnRpY2tTaXplKC1ELDAp LnNldFRpY2tGPQpvcm1hdCh0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kInx8dC5zdHlsZSgpPTNEPTNE InN0YWNrX3BlcmNlbnQiP2QzLmZvcm1hdCgiJSI9Cik6RSksSS5zZWxlY3QoIi5udi15Lm52LWF4 aXMiKS5jYWxsKHIpKSx0LmRpc3BhdGNoLm9uKCJhcmVhQ2xpY2sudG9nZ2xlIixmdT0KbmN0aW9u KGUpe3kuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RoPTNEPTNE PTNEMT95LmZvckVhPQpjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPTNEITF9KTp5LmZvckVhY2go ZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNEbiE9M0Q9CmUuc2VyaWVzSW5kZXh9KSxTLmRpc2Fi bGVkPTNEeS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksTi5zdGF0ZT0KQ2hh bmdlKFMpLE0udXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24o ZSl7Uy5kaXNhYmxlZD0KPTNEZS5kaXNhYmxlZCxOLnN0YXRlQ2hhbmdlKFMpLE0udXBkYXRlKCl9 KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuPQpjdGlvbihlLG4pe2lmKCFlLmRpc2Fi bGVkKXJldHVybjtSPTNEUi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9M0Q9CiEw LGV9KSxlLmRpc2FibGVkPTNEITEsdC5zdHlsZShlLnN0eWxlKSxTLnN0eWxlPTNEdC5zdHlsZSgp LE4uc3RhdGVDaGFuZ2UoUz0KKSxNLnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhckhpZ2hsaWdoPQp0cygpO3ZhciBzLGEsZixjPTNE W107eS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWUuZGk9 CnNhYmxlZH0pLmZvckVhY2goZnVuY3Rpb24obixyKXthPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChu LnZhbHVlcyxpLnBvaW50WFZhbD0KdWUsTS54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixhLCEwKTt2 YXIgbz0zRG4udmFsdWVzW2FdO2lmKHR5cGVvZiBvPTNEPTNEInVuPQpkZWZpbmVkIilyZXR1cm47 dHlwZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9M0RvKSx0eXBlb2YgZj0zRD0zRCJ1bmRlZmlu ZWQ9CiImJihmPTNETS54U2NhbGUoKShNLngoKShvLGEpKSk7dmFyIHU9M0R0LnN0eWxlKCk9M0Q9 M0QiZXhwYW5kIj9vLmRpc3BsYXkueT0KOk0ueSgpKG8sYSk7Yy5wdXNoKHtrZXk6bi5rZXksdmFs dWU6dSxjb2xvcjpsKG4sbi5zZXJpZXNJbmRleCksc3RhY2tlZFZhbHVlPQo6by5kaXNwbGF5fSl9 KSxjLnJldmVyc2UoKTtpZihjLmxlbmd0aD4yKXt2YXIgaD0zRE0ueVNjYWxlKCkuaW52ZXJ0KGku bW91c2U9ClkpLHA9M0RJbmZpbml0eSxkPTNEbnVsbDtjLmZvckVhY2goZnVuY3Rpb24oZSx0KXto PTNETWF0aC5hYnMoaCk7dmFyIG49M0RNYT0KdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkwKSxyPTNE TWF0aC5hYnMoZS5zdGFja2VkVmFsdWUueSk7aWYoaD49M0RuJiZoPD0zRHIrPQpuKXtkPTNEdDty ZXR1cm59fSksZCE9M0RudWxsJiYoY1tkXS5oaWdobGlnaHQ9M0QhMCl9dmFyIHY9M0RuLnRpY2tG b3JtYXQoKSg9Ck0ueCgpKHMsYSkpLG09M0R0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kIj9mdW5jdGlv bihlLHQpe3JldHVybiBkMy5mb3JtYXQoIi4xJT0KIikoZSl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJu IHIudGlja0Zvcm1hdCgpKGUpfTtvLnRvb2x0aXAucG9zaXRpb24oe2xlZnQ6Zit1PQoubGVmdCx0 b3A6aS5tb3VzZVkrdS50b3B9KS5jaGFydENvbnRhaW5lcihfLnBhcmVudE5vZGUpLmVuYWJsZWQo ZykudmFsdWVGb3I9Cm1hdHRlcihtKS5kYXRhKHt2YWx1ZTp2LHNlcmllczpjfSkoKSxvLnJlbmRl ckd1aWRlTGluZShmKX0pLG8uZGlzcGF0Y2gub24oIj0KZWxlbWVudE1vdXNlb3V0IixmdW5jdGlv bihlKXtOLnRvb2x0aXBIaWRlKCksdC5jbGVhckhpZ2hsaWdodHMoKX0pLE4ub24oInRvPQpvbHRp cFNob3ciLGZ1bmN0aW9uKGUpe2cmJk8oZSxfLnBhcmVudE5vZGUpfSksTi5vbigiY2hhbmdlU3Rh dGUiLGZ1bmN0aW9uKGU9Cil7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJnkubGVu Z3RoPTNEPTNEPTNEZS5kaXNhYmxlZC5sZW5ndGgmJih5Lj0KZm9yRWFjaChmdW5jdGlvbih0LG4p e3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkW25dfSksUy5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpPQos dHlwZW9mIGUuc3R5bGUhPTNEInVuZGVmaW5lZCImJnQuc3R5bGUoZS5zdHlsZSksTS51cGRhdGUo KX0pfSksTX12YXIgdD0zRGU9Ci5tb2RlbHMuc3RhY2tlZEFyZWEoKSxuPTNEZS5tb2RlbHMuYXhp cygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLj0KbGVnZW5kKCkscz0zRGUubW9k ZWxzLmxlZ2VuZCgpLG89M0RlLmludGVyYWN0aXZlR3VpZGVsaW5lKCksdT0zRHt0b3A6MzAscmln PQpodDoyNSxib3R0b206NTAsbGVmdDo2MH0sYT0zRG51bGwsZj0zRG51bGwsbD0zRGUudXRpbHMu ZGVmYXVsdENvbG9yKCksYz0zRCE9CjAsaD0zRCEwLHA9M0QhMCxkPTNEITAsdj0zRCExLG09M0Qh MSxnPTNEITAseT0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIj0KPGgzPiIrZSsiPC9oMz4i KyI8cD4iK24rIiBvbiAiK3QrIjwvcD4ifSxiLHcsRT0zRGQzLmZvcm1hdCgiLC4yZiIpLFM9M0R7 c3R5PQpsZTp0LnN0eWxlKCl9LHg9M0RudWxsLFQ9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixOPTNE ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG89CnciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwi Y2hhbmdlU3RhdGUiKSxDPTNEMjUwLGs9M0RbIlN0YWNrZWQiLCJTdHJlYT0KbSIsIkV4cGFuZGVk Il0sTD0zRHt9LEE9M0QwO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWVu dCh2PyJyPQppZ2h0IjoibGVmdCIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBPPTNEZnVuY3Rpb24o aSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm89CmZmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhz Lm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbj0KdCxpLnBvaW50 SW5kZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxs PTNEeShpLnNlPQpyaWVzLmtleSxhLGYsaSxNKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFs dWU8MD8ibiI6InMiLG51bGwscyl9O3JldHVybiA9CnQuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93 IixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt1LmxlZnQsZS5wb3NbMV0rdT0KLnRvcF0s Ti50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbihl KXtOLnRvb2x0aXBIPQppZGUoZSl9KSxOLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtnJiZl LnRvb2x0aXAuY2xlYW51cCgpfSksTS5kaXNwYXRjaD0KPTNETixNLnN0YWNrZWQ9M0R0LE0ubGVn ZW5kPTNEaSxNLmNvbnRyb2xzPTNEcyxNLnhBeGlzPTNEbixNLnlBeGlzPTNEcixNLmluPQp0ZXJh Y3RpdmVMYXllcj0zRG8sZDMucmViaW5kKE0sdCwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNj YWxlIiwieERvbWFpbiI9CiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4i LCJpbnRlcmFjdGl2ZSIsInVzZVZvcm9ub2kiLCJvZmZzZT0KdCIsIm9yZGVyIiwic3R5bGUiLCJj bGlwRWRnZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImludGVycG9sYXRlIiksPQpN Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoTSksTS5tYXJnaW49M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyh1LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0Qi dW5kZWZpbmVkIj9lLnRvcDp1LnRvcCx1LnJpZ2h0PTNEdHlwZT0Kb2YgZS5yaWdodCE9M0QidW5k ZWZpbmVkIj9lLnJpZ2h0OnUucmlnaHQsdS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVu PQpkZWZpbmVkIj9lLmJvdHRvbTp1LmJvdHRvbSx1LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1 bmRlZmluZWQiP2UubGVmdDp1Lmw9CmVmdCxNKTp1fSxNLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLE0pOmF9LE0uaGVpZz0KaHQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsTSk6Zn0sTS5jb2xvcj0zRGZ1bmN0aW9u KG4pPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvbG9yKG4pLGku Y29sb3IobCksdC5jb2xvcihsKSxNKTo9Cmx9LE0uc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLE0pOmN9LE0uc2hvdz0KTGVnZW5kPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLE0pOmh9LE0uc2hvd1hBeGlz PTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsTSk6cH0sTS5z aG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxN KTpkfSxNLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5s ZW5ndGg/KHY9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLE0pOnZ9LE0udXNlSW50ZXJh Y3RpdmVHdWlkPQplbGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyht PTNEZSxlPTNEPTNEPTNEITAmJihNLmludGVyYWM9CnRpdmUoITEpLE0udXNlVm9yb25vaSghMSkp LE0pOm19LE0udG9vbHRpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/ KHk9M0RlLE0pOnl9LE0udG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZz0zRGUsPQpNKTpnfSxNLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLE0pOnl9LE09Ci5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxNKTpTfSxNLmRlZmF1bHRTdGF0ZT0zRD0KZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLE0pOnh9LE0ubm9EYXRhPTNE ZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsTSk6VH0sTS50cmFu c2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhB PTNEZSxNKTpBfSxNLmNvbnRyb2xzRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0K cy5sZW5ndGg/KGs9M0RlLE0pOmt9LE0uY29udHJvbExhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPQo/dHlwZW9mIGUhPTNEIm9iamVjdCI/TDooTD0zRGUsTSk6TH0s ci5zZXRUaWNrRm9ybWF0PTNEci50aWNrRm9ybWF0LHIudGlja0Y9Cm9ybWF0PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHIpOkV9LE19fSgpLGRlZmluZSgicGx1 Zz0KaW4vcGx1Z2lucy9udmQzL252LmQzIixmdW5jdGlvbigpe30pLGRlZmluZSgicGx1Z2luL2No YXJ0cy9udmQzL2NvbW1vbi9jb25mPQppZyIsWyJwbHVnaW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQi LCJwbHVnaW4vcGx1Z2lucy9udmQzL252LmQzIl0sZnVuY3Rpb24oZSk9CntyZXR1cm4gJC5leHRl bmQoITAse30sZSx7dGl0bGU6IiIsY2F0ZWdvcnk6IiIsbGlicmFyeToiTlZEMyIsdGFnOiJzdmci LGtleT0Kd29yZHM6InNtYWxsIn0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyL2Nv bmZpZyIsWyJwbHVnaW4vY2hhcnRzL252PQpkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJSZWd1bGFyIixjYXQ9CmVnb3J5OiJCYXIg ZGlhZ3JhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6 ITAsaXNfYT0KdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlz Iixpc19udW1lcmljOiEwfX19KX0pLGRlZmluPQplKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX3N0 YWNrZWQvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmk9CmciXSxmdW5j dGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlN0YWNrZWQiLGNhdGVnb3J5 OiJCYXIgZGlhZz0KcmFtcyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixp c19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1PQplOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZv ciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnQ9CnMvbnZk My9iYXJfaG9yaXpvbnRhbC9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25m aWciXSxmdW5jdGlvbj0KKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSG9yaXpv bnRhbCIsY2F0ZWdvcnk6IkJhciBkaWFncmFtcyIsc2V0PQp0aW5nczp7eF9heGlzX3R5cGU6e2lu aXQ6ImhpZGUifX0sY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc189Cmxh YmVsOiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4 aXMiLGlzX251bWVyaWM6IT0KMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9iYXJf aG9yaXpvbnRhbF9zdGFja2VkL2NvbmZpZyIsWyJwbHVnaW4vPQpjaGFydHMvbnZkMy9jb21tb24v Y29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJTdGE9 CmNrZWQgaG9yaXpvbnRhbCIsY2F0ZWdvcnk6IkJhciBkaWFncmFtcyIsc2V0dGluZ3M6e3hfYXhp c190eXBlOntpbml0OiJoaWRlIj0KfX0sY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1h eGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohPQowfSx5Ont0aXRsZToiVmFs dWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRz L249CnZkMy9saW5lX2ZvY3VzL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2Nv bmZpZyJdLGZ1bmN0aW9uKGUpe3JldD0KdXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJMaW5l IHdpdGggZm9jdXMiLGNhdGVnb3J5OiJPdGhlcnMiLHpvb21hYmxlOiJuPQphdGl2ZSIsY29sdW1u czp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlz X3VuaXE9CnVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9 fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcj0KdHMvbnZkMy9waWUvY29uZmlnIixbInBsdWdpbi9w bHVnaW5zL252ZDMvbnYuZDMiXSxmdW5jdGlvbigpe3JldHVybiAkLmV4dGVuPQpkKCEwLHt9LHt0 aXRsZToiUGllIGNoYXJ0IixjYXRlZ29yeToiQXJlYSBjaGFydHMiLGxpYnJhcnk6Ik5WRDMiLHRh Zzoic3ZnIiw9CmtleXdvcmRzOiJzbWFsbCIsY29sdW1uczp7bGFiZWw6e3RpdGxlOiJMYWJlbHMi LGlzX2xhYmVsOiEwLGlzX2F1dG86ITB9LHk6ez0KdGl0bGU6IlZhbHVlcyIsaXNfbnVtZXJpYzoh MH19LHNldHRpbmdzOnttYWluX3NlcGFyYXRvcjp7dHlwZToic2VwYXJhdG9yIix0PQppdGxlOiJQ aWUgY2hhcnQgc2V0dGluZ3MifSxkb251dF9yYXRpbzp7dGl0bGU6IkRvbnV0IHJhdGlvIixpbmZv OiJEZXRlcm1pbmU9CiBob3cgbGFyZ2UgdGhlIGRvbnV0IGhvbGUgd2lsbCBiZS4iLHR5cGU6InNl bGVjdCIsaW5pdDoiMC41IixkYXRhOlt7bGFiZWw6Ij0KNTAlIix2YWx1ZToiMC41In0se2xhYmVs OiIyNSUiLHZhbHVlOiIwLjI1In0se2xhYmVsOiIxMCUiLHZhbHVlOiIwLjEwIn0se2xhPQpiZWw6 IjAlIix2YWx1ZToiMCJ9XX0sc2hvd19sZWdlbmQ6e3RpdGxlOiJTaG93IGxlZ2VuZCIsaW5mbzoi V291bGQgeW91IGxpa2U9CiB0byBhZGQgYSBsZWdlbmQ/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5p dDoiZmFsc2UiLGRhdGE6W3tsYWJlbDoiWWVzIix2YWx1ZT0KOiJ0cnVlIn0se2xhYmVsOiJObyIs dmFsdWU6ImZhbHNlIn1dfSxsYWJlbF9zZXBhcmF0b3I6e3R5cGU6InNlcGFyYXRvciIsdGl0PQps ZToiTGFiZWwgc2V0dGluZ3MifSxsYWJlbF90eXBlOnt0aXRsZToiRG9udXQgbGFiZWwiLGluZm86 IldoYXQgd291bGQgeW91IGw9CmlrZSB0byBzaG93IGZvciBlYWNoIHNsaWNlPyIsdHlwZToic2Vs ZWN0Iixpbml0OiJwZXJjZW50IixkYXRhOlt7bGFiZWw6Ii0tID0KTm90aGluZyAtLSIsdmFsdWU6 ImhpZGUiLGhpZGU6ImxhYmVsX291dHNpZGUifSx7bGFiZWw6IkxhYmVsIGNvbHVtbiIsdmFsdWU6 PQoia2V5IixzaG93OiJsYWJlbF9vdXRzaWRlIn0se2xhYmVsOiJWYWx1ZSBjb2x1bW4iLHZhbHVl OiJ2YWx1ZSIsc2hvdzoibGFiZWw9Cl9vdXRzaWRlIn0se2xhYmVsOiJQZXJjZW50YWdlIix2YWx1 ZToicGVyY2VudCIsc2hvdzoibGFiZWxfb3V0c2lkZSJ9XX0sbGFiZT0KbF9vdXRzaWRlOnt0aXRs ZToiU2hvdyBvdXRzaWRlIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGxhYmVscyBvdXRz aWRlPQogdGhlIGRvbnV0PyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7 bGFiZWw6IlllcyIsdmFsdWU6InRydWU9CiJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0s dXNlX3BhbmVsczp7aW5pdDoidHJ1ZSIsaGlkZTohMH19fSl9KSxkZWZpbj0KZSgicGx1Z2luL2No YXJ0cy9udmQzL3N0YWNrZWRhcmVhX2Z1bGwvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9j b21tb24vPQpjb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0 bGU6IkV4cGFuZGVkIix6b29tYWJsZTohMCw9CmNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29y ZHM6ImRlZmF1bHQgc21hbGwiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZj0Kb3IgeC1heGlz Iixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBm b3IgeS1heGlzPQoiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252 ZDMvc3RhY2tlZGFyZWFfc3RyZWFtL2NvbmZpZyI9CixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21t b24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUsez0KdGl0bGU6 IlN0cmVhbSIsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIix6b29tYWJsZTohMCxrZXl3b3JkczoiZGVm YXVsdCBzbWFsbCIsPQpzaG93bWF4bWluOiEwLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9y IHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCw9CmlzX3VuaXF1ZTohMH0seTp7dGl0bGU6 IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Zz0KaW4v Y2hhcnRzL252ZDMvaGlzdG9ncmFtL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9u L2NvbmZpZyJdLGZ1bmN0PQppb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJI aXN0b2dyYW0iLGNhdGVnb3J5OiJEYXRhIHByb2Nlc3Npbmc9CiAocmVxdWlyZXMgJ2NoYXJ0cycg dG9vbCBmcm9tIFRvb2xzaGVkKSIsZXhlY3V0ZToiaGlzdG9ncmFtIixrZXl3b3Jkczoic21hbD0K bCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3k6e3RpdGxlOiJPYnNlcnZhdGlvbnMiLGlzX251bWVy aWM6ITB9fSxzZXR0aW5nczp7PQp4X2F4aXNfbGFiZWw6e2luaXQ6IlZhbHVlcyJ9LHlfYXhpc19s YWJlbDp7aW5pdDoiRGVuc2l0eSJ9LHlfYXhpc190eXBlOntpbmk9CnQ6ImYifSx5X2F4aXNfcHJl Y2lzaW9uOntpbml0OiIuMiJ9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvbGluZS9j bz0KbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUp e3JldHVybiAkLmV4dGVuZCghMCx7PQp9LGUse3RpdGxlOiJMaW5lIGNoYXJ0IixjYXRlZ29yeToi T3RoZXJzIix6b29tYWJsZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiVmE9Cmx1ZXMgZm9yIHgtYXhp cyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMg Zm9yID0KeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9u dmQzL3NjYXR0ZXIvY29uZmlnIixbInBsPQp1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWci XSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU9CjoiU2NhdHRlciBw bG90IixjYXRlZ29yeToiT3RoZXJzIix6b29tYWJsZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiVmFs dWVzIGZvcj0KIHgtYXhpcyIsaXNfbnVtZXJpYzohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1h eGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlPQpmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvc3Rh Y2tlZGFyZWEvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY289Cm5maWciXSxm dW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlJlZ3VsYXIiLHpvb21h YmxlOiEwLGNhdD0KZWdvcnk6IkFyZWEgY2hhcnRzIixrZXl3b3JkczoiZGVmYXVsdCBzbWFsbCIs Y29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgPQp4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1 dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGk9CnNfbnVt ZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWci LFsicGx1Z2luL2NoYT0KcnRzL2Zvcm1zL2RlZmF1bHQiXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5l eHRlbmQoITAse30sZSx7dGl0bGU6IiIsY2F0ZWdvcnk6PQoiIixsaWJyYXJ5OiJqcVBsb3QiLHRh ZzoiZGl2Iix6b29tYWJsZTohMCxrZXl3b3JkczoibWVkaXVtIixzZXR0aW5nczp7c2VwYXI9CmF0 b3JfZ3JpZDp7dGl0bGU6IkdyaWRzIix0eXBlOiJzZXBhcmF0b3IifSx4X2F4aXNfZ3JpZDp7dGl0 bGU6IkF4aXMgZ3JpZCIsaT0KbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGdyaWQgbGluZXMg Zm9yIHRoZSBYIGF4aXM/Iix0eXBlOiJyYWRpb2J1dHRvbiIsPQppbml0OiJmYWxzZSIsZGF0YTpb e2xhYmVsOiJPbiIsdmFsdWU6InRydWUifSx7bGFiZWw6Ik9mZiIsdmFsdWU6ImZhbHNlIn1dfSw9 CnlfYXhpc19ncmlkOnt0aXRsZToiQXhpcyBncmlkIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBz aG93IGdyaWQgbGluZXMgZm9yID0KdGhlIFkgYXhpcz8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0 OiJ0cnVlIixkYXRhOlt7bGFiZWw6Ik9uIix2YWx1ZToidHJ1ZSJ9PQose2xhYmVsOiJPZmYiLHZh bHVlOiJmYWxzZSJ9XX19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2Jhci9jb25m aWc9CiIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9LD0KZSx7dGl0bGU6IlJlZ3VsYXIiLGNhdGVnb3J5OiJCYXIg ZGlhZ3JhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtPQpheGlzIixpc19sYWJl bDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlz Iixpc189Cm51bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9saW5l L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzLz0KanFwbG90L2NvbW1vbi9jb25maWciXSxmdW5jdGlv bihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkxpbmUgY2hhPQpydCIsY2F0ZWdv cnk6Ik90aGVycyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJl bDohMCxpc189CmF1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4 aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaT0KbmUoInBsdWdpbi9jaGFydHMvanFwbG90L3Nj YXR0ZXIvY29uZmlnIixbInBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25mPQppZyJdLGZ1 bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiU2NhdHRlciBwbG90Iixj YXRlZ29yeToiT3Q9CmhlcnMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIs aXNfbnVtZXJpYzohMH0seTp7dGl0bGU6IlZhbHVlcz0KIGZvciB5LWF4aXMiLGlzX251bWVyaWM6 ITB9fSxzZXR0aW5nczp7eF9heGlzX2dyaWQ6e2luaXQ6InRydWUifX19KX0pLGRlZmluPQplKCJw bHVnaW4vY2hhcnRzL2pxcGxvdC9ib3hwbG90L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxv dC9jb21tb24vY29uZmk9CmciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7 dGl0bGU6IkJveCBwbG90IixjYXRlZ29yeToiRGF0YSBwcj0Kb2Nlc3NpbmcgKHJlcXVpcmVzICdj aGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGxpYnJhcnk6ImpxUGxvdCIsdGFnOiJkaXYiPQos ZXhlY3V0ZToiYm94cGxvdCIsa2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSIsY29sdW1uczp7 eTp7dGl0bGU6Ik9ic2VydmE9CnRpb25zIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3Nob3df bGVnZW5kOntpbml0OiJmYWxzZSJ9fX0pfSksZGVmaW5lKCJwbD0KdWdpbi9jaGFydHMvanFwbG90 L2hpc3RvZ3JhbV9kaXNjcmV0ZS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9u PQovY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJE aXNjcmV0ZSBIaXN0b2dyYW0iLGM9CmF0ZWdvcnk6IkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMg J2NoYXJ0cycgdG9vbCBmcm9tIFRvb2xzaGVkKSIsZXhlY3V0ZToiaD0KaXN0b2dyYW1kaXNjcmV0 ZSIsa2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSIsY29sdW1uczp7eDp7dGl0bGU6Ik9ic2Vy dmF0PQppb25zIixpc19sYWJlbDohMH19LHNldHRpbmdzOnt4X2F4aXNfbGFiZWw6e2luaXQ6IkJy ZWFrcyJ9LHlfYXhpc19sYWJlbDp7aW49Cml0OiJEZW5zaXR5In19fSl9KSxkZWZpbmUoInBsdWdp bi9jaGFydHMvb3RoZXJzL2hlYXRtYXAvY29uZmlnIixbInBsdWdpbi9jaD0KYXJ0cy9mb3Jtcy9k ZWZhdWx0Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIZWF0 bWFwIixjPQphdGVnb3J5OiJPdGhlcnMiLGxpYnJhcnk6IkN1c3RvbSIsdGFnOiJzdmciLGtleXdv cmRzOiJzbWFsbCIsem9vbWFibGU6ITAsY289Cmx1bW5zOnt4Ont0aXRsZToiQ29sdW1uIGxhYmVs cyIsaXNfbGFiZWw6ITAsaXNfbnVtZXJpYzohMCxpc191bmlxdWU6ITB9LHk6ez0KdGl0bGU6IlJv dyBsYWJlbHMiLGlzX2xhYmVsOiEwLGlzX251bWVyaWM6ITAsaXNfdW5pcXVlOiEwfSx6Ont0aXRs ZToiT2JzZXJ2PQphdGlvbiIsaXNfbnVtZXJpYzohMH19LHNldHRpbmdzOnt1c2VfcGFuZWxzOntp bml0OiJ0cnVlIixoaWRlOiEwfSxjb2xvcl9zZXQ9Cjp7dGl0bGU6IkNvbG9yIHNjaGVtZSIsaW5m bzoiU2VsZWN0IGEgY29sb3Igc2NoZW1lIGZvciB5b3VyIGhlYXRtYXAiLHR5cGU6Ij0Kc2VsZWN0 Iixpbml0OiJqZXQiLGRhdGE6W3tsYWJlbDoiQ29sZC10by1Ib3QiLHZhbHVlOiJob3QifSx7bGFi ZWw6IkNvb2wiLHZhPQpsdWU6ImNvb2wifSx7bGFiZWw6IkNvcHBlciIsdmFsdWU6ImNvcHBlciJ9 LHtsYWJlbDoiR3JheSBzY2FsZSIsdmFsdWU6ImdyYXk9CiJ9LHtsYWJlbDoiSmV0Iix2YWx1ZToi amV0In0se2xhYmVsOiJOby1HcmVlbiIsdmFsdWU6Im5vX2dyZWVuIn0se2xhYmVsOiJPYz0KZWFu Iix2YWx1ZToib2NlYW4ifSx7bGFiZWw6IlBvbGFyIix2YWx1ZToicG9sYXIifSx7bGFiZWw6IlJl ZC10by1HcmVlbiIsdmFsPQp1ZToicmVkZ3JlZW4ifSx7bGFiZWw6IlJlZC10by1ncmVlbiAoc2F0 dXJhdGVkKSIsdmFsdWU6InJlZDJncmVlbiJ9LHtsYWJlbDo9CiJSZWxpZWYiLHZhbHVlOiJyZWxp ZWYifSx7bGFiZWw6IlNlaXNtb2dyYXBoIix2YWx1ZToic2VpcyJ9LHtsYWJlbDoiU2VhbGFuZD0K Iix2YWx1ZToic2VhbGFuZCJ9LHtsYWJlbDoiU3BsaXQiLHZhbHVlOiJzcGxpdCJ9LHtsYWJlbDoi V3lzaXd5ZyIsdmFsdWU6Ind5PQpzaXd5ZyJ9XX0sdXJsX3RlbXBsYXRlOnt0aXRsZToiVXJsIHRl bXBsYXRlIixpbmZvOiJFbnRlciBhIHVybCB0byBsaW5rIHRoZSA9CmxhYmVscyB3aXRoIGV4dGVy bmFsIHNvdXJjZXMuIFVzZSBfX0xBQkVMX18gYXMgcGxhY2Vob2xkZXIuIix0eXBlOiJ0ZXh0Iixp bj0KaXQ6IiIscGxhY2Vob2xkZXI6Imh0dHA6Ly9zb21ldXJsLmNvbT9pZD0zRF9fTEFCRUxfXyJ9 fX0pfSksZGVmaW5lKCJwbHVnaW4vPQpjaGFydHMvb3RoZXJzL2hlYXRtYXBfY2x1c3Rlci9jb25m aWciLFsicGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcC9jb25maWc9CiJdLGZ1bmN0aW9uKGUp e3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiQ2x1c3RlcmVkIEhlYXRtYXAiLGNhdGVn b3J5Oj0KIkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9vbCBmcm9tIFRvb2xz aGVkKSIsZXhlY3V0ZToiaGVhdG1hcCIsPQprZXl3b3Jkczoic21hbGwgbWVkaXVtIGxhcmdlIn0p fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL3R5cGVzIixbInBsdWdpbi9jaGE9CnJ0cy9udmQzL2Jh ci9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX3N0YWNrZWQvY29uZmlnIiwicGx1Z2lu L2NoYXJ0cz0KL252ZDMvYmFyX2hvcml6b250YWwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQz L2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQvY29uPQpmaWciLCJwbHVnaW4vY2hhcnRzL252ZDMvbGlu ZV9mb2N1cy9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvcGllL2NvbmZpZyI9CiwicGx1Z2lu L2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhX2Z1bGwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQz L3N0YWNrZWRhcj0KZWFfc3RyZWFtL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9oaXN0b2dy YW0vY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzPQovbGluZS9jb25maWciLCJwbHVnaW4vY2hh cnRzL252ZDMvc2NhdHRlci9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvc3RhY2s9CmVkYXJl YS9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0 cy9qcXBsb3QvbGluZT0KL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90L3NjYXR0ZXIvY29u ZmlnIiwicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYm94cGxvPQp0L2NvbmZpZyIsInBsdWdpbi9jaGFy dHMvanFwbG90L2hpc3RvZ3JhbV9kaXNjcmV0ZS9jb25maWciLCJwbHVnaW4vY2hhcnRzL289CnRo ZXJzL2hlYXRtYXAvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcF9jbHVzdGVy L2NvbmZpZyJdLGZ1bmN0aT0Kb24oZSx0LG4scixpLHMsbyx1LGEsZixsLGMsaCxwLGQsdixtLGcs eSl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmPQphdWx0czp7bnZkM19iYXI6ZSxu dmQzX2Jhcl9zdGFja2VkOnQsbnZkM19iYXJfaG9yaXpvbnRhbDpuLG52ZDNfYmFyX2hvcml6b249 CnRhbF9zdGFja2VkOnIsbnZkM19saW5lX2ZvY3VzOmksbnZkM19zdGFja2VkYXJlYTpjLG52ZDNf c3RhY2tlZGFyZWFfZnVsbDpvLD0KbnZkM19zdGFja2VkYXJlYV9zdHJlYW06dSxudmQzX3BpZTpz LG52ZDNfbGluZTpmLG52ZDNfc2NhdHRlcjpsLG52ZDNfaGlzdG9nPQpyYW06YSxqcXBsb3RfYmFy OmgsanFwbG90X2hpc3RvZ3JhbV9kaXNjcmV0ZTptLGpxcGxvdF9saW5lOnAsanFwbG90X3NjYXR0 ZXI9CjpkLGpxcGxvdF9ib3hwbG90OnYsb3RoZXJzX2hlYXRtYXA6ZyxvdGhlcnNfaGVhdG1hcF9j bHVzdGVyOnl9fSl9KSxkZWZpbmUoIj0KcGx1Z2luL2FwcCIsWyJtdmMvdWkvdWktbW9kYWwiLCJt dmMvdWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjIiwidXRpbHMvPQp1dGlscyIsInBsdWdp bi9saWJyYXJ5L2pvYnMiLCJwbHVnaW4vbGlicmFyeS9kYXRhc2V0cyIsInBsdWdpbi9saWJyYXJ5 L3N0b3I9CmFnZSIsInV0aWxzL2RlZmVycmVkIiwicGx1Z2luL3ZpZXdzL3ZpZXdlciIsInBsdWdp bi92aWV3cy9lZGl0b3IiLCJwbHVnaW4vbT0Kb2RlbHMvY29uZmlnIiwicGx1Z2luL21vZGVscy9j aGFydCIsInBsdWdpbi9jaGFydHMvdHlwZXMiXSxmdW5jdGlvbihlLHQsbixyPQosaSxzLG8sdSxh LGYsbCxjLGgpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlv bih0KXt0aGk9CnMub3B0aW9ucz0zRHQsR2FsYXh5JiZHYWxheHkubW9kYWw/dGhpcy5tb2RhbD0z REdhbGF4eS5tb2RhbDp0aGlzLm1vZGFsPTNEbj0KZXcgZS5WaWV3LHRoaXMuY29uZmlnPTNEbmV3 IGwsdGhpcy50eXBlcz0zRG5ldyBoLHRoaXMuY2hhcnQ9M0RuZXcgYyx0aGlzLmpvPQpicz0zRG5l dyBpKHRoaXMpLHRoaXMuZGF0YXNldHM9M0RuZXcgcyh0aGlzKSx0aGlzLnN0b3JhZ2U9M0RuZXcg byh0aGlzKSx0aGk9CnMuZGVmZXJyZWQ9M0RuZXcgdSx0aGlzLnZpZXdlcl92aWV3PTNEbmV3IGEo dGhpcyksdGhpcy5lZGl0b3Jfdmlldz0zRG5ldyBmKD0KdGhpcyksdGhpcy4kZWwuYXBwZW5kKHRo aXMudmlld2VyX3ZpZXcuJGVsKSx0aGlzLiRlbC5hcHBlbmQodGhpcy5lZGl0b3JfdmllPQp3LiRl bCk7aWYoIXRoaXMuc3RvcmFnZS5sb2FkKCkpdGhpcy5nbygiZWRpdG9yIik7ZWxzZXt0aGlzLmdv KCJ2aWV3ZXIiKTt2YXI9CiBuPTNEdGhpczt0aGlzLmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24o KXtuLmNoYXJ0LnRyaWdnZXIoInJlZHJhdyIpfSl9fSxnbz0KOmZ1bmN0aW9uKGUpeyQoIi50b29s dGlwIikuaGlkZSgpO3N3aXRjaChlKXtjYXNlImVkaXRvciI6dGhpcy5lZGl0b3Jfdmlldy5zPQpo b3coKSx0aGlzLnZpZXdlcl92aWV3LmhpZGUoKTticmVhaztjYXNlInZpZXdlciI6dGhpcy5lZGl0 b3Jfdmlldy5oaWRlKCksdGg9CmlzLnZpZXdlcl92aWV3LnNob3coKX19LGNoYXJ0UGF0aDpmdW5j dGlvbihlKXt2YXIgdD0zRGUuc3BsaXQoL18oLispLyk7cmV0dT0Kcm4gdC5sZW5ndGg+PTNEMj90 WzBdKyIvIit0WzFdOihjb25zb2xlLmRlYnVnKCJGQUlMRUQgQXBwOmNoYXJ0UGF0aCgpIC0gSW52 PQphbGlkIGZvcm1hdDogIitlKSx1bmRlZmluZWQpfX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQorZGVmaW5lKCJtdmMvdWkvdWktbW9kYWwiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9M0RC YWNrYm9uZS5WaWV3LmV4dGVuZCh7ZWxNYWk9Cm46ImJvZHkiLG9wdGlvbnNEZWZhdWx0Ont0aXRs ZToidWktbW9kYWwiLGJvZHk6IiIsYmFja2Ryb3A6ITAsaGVpZ2h0Om51bGwsdz0KaWR0aDpudWxs LGNsb3NpbmdfZXZlbnRzOiExLGNsb3NpbmdfY2FsbGJhY2s6bnVsbH0sYnV0dG9uTGlzdDp7fSxp bml0aWFsaXplPQo6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5fY3JlYXRlKGUpfSxzaG93OmZ1bmN0aW9u KGUpe3RoaXMuaW5pdGlhbGl6ZShlKSx0aGlzLm89CnB0aW9ucy5oZWlnaHQ/KHRoaXMuJGJvZHku Y3NzKCJoZWlnaHQiLHRoaXMub3B0aW9ucy5oZWlnaHQpLHRoaXMuJGJvZHkuY3NzKD0KIm92ZXJm bG93IiwiaGlkZGVuIikpOnRoaXMuJGJvZHkuY3NzKCJtYXgtaGVpZ2h0IiwkKHdpbmRvdykuaGVp Z2h0KCkvMiksdGhpPQpzLm9wdGlvbnMud2lkdGgmJnRoaXMuJGRpYWxvZy5jc3MoIndpZHRoIix0 aGlzLm9wdGlvbnMud2lkdGgpLHRoaXMudmlzaWJsZT89CnRoaXMuJGVsLnNob3coKTp0aGlzLiRl bC5mYWRlSW4oImZhc3QiKSx0aGlzLnZpc2libGU9M0QhMH0saGlkZTpmdW5jdGlvbigpez0KdGhp cy52aXNpYmxlPTNEITEsdGhpcy4kZWwuZmFkZU91dCgiZmFzdCIpLHRoaXMub3B0aW9ucy5jbG9z aW5nX2NhbGxiYWNrJiZ0PQpoaXMub3B0aW9ucy5jbG9zaW5nX2NhbGxiYWNrKCl9LGVuYWJsZUJ1 dHRvbjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG89Cm5MaXN0W2VdO3RoaXMuJGJ1dHRv bnMuZmluZCgiIyIrdCkucHJvcCgiZGlzYWJsZWQiLCExKX0sZGlzYWJsZUJ1dHRvbjpmdW5jdD0K aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIr dCkucHJvcCgiZGlzYWJsZWQiPQosITApfSxzaG93QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNE dGhpcy5idXR0b25MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCg9CiIjIit0KS5zaG93KCl9LGhp ZGVCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLmJ1dHRvbkxpc3RbZV07dGhpcy4kYnV0 dD0Kb25zLmZpbmQoIiMiK3QpLmhpZGUoKX0sZ2V0QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNE dGhpcy5idXR0b25MaXN0W2VdO3JlPQp0dXJuIHRoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCl9LHNj cm9sbFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRib2R5LnNjcm89CmxsVG9wKCl9LF9jcmVh dGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzO3RoaXMub3B0aW9ucz0zRF8uZGVmYXVsdHMoZSx0 aGlzLj0Kb3B0aW9uc0RlZmF1bHQpLHRoaXMub3B0aW9ucy5ib2R5PTNEPTNEInByb2dyZXNzIiYm KHRoaXMub3B0aW9ucy5ib2R5PTNEJCgnPQo8ZGl2IGNsYXNzPTNEInByb2dyZXNzIHByb2dyZXNz LXN0cmlwZWQgYWN0aXZlIj48ZGl2IGNsYXNzPTNEInByb2dyZXNzLWJhciA9CnByb2dyZXNzLWJh ci1pbmZvIiBzdHlsZT0zRCJ3aWR0aDoxMDAlIj48L2Rpdj48L2Rpdj4nKSksdGhpcy4kZWwmJih0 aGlzLiRlbD0KLnJlbW92ZSgpLCQoZG9jdW1lbnQpLm9mZigia2V5dXAudWktbW9kYWwiKSksdGhp cy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlPQoodGhpcy5vcHRpb25zLnRpdGxlKSksdGhpcy4k ZGlhbG9nPTNEdGhpcy4kZWwuZmluZCgiLm1vZGFsLWRpYWxvZyIpLHRoaXMuJGI9Cm9keT0zRHRo aXMuJGVsLmZpbmQoIi5tb2RhbC1ib2R5IiksdGhpcy4kZm9vdGVyPTNEdGhpcy4kZWwuZmluZCgi Lm1vZGFsLWZvbz0KdGVyIiksdGhpcy4kYnV0dG9ucz0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b25z IiksdGhpcy4kYmFja2Ryb3A9M0R0aGlzLiRlbC5mPQppbmQoIi5tb2RhbC1iYWNrZHJvcCIpLHRo aXMuJGJvZHkuaHRtbCh0aGlzLm9wdGlvbnMuYm9keSksdGhpcy5vcHRpb25zLmJhY2s9CmRyb3B8 fHRoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO2lmKHRoaXMub3B0aW9ucy5idXR0b25z KXt0aGlzLmJ1dHRvbj0KTGlzdD0zRHt9O3ZhciBuPTNEMDskLmVhY2godGhpcy5vcHRpb25zLmJ1 dHRvbnMsZnVuY3Rpb24oZSxyKXt2YXIgaT0zRCJidXR0PQpvbi0iK24rKzt0LiRidXR0b25zLmFw cGVuZCgkKCc8YnV0dG9uIGlkPTNEIicraSsnIj48L2J1dHRvbj4nKS50ZXh0KGUpLmNsaWM9Cmso cikpLmFwcGVuZCgiICIpLHQuYnV0dG9uTGlzdFtlXT0zRGl9KX1lbHNlIHRoaXMuJGZvb3Rlci5o aWRlKCk7JCh0aGlzLmVsTT0KYWluKS5hcHBlbmQoJCh0aGlzLmVsKSksdGhpcy5vcHRpb25zLmNs b3NpbmdfZXZlbnRzJiYoJChkb2N1bWVudCkub24oImtleXVwPQoudWktbW9kYWwiLGZ1bmN0aW9u KGUpe2Uua2V5Q29kZT0zRD0zRDI3JiZ0LmhpZGUoKX0pLHRoaXMuJGVsLmZpbmQoIi5tb2RhbC09 CmJhY2tkcm9wIikub24oImNsaWNrIixmdW5jdGlvbigpe3QuaGlkZSgpfSkpfSxfdGVtcGxhdGU6 ZnVuY3Rpb24oZSl7cmV0dXJuJz0KPGRpdiBjbGFzcz0zRCJ1aS1tb2RhbCBtb2RhbCI+PGRpdiBj bGFzcz0zRCJtb2RhbC1iYWNrZHJvcCBmYWRlIGluIiBzdHlsZT0KPTNEInotaW5kZXg6IC0xOyI+ PC9kaXY+PGRpdiBjbGFzcz0zRCJtb2RhbC1kaWFsb2ciPjxkaXYgY2xhc3M9M0QibW9kYWwtY29u PQp0ZW50Ij48ZGl2IGNsYXNzPTNEIm1vZGFsLWhlYWRlciI+PGJ1dHRvbiB0eXBlPTNEImJ1dHRv biIgY2xhc3M9M0QiY2xvc2UiIHM9CnR5bGU9M0QiZGlzcGxheTogbm9uZTsiPiZ0aW1lczs8L2J1 dHRvbj48aDQgY2xhc3M9M0QidGl0bGUiPicrZSsiPC9oND4iKyI8Lz0KZGl2PiIrJzxkaXYgY2xh c3M9M0QibW9kYWwtYm9keSIgc3R5bGU9M0QicG9zaXRpb246IHN0YXRpYzsiPjwvZGl2PicrJzxk aXYgPQpjbGFzcz0zRCJtb2RhbC1mb290ZXIiPicrJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyIgc3R5 bGU9M0QiZmxvYXQ6IHJpZ2h0OyI+PC89CmRpdj4nKyI8L2Rpdj4iKyI8L2RpdiIrIjwvZGl2PiIr IjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6ZX19KSxmdW5jdGlvbigpe3Zhcj0KIGU9M0R0aGlzLHQ9 M0RlLl8sbj0zREFycmF5LnByb3RvdHlwZSxyPTNET2JqZWN0LnByb3RvdHlwZSxpPTNERnVuY3Rp b24ucHJvPQp0b3R5cGUscz0zRG4ucHVzaCxvPTNEbi5zbGljZSx1PTNEbi5jb25jYXQsYT0zRHIu dG9TdHJpbmcsZj0zRHIuaGFzT3duUHJvcGU9CnJ0eSxsPTNEQXJyYXkuaXNBcnJheSxjPTNET2Jq ZWN0LmtleXMsaD0zRGkuYmluZCxwPTNEZnVuY3Rpb24oZSl7aWYoZSBpbnN0YT0KbmNlb2YgcCly ZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5fd3Jh cHBlZD0zRGV9PQo7dHlwZW9mIGV4cG9ydHMhPTNEInVuZGVmaW5lZCI/KHR5cGVvZiBtb2R1bGUh PTNEInVuZGVmaW5lZCImJm1vZHVsZS5leHBvcnQ9CnMmJihleHBvcnRzPTNEbW9kdWxlLmV4cG9y dHM9M0RwKSxleHBvcnRzLl89M0RwKTplLl89M0RwLHAuVkVSU0lPTj0zRCIxLjcuMD0KIjt2YXIg ZD0zRGZ1bmN0aW9uKGUsdCxuKXtpZih0PTNEPTNEPTNEdm9pZCAwKXJldHVybiBlO3N3aXRjaChu PTNEPTNEbnVsbD8zPQo6bil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxs KHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obiw9CnIpe3JldHVybiBlLmNhbGwodCxuLHIp fTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixpKXtyZXR1cm4gZS5jYWxsKHQsbixyLD0KaSl9 O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24obixyLGkscyl7cmV0dXJuIGUuY2FsbCh0LG4scixpLHMp fX1yZXR1cm4gZnVuY3RpPQpvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19O3AuaXRl cmF0ZWU9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9M0Q9Cj0zRG51bGw/cC5pZGVudGl0eTpw LmlzRnVuY3Rpb24oZSk/ZChlLHQsbik6cC5pc09iamVjdChlKT9wLm1hdGNoZXMoZSk6cC5wcj0K b3BlcnR5KGUpfSxwLmVhY2g9M0RwLmZvckVhY2g9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0z RG51bGwpcmV0dXJuIGU7dD0KPTNEZCh0LG4pO3ZhciByLGk9M0RlLmxlbmd0aDtpZihpPTNEPTNE PTNEK2kpZm9yKHI9M0QwO3I8aTtyKyspdChlW3JdLHIsZSk7PQplbHNle3ZhciBzPTNEcC5rZXlz KGUpO2ZvcihyPTNEMCxpPTNEcy5sZW5ndGg7cjxpO3IrKyl0KGVbc1tyXV0sc1tyXSxlKX1yZXQ9 CnVybiBlfSxwLm1hcD0zRHAuY29sbGVjdD0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNEPTNEbnVs bClyZXR1cm5bXTt0PTNEcC5pdD0KZXJhdGVlKHQsbik7dmFyIHI9M0RlLmxlbmd0aCE9M0Q9M0Qr ZS5sZW5ndGgmJnAua2V5cyhlKSxpPTNEKHJ8fGUpLmxlbmd0aCxzPQo9M0RBcnJheShpKSxvO2Zv cih2YXIgdT0zRDA7dTxpO3UrKylvPTNEcj9yW3VdOnUsc1t1XT0zRHQoZVtvXSxvLGUpO3JldHVy biA9CnN9O3ZhciB2PTNEIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFs dWUiO3AucmVkdWNlPTNEcC5mb2xkbD0KPTNEcC5pbmplY3Q9M0RmdW5jdGlvbihlLHQsbixyKXtl PTNEPTNEbnVsbCYmKGU9M0RbXSksdD0zRGQodCxyLDQpO3ZhciBpPTNEPQplLmxlbmd0aCE9M0Q9 M0QrZS5sZW5ndGgmJnAua2V5cyhlKSxzPTNEKGl8fGUpLmxlbmd0aCxvPTNEMCx1O2lmKGFyZ3Vt ZW50cy49Cmxlbmd0aDwzKXtpZighcyl0aHJvdyBuZXcgVHlwZUVycm9yKHYpO249M0RlW2k/aVtv KytdOm8rK119Zm9yKDtvPHM7bysrKXU9Cj0zRGk/aVtvXTpvLG49M0R0KG4sZVt1XSx1LGUpO3Jl dHVybiBufSxwLnJlZHVjZVJpZ2h0PTNEcC5mb2xkcj0zRGZ1bmN0aW9uKD0KZSx0LG4scil7ZT0z RD0zRG51bGwmJihlPTNEW10pLHQ9M0RkKHQsciw0KTt2YXIgaT0zRGUubGVuZ3RoIT0zRD0zRCtl Lmxlbmd0PQpoJiZwLmtleXMoZSkscz0zRChpfHxlKS5sZW5ndGgsbztpZihhcmd1bWVudHMubGVu Z3RoPDMpe2lmKCFzKXRocm93IG5ldyBUeXA9CmVFcnJvcih2KTtuPTNEZVtpP2lbLS1zXTotLXNd fXdoaWxlKHMtLSlvPTNEaT9pW3NdOnMsbj0zRHQobixlW29dLG8sZSk7cmV0dT0Kcm4gbn0scC5m aW5kPTNEcC5kZXRlY3Q9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9M0RwLml0ZXJh dGVlKHQsbiksPQpwLnNvbWUoZSxmdW5jdGlvbihlLG4saSl7aWYodChlLG4saSkpcmV0dXJuIHI9 M0RlLCEwfSkscn0scC5maWx0ZXI9M0RwLnNlbGU9CmN0PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciBy PTNEW107cmV0dXJuIGU9M0Q9M0RudWxsP3I6KHQ9M0RwLml0ZXJhdGVlKHQsbikscD0KLmVhY2go ZSxmdW5jdGlvbihlLG4saSl7dChlLG4saSkmJnIucHVzaChlKX0pLHIpfSxwLnJlamVjdD0zRGZ1 bmN0aW9uKGUsdCxuPQope3JldHVybiBwLmZpbHRlcihlLHAubmVnYXRlKHAuaXRlcmF0ZWUodCkp LG4pfSxwLmV2ZXJ5PTNEcC5hbGw9M0RmdW5jdGlvbig9CmUsdCxuKXtpZihlPTNEPTNEbnVsbCly ZXR1cm4hMDt0PTNEcC5pdGVyYXRlZSh0LG4pO3ZhciByPTNEZS5sZW5ndGghPTNEPTNEKz0KZS5s ZW5ndGgmJnAua2V5cyhlKSxpPTNEKHJ8fGUpLmxlbmd0aCxzLG87Zm9yKHM9M0QwO3M8aTtzKysp e289M0RyP3Jbc106cztpPQpmKCF0KGVbb10sbyxlKSlyZXR1cm4hMX1yZXR1cm4hMH0scC5zb21l PTNEcC5hbnk9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0KPTNEbnVsbClyZXR1cm4hMTt0PTNE cC5pdGVyYXRlZSh0LG4pO3ZhciByPTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtlPQp5 cyhlKSxpPTNEKHJ8fGUpLmxlbmd0aCxzLG87Zm9yKHM9M0QwO3M8aTtzKyspe289M0RyP3Jbc106 cztpZih0KGVbb10sbyxlKSk9CnJldHVybiEwfXJldHVybiExfSxwLmNvbnRhaW5zPTNEcC5pbmNs dWRlPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0zRD0zRG51bD0KbD8hMTooZS5sZW5ndGghPTNE PTNEK2UubGVuZ3RoJiYoZT0zRHAudmFsdWVzKGUpKSxwLmluZGV4T2YoZSx0KT49M0QwKX0scC5p PQpudm9rZT0zRGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RvLmNhbGwoYXJndW1lbnRzLDIpLHI9M0Rw LmlzRnVuY3Rpb24odCk7cmV0dXI9Cm4gcC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm4ocj90OmVb dF0pLmFwcGx5KGUsbil9KX0scC5wbHVjaz0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gcC5tYXAo ZSxwLnByb3BlcnR5KHQpKX0scC53aGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZmlsdGVy KGUsPQpwLm1hdGNoZXModCkpfSxwLmZpbmRXaGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAu ZmluZChlLHAubWF0Y2hlcyh0KSl9LHA9Ci5tYXg9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0Qt SW5maW5pdHksaT0zRC1JbmZpbml0eSxzLG87aWYodD0zRD0zRG51bGwmJj0KZSE9M0RudWxsKXtl PTNEZS5sZW5ndGg9M0Q9M0Q9M0QrZS5sZW5ndGg/ZTpwLnZhbHVlcyhlKTtmb3IodmFyIHU9M0Qw LGE9M0RlPQoubGVuZ3RoO3U8YTt1Kyspcz0zRGVbdV0scz5yJiYocj0zRHMpfWVsc2UgdD0zRHAu aXRlcmF0ZWUodCxuKSxwLmVhY2goZSxmdW49CmN0aW9uKGUsbixzKXtvPTNEdChlLG4scyk7aWYo bz5pfHxvPTNEPTNEPTNELUluZmluaXR5JiZyPTNEPTNEPTNELUluZmluaXR5KT0Kcj0zRGUsaT0z RG99KTtyZXR1cm4gcn0scC5taW49M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0RJbmZpbml0eSxp PTNESW5maW5pPQp0eSxzLG87aWYodD0zRD0zRG51bGwmJmUhPTNEbnVsbCl7ZT0zRGUubGVuZ3Ro PTNEPTNEPTNEK2UubGVuZ3RoP2U6cC52YWx1ZXM9CihlKTtmb3IodmFyIHU9M0QwLGE9M0RlLmxl bmd0aDt1PGE7dSsrKXM9M0RlW3VdLHM8ciYmKHI9M0RzKX1lbHNlIHQ9M0RwLml0ZT0KcmF0ZWUo dCxuKSxwLmVhY2goZSxmdW5jdGlvbihlLG4scyl7bz0zRHQoZSxuLHMpO2lmKG88aXx8bz0zRD0z RD0zREluZmluaXR5PQomJnI9M0Q9M0Q9M0RJbmZpbml0eSlyPTNEZSxpPTNEb30pO3JldHVybiBy fSxwLnNodWZmbGU9M0RmdW5jdGlvbihlKXt2YXIgdD0KPTNEZSYmZS5sZW5ndGg9M0Q9M0Q9M0Qr ZS5sZW5ndGg/ZTpwLnZhbHVlcyhlKSxuPTNEdC5sZW5ndGgscj0zREFycmF5KG4pO2ZvPQpyKHZh ciBpPTNEMCxzO2k8bjtpKyspcz0zRHAucmFuZG9tKDAsaSkscyE9M0Q9M0RpJiYocltpXT0zRHJb c10pLHJbc109M0R0W2k9Cl07cmV0dXJuIHJ9LHAuc2FtcGxlPTNEZnVuY3Rpb24oZSx0LG4pe3Jl dHVybiB0PTNEPTNEbnVsbHx8bj8oZS5sZW5ndGghPTNEPQo9M0QrZS5sZW5ndGgmJihlPTNEcC52 YWx1ZXMoZSkpLGVbcC5yYW5kb20oZS5sZW5ndGgtMSldKTpwLnNodWZmbGUoZSkuc2xpY2U9Cigw LE1hdGgubWF4KDAsdCkpfSxwLnNvcnRCeT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0zRHAu aXRlcmF0ZWUodCxuKSxwLj0KcGx1Y2socC5tYXAoZSxmdW5jdGlvbihlLG4scil7cmV0dXJue3Zh bHVlOmUsaW5kZXg6bixjcml0ZXJpYTp0KGUsbixyKX19KS5zPQpvcnQoZnVuY3Rpb24oZSx0KXt2 YXIgbj0zRGUuY3JpdGVyaWEscj0zRHQuY3JpdGVyaWE7aWYobiE9M0Q9M0RyKXtpZihuPnJ8fG49 Cj0zRD0zRD0zRHZvaWQgMClyZXR1cm4gMTtpZihuPHJ8fHI9M0Q9M0Q9M0R2b2lkIDApcmV0dXJu LTF9cmV0dXJuIGUuaW5kZXgtdD0KLmluZGV4fSksInZhbHVlIil9O3ZhciBtPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgaT0zRHt9O3JlPQp0dXJuIG49M0RwLml0ZXJh dGVlKG4scikscC5lYWNoKHQsZnVuY3Rpb24ocixzKXt2YXIgbz0zRG4ocixzLHQpO2UoaSxyLG8p fSk9CixpfX07cC5ncm91cEJ5PTNEbShmdW5jdGlvbihlLHQsbil7cC5oYXMoZSxuKT9lW25dLnB1 c2godCk6ZVtuXT0zRFt0XX0pLHAuaT0KbmRleEJ5PTNEbShmdW5jdGlvbihlLHQsbil7ZVtuXT0z RHR9KSxwLmNvdW50Qnk9M0RtKGZ1bmN0aW9uKGUsdCxuKXtwLmhhcyhlPQosbik/ZVtuXSsrOmVb bl09M0QxfSkscC5zb3J0ZWRJbmRleD0zRGZ1bmN0aW9uKGUsdCxuLHIpe249M0RwLml0ZXJhdGVl KG4sciw9CjEpO3ZhciBpPTNEbih0KSxzPTNEMCxvPTNEZS5sZW5ndGg7d2hpbGUoczxvKXt2YXIg dT0zRHMrbz4+PjE7bihlW3VdKTxpP3M9Cj0zRHUrMTpvPTNEdX1yZXR1cm4gc30scC50b0FycmF5 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU/cC5pc0FycmF5KGUpP28uY2FsbD0KKGUpOmUubGVuZ3Ro PTNEPTNEPTNEK2UubGVuZ3RoP3AubWFwKGUscC5pZGVudGl0eSk6cC52YWx1ZXMoZSk6W119LHAu c2l6ZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9M0Q9M0RudWxsPzA6ZS5sZW5ndGg9M0Q9M0Q9 M0QrZS5sZW5ndGg/ZS5sZW5ndGg6cC5rPQpleXMoZSkubGVuZ3RofSxwLnBhcnRpdGlvbj0zRGZ1 bmN0aW9uKGUsdCxuKXt0PTNEcC5pdGVyYXRlZSh0LG4pO3ZhciByPTNEW109CixpPTNEW107cmV0 dXJuIHAuZWFjaChlLGZ1bmN0aW9uKGUsbixzKXsodChlLG4scyk/cjppKS5wdXNoKGUpfSksW3Is aV19LHAuZj0KaXJzdD0zRHAuaGVhZD0zRHAudGFrZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g ZT0zRD0zRG51bGw/dm9pZCAwOnQ9M0Q9M0RuPQp1bGx8fG4/ZVswXTp0PDA/W106by5jYWxsKGUs MCx0KX0scC5pbml0aWFsPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLmNhbGw9CihlLDAsTWF0 aC5tYXgoMCxlLmxlbmd0aC0odD0zRD0zRG51bGx8fG4/MTp0KSkpfSxwLmxhc3Q9M0RmdW5jdGlv bihlLHQsbil7cj0KZXR1cm4gZT0zRD0zRG51bGw/dm9pZCAwOnQ9M0Q9M0RudWxsfHxuP2VbZS5s ZW5ndGgtMV06by5jYWxsKGUsTWF0aC5tYXgoZS5sPQplbmd0aC10LDApKX0scC5yZXN0PTNEcC50 YWlsPTNEcC5kcm9wPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLmNhbGwoZSx0PQo9M0Q9M0Ru dWxsfHxuPzE6dCl9LHAuY29tcGFjdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmZpbHRlcihlLHAu aWRlbnRpdHkpfTs9CnZhciBnPTNEZnVuY3Rpb24oZSx0LG4scil7aWYodCYmcC5ldmVyeShlLHAu aXNBcnJheSkpcmV0dXJuIHUuYXBwbHkocixlKTtmbz0Kcih2YXIgaT0zRDAsbz0zRGUubGVuZ3Ro O2k8bztpKyspe3ZhciBhPTNEZVtpXTshcC5pc0FycmF5KGEpJiYhcC5pc0FyZ3VtZW50PQpzKGEp P258fHIucHVzaChhKTp0P3MuYXBwbHkocixhKTpnKGEsdCxuLHIpfXJldHVybiByfTtwLmZsYXR0 ZW49M0RmdW5jdGlvbig9CmUsdCl7cmV0dXJuIGcoZSx0LCExLFtdKX0scC53aXRob3V0PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIHAuZGlmZmVyZW5jZShlLG8uYz0KYWxsKGFyZ3VtZW50cywxKSl9LHAu dW5pcT0zRHAudW5pcXVlPTNEZnVuY3Rpb24oZSx0LG4scil7aWYoZT0zRD0zRG51bGwpcmV0PQp1 cm5bXTtwLmlzQm9vbGVhbih0KXx8KHI9M0RuLG49M0R0LHQ9M0QhMSksbiE9M0RudWxsJiYobj0z RHAuaXRlcmF0ZWUobixyKSk9Cjt2YXIgaT0zRFtdLHM9M0RbXTtmb3IodmFyIG89M0QwLHU9M0Rl Lmxlbmd0aDtvPHU7bysrKXt2YXIgYT0zRGVbb107aWYodCkoIT0Kb3x8cyE9M0Q9M0RhKSYmaS5w dXNoKGEpLHM9M0RhO2Vsc2UgaWYobil7dmFyIGY9M0RuKGEsbyxlKTtwLmluZGV4T2YocyxmKTww PQomJihzLnB1c2goZiksaS5wdXNoKGEpKX1lbHNlIHAuaW5kZXhPZihpLGEpPDAmJmkucHVzaChh KX1yZXR1cm4gaX0scC51bmlvbj0KPTNEZnVuY3Rpb24oKXtyZXR1cm4gcC51bmlxKGcoYXJndW1l bnRzLCEwLCEwLFtdKSl9LHAuaW50ZXJzZWN0aW9uPTNEZnVuY3RpPQpvbihlKXtpZihlPTNEPTNE bnVsbClyZXR1cm5bXTt2YXIgdD0zRFtdLG49M0Rhcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgcj0z RDA9CixpPTNEZS5sZW5ndGg7cjxpO3IrKyl7dmFyIHM9M0RlW3JdO2lmKHAuY29udGFpbnModCxz KSljb250aW51ZTtmb3IodmFyIG89Cj0zRDE7bzxuO28rKylpZighcC5jb250YWlucyhhcmd1bWVu dHNbb10scykpYnJlYWs7bz0zRD0zRD0zRG4mJnQucHVzaChzKX1yZT0KdHVybiB0fSxwLmRpZmZl cmVuY2U9M0RmdW5jdGlvbihlKXt2YXIgdD0zRGcoby5jYWxsKGFyZ3VtZW50cywxKSwhMCwhMCxb XSk7PQpyZXR1cm4gcC5maWx0ZXIoZSxmdW5jdGlvbihlKXtyZXR1cm4hcC5jb250YWlucyh0LGUp fSl9LHAuemlwPTNEZnVuY3Rpb24oZSk9CntpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt2YXIgdD0z RHAubWF4KGFyZ3VtZW50cywibGVuZ3RoIikubGVuZ3RoLG49M0RBcnJheT0KKHQpO2Zvcih2YXIg cj0zRDA7cjx0O3IrKyluW3JdPTNEcC5wbHVjayhhcmd1bWVudHMscik7cmV0dXJuIG59LHAub2Jq ZWN0PTNEPQpmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0RudWxsKXJldHVybnt9O3ZhciBuPTNEe307 Zm9yKHZhciByPTNEMCxpPTNEZS5sZW5ndGg9CjtyPGk7cisrKXQ/bltlW3JdXT0zRHRbcl06bltl W3JdWzBdXT0zRGVbcl1bMV07cmV0dXJuIG59LHAuaW5kZXhPZj0zRGZ1bmN0aT0Kb24oZSx0LG4p e2lmKGU9M0Q9M0RudWxsKXJldHVybi0xO3ZhciByPTNEMCxpPTNEZS5sZW5ndGg7aWYobil7aWYo dHlwZW9mIG4hPQo9M0QibnVtYmVyIilyZXR1cm4gcj0zRHAuc29ydGVkSW5kZXgoZSx0KSxlW3Jd PTNEPTNEPTNEdD9yOi0xO3I9M0RuPDA/TWF0aC49Cm1heCgwLGkrbik6bn1mb3IoO3I8aTtyKysp aWYoZVtyXT0zRD0zRD0zRHQpcmV0dXJuIHI7cmV0dXJuLTF9LHAubGFzdEluZGV4Tz0KZj0zRGZ1 bmN0aW9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRGUubGVuZ3RoO3R5 cGVvZiBuPTNEPTNEPQoibnVtYmVyIiYmKHI9M0RuPDA/cituKzE6TWF0aC5taW4ocixuKzEpKTt3 aGlsZSgtLXI+PTNEMClpZihlW3JdPTNEPTNEPTNEdCk9CnJldHVybiByO3JldHVybi0xfSxwLnJh bmdlPTNEZnVuY3Rpb24oZSx0LG4pe2FyZ3VtZW50cy5sZW5ndGg8PTNEMSYmKHQ9M0RlfD0KfDAs ZT0zRDApLG49M0RufHwxO3ZhciByPTNETWF0aC5tYXgoTWF0aC5jZWlsKCh0LWUpL24pLDApLGk9 M0RBcnJheShyKTtmb3IoPQp2YXIgcz0zRDA7czxyO3MrKyxlKz0zRG4paVtzXT0zRGU7cmV0dXJu IGl9O3ZhciB5PTNEZnVuY3Rpb24oKXt9O3AuYmluZD0zRGY9CnVuY3Rpb24oZSx0KXt2YXIgbixy O2lmKGgmJmUuYmluZD0zRD0zRD0zRGgpcmV0dXJuIGguYXBwbHkoZSxvLmNhbGwoYXJndW1lbj0K dHMsMSkpO2lmKCFwLmlzRnVuY3Rpb24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0 IGJlIGNhbGxlZCBvbiBhIGZ1PQpuY3Rpb24iKTtyZXR1cm4gbj0zRG8uY2FsbChhcmd1bWVudHMs Mikscj0zRGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIHI9Cil7eS5wcm90b3R5cGU9M0Rl LnByb3RvdHlwZTt2YXIgaT0zRG5ldyB5O3kucHJvdG90eXBlPTNEbnVsbDt2YXIgcz0zRGUuYXBw bD0KeShpLG4uY29uY2F0KG8uY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIHAuaXNPYmplY3Qocyk/ czppfXJldHVybiBlLmFwcGx5KHQsPQpuLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkpfSxyfSxw LnBhcnRpYWw9M0RmdW5jdGlvbihlKXt2YXIgdD0zRG8uY2FsbChhcmc9CnVtZW50cywxKTtyZXR1 cm4gZnVuY3Rpb24oKXt2YXIgbj0zRDAscj0zRHQuc2xpY2UoKTtmb3IodmFyIGk9M0QwLHM9M0Ry Lmxlbj0KZ3RoO2k8cztpKyspcltpXT0zRD0zRD0zRHAmJihyW2ldPTNEYXJndW1lbnRzW24rK10p O3doaWxlKG48YXJndW1lbnRzLmxlbmd0PQpoKXIucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJu IGUuYXBwbHkodGhpcyxyKX19LHAuYmluZEFsbD0zRGZ1bmN0aW9uKGUpe3Y9CmFyIHQsbj0zRGFy Z3VtZW50cy5sZW5ndGgscjtpZihuPD0zRDEpdGhyb3cgbmV3IEVycm9yKCJiaW5kQWxsIG11c3Qg YmUgcGFzcz0KZWQgZnVuY3Rpb24gbmFtZXMiKTtmb3IodD0zRDE7dDxuO3QrKylyPTNEYXJndW1l bnRzW3RdLGVbcl09M0RwLmJpbmQoZVtyXSxlPQopO3JldHVybiBlfSxwLm1lbW9pemU9M0RmdW5j dGlvbihlLHQpe3ZhciBuPTNEZnVuY3Rpb24ocil7dmFyIGk9M0RuLmNhY2hlLHM9Cj0zRHQ/dC5h cHBseSh0aGlzLGFyZ3VtZW50cyk6cjtyZXR1cm4gcC5oYXMoaSxzKXx8KGlbc109M0RlLmFwcGx5 KHRoaXMsYXJndT0KbWVudHMpKSxpW3NdfTtyZXR1cm4gbi5jYWNoZT0zRHt9LG59LHAuZGVsYXk9 M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEby5jYWxsPQooYXJndW1lbnRzLDIpO3JldHVybiBzZXRU aW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxuKX0sdCl9LHAuZGU9CmZlcj0z RGZ1bmN0aW9uKGUpe3JldHVybiBwLmRlbGF5LmFwcGx5KHAsW2UsMV0uY29uY2F0KG8uY2FsbChh cmd1bWVudHMsMSkpKT0KfSxwLnRocm90dGxlPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxv PTNEbnVsbCx1PTNEMDtufHwobj0zRHt9KTt2YXIgYT0KPTNEZnVuY3Rpb24oKXt1PTNEbi5sZWFk aW5nPTNEPTNEPTNEITE/MDpwLm5vdygpLG89M0RudWxsLHM9M0RlLmFwcGx5KHIsaSksPQpvfHwo cj0zRGk9M0RudWxsKX07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9M0RwLm5vdygpOyF1JiZuLmxl YWRpbmc9M0Q9M0Q9M0Q9CiExJiYodT0zRGYpO3ZhciBsPTNEdC0oZi11KTtyZXR1cm4gcj0zRHRo aXMsaT0zRGFyZ3VtZW50cyxsPD0zRDB8fGw+dD8oY2xlYT0KclRpbWVvdXQobyksbz0zRG51bGws dT0zRGYscz0zRGUuYXBwbHkocixpKSxvfHwocj0zRGk9M0RudWxsKSk6IW8mJm4udHJhaWxpPQpu ZyE9M0Q9M0QhMSYmKG89M0RzZXRUaW1lb3V0KGEsbCkpLHN9fSxwLmRlYm91bmNlPTNEZnVuY3Rp b24oZSx0LG4pe3ZhciByLGk9CixzLG8sdSxhPTNEZnVuY3Rpb24oKXt2YXIgZj0zRHAubm93KCkt bztmPHQmJmY+MD9yPTNEc2V0VGltZW91dChhLHQtZik6KHI9Cj0zRG51bGwsbnx8KHU9M0RlLmFw cGx5KHMsaSkscnx8KHM9M0RpPTNEbnVsbCkpKX07cmV0dXJuIGZ1bmN0aW9uKCl7cz0zRHRoaT0K cyxpPTNEYXJndW1lbnRzLG89M0RwLm5vdygpO3ZhciBmPTNEbiYmIXI7cmV0dXJuIHJ8fChyPTNE c2V0VGltZW91dChhLHQpKSxmPQomJih1PTNEZS5hcHBseShzLGkpLHM9M0RpPTNEbnVsbCksdX19 LHAud3JhcD0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAucGFydGk9CmFsKHQsZSl9LHAubmVnYXRl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodGhpcyxhcmd1 bT0KZW50cyl9fSxwLmNvbXBvc2U9M0RmdW5jdGlvbigpe3ZhciBlPTNEYXJndW1lbnRzLHQ9M0Rl Lmxlbmd0aC0xO3JldHVybiBmdW5jPQp0aW9uKCl7dmFyIG49M0R0LHI9M0RlW3RdLmFwcGx5KHRo aXMsYXJndW1lbnRzKTt3aGlsZShuLS0pcj0zRGVbbl0uY2FsbCh0aGk9CnMscik7cmV0dXJuIHJ9 fSxwLmFmdGVyPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1 cm4gdD0KLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHAuYmVmb3JlPTNEZnVuY3Rpb24oZSx0KXt2 YXIgbjtyZXR1cm4gZnVuY3Rpb24oKXtyPQpldHVybi0tZT4wP249M0R0LmFwcGx5KHRoaXMsYXJn dW1lbnRzKTp0PTNEbnVsbCxufX0scC5vbmNlPTNEcC5wYXJ0aWFsKHAuYmU9CmZvcmUsMikscC5r ZXlzPTNEZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuW107aWYoYylyZXR1cm4g YyhlKTt2YT0KciB0PTNEW107Zm9yKHZhciBuIGluIGUpcC5oYXMoZSxuKSYmdC5wdXNoKG4pO3Jl dHVybiB0fSxwLnZhbHVlcz0zRGZ1bmN0aW9uPQooZSl7dmFyIHQ9M0RwLmtleXMoZSksbj0zRHQu bGVuZ3RoLHI9M0RBcnJheShuKTtmb3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0KPTNEZVt0W2ld XTtyZXR1cm4gcn0scC5wYWlycz0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEcC5rZXlzKGUpLG49M0R0 Lmxlbmd0aCxyPQo9M0RBcnJheShuKTtmb3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0zRFt0W2ld LGVbdFtpXV1dO3JldHVybiByfSxwLmludmVydD0KPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R7fSxu PTNEcC5rZXlzKGUpO2Zvcih2YXIgcj0zRDAsaT0zRG4ubGVuZ3RoO3I8aTtyKyspPQp0W2Vbblty XV1dPTNEbltyXTtyZXR1cm4gdH0scC5mdW5jdGlvbnM9M0RwLm1ldGhvZHM9M0RmdW5jdGlvbihl KXt2YXIgdD0zRFs9Cl07Zm9yKHZhciBuIGluIGUpcC5pc0Z1bmN0aW9uKGVbbl0pJiZ0LnB1c2go bik7cmV0dXJuIHQuc29ydCgpfSxwLmV4dGVuZD0zRD0KZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmpl Y3QoZSkpcmV0dXJuIGU7dmFyIHQsbjtmb3IodmFyIHI9M0QxLGk9M0Rhcmd1bWVudHMuPQpsZW5n dGg7cjxpO3IrKyl7dD0zRGFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KWYuY2FsbCh0LG4pJiYoZVtu XT0zRHRbbl0pfXJldHU9CnJuIGV9LHAucGljaz0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRHt9 LGk7aWYoZT0zRD0zRG51bGwpcmV0dXJuIHI7aWYocC5pcz0KRnVuY3Rpb24odCkpe3Q9M0RkKHQs bik7Zm9yKGkgaW4gZSl7dmFyIHM9M0RlW2ldO3QocyxpLGUpJiYocltpXT0zRHMpfX1lbHNlPQp7 dmFyIGE9M0R1LmFwcGx5KFtdLG8uY2FsbChhcmd1bWVudHMsMSkpO2U9M0RuZXcgT2JqZWN0KGUp O2Zvcih2YXIgZj0zRDAsbD0KPTNEYS5sZW5ndGg7ZjxsO2YrKylpPTNEYVtmXSxpIGluIGUmJihy W2ldPTNEZVtpXSl9cmV0dXJuIHJ9LHAub21pdD0zRGZ1bmN0PQppb24oZSx0LG4pe2lmKHAuaXNG dW5jdGlvbih0KSl0PTNEcC5uZWdhdGUodCk7ZWxzZXt2YXIgcj0zRHAubWFwKHUuYXBwbHkoW109 CixvLmNhbGwoYXJndW1lbnRzLDEpKSxTdHJpbmcpO3Q9M0RmdW5jdGlvbihlLHQpe3JldHVybiFw LmNvbnRhaW5zKHIsdCl9fXJldD0KdXJuIHAucGljayhlLHQsbil9LHAuZGVmYXVsdHM9M0RmdW5j dGlvbihlKXtpZighcC5pc09iamVjdChlKSlyZXR1cm4gZTtmb3IoPQp2YXIgdD0zRDEsbj0zRGFy Z3VtZW50cy5sZW5ndGg7dDxuO3QrKyl7dmFyIHI9M0Rhcmd1bWVudHNbdF07Zm9yKHZhciBpIGlu IHI9CillW2ldPTNEPTNEPTNEdm9pZCAwJiYoZVtpXT0zRHJbaV0pfXJldHVybiBlfSxwLmNsb25l PTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KcC5pc09iamVjdChlKT9wLmlzQXJyYXkoZSk/ZS5zbGlj ZSgpOnAuZXh0ZW5kKHt9LGUpOmV9LHAudGFwPTNEZnVuY3Rpb24oZSx0PQope3JldHVybiB0KGUp LGV9O3ZhciBiPTNEZnVuY3Rpb24oZSx0LG4scil7aWYoZT0zRD0zRD0zRHQpcmV0dXJuIGUhPTNE PTNEMHw9CnwxL2U9M0Q9M0Q9M0QxL3Q7aWYoZT0zRD0zRG51bGx8fHQ9M0Q9M0RudWxsKXJldHVy biBlPTNEPTNEPTNEdDtlIGluc3RhbmNlbz0KZiBwJiYoZT0zRGUuX3dyYXBwZWQpLHQgaW5zdGFu Y2VvZiBwJiYodD0zRHQuX3dyYXBwZWQpO3ZhciBpPTNEYS5jYWxsKGUpO2lmPQooaSE9M0Q9M0Rh LmNhbGwodCkpcmV0dXJuITE7c3dpdGNoKGkpe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltv YmplY3QgU3Q9CnJpbmddIjpyZXR1cm4iIitlPTNEPTNEIiIrdDtjYXNlIltvYmplY3QgTnVtYmVy XSI6aWYoK2UhPTNEPTNEK2UpcmV0dXJuK3QhPQo9M0Q9M0QrdDtyZXR1cm4rZT0zRD0zRD0zRDA/ MS8rZT0zRD0zRD0zRDEvdDorZT0zRD0zRD0zRCt0O2Nhc2UiW29iamVjdCBEYXQ9CmVdIjpjYXNl IltvYmplY3QgQm9vbGVhbl0iOnJldHVybitlPTNEPTNEPTNEK3R9aWYodHlwZW9mIGUhPTNEIm9i amVjdCJ8fHR5cD0KZW9mIHQhPTNEIm9iamVjdCIpcmV0dXJuITE7dmFyIHM9M0RuLmxlbmd0aDt3 aGlsZShzLS0paWYobltzXT0zRD0zRD0zRGUpcmV0PQp1cm4gcltzXT0zRD0zRD0zRHQ7dmFyIG89 M0RlLmNvbnN0cnVjdG9yLHU9M0R0LmNvbnN0cnVjdG9yO2lmKG8hPTNEPTNEdSYmImM9Cm9uc3Ry dWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEocC5pc0Z1bmN0aW9uKG8pJiZvIGluc3Rh bmNlb2YgbyYmcC5pcz0KRnVuY3Rpb24odSkmJnUgaW5zdGFuY2VvZiB1KSlyZXR1cm4hMTtuLnB1 c2goZSksci5wdXNoKHQpO3ZhciBmLGw7aWYoaT0zRD0KPTNEPTNEIltvYmplY3QgQXJyYXldIil7 Zj0zRGUubGVuZ3RoLGw9M0RmPTNEPTNEPTNEdC5sZW5ndGg7aWYobCl3aGlsZShmLS0pPQppZigh KGw9M0RiKGVbZl0sdFtmXSxuLHIpKSlicmVha31lbHNle3ZhciBjPTNEcC5rZXlzKGUpLGg7Zj0z RGMubGVuZ3RoLGw9M0Q9CnAua2V5cyh0KS5sZW5ndGg9M0Q9M0Q9M0RmO2lmKGwpd2hpbGUoZi0t KXtoPTNEY1tmXTtpZighKGw9M0RwLmhhcyh0LGgpJiZiKD0KZVtoXSx0W2hdLG4scikpKWJyZWFr fX1yZXR1cm4gbi5wb3AoKSxyLnBvcCgpLGx9O3AuaXNFcXVhbD0zRGZ1bmN0aW9uKGUsdCl7PQpy ZXR1cm4gYihlLHQsW10sW10pfSxwLmlzRW1wdHk9M0RmdW5jdGlvbihlKXtpZihlPTNEPTNEbnVs bClyZXR1cm4hMDtpZihwLmk9CnNBcnJheShlKXx8cC5pc1N0cmluZyhlKXx8cC5pc0FyZ3VtZW50 cyhlKSlyZXR1cm4gZS5sZW5ndGg9M0Q9M0Q9M0QwO2Zvcih2YT0KciB0IGluIGUpaWYocC5oYXMo ZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0scC5pc0VsZW1lbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4h PQohZSYmZS5ub2RlVHlwZT0zRD0zRD0zRDF9LHAuaXNBcnJheT0zRGx8fGZ1bmN0aW9uKGUpe3Jl dHVybiBhLmNhbGwoZSk9M0Q9M0Q9Cj0zRCJbb2JqZWN0IEFycmF5XSJ9LHAuaXNPYmplY3Q9M0Rm dW5jdGlvbihlKXt2YXIgdD0zRHR5cGVvZiBlO3JldHVybiB0PTNEPQo9M0Q9M0QiZnVuY3Rpb24i fHx0PTNEPTNEPTNEIm9iamVjdCImJiEhZX0scC5lYWNoKFsiQXJndW1lbnRzIiwiRnVuY3Rpb24i LCI9ClN0cmluZyIsIk51bWJlciIsIkRhdGUiLCJSZWdFeHAiXSxmdW5jdGlvbihlKXtwWyJpcyIr ZV09M0RmdW5jdGlvbih0KXtyZXR1cj0KbiBhLmNhbGwodCk9M0Q9M0Q9M0QiW29iamVjdCAiK2Ur Il0ifX0pLHAuaXNBcmd1bWVudHMoYXJndW1lbnRzKXx8KHAuaXNBcmd1PQptZW50cz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBwLmhhcyhlLCJjYWxsZWUiKX0pLHR5cGVvZiAvLi8hPTNEImZ1bmN0aW9u IiYmKHA9Ci5pc0Z1bmN0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPTNEPTNEImZ1 bmN0aW9uInx8ITF9KSxwLmlzRmluaXRlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUo ZSkmJiFpc05hTihwYXJzZUZsb2F0KGUpKX0scC5pc05hTj0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJu IHAuaXNOdW1iZXIoZSkmJmUhPTNEPTNEK2V9LHAuaXNCb29sZWFuPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGU9Cj0zRD0zRD0zRCEwfHxlPTNEPTNEPTNEITF8fGEuY2FsbChlKT0zRD0zRD0zRCJbb2Jq ZWN0IEJvb2xlYW5dIn0scC5pc051bGw9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEPTNEPTNE bnVsbH0scC5pc1VuZGVmaW5lZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPQo9M0Q9M0Q9M0R2b2lk IDB9LHAuaGFzPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSE9M0RudWxsJiZmLmNhbGwoZSx0KX0s cC5ub0M9Cm9uZmxpY3Q9M0RmdW5jdGlvbigpe3JldHVybiBlLl89M0R0LHRoaXN9LHAuaWRlbnRp dHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0KfSxwLmNvbnN0YW50PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fSxwLm5vb3A9M0RmdW5jdGlvbigpPQp7fSxwLnByb3Bl cnR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfX0scC5tYXRj aGVzPTNEZnU9Cm5jdGlvbihlKXt2YXIgdD0zRHAucGFpcnMoZSksbj0zRHQubGVuZ3RoO3JldHVy biBmdW5jdGlvbihlKXtpZihlPTNEPTNEbnVsbD0KKXJldHVybiFuO2U9M0RuZXcgT2JqZWN0KGUp O2Zvcih2YXIgcj0zRDA7cjxuO3IrKyl7dmFyIGk9M0R0W3JdLHM9M0RpWzBdO2lmPQooaVsxXSE9 M0Q9M0RlW3NdfHwhKHMgaW4gZSkpcmV0dXJuITF9cmV0dXJuITB9fSxwLnRpbWVzPTNEZnVuY3Rp b24oZSx0LG4pe3Y9CmFyIHI9M0RBcnJheShNYXRoLm1heCgwLGUpKTt0PTNEZCh0LG4sMSk7Zm9y KHZhciBpPTNEMDtpPGU7aSsrKXJbaV09M0R0KGkpOz0KcmV0dXJuIHJ9LHAucmFuZG9tPTNEZnVu Y3Rpb24oZSx0KXtyZXR1cm4gdD0zRD0zRG51bGwmJih0PTNEZSxlPTNEMCksZStNYXRoPQouZmxv b3IoTWF0aC5yYW5kb20oKSoodC1lKzEpKX0scC5ub3c9M0REYXRlLm5vd3x8ZnVuY3Rpb24oKXty ZXR1cm4obmV3IERhdGU9CikuZ2V0VGltZSgpfTt2YXIgdz0zRHsiJiI6IiZhbXA7IiwiPCI6IiZs dDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJj0KI3gyNzsiLCJgIjoiJiN4NjA7In0s RT0zRHAuaW52ZXJ0KHcpLFM9M0RmdW5jdGlvbihlKXt2YXIgdD0zRGZ1bmN0aW9uKHQpe3JlPQp0 dXJuIGVbdF19LG49M0QiKD86IitwLmtleXMoZSkuam9pbigifCIpKyIpIixyPTNEUmVnRXhwKG4p LGk9M0RSZWdFeHAobiwiZyI9Cik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEZT0zRD0z RG51bGw/IiI6IiIrZSxyLnRlc3QoZSk/ZS5yZXBsYWNlKGksdD0KKTplfX07cC5lc2NhcGU9M0RT KHcpLHAudW5lc2NhcGU9M0RTKEUpLHAucmVzdWx0PTNEZnVuY3Rpb24oZSx0KXtpZihlPTNEPTNE PQpudWxsKXJldHVybiB2b2lkIDA7dmFyIG49M0RlW3RdO3JldHVybiBwLmlzRnVuY3Rpb24obik/ ZVt0XSgpOm59O3ZhciB4PTNEMDs9CnAudW5pcXVlSWQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRCsr eCsiIjtyZXR1cm4gZT9lK3Q6dH0scC50ZW1wbGF0ZVNldHRpbmdzPQo9M0R7ZXZhbHVhdGU6Lzwl KFtcc1xTXSs/KSU+L2csaW50ZXJwb2xhdGU6LzwlPTNEKFtcc1xTXSs/KSU+L2csZXNjYXBlOi88 JS09CihbXHNcU10rPyklPi9nfTt2YXIgVD0zRC8oLileLyxOPTNEeyInIjoiJyIsIlxcIjoiXFwi LCJcciI6InIiLCJcbiI6Im4iLCJcdT0KMjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxD PTNEL1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAyOS9nLGs9M0RmdW5jdGlvPQpuKGUpe3JldHVybiJc XCIrTltlXX07cC50ZW1wbGF0ZT0zRGZ1bmN0aW9uKGUsdCxuKXshdCYmbiYmKHQ9M0RuKSx0PTNE cC5kZWY9CmF1bHRzKHt9LHQscC50ZW1wbGF0ZVNldHRpbmdzKTt2YXIgcj0zRFJlZ0V4cChbKHQu ZXNjYXBlfHxUKS5zb3VyY2UsKHQuaW50ZT0KcnBvbGF0ZXx8VCkuc291cmNlLCh0LmV2YWx1YXRl fHxUKS5zb3VyY2VdLmpvaW4oInwiKSsifCQiLCJnIiksaT0zRDAscz0zRCJfPQpfcCs9M0QnIjtl LnJlcGxhY2UocixmdW5jdGlvbih0LG4scixvLHUpe3JldHVybiBzKz0zRGUuc2xpY2UoaSx1KS5y ZXBsYWNlKEM9CixrKSxpPTNEdSt0Lmxlbmd0aCxuP3MrPTNEIicrXG4oKF9fdD0zRCgiK24rIikp PTNEPTNEbnVsbD8nJzpfLmVzY2FwZShfX3QpKT0KK1xuJyI6cj9zKz0zRCInK1xuKChfX3Q9M0Qo IityKyIpKT0zRD0zRG51bGw/Jyc6X190KStcbiciOm8mJihzKz0zRCInO1xuIitvPQorIlxuX19w Kz0zRCciKSx0fSkscys9M0QiJztcbiIsdC52YXJpYWJsZXx8KHM9M0Qid2l0aChvYmp8fHt9KXtc biIrcysifVxuIik9CixzPTNEInZhciBfX3QsX19wPTNEJycsX19qPTNEQXJyYXkucHJvdG90eXBl LmpvaW4scHJpbnQ9M0RmdW5jdGlvbigpe19fcCs9Cj0zRF9fai5jYWxsKGFyZ3VtZW50cywnJyk7 fTtcbiIrcysicmV0dXJuIF9fcDtcbiI7dHJ5e3ZhciBvPTNEbmV3IEZ1bmN0aW9uKD0KdC52YXJp YWJsZXx8Im9iaiIsIl8iLHMpfWNhdGNoKHUpe3Rocm93IHUuc291cmNlPTNEcyx1fXZhciBhPTNE ZnVuY3Rpb24oZSl7PQpyZXR1cm4gby5jYWxsKHRoaXMsZSxwKX0sZj0zRHQudmFyaWFibGV8fCJv YmoiO3JldHVybiBhLnNvdXJjZT0zRCJmdW5jdGlvbig9CiIrZisiKXtcbiIrcysifSIsYX0scC5j aGFpbj0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEcChlKTtyZXR1cm4gdC5fY2hhaW49M0QhMD0KLHR9 O3ZhciBMPTNEZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoYWluP3AoZSkuY2hhaW4oKTplfTtw Lm1peGluPTNEZnVuY3RpPQpvbihlKXtwLmVhY2gocC5mdW5jdGlvbnMoZSksZnVuY3Rpb24odCl7 dmFyIG49M0RwW3RdPTNEZVt0XTtwLnByb3RvdHlwZVt0XT0KPTNEZnVuY3Rpb24oKXt2YXIgZT0z RFt0aGlzLl93cmFwcGVkXTtyZXR1cm4gcy5hcHBseShlLGFyZ3VtZW50cyksTC5jYWxsKHRoPQpp cyxuLmFwcGx5KHAsZSkpfX0pfSxwLm1peGluKHApLHAuZWFjaChbInBvcCIsInB1c2giLCJyZXZl cnNlIiwic2hpZnQiLCJzb3I9CnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24oZSl7dmFy IHQ9M0RuW2VdO3AucHJvdG90eXBlW2VdPTNEZnVuY3Rpb24oKT0Ke3ZhciBuPTNEdGhpcy5fd3Jh cHBlZDtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyksKGU9M0Q9M0Q9M0Qic2hpZnQifHxlPTNE PQo9M0Q9M0Qic3BsaWNlIikmJm4ubGVuZ3RoPTNEPTNEPTNEMCYmZGVsZXRlIG5bMF0sTC5jYWxs KHRoaXMsbil9fSkscC5lYWNoKFs9CiJjb25jYXQiLCJqb2luIiwic2xpY2UiXSxmdW5jdGlvbihl KXt2YXIgdD0zRG5bZV07cC5wcm90b3R5cGVbZV09M0RmdW5jdGlvbj0KKCl7cmV0dXJuIEwuY2Fs bCh0aGlzLHQuYXBwbHkodGhpcy5fd3JhcHBlZCxhcmd1bWVudHMpKX19KSxwLnByb3RvdHlwZS52 YWx1PQplPTNEZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcHBlZH0sdHlwZW9mIGRlZmluZT0z RD0zRCJmdW5jdGlvbiImJmRlZmluZS49CmFtZCYmZGVmaW5lKCJ1bmRlcnNjb3JlIixbXSxmdW5j dGlvbigpe3JldHVybiBwfSl9LmNhbGwodGhpcyksZGVmaW5lKCJsaWJzLz0KdW5kZXJzY29yZSIs ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdHx8ZS5ffX0odGhp cykpLGRlPQpmaW5lKCJ1dGlscy91dGlscyIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5jdGlvbihl KXtmdW5jdGlvbiB0KGUpe3JldHVybiAkKCI9CjxkaXYvPiIpLnRleHQoZSkuaHRtbCgpfWZ1bmN0 aW9uIG4oZSl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRFtlXSk7Zm9yKHZhcj0KIHQgaW4gZSlp ZihbIk5vbmUiLG51bGwsIm51bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhPZihlW3Rd KT4tMSlyZXR1PQpybiExO3JldHVybiEwfWZ1bmN0aW9uIHIoZSl7dmFyIGU9M0RlLnRvU3RyaW5n KCk7aWYoZSl7ZT0zRGUucmVwbGFjZSgvLC9nLCI9CiwgIik7dmFyIHQ9M0RlLmxhc3RJbmRleE9m KCIsICIpO3JldHVybiB0IT0zRC0xJiYoZT0zRGUuc3Vic3RyKDAsdCkrIiBvciAiKz0KZS5zdWJz dHIodCsxKSksZX1yZXR1cm4iIn1mdW5jdGlvbiBpKGUpe3RvcC5fX3V0aWxzX19nZXRfXz0zRHRv cC5fX3V0aWxzX19nPQpldF9ffHx7fSxlLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bZS51cmxd PyhlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0b3AuX191dGk9CmxzX19nZXRfX1tlLnVybF0pLGNvbnNv bGUuZGVidWcoInV0aWxzLmpzOjpnZXQoKSAtIEZldGNoaW5nIGZyb20gY2FjaGUgWyIrZT0KLnVy bCsiXS4iKSk6cyh7dXJsOmUudXJsLGRhdGE6ZS5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dG9w Ll9fdXRpbHNfX2dldF9fPQpbZS51cmxdPTNEdCxlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0sZXJy b3I6ZnVuY3Rpb24odCl7ZS5lcnJvciYmZS5lcnJvcih0KX09Cn0pfWZ1bmN0aW9uIHMoZSl7dmFy IHQ9M0R7Y29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLHR5cGU6ZS50eXBlfHwiR0VUIj0K LGRhdGE6ZS5kYXRhfHx7fSx1cmw6ZS51cmx9O3QudHlwZT0zRD0zRCJHRVQifHx0LnR5cGU9M0Q9 M0QiREVMRVRFIj8odC51cmwuPQppbmRleE9mKCI/Iik9M0Q9M0QtMT90LnVybCs9M0QiPyI6dC51 cmwrPTNEIiYiLHQudXJsPTNEdC51cmwrJC5wYXJhbSh0LmRhdGE9CiksdC5kYXRhPTNEbnVsbCk6 KHQuZGF0YVR5cGU9M0QianNvbiIsdC51cmw9M0R0LnVybCx0LmRhdGE9M0RKU09OLnN0cmluZ2lm eT0KKHQuZGF0YSkpLCQuYWpheCh0KS5kb25lKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PTNEPTNE InN0cmluZyIpdHJ5e3Q9M0R0LnJlPQpwbGFjZSgiSW5maW5pdHksIiwnIkluZmluaXR5IiwnKSx0 PTNEalF1ZXJ5LnBhcnNlSlNPTih0KX1jYXRjaChuKXtjb25zb2xlLmQ9CmVidWcobil9ZS5zdWNj ZXNzJiZlLnN1Y2Nlc3ModCl9KS5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBuPTNEbnVsbDt0cnl7bj0z RGpRdT0KZXJ5LnBhcnNlSlNPTih0LnJlc3BvbnNlVGV4dCl9Y2F0Y2gocil7bj0zRHQucmVzcG9u c2VUZXh0fWUuZXJyb3ImJmUuZXJyb3IoPQpuLHQpfSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPTNE JCgnPGRpdiBjbGFzcz0zRCInK2UrJyI+PC9kaXY+Jyk7bi5hcHBlbmRUbyg9CiI6ZXEoMCkiKTt2 YXIgcj0zRG4uY3NzKHQpO3JldHVybiBuLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gdShlKXskKCdsaW5r W2hyZWZePQo9M0QiJytlKyciXScpLmxlbmd0aHx8JCgnPGxpbmsgaHJlZj0zRCInK2dhbGF4eV9j b25maWcucm9vdCtlKyciIHJlbD0zRCJzdHk9Cmxlc2hlZXQiPicpLmFwcGVuZFRvKCJoZWFkIil9 ZnVuY3Rpb24gYSh0LG4pe3JldHVybiB0P2UuZGVmYXVsdHModCxuKTpufWZ1bj0KY3Rpb24gZihl LHQpe3ZhciBuPTNEIiI7aWYoZT49M0QxZTExKWUvPTNEMWUxMSxuPTNEIlRCIjtlbHNlIGlmKGU+ PTNEMWU4KWUvPQo9M0QxZTgsbj0zRCJHQiI7ZWxzZSBpZihlPj0zRDFlNSllLz0zRDFlNSxuPTNE Ik1CIjtlbHNlIGlmKGU+PTNEMTAwKWUvPTNEMTA9CjAsbj0zRCJLQiI7ZWxzZXtpZighKGU+MCkp cmV0dXJuIjxzdHJvbmc+LTwvc3Ryb25nPiI7ZSo9M0QxMCxuPTNEImIifXZhciByPQo9M0RNYXRo LnJvdW5kKGUpLzEwO3JldHVybiB0P3IrIiAiK246IjxzdHJvbmc+IityKyI8L3N0cm9uZz4gIitu fWZ1bmN0aW9uIGw9Cigpe3JldHVybiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJz dHJpbmcoMiw5KX1mdW5jdGlvbiBjKGUpe3ZhciB0PQo9M0QkKCI8cD48L3A+Iik7cmV0dXJuIHQu YXBwZW5kKGUpLHR9ZnVuY3Rpb24gaCgpe3ZhciBlPTNEbmV3IERhdGUsdD0zRChlLmc9CmV0SG91 cnMoKTwxMD8iMCI6IiIpK2UuZ2V0SG91cnMoKSxuPTNEKGUuZ2V0TWludXRlcygpPDEwPyIwIjoi IikrZS5nZXRNaW51dD0KZXMoKSxyPTNEZS5nZXREYXRlKCkrIi8iKyhlLmdldE1vbnRoKCkrMSkr Ii8iK2UuZ2V0RnVsbFllYXIoKSsiLCAiK3QrIjoiK247PQpyZXR1cm4gcn1yZXR1cm57Y3NzTG9h ZEZpbGU6dSxjc3NHZXRBdHRyaWJ1dGU6byxnZXQ6aSxtZXJnZTphLGJ5dGVzVG9TdHJpbmc9Cjpm LHV1aWQ6bCx0aW1lOmgsd3JhcDpjLHJlcXVlc3Q6cyxzYW5pdGl6ZTp0LHRleHRpZnk6cix2YWxp ZGF0ZTpufX0pLGRlZmluZT0KKCJtdmMvdWkvdWktcG9ydGxldCIsWyJ1dGlscy91dGlscyJdLGZ1 bmN0aW9uKGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5leHRlPQpuZCh7dmlzaWJsZTohMSxvcHRp b25zRGVmYXVsdDp7dGl0bGU6IiIsaWNvbjoiIixidXR0b25zOm51bGwsYm9keTpudWxsLHNjcm89 CmxsYWJsZTohMCxub3BhZGRpbmc6ITEsb3BlcmF0aW9uczpudWxsLHBsYWNlbWVudDoiYm90dG9t IixjbHM6InVpLXBvcnRsZXQiLD0Kb3BlcmF0aW9uc19mbHQ6InJpZ2h0In0sJHRpdGxlOm51bGws JGNvbnRlbnQ6bnVsbCwkYnV0dG9uczpudWxsLCRvcGVyYXRpb25zPQo6bnVsbCwkaGVhZGVyOm51 bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5v cHQ9CmlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRp b25zKSksdGhpcy4kY29udGVudD0zRD0KdGhpcy4kZWwuZmluZCgiLmNvbnRlbnQiKSx0aGlzLiR0 aXRsZT0zRHRoaXMuJGVsLmZpbmQoIi5wb3J0bGV0LXRpdGxlLXRleHQiPQopLHRoaXMuJGhlYWRl cj0zRHRoaXMuJGVsLmZpbmQoIi5wb3J0bGV0LWhlYWRlciIpO3ZhciBuPTNEdGhpcy4kZWwuZmlu ZCgiLnA9Cm9ydGxldC1jb250ZW50Iik7dGhpcy5vcHRpb25zLnNjcm9sbGFibGU/bi5hZGRDbGFz cygic2Nyb2xsIik6dGhpcy5vcHRpb25zLj0KdGl0bGU/bi5hZGRDbGFzcygibm8tc2Nyb2xsIik6 bi5hZGRDbGFzcygibm8tc2Nyb2xsLW5vLXRpdGxlIiksdGhpcy5vcHRpb25zPQoubm9wYWRkaW5n JiYobi5jc3MoInBhZGRpbmciLCIwcHgiKSx0aGlzLiRjb250ZW50LmNzcygicGFkZGluZyIsIjBw eCIpKSx0aGk9CnMuJGJ1dHRvbnM9M0QkKHRoaXMuZWwpLmZpbmQoIi5idXR0b25zIik7aWYodGhp cy5vcHRpb25zLmJ1dHRvbnMpe3ZhciByPTNEdD0KaGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0 dG9ucyxmdW5jdGlvbihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRidXR0b25zPQouYXBwZW5k KHQuJGVsKX0pfWVsc2UgdGhpcy4kYnV0dG9ucy5yZW1vdmUoKTt0aGlzLiRvcGVyYXRpb25zPTNE JCh0aGlzLmVsKS49CmZpbmQoIi5vcGVyYXRpb25zIik7aWYodGhpcy5vcHRpb25zLm9wZXJhdGlv bnMpe3ZhciByPTNEdGhpczskLmVhY2godGhpcy5vcD0KdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlv bihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRvcGVyYXRpb25zLmFwcGVuZCh0LiRlPQpsKX0p fXRoaXMub3B0aW9ucy5ib2R5JiZ0aGlzLmFwcGVuZCh0aGlzLm9wdGlvbnMuYm9keSl9LGFwcGVu ZDpmdW5jdGlvbih0LG49Cil7bj90aGlzLiRjb250ZW50LmFwcGVuZCh0KTp0aGlzLiRjb250ZW50 LmFwcGVuZChlLndyYXAodCkpfSxjb250ZW50OmZ1bmN0aT0Kb24oKXtyZXR1cm4gdGhpcy4kY29u dGVudH0sc2hvdzpmdW5jdGlvbigpe3RoaXMuJGVsLmZhZGVJbigiZmFzdCIpLHRoaXMudmlzPQpp YmxlPTNEITB9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy52 aXNpYmxlPTNEITF9LGVuYWI9CmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuJGJ1dHRvbnMuZmlu ZCgiIyIrZSkucHJvcCgiZGlzYWJsZWQiLCExKX0sZGlzYWJsZT0KQnV0dG9uOmZ1bmN0aW9uKGUp e3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrZSkucHJvcCgiZGlzYWJsZWQiLCEwKX0saGlkZU9wZXJh PQp0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuJG9wZXJhdGlvbnMuZmluZCgiIyIrZSkuaGlkZSgpfSxz aG93T3BlcmF0aW9uOmZ1bmN0aW89Cm4oZSl7dGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitlKS5z aG93KCl9LHNldE9wZXJhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPQo9M0R0aGlzLiRvcGVyYXRp b25zLmZpbmQoIiMiK2UpO24ub2ZmKCJjbGljayIpLG4ub24oImNsaWNrIix0KX0sdGl0bGU6ZnVu Y3Q9CmlvbihlKXt2YXIgdD0zRHRoaXMuJHRpdGxlO3JldHVybiBlJiZ0Lmh0bWwoZSksdC5odG1s KCl9LF90ZW1wbGF0ZTpmdW5jdGlvbj0KKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJytlLmlkKyci IGNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1cm4gZS50aXRsZSYmKHQrPQo9M0QnPGRpdiBjbGFz cz0zRCJwb3J0bGV0LWhlYWRlciI+PGRpdiBjbGFzcz0zRCJvcGVyYXRpb25zIiBzdHlsZT0zRCJm bG9hdDo9CiAnK2Uub3BlcmF0aW9uc19mbHQrJzsiPjwvZGl2PicrJzxkaXYgY2xhc3M9M0QicG9y dGxldC10aXRsZSI+JyxlLmljb24mJih0Kz0KPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJytlLmlj b24rJyI+Jm5ic3A7PC9pPicpLHQrPTNEJzxzcGFuIGNsYXNzPTNEInBvcnRsPQpldC10aXRsZS10 ZXh0Ij4nK2UudGl0bGUrIjwvc3Bhbj4iKyI8L2Rpdj4iKyI8L2Rpdj4iKSx0Kz0zRCc8ZGl2IGNs YXNzPTNEInA9Cm9ydGxldC1jb250ZW50Ij4nLGUucGxhY2VtZW50PTNEPTNEInRvcCImJih0Kz0z RCc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZD0KaXY+JyksdCs9M0QnPGRpdiBjbGFzcz0zRCJj b250ZW50Ij48L2Rpdj4nLGUucGxhY2VtZW50PTNEPTNEImJvdHRvbSImJih0Kz0KPTNEJzxkaXYg Y2xhc3M9M0QiYnV0dG9ucyI+PC9kaXY+JyksdCs9M0QiPC9kaXY+PC9kaXY+Iix0fX0pO3JldHVy bntWaWV3OnR9PQp9KSxkZWZpbmUoIm12Yy91aS91aS1zZWxlY3QtZGVmYXVsdCIsWyJ1dGlscy91 dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEQmE9CmNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9u c0RlZmF1bHQ6e2lkOiIiLGNsczoiIixlcnJvcl90ZXh0OiJObyBkYXRhIGF2YWlsYT0KYmxlIix2 aXNpYmxlOiEwLHdhaXQ6ITEsbXVsdGlwbGU6ITEsc2VhcmNoYWJsZTohMX0saW5pdGlhbGl6ZTpm dW5jdGlvbih0KXt0PQpoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0 KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGU9Cih0aGlzLm9wdGlvbnMpKSx0aGlzLiRz ZWxlY3Q9M0R0aGlzLiRlbC5maW5kKCIuc2VsZWN0IiksdGhpcy4kaWNvbj0zRHRoaXMuJD0KZWwu ZmluZCgiLmljb24iKSx0aGlzLiRidXR0b249M0R0aGlzLiRlbC5maW5kKCIuYnV0dG9uIiksdGhp cy5vcHRpb25zLm11bHRpPQpwbGU/KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWx0aXBsZSIsITApLHRo aXMuJHNlbGVjdC5hZGRDbGFzcygidWktc2VsZWN0LW11bHQ9CmlwbGUiKSx0aGlzLiRpY29uLnJl bW92ZSgpKTp0aGlzLiRlbC5hZGRDbGFzcygidWktc2VsZWN0IiksdGhpcy51cGRhdGUodGhpcz0K Lm9wdGlvbnMuZGF0YSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52 YWx1ZSh0aGlzLm9wdGlvbnMuPQp2YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuaGlk ZSgpLHRoaXMub3B0aW9ucy53YWl0P3RoaXMud2FpdCgpOnRoaXM9Ci5zaG93KCk7dmFyIG49M0R0 aGlzO3RoaXMuJHNlbGVjdC5vbigiY2hhbmdlIixmdW5jdGlvbigpe24uX2NoYW5nZSgpfSksdGhp cz0KLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hhbmdlKCl9KX0sdmFsdWU6ZnVuY3Rpb24o ZSl7cmV0dXJuIGUhPTNEPTNEdW5kPQplZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGUpLHRoaXMu JHNlbGVjdC5zZWxlY3QyJiZ0aGlzLiRzZWxlY3Quc2VsZWN0MigidmE9CmwiLGUpKSx0aGlzLiRz ZWxlY3QudmFsKCl9LGZpcnN0OmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLiRzZWxlY3QuZmluZCgi b3B0aT0Kb24iKTtyZXR1cm4gZS5sZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0sdmFsaWRhdGU6 ZnVuY3Rpb24oKXtyZXR1cm4gZS52YWxpPQpkYXRlKHRoaXMudmFsdWUoKSl9LHRleHQ6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvbjpzZWxlY3Q9CmVkIikudGV4dCgp fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy51bndhaXQoKSx0aGlzLiRzZWxlY3Quc2hvdygpLHRoaXMu JGVsLnNobz0KdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSx3YWl0OmZ1bmN0 aW9uKCl7dGhpcy4kaWNvbi5yZW1vdmVDbGFzPQpzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmEg ZmEtc3Bpbm5lciBmYS1zcGluIil9LHVud2FpdDpmdW5jdGlvbigpe3RoaXMuJGk9CmNvbi5yZW1v dmVDbGFzcygpLHRoaXMuJGljb24uYWRkQ2xhc3MoImZhIGZhLWNhcmV0LWRvd24iKX0sZGlzYWJs ZWQ6ZnVuY3Rpbz0Kbigpe3JldHVybiB0aGlzLiRzZWxlY3QuaXMoIjpkaXNhYmxlZCIpfSxlbmFi bGU6ZnVuY3Rpb24oKXt0aGlzLiRzZWxlY3QucHJvPQpwKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxl OmZ1bmN0aW9uKCl7dGhpcy4kc2VsZWN0LnByb3AoImRpc2FibGVkIiwhMCl9LGFkZDo9CmZ1bmN0 aW9uKGUpe3RoaXMuJHNlbGVjdC5hcHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb24oZSkpLHRoaXMu X3JlZnJlc2goKX0sZD0KZWw6ZnVuY3Rpb24oZSl7dGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvblt2 YWx1ZT0zRCIrZSsiXSIpLnJlbW92ZSgpLHRoaXMuJHNlPQpsZWN0LnRyaWdnZXIoImNoYW5nZSIp LHRoaXMuX3JlZnJlc2goKX0sdXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy4kc2U9Cmxl Y3QudmFsKCk7dGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgbiBp biBlKXRoaXMuJHNlbGVjdD0KLmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihlW25dKSk7dGhp cy5fcmVmcmVzaCgpLHRoaXMuJHNlbGVjdC52YWwodCksdGhpPQpzLiRzZWxlY3QudmFsKCl8fHRo aXMuJHNlbGVjdC52YWwodGhpcy5maXJzdCgpKSx0aGlzLm9wdGlvbnMuc2VhcmNoYWJsZSYmKHQ9 Cmhpcy4kYnV0dG9uLmhpZGUoKSx0aGlzLiRzZWxlY3Quc2VsZWN0MigiZGVzdHJveSIpLHRoaXMu JHNlbGVjdC5zZWxlY3QyKCkpfT0KLHNldE9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9u cy5vbmNoYW5nZT0zRGV9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1PQpybiB0aGlzLiRzZWxlY3Qu ZmluZCgnb3B0aW9uW3ZhbHVlPTNEIicrZSsnIl0nKS5sZW5ndGg+MH0sX2NoYW5nZTpmdW5jdGlv big9Cil7dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy4k c2VsZWN0LnZhbCgpKX0sX3JlZnJlcz0KaDpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5maW5kKCJv cHRpb25bdmFsdWU9M0RudWxsXSIpLnJlbW92ZSgpO3ZhciBlPTNEdGhpPQpzLiRzZWxlY3QuZmlu ZCgib3B0aW9uIikubGVuZ3RoO2U9M0Q9M0QwPyh0aGlzLmRpc2FibGUoKSx0aGlzLiRzZWxlY3Qu YXBwZW49CmQodGhpcy5fdGVtcGxhdGVPcHRpb24oe3ZhbHVlOiJudWxsIixsYWJlbDp0aGlzLm9w dGlvbnMuZXJyb3JfdGV4dH0pKSk6dGhpcz0KLmVuYWJsZSgpfSxfdGVtcGxhdGVPcHRpb246ZnVu Y3Rpb24oZSl7cmV0dXJuJzxvcHRpb24gdmFsdWU9M0QiJytlLnZhbHVlKyciPQo+JytlLmxhYmVs KyI8L29wdGlvbj4ifSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgaWQ9M0QiJytl LmlkKyciPic9CisnPHNlbGVjdCBpZD0zRCJzZWxlY3QiIGNsYXNzPTNEInNlbGVjdCAnK2UuY2xz KyIgIitlLmlkKyciPjwvc2VsZWN0PicrJzxkaT0KdiBjbGFzcz0zRCJidXR0b24iPicrJzxpIGNs YXNzPTNEImljb24iLz4nKyI8L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3PQo6dH19KSxk ZWZpbmUoIm12Yy91aS91aS1zbGlkZXIiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIg dD0zREJhY2tib249CmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OnttaW46bnVsbCxtYXg6 bnVsbCxzdGVwOm51bGwscHJlY2lzZTohMSxzcGxpdD0KOjFlNH0saW5pdGlhbGl6ZTpmdW5jdGlv bih0KXt2YXIgbj0zRHRoaXM7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0PQppb25z RGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRo aXMudXNlc2xpZGVyPQo9M0R0aGlzLm9wdGlvbnMubWF4IT0zRD0zRG51bGwmJnRoaXMub3B0aW9u cy5taW4hPTNEPTNEbnVsbCYmdGhpcy5vcHRpb25zLm09CmF4PnRoaXMub3B0aW9ucy5taW4sdGhp cy5vcHRpb25zLnN0ZXA9M0Q9M0Q9M0RudWxsJiYodGhpcy5vcHRpb25zLnN0ZXA9M0QxLD0KdGhp cy5vcHRpb25zLnByZWNpc2UmJnRoaXMudXNlc2xpZGVyJiYodGhpcy5vcHRpb25zLnN0ZXA9M0Qo dGhpcy5vcHRpb25zLm1hPQp4LXRoaXMub3B0aW9ucy5taW4pL3RoaXMub3B0aW9ucy5zcGxpdCkp LHRoaXMudXNlc2xpZGVyPyh0aGlzLiRzbGlkZXI9M0R0aGk9CnMuJGVsLmZpbmQoIiNzbGlkZXIi KSx0aGlzLiRzbGlkZXIuc2xpZGVyKHRoaXMub3B0aW9ucyksdGhpcy4kc2xpZGVyLm9uKCJzbD0K aWRlIixmdW5jdGlvbihlLHQpe24udmFsdWUodC52YWx1ZSl9KSk6dGhpcy4kZWwuZmluZCgiLnVp LWZvcm0tc2xpZGVyLXRleHQiPQopLmNzcygid2lkdGgiLCIxMDAlIiksdGhpcy4kdGV4dD0zRHRo aXMuJGVsLmZpbmQoIiN0ZXh0IiksdGhpcy5vcHRpb25zLnZhbHU9CmUhPTNEPTNEdW5kZWZpbmVk JiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy4kdGV4dC5vbigiY2hhbmdlIixm dT0KbmN0aW9uKCl7bi52YWx1ZSgkKHRoaXMpLnZhbCgpKX0pO3ZhciByPTNEW107dGhpcy4kdGV4 dC5vbigia2V5dXAiLGZ1bmN0aW9uPQooZSl7cltlLndoaWNoXT0zRCExfSksdGhpcy4kdGV4dC5v bigia2V5ZG93biIsZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLndoaWNoO3I9Clt0XT0zRCEwLHQ9M0Q9 M0Q4fHx0PTNEPTNEOXx8dD0zRD0zRDEzfHx0PTNEPTNEMzd8fHQ9M0Q9M0QzOXx8dD49M0Q0OCYm dDw9Cj0zRDU3fHx0PTNEPTNEMTkwJiYkKHRoaXMpLnZhbCgpLmluZGV4T2YoIi4iKT0zRD0zRC0x JiZuLm9wdGlvbnMucHJlY2lzZXx8dD0KPTNEPTNEMTg5JiYkKHRoaXMpLnZhbCgpLmluZGV4T2Yo Ii0iKT0zRD0zRC0xfHxyWzkxXXx8clsxN118fGV2ZW50LnByZXZlbnREPQplZmF1bHQoKX0pfSx2 YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJihpc05hTihlKSYmKGU9 M0QwKSw9CnRoaXMub3B0aW9ucy5tYXghPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1pbihlLHRoaXMu b3B0aW9ucy5tYXgpKSx0aGlzLm9wdGlvbj0Kcy5taW4hPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1h eChlLHRoaXMub3B0aW9ucy5taW4pKSx0aGlzLm9wdGlvbnMub25jaGFuZ2UmPQomdGhpcy5vcHRp b25zLm9uY2hhbmdlKGUpLHRoaXMuJHNsaWRlciYmdGhpcy4kc2xpZGVyLnNsaWRlcigidmFsdWUi LGUpLHRoaXM9Ci4kdGV4dC52YWwoZSkpLHRoaXMuJHRleHQudmFsKCl9LF90ZW1wbGF0ZTpmdW5j dGlvbihlKXtyZXR1cm4nPGRpdiBpZD0zRCInKz0KZS5pZCsnIiBjbGFzcz0zRCJ1aS1mb3JtLXNs aWRlciI+JysnPGlucHV0IGlkPTNEInRleHQiIHR5cGU9M0QidGV4dCIgY2xhc3M9Cj0zRCJ1aS1m b3JtLXNsaWRlci10ZXh0Ii8+JysnPGRpdiBpZD0zRCJzbGlkZXIiIGNsYXNzPTNEInVpLWZvcm0t c2xpZGVyLWVsZT0KbWVudCIvPicrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUo Im12Yy91aS91aS1vcHRpb25zIixbInV0aWxzL3V0PQppbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0z REJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXM9Ci5vcHRp b25zRGVmYXVsdD0zRHt2aXNpYmxlOiEwLGRhdGE6W10saWQ6ZS51dWlkKCksZXJyb3JfdGV4dDoi Tm8gZGF0YSBhdmFpbD0KYWJsZS4iLHdhaXRfdGV4dDoiUGxlYXNlIHdhaXQuLi4ifSx0aGlzLm9w dGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmPQphdWx0KSx0aGlzLnNldEVsZW1lbnQo IjxkaXYvPiIpLHRoaXMuJG1lc3NhZ2U9M0QkKCI8ZGl2Lz4iKSx0aGlzLiRvcHRpb25zPQo9M0Qk KHRoaXMuX3RlbXBsYXRlKHQpKSx0aGlzLiRlbC5hcHBlbmQodGhpcy4kbWVzc2FnZSksdGhpcy4k ZWwuYXBwZW5kKHRoaXM9Ci4kb3B0aW9ucyksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuJGVs LmhpZGUoKSx0aGlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMuZD0KYXRhKSx0aGlzLm9wdGlvbnMudmFs dWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSk7dmFyPQog bj0zRHRoaXM7dGhpcy5vbigiY2hhbmdlIixmdW5jdGlvbigpe24uX2NoYW5nZSgpfSl9LHVwZGF0 ZTpmdW5jdGlvbihlKXt2YXI9CiB0PTNEdGhpcy5fZ2V0VmFsdWUoKTt0aGlzLiRvcHRpb25zLmVt cHR5KCk7aWYodGhpcy5fdGVtcGxhdGVPcHRpb25zKXRoaXMuJD0Kb3B0aW9ucy5hcHBlbmQodGhp cy5fdGVtcGxhdGVPcHRpb25zKGUpKTtlbHNlIGZvcih2YXIgbiBpbiBlKXt2YXIgcj0zRCQodGhp PQpzLl90ZW1wbGF0ZU9wdGlvbihlW25dKSk7ci5hZGRDbGFzcygidWktb3B0aW9uIiksdGhpcy4k b3B0aW9ucy5hcHBlbmQocil9dmE9CnIgaT0zRHRoaXM7dGhpcy4kZWwuZmluZCgiaW5wdXQiKS5v bigiY2hhbmdlIixmdW5jdGlvbigpe2kudmFsdWUoaS5fZ2V0VmFsdT0KZSgpKSxpLl9jaGFuZ2Uo KX0pLHRoaXMuX3JlZnJlc2goKSx0aGlzLnZhbHVlKHQpfSx2YWx1ZTpmdW5jdGlvbihlKXtpZihl IT0KPTNEPTNEdW5kZWZpbmVkKXtlIGluc3RhbmNlb2YgQXJyYXl8fChlPTNEW2VdKSx0aGlzLiRl bC5maW5kKCJpbnB1dCIpLnByb3AoPQoiY2hlY2tlZCIsITEpO2Zvcih2YXIgdCBpbiBlKXRoaXMu JGVsLmZpbmQoJ2lucHV0W3ZhbHVlPTNEIicrZVt0XSsnIl0nKS5maXI9CnN0KCkucHJvcCgiY2hl Y2tlZCIsITApfXJldHVybiB0aGlzLl9nZXRWYWx1ZSgpfSxleGlzdHM6ZnVuY3Rpb24oZSl7aWYo ZSE9Cj0zRD0zRHVuZGVmaW5lZCl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRFtlXSk7Zm9yKHZh ciB0IGluIGUpaWYodGhpcy4kZWwuZj0KaW5kKCdpbnB1dFt2YWx1ZT0zRCInK2VbdF0rJyJdJyku bGVuZ3RoPjApcmV0dXJuITB9cmV0dXJuITF9LGZpcnN0OmZ1bmN0aW9uPQooKXt2YXIgZT0zRHRo aXMuJGVsLmZpbmQoImlucHV0Iik7cmV0dXJuIGUubGVuZ3RoPjA/ZS52YWwoKTp1bmRlZmluZWR9 LHZhbGk9CmRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlzLnZhbHVlKCkpfSx3 YWl0OmZ1bmN0aW9uKCl7dGhpcy5fc2l6ZT0KKCk9M0Q9M0QwJiYodGhpcy5fbWVzc2FnZVNob3co dGhpcy5vcHRpb25zLndhaXRfdGV4dCwiaW5mbyIpLHRoaXMuJG9wdGlvbnMuPQpoaWRlKCkpfSx1 bndhaXQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXNzYWdlSGlkZSgpLHRoaXMuX3JlZnJlc2goKX0sX2No YW5nZTpmdW49CmN0aW9uKCl7dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25j aGFuZ2UodGhpcy5fZ2V0VmFsdWUoKSl9LF9yZT0KZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaXpl KCk9M0Q9M0QwPyh0aGlzLl9tZXNzYWdlU2hvdyh0aGlzLm9wdGlvbnMuZXJyb3JfPQp0ZXh0LCJk YW5nZXIiKSx0aGlzLiRvcHRpb25zLmhpZGUoKSk6KHRoaXMuX21lc3NhZ2VIaWRlKCksdGhpcy4k b3B0aW9ucy5jc3M9CigiZGlzcGxheSIsImlubGluZS1ibG9jayIpKX0sX2dldFZhbHVlOmZ1bmN0 aW9uKCl7dmFyIGU9M0R0aGlzLiRlbC5maW5kKCI6Yz0KaGVja2VkIik7aWYoZS5sZW5ndGg9M0Q9 M0QwKXJldHVybiJudWxsIjtpZih0aGlzLm9wdGlvbnMubXVsdGlwbGUpe3ZhciB0PTNEPQpbXTty ZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dC5wdXNoKCQodGhpcykudmFsKCkpfSksdH1yZXR1cm4g ZS52YWwoKX0sX3NpemU9CjpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudWktb3B0 aW9uIikubGVuZ3RofSxfbWVzc2FnZVNob3c6ZnVuY3Rpbz0KbihlLHQpe3RoaXMuJG1lc3NhZ2Uu c2hvdygpLHRoaXMuJG1lc3NhZ2UucmVtb3ZlQ2xhc3MoKSx0aGlzLiRtZXNzYWdlLmFkZENsPQph c3MoInVpLW1lc3NhZ2UgYWxlcnQgYWxlcnQtIit0KSx0aGlzLiRtZXNzYWdlLmh0bWwoZSl9LF9t ZXNzYWdlSGlkZTpmdW5jdGk9Cm9uKCl7dGhpcy4kbWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpm dW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEInVpLW9wdD0KaW9ucyIvPid9fSksbj0zRHt9 O24uVmlldz0zRHQuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLmlu PQppdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1 cm4nPGRpdj48aW5wdXQgdHlwZT0KPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlk KyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+JytlLmxhYmVsKyI8PQpicj4iKyI8L2Rpdj4ifX0p O3ZhciByPTNEe307ci5WaWV3PTNEdC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7ZS5t dWw9CnRpcGxlPTNEITAsdC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1w bGF0ZU9wdGlvbjpmdW5jdGlvbihlKT0Ke3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEImNoZWNr Ym94IiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEPQoiJytlLnZhbHVlKyci Lz4nK2UubGFiZWwrIjxicj4iKyI8L2Rpdj4ifX0pO3ZhciBpPTNEe307cmV0dXJuIGkuVmlldz0z RHQuZXg9CnRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuaW5pdGlhbGl6 ZS5jYWxsKHRoaXMsZSl9LHZhbHVlOmZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZp bmVkJiYodGhpcy4kZWwuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiwhPQoxKSx0aGlzLiRl bC5maW5kKCJsYWJlbCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbC5maW5kKCdbdmFs dWU9M0QiJys9CmUrJyJdJykucHJvcCgiY2hlY2tlZCIsITApLmNsb3Nlc3QoImxhYmVsIikuYWRk Q2xhc3MoImFjdGl2ZSIpKSx0aGlzLl9nZXRWYT0KbHVlKCl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5j dGlvbihlKXt2YXIgdD0zRCc8bGFiZWwgY2xhc3M9M0QiYnRuIGJ0bi1kZWZhdWx0PQoiPic7cmV0 dXJuIGUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNEImZhICcrZS5pY29uKyciLz4nKSx0Kz0zRCc8 aW5wdXQgdHlwZT0KPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVl PTNEIicrZS52YWx1ZSsnIj4nK2UubGFiZWwrIjwvPQpsYWJlbD4iLHR9LF90ZW1wbGF0ZTpmdW5j dGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEImJ0bi1ncm91cCB1aS1yYWRpb2J1dHQ9Cm9uIiBk YXRhLXRvZ2dsZT0zRCJidXR0b25zIi8+J319KSx7QmFzZTp0LFJhZGlvOm4sUmFkaW9CdXR0b246 aSxDaGVja2JveDpyfT0KfSksZGVmaW5lKCJtdmMvdWkvdWktZHJpbGxkb3duIixbInV0aWxzL3V0 aWxzIiwibXZjL3VpL3VpLW9wdGlvbnMiXSxmdW5jdGlvPQpuKGUsdCl7dmFyIG49M0R0LkJhc2Uu ZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMuZGlzcGxheT0zRGUuZGlzcGw9CmF5 fHwiY2hlY2tib3giLGUubXVsdGlwbGU9M0R0aGlzLmRpc3BsYXk9M0Q9M0QiY2hlY2tib3giLHQu QmFzZS5wcm90b3R5cGUuaT0Kbml0aWFsaXplLmNhbGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9u OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4nPGRpdj48aW5wdXQgPQpuYW1lPTNEIicrdGhpcy5vcHRp b25zLmlkKyciIGNsYXNzPTNEInVpLW9wdGlvbiIgdHlwZT0zRCInK3RoaXMuZGlzcGxheSsnIiA9 CnZhbHVlPTNEIicrdCsnIj4nK2UrIjxkaXYvPiJ9LF90ZW1wbGF0ZU9wdGlvbnM6ZnVuY3Rpb24o ZSl7ZnVuY3Rpb24gbihlLHQpez0KZnVuY3Rpb24gbihuKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUu cmVtb3ZlQ2xhc3MoInRvZ2dsZS1leHBhbmQiKSxlLmFkZENsYXNzPQooInRvZ2dsZSIpLGUuaXNf ZXhwYW5kZWQ9M0QhMCk6KHQuaGlkZSgpLGUucmVtb3ZlQ2xhc3MoInRvZ2dsZSIpLGUuYWRkQ2xh c3M9CigidG9nZ2xlLWV4cGFuZCIpLGUuaXNfZXhwYW5kZWQ9M0QhMSl9ZS5vbigiY2xpY2siLGZ1 bmN0aW9uKCl7bighZS5pc19leHBhbj0KZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKXtmb3IoaSBpbiBz KXt2YXIgbz0zRHNbaV0sdT0zRG8ub3B0aW9ucy5sZW5ndGg+MCxhPTNEPQokKCI8ZGl2Lz4iKTtp Zih1KXt2YXIgZj0zRCQoJzxzcGFuIGNsYXNzPTNEInVpLWRyaWxsZG93bi1idXR0b24gZm9ybS10 b2dnbGU9CiBpY29uLWJ1dHRvbiB0b2dnbGUtZXhwYW5kIiBzdHlsZT0zRCJwb3NpdGlvbjogcmVs YXRpdmU7IHRvcDogMnB4OyIvPicpLGw9Cj0zRCQoIjxkaXYvPiIpO2wuYXBwZW5kKGYpLGwuYXBw ZW5kKHQuX3RlbXBsYXRlT3B0aW9uKG8ubmFtZSxvLnZhbHVlKSksYS5hcD0KcGVuZChsKTt2YXIg Yz0zRCQoJzxkaXYgc3R5bGU9M0QiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IDI1cHg7Ii8+ Jyk7cihjPQosby5vcHRpb25zKSxhLmFwcGVuZChjKSxuKGYsYyl9ZWxzZSBhLmFwcGVuZCh0Ll90 ZW1wbGF0ZU9wdGlvbihvLm5hbWUsby52YWw9CnVlKSk7ZS5hcHBlbmQoYSl9fXZhciB0PTNEdGhp cyxzPTNEJCgiPGRpdi8+Iik7cmV0dXJuIHIocyxlKSxzfSxfdGVtcGxhdGU6Zj0KdW5jdGlvbihl KXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1vcHRpb25zIGRyaWxsZG93bi1jb250YWluZXIiIGlk PTNEIicrZS5pPQpkKyciLz4nfX0pO3JldHVybntWaWV3Om59fSksZGVmaW5lKCJtdmMvdWkvdWkt YnV0dG9uLW1lbnUiLFsidXRpbHMvdXRpbHMiXSw9CmZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9u ZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOiIiLHRpdGxlOiIiLGZsbz0KYXRpbmc6 InJpZ2h0IixpY29uOm51bGwsb25jbGljazpudWxsLGNsczoidWktYnV0dG9uLWljb24gdWktYnV0 dG9uLW1lbnUiLHRvPQpvbHRpcDoiIix0YXJnZXQ6IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHZp c2libGU6ITAsdGFnOiIifSwkbWVudTpudWxsLGluaXQ9CmlhbGl6ZTpmdW5jdGlvbih0KXt0aGlz Lm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbD0KZW1l bnQoJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSk7dmFyIG49M0QkKHRoaXMuZWwpLmZp bmQoIi5yb290Iikscj0KPTNEdGhpcztuLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0 aXAiKS5oaWRlKCksZS5wcmV2ZW50RGVmYXVsdCgpLHIuPQpvcHRpb25zLm9uY2xpY2smJnIub3B0 aW9ucy5vbmNsaWNrKCl9KSx0aGlzLm9wdGlvbnMudmlzaWJsZXx8dGhpcy5oaWRlKCksbi49CnRv b2x0aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sc2hvdzpmdW5jdGlv bigpeyQodGhpcy5lbCkucz0KaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUo KX0sYWRkTWVudTpmdW5jdGlvbih0KXt2YXIgbj0zRHt0aXRsPQplOiIiLHRhcmdldDoiIixocmVm OiIiLG9uY2xpY2s6bnVsbCxkaXZpZGVyOiExLGljb246bnVsbCxjbHM6ImJ1dHRvbi1tZW51IGI9 CnRuLWdyb3VwIn07bj0zRGUubWVyZ2UodCxuKSx0aGlzLiRtZW51fHwoJCh0aGlzLmVsKS5hcHBl bmQodGhpcy5fdGVtcGxhdGVNZT0KbnUoKSksdGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmluZCgi Lm1lbnUiKSk7dmFyIHI9M0QkKHRoaXMuX3RlbXBsYXRlTWVudUl0PQplbShuKSk7ci5vbigiY2xp Y2siLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxuLm9uY2xpY2smJm4ub25jbGljaygp fSk9Cix0aGlzLiRtZW51LmFwcGVuZChyKSxuLmRpdmlkZXImJnRoaXMuJG1lbnUuYXBwZW5kKCQo dGhpcy5fdGVtcGxhdGVEaXZpZGVyKD0KKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpmdW5jdGlvbihl KXt2YXIgdD0zRCc8bGk+PGEgY2xhc3M9M0QiZHJvcGRvd24taXRlbSIgPQpocmVmPTNEIicrZS5o cmVmKyciIHRhcmdldD0zRCInK2UudGFyZ2V0KyciPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNEJzxp IGNsYXM9CnM9M0QiZmEgJytlLmljb24rJyI+PC9pPicpLHQrPTNEIiAiK2UudGl0bGUrIjwvYT4i KyI8L2xpPiIsdH0sX3RlbXBsYXRlTWVudT0KOmZ1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0z RCJtZW51IGRyb3Bkb3duLW1lbnUgcHVsbC1yaWdodCIgcm9sZT0zRCJtZW51PQoiPjwvdWw+J30s X3RlbXBsYXRlRGl2aWRlcjpmdW5jdGlvbigpe3JldHVybic8bGkgY2xhc3M9M0QiZGl2aWRlciI+ PC9saT4nfSw9Cl90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpdGxl P3Q9M0Qid2lkdGg6IGF1dG87IjpuPTNEIm1hcj0KZ2luOiAwcHg7Ijt2YXIgcj0zRCc8ZGl2IGlk PTNEIicrZS5pZCsnIiBzdHlsZT0zRCJmbG9hdDogJytlLmZsb2F0aW5nKyI7ICIrPQp0KyciIGNs YXNzPTNEImRyb3Bkb3duICcrZS5jbHMrJyI+JysnPGRpdiBjbGFzcz0zRCJyb290IGJ1dHRvbiBk cm9wZG93bi10b2c9CmdsZSIgZGF0YS10b2dnbGU9M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisn Ij4nKyc8aSBjbGFzcz0zRCJpY29uIGZhICcrZS5pYz0Kb24rJyIvPic7cmV0dXJuIGUudGl0bGUm JihyKz0zRCcmbmJzcDs8c3BhbiBjbGFzcz0zRCJ0aXRsZSI+JytlLnRpdGxlKyI8L3NwPQphbj4i KSxyKz0zRCI8L2Rpdj48L2Rpdj4iLHJ9fSl9KSxkZWZpbmUoIm12Yy91aS91aS1taXNjIixbInV0 aWxzL3V0aWxzIiwibXY9CmMvdWkvdWktc2VsZWN0LWRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVy IiwibXZjL3VpL3VpLW9wdGlvbnMiLCJtdmMvdWkvdWktZD0KcmlsbGRvd24iLCJtdmMvdWkvdWkt YnV0dG9uLW1lbnUiLCJtdmMvdWkvdWktbW9kYWwiXSxmdW5jdGlvbihlLHQsbixyLGkscyxvPQop e3ZhciB1PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont1cmw6IiIsY2xz OiIifSxpbml0aWFsaXplOmY9CnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRo aXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aD0KaXMuX3RlbXBsYXRlKHRoaXMu b3B0aW9ucykpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxpbWcgY2xhc3M9M0QidWkt PQppbWFnZSAnK2UuY2xzKyciIHNyYz0zRCInK2UudXJsKyciLz4nfX0pLGE9M0RCYWNrYm9uZS5W aWV3LmV4dGVuZCh7b3B0aW9uc0Q9CmVmYXVsdDp7dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXpl OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aD0KaXMub3B0aW9uc0RlZmF1 bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKX0sdGl0bGU6 ZnVuPQpjdGlvbihlKXt0aGlzLiRlbC5odG1sKGUpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0 dXJuJzxsYWJlbCBjbGFzcz0zRCJ1aS09CmxhYmVsICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2xh YmVsPiJ9LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG9wdGlvbnMudGl0bD0KZX19KSxmPTNEQmFj a2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntmbG9hdGluZzoicmlnaHQiLGljb246 IiIsdG9vPQpsdGlwOiIiLHBsYWNlbWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6IiJ9LGluaXRp YWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHQ9CmlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25z RGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMubz0KcHRpb25zKSks JCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0LnRvb2x0aXAscGxhY2VtZW50OiJib3R0b20ifSl9 LF90ZW1wbGF0PQplOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEImZhICcr ZS5pY29uKyciIGNsYXNzPTNEInVpLWljb24iLz49CiZuYnNwOycrZS50aXRsZSsiPC9kaXY+In19 KSxsPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDpudT0KbGwsdGl0 bGU6IiIsZmxvYXRpbmc6InJpZ2h0IixjbHM6InVpLWJ1dHRvbiBidG4gYnRuLWRlZmF1bHQiLGlj b246IiJ9LGluaXRpPQphbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQs dGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGU9Cm1lbnQodGhpcy5fdGVtcGxhdGUodGhp cy5vcHRpb25zKSksJCh0aGlzLmVsKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7JCgiLnRvbz0KbHRp cCIpLmhpZGUoKSx0Lm9uY2xpY2smJnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdGlwKHt0 aXRsZTp0LnRvb2x0aXAsPQpwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9u KGUpe3ZhciB0PTNEJzxidXR0b24gaWQ9M0QiJytlLmlkKyc9CiIgdHlwZT0zRCJzdWJtaXQiIHN0 eWxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrJzsiIHR5cGU9M0QiYnV0dG9uIiBjbGFzcz0zRD0K IicrZS5jbHMrJyI+JztyZXR1cm4gZS5pY29uJiYodCs9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAn K2UuaWNvbisnIj48L2k+Jm5iPQpzcDsnKSx0Kz0zRGUudGl0bGUrIjwvYnV0dG9uPiIsdH19KSxj PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWw9CnQ6e2lkOm51bGwsdGl0bGU6 IiIsZmxvYXRpbmc6InJpZ2h0IixjbHM6InVpLWJ1dHRvbi1pY29uIixpY29uOiIiLHRvb2x0aXA6 Ij0KIixvbmNsaWNrOm51bGx9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNE ZS5tZXJnZSh0LHRoaXMub3B0aW9uPQpzRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3Rl bXBsYXRlKHRoaXMub3B0aW9ucykpLHRoaXMuJGJ1dHRvbj0zRHRoaXM9Ci4kZWwuZmluZCgiLmJ1 dHRvbiIpO3ZhciBuPTNEdGhpczskKHRoaXMuZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIu dG9vbD0KdGlwIikuaGlkZSgpLHQub25jbGljayYmIW4uZGlzYWJsZWQmJnQub25jbGljaygpfSks JCh0aGlzLmVsKS50b29sdGlwKHt0aXRsPQplOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9 KX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuJGJ1dHRvbi5hZGRDbGFzcyg9CiJkaXNhYmxlZCIp LHRoaXMuZGlzYWJsZWQ9M0QhMH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9uLnJlbW92 ZUNsYXNzKD0KImRpc2FibGVkIiksdGhpcy5kaXNhYmxlZD0zRCExfSxzZXRJY29uOmZ1bmN0aW9u KGUpe3RoaXMuJCgiaSIpLnJlbW92ZUNsYXNzPQoodGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNz KGUpLHRoaXMub3B0aW9ucy5pY29uPTNEZX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGU9Cil7dmFyIHQ9 M0QiIjtlLnRpdGxlJiYodD0zRCJ3aWR0aDogYXV0bzsiKTt2YXIgbj0zRCc8ZGl2IGlkPTNEIicr ZS5pZCsnIiBzdD0KeWxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPTNE IicrZS5jbHMrJyI+JztyZXR1cm4gZS50aXRsZT9uPQorPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9u Ij48aSBjbGFzcz0zRCJpY29uIGZhICcrZS5pY29uKyciLz4mbmJzcDsnKyc8c3BhbiA9CmNsYXNz PTNEInRpdGxlIj4nK2UudGl0bGUrIjwvc3Bhbj4iKyI8L2Rpdj4iOm4rPTNEJzxpIGNsYXNzPTNE Imljb24gZmEgJytlLj0KaWNvbisnIi8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2tib25l LlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dGl0PQpsZToiIixjbHM6IiJ9LGluaXRpYWxp emU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0Q9CmVm YXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLCQodGhp cy5lbCkub24oImNsaWNrIj0KLHQub25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1 cm4nPGRpdj48YSBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwPQopIiBjbGFzcz0zRCJ1aS1hbmNo b3IgJytlLmNscysnIj4nK2UudGl0bGUrIjwvYT48L2Rpdj4ifX0pLHA9M0RCYWNrYm9uZS5WaWU9 CncuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7bWVzc2FnZTpudWxsLHN0YXR1czoiaW5mbyIscGVy c2lzdGVudDohMX0saW5pdGlhbD0KaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVy Z2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lPQpudCgiPGRpdj48L2Rpdj4i KSx0aGlzLm9wdGlvbnMubWVzc2FnZSYmdGhpcy51cGRhdGUodGhpcy5vcHRpb25zKX0sdXBkYXRl OmY9CnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1 bHQpO2lmKHQubWVzc2FnZSE9M0QiIj0KKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRo aXMub3B0aW9ucykpLHRoaXMuJGVsLmZpbmQoIi5hbGVydCIpLmFwcGVuPQpkKHQubWVzc2FnZSks dGhpcy4kZWwuZmFkZUluKCksdGhpcy50aW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMu dGltZW89CnV0KTtpZighdC5wZXJzaXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpcy50aW1lb3V0PTNE d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpbz0Kbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVs LmZhZGVPdXQoKTpuLiRlbC5oaWRlKCl9LDNlMyl9fWVsc2UgdGhpcy4kZWwuPQpmYWRlT3V0KCl9 LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1tZXNzYWdlIGFs ZXJ0IGFsZXI9CnQtJytlLnN0YXR1cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmlldy5leHRlbmQo e29wdGlvbnNEZWZhdWx0OntvbmNsaWNrOm51bD0KbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXpl OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvPQpuc0RlZmF1 bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt2YXIgbj0z RHRoaXM7dGhpcy49Cm9wdGlvbnMub25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsZnVuY3Rp b24oZSl7dmFyIHQ9M0RuLiRlbC5maW5kKCIjc2Vhcj0KY2giKTtuLm9wdGlvbnMub25jbGljayh0 LnZhbCgpKX0pfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgY2xhc3M9Cj0zRCJ1 aS1zZWFyY2giPjxmb3JtIG9uc3VibWl0PTNEInJldHVybiBmYWxzZTsiPjxpbnB1dCBpZD0zRCJz ZWFyY2giIGNsYXNzPQo9M0QiZm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5h bWU9M0Qic2VhcmNoIiBwbGFjZWhvbGRlcj0zRCJTZWE9CnJjaC4uLiIgdmFsdWU9M0QiJytlLnNl YXJjaHdvcmQrJyI+JysnPGJ1dHRvbiB0eXBlPTNEInN1Ym1pdCIgY2xhc3M9M0QiYnRuID0Kc2Vh cmNoLWJ0biI+JysnPGkgY2xhc3M9M0QiZmEgZmEtc2VhcmNoIj48L2k+JysiPC9idXR0b24+Iisi PC9mb3JtPiIrIjwvZGl2PQo+In19KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNE ZWZhdWx0Ont0eXBlOiJ0ZXh0IixwbGFjZWhvbGRlcjoiIiw9CmRpc2FibGVkOiExLHZpc2libGU6 ITAsY2xzOiIiLGFyZWE6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPQo9 M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3Rl bXBsYXRlKHRoaXMub3B0aW89Cm5zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5l ZCYmdGhpcy52YWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpLHRoaT0Kcy5vcHRpb25zLmRpc2FibGVk JiZ0aGlzLiRlbC5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMub3B0aW9ucy52aXNpYmxlfHx0aGlz PQouJGVsLmhpZGUoKTt2YXIgbj0zRHRoaXM7dGhpcy4kZWwub24oImlucHV0IixmdW5jdGlvbigp e24ub3B0aW9ucy5vbmNoYW5nZSY9CiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9 LHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRD0zRHVuZGVmaT0KbmVkJiZ0aGlzLiRlbC52 YWwoZSksdGhpcy4kZWwudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmVh Pyc8PQp0ZXh0YXJlYSBpZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dGFyZWEgJytlLmNs cysnIj48L3RleHRhcmVhPic6JzxpbnA9CnV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50 eXBlKyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIiBwbGFjZWhvbGRlcj0zRD0KIicrZS5wbGFjZWhv bGRlcisnIiBjbGFzcz0zRCJ1aS1pbnB1dCAnK2UuY2xzKyciPid9fSksbT0zREJhY2tib25lLlZp ZXcuZXh0PQplbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPTNEZSx0aGlz LnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGU9Cih0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMu dmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucz0KLnZhbHVlKX0s dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiQoImhpZGRl biIpLnZhbChlPQopLHRoaXMuJCgiaGlkZGVuIikudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihl KXt2YXIgdD0zRCc8ZGl2IGlkPTNEIicrZS5pZCs9CiciID4nO3JldHVybiBlLmluZm8mJih0Kz0z RCI8bGFiZWw+IitlLmluZm8rIjwvbGFiZWw+IiksdCs9M0QnPGhpZGRlbiB2YWx1ZT0KPTNEIicr ZS52YWx1ZSsnIi8+JysiPC9kaXY+Iix0fX0pO3JldHVybntBbmNob3I6aCxCdXR0b246bCxCdXR0 b25JY29uOmMsQnV0PQp0b25NZW51OnMsSWNvbjpmLEltYWdlOnUsSW5wdXQ6dixMYWJlbDphLE1l c3NhZ2U6cCxNb2RhbDpvLFJhZGlvQnV0dG9uOnIuUmE9CmRpb0J1dHRvbixDaGVja2JveDpyLkNo ZWNrYm94LFJhZGlvOnIuUmFkaW8sU2VhcmNoYm94OmQsU2VsZWN0OnQsSGlkZGVuOm0sUz0KbGlk ZXI6bixEcmlsbGRvd246aX19KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L2pvYnMiLFsidXRpbHMv dXRpbHMiXSxmdW5jdGlvPQpuKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24odCxuKXt0aGlzLmFwcD0zRHQsdGg9CmlzLm9wdGlvbnM9M0RlLm1lcmdl KG4sdGhpcy5vcHRpb25zRGVmYXVsdCl9LHJlcXVlc3Q6ZnVuY3Rpb24oZSx0LG4scixpKXt2YT0K ciBzPTNEdGhpcztlLnN0YXRlKCJ3YWl0IiwiUmVxdWVzdGluZyBqb2IgcmVzdWx0cy4uLiIpO3Zh ciBvPTNEZS5nZXQoImRhdGFzPQpldF9pZF9qb2IiKTtvIT0zRCIiP3MuX3dhaXQoZSxyLGkpOnMu X3N1Ym1pdChlLHQsbixyLGkpfSxjbGVhbnVwOmZ1bmN0aW9uKHQ9Cil7dmFyIG49M0R0aGlzLHI9 M0R0LmdldCgiZGF0YXNldF9pZF9qb2IiKTtyIT0zRCIiJiYoZS5yZXF1ZXN0KHt0eXBlOiJQVVQi LD0KdXJsOmNvbmZpZy5yb290KyJhcGkvaGlzdG9yaWVzL25vbmUvY29udGVudHMvIityLGRhdGE6 e2RlbGV0ZWQ6ITB9LHN1Y2Nlc3M6PQpmdW5jdGlvbigpe24uX3JlZnJlc2hIZGFzKCl9fSksdC5z ZXQoImRhdGFzZXRfaWRfam9iIiwiIikpfSxfc3VibWl0OmZ1bmN0aW89Cm4odCxuLHIsaSxzKXt2 YXIgbz0zRHRoaXMsdT0zRHQuaWQsYT0zRHQuZ2V0KCJ0eXBlIiksZj0zRHQuZGVmaW5pdGlvbjtk YXRhPQo9M0R7dG9vbF9pZDoiY2hhcnRzIixpbnB1dHM6e2lucHV0OntpZDp0LmdldCgiZGF0YXNl dF9pZCIpLHNyYzoiaGRhIn0sbW9kdWw9CmU6Zi5leGVjdXRlLGNvbHVtbnM6cixzZXR0aW5nczpu fX0sdC5zdGF0ZSgid2FpdCIsIlNlbmRpbmcgam9iIHJlcXVlc3QuLi4iKT0KLGUucmVxdWVzdCh7 dHlwZToiUE9TVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvdG9vbHMiLGRhdGE6ZGF0YSxzdWNjZXNz OmZ1bmN0PQppb24oZSl7aWYoIWUub3V0cHV0c3x8ZS5vdXRwdXRzLmxlbmd0aD0zRD0zRDApdC5z dGF0ZSgiZmFpbGVkIiwiSm9iIHN1Ym1pc3M9CmlvbiBmYWlsZWQuIE5vIHJlc3BvbnNlLiIpLHMm JnMoKTtlbHNle28uX3JlZnJlc2hIZGFzKCk7dmFyIG49M0RlLm91dHB1dHNbMD0KXTt0LnN0YXRl KCJ3YWl0IiwiWW91ciBqb2IgaGFzIGJlZW4gcXVldWVkLiBZb3UgbWF5IGNsb3NlIHRoZSBicm93 c2VyIHdpbmRvPQp3LiBUaGUgam9iIHdpbGwgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLiIpLHQuc2V0 KCJkYXRhc2V0X2lkX2pvYiIsbi5pZCksby5hcHA9Ci5zdG9yYWdlLnNhdmUoKSxvLl93YWl0KHQs aSxzKX19LGVycm9yOmZ1bmN0aW9uKGUpe3ZhciBuPTNEIiI7ZSYmZS5tZXNzYWdlJj0KJmUubWVz c2FnZS5kYXRhJiZlLm1lc3NhZ2UuZGF0YS5pbnB1dCYmKG49M0RlLm1lc3NhZ2UuZGF0YS5pbnB1 dCsiLiIpLHQuc3RhPQp0ZSgiZmFpbGVkIiwiVGhpcyB2aXN1YWxpemF0aW9uIHJlcXVpcmVzIHRo ZSAnY2hhcnRzJyB0b29sLiBQbGVhc2UgbWFrZSBzdXI9CmUgaXQgaXMgaW5zdGFsbGVkLiAiK24p LHMmJnMoKX19KX0sX3dhaXQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEdGhpcztlLnJlcT0KdWVz dCh7dHlwZToiR0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3QuZ2V0KCJkYXRh c2V0X2lkX2pvYiIpLGRhPQp0YTp7fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe3ZhciBzPTNEITE7c3dp dGNoKGUuc3RhdGUpe2Nhc2Uib2siOnQuc3RhdGUoIndhaXQ9CiIsIkpvYiBjb21wbGV0ZWQgc3Vj Y2Vzc2Z1bGx5Li4uIiksbiYmbihlKSxzPTNEITA7YnJlYWs7Y2FzZSJlcnJvciI6dC5zdGF0ZT0K KCJmYWlsZWQiLCJKb2IgaGFzIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZSBoaXN0b3J5IGZvciBk ZXRhaWxzLiIpLHImJnIoZSksPQpzPTNEITA7YnJlYWs7Y2FzZSJydW5uaW5nIjp0LnN0YXRlKCJ3 YWl0IiwiWW91ciBqb2IgaXMgcnVubmluZy4gWW91IG1heSBjbG89CnNlIHRoZSBicm93c2VyIHdp bmRvdy4gVGhlIGpvYiB3aWxsIGNvbnRpbnVlIGluIHRoZSBiYWNrZ3JvdW5kLiIpfXN8fHNldFRp bT0KZW91dChmdW5jdGlvbigpe2kuX3dhaXQodCxuLHIpfSxpLmFwcC5jb25maWcuZ2V0KCJxdWVy eV90aW1lb3V0IikpfX0pfSxfcmVmPQpyZXNoSGRhczpmdW5jdGlvbigpe0dhbGF4eSYmR2FsYXh5 LmN1cnJIaXN0b3J5UGFuZWwmJkdhbGF4eS5jdXJySGlzdG9yeVBhbmU9CmwucmVmcmVzaENvbnRl bnRzKCl9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L2RhdGFzZXRzIixbInV0aWxzL3V0aWxz Il0sZj0KdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe2xpc3Q6 e30sY2FjaGU6e30saW5pdGlhbGl6ZTpmPQp1bmN0aW9uKHQsbil7dGhpcy5hcHA9M0R0LHRoaXMu b3B0aW9ucz0zRGUubWVyZ2Uobix0aGlzLm9wdGlvbnNEZWZhdWx0KX0scmU9CnF1ZXN0OmZ1bmN0 aW9uKGUpe2UuZ3JvdXBzP3RoaXMuX2dldF9ibG9ja3MoZSk6dGhpcy5fZ2V0X2RhdGFzZXQoZS5p ZCxlLnN1Yz0KY2VzcyxlLmVycm9yKX0sX2dldF9ibG9ja3M6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g YyhpKXtsLl9nZXQoaSxmdW5jdGlvbigpe3ZhPQpyIHM9M0QhMTtmb3IodmFyIG8gaW4gZS5ncm91 cHMpe2Rlc3RpbmF0aW9uX2dyb3VwPTNEZS5ncm91cHNbb10sc291cmNlX2dyb3U9CnA9M0RpLmdy b3Vwc1tvXSxkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXN8fChkZXN0aW5hdGlvbl9ncm91cC52YWx1 ZXM9M0RbXSksZD0KZXN0aW5hdGlvbl9ncm91cC52YWx1ZXM9M0RkZXN0aW5hdGlvbl9ncm91cC52 YWx1ZXMuY29uY2F0KHNvdXJjZV9ncm91cC52YWx1PQplcyk7aWYoc291cmNlX2dyb3VwLnZhbHVl cy5sZW5ndGg9M0Q9M0QwKXtzPTNEITA7YnJlYWt9fWlmKCsrZjx1JiYhcyl7biYmbig9CnBhcnNl SW50KGYvdSoxMDApKTt2YXIgbD0zRGkuc3RhcnQrcjtpPTNEJC5leHRlbmQoITAsYSx7c3RhcnQ6 bH0pLGMoaSl9ZWxzZT0KIHQoKX0pfXZhciB0PTNEZS5zdWNjZXNzLG49M0RlLnByb2dyZXNzLHI9 M0R0aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVyeV9saW1pPQp0IiksaT0zRGUuc3RhcnR8fDAscz0z RGkrZS5xdWVyeV9saW1pdHx8aSt0aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVyeV9saW1pdCI9Ciks bz0zRE1hdGguYWJzKHMtaSk7aWYobzw9M0QwKXtjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBEYXRh c2V0czo6cmVxdWVzdCgpID0KLSBJbnZhbGlkIHF1ZXJ5IHJhbmdlLiIpO3JldHVybn12YXIgdT0z RE1hdGguY2VpbChvL3IpfHwxLGE9M0QkLmV4dGVuZCghMCx7PQp9LGUpLGY9M0QwLGw9M0R0aGlz LGg9M0QkLmV4dGVuZCghMCxhLHtzdGFydDppfSk7dGhpcy5fZ2V0X2RhdGFzZXQoZS5pZCxmdW49 CmN0aW9uKCl7YyhoKX0pfSxfZ2V0X2RhdGFzZXQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEdGhp cy5saXN0W3RdO2lmKGkpe24oaT0KKTtyZXR1cm59dmFyIHM9M0R0aGlzO2UucmVxdWVzdCh7dHlw ZToiR0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iPQordCxzdWNjZXNzOmZ1bmN0 aW9uKGUpe3N3aXRjaChlLnN0YXRlKXtjYXNlImVycm9yIjpyJiZyKGUpO2JyZWFrO2RlZmF1bHQ6 cy49Cmxpc3RbdF09M0RlLG4oZSl9fX0pfSxfYmxvY2tfaWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS5pZCsiXyIrZS5zdGFydCsiXyIrZT0KLnN0YXJ0K3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5 X2xpbWl0IikrIl8iK3R9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtlLnN0YXJ0PQo9M0RlLnN0YXJ0fHww O3ZhciBuPTNEW10scj0zRHt9LGk9M0QwO2Zvcih2YXIgcyBpbiBlLmdyb3Vwcyl7dmFyIG89M0Rl Lmdyb3U9CnBzW3NdO2Zvcih2YXIgdSBpbiBvLmNvbHVtbnMpe3ZhciBhPTNEby5jb2x1bW5zW3Vd LmluZGV4LGY9M0R0aGlzLl9ibG9ja19pZD0KKGUsYSk7aWYodGhpcy5jYWNoZVtmXXx8YT0zRD0z RD0zRCJhdXRvInx8YT0zRD0zRD0zRCJ6ZXJvIiljb250aW51ZTshclthXSYmPQphIT0zRD0zRHVu ZGVmaW5lZCYmKHJbYV09M0RpLG4ucHVzaChhKSxpKyspfX1pZihuLmxlbmd0aD0zRD0zRDApe3Ro aXMuX2ZpbGw9Cl9mcm9tX2NhY2hlKGUpLHQoZSk7cmV0dXJufXZhciBsPTNEe2RhdGFzZXRfaWQ6 ZS5pZCxzdGFydDplLnN0YXJ0LGNvbHVtbnM6bj0KfSxjPTNEdGhpczt0aGlzLl9mZXRjaChsLGZ1 bmN0aW9uKHIpe2Zvcih2YXIgaSBpbiByKXt2YXIgcz0zRG5baV0sbz0zRGMuX2JsPQpvY2tfaWQo ZSxzKTtjLmNhY2hlW29dPTNEcltpXX1jLl9maWxsX2Zyb21fY2FjaGUoZSksdChlKX0pfSxfZmls bF9mcm9tX2NhY2g9CmU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnN0YXJ0O2NvbnNvbGUuZGVidWco IkRhdGFzZXRzOjpfZmlsbF9mcm9tX2NhY2hlKCkgLT0KIEZpbGxpbmcgcmVxdWVzdCBmcm9tIGNh Y2hlIGF0ICIrdCsiLiIpO3ZhciBuPTNEMDtmb3IodmFyIHIgaW4gZS5ncm91cHMpe3ZhPQpyIGk9 M0RlLmdyb3Vwc1tyXTtmb3IodmFyIHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0zRGkuY29sdW1uc1tz XSx1PTNEdGhpcy5fYmw9Cm9ja19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2EmJihu PTNETWF0aC5tYXgobixhLmxlbmd0aCkpfX1uPTNEPTNEMD0KJiZjb25zb2xlLmRlYnVnKCJEYXRh c2V0czo6X2ZpbGxfZnJvbV9jYWNoZSgpIC0gUmVhY2hlZCBkYXRhIHJhbmdlIGxpbWl0LiIpPQo7 Zm9yKHZhciByIGluIGUuZ3JvdXBzKXt2YXIgaT0zRGUuZ3JvdXBzW3JdO2kudmFsdWVzPTNEW107 Zm9yKHZhciBmPTNEMDtmPG49CjtmKyspaS52YWx1ZXNbZl09M0R7eDpwYXJzZUludChmKSt0fX1m b3IodmFyIHIgaW4gZS5ncm91cHMpe3ZhciBpPTNEZS5ncm91cD0Kc1tyXTtmb3IodmFyIHMgaW4g aS5jb2x1bW5zKXt2YXIgbz0zRGkuY29sdW1uc1tzXTtzd2l0Y2goby5pbmRleCl7Y2FzZSJhdXRv PQoiOmZvcih2YXIgZj0zRDA7ZjxuO2YrKyl7dmFyIGw9M0RpLnZhbHVlc1tmXTtsW3NdPTNEcGFy c2VJbnQoZikrdH1icmVhaztjYXM9CmUiemVybyI6Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2YXIg bD0zRGkudmFsdWVzW2ZdO2xbc109M0QwfWJyZWFrO2RlZmF1bHQ6dj0KYXIgdT0zRHRoaXMuX2Js b2NrX2lkKGUsby5pbmRleCksYT0zRHRoaXMuY2FjaGVbdV07Zm9yKHZhciBmPTNEMDtmPG47Zisr KXt2PQphciBsPTNEaS52YWx1ZXNbZl0sYz0zRGFbZl07aXNOYU4oYykmJiFvLmlzX2xhYmVsJiYo Yz0zRDApLGxbc109M0RjfX19fX0sX2Y9CmV0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQuc3Rh cnQ/dC5zdGFydDowLGk9M0R0aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVyeT0KX2xpbWl0Iikscz0z RDA7dC5jb2x1bW5zJiYocz0zRHQuY29sdW1ucy5sZW5ndGgsY29uc29sZS5kZWJ1ZygiRGF0YXNl dHM6Ol9mPQpldGNoKCkgLSBGZXRjaGluZyAiK3MrIiBjb2x1bW4ocykgYXQgIityKyIuIikpLHM9 M0Q9M0QwJiZjb25zb2xlLmRlYnVnKCJEYXQ9CmFzZXRzOjpfZmV0Y2goKSAtIE5vIGNvbHVtbnMg cmVxdWVzdGVkIik7dmFyIG89M0QiIjtmb3IodmFyIHUgaW4gdC5jb2x1bW5zKT0Kbys9M0R0LmNv bHVtbnNbdV0rIiwiO289M0RvLnN1YnN0cmluZygwLG8ubGVuZ3RoLTEpO3ZhciBhPTNEdGhpcztl LnJlcXVlc3QoPQp7dHlwZToiR0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3Qu ZGF0YXNldF9pZCxkYXRhOntkYXRhX3R5cGU6InI9CmF3X2RhdGEiLHByb3ZpZGVyOiJkYXRhc2V0 LWNvbHVtbiIsbGltaXQ6aSxvZmZzZXQ6cixpbmRlY2VzOm99LHN1Y2Nlc3M6ZnVuYz0KdGlvbihl KXt2YXIgdD0zRG5ldyBBcnJheShzKTtmb3IodmFyIHI9M0QwO3I8cztyKyspdFtyXT0zRFtdO2Zv cih2YXIgciBpbiBlPQouZGF0YSl7dmFyIGk9M0RlLmRhdGFbcl07Zm9yKHZhciBvIGluIGkpe3Zh ciB1PTNEaVtvXTt1IT0zRD0zRHVuZGVmaW5lZCYmdSE9Cj0zRDIxNDc0ODM2NDcmJnRbb10ucHVz aCh1KX19Y29uc29sZS5kZWJ1ZygiRGF0YXNldHM6Ol9mZXRjaCgpIC0gRmV0Y2hpbmcgYz0Kb21w bGV0ZS4iKSxuKHQpfX0pfX0pfSksZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2dyb3VwIixbXSxmdW5j dGlvbigpe3JldHVybiBCPQphY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2tleToiRGF0 YSBsYWJlbCIsZGF0ZToiIn0scmVzZXQ6ZnVuY3Rpb24oKXs9CnRoaXMuY2xlYXIoe3NpbGVudDoh MH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0aGlzLnRyaWdnZXIoInJlc2V0Iix0aGlzKX19KX0pLD0K ZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2dyb3VwcyIsWyJwbHVnaW4vbW9kZWxzL2dyb3VwIl0sZnVu Y3Rpb24oZSl7cmV0dXJuIEJhPQpja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVsOmV9KX0p LGRlZmluZSgicGx1Z2luL21vZGVscy9jaGFydCIsWyJwbHVnaW49Ci9tb2RlbHMvZ3JvdXBzIl0s ZnVuY3Rpb24oZSl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2lkOm51 bD0KbCx0aXRsZToiIix0eXBlOiIiLGRhdGU6bnVsbCxzdGF0ZToiIixzdGF0ZV9pbmZvOiIiLG1v ZGlmaWVkOiExLGRhdGFzZXRfaWQ6PQoiIixkYXRhc2V0X2lkX2pvYjoiIn0saW5pdGlhbGl6ZTpm dW5jdGlvbih0KXt0aGlzLmdyb3Vwcz0zRG5ldyBlLHRoaXMuc2V0dGk9Cm5ncz0zRG5ldyBCYWNr Ym9uZS5Nb2RlbH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKHtzaWxlbnQ6ITB9KS5zZXQo dGhpcz0KLmRlZmF1bHRzKSx0aGlzLmdyb3Vwcy5yZXNldCgpLHRoaXMuc2V0dGluZ3MuY2xlYXIo KSx0aGlzLnRyaWdnZXIoInJlc2V0Iix0PQpoaXMpfSxjb3B5OmZ1bmN0aW9uKGUpe3ZhciB0PTNE dGhpczt0LmNsZWFyKHtzaWxlbnQ6ITB9KS5zZXQodGhpcy5kZWZhdWx0cyk9Cix0LnNldChlLmF0 dHJpYnV0ZXMpLHQuc2V0dGluZ3M9M0RlLnNldHRpbmdzLmNsb25lKCksdC5ncm91cHMucmVzZXQo KSxlLmdybz0KdXBzLmVhY2goZnVuY3Rpb24oZSl7dC5ncm91cHMuYWRkKGUuY2xvbmUoKSl9KSx0 LnRyaWdnZXIoImNoYW5nZSIsdCl9LHN0YXRlPQo6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldCgic3Rh dGUiLGUpLHRoaXMuc2V0KCJzdGF0ZV9pbmZvIix0KSx0aGlzLnRyaWdnZXIoInM9CmV0OnN0YXRl IiksY29uc29sZS5kZWJ1ZygiQ2hhcnQ6c3RhdGUoKSAtICIrdCsiICgiK2UrIikiKX19KX0pO3Zh ciBWaXN1YWxpej0KYXRpb249M0RCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOntjb25m aWc6e319LHVybFJvb3Q6ZnVuY3Rpb24oKXt2YXIgPQplPTNEIi9hcGkvdmlzdWFsaXphdGlvbnMi O3JldHVybiB3aW5kb3cuZ2FsYXh5X2NvbmZpZyYmZ2FsYXh5X2NvbmZpZy5yb290P2c9CmFsYXh5 X2NvbmZpZy5yb290K2U6ZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXtfLmlzT2JqZWN0KGUuY29u ZmlnKSYmXy5pc09iaj0KZWN0KHRoaXMuZGVmYXVsdHMuY29uZmlnKSYmXy5kZWZhdWx0cyhlLmNv bmZpZyx0aGlzLmRlZmF1bHRzLmNvbmZpZyksdGhpcy5fPQpzZXRVcExpc3RlbmVycygpfSxfc2V0 VXBMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt9LHNldDpmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0Q9Cj0z RCJjb25maWciKXt2YXIgbj0zRHRoaXMuZ2V0KCJjb25maWciKTtfLmlzT2JqZWN0KG4pJiYodD0z RF8uZXh0ZW5kKF8uY2xvbj0KZShuKSx0KSl9cmV0dXJuIEJhY2tib25lLk1vZGVsLnByb3RvdHlw ZS5zZXQuY2FsbCh0aGlzLGUsdCksdGhpc30sdG9TdHJpbmc6PQpmdW5jdGlvbigpe3ZhciBlPTNE dGhpcy5nZXQoImlkIil8fCIiO3JldHVybiB0aGlzLmdldCgidGl0bGUiKSYmKGUrPTNEIjoiK3Q9 Cmhpcy5nZXQoInRpdGxlIikpLCJWaXN1YWxpemF0aW9uKCIrZSsiKSJ9fSksVmlzdWFsaXphdGlv bkNvbGxlY3Rpb249M0RCYWNrYj0Kb25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpWaXN1YWxp emF0aW9uLHVybDpmdW5jdGlvbigpe3JldHVybiBnYWxheHlfY29uPQpmaWcucm9vdCsiYXBpL3Zp c3VhbGl6YXRpb25zIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihlLHQpe3Q9M0R0fHx7fX0sc2V0OmZ1 bmM9CnRpb24oZSx0KXt2YXIgbj0zRHRoaXM7ZT0zRF8ubWFwKGUsZnVuY3Rpb24oZSl7dmFyIHQ9 M0RuLmdldChlLmlkKTtpZighdClyZT0KdHVybiBlO3ZhciByPTNEdC50b0pTT04oKTtyZXR1cm4g Xy5leHRlbmQocixlKSxyfSksQmFja2JvbmUuQ29sbGVjdGlvbi5wcm90PQpvdHlwZS5zZXQuY2Fs bCh0aGlzLGUsdCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuWyJWaXN1YWxpemF0aW9uQ29s bGVjdGk9Cm9uKCIsW3RoaXMuaGlzdG9yeUlkLHRoaXMubGVuZ3RoXS5qb2luKCksIikiXS5qb2lu KCIiKX19KTtkZWZpbmUoIm12Yy92aXN1YT0KbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCIs ZnVuY3Rpb24oKXt9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3N0b3JhZ2UiPQosWyJ1dGlscy91 dGlscyIsInBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbHVnaW4vbW9kZWxzL2dyb3VwIiwibXZjL3Zp c3VhbGl6YXQ9Cmlvbi92aXN1YWxpemF0aW9uLW1vZGVsIl0sZnVuY3Rpb24oZSx0LG4pe3JldHVy biBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe3Zpcz0KOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihl KXt0aGlzLmFwcD0zRGUsdGhpcy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMuPQpvcHRpb25z PTNEdGhpcy5hcHAub3B0aW9ucyx0aGlzLmlkPTNEdGhpcy5vcHRpb25zLmlkLHRoaXMudmlzPTNE bmV3IFZpc3VhbGk9CnphdGlvbih7dHlwZToiY2hhcnRzIixjb25maWc6e2RhdGFzZXRfaWQ6dGhp cy5vcHRpb25zLmNvbmZpZy5kYXRhc2V0X2lkLGNoYT0KcnRfZGljdDp7fX19KSx0aGlzLmlkJiYo dGhpcy52aXMuaWQ9M0R0aGlzLmlkKTt2YXIgdD0zRHRoaXMub3B0aW9ucy5jb25maWcuPQpjaGFy dF9kaWN0O3QmJih0aGlzLnZpcy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0R0KX0sc2F2ZTpm dW5jdGlvbigpe3ZhciA9CmU9M0R0aGlzLmFwcC5jaGFydDt0aGlzLnZpcy5nZXQoImNvbmZpZyIp LmNoYXJ0X2RpY3Q9M0R7fTt2YXIgdD0zRGUuZ2V0KCJ0aT0KdGxlIik7dCE9M0QiIiYmdGhpcy52 aXMuc2V0KCJ0aXRsZSIsdCk7dmFyIG49M0R7YXR0cmlidXRlczplLmF0dHJpYnV0ZXMsc2V0PQp0 aW5nczplLnNldHRpbmdzLmF0dHJpYnV0ZXMsZ3JvdXBzOltdfTtlLmdyb3Vwcy5lYWNoKGZ1bmN0 aW9uKGUpe24uZ3JvdXBzLnA9CnVzaChlLmF0dHJpYnV0ZXMpfSksdGhpcy52aXMuZ2V0KCJjb25m aWciKS5jaGFydF9kaWN0PTNEbjt2YXIgcj0zRHRoaXM7dGhpcz0KLnZpcy5zYXZlKCkuZmFpbChm dW5jdGlvbihlLHQsbil7Y29uc29sZS5lcnJvcihlLHQsbil9KS50aGVuKGZ1bmN0aW9uKGUpe2Um PQomZS5pZCYmKHIuaWQ9M0RlLmlkKX0pfSxsb2FkOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLnZp cy5nZXQoImNvbmZpZyIpLmNoYXI9CnRfZGljdDtpZighZS5hdHRyaWJ1dGVzKXJldHVybiExO3Zh ciB0PTNEZS5hdHRyaWJ1dGVzLnR5cGU7aWYoIXQpcmV0dXJuIGNvbj0Kc29sZS5kZWJ1ZygiU3Rv cmFnZTo6bG9hZCgpIC0gQ2hhcnQgdHlwZSBub3QgcHJvdmlkZWQuIEludmFsaWQgZm9ybWF0LiIp LCExPQo7dmFyIHI9M0R0aGlzLmFwcC50eXBlcy5nZXQodCk7aWYoIXIpcmV0dXJuIGNvbnNvbGUu ZGVidWcoIlN0b3JhZ2U6OmxvYWQoKSA9Ci0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiBQbGVh c2UgcmUtY29uZmlndXJlIHRoZSBjaGFydC4gUmVzZXR0aW5nIGNoYXJ0Lj0KIiksITE7Y29uc29s ZS5kZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gTG9hZGluZyBjaGFydCB0eXBlICIrdCsiLiIpLHRo aXMuY2hhPQpydC5kZWZpbml0aW9uPTNEcix0aGlzLmNoYXJ0LnNldChlLmF0dHJpYnV0ZXMpLHRo aXMuY2hhcnQuc3RhdGUoIm9rIiwiTG9hZGk9Cm5nIHNhdmVkIHZpc3VhbGl6YXRpb24uLi4iKSx0 aGlzLmNoYXJ0LnNldHRpbmdzLnNldChlLnNldHRpbmdzKTtmb3IodmFyIGkgaT0KbiBlLmdyb3Vw cyl0aGlzLmNoYXJ0Lmdyb3Vwcy5hZGQobmV3IG4oZS5ncm91cHNbaV0pKTtyZXR1cm4gdGhpcy5j aGFydC5zZXQoPQoibW9kaWZpZWQiLCExKSwhMH19KX0pLGRlZmluZSgidXRpbHMvZGVmZXJyZWQi LFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXs9CnJldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRl bmQoe3F1ZXVlOltdLHByb2Nlc3M6e30sY291bnRlcjowLGluaXRpYWxpemU6ZnVuYz0KdGlvbigp e3RoaXMub24oInJlZnJlc2giLGZ1bmN0aW9uKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCYmdGhp cy5yZWFkeSgpKXt2PQphciBlPTNEdGhpcy5xdWV1ZVswXTt0aGlzLnF1ZXVlLnNwbGljZSgwLDEp LGUmJmUoKX19KX0sZXhlY3V0ZTpmdW5jdGlvbihlKXs9CnRoaXMucXVldWUucHVzaChlKSx0aGlz LnRyaWdnZXIoInJlZnJlc2giKX0scmVnaXN0ZXI6ZnVuY3Rpb24oKXt2YXIgdD0zRGUudT0KdWlk KCk7cmV0dXJuIHRoaXMucHJvY2Vzc1t0XT0zRCEwLHRoaXMuY291bnRlcisrLGNvbnNvbGUuZGVi dWcoIkRlZmVycmVkOnJlPQpnaXN0ZXIoKSAtIFJlZ2lzdGVyaW5nICIrdCksdH0sZG9uZTpmdW5j dGlvbihlKXt0aGlzLnByb2Nlc3NbZV0mJihkZWxldGUgdGg9CmlzLnByb2Nlc3NbZV0sdGhpcy5j b3VudGVyLS0sY29uc29sZS5kZWJ1ZygiRGVmZXJyZWQ6ZG9uZSgpIC0gVW5yZWdpc3RlcmluZz0K ICIrZSksdGhpcy50cmlnZ2VyKCJyZWZyZXNoIikpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMucXVl dWU9M0RbXX0scmVhZHk6ZnVuPQpjdGlvbigpe3JldHVybiB0aGlzLmNvdW50ZXI9M0Q9M0QwfX0p fSksZGVmaW5lKCJwbHVnaW4vdmlld3Mvdmlld3BvcnQiLFsibXY9CmMvdWkvdWktcG9ydGxldCIs Im12Yy91aS91aS1taXNjIiwidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJh Yz0Ka2JvbmUuVmlldy5leHRlbmQoe2NvbnRhaW5lcl9saXN0OltdLGNhbnZhc19saXN0OltdLGlu aXRpYWxpemU6ZnVuY3Rpb24oZSx0PQope3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5h cHAuY2hhcnQsdGhpcy5vcHRpb25zPTNEbi5tZXJnZSh0LHRoaXMub3A9CnRpb25zRGVmYXVsdCks dGhpcy5zZXRFbGVtZW50KCQodGhpcy5fdGVtcGxhdGUoKSkpLHRoaXMuX2Z1bGxzY3JlZW4odGhp cy4kZT0KbCwxMDApLHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigiZGl2Iik7dmFyIHI9M0R0aGlzO3Ro aXMuY2hhcnQub24oInJlZHJhdyIsZnVuPQpjdGlvbigpe3IuX2RyYXcoci5jaGFydCl9KSx0aGlz LmNoYXJ0Lm9uKCJzZXQ6c3RhdGUiLGZ1bmN0aW9uKCl7dmFyIGU9M0RyLiQ9CmVsLmZpbmQoIiNp bmZvIiksdD0zRHIuJGVsLmZpbmQoIi5jaGFydHMtdmlld3BvcnQtY29udGFpbmVyIiksbj0zRGUu ZmluZCgiIz0KaWNvbiIpO24ucmVtb3ZlQ2xhc3MoKSxlLnNob3coKSxlLmZpbmQoIiN0ZXh0Iiku aHRtbChyLmNoYXJ0LmdldCgic3RhdGVfaW5mPQpvIikpO3ZhciBpPTNEci5jaGFydC5nZXQoInN0 YXRlIik7c3dpdGNoKGkpe2Nhc2Uib2siOmUuaGlkZSgpLHQuc2hvdygpO2JyZWE9Cms7Y2FzZSJm YWlsZWQiOm4uYWRkQ2xhc3MoImljb24gZmEgZmEtd2FybmluZyIpLHQuaGlkZSgpO2JyZWFrO2Rl ZmF1bHQ6bi5hZD0KZENsYXNzKCJpY29uIGZhIGZhLXNwaW5uZXIgZmEtc3BpbiIpLHQuc2hvdygp fX0pfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuPQpzaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0 aGlzLiRlbC5oaWRlKCl9LF9mdWxsc2NyZWVuOmZ1bmN0aW9uKGUsdCl7ZS5jc3MoImg9CmVpZ2h0 IiwkKHdpbmRvdykuaGVpZ2h0KCktdCksJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe2UuY3Nz KCJoZWlnaHQiLCQodz0KaW5kb3cpLmhlaWdodCgpLXQpfSl9LF9jcmVhdGVDb250YWluZXI6ZnVu Y3Rpb24oZSx0KXt0PTNEdHx8MTtmb3IodmFyIG4gaW4gPQp0aGlzLmNvbnRhaW5lcl9saXN0KXRo aXMuY29udGFpbmVyX2xpc3Rbbl0ucmVtb3ZlKCk7dGhpcy5jb250YWluZXJfbGlzdD0zRFs9Cl0s dGhpcy5jYW52YXNfbGlzdD0zRFtdO2Zvcih2YXIgbj0zRDA7bjx0O24rKyl7dmFyIHI9M0QkKHRo aXMuX3RlbXBsYXRlQ29udD0KYWluZXIoZSxwYXJzZUludCgxMDAvdCkpKTt0aGlzLiRlbC5hcHBl bmQociksdGhpcy5jb250YWluZXJfbGlzdFtuXT0zRHIsdGhpPQpzLmNhbnZhc19saXN0W25dPTNE ci5maW5kKCIuY2hhcnRzLXZpZXdwb3J0LWNhbnZhcyIpLmF0dHIoImlkIil9fSxfZHJhdzpmdW49 CmN0aW9uKGUpe3ZhciB0PTNEdGhpcyxuPTNEdGhpcy5hcHAuZGVmZXJyZWQucmVnaXN0ZXIoKSxy PTNEZS5nZXQoInR5cGUiKTt0aD0KaXMuY2hhcnRfZGVmaW5pdGlvbj0zRGUuZGVmaW5pdGlvbjt2 YXIgaT0zRDE7ZS5zZXR0aW5ncy5nZXQoInVzZV9wYW5lbHMiKT0KPTNEPTNEPTNEInRydWUiJiYo aT0zRGUuZ3JvdXBzLmxlbmd0aCksdGhpcy5fY3JlYXRlQ29udGFpbmVyKHRoaXMuY2hhcnRfZGVm PQppbml0aW9uLnRhZyxpKSxlLnN0YXRlKCJ3YWl0IiwiUGxlYXNlIHdhaXQuLi4iKTtpZighdGhp cy5jaGFydF9kZWZpbml0aW9uLmU9CnhlY3V0ZXx8dGhpcy5jaGFydF9kZWZpbml0aW9uLmV4ZWN1 dGUmJmUuZ2V0KCJtb2RpZmllZCIpKXRoaXMuYXBwLmpvYnMuY2xlYT0KbnVwKGUpLGUuc2V0KCJt b2RpZmllZCIsITEpO3ZhciB0PTNEdGhpcztyZXF1aXJlKFsicGx1Z2luL2NoYXJ0cy8iK3RoaXMu YXBwPQouY2hhcnRQYXRoKHIpKyIvd3JhcHBlciJdLGZ1bmN0aW9uKHIpe2lmKHQuY2hhcnRfZGVm aW5pdGlvbi5leGVjdXRlKXQuYXBwLmo9Cm9icy5yZXF1ZXN0KGUsdC5fZGVmYXVsdFNldHRpbmdz U3RyaW5nKGUpLHQuX2RlZmF1bHRSZXF1ZXN0U3RyaW5nKGUpLGZ1bmN0aT0Kb24oKXt2YXIgaT0z RG5ldyByKHQuYXBwLHtwcm9jZXNzX2lkOm4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpb25hcnk6dC5f ZGVmYXVsPQp0UmVxdWVzdERpY3Rpb25hcnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlzdH0p fSxmdW5jdGlvbigpe3RoaXMuYXBwLmRlZmU9CnJyZWQuZG9uZShuKX0pO2Vsc2UgdmFyIGk9M0Ru ZXcgcih0LmFwcCx7cHJvY2Vzc19pZDpuLGNoYXJ0OmUscmVxdWVzdF9kaWN0aT0Kb25hcnk6dC5f ZGVmYXVsdFJlcXVlc3REaWN0aW9uYXJ5KGUpLGNhbnZhc19saXN0OnQuY2FudmFzX2xpc3R9KX0p fSxfZGVmYXVsPQp0UmVxdWVzdFN0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QwLHI9 M0R0aGlzO3JldHVybiBlLmdyb3Vwcy5lYWNoKGY9CnVuY3Rpb24oZSl7bisrO2Zvcih2YXIgaSBp biByLmNoYXJ0X2RlZmluaXRpb24uY29sdW1ucyl0Kz0zRGkrIl8iK24rIjoiKyhwYT0KcnNlSW50 KGUuZ2V0KGkpKSsxKSsiLCAifSksdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKX0sX2RlZmF1bHRT ZXR0aW5nc1N0cmluPQpnOmZ1bmN0aW9uKGUpe3ZhciB0PTNEIiI7Zm9yKGtleSBpbiBlLnNldHRp bmdzLmF0dHJpYnV0ZXMpdCs9M0RrZXkrIjoiK2Uuc2U9CnR0aW5ncy5nZXQoa2V5KSsiLCAiO3Jl dHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTIpfSxfZGVmYXVsdFJlcXVlc3REaWN0aT0Kb25h cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R7Z3JvdXBzOltdfTt0aGlzLmNoYXJ0X2RlZmluaXRpb24u ZXhlY3V0ZT90LmlkPTNEPQplLmdldCgiZGF0YXNldF9pZF9qb2IiKTp0LmlkPTNEZS5nZXQoImRh dGFzZXRfaWQiKTt2YXIgcj0zRDAsaT0zRHRoaXM7cmV0dXI9Cm4gZS5ncm91cHMuZWFjaChmdW5j dGlvbihlKXt2YXIgcz0zRHt9O2Zvcih2YXIgbyBpbiBpLmNoYXJ0X2RlZmluaXRpb24uY29sdT0K bW5zKXt2YXIgdT0zRGkuY2hhcnRfZGVmaW5pdGlvbi5jb2x1bW5zW29dO3Nbb109M0RuLm1lcmdl KHtpbmRleDplLmdldChvKX0sPQp1KX10Lmdyb3Vwcy5wdXNoKHtrZXk6KytyKyI6IitlLmdldCgi a2V5IiksY29sdW1uczpzfSl9KSx0fSxfdGVtcGxhdGU6ZnVuY3Q9Cmlvbigpe3JldHVybic8ZGl2 IGNsYXNzPTNEImNoYXJ0cy12aWV3cG9ydCI+PGRpdiBpZD0zRCJpbmZvIiBjbGFzcz0zRCJpbmZv Ij0KPjxzcGFuIGlkPTNEImljb24iIGNsYXNzPTNEImljb24iLz48c3BhbiBpZD0zRCJ0ZXh0IiBj bGFzcz0zRCJ0ZXh0IiAvPjwvZGl2PQo+PC9kaXY+J30sX3RlbXBsYXRlQ29udGFpbmVyOmZ1bmN0 aW9uKGUsdCl7cmV0dXJuJzxkaXYgY2xhc3M9M0QiY2hhcnRzLXZpZXc9CnBvcnQtY29udGFpbmVy IiBzdHlsZT0zRCJ3aWR0aDonK3QrJyU7Ij4nKyc8ZGl2IGlkPTNEIm1lbnUiLz4nKyI8IitlKycg aWQ9Cj0zRCInK24udXVpZCgpKyciIGNsYXNzPTNEImNoYXJ0cy12aWV3cG9ydC1jYW52YXMiPicr IjwvZGl2PiJ9fSl9KSxkZWZpbmUoIj0KcGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCIsWyJsaWJz L3VuZGVyc2NvcmUiXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2UuPQokZWwuZmluZCgic3Zn IikubGVuZ3RoPjA/cihlKTpuKGUpfWZ1bmN0aW9uIG4oZSl7dHJ5e3ZhciB0PTNEZS4kZWwuZmlu ZCgiLmo9CnFwbG90LXRhcmdldCIpLG49M0R0LmpxcGxvdFRvSW1hZ2VTdHIoe30pO24mJih3aW5k b3cubG9jYXRpb24uaHJlZj0zRG4ucmVwbD0KYWNlKCJpbWFnZS9wbmciLCJpbWFnZS9vY3RldC1z dHJlYW0iKSl9Y2F0Y2gocil7Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gU2NyPQplZW5zaG90Ojpf ZnJvbUNhbnZhcygpIC0gIityKSxlLmVycm9yJiZlLmVycm9yKCJQbGVhc2UgcmVkdWNlIHlvdXIg Y2hhcnQgdG89CiBhIHNpbmdsZSBwYW5lbCBhbmQgdHJ5IGFnYWluLiIpfX1mdW5jdGlvbiByKGUp e3ZhciB0PTNEZS4kZWwsbj0zRGUudXJsLHI9Cj0zRGUubmFtZSxzPTNEbmV3IFhNTFNlcmlhbGl6 ZXIsbz0zRGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHU9M0QkKD0KbyksYT0zRHQu ZmluZCgic3ZnIikubGVuZ3RoLGY9M0R0LmZpbmQoInN2ZyIpLmZpcnN0KCksbD0zRHBhcnNlSW50 KGYuY3NzKCJoPQplaWdodCIpKSxjPTNEcGFyc2VJbnQoZi5jc3MoIndpZHRoIikpO3UuYXR0cigi d2lkdGgiLGMqYSksdS5hdHRyKCJoZWlnaHQiLGw9CiksKCFvLmdldENvbnRleHR8fCFvLmdldENv bnRleHQoIjJkIikpJiZhbGVydCgiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydD0KIHRoaXMg ZmVhdHVyZSwgcGxlYXNlIHVzZSBhIG1vZGVybiBicm93c2VyIik7dmFyIGg9M0RvLmdldENvbnRl eHQoIjJkIikscD0KPTNEMDt0LmZpbmQoInN2ZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0zRCQo dGhpcyk7ZS5hdHRyKHt2ZXJzaW9uOiIxLjEiLHhtPQpsbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw MDAvc3ZnIix3aWR0aDpjLGhlaWdodDpsfSk7dmFyIHQ9M0RzLnNlcmlhbGl6ZVRvU3Q9CnJpbmco dGhpcyk7aC5kcmF3U3ZnKHQscCwwLGMsbCkscCs9M0RjfSksd2luZG93LmxvY2F0aW9uLmhyZWY9 M0RpKG8sby5nZXRDbz0KbnRleHQoIjJkIiksIndoaXRlIikucmVwbGFjZSgiaW1hZ2UvcG5nIiwi aW1hZ2Uvb2N0ZXQtc3RyZWFtIil9ZnVuY3Rpb24gaShlPQosdCxuKXt2YXIgcj0zRGUud2lkdGgs aT0zRGUuaGVpZ2h0LHM7aWYobil7cz0zRHQuZ2V0SW1hZ2VEYXRhKDAsMCxyLGkpO3ZhciA9Cm89 M0R0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjt0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0z RCJkZXN0aW5hdGlvbi1vdj0KZXIiLHQuZmlsbFN0eWxlPTNEbix0LmZpbGxSZWN0KDAsMCxyLGkp fXZhciB1PTNEZS50b0RhdGFVUkwoImltYWdlL3BuZyIpO3JlPQp0dXJuIG4mJih0LmNsZWFyUmVj dCgwLDAscixpKSx0LnB1dEltYWdlRGF0YShzLDAsMCksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXQ9 Cmlvbj0zRG8pLHV9ZnVuY3Rpb24gcyhlKXt3aW5kb3cubG9jYXRpb24uaHJlZj0zRCJkYXRhOm5v bmUvbm9uZTtiYXNlNjQsIitidD0Kb2EoYShlKS5zdHJpbmcpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZh ciB0IGluIGRvY3VtZW50LnN0eWxlU2hlZXRzKXt2YXIgbj0zRGRvPQpjdW1lbnQuc3R5bGVTaGVl dHNbdF0scj0zRG4uY3NzUnVsZXM7aWYocilmb3IodmFyIGk9M0QwLHM9M0RyLmxlbmd0aDtpPHM7 aSs9CispdHJ5e2UuZmluZChyW2ldLnNlbGVjdG9yVGV4dCkuZWFjaChmdW5jdGlvbihlLHQpe3Qu c3R5bGUuY3NzVGV4dCs9M0RyW2ldLj0Kc3R5bGUuY3NzVGV4dH0pfWNhdGNoKG8pe319fWZ1bmN0 aW9uIHUoZSl7dmFyIHQ9M0RhKGUpLG49M0R7ZmlsZW5hbWU6bmFtZXx8PQoiY2hhcnQiLHR5cGU6 ImFwcGxpY2F0aW9uL3BkZiIsaGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsc2NhbGU6Mixz dmc6dC49CnN0cmluZ30scj0zRCQoImJvZHkiKSxpPTNEci5maW5kKCIjdmlld3BvcnQtZm9ybSIp O2kubGVuZ3RoPTNEPTNEPTNEMCYmKGk9Cj0zRCQoIjxmb3JtPiIse2lkOiJ2aWV3cG9ydC1mb3Jt IixtZXRob2Q6InBvc3QiLGFjdGlvbjoiaHR0cDovL2V4cG9ydC5oaWdoYz0KaGFydHMuY29tLyIs ZGlzcGxheToibm9uZSJ9KSxyLmFwcGVuZChpKSksaS5lbXB0eSgpO2ZvcihuYW1lIGluIG4pe3Zh ciBzPTNEPQokKCI8aW5wdXQvPiIse3R5cGU6ImhpZGRlbiIsbmFtZTpuYW1lLHZhbHVlOm5bbmFt ZV19KTtpLmFwcGVuZChzKX10cnl7aS5zdWI9Cm1pdCgpfWNhdGNoKG8pe2NvbnNvbGUubG9nKG8p fX1mdW5jdGlvbiBhKGUpe2lmKGUuJGVsLmZpbmQoInN2ZyIpLmxlbmd0aD0zRD0KPTNEMCYmZS5l cnJvcil7ZS5lcnJvcigiTm8gU1ZHIGZvdW5kLiBUaGlzIGNoYXJ0IHR5cGUgZG9lcyBub3Qgc3Vw cG9ydCBTVkcvPQpQREYgZXhwb3J0LiIpO3JldHVybn12YXIgdD0zRGUuJGVsLG49M0R0LmZpbmQo InN2ZyIpLmxlbmd0aCxyPTNEcGFyc2VJbnQodC49CmZpbmQoInN2ZyIpLmZpcnN0KCkuY3NzKCJo ZWlnaHQiKSksaT0zRHBhcnNlSW50KHQuZmluZCgic3ZnIikuZmlyc3QoKS5jc3MoIj0Kd2lkdGgi KSkscz0zRG5ldyBYTUxTZXJpYWxpemVyLHU9M0QkKCI8c3ZnLz4iKTt1LmF0dHIoe3ZlcnNpb246 IjEuMSIseG1sbnM6PQoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmkqbixoZWln aHQ6cn0pO3ZhciBhPTNEIiIsZj0zRDA7cmV0dXJuIHQ9Ci5maW5kKCJzdmciKS5lYWNoKGZ1bmN0 aW9uKCl7dmFyIGU9M0QkKHRoaXMpLmNsb25lKCk7byhlKTt2YXIgdD0zRCQoJzxnIHRyYT0KbnNm b3JtPTNEInRyYW5zbGF0ZSgnK2YrJywgMCkiPicpO3QuYXBwZW5kKGUuZmluZCgiZyIpLmZpcnN0 KCkpLHUuYXBwZW5kKHQpPQosZis9M0RpfSkse3N0cmluZzpzLnNlcmlhbGl6ZVRvU3RyaW5nKHVb MF0pLGhlaWdodDpyLHdpZHRoOml9fXJldHVybntjcmVhdGU9ClBORzp0LGNyZWF0ZVNWRzpzLGNy ZWF0ZVBERjp1fX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL3ZpZXdlciIsWyJ1dGlscy91dGlscz0K IiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxldCIsInBsdWdpbi92aWV3cy92aWV3 cG9ydCIsInBsdWdpbi9saWJyPQphcnkvc2NyZWVuc2hvdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7 cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXo9CmU6ZnVuY3Rpb24oZSxzKXt0 aGlzLmFwcD0zRGUsdGhpcy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMudmlld3BvcnRfdmll dz0KPTNEbmV3IHIoZSk7dmFyIG89M0R0aGlzO3RoaXMubWVzc2FnZT0zRG5ldyB0Lk1lc3NhZ2U7 dmFyIHU9M0RuZXcgdC5CdXR0b25NPQplbnUoe2ljb246ImZhLWNhbWVyYSIsdGl0bGU6IlNjcmVl bnNob3QiLHRvb2x0aXA6IkRvd25sb2FkIGFzIFBORywgU1ZHIG9yIFA9CkRGIGZpbGUifSk7dS5h ZGRNZW51KHtpZDoiYnV0dG9uLXBuZyIsdGl0bGU6IlNhdmUgYXMgUE5HIixpY29uOiJmYS1maWxl Iixvbj0KY2xpY2s6ZnVuY3Rpb24oKXtvLl93YWl0KG8uY2hhcnQsZnVuY3Rpb24oKXtpLmNyZWF0 ZVBORyh7JGVsOm8udmlld3BvcnRfdmllPQp3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUi KSxlcnJvcjpmdW5jdGlvbihlKXtvLm1lc3NhZ2UudXBkYXRlKHttZXNzYWc9CmU6ZSxzdGF0dXM6 ImRhbmdlciJ9KX19KX0pfX0pLHUuYWRkTWVudSh7aWQ6ImJ1dHRvbi1zdmciLHRpdGxlOiJTYXZl IGFzIFNWRz0KIixpY29uOiJmYS1maWxlLXRleHQtbyIsb25jbGljazpmdW5jdGlvbigpe28uX3dh aXQoby5jaGFydCxmdW5jdGlvbigpe2kuY3JlPQphdGVTVkcoeyRlbDpvLnZpZXdwb3J0X3ZpZXcu JGVsLHRpdGxlOm8uY2hhcnQuZ2V0KCJ0aXRsZSIpLGVycm9yOmZ1bmN0aW9uKGU9Cil7by5tZXNz YWdlLnVwZGF0ZSh7bWVzc2FnZTplLHN0YXR1czoiZGFuZ2VyIn0pfX0pfSl9fSksdS5hZGRNZW51 KHtpZDoiYnV0dD0Kb24tcG5nIix0aXRsZToiU2F2ZSBhcyBQREYiLGljb246ImZhLWZpbGUtbyIs b25jbGljazpmdW5jdGlvbigpe28uYXBwLm1vZGFsPQouc2hvdyh7dGl0bGU6IlNlbmQgY2hhcnQg ZGF0YSBmb3IgUERGIGNyZWF0aW9uIixib2R5OiJHYWxheHkgZG9lcyBub3QgcHJvdmk9CmRlIGlu dGVncmF0ZWQgUERGIGV4cG9ydCBzY3JpcHRzLiBZb3UgbWF5IGNsaWNrICdDb250aW51ZScgdG8g Y3JlYXRlIHRoZSBQRD0KRiBieSB1c2luZyBhIDNyZCBwYXJ0eSBzZXJ2aWNlIChodHRwczovL2V4 cG9ydC5oaWdoY2hhcnRzLmNvbSkuIixidXR0b25zOntDPQphbmNlbDpmdW5jdGlvbigpe28uYXBw Lm1vZGFsLmhpZGUoKX0sQ29udGludWU6ZnVuY3Rpb24oKXtvLmFwcC5tb2RhbC5oaWRlKCk9Cixv Ll93YWl0KG8uY2hhcnQsZnVuY3Rpb24oKXtpLmNyZWF0ZVBERih7JGVsOm8udmlld3BvcnRfdmll dy4kZWwsdGl0bGU6by5jaD0KYXJ0LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtvLm1l c3NhZ2UudXBkYXRlKHttZXNzYWdlOmUsc3RhdHVzOiJkYW5nPQplciJ9KX19KX0pfX19KX19KSx0 aGlzLnBvcnRsZXQ9M0RuZXcgbi5WaWV3KHtpY29uOiJmYS1iYXItY2hhcnQtbyIsdGl0bGU6IlY9 Cmlld3BvcnQiLHNjcm9sbGFibGU6ITEsb3BlcmF0aW9uczp7ZWRpdF9idXR0b246bmV3IHQuQnV0 dG9uSWNvbih7aWNvbjoiZmEtZT0KZGl0Iix0b29sdGlwOiJDdXN0b21pemUgdGhpcyBjaGFydCIs dGl0bGU6IkVkaXRvciIsb25jbGljazpmdW5jdGlvbigpe28uX3dhPQppdChvLmNoYXJ0LGZ1bmN0 aW9uKCl7by5hcHAuZ28oImVkaXRvciIpfSl9fSkscGljdHVyZV9idXR0b25fbWVudTp1fX0pLHRo aXM9Ci5wb3J0bGV0LmFwcGVuZCh0aGlzLm1lc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQuYXBwZW5k KHRoaXMudmlld3BvcnRfdmlldy4kZT0KbCksdGhpcy5zZXRFbGVtZW50KHRoaXMucG9ydGxldC4k ZWwpO3ZhciBvPTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6dGl0PQpsZSIsZnVuY3Rpb24o KXtvLl9yZWZyZXNoVGl0bGUoKX0pfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuc2hvdygpLCQo d2luZG89CncpLnRyaWdnZXIoInJlc2l6ZSIpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlk ZSgpfSxfcmVmcmVzaFRpdGxlOmZ1bmN0aT0Kb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJ0 aXRsZSIpO3RoaXMucG9ydGxldC50aXRsZShlKX0sX3dhaXQ6ZnVuY3Rpb24oPQplLHQpe3RoaXMu YXBwLmRlZmVycmVkLnJlYWR5KCk/dCgpOnRoaXMubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6Illv dXIgY2hhcnQ9CiBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBQbGVhc2Ugd2FpdCBhbmQg dHJ5IGFnYWluLiJ9KX19KX0pLGRlZmluZSgibT0KdmMvdWkvdWktdGFicyIsWyJ1dGlscy91dGls cyJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wPQp0aW9uc0Rl ZmF1bHQ6e3RpdGxlX25ldzoiIixvcGVyYXRpb25zOm51bGwsb25uZXc6bnVsbCxtYXg6bnVsbCxv bmNoYW5nZTpudWw9Cmx9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlPTNEITEs dGhpcy4kbmF2PTNEbnVsbCx0aGlzLiRjb250ZW50PQo9M0RudWxsLHRoaXMuZmlyc3RfdGFiPTNE bnVsbCx0aGlzLmN1cnJlbnRfaWQ9M0RudWxsLHRoaXMub3B0aW9ucz0zRGUubWVyZ2U9Cih0LHRo aXMub3B0aW9uc0RlZmF1bHQpO3ZhciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMp KTt0aGlzLiRuYXY9Cj0zRG4uZmluZCgiLnRhYi1uYXZpZ2F0aW9uIiksdGhpcy4kY29udGVudD0z RG4uZmluZCgiLnRhYi1jb250ZW50IiksdGhpcy5zZT0KdEVsZW1lbnQobiksdGhpcy5saXN0PTNE e307dmFyIHI9M0R0aGlzO3RoaXMub3B0aW9ucy5vcGVyYXRpb25zJiYkLmVhY2godGhpPQpzLm9w dGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvbihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRuYXYu ZmluZCgiLm9wZXJhdGk9Cm9ucyIpLmFwcGVuZCh0LiRlbCl9KTtpZih0aGlzLm9wdGlvbnMub25u ZXcpe3ZhciBpPTNEJCh0aGlzLl90ZW1wbGF0ZV90YWJfbj0KZXcodGhpcy5vcHRpb25zKSk7dGhp cy4kbmF2LmFwcGVuZChpKSxpLnRvb2x0aXAoe3RpdGxlOiJBZGQgYSBuZXcgdGFiIixwbGFjPQpl bWVudDoiYm90dG9tIixjb250YWluZXI6ci4kZWx9KSxpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7 aS50b29sdGlwKCJoaWRlIik9CixyLm9wdGlvbnMub25uZXcoKX0pfX0sc2l6ZTpmdW5jdGlvbigp e3JldHVybiBfLnNpemUodGhpcy5saXN0KX0sY3VycmVudDpmdT0KbmN0aW9uKCl7cmV0dXJuIHRo aXMuJGVsLmZpbmQoIi50YWItcGFuZS5hY3RpdmUiKS5hdHRyKCJpZCIpfSxhZGQ6ZnVuY3Rpb24o PQplKXt2YXIgdD0zRHRoaXMsbj0zRGUuaWQscj0zRCQodGhpcy5fdGVtcGxhdGVfdGFiKGUpKSxp PTNEJCh0aGlzLl90ZW1wbGF0ZV89CnRhYl9jb250ZW50KGUpKTt0aGlzLmxpc3Rbbl09M0RlLm9u ZGVsPyEwOiExLHRoaXMub3B0aW9ucy5vbm5ldz90aGlzLiRuYXYuZj0KaW5kKCIjbmV3LXRhYiIp LmJlZm9yZShyKTp0aGlzLiRuYXYuYXBwZW5kKHIpLGkuYXBwZW5kKGUuJGVsKSx0aGlzLiRjb250 ZW50PQouYXBwZW5kKGkpLHRoaXMuc2l6ZSgpPTNEPTNEMSYmKHIuYWRkQ2xhc3MoImFjdGl2ZSIp LGkuYWRkQ2xhc3MoImFjdGl2ZSIpLHQ9Cmhpcy5maXJzdF90YWI9M0RuKSx0aGlzLm9wdGlvbnMu bWF4JiZ0aGlzLnNpemUoKT49M0R0aGlzLm9wdGlvbnMubWF4JiZ0aGlzLj0KJGVsLmZpbmQoIiNu ZXctdGFiIikuaGlkZSgpO2lmKGUub25kZWwpe3ZhciBzPTNEci5maW5kKCIjZGVsZXRlIik7cy50 b29sdGlwPQooe3RpdGxlOiJEZWxldGUgdGhpcyB0YWIiLHBsYWNlbWVudDoiYm90dG9tIixjb250 YWluZXI6dC4kZWx9KSxzLm9uKCJjbGljayI9CixmdW5jdGlvbigpe3JldHVybiBzLnRvb2x0aXAo ImRlc3Ryb3kiKSx0LiRlbC5maW5kKCIudG9vbHRpcCIpLnJlbW92ZSgpLGUubz0KbmRlbCgpLCEx fSl9ci5vbigiY2xpY2siLGZ1bmN0aW9uKHIpe3IucHJldmVudERlZmF1bHQoKSxlLm9uY2xpY2s/ ZS5vbmNsaWNrPQooKTp0LnNob3cobil9KSx0aGlzLmN1cnJlbnRfaWR8fCh0aGlzLmN1cnJlbnRf aWQ9M0RuKX0sZGVsOmZ1bmN0aW9uKGUpe3RoaXM9Ci4kZWwuZmluZCgiI3RhYi0iK2UpLnJlbW92 ZSgpLHRoaXMuJGVsLmZpbmQoIiMiK2UpLnJlbW92ZSgpLHRoaXMuZmlyc3RfdGFiPQo9M0Q9M0Rl JiYodGhpcy5maXJzdF90YWI9M0RudWxsKSx0aGlzLmZpcnN0X3RhYiE9M0RudWxsJiZ0aGlzLnNo b3codGhpcy5maXI9CnN0X3RhYiksdGhpcy5saXN0W2VdJiZkZWxldGUgdGhpcy5saXN0W2VdLHRo aXMuc2l6ZSgpPHRoaXMub3B0aW9ucy5tYXgmJnRoaT0Kcy4kZWwuZmluZCgiI25ldy10YWIiKS5z aG93KCl9LGRlbFJlbW92YWJsZTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmxpPQpzdCl0 aGlzLmRlbChlKX0sc2hvdzpmdW5jdGlvbihlKXt0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0aGlz LnZpc2libGU9M0QhMCw9CmUmJih0aGlzLiRlbC5maW5kKCIjdGFiLSIrdGhpcy5jdXJyZW50X2lk KS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWwuZj0KaW5kKCIjIit0aGlzLmN1cnJlbnRf aWQpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbC5maW5kKCIjdGFiLSIrZSkuYWRkPQpD bGFzcygiYWN0aXZlIiksdGhpcy4kZWwuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRo aXMuY3VycmVudF9pZD0zRGU9CiksdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMu b25jaGFuZ2UoZSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbD0KLmZhZGVPdXQoImZhc3QiKSx0 aGlzLnZpc2libGU9M0QhMX0saGlkZU9wZXJhdGlvbjpmdW5jdGlvbihlKXt0aGlzLiRuYXYuZmlu PQpkKCIjIitlKS5oaWRlKCl9LHNob3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kbmF2LmZp bmQoIiMiK2UpLnNob3coKX0sc2U9CnRPcGVyYXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHRo aXMuJG5hdi5maW5kKCIjIitlKTtuLm9mZigiY2xpY2siKSxuLm9uKD0KImNsaWNrIix0KX0sdGl0 bGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHRoaXMuJGVsLmZpbmQoIiN0YWItdGl0bGUtdGV4dC0i K2UpPQo7cmV0dXJuIHQmJm4uaHRtbCh0KSxuLmh0bWwoKX0scmV0aXRsZTpmdW5jdGlvbihlKXt2 YXIgdD0zRDA7Zm9yKHZhciBuIGluIHQ9Cmhpcy5saXN0KXRoaXMudGl0bGUobiwrK3QrIjogIitl KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGNsYXNzPQo9M0QidWktdGFicyB0 YWJiYWJsZSB0YWJzLWxlZnQiPjx1bCBpZD0zRCJ0YWItbmF2aWdhdGlvbiIgY2xhc3M9M0QidGFi LW5hdmk9CmdhdGlvbiBuYXYgbmF2LXRhYnMiPjxkaXYgY2xhc3M9M0Qib3BlcmF0aW9ucyIgc3R5 bGU9M0QiZmxvYXQ6IHJpZ2h0OyBtYXJnaT0Kbi1ib3R0b206IDRweDsiPjwvZGl2PjwvdWw+PGRp diBpZD0zRCJ0YWItY29udGVudCIgY2xhc3M9M0QidGFiLWNvbnRlbnQiLz48PQovZGl2Pid9LF90 ZW1wbGF0ZV90YWJfbmV3OmZ1bmN0aW9uKGUpe3JldHVybic8bGkgaWQ9M0QibmV3LXRhYiI+PGEg aHJlZj0zRCI9CmphdmFzY3JpcHQ6dm9pZCgwKTsiPjxpIGNsYXNzPTNEInVpLXRhYnMtYWRkIGZh IGZhLXBsdXMtY2lyY2xlIi8+JytlLnRpdGxlXz0KbmV3KyI8L2E+IisiPC9saT4ifSxfdGVtcGxh dGVfdGFiOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxsaSBpZD0zRCJ0YWItJytlLmlkPQorJyIgY2xh c3M9M0QidGFiLWVsZW1lbnQiPicrJzxhIGlkPTNEInRhYi10aXRsZS1saW5rLScrZS5pZCsnIiB0 aXRsZT0zRCIiIGg9CnJlZj0zRCIjJytlLmlkKyciIGRhdGEtb3JpZ2luYWwtdGl0bGU9M0QiIj4n Kyc8c3BhbiBpZD0zRCJ0YWItdGl0bGUtdGV4dC0nKz0KZS5pZCsnIiBjbGFzcz0zRCJ0YWItdGl0 bGUtdGV4dCI+JytlLnRpdGxlKyI8L3NwYW4+IjtyZXR1cm4gZS5vbmRlbCYmKHQrPTNEPQonPGkg aWQ9M0QiZGVsZXRlIiBjbGFzcz0zRCJ1aS10YWJzLWRlbGV0ZSBmYSBmYS1taW51cy1jaXJjbGUi Lz4nKSx0Kz0zRCI8L2E9Cj48L2xpPiIsdH0sX3RlbXBsYXRlX3RhYl9jb250ZW50OmZ1bmN0aW9u KGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbD0KYXNzPTNEInRhYi1wYW5lIi8+J319 KTtyZXR1cm57Vmlldzp0fX0pLGRlZmluZSgibXZjL3VpL3VpLXRhYmxlIixbInV0aWxzL3V0PQpp bHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtyb3c6bnVsbCxy b3dfY291bnQ6MCxvcHRpb249CnNEZWZhdWx0Ontjb250ZW50OiJObyBjb250ZW50IGF2YWlsYWJs ZS4iLG9uY2hhbmdlOm51bGwsb25kYmxjbGljazpudWxsLG9uYz0Kb25maXJtOm51bGwsY2xzOiJ1 aS10YWJsZSIsY2xzX3RyOiIifSxldmVudHM6e2NsaWNrOiJfb25jbGljayIsZGJsY2xpY2s6Il9v PQpuZGJsY2xpY2sifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVy Z2UodCx0aGlzLm9wdGlvbnNEZWY9CmF1bHQpO3ZhciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlz Lm9wdGlvbnMpKTt0aGlzLiR0aGVhZD0zRG4uZmluZCgidGhlYWQiKT0KLHRoaXMuJHRib2R5PTNE bi5maW5kKCJ0Ym9keSIpLHRoaXMuJHRtZXNzYWdlPTNEbi5maW5kKCJ0bWVzc2FnZSIpLHRoaXMu c2V0PQpFbGVtZW50KG4pLHRoaXMucm93PTNEdGhpcy5fcm93KCl9LGFkZEhlYWRlcjpmdW5jdGlv bihlKXt2YXIgdD0zRCQoIjx0aD48L3Q9Cmg+Iik7dC5hcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5k KHQpfSxhcHBlbmRIZWFkZXI6ZnVuY3Rpb24oKXt0aGlzLiR0aGVhZC5hcD0KcGVuZCh0aGlzLnJv dyksdGhpcy5yb3c9M0QkKCI8dHI+PC90cj4iKX0sYWRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0z RCQoIjx0PQpkPjwvdGQ+Iik7dCYmci5jc3MoIndpZHRoIix0KSxuJiZyLmNzcygidGV4dC1hbGln biIsbiksci5hcHBlbmQoZSksdGhpcy5yb3c9Ci5hcHBlbmQocil9LGFwcGVuZDpmdW5jdGlvbihl LHQpe3RoaXMuX2NvbW1pdChlLHQsITEpfSxwcmVwZW5kOmZ1bmN0aW9uKGUsdD0KKXt0aGlzLl9j b21taXQoZSx0LCEwKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRlbC5maW5kKCIjIitl KX0sZGVsOmZ1PQpuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiR0Ym9keS5maW5kKCIjIitlKTt0Lmxl bmd0aD4wJiYodC5yZW1vdmUoKSx0aGlzLnJvd189CmNvdW50LS0sdGhpcy5fcmVmcmVzaCgpKX0s ZGVsQWxsOmZ1bmN0aW9uKCl7dGhpcy4kdGJvZHkuZW1wdHkoKSx0aGlzLnJvd19jbz0KdW50PTNE MCx0aGlzLl9yZWZyZXNoKCl9LHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYmVmb3JlPTNEdGhpcy4k dGJvZHkuZmluZCgiPQouY3VycmVudCIpLmF0dHIoImlkIiksZSE9M0Q9M0R1bmRlZmluZWQmJih0 aGlzLiR0Ym9keS5maW5kKCJ0ciIpLnJlbW92ZUNsYXM9CnMoImN1cnJlbnQiKSxlJiZ0aGlzLiR0 Ym9keS5maW5kKCIjIitlKS5hZGRDbGFzcygiY3VycmVudCIpKTt2YXIgdD0zRHRoaXMuJD0KdGJv ZHkuZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpO3JldHVybiB0PTNEPTNEPTNEdW5kZWZpbmVk P251bGw6KHQhPTNEdGhpPQpzLmJlZm9yZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9w dGlvbnMub25jaGFuZ2UoZSksdCl9LHNpemU6ZnVuY3Rpb249Cigpe3JldHVybiB0aGlzLiR0Ym9k eS5maW5kKCJ0ciIpLmxlbmd0aH0sX2NvbW1pdDpmdW5jdGlvbihlLHQsbil7dGhpcy5kZWwoZT0K KSx0aGlzLnJvdy5hdHRyKCJpZCIsZSksbj90aGlzLiR0Ym9keS5wcmVwZW5kKHRoaXMucm93KTp0 aGlzLiR0Ym9keS5hcHBlbmQoPQp0aGlzLnJvdyksdCYmKHRoaXMucm93LmhpZGUoKSx0aGlzLnJv dy5mYWRlSW4oKSksdGhpcy5yb3c9M0R0aGlzLl9yb3coKSx0aGk9CnMucm93X2NvdW50KyssdGhp cy5fcmVmcmVzaCgpfSxfcm93OmZ1bmN0aW9uKCl7cmV0dXJuICQoJzx0ciBjbGFzcz0zRCInK3Ro aT0Kcy5vcHRpb25zLmNsc190cisnIj48L3RyPicpfSxfb25jbGljazpmdW5jdGlvbihlKXt2YXIg dD0zRHRoaXMudmFsdWUoKSxuPTNEPQokKGUudGFyZ2V0KS5jbG9zZXN0KCJ0ciIpLmF0dHIoImlk Iik7biE9M0QiIiYmbiYmdCE9M0RuJiYodGhpcy5vcHRpb25zLm9uY289Cm5maXJtP3RoaXMub3B0 aW9ucy5vbmNvbmZpcm0obik6dGhpcy52YWx1ZShuKSl9LF9vbmRibGNsaWNrOmZ1bmN0aW9uKGUp e3Zhcj0KIHQ9M0R0aGlzLnZhbHVlKCk7dCYmdGhpcy5vcHRpb25zLm9uZGJsY2xpY2smJnRoaXMu b3B0aW9ucy5vbmRibGNsaWNrKHQpfSxfPQpyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5yb3dfY291 bnQ9M0Q9M0QwP3RoaXMuJHRtZXNzYWdlLnNob3coKTp0aGlzLiR0bWVzc2E9CmdlLmhpZGUoKX0s X3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2Pjx0YWJsZSBjbGFzcz0zRCInK2UuY2xz KyciPicrIj0KPHRoZWFkPjwvdGhlYWQ+IisiPHRib2R5PjwvdGJvZHk+IisiPC90YWJsZT4iKyI8 dG1lc3NhZ2U+IitlLmNvbnRlbnQrIjwvdG1lPQpzc2FnZT4iKyI8ZGl2PiJ9fSk7cmV0dXJue1Zp ZXc6dH19KSxkZWZpbmUoInBsdWdpbi92aWV3cy9ncm91cCIsWyJtdmMvdWkvdWk9Ci10YWJsZSIs Im12Yy91aS91aS1taXNjIiwidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJh Y2tib25lLlZpZT0Kdy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24ocixpKXt0aGlzLmFwcD0z RHI7dmFyIHM9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0PQpoaXMuYXBwLmNoYXJ0LHRoaXMuZ3JvdXA9 M0RpLmdyb3VwLHRoaXMuZ3JvdXBfa2V5PTNEbmV3IHQuSW5wdXQoe3BsYWNlaG9sZGU9CnI6IkRh dGEgbGFiZWwiLG9uY2hhbmdlOmZ1bmN0aW9uKGUpe3MuZ3JvdXAuc2V0KCJrZXkiLGUpfX0pLHRo aXMudGFibGU9M0RuZT0KdyBlLlZpZXcoe2NvbnRlbnQ6Ik5vIGRhdGEgY29sdW1uLiJ9KTt2YXIg bz0zRCQoIjxkaXYvPiIpO28uYXBwZW5kKG4ud3JhcCgoPQpuZXcgdC5MYWJlbCh7dGl0bGU6IlBy b3ZpZGUgYSBsYWJlbDoifSkpLiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLmdyb3VwX2s9CmV5 LiRlbCkpLG8uYXBwZW5kKG4ud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJTZWxlY3QgY29sdW1u czoifSkpLiRlbCkpLG8uYT0KcHBlbmQobi53cmFwKHRoaXMudGFibGUuJGVsKSksdGhpcy5zZXRF bGVtZW50KG8pO3ZhciBzPTNEdGhpczt0aGlzLmNoYXJ0Lm9uPQooImNoYW5nZTpkYXRhc2V0X2lk IixmdW5jdGlvbigpe3MuX3JlZnJlc2hUYWJsZSgpfSksdGhpcy5jaGFydC5vbigiY2hhbmdlOnQ9 CnlwZSIsZnVuY3Rpb24oKXtzLl9yZWZyZXNoVGFibGUoKX0pLHRoaXMuZ3JvdXAub24oImNoYW5n ZTprZXkiLGZ1bmN0aW9uKCl7cz0KLl9yZWZyZXNoR3JvdXBLZXkoKX0pLHRoaXMuZ3JvdXAub24o ImNoYW5nZSIsZnVuY3Rpb24oKXtzLl9yZWZyZXNoR3JvdXAoKX0pPQosdGhpcy5fcmVmcmVzaFRh YmxlKCksdGhpcy5fcmVmcmVzaEdyb3VwS2V5KCksdGhpcy5fcmVmcmVzaEdyb3VwKCl9LF9yZWZy ZXM9CmhUYWJsZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5jaGFydC5nZXQoImRhdGFzZXRfaWQi KSxuPTNEdGhpcy5jaGFydC5nZXQoIj0KdHlwZSIpO2lmKCFlfHwhbilyZXR1cm47dmFyIHI9M0R0 aGlzLGk9M0R0aGlzLmNoYXJ0LmRlZmluaXRpb247dGhpcy50YWJsZS5kPQplbEFsbCgpO3ZhciBz PTNEe307Zm9yKHZhciBvIGluIGkuY29sdW1ucyl7dmFyIHU9M0RpLmNvbHVtbnNbb107aWYoIXUp e2NvbnM9Cm9sZS5kZWJ1ZygiR3JvdXA6Ol9yZWZyZXNoVGFibGUoKSAtIFNraXBwaW5nIGNvbHVt biBkZWZpbml0aW9uLiIpO2NvbnRpbnVlfT0KdmFyIGE9M0RuZXcgdC5TZWxlY3QuVmlldyh7aWQ6 InNlbGVjdF8iK28sd2FpdDohMH0pLGY9M0R1LnRpdGxlO3UuaXNfdW5pcXVlPQomJihmKz0zRCIm bmJzcDsoYWxsIGRhdGEgbGFiZWxzKSIpLHRoaXMudGFibGUuYWRkKGYsIjI1JSIpLHRoaXMudGFi bGUuYWRkKGE9Ci4kZWwpLHRoaXMudGFibGUuYXBwZW5kKG8pLHNbb109M0RhfXRoaXMuY2hhcnQu c3RhdGUoIndhaXQiLCJMb2FkaW5nIG1ldGFkYT0KdGEuLi4iKTt2YXIgbD0zRHRoaXMuYXBwLmRl ZmVycmVkLnJlZ2lzdGVyKCksYz0zRHtpZDplLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7PQpmb3IodmFy IHQgaW4gcylyLl9hZGRSb3codCxlLHMsaS5jb2x1bW5zW3RdKTtyLmNoYXJ0LnN0YXRlKCJvayIs Ik1ldGFkYXRhIGk9Cm5pdGlhbGl6ZWQuLi4iKSxyLmFwcC5kZWZlcnJlZC5kb25lKGwpfX07dGhp cy5hcHAuZGF0YXNldHMucmVxdWVzdChjKX0sX2FkZD0KUm93OmZ1bmN0aW9uKGUsdCxuLHIpe3Zh ciBpPTNEdGhpcyxzPTNEci5pc19sYWJlbCxvPTNEci5pc19hdXRvLHU9M0RyLmlzX251PQptZXJp YyxhPTNEci5pc191bmlxdWUsZj0zRHIuaXNfemVybyxsPTNEW10sYz0zRG5bZV07byYmbC5wdXNo KHtsYWJlbDoiQ29sdW09Cm46IFJvdyBOdW1iZXIiLHZhbHVlOiJhdXRvIn0pLGYmJmwucHVzaCh7 bGFiZWw6IkNvbHVtbjogTm9uZSIsdmFsdWU6Inplcm8ifT0KKTt2YXIgaD0zRHQubWV0YWRhdGFf Y29sdW1uX3R5cGVzO2Zvcih2YXIgcCBpbiBoKXt2YXIgZD0zRCExO2hbcF09M0Q9M0QiaW50PQoi fHxoW3BdPTNEPTNEImZsb2F0Ij9kPTNEdTpkPTNEcyxkJiZsLnB1c2goe2xhYmVsOiJDb2x1bW46 ICIrKHBhcnNlSW50KHApKzE9CikrIiBbIitoW3BdKyJdIix2YWx1ZTpwfSl9Yy51cGRhdGUobCks YSYmdGhpcy5jaGFydC5ncm91cHMuZmlyc3QoKSYmdGhpcy5ncj0Kb3VwLnNldChlLHRoaXMuY2hh cnQuZ3JvdXBzLmZpcnN0KCkuZ2V0KGUpKTtpZighYy5leGlzdHModGhpcy5ncm91cC5nZXQoZSkp PQope3ZhciB2PTNEYy5maXJzdCgpO2NvbnNvbGUuZGVidWcoJ0dyb3VwKCk6Ol9hZGRSb3coKSAt IFN3aXRjaGluZyBtb2RlbCB2YWw9CnVlIGZyb20gIicrdGhpcy5ncm91cC5nZXQoZSkrJyIgdG8g IicrdisnIi4nKSx0aGlzLmdyb3VwLnNldChlLHYpfWMudmFsdWUodD0KaGlzLmdyb3VwLmdldChl KSksdGhpcy5ncm91cC5vZmYoImNoYW5nZToiK2UpLHRoaXMuZ3JvdXAub24oImNoYW5nZToiK2Us ZnVuPQpjdGlvbigpe2MudmFsdWUoaS5ncm91cC5nZXQoZSkpfSksYy5zZXRPbkNoYW5nZShmdW5j dGlvbih0KXthP2kuY2hhcnQuZ3JvdXA9CnMuZWFjaChmdW5jdGlvbihuKXtuLnNldChlLHQpfSk6 aS5ncm91cC5zZXQoZSx0KSxpLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKT0KfSksYy5zaG93KCl9 LF9yZWZyZXNoR3JvdXA6ZnVuY3Rpb24oKXt0aGlzLmdyb3VwLnNldCgiZGF0ZSIsbi50aW1lKCkp fSxfcmVmPQpyZXNoR3JvdXBLZXk6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuZ3JvdXAuZ2V0KCJr ZXkiKTtlPTNEPTNEPTNEdW5kZWZpbmVkJiY9CihlPTNEIiIpLHRoaXMuZ3JvdXBfa2V5LnZhbHVl KGUpfX0pfSksZGVmaW5lKCJwbHVnaW4vbGlicmFyeS91aS10YWJsZS1mb3JtIj0KLFsibXZjL3Vp L3VpLXRhYmxlIiwibXZjL3VpL3VpLW1pc2MiLCJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUsdCxu KXt2YXIgcj0KPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZToi Iixjb250ZW50OiIiLG1vZGU6IiJ9LGxpc3Q6PQpbXSxpbml0aWFsaXplOmZ1bmN0aW9uKHIsaSl7 dGhpcy5hcHA9M0RyLHRoaXMub3B0aW9ucz0zRG4ubWVyZ2UoaSx0aGlzLm9wdGk9Cm9uc0RlZmF1 bHQpLHRoaXMudGFibGVfdGl0bGU9M0RuZXcgdC5MYWJlbCh7dGl0bGU6dGhpcy5vcHRpb25zLnRp dGxlfSksdGhpcz0KLnRhYmxlPTNEbmV3IGUuVmlldyh7Y29udGVudDp0aGlzLm9wdGlvbnMuY29u dGVudH0pO3ZhciBzPTNEJCgnPGRpdiBjbGFzcz0KPTNEInVpLXRhYmxlLWZvcm0iLz4nKTt0aGlz Lm9wdGlvbnMudGl0bGUmJnMuYXBwZW5kKG4ud3JhcCh0aGlzLnRhYmxlX3RpdGxlPQouJGVsKSks cy5hcHBlbmQobi53cmFwKHRoaXMudGFibGUuJGVsKSksdGhpcy5zZXRFbGVtZW50KHMpfSx0aXRs ZTpmdW5jdGlvbig9CmUpe3RoaXMudGFibGVfdGl0bGUudGl0bGUoZSl9LHVwZGF0ZTpmdW5jdGlv bihlLHQpe3RoaXMudGFibGUuZGVsQWxsKCksdGhpcz0KLmxpc3Q9M0RbXTtmb3IodmFyIG4gaW4g ZSl0aGlzLl9hZGQoZVtuXS5pZHx8bixlW25dLHQpO2Zvcih2YXIgbiBpbiB0aGlzLmxpPQpzdCl0 aGlzLmxpc3Rbbl0udHJpZ2dlcigiY2hhbmdlIil9LF9hZGQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBp PTNEdGhpcyxzPTNEbnU9CmxsLG89M0RuLnR5cGU7c3dpdGNoKG8pe2Nhc2UidGV4dCI6cz0zRG5l dyB0LklucHV0KHtpZDoiZmllbGQtIitlLHBsYWNlaG9sZD0KZXI6bi5wbGFjZWhvbGRlcix2YWx1 ZTpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvbih0KXtyLnNldChlLHQpfX0pO2JyZWFrO2NhPQpz ZSJyYWRpb2J1dHRvbiI6cz0zRG5ldyB0LlJhZGlvQnV0dG9uLlZpZXcoe2lkOiJmaWVsZC0iK2Us ZGF0YTpuLmRhdGEsdmFsdWU9CjpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvbih0KXtyLnNldChl LHQpO3ZhciBzPTNEXy5maW5kV2hlcmUobi5kYXRhLHt2YWx1ZT0KOnR9KTtpZihzJiZzLm9wZXJh dGlvbnMpe3ZhciBvPTNEcy5vcGVyYXRpb25zO2Zvcih2YXIgdSBpbiBvLnNob3cpe3ZhciBhPTNE PQpvLnNob3dbdV07aS50YWJsZS5nZXQoYSkuc2hvdygpfWZvcih2YXIgdSBpbiBvLmhpZGUpe3Zh ciBhPTNEby5oaWRlW3VdO2kudGE9CmJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlYWs7Y2FzZSJz ZWxlY3QiOnM9M0RuZXcgdC5TZWxlY3QuVmlldyh7aWQ6ImZpZWxkLT0KIitlLGRhdGE6bi5kYXRh LHZhbHVlOnIuZ2V0KGUpLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCk7dmFyIHM9M0Rf LmZpPQpuZFdoZXJlKG4uZGF0YSx7dmFsdWU6dH0pO2lmKHMmJnMub3BlcmF0aW9ucyl7dmFyIG89 M0RzLm9wZXJhdGlvbnM7Zm9yKHZhciA9CnUgaW4gby5zaG93KXt2YXIgYT0zRG8uc2hvd1t1XTtp LnRhYmxlLmdldChhKS5zaG93KCl9Zm9yKHZhciB1IGluIG8uaGlkZSl7dj0KYXIgYT0zRG8uaGlk ZVt1XTtpLnRhYmxlLmdldChhKS5oaWRlKCl9fX19KTticmVhaztjYXNlImRhdGFzZXQiOnM9M0Ru ZXcgdC5TPQplbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iu c2V0KGUsdCl9fSksaS5hcHAuZGF0YXNldHM9Ci5vbigiYWxsIixmdW5jdGlvbigpe3ZhciB0PTNE W107aS5hcHAuZGF0YXNldHMuZWFjaChmdW5jdGlvbihlKXtlLmdldCgiZGF0YT0KdHlwZV9pZCIp PTNEPTNEbi5kYXRhJiZ0LnB1c2goe3ZhbHVlOmUuZ2V0KCJpZCIpLGxhYmVsOmUuZ2V0KCJuYW1l Iil9KX0pLHMuPQp1cGRhdGUodCksci5nZXQoZSl8fHIuc2V0KGUscy5maXJzdCgpKSxzLnZhbHVl KHIuZ2V0KGUpKX0pLGkuYXBwLmRhdGFzZXRzLnQ9CnJpZ2dlcigiYWxsLmRhdGFzZXRzIik7YnJl YWs7Y2FzZSJ0ZXh0YXJlYSI6cz0zRG5ldyB0LlRleHRhcmVhKHtpZDoiZmllbGQtIj0KK2Usb25j aGFuZ2U6ZnVuY3Rpb24oKXtyLnNldChlLHMudmFsdWUoKSl9fSk7YnJlYWs7Y2FzZSJzZXBhcmF0 b3IiOnM9M0QkKCI8PQpkaXYvPiIpO2JyZWFrO2RlZmF1bHQ6cz0zRG5ldyB0LklucHV0KHtpZDoi ZmllbGQtIitlLHBsYWNlaG9sZGVyOm4ucGxhY2Vob2w9CmRlcix0eXBlOm4udHlwZSxvbmNoYW5n ZTpmdW5jdGlvbigpe3Iuc2V0KGUscy52YWx1ZSgpKX19KX1pZihvIT0zRCJzZXBhcmF0bz0KciIp e3IuZ2V0KGUpfHxyLnNldChlLG4uaW5pdCkscy52YWx1ZShyLmdldChlKSksdGhpcy5saXN0W2Vd PTNEczt2YXIgdT0zRCQoPQoiPGRpdi8+Iik7dS5hcHBlbmQocy4kZWwpLG4uaW5mbyYmdS5hcHBl bmQoJzxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS1pbmY9Cm8iPicrbi5pbmZvKyI8L2Rpdj4i KSx0aGlzLm9wdGlvbnMuc3R5bGU9M0Q9M0QiYm9sZCI/KHRoaXMudGFibGUuYWRkKChuZXcgdD0K LkxhYmVsKHt0aXRsZTpuLnRpdGxlLGNsczoiZm9ybS1sYWJlbCJ9KSkuJGVsKSx0aGlzLnRhYmxl LmFkZCh1KSk6KHRoaXMudGFiPQpsZS5hZGQoJzxzcGFuIGNsYXNzPTNEInVpLXRhYmxlLWZvcm0t dGl0bGUiPicrbi50aXRsZSsiPC9zcGFuPiIsIjI1JSIpLHRoaXM9Ci50YWJsZS5hZGQodSkpfWVs c2UgdGhpcy50YWJsZS5hZGQoJzxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS1zZXBhcmF0b3Ii Pj0KJytuLnRpdGxlKyI6PGRpdi8+IiksdGhpcy50YWJsZS5hZGQoJCgiPGRpdi8+IikpO3RoaXMu dGFibGUuYXBwZW5kKGUpLG4uaGlkPQplJiZ0aGlzLnRhYmxlLmdldChlKS5oaWRlKCl9fSk7cmV0 dXJue1ZpZXc6cn19KSxkZWZpbmUoInBsdWdpbi92aWV3cy9zZXR0aW49CmdzIixbIm12Yy91aS91 aS1taXNjIiwicGx1Z2luL2xpYnJhcnkvdWktdGFibGUtZm9ybSIsInV0aWxzL3V0aWxzIl0sZnVu Y3Rpbz0KbihlLHQsbil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1 bmN0aW9uKGUsbil7dGhpcy5hcHA9M0RlPQo7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlz LmFwcC5jaGFydCx0aGlzLmZvcm09M0RuZXcgdC5WaWV3KGUse3RpdGxlOiI9CkNvbmZpZ3VyYXRp b24iLGNvbnRlbnQ6IlRoaXMgY2hhcnQgdHlwZSBkb2VzIG5vdCBwcm92aWRlIGFueSBvcHRpb25z LiJ9KSx0aD0KaXMuc2V0RWxlbWVudCh0aGlzLmZvcm0uJGVsKTt2YXIgcj0zRHRoaXM7dGhpcy5j aGFydC5vbigiY2hhbmdlIixmdW5jdGlvbigpPQp7ci5fcmVmcmVzaCgpfSl9LF9yZWZyZXNoOmZ1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0LmRlZmluaXRpb247aWYoIWUpcmU9CnR1cm47dGhp cy5mb3JtLnRpdGxlKGUuY2F0ZWdvcnkrIiAtICIrZS50aXRsZSsiOiIpLHRoaXMuZm9ybS51cGRh dGUoZS5zZXR0aT0KbmdzLHRoaXMuY2hhcnQuc2V0dGluZ3MpfX0pfSksZGVmaW5lKCJwbHVnaW4v dmlld3MvdHlwZXMiLFsidXRpbHMvdXRpbHMiLCJtPQp2Yy91aS91aS1taXNjIl0sZnVuY3Rpb24o ZSx0KXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ons9Cm9uY2hh bmdlOm51bGwsb25kYmxjbGljazpudWxsfSxldmVudHM6e2NsaWNrOiJfb25jbGljayIsZGJsY2xp Y2s6Il9vbmRibGNsaT0KY2sifSxpbml0aWFsaXplOmZ1bmN0aW9uKG4scil7dmFyIGk9M0R0aGlz O3RoaXMuYXBwPTNEbix0aGlzLm9wdGlvbnM9M0RlLm1lPQpyZ2Uocix0aGlzLm9wdGlvbnNEZWZh dWx0KTt2YXIgcz0zRCQoJzxkaXYgY2xhc3M9M0QiY2hhcnRzLWdyaWQiLz4nKTtzLmFwcGU9Cm5k KGUud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJIb3cgbWFueSBkYXRhIHBvaW50cyB3b3VsZCB5 b3UgbGlrZSB0byBhbmFseT0KemU/In0pKS4kZWwpKSx0aGlzLmxpYnJhcnk9M0RuZXcgdC5SYWRp b0J1dHRvbi5WaWV3KHtkYXRhOlt7bGFiZWw6IkZldyAoPDUwPQowKSIsdmFsdWU6InNtYWxsIn0s e2xhYmVsOiJTb21lICg8MTBrKSIsdmFsdWU6Im1lZGl1bSJ9LHtsYWJlbDoiTWFueSAoPjEwayk9 CiIsdmFsdWU6ImxhcmdlIn1dLG9uY2hhbmdlOmZ1bmN0aW9uKGUpe2kuX2ZpbHRlcihlKX19KSxz LmFwcGVuZChlLndyYXAodGhpcz0KLmxpYnJhcnkuJGVsKSksdGhpcy5zZXRFbGVtZW50KHMpLHRo aXMuX3JlbmRlcigpLHRoaXMubGlicmFyeS52YWx1ZSgic21hbGwiPQopLHRoaXMubGlicmFyeS50 cmlnZ2VyKCJjaGFuZ2UiKX0sdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiRlbC5maW5k KCI9Ci5jdXJyZW50IikuYXR0cigiaWQiKTtlIT0zRD0zRHVuZGVmaW5lZCYmKHRoaXMuJGVsLmZp bmQoIi5jdXJyZW50IikucmVtb3ZlQz0KbGFzcygiY3VycmVudCIpLHRoaXMuJGVsLmZpbmQoIiMi K2UpLmFkZENsYXNzKCJjdXJyZW50IikpO3ZhciBuPTNEdGhpcy4kZWwuPQpmaW5kKCIuY3VycmVu dCIpLmF0dHIoImlkIik7cmV0dXJuIG49M0Q9M0Q9M0R1bmRlZmluZWQ/bnVsbDoobiE9M0R0JiZ0 aGlzLm89CnB0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpLG4pfSxfZmls dGVyOmZ1bmN0aW9uKGUpe3RoaXMuJGVsLj0KZmluZCgiLmhlYWRlciIpLmhpZGUoKTt2YXIgdD0z RHRoaXMuYXBwLnR5cGVzLmF0dHJpYnV0ZXM7Zm9yKHZhciBuIGluIHQpe3ZhPQpyIHI9M0R0W25d LGk9M0R0aGlzLiRlbC5maW5kKCIjIituKSxzPTNEdGhpcy4kZWwuZmluZCgiI3R5cGVzLWhlYWRl ci0iK3RoaXM9Ci5jYXRlZ29yaWVzX2luZGV4W3IuY2F0ZWdvcnldKSxvPTNEci5rZXl3b3Jkc3x8 IiI7by5pbmRleE9mKGUpPj0zRDA/KGkuc2hvdz0KKCkscy5zaG93KCkpOmkuaGlkZSgpfX0sX3Jl bmRlcjpmdW5jdGlvbigpe3RoaXMuY2F0ZWdvcmllcz0zRHt9LHRoaXMuY2F0ZWdvPQpyaWVzX2lu ZGV4PTNEe307dmFyIGU9M0QwLHQ9M0R0aGlzLmFwcC50eXBlcy5hdHRyaWJ1dGVzO2Zvcih2YXIg biBpbiB0KXt2YXI9CiByPTNEdFtuXSxpPTNEci5jYXRlZ29yeTt0aGlzLmNhdGVnb3JpZXNbaV18 fCh0aGlzLmNhdGVnb3JpZXNbaV09M0R7fSx0aGlzLj0KY2F0ZWdvcmllc19pbmRleFtpXT0zRGUr KyksdGhpcy5jYXRlZ29yaWVzW2ldW25dPTNEcn1mb3IodmFyIGkgaW4gdGhpcy5jYXRlPQpnb3Jp ZXMpe3ZhciBzPTNEJCgnPGRpdiBzdHlsZT0zRCJjbGVhcjogYm90aDsiLz4nKTtzLmFwcGVuZCh0 aGlzLl90ZW1wbGF0ZV89CmhlYWRlcih7aWQ6InR5cGVzLWhlYWRlci0iK3RoaXMuY2F0ZWdvcmll c19pbmRleFtpXSx0aXRsZTppfSkpO2Zvcih2YXIgbiBpbj0KIHRoaXMuY2F0ZWdvcmllc1tpXSl7 dmFyIHI9M0R0aGlzLmNhdGVnb3JpZXNbaV1bbl0sbz0zRHIudGl0bGUrIiAoIityLmxpYnJhPQpy eSsiKSI7ci56b29tYWJsZSYmKG89M0QnPHNwYW4gY2xhc3M9M0QiZmEgZmEtc2VhcmNoLXBsdXMi Lz4nK28pLHMuYXBwZW5kKHQ9Cmhpcy5fdGVtcGxhdGVfaXRlbSh7aWQ6bix0aXRsZTpvLHVybDpj b25maWcuYXBwX3Jvb3QrImNoYXJ0cy8iK3RoaXMuYXBwLmNoYT0KcnRQYXRoKG4pKyIvbG9nby5w bmcifSkpfXRoaXMuJGVsLmFwcGVuZChzKX19LF9vbmNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNE PQp0aGlzLnZhbHVlKCksbj0zRCQoZS50YXJnZXQpLmNsb3Nlc3QoIi5pdGVtIikuYXR0cigiaWQi KTtuIT0zRCIiJiZuJiZ0IT0zRG49CiYmdGhpcy52YWx1ZShuKX0sX29uZGJsY2xpY2s6ZnVuY3Rp b24oZSl7dmFyIHQ9M0R0aGlzLnZhbHVlKCk7dCYmdGhpcy5vcHRpbz0KbnMub25kYmxjbGljayYm dGhpcy5vcHRpb25zLm9uZGJsY2xpY2sodCl9LF90ZW1wbGF0ZV9oZWFkZXI6ZnVuY3Rpb24oZSl7 cmV0PQp1cm4nPGRpdiBpZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QiaGVhZGVyIj4nKyImYnVsbDsg IitlLnRpdGxlKyI8ZGl2PiJ9LF90ZW09CnBsYXRlX2l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuJzxk aXYgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEIml0ZW0iPicrJzxpbWcgYz0KbGFzcz0zRCJpbWFn ZSIgc3JjPTNEIicrZS51cmwrJyI+JysnPGRpdiBjbGFzcz0zRCJ0aXRsZSI+JytlLnRpdGxlKyI8 L2Rpdj4iPQorIjxkaXY+In19KX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL2VkaXRvciIsWyJtdmMv dWkvdWktdGFicyIsIm12Yy91aS91aS1taXM9CmMiLCJtdmMvdWkvdWktcG9ydGxldCIsInV0aWxz L3V0aWxzIiwicGx1Z2luL21vZGVscy9jaGFydCIsInBsdWdpbi9tb2RlbHMvZz0Kcm91cCIsInBs dWdpbi92aWV3cy9ncm91cCIsInBsdWdpbi92aWV3cy9zZXR0aW5ncyIsInBsdWdpbi92aWV3cy90 eXBlcyJdLGZ1PQpuY3Rpb24oZSx0LG4scixpLHMsbyx1LGEpe3JldHVybiBCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbig9Cmkscyl7dmFyIG89M0R0aGlzO3RoaXMuYXBw PTNEaSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5tZXNzYWdlPTNEbj0KZXcgdC5N ZXNzYWdlLHRoaXMucG9ydGxldD0zRG5ldyBuLlZpZXcoe2ljb246ImZhLWJhci1jaGFydC1vIix0 aXRsZToiRWRpdG9yPQoiLG9wZXJhdGlvbnM6e3NhdmU6bmV3IHQuQnV0dG9uSWNvbih7aWNvbjoi ZmEtc2F2ZSIsdG9vbHRpcDoiRHJhdyBDaGFydCIsdGk9CnRsZToiRHJhdyIsb25jbGljazpmdW5j dGlvbigpe28uX3NhdmVDaGFydCgpfX0pLGJhY2s6bmV3IHQuQnV0dG9uSWNvbih7aWNvbj0KOiJm YS1jYXJldC1sZWZ0Iix0b29sdGlwOiJSZXR1cm4gdG8gVmlld2VyIix0aXRsZToiQ2FuY2VsIixv bmNsaWNrOmZ1bmN0aW9uPQooKXtvLmFwcC5nbygidmlld2VyIiksby5hcHAuc3RvcmFnZS5sb2Fk KCl9fSl9fSksdGhpcy50eXBlcz0zRG5ldyBhKGkse29uY2g9CmFuZ2U6ZnVuY3Rpb24oZSl7dmFy IHQ9M0RvLmFwcC50eXBlcy5nZXQoZSk7dHx8Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gRWRpdD0K b3I6Om9uY2hhbmdlKCkgLSBDaGFydCB0eXBlIG5vdCBzdXBwb3J0ZWQuIiksby5jaGFydC5kZWZp bml0aW9uPTNEdCxvLmNoYXJ0PQouc2V0dGluZ3MuY2xlYXIoKSxvLmNoYXJ0LnNldCh7dHlwZTpl fSksby5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMCksY29uc29sZS49CmRlYnVnKCJFZGl0b3I6Om9u Y2hhbmdlKCkgLSBTd2l0Y2hlZCBjaGFydCB0eXBlLiIpfSxvbmRibGNsaWNrOmZ1bmN0aW9uKGUp ez0Kby5fc2F2ZUNoYXJ0KCl9fSksdGhpcy50YWJzPTNEbmV3IGUuVmlldyh7dGl0bGVfbmV3OiJB ZGQgRGF0YSIsb25uZXc6ZnVuY3RpPQpvbigpe3ZhciBlPTNEby5fYWRkR3JvdXBNb2RlbCgpO28u dGFicy5zaG93KGUuaWQpfX0pLHRoaXMudGl0bGU9M0RuZXcgdC5JbnA9CnV0KHtwbGFjZWhvbGRl cjoiQ2hhcnQgdGl0bGUiLG9uY2hhbmdlOmZ1bmN0aW9uKCl7by5jaGFydC5zZXQoInRpdGxlIixv LnRpdD0KbGUudmFsdWUoKSl9fSk7dmFyIGY9M0QkKCI8ZGl2Lz4iKTtmLmFwcGVuZChyLndyYXAo KG5ldyB0LkxhYmVsKHt0aXRsZToiUHJvPQp2aWRlIGEgY2hhcnQgdGl0bGU6In0pKS4kZWwpKSxm LmFwcGVuZChyLndyYXAodGhpcy50aXRsZS4kZWwpKSxmLmFwcGVuZChyLnc9CnJhcCh0aGlzLnR5 cGVzLiRlbCkpLHRoaXMudGFicy5hZGQoe2lkOiJtYWluIix0aXRsZToiU3RhcnQiLCRlbDpmfSks dGhpcy5zZT0KdHRpbmdzPTNEbmV3IHUodGhpcy5hcHApLHRoaXMudGFicy5hZGQoe2lkOiJzZXR0 aW5ncyIsdGl0bGU6IkNvbmZpZ3VyYXRpb24iPQosJGVsOnRoaXMuc2V0dGluZ3MuJGVsfSksdGhp cy5wb3J0bGV0LmFwcGVuZCh0aGlzLm1lc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQ9Ci5hcHBlbmQo dGhpcy50YWJzLiRlbCksdGhpcy5zZXRFbGVtZW50KHRoaXMucG9ydGxldC4kZWwpLHRoaXMudGFi cy5oaWRlT3Blcj0KYXRpb24oImJhY2siKTt2YXIgbz0zRHRoaXM7dGhpcy5jaGFydC5vbigiY2hh bmdlOnRpdGxlIixmdW5jdGlvbihlKXtvLl9yZWZyPQplc2hUaXRsZSgpfSksdGhpcy5jaGFydC5v bigiY2hhbmdlOnR5cGUiLGZ1bmN0aW9uKGUpe28udHlwZXMudmFsdWUoZS5nZXQoInQ9CnlwZSIp KX0pLHRoaXMuY2hhcnQub24oInJlc2V0IixmdW5jdGlvbihlKXtvLl9yZXNldENoYXJ0KCl9KSx0 aGlzLmFwcC5jaGFydD0KLm9uKCJyZWRyYXciLGZ1bmN0aW9uKGUpe28ucG9ydGxldC5zaG93T3Bl cmF0aW9uKCJiYWNrIil9KSx0aGlzLmFwcC5jaGFydC5nPQpyb3Vwcy5vbigiYWRkIixmdW5jdGlv bihlKXtvLl9hZGRHcm91cChlKX0pLHRoaXMuYXBwLmNoYXJ0Lmdyb3Vwcy5vbigicmVtb3Y9CmUi LGZ1bmN0aW9uKGUpe28uX3JlbW92ZUdyb3VwKGUpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXBzLm9u KCJyZXNldCIsZnVuY3Rpbz0KbihlKXtvLl9yZW1vdmVBbGxHcm91cHMoKX0pLHRoaXMuYXBwLmNo YXJ0Lmdyb3Vwcy5vbigiY2hhbmdlOmtleSIsZnVuY3Rpb24oPQplKXtvLl9yZWZyZXNoR3JvdXBL ZXkoKX0pLHRoaXMuX3Jlc2V0Q2hhcnQoKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuJGVsLnNob3c9 CigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSxfcmVmcmVzaFRpdGxlOmZ1bmN0 aW9uKCl7dmFyIGU9M0R0aGlzLj0KY2hhcnQuZ2V0KCJ0aXRsZSIpO3RoaXMucG9ydGxldC50aXRs ZShlKSx0aGlzLnRpdGxlLnZhbHVlKGUpfSxfcmVmcmVzaEdyb3VwPQpLZXk6ZnVuY3Rpb24oKXt2 YXIgZT0zRHRoaXMsdD0zRDA7dGhpcy5jaGFydC5ncm91cHMuZWFjaChmdW5jdGlvbihuKXt2YXIg cj0KPTNEbi5nZXQoImtleSIsIiIpO3I9M0Q9M0QiIiYmKHI9M0QiRGF0YSBsYWJlbCIpLGUudGFi cy50aXRsZShuLmlkLCsrdCsiOiAiPQorcil9KX0sX2FkZEdyb3VwTW9kZWw6ZnVuY3Rpb24oKXt2 YXIgZT0zRG5ldyBzKHtpZDpyLnV1aWQoKX0pO3JldHVybiB0aGlzLmM9CmhhcnQuZ3JvdXBzLmFk ZChlKSxlfSxfYWRkR3JvdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0RuZXcgbyh0aGlz LmFwcD0KLHtncm91cDplfSk7dGhpcy50YWJzLmFkZCh7aWQ6ZS5pZCwkZWw6bi4kZWwsb25kZWw6 ZnVuY3Rpb24oKXt0LmNoYXJ0Lmdyb3VwPQpzLnJlbW92ZShlLmlkKX19KSx0aGlzLl9yZWZyZXNo R3JvdXBLZXkoKSx0aGlzLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKX0sX3I9CmVtb3ZlR3JvdXA6 ZnVuY3Rpb24oZSl7dGhpcy50YWJzLmRlbChlLmlkKSx0aGlzLl9yZWZyZXNoR3JvdXBLZXkoKSx0 aGlzLmNoYT0KcnQuc2V0KCJtb2RpZmllZCIsITApfSxfcmVtb3ZlQWxsR3JvdXBzOmZ1bmN0aW9u KGUpe3RoaXMudGFicy5kZWxSZW1vdmFibGUoPQopfSxfcmVzZXRDaGFydDpmdW5jdGlvbigpe3Ro aXMuY2hhcnQuc2V0KCJpZCIsci51dWlkKCkpLHRoaXMuY2hhcnQuc2V0KCJ0eXA9CmUiLCJudmQz X2JhciIpLHRoaXMuY2hhcnQuc2V0KCJkYXRhc2V0X2lkIix0aGlzLmFwcC5vcHRpb25zLmNvbmZp Zy5kYXRhc2V0Xz0KaWQpLHRoaXMuY2hhcnQuc2V0KCJ0aXRsZSIsIk5ldyBDaGFydCIpLHRoaXMu cG9ydGxldC5oaWRlT3BlcmF0aW9uKCJiYWNrIil9PQosX3NhdmVDaGFydDpmdW5jdGlvbigpe3Ro aXMuY2hhcnQuc2V0KHt0eXBlOnRoaXMudHlwZXMudmFsdWUoKSx0aXRsZTp0aGlzLnQ9Cml0bGUu dmFsdWUoKSxkYXRlOnIudGltZSgpfSk7aWYodGhpcy5jaGFydC5ncm91cHMubGVuZ3RoPTNEPTNE MCl7dGhpcy5tZXNzYT0KZ2UudXBkYXRlKHttZXNzYWdlOiJQbGVhc2Ugc2VsZWN0IGRhdGEgY29s dW1ucyBiZWZvcmUgZHJhd2luZyB0aGUgY2hhcnQuIn0pPQo7dmFyIGU9M0R0aGlzLl9hZGRHcm91 cE1vZGVsKCk7dGhpcy50YWJzLnNob3coZS5pZCk7cmV0dXJufXZhciB0PTNEdGhpcyxuPQo9M0Qh MCxpPTNEdGhpcy5jaGFydC5kZWZpbml0aW9uO3RoaXMuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rp b24oZSl7aWYoIW4pcmU9CnR1cm47Zm9yKHZhciByIGluIGkuY29sdW1ucylpZihlLmF0dHJpYnV0 ZXNbcl09M0Q9M0QibnVsbCIpe3QubWVzc2FnZS51cGRhdD0KZSh7c3RhdHVzOiJkYW5nZXIiLG1l c3NhZ2U6IlRoaXMgY2hhcnQgdHlwZSByZXF1aXJlcyBjb2x1bW4gdHlwZXMgbm90IGZvdW5kPQog aW4geW91ciB0YWJ1bGFyIGZpbGUuIn0pLHQudGFicy5zaG93KGUuaWQpLG49M0QhMTtyZXR1cm59 fSk7aWYoIW4pcmV0dXJuO3Q9Cmhpcy5hcHAuZ28oInZpZXdlciIpO3ZhciB0PTNEdGhpczt0aGlz LmFwcC5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7dC5hcD0KcC5zdG9yYWdlLnNhdmUoKSx0 LmNoYXJ0LnRyaWdnZXIoInJlZHJhdyIpfSl9fSl9KSxkZWZpbmUoInBsdWdpbi9tb2RlbHMvY29u PQpmaWciLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVs dHM6e3F1ZXJ5X2xpbWl0OjFlNCw9CnF1ZXJ5X3RpbWVvdXQ6MTAwfX0pfSksZGVmaW5lKCJwbHVn aW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQiLFtdLGZ1bmN0aW9uKCl7cj0KZXR1cm57dGl0bGU6IiIs Y2F0ZWdvcnk6IiIsbGlicmFyeToiIix0YWc6IiIsa2V5d29yZHM6IiIsc2V0dGluZ3M6e3NlcGFy YXRvPQpyX3g6e3RpdGxlOiJYIGF4aXMiLHR5cGU6InNlcGFyYXRvciJ9LHhfYXhpc19sYWJlbDp7 dGl0bGU6IkF4aXMgbGFiZWwiLGluZm89CjoiUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUgYXhpcy4i LHR5cGU6InRleHQiLGluaXQ6IlgtYXhpcyIscGxhY2Vob2xkZXI6IkF4aT0KcyBsYWJlbCJ9LHhf YXhpc190eXBlOnt0aXRsZToiQXhpcyB2YWx1ZSB0eXBlIixpbmZvOiJTZWxlY3QgdGhlIHZhbHVl IHR5cGUgPQpvZiB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiYXV0byIsZGF0YTpbe2xh YmVsOiItLSBEbyBub3Qgc2hvdyB2YWx1ZXM9CiAtLSIsdmFsdWU6ImhpZGUiLG9wZXJhdGlvbnM6 e2hpZGU6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkF1dG8iLHZhbD0KdWU6ImF1dG8i LG9wZXJhdGlvbnM6e2hpZGU6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkZsb2F0Iix2 YWx1ZToiZiIsPQpvcGVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVs OiJFeHBvbmVudCIsdmFsdWU6ImUiLG9wZXJhdGk9Cm9uczp7c2hvdzpbInhfYXhpc19wcmVjaXNp b24iXX19LHtsYWJlbDoiSW50ZWdlciIsdmFsdWU6ImQiLG9wZXJhdGlvbnM6e2hpZD0KZTpbInhf YXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InAiLG9wZXJhdGlv bnM6e3Nob3c6WyJ4PQpfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiU0ktcHJlZml4Iix2YWx1 ZToicyIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhpc189CnByZWNpc2lvbiJdfX1dfSx4X2F4aXNf cHJlY2lzaW9uOnt0aXRsZToiQXhpcyB0aWNrIGZvcm1hdCIsaW5mbzoiU2VsZWN0IHRoZT0KIHRp Y2sgZm9ybWF0IGZvciB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiMSIsZGF0YTpbe2xh YmVsOiIwLjAwMDAxIix2PQphbHVlOiI1In0se2xhYmVsOiIwLjAwMDEiLHZhbHVlOiI0In0se2xh YmVsOiIwLjAwMSIsdmFsdWU6IjMifSx7bGFiZWw6IjAuMDE9CiIsdmFsdWU6IjIifSx7bGFiZWw6 IjAuMSIsdmFsdWU6IjEifSx7bGFiZWw6IjEiLHZhbHVlOiIwIn1dfSxzZXBhcmF0b3JfeTp7dD0K aXRsZToiWSBheGlzIix0eXBlOiJzZXBhcmF0b3IifSx5X2F4aXNfbGFiZWw6e3RpdGxlOiJBeGlz IGxhYmVsIixpbmZvOiJQcm92PQppZGUgYSBsYWJlbCBmb3IgdGhlIGF4aXMuIix0eXBlOiJ0ZXh0 Iixpbml0OiJZLWF4aXMiLHBsYWNlaG9sZGVyOiJBeGlzIGxhYmU9CmwifSx5X2F4aXNfdHlwZTp7 dGl0bGU6IkF4aXMgdmFsdWUgdHlwZSIsaW5mbzoiU2VsZWN0IHRoZSB2YWx1ZSB0eXBlIG9mIHRo ZT0KIGF4aXMuIix0eXBlOiJzZWxlY3QiLGluaXQ6ImF1dG8iLGRhdGE6W3tsYWJlbDoiLS0gRG8g bm90IHNob3cgdmFsdWVzIC0tIix2PQphbHVlOiJoaWRlIixvcGVyYXRpb25zOntoaWRlOlsieV9h eGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJBdXRvIix2YWx1ZToiYXU9CnRvIixvcGVyYXRpb25z OntoaWRlOlsieV9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJGbG9hdCIsdmFsdWU6ImYiLG9w ZXJhdD0KaW9uczp7c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiRXhwb25lbnQi LHZhbHVlOiJlIixvcGVyYXRpb25zOntzPQpob3c6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFi ZWw6IkludGVnZXIiLHZhbHVlOiJkIixvcGVyYXRpb25zOntoaWRlOlsieV89CmF4aXNfcHJlY2lz aW9uIl19fSx7bGFiZWw6IlBlcmNlbnRhZ2UiLHZhbHVlOiJwIixvcGVyYXRpb25zOntzaG93Olsi eV9heGlzXz0KcHJlY2lzaW9uIl19fSx7bGFiZWw6IlNJLXByZWZpeCIsdmFsdWU6InMiLG9wZXJh dGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzPQppb24iXX19XX0seV9heGlzX3ByZWNpc2lvbjp7 dGl0bGU6IkF4aXMgdGljayBmb3JtYXQiLGluZm86IlNlbGVjdCB0aGUgdGljayA9CmZvcm1hdCBm b3IgdGhlIGF4aXMuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjEiLGRhdGE6W3tsYWJlbDoiMC4wMDAw MSIsdmFsdWU6Ij0KNSJ9LHtsYWJlbDoiMC4wMDAxIix2YWx1ZToiNCJ9LHtsYWJlbDoiMC4wMDEi LHZhbHVlOiIzIn0se2xhYmVsOiIwLjAxIix2YWx1PQplOiIyIn0se2xhYmVsOiIwLjEiLHZhbHVl OiIxIn0se2xhYmVsOiIxIix2YWx1ZToiMCJ9XX0sc2VwYXJhdG9yX2xlZ2VuZDp7dGk9CnRsZToi T3RoZXJzIix0eXBlOiJzZXBhcmF0b3IifSxzaG93X2xlZ2VuZDp7dGl0bGU6IlNob3cgbGVnZW5k IixpbmZvOiJXb3VsZD0KIHlvdSBsaWtlIHRvIGFkZCBhIGxlZ2VuZD8iLHR5cGU6InJhZGlvYnV0 dG9uIixpbml0OiJ0cnVlIixkYXRhOlt7bGFiZWw6IlllPQpzIix2YWx1ZToidHJ1ZSJ9LHtsYWJl bDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sdXNlX3BhbmVsczp7dGl0bGU6IlVzZSBtdWx0aS09CnBh bmVscyIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2VwYXJhdGUgeW91ciBkYXRhIGludG8gaW5k aXZpZHVhbCBwYW5lbHM/Ij0KLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpb e2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJOPQpvIix2YWx1ZToiZmFsc2UifV19 fX19KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4obmV3IERhdGUodCxlKzEsMCk9 CikuZ2V0RGF0ZSgpfWZ1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkscyl7dmFy IG89M0RlKHIpLHU9M0RbXTtvPD0KciYmdChvKTtpZihzPjEpd2hpbGUobzxpKXt2YXIgYT0zRG5l dyBEYXRlKCtvKTtuKGEpJXM9M0Q9M0Q9M0QwJiZ1LnB1c2goYSksPQp0KG8pfWVsc2Ugd2hpbGUo bzxpKXUucHVzaChuZXcgRGF0ZSgrbykpLHQobyk7cmV0dXJuIHV9fXZhciBlPTNEd2luZG93Lm52 fHw9Cnt9O2UudmVyc2lvbj0zRCIxLjEuMTViIixlLmRldj0zRCEwLHdpbmRvdy5udj0zRGUsZS50 b29sdGlwPTNEZS50b29sdGlwfHx7fT0KLGUudXRpbHM9M0RlLnV0aWxzfHx7fSxlLm1vZGVscz0z RGUubW9kZWxzfHx7fSxlLmNoYXJ0cz0zRHt9LGUuZ3JhcGhzPTNEW10sPQplLmxvZ3M9M0R7fSxl LmRpc3BhdGNoPTNEZDMuZGlzcGF0Y2goInJlbmRlcl9zdGFydCIsInJlbmRlcl9lbmQiKSxlLmRl diYmKGU9Ci5kaXNwYXRjaC5vbigicmVuZGVyX3N0YXJ0IixmdW5jdGlvbih0KXtlLmxvZ3Muc3Rh cnRUaW1lPTNEKyhuZXcgRGF0ZSl9KSxlLj0KZGlzcGF0Y2gub24oInJlbmRlcl9lbmQiLGZ1bmN0 aW9uKHQpe2UubG9ncy5lbmRUaW1lPTNEKyhuZXcgRGF0ZSksZS5sb2dzLnRvPQp0YWxUaW1lPTNE ZS5sb2dzLmVuZFRpbWUtZS5sb2dzLnN0YXJ0VGltZSxlLmxvZygidG90YWwiLGUubG9ncy50b3Rh bFRpbWUpfSk9CiksZS5sb2c9M0RmdW5jdGlvbigpe2lmKGUuZGV2JiZjb25zb2xlLmxvZyYmY29u c29sZS5sb2cuYXBwbHkpY29uc29sZS5sb2cuYT0KcHBseShjb25zb2xlLGFyZ3VtZW50cyk7ZWxz ZSBpZihlLmRldiYmdHlwZW9mIGNvbnNvbGUubG9nPTNEPTNEImZ1bmN0aW9uIiYmPQpGdW5jdGlv bi5wcm90b3R5cGUuYmluZCl7dmFyIHQ9M0RGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKGNv bnNvbGUubG9nLGM9Cm9uc29sZSk7dC5hcHBseShjb25zb2xlLGFyZ3VtZW50cyl9cmV0dXJuIGFy Z3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdfSxlLj0KcmVuZGVyPTNEZnVuY3Rpb24obil7bj0z RG58fDEsZS5yZW5kZXIuYWN0aXZlPTNEITAsZS5kaXNwYXRjaC5yZW5kZXJfc3RhcnQoPQopLHNl dFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdCxyO2Zvcih2YXIgaT0zRDA7aTxuJiYocj0zRGUucmVu ZGVyLnF1ZXVlW2ldKTs9CmkrKyl0PTNEci5nZW5lcmF0ZSgpLHR5cGVvZiByLmNhbGxiYWNrPTNE PTNEdHlwZW9mIEZ1bmN0aW9uJiZyLmNhbGxiYWNrKHQpLD0KZS5ncmFwaHMucHVzaCh0KTtlLnJl bmRlci5xdWV1ZS5zcGxpY2UoMCxpKSxlLnJlbmRlci5xdWV1ZS5sZW5ndGg/c2V0VGltZW91PQp0 KGFyZ3VtZW50cy5jYWxsZWUsMCk6KGUuZGlzcGF0Y2gucmVuZGVyX2VuZCgpLGUucmVuZGVyLmFj dGl2ZT0zRCExKX0sMCl9LGU9Ci5yZW5kZXIuYWN0aXZlPTNEITEsZS5yZW5kZXIucXVldWU9M0Rb XSxlLmFkZEdyYXBoPTNEZnVuY3Rpb24odCl7dHlwZW9mIGFyZz0KdW1lbnRzWzBdPTNEPTNEdHlw ZW9mIEZ1bmN0aW9uJiYodD0zRHtnZW5lcmF0ZTphcmd1bWVudHNbMF0sY2FsbGJhY2s6YXJndW1l PQpudHNbMV19KSxlLnJlbmRlci5xdWV1ZS5wdXNoKHQpLGUucmVuZGVyLmFjdGl2ZXx8ZS5yZW5k ZXIoKX0sZS5pZGVudGl0eT0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuc3RyaXA9M0RmdW5j dGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oXHN8JikvZywiIil9LD0KZDMudGltZS5tb250aEVu ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250 aCgpPQosMCl9LGQzLnRpbWUubW9udGhFbmRzPTNEbihkMy50aW1lLm1vbnRoRW5kLGZ1bmN0aW9u KGUpe2Uuc2V0VVRDRGF0ZShlLmdldFU9ClRDRGF0ZSgpKzEpLGUuc2V0RGF0ZSh0KGUuZ2V0TW9u dGgoKSsxLGUuZ2V0RnVsbFllYXIoKSkpfSxmdW5jdGlvbihlKXtyZXR1cj0KbiBlLmdldE1vbnRo KCl9KSxlLmludGVyYWN0aXZlR3VpZGVsaW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBjKG8pe28u ZWFjaChmPQp1bmN0aW9uKG8pe2Z1bmN0aW9uIGcoKXt2YXIgZT0zRGQzLm1vdXNlKHRoaXMpLG49 M0RlWzBdLHI9M0RlWzFdLG89M0QhMCxhPQo9M0QhMTtsJiYobj0zRGQzLmV2ZW50Lm9mZnNldFgs cj0zRGQzLmV2ZW50Lm9mZnNldFksZDMuZXZlbnQudGFyZ2V0LnRhZ05hbWU9CiE9M0Q9M0Qic3Zn IiYmKG89M0QhMSksZDMuZXZlbnQudGFyZ2V0LmNsYXNzTmFtZS5iYXNlVmFsLm1hdGNoKCJudi1s ZWdlbmQiKT0KJiYoYT0zRCEwKSksbyYmKG4tPTNEaS5sZWZ0LHItPTNEaS50b3ApO2lmKG48MHx8 cjwwfHxuPnB8fHI+ZHx8ZDMuZXZlbnQucmVsPQphdGVkVGFyZ2V0JiZkMy5ldmVudC5yZWxhdGVk VGFyZ2V0Lm93bmVyU1ZHRWxlbWVudD0zRD0zRD0zRHVuZGVmaW5lZHx8YSl7aWY9CihsJiZkMy5l dmVudC5yZWxhdGVkVGFyZ2V0JiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0Lm93bmVyU1ZHRWxlbWVu dD0zRD0zRD0zRD0KdW5kZWZpbmVkJiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTmFtZS5t YXRjaCh0Lm52UG9pbnRlckV2ZW50c0NsYXNzKSlyPQpldHVybjt1LmVsZW1lbnRNb3VzZW91dCh7 bW91c2VYOm4sbW91c2VZOnJ9KSxjLnJlbmRlckd1aWRlTGluZShudWxsKTtyZXR1cm49Cn12YXIg Zj0zRHMuaW52ZXJ0KG4pO3UuZWxlbWVudE1vdXNlbW92ZSh7bW91c2VYOm4sbW91c2VZOnIscG9p bnRYVmFsdWU6Zn0pLD0KZDMuZXZlbnQudHlwZT0zRD0zRD0zRCJkYmxjbGljayImJnUuZWxlbWVu dERibGNsaWNrKHttb3VzZVg6bixtb3VzZVk6cixwb2luPQp0WFZhbHVlOmZ9KX12YXIgaD0zRGQz LnNlbGVjdCh0aGlzKSxwPTNEbnx8OTYwLGQ9M0RyfHw0MDAsdj0zRGguc2VsZWN0QWxsKCI9Cmcu bnYtd3JhcC5udi1pbnRlcmFjdGl2ZUxpbmVMYXllciIpLmRhdGEoW29dKSxtPTNEdi5lbnRlcigp LmFwcGVuZCgiZyIpLmF0dD0KcigiY2xhc3MiLCIgbnYtd3JhcCBudi1pbnRlcmFjdGl2ZUxpbmVM YXllciIpO20uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJuPQp2LWludGVyYWN0aXZlR3VpZGVM aW5lIik7aWYoIWYpcmV0dXJuO2Yub24oIm1vdXNlbW92ZSIsZywhMCkub24oIm1vdXNlb3V0Iiw9 CmcsITApLm9uKCJkYmxjbGljayIsZyksYy5yZW5kZXJHdWlkZUxpbmU9M0RmdW5jdGlvbih0KXtp ZighYSlyZXR1cm47dmFyIG49Cj0zRHYuc2VsZWN0KCIubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUi KS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKHQhPTNEbnVsbD9bZT0KLnV0aWxzLk5hTnRvWmVybyh0 KV06W10sU3RyaW5nKTtuLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJudi1n PQp1aWRlbGluZSIpLmF0dHIoIngxIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmF0dHIoIngyIixm dW5jdGlvbihlKXtyZXR1cm4gZX09CikuYXR0cigieTEiLGQpLmF0dHIoInkyIiwwKSxuLmV4aXQo KS5yZW1vdmUoKX19KX12YXIgdD0zRGUubW9kZWxzLnRvb2x0aXAoKT0KLG49M0RudWxsLHI9M0Ru dWxsLGk9M0R7bGVmdDowLHRvcDowfSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxl LmxpPQpuZWFyKCksdT0zRGQzLmRpc3BhdGNoKCJlbGVtZW50TW91c2Vtb3ZlIiwiZWxlbWVudE1v dXNlb3V0IiwiZWxlbWVudERibGNsaWM9CmsiKSxhPTNEITAsZj0zRG51bGwsbD0zRG5hdmlnYXRv ci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpIT0zRD0zRC0xO3JldHVybj0KIGMuZGlzcGF0Y2g9 M0R1LGMudG9vbHRpcD0zRHQsYy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0PQpoPyhpLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDppLnRv cCxpLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0KPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCxj KTppfSxjLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8obj0z RGUsYyk6bn0sYy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cj0zRGUsYyk9CjpyfSxjLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZSxjKTpzfSxjLnNob3dHdWlkZT0KTGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhhPTNEZSxjKTphfSxjLnN2Z0NvbnRhaW5lcj0zRGZ1PQpuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLGMpOmZ9LGN9LGUuaW50ZXJhY3RpdmVC aXNlY3Q9M0RmdW49CmN0aW9uKGUsdCxuKXtpZighZSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBu dWxsO3R5cGVvZiBuIT0zRCJmdW5jdGlvbiImJihuPQo9M0RmdW5jdGlvbihlLHQpe3JldHVybiBl Lnh9KTt2YXIgcj0zRGQzLmJpc2VjdG9yKG4pLmxlZnQsaT0zRGQzLm1heChbMCxyKGU9Cix0KS0x XSkscz0zRG4oZVtpXSxpKTt0eXBlb2Ygcz0zRD0zRCJ1bmRlZmluZWQiJiYocz0zRGkpO2lmKHM9 M0Q9M0Q9M0R0KXJldD0KdXJuIGk7dmFyIG89M0RkMy5taW4oW2krMSxlLmxlbmd0aC0xXSksdT0z RG4oZVtvXSxvKTtyZXR1cm4gdHlwZW9mIHU9M0Q9M0QiPQp1bmRlZmluZWQiJiYodT0zRG8pLE1h dGguYWJzKHUtdCk+PTNETWF0aC5hYnMocy10KT9pOm99LGUubmVhcmVzdFZhbHVlSW5kZXg9Cj0z RGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zREluZmluaXR5LGk9M0RudWxsO3JldHVybiBlLmZvckVh Y2goZnVuY3Rpb24oZSxzKT0Ke3ZhciBvPTNETWF0aC5hYnModC1lKTtvPD0zRHImJm88biYmKHI9 M0RvLGk9M0RzKX0pLGl9LGZ1bmN0aW9uKCl7d2luZG93Lm52PQoudG9vbHRpcD0zRHt9LHdpbmRv dy5udi5tb2RlbHMudG9vbHRpcD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe2lmKGEpe3ZhciA9 CmU9M0RkMy5zZWxlY3QoYSk7ZS5ub2RlKCkudGFnTmFtZSE9M0Q9M0Qic3ZnIiYmKGU9M0RlLnNl bGVjdCgic3ZnIikpO3ZhciB0PQo9M0RlLm5vZGUoKT9lLmF0dHIoInZpZXdCb3giKTpudWxsO2lm KHQpe3Q9M0R0LnNwbGl0KCIgIik7dmFyIG49M0RwYXJzZUludCg9CmUuc3R5bGUoIndpZHRoIikp L3RbMl07bC5sZWZ0PTNEbC5sZWZ0Km4sbC50b3A9M0RsLnRvcCpufX19ZnVuY3Rpb24gYihlKXt2 YT0KciB0O2E/dD0zRGQzLnNlbGVjdChhKTp0PTNEZDMuc2VsZWN0KCJib2R5Iik7dmFyIG49M0R0 LnNlbGVjdCgiLm52dG9vbHRpcCIpPQo7cmV0dXJuIG4ubm9kZSgpPTNEPTNEPTNEbnVsbCYmKG49 M0R0LmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJudnRvb2x0aXA9CiAiKyh1P3U6Inh5LXRv b2x0aXAiKSkuYXR0cigiaWQiLGgpKSxuLm5vZGUoKS5pbm5lckhUTUw9M0RlLG4uc3R5bGUoInRv cCIsMD0KKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm9wYWNpdHkiLDApLG4uc2VsZWN0QWxsKCJk aXYsIHRhYmxlLCB0ZCwgdHIiKS5jbGFzPQpzZWQocCwhMCksbi5jbGFzc2VkKHAsITApLG4ubm9k ZSgpfWZ1bmN0aW9uIHcoKXtpZighYylyZXR1cm47aWYoIWcobikpcmV0dXI9Cm47eSgpO3ZhciB0 PTNEbC5sZWZ0LHU9M0RvIT0zRG51bGw/bzpsLnRvcCxoPTNEYihtKG4pKTtmPTNEaDtpZihhKXt2 YXIgcD0zRD0KYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0sZD0zRHA/cC5nZXRCb3Vu ZGluZ0NsaWVudFJlY3QoKTphLmdldEJvdW5kPQppbmdDbGllbnRSZWN0KCksdj0zRHtsZWZ0OjAs dG9wOjB9O2lmKHApe3ZhciBFPTNEcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSw9ClM9M0RhLmdl dEJvdW5kaW5nQ2xpZW50UmVjdCgpLHg9M0RFLnRvcDtpZih4PDApe3ZhciBUPTNEYS5nZXRCb3Vu ZGluZ0NsaWVudD0KUmVjdCgpO3g9M0RNYXRoLmFicyh4KT5ULmhlaWdodD8wOnh9di50b3A9M0RN YXRoLmFicyh4LVMudG9wKSx2LmxlZnQ9M0RNYXRoPQouYWJzKEUubGVmdC1TLmxlZnQpfXQrPTNE YS5vZmZzZXRMZWZ0K3YubGVmdC0yKmEuc2Nyb2xsTGVmdCx1Kz0zRGEub2Zmc2V0VG89CnArdi50 b3AtMiphLnNjcm9sbFRvcH1yZXR1cm4gcyYmcz4wJiYodT0zRE1hdGguZmxvb3IodS9zKSpzKSxl LnRvb2x0aXAuY2FsYz0KVG9vbHRpcFBvc2l0aW9uKFt0LHVdLHIsaSxoKSx3fXZhciB0PTNEbnVs bCxuPTNEbnVsbCxyPTNEInciLGk9M0Q1MCxzPTNEMjUsPQpvPTNEbnVsbCx1PTNEbnVsbCxhPTNE bnVsbCxmPTNEbnVsbCxsPTNEe2xlZnQ6bnVsbCx0b3A6bnVsbH0sYz0zRCEwLGg9M0QibnY9CnRv b2x0aXAtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU1KSxwPTNEIm52LXBvaW50ZXItZXZl bnRzLW5vbmUiLGQ9M0RmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIGV9LHY9M0RmdW5jdGlvbihlKXty ZXR1cm4gZX0sbT0zRGZ1bmN0aW9uKGUpe2lmKHQhPTNEbnVsPQpsKXJldHVybiB0O2lmKGU9M0Q9 M0RudWxsKXJldHVybiIiO3ZhciBuPTNEZDMuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ9 CigidGFibGUiKSkscj0zRG4uc2VsZWN0QWxsKCJ0aGVhZCIpLmRhdGEoW2VdKS5lbnRlcigpLmFw cGVuZCgidGhlYWQiKTtyLmFwcD0KZW5kKCJ0ciIpLmFwcGVuZCgidGQiKS5hdHRyKCJjb2xzcGFu IiwzKS5hcHBlbmQoInN0cm9uZyIpLmNsYXNzZWQoIngtdmFsdWUiPQosITApLmh0bWwodihlLnZh bHVlKSk7dmFyIGk9M0RuLnNlbGVjdEFsbCgidGJvZHkiKS5kYXRhKFtlXSkuZW50ZXIoKS5hcHBl bmQ9CigidGJvZHkiKSxzPTNEaS5zZWxlY3RBbGwoInRyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1 cm4gZS5zZXJpZXN9KS5lbnRlcigpLj0KYXBwZW5kKCJ0ciIpLmNsYXNzZWQoImhpZ2hsaWdodCIs ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlnaGxpZ2h0fSk7cy5hcHBlbmQoPQoidGQiKS5jbGFzc2Vk KCJsZWdlbmQtY29sb3ItZ3VpZGUiLCEwKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJiYWNrZ3JvdW5k LWNvbG89CnIiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkscy5hcHBlbmQoInRkIikuY2xh c3NlZCgia2V5IiwhMCkuaHRtbChmdW5jdD0KaW9uKGUpe3JldHVybiBlLmtleX0pLHMuYXBwZW5k KCJ0ZCIpLmNsYXNzZWQoInZhbHVlIiwhMCkuaHRtbChmdW5jdGlvbihlLHQpPQp7cmV0dXJuIGQo ZS52YWx1ZSx0KX0pLHMuc2VsZWN0QWxsKCJ0ZCIpLmVhY2goZnVuY3Rpb24oZSl7aWYoZS5oaWdo bGlnaHQpe3Y9CmFyIHQ9M0RkMy5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLnJhbmdlKFsi I2ZmZiIsZS5jb2xvcl0pLG49M0QuNjtkMy5zZT0KbGVjdCh0aGlzKS5zdHlsZSgiYm9yZGVyLWJv dHRvbS1jb2xvciIsdChuKSkuc3R5bGUoImJvcmRlci10b3AtY29sb3IiLHQobikpPQp9fSk7dmFy IG89M0RuLm5vZGUoKS5vdXRlckhUTUw7cmV0dXJuIGUuZm9vdGVyIT0zRD0zRHVuZGVmaW5lZCYm KG8rPTNEIjxkaXY9CiBjbGFzcz0zRCdmb290ZXInPiIrZS5mb290ZXIrIjwvZGl2PiIpLG99LGc9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5zZXJpZT0KcyYmZS5zZXJpZXMubGVuZ3RoPjA/ITA6 ITF9O3JldHVybiB3Lm52UG9pbnRlckV2ZW50c0NsYXNzPTNEcCx3LmNvbnRlbnQ9M0RmPQp1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PTNEZSx3KTp0fSx3LnRvb2x0aXBFbGVt PTNEZnVuY3Rpb24oKXs9CnJldHVybiBmfSx3LmNvbnRlbnRHZW5lcmF0b3I9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odHlwZW9mID0KZT0zRD0zRCJmdW5jdGlvbiImJiht PTNEZSksdyk6bX0sdy5kYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0 aD8obj0zRGUsdyk6bn0sdy5ncmF2aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHI9M0RlLHcpOnI9Cn0sdy5kaXN0YW5jZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhpPTNEZSx3KTppfSx3LnNuYXBEaXN0YT0KbmNlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHcpOnN9LHcuY2xhc3Nlcz0zRGZ1bmN0aW9u PQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLHcpOnV9LHcuY2hhcnRDb250YWlu ZXI9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSx3KTphfSx3 LnBvc2l0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8obC5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bC5sZWZ0LGwudG9wPTNEdHlw ZW9mPQogZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6bC50b3Asdyk6bH0sdy5maXhlZFRvcD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KG89M0RlLHcpOm99LHcuZW5h YmxlZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGM9M0RlLHcpOmN9 LHcudmFsdWVGb3JtYXR0ZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o dHlwZW9mPQogZT0zRD0zRCJmdW5jdGlvbiImJihkPTNEZSksdyk6ZH0sdy5oZWFkZXJGb3JtYXR0 ZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyh0eXBlb2YgZT0zRD0z RCJmdW5jdGlvbiImJih2PTNEZSksdyk6dn0sdy5pZD0zRGZ1bmN0aW9uKCl7cj0KZXR1cm4gaH0s d30sZS50b29sdGlwLnNob3c9M0RmdW5jdGlvbih0LG4scixpLHMsbyl7dmFyIHU9M0Rkb2N1bWVu dC5jcmVhdGVFPQpsZW1lbnQoImRpdiIpO3UuY2xhc3NOYW1lPTNEIm52dG9vbHRpcCAiKyhvP286 Inh5LXRvb2x0aXAiKTt2YXIgYT0zRHM7aWYoIXM9Cnx8cy50YWdOYW1lLm1hdGNoKC9nfHN2Zy9p KSlhPTNEZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTt1Lj0Kc3R5bGUu bGVmdD0zRDAsdS5zdHlsZS50b3A9M0QwLHUuc3R5bGUub3BhY2l0eT0zRDAsdS5pbm5lckhUTUw9 M0RuLGEuYXBwZW5kPQpDaGlsZCh1KSxzJiYodFswXT0zRHRbMF0tcy5zY3JvbGxMZWZ0LHRbMV09 M0R0WzFdLXMuc2Nyb2xsVG9wKSxlLnRvb2x0aXAuY2E9CmxjVG9vbHRpcFBvc2l0aW9uKHQscixp LHUpfSxlLnRvb2x0aXAuZmluZEZpcnN0Tm9uU1ZHUGFyZW50PTNEZnVuY3Rpb24oZSl7dz0KaGls ZShlLnRhZ05hbWUubWF0Y2goL15nfHN2ZyQvaSkhPTNEPTNEbnVsbCllPTNEZS5wYXJlbnROb2Rl O3JldHVybiBlfSxlLnRvPQpvbHRpcC5maW5kVG90YWxPZmZzZXRUb3A9M0RmdW5jdGlvbihlLHQp e3ZhciBuPTNEdDtkbyBpc05hTihlLm9mZnNldFRvcCl8fCg9Cm4rPTNEZS5vZmZzZXRUb3ApO3do aWxlKGU9M0RlLm9mZnNldFBhcmVudCk7cmV0dXJuIG59LGUudG9vbHRpcC5maW5kVG90YWxPZj0K ZnNldExlZnQ9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEdDtkbyBpc05hTihlLm9mZnNldExlZnQp fHwobis9M0RlLm9mZnNldExlPQpmdCk7d2hpbGUoZT0zRGUub2Zmc2V0UGFyZW50KTtyZXR1cm4g bn0sZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb249M0RmdW49CmN0aW9uKHQsbixyLGkpe3Zh ciBzPTNEcGFyc2VJbnQoaS5vZmZzZXRIZWlnaHQpLG89M0RwYXJzZUludChpLm9mZnNldFdpZHRo KT0KLHU9M0RlLnV0aWxzLndpbmRvd1NpemUoKS53aWR0aCxhPTNEZS51dGlscy53aW5kb3dTaXpl KCkuaGVpZ2h0LGY9M0R3aW5kb3cuPQpwYWdlWU9mZnNldCxsPTNEd2luZG93LnBhZ2VYT2Zmc2V0 LGMsaDthPTNEd2luZG93LmlubmVyV2lkdGg+PTNEZG9jdW1lbnQuYm89CmR5LnNjcm9sbFdpZHRo P2E6YS0xNix1PTNEd2luZG93LmlubmVySGVpZ2h0Pj0zRGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVp Z2h0Pz0KdTp1LTE2LG49M0RufHwicyIscj0zRHJ8fDIwO3ZhciBwPTNEZnVuY3Rpb24odCl7cmV0 dXJuIGUudG9vbHRpcC5maW5kVG90YWxPPQpmZnNldFRvcCh0LGgpfSxkPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGUudG9vbHRpcC5maW5kVG90YWxPZmZzZXRMZWZ0KHQsYyl9O3M9CndpdGNoKG4pe2Nh c2UiZSI6Yz0zRHRbMF0tby1yLGg9M0R0WzFdLXMvMjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7djxs JiYoYz0zRD0KdFswXStyPmw/dFswXStyOmwtditjKSxtPGYmJihoPTNEZi1tK2gpLG0rcz5mK2Em JihoPTNEZithLW0raC1zKTticmVhaztjYXNlPQoidyI6Yz0zRHRbMF0rcixoPTNEdFsxXS1zLzI7 dmFyIHY9M0RkKGkpLG09M0RwKGkpO3Yrbz51JiYoYz0zRHRbMF0tby1yKSxtPGY9CiYmKGg9M0Rm KzUpLG0rcz5mK2EmJihoPTNEZithLW0raC1zKTticmVhaztjYXNlIm4iOmM9M0R0WzBdLW8vMi01 LGg9M0R0WzFdKz0Kcjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7djxsJiYoYz0zRGwrNSksditvPnUm JihjPTNEYy1vLzIrNSksbStzPmYrYSYmKGg9M0RmPQorYS1tK2gtcyk7YnJlYWs7Y2FzZSJzIjpj PTNEdFswXS1vLzIsaD0zRHRbMV0tcy1yO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2PGw9CiYmKGM9 M0RsKzUpLHYrbz51JiYoYz0zRGMtby8yKzUpLGY+bSYmKGg9M0RmKTticmVhaztjYXNlIm5vbmUi OmM9M0R0WzBdLGg9Cj0zRHRbMV0tcjt2YXIgdj0zRGQoaSksbT0zRHAoaSl9cmV0dXJuIGkuc3R5 bGUubGVmdD0zRGMrInB4IixpLnN0eWxlLnRvcD0zRD0KaCsicHgiLGkuc3R5bGUub3BhY2l0eT0z RDEsaS5zdHlsZS5wb3NpdGlvbj0zRCJhYnNvbHV0ZSIsaX0sZS50b29sdGlwLmNsZWFuPQp1cD0z RGZ1bmN0aW9uKCl7dmFyIGU9M0Rkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJudnRv b2x0aXAiKSx0PTNEW109Cjt3aGlsZShlLmxlbmd0aCl0LnB1c2goZVswXSksZVswXS5zdHlsZS50 cmFuc2l0aW9uRGVsYXk9M0QiMCAhaW1wb3J0YW50IixlWz0KMF0uc3R5bGUub3BhY2l0eT0zRDAs ZVswXS5jbGFzc05hbWU9M0QibnZ0b29sdGlwLXBlbmRpbmctcmVtb3ZhbCI7c2V0VGltZW91PQp0 KGZ1bmN0aW9uKCl7d2hpbGUodC5sZW5ndGgpe3ZhciBlPTNEdC5wb3AoKTtlLnBhcmVudE5vZGUu cmVtb3ZlQ2hpbGQoZSl9fSw9CjUwMCl9fSgpLGUudXRpbHMud2luZG93U2l6ZT0zRGZ1bmN0aW9u KCl7dmFyIGU9M0R7d2lkdGg6NjQwLGhlaWdodDo0ODB9O3JldD0KdXJuIGRvY3VtZW50LmJvZHkm JmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgmJihlLndpZHRoPTNEZG9jdW1lbnQuYm9keS5vZmZz PQpldFdpZHRoLGUuaGVpZ2h0PTNEZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpLGRvY3VtZW50 LmNvbXBhdE1vZGU9M0Q9M0QiQ1M9ClMxQ29tcGF0IiYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgmJj0KKGUud2lkdGg9M0Rkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsZS5oZWlnaHQ9M0Rkb2N1bWVudC5kb2N1 bWVuPQp0RWxlbWVudC5vZmZzZXRIZWlnaHQpLHdpbmRvdy5pbm5lcldpZHRoJiZ3aW5kb3cuaW5u ZXJIZWlnaHQmJihlLndpZHRoPTNEd2k9Cm5kb3cuaW5uZXJXaWR0aCxlLmhlaWdodD0zRHdpbmRv dy5pbm5lckhlaWdodCksZX0sZS51dGlscy53aW5kb3dSZXNpemU9M0RmdT0KbmN0aW9uKGUpe2lm KGU9M0Q9M0Q9M0R1bmRlZmluZWQpcmV0dXJuO3ZhciB0PTNEd2luZG93Lm9ucmVzaXplO3dpbmRv dy5vbnJlPQpzaXplPTNEZnVuY3Rpb24obil7dHlwZW9mIHQ9M0Q9M0QiZnVuY3Rpb24iJiZ0KG4p LGUobil9fSxlLnV0aWxzLmdldENvbG9yPQo9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD9PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9M0Q9Cj0zRD0zRCJbb2Jq ZWN0IEFycmF5XSI/ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5jb2xvcnx8dFtuJXQubGVuZ3RoXX06 dDplLnV0aT0KbHMuZGVmYXVsdENvbG9yKCl9LGUudXRpbHMuZGVmYXVsdENvbG9yPTNEZnVuY3Rp b24oKXt2YXIgZT0zRGQzLnNjYWxlLmNhdGVnPQpvcnkyMCgpLnJhbmdlKCk7cmV0dXJuIGZ1bmN0 aW9uKHQsbil7cmV0dXJuIHQuY29sb3J8fGVbbiVlLmxlbmd0aF19fSxlLnV0aWw9CnMuY3VzdG9t VGhlbWU9M0RmdW5jdGlvbihlLHQsbil7dD0zRHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0s bj0zRG58fGQzLj0Kc2NhbGUuY2F0ZWdvcnkyMCgpLnJhbmdlKCk7dmFyIHI9M0RuLmxlbmd0aDty ZXR1cm4gZnVuY3Rpb24oaSxzKXt2YXIgbz0zRHQoPQppKTtyZXR1cm4gcnx8KHI9M0RuLmxlbmd0 aCksdHlwZW9mIGVbb10hPTNEInVuZGVmaW5lZCI/dHlwZW9mIGVbb109M0Q9M0QiZnU9Cm5jdGlv biI/ZVtvXSgpOmVbb106blstLXJdfX0sZS51dGlscy5wamF4PTNEZnVuY3Rpb24odCxuKXtmdW5j dGlvbiByKHIpe2QzLj0KaHRtbChyLGZ1bmN0aW9uKHIpe3ZhciBpPTNEZDMuc2VsZWN0KG4pLm5v ZGUoKTtpLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQzPQouc2VsZWN0KHIpLnNlbGVjdChuKS5u b2RlKCksaSksZS51dGlscy5wamF4KHQsbil9KX1kMy5zZWxlY3RBbGwodCkub24oImNsaWM9Cmsi LGZ1bmN0aW9uKCl7aGlzdG9yeS5wdXNoU3RhdGUodGhpcy5ocmVmLHRoaXMudGV4dENvbnRlbnQs dGhpcy5ocmVmKSxyKHRoaT0Kcy5ocmVmKSxkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSksZDMu c2VsZWN0KHdpbmRvdykub24oInBvcHN0YXRlIixmdW5jdGlvPQpuKCl7ZDMuZXZlbnQuc3RhdGUm JnIoZDMuZXZlbnQuc3RhdGUpfSl9LGUudXRpbHMuY2FsY0FwcHJveFRleHRXaWR0aD0zRGZ1bmM9 CnRpb24oZSl7aWYodHlwZW9mIGUuc3R5bGU9M0Q9M0QiZnVuY3Rpb24iJiZ0eXBlb2YgZS50ZXh0 PTNEPTNEImZ1bmN0aW9uIil7dj0KYXIgdD0zRHBhcnNlSW50KGUuc3R5bGUoImZvbnQtc2l6ZSIp LnJlcGxhY2UoInB4IiwiIikpLG49M0RlLnRleHQoKS5sZW5ndGg7PQpyZXR1cm4gbip0Ki41fXJl dHVybiAwfSxlLnV0aWxzLk5hTnRvWmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9 M0Q9CiJudW1iZXIifHxpc05hTihlKXx8ZT0zRD0zRD0zRG51bGx8fGU9M0Q9M0Q9M0RJbmZpbml0 eT8wOmV9LGUudXRpbHMub3B0aW9ucz0KRnVuYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlJiZkMy5t YXAoZSkuZm9yRWFjaChmdW5jdGlvbihlLHQpe3R5cGVvZiB0aGlzW2VdPQo9M0Q9M0QiZnVuY3Rp b24iJiZ0aGlzW2VdKHQpfS5iaW5kKHRoaXMpKSx0aGlzfSxlLm1vZGVscy5heGlzPTNEZnVuY3Rp b24oKXs9CmZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRGQz LnNlbGVjdCh0aGlzKSxtPTNEaS5zZWxlYz0KdEFsbCgiZy5udi13cmFwLm52LWF4aXMiKS5kYXRh KFtlXSksZz0zRG0uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnZkMyBudi13 cmFwIG52LWF4aXMiKSx5PTNEZy5hcHBlbmQoImciKSxiPTNEbS5zZWxlY3QoImciKTtwIT0zRD0z RG51bGw/dC49CnRpY2tzKHApOih0Lm9yaWVudCgpPTNEPTNEInRvcCJ8fHQub3JpZW50KCk9M0Q9 M0QiYm90dG9tIikmJnQudGlja3MoTWF0aC5hYj0KcyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBd KS8xMDApLGIuY2FsbCh0KSx2PTNEdnx8dC5zY2FsZSgpO3ZhciB3PTNEdC50aWNrPQpGb3JtYXQo KTt3PTNEPTNEbnVsbCYmKHc9M0R2LnRpY2tGb3JtYXQoKSk7dmFyIEU9M0RiLnNlbGVjdEFsbCgi dGV4dC5udi1heGk9CnNsYWJlbCIpLmRhdGEoW298fG51bGxdKTtFLmV4aXQoKS5yZW1vdmUoKTtz d2l0Y2godC5vcmllbnQoKSl7Y2FzZSJ0b3AiOkUuZT0KbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0 dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIik7dmFyIFM9M0RzLnJhbmdlKCkubGVuZ3RoPQo9M0Q9 M0QyP3MucmFuZ2UoKVsxXTpzLnJhbmdlKClbcy5yYW5nZSgpLmxlbmd0aC0xXSsocy5yYW5nZSgp WzFdLXMucmFuZ2UoKVs9CjBdKTtFLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigi eSIsMCkuYXR0cigieCIsUy8yKTtpZih1KXt2YXIgeD0zRD0KbS5zZWxlY3RBbGwoImcubnYtYXhp c01heE1pbiIpLmRhdGEocy5kb21haW4oKSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoPQoi Y2xhc3MiLCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0IikseC5leGl0KCkucmVtb3ZlKCks eC5hdHRyKCJ0cmFuc2Zvcm09CiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrcyhl KSsiLDApIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5IiwiLT0KMC41ZW0iKS5hdHRyKCJ5Iiwt dC50aWNrUGFkZGluZygpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZnVuY3Rp PQpvbihlLHQpe3ZhciBuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4 LmF0dHIoInRyYW5zZm9ybSIsZnU9Cm5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitzLnJh bmdlKClbdF0rIiwwKSJ9KX1icmVhaztjYXNlImJvdHRvbSI6dmFyID0KVD0zRDM2LE49M0QzMCxD PTNEYi5zZWxlY3RBbGwoImciKS5zZWxlY3QoInRleHQiKTtpZihmJTM2MCl7Qy5lYWNoKGZ1bmN0 aW9uPQooZSx0KXt2YXIgbj0zRHRoaXMuZ2V0QkJveCgpLndpZHRoO24+TiYmKE49M0RuKX0pO3Zh ciBrPTNETWF0aC5hYnMoTWF0aC5zaW49CihmKk1hdGguUEkvMTgwKSksVD0zRChrP2sqTjpOKSsz MDtDLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybj0KInJvdGF0ZSgiK2Yr IiAwLDApIn0pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZiUzNjA+MD8ic3RhcnQiOiJlbmQiKX1FLmVu dGVyKCkuPQphcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpO3ZhciBT PTNEcy5yYW5nZSgpLmxlbmd0aD0zRD0zRDI9Cj9zLnJhbmdlKClbMV06cy5yYW5nZSgpW3MucmFu Z2UoKS5sZW5ndGgtMV0rKHMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYT0KdHRyKCJ0ZXh0 LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInkiLFQpLmF0dHIoIngiLFMvMik7aWYodSl7dmFyIHg9 M0RtLnNlbGVjPQp0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5kYXRhKFtzLmRvbWFpbigpWzBdLHMu ZG9tYWluKClbcy5kb21haW4oKS5sZW5ndGgtMV09Cl0pO3guZW50ZXIoKS5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKSx4LmV4aT0KdCgpLnJl bW92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUo IisocyhlKSsoaD9zPQoucmFuZ2VCYW5kKCkvMjowKSkrIiwwKSJ9KS5zZWxlY3QoInRleHQiKS5h dHRyKCJkeSIsIi43MWVtIikuYXR0cigieSIsdC50aWM9CmtQYWRkaW5nKCkpLmF0dHIoInRyYW5z Zm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiJyb3RhdGUoIitmKyIgMCwwKSJ9KS5zdD0KeWxl KCJ0ZXh0LWFuY2hvciIsZj9mJTM2MD4wPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVu Y3Rpb24oZSx0KXt2YXIgPQpuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59 KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXs9CnJldHVybiJ0cmFuc2xhdGUoIiso cyhlKSsoaD9zLnJhbmdlQmFuZCgpLzI6MCkpKyIsMCkifSl9YyYmQy5hdHRyKCJ0cmFuc2Zvcj0K bSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCUyPTNEPTNEMD8iMCI6IjEy IikrIikifSk7YnJlYWs7Y2FzPQplInJpZ2h0IjpFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0 cigiY2xhc3MiLCJudi1heGlzbGFiZWwiKSxFLnN0eWxlKCJ0ZXg9CnQtYW5jaG9yIixsPyJtaWRk bGUiOiJiZWdpbiIpLmF0dHIoInRyYW5zZm9ybSIsbD8icm90YXRlKDkwKSI6IiIpLmF0dHIoInki LD0KbD8tTWF0aC5tYXgobi5yaWdodCxyKSsxMjotMTApLmF0dHIoIngiLGw/cy5yYW5nZSgpWzBd LzI6dC50aWNrUGFkZGluZygpKTtpPQpmKHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoImcubnYtYXhp c01heE1pbiIpLmRhdGEocy5kb21haW4oKSk7eC5lbnRlcigpLmFwcGU9Cm5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDAp LHguZT0KeGl0KCkucmVtb3ZlKCkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuInRyYW5zbGF0ZSgwLCIrcyhlKSsiPQopIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5Iiwi LjMyZW0iKS5hdHRyKCJ5IiwwKS5hdHRyKCJ4Iix0LnRpY2tQYWRkaW5nKCk9Cikuc3R5bGUoInRl eHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JldHVy bigiIituKT0KLm1hdGNoKCJOYU4iKT8iIjpufSkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9u KGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrPQpzLnJhbmdlKClbdF0rIikifSkuc2VsZWN0KCJ0 ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfWJyZWFrO2Nhc2UibGVmdCI6RS5lbnQ9CmVyKCkuYXBw ZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFiZWwiKSxFLnN0eWxlKCJ0ZXh0LWFu Y2hvciIsbD8ibT0KaWRkbGUiOiJlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGw/InJvdGF0ZSgtOTAp IjoiIikuYXR0cigieSIsbD8tTWF0aC5tYXgobi5sPQplZnQscikrZDotMTApLmF0dHIoIngiLGw/ LXMucmFuZ2UoKVswXS8yOi10LnRpY2tQYWRkaW5nKCkpO2lmKHUpe3ZhciB4PTNEbS49CnNlbGVj dEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmRvbWFpbigpKTt4LmVudGVyKCkuYXBwZW5k KCJnIikuYXR0cigiYz0KbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKS5zdHls ZSgib3BhY2l0eSIsMCkseC5leGl0KCkucmVtb3ZlKCksPQp4LmF0dHIoInRyYW5zZm9ybSIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit2KGUpKyIpIn0pLnNlbGVjdCgidGU9Cnh0 IikuYXR0cigiZHkiLCIuMzJlbSIpLmF0dHIoInkiLDApLmF0dHIoIngiLC10LnRpY2tQYWRkaW5n KCkpLmF0dHIoInRleHQtYT0KbmNob3IiLCJlbmQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49 M0R3KGUpO3JldHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6PQpufSkseC5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrcy5yYW5nZSgpW3RdKyIpIn09 Cikuc2VsZWN0KCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfX1FLnRleHQoZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KSx1JiYodC5vcj0KaWVudCgpPTNEPTNEPTNEImxlZnQifHx0Lm9yaWVudCgpPTNE PTNEPTNEInJpZ2h0IikmJihiLnNlbGVjdEFsbCgiZyIpLmVhY2goPQpmdW5jdGlvbihlLHQpe2Qz LnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJvcGFjaXR5IiwxKTtpZihzKGUpPHMu cmE9Cm5nZSgpWzFdKzEwfHxzKGUpPnMucmFuZ2UoKVswXS0xMCkoZT4xZS0xMHx8ZTwtMWUtMTAp JiZkMy5zZWxlY3QodGhpcykuYXR0cj0KKCJvcGFjaXR5IiwwKSxkMy5zZWxlY3QodGhpcykuc2Vs ZWN0KCJ0ZXh0IikuYXR0cigib3BhY2l0eSIsMCl9KSxzLmRvbWFpbigpPQpbMF09M0Q9M0RzLmRv bWFpbigpWzFdJiZzLmRvbWFpbigpWzBdPTNEPTNEMCYmbS5zZWxlY3RBbGwoImcubnYtYXhpc01h eE1pbiI9Cikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/MDoxfSkpO2lm KHUmJih0Lm9yaWVudCgpPTNEPTNEPTNEIj0KdG9wInx8dC5vcmllbnQoKT0zRD0zRD0zRCJib3R0 b20iKSl7dmFyIEw9M0RbXTttLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluPQoiKS5lYWNoKGZ1 bmN0aW9uKGUsdCl7dHJ5e3Q/TC5wdXNoKHMoZSktdGhpcy5nZXRCQm94KCkud2lkdGgtNCk6TC5w dXNoKHMoZSk9Cit0aGlzLmdldEJCb3goKS53aWR0aCs0KX1jYXRjaChuKXt0P0wucHVzaChzKGUp LTQpOkwucHVzaChzKGUpKzQpfX0pLGIuc2VsZT0KY3RBbGwoImciKS5lYWNoKGZ1bmN0aW9uKGUs dCl7aWYocyhlKTxMWzBdfHxzKGUpPkxbMV0pZT4xZS0xMHx8ZTwtMWUtMTA/ZDMuPQpzZWxlY3Qo dGhpcykucmVtb3ZlKCk6ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLnJlbW92ZSgpfSl9 YSYmYi5zZWxlY3Q9CkFsbCgiLnRpY2siKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXBhcnNl RmxvYXQoTWF0aC5yb3VuZChlLl9fZGF0YV9fKjFlNT0KKS8xZTYpJiZlLl9fZGF0YV9fIT0zRD0z RHVuZGVmaW5lZH0pLmNsYXNzZWQoInplcm8iLCEwKSx2PTNEcy5jb3B5KCl9KSxtfXZhPQpyIHQ9 M0RkMy5zdmcuYXhpcygpLG49M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHI9M0Q3 NSxpPTNENjAscz0zRGQ9CjMuc2NhbGUubGluZWFyKCksbz0zRG51bGwsdT0zRCEwLGE9M0QhMCxm PTNEMCxsPTNEITAsYz0zRCExLGg9M0QhMSxwPTNEbnVsbD0KLGQ9M0QxMjt0LnNjYWxlKHMpLm9y aWVudCgiYm90dG9tIikudGlja0Zvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZX0pO3ZhciB2PQo7 cmV0dXJuIG0uYXhpcz0zRHQsZDMucmViaW5kKG0sdCwib3JpZW50IiwidGlja1ZhbHVlcyIsInRp Y2tTdWJkaXZpZGUiLCJ0aWM9CmtTaXplIiwidGlja1BhZGRpbmciLCJ0aWNrRm9ybWF0IiksZDMu cmViaW5kKG0scywiZG9tYWluIiwicmFuZ2UiLCJyYW5nZUJhbj0KZCIsInJhbmdlQmFuZHMiKSxt Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5tYXJnaW49M0RmdW5jdGlv PQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0Qi dW5kZWZpbmVkIj9lLnRvcDpuLnQ9Cm9wLG4ucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5k ZWZpbmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlbz0KZiBlLmJvdHRvbSE9M0Qi dW5kZWZpbmVkIj9lLmJvdHRvbTpuLmJvdHRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1 bmRlPQpmaW5lZCI/ZS5sZWZ0Om4ubGVmdCxtKTpufSxtLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Cj0zRGUsbSk6cn0sbS50aWNrcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSxtLmhlaT0KZ2h0PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLG0pOml9LG0uYXhpc0xhYmVsPTNE ZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsbSk6b30sbS5zaG93 TWF4TWluPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsbSk6 dX0sbS5oaWdobGlnaHRaZXJvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0 aD8oYT0zRGUsbSk6YX0sbS5zY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEPQplLHQuc2NhbGUocyksaD0zRHR5cGVvZiBzLnJhbmdlQmFuZHM9M0Q9M0QiZnVu Y3Rpb24iLGQzLnJlYmluZChtLHMsImRvbWFpbiI9CiwicmFuZ2UiLCJyYW5nZUJhbmQiLCJyYW5n ZUJhbmRzIiksbSk6c30sbS5yb3RhdGVZTGFiZWw9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLnJvdGF0ZUxhYmVscz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KGY9M0RlLG0pOmZ9LG0uc3RhZ2dlckxhYmVscz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGM9M0RlLG0pOmN9LG0uYXhpc0xh YmVsRGlzdGFuY2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0KPTNE ZSxtKTpkfSxtfSxlLm1vZGVscy5oaXN0b3JpY2FsQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB3 KEUpe3JldHVybiBFLmVhPQpjaChmdW5jdGlvbih3KXt2YXIgRT0zRG4tdC5sZWZ0LXQucmlnaHQs Uz0zRHItdC50b3AtdC5ib3R0b20sVD0zRGQzLnNlbGVjdCg9CnRoaXMpO3MuZG9tYWluKGR8fGQz LmV4dGVudCh3WzBdLnZhbHVlcy5tYXAodSkuY29uY2F0KGYpKSksYz9zLnJhbmdlKG18fFtFKj0K LjUvd1swXS52YWx1ZXMubGVuZ3RoLEUqKHdbMF0udmFsdWVzLmxlbmd0aC0uNSkvd1swXS52YWx1 ZXMubGVuZ3RoXSk6cy5yYW5nPQplKG18fFswLEVdKSxvLmRvbWFpbih2fHxkMy5leHRlbnQod1sw XS52YWx1ZXMubWFwKGEpLmNvbmNhdChsKSkpLnJhbmdlKGd8fFs9ClMsMF0pLHMuZG9tYWluKClb MF09M0Q9M0Q9M0RzLmRvbWFpbigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5kb21h aT0KbigpWzBdLXMuZG9tYWluKClbMF0qLjAxLHMuZG9tYWluKClbMV0rcy5kb21haW4oKVsxXSou MDFdKTpzLmRvbWFpbihbLTEsMV0pPQopLG8uZG9tYWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigp WzFdJiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21haW4oKVs9CjBdK28uZG9tYWluKClb MF0qLjAxLG8uZG9tYWluKClbMV0tby5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEsMV0p KTt2YT0KciBOPTNEVC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1oaXN0b3JpY2FsQmFyLSIraSku ZGF0YShbd1swXS52YWx1ZXNdKSxDPTNEPQpOLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52LXdyYXAgbnYtaGlzdG9yaWNhbEJhci0iK2kpLGs9M0Q9CkMuYXBwZW5kKCJk ZWZzIiksTD0zREMuYXBwZW5kKCJnIiksQT0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImciKS5h dHRyKCJjbD0KYXNzIiwibnYtYmFycyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr dC5sZWZ0KyIsIit0LnRvcCsiKSIpLFQub24oPQoiY2xpY2siLGZ1bmN0aW9uKGUsdCl7eS5jaGFy dENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0pfSksay49CmFwcGVuZCgi Y2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWNoYXJ0LWNsaXAtcGF0aC0iK2kpLmFwcGVuZCgicmVj dCIpLE4uc2VsZT0KY3QoIiNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIgcmVjdCIpLmF0dHIoIndp ZHRoIixFKS5hdHRyKCJoZWlnaHQiLFMpLEEuYXR0PQpyKCJjbGlwLXBhdGgiLGg/InVybCgjbnYt Y2hhcnQtY2xpcC1wYXRoLSIraSsiKSI6IiIpO3ZhciBPPTNETi5zZWxlY3QoIi5udi09CmJhcnMi KS5zZWxlY3RBbGwoIi5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlv bihlLHQpe3JldHVybj0KIHUoZSx0KX0pO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPTNETy5lbnRl cigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0PQp0cigieSIsZnVuY3Rpb24odCxuKXty ZXR1cm4gZS51dGlscy5OYU50b1plcm8obyhNYXRoLm1heCgwLGEodCxuKSkpKX0pLmF0dHI9Cigi aGVpZ2h0IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhNYXRoLmFicyhv KGEodCxuKSktbygwKSkpfT0KKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJu InRyYW5zbGF0ZSgiKyhzKHUoZSx0KSktRS93WzBdLnZhbHVlPQpzLmxlbmd0aCouNDUpKyIsMCki fSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47ZDMuc2VsZWN0KHQ9 CmhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSx5LmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50OmUsc2Vy aWVzOndbMF0scG9zOltzKHUoZT0KLHQpKSxvKGEoZSx0KSldLHBvaW50SW5kZXg6dCxzZXJpZXNJ bmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuPQpjdGlvbihlLHQpe2lmKCFi KXJldHVybjtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSx5LmVsZW1lbnRNb3Vz ZW89CnV0KHtwb2ludDplLHNlcmllczp3WzBdLHBvaW50SW5kZXg6dCxzZXJpZXNJbmRleDowLGU6 ZDMuZXZlbnR9KX0pLm9uKCJjbGljaz0KIixmdW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjt5LmVs ZW1lbnRDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvPQpzOltzKHUoZSx0KSks byhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p Lm9uKCI9CmRibGNsaWNrIixmdW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjt5LmVsZW1lbnREYmxD bGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZT0KLGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUs dCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpPQpvbigpfSk7Ty5h dHRyKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCl9KS5hdHRyKCJjbGFzcyIsZnVu Y3Rpb24oZSw9CnQsbil7cmV0dXJuKGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIg cG9zaXRpdmUiKSsiIG52LWJhci0iK24rIi0iKz0KdH0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rp b24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsPQp1ZXMubGVu Z3RoKi40NSkrIiwwKSJ9KS5hdHRyKCJ3aWR0aCIsRS93WzBdLnZhbHVlcy5sZW5ndGgqLjkpLE8u YXR0cigieSIsZnU9Cm5jdGlvbih0LG4pe3ZhciByPTNEYSh0LG4pPDA/bygwKTpvKDApLW8oYSh0 LG4pKTwxP28oMCktMTpvKGEodCxuKSk7cmV0dXJuID0KZS51dGlscy5OYU50b1plcm8ocil9KS5h dHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvPQooTWF0 aC5tYXgoTWF0aC5hYnMobyhhKHQsbikpLW8oMCkpLDEpKX0pfSksd312YXIgdD0zRHt0b3A6MCxy aWdodDowLGJvdHRvbTo9CjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRE1hdGguZmxvb3Io TWF0aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5saT0KbmVhcigpLG89M0RkMy5zY2FsZS5s aW5lYXIoKSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JlPQp0 dXJuIGUueX0sZj0zRFtdLGw9M0RbMF0sYz0zRCExLGg9M0QhMCxwPTNEZS51dGlscy5kZWZhdWx0 Q29sb3IoKSxkLHYsbSxnLHk9Cj0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENs aWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlbz0KdmVyIiwiZWxlbWVudE1vdXNl b3V0IiksYj0zRCEwO3JldHVybiB3LmhpZ2hsaWdodFBvaW50PTNEZnVuY3Rpb24oZSx0KXtkMy5z PQplbGVjdCgiLm52LWhpc3RvcmljYWxCYXItIitpKS5zZWxlY3QoIi5udi1iYXJzIC5udi1iYXIt MC0iK2UpLmNsYXNzZWQoImhvdmU9CnIiLHQpfSx3LmNsZWFySGlnaGxpZ2h0cz0zRGZ1bmN0aW9u KCl7ZDMuc2VsZWN0KCIubnYtaGlzdG9yaWNhbEJhci0iK2kpLnNlbD0KZWN0KCIubnYtYmFycyAu bnYtYmFyLmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0sdy5kaXNwYXRjaD0zRHksdy5vcHRp b25zPQo9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodyksdy54PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9Cj0zRGUsdyk6dX0sdy55PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9LHcubWFyZ2luPQo9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVm aW5lZCI9Cj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5l ZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dD0Kb209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVm aW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmPQp0IT0zRCJ1bmRl ZmluZWQiP2UubGVmdDp0LmxlZnQsdyk6dH0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHM9Ci5sZW5ndGg/KG49M0RlLHcpOm59LHcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLD0Kdyk6cn0sdy54U2NhbGU9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdyk6c30sdy55U2NhbGU9Cj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx3KTpvfSx3LnhEb21haW49M0Rm dW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx3KTpkfSx3LnlEb21h aW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh2PTNEZSx3KTp2fSx3 LnhSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPQo9M0RlLHcp Om19LHcueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0Rl LHcpOmd9LHcuZm89CnJjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Zj0zRGUsdyk6Zn0sdy5mb3JjZVk9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSx3KTpsfSx3LnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVu dHMubGVuZ3RoPyhjPTNEZSx3KTpjfSx3LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg9Cj8oaD0zRGUsdyk6aH0sdy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZS51dGlscy5nZT0KdENvbG9yKHQpLHcpOnB9LHcuaWQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdyk6aX0sdy5pPQpu dGVyYWN0aXZlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0QhMSx3 KTpifSx3fSxlLm1vZGVscy49CmJ1bGxldD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXtyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKGUsbil7dmFyIHA9M0RjLXQubD0KZWZ0LXQucmlnaHQsbT0zRGgt dC50b3AtdC5ib3R0b20sZz0zRGQzLnNlbGVjdCh0aGlzKSx5PTNEaS5jYWxsKHRoaXMsZSxuKS5z PQpsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxiPTNEcy5jYWxsKHRoaXMsZSxuKS5zbGljZSgp LnNvcnQoZDMuZGVzY2VuZGluZyk9Cix3PTNEby5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLnNvcnQo ZDMuZGVzY2VuZGluZyksRT0zRHUuY2FsbCh0aGlzLGUsbikuc2xpYz0KZSgpLFM9M0RhLmNhbGwo dGhpcyxlLG4pLnNsaWNlKCkseD0zRGYuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSxUPTNEZDMuc2Nh bGUuPQpsaW5lYXIoKS5kb21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKFtsLHldKSkpLnJhbmdlKHI/ W3AsMF06WzAscF0pLE49M0R0aGlzLl89Cl9jaGFydF9ffHxkMy5zY2FsZS5saW5lYXIoKS5kb21h aW4oWzAsSW5maW5pdHldKS5yYW5nZShULnJhbmdlKCkpO3RoaXMuX19jaD0KYXJ0X189M0RUO3Zh ciBDPTNEZDMubWluKHkpLGs9M0RkMy5tYXgoeSksTD0zRHlbMV0sQT0zRGcuc2VsZWN0QWxsKCJn Lm52LXdyPQphcC5udi1idWxsZXQiKS5kYXRhKFtlXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3I9CmFwIG52LWJ1bGxldCIpLE09M0RPLmFwcGVuZCgi ZyIpLF89M0RBLnNlbGVjdCgiZyIpO00uYXBwZW5kKCJyZWN0IikuYXR0cigiYz0KbGFzcyIsIm52 LXJhbmdlIG52LXJhbmdlTWF4IiksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LXJh bmdlIG52LXJhPQpuZ2VBdmciKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFu Z2UgbnYtcmFuZ2VNaW4iKSxNLmFwcGVuZCgicmU9CmN0IikuYXR0cigiY2xhc3MiLCJudi1tZWFz dXJlIiksTS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm52LW1hcmtlclRyaT0KYW5nbGUi KSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2 YXIgRD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIE1hdGguYWJzKE4oZSktTigwKSl9LFA9M0RmdW5j dGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoVChlKS1UKDA9CikpfSxIPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGU8MD9OKGUpOk4oMCl9LEI9M0RmdW5jdGlvbihlKXtyZXR1cm4gZTwwP1QoZSk6VD0KKDAp fTtfLnNlbGVjdCgicmVjdC5udi1yYW5nZU1heCIpLmF0dHIoImhlaWdodCIsbSkuYXR0cigid2lk dGgiLFAoaz4wP2s6QykpPQouYXR0cigieCIsQihrPjA/azpDKSkuZGF0dW0oaz4wP2s6QyksXy5z ZWxlY3QoInJlY3QubnYtcmFuZ2VBdmciKS5hdHRyKCJoZWk9CmdodCIsbSkuYXR0cigid2lkdGgi LFAoTCkpLmF0dHIoIngiLEIoTCkpLmRhdHVtKEwpLF8uc2VsZWN0KCJyZWN0Lm52LXJhbmdlTT0K aW4iKS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoIndpZHRoIixQKGspKS5hdHRyKCJ4IixCKGspKS5h dHRyKCJ3aWR0aCIsUChrPjA/PQpDOmspKS5hdHRyKCJ4IixCKGs+MD9DOmspKS5kYXR1bShrPjA/ QzprKSxfLnNlbGVjdCgicmVjdC5udi1tZWFzdXJlIikuc3R5bGU9CigiZmlsbCIsZCkuYXR0cigi aGVpZ2h0IixtLzMpLmF0dHIoInkiLG0vMykuYXR0cigid2lkdGgiLHc8MD9UKDApLVQod1swXSk6 VD0KKHdbMF0pLVQoMCkpLmF0dHIoIngiLEIodykpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7 di5lbGVtZW50TW91c2VvdmVyKHt2PQphbHVlOndbMF0sbGFiZWw6eFswXXx8IkN1cnJlbnQiLHBv czpbVCh3WzBdKSxtLzJdfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW89Cm4oKXt2LmVsZW1lbnRN b3VzZW91dCh7dmFsdWU6d1swXSxsYWJlbDp4WzBdfHwiQ3VycmVudCJ9KX0pO3ZhciBqPTNEbS82 O2JbMD0KXT9fLnNlbGVjdEFsbCgicGF0aC5udi1tYXJrZXJUcmlhbmdsZSIpLmF0dHIoInRyYW5z Zm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuPQoidHJhbnNsYXRlKCIrVChiWzBdKSsiLCIrbS8yKyIp In0pLmF0dHIoImQiLCJNMCwiK2orIkwiK2orIiwiKyAtaisiICIrIC1qKyI9CiwiKyAtaisiWiIp Lm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTpiWzBd LGxhYmVsOj0KU1swXXx8IlByZXZpb3VzIixwb3M6W1QoYlswXSksbS8yXX0pfSkub24oIm1vdXNl b3V0IixmdW5jdGlvbigpe3YuZWxlbWVudE1vPQp1c2VvdXQoe3ZhbHVlOmJbMF0sbGFiZWw6U1sw XXx8IlByZXZpb3VzIn0pfSk6Xy5zZWxlY3RBbGwoInBhdGgubnYtbWFya2VyVHI9CmlhbmdsZSIp LnJlbW92ZSgpLEEuc2VsZWN0QWxsKCIubnYtcmFuZ2UiKS5vbigibW91c2VvdmVyIixmdW5jdGlv bihlLHQpe3Zhcj0KIG49M0RFW3RdfHwodD90PTNEPTNEMT8iTWVhbiI6Ik1pbmltdW0iOiJNYXhp bXVtIik7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1PQplOmUsbGFiZWw6bixwb3M6W1QoZSksbS8y XX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe3ZhciBuPTNERVt0XXx8KHQ9Cj90PTNE PTNEMT8iTWVhbiI6Ik1pbmltdW0iOiJNYXhpbXVtIik7di5lbGVtZW50TW91c2VvdXQoe3ZhbHVl OmUsbGFiZWw6bn0pfT0KKX0pLG19dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0 OjB9LG49M0QibGVmdCIscj0zRCExLGk9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBlLnJhbmdlc30s cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcmtlcnN9LG89M0RmdW5jdGlvbihlKXtyZXQ9CnVy biBlLm1lYXN1cmVzfSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucmFuZ2VMYWJlbHM/ZS5yYW5n ZUxhYmVsczpbXX0sYT0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFya2VyTGFiZWxzP2UubWFy a2VyTGFiZWxzOltdfSxmPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogZS5tZWFzdXJlTGFiZWxzP2Uu bWVhc3VyZUxhYmVsczpbXX0sbD0zRFswXSxjPTNEMzgwLGg9M0QzMCxwPTNEbnVsbCxkPTNEZS49 CnV0aWxzLmdldENvbG9yKFsiIzFmNzdiNCJdKSx2PTNEZDMuZGlzcGF0Y2goImVsZW1lbnRNb3Vz ZW92ZXIiLCJlbGVtZW50TW91cz0KZW91dCIpO3JldHVybiBtLmRpc3BhdGNoPTNEdixtLm9wdGlv bnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5vcmllPQpudD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxyPTNEbj0zRD0zRCJyaWdodCJ8fG49M0Q9 M0Q9CiJib3R0b20iLG0pOm59LG0ucmFuZ2VzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGk9M0RlLG0pOml9LD0KbS5tYXJrZXJzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHM9M0RlLG0pOnN9LG0ubWVhc3VyZXM9M0RmPQp1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxtKTpvfSxtLmZvcmNlWD0zRGZ1bmN0aW9uKGUp e3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0ud2lkdGg9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhjPTNEZSxtKTpjfSxtLmhlaWdodD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxtKTpoPQp9LG0ubWFyZ2lu PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUu dG9wIT0zRCI9CnVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0 IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaT0KZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90 dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5PQpwZW9mIGUu bGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LG0pOnR9LG0udGlja0Zvcm1hdD0zRGZ1 bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLG0pOnB9LG0uY29sb3I9 M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhkPTNEZS51dGlscy5nZXRD b2xvcih0KSxtKTpkfSxtfSxlLm1vZGVscy5idWxsZXRDaGFydD0zRGZ1bmN0aW9uKCl7PQpmdW5j dGlvbiBtKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24obixoKXt2YXIgZz0zRGQzLnNlbGVjdCh0 aGlzKSx5PTNEKGF8fHA9CmFyc2VJbnQoZy5zdHlsZSgid2lkdGgiKSl8fDk2MCktaS5sZWZ0LWku cmlnaHQsYj0zRGYtaS50b3AtaS5ib3R0b20sdz0zRHRoaT0KczttLnVwZGF0ZT0zRGZ1bmN0aW9u KCl7bShlKX0sbS5jb250YWluZXI9M0R0aGlzO2lmKCFufHwhcy5jYWxsKHRoaXMsbixoKSl7PQp2 YXIgRT0zRGcuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbcF0pO3JldHVybiBFLmVudGVy KCkuYXBwZW5kKCJ0ZXh0Iik9Ci5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigi ZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZD0KZGxlIiksRS5hdHRyKCJ4Iixp LmxlZnQreS8yKS5hdHRyKCJ5IiwxOCtpLnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJu PQogZX0pLG19Zy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgUz0zRHMuY2Fs bCh0aGlzLG4saCkuc2xpY2UoKS49CnNvcnQoZDMuZGVzY2VuZGluZykseD0zRG8uY2FsbCh0aGlz LG4saCkuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLFQ9M0R1Lj0KY2FsbCh0aGlzLG4saCku c2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLE49M0RnLnNlbGVjdEFsbCgiZy5udi13cmFwLm52 LWJ1PQpsbGV0Q2hhcnQiKS5kYXRhKFtuXSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtd3JhcCA9Cm52LWJ1bGxldENoYXJ0Iiksaz0zREMuYXBwZW5kKCJn IiksTD0zRE4uc2VsZWN0KCJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtYnVs bGV0V3JhcCIpLGsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi10aXRsZXMiKSxOLmF0dHIo InRyYW5zPQpmb3JtIiwidHJhbnNsYXRlKCIraS5sZWZ0KyIsIitpLnRvcCsiKSIpO3ZhciBBPTNE ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFs9CjAsTWF0aC5tYXgoU1swXSx4WzBdLFRbMF0pXSku cmFuZ2Uocj9beSwwXTpbMCx5XSksTz0zRHRoaXMuX19jaGFydF9ffHxkMy5zYz0KYWxlLmxpbmVh cigpLmRvbWFpbihbMCxJbmZpbml0eV0pLnJhbmdlKEEucmFuZ2UoKSk7dGhpcy5fX2NoYXJ0X189 M0RBO3ZhciBNPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoTyhlKS1PKDApKX0sXz0z RGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyg9CkEoZSktQSgwKSl9LEQ9M0RrLnNlbGVjdCgi Lm52LXRpdGxlcyIpLmFwcGVuZCgiZyIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIj0KKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTYsIisoZi1pLnRvcC1pLmJvdHRvbSkvMisiKSIpO0Qu YXBwZW5kKCJ0ZXh0PQoiKS5hdHRyKCJjbGFzcyIsIm52LXRpdGxlIikudGV4dChmdW5jdGlvbihl KXtyZXR1cm4gZS50aXRsZX0pLEQuYXBwZW5kKCJ0ZXg9CnQiKS5hdHRyKCJjbGFzcyIsIm52LXN1 YnRpdGxlIikuYXR0cigiZHkiLCIxZW0iKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLj0Kc3Vi dGl0bGV9KSx0LndpZHRoKHkpLmhlaWdodChiKTt2YXIgUD0zREwuc2VsZWN0KCIubnYtYnVsbGV0 V3JhcCIpO2QzLnRyYW5zPQppdGlvbihQKS5jYWxsKHQpO3ZhciBIPTNEbHx8QS50aWNrRm9ybWF0 KHkvMTAwKSxCPTNETC5zZWxlY3RBbGwoImcubnYtdGljayI9CikuZGF0YShBLnRpY2tzKHkvNTAp LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRleHRDb250ZW50fHxIKGUpfSksaj0zREIuZW50ZT0K cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtdGljayIpLmF0dHIoInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSl7cmV0dXJuPQoidHJhbnNsYXRlKCIrTyhlKSsiLDApIn0pLnN0eWxlKCJvcGFj aXR5IiwxZS02KTtqLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiw9CmIpLmF0dHIoInkyIixiKjcv Niksai5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImR5 Ij0KLCIxZW0iKS5hdHRyKCJ5IixiKjcvNikudGV4dChIKTt2YXIgRj0zRGQzLnRyYW5zaXRpb24o QikuYXR0cigidHJhbnNmb3JtIixmPQp1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitBKGUp KyIsMCkifSkuc3R5bGUoIm9wYWNpdHkiLDEpO0Yuc2VsZWN0KCJsaW49CmUiKS5hdHRyKCJ5MSIs YikuYXR0cigieTIiLGIqNy82KSxGLnNlbGVjdCgidGV4dCIpLmF0dHIoInkiLGIqNy82KSxkMy50 cmFucz0KaXRpb24oQi5leGl0KCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJu InRyYW5zbGF0ZSgiK0EoZSkrIiwwKSJ9PQopLnN0eWxlKCJvcGFjaXR5IiwxZS02KS5yZW1vdmUo KSxkLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5rZXk9M0RuLnQ9Cml0bGUsYyYmdihl LHcucGFyZW50Tm9kZSl9KX0pLGQzLnRpbWVyLmZsdXNoKCksbX12YXIgdD0zRGUubW9kZWxzLmJ1 bGxldCgpLD0Kbj0zRCJsZWZ0IixyPTNEITEsaT0zRHt0b3A6NSxyaWdodDo0MCxib3R0b206MjAs bGVmdDoxMjB9LHM9M0RmdW5jdGlvbihlKXtyPQpldHVybiBlLnJhbmdlc30sbz0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLm1hcmtlcnN9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS49Cm1lYXN1cmVz fSxhPTNEbnVsbCxmPTNENTUsbD0zRG51bGwsYz0zRCEwLGg9M0RmdW5jdGlvbihlLHQsbixyLGkp e3JldHVybiI8aD0KMz4iK3QrIjwvaDM+IisiPHA+IituKyI8L3A+In0scD0zRCJObyBEYXRhIEF2 YWlsYWJsZS4iLGQ9M0RkMy5kaXNwYXRjaCgidG9vPQpsdGlwU2hvdyIsInRvb2x0aXBIaWRlIiks dj0zRGZ1bmN0aW9uKHQsbil7dmFyIHI9M0R0LnBvc1swXSsobi5vZmZzZXRMZWZ0fHw9CjApK2ku bGVmdCxzPTNEdC5wb3NbMV0rKG4ub2Zmc2V0VG9wfHwwKStpLnRvcCxvPTNEaCh0LmtleSx0Lmxh YmVsLHQudmFsdWUsdD0KLG0pO2UudG9vbHRpcC5zaG93KFtyLHNdLG8sdC52YWx1ZTwwPyJlIjoi dyIsbnVsbCxuKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oPQoiZWxlbWVudE1vdXNlb3Zlci50b29s dGlwIixmdW5jdGlvbihlKXtkLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWw9CmVt ZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZC50b29sdGlwSGlkZShlKX0pLGQub24o InRvb2x0aXBIaWRlIixmdT0KbmN0aW9uKCl7YyYmZS50b29sdGlwLmNsZWFudXAoKX0pLG0uZGlz cGF0Y2g9M0RkLG0uYnVsbGV0PTNEdCxkMy5yZWJpbmQobSx0PQosImNvbG9yIiksbS5vcHRpb25z PTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKG0pLG0ub3JpZW50PTNEZnVuY3Rpb24oZSl7cmU9 CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUscj0zRG49M0Q9M0QicmlnaHQifHxuPTNEPTNE ImJvdHRvbSIsbSk6bn0sbS5yYT0Kbmdlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhzPTNEZSxtKTpzfSxtLm1hcmtlcnM9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZSxtKTpvfSxtLm1lYXN1cmVzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGE9CnJndW1lbnRzLmxlbmd0aD8odT0zRGUsbSk6dX0sbS53aWR0aD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGE9M0RlLG0pOmF9LG0uaGVpZ2h0PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLG0pOmZ9LG0uPQptYXJnaW49M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNE InVuZGU9CmZpbmVkIj9lLnRvcDppLnRvcCxpLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVu ZGVmaW5lZCI/ZS5yaWdodDppLnJpZ2h0LD0KaS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNE InVuZGVmaW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PTNEdHlwZW9mPQogZS5sZWZ0IT0z RCJ1bmRlZmluZWQiP2UubGVmdDppLmxlZnQsbSk6aX0sbS50aWNrRm9ybWF0PTNEZnVuY3Rpb24o ZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS50b29sdGlwcz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGM9M0RlLG0pOmN9LG0udG9vbHRp cENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpoPTNEZSxt KTpofSxtLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNE ZSxtKTpwfSxtfSw9CmUubW9kZWxzLmN1bXVsYXRpdmVMaW5lQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1 bmN0aW9uIEQoYil7cmV0dXJuIGIuZWFjaChmdW5jdD0KaW9uKGIpe2Z1bmN0aW9uIEkoZSx0KXtk My5zZWxlY3QoRC5jb250YWluZXIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKX1mPQp1bmN0 aW9uIHEoZSx0KXtNLng9M0RkMy5ldmVudC54LE0uaT0zRE1hdGgucm91bmQoTy5pbnZlcnQoTS54 KSksbnQoKX1mdW5jdGk9Cm9uIFIoZSx0KXtkMy5zZWxlY3QoRC5jb250YWluZXIpLnN0eWxlKCJj dXJzb3IiLCJhdXRvIikseC5pbmRleD0zRE0uaSxrLnN0YT0KdGVDaGFuZ2UoeCl9ZnVuY3Rpb24g bnQoKXt0dC5kYXRhKFtNXSk7dmFyIGU9M0RELnRyYW5zaXRpb25EdXJhdGlvbigpO0QudHJhPQpu c2l0aW9uRHVyYXRpb24oMCksRC51cGRhdGUoKSxELnRyYW5zaXRpb25EdXJhdGlvbihlKX12YXIg TD0zRGQzLnNlbGVjdCh0aGk9CnMpLmNsYXNzZWQoIm52LWNoYXJ0LSIrUywhMCksQT0zRHRoaXMs SD0zRChmfHxwYXJzZUludChMLnN0eWxlKCJ3aWR0aCIpKXx8OT0KNjApLXUubGVmdC11LnJpZ2h0 LEI9M0QobHx8cGFyc2VJbnQoTC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9t PQo7RC51cGRhdGU9M0RmdW5jdGlvbigpe0wuY2FsbChEKX0sRC5jb250YWluZXI9M0R0aGlzLHgu ZGlzYWJsZWQ9M0RiLm1hcChmdW49CmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFU KXt2YXIgajtUPTNEe307Zm9yKGogaW4geCl4W2pdaW5zdGFuY2VvZj0KIEFycmF5P1Rbal09M0R4 W2pdLnNsaWNlKDApOlRbal09M0R4W2pdfXZhciBGPTNEZDMuYmVoYXZpb3IuZHJhZygpLm9uKCJk cmFnPQpzdGFydCIsSSkub24oImRyYWciLHEpLm9uKCJkcmFnZW5kIixSKTtpZighYnx8IWIubGVu Z3RofHwhYi5maWx0ZXIoZnVuY3Rpb249CihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVu Z3RoKXt2YXIgVT0zREwuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YT0KKFtOXSk7cmV0dXJu IFUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIiku YXR0cigiPQpkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksVS5hdHRy KCJ4Iix1LmxlZnQrSC8yKS5hdHRyKCJ5Iiw9CnUudG9wK0IvMikudGV4dChmdW5jdGlvbihlKXty ZXR1cm4gZX0pLER9TC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKT0KLHc9M0R0LnhT Y2FsZSgpLEU9M0R0LnlTY2FsZSgpO2lmKCF5KXt2YXIgej0zRGIuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiFlPQouZGlzYWJsZWR9KS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgcj0zRGQzLmV4dGVu dChlLnZhbHVlcyx0LnkoKSk7cmV0dXJuIHJbMF09CjwtMC45NSYmKHJbMF09M0QtMC45NSksWyhy WzBdLXJbMV0pLygxK3JbMV0pLChyWzFdLXJbMF0pLygxK3JbMF0pXX0pLFc9M0RbZD0KMy5taW4o eixmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pLGQzLm1heCh6LGZ1bmN0aW9uKGUpe3JldHVybiBl WzFdfSldO3QueURvPQptYWluKFcpfWVsc2UgdC55RG9tYWluKG51bGwpO08uZG9tYWluKFswLGJb MF0udmFsdWVzLmxlbmd0aC0xXSkucmFuZ2UoWzAsSF09CikuY2xhbXAoITApO3ZhciBiPTNEUChN LmksYiksWD0zRGc/Im5vbmUiOiJhbGwiLFY9M0RMLnNlbGVjdEFsbCgiZy5udi13cmFwLj0KbnYt Y3VtdWxhdGl2ZUxpbmUiKS5kYXRhKFtiXSksJD0zRFYuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZDMgPQpudi13cmFwIG52LWN1bXVsYXRpdmVMaW5lIikuYXBwZW5kKCJnIiks Sj0zRFYuc2VsZWN0KCJnIik7JC5hcHBlbmQoImciKS5hdHQ9CnIoImNsYXNzIiwibnYtaW50ZXJh Y3RpdmUiKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIikuc3R5bD0K ZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXkgbnYtYXhpcyIpLCQuYXBwPQplbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhY2tncm91bmQi KSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXM9CldyYXAiKS5zdHlsZSgicG9p bnRlci1ldmVudHMiLFgpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1hdmdMaW5lc1dy YT0KcCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSwkLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtbGVnZW5kV3JhPQpwIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LWNvbnRyb2xzV3JhcCIpLGMmJihpLndpZHRoKEgpLEouc2VsZWN0KCI9Ci5udi1sZWdlbmRXcmFw IikuZGF0dW0oYikuY2FsbChpKSx1LnRvcCE9M0RpLmhlaWdodCgpJiYodS50b3A9M0RpLmhlaWdo dCgpLD0KQj0zRChsfHxwYXJzZUludChMLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5i b3R0b20pLEouc2VsZWN0KCIubnYtbGVnPQplbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDAsIisgLXUudG9wKyIpIikpO2lmKG0pe3ZhciBLPTNEW3trZXk9CjoiUmUtc2NhbGUg eS1heGlzIixkaXNhYmxlZDoheX1dO3Mud2lkdGgoMTQwKS5jb2xvcihbIiM0NDQiLCIjNDQ0Iiwi IzQ0NCJdKT0KLnJpZ2h0QWxpZ24oITEpLm1hcmdpbih7dG9wOjUscmlnaHQ6MCxib3R0b206NSxs ZWZ0OjIwfSksSi5zZWxlY3QoIi5udi1jb250PQpyb2xzV3JhcCIpLmRhdHVtKEspLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIpLmNhbGwocyl9Vi49CmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSxkJiZKLnNlbGVjdCgi Lm52LXkubnYtYT0KeGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSCsiLDApIik7 dmFyIFE9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyPQpldHVybiBlLnRlbXBEaXNhYmxlZH0pO1Yu c2VsZWN0KCIudGVtcERpc2FibGVkIikucmVtb3ZlKCksUS5sZW5ndGgmJlYuYXBwZW49CmQoInRl eHQiKS5hdHRyKCJjbGFzcyIsInRlbXBEaXNhYmxlZCIpLmF0dHIoIngiLEgvMikuYXR0cigieSIs Ii0uNzFlbSIpLnN0eT0KbGUoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChRLm1hcChmdW5jdGlv bihlKXtyZXR1cm4gZS5rZXl9KS5qb2luKCIsICIpKyIgPQp2YWx1ZXMgY2Fubm90IGJlIGNhbGN1 bGF0ZWQgZm9yIHRoaXMgdGltZSBwZXJpb2QuIiksZyYmKG8ud2lkdGgoSCkuaGVpZ2h0KEI9Ciku bWFyZ2luKHtsZWZ0OnUubGVmdCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoTCkueFNjYWxlKHcp LFYuc2VsZWN0KCIubnYtaT0KbnRlcmFjdGl2ZSIpLmNhbGwobykpLCQuc2VsZWN0KCIubnYtYmFj a2dyb3VuZCIpLmFwcGVuZCgicmVjdCIpLEouc2VsZWN0KCIuPQpudi1iYWNrZ3JvdW5kIHJlY3Qi KS5hdHRyKCJ3aWR0aCIsSCkuYXR0cigiaGVpZ2h0IixCKSx0LnkoZnVuY3Rpb24oZSl7cmV0dXI9 Cm4gZS5kaXNwbGF5Lnl9KS53aWR0aChIKS5oZWlnaHQoQikuY29sb3IoYi5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5jb2xvcj0KfHxhKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1 cm4hYlt0XS5kaXNhYmxlZCYmIWJbdF0udGVtcERpc2FibGVkfSkpPQo7dmFyIEc9M0RKLnNlbGVj dCgiLm52LWxpbmVzV3JhcCIpLmRhdHVtKGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRp c2E9CmJsZWQmJiFlLnRlbXBEaXNhYmxlZH0pKTtHLmNhbGwodCksYi5mb3JFYWNoKGZ1bmN0aW9u KGUsdCl7ZS5zZXJpZXNJbmRleD0zRD0KdH0pO3ZhciBZPTNEYi5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWQmJiEhQyhlKX0pLFo9M0RKLnNlbGVjdCgiPQoubnYtYXZnTGluZXNX cmFwIikuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShZLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0p LGV0PQo9M0RmdW5jdGlvbihlKXt2YXIgdD0zREUoQyhlKSk7cmV0dXJuIHQ8MD8wOnQ+Qj9COnR9 O1ouZW50ZXIoKS5hcHBlbmQoImxpbmU9CiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxl KCJzdHJva2UtZGFzaGFycmF5IiwiMTAsMTAiKS5zdHlsZSgic3Ryb2tlIj0KLGZ1bmN0aW9uKGUs bil7cmV0dXJuIHQuY29sb3IoKShlLGUuc2VyaWVzSW5kZXgpfSkuYXR0cigieDEiLDApLmF0dHIo IngyIixIPQopLmF0dHIoInkxIixldCkuYXR0cigieTIiLGV0KSxaLnN0eWxlKCJzdHJva2Utb3Bh Y2l0eSIsZnVuY3Rpb24oZSl7dmFyIHQ9M0Q9CkUoQyhlKSk7cmV0dXJuIHQ8MHx8dD5CPzA6MX0p LmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsSCkuYXR0cigieTEiLGV0KS5hdHRyKD0KInkyIixldCks Wi5leGl0KCkucmVtb3ZlKCk7dmFyIHR0PTNERy5zZWxlY3RBbGwoIi5udi1pbmRleExpbmUiKS5k YXRhKFtNXSk7PQp0dC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtaW5k ZXhMaW5lIikuYXR0cigid2lkdGgiLDMpLmF0dHI9CigieCIsLTIpLmF0dHIoImZpbGwiLCJyZWQi KS5hdHRyKCJmaWxsLW9wYWNpdHkiLC41KS5zdHlsZSgicG9pbnRlci1ldmVudHMiLD0KImFsbCIp LmNhbGwoRiksdHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRl KCIrTyhlLmkpKyIsPQowKSJ9KS5hdHRyKCJoZWlnaHQiLEIpLGgmJihuLnNjYWxlKHcpLnRpY2tz KE1hdGgubWluKGJbMF0udmFsdWVzLmxlbmd0aCxILzc9CjApKS50aWNrU2l6ZSgtQiwwKSxKLnNl bGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLD0KIitF LnJhbmdlKClbMF0rIikiKSxkMy50cmFuc2l0aW9uKEouc2VsZWN0KCIubnYteC5udi1heGlzIikp LmNhbGwobikpLHAmJihyPQouc2NhbGUoRSkudGlja3MoQi8zNikudGlja1NpemUoLUgsMCksZDMu dHJhbnNpdGlvbihKLnNlbGVjdCgiLm52LXkubnYtYXhpcyI9CikpLmNhbGwocikpLEouc2VsZWN0 KCIubnYtYmFja2dyb3VuZCByZWN0Iikub24oImNsaWNrIixmdW5jdGlvbigpe00ueD0zRGQzLj0K bW91c2UodGhpcylbMF0sTS5pPTNETWF0aC5yb3VuZChPLmludmVydChNLngpKSx4LmluZGV4PTNE TS5pLGsuc3RhdGVDaGFuZ2UoPQp4KSxudCgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNr IixmdW5jdGlvbihlKXtNLmk9M0RlLnBvaW50SW5kZXgsTS54PQo9M0RPKE0uaSkseC5pbmRleD0z RE0uaSxrLnN0YXRlQ2hhbmdlKHgpLG50KCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayI9 CixmdW5jdGlvbihlLHQpe2UuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCx5PTNEIWUuZGlzYWJsZWQs eC5yZXNjYWxlWT0zRHksay5zdD0KYXRlQ2hhbmdlKHgpLEQudXBkYXRlKCl9KSxpLmRpc3BhdGNo Lm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7eC5kaXNhYmxlPQpkPTNEZS5kaXNhYmxlZCxr LnN0YXRlQ2hhbmdlKHgpLEQudXBkYXRlKCl9KSxvLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vt b3Y9CmUiLGZ1bmN0aW9uKGkpe3QuY2xlYXJIaWdobGlnaHRzKCk7dmFyIHMsZixsLGM9M0RbXTti LmZpbHRlcihmdW5jdGlvbihlLHQpez0KcmV0dXJuIGUuc2VyaWVzSW5kZXg9M0R0LCFlLmRpc2Fi bGVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9M0RlLmludGVyYWN0PQppdmVCaXNlY3Qobi52 YWx1ZXMsaS5wb2ludFhWYWx1ZSxELngoKSksdC5oaWdobGlnaHRQb2ludChyLGYsITApO3ZhciBv PTNEbi49CnZhbHVlc1tmXTtpZih0eXBlb2Ygbz0zRD0zRCJ1bmRlZmluZWQiKXJldHVybjt0eXBl b2Ygcz0zRD0zRCJ1bmRlZmluZWQiJiYocz0KPTNEbyksdHlwZW9mIGw9M0Q9M0QidW5kZWZpbmVk IiYmKGw9M0RELnhTY2FsZSgpKEQueCgpKG8sZikpKSxjLnB1c2goe2tleTpuPQoua2V5LHZhbHVl OkQueSgpKG8sZiksY29sb3I6YShuLG4uc2VyaWVzSW5kZXgpfSl9KTtpZihjLmxlbmd0aD4yKXt2 YXIgaD0zREQ9Ci55U2NhbGUoKS5pbnZlcnQoaS5tb3VzZVkpLHA9M0RNYXRoLmFicyhELnlTY2Fs ZSgpLmRvbWFpbigpWzBdLUQueVNjYWxlKCkuZD0Kb21haW4oKVsxXSksZD0zRC4wMypwLG09M0Rl Lm5lYXJlc3RWYWx1ZUluZGV4KGMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhPQpsdWV9KSxo LGQpO20hPTNEPTNEbnVsbCYmKGNbbV0uaGlnaGxpZ2h0PTNEITApfXZhciBnPTNEbi50aWNrRm9y bWF0KCkoRC54KCk9CihzLGYpLGYpO28udG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK3UubGVmdCx0 b3A6aS5tb3VzZVkrdS50b3B9KS5jaGFydENvbnRhaT0KbmVyKEEucGFyZW50Tm9kZSkuZW5hYmxl ZCh2KS52YWx1ZUZvcm1hdHRlcihmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtPQphdCgp KGUpfSkuZGF0YSh7dmFsdWU6ZyxzZXJpZXM6Y30pKCksby5yZW5kZXJHdWlkZUxpbmUobCl9KSxv LmRpc3BhdGNoLm9uKCI9CmVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7ay50b29sdGlwSGlk ZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxrLm9uKCJ0bz0Kb2x0aXBTaG93IixmdW5jdGlvbihl KXt2JiZfKGUsQS5wYXJlbnROb2RlKX0pLGsub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlPQop e3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoYi5mb3JFYWNoKGZ1bmN0aW9uKHQs bil7dC5kaXNhYmxlZD0zRGU9Ci5kaXNhYmxlZFtuXX0pLHguZGlzYWJsZWQ9M0RlLmRpc2FibGVk KSx0eXBlb2YgZS5pbmRleCE9M0QidW5kZWZpbmVkIiYmKE0uaT0KPTNEZS5pbmRleCxNLng9M0RP KE0uaSkseC5pbmRleD0zRGUuaW5kZXgsdHQuZGF0YShbTV0pKSx0eXBlb2YgZS5yZXNjYWxlWSE9 Cj0zRCJ1bmRlZmluZWQiJiYoeT0zRGUucmVzY2FsZVkpLEQudXBkYXRlKCl9KX0pLER9ZnVuY3Rp b24gUChlLG4pe3JldHVybiBuLj0KbWFwKGZ1bmN0aW9uKG4scil7aWYoIW4udmFsdWVzKXJldHVy biBuO3ZhciBpPTNEbi52YWx1ZXNbZV07aWYoaT0zRD0zRG51bGwpPQpyZXR1cm4gbjt2YXIgcz0z RHQueSgpKGksZSk7cmV0dXJuIHM8LTAuOTUmJiFBPyhuLnRlbXBEaXNhYmxlZD0zRCEwLG4pOihu LnQ9CmVtcERpc2FibGVkPTNEITEsbi52YWx1ZXM9M0RuLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSxu KXtyZXR1cm4gZS5kaXNwbGF5PTNEez0KeToodC55KCkoZSxuKS1zKS8oMStzKX0sZX0pLG4pfSl9 dmFyIHQ9M0RlLm1vZGVscy5saW5lKCksbj0zRGUubW9kZWxzLmF4aXMoPQopLHI9M0RlLm1vZGVs cy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNE ZS5pbnQ9CmVyYWN0aXZlR3VpZGVsaW5lKCksdT0zRHt0b3A6MzAscmlnaHQ6MzAsYm90dG9tOjUw LGxlZnQ6NjB9LGE9M0RlLnV0aWxzLmRlZj0KYXVsdENvbG9yKCksZj0zRG51bGwsbD0zRG51bGws Yz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEITAsZz0KPTNEITEseT0zRCEw LGI9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisi IGF0ICIrPQp0KyI8L3A+In0sdyxFLFM9M0R0LmlkKCkseD0zRHtpbmRleDowLHJlc2NhbGVZOnl9 LFQ9M0RudWxsLE49M0QiTm8gRGF0YSBBdmE9CmlsYWJsZS4iLEM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gZS5hdmVyYWdlfSxrPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidD0Kb29sdGlwSGlk ZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxMPTNEMCxBPTNEITE7bi5vcmllbnQoImJv dHRvbSIpLnRpPQpja1BhZGRpbmcoNyksci5vcmllbnQoZD8icmlnaHQiOiJsZWZ0Iikscy51cGRh dGVTdGF0ZSghMSk7dmFyIE89M0RkMy5zY2FsZS49CmxpbmVhcigpLE09M0R7aTowLHg6MH0sXz0z RGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKT0KLHU9M0Rp LnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50 LGkucG9pbnRJbmRlPQp4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2lu dEluZGV4KSksbD0zRGIoaS5zZXJpZXMua2V5LGEsZiw9CmksRCk7ZS50b29sdGlwLnNob3coW28s dV0sbCxudWxsLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91cz0KZW92 ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFd K3UudG9wXSxrLnRvb2x0PQppcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7ay50b29sdGlwSGk9CmRlKGUpfSksay5vbigidG9vbHRp cEhpZGUiLGZ1bmN0aW9uKCl7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLEQuZGlzcGF0Y2g9Cj0z RGssRC5saW5lcz0zRHQsRC5sZWdlbmQ9M0RpLEQueEF4aXM9M0RuLEQueUF4aXM9M0RyLEQuaW50 ZXJhY3RpdmVMYXllcj0zRD0KbyxkMy5yZWJpbmQoRCx0LCJkZWZpbmVkIiwiaXNBcmVhIiwieCIs InkiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJzaXplIiwieERvbWFpPQpuIiwieURvbWFpbiIsInhSYW5n ZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCI9 CmNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImlkIiksRC5vcHRpb25zPTNEZS51dGlscy5vcHRp b25zRnVuYy5iaW5kKEQpLEQubT0KYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmPQppbmVkIj9lLnRvcDp1LnRv cCx1LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0 LHU9Ci5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dS5i b3R0b20sdS5sZWZ0PTNEdHlwZW9mID0KZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp1Lmxl ZnQsRCk6dX0sRC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/ KGY9M0RlLEQpOmZ9LEQuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGw9Cj0zRGUsRCk6bH0sRC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhhPTNEZS51dGlscy5nZXRDbz0KbG9yKHQpLGkuY29sb3IoYSksRCk6YX0sRC5yZXNj YWxlWT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PQo9M0RlLEQpOnl9 LEQuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09 M0RlLEQpOm09Cn0sRC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxlPQo9M0Q9M0Q9M0QhMCYmKEQuaW50ZXJhY3RpdmUo ITEpLEQudXNlVm9yb25vaSghMSkpLEQpOmd9LEQuc2hvd0xlZ2VuZD0zRGZ1bmM9CnRpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEQpOmN9LEQuc2hvd1hBeGlzPTNEZnVuY3Rp b24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsRCk6aH0sRC5zaG93WUF4aXM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhwPTNEZSxEKTpwfSxELnJp Z2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGQ9 M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLEQpOmR9LEQudG9vbHRpcHM9M0RmdW5jdGlv bihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxEKTp2fSxELnRvb2x0aXBDb250 ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oYj0zRGUsRCk6Yn0s RC5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSw9CkQp Onh9LEQuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KFQ9M0RlLEQpOlR9LEQubj0Kb0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oTj0zRGUsRCk6Tn0sRC5hdmVyYWdlPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oQz0zRGUsRCk6Q30sRC50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbig9 CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxEKTpMfSxELm5vRXJyb3JDaGVjaz0z RGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEQpOkF9LER9LGUu bW9kZWxzLmRpc2NyZXRlQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvPQpuIEUoZSl7cmV0dXJuIGUu ZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQsRT0zRHItdC50b3AtdC5i b3Q9CnRvbSxTPTNEZDMuc2VsZWN0KHRoaXMpO2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFs dWVzLmZvckVhY2goZnVuY3Rpb24oZT0KKXtlLnNlcmllcz0zRHR9KX0pO3ZhciBUPTNEcCYmZD9b XTplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1PQpuY3Rpb24oZSx0KXty ZXR1cm57eDp1KGUsdCkseTphKGUsdCkseTA6ZS55MH19KX0pO3MuZG9tYWluKHB8fGQzLm1lcmdl KFQpLm09CmFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KSkucmFuZ2VCYW5kcyh2fHxbMCxpXSwu MSksby5kb21haW4oZHx8ZDMuZXh0ZW50KD0KZDMubWVyZ2UoVCkubWFwKGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnl9KS5jb25jYXQoZikpKSxjP28ucmFuZ2UobXx8W0UtKG8uZG9tPQphaW4oKVswXTww PzEyOjApLG8uZG9tYWluKClbMV0+MD8xMjowXSk6by5yYW5nZShtfHxbRSwwXSksYj0zRGJ8fHMs dz0zRHd8fG89Ci5jb3B5KCkucmFuZ2UoW28oMCksbygwKV0pO3ZhciBOPTNEUy5zZWxlY3RBbGwo ImcubnYtd3JhcC5udi1kaXNjcmV0ZWJhciIpLj0KZGF0YShbZV0pLEM9M0ROLmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGViPQphciIpLGs9 M0RDLmFwcGVuZCgiZyIpLEw9M0ROLnNlbGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi1ncm89CnVwcyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0 KyIsIit0LnRvcCsiKSIpO3ZhciBBPTNETi5zZWxlYz0KdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFs bCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oPQplKXty ZXR1cm4gZS5rZXl9KTtBLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5 IiwxZS02KS5zdHlsZSg9CiJmaWxsLW9wYWNpdHkiLDFlLTYpLEEuZXhpdCgpLnN0eWxlKCJzdHJv a2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhYz0KaXR5IiwxZS02KS5yZW1vdmUoKSxB LmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtPQoi K3R9KS5jbGFzc2VkKCJob3ZlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KSxBLnN0eWxl KCJzdHJva2Utb3BhY2l0eSI9CiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBPPTNE QS5zZWxlY3RBbGwoImcubnYtYmFyIikuZGF0YShmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVl c30pO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIo PQoidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuInRyYW5zbGF0ZSgiKyhzKHUoZSx0 KSkrcy5yYW5nZUJhbmQoKSouMDU9CikrIiwgIitvKDApKyIpIn0pLm9uKCJtb3VzZW92ZXIiLGZ1 bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdj0KZXIiLCEwKSxnLmVsZW1l bnRNb3VzZW92ZXIoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6 W3MoPQp1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxu KSldLHBvaW50SW5kZXg6bixzZXJpZXM9CkluZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9u KCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuYz0KbGFzc2VkKCJob3Zl ciIsITEpLGcuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0 LnNlcmllPQpzXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0p fSkub24oImNsaWNrIixmdW5jdGlvbih0LG49Cil7Zy5lbGVtZW50Q2xpY2soe3ZhbHVlOmEodCxu KSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLj0KcmFuZ2VCYW5k KCkqKHQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSldLHBvaW50SW5kZXg6bixzZXJpZXNJ bmRleDp0LnNlPQpyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p Lm9uKCJkYmxjbGljayIsZnVuY3Rpb24odCxuKXs9CmcuZWxlbWVudERibENsaWNrKHt2YWx1ZTph KHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcz0KLnJhbmdl QmFuZCgpKih0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2Vy aWVzSW5kZXg6dC5zPQplcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9u KCl9KTtNLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWc9Cmh0IiwwKS5hdHRyKCJ3aWR0aCIscy5y YW5nZUJhbmQoKSouOS9lLmxlbmd0aCksYz8oTS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZT0KeHQt YW5jaG9yIiwibWlkZGxlIiksTy5zZWxlY3QoInRleHQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIGgoYShlLHQpKX0pPQouYXR0cigieCIscy5yYW5nZUJhbmQoKSouOS8yKS5hdHRyKCJ5Iixm dW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD9vKGEoZSw9CnQpKS1vKDApKzEyOi00fSkpOk8u c2VsZWN0QWxsKCJ0ZXh0IikucmVtb3ZlKCksTy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KT0K e3JldHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIn0pLnN0 eWxlKCJmaWxsIixmdW5jdGlvPQpuKGUsdCl7cmV0dXJuIGUuY29sb3J8fGwoZSx0KX0pLnN0eWxl KCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3I9Cnx8bChlLHQpfSkuc2VsZWN0 KCJyZWN0IikuYXR0cigiY2xhc3MiLHkpLmF0dHIoIndpZHRoIixzLnJhbmdlQmFuZCgpKi45L2Uu bD0KZW5ndGgpLE8uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3ZhciBuPTNEcyh1KGUs dCkpK3MucmFuZ2VCYW5kKCkqLjA1PQoscj0zRGEoZSx0KTwwP28oMCk6bygwKS1vKGEoZSx0KSk8 MT9vKDApLTE6byhhKGUsdCkpO3JldHVybiJ0cmFuc2xhdGUoIituKyI9CiwgIityKyIpIn0pLnNl bGVjdCgicmVjdCIpLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgo TWF0aD0KLmFicyhvKGEoZSx0KSktbyhkJiZkWzBdfHwwKSl8fDEpfSksYj0zRHMuY29weSgpLHc9 M0RvLmNvcHkoKX0pLEV9dmFyIHQ9M0R7PQp0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0s bj0zRDk2MCxyPTNENTAwLGk9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCk9CioxZTQpLHM9M0Rk My5zY2FsZS5vcmRpbmFsKCksbz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihlKXty ZXR1cm4gZT0KLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEWzBdLGw9M0RlLnV0 aWxzLmRlZmF1bHRDb2xvcigpLGM9M0QhMSxoPQo9M0RkMy5mb3JtYXQoIiwuMmYiKSxwLGQsdixt LGc9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImU9CmxlbWVudERi bENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLHk9M0QiZGlzY3Jl dGVCYXIiLGIsdz0KO3JldHVybiBFLmRpc3BhdGNoPTNEZyxFLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoRSksRS54PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odT0zRGUsRSk6dX0sRS55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxl bmd0aD8oYT0zRGUsRSk6YX0sRS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odC50bz0KcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRv cCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuPQpkZWZpbmVkIj9lLnJpZ2h0OnQucmln aHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b209Cjp0 LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0Lmxl ZnQsRSk6dH0sRS53aWR0aD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG49M0RlLEUpOm59LEUuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocj0zRGUsRSk6cn0sRS54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9 CnMubGVuZ3RoPyhzPTNEZSxFKTpzfSxFLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZT0KLEUpOm99LEUueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxFKTpwfSxFLnlEb21hPQppbj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxFKTpkfSxFLnhSYW5nZT0zRGZ1bmN0aW9u KGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEUpOnZ9LEUueVJhbmdlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8obT0zRGUsRSk6bX0sRS5mb3JjZVk9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0KPTNEZSxFKTpmfSxFLmNv bG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdl dENvPQpsb3IodCksRSk6bH0sRS5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhpPTNEZSxFKTppfSxFLnNob3c9ClZhbHVlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhjPTNEZSxFKTpjfSxFLnZhbHVlRm9ybWF0PTNEZj0KdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsRSk6aH0sRS5yZWN0Q2xhc3M9M0RmdW5jdGlv bihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxFKTp5fSxFfSxlLm1vZGVscy5k aXNjcmV0ZUJhckNoYXJ0PTNEZnVuY3Rpb249Cigpe2Z1bmN0aW9uIHcoZSl7cmV0dXJuIGUuZWFj aChmdW5jdGlvbihlKXt2YXIgdT0zRGQzLnNlbGVjdCh0aGlzKSxwPTNEdGhpcz0KLHk9M0Qoc3x8 cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8fDk2MCktaS5sZWZ0LWkucmlnaHQsRT0zRChvfHxw YXJzZUludCh1PQouc3R5bGUoImhlaWdodCIpKXx8NDAwKS1pLnRvcC1pLmJvdHRvbTt3LnVwZGF0 ZT0zRGZ1bmN0aW9uKCl7Zy5iZWZvcmVVcGRhdGU9CigpLHUuY2FsbCh3KX0sdy5jb250YWluZXI9 M0R0aGlzO2lmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZT0KdHVybiBl LnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBTPTNEdS5zZWxlY3RBbGwoIi5udi1ub0RhdGEi KS5kYXRhKFttXSk7PQpyZXR1cm4gUy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNz IiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi09Ci43ZW0iKS5zdHlsZSgidGV4dC1hbmNo b3IiLCJtaWRkbGUiKSxTLmF0dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLGkudG9wKz0KRS8y KS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksd311LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIp LnJlbW92ZSgpLGQ9M0R0PQoueFNjYWxlKCksdj0zRHQueVNjYWxlKCkuY2xhbXAoITApO3ZhciBU PTNEdS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1kaXNjcmU9CnRlQmFyV2l0aEF4ZXMiKS5kYXRh KFtlXSksTj0zRFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtdz0K cmFwIG52LWRpc2NyZXRlQmFyV2l0aEF4ZXMiKS5hcHBlbmQoImciKSxDPTNETi5hcHBlbmQoImRl ZnMiKSxrPTNEVC5zZWxlY3QoPQoiZyIpO04uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14 IG52LWF4aXMiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiw9CiJudi15IG52LWF4aXMiKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXplcm9MaW5lIikuYXBwZW5kKCJsaW5lIiksTi5h cD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxrLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiK2kubGVmPQp0KyIsIitpLnRvcCsiKSIpLGwmJmsuc2VsZWN0KCIubnYt eS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCI9Cit5KyIsMCkiKSx0Lndp ZHRoKHkpLmhlaWdodChFKTt2YXIgTD0zRGsuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShl LmZpbD0KdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpO0wuY2FsbCh0KSxDLmFw cGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpPQpkIiwibnYteC1sYWJlbC1jbGlwLSIrdC5pZCgpKS5h cHBlbmQoInJlY3QiKSxrLnNlbGVjdCgiI252LXgtbGFiZWwtY2xpcC0iK3Q9Ci5pZCgpKyIgcmVj dCIpLmF0dHIoIndpZHRoIixkLnJhbmdlQmFuZCgpKihjPzI6MSkpLmF0dHIoImhlaWdodCIsMTYp LmF0dHIoIj0KeCIsLWQucmFuZ2VCYW5kKCkvKGM/MToyKSk7aWYoYSl7bi5zY2FsZShkKS50aWNr cyh5LzEwMCkudGlja1NpemUoLUUsMCksay5zPQplbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKHYucmFuZ2UoKVswXSsodC5zaG89CndWYWx1ZXMo KSYmdi5kb21haW4oKVswXTwwPzE2OjApKSsiKSIpLGsuc2VsZWN0KCIubnYteC5udi1heGlzIiku Y2FsbChuKTt2YT0KciBBPTNEay5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImci KTtjJiZBLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoPQoidHJhbnNmb3JtIixmdW5jdGlvbihlLHQs bil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4lMj0zRD0zRDA/IjUiOiIxNyIpKyIpIn09Cil9ZiYm KHIuc2NhbGUodikudGlja3MoRS8zNikudGlja1NpemUoLXksMCksay5zZWxlY3QoIi5udi15Lm52 LWF4aXMiKS5jYWxsKD0KcikpLGsuc2VsZWN0KCIubnYtemVyb0xpbmUgbGluZSIpLmF0dHIoIngx IiwwKS5hdHRyKCJ4MiIseSkuYXR0cigieTEiLHYoMCkpPQouYXR0cigieTIiLHYoMCkpLGcub24o InRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtoJiZiKGUscC5wYXJlbnROb2RlKX0pfSksd309CnZh ciB0PTNEZS5tb2RlbHMuZGlzY3JldGVCYXIoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1v ZGVscy5heGlzKCksaT0zRD0Ke3RvcDoxNSxyaWdodDoxMCxib3R0b206NTAsbGVmdDo2MH0scz0z RG51bGwsbz0zRG51bGwsdT0zRGUudXRpbHMuZ2V0Q29sb3IoPQopLGE9M0QhMCxmPTNEITAsbD0z RCExLGM9M0QhMSxoPTNEITAscD0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK3Q9 CisiPC9oMz4iKyI8cD4iK24rIjwvcD4ifSxkLHYsbT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLGc9 M0RkMy5kaXNwYXRjaCgidG9vbD0KdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYmVmb3JlVXBkYXRl IikseT0zRDA7bi5vcmllbnQoImJvdHRvbSIpLmhpZ2hsaWdodFplPQpybyghMSkuc2hvd01heE1p bighMSkudGlja0Zvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHIub3JpZW50KGw/InJpZ2h0 Ijo9CiJsZWZ0IikudGlja0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSk7dmFyIGI9M0RmdW5jdGlv bihpLHMpe3ZhciBvPTNEaS5wb3NbMD0KXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0r KHMub2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoPQppLnBvaW50LGkucG9p bnRJbmRleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkp LGw9M0Q9CnAoaS5zZXJpZXMua2V5LGEsZixpLHcpO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52 YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX07cj0KZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swPQpdK2kubGVmdCxl LnBvc1sxXStpLnRvcF0sZy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRN b3VzZW91dC49CnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2cudG9vbHRpcEhpZGUoZSl9KSxnLm9uKCJ0 b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtoJiZlLj0KdG9vbHRpcC5jbGVhbnVwKCl9KSx3LmRpc3Bh dGNoPTNEZyx3LmRpc2NyZXRlYmFyPTNEdCx3LnhBeGlzPTNEbix3LnlBeGlzPTNEPQpyLGQzLnJl YmluZCh3LHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJm b3JjZVgiLCJmb3I9CmNlWSIsImlkIiwic2hvd1ZhbHVlcyIsInZhbHVlRm9ybWF0Iiksdy5vcHRp b25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKD0Kdyksdy5tYXJnaW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNEPQoidW5k ZWZpbmVkIj9lLnRvcDppLnRvcCxpLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5l ZCI/ZS5yaWdodDppLnI9CmlnaHQsaS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVm aW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PTNEdD0KeXBlb2YgZS5sZWZ0IT0zRCJ1bmRl ZmluZWQiP2UubGVmdDppLmxlZnQsdyk6aX0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVyPQpu IGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHcpOnN9LHcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8obz0zRGUsdyk6b30sdy5jb2xvcj0zRGZ1bmN0aW9uKG4p e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZS51dGlscz0KLmdldENvbG9yKG4pLHQuY29s b3IodSksdyk6dX0sdy5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl PQpuZ3RoPyhhPTNEZSx3KTphfSx3LnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhmPTNEZSw9CncpOmZ9LHcucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHIub3JpZT0KbnQoZT8icmlnaHQiOiJs ZWZ0Iiksdyk6bH0sdy5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sPQplbmd0aD8oYz0zRGUsdyk6Y30sdy50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhoPTNEZSw9CncpOmh9LHcudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsdyk6cH0sdz0KLm5vRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSx3KTptfSx3LnRyYW5zaXRp b25EdXJhPQp0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0Rl LHcpOnl9LHd9LGUubW9kZWxzLmRpc3RyaWI9CnV0aW9uPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBs KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9M0RuLShpPTNEPQo9M0Q9M0QieCI/ dC5sZWZ0K3QucmlnaHQ6dC50b3ArdC5ib3R0b20pLGw9M0RpPTNEPTNEIngiPyJ5IjoieCIsYz0z RGQzLnNlbGU9CmN0KHRoaXMpO2Y9M0RmfHx1O3ZhciBoPTNEYy5zZWxlY3RBbGwoImcubnYtZGlz dHJpYnV0aW9uIikuZGF0YShbZV0pLHA9M0RoLj0KZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52ZDMgbnYtZGlzdHJpYnV0aW9uIiksZD0zRHAuYXBwZW5kKCJnIiksPQp2PTNEaC5z ZWxlY3QoImciKTtoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50 b3ArIikiKTt2YXI9CiBtPTNEdi5zZWxlY3RBbGwoImcubnYtZGlzdCIpLmRhdGEoZnVuY3Rpb24o ZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybj0KIGUua2V5fSk7bS5lbnRlcigpLmFwcGVu ZCgiZyIpLG0uYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWRpc3QgPQpudi1z ZXJpZXMtIit0fSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQpfSk7 dmFyIGc9M0RtLnNlbGU9CmN0QWxsKCJsaW5lLm52LWRpc3QiK2kpLmRhdGEoZnVuY3Rpb24oZSl7 cmV0dXJuIGUudmFsdWVzfSk7Zy5lbnRlcigpLmFwcGVuZD0KKCJsaW5lIikuYXR0cihpKyIxIixm dW5jdGlvbihlLHQpe3JldHVybiBmKHMoZSx0KSl9KS5hdHRyKGkrIjIiLGZ1bmN0aW9uKGUsPQp0 KXtyZXR1cm4gZihzKGUsdCkpfSksbS5leGl0KCkuc2VsZWN0QWxsKCJsaW5lLm52LWRpc3QiK2kp LmF0dHIoaSsiMSIsZnVuY3Q9CmlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KS5hdHRyKGkrIjIi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLnN0eT0KbGUoInN0cm9rZS1vcGFjaXR5 IiwwKS5yZW1vdmUoKSxnLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0 PQoiK2krIiBudi1kaXN0IitpKyItIit0fSkuYXR0cihsKyIxIiwwKS5hdHRyKGwrIjIiLHIpLGcu YXR0cihpKyIxIixmdW5jdGlvbig9CmUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLmF0dHIoaSsiMiIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSksZj0zRHUuYz0Kb3B5KCl9KSxsfXZhciB0 PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNENDAwLHI9M0Q4LGk9M0QieCIs cz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGVbaV19LG89M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigp LHU9M0RkMy5zY2FsZS5saW5lYXIoPQopLGEsZjtyZXR1cm4gbC5vcHRpb25zPTNEZS51dGlscy5v cHRpb25zRnVuYy5iaW5kKGwpLGwubWFyZ2luPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50 b3AsdD0KLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJp Z2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuPQpib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206 dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmU9CmQiP2UubGVmdDp0 LmxlZnQsbCk6dH0sbC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhuPTNEZT0KLGwpOm59LGwuYXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhpPTNEZSxsKTppfSxsLnNpemU9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhyPTNEZSxsKTpyfSxsLmdldERhdGE9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1 bWVudHMubGVuZ3RoPyhzPTNEZDMuZnVuY3RvcihlKSxsKTpzfSxsLnNjYWxlPTNEZnVuY3Rpb24o ZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsbCk6dX0sbC5jb2xvcj0zRGZ1bmN0 aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KG89M0RlLnV0aWxzLmdldENvbG9yKHQp LGwpOm99LGx9LGUubW9kZWxzLmhpc3RvcmljYWxCYXJDaGFydD0zRGZ1bmN0aW9uKCk9CntmdW5j dGlvbiB4KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZCl7dmFyIEU9M0RkMy5zZWxlY3QodGhp cyksVD0zRHRoaXMsTj0KPTNEKHV8fHBhcnNlSW50KEUuc3R5bGUoIndpZHRoIikpfHw5NjApLXMu bGVmdC1zLnJpZ2h0LEM9M0QoYXx8cGFyc2VJbnQoRS5zPQp0eWxlKCJoZWlnaHQiKSl8fDQwMCkt cy50b3Atcy5ib3R0b207eC51cGRhdGU9M0RmdW5jdGlvbigpe0UuY2FsbCh4KX0seC5jb249CnRh aW5lcj0zRHRoaXMsZy5kaXNhYmxlZD0zRGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNh YmxlZH0pO2lmKCF5KXt2YT0KciBrO3k9M0R7fTtmb3IoayBpbiBnKWdba11pbnN0YW5jZW9mIEFy cmF5P3lba109M0RnW2tdLnNsaWNlKDApOnlba109M0RnW2tdPQp9aWYoIWR8fCFkLmxlbmd0aHx8 IWQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3Y9 CmFyIEw9M0RFLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW2JdKTtyZXR1cm4gTC5lbnRl cigpLmFwcGVuZCgidGV4dCIpLj0KYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIo ImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkPQpsZSIpLEwuYXR0cigieCIs cy5sZWZ0K04vMikuYXR0cigieSIscy50b3ArQy8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBl fSk9Cix4fUUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdj0zRHQueFNjYWxlKCks bT0zRHQueVNjYWxlKCk7dmFyIEE9Cj0zREUuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtaGlzdG9y aWNhbEJhckNoYXJ0IikuZGF0YShbZF0pLE89M0RBLmVudGVyKCkuYT0KcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1oaXN0b3JpY2FsQmFyQ2hhcnQiKS5hcHBlbmQoImci KSxNPQo9M0RBLnNlbGVjdCgiZyIpO08uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52 LWF4aXMiKSxPLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxPLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxPLmFwcD0KZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksZiYmKGkud2lkdGgoTiksTS5zZWxlY3QoIi5udi1s ZWdlbmRXPQpyYXAiKS5kYXR1bShkKS5jYWxsKGkpLHMudG9wIT0zRGkuaGVpZ2h0KCkmJihzLnRv cD0zRGkuaGVpZ2h0KCksQz0zRChhfHxwYXI9CnNlSW50KEUuc3R5bGUoImhlaWdodCIpKXx8NDAw KS1zLnRvcC1zLmJvdHRvbSksQS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYT0KdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtcy50b3ArIikiKSksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoPQoiK3MubGVmdCsiLCIrcy50b3ArIikiKSxoJiZNLnNlbGVjdCgiLm52LXkubnYt YXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW49CnNsYXRlKCIrTisiLDApIiksdC53aWR0aChO KS5oZWlnaHQoQykuY29sb3IoZC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jbz0KbG9yfHxv KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hZFt0XS5kaXNhYmxlZH0pKTt2YXIg Xz0zRE0uc2VsZWN0PQooIi5udi1iYXJzV3JhcCIpLmRhdHVtKGQuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiFlLmRpc2FibGVkfSkpO18uY2FsbCh0KSw9CmwmJihuLnNjYWxlKHYpLnRpY2tTaXpl KC1DLDApLE0uc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidD0KcmFu c2xhdGUoMCwiK20ucmFuZ2UoKVswXSsiKSIpLE0uc2VsZWN0KCIubnYteC5udi1heGlzIikuY2Fs bChuKSksYyYmKHIuc2NhPQpsZShtKS50aWNrcyhDLzM2KS50aWNrU2l6ZSgtTiwwKSxNLnNlbGVj dCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLGkuZGlzcGE9CnRjaC5vbigibGVnZW5kQ2xpY2si LGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0zRCF0LmRpc2FibGVkLGQuZmlsdGVyKGZ1bmN0aT0K b24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KS5sZW5ndGh8fGQubWFwKGZ1bmN0aW9uKGUpe3JldHVy biBlLmRpc2FibGVkPTNEITEsPQpBLnNlbGVjdEFsbCgiLm52LXNlcmllcyIpLmNsYXNzZWQoImRp c2FibGVkIiwhMSksZX0pLGcuZGlzYWJsZWQ9M0RkLm1hcChmdW49CmN0aW9uKGUpe3JldHVybiEh ZS5kaXNhYmxlZH0pLHcuc3RhdGVDaGFuZ2UoZyksZS5jYWxsKHgpfSksaS5kaXNwYXRjaC5vbigi bD0KZWdlbmREYmxjbGljayIsZnVuY3Rpb24oZSl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlz YWJsZWQ9M0QhMH0pLGUuZGlzYWJsPQplZD0zRCExLGcuZGlzYWJsZWQ9M0RkLm1hcChmdW5jdGlv bihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KSx3LnN0YXRlQ2hhbmdlKGc9CikseC51cGRhdGUoKX0p LHcub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtwJiZTKGUsVC5wYXJlbnROb2RlKX0pLHcu b24oIj0KY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKGUpe3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1bmRl ZmluZWQiJiYoZC5mb3JFYWNoKGZ1bmN0PQppb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxl ZFtuXX0pLGcuZGlzYWJsZWQ9M0RlLmRpc2FibGVkKSx4LnVwZGF0ZSgpfSk9Cn0pLHh9dmFyIHQ9 M0RlLm1vZGVscy5oaXN0b3JpY2FsQmFyKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2Rl bHMuYXhpcz0KKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0R7dG9wOjMwLHJpZ2h0OjkwLGJv dHRvbTo1MCxsZWZ0OjkwfSxvPTNEZS51dGlsPQpzLmRlZmF1bHRDb2xvcigpLHU9M0RudWxsLGE9 M0RudWxsLGY9M0QhMSxsPTNEITAsYz0zRCEwLGg9M0QhMSxwPTNEITAsZD0zRGY9CnVuY3Rpb24o ZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4i fSx2LG0sZz0zRD0Ke30seT0zRG51bGwsYj0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLHc9M0RkMy5k aXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwPQpIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFu Z2VTdGF0ZSIpLEU9M0QwO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSw9CnIub3Jp ZW50KGg/InJpZ2h0IjoibGVmdCIpO3ZhciBTPTNEZnVuY3Rpb24oaSxzKXtpZihzKXt2YXIgbz0z RGQzLnNlbGVjdChzKT0KLnNlbGVjdCgic3ZnIiksdT0zRG8ubm9kZSgpP28uYXR0cigidmlld0Jv eCIpOm51bGw7aWYodSl7dT0zRHUuc3BsaXQoIiAiKTt2PQphciBhPTNEcGFyc2VJbnQoby5zdHls ZSgid2lkdGgiKSkvdVsyXTtpLnBvc1swXT0zRGkucG9zWzBdKmEsaS5wb3NbMV09M0RpLnA9Cm9z WzFdKmF9fXZhciBmPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksbD0zRGkucG9zWzFdKyhz Lm9mZnNldFRvcHx8MCksYz0KPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50 SW5kZXgpKSxoPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wPQpvaW50LGkucG9pbnRJbmRleCkp LHA9M0RkKGkuc2VyaWVzLmtleSxjLGgsaSx4KTtlLnRvb2x0aXAuc2hvdyhbZixsXSxwLG51bGw9 CixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlw IixmdW5jdGlvbihlKXtlLnBvcz0KPTNEW2UucG9zWzBdK3MubGVmdCxlLnBvc1sxXStzLnRvcF0s dy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lPQpudE1vdXNlb3V0LnRvb2x0 aXAiLGZ1bmN0aW9uKGUpe3cudG9vbHRpcEhpZGUoZSl9KSx3Lm9uKCJ0b29sdGlwSGlkZSIsZnVu Y3Q9Cmlvbigpe3AmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSx4LmRpc3BhdGNoPTNEdyx4LmJhcnM9 M0R0LHgubGVnZW5kPTNEaSx4LnhBeD0KaXM9M0RuLHgueUF4aXM9M0RyLGQzLnJlYmluZCh4LHQs ImRlZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIsInNpemUiLCJ4U2NhbGUiPQosInlTY2FsZSIsInhE b21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaW50 ZXJhY3Q9Cml2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiwi aGlnaGxpZ2h0UG9pbnQiLCJjbGVhckhpZz0KaGxpZ2h0cyIsImludGVyYWN0aXZlIikseC5vcHRp b25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHgpLHgubWFyZ2luPTNEPQpmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocy50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVm aW5lZCI/ZS49CnRvcDpzLnRvcCxzLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5l ZCI/ZS5yaWdodDpzLnJpZ2h0LHMuYm90dG9tPQo9M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVm aW5lZCI/ZS5ib3R0b206cy5ib3R0b20scy5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9Cj0zRCJ1bmRl ZmluZWQiP2UubGVmdDpzLmxlZnQseCk6c30seC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubD0KZW5ndGg/KHU9M0RlLHgpOnV9LHguaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHgpPQo6YX0seC5jb2xvcj0zRGZ1bmN0aW9uKHQp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZS51dGlscy5nZXRDb2xvcih0KSw9CmkuY29s b3IobykseCk6b30seC5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGY9M0RlLD0KeCk6Zn0seC5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obD0zRGUseCk6bH0seC5zaG93PQpZQXhpcz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx4KTpjfSx4LnJpZ2h0QWxpZ25ZQXhpcz0KPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHIub3JpZW50KGU/InJp Z2h0IjoibGVmdCIpLHgpPQo6aH0seC50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhwPTNEZSx4KTpwfSx4LnRvb2x0aXA9CkNvbnRlbnQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUseCk6ZH0seC5zdGF0ZT0zRGZ1bmN0aT0K b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLHgpOmd9LHguZGVmYXVsdFN0YXRl PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUseCk6eX0seC5u b0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyhiPTNEZSx4KTpi fSx4LnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Zz0KdGg/KEU9M0RlLHgpOkV9LHh9LGUubW9kZWxzLmluZGVudGVkVHJlZT0zRGZ1bmN0aW9uKCl7 ZnVuY3Rpb24gZyhlKXtyZXR1cm4gPQplLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gayhlLHQs bil7ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoZDMuZXZlbnQ9Ci5zaGlmdEtleSYmIW4p cmV0dXJuIGQzLmV2ZW50LnNoaWZ0S2V5PTNEITEsZS52YWx1ZXMmJmUudmFsdWVzLmZvckVhY2go ZnVuYz0KdGlvbihlKXsoZS52YWx1ZXN8fGUuX3ZhbHVlcykmJmsoZSwwLCEwKX0pLCEwO2lmKCFP KGUpKXJldHVybiEwO2UudmFsdWVzPyhlPQouX3ZhbHVlcz0zRGUudmFsdWVzLGUudmFsdWVzPTNE bnVsbCk6KGUudmFsdWVzPTNEZS5fdmFsdWVzLGUuX3ZhbHVlcz0zRG51bGw9CiksZy51cGRhdGUo KX1mdW5jdGlvbiBMKGUpe3JldHVybiBlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGg/aDplLnZh bHVlcyYmZT0KLnZhbHVlcy5sZW5ndGg/cDoiIn1mdW5jdGlvbiBBKGUpe3JldHVybiBlLl92YWx1 ZXMmJmUuX3ZhbHVlcy5sZW5ndGh9ZnVuY3RpPQpvbiBPKGUpe3ZhciB0PTNEZS52YWx1ZXN8fGUu X3ZhbHVlcztyZXR1cm4gdCYmdC5sZW5ndGh9dmFyIHQ9M0QxLG49M0RkMy5zZWw9CmVjdCh0aGlz KSxpPTNEZDMubGF5b3V0LnRyZWUoKS5jaGlsZHJlbihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1 ZXN9KS5zaXplKD0KW3IsZl0pO2cudXBkYXRlPTNEZnVuY3Rpb24oKXtuLmNhbGwoZyl9LGVbMF18 fChlWzBdPTNEe2tleTphfSk7dmFyIHM9M0RpLm5vPQpkZXMoZVswXSkseT0zRGQzLnNlbGVjdCh0 aGlzKS5zZWxlY3RBbGwoImRpdiIpLmRhdGEoW1tzXV0pLGI9M0R5LmVudGVyKCkuYXA9CnBlbmQo ImRpdiIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWluZGVudGVkdHJlZSIpLHc9M0Ri LmFwcGVuZCgidGFibD0KZSIpLEU9M0R5LnNlbGVjdCgidGFibGUiKS5hdHRyKCJ3aWR0aCIsIjEw MCUiKS5hdHRyKCJjbGFzcyIsYyk7aWYobyl7dmFyIFM9Cj0zRHcuYXBwZW5kKCJ0aGVhZCIpLHg9 M0RTLmFwcGVuZCgidHIiKTtsLmZvckVhY2goZnVuY3Rpb24oZSl7eC5hcHBlbmQoInRoIj0KKS5h dHRyKCJ3aWR0aCIsZS53aWR0aD9lLndpZHRoOiIxMCUiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50 eXBlPTNEPTNEIm51bWVyPQppYyI/InJpZ2h0IjoibGVmdCIpLmFwcGVuZCgic3BhbiIpLnRleHQo ZS5sYWJlbCl9KX12YXIgVD0zREUuc2VsZWN0QWxsKCJ0Ym89CmR5IikuZGF0YShmdW5jdGlvbihl KXtyZXR1cm4gZX0pO1QuZW50ZXIoKS5hcHBlbmQoInRib2R5IiksdD0zRGQzLm1heChzLGZ1bj0K Y3Rpb24oZSl7cmV0dXJuIGUuZGVwdGh9KSxpLnNpemUoW3IsdCpmXSk7dmFyIE49M0RULnNlbGVj dEFsbCgidHIiKS5kYXRhKGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiB1JiYhZS5jaGlsZHJlbj91KGUpOiEwfSl9LGZ1bmM9CnRpb24oZSx0KXtyZXR1cm4g ZS5pZHx8ZS5pZHx8KyttfSk7Ti5leGl0KCkucmVtb3ZlKCksTi5zZWxlY3QoImltZy5udi10cmVl aT0KY29uIikuYXR0cigic3JjIixMKS5jbGFzc2VkKCJmb2xkZWQiLEEpO3ZhciBDPTNETi5lbnRl cigpLmFwcGVuZCgidHIiKTtsLmZvPQpyRWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEQy5hcHBl bmQoInRkIikuc3R5bGUoInBhZGRpbmctbGVmdCIsZnVuY3Rpb24oZSk9CntyZXR1cm4odD8wOmUu ZGVwdGgqZisxMisoTChlKT8wOjE2KSkrInB4In0sImltcG9ydGFudCIpLnN0eWxlKCJ0ZXh0LWFs aWduIj0KLGUudHlwZT0zRD0zRCJudW1lcmljIj8icmlnaHQiOiJsZWZ0Iik7dD0zRD0zRDAmJm4u YXBwZW5kKCJpbWciKS5jbGFzc2VkKCJuPQp2LXRyZWVpY29uIiwhMCkuY2xhc3NlZCgibnYtZm9s ZGVkIixBKS5hdHRyKCJzcmMiLEwpLnN0eWxlKCJ3aWR0aCIsIjE0cHgiKS49CnN0eWxlKCJoZWln aHQiLCIxNHB4Iikuc3R5bGUoInBhZGRpbmciLCIwIDFweCIpLnN0eWxlKCJkaXNwbGF5IixmdW5j dGlvbihlKT0Ke3JldHVybiBMKGUpPyJpbmxpbmUtYmxvY2siOiJub25lIn0pLm9uKCJjbGljayIs ayksbi5lYWNoKGZ1bmN0aW9uKG4peyF0JiZ2PQoobik/ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgi YSIpLmF0dHIoImhyZWYiLHYpLmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2w9CmFzc2VzKSku YXBwZW5kKCJzcGFuIik6ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgic3BhbiIpLGQzLnNlbGVjdCh0 aGlzKS5zZWxlYz0KdCgic3BhbiIpLmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2xhc3Nlcykp LnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIGUuZm9yPQptYXQ/dFtlLmtleV0/ZS5mb3JtYXQodFtl LmtleV0pOiItIjp0W2Uua2V5XXx8Ii0ifSl9KSxlLnNob3dDb3VudCYmKG4uYXBwZW49CmQoInNw YW4iKS5hdHRyKCJjbGFzcyIsIm52LWNoaWxkcmVuQ291bnQiKSxOLnNlbGVjdEFsbCgic3Bhbi5u di1jaGlsZHJlbkNvdT0KbnQiKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcyYmZS52 YWx1ZXMubGVuZ3RofHxlLl92YWx1ZXMmJmUuX3ZhbHVlPQpzLmxlbmd0aD8iKCIrKGUudmFsdWVz JiZlLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHU/dShlKTohMH0pLmxlbmc9CnRo fHxlLl92YWx1ZXMmJmUuX3ZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHU/dShlKToh MH0pLmxlbmd0aHx8MCkrIj0KKSI6IiJ9KSl9KSxOLm9yZGVyKCkub24oImNsaWNrIixmdW5jdGlv bihlKXtkLmVsZW1lbnRDbGljayh7cm93OnRoaXMsZGF0YTplPQoscG9zOltlLngsZS55XX0pfSku b24oImRibGNsaWNrIixmdW5jdGlvbihlKXtkLmVsZW1lbnREYmxjbGljayh7cm93OnRoaXMsZGE9 CnRhOmUscG9zOltlLngsZS55XX0pfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7ZC5lbGVt ZW50TW91c2VvdmVyKHtyb3c6dD0KaGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigibW91 c2VvdXQiLGZ1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3V0KHtyPQpvdzp0aGlzLGRhdGE6ZSxw b3M6W2UueCxlLnldfSl9KX0pLGd9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0 OjA9Cn0sbj0zRDk2MCxyPTNENTAwLGk9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9M0RNYXRo LmZsb29yKE1hdGgucmFuZG9tKCkqMT0KZTQpLG89M0QhMCx1PTNEITEsYT0zRCJObyBEYXRhIEF2 YWlsYWJsZS4iLGY9M0QyMCxsPTNEW3trZXk6ImtleSIsbGFiZWw6Ik5hPQptZSIsdHlwZToidGV4 dCJ9XSxjPTNEbnVsbCxoPTNEImltYWdlcy9ncmV5LXBsdXMucG5nIixwPTNEImltYWdlcy9ncmV5 LW1pbnU9CnMucG5nIixkPTNEZDMuZGlzcGF0Y2goImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxj bGljayIsImVsZW1lbnRNb3VzZW92ZXIiLD0KImVsZW1lbnRNb3VzZW91dCIpLHY9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS51cmx9LG09M0QwO3JldHVybiBnLm9wdGlvbnM9M0RlPQoudXRpbHMub3B0 aW9uc0Z1bmMuYmluZChnKSxnLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyg9CnQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9w LHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9Cj0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdo dCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLj0KYm90dG9tOnQu Ym90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVm dCxnKTp0fSxnPQoud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bj0zRGUsZyk6bn0sZy5oZWlnaHQ9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhyPTNEZSxnKTpyfSxnLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZz0KdW1lbnRz Lmxlbmd0aD8oaT0zRGUudXRpbHMuZ2V0Q29sb3IodCksc2NhdHRlci5jb2xvcihpKSxnKTppfSxn LmlkPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsZyk6c30s Zy5oZWFkZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhvPTNEZSxn KTpvfSxnLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGE9 M0RlLGcpOmF9LGcuZmlsdGVyWmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh1PTNEZSxnKTp1PQp9LGcuY29sdW1ucz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhsPTNEZSxnKTpsfSxnLnRhYmxlQ2xhc3M9Cj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxnKTpjfSxnLmljb25PcGVuPTNEZnVuY3Rpb24oZT0K KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsZyk6aH0sZy5pY29uQ2xvc2U9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhwPTNEZSxnKTpwfSxnLmdldFVybD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9CnY9M0RlLGcpOnZ9LGd9LGUu bW9kZWxzLmxlZ2VuZD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5lYWNoKGZ1 bj0KY3Rpb24oYyl7dmFyIGg9M0RuLXQubGVmdC10LnJpZ2h0LHA9M0RkMy5zZWxlY3QodGhpcyks ZD0zRHAuc2VsZWN0QWxsKCJnLm52PQotbGVnZW5kIikuZGF0YShbY10pLHY9M0RkLmVudGVyKCku YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LWxlZ2VuZCI9CikuYXBwZW5kKCJnIiks bT0zRGQuc2VsZWN0KCJnIik7ZC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQr IiwiKz0KdC50b3ArIikiKTt2YXIgZz0zRG0uc2VsZWN0QWxsKCIubnYtc2VyaWVzIikuZGF0YShm dW5jdGlvbihlKXtyZXR1cm4gZX0pLHk9Cj0zRGcuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXNlcmllcyIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKD0KZSx0KXtsLmxlZ2Vu ZE1vdXNlb3ZlcihlLHQpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2wubGVnZW5kTW91 c2VvdXQoPQplLHQpfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe2wubGVnZW5kQ2xpY2soZSx0 KSxhJiYoZj8oYy5mb3JFYWNoKGZ1bmN0aW89Cm4oZSl7ZS5kaXNhYmxlZD0zRCEwfSksZS5kaXNh YmxlZD0zRCExKTooZS5kaXNhYmxlZD0zRCFlLmRpc2FibGVkLGMuZXZlcnkoZj0KdW5jdGlvbihl KXtyZXR1cm4gZS5kaXNhYmxlZH0pJiZjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0z RCExfSkpLGwuPQpzdGF0ZUNoYW5nZSh7ZGlzYWJsZWQ6Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu ISFlLmRpc2FibGVkfSl9KSl9KS5vbigiZGJsY2w9CmljayIsZnVuY3Rpb24oZSx0KXtsLmxlZ2Vu ZERibGNsaWNrKGUsdCksYSYmKGMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibD0KZWQ9M0Qh MH0pLGUuZGlzYWJsZWQ9M0QhMSxsLnN0YXRlQ2hhbmdlKHtkaXNhYmxlZDpjLm1hcChmdW5jdGlv bihlKXtyZXR1cm4hPQohZS5kaXNhYmxlZH0pfSkpfSk7eS5hcHBlbmQoImNpcmNsZSIpLnN0eWxl KCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImNsYXNzIiw9CiJudi1sZWdlbmQtc3ltYm9sIikuYXR0 cigiciIsNSkseS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Ij0KKS5h dHRyKCJjbGFzcyIsIm52LWxlZ2VuZC10ZXh0IikuYXR0cigiZHkiLCIuMzJlbSIpLmF0dHIoImR4 IiwiOCIpLGcuY2xhc3NlPQpkKCJkaXNhYmxlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJs ZWR9KSxnLmV4aXQoKS5yZW1vdmUoKSxnLnNlbGVjdCgiY2k9CnJjbGUiKS5zdHlsZSgiZmlsbCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8cyhlLHQpfSkuc3R5bGUoInN0cm9rZSIsZj0K dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxzKGUsdCl9KSxnLnNlbGVjdCgidGV4dCIpLnRl eHQoaSk7aWYobyl7dmFyIGI9Cj0zRFtdO2cuZWFjaChmdW5jdGlvbih0LG4pe3ZhciByPTNEZDMu c2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLGk7dHJ5e2k9Cj0zRHIuZ2V0Q29tcHV0ZWRUZXh0 TGVuZ3RoKCk7aWYoaTw9M0QwKXRocm93IEVycm9yKCl9Y2F0Y2gocyl7aT0zRGUudXRpbHMuYz0K YWxjQXBwcm94VGV4dFdpZHRoKHIpfWIucHVzaChpKzI4KX0pO3ZhciB3PTNEMCxFPTNEMCxTPTNE W107d2hpbGUoRTxoJiZ3PGIuPQpsZW5ndGgpU1t3XT0zRGJbd10sRSs9M0RiW3crK107dz0zRD0z RD0zRDAmJih3PTNEMSk7d2hpbGUoRT5oJiZ3PjEpe1M9M0RbXSw9CnctLTtmb3IodmFyIHg9M0Qw O3g8Yi5sZW5ndGg7eCsrKWJbeF0+KFNbeCV3XXx8MCkmJihTW3gld109M0RiW3hdKTtFPTNEUy5y ZT0KZHVjZShmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZSt0fSl9dmFyIFQ9M0RbXTtmb3IodmFy IE49M0QwLEM9M0QwO048dztOKyspPQpUW05dPTNEQyxDKz0zRFNbTl07Zy5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK1RbdCU9CnddKyIsIisoNStNYXRo LmZsb29yKHQvdykqMjApKyIpIn0pLHU/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIiso bi10Lj0KcmlnaHQtRSkrIiwiK3QudG9wKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiK3QudG9wKyIpIikscj0zRHQuPQp0b3ArdC5ib3R0b20rTWF0aC5jZWlsKGIubGVuZ3Ro L3cpKjIwfWVsc2V7dmFyIGs9M0Q1LEw9M0Q1LEE9M0QwLE87Zy5hdHRyKCI9CnRyYW5zZm9ybSIs ZnVuY3Rpb24oZSxyKXt2YXIgaT0zRGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5ub2Rl KCkuZ2V0Qz0Kb21wdXRlZFRleHRMZW5ndGgoKSsyODtyZXR1cm4gTz0zREwsbjx0LmxlZnQrdC5y aWdodCtPK2kmJihMPTNETz0zRDUsays9M0QyPQowKSxMKz0zRGksTD5BJiYoQT0zREwpLCJ0cmFu c2xhdGUoIitPKyIsIitrKyIpIn0pLG0uYXR0cigidHJhbnNmb3JtIiwidHJhbnM9CmxhdGUoIiso bi10LnJpZ2h0LUEpKyIsIit0LnRvcCsiKSIpLHI9M0R0LnRvcCt0LmJvdHRvbStrKzE1fX0pLGN9 dmFyIHQ9M0R7dD0Kb3A6NSxyaWdodDowLGJvdHRvbTo1LGxlZnQ6MH0sbj0zRDQwMCxyPTNEMjAs aT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0sPQpzPTNEZS51dGlscy5kZWZhdWx0Q29sb3Io KSxvPTNEITAsdT0zRCEwLGE9M0QhMCxmPTNEITEsbD0zRGQzLmRpc3BhdGNoKCJsZWc9CmVuZENs aWNrIiwibGVnZW5kRGJsY2xpY2siLCJsZWdlbmRNb3VzZW92ZXIiLCJsZWdlbmRNb3VzZW91dCIs InN0YXRlQ2hhbmdlIj0KKTtyZXR1cm4gYy5kaXNwYXRjaD0zRGwsYy5vcHRpb25zPTNEZS51dGls cy5vcHRpb25zRnVuYy5iaW5kKGMpLGMubWFyZ2luPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS49CnRv cDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0 LnJpZ2h0LHQuYm90dG9tPQo9M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0 b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9Cj0zRCJ1bmRlZmluZWQiP2UubGVm dDp0LmxlZnQsYyk6dH0sYy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0K ZW5ndGg/KG49M0RlLGMpOm59LGMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHI9M0RlLGMpPQo6cn0sYy5rZXk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaT0zRGUsYyk6aX0sYy5jb2xvcj0zRGZ1bmM9CnRpb24odCl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHM9M0RlLnV0aWxzLmdldENvbG9yKHQpLGMpOnN9LGMuYWxpZ249M0Rm dT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxjKTpvfSxjLnJpZ2h0 QWxpZ249M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxjKTp1 fSxjLnVwZGF0ZVN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8o YT0zRGUsYyk6YX0sYy5yYWRpb0J1dHRvbk1vZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLj0KbGVuZ3RoPyhmPTNEZSxjKTpmfSxjfSxlLm1vZGVscy5saW5lPTNEZnVuY3Rpb24oKXtm dW5jdGlvbiBtKGcpe3JldHVybiBnLmVhPQpjaChmdW5jdGlvbihtKXt2YXIgZz0zRHItbi5sZWZ0 LW4ucmlnaHQsYj0zRGktbi50b3Atbi5ib3R0b20sdz0zRGQzLnNlbGVjdCg9CnRoaXMpO2M9M0R0 LnhTY2FsZSgpLGg9M0R0LnlTY2FsZSgpLGQ9M0RkfHxjLHY9M0R2fHxoO3ZhciBFPTNEdy5zZWxl Y3RBbGwoIj0KZy5udi13cmFwLm52LWxpbmUiKS5kYXRhKFttXSksUz0zREUuZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgPQpudi13cmFwIG52LWxpbmUiKSxUPTNEUy5hcHBl bmQoImRlZnMiKSxOPTNEUy5hcHBlbmQoImciKSxDPTNERS5zZWxlY3QoImciKTs9Ck4uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYtc2NhdD0KdGVyV3JhcCIpLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5s ZWZ0KyIsIituLnRvcCsiKSIpLHQud2lkdGgoZykuPQpoZWlnaHQoYik7dmFyIGs9M0RFLnNlbGVj dCgiLm52LXNjYXR0ZXJXcmFwIik7ay5jYWxsKHQpLFQuYXBwZW5kKCJjbGlwUGF0aCI9CikuYXR0 cigiaWQiLCJudi1lZGdlLWNsaXAtIit0LmlkKCkpLmFwcGVuZCgicmVjdCIpLEUuc2VsZWN0KCIj bnYtZWRnZS1jbGlwLT0KIit0LmlkKCkrIiByZWN0IikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhl aWdodCIsYj4wP2I6MCksQy5hdHRyKCJjbGlwLXBhdGgiPQosbD8idXJsKCNudi1lZGdlLWNsaXAt Iit0LmlkKCkrIikiOiIiKSxrLmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWM9Cmxp cC0iK3QuaWQoKSsiKSI6IiIpO3ZhciBMPTNERS5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RB bGwoIi5udi1ncm91cCIpLj0KZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7 cmV0dXJuIGUua2V5fSk7TC5lbnRlcigpLmFwcGVuZCgiZyIpPQouc3R5bGUoInN0cm9rZS1vcGFj aXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KSxMLmV4aXQoKS5yZW1vdmUoKSw9 CkwuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcmllcy0i K3R9KS5jbGFzc2VkKCJob3Zlcj0KIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxl KCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9KS5zPQp0eWxlKCJzdHJva2UiLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0KX0pLEwuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxKS5z dHk9CmxlKCJmaWxsLW9wYWNpdHkiLC41KTt2YXIgQT0zREwuc2VsZWN0QWxsKCJwYXRoLm52LWFy ZWEiKS5kYXRhKGZ1bmN0aW9uKGUpez0KcmV0dXJuIGYoZSk/W2VdOltdfSk7QS5lbnRlcigpLmFw cGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibnYtYXJlYSIpLmF0dHIoPQoiZCIsZnVuY3Rpb24o dCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0 aW9uKHQ9CixuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oZChvKHQsbikpKX0pLnkwKGZ1bmN0 aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTj0KYU50b1plcm8odih1KHQsbikpKX0pLnkxKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIHYoaC5kb21haW4oKVswXTw9M0QwP2guZG9tYWluPQooKVsxXT49M0Qw PzA6aC5kb21haW4oKVsxXTpoLmRvbWFpbigpWzBdKX0pLmFwcGx5KHRoaXMsW3QudmFsdWVzXSl9 KSxMLmV4aXQ9CigpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikucmVtb3ZlKCksQS5hdHRyKCJk IixmdW5jdGlvbih0KXtyZXR1cm4gZDMuc3ZnLj0KYXJlYSgpLmludGVycG9sYXRlKHApLmRlZmlu ZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhjPQoobyh0LG4p KSl9KS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhoKHUodCxuKSkp fSkueTEoZnVuY3Q9CmlvbihlLHQpe3JldHVybiBoKGguZG9tYWluKClbMF08PTNEMD9oLmRvbWFp bigpWzFdPj0zRDA/MDpoLmRvbWFpbigpWzFdOmguZD0Kb21haW4oKVswXSl9KS5hcHBseSh0aGlz LFt0LnZhbHVlc10pfSk7dmFyIE89M0RMLnNlbGVjdEFsbCgicGF0aC5udi1saW5lIikuPQpkYXRh KGZ1bmN0aW9uKGUpe3JldHVybltlLnZhbHVlc119KTtPLmVudGVyKCkuYXBwZW5kKCJwYXRoIiku YXR0cigiY2xhc3MiLCI9Cm52LWxpbmUiKS5hdHRyKCJkIixkMy5zdmcubGluZSgpLmludGVycG9s YXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pez0KcmV0dXJuIGUudXRpbHMuTmFOdG9a ZXJvKGQobyh0LG4pKSl9KS55KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aPQpl cm8odih1KHQsbikpKX0pKSxPLmF0dHIoImQiLGQzLnN2Zy5saW5lKCkuaW50ZXJwb2xhdGUocCku ZGVmaW5lZChhKS54KGZ1bmM9CnRpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oYyhv KHQsbikpKX0pLnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dD0KaWxzLk5hTnRvWmVybyhoKHUo dCxuKSkpfSkpLGQ9M0RjLmNvcHkoKSx2PTNEaC5jb3B5KCl9KSxtfXZhciB0PTNEZS5tb2RlbHMu PQpzY2F0dGVyKCksbj0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0scj0zRDk2MCxp PTNENTAwLHM9M0RlLnV0aWxzLmQ9CmVmYXVsdENvbG9yKCksbz0zRGZ1bmN0aW9uKGUpe3JldHVy biBlLnh9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxhPTNEZj0KdW5jdGlvbihlLHQpe3Jl dHVybiFpc05hTih1KGUsdCkpJiZ1KGUsdCkhPTNEPTNEbnVsbH0sZj0zRGZ1bmN0aW9uKGUpe3Jl dHVyPQpuIGUuYXJlYX0sbD0zRCExLGMsaCxwPTNEImxpbmVhciI7dC5zaXplKDE2KS5zaXplRG9t YWluKFsxNiwyNTZdKTt2YXIgZCx2O3I9CmV0dXJuIG0uZGlzcGF0Y2g9M0R0LmRpc3BhdGNoLG0u c2NhdHRlcj0zRHQsZDMucmViaW5kKG0sdCwiaWQiLCJpbnRlcmFjdGl2ZT0KIiwic2l6ZSIsInhT Y2FsZSIsInlTY2FsZSIsInpTY2FsZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJh bmdlIiwiPQpzaXplRG9tYWluIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xpcFZv cm9ub2kiLCJ1c2VWb3Jvbm9pIiwiY2xpcFI9CmFkaXVzIiwicGFkRGF0YSIsImhpZ2hsaWdodFBv aW50IiwiY2xlYXJIaWdobGlnaHRzIiksbS5vcHRpb25zPTNEZS51dGlscy5vcD0KdGlvbnNGdW5j LmJpbmQobSksbS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bi50b3A9M0R0PQp5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0 PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW49CmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0 b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206bi5ibz0KdHRvbSxu LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsbSk6bn0s bS53aWR0aD0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLG0p OnJ9LG0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0z RGUsbSk6aX0sbS54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kbz0z RGUsdC54KGUpLG0pOm99LG0ueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh1PTNEZSx0LnkoZSksPQptKTp1fSxtLmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0uY29sb3I9Cj0zRGZ1bmN0aW9uKG4pe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZS51dGlscy5nZXRDb2xvcihuKSx0LmNvbG9yKHMpLD0K bSk6c30sbS5pbnRlcnBvbGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhwPTNEZSxtKTpwfSxtLmRlPQpmaW5lZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhhPTNEZSxtKTphfSxtLmlzQXJlYT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGY9M0RkMy5mdW5jdG9yKGUpLG0pOmZ9LG19LGUubW9kZWxzLmxpbmVDaGFy dD0KPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBOKG0pe3JldHVybiBtLmVhY2goZnVuY3Rpb24obSl7 dmFyIHg9M0RkMy5zZWxlY3QodGhpPQpzKSxDPTNEdGhpcyxrPTNEKGF8fHBhcnNlSW50KHguc3R5 bGUoIndpZHRoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LEw9M0QoZnw9CnxwYXJzZUludCh4LnN0 eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5ib3R0b207Ti51cGRhdGU9M0RmdW5jdGlvbigp e3guYz0KYWxsKE4pfSxOLmNvbnRhaW5lcj0zRHRoaXMsYi5kaXNhYmxlZD0zRG0ubWFwKGZ1bmN0 aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlPQpkfSk7aWYoIXcpe3ZhciBBO3c9M0R7fTtmb3IoQSBp biBiKWJbQV1pbnN0YW5jZW9mIEFycmF5P3dbQV09M0RiW0FdLnNsaWNlKDA9Cik6d1tBXT0zRGJb QV19aWYoIW18fCFtLmxlbmd0aHx8IW0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVl cy5sZW5ndD0KaH0pLmxlbmd0aCl7dmFyIE89M0R4LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRh dGEoW0VdKTtyZXR1cm4gTy5lbnRlcigpLmFwPQpwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJu dmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC09CmFuY2hvciIs Im1pZGRsZSIpLE8uYXR0cigieCIsby5sZWZ0K2svMikuYXR0cigieSIsby50b3ArTC8yKS50ZXh0 KGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGV9KSxOfXguc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVt b3ZlKCksZz0zRHQueFNjYWxlKCkseT0zRHQueVNjPQphbGUoKTt2YXIgTT0zRHguc2VsZWN0QWxs KCJnLm52LXdyYXAubnYtbGluZUNoYXJ0IikuZGF0YShbbV0pLF89M0RNLmVudGVyKCk9Ci5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW5lQ2hhcnQiKS5hcHBlbmQo ImciKSxEPTNETS5zZT0KbGVjdCgiZyIpO18uYXBwZW5kKCJyZWN0Iikuc3R5bGUoIm9wYWNpdHki LDApLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJuPQp2LXggbnYtYXhpcyIpLF8uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxfLmFwcGVuZCgiZyIpLmF0dHI9Cigi Y2xhc3MiLCJudi1saW5lc1dyYXAiKSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVn ZW5kV3JhcCIpLF8uYXBwZT0KbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWludGVyYWN0aXZlIiks RC5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsaykuYXR0PQpyKCJoZWlnaHQiLEw+MD9MOjAp LGwmJihpLndpZHRoKGspLEQuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKG0pLmNhbGw9 CihpKSxvLnRvcCE9M0RpLmhlaWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLEw9M0QoZnx8cGFy c2VJbnQoeC5zdHlsZSgiaGVpZz0KaHQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLE0uc2VsZWN0 KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNsYXRlKDAsIisgLW8u dG9wKyIpIikpLE0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRv cCs9CiIpIikscCYmRC5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIitrKyIsMCkiKSxkJj0KJihzLndpZHRoKGspLmhlaWdodChMKS5tYXJnaW4oe2xl ZnQ6by5sZWZ0LHRvcDpvLnRvcH0pLnN2Z0NvbnRhaW5lcih4KS54U2NhPQpsZShnKSxNLnNlbGVj dCgiLm52LWludGVyYWN0aXZlIikuY2FsbChzKSksdC53aWR0aChrKS5oZWlnaHQoTCkuY29sb3Io bS5tYXA9CihmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx1KGUsdCl9KS5maWx0ZXIoZnVu Y3Rpb24oZSx0KXtyZXR1cm4hbVt0XS5kaT0Kc2FibGVkfSkpO3ZhciBQPTNERC5zZWxlY3QoIi5u di1saW5lc1dyYXAiKS5kYXR1bShtLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1PQpybiFlLmRpc2Fi bGVkfSkpO1AuY2FsbCh0KSxjJiYobi5zY2FsZShnKS50aWNrcyhrLzEwMCkudGlja1NpemUoLUws MCksRC5zZWw9CmVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksRC5zZT0KbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwo bikpLGgmJihyLnNjYWxlKHkpLnRpY2tzKEwvMzYpLnRpY2tTaXplKC1rLDApLEQuPQpzZWxlY3Qo Ii5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVu Y3Rpb24oZSl7Yj0KPTNEZSxTLnN0YXRlQ2hhbmdlKGIpLE4udXBkYXRlKCl9KSxzLmRpc3BhdGNo Lm9uKCJlbGVtZW50TW91c2Vtb3ZlIixmdW5jdGlvPQpuKGkpe3QuY2xlYXJIaWdobGlnaHRzKCk7 dmFyIGEsZixsLGM9M0RbXTttLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnM9CmVyaWVz SW5kZXg9M0R0LCFlLmRpc2FibGVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9M0RlLmludGVy YWN0aXZlQmlzZWN0KD0Kbi52YWx1ZXMsaS5wb2ludFhWYWx1ZSxOLngoKSksdC5oaWdobGlnaHRQ b2ludChyLGYsITApO3ZhciBzPTNEbi52YWx1ZXNbZl07PQppZih0eXBlb2Ygcz0zRD0zRCJ1bmRl ZmluZWQiKXJldHVybjt0eXBlb2YgYT0zRD0zRCJ1bmRlZmluZWQiJiYoYT0zRHMpLHR5cGU9Cm9m IGw9M0Q9M0QidW5kZWZpbmVkIiYmKGw9M0ROLnhTY2FsZSgpKE4ueCgpKHMsZikpKSxjLnB1c2go e2tleTpuLmtleSx2YWx1ZT0KOk4ueSgpKHMsZiksY29sb3I6dShuLG4uc2VyaWVzSW5kZXgpfSl9 KTtpZihjLmxlbmd0aD4yKXt2YXIgaD0zRE4ueVNjYWxlKCkuPQppbnZlcnQoaS5tb3VzZVkpLHA9 M0RNYXRoLmFicyhOLnlTY2FsZSgpLmRvbWFpbigpWzBdLU4ueVNjYWxlKCkuZG9tYWluKClbMV09 CiksZD0zRC4wMypwLGc9M0RlLm5lYXJlc3RWYWx1ZUluZGV4KGMubWFwKGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnZhbHVlfSksaCxkKT0KO2chPTNEPTNEbnVsbCYmKGNbZ10uaGlnaGxpZ2h0PTNEITAp fXZhciB5PTNEbi50aWNrRm9ybWF0KCkoTi54KCkoYSxmKSk7cy50PQpvb2x0aXAucG9zaXRpb24o e2xlZnQ6bCtvLmxlZnQsdG9wOmkubW91c2VZK28udG9wfSkuY2hhcnRDb250YWluZXIoQy5wYXJl bnQ9Ck5vZGUpLmVuYWJsZWQodikudmFsdWVGb3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4g ci50aWNrRm9ybWF0KCkoZSl9KS5kYT0KdGEoe3ZhbHVlOnksc2VyaWVzOmN9KSgpLHMucmVuZGVy R3VpZGVMaW5lKGwpfSkscy5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlPQpvdXQiLGZ1bmN0aW9u KGUpe1MudG9vbHRpcEhpZGUoKSx0LmNsZWFySGlnaGxpZ2h0cygpfSksUy5vbigidG9vbHRpcFNo b3ciLGY9CnVuY3Rpb24oZSl7diYmVChlLEMucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuZ2VTdGF0 ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZD0KaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmbS5sZW5n dGg9M0Q9M0Q9M0RlLmRpc2FibGVkLmxlbmd0aCYmKG0uZm9yRWFjaChmdW5jPQp0aW9uKHQsbil7 dC5kaXNhYmxlZD0zRGUuZGlzYWJsZWRbbl19KSxiLmRpc2FibGVkPTNEZS5kaXNhYmxlZCksTi51 cGRhdGUoKX09Cil9KSxOfXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5heGlz KCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZT0KLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5pbnRl cmFjdGl2ZUd1aWRlbGluZSgpLG89M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1PQowLGxlZnQ6 NjB9LHU9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGE9M0RudWxsLGY9M0RudWxsLGw9M0QhMCxj PTNEITAsaD0zRCE9CjAscD0zRCExLGQ9M0QhMSx2PTNEITAsbT0zRGZ1bmN0aW9uKGUsdCxuLHIs aSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+Ij0KK24rIiBhdCAiK3QrIjwvcD4ifSxnLHks Yj0zRHt9LHc9M0RudWxsLEU9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNEZDMuZGlzPQpwYXRj aCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUi KSx4PTNEMDtuLm9yaWU9Cm50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWVudChwPyJy aWdodCI6ImxlZnQiKTt2YXIgVD0zRGZ1bmN0aW9uKGkscz0KKXt2YXIgbz0zRGkucG9zWzBdKyhz Lm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpPQpj a0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgp KHQueSgpKGkucG9pbnQsaS49CnBvaW50SW5kZXgpKSxsPTNEbShpLnNlcmllcy5rZXksYSxmLGks Tik7ZS50b29sdGlwLnNob3coW28sdV0sbCxudWxsLG51bGwscz0KKX07cmV0dXJuIHQuZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5w PQpvc1swXStvLmxlZnQsZS5wb3NbMV0rby50b3BdLFMudG9vbHRpcFNob3coZSl9KSx0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91c2U9Cm91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aXBI aWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7dj0KJiZlLnRvb2x0aXAuY2xl YW51cCgpfSksTi5kaXNwYXRjaD0zRFMsTi5saW5lcz0zRHQsTi5sZWdlbmQ9M0RpLE4ueEF4aXM9 M0RuPQosTi55QXhpcz0zRHIsTi5pbnRlcmFjdGl2ZUxheWVyPTNEcyxkMy5yZWJpbmQoTix0LCJk ZWZpbmVkIiwiaXNBcmVhIiwieCIsInk9CiIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4RG9t YWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsIj0KZm9yY2VZIiwiaW50 ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImlkIiwiaW50 ZXJwb2xhPQp0ZSIpLE4ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChOKSxOLm1h cmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPTNEdHlw ZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9Cj0zRHR5cGVvZiBl LnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVvZiBl LmJvdHRvbT0KIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm8uYm90dG9tLG8ubGVmdD0zRHR5cGVv ZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sPQplZnQ6by5sZWZ0LE4pOm99LE4ud2lkdGg9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsTik6YX09CixOLmhlaWdo dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxOKTpmfSxOLmNv bG9yPTNEZnVuYz0KdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUudXRpbHMu Z2V0Q29sb3IodCksaS5jb2xvcih1KSxOKTp1fSxOPQouc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxOKTpsfSxOLnNob3dYQXhpcz0KPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLE4pOmN9LE4uc2hvd1lBeGlz PTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsTik6aH0sTi5y aWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhw PTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxOKTpwfSxOLnVzZUludGVyYWN0aT0KdmVH dWlkZWxpbmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsZT0z RD0zRD0zRCEwJiYoTi5pPQpudGVyYWN0aXZlKCExKSxOLnVzZVZvcm9ub2koITEpKSxOKTpkfSxO LnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8odj0zRGUs Tik6dn0sTi50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0K ZW5ndGg/KG09M0RlLE4pOm19LE4uc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYj0zRGUsTik6PQpifSxOLmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxOKTp3fSxOLm5vRGE9CnRhPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLE4pOkV9LE4udHJhbnNpdGlvbkR1cmF0aW9u PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsTik6eH0sTn0s ZS5tb2RlbHMubGluZVBsdXNCYXI9CkNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBUKGUpe3Jl dHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGw9M0RkMy5zZWxlYz0KdCh0aGlzKSxjPTNEdGhp cyx2PTNEKGF8fHBhcnNlSW50KGwuc3R5bGUoIndpZHRoIikpfHw5NjApLXUubGVmdC11LnJpZ2h0 LE49Cj0zRChmfHxwYXJzZUludChsLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0 b207VC51cGRhdGU9M0RmdW5jdGlvbj0KKCl7bC5jYWxsKFQpfSxiLmRpc2FibGVkPTNEZS5tYXAo ZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXcpe3ZhPQpyIEM7dz0zRHt9O2Zv cihDIGluIGIpYltDXWluc3RhbmNlb2YgQXJyYXk/d1tDXT0zRGJbQ10uc2xpY2UoMCk6d1tDXT0z RGJbQ109Cn1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUu dmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dj0KYXIgaz0zRGwuc2VsZWN0QWxsKCIubnYtbm9EYXRh IikuZGF0YShbRV0pO3JldHVybiBrLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuPQphdHRyKCJjbGFz cyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hv ciIsIm1pZGQ9CmxlIiksay5hdHRyKCJ4Iix1LmxlZnQrdi8yKS5hdHRyKCJ5Iix1LnRvcCtOLzIp LnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KT0KLFR9bC5zZWxlY3RBbGwoIi5udi1ub0RhdGEi KS5yZW1vdmUoKTt2YXIgTD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlPQouZGlzYWJs ZWQmJmUuYmFyfSksQT0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhcn0pO209M0RB LmZpbHRlcihmdW49CmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RoJiZBLmZpbHRl cihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZD0KfSlbMF0udmFsdWVzLmxlbmd0aD90LnhT Y2FsZSgpOm4ueFNjYWxlKCksZz0zRG4ueVNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyPQogTz0z RGQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lUGx1c0JhciIpLmRh dGEoW2VdKSxNPTNETy49CmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52 LXdyYXAgbnYtbGluZVBsdXNCYXIiKS5hcHBlbmQoImciKT0KLF89M0RPLnNlbGVjdCgiZyIpO00u YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpPQou YXR0cigiY2xhc3MiLCJudi15MSBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LXkyIG52LWF4aXMiKSw9Ck0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3Jh cCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saT0KbmVzV3JhcCIpLE0uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIikscCYmKG8ud2lkdGgodi8yKSxfLnNl PQpsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBl Lm9yaWdpbmFsS2V5PTNEZS5vcmk9CmdpbmFsS2V5PTNEPTNEPTNEdW5kZWZpbmVkP2Uua2V5OmUu b3JpZ2luYWxLZXksZS5rZXk9M0RlLm9yaWdpbmFsS2V5KyhlLmJhcj0KPyIgKGxlZnQgYXhpcyki OiIgKHJpZ2h0IGF4aXMpIiksZX0pKS5jYWxsKG8pLHUudG9wIT0zRG8uaGVpZ2h0KCkmJih1LnRv cD0KPTNEby5oZWlnaHQoKSxOPTNEKGZ8fHBhcnNlSW50KGwuc3R5bGUoImhlaWdodCIpKXx8NDAw KS11LnRvcC11LmJvdHRvbSksXy5zPQplbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoIit2LzIrIiwiKyAtdS50b3ArIikiKSk9CixPLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSx0LndpZHRoKHYpLmhlaWdo dChOKT0KLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGgoZSx0KX0p LmZpbHRlcihmdW5jdGlvbih0LG4pe3JlPQp0dXJuIWVbbl0uZGlzYWJsZWQmJiFlW25dLmJhcn0p KSxuLndpZHRoKHYpLmhlaWdodChOKS5jb2xvcihlLm1hcChmdW5jdGlvbig9CmUsdCl7cmV0dXJu IGUuY29sb3J8fGgoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2Fi bGVkJiZlWz0Kbl0uYmFyfSkpO3ZhciBEPTNEXy5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHVt KEwubGVuZ3RoP0w6W3t2YWx1ZXM6W119XSksPQpQPTNEXy5zZWxlY3QoIi5udi1saW5lc1dyYXAi KS5kYXR1bShBWzBdJiYhQVswXS5kaXNhYmxlZD9BOlt7dmFsdWVzOltdfV0pO2Q9CjMudHJhbnNp dGlvbihEKS5jYWxsKG4pLGQzLnRyYW5zaXRpb24oUCkuY2FsbCh0KSxyLnNjYWxlKG0pLnRpY2tz KHYvMTAwKS50aT0KY2tTaXplKC1OLDApLF8uc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitnLnJhPQpuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRp b24oXy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKSkuY2FsbChyKSxpLnNjYWxlKGcpLnQ9Cmlja3Mo Ti8zNikudGlja1NpemUoLXYsMCksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLm52LXkxLm52LWF4 aXMiKSkuc3R5bGUoIj0Kb3BhY2l0eSIsTC5sZW5ndGg/MTowKS5jYWxsKGkpLHMuc2NhbGUoeSku dGlja3MoTi8zNikudGlja1NpemUoTC5sZW5ndGg/MDotPQp2LDApLF8uc2VsZWN0KCIubnYteTIu bnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixBLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm89CnJt IiwidHJhbnNsYXRlKCIrdisiLDApIiksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLm52LXkyLm52 LWF4aXMiKSkuY2FsbChzKT0KLG8uZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihl KXtiPTNEZSxTLnN0YXRlQ2hhbmdlKGIpLFQudXBkYXRlKCl9PQopLFMub24oInRvb2x0aXBTaG93 IixmdW5jdGlvbihlKXtkJiZ4KGUsYy5wYXJlbnROb2RlKX0pLFMub24oImNoYW5nZVN0YXRlIiw9 CmZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNo KGZ1bmN0aW9uKGUsbil7ZS5kaT0Kc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLGIuZGlzYWJsZWQ9 M0R0LmRpc2FibGVkKSxULnVwZGF0ZSgpfSl9KSxUfXZhciB0PTNEPQplLm1vZGVscy5saW5lKCks bj0zRGUubW9kZWxzLmhpc3RvcmljYWxCYXIoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1v ZGU9CmxzLmF4aXMoKSxzPTNEZS5tb2RlbHMuYXhpcygpLG89M0RlLm1vZGVscy5sZWdlbmQoKSx1 PTNEe3RvcDozMCxyaWdodDo2MCxibz0KdHRvbTo1MCxsZWZ0OjYwfSxhPTNEbnVsbCxmPTNEbnVs bCxsPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUu eX0saD0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCkscD0zRCEwLGQ9M0QhMCx2PTNEZnVuY3Rpb24o ZSx0LG49CixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9w PiJ9LG0sZyx5LGI9M0R7fSx3PTNEbnVsbD0KLEU9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNE ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0PQplQ2hhbmdlIiwi Y2hhbmdlU3RhdGUiKTtuLnBhZERhdGEoITApLHQuY2xpcEVkZ2UoITEpLnBhZERhdGEoITApLHIu b3JpZW50KCI9CmJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLmhpZ2hsaWdodFplcm8oITEpLGkub3Jp ZW50KCJsZWZ0Iikscy5vcmllbnQoInJpZ2h0Ij0KKTt2YXIgeD0zRGZ1bmN0aW9uKG4sbyl7dmFy IHU9M0RuLnBvc1swXSsoby5vZmZzZXRMZWZ0fHwwKSxhPTNEbi5wb3NbMV0rKG8uPQpvZmZzZXRU b3B8fDApLGY9M0RyLnRpY2tGb3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9 M0Qobi5zZXJpZXM9Ci5iYXI/aTpzKS50aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLnBvaW50 SW5kZXgpKSxjPTNEdihuLnNlcmllcy5rZXksZixsLD0KbixUKTtlLnRvb2x0aXAuc2hvdyhbdSxh XSxjLG4udmFsdWU8MD8ibiI6InMiLG51bGwsbyl9O3JldHVybiB0LmRpc3BhdGNoLm9uPQooImVs ZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5s ZWZ0LGUucG9zWzFdK3U9Ci50b3BdLFMudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJl bGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZT0KKXtTLnRvb2x0aXBIaWRlKGUpfSks bi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlPQou cG9zPTNEW2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50b29sdGlwU2hvdyhlKX0p LG4uZGlzcGF0Y2gub24oImU9CmxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1Mu dG9vbHRpcEhpZGUoZSl9KSxTLm9uKCJ0b29sdGlwSGlkZSIsZj0KdW5jdGlvbigpe2QmJmUudG9v bHRpcC5jbGVhbnVwKCl9KSxULmRpc3BhdGNoPTNEUyxULmxlZ2VuZD0zRG8sVC5saW5lcz0zRHQs PQpULmJhcnM9M0RuLFQueEF4aXM9M0RyLFQueTFBeGlzPTNEaSxULnkyQXhpcz0zRHMsZDMucmVi aW5kKFQsdCwiZGVmaW5lZCIsInM9Cml6ZSIsImNsaXBWb3Jvbm9pIiwiaW50ZXJwb2xhdGUiKSxU Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoVCksVD0KLng9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsdC54KGUpLG4ueChlKSxUKTpsfSxULnk9 M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx0LnkoZSksbi55 KGUpLFQpOmN9LFQubWFyZ2luPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50bz0KcDp1LnRvcCx1LnJp Z2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUuYm90 dG9tPTNEPQp0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20s dS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0Q9CiJ1bmRlZmluZWQiP2UubGVmdDp1LmxlZnQsVCk6 dX0sVC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/KGE9M0Rl LFQpOmF9LFQuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9 M0RlLFQpOmZ9PQosVC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZS51dGlscy5nZXRDb2xvcih0KSxvLmM9Cm9sb3IoaCksVCk6aH0sVC5zaG93TGVnZW5k PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLFQpOj0KcH0sVC50 b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxUKTpk fSxULnRvb2x0aXBDPQpvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odj0zRGUsVCk6dn0sVC5zdGF0ZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGI9M0RlLFQpOmJ9LFQuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4g YXJndW1lbnRzLmxlbmd0aD8odz0zRGUsVCk6d30sVC5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhFPTNEZSxUKTpFfSxUfSxlLm1vZGVscy5saW5lV2l0aEZv Y3VzQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGsoZSk9CntyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKGUpe2Z1bmN0aW9uIFIoZSl7dmFyIHQ9M0QrKGU9M0Q9M0QiZSIpLG49M0R0PzE6LTEscj0K PTNETy8zO3JldHVybiJNIisuNSpuKyIsIityKyJBNiw2IDAgMCAiK3QrIiAiKzYuNSpuKyIsIiso cis2KSsiViIrKDIqci02KSsiPQpBNiw2IDAgMCAiK3QrIiAiKy41Km4rIiwiKzIqcisiWiIrIk0i KzIuNSpuKyIsIisocis4KSsiViIrKDIqci04KSsiTSIrNC41Km49CisiLCIrKHIrOCkrIlYiKygy KnItOCl9ZnVuY3Rpb24gVSgpe2EuZW1wdHkoKXx8YS5leHRlbnQodyksRi5kYXRhKFthLmVtcHR5 KD0KKT9nLmRvbWFpbigpOnddKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RnKGVbMF0pLXYu cmFuZ2UoKVswXSxyPTNEdi5yYW5nPQplKClbMV0tZyhlWzFdKTtkMy5zZWxlY3QodGhpcykuc2Vs ZWN0KCIubGVmdCIpLmF0dHIoIndpZHRoIixuPDA/MDpuKSxkMy5zZWw9CmVjdCh0aGlzKS5zZWxl Y3QoIi5yaWdodCIpLmF0dHIoIngiLGcoZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0pfWZ1 bmN0aT0Kb24geigpe3c9M0RhLmVtcHR5KCk/bnVsbDphLmV4dGVudCgpO3ZhciBuPTNEYS5lbXB0 eSgpP2cuZG9tYWluKCk6YS5leHRlbnQoPQopO2lmKE1hdGguYWJzKG5bMF0tblsxXSk8PTNEMSly ZXR1cm47VC5icnVzaCh7ZXh0ZW50Om4sYnJ1c2g6YX0pLFUoKTt2YXIgcz0KPTNEUC5zZWxlY3Qo Ii5udi1mb2N1cyAubnYtbGluZXNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIWUuPQpkaXNhYmxlZH0pLm1hcChmdW5jdGlvbihlLHIpe3JldHVybntrZXk6ZS5rZXksdmFs dWVzOmUudmFsdWVzLmZpbHRlcihmdW5jdGk9Cm9uKGUscil7cmV0dXJuIHQueCgpKGUscik+PTNE blswXSYmdC54KCkoZSxyKTw9M0RuWzFdfSl9fSkpO3MuY2FsbCh0KSxQLnNlbD0KZWN0KCIubnYt Zm9jdXMgLm52LXgubnYtYXhpcyIpLmNhbGwociksUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteS5u di1heGlzIikuPQpjYWxsKGkpfXZhciBTPTNEZDMuc2VsZWN0KHRoaXMpLE49M0R0aGlzLEw9M0Qo aHx8cGFyc2VJbnQoUy5zdHlsZSgid2lkdGgiKSk9Cnx8OTYwKS1mLmxlZnQtZi5yaWdodCxBPTNE KHB8fHBhcnNlSW50KFMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1mLnRvcC1mLmJvdD0KdG9tLWQs Tz0zRGQtbC50b3AtbC5ib3R0b207ay51cGRhdGU9M0RmdW5jdGlvbigpe1MuY2FsbChrKX0say5j b250YWluZXI9M0R0PQpoaXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGg9Cil7dmFyIE09M0RTLnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLmRhdGEoW3hdKTtyZXR1cm4gTS5lbnRlcigpLmFwcGVuZCgidGV4dD0KIiku YXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgi dGV4dC1hbmNob3IiLCJtPQppZGRsZSIpLE0uYXR0cigieCIsZi5sZWZ0K0wvMikuYXR0cigieSIs Zi50b3ArQS8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiA9CmV9KSxrfVMuc2VsZWN0QWxsKCIu bnYtbm9EYXRhIikucmVtb3ZlKCksdj0zRHQueFNjYWxlKCksbT0zRHQueVNjYWxlKCksZz0zRD0K bi54U2NhbGUoKSx5PTNEbi55U2NhbGUoKTt2YXIgXz0zRFMuc2VsZWN0QWxsKCJnLm52LXdyYXAu bnYtbGluZVdpdGhGb2N1c0NoPQphcnQiKS5kYXRhKFtlXSksRD0zRF8uZW50ZXIoKS5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW49CmVXaXRoRm9jdXNDaGFydCIp LmFwcGVuZCgiZyIpLFA9M0RfLnNlbGVjdCgiZyIpO0QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LD0KIm52LWxlZ2VuZFdyYXAiKTt2YXIgSD0zREQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1mb2N1cyIpO0guYXBwZW5kKCJnPQoiKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEgu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSw9CkguYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKTt2YXIgQj0zREQuYXBwZW5kKCJnIikuYXR0cigi Y2xhcz0KcyIsIm52LWNvbnRleHQiKTtCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBu di1heGlzIiksQi5hcHBlbmQoImciKS5hPQp0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksQi5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLEIuYXA9CnBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWJydXNoQmFja2dyb3VuZCIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudj0KLXggbnYtYnJ1c2giKSxiJiYodS53aWR0aChMKSxQLnNlbGVjdCgiLm52LWxlZ2Vu ZFdyYXAiKS5kYXR1bShlKS5jYWxsKHUpLGYuPQp0b3AhPTNEdS5oZWlnaHQoKSYmKGYudG9wPTNE dS5oZWlnaHQoKSxBPTNEKHB8fHBhcnNlSW50KFMuc3R5bGUoImhlaWdodCIpKXw9Cnw0MDApLWYu dG9wLWYuYm90dG9tLWQpLFAuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbD0KYXRlKDAsIisgLWYudG9wKyIpIikpLF8uYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrZi5sZWZ0KyIsIitmLnRvcCsiKSIpPQosdC53aWR0aChMKS5oZWlnaHQoQSkuY29s b3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmk9Cmx0ZXIo ZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxuLmRlZmluZWQodC5kZWZpbmVk KCkpLndpZHRoKEwpLj0KaGVpZ2h0KE8pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvPQpuKHQsbil7cmV0dXJuIWVbbl0uZGlz YWJsZWR9KSksUC5zZWxlY3QoIi5udi1jb250ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHI9CmFu c2xhdGUoMCwiKyhBK2YuYm90dG9tK2wudG9wKSsiKSIpO3ZhciBqPTNEUC5zZWxlY3QoIi5udi1j b250ZXh0IC5udi1saW5lcz0KV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkfSkpO2QzLnRyYW5zaXRpb24oaikuY2FsPQpsKG4pLHIuc2NhbGUodikudGlj a3MoTC8xMDApLnRpY2tTaXplKC1BLDApLGkuc2NhbGUobSkudGlja3MoQS8zNikudGlja1NpemU9 CigtTCwwKSxQLnNlbGVjdCgiLm52LWZvY3VzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zv cm0iLCJ0cmFuc2xhdGUoMCwiKz0KQSsiKSIpLGEueChnKS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7 dmFyIGU9M0RrLnRyYW5zaXRpb25EdXJhdGlvbigpO2sudHJhbnNpPQp0aW9uRHVyYXRpb24oMCks eigpLGsudHJhbnNpdGlvbkR1cmF0aW9uKGUpfSksdyYmYS5leHRlbnQodyk7dmFyIEY9M0RQLnNl bGU9CmN0KCIubnYtYnJ1c2hCYWNrZ3JvdW5kIikuc2VsZWN0QWxsKCJnIikuZGF0YShbd3x8YS5l eHRlbnQoKV0pLEk9M0RGLmVudGVyKD0KKS5hcHBlbmQoImciKTtJLmFwcGVuZCgicmVjdCIpLmF0 dHIoImNsYXNzIiwibGVmdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApPQouYXR0cigiaGVpZ2h0 IixPKSxJLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwicmlnaHQiKS5hdHRyKCJ4IiwwKS5h dHRyKCI9CnkiLDApLmF0dHIoImhlaWdodCIsTyk7dmFyIHE9M0RQLnNlbGVjdCgiLm52LXgubnYt YnJ1c2giKS5jYWxsKGEpO3Euc2VsZWN0QT0KbGwoInJlY3QiKS5hdHRyKCJoZWlnaHQiLE8pLHEu c2VsZWN0QWxsKCIucmVzaXplIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsPQpSKSx6KCkscy5z Y2FsZShnKS50aWNrcyhMLzEwMCkudGlja1NpemUoLU8sMCksUC5zZWxlY3QoIi5udi1jb250ZXh0 IC5udi14Lm49CnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5n ZSgpWzBdKyIpIiksZDMudHJhbnNpdGlvbihQLj0Kc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5u di1heGlzIikpLmNhbGwocyksby5zY2FsZSh5KS50aWNrcyhPLzM2KS50aWNrU2l6PQplKC1MLDAp LGQzLnRyYW5zaXRpb24oUC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Lm52LWF4aXMiKSkuY2Fs bChvKSxQLnNlbGU9CmN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlzIikuYXR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKDAsIit5LnJhbmdlKClbMD0KXSsiKSIpLHUuZGlzcGF0Y2gub24oInN0 YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtrLnVwZGF0ZSgpfSksVC5vbigidG9vbHRpcFNoPQpvdyIs ZnVuY3Rpb24oZSl7RSYmQyhlLE4ucGFyZW50Tm9kZSl9KX0pLGt9dmFyIHQ9M0RlLm1vZGVscy5s aW5lKCksbj0zRGUubW89CmRlbHMubGluZSgpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9k ZWxzLmF4aXMoKSxzPTNEZS5tb2RlbHMuYXhpcygpLG89Cj0zRGUubW9kZWxzLmF4aXMoKSx1PTNE ZS5tb2RlbHMubGVnZW5kKCksYT0zRGQzLnN2Zy5icnVzaCgpLGY9M0R7dG9wOjMwLHJpZz0KaHQ6 MzAsYm90dG9tOjMwLGxlZnQ6NjB9LGw9M0R7dG9wOjAscmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6 NjB9LGM9M0RlLnV0aWxzPQouZGVmYXVsdENvbG9yKCksaD0zRG51bGwscD0zRG51bGwsZD0zRDEw MCx2LG0sZyx5LGI9M0QhMCx3PTNEbnVsbCxFPTNEITAsUz0KPTNEZnVuY3Rpb24oZSx0LG4scixp KXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx4PTNEPQoi Tm8gRGF0YSBBdmFpbGFibGUuIixUPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRp cEhpZGUiLCJicnVzaCIpLE49Cj0zRDA7dC5jbGlwRWRnZSghMCksbi5pbnRlcmFjdGl2ZSghMSks ci5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLGkubz0KcmllbnQoImxlZnQiKSxzLm9y aWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksby5vcmllbnQoImxlZnQiKTt2YXIgQz0zRGZ1 PQpuY3Rpb24obixzKXt2YXIgbz0zRG4ucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RuLnBv c1sxXSsocy5vZmZzZXRUb3B8fDA9CiksYT0zRHIudGlja0Zvcm1hdCgpKHQueCgpKG4ucG9pbnQs bi5wb2ludEluZGV4KSksZj0zRGkudGlja0Zvcm1hdCgpKHQueSgpKD0Kbi5wb2ludCxuLnBvaW50 SW5kZXgpKSxsPTNEUyhuLnNlcmllcy5rZXksYSxmLG4sayk7ZS50b29sdGlwLnNob3coW28sdV0s bCxuPQp1bGwsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIu dG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS49CnBvcz0zRFtlLnBvc1swXStmLmxlZnQsZS5wb3NbMV0r Zi50b3BdLFQudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbD0KZW1lbnRNb3VzZW91 dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksVC5vbigidG9vbHRpcEhp ZGUiLGZ1PQpuY3Rpb24oKXtFJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksay5kaXNwYXRjaD0zRFQs ay5sZWdlbmQ9M0R1LGsubGluZXM9M0R0LGs9Ci5saW5lczI9M0RuLGsueEF4aXM9M0RyLGsueUF4 aXM9M0RpLGsueDJBeGlzPTNEcyxrLnkyQXhpcz0zRG8sZDMucmViaW5kKGssdD0KLCJkZWZpbmVk IiwiaXNBcmVhIiwic2l6ZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwi Zm9yY2VYIiwiPQpmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2ki LCJpZCIpLGsub3B0aW9ucz0zRGUudXRpbHMub3A9CnRpb25zRnVuYy5iaW5kKGspLGsueD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LngoZSksbi54KGUpLD0Kayk6dC54 fSxrLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC55KGUpLG4ueShl KSxrKTp0Lnl9LGsuPQptYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZi50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGU9CmZpbmVkIj9lLnRvcDpmLnRvcCxmLnJp Z2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpmLnJpZ2h0LD0KZi5i b3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206Zi5ib3R0b20s Zi5sZWZ0PTNEdHlwZW9mPQogZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpmLmxlZnQsayk6 Zn0say5tYXJnaW4yPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8obD0z RGUsayk6bH0say53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0K KGg9M0RlLGspOmh9LGsuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHA9M0RlLGspOnB9LGsuPQpoZWlnaHQyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGQ9M0RlLGspOmR9LGsuY29sb3I9M0RmdW5jdGk9Cm9uKHQpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhjPTNEZS51dGlscy5nZXRDb2xvcih0KSx1LmNvbG9yKGMpLGspOmN9LGsu cz0KaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0Rl LGspOmJ9LGsudG9vbHRpcHM9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhFPTNEZSxrKTpFfSxrLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oUz0zRGUsayk6U30say5pbnRlcnBvbGF0ZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KHQuaW50ZXJwb2xhdGUoZSksbi5pbnRlcnBvbGF0ZShl KSxrKTp0LmludGVycG9sYXRlKCl9LGsuPQpub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oeD0zRGUsayk6eH0say54VGlja0Zvcm1hdD0zRGY9CnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIudGlja0Zvcm1hdChlKSxzLnRpY2tGb3JtYXQoZSks ayk6ci50aT0KY2tGb3JtYXQoKX0say55VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhpLnRpY2tGb3JtPQphdChlKSxvLnRpY2tGb3JtYXQoZSksayk6aS50 aWNrRm9ybWF0KCl9LGsuYnJ1c2hFeHRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVu dHMubGVuZ3RoPyh3PTNEZSxrKTp3fSxrLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KE49M0RlLGspOk59LGt9LGUubW9kZWxzLmxpbmVQ bHVzQmFyV2l0aEZvY3VzQ2hhcnQ9M0RmdW5jdGlvPQpuKCl7ZnVuY3Rpb24gQihlKXtyZXR1cm4g ZS5lYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHR0KGUpe3ZhciB0PTNEKyhlPTNEPQo9M0QiZSIp LG49M0R0PzE6LTEscj0zREkvMztyZXR1cm4iTSIrLjUqbisiLCIrcisiQTYsNiAwIDAgIit0KyIg Iis2LjUqbisiLCI9Cisocis2KSsiViIrKDIqci02KSsiQTYsNiAwIDAgIit0KyIgIisuNSpuKyIs IisyKnIrIloiKyJNIisyLjUqbisiLCIrKHIrOCkrIj0KViIrKDIqci04KSsiTSIrNC41Km4rIiwi KyhyKzgpKyJWIisoMipyLTgpfWZ1bmN0aW9uIG50KCl7aC5lbXB0eSgpfHxoLmV4dGVuPQp0KHgp LFkuZGF0YShbaC5lbXB0eSgpP2suZG9tYWluKCk6eF0pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIg bj0zRGsoZVswXSktay49CnJhbmdlKClbMF0scj0zRGsucmFuZ2UoKVsxXS1rKGVbMV0pO2QzLnNl bGVjdCh0aGlzKS5zZWxlY3QoIi5sZWZ0IikuYXR0cigidz0KaWR0aCIsbjwwPzA6biksZDMuc2Vs ZWN0KHRoaXMpLnNlbGVjdCgiLnJpZ2h0IikuYXR0cigieCIsayhlWzFdKSkuYXR0cigid2lkPQp0 aCIscjwwPzA6cil9KX1mdW5jdGlvbiBydCgpe3g9M0RoLmVtcHR5KCk/bnVsbDpoLmV4dGVudCgp LFM9M0RoLmVtcHR5KCk/ay49CmRvbWFpbigpOmguZXh0ZW50KCksRC5icnVzaCh7ZXh0ZW50OlMs YnJ1c2g6aH0pLG50KCksci53aWR0aChqKS5oZWlnaHQoRikuYz0Kb2xvcihlLm1hcChmdW5jdGlv bihlLHQpe3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1 PQpybiFlW25dLmRpc2FibGVkJiZlW25dLmJhcn0pKSx0LndpZHRoKGopLmhlaWdodChGKS5jb2xv cihlLm1hcChmdW5jdGlvbihlLHQ9Cil7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihm dW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiYhZVtuXT0KLmJhcn0pKTt2YXIgbj0z RCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LWJhcnNXcmFwIikuZGF0dW0oUi5sZW5ndGg/Ui5tYXAo ZnVuPQpjdGlvbihlLHQpe3JldHVybntrZXk6ZS5rZXksdmFsdWVzOmUudmFsdWVzLmZpbHRlcihm dW5jdGlvbihlLHQpe3JldHVybiByLng9CigpKGUsdCk+PTNEU1swXSYmci54KCkoZSx0KTw9M0RT WzFdfSl9fSk6W3t2YWx1ZXM6W119XSksaT0zRCQuc2VsZWN0KCIubnYtZj0Kb2N1cyAubnYtbGlu ZXNXcmFwIikuZGF0dW0oVVswXS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOlUubWFwKGZ1bmN0aW9u KGUsbil7PQpyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24o ZSxuKXtyZXR1cm4gdC54KCkoZSxuKT49M0Q9ClNbMF0mJnQueCgpKGUsbik8PTNEU1sxXX0pfX0p KTtSLmxlbmd0aD9DPTNEci54U2NhbGUoKTpDPTNEdC54U2NhbGUoKSxzLnNjYT0KbGUoQykudGlj a3Moai8xMDApLnRpY2tTaXplKC1GLDApLHMuZG9tYWluKFtNYXRoLmNlaWwoU1swXSksTWF0aC5m bG9vcihTWzFdPQopXSksJC5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKHMpLG4uY2FsbChy KSxpLmNhbGwodCksJC5zZWxlY3QoIi5udi1mb2M9CnVzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0wucmFuZ2UoKVswXSsiKSIpLHUuc2NhbD0KZShMKS50 aWNrcyhGLzM2KS50aWNrU2l6ZSgtaiwwKSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1h eGlzIikuc3R5bGUoPQoib3BhY2l0eSIsUi5sZW5ndGg/MTowKSxhLnNjYWxlKEEpLnRpY2tzKEYv MzYpLnRpY2tTaXplKFIubGVuZ3RoPzA6LWosMCksJC49CnNlbGVjdCgiLm52LWZvY3VzIC5udi15 Mi5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFUubGVuZ3RoPzE6MCkuYXR0cigidHJhbj0Kc2Zv cm0iLCJ0cmFuc2xhdGUoIitDLnJhbmdlKClbMV0rIiwwKSIpLCQuc2VsZWN0KCIubnYtZm9jdXMg Lm52LXkxLm52LWF4aXMiPQopLmNhbGwodSksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYteTIubnYt YXhpcyIpLmNhbGwoYSl9dmFyIE49M0RkMy5zZWxlY3QodGg9CmlzKSxQPTNEdGhpcyxqPTNEKHZ8 fHBhcnNlSW50KE4uc3R5bGUoIndpZHRoIikpfHw5NjApLXAubGVmdC1wLnJpZ2h0LEY9M0QobT0K fHxwYXJzZUludChOLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktcC50b3AtcC5ib3R0b20tZyxJPTNE Zy1kLnRvcC1kLmJvdHRvbTtCPQoudXBkYXRlPTNEZnVuY3Rpb24oKXtOLmNhbGwoQil9LEIuY29u dGFpbmVyPTNEdGhpcztpZighZXx8IWUubGVuZ3RofHwhZS5maWw9CnRlcihmdW5jdGlvbihlKXty ZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgcT0zRE4uc2VsZWN0QWxsKCIubnYt bj0Kb0RhdGEiKS5kYXRhKFtfXSk7cmV0dXJuIHEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtbm9EPQphdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRl eHQtYW5jaG9yIiwibWlkZGxlIikscS5hdHRyKCJ4IixwLmxlZnQrai89CjIpLmF0dHIoInkiLHAu dG9wK0YvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLEJ9Ti5zZWxlY3RBbGwoIi5udi1u b0RhdD0KYSIpLnJlbW92ZSgpO3ZhciBSPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUu ZGlzYWJsZWQmJmUuYmFyfSksVT0zRGUuPQpmaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFy fSk7Qz0zRHIueFNjYWxlKCksaz0zRG8uc2NhbGUoKSxMPTNEci55U2NhbGU9CigpLEE9M0R0LnlT Y2FsZSgpLE89M0RpLnlTY2FsZSgpLE09M0RuLnlTY2FsZSgpO3ZhciB6PTNEZS5maWx0ZXIoZnVu Y3Rpb24oZT0KKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS5iYXJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlPQosdCl7cmV0dXJue3g6eShlLHQpLHk6YihlLHQp fX0pfSksVz0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGU9CmQmJiFlLmJh cn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0 dXJue3g6eShlLD0KdCkseTpiKGUsdCl9fSl9KTtDLnJhbmdlKFswLGpdKSxrLmRvbWFpbihkMy5l eHRlbnQoZDMubWVyZ2Uoei5jb25jYXQoVykpLGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5y YW5nZShbMCxqXSk7dmFyIFg9M0ROLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmU9ClBsdXNC YXIiKS5kYXRhKFtlXSksVj0zRFguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 ZDMgbnYtd3JhcCBudj0KLWxpbmVQbHVzQmFyIikuYXBwZW5kKCJnIiksJD0zRFguc2VsZWN0KCJn Iik7Vi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52PQotbGVnZW5kV3JhcCIpO3ZhciBKPTNE Vi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWZvY3VzIik7Si5hcHBlbmQoImciKS49CmF0 dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXkxIG52LWF4aXMiKSxKLj0KYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1heGlz IiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhPQpyc1dyYXAiKSxKLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIik7dmFyIEs9M0RWLmFwcGVuZCgiZyIpLmE9 CnR0cigiY2xhc3MiLCJudi1jb250ZXh0Iik7Sy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXggbnYtYXhpcyIpLEsuYXBwZT0KbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMi KSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtPQpheGlzIiksSy5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyI9CiwibnYtbGluZXNXcmFwIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJydXNo QmFja2dyb3VuZCIpLEsuYXBwZW5kKD0KImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYnJ1c2gi KSxFJiYoYy53aWR0aChqLzIpLCQuc2VsZWN0KCIubnYtbGVnZW5kV3JhPQpwIikuZGF0dW0oZS5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3JpZ2luYWxLZXk9M0RlLm9yaWdpbmFsS2V5PTNEPTNE PTNEdW49CmRlZmluZWQ/ZS5rZXk6ZS5vcmlnaW5hbEtleSxlLmtleT0zRGUub3JpZ2luYWxLZXkr KGUuYmFyPyIgKGxlZnQgYXhpcykiOiIgKD0KcmlnaHQgYXhpcykiKSxlfSkpLmNhbGwoYykscC50 b3AhPTNEYy5oZWlnaHQoKSYmKHAudG9wPTNEYy5oZWlnaHQoKSxGPTNEKG18PQp8cGFyc2VJbnQo Ti5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wLXAuYm90dG9tLWcpLCQuc2VsZWN0KCIubnYt bGVnZW5kV3I9CmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrai8yKyIsIisgLXAu dG9wKyIpIikpLFguYXR0cigidHJhbnNmb3JtIj0KLCJ0cmFuc2xhdGUoIitwLmxlZnQrIiwiK3Au dG9wKyIpIiksaS53aWR0aChqKS5oZWlnaHQoSSkuY29sb3IoZS5tYXAoZnVuY3RpPQpvbihlLHQp e3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZCY9CiZlW25dLmJhcn0pKSxuLndpZHRoKGopLmhlaWdodChJKS5jb2xvcihlLm1h cChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfD0KfHcoZSx0KX0pLmZpbHRlcihmdW5jdGlv bih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiYhZVtuXS5iYXJ9KSk7dmFyIFE9M0QkPQouc2Vs ZWN0KCIubnYtY29udGV4dCAubnYtYmFyc1dyYXAiKS5kYXR1bShSLmxlbmd0aD9SOlt7dmFsdWVz OltdfV0pLEc9M0QkLnM9CmVsZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIikuZGF0dW0o VVswXS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOlUpOyQucz0KZWxlY3QoIi5udi1jb250ZXh0Iiku YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisoRitwLmJvdHRvbStkLnRvcCkrIikiPQop LFEuY2FsbChpKSxHLmNhbGwobiksaC54KGspLm9uKCJicnVzaCIscnQpLHgmJmguZXh0ZW50KHgp O3ZhciBZPTNEJC5zZWxlY3Q9CigiLm52LWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZyIp LmRhdGEoW3h8fGguZXh0ZW50KCldKSxaPTNEWS5lbnRlcigpLj0KYXBwZW5kKCJnIik7Wi5hcHBl bmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5h PQp0dHIoImhlaWdodCIsSSksWi5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInJpZ2h0Iiku YXR0cigieCIsMCkuYXR0cigieSI9CiwwKS5hdHRyKCJoZWlnaHQiLEkpO3ZhciBldD0zRCQuc2Vs ZWN0KCIubnYteC5udi1icnVzaCIpLmNhbGwoaCk7ZXQuc2VsZWN0QT0KbGwoInJlY3QiKS5hdHRy KCJoZWlnaHQiLEkpLGV0LnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIo ImQiPQosdHQpLG8udGlja3Moai8xMDApLnRpY2tTaXplKC1JLDApLCQuc2VsZWN0KCIubnYtY29u dGV4dCAubnYteC5udi1heGlzIikuYXQ9CnRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK08u cmFuZ2UoKVswXSsiKSIpLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteD0KLm52LWF4aXMiKS5j YWxsKG8pLGYuc2NhbGUoTykudGlja3MoSS8zNikudGlja1NpemUoLWosMCksJC5zZWxlY3QoIi5u di1jb250PQpleHQgLm52LXkxLm52LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsUi5sZW5ndGg/MTow KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2w9CmF0ZSgwLCIray5yYW5nZSgpWzBdKyIpIiksJC5z ZWxlY3QoIi5udi1jb250ZXh0IC5udi15MS5udi1heGlzIikuY2FsbChmKSxsLj0Kc2NhbGUoTSku dGlja3MoSS8zNikudGlja1NpemUoUi5sZW5ndGg/MDotaiwwKSwkLnNlbGVjdCgiLm52LWNvbnRl eHQgLm52LXkyPQoubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2sucmE9Cm5nZSgpWzFdKyIsMCkiKSwkLnNlbGVjdCgi Lm52LWNvbnRleHQgLm52LXkyLm52LWF4aXMiKS5jYWxsKGwpLGMuZGlzcGF0Y2gubz0Kbigic3Rh dGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0IudXBkYXRlKCl9KSxELm9uKCJ0b29sdGlwU2hvdyIsZnVu Y3Rpb24oZSl7VCYmPQpIKGUsUC5wYXJlbnROb2RlKX0pLHJ0KCl9KSxCfXZhciB0PTNEZS5tb2Rl bHMubGluZSgpLG49M0RlLm1vZGVscy5saW5lKCkscj0KPTNEZS5tb2RlbHMuaGlzdG9yaWNhbEJh cigpLGk9M0RlLm1vZGVscy5oaXN0b3JpY2FsQmFyKCkscz0zRGUubW9kZWxzLmF4aXMoPQopLG89 M0RlLm1vZGVscy5heGlzKCksdT0zRGUubW9kZWxzLmF4aXMoKSxhPTNEZS5tb2RlbHMuYXhpcygp LGY9M0RlLm1vZGVscy49CmF4aXMoKSxsPTNEZS5tb2RlbHMuYXhpcygpLGM9M0RlLm1vZGVscy5s ZWdlbmQoKSxoPTNEZDMuc3ZnLmJydXNoKCkscD0zRHt0bz0KcDozMCxyaWdodDozMCxib3R0b206 MzAsbGVmdDo2MH0sZD0zRHt0b3A6MCxyaWdodDozMCxib3R0b206MjAsbGVmdDo2MH0sdj0KPTNE bnVsbCxtPTNEbnVsbCxnPTNEMTAwLHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxiPTNEZnVu Y3Rpb24oZSl7cmV0dXJuPQogZS55fSx3PTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxFPTNEITAs Uyx4PTNEbnVsbCxUPTNEITAsTj0zRGZ1bmN0aW9uKGUsdCw9Cm4scixpKXtyZXR1cm4iPGgzPiIr ZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSxDLGssTCxBLE8sTSxfPTNEIk5vID0K RGF0YSBBdmFpbGFibGUuIixEPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhp ZGUiLCJicnVzaCIpLFA9M0QwPQo7dC5jbGlwRWRnZSghMCksbi5pbnRlcmFjdGl2ZSghMSkscy5v cmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLHUub3JpZW49CnQoImxlZnQiKSxhLm9yaWVu dCgicmlnaHQiKSxvLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksZi5vcmllbnQoImxl Zj0KdCIpLGwub3JpZW50KCJyaWdodCIpO3ZhciBIPTNEZnVuY3Rpb24obixyKXtTJiYobi5wb2lu dEluZGV4Kz0zRE1hdGguY2VpbChTPQpbMF0pKTt2YXIgaT0zRG4ucG9zWzBdKyhyLm9mZnNldExl ZnR8fDApLG89M0RuLnBvc1sxXSsoci5vZmZzZXRUb3B8fDApLGY9M0Q9CnMudGlja0Zvcm1hdCgp KHQueCgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSksbD0zRChuLnNlcmllcy5iYXI/dTphKS50aWNr Rm9ybT0KYXQoKSh0LnkoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGM9M0ROKG4uc2VyaWVzLmtl eSxmLGwsbixCKTtlLnRvb2x0aXAuc2hvPQp3KFtpLG9dLGMsbi52YWx1ZTwwPyJuIjoicyIsbnVs bCxyKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXI9Ci50b29sdGlwIixm dW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStwLmxlZnQsZS5wb3NbMV0rcC50b3BdLEQudG9v bHRpcFNobz0KdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixm dW5jdGlvbihlKXtELnRvb2x0aXBIaWRlKGUpPQp9KSxyLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3A9Ci5sZWZ0LGUu cG9zWzFdK3AudG9wXSxELnRvb2x0aXBTaG93KGUpfSksci5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3V0LnRvbz0KbHRpcCIsZnVuY3Rpb24oZSl7RC50b29sdGlwSGlkZShlKX0pLEQub24oInRv b2x0aXBIaWRlIixmdW5jdGlvbigpe1QmJmUudG9vPQpsdGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0 Y2g9M0RELEIubGVnZW5kPTNEYyxCLmxpbmVzPTNEdCxCLmxpbmVzMj0zRG4sQi5iYXI9CnM9M0Ry LEIuYmFyczI9M0RpLEIueEF4aXM9M0RzLEIueDJBeGlzPTNEbyxCLnkxQXhpcz0zRHUsQi55MkF4 aXM9M0RhLEIueTNBeD0KaXM9M0RmLEIueTRBeGlzPTNEbCxkMy5yZWJpbmQoQix0LCJkZWZpbmVk Iiwic2l6ZSIsImNsaXBWb3Jvbm9pIiwiaW50ZXJwb2xhPQp0ZSIpLEIub3B0aW9ucz0zRGUudXRp bHMub3B0aW9uc0Z1bmMuYmluZChCKSxCLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVu dHMubGVuZ3RoPyh5PTNEZSx0LngoZSksci54KGUpLEIpOnl9LEIueT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGI9M0RlLHQueShlKSxyLnkoZSksQik6Yn0sQi5tYXJn aW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhwLnRvcD0zRHR5cGVv ZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpwLnRvcCxwLnJpZ2h0PTNEdHlwZW9mIGUucmk9 CmdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnAucmlnaHQscC5ib3R0b209M0R0eXBlb2YgZS5i b3R0b20hPTNEInVuZGVmaW5lZD0KIj9lLmJvdHRvbTpwLmJvdHRvbSxwLmxlZnQ9M0R0eXBlb2Yg ZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpwLmxlZnQsQik6PQpwfSxCLndpZHRoPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuaGVpZ2h0PTNE ZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQik6bX0sQi5jb2xv cj0zRGZ1bmN0aW9uKHQpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLnV0aWxzLmdl dENvbG9yKHQpLGMuY29sb3IodyksQik6d30sQi5zaG93TGVnZW5kPTNEPQpmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQik6RX0sQi50b29sdGlwcz0zRGZ1bmN0aW9u KGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEIpOlR9LEIudG9vbHRpcENvbnRl bnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhOPTNEZSxCKTpOfSxC Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KF89M0RlLEIp Ol99LEIuYnJ1c2hFeHRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o eD0zRGUsQik9Cjp4fSxCfSxlLm1vZGVscy5tdWx0aUJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24g QyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKD0KZSl7dmFyIGc9M0RuLXQubGVmdC10LnJpZ2h0 LEM9M0RyLXQudG9wLXQuYm90dG9tLGs9M0RkMy5zZWxlY3QodGhpcyk7ZCYmZS5sPQplbmd0aCYm KGQ9M0Rbe3ZhbHVlczplWzBdLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6 MCxzZXJpZXM6ZS49CnNlcmllcyxzaXplOi4wMX19KX1dKSxjJiYoZT0zRGQzLmxheW91dC5zdGFj aygpLm9mZnNldChoKS52YWx1ZXMoZnVuY3Rpb24oZT0KKXtyZXR1cm4gZS52YWx1ZXN9KS55KGEp KCFlLmxlbmd0aCYmZD9kOmUpKSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlPQpzLmZv ckVhY2goZnVuY3Rpb24oZSl7ZS5zZXJpZXM9M0R0fSl9KSxjJiZlWzBdLnZhbHVlcy5tYXAoZnVu Y3Rpb24odCxuKXt2YXI9CiByPTNEMCxpPTNEMDtlLm1hcChmdW5jdGlvbihlKXt2YXIgdD0zRGUu dmFsdWVzW25dO3Quc2l6ZT0zRE1hdGguYWJzKHQueSksdD0KLnk8MD8odC55MT0zRGksaS09M0R0 LnNpemUpOih0LnkxPTNEdC5zaXplK3Iscis9M0R0LnNpemUpfSl9KTt2YXIgTD0zRHkmJmI/PQpb XTplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0 dXJue3g6dShlLHQpLHk6YSg9CmUsdCkseTA6ZS55MCx5MTplLnkxfX0pfSk7aS5kb21haW4oeXx8 ZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLj0KeH0pKS5yYW5nZUJhbmRzKHd8 fFswLGddLFMpLHMuZG9tYWluKGJ8fGQzLmV4dGVudChkMy5tZXJnZShMKS5tYXAoZnVuY3Rpb24o PQplKXtyZXR1cm4gYz9lLnk+MD9lLnkxOmUueTErZS55OmUueX0pLmNvbmNhdChmKSkpLnJhbmdl KEV8fFtDLDBdKSxpLmRvbWFpbig9CilbMF09M0Q9M0Q9M0RpLmRvbWFpbigpWzFdJiYoaS5kb21h aW4oKVswXT9pLmRvbWFpbihbaS5kb21haW4oKVswXS1pLmRvbWFpbj0KKClbMF0qLjAxLGkuZG9t YWluKClbMV0raS5kb21haW4oKVsxXSouMDFdKTppLmRvbWFpbihbLTEsMV0pKSxzLmRvbWFpbigp WzBdPQo9M0Q9M0Q9M0RzLmRvbWFpbigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5k b21haW4oKVswXStzLmRvbWFpbigpWzA9Cl0qLjAxLHMuZG9tYWluKClbMV0tcy5kb21haW4oKVsx XSouMDFdKTpzLmRvbWFpbihbLTEsMV0pKSxUPTNEVHx8aSxOPTNETnx8cz0KO3ZhciBBPTNEay5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aWJhciIpLmRhdGEoW2VdKSxPPTNEQS5lbnRlcigp LmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGliYXIiKSxN PTNETy5hcHBlbmQoImRlZnMiKSxfPTNETy49CmFwcGVuZCgiZyIpLEQ9M0RBLnNlbGVjdCgiZyIp O18uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxBLmF0dD0KcigidHJhbnNm b3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLE0uYXBwZW5kKCJjbGlwUGF0 aCIpLmF0dHIoPQoiaWQiLCJudi1lZGdlLWNsaXAtIitvKS5hcHBlbmQoInJlY3QiKSxBLnNlbGVj dCgiI252LWVkZ2UtY2xpcC0iK28rIiByZWN0Iik9Ci5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVp Z2h0IixDKSxELmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNsaXAtIj0KK28rIiki OiIiKTt2YXIgUD0zREEuc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAi KS5kYXRhKGZ1bmN0PQppb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KTtQ LmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm89CmtlLW9wYWNpdHkiLDFlLTYpLnN0eWxl KCJmaWxsLW9wYWNpdHkiLDFlLTYpLFAuZXhpdCgpLnNlbGVjdEFsbCgicmVjdC5udi1iYT0KciIp LmF0dHIoInkiLGZ1bmN0aW9uKGUpe3JldHVybiBjP04oZS55MCk6TigwKX0pLmF0dHIoImhlaWdo dCIsMCkucmVtb3ZlKCksPQpQLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1n cm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXI9CiIsZnVuY3Rpb24oZSl7cmV0dXJu IGUuaG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSkucz0K dHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCl9KSxQLnN0eWxlKCJzdHJv a2Utb3BhY2l0eSIsMSkuc3R5PQpsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBIPTNEUC5zZWxl Y3RBbGwoInJlY3QubnYtYmFyIikuZGF0YShmdW5jdGlvbih0KXs9CnJldHVybiBkJiYhZS5sZW5n dGg/ZC52YWx1ZXM6dC52YWx1ZXN9KTtILmV4aXQoKS5yZW1vdmUoKTt2YXIgQj0zREguZW50ZXIo KT0KLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUs dCk8MD8ibnYtYmFyIG5lZ2F0aXZlPQoiOiJudi1iYXIgcG9zaXRpdmUifSkuYXR0cigieCIsZnVu Y3Rpb24odCxuLHIpe3JldHVybiBjPzA6cippLnJhbmdlQmFuZCgpL2U9Ci5sZW5ndGh9KS5hdHRy KCJ5IixmdW5jdGlvbihlKXtyZXR1cm4gTihjP2UueTA6MCl9KS5hdHRyKCJoZWlnaHQiLDApLmF0 dHIoIj0Kd2lkdGgiLGkucmFuZ2VCYW5kKCkvKGM/MTplLmxlbmd0aCkpLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4iPQp0cmFuc2xhdGUoIitpKHUoZSx0KSkrIiwwKSJ9KTtI LnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIHAoZSxuLHQ9Cil9KS5zdHlsZSgi c3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIHAoZSxuLHQpfSkub24oIm1vdXNlb3ZlciIs ZnVuY3Rpbz0Kbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLHguZWxl bWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4pPQoscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10s cG9zOltpKHUodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2U9CnJpZXMrLjUp L2UubGVuZ3RoLHMoYSh0LG4pKyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6 dC5zZXJpZXMsZT0KOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMu c2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhPQoxKSx4LmVsZW1lbnRNb3VzZW91dCh7dmFs dWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6biw9CnNlcmll c0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXt4 LmVsZW1lbnRDbGljaz0KKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10s cG9zOltpKHUodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lPQoubGVuZ3RoLzI6dC5zZXJpZXMrLjUp L2UubGVuZ3RoLHMoYSh0LG4pKyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW49CmRl eDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigi ZGJsY2xpY2siLGZ1bmN0aT0Kb24odCxuKXt4LmVsZW1lbnREYmxDbGljayh7dmFsdWU6YSh0LG4p LHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbaSh1PQoodCxuKSkraS5yYW5nZUJhbmQo KSooYz9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjA9 CikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2 ZW50LnN0b3BQcm9wYWdhdGlvbj0KKCl9KSxILmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3Jl dHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyPQogcG9zaXRpdmUifSkuYXR0 cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitpKHUoZSx0KSkr Iiw9CjApIn0pLHYmJihtfHwobT0zRGUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksSC5zdHls ZSgiZmlsbCIsZnVuY3Rpb24oZSx0LD0Kbil7cmV0dXJuIGQzLnJnYih2KGUsdCkpLmRhcmtlciht Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0PQppb24oZSx0KXtyZXR1 cm4hbVt0XX0pW25dKS50b1N0cmluZygpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4p e3JldHU9CnJuIGQzLnJnYih2KGUsdCkpLmRhcmtlcihtLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4hbVt0XX0pW25dKS50b1N0cmluZygp fSkpLGM/SC5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBzKGM/ZS55PQoxOjApfSkuYXR0 cigiaGVpZ2h0IixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGUueSso Yz9lLnkwOjA9CikpLXMoYz9lLnkwOjApKSwxKX0pLmF0dHIoIngiLGZ1bmN0aW9uKHQsbil7cmV0 dXJuIGM/MDp0LnNlcmllcyppLnJhbmdlQmFuZD0KKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIs aS5yYW5nZUJhbmQoKS8oYz8xOmUubGVuZ3RoKSk6SC5hdHRyKCJ4IixmdW5jdGlvPQpuKHQsbil7 cmV0dXJuIHQuc2VyaWVzKmkucmFuZ2VCYW5kKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIsaS5y YW5nZUJhbmQoKS89CmUubGVuZ3RoKS5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUs dCk8MD9zKDApOnMoMCktcyhhKGUsdCkpPDE/cygwKT0KLTE6cyhhKGUsdCkpfHwwfSkuYXR0cigi aGVpZ2h0IixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGEoPQplLHQp KS1zKDApKSwxKXx8MH0pLFQ9M0RpLmNvcHkoKSxOPTNEcy5jb3B5KCl9KSxDfXZhciB0PTNEe3Rv cDowLHJpZ2h0OjAsYm89CnR0b206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZDMuc2Nh bGUub3JkaW5hbCgpLHM9M0RkMy5zY2FsZS5saW5lYXIoKT0KLG89M0RNYXRoLmZsb29yKE1hdGgu cmFuZG9tKCkqMWU0KSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uPQoo ZSl7cmV0dXJuIGUueX0sZj0zRFswXSxsPTNEITAsYz0zRCExLGg9M0QiemVybyIscD0zRGUudXRp bHMuZGVmYXVsdENvbG9yKCk9CixkPTNEITEsdj0zRG51bGwsbSxnPTNEMTIwMCx5LGIsdyxFLFM9 M0QuMSx4PTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbD0KZW1lbnRDbGljayIsImVsZW1l bnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxULE47cmV0 PQp1cm4gQy5kaXNwYXRjaD0zRHgsQy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5k KEMpLEMueD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEMp OnV9LEMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGE9M0RlLEMp OmF9LEMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9w PTNEPQp0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5 cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmk9Cm5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNE dHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYj0Kb3R0b20sdC5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEMpOnR9LEMud2lk dGg9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxDKTpufSxD LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLEMp OnJ9LEMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oaT0z RGUsQyk6aX0sQy55U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cz0zRGUsQyk6PQpzfSxDLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oeT0zRGUsQyk6eX0sQy55RG9tYWluPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy54UmFuZ2U9M0RmdW5jdGlvbihlKXs9CnJldHVybiBh cmd1bWVudHMubGVuZ3RoPyh3PTNEZSxDKTp3fSxDLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudD0Kcy5sZW5ndGg/KEU9M0RlLEMpOkV9LEMuZm9yY2VZPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlPQosQyk6Zn0sQy5zdGFja2VkPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMuc3RhY2s9Ck9mZnNl dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxDKTpofSxDLmNs aXBFZGdlPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQyk6 bH0sQy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KHA9M0Rl LnV0aWxzLmdldENvbG9yKHQpLEMpOnB9LEMuYmFyQ29sb3I9M0RmdW5jdGlvbih0KXtyZXQ9CnVy biBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZS51dGlscy5nZXRDb2xvcih0KSxDKTp2fSxDLmRpc2Fi bGVkPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQyk6bX0s Qy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KG89M0RlLEMpOm99 LEMuaGlkZWFibGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGU9 CixDKTpkfSxDLmRlbGF5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9 M0RlLEMpOmd9LEMuZ3JvdXBTcD0KYWNpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oUz0zRGUsQyk6U30sQ30sZS5tb2RlbHMubXVsdGlCPQphckNoYXJ0PTNEZnVuY3Rp b24oKXtmdW5jdGlvbiBBKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGI9M0RkMy5z ZWw9CmVjdCh0aGlzKSxrPTNEdGhpcyxPPTNEKHV8fHBhcnNlSW50KGIuc3R5bGUoIndpZHRoIikp fHw5NjApLW8ubGVmdC1vLnJpZ2h0LD0KTT0zRChhfHxwYXJzZUludChiLnN0eWxlKCJoZWlnaHQi KSl8fDQwMCktby50b3Atby5ib3R0b207QS51cGRhdGU9M0RmdW5jdGlvPQpuKCl7Yi5jYWxsKEEp fSxBLmNvbnRhaW5lcj0zRHRoaXMsUy5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVy biEhZS49CmRpc2FibGVkfSk7aWYoIXgpe3ZhciBfO3g9M0R7fTtmb3IoXyBpbiBTKVNbX11pbnN0 YW5jZW9mIEFycmF5P3hbX109M0RTW19dLj0Kc2xpY2UoMCk6eFtfXT0zRFNbX119aWYoIWV8fCFl Lmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPQpzLmxlbmd0aH0p Lmxlbmd0aCl7dmFyIEQ9M0RiLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW1RdKTtyZXR1 cm4gRC5lbnQ9CmVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0 YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZT0KKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEQu YXR0cigieCIsby5sZWZ0K08vMikuYXR0cigieSIsby50b3ArTS8yKS50ZXh0KGZ1PQpuY3Rpb24o ZSl7cmV0dXJuIGV9KSxBfWIuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz0zRHQu eFNjYWxlKCksRT0KPTNEdC55U2NhbGUoKTt2YXIgUD0zRGIuc2VsZWN0QWxsKCJnLm52LXdyYXAu bnYtbXVsdGlCYXJXaXRoTGVnZW5kIikuZGF0YShbPQplXSksSD0zRFAuZW50ZXIoKS5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1tdWx0aUJhcldpdGhMZWc9CmVuZCIp LmFwcGVuZCgiZyIpLEI9M0RQLnNlbGVjdCgiZyIpO0guYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi14IG52LWF4aT0KcyIpLEguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4 aXMiKSxILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiPQpudi1iYXJzV3JhcCIpLEguYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksSC5hcHBlbmQoImciKS5hdHQ9CnIo ImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksYyYmKGkud2lkdGgoTy1DKCkpLHQuYmFyQ29sb3Io KSYmZS5mb3JFYWNoKGZ1bj0KY3Rpb24oZSx0KXtlLmNvbG9yPTNEZDMucmdiKCIjY2NjIikuZGFy a2VyKHQqMS41KS50b1N0cmluZygpfSksQi5zZWxlY3QoIi5uPQp2LWxlZ2VuZFdyYXAiKS5kYXR1 bShlKS5jYWxsKGkpLG8udG9wIT0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCksTT0K PTNEKGF8fHBhcnNlSW50KGIuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbSks Qi5zZWxlY3QoIi5udi1sZWdlPQpuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo IitDKCkrIiwiKyAtby50b3ArIikiKSk7aWYobCl7dmFyIGo9M0Q9Clt7a2V5OiJHcm91cGVkIixk aXNhYmxlZDp0LnN0YWNrZWQoKX0se2tleToiU3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tlZCgp fT0KXTtzLndpZHRoKEMoKSkuY29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksQi5zZWxlY3Qo Ii5udi1jb250cm9sc1dyYXAiKS5kPQphdHVtKGopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgwLCIrIC1vLnRvcCsiKSIpLmNhbGwocyl9UC5hdHRyKCJ0cmFuc2Y9Cm9ybSIsInRyYW5zbGF0 ZSgiK28ubGVmdCsiLCIrby50b3ArIikiKSxkJiZCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0 dHIoIj0KdHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTysiLDApIiksdC5kaXNhYmxlZChlLm1hcChm dW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhPQpibGVkfSkpLndpZHRoKE8pLmhlaWdodChNKS5jb2xv cihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCk9Cn0pLmZpbHRlcihm dW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpO3ZhciBGPTNEQi5zZWxlY3QoIi5u di1iYXJzVz0KcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJs ZWR9KSk7Ri5jYWxsKHQpO2lmKGgpe24uc2NhPQpsZSh3KS50aWNrcyhPLzEwMCkudGlja1NpemUo LU0sMCksQi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm09CiIsInRyYW5z bGF0ZSgwLCIrRS5yYW5nZSgpWzBdKyIpIiksQi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxs KG4pO3ZhciBJPQo9M0RCLnNlbGVjdCgiLm52LXgubnYtYXhpcyA+IGciKS5zZWxlY3RBbGwoImci KTtJLnNlbGVjdEFsbCgibGluZSwgdGV4dCIpLnM9CnR5bGUoIm9wYWNpdHkiLDEpO2lmKG0pe3Zh ciBxPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrZSsiLCIrdCsiKT0KIn0sUj0z RDUsVT0zRDE3O0kuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihl LHQsbil7cmV0dXJuPQogcSgwLG4lMj0zRD0zRDA/UjpVKX0pO3ZhciB6PTNEZDMuc2VsZWN0QWxs KCIubnYteC5udi1heGlzIC5udi13cmFwIGcgZyB0ZXg9CnQiKVswXS5sZW5ndGg7Qi5zZWxlY3RB bGwoIi5udi14Lm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCIpLmF0dHIoInRyYW5zZj0Kb3Jt IixmdW5jdGlvbihlLHQpe3JldHVybiBxKDAsdD0zRD0zRD0zRDB8fHolMiE9M0Q9M0QwP1U6Uil9 KX12JiZJLmZpbHRlcihmPQp1bmN0aW9uKHQsbil7cmV0dXJuIG4lTWF0aC5jZWlsKGVbMF0udmFs dWVzLmxlbmd0aC8oTy8xMDApKSE9M0Q9M0QwfSkuc2VsZWM9CnRBbGwoInRleHQsIGxpbmUiKS5z dHlsZSgib3BhY2l0eSIsMCksZyYmSS5zZWxlY3RBbGwoIi50aWNrIHRleHQiKS5hdHRyKCJ0cj0K YW5zZm9ybSIsInJvdGF0ZSgiK2crIiAwLDApIikuc3R5bGUoInRleHQtYW5jaG9yIixnPjA/InN0 YXJ0IjoiZW5kIiksQi5zZWxlPQpjdCgiLm52LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZy5udi1h eGlzTWF4TWluIHRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSl9cCY9CiYoci5zY2FsZShFKS50aWNr cyhNLzM2KS50aWNrU2l6ZSgtTywwKSxCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikp LD0KaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe1M9M0RlLE4uc3RhdGVD aGFuZ2UoUyksQS51cGRhdGUoKX0pPQoscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0 aW9uKGUsbil7aWYoIWUuZGlzYWJsZWQpcmV0dXJuO2o9M0RqLm1hcCg9CmZ1bmN0aW9uKGUpe3Jl dHVybiBlLmRpc2FibGVkPTNEITAsZX0pLGUuZGlzYWJsZWQ9M0QhMTtzd2l0Y2goZS5rZXkpe2Nh c2UiRz0Kcm91cGVkIjp0LnN0YWNrZWQoITEpO2JyZWFrO2Nhc2UiU3RhY2tlZCI6dC5zdGFja2Vk KCEwKX1TLnN0YWNrZWQ9M0R0LnN0YWNrPQplZCgpLE4uc3RhdGVDaGFuZ2UoUyksQS51cGRhdGUo KX0pLE4ub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXt5JiZMKGUsay49CnBhcmVudE5vZGUp fSksTi5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKG4pe3R5cGVvZiBuLmRpc2FibGVkIT0zRCJ1 bmRlZmluZT0KZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmRpc2FibGVkPTNEbi5kaXNh YmxlZFt0XX0pLFMuZGlzYWJsZWQ9M0RuLmRpPQpzYWJsZWQpLHR5cGVvZiBuLnN0YWNrZWQhPTNE InVuZGVmaW5lZCImJih0LnN0YWNrZWQobi5zdGFja2VkKSxTLnN0YWNrZWQ9M0Q9Cm4uc3RhY2tl ZCksQS51cGRhdGUoKX0pfSksQX12YXIgdD0zRGUubW9kZWxzLm11bHRpQmFyKCksbj0zRGUubW9k ZWxzLmF4aXMoKT0KLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9 M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEe3RvcDozPQowLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0 OjYwfSx1PTNEbnVsbCxhPTNEbnVsbCxmPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSw9Cmw9M0Qh MCxjPTNEITAsaD0zRCEwLHA9M0QhMCxkPTNEITEsdj0zRCEwLG09M0QhMSxnPTNEMCx5PTNEITAs Yj0zRGZ1bmN0aW9uKD0KZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24r IiBvbiAiK3QrIjwvcD4ifSx3LEUsUz0zRHtzdGFja2VkPQo6ITF9LHg9M0RudWxsLFQ9M0QiTm8g RGF0YSBBdmFpbGFibGUuIixOPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHQ9Cmlw SGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxDPTNEZnVuY3Rpb24oKXtyZXR1cm4g bD8xODA6MH0saz0zRDA7dD0KLnN0YWNrZWQoITEpLG4ub3JpZW50KCJib3R0b20iKS50aWNrUGFk ZGluZyg3KS5oaWdobGlnaHRaZXJvKCEwKS5zaG93TWF4TWluPQooITEpLnRpY2tGb3JtYXQoZnVu Y3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWE9 CnQoZDMuZm9ybWF0KCIsLjFmIikpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBMPTNEZnVuY3Rpb24o aSxzKXt2YXIgbz0zRGkucG9zWz0KMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhz Lm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpPQooaS5wb2ludCxpLnBvaW50 SW5kZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxs PQo9M0RiKGkuc2VyaWVzLmtleSxhLGYsaSxBKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFs dWU8MD8ibiI6InMiLG51bGwscyk9Cn07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3Vz ZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wbz0Kc1swXStvLmxlZnQsZS5w b3NbMV0rby50b3BdLE4udG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvPQp1dC50b29sdGlwIixmdW5jdGlvbihlKXtOLnRvb2x0aXBIaWRlKGUpfSksTi5vbigidG9v bHRpcEhpZGUiLGZ1bmN0aW9uKCl7eSY9CiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQS5kaXNwYXRj aD0zRE4sQS5tdWx0aWJhcj0zRHQsQS5sZWdlbmQ9M0RpLEEueEF4aXM9Cj0zRG4sQS55QXhpcz0z RHIsZDMucmViaW5kKEEsdCwieCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlS YW5nZT0KIiwiZm9yY2VYIiwiZm9yY2VZIiwiY2xpcEVkZ2UiLCJpZCIsInN0YWNrZWQiLCJzdGFj a09mZnNldCIsImRlbGF5IiwiYmFyQ29sPQpvciIsImdyb3VwU3BhY2luZyIpLEEub3B0aW9ucz0z RGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChBKSxBLm1hcmdpbj0zRGZ1bmM9CnRpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UudG9wOj0Kby50b3Asby5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5PQpwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQi P2UuYm90dG9tOm8uYm90dG9tLG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInU9Cm5kZWZpbmVk Ij9lLmxlZnQ6by5sZWZ0LEEpOm99LEEud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD0KPyh1PTNEZSxBKTp1fSxBLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhhPTNEZSxBKTphfSxBPQouY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2w9Cm9yKGYp LEEpOmZ9LEEuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGw9M0RlLEEpOj0KbH0sQS5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGM9M0RlLEEpOmN9LEEuc2hvd1hBPQp4aXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsQSk6aH0sQS5zaG93WUF4aXM9M0RmdW5jdGk9Cm9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxBKTpwfSxBLnJpZ2h0QWxpZ25ZQXhp cz0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHIub3JpZW50 KGU/InJpZ2h0IjoibGVmdCIpLEEpOmR9LEEucmVkdWNlWFRpPQpja3M9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQSk6dn0sQS5yb3RhdGVMYWJlbHM9M0RmdW49 CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxBKTpnfSxBLnN0YWdnZXJM YWJlbHM9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxBKTpt fSxBLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhiPTNE ZSxBKTpifSxBLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHk9Cj0zRGUsQSk6eX0sQS50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhiPTNEZSxBKT0KOmJ9LEEuc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsQSk6U30sQS5kZWZhdWx0U3RhPQp0ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxBKTp4fSxBLm5vRGF0YT0zRGZ1bmN0 aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEEpOlR9LEEudHJhbnNpdGlv bkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUs QSk6a30sQX0sZS5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsPTNEZnVuY3RpPQpvbigpe2Z1bmN0 aW9uIEMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmln aHQseT0zRHI9Ci10LnRvcC10LmJvdHRvbSxDPTNEZDMuc2VsZWN0KHRoaXMpO3AmJihlPTNEZDMu bGF5b3V0LnN0YWNrKCkub2Zmc2V0KCJ6ZXJvIj0KKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJu IGUudmFsdWVzfSkueShhKShlKSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52PQphbHVlcy5m b3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pfSkscCYmZVswXS52YWx1ZXMubWFwKGZ1 bmN0aW9uKHQsbik9Cnt2YXIgcj0zRDAsaT0zRDA7ZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9M0Rl LnZhbHVlc1tuXTt0LnNpemU9M0RNYXRoLmFicyh0Lj0KeSksdC55PDA/KHQueTE9M0RpLXQuc2l6 ZSxpLT0zRHQuc2l6ZSk6KHQueTE9M0RyLHIrPTNEdC5zaXplKX0pfSk7dmFyIGs9M0RiPQomJnc/ W106ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3Jl dHVybnt4OnUoZSx0KSw9Cnk6YShlLHQpLHkwOmUueTAseTE6ZS55MX19KX0pO3MuZG9tYWluKGJ8 fGQzLm1lcmdlKGspLm1hcChmdW5jdGlvbihlKXtyZXR1cj0KbiBlLnh9KSkucmFuZ2VCYW5kcyhF fHxbMCx5XSwuMSksby5kb21haW4od3x8ZDMuZXh0ZW50KGQzLm1lcmdlKGspLm1hcChmdW5jPQp0 aW9uKGUpe3JldHVybiBwP2UueT4wP2UueTErZS55OmUueTE6ZS55fSkuY29uY2F0KGYpKSksZCYm IXA/by5yYW5nZShTfHxbby49CmRvbWFpbigpWzBdPDA/bTowLGktKG8uZG9tYWluKClbMV0+MD9t OjApXSk6by5yYW5nZShTfHxbMCxpXSksVD0zRFR8fHMsTj0zRD0KTnx8ZDMuc2NhbGUubGluZWFy KCkuZG9tYWluKG8uZG9tYWluKCkpLnJhbmdlKFtvKDApLG8oMCldKTt2YXIgTD0zRGQzLnNlbGVj PQp0KHRoaXMpLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW11bHRpYmFySG9yaXpvbnRhbCIpLmRh dGEoW2VdKSxBPTNETC5lbnRlcig9CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52 LXdyYXAgbnYtbXVsdGliYXJIb3Jpem9udGFsIiksTz0zREEuYXBwZT0KbmQoImRlZnMiKSxNPTNE QS5hcHBlbmQoImciKSxfPTNETC5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwiPQpudi1ncm91cHMiKSxMLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsi LCIrdC50b3ArIikiKTt2YXIgRD0zREw9Ci5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwo Ii5udi1ncm91cCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bj0KY3Rpb24oZSx0KXty ZXR1cm4gdH0pO0QuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFl LTYpLnN0PQp5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksRC5leGl0KCkuc3R5bGUoInN0cm9rZS1v cGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC09Cm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLEQuYXR0 cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcj0KaWVzLSIrdH0p LmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlKCJmaWxs IixmdW5jdGlvPQpuKGUsdCl7cmV0dXJuIGwoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIGwoZSx0KX0pLEQuc3R5bGU9Cigic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxl KCJmaWxsLW9wYWNpdHkiLC43NSk7dmFyIFA9M0RELnNlbGVjdEFsbCgiZy5udi1iYT0KciIpLmRh dGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSk7UC5leGl0KCkucmVtb3ZlKCk7dmFyIEg9 M0RQLmVudGVyKCkuPQphcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQsbixy KXtyZXR1cm4idHJhbnNsYXRlKCIrTihwP3QueTA6MCk9CisiLCIrKHA/MDpyKnMucmFuZ2VCYW5k KCkvZS5sZW5ndGgrcyh1KHQsbikpKSsiKSJ9KTtILmFwcGVuZCgicmVjdCIpLmF0dHIoIj0Kd2lk dGgiLDApLmF0dHIoImhlaWdodCIscy5yYW5nZUJhbmQoKS8ocD8xOmUubGVuZ3RoKSksUC5vbigi bW91c2VvdmVyIixmdW5jPQp0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVy IiwhMCkseC5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTphKHQ9CixuKSxwb2ludDp0LHNlcmllczpl W3Quc2VyaWVzXSxwb3M6W28oYSh0LG4pKyhwP3QueTA6MCkpLHModSh0LG4pKStzLnJhbmdlQj0K YW5kKCkqKHA/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGhdLHBvaW50SW5kZXg6bixz ZXJpZXNJbmRleDp0LnNlcmllPQpzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rp b24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXI9CiIsITEpLHguZWxlbWVudE1v dXNlb3V0KHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9pbnRJbmRl eD0KOm4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oImNsaWNrIixmdW5j dGlvbih0LG4pe3guZWxlbWVudENsPQppY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczpl W3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgpKig9CnA/ZS5sZW5ndGgvMjp0 LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikrKHA/dC55MDowKSldLHBvaW50SW5kZXg6bixz ZXJpZT0Kc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRp b24oKX0pLm9uKCJkYmxjbGljayIsZnVuPQpjdGlvbih0LG4pe3guZWxlbWVudERibENsaWNrKHt2 YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOls9CnModSh0LG4pKStz LnJhbmdlQmFuZCgpKihwP2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4p KyhwP3QueT0KMDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2 ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0PQppb24oKX0pLEguYXBwZW5kKCJ0ZXh0IiksZCYm IXA/KFAuc2VsZWN0KCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW89Cm4oZSx0KXty ZXR1cm4gYShlLHQpPDA/ImVuZCI6InN0YXJ0In0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCkvKGUu bGVuZ3RoKjIpKT0KLmF0dHIoImR5IiwiLjMyZW0iKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGcoYShlLHQpKX0pLFAuc2VsZWN0KCJ0ZXh0IikuPQphdHRyKCJ4IixmdW5jdGlvbihlLHQpe3Jl dHVybiBhKGUsdCk8MD8tNDpvKGEoZSx0KSktbygwKSs0fSkpOlAuc2VsZWN0QWxsKCI9CnRleHQi KS50ZXh0KCIiKSx2JiYhcD8oSC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudi1iYXItbGFiZWwi LCEwKSxQLnNlbGVjdD0KKCJ0ZXh0Lm52LWJhci1sYWJlbCIpLmF0dHIoInRleHQtYW5jaG9yIixm dW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8ic3RhPQpydCI6ImVuZCJ9KS5hdHRyKCJ5Iixz LnJhbmdlQmFuZCgpLyhlLmxlbmd0aCoyKSkuYXR0cigiZHkiLCIuMzJlbSIpLnRleHQoZnU9Cm5j dGlvbihlLHQpe3JldHVybiB1KGUsdCl9KSxQLnNlbGVjdCgidGV4dC5udi1iYXItbGFiZWwiKS5h dHRyKCJ4IixmdW5jdGlvbj0KKGUsdCl7cmV0dXJuIGEoZSx0KTwwP28oMCktbyhhKGUsdCkpKzQ6 LTR9KSk6UC5zZWxlY3RBbGwoInRleHQubnYtYmFyLWxhYmVsPQoiKS50ZXh0KCIiKSxQLmF0dHIo ImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjo9 CiJudi1iYXIgcG9zaXRpdmUifSksYyYmKGh8fChoPTNEZS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4h MH0pKSxQLnN0eWxlKCJmaWxsIj0KLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKGMoZSx0 KSkuZGFya2VyKGgubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9PQopLmZpbHRlcihmdW5jdGlv bihlLHQpe3JldHVybiFoW3RdfSlbbl0pLnRvU3RyaW5nKCl9KS5zdHlsZSgic3Ryb2tlIixmdW5j dGk9Cm9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKGMoZSx0KSkuZGFya2VyKGgubWFwKGZ1bmN0aW9u KGUsdCl7cmV0dXJuIHR9KS5maWx0ZT0KcihmdW5jdGlvbihlLHQpe3JldHVybiFoW3RdfSlbbl0p LnRvU3RyaW5nKCl9KSkscD9QLmF0dHIoInRyYW5zZm9ybSIsZnVuY3RpPQpvbihlLHQpe3JldHVy biJ0cmFuc2xhdGUoIitvKGUueTEpKyIsIitzKHUoZSx0KSkrIikifSkuc2VsZWN0KCJyZWN0Iiku YXR0cig9CiJ3aWR0aCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMobyhhKGUsdCkrZS55 MCktbyhlLnkwKSl9KS5hdHRyKCJoZWlnaD0KdCIscy5yYW5nZUJhbmQoKSk6UC5hdHRyKCJ0cmFu c2Zvcm0iLGZ1bmN0aW9uKHQsbil7cmV0dXJuInRyYW5zbGF0ZSgiKyhhKHQsPQpuKTwwP28oYSh0 LG4pKTpvKDApKSsiLCIrKHQuc2VyaWVzKnMucmFuZ2VCYW5kKCkvZS5sZW5ndGgrcyh1KHQsbikp KSsiKSJ9KS49CnNlbGVjdCgicmVjdCIpLmF0dHIoImhlaWdodCIscy5yYW5nZUJhbmQoKS9lLmxl bmd0aCkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKD0KZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5h YnMobyhhKGUsdCkpLW8oMCkpLDEpfSksVD0zRHMuY29weSgpLE49M0RvLmNvcHkoPQopfSksQ312 YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9 M0RNYXRoLmZsb289CnIoTWF0aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5vcmRpbmFsKCks bz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBlLnh9LGE9M0Rm dW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEWzBdLGw9M0RlLnV0aWxzLmRlZmF1bHRDPQpvbG9y KCksYz0zRG51bGwsaCxwPTNEITEsZD0zRCExLHY9M0QhMSxtPTNENjAsZz0zRGQzLmZvcm1hdCgi LC4yZiIpLHk9M0QxMjA9CjAsYix3LEUsUyx4PTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJl bGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbD0KZW1lbnRNb3VzZW92ZXIiLCJlbGVt ZW50TW91c2VvdXQiKSxULE47cmV0dXJuIEMuZGlzcGF0Y2g9M0R4LEMub3B0aW9ucz0zRGUuPQp1 dGlscy5vcHRpb25zRnVuYy5iaW5kKEMpLEMueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh1PTNEZSw9CkMpOnV9LEMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhhPTNEZSxDKTphfSxDLm1hcmdpbj0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9w PQo6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6 dC5yaWdodCx0LmJvdHRvbT0zRHQ9CnlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90 dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEIj0KdW5kZWZpbmVkIj9lLmxl ZnQ6dC5sZWZ0LEMpOnR9LEMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0PQpoPyhuPTNEZSxDKTpufSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhyPTNEZSxDKTpyfSw9CkMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMueVNjYWxlPTNEZnVuYz0KdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsQyk6b30sQy54RG9tYWluPTNEZnVuY3Rpb24oZSl7 cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy55RG9tYWluPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8odz0zRGUsQyk6d30sQy54UmFuZ2U9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQyk6RT0KfSxDLnlSYW5n ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxDKTpTfSxDLmZv cmNlWT0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEMpOmZ9 LEMuc3RhY2tlZD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0Rl LEMpOnB9LEMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhs PTNEZS51dGlscy5nZXRDb2xvcih0KSxDKTpsfSxDLmJhckNvbG9yPTNEZnVuY3Rpb24odCl7cmV0 dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6Y30sQy5k aXNhYmxlZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KGg9M0RlLEMp Omh9LEMuaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRD0KZSxD KTppfSxDLmRlbGF5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0Rl LEMpOnl9LEMuc2hvd1ZhPQpsdWVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGQ9M0RlLEMpOmR9LEMuc2hvd0JhckxhYmVscz0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHY9M0RlLEMpOnZ9LEMudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihlKT0K e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxDKTpnfSxDLnZhbHVlUGFkZGluZz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEMpOm19LEN9LGUubW9k ZWxzLm11bHRpQmFySG9yaXpvbnRhbENoYXJ0PTNEZnVuY3Rpb249Cigpe2Z1bmN0aW9uIEMoZSl7 cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgZD0zRGQzLnNlbGVjdCh0aGlzKSxtPTNEdGhp cz0KLFQ9M0QodXx8cGFyc2VJbnQoZC5zdHlsZSgid2lkdGgiKSl8fDk2MCktby5sZWZ0LW8ucmln aHQsaz0zRChhfHxwYXJzZUludChkPQouc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJv dHRvbTtDLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7ZC5jYWxsKEMpfSxDLmM9Cm9udGFpbmVyPTNEdGhp cyxiLmRpc2FibGVkPTNEZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYo IXcpez0KdmFyIEw7dz0zRHt9O2ZvcihMIGluIGIpYltMXWluc3RhbmNlb2YgQXJyYXk/d1tMXT0z RGJbTF0uc2xpY2UoMCk6d1tMXT0zRGJbPQpMXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCk9Cnt2YXIgQT0zRGQu c2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbRV0pO3JldHVybiBBLmVudGVyKCkuYXBwZW5k KCJ0ZXh0Ij0KKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdl bSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pPQpkZGxlIiksQS5hdHRyKCJ4IixvLmxlZnQrVC8y KS5hdHRyKCJ5IixvLnRvcCtrLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cn0pLEN9ZC5z ZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxnPTNEdC54U2NhbGUoKSx5PTNEdC55U2Nh bGUoKTt2YXIgTz0KPTNEZC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aUJhckhvcml6b250 YWxDaGFydCIpLmRhdGEoW2VdKSxNPTNETy5lbnRlPQpyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5hcHA9CmVuZCgi ZyIpLF89M0RPLnNlbGVjdCgiZyIpO00uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52 LWF4aXMiKSxNLmFwcD0KZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXplcm9MaW5lPQoiKS5hcHBlbmQoImxpbmUiKSxNLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmE9CnR0 cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LWNvbnRyb2xzV3JhcCIpLD0KYyYmKGkud2lkdGgoVC14KCkpLHQuYmFyQ29sb3IoKSYmZS5mb3JF YWNoKGZ1bmN0aW9uKGUsdCl7ZS5jb2xvcj0zRGQzLnJnYigiPQojY2NjIikuZGFya2VyKHQqMS41 KS50b1N0cmluZygpfSksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbCg9 CmkpLG8udG9wIT0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCksaz0zRChhfHxwYXJz ZUludChkLnN0eWxlKCJoZWlnaD0KdCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbSksXy5zZWxlY3Qo Ii5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhPQpuc2xhdGUoIit4KCkrIiwi KyAtby50b3ArIikiKSk7aWYobCl7dmFyIEQ9M0Rbe2tleToiR3JvdXBlZCIsZGlzYWJsZWQ6dC5z dGE9CmNrZWQoKX0se2tleToiU3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tlZCgpfV07cy53aWR0 aCh4KCkpLmNvbG9yKFsiIzQ0NCIsIj0KIzQ0NCIsIiM0NDQiXSksXy5zZWxlY3QoIi5udi1jb250 cm9sc1dyYXAiKS5kYXR1bShEKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuPQpzbGF0ZSgwLCIrIC1v LnRvcCsiKSIpLmNhbGwocyl9Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxlZnQr IiwiK289Ci50b3ArIikiKSx0LmRpc2FibGVkKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRp c2FibGVkfSkpLndpZHRoKFQpLmhlaWdodD0KKGspLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuY29sb3J8fGYoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pPQp7cmV0dXJuIWVb bl0uZGlzYWJsZWR9KSk7dmFyIFA9M0RfLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZS5m aWx0ZXIoZnU9Cm5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtQLmNhbGwodCk7aWYoaCl7 bi5zY2FsZShnKS50aWNrcyhrLzI0KS50aWNrUz0KaXplKC1ULDApLF8uc2VsZWN0KCIubnYteC5u di1heGlzIikuY2FsbChuKTt2YXIgSD0zRF8uc2VsZWN0KCIubnYteC5udi1heGlzPQoiKS5zZWxl Y3RBbGwoImciKTtILnNlbGVjdEFsbCgibGluZSwgdGV4dCIpfXAmJihyLnNjYWxlKHkpLnRpY2tz KFQvMTAwKS50aWM9CmtTaXplKC1rLDApLF8uc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitrKyIpIj0KKSxfLnNlbGVjdCgiLm52LXkubnYtYXhp cyIpLmNhbGwocikpLF8uc2VsZWN0KCIubnYtemVyb0xpbmUgbGluZSIpLmF0dHIoIngxPQoiLHko MCkpLmF0dHIoIngyIix5KDApKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLC1rKSxpLmRpc3BhdGNo Lm9uKCJzdGF0ZUNoYW49CmdlIixmdW5jdGlvbihlKXtiPTNEZSxTLnN0YXRlQ2hhbmdlKGIpLEMu dXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbD0KaWNrIixmdW5jdGlvbihlLG4pe2lm KCFlLmRpc2FibGVkKXJldHVybjtEPTNERC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzPQph YmxlZD0zRCEwLGV9KSxlLmRpc2FibGVkPTNEITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQi OnQuc3RhY2tlZCghMSk7YnI9CmVhaztjYXNlIlN0YWNrZWQiOnQuc3RhY2tlZCghMCl9Yi5zdGFj a2VkPTNEdC5zdGFja2VkKCksUy5zdGF0ZUNoYW5nZShiKSxDLj0KdXBkYXRlKCl9KSxTLm9uKCJ0 b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7diYmTihlLG0ucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFu PQpnZVN0YXRlIixmdW5jdGlvbihuKXt0eXBlb2Ygbi5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYm KGUuZm9yRWFjaChmdW5jdGlvbig9CmUsdCl7ZS5kaXNhYmxlZD0zRG4uZGlzYWJsZWRbdF19KSxi LmRpc2FibGVkPTNEbi5kaXNhYmxlZCksdHlwZW9mIG4uc3RhY2tlZD0KIT0zRCJ1bmRlZmluZWQi JiYodC5zdGFja2VkKG4uc3RhY2tlZCksYi5zdGFja2VkPTNEbi5zdGFja2VkKSxDLnVwZGF0ZSgp fSl9PQopLEN9dmFyIHQ9M0RlLm1vZGVscy5tdWx0aUJhckhvcml6b250YWwoKSxuPTNEZS5tb2Rl bHMuYXhpcygpLHI9M0RlLm1vZGVscy49CmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkuaGVp Z2h0KDMwKSxzPTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxvPQo9M0R7dG9wOjMwLHJp Z2h0OjIwLGJvdHRvbTo1MCxsZWZ0OjYwfSx1PTNEbnVsbCxhPTNEbnVsbCxmPTNEZS51dGlscy5k ZWZhdWw9CnRDb2xvcigpLGw9M0QhMCxjPTNEITAsaD0zRCEwLHA9M0QhMCxkPTNEITEsdj0zRCEw LG09M0RmdW5jdGlvbihlLHQsbixyLGkpez0KcmV0dXJuIjxoMz4iK2UrIiAtICIrdCsiPC9oMz4i KyI8cD4iK24rIjwvcD4ifSxnLHksYj0zRHtzdGFja2VkOmR9LHc9M0RudWxsPQosRT0zRCJObyBE YXRhIEF2YWlsYWJsZS4iLFM9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlk ZSIsInN0YXQ9CmVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLHg9M0RmdW5jdGlvbigpe3JldHVybiBs PzE4MDowfSxUPTNEMDt0LnN0YWNrZWQoZCksbj0KLm9yaWVudCgibGVmdCIpLnRpY2tQYWRkaW5n KDUpLmhpZ2hsaWdodFplcm8oITEpLnNob3dNYXhNaW4oITEpLnRpY2tGb3JtYXQoPQpmdW5jdGlv bihlKXtyZXR1cm4gZX0pLHIub3JpZW50KCJib3R0b20iKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgi LC4xZiIpKSxzLnU9CnBkYXRlU3RhdGUoITEpO3ZhciBOPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0z RGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9Cj0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8 MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KT0KKSxmPTNE ci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPTNEbShpLnNlcmll cy5rZXksYSxmLGksPQpDKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8iZSI6Inci LG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCI9CmVsZW1lbnRNb3VzZW92ZXIudG9vbHRp cCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rby5sZWZ0LGUucG9zWzFdK28udD0Kb3Bd LFMudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRp cCIsZnVuY3Rpb24oZSl7PQpTLnRvb2x0aXBIaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1 bmN0aW9uKCl7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLEM9Ci5kaXNwYXRjaD0zRFMsQy5tdWx0 aWJhcj0zRHQsQy5sZWdlbmQ9M0RpLEMueEF4aXM9M0RuLEMueUF4aXM9M0RyLGQzLnJlYmluZD0K KEMsdCwieCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNl WCIsImZvcmNlWSIsImNsaXBFPQpkZ2UiLCJpZCIsImRlbGF5Iiwic2hvd1ZhbHVlcyIsInNob3dC YXJMYWJlbHMiLCJ2YWx1ZUZvcm1hdCIsInN0YWNrZWQiLCJiYXI9CkNvbG9yIiksQy5vcHRpb25z PTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEMpLEMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0 dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8oby50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5l ZCI/ZS50b3A6by50b3Asby5yaWdoPQp0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ ZS5yaWdodDpvLnJpZ2h0LG8uYm90dG9tPTNEdHlwZW9mIGUuYm90dG89Cm0hPTNEInVuZGVmaW5l ZCI/ZS5ib3R0b206by5ib3R0b20sby5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVk Ij9lLj0KbGVmdDpvLmxlZnQsQyk6b30sQy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh1PTNEZSxDKTp1PQp9LEMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLEMpOmF9LEMuY29sb3I9M0RmdW49CmN0aW9uKHQpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGYp LEMpOmZ9LD0KQy5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obD0zRGUsQyk6bH0sQy5zaG93TGVnPQplbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oYz0zRGUsQyk6Y30sQy5zaG93WEF4aXM9M0RmdW5jdGk9Cm9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxDKTpofSxDLnNob3dZQXhpcz0zRGZ1bmN0aW9u KGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEMpOnB9LEMudG9vbHRpcD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KG09M0RlLEMpOm19LEMudG9vbHRp cHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQyk9Cjp2fSxD LnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09 M0RlLEMpOm19LEMucz0KdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhiPTNEZSxDKTpifSxDLmRlZmF1bHRTdGF0ZT0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHc9M0RlLEMpOnd9LEMubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4g YXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQyk6RX0sQy50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5j dGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxDKTpUfSxDfSxlLm1vZGVs cy5tdWx0aUNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBDPQooZSl7cmV0dXJuIGUuZWFjaChm dW5jdGlvbihlKXt2YXIgdT0zRGQzLnNlbGVjdCh0aGlzKSxmPTNEdGhpcztDLnVwZGF0ZT0zRGY9 CnVuY3Rpb24oKXt1LmNhbGwoQyl9LEMuY29udGFpbmVyPTNEdGhpczt2YXIgaz0zRChyfHxwYXJz ZUludCh1LnN0eWxlKCJ3aWR0aD0KIikpfHw5NjApLXQubGVmdC10LnJpZ2h0LEw9M0QoaXx8cGFy c2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXQudG9wLXQuPQpib3R0b20sQT0zRGUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSImJmUu eUE9Cnhpcz0zRD0zRDF9KSxPPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJs ZWQmJmUudHlwZT0zRD0zRCJsaW5lIj0KJiZlLnlBeGlzPTNEPTNEMn0pLE09M0RlLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEPQoiYmFyIiYmZS55QXhp cz0zRD0zRDF9KSxfPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUu dHlwZT0KPTNEPTNEImJhciImJmUueUF4aXM9M0Q9M0QyfSksRD0zRGUuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkJiZlPQoudHlwZT0zRD0zRCJhcmVhIiYmZS55QXhpcz0zRD0z RDF9KSxQPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWI9CmxlZCYmZS50eXBl PTNEPTNEImFyZWEiJiZlLnlBeGlzPTNEPTNEMn0pLEg9M0RlLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZT0KLmRpc2FibGVkJiZlLnlBeGlzPTNEPTNEMX0pLm1hcChmdW5jdGlvbihlKXtyZXR1 cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsPQp0KXtyZXR1cm57eDplLngseTplLnl9fSl9KSxC PTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUE9Cnhpcz0zRD0z RDJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3Jl dHVybnt4OmUueD0KLHk6ZS55fX0pfSk7YS5kb21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKEguY29u Y2F0KEIpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS54PQp9KSkucmFuZ2UoWzAsa10pO3ZhciBqPTNE dS5zZWxlY3RBbGwoImcud3JhcC5tdWx0aUNoYXJ0IikuZGF0YShbZV0pLEY9M0RqLmU9Cm50ZXIo KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIndyYXAgbnZkMyBtdWx0aUNoYXJ0IikuYXBwZW5k KCJnIik7Ri5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwieCBheGlzIiksRi5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsInkxIGF4aXMiKSxGLmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJ5 MiBheGlzIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVzMVdyYXAiKSxGLmE9CnBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lczJXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsImJhcnMxV3JhcD0KIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJhcnMyV3Jh cCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGFjPQprMVdyYXAiKSxGLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwic3RhY2syV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9 CiIsImxlZ2VuZFdyYXAiKTt2YXIgST0zRGouc2VsZWN0KCJnIik7cyYmKHgud2lkdGgoay8yKSxJ LnNlbGVjdCgiLmxlZ2VuZFdyYT0KcCIpLmRhdHVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBl Lm9yaWdpbmFsS2V5PTNEZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuPQpkZWZpbmVkP2Uua2V5OmUu b3JpZ2luYWxLZXksZS5rZXk9M0RlLm9yaWdpbmFsS2V5KyhlLnlBeGlzPTNEPTNEMT8iIjoiIChy aWc9Cmh0IGF4aXMpIiksZX0pKS5jYWxsKHgpLHQudG9wIT0zRHguaGVpZ2h0KCkmJih0LnRvcD0z RHguaGVpZ2h0KCksTD0zRChpfHxwYT0KcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS10 LnRvcC10LmJvdHRvbSksSS5zZWxlY3QoIi5sZWdlbmRXcmFwIikuYXR0PQpyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitrLzIrIiwiKyAtdC50b3ArIikiKSksZC53aWR0aChrKS5oZWlnaHQoTCku aW50ZXI9CnBvbGF0ZSgibW9ub3RvbmUiKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfT0KKS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4h ZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0KPTNEPTNEImxpbmUi fSkpLHYud2lkdGgoaykuaGVpZ2h0KEwpLmludGVycG9sYXRlKCJtb25vdG9uZSIpLmNvbG9yKGUu bWFwKGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRl cihmdW5jdGlvbih0LG4pe3JldHVybiFlW249Cl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0Qy JiZlW25dLnR5cGU9M0Q9M0QibGluZSJ9KSksbS53aWR0aChrKS5oZWlnaHQoTD0KKS5jb2xvcihl Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVy KGZ1bmN0aW9uPQoodCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDEm JmVbbl0udHlwZT0zRD0zRCJiYXIifSkpLGcud2k9CmR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5t YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLj0KZmlsdGVy KGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QyJiZl W25dLnR5cGU9M0Q9Cj0zRCJiYXIifSkpLHkud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fD0Kblt0JW4ubGVuZ3RoXX0pLmZpbHRlcihm dW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEPQoxJiZl W25dLnR5cGU9M0Q9M0QiYXJlYSJ9KSksYi53aWR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5tYXAo ZnVuY3Rpb24oZSx0KXs9CnJldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1 bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJj0KZVtuXS55QXhpcz0zRD0zRDImJmVb bl0udHlwZT0zRD0zRCJhcmVhIn0pKSxJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiPQor dC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBxPTNESS5zZWxlY3QoIi5saW5lczFXcmFwIikuZGF0 dW0oQSksUj0zREkuc2VsZWM9CnQoIi5iYXJzMVdyYXAiKS5kYXR1bShNKSxVPTNESS5zZWxlY3Qo Ii5zdGFjazFXcmFwIikuZGF0dW0oRCksej0zREkuc2VsZWN0KD0KIi5saW5lczJXcmFwIikuZGF0 dW0oTyksVz0zREkuc2VsZWN0KCIuYmFyczJXcmFwIikuZGF0dW0oXyksWD0zREkuc2VsZWN0KCIu PQpzdGFjazJXcmFwIikuZGF0dW0oUCksVj0zREQubGVuZ3RoP0QubWFwKGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnZhbHVlc30pLnJlZHU9CmNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGZ1bmN0 aW9uKGUsbil7cmV0dXJue3g6ZS54LHk6ZS55K3Rbbl0ueX19KX0pLj0KY29uY2F0KFt7eDowLHk6 MH1dKTpbXSwkPTNEUC5sZW5ndGg/UC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSku cmVkPQp1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm57 eDplLngseTplLnkrdFtuXS55fX0pfSk9Ci5jb25jYXQoW3t4OjAseTowfV0pOltdO2guZG9tYWlu KGx8fGQzLmV4dGVudChkMy5tZXJnZShIKS5jb25jYXQoViksZnVuY3Rpbz0KbihlKXtyZXR1cm4g ZS55fSkpLnJhbmdlKFswLExdKSxwLmRvbWFpbihjfHxkMy5leHRlbnQoZDMubWVyZ2UoQikuY29u Y2F0KCQpPQosZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pKS5yYW5nZShbMCxMXSksZC55RG9tYWlu KGguZG9tYWluKCkpLG0ueURvbWFpbihoLmQ9Cm9tYWluKCkpLHkueURvbWFpbihoLmRvbWFpbigp KSx2LnlEb21haW4ocC5kb21haW4oKSksZy55RG9tYWluKHAuZG9tYWluKCkpLD0KYi55RG9tYWlu KHAuZG9tYWluKCkpLEQubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFUpLmNhbGwoeSksUC5sZW5ndGgm JmQzLnRyYW5zPQppdGlvbihYKS5jYWxsKGIpLE0ubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFIpLmNh bGwobSksXy5sZW5ndGgmJmQzLnRyYW5zaXRpb249CihXKS5jYWxsKGcpLEEubGVuZ3RoJiZkMy50 cmFuc2l0aW9uKHEpLmNhbGwoZCksTy5sZW5ndGgmJmQzLnRyYW5zaXRpb24oeikuYz0KYWxsKHYp LHcudGlja3Moay8xMDApLnRpY2tTaXplKC1MLDApLEkuc2VsZWN0KCIueC5heGlzIikuYXR0cigi dHJhbnNmb3JtIiwiPQp0cmFuc2xhdGUoMCwiK0wrIikiKSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0 KCIueC5heGlzIikpLmNhbGwodyksRS50aWNrcyhMLzM9CjYpLnRpY2tTaXplKC1rLDApLGQzLnRy YW5zaXRpb24oSS5zZWxlY3QoIi55MS5heGlzIikpLmNhbGwoRSksUy50aWNrcyhMLzM2KT0KLnRp Y2tTaXplKC1rLDApLGQzLnRyYW5zaXRpb24oSS5zZWxlY3QoIi55Mi5heGlzIikpLmNhbGwoUyks SS5zZWxlY3QoIi55Mi5hPQp4aXMiKS5zdHlsZSgib3BhY2l0eSIsQi5sZW5ndGg/MTowKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLnJhbmdlKCk9ClsxXSsiLDApIikseC5kaXNwYXRj aC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0MudXBkYXRlKCl9KSxULm9uKCJ0b29sdD0K aXBTaG93IixmdW5jdGlvbihlKXtvJiZOKGUsZi5wYXJlbnROb2RlKX0pfSksQ312YXIgdD0zRHt0 b3A6MzAscmlnaHQ6MjAsYm90PQp0b206NTAsbGVmdDo2MH0sbj0zRGQzLnNjYWxlLmNhdGVnb3J5 MjAoKS5yYW5nZSgpLHI9M0RudWxsLGk9M0RudWxsLHM9M0QhMCw9Cm89M0QhMCx1PTNEZnVuY3Rp b24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwv cD0KPiJ9LGEsZixsLGMsYT0zRGQzLnNjYWxlLmxpbmVhcigpLGg9M0RkMy5zY2FsZS5saW5lYXIo KSxwPTNEZDMuc2NhbGUubGluZWFyPQooKSxkPTNEZS5tb2RlbHMubGluZSgpLnlTY2FsZShoKSx2 PTNEZS5tb2RlbHMubGluZSgpLnlTY2FsZShwKSxtPTNEZS5tb2RlbHM9Ci5tdWx0aUJhcigpLnN0 YWNrZWQoITEpLnlTY2FsZShoKSxnPTNEZS5tb2RlbHMubXVsdGlCYXIoKS5zdGFja2VkKCExKS55 U2NhbD0KZShwKSx5PTNEZS5tb2RlbHMuc3RhY2tlZEFyZWEoKS55U2NhbGUoaCksYj0zRGUubW9k ZWxzLnN0YWNrZWRBcmVhKCkueVNjYWxlPQoocCksdz0zRGUubW9kZWxzLmF4aXMoKS5zY2FsZShh KS5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLEU9M0RlLm1vZGU9CmxzLmF4aXMoKS5z Y2FsZShoKS5vcmllbnQoImxlZnQiKSxTPTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKHApLm9yaWVu dCgicmlnaD0KdCIpLHg9M0RlLm1vZGVscy5sZWdlbmQoKS5oZWlnaHQoMzApLFQ9M0RkMy5kaXNw YXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwPQpIaWRlIiksTj0zRGZ1bmN0aW9uKHQsbil7dmFy IHI9M0R0LnBvc1swXSsobi5vZmZzZXRMZWZ0fHwwKSxpPTNEdC5wb3NbMV0rKG49Ci5vZmZzZXRU b3B8fDApLHM9M0R3LnRpY2tGb3JtYXQoKShkLngoKSh0LnBvaW50LHQucG9pbnRJbmRleCkpLG89 M0QodC5zZXJpZT0Kcy55QXhpcz0zRD0zRDI/UzpFKS50aWNrRm9ybWF0KCkoZC55KCkodC5wb2lu dCx0LnBvaW50SW5kZXgpKSxhPTNEdSh0LnNlcmllPQpzLmtleSxzLG8sdCxDKTtlLnRvb2x0aXAu c2hvdyhbcixpXSxhLHVuZGVmaW5lZCx1bmRlZmluZWQsbi5vZmZzZXRQYXJlbnQpfTs9CnJldHVy biBkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2Uu cG9zPTNEW2UucG9zWz0KMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUp fSksZC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0PQoudG9vbHRpcCIsZnVuY3Rpb24oZSl7 VC50b29sdGlwSGlkZShlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG89Cm9s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3Bd LFQudG9vbHRpcFNob3coZT0KKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksPQptLmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGU9 CmZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksbS5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aT0KcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLGcu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsPQpmdW5jdGlvbihlKXtlLnBv cz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxn LmQ9CmlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRv b2x0aXBIaWRlKGUpfSkseS5kaXNwYT0KdGNoLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7 aWYoIU1hdGgucm91bmQoeS55KCkoZS5wb2ludCkqMTAwKSlyZXR1cm4gPQpzZXRUaW1lb3V0KGZ1 bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEp fSwwKSw9CiExO2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29s dGlwU2hvdyhlKX0pLHkuZGlzcGF0Y2gubz0KbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUpe1Qu dG9vbHRpcEhpZGUoZSl9KSxiLmRpc3BhdGNoLm9uKCJ0b29sdGlwU2hvdyIsPQpmdW5jdGlvbihl KXtpZighTWF0aC5yb3VuZChiLnkoKShlLnBvaW50KSoxMDApKXJldHVybiBzZXRUaW1lb3V0KGZ1 bmN0aW9uKCk9CntkMy5zZWxlY3RBbGwoIi5wb2ludC5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwh MSl9LDApLCExO2UucG9zPTNEW2UucG9zWzBdKz0KdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRv b2x0aXBTaG93KGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0PQppb24oZSl7 VC50b29sdGlwSGlkZShlKX0pLGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRp cCIsZnVuY3Rpb249CihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3Bd LFQudG9vbHRpcFNob3coZSl9KSxkLmRpc3BhdGNoLj0Kb24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksdi5kaXNwYXRjaC5vbigiPQplbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVm dCxlLnBvc1sxXSt0LnQ9Cm9wXSxULnRvb2x0aXBTaG93KGUpfSksdi5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpez0KVC50b29sdGlwSGlkZShlKX0pLFQu b24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe28mJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxDPQou ZGlzcGF0Y2g9M0RULEMubGluZXMxPTNEZCxDLmxpbmVzMj0zRHYsQy5iYXJzMT0zRG0sQy5iYXJz Mj0zRGcsQy5zdGFjazE9M0Q9CnksQy5zdGFjazI9M0RiLEMueEF4aXM9M0R3LEMueUF4aXMxPTNE RSxDLnlBeGlzMj0zRFMsQy5vcHRpb25zPTNEZS51dGlscy5vcD0KdGlvbnNGdW5jLmJpbmQoQyks Qy54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFg9M0RlLGQueChl PQopLG0ueChlKSxDKTpnZXRYfSxDLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZ2V0WT0zRGUsZC55KGU9CiksbS55KGUpLEMpOmdldFl9LEMueURvbWFpbjE9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQz0KKTpsfSxDLnlEb21haW4y PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMubWFy Z2luPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0zRGUsQyk6dH0s Qy53aWR0aD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLEMp OnJ9LEMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oaT0z RGUsQyk6aX0sQy5jb2xvcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu PTNEZSx4PQouY29sb3IoZSksQyk6bn0sQy5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEM9Cik6c30sQy50b29sdGlwcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxDKTpvfSxDLnRvb2x0aT0KcENvbnRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQ30sZS5t b2RlbHMub2hsPQpjQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB4KGUpe3JldHVybiBlLmVhY2go ZnVuY3Rpb24oZSl7dmFyIGc9M0RuLXQubGVmdC09CnQucmlnaHQseD0zRHItdC50b3AtdC5ib3R0 b20sVD0zRGQzLnNlbGVjdCh0aGlzKTtzLmRvbWFpbih5fHxkMy5leHRlbnQoZVswXT0KLnZhbHVl cy5tYXAodSkuY29uY2F0KHApKSksdj9zLnJhbmdlKHd8fFtnKi41L2VbMF0udmFsdWVzLmxlbmd0 aCxnKihlWzBdLnZhPQpsdWVzLmxlbmd0aC0uNSkvZVswXS52YWx1ZXMubGVuZ3RoXSk6cy5yYW5n ZSh3fHxbMCxnXSksby5kb21haW4oYnx8W2QzLm1pbig9CmVbMF0udmFsdWVzLm1hcChoKS5jb25j YXQoZCkpLGQzLm1heChlWzBdLnZhbHVlcy5tYXAoYykuY29uY2F0KGQpKV0pLnJhbmdlKD0KRXx8 W3gsMF0pLHMuZG9tYWluKClbMF09M0Q9M0Q9M0RzLmRvbWFpbigpWzFdJiYocy5kb21haW4oKVsw XT9zLmRvbWFpbihbcy5kPQpvbWFpbigpWzBdLXMuZG9tYWluKClbMF0qLjAxLHMuZG9tYWluKClb MV0rcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihbLTE9CiwxXSkpLG8uZG9tYWluKClbMF09 M0Q9M0Q9M0RvLmRvbWFpbigpWzFdJiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21haT0K bigpWzBdK28uZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClbMV0tby5kb21haW4oKVsxXSouMDFd KTpvLmRvbWFpbihbLTEsMV0pPQopO3ZhciBOPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgi Zy5udi13cmFwLm52LW9obGNCYXIiKS5kYXRhKFtlWzBdLnZhbHU9CmVzXSksQz0zRE4uZW50ZXIo KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1vaGxjQmFyIiksaz0z RD0KQy5hcHBlbmQoImRlZnMiKSxMPTNEQy5hcHBlbmQoImciKSxBPTNETi5zZWxlY3QoImciKTtM LmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3MiLCJudi10aWNrcyIpLE4uYXR0cigidHJhbnNmb3Jt IiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLFQub249CigiY2xpY2siLGZ1bmN0 aW9uKGUsdCl7Uy5jaGFydENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0p fSksaz0KLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWNoYXJ0LWNsaXAtcGF0aC0i K2kpLmFwcGVuZCgicmVjdCIpLE4uc2VsPQplY3QoIiNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIg cmVjdCIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCJoZWlnaHQiLHgpLEEuYXQ9CnRyKCJjbGlwLXBh dGgiLG0/InVybCgjbnYtY2hhcnQtY2xpcC1wYXRoLSIraSsiKSI6IiIpO3ZhciBPPTNETi5zZWxl Y3QoIi5udj0KLXRpY2tzIikuc2VsZWN0QWxsKCIubnYtdGljayIpLmRhdGEoZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KTtPLmV4aXQoKS5yZW1vdmUoPQopO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgi cGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQsbil7cmV0dXJuKGYoZSw9CnQpPmwoZSx0 KT8ibnYtdGljayBuZWdhdGl2ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiIG52LXRpY2stIituKyIt Iit0fSkuYXR0cj0KKCJkIixmdW5jdGlvbih0LG4pe3ZhciByPTNEZy9lWzBdLnZhbHVlcy5sZW5n dGgqLjk7cmV0dXJuIm0wLDBsMCwiKyhvKGYodCxuPQopKS1vKGModCxuKSkpKyJsIisgLXIvMisi LDBsIityLzIrIiwwbDAsIisobyhoKHQsbikpLW8oZih0LG4pKSkrImwwLCIrKG8obCg9CnQsbikp LW8oaCh0LG4pKSkrImwiK3IvMisiLDBsIisgLXIvMisiLDB6In0pLmF0dHIoInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSx0KT0Ke3JldHVybiJ0cmFuc2xhdGUoIitzKHUoZSx0KSkrIiwiK28oYyhlLHQp KSsiKSJ9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbih0PQosbil7ZDMuc2VsZWN0KHRoaXMpLmNs YXNzZWQoImhvdmVyIiwhMCksUy5lbGVtZW50TW91c2VvdmVyKHtwb2ludDp0LHNlcmllczo9CmVb MF0scG9zOltzKHUodCxuKSksbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6MCxl OmQzLmV2ZW50fSl9KS5vbj0KKCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhp cykuY2xhc3NlZCgiaG92ZXIiLCExKSxTLmVsZW1lbnRNb3VzPQplb3V0KHtwb2ludDp0LHNlcmll czplWzBdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGk9 CmNrIixmdW5jdGlvbihlLHQpe1MuZWxlbWVudENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGlu ZGV4OnQscG9zOltzKHUoZSx0KT0KKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2 ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmPQp1bmN0aW9uKGUsdCl7Uy5l bGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShlLHQp KSw9Cm8oYShlLHQpKV0sZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9u KCl9KTtPLmF0dHIoImNsYXNzIixmdT0KbmN0aW9uKGUsdCxuKXtyZXR1cm4oZihlLHQpPmwoZSx0 KT8ibnYtdGljayBuZWdhdGl2ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiPQogbnYtdGljay0iK24r Ii0iK3R9KSxkMy50cmFuc2l0aW9uKE8pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXty ZXR1cm49CiJ0cmFuc2xhdGUoIitzKHUoZSx0KSkrIiwiK28oYyhlLHQpKSsiKSJ9KS5hdHRyKCJk IixmdW5jdGlvbih0LG4pe3ZhciByPTNEZz0KL2VbMF0udmFsdWVzLmxlbmd0aCouOTtyZXR1cm4i bTAsMGwwLCIrKG8oZih0LG4pKS1vKGModCxuKSkpKyJsIisgLXIvMisiLDBsPQoiK3IvMisiLDBs MCwiKyhvKGgodCxuKSktbyhmKHQsbikpKSsibDAsIisobyhsKHQsbikpLW8oaCh0LG4pKSkrImwi K3IvMisiLDA9CmwiKyAtci8yKyIsMHoifSl9KSx4fXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90 dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MD0KMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRv bSgpKjFlNCkscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lPQphcigpLHU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0z RGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGUub3Blbn0sbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmNs b3NlfSxjPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuaD0KaWdofSxoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGUubG93fSxwPTNEW10sZD0zRFtdLHY9M0QhMSxtPTNEITAsZz0zRGUudXRpbHMuPQpkZWZh dWx0Q29sb3IoKSx5LGIsdyxFLFM9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRD bGljayIsImVsZW1lbnQ9CkRibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3Vz ZW91dCIpO3JldHVybiB4LmRpc3BhdGNoPTNEUyx4Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYmluZCh4KSx4Lng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpo Pyh1PTNEZSx4KTp1fSx4Lnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o YT0zRGUseCk6YX0seC5vcGU9Cm49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUseCk6Zn0seC5jbG9zZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGw9M0RlLHgpOmx9LHguaGlnaD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu PQpsZW5ndGg/KGM9M0RlLHgpOmN9LHgubG93PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGg9M0RlLHgpOmg9Cn0seC5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEIj0KdW5kZWZpbmVkIj9lLnRv cDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0 LnJpPQpnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0 b206dC5ib3R0b20sdC5sZWZ0PTNEdHk9CnBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVm dDp0LmxlZnQseCk6dH0seC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5s ZW5ndGg/KG49M0RlLHgpOm59LHguaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5nPQp0aD8ocj0zRGUseCk6cn0seC54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGUseCk6c309Cix4LnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx4KTpvfSx4LnhEb21haW49M0RmdT0KbmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSx4KTp5fSx4LnlEb21haW49M0RmdW5jdGlv bihlKXtyZXR1PQpybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSx4KTpifSx4LnhSYW5nZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KHc9M0RlLHgpOnd9LHgueVJhbmdl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHgpOj0KRX0seC5m b3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUseCk6cH0s eC5mb3JjZVk9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx4 KTpkfSx4LnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyh2 PTNEZSx4KTp2fSx4LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxl bmd0aD8obT0zRGUseCk6bX0seC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhnPTNEZS51PQp0aWxzLmdldENvbG9yKHQpLHgpOmd9LHguaWQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUseCk9CjppfSx4fSxlLm1vZGVscy5waWU9 M0RmdW5jdGlvbigpe2Z1bmN0aW9uIFMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdT0K bmN0aW9uIHEoZSl7dmFyIHQ9M0QoZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpKjkwL01hdGguUEkt OTA7cmV0dXJuIHQ+OTA/dC0xPQo4MDp0fWZ1bmN0aW9uIFIoZSl7ZS5lbmRBbmdsZT0zRGlzTmFO KGUuZW5kQW5nbGUpPzA6ZS5lbmRBbmdsZSxlLnN0YXJ0QW5nbGU9Cj0zRGlzTmFOKGUuc3RhcnRB bmdsZSk/MDplLnN0YXJ0QW5nbGUsbXx8KGUuaW5uZXJSYWRpdXM9M0QwKTt2YXIgdD0zRGQzLmlu dD0KZXJwb2xhdGUodGhpcy5fY3VycmVudCxlKTtyZXR1cm4gdGhpcy5fY3VycmVudD0zRHQoMCks ZnVuY3Rpb24oZSl7cmV0dXJuIEEoPQp0KGUpKX19ZnVuY3Rpb24gVShlKXtlLmlubmVyUmFkaXVz PTNEMDt2YXIgdD0zRGQzLmludGVycG9sYXRlKHtzdGFydEFuZ2xlOjA9CixlbmRBbmdsZTowfSxl KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEEodChlKSl9fXZhciBvPTNEbi10LmxlZnQtdC5y aWdodD0KLGY9M0RyLXQudG9wLXQuYm90dG9tLFM9M0RNYXRoLm1pbihvLGYpLzIseD0zRFMtUy81 LFQ9M0RkMy5zZWxlY3QodGhpcyksTj0KPTNEVC5zZWxlY3RBbGwoIi5udi13cmFwLm52LXBpZSIp LmRhdGEoZSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnZkMyBu di13cmFwIG52LXBpZSBudi1jaGFydC0iK3UpLGs9M0RDLmFwcGVuZCgiZyIpLEw9M0ROLnNlbGVj dCgiZyI9Cik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXBpZSIpLGsuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1waWVMYT0KYmVscyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLEwuc2VsZWN0KCIubnYtPQpwaWUiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLzIrIiwiK2YvMisiKSIpLEwuc2VsZWN0KCIubnYt cGllTGFiZWw9CnMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLzIrIiwiK2YvMisi KSIpLFQub24oImNsaWNrIixmdW5jdGlvbihlLD0KdCl7RS5jaGFydENsaWNrKHtkYXRhOmUsaW5k ZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pfSk7dmFyIEE9M0RkMy5zdmcuYXJjKCkuPQpvdXRlclJh ZGl1cyh4KTt5JiZBLnN0YXJ0QW5nbGUoeSksYiYmQS5lbmRBbmdsZShiKSxtJiZBLmlubmVyUmFk aXVzKFMqdyk7dmE9CnIgTz0zRGQzLmxheW91dC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKGZ1bmN0 aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPzA6cyhlKT0KfSksTT0zRE4uc2VsZWN0KCIubnYtcGll Iikuc2VsZWN0QWxsKCIubnYtc2xpY2UiKS5kYXRhKE8pLF89M0ROLnNlbGVjdCgiLm52PQotcGll TGFiZWxzIikuc2VsZWN0QWxsKCIubnYtbGFiZWwiKS5kYXRhKE8pO00uZXhpdCgpLnJlbW92ZSgp LF8uZXhpdCgpLnJlbW89CnZlKCk7dmFyIEQ9M0RNLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1zbGljZSIpLm9uKCJtb3VzZW92ZXIiLD0KZnVuY3Rpb24oZSx0KXtkMy5zZWxl Y3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxFLmVsZW1lbnRNb3VzZW92ZXIoe2xhYmVsPQo6 aShlLmRhdGEpLHZhbHVlOnMoZS5kYXRhKSxwb2ludDplLmRhdGEscG9pbnRJbmRleDp0LHBvczpb ZDMuZXZlbnQucGFnZVgsZDM9Ci5ldmVudC5wYWdlWV0saWQ6dX0pfSkub24oIm1vdXNlb3V0Iixm dW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKD0KImhvdmVyIiwhMSksRS5lbGVt ZW50TW91c2VvdXQoe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRh PQosaW5kZXg6dCxpZDp1fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7RS5lbGVtZW50Q2xp Y2soe2xhYmVsOmkoZS5kYXRhKSw9CnZhbHVlOnMoZS5kYXRhKSxwb2ludDplLmRhdGEsaW5kZXg6 dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pLGQzLmV2ZW50LnN0b3BQcm9wYT0KZ2F0aW9uKCl9KS5vbigi ZGJsY2xpY2siLGZ1bmN0aW9uKGUsdCl7RS5lbGVtZW50RGJsQ2xpY2soe2xhYmVsOmkoZS5kYXRh KSx2PQphbHVlOnMoZS5kYXRhKSxwb2ludDplLmRhdGEsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6 dX0pLGQzLmV2ZW50LnN0b3BQcm9wYWc9CmF0aW9uKCl9KTtNLmF0dHIoImZpbGwiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIGEoZSx0KX0pLmF0dHIoInN0cm9rZSIsZnVuY3Rpbz0KbihlLHQpe3JldHVy biBhKGUsdCl9KTt2YXIgUD0zREQuYXBwZW5kKCJwYXRoIikuZWFjaChmdW5jdGlvbihlKXt0aGlz Ll9jdXJyPQplbnQ9M0RlfSk7TS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBKTtpZihsKXt2YXIg SD0zRGQzLnN2Zy5hcmMoKS5pbm5lclJhZGk9CnVzKDApO2MmJihIPTNEQSksaCYmKEg9M0RkMy5z dmcuYXJjKCkub3V0ZXJSYWRpdXMoQS5vdXRlclJhZGl1cygpKSksXy5lbnRlcj0KKCkuYXBwZW5k KCJnIikuY2xhc3NlZCgibnYtbGFiZWwiLCEwKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0Rk My5zZWxlY3QoPQp0aGlzKTtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7aWYoZyl7ZS5v dXRlclJhZGl1cz0zRHgrMTAsZS5pbm5lclJhZGk9CnVzPTNEeCsxNTt2YXIgdD0zRChlLnN0YXJ0 QW5nbGUrZS5lbmRBbmdsZSkvMiooMTgwL01hdGguUEkpO3JldHVybihlLnN0YXJ0QT0KbmdsZStl LmVuZEFuZ2xlKS8yPE1hdGguUEk/dC09M0Q5MDp0Kz0zRDkwLCJ0cmFuc2xhdGUoIitILmNlbnRy b2lkKGUpKyIpIHJvPQp0YXRlKCIrdCsiKSJ9cmV0dXJuIGUub3V0ZXJSYWRpdXM9M0RTKzEwLGUu aW5uZXJSYWRpdXM9M0RTKzE1LCJ0cmFuc2xhdGUoIis9CkguY2VudHJvaWQoZSkrIikifSksbi5h cHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiI2ZmZiIpLnN0eWxlKCJmaWxsIiwiIz0KZmZm IikuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKSxuLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsZz8oZS5zPQp0YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMjxNYXRoLlBJPyJzdGFydCI6 ImVuZCI6Im1pZGRsZSIpLnN0eWxlKCJmaWxsIiwiIzAwMCI9Cil9KTt2YXIgQj0zRHt9LGo9M0Qx NCxGPTNEMTQwLEk9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlWzBdL0YpKkYrIj0K LCIrTWF0aC5mbG9vcihlWzFdL2opKmp9O18uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtp ZihnKXtlLm91dGVyUmFkaXVzPQo9M0R4KzEwLGUuaW5uZXJSYWRpdXM9M0R4KzE1O3ZhciB0PTNE KGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yKigxODAvTWF0aC49ClBJKTtyZXR1cm4oZS5zdGFy dEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0aC5QST90LT0zRDkwOnQrPTNEOTAsInRyYW5zbGF0ZSgi Kz0KSC5jZW50cm9pZChlKSsiKSByb3RhdGUoIit0KyIpIn1lLm91dGVyUmFkaXVzPTNEUysxMCxl LmlubmVyUmFkaXVzPTNEUysxNTt2PQphciBuPTNESC5jZW50cm9pZChlKSxyPTNESShuKTtyZXR1 cm4gQltyXSYmKG5bMV0tPTNEaiksQltJKG4pXT0zRCEwLCJ0cmFuc2w9CmF0ZSgiK24rIikifSks Xy5zZWxlY3QoIi5udi1sYWJlbCB0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIixnPyhkLnN0YXJ0 QW5nbD0KZStkLmVuZEFuZ2xlKS8yPE1hdGguUEk/InN0YXJ0IjoiZW5kIjoibWlkZGxlIikudGV4 dChmdW5jdGlvbihlLHQpe3ZhciBuPTNEPQooZS5lbmRBbmdsZS1lLnN0YXJ0QW5nbGUpLygyKk1h dGguUEkpLHI9M0R7a2V5OmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscGU9CnJjZW50OmQzLmZv cm1hdCgiJSIpKG4pfTtyZXR1cm4gZS52YWx1ZSYmbj52P3JbcF06IiJ9KX19KSxTfXZhciB0PTNE e3RvcDowLD0KcmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q1MDAscj0zRDUwMCxpPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGUueH0scz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUueX0sbz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBlLmRlc2NyaXB0aW9ufSx1PTNETWF0aC5mbG9vcig9Ck1hdGgucmFu ZG9tKCkqMWU0KSxhPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxmPTNEZDMuZm9ybWF0KCIsLjJm IiksbD0zRCEwLD0KYz0zRCEwLGg9M0QhMSxwPTNEImtleSIsdj0zRC4wMixtPTNEITEsZz0zRCEx LHk9M0QhMSxiPTNEITEsdz0zRC41LEU9M0RkMy5kPQppc3BhdGNoKCJjaGFydENsaWNrIiwiZWxl bWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImU9CmxlbWVu dE1vdXNlb3V0Iik7cmV0dXJuIFMuZGlzcGF0Y2g9M0RFLFMub3B0aW9ucz0zRGUudXRpbHMub3B0 aW9uc0Z1bmMuYmluZD0KKFMpLFMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0KPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50 b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6PQp0LnJp Z2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQu Ym90dG9tLHQubGVmdD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5s ZWZ0LFMpOnR9LFMud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhuPTNEZSxTKTpufSxTLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5s ZW5ndGg/KHI9M0RlLFMpOnJ9LFMudmFsdWVzPTNEZnVuY3Rpb24odCl7cmV0dXJuIGUubG9nKCJw aWUudmFsdWVzKCkgaXMgbj0KbyBsb25nZXIgc3VwcG9ydGVkLiIpLFN9LFMueD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxTPQopOml9LFMueT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZDMuZnVuY3RvcihlKSxTKTpzfSxTLmQ9 CmVzY3JpcHRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUs Uyk6b30sUy5zaG93TGFiZWxzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obD0zRGUsUyk6bH0sUy5sYWJlbFN1bmJlYW1MYXlvdXQ9M0Q9CmZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxTKTpnfSxTLmRvbnV0TGFiZWxzT3V0c2lkZT0zRGZ1 bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLFMpOmh9LFMucGllTGFi ZWxzT3V0c2lkZT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Rl LFMpOmN9LFMubGFiZWxUeXBlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0 aD8ocD0zRGUscD0zRHB8fCJrZXkiLFMpOnB9LFMuZG9udXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndT0KbWVudHMubGVuZ3RoPyhtPTNEZSxTKTptfSxTLmRvbnV0UmF0aW89M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyh3PTNEZSxTKTp3fSxTLnN0YXJ0QW5nbGU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsUyk9Cjp5fSxTLmVuZEFu Z2xlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLFMpOmJ9LFMu aWQ9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxTKTp1fSxT LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUudXRp bHMuZ2V0Q29sb3IodCksUyk6YX0sUy52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLFMpOmZ9LFMubGFiZWxUaHJlc2hvbGQ9M0RmdW5jdGlv bihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxTKTp2fSxTfSxlLm1vZGVscy5w aWVDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gPQp2KGUpe3JldHVybiBlLmVhY2goZnVuY3Rp b24oZSl7dmFyIHU9M0RkMy5zZWxlY3QodGhpcyksYT0zRHRoaXMsZj0zRChpfHxwYXI9CnNlSW50 KHUuc3R5bGUoIndpZHRoIikpfHw5NjApLXIubGVmdC1yLnJpZ2h0LGQ9M0Qoc3x8cGFyc2VJbnQo dS5zdHlsZSgiaGVpZz0KaHQiKSl8fDQwMCktci50b3Atci5ib3R0b207di51cGRhdGU9M0RmdW5j dGlvbigpe3UuY2FsbCh2KX0sdi5jb250YWluZXI9M0R0PQpoaXMsbC5kaXNhYmxlZD0zRGUubWFw KGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFjKXt2YXIgbTtjPTNEe309Cjtm b3IobSBpbiBsKWxbbV1pbnN0YW5jZW9mIEFycmF5P2NbbV09M0RsW21dLnNsaWNlKDApOmNbbV09 M0RsW21dfWlmKCFlfHwhZT0KLmxlbmd0aCl7dmFyIGc9M0R1LnNlbGVjdEFsbCgiLm52LW5vRGF0 YSIpLmRhdGEoW2hdKTtyZXR1cm4gZy5lbnRlcigpLmFwcGVuPQpkKCJ0ZXh0IikuYXR0cigiY2xh c3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmM9 CmhvciIsIm1pZGRsZSIpLGcuYXR0cigieCIsci5sZWZ0K2YvMikuYXR0cigieSIsci50b3ArZC8y KS50ZXh0KGZ1bmN0aW9uKGUpez0KcmV0dXJuIGV9KSx2fXUuc2VsZWN0QWxsKCIubnYtbm9EYXRh IikucmVtb3ZlKCk7dmFyIHk9M0R1LnNlbGVjdEFsbCgiZy5udi13PQpyYXAubnYtcGllQ2hhcnQi KS5kYXRhKFtlXSksYj0zRHkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMg bnY9Ci13cmFwIG52LXBpZUNoYXJ0IikuYXBwZW5kKCJnIiksdz0zRHkuc2VsZWN0KCJnIik7Yi5h cHBlbmQoImciKS5hdHRyKCJjbGFzcz0KIiwibnYtcGllV3JhcCIpLGIuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksbyYmKG4ud2lkdGgoZikuPQprZXkodC54KCkpLHku c2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwobiksci50b3AhPTNEbi5oZWln aHQoKSY9CiYoci50b3A9M0RuLmhlaWdodCgpLGQ9M0Qoc3x8cGFyc2VJbnQodS5zdHlsZSgiaGVp Z2h0IikpfHw0MDApLXIudG9wLXIuYm90dD0Kb20pLHkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1yLnRvcCsiKSIpPQopLHkuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci5sZWZ0KyIsIityLnRvcCsiKSIpLHQud2lkdGgoZiku aGVpZ2h0KGQ9Cik7dmFyIEU9M0R3LnNlbGVjdCgiLm52LXBpZVdyYXAiKS5kYXR1bShbZV0pO2Qz LnRyYW5zaXRpb24oRSkuY2FsbCh0KSxuLmRpcz0KcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5j dGlvbihlKXtsPTNEZSxwLnN0YXRlQ2hhbmdlKGwpLHYudXBkYXRlKCl9KSx0LmRpPQpzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtwLnRvb2x0aXBIaWRlKGUp fSkscC5vbigiY2g9CmFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNE InVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpbz0KbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRp c2FibGVkW25dfSksbC5kaXNhYmxlZD0zRHQuZGlzYWJsZWQpLHYudXBkYXRlKCl9KX0pPQosdn12 YXIgdD0zRGUubW9kZWxzLnBpZSgpLG49M0RlLm1vZGVscy5sZWdlbmQoKSxyPTNEe3RvcDozMCxy aWdodDoyMCxib3R0b209CjoyMCxsZWZ0OjIwfSxpPTNEbnVsbCxzPTNEbnVsbCxvPTNEITAsdT0z RGUudXRpbHMuZGVmYXVsdENvbG9yKCksYT0zRCEwLGY9Cj0zRGZ1bmN0aW9uKGUsdCxuLHIpe3Jl dHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrdCsiPC9wPiJ9LGw9M0R7fSxjPTNEbnVsbD0KLGg9 M0QiTm8gRGF0YSBBdmFpbGFibGUuIixwPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9v bHRpcEhpZGUiLCJzdGF0PQplQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxkPTNEZnVuY3Rpb24obixy KXt2YXIgaT0zRHQuZGVzY3JpcHRpb24oKShuLnBvaW50KXw9Cnx0LngoKShuLnBvaW50KSxzPTNE bi5wb3NbMF0rKHImJnIub2Zmc2V0TGVmdHx8MCksbz0zRG4ucG9zWzFdKyhyJiZyLm9mZnNldD0K VG9wfHwwKSx1PTNEdC52YWx1ZUZvcm1hdCgpKHQueSgpKG4ucG9pbnQpKSxhPTNEZihpLHUsbix2 KTtlLnRvb2x0aXAuc2hvdyhbPQpzLG9dLGEsbi52YWx1ZTwwPyJuIjoicyIsbnVsbCxyKX07cmV0 dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG89Cm9sdGlwIixmdW5jdGlvbihl KXtlLnBvcz0zRFtlLnBvc1swXStyLmxlZnQsZS5wb3NbMV0rci50b3BdLHAudG9vbHRpcFNob3co ZT0KKX0pLHAub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXthJiZkKGUpfSkscC5vbigidG9v bHRpcEhpZGUiLGZ1bmN0aW9uKCl7PQphJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksdi5sZWdlbmQ9 M0RuLHYuZGlzcGF0Y2g9M0RwLHYucGllPTNEdCxkMy5yZWJpbmQodiw9CnQsInZhbHVlRm9ybWF0 IiwidmFsdWVzIiwieCIsInkiLCJkZXNjcmlwdGlvbiIsImlkIiwic2hvd0xhYmVscyIsImRvbnV0 TGFiZT0KbHNPdXRzaWRlIiwicGllTGFiZWxzT3V0c2lkZSIsImxhYmVsVHlwZSIsImRvbnV0Iiwi ZG9udXRSYXRpbyIsImxhYmVsVGhyZXNoPQpvbGQiKSx2Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlv bnNGdW5jLmJpbmQodiksdi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMu bGVuZ3RoPyhyLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpyLnRvcCxy LnJpZ2h0PQo9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnIucmlnaHQs ci5ib3R0b209M0R0eXBlb2YgZS5ib3R0b209CiE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpyLmJv dHRvbSxyLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubD0KZWZ0OnIubGVm dCx2KTpyfSx2LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9 M0RlLHYpOml9PQosdi5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocz0zRGUsdik6c30sdi5jb2xvcj0zRGZ1bmM9CnRpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHU9M0RlLnV0aWxzLmdldENvbG9yKHIpLG4uY29sb3IodSksdC5jb2xvcj0KKHUpLHYp OnV9LHYuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhv PTNEZSx2KTpvfSx2PQoudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYT0zRGUsdik6YX0sdi50b29sdGlwQ29udGU9Cm50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHYpOmZ9LHYuc3RhdGU9M0RmdW5jdGlvbihlKT0Ke3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSx2KTpsfSx2LmRlZmF1bHRTdGF0ZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHYpOmN9LHYubm9EYXRhPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8oaD0zRGUsdik6aH0sdn0sZS5t b2RlbHMuc2NhdHRlcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSShxKXtyZXR1cm4gcS5lYWNoKD0K ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gUSgpe2lmKCFnKXJldHVybiExO3ZhciBlLGk9M0RkMy5tZXJn ZShJLm1hcChmdW5jdGlvbihlPQosdCl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLG4p e3ZhciByPTNEZihlLG4pLGk9M0RsKGUsbik7cmV0dXJuW28ocik9Cix1KGkpLHQsbixlXX0pLmZp bHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBiKGVbNF0sdCl9KX0pKTtpZihEPTNEPTNEPTNEITAp ez0KaWYoeCl7dmFyIGE9M0RYLnNlbGVjdCgiZGVmcyIpLnNlbGVjdEFsbCgiLm52LXBvaW50LWNs aXBzIikuZGF0YShbc10pLmVudGVyPQooKTthLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJjbGFz cyIsIm52LXBvaW50LWNsaXBzIikuYXR0cigiaWQiLCJudi1wb2ludHM9Ci1jbGlwLSIrcyk7dmFy IGM9M0RYLnNlbGVjdCgiI252LXBvaW50cy1jbGlwLSIrcykuc2VsZWN0QWxsKCJjaXJjbGUiKS5k YXRhKD0KaSk7Yy5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsVCksYy5leGl0KCku cmVtb3ZlKCksYy5hdHRyKCJjeCIsZnVuPQpjdGlvbihlKXtyZXR1cm4gZVswXX0pLmF0dHIoImN5 IixmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pLFguc2VsZWN0KCIubnYtcG89CmludC1wYXRocyIp LmF0dHIoImNsaXAtcGF0aCIsInVybCgjbnYtcG9pbnRzLWNsaXAtIitzKyIpIil9aS5sZW5ndGgm JihpLnB1cz0KaChbby5yYW5nZSgpWzBdLTIwLHUucmFuZ2UoKVswXS0yMCxudWxsLG51bGxdKSxp LnB1c2goW28ucmFuZ2UoKVsxXSsyMCx1LnJhPQpuZ2UoKVsxXSsyMCxudWxsLG51bGxdKSxpLnB1 c2goW28ucmFuZ2UoKVswXS0yMCx1LnJhbmdlKClbMF0rMjAsbnVsbCxudWxsXSk9CixpLnB1c2go W28ucmFuZ2UoKVsxXSsyMCx1LnJhbmdlKClbMV0tMjAsbnVsbCxudWxsXSkpO3ZhciBoPTNEZDMu Z2VvbS5wb2x5Zz0Kb24oW1stMTAsLTEwXSxbLTEwLHIrMTBdLFtuKzEwLHIrMTBdLFtuKzEwLC0x MF1dKSxwPTNEMWUtNjtpPTNEaS5zb3J0KGZ1bmN0PQppb24oZSx0KXtyZXR1cm4gZVswXS10WzBd fHxlWzFdLXRbMV19KTtmb3IodmFyIGQ9M0QwO2Q8aS5sZW5ndGgtMTspTWF0aC5hYnM9CihpW2Rd WzBdLWlbZCsxXVswXSk8cCYmTWF0aC5hYnMoaVtkXVsxXS1pW2QrMV1bMV0pPHA/aS5zcGxpY2Uo ZCsxLDEpOmQrKzt2YT0KciB2PTNEZDMuZ2VvbS52b3Jvbm9pKGkpLm1hcChmdW5jdGlvbihlLHQp e3JldHVybntkYXRhOmguY2xpcChlKSxzZXJpZXM6aVt0PQpdWzJdLHBvaW50OmlbdF1bM119fSks bT0zRFguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXQ9CmEo dik7bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3Jl dHVybiJudi1wYXRoLSIrdD0KfSksbS5leGl0KCkucmVtb3ZlKCksbS5hdHRyKCJkIixmdW5jdGlv bihlKXtyZXR1cm4hZXx8IWUuZGF0YXx8ZS5kYXRhLmxlbmd0PQpoPTNEPTNEPTNEMD8iTSAwIDAi OiJNIitlLmRhdGEuam9pbigiTCIpKyJaIn0pO3ZhciB5PTNEZnVuY3Rpb24oZSxuKXtpZihGKXI9 CmV0dXJuIDA7dmFyIHI9M0RJW2Uuc2VyaWVzXTtpZih0eXBlb2Ygcj0zRD0zRCJ1bmRlZmluZWQi KXJldHVybjt2YXIgaT0zRHIudj0KYWx1ZXNbZS5wb2ludF07bih7cG9pbnQ6aSxzZXJpZXM6cixw b3M6W28oZihpLGUucG9pbnQpKSt0LmxlZnQsdShsKGksZS5wb2luPQp0KSkrdC50b3BdLHNlcmll c0luZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6ZS5wb2ludH0pfTttLm9uKCJjbGljayIsZnVuY3Rp b249CihlKXt5KGUsXy5lbGVtZW50Q2xpY2spfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7 eShlLF8uZWxlbWVudE1vdXNlb3Zlcj0KKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXt5 KGUsXy5lbGVtZW50TW91c2VvdXQpfSl9ZWxzZSBYLnNlbGVjdCgiLm52PQotZ3JvdXBzIikuc2Vs ZWN0QWxsKCIubnYtZ3JvdXAiKS5zZWxlY3RBbGwoIi5udi1wb2ludCIpLm9uKCJjbGljayIsZnVu Y3Rpb249CihlLG4pe2lmKEZ8fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgcj0zRElbZS5zZXJp ZXNdLGk9M0RyLnZhbHVlc1tuXTtfLmVsZT0KbWVudENsaWNrKHtwb2ludDppLHNlcmllczpyLHBv czpbbyhmKGksbikpK3QubGVmdCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luPQpkZXg6ZS5zZXJp ZXMscG9pbnRJbmRleDpufSl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLG4pe2lmKEZ8fCFJ W2Uuc2VyaWU9CnNdKXJldHVybiAwO3ZhciByPTNESVtlLnNlcmllc10saT0zRHIudmFsdWVzW25d O18uZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ6aT0KLHNlcmllczpyLHBvczpbbyhmKGksbikpK3Qu bGVmdCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luZGV4OmUuc2VyaWVzLHBvaW50PQpJbmRleDpu fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7aWYoRnx8IUlbZS5zZXJpZXNdKXJldHVy biAwO3ZhciBuPQo9M0RJW2Uuc2VyaWVzXSxyPTNEbi52YWx1ZXNbdF07Xy5lbGVtZW50TW91c2Vv dXQoe3BvaW50OnIsc2VyaWVzOm4sc2VyaWVzSW49CmRleDplLnNlcmllcyxwb2ludEluZGV4OnR9 KX0pO0Y9M0QhMX12YXIgcT0zRG4tdC5sZWZ0LXQucmlnaHQsUj0zRHItdC50b3AtdD0KLmJvdHRv bSxVPTNEZDMuc2VsZWN0KHRoaXMpO0kuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZv ckVhY2goZnVuY3RpPQpvbihlKXtlLnNlcmllcz0zRHR9KX0pO3ZhciBXPTNETiYmQyYmQT9bXTpk My5tZXJnZShJLm1hcChmdW5jdGlvbihlKXtyZXR1cm49CiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm57eDpmKGUsdCkseTpsKGUsdCksc2l6ZTpjKGUsdCl9fSl9KSk7by5kbz0KbWFp bihOfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pLmNvbmNhdChkKSkp LHcmJklbMF0/by5yYW5nPQplKGt8fFsocSpFK3EpLygyKklbMF0udmFsdWVzLmxlbmd0aCkscS1x KigxK0UpLygyKklbMF0udmFsdWVzLmxlbmd0aCldKTpvLnI9CmFuZ2Uoa3x8WzAscV0pLHUuZG9t YWluKEN8fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkuY29uY2F0KD0K dikpKS5yYW5nZShMfHxbUiwwXSksYS5kb21haW4oQXx8ZDMuZXh0ZW50KFcubWFwKGZ1bmN0aW9u KGUpe3JldHVybiBlLnNpemV9PQopLmNvbmNhdChtKSkpLnJhbmdlKE98fFsxNiwyNTZdKTtpZihv LmRvbWFpbigpWzBdPTNEPTNEPTNEby5kb21haW4oKVsxXXx8dS49CmRvbWFpbigpWzBdPTNEPTNE PTNEdS5kb21haW4oKVsxXSlNPTNEITA7by5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClb MT0KXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0tby5kb21haW4oKVsw XSouMDEsby5kb21haW4oKVsxXStvPQouZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFd KSksdS5kb21haW4oKVswXT0zRD0zRD0zRHUuZG9tYWluKClbMV0mJig9CnUuZG9tYWluKClbMF0/ dS5kb21haW4oW3UuZG9tYWluKClbMF0tdS5kb21haW4oKVswXSouMDEsdS5kb21haW4oKVsxXSt1 LmRvbT0KYWluKClbMV0qLjAxXSk6dS5kb21haW4oWy0xLDFdKSksaXNOYU4oby5kb21haW4oKVsw XSkmJm8uZG9tYWluKFstMSwxXSksaXNOPQphTih1LmRvbWFpbigpWzBdKSYmdS5kb21haW4oWy0x LDFdKSxQPTNEUHx8byxIPTNESHx8dSxCPTNEQnx8YTt2YXIgWD0zRFUuc2U9CmxlY3RBbGwoImcu bnYtd3JhcC5udi1zY2F0dGVyIikuZGF0YShbSV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKCJnIiku YXR0cigiYz0KbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zY2F0dGVyIG52LWNoYXJ0LSIrcysoTT8i IG52LXNpbmdsZS1wb2ludCI6IiIpKSwkPTNEPQpWLmFwcGVuZCgiZGVmcyIpLEo9M0RWLmFwcGVu ZCgiZyIpLEs9M0RYLnNlbGVjdCgiZyIpO0ouYXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52 LWdyb3VwcyIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1wb2ludC1wYXRocyIpLFgu YXR0cigidHJhbj0Kc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksJC5h cHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJuPQp2LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgi cmVjdCIpLFguc2VsZWN0KCIjbnYtZWRnZS1jbGlwLSIrcysiIHJlY3QiKS5hdHRyKCI9CndpZHRo IixxKS5hdHRyKCJoZWlnaHQiLFI+MD9SOjApLEsuYXR0cigiY2xpcC1wYXRoIixTPyJ1cmwoI252 LWVkZ2UtY2xpcC0iKz0KcysiKSI6IiIpLEY9M0QhMDt2YXIgRz0zRFguc2VsZWN0KCIubnYtZ3Jv dXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhPQooZnVuY3Rpb24oZSl7cmV0dXJuIGV9 LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO0cuZW50ZXIoKS5hcHBlbmQoImciKS5zdHk9Cmxl KCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksRy5leGl0 KCkucmVtb3ZlKCksRy5hdD0KdHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91 cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUu aG92ZXJ9KSxHLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHk9 CmxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0pLnN0eWxlKCJzdHJva2Ut b3BhY2l0eSIsMSkuc3R5bGUoIj0KZmlsbC1vcGFjaXR5IiwuNSk7aWYocCl7dmFyIFk9M0RHLnNl bGVjdEFsbCgiY2lyY2xlLm52LXBvaW50IikuZGF0YShmdW5jdGlvPQpuKGUpe3JldHVybiBlLnZh bHVlc30seSk7WS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9u KGU9Cix0KXtyZXR1cm4gZS5jb2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIGUuY29sb3J9KS5hdHRyKCJjeD0KIixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5h TnRvWmVybyhQKGYodCxuKSkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsPQpuKXtyZXR1cm4gZS51 dGlscy5OYU50b1plcm8oSChsKHQsbikpKX0pLmF0dHIoInIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IE1hdGg9Ci5zcXJ0KGEoYyhlLHQpKS9NYXRoLlBJKX0pLFkuZXhpdCgpLnJlbW92ZSgpLEcuZXhp dCgpLnNlbGVjdEFsbCgicGF0aC5udi1wbz0KaW50IikuYXR0cigiY3giLGZ1bmN0aW9uKHQsbil7 cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oZih0LG4pKSl9KS5hdHRyKCJjPQp5IixmdW5jdGlv bih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh1KGwodCxuKSkpfSkucmVtb3ZlKCksWS5l YWNoKGZ1bmM9CnRpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgibnYtcG9pbnQiLCEw KS5jbGFzc2VkKCJudi1wb2ludC0iK3QsITApLj0KY2xhc3NlZCgiaG92ZXIiLCExKX0pLFkuYXR0 cigiY3giLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oPQpmKHQsbikp KX0pLmF0dHIoImN5IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh1KGwo dCxuKSkpfSkuYXQ9CnRyKCJyIixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnNxcnQoYShjKGUs dCkpL01hdGguUEkpfSl9ZWxzZXt2YXIgWT0zREcucz0KZWxlY3RBbGwoInBhdGgubnYtcG9pbnQi KS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO1kuZW50ZXIoKS5hcHBlPQpuZCgi cGF0aCIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuc3R5bGUo InN0cm9rZSIsZnVuY3Q9CmlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuYXR0cigidHJhbnNmb3Jt IixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIj0KK1AoZihlLHQpKSsiLCIrSChsKGUs dCkpKyIpIn0pLmF0dHIoImQiLGQzLnN2Zy5zeW1ib2woKS50eXBlKGgpLnNpemUoZnVuY3RpPQpv bihlLHQpe3JldHVybiBhKGMoZSx0KSl9KSksWS5leGl0KCkucmVtb3ZlKCksRy5leGl0KCkuc2Vs ZWN0QWxsKCJwYXRoLm52LXA9Cm9pbnQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuInRyYW5zbGF0ZSgiK28oZihlLHQpKSsiLCIrdShsKD0KZSx0KSkrIikifSkucmVtb3Zl KCksWS5lYWNoKGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoIm52LXBvaW50 PQoiLCEwKS5jbGFzc2VkKCJudi1wb2ludC0iK3QsITApLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxZ LmF0dHIoInRyYW5zZm9ybSIsZnU9Cm5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGYo ZSx0KSkrIiwiK3UobChlLHQpKSsiKSJ9KS5hdHRyKCJkIixkMy5zdj0KZy5zeW1ib2woKS50eXBl KGgpLnNpemUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShjKGUsdCkpfSkpfWNsZWFyVGltZW91dChq KSxqPQo9M0RzZXRUaW1lb3V0KFEsMzAwKSxQPTNEby5jb3B5KCksSD0zRHUuY29weSgpLEI9M0Rh LmNvcHkoKX0pLEl9dmFyIHQ9M0R7dG89CnA6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0z RDk2MCxyPTNENTAwLGk9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9Cj0zRE1hdGguZmxvb3Io TWF0aC5yYW5kb20oKSoxZTUpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuc2NhbGUubGlu ZWFyKD0KKSxhPTNEZDMuc2NhbGUubGluZWFyKCksZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9 LGw9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQplLnl9LGM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5z aXplfHwxfSxoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2hhcGV8fCJjaXI9CmNsZSJ9LHA9M0Qh MCxkPTNEW10sdj0zRFtdLG09M0RbXSxnPTNEITAseT0zRG51bGwsYj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiFlLj0Kbm90QWN0aXZlfSx3PTNEITEsRT0zRC4xLFM9M0QhMSx4PTNEITAsVD0zRGZ1bmN0 aW9uKCl7cmV0dXJuIDI1fSxOPTNEbnVsbCxDPQo9M0RudWxsLGs9M0RudWxsLEw9M0RudWxsLEE9 M0RudWxsLE89M0RudWxsLE09M0QhMSxfPTNEZDMuZGlzcGF0Y2goImVsZW1lbnQ9CkNsaWNrIiwi ZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLEQ9M0QhMCxQLEgsQixqLEY9M0Qh MTtyZXR1cm4gST0KLmNsZWFySGlnaGxpZ2h0cz0zRGZ1bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIu bnYtY2hhcnQtIitzKyIgLm52LXBvaW50LmhvdmVyPQoiKS5jbGFzc2VkKCJob3ZlciIsITEpfSxJ LmhpZ2hsaWdodFBvaW50PTNEZnVuY3Rpb24oZSx0LG4pe2QzLnNlbGVjdCgiLm52LWM9CmhhcnQt IitzKyIgLm52LXNlcmllcy0iK2UrIiAubnYtcG9pbnQtIit0KS5jbGFzc2VkKCJob3ZlciIsbil9 LF8ub24oImVsZW1lbj0KdE1vdXNlb3Zlci5wb2ludCIsZnVuY3Rpb24oZSl7ZyYmSS5oaWdobGln aHRQb2ludChlLnNlcmllc0luZGV4LGUucG9pbnRJbmRlPQp4LCEwKX0pLF8ub24oImVsZW1lbnRN b3VzZW91dC5wb2ludCIsZnVuY3Rpb24oZSl7ZyYmSS5oaWdobGlnaHRQb2ludChlLnNlcmk9CmVz SW5kZXgsZS5wb2ludEluZGV4LCExKX0pLEkuZGlzcGF0Y2g9M0RfLEkub3B0aW9ucz0zRGUudXRp bHMub3B0aW9uc0Z1bmMuYj0KaW5kKEkpLEkueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhmPTNEZDMuZnVuY3RvcihlKSxJKTpmfSxJPQoueT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZDMuZnVuY3RvcihlKSxJKTpsfSxJLnNpemU9M0Q9 CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZDMuZnVuY3RvcihlKSxJ KTpjfSxJLm1hcmdpbj0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQu dG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wPQo6dC50b3AsdC5yaWdodD0z RHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0z RHQ9CnlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVm dD0zRHR5cGVvZiBlLmxlZnQhPTNEIj0KdW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEkpOnR9LEku d2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhuPTNEZSxJKTpu fSxJLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxJ KTpyfSw9CkkueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89 M0RlLEkpOm99LEkueVNjYWxlPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odT0zRGUsSSk6dX0sSS56U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMu bGVuZ3RoPyhhPTNEZSxJKTphfSxJLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmc9CnRoPyhOPTNEZSxJKTpOfSxJLnlEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oQz0zRGUsSSk6Qz0KfSxJLnNpemVEb21haW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0zRGUsSSk6QX0sSS54UmFuZ2U9Cj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPTNEZSxJKTprfSxJLnlSYW5nZT0zRGZ1 bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9M0RlLEkpOkx9LEkuc2l6ZVJh bmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8oTz0zRGUsSSk6T30s SS5mb3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0KPTNEZSxJ KTpkfSxJLmZvcmNlWT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNE ZSxJKTp2fSxJLmZvPQpyY2VTaXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KG09M0RlLEkpOm19LEkuaW50ZXJhY3RpdmU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhnPTNEZSxJKTpnfSxJLnBvaW50S2V5PTNEZnVuY3Rpb24oZSl7cj0KZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsSSk6eX0sSS5wb2ludEFjdGl2ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KGI9M0RlLEkpOmJ9LEkucGFkRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cnc9M0RlLEkpOnd9LEkucGFkRGF0 YU91dGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEkpOj0K RX0sSS5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNE ZSxJKTpTfSxJLmNsaXBWb3JvPQpub2k9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oeD0zRGUsSSk6eH0sSS51c2VWb3Jvbm9pPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oRD0zRGUsRD0zRD0zRD0zRCExJiYoeD0zRCExKSxJKTpEfSxJLmNsaXBS YT0KZGl1cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxJKTpU fSxJLmNvbG9yPTNEZnVuY3Rpb24oPQp0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUu dXRpbHMuZ2V0Q29sb3IodCksSSk6aX0sSS5zaGFwZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGg9M0RlLEkpOmh9LEkub25seUNpcmNsZXM9M0RmdW5jdGlvbihlKXty ZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxJKTpwfSxJLmlkPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocz0zRGUsSSk6c30sSS5zaW5nbGVQb2ludD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPTNEZSxJKTo9Ck19LEl9LGUubW9k ZWxzLnNjYXR0ZXJDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5lYWNo KGZ1bmN0aT0Kb24oZSl7ZnVuY3Rpb24gSigpe2lmKFQpcmV0dXJuIFcuc2VsZWN0KCIubnYtcG9p bnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1lPQp2ZW50cyIsImFsbCIpLCExO1cuc2VsZWN0KCIu bnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIik9Cjt2YXIgaT0z RGQzLm1vdXNlKHRoaXMpO2guZGlzdG9ydGlvbih4KS5mb2N1cyhpWzBdKSxwLmRpc3RvcnRpb24o eCkuZm9jdXMoaT0KWzFdKSxXLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxiJiZX LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwoPQpuKSx3JiZXLnNlbGVjdCgiLm52LXkubnYt YXhpcyIpLmNhbGwociksVy5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25YIikuZGF0dW09CihlLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pLFcuc2VsZWN0KCIu bnYtZGlzdHJpYnV0aT0Kb25ZIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUu ZGlzYWJsZWR9KSkuY2FsbCh1KX12YXIgQz0zRGQzLnNlPQpsZWN0KHRoaXMpLGs9M0R0aGlzLEw9 M0QoZnx8cGFyc2VJbnQoQy5zdHlsZSgid2lkdGgiKSl8fDk2MCktYS5sZWZ0LWEucmlnaHQ9CixE PTNEKGx8fHBhcnNlSW50KEMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvbTtG LnVwZGF0ZT0zRGZ1bmN0aT0Kb24oKXtDLmNhbGwoRil9LEYuY29udGFpbmVyPTNEdGhpcyxBLmRp c2FibGVkPTNEZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlPQouZGlzYWJsZWR9KTtpZighTyl7 dmFyIEk7Tz0zRHt9O2ZvcihJIGluIEEpQVtJXWluc3RhbmNlb2YgQXJyYXk/T1tJXT0zREFbSV09 Ci5zbGljZSgwKTpPW0ldPTNEQVtJXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIGUudmFsdT0KZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgcT0zREMuc2VsZWN0 QWxsKCIubnYtbm9EYXRhIikuZGF0YShbX10pO3JldHVybiBxLmVuPQp0ZXIoKS5hcHBlbmQoInRl eHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0 eWw9CmUoInRleHQtYW5jaG9yIiwibWlkZGxlIikscS5hdHRyKCJ4IixhLmxlZnQrTC8yKS5hdHRy KCJ5IixhLnRvcCtELzIpLnRleHQoZj0KdW5jdGlvbihlKXtyZXR1cm4gZX0pLEZ9Qy5zZWxlY3RB bGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxQPTNEUHx8aCxIPTNESHx8PQpwO3ZhciBSPTNEQy5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1zY2F0dGVyQ2hhcnQiKS5kYXRhKFtlXSksVT0zRFIuZW50 ZXIoKS49CmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNjYXR0ZXJD aGFydCBudi1jaGFydC0iK3QuaWQoKSksej0KPTNEVS5hcHBlbmQoImciKSxXPTNEUi5zZWxlY3Qo ImciKTt6LmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1iPQphY2tncm91bmQi KSx6LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksei5hcHBlbmQoImci KS5hdHRyKCI9CmNsYXNzIiwibnYteSBudi1heGlzIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXNjYXR0ZXJXcmFwIiksei5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlz dFdyYXAiKSx6LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhPQpwIiksei5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpO2lmKHkpe3ZhciBYPTNE Uz9MLzI6TDtpLnc9CmlkdGgoWCksUi5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSku Y2FsbChpKSxhLnRvcCE9M0RpLmhlaWdodCgpJiYoYT0KLnRvcD0zRGkuaGVpZ2h0KCksRD0zRChs fHxwYXJzZUludChDLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b20pPQosUi5z ZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEwt WCkrIiwiKyAtYS50b3A9CisiKSIpfVMmJihzLndpZHRoKDE4MCkuY29sb3IoWyIjNDQ0Il0pLFcu c2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oaj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoMCwiKyAtYS50b3ArIikiKS5jYWxsKHMpKSxSLmF0dHIoInRyYW5zZm9ybSIsPQoi dHJhbnNsYXRlKCIrYS5sZWZ0KyIsIithLnRvcCsiKSIpLEUmJlcuc2VsZWN0KCIubnYteS5udi1h eGlzIikuYXR0cigidHJhbnM9CmZvcm0iLCJ0cmFuc2xhdGUoIitMKyIsMCkiKSx0LndpZHRoKEwp LmhlaWdodChEKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpez0KcmV0dXJuIGUuY29sb3J8fGMo ZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLGQhPTNE PQo9M0QwJiZ0LnhEb21haW4obnVsbCksdiE9M0Q9M0QwJiZ0LnlEb21haW4obnVsbCksUi5zZWxl Y3QoIi5udi1zY2F0dGVyV3JhcCI9CikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJu IWUuZGlzYWJsZWR9KSkuY2FsbCh0KTtpZihkIT0zRD0zRDApe3Zhcj0KIFY9M0RoLmRvbWFpbigp WzFdLWguZG9tYWluKClbMF07dC54RG9tYWluKFtoLmRvbWFpbigpWzBdLWQqVixoLmRvbWFpbigp WzFdPQorZCpWXSl9aWYodiE9M0Q9M0QwKXt2YXIgJD0zRHAuZG9tYWluKClbMV0tcC5kb21haW4o KVswXTt0LnlEb21haW4oW3AuZG9tYWk9Cm4oKVswXS12KiQscC5kb21haW4oKVsxXSt2KiRdKX0o diE9M0Q9M0QwfHxkIT0zRD0zRDApJiZSLnNlbGVjdCgiLm52LXNjYXR0ZT0KcldyYXAiKS5kYXR1 bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLGImJihu LnNjYWxlPQooaCkudGlja3Mobi50aWNrcygpJiZuLnRpY2tzKCkubGVuZ3RoP24udGlja3MoKTpM LzEwMCkudGlja1NpemUoLUQsMCksVy5zZWw9CmVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbD0KKG4pKSx3JiYo ci5zY2FsZShwKS50aWNrcyhyLnRpY2tzKCkmJnIudGlja3MoKS5sZW5ndGg/ci50aWNrcygpOkQv MzYpLnRpY2tTPQppemUoLUwsMCksVy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxt JiYoby5nZXREYXRhKHQueCgpKS5zY2FsZShoKS49CndpZHRoKEwpLmNvbG9yKGUubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbj0KKHQsbil7 cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksei5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgi ZyIpLmF0dHIoImNsPQphc3MiLCJudi1kaXN0cmlidXRpb25YIiksVy5zZWxlY3QoIi5udi1kaXN0 cmlidXRpb25YIikuYXR0cigidHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoMCwiK3AucmFuZ2UoKVsw XSsiKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfT0KKSku Y2FsbChvKSksZyYmKHUuZ2V0RGF0YSh0LnkoKSkuc2NhbGUocCkud2lkdGgoRCkuY29sb3IoZS5t YXAoZnVuY3Rpb24oZSx0PQope3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rp b24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSx6LnM9CmVsZWN0KCIubnYtZGlzdFdyYXAi KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblkiKSxXLnNlbGVjdD0K KCIubnYtZGlzdHJpYnV0aW9uWSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFP0w6 LXUuc2l6ZSgpKSsiLDApIikuPQpkYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKS5jYWxsKHUpKSxkMy5maXNoZXllJiYoVy5zZWw9CmVjdCgiLm52LWJhY2tncm91 bmQiKS5hdHRyKCJ3aWR0aCIsTCkuYXR0cigiaGVpZ2h0IixEKSxXLnNlbGVjdCgiLm52LWJhY2tn cj0Kb3VuZCIpLm9uKCJtb3VzZW1vdmUiLEopLFcuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9u KCJjbGljayIsZnVuY3Rpb24oKXtUPQo9M0QhVH0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGlj ay5mcmVlemVGaXNoZXllIixmdW5jdGlvbigpe1Q9M0QhVH0pKSxzLmQ9CmlzcGF0Y2gub24oImxl Z2VuZENsaWNrIixmdW5jdGlvbihlLGkpe2UuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCx4PTNEZS5k aXNhYj0KbGVkPzA6Mi41LFcuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVy LWV2ZW50cyIsZS5kaXNhYmxlZD8ibm9uPQplIjoiYWxsIiksVy5zZWxlY3QoIi5udi1wb2ludC1w YXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsZS5kaXNhYmxlZD8iYWw9CmwiOiJub25lIiks ZS5kaXNhYmxlZD8oaC5kaXN0b3J0aW9uKHgpLmZvY3VzKDApLHAuZGlzdG9ydGlvbih4KS5mb2N1 cygwKSxXLj0Kc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5jYWxsKHQpLFcuc2VsZWN0KCIubnYt eC5udi1heGlzIikuY2FsbChuKSxXLnNlbGVjPQp0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6 VD0zRCExLEYudXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSI9CixmdW5jdGlv bihlKXtBLmRpc2FibGVkPTNEZS5kaXNhYmxlZCxNLnN0YXRlQ2hhbmdlKEEpLEYudXBkYXRlKCl9 KSx0LmRpc3BhdD0KY2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7 ZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrPQoiIC5udi1zZXJpZXMtIitlLnNlcmllc0lu ZGV4KyIgLm52LWRpc3R4LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsZnVuY3Rpb249Cih0LG4p e3JldHVybiBlLnBvc1sxXS1EfSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYt c2VyaWVzLSIrZS5zZT0Kcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludEluZGV4KS5hdHRy KCJ4MiIsZS5wb3NbMF0rby5zaXplKCkpLGUucG9zPTNEPQpbZS5wb3NbMF0rYS5sZWZ0LGUucG9z WzFdK2EudG9wXSxNLnRvb2x0aXBTaG93KGUpfSksTS5vbigidG9vbHRpcFNob3ciLGZ1bmM9CnRp b24oZSl7TiYmQihlLGsucGFyZW50Tm9kZSl9KSxNLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24o dCl7dHlwZW9mIHQuZGlzYT0KYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlv bihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVkW25dfSksPQpBLmRpc2FibGVkPTNEdC5kaXNh YmxlZCksRi51cGRhdGUoKX0pLFA9M0RoLmNvcHkoKSxIPTNEcC5jb3B5KCl9KSxGfXZhciB0PQo9 M0RlLm1vZGVscy5zY2F0dGVyKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhp cygpLGk9M0RlLm1vZGVscy49CmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5t b2RlbHMuZGlzdHJpYnV0aW9uKCksdT0zRGUubW9kZWxzLmRpcz0KdHJpYnV0aW9uKCksYT0zRHt0 b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9M0Rl PQoudXRpbHMuZGVmYXVsdENvbG9yKCksaD0zRGQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShk My5zY2FsZS5saW5lYXIpLmRpc3Q9Cm9ydGlvbigwKTp0LnhTY2FsZSgpLHA9M0RkMy5maXNoZXll P2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0bz0KcnRpb24oMCk6dC55U2Nh bGUoKSxkPTNEMCx2PTNEMCxtPTNEITEsZz0zRCExLHk9M0QhMCxiPTNEITAsdz0zRCEwLEU9M0Qh MSxTPQo9M0QhIWQzLmZpc2hleWUseD0zRDAsVD0zRCExLE49M0QhMCxDPTNEZnVuY3Rpb24oZSx0 LG4pe3JldHVybiI8c3Ryb25nPiIrdCs9CiI8L3N0cm9uZz4ifSxrPTNEZnVuY3Rpb24oZSx0LG4p e3JldHVybiI8c3Ryb25nPiIrbisiPC9zdHJvbmc+In0sTD0zRG51bGwsQT0KPTNEe30sTz0zRG51 bGwsTT0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFu Z2UiLCJjPQpoYW5nZVN0YXRlIiksXz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLEQ9M0QwO3QueFNj YWxlKGgpLnlTY2FsZShwKSxuLm9yaWVudCg9CiJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5v cmllbnQoRT8icmlnaHQiOiJsZWZ0IikudGlja1BhZGRpbmcoMTApLG8uYXhpcz0KKCJ4IiksdS5h eGlzKCJ5Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIFAsSCxCPTNEZnVuY3Rpb24oaSxzKXt2YXIg bz0zRGkucG9zPQpbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRv cHx8MCksZj0zRGkucG9zWzBdKyhzLm9mZnNldEw9CmVmdHx8MCksbD0zRHAucmFuZ2UoKVswXSth LnRvcCsocy5vZmZzZXRUb3B8fDApLGM9M0RoLnJhbmdlKClbMF0rYS5sZWZ0KyhzLj0Kb2Zmc2V0 TGVmdHx8MCksZD0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Zvcm1hdCgp KHQueCgpKGkucG9pPQpudCxpLnBvaW50SW5kZXgpKSxtPTNEci50aWNrRm9ybWF0KCkodC55KCko aS5wb2ludCxpLnBvaW50SW5kZXgpKTtDIT0zRG51bGw9CiYmZS50b29sdGlwLnNob3coW2YsbF0s QyhpLnNlcmllcy5rZXksdixtLGksRiksIm4iLDEscywieC1udnRvb2x0aXAiKSxrIT0zRD0KbnVs bCYmZS50b29sdGlwLnNob3coW2MsZF0sayhpLnNlcmllcy5rZXksdixtLGksRiksImUiLDEscywi eS1udnRvb2x0aXAiKSxMPQohPTNEbnVsbCYmZS50b29sdGlwLnNob3coW28sdV0sTChpLnNlcmll cy5rZXksdixtLGksRiksaS52YWx1ZTwwPyJuIjoicyIsbnU9CmxsLHMpfSxqPTNEW3trZXk6Ik1h Z25pZnkiLGRpc2FibGVkOiEwfV07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZT0K b3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe00udG9vbHRpcEhpZGUoZSksZDMuc2VsZWN0KCIubnYt Y2hhcnQtIit0LmlkKCkrIiAuPQpudi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4 LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsMCksZDMuc2VsZWM9CnQoIi5udi1jaGFydC0iK3Qu aWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludElu ZD0KZXgpLmF0dHIoIngyIix1LnNpemUoKSl9KSxNLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24o KXtOJiZlLnRvb2x0aXAuY2xlYW51PQpwKCl9KSxGLmRpc3BhdGNoPTNETSxGLnNjYXR0ZXI9M0R0 LEYubGVnZW5kPTNEaSxGLmNvbnRyb2xzPTNEcyxGLnhBeGlzPTNEbiw9CkYueUF4aXM9M0RyLEYu ZGlzdFg9M0RvLEYuZGlzdFk9M0R1LGQzLnJlYmluZChGLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJw b2ludD0KQWN0aXZlIiwieCIsInkiLCJzaGFwZSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ6 U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpPQpuIiwieFJhbmdlIiwieVJhbmdlIiwic2l6ZURvbWFp biIsInNpemVSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSI9CiwiY2xpcFZvcm9u b2kiLCJjbGlwUmFkaXVzIiwidXNlVm9yb25vaSIpLEYub3B0aW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYj0KaW5kKEYpLEYubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGEudG9wPTNEdHlwZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ZS50b3A6YS50b3As YS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ9CjphLnJpZ2h0 LGEuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmEuYm90 dG9tLGEubGVmdD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6YS5sZWZ0 LEYpOmF9LEYud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhm PTNEZSxGKTpmfSxGLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5n dGg/KGw9M0RlLEYpOmx9LEYuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYz0zRGUudT0KdGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGMpLG8uY29sb3IoYyksdS5j b2xvcihjKSxGKTpjfSxGLnNob3dEaXN0WD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG09M0RlLEYpOm19LEYuc2hvd0Rpc3RZPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4g YXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsRik6Z30sRi5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhTPTNEZSxGKTpTfSxGLnNob3dMZWdlbmQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQp5PTNEZSxGKTp5fSxGLnNob3dY QXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxGKTpifSw9 CkYuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0Rl LEYpOnd9LEYucmlnaHRBbGlnbj0KWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oRT0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0PQoiKSxGKTpFfSxGLmZpc2hl eWU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsRik6eH0sRi54 UGE9CmRkaW5nPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEYp OmR9LEYueVBhZGRpbmc9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2 PTNEZSxGKTp2fSxGLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxl bmd0aD8oTj0zRGUsRik6Tn0sRi50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWU9Cm50cy5sZW5ndGg/KEw9M0RlLEYpOkx9LEYudG9vbHRpcFhDb250ZW50PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oQz0zRGUsRik6Q30sRi50b29sdGlwWUNv bnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQprPTNEZSxGKTpr fSxGLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEYp OkF9LEYuZGU9CmZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oTz0zRGUsRik6T30sRi5ub0RhdGE9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhfPTNEZSxGKTpffSxGLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0PQppb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9M0RlLEYpOkR9LEZ9LGUubW9kZWxzLnNjYXR0ZXJQ bHVzTGluZUNoYXI9CnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGUuZWFjaChm dW5jdGlvbihlKXtmdW5jdGlvbiBWKCl7aWYoUylyZT0KdHVybiBVLnNlbGVjdCgiLm52LXBvaW50 LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksITE7VS5zZWxlY3QoPQoiLm52 LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBpPTNEZDMu bW91c2UodGhpcyk7aC49CmRpc3RvcnRpb24oRSkuZm9jdXMoaVswXSkscC5kaXN0b3J0aW9uKEUp LmZvY3VzKGlbMV0pLFUuc2VsZWN0KCIubnYtc2NhdHRlcj0KV3JhcCIpLmRhdHVtKGUuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCksZyYmVS5zZWxlY3QoPQoi Lm52LXgubnYtYXhpcyIpLmNhbGwobikseSYmVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxs KHIpLFUuc2VsZWN0KCIubnY9Ci1kaXN0cmlidXRpb25YIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSxVLj0Kc2VsZWN0KCIubnYtZGlzdHJp YnV0aW9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkp PQouY2FsbCh1KX12YXIgVD0zRGQzLnNlbGVjdCh0aGlzKSxOPTNEdGhpcyxDPTNEKGZ8fHBhcnNl SW50KFQuc3R5bGUoIndpZHRoIik9Cil8fDk2MCktYS5sZWZ0LWEucmlnaHQsTT0zRChsfHxwYXJz ZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ibz0KdHRvbTtCLnVwZGF0ZT0z RGZ1bmN0aW9uKCl7VC5jYWxsKEIpfSxCLmNvbnRhaW5lcj0zRHRoaXMsay5kaXNhYmxlZD0zRGUu bWFwPQooZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIUwpe3ZhciBqO0w9M0R7 fTtmb3IoaiBpbiBrKWtbal1pbnN0YW49CmNlb2YgQXJyYXk/TFtqXT0zRGtbal0uc2xpY2UoMCk6 TFtqXT0zRGtbal19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bj0KY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEY9M0RULnNlbGVjdEFsbCgiLm52LW5v RGF0YSIpPQouZGF0YShbT10pO3JldHVybiBGLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigi Y2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmE9CnR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsIm1pZGRsZSIpLEYuYXR0cigieCIsYS5sZWZ0K0MvMikuYXR0cj0KKCJ5IixhLnRv cCtNLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxCfVQuc2VsZWN0QWxsKCIubnYtbm9E YXRhIikucmVtPQpvdmUoKSxoPTNEdC54U2NhbGUoKSxwPTNEdC55U2NhbGUoKSxfPTNEX3x8aCxE PTNERHx8cDt2YXIgST0zRFQuc2VsZWN0QWxsKCI9CmcubnYtd3JhcC5udi1zY2F0dGVyQ2hhcnQi KS5kYXRhKFtlXSkscT0zREkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcz0KIiwibnZk MyBudi13cmFwIG52LXNjYXR0ZXJDaGFydCBudi1jaGFydC0iK3QuaWQoKSksUj0zRHEuYXBwZW5k KCJnIiksVT0zREkuPQpzZWxlY3QoImciKTtSLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwi bnZkMyBudi1iYWNrZ3JvdW5kIikuc3R5bGUoInBvaW49CnRlci1ldmVudHMiLCJub25lIiksUi5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLFIuYXBwZW5kKCJnIj0KKS5h dHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1zY2F0dGVyV3JhcCIpPQosUi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXJlZ3Jlc3Np b25MaW5lc1dyYXAiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudi1kaXN0V3JhcCIp LFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksUi5hcHBlbmQoIj0K ZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksSS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIithLmxlZnQrPQoiLCIrYS50b3ArIikiKSxiJiZVLnNlbGVjdCgiLm52LXkubnYt YXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0M9CisiLDApIiksbSYmKGkud2lk dGgoQy8yKSxJLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLGEudG9w IT0KPTNEaS5oZWlnaHQoKSYmKGEudG9wPTNEaS5oZWlnaHQoKSxNPTNEKGx8fHBhcnNlSW50KFQu c3R5bGUoImhlaWdodCIpKXx8NDAwPQopLWEudG9wLWEuYm90dG9tKSxJLnNlbGVjdCgiLm52LWxl Z2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIis9CkMvMisiLCIrIC1hLnRv cCsiKSIpKSx3JiYocy53aWR0aCgxODApLmNvbG9yKFsiIzQ0NCJdKSxVLnNlbGVjdCgiLm52LWNv bnRybz0KbHNXcmFwIikuZGF0dW0oSCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisg LWEudG9wKyIpIikuY2FsbChzKSksdC53PQppZHRoKEMpLmhlaWdodChNKS5jb2xvcihlLm1hcChm dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXI9CihmdW5jdGlvbih0 LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLEkuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5k YXR1bShlLj0KZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCks SS5zZWxlY3QoIi5udi1yZWdyZXNzaW9uTGluPQplc1dyYXAiKS5hdHRyKCJjbGlwLXBhdGgiLCJ1 cmwoI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiKSIpO3ZhciB6PTNESS5zZWxlY3Q9CigiLm52LXJl Z3Jlc3Npb25MaW5lc1dyYXAiKS5zZWxlY3RBbGwoIi5udi1yZWdMaW5lcyIpLmRhdGEoZnVuY3Rp b24oZSl7cmV0dT0Kcm4gZX0pO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXJlZ0xpbmVzIik7dmFyIFc9M0R6LnNlbGVjdEFsPQpsKCIubnYtcmVnTGluZSIpLmRhdGEoZnVu Y3Rpb24oZSl7cmV0dXJuW2VdfSksWD0zRFcuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS49CmF0dHIo ImNsYXNzIiwibnYtcmVnTGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCk7Vy5hdHRyKCJ4 MSIsaC5yYW5nZSgpWz0KMF0pLmF0dHIoIngyIixoLnJhbmdlKClbMV0pLmF0dHIoInkxIixmdW5j dGlvbihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMF0qPQplLnNsb3BlK2UuaW50ZXJjZXB0KX0p LmF0dHIoInkyIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMV0qZS5zbG89CnBl K2UuaW50ZXJjZXB0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyhl LG4pfSkuc3R5bGUoInN0cj0Kb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGlz YWJsZWR8fHR5cGVvZiBlLnNsb3BlPTNEPTNEInVuZGVmaW5lPQpkInx8dHlwZW9mIGUuaW50ZXJj ZXB0PTNEPTNEInVuZGVmaW5lZCI/MDoxfSksZyYmKG4uc2NhbGUoaCkudGlja3Mobi50aWNrcyg9 Cik/bi50aWNrcygpOkMvMTAwKS50aWNrU2l6ZSgtTSwwKSxVLnNlbGVjdCgiLm52LXgubnYtYXhp cyIpLmF0dHIoInRyYW5zZm9ybT0KIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5j YWxsKG4pKSx5JiYoci5zY2FsZShwKS50aWNrcyhyLnRpY2tzKCk/PQpyLnRpY2tzKCk6TS8zNiku dGlja1NpemUoLUMsMCksVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxkJiYoby5n ZXQ9CkRhdGEodC54KCkpLnNjYWxlKGgpLndpZHRoKEMpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUs dCl7cmV0dXJuIGUuY29sb3J8fGMoZT0KLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJu IWVbbl0uZGlzYWJsZWR9KSksUi5zZWxlY3QoIi5udi1kaXN0V3JhcCIpPQouYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1kaXN0cmlidXRpb25YIiksVS5zZWxlY3QoIi5udi1kaXN0cmlidXRp b25YIik9Ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIp LmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKD0KZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChv KSksdiYmKHUuZ2V0RGF0YSh0LnkoKSkuc2NhbGUocCkud2lkdGgoTSkuY29sPQpvcihlLm1hcChm dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxu KXtyZXR1cm49CiFlW25dLmRpc2FibGVkfSkpLFIuc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpcz0KdHJpYnV0aW9uWSIpLFUuc2VsZWN0KCIubnYt ZGlzdHJpYnV0aW9uWSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiPQo/QzotdS5z aXplKCkpKyIsMCkiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxl ZH0pKS5jYWxsKHU9CikpLGQzLmZpc2hleWUmJihVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5h dHRyKCJ3aWR0aCIsQykuYXR0cigiaGVpZ2h0IixNKT0KLFUuc2VsZWN0KCIubnYtYmFja2dyb3Vu ZCIpLm9uKCJtb3VzZW1vdmUiLFYpLFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uPQooImNs aWNrIixmdW5jdGlvbigpe1M9M0QhU30pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5mcmVl emVGaXNoZXllIixmdW49CmN0aW9uKCl7Uz0zRCFTfSkpLHMuZGlzcGF0Y2gub24oImxlZ2VuZENs aWNrIixmdW5jdGlvbihlLGkpe2UuZGlzYWJsZWQ9M0QhZT0KLmRpc2FibGVkLEU9M0RlLmRpc2Fi bGVkPzA6Mi41LFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVyLWV2PQpl bnRzIixlLmRpc2FibGVkPyJub25lIjoiYWxsIiksVS5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIp LnN0eWxlKCJwb2ludGVyLWU9CnZlbnRzIixlLmRpc2FibGVkPyJhbGwiOiJub25lIiksZS5kaXNh YmxlZD8oaC5kaXN0b3J0aW9uKEUpLmZvY3VzKDApLHAuZGlzdD0Kb3J0aW9uKEUpLmZvY3VzKDAp LFUuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5jYWxsKHQpLFUuc2VsZWN0KCIubnYteC5udi1h PQp4aXMiKS5jYWxsKG4pLFUuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6Uz0zRCEx LEIudXBkYXRlKCl9KSxpLmRpc3A9CmF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtr PTNEZSxBLnN0YXRlQ2hhbmdlKGspLEIudXBkYXRlKCl9KSx0LmRpcz0KcGF0Y2gub24oImVsZW1l bnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0 LmlkPQooKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIrZS5wb2lu dEluZGV4KS5hdHRyKCJ5MSIsZS5wb3M9ClsxXS1NKSxkMy5zZWxlY3QoIi5udi1jaGFydC0iK3Qu aWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpcz0KdHktIitlLnBvaW50 SW5kZXgpLmF0dHIoIngyIixlLnBvc1swXStvLnNpemUoKSksZS5wb3M9M0RbZS5wb3NbMF0rYS5s ZWZ0LGUuPQpwb3NbMV0rYS50b3BdLEEudG9vbHRpcFNob3coZSl9KSxBLm9uKCJ0b29sdGlwU2hv dyIsZnVuY3Rpb24oZSl7eCYmUChlLE4ucGE9CnJlbnROb2RlKX0pLEEub24oImNoYW5nZVN0YXRl IixmdW5jdGlvbih0KXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIj0KJiYoZS5mb3JF YWNoKGZ1bmN0aW9uKGUsbil7ZS5kaXNhYmxlZD0zRHQuZGlzYWJsZWRbbl19KSxrLmRpc2FibGVk PTNEdC5kaXNhPQpibGVkKSxCLnVwZGF0ZSgpfSksXz0zRGguY29weSgpLEQ9M0RwLmNvcHkoKX0p LEJ9dmFyIHQ9M0RlLm1vZGVscy5zY2F0dGVyKCk9CixuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0Rl Lm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscz0KLmxlZ2Vu ZCgpLG89M0RlLm1vZGVscy5kaXN0cmlidXRpb24oKSx1PTNEZS5tb2RlbHMuZGlzdHJpYnV0aW9u KCksYT0zRHt0b3A6PQozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo3NX0sZj0zRG51bGwsbD0z RG51bGwsYz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCk9CixoPTNEZDMuZmlzaGV5ZT9kMy5maXNo ZXllLnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlzdG9ydGlvbigwKTp0LnhTY2FsZSgpLD0KcD0z RGQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24o MCk6dC55U2NhbGUoKSxkPQo9M0QhMSx2PTNEITEsbT0zRCEwLGc9M0QhMCx5PTNEITAsYj0zRCEx LHc9M0QhIWQzLmZpc2hleWUsRT0zRDAsUz0zRCExLHg9M0Q9CiEwLFQ9M0RmdW5jdGlvbihlLHQs bil7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4ifSxOPTNEZnVuY3Rpb24oZSx0LG4pez0K cmV0dXJuIjxzdHJvbmc+IituKyI8L3N0cm9uZz4ifSxDPTNEZnVuY3Rpb24oZSx0LG4scil7cmV0 dXJuIjxoMz4iK2UrIjwvaDM+PQoiKyI8cD4iK3IrIjwvcD4ifSxrPTNEe30sTD0zRG51bGwsQT0z RGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWQ9CmUiLCJzdGF0ZUNoYW5nZSIs ImNoYW5nZVN0YXRlIiksTz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLE09M0QwO3QueFNjYWxlKGgp Lj0KeVNjYWxlKHApLG4ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5vcmllbnQo Yj8icmlnaHQiOiJsZWZ0IikudGljPQprUGFkZGluZygxMCksby5heGlzKCJ4IiksdS5heGlzKCJ5 Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIF8sRCxQPTNEZnVuY3Rpb249CihpLHMpe3ZhciBvPTNE aS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCks Zj0zRD0KaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksbD0zRHAucmFuZ2UoKVswXSthLnRvcCso cy5vZmZzZXRUb3B8fDApLGM9M0RoLnJhPQpuZ2UoKVswXSthLmxlZnQrKHMub2Zmc2V0TGVmdHx8 MCksZD0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Y9Cm9ybWF0KCkodC54 KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxtPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2lu dCxpLnBvaT0KbnRJbmRleCkpO1QhPTNEbnVsbCYmZS50b29sdGlwLnNob3coW2YsbF0sVChpLnNl cmllcy5rZXksdixtLGksQiksIm4iLDEscywiPQp4LW52dG9vbHRpcCIpLE4hPTNEbnVsbCYmZS50 b29sdGlwLnNob3coW2MsZF0sTihpLnNlcmllcy5rZXksdixtLGksQiksImUiLDE9CixzLCJ5LW52 dG9vbHRpcCIpLEMhPTNEbnVsbCYmZS50b29sdGlwLnNob3coW28sdV0sQyhpLnNlcmllcy5rZXks dixtLGkucG9pbj0KdC50b29sdGlwLGksQiksaS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX0sSD0z RFt7a2V5OiJNYWduaWZ5IixkaXNhYmxlZDohMH1dPQo7cmV0dXJuIHQuZGlzcGF0Y2gub24oImVs ZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtBLnRvb2x0aXBIaWRlKGU9CiksZDMu c2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsi IC5udi1kaXN0eC0iKz0KZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsMCksZDMuc2VsZWN0KCIubnYt Y2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zPQplcmllc0luZGV4KyIgLm52LWRpc3R5 LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ4MiIsdS5zaXplKCkpfSksQS5vbigidG9vbHRpcEg9Cmlk ZSIsZnVuY3Rpb24oKXt4JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQi5kaXNwYXRjaD0zREEsQi5z Y2F0dGVyPTNEdCxCLmxlZz0KZW5kPTNEaSxCLmNvbnRyb2xzPTNEcyxCLnhBeGlzPTNEbixCLnlB eGlzPTNEcixCLmRpc3RYPTNEbyxCLmRpc3RZPTNEdSxkMy5yPQplYmluZChCLHQsImlkIiwiaW50 ZXJhY3RpdmUiLCJwb2ludEFjdGl2ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxlIiw9 CiJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIs InNpemVEb21haW4iLCJzaXplUj0KYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIs ImNsaXBWb3Jvbm9pIiwiY2xpcFJhZGl1cyIsInVzZVZvcm9ub2kiPQopLEIub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChCKSxCLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmc9CnVtZW50cy5sZW5ndGg/KGEudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2Uu dG9wOmEudG9wLGEucmlnaHQ9M0R0eT0KcGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uucmln aHQ6YS5yaWdodCxhLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QiPQp1bmRlZmluZWQiP2Uu Ym90dG9tOmEuYm90dG9tLGEubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5s ZWZ0OmE9Ci5sZWZ0LEIpOmF9LEIud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZj0zRGUsQik6Zn0sQi5oZT0KaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSxCKTpsfSxCLmNvbG9yPTNEZnVuY3Rpb24oPQp0KXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxvLmNv bG9yKGMpLHU9Ci5jb2xvcihjKSxCKTpjfSxCLnNob3dEaXN0WD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxCKT0KOmR9LEIuc2hvd0Rpc3RZPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuc2hvd0NvPQpudHJvbHM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsQik6d30sQi5zaG93 TGVnZW5kPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQik6 bX0sQi5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhn PTNEZSxCKTpnfSxCLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5s ZW5ndGg/KHk9M0RlLEIpOnl9LEIucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW49Cmd0aD8oYj0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksQik6 Yn0sQi5maXNoZXllPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8oRT0z RGUsQik6RX0sQi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpn dGg/KHg9M0RlLEIpOnh9LEIudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oQz0KPTNEZSxCKTpDfSxCLnRvb2x0aXBYQ29udGVudD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxCPQopOlR9LEIudG9vbHRpcFlDb250 ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEIpOk59LEI9 Ci5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPTNEZSxCKTpr fSxCLmRlZmF1bHRTdGF0ZT0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KEw9M0RlLEIpOkx9LEIubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxl bmd0aD8oTz0zRGUsQik6T30sQi50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1 cm49CiBhcmd1bWVudHMubGVuZ3RoPyhNPTNEZSxCKTpNfSxCfSxlLm1vZGVscy5zcGFya2xpbmU9 M0RmdW5jdGlvbigpe2Z1bmN0aW9uID0KZChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3Zh ciBpPTNEbi10LmxlZnQtdC5yaWdodCxkPTNEci10LnRvcC10LmJvdHRvPQptLHY9M0RkMy5zZWxl Y3QodGhpcyk7cy5kb21haW4obHx8ZDMuZXh0ZW50KGUsdSkpLnJhbmdlKGh8fFswLGldKSxvLmRv bWFpbig9CmN8fGQzLmV4dGVudChlLGEpKS5yYW5nZShwfHxbZCwwXSk7dmFyIG09M0R2LnNlbGVj dEFsbCgiZy5udi13cmFwLm52LXNwYXJrbD0KaW5lIikuZGF0YShbZV0pLGc9M0RtLmVudGVyKCku YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3BhPQpya2xpbmUiKSxi PTNEZy5hcHBlbmQoImciKSx3PTNEbS5zZWxlY3QoImciKTttLmF0dHIoInRyYW5zZm9ybSIsInRy YW5zbGF0ZSg9CiIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBFPTNEbS5zZWxlY3RBbGwoInBh dGgiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybj0KW2VdfSk7RS5lbnRlcigpLmFwcGVuZCgicGF0 aCIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oPQplLHQpe3Jl dHVybiBlLmNvbG9yfHxmKGUsdCl9KS5hdHRyKCJkIixkMy5zdmcubGluZSgpLngoZnVuY3Rpb24o ZSx0KXtyZXR1cm49CiBzKHUoZSx0KSl9KS55KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShlLHQp KX0pKTt2YXIgUz0zRG0uc2VsZWN0QWxsKCJjaXJjbD0KZS5udi1wb2ludCIpLmRhdGEoZnVuY3Rp b24oZSl7ZnVuY3Rpb24gbih0KXtpZih0IT0zRC0xKXt2YXIgbj0zRGVbdF07cmV0dXJuPQogbi5w b2ludEluZGV4PTNEdCxufXJldHVybiBudWxsfXZhciB0PTNEZS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gYShlLHQpfSk9CixyPTNEbih0Lmxhc3RJbmRleE9mKG8uZG9tYWluKClbMV0pKSxpPTNE bih0LmluZGV4T2Yoby5kb21haW4oKVswXSkpLHM9M0RuKD0KdC5sZW5ndGgtMSk7cmV0dXJuW2ks cixzXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEbnVsbH0pfSk7Uy5lbnRlcigpPQou YXBwZW5kKCJjaXJjbGUiKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImN4IixmdW5jdGlvbihl LHQpe3JldHVybiBzKHUoZSw9CmUucG9pbnRJbmRleCkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIG8oYShlLGUucG9pbnRJbmRleCkpfSkuYXR0cj0KKCJyIiwyKS5hdHRyKCJjbGFz cyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLGUucG9pbnRJbmRleCk9M0Q9M0RzLmRvbWFpbigp PQpbMV0/Im52LXBvaW50IG52LWN1cnJlbnRWYWx1ZSI6YShlLGUucG9pbnRJbmRleCk9M0Q9M0Rv LmRvbWFpbigpWzBdPyJudi1wb2k9Cm50IG52LW1pblZhbHVlIjoibnYtcG9pbnQgbnYtbWF4VmFs dWUifSl9KSxkfXZhciB0PTNEe3RvcDoyLHJpZ2h0OjAsYm90dG9tOj0KMixsZWZ0OjB9LG49M0Q0 MDAscj0zRDMyLGk9M0QhMCxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxpbmVh cigpPQosdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZS55fSxmPTNEZS51dGlscy5nZXRDb2w9Cm9yKFsiIzAwMCJdKSxsLGMsaCxwO3JldHVybiBkLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoZCksZC5tYXJnaT0Kbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkPQoiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3Q9CnRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZT0KZnQhPTNEInVu ZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxkKTp0fSxkLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50PQpzLmxlbmd0aD8obj0zRGUsZCk6bn0sZC5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGU9CixkKTpyfSxkLng9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGQzLmZ1bmN0b3IoZSksZCk6dX0sZD0KLnk9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGQzLmZ1bmN0b3IoZSksZCk6 YX0sZC54U2NhbGU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNE ZSxkKTpzfSxkLnlTY2FsZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG89M0RlLGQpOm99LGQueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5s ZW5ndGg/KGw9M0RlLGQpOmx9LGQueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhjPQo9M0RlLGQpOmN9LGQueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGg9M0RlLGQpOmh9LGQueVI9CmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsZCk6cH0sZC5hbmltYXRlPTNEZnVuY3Rpbz0Kbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsZCk6aX0sZC5jb2xvcj0zRGZ1bmN0aW9u KHQpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENvbG9yKHQpLGQp OmZ9LGR9LGUubW9kZWxzLnNwYXJrbGluZVBsdXM9M0RmdW49CmN0aW9uKCl7ZnVuY3Rpb24gdihl KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIE8oKXtpZihhKXJldHVybjt2YT0K ciBlPTNEQy5zZWxlY3RBbGwoIi5udi1ob3ZlclZhbHVlIikuZGF0YSh1KSxyPTNEZS5lbnRlcigp LmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudi1ob3ZlclZhbHVlIikuc3R5bGUoInN0cm9r ZS1vcGFjaXR5IiwwKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKTs9CmUuZXhpdCgpLnN0eWxlKCJz dHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCksZS5hdHRy KD0KInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModC54KCkoY1tl XSxlKSkrIiwwKSJ9KS5zdHlsZSgiPQpzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3Bh Y2l0eSIsMSk7aWYoIXUubGVuZ3RoKXJldHVybjtyLmFwcGVuZCgibGk9Cm5lIikuYXR0cigieDEi LDApLmF0dHIoInkxIiwtbi50b3ApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsYiksci5hcHBlbmQo InRleD0KdCIpLmF0dHIoImNsYXNzIiwibnYteFZhbHVlIikuYXR0cigieCIsLTYpLmF0dHIoInki LC1uLnRvcCkuYXR0cigidGV4dC1hbmNoPQpvciIsImVuZCIpLmF0dHIoImR5IiwiLjllbSIpLEMu c2VsZWN0KCIubnYtaG92ZXJWYWx1ZSAubnYteFZhbHVlIikudGV4dChmKHQ9Ci54KCkoY1t1WzBd XSx1WzBdKSkpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi15VmFsdWUiKS5hdHRy KCJ4Iiw2KT0KLmF0dHIoInkiLC1uLnRvcCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmF0 dHIoImR5IiwiLjllbSIpLEMuc2VsZWN0KCIuPQpudi1ob3ZlclZhbHVlIC5udi15VmFsdWUiKS50 ZXh0KGwodC55KCkoY1t1WzBdXSx1WzBdKSkpfWZ1bmN0aW9uIE0oKXtmdW5jdGk9Cm9uIHIoZSxu KXt2YXIgcj0zRE1hdGguYWJzKHQueCgpKGVbMF0sMCktbiksaT0zRDA7Zm9yKHZhciBzPTNEMDtz PGUubGVuZ3RoOz0KcysrKU1hdGguYWJzKHQueCgpKGVbc10scyktbik8ciYmKHI9M0RNYXRoLmFi cyh0LngoKShlW3NdLHMpLW4pLGk9M0RzKTtyZXR1PQpybiBpfWlmKGEpcmV0dXJuO3ZhciBlPTNE ZDMubW91c2UodGhpcylbMF0tbi5sZWZ0O3U9M0RbcihjLE1hdGgucm91bmQocy5pbnY9CmVydChl KSkpXSxPKCl9dmFyIG09M0RkMy5zZWxlY3QodGhpcyksZz0zRChyfHxwYXJzZUludChtLnN0eWxl KCJ3aWR0aCIpKXx8OT0KNjApLW4ubGVmdC1uLnJpZ2h0LGI9M0QoaXx8cGFyc2VJbnQobS5zdHls ZSgiaGVpZ2h0IikpfHw0MDApLW4udG9wLW4uYm90dG9tPQo7di51cGRhdGU9M0RmdW5jdGlvbigp e3YoZSl9LHYuY29udGFpbmVyPTNEdGhpcztpZighY3x8IWMubGVuZ3RoKXt2YXIgdz0zRG09Ci5z ZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtkXSk7cmV0dXJuIHcuZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyKCJjbD0KYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2Vt Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hPQp0dHIoIngiLG4ubGVmdCtnLzIp LmF0dHIoInkiLG4udG9wK2IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHZ9bS5zZWw9 CmVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciBFPTNEdC55KCkoY1tjLmxlbmd0aC0x XSxjLmxlbmd0aC0xKTtzPTNEdD0KLnhTY2FsZSgpLG89M0R0LnlTY2FsZSgpO3ZhciBTPTNEbS5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFya2xpbmVwbHVzIikuPQpkYXRhKFtjXSksVD0zRFMu ZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zcGFya2xp bmU9CnBsdXMiKSxOPTNEVC5hcHBlbmQoImciKSxDPTNEUy5zZWxlY3QoImciKTtOLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtcz0KcGFya2xpbmVXcmFwIiksTi5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LXZhbHVlV3JhcCIpLE4uYXBwZW5kKCJnIikuYXR0PQpyKCJjbGFzcyIsIm52 LWhvdmVyQXJlYSIpLFMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5sZWZ0KyIsIitu LnRvcCs9CiIpIik7dmFyIGs9M0RDLnNlbGVjdCgiLm52LXNwYXJrbGluZVdyYXAiKTt0LndpZHRo KGcpLmhlaWdodChiKSxrLmNhbGwodCk7dj0KYXIgTD0zREMuc2VsZWN0KCIubnYtdmFsdWVXcmFw IiksQT0zREwuc2VsZWN0QWxsKCIubnYtY3VycmVudFZhbHVlIikuZGF0YShbPQpFXSk7QS5lbnRl cigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtY3VycmVudFZhbHVlIikuYXR0cigi ZHgiLHA/LTg9Cjo4KS5hdHRyKCJkeSIsIi45ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLHA/ImVu ZCI6InN0YXJ0IiksQS5hdHRyKCJ4IixnKyhwPz0Kbi5yaWdodDowKSkuYXR0cigieSIsaD9mdW5j dGlvbihlKXtyZXR1cm4gbyhlKX06MCkuc3R5bGUoImZpbGwiLHQuY29sb3IoKShjPQpbYy5sZW5n dGgtMV0sYy5sZW5ndGgtMSkpLnRleHQobChFKSksTi5zZWxlY3QoIi5udi1ob3ZlckFyZWEiKS5h cHBlbmQoInJlY3Q9CiIpLm9uKCJtb3VzZW1vdmUiLE0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXth PTNEIWF9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKD0KKXt1PTNEW10sTygpfSksQy5zZWxlY3Qo Ii5udi1ob3ZlckFyZWEgcmVjdCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7PQpyZXR1 cm4idHJhbnNsYXRlKCIrIC1uLmxlZnQrIiwiKyAtbi50b3ArIikifSkuYXR0cigid2lkdGgiLGcr bi5sZWZ0K24ucmlnaHQ9CikuYXR0cigiaGVpZ2h0IixiK24udG9wKX0pLHZ9dmFyIHQ9M0RlLm1v ZGVscy5zcGFya2xpbmUoKSxuPTNEe3RvcDoxNSxyaWdodD0KOjEwMCxib3R0b206MTAsbGVmdDo1 MH0scj0zRG51bGwsaT0zRG51bGwscyxvLHU9M0RbXSxhPTNEITEsZj0zRGQzLmZvcm1hdCgiPQos ciIpLGw9M0RkMy5mb3JtYXQoIiwuMmYiKSxjPTNEITAsaD0zRCEwLHA9M0QhMSxkPTNEIk5vIERh dGEgQXZhaWxhYmxlLiI7cmU9CnR1cm4gdi5zcGFya2xpbmU9M0R0LGQzLnJlYmluZCh2LHQsIngi LCJ5IiwieFNjYWxlIiwieVNjYWxlIiwiY29sb3IiKSx2Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0 aW9uc0Z1bmMuYmluZCh2KSx2Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu PQpsZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm4udG9w LG4ucmlnaHQ9M0R0eXBlb2YgZS49CnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6bi5yaWdo dCxuLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbj0KZWQiP2UuYm90dG9tOm4u Ym90dG9tLG4ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om4ubGVm dCx2PQopOm59LHYud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cj0zRGUsdik6cn0sdi5oZWlnaHQ9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhpPTNEZSx2KTppfSx2LnhUaWNrRm9ybWF0PTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZj0zRGUsdik6Zn0sdi55VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHYpOmx9LHYuc2hvd1ZhbHVlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8oYz0zRGUsdik6Y30sdi5hbGlnblZhbHVl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLD0Kdik6aH0sdi5y aWdodEFsaWduVmFsdWU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0z RGUsdik6cH0sPQp2Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhkPTNEZSx2KTpkfSx2fSxlLm1vZGVscy5zdGE9CmNrZWRBcmVhPTNEZnVuY3Rpb24oKXtmdW5j dGlvbiBnKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9M0RuLXQubD0KZWZ0LXQu cmlnaHQsYj0zRHItdC50b3AtdC5ib3R0b20sdz0zRGQzLnNlbGVjdCh0aGlzKTtwPTNEdi54U2Nh bGUoKSxkPTNEdi55PQpTY2FsZSgpO3ZhciBFPTNEZTtlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtl LnNlcmllc0luZGV4PTNEdCxlLnZhbHVlcz0zRGUudmE9Cmx1ZXMubWFwKGZ1bmN0aW9uKGUsbil7 cmV0dXJuIGUuaW5kZXg9M0RuLGUuc2VyaWVzSW5kZXg9M0R0LGV9KX0pO3ZhciBTPTNEZT0KLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pO2U9M0RkMy5sYXlvdXQuc3RhY2so KS5vcmRlcihsKS5vZmZzPQpldChmKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVz fSkueChvKS55KHUpLm91dChmdW5jdGlvbihlLHQsbil7dmE9CnIgcj0zRHUoZSk9M0Q9M0Q9M0Qw PzA6bjtlLmRpc3BsYXk9M0R7eTpyLHkwOnR9fSkoUyk7dmFyIFQ9M0R3LnNlbGVjdEFsbCgiZz0K Lm52LXdyYXAubnYtc3RhY2tlZGFyZWEiKS5kYXRhKFtlXSksTj0zRFQuZW50ZXIoKS5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsPQoibnZkMyBudi13cmFwIG52LXN0YWNrZWRhcmVhIiksQz0zRE4u YXBwZW5kKCJkZWZzIiksaz0zRE4uYXBwZW5kKCJnIiksTD0zRFQ9Ci5zZWxlY3QoImciKTtrLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXJlYVdyYXAiKSxrLmFwcGVuZCgiZyIpLmF0dHIo Ij0KY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpLFQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIrdC5sZWZ0KyIsIit0LnRvcCsiPQopIiksdi53aWR0aChhKS5oZWlnaHQoYikueChvKS55KGZ1 bmN0aW9uKGUpe3JldHVybiBlLmRpc3BsYXkueStlLmRpc3BsYXkueTA9Cn0pLmZvcmNlWShbMF0p LmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0lu ZGV4KT0KfSkpO3ZhciBBPTNETC5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVtKGUpO0Eu Y2FsbCh2KSxDLmFwcGVuZCgiY2xpcFBhPQp0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1jbGlwLSIr cykuYXBwZW5kKCJyZWN0IiksVC5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIis9CnMrIiByZWN0Iiku YXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsYiksTC5hdHRyKCJjbGlwLXBhdGgiLGg/InVy bCgjbnYtZT0KZGdlLWNsaXAtIitzKyIpIjoiIik7dmFyIE89M0RkMy5zdmcuYXJlYSgpLngoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gcChvKGUsdCkpPQp9KS55MChmdW5jdGlvbihlKXtyZXR1cm4gZChl LmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGE9CnkueStlLmRp c3BsYXkueTApfSkuaW50ZXJwb2xhdGUoYyksTT0zRGQzLnN2Zy5hcmVhKCkueChmdW5jdGlvbihl LHQpe3JldHVybj0KIHAobyhlLHQpKX0pLnkwKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlzcGxh eS55MCl9KS55MShmdW5jdGlvbihlKXtyZXR1cm4gPQpkKGUuZGlzcGxheS55MCl9KSxfPTNETC5z ZWxlY3QoIi5udi1hcmVhV3JhcCIpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGE9CnRhKGZ1 bmN0aW9uKGUpe3JldHVybiBlfSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNz IixmdW5jdGlvbihlLD0KdCl7cmV0dXJuIm52LWFyZWEgbnYtYXJlYS0iK3R9KS5hdHRyKCJkIixm dW5jdGlvbihlLHQpe3JldHVybiBNKGUudmFsdWVzLGUuPQpzZXJpZXNJbmRleCl9KS5vbigibW91 c2VvdmVyIixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciI9Ciwh MCksbS5hcmVhTW91c2VvdmVyKHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50LnBh Z2VYLGQzLmV2ZW50LnBhZz0KZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9uKCJt b3VzZW91dCIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpPQpzKS5jbGFzc2VkKCJob3ZlciIs ITEpLG0uYXJlYU1vdXNlb3V0KHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50LnA9 CmFnZVgsZDMuZXZlbnQucGFnZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9uKCJj bGljayIsZnVuY3Rpb24oZSx0KT0Ke2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEp LG0uYXJlYUNsaWNrKHtwb2ludDplLHNlcmllczplLmtleSxwb3M6PQpbZDMuZXZlbnQucGFnZVgs ZDMuZXZlbnQucGFnZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLF8uZXhpdCgpLnJl bW89CnZlKCksXy5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShl LGUuc2VyaWVzSW5kZXgpfSkuc3R5bD0KZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBl LmNvbG9yfHxpKGUsZS5zZXJpZXNJbmRleCl9KSxfLmF0dHIoImQiLGZ1PQpuY3Rpb24oZSx0KXty ZXR1cm4gTyhlLnZhbHVlcyx0KX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIuYXJl YSIsZnU9Cm5jdGlvbihlKXtMLnNlbGVjdCgiLm52LWNoYXJ0LSIrcysiIC5udi1hcmVhLSIrZS5z ZXJpZXNJbmRleCkuY2xhc3NlZCgiaG92ZT0KciIsITApfSksdi5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3V0LmFyZWEiLGZ1bmN0aW9uKGUpe0wuc2VsZWN0KCIubnYtY2hhPQpydC0iK3MrIiAu bnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxnLmQzX3N0YWNr ZWRPZmZzZXQ9Cl9zdGFja1BlcmNlbnQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRGUubGVuZ3RoLG49 M0RlWzBdLmxlbmd0aCxyPTNEMS90LGkscyxvLD0KYT0zRFtdO2ZvcihzPTNEMDtzPG47KytzKXtm b3IoaT0zRDAsbz0zRDA7aTxFLmxlbmd0aDtpKyspbys9M0R1KEVbaV0udmFsdWVzPQpbc10pO2lm KG8pZm9yKGk9M0QwO2k8dDtpKyspZVtpXVtzXVsxXS89M0RvO2Vsc2UgZm9yKGk9M0QwO2k8dDtp KyspZVtpXVtzXVs9CjFdPTNEcn1mb3Iocz0zRDA7czxuOysrcylhW3NdPTNEMDtyZXR1cm4gYX19 KSxnfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dD0Kb206MCxsZWZ0OjB9LG49M0Q5NjAscj0z RDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoPQoucmFu ZG9tKCkqMWU1KSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sdT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnl9LGE9M0Q9CiJzdGFjayIsZj0zRCJ6ZXJvIixsPTNEImRlZmF1bHQiLGM9M0QibGlu ZWFyIixoPTNEITEscCxkLHY9M0RlLm1vZGVscy5zY2F0dD0KZXIoKSxtPTNEZDMuZGlzcGF0Y2go InRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJhcmVhQ2xpY2siLCJhcmVhTW91c2VvdmVyPQoi LCJhcmVhTW91c2VvdXQiKTtyZXR1cm4gdi5zaXplKDIuMikuc2l6ZURvbWFpbihbMi4yLDIuMl0p LHYuZGlzcGF0Y2gub24oImU9CmxlbWVudENsaWNrLmFyZWEiLGZ1bmN0aW9uKGUpe20uYXJlYUNs aWNrKGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbz0KdmVyLnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sbS50b29sdGlw PQpTaG93KGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe20udG9vbHRpcEhpZGU9CihlKX0pLGcuZGlzcGF0Y2g9M0RtLGcuc2NhdHRlcj0zRHYs ZDMucmViaW5kKGcsdiwiaW50ZXJhY3RpdmUiLCJzaXplIiwieFNjYT0KbGUiLCJ5U2NhbGUiLCJ6 U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4i LCJmPQpvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25v aSIsImNsaXBSYWRpdXMiLCJoaWdobGk9CmdodFBvaW50IiwiY2xlYXJIaWdobGlnaHRzIiksZy5v cHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGcpLGcueD0zRD0KZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RkMy5mdW5jdG9yKGUpLGcpOm99LGcueT0zRGZ1 bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9yKGUpLGcp OnV9LGcubWFyZ2luPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50 b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdD0KLnJpZ2h0PTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNE dHlwZW9mIGUuPQpib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmU9CmQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53 aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZT0KLGcpOm59 LGcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGcp OnJ9LGcuY2xpcEVkPQpnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho PTNEZSxnKTpofSxnLmNvbG9yPTNEZnVuY3Rpb24odCk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oaT0zRGUudXRpbHMuZ2V0Q29sb3IodCksZyk6aX0sZy5vZmZzZXQ9M0RmdW5jdGlvbj0KKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxnKTpmfSxnLm9yZGVyPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8obD0zRGUsZyk6bH0sZy5zdHlsZT0zRGZ1bmN0 aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiA9CmE7YT0zRGU7c3dpdGNoKGEpe2Nh c2Uic3RhY2siOmcub2Zmc2V0KCJ6ZXJvIiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nhcz0K ZSJzdHJlYW0iOmcub2Zmc2V0KCJ3aWdnbGUiKSxnLm9yZGVyKCJpbnNpZGUtb3V0Iik7YnJlYWs7 Y2FzZSJzdHJlYW0tY2VudGVyPQoiOmcub2Zmc2V0KCJzaWxob3VldHRlIiksZy5vcmRlcigiaW5z aWRlLW91dCIpO2JyZWFrO2Nhc2UiZXhwYW5kIjpnLm9mZnNldCg9CiJleHBhbmQiKSxnLm9yZGVy KCJkZWZhdWx0Iik7YnJlYWs7Y2FzZSJzdGFja19wZXJjZW50IjpnLm9mZnNldChnLmQzX3N0YWNr ZT0KZE9mZnNldF9zdGFja1BlcmNlbnQpLGcub3JkZXIoImRlZmF1bHQiKX1yZXR1cm4gZ30sZy5p bnRlcnBvbGF0ZT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Rl LGcpOmN9LGd9LGUubW9kZWxzLnN0YWNrZWRBcmVhQ2hhcnQ9M0RmdW49CmN0aW9uKCl7ZnVuY3Rp b24gTSh5KXtyZXR1cm4geS5lYWNoKGZ1bmN0aW9uKHkpe3ZhciBBPTNEZDMuc2VsZWN0KHRoaXMp LF89Cj0zRHRoaXMsRD0zRChhfHxwYXJzZUludChBLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11Lmxl ZnQtdS5yaWdodCxQPTNEKGZ8fHBhcj0Kc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUu dG9wLXUuYm90dG9tO00udXBkYXRlPTNEZnVuY3Rpb24oKXtBLmNhbGwoPQpNKX0sTS5jb250YWlu ZXI9M0R0aGlzLFMuZGlzYWJsZWQ9M0R5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJs ZWR9KTs9CmlmKCF4KXt2YXIgSDt4PTNEe307Zm9yKEggaW4gUylTW0hdaW5zdGFuY2VvZiBBcnJh eT94W0hdPTNEU1tIXS5zbGljZSgwKTp4Wz0KSF09M0RTW0hdfWlmKCF5fHwheS5sZW5ndGh8fCF5 LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkuPQpsZW5ndGgpe3Zh ciBCPTNEQS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEIuZW50ZXIo KS5hcHBlbmQ9CigidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJk eSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaD0Kb3IiLCJtaWRkbGUiKSxCLmF0dHIoIngiLHUu bGVmdCtELzIpLmF0dHIoInkiLHUudG9wK1AvMikudGV4dChmdW5jdGlvbihlKXtyPQpldHVybiBl fSksTX1BLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGI9M0R0LnhTY2FsZSgpLHc9 M0R0LnlTY2FsZSg9Cik7dmFyIGo9M0RBLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXN0YWNrZWRB cmVhQ2hhcnQiKS5kYXRhKFt5XSksRj0zRGouZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnZkMyBudi13cmFwIG52LXN0YWNrZWRBcmVhQ2hhcnQiKS5hcHBlbmQoImciPQopLEk9 M0RqLnNlbGVjdCgiZyIpO0YuYXBwZW5kKCJyZWN0Iikuc3R5bGUoIm9wYWNpdHkiLDApLEYuYXBw ZW5kKCJnIikuYXR0cig9CiJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxGLmFwcGVuZD0KKCJnIikuYXR0cigiY2xhc3MiLCJu di1zdGFja2VkV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXPQpy YXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksRi5hcHBl bmQoImciKS5hdHRyKCJjbGE9CnNzIiwibnYtaW50ZXJhY3RpdmUiKSxJLnNlbGVjdCgicmVjdCIp LmF0dHIoIndpZHRoIixEKS5hdHRyKCJoZWlnaHQiLFApO2lmKD0KaCl7dmFyIHE9M0RjP0QtQzpE O2kud2lkdGgocSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oeSkuY2FsbChpKSx1 PQoudG9wIT0zRGkuaGVpZ2h0KCkmJih1LnRvcD0zRGkuaGVpZ2h0KCksUD0zRChmfHxwYXJzZUlu dChBLnN0eWxlKCJoZWlnaHQiKSk9Cnx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3QoIi5u di1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYT0KdGUoIisoRC1xKSsiLCIr IC11LnRvcCsiKSIpfWlmKGMpe3ZhciBSPTNEW3trZXk6TC5zdGFja2VkfHwiU3RhY2tlZCIsbWV0 YUtlPQp5OiJTdGFja2VkIixkaXNhYmxlZDp0LnN0eWxlKCkhPTNEInN0YWNrIixzdHlsZToic3Rh Y2sifSx7a2V5Okwuc3RyZWFtfHwiU3Q9CnJlYW0iLG1ldGFLZXk6IlN0cmVhbSIsZGlzYWJsZWQ6 dC5zdHlsZSgpIT0zRCJzdHJlYW0iLHN0eWxlOiJzdHJlYW0ifSx7a2V5Oj0KTC5leHBhbmRlZHx8 IkV4cGFuZGVkIixtZXRhS2V5OiJFeHBhbmRlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJleHBh bmQiLHN0PQp5bGU6ImV4cGFuZCJ9LHtrZXk6TC5zdGFja19wZXJjZW50fHwiU3RhY2sgJSIsbWV0 YUtleToiU3RhY2tfUGVyY2VudCIsZGlzYWI9CmxlZDp0LnN0eWxlKCkhPTNEInN0YWNrX3BlcmNl bnQiLHN0eWxlOiJzdGFja19wZXJjZW50In1dO0M9M0RrLmxlbmd0aC8zKjI2MD0KLFI9M0RSLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4gay5pbmRleE9mKGUubWV0YUtleSkhPTNEPTNELTF9KSxz LndpZHRoKEMpPQouY29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksSS5zZWxlY3QoIi5udi1j b250cm9sc1dyYXAiKS5kYXR1bShSKS5jYWxsKHM9CiksdS50b3AhPTNETWF0aC5tYXgocy5oZWln aHQoKSxpLmhlaWdodCgpKSYmKHUudG9wPTNETWF0aC5tYXgocy5oZWlnaHQoKSxpLj0KaGVpZ2h0 KCkpLFA9M0QoZnx8cGFyc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90 dG9tKSxJLnNlbGVjPQp0KCIubnYtY29udHJvbHNXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDAsIisgLXUudG9wKyIpIil9ai5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgi K3UubGVmdCsiLCIrdS50b3ArIikiKSx2JiZJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLj0KYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRCsiLDApIiksbSYmKG8ud2lkdGgoRCkuaGVpZ2h0 KFApLm1hcmdpbih7bGVmPQp0OnUubGVmdCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoQSkueFNj YWxlKGIpLGouc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS49CmNhbGwobykpLHQud2lkdGgoRCku aGVpZ2h0KFApO3ZhciBVPTNESS5zZWxlY3QoIi5udi1zdGFja2VkV3JhcCIpLmRhdHVtKHkpOz0K VS5jYWxsKHQpLHAmJihuLnNjYWxlKGIpLnRpY2tzKEQvMTAwKS50aWNrU2l6ZSgtUCwwKSxJLnNl bGVjdCgiLm52LXgubnYtYXhpPQpzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitQ KyIpIiksSS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG49CikpLGQmJihyLnNjYWxlKHcp LnRpY2tzKHQub2Zmc2V0KCk9M0Q9M0Qid2lnZ2xlIj8wOlAvMzYpLnRpY2tTaXplKC1ELDApLnNl dD0KVGlja0Zvcm1hdCh0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kInx8dC5zdHlsZSgpPTNEPTNEInN0 YWNrX3BlcmNlbnQiP2QzLmZvcm1hPQp0KCIlIik6RSksSS5zZWxlY3QoIi5udi15Lm52LWF4aXMi KS5jYWxsKHIpKSx0LmRpc3BhdGNoLm9uKCJhcmVhQ2xpY2sudG9nZ2w9CmUiLGZ1bmN0aW9uKGUp e3kuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RoPTNEPTNEPTNE MT95Lj0KZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPTNEITF9KTp5LmZvckVhY2goZnVu Y3Rpb24odCxuKXt0LmRpc2FibGVkPTNEPQpuIT0zRGUuc2VyaWVzSW5kZXh9KSxTLmRpc2FibGVk PTNEeS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksTi49CnN0YXRlQ2hhbmdl KFMpLE0udXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7 Uy5kaXNhYj0KbGVkPTNEZS5kaXNhYmxlZCxOLnN0YXRlQ2hhbmdlKFMpLE0udXBkYXRlKCl9KSxz LmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsPQpmdW5jdGlvbihlLG4pe2lmKCFlLmRpc2FibGVk KXJldHVybjtSPTNEUi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9Cj0zRCEwLGV9 KSxlLmRpc2FibGVkPTNEITEsdC5zdHlsZShlLnN0eWxlKSxTLnN0eWxlPTNEdC5zdHlsZSgpLE4u c3RhdGVDaGFuZz0KZShTKSxNLnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNl bW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhckhpZ2hsPQppZ2h0cygpO3ZhciBzLGEsZixjPTNEW107 eS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWU9Ci5kaXNh YmxlZH0pLmZvckVhY2goZnVuY3Rpb24obixyKXthPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZh bHVlcyxpLnBvaW50WD0KVmFsdWUsTS54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixhLCEwKTt2YXIg bz0zRG4udmFsdWVzW2FdO2lmKHR5cGVvZiBvPTNEPTNEPQoidW5kZWZpbmVkIilyZXR1cm47dHlw ZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9M0RvKSx0eXBlb2YgZj0zRD0zRCJ1bmRlZmk9Cm5l ZCImJihmPTNETS54U2NhbGUoKShNLngoKShvLGEpKSk7dmFyIHU9M0R0LnN0eWxlKCk9M0Q9M0Qi ZXhwYW5kIj9vLmRpc3BsYT0KeS55Ok0ueSgpKG8sYSk7Yy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6 dSxjb2xvcjpsKG4sbi5zZXJpZXNJbmRleCksc3RhY2tlZFZhPQpsdWU6by5kaXNwbGF5fSl9KSxj LnJldmVyc2UoKTtpZihjLmxlbmd0aD4yKXt2YXIgaD0zRE0ueVNjYWxlKCkuaW52ZXJ0KGkubW89 CnVzZVkpLHA9M0RJbmZpbml0eSxkPTNEbnVsbDtjLmZvckVhY2goZnVuY3Rpb24oZSx0KXtoPTNE TWF0aC5hYnMoaCk7dmFyIG49Cj0zRE1hdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkwKSxyPTNETWF0 aC5hYnMoZS5zdGFja2VkVmFsdWUueSk7aWYoaD49M0RuJiZoPD0KPTNEcituKXtkPTNEdDtyZXR1 cm59fSksZCE9M0RudWxsJiYoY1tkXS5oaWdobGlnaHQ9M0QhMCl9dmFyIHY9M0RuLnRpY2tGb3Jt PQphdCgpKE0ueCgpKHMsYSkpLG09M0R0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kIj9mdW5jdGlvbihl LHQpe3JldHVybiBkMy5mb3JtYXQ9CigiLjElIikoZSl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIu dGlja0Zvcm1hdCgpKGUpfTtvLnRvb2x0aXAucG9zaXRpb24oe2xlZj0KdDpmK3UubGVmdCx0b3A6 aS5tb3VzZVkrdS50b3B9KS5jaGFydENvbnRhaW5lcihfLnBhcmVudE5vZGUpLmVuYWJsZWQoZyku dmFsPQp1ZUZvcm1hdHRlcihtKS5kYXRhKHt2YWx1ZTp2LHNlcmllczpjfSkoKSxvLnJlbmRlckd1 aWRlTGluZShmKX0pLG8uZGlzcGF0Y2g9Ci5vbigiZWxlbWVudE1vdXNlb3V0IixmdW5jdGlvbihl KXtOLnRvb2x0aXBIaWRlKCksdC5jbGVhckhpZ2hsaWdodHMoKX0pLE4ubz0KbigidG9vbHRpcFNo b3ciLGZ1bmN0aW9uKGUpe2cmJk8oZSxfLnBhcmVudE5vZGUpfSksTi5vbigiY2hhbmdlU3RhdGUi LGZ1bmN0PQppb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJnkubGVuZ3Ro PTNEPTNEPTNEZS5kaXNhYmxlZC5sZW5ndGg9CiYmKHkuZm9yRWFjaChmdW5jdGlvbih0LG4pe3Qu ZGlzYWJsZWQ9M0RlLmRpc2FibGVkW25dfSksUy5kaXNhYmxlZD0zRGUuZGlzYT0KYmxlZCksdHlw ZW9mIGUuc3R5bGUhPTNEInVuZGVmaW5lZCImJnQuc3R5bGUoZS5zdHlsZSksTS51cGRhdGUoKX0p fSksTX12YXIgPQp0PTNEZS5tb2RlbHMuc3RhY2tlZEFyZWEoKSxuPTNEZS5tb2RlbHMuYXhpcygp LHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW89CmRlbHMubGVnZW5kKCkscz0zRGUubW9kZWxz LmxlZ2VuZCgpLG89M0RlLmludGVyYWN0aXZlR3VpZGVsaW5lKCksdT0zRHt0b3A6Mz0KMCxyaWdo dDoyNSxib3R0b206NTAsbGVmdDo2MH0sYT0zRG51bGwsZj0zRG51bGwsbD0zRGUudXRpbHMuZGVm YXVsdENvbG9yKCksPQpjPTNEITAsaD0zRCEwLHA9M0QhMCxkPTNEITAsdj0zRCExLG09M0QhMSxn PTNEITAseT0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmU9CnR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8 cD4iK24rIiBvbiAiK3QrIjwvcD4ifSxiLHcsRT0zRGQzLmZvcm1hdCgiLC4yZiIpLFM9Cj0zRHtz dHlsZTp0LnN0eWxlKCl9LHg9M0RudWxsLFQ9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixOPTNEZDMu ZGlzcGF0Y2goInRvbz0KbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hh bmdlU3RhdGUiKSxDPTNEMjUwLGs9M0RbIlN0YWNrZWQiPQosIlN0cmVhbSIsIkV4cGFuZGVkIl0s TD0zRHt9LEE9M0QwO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWU9Cm50 KHY/InJpZ2h0IjoibGVmdCIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBPPTNEZnVuY3Rpb24oaSxz KXt2YXIgbz0zRGkucG9zWz0KMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9m ZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpPQooaS5wb2ludCxpLnBvaW50SW5k ZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPQo9 M0R5KGkuc2VyaWVzLmtleSxhLGYsaSxNKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8 MD8ibiI6InMiLG51bGwscyk9Cn07cmV0dXJuIHQuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93Iixm dW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt1LmxlZnQsZT0KLnBvc1sxXSt1LnRvcF0sTi50 b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbihlKXtO PQoudG9vbHRpcEhpZGUoZSl9KSxOLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtnJiZlLnRv b2x0aXAuY2xlYW51cCgpfSksTS49CmRpc3BhdGNoPTNETixNLnN0YWNrZWQ9M0R0LE0ubGVnZW5k PTNEaSxNLmNvbnRyb2xzPTNEcyxNLnhBeGlzPTNEbixNLnlBeGlzPQo9M0RyLE0uaW50ZXJhY3Rp dmVMYXllcj0zRG8sZDMucmViaW5kKE0sdCwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxl Iiw9CiJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJp bnRlcmFjdGl2ZSIsInVzZVZvcm9ubz0KaSIsIm9mZnNldCIsIm9yZGVyIiwic3R5bGUiLCJjbGlw RWRnZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImludGVyPQpwb2xhdGUiKSxNLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoTSksTS5tYXJnaW49M0RmdW5jdGlvbihl KXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLnRvcDp1LnRvcCx1LnJpZz0KaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OnUucmlnaHQsdS5ib3R0b209M0R0eXBlb2YgZS5ib3R0PQpvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp1LmJvdHRvbSx1LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRl ZmluZWQiP2U9Ci5sZWZ0OnUubGVmdCxNKTp1fSxNLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLE0pOj0KYX0sTS5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsTSk6Zn0sTS5jb2xvcj0zRGZ1PQpuY3Rpb24o bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvbG9yKG4pLGkuY29s b3IobCksdC5jb2w9Cm9yKGwpLE0pOmx9LE0uc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLE0pOj0KY30sTS5zaG93TGVnZW5kPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLE0pOmh9LE0uc2hvd1hBPQp4aXM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsTSk6cH0sTS5zaG93 WUF4aXM9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxNKTpk fSxNLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHY9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLE0pOnZ9LE0udXNlSW50ZXJhPQpj dGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNE ZSxlPTNEPTNEPTNEITAmJig9Ck0uaW50ZXJhY3RpdmUoITEpLE0udXNlVm9yb25vaSghMSkpLE0p Om19LE0udG9vbHRpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KHk9 M0RlLE0pOnl9LE0udG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 PQpoPyhnPTNEZSxNKTpnfSxNLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHk9M0Q9CmUsTSk6eX0sTS5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxNKTpTfSxNLmRlZmF1bD0KdFN0YXRlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLE0pOnh9LE0ubm9EYXRhPTNEZnVu Y3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsTSk6VH0sTS50cmFuc2l0 aW9uRHVyYXRpb249M0RmdW5jdGlvbig9CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNE ZSxNKTpBfSxNLmNvbnRyb2xzRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5s ZW5ndGg/KGs9M0RlLE0pOmt9LE0uY29udHJvbExhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVuPQp0cy5sZW5ndGg/dHlwZW9mIGUhPTNEIm9iamVjdCI/TDooTD0zRGUsTSk6TH0sci5z ZXRUaWNrRm9ybWF0PTNEci50aWNrRm9ybWE9CnQsci50aWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHIpOkV9LE19fSgpLGRlZj0KaW5lKCJwbHVn aW4vcGx1Z2lucy9udmQzL252LmQzIixmdW5jdGlvbigpe30pLGRlZmluZSgicGx1Z2luL2NoYXJ0 cy9udmQzL2NvPQptbW9uL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQiLCJw bHVnaW4vcGx1Z2lucy9udmQzL252LmQzIl0sZnU9Cm5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQo ITAse30sZSx7dGl0bGU6IiIsY2F0ZWdvcnk6IiIsbGlicmFyeToiTlZEMyIsdGFnOj0KInN2ZyIs a2V5d29yZHM6InNtYWxsIn0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyL2NvbmZp ZyIsWyJwbHVnaW4vPQpjaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0 dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJSZWc9CnVsYXIiLGNhdGVnb3J5OiJCYXIgZGlh Z3JhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZT0KbDoh MCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixp c19udW1lcmljOiEwfX19PQopfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX3N0YWNr ZWQvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb209Cm1vbi9jb25maWciXSxmdW5jdGlv bihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlN0YWNrZWQiLGNhdGVnb3J5Oj0K IkJhciBkaWFncmFtcyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19s YWJlbDohMCxpc19hdXRvOiEwPQosaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5 LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHU9Cmdpbi9jaGFydHMvbnZkMy9i YXJfaG9yaXpvbnRhbC9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWci XT0KLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSG9yaXpvbnRh bCIsY2F0ZWdvcnk6IkJhciBkaWFnPQpyYW1zIixzZXR0aW5nczp7eF9heGlzX3R5cGU6e2luaXQ6 ImhpZGUifX0sY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC09CmF4aXMiLGlzX2xhYmVs OiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMi LGlzXz0KbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfaG9y aXpvbnRhbF9zdGFja2VkL2NvbmZpZyIsPQpbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29u ZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3Q9Cml0bGU6IlN0YWNr ZWQgaG9yaXpvbnRhbCIsY2F0ZWdvcnk6IkJhciBkaWFncmFtcyIsc2V0dGluZ3M6e3hfYXhpc190 eXBlOntpbj0KaXQ6ImhpZGUifX0sY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlz Iixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzPQpfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVz IGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW49Ci9jaGFydHMv bnZkMy9saW5lX2ZvY3VzL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZp ZyJdLGZ1bmN0aT0Kb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJMaW5lIHdp dGggZm9jdXMiLGNhdGVnb3J5OiJPdGhlcnMiLHpvPQpvbWFibGU6Im5hdGl2ZSIsY29sdW1uczp7 eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiE9CjAsaXNf dW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0p fSksZGVmaW5lKCJwbD0KdWdpbi9jaGFydHMvbnZkMy9waWUvY29uZmlnIixbInBsdWdpbi9wbHVn aW5zL252ZDMvbnYuZDMiXSxmdW5jdGlvbigpe3JldHVyPQpuICQuZXh0ZW5kKCEwLHt9LHt0aXRs ZToiUGllIGNoYXJ0IixjYXRlZ29yeToiQXJlYSBjaGFydHMiLGxpYnJhcnk6Ik5WRDMiLHQ9CmFn OiJzdmciLGtleXdvcmRzOiJzbWFsbCIsY29sdW1uczp7bGFiZWw6e3RpdGxlOiJMYWJlbHMiLGlz X2xhYmVsOiEwLGlzX2F1dD0KbzohMH0seTp7dGl0bGU6IlZhbHVlcyIsaXNfbnVtZXJpYzohMH19 LHNldHRpbmdzOnttYWluX3NlcGFyYXRvcjp7dHlwZToic2VwPQphcmF0b3IiLHRpdGxlOiJQaWUg Y2hhcnQgc2V0dGluZ3MifSxkb251dF9yYXRpbzp7dGl0bGU6IkRvbnV0IHJhdGlvIixpbmZvOiI9 CkRldGVybWluZSBob3cgbGFyZ2UgdGhlIGRvbnV0IGhvbGUgd2lsbCBiZS4iLHR5cGU6InNlbGVj dCIsaW5pdDoiMC41IixkYXRhOj0KW3tsYWJlbDoiNTAlIix2YWx1ZToiMC41In0se2xhYmVsOiIy NSUiLHZhbHVlOiIwLjI1In0se2xhYmVsOiIxMCUiLHZhbHVlOiIwPQouMTAifSx7bGFiZWw6IjAl Iix2YWx1ZToiMCJ9XX0sc2hvd19sZWdlbmQ6e3RpdGxlOiJTaG93IGxlZ2VuZCIsaW5mbzoiV291 bGQ9CiB5b3UgbGlrZSB0byBhZGQgYSBsZWdlbmQ/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoi ZmFsc2UiLGRhdGE6W3tsYWJlbDoiWT0KZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFs dWU6ImZhbHNlIn1dfSxsYWJlbF9zZXBhcmF0b3I6e3R5cGU6InNlcGFyPQphdG9yIix0aXRsZToi TGFiZWwgc2V0dGluZ3MifSxsYWJlbF90eXBlOnt0aXRsZToiRG9udXQgbGFiZWwiLGluZm86Ildo YXQgd289CnVsZCB5b3UgbGlrZSB0byBzaG93IGZvciBlYWNoIHNsaWNlPyIsdHlwZToic2VsZWN0 Iixpbml0OiJwZXJjZW50IixkYXRhOlt7bD0KYWJlbDoiLS0gTm90aGluZyAtLSIsdmFsdWU6Imhp ZGUiLGhpZGU6ImxhYmVsX291dHNpZGUifSx7bGFiZWw6IkxhYmVsIGNvbHVtPQpuIix2YWx1ZToi a2V5IixzaG93OiJsYWJlbF9vdXRzaWRlIn0se2xhYmVsOiJWYWx1ZSBjb2x1bW4iLHZhbHVlOiJ2 YWx1ZSIsc2g9Cm93OiJsYWJlbF9vdXRzaWRlIn0se2xhYmVsOiJQZXJjZW50YWdlIix2YWx1ZToi cGVyY2VudCIsc2hvdzoibGFiZWxfb3V0c2lkZT0KIn1dfSxsYWJlbF9vdXRzaWRlOnt0aXRsZToi U2hvdyBvdXRzaWRlIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGxhYmVsPQpzIG91dHNp ZGUgdGhlIGRvbnV0PyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFi ZWw6IlllcyIsdmE9Cmx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sdXNl X3BhbmVsczp7aW5pdDoidHJ1ZSIsaGlkZTohMH19fT0KKX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0 cy9udmQzL3N0YWNrZWRhcmVhX2Z1bGwvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkPQozL2Nv bW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6 IkV4cGFuZGVkIix6b289Cm1hYmxlOiEwLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29yZHM6 ImRlZmF1bHQgc21hbGwiLGNvbHVtbnM6e3g6e3RpdGxlOj0KIlZhbHVlcyBmb3IgeC1heGlzIixp c19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmPQpv ciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMv c3RhY2tlZGFyZWFfc3RyZWE9Cm0vY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24v Y29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKD0KITAse30sZSx7dGl0bGU6IlN0 cmVhbSIsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIix6b29tYWJsZTohMCxrZXl3b3JkczoiZGVmYXVs PQp0IHNtYWxsIixzaG93bWF4bWluOiEwLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgt YXhpcyIsaXNfbGFiZWw6ITAsaXM9Cl9hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZh bHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZj0KaW5lKCJwbHVnaW4vY2hh cnRzL252ZDMvaGlzdG9ncmFtL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2Nv bmZpPQpnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIaXN0 b2dyYW0iLGNhdGVnb3J5OiJEYXRhIHA9CnJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9v bCBmcm9tIFRvb2xzaGVkKSIsZXhlY3V0ZToiaGlzdG9ncmFtIixrZXl3bz0KcmRzOiJzbWFsbCBt ZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3k6e3RpdGxlOiJPYnNlcnZhdGlvbnMiLGlzX251bWVyaWM6 ITB9fSxzPQpldHRpbmdzOnt4X2F4aXNfbGFiZWw6e2luaXQ6IlZhbHVlcyJ9LHlfYXhpc19sYWJl bDp7aW5pdDoiRGVuc2l0eSJ9LHlfYXhpc189CnR5cGU6e2luaXQ6ImYifSx5X2F4aXNfcHJlY2lz aW9uOntpbml0OiIuMiJ9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZD0KMy9saW5lL2Nv bmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4PQp0ZW5kKCEwLHt9LGUse3RpdGxlOiJMaW5lIGNoYXJ0IixjYXRlZ29yeToiT3Ro ZXJzIix6b29tYWJsZTohMCxjb2x1bW5zOnt4Ons9CnRpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIs aXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYT0KbHVlcyBm b3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQz L3NjYXR0ZXIvY29uPQpmaWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxm dW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse309CixlLHt0aXRsZToiU2NhdHRlciBwbG90 IixjYXRlZ29yeToiT3RoZXJzIix6b29tYWJsZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiVj0KYWx1 ZXMgZm9yIHgtYXhpcyIsaXNfbnVtZXJpYzohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlz Iixpc19udW1lcmljOiEwPQp9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvc3RhY2tl ZGFyZWEvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy89CmNvbW1vbi9jb25maWciXSxmdW5j dGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlJlZ3VsYXIiLHpvb21hYj0K bGU6ITAsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIixrZXl3b3JkczoiZGVmYXVsdCBzbWFsbCIsY29s dW1uczp7eDp7dGl0bGU6IlZhPQpsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86 ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciA9CnktYXhpcyIsaXNfbnVtZXJp YzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWciLFsi cD0KbHVnaW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQiXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRl bmQoITAse30sZSx7dGl0bGU6IiIsPQpjYXRlZ29yeToiIixsaWJyYXJ5OiJqcVBsb3QiLHRhZzoi ZGl2Iix6b29tYWJsZTohMCxrZXl3b3JkczoibWVkaXVtIixzZXR0aW49CmdzOntzZXBhcmF0b3Jf Z3JpZDp7dGl0bGU6IkdyaWRzIix0eXBlOiJzZXBhcmF0b3IifSx4X2F4aXNfZ3JpZDp7dGl0bGU6 IkF4aT0KcyBncmlkIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGdyaWQgbGluZXMgZm9y IHRoZSBYIGF4aXM/Iix0eXBlOiJyYWRpPQpvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpbe2xh YmVsOiJPbiIsdmFsdWU6InRydWUifSx7bGFiZWw6Ik9mZiIsdmFsdWU6ImY9CmFsc2UifV19LHlf YXhpc19ncmlkOnt0aXRsZToiQXhpcyBncmlkIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93 IGdyaWQgbD0KaW5lcyBmb3IgdGhlIFkgYXhpcz8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJ0 cnVlIixkYXRhOlt7bGFiZWw6Ik9uIix2YWx1PQplOiJ0cnVlIn0se2xhYmVsOiJPZmYiLHZhbHVl OiJmYWxzZSJ9XX19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2I9CmFyL2NvbmZp ZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0 dXJuICQuZXh0ZT0KbmQoITAse30sZSx7dGl0bGU6IlJlZ3VsYXIiLGNhdGVnb3J5OiJCYXIgZGlh Z3JhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1PQplcyBmb3IgeC1heGlzIixpc19sYWJlbDoh MCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS09CmF4aXMi LGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9saW5lL2Nv bmZpZyIsWyJwbHVnaT0Kbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihl KXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6PQoiTGluZSBjaGFydCIsY2F0ZWdvcnk6 Ik90aGVycyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWI9CmVs OiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMi LGlzX251bWVyaWM6ITB9fT0KfSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L3NjYXR0 ZXIvY29uZmlnIixbInBsdWdpbi9jaGFydHMvanFwbG90L2NvPQptbW9uL2NvbmZpZyJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiU2NhdHRlciBwbG90IixjYXQ9 CmVnb3J5OiJPdGhlcnMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNf bnVtZXJpYzohMH0seTp7dGl0bD0KZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9 fSxzZXR0aW5nczp7eF9heGlzX2dyaWQ6e2luaXQ6InRydWUifX19PQopfSksZGVmaW5lKCJwbHVn aW4vY2hhcnRzL2pxcGxvdC9ib3hwbG90L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9j b209Cm1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0 bGU6IkJveCBwbG90IixjYXRlZ29yeT0KOiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFy dHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGxpYnJhcnk6ImpxUGxvdCIsPQp0YWc6ImRpdiIsZXhl Y3V0ZToiYm94cGxvdCIsa2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSIsY29sdW1uczp7eTp7 dGl0bGU9CjoiT2JzZXJ2YXRpb25zIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3Nob3dfbGVn ZW5kOntpbml0OiJmYWxzZSJ9fX0pfSksZD0KZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2hp c3RvZ3JhbV9kaXNjcmV0ZS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsPQpvdC9jb21tb24v Y29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJEaXNj cmV0ZSBIaXM9CnRvZ3JhbSIsY2F0ZWdvcnk6IkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgJ2No YXJ0cycgdG9vbCBmcm9tIFRvb2xzaGVkKSIsZT0KeGVjdXRlOiJoaXN0b2dyYW1kaXNjcmV0ZSIs a2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSIsY29sdW1uczp7eDp7dGl0bGU6PQoiT2JzZXJ2 YXRpb25zIixpc19sYWJlbDohMH19LHNldHRpbmdzOnt4X2F4aXNfbGFiZWw6e2luaXQ6IkJyZWFr cyJ9LHlfYXhpc189CmxhYmVsOntpbml0OiJEZW5zaXR5In19fSl9KSxkZWZpbmUoInBsdWdpbi9j aGFydHMvb3RoZXJzL2hlYXRtYXAvY29uZmlnIixbIj0KcGx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZh dWx0Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIPQplYXRt YXAiLGNhdGVnb3J5OiJPdGhlcnMiLGxpYnJhcnk6IkN1c3RvbSIsdGFnOiJzdmciLGtleXdvcmRz OiJzbWFsbCIsem9vbWE9CmJsZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiQ29sdW1uIGxhYmVscyIs aXNfbGFiZWw6ITAsaXNfbnVtZXJpYzohMCxpc191bmlxdT0KZTohMH0seTp7dGl0bGU6IlJvdyBs YWJlbHMiLGlzX2xhYmVsOiEwLGlzX251bWVyaWM6ITAsaXNfdW5pcXVlOiEwfSx6Ont0aXRsPQpl OiJPYnNlcnZhdGlvbiIsaXNfbnVtZXJpYzohMH19LHNldHRpbmdzOnt1c2VfcGFuZWxzOntpbml0 OiJ0cnVlIixoaWRlOiEwfSw9CmNvbG9yX3NldDp7dGl0bGU6IkNvbG9yIHNjaGVtZSIsaW5mbzoi U2VsZWN0IGEgY29sb3Igc2NoZW1lIGZvciB5b3VyIGhlYXRtYT0KcCIsdHlwZToic2VsZWN0Iixp bml0OiJqZXQiLGRhdGE6W3tsYWJlbDoiQ29sZC10by1Ib3QiLHZhbHVlOiJob3QifSx7bGFiZWw6 PQoiQ29vbCIsdmFsdWU6ImNvb2wifSx7bGFiZWw6IkNvcHBlciIsdmFsdWU6ImNvcHBlciJ9LHts YWJlbDoiR3JheSBzY2FsZSIsdmE9Cmx1ZToiZ3JheSJ9LHtsYWJlbDoiSmV0Iix2YWx1ZToiamV0 In0se2xhYmVsOiJOby1HcmVlbiIsdmFsdWU6Im5vX2dyZWVuIn0sez0KbGFiZWw6Ik9jZWFuIix2 YWx1ZToib2NlYW4ifSx7bGFiZWw6IlBvbGFyIix2YWx1ZToicG9sYXIifSx7bGFiZWw6IlJlZC10 by1HPQpyZWVuIix2YWx1ZToicmVkZ3JlZW4ifSx7bGFiZWw6IlJlZC10by1ncmVlbiAoc2F0dXJh dGVkKSIsdmFsdWU6InJlZDJncmVlbiI9Cn0se2xhYmVsOiJSZWxpZWYiLHZhbHVlOiJyZWxpZWYi fSx7bGFiZWw6IlNlaXNtb2dyYXBoIix2YWx1ZToic2VpcyJ9LHtsYWJlbD0KOiJTZWFsYW5kIix2 YWx1ZToic2VhbGFuZCJ9LHtsYWJlbDoiU3BsaXQiLHZhbHVlOiJzcGxpdCJ9LHtsYWJlbDoiV3lz aXd5ZyIsPQp2YWx1ZToid3lzaXd5ZyJ9XX0sdXJsX3RlbXBsYXRlOnt0aXRsZToiVXJsIHRlbXBs YXRlIixpbmZvOiJFbnRlciBhIHVybCB0byA9CmxpbmsgdGhlIGxhYmVscyB3aXRoIGV4dGVybmFs IHNvdXJjZXMuIFVzZSBfX0xBQkVMX18gYXMgcGxhY2Vob2xkZXIuIix0eXBlOj0KInRleHQiLGlu aXQ6IiIscGxhY2Vob2xkZXI6Imh0dHA6Ly9zb21ldXJsLmNvbT9pZD0zRF9fTEFCRUxfXyJ9fX0p fSksZGVmaW5lPQooInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRtYXBfY2x1c3Rlci9jb25maWci LFsicGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG09CmFwL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiQ2x1c3RlcmVkIEhlYXRtYXAiLD0KY2F0ZWdv cnk6IkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9vbCBmcm9tIFRvb2xzaGVk KSIsZXhlY3V0ZToiPQpoZWF0bWFwIixrZXl3b3Jkczoic21hbGwgbWVkaXVtIGxhcmdlIn0pfSks ZGVmaW5lKCJwbHVnaW4vY2hhcnRzL3R5cGVzIixbInA9Cmx1Z2luL2NoYXJ0cy9udmQzL2Jhci9j b25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX3N0YWNrZWQvY29uZmlnIiwicGx1Zz0KaW4v Y2hhcnRzL252ZDMvYmFyX2hvcml6b250YWwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2Jh cl9ob3Jpem9udGFsX3N0PQphY2tlZC9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvbGluZV9m b2N1cy9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvcGk9CmUvY29uZmlnIiwicGx1Z2luL2No YXJ0cy9udmQzL3N0YWNrZWRhcmVhX2Z1bGwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzLz0K c3RhY2tlZGFyZWFfc3RyZWFtL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9oaXN0b2dyYW0v Y29uZmlnIiwicGx1Z2luL2NoPQphcnRzL252ZDMvbGluZS9jb25maWciLCJwbHVnaW4vY2hhcnRz L252ZDMvc2NhdHRlci9jb25maWciLCJwbHVnaW4vY2hhcnRzL249CnZkMy9zdGFja2VkYXJlYS9j b25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9q cT0KcGxvdC9saW5lL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90L3NjYXR0ZXIvY29uZmln IiwicGx1Z2luL2NoYXJ0cy9qcXBsPQpvdC9ib3hwbG90L2NvbmZpZyIsInBsdWdpbi9jaGFydHMv anFwbG90L2hpc3RvZ3JhbV9kaXNjcmV0ZS9jb25maWciLCJwbHVnaW49Ci9jaGFydHMvb3RoZXJz L2hlYXRtYXAvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcF9jbHVzdGVyL2Nv bmZpZz0KIl0sZnVuY3Rpb24oZSx0LG4scixpLHMsbyx1LGEsZixsLGMsaCxwLGQsdixtLGcseSl7 cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4PQp0ZW5kKHtkZWZhdWx0czp7bnZkM19iYXI6ZSxudmQz X2Jhcl9zdGFja2VkOnQsbnZkM19iYXJfaG9yaXpvbnRhbDpuLG52ZDNfYmE9CnJfaG9yaXpvbnRh bF9zdGFja2VkOnIsbnZkM19saW5lX2ZvY3VzOmksbnZkM19zdGFja2VkYXJlYTpjLG52ZDNfc3Rh Y2tlZGFyZT0KYV9mdWxsOm8sbnZkM19zdGFja2VkYXJlYV9zdHJlYW06dSxudmQzX3BpZTpzLG52 ZDNfbGluZTpmLG52ZDNfc2NhdHRlcjpsLG52PQpkM19oaXN0b2dyYW06YSxqcXBsb3RfYmFyOmgs anFwbG90X2hpc3RvZ3JhbV9kaXNjcmV0ZTptLGpxcGxvdF9saW5lOnAsanFwbG89CnRfc2NhdHRl cjpkLGpxcGxvdF9ib3hwbG90OnYsb3RoZXJzX2hlYXRtYXA6ZyxvdGhlcnNfaGVhdG1hcF9jbHVz dGVyOnl9fSl9KT0KLGRlZmluZSgicGx1Z2luL2FwcCIsWyJtdmMvdWkvdWktbW9kYWwiLCJtdmMv dWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjPQoiLCJ1dGlscy91dGlscyIsInBsdWdpbi9s aWJyYXJ5L2pvYnMiLCJwbHVnaW4vbGlicmFyeS9kYXRhc2V0cyIsInBsdWdpbi9saWI9CnJhcnkv c3RvcmFnZSIsInV0aWxzL2RlZmVycmVkIiwicGx1Z2luL3ZpZXdzL3ZpZXdlciIsInBsdWdpbi92 aWV3cy9lZGl0b3IiLD0KInBsdWdpbi9tb2RlbHMvY29uZmlnIiwicGx1Z2luL21vZGVscy9jaGFy dCIsInBsdWdpbi9jaGFydHMvdHlwZXMiXSxmdW5jdGlvPQpuKGUsdCxuLHIsaSxzLG8sdSxhLGYs bCxjLGgpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGk9Cm9u KHQpe3RoaXMub3B0aW9ucz0zRHQsR2FsYXh5JiZHYWxheHkubW9kYWw/dGhpcy5tb2RhbD0zREdh bGF4eS5tb2RhbDp0aGlzLj0KbW9kYWw9M0RuZXcgZS5WaWV3LHRoaXMuY29uZmlnPTNEbmV3IGws dGhpcy50eXBlcz0zRG5ldyBoLHRoaXMuY2hhcnQ9M0RuZXcgPQpjLHRoaXMuam9icz0zRG5ldyBp KHRoaXMpLHRoaXMuZGF0YXNldHM9M0RuZXcgcyh0aGlzKSx0aGlzLnN0b3JhZ2U9M0RuZXcgbyg9 CnRoaXMpLHRoaXMuZGVmZXJyZWQ9M0RuZXcgdSx0aGlzLnZpZXdlcl92aWV3PTNEbmV3IGEodGhp cyksdGhpcy5lZGl0b3Jfdmlldz0KPTNEbmV3IGYodGhpcyksdGhpcy4kZWwuYXBwZW5kKHRoaXMu dmlld2VyX3ZpZXcuJGVsKSx0aGlzLiRlbC5hcHBlbmQodGhpcy5lPQpkaXRvcl92aWV3LiRlbCk7 aWYoIXRoaXMuc3RvcmFnZS5sb2FkKCkpdGhpcy5nbygiZWRpdG9yIik7ZWxzZXt0aGlzLmdvKCJ2 aWU9CndlciIpO3ZhciBuPTNEdGhpczt0aGlzLmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24oKXtu LmNoYXJ0LnRyaWdnZXIoInJlZHJhdz0KIil9KX19LGdvOmZ1bmN0aW9uKGUpeyQoIi50b29sdGlw IikuaGlkZSgpO3N3aXRjaChlKXtjYXNlImVkaXRvciI6dGhpcy5lZGl0PQpvcl92aWV3LnNob3co KSx0aGlzLnZpZXdlcl92aWV3LmhpZGUoKTticmVhaztjYXNlInZpZXdlciI6dGhpcy5lZGl0b3Jf dmlldy49CmhpZGUoKSx0aGlzLnZpZXdlcl92aWV3LnNob3coKX19LGNoYXJ0UGF0aDpmdW5jdGlv bihlKXt2YXIgdD0zRGUuc3BsaXQoL18oLj0KKykvKTtyZXR1cm4gdC5sZW5ndGg+PTNEMj90WzBd KyIvIit0WzFdOihjb25zb2xlLmRlYnVnKCJGQUlMRUQgQXBwOmNoYXJ0UGF0PQpoKCkgLSBJbnZh bGlkIGZvcm1hdDogIitlKSx1bmRlZmluZWQpfX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1y IDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiBsaWIvZ2FsYXh5L2Rh dGF0eXBlcy9zZXF1ZW5jZS5weQotLS0gYS9saWIvZ2FsYXh5L2RhdGF0eXBlcy9zZXF1ZW5jZS5w eQorKysgYi9saWIvZ2FsYXh5L2RhdGF0eXBlcy9zZXF1ZW5jZS5weQpAQCAtMTcsNyArMTcsNyBA QAogZnJvbSBnYWxheHkuZGF0YXR5cGVzLmNoZWNrZXJzIGltcG9ydCBpc19nemlwCiBmcm9tIGdh bGF4eS5kYXRhdHlwZXMuc25pZmYgaW1wb3J0IGdldF90ZXN0X2ZuYW1lLCBnZXRfaGVhZGVycwog ZnJvbSBnYWxheHkuZGF0YXR5cGVzLm1ldGFkYXRhIGltcG9ydCBNZXRhZGF0YUVsZW1lbnQKLQor ZnJvbSBnYWxheHkuZGF0YXR5cGVzLnV0aWwuaW1hZ2VfdXRpbCBpbXBvcnQgY2hlY2tfaW1hZ2Vf dHlwZQo9MjAKIHRyeToKICAgICBlZ2dzLnJlcXVpcmUoICJieC1weXRob24iICkKQEAgLTgxNCwz ICs4MTQsMzQgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCj0y MAorCitjbGFzcyBSTkFEb3RQbG90TWF0cml4KCBkYXRhLkRhdGEgKToKKyAgICBmaWxlX2V4dCA9 M0QgInJuYV9lcHMiCisKKyAgICBkZWYgc2V0X3BlZWsoIHNlbGYsIGRhdGFzZXQsIGlzX211bHRp X2J5dGU9M0RGYWxzZSApOgorICAgICAgICBpZiBub3QgZGF0YXNldC5kYXRhc2V0LnB1cmdlZDoK KyAgICAgICAgICAgIGRhdGFzZXQucGVlayA9M0QgJ1JOQSBEb3QgUGxvdCBmb3JtYXQgKFBvc3Rz Y3JpcHQgZGVyaXZhdGl2ZSknCisgICAgICAgICAgICBkYXRhc2V0LmJsdXJiID0zRCBkYXRhLm5p Y2Vfc2l6ZSggZGF0YXNldC5nZXRfc2l6ZSgpICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IGRhdGFzZXQucGVlayA9M0QgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnCisgICAgICAgICAgICBkYXRh c2V0LmJsdXJiID0zRCAnZmlsZSBwdXJnZWQgZnJvbSBkaXNrJworCisgICAgZGVmIHNuaWZmKHNl bGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiRGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGlzIGluIFJO QSBkb3QgcGxvdCBmb3JtYXQuIiIiCisgICAgICAgIGlmIGNoZWNrX2ltYWdlX3R5cGUoIGZpbGVu YW1lLCBbJ0VQUyddICk6CisgICAgICAgICAgICBzZXEgPTNEIEZhbHNlCisgICAgICAgICAgICBj b29yID0zRCBGYWxzZQorICAgICAgICAgICAgcGFpcnMgPTNEIEZhbHNlCisgICAgICAgICAgICB3 aXRoIG9wZW4oIGZpbGVuYW1lICkgYXMgaGFuZGxlOgorICAgICAgICAgICAgICAgIGZvciBsaW5l IGluIGhhbmRsZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9M0QgbGluZS5zdHJpcCgpCisg ICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBs aW5lLnN0YXJ0c3dpdGgoJy9zZXF1ZW5jZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlcSA9M0QgVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp dGgoJy9jb29yJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vciA9M0QgVHJ1ZQor ICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy9wYWlycycpOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzID0zRCBUcnVlCisgICAgICAgICAgICAg ICAgICAgIGlmIHNlcSBhbmQgY29vciBhbmQgcGFpcnM6CisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIg LXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IGxpYi9nYWxheHkv ZGF0YXR5cGVzL3V0aWwvaW1hZ2VfdXRpbC5weQotLS0gYS9saWIvZ2FsYXh5L2RhdGF0eXBlcy91 dGlsL2ltYWdlX3V0aWwucHkKKysrIGIvbGliL2dhbGF4eS9kYXRhdHlwZXMvdXRpbC9pbWFnZV91 dGlsLnB5CkBAIC03MSw2ICs3MSw0IEBACiAgICAgICAgIHJldHVybiAncGJtJwogICAgIGlmIGZv cm1hdCA9M0Q9M0QgJ1BHTSc6CiAgICAgICAgIHJldHVybiAncGdtJwotICAgIGlmIGZvcm1hdCA9 M0Q9M0QgJ0VQUyc6Ci0gICAgICAgIHJldHVybiAnZXBzJwogICAgIHJldHVybiBOb25lCgpkaWZm IC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVm Yzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IGxpYi9nYWxheHkvdG9vbHMvcGFyYW1l dGVycy9iYXNpYy5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3BhcmFtZXRlcnMvYmFzaWMucHkK KysrIGIvbGliL2dhbGF4eS90b29scy9wYXJhbWV0ZXJzL2Jhc2ljLnB5CkBAIC00Niw2ICs0Niw3 IEBACiAgICAgICAgIHNlbGYucmVmcmVzaF9vbl9jaGFuZ2VfdmFsdWVzID0zRCBbXQogICAgICAg ICBzZWxmLm5hbWUgPTNEIGlucHV0X3NvdXJjZS5nZXQoIm5hbWUiKQogICAgICAgICBzZWxmLnR5 cGUgPTNEIGlucHV0X3NvdXJjZS5nZXQoInR5cGUiKQorICAgICAgICBzZWxmLmhpZGRlbiA9M0Qg aW5wdXRfc291cmNlLmdldCgiaGlkZGVuIiwgRmFsc2UpCiAgICAgICAgIHNlbGYubGFiZWwgPTNE IGlucHV0X3NvdXJjZS5wYXJzZV9sYWJlbCgpCiAgICAgICAgIHNlbGYuaGVscCA9M0QgaW5wdXRf c291cmNlLnBhcnNlX2hlbHAoKQogICAgICAgICBzYW5pdGl6ZXJfZWxlbSA9M0QgaW5wdXRfc291 cmNlLnBhcnNlX3Nhbml0aXplcl9lbGVtKCkKQEAgLTIxMyw2ICsyMTQsNyBAQAo9MjAKICAgICAg ICAgdG9vbF9kaWN0WyAnbW9kZWxfY2xhc3MnIF0gPTNEIHNlbGYuX19jbGFzc19fLl9fbmFtZV9f CiAgICAgICAgIHRvb2xfZGljdFsgJ29wdGlvbmFsJyBdID0zRCBzZWxmLm9wdGlvbmFsCisgICAg ICAgIHRvb2xfZGljdFsgJ2hpZGRlbicgXSA9M0Qgc2VsZi5oaWRkZW4KICAgICAgICAgaWYgaGFz YXR0ciggc2VsZiwgJ3ZhbHVlJyApOgogICAgICAgICAgICAgdG9vbF9kaWN0WyAndmFsdWUnIF0g PTNEIHNlbGYudmFsdWUKICAgICAgICAgcmV0dXJuIHRvb2xfZGljdApAQCAtNDg3LDcgKzQ4OSw3 IEBACiAgICAgICAgIGRbJ3RydWV2YWx1ZSddID0zRCBzZWxmLnRydWV2YWx1ZQogICAgICAgICBk WydmYWxzZXZhbHVlJ10gPTNEIHNlbGYuZmFsc2V2YWx1ZQogICAgICAgICByZXR1cm4gZAotICAg PTIwCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgbGVnYWxfdmFsdWVzKCBzZWxmICk6CiAgICAg ICAgIHJldHVybiBbIHNlbGYudHJ1ZXZhbHVlLCBzZWxmLmZhbHNldmFsdWUgXQpAQCAtNjMwLDYg KzYzMiw3IEBACiAgICAgICAgIGlucHV0X3NvdXJjZSA9M0QgZW5zdXJlX2lucHV0X3NvdXJjZSgg aW5wdXRfc291cmNlICkKICAgICAgICAgVG9vbFBhcmFtZXRlci5fX2luaXRfXyggc2VsZiwgdG9v bCwgaW5wdXRfc291cmNlICkKICAgICAgICAgc2VsZi52YWx1ZSA9M0QgaW5wdXRfc291cmNlLmdl dCggJ3ZhbHVlJyApCisgICAgICAgIHNlbGYuaGlkZGVuID0zRCBUcnVlCj0yMAogICAgIGRlZiBn ZXRfaHRtbF9maWVsZCggc2VsZiwgdHJhbnM9M0ROb25lLCB2YWx1ZT0zRE5vbmUsIG90aGVyX3Zh bHVlcz0zRHs9Cn0gKToKICAgICAgICAgcmV0dXJuIGZvcm1fYnVpbGRlci5IaWRkZW5GaWVsZCgg c2VsZi5uYW1lLCBzZWxmLnZhbHVlICkKQEAgLTY3MCw3ICs2NzMsNyBAQAogICAgIGRlZiBnZXRf bGFiZWwoIHNlbGYgKToKICAgICAgICAgIyBCYXNlVVJMVG9vbFBhcmFtZXRlcnMgYXJlIHVsdGlt YXRlbHkgImhpZGRlbiIgcGFyYW1ldGVycwogICAgICAgICByZXR1cm4gTm9uZQotICAgPTIwCisK ICAgICBkZWYgdG9fZGljdCggc2VsZiwgdHJhbnMsIHZpZXc9M0QnY29sbGVjdGlvbicsIHZhbHVl X21hcHBlcj0zRE5vbmUgKToKICAgICAgICAgZCA9M0Qgc3VwZXIoIEJhc2VVUkxUb29sUGFyYW1l dGVyLCBzZWxmICkudG9fZGljdCggdHJhbnMgKQogICAgICAgICBkWyd2YWx1ZSddID0zRCBzZWxm LmdldF92YWx1ZSggdHJhbnMgKQpAQCAtNzgyLDggKzc4NSwxMSBAQAogICAgICAgICBpZiBzZWxm Lm9wdGlvbnM6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zLmdldF9vcHRpb25zKCB0 cmFucywgb3RoZXJfdmFsdWVzICkKICAgICAgICAgZWxpZiBzZWxmLmR5bmFtaWNfb3B0aW9uczoK KyAgICAgICAgICAgIGNhbGxfb3RoZXJfdmFsdWVzID0zRCB7Il9fdHJhbnNfXyI6IHRyYW5zfQor ICAgICAgICAgICAgaWYgb3RoZXJfdmFsdWVzOgorICAgICAgICAgICAgICAgIGNhbGxfb3RoZXJf dmFsdWVzLnVwZGF0ZSggb3RoZXJfdmFsdWVzLmRpY3QgKQogICAgICAgICAgICAgdHJ5OgotICAg ICAgICAgICAgICAgIHJldHVybiBldmFsKCBzZWxmLmR5bmFtaWNfb3B0aW9ucywgc2VsZi50b29s LmNvZGVfbmFtZXNwYWM9CmUsIG90aGVyX3ZhbHVlcyApCisgICAgICAgICAgICAgICAgcmV0dXJu IGV2YWwoIHNlbGYuZHluYW1pY19vcHRpb25zLCBzZWxmLnRvb2wuY29kZV9uYW1lc3BhYz0KZSwg Y2FsbF9vdGhlcl92YWx1ZXMgKQogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAg ICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgZWxzZToKQEAgLTEwMzMsNyArMTAzOSw3IEBA CiAgICAgICAgICAgICAgICAgICAgICMgRm91bmQgc2VsZWN0ZWQgb3B0aW9uLgogICAgICAgICAg ICAgICAgICAgICB2YWx1ZSA9M0Qgb3B0aW9uWzFdCiAgICAgICAgICAgICBkWyAndmFsdWUnIF0g PTNEIHZhbHVlCi0gICAgICAgICAgID0yMAorCiAgICAgICAgIGRbJ2Rpc3BsYXknXSA9M0Qgc2Vs Zi5kaXNwbGF5CiAgICAgICAgIGRbJ211bHRpcGxlJ10gPTNEIHNlbGYubXVsdGlwbGUKICAgICAg ICAgZFsnaXNfZHluYW1pYyddID0zRCBzZWxmLmlzX2R5bmFtaWMKQEAgLTExMTQsNyArMTEyMCw3 IEBACiAgICAgICAgICAgICAnZGlzcGxheScgICA6IHNlbGYuZGlzcGxheSwKICAgICAgICAgICAg ICdtdWx0aXBsZScgIDogc2VsZi5tdWx0aXBsZQogICAgICAgICB9KQotICAgICAgID0yMAorCiAg ICAgICAgIHJldHVybiBkCj0yMAogICAgIGRlZiBfZ2V0X2Ria2V5X25hbWVzKCBzZWxmLCB0cmFu cz0zRE5vbmUgKToKQEAgLTEzMTYsMTAgKzEzMjIsMTAgQEAKPTIwCiAgICAgICAgICMgYWRkIGRh dGEgcmVmZXJlbmNlCiAgICAgICAgIGRbJ2RhdGFfcmVmJ10gPTNEIHNlbGYuZGF0YV9yZWYKLSAg ICAgICA9MjAKKwogICAgICAgICAjIGFkZCBudW1lcmljYWwgZmxhZwogICAgICAgICBkWydudW1l cmljYWwnXSA9M0Qgc2VsZi5udW1lcmljYWwKLSAgICAgICA9MjAKKwogICAgICAgICAjIHJldHVy bgogICAgICAgICByZXR1cm4gZAo9MjAKQEAgLTIxMTEsNyArMjExNyw3IEBACiAgICAgICAgIGRb J211bHRpcGxlJ10gPTNEIHNlbGYubXVsdGlwbGUKICAgICAgICAgZFsnaXNfZHluYW1pYyddID0z RCBUcnVlCiAgICAgICAgIGRbJ29wdGlvbnMnXSA9M0QgeydoZGEnOiBbXSwgJ2hkY2EnOiBbXX0K LSAgICAgICA9MjAKKwogICAgICAgICAjIHJldHVybiBkZWZhdWx0IGNvbnRlbnQgaWYgY29udGV4 dCBpcyBub3QgYXZhaWxhYmxlCiAgICAgICAgIGlmIG90aGVyX3ZhbHVlcyBpcyBOb25lOgogICAg ICAgICAgICAgcmV0dXJuIGQKQEAgLTIxMjAsNyArMjEyNiw3IEBACiAgICAgICAgIGRhdGFzZXRf bWF0Y2hlciA9M0QgRGF0YXNldE1hdGNoZXIoIHRyYW5zLCBzZWxmLCBOb25lLCBvdGhlcl92YWx1 ZT0KcyApCiAgICAgICAgIGhpc3RvcnkgPTNEIHRyYW5zLmhpc3RvcnkKICAgICAgICAgbXVsdGlw bGUgPTNEIHNlbGYubXVsdGlwbGUKLSAgICAgICA9MjAKKwogICAgICAgICAjIGFkZCBkYXRhc2V0 cwogICAgICAgICBmb3IgaGRhIGluIGhpc3RvcnkuYWN0aXZlX2RhdGFzZXRzX2NoaWxkcmVuX2Fu ZF9yb2xlczoKICAgICAgICAgICAgIG1hdGNoID0zRCBkYXRhc2V0X21hdGNoZXIuaGRhX21hdGNo KCBoZGEgKQpAQCAtMjEzMyw3ICsyMTM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ25hbWUn ICAgICAgICAgIDogbS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAnc3JjJyAgICAgICAgICAg OiAnaGRhJwogICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgID0yMAorCiAgICAgICAgICMg YWRkIGRhdGFzZXQgY29sbGVjdGlvbnMKICAgICAgICAgZGF0YXNldF9jb2xsZWN0aW9uX21hdGNo ZXIgPTNEIERhdGFzZXRDb2xsZWN0aW9uTWF0Y2hlciggZGF0YXNldF9tPQphdGNoZXIgKQogICAg ICAgICBmb3IgaGRjYSBpbiBoaXN0b3J5LmFjdGl2ZV9kYXRhc2V0X2NvbGxlY3Rpb25zOgpAQCAt MjM1Miw3ICsyMzU4LDcgQEAKICAgICAgICAgZFsnbXVsdGlwbGUnXSA9M0Qgc2VsZi5tdWx0aXBs ZQogICAgICAgICBkWydpc19keW5hbWljJ10gPTNEIEZhbHNlCiAgICAgICAgIGRbJ29wdGlvbnMn XSA9M0QgeydoZGEnOiBbXSwgJ2hkY2EnOiBbXX0KLSAgICAgICA9MjAKKwogICAgICAgICAjIHJl dHVybiBkZWZhdWx0IGNvbnRlbnQgaWYgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlCiAgICAgICAg IGlmIG90aGVyX3ZhbHVlcyBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGQKQEAgLTIzNjAs NyArMjM2Niw3IEBACiAgICAgICAgICMgcHJlcGFyZSBkYXRhc2V0L2NvbGxlY3Rpb24gbWF0Y2hp bmcKICAgICAgICAgZGF0YXNldF9tYXRjaGVyID0zRCBEYXRhc2V0TWF0Y2hlciggdHJhbnMsIHNl bGYsIE5vbmUsIG90aGVyX3ZhbHVlPQpzICkKICAgICAgICAgaGlzdG9yeSA9M0QgdHJhbnMuaGlz dG9yeQotICAgICAgID0yMAorCiAgICAgICAgICMgYXBwZW5kIGRpcmVjdGx5IG1hdGNoZWQgY29s bGVjdGlvbnMKICAgICAgICAgZm9yIGhkY2EgaW4gc2VsZi5tYXRjaF9jb2xsZWN0aW9ucyggdHJh bnMsIGhpc3RvcnksIGRhdGFzZXRfbWF0Y2hlPQpyICk6CiAgICAgICAgICAgICBkWydvcHRpb25z J11bJ2hkY2EnXS5hcHBlbmQoewoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1Yzhk MmUyYmM0YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2Zh NiBzdGF0aWMvc2NyaXB0cy9nYWxheHkud29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5qcwotLS0gYS9z dGF0aWMvc2NyaXB0cy9nYWxheHkud29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5qcworKysgYi9zdGF0 aWMvc2NyaXB0cy9nYWxheHkud29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5qcwpAQCAtMTA4OSw3ICsx MDg5LDExIEBACiAgICAgICAgIGlmICggdGhpcy5hY3RpdmVfbm9kZSAhPTNEIG5vZGUgKSB7CiAg ICAgICAgICAgICB0aGlzLmNoZWNrX2NoYW5nZXNfaW5fYWN0aXZlX2Zvcm0oKTsKICAgICAgICAg ICAgIHRoaXMuY2xlYXJfYWN0aXZlX25vZGUoKTsKLSAgICAgICAgICAgIHBhcmVudC5zaG93X2Zv cm1fZm9yX3Rvb2woIG5vZGUuZm9ybV9odG1sICsgbm9kZS50b29sdGlwLCBub2RlPQogKTsKKyAg ICAgICAgICAgIGlmIChwYXJlbnQuX19ORVdUT09MRk9STV9fKSB7CisgICAgICAgICAgICAgICAg cGFyZW50LnNob3dfZm9ybV9mb3JfdG9vbCggbm9kZS5mb3JtX2h0bWwsIG5vZGUgKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnNob3dfZm9ybV9mb3JfdG9v bCggbm9kZS5mb3JtX2h0bWwgKyBub2RlLnRvb2x0aXAsID0Kbm9kZSApOworICAgICAgICAgICAg fQogICAgICAgICAgICAgbm9kZS5tYWtlX2FjdGl2ZSgpOwogICAgICAgICAgICAgdGhpcy5hY3Rp dmVfbm9kZSA9M0Qgbm9kZTsKICAgICAgICAgfQpAQCAtMTA5OSw3ICsxMTAzLDExIEBACiAgICAg ICAgIGlmICggdGhpcy5hY3RpdmVfbm9kZSA9M0Q9M0Qgbm9kZSAmJiAoIXBhcmVudC5fX05FV1RP T0xGT1JNX18gfHwgZj0Kb3JjZSkpIHsKICAgICAgICAgICAgIC8vIFJlYWN0aXZlIHdpdGggbmV3 IGZvcm1faHRtbAogICAgICAgICAgICAgdGhpcy5jaGVja19jaGFuZ2VzX2luX2FjdGl2ZV9mb3Jt KCk7IC8vRm9yY2UgY2hhbmdlcyB0byBiZSBzYXY9CmVkIGV2ZW4gb24gbmV3IGNvbm5lY3Rpb24g KHByZXZpb3VzbHkgZHVtcGVkKQotICAgICAgICAgICAgcGFyZW50LnNob3dfZm9ybV9mb3JfdG9v bCggbm9kZS5mb3JtX2h0bWwgKyBub2RlLnRvb2x0aXAsIG5vZGU9CiApOworICAgICAgICAgICAg aWYgKHBhcmVudC5fX05FV1RPT0xGT1JNX18pIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuc2hv d19mb3JtX2Zvcl90b29sKCBub2RlLmZvcm1faHRtbCwgbm9kZSApOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBwYXJlbnQuc2hvd19mb3JtX2Zvcl90b29sKCBub2RlLmZv cm1faHRtbCArIG5vZGUudG9vbHRpcCwgPQpub2RlICk7CisgICAgICAgICAgICB9CiAgICAgICAg IH0KICAgICB9LAogICAgIGxheW91dCA6IGZ1bmN0aW9uICgpIHsKQEAgLTEzMDUsMTMgKzEzMTMs NiBAQAogICAgIHJldHVybiBub2RlOwogfQo9MjAKLWZ1bmN0aW9uIHVwZGF0ZV9ub2RlKCBkYXRh ICkgewotICAgIHZhciBub2RlID0zRCB3b3JrZmxvdy5hY3RpdmVfbm9kZTsKLSAgICBpZiAobm9k ZSkgewotICAgICAgICBub2RlLnVwZGF0ZV9maWVsZF9kYXRhKGRhdGEsIHRydWUpOwotICAgIH0K LX0KLQogdmFyIGV4dF90b190eXBlID0zRCBudWxsOwogdmFyIHR5cGVfdG9fdHlwZSA9M0QgbnVs bDsKPTIwCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIg LXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IHN0YXRpYy9zY3Jp cHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZj L3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMv dG9vbHMtZm9ybS1iYXNlLmpzCkBAIC0yNzYsNiArMjc2LDExIEBACiAgICAgICAgICAgICAgICAg YnV0dG9ucyA6IHRoaXMuYnV0dG9ucwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgID0yMAor ICAgICAgICAgICAgLy8gcmVtb3ZlIHBhZGRpbmcKKyAgICAgICAgICAgIGlmICh0aGlzLm9wdGlv bnMud29ya2Zsb3cpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBvcnRsZXQuJGNvbnRlbnQuY3Nz KCdwYWRkaW5nJywgJzBweCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICA9MjAKICAgICAg ICAgICAgIC8vIGFwcGVuZCBtZXNzYWdlCiAgICAgICAgICAgICB0aGlzLnBvcnRsZXQuYXBwZW5k KHRoaXMubWVzc2FnZS4kZWwsIHRydWUpOwogICAgICAgICAgICA9MjAKCmRpZmYgLXIgMTU5NjJi M2Q5YWFjMDYxZTk1NDFmODE3NWM4ZDJlMmJjNGJhNWNhYiAtciAyZTk5MGNhZWZjOTQzZWIyYjFk NGE5ND0KYWY1MDhjMjJiYjM0YjdmYTYgc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZv cm0td29ya2Zsb3cuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0t d29ya2Zsb3cuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29y a2Zsb3cuanMKQEAgLTcsOCArNywxOTkgQEAKICAgICAvLyBjcmVhdGUgZm9ybSB2aWV3CiAgICAg dmFyIFZpZXcgPTNEIFRvb2xGb3JtQmFzZS5leHRlbmQoewogICAgICAgICBpbml0aWFsaXplOiBm dW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgICAgICAvLyBsaW5rIHdpdGggbm9kZSByZXByZXNl bnRhdGlvbiBpbiB3b3JrZmxvdyBtb2R1bGUKKyAgICAgICAgICAgIHRoaXMubm9kZSA9M0Qgd29y a2Zsb3cuYWN0aXZlX25vZGU7CisgICAgICAgICAgICBpZiAoIXRoaXMubm9kZSkgeworICAgICAg ICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0ZBSUxFRCAtIHRvb2xzLWZvcm0td29ya2Zsb3c6aW5p dGlhbGl6ZSgpIC09CiBOb2RlIG5vdCBmb3VuZCBpbiB3b3JrZmxvdy4nKTsKKyAgICAgICAgICAg ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgID0yMAorICAgICAgICAgICAg Ly8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCiAgICAgICAgICAgICB0aGlzLndvcmtmbG93ID0zRCB0 cnVlOwotICAgICAgICAgICAgVG9vbEZvcm1CYXNlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwo dGhpcywgb3B0aW9ucyk7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPTNEIG9wdGlvbnM7CisK KyAgICAgICAgICAgIC8vIGxvYWQgZXh0ZW5zaW9uCisgICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKKyAgICAgICAgICAgIFV0aWxzLmdldCh7CisgICAgICAgICAgICAgICAgdXJsICAgICA6 IGdhbGF4eV9jb25maWcucm9vdCArICdhcGkvZGF0YXR5cGVzJywKKyAgICAgICAgICAgICAgICBj YWNoZSAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24oZGF0YXR5 cGVzKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YXR5cGVzID0zRCBkYXRhdHlwZXM7 CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2VTZWN0aW9ucyhvcHRpb25zLmlucHV0cyk7 CisgICAgICAgICAgICAgICAgICAgIFRvb2xGb3JtQmFzZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5j YWxsKHNlbGYsIG9wdGlvbnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor ICAgICAgICB9LAorICAgICAgID0yMAorICAgICAgICAvKiogQnVpbGRzIGFsbCBzdWIgc2VjdGlv bnMKKyAgICAgICAgKi8KKyAgICAgICAgX21ha2VTZWN0aW9uczogZnVuY3Rpb24oaW5wdXRzKXsK KyAgICAgICAgICAgIC8vIGZvciBhbm5vdGF0aW9uCisgICAgICAgICAgICBpbnB1dHNbVXRpbHMu dXVpZCgpXSA9M0QgeworICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnRWRpdCBTdGVwIEF0dHJp YnV0ZXMnLAorICAgICAgICAgICAgICAgIHR5cGUgICAgOiAnc2VjdGlvbicsCisgICAgICAgICAg ICAgICAgaW5wdXRzICA6IFt7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQW5ub3Rh dGlvbiAvIE5vdGVzJywKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAgICA6ICdhbm5vdGF0aW9u JywKKyAgICAgICAgICAgICAgICAgICAgdHlwZSAgICA6ICd0ZXh0JywKKyAgICAgICAgICAgICAg ICAgICAgYXJlYSAgICA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgOiAnQWRk IGFuIGFubm90YXRpb24gb3Igbm90ZXMgdG8gdGhpcyBzdGVwOyBhbj0Kbm90YXRpb25zIGFyZSBh dmFpbGFibGUgd2hlbiBhIHdvcmtmbG93IGlzIHZpZXdlZC4nLAorICAgICAgICAgICAgICAgICAg ICB2YWx1ZSAgIDogdGhpcy5ub2RlLmFubm90YXRpb24KKyAgICAgICAgICAgICAgICB9XQorICAg ICAgICAgICAgfQorICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGZvciBhY3Rpb25zCisg ICAgICAgICAgICB0aGlzLnBvc3Rfam9iX2FjdGlvbnMgPTNEIHRoaXMubm9kZS5wb3N0X2pvYl9h Y3Rpb25zOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLm5vZGUub3V0cHV0X3Rlcm1p bmFscykgeworICAgICAgICAgICAgICAgIGlucHV0c1tVdGlscy51dWlkKCldID0zRCB0aGlzLl9t YWtlU2VjdGlvbihpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICA9MjAKKyAg ICAgICAgLyoqIEJ1aWxkcyBzdWIgc2VjdGlvbiB3aXRoIHN0ZXAgYWN0aW9ucy9hbm5vdGF0aW9u CisgICAgICAgICovCisgICAgICAgIF9tYWtlU2VjdGlvbjogZnVuY3Rpb24ob3V0cHV0X2lkKXsK KyAgICAgICAgICAgIC8vIGZvcm1hdCBkYXRhdHlwZXMKKyAgICAgICAgICAgIHZhciBleHRlbnNp b25zID0zRCBbXTsKKyAgICAgICAgICAgIGZvciAoa2V5IGluIHRoaXMuZGF0YXR5cGVzKSB7Cisg ICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgMCA6 IHRoaXMuZGF0YXR5cGVzW2tleV0sCisgICAgICAgICAgICAgICAgICAgIDEgOiB0aGlzLmRhdGF0 eXBlc1trZXldCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ID0yMAorICAgICAgICAgICAgLy8gc29ydCBleHRlbnNpb25zCisgICAgICAgICAgICBleHRlbnNp b25zLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmxhYmVs ID4gYi5sYWJlbCA/IDEgOiBhLmxhYmVsIDwgYi5sYWJlbCA/IC0xIDogMDsKKyAgICAgICAgICAg IH0pOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGFkZCBhZGRpdGlvbmFsIG9wdGlv bnMKKyAgICAgICAgICAgIGV4dGVuc2lvbnMudW5zaGlmdCh7CisgICAgICAgICAgICAgICAgMCA6 ICdTZXF1ZW5jZXMnLAorICAgICAgICAgICAgICAgIDEgOiAnU2VxdWVuY2VzJworICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICBleHRlbnNpb25zLnVuc2hpZnQoeworICAgICAgICAgICAgICAg IDAgOiAnUm9hZG1hcHMnLAorICAgICAgICAgICAgICAgIDEgOiAnUm9hZG1hcHMnCisgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMudW5zaGlmdCh7CisgICAgICAgICAgICAg ICAgMCA6ICdMZWF2ZSB1bmNoYW5nZWQnLAorICAgICAgICAgICAgICAgIDEgOiAnTm9uZScKKyAg ICAgICAgICAgIH0pOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBjdXN0 b20gc3ViIHNlY3Rpb24KKyAgICAgICAgICAgIHZhciBpbnB1dF9jb25maWcgPTNEIHsKKyAgICAg ICAgICAgICAgICBsYWJlbCAgIDogJ0VkaXQgU3RlcCBBY3Rpb246IFwnJyArIG91dHB1dF9pZCAr ICdcJycsCisgICAgICAgICAgICAgICAgdHlwZSAgICA6ICdzZWN0aW9uJywKKyAgICAgICAgICAg ICAgICBpbnB1dHMgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgOiAnUmVu YW1lRGF0YXNldEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ25l d25hbWUnLAorICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdSZW5hbWUgZGF0YXNl dCcsCisgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3RleHQnLAorICAgICAgICAg ICAgICAgICAgICB2YWx1ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmUg ICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlv biB3aWxsIHJlbmFtZSB0aGUgcmVzdWx0IGRhdGE9CnNldC4gQ2xpY2sgPGEgaHJlZj0zRCJodHRw czovL3dpa2kuZ2FsYXh5cHJvamVjdC5vcmcvTGVhcm4vQWR2YW5jZWRXb3JrZmxvdz0KL1Zhcmlh YmxlcyI+aGVyZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uJworICAgICAgICAgICAgICAgIH0s eworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gICAgICA6ICdDaGFuZ2VEYXRhdHlwZUFjdGlv bicsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ25ld3R5cGUnLAorICAgICAg ICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaGFuZ2UgZGF0YXR5cGUnLAorICAgICAgICAg ICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAorICAgICAgICAgICAgICAgICAgICBp Z25vcmUgICAgICA6ICdOb25lJywKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgICAgOiBl eHRlbnNpb25zLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlv biB3aWxsIGNoYW5nZSB0aGUgZGF0YXR5cGUgb2Y9CiB0aGUgb3V0cHV0IHRvIHRoZSBpbmRpY2F0 ZWQgdmFsdWUuJworICAgICAgICAgICAgICAgIH0seworICAgICAgICAgICAgICAgICAgICBhY3Rp b24gICAgICA6ICdUYWdEYXRhc2V0QWN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgYXJndW1l bnQgICAgOiAndGFncycsCisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgICAgIDogJ1RhZ3Mn LAorICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICd0ZXh0JywKKyAgICAgICAgICAg ICAgICAgICAgdmFsdWUgICAgICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgaWdub3JlICAg ICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgaGVscCAgICAgICAgOiAnVGhpcyBhY3Rpb24g d2lsbCBzZXQgdGFncyBmb3IgdGhlIGRhdGFzPQpldC4nCisgICAgICAgICAgICAgICAgfSx7Cisg ICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQXNzaWduIGNvbHVtbnMnLAorICAgICAgICAg ICAgICAgICAgICB0eXBlICAgIDogJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICAgICBpbnB1 dHMgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0NvbHVtblNl dEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCAgICA6ICdjaHJvbUNv bCcsCisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaHJvbSBjb2x1bW4n LAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgOiAndGV4dCcsCisgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICAg ICAgaWdub3JlICAgICAgOiAnJworICAgICAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0NvbHVtblNldEFjdGlvbicsCisgICAgICAgICAg ICAgICAgICAgICAgICBhcmd1bWVudCAgICA6ICdzdGFydENvbCcsCisgICAgICAgICAgICAgICAg ICAgICAgICBsYWJlbCAgICAgICA6ICdTdGFydCBjb2x1bW4nLAorICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZSAgICAgICAgOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1 ZSAgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnJwor ICAgICAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAg ICAgIDogJ0NvbHVtblNldEFjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu dCAgICA6ICdlbmRDb2wnLAorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgICAgICAgOiAn RW5kIGNvbHVtbicsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICd0ZXh0 JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJycsCisgICAgICAgICAg ICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnCisgICAgICAgICAgICAgICAgICAgIH0sewor ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgOiAnQ29sdW1uU2V0QWN0aW9uJywK KyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ3N0cmFuZENvbCcsCisgICAg ICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdTdHJhbmQgY29sdW1uJywKKyAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3RleHQnLAorICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWUgICAgICAgOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9y ZSAgICAgIDogJycKKyAgICAgICAgICAgICAgICAgICAgfSx7CisgICAgICAgICAgICAgICAgICAg ICAgICBhY3Rpb24gICAgICA6ICdDb2x1bW5TZXRBY3Rpb24nLAorICAgICAgICAgICAgICAgICAg ICAgICAgYXJndW1lbnQgICAgOiAnbmFtZUNvbCcsCisgICAgICAgICAgICAgICAgICAgICAgICBs YWJlbCAgICAgICA6ICdOYW1lIGNvbHVtbicsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl ICAgICAgICA6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDog JycsCisgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnCisgICAgICAgICAg ICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICAgICBoZWxwICAgIDogJ1RoaXMgYWN0aW9u IHdpbGwgc2V0IGNvbHVtbiBhc3NpZ25tZW50cyBpbiA9CnRoZSBvdXRwdXQgZGF0YXNldC4gQmxh bmsgZmllbGRzIGFyZSBpZ25vcmVkLicKKyAgICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAg ICAgICAgICAgYWN0aW9uICAgICAgOiAnRW1haWxBY3Rpb24nLAorICAgICAgICAgICAgICAgICAg ICBsYWJlbCAgICAgICA6ICdFbWFpbCBub3RpZmljYXRpb24nLAorICAgICAgICAgICAgICAgICAg ICB0eXBlICAgICAgICA6ICdib29sZWFuJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAg ICAgOiAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDogJ1RoaXMgYWN0aW9uIHdpbGwgc2Vu ZCBhbiBlbWFpbCBub3RpZnlpbj0KZyB5b3Ugd2hlbiB0aGUgam9iIGlzIGRvbmUuJworICAgICAg ICAgICAgICAgIH0seworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gICAgICA6ICdEZWxldGVJ bnRlcm1lZGlhdGVzQWN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICAgICAgOiAn RGVsZXRlIG5vbi1vdXRwdXRzJywKKyAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgOiAn Ym9vbGVhbicsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICBoZWxwICAgICAgICA6ICdBbGwgbm9uLW91dHB1dCBzdGVwcyBvZiB0aGlzIHdvcmtmbG93 IHc9CmlsbCBoYXZlIGRhdGFzZXRzIGRlbGV0ZWQgaWYgdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5n IHVzZWQgYXMgam9iIGlucHV0cyB3aD0KZW4gdGhlIGpvYiB0aGlzIGFjdGlvbiBpcyBhdHRhY2hl ZCB0byBpcyBmaW5pc2hlZC4gWW91ICptdXN0KiBiZSB1c2luZyB3b3JrPQpmbG93IG91dHB1dHMg KHRoZSBzbm93Zmxha2UpIGluIHlvdXIgd29ya2Zsb3cgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZm ZWN0LicKKyAgICAgICAgICAgICAgICB9XQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgPTIw CisgICAgICAgICAgICAvLyB2aXNpdCBpbnB1dCBub2RlcyBhbmQgZW5yaWNoIGJ5IG5hbWUvdmFs dWUgcGFpcnMgZnJvbSBzZXJ2ZT0KciBkYXRhCisgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhp czsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZpc2l0IChpbnB1dHMpIHsKKyAgICAgICAgICAgICAg ICBmb3IgKHZhciBpIGluIGlucHV0cykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQg PTNEIGlucHV0c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmFjdGlvbikgewor ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQubmFtZSA9M0QgJ3BqYV9fJyArIG91dHB1dF9p ZCArICdfXycgKyBpbnB1dC49CmFjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp bnB1dC5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUg Kz0zRCAnX18nICsgaW5wdXQuYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9M0Qgc2VsZi5wb3N0X2pvYl9hY3Rpb25zW2lu cHV0LmFjdGlvbiArIG91dD0KcHV0X2lkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmFyZ3VtZW50KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0zRCBkLmFjdGlvbl9h cmd1bWVudHMgJiYgZC5hYz0KdGlvbl9hcmd1bWVudHNbaW5wdXQuYXJndW1lbnRdIHx8IGlucHV0 LnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0zRCAndHJ1ZSc7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Lmlu cHV0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGlucHV0LmlucHV0cyk7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2aXNpdChpbnB1dF9jb25m aWcuaW5wdXRzKTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyByZXR1cm4gZmluYWwg Y29uZmlndXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvbmZpZzsKICAgICAgICAg fSwKICAgICAgICA9MjAKICAgICAgICAgLyoqIEJ1aWxkcyBhIG5ldyBtb2RlbCB0aHJvdWdoIGFw aSBjYWxsIGFuZCByZWNyZWF0ZXMgdGhlIGVudGlyZSBmPQpvcm0KQEAgLTM4LDE1ICsyMjksMTYg QEAKICAgICAgICAgICAgICAgICB0eXBlICAgIDogJ0dFVCcsCiAgICAgICAgICAgICAgICAgdXJs ICAgICA6IG1vZGVsX3VybCwKICAgICAgICAgICAgICAgICBkYXRhICAgIDogY3VycmVudF9zdGF0 ZSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg ICAgICAgICAgICBwYXJlbnQudXBkYXRlX25vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgc3Vj Y2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIG5v ZGUgaW4gd29ya2Zsb3cgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYubm9kZS51cGRh dGVfZmllbGRfZGF0YShkYXRhLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICA9MjAKICAgICAg ICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAg c2VsZi5kZWZlcnJlZC5kb25lKHByb2Nlc3NfaWQpOwogICAgICAgICAgICA9MjAKICAgICAgICAg ICAgICAgICAgICAgLy8gbG9nIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5k ZWJ1ZygndG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgLSBTdGF0ZXMgcmVmPQpyZXNoZWQuJyk7 Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobm9kZSk7CisgICAgICAgICAgICAg ICAgICAgIGNvbnNvbGUuZGVidWcoZGF0YSk7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAg ICAgICAgICBlcnJvciAgIDogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAg ICAgLy8gcHJvY2VzcyBjb21wbGV0ZWQKCmRpZmYgLXIgMTU5NjJiM2Q5YWFjMDYxZTk1NDFmODE3 NWM4ZDJlMmJjNGJhNWNhYiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5ND0KYWY1MDhjMjJiYjM0 YjdmYTYgc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKLS0tIGEvc3Rh dGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKKysrIGIvc3RhdGljL3Njcmlw dHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKQEAgLTEsOCArMSw4IEBACiAvKioKICAgICBU aGlzIGNsYXNzIGNyZWF0ZXMgYSB0b29sIGZvcm0gc2VjdGlvbiBhbmQgcG9wdWxhdGVzIGl0IHdp dGggaW5wdXQgZWxlPQptZW50cy4gSXQgYWxzbyBoYW5kbGVzIHJlcGVhdCBibG9ja3MgYW5kIGNv bmRpdGlvbmFscyBieSByZWN1cnNpdmVseSBjcmVhdGk9Cm5nIG5ldyBzdWIgc2VjdGlvbnMuIE5l dyBpbnB1dCBlbGVtZW50cyBjYW4gYmUgcGx1Z2dlZCBpbiBieSBhZGRpbmcgY2FzZXMgdD0KbyB0 aGUgc3dpdGNoIGJsb2NrIGRlZmluZWQgaW4gdGhlIF9jcmVhdGVGaWVsZCgpIGZ1bmN0aW9uLgog Ki8KLWRlZmluZShbJ3V0aWxzL3V0aWxzJywgJ212Yy91aS91aS10YWJsZScsICdtdmMvdWkvdWkt bWlzYycsICdtdmMvdG9vbHMvdG9vPQpscy1yZXBlYXQnLCAnbXZjL3Rvb2xzL3Rvb2xzLXNlbGVj dC1jb250ZW50JywgJ212Yy90b29scy90b29scy1pbnB1dCddLAotICAgIGZ1bmN0aW9uKFV0aWxz LCBUYWJsZSwgVWksIFJlcGVhdCwgU2VsZWN0Q29udGVudCwgSW5wdXRFbGVtZW50KSB7CitkZWZp bmUoWyd1dGlscy91dGlscycsICdtdmMvdWkvdWktdGFibGUnLCAnbXZjL3VpL3VpLW1pc2MnLCAn bXZjL3VpL3VpLXBvcj0KdGxldCcsICdtdmMvdG9vbHMvdG9vbHMtcmVwZWF0JywgJ212Yy90b29s cy90b29scy1zZWxlY3QtY29udGVudCcsICdtdmMvdG9vPQpscy90b29scy1pbnB1dCddLAorICAg IGZ1bmN0aW9uKFV0aWxzLCBUYWJsZSwgVWksIFBvcnRsZXQsIFJlcGVhdCwgU2VsZWN0Q29udGVu dCwgSW5wdXRFbGVtZW49CnQpIHsKPTIwCiAgICAgLy8gY3JlYXRlIGZvcm0gdmlldwogICAgIHZh ciBWaWV3ID0zRCBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CkBAIC0zNiwxMyArMzYsMTMgQEAKICAg ICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBsb2FkIHNldHRpbmdzIGVsZW1lbnRzIGludG8g dGFibGUKICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5pbnB1dHMpIHsKLSAgICAgICAg ICAgICAgICB0aGlzLl9hZGQodGhpcy5pbnB1dHNbaV0pOworICAgICAgICAgICAgICAgIHRoaXMu YWRkKHRoaXMuaW5wdXRzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICA9 MjAKICAgICAgICAgLyoqIEFkZCBhIG5ldyBpbnB1dCBlbGVtZW50CiAgICAgICAgICovCi0gICAg ICAgIF9hZGQ6IGZ1bmN0aW9uKGlucHV0KSB7CisgICAgICAgIGFkZDogZnVuY3Rpb24oaW5wdXQp IHsKICAgICAgICAgICAgIC8vIGxpbmsgdGhpcwogICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRo aXM7CiAgICAgICAgICAgID0yMApAQCAtNjYsNiArNjYsMTAgQEAKICAgICAgICAgICAgICAgICBj YXNlICdyZXBlYXQnOgogICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRSZXBlYXQoaW5wdXRf ZGVmKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gY3Vz dG9taXplZCBzZWN0aW9uCisgICAgICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6CisgICAgICAg ICAgICAgICAgICAgIHRoaXMuX2FkZFNlY3Rpb24oaW5wdXRfZGVmKTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBzaW5nbGUgZWxlbWVudCBy b3cKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICB0aGlzLl9h ZGRSb3coaW5wdXRfZGVmKTsKQEAgLTEwMyw4ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgICAg ICAvLyBjaGVjayBpZiBub24taGlkZGVuIGVsZW1lbnRzIGV4aXN0CiAgICAgICAgICAgICAgICAg ICAgIHZhciBub25oaWRkZW4gPTNEIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHZh ciBqIGluIGNhc2VfZGVmLmlucHV0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5 cGUgPTNEIGNhc2VfZGVmLmlucHV0c1tqXS50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHR5cGUgJiYgdHlwZSAhPTNEPTNEICdoaWRkZW4nKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIWNhc2VfZGVmLmlucHV0c1tqXS5oaWRkZW4pIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBub25oaWRkZW4gPTNEIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDQsNiArMjQ3LDU4IEBA CiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZChpbnB1dF9kZWYuaWQpOwogICAgICAgICB9 LAogICAgICAgID0yMAorICAgICAgICAvKiogQWRkIGEgY3VzdG9taXplZCBzZWN0aW9uCisgICAg ICAgICovCisgICAgICAgIF9hZGRTZWN0aW9uOiBmdW5jdGlvbihpbnB1dF9kZWYpIHsKKyAgICAg ICAgICAgIC8vIGxpbmsgdGhpcworICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisgICAg ICAgICAgID0yMAorICAgICAgICAgICAgLy8gY3JlYXRlIHN1YiBzZWN0aW9uCisgICAgICAgICAg ICB2YXIgc3ViX3NlY3Rpb24gPTNEIG5ldyBWaWV3KHNlbGYuYXBwLCB7CisgICAgICAgICAgICAg ICAgaW5wdXRzICA6IGlucHV0X2RlZi5pbnB1dHMsCisgICAgICAgICAgICAgICAgY2xzICAgICA6 ICd1aS10YWJsZS1wbGFpbicKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICA9MjAKKyAgICAg ICAgICAgIC8vIGRlbGV0ZSBidXR0b24KKyAgICAgICAgICAgIHZhciBidXR0b25fdmlzaWJsZSA9 M0QgbmV3IFVpLkJ1dHRvbkljb24oeworICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtZXll LXNsYXNoJywKKyAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1Nob3cvaGlkZSBzZWN0aW9uJywK KyAgICAgICAgICAgICAgICBjbHMgICAgIDogJ3VpLWJ1dHRvbi1pY29uLXBsYWluJworICAgICAg ICAgICAgfSk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gY3JlYXRlIHBvcnRsZXQg Zm9yIHN1YiBzZWN0aW9uCisgICAgICAgICAgICB2YXIgcG9ydGxldCA9M0QgbmV3IFBvcnRsZXQu Vmlldyh7CisgICAgICAgICAgICAgICAgdGl0bGUgICAgICAgOiBpbnB1dF9kZWYubGFiZWwsCisg ICAgICAgICAgICAgICAgY2xzICAgICAgICAgOiAndWktcG9ydGxldC1zZWN0aW9uJywKKyAgICAg ICAgICAgICAgICBvcGVyYXRpb25zICA6IHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uX3Zp c2libGU6IGJ1dHRvbl92aXNpYmxlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICBwb3J0bGV0LmFwcGVuZChzdWJfc2VjdGlvbi4kZWwpOworICAgICAgICAg ICA9MjAKKyAgICAgICAgICAgIC8vIGFkZCBldmVudCBoYW5kbGVyIHZpc2liaWxpdHkgYnV0dG9u CisgICAgICAgICAgICB2YXIgdmlzaWJsZSA9M0QgZmFsc2U7CisgICAgICAgICAgICBwb3J0bGV0 LiRjb250ZW50LmhpZGUoKTsKKyAgICAgICAgICAgIHBvcnRsZXQuJGhlYWRlci5jc3MoJ2N1cnNv cicsICdwb2ludGVyJyk7CisgICAgICAgICAgICBwb3J0bGV0LiRoZWFkZXIub24oJ2NsaWNrJywg ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2libGUpIHsKKyAgICAgICAgICAg ICAgICAgICAgdmlzaWJsZSA9M0QgZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHBvcnRsZXQu JGNvbnRlbnQuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICBidXR0b25fdmlzaWJsZS5zZXRJ Y29uKCdmYS1leWUtc2xhc2gnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICB2aXNpYmxlID0zRCB0cnVlOworICAgICAgICAgICAgICAgICAgICBwb3J0bGV0 LiRjb250ZW50LmZhZGVJbignZmFzdCcpOworICAgICAgICAgICAgICAgICAgICBidXR0b25fdmlz aWJsZS5zZXRJY29uKCdmYS1leWUnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBjcmVhdGUgdGFibGUgcm93CisgICAg ICAgICAgICB0aGlzLnRhYmxlLmFkZChwb3J0bGV0LiRlbCk7CisKKyAgICAgICAgICAgIC8vIGFw cGVuZCByb3cgdG8gdGFibGUKKyAgICAgICAgICAgIHRoaXMudGFibGUuYXBwZW5kKGlucHV0X2Rl Zi5pZCk7CisgICAgICAgIH0sCisKICAgICAgICAgLyoqIEFkZCBhIHNpbmdsZSBpbnB1dCBmaWVs ZCBlbGVtZW50CiAgICAgICAgICovCiAgICAgICAgIF9hZGRSb3c6IGZ1bmN0aW9uKGlucHV0X2Rl ZikgewpAQCAtMjczLDYgKzMyOCwxMSBAQAogICAgICAgICAgICAgLy8gYXBwZW5kIHRvIHRhYmxl CiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZChpZCk7CiAgICAgICAgICAgID0yMAorICAg ICAgICAgICAgLy8gaGlkZSByb3cgaWYgbmVjY2Vzc2FyeQorICAgICAgICAgICAgaWYgKGlucHV0 X2RlZi5oaWRkZW4pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmdldChpZCkuaGlkZSgp OworICAgICAgICAgICAgfQorICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIHJldHVybiBj cmVhdGVkIGZpZWxkCiAgICAgICAgICAgICByZXR1cm4gZmllbGQ7CiAgICAgICAgIH0sCkBAIC0z MTYsNyArMzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxk SGlkZGVuKGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgPTIwCi0gICAgICAgICAgICAgICAgLy8gaGlkZGVuIGZpZWxkCisgICAgICAgICAgICAg ICAgLy8gaGlkZGVuIGRhdGEgZmllbGQKICAgICAgICAgICAgICAgICBjYXNlICdoaWRkZW5fZGF0 YSc6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZEhpZGRlbihpbnB1 dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ2NSw5ICs1MjUsOSBAQAog ICAgICAgICBfZmllbGRUZXh0IDogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CiAgICAgICAgICAgICB2 YXIgc2VsZiA9M0QgdGhpczsKICAgICAgICAgICAgIHJldHVybiBuZXcgVWkuSW5wdXQoewotICAg ICAgICAgICAgICAgIGlkICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKLSAgICAgICAg ICAgICAgICBhcmVhICAgIDogaW5wdXRfZGVmLmFyZWEsCi0gICAgICAgICAgICAgICAgb25jaGFu Z2U6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlkICAgICAgICAgIDogJ2ZpZWxkLScg KyBpbnB1dF9kZWYuaWQsCisgICAgICAgICAgICAgICAgYXJlYSAgICAgICAgOiBpbnB1dF9kZWYu YXJlYSwKKyAgICAgICAgICAgICAgICBvbmNoYW5nZSAgICA6IGZ1bmN0aW9uKCkgewogICAgICAg ICAgICAgICAgICAgICBzZWxmLmFwcC50cmlnZ2VyKCdyZWZyZXNoJyk7CiAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgfSk7CkBAIC00NzYsMTEgKzUzNiwxNSBAQAogICAgICAgICAvKiog U2xpZGVyIGZpZWxkCiAgICAgICAgICovCiAgICAgICAgIF9maWVsZFNsaWRlcjogZnVuY3Rpb24o aW5wdXRfZGVmKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKICAgICAgICAgICAg IHJldHVybiBuZXcgVWkuU2xpZGVyLlZpZXcoewotICAgICAgICAgICAgICAgIGlkICAgICAgOiAn ZmllbGQtJyArIGlucHV0X2RlZi5pZCwKLSAgICAgICAgICAgICAgICBwcmVjaXNlIDogaW5wdXRf ZGVmLnR5cGUgPTNEPTNEICdmbG9hdCcsCi0gICAgICAgICAgICAgICAgbWluICAgICA6IGlucHV0 X2RlZi5taW4sCi0gICAgICAgICAgICAgICAgbWF4ICAgICA6IGlucHV0X2RlZi5tYXgKKyAgICAg ICAgICAgICAgICBpZCAgICAgICAgICA6ICdmaWVsZC0nICsgaW5wdXRfZGVmLmlkLAorICAgICAg ICAgICAgICAgIHByZWNpc2UgICAgIDogaW5wdXRfZGVmLnR5cGUgPTNEPTNEICdmbG9hdCcsCisg ICAgICAgICAgICAgICAgbWluICAgICAgICAgOiBpbnB1dF9kZWYubWluLAorICAgICAgICAgICAg ICAgIG1heCAgICAgICAgIDogaW5wdXRfZGVmLm1heCwKKyAgICAgICAgICAgICAgICBvbmNoYW5n ZSAgICA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcC50cmlnZ2Vy KCdyZWZyZXNoJyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAg IH0sCiAgICAgICAgPTIwCkBAIC00ODgsMTggKzU1MiwyMiBAQAogICAgICAgICAqLwogICAgICAg ICBfZmllbGRIaWRkZW4gOiBmdW5jdGlvbihpbnB1dF9kZWYpIHsKICAgICAgICAgICAgIHJldHVy biBuZXcgVWkuSGlkZGVuKHsKLSAgICAgICAgICAgICAgICBpZCAgICAgIDogJ2ZpZWxkLScgKyBp bnB1dF9kZWYuaWQsCi0gICAgICAgICAgICAgICAgaW5mbyAgICA6IGlucHV0X2RlZi5pbmZvCisg ICAgICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKKyAg ICAgICAgICAgICAgICBpbmZvICAgICAgICA6IGlucHV0X2RlZi5pbmZvCiAgICAgICAgICAgICB9 KTsKICAgICAgICAgfSwKICAgICAgICA9MjAKICAgICAgICAgLyoqIEJvb2xlYW4gZmllbGQKICAg ICAgICAgKi8KICAgICAgICAgX2ZpZWxkQm9vbGVhbiA6IGZ1bmN0aW9uKGlucHV0X2RlZikgewor ICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFVp LlJhZGlvQnV0dG9uLlZpZXcoewotICAgICAgICAgICAgICAgIGlkICAgICAgOiAnZmllbGQtJyAr IGlucHV0X2RlZi5pZCwKLSAgICAgICAgICAgICAgICBkYXRhICAgIDogWyB7IGxhYmVsIDogJ1ll cycsIHZhbHVlIDogJ3RydWUnICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFi ZWwgOiAnTm8nLCAgdmFsdWUgOiAnZmFsc2UnIH1dCisgICAgICAgICAgICAgICAgaWQgICAgICAg ICAgOiAnZmllbGQtJyArIGlucHV0X2RlZi5pZCwKKyAgICAgICAgICAgICAgICBkYXRhICAgICAg ICA6IFsgeyBsYWJlbCA6ICdZZXMnLCB2YWx1ZSA6ICd0cnVlJyAgfSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyBsYWJlbCA6ICdObycsICB2YWx1ZSA6ICdmYWxzZScgfV0sCisg ICAgICAgICAgICAgICAgb25jaGFuZ2UgICAgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5hcHAudHJpZ2dlcigncmVmcmVzaCcpOworICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfSk7CgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2 MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFm NTA4YzIyYmIzNGI3ZmE2IHN0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCi0t LSBhL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCisrKyBiL3N0YXRpYy9z Y3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCkBAIC0xMDgsMjIgKzEwOCwyOSBAQAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0KGpvYl9pbnB1dF9pZCwgaGVhZFtp bnB1dC5pZCArICctc2U9CmN0aW9uLScgKyBzZWxlY3RlZENhc2VdKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY3VzdG9tIHN1YiBzZWN0aW9ucworICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udmVydCgnJywgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGdldCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBm aWVsZCA9M0Qgc2VsZi5hcHAuZmllbGRfbGlzdFtpbnB1dC5pZF07Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICA9MjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgYW5kIHBh dGNoIGZpZWxkIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0z RCBmaWVsZC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaFtp bnB1dC50eXBlXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0Qg cGF0Y2hbaW5wdXQudHlwZV0odmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgID0yMAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIGhhbmRsZSBkZWZhdWx0IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFmaWVsZC5za2lwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChm aWVsZC52YWxpZGF0ZSAmJiAhZmllbGQudmFsaWRhdGUodmFsdT0KZSkpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0zRCBudWxsOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC52YWx1ZSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBnZXQgYW5kIHBhdGNoIGZpZWxkIHZhbHVlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9M0QgZmllbGQudmFsdWUoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoW2lucHV0LnR5cGVdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgcGF0Y2hbaW5wdXQudHlw ZV0odmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFkZCAoam9iX2lucHV0X2lkLCBpbnB1dC5pZCwgdmFsdWUp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0yMAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIWZpZWxkLnNraXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0ZSAmJiAhZmllbGQudmFsaWRhdGUoPQp2YWx1 ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0Qg bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pZ25vcmUgPTNEPTNEPTNEIHVuZGVm aW5lZCB8PQp8ICh2YWx1ZSAmJiBpbnB1dC5pZ25vcmUgIT0zRCB2YWx1ZSkpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgKGpvYl9pbnB1dF9pZCwgaW5wdXQu aWQsIHZhbHVlPQopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQoKZGlmZiAtciAx NTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNl YjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiBzdGF0aWMvc2NyaXB0cy9tdmMvdWkvdWktbWlz Yy5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMvdWkvdWktbWlzYy5qcworKysgYi9zdGF0aWMv c2NyaXB0cy9tdmMvdWkvdWktbWlzYy5qcwpAQCAtMTkzLDYgKzE5MywxMiBAQAogICAgICAgICB0 aGlzLmRpc2FibGVkID0zRCBmYWxzZTsKICAgICB9LAogICAgPTIwCisgICAgLy8gY2hhbmdlIGlj b24KKyAgICBzZXRJY29uOiBmdW5jdGlvbihpY29uX2NscykgeworICAgICAgICB0aGlzLiQoJ2kn KS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbikuYWRkQ2xhc3MoaWNvbl9jbHMpOworICAg ICAgICB0aGlzLm9wdGlvbnMuaWNvbiA9M0QgaWNvbl9jbHM7CisgICAgfSwKKyAgID0yMAogICAg IC8vIHRlbXBsYXRlCiAgICAgX3RlbXBsYXRlOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAg IC8vIHdpZHRoCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVj YWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IHN0YXRpYy9z Y3JpcHRzL212Yy91aS91aS1wb3J0bGV0LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL212Yy91aS91 aS1wb3J0bGV0LmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL212Yy91aS91aS1wb3J0bGV0LmpzCkBA IC0yNSw2ICsyNSw3IEBACiAgICAgJGNvbnRlbnQgOiBudWxsLAogICAgICRidXR0b25zIDogbnVs bCwKICAgICAkb3BlcmF0aW9ucyA6IG51bGwsCisgICAgJGhlYWRlciA6IG51bGwsCiAgICA9MjAK ICAgICAvLyBpbml0aWFsaXplCiAgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKG9wdGlvbnMpIHsK QEAgLTM1LDEzICszNiwxNiBAQAogICAgICAgICB0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxh dGUodGhpcy5vcHRpb25zKSk7CiAgICAgICAgPTIwCiAgICAgICAgIC8vIGxpbmsgY29udGVudAot ICAgICAgICB0aGlzLiRjb250ZW50ID0zRCB0aGlzLiRlbC5maW5kKCcjY29udGVudCcpOworICAg ICAgICB0aGlzLiRjb250ZW50ID0zRCB0aGlzLiRlbC5maW5kKCcuY29udGVudCcpOwogICAgICAg ID0yMAogICAgICAgICAvLyBsaW5rIHRpdGxlCi0gICAgICAgIHRoaXMuJHRpdGxlID0zRCB0aGlz LiRlbC5maW5kKCcjcG9ydGxldC10aXRsZS10ZXh0Jyk7CisgICAgICAgIHRoaXMuJHRpdGxlID0z RCB0aGlzLiRlbC5maW5kKCcucG9ydGxldC10aXRsZS10ZXh0Jyk7CisgICAgICAgPTIwCisgICAg ICAgIC8vIGxpbmsgaGVhZGVyCisgICAgICAgIHRoaXMuJGhlYWRlciA9M0QgdGhpcy4kZWwuZmlu ZCgnLnBvcnRsZXQtaGVhZGVyJyk7CiAgICAgICAgPTIwCiAgICAgICAgIC8vIHNldCBjb250ZW50 IGZvcm1hdAotICAgICAgICB2YXIgJHBvcnRsZXRfY29udGVudCA9M0QgdGhpcy4kZWwuZmluZCgn I3BvcnRsZXQtY29udGVudCcpOworICAgICAgICB2YXIgJHBvcnRsZXRfY29udGVudCA9M0QgdGhp cy4kZWwuZmluZCgnLnBvcnRsZXQtY29udGVudCcpOwogICAgICAgICBpZiAoIXRoaXMub3B0aW9u cy5zY3JvbGxhYmxlKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRpdGxlKSB7CiAg ICAgICAgICAgICAgICAgJHBvcnRsZXRfY29udGVudC5hZGRDbGFzcygnbm8tc2Nyb2xsJyk7CkBA IC01OSw3ICs2Myw3IEBACiAgICAgICAgIH0KICAgICAgICA9MjAKICAgICAgICAgLy8gYXBwZW5k IGJ1dHRvbnMKLSAgICAgICAgdGhpcy4kYnV0dG9ucyA9M0QgJCh0aGlzLmVsKS5maW5kKCcjYnV0 dG9ucycpOworICAgICAgICB0aGlzLiRidXR0b25zID0zRCAkKHRoaXMuZWwpLmZpbmQoJy5idXR0 b25zJyk7CiAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnV0dG9ucykgewogICAgICAgICAgICAg Ly8gbGluayBmdW5jdGlvbnMKICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwpAQCAtNzIs NyArNzYsNyBAQAogICAgICAgICB9CiAgICAgICAgPTIwCiAgICAgICAgIC8vIGFwcGVuZCBvcGVy YXRpb25zCi0gICAgICAgIHRoaXMuJG9wZXJhdGlvbnMgPTNEICQodGhpcy5lbCkuZmluZCgnI29w ZXJhdGlvbnMnKTsKKyAgICAgICAgdGhpcy4kb3BlcmF0aW9ucyA9M0QgJCh0aGlzLmVsKS5maW5k KCcub3BlcmF0aW9ucycpOwogICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9wZXJhdGlvbnMpIHsK ICAgICAgICAgICAgIC8vIGxpbmsgZnVuY3Rpb25zCiAgICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKQEAgLTE2MSwyNyArMTY1LDI3IEBACiAgICAgICAgIHZhciB0bXBsID0zRCAgJzxkaXYg aWQ9M0QiJyArIG9wdGlvbnMuaWQgKyAnIiBjbGFzcz0zRCInICsgb3B0aW9ucz0KLmNscyArICci Pic7CiAgICAgICAgPTIwCiAgICAgICAgIGlmIChvcHRpb25zLnRpdGxlKSB7Ci0gICAgICAgICAg ICB0bXBsICs9M0QgICAgICc8ZGl2IGlkPTNEInBvcnRsZXQtaGVhZGVyIiBjbGFzcz0zRCJwb3J0 bGV0LWhlYT0KZGVyIj4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBpZD0z RCJvcGVyYXRpb25zIiBzdHlsZT0zRCJmbG9hdDogJyArIG9wPQp0aW9ucy5vcGVyYXRpb25zX2Zs dCArICc7Ij48L2Rpdj4nICsKKyAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgJzxkaXYgY2xhc3M9 M0QicG9ydGxldC1oZWFkZXIiPicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2 IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEImZsb2F0OiAnICs9CiBvcHRpb25zLm9wZXJh dGlvbnNfZmx0ICsgJzsiPjwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8 ZGl2IGNsYXNzPTNEInBvcnRsZXQtdGl0bGUiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9MjAKICAgICAgICAgICAgIGlmIChvcHRpb25zLmljb24pCiAgICAgICAgICAgICAgICAgdG1w bCArPTNEICAgICAgICAgJzxpIGNsYXNzPTNEImljb24gZmEgJyArIG9wdGlvbnMuaWNvbiArID0K JyI+Jm5ic3A7PC9pPic7CiAgICAgICAgPTIwCi0gICAgICAgICAgICB0bXBsICs9M0QgICAgICAg ICAgICAgJzxzcGFuIGlkPTNEInBvcnRsZXQtdGl0bGUtdGV4dCIgY2xhc3M9Cj0zRCJwb3J0bGV0 LXRpdGxlLXRleHQiPicgKyBvcHRpb25zLnRpdGxlICsgJzwvc3Bhbj4nICsKKyAgICAgICAgICAg IHRtcGwgKz0zRCAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0 Ij4nICsgPQpvcHRpb25zLnRpdGxlICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JzsKICAg ICAgICAgfQotICAgICAgICB0bXBsICs9M0QgICAgICAgICAnPGRpdiBpZD0zRCJwb3J0bGV0LWNv bnRlbnQiIGNsYXNzPTNEInBvcnRsZXQtY289Cm50ZW50Ij4nOworICAgICAgICB0bXBsICs9M0Qg ICAgICAgICAnPGRpdiBjbGFzcz0zRCJwb3J0bGV0LWNvbnRlbnQiPic7CiAgICAgICAgPTIwCiAg ICAgICAgIGlmIChvcHRpb25zLnBsYWNlbWVudCA9M0Q9M0QgJ3RvcCcpIHsKLSAgICAgICAgICAg IHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGlkPTNEImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMi PjwvZGl2PQo+JzsKKyAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGNsYXNzPTNE ImJ1dHRvbnMiPjwvZGl2Pic7CiAgICAgICAgIH0KICAgICAgICA9MjAKLSAgICAgICAgdG1wbCAr PTNEICAgICAgICAgICAgICc8ZGl2IGlkPTNEImNvbnRlbnQiIGNsYXNzPTNEImNvbnRlbnQiPjwv ZGl2PQo+JzsKKyAgICAgICAgdG1wbCArPTNEICAgICAgICAgICAgICc8ZGl2IGNsYXNzPTNEImNv bnRlbnQiPjwvZGl2Pic7CiAgICAgICAgPTIwCiAgICAgICAgIGlmIChvcHRpb25zLnBsYWNlbWVu dCA9M0Q9M0QgJ2JvdHRvbScpIHsKLSAgICAgICAgICAgIHRtcGwgKz0zRCAgICAgICAgICc8ZGl2 IGlkPTNEImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2PQo+JzsKKyAgICAgICAgICAg IHRtcGwgKz0zRCAgICAgICAgICc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Pic7CiAgICAg ICAgIH0KICAgICAgICA9MjAKICAgICAgICAgdG1wbCArPTNEICAgICAgICAgJzwvZGl2PicgKwoK ZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1yIDJlOTkw Y2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiBzdGF0aWMvc2NyaXB0cy9wYWNr ZWQvZ2FsYXh5LndvcmtmbG93X2VkaXRvci5jYW52YXMuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMv cGFja2VkL2dhbGF4eS53b3JrZmxvd19lZGl0b3IuY2FudmFzLmpzCisrKyBiL3N0YXRpYy9zY3Jp cHRzL3BhY2tlZC9nYWxheHkud29ya2Zsb3dfZWRpdG9yLmNhbnZhcy5qcwpAQCAtMSwxICsxLDEg QEAKLWZ1bmN0aW9uIENvbGxlY3Rpb25UeXBlRGVzY3JpcHRpb24oYSl7dGhpcy5jb2xsZWN0aW9u VHlwZT0zRGE7dGhpcy5pc0NvbGxlPQpjdGlvbj0zRHRydWU7dGhpcy5yYW5rPTNEYS5zcGxpdCgi OiIpLmxlbmd0aH0kLmV4dGVuZChDb2xsZWN0aW9uVHlwZURlc2NyaXA9CnRpb24ucHJvdG90eXBl LHthcHBlbmQ6ZnVuY3Rpb24oYSl7aWYoYT0zRD0zRD0zRE5VTExfQ09MTEVDVElPTl9UWVBFX0RF U0NSST0KUFRJT04pe3JldHVybiB0aGlzfWlmKGE9M0Q9M0Q9M0RBTllfQ09MTEVDVElPTl9UWVBF X0RFU0NSSVBUSU9OKXtyZXR1cm4gb3RoPQplckNvbGxlY3Rpb25UeXBlfXJldHVybiBuZXcgQ29s bGVjdGlvblR5cGVEZXNjcmlwdGlvbih0aGlzLmNvbGxlY3Rpb25UeXBlKyI9CjoiK2EuY29sbGVj dGlvblR5cGUpfSxjYW5NYXRjaDpmdW5jdGlvbihhKXtpZihhPTNEPTNEPTNETlVMTF9DT0xMRUNU SU9OX1RZUD0KRV9ERVNDUklQVElPTil7cmV0dXJuIGZhbHNlfWlmKGE9M0Q9M0Q9M0RBTllfQ09M TEVDVElPTl9UWVBFX0RFU0NSSVBUSU9OKXtyPQpldHVybiB0cnVlfXJldHVybiBhLmNvbGxlY3Rp b25UeXBlPTNEPTNEdGhpcy5jb2xsZWN0aW9uVHlwZX0sY2FuTWFwT3ZlcjpmdW49CmN0aW9uKGIp e2lmKGI9M0Q9M0Q9M0ROVUxMX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVElPTil7cmV0dXJuIGZh bHNlfWlmKGI9Cj0zRD0zRD0zREFOWV9DT0xMRUNUSU9OX1RZUEVfREVTQ1JJUFRJT04pe3JldHVy biBmYWxzZX1pZih0aGlzLnJhbms8PTNEYi5yYT0Kbmspe3JldHVybiBmYWxzZX12YXIgYT0zRGIu Y29sbGVjdGlvblR5cGU7cmV0dXJuIHRoaXMuX2VuZHNXaXRoKHRoaXMuY29sbGVjPQp0aW9uVHlw ZSxhKX0sZWZmZWN0aXZlTWFwT3ZlcjpmdW5jdGlvbihhKXt2YXIgYz0zRGEuY29sbGVjdGlvblR5 cGU7dmFyIGI9M0Q9CnRoaXMuY29sbGVjdGlvblR5cGUuc3Vic3RyaW5nKDAsdGhpcy5jb2xsZWN0 aW9uVHlwZS5sZW5ndGgtYy5sZW5ndGgtMSk7cmV0dT0Kcm4gbmV3IENvbGxlY3Rpb25UeXBlRGVz Y3JpcHRpb24oYil9LGVxdWFsOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbGxlY3Rpb25UPQp5cGU9 M0Q9M0R0aGlzLmNvbGxlY3Rpb25UeXBlfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2xs ZWN0aW9uVHlwZVsiK3Q9Cmhpcy5jb2xsZWN0aW9uVHlwZSsiXSJ9LF9lbmRzV2l0aDpmdW5jdGlv bihiLGEpe3JldHVybiBiLmluZGV4T2YoYSxiLmxlbmd0aD0KLWEubGVuZ3RoKSE9M0Q9M0QtMX19 KTtOVUxMX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVElPTj0zRHtpc0NvbGxlY3Rpb246ZmFsPQpz ZSxjYW5NYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gZmFsc2V9LGNhbk1hcE92ZXI6ZnVuY3Rpb24o YSl7cmV0dXJuIGZhbHNlfSw9CnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGxDb2xsZWN0 aW9uVHlwZVtdIn0sYXBwZW5kOmZ1bmN0aW9uKGEpe3JldHVybj0KIGF9LGVxdWFsOmZ1bmN0aW9u KGEpe3JldHVybiBhPTNEPTNEPTNEdGhpc319O0FOWV9DT0xMRUNUSU9OX1RZUEVfREVTQ1JJUFRJ PQpPTj0zRHtpc0NvbGxlY3Rpb246dHJ1ZSxjYW5NYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gTlVM TF9DT0xMRUNUSU9OX1RZUEVfREU9ClNDUklQVElPTiE9M0Q9M0RhfSxjYW5NYXBPdmVyOmZ1bmN0 aW9uKGEpe3JldHVybiBmYWxzZX0sdG9TdHJpbmc6ZnVuY3Rpb24oKT0Ke3JldHVybiJBbnlDb2xs ZWN0aW9uVHlwZVtdIn0sYXBwZW5kOmZ1bmN0aW9uKGEpe3Rocm93IkNhbm5vdCBhcHBlbmQgdG8g QU5ZPQpfQ09MTEVDVElPTl9UWVBFX0RFU0NSSVBUSU9OIn0sZXF1YWw6ZnVuY3Rpb24oYSl7cmV0 dXJuIGE9M0Q9M0Q9M0R0aGlzfX07dmE9CnIgVGVybWluYWxNYXBwaW5nPTNEQmFja2JvbmUuTW9k ZWwuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGEpe3RoaXMubWFwTz0KdmVyPTNEYS5tYXBP dmVyfHxOVUxMX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVElPTjt0aGlzLnRlcm1pbmFsPTNEYS50 ZXJtaW5hPQpsO3RoaXMudGVybWluYWwudGVybWluYWxNYXBwaW5nPTNEdGhpc30sZGlzYWJsZU1h cE92ZXI6ZnVuY3Rpb24oKXt0aGlzLnNldE09CmFwT3ZlcihOVUxMX0NPTExFQ1RJT05fVFlQRV9E RVNDUklQVElPTil9LHNldE1hcE92ZXI6ZnVuY3Rpb24oYSl7dGhpcy5tYXBPdj0KZXI9M0RhO3Ro aXMudHJpZ2dlcigiY2hhbmdlIil9fSk7dmFyIFRlcm1pbmFsTWFwcGluZ1ZpZXc9M0RCYWNrYm9u ZS5WaWV3LmV4PQp0ZW5kKHt0YWdOYW1lOiJkaXYiLGNsYXNzTmFtZToiZmEtaWNvbi1idXR0b24g ZmEgZmEtZm9sZGVyLW8iLGluaXRpYWxpemU6ZnU9Cm5jdGlvbihiKXt2YXIgYT0zRCJSdW4gdG9v bCBpbiBwYXJhbGxlbCBvdmVyIGNvbGxlY3Rpb24iO3RoaXMuJGVsLnRvb2x0aXAoez0KZGVsYXk6 NTAwLHRpdGxlOmF9KTt0aGlzLm1vZGVsLmJpbmQoImNoYW5nZSIsXy5iaW5kKHRoaXMucmVuZGVy LHRoaXMpKX0scmVuPQpkZXI6ZnVuY3Rpb24oKXtpZih0aGlzLm1vZGVsLm1hcE92ZXIuaXNDb2xs ZWN0aW9uKXt0aGlzLiRlbC5zaG93KCl9ZWxzZXt0aGk9CnMuJGVsLmhpZGUoKX19LH0pO3ZhciBJ bnB1dFRlcm1pbmFsTWFwcGluZ1ZpZXc9M0RUZXJtaW5hbE1hcHBpbmdWaWV3LmV4dGVuZD0KKHtl dmVudHM6e2NsaWNrOiJvbkNsaWNrIixtb3VzZWVudGVyOiJvbk1vdXNlRW50ZXIiLG1vdXNlbGVh dmU6Im9uTW91c2VMZWF2PQplIix9LG9uTW91c2VFbnRlcjpmdW5jdGlvbihiKXt2YXIgYT0zRHRo aXMubW9kZWw7aWYoIWEudGVybWluYWwuY29ubmVjdGVkKCk9CiYmYS5tYXBPdmVyLmlzQ29sbGVj dGlvbil7dGhpcy4kZWwuY3NzKCJjb2xvciIsInJlZCIpfX0sb25Nb3VzZUxlYXZlOmZ1bmN0aT0K b24oYSl7dGhpcy4kZWwuY3NzKCJjb2xvciIsImJsYWNrIil9LG9uQ2xpY2s6ZnVuY3Rpb24oYil7 dmFyIGE9M0R0aGlzLm1vZGVsPQo7aWYoIWEudGVybWluYWwuY29ubmVjdGVkKCkmJmEubWFwT3Zl ci5pc0NvbGxlY3Rpb24pe2EudGVybWluYWwucmVzZXRNYXBwaW49CmcoKX19LH0pO3ZhciBJbnB1 dFRlcm1pbmFsTWFwcGluZz0zRFRlcm1pbmFsTWFwcGluZzt2YXIgSW5wdXRDb2xsZWN0aW9uVGVy bT0KaW5hbE1hcHBpbmc9M0RUZXJtaW5hbE1hcHBpbmc7dmFyIE91dHB1dFRlcm1pbmFsTWFwcGlu Zz0zRFRlcm1pbmFsTWFwcGluZzt2PQphciBPdXRwdXRUZXJtaW5hbE1hcHBpbmdWaWV3PTNEVGVy bWluYWxNYXBwaW5nVmlldzt2YXIgSW5wdXRDb2xsZWN0aW9uVGVybWk9Cm5hbE1hcHBpbmdWaWV3 PTNESW5wdXRUZXJtaW5hbE1hcHBpbmdWaWV3O3ZhciBPdXRwdXRDb2xsZWN0aW9uVGVybWluYWxN YXBwaT0Kbmc9M0RUZXJtaW5hbE1hcHBpbmc7dmFyIE91dHB1dENvbGxlY3Rpb25UZXJtaW5hbE1h cHBpbmdWaWV3PTNEVGVybWluYWxNYXBwPQppbmdWaWV3O3ZhciBUZXJtaW5hbD0zREJhY2tib25l Lk1vZGVsLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLmU9CmxlbWVudD0zRGEu ZWxlbWVudDt0aGlzLmNvbm5lY3RvcnM9M0RbXX0sY29ubmVjdDpmdW5jdGlvbihhKXt0aGlzLmNv bm5lY3Rvcj0Kcy5wdXNoKGEpO2lmKHRoaXMubm9kZSl7dGhpcy5ub2RlLm1hcmtDaGFuZ2VkKCl9 fSxkaXNjb25uZWN0OmZ1bmN0aW9uKGEpe3RoPQppcy5jb25uZWN0b3JzLnNwbGljZSgkLmluQXJy YXkoYSx0aGlzLmNvbm5lY3RvcnMpLDEpO2lmKHRoaXMubm9kZSl7dGhpcy5ub2Q9CmUubWFya0No YW5nZWQoKTt0aGlzLnJlc2V0TWFwcGluZ0lmTmVlZGVkKCl9fSxyZWRyYXc6ZnVuY3Rpb24oKXsk LmVhY2godGhpcz0KLmNvbm5lY3RvcnMsZnVuY3Rpb24oYSxiKXtiLnJlZHJhdygpfSl9LGRlc3Ry b3k6ZnVuY3Rpb24oKXskLmVhY2godGhpcy5jb25uPQplY3RvcnMuc2xpY2UoKSxmdW5jdGlvbihh LGIpe2IuZGVzdHJveSgpfSl9LGRlc3Ryb3lJbnZhbGlkQ29ubmVjdGlvbnM6ZnVuY3Q9Cmlvbigp e18uZWFjaCh0aGlzLmNvbm5lY3RvcnMsZnVuY3Rpb24oYSl7YS5kZXN0cm95SWZJbnZhbGlkKCl9 KX0sc2V0TWFwT3Zlcj0KOmZ1bmN0aW9uKGEpe2lmKHRoaXMubXVsdGlwbGUpe3JldHVybn1pZigh dGhpcy5tYXBPdmVyKCkuZXF1YWwoYSkpe3RoaXMudGVyPQptaW5hbE1hcHBpbmcuc2V0TWFwT3Zl cihhKTtfLmVhY2godGhpcy5ub2RlLm91dHB1dF90ZXJtaW5hbHMsZnVuY3Rpb24oYil7Yi49CnNl dE1hcE92ZXIoYSl9KX19LG1hcE92ZXI6ZnVuY3Rpb24oKXtpZighdGhpcy50ZXJtaW5hbE1hcHBp bmcpe3JldHVybiBOVUxMXz0KQ09MTEVDVElPTl9UWVBFX0RFU0NSSVBUSU9OfWVsc2V7cmV0dXJu IHRoaXMudGVybWluYWxNYXBwaW5nLm1hcE92ZXJ9fSxpc01hPQpwcGVkT3ZlcjpmdW5jdGlvbigp e3JldHVybiB0aGlzLnRlcm1pbmFsTWFwcGluZyYmdGhpcy50ZXJtaW5hbE1hcHBpbmcubWFwT3Y9 CmVyLmlzQ29sbGVjdGlvbn0scmVzZXRNYXBwaW5nOmZ1bmN0aW9uKCl7dGhpcy50ZXJtaW5hbE1h cHBpbmcuZGlzYWJsZU1hcE92ZT0KcigpfSxyZXNldE1hcHBpbmdJZk5lZWRlZDpmdW5jdGlvbigp e30sfSk7dmFyIE91dHB1dFRlcm1pbmFsPTNEVGVybWluYWwuZXh0PQplbmQoe2luaXRpYWxpemU6 ZnVuY3Rpb24oYSl7VGVybWluYWwucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLGEpO3Ro aXM9Ci5kYXRhdHlwZXM9M0RhLmRhdGF0eXBlc30scmVzZXRNYXBwaW5nSWZOZWVkZWQ6ZnVuY3Rp b24oKXtpZighdGhpcy5ub2RlLmhhcz0KQ29ubmVjdGVkT3V0cHV0VGVybWluYWxzKCkmJiF0aGlz Lm5vZGUuaGFzQ29ubmVjdGVkTWFwcGVkSW5wdXRUZXJtaW5hbHMoKSl7PQpfLmVhY2godGhpcy5u b2RlLm1hcHBlZElucHV0VGVybWluYWxzKCksZnVuY3Rpb24oYil7Yi5yZXNldE1hcHBpbmdJZk5l ZWRlZCg9Cil9KX12YXIgYT0zRCF0aGlzLm5vZGUuaGFzTWFwcGVkT3ZlcklucHV0VGVybWluYWxz KCk7aWYoYSl7dGhpcy5yZXNldE1hcHBpbj0KZygpfX0scmVzZXRNYXBwaW5nOmZ1bmN0aW9uKCl7 dGhpcy50ZXJtaW5hbE1hcHBpbmcuZGlzYWJsZU1hcE92ZXIoKTtfLmVhY2goPQp0aGlzLmNvbm5l Y3RvcnMsZnVuY3Rpb24oYSl7dmFyIGI9M0RhLmhhbmRsZTI7aWYoYil7Yi5yZXNldE1hcHBpbmdJ Zk5lZWRlZCg9Cik7YS5kZXN0cm95SWZJbnZhbGlkKCl9fSl9fSk7dmFyIEJhc2VJbnB1dFRlcm1p bmFsPTNEVGVybWluYWwuZXh0ZW5kKHtpbml0aT0KYWxpemU6ZnVuY3Rpb24oYSl7VGVybWluYWwu cHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLGEpO3RoaXMudXBkYXRlKGEuPQppbnB1dCl9 LGNhbkFjY2VwdDpmdW5jdGlvbihhKXtpZih0aGlzLl9pbnB1dEZpbGxlZCgpKXtyZXR1cm4gZmFs c2V9ZWxzZXtyZXQ9CnVybiB0aGlzLmF0dGFjaGFibGUoYSl9fSxyZXNldE1hcHBpbmdJZk5lZWRl ZDpmdW5jdGlvbigpe3ZhciBiPTNEdGhpcy5tYXBPdj0KZXIoKTtpZighYi5pc0NvbGxlY3Rpb24p e3JldHVybn12YXIgYT0zRHRoaXMubm9kZS5oYXNDb25uZWN0ZWRNYXBwZWRJbnB1dFRlPQpybWlu YWxzKCl8fCghdGhpcy5ub2RlLmhhc0Nvbm5lY3RlZE91dHB1dFRlcm1pbmFscygpKTtpZihhKXt0 aGlzLnJlc2V0TWFwcGk9Cm5nKCl9fSxyZXNldE1hcHBpbmc6ZnVuY3Rpb24oKXt0aGlzLnRlcm1p bmFsTWFwcGluZy5kaXNhYmxlTWFwT3ZlcigpO2lmKCF0aD0KaXMubm9kZS5oYXNNYXBwZWRPdmVy SW5wdXRUZXJtaW5hbHMoKSl7Xy5lYWNoKHRoaXMubm9kZS5vdXRwdXRfdGVybWluYWxzLGZ1PQpu Y3Rpb24oYSl7YS5yZXNldE1hcHBpbmcoKX0pfX0sY29ubmVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuY29ubmVjdG9ycy49Cmxlbmd0aCE9M0Q9M0QwfSxfaW5wdXRGaWxsZWQ6ZnVuY3Rpb24o KXt2YXIgYTtpZighdGhpcy5jb25uZWN0ZWQoKSl7YT0zRGZhbD0Kc2V9ZWxzZXtpZih0aGlzLm11 bHRpcGxlKXtpZih0aGlzLl9jb2xsZWN0aW9uQXR0YWNoZWQoKSl7aW5wdXRzRmlsbGVkPTNEdHJ1 PQplfWVsc2V7YT0zRGZhbHNlfX1lbHNle2E9M0R0cnVlfX1yZXR1cm4gYX0sX2NvbGxlY3Rpb25B dHRhY2hlZDpmdW5jdGlvbigpe2k9CmYoIXRoaXMuY29ubmVjdGVkKCkpe3JldHVybiBmYWxzZX1l bHNle3ZhciBhPTNEdGhpcy5jb25uZWN0b3JzWzBdLmhhbmRsZTE7aT0KZighYSl7cmV0dXJuIGZh bHNlfWVsc2V7aWYoYS5pc0RhdGFDb2xsZWN0aW9uSW5wdXR8fGEuaXNNYXBwZWRPdmVyKCl8fGEu ZGF0PQphdHlwZXMuaW5kZXhPZigiaW5wdXRfY29sbGVjdGlvbiIpPjApe3JldHVybiB0cnVlfWVs c2V7cmV0dXJuIGZhbHNlfX19fSxfbWE9CnBwaW5nQ29uc3RyYWludHM6ZnVuY3Rpb24oKXtpZigh dGhpcy5ub2RlKXtyZXR1cm5bXX12YXIgYj0zRHRoaXMubWFwT3ZlcigpOz0KaWYoYi5pc0NvbGxl Y3Rpb24pe3JldHVybltiXX12YXIgYT0zRFtdO2lmKCF0aGlzLm5vZGUuaGFzQ29ubmVjdGVkT3V0 cHV0VGVyPQptaW5hbHMoKSl7Xy5lYWNoKHRoaXMubm9kZS5jb25uZWN0ZWRNYXBwZWRJbnB1dFRl cm1pbmFscygpLGZ1bmN0aW9uKGMpe2EucHU9CnNoKGMubWFwT3ZlcigpKX0pfWVsc2V7YS5wdXNo KF8uZmlyc3QoXy52YWx1ZXModGhpcy5ub2RlLm91dHB1dF90ZXJtaW5hbHMpKT0KLm1hcE92ZXIo KSl9cmV0dXJuIGF9LF9wcm9kdWNlc0FjY2VwdGFibGVEYXRhdHlwZTpmdW5jdGlvbihhKXtmb3Io dmFyIGMgaW4gPQp0aGlzLmRhdGF0eXBlcyl7dmFyIGY9M0RuZXcgQXJyYXkoKTtmPTNEZi5jb25j YXQoYS5kYXRhdHlwZXMpO2lmKGEubm9kZS5wb3M9CnRfam9iX2FjdGlvbnMpe2Zvcih2YXIgZCBp biBhLm5vZGUucG9zdF9qb2JfYWN0aW9ucyl7dmFyIGc9M0RhLm5vZGUucG9zdF9qbz0KYl9hY3Rp b25zW2RdO2lmKGcuYWN0aW9uX3R5cGU9M0Q9M0QiQ2hhbmdlRGF0YXR5cGVBY3Rpb24iJiYoZy5v dXRwdXRfbmFtZT0KPTNEPTNEIiJ8fGcub3V0cHV0X25hbWU9M0Q9M0RhLm5hbWUpJiZnLmFjdGlv bl9hcmd1bWVudHMpe2YucHVzaChnLmFjdGlvbl9hPQpyZ3VtZW50cy5uZXd0eXBlKX19fWZvcih2 YXIgYiBpbiBmKXt2YXIgaD0zRGZbYl07aWYoaD0zRD0zRCJpbnB1dCJ8fGg9M0Q9M0Q9CiJpbnB1 dF9jb2xsZWN0aW9uInx8aXNzdWJ0eXBlKGZbYl0sdGhpcy5kYXRhdHlwZXNbY10pKXtyZXR1cm4g dHJ1ZX19fXJldHVybj0KIGZhbHNlfSxfb3RoZXJDb2xsZWN0aW9uVHlwZTpmdW5jdGlvbihhKXt2 YXIgYz0zRE5VTExfQ09MTEVDVElPTl9UWVBFX0RFU0NSPQpJUFRJT047aWYoYS5pc0RhdGFDb2xs ZWN0aW9uSW5wdXQpe2M9M0RhLmNvbGxlY3Rpb25UeXBlfWVsc2V7dmFyIGI9M0RhLm1hcE89CnZl cigpO2lmKGIuaXNDb2xsZWN0aW9uKXtjPTNEYn19cmV0dXJuIGN9LH0pO3ZhciBJbnB1dFRlcm1p bmFsPTNEQmFzZUlucHV0VD0KZXJtaW5hbC5leHRlbmQoe3VwZGF0ZTpmdW5jdGlvbihhKXt0aGlz LmRhdGF0eXBlcz0zRGEuZXh0ZW5zaW9uczt0aGlzLm11bHRpPQpwbGU9M0RhLm11bHRpcGxlO3Ro aXMuY29sbGVjdGlvbj0zRGZhbHNlfSxjb25uZWN0OmZ1bmN0aW9uKGEpe0Jhc2VJbnB1dFRlcm09 CmluYWwucHJvdG90eXBlLmNvbm5lY3QuY2FsbCh0aGlzLGEpO3ZhciBiPTNEYS5oYW5kbGUxO2lm KCFiKXtyZXR1cm59dmFyIGM9Cj0zRHRoaXMuX290aGVyQ29sbGVjdGlvblR5cGUoYik7aWYoYy5p c0NvbGxlY3Rpb24pe3RoaXMuc2V0TWFwT3ZlcihjKX19LGF0dD0KYWNoYWJsZTpmdW5jdGlvbihi KXt2YXIgZD0zRHRoaXMuX290aGVyQ29sbGVjdGlvblR5cGUoYik7dmFyIGE9M0R0aGlzLm1hcE92 PQplcigpO2lmKGQuaXNDb2xsZWN0aW9uKXtpZih0aGlzLm11bHRpcGxlKXtpZih0aGlzLmNvbm5l Y3RlZCgpJiYhdGhpcy5fY29sbGU9CmN0aW9uQXR0YWNoZWQoKSl7cmV0dXJuIGZhbHNlfWlmKGQu cmFuaz0zRD0zRDEpe3JldHVybiB0aGlzLl9wcm9kdWNlc0FjY2VwdD0KYWJsZURhdGF0eXBlKGIp fWVsc2V7cmV0dXJuIGZhbHNlfX1pZihhLmlzQ29sbGVjdGlvbiYmYS5jYW5NYXRjaChkKSl7cmV0 dXJuPQogdGhpcy5fcHJvZHVjZXNBY2NlcHRhYmxlRGF0YXR5cGUoYil9ZWxzZXt2YXIgYz0zRHRo aXMuX21hcHBpbmdDb25zdHJhaW50cyg9Cik7aWYoYy5ldmVyeShfLmJpbmQoZC5jYW5NYXRjaCxk KSkpe3JldHVybiB0aGlzLl9wcm9kdWNlc0FjY2VwdGFibGVEYXRhdHlwZT0KKGIpfWVsc2V7cmV0 dXJuIGZhbHNlfX19ZWxzZXtpZihhLmlzQ29sbGVjdGlvbil7cmV0dXJuIGZhbHNlfX1yZXR1cm4g dGhpcy5fPQpwcm9kdWNlc0FjY2VwdGFibGVEYXRhdHlwZShiKX19KTt2YXIgSW5wdXRDb2xsZWN0 aW9uVGVybWluYWw9M0RCYXNlSW5wdXRUZXI9Cm1pbmFsLmV4dGVuZCh7dXBkYXRlOmZ1bmN0aW9u KGEpe3RoaXMubXVsdGlwbGU9M0RmYWxzZTt0aGlzLmNvbGxlY3Rpb249M0R0cj0KdWU7dGhpcy5k YXRhdHlwZXM9M0RhLmV4dGVuc2lvbnM7aWYoYS5jb2xsZWN0aW9uX3R5cGUpe3RoaXMuY29sbGVj dGlvblR5cGU9Cj0zRG5ldyBDb2xsZWN0aW9uVHlwZURlc2NyaXB0aW9uKGEuY29sbGVjdGlvbl90 eXBlKX1lbHNle3RoaXMuY29sbGVjdGlvblR5cD0KZT0zREFOWV9DT0xMRUNUSU9OX1RZUEVfREVT Q1JJUFRJT059fSxjb25uZWN0OmZ1bmN0aW9uKGIpe0Jhc2VJbnB1dFRlcm1pbmFsPQoucHJvdG90 eXBlLmNvbm5lY3QuY2FsbCh0aGlzLGIpO3ZhciBhPTNEYi5oYW5kbGUxO2lmKCFhKXtyZXR1cm59 dmFyIGM9M0R0aGk9CnMuX2VmZmVjdGl2ZU1hcE92ZXIoYSk7dGhpcy5zZXRNYXBPdmVyKGMpfSxf ZWZmZWN0aXZlTWFwT3ZlcjpmdW5jdGlvbihhKXt2YT0KciBiPTNEdGhpcy5jb2xsZWN0aW9uVHlw ZTt2YXIgYz0zRHRoaXMuX290aGVyQ29sbGVjdGlvblR5cGUoYSk7aWYoIWIuY2FuTWF0PQpjaChj KSl7cmV0dXJuIGMuZWZmZWN0aXZlTWFwT3ZlcihiKX1lbHNle3JldHVybiBOVUxMX0NPTExFQ1RJ T05fVFlQRV9ERVNDUkk9ClBUSU9OfX0sX2VmZmVjdGl2ZUNvbGxlY3Rpb25UeXBlOmZ1bmN0aW9u KCl7dmFyIGI9M0R0aGlzLmNvbGxlY3Rpb25UeXBlO3Zhcj0KIGE9M0R0aGlzLm1hcE92ZXIoKTty ZXR1cm4gYS5hcHBlbmQoYil9LGF0dGFjaGFibGU6ZnVuY3Rpb24oYil7dmFyIGc9M0R0aGlzPQou X290aGVyQ29sbGVjdGlvblR5cGUoYik7aWYoZy5pc0NvbGxlY3Rpb24pe3ZhciBmPTNEdGhpcy5f ZWZmZWN0aXZlQ29sbGVjdGk9Cm9uVHlwZSgpO3ZhciBhPTNEdGhpcy5tYXBPdmVyKCk7aWYoZi5j YW5NYXRjaChnKSl7cmV0dXJuIHRoaXMuX3Byb2R1Y2VzQWNjZT0KcHRhYmxlRGF0YXR5cGUoYil9 ZWxzZXtpZihhLmlzQ29sbGVjdGlvbil7cmV0dXJuIGZhbHNlfWVsc2V7aWYoZy5jYW5NYXBPdmVy PQoodGhpcy5jb2xsZWN0aW9uVHlwZSkpe3ZhciBkPTNEdGhpcy5fZWZmZWN0aXZlTWFwT3Zlcihi KTtpZighZC5pc0NvbGxlY3Rpb249Cil7cmV0dXJuIGZhbHNlfXZhciBjPTNEdGhpcy5fbWFwcGlu Z0NvbnN0cmFpbnRzKCk7aWYoYy5ldmVyeShkLmNhbk1hdGNoKSl7cj0KZXR1cm4gdGhpcy5fcHJv ZHVjZXNBY2NlcHRhYmxlRGF0YXR5cGUoYil9fX19fXJldHVybiBmYWxzZX19KTt2YXIgT3V0cHV0 Q29sPQpsZWN0aW9uVGVybWluYWw9M0RUZXJtaW5hbC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rp b24oYSl7VGVybWluYWwucHJvdG90eXA9CmUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsYSk7dGhpcy5k YXRhdHlwZXM9M0RhLmRhdGF0eXBlczt0aGlzLmNvbGxlY3Rpb25UeXBlPQo9M0RuZXcgQ29sbGVj dGlvblR5cGVEZXNjcmlwdGlvbihhLmNvbGxlY3Rpb25fdHlwZSk7dGhpcy5pc0RhdGFDb2xsZWN0 aW9uSW49CnB1dD0zRHRydWV9LHVwZGF0ZTpmdW5jdGlvbihhKXt2YXIgYj0zRG5ldyBDb2xsZWN0 aW9uVHlwZURlc2NyaXB0aW9uKGEuY29sbD0KZWN0aW9uX3R5cGUpO2lmKGIuY29sbGVjdGlvblR5 cGUhPTNEdGhpcy5jb2xsZWN0aW9uVHlwZS5jb2xsZWN0aW9uVHlwZSl7Xy5lPQphY2godGhpcy5j b25uZWN0b3JzLGZ1bmN0aW9uKGMpe2MuZGVzdHJveSgpfSl9dGhpcy5jb2xsZWN0aW9uVHlwZT0z RGJ9fSk7ZnU9Cm5jdGlvbiBDb25uZWN0b3IoYixhKXt0aGlzLmNhbnZhcz0zRG51bGw7dGhpcy5k cmFnZ2luZz0zRGZhbHNlO3RoaXMuaW5uZXJfYz0Kb2xvcj0zRCIjRkZGRkZGIjt0aGlzLm91dGVy X2NvbG9yPTNEIiNEOEIzNjUiO2lmKGImJmEpe3RoaXMuY29ubmVjdChiLGEpfX0kPQouZXh0ZW5k KENvbm5lY3Rvci5wcm90b3R5cGUse2Nvbm5lY3Q6ZnVuY3Rpb24oYixhKXt0aGlzLmhhbmRsZTE9 M0RiO2lmKHRoaXM9Ci5oYW5kbGUxKXt0aGlzLmhhbmRsZTEuY29ubmVjdCh0aGlzKX10aGlzLmhh bmRsZTI9M0RhO2lmKHRoaXMuaGFuZGxlMil7dGhpcz0KLmhhbmRsZTIuY29ubmVjdCh0aGlzKX19 LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmhhbmRsZTEpe3RoaXMuaGFuZGxlMS5kPQppc2Nv bm5lY3QodGhpcyl9aWYodGhpcy5oYW5kbGUyKXt0aGlzLmhhbmRsZTIuZGlzY29ubmVjdCh0aGlz KX0kKHRoaXMuY2FudmE9CnMpLnJlbW92ZSgpfSxkZXN0cm95SWZJbnZhbGlkOmZ1bmN0aW9uKCl7 aWYodGhpcy5oYW5kbGUxJiZ0aGlzLmhhbmRsZTImJiF0aD0KaXMuaGFuZGxlMi5hdHRhY2hhYmxl KHRoaXMuaGFuZGxlMSkpe3RoaXMuZGVzdHJveSgpfX0scmVkcmF3OmZ1bmN0aW9uKCl7dmFyPQog Zj0zRCQoIiNjYW52YXMtY29udGFpbmVyIik7aWYoIXRoaXMuY2FudmFzKXt0aGlzLmNhbnZhcz0z RGRvY3VtZW50LmNyZWF0ZUU9CmxlbWVudCgiY2FudmFzIik7aWYod2luZG93Lkdfdm1sQ2FudmFz TWFuYWdlcil7R192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZT0KbnQodGhpcy5jYW52YXMpfWYu YXBwZW5kKCQodGhpcy5jYW52YXMpKTtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLmNhbnZhcy5zdHls PQplLnpJbmRleD0zRCIzMDAifX12YXIgdj0zRGZ1bmN0aW9uKGMpe3JldHVybiAkKGMpLm9mZnNl dCgpLmxlZnQtZi5vZmZzZXQoKS49CmxlZnR9O3ZhciBwPTNEZnVuY3Rpb24oYyl7cmV0dXJuICQo Yykub2Zmc2V0KCkudG9wLWYub2Zmc2V0KCkudG9wfTtpZighdGhpcz0KLmhhbmRsZTF8fCF0aGlz LmhhbmRsZTIpe3JldHVybn12YXIgbz0zRHYodGhpcy5oYW5kbGUxLmVsZW1lbnQpKzU7dmFyIG49 M0RwPQoodGhpcy5oYW5kbGUxLmVsZW1lbnQpKzU7dmFyIHg9M0R2KHRoaXMuaGFuZGxlMi5lbGVt ZW50KSs1O3ZhciB1PTNEcCh0aGlzLmg9CmFuZGxlMi5lbGVtZW50KSs1O3ZhciBrPTNEMTAwO3Zh ciByPTNETWF0aC5taW4obyx4KTt2YXIgYT0zRE1hdGgubWF4KG8seCk7dj0KYXIgcT0zRE1hdGgu bWluKG4sdSk7dmFyIEI9M0RNYXRoLm1heChuLHUpO3ZhciBkPTNETWF0aC5taW4oTWF0aC5tYXgo TWF0aC5hPQpicyhCLXEpLzIsMTAwKSwzMDApO3ZhciB3PTNEci1rO3ZhciBBPTNEcS1rO3ZhciB5 PTNEYS1yKzIqazt2YXIgcz0zREItcSsyKms9Cjt0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0PTNEdysi cHgiO3RoaXMuY2FudmFzLnN0eWxlLnRvcD0zREErInB4Ijt0aGlzLmNhbnZhcz0KLnNldEF0dHJp YnV0ZSgid2lkdGgiLHkpO3RoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixzKTtvLT0z RHc7bi09M0RBPQo7eC09M0R3O3UtPTNEQTt2YXIgej0zRHRoaXMuY2FudmFzLmdldENvbnRleHQo IjJkIiksaD0zRG51bGwsbD0zRG51bGw7dmFyIGc9Cj0zRDE7aWYodGhpcy5oYW5kbGUxJiZ0aGlz LmhhbmRsZTEuaXNNYXBwZWRPdmVyKCkpe3ZhciBoPTNEWy02LC0zLDAsMyw2XTtnPQo9M0Q1fWVs c2V7dmFyIGg9M0RbMF19aWYodGhpcy5oYW5kbGUyJiZ0aGlzLmhhbmRsZTIuaXNNYXBwZWRPdmVy KCkpe3ZhciBsPQo9M0RbLTYsLTMsMCwzLDZdO2c9M0Q1fWVsc2V7dmFyIGw9M0RbMF19dmFyIGI9 M0R0aGlzO2Zvcih2YXIgdD0zRDA7dDxnO3QrKyk9Cnt2YXIgbT0zRDUsaj0zRDc7aWYoaC5sZW5n dGg+MXx8bC5sZW5ndGg+MSl7bT0zRDE7aj0zRDN9Yi5kcmF3X291dGxpbmVkX2N1cj0KdmUobyxu LHgsdSxkLG0saixoW3QlaC5sZW5ndGhdLGxbdCVsLmxlbmd0aF0pfX0sZHJhd19vdXRsaW5lZF9j dXJ2ZTpmdW5jdGlvPQpuKGosaSxsLGssYSxiLGYsZyxkKXt2YXIgZz0zRGd8fDA7dmFyIGQ9M0Rk fHwwO3ZhciBoPTNEdGhpcy5jYW52YXMuZ2V0Q29udGU9Cnh0KCIyZCIpO2gubGluZUNhcD0zRCJy b3VuZCI7aC5zdHJva2VTdHlsZT0zRHRoaXMub3V0ZXJfY29sb3I7aC5saW5lV2lkdGg9Cj0zRGY7 aC5iZWdpblBhdGgoKTtoLm1vdmVUbyhqLGkrZyk7aC5iZXppZXJDdXJ2ZVRvKGorYSxpK2csbC1h LGsrZCxsLGsrZCk7aD0KLnN0cm9rZSgpO2guc3Ryb2tlU3R5bGU9M0R0aGlzLmlubmVyX2NvbG9y O2gubGluZVdpZHRoPTNEYjtoLmJlZ2luUGF0aCgpO2guPQptb3ZlVG8oaixpK2cpO2guYmV6aWVy Q3VydmVUbyhqK2EsaStnLGwtYSxrK2QsbCxrK2QpO2guc3Ryb2tlKCl9fSk7dmFyIE5vZGU9Cj0z REJhY2tib25lLk1vZGVsLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLmVsZW1l bnQ9M0RhLmVsZW1lbnQ7dD0KaGlzLmlucHV0X3Rlcm1pbmFscz0zRHt9O3RoaXMub3V0cHV0X3Rl cm1pbmFscz0zRHt9O3RoaXMudG9vbF9lcnJvcnM9M0R7fX0sPQpjb25uZWN0ZWRPdXRwdXRUZXJt aW5hbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGVkVGVybWluYWxzKHRoaXMub3U9 CnRwdXRfdGVybWluYWxzKX0sX2Nvbm5lY3RlZFRlcm1pbmFsczpmdW5jdGlvbihiKXt2YXIgYT0z RFtdOyQuZWFjaChiLGZ1bmN0aT0Kb24oYyxkKXtpZihkLmNvbm5lY3RvcnMubGVuZ3RoPjApe2Eu cHVzaChkKX19KTtyZXR1cm4gYX0saGFzQ29ubmVjdGVkT3V0cHV0PQpUZXJtaW5hbHM6ZnVuY3Rp b24oKXt2YXIgYT0zRHRoaXMub3V0cHV0X3Rlcm1pbmFscztmb3IodmFyIGIgaW4gYSl7aWYoYVti XS49CmNvbm5lY3RvcnMubGVuZ3RoPjApe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9LGNvbm5l Y3RlZE1hcHBlZElucHV0VGVybWluYT0KbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29ubmVj dGVkTWFwcGVkVGVybWluYWxzKHRoaXMuaW5wdXRfdGVybWluYWxzKX0sPQpoYXNDb25uZWN0ZWRN YXBwZWRJbnB1dFRlcm1pbmFsczpmdW5jdGlvbigpe3ZhciBjPTNEdGhpcy5pbnB1dF90ZXJtaW5h bHM7Zm89CnIodmFyIGIgaW4gYyl7dmFyIGE9M0RjW2JdO2lmKGEuY29ubmVjdG9ycy5sZW5ndGg+ MCYmYS5pc01hcHBlZE92ZXIoKSl7cmV0dT0Kcm4gdHJ1ZX19cmV0dXJuIGZhbHNlfSxfY29ubmVj dGVkTWFwcGVkVGVybWluYWxzOmZ1bmN0aW9uKGIpe3ZhciBhPTNEW107JC5lPQphY2goYixmdW5j dGlvbihjLGQpe3ZhciBmPTNEZC5tYXBPdmVyKCk7aWYoZi5pc0NvbGxlY3Rpb24pe2lmKGQuY29u bmVjdG9ycy49Cmxlbmd0aD4wKXthLnB1c2goZCl9fX0pO3JldHVybiBhfSxtYXBwZWRJbnB1dFRl cm1pbmFsczpmdW5jdGlvbigpe3JldHVybiB0aD0KaXMuX21hcHBlZFRlcm1pbmFscyh0aGlzLmlu cHV0X3Rlcm1pbmFscyl9LF9tYXBwZWRUZXJtaW5hbHM6ZnVuY3Rpb24oYil7dmFyPQogYT0zRFtd OyQuZWFjaChiLGZ1bmN0aW9uKGMsZCl7dmFyIGY9M0RkLm1hcE92ZXIoKTtpZihmLmlzQ29sbGVj dGlvbil7YS5wdXM9CmgoZCl9fSk7cmV0dXJuIGF9LGhhc01hcHBlZE92ZXJJbnB1dFRlcm1pbmFs czpmdW5jdGlvbigpe3ZhciBhPTNEZmFsc2U7Xy5lYT0KY2godGhpcy5pbnB1dF90ZXJtaW5hbHMs ZnVuY3Rpb24oYil7dmFyIGM9M0RiLm1hcE92ZXIoKTtpZihjLmlzQ29sbGVjdGlvbil7PQphPTNE dHJ1ZX19KTtyZXR1cm4gYX0scmVkcmF3OmZ1bmN0aW9uKCl7JC5lYWNoKHRoaXMuaW5wdXRfdGVy bWluYWxzLGZ1bmN0aW89Cm4oYSxiKXtiLnJlZHJhdygpfSk7JC5lYWNoKHRoaXMub3V0cHV0X3Rl cm1pbmFscyxmdW5jdGlvbihhLGIpe2IucmVkcmF3KCl9KT0KfSxkZXN0cm95OmZ1bmN0aW9uKCl7 JC5lYWNoKHRoaXMuaW5wdXRfdGVybWluYWxzLGZ1bmN0aW9uKGEsYil7Yi5kZXN0cm95KCl9PQop OyQuZWFjaCh0aGlzLm91dHB1dF90ZXJtaW5hbHMsZnVuY3Rpb24oYSxiKXtiLmRlc3Ryb3koKX0p O3dvcmtmbG93LnJlbW92ZV89Cm5vZGUodGhpcyk7JCh0aGlzLmVsZW1lbnQpLnJlbW92ZSgpfSxt YWtlX2FjdGl2ZTpmdW5jdGlvbigpeyQodGhpcy5lbGVtZW50KT0KLmFkZENsYXNzKCJ0b29sRm9y bS1hY3RpdmUiKX0sbWFrZV9pbmFjdGl2ZTpmdW5jdGlvbigpe3ZhciBhPTNEdGhpcy5lbGVtZW50 PQouZ2V0KDApOyhmdW5jdGlvbihiKXtiLnJlbW92ZUNoaWxkKGEpO2IuYXBwZW5kQ2hpbGQoYSl9 KShhLnBhcmVudE5vZGUpOyQoYSk9Ci5yZW1vdmVDbGFzcygidG9vbEZvcm0tYWN0aXZlIil9LGlu aXRfZmllbGRfZGF0YTpmdW5jdGlvbihiKXtpZihiLnR5cGUpe3RoaT0Kcy50eXBlPTNEYi50eXBl fXRoaXMubmFtZT0zRGIubmFtZTt0aGlzLmZvcm1faHRtbD0zRGIuZm9ybV9odG1sO3RoaXMudG9v bF9zPQp0YXRlPTNEYi50b29sX3N0YXRlO3RoaXMudG9vbF9lcnJvcnM9M0RiLnRvb2xfZXJyb3Jz O3RoaXMudG9vbHRpcD0zRGIudG9vbHQ9CmlwP2IudG9vbHRpcDoiIjt0aGlzLmFubm90YXRpb249 M0RiLmFubm90YXRpb247dGhpcy5wb3N0X2pvYl9hY3Rpb25zPTNEYi5wbz0Kc3Rfam9iX2FjdGlv bnM/Yi5wb3N0X2pvYl9hY3Rpb25zOnt9O3RoaXMubGFiZWw9M0RiLmxhYmVsO3RoaXMudXVpZD0z RGIudXVpPQpkO3RoaXMud29ya2Zsb3dfb3V0cHV0cz0zRGIud29ya2Zsb3dfb3V0cHV0cz9iLndv cmtmbG93X291dHB1dHM6W107dmFyIGE9M0Q9CnRoaXM7dmFyIGM9M0RuZXcgTm9kZVZpZXcoe2Vs OnRoaXMuZWxlbWVudFswXSxub2RlOmEsfSk7YS5ub2RlVmlldz0zRGM7JC5lYT0KY2goYi5kYXRh X2lucHV0cyxmdW5jdGlvbihmLGQpe2MuYWRkRGF0YUlucHV0KGQpfSk7aWYoKGIuZGF0YV9pbnB1 dHMubGVuZ3RoPQo+MCkmJihiLmRhdGFfb3V0cHV0cy5sZW5ndGg+MCkpe2MuYWRkUnVsZSgpfSQu ZWFjaChiLmRhdGFfb3V0cHV0cyxmdW5jdGlvbig9CmYsZCl7Yy5hZGREYXRhT3V0cHV0KGQpfSk7 Yy5yZW5kZXIoKTt3b3JrZmxvdy5ub2RlX2NoYW5nZWQodGhpcyx0cnVlKX0sdXBkYT0KdGVfZmll bGRfZGF0YTpmdW5jdGlvbihkKXt2YXIgYz0zRHRoaXM7bm9kZVZpZXc9M0RjLm5vZGVWaWV3O3Ro aXMudG9vbF9zdGF0PQplPTNEZC50b29sX3N0YXRlO3RoaXMuZm9ybV9odG1sPTNEZC5mb3JtX2h0 bWw7dGhpcy50b29sX2Vycm9ycz0zRGQudG9vbF9lcnI9Cm9yczt0aGlzLmFubm90YXRpb249M0Rk LmFubm90YXRpb247aWYoInBvc3Rfam9iX2FjdGlvbnMiIGluIGQpe3ZhciBmPTNEJC5wYT0KcnNl SlNPTihkLnBvc3Rfam9iX2FjdGlvbnMpO3RoaXMucG9zdF9qb2JfYWN0aW9ucz0zRGY/Zjp7fX1j Lm5vZGVWaWV3LnJlbmRlPQpyVG9vbEVycm9ycygpO3ZhciBnPTNEbm9kZVZpZXcuJCgiZGl2Lmlu cHV0cyIpO3ZhciBhPTNEbm9kZVZpZXcubmV3SW5wdXRzRGk9CnYoKTt2YXIgYj0zRHt9O18uZWFj aChkLmRhdGFfaW5wdXRzLGZ1bmN0aW9uKGgpe3ZhciBpPTNEYy5ub2RlVmlldy5hZGREYXRhST0K bnB1dChoLGEpO2JbaC5uYW1lXT0zRGl9KTtfLmVhY2goXy5kaWZmZXJlbmNlKF8udmFsdWVzKG5v ZGVWaWV3LnRlcm1pbmFsVmllPQp3cyksXy52YWx1ZXMoYikpLGZ1bmN0aW9uKGgpe2guZWwudGVy bWluYWwuZGVzdHJveSgpfSk7bm9kZVZpZXcudGVybWluYWxWaWU9CndzPTNEYjtpZihkLmRhdGFf b3V0cHV0cy5sZW5ndGg9M0Q9M0QxJiYiY29sbGVjdGlvbl90eXBlIiBpbiBkLmRhdGFfb3V0cHV0 cz0KWzBdKXtub2RlVmlldy51cGRhdGVEYXRhT3V0cHV0KGQuZGF0YV9vdXRwdXRzWzBdKX1nLnJl cGxhY2VXaXRoKGEpO3RoaXMubWFyPQprQ2hhbmdlZCgpO3RoaXMucmVkcmF3KCl9LGVycm9yOmZ1 bmN0aW9uKGQpe3ZhciBhPTNEJCh0aGlzLmVsZW1lbnQpLmZpbmQoIi49CnRvb2xGb3JtQm9keSIp O2EuZmluZCgiZGl2IikucmVtb3ZlKCk7dmFyIGM9M0QiPGRpdiBzdHlsZT0zRCdjb2xvcjogcmVk OyB0ZT0KeHQtc3R5bGU6IGl0YWxpYzsnPiIrZCsiPC9kaXY+Ijt0aGlzLmZvcm1faHRtbD0zRGM7 YS5odG1sKGMpO3dvcmtmbG93Lm5vZGVfPQpjaGFuZ2VkKHRoaXMpfSxtYXJrQ2hhbmdlZDpmdW5j dGlvbigpe3dvcmtmbG93Lm5vZGVfY2hhbmdlZCh0aGlzKX19KTtmdW5jdGk9Cm9uIFdvcmtmbG93 KGEpe3RoaXMuY2FudmFzX2NvbnRhaW5lcj0zRGE7dGhpcy5pZF9jb3VudGVyPTNEMDt0aGlzLm5v ZGVzPTNEez0KfTt0aGlzLm5hbWU9M0RudWxsO3RoaXMuaGFzX2NoYW5nZXM9M0RmYWxzZTt0aGlz LmFjdGl2ZV9mb3JtX2hhc19jaGFuZ2VzPTNEPQpmYWxzZX0kLmV4dGVuZChXb3JrZmxvdy5wcm90 b3R5cGUse2FkZF9ub2RlOmZ1bmN0aW9uKGEpe2EuaWQ9M0R0aGlzLmlkX2NvdW49CnRlcjthLmVs ZW1lbnQuYXR0cigiaWQiLCJ3Zi1ub2RlLXN0ZXAtIithLmlkKTt0aGlzLmlkX2NvdW50ZXIrKzt0 aGlzLm5vZGVzWz0KYS5pZF09M0RhO3RoaXMuaGFzX2NoYW5nZXM9M0R0cnVlO2Eud29ya2Zsb3c9 M0R0aGlzfSxyZW1vdmVfbm9kZTpmdW5jdGlvbihhPQope2lmKHRoaXMuYWN0aXZlX25vZGU9M0Q9 M0RhKXt0aGlzLmNsZWFyX2FjdGl2ZV9ub2RlKCl9ZGVsZXRlIHRoaXMubm9kZXNbYS49CmlkXTt0 aGlzLmhhc19jaGFuZ2VzPTNEdHJ1ZX0scmVtb3ZlX2FsbDpmdW5jdGlvbigpe3dmPTNEdGhpczsk LmVhY2godGhpcy5ubz0KZGVzLGZ1bmN0aW9uKGIsYSl7YS5kZXN0cm95KCk7d2YucmVtb3ZlX25v ZGUoYSl9KX0scmVjdGlmeV93b3JrZmxvd19vdXRwdXRzPQo6ZnVuY3Rpb24oKXt2YXIgYj0zRGZh bHNlO3ZhciBhPTNEZmFsc2U7JC5lYWNoKHRoaXMubm9kZXMsZnVuY3Rpb24oYyxkKXtpZig9CmQu d29ya2Zsb3dfb3V0cHV0cyYmZC53b3JrZmxvd19vdXRwdXRzLmxlbmd0aD4wKXtiPTNEdHJ1ZX0k LmVhY2goZC5wb3N0X2pvYj0KX2FjdGlvbnMsZnVuY3Rpb24oZyxmKXtpZihmLmFjdGlvbl90eXBl PTNEPTNEPTNEIkhpZGVEYXRhc2V0QWN0aW9uIil7YT0zRHRyPQp1ZX19KX0pO2lmKGIhPTNEPTNE ZmFsc2V8fGEhPTNEPTNEZmFsc2UpeyQuZWFjaCh0aGlzLm5vZGVzLGZ1bmN0aW9uKGMsZyl7aWY9 CihnLnR5cGU9M0Q9M0Q9M0QidG9vbCIpe3ZhciBmPTNEZmFsc2U7aWYoZy5wb3N0X2pvYl9hY3Rp b25zPTNEPTNEbnVsbCl7Zy5wbz0Kc3Rfam9iX2FjdGlvbnM9M0R7fTtmPTNEdHJ1ZX12YXIgZD0z RFtdOyQuZWFjaChnLnBvc3Rfam9iX2FjdGlvbnMsZnVuY3Rpb24oPQppLGgpe2lmKGguYWN0aW9u X3R5cGU9M0Q9M0QiSGlkZURhdGFzZXRBY3Rpb24iKXtkLnB1c2goaSl9fSk7aWYoZC5sZW5ndGg+ MCk9CnskLmVhY2goZCxmdW5jdGlvbihoLGope2Y9M0R0cnVlO2RlbGV0ZSBnLnBvc3Rfam9iX2Fj dGlvbnNbal19KX1pZihiKXskLmVhYz0KaChnLm91dHB1dF90ZXJtaW5hbHMsZnVuY3Rpb24oaSxq KXt2YXIgaD0zRHRydWU7JC5lYWNoKGcud29ya2Zsb3dfb3V0cHV0cyxmPQp1bmN0aW9uKGwsbSl7 aWYoai5uYW1lPTNEPTNEPTNEbSl7aD0zRGZhbHNlfX0pO2lmKGg9M0Q9M0Q9M0R0cnVlKXtmPTNE dHJ1ZTs9CnZhciBrPTNEe2FjdGlvbl90eXBlOiJIaWRlRGF0YXNldEFjdGlvbiIsb3V0cHV0X25h bWU6ai5uYW1lLGFjdGlvbl9hcmd1bWVudD0Kczp7fX07Zy5wb3N0X2pvYl9hY3Rpb25zWyJIaWRl RGF0YXNldEFjdGlvbiIrai5uYW1lXT0zRG51bGw7Zy5wb3N0X2pvYl9hY3RpPQpvbnNbIkhpZGVE YXRhc2V0QWN0aW9uIitqLm5hbWVdPTNEa319KX1pZih3b3JrZmxvdy5hY3RpdmVfbm9kZT0zRD0z RGcmJmY9M0Q9Cj0zRD0zRHRydWUpe3dvcmtmbG93LnJlbG9hZF9hY3RpdmVfbm9kZSgpfX19KX19 LHRvX3NpbXBsZTpmdW5jdGlvbigpe3ZhciBhPQo9M0R7fTskLmVhY2godGhpcy5ub2RlcyxmdW5j dGlvbihjLGYpe3ZhciBnPTNEe307JC5lYWNoKGYuaW5wdXRfdGVybWluYWxzLGY9CnVuY3Rpb24o aSxqKXtnW2oubmFtZV09M0RudWxsO3ZhciBoPTNEW107JC5lYWNoKGouY29ubmVjdG9ycyxmdW5j dGlvbihrLGwpez0KaFtrXT0zRHtpZDpsLmhhbmRsZTEubm9kZS5pZCxvdXRwdXRfbmFtZTpsLmhh bmRsZTEubmFtZX07Z1tqLm5hbWVdPTNEaH0pfSk7PQp2YXIgYj0zRHt9O2lmKGYucG9zdF9qb2Jf YWN0aW9ucyl7JC5lYWNoKGYucG9zdF9qb2JfYWN0aW9ucyxmdW5jdGlvbihqLGgpe3Y9CmFyIGs9 M0R7YWN0aW9uX3R5cGU6aC5hY3Rpb25fdHlwZSxvdXRwdXRfbmFtZTpoLm91dHB1dF9uYW1lLGFj dGlvbl9hcmd1bWVudD0KczpoLmFjdGlvbl9hcmd1bWVudHN9O2JbaC5hY3Rpb25fdHlwZStoLm91 dHB1dF9uYW1lXT0zRG51bGw7YltoLmFjdGlvbl90eXBlPQoraC5vdXRwdXRfbmFtZV09M0RrfSl9 aWYoIWYud29ya2Zsb3dfb3V0cHV0cyl7Zi53b3JrZmxvd19vdXRwdXRzPTNEW119dmFyIGQ9Cj0z RHtpZDpmLmlkLHR5cGU6Zi50eXBlLHRvb2xfaWQ6Zi50b29sX2lkLHRvb2xfc3RhdGU6Zi50b29s X3N0YXRlLHRvb2xfZXJybz0KcnM6Zi50b29sX2Vycm9ycyxpbnB1dF9jb25uZWN0aW9uczpnLHBv c2l0aW9uOiQoZi5lbGVtZW50KS5wb3NpdGlvbigpLGFubm90PQphdGlvbjpmLmFubm90YXRpb24s cG9zdF9qb2JfYWN0aW9uczpmLnBvc3Rfam9iX2FjdGlvbnMsdXVpZDpmLnV1aWQsbGFiZWw6Zi49 CmxhYmVsLHdvcmtmbG93X291dHB1dHM6Zi53b3JrZmxvd19vdXRwdXRzfTthW2YuaWRdPTNEZH0p O3JldHVybntzdGVwczphfX0sZj0Kcm9tX3NpbXBsZTpmdW5jdGlvbihiKXt3Zj0zRHRoaXM7dmFy IGM9M0QwO3dmLm5hbWU9M0RiLm5hbWU7dmFyIGE9M0RmYWxzZTskPQouZWFjaChiLnN0ZXBzLGZ1 bmN0aW9uKGcsZil7dmFyIGQ9M0RwcmVidWlsZF9ub2RlKGYudHlwZSxmLm5hbWUsZi50b29sX2lk KTs9CmQuaW5pdF9maWVsZF9kYXRhKGYpO2lmKGYucG9zaXRpb24pe2QuZWxlbWVudC5jc3Moe3Rv cDpmLnBvc2l0aW9uLnRvcCxsZWZ0Oj0KZi5wb3NpdGlvbi5sZWZ0fSl9ZC5pZD0zRGYuaWQ7d2Yu bm9kZXNbZC5pZF09M0RkO2M9M0RNYXRoLm1heChjLHBhcnNlSW50KGcpPQopO2lmKCFhJiZkLnR5 cGU9M0Q9M0Q9M0QidG9vbCIpe2lmKGQud29ya2Zsb3dfb3V0cHV0cy5sZW5ndGg+MCl7YT0zRHRy dWV9ZWw9CnNleyQuZWFjaChkLnBvc3Rfam9iX2FjdGlvbnMsZnVuY3Rpb24oaSxoKXtpZihoLmFj dGlvbl90eXBlPTNEPTNEPTNEIkhpZGVEYT0KdGFzZXRBY3Rpb24iKXthPTNEdHJ1ZX19KX19fSk7 d2YuaWRfY291bnRlcj0zRGMrMTskLmVhY2goYi5zdGVwcyxmdW5jdGlvbihnPQosZil7dmFyIGQ9 M0R3Zi5ub2Rlc1tnXTskLmVhY2goZi5pbnB1dF9jb25uZWN0aW9ucyxmdW5jdGlvbihpLGgpe2lm KGgpe2lmKCE9CiQuaXNBcnJheShoKSl7aD0zRFtoXX0kLmVhY2goaCxmdW5jdGlvbihrLGope3Zh ciBtPTNEd2Yubm9kZXNbai5pZF07dmFyIG49Cj0zRG5ldyBDb25uZWN0b3IoKTtuLmNvbm5lY3Qo bS5vdXRwdXRfdGVybWluYWxzW2oub3V0cHV0X25hbWVdLGQuaW5wdXRfdGVybT0KaW5hbHNbaV0p O24ucmVkcmF3KCl9KX19KTtpZihhJiZkLnR5cGU9M0Q9M0Q9M0QidG9vbCIpeyQuZWFjaChkLm91 dHB1dF90ZXJtPQppbmFscyxmdW5jdGlvbihoLGkpe2lmKGQucG9zdF9qb2JfYWN0aW9uc1siSGlk ZURhdGFzZXRBY3Rpb24iK2kubmFtZV09M0Q9M0Q9Cj0zRHVuZGVmaW5lZCl7ZC53b3JrZmxvd19v dXRwdXRzLnB1c2goaS5uYW1lKTtjYWxsb3V0PTNEJChkLmVsZW1lbnQpLmZpbmQoIj0KLmNhbGxv dXQuIitpLm5hbWUpO2NhbGxvdXQuZmluZCgiaW1nIikuYXR0cigic3JjIixnYWxheHlfY29uZmln LnJvb3QrInN0YXRpPQpjL2ltYWdlcy9mdWd1ZS9hc3Rlcmlzay1zbWFsbC5wbmciKTt3b3JrZmxv dy5oYXNfY2hhbmdlcz0zRHRydWV9fSl9fSl9LGNoZWM9CmtfY2hhbmdlc19pbl9hY3RpdmVfZm9y bTpmdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlX2Zvcm1faGFzX2NoYW5nZXMpe3RoaXMuaD0KYXNf Y2hhbmdlcz0zRHRydWU7JCgiI3JpZ2h0LWNvbnRlbnQiKS5maW5kKCJmb3JtIikuc3VibWl0KCk7 dGhpcy5hY3RpdmVfZm9yPQptX2hhc19jaGFuZ2VzPTNEZmFsc2V9fSxyZWxvYWRfYWN0aXZlX25v ZGU6ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZV9ub2RlKXs9CnZhciBhPTNEdGhpcy5hY3RpdmVf bm9kZTt0aGlzLmNsZWFyX2FjdGl2ZV9ub2RlKCk7dGhpcy5hY3RpdmF0ZV9ub2RlKGEpfX0sYz0K bGVhcl9hY3RpdmVfbm9kZTpmdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlX25vZGUpe3RoaXMuYWN0 aXZlX25vZGUubWFrZV9pbmFjPQp0aXZlKCk7dGhpcy5hY3RpdmVfbm9kZT0zRG51bGx9cGFyZW50 LnNob3dfZm9ybV9mb3JfdG9vbCgiPGRpdj5ObyBub2RlIHNlbGU9CmN0ZWQ8L2Rpdj4iKX0sYWN0 aXZhdGVfbm9kZTpmdW5jdGlvbihhKXtpZih0aGlzLmFjdGl2ZV9ub2RlIT0zRGEpe3RoaXMuY2hl Yz0Ka19jaGFuZ2VzX2luX2FjdGl2ZV9mb3JtKCk7dGhpcy5jbGVhcl9hY3RpdmVfbm9kZSgpO3Bh cmVudC5zaG93X2Zvcm1fZm9yX3RvPQpvbChhLmZvcm1faHRtbCthLnRvb2x0aXAsYSk7YS5tYWtl X2FjdGl2ZSgpO3RoaXMuYWN0aXZlX25vZGU9M0RhfX0sbm9kZV9jaGE9Cm5nZWQ6ZnVuY3Rpb24o YSxiKXt0aGlzLmhhc19jaGFuZ2VzPTNEdHJ1ZTtpZih0aGlzLmFjdGl2ZV9ub2RlPTNEPTNEYSYm KCFwYT0KcmVudC5fX05FV1RPT0xGT1JNX198fGIpKXt0aGlzLmNoZWNrX2NoYW5nZXNfaW5fYWN0 aXZlX2Zvcm0oKTtwYXJlbnQuc2hvd19mPQpvcm1fZm9yX3Rvb2woYS5mb3JtX2h0bWwrYS50b29s dGlwLGEpfX0sbGF5b3V0OmZ1bmN0aW9uKCl7dGhpcy5jaGVja19jaGFuZ2U9CnNfaW5fYWN0aXZl X2Zvcm0oKTt0aGlzLmhhc19jaGFuZ2VzPTNEdHJ1ZTt2YXIgaT0zRHt9O3ZhciBiPTNEe307JC5l YWNoKHRoaT0Kcy5ub2RlcyxmdW5jdGlvbihsLGspe2lmKGlbbF09M0Q9M0Q9M0R1bmRlZmluZWQp e2lbbF09M0QwfWlmKGJbbF09M0Q9M0Q9M0R1PQpuZGVmaW5lZCl7YltsXT0zRFtdfX0pOyQuZWFj aCh0aGlzLm5vZGVzLGZ1bmN0aW9uKGwsayl7JC5lYWNoKGsuaW5wdXRfdGVybWk9Cm5hbHMsZnVu Y3Rpb24obSxuKXskLmVhY2gobi5jb25uZWN0b3JzLGZ1bmN0aW9uKHAscSl7dmFyIG89M0RxLmhh bmRsZTEubm9kZT0KO2lbay5pZF0rPTNEMTtiW28uaWRdLnB1c2goay5pZCl9KX0pfSk7bm9kZV9p ZHNfYnlfbGV2ZWw9M0RbXTt3aGlsZSh0cnVlKXtsPQpldmVsX3BhcmVudHM9M0RbXTtmb3IodmFy IGEgaW4gaSl7aWYoaVthXT0zRD0zRDApe2xldmVsX3BhcmVudHMucHVzaChhKX19aWY9CihsZXZl bF9wYXJlbnRzLmxlbmd0aD0zRD0zRDApe2JyZWFrfW5vZGVfaWRzX2J5X2xldmVsLnB1c2gobGV2 ZWxfcGFyZW50cyk7Zj0Kb3IodmFyIGYgaW4gbGV2ZWxfcGFyZW50cyl7dmFyIGo9M0RsZXZlbF9w YXJlbnRzW2ZdO2RlbGV0ZSBpW2pdO2Zvcih2YXIgZyBpPQpuIGJbal0pe2lbYltqXVtnXV0tPTNE MX19fWlmKGkubGVuZ3RoKXtyZXR1cm59dmFyIGQ9M0R0aGlzLm5vZGVzO3ZhciBoPTNEODA9Cjt2 X3BhZD0zRDMwO3ZhciBjPTNEaDskLmVhY2gobm9kZV9pZHNfYnlfbGV2ZWwsZnVuY3Rpb24oayxs KXtsLnNvcnQoZnVuY3Rpbz0KbihwLG8pe3JldHVybiAkKGRbcF0uZWxlbWVudCkucG9zaXRpb24o KS50b3AtJChkW29dLmVsZW1lbnQpLnBvc2l0aW9uKCkudG9wPQp9KTt2YXIgbT0zRDA7dmFyIG49 M0R2X3BhZDskLmVhY2gobCxmdW5jdGlvbihvLHIpe3ZhciBxPTNEZFtyXTt2YXIgcD0zRCQocS49 CmVsZW1lbnQpOyQocCkuY3NzKHt0b3A6bixsZWZ0OmN9KTttPTNETWF0aC5tYXgobSwkKHApLndp ZHRoKCkpO24rPTNEJChwKS5oZT0KaWdodCgpK3ZfcGFkfSk7Yys9M0RtK2h9KTskLmVhY2goZCxm dW5jdGlvbihrLGwpe2wucmVkcmF3KCl9KX0sYm91bmRzX2Zvcl9hPQpsbF9ub2RlczpmdW5jdGlv bigpe3ZhciBkPTNESW5maW5pdHksYj0zRC1JbmZpbml0eSxjPTNESW5maW5pdHksYT0zRC1JbmZp bmk9CnR5LGY7JC5lYWNoKHRoaXMubm9kZXMsZnVuY3Rpb24oaCxnKXtlPTNEJChnLmVsZW1lbnQp O2Y9M0RlLnBvc2l0aW9uKCk7ZD0zRD0KTWF0aC5taW4oZCxmLmxlZnQpO2I9M0RNYXRoLm1heChi LGYubGVmdCtlLndpZHRoKCkpO2M9M0RNYXRoLm1pbihjLGYudG9wKTthPQo9M0RNYXRoLm1heChh LGYudG9wK2Uud2lkdGgoKSl9KTtyZXR1cm57eG1pbjpkLHhtYXg6Yix5bWluOmMseW1heDphfX0s Zml0X2M9CmFudmFzX3RvX25vZGVzOmZ1bmN0aW9uKCl7dmFyIGE9M0R0aGlzLmJvdW5kc19mb3Jf YWxsX25vZGVzKCk7dmFyIGY9M0R0aGlzLj0KY2FudmFzX2NvbnRhaW5lci5wb3NpdGlvbigpO3Zh ciBpPTNEdGhpcy5jYW52YXNfY29udGFpbmVyLnBhcmVudCgpO3ZhciBkPTNEPQpmaXhfZGVsdGEo YS54bWluLDEwMCk7dmFyIGg9M0RmaXhfZGVsdGEoYS55bWluLDEwMCk7ZD0zRE1hdGgubWF4KGQs Zi5sZWZ0KTs9Cmg9M0RNYXRoLm1heChoLGYudG9wKTt2YXIgYz0zRGYubGVmdC1kO3ZhciBnPTNE Zi50b3AtaDt2YXIgYj0zRHJvdW5kX3VwKGEueD0KbWF4KzEwMCwxMDApK2Q7dmFyIGo9M0Ryb3Vu ZF91cChhLnltYXgrMTAwLDEwMCkraDtiPTNETWF0aC5tYXgoYiwtYytpLndpZHRoPQooKSk7aj0z RE1hdGgubWF4KGosLWcraS5oZWlnaHQoKSk7dGhpcy5jYW52YXNfY29udGFpbmVyLmNzcyh7bGVm dDpjLHRvcDpnLHc9CmlkdGg6YixoZWlnaHQ6an0pO3RoaXMuY2FudmFzX2NvbnRhaW5lci5jaGls ZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgaz0zRD0KJCh0aGlzKS5wb3NpdGlvbigpOyQodGhp cykuY3NzKCJsZWZ0IixrLmxlZnQrZCk7JCh0aGlzKS5jc3MoInRvcCIsay50b3AraCl9PQopfX0p O2Z1bmN0aW9uIGZpeF9kZWx0YShhLGIpe2lmKGE8Ynx8YT4zKmIpe25ld19wb3M9M0QoTWF0aC5j ZWlsKCgoYSViKSkvYik9CisxKSpiO3JldHVybigtKGEtbmV3X3BvcykpfXJldHVybiAwfWZ1bmN0 aW9uIHJvdW5kX3VwKGEsYil7cmV0dXJuIE1hdGguY2VpbD0KKGEvYikqYn1mdW5jdGlvbiBwcmVi dWlsZF9ub2RlKGwsaixyKXt2YXIgaT0zRCQoIjxkaXYgY2xhc3M9M0QndG9vbEZvcm0gdG9vPQps Rm9ybUluQ2FudmFzJz48L2Rpdj4iKTt2YXIgZz0zRG5ldyBOb2RlKHtlbGVtZW50Oml9KTtnLnR5 cGU9M0RsO2lmKGw9M0Q9M0Q9CiJ0b29sIil7Zy50b29sX2lkPTNEcn12YXIgbj0zRCQoIjxkaXYg Y2xhc3M9M0QndG9vbEZvcm1UaXRsZSB1bnNlbGVjdGFibGUnPj0KIitqKyI8L2Rpdj4iKTtpLmFw cGVuZChuKTtpLmNzcygibGVmdCIsJCh3aW5kb3cpLnNjcm9sbExlZnQoKSsyMCk7aS5jc3MoInRv PQpwIiwkKHdpbmRvdykuc2Nyb2xsVG9wKCkrMjApO3ZhciBtPTNEJCgiPGRpdiBjbGFzcz0zRCd0 b29sRm9ybUJvZHknPjwvZGl2PiI9Cik7dmFyIGg9M0QiPGRpdj48aW1nIGhlaWdodD0zRCcxNicg YWxpZ249M0QnbWlkZGxlJyBzcmM9M0QnIitnYWxheHlfY29uZmlnLj0Kcm9vdCsic3RhdGljL2lt YWdlcy9sb2FkaW5nX3NtYWxsX3doaXRlX2JnLmdpZicvPiBsb2FkaW5nIHRvb2wgaW5mby4uLjwv ZGl2PQo+IjttLmFwcGVuZChoKTtnLmZvcm1faHRtbD0zRGg7aS5hcHBlbmQobSk7dmFyIGs9M0Qk KCI8ZGl2IGNsYXNzPTNEJ2J1dHRvbnM9Cicgc3R5bGU9M0QnZmxvYXQ6IHJpZ2h0Oyc+PC9kaXY+ Iik7ay5hcHBlbmQoJCgiPGRpdj4iKS5hZGRDbGFzcygiZmEtaWNvbi1idT0KdHRvbiBmYSBmYS10 aW1lcyIpLmNsaWNrKGZ1bmN0aW9uKGIpe2cuZGVzdHJveSgpfSkpO2kuYXBwZW5kVG8oIiNjYW52 YXMtY29uPQp0YWluZXIiKTt2YXIgZD0zRCQoIiNjYW52YXMtY29udGFpbmVyIikucG9zaXRpb24o KTt2YXIgYz0zRCQoIiNjYW52YXMtY29udGE9CmluZXIiKS5wYXJlbnQoKTt2YXIgYT0zRGkud2lk dGgoKTt2YXIgcT0zRGkuaGVpZ2h0KCk7aS5jc3Moe2xlZnQ6KC1kLmxlZnQpKz0KKGMud2lkdGgo KS8yKS0oYS8yKSx0b3A6KC1kLnRvcCkrKGMuaGVpZ2h0KCkvMiktKHEvMil9KTtrLnByZXBlbmRU byhuKTthKz0KPTNEKGsud2lkdGgoKSsxMCk7aS5jc3MoIndpZHRoIixhKTskKGkpLmJpbmQoImRy YWdzdGFydCIsZnVuY3Rpb24oKXt3b3JrZmxvPQp3LmFjdGl2YXRlX25vZGUoZyl9KS5iaW5kKCJk cmFnZW5kIixmdW5jdGlvbigpe3dvcmtmbG93Lm5vZGVfY2hhbmdlZCh0aGlzKTs9CndvcmtmbG93 LmZpdF9jYW52YXNfdG9fbm9kZXMoKTtjYW52YXNfbWFuYWdlci5kcmF3X292ZXJ2aWV3KCl9KS5i aW5kKCJkcmFnYz0KbGlja29ubHkiLGZ1bmN0aW9uKCl7d29ya2Zsb3cuYWN0aXZhdGVfbm9kZShn KX0pLmJpbmQoImRyYWciLGZ1bmN0aW9uKG8scCl7PQp2YXIgZj0zRCQodGhpcykub2Zmc2V0UGFy ZW50KCkub2Zmc2V0KCksYj0zRHAub2Zmc2V0WC1mLmxlZnQscz0zRHAub2Zmc2V0WS09CmYudG9w OyQodGhpcykuY3NzKHtsZWZ0OmIsdG9wOnN9KTskKHRoaXMpLmZpbmQoIi50ZXJtaW5hbCIpLmVh Y2goZnVuY3Rpb24oKT0Ke3RoaXMudGVybWluYWwucmVkcmF3KCl9KX0pO3JldHVybiBnfWZ1bmN0 aW9uIGFkZF9ub2RlKGIsZCxhKXt2YXIgYz0zRHByZWJ1PQppbGRfbm9kZShiLGQsYSk7d29ya2Zs b3cuYWRkX25vZGUoYyk7d29ya2Zsb3cuZml0X2NhbnZhc190b19ub2RlcygpO2NhbnZhc189Cm1h bmFnZXIuZHJhd19vdmVydmlldygpO3dvcmtmbG93LmFjdGl2YXRlX25vZGUoYyk7cmV0dXJuIGN9 ZnVuY3Rpb24gdXBkYXRlXz0Kbm9kZShiKXt2YXIgYT0zRHdvcmtmbG93LmFjdGl2ZV9ub2RlO2lm KGEpe2EudXBkYXRlX2ZpZWxkX2RhdGEoYix0cnVlKX19dmFyPQogZXh0X3RvX3R5cGU9M0RudWxs O3ZhciB0eXBlX3RvX3R5cGU9M0RudWxsO2Z1bmN0aW9uIGlzc3VidHlwZShiLGEpe2I9M0RleHQ9 Cl90b190eXBlW2JdO2E9M0RleHRfdG9fdHlwZVthXTtyZXR1cm4odHlwZV90b190eXBlW2JdKSYm KGEgaW4gdHlwZV90b190eXBlWz0KYl0pfWZ1bmN0aW9uIHBvcHVsYXRlX2RhdGF0eXBlX2luZm8o YSl7ZXh0X3RvX3R5cGU9M0RhLmV4dF90b19jbGFzc19uYW1lO3R5PQpwZV90b190eXBlPTNEYS5j bGFzc190b19jbGFzc2VzfXZhciBOb2RlVmlldz0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0 aWE9CmxpemU6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlPTNEYS5ub2RlO3RoaXMub3V0cHV0X3dpZHRo PTNETWF0aC5tYXgoMTUwLHRoaXMuJD0KZWwud2lkdGgoKSk7dGhpcy50b29sX2JvZHk9M0R0aGlz LiRlbC5maW5kKCIudG9vbEZvcm1Cb2R5Iik7dGhpcy50b29sX2JvZHkuPQpmaW5kKCJkaXYiKS5y ZW1vdmUoKTt0aGlzLm5ld0lucHV0c0RpdigpLmFwcGVuZFRvKHRoaXMudG9vbF9ib2R5KTt0aGlz LnRlcm09CmluYWxWaWV3cz0zRHt9O3RoaXMub3V0cHV0VGVybWlubFZpZXdzPTNEe319LHJlbmRl cjpmdW5jdGlvbigpe3RoaXMucmVuZGVyVD0Kb29sRXJyb3JzKCk7dGhpcy4kZWwuY3NzKCJ3aWR0 aCIsTWF0aC5taW4oMjUwLE1hdGgubWF4KHRoaXMuJGVsLndpZHRoKCksdGhpPQpzLm91dHB1dF93 aWR0aCkpKX0scmVuZGVyVG9vbEVycm9yczpmdW5jdGlvbigpe2lmKHRoaXMubm9kZS50b29sX2Vy cm9ycyl7dGg9CmlzLiRlbC5hZGRDbGFzcygidG9vbC1ub2RlLWVycm9yIil9ZWxzZXt0aGlzLiRl bC5yZW1vdmVDbGFzcygidG9vbC1ub2RlLWVycj0Kb3IiKX19LG5ld0lucHV0c0RpdjpmdW5jdGlv bigpe3JldHVybiAkKCI8ZGl2IGNsYXNzPTNEJ2lucHV0cyc+PC9kaXY+Iil9LHVwPQpkYXRlTWF4 V2lkdGg6ZnVuY3Rpb24oYSl7dGhpcy5vdXRwdXRfd2lkdGg9M0RNYXRoLm1heCh0aGlzLm91dHB1 dF93aWR0aCxhKX09CixhZGRSdWxlOmZ1bmN0aW9uKCl7dGhpcy50b29sX2JvZHkuYXBwZW5kKCQo IjxkaXYgY2xhc3M9M0QncnVsZSc+PC9kaXY+IikpfT0KLGFkZERhdGFJbnB1dDpmdW5jdGlvbihp LGQpe3ZhciBqPTNEdHJ1ZTtpZighZCl7ZD0zRHRoaXMuJCgiLmlucHV0cyIpO2o9M0RmPQphbHNl fXZhciBmPTNEdGhpcy50ZXJtaW5hbFZpZXdzW2kubmFtZV07dmFyIGg9M0QoaS5pbnB1dF90eXBl PTNEPTNEImRhdGFzZXQ9Cl9jb2xsZWN0aW9uIik/SW5wdXRDb2xsZWN0aW9uVGVybWluYWxWaWV3 OklucHV0VGVybWluYWxWaWV3O2lmKGYmJiEoZiBpbnN0YT0KbmNlb2YgaCkpe2YuZWwudGVybWlu YWwuZGVzdHJveSgpO2Y9M0RudWxsfWlmKCFmKXtmPTNEbmV3IGgoe25vZGU6dGhpcy5ub2RlPQos aW5wdXQ6aX0pfWVsc2V7dmFyIGc9M0RmLmVsLnRlcm1pbmFsO2cudXBkYXRlKGkpO2cuZGVzdHJv eUludmFsaWRDb25uZWN0aW89Cm5zKCl9dGhpcy50ZXJtaW5hbFZpZXdzW2kubmFtZV09M0RmO3Zh ciBjPTNEZi5lbDt2YXIgYj0zRG5ldyBEYXRhSW5wdXRWaWV3KD0Ke3Rlcm1pbmFsRWxlbWVudDpj LGlucHV0Omksbm9kZVZpZXc6dGhpcyxza2lwUmVzaXplOmp9KTt2YXIgYT0zRGIuJGVsO2QuYXBw PQplbmQoYS5wcmVwZW5kKGYudGVybWluYWxFbGVtZW50cygpKSk7cmV0dXJuIGZ9LGFkZERhdGFP dXRwdXQ6ZnVuY3Rpb24oYSl7dmE9CnIgZD0zRChhLmNvbGxlY3Rpb25fdHlwZSk/T3V0cHV0Q29s bGVjdGlvblRlcm1pbmFsVmlldzpPdXRwdXRUZXJtaW5hbFZpZXc7dj0KYXIgYz0zRG5ldyBkKHtu b2RlOnRoaXMubm9kZSxvdXRwdXQ6YX0pO3ZhciBiPTNEbmV3IERhdGFPdXRwdXRWaWV3KHtvdXRw dXQ6PQphLHRlcm1pbmFsRWxlbWVudDpjLmVsLG5vZGVWaWV3OnRoaXMsfSk7dGhpcy50b29sX2Jv ZHkuYXBwZW5kKGIuJGVsLmFwcGVuZCg9CmMudGVybWluYWxFbGVtZW50cygpKSl9LHVwZGF0ZURh dGFPdXRwdXQ6ZnVuY3Rpb24oYil7dmFyIGE9M0R0aGlzLm5vZGUub3V0cD0KdXRfdGVybWluYWxz W2IubmFtZV07YS51cGRhdGUoYil9fSk7dmFyIERhdGFJbnB1dFZpZXc9M0RCYWNrYm9uZS5WaWV3 LmV4dGVuPQpkKHtjbGFzc05hbWU6ImZvcm0tcm93IGRhdGFSb3cgaW5wdXQtZGF0YS1yb3ciLGlu aXRpYWxpemU6ZnVuY3Rpb24oYSl7dGhpcy49CmlucHV0PTNEYS5pbnB1dDt0aGlzLm5vZGVWaWV3 PTNEYS5ub2RlVmlldzt0aGlzLnRlcm1pbmFsRWxlbWVudD0zRGEudGVybWluYT0KbEVsZW1lbnQ7 dGhpcy4kZWwuYXR0cigibmFtZSIsdGhpcy5pbnB1dC5uYW1lKS5odG1sKHRoaXMuaW5wdXQubGFi ZWwpO2lmKCFhPQouc2tpcFJlc2l6ZSl7dGhpcy4kZWwuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUi LGxlZnQ6LTEwMDAsdG9wOi0xMDAwLGRpc3BsYXk9Cjoibm9uZSJ9KTskKCJib2R5IikuYXBwZW5k KHRoaXMuZWwpO3RoaXMubm9kZVZpZXcudXBkYXRlTWF4V2lkdGgodGhpcy4kZWwubz0KdXRlcldp ZHRoKCkpO3RoaXMuJGVsLmNzcyh7cG9zaXRpb246IiIsbGVmdDoiIix0b3A6IiIsZGlzcGxheToi In0pO3RoaXMuJGVsPQoucmVtb3ZlKCl9fSx9KTt2YXIgT3V0cHV0Q2FsbG91dFZpZXc9M0RCYWNr Ym9uZS5WaWV3LmV4dGVuZCh7dGFnTmFtZToiZGl2Iiw9CmluaXRpYWxpemU6ZnVuY3Rpb24oYil7 dGhpcy5sYWJlbD0zRGIubGFiZWw7dGhpcy5ub2RlPTNEYi5ub2RlO3RoaXMub3V0cHV0PQo9M0Ri Lm91dHB1dDt2YXIgYT0zRHRoaXM7dGhpcy4kZWwuYXR0cigiY2xhc3MiLCJjYWxsb3V0ICIrdGhp cy5sYWJlbCkuY3NzKHs9CmRpc3BsYXk6Im5vbmUifSkuYXBwZW5kKCQoIjxkaXYgY2xhc3M9M0Qn YnV0dG9ucyc+PC9kaXY+IikuYXBwZW5kKCQoIjxpbWcvPj0KIikuYXR0cigic3JjIixnYWxheHlf Y29uZmlnLnJvb3QrInN0YXRpYy9pbWFnZXMvZnVndWUvYXN0ZXJpc2stc21hbGwtb3V0bGluPQpl LnBuZyIpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoJC5pbkFycmF5KGEub3V0cHV0Lm5hbWUsYS5ub2Rl LndvcmtmbG93X291dHB1dHM9CikhPTNELTEpe2Eubm9kZS53b3JrZmxvd19vdXRwdXRzLnNwbGlj ZSgkLmluQXJyYXkoYS5vdXRwdXQubmFtZSxhLm5vZGUud29yaz0KZmxvd19vdXRwdXRzKSwxKTth LiQoImltZyIpLmF0dHIoInNyYyIsZ2FsYXh5X2NvbmZpZy5yb290KyJzdGF0aWMvaW1hZ2VzL2Z1 PQpndWUvYXN0ZXJpc2stc21hbGwtb3V0bGluZS5wbmciKX1lbHNle2Eubm9kZS53b3JrZmxvd19v dXRwdXRzLnB1c2goYS5vdXRwdXQ9Ci5uYW1lKTthLiQoImltZyIpLmF0dHIoInNyYyIsZ2FsYXh5 X2NvbmZpZy5yb290KyJzdGF0aWMvaW1hZ2VzL2Z1Z3VlL2FzdGVyaT0Kc2stc21hbGwucG5nIil9 d29ya2Zsb3cuaGFzX2NoYW5nZXM9M0R0cnVlO2NhbnZhc19tYW5hZ2VyLmRyYXdfb3ZlcnZpZXco KX0pPQopKS50b29sdGlwKHtkZWxheTo1MDAsdGl0bGU6Ik1hcmsgZGF0YXNldCBhcyBhIHdvcmtm bG93IG91dHB1dC4gQWxsIHVubWFya2U9CmQgZGF0YXNldHMgd2lsbCBiZSBoaWRkZW4uIn0pO3Ro aXMuJGVsLmNzcyh7dG9wOiI1MCUiLG1hcmdpbjoiLThweCAwcHggMHB4ID0KMHB4IixyaWdodDo4 fSk7dGhpcy4kZWwuc2hvdygpO3RoaXMucmVzZXRJbWFnZSgpfSxyZXNldEltYWdlOmZ1bmN0aW9u KCl7aWYoPQokLmluQXJyYXkodGhpcy5vdXRwdXQubmFtZSx0aGlzLm5vZGUud29ya2Zsb3dfb3V0 cHV0cyk9M0Q9M0Q9M0QtMSl7dGhpcy4kKCI9CmltZyIpLmF0dHIoInNyYyIsZ2FsYXh5X2NvbmZp Zy5yb290KyJzdGF0aWMvaW1hZ2VzL2Z1Z3VlL2FzdGVyaXNrLXNtYWxsLW91dD0KbGluZS5wbmci KX1lbHNle3RoaXMuJCgiaW1nIikuYXR0cigic3JjIixnYWxheHlfY29uZmlnLnJvb3QrInN0YXRp Yy9pbWFnZXMvPQpmdWd1ZS9hc3Rlcmlzay1zbWFsbC5wbmciKX19LGhvdmVySW1hZ2U6ZnVuY3Rp b24oKXt0aGlzLiQoImltZyIpLmF0dHIoInNyYyI9CixnYWxheHlfY29uZmlnLnJvb3QrInN0YXRp Yy9pbWFnZXMvZnVndWUvYXN0ZXJpc2stc21hbGwteWVsbG93LnBuZyIpfX0pO3Zhcj0KIERhdGFP dXRwdXRWaWV3PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2NsYXNzTmFtZToiZm9ybS1yb3cgZGF0 YVJvdyIsaW5pdGlhPQpsaXplOmZ1bmN0aW9uKGMpe3RoaXMub3V0cHV0PTNEYy5vdXRwdXQ7dGhp cy50ZXJtaW5hbEVsZW1lbnQ9M0RjLnRlcm1pbmFsRWw9CmVtZW50O3RoaXMubm9kZVZpZXc9M0Rj Lm5vZGVWaWV3O3ZhciBhPTNEdGhpcy5vdXRwdXQ7dmFyIGI9M0RhLm5hbWU7dmFyIGY9Cj0zRHRo aXMubm9kZVZpZXcubm9kZTt2YXIgZD0zRGEuZXh0ZW5zaW9ucy5pbmRleE9mKCJpbnB1dCIpPj0z RDB8fGEuZXh0ZW5zaT0Kb25zLmluZGV4T2YoImlucHV0X2NvbGxlY3Rpb24iKT49M0QwO2lmKCFk KXtiPTNEYisiICgiK2EuZXh0ZW5zaW9ucy5qb2luKCIsPQogIikrIikifXRoaXMuJGVsLmh0bWwo Yik7aWYoZi50eXBlPTNEPTNEInRvb2wiKXt2YXIgZz0zRG5ldyBPdXRwdXRDYWxsb3V0Vmk9CmV3 KHtsYWJlbDpiLG91dHB1dDphLG5vZGU6Zix9KTt0aGlzLiRlbC5hcHBlbmQoZy5lbCk7dGhpcy4k ZWwuaG92ZXIoZnVuY3Rpbz0Kbigpe2cuaG92ZXJJbWFnZSgpfSxmdW5jdGlvbigpe2cucmVzZXRJ bWFnZSgpfSl9dGhpcy4kZWwuY3NzKHtwb3NpdGlvbjoiYWJzPQpvbHV0ZSIsbGVmdDotMTAwMCx0 b3A6LTEwMDAsZGlzcGxheToibm9uZSJ9KTskKCJib2R5IikuYXBwZW5kKHRoaXMuZWwpO3RoaXM9 Ci5ub2RlVmlldy51cGRhdGVNYXhXaWR0aCh0aGlzLiRlbC5vdXRlcldpZHRoKCkrMTcpO3RoaXMu JGVsLmNzcyh7cG9zaXRpb246Ij0KIixsZWZ0OiIiLHRvcDoiIixkaXNwbGF5OiIifSkuZGV0YWNo KCl9fSk7dmFyIFRlcm1pbmFsVmlldz0zREJhY2tib25lLlZpZXcuPQpleHRlbmQoe3NldHVwTWFw cGluZ1ZpZXc6ZnVuY3Rpb24oYil7dmFyIGM9M0RuZXcgdGhpcy50ZXJtaW5hbE1hcHBpbmdDbGFz cyg9Cnt0ZXJtaW5hbDpifSk7dmFyIGE9M0RuZXcgdGhpcy50ZXJtaW5hbE1hcHBpbmdWaWV3Q2xh c3Moe21vZGVsOmN9KTthLnJlbmRlcj0KKCk7Yi50ZXJtaW5hbE1hcHBpbmdWaWV3PTNEYTt0aGlz LnRlcm1pbmFsTWFwcGluZ1ZpZXc9M0RhfSx0ZXJtaW5hbEVsZW1lbnRzPQo6ZnVuY3Rpb24oKXtp Zih0aGlzLnRlcm1pbmFsTWFwcGluZ1ZpZXcpe3JldHVyblt0aGlzLnRlcm1pbmFsTWFwcGluZ1Zp ZXcuZWw9Cix0aGlzLmVsXX1lbHNle3JldHVyblt0aGlzLmVsXX19fSk7dmFyIEJhc2VJbnB1dFRl cm1pbmFsVmlldz0zRFRlcm1pbmFsVmlldz0KLmV4dGVuZCh7Y2xhc3NOYW1lOiJ0ZXJtaW5hbCBp bnB1dC10ZXJtaW5hbCIsaW5pdGlhbGl6ZTpmdW5jdGlvbihjKXt2YXIgZj0KPTNEYy5ub2RlO3Zh ciBhPTNEYy5pbnB1dDt2YXIgYj0zRGEubmFtZTt2YXIgZD0zRHRoaXMudGVybWluYWxGb3JJbnB1 dChhKTtpPQpmKCFkLm11bHRpcGxlKXt0aGlzLnNldHVwTWFwcGluZ1ZpZXcoZCl9dGhpcy5lbC50 ZXJtaW5hbD0zRGQ7ZC5ub2RlPTNEZjtkLm49CmFtZT0zRGI7Zi5pbnB1dF90ZXJtaW5hbHNbYl09 M0RkfSxldmVudHM6e2Ryb3Bpbml0OiJvbkRyb3BJbml0Iixkcm9wc3RhcnQ6Ij0Kb25Ecm9wU3Rh cnQiLGRyb3BlbmQ6Im9uRHJvcEVuZCIsZHJvcDoib25Ecm9wIixob3Zlcjoib25Ib3ZlciIsfSxv bkRyb3BJbml0PQo6ZnVuY3Rpb24oYixjKXt2YXIgYT0zRHRoaXMuZWwudGVybWluYWw7cmV0dXJu ICQoYy5kcmFnKS5oYXNDbGFzcygib3V0cHV0LXQ9CmVybWluYWwiKSYmYS5jYW5BY2NlcHQoYy5k cmFnLnRlcm1pbmFsKX0sb25Ecm9wU3RhcnQ6ZnVuY3Rpb24oYSxiKXtpZihiLnBybz0KeHkudGVy bWluYWwpe2IucHJveHkudGVybWluYWwuY29ubmVjdG9yc1swXS5pbm5lcl9jb2xvcj0zRCIjQkJG RkJCIn19LG9uRHJvPQpwRW5kOmZ1bmN0aW9uKGEsYil7aWYoYi5wcm94eS50ZXJtaW5hbCl7Yi5w cm94eS50ZXJtaW5hbC5jb25uZWN0b3JzWzBdLmlubmU9CnJfY29sb3I9M0QiI0ZGRkZGRiJ9fSxv bkRyb3A6ZnVuY3Rpb24oYixjKXt2YXIgYT0zRHRoaXMuZWwudGVybWluYWw7bmV3IENvbj0KbmVj dG9yKGMuZHJhZy50ZXJtaW5hbCxhKS5yZWRyYXcoKX0sb25Ib3ZlcjpmdW5jdGlvbigpe3ZhciBj PTNEdGhpcy5lbDt2YXIgPQpiPTNEYy50ZXJtaW5hbDtpZihiLmNvbm5lY3RvcnMubGVuZ3RoPjAp e3ZhciBhPTNEJCgiPGRpdiBjbGFzcz0zRCdjYWxsb3V0Jz49CjwvZGl2PiIpLmNzcyh7ZGlzcGxh eToibm9uZSJ9KS5hcHBlbmRUbygiYm9keSIpLmFwcGVuZCgkKCI8ZGl2IGNsYXNzPTNEJ2J1dD0K dG9uJz48L2Rpdj4iKS5hcHBlbmQoJCgiPGRpdi8+IikuYWRkQ2xhc3MoImZhLWljb24tYnV0dG9u IGZhIGZhLXRpbWVzIikuY2xpPQpjayhmdW5jdGlvbigpeyQuZWFjaChiLmNvbm5lY3RvcnMsZnVu Y3Rpb24oZixkKXtpZihkKXtkLmRlc3Ryb3koKX19KTthLnJlbW89CnZlKCl9KSkpLmJpbmQoIm1v dXNlbGVhdmUiLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pO2EuY3NzKHt0b3A6JChjKS5v Zj0KZnNldCgpLnRvcC0yLGxlZnQ6JChjKS5vZmZzZXQoKS5sZWZ0LWEud2lkdGgoKSwicGFkZGlu Zy1yaWdodCI6JChjKS53aWR0aCgpPQp9KS5zaG93KCl9fSx9KTt2YXIgSW5wdXRUZXJtaW5hbFZp ZXc9M0RCYXNlSW5wdXRUZXJtaW5hbFZpZXcuZXh0ZW5kKHt0ZXJtaW49CmFsTWFwcGluZ0NsYXNz OklucHV0VGVybWluYWxNYXBwaW5nLHRlcm1pbmFsTWFwcGluZ1ZpZXdDbGFzczpJbnB1dFRlcm1p bmFsTT0KYXBwaW5nVmlldyx0ZXJtaW5hbEZvcklucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcg SW5wdXRUZXJtaW5hbCh7ZWxlbWVudDp0PQpoaXMuZWwsaW5wdXQ6YX0pfSx9KTt2YXIgSW5wdXRD b2xsZWN0aW9uVGVybWluYWxWaWV3PTNEQmFzZUlucHV0VGVybWluYWxWaWU9CncuZXh0ZW5kKHt0 ZXJtaW5hbE1hcHBpbmdDbGFzczpJbnB1dENvbGxlY3Rpb25UZXJtaW5hbE1hcHBpbmcsdGVybWlu YWxNYXBwaT0KbmdWaWV3Q2xhc3M6SW5wdXRDb2xsZWN0aW9uVGVybWluYWxNYXBwaW5nVmlldyx0 ZXJtaW5hbEZvcklucHV0OmZ1bmN0aW9uKGEpPQp7cmV0dXJuIG5ldyBJbnB1dENvbGxlY3Rpb25U ZXJtaW5hbCh7ZWxlbWVudDp0aGlzLmVsLGlucHV0OmF9KX0sfSk7dmFyIEJhc2U9Ck91dHB1dFRl cm1pbmFsVmlldz0zRFRlcm1pbmFsVmlldy5leHRlbmQoe2NsYXNzTmFtZToidGVybWluYWwgb3V0 cHV0LXRlcm1pbj0KYWwiLGluaXRpYWxpemU6ZnVuY3Rpb24oYyl7dmFyIGY9M0RjLm5vZGU7dmFy IGE9M0RjLm91dHB1dDt2YXIgYj0zRGEubmFtZTt2PQphciBkPTNEdGhpcy50ZXJtaW5hbEZvck91 dHB1dChhKTt0aGlzLnNldHVwTWFwcGluZ1ZpZXcoZCk7dGhpcy5lbC50ZXJtaW5hbD0KPTNEZDtk Lm5vZGU9M0RmO2QubmFtZT0zRGI7Zi5vdXRwdXRfdGVybWluYWxzW2JdPTNEZH0sZXZlbnRzOntk cmFnOiJvbkRyYWciPQosZHJhZ3N0YXJ0OiJvbkRyYWdTdGFydCIsZHJhZ2VuZDoib25EcmFnRW5k Iix9LG9uRHJhZzpmdW5jdGlvbihiLGMpe3ZhciBhPQo9M0RmdW5jdGlvbigpe3ZhciBmPTNEJChj LnByb3h5KS5vZmZzZXRQYXJlbnQoKS5vZmZzZXQoKSxkPTNEYy5vZmZzZXRYLWYubGU9CmZ0LGc9 M0RjLm9mZnNldFktZi50b3A7JChjLnByb3h5KS5jc3Moe2xlZnQ6ZCx0b3A6Z30pO2MucHJveHku dGVybWluYWwucmVkcj0KYXcoKTtjYW52YXNfbWFuYWdlci51cGRhdGVfdmlld3BvcnRfb3Zlcmxh eSgpfTthKCk7JCgiI2NhbnZhcy1jb250YWluZXIiKS5nPQpldCgwKS5zY3JvbGxfcGFuZWwudGVz dChiLGEpfSxvbkRyYWdTdGFydDpmdW5jdGlvbihiLGYpeyQoZi5hdmFpbGFibGUpLmFkZEM9Cmxh c3MoImlucHV0LXRlcm1pbmFsLWFjdGl2ZSIpO3dvcmtmbG93LmNoZWNrX2NoYW5nZXNfaW5fYWN0 aXZlX2Zvcm0oKTt2YXIgYT0KPTNEJCgnPGRpdiBjbGFzcz0zRCJkcmFnLXRlcm1pbmFsIiBzdHls ZT0zRCJwb3NpdGlvbjogYWJzb2x1dGU7Ij48L2Rpdj4nKS5hPQpwcGVuZFRvKCIjY2FudmFzLWNv bnRhaW5lciIpLmdldCgwKTthLnRlcm1pbmFsPTNEbmV3IE91dHB1dFRlcm1pbmFsKHtlbGVtZW49 CnQ6YX0pO3ZhciBnPTNEbmV3IENvbm5lY3RvcigpO2cuZHJhZ2dpbmc9M0R0cnVlO2cuY29ubmVj dCh0aGlzLmVsLnRlcm1pbmFsLD0KYS50ZXJtaW5hbCk7cmV0dXJuIGF9LG9uRHJhZ0VuZDpmdW5j dGlvbihiLGMpe3ZhciBhPTNEYy5wcm94eS50ZXJtaW5hbC5jb25uPQplY3RvcnNbMF07aWYoYSl7 YS5kZXN0cm95KCl9JChjLnByb3h5KS5yZW1vdmUoKTskKGMuYXZhaWxhYmxlKS5yZW1vdmVDbGFz cyg9CiJpbnB1dC10ZXJtaW5hbC1hY3RpdmUiKTskKCIjY2FudmFzLWNvbnRhaW5lciIpLmdldCgw KS5zY3JvbGxfcGFuZWwuc3RvcCgpfT0KfSk7dmFyIE91dHB1dFRlcm1pbmFsVmlldz0zREJhc2VP dXRwdXRUZXJtaW5hbFZpZXcuZXh0ZW5kKHt0ZXJtaW5hbE1hcHBpbmdDPQpsYXNzOk91dHB1dFRl cm1pbmFsTWFwcGluZyx0ZXJtaW5hbE1hcHBpbmdWaWV3Q2xhc3M6T3V0cHV0VGVybWluYWxNYXBw aW5nVmk9CmV3LHRlcm1pbmFsRm9yT3V0cHV0OmZ1bmN0aW9uKGEpe3ZhciBjPTNEYS5leHRlbnNp b25zO3ZhciBiPTNEbmV3IE91dHB1dFRlcj0KbWluYWwoe2VsZW1lbnQ6dGhpcy5lbCxkYXRhdHlw ZXM6Y30pO3JldHVybiBifSx9KTt2YXIgT3V0cHV0Q29sbGVjdGlvblRlcm1pPQpuYWxWaWV3PTNE QmFzZU91dHB1dFRlcm1pbmFsVmlldy5leHRlbmQoe3Rlcm1pbmFsTWFwcGluZ0NsYXNzOk91dHB1 dENvbGxlY3Q9CmlvblRlcm1pbmFsTWFwcGluZyx0ZXJtaW5hbE1hcHBpbmdWaWV3Q2xhc3M6T3V0 cHV0Q29sbGVjdGlvblRlcm1pbmFsTWFwcGluZz0KVmlldyx0ZXJtaW5hbEZvck91dHB1dDpmdW5j dGlvbihhKXt2YXIgYz0zRGEuY29sbGVjdGlvbl90eXBlO3ZhciBiPTNEbmV3IE91PQp0cHV0Q29s bGVjdGlvblRlcm1pbmFsKHtlbGVtZW50OnRoaXMuZWwsY29sbGVjdGlvbl90eXBlOmMsZGF0YXR5 cGVzOmEuZXh0ZW49CnNpb25zfSk7cmV0dXJuIGJ9LH0pO2Z1bmN0aW9uIFNjcm9sbFBhbmVsKGEp e3RoaXMucGFuZWw9M0RhfSQuZXh0ZW5kKFNjcm9sbD0KUGFuZWwucHJvdG90eXBlLHt0ZXN0OmZ1 bmN0aW9uKHYsZCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dmFyIGs9M0R2LnBhPQpnZVgs aj0zRHYucGFnZVksbD0zRCQodGhpcy5wYW5lbCksYz0zRGwucG9zaXRpb24oKSxiPTNEbC53aWR0 aCgpLGk9M0RsLmhlaWc9Cmh0KCksdz0zRGwucGFyZW50KCkscz0zRHcud2lkdGgoKSxhPTNEdy5o ZWlnaHQoKSxyPTNEdy5vZmZzZXQoKSxwPTNEci5sZWZ0LD0KbT0zRHIudG9wLEE9M0RwK3cud2lk dGgoKSx1PTNEbSt3LmhlaWdodCgpLEI9M0QtKGItKHMvMikpLHo9M0QtKGktKGEvMikpLGc9Cj0z RChzLzIpLGY9M0QoYS8yKSxoPTNEZmFsc2UscT0zRDUsbz0zRDIzO2lmKGstcTxwKXtpZihjLmxl ZnQ8Zyl7dmFyIG49M0RNYT0KdGgubWluKG8sZy1jLmxlZnQpO2wuY3NzKCJsZWZ0IixjLmxlZnQr bik7aD0zRHRydWV9fWVsc2V7aWYoaytxPkEpe2lmKGMubGVmPQp0PkIpe3ZhciBuPTNETWF0aC5t aW4obyxjLmxlZnQtQik7bC5jc3MoImxlZnQiLGMubGVmdC1uKTtoPTNEdHJ1ZX19ZWxzZXtpZig9 CmotcTxtKXtpZihjLnRvcDxmKXt2YXIgbj0zRE1hdGgubWluKG8sZi1jLnRvcCk7bC5jc3MoInRv cCIsYy50b3Arbik7aD0zRHRydT0KZX19ZWxzZXtpZihqK3E+dSl7aWYoYy50b3A+eil7dmFyIG49 M0RNYXRoLm1pbihvLGMudG9wLUIpO2wuY3NzKCJ0b3AiLChjLnRvPQpwLW4pKyJweCIpO2g9M0R0 cnVlfX19fX1pZihoKXtkKCk7dmFyIGw9M0R0aGlzO3RoaXMudGltZW91dD0zRHNldFRpbWVvdXQo ZnU9Cm5jdGlvbigpe2wudGVzdCh2LGQpfSw1MCl9fSxzdG9wOmZ1bmN0aW9uKGIsYSl7Y2xlYXJU aW1lb3V0KHRoaXMudGltZW91dCl9fT0KKTtmdW5jdGlvbiBDYW52YXNNYW5hZ2VyKGIsYSl7dGhp cy5jdj0zRGI7dGhpcy5jYz0zRHRoaXMuY3YuZmluZCgiI2NhbnZhcy1jPQpvbnRhaW5lciIpO3Ro aXMub2M9M0RhLmZpbmQoIiNvdmVydmlldy1jYW52YXMiKTt0aGlzLm92PTNEYS5maW5kKCIjb3Zl cnZpZXc9Ci12aWV3cG9ydCIpO3RoaXMuaW5pdF9kcmFnKCl9JC5leHRlbmQoQ2FudmFzTWFuYWdl ci5wcm90b3R5cGUse2luaXRfZHJhZzpmdT0KbmN0aW9uKCl7dmFyIGI9M0R0aGlzO3ZhciBhPTNE ZnVuY3Rpb24oZixnKXtmPTNETWF0aC5taW4oZixiLmN2LndpZHRoKCkvMik7PQpmPTNETWF0aC5t YXgoZiwtYi5jYy53aWR0aCgpK2IuY3Yud2lkdGgoKS8yKTtnPTNETWF0aC5taW4oZyxiLmN2Lmhl aWdodCgpLzI9Cik7Zz0zRE1hdGgubWF4KGcsLWIuY2MuaGVpZ2h0KCkrYi5jdi5oZWlnaHQoKS8y KTtiLmNjLmNzcyh7bGVmdDpmLHRvcDpnfSk7Yj0KLnVwZGF0ZV92aWV3cG9ydF9vdmVybGF5KCl9 O3RoaXMuY2MuZWFjaChmdW5jdGlvbigpe3RoaXMuc2Nyb2xsX3BhbmVsPTNEbmV3PQogU2Nyb2xs UGFuZWwodGhpcyl9KTt2YXIgZCxjO3RoaXMuY3YuYmluZCgiZHJhZ3N0YXJ0IixmdW5jdGlvbigp e3ZhciBnPTNEJCg9CnRoaXMpLm9mZnNldCgpO3ZhciBmPTNEYi5jYy5wb3NpdGlvbigpO2M9M0Rm LnRvcC1nLnRvcDtkPTNEZi5sZWZ0LWcubGVmdH0pLj0KYmluZCgiZHJhZyIsZnVuY3Rpb24oZixn KXthKGcub2Zmc2V0WCtkLGcub2Zmc2V0WStjKX0pLmJpbmQoImRyYWdlbmQiLGZ1bmN0PQppb24o KXt3b3JrZmxvdy5maXRfY2FudmFzX3RvX25vZGVzKCk7Yi5kcmF3X292ZXJ2aWV3KCl9KTt0aGlz Lm92LmJpbmQoImRyYWc9CiIsZnVuY3Rpb24oayxsKXt2YXIgaD0zRGIuY2Mud2lkdGgoKSxuPTNE Yi5jYy5oZWlnaHQoKSxtPTNEYi5vYy53aWR0aCgpLGo9Cj0zRGIub2MuaGVpZ2h0KCksZj0zRCQo dGhpcykub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksaT0zRGwub2Zmc2V0WC1mLmxlZnQsZz0KPTNE bC5vZmZzZXRZLWYudG9wO2EoLShpL20qaCksLShnL2oqbikpfSkuYmluZCgiZHJhZ2VuZCIsZnVu Y3Rpb24oKXt3b3JrZmxvPQp3LmZpdF9jYW52YXNfdG9fbm9kZXMoKTtiLmRyYXdfb3ZlcnZpZXco KX0pOyQoIiNvdmVydmlldy1ib3JkZXIiKS5iaW5kKCJkcmE9CmciLGZ1bmN0aW9uKGcsaSl7dmFy IGo9M0QkKHRoaXMpLm9mZnNldFBhcmVudCgpO3ZhciBoPTNEai5vZmZzZXQoKTt2YXIgZj0zRD0K TWF0aC5tYXgoai53aWR0aCgpLShpLm9mZnNldFgtaC5sZWZ0KSxqLmhlaWdodCgpLShpLm9mZnNl dFktaC50b3ApKTskKHRoaXMpPQouY3NzKHt3aWR0aDpmLGhlaWdodDpmfSk7Yi5kcmF3X292ZXJ2 aWV3KCl9KTskKCIjb3ZlcnZpZXctYm9yZGVyIGRpdiIpLmJpbmQ9CigiZHJhZyIsZnVuY3Rpb24o KXt9KX0sdXBkYXRlX3ZpZXdwb3J0X292ZXJsYXk6ZnVuY3Rpb24oKXt2YXIgYj0zRHRoaXMuY2Ms Zj0KPTNEdGhpcy5jdixhPTNEdGhpcy5vYyxjPTNEdGhpcy5vdixkPTNEYi53aWR0aCgpLGo9M0Ri LmhlaWdodCgpLGk9M0RhLndpZHRoPQooKSxnPTNEYS5oZWlnaHQoKSxoPTNEYi5wb3NpdGlvbigp O2MuY3NzKHtsZWZ0Oi0oaC5sZWZ0L2QqaSksdG9wOi0oaC50b3Avaio9CmcpLHdpZHRoOihmLndp ZHRoKCkvZCppKS0yLGhlaWdodDooZi5oZWlnaHQoKS9qKmcpLTJ9KX0sZHJhd19vdmVydmlldzpm dW5jdD0KaW9uKCl7dmFyIGo9M0QkKCIjb3ZlcnZpZXctY2FudmFzIiksbT0zRGoucGFyZW50KCku cGFyZW50KCkud2lkdGgoKSxpPTNEai5nPQpldCgwKS5nZXRDb250ZXh0KCIyZCIpLGQ9M0QkKCIj Y2FudmFzLWNvbnRhaW5lciIpLndpZHRoKCksbD0zRCQoIiNjYW52YXMtY289Cm50YWluZXIiKS5o ZWlnaHQoKTt2YXIgZyxhLGssZjt2YXIgaD0zRHRoaXMuY3Yud2lkdGgoKTt2YXIgYj0zRHRoaXMu Y3YuaGVpZz0KaHQoKTtpZihkPGgmJmw8Yil7az0zRGQvaCptO2Y9M0QobS1rKS8yO2c9M0RsL2Iq bTthPTNEKG0tZykvMn1lbHNle2lmKGQ8bCl7PQphPTNEMDtnPTNEbTtrPTNETWF0aC5jZWlsKGcq ZC9sKTtmPTNEKG0taykvMn1lbHNle2s9M0RtO2Y9M0QwO2c9M0RNYXRoLmNlaWw9CihrKmwvZCk7 YT0zRChtLWcpLzJ9fWoucGFyZW50KCkuY3NzKHtsZWZ0OmYsdG9wOmEsd2lkdGg6ayxoZWlnaHQ6 Z30pO2ouYXR0cj0KKCJ3aWR0aCIsayk7ai5hdHRyKCJoZWlnaHQiLGcpOyQuZWFjaCh3b3JrZmxv dy5ub2RlcyxmdW5jdGlvbih0LHEpe2kuZmlsbFN0PQp5bGU9M0QiI0QyQzA5OSI7aS5zdHJva2VT dHlsZT0zRCIjRDhCMzY1IjtpLmxpbmVXaWR0aD0zRDE7dmFyIHM9M0QkKHEuZWxlbWU9Cm50KSxu PTNEcy5wb3NpdGlvbigpLGM9M0RuLmxlZnQvZCprLHI9M0RuLnRvcC9sKmcsbz0zRHMud2lkdGgo KS9kKmsscD0zRHMuaD0KZWlnaHQoKS9sKmc7aWYocS50b29sX2Vycm9ycyl7aS5maWxsU3R5bGU9 M0QiI0ZGQ0NDQyI7aS5zdHJva2VTdHlsZT0zRCIjQUE2PQo2NjYifWVsc2V7aWYocS53b3JrZmxv d19vdXRwdXRzIT0zRHVuZGVmaW5lZCYmcS53b3JrZmxvd19vdXRwdXRzLmxlbmd0aD4wKXs9Cmku ZmlsbFN0eWxlPTNEIiNFOEE5MkQiO2kuc3Ryb2tlU3R5bGU9M0QiI0U4QTkyRCJ9fWkuZmlsbFJl Y3QoYyxyLG8scCk7aS5zdD0Kcm9rZVJlY3QoYyxyLG8scCl9KTt0aGlzLnVwZGF0ZV92aWV3cG9y dF9vdmVybGF5KCl9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZnVuY3Rpb24gQ29s bGVjdGlvblR5cGVEZXNjcmlwdGlvbihhKXt0aGlzLmNvbGxlY3Rpb25UeXBlPTNEYTt0aGlzLmlz Q29sbGU9CmN0aW9uPTNEdHJ1ZTt0aGlzLnJhbms9M0RhLnNwbGl0KCI6IikubGVuZ3RofSQuZXh0 ZW5kKENvbGxlY3Rpb25UeXBlRGVzY3JpcD0KdGlvbi5wcm90b3R5cGUse2FwcGVuZDpmdW5jdGlv bihhKXtpZihhPTNEPTNEPTNETlVMTF9DT0xMRUNUSU9OX1RZUEVfREVTQ1JJPQpQVElPTil7cmV0 dXJuIHRoaXN9aWYoYT0zRD0zRD0zREFOWV9DT0xMRUNUSU9OX1RZUEVfREVTQ1JJUFRJT04pe3Jl dHVybiBvdGg9CmVyQ29sbGVjdGlvblR5cGV9cmV0dXJuIG5ldyBDb2xsZWN0aW9uVHlwZURlc2Ny aXB0aW9uKHRoaXMuY29sbGVjdGlvblR5cGUrIj0KOiIrYS5jb2xsZWN0aW9uVHlwZSl9LGNhbk1h dGNoOmZ1bmN0aW9uKGEpe2lmKGE9M0Q9M0Q9M0ROVUxMX0NPTExFQ1RJT05fVFlQPQpFX0RFU0NS SVBUSU9OKXtyZXR1cm4gZmFsc2V9aWYoYT0zRD0zRD0zREFOWV9DT0xMRUNUSU9OX1RZUEVfREVT Q1JJUFRJT04pe3I9CmV0dXJuIHRydWV9cmV0dXJuIGEuY29sbGVjdGlvblR5cGU9M0Q9M0R0aGlz LmNvbGxlY3Rpb25UeXBlfSxjYW5NYXBPdmVyOmZ1bj0KY3Rpb24oYil7aWYoYj0zRD0zRD0zRE5V TExfQ09MTEVDVElPTl9UWVBFX0RFU0NSSVBUSU9OKXtyZXR1cm4gZmFsc2V9aWYoYj0KPTNEPTNE PTNEQU5ZX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVElPTil7cmV0dXJuIGZhbHNlfWlmKHRoaXMu cmFuazw9M0RiLnJhPQpuayl7cmV0dXJuIGZhbHNlfXZhciBhPTNEYi5jb2xsZWN0aW9uVHlwZTty ZXR1cm4gdGhpcy5fZW5kc1dpdGgodGhpcy5jb2xsZWM9CnRpb25UeXBlLGEpfSxlZmZlY3RpdmVN YXBPdmVyOmZ1bmN0aW9uKGEpe3ZhciBjPTNEYS5jb2xsZWN0aW9uVHlwZTt2YXIgYj0zRD0KdGhp cy5jb2xsZWN0aW9uVHlwZS5zdWJzdHJpbmcoMCx0aGlzLmNvbGxlY3Rpb25UeXBlLmxlbmd0aC1j Lmxlbmd0aC0xKTtyZXR1PQpybiBuZXcgQ29sbGVjdGlvblR5cGVEZXNjcmlwdGlvbihiKX0sZXF1 YWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29sbGVjdGlvblQ9CnlwZT0zRD0zRHRoaXMuY29sbGVj dGlvblR5cGV9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvbGxlY3Rpb25UeXBlWyIrdD0K aGlzLmNvbGxlY3Rpb25UeXBlKyJdIn0sX2VuZHNXaXRoOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGIu aW5kZXhPZihhLGIubGVuZ3RoPQotYS5sZW5ndGgpIT0zRD0zRC0xfX0pO05VTExfQ09MTEVDVElP Tl9UWVBFX0RFU0NSSVBUSU9OPTNEe2lzQ29sbGVjdGlvbjpmYWw9CnNlLGNhbk1hdGNoOmZ1bmN0 aW9uKGEpe3JldHVybiBmYWxzZX0sY2FuTWFwT3ZlcjpmdW5jdGlvbihhKXtyZXR1cm4gZmFsc2V9 LD0KdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbENvbGxlY3Rpb25UeXBlW10ifSxhcHBl bmQ6ZnVuY3Rpb24oYSl7cmV0dXJuPQogYX0sZXF1YWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9M0Q9 M0Q9M0R0aGlzfX07QU5ZX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVEk9Ck9OPTNEe2lzQ29sbGVj dGlvbjp0cnVlLGNhbk1hdGNoOmZ1bmN0aW9uKGEpe3JldHVybiBOVUxMX0NPTExFQ1RJT05fVFlQ RV9ERT0KU0NSSVBUSU9OIT0zRD0zRGF9LGNhbk1hcE92ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGZh bHNlfSx0b1N0cmluZzpmdW5jdGlvbigpPQp7cmV0dXJuIkFueUNvbGxlY3Rpb25UeXBlW10ifSxh cHBlbmQ6ZnVuY3Rpb24oYSl7dGhyb3ciQ2Fubm90IGFwcGVuZCB0byBBTlk9Cl9DT0xMRUNUSU9O X1RZUEVfREVTQ1JJUFRJT04ifSxlcXVhbDpmdW5jdGlvbihhKXtyZXR1cm4gYT0zRD0zRD0zRHRo aXN9fTt2YT0KciBUZXJtaW5hbE1hcHBpbmc9M0RCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oYSl7dGhpcy5tYXBPPQp2ZXI9M0RhLm1hcE92ZXJ8fE5VTExfQ09MTEVD VElPTl9UWVBFX0RFU0NSSVBUSU9OO3RoaXMudGVybWluYWw9M0RhLnRlcm1pbmE9Cmw7dGhpcy50 ZXJtaW5hbC50ZXJtaW5hbE1hcHBpbmc9M0R0aGlzfSxkaXNhYmxlTWFwT3ZlcjpmdW5jdGlvbigp e3RoaXMuc2V0TT0KYXBPdmVyKE5VTExfQ09MTEVDVElPTl9UWVBFX0RFU0NSSVBUSU9OKX0sc2V0 TWFwT3ZlcjpmdW5jdGlvbihhKXt0aGlzLm1hcE92PQplcj0zRGE7dGhpcy50cmlnZ2VyKCJjaGFu Z2UiKX19KTt2YXIgVGVybWluYWxNYXBwaW5nVmlldz0zREJhY2tib25lLlZpZXcuZXg9CnRlbmQo e3RhZ05hbWU6ImRpdiIsY2xhc3NOYW1lOiJmYS1pY29uLWJ1dHRvbiBmYSBmYS1mb2xkZXItbyIs aW5pdGlhbGl6ZTpmdT0KbmN0aW9uKGIpe3ZhciBhPTNEIlJ1biB0b29sIGluIHBhcmFsbGVsIG92 ZXIgY29sbGVjdGlvbiI7dGhpcy4kZWwudG9vbHRpcCh7PQpkZWxheTo1MDAsdGl0bGU6YX0pO3Ro aXMubW9kZWwuYmluZCgiY2hhbmdlIixfLmJpbmQodGhpcy5yZW5kZXIsdGhpcykpfSxyZW49CmRl cjpmdW5jdGlvbigpe2lmKHRoaXMubW9kZWwubWFwT3Zlci5pc0NvbGxlY3Rpb24pe3RoaXMuJGVs LnNob3coKX1lbHNle3RoaT0Kcy4kZWwuaGlkZSgpfX0sfSk7dmFyIElucHV0VGVybWluYWxNYXBw aW5nVmlldz0zRFRlcm1pbmFsTWFwcGluZ1ZpZXcuZXh0ZW5kPQooe2V2ZW50czp7Y2xpY2s6Im9u Q2xpY2siLG1vdXNlZW50ZXI6Im9uTW91c2VFbnRlciIsbW91c2VsZWF2ZToib25Nb3VzZUxlYXY9 CmUiLH0sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGIpe3ZhciBhPTNEdGhpcy5tb2RlbDtpZighYS50 ZXJtaW5hbC5jb25uZWN0ZWQoKT0KJiZhLm1hcE92ZXIuaXNDb2xsZWN0aW9uKXt0aGlzLiRlbC5j c3MoImNvbG9yIiwicmVkIil9fSxvbk1vdXNlTGVhdmU6ZnVuY3RpPQpvbihhKXt0aGlzLiRlbC5j c3MoImNvbG9yIiwiYmxhY2siKX0sb25DbGljazpmdW5jdGlvbihiKXt2YXIgYT0zRHRoaXMubW9k ZWw9CjtpZighYS50ZXJtaW5hbC5jb25uZWN0ZWQoKSYmYS5tYXBPdmVyLmlzQ29sbGVjdGlvbil7 YS50ZXJtaW5hbC5yZXNldE1hcHBpbj0KZygpfX0sfSk7dmFyIElucHV0VGVybWluYWxNYXBwaW5n PTNEVGVybWluYWxNYXBwaW5nO3ZhciBJbnB1dENvbGxlY3Rpb25UZXJtPQppbmFsTWFwcGluZz0z RFRlcm1pbmFsTWFwcGluZzt2YXIgT3V0cHV0VGVybWluYWxNYXBwaW5nPTNEVGVybWluYWxNYXBw aW5nO3Y9CmFyIE91dHB1dFRlcm1pbmFsTWFwcGluZ1ZpZXc9M0RUZXJtaW5hbE1hcHBpbmdWaWV3 O3ZhciBJbnB1dENvbGxlY3Rpb25UZXJtaT0KbmFsTWFwcGluZ1ZpZXc9M0RJbnB1dFRlcm1pbmFs TWFwcGluZ1ZpZXc7dmFyIE91dHB1dENvbGxlY3Rpb25UZXJtaW5hbE1hcHBpPQpuZz0zRFRlcm1p bmFsTWFwcGluZzt2YXIgT3V0cHV0Q29sbGVjdGlvblRlcm1pbmFsTWFwcGluZ1ZpZXc9M0RUZXJt aW5hbE1hcHA9CmluZ1ZpZXc7dmFyIFRlcm1pbmFsPTNEQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtp bml0aWFsaXplOmZ1bmN0aW9uKGEpe3RoaXMuZT0KbGVtZW50PTNEYS5lbGVtZW50O3RoaXMuY29u bmVjdG9ycz0zRFtdfSxjb25uZWN0OmZ1bmN0aW9uKGEpe3RoaXMuY29ubmVjdG9yPQpzLnB1c2go YSk7aWYodGhpcy5ub2RlKXt0aGlzLm5vZGUubWFya0NoYW5nZWQoKX19LGRpc2Nvbm5lY3Q6ZnVu Y3Rpb24oYSl7dGg9CmlzLmNvbm5lY3RvcnMuc3BsaWNlKCQuaW5BcnJheShhLHRoaXMuY29ubmVj dG9ycyksMSk7aWYodGhpcy5ub2RlKXt0aGlzLm5vZD0KZS5tYXJrQ2hhbmdlZCgpO3RoaXMucmVz ZXRNYXBwaW5nSWZOZWVkZWQoKX19LHJlZHJhdzpmdW5jdGlvbigpeyQuZWFjaCh0aGlzPQouY29u bmVjdG9ycyxmdW5jdGlvbihhLGIpe2IucmVkcmF3KCl9KX0sZGVzdHJveTpmdW5jdGlvbigpeyQu ZWFjaCh0aGlzLmNvbm49CmVjdG9ycy5zbGljZSgpLGZ1bmN0aW9uKGEsYil7Yi5kZXN0cm95KCl9 KX0sZGVzdHJveUludmFsaWRDb25uZWN0aW9uczpmdW5jdD0KaW9uKCl7Xy5lYWNoKHRoaXMuY29u bmVjdG9ycyxmdW5jdGlvbihhKXthLmRlc3Ryb3lJZkludmFsaWQoKX0pfSxzZXRNYXBPdmVyPQo6 ZnVuY3Rpb24oYSl7aWYodGhpcy5tdWx0aXBsZSl7cmV0dXJufWlmKCF0aGlzLm1hcE92ZXIoKS5l cXVhbChhKSl7dGhpcy50ZXI9Cm1pbmFsTWFwcGluZy5zZXRNYXBPdmVyKGEpO18uZWFjaCh0aGlz Lm5vZGUub3V0cHV0X3Rlcm1pbmFscyxmdW5jdGlvbihiKXtiLj0Kc2V0TWFwT3ZlcihhKX0pfX0s bWFwT3ZlcjpmdW5jdGlvbigpe2lmKCF0aGlzLnRlcm1pbmFsTWFwcGluZyl7cmV0dXJuIE5VTExf PQpDT0xMRUNUSU9OX1RZUEVfREVTQ1JJUFRJT059ZWxzZXtyZXR1cm4gdGhpcy50ZXJtaW5hbE1h cHBpbmcubWFwT3Zlcn19LGlzTWE9CnBwZWRPdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVy bWluYWxNYXBwaW5nJiZ0aGlzLnRlcm1pbmFsTWFwcGluZy5tYXBPdj0KZXIuaXNDb2xsZWN0aW9u fSxyZXNldE1hcHBpbmc6ZnVuY3Rpb24oKXt0aGlzLnRlcm1pbmFsTWFwcGluZy5kaXNhYmxlTWFw T3ZlPQpyKCl9LHJlc2V0TWFwcGluZ0lmTmVlZGVkOmZ1bmN0aW9uKCl7fSx9KTt2YXIgT3V0cHV0 VGVybWluYWw9M0RUZXJtaW5hbC5leHQ9CmVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihhKXtUZXJt aW5hbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsYSk7dGhpcz0KLmRhdGF0eXBlcz0z RGEuZGF0YXR5cGVzfSxyZXNldE1hcHBpbmdJZk5lZWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLm5v ZGUuaGFzPQpDb25uZWN0ZWRPdXRwdXRUZXJtaW5hbHMoKSYmIXRoaXMubm9kZS5oYXNDb25uZWN0 ZWRNYXBwZWRJbnB1dFRlcm1pbmFscygpKXs9Cl8uZWFjaCh0aGlzLm5vZGUubWFwcGVkSW5wdXRU ZXJtaW5hbHMoKSxmdW5jdGlvbihiKXtiLnJlc2V0TWFwcGluZ0lmTmVlZGVkKD0KKX0pfXZhciBh PTNEIXRoaXMubm9kZS5oYXNNYXBwZWRPdmVySW5wdXRUZXJtaW5hbHMoKTtpZihhKXt0aGlzLnJl c2V0TWFwcGluPQpnKCl9fSxyZXNldE1hcHBpbmc6ZnVuY3Rpb24oKXt0aGlzLnRlcm1pbmFsTWFw cGluZy5kaXNhYmxlTWFwT3ZlcigpO18uZWFjaCg9CnRoaXMuY29ubmVjdG9ycyxmdW5jdGlvbihh KXt2YXIgYj0zRGEuaGFuZGxlMjtpZihiKXtiLnJlc2V0TWFwcGluZ0lmTmVlZGVkKD0KKTthLmRl c3Ryb3lJZkludmFsaWQoKX19KX19KTt2YXIgQmFzZUlucHV0VGVybWluYWw9M0RUZXJtaW5hbC5l eHRlbmQoe2luaXRpPQphbGl6ZTpmdW5jdGlvbihhKXtUZXJtaW5hbC5wcm90b3R5cGUuaW5pdGlh bGl6ZS5jYWxsKHRoaXMsYSk7dGhpcy51cGRhdGUoYS49CmlucHV0KX0sY2FuQWNjZXB0OmZ1bmN0 aW9uKGEpe2lmKHRoaXMuX2lucHV0RmlsbGVkKCkpe3JldHVybiBmYWxzZX1lbHNle3JldD0KdXJu IHRoaXMuYXR0YWNoYWJsZShhKX19LHJlc2V0TWFwcGluZ0lmTmVlZGVkOmZ1bmN0aW9uKCl7dmFy IGI9M0R0aGlzLm1hcE92PQplcigpO2lmKCFiLmlzQ29sbGVjdGlvbil7cmV0dXJufXZhciBhPTNE dGhpcy5ub2RlLmhhc0Nvbm5lY3RlZE1hcHBlZElucHV0VGU9CnJtaW5hbHMoKXx8KCF0aGlzLm5v ZGUuaGFzQ29ubmVjdGVkT3V0cHV0VGVybWluYWxzKCkpO2lmKGEpe3RoaXMucmVzZXRNYXBwaT0K bmcoKX19LHJlc2V0TWFwcGluZzpmdW5jdGlvbigpe3RoaXMudGVybWluYWxNYXBwaW5nLmRpc2Fi bGVNYXBPdmVyKCk7aWYoIXRoPQppcy5ub2RlLmhhc01hcHBlZE92ZXJJbnB1dFRlcm1pbmFscygp KXtfLmVhY2godGhpcy5ub2RlLm91dHB1dF90ZXJtaW5hbHMsZnU9Cm5jdGlvbihhKXthLnJlc2V0 TWFwcGluZygpfSl9fSxjb25uZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25uZWN0b3Jz Lj0KbGVuZ3RoIT0zRD0zRDB9LF9pbnB1dEZpbGxlZDpmdW5jdGlvbigpe3ZhciBhO2lmKCF0aGlz LmNvbm5lY3RlZCgpKXthPTNEZmFsPQpzZX1lbHNle2lmKHRoaXMubXVsdGlwbGUpe2lmKHRoaXMu X2NvbGxlY3Rpb25BdHRhY2hlZCgpKXtpbnB1dHNGaWxsZWQ9M0R0cnU9CmV9ZWxzZXthPTNEZmFs c2V9fWVsc2V7YT0zRHRydWV9fXJldHVybiBhfSxfY29sbGVjdGlvbkF0dGFjaGVkOmZ1bmN0aW9u KCl7aT0KZighdGhpcy5jb25uZWN0ZWQoKSl7cmV0dXJuIGZhbHNlfWVsc2V7dmFyIGE9M0R0aGlz LmNvbm5lY3RvcnNbMF0uaGFuZGxlMTtpPQpmKCFhKXtyZXR1cm4gZmFsc2V9ZWxzZXtpZihhLmlz RGF0YUNvbGxlY3Rpb25JbnB1dHx8YS5pc01hcHBlZE92ZXIoKXx8YS5kYXQ9CmF0eXBlcy5pbmRl eE9mKCJpbnB1dF9jb2xsZWN0aW9uIik+MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9 fX19LF9tYT0KcHBpbmdDb25zdHJhaW50czpmdW5jdGlvbigpe2lmKCF0aGlzLm5vZGUpe3JldHVy bltdfXZhciBiPTNEdGhpcy5tYXBPdmVyKCk7PQppZihiLmlzQ29sbGVjdGlvbil7cmV0dXJuW2Jd fXZhciBhPTNEW107aWYoIXRoaXMubm9kZS5oYXNDb25uZWN0ZWRPdXRwdXRUZXI9Cm1pbmFscygp KXtfLmVhY2godGhpcy5ub2RlLmNvbm5lY3RlZE1hcHBlZElucHV0VGVybWluYWxzKCksZnVuY3Rp b24oYyl7YS5wdT0Kc2goYy5tYXBPdmVyKCkpfSl9ZWxzZXthLnB1c2goXy5maXJzdChfLnZhbHVl cyh0aGlzLm5vZGUub3V0cHV0X3Rlcm1pbmFscykpPQoubWFwT3ZlcigpKX1yZXR1cm4gYX0sX3By b2R1Y2VzQWNjZXB0YWJsZURhdGF0eXBlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYyBpbiA9CnRoaXMu ZGF0YXR5cGVzKXt2YXIgZj0zRG5ldyBBcnJheSgpO2Y9M0RmLmNvbmNhdChhLmRhdGF0eXBlcyk7 aWYoYS5ub2RlLnBvcz0KdF9qb2JfYWN0aW9ucyl7Zm9yKHZhciBkIGluIGEubm9kZS5wb3N0X2pv Yl9hY3Rpb25zKXt2YXIgZz0zRGEubm9kZS5wb3N0X2pvPQpiX2FjdGlvbnNbZF07aWYoZy5hY3Rp b25fdHlwZT0zRD0zRCJDaGFuZ2VEYXRhdHlwZUFjdGlvbiImJihnLm91dHB1dF9uYW1lPQo9M0Q9 M0QiInx8Zy5vdXRwdXRfbmFtZT0zRD0zRGEubmFtZSkmJmcuYWN0aW9uX2FyZ3VtZW50cyl7Zi5w dXNoKGcuYWN0aW9uX2E9CnJndW1lbnRzLm5ld3R5cGUpfX19Zm9yKHZhciBiIGluIGYpe3ZhciBo PTNEZltiXTtpZihoPTNEPTNEImlucHV0Inx8aD0zRD0zRD0KImlucHV0X2NvbGxlY3Rpb24ifHxp c3N1YnR5cGUoZltiXSx0aGlzLmRhdGF0eXBlc1tjXSkpe3JldHVybiB0cnVlfX19cmV0dXJuPQog ZmFsc2V9LF9vdGhlckNvbGxlY3Rpb25UeXBlOmZ1bmN0aW9uKGEpe3ZhciBjPTNETlVMTF9DT0xM RUNUSU9OX1RZUEVfREVTQ1I9CklQVElPTjtpZihhLmlzRGF0YUNvbGxlY3Rpb25JbnB1dCl7Yz0z RGEuY29sbGVjdGlvblR5cGV9ZWxzZXt2YXIgYj0zRGEubWFwTz0KdmVyKCk7aWYoYi5pc0NvbGxl Y3Rpb24pe2M9M0RifX1yZXR1cm4gY30sfSk7dmFyIElucHV0VGVybWluYWw9M0RCYXNlSW5wdXRU PQplcm1pbmFsLmV4dGVuZCh7dXBkYXRlOmZ1bmN0aW9uKGEpe3RoaXMuZGF0YXR5cGVzPTNEYS5l eHRlbnNpb25zO3RoaXMubXVsdGk9CnBsZT0zRGEubXVsdGlwbGU7dGhpcy5jb2xsZWN0aW9uPTNE ZmFsc2V9LGNvbm5lY3Q6ZnVuY3Rpb24oYSl7QmFzZUlucHV0VGVybT0KaW5hbC5wcm90b3R5cGUu Y29ubmVjdC5jYWxsKHRoaXMsYSk7dmFyIGI9M0RhLmhhbmRsZTE7aWYoIWIpe3JldHVybn12YXIg Yz0KPTNEdGhpcy5fb3RoZXJDb2xsZWN0aW9uVHlwZShiKTtpZihjLmlzQ29sbGVjdGlvbil7dGhp cy5zZXRNYXBPdmVyKGMpfX0sYXR0PQphY2hhYmxlOmZ1bmN0aW9uKGIpe3ZhciBkPTNEdGhpcy5f b3RoZXJDb2xsZWN0aW9uVHlwZShiKTt2YXIgYT0zRHRoaXMubWFwT3Y9CmVyKCk7aWYoZC5pc0Nv bGxlY3Rpb24pe2lmKHRoaXMubXVsdGlwbGUpe2lmKHRoaXMuY29ubmVjdGVkKCkmJiF0aGlzLl9j b2xsZT0KY3Rpb25BdHRhY2hlZCgpKXtyZXR1cm4gZmFsc2V9aWYoZC5yYW5rPTNEPTNEMSl7cmV0 dXJuIHRoaXMuX3Byb2R1Y2VzQWNjZXB0PQphYmxlRGF0YXR5cGUoYil9ZWxzZXtyZXR1cm4gZmFs c2V9fWlmKGEuaXNDb2xsZWN0aW9uJiZhLmNhbk1hdGNoKGQpKXtyZXR1cm49CiB0aGlzLl9wcm9k dWNlc0FjY2VwdGFibGVEYXRhdHlwZShiKX1lbHNle3ZhciBjPTNEdGhpcy5fbWFwcGluZ0NvbnN0 cmFpbnRzKD0KKTtpZihjLmV2ZXJ5KF8uYmluZChkLmNhbk1hdGNoLGQpKSl7cmV0dXJuIHRoaXMu X3Byb2R1Y2VzQWNjZXB0YWJsZURhdGF0eXBlPQooYil9ZWxzZXtyZXR1cm4gZmFsc2V9fX1lbHNl e2lmKGEuaXNDb2xsZWN0aW9uKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0aGlzLl89CnByb2R1Y2Vz QWNjZXB0YWJsZURhdGF0eXBlKGIpfX0pO3ZhciBJbnB1dENvbGxlY3Rpb25UZXJtaW5hbD0zREJh c2VJbnB1dFRlcj0KbWluYWwuZXh0ZW5kKHt1cGRhdGU6ZnVuY3Rpb24oYSl7dGhpcy5tdWx0aXBs ZT0zRGZhbHNlO3RoaXMuY29sbGVjdGlvbj0zRHRyPQp1ZTt0aGlzLmRhdGF0eXBlcz0zRGEuZXh0 ZW5zaW9ucztpZihhLmNvbGxlY3Rpb25fdHlwZSl7dGhpcy5jb2xsZWN0aW9uVHlwZT0KPTNEbmV3 IENvbGxlY3Rpb25UeXBlRGVzY3JpcHRpb24oYS5jb2xsZWN0aW9uX3R5cGUpfWVsc2V7dGhpcy5j b2xsZWN0aW9uVHlwPQplPTNEQU5ZX0NPTExFQ1RJT05fVFlQRV9ERVNDUklQVElPTn19LGNvbm5l Y3Q6ZnVuY3Rpb24oYil7QmFzZUlucHV0VGVybWluYWw9Ci5wcm90b3R5cGUuY29ubmVjdC5jYWxs KHRoaXMsYik7dmFyIGE9M0RiLmhhbmRsZTE7aWYoIWEpe3JldHVybn12YXIgYz0zRHRoaT0Kcy5f ZWZmZWN0aXZlTWFwT3ZlcihhKTt0aGlzLnNldE1hcE92ZXIoYyl9LF9lZmZlY3RpdmVNYXBPdmVy OmZ1bmN0aW9uKGEpe3ZhPQpyIGI9M0R0aGlzLmNvbGxlY3Rpb25UeXBlO3ZhciBjPTNEdGhpcy5f b3RoZXJDb2xsZWN0aW9uVHlwZShhKTtpZighYi5jYW5NYXQ9CmNoKGMpKXtyZXR1cm4gYy5lZmZl Y3RpdmVNYXBPdmVyKGIpfWVsc2V7cmV0dXJuIE5VTExfQ09MTEVDVElPTl9UWVBFX0RFU0NSST0K UFRJT059fSxfZWZmZWN0aXZlQ29sbGVjdGlvblR5cGU6ZnVuY3Rpb24oKXt2YXIgYj0zRHRoaXMu Y29sbGVjdGlvblR5cGU7dmFyPQogYT0zRHRoaXMubWFwT3ZlcigpO3JldHVybiBhLmFwcGVuZChi KX0sYXR0YWNoYWJsZTpmdW5jdGlvbihiKXt2YXIgZz0zRHRoaXM9Ci5fb3RoZXJDb2xsZWN0aW9u VHlwZShiKTtpZihnLmlzQ29sbGVjdGlvbil7dmFyIGY9M0R0aGlzLl9lZmZlY3RpdmVDb2xsZWN0 aT0Kb25UeXBlKCk7dmFyIGE9M0R0aGlzLm1hcE92ZXIoKTtpZihmLmNhbk1hdGNoKGcpKXtyZXR1 cm4gdGhpcy5fcHJvZHVjZXNBY2NlPQpwdGFibGVEYXRhdHlwZShiKX1lbHNle2lmKGEuaXNDb2xs ZWN0aW9uKXtyZXR1cm4gZmFsc2V9ZWxzZXtpZihnLmNhbk1hcE92ZXI9Cih0aGlzLmNvbGxlY3Rp b25UeXBlKSl7dmFyIGQ9M0R0aGlzLl9lZmZlY3RpdmVNYXBPdmVyKGIpO2lmKCFkLmlzQ29sbGVj dGlvbj0KKXtyZXR1cm4gZmFsc2V9dmFyIGM9M0R0aGlzLl9tYXBwaW5nQ29uc3RyYWludHMoKTtp ZihjLmV2ZXJ5KGQuY2FuTWF0Y2gpKXtyPQpldHVybiB0aGlzLl9wcm9kdWNlc0FjY2VwdGFibGVE YXRhdHlwZShiKX19fX19cmV0dXJuIGZhbHNlfX0pO3ZhciBPdXRwdXRDb2w9CmxlY3Rpb25UZXJt aW5hbD0zRFRlcm1pbmFsLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihhKXtUZXJtaW5hbC5w cm90b3R5cD0KZS5pbml0aWFsaXplLmNhbGwodGhpcyxhKTt0aGlzLmRhdGF0eXBlcz0zRGEuZGF0 YXR5cGVzO3RoaXMuY29sbGVjdGlvblR5cGU9Cj0zRG5ldyBDb2xsZWN0aW9uVHlwZURlc2NyaXB0 aW9uKGEuY29sbGVjdGlvbl90eXBlKTt0aGlzLmlzRGF0YUNvbGxlY3Rpb25Jbj0KcHV0PTNEdHJ1 ZX0sdXBkYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPTNEbmV3IENvbGxlY3Rpb25UeXBlRGVzY3JpcHRp b24oYS5jb2xsPQplY3Rpb25fdHlwZSk7aWYoYi5jb2xsZWN0aW9uVHlwZSE9M0R0aGlzLmNvbGxl Y3Rpb25UeXBlLmNvbGxlY3Rpb25UeXBlKXtfLmU9CmFjaCh0aGlzLmNvbm5lY3RvcnMsZnVuY3Rp b24oYyl7Yy5kZXN0cm95KCl9KX10aGlzLmNvbGxlY3Rpb25UeXBlPTNEYn19KTtmdT0KbmN0aW9u IENvbm5lY3RvcihiLGEpe3RoaXMuY2FudmFzPTNEbnVsbDt0aGlzLmRyYWdnaW5nPTNEZmFsc2U7 dGhpcy5pbm5lcl9jPQpvbG9yPTNEIiNGRkZGRkYiO3RoaXMub3V0ZXJfY29sb3I9M0QiI0Q4QjM2 NSI7aWYoYiYmYSl7dGhpcy5jb25uZWN0KGIsYSl9fSQ9Ci5leHRlbmQoQ29ubmVjdG9yLnByb3Rv dHlwZSx7Y29ubmVjdDpmdW5jdGlvbihiLGEpe3RoaXMuaGFuZGxlMT0zRGI7aWYodGhpcz0KLmhh bmRsZTEpe3RoaXMuaGFuZGxlMS5jb25uZWN0KHRoaXMpfXRoaXMuaGFuZGxlMj0zRGE7aWYodGhp cy5oYW5kbGUyKXt0aGlzPQouaGFuZGxlMi5jb25uZWN0KHRoaXMpfX0sZGVzdHJveTpmdW5jdGlv bigpe2lmKHRoaXMuaGFuZGxlMSl7dGhpcy5oYW5kbGUxLmQ9CmlzY29ubmVjdCh0aGlzKX1pZih0 aGlzLmhhbmRsZTIpe3RoaXMuaGFuZGxlMi5kaXNjb25uZWN0KHRoaXMpfSQodGhpcy5jYW52YT0K cykucmVtb3ZlKCl9LGRlc3Ryb3lJZkludmFsaWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmhhbmRsZTEm JnRoaXMuaGFuZGxlMiYmIXRoPQppcy5oYW5kbGUyLmF0dGFjaGFibGUodGhpcy5oYW5kbGUxKSl7 dGhpcy5kZXN0cm95KCl9fSxyZWRyYXc6ZnVuY3Rpb24oKXt2YXI9CiBmPTNEJCgiI2NhbnZhcy1j b250YWluZXIiKTtpZighdGhpcy5jYW52YXMpe3RoaXMuY2FudmFzPTNEZG9jdW1lbnQuY3JlYXRl RT0KbGVtZW50KCJjYW52YXMiKTtpZih3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyKXtHX3ZtbENh bnZhc01hbmFnZXIuaW5pdEVsZW1lPQpudCh0aGlzLmNhbnZhcyl9Zi5hcHBlbmQoJCh0aGlzLmNh bnZhcykpO2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuY2FudmFzLnN0eWw9CmUuekluZGV4PTNEIjMw MCJ9fXZhciB2PTNEZnVuY3Rpb24oYyl7cmV0dXJuICQoYykub2Zmc2V0KCkubGVmdC1mLm9mZnNl dCgpLj0KbGVmdH07dmFyIHA9M0RmdW5jdGlvbihjKXtyZXR1cm4gJChjKS5vZmZzZXQoKS50b3At Zi5vZmZzZXQoKS50b3B9O2lmKCF0aGlzPQouaGFuZGxlMXx8IXRoaXMuaGFuZGxlMil7cmV0dXJu fXZhciBvPTNEdih0aGlzLmhhbmRsZTEuZWxlbWVudCkrNTt2YXIgbj0zRHA9Cih0aGlzLmhhbmRs ZTEuZWxlbWVudCkrNTt2YXIgeD0zRHYodGhpcy5oYW5kbGUyLmVsZW1lbnQpKzU7dmFyIHU9M0Rw KHRoaXMuaD0KYW5kbGUyLmVsZW1lbnQpKzU7dmFyIGs9M0QxMDA7dmFyIHI9M0RNYXRoLm1pbihv LHgpO3ZhciBhPTNETWF0aC5tYXgobyx4KTt2PQphciBxPTNETWF0aC5taW4obix1KTt2YXIgQj0z RE1hdGgubWF4KG4sdSk7dmFyIGQ9M0RNYXRoLm1pbihNYXRoLm1heChNYXRoLmE9CmJzKEItcSkv MiwxMDApLDMwMCk7dmFyIHc9M0RyLWs7dmFyIEE9M0RxLWs7dmFyIHk9M0RhLXIrMiprO3ZhciBz PTNEQi1xKzIqaz0KO3RoaXMuY2FudmFzLnN0eWxlLmxlZnQ9M0R3KyJweCI7dGhpcy5jYW52YXMu c3R5bGUudG9wPTNEQSsicHgiO3RoaXMuY2FudmFzPQouc2V0QXR0cmlidXRlKCJ3aWR0aCIseSk7 dGhpcy5jYW52YXMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHMpO28tPTNEdztuLT0zREE9Cjt4LT0z RHc7dS09M0RBO3ZhciB6PTNEdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxoPTNEbnVsbCxs PTNEbnVsbDt2YXIgZz0KPTNEMTtpZih0aGlzLmhhbmRsZTEmJnRoaXMuaGFuZGxlMS5pc01hcHBl ZE92ZXIoKSl7dmFyIGg9M0RbLTYsLTMsMCwzLDZdO2c9Cj0zRDV9ZWxzZXt2YXIgaD0zRFswXX1p Zih0aGlzLmhhbmRsZTImJnRoaXMuaGFuZGxlMi5pc01hcHBlZE92ZXIoKSl7dmFyIGw9Cj0zRFst NiwtMywwLDMsNl07Zz0zRDV9ZWxzZXt2YXIgbD0zRFswXX12YXIgYj0zRHRoaXM7Zm9yKHZhciB0 PTNEMDt0PGc7dCsrKT0Ke3ZhciBtPTNENSxqPTNENztpZihoLmxlbmd0aD4xfHxsLmxlbmd0aD4x KXttPTNEMTtqPTNEM31iLmRyYXdfb3V0bGluZWRfY3VyPQp2ZShvLG4seCx1LGQsbSxqLGhbdCVo Lmxlbmd0aF0sbFt0JWwubGVuZ3RoXSl9fSxkcmF3X291dGxpbmVkX2N1cnZlOmZ1bmN0aW89Cm4o aixpLGwsayxhLGIsZixnLGQpe3ZhciBnPTNEZ3x8MDt2YXIgZD0zRGR8fDA7dmFyIGg9M0R0aGlz LmNhbnZhcy5nZXRDb250ZT0KeHQoIjJkIik7aC5saW5lQ2FwPTNEInJvdW5kIjtoLnN0cm9rZVN0 eWxlPTNEdGhpcy5vdXRlcl9jb2xvcjtoLmxpbmVXaWR0aD0KPTNEZjtoLmJlZ2luUGF0aCgpO2gu bW92ZVRvKGosaStnKTtoLmJlemllckN1cnZlVG8oaithLGkrZyxsLWEsaytkLGwsaytkKTtoPQou c3Ryb2tlKCk7aC5zdHJva2VTdHlsZT0zRHRoaXMuaW5uZXJfY29sb3I7aC5saW5lV2lkdGg9M0Ri O2guYmVnaW5QYXRoKCk7aC49Cm1vdmVUbyhqLGkrZyk7aC5iZXppZXJDdXJ2ZVRvKGorYSxpK2cs bC1hLGsrZCxsLGsrZCk7aC5zdHJva2UoKX19KTt2YXIgTm9kZT0KPTNEQmFja2JvbmUuTW9kZWwu ZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudD0zRGEuZWxlbWVudDt0 PQpoaXMuaW5wdXRfdGVybWluYWxzPTNEe307dGhpcy5vdXRwdXRfdGVybWluYWxzPTNEe307dGhp cy50b29sX2Vycm9ycz0zRHt9fSw9CmNvbm5lY3RlZE91dHB1dFRlcm1pbmFsczpmdW5jdGlvbigp e3JldHVybiB0aGlzLl9jb25uZWN0ZWRUZXJtaW5hbHModGhpcy5vdT0KdHB1dF90ZXJtaW5hbHMp fSxfY29ubmVjdGVkVGVybWluYWxzOmZ1bmN0aW9uKGIpe3ZhciBhPTNEW107JC5lYWNoKGIsZnVu Y3RpPQpvbihjLGQpe2lmKGQuY29ubmVjdG9ycy5sZW5ndGg+MCl7YS5wdXNoKGQpfX0pO3JldHVy biBhfSxoYXNDb25uZWN0ZWRPdXRwdXQ9ClRlcm1pbmFsczpmdW5jdGlvbigpe3ZhciBhPTNEdGhp cy5vdXRwdXRfdGVybWluYWxzO2Zvcih2YXIgYiBpbiBhKXtpZihhW2JdLj0KY29ubmVjdG9ycy5s ZW5ndGg+MCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0sY29ubmVjdGVkTWFwcGVkSW5wdXRU ZXJtaW5hPQpsczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb25uZWN0ZWRNYXBwZWRUZXJtaW5h bHModGhpcy5pbnB1dF90ZXJtaW5hbHMpfSw9Cmhhc0Nvbm5lY3RlZE1hcHBlZElucHV0VGVybWlu YWxzOmZ1bmN0aW9uKCl7dmFyIGM9M0R0aGlzLmlucHV0X3Rlcm1pbmFscztmbz0Kcih2YXIgYiBp biBjKXt2YXIgYT0zRGNbYl07aWYoYS5jb25uZWN0b3JzLmxlbmd0aD4wJiZhLmlzTWFwcGVkT3Zl cigpKXtyZXR1PQpybiB0cnVlfX1yZXR1cm4gZmFsc2V9LF9jb25uZWN0ZWRNYXBwZWRUZXJtaW5h bHM6ZnVuY3Rpb24oYil7dmFyIGE9M0RbXTskLmU9CmFjaChiLGZ1bmN0aW9uKGMsZCl7dmFyIGY9 M0RkLm1hcE92ZXIoKTtpZihmLmlzQ29sbGVjdGlvbil7aWYoZC5jb25uZWN0b3JzLj0KbGVuZ3Ro PjApe2EucHVzaChkKX19fSk7cmV0dXJuIGF9LG1hcHBlZElucHV0VGVybWluYWxzOmZ1bmN0aW9u KCl7cmV0dXJuIHRoPQppcy5fbWFwcGVkVGVybWluYWxzKHRoaXMuaW5wdXRfdGVybWluYWxzKX0s X21hcHBlZFRlcm1pbmFsczpmdW5jdGlvbihiKXt2YXI9CiBhPTNEW107JC5lYWNoKGIsZnVuY3Rp b24oYyxkKXt2YXIgZj0zRGQubWFwT3ZlcigpO2lmKGYuaXNDb2xsZWN0aW9uKXthLnB1cz0KaChk KX19KTtyZXR1cm4gYX0saGFzTWFwcGVkT3ZlcklucHV0VGVybWluYWxzOmZ1bmN0aW9uKCl7dmFy IGE9M0RmYWxzZTtfLmVhPQpjaCh0aGlzLmlucHV0X3Rlcm1pbmFscyxmdW5jdGlvbihiKXt2YXIg Yz0zRGIubWFwT3ZlcigpO2lmKGMuaXNDb2xsZWN0aW9uKXs9CmE9M0R0cnVlfX0pO3JldHVybiBh fSxyZWRyYXc6ZnVuY3Rpb24oKXskLmVhY2godGhpcy5pbnB1dF90ZXJtaW5hbHMsZnVuY3Rpbz0K bihhLGIpe2IucmVkcmF3KCl9KTskLmVhY2godGhpcy5vdXRwdXRfdGVybWluYWxzLGZ1bmN0aW9u KGEsYil7Yi5yZWRyYXcoKX0pPQp9LGRlc3Ryb3k6ZnVuY3Rpb24oKXskLmVhY2godGhpcy5pbnB1 dF90ZXJtaW5hbHMsZnVuY3Rpb24oYSxiKXtiLmRlc3Ryb3koKX09Cik7JC5lYWNoKHRoaXMub3V0 cHV0X3Rlcm1pbmFscyxmdW5jdGlvbihhLGIpe2IuZGVzdHJveSgpfSk7d29ya2Zsb3cucmVtb3Zl Xz0Kbm9kZSh0aGlzKTskKHRoaXMuZWxlbWVudCkucmVtb3ZlKCl9LG1ha2VfYWN0aXZlOmZ1bmN0 aW9uKCl7JCh0aGlzLmVsZW1lbnQpPQouYWRkQ2xhc3MoInRvb2xGb3JtLWFjdGl2ZSIpfSxtYWtl X2luYWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGE9M0R0aGlzLmVsZW1lbnQ9Ci5nZXQoMCk7KGZ1bmN0 aW9uKGIpe2IucmVtb3ZlQ2hpbGQoYSk7Yi5hcHBlbmRDaGlsZChhKX0pKGEucGFyZW50Tm9kZSk7 JChhKT0KLnJlbW92ZUNsYXNzKCJ0b29sRm9ybS1hY3RpdmUiKX0saW5pdF9maWVsZF9kYXRhOmZ1 bmN0aW9uKGIpe2lmKGIudHlwZSl7dGhpPQpzLnR5cGU9M0RiLnR5cGV9dGhpcy5uYW1lPTNEYi5u YW1lO3RoaXMuZm9ybV9odG1sPTNEYi5mb3JtX2h0bWw7dGhpcy50b29sX3M9CnRhdGU9M0RiLnRv b2xfc3RhdGU7dGhpcy50b29sX2Vycm9ycz0zRGIudG9vbF9lcnJvcnM7dGhpcy50b29sdGlwPTNE Yi50b29sdD0KaXA/Yi50b29sdGlwOiIiO3RoaXMuYW5ub3RhdGlvbj0zRGIuYW5ub3RhdGlvbjt0 aGlzLnBvc3Rfam9iX2FjdGlvbnM9M0RiLnBvPQpzdF9qb2JfYWN0aW9ucz9iLnBvc3Rfam9iX2Fj dGlvbnM6e307dGhpcy5sYWJlbD0zRGIubGFiZWw7dGhpcy51dWlkPTNEYi51dWk9CmQ7dGhpcy53 b3JrZmxvd19vdXRwdXRzPTNEYi53b3JrZmxvd19vdXRwdXRzP2Iud29ya2Zsb3dfb3V0cHV0czpb XTt2YXIgYT0zRD0KdGhpczt2YXIgYz0zRG5ldyBOb2RlVmlldyh7ZWw6dGhpcy5lbGVtZW50WzBd LG5vZGU6YSx9KTthLm5vZGVWaWV3PTNEYzskLmVhPQpjaChiLmRhdGFfaW5wdXRzLGZ1bmN0aW9u KGYsZCl7Yy5hZGREYXRhSW5wdXQoZCl9KTtpZigoYi5kYXRhX2lucHV0cy5sZW5ndGg9Cj4wKSYm KGIuZGF0YV9vdXRwdXRzLmxlbmd0aD4wKSl7Yy5hZGRSdWxlKCl9JC5lYWNoKGIuZGF0YV9vdXRw dXRzLGZ1bmN0aW9uKD0KZixkKXtjLmFkZERhdGFPdXRwdXQoZCl9KTtjLnJlbmRlcigpO3dvcmtm bG93Lm5vZGVfY2hhbmdlZCh0aGlzLHRydWUpfSx1cGRhPQp0ZV9maWVsZF9kYXRhOmZ1bmN0aW9u KGQpe3ZhciBjPTNEdGhpcztub2RlVmlldz0zRGMubm9kZVZpZXc7dGhpcy50b29sX3N0YXQ9CmU9 M0RkLnRvb2xfc3RhdGU7dGhpcy5mb3JtX2h0bWw9M0RkLmZvcm1faHRtbDt0aGlzLnRvb2xfZXJy b3JzPTNEZC50b29sX2Vycj0Kb3JzO3RoaXMuYW5ub3RhdGlvbj0zRGQuYW5ub3RhdGlvbjtpZigi cG9zdF9qb2JfYWN0aW9ucyIgaW4gZCl7dmFyIGY9M0QkLnBhPQpyc2VKU09OKGQucG9zdF9qb2Jf YWN0aW9ucyk7dGhpcy5wb3N0X2pvYl9hY3Rpb25zPTNEZj9mOnt9fWMubm9kZVZpZXcucmVuZGU9 CnJUb29sRXJyb3JzKCk7dmFyIGc9M0Rub2RlVmlldy4kKCJkaXYuaW5wdXRzIik7dmFyIGE9M0Ru b2RlVmlldy5uZXdJbnB1dHNEaT0KdigpO3ZhciBiPTNEe307Xy5lYWNoKGQuZGF0YV9pbnB1dHMs ZnVuY3Rpb24oaCl7dmFyIGk9M0RjLm5vZGVWaWV3LmFkZERhdGFJPQpucHV0KGgsYSk7YltoLm5h bWVdPTNEaX0pO18uZWFjaChfLmRpZmZlcmVuY2UoXy52YWx1ZXMobm9kZVZpZXcudGVybWluYWxW aWU9CndzKSxfLnZhbHVlcyhiKSksZnVuY3Rpb24oaCl7aC5lbC50ZXJtaW5hbC5kZXN0cm95KCl9 KTtub2RlVmlldy50ZXJtaW5hbFZpZT0Kd3M9M0RiO2lmKGQuZGF0YV9vdXRwdXRzLmxlbmd0aD0z RD0zRDEmJiJjb2xsZWN0aW9uX3R5cGUiIGluIGQuZGF0YV9vdXRwdXRzPQpbMF0pe25vZGVWaWV3 LnVwZGF0ZURhdGFPdXRwdXQoZC5kYXRhX291dHB1dHNbMF0pfWcucmVwbGFjZVdpdGgoYSk7dGhp cy5tYXI9CmtDaGFuZ2VkKCk7dGhpcy5yZWRyYXcoKX0sZXJyb3I6ZnVuY3Rpb24oZCl7dmFyIGE9 M0QkKHRoaXMuZWxlbWVudCkuZmluZCgiLj0KdG9vbEZvcm1Cb2R5Iik7YS5maW5kKCJkaXYiKS5y ZW1vdmUoKTt2YXIgYz0zRCI8ZGl2IHN0eWxlPTNEJ2NvbG9yOiByZWQ7IHRlPQp4dC1zdHlsZTog aXRhbGljOyc+IitkKyI8L2Rpdj4iO3RoaXMuZm9ybV9odG1sPTNEYzthLmh0bWwoYyk7d29ya2Zs b3cubm9kZV89CmNoYW5nZWQodGhpcyl9LG1hcmtDaGFuZ2VkOmZ1bmN0aW9uKCl7d29ya2Zsb3cu bm9kZV9jaGFuZ2VkKHRoaXMpfX0pO2Z1bmN0aT0Kb24gV29ya2Zsb3coYSl7dGhpcy5jYW52YXNf Y29udGFpbmVyPTNEYTt0aGlzLmlkX2NvdW50ZXI9M0QwO3RoaXMubm9kZXM9M0R7PQp9O3RoaXMu bmFtZT0zRG51bGw7dGhpcy5oYXNfY2hhbmdlcz0zRGZhbHNlO3RoaXMuYWN0aXZlX2Zvcm1faGFz X2NoYW5nZXM9M0Q9CmZhbHNlfSQuZXh0ZW5kKFdvcmtmbG93LnByb3RvdHlwZSx7YWRkX25vZGU6 ZnVuY3Rpb24oYSl7YS5pZD0zRHRoaXMuaWRfY291bj0KdGVyO2EuZWxlbWVudC5hdHRyKCJpZCIs IndmLW5vZGUtc3RlcC0iK2EuaWQpO3RoaXMuaWRfY291bnRlcisrO3RoaXMubm9kZXNbPQphLmlk XT0zRGE7dGhpcy5oYXNfY2hhbmdlcz0zRHRydWU7YS53b3JrZmxvdz0zRHRoaXN9LHJlbW92ZV9u b2RlOmZ1bmN0aW9uKGE9Cil7aWYodGhpcy5hY3RpdmVfbm9kZT0zRD0zRGEpe3RoaXMuY2xlYXJf YWN0aXZlX25vZGUoKX1kZWxldGUgdGhpcy5ub2Rlc1thLj0KaWRdO3RoaXMuaGFzX2NoYW5nZXM9 M0R0cnVlfSxyZW1vdmVfYWxsOmZ1bmN0aW9uKCl7d2Y9M0R0aGlzOyQuZWFjaCh0aGlzLm5vPQpk ZXMsZnVuY3Rpb24oYixhKXthLmRlc3Ryb3koKTt3Zi5yZW1vdmVfbm9kZShhKX0pfSxyZWN0aWZ5 X3dvcmtmbG93X291dHB1dHM9CjpmdW5jdGlvbigpe3ZhciBiPTNEZmFsc2U7dmFyIGE9M0RmYWxz ZTskLmVhY2godGhpcy5ub2RlcyxmdW5jdGlvbihjLGQpe2lmKD0KZC53b3JrZmxvd19vdXRwdXRz JiZkLndvcmtmbG93X291dHB1dHMubGVuZ3RoPjApe2I9M0R0cnVlfSQuZWFjaChkLnBvc3Rfam9i PQpfYWN0aW9ucyxmdW5jdGlvbihnLGYpe2lmKGYuYWN0aW9uX3R5cGU9M0Q9M0Q9M0QiSGlkZURh dGFzZXRBY3Rpb24iKXthPTNEdHI9CnVlfX0pfSk7aWYoYiE9M0Q9M0RmYWxzZXx8YSE9M0Q9M0Rm YWxzZSl7JC5lYWNoKHRoaXMubm9kZXMsZnVuY3Rpb24oYyxnKXtpZj0KKGcudHlwZT0zRD0zRD0z RCJ0b29sIil7dmFyIGY9M0RmYWxzZTtpZihnLnBvc3Rfam9iX2FjdGlvbnM9M0Q9M0RudWxsKXtn LnBvPQpzdF9qb2JfYWN0aW9ucz0zRHt9O2Y9M0R0cnVlfXZhciBkPTNEW107JC5lYWNoKGcucG9z dF9qb2JfYWN0aW9ucyxmdW5jdGlvbig9CmksaCl7aWYoaC5hY3Rpb25fdHlwZT0zRD0zRCJIaWRl RGF0YXNldEFjdGlvbiIpe2QucHVzaChpKX19KTtpZihkLmxlbmd0aD4wKT0KeyQuZWFjaChkLGZ1 bmN0aW9uKGgsail7Zj0zRHRydWU7ZGVsZXRlIGcucG9zdF9qb2JfYWN0aW9uc1tqXX0pfWlmKGIp eyQuZWFjPQpoKGcub3V0cHV0X3Rlcm1pbmFscyxmdW5jdGlvbihpLGope3ZhciBoPTNEdHJ1ZTsk LmVhY2goZy53b3JrZmxvd19vdXRwdXRzLGY9CnVuY3Rpb24obCxtKXtpZihqLm5hbWU9M0Q9M0Q9 M0RtKXtoPTNEZmFsc2V9fSk7aWYoaD0zRD0zRD0zRHRydWUpe2Y9M0R0cnVlOz0KdmFyIGs9M0R7 YWN0aW9uX3R5cGU6IkhpZGVEYXRhc2V0QWN0aW9uIixvdXRwdXRfbmFtZTpqLm5hbWUsYWN0aW9u X2FyZ3VtZW50PQpzOnt9fTtnLnBvc3Rfam9iX2FjdGlvbnNbIkhpZGVEYXRhc2V0QWN0aW9uIitq Lm5hbWVdPTNEbnVsbDtnLnBvc3Rfam9iX2FjdGk9Cm9uc1siSGlkZURhdGFzZXRBY3Rpb24iK2ou bmFtZV09M0RrfX0pfWlmKHdvcmtmbG93LmFjdGl2ZV9ub2RlPTNEPTNEZyYmZj0zRD0KPTNEPTNE dHJ1ZSl7d29ya2Zsb3cucmVsb2FkX2FjdGl2ZV9ub2RlKCl9fX0pfX0sdG9fc2ltcGxlOmZ1bmN0 aW9uKCl7dmFyIGE9Cj0zRHt9OyQuZWFjaCh0aGlzLm5vZGVzLGZ1bmN0aW9uKGMsZil7dmFyIGc9 M0R7fTskLmVhY2goZi5pbnB1dF90ZXJtaW5hbHMsZj0KdW5jdGlvbihpLGope2dbai5uYW1lXT0z RG51bGw7dmFyIGg9M0RbXTskLmVhY2goai5jb25uZWN0b3JzLGZ1bmN0aW9uKGssbCl7PQpoW2td PTNEe2lkOmwuaGFuZGxlMS5ub2RlLmlkLG91dHB1dF9uYW1lOmwuaGFuZGxlMS5uYW1lfTtnW2ou bmFtZV09M0RofSl9KTs9CnZhciBiPTNEe307aWYoZi5wb3N0X2pvYl9hY3Rpb25zKXskLmVhY2go Zi5wb3N0X2pvYl9hY3Rpb25zLGZ1bmN0aW9uKGosaCl7dj0KYXIgaz0zRHthY3Rpb25fdHlwZTpo LmFjdGlvbl90eXBlLG91dHB1dF9uYW1lOmgub3V0cHV0X25hbWUsYWN0aW9uX2FyZ3VtZW50PQpz OmguYWN0aW9uX2FyZ3VtZW50c307YltoLmFjdGlvbl90eXBlK2gub3V0cHV0X25hbWVdPTNEbnVs bDtiW2guYWN0aW9uX3R5cGU9CitoLm91dHB1dF9uYW1lXT0zRGt9KX1pZighZi53b3JrZmxvd19v dXRwdXRzKXtmLndvcmtmbG93X291dHB1dHM9M0RbXX12YXIgZD0KPTNEe2lkOmYuaWQsdHlwZTpm LnR5cGUsdG9vbF9pZDpmLnRvb2xfaWQsdG9vbF9zdGF0ZTpmLnRvb2xfc3RhdGUsdG9vbF9lcnJv PQpyczpmLnRvb2xfZXJyb3JzLGlucHV0X2Nvbm5lY3Rpb25zOmcscG9zaXRpb246JChmLmVsZW1l bnQpLnBvc2l0aW9uKCksYW5ub3Q9CmF0aW9uOmYuYW5ub3RhdGlvbixwb3N0X2pvYl9hY3Rpb25z OmYucG9zdF9qb2JfYWN0aW9ucyx1dWlkOmYudXVpZCxsYWJlbDpmLj0KbGFiZWwsd29ya2Zsb3df b3V0cHV0czpmLndvcmtmbG93X291dHB1dHN9O2FbZi5pZF09M0RkfSk7cmV0dXJue3N0ZXBzOmF9 fSxmPQpyb21fc2ltcGxlOmZ1bmN0aW9uKGIpe3dmPTNEdGhpczt2YXIgYz0zRDA7d2YubmFtZT0z RGIubmFtZTt2YXIgYT0zRGZhbHNlOyQ9Ci5lYWNoKGIuc3RlcHMsZnVuY3Rpb24oZyxmKXt2YXIg ZD0zRHByZWJ1aWxkX25vZGUoZi50eXBlLGYubmFtZSxmLnRvb2xfaWQpOz0KZC5pbml0X2ZpZWxk X2RhdGEoZik7aWYoZi5wb3NpdGlvbil7ZC5lbGVtZW50LmNzcyh7dG9wOmYucG9zaXRpb24udG9w LGxlZnQ6PQpmLnBvc2l0aW9uLmxlZnR9KX1kLmlkPTNEZi5pZDt3Zi5ub2Rlc1tkLmlkXT0zRGQ7 Yz0zRE1hdGgubWF4KGMscGFyc2VJbnQoZyk9Cik7aWYoIWEmJmQudHlwZT0zRD0zRD0zRCJ0b29s Iil7aWYoZC53b3JrZmxvd19vdXRwdXRzLmxlbmd0aD4wKXthPTNEdHJ1ZX1lbD0Kc2V7JC5lYWNo KGQucG9zdF9qb2JfYWN0aW9ucyxmdW5jdGlvbihpLGgpe2lmKGguYWN0aW9uX3R5cGU9M0Q9M0Q9 M0QiSGlkZURhPQp0YXNldEFjdGlvbiIpe2E9M0R0cnVlfX0pfX19KTt3Zi5pZF9jb3VudGVyPTNE YysxOyQuZWFjaChiLnN0ZXBzLGZ1bmN0aW9uKGc9CixmKXt2YXIgZD0zRHdmLm5vZGVzW2ddOyQu ZWFjaChmLmlucHV0X2Nvbm5lY3Rpb25zLGZ1bmN0aW9uKGksaCl7aWYoaCl7aWYoIT0KJC5pc0Fy cmF5KGgpKXtoPTNEW2hdfSQuZWFjaChoLGZ1bmN0aW9uKGssail7dmFyIG09M0R3Zi5ub2Rlc1tq LmlkXTt2YXIgbj0KPTNEbmV3IENvbm5lY3RvcigpO24uY29ubmVjdChtLm91dHB1dF90ZXJtaW5h bHNbai5vdXRwdXRfbmFtZV0sZC5pbnB1dF90ZXJtPQppbmFsc1tpXSk7bi5yZWRyYXcoKX0pfX0p O2lmKGEmJmQudHlwZT0zRD0zRD0zRCJ0b29sIil7JC5lYWNoKGQub3V0cHV0X3Rlcm09CmluYWxz LGZ1bmN0aW9uKGgsaSl7aWYoZC5wb3N0X2pvYl9hY3Rpb25zWyJIaWRlRGF0YXNldEFjdGlvbiIr aS5uYW1lXT0zRD0zRD0KPTNEdW5kZWZpbmVkKXtkLndvcmtmbG93X291dHB1dHMucHVzaChpLm5h bWUpO2NhbGxvdXQ9M0QkKGQuZWxlbWVudCkuZmluZCgiPQouY2FsbG91dC4iK2kubmFtZSk7Y2Fs bG91dC5maW5kKCJpbWciKS5hdHRyKCJzcmMiLGdhbGF4eV9jb25maWcucm9vdCsic3RhdGk9CmMv aW1hZ2VzL2Z1Z3VlL2FzdGVyaXNrLXNtYWxsLnBuZyIpO3dvcmtmbG93Lmhhc19jaGFuZ2VzPTNE dHJ1ZX19KX19KX0sY2hlYz0Ka19jaGFuZ2VzX2luX2FjdGl2ZV9mb3JtOmZ1bmN0aW9uKCl7aWYo dGhpcy5hY3RpdmVfZm9ybV9oYXNfY2hhbmdlcyl7dGhpcy5oPQphc19jaGFuZ2VzPTNEdHJ1ZTsk KCIjcmlnaHQtY29udGVudCIpLmZpbmQoImZvcm0iKS5zdWJtaXQoKTt0aGlzLmFjdGl2ZV9mb3I9 Cm1faGFzX2NoYW5nZXM9M0RmYWxzZX19LHJlbG9hZF9hY3RpdmVfbm9kZTpmdW5jdGlvbigpe2lm KHRoaXMuYWN0aXZlX25vZGUpez0KdmFyIGE9M0R0aGlzLmFjdGl2ZV9ub2RlO3RoaXMuY2xlYXJf YWN0aXZlX25vZGUoKTt0aGlzLmFjdGl2YXRlX25vZGUoYSl9fSxjPQpsZWFyX2FjdGl2ZV9ub2Rl OmZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmVfbm9kZSl7dGhpcy5hY3RpdmVfbm9kZS5tYWtlX2lu YWM9CnRpdmUoKTt0aGlzLmFjdGl2ZV9ub2RlPTNEbnVsbH1wYXJlbnQuc2hvd19mb3JtX2Zvcl90 b29sKCI8ZGl2Pk5vIG5vZGUgc2VsZT0KY3RlZDwvZGl2PiIpfSxhY3RpdmF0ZV9ub2RlOmZ1bmN0 aW9uKGEpe2lmKHRoaXMuYWN0aXZlX25vZGUhPTNEYSl7dGhpcy5jaGVjPQprX2NoYW5nZXNfaW5f YWN0aXZlX2Zvcm0oKTt0aGlzLmNsZWFyX2FjdGl2ZV9ub2RlKCk7aWYocGFyZW50Ll9fTkVXVE9P TEZPUk09Cl9fKXtwYXJlbnQuc2hvd19mb3JtX2Zvcl90b29sKGEuZm9ybV9odG1sLGEpfWVsc2V7 cGFyZW50LnNob3dfZm9ybV9mb3JfdG9vbD0KKGEuZm9ybV9odG1sK2EudG9vbHRpcCxhKX1hLm1h a2VfYWN0aXZlKCk7dGhpcy5hY3RpdmVfbm9kZT0zRGF9fSxub2RlX2NoYW5nPQplZDpmdW5jdGlv bihhLGIpe3RoaXMuaGFzX2NoYW5nZXM9M0R0cnVlO2lmKHRoaXMuYWN0aXZlX25vZGU9M0Q9M0Rh JiYoIXBhcmU9Cm50Ll9fTkVXVE9PTEZPUk1fX3x8Yikpe3RoaXMuY2hlY2tfY2hhbmdlc19pbl9h Y3RpdmVfZm9ybSgpO2lmKHBhcmVudC5fX05FVz0KVE9PTEZPUk1fXyl7cGFyZW50LnNob3dfZm9y bV9mb3JfdG9vbChhLmZvcm1faHRtbCxhKX1lbHNle3BhcmVudC5zaG93X2Zvcm1fPQpmb3JfdG9v bChhLmZvcm1faHRtbCthLnRvb2x0aXAsYSl9fX0sbGF5b3V0OmZ1bmN0aW9uKCl7dGhpcy5jaGVj a19jaGFuZ2VzX2k9Cm5fYWN0aXZlX2Zvcm0oKTt0aGlzLmhhc19jaGFuZ2VzPTNEdHJ1ZTt2YXIg aT0zRHt9O3ZhciBiPTNEe307JC5lYWNoKHRoaXMubj0Kb2RlcyxmdW5jdGlvbihsLGspe2lmKGlb bF09M0Q9M0Q9M0R1bmRlZmluZWQpe2lbbF09M0QwfWlmKGJbbF09M0Q9M0Q9M0R1bmRlPQpmaW5l ZCl7YltsXT0zRFtdfX0pOyQuZWFjaCh0aGlzLm5vZGVzLGZ1bmN0aW9uKGwsayl7JC5lYWNoKGsu aW5wdXRfdGVybWluYWw9CnMsZnVuY3Rpb24obSxuKXskLmVhY2gobi5jb25uZWN0b3JzLGZ1bmN0 aW9uKHAscSl7dmFyIG89M0RxLmhhbmRsZTEubm9kZTtpWz0Kay5pZF0rPTNEMTtiW28uaWRdLnB1 c2goay5pZCl9KX0pfSk7bm9kZV9pZHNfYnlfbGV2ZWw9M0RbXTt3aGlsZSh0cnVlKXtsZXZlPQps X3BhcmVudHM9M0RbXTtmb3IodmFyIGEgaW4gaSl7aWYoaVthXT0zRD0zRDApe2xldmVsX3BhcmVu dHMucHVzaChhKX19aWYobGU9CnZlbF9wYXJlbnRzLmxlbmd0aD0zRD0zRDApe2JyZWFrfW5vZGVf aWRzX2J5X2xldmVsLnB1c2gobGV2ZWxfcGFyZW50cyk7Zm9yKD0KdmFyIGYgaW4gbGV2ZWxfcGFy ZW50cyl7dmFyIGo9M0RsZXZlbF9wYXJlbnRzW2ZdO2RlbGV0ZSBpW2pdO2Zvcih2YXIgZyBpbiBi PQpbal0pe2lbYltqXVtnXV0tPTNEMX19fWlmKGkubGVuZ3RoKXtyZXR1cm59dmFyIGQ9M0R0aGlz Lm5vZGVzO3ZhciBoPTNEODA7dl89CnBhZD0zRDMwO3ZhciBjPTNEaDskLmVhY2gobm9kZV9pZHNf YnlfbGV2ZWwsZnVuY3Rpb24oayxsKXtsLnNvcnQoZnVuY3Rpb24ocD0KLG8pe3JldHVybiAkKGRb cF0uZWxlbWVudCkucG9zaXRpb24oKS50b3AtJChkW29dLmVsZW1lbnQpLnBvc2l0aW9uKCkudG9w fSk7PQp2YXIgbT0zRDA7dmFyIG49M0R2X3BhZDskLmVhY2gobCxmdW5jdGlvbihvLHIpe3ZhciBx PTNEZFtyXTt2YXIgcD0zRCQocS5lbGU9Cm1lbnQpOyQocCkuY3NzKHt0b3A6bixsZWZ0OmN9KTtt PTNETWF0aC5tYXgobSwkKHApLndpZHRoKCkpO24rPTNEJChwKS5oZWlnaD0KdCgpK3ZfcGFkfSk7 Yys9M0RtK2h9KTskLmVhY2goZCxmdW5jdGlvbihrLGwpe2wucmVkcmF3KCl9KX0sYm91bmRzX2Zv cl9hbGxfPQpub2RlczpmdW5jdGlvbigpe3ZhciBkPTNESW5maW5pdHksYj0zRC1JbmZpbml0eSxj PTNESW5maW5pdHksYT0zRC1JbmZpbml0eSw9CmY7JC5lYWNoKHRoaXMubm9kZXMsZnVuY3Rpb24o aCxnKXtlPTNEJChnLmVsZW1lbnQpO2Y9M0RlLnBvc2l0aW9uKCk7ZD0zRE1hdD0KaC5taW4oZCxm LmxlZnQpO2I9M0RNYXRoLm1heChiLGYubGVmdCtlLndpZHRoKCkpO2M9M0RNYXRoLm1pbihjLGYu dG9wKTthPTNEPQpNYXRoLm1heChhLGYudG9wK2Uud2lkdGgoKSl9KTtyZXR1cm57eG1pbjpkLHht YXg6Yix5bWluOmMseW1heDphfX0sZml0X2NhbnY9CmFzX3RvX25vZGVzOmZ1bmN0aW9uKCl7dmFy IGE9M0R0aGlzLmJvdW5kc19mb3JfYWxsX25vZGVzKCk7dmFyIGY9M0R0aGlzLmNhbj0KdmFzX2Nv bnRhaW5lci5wb3NpdGlvbigpO3ZhciBpPTNEdGhpcy5jYW52YXNfY29udGFpbmVyLnBhcmVudCgp O3ZhciBkPTNEZml4PQpfZGVsdGEoYS54bWluLDEwMCk7dmFyIGg9M0RmaXhfZGVsdGEoYS55bWlu LDEwMCk7ZD0zRE1hdGgubWF4KGQsZi5sZWZ0KTtoPQo9M0RNYXRoLm1heChoLGYudG9wKTt2YXIg Yz0zRGYubGVmdC1kO3ZhciBnPTNEZi50b3AtaDt2YXIgYj0zRHJvdW5kX3VwKGEueG09CmF4KzEw MCwxMDApK2Q7dmFyIGo9M0Ryb3VuZF91cChhLnltYXgrMTAwLDEwMCkraDtiPTNETWF0aC5tYXgo YiwtYytpLndpZHRoKD0KKSk7aj0zRE1hdGgubWF4KGosLWcraS5oZWlnaHQoKSk7dGhpcy5jYW52 YXNfY29udGFpbmVyLmNzcyh7bGVmdDpjLHRvcDpnLHdpPQpkdGg6YixoZWlnaHQ6an0pO3RoaXMu Y2FudmFzX2NvbnRhaW5lci5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgaz0zRCQ9Cih0 aGlzKS5wb3NpdGlvbigpOyQodGhpcykuY3NzKCJsZWZ0IixrLmxlZnQrZCk7JCh0aGlzKS5jc3Mo InRvcCIsay50b3AraCl9KT0KfX0pO2Z1bmN0aW9uIGZpeF9kZWx0YShhLGIpe2lmKGE8Ynx8YT4z KmIpe25ld19wb3M9M0QoTWF0aC5jZWlsKCgoYSViKSkvYikrPQoxKSpiO3JldHVybigtKGEtbmV3 X3BvcykpfXJldHVybiAwfWZ1bmN0aW9uIHJvdW5kX3VwKGEsYil7cmV0dXJuIE1hdGguY2VpbCg9 CmEvYikqYn1mdW5jdGlvbiBwcmVidWlsZF9ub2RlKGwsaixyKXt2YXIgaT0zRCQoIjxkaXYgY2xh c3M9M0QndG9vbEZvcm0gdG9vbD0KRm9ybUluQ2FudmFzJz48L2Rpdj4iKTt2YXIgZz0zRG5ldyBO b2RlKHtlbGVtZW50Oml9KTtnLnR5cGU9M0RsO2lmKGw9M0Q9M0QiPQp0b29sIil7Zy50b29sX2lk PTNEcn12YXIgbj0zRCQoIjxkaXYgY2xhc3M9M0QndG9vbEZvcm1UaXRsZSB1bnNlbGVjdGFibGUn PiI9CitqKyI8L2Rpdj4iKTtpLmFwcGVuZChuKTtpLmNzcygibGVmdCIsJCh3aW5kb3cpLnNjcm9s bExlZnQoKSsyMCk7aS5jc3MoInRvcD0KIiwkKHdpbmRvdykuc2Nyb2xsVG9wKCkrMjApO3ZhciBt PTNEJCgiPGRpdiBjbGFzcz0zRCd0b29sRm9ybUJvZHknPjwvZGl2PiIpPQo7dmFyIGg9M0QiPGRp dj48aW1nIGhlaWdodD0zRCcxNicgYWxpZ249M0QnbWlkZGxlJyBzcmM9M0QnIitnYWxheHlfY29u ZmlnLnI9Cm9vdCsic3RhdGljL2ltYWdlcy9sb2FkaW5nX3NtYWxsX3doaXRlX2JnLmdpZicvPiBs b2FkaW5nIHRvb2wgaW5mby4uLjwvZGl2Pj0KIjttLmFwcGVuZChoKTtnLmZvcm1faHRtbD0zRGg7 aS5hcHBlbmQobSk7dmFyIGs9M0QkKCI8ZGl2IGNsYXNzPTNEJ2J1dHRvbnMnPQogc3R5bGU9M0Qn ZmxvYXQ6IHJpZ2h0Oyc+PC9kaXY+Iik7ay5hcHBlbmQoJCgiPGRpdj4iKS5hZGRDbGFzcygiZmEt aWNvbi1idXQ9CnRvbiBmYSBmYS10aW1lcyIpLmNsaWNrKGZ1bmN0aW9uKGIpe2cuZGVzdHJveSgp fSkpO2kuYXBwZW5kVG8oIiNjYW52YXMtY29udD0KYWluZXIiKTt2YXIgZD0zRCQoIiNjYW52YXMt Y29udGFpbmVyIikucG9zaXRpb24oKTt2YXIgYz0zRCQoIiNjYW52YXMtY29udGFpPQpuZXIiKS5w YXJlbnQoKTt2YXIgYT0zRGkud2lkdGgoKTt2YXIgcT0zRGkuaGVpZ2h0KCk7aS5jc3Moe2xlZnQ6 KC1kLmxlZnQpKyg9CmMud2lkdGgoKS8yKS0oYS8yKSx0b3A6KC1kLnRvcCkrKGMuaGVpZ2h0KCkv MiktKHEvMil9KTtrLnByZXBlbmRUbyhuKTthKz0zRD0KKGsud2lkdGgoKSsxMCk7aS5jc3MoIndp ZHRoIixhKTskKGkpLmJpbmQoImRyYWdzdGFydCIsZnVuY3Rpb24oKXt3b3JrZmxvdy5hPQpjdGl2 YXRlX25vZGUoZyl9KS5iaW5kKCJkcmFnZW5kIixmdW5jdGlvbigpe3dvcmtmbG93Lm5vZGVfY2hh bmdlZCh0aGlzKTt3b3I9CmtmbG93LmZpdF9jYW52YXNfdG9fbm9kZXMoKTtjYW52YXNfbWFuYWdl ci5kcmF3X292ZXJ2aWV3KCl9KS5iaW5kKCJkcmFnY2xpYz0Ka29ubHkiLGZ1bmN0aW9uKCl7d29y a2Zsb3cuYWN0aXZhdGVfbm9kZShnKX0pLmJpbmQoImRyYWciLGZ1bmN0aW9uKG8scCl7dmFyPQog Zj0zRCQodGhpcykub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksYj0zRHAub2Zmc2V0WC1mLmxlZnQs cz0zRHAub2Zmc2V0WS1mLnQ9Cm9wOyQodGhpcykuY3NzKHtsZWZ0OmIsdG9wOnN9KTskKHRoaXMp LmZpbmQoIi50ZXJtaW5hbCIpLmVhY2goZnVuY3Rpb24oKXt0aD0KaXMudGVybWluYWwucmVkcmF3 KCl9KX0pO3JldHVybiBnfWZ1bmN0aW9uIGFkZF9ub2RlKGIsZCxhKXt2YXIgYz0zRHByZWJ1aWxk PQpfbm9kZShiLGQsYSk7d29ya2Zsb3cuYWRkX25vZGUoYyk7d29ya2Zsb3cuZml0X2NhbnZhc190 b19ub2RlcygpO2NhbnZhc19tYW49CmFnZXIuZHJhd19vdmVydmlldygpO3dvcmtmbG93LmFjdGl2 YXRlX25vZGUoYyk7cmV0dXJuIGN9dmFyIGV4dF90b190eXBlPTNEbj0KdWxsO3ZhciB0eXBlX3Rv X3R5cGU9M0RudWxsO2Z1bmN0aW9uIGlzc3VidHlwZShiLGEpe2I9M0RleHRfdG9fdHlwZVtiXTth PTNEPQpleHRfdG9fdHlwZVthXTtyZXR1cm4odHlwZV90b190eXBlW2JdKSYmKGEgaW4gdHlwZV90 b190eXBlW2JdKX1mdW5jdGlvbiBwb3A9CnVsYXRlX2RhdGF0eXBlX2luZm8oYSl7ZXh0X3RvX3R5 cGU9M0RhLmV4dF90b19jbGFzc19uYW1lO3R5cGVfdG9fdHlwZT0zRGEuYz0KbGFzc190b19jbGFz c2VzfXZhciBOb2RlVmlldz0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0 aW9uKGEpPQp7dGhpcy5ub2RlPTNEYS5ub2RlO3RoaXMub3V0cHV0X3dpZHRoPTNETWF0aC5tYXgo MTUwLHRoaXMuJGVsLndpZHRoKCkpO3RoaXM9Ci50b29sX2JvZHk9M0R0aGlzLiRlbC5maW5kKCIu dG9vbEZvcm1Cb2R5Iik7dGhpcy50b29sX2JvZHkuZmluZCgiZGl2IikucmVtbz0KdmUoKTt0aGlz Lm5ld0lucHV0c0RpdigpLmFwcGVuZFRvKHRoaXMudG9vbF9ib2R5KTt0aGlzLnRlcm1pbmFsVmll d3M9M0R7fTt0PQpoaXMub3V0cHV0VGVybWlubFZpZXdzPTNEe319LHJlbmRlcjpmdW5jdGlvbigp e3RoaXMucmVuZGVyVG9vbEVycm9ycygpO3RoaXM9Ci4kZWwuY3NzKCJ3aWR0aCIsTWF0aC5taW4o MjUwLE1hdGgubWF4KHRoaXMuJGVsLndpZHRoKCksdGhpcy5vdXRwdXRfd2lkdGgpKT0KKX0scmVu ZGVyVG9vbEVycm9yczpmdW5jdGlvbigpe2lmKHRoaXMubm9kZS50b29sX2Vycm9ycyl7dGhpcy4k ZWwuYWRkQ2xhc3MoPQoidG9vbC1ub2RlLWVycm9yIil9ZWxzZXt0aGlzLiRlbC5yZW1vdmVDbGFz cygidG9vbC1ub2RlLWVycm9yIil9fSxuZXdJbnB1dHM9CkRpdjpmdW5jdGlvbigpe3JldHVybiAk KCI8ZGl2IGNsYXNzPTNEJ2lucHV0cyc+PC9kaXY+Iil9LHVwZGF0ZU1heFdpZHRoOmZ1bj0KY3Rp b24oYSl7dGhpcy5vdXRwdXRfd2lkdGg9M0RNYXRoLm1heCh0aGlzLm91dHB1dF93aWR0aCxhKX0s YWRkUnVsZTpmdW5jdGlvPQpuKCl7dGhpcy50b29sX2JvZHkuYXBwZW5kKCQoIjxkaXYgY2xhc3M9 M0QncnVsZSc+PC9kaXY+IikpfSxhZGREYXRhSW5wdXQ6ZnU9Cm5jdGlvbihpLGQpe3ZhciBqPTNE dHJ1ZTtpZighZCl7ZD0zRHRoaXMuJCgiLmlucHV0cyIpO2o9M0RmYWxzZX12YXIgZj0zRHRoaT0K cy50ZXJtaW5hbFZpZXdzW2kubmFtZV07dmFyIGg9M0QoaS5pbnB1dF90eXBlPTNEPTNEImRhdGFz ZXRfY29sbGVjdGlvbiIpP0luPQpwdXRDb2xsZWN0aW9uVGVybWluYWxWaWV3OklucHV0VGVybWlu YWxWaWV3O2lmKGYmJiEoZiBpbnN0YW5jZW9mIGgpKXtmLmVsLnQ9CmVybWluYWwuZGVzdHJveSgp O2Y9M0RudWxsfWlmKCFmKXtmPTNEbmV3IGgoe25vZGU6dGhpcy5ub2RlLGlucHV0Oml9KX1lbHNl ez0KdmFyIGc9M0RmLmVsLnRlcm1pbmFsO2cudXBkYXRlKGkpO2cuZGVzdHJveUludmFsaWRDb25u ZWN0aW9ucygpfXRoaXMudGVybWluPQphbFZpZXdzW2kubmFtZV09M0RmO3ZhciBjPTNEZi5lbDt2 YXIgYj0zRG5ldyBEYXRhSW5wdXRWaWV3KHt0ZXJtaW5hbEVsZW1lbnQ9CjpjLGlucHV0Omksbm9k ZVZpZXc6dGhpcyxza2lwUmVzaXplOmp9KTt2YXIgYT0zRGIuJGVsO2QuYXBwZW5kKGEucHJlcGVu ZChmLj0KdGVybWluYWxFbGVtZW50cygpKSk7cmV0dXJuIGZ9LGFkZERhdGFPdXRwdXQ6ZnVuY3Rp b24oYSl7dmFyIGQ9M0QoYS5jb2xsZWN0PQppb25fdHlwZSk/T3V0cHV0Q29sbGVjdGlvblRlcm1p bmFsVmlldzpPdXRwdXRUZXJtaW5hbFZpZXc7dmFyIGM9M0RuZXcgZCh7bm89CmRlOnRoaXMubm9k ZSxvdXRwdXQ6YX0pO3ZhciBiPTNEbmV3IERhdGFPdXRwdXRWaWV3KHtvdXRwdXQ6YSx0ZXJtaW5h bEVsZW1lbj0KdDpjLmVsLG5vZGVWaWV3OnRoaXMsfSk7dGhpcy50b29sX2JvZHkuYXBwZW5kKGIu JGVsLmFwcGVuZChjLnRlcm1pbmFsRWxlbWVuPQp0cygpKSl9LHVwZGF0ZURhdGFPdXRwdXQ6ZnVu Y3Rpb24oYil7dmFyIGE9M0R0aGlzLm5vZGUub3V0cHV0X3Rlcm1pbmFsc1tiLm49CmFtZV07YS51 cGRhdGUoYil9fSk7dmFyIERhdGFJbnB1dFZpZXc9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Y2xh c3NOYW1lOiJmbz0Kcm0tcm93IGRhdGFSb3cgaW5wdXQtZGF0YS1yb3ciLGluaXRpYWxpemU6ZnVu Y3Rpb24oYSl7dGhpcy5pbnB1dD0zRGEuaW5wdXQ7PQp0aGlzLm5vZGVWaWV3PTNEYS5ub2RlVmll dzt0aGlzLnRlcm1pbmFsRWxlbWVudD0zRGEudGVybWluYWxFbGVtZW50O3RoaXMuJGU9CmwuYXR0 cigibmFtZSIsdGhpcy5pbnB1dC5uYW1lKS5odG1sKHRoaXMuaW5wdXQubGFiZWwpO2lmKCFhLnNr aXBSZXNpemUpe3RoaT0Kcy4kZWwuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6LTEwMDAs dG9wOi0xMDAwLGRpc3BsYXk6Im5vbmUifSk7JCgiYm9kPQp5IikuYXBwZW5kKHRoaXMuZWwpO3Ro aXMubm9kZVZpZXcudXBkYXRlTWF4V2lkdGgodGhpcy4kZWwub3V0ZXJXaWR0aCgpKTt0aGk9CnMu JGVsLmNzcyh7cG9zaXRpb246IiIsbGVmdDoiIix0b3A6IiIsZGlzcGxheToiIn0pO3RoaXMuJGVs LnJlbW92ZSgpfX0sfSk7dj0KYXIgT3V0cHV0Q2FsbG91dFZpZXc9M0RCYWNrYm9uZS5WaWV3LmV4 dGVuZCh7dGFnTmFtZToiZGl2Iixpbml0aWFsaXplOmZ1bmN0PQppb24oYil7dGhpcy5sYWJlbD0z RGIubGFiZWw7dGhpcy5ub2RlPTNEYi5ub2RlO3RoaXMub3V0cHV0PTNEYi5vdXRwdXQ7dmFyIGE9 Cj0zRHRoaXM7dGhpcy4kZWwuYXR0cigiY2xhc3MiLCJjYWxsb3V0ICIrdGhpcy5sYWJlbCkuY3Nz KHtkaXNwbGF5OiJub25lIn0pLj0KYXBwZW5kKCQoIjxkaXYgY2xhc3M9M0QnYnV0dG9ucyc+PC9k aXY+IikuYXBwZW5kKCQoIjxpbWcvPiIpLmF0dHIoInNyYyIsZ2FsPQpheHlfY29uZmlnLnJvb3Qr InN0YXRpYy9pbWFnZXMvZnVndWUvYXN0ZXJpc2stc21hbGwtb3V0bGluZS5wbmciKS5jbGljayhm dW49CmN0aW9uKCl7aWYoJC5pbkFycmF5KGEub3V0cHV0Lm5hbWUsYS5ub2RlLndvcmtmbG93X291 dHB1dHMpIT0zRC0xKXthLm5vZGUudz0Kb3JrZmxvd19vdXRwdXRzLnNwbGljZSgkLmluQXJyYXko YS5vdXRwdXQubmFtZSxhLm5vZGUud29ya2Zsb3dfb3V0cHV0cyksMSk7PQphLiQoImltZyIpLmF0 dHIoInNyYyIsZ2FsYXh5X2NvbmZpZy5yb290KyJzdGF0aWMvaW1hZ2VzL2Z1Z3VlL2FzdGVyaXNr LXNtYWw9Cmwtb3V0bGluZS5wbmciKX1lbHNle2Eubm9kZS53b3JrZmxvd19vdXRwdXRzLnB1c2go YS5vdXRwdXQubmFtZSk7YS4kKCJpbWciKT0KLmF0dHIoInNyYyIsZ2FsYXh5X2NvbmZpZy5yb290 KyJzdGF0aWMvaW1hZ2VzL2Z1Z3VlL2FzdGVyaXNrLXNtYWxsLnBuZyIpfXdvPQpya2Zsb3cuaGFz X2NoYW5nZXM9M0R0cnVlO2NhbnZhc19tYW5hZ2VyLmRyYXdfb3ZlcnZpZXcoKX0pKSkudG9vbHRp cCh7ZGVsYXk9Cjo1MDAsdGl0bGU6Ik1hcmsgZGF0YXNldCBhcyBhIHdvcmtmbG93IG91dHB1dC4g QWxsIHVubWFya2VkIGRhdGFzZXRzIHdpbGwgYj0KZSBoaWRkZW4uIn0pO3RoaXMuJGVsLmNzcyh7 dG9wOiI1MCUiLG1hcmdpbjoiLThweCAwcHggMHB4IDBweCIscmlnaHQ6OH0pO3RoPQppcy4kZWwu c2hvdygpO3RoaXMucmVzZXRJbWFnZSgpfSxyZXNldEltYWdlOmZ1bmN0aW9uKCl7aWYoJC5pbkFy cmF5KHRoaXMub3U9CnRwdXQubmFtZSx0aGlzLm5vZGUud29ya2Zsb3dfb3V0cHV0cyk9M0Q9M0Q9 M0QtMSl7dGhpcy4kKCJpbWciKS5hdHRyKCJzcmMiLD0KZ2FsYXh5X2NvbmZpZy5yb290KyJzdGF0 aWMvaW1hZ2VzL2Z1Z3VlL2FzdGVyaXNrLXNtYWxsLW91dGxpbmUucG5nIil9ZWxzZXt0PQpoaXMu JCgiaW1nIikuYXR0cigic3JjIixnYWxheHlfY29uZmlnLnJvb3QrInN0YXRpYy9pbWFnZXMvZnVn dWUvYXN0ZXJpc2stc209CmFsbC5wbmciKX19LGhvdmVySW1hZ2U6ZnVuY3Rpb24oKXt0aGlzLiQo ImltZyIpLmF0dHIoInNyYyIsZ2FsYXh5X2NvbmZpZy5ybz0Kb3QrInN0YXRpYy9pbWFnZXMvZnVn dWUvYXN0ZXJpc2stc21hbGwteWVsbG93LnBuZyIpfX0pO3ZhciBEYXRhT3V0cHV0Vmlldz0KPTNE QmFja2JvbmUuVmlldy5leHRlbmQoe2NsYXNzTmFtZToiZm9ybS1yb3cgZGF0YVJvdyIsaW5pdGlh bGl6ZTpmdW5jdGlvbihjPQope3RoaXMub3V0cHV0PTNEYy5vdXRwdXQ7dGhpcy50ZXJtaW5hbEVs ZW1lbnQ9M0RjLnRlcm1pbmFsRWxlbWVudDt0aGlzLm5vZGU9ClZpZXc9M0RjLm5vZGVWaWV3O3Zh ciBhPTNEdGhpcy5vdXRwdXQ7dmFyIGI9M0RhLm5hbWU7dmFyIGY9M0R0aGlzLm5vZGVWaWV3Lj0K bm9kZTt2YXIgZD0zRGEuZXh0ZW5zaW9ucy5pbmRleE9mKCJpbnB1dCIpPj0zRDB8fGEuZXh0ZW5z aW9ucy5pbmRleE9mKCJpbnB1PQp0X2NvbGxlY3Rpb24iKT49M0QwO2lmKCFkKXtiPTNEYisiICgi K2EuZXh0ZW5zaW9ucy5qb2luKCIsICIpKyIpIn10aGlzLiRlbC49Cmh0bWwoYik7aWYoZi50eXBl PTNEPTNEInRvb2wiKXt2YXIgZz0zRG5ldyBPdXRwdXRDYWxsb3V0Vmlldyh7bGFiZWw6YixvdXRw dT0KdDphLG5vZGU6Zix9KTt0aGlzLiRlbC5hcHBlbmQoZy5lbCk7dGhpcy4kZWwuaG92ZXIoZnVu Y3Rpb24oKXtnLmhvdmVySW1hZ2UoPQopfSxmdW5jdGlvbigpe2cucmVzZXRJbWFnZSgpfSl9dGhp cy4kZWwuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6LTEwMDA9Cix0b3A6LTEwMDAsZGlz cGxheToibm9uZSJ9KTskKCJib2R5IikuYXBwZW5kKHRoaXMuZWwpO3RoaXMubm9kZVZpZXcudXBk YXRlTT0KYXhXaWR0aCh0aGlzLiRlbC5vdXRlcldpZHRoKCkrMTcpO3RoaXMuJGVsLmNzcyh7cG9z aXRpb246IiIsbGVmdDoiIix0b3A6IiIsPQpkaXNwbGF5OiIifSkuZGV0YWNoKCl9fSk7dmFyIFRl cm1pbmFsVmlldz0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtzZXR1cE1hcHA9CmluZ1ZpZXc6ZnVu Y3Rpb24oYil7dmFyIGM9M0RuZXcgdGhpcy50ZXJtaW5hbE1hcHBpbmdDbGFzcyh7dGVybWluYWw6 Yn0pO3Zhcj0KIGE9M0RuZXcgdGhpcy50ZXJtaW5hbE1hcHBpbmdWaWV3Q2xhc3Moe21vZGVsOmN9 KTthLnJlbmRlcigpO2IudGVybWluYWxNYXBwPQppbmdWaWV3PTNEYTt0aGlzLnRlcm1pbmFsTWFw cGluZ1ZpZXc9M0RhfSx0ZXJtaW5hbEVsZW1lbnRzOmZ1bmN0aW9uKCl7aWYodGg9CmlzLnRlcm1p bmFsTWFwcGluZ1ZpZXcpe3JldHVyblt0aGlzLnRlcm1pbmFsTWFwcGluZ1ZpZXcuZWwsdGhpcy5l bF19ZWxzZXtyZT0KdHVyblt0aGlzLmVsXX19fSk7dmFyIEJhc2VJbnB1dFRlcm1pbmFsVmlldz0z RFRlcm1pbmFsVmlldy5leHRlbmQoe2NsYXNzTmFtPQplOiJ0ZXJtaW5hbCBpbnB1dC10ZXJtaW5h bCIsaW5pdGlhbGl6ZTpmdW5jdGlvbihjKXt2YXIgZj0zRGMubm9kZTt2YXIgYT0zRGM9Ci5pbnB1 dDt2YXIgYj0zRGEubmFtZTt2YXIgZD0zRHRoaXMudGVybWluYWxGb3JJbnB1dChhKTtpZighZC5t dWx0aXBsZSl7dGhpcz0KLnNldHVwTWFwcGluZ1ZpZXcoZCl9dGhpcy5lbC50ZXJtaW5hbD0zRGQ7 ZC5ub2RlPTNEZjtkLm5hbWU9M0RiO2YuaW5wdXRfdGVyPQptaW5hbHNbYl09M0RkfSxldmVudHM6 e2Ryb3Bpbml0OiJvbkRyb3BJbml0Iixkcm9wc3RhcnQ6Im9uRHJvcFN0YXJ0Iixkcm9wZW49CmQ6 Im9uRHJvcEVuZCIsZHJvcDoib25Ecm9wIixob3Zlcjoib25Ib3ZlciIsfSxvbkRyb3BJbml0OmZ1 bmN0aW9uKGIsYyl7dmFyID0KYT0zRHRoaXMuZWwudGVybWluYWw7cmV0dXJuICQoYy5kcmFnKS5o YXNDbGFzcygib3V0cHV0LXRlcm1pbmFsIikmJmEuY2FuQWNjPQplcHQoYy5kcmFnLnRlcm1pbmFs KX0sb25Ecm9wU3RhcnQ6ZnVuY3Rpb24oYSxiKXtpZihiLnByb3h5LnRlcm1pbmFsKXtiLnByb3g9 CnkudGVybWluYWwuY29ubmVjdG9yc1swXS5pbm5lcl9jb2xvcj0zRCIjQkJGRkJCIn19LG9uRHJv cEVuZDpmdW5jdGlvbihhLGIpez0KaWYoYi5wcm94eS50ZXJtaW5hbCl7Yi5wcm94eS50ZXJtaW5h bC5jb25uZWN0b3JzWzBdLmlubmVyX2NvbG9yPTNEIiNGRkZGRkYiPQp9fSxvbkRyb3A6ZnVuY3Rp b24oYixjKXt2YXIgYT0zRHRoaXMuZWwudGVybWluYWw7bmV3IENvbm5lY3RvcihjLmRyYWcudGVy bWk9Cm5hbCxhKS5yZWRyYXcoKX0sb25Ib3ZlcjpmdW5jdGlvbigpe3ZhciBjPTNEdGhpcy5lbDt2 YXIgYj0zRGMudGVybWluYWw7aWYoYj0KLmNvbm5lY3RvcnMubGVuZ3RoPjApe3ZhciBhPTNEJCgi PGRpdiBjbGFzcz0zRCdjYWxsb3V0Jz48L2Rpdj4iKS5jc3Moe2Rpc3BsPQpheToibm9uZSJ9KS5h cHBlbmRUbygiYm9keSIpLmFwcGVuZCgkKCI8ZGl2IGNsYXNzPTNEJ2J1dHRvbic+PC9kaXY+Iiku YXBwZW49CmQoJCgiPGRpdi8+IikuYWRkQ2xhc3MoImZhLWljb24tYnV0dG9uIGZhIGZhLXRpbWVz IikuY2xpY2soZnVuY3Rpb24oKXskLmVhYz0KaChiLmNvbm5lY3RvcnMsZnVuY3Rpb24oZixkKXtp ZihkKXtkLmRlc3Ryb3koKX19KTthLnJlbW92ZSgpfSkpKS5iaW5kKCJtb3VzPQplbGVhdmUiLGZ1 bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pO2EuY3NzKHt0b3A6JChjKS5vZmZzZXQoKS50b3At MixsZWZ0OiQ9CihjKS5vZmZzZXQoKS5sZWZ0LWEud2lkdGgoKSwicGFkZGluZy1yaWdodCI6JChj KS53aWR0aCgpfSkuc2hvdygpfX0sfSk7dmFyID0KSW5wdXRUZXJtaW5hbFZpZXc9M0RCYXNlSW5w dXRUZXJtaW5hbFZpZXcuZXh0ZW5kKHt0ZXJtaW5hbE1hcHBpbmdDbGFzczpJbnB1PQp0VGVybWlu YWxNYXBwaW5nLHRlcm1pbmFsTWFwcGluZ1ZpZXdDbGFzczpJbnB1dFRlcm1pbmFsTWFwcGluZ1Zp ZXcsdGVybWluYWw9CkZvcklucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSW5wdXRUZXJtaW5h bCh7ZWxlbWVudDp0aGlzLmVsLGlucHV0OmF9KX0sfT0KKTt2YXIgSW5wdXRDb2xsZWN0aW9uVGVy bWluYWxWaWV3PTNEQmFzZUlucHV0VGVybWluYWxWaWV3LmV4dGVuZCh7dGVybWluYWxNPQphcHBp bmdDbGFzczpJbnB1dENvbGxlY3Rpb25UZXJtaW5hbE1hcHBpbmcsdGVybWluYWxNYXBwaW5nVmll d0NsYXNzOklucHV0Q289CmxsZWN0aW9uVGVybWluYWxNYXBwaW5nVmlldyx0ZXJtaW5hbEZvcklu cHV0OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSW5wdXRDbz0KbGxlY3Rpb25UZXJtaW5hbCh7ZWxl bWVudDp0aGlzLmVsLGlucHV0OmF9KX0sfSk7dmFyIEJhc2VPdXRwdXRUZXJtaW5hbFZpZXc9Cj0z RFRlcm1pbmFsVmlldy5leHRlbmQoe2NsYXNzTmFtZToidGVybWluYWwgb3V0cHV0LXRlcm1pbmFs Iixpbml0aWFsaXplOmZ1bj0KY3Rpb24oYyl7dmFyIGY9M0RjLm5vZGU7dmFyIGE9M0RjLm91dHB1 dDt2YXIgYj0zRGEubmFtZTt2YXIgZD0zRHRoaXMudGVybWluPQphbEZvck91dHB1dChhKTt0aGlz LnNldHVwTWFwcGluZ1ZpZXcoZCk7dGhpcy5lbC50ZXJtaW5hbD0zRGQ7ZC5ub2RlPTNEZjtkLm49 CmFtZT0zRGI7Zi5vdXRwdXRfdGVybWluYWxzW2JdPTNEZH0sZXZlbnRzOntkcmFnOiJvbkRyYWci LGRyYWdzdGFydDoib25EcmFnUz0KdGFydCIsZHJhZ2VuZDoib25EcmFnRW5kIix9LG9uRHJhZzpm dW5jdGlvbihiLGMpe3ZhciBhPTNEZnVuY3Rpb24oKXt2YXIgZj0KPTNEJChjLnByb3h5KS5vZmZz ZXRQYXJlbnQoKS5vZmZzZXQoKSxkPTNEYy5vZmZzZXRYLWYubGVmdCxnPTNEYy5vZmZzZXRZLWYu PQp0b3A7JChjLnByb3h5KS5jc3Moe2xlZnQ6ZCx0b3A6Z30pO2MucHJveHkudGVybWluYWwucmVk cmF3KCk7Y2FudmFzX21hbmFnZXI9Ci51cGRhdGVfdmlld3BvcnRfb3ZlcmxheSgpfTthKCk7JCgi I2NhbnZhcy1jb250YWluZXIiKS5nZXQoMCkuc2Nyb2xsX3BhbmVsLj0KdGVzdChiLGEpfSxvbkRy YWdTdGFydDpmdW5jdGlvbihiLGYpeyQoZi5hdmFpbGFibGUpLmFkZENsYXNzKCJpbnB1dC10ZXJt aW5hPQpsLWFjdGl2ZSIpO3dvcmtmbG93LmNoZWNrX2NoYW5nZXNfaW5fYWN0aXZlX2Zvcm0oKTt2 YXIgYT0zRCQoJzxkaXYgY2xhc3M9M0Q9CiJkcmFnLXRlcm1pbmFsIiBzdHlsZT0zRCJwb3NpdGlv bjogYWJzb2x1dGU7Ij48L2Rpdj4nKS5hcHBlbmRUbygiI2NhbnZhcy1jbz0KbnRhaW5lciIpLmdl dCgwKTthLnRlcm1pbmFsPTNEbmV3IE91dHB1dFRlcm1pbmFsKHtlbGVtZW50OmF9KTt2YXIgZz0z RG5ldyBDPQpvbm5lY3RvcigpO2cuZHJhZ2dpbmc9M0R0cnVlO2cuY29ubmVjdCh0aGlzLmVsLnRl cm1pbmFsLGEudGVybWluYWwpO3JldHVybiA9CmF9LG9uRHJhZ0VuZDpmdW5jdGlvbihiLGMpe3Zh ciBhPTNEYy5wcm94eS50ZXJtaW5hbC5jb25uZWN0b3JzWzBdO2lmKGEpe2EuZD0KZXN0cm95KCl9 JChjLnByb3h5KS5yZW1vdmUoKTskKGMuYXZhaWxhYmxlKS5yZW1vdmVDbGFzcygiaW5wdXQtdGVy bWluYWwtYWN0PQppdmUiKTskKCIjY2FudmFzLWNvbnRhaW5lciIpLmdldCgwKS5zY3JvbGxfcGFu ZWwuc3RvcCgpfX0pO3ZhciBPdXRwdXRUZXJtaW49CmFsVmlldz0zREJhc2VPdXRwdXRUZXJtaW5h bFZpZXcuZXh0ZW5kKHt0ZXJtaW5hbE1hcHBpbmdDbGFzczpPdXRwdXRUZXJtaW5hbD0KTWFwcGlu Zyx0ZXJtaW5hbE1hcHBpbmdWaWV3Q2xhc3M6T3V0cHV0VGVybWluYWxNYXBwaW5nVmlldyx0ZXJt aW5hbEZvck91dHB1PQp0OmZ1bmN0aW9uKGEpe3ZhciBjPTNEYS5leHRlbnNpb25zO3ZhciBiPTNE bmV3IE91dHB1dFRlcm1pbmFsKHtlbGVtZW50OnRoaXM9Ci5lbCxkYXRhdHlwZXM6Y30pO3JldHVy biBifSx9KTt2YXIgT3V0cHV0Q29sbGVjdGlvblRlcm1pbmFsVmlldz0zREJhc2VPdXRwdT0KdFRl cm1pbmFsVmlldy5leHRlbmQoe3Rlcm1pbmFsTWFwcGluZ0NsYXNzOk91dHB1dENvbGxlY3Rpb25U ZXJtaW5hbE1hcHBpbmcsPQp0ZXJtaW5hbE1hcHBpbmdWaWV3Q2xhc3M6T3V0cHV0Q29sbGVjdGlv blRlcm1pbmFsTWFwcGluZ1ZpZXcsdGVybWluYWxGb3JPdXQ9CnB1dDpmdW5jdGlvbihhKXt2YXIg Yz0zRGEuY29sbGVjdGlvbl90eXBlO3ZhciBiPTNEbmV3IE91dHB1dENvbGxlY3Rpb25UZXJtaT0K bmFsKHtlbGVtZW50OnRoaXMuZWwsY29sbGVjdGlvbl90eXBlOmMsZGF0YXR5cGVzOmEuZXh0ZW5z aW9uc30pO3JldHVybiBifSx9PQopO2Z1bmN0aW9uIFNjcm9sbFBhbmVsKGEpe3RoaXMucGFuZWw9 M0RhfSQuZXh0ZW5kKFNjcm9sbFBhbmVsLnByb3RvdHlwZSx7dGU9CnN0OmZ1bmN0aW9uKHYsZCl7 Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dmFyIGs9M0R2LnBhZ2VYLGo9M0R2LnBhZ2VZLGw9 Cj0zRCQodGhpcy5wYW5lbCksYz0zRGwucG9zaXRpb24oKSxiPTNEbC53aWR0aCgpLGk9M0RsLmhl aWdodCgpLHc9M0RsLnBhcmVudD0KKCkscz0zRHcud2lkdGgoKSxhPTNEdy5oZWlnaHQoKSxyPTNE dy5vZmZzZXQoKSxwPTNEci5sZWZ0LG09M0RyLnRvcCxBPTNEcCt3PQoud2lkdGgoKSx1PTNEbSt3 LmhlaWdodCgpLEI9M0QtKGItKHMvMikpLHo9M0QtKGktKGEvMikpLGc9M0Qocy8yKSxmPTNEKGEv Mik9CixoPTNEZmFsc2UscT0zRDUsbz0zRDIzO2lmKGstcTxwKXtpZihjLmxlZnQ8Zyl7dmFyIG49 M0RNYXRoLm1pbihvLGctYy5sZWZ0KT0KO2wuY3NzKCJsZWZ0IixjLmxlZnQrbik7aD0zRHRydWV9 fWVsc2V7aWYoaytxPkEpe2lmKGMubGVmdD5CKXt2YXIgbj0zRE1hdGguPQptaW4obyxjLmxlZnQt Qik7bC5jc3MoImxlZnQiLGMubGVmdC1uKTtoPTNEdHJ1ZX19ZWxzZXtpZihqLXE8bSl7aWYoYy50 b3A8Zik9Cnt2YXIgbj0zRE1hdGgubWluKG8sZi1jLnRvcCk7bC5jc3MoInRvcCIsYy50b3Arbik7 aD0zRHRydWV9fWVsc2V7aWYoaitxPnUpez0KaWYoYy50b3A+eil7dmFyIG49M0RNYXRoLm1pbihv LGMudG9wLUIpO2wuY3NzKCJ0b3AiLChjLnRvcC1uKSsicHgiKTtoPTNEdHJ1PQplfX19fX1pZiho KXtkKCk7dmFyIGw9M0R0aGlzO3RoaXMudGltZW91dD0zRHNldFRpbWVvdXQoZnVuY3Rpb24oKXts LnRlc3Qodiw9CmQpfSw1MCl9fSxzdG9wOmZ1bmN0aW9uKGIsYSl7Y2xlYXJUaW1lb3V0KHRoaXMu dGltZW91dCl9fSk7ZnVuY3Rpb24gQ2FudmFzTT0KYW5hZ2VyKGIsYSl7dGhpcy5jdj0zRGI7dGhp cy5jYz0zRHRoaXMuY3YuZmluZCgiI2NhbnZhcy1jb250YWluZXIiKTt0aGlzLm9jPQo9M0RhLmZp bmQoIiNvdmVydmlldy1jYW52YXMiKTt0aGlzLm92PTNEYS5maW5kKCIjb3ZlcnZpZXctdmlld3Bv cnQiKTt0aGlzLmk9Cm5pdF9kcmFnKCl9JC5leHRlbmQoQ2FudmFzTWFuYWdlci5wcm90b3R5cGUs e2luaXRfZHJhZzpmdW5jdGlvbigpe3ZhciBiPTNEdD0KaGlzO3ZhciBhPTNEZnVuY3Rpb24oZixn KXtmPTNETWF0aC5taW4oZixiLmN2LndpZHRoKCkvMik7Zj0zRE1hdGgubWF4KGYsLWIuPQpjYy53 aWR0aCgpK2IuY3Yud2lkdGgoKS8yKTtnPTNETWF0aC5taW4oZyxiLmN2LmhlaWdodCgpLzIpO2c9 M0RNYXRoLm1heChnLC09CmIuY2MuaGVpZ2h0KCkrYi5jdi5oZWlnaHQoKS8yKTtiLmNjLmNzcyh7 bGVmdDpmLHRvcDpnfSk7Yi51cGRhdGVfdmlld3BvcnRfbz0KdmVybGF5KCl9O3RoaXMuY2MuZWFj aChmdW5jdGlvbigpe3RoaXMuc2Nyb2xsX3BhbmVsPTNEbmV3IFNjcm9sbFBhbmVsKHRoaXMpPQp9 KTt2YXIgZCxjO3RoaXMuY3YuYmluZCgiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe3ZhciBnPTNEJCh0 aGlzKS5vZmZzZXQoKTt2YXI9CiBmPTNEYi5jYy5wb3NpdGlvbigpO2M9M0RmLnRvcC1nLnRvcDtk PTNEZi5sZWZ0LWcubGVmdH0pLmJpbmQoImRyYWciLGZ1bmN0aT0Kb24oZixnKXthKGcub2Zmc2V0 WCtkLGcub2Zmc2V0WStjKX0pLmJpbmQoImRyYWdlbmQiLGZ1bmN0aW9uKCl7d29ya2Zsb3cuZml0 PQpfY2FudmFzX3RvX25vZGVzKCk7Yi5kcmF3X292ZXJ2aWV3KCl9KTt0aGlzLm92LmJpbmQoImRy YWciLGZ1bmN0aW9uKGssbCl7dmE9CnIgaD0zRGIuY2Mud2lkdGgoKSxuPTNEYi5jYy5oZWlnaHQo KSxtPTNEYi5vYy53aWR0aCgpLGo9M0RiLm9jLmhlaWdodCgpLGY9Cj0zRCQodGhpcykub2Zmc2V0 UGFyZW50KCkub2Zmc2V0KCksaT0zRGwub2Zmc2V0WC1mLmxlZnQsZz0zRGwub2Zmc2V0WS1mLnRv cD0KO2EoLShpL20qaCksLShnL2oqbikpfSkuYmluZCgiZHJhZ2VuZCIsZnVuY3Rpb24oKXt3b3Jr Zmxvdy5maXRfY2FudmFzX3RvX25vPQpkZXMoKTtiLmRyYXdfb3ZlcnZpZXcoKX0pOyQoIiNvdmVy dmlldy1ib3JkZXIiKS5iaW5kKCJkcmFnIixmdW5jdGlvbihnLGkpe3Y9CmFyIGo9M0QkKHRoaXMp Lm9mZnNldFBhcmVudCgpO3ZhciBoPTNEai5vZmZzZXQoKTt2YXIgZj0zRE1hdGgubWF4KGoud2lk dGgoKT0KLShpLm9mZnNldFgtaC5sZWZ0KSxqLmhlaWdodCgpLShpLm9mZnNldFktaC50b3ApKTsk KHRoaXMpLmNzcyh7d2lkdGg6ZixoZWlnPQpodDpmfSk7Yi5kcmF3X292ZXJ2aWV3KCl9KTskKCIj b3ZlcnZpZXctYm9yZGVyIGRpdiIpLmJpbmQoImRyYWciLGZ1bmN0aW9uKCk9Cnt9KX0sdXBkYXRl X3ZpZXdwb3J0X292ZXJsYXk6ZnVuY3Rpb24oKXt2YXIgYj0zRHRoaXMuY2MsZj0zRHRoaXMuY3Ys YT0zRHRoaT0Kcy5vYyxjPTNEdGhpcy5vdixkPTNEYi53aWR0aCgpLGo9M0RiLmhlaWdodCgpLGk9 M0RhLndpZHRoKCksZz0zRGEuaGVpZ2h0KCksPQpoPTNEYi5wb3NpdGlvbigpO2MuY3NzKHtsZWZ0 Oi0oaC5sZWZ0L2QqaSksdG9wOi0oaC50b3AvaipnKSx3aWR0aDooZi53aWR0aCg9CikvZCppKS0y LGhlaWdodDooZi5oZWlnaHQoKS9qKmcpLTJ9KX0sZHJhd19vdmVydmlldzpmdW5jdGlvbigpe3Zh ciBqPTNEJCgiIz0Kb3ZlcnZpZXctY2FudmFzIiksbT0zRGoucGFyZW50KCkucGFyZW50KCkud2lk dGgoKSxpPTNEai5nZXQoMCkuZ2V0Q29udGV4dCgiPQoyZCIpLGQ9M0QkKCIjY2FudmFzLWNvbnRh aW5lciIpLndpZHRoKCksbD0zRCQoIiNjYW52YXMtY29udGFpbmVyIikuaGVpZ2h0KCk9Cjt2YXIg ZyxhLGssZjt2YXIgaD0zRHRoaXMuY3Yud2lkdGgoKTt2YXIgYj0zRHRoaXMuY3YuaGVpZ2h0KCk7 aWYoZDxoJiZsPGIpez0Kaz0zRGQvaCptO2Y9M0QobS1rKS8yO2c9M0RsL2IqbTthPTNEKG0tZykv Mn1lbHNle2lmKGQ8bCl7YT0zRDA7Zz0zRG07az0zRE1hPQp0aC5jZWlsKGcqZC9sKTtmPTNEKG0t aykvMn1lbHNle2s9M0RtO2Y9M0QwO2c9M0RNYXRoLmNlaWwoaypsL2QpO2E9M0QobS1nKS89CjJ9 fWoucGFyZW50KCkuY3NzKHtsZWZ0OmYsdG9wOmEsd2lkdGg6ayxoZWlnaHQ6Z30pO2ouYXR0cigi d2lkdGgiLGspO2ouYXR0cj0KKCJoZWlnaHQiLGcpOyQuZWFjaCh3b3JrZmxvdy5ub2RlcyxmdW5j dGlvbih0LHEpe2kuZmlsbFN0eWxlPTNEIiNEMkMwOTkiO2kuPQpzdHJva2VTdHlsZT0zRCIjRDhC MzY1IjtpLmxpbmVXaWR0aD0zRDE7dmFyIHM9M0QkKHEuZWxlbWVudCksbj0zRHMucG9zaXRpb249 CigpLGM9M0RuLmxlZnQvZCprLHI9M0RuLnRvcC9sKmcsbz0zRHMud2lkdGgoKS9kKmsscD0zRHMu aGVpZ2h0KCkvbCpnO2lmKHEudD0Kb29sX2Vycm9ycyl7aS5maWxsU3R5bGU9M0QiI0ZGQ0NDQyI7 aS5zdHJva2VTdHlsZT0zRCIjQUE2NjY2In1lbHNle2lmKHEud29yPQprZmxvd19vdXRwdXRzIT0z RHVuZGVmaW5lZCYmcS53b3JrZmxvd19vdXRwdXRzLmxlbmd0aD4wKXtpLmZpbGxTdHlsZT0zRCIj RTg9CkE5MkQiO2kuc3Ryb2tlU3R5bGU9M0QiI0U4QTkyRCJ9fWkuZmlsbFJlY3QoYyxyLG8scCk7 aS5zdHJva2VSZWN0KGMscixvLHApfT0KKTt0aGlzLnVwZGF0ZV92aWV3cG9ydF9vdmVybGF5KCl9 fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFl OTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUw OGMyMmJiMzRiN2ZhNiBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0t YmFzZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0t YmFzZS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0t YmFzZS5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbInV0aWxzL3V0aWxzIiwidXRpbHMvZGVm ZXJyZWQiLCJtdmMvdWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjPQoiLCJtdmMvY2l0YXRp b24vY2l0YXRpb24tbW9kZWwiLCJtdmMvY2l0YXRpb24vY2l0YXRpb24tdmlldyIsIm12Yy90b29s cyIsIm09CnZjL3Rvb2xzL3Rvb2xzLXRlbXBsYXRlIiwibXZjL3Rvb2xzL3Rvb2xzLWNvbnRlbnQi LCJtdmMvdG9vbHMvdG9vbHMtc2VjdGlvbj0KIiwibXZjL3Rvb2xzL3Rvb2xzLXRyZWUiXSxmdW5j dGlvbihnLGgsZixrLGksYSxkLGMsZSxqLGIpe3JldHVybiBCYWNrYm9uZS5WPQppZXcuZXh0ZW5k KHtpbml0aWFsaXplOmZ1bmN0aW9uKGwpe2NvbnNvbGUuZGVidWcobCk7dmFyIG09M0RwYXJlbnQu R2FsYXh5O2k9CmYobSYmbS5tb2RhbCl7dGhpcy5tb2RhbD0zRG0ubW9kYWx9ZWxzZXt0aGlzLm1v ZGFsPTNEbmV3IGsuTW9kYWwuVmlldygpfWlmKD0KbSYmbS5jdXJyVXNlcil7dGhpcy5pc19hZG1p bj0zRG0uY3VyclVzZXIuZ2V0KCJpc19hZG1pbiIpfWVsc2V7dGhpcy5pc19hZG1pPQpuPTNEZmFs c2V9dGhpcy5vcHRpb25zPTNEbDt0aGlzLmNvbnRhaW5lcj0zRHRoaXMub3B0aW9ucy5jb250YWlu ZXJ8fCJib2R5Ijs9CnRoaXMuZGVmZXJyZWQ9M0RuZXcgaCgpO3RoaXMuc2V0RWxlbWVudCgiPGRp di8+Iik7JCh0aGlzLmNvbnRhaW5lcikuYXBwZW5kKD0KdGhpcy4kZWwpO3RoaXMuX2J1aWxkRm9y bSgpfSxyZWNpZXB0OmZ1bmN0aW9uKGwpeyQodGhpcy5jb250YWluZXIpLmVtcHR5KCk7PQokKHRo aXMuY29udGFpbmVyKS5hcHBlbmQobCl9LGhpZ2hsaWdodDpmdW5jdGlvbihtLG4sbCl7dmFyIG89 M0R0aGlzLmVsZW1lbnQ9Cl9saXN0W21dO2lmKG8pe28uZXJyb3Iobnx8IlBsZWFzZSB2ZXJpZnkg dGhpcyBwYXJhbWV0ZXIuIik7aWYoIWwpeyQodGhpcy5jbz0KbnRhaW5lcikuYW5pbWF0ZSh7c2Ny b2xsVG9wOm8uJGVsLm9mZnNldCgpLnRvcC0yMH0sNTAwKX19fSxfYnVpbGRGb3JtOmZ1bmN0PQpp b24oKXt2YXIgbD0zRHRoaXM7dGhpcy5vZmYoInJlZnJlc2giKTt0aGlzLm9mZigicmVzZXQiKTt0 aGlzLmZpZWxkX2xpc3Q9M0Q9Cnt9O3RoaXMuaW5wdXRfbGlzdD0zRHt9O3RoaXMuZWxlbWVudF9s aXN0PTNEe307dGhpcy50cmVlPTNEbmV3IGIodGhpcyk7dGhpcz0KLmNvbnRlbnQ9M0RuZXcgZSh0 aGlzKTt2YXIgbj0zRHRoaXMub3B0aW9uczt0aGlzLl9yZW5kZXJGb3JtKG4pO3RoaXMudHJlZS5m PQppbmFsaXplKCk7aWYoIXRoaXMud29ya2Zsb3cmJm4uZXJyb3JzKXt2YXIgbz0zRHRoaXMudHJl ZS5tYXRjaFJlc3BvbnNlKG4uZXI9CnJvcnMpO2Zvcih2YXIgbSBpbiBvKXt0aGlzLmhpZ2hsaWdo dChtLG9bbV0sdHJ1ZSl9fXRoaXMub24oInJlZnJlc2giLGZ1bmN0aT0Kb24oKXtsLmRlZmVycmVk LnJlc2V0KCk7bC5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7bC5fdXBkYXRlTW9kZWwoKX0p fSk7PQp0aGlzLm9uKCJyZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIHAgaW4gdGhpcy5lbGVtZW50 X2xpc3Qpe3RoaXMuZWxlbWVudF9saXM9CnRbcF0ucmVzZXQoKX19KX0sX3JlbmRlckZvcm06ZnVu Y3Rpb24odSl7dmFyIHQ9M0R0aGlzO3RoaXMubWVzc2FnZT0zRG5ldyBrLj0KTWVzc2FnZSgpO3Zh ciBxPTNEbmV3IGsuQnV0dG9uSWNvbih7aWNvbjoiZmEtaW5mby1jaXJjbGUiLHRpdGxlOiJSZXF1 aXJlbWVuPQp0cyIsdG9vbHRpcDoiRGlzcGxheSB0b29sIHJlcXVpcmVtZW50cyIsb25jbGljazpm dW5jdGlvbigpe2lmKCF0aGlzLnZpc2libGU9Cil7dGhpcy52aXNpYmxlPTNEdHJ1ZTt0Lm1lc3Nh Z2UudXBkYXRlKHtwZXJzaXN0ZW50OnRydWUsbWVzc2FnZTpjLnJlcXVpcmVtZT0KbnRzKHUpLHN0 YXR1czoiaW5mbyJ9KX1lbHNle3RoaXMudmlzaWJsZT0zRGZhbHNlO3QubWVzc2FnZS51cGRhdGUo e21lc3NhZ2U6PQoiIn0pfX19KTtpZighdS5yZXF1aXJlbWVudHN8fHUucmVxdWlyZW1lbnRzLmxl bmd0aD0zRD0zRDApe3EuJGVsLmhpZGUoKX12YXI9CiBtPTNEbmV3IGsuQnV0dG9uTWVudSh7aWNv bjoiZmEtY3ViZXMiLHRpdGxlOiJWZXJzaW9ucyIsdG9vbHRpcDoiU2VsZWN0IGFubz0KdGhlciB0 b29sIHZlcnNpb24ifSk7aWYodS52ZXJzaW9ucyYmdS52ZXJzaW9ucy5sZW5ndGg+MSl7Zm9yKHZh ciBvIGluIHUudmVyPQpzaW9ucyl7dmFyIHI9M0R1LnZlcnNpb25zW29dO2lmKHIhPTNEdS52ZXJz aW9uKXttLmFkZE1lbnUoe3RpdGxlOiJTd2l0Y2ggdG89CiAiK3IsdmVyc2lvbjpyLGljb246ImZh LWN1YmUiLG9uY2xpY2s6ZnVuY3Rpb24oKXt1LmlkPTNEdS5pZC5yZXBsYWNlKHUudmVycz0KaW9u LHRoaXMudmVyc2lvbik7dS52ZXJzaW9uPTNEdGhpcy52ZXJzaW9uO3QuZGVmZXJyZWQucmVzZXQo KTt0LmRlZmVycmVkLmV4PQplY3V0ZShmdW5jdGlvbigpe3QuX2J1aWxkTW9kZWwoKX0pfX0pfX19 ZWxzZXttLiRlbC5oaWRlKCl9dmFyIHA9M0RuZXcgay5CdXQ9CnRvbk1lbnUoe2ljb246ImZhLWNh cmV0LWRvd24iLHRpdGxlOiJPcHRpb25zIix0b29sdGlwOiJWaWV3IGF2YWlsYWJsZSBvcHRpbz0K bnMifSk7aWYodS5iaW9zdGFyX3VybCl7cC5hZGRNZW51KHtpY29uOiJmYS1xdWVzdGlvbi1jaXJj bGUiLHRpdGxlOiJRdWVzdGlvPQpuPyIsdG9vbHRpcDoiQXNrIGEgcXVlc3Rpb24gYWJvdXQgdGhp cyB0b29sIChCaW9zdGFyKSIsb25jbGljazpmdW5jdGlvbigpe3c9CmluZG93Lm9wZW4odS5iaW9z dGFyX3VybCsiL3AvbmV3L3Bvc3QvIil9fSk7cC5hZGRNZW51KHtpY29uOiJmYS1zZWFyY2giLHRp dD0KbGU6IlNlYXJjaCIsdG9vbHRpcDoiU2VhcmNoIGhlbHAgZm9yIHRoaXMgdG9vbCAoQmlvc3Rh cikiLG9uY2xpY2s6ZnVuY3Rpb24oPQope3dpbmRvdy5vcGVuKHUuYmlvc3Rhcl91cmwrIi90LyIr dS5pZCsiLyIpfX0pfXAuYWRkTWVudSh7aWNvbjoiZmEtc2hhcmUiLHQ9Cml0bGU6IlNoYXJlIix0 b29sdGlwOiJTaGFyZSB0aGlzIHRvb2wiLG9uY2xpY2s6ZnVuY3Rpb24oKXtwcm9tcHQoIkNvcHkg dG8gYz0KbGlwYm9hcmQ6IEN0cmwrQywgRW50ZXIiLHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZ2Fs YXh5X2NvbmZpZy5yb290KyJyb290P3RvPQpvbF9pZD0zRCIrdS5pZCl9fSk7aWYodGhpcy5pc19h ZG1pbil7cC5hZGRNZW51KHtpY29uOiJmYS1kb3dubG9hZCIsdGl0bGU6IkQ9Cm93bmxvYWQiLHRv b2x0aXA6IkRvd25sb2FkIHRoaXMgdG9vbCIsb25jbGljazpmdW5jdGlvbigpe3dpbmRvdy5sb2Nh dGlvbi5ocj0KZWY9M0RnYWxheHlfY29uZmlnLnJvb3QrImFwaS90b29scy8iK3UuaWQrIi9kb3du bG9hZCJ9fSl9dGhpcy5zZWN0aW9uPTNEbmV3PQogai5WaWV3KHQse2lucHV0czp1LmlucHV0cyxj bHM6InVpLXRhYmxlLXBsYWluIn0pO2lmKHRoaXMuaW5jb21wYXRpYmxlKXt0aGk9CnMuJGVsLmhp ZGUoKTskKCIjdG9vbC1mb3JtLWNsYXNzaWMiKS5zaG93KCk7cmV0dXJufXRoaXMucG9ydGxldD0z RG5ldyBmLlZpZT0Kdyh7aWNvbjoiZmEtd3JlbmNoIix0aXRsZToiPGI+Iit1Lm5hbWUrIjwvYj4g Iit1LmRlc2NyaXB0aW9uKyIgKEdhbGF4eSBUb29sPQogVmVyc2lvbiAiK3UudmVyc2lvbisiKSIs Y2xzOiJ1aS1wb3J0bGV0LXNsaW0iLG9wZXJhdGlvbnM6e3JlcXVpcmVtZW50czpxLG09CmVudTpw LHZlcnNpb25zOm19LGJ1dHRvbnM6dGhpcy5idXR0b25zfSk7dGhpcy5wb3J0bGV0LmFwcGVuZCh0 aGlzLm1lc3NhZ2UuJD0KZWwsdHJ1ZSk7dGhpcy5wb3J0bGV0LmFwcGVuZCh0aGlzLnNlY3Rpb24u JGVsKTt0aGlzLiRlbC5lbXB0eSgpO3RoaXMuJGVsLmFwPQpwZW5kKHRoaXMucG9ydGxldC4kZWwp O2lmKHUuaGVscCE9M0QiIil7dGhpcy4kZWwuYXBwZW5kKGMuaGVscCh1LmhlbHApKX1pZig9CnUu Y2l0YXRpb25zKXt2YXIgcz0zRCQoIjxkaXYvPiIpO3ZhciBsPTNEbmV3IGkuVG9vbENpdGF0aW9u Q29sbGVjdGlvbigpO2wudD0Kb29sX2lkPTNEdS5pZDt2YXIgbj0zRG5ldyBhLkNpdGF0aW9uTGlz dFZpZXcoe2VsOnMsY29sbGVjdGlvbjpsfSk7bi5yZW5kZXIoPQopO2wuZmV0Y2goKTt0aGlzLiRl bC5hcHBlbmQocyl9aWYodS5tZXNzYWdlKXt0aGlzLm1lc3NhZ2UudXBkYXRlKHtwZXJzaXN0ZW49 CnQ6dHJ1ZSxzdGF0dXM6Indhcm5pbmciLG1lc3NhZ2U6dS5tZXNzYWdlfSl9fX0pfSk7ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFsidXRpbHMvdXRpbHMiLCJ1dGlscy9kZWZl cnJlZCIsIm12Yy91aS91aS1wb3J0bGV0IiwibXZjL3VpL3VpLW1pc2M9CiIsIm12Yy9jaXRhdGlv bi9jaXRhdGlvbi1tb2RlbCIsIm12Yy9jaXRhdGlvbi9jaXRhdGlvbi12aWV3IiwibXZjL3Rvb2xz IiwibT0KdmMvdG9vbHMvdG9vbHMtdGVtcGxhdGUiLCJtdmMvdG9vbHMvdG9vbHMtY29udGVudCIs Im12Yy90b29scy90b29scy1zZWN0aW9uPQoiLCJtdmMvdG9vbHMvdG9vbHMtdHJlZSJdLGZ1bmN0 aW9uKGcsaCxmLGssaSxhLGQsYyxlLGosYil7cmV0dXJuIEJhY2tib25lLlY9Cmlldy5leHRlbmQo e2luaXRpYWxpemU6ZnVuY3Rpb24obCl7Y29uc29sZS5kZWJ1ZyhsKTt2YXIgbT0zRHBhcmVudC5H YWxheHk7aT0KZihtJiZtLm1vZGFsKXt0aGlzLm1vZGFsPTNEbS5tb2RhbH1lbHNle3RoaXMubW9k YWw9M0RuZXcgay5Nb2RhbC5WaWV3KCl9aWYoPQptJiZtLmN1cnJVc2VyKXt0aGlzLmlzX2FkbWlu PTNEbS5jdXJyVXNlci5nZXQoImlzX2FkbWluIil9ZWxzZXt0aGlzLmlzX2FkbWk9Cm49M0RmYWxz ZX10aGlzLm9wdGlvbnM9M0RsO3RoaXMuY29udGFpbmVyPTNEdGhpcy5vcHRpb25zLmNvbnRhaW5l cnx8ImJvZHkiOz0KdGhpcy5kZWZlcnJlZD0zRG5ldyBoKCk7dGhpcy5zZXRFbGVtZW50KCI8ZGl2 Lz4iKTskKHRoaXMuY29udGFpbmVyKS5hcHBlbmQoPQp0aGlzLiRlbCk7dGhpcy5fYnVpbGRGb3Jt KCl9LHJlY2llcHQ6ZnVuY3Rpb24obCl7JCh0aGlzLmNvbnRhaW5lcikuZW1wdHkoKTs9CiQodGhp cy5jb250YWluZXIpLmFwcGVuZChsKX0saGlnaGxpZ2h0OmZ1bmN0aW9uKG0sbixsKXt2YXIgbz0z RHRoaXMuZWxlbWVudD0KX2xpc3RbbV07aWYobyl7by5lcnJvcihufHwiUGxlYXNlIHZlcmlmeSB0 aGlzIHBhcmFtZXRlci4iKTtpZighbCl7JCh0aGlzLmNvPQpudGFpbmVyKS5hbmltYXRlKHtzY3Jv bGxUb3A6by4kZWwub2Zmc2V0KCkudG9wLTIwfSw1MDApfX19LF9idWlsZEZvcm06ZnVuY3Q9Cmlv bigpe3ZhciBsPTNEdGhpczt0aGlzLm9mZigicmVmcmVzaCIpO3RoaXMub2ZmKCJyZXNldCIpO3Ro aXMuZmllbGRfbGlzdD0zRD0Ke307dGhpcy5pbnB1dF9saXN0PTNEe307dGhpcy5lbGVtZW50X2xp c3Q9M0R7fTt0aGlzLnRyZWU9M0RuZXcgYih0aGlzKTt0aGlzPQouY29udGVudD0zRG5ldyBlKHRo aXMpO3ZhciBuPTNEdGhpcy5vcHRpb25zO3RoaXMuX3JlbmRlckZvcm0obik7dGhpcy50cmVlLmY9 CmluYWxpemUoKTtpZighdGhpcy53b3JrZmxvdyYmbi5lcnJvcnMpe3ZhciBvPTNEdGhpcy50cmVl Lm1hdGNoUmVzcG9uc2Uobi5lcj0Kcm9ycyk7Zm9yKHZhciBtIGluIG8pe3RoaXMuaGlnaGxpZ2h0 KG0sb1ttXSx0cnVlKX19dGhpcy5vbigicmVmcmVzaCIsZnVuY3RpPQpvbigpe2wuZGVmZXJyZWQu cmVzZXQoKTtsLmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24oKXtsLl91cGRhdGVNb2RlbCgpfSl9 KTs9CnRoaXMub24oInJlc2V0IixmdW5jdGlvbigpe2Zvcih2YXIgcCBpbiB0aGlzLmVsZW1lbnRf bGlzdCl7dGhpcy5lbGVtZW50X2xpcz0KdFtwXS5yZXNldCgpfX0pfSxfcmVuZGVyRm9ybTpmdW5j dGlvbih1KXt2YXIgdD0zRHRoaXM7dGhpcy5tZXNzYWdlPTNEbmV3IGsuPQpNZXNzYWdlKCk7dmFy IHE9M0RuZXcgay5CdXR0b25JY29uKHtpY29uOiJmYS1pbmZvLWNpcmNsZSIsdGl0bGU6IlJlcXVp cmVtZW49CnRzIix0b29sdGlwOiJEaXNwbGF5IHRvb2wgcmVxdWlyZW1lbnRzIixvbmNsaWNrOmZ1 bmN0aW9uKCl7aWYoIXRoaXMudmlzaWJsZT0KKXt0aGlzLnZpc2libGU9M0R0cnVlO3QubWVzc2Fn ZS51cGRhdGUoe3BlcnNpc3RlbnQ6dHJ1ZSxtZXNzYWdlOmMucmVxdWlyZW1lPQpudHModSksc3Rh dHVzOiJpbmZvIn0pfWVsc2V7dGhpcy52aXNpYmxlPTNEZmFsc2U7dC5tZXNzYWdlLnVwZGF0ZSh7 bWVzc2FnZTo9CiIifSl9fX0pO2lmKCF1LnJlcXVpcmVtZW50c3x8dS5yZXF1aXJlbWVudHMubGVu Z3RoPTNEPTNEMCl7cS4kZWwuaGlkZSgpfXZhcj0KIG09M0RuZXcgay5CdXR0b25NZW51KHtpY29u OiJmYS1jdWJlcyIsdGl0bGU6IlZlcnNpb25zIix0b29sdGlwOiJTZWxlY3QgYW5vPQp0aGVyIHRv b2wgdmVyc2lvbiJ9KTtpZih1LnZlcnNpb25zJiZ1LnZlcnNpb25zLmxlbmd0aD4xKXtmb3IodmFy IG8gaW4gdS52ZXI9CnNpb25zKXt2YXIgcj0zRHUudmVyc2lvbnNbb107aWYociE9M0R1LnZlcnNp b24pe20uYWRkTWVudSh7dGl0bGU6IlN3aXRjaCB0bz0KICIrcix2ZXJzaW9uOnIsaWNvbjoiZmEt Y3ViZSIsb25jbGljazpmdW5jdGlvbigpe3UuaWQ9M0R1LmlkLnJlcGxhY2UodS52ZXJzPQppb24s dGhpcy52ZXJzaW9uKTt1LnZlcnNpb249M0R0aGlzLnZlcnNpb247dC5kZWZlcnJlZC5yZXNldCgp O3QuZGVmZXJyZWQuZXg9CmVjdXRlKGZ1bmN0aW9uKCl7dC5fYnVpbGRNb2RlbCgpfSl9fSl9fX1l bHNle20uJGVsLmhpZGUoKX12YXIgcD0zRG5ldyBrLkJ1dD0KdG9uTWVudSh7aWNvbjoiZmEtY2Fy ZXQtZG93biIsdGl0bGU6Ik9wdGlvbnMiLHRvb2x0aXA6IlZpZXcgYXZhaWxhYmxlIG9wdGlvPQpu cyJ9KTtpZih1LmJpb3N0YXJfdXJsKXtwLmFkZE1lbnUoe2ljb246ImZhLXF1ZXN0aW9uLWNpcmNs ZSIsdGl0bGU6IlF1ZXN0aW89Cm4/Iix0b29sdGlwOiJBc2sgYSBxdWVzdGlvbiBhYm91dCB0aGlz IHRvb2wgKEJpb3N0YXIpIixvbmNsaWNrOmZ1bmN0aW9uKCl7dz0KaW5kb3cub3Blbih1LmJpb3N0 YXJfdXJsKyIvcC9uZXcvcG9zdC8iKX19KTtwLmFkZE1lbnUoe2ljb246ImZhLXNlYXJjaCIsdGl0 PQpsZToiU2VhcmNoIix0b29sdGlwOiJTZWFyY2ggaGVscCBmb3IgdGhpcyB0b29sIChCaW9zdGFy KSIsb25jbGljazpmdW5jdGlvbig9Cil7d2luZG93Lm9wZW4odS5iaW9zdGFyX3VybCsiL3QvIit1 LmlkKyIvIil9fSl9cC5hZGRNZW51KHtpY29uOiJmYS1zaGFyZSIsdD0KaXRsZToiU2hhcmUiLHRv b2x0aXA6IlNoYXJlIHRoaXMgdG9vbCIsb25jbGljazpmdW5jdGlvbigpe3Byb21wdCgiQ29weSB0 byBjPQpsaXBib2FyZDogQ3RybCtDLCBFbnRlciIsd2luZG93LmxvY2F0aW9uLm9yaWdpbitnYWxh eHlfY29uZmlnLnJvb3QrInJvb3Q/dG89Cm9sX2lkPTNEIit1LmlkKX19KTtpZih0aGlzLmlzX2Fk bWluKXtwLmFkZE1lbnUoe2ljb246ImZhLWRvd25sb2FkIix0aXRsZToiRD0Kb3dubG9hZCIsdG9v bHRpcDoiRG93bmxvYWQgdGhpcyB0b29sIixvbmNsaWNrOmZ1bmN0aW9uKCl7d2luZG93LmxvY2F0 aW9uLmhyPQplZj0zRGdhbGF4eV9jb25maWcucm9vdCsiYXBpL3Rvb2xzLyIrdS5pZCsiL2Rvd25s b2FkIn19KX10aGlzLnNlY3Rpb249M0RuZXc9CiBqLlZpZXcodCx7aW5wdXRzOnUuaW5wdXRzLGNs czoidWktdGFibGUtcGxhaW4ifSk7aWYodGhpcy5pbmNvbXBhdGlibGUpe3RoaT0Kcy4kZWwuaGlk ZSgpOyQoIiN0b29sLWZvcm0tY2xhc3NpYyIpLnNob3coKTtyZXR1cm59dGhpcy5wb3J0bGV0PTNE bmV3IGYuVmllPQp3KHtpY29uOiJmYS13cmVuY2giLHRpdGxlOiI8Yj4iK3UubmFtZSsiPC9iPiAi K3UuZGVzY3JpcHRpb24rIiAoR2FsYXh5IFRvb2w9CiBWZXJzaW9uICIrdS52ZXJzaW9uKyIpIixj bHM6InVpLXBvcnRsZXQtc2xpbSIsb3BlcmF0aW9uczp7cmVxdWlyZW1lbnRzOnEsbT0KZW51OnAs dmVyc2lvbnM6bX0sYnV0dG9uczp0aGlzLmJ1dHRvbnN9KTtpZih0aGlzLm9wdGlvbnMud29ya2Zs b3cpe3RoaXMucG9yPQp0bGV0LiRjb250ZW50LmNzcygicGFkZGluZyIsIjBweCIpfXRoaXMucG9y dGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCx0cnU9CmUpO3RoaXMucG9ydGxldC5hcHBlbmQo dGhpcy5zZWN0aW9uLiRlbCk7dGhpcy4kZWwuZW1wdHkoKTt0aGlzLiRlbC5hcHBlbmQodD0KaGlz LnBvcnRsZXQuJGVsKTtpZih1LmhlbHAhPTNEIiIpe3RoaXMuJGVsLmFwcGVuZChjLmhlbHAodS5o ZWxwKSl9aWYodS5jaXRhPQp0aW9ucyl7dmFyIHM9M0QkKCI8ZGl2Lz4iKTt2YXIgbD0zRG5ldyBp LlRvb2xDaXRhdGlvbkNvbGxlY3Rpb24oKTtsLnRvb2xfaWQ9Cj0zRHUuaWQ7dmFyIG49M0RuZXcg YS5DaXRhdGlvbkxpc3RWaWV3KHtlbDpzLGNvbGxlY3Rpb246bH0pO24ucmVuZGVyKCk7bC5mZT0K dGNoKCk7dGhpcy4kZWwuYXBwZW5kKHMpfWlmKHUubWVzc2FnZSl7dGhpcy5tZXNzYWdlLnVwZGF0 ZSh7cGVyc2lzdGVudDp0cnVlPQosc3RhdHVzOiJ3YXJuaW5nIixtZXNzYWdlOnUubWVzc2FnZX0p fX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgMTU5NjJiM2Q5YWFj MDYxZTk1NDFmODE3NWM4ZDJlMmJjNGJhNWNhYiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5ND0K YWY1MDhjMjJiYjM0YjdmYTYgc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy1m b3JtLXdvcmtmbG93LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9v bHMtZm9ybS13b3JrZmxvdy5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xz L3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKQEAgLTEsMSArMSwxIEBACi1kZWZpbmUoWyJ1dGlscy91 dGlscyIsIm12Yy90b29scy90b29scy1mb3JtLWJhc2UiXSxmdW5jdGlvbihiLGEpe3ZhciBjPTNE YT0KLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihkKXt0aGlzLndvcmtmbG93PTNEdHJ1ZTth LnByb3RvdHlwZS5pbml0aWFsaXplPQouY2FsbCh0aGlzLGQpfSxfYnVpbGRNb2RlbDpmdW5jdGlv bigpe30sX3VwZGF0ZU1vZGVsOmZ1bmN0aW9uKCl7dmFyIGQ9M0R0aGk9CnM7dmFyIGU9M0R0aGlz LnRyZWUuZmluYWxpemUoKTtjb25zb2xlLmRlYnVnKCJ0b29scy1mb3JtLXdvcmtmbG93OjpfcmVm cmVzaD0KRm9ybSgpIC0gUmVmcmVzaGluZyBzdGF0ZXMuIik7Y29uc29sZS5kZWJ1ZyhlKTt2YXIg Zz0zRHRoaXMuZGVmZXJyZWQucmVnaXN0PQplcigpO3ZhciBmPTNEZ2FsYXh5X2NvbmZpZy5yb290 KyJ3b3JrZmxvdy9lZGl0b3JfZm9ybV9wb3N0P3Rvb2xfaWQ9M0QiK3RoaXM9Ci5vcHRpb25zLmlk O2IucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6ZixkYXRhOmUsc3VjY2VzczpmdW5jdGlvbihoKXtw YXJlbnQudT0KcGRhdGVfbm9kZShoKTtkLmRlZmVycmVkLmRvbmUoZyk7Y29uc29sZS5kZWJ1Zygi dG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgPQotIFN0YXRlcyByZWZyZXNoZWQuIik7Y29uc29s ZS5kZWJ1ZyhoKX0sZXJyb3I6ZnVuY3Rpb24oaCl7ZC5kZWZlcnJlZC5kb25lKGc9Cik7Y29uc29s ZS5kZWJ1ZygidG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgLSBSZWZyZXNoIHJlcXVlc3QgZmFp bGVkLiIpO2Nvbj0Kc29sZS5kZWJ1ZyhoKX19KX19KTtyZXR1cm57VmlldzpjfX0pOwpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxzIiwibXZjL3Rvb2xzL3Rv b2xzLWZvcm0tYmFzZSJdLGZ1bmN0aW9uKGIsYSl7dmFyIGM9M0RhPQouZXh0ZW5kKHtpbml0aWFs aXplOmZ1bmN0aW9uKGUpe3RoaXMubm9kZT0zRHdvcmtmbG93LmFjdGl2ZV9ub2RlO2lmKCF0aGlz Lm49Cm9kZSl7Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gdG9vbHMtZm9ybS13b3JrZmxvdzppbml0 aWFsaXplKCkgLSBOb2RlIG5vdCBmbz0KdW5kIGluIHdvcmtmbG93LiIpO3JldHVybn10aGlzLndv cmtmbG93PTNEdHJ1ZTt0aGlzLm9wdGlvbnM9M0RlO3ZhciBkPTNEdGhpPQpzO2IuZ2V0KHt1cmw6 Z2FsYXh5X2NvbmZpZy5yb290KyJhcGkvZGF0YXR5cGVzIixjYWNoZTp0cnVlLHN1Y2Nlc3M6ZnVu Y3Rpb249CihmKXtkLmRhdGF0eXBlcz0zRGY7ZC5fbWFrZVNlY3Rpb25zKGUuaW5wdXRzKTthLnBy b3RvdHlwZS5pbml0aWFsaXplLmNhbGwoZD0KLGUpfX0pfSxfbWFrZVNlY3Rpb25zOmZ1bmN0aW9u KGQpe2RbYi51dWlkKCldPTNEe2xhYmVsOiJFZGl0IFN0ZXAgQXR0cmlidXRlPQpzIix0eXBlOiJz ZWN0aW9uIixpbnB1dHM6W3tsYWJlbDoiQW5ub3RhdGlvbiAvIE5vdGVzIixuYW1lOiJhbm5vdGF0 aW9uIix0eXA9CmU6InRleHQiLGFyZWE6dHJ1ZSxoZWxwOiJBZGQgYW4gYW5ub3RhdGlvbiBvciBu b3RlcyB0byB0aGlzIHN0ZXA7IGFubm90YXRpbz0KbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGEgd29y a2Zsb3cgaXMgdmlld2VkLiIsdmFsdWU6dGhpcy5ub2RlLmFubm90YXRpb259XX07PQp0aGlzLnBv c3Rfam9iX2FjdGlvbnM9M0R0aGlzLm5vZGUucG9zdF9qb2JfYWN0aW9ucztmb3IodmFyIGUgaW4g dGhpcy5ub2RlLm89CnV0cHV0X3Rlcm1pbmFscyl7ZFtiLnV1aWQoKV09M0R0aGlzLl9tYWtlU2Vj dGlvbihlKX19LF9tYWtlU2VjdGlvbjpmdW5jdGlvbj0KKGgpe3ZhciBnPTNEW107Zm9yKGtleSBp biB0aGlzLmRhdGF0eXBlcyl7Zy5wdXNoKHswOnRoaXMuZGF0YXR5cGVzW2tleV0sMTp0PQpoaXMu ZGF0YXR5cGVzW2tleV19KX1nLnNvcnQoZnVuY3Rpb24oaixpKXtyZXR1cm4gai5sYWJlbD5pLmxh YmVsPzE6ai5sYWJlbDw9CmkubGFiZWw/LTE6MH0pO2cudW5zaGlmdCh7MDoiU2VxdWVuY2VzIiwx OiJTZXF1ZW5jZXMifSk7Zy51bnNoaWZ0KHswOiJSb2FkbT0KYXBzIiwxOiJSb2FkbWFwcyJ9KTtn LnVuc2hpZnQoezA6IkxlYXZlIHVuY2hhbmdlZCIsMToiTm9uZSJ9KTt2YXIgZj0zRHtsYWJlPQps OiJFZGl0IFN0ZXAgQWN0aW9uOiAnIitoKyInIix0eXBlOiJzZWN0aW9uIixpbnB1dHM6W3thY3Rp b246IlJlbmFtZURhdGFzZXQ9CkFjdGlvbiIsYXJndW1lbnQ6Im5ld25hbWUiLGxhYmVsOiJSZW5h bWUgZGF0YXNldCIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdubz0KcmU6IiIsaGVscDonVGhpcyBh Y3Rpb24gd2lsbCByZW5hbWUgdGhlIHJlc3VsdCBkYXRhc2V0LiBDbGljayA8YSBocmVmPTNEImh0 PQp0cHM6Ly93aWtpLmdhbGF4eXByb2plY3Qub3JnL0xlYXJuL0FkdmFuY2VkV29ya2Zsb3cvVmFy aWFibGVzIj5oZXJlPC9hPiBmb3I9CiBtb3JlIGluZm9ybWF0aW9uLid9LHthY3Rpb246IkNoYW5n ZURhdGF0eXBlQWN0aW9uIixhcmd1bWVudDoibmV3dHlwZSIsbGFiZT0KbDoiQ2hhbmdlIGRhdGF0 eXBlIix0eXBlOiJzZWxlY3QiLGlnbm9yZToiTm9uZSIsb3B0aW9uczpnLGhlbHA6IlRoaXMgYWN0 aW9uPQogd2lsbCBjaGFuZ2UgdGhlIGRhdGF0eXBlIG9mIHRoZSBvdXRwdXQgdG8gdGhlIGluZGlj YXRlZCB2YWx1ZS4ifSx7YWN0aW9uOiI9ClRhZ0RhdGFzZXRBY3Rpb24iLGFyZ3VtZW50OiJ0YWdz IixsYWJlbDoiVGFncyIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdub3JlOj0KIiIsaGVscDoiVGhp cyBhY3Rpb24gd2lsbCBzZXQgdGFncyBmb3IgdGhlIGRhdGFzZXQuIn0se2xhYmVsOiJBc3NpZ24g Y29sdW1uPQpzIix0eXBlOiJzZWN0aW9uIixpbnB1dHM6W3thY3Rpb246IkNvbHVtblNldEFjdGlv biIsYXJndW1lbnQ6ImNocm9tQ29sIixsYWI9CmVsOiJDaHJvbSBjb2x1bW4iLHR5cGU6InRleHQi LHZhbHVlOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0QWN0aW9uIj0KLGFyZ3VtZW50 OiJzdGFydENvbCIsbGFiZWw6IlN0YXJ0IGNvbHVtbiIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdu b3JlOiIifSx7PQphY3Rpb246IkNvbHVtblNldEFjdGlvbiIsYXJndW1lbnQ6ImVuZENvbCIsbGFi ZWw6IkVuZCBjb2x1bW4iLHR5cGU6InRleHQiLHY9CmFsdWU6IiIsaWdub3JlOiIifSx7YWN0aW9u OiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJzdHJhbmRDb2wiLGxhYmVsOiJTdD0KcmFuZCBj b2x1bW4iLHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0 QWN0aW9uIixhcmd1PQptZW50OiJuYW1lQ29sIixsYWJlbDoiTmFtZSBjb2x1bW4iLHR5cGU6InRl eHQiLHZhbHVlOiIiLGlnbm9yZToiIn1dLGhlbHA6IlQ9CmhpcyBhY3Rpb24gd2lsbCBzZXQgY29s dW1uIGFzc2lnbm1lbnRzIGluIHRoZSBvdXRwdXQgZGF0YXNldC4gQmxhbmsgZmllbGRzID0KYXJl IGlnbm9yZWQuIn0se2FjdGlvbjoiRW1haWxBY3Rpb24iLGxhYmVsOiJFbWFpbCBub3RpZmljYXRp b24iLHR5cGU6ImJvb2xlPQphbiIsdmFsdWU6ImZhbHNlIixpZ25vcmU6ImZhbHNlIixoZWxwOiJU aGlzIGFjdGlvbiB3aWxsIHNlbmQgYW4gZW1haWwgbm90aWY9CnlpbmcgeW91IHdoZW4gdGhlIGpv YiBpcyBkb25lLiJ9LHthY3Rpb246IkRlbGV0ZUludGVybWVkaWF0ZXNBY3Rpb24iLGxhYmVsOj0K IkRlbGV0ZSBub24tb3V0cHV0cyIsdHlwZToiYm9vbGVhbiIsdmFsdWU6ImZhbHNlIixpZ25vcmU6 ImZhbHNlIixoZWxwOiJBbGwgPQpub24tb3V0cHV0IHN0ZXBzIG9mIHRoaXMgd29ya2Zsb3cgd2ls bCBoYXZlIGRhdGFzZXRzIGRlbGV0ZWQgaWYgdGhleSBhcmUgbm89CiBsb25nZXIgYmVpbmcgdXNl ZCBhcyBqb2IgaW5wdXRzIHdoZW4gdGhlIGpvYiB0aGlzIGFjdGlvbiBpcyBhdHRhY2hlZCB0byBp cz0KIGZpbmlzaGVkLiBZb3UgKm11c3QqIGJlIHVzaW5nIHdvcmtmbG93IG91dHB1dHMgKHRoZSBz bm93Zmxha2UpIGluIHlvdXIgd29yPQprZmxvdyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3Qu In1dfTt2YXIgZD0zRHRoaXM7ZnVuY3Rpb24gZShqKXtmb3IodmFyIGw9CiBpbiBqKXt2YXIgaz0z RGpbbF07aWYoay5hY3Rpb24pe2submFtZT0zRCJwamFfXyIraCsiX18iK2suYWN0aW9uO2lmKGsu YXJndT0KbWVudCl7ay5uYW1lKz0zRCJfXyIray5hcmd1bWVudH12YXIgbT0zRGQucG9zdF9qb2Jf YWN0aW9uc1trLmFjdGlvbitoXTtpZihtPQope2lmKGsuYXJndW1lbnQpe2sudmFsdWU9M0RtLmFj dGlvbl9hcmd1bWVudHMmJm0uYWN0aW9uX2FyZ3VtZW50c1trLmFyZ3VtZW49CnRdfHxrLnZhbHVl fWVsc2V7ay52YWx1ZT0zRCJ0cnVlIn19fWVsc2V7aWYoay5pbnB1dHMpe2Uoay5pbnB1dHMpfX19 fWUoZi5pbj0KcHV0cyk7cmV0dXJuIGZ9LF9idWlsZE1vZGVsOmZ1bmN0aW9uKCl7fSxfdXBkYXRl TW9kZWw6ZnVuY3Rpb24oKXt2YXIgZD0zRHRoPQppczt2YXIgZT0zRHRoaXMudHJlZS5maW5hbGl6 ZSgpO2NvbnNvbGUuZGVidWcoInRvb2xzLWZvcm0td29ya2Zsb3c6Ol9yZWZyZXM9CmhGb3JtKCkg LSBSZWZyZXNoaW5nIHN0YXRlcy4iKTtjb25zb2xlLmRlYnVnKGUpO3ZhciBnPTNEdGhpcy5kZWZl cnJlZC5yZWdpcz0KdGVyKCk7dmFyIGY9M0RnYWxheHlfY29uZmlnLnJvb3QrIndvcmtmbG93L2Vk aXRvcl9mb3JtX3Bvc3Q/dG9vbF9pZD0zRCIrdGhpPQpzLm9wdGlvbnMuaWQ7Yi5yZXF1ZXN0KHt0 eXBlOiJHRVQiLHVybDpmLGRhdGE6ZSxzdWNjZXNzOmZ1bmN0aW9uKGgpe2Qubm9kZS49CnVwZGF0 ZV9maWVsZF9kYXRhKGgsdHJ1ZSk7ZC5kZWZlcnJlZC5kb25lKGcpO2NvbnNvbGUuZGVidWcoInRv b2xzLWZvcm06Ol9yZT0KZnJlc2hGb3JtKCkgLSBTdGF0ZXMgcmVmcmVzaGVkLiIpO2NvbnNvbGUu ZGVidWcoaCl9LGVycm9yOmZ1bmN0aW9uKGgpe2QuZGVmPQplcnJlZC5kb25lKGcpO2NvbnNvbGUu ZGVidWcoInRvb2xzLWZvcm06Ol9yZWZyZXNoRm9ybSgpIC0gUmVmcmVzaCByZXF1ZXN0IGY9CmFp bGVkLiIpO2NvbnNvbGUuZGVidWcoaCl9fSl9fSk7cmV0dXJue1ZpZXc6Y319KTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQy ZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2 IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcwotLS0gYS9z dGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKKysrIGIvc3Rh dGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCkBAIC0xLDEgKzEs MSBAQAotZGVmaW5lKFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWkt bWlzYyIsIm12Yy90b29scy90b29scy09CnJlcGVhdCIsIm12Yy90b29scy90b29scy1zZWxlY3Qt Y29udGVudCIsIm12Yy90b29scy90b29scy1pbnB1dCJdLGZ1bmN0aW9uKD0KZCxiLGcsYyxhLGUp e3ZhciBmPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oaSxoKXt0 aGlzLmFwPQpwPTNEaTt0aGlzLmlucHV0cz0zRGguaW5wdXRzO2guY2xzX3RyPTNEInNlY3Rpb24t cm93Ijt0aGlzLnRhYmxlPTNEbmV3IGIuVmk9CmV3KGgpO3RoaXMuc2V0RWxlbWVudCh0aGlzLnRh YmxlLiRlbCk7dGhpcy5yZW5kZXIoKX0scmVuZGVyOmZ1bmN0aW9uKCl7dGhpcz0KLnRhYmxlLmRl bEFsbCgpO2Zvcih2YXIgaCBpbiB0aGlzLmlucHV0cyl7dGhpcy5fYWRkKHRoaXMuaW5wdXRzW2hd KX19LF9hZGQ6PQpmdW5jdGlvbihqKXt2YXIgaT0zRHRoaXM7dmFyIGg9M0RqUXVlcnkuZXh0ZW5k KHRydWUse30saik7aC5pZD0zRGouaWQ9M0RkLnU9CnVpZCgpO3RoaXMuYXBwLmlucHV0X2xpc3Rb aC5pZF09M0RoO3ZhciBrPTNEaC50eXBlO3N3aXRjaChrKXtjYXNlImNvbmRpdGlvbj0KYWwiOnRo aXMuX2FkZENvbmRpdGlvbmFsKGgpO2JyZWFrO2Nhc2UicmVwZWF0Ijp0aGlzLl9hZGRSZXBlYXQo aCk7YnJlYWs7ZGVmPQphdWx0OnRoaXMuX2FkZFJvdyhoKX19LF9hZGRDb25kaXRpb25hbDpmdW5j dGlvbihoKXt2YXIgaj0zRHRoaXM7aC50ZXN0X3BhcmE9Cm0uaWQ9M0RoLmlkO3ZhciBtPTNEdGhp cy5fYWRkUm93KGgudGVzdF9wYXJhbSk7bS5vcHRpb25zLm9uY2hhbmdlPTNEZnVuY3Rpbz0Kbih0 KXt2YXIgcD0zRGouYXBwLnRyZWUubWF0Y2hDYXNlKGgsdCk7Zm9yKHZhciByIGluIGguY2FzZXMp e3ZhciB3PTNEaC5jYXNlPQpzW3JdO3ZhciB1PTNEaC5pZCsiLXNlY3Rpb24tIityO3ZhciBvPTNE ai50YWJsZS5nZXQodSk7dmFyIHY9M0RmYWxzZTtmb3IodmE9CnIgcSBpbiB3LmlucHV0cyl7dmFy IHM9M0R3LmlucHV0c1txXS50eXBlO2lmKHMmJnMhPTNEPTNEImhpZGRlbiIpe3Y9M0R0cnVlOz0K YnJlYWt9fWlmKHI9M0Q9M0RwJiZ2KXtvLmZhZGVJbigiZmFzdCIpfWVsc2V7by5oaWRlKCl9fWou YXBwLnRyaWdnZXIoInJlZnJlPQpzaCIpfTtmb3IodmFyIGwgaW4gaC5jYXNlcyl7dmFyIGs9M0Ro LmlkKyItc2VjdGlvbi0iK2w7dmFyIG49M0RuZXcgZih0aGlzLmE9CnBwLHtpbnB1dHM6aC5jYXNl c1tsXS5pbnB1dHMsY2xzOiJ1aS10YWJsZS1wbGFpbiJ9KTtuLiRlbC5hZGRDbGFzcygidWktdGFi bD0KZS1mb3JtLXNlY3Rpb24iKTt0aGlzLnRhYmxlLmFkZChuLiRlbCk7dGhpcy50YWJsZS5hcHBl bmQoayl9bS50cmlnZ2VyKCJjaGFuPQpnZSIpfSxfYWRkUmVwZWF0OmZ1bmN0aW9uKG8pe3ZhciBy PTNEdGhpczt2YXIgcD0zRDA7ZnVuY3Rpb24gbShpLHQpe3ZhciBzPQo9M0RvLmlkKyItc2VjdGlv bi0iKyhwKyspO3ZhciB1PTNEbnVsbDtpZih0KXt1PTNEZnVuY3Rpb24oKXtrLmRlbChzKTtrLnJl dGk9CnRsZShvLnRpdGxlKTtyLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fXZhciB2PTNEbmV3IGYo ci5hcHAse2lucHV0czppLGNsczoidT0KaS10YWJsZS1wbGFpbiJ9KTtrLmFkZCh7aWQ6cyx0aXRs ZTpvLnRpdGxlLCRlbDp2LiRlbCxvbmRlbDp1fSk7ay5yZXRpdGxlKG8uPQp0aXRsZSl9dmFyIGs9 M0RuZXcgYy5WaWV3KHt0aXRsZV9uZXc6by50aXRsZSxtYXg6by5tYXgsb25uZXc6ZnVuY3Rpb24o KXttKG89Ci5pbnB1dHMsdHJ1ZSk7ci5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pO3ZhciBoPTNE by5taW47dmFyIHE9M0RfLnNpemUoby5jYT0KY2hlKTtmb3IodmFyIGw9M0QwO2w8TWF0aC5tYXgo cSxoKTtsKyspe3ZhciBuPTNEbnVsbDtpZihsPHEpe249M0RvLmNhY2hlW2xdPQp9ZWxzZXtuPTNE by5pbnB1dHN9bShuLGw+PTNEaCl9dmFyIGo9M0RuZXcgZSh0aGlzLmFwcCx7bGFiZWw6by50aXRs ZSxoZWxwOm89Ci5oZWxwLGZpZWxkOmt9KTtqLiRlbC5hZGRDbGFzcygidWktdGFibGUtZm9ybS1z ZWN0aW9uIik7dGhpcy50YWJsZS5hZGQoai4kZT0KbCk7dGhpcy50YWJsZS5hcHBlbmQoby5pZCl9 LF9hZGRSb3c6ZnVuY3Rpb24oaCl7dmFyIGs9M0RoLmlkO3ZhciBpPTNEdGhpcy5fPQpjcmVhdGVG aWVsZChoKTt0aGlzLmFwcC5maWVsZF9saXN0W2tdPTNEaTt2YXIgaj0zRG5ldyBlKHRoaXMuYXBw LHtsYWJlbDpoLmw9CmFiZWwsb3B0aW9uYWw6aC5vcHRpb25hbCxoZWxwOmguaGVscCxmaWVsZDpp fSk7dGhpcy5hcHAuZWxlbWVudF9saXN0W2tdPTNEaj0KO3RoaXMudGFibGUuYWRkKGouJGVsKTt0 aGlzLnRhYmxlLmFwcGVuZChrKTtyZXR1cm4gaX0sX2NyZWF0ZUZpZWxkOmZ1bmN0aW9uPQooaCl7 dmFyIGk9M0RudWxsO3N3aXRjaChoLnR5cGUpe2Nhc2UidGV4dCI6aT0zRHRoaXMuX2ZpZWxkVGV4 dChoKTticmVhaztjYXM9CmUic2VsZWN0IjppPTNEdGhpcy5fZmllbGRTZWxlY3QoaCk7YnJlYWs7 Y2FzZSJkYXRhIjppPTNEdGhpcy5fZmllbGREYXRhKGgpOz0KYnJlYWs7Y2FzZSJkYXRhX2NvbGxl Y3Rpb24iOmk9M0R0aGlzLl9maWVsZERhdGEoaCk7YnJlYWs7Y2FzZSJkYXRhX2NvbHVtbiI6PQpo LmVycm9yX3RleHQ9M0QiTWlzc2luZyBjb2x1bW5zIGluIHJlZmVyZW5jZWQgZGF0YXNldC4iO2k9 M0R0aGlzLl9maWVsZFNlbGU9CmN0KGgpO2JyZWFrO2Nhc2UiaGlkZGVuIjppPTNEdGhpcy5fZmll bGRIaWRkZW4oaCk7YnJlYWs7Y2FzZSJoaWRkZW5fZGF0YSI6aT0KPTNEdGhpcy5fZmllbGRIaWRk ZW4oaCk7YnJlYWs7Y2FzZSJpbnRlZ2VyIjppPTNEdGhpcy5fZmllbGRTbGlkZXIoaCk7YnJlYWs7 PQpjYXNlImZsb2F0IjppPTNEdGhpcy5fZmllbGRTbGlkZXIoaCk7YnJlYWs7Y2FzZSJib29sZWFu IjppPTNEdGhpcy5fZmllbGRCb289CmxlYW4oaCk7YnJlYWs7Y2FzZSJnZW5vbWVidWlsZCI6aC5z ZWFyY2hhYmxlPTNEdHJ1ZTtpPTNEdGhpcy5fZmllbGRTZWxlY3QoaD0KKTticmVhaztjYXNlImRy aWxsX2Rvd24iOmk9M0R0aGlzLl9maWVsZERyaWxsZG93bihoKTticmVhaztjYXNlImJhc2V1cmwi Omk9Cj0zRHRoaXMuX2ZpZWxkSGlkZGVuKGgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5hcHAuaW5jb21w YXRpYmxlPTNEdHJ1ZTtpZihoLm9wdD0KaW9ucyl7aT0zRHRoaXMuX2ZpZWxkU2VsZWN0KGgpfWVs c2V7aT0zRHRoaXMuX2ZpZWxkVGV4dChoKX1jb25zb2xlLmRlYnVnKCJ0PQpvb2xzLWZvcm06Ol9h ZGRSb3coKSA6IEF1dG8gbWF0Y2hlZCBmaWVsZCB0eXBlICgiK2gudHlwZSsiKS4iKX1pZihoLnZh bHVlIT0KPTNEPTNEdW5kZWZpbmVkKXtpLnZhbHVlKGgudmFsdWUpfXJldHVybiBpfSxfZmllbGRE YXRhOmZ1bmN0aW9uKGgpe2lmKHRoaXMuPQphcHAud29ya2Zsb3cpe3ZhciBqPTNEZC50ZXh0aWZ5 KGguZXh0ZW5zaW9ucy50b1N0cmluZygpKTtoLmluZm89M0QiRGF0YSBpbnA9CnV0ICciK2gubmFt ZSsiJyAoIitqKyIpIjtyZXR1cm4gdGhpcy5fZmllbGRIaWRkZW4oaCl9dmFyIGk9M0R0aGlzO3Jl dHVybiBuZT0KdyBhLlZpZXcodGhpcy5hcHAse2lkOiJmaWVsZC0iK2guaWQsZXh0ZW5zaW9uczpo LmV4dGVuc2lvbnMsbXVsdGlwbGU6aC5tdWx0PQppcGxlLHR5cGU6aC50eXBlLGRhdGE6aC5vcHRp b25zLG9uY2hhbmdlOmZ1bmN0aW9uKCl7aS5hcHAudHJpZ2dlcigicmVmcmVzaCI9Cil9fSl9LF9m aWVsZFNlbGVjdDpmdW5jdGlvbihoKXtpZih0aGlzLmFwcC53b3JrZmxvdyYmaC5pc19keW5hbWlj KXtpZighZC52YT0KbGlkYXRlKGgudmFsdWUpKXtoLnZhbHVlPTNEIiJ9cmV0dXJuIHRoaXMuX2Zp ZWxkVGV4dChoKX12YXIgaz0zRFtdO2Zvcih2YXIgPQpsIGluIGgub3B0aW9ucyl7dmFyIG09M0Ro Lm9wdGlvbnNbbF07ay5wdXNoKHtsYWJlbDptWzBdLHZhbHVlOm1bMV19KX12YXIgbj0KPTNEZy5T ZWxlY3Q7c3dpdGNoKGguZGlzcGxheSl7Y2FzZSJjaGVja2JveGVzIjpuPTNEZy5DaGVja2JveDti cmVhaztjYXNlInJhPQpkaW8iOm49M0RnLlJhZGlvO2JyZWFrfXZhciBqPTNEdGhpcztyZXR1cm4g bmV3IG4uVmlldyh7aWQ6ImZpZWxkLSIraC5pZCxkYXQ9CmE6ayxlcnJvcl90ZXh0OmguZXJyb3Jf dGV4dHx8Ik5vIG9wdGlvbnMgYXZhaWxhYmxlIixtdWx0aXBsZTpoLm11bHRpcGxlLHNlYT0KcmNo YWJsZTpoLnNlYXJjaGFibGUsb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZy ZXNoIil9fSl9LF9maWVsPQpkRHJpbGxkb3duOmZ1bmN0aW9uKGgpe3ZhciBpPTNEdGhpcztyZXR1 cm4gbmV3IGcuRHJpbGxkb3duLlZpZXcoe2lkOiJmaWVsZC09CiIraC5pZCxkYXRhOmgub3B0aW9u cyxkaXNwbGF5OmguZGlzcGxheSxvbmNoYW5nZTpmdW5jdGlvbigpe2kuYXBwLnRyaWdnZXIoIj0K cmVmcmVzaCIpfX0pfSxfZmllbGRUZXh0OmZ1bmN0aW9uKGgpe3ZhciBpPTNEdGhpcztyZXR1cm4g bmV3IGcuSW5wdXQoe2lkOiJmPQppZWxkLSIraC5pZCxhcmVhOmguYXJlYSxvbmNoYW5nZTpmdW5j dGlvbigpe2kuYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2Y9CmllbGRTbGlkZXI6ZnVuY3Rp b24oaCl7cmV0dXJuIG5ldyBnLlNsaWRlci5WaWV3KHtpZDoiZmllbGQtIitoLmlkLHByZWNpc2U6 aD0KLnR5cGU9M0Q9M0QiZmxvYXQiLG1pbjpoLm1pbixtYXg6aC5tYXh9KX0sX2ZpZWxkSGlkZGVu OmZ1bmN0aW9uKGgpe3JldHVybiBuPQpldyBnLkhpZGRlbih7aWQ6ImZpZWxkLSIraC5pZCxpbmZv OmguaW5mb30pfSxfZmllbGRCb29sZWFuOmZ1bmN0aW9uKGgpe3JldHU9CnJuIG5ldyBnLlJhZGlv QnV0dG9uLlZpZXcoe2lkOiJmaWVsZC0iK2guaWQsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0 cnVlIj0KfSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFsc2UifV19KX19KTtyZXR1cm57VmlldzpmfX0p OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxzIiwibXZj L3VpL3VpLXRhYmxlIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxlPQp0IiwibXZj L3Rvb2xzL3Rvb2xzLXJlcGVhdCIsIm12Yy90b29scy90b29scy1zZWxlY3QtY29udGVudCIsIm12 Yy90b29scy90b289CmxzLWlucHV0Il0sZnVuY3Rpb24oZSxiLGgsZCxjLGEsZil7dmFyIGc9M0RC YWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGosaSl7dGhpcy5hcHA9 M0RqO3RoaXMuaW5wdXRzPTNEaS5pbnB1dHM7aS5jbHNfdHI9M0Qic2VjdGlvbi1yb3ciPQo7dGhp cy50YWJsZT0zRG5ldyBiLlZpZXcoaSk7dGhpcy5zZXRFbGVtZW50KHRoaXMudGFibGUuJGVsKTt0 aGlzLnJlbmRlcigpfSw9CnJlbmRlcjpmdW5jdGlvbigpe3RoaXMudGFibGUuZGVsQWxsKCk7Zm9y KHZhciBqIGluIHRoaXMuaW5wdXRzKXt0aGlzLmFkZCh0aD0KaXMuaW5wdXRzW2pdKX19LGFkZDpm dW5jdGlvbihrKXt2YXIgaj0zRHRoaXM7dmFyIGk9M0RqUXVlcnkuZXh0ZW5kKHRydWUse30sPQpr KTtpLmlkPTNEay5pZD0zRGUudXVpZCgpO3RoaXMuYXBwLmlucHV0X2xpc3RbaS5pZF09M0RpO3Zh ciBsPTNEaS50eXBlO3N3aXQ9CmNoKGwpe2Nhc2UiY29uZGl0aW9uYWwiOnRoaXMuX2FkZENvbmRp dGlvbmFsKGkpO2JyZWFrO2Nhc2UicmVwZWF0Ijp0aGlzLl9hZD0KZFJlcGVhdChpKTticmVhaztj YXNlInNlY3Rpb24iOnRoaXMuX2FkZFNlY3Rpb24oaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9hZGRS PQpvdyhpKX19LF9hZGRDb25kaXRpb25hbDpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7ai50ZXN0 X3BhcmFtLmlkPTNEai5pZDt2YXI9CiBuPTNEdGhpcy5fYWRkUm93KGoudGVzdF9wYXJhbSk7bi5v cHRpb25zLm9uY2hhbmdlPTNEZnVuY3Rpb24odyl7dmFyIHY9M0RrLj0KYXBwLnRyZWUubWF0Y2hD YXNlKGosdyk7Zm9yKHZhciB1IGluIGouY2FzZXMpe3ZhciBxPTNEai5jYXNlc1t1XTt2YXIgdD0z RGouPQppZCsiLXNlY3Rpb24tIit1O3ZhciBwPTNEay50YWJsZS5nZXQodCk7dmFyIHM9M0RmYWxz ZTtmb3IodmFyIHIgaW4gcS5pbnB1dHM9Cil7aWYoIXEuaW5wdXRzW3JdLmhpZGRlbil7cz0zRHRy dWU7YnJlYWt9fWlmKHU9M0Q9M0R2JiZzKXtwLmZhZGVJbigiZmFzdCIpfT0KZWxzZXtwLmhpZGUo KX19ay5hcHAudHJpZ2dlcigicmVmcmVzaCIpfTtmb3IodmFyIG0gaW4gai5jYXNlcyl7dmFyIGw9 M0RqLmlkPQorIi1zZWN0aW9uLSIrbTt2YXIgbz0zRG5ldyBnKHRoaXMuYXBwLHtpbnB1dHM6ai5j YXNlc1ttXS5pbnB1dHMsY2xzOiJ1aS10YWI9CmxlLXBsYWluIn0pO28uJGVsLmFkZENsYXNzKCJ1 aS10YWJsZS1mb3JtLXNlY3Rpb24iKTt0aGlzLnRhYmxlLmFkZChvLiRlbCk7dD0KaGlzLnRhYmxl LmFwcGVuZChsKX1uLnRyaWdnZXIoImNoYW5nZSIpfSxfYWRkUmVwZWF0OmZ1bmN0aW9uKHApe3Zh ciBzPTNEdGhpPQpzO3ZhciBxPTNEMDtmdW5jdGlvbiBuKGksdSl7dmFyIHQ9M0RwLmlkKyItc2Vj dGlvbi0iKyhxKyspO3ZhciB2PTNEbnVsbDtpZig9CnUpe3Y9M0RmdW5jdGlvbigpe2wuZGVsKHQp O2wucmV0aXRsZShwLnRpdGxlKTtzLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fXZhcj0KIHc9M0Ru ZXcgZyhzLmFwcCx7aW5wdXRzOmksY2xzOiJ1aS10YWJsZS1wbGFpbiJ9KTtsLmFkZCh7aWQ6dCx0 aXRsZTpwLnRpdGxlPQosJGVsOncuJGVsLG9uZGVsOnZ9KTtsLnJldGl0bGUocC50aXRsZSl9dmFy IGw9M0RuZXcgYy5WaWV3KHt0aXRsZV9uZXc6cC50aXQ9CmxlLG1heDpwLm1heCxvbm5ldzpmdW5j dGlvbigpe24ocC5pbnB1dHMsdHJ1ZSk7cy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pOz0KdmFy IGo9M0RwLm1pbjt2YXIgcj0zRF8uc2l6ZShwLmNhY2hlKTtmb3IodmFyIG09M0QwO208TWF0aC5t YXgocixqKTttKyspe3ZhPQpyIG89M0RudWxsO2lmKG08cil7bz0zRHAuY2FjaGVbbV19ZWxzZXtv PTNEcC5pbnB1dHN9bihvLG0+PTNEail9dmFyIGs9M0RuZXc9CiBmKHRoaXMuYXBwLHtsYWJlbDpw LnRpdGxlLGhlbHA6cC5oZWxwLGZpZWxkOmx9KTtrLiRlbC5hZGRDbGFzcygidWktdGFibGUtZj0K b3JtLXNlY3Rpb24iKTt0aGlzLnRhYmxlLmFkZChrLiRlbCk7dGhpcy50YWJsZS5hcHBlbmQocC5p ZCl9LF9hZGRTZWN0aW9uOmZ1PQpuY3Rpb24oaSl7dmFyIGo9M0R0aGlzO3ZhciBuPTNEbmV3IGco ai5hcHAse2lucHV0czppLmlucHV0cyxjbHM6InVpLXRhYmxlLXA9CmxhaW4ifSk7dmFyIG09M0Ru ZXcgaC5CdXR0b25JY29uKHtpY29uOiJmYS1leWUtc2xhc2giLHRvb2x0aXA6IlNob3cvaGlkZSBz ZT0KY3Rpb24iLGNsczoidWktYnV0dG9uLWljb24tcGxhaW4ifSk7dmFyIGw9M0RuZXcgZC5WaWV3 KHt0aXRsZTppLmxhYmVsLGNsczoiPQp1aS1wb3J0bGV0LXNlY3Rpb24iLG9wZXJhdGlvbnM6e2J1 dHRvbl92aXNpYmxlOm19fSk7bC5hcHBlbmQobi4kZWwpO3ZhciBrPQo9M0RmYWxzZTtsLiRjb250 ZW50LmhpZGUoKTtsLiRoZWFkZXIuY3NzKCJjdXJzb3IiLCJwb2ludGVyIik7bC4kaGVhZGVyLm9u KCI9CmNsaWNrIixmdW5jdGlvbigpe2lmKGspe2s9M0RmYWxzZTtsLiRjb250ZW50LmhpZGUoKTtt LnNldEljb24oImZhLWV5ZS1zbGFzaD0KIil9ZWxzZXtrPTNEdHJ1ZTtsLiRjb250ZW50LmZhZGVJ bigiZmFzdCIpO20uc2V0SWNvbigiZmEtZXllIil9fSk7dGhpcy50YWJsPQplLmFkZChsLiRlbCk7 dGhpcy50YWJsZS5hcHBlbmQoaS5pZCl9LF9hZGRSb3c6ZnVuY3Rpb24oaSl7dmFyIGw9M0RpLmlk O3ZhciA9Cmo9M0R0aGlzLl9jcmVhdGVGaWVsZChpKTt0aGlzLmFwcC5maWVsZF9saXN0W2xdPTNE ajt2YXIgaz0zRG5ldyBmKHRoaXMuYXBwLD0Ke2xhYmVsOmkubGFiZWwsb3B0aW9uYWw6aS5vcHRp b25hbCxoZWxwOmkuaGVscCxmaWVsZDpqfSk7dGhpcy5hcHAuZWxlbWVudF9sPQppc3RbbF09M0Rr O3RoaXMudGFibGUuYWRkKGsuJGVsKTt0aGlzLnRhYmxlLmFwcGVuZChsKTtpZihpLmhpZGRlbil7 dGhpcy50YWI9CmxlLmdldChsKS5oaWRlKCl9cmV0dXJuIGp9LF9jcmVhdGVGaWVsZDpmdW5jdGlv bihpKXt2YXIgaj0zRG51bGw7c3dpdGNoKGkudD0KeXBlKXtjYXNlInRleHQiOmo9M0R0aGlzLl9m aWVsZFRleHQoaSk7YnJlYWs7Y2FzZSJzZWxlY3QiOmo9M0R0aGlzLl9maWVsZFNlPQpsZWN0KGkp O2JyZWFrO2Nhc2UiZGF0YSI6aj0zRHRoaXMuX2ZpZWxkRGF0YShpKTticmVhaztjYXNlImRhdGFf Y29sbGVjdGlvbiI9CjpqPTNEdGhpcy5fZmllbGREYXRhKGkpO2JyZWFrO2Nhc2UiZGF0YV9jb2x1 bW4iOmkuZXJyb3JfdGV4dD0zRCJNaXNzaW5nIGNvbD0KdW1ucyBpbiByZWZlcmVuY2VkIGRhdGFz ZXQuIjtqPTNEdGhpcy5fZmllbGRTZWxlY3QoaSk7YnJlYWs7Y2FzZSJoaWRkZW4iOmo9Cj0zRHRo aXMuX2ZpZWxkSGlkZGVuKGkpO2JyZWFrO2Nhc2UiaGlkZGVuX2RhdGEiOmo9M0R0aGlzLl9maWVs ZEhpZGRlbihpKTticj0KZWFrO2Nhc2UiaW50ZWdlciI6aj0zRHRoaXMuX2ZpZWxkU2xpZGVyKGkp O2JyZWFrO2Nhc2UiZmxvYXQiOmo9M0R0aGlzLl9maWVsPQpkU2xpZGVyKGkpO2JyZWFrO2Nhc2Ui Ym9vbGVhbiI6aj0zRHRoaXMuX2ZpZWxkQm9vbGVhbihpKTticmVhaztjYXNlImdlbm9tZWI9CnVp bGQiOmkuc2VhcmNoYWJsZT0zRHRydWU7aj0zRHRoaXMuX2ZpZWxkU2VsZWN0KGkpO2JyZWFrO2Nh c2UiZHJpbGxfZG93biI6aj0KPTNEdGhpcy5fZmllbGREcmlsbGRvd24oaSk7YnJlYWs7Y2FzZSJi YXNldXJsIjpqPTNEdGhpcy5fZmllbGRIaWRkZW4oaSk7YnJlPQphaztkZWZhdWx0OnRoaXMuYXBw LmluY29tcGF0aWJsZT0zRHRydWU7aWYoaS5vcHRpb25zKXtqPTNEdGhpcy5fZmllbGRTZWxlY3Q9 CihpKX1lbHNle2o9M0R0aGlzLl9maWVsZFRleHQoaSl9Y29uc29sZS5kZWJ1ZygidG9vbHMtZm9y bTo6X2FkZFJvdygpIDogQXV0bz0KIG1hdGNoZWQgZmllbGQgdHlwZSAoIitpLnR5cGUrIikuIil9 aWYoaS52YWx1ZSE9M0Q9M0R1bmRlZmluZWQpe2oudmFsdWUoaS52PQphbHVlKX1yZXR1cm4gan0s X2ZpZWxkRGF0YTpmdW5jdGlvbihpKXtpZih0aGlzLmFwcC53b3JrZmxvdyl7dmFyIGs9M0RlLnRl eHQ9CmlmeShpLmV4dGVuc2lvbnMudG9TdHJpbmcoKSk7aS5pbmZvPTNEIkRhdGEgaW5wdXQgJyIr aS5uYW1lKyInICgiK2srIikiO3JldD0KdXJuIHRoaXMuX2ZpZWxkSGlkZGVuKGkpfXZhciBqPTNE dGhpcztyZXR1cm4gbmV3IGEuVmlldyh0aGlzLmFwcCx7aWQ6ImZpZWxkPQotIitpLmlkLGV4dGVu c2lvbnM6aS5leHRlbnNpb25zLG11bHRpcGxlOmkubXVsdGlwbGUsdHlwZTppLnR5cGUsZGF0YTpp Lm9wdGk9Cm9ucyxvbmNoYW5nZTpmdW5jdGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19 KX0sX2ZpZWxkU2VsZWN0OmZ1bmN0aW9uKD0Kail7aWYodGhpcy5hcHAud29ya2Zsb3cmJmouaXNf ZHluYW1pYyl7aWYoIWUudmFsaWRhdGUoai52YWx1ZSkpe2oudmFsdWU9M0QiPQoifXJldHVybiB0 aGlzLl9maWVsZFRleHQoail9dmFyIGw9M0RbXTtmb3IodmFyIG0gaW4gai5vcHRpb25zKXt2YXIg bj0zRGoub3A9CnRpb25zW21dO2wucHVzaCh7bGFiZWw6blswXSx2YWx1ZTpuWzFdfSl9dmFyIG89 M0RoLlNlbGVjdDtzd2l0Y2goai5kaXNwbGF5KT0Ke2Nhc2UiY2hlY2tib3hlcyI6bz0zRGguQ2hl Y2tib3g7YnJlYWs7Y2FzZSJyYWRpbyI6bz0zRGguUmFkaW87YnJlYWt9dmFyIGs9Cj0zRHRoaXM7 cmV0dXJuIG5ldyBvLlZpZXcoe2lkOiJmaWVsZC0iK2ouaWQsZGF0YTpsLGVycm9yX3RleHQ6ai5l cnJvcl90ZXh0fD0KfCJObyBvcHRpb25zIGF2YWlsYWJsZSIsbXVsdGlwbGU6ai5tdWx0aXBsZSxz ZWFyY2hhYmxlOmouc2VhcmNoYWJsZSxvbmNoYW5nPQplOmZ1bmN0aW9uKCl7ay5hcHAudHJpZ2dl cigicmVmcmVzaCIpfX0pfSxfZmllbGREcmlsbGRvd246ZnVuY3Rpb24oaSl7dmFyIGo9Cj0zRHRo aXM7cmV0dXJuIG5ldyBoLkRyaWxsZG93bi5WaWV3KHtpZDoiZmllbGQtIitpLmlkLGRhdGE6aS5v cHRpb25zLGRpc3BsYT0KeTppLmRpc3BsYXksb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmln Z2VyKCJyZWZyZXNoIil9fSl9LF9maWVsZFRleHQ6ZnVuPQpjdGlvbihpKXt2YXIgaj0zRHRoaXM7 cmV0dXJuIG5ldyBoLklucHV0KHtpZDoiZmllbGQtIitpLmlkLGFyZWE6aS5hcmVhLG9uY2g9CmFu Z2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9LF9maWVsZFNsaWRlcjpm dW5jdGlvbihpKXt2YXIgaj0KPTNEdGhpcztyZXR1cm4gbmV3IGguU2xpZGVyLlZpZXcoe2lkOiJm aWVsZC0iK2kuaWQscHJlY2lzZTppLnR5cGU9M0Q9M0QiZmxvPQphdCIsbWluOmkubWluLG1heDpp Lm1heCxvbmNoYW5nZTpmdW5jdGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2Y9 CmllbGRIaWRkZW46ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBoLkhpZGRlbih7aWQ6ImZpZWxkLSIr aS5pZCxpbmZvOmkuaW5mb30pfT0KLF9maWVsZEJvb2xlYW46ZnVuY3Rpb24oaSl7dmFyIGo9M0R0 aGlzO3JldHVybiBuZXcgaC5SYWRpb0J1dHRvbi5WaWV3KHtpZDoiPQpmaWVsZC0iK2kuaWQsZGF0 YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1d LG89Cm5jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9fSk7cmV0 dXJue1ZpZXc6Z319KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDE1OTYy YjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIx ZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMv dG9vbHMtdHJlZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xz LXRyZWUuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy10cmVl LmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihhKXty ZXR1cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtpbml0aWFsaXo9CmU6ZnVuY3Rpb24oYil7dGhp cy5hcHA9M0RifSxmaW5hbGl6ZTpmdW5jdGlvbihnKXt2YXIgYj0zRHRoaXM7dGhpcy5tYXBfZGlj dD0KPTNEe307aWYoIXRoaXMuYXBwLnNlY3Rpb24pe3JldHVybnt9fWc9M0RnfHx7fTt2YXIgZj0z RHt9O3ZhciBlPTNEe307dGhpcy5fPQppdGVyYXRlKHRoaXMuYXBwLnNlY3Rpb24uJGVsLGUpO2Z1 bmN0aW9uIGQoaixpLGgpe2Zbal09M0RoO2IubWFwX2RpY3Rbal09M0Q9Cml9ZnVuY3Rpb24gYyhv LHIpe2Zvcih2YXIgbSBpbiByKXt2YXIgaz0zRHJbbV07aWYoay5pbnB1dCl7dmFyIHQ9M0RrLmlu cHV0Oz0KdmFyIG49M0RvO2lmKG8hPTNEIiIpe24rPTNEInwifW4rPTNEdC5uYW1lO3N3aXRjaCh0 LnR5cGUpe2Nhc2UicmVwZWF0Ijp2YXIgPQpqPTNEInNlY3Rpb24tIjt2YXIgdz0zRFtdO3ZhciBx PTNEbnVsbDtmb3IodmFyIHYgaW4gayl7dmFyIHA9M0R2LmluZGV4T2Yoaik9CjtpZihwIT0zRC0x KXtwKz0zRGoubGVuZ3RoO3cucHVzaChwYXJzZUludCh2LnN1YnN0cihwKSkpO2lmKCFxKXtxPTNE di5zdWJzdD0KcigwLHApfX19dy5zb3J0KGZ1bmN0aW9uKHgsaSl7cmV0dXJuIHgtaX0pO3ZhciBt PTNEMDtmb3IodmFyIGwgaW4gdyl7YyhuKyJfPQoiK20rKyxrW3Erd1tsXV0pfWJyZWFrO2Nhc2Ui Y29uZGl0aW9uYWwiOnZhciB1PTNEYi5hcHAuZmllbGRfbGlzdFt0LmlkXS52YWw9CnVlKCk7aWYo Z1t0LnRlc3RfcGFyYW0udHlwZV0pe3U9M0RnW3QudGVzdF9wYXJhbS50eXBlXSh1KX1kKG4rInwi K3QudGVzdF9wYT0KcmFtLm5hbWUsdC5pZCx1KTt2YXIgaD0zRGIubWF0Y2hDYXNlKHQsdSk7aWYo aCE9M0QtMSl7YyhuLHJbdC5pZCsiLXNlY3Rpb24tPQoiK2hdKX1icmVhaztkZWZhdWx0OnZhciBz PTNEYi5hcHAuZmllbGRfbGlzdFt0LmlkXTt2YXIgdT0zRHMudmFsdWUoKTtpZihnW3Q9Ci50eXBl XSl7dT0zRGdbdC50eXBlXSh1KX1pZighcy5za2lwKXtpZihzLnZhbGlkYXRlJiYhcy52YWxpZGF0 ZSh1KSl7dT0zRG51bD0KbH1kKG4sdC5pZCx1KX19fX19YygiIixlKTtyZXR1cm4gZn0sbWF0Y2g6 ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubWFwX2RpY3QmPQomdGhpcy5tYXBfZGljdFtiXX0sbWF0 Y2hDYXNlOmZ1bmN0aW9uKGIsZCl7aWYoYi50ZXN0X3BhcmFtLnR5cGU9M0Q9M0QiYm9vbGU9CmFu Iil7aWYoZD0zRD0zRCJ0cnVlIil7ZD0zRGIudGVzdF9wYXJhbS50cnVldmFsdWV8fCJ0cnVlIn1l bHNle2Q9M0RiLnRlc3RfcD0KYXJhbS5mYWxzZXZhbHVlfHwiZmFsc2UifX1mb3IodmFyIGMgaW4g Yi5jYXNlcyl7aWYoYi5jYXNlc1tjXS52YWx1ZT0zRD0zRGQpPQp7cmV0dXJuIGN9fXJldHVybiAt MX0sbWF0Y2hNb2RlbDpmdW5jdGlvbihkLGYpe3ZhciBiPTNEe307dmFyIGM9M0R0aGlzO2Z1bmM9 CnRpb24gZShnLHApe2Zvcih2YXIgbSBpbiBwKXt2YXIgaz0zRHBbbV07dmFyIG49M0RrLm5hbWU7 aWYoZyE9M0QiIil7bj0zRGcrIj0KfCIrbn1zd2l0Y2goay50eXBlKXtjYXNlInJlcGVhdCI6Zm9y KHZhciBsIGluIGsuY2FjaGUpe2UobisiXyIrbCxrLmNhY2hlW2xdPQopfWJyZWFrO2Nhc2UiY29u ZGl0aW9uYWwiOnZhciBxPTNEay50ZXN0X3BhcmFtJiZrLnRlc3RfcGFyYW0udmFsdWU7dmFyIGg9 M0Q9CmMubWF0Y2hDYXNlKGsscSk7aWYoaCE9M0QtMSl7ZShuLGsuY2FzZXNbaF0uaW5wdXRzKX1i cmVhaztkZWZhdWx0OnZhciBvPTNEYz0KLm1hcF9kaWN0W25dO2lmKG8pe2YobyxrKX19fX1lKCIi LGQuaW5wdXRzKTtyZXR1cm4gYn0sbWF0Y2hSZXNwb25zZTpmdW5jdGlvPQpuKGQpe3ZhciBiPTNE e307dmFyIGM9M0R0aGlzO2Z1bmN0aW9uIGUobCxqKXtpZih0eXBlb2Ygaj0zRD0zRD0zRCJzdHJp bmciKXs9CnZhciBnPTNEYy5tYXBfZGljdFtsXTtpZihnKXtiW2ddPTNEan19ZWxzZXtmb3IodmFy IGggaW4gail7dmFyIGY9M0RoO2lmKGwhPQo9M0Q9M0QiIil7dmFyIGs9M0QifCI7aWYoaiBpbnN0 YW5jZW9mIEFycmF5KXtrPTNEIl8ifWY9M0RsK2srZn1lKGYsaltoXSl9fX09CmUoIiIsZCk7cmV0 dXJuIGJ9LF9pdGVyYXRlOmZ1bmN0aW9uKGQsZSl7dmFyIGI9M0R0aGlzO3ZhciBjPTNEJChkKS5j aGlsZHJlbj0KKCk7Yy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9M0R0aGlzO3ZhciBnPTNEJChoKS5h dHRyKCJpZCIpO2lmKCQoaCkuaGFzQ2xhc3MoPQoic2VjdGlvbi1yb3ciKSl7ZVtnXT0zRHt9O3Zh ciBmPTNEYi5hcHAuaW5wdXRfbGlzdFtnXTtpZihmKXtlW2ddPTNEe2lucHV0OmY9Cn19Yi5faXRl cmF0ZShoLGVbZ10pfWVsc2V7Yi5faXRlcmF0ZShoLGUpfX0pfX0pfSk7ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorZGVmaW5lKFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihhKXtyZXR1cm4g QmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtpbml0aWFsaXo9CmU6ZnVuY3Rpb24oYil7dGhpcy5hcHA9 M0RifSxmaW5hbGl6ZTpmdW5jdGlvbihnKXt2YXIgYj0zRHRoaXM7dGhpcy5tYXBfZGljdD0KPTNE e307aWYoIXRoaXMuYXBwLnNlY3Rpb24pe3JldHVybnt9fWc9M0RnfHx7fTt2YXIgZj0zRHt9O3Zh ciBlPTNEe307dGhpcy5fPQppdGVyYXRlKHRoaXMuYXBwLnNlY3Rpb24uJGVsLGUpO2Z1bmN0aW9u IGQoaixpLGgpe2Zbal09M0RoO2IubWFwX2RpY3Rbal09M0Q9Cml9ZnVuY3Rpb24gYyhvLHIpe2Zv cih2YXIgbSBpbiByKXt2YXIgaz0zRHJbbV07aWYoay5pbnB1dCl7dmFyIHQ9M0RrLmlucHV0Oz0K dmFyIG49M0RvO2lmKG8hPTNEIiIpe24rPTNEInwifW4rPTNEdC5uYW1lO3N3aXRjaCh0LnR5cGUp e2Nhc2UicmVwZWF0Ijp2YXIgPQpqPTNEInNlY3Rpb24tIjt2YXIgdz0zRFtdO3ZhciBxPTNEbnVs bDtmb3IodmFyIHYgaW4gayl7dmFyIHA9M0R2LmluZGV4T2Yoaik9CjtpZihwIT0zRC0xKXtwKz0z RGoubGVuZ3RoO3cucHVzaChwYXJzZUludCh2LnN1YnN0cihwKSkpO2lmKCFxKXtxPTNEdi5zdWJz dD0KcigwLHApfX19dy5zb3J0KGZ1bmN0aW9uKHgsaSl7cmV0dXJuIHgtaX0pO3ZhciBtPTNEMDtm b3IodmFyIGwgaW4gdyl7YyhuKyJfPQoiK20rKyxrW3Erd1tsXV0pfWJyZWFrO2Nhc2UiY29uZGl0 aW9uYWwiOnZhciB1PTNEYi5hcHAuZmllbGRfbGlzdFt0LmlkXS52YWw9CnVlKCk7aWYoZ1t0LnRl c3RfcGFyYW0udHlwZV0pe3U9M0RnW3QudGVzdF9wYXJhbS50eXBlXSh1KX1kKG4rInwiK3QudGVz dF9wYT0KcmFtLm5hbWUsdC5pZCx1KTt2YXIgaD0zRGIubWF0Y2hDYXNlKHQsdSk7aWYoaCE9M0Qt MSl7YyhuLHJbdC5pZCsiLXNlY3Rpb24tPQoiK2hdKX1icmVhaztjYXNlInNlY3Rpb24iOmMoIiIs ayk7YnJlYWs7ZGVmYXVsdDp2YXIgcz0zRGIuYXBwLmZpZWxkX2xpc3RbdC49CmlkXTtpZihzJiZz LnZhbHVlKXt2YXIgdT0zRHMudmFsdWUoKTtpZihnW3QudHlwZV0pe3U9M0RnW3QudHlwZV0odSl9 aWYoIXMucz0Ka2lwKXtpZihzLnZhbGlkYXRlJiYhcy52YWxpZGF0ZSh1KSl7dT0zRG51bGx9aWYo dC5pZ25vcmU9M0Q9M0Q9M0R1bmRlZmluZWR8PQp8KHUmJnQuaWdub3JlIT0zRHUpKXtkKG4sdC5p ZCx1KX19fX19fX1jKCIiLGUpO3JldHVybiBmfSxtYXRjaDpmdW5jdGlvbihiKXs9CnJldHVybiB0 aGlzLm1hcF9kaWN0JiZ0aGlzLm1hcF9kaWN0W2JdfSxtYXRjaENhc2U6ZnVuY3Rpb24oYixkKXtp ZihiLnRlc3RfcD0KYXJhbS50eXBlPTNEPTNEImJvb2xlYW4iKXtpZihkPTNEPTNEInRydWUiKXtk PTNEYi50ZXN0X3BhcmFtLnRydWV2YWx1ZXx8InRyPQp1ZSJ9ZWxzZXtkPTNEYi50ZXN0X3BhcmFt LmZhbHNldmFsdWV8fCJmYWxzZSJ9fWZvcih2YXIgYyBpbiBiLmNhc2VzKXtpZihiLmM9CmFzZXNb Y10udmFsdWU9M0Q9M0RkKXtyZXR1cm4gY319cmV0dXJuIC0xfSxtYXRjaE1vZGVsOmZ1bmN0aW9u KGQsZil7dmFyIGI9Cj0zRHt9O3ZhciBjPTNEdGhpcztmdW5jdGlvbiBlKGcscCl7Zm9yKHZhciBt IGluIHApe3ZhciBrPTNEcFttXTt2YXIgbj0zRGsubj0KYW1lO2lmKGchPTNEIiIpe249M0RnKyJ8 IitufXN3aXRjaChrLnR5cGUpe2Nhc2UicmVwZWF0Ijpmb3IodmFyIGwgaW4gay5jYWNoPQplKXtl KG4rIl8iK2wsay5jYWNoZVtsXSl9YnJlYWs7Y2FzZSJjb25kaXRpb25hbCI6dmFyIHE9M0RrLnRl c3RfcGFyYW0mJmsudGU9CnN0X3BhcmFtLnZhbHVlO3ZhciBoPTNEYy5tYXRjaENhc2UoayxxKTtp ZihoIT0zRC0xKXtlKG4say5jYXNlc1toXS5pbnB1dHMpfT0KYnJlYWs7ZGVmYXVsdDp2YXIgbz0z RGMubWFwX2RpY3Rbbl07aWYobyl7ZihvLGspfX19fWUoIiIsZC5pbnB1dHMpO3JldHVybiBiPQp9 LG1hdGNoUmVzcG9uc2U6ZnVuY3Rpb24oZCl7dmFyIGI9M0R7fTt2YXIgYz0zRHRoaXM7ZnVuY3Rp b24gZShsLGope2lmKHR5cGU9Cm9mIGo9M0Q9M0Q9M0Qic3RyaW5nIil7dmFyIGc9M0RjLm1hcF9k aWN0W2xdO2lmKGcpe2JbZ109M0RqfX1lbHNle2Zvcih2YXIgaD0KIGluIGope3ZhciBmPTNEaDtp ZihsIT0zRD0zRCIiKXt2YXIgaz0zRCJ8IjtpZihqIGluc3RhbmNlb2YgQXJyYXkpe2s9M0QiXyJ9 PQpmPTNEbCtrK2Z9ZShmLGpbaF0pfX19ZSgiIixkKTtyZXR1cm4gYn0sX2l0ZXJhdGU6ZnVuY3Rp b24oZCxlKXt2YXIgYj0zRHRoaXM9Cjt2YXIgYz0zRCQoZCkuY2hpbGRyZW4oKTtjLmVhY2goZnVu Y3Rpb24oKXt2YXIgaD0zRHRoaXM7dmFyIGc9M0QkKGgpLmF0dHIoIj0KaWQiKTtpZigkKGgpLmhh c0NsYXNzKCJzZWN0aW9uLXJvdyIpKXtlW2ddPTNEe307dmFyIGY9M0RiLmFwcC5pbnB1dF9saXN0 W2ddPQo7aWYoZil7ZVtnXT0zRHtpbnB1dDpmfX1iLl9pdGVyYXRlKGgsZVtnXSl9ZWxzZXtiLl9p dGVyYXRlKGgsZSl9fSl9fSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1y IDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0 M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMv dWkvdWktbWlzYy5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3VpL3VpLW1pc2Mu anMKKysrIGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy91aS91aS1taXNjLmpzCkBAIC0xLDEg KzEsMSBAQAotZGVmaW5lKFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktc2VsZWN0LWRlZmF1bHQi LCJtdmMvdWkvdWktc2xpZGVyIiwibXZjL3U9CmkvdWktb3B0aW9ucyIsIm12Yy91aS91aS1kcmls bGRvd24iLCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLCJtdmMvdWkvdWktbW9kYT0KbCJdLGZ1bmN0 aW9uKGssYixlLG8sbCxxLG0pe3ZhciBkPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNE ZWZhdWx0Ont1PQpybDoiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24ocil7dGhpcy5vcHRp b25zPTNEay5tZXJnZShyLHRoaXMub3B0aW9uc0Q9CmVmYXVsdCk7dGhpcy5zZXRFbGVtZW50KHRo aXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpfSxfdGVtcGxhdGU6ZnVuY3Rpb24ocj0KKXtyZXR1 cm4nPGltZyBjbGFzcz0zRCJ1aS1pbWFnZSAnK3IuY2xzKyciIHNyYz0zRCInK3IudXJsKyciLz4n fX0pO3ZhciBqPTNEPQpCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e3RpdGxl OiIiLGNsczoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbig9CnIpe3RoaXMub3B0aW9ucz0zRGsubWVy Z2Uocix0aGlzLm9wdGlvbnNEZWZhdWx0KTt0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcD0KbGF0 ZSh0aGlzLm9wdGlvbnMpKX0sdGl0bGU6ZnVuY3Rpb24ocil7dGhpcy4kZWwuaHRtbChyKX0sX3Rl bXBsYXRlOmZ1bmN0aW9uPQoocil7cmV0dXJuJzxsYWJlbCBjbGFzcz0zRCJ1aS1sYWJlbCAnK3Iu Y2xzKyciPicrci50aXRsZSsiPC9sYWJlbD4ifSx2YWx1ZTo9CmZ1bmN0aW9uKCl7cmV0dXJuIG9w dGlvbnMudGl0bGV9fSk7dmFyIGM9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZj0K YXVsdDp7ZmxvYXRpbmc6InJpZ2h0IixpY29uOiIiLHRvb2x0aXA6IiIscGxhY2VtZW50OiJib3R0 b20iLHRpdGxlOiIiLGNsczoiPQoifSxpbml0aWFsaXplOmZ1bmN0aW9uKHIpe3RoaXMub3B0aW9u cz0zRGsubWVyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWx0KTt0aGk9CnMuc2V0RWxlbWVudCh0aGlz Ll90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTskKHRoaXMuZWwpLnRvb2x0aXAoe3RpdGxlOnIudG9v bD0KdGlwLHBsYWNlbWVudDoiYm90dG9tIn0pfSxfdGVtcGxhdGU6ZnVuY3Rpb24ocil7cmV0dXJu JzxkaXY+PHNwYW4gY2xhc3M9M0QiPQpmYSAnK3IuaWNvbisnIiBjbGFzcz0zRCJ1aS1pY29uIi8+ Jm5ic3A7JytyLnRpdGxlKyI8L2Rpdj4ifX0pO3ZhciBnPTNEQmFja2I9Cm9uZS5WaWV3LmV4dGVu ZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0IixjbHM6 InVpLT0KYnV0dG9uIGJ0biBidG4tZGVmYXVsdCIsaWNvbjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlv bihyKXt0aGlzLm9wdGlvbnM9M0RrLm1lPQpyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWx0KTt0aGlz LnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7JCg9CnRoaXMuZWwpLm9u KCJjbGljayIsZnVuY3Rpb24oKXskKCIudG9vbHRpcCIpLmhpZGUoKTtpZihyLm9uY2xpY2spe3Iu b25jbGljaz0KKCl9fSk7JCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTpyLnRvb2x0aXAscGxhY2Vt ZW50OiJib3R0b20ifSl9LF90ZW1wbGF0ZTpmPQp1bmN0aW9uKHIpe3ZhciBzPTNEJzxidXR0b24g aWQ9M0QiJytyLmlkKyciIHR5cGU9M0Qic3VibWl0IiBzdHlsZT0zRCJmbG9hdDo9CiAnK3IuZmxv YXRpbmcrJzsiIHR5cGU9M0QiYnV0dG9uIiBjbGFzcz0zRCInK3IuY2xzKyciPic7aWYoci5pY29u KXtzKz0zRCc8aT0KIGNsYXNzPTNEImljb24gZmEgJytyLmljb24rJyI+PC9pPiZuYnNwOyd9cys9 M0RyLnRpdGxlKyI8L2J1dHRvbj4iO3JldHVybiBzPQp9fSk7dmFyIGg9M0RCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc9Cjoicmln aHQiLGNsczoidWktYnV0dG9uLWljb24iLGljb246IiIsdG9vbHRpcDoiIixvbmNsaWNrOm51bGx9 LGluaXRpYWxpemU6Zj0KdW5jdGlvbihzKXt0aGlzLm9wdGlvbnM9M0RrLm1lcmdlKHMsdGhpcy5v cHRpb25zRGVmYXVsdCk7dGhpcy5zZXRFbGVtZW50KHRoPQppcy5fdGVtcGxhdGUodGhpcy5vcHRp b25zKSk7dGhpcy4kYnV0dG9uPTNEdGhpcy4kZWwuZmluZCgiLmJ1dHRvbiIpO3ZhciByPQo9M0R0 aGlzOyQodGhpcy5lbCkub24oImNsaWNrIixmdW5jdGlvbigpeyQoIi50b29sdGlwIikuaGlkZSgp O2lmKHMub25jbGljayY9CiYhci5kaXNhYmxlZCl7cy5vbmNsaWNrKCl9fSk7JCh0aGlzLmVsKS50 b29sdGlwKHt0aXRsZTpzLnRvb2x0aXAscGxhY2VtZW50Oj0KImJvdHRvbSJ9KX0sZGlzYWJsZTpm dW5jdGlvbigpe3RoaXMuJGJ1dHRvbi5hZGRDbGFzcygiZGlzYWJsZWQiKTt0aGlzLmRpc2FiPQps ZWQ9M0R0cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLiRidXR0b24ucmVtb3ZlQ2xhc3MoImRp c2FibGVkIik7dGhpcy5kaXM9CmFibGVkPTNEZmFsc2V9LF90ZW1wbGF0ZTpmdW5jdGlvbihyKXt2 YXIgcz0zRCIiO2lmKHIudGl0bGUpe3M9M0Qid2lkdGg6IGF1dD0KbzsifXZhciB0PTNEJzxkaXYg aWQ9M0QiJytyLmlkKyciIHN0eWxlPTNEImZsb2F0OiAnK3IuZmxvYXRpbmcrIjsgIitzKyciIGNs PQphc3M9M0QiJytyLmNscysnIj4nO2lmKHIudGl0bGUpe3QrPTNEJzxkaXYgY2xhc3M9M0QiYnV0 dG9uIj48aSBjbGFzcz0zRCJpY289Cm4gZmEgJytyLmljb24rJyIvPiZuYnNwOzxzcGFuIGNsYXNz PTNEInRpdGxlIj4nK3IudGl0bGUrIjwvc3Bhbj48L2Rpdj4ifWVscz0KZXt0Kz0zRCc8aSBjbGFz cz0zRCJpY29uIGZhICcrci5pY29uKyciLz4nfXQrPTNEIjwvZGl2PiI7cmV0dXJuIHR9fSk7dmFy IGY9Cj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dGl0bGU6IiIsY2xz OiIifSxpbml0aWFsaXplOmZ1bmN0aT0Kb24ocil7dGhpcy5vcHRpb25zPTNEay5tZXJnZShyLHRo aXMub3B0aW9uc0RlZmF1bHQpO3RoaXMuc2V0RWxlbWVudCh0aGlzLl90PQplbXBsYXRlKHRoaXMu b3B0aW9ucykpOyQodGhpcy5lbCkub24oImNsaWNrIixyLm9uY2xpY2spfSxfdGVtcGxhdGU6ZnVu Y3Rpb249CihyKXtyZXR1cm4nPGRpdj48YSBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSIgY2xh c3M9M0QidWktYW5jaG9yICcrci5jbHMrJz0KIj4nK3IudGl0bGUrIjwvYT48L2Rpdj4ifX0pO3Zh ciBuPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OnttPQplc3NhZ2U6bnVs bCxzdGF0dXM6ImluZm8iLHBlcnNpc3RlbnQ6ZmFsc2V9LGluaXRpYWxpemU6ZnVuY3Rpb24ocil7 dGhpcy5vcHQ9CmlvbnM9M0RrLm1lcmdlKHIsdGhpcy5vcHRpb25zRGVmYXVsdCk7dGhpcy5zZXRF bGVtZW50KCI8ZGl2PjwvZGl2PiIpO2lmKHRoaT0Kcy5vcHRpb25zLm1lc3NhZ2Upe3RoaXMudXBk YXRlKHRoaXMub3B0aW9ucyl9fSx1cGRhdGU6ZnVuY3Rpb24ocyl7dGhpcy5vcHRpPQpvbnM9M0Rr Lm1lcmdlKHMsdGhpcy5vcHRpb25zRGVmYXVsdCk7aWYocy5tZXNzYWdlIT0zRCIiKXt0aGlzLiRl bC5odG1sKHRoaXM9Ci5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7dGhpcy4kZWwuZmluZCgiLmFs ZXJ0IikuYXBwZW5kKHMubWVzc2FnZSk7dGhpcy4kZT0KbC5mYWRlSW4oKTtpZih0aGlzLnRpbWVv dXQpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KX1pZighcy5wZXJzaXN0PQplbnQp e3ZhciByPTNEdGhpczt0aGlzLnRpbWVvdXQ9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigp e2lmKHIuJGVsLmlzKCI9Cjp2aXNpYmxlIikpe3IuJGVsLmZhZGVPdXQoKX1lbHNle3IuJGVsLmhp ZGUoKX19LDMwMDApfX1lbHNle3RoaXMuJGVsLmZhZGVPdT0KdCgpfX0sX3RlbXBsYXRlOmZ1bmN0 aW9uKHIpe3JldHVybic8ZGl2IGNsYXNzPTNEInVpLW1lc3NhZ2UgYWxlcnQgYWxlcnQtJytyPQou c3RhdHVzKyciLz4nfX0pO3ZhciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZh dWx0OntvbmNsaWNrOm51bGw9CixzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHMp e3RoaXMub3B0aW9ucz0zRGsubWVyZ2Uocyx0aGlzLm9wdGlvbj0Kc0RlZmF1bHQpO3RoaXMuc2V0 RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt2YXIgcj0zRHRoaXM7aWYodGhp PQpzLm9wdGlvbnMub25jbGljayl7dGhpcy4kZWwub24oInN1Ym1pdCIsZnVuY3Rpb24odSl7dmFy IHQ9M0RyLiRlbC5maW5kKCIjc2U9CmFyY2giKTtyLm9wdGlvbnMub25jbGljayh0LnZhbCgpKX0p fX0sX3RlbXBsYXRlOmZ1bmN0aW9uKHIpe3JldHVybic8ZGl2IGNsYT0Kc3M9M0QidWktc2VhcmNo Ij48Zm9ybSBvbnN1Ym1pdD0zRCJyZXR1cm4gZmFsc2U7Ij48aW5wdXQgaWQ9M0Qic2VhcmNoIiBj bGFzPQpzPTNEImZvcm0tY29udHJvbCBpbnB1dC1zbSIgdHlwZT0zRCJ0ZXh0IiBuYW1lPTNEInNl YXJjaCIgcGxhY2Vob2xkZXI9M0QiU2U9CmFyY2guLi4iIHZhbHVlPTNEIicrci5zZWFyY2h3b3Jk KyciPjxidXR0b24gdHlwZT0zRCJzdWJtaXQiIGNsYXNzPTNEImJ0biBzZT0KYXJjaC1idG4iPjxp IGNsYXNzPTNEImZhIGZhLXNlYXJjaCI+PC9pPjwvYnV0dG9uPjwvZm9ybT48L2Rpdj4nfX0pO3Zh ciBpPTNEPQpCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e3R5cGU6InRleHQi LHBsYWNlaG9sZGVyOiIiLGRpc2FibGVkOmY9CmFsc2UsdmlzaWJsZTp0cnVlLGNsczoiIixhcmVh OmZhbHNlfSxpbml0aWFsaXplOmZ1bmN0aW9uKHMpe3RoaXMub3B0aW9ucz0zRD0Kay5tZXJnZShz LHRoaXMub3B0aW9uc0RlZmF1bHQpO3RoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlz Lm9wdGlvbnMpPQopO2lmKHRoaXMub3B0aW9ucy52YWx1ZSE9M0Q9M0R1bmRlZmluZWQpe3RoaXMu dmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKX1pZig9CnRoaXMub3B0aW9ucy5kaXNhYmxlZCl7dGhp cy4kZWwucHJvcCgiZGlzYWJsZWQiLHRydWUpfWlmKCF0aGlzLm9wdGlvbnMudmlzaT0KYmxlKXt0 aGlzLiRlbC5oaWRlKCl9dmFyIHI9M0R0aGlzO3RoaXMuJGVsLm9uKCJpbnB1dCIsZnVuY3Rpb24o KXtpZihyLm9wdGlvPQpucy5vbmNoYW5nZSl7ci5vcHRpb25zLm9uY2hhbmdlKHIuJGVsLnZhbCgp KX19KX0sdmFsdWU6ZnVuY3Rpb24ocil7aWYociE9M0Q9Cj0zRHVuZGVmaW5lZCl7dGhpcy4kZWwu dmFsKHIpfXJldHVybiB0aGlzLiRlbC52YWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKHIpez0KaWYo ci5hcmVhKXtyZXR1cm4nPHRleHRhcmVhIGlkPTNEIicrci5pZCsnIiBjbGFzcz0zRCJ1aS10ZXh0 YXJlYSAnK3IuY2xzKyciPQo+PC90ZXh0YXJlYT4nfWVsc2V7cmV0dXJuJzxpbnB1dCBpZD0zRCIn K3IuaWQrJyIgdHlwZT0zRCInK3IudHlwZSsnIiB2YWx1ZT0KPTNEIicrci52YWx1ZSsnIiBwbGFj ZWhvbGRlcj0zRCInK3IucGxhY2Vob2xkZXIrJyIgY2xhc3M9M0QidWktaW5wdXQgJytyLmNsPQpz KyciPid9fX0pO3ZhciBwPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rp b24ocil7dGhpcy5vcHRpb249CnM9M0RyO3RoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0 aGlzLm9wdGlvbnMpKTtpZih0aGlzLm9wdGlvbnMudmFsdWUhPQo9M0Q9M0R1bmRlZmluZWQpe3Ro aXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKX19LHZhbHVlOmZ1bmN0aW9uKHIpe2lmKHIhPQo9 M0Q9M0R1bmRlZmluZWQpe3RoaXMuJCgiaGlkZGVuIikudmFsKHIpfXJldHVybiB0aGlzLiQoImhp ZGRlbiIpLnZhbCgpfSxfdGU9Cm1wbGF0ZTpmdW5jdGlvbihzKXt2YXIgcj0zRCc8ZGl2IGlkPTNE Iicrcy5pZCsnIiA+JztpZihzLmluZm8pe3IrPTNEIjxsYWJlbD0KPiIrcy5pbmZvKyI8L2xhYmVs PiJ9cis9M0QnPGhpZGRlbiB2YWx1ZT0zRCInK3MudmFsdWUrJyIvPjwvZGl2Pic7cmV0dXJuIHJ9 PQp9KTtyZXR1cm57QW5jaG9yOmYsQnV0dG9uOmcsQnV0dG9uSWNvbjpoLEJ1dHRvbk1lbnU6cSxJ Y29uOmMsSW1hZ2U6ZCxJbnB1dDo9CmksTGFiZWw6aixNZXNzYWdlOm4sTW9kYWw6bSxSYWRpb0J1 dHRvbjpvLlJhZGlvQnV0dG9uLENoZWNrYm94Om8uQ2hlY2tib3gsUj0KYWRpbzpvLlJhZGlvLFNl YXJjaGJveDphLFNlbGVjdDpiLEhpZGRlbjpwLFNsaWRlcjplLERyaWxsZG93bjpsfX0pOwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxzIiwibXZjL3VpL3Vp LXNlbGVjdC1kZWZhdWx0IiwibXZjL3VpL3VpLXNsaWRlciIsIm12Yy91PQppL3VpLW9wdGlvbnMi LCJtdmMvdWkvdWktZHJpbGxkb3duIiwibXZjL3VpL3VpLWJ1dHRvbi1tZW51IiwibXZjL3VpL3Vp LW1vZGE9CmwiXSxmdW5jdGlvbihrLGIsZSxvLGwscSxtKXt2YXIgZD0zREJhY2tib25lLlZpZXcu ZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dT0Kcmw6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0 aW9uKHIpe3RoaXMub3B0aW9ucz0zRGsubWVyZ2Uocix0aGlzLm9wdGlvbnNEPQplZmF1bHQpO3Ro aXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKX0sX3RlbXBsYXRlOmZ1 bmN0aW9uKHI9Cil7cmV0dXJuJzxpbWcgY2xhc3M9M0QidWktaW1hZ2UgJytyLmNscysnIiBzcmM9 M0QiJytyLnVybCsnIi8+J319KTt2YXIgaj0zRD0KQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlv bnNEZWZhdWx0Ont0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oPQpyKXt0aGlz Lm9wdGlvbnM9M0RrLm1lcmdlKHIsdGhpcy5vcHRpb25zRGVmYXVsdCk7dGhpcy5zZXRFbGVtZW50 KHRoaXMuX3RlbXA9CmxhdGUodGhpcy5vcHRpb25zKSl9LHRpdGxlOmZ1bmN0aW9uKHIpe3RoaXMu JGVsLmh0bWwocil9LF90ZW1wbGF0ZTpmdW5jdGlvbj0KKHIpe3JldHVybic8bGFiZWwgY2xhc3M9 M0QidWktbGFiZWwgJytyLmNscysnIj4nK3IudGl0bGUrIjwvbGFiZWw+In0sdmFsdWU6PQpmdW5j dGlvbigpe3JldHVybiBvcHRpb25zLnRpdGxlfX0pO3ZhciBjPTNEQmFja2JvbmUuVmlldy5leHRl bmQoe29wdGlvbnNEZWY9CmF1bHQ6e2Zsb2F0aW5nOiJyaWdodCIsaWNvbjoiIix0b29sdGlwOiIi LHBsYWNlbWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6Ij0KIn0saW5pdGlhbGl6ZTpmdW5jdGlv bihyKXt0aGlzLm9wdGlvbnM9M0RrLm1lcmdlKHIsdGhpcy5vcHRpb25zRGVmYXVsdCk7dGhpPQpz LnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7JCh0aGlzLmVsKS50b29s dGlwKHt0aXRsZTpyLnRvb2w9CnRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1 bmN0aW9uKHIpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEIj0KZmEgJytyLmljb24rJyIgY2xh c3M9M0QidWktaWNvbiIvPiZuYnNwOycrci50aXRsZSsiPC9kaXY+In19KTt2YXIgZz0zREJhY2ti PQpvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDpudWxsLHRpdGxlOiIiLGZsb2F0 aW5nOiJyaWdodCIsY2xzOiJ1aS09CmJ1dHRvbiBidG4gYnRuLWRlZmF1bHQiLGljb246IiJ9LGlu aXRpYWxpemU6ZnVuY3Rpb24ocil7dGhpcy5vcHRpb25zPTNEay5tZT0KcmdlKHIsdGhpcy5vcHRp b25zRGVmYXVsdCk7dGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykp OyQoPQp0aGlzLmVsKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7JCgiLnRvb2x0aXAiKS5oaWRlKCk7 aWYoci5vbmNsaWNrKXtyLm9uY2xpY2s9CigpfX0pOyQodGhpcy5lbCkudG9vbHRpcCh7dGl0bGU6 ci50b29sdGlwLHBsYWNlbWVudDoiYm90dG9tIn0pfSxfdGVtcGxhdGU6Zj0KdW5jdGlvbihyKXt2 YXIgcz0zRCc8YnV0dG9uIGlkPTNEIicrci5pZCsnIiB0eXBlPTNEInN1Ym1pdCIgc3R5bGU9M0Qi ZmxvYXQ6PQogJytyLmZsb2F0aW5nKyc7IiB0eXBlPTNEImJ1dHRvbiIgY2xhc3M9M0QiJytyLmNs cysnIj4nO2lmKHIuaWNvbil7cys9M0QnPGk9CiBjbGFzcz0zRCJpY29uIGZhICcrci5pY29uKyci PjwvaT4mbmJzcDsnfXMrPTNEci50aXRsZSsiPC9idXR0b24+IjtyZXR1cm4gcz0KfX0pO3ZhciBo PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDpudWxsLHRpdGxlOiIi LGZsb2F0aW5nPQo6InJpZ2h0IixjbHM6InVpLWJ1dHRvbi1pY29uIixpY29uOiIiLHRvb2x0aXA6 IiIsb25jbGljazpudWxsfSxpbml0aWFsaXplOmY9CnVuY3Rpb24ocyl7dGhpcy5vcHRpb25zPTNE ay5tZXJnZShzLHRoaXMub3B0aW9uc0RlZmF1bHQpO3RoaXMuc2V0RWxlbWVudCh0aD0KaXMuX3Rl bXBsYXRlKHRoaXMub3B0aW9ucykpO3RoaXMuJGJ1dHRvbj0zRHRoaXMuJGVsLmZpbmQoIi5idXR0 b24iKTt2YXIgcj0KPTNEdGhpczskKHRoaXMuZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIu dG9vbHRpcCIpLmhpZGUoKTtpZihzLm9uY2xpY2smPQomIXIuZGlzYWJsZWQpe3Mub25jbGljaygp fX0pOyQodGhpcy5lbCkudG9vbHRpcCh7dGl0bGU6cy50b29sdGlwLHBsYWNlbWVudDo9CiJib3R0 b20ifSl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLiRidXR0b24uYWRkQ2xhc3MoImRpc2FibGVk Iik7dGhpcy5kaXNhYj0KbGVkPTNEdHJ1ZX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9u LnJlbW92ZUNsYXNzKCJkaXNhYmxlZCIpO3RoaXMuZGlzPQphYmxlZD0zRGZhbHNlfSxzZXRJY29u OmZ1bmN0aW9uKHIpe3RoaXMuJCgiaSIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY289Cm4p LmFkZENsYXNzKHIpO3RoaXMub3B0aW9ucy5pY29uPTNEcn0sX3RlbXBsYXRlOmZ1bmN0aW9uKHIp e3ZhciBzPTNEIiI7aWYocj0KLnRpdGxlKXtzPTNEIndpZHRoOiBhdXRvOyJ9dmFyIHQ9M0QnPGRp diBpZD0zRCInK3IuaWQrJyIgc3R5bGU9M0QiZmxvYXQ6ICcrPQpyLmZsb2F0aW5nKyI7ICIrcysn IiBjbGFzcz0zRCInK3IuY2xzKyciPic7aWYoci50aXRsZSl7dCs9M0QnPGRpdiBjbGFzcz0zRCI9 CmJ1dHRvbiI+PGkgY2xhc3M9M0QiaWNvbiBmYSAnK3IuaWNvbisnIi8+Jm5ic3A7PHNwYW4gY2xh c3M9M0QidGl0bGUiPicrci50aT0KdGxlKyI8L3NwYW4+PC9kaXY+In1lbHNle3QrPTNEJzxpIGNs YXNzPTNEImljb24gZmEgJytyLmljb24rJyIvPid9dCs9M0QiPC9kPQppdj4iO3JldHVybiB0fX0p O3ZhciBmPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixj bHM9CjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihyKXt0aGlzLm9wdGlvbnM9M0RrLm1lcmdlKHIs dGhpcy5vcHRpb25zRGVmYXVsdCk7dD0KaGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhp cy5vcHRpb25zKSk7JCh0aGlzLmVsKS5vbigiY2xpY2siLHIub25jbGljPQprKX0sX3RlbXBsYXRl OmZ1bmN0aW9uKHIpe3JldHVybic8ZGl2PjxhIGhyZWY9M0QiamF2YXNjcmlwdDp2b2lkKDApIiBj bGFzcz0KPTNEInVpLWFuY2hvciAnK3IuY2xzKyciPicrci50aXRsZSsiPC9hPjwvZGl2PiJ9fSk7 dmFyIG49M0RCYWNrYm9uZS5WaWV3LmV4PQp0ZW5kKHtvcHRpb25zRGVmYXVsdDp7bWVzc2FnZTpu dWxsLHN0YXR1czoiaW5mbyIscGVyc2lzdGVudDpmYWxzZX0saW5pdGlhbGk9CnplOmZ1bmN0aW9u KHIpe3RoaXMub3B0aW9ucz0zRGsubWVyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWx0KTt0aGlzLnNl dEVsZW1lbj0KdCgiPGRpdj48L2Rpdj4iKTtpZih0aGlzLm9wdGlvbnMubWVzc2FnZSl7dGhpcy51 cGRhdGUodGhpcy5vcHRpb25zKX19LHVwZGF0PQplOmZ1bmN0aW9uKHMpe3RoaXMub3B0aW9ucz0z RGsubWVyZ2Uocyx0aGlzLm9wdGlvbnNEZWZhdWx0KTtpZihzLm1lc3NhZ2UhPQo9M0QiIil7dGhp cy4kZWwuaHRtbCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiRlbC5maW5kKCIu YWxlcnQiKS49CmFwcGVuZChzLm1lc3NhZ2UpO3RoaXMuJGVsLmZhZGVJbigpO2lmKHRoaXMudGlt ZW91dCl7d2luZG93LmNsZWFyVGltZW91dCh0aD0KaXMudGltZW91dCl9aWYoIXMucGVyc2lzdGVu dCl7dmFyIHI9M0R0aGlzO3RoaXMudGltZW91dD0zRHdpbmRvdy5zZXRUaW1lb3V0PQooZnVuY3Rp b24oKXtpZihyLiRlbC5pcygiOnZpc2libGUiKSl7ci4kZWwuZmFkZU91dCgpfWVsc2V7ci4kZWwu aGlkZSgpfX0sMzA9CjAwKX19ZWxzZXt0aGlzLiRlbC5mYWRlT3V0KCl9fSxfdGVtcGxhdGU6ZnVu Y3Rpb24ocil7cmV0dXJuJzxkaXYgY2xhc3M9M0QidT0KaS1tZXNzYWdlIGFsZXJ0IGFsZXJ0LScr ci5zdGF0dXMrJyIvPid9fSk7dmFyIGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0PQppb25z RGVmYXVsdDp7b25jbGljazpudWxsLHNlYXJjaHdvcmQ6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24o cyl7dGhpcy5vcHRpb249CnM9M0RrLm1lcmdlKHMsdGhpcy5vcHRpb25zRGVmYXVsdCk7dGhpcy5z ZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aT0Kb25zKSk7dmFyIHI9M0R0aGlzO2lm KHRoaXMub3B0aW9ucy5vbmNsaWNrKXt0aGlzLiRlbC5vbigic3VibWl0IixmdW5jdGlvbih1PQop e3ZhciB0PTNEci4kZWwuZmluZCgiI3NlYXJjaCIpO3Iub3B0aW9ucy5vbmNsaWNrKHQudmFsKCkp fSl9fSxfdGVtcGxhdGU6ZnU9Cm5jdGlvbihyKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1zZWFy Y2giPjxmb3JtIG9uc3VibWl0PTNEInJldHVybiBmYWxzZTsiPj0KPGlucHV0IGlkPTNEInNlYXJj aCIgY2xhc3M9M0QiZm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5hbWU9M0Qi PQpzZWFyY2giIHBsYWNlaG9sZGVyPTNEIlNlYXJjaC4uLiIgdmFsdWU9M0QiJytyLnNlYXJjaHdv cmQrJyI+PGJ1dHRvbiB0eXBlPQo9M0Qic3VibWl0IiBjbGFzcz0zRCJidG4gc2VhcmNoLWJ0biI+ PGkgY2xhc3M9M0QiZmEgZmEtc2VhcmNoIj48L2k+PC9idXR0b249Cj48L2Zvcm0+PC9kaXY+J319 KTt2YXIgaT0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dHlwZToidGV4 dD0KIixwbGFjZWhvbGRlcjoiIixkaXNhYmxlZDpmYWxzZSx2aXNpYmxlOnRydWUsY2xzOiIiLGFy ZWE6ZmFsc2V9LGluaXRpYWxpemU6PQpmdW5jdGlvbihzKXt0aGlzLm9wdGlvbnM9M0RrLm1lcmdl KHMsdGhpcy5vcHRpb25zRGVmYXVsdCk7dGhpcy5zZXRFbGVtZW50KHQ9Cmhpcy5fdGVtcGxhdGUo dGhpcy5vcHRpb25zKSk7aWYodGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCl7dGhp cy52YT0KbHVlKHRoaXMub3B0aW9ucy52YWx1ZSl9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0 aGlzLiRlbC5wcm9wKCJkaXNhYmxlZCIsPQp0cnVlKX1pZighdGhpcy5vcHRpb25zLnZpc2libGUp e3RoaXMuJGVsLmhpZGUoKX12YXIgcj0zRHRoaXM7dGhpcy4kZWwub24oImk9Cm5wdXQiLGZ1bmN0 aW9uKCl7aWYoci5vcHRpb25zLm9uY2hhbmdlKXtyLm9wdGlvbnMub25jaGFuZ2Uoci4kZWwudmFs KCkpfX0pfT0KLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKHIhPTNEPTNEdW5kZWZpbmVkKXt0aGlzLiRl bC52YWwocil9cmV0dXJuIHRoaXMuJGVsLnZhPQpsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihyKXtp ZihyLmFyZWEpe3JldHVybic8dGV4dGFyZWEgaWQ9M0QiJytyLmlkKyciIGNsYXM9CnM9M0QidWkt dGV4dGFyZWEgJytyLmNscysnIj48L3RleHRhcmVhPid9ZWxzZXtyZXR1cm4nPGlucHV0IGlkPTNE Iicrci5pZCsnIj0KIHR5cGU9M0QiJytyLnR5cGUrJyIgdmFsdWU9M0QiJytyLnZhbHVlKyciIHBs YWNlaG9sZGVyPTNEIicrci5wbGFjZWhvbGRlcisnPQoiIGNsYXNzPTNEInVpLWlucHV0ICcrci5j bHMrJyI+J319fSk7dmFyIHA9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGk9CnplOmZ1 bmN0aW9uKHIpe3RoaXMub3B0aW9ucz0zRHI7dGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRl KHRoaXMub3B0aW9ucz0KKSk7aWYodGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCl7 dGhpcy52YWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpfX0sPQp2YWx1ZTpmdW5jdGlvbihyKXtpZihy IT0zRD0zRHVuZGVmaW5lZCl7dGhpcy4kKCJoaWRkZW4iKS52YWwocil9cmV0dXJuIHRoaXM9Ci4k KCJoaWRkZW4iKS52YWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKHMpe3ZhciByPTNEJzxkaXYgaWQ9 M0QiJytzLmlkKyciID4nOz0KaWYocy5pbmZvKXtyKz0zRCI8bGFiZWw+IitzLmluZm8rIjwvbGFi ZWw+In1yKz0zRCc8aGlkZGVuIHZhbHVlPTNEIicrcy52YWx1PQplKyciLz48L2Rpdj4nO3JldHVy biByfX0pO3JldHVybntBbmNob3I6ZixCdXR0b246ZyxCdXR0b25JY29uOmgsQnV0dG9uTWVudTo9 CnEsSWNvbjpjLEltYWdlOmQsSW5wdXQ6aSxMYWJlbDpqLE1lc3NhZ2U6bixNb2RhbDptLFJhZGlv QnV0dG9uOm8uUmFkaW9CdXR0bz0KbixDaGVja2JveDpvLkNoZWNrYm94LFJhZGlvOm8uUmFkaW8s U2VhcmNoYm94OmEsU2VsZWN0OmIsSGlkZGVuOnAsU2xpZGVyOmUsPQpEcmlsbGRvd246bH19KTsK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQx ZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIy YmIzNGI3ZmE2IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdWkvdWktcG9ydGxldC5qcwotLS0g YS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3VpL3VpLXBvcnRsZXQuanMKKysrIGIvc3RhdGlj L3NjcmlwdHMvcGFja2VkL212Yy91aS91aS1wb3J0bGV0LmpzCkBAIC0xLDEgKzEsMSBAQAotZGVm aW5lKFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihhKXt2YXIgYj0zREJhY2tib25lLlZpZXcuZXh0 ZW5kKHt2aXNpYmxlOmY9CmFsc2Usb3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGljb246IiIsYnV0 dG9uczpudWxsLGJvZHk6bnVsbCxzY3JvbGxhYmxlOnRydT0KZSxub3BhZGRpbmc6ZmFsc2Usb3Bl cmF0aW9uczpudWxsLHBsYWNlbWVudDoiYm90dG9tIixjbHM6InVpLXBvcnRsZXQiLG9wZXJhPQp0 aW9uc19mbHQ6InJpZ2h0In0sJHRpdGxlOm51bGwsJGNvbnRlbnQ6bnVsbCwkYnV0dG9uczpudWxs LCRvcGVyYXRpb25zOm51bGw9Cixpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz0z RGEubWVyZ2UoZSx0aGlzLm9wdGlvbnNEZWZhdWx0KTt0aGlzLj0Kc2V0RWxlbWVudCh0aGlzLl90 ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiRjb250ZW50PTNEdGhpcy4kZWwuZmluZCgiI2Nv PQpudGVudCIpO3RoaXMuJHRpdGxlPTNEdGhpcy4kZWwuZmluZCgiI3BvcnRsZXQtdGl0bGUtdGV4 dCIpO3ZhciBkPTNEdGhpcy4kZWw9Ci5maW5kKCIjcG9ydGxldC1jb250ZW50Iik7aWYoIXRoaXMu b3B0aW9ucy5zY3JvbGxhYmxlKXtpZih0aGlzLm9wdGlvbnMudGl0bD0KZSl7ZC5hZGRDbGFzcygi bm8tc2Nyb2xsIil9ZWxzZXtkLmFkZENsYXNzKCJuby1zY3JvbGwtbm8tdGl0bGUiKX19ZWxzZXtk LmFkPQpkQ2xhc3MoInNjcm9sbCIpfWlmKHRoaXMub3B0aW9ucy5ub3BhZGRpbmcpe2QuY3NzKCJw YWRkaW5nIiwiMHB4Iik7dGhpcy4kY289Cm50ZW50LmNzcygicGFkZGluZyIsIjBweCIpfXRoaXMu JGJ1dHRvbnM9M0QkKHRoaXMuZWwpLmZpbmQoIiNidXR0b25zIik7aWYodD0KaGlzLm9wdGlvbnMu YnV0dG9ucyl7dmFyIGM9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0dG9ucyxmdW5jdGlv bihmLGcpPQp7Zy4kZWwucHJvcCgiaWQiLGYpO2MuJGJ1dHRvbnMuYXBwZW5kKGcuJGVsKX0pfWVs c2V7dGhpcy4kYnV0dG9ucy5yZW1vdmUoKX09CnRoaXMuJG9wZXJhdGlvbnM9M0QkKHRoaXMuZWwp LmZpbmQoIiNvcGVyYXRpb25zIik7aWYodGhpcy5vcHRpb25zLm9wZXJhdGlvbj0Kcyl7dmFyIGM9 M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvbihmLGcpe2cuJGVs LnByb3AoImlkPQoiLGYpO2MuJG9wZXJhdGlvbnMuYXBwZW5kKGcuJGVsKX0pfWlmKHRoaXMub3B0 aW9ucy5ib2R5KXt0aGlzLmFwcGVuZCh0aGlzLm89CnB0aW9ucy5ib2R5KX19LGFwcGVuZDpmdW5j dGlvbihkLGMpe2lmKGMpe3RoaXMuJGNvbnRlbnQuYXBwZW5kKGQpfWVsc2V7dGhpcz0KLiRjb250 ZW50LmFwcGVuZChhLndyYXAoZCkpfX0sY29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRj b250ZW50fSxzaG93PQo6ZnVuY3Rpb24oKXt0aGlzLiRlbC5mYWRlSW4oImZhc3QiKTt0aGlzLnZp c2libGU9M0R0cnVlfSxoaWRlOmZ1bmN0aW9uKCl7dGg9CmlzLiRlbC5mYWRlT3V0KCJmYXN0Iik7 dGhpcy52aXNpYmxlPTNEZmFsc2V9LGVuYWJsZUJ1dHRvbjpmdW5jdGlvbihjKXt0aGlzLj0KJGJ1 dHRvbnMuZmluZCgiIyIrYykucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX0sZGlzYWJsZUJ1dHRvbjpm dW5jdGlvbihjKXt0aGlzPQouJGJ1dHRvbnMuZmluZCgiIyIrYykucHJvcCgiZGlzYWJsZWQiLHRy dWUpfSxoaWRlT3BlcmF0aW9uOmZ1bmN0aW9uKGMpe3RoaXM9Ci4kb3BlcmF0aW9ucy5maW5kKCIj IitjKS5oaWRlKCl9LHNob3dPcGVyYXRpb246ZnVuY3Rpb24oYyl7dGhpcy4kb3BlcmF0aW9ucz0K LmZpbmQoIiMiK2MpLnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsZCl7dmFyIGM9M0R0 aGlzLiRvcGVyYXRpb25zLmZpPQpuZCgiIyIrZSk7Yy5vZmYoImNsaWNrIik7Yy5vbigiY2xpY2si LGQpfSx0aXRsZTpmdW5jdGlvbihkKXt2YXIgYz0zRHRoaXMuJHQ9Cml0bGU7aWYoZCl7Yy5odG1s KGQpfXJldHVybiBjLmh0bWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGQpe3ZhciBjPTNEJzxkaXYg aT0KZD0zRCInK2QuaWQrJyIgY2xhc3M9M0QiJytkLmNscysnIj4nO2lmKGQudGl0bGUpe2MrPTNE JzxkaXYgaWQ9M0QicG9ydGxldC1oPQplYWRlciIgY2xhc3M9M0QicG9ydGxldC1oZWFkZXIiPjxk aXYgaWQ9M0Qib3BlcmF0aW9ucyIgc3R5bGU9M0QiZmxvYXQ6ICcrZC49Cm9wZXJhdGlvbnNfZmx0 Kyc7Ij48L2Rpdj48ZGl2IGNsYXNzPTNEInBvcnRsZXQtdGl0bGUiPic7aWYoZC5pY29uKXtjKz0z RCc8aT0KIGNsYXNzPTNEImljb24gZmEgJytkLmljb24rJyI+Jm5ic3A7PC9pPid9Yys9M0QnPHNw YW4gaWQ9M0QicG9ydGxldC10aXRsZS10PQpleHQiIGNsYXNzPTNEInBvcnRsZXQtdGl0bGUtdGV4 dCI+JytkLnRpdGxlKyI8L3NwYW4+PC9kaXY+PC9kaXY+In1jKz0zRCc8ZGk9CnYgaWQ9M0QicG9y dGxldC1jb250ZW50IiBjbGFzcz0zRCJwb3J0bGV0LWNvbnRlbnQiPic7aWYoZC5wbGFjZW1lbnQ9 M0Q9M0QidD0Kb3AiKXtjKz0zRCc8ZGl2IGlkPTNEImJ1dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMi PjwvZGl2Pid9Yys9M0QnPGRpdiBpZD0zRCJjPQpvbnRlbnQiIGNsYXNzPTNEImNvbnRlbnQiPjwv ZGl2Pic7aWYoZC5wbGFjZW1lbnQ9M0Q9M0QiYm90dG9tIil7Yys9M0QnPGRpdiA9CmlkPTNEImJ1 dHRvbnMiIGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Pid9Yys9M0QiPC9kaXY+PC9kaXY+IjtyZXR1 cm4gY319KTtyZT0KdHVybntWaWV3OmJ9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor ZGVmaW5lKFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihhKXt2YXIgYj0zREJhY2tib25lLlZpZXcu ZXh0ZW5kKHt2aXNpYmxlOmY9CmFsc2Usb3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGljb246IiIs YnV0dG9uczpudWxsLGJvZHk6bnVsbCxzY3JvbGxhYmxlOnRydT0KZSxub3BhZGRpbmc6ZmFsc2Us b3BlcmF0aW9uczpudWxsLHBsYWNlbWVudDoiYm90dG9tIixjbHM6InVpLXBvcnRsZXQiLG9wZXJh PQp0aW9uc19mbHQ6InJpZ2h0In0sJHRpdGxlOm51bGwsJGNvbnRlbnQ6bnVsbCwkYnV0dG9uczpu dWxsLCRvcGVyYXRpb25zOm51bGw9CiwkaGVhZGVyOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihl KXt0aGlzLm9wdGlvbnM9M0RhLm1lcmdlKGUsdGhpcy5vcHRpb25zRD0KZWZhdWx0KTt0aGlzLnNl dEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7dGhpcy4kY29udGVudD0zRHRo aXMuPQokZWwuZmluZCgiLmNvbnRlbnQiKTt0aGlzLiR0aXRsZT0zRHRoaXMuJGVsLmZpbmQoIi5w b3J0bGV0LXRpdGxlLXRleHQiKTt0aGk9CnMuJGhlYWRlcj0zRHRoaXMuJGVsLmZpbmQoIi5wb3J0 bGV0LWhlYWRlciIpO3ZhciBkPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZT0KdC1jb250ZW50Iik7 aWYoIXRoaXMub3B0aW9ucy5zY3JvbGxhYmxlKXtpZih0aGlzLm9wdGlvbnMudGl0bGUpe2QuYWRk Q2xhc3MoPQoibm8tc2Nyb2xsIil9ZWxzZXtkLmFkZENsYXNzKCJuby1zY3JvbGwtbm8tdGl0bGUi KX19ZWxzZXtkLmFkZENsYXNzKCJzY3JvbGw9CiIpfWlmKHRoaXMub3B0aW9ucy5ub3BhZGRpbmcp e2QuY3NzKCJwYWRkaW5nIiwiMHB4Iik7dGhpcy4kY29udGVudC5jc3MoInBhZD0KZGluZyIsIjBw eCIpfXRoaXMuJGJ1dHRvbnM9M0QkKHRoaXMuZWwpLmZpbmQoIi5idXR0b25zIik7aWYodGhpcy5v cHRpb25zLmJ1PQp0dG9ucyl7dmFyIGM9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0dG9u cyxmdW5jdGlvbihmLGcpe2cuJGVsLnByb3AoImk9CmQiLGYpO2MuJGJ1dHRvbnMuYXBwZW5kKGcu JGVsKX0pfWVsc2V7dGhpcy4kYnV0dG9ucy5yZW1vdmUoKX10aGlzLiRvcGVyYXRpbz0KbnM9M0Qk KHRoaXMuZWwpLmZpbmQoIi5vcGVyYXRpb25zIik7aWYodGhpcy5vcHRpb25zLm9wZXJhdGlvbnMp e3ZhciBjPTNEdGhpPQpzOyQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvbihm LGcpe2cuJGVsLnByb3AoImlkIixmKTtjLiRvcGVyYXQ9CmlvbnMuYXBwZW5kKGcuJGVsKX0pfWlm KHRoaXMub3B0aW9ucy5ib2R5KXt0aGlzLmFwcGVuZCh0aGlzLm9wdGlvbnMuYm9keSl9fT0KLGFw cGVuZDpmdW5jdGlvbihkLGMpe2lmKGMpe3RoaXMuJGNvbnRlbnQuYXBwZW5kKGQpfWVsc2V7dGhp cy4kY29udGVudC5hcHBlPQpuZChhLndyYXAoZCkpfX0sY29udGVudDpmdW5jdGlvbigpe3JldHVy biB0aGlzLiRjb250ZW50fSxzaG93OmZ1bmN0aW9uKCl7dGg9CmlzLiRlbC5mYWRlSW4oImZhc3Qi KTt0aGlzLnZpc2libGU9M0R0cnVlfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuZmFkZU91dD0K KCJmYXN0Iik7dGhpcy52aXNpYmxlPTNEZmFsc2V9LGVuYWJsZUJ1dHRvbjpmdW5jdGlvbihjKXt0 aGlzLiRidXR0b25zLmZpbmQoPQoiIyIrYykucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX0sZGlzYWJs ZUJ1dHRvbjpmdW5jdGlvbihjKXt0aGlzLiRidXR0b25zLmZpbmQ9CigiIyIrYykucHJvcCgiZGlz YWJsZWQiLHRydWUpfSxoaWRlT3BlcmF0aW9uOmZ1bmN0aW9uKGMpe3RoaXMuJG9wZXJhdGlvbnMu Zj0KaW5kKCIjIitjKS5oaWRlKCl9LHNob3dPcGVyYXRpb246ZnVuY3Rpb24oYyl7dGhpcy4kb3Bl cmF0aW9ucy5maW5kKCIjIitjKS5zPQpob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsZCl7 dmFyIGM9M0R0aGlzLiRvcGVyYXRpb25zLmZpbmQoIiMiK2UpO2Mub2Y9CmYoImNsaWNrIik7Yy5v bigiY2xpY2siLGQpfSx0aXRsZTpmdW5jdGlvbihkKXt2YXIgYz0zRHRoaXMuJHRpdGxlO2lmKGQp e2MuaD0KdG1sKGQpfXJldHVybiBjLmh0bWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGQpe3ZhciBj PTNEJzxkaXYgaWQ9M0QiJytkLmlkKyciPQogY2xhc3M9M0QiJytkLmNscysnIj4nO2lmKGQudGl0 bGUpe2MrPTNEJzxkaXYgY2xhc3M9M0QicG9ydGxldC1oZWFkZXIiPjxkaXY9CiBjbGFzcz0zRCJv cGVyYXRpb25zIiBzdHlsZT0zRCJmbG9hdDogJytkLm9wZXJhdGlvbnNfZmx0Kyc7Ij48L2Rpdj48 ZGl2IGNsYT0Kc3M9M0QicG9ydGxldC10aXRsZSI+JztpZihkLmljb24pe2MrPTNEJzxpIGNsYXNz PTNEImljb24gZmEgJytkLmljb24rJyI+Jm5iPQpzcDs8L2k+J31jKz0zRCc8c3BhbiBjbGFzcz0z RCJwb3J0bGV0LXRpdGxlLXRleHQiPicrZC50aXRsZSsiPC9zcGFuPjwvZGl2Pjw9Ci9kaXY+In1j Kz0zRCc8ZGl2IGNsYXNzPTNEInBvcnRsZXQtY29udGVudCI+JztpZihkLnBsYWNlbWVudD0zRD0z RCJ0b3AiKXtjKz0KPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+PC9kaXY+J31jKz0zRCc8ZGl2 IGNsYXNzPTNEImNvbnRlbnQiPjwvZGl2Pic7aWYoPQpkLnBsYWNlbWVudD0zRD0zRCJib3R0b20i KXtjKz0zRCc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Pid9Yys9M0QiPC9kaXY9Cj48L2Rp dj4iO3JldHVybiBjfX0pO3JldHVybntWaWV3OmJ9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0YmE1Y2FiIC1y IDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiBzdGF0aWMvc3R5bGUv Ymx1ZS9iYXNlLmNzcwotLS0gYS9zdGF0aWMvc3R5bGUvYmx1ZS9iYXNlLmNzcworKysgYi9zdGF0 aWMvc3R5bGUvYmx1ZS9iYXNlLmNzcwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKIC51cGxvYWQtZnRw IC51cGxvYWQtZnRwLWhlbHB7bWFyZ2luLWJvdHRvbToxMHB4fQogLnVwbG9hZC1mdHAgLnVwbG9h ZC1mdHAtd2FybmluZ3t0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjIwcHh9CiAudXBsb2Fk LXNldHRpbmdzIC51cGxvYWQtc2V0dGluZ3MtY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6 MTAwJTtoZWlnaD0KdDoxMDAlO3RvcDowcHg7bGVmdDowcHg7YmFja2dyb3VuZDojZmZmO29wYWNp dHk6MC40O2N1cnNvcjpuby1kcm9wfQotLm5vLWhpZ2hsaWdodCwudWktYnV0dG9uLWljb24sLnVp LXBvcnRsZXQsLnVpLXBvcnRsZXQtc2xpbSwudWktcG9ydGxldC1yZXA9CmVhdHstd2Via2l0LXVz ZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1raHRtbC11c2VyLXNlbGVjdDpu b25lOz0KLW1zLXVzZXItc2VsZWN0Om5vbmU7fQorLm5vLWhpZ2hsaWdodCwudWktYnV0dG9uLWlj b24sLnVpLXBvcnRsZXQsLnVpLXBvcnRsZXQtc2xpbSwudWktcG9ydGxldC1yZXA9CmVhdCwudWkt cG9ydGxldC1zZWN0aW9uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0 Om5vbmU7LWtodD0KbWwtdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt9CiAu dWktZXJyb3J7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3Jv dW5kOiNmOWM3YzU7cGFkZD0KaW5nOjVweH0KIC51aS10YWJsZS1mb3JtLWVycm9ye2Rpc3BsYXk6 bm9uZX0udWktdGFibGUtZm9ybS1lcnJvciAudWktdGFibGUtZm9ybS1lcnJvPQpyLXRleHR7cGFk ZGluZy1sZWZ0OjVweH0KIC51aS10YWJsZSB0Ym9keXtjdXJzb3I6cG9pbnRlcn0KQEAgLTE0MDQs NyArMTQwNCw3IEBACiAudWktbGFiZWx7Zm9udC13ZWlnaHQ6Ym9sZH0KIC51aS1tZXNzYWdle3Bh ZGRpbmc6MnB4IDEwcHggMnB4IDEwcHg7bWFyZ2luLWJvdHRvbTo1cHh9CiAudWktaWNvbntmb250 LXNpemU6MS4yZW19Ci0udWktYnV0dG9uLWljb257bWFyZ2luLXJpZ2h0OjVweH0udWktYnV0dG9u LWljb24gdWwgaXtmb250LXNpemU6MS4yZW07bWFyZz0KaW4tcmlnaHQ6NXB4O3Bvc2l0aW9uOnJl bGF0aXZlO3RvcDoxcHh9CisudWktYnV0dG9uLWljb257bWFyZ2luLXJpZ2h0OjVweDtoZWlnaHQ6 YXV0byAhaW1wb3J0YW50fS51aS1idXR0b24taWNvbiB1bD0KIGl7Zm9udC1zaXplOjEuMmVtO21h cmdpbi1yaWdodDo1cHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOjFweH0KIC51aS1idXR0b24taWNv biAuYnV0dG9ue21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6NXB4fS51aS1idXR0b24taWNv biAuPQpidXR0b24gLnRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTowLjhlbTtmb250 LXdlaWdodDpub3JtYWw7dG9wOi0xcHh9CiAudWktYnV0dG9uLWljb24gLmJ1dHRvbi5kaXNhYmxl ZHtmaWx0ZXI6YWxwaGEob3BhY2l0eT0zRDY1KTtvcGFjaXR5Oi42NTstbT0Kcy1maWx0ZXI6cHJv Z2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9M0Q2NSk7ZmlsdGVy OmFscGhhPQoob3BhY2l0eT0zRDY1KX0KIC51aS1idXR0b24tbWVudSAuZHJvcGRvd24tbWVudXtt aW4td2lkdGg6NTBweH0KQEAgLTE0MTIsMTQgKzE0MTIsMTUgQEAKIC51aS1idXR0b24taWNvbi1w bGFpbntib3JkZXI6bm9uZSAhaW1wb3J0YW50O2JhY2tncm91bmQ6bm9uZSAhaW1wb3J0YW50O2hl PQppZ2h0OmluaGVyaXQgIWltcG9ydGFudDt3aWR0aDppbmhlcml0ICFpbXBvcnRhbnQ7cGFkZGlu Zy1yaWdodDozcHggIWltcG9ydGE9Cm50fQogLnVpLXRhYnMgLnVpLXRhYnMtYWRke2ZvbnQtc2l6 ZTowLjhlbTttYXJnaW4tcmlnaHQ6NXB4fQogLnVpLXRhYnMgLnVpLXRhYnMtZGVsZXRle2ZvbnQt c2l6ZTowLjhlbTttYXJnaW4tbGVmdDo1cHg7Y3Vyc29yOnBvaW50ZXJ9Ci0udWktcG9ydGxldCwu dWktcG9ydGxldC1zbGltLC51aS1wb3J0bGV0LXJlcGVhdCwudWktcG9ydGxldC1zbGltLC51aS1w b3J0bD0KZXQtcmVwZWF0e2JvcmRlcjpzb2xpZCAjZDZiMTYxIDFweDstd2Via2l0LWJvcmRlci1y YWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhPQpkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweDtwb3Np dGlvbjpyZWxhdGl2ZTtjbGVhcjpib3RoO3dpZHRoOmF1dG87aGVpZ2h0OjE9CjAwJX0udWktcG9y dGxldCAucG9ydGxldC1oZWFkZXIsLnVpLXBvcnRsZXQtc2xpbSAucG9ydGxldC1oZWFkZXJ7YmFj a2dyb3VuZD0KOiNlYmQ5YjI7Ym9yZGVyLWJvdHRvbTpzb2xpZCAjZDZiMTYxIDFweDtwYWRkaW5n OjJweCA4cHg7b3ZlcmZsb3c6dmlzaWJsZTtmPQpsb2F0OnJpZ2h0O3dpZHRoOjEwMCV9LnVpLXBv cnRsZXQgLnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0LXRpdGxlLC51aS1wb3J0bGU9CnQtc2xpbSAu cG9ydGxldC1oZWFkZXIgLnBvcnRsZXQtdGl0bGV7ZGlzcGxheTppbmxpbmU7dmVydGljYWwtYWxp Z246bWlkZGxlfT0KLnVpLXBvcnRsZXQgLnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0LXRpdGxlIC5w b3J0bGV0LXRpdGxlLXRleHQsLnVpLXBvcnRsZXQtPQpzbGltIC5wb3J0bGV0LWhlYWRlciAucG9y dGxldC10aXRsZSAucG9ydGxldC10aXRsZS10ZXh0e3ZlcnRpY2FsLWFsaWduOm1pZGQ9CmxlfQor LnVpLXBvcnRsZXQsLnVpLXBvcnRsZXQtc2xpbSwudWktcG9ydGxldC1yZXBlYXQsLnVpLXBvcnRs ZXQtc2VjdGlvbiwudWktcG89CnJ0bGV0LXNsaW0sLnVpLXBvcnRsZXQtcmVwZWF0LC51aS1wb3J0 bGV0LXNlY3Rpb257Ym9yZGVyOnNvbGlkICNkNmIxNjEgMXB4Oz0KLXdlYmtpdC1ib3JkZXItcmFk aXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4O3Bvc2l0aW9u PQo6cmVsYXRpdmU7Y2xlYXI6Ym90aDt3aWR0aDphdXRvO2hlaWdodDoxMDAlfS51aS1wb3J0bGV0 IC5wb3J0bGV0LWhlYWRlciwudWk9Ci1wb3J0bGV0LXNsaW0gLnBvcnRsZXQtaGVhZGVye2JhY2tn cm91bmQ6I2ViZDliMjtib3JkZXItYm90dG9tOnNvbGlkICNkNmIxNj0KMSAxcHg7cGFkZGluZzoy cHggOHB4O292ZXJmbG93OnZpc2libGU7ZmxvYXQ6cmlnaHQ7d2lkdGg6MTAwJX0udWktcG9ydGxl dCAuPQpwb3J0bGV0LWhlYWRlciAucG9ydGxldC10aXRsZSwudWktcG9ydGxldC1zbGltIC5wb3J0 bGV0LWhlYWRlciAucG9ydGxldC10aXQ9Cmxle2Rpc3BsYXk6aW5saW5lO3ZlcnRpY2FsLWFsaWdu Om1pZGRsZX0udWktcG9ydGxldCAucG9ydGxldC1oZWFkZXIgLnBvcnRsZT0KdC10aXRsZSAucG9y dGxldC10aXRsZS10ZXh0LC51aS1wb3J0bGV0LXNsaW0gLnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0 LXRpdGxlPQogLnBvcnRsZXQtdGl0bGUtdGV4dHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CiAudWkt cG9ydGxldCAucG9ydGxldC1oZWFkZXIgLnBvcnRsZXQtdGl0bGUgLmljb24sLnVpLXBvcnRsZXQt c2xpbSAucG9ydGxldD0KLWhlYWRlciAucG9ydGxldC10aXRsZSAuaWNvbntmb250LXNpemU6MS4y ZW07dmVydGljYWwtYWxpZ246bWlkZGxlfQogLnVpLXBvcnRsZXQgLnBvcnRsZXQtYnV0dG9ucywu dWktcG9ydGxldC1zbGltIC5wb3J0bGV0LWJ1dHRvbnN7aGVpZ2h0OjUwcHg9CjtwYWRkaW5nOjEw cHh9CiAudWktcG9ydGxldCAucG9ydGxldC1jb250ZW50LC51aS1wb3J0bGV0LXNsaW0gLnBvcnRs ZXQtY29udGVudHtoZWlnaHQ6aW5oZT0Kcml0O3BhZGRpbmc6MTBweDtjbGVhcjpib3RofS51aS1w b3J0bGV0IC5wb3J0bGV0LWNvbnRlbnQgLmNvbnRlbnQsLnVpLXBvcnRsPQpldC1zbGltIC5wb3J0 bGV0LWNvbnRlbnQgLmNvbnRlbnR7cGFkZGluZzoxMHB4O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9 LnVpLXA9Cm9ydGxldCAucG9ydGxldC1jb250ZW50IC5jb250ZW50IC5idXR0b25zLC51aS1wb3J0 bGV0LXNsaW0gLnBvcnRsZXQtY29udGVudD0KIC5jb250ZW50IC5idXR0b25ze2hlaWdodDo1MHB4 O3BhZGRpbmc6MTBweH0KIC51aS1wb3J0bGV0IC5uby1zY3JvbGwsLnVpLXBvcnRsZXQtc2xpbSAu bm8tc2Nyb2xse2hlaWdodDpjYWxjKDEwMCUgLSA4MHB4PQopfQogLnVpLXBvcnRsZXQtc2xpbXtt YXgtd2lkdGg6OTAwcHh9Ci0udWktcG9ydGxldC1yZXBlYXR7Ym9yZGVyOm5vbmU7Ym9yZGVyLWxl ZnQ6c29saWQgM3B4ICNlYmQ5YjI7Ym9yZGVyLXJhZGl1cz0KOjVweH0udWktcG9ydGxldC1yZXBl YXQgLnBvcnRsZXQtaGVhZGVye2JhY2tncm91bmQ6I2ViZDliMjtib3JkZXItcmFkaXVzOjNwPQp4 O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MHB4O3BhZGRpbmc6MHB4IDJweH0KLS51aS1wb3J0 bGV0LXJlcGVhdCAucG9ydGxldC1jb250ZW50e3BhZGRpbmc6MHB4fS51aS1wb3J0bGV0LXJlcGVh dCAucG9ydGxlPQp0LWNvbnRlbnQgLmNvbnRlbnR7cGFkZGluZzowcHg7cGFkZGluZy1sZWZ0OjEw cHh9CisudWktcG9ydGxldC1yZXBlYXQsLnVpLXBvcnRsZXQtc2VjdGlvbiwudWktcG9ydGxldC1z ZWN0aW9ue2JvcmRlcjpub25lO2Jvcj0KZGVyLWxlZnQ6c29saWQgM3B4ICNlYmQ5YjI7Ym9yZGVy LXJhZGl1czo1cHh9LnVpLXBvcnRsZXQtcmVwZWF0IC5wb3J0bGV0LWhlPQphZGVyLC51aS1wb3J0 bGV0LXNlY3Rpb24gLnBvcnRsZXQtaGVhZGVye2JhY2tncm91bmQ6I2ViZDliMjtib3JkZXItcmFk aXVzOjM9CnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MHB4O3BhZGRpbmc6MHB4IDJweH0K Ky51aS1wb3J0bGV0LXJlcGVhdCAucG9ydGxldC1jb250ZW50LC51aS1wb3J0bGV0LXNlY3Rpb24g LnBvcnRsZXQtY29udGVudHtwPQphZGRpbmc6MHB4fS51aS1wb3J0bGV0LXJlcGVhdCAucG9ydGxl dC1jb250ZW50IC5jb250ZW50LC51aS1wb3J0bGV0LXNlY3Rpb249CiAucG9ydGxldC1jb250ZW50 IC5jb250ZW50e3BhZGRpbmc6MHB4O3BhZGRpbmctbGVmdDoxMHB4fQorLnVpLXBvcnRsZXQtc2Vj dGlvbntib3JkZXItbGVmdDpzb2xpZCAzcHggI2RmZTVmOTtib3JkZXItcmFkaXVzOjVweH0udWkt cG89CnJ0bGV0LXNlY3Rpb24gLnBvcnRsZXQtaGVhZGVye2JhY2tncm91bmQ6I2RmZTVmOTtib3Jk ZXItYm90dG9tOnNvbGlkICNiNGMyZj0KMSAxcHh9CiAudWktcG9wb3ZlcnttYXgtd2lkdGg6NzAw cHg7ZGlzcGxheTpub25lfS51aS1wb3BvdmVyIC5wb3BvdmVyLWNsb3Nle3Bvc2l0aT0Kb246YWJz b2x1dGU7cmlnaHQ6MTBweDt0b3A6N3B4O2ZvbnQtc2l6ZToxLjJlbTtjdXJzb3I6cG9pbnRlcn0K IC51aS1wb3BvdmVyIC5wb3BvdmVyLXRpdGxle3BhZGRpbmc6NHB4IDEwcHh9CiAudWktaW5wdXQs LnVpLXRleHRhcmVhLC51aS1vcHRpb25zLC51aS1mb3JtLXNsaWRlciAudWktZm9ybS1zbGlkZXIt dGV4dCwudT0KaS1zZWxlY3QtbXVsdGlwbGUsLnVpLXRleHRhcmVhLC51aS1vcHRpb25zLC51aS1m b3JtLXNsaWRlciAudWktZm9ybS1zbGlkZXItPQp0ZXh0LC51aS1zZWxlY3QtbXVsdGlwbGV7YmFj a2dyb3VuZDp0cmFuc3BhcmVudH0KQEAgLTE3NDIsNyArMTc0Myw3IEBACiAjbWFzdGhlYWQgbGku ZHJvcGRvd24+YTpob3ZlciAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjpnb2xkO2JvcmRlci1ib3R0 b20tYz0Kb2xvcjpnb2xkfQogI21hc3RoZWFkIC5uYXZiYXItYnJhbmR7cG9zaXRpb246YWJzb2x1 dGU7bGVmdDowO3RvcDowO2ZvbnQtZmFtaWx5OnZlcmRhbmE9Cjtmb250LXdlaWdodDpib2xkO2Zv bnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjE7Y29sb3I6d2hpdGU7cGFkZGluZzo1cHggMjBweD0K IDEycHg7bWFyZ2luLWxlZnQ6LTE1cHg7ei1pbmRleDoyMDAwfSNtYXN0aGVhZCAubmF2YmFyLWJy YW5kIGltZ3tkaXNwbGF5OmluPQpsaW5lO3dpZHRoOjI2cHg7dmVydGljYWwtYWxpZ246dG9wfQog I21hc3RoZWFkIC5uYXZiYXItYnJhbmQgYXtjb2xvcjp3aGl0ZTt0ZXh0LWRlY29yYXRpb246bm9u ZX0KLSNtYXN0aGVhZCAuaWNvbmJhcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6N3B4O3JpZ2h0OjEx MHB4O2N1cnNvcjpwb2ludGVyO2NvPQpsb3I6Izk5OTtvdmVyZmxvdzpoaWRkZW59I21hc3RoZWFk IC5pY29uYmFyIC5zeW1ib2x7ZmxvYXQ6bGVmdDttYXJnaW46MHB4IDE9CjBweDtoZWlnaHQ6MjZw eDtmb250LXNpemU6MTFweH0KKyNtYXN0aGVhZCAuaWNvbmJhcntwb3NpdGlvbjphYnNvbHV0ZTt0 b3A6N3B4O3JpZ2h0OjExMHB4O2N1cnNvcjpwb2ludGVyO2NvPQpsb3I6Izk5OTtvdmVyZmxvdzpo aWRkZW59I21hc3RoZWFkIC5pY29uYmFyIC5zeW1ib2x7ZmxvYXQ6bGVmdDttYXJnaW46MHB4IDE9 CjBweDtmb250LXNpemU6MTFweH0KICNtYXN0aGVhZCAuaWNvbmJhciAuc3ltYm9sIC5udW1iZXJ7 Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweDtmb250LWZhPQptaWx5OiJMdWNpZGEgR3Jh bmRlIix2ZXJkYW5hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmO3Bvc2l0aW9uOnJlbGF0aXZl O2w9CmVmdDoyM3B4O3RvcDotMTJweH0KICNtYXN0aGVhZCAuaWNvbmJhciAudG9nZ2xle2NvbG9y OmdvbGR9CiAucXVvdGEtbWV0ZXItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3Jp Z2h0OjA7aGVpZ2h0OjMycHh9CgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVjOGQy ZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3ZmE2 IHN0YXRpYy9zdHlsZS9zcmMvbGVzcy9iYXNlLmxlc3MKLS0tIGEvc3RhdGljL3N0eWxlL3NyYy9s ZXNzL2Jhc2UubGVzcworKysgYi9zdGF0aWMvc3R5bGUvc3JjL2xlc3MvYmFzZS5sZXNzCkBAIC00 MzUsNyArNDM1LDYgQEAKICAgICAgICAgewogICAgICAgICAgICAgZmxvYXQgICAgICAgICAgIDog bGVmdDsKICAgICAgICAgICAgIG1hcmdpbiAgICAgICAgICA6IDBweCAxMHB4OwotICAgICAgICAg ICAgaGVpZ2h0ICAgICAgICAgIDogMjZweDsKICAgICAgICAgICAgIGZvbnQtc2l6ZSAgICAgICA6 IDExcHg7CiAgICAgICAgIH0KPTIwCgpkaWZmIC1yIDE1OTYyYjNkOWFhYzA2MWU5NTQxZjgxNzVj OGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTQ9CmFmNTA4YzIyYmIzNGI3 ZmE2IHN0YXRpYy9zdHlsZS9zcmMvbGVzcy91aS5sZXNzCi0tLSBhL3N0YXRpYy9zdHlsZS9zcmMv bGVzcy91aS5sZXNzCisrKyBiL3N0YXRpYy9zdHlsZS9zcmMvbGVzcy91aS5sZXNzCkBAIC05Miw2 ICs5Miw3IEBACiAgICAgJjpleHRlbmQoLmljb24tYnRuKTsKICAgICAmOmV4dGVuZCgubm8taGln aGxpZ2h0KTsKICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgICBoZWlnaHQ6IGF1dG8gIWltcG9y dGFudDsKICAgICB1bCB7CiAgICAgICAgIGkgewogICAgICAgICAgICAgZm9udC1zaXplOiAxLjJl bTsgbWFyZ2luLXJpZ2h0OiA1cHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdG9wOiA9CjFweDsKQEAg LTIyOCw2ICsyMjksMTYgQEAKICAgICB9CiB9Cj0yMAorLnVpLXBvcnRsZXQtc2VjdGlvbiB7Cisg ICAgJjpleHRlbmQoLnVpLXBvcnRsZXQtcmVwZWF0IGFsbCk7CisgICAgYm9yZGVyLWxlZnQ6IHNv bGlkIDNweCBAc2lkZS1wYW5lbC1iZzsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgLnBv cnRsZXQtaGVhZGVyIHsKKyAgICAgICAgYmFja2dyb3VuZDogQHNpZGUtcGFuZWwtYmc7CisgICAg ICAgIGJvcmRlci1ib3R0b206IHNvbGlkIGRhcmtlbihAc2lkZS1wYW5lbC1iZywgMTAlKSAxcHg7 CisgICAgfQorfQorCiAudWktcG9wb3ZlciB7CiAgICAgbWF4LXdpZHRoOiA3MDBweDsKICAgICBk aXNwbGF5OiBub25lOwoKZGlmZiAtciAxNTk2MmIzZDlhYWMwNjFlOTU0MWY4MTc1YzhkMmUyYmM0 YmE1Y2FiIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0PQphZjUwOGMyMmJiMzRiN2ZhNiB0ZW1w bGF0ZXMvd2ViYXBwcy9nYWxheHkvd29ya2Zsb3cvZWRpdG9yLm1ha28KLS0tIGEvdGVtcGxhdGVz L3dlYmFwcHMvZ2FsYXh5L3dvcmtmbG93L2VkaXRvci5tYWtvCisrKyBiL3RlbXBsYXRlcy93ZWJh cHBzL2dhbGF4eS93b3JrZmxvdy9lZGl0b3IubWFrbwpAQCAtMzIsNiArMzIsOSBAQAogICAgIDwh W2VuZGlmXS0tPjxzY3JpcHQgdHlwZT0zRCd0ZXh0L2phdmFzY3JpcHQnPgorICAgICAgICAvLyBT d2l0Y2ggZm9yIG5ldyB0b29sIGZvcm0KKyAgICAgICAgX19ORVdUT09MRk9STV9fID0zRCBmYWxz ZTsKKyAgICAgICA9MjAKICAgICAgICAgLy8gR2xvYmFscwogICAgICAgICB3b3JrZmxvdyA9M0Qg bnVsbDsKICAgICAgICAgY2FudmFzX21hbmFnZXIgPTNEIG51bGw7CgpkaWZmIC1yIDE1OTYyYjNk OWFhYzA2MWU5NTQxZjgxNzVjOGQyZTJiYzRiYTVjYWIgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRh OTQ9CmFmNTA4YzIyYmIzNGI3ZmE2IHRlbXBsYXRlcy93ZWJhcHBzL2dhbGF4eS93b3JrZmxvdy9l ZGl0b3JfdG9vbF9mb3JtLm1ha28KLS0tIGEvdGVtcGxhdGVzL3dlYmFwcHMvZ2FsYXh5L3dvcmtm bG93L2VkaXRvcl90b29sX2Zvcm0ubWFrbworKysgYi90ZW1wbGF0ZXMvd2ViYXBwcy9nYWxheHkv d29ya2Zsb3cvZWRpdG9yX3Rvb2xfZm9ybS5tYWtvCkBAIC0xOCwxOCArMTgsMTIgQEAKICAgICAg ICAgfSkKICAgICAlPjxzY3JpcHQ+Ci0gICAgICAgIHBhcmVudC5fX05FV1RPT0xGT1JNX18gPTNE IHRydWU7CiAgICAgICAgIHJlcXVpcmUoWydtdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdydd LCBmdW5jdGlvbihUb29sc0Zvcm0pewogICAgICAgICAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAg ICAgICAgICAgdmFyIGZvcm0gPTNEIG5ldyBUb29sc0Zvcm0uVmlldygkeyBoLmR1bXBzKHNlbGYu Zm9ybV9jb25maT0KZykgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgPC9z Y3JpcHQ+Ci0gICAgPGZvcm0gbWV0aG9kPTNEInBvc3QiIGFjdGlvbj0zRCIke2gudXJsX2Zvcihj b250cm9sbGVyPTNEJ3dvcmtmbG93JywgYT0KY3Rpb249M0QnZWRpdG9yX2Zvcm1fcG9zdCcgKX0i PgotICAgICAgICA8ZGl2IGNsYXNzPTNEInRvb2xGb3JtIj4KLSAgICAgICAgICAgIDxpbnB1dCB0 eXBlPTNEImhpZGRlbiIgbmFtZT0zRCJ0b29sX2lkIiB2YWx1ZT0zRCIke3Rvb2wuaWR9IiAvPgot ICAgICAgICA8L2Rpdj4KLSAgICA8L2Zvcm0+CiAlZWxzZToKICAgICA8JQogICAgIGZyb20gZ2Fs YXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0IERhdGFUb29sUGFyYW1ldGVyLCBSdW50aW1lVmFs dWUKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMv NDI4ZTU4ZmNkMzNhLwpDaGFuZ2VzZXQ6ICAgNDI4ZTU4ZmNkMzNhClVzZXI6ICAgICAgICBjYXJs ZmViZXJoYXJkCkRhdGU6ICAgICAgICAyMDE1LTAxLTEzIDE5OjAzOjM0KzAwOjAwClN1bW1hcnk6 ICAgICBBZGQgc3R1YmJlZCBtYW5hZ2VycyBmb3IgUGFnZXMgYW5kIFZpc3VhbGl6YXRpb25zOyBi cmVhayBvdXQgYT0Kc3BlY3Qtb3JpZW50ZWQgbWl4aW5zIHRhZ2dhYmxlLCByYXRhYmxlLCBhbm5v dGF0YWJsZTsgZGlmZmVyZW50aWF0ZSBidHduIHVzPQplciBkdXBsaWNhdGlvbiAoQ29uZmxpY3Qp IGFuZCBzZXJ2ZXIgZGIgZHVwbGljYXRpb24gKEluY29uc2lzdGVudERhdGFiYXNlKSA9CmluIGR1 cGxpY2F0aW9uIGV4Y2VwdGlvbnMKQWZmZWN0ZWQgIzogIDExIGZpbGVzCgpkaWZmIC1yIDJlOTkw Y2FlZmM5NDNlYjJiMWQ0YTk0YWY1MDhjMjJiYjM0YjdmYTYgLXIgNDI4ZTU4ZmNkMzNhOWY5MzQy OTJmY2E9CmRhYzg0MGM3NTc4M2JjZDYyIGxpYi9nYWxheHkvbWFuYWdlcnMvYW5ub3RhdGFibGUu cHkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2Fubm90YXRhYmxlLnB5 CkBAIC0wLDAgKzEsNTAgQEAKKyIiIgorTWl4aW5zIGZvciBBbm5vdGF0YWJsZSBtb2RlbCBtYW5h Z2VycyBhbmQgc2VyaWFsaXplcnMuCisiIiIKKworZnJvbSBnYWxheHkgaW1wb3J0IGV4Y2VwdGlv bnMKK2Zyb20gZ2FsYXh5IGltcG9ydCBtb2RlbAorCitpbXBvcnQgbG9nZ2luZworbG9nID0zRCBs b2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBBbm5v dGF0YWJsZU1hbmFnZXJJbnRlcmZhY2UoIG9iamVjdCApOgorICAgIGFubm90YXRpb25fYXNzb2Mg PTNEIE5vbmUKKworICAgICNUT0RPOiBtb3N0IG9mIHRoaXMgc2VlbXMgdG8gYmUgY292ZXJlZCBi eSBpdGVtX2F0dHJzLlVzZXNBbm5vdGF0aW9ucworCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBBbm5v dGF0YWJsZVNlcmlhbGl6ZXIoIG9iamVjdCApOgorCisgICAgZGVmIGFkZF9zZXJpYWxpemVycygg c2VsZiApOgorICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzWyAnYW5ub3RhdGlvbicgXSA9M0Qgc2Vs Zi5zZXJpYWxpemVfYW5ub3RhdGlvbgorCisgICAgZGVmIHNlcmlhbGl6ZV9hbm5vdGF0aW9uKCBz ZWxmLCB0cmFucywgaXRlbSwga2V5ICk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYW5kIHNl cmlhbGl6ZSBhbiBgaXRlbWAncyBhbm5vdGF0aW9uLgorICAgICAgICAiIiIKKyNUT0RPOiB3aGlj aCBpcyBjb3JyZWN0IGhlcmU/CisgICAgICAgICN1c2VyID0zRCBpdGVtLnVzZXIKKyAgICAgICAg dXNlciA9M0QgdHJhbnMudXNlcgorICAgICAgICBzYV9zZXNzaW9uID0zRCBzZWxmLmFwcC5tb2Rl bC5jb250ZXh0CisgICAgICAgIHJldHVybiBpdGVtLmdldF9pdGVtX2Fubm90YXRpb25fc3RyKCBz YV9zZXNzaW9uLCB1c2VyLCBpdGVtICkKKworCisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAorY2xhc3MgQW5ub3RhdGFi bGVEZXNlcmlhbGl6ZXIoIG9iamVjdCApOgorCisgICAgZGVmIGFkZF9kZXNlcmlhbGl6ZXJzKCBz ZWxmICk6CisgICAgICAgIHNlbGYuZGVzZXJpYWxpemVyc1sgJ3RhZ3MnIF0gPTNEIHNlbGYuZGVz ZXJpYWxpemVfYW5ub3RhdGlvbgorCisgICAgZGVmIGRlc2VyaWFsaXplX2Fubm90YXRpb24oIHNl bGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSBz dXJlIGB2YWxgIGlzIGEgdmFsaWQgYW5ub3RhdGlvbiBhbmQgYXNzaWduIGl0LgorICAgICAgICAi IiIKKyNUT0RPOiBubyB2YWxpZGF0ZSBoZXJlLi4uCisgICAgICAgIHZhbCA9M0Qgc2VsZi52YWxp ZGF0ZS5udWxsYWJsZV9iYXNlc3RyaW5nKCBrZXksIHZhbCApCisgICAgICAgICNUT0RPOiBoYXZl IHRvIGFzc3VtZSB0cmFucy51c2VyIGhlcmUuLi4KKyAgICAgICAgcmV0dXJuIGl0ZW0uYWRkX2l0 ZW1fYW5ub3RhdGlvbiggdHJhbnMuc2Ffc2Vzc2lvbiwgdHJhbnMudXNlciwgaXRlPQptLCB2YWwg KQorCgpkaWZmIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0YWY1MDhjMjJiYjM0YjdmYTYgLXIg NDI4ZTU4ZmNkMzNhOWY5MzQyOTJmY2E9CmRhYzg0MGM3NTc4M2JjZDYyIGxpYi9nYWxheHkvbWFu YWdlcnMvYmFzZS5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKKysrIGIvbGli L2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5CkBAIC0xNiw3ICsxNiw4IEBACj0yMAogIyA9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0QKIGRlZiBzZWN1cml0eV9jaGVjayggdHJhbnMsIGl0ZW0sIGNoZWNrX293bmVyc2hpcD0zREZh bHNlLCBjaGVja19hY2Nlc3NpYmxlPQo9M0RGYWxzZSApOgotICAgICIiIiBTZWN1cml0eSBjaGVj a3MgZm9yIGFuIGl0ZW06IGNoZWNrcyBpZiAoYSkgdXNlciBvd25zIGl0ZW0gb3IgKGIpIGk9CnRl bQorICAgICIiIgorICAgIFNlY3VyaXR5IGNoZWNrcyBmb3IgYW4gaXRlbTogY2hlY2tzIGlmIChh KSB1c2VyIG93bnMgaXRlbSBvciAoYikgaXRlbQogICAgIGlzIGFjY2Vzc2libGUgdG8gdXNlci4g VGhpcyBpcyBhIGdlbmVyaWMgbWV0aG9kIGZvciBkZWFsaW5nIHdpdGggb2JqZWM9CnRzCiAgICAg dW5pZm9ybWx5IGZyb20gdGhlIG9sZGVyIGNvbnRyb2xsZXIgbWl4aW4gY29kZSAtIGhvd2V2ZXIg d2hlbmV2ZXIgcG9zcz0KaWJsZQogICAgIHRoZSBtYW5hZ2VycyBmb3IgYSBwYXJ0aWN1bGFyIG1v ZGVsIHNob3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gc2VjdXJpdHkKQEAgLTQ4LDcgKzQ5LDEwIEBA Cj0yMAo9MjAKIGRlZiBnZXRfY2xhc3MoIGNsYXNzX25hbWUgKToKLSAgICAiIiIgUmV0dXJucyB0 aGUgY2xhc3Mgb2JqZWN0IHRoYXQgYSBzdHJpbmcgZGVub3Rlcy4gV2l0aG91dCB0aGlzIG1ldGhv PQpkLCB3ZSdkIGhhdmUgdG8gZG8gZXZhbCg8Y2xhc3NfbmFtZT4pLiAiIiIKKyAgICAiIiIKKyAg ICBSZXR1cm5zIHRoZSBjbGFzcyBvYmplY3QgdGhhdCBhIHN0cmluZyBkZW5vdGVzLiBXaXRob3V0 IHRoaXMgbWV0aG9kLCB3PQplJ2QgaGF2ZQorICAgIHRvIGRvIGV2YWwoPGNsYXNzX25hbWU+KS4K KyAgICAiIiIKICAgICBpZiBjbGFzc19uYW1lID0zRD0zRCAnSGlzdG9yeSc6CiAgICAgICAgIGl0 ZW1fY2xhc3MgPTNEIG1vZGVsLkhpc3RvcnkKICAgICBlbGlmIGNsYXNzX25hbWUgPTNEPTNEICdI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uJzoKQEAgLTE0OCw3ICsxNTIsNyBAQAogICAgICAgICBp ZiBlYWdlcmxvYWRzIGlzIEZhbHNlOgogICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5LmVuYWJs ZV9lYWdlcmxvYWRzKCBGYWxzZSApCj0yMAotI1RPRE86IGlmIG5vbi1vcm0gZmlsdGVycyBhcmUg dGhlIG9ubHkgb3B0aW9uLCBoZXJlIGlzIHdoZXJlIHRoZXknZCBnbworICAgICAgICAjVE9ETzog aWYgbm9uLW9ybSBmaWx0ZXJzIGFyZSB0aGUgb25seSBvcHRpb24sIGhlcmUgaXMgd2hlcmUgdGhl eSc9CmQgZ28KICAgICAgICAgcXVlcnkgPTNEIHNlbGYuX2FwcGx5X2ZpbHRlcnMoIHF1ZXJ5LCBm aWx0ZXJzICkKICAgICAgICAgcXVlcnkgPTNEIHNlbGYuX2FwcGx5X29yZGVyX2J5X2xpbWl0X29m ZnNldCggcXVlcnksIG9yZGVyX2J5LCBsaW1pPQp0LCBvZmZzZXQgKQogICAgICAgICByZXR1cm4g cXVlcnkKQEAgLTE5OCw3ICsyMDIsNiBAQAogICAgICAgICBVc2UgdGhlIG1hbmFnZXIncyBkZWZh dWx0X29yZGVyX2J5IGlmIG9yZGVyX2J5IGlzIE5vbmUuCiAgICAgICAgICIiIgogICAgICAgICBp ZiBvcmRlcl9ieSBpcyBOb25lOgotICAgICAgICAgICAgI1RPRE86IGFsbG93IG5vbi10dXBsZSBk ZWZhdWx0X29yZGVyX2J5CiAgICAgICAgICAgICByZXR1cm4gcXVlcnkub3JkZXJfYnkoICpzZWxm LmRlZmF1bHRfb3JkZXJfYnkgKQo9MjAKICAgICAgICAgaWYgaXNpbnN0YW5jZSggb3JkZXJfYnks ICggbGlzdCwgdHVwbGUgKSApOgpAQCAtMjI5LDIyICsyMzIsMjEgQEAKICAgICAgICAgQ2FsbCBz cWxhbGNoZW15J3Mgb25lIGFuZCByZWNhc3QgZXJyb3JzIHRvIHNlcmlhbGl6YWJsZSBlcnJvcnMg aWYgPQphbnkuCj0yMAogICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQ6 IGlmIG5vIG1vZGVsIGlzIGZvdW5kCi0gICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5Db25mbGlj dDogaWYgbW9yZSB0aGFuIG9uZSBtb2RlbCBpcyBmb3VuZAorICAgICAgICA6cmFpc2VzIGV4Y2Vw dGlvbnMuSW5jb25zaXN0ZW50RGF0YWJhc2U6IGlmIG1vcmUgdGhhbiBvbmUgbW9kZWwgaXM9CiBm b3VuZAogICAgICAgICAiIiIKICAgICAgICAgIyBvdmVycmlkZGVuIHRvIHJhaXNlIHNlcmlhbGl6 YWJsZSBlcnJvcnMKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9uZSgp CiAgICAgICAgIGV4Y2VwdCBzcWxhbGNoZW15Lm9ybS5leGMuTm9SZXN1bHRGb3VuZCwgbm90X2Zv dW5kOgogICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCggc2VsZi5t b2RlbF9jbGFzcy5fX25hbWVfXyArICc9CiBub3QgZm91bmQnICkKLSNUT0RPOiBleGNlcHRpb25z LkluY29uc2lzdGVudERhdGFiYXNlPwogICAgICAgICBleGNlcHQgc3FsYWxjaGVteS5vcm0uZXhj Lk11bHRpcGxlUmVzdWx0c0ZvdW5kLCBtdWx0aV9mb3VuZDoKLSAgICAgICAgICAgIHJhaXNlIGV4 Y2VwdGlvbnMuQ29uZmxpY3QoICdmb3VuZCBtb3JlIHRoYW4gb25lICcgKyBzZWxmLm1vZGVsPQpf Y2xhc3MuX19uYW1lX18gKQorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5JbmNvbnNpc3Rl bnREYXRhYmFzZSggJ2ZvdW5kIG1vcmUgdGhhbiBvbmUgJyA9Cisgc2VsZi5tb2RlbF9jbGFzcy5f X25hbWVfXyApCj0yMAogICAgIGRlZiBfb25lX29yX25vbmUoIHNlbGYsIHF1ZXJ5ICk6CiAgICAg ICAgICIiIgogICAgICAgICBSZXR1cm4gdGhlIG9iamVjdCBpZiBmb3VuZCwgTm9uZSBpZiBpdCdz IG5vdC4KPTIwCi0gICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5Db25mbGljdDogaWYgbW9yZSB0 aGFuIG9uZSBtb2RlbCBpcyBmb3VuZAorICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSW5jb25z aXN0ZW50RGF0YWJhc2U6IGlmIG1vcmUgdGhhbiBvbmUgbW9kZWwgaXM9CiBmb3VuZAogICAgICAg ICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29uZV93aXRoX3Jl Y2FzdF9lcnJvcnMoIHF1ZXJ5ICkKQEAgLTM3NSw1OCArMzc3LDYgQEAKPTIwCj0yMAogIyA9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9 M0Q9M0QKLWNsYXNzIERlbGV0YWJsZU1vZGVsSW50ZXJmYWNlKCBvYmplY3QgKToKLSAgICAiIiIK LSAgICBBIG1peGluL2ludGVyZmFjZSBmb3IgYSBtb2RlbCB0aGF0IGlzIGRlbGV0YWJsZSAoaS5l LiBoYXMgYSAnZGVsZXRlZCcgPQphdHRyKS4KLQotICAgIE1hbnkgcmVzb3VyY2VzIGluIEdhbGF4 eSBjYW4gYmUgbWFya2VkIGFzIGRlbGV0ZWQgLSBtZWFuaW5nIChpbiBtb3N0IGM9CmFzZXMpCi0g ICAgdGhhdCB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLCBzaG91bGQgbm90IGJlIGRpc3BsYXll ZCwgb3IgbWF5IGJlIGFjdD0KdWFsbHkKLSAgICByZW1vdmVkIGJ5IGFuIGFkbWluL3NjcmlwdC4K LSAgICAiIiIKLQotICAgIGRlZiBkZWxldGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRy dWUsICoqa3dhcmdzICk6Ci0gICAgICAgICIiIgotICAgICAgICBNYXJrIGFzIGRlbGV0ZWQgYW5k IHJldHVybi4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVt ICkKLSAgICAgICAgaXRlbS5kZWxldGVkID0zRCBUcnVlCi0gICAgICAgIGlmIGZsdXNoOgotICAg ICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBpdGVtCi0K LSAgICBkZWYgdW5kZWxldGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRydWUsICoqa3dh cmdzICk6Ci0gICAgICAgICIiIgotICAgICAgICBNYXJrIGFzIG5vdCBkZWxldGVkIGFuZCByZXR1 cm4uCi0gICAgICAgICIiIgotICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCi0g ICAgICAgIGl0ZW0uZGVsZXRlZCA9M0QgRmFsc2UKLSAgICAgICAgaWYgZmx1c2g6Ci0gICAgICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIGl0ZW0KLQotCi0j ID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRAotY2xhc3MgUHVyZ2FibGVNb2RlbEludGVyZmFjZSggRGVsZXRhYmxlTW9kZWxJ bnRlcmZhY2UgKToKLSAgICAiIiIKLSAgICBBIG1hbmFnZXIgaW50ZXJmYWNlL21peGluIGZvciBh IHJlc291cmNlIHRoYXQgYWxsb3dzIGRlbGV0aW5nIGFuZCBwdXJnPQppbmcgd2hlcmUKLSAgICBw dXJnaW5nIGlzIG9mdGVuIHJlbW92YWwgb2Ygc29tZSBhZGRpdGlvbmFsLCBub24tZGIgcmVzb3Vy Y2UgKGUuZy4gYSBkPQphdGFzZXQncwotICAgIGZpbGUpLgotICAgICIiIgotCi0gICAgZGVmIHB1 cmdlKCBzZWxmLCB0cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgotICAgICAg ICAiIiIKLSAgICAgICAgTWFyayBhcyBwdXJnZWQgYW5kIHJldHVybi4KLQotICAgICAgICBPdmVy cmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gZG8gdGhlIGFkZGl0aW9uYWwgcmVzb3VyY2UgcmVt b3ZhbC4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCBpdGVtICkK LSAgICAgICAgaXRlbS5wdXJnZWQgPTNEIFRydWUKLSAgICAgICAgaWYgZmx1c2g6Ci0gICAgICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIGl0ZW0KLQotCi0j ID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRAogY2xhc3MgQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlKCBvYmplY3QgKToKICAg ICAiIiIKICAgICBBIHNlY3VyaXR5IGludGVyZmFjZSB0byBjaGVjayBpZiBhIFVzZXIgY2FuIHJl YWQvdmlldyBhbiBpdGVtJ3MuCkBAIC00NzEsNyArNDIxLDcgQEAKPTIwCiAgICAgICAgIDpyYWlz ZXMgZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbjoKICAgICAgICAgIiIiCi0g ICAgICAgICNOT1RFOiB0aGlzIHdpbGwgYmUgYSBsYXJnZSwgaW5lZmZpY2llbnQgbGlzdCBpZiBm aWx0ZXJzIGFyZSBwYXNzZT0KZCBpbiBrd2FyZ3MKKyAgICAgICAgI05PVEU6IHRoaXMgd2lsbCBi ZSBhIGxhcmdlLCBpbmVmZmljaWVudCBsaXN0IGlmIGZpbHRlcnMgYXJlIG5vdCBwPQphc3NlZCBp biBrd2FyZ3MKICAgICAgICAgaXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFu cywgKiprd2FyZ3MgKQogICAgICAgICByZXR1cm4gWyBzZWxmLmVycm9yX3VubGVzc19hY2Nlc3Np YmxlKCB0cmFucywgaXRlbSwgdXNlciApIGZvciBpdGU9Cm0gaW4gaXRlbXMgXQo9MjAKQEAgLTQ3 OSw3ICs0MjksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBpdGVt cyBhY2Nlc3NpYmxlIHRvIHRoZSB1c2VyLgogICAgICAgICAiIiIKLSAgICAgICAgI05PVEU6IHRo aXMgd2lsbCBiZSBhIGxhcmdlLCBpbmVmZmljaWVudCBsaXN0IGlmIGZpbHRlcnMgYXJlIHBhc3Nl PQpkIGluIGt3YXJncworICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZm aWNpZW50IGxpc3QgaWYgZmlsdGVycyBhcmUgbm90ICA9CnBhc3NlZCBpbiBrd2FyZ3MKICAgICAg ICAgaXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQog ICAgICAgICByZXR1cm4gZmlsdGVyKCBsYW1iZGEgaXRlbTogc2VsZi5pc19hY2Nlc3NpYmxlKCB0 cmFucywgaXRlbSwgdXNlciA9CiksIGl0ZW1zICkKPTIwCkBAIC01MjMsNyArNDczLDYgQEAKICAg ICAgICAgICAgIHJldHVybiBpdGVtCiAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuSXRlbU93bmVy c2hpcEV4Y2VwdGlvbiggIiVzIGlzIG5vdCBvd25lZCBieSB1c2VyIj0KICUgKCBzZWxmLm1vZGVs X2NsYXNzLl9fbmFtZV9fICkgKQo9MjAKLSAgICAjVE9ETzo/PyBhcmUgdGhlc2UgZXZlbiB1c2Vm dWw/IERvZXNuJ3QgYnlfdXNlciB3b3JrIGhlcmUgbW9zdCBvZnRlbj8KICAgICBkZWYgbGlzdF9v d25lZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgogICAgICAg ICBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIG93bmVkIGJ5IHRoZSB1c2VyLCByYWlzaW5nIGFuIGVy cm9yIGlmIEFOWQpAQCAtNTMxLDIyICs0ODAsMjAgQEAKPTIwCiAgICAgICAgIDpyYWlzZXMgZXhj ZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbjoKICAgICAgICAgIiIiCi0gICAgICAg ICNOT1RFOiB0aGlzIHdpbGwgYmUgYSBsYXJnZSwgaW5lZmZpY2llbnQgbGlzdCBpZiBmaWx0ZXJz IGFyZSBwYXNzZT0KZCBpbiBrd2FyZ3MKLSAgICAgICAgaXRlbXMgPTNEIE1vZGVsTWFuYWdlci5s aXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQotICAgICAgICByZXR1cm4gWyBzZWxmLmVycm9y X3VubGVzc19vd25lciggdHJhbnMsIGl0ZW0sIHVzZXIgKSBmb3IgaXRlbSBpbiA9Cml0ZW1zIF0K KyAgICAgICAgIyBqdXN0IGFsaWFzIHRvIGJ5X3VzZXIgKGVhc2llci9zYW1lIHRoaW5nKQorICAg ICAgICByZXR1cm4gc2VsZi5ieV91c2VyKCB0cmFucywgdXNlciwgKiprd2FyZ3MgKQo9MjAKICAg ICBkZWYgZmlsdGVyX293bmVkKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3MgKToKICAgICAg ICAgIiIiCiAgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgaXRlbXMgb3duZWQgYnkgdGhlIHVzZXIu CiAgICAgICAgICIiIgotICAgICAgICBpdGVtcyA9M0QgTW9kZWxNYW5hZ2VyLmxpc3QoIHNlbGYs IHRyYW5zLCAqKmt3YXJncyApCi0gICAgICAgIHJldHVybiBmaWx0ZXIoIGxhbWJkYSBpdGVtOiBz ZWxmLmlzX293bmVkKCB0cmFucywgaXRlbSwgdXNlciApLCBpdD0KZW1zICkKKyAgICAgICAgIyBq dXN0IGFsaWFzIHRvIGxpc3Rfb3duZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubGlzdF9vd25lZCgg dHJhbnMsIHVzZXIsICoqa3dhcmdzICkKPTIwCj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QgU0VSSUFMSVpFUlMv dG9fZGljdCxmcm9tX2RpY3QKLWNsYXNzIE1vZGVsU2VyaWFsaXppbmdFcnJvciggZXhjZXB0aW9u cy5PYmplY3RBdHRyaWJ1dGVJbnZhbGlkRXhjZXB0aW9uICk6CitjbGFzcyBNb2RlbFNlcmlhbGl6 aW5nRXJyb3IoIGV4Y2VwdGlvbnMuSW50ZXJuYWxTZXJ2ZXJFcnJvciApOgogICAgICIiIlRocm93 biB3aGVuIHJlcXVlc3QgbW9kZWwgdmFsdWVzIGNhbid0IGJlIHNlcmlhbGl6ZWQiIiIKLSAgICAj VE9ETzogYmV0dGVyIGFzIDUwMD8KICAgICBwYXNzCj0yMAo9MjAKQEAgLTYwNCw2ICs1NTEsNyBA QAogICAgICAgICAiIiIKICAgICAgICAgIyB0byBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMK ICAgICAgICAgcGFzcworICAgICAgICAjc3VwZXIoIE1vZGVsU2VyaWFsaXplciwgc2VsZiApLmFk ZF9zZXJpYWxpemVycygpCj0yMAogICAgIGRlZiBzZXJpYWxpemUoIHNlbGYsIHRyYW5zLCBpdGVt LCBrZXlzICk6CiAgICAgICAgICIiIgpAQCAtNjQ2LDI1ICs1OTQsNiBAQAogICAgICAgICBpZCA9 M0QgZ2V0YXR0ciggaXRlbSwga2V5ICkKICAgICAgICAgcmV0dXJuIHNlbGYuYXBwLnNlY3VyaXR5 LmVuY29kZV9pZCggaWQgKSBpZiBpZCBpcyBub3QgTm9uZSBlbHNlIE5vPQpuZQo9MjAKLSAgICAj VE9ETzogQW5ub3RhdGFibGVNaXhpbgotICAgIGRlZiBzZXJpYWxpemVfYW5ub3RhdGlvbiggc2Vs ZiwgdHJhbnMsIGl0ZW0sIGtleSApOgotICAgICAgICAiIiIKLSAgICAgICAgR2V0IGFuZCBzZXJp YWxpemUgYW4gYGl0ZW1gJ3MgYW5ub3RhdGlvbi4KLSAgICAgICAgIiIiCi0jVE9ETzogd2hpY2gg aXMgY29ycmVjdCBoZXJlPwotICAgICAgICAjdXNlciA9M0QgaXRlbS51c2VyCi0gICAgICAgIHVz ZXIgPTNEIHRyYW5zLnVzZXIKLSAgICAgICAgc2Ffc2Vzc2lvbiA9M0Qgc2VsZi5hcHAubW9kZWwu Y29udGV4dAotICAgICAgICByZXR1cm4gaXRlbS5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggc2Ff c2Vzc2lvbiwgdXNlciwgaXRlbSApCi0KLSAgICAjVE9ETzogVGFnZ2FibGVNaXhpbgotICAgIGRl ZiBzZXJpYWxpemVfdGFncyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSApOgotICAgICAgICAiIiIK LSAgICAgICAgR2V0IGFuZCBzZXJpYWxpemUgYW4gYGl0ZW1gJ3MgdGFncy4KLSAgICAgICAgIiIi Ci0jVE9ETzogd2hvc2UgdGFncyBhcmUgdGhlc2U/Ci0gICAgICAgIHJldHVybiBbIHRhZy51c2Vy X3RuYW1lICsgKCAnOicgKyB0YWcudXNlcl92YWx1ZSBpZiB0YWcudXNlcl92YWx1ZT0KIGVsc2Ug JycgKSBmb3IgdGFnIGluIGl0ZW0udGFncyBdCi0KICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBz ZXJpYWxpemluZyB0byBhIHZpZXcKICAgICAjIHdoZXJlIGEgdmlldyBpcyBhIHByZWRlZmllZCBs aXN0IG9mIGtleXMgdG8gc2VyaWFsaXplCiAgICAgZGVmIHNlcmlhbGl6ZV90b192aWV3KCBzZWxm LCB0cmFucywgaXRlbSwgdmlldz0zRE5vbmUsIGtleXM9M0ROb25lLCBkZT0KZmF1bHRfdmlldz0z RE5vbmUgKToKQEAgLTc5MywzNyArNzIyLDYgQEAKICAgICAgICAgdmFsID0zRCBzZWxmLnZhbGlk YXRlLmdlbm9tZV9idWlsZCggdHJhbnMsIGtleSwgdmFsICkKICAgICAgICAgcmV0dXJuIHNlbGYu ZGVmYXVsdF9kZXNlcmlhbGl6ZXIoIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApCj0yMAotICAgIGRl ZiBkZXNlcmlhbGl6ZV9hbm5vdGF0aW9uKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToK LSAgICAgICAgIiIiCi0gICAgICAgIE1ha2Ugc3VyZSBgdmFsYCBpcyBhIHZhbGlkIGFubm90YXRp b24gYW5kIGFzc2lnbiBpdC4KLSAgICAgICAgIiIiCi0gICAgICAgIHZhbCA9M0Qgc2VsZi52YWxp ZGF0ZS5udWxsYWJsZV9iYXNlc3RyaW5nKCBrZXksIHZhbCApCi0gICAgICAgICNUT0RPOiBoYXZl IHRvIGFzc3VtZSB0cmFucy51c2VyIGhlcmUuLi4KLSAgICAgICAgcmV0dXJuIGl0ZW0uYWRkX2l0 ZW1fYW5ub3RhdGlvbiggdHJhbnMuc2Ffc2Vzc2lvbiwgdHJhbnMudXNlciwgaXRlPQptLCB2YWwg KQotCi0gICAgZGVmIGRlc2VyaWFsaXplX3RhZ3MoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZh bCApOgotICAgICAgICAiIiIKLSAgICAgICAgTWFrZSBzdXJlIGB2YWxgIGlzIGEgdmFsaWQgbGlz dCBvZiB0YWcgc3RyaW5ncyBhbmQgYXNzaWduIHRoZW0uCi0KLSAgICAgICAgTm90ZTogdGhpcyB3 aWxsIGVyYXNlIGFueSBwcmV2aW91cyB0YWdzLgotICAgICAgICAiIiIKLSAgICAgICAgbmV3X3Rh Z3NfbGlzdCA9M0Qgc2VsZi52YWxpZGF0ZS5iYXNlc3RyaW5nX2xpc3QoIGtleSwgdmFsICkKLSAg ICAgICAgI1RPRE86IGhhdmUgdG8gYXNzdW1lIHRyYW5zLnVzZXIgaGVyZS4uLgotICAgICAgICB1 c2VyID0zRCB0cmFucy51c2VyCi0gICAgICAgICNUT0RPOiBkdXBlZCBmcm9tIHRhZ3MgbWFuYWdl ciAtIGRlLWR1cGUgd2hlbiBtb3ZlZCB0byB0YWdnYWJsZSBtaT0KeGluCi0gICAgICAgIHRhZ19o YW5kbGVyID0zRCB0cmFucy5hcHAudGFnX2hhbmRsZXIKLSAgICAgICAgdGFnX2hhbmRsZXIuZGVs ZXRlX2l0ZW1fdGFncyggdXNlciwgaXRlbSApCi0gICAgICAgIG5ld190YWdzX3N0ciA9M0QgJywn LmpvaW4oIG5ld190YWdzX2xpc3QgKQotICAgICAgICB0YWdfaGFuZGxlci5hcHBseV9pdGVtX3Rh Z3MoIHVzZXIsIGl0ZW0sIHVuaWNvZGUoIG5ld190YWdzX3N0ci5lbmM9Cm9kZSggJ3V0Zi04JyAp LCAndXRmLTgnICkgKQotICAgICAgICAjdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCi0KLSNUT0RP OiEhIGRvZXMgdGhlIGNyZWF0aW9uIG9mIG5ld190YWdzX2xpc3QgbWVhbiB0aGVyZSBhcmUgbm93 IG1vcmUgYW5kIG1vPQpyZSB1bnVzZWQgdGFnIHJvd3MgaW4gdGhlIGRiPwotICAgICAgICByZXR1 cm4gaXRlbS50YWdzCi0KLSAgICAjZGVmIGRlc2VyaWFsaXplX3JhdGluZyggc2VsZiwgdHJhbnMs IGl0ZW0sIGtleSwgdmFsICk6Ci0gICAgIyAgICB2YWwgPTNEIHNlbGYudmFsaWRhdGUuaW50X3Jh bmdlKCBrZXksIHZhbCwgMCwgNSApCi0gICAgIyAgICByZXR1cm4gc2VsZi5zZXRfcmF0aW5nLi4u KCB0cmFucywgaXRlbSwgdmFsLCB1c2VyPTNEdHJhbnMudXNlciApCi0KICAgICAjIC4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uPQouLi4uLiBhbGlhc2VzCiAgICAgI2RlZiBmcm9tX2RpY3QoIHNlbGYsIHRyYW5zLCBpdGVt LCBkYXRhICk6CiAgICAgIyAgICBzZWxmLmRlc2VyaWFsaXplKCB0cmFucywgaXRlbSwgZGF0YSAp CkBAIC04NDMsNiArNzQxLDkgQEAKPTIwCiAgICAgZGVmIHR5cGUoIHNlbGYsIGtleSwgdmFsLCB0 eXBlcyApOgogICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgYHZhbGAgYWdhaW5zdCB0aGUgdHlw ZSAob3IgdHVwbGUgb2YgdHlwZXMpIGluIGB0eXBlc2AuCisKKyAgICAgICAgOnJhaXNlcyBleGNl cHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uOiBpZiBub3QgYW4gaW5zPQp0 YW5jZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKCB2YWwsIHR5cGVz ICk6CiAgICAgICAgICAgICBtc2cgPTNEICdtdXN0IGJlIGEgdHlwZTogJXMnICUgKCBzdHIoIHR5 cGVzICkgKQpAQCAtOTA2LDkzICs4MDcsOTQgQEAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECiAjIE1peGlucyAoaGVy ZSBmb3Igbm93KQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBEZWxldGFibGVNb2Rl bEludGVyZmFjZSggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQSBtaXhpbi9pbnRlcmZhY2UgZm9y IGEgbW9kZWwgdGhhdCBpcyBkZWxldGFibGUgKGkuZS4gaGFzIGEgJ2RlbGV0ZWQnID0KYXR0ciku CisKKyAgICBNYW55IHJlc291cmNlcyBpbiBHYWxheHkgY2FuIGJlIG1hcmtlZCBhcyBkZWxldGVk IC0gbWVhbmluZyAoaW4gbW9zdCBjPQphc2VzKQorICAgIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2Vy IG5lZWRlZCwgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQsIG9yIG1heSBiZSBhY3Q9CnVhbGx5Cisg ICAgcmVtb3ZlZCBieSBhbiBhZG1pbi9zY3JpcHQuCisgICAgIiIiCisKKyAgICBkZWYgZGVsZXRl KCBzZWxmLCB0cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAi IiIKKyAgICAgICAgTWFyayBhcyBkZWxldGVkIGFuZCByZXR1cm4uCisgICAgICAgICIiIgorICAg ICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggaXRlbSApCisgICAgICAgIGl0ZW0uZGVsZXRlZCA9 M0QgVHJ1ZQorICAgICAgICBpZiBmbHVzaDoKKyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24u Zmx1c2goKQorICAgICAgICByZXR1cm4gaXRlbQorCisgICAgZGVmIHVuZGVsZXRlKCBzZWxmLCB0 cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAg ICAgTWFyayBhcyBub3QgZGVsZXRlZCBhbmQgcmV0dXJuLgorICAgICAgICAiIiIKKyAgICAgICAg dHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGl0ZW0gKQorICAgICAgICBpdGVtLmRlbGV0ZWQgPTNEIEZh bHNlCisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVz aCgpCisgICAgICAgIHJldHVybiBpdGVtCisKKwogI1RPRE86IHRoZXNlIGFyZSBvZiBxdWVzdGlv bmFibGUgdmFsdWUgaWYgd2UgZG9uJ3Qgd2FudCB0byBlbmFibGUgdXNlcnMgdG89CiBkZWxldGUv cHVyZ2UgdmlhIHVwZGF0ZQogY2xhc3MgRGVsZXRhYmxlTW9kZWxEZXNlcmlhbGl6ZXIoIG9iamVj dCApOgorICAgIHBhc3MKPTIwCi0gICAgZGVmIGFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6Ci0g ICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzWyAnZGVs ZXRlZCcgXSA9M0Qgc2VsZi5kZXNlcmlhbGl6ZV9kZWxldGVkCi0KLSAgICBkZWYgZGVzZXJpYWxp emVfZGVsZXRlZCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6Ci0gICAgICAgICIiIgot ICAgICAgICAiIiIKLSAgICAgICAgbmV3X2RlbGV0ZWQgPTNEIHNlbGYudmFsaWRhdGUuYm9vbCgg a2V5LCB2YWwgKQotICAgICAgICBpZiBuZXdfZGVsZXRlZCA9M0Q9M0QgaXRlbS5kZWxldGVkOgot ICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAotICAgICAgICAjVE9ETzo/PyBmbHVzaD0z REZhbHNlPwotICAgICAgICBpZiBuZXdfZGVsZXRlZDoKLSAgICAgICAgICAgIHNlbGYubWdyLmRl bGV0ZSggdHJhbnMsIGl0ZW0gKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tZ3Iu dW5kZWxldGUoIHRyYW5zLCBpdGVtICkKLSAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAorICAg ICNkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAjICAgICIiIgorICAgICMgICAg IiIiCisgICAgIyAgICBzZWxmLmRlc2VyaWFsaXplcnNbICdkZWxldGVkJyBdID0zRCBzZWxmLmRl c2VyaWFsaXplX2RlbGV0ZWQKKyAgICAjCisgICAgI2RlZiBkZXNlcmlhbGl6ZV9kZWxldGVkKCBz ZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAjICAgICIiIgorICAgICMgICAgIiIi CisgICAgIyAgICBuZXdfZGVsZXRlZCA9M0Qgc2VsZi52YWxpZGF0ZS5ib29sKCBrZXksIHZhbCAp CisgICAgIyAgICBpZiBuZXdfZGVsZXRlZCA9M0Q9M0QgaXRlbS5kZWxldGVkOgorICAgICMgICAg ICAgIHJldHVybiBpdGVtLmRlbGV0ZWQKKyAgICAjICAgICNUT0RPOj8/IGZsdXNoPTNERmFsc2U/ CisgICAgIyAgICBpZiBuZXdfZGVsZXRlZDoKKyAgICAjICAgICAgICBzZWxmLm1nci5kZWxldGUo IHRyYW5zLCBpdGVtICkKKyAgICAjICAgIGVsc2U6CisgICAgIyAgICAgICAgc2VsZi5tZ3IudW5k ZWxldGUoIHRyYW5zLCBpdGVtICkKKyAgICAjICAgIHJldHVybiBpdGVtLmRlbGV0ZWQKPTIwCj0y MAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBQdXJnYWJsZU1vZGVsSW50ZXJmYWNl KCBEZWxldGFibGVNb2RlbEludGVyZmFjZSApOgorICAgICIiIgorICAgIEEgbWFuYWdlciBpbnRl cmZhY2UvbWl4aW4gZm9yIGEgcmVzb3VyY2UgdGhhdCBhbGxvd3MgZGVsZXRpbmcgYW5kIHB1cmc9 CmluZyB3aGVyZQorICAgIHB1cmdpbmcgaXMgb2Z0ZW4gcmVtb3ZhbCBvZiBzb21lIGFkZGl0aW9u YWwsIG5vbi1kYiByZXNvdXJjZSAoZS5nLiBhIGQ9CmF0YXNldCdzCisgICAgZmlsZSkuCisgICAg IiIiCisKKyAgICBkZWYgcHVyZ2UoIHNlbGYsIHRyYW5zLCBpdGVtLCBmbHVzaD0zRFRydWUsICoq a3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGFzIHB1cmdlZCBhbmQgcmV0dXJu LgorCisgICAgICAgIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byBkbyB0aGUgYWRkaXRp b25hbCByZXNvdXJjZSByZW1vdmFsLgorICAgICAgICAiIiIKKyAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5hZGQoIGl0ZW0gKQorICAgICAgICBpdGVtLnB1cmdlZCA9M0QgVHJ1ZQorICAgICAgICBp ZiBmbHVzaDoKKyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICBy ZXR1cm4gaXRlbQorCisKIGNsYXNzIFB1cmdhYmxlTW9kZWxEZXNlcmlhbGl6ZXIoIERlbGV0YWJs ZU1vZGVsRGVzZXJpYWxpemVyICk6CisgICAgcGFzcwo9MjAKLSAgICBkZWYgYWRkX2Rlc2VyaWFs aXplcnMoIHNlbGYgKToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmRl c2VyaWFsaXplcnNbICdwdXJnZWQnIF0gPTNEIHNlbGYuZGVzZXJpYWxpemVfcHVyZ2VkCi0KLSAg ICBkZWYgZGVzZXJpYWxpemVfcHVyZ2VkKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToK LSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBuZXdfcHVyZ2VkID0zRCBzZWxmLnZh bGlkYXRlLmJvb2woIGtleSwgdmFsICkKLSAgICAgICAgaWYgbmV3X3B1cmdlZCA9M0Q9M0QgaXRl bS5wdXJnZWQ6Ci0gICAgICAgICAgICByZXR1cm4gaXRlbS5wdXJnZWQKLSAgICAgICAgaWYgbmV3 X3B1cmdlZDoKLSAgICAgICAgICAgIHNlbGYubWdyLnB1cmdlKCB0cmFucywgaXRlbSApCi0gICAg ICAgIHJldHVybiBzZWxmLnB1cmdlZAotCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLQotY2xh c3MgVGFnZ2FibGVTZXJpYWxpemVyKCBvYmplY3QgKToKLQotICAgIGRlZiBhZGRfc2VyaWFsaXpl cnMoIHNlbGYgKToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNlcmlh bGl6ZXJzWyAndGFncycgXSA9M0Qgc2VsZi5zZXJpYWxpemVfdGFncwotCi0gICAgZGVmIHNlcmlh bGl6ZV90YWdzKCBzZWxmLCB0cmFucywgaXRlbSwga2V5ICk6Ci0gICAgICAgICIiIgotICAgICAg ICAiIiIKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoIGl0ZW0sICd0YWdzJyApOgotICAgICAgICAg ICAgcmV0dXJuIE5vbmUKLQotICAgICAgICB0YWdzX3N0cl9saXN0ID0zRCBbXQotICAgICAgICBm b3IgdGFnIGluIGl0ZW0udGFnczoKLSAgICAgICAgICAgIHRhZ19zdHIgPTNEIHRhZy51c2VyX3Ru YW1lCi0gICAgICAgICAgICBpZiB0YWcudmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAg ICAgdGFnX3N0ciArPTNEICI6IiArIHRhZy51c2VyX3ZhbHVlCi0gICAgICAgICAgICB0YWdzX3N0 cl9saXN0LmFwcGVuZCggdGFnX3N0ciApCi0gICAgICAgIHByaW50ICdcdCB0YWdzX3N0cl9saXN0 JywgdGFnc19zdHJfbGlzdAotICAgICAgICByZXR1cm4gdGFnc19zdHJfbGlzdAotCi0KLWNsYXNz IEFubm90YXRhYmxlU2VyaWFsaXphYmxlKCBvYmplY3QgKToKLQotICAgIGRlZiBhZGRfc2VyaWFs aXplcnMoIHNlbGYgKToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNl cmlhbGl6ZXJzWyAnYW5ub3RhdGlvbicgXSA9M0QgbGFtYmRhIHQsIGksIGs6IHVuaWNvZGUoIHNl bGY9Ci5nZXRfYW5ub3RhdGlvbiggdCwgaSApICkKLQotCi1jbGFzcyBSYXRhYmxlU2VyaWFsaXph YmxlKCBvYmplY3QgKToKLQotICAgIGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKLSAgICAg ICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzWyAndXNlcl9yYXRp bmcnIF0gPTNEIHNlbGYuc2VyaWFsaXplX3VzZXJfcmF0aW5nCi0gICAgICAgIHNlbGYuc2VyaWFs aXplcnNbICdjb21tdW5pdHlfcmF0aW5nJyBdID0zRCBzZWxmLnNlcmlhbGl6ZV9jb21tdW5pdD0K eV9yYXRpbmcKLQotICAgIGRlZiBzZXJpYWxpemVfdXNlcl9yYXRpbmcoIHNlbGYsIHRyYW5zLCBp dGVtLCBrZXkgKToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBwYXNzCi0KLSAg ICBkZWYgc2VyaWFsaXplX2NvbW11bml0eV9yYXRpbmcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkg KToKLSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICBwYXNzCisgICAgI2RlZiBhZGRf ZGVzZXJpYWxpemVycyggc2VsZiApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAj ICAgIHNlbGYuZGVzZXJpYWxpemVyc1sgJ3B1cmdlZCcgXSA9M0Qgc2VsZi5kZXNlcmlhbGl6ZV9w dXJnZWQKKyAgICAjCisgICAgI2RlZiBkZXNlcmlhbGl6ZV9wdXJnZWQoIHNlbGYsIHRyYW5zLCBp dGVtLCBrZXksIHZhbCApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAgIG5l d19wdXJnZWQgPTNEIHNlbGYudmFsaWRhdGUuYm9vbCgga2V5LCB2YWwgKQorICAgICMgICAgaWYg bmV3X3B1cmdlZCA9M0Q9M0QgaXRlbS5wdXJnZWQ6CisgICAgIyAgICAgICAgcmV0dXJuIGl0ZW0u cHVyZ2VkCisgICAgIyAgICBpZiBuZXdfcHVyZ2VkOgorICAgICMgICAgICAgIHNlbGYubWdyLnB1 cmdlKCB0cmFucywgaXRlbSApCisgICAgIyAgICByZXR1cm4gc2VsZi5wdXJnZWQKCmRpZmYgLXIg MmU5OTBjYWVmYzk0M2ViMmIxZDRhOTRhZjUwOGMyMmJiMzRiN2ZhNiAtciA0MjhlNThmY2QzM2E5 ZjkzNDI5MmZjYT0KZGFjODQwYzc1NzgzYmNkNjIgbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0 cy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5CisrKyBiL2xpYi9nYWxh eHkvbWFuYWdlcnMvZGF0YXNldHMucHkKQEAgLTI2LDcgKzI2LDcgQEAKICAgICBkZWYgX19pbml0 X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlciggRGF0YXNldE1hbmFnZXIsIHNlbGYgKS5f X2luaXRfXyggYXBwICkKICAgICAgICAgIyBuZWVkIGZvciBhZG1pbiB0ZXN0Ci0gICAgICAgIHNl bGYudXNlcl9tZ3IgPTNEIHVzZXJzLlVzZXJNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLnVz ZXJfbWFuYWdlciA9M0QgdXNlcnMuVXNlck1hbmFnZXIoIGFwcCApCj0yMAogICAgICMgLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi49Ci4uLi4uIGNyZWF0ZQogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCBmbHVzaD0z RFRydWUsICoqa3dhcmdzICk6CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICIiIgogICAgICAg ICBJcyB0aGlzIGRhdGFzZXQgcmVhZGFibGUvdmlld2FibGUgdG8gdXNlcj8KICAgICAgICAgIiIi Ci0gICAgICAgIGlmIHNlbGYudXNlcl9tZ3IuaXNfYWRtaW4oIHRyYW5zLCB1c2VyICk6CisgICAg ICAgIGlmIHNlbGYudXNlcl9tYW5hZ2VyLmlzX2FkbWluKCB0cmFucywgdXNlciApOgogICAgICAg ICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgaWYgc2VsZi5oYXNfYWNjZXNzX3Blcm1pc3Npb24o IHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtMjQx LDI1ICsyNDEsMjUgQEAKICAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLkRhdGFzZXQu Y3JlYXRlX3RpbWUsICkKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKLSAgICAg ICAgIiIiCi0gICAgICAgICIiIgogICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uTWFu YWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxmLmRhdGFzZXRfbWdyID0z RCBEYXRhc2V0TWFuYWdlciggYXBwICkKKyAgICAgICAgc2VsZi5kYXRhc2V0X21hbmFnZXIgPTNE IERhdGFzZXRNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwg dHJhbnMsIGRhdGFzZXRfYXNzb2MsIHVzZXIgKToKICAgICAgICAgIiIiCisgICAgICAgIElzIHRo aXMgREEgYWNjZXNzaWJsZSB0byBgdXNlcmA/CiAgICAgICAgICIiIgogICAgICAgICAjIGRlZmVy IHRvIHRoZSBkYXRhc2V0Ci0gICAgICAgIHJldHVybiBzZWxmLmRhdGFzZXRfbWdyLmlzX2FjY2Vz c2libGUoIHRyYW5zLCBkYXRhc2V0X2Fzc29jLmRhdGFzZT0KdCwgdXNlciApCisgICAgICAgIHJl dHVybiBzZWxmLmRhdGFzZXRfbWFuYWdlci5pc19hY2Nlc3NpYmxlKCB0cmFucywgZGF0YXNldF9h c3NvYy5kYT0KdGFzZXQsIHVzZXIgKQo9MjAKLSAgICBkZWYgbWV0YWRhdGEoIHNlbGYsIHRyYW5z LCBkYXRhc2V0X2Fzc29jICk6Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgIyBn ZXQgbWV0YWRhdGEKLSAgICAgICAgcGFzcworICAgICNkZWYgbWV0YWRhdGEoIHNlbGYsIHRyYW5z LCBkYXRhc2V0X2Fzc29jICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgIFJldHVybiB0aGUgbWV0 YWRhdGEgY29sbGVjdGlvbi4KKyAgICAjICAgICIiIgorICAgICMgICAgIyBnZXQgbWV0YWRhdGEK KyAgICAjICAgIHBhc3MKPTIwCi0gICAgZGVmIGlzX2JlaW5nX3VzZWQoIHNlbGYsIHRyYW5zLCBk YXRhc2V0X2Fzc29jICk6Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgI1RPRE86 IGNoZWNrIGhpc3RvcnlfYXNzb2NpYXRpb25zLCBsaWJyYXJ5X2Fzc29jaWF0aW9ucwotICAgICAg ICBwYXNzCisgICAgI2RlZiBpc19iZWluZ191c2VkKCBzZWxmLCB0cmFucywgZGF0YXNldF9hc3Nv YyApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAgICNUT0RPOiBjaGVjayBo aXN0b3J5X2Fzc29jaWF0aW9ucywgbGlicmFyeV9hc3NvY2lhdGlvbnMKKyAgICAjICAgIHBhc3MK CmRpZmYgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTRhZjUwOGMyMmJiMzRiN2ZhNiAtciA0Mjhl NThmY2QzM2E5ZjkzNDI5MmZjYT0KZGFjODQwYzc1NzgzYmNkNjIgbGliL2dhbGF4eS9tYW5hZ2Vy cy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2Fs YXh5L21hbmFnZXJzL2hkYXMucHkKQEAgLTEzLDYgKzEzLDggQEAKIGZyb20gZ2FsYXh5IGltcG9y dCBkYXRhdHlwZXMKPTIwCiBpbXBvcnQgYmFzZQoraW1wb3J0IHRhZ2dhYmxlCitpbXBvcnQgYW5u b3RhdGFibGUKIGltcG9ydCBoaXN0b3JpZXMKIGltcG9ydCBkYXRhc2V0cwo9MjAKQEAgLTIyLDE0 ICsyNCwxOSBAQAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xhc3MgSERBTWFuYWdlciggZGF0YXNl dHMuRGF0YXNldEFzc29jaWF0aW9uTWFuYWdlciwgYmFzZS5Pd25hYmxlTW9kZWxJbnQ9CmVyZmFj ZSApOgorY2xhc3MgSERBTWFuYWdlciggZGF0YXNldHMuRGF0YXNldEFzc29jaWF0aW9uTWFuYWdl ciwgYmFzZS5Pd25hYmxlTW9kZWxJbnQ9CmVyZmFjZSwKKyAgICAgICAgdGFnZ2FibGUuVGFnZ2Fi bGVNYW5hZ2VySW50ZXJmYWNlLCBhbm5vdGF0YWJsZS5Bbm5vdGF0YWJsZU1hbmFnZXJJPQpudGVy ZmFjZSApOgogICAgICNUT0RPOiBtb3ZlIHdoYXQgbWFrZXMgc2Vuc2UgaW50byBEYXRhc2V0TWFu YWdlcgogICAgICIiIgogICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3IgaW50ZXJhY3Rp bmcgd2l0aCBIREFzLgogICAgICIiIgogICAgIG1vZGVsX2NsYXNzID0zRCBtb2RlbC5IaXN0b3J5 RGF0YXNldEFzc29jaWF0aW9uCisgICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgJ2hpc3RvcnlfZGF0 YXNldF9hc3NvY2lhdGlvbicKICAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLkhpc3Rv cnlEYXRhc2V0QXNzb2NpYXRpb24uY3JlYXRlX3RpbWUsICkKPTIwCisgICAgdGFnX2Fzc29jID0z RCBtb2RlbC5IaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uVGFnQXNzb2NpYXRpb24KKyAgICBhbm5v dGF0aW9uX2Fzc29jID0zRCBtb2RlbC5IaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uQW5ub3RhdGlv bkFzc29jaWF0PQppb24KKwogICAgICNUT0RPOiB3aGljaCBvZiB0aGVzZSBhcmUgY29tbW9uIHdp dGggTEREQXMgYW5kIGNhbiBiZSBwdXNoZWQgZG93biBpbnQ9Cm8gRGF0YXNldEFzc29jaWF0aW9u TWFuYWdlcj8KPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKQEAgLTQxLDYgKzQ4 LDcgQEAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMK ICAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGhkYSwgdXNlciApOgogICAgICAg ICAiIiIKKyAgICAgICAgT3ZlcnJpZGUgdG8gYWxsb3cgb3duZXJzICh0aG9zZSB0aGF0IG93biB0 aGUgYXNzb2NpYXRlZCBoaXN0b3J5KS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuaXNf b3duZXIoIHRyYW5zLCBoZGEsIHVzZXIgKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0x MTgsMzMgKzEyNiwyOSBAQAo9MjAKICAgICBkZWYgY29weV9sZGRhKCBzZWxmLCB0cmFucywgaGlz dG9yeSwgbGRkYSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIENvcHkgdGhpcyBI REEgYXMgYSBMRERBIGFuZCByZXR1cm4uCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gbGRk YS50b19oaXN0b3J5X2RhdGFzZXRfYXNzb2NpYXRpb24oIGhpc3RvcnksIGFkZF90b19oaXN0b3I9 Cnk9M0RUcnVlICkKPTIwCi0gICAgZGVmIGlzX2FfY29weSggc2VsZiwgdHJhbnMsIGhkYSApOgot ICAgICAgICBwYXNzCisgICAgI1RPRE86IHN0dWIKKyAgICAjZGVmIGlzX2FfY29weSggc2VsZiwg dHJhbnMsIGhkYSApOgorICAgICMgICAgcGFzcwo9MjAKLSAgICBkZWYgY29waWVkX2Zyb20oIHNl bGYsIHRyYW5zLCBoZGEgKToKLSAgICAgICAgcGFzcworICAgICNUT0RPOiBzdHViCisgICAgI2Rl ZiBjb3BpZWRfZnJvbSggc2VsZiwgdHJhbnMsIGhkYSApOgorICAgICMgICAgcGFzcwo9MjAKLSAg ICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uPQouLi4uLgotIyAgICBkZWYgYnlfaGlzdG9yeV9pZCggc2VsZiwgdHJh bnMsIGhpc3RvcnlfaWQsIGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyA9Cik6Ci0jICAgICAgICBo aXN0b3J5X2lkX2ZpbHRlciA9M0Qgc2VsZi5tb2RlbF9jbGFzcy5oaXN0b3J5X2lkID0zRD0zRCBo aXN0b3J5Xz0KaWQKLSMgICAgICAgIGZpbHRlcnMgPTNEIHNlbGYuX211bmdlX2ZpbHRlcnMoIGhp c3RvcnlfaWRfZmlsdGVyLCBmaWx0ZXJzICkKLSMgICAgICAgIHJldHVybiBzZWxmLmxpc3QoIHRy YW5zLCBmaWx0ZXJzPTNEZmlsdGVycywgKiprd2FyZ3MgKQotCi0jICAgICNkZWYgYnlfaGlzdG9y eSggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGZpbHRlcnM9M0ROb25lLCAqKmt3YXJncyApOgotIyAg ICAjICAgIHJldHVybiBoaXN0b3J5LmRhdGFzZXRzCi0KKyAgICAjVE9ETzogc3R1YgogICAgICNk ZWYgYnlfdXNlciggc2VsZiwgdHJhbnMsIHVzZXIgKToKICAgICAjICAgIHBhc3MKPTIwCiAgICAg ZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgaGRhICk6CiAgICAgICAgICIiIgorICAgICAgICBQdXJn ZSB0aGlzIEhEQSBhbmQgdGhlIGRhdGFzZXQgdW5kZXJseWluZyBpdC4KICAgICAgICAgIiIiCiAg ICAgICAgICMgZXJyb3IgaGVyZSBpZiBkaXNhbGxvd2VkIC0gYmVmb3JlIGpvYnMgYXJlIHN0b3Bw ZWQKICAgICAgICAgI1RPRE86IHBvc3MuIG1vdmUgdG8gRGF0YXNldEFzc29jaWF0aW9uTWFuYWdl cgotICAgICAgICBzZWxmLmRhdGFzZXRfbWdyLmVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2Fs bG93ZWQoIHRyYW5zLCBoZGEgKQorICAgICAgICBzZWxmLmRhdGFzZXRfbWFuYWdlci5lcnJvcl91 bmxlc3NfZGF0YXNldF9wdXJnZV9hbGxvd2VkKCB0cmFucywgaGQ9CmEgKQogICAgICAgICBzdXBl ciggSERBTWFuYWdlciwgc2VsZiApLnB1cmdlKCB0cmFucywgaGRhLCBmbHVzaD0zRFRydWUgKQo9 MjAKICAgICAgICAgIyBzaWduYWwgdG8gc3RvcCB0aGUgY3JlYXRpbmcgam9iPwpAQCAtMTU1LDE3 ICsxNTksMjcgQEAKPTIwCiAgICAgICAgICMgbW9yZSBpbXBvcnRhbnRseSwgcHVyZ2UgZGF0YXNl dCBhcyB3ZWxsCiAgICAgICAgIGlmIGhkYS5kYXRhc2V0LnVzZXJfY2FuX3B1cmdlOgotICAgICAg ICAgICAgc2VsZi5kYXRhc2V0X21nci5wdXJnZSggdHJhbnMsIGhkYS5kYXRhc2V0ICkKKyAgICAg ICAgICAgIHNlbGYuZGF0YXNldF9tYW5hZ2VyLnB1cmdlKCB0cmFucywgaGRhLmRhdGFzZXQgKQog ICAgICAgICByZXR1cm4gaGRhCj0yMAogICAgIGRlZiBlcnJvcl9pZl91cGxvYWRpbmcoIHNlbGYs IHRyYW5zLCBoZGEgKToKICAgICAgICAgIiIiCiAgICAgICAgIFJhaXNlIGVycm9yIGlmIEhEQSBp cyBzdGlsbCB1cGxvYWRpbmcuCiAgICAgICAgICIiIgorICAgICAgICAjVE9ETzogbWF5IGJlIGJl dHRlciBhZGRlZCB0byBhbiBvdmVycmlkZGVuIGdldF9hY2Nlc3NpYmxlCiAgICAgICAgIGlmIGhk YS5zdGF0ZSA9M0Q9M0QgbW9kZWwuRGF0YXNldC5zdGF0ZXMuVVBMT0FEOgogICAgICAgICAgICAg cmFpc2UgZXhjZXB0aW9ucy5Db25mbGljdCggIlBsZWFzZSB3YWl0IHVudGlsIHRoaXMgZGF0YXNl dCBmaW49CmlzaGVzIHVwbG9hZGluZyIgKQogICAgICAgICByZXR1cm4gaGRhCj0yMAorICAgICMg Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi49Ci4uLi4uIHZpYSBoaXN0b3J5CisgICAgI2RlZiBieV9oaXN0b3J5X2lkKCBz ZWxmLCB0cmFucywgaGlzdG9yeV9pZCwgZmlsdGVycz0zRE5vbmUsICoqa3dhcmdzID0KKToKKyAg ICAjICAgIGhpc3RvcnlfaWRfZmlsdGVyID0zRCBzZWxmLm1vZGVsX2NsYXNzLmhpc3RvcnlfaWQg PTNEPTNEIGhpc3RvcnlfPQppZAorICAgICMgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVuZ2VfZmls dGVycyggaGlzdG9yeV9pZF9maWx0ZXIsIGZpbHRlcnMgKQorICAgICMgICAgcmV0dXJuIHNlbGYu bGlzdCggdHJhbnMsIGZpbHRlcnM9M0RmaWx0ZXJzLCAqKmt3YXJncyApCisKKyAgICAjZGVmIGJ5 X2hpc3RvcnkoIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCBmaWx0ZXJzPTNETm9uZSwgKiprd2FyZ3Mg KToKKyAgICAjICAgIHJldHVybiBoaXN0b3J5LmRhdGFzZXRzCisKICAgICAjIC4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u PQouLi4uLiBhc3NvY2lhdGVkCiAjVE9ETzogaXMgdGhpcyBuZWVkZWQ/IENhbid0IHlvdSB1c2Ug dGhlIGhkYS5jcmVhdGluZ19qb2IgYXR0cmlidXRlPyBXaGVuID0KaXMgdGhpcyBOb25lPwogICAg IGRlZiBjcmVhdGluZ19qb2IoIHNlbGYsIHRyYW5zLCBoZGEgKToKQEAgLTIyNCw2ICsyMzgsOCBA QAo9MjAKICAgICBkZWYgZ2V0X3Zpc3VhbGl6YXRpb25zKCBzZWxmLCB0cmFucywgaGRhICk6CiAg ICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyB3aXRoIGxp bmtzIHRvIHZpc3VhbGl6YXRpb24gcGFnZXMKKyAgICAgICAgZm9yIHRob3NlIHZpc3VhbGl6YXRp b25zIHRoYXQgYXBwbHkgdG8gdGhpcyBoZGEuCiAgICAgICAgICIiIgogICAgICAgICAjIHVzZSBv bGRlciBzeXN0ZW0gaWYgcmVnaXN0cnkgaXMgb2ZmIGluIHRoZSBjb25maWcKICAgICAgICAgaWYg bm90IHNlbGYuYXBwLnZpc3VhbGl6YXRpb25zX3JlZ2lzdHJ5OgpAQCAtMjg2LDEzICszMDIsMTQg QEAKPTIwCj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKLWNsYXNzIEhEQVNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxT ZXJpYWxpemVyICk6CitjbGFzcyBIREFTZXJpYWxpemVyKCBiYXNlLk1vZGVsU2VyaWFsaXplciwK KyAgICAgICAgdGFnZ2FibGUuVGFnZ2FibGVTZXJpYWxpemVyLCBhbm5vdGF0YWJsZS5Bbm5vdGF0 YWJsZVNlcmlhbGl6ZXIgKToKICAgICAjVE9ETzogaW5oZXJpdCBmcm9tIGRhdGFzZXRzLkRhdGFz ZXRBc3NvY2lhdGlvblNlcmlhbGl6ZXIKICAgICAjVE9ETzogbW92ZSB3aGF0IG1ha2VzIHNlbnNl IGludG8gRGF0YXNldFNlcmlhbGl6ZXIKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAg KToKICAgICAgICAgc3VwZXIoIEhEQVNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkK LSAgICAgICAgc2VsZi5oZGFfbWdyID0zRCBIREFNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxm LmhkYV9tYW5hZ2VyID0zRCBIREFNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICAgICAgIyBtb3N0IG9m IHRoZXNlIHZpZXdzIGJ1aWxkL2FkZCB0byB0aGUgcHJldmlvdXMgdmlldwogICAgICAgICBzdW1t YXJ5X3ZpZXcgPTNEIFsKQEAgLTM2MCw2ICszNzcsMTAgQEAKICAgICAgICAgc2VsZi5kZWZhdWx0 X3ZpZXcgPTNEICdzdW1tYXJ5Jwo9MjAKICAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6 CisgICAgICAgIHN1cGVyKCBIREFTZXJpYWxpemVyLCBzZWxmICkuYWRkX3NlcmlhbGl6ZXJzKCkK KyAgICAgICAgdGFnZ2FibGUuVGFnZ2FibGVTZXJpYWxpemVyLmFkZF9zZXJpYWxpemVycyggc2Vs ZiApCisgICAgICAgIGFubm90YXRhYmxlLkFubm90YXRhYmxlU2VyaWFsaXplci5hZGRfc2VyaWFs aXplcnMoIHNlbGYgKQorCiAgICAgICAgIHNlbGYuc2VyaWFsaXplcnMudXBkYXRlKHsKICAgICAg ICAgICAgICdtb2RlbF9jbGFzcycgICA6IGxhbWJkYSAqYTogJ0hpc3RvcnlEYXRhc2V0QXNzb2Np YXRpb24nLAogICAgICAgICAgICAgI1RPRE86IGFjY2Vzc2libGUgbmVlZHMgdG8gZ28gYXdheQpA QCAtNDAzLDkgKzQyNCw5IEBACiAgICAgICAgICAgICAnYW5ub3RhdGlvbicgICAgOiBzZWxmLnNl cmlhbGl6ZV9hbm5vdGF0aW9uLAogICAgICAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogc2VsZi5z ZXJpYWxpemVfdGFncywKPTIwCi0gICAgICAgICAgICAnZGlzcGxheV9hcHBzJyAgOiBsYW1iZGEg dCwgaSwgazogc2VsZi5oZGFfbWdyLmdldF9kaXNwbGF5X2FwcD0KcyggdCwgaSApLAotICAgICAg ICAgICAgJ2Rpc3BsYXlfdHlwZXMnIDogbGFtYmRhIHQsIGksIGs6IHNlbGYuaGRhX21nci5nZXRf b2xkX2Rpc3BsYXk9Cl9hcHBsaWNhdGlvbnMoIHQsIGkgKSwKLSAgICAgICAgICAgICd2aXN1YWxp emF0aW9ucyc6IGxhbWJkYSB0LCBpLCBrOiBzZWxmLmhkYV9tZ3IuZ2V0X3Zpc3VhbGl6YXRpPQpv bnMoIHQsIGkgKSwKKyAgICAgICAgICAgICdkaXNwbGF5X2FwcHMnICA6IGxhbWJkYSB0LCBpLCBr OiBzZWxmLmhkYV9tYW5hZ2VyLmdldF9kaXNwbGF5PQpfYXBwcyggdCwgaSApLAorICAgICAgICAg ICAgJ2Rpc3BsYXlfdHlwZXMnIDogbGFtYmRhIHQsIGksIGs6IHNlbGYuaGRhX21hbmFnZXIuZ2V0 X29sZF9kaXM9CnBsYXlfYXBwbGljYXRpb25zKCB0LCBpICksCisgICAgICAgICAgICAndmlzdWFs aXphdGlvbnMnOiBsYW1iZGEgdCwgaSwgazogc2VsZi5oZGFfbWFuYWdlci5nZXRfdmlzdWFsaT0K emF0aW9ucyggdCwgaSApLAo9MjAKICAgICAgICAgICAgICdkYXRhc2V0X3V1aWQnICA6IGxhbWJk YSB0LCBpLCBrOiBzdHIoIGkuZGF0YXNldC51dWlkICkgaWYgaS5kPQphdGFzZXQudXVpZCBlbHNl IE5vbmUsCiAgICAgICAgICAgICAndXVpZCcgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogc2Vs Zi5zZXJpYWxpemVyc1sgJ2RhdGFzZXRfdT0KdWlkJyBdKCB0LCBpLCBrICksCkBAIC00MjgsNiAr NDQ5LDcgQEAKPTIwCiAgICAgZGVmIHNlcmlhbGl6ZSggc2VsZiwgdHJhbnMsIGhkYSwga2V5cyAp OgogICAgICAgICAiIiIKKyAgICAgICAgT3ZlcnJpZGUgdG8gYWRkIG1ldGFkYXRhIGFzIGZsYXR0 ZW5lZCBrZXlzIG9uIHRoZSBzZXJpYWxpemVkIEhEQS4KICAgICAgICAgIiIiCiAgICAgICAgICMg aWYgJ21ldGFkYXRhJyBpc24ndCByZW1vdmVkIGZyb20ga2V5cyBoZXJlIHNlcmlhbGl6ZSB3aWxs IHJldHJpZT0KdmUgdGhlIHVuLXNlcmlhbGl6YWJsZSBNZXRhZGF0YUNvbGxlY3Rpb24KICAgICAg ICAgI1RPRE86IHJlbW92ZSB0aGVzZSB3aGVuIG1ldGFkYXRhIGlzIHN1Yi1vYmplY3QKQEAgLTQ3 MCw2ICs0OTIsNyBAQAo9MjAKICAgICBkZWYgc2VyaWFsaXplX21ldGFkYXRhKCBzZWxmLCB0cmFu cywgaGRhLCBrZXksIGV4Y2x1ZGVkPTNETm9uZSApOgogICAgICAgICAiIiIKKyAgICAgICAgQ3lj bGUgdGhyb3VnaCBtZXRhZGF0YSBhbmQgcmV0dXJuIGFzIGRpY3Rpb25hcnkuCiAgICAgICAgICIi IgogICAgICAgICAjIGRia2V5IGlzIGEgcmVwZWF0IGFjdHVhbGx5IChtZXRhZGF0YV9kYmtleSA9 M0Q9M0QgZ2Vub21lX2J1aWxkKQogICAgICAgICAjZXhjbHVkZWQgPTNEIFsgJ2Ria2V5JyBdIGlm IGV4Y2x1ZGVkIGlzIE5vbmUgZWxzZSBleGNsdWRlZApAQCAtNDk3LDYgKzUyMCw3IEBACiAgICAg IyBhZGQgdG8gc2VyaWFsaXplX21ldGFkYXRhIGFib3ZlCiAgICAgZGVmIHNlcmlhbGl6ZV9tZXRh X2ZpbGVzKCBzZWxmLCB0cmFucywgaGRhLCBrZXkgKToKICAgICAgICAgIiIiCisgICAgICAgIEN5 Y2xlIHRocm91Z2ggbWV0YSBmaWxlcyBhbmQgcmV0dXJuIHRoZW0gYXMgYSBsaXN0IG9mIGRpY3Rp b25hcmllcy4KICAgICAgICAgIiIiCiAgICAgICAgIG1ldGFfZmlsZXMgPTNEIFtdCiAgICAgICAg IGZvciBtZXRhX3R5cGUgaW4gaGRhLm1ldGFkYXRhLnNwZWMua2V5cygpOgpAQCAtNTA4LDYgKzUz Miw3IEBACiAgICAgI1RPRE86IGFuZCB0byBkYXRhc2V0IGluc3RlYWQgKHBhc3NpbmcgdGhyb3Vn aCBvYmplY3Qgc3RvcmUpCiAgICAgZGVmIHNlcmlhbGl6ZV9maWxlX3BhdGgoIHNlbGYsIHRyYW5z LCBoZGEsIGtleSApOgogICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBgZmlsZV9uYW1l YCBvZiB0aGUgSERBIGlmIHRoZSBjb25maWcgZXhwb3NlcyBpdCwgTm9uZSBvPQp0aGVyd2lzZS4K ICAgICAgICAgIiIiCiAjVE9ETzogYWxsb3cgYWRtaW4KICAgICAgICAgaWYgc2VsZi5hcHAuY29u ZmlnLmV4cG9zZV9kYXRhc2V0X3BhdGg6CkBAIC01MTksNiArNTQ0LDcgQEAKPTIwCiAgICAgZGVm IHNlcmlhbGl6ZV91cmxzKCBzZWxmLCB0cmFucywgaGRhLCBrZXkgKToKICAgICAgICAgIiIiCisg ICAgICAgIFJldHVybiB3ZWIgY29udHJvbGxlciB1cmxzIHVzZWZ1bCBmb3IgdGhpcyBIREEuCiAg ICAgICAgICIiIgogICAgICAgICB1cmxfZm9yID0zRCBnYWxheHkud2ViLnVybF9mb3IKICAgICAg ICAgZW5jb2RlZF9pZCA9M0Qgc2VsZi5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5pZCApCkBAIC01 MzksMTAyICs1NjUsMjIgQEAKICAgICAgICAgcmV0dXJuIHVybHMKPTIwCj0yMAotICAgICNUT0RP OiBtb3ZlIGludG8gc2VyaWFsaXplciBiZWxvdwotICAgICNkZWYgZ2V0X2hkYV9kaWN0KCBzZWxm LCB0cmFucywgaGRhICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgIFJldHVybiBmdWxsIGRldGFp bHMgb2YgdGhpcyBIREEgaW4gZGljdGlvbmFyeSBmb3JtLgotICAgICMgICAgIiIiCi0gICAgIyAg ICAjcHJlY29uZGl0aW9uOiB0aGUgdXNlcidzIGFjY2VzcyB0byB0aGlzIGhkYSBoYXMgYWxyZWFk eSBiZWVuIGNoZT0KY2tlZAotICAgICMgICAgI1RPRE86Pz8gcG9zdGNvbmRpdGlvbjogYWxsIGlk cyBhcmUgZW5jb2RlZCAoaXMgdGhpcyByZWFsbHkgd2hhdCA9CndlIHdhbnQgYXQgdGhpcyBsZXZl bD8pCi0gICAgIyAgICBleHBvc2VfZGF0YXNldF9wYXRoID0zRCB0cmFucy51c2VyX2lzX2FkbWlu KCkgb3IgdHJhbnMuYXBwLmNvbmZpZz0KLmV4cG9zZV9kYXRhc2V0X3BhdGgKLSAgICAjICAgIGhk YV9kaWN0ID0zRCBoZGEudG9fZGljdCggdmlldz0zRCdlbGVtZW50JywgZXhwb3NlX2RhdGFzZXRf cGF0aD0KPTNEZXhwb3NlX2RhdGFzZXRfcGF0aCApCi0gICAgIyAgICBoZGFfZGljdFsgJ2FwaV90 eXBlJyBdID0zRCAiZmlsZSIKLSAgICAjCi0gICAgIyAgICAjIEFkZCBhZGRpdGlvbmFsIGF0dHJp YnV0ZXMgdGhhdCBkZXBlbmQgb24gdHJhbnMgbXVzdCBiZSBhZGRlZCBoZT0KcmUgcmF0aGVyIHRo YW4gYXQgdGhlIG1vZGVsIGxldmVsLgotICAgICMgICAgY2FuX2FjY2Vzc19oZGEgPTNEIHRyYW5z LmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNjZXNzX2RhdGFzZXQoIHQ9CnJhbnMuZ2V0X2N1cnJl bnRfdXNlcl9yb2xlcygpLCBoZGEuZGF0YXNldCApCi0gICAgIyAgICBjYW5fYWNjZXNzX2hkYSA9 M0QgKCB0cmFucy51c2VyX2lzX2FkbWluKCkgb3IgY2FuX2FjY2Vzc19oZGEgKQotICAgICMgICAg aWYgbm90IGNhbl9hY2Nlc3NfaGRhOgotICAgICMgICAgICAgIHJldHVybiBzZWxmLmdldF9pbmFj Y2Vzc2libGVfaGRhX2RpY3QoIHRyYW5zLCBoZGEgKQotICAgICMgICAgaGRhX2RpY3RbICdhY2Nl c3NpYmxlJyBdID0zRCBUcnVlCi0gICAgIwotICAgICMgICAgI1RPRE86IEknbSB1bmNsZWFyIGFz IHRvIHdoaWNoIGFjY2VzcyBwYXR0ZXJuIGlzIHJpZ2h0Ci0gICAgIyAgICBoZGFfZGljdFsgJ2Fu bm90YXRpb24nIF0gPTNEIGhkYS5nZXRfaXRlbV9hbm5vdGF0aW9uX3N0ciggdHJhbnMucz0KYV9z ZXNzaW9uLCBoZGEuaGlzdG9yeS51c2VyLCBoZGEgKQotICAgICMgICAgI2Fubm90YXRpb24gPTNE IGdldGF0dHIoIGhkYSwgJ2Fubm90YXRpb24nLCBoZGEuZ2V0X2l0ZW1fYW5ub3RhdGk9Cm9uX3N0 ciggdHJhbnMuc2Ffc2Vzc2lvbiwgdHJhbnMudXNlciwgaGRhICkgKQotICAgICMKLSAgICAjICAg ICMgLS0tLSByZXR1cm4gaGVyZSBpZiBkZWxldGVkIEFORCBwdXJnZWQgT1IgY2FuJ3QgYWNjZXNz Ci0gICAgIyAgICBwdXJnZWQgPTNEICggaGRhLnB1cmdlZCBvciBoZGEuZGF0YXNldC5wdXJnZWQg KQotICAgICMgICAgaWYgKCBoZGEuZGVsZXRlZCBhbmQgcHVyZ2VkICk6Ci0gICAgIyAgICAgICAg I1RPRE86IHRvX2RpY3Qgc2hvdWxkIHJlYWxseSBnbyBBRlRFUiB0aGlzIC0gb25seSBzdW1tYXJ5 IGRhdGEKLSAgICAjICAgICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRz KCBoZGFfZGljdCApCi0gICAgIwotICAgICMgICAgaWYgZXhwb3NlX2RhdGFzZXRfcGF0aDoKLSAg ICAjICAgICAgICB0cnk6Ci0gICAgIyAgICAgICAgICAgIGhkYV9kaWN0WyAnZmlsZV9uYW1lJyBd ID0zRCBoZGEuZmlsZV9uYW1lCi0gICAgIyAgICAgICAgZXhjZXB0IG9iamVjdHN0b3JlLk9iamVj dE5vdEZvdW5kOgotICAgICMgICAgICAgICAgICBsb2cuZXhjZXB0aW9uKCAnb2JqZWN0c3RvcmUu T2JqZWN0Tm90Rm91bmQsIEhEQSAlcy4nLCBoZGE9Ci5pZCApCi0gICAgIwotICAgICMgICAgaGRh X2RpY3RbICdkb3dubG9hZF91cmwnIF0gPTNEIGdhbGF4eS53ZWIudXJsX2ZvciggJ2hpc3Rvcnlf Y29udGU9Cm50c19kaXNwbGF5JywKLSAgICAjICAgICAgICBoaXN0b3J5X2lkID0zRCB0cmFucy5z ZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5oaXN0b3J5LmlkICksCi0gICAgIyAgICAgICAgaGlzdG9y eV9jb250ZW50X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5pZCApICkKLSAg ICAjCi0gICAgIyAgICAjIGluZGVjZXMsIGFzc29jLiBtZXRhZGF0YSBmaWxlcywgZXRjLgotICAg ICMgICAgbWV0YV9maWxlcyA9M0QgW10KLSAgICAjICAgIGZvciBtZXRhX3R5cGUgaW4gaGRhLm1l dGFkYXRhLnNwZWMua2V5cygpOgotICAgICMgICAgICAgIGlmIGlzaW5zdGFuY2UoIGhkYS5tZXRh ZGF0YS5zcGVjWyBtZXRhX3R5cGUgXS5wYXJhbSwgZ2FsYXh5LmQ9CmF0YXR5cGVzLm1ldGFkYXRh LkZpbGVQYXJhbWV0ZXIgKToKLSAgICAjICAgICAgICAgICAgbWV0YV9maWxlcy5hcHBlbmQoIGRp Y3QoIGZpbGVfdHlwZT0zRG1ldGFfdHlwZSApICkKLSAgICAjICAgIGlmIG1ldGFfZmlsZXM6Ci0g ICAgIyAgICAgICAgaGRhX2RpY3RbICdtZXRhX2ZpbGVzJyBdID0zRCBtZXRhX2ZpbGVzCi0gICAg IwotICAgICMgICAgIyBjdXJyZW50bHksIHRoZSB2aXogcmVnIGlzIG9wdGlvbmFsIC0gaGFuZGxl IG9uL29mZgotICAgICMgICAgaWYgdHJhbnMuYXBwLnZpc3VhbGl6YXRpb25zX3JlZ2lzdHJ5Ogot ICAgICMgICAgICAgIGhkYV9kaWN0WyAndmlzdWFsaXphdGlvbnMnIF0gPTNEIHRyYW5zLmFwcC52 aXN1YWxpemF0aW9uc19yZWc9CmlzdHJ5LmdldF92aXN1YWxpemF0aW9ucyggdHJhbnMsIGhkYSAp Ci0gICAgIyAgICBlbHNlOgotICAgICMgICAgICAgIGhkYV9kaWN0WyAndmlzdWFsaXphdGlvbnMn IF0gPTNEIGhkYS5nZXRfdmlzdWFsaXphdGlvbnMoKQotICAgICMgICAgI1RPRE86IGl0IG1heSBh bHNvIGJlIHdpc2VyIHRvIHJlbW92ZSBmcm9tIGhlcmUgYW5kIGFkZCBhcyBBUEkgY2E9CmxsIHRo YXQgbG9hZHMgdGhlIHZpc3VhbGl6YXRpb25zCi0gICAgIyAgICAjICAgICAgICAgICB3aGVuIHRo ZSB2aXN1YWxpemF0aW9ucyBidXR0b24gaXMgY2xpY2tlZCAoaW5zdGVhZCBvZj0KIHByZWxvYWRp bmcvcHJlLWNoZWNraW5nKQotICAgICMKLSAgICAjICAgICMgLS0tLSByZXR1cm4gaGVyZSBpZiBk ZWxldGVkCi0gICAgIyAgICBpZiBoZGEuZGVsZXRlZCBhbmQgbm90IHB1cmdlZDoKLSAgICAjICAg ICAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRzKCBoZGFfZGljdCApCi0g ICAgIwotICAgICMgICAgcmV0dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyggaGRh X2RpY3QgKQotCi0gICAgI2RlZiBnZXRfaW5hY2Nlc3NpYmxlX2hkYV9kaWN0KCBzZWxmLCB0cmFu cywgaGRhICk6Ci0gICAgIyAgICByZXR1cm4gdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2RpY3RfaWRz KHsKLSAgICAjICAgICAgICAnaWQnICAgICAgICA6IGhkYS5pZCwKLSAgICAjICAgICAgICAnaGlz dG9yeV9pZCc6IGhkYS5oaXN0b3J5LmlkLAotICAgICMgICAgICAgICdoaWQnICAgICAgIDogaGRh LmhpZCwKLSAgICAjICAgICAgICAnbmFtZScgICAgICA6IGhkYS5uYW1lLAotICAgICMgICAgICAg ICdzdGF0ZScgICAgIDogaGRhLnN0YXRlLAotICAgICMgICAgICAgICdkZWxldGVkJyAgIDogaGRh LmRlbGV0ZWQsCi0gICAgIyAgICAgICAgJ3Zpc2libGUnICAgOiBoZGEudmlzaWJsZSwKLSAgICAj ICAgICAgICAnYWNjZXNzaWJsZSc6IEZhbHNlCi0gICAgIyAgICB9KQotCi0gICAgI2RlZiBnZXRf aGRhX2RpY3Rfd2l0aF9lcnJvciggc2VsZiwgdHJhbnMsIGhkYT0zRE5vbmUsIGhpc3RvcnlfaWQ9 M0RObz0KbmUsIGlkPTNETm9uZSwgZXJyb3JfbXNnPTNEJ0Vycm9yJyApOgotICAgICMgICAgcmV0 dXJuIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9kaWN0X2lkcyh7Ci0gICAgIyAgICAgICAgJ2lkJyAg ICAgICAgOiBoZGEuaWQgaWYgaGRhIGVsc2UgaWQsCi0gICAgIyAgICAgICAgJ2hpc3RvcnlfaWQn OiBoZGEuaGlzdG9yeS5pZCBpZiBoZGEgZWxzZSBoaXN0b3J5X2lkLAotICAgICMgICAgICAgICdo aWQnICAgICAgIDogaGRhLmhpZCBpZiBoZGEgZWxzZSAnKHVua25vd24pJywKLSAgICAjICAgICAg ICAnbmFtZScgICAgICA6IGhkYS5uYW1lIGlmIGhkYSBlbHNlICcodW5rbm93biknLAotICAgICMg ICAgICAgICdlcnJvcicgICAgIDogZXJyb3JfbXNnLAotICAgICMgICAgICAgICdzdGF0ZScgICAg IDogdHJhbnMubW9kZWwuRGF0YXNldC5zdGF0ZXMuTkVXCi0gICAgIyAgICB9KQotCi0KICMgPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNECi1jbGFzcyBIREFEZXNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxEZXNlcmlhbGl6ZXIgKToK K2NsYXNzIEhEQURlc2VyaWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciwKKyAgICAgICAg dGFnZ2FibGUuVGFnZ2FibGVEZXNlcmlhbGl6ZXIsIGFubm90YXRhYmxlLkFubm90YXRhYmxlRGVz ZXJpYWxpemVyPQogKToKICAgICAiIiIKICAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmplY3QgZm9y IHZhbGlkYXRpbmcgYW5kIGRlc2VyaWFsaXppbmcgZGljdGlvbmFyaWVzPQogaW50byBoaXN0b3Jp ZXMuCiAgICAgIiIiCj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAg IHN1cGVyKCBIREFEZXNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKLSAgICAgICAg c2VsZi5oZGFfbWdyID0zRCBIREFNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9tYW5h Z2VyID0zRCBIREFNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICAjYXNzdW1lczogaW5jb21pbmcgZnJv bSBqc29uLmxvYWRzIGFuZCBzYW5pdGl6ZWQKICAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNl bGYgKToKICAgICAgICAgc3VwZXIoIEhEQURlc2VyaWFsaXplciwgc2VsZiApLmFkZF9kZXNlcmlh bGl6ZXJzKCkKKyAgICAgICAgdGFnZ2FibGUuVGFnZ2FibGVEZXNlcmlhbGl6ZXIuYWRkX2Rlc2Vy aWFsaXplcnMoIHNlbGYgKQorICAgICAgICBhbm5vdGF0YWJsZS5Bbm5vdGF0YWJsZURlc2VyaWFs aXplci5hZGRfZGVzZXJpYWxpemVycyggc2VsZiApCiAgICAgICAgIHNlbGYuZGVzZXJpYWxpemVy cy51cGRhdGUoewogICAgICAgICAgICAgJ25hbWUnICAgICAgICAgIDogc2VsZi5kZXNlcmlhbGl6 ZV9iYXNlc3RyaW5nLAogICAgICAgICAgICAgJ3Zpc2libGUnICAgICAgIDogc2VsZi5kZXNlcmlh bGl6ZV9ib29sLAoKZGlmZiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5NGFmNTA4YzIyYmIzNGI3 ZmE2IC1yIDQyOGU1OGZjZDMzYTlmOTM0MjkyZmNhPQpkYWM4NDBjNzU3ODNiY2Q2MiBsaWIvZ2Fs YXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rv cmllcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2hpc3Rvcmllcy5weQpAQCAtNywxMiAr NywxMSBAQAo9MjAKIGZyb20gZ2FsYXh5IGltcG9ydCBleGNlcHRpb25zCiBmcm9tIGdhbGF4eSBp bXBvcnQgbW9kZWwKLWZyb20gZ2FsYXh5Lm1vZGVsIGltcG9ydCBvcm0KPTIwCiBpbXBvcnQgYmFz ZQogaW1wb3J0IHNoYXJhYmxlCiBpbXBvcnQgaGRhcwotaW1wb3J0IGdhbGF4eS5tYW5hZ2Vycy5j b2xsZWN0aW9uc191dGlsCitpbXBvcnQgY29sbGVjdGlvbnNfdXRpbAo9MjAKIGltcG9ydCBnYWxh eHkud2ViCj0yMApAQCAtMjIsMjcgKzIxLDMxIEBACj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIEhp c3RvcnlNYW5hZ2VyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsTWFuYWdlciwgYmFzZS5QdXJnYWJs ZU1vZGVsSW50PQplcmZhY2UgKToKLSAgICAiIiIKLSAgICAiIiIKPTIwCiAgICAgbW9kZWxfY2xh c3MgPTNEIG1vZGVsLkhpc3RvcnkKICAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVsLkhp c3RvcnkuY3JlYXRlX3RpbWUsICkKICAgICBmb3JlaWduX2tleV9uYW1lID0zRCAnaGlzdG9yeScK ICAgICB1c2VyX3NoYXJlX21vZGVsID0zRCBtb2RlbC5IaXN0b3J5VXNlclNoYXJlQXNzb2NpYXRp b24KPTIwCisgICAgdGFnX2Fzc29jID0zRCBtb2RlbC5IaXN0b3J5VGFnQXNzb2NpYXRpb24KKyAg ICBhbm5vdGF0aW9uX2Fzc29jID0zRCBtb2RlbC5IaXN0b3J5QW5ub3RhdGlvbkFzc29jaWF0aW9u CisgICAgcmF0aW5nX2Fzc29jID0zRCBtb2RlbC5IaXN0b3J5UmF0aW5nQXNzb2NpYXRpb24KKwor ICAgICNUT0RPOiBpbmNvcnBvcmF0ZSBpbXAvZXhwIChvciBsaW5rIHRvKQorCiAgICAgZGVmIF9f aW5pdF9fKCBzZWxmLCBhcHAsICphcmdzLCAqKmt3YXJncyApOgotICAgICAgICAiIiIKLSAgICAg ICAgIiIiCiAgICAgICAgIHN1cGVyKCBIaXN0b3J5TWFuYWdlciwgc2VsZiApLl9faW5pdF9fKCBh cHAsICphcmdzLCAqKmt3YXJncyApCi0gICAgICAgIHNlbGYuaGRhX21nciA9M0QgaGRhcy5IREFN YW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFn ZXIoIGFwcCApCj0yMAogICAgIGRlZiBjb3B5KCBzZWxmLCB0cmFucywgaGlzdG9yeSwgdXNlciwg Kiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIENvcHkgYW5kIHJldHVybiB0aGUgZ2l2 ZW4gYGhpc3RvcnlgLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIGhpc3RvcnkuY29weSgg dGFyZ2V0X3VzZXI9M0R1c2VyLCAqKmt3YXJncyApCj0yMAogICAgIGRlZiBtb3N0X3JlY2VudCgg c2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CiAgICAgICAgICIiIgorICAgICAgICBSZXR1 cm4gdGhlIG1vc3QgcmVjZW50bHkgdXBkYXRlIGhpc3RvcnkgZm9yIHRoZSB1c2VyLgogICAgICAg ICAiIiIKICNUT0RPOiBub3JtYWxpemUgdGhpcwogICAgICAgICBpZiBub3QgdXNlcjoKQEAgLTU4 LDcgKzYxLDcgQEAKICAgICAgICAgb3JkZXJlZCBieSB1cGRhdGUgdGltZS4KICAgICAgICAgIiIi CiAgICAgICAgICMgaGFuZGxlIGRlZmF1bHQgYW5kL29yIGFub255bW91cyB1c2VyICh3aGljaCBz dGlsbCBtYXkgbm90IGhhdmUgYT0KIGhpc3RvcnkgeWV0KQotICAgICAgICBpZiBzZWxmLnVzZXJf bWdyLmlzX2Fub255bW91cyggdXNlciApOgorICAgICAgICBpZiBzZWxmLnVzZXJfbWFuYWdlci5p c19hbm9ueW1vdXMoIHVzZXIgKToKICAgICAgICAgICAgIGN1cnJlbnRfaGlzdG9yeSA9M0QgdHJh bnMuZ2V0X2hpc3RvcnkoKQogICAgICAgICAgICAgcmV0dXJuIFsgY3VycmVudF9oaXN0b3J5IF0g aWYgY3VycmVudF9oaXN0b3J5IGVsc2UgW10KPTIwCkBAIC02OSwyMCArNzIsMjEgQEAKICAgICAg ICAgVHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGlzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gaGlz dG9yeS4KICAgICAgICAgIiIiCiAgICAgICAgICMgYW5vbiB1c2VycyBhcmUgb25seSBhbGxvd2Vk IHRvIHZpZXcgdGhlaXIgY3VycmVudCBoaXN0b3J5Ci0gICAgICAgIGlmIHNlbGYudXNlcl9tZ3Iu aXNfYW5vbnltb3VzKCB1c2VyICkgYW5kIGhpc3RvcnkgPTNEPTNEIHRyYW5zLmdldD0KX2hpc3Rv cnkoKToKKyAgICAgICAgaWYgc2VsZi51c2VyX21hbmFnZXIuaXNfYW5vbnltb3VzKCB1c2VyICkg YW5kIGhpc3RvcnkgPTNEPTNEIHRyYW5zPQouZ2V0X2hpc3RvcnkoKToKICAgICAgICAgICAgIHJl dHVybiBUcnVlCiAgICAgICAgIHJldHVybiBzdXBlciggSGlzdG9yeU1hbmFnZXIsIHNlbGYgKS5p c19vd25lciggdHJhbnMsIGhpc3RvcnksIHVzZT0KciApCj0yMAogICAgICMgLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49 Ci4uLi4uIHB1cmdhYmxlCiAgICAgZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgaGlzdG9yeSwgZmx1 c2g9M0RUcnVlLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgUHVyZ2UgdGhpcyBo aXN0b3J5IGFuZCBhbGwgSERBcywgQ29sbGVjdGlvbnMsIGFuZCBEYXRhc2V0cyBpbnNpZGUgPQp0 aGlzIGhpc3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmhkYV9tZ3IuZGF0YXNldF9t Z3IuZXJyb3JfdW5sZXNzX2RhdGFzZXRfcHVyZ2VfYWxsb3dlZCggdHJhbnM9CiwgaGlzdG9yeSAp CisgICAgICAgIHNlbGYuaGRhX21hbmFnZXIuZGF0YXNldF9tYW5hZ2VyLmVycm9yX3VubGVzc19k YXRhc2V0X3B1cmdlX2FsbG93ZT0KZCggdHJhbnMsIGhpc3RvcnkgKQo9MjAKICAgICAgICAgIyBG aXJzdCBwdXJnZSBhbGwgdGhlIGRhdGFzZXRzCiAgICAgICAgIGZvciBoZGEgaW4gaGlzdG9yeS5k YXRhc2V0czoKICAgICAgICAgICAgIGlmIG5vdCBoZGEucHVyZ2VkOgotICAgICAgICAgICAgICAg IHNlbGYuaGRhX21nci5wdXJnZSggdHJhbnMsIGhkYSwgZmx1c2g9M0RUcnVlICkKKyAgICAgICAg ICAgICAgICBzZWxmLmhkYV9tYW5hZ2VyLnB1cmdlKCB0cmFucywgaGRhLCBmbHVzaD0zRFRydWUg KQo9MjAKICAgICAgICAgIyBOb3cgbWFyayB0aGUgaGlzdG9yeSBhcyBwdXJnZWQKICAgICAgICAg c3VwZXIoIEhpc3RvcnlNYW5hZ2VyLCBzZWxmICkucHVyZ2UoIHRyYW5zLCBoaXN0b3J5LCBmbHVz aD0zRGZsdXNoPQosICoqa3dhcmdzICkKQEAgLTkzLDE3ICs5NywyMCBAQAogICAgICMgLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi49Ci4uLi4uIGN1cnJlbnQKICAgICBkZWYgZ2V0X2N1cnJlbnQoIHNlbGYsIHRyYW5zICk6 CiAgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgaGlzdG9yeS4KICAgICAg ICAgIiIiCiAgICAgICAgIHJldHVybiB0cmFucy5nZXRfaGlzdG9yeSgpCj0yMAogICAgIGRlZiBz ZXRfY3VycmVudCggc2VsZiwgdHJhbnMsIGhpc3RvcnkgKToKICAgICAgICAgIiIiCisgICAgICAg IFNldCB0aGUgY3VycmVudCBoaXN0b3J5LgogICAgICAgICAiIiIKICAgICAgICAgdHJhbnMuc2V0 X2hpc3RvcnkoIGhpc3RvcnkgKQogICAgICAgICByZXR1cm4gaGlzdG9yeQo9MjAKICAgICBkZWYg c2V0X2N1cnJlbnRfYnlfaWQoIHNlbGYsIHRyYW5zLCBoaXN0b3J5X2lkICk6CiAgICAgICAgICIi IgorICAgICAgICBTZXQgdGhlIGN1cnJlbnQgaGlzdG9yeSBieSBhbiBpZC4KICAgICAgICAgIiIi CiAgICAgICAgIHJldHVybiBzZWxmLnNldF9jdXJyZW50KCB0cmFucywgc2VsZi5ieV9pZCggdHJh bnMsIGhpc3RvcnlfaWQgKSApCj0yMApAQCAtMTE3LDcgKzEyNCw3IEBACiAgICAgICAgICNUT0RP OiBpbnN0YW50aWF0ZSBoZXJlPyByZWFsbHk/CiAgICAgICAgIGhpc3Rvcnlfc2VyaWFsaXplciA9 M0QgSGlzdG9yeVNlcmlhbGl6ZXIoIHNlbGYuYXBwICkKICAgICAgICAgaGRhX3NlcmlhbGl6ZXIg PTNEIGhkYXMuSERBU2VyaWFsaXplciggc2VsZi5hcHAgKQotICAgICAgICBjb2xsZWN0aW9uX2Rp Y3RpZmllciA9M0QgZ2FsYXh5Lm1hbmFnZXJzLmNvbGxlY3Rpb25zX3V0aWwuZGljdGlmeV89CmRh dGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZQorICAgICAgICBjb2xsZWN0aW9uX2RpY3RpZmllciA9 M0QgY29sbGVjdGlvbnNfdXRpbC5kaWN0aWZ5X2RhdGFzZXRfY29sbGVjdGk9Cm9uX2luc3RhbmNl Cj0yMAogICAgICAgICBoaXN0b3J5X2RpY3Rpb25hcnkgPTNEIHt9CiAgICAgICAgIGNvbnRlbnRz X2RpY3Rpb25hcmllcyA9M0QgW10KQEAgLTE2Myw2ICsxNzAsOCBAQAogICAgICMgcmVtb3ZlIHRo aXMKICAgICBkZWYgZ2V0X3N0YXRlX2NvdW50cyggc2VsZiwgdHJhbnMsIGhpc3RvcnksIGV4Y2x1 ZGVfZGVsZXRlZD0zRFRydWUsIGV4PQpjbHVkZV9oaWRkZW49M0RGYWxzZSApOgogICAgICAgICAi IiIKKyAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBrZXllZCB0byBwb3NzaWJsZSBkYXRhc2V0 IHN0YXRlcyBhbmQgdmFsdWVkIHdpPQp0aCB0aGUgbnVtYmVyCisgICAgICAgIG9mIGRhdGFzZXRz IGluIHRoaXMgaGlzdG9yeSB0aGF0IGhhdmUgdGhvc2Ugc3RhdGVzLgogICAgICAgICAiIiIKICAg ICAgICAgI1RPRE86IHRoZSBkZWZhdWx0IGZsYWdzIGFib3ZlIG1heSBub3QgbWFrZSBhIGxvdCBv ZiBzZW5zZSAoVCxUPykKICAgICAgICAgc3RhdGVfY291bnRzID0zRCB7fQpAQCAtMTgxLDYgKzE5 MCw4IEBACiAgICAgIyByZW1vdmUgdGhpcwogICAgIGRlZiBnZXRfc3RhdGVfaWRzKCBzZWxmLCB0 cmFucywgaGlzdG9yeSApOgogICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFy eSBrZXllZCB0byBwb3NzaWJsZSBkYXRhc2V0IHN0YXRlcyBhbmQgdmFsdWVkIHdpPQp0aCBsaXN0 cworICAgICAgICBjb250YWluaW5nIHRoZSBpZHMgb2YgZWFjaCBIREEgaW4gdGhhdCBzdGF0ZS4K ICAgICAgICAgIiIiCiAgICAgICAgIHN0YXRlX2lkcyA9M0Qge30KICAgICAgICAgZm9yIHN0YXRl IGluIG1vZGVsLkRhdGFzZXQuc3RhdGVzLnZhbHVlcygpOgpAQCAtMTk1LDcgKzIwNiw4IEBACj0y MAogICAgICNUT0RPOiByZW1vdmUgdGhpcyAoaXMgc3RhdGUgdXNlZC91c2VmdWw/KQogICAgIGRl ZiBnZXRfaGlzdG9yeV9zdGF0ZSggc2VsZiwgdHJhbnMsIGhpc3RvcnkgKToKLSAgICAgICAgIiIi UmV0dXJucyB0aGUgaGlzdG9yeSBzdGF0ZSBiYXNlZCBvbiB0aGUgc3RhdGVzIG9mIHRoZSBIREFz IGl0IGNvPQpudGFpbnMuCisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBoaXN0b3J5 IHN0YXRlIGJhc2VkIG9uIHRoZSBzdGF0ZXMgb2YgdGhlIEhEQXMgaXQgY29udGE9Cmlucy4KICAg ICAgICAgIiIiCiAgICAgICAgIHN0YXRlcyA9M0QgbW9kZWwuRGF0YXNldC5zdGF0ZXMKPTIwCkBA IC0yMzcsOCArMjQ5LDggQEAKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAg ICAgICAgc3VwZXIoIEhpc3RvcnlTZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCi0g ICAgICAgIHNlbGYuaGlzdG9yeV9tZ3IgPTNEIEhpc3RvcnlNYW5hZ2VyKCBhcHAgKQotICAgICAg ICBzZWxmLmhkYV9tZ3IgPTNEIGhkYXMuSERBTWFuYWdlciggYXBwICkKKyAgICAgICAgc2VsZi5o aXN0b3J5X21hbmFnZXIgPTNEIEhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorICAgICAgICBzZWxmLmhk YV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCiAgICAgICAgIHNlbGYuaGRhX3Nl cmlhbGl6ZXIgPTNEIGhkYXMuSERBU2VyaWFsaXplciggYXBwICkKPTIwCiAgICAgICAgIHN1bW1h cnlfdmlldyA9M0QgWwpAQCAtMjkxLDE3ICszMDMsMTUgQEAKICAgICAgICAgICAgICdzaXplJyAg ICAgICAgICA6IGxhbWJkYSB0LCBpLCBrOiBpbnQoIGkuZ2V0X2Rpc2tfc2l6ZSgpICksCiAgICAg ICAgICAgICAnbmljZV9zaXplJyAgICAgOiBsYW1iZGEgdCwgaSwgazogaS5nZXRfZGlza19zaXpl KCBuaWNlX3NpemU9Cj0zRFRydWUgKSwKPTIwCi0gICAgICAgICAgICAnYW5ub3RhdGlvbicgICAg OiBzZWxmLnNlcmlhbGl6ZV9hbm5vdGF0aW9uLAotICAgICAgICAgICAgJ3RhZ3MnICAgICAgICAg IDogc2VsZi5zZXJpYWxpemVfdGFncywKICAgICAgICAgICAgICd1cmwnICAgICAgICAgICA6IGxh bWJkYSB0LCBpLCBrOiBnYWxheHkud2ViLnVybF9mb3IoICdoaXN0b3J5PQonLCBpZD0zRHQuc2Vj dXJpdHkuZW5jb2RlX2lkKCBpLmlkICkgKSwKICAgICAgICAgICAgICdjb250ZW50c191cmwnICA6 IGxhbWJkYSB0LCBpLCBrOgogICAgICAgICAgICAgICAgIGdhbGF4eS53ZWIudXJsX2ZvciggJ2hp c3RvcnlfY29udGVudHMnLCBoaXN0b3J5X2lkPTNEdC5zZWM9CnVyaXR5LmVuY29kZV9pZCggaS5p ZCApICksCiAgICAgICAgICAgICAnZW1wdHknICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogbGVu KCBpLmRhdGFzZXRzICkgPD0zRCAwLAo9MjAKICAgICAgICAgICAgICdoZGFzJyAgICAgICAgICA6 IGxhbWJkYSB0LCBpLCBrOiBbIHQuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuPQppZCApIGZvciBo ZGEgaW4gaS5kYXRhc2V0cyBdLAotICAgICAgICAgICAgJ3N0YXRlJyAgICAgICAgIDogbGFtYmRh IHQsIGksIGs6IHNlbGYuaGlzdG9yeV9tZ3IuZ2V0X2hpc3Rvcnk9Cl9zdGF0ZSggdCwgaSApLAot ICAgICAgICAgICAgJ3N0YXRlX2RldGFpbHMnIDogbGFtYmRhIHQsIGksIGs6IHNlbGYuaGlzdG9y eV9tZ3IuZ2V0X3N0YXRlX2M9Cm91bnRzKCB0LCBpICksCi0gICAgICAgICAgICAnc3RhdGVfaWRz JyAgICAgOiBsYW1iZGEgdCwgaSwgazogc2VsZi5oaXN0b3J5X21nci5nZXRfc3RhdGVfaT0KZHMo IHQsIGkgKSwKKyAgICAgICAgICAgICdzdGF0ZScgICAgICAgICA6IGxhbWJkYSB0LCBpLCBrOiBz ZWxmLmhpc3RvcnlfbWFuYWdlci5nZXRfaGlzPQp0b3J5X3N0YXRlKCB0LCBpICksCisgICAgICAg ICAgICAnc3RhdGVfZGV0YWlscycgOiBsYW1iZGEgdCwgaSwgazogc2VsZi5oaXN0b3J5X21hbmFn ZXIuZ2V0X3N0YT0KdGVfY291bnRzKCB0LCBpICksCisgICAgICAgICAgICAnc3RhdGVfaWRzJyAg ICAgOiBsYW1iZGEgdCwgaSwgazogc2VsZi5oaXN0b3J5X21hbmFnZXIuZ2V0X3N0YT0KdGVfaWRz KCB0LCBpICksCiAgICAgICAgICAgICAnY29udGVudHMnICAgICAgOiBzZWxmLnNlcmlhbGl6ZV9j b250ZW50cwogICAgICAgICB9KQo9MjAKQEAgLTMzMyw3ICszNDMsNyBAQAo9MjAKICAgICBkZWYg X19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlciggSGlzdG9yeURlc2VyaWFsaXpl ciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAgICAgICBzZWxmLmhpc3RvcnlfbWdyID0zRCBI aXN0b3J5TWFuYWdlciggYXBwICkKKyAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIEhp c3RvcnlNYW5hZ2VyKCBhcHAgKQo9MjAKICAgICAjYXNzdW1lczogaW5jb21pbmcgZnJvbSBqc29u LmxvYWRzIGFuZCBzYW5pdGl6ZWQKICAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToK QEAgLTM0MSwxMCArMzUxLDYgQEAKICAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZSh7 CiAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Jhc2VzdHJp bmcsCiAgICAgICAgICAgICAnZ2Vub21lX2J1aWxkJyAgOiBzZWxmLmRlc2VyaWFsaXplX2dlbm9t ZV9idWlsZCwKLSAgICAgICAgICAgICMgbWl4aW46IGFubm90YXRhYmxlCi0gICAgICAgICAgICAn YW5ub3RhdGlvbicgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Fubm90YXRpb24sCi0gICAgICAgICAg ICAjIG1peGluOiB0YWdnYWJsZQotICAgICAgICAgICAgJ3RhZ3MnICAgICAgICAgIDogc2VsZi5k ZXNlcmlhbGl6ZV90YWdzLAo9MjAKICAgICAgICAgICAgICMgbWl4aW46IGRlbGV0YWJsZQogICAg ICAgICAgICAgJ2RlbGV0ZWQnICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9ib29sLAoKZGlmZiAt ciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5NGFmNTA4YzIyYmIzNGI3ZmE2IC1yIDQyOGU1OGZjZDMz YTlmOTM0MjkyZmNhPQpkYWM4NDBjNzU3ODNiY2Q2MiBsaWIvZ2FsYXh5L21hbmFnZXJzL3BhZ2Vz LnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9wYWdlcy5weQpAQCAt MCwwICsxLDg5IEBACisiIiIKK01hbmFnZXIgYW5kIFNlcmlhbGl6ZXJzIGZvciBQYWdlcy4KKwor UGFnZXMgYXJlIG1hcmt1cCBjcmVhdGVkIGFuZCBzYXZlZCBieSB1c2VycyB0aGF0IGNhbiBjb250 YWluIEdhbGF4eSBvYmplY3RzCisoc3VjaCBhcyBkYXRhc2V0cykgYW5kIGFyZSBvZnRlbiB1c2Vk IHRvIGRlc2NyaWJlIG9yIHByZXNlbnQgYW4gYW5hbHlzaXMKK2Zyb20gd2l0aGluIEdhbGF4eS4K KyIiIgorCitmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucworZnJvbSBnYWxheHkgaW1wb3J0 IG1vZGVsCisKK2ltcG9ydCBiYXNlCitpbXBvcnQgc2hhcmFibGUKKworaW1wb3J0IGdhbGF4eS53 ZWIKKworaW1wb3J0IGxvZ2dpbmcKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9f ICkKKworCisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAorY2xhc3MgUGFnZU1hbmFnZXIoIHNoYXJhYmxlLlNoYXJhYmxl TW9kZWxNYW5hZ2VyICk6CisgICAgIiIiCisgICAgIiIiCisKKyAgICBtb2RlbF9jbGFzcyA9M0Qg bW9kZWwuUGFnZQorICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuUGFnZS5jcmVhdGVf dGltZSwgKQorICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdwYWdlJworICAgIHVzZXJfc2hhcmVf bW9kZWwgPTNEIG1vZGVsLlBhZ2VVc2VyU2hhcmVBc3NvY2lhdGlvbgorCisgICAgdGFnX2Fzc29j ID0zRCBtb2RlbC5QYWdlVGFnQXNzb2NpYXRpb24KKyAgICBhbm5vdGF0aW9uX2Fzc29jID0zRCBt b2RlbC5QYWdlQW5ub3RhdGlvbkFzc29jaWF0aW9uCisgICAgcmF0aW5nX2Fzc29jID0zRCBtb2Rl bC5QYWdlUmF0aW5nQXNzb2NpYXRpb24KKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwLCAq YXJncywgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICBzdXBl ciggUGFnZU1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwLCAqYXJncywgKiprd2FyZ3MgKQor CisgICAgZGVmIGNvcHkoIHNlbGYsIHRyYW5zLCBwYWdlLCB1c2VyLCAqKmt3YXJncyApOgorICAg ICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworCisjIyA9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0QKK2Ns YXNzIFBhZ2VTZXJpYWxpemVyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsU2VyaWFsaXplciApOgor ICAgICIiIgorICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3Igc2VyaWFsaXppbmcgcGFn ZXMgaW50byBkaWN0aW9uYXJpZXMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oIHNlbGYs IGFwcCApOgorICAgICAgICBzdXBlciggUGFnZVNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXygg YXBwICkKKyAgICAgICAgc2VsZi5wYWdlX21hbmFnZXIgPTNEIFBhZ2VNYW5hZ2VyKCBhcHAgKQor CisgICAgICAgIHN1bW1hcnlfdmlldyA9M0QgWworICAgICAgICBdCisgICAgICAgICMgaW4gdGhl IFBhZ2VzJyBjYXNlLCBlYWNoIG9mIHRoZXNlIHZpZXdzIGluY2x1ZGVzIHRoZSBrZXlzIGZyb20g dD0KaGUgcHJldmlvdXMKKyAgICAgICAgZGV0YWlsZWRfdmlldyA9M0Qgc3VtbWFyeV92aWV3ICsg WworICAgICAgICBdCisgICAgICAgIHNlbGYuc2VyaWFsaXphYmxlX2tleXMgPTNEIGRldGFpbGVk X3ZpZXcgKyBbXQorICAgICAgICBzZWxmLnZpZXdzID0zRCB7CisgICAgICAgICAgICAnc3VtbWFy eScgICA6IHN1bW1hcnlfdmlldywKKyAgICAgICAgICAgICdkZXRhaWxlZCcgIDogZGV0YWlsZWRf dmlldworICAgICAgICB9CisgICAgICAgIHNlbGYuZGVmYXVsdF92aWV3ID0zRCAnc3VtbWFyeScK KworICAgIGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgc3VwZXIoIFBhZ2VT ZXJpYWxpemVyLCBzZWxmICkuYWRkX3NlcmlhbGl6ZXJzKCkKKyAgICAgICAgc2VsZi5zZXJpYWxp emVycy51cGRhdGUoeworICAgICAgICB9KQorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBQYWdlRGVz ZXJpYWxpemVyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsRGVzZXJpYWxpemVyICk6CisgICAgIiIi CisgICAgSW50ZXJmYWNlL3NlcnZpY2Ugb2JqZWN0IGZvciB2YWxpZGF0aW5nIGFuZCBkZXNlcmlh bGl6aW5nIGRpY3Rpb25hcmllcworICAgIGludG8gcGFnZXMuCisgICAgIiIiCisKKyAgICBkZWYg X19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBlciggUGFnZURlc2VyaWFsaXplciwg c2VsZiApLl9faW5pdF9fKCBhcHAgKQorICAgICAgICBzZWxmLnBhZ2VfbWFuYWdlciA9M0QgUGFn ZU1hbmFnZXIoIGFwcCApCisKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAg ICAgICAgc3VwZXIoIFBhZ2VEZXNlcmlhbGl6ZXIsIHNlbGYgKS5hZGRfZGVzZXJpYWxpemVycygp CisgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycy51cGRhdGUoeworICAgICAgICB9KQorICAgICAg ICBzZWxmLmRlc2VyaWFsaXphYmxlX2tleXMgPTNEIHNlbGYuZGVzZXJpYWxpemVycy5rZXlzKCkK CmRpZmYgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTRhZjUwOGMyMmJiMzRiN2ZhNiAtciA0Mjhl NThmY2QzM2E5ZjkzNDI5MmZjYT0KZGFjODQwYzc1NzgzYmNkNjIgbGliL2dhbGF4eS9tYW5hZ2Vy cy9yYXRhYmxlLnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9yYXRh YmxlLnB5CkBAIC0wLDAgKzEsNDcgQEAKKyIiIgorTWl4aW5zIGZvciBSYXRhYmxlIG1vZGVsIG1h bmFnZXJzIGFuZCBzZXJpYWxpemVycy4KKyIiIgorCitmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0 aW9ucworZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCisKK2ltcG9ydCBsb2dnaW5nCitsb2cgPTNE IGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIFJh dGFibGVNYW5hZ2VySW50ZXJmYWNlKCBvYmplY3QgKToKKyAgICByYXRpbmdfYXNzb2MgPTNEIE5v bmUKKworICAgICNUT0RPOiBtb3N0IG9mIHRoaXMgc2VlbXMgdG8gYmUgY292ZXJlZCBieSBpdGVt X2F0dHJzLlVzZXNJdGVtUmF0aW5ncworCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBSYXRhYmxlU2Vy aWFsaXplciggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6Cisg ICAgICAgIHNlbGYuc2VyaWFsaXplcnNbICd1c2VyX3JhdGluZycgXSA9M0Qgc2VsZi5zZXJpYWxp emVfdXNlcl9yYXRpbmcKKyAgICAgICAgc2VsZi5zZXJpYWxpemVyc1sgJ2NvbW11bml0eV9yYXRp bmcnIF0gPTNEIHNlbGYuc2VyaWFsaXplX2NvbW11bml0PQp5X3JhdGluZworCisgICAgZGVmIHNl cmlhbGl6ZV91c2VyX3JhdGluZyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSApOgorICAgICAgICAi IiIKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXJpYWxpemVfY29tbXVu aXR5X3JhdGluZyggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSApOgorICAgICAgICAiIiIKKyAgICAg ICAgIiIiCisgICAgICAgIHBhc3MKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIFJhdGFibGVEZXNlcmlh bGl6ZXIoIG9iamVjdCApOgorICAgIHBhc3MKKworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycygg c2VsZiApOgorICAgICAgICBwYXNzCisgICAgICAgICNzZWxmLmRlc2VyaWFsaXplcnNbICd1c2Vy X3JhdGluZycgXSA9M0Qgc2VsZi5kZXNlcmlhbGl6ZV9yYXRpbmcKKworICAgICNkZWYgZGVzZXJp YWxpemVfcmF0aW5nKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAjICAgIHZh bCA9M0Qgc2VsZi52YWxpZGF0ZS5pbnRfcmFuZ2UoIGtleSwgdmFsLCAwLCA1ICkKKyAgICAjICAg IHJldHVybiBzZWxmLnNldF9yYXRpbmcuLi4oIHRyYW5zLCBpdGVtLCB2YWwsIHVzZXI9M0R0cmFu cy51c2VyICkKKwoKZGlmZiAtciAyZTk5MGNhZWZjOTQzZWIyYjFkNGE5NGFmNTA4YzIyYmIzNGI3 ZmE2IC1yIDQyOGU1OGZjZDMzYTlmOTM0MjkyZmNhPQpkYWM4NDBjNzU3ODNiY2Q2MiBsaWIvZ2Fs YXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFi bGUucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9zaGFyYWJsZS5weQpAQCAtMSwxMCArMSwy MyBAQAogIiIiCitTdXBlcmNsYXNzIE1hbmFnZXIgYW5kIFNlcmlhbGl6ZXJzIGZvciBTaGFyYWJs ZSBvYmplY3RzLgorCitBIHNoYXJhYmxlIEdhbGF4eSBvYmplY3Q6CisgICAgaGFzIGFuIG93bmVy L2NyZWF0b3IgVXNlcgorICAgIGlzIHNoYXJhYmxlIHdpdGggb3RoZXIsIHNwZWNpZmljIFVzZXJz CisgICAgaXMgaW1wb3J0YWJsZSAoY29weWFibGUpIGJ5IHVzZXJzIHRoYXQgaGF2ZSBhY2Nlc3MK KyAgICBoYXMgYSBzbHVnIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgbGluayB0byB2aWV3IHRoZSBy ZXNvdXJjZQorICAgIGNhbiBiZSBwdWJsaXNoZWQgZWZmZWN0aXZlbHkgbWFraW5nIGl0IGF2YWls YWJsZSB0byBhbGwgb3RoZXIgVXNlcnMKKyAgICBjYW4gYmUgcmF0ZWQKICIiIgorCiBpbXBvcnQg cmUKPTIwCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwo9MjAKIGltcG9ydCBiYXNlCitp bXBvcnQgdGFnZ2FibGUKK2ltcG9ydCBhbm5vdGF0YWJsZQoraW1wb3J0IHJhdGFibGUKIGltcG9y dCB1c2Vycwo9MjAKIGltcG9ydCBsb2dnaW5nCkBAIC0xMiwxNiArMjUsOCBAQAo9MjAKPTIwCiAj ID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRAotY2xhc3MgU2hhcmFibGVNb2RlbE1hbmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2Vy LCBiYXNlLk93bmFibGVNb2RlbEludGVyZmFjZSw9CiBiYXNlLkFjY2Vzc2libGVNb2RlbEludGVy ZmFjZSApOgotICAgICIiIgotICAgIFN1cGVyY2xhc3MgZm9yIG1hbmFnZXJzIG9mIGEgbW9kZWwg dGhhdDoKLSAgICAgICAgaGFzIGFuIG93bmVyL2NyZWF0b3IgVXNlcgotICAgICAgICBpcyBzaGFy YWJsZSB3aXRoIG90aGVyLCBzcGVjaWZpYyBVc2VycwotICAgICAgICBpcyBpbXBvcnRhYmxlIChj b3B5YWJsZSkgYnkgdXNlcnMgdGhhdCBoYXZlIGFjY2VzcwotICAgICAgICBoYXMgYSBzbHVnIHdo aWNoIGNhbiBiZSB1c2VkIGFzIGEgbGluayB0byB2aWV3IHRoZSByZXNvdXJjZQotICAgICAgICBj YW4gYmUgcHVibGlzaGVkIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYWxsIG90 aGVyIFVzZXJzCi0gICAgICAgIGNhbiBiZSByYXRlZAotICAgICIiIgorY2xhc3MgU2hhcmFibGVN b2RlbE1hbmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2VyLCBiYXNlLk93bmFibGVNb2RlbEludGVyZmFj ZSw9CiBiYXNlLkFjY2Vzc2libGVNb2RlbEludGVyZmFjZSwKKyAgICAgICAgdGFnZ2FibGUuVGFn Z2FibGVNYW5hZ2VySW50ZXJmYWNlLCBhbm5vdGF0YWJsZS5Bbm5vdGF0YWJsZU1hbmFnZXJJPQpu dGVyZmFjZSwgcmF0YWJsZS5SYXRhYmxlTWFuYWdlckludGVyZmFjZSApOgogICAgICMgZS5nLiBo aXN0b3JpZXMsIHBhZ2VzLCBzdG9yZWQgd29ya2Zsb3dzLCB2aXN1YWxpemF0aW9ucwo9MjAKICAg ICAjIHRoZSBtb2RlbCB1c2VkIGZvciBVc2VyU2hhcmVBc3NvY2lhdGlvbnMgd2l0aCB0aGlzIG1v ZGVsCkBAIC0zMCw3ICszNSw3IEBACiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAg ICAgICAgc3VwZXIoIFNoYXJhYmxlTW9kZWxNYW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCAp CiAgICAgICAgICMgdXNlciBtYW5hZ2VyIGlzIG5lZWRlZCB0byBjaGVjayBhY2Nlc3Mvb3duZXJz aGlwL2FkbWluCi0gICAgICAgIHNlbGYudXNlcl9tZ3IgPTNEIHVzZXJzLlVzZXJNYW5hZ2VyKCBh cHAgKQorICAgICAgICBzZWxmLnVzZXJfbWFuYWdlciA9M0QgdXNlcnMuVXNlck1hbmFnZXIoIGFw cCApCj0yMAogICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGhhcyBhIHVzZXIKICAgICBkZWYgX3F1 ZXJ5X2J5X3VzZXIoIHNlbGYsIHRyYW5zLCB1c2VyLCBmaWx0ZXJzPTNETm9uZSwgKiprd2FyZ3Mg KToKQEAgLTU1LDExICs2MCwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIHRydWUg aWYgdGhpcyBzaGFyYWJsZSBiZWxvbmdzIHRvIGB1c2VyYCAob3IgYHVzZXJgIGlzIGFuIGFkPQpt aW4pLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi51c2VyX21nci5pc19hbm9ueW1vdXMo IHVzZXIgKToKKyAgICAgICAgaWYgc2VsZi51c2VyX21hbmFnZXIuaXNfYW5vbnltb3VzKCB1c2Vy ICk6CiAgICAgICAgICAgICAjIG5vdGU6IHRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBpbiB0 aGUgY2FzZSBvZiBhbm9uIHVzZXJzID0KYW5kIHNlc3Npb24uY3VycmVudF9oaXN0b3J5CiAgICAg ICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyAuLi4gZWZmZWN0aXZlbHkgYSBnb29kIGZp dCB0byBoYXZlIHRoaXMgaGVyZSwgYnV0IG5vdCBzZW1hbnRpY2FsPQpseQotICAgICAgICBpZiBz ZWxmLnVzZXJfbWdyLmlzX2FkbWluKCB0cmFucywgdXNlciApOgorICAgICAgICBpZiBzZWxmLnVz ZXJfbWFuYWdlci5pc19hZG1pbiggdHJhbnMsIHVzZXIgKToKICAgICAgICAgICAgIHJldHVybiBU cnVlCiAgICAgICAgIHJldHVybiBpdGVtLnVzZXIgPTNEPTNEIHVzZXIKPTIwCkBAIC03NCw3ICs3 OSw3IEBACiAgICAgICAgICMgbm90ZTogb3duZXJzIGFsd2F5cyBoYXZlIGFjY2VzcyAtIGNoZWNr aW5nIGZvciBhY2Nlc3NpYmxlIGltcGxpYz0KaXRseSBjaGVja3MgZm9yIG93bmVyc2hpcAogICAg ICAgICBpZiBzZWxmLmlzX293bmVyKCB0cmFucywgaXRlbSwgdXNlciApOgogICAgICAgICAgICAg cmV0dXJuIFRydWUKLSAgICAgICAgaWYgc2VsZi51c2VyX21nci5pc19hbm9ueW1vdXMoIHVzZXIg KToKKyAgICAgICAgaWYgc2VsZi51c2VyX21hbmFnZXIuaXNfYW5vbnltb3VzKCB1c2VyICk6CiAg ICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgdXNlciBpbiBpdGVtLnVzZXJzX3No YXJlZF93aXRoX2RvdF91c2VyczoKICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC0zMzMsOCAr MzM4LDE1IEBACj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFzcyBTaGFyYWJsZU1vZGVsU2VyaWFs aXplciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIgKToKLSAgICBwYXNzCitjbGFzcyBTaGFyYWJsZU1v ZGVsU2VyaWFsaXplciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIsCisgICAgICAgIHRhZ2dhYmxlLlRh Z2dhYmxlU2VyaWFsaXplciwgYW5ub3RhdGFibGUuQW5ub3RhdGFibGVTZXJpYWxpemVyLCByYT0K dGFibGUuUmF0YWJsZVNlcmlhbGl6ZXIgKToKKyNUT0RPOiBzdHViCisKKyAgICBkZWYgYWRkX3Nl cmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgIHN1cGVyKCBTaGFyYWJsZU1vZGVsU2VyaWFsaXpl ciwgc2VsZiApLmFkZF9zZXJpYWxpemVycygpCisgICAgICAgIHRhZ2dhYmxlLlRhZ2dhYmxlU2Vy aWFsaXplci5hZGRfc2VyaWFsaXplcnMoIHNlbGYgKQorICAgICAgICBhbm5vdGF0YWJsZS5Bbm5v dGF0YWJsZVNlcmlhbGl6ZXIuYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICkKKyAgICAgICAgcmF0YWJs ZS5SYXRhYmxlU2VyaWFsaXplci5hZGRfc2VyaWFsaXplcnMoIHNlbGYgKQo9MjAKICAgICAjIHRo ZSBvbmx5IG9uZXMgdGhhdCBuZWVkcyBhbnkgZm5zOgogICAgICMgICB1c2VyL3VzZXJfaWQKQEAg LTM1MCwyNCArMzYyLDMyIEBACj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFzcyBTaGFyYWJsZU1v ZGVsRGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyICk6CitjbGFzcyBTaGFyYWJs ZU1vZGVsRGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyLAorICAgICAgICB0YWdn YWJsZS5UYWdnYWJsZURlc2VyaWFsaXplciwgYW5ub3RhdGFibGUuQW5ub3RhdGFibGVEZXNlcmlh bGl6ZXI9CiwgcmF0YWJsZS5SYXRhYmxlRGVzZXJpYWxpemVyICk6CisjVE9ETzogc3R1Ygo9MjAK LSAgICBkZWYgZGVzZXJpYWxpemVfcHVibGlzaGVkKCBzZWxmLCB0cmFucywgaXRlbSwgdmFsICk6 Ci0gICAgICAgICIiIgotICAgICAgICAiIiIKLSAgICAgICAgI1RPRE86IGNhbGwgbWFuYWdlci5w dWJsaXNoL3VucHVibGlzaAotICAgICAgICBwYXNzCisgICAgZGVmIGFkZF9kZXNlcmlhbGl6ZXJz KCBzZWxmICk6CisgICAgICAgIHN1cGVyKCBTaGFyYWJsZU1vZGVsRGVzZXJpYWxpemVyLCBzZWxm ICkuYWRkX2Rlc2VyaWFsaXplcnMoKQorICAgICAgICB0YWdnYWJsZS5UYWdnYWJsZURlc2VyaWFs aXplci5hZGRfZGVzZXJpYWxpemVycyggc2VsZiApCisgICAgICAgIGFubm90YXRhYmxlLkFubm90 YXRhYmxlRGVzZXJpYWxpemVyLmFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICkKKyAgICAgICAgcmF0 YWJsZS5SYXRhYmxlRGVzZXJpYWxpemVyLmFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICkKPTIwCi0g ICAgZGVmIGRlc2VyaWFsaXplX2ltcG9ydGFibGUoIHNlbGYsIHRyYW5zLCBpdGVtLCB2YWwgKToK LSAgICAgICAgIiIiCi0gICAgICAgICIiIgotICAgICAgICAjVE9ETzogY2FsbCBtYW5hZ2VyLm1h a2VfaW1wb3J0YWJsZS9ub25faW1wb3J0YWJsZQotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZGVz ZXJpYWxpemVfc2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIHZhbCApOgotICAgICAgICAiIiIKLSAg ICAgICAgIiIiCi0gICAgICAgICNUT0RPOiBjYWxsIG1hbmFnZXIuc2V0X3NsdWcKLSAgICAgICAg cGFzcworICAgICNkZWYgZGVzZXJpYWxpemVfcHVibGlzaGVkKCBzZWxmLCB0cmFucywgaXRlbSwg dmFsICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgICIiIgorICAgICMgICAgI1RPRE86IGNhbGwg bWFuYWdlci5wdWJsaXNoL3VucHVibGlzaAorICAgICMgICAgcGFzcworICAgICMKKyAgICAjZGVm IGRlc2VyaWFsaXplX2ltcG9ydGFibGUoIHNlbGYsIHRyYW5zLCBpdGVtLCB2YWwgKToKKyAgICAj ICAgICIiIgorICAgICMgICAgIiIiCisgICAgIyAgICAjVE9ETzogY2FsbCBtYW5hZ2VyLm1ha2Vf aW1wb3J0YWJsZS9ub25faW1wb3J0YWJsZQorICAgICMgICAgcGFzcworICAgICMKKyAgICAjZGVm IGRlc2VyaWFsaXplX3NsdWcoIHNlbGYsIHRyYW5zLCBpdGVtLCB2YWwgKToKKyAgICAjICAgICIi IgorICAgICMgICAgIiIiCisgICAgIyAgICAjVE9ETzogY2FsbCBtYW5hZ2VyLnNldF9zbHVnCisg ICAgIyAgICBwYXNzCj0yMAogICAgICNkZWYgZGVzZXJpYWxpemVfdXNlcl9zaGFyZXMoKToKCmRp ZmYgLXIgMmU5OTBjYWVmYzk0M2ViMmIxZDRhOTRhZjUwOGMyMmJiMzRiN2ZhNiAtciA0MjhlNThm Y2QzM2E5ZjkzNDI5MmZjYT0KZGFjODQwYzc1NzgzYmNkNjIgbGliL2dhbGF4eS9tYW5hZ2Vycy90 YWdnYWJsZS5weQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvdGFnZ2Fi bGUucHkKQEAgLTAsMCArMSw2NSBAQAorIiIiCitNaXhpbnMgZm9yIFRhZ2dhYmxlIG1vZGVsIG1h bmFnZXJzIGFuZCBzZXJpYWxpemVycy4KKyIiIgorCitmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0 aW9ucworZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCisKK2ltcG9ydCBsb2dnaW5nCitsb2cgPTNE IGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIFRh Z2dhYmxlTWFuYWdlckludGVyZmFjZSggb2JqZWN0ICk6CisgICAgdGFnX2Fzc29jID0zRCBOb25l CisKKyAgICAjVE9ETzogbW9zdCBvZiB0aGlzIGNhbiBiZSBkb25lIGJ5IGRlbGVnYXRpbmcgdG8g dGhlIFRhZ01hbmFnZXI/CisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIFRhZ2dhYmxlU2VyaWFsaXpl ciggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAg IHNlbGYuc2VyaWFsaXplcnNbICd0YWdzJyBdID0zRCBzZWxmLnNlcmlhbGl6ZV90YWdzCisKKyAg ICBkZWYgc2VyaWFsaXplX3RhZ3MoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAgICAg IiIiCisgICAgICAgIFJldHVybiB0YWdzIGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICAi IiIKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoIGl0ZW0sICd0YWdzJyApOgorICAgICAgICAgICAg cmV0dXJuIE5vbmUKKworICAgICAgICB0YWdzX3N0cl9saXN0ID0zRCBbXQorICAgICAgICBmb3Ig dGFnIGluIGl0ZW0udGFnczoKKyAgICAgICAgICAgIHRhZ19zdHIgPTNEIHRhZy51c2VyX3RuYW1l CisgICAgICAgICAgICBpZiB0YWcudmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg dGFnX3N0ciArPTNEICI6IiArIHRhZy51c2VyX3ZhbHVlCisgICAgICAgICAgICB0YWdzX3N0cl9s aXN0LmFwcGVuZCggdGFnX3N0ciApCisgICAgICAgIHJldHVybiB0YWdzX3N0cl9saXN0CisKKwor IyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0QKK2NsYXNzIFRhZ2dhYmxlRGVzZXJpYWxpemVyKCBvYmplY3QgKToKKworICAg IGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBzZWxmLmRlc2VyaWFsaXpl cnNbICd0YWdzJyBdID0zRCBzZWxmLmRlc2VyaWFsaXplX3RhZ3MKKworICAgIGRlZiBkZXNlcmlh bGl6ZV90YWdzKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisg ICAgICAgIE1ha2Ugc3VyZSBgdmFsYCBpcyBhIHZhbGlkIGxpc3Qgb2YgdGFnIHN0cmluZ3MgYW5k IGFzc2lnbiB0aGVtLgorCisgICAgICAgIE5vdGU6IHRoaXMgd2lsbCBlcmFzZSBhbnkgcHJldmlv dXMgdGFncy4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld190YWdzX2xpc3QgPTNEIHNlbGYudmFs aWRhdGUuYmFzZXN0cmluZ19saXN0KCBrZXksIHZhbCApCisgICAgICAgICNUT0RPOiBoYXZlIHRv IGFzc3VtZSB0cmFucy51c2VyIGhlcmUuLi4KKyAgICAgICAgdXNlciA9M0QgdHJhbnMudXNlcgor ICAgICAgICAjVE9ETzogZHVwZWQgZnJvbSB0YWdzIG1hbmFnZXIgLSBkZS1kdXBlIHdoZW4gbW92 ZWQgdG8gdGFnZ2FibGUgbWk9CnhpbgorICAgICAgICB0YWdfaGFuZGxlciA9M0QgdHJhbnMuYXBw LnRhZ19oYW5kbGVyCisgICAgICAgIHRhZ19oYW5kbGVyLmRlbGV0ZV9pdGVtX3RhZ3MoIHVzZXIs IGl0ZW0gKQorICAgICAgICBuZXdfdGFnc19zdHIgPTNEICcsJy5qb2luKCBuZXdfdGFnc19saXN0 ICkKKyAgICAgICAgdGFnX2hhbmRsZXIuYXBwbHlfaXRlbV90YWdzKCB1c2VyLCBpdGVtLCB1bmlj b2RlKCBuZXdfdGFnc19zdHIuZW5jPQpvZGUoICd1dGYtOCcgKSwgJ3V0Zi04JyApICkKKyAgICAg ICAgI3RyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorCisjVE9ETzohISBkb2VzIHRoZSBjcmVhdGlv biBvZiBuZXdfdGFnc19saXN0IG1lYW4gdGhlcmUgYXJlIG5vdyBtb3JlIGFuZCBtbz0KcmUgdW51 c2VkIHRhZyByb3dzIGluIHRoZSBkYj8KKyAgICAgICAgcmV0dXJuIGl0ZW0udGFncworCgpkaWZm IC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0YWY1MDhjMjJiYjM0YjdmYTYgLXIgNDI4ZTU4ZmNk MzNhOWY5MzQyOTJmY2E9CmRhYzg0MGM3NTc4M2JjZDYyIGxpYi9nYWxheHkvbWFuYWdlcnMvdXNl cnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy91c2Vycy5weQorKysgYi9saWIvZ2FsYXh5 L21hbmFnZXJzL3VzZXJzLnB5CkBAIC0xLDQgKzEsNSBAQAogIiIiCitNYW5hZ2VyIGFuZCBTZXJp YWxpemVyIGZvciBVc2Vycy4KICIiIgo9MjAKIGltcG9ydCBwa2dfcmVzb3VyY2VzCkBAIC0xNyw4 ICsxOCw2IEBACj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKIGNsYXNzIFVzZXJNYW5hZ2VyKCBiYXNlLk1vZGVs TWFuYWdlciApOgotICAgICIiIgotICAgICIiIgogICAgIG1vZGVsX2NsYXNzID0zRCBtb2RlbC5V c2VyCiAgICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2RlbC5Vc2VyLmNyZWF0ZV90aW1lLCAp CiAgICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgJ3VzZXInCkBAIC0yNiw5ICsyNSwxMiBAQAogICAg ICNUT0RPOiB0aGVyZSBpcyBxdWl0ZSBhIGJpdCBvZiBmdW5jdGlvbmFsaXR5IGFyb3VuZCB0aGUg dXNlciAoYXV0aGVudGk9CmNhdGlvbiwgcGVybWlzc2lvbnMsIHF1b3RhcywgZ3JvdXBzL3JvbGVz KQogICAgICMgICBtb3N0IG9mIHdoaWNoIGl0IG1heSBiZSB1bm5lY2Nlc3NhcnkgdG8gaGF2ZSBo ZXJlCj0yMAorICAgICNUT0RPOiBpbmNvcnAgUHJvdmlkZXNVc2VyQ29udGV4dAogICAgICNUT0RP OiBpbmNvcnAgQmFzZUFQSUNvbnRyb2xsZXIudmFsaWRhdGVfaW5fdXNlcnNfYW5kX2dyb3Vwcwog ICAgICNUT0RPOiBpbmNvcnAgQ3JlYXRlc1VzZXJzTWl4aW4KICAgICAjVE9ETzogaW5jb3JwIENy ZWF0ZXNBcGlLZXlzTWl4aW4KKyAgICAjVE9ETzogaW5jb3Jwb3JhdGUgc2VjdXJpdHkvdmFsaWRh dGVfdXNlcl9pbnB1dC5weQorICAgICNUT0RPOiBpbmNvcnBvcmF0ZSBVc2VzRm9ybURlZmluaXRp b25zTWl4aW4/Cj0yMAogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgog ICAgICAgICAiIiIKQEAgLTY2LDggKzY4LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXBwLnNlY3Vy aXR5X2FnZW50LnVzZXJfc2V0X2RlZmF1bHRfcGVybWlzc2lvbnMoIHVzZXIsIGRlPQpmYXVsdF9h Y2Nlc3NfcHJpdmF0ZT0zRHBlcm1pc3Npb25zICkKICAgICAgICAgcmV0dXJuIHVzZXIKPTIwCi0g ICAgI1RPRE86IGluY29ycG9yYXRlIHNlY3VyaXR5L3ZhbGlkYXRlX3VzZXJfaW5wdXQucHkKLQog ICAgIGRlZiBfZXJyb3Jfb25fZHVwbGljYXRlX2VtYWlsKCBzZWxmLCB0cmFucywgZW1haWwgKToK ICAgICAgICAgIiIiCiAgICAgICAgIENoZWNrIGZvciBhIGR1cGxpY2F0ZSBlbWFpbCBhbmQgcmFp c2UgaWYgZm91bmQuCkBAIC04MSw2ICs4MSw3IEBACiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0g ZmlsdGVycwogICAgIGRlZiBieV9lbWFpbCggc2VsZiwgdHJhbnMsIGVtYWlsLCBmaWx0ZXJzPTNE Tm9uZSwgKiprd2FyZ3MgKToKICAgICAgICAgIiIiCisgICAgICAgIEZpbmQgYSB1c2VyIGJ5IHRo ZWlyIGVtYWlsLgogICAgICAgICAiIiIKICAgICAgICAgZmlsdGVycyA9M0Qgc2VsZi5fbXVuZ2Vf ZmlsdGVycyggc2VsZi5tb2RlbF9jbGFzcy5lbWFpbCA9M0Q9M0QgZW1hPQppbCwgZmlsdGVycyAp CiAgICAgICAgIHRyeToKQEAgLTkxLDYgKzkyLDcgQEAKPTIwCiAgICAgZGVmIGJ5X2VtYWlsX2xp a2UoIHNlbGYsIHRyYW5zLCBlbWFpbF93aXRoX3dpbGRjYXJkcywgZmlsdGVycz0zRE5vbmUsID0K b3JkZXJfYnk9M0ROb25lLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKKyAgICAgICAgRmluZCBh IHVzZXIgc2VhcmNoaW5nIHdpdGggU1FMIHdpbGRjYXJkcy4KICAgICAgICAgIiIiCiAgICAgICAg IGZpbHRlcnMgPTNEIHNlbGYuX211bmdlX2ZpbHRlcnMoIHNlbGYubW9kZWxfY2xhc3MuZW1haWwu bGlrZSggZW1haT0KbF93aXRoX3dpbGRjYXJkcyApLCBmaWx0ZXJzICkKICAgICAgICAgb3JkZXJf YnkgPTNEIG9yZGVyX2J5IG9yICggbW9kZWwuVXNlci5lbWFpbCwgKQpAQCAtMTY2LDEyICsxNjgs MTYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuaXNfYWRtaW4oIHRyYW5zLCB0cmFucy51c2VyICkK PTIwCiAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gPwotICAgICNkZWYgdGFncyggc2VsZiwgdHJh bnMsICoqa3dhcmdzICk6Ci0gICAgIyAgICAjIHJldHVybiBhbGwgdGFncyBmcm9tIHRoaXMgdXNl cgorICAgICNkZWYgdGFncyggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgIyAg ICAiIiIKKyAgICAjICAgIFJldHVybiBhbGwgdGFncyBjcmVhdGVkIGJ5IHRoaXMgdXNlci4KKyAg ICAjICAgICIiIgogICAgICMgICAgcGFzcwo9MjAKLSAgICAjZGVmIGFubm90YXRpb25zKCBzZWxm LCB0cmFucywgKiprd2FyZ3MgKToKLSAgICAjICAgICMgcmV0dXJuIGFsbCBhbm5vdGF0aW9ucyBm cm9tIHRoaXMgdXNlcgorICAgICNkZWYgYW5ub3RhdGlvbnMoIHNlbGYsIHRyYW5zLCB1c2VyLCAq Kmt3YXJncyApOgorICAgICMgICAgIiIiCisgICAgIyAgICBSZXR1cm4gYWxsIGFubm90YXRpb25z IGNyZWF0ZWQgYnkgdGhpcyB1c2VyLgorICAgICMgICAgIiIiCiAgICAgIyAgICBwYXNzCj0yMAog ICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIGFwaSBrZXlzCkBAIC0xODksOCArMTk1LDE1IEBACiAg ICAgICAgICIiIgogICAgICAgICBxdWVyeSA9M0QgKCBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LnF1 ZXJ5KCBtb2RlbC5BUElLZXlzICkKICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcl9ieSggdXNl cj0zRHVzZXIgKQotICAgICAgICAgICAgICAgICAgICAub3JkZXJfYnkoIG1vZGVsLkFQSUtleXMu Y3JlYXRlX3RpbWUgKSApCi0gICAgICAgIHJldHVybiBxdWVyeS5maXJzdCgpCisgICAgICAgICAg ICAgICAgICAgIC5vcmRlcl9ieSggc3FsYWxjaGVteS5kZXNjKCBtb2RlbC5BUElLZXlzLmNyZWF0 ZV90aW1lID0KKSApICkKKyAgICAgICAgYWxsID0zRCBxdWVyeS5hbGwoKQorICAgICAgICBmb3Ig YSBpbiBhbGw6CisgICAgICAgICAgICBwcmludCBhLnVzZXIudXNlcm5hbWUsIGEua2V5LCBhLmNy ZWF0ZV90aW1lCisgICAgICAgIHByaW50IGFsbAorICAgICAgICBpZiBsZW4oIGFsbCApOgorICAg ICAgICAgICAgcmV0dXJuIGFsbFswXQorICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjcmV0 dXJuIHF1ZXJ5LmZpcnN0KCkKPTIwCiAgICAgI1RPRE86IHBvc3NpYmx5IG1vdmUgdG8gQXBpS2V5 TWFuYWdlcgogICAgIGRlZiBnZXRfb3JfY3JlYXRlX3ZhbGlkX2FwaV9rZXkoIHNlbGYsIHRyYW5z LCB1c2VyICk6CgpkaWZmIC1yIDJlOTkwY2FlZmM5NDNlYjJiMWQ0YTk0YWY1MDhjMjJiYjM0Yjdm YTYgLXIgNDI4ZTU4ZmNkMzNhOWY5MzQyOTJmY2E9CmRhYzg0MGM3NTc4M2JjZDYyIGxpYi9nYWxh eHkvbWFuYWdlcnMvdmlzdWFsaXphdGlvbnMucHkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2Fs YXh5L21hbmFnZXJzL3Zpc3VhbGl6YXRpb25zLnB5CkBAIC0wLDAgKzEsOTAgQEAKKyIiIgorTWFu YWdlciBhbmQgU2VyaWFsaXplcnMgZm9yIFZpc3VhbGl6YXRpb25zLgorCitWaXN1YWxpemF0aW9u cyBhcmUgc2F2ZWQgY29uZmlndXJhdGlvbnMvdmFyaWFibGVzIHVzZWQgdG8KK3JlcHJvZHVjZSBh IHNwZWNpZmljIHZpZXcgaW4gYSBHYWxheHkgdmlzdWFsaXphdGlvbi4KKyIiIgorCitmcm9tIGdh bGF4eSBpbXBvcnQgZXhjZXB0aW9ucworZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCisKK2ltcG9y dCBiYXNlCitpbXBvcnQgc2hhcmFibGUKKworaW1wb3J0IGdhbGF4eS53ZWIKKworaW1wb3J0IGxv Z2dpbmcKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKKworCisjID0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRAorY2xhc3MgVmlzdWFsaXphdGlvbk1hbmFnZXIoIHNoYXJhYmxlLlNoYXJhYmxlTW9kZWxN YW5hZ2VyICk6CisgICAgIiIiCisgICAgIiIiCisKKyAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwu VmlzdWFsaXphdGlvbgorICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuVmlzdWFsaXph dGlvbi5jcmVhdGVfdGltZSwgKQorICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICd2aXN1YWxpemF0 aW9uJworICAgIHVzZXJfc2hhcmVfbW9kZWwgPTNEIG1vZGVsLlZpc3VhbGl6YXRpb25Vc2VyU2hh cmVBc3NvY2lhdGlvbgorCisgICAgdGFnX2Fzc29jID0zRCBtb2RlbC5WaXN1YWxpemF0aW9uVGFn QXNzb2NpYXRpb24KKyAgICBhbm5vdGF0aW9uX2Fzc29jID0zRCBtb2RlbC5WaXN1YWxpemF0aW9u QW5ub3RhdGlvbkFzc29jaWF0aW9uCisgICAgcmF0aW5nX2Fzc29jID0zRCBtb2RlbC5WaXN1YWxp emF0aW9uUmF0aW5nQXNzb2NpYXRpb24KKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwLCAq YXJncywgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICBzdXBl ciggVmlzdWFsaXphdGlvbk1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwLCAqYXJncywgKipr d2FyZ3M9CiApCisKKyAgICBkZWYgY29weSggc2VsZiwgdHJhbnMsIHZpc3VhbGl6YXRpb24sIHVz ZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcwor CisgICAgI1RPRE86IHJldmlzaW9ucworCisKKyMjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRAorY2xhc3MgVmlzdWFsaXph dGlvblNlcmlhbGl6ZXIoIHNoYXJhYmxlLlNoYXJhYmxlTW9kZWxTZXJpYWxpemVyICk6CisgICAg IiIiCisgICAgSW50ZXJmYWNlL3NlcnZpY2Ugb2JqZWN0IGZvciBzZXJpYWxpemluZyB2aXN1YWxp emF0aW9ucyBpbnRvIGRpY3Rpb25hcj0KaWVzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9f KCBzZWxmLCBhcHAgKToKKyAgICAgICAgc3VwZXIoIFZpc3VhbGl6YXRpb25TZXJpYWxpemVyLCBz ZWxmICkuX19pbml0X18oIGFwcCApCisgICAgICAgIHNlbGYudmlzdWFsaXphdGlvbnNfbWFuYWdl ciA9M0QgVmlzdWFsaXphdGlvbk1hbmFnZXIoIGFwcCApCisKKyAgICAgICAgc3VtbWFyeV92aWV3 ID0zRCBbCisgICAgICAgIF0KKyAgICAgICAgIyBpbiB0aGUgVmlzdWFsaXphdGlvbnMnIGNhc2Us IGVhY2ggb2YgdGhlc2Ugdmlld3MgaW5jbHVkZXMgdGhlIGtlPQp5cyBmcm9tIHRoZSBwcmV2aW91 cworICAgICAgICBkZXRhaWxlZF92aWV3ID0zRCBzdW1tYXJ5X3ZpZXcgKyBbCisgICAgICAgIF0K KyAgICAgICAgc2VsZi5zZXJpYWxpemFibGVfa2V5cyA9M0QgZGV0YWlsZWRfdmlldyArIFtdCisg ICAgICAgIHNlbGYudmlld3MgPTNEIHsKKyAgICAgICAgICAgICdzdW1tYXJ5JyAgIDogc3VtbWFy eV92aWV3LAorICAgICAgICAgICAgJ2RldGFpbGVkJyAgOiBkZXRhaWxlZF92aWV3CisgICAgICAg IH0KKyAgICAgICAgc2VsZi5kZWZhdWx0X3ZpZXcgPTNEICdzdW1tYXJ5JworCisgICAgZGVmIGFk ZF9zZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBzdXBlciggVmlzdWFsaXphdGlvblNlcmlh bGl6ZXIsIHNlbGYgKS5hZGRfc2VyaWFsaXplcnMoKQorICAgICAgICBzZWxmLnNlcmlhbGl6ZXJz LnVwZGF0ZSh7CisgICAgICAgIH0pCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIFZpc3VhbGl6YXRp b25EZXNlcmlhbGl6ZXIoIHNoYXJhYmxlLlNoYXJhYmxlTW9kZWxEZXNlcmlhbGl6ZXIgKToKKyAg ICAiIiIKKyAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmplY3QgZm9yIHZhbGlkYXRpbmcgYW5kIGRl c2VyaWFsaXppbmcKKyAgICBkaWN0aW9uYXJpZXMgaW50byB2aXN1YWxpemF0aW9ucy4KKyAgICAi IiIKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVyKCBWaXN1 YWxpemF0aW9uRGVzZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCisgICAgICAgIHNl bGYudmlzdWFsaXphdGlvbl9tYW5hZ2VyID0zRCBWaXN1YWxpemF0aW9uTWFuYWdlciggYXBwICkK KworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBzdXBlciggVmlz dWFsaXphdGlvbkRlc2VyaWFsaXplciwgc2VsZiApLmFkZF9kZXNlcmlhbGl6ZXJzKCkKKyAgICAg ICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZSh7CisgICAgICAgIH0pCisgICAgICAgIHNlbGYu ZGVzZXJpYWxpemFibGVfa2V5cyA9M0Qgc2VsZi5kZXNlcmlhbGl6ZXJzLmtleXMoKQoKCmh0dHBz Oi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hMjVjZTYzY2Rj ZjAvCkNoYW5nZXNldDogICBhMjVjZTYzY2RjZjAKVXNlcjogICAgICAgIGNhcmxmZWJlcmhhcmQK RGF0ZTogICAgICAgIDIwMTUtMDEtMTMgMjE6MTc6NDMrMDA6MDAKU3VtbWFyeTogICAgIE1lcmdl ZCBnYWxheHkvZ2FsYXh5LWNlbnRyYWwgaW50byBkZWZhdWx0CkFmZmVjdGVkICM6ICA5IGZpbGVz CgpkaWZmIC1yIDQyOGU1OGZjZDMzYTlmOTM0MjkyZmNhZGFjODQwYzc1NzgzYmNkNjIgLXIgYTI1 Y2U2M2NkY2YwN2NiMmQyMGZmMzQ9CjdiZjQyZTg2ZjRmZDRmMjFiIGNvbmZpZy9nYWxheHkuaW5p LnNhbXBsZQotLS0gYS9jb25maWcvZ2FsYXh5LmluaS5zYW1wbGUKKysrIGIvY29uZmlnL2dhbGF4 eS5pbmkuc2FtcGxlCkBAIC0zNTQsMTAgKzM1NCw2IEBACiAjIElmIG5vIG1lc3NhZ2Ugc3BlY2lm aWVkIHRoZSB3YXJuaW5nIGJveCB3aWxsIG5vdCBiZSBzaG93bi4KICNyZWdpc3RyYXRpb25fd2Fy bmluZ19tZXNzYWdlID0zRCBQbGVhc2UgcmVnaXN0ZXIgb25seSBvbmUgYWNjb3VudCAtIHdlIHBy PQpvdmlkZSB0aGlzIHNlcnZpY2UgZnJlZSBvZiBjaGFyZ2UgYW5kIGhhdmUgbGltaXRlZCBjb21w dXRhdGlvbmFsIHJlc291cmNlcy49CiBNdWx0aS1hY2NvdW50cyBhcmUgdHJhY2tlZCBhbmQgd2ls bCBiZSBzdWJqZWN0ZWQgdG8gYWNjb3VudCB0ZXJtaW5hdGlvbiBhbj0KZCBkYXRhIGRlbGV0aW9u Lgo9MjAKLSMgV2hlbiB1c2VycyBvcHQgdG8gcmVzZXQgcGFzc3dvcmRzLCBuZXcgb25lcyBhcmUg Y3JlYXRlZCwgdGhpcyBvcHRpb24KLSMgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlc2UgcGFz c3dvcmRzLgotI3Jlc2V0X3Bhc3N3b3JkX2xlbmd0aCA9M0QgMTUKLQo9MjAKICMgLS0gQWNjb3Vu dCBhY3RpdmF0aW9uCj0yMAoKZGlmZiAtciA0MjhlNThmY2QzM2E5ZjkzNDI5MmZjYWRhYzg0MGM3 NTc4M2JjZDYyIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0PQo3YmY0MmU4NmY0ZmQ0ZjIxYiBs aWIvZ2FsYXh5L2NvbmZpZy5weQotLS0gYS9saWIvZ2FsYXh5L2NvbmZpZy5weQorKysgYi9saWIv Z2FsYXh5L2NvbmZpZy5weQpAQCAtMTYxLDcgKzE2MSw2IEBACiAgICAgICAgICAgICBzZWxmLmpv Yl93YWxsdGltZV9kZWx0YSA9M0QgdGltZWRlbHRhKCAwLCBzLCAwLCAwLCBtLCBoICkKICAgICAg ICAgc2VsZi5hZG1pbl91c2VycyA9M0Qga3dhcmdzLmdldCggImFkbWluX3VzZXJzIiwgIiIgKQog ICAgICAgICBzZWxmLmFkbWluX3VzZXJzX2xpc3QgPTNEIFt1LnN0cmlwKCkgZm9yIHUgaW4gc2Vs Zi5hZG1pbl91c2Vycy5zcGw9Cml0KCcsJykgaWYgdV0KLSAgICAgICAgc2VsZi5yZXNldF9wYXNz d29yZF9sZW5ndGggPTNEIGludCgga3dhcmdzLmdldCgncmVzZXRfcGFzc3dvcmRfbGVuPQpndGgn LCAnMTUnKSApCiAgICAgICAgIHNlbGYubWFpbGluZ19qb2luX2FkZHIgPTNEIGt3YXJncy5nZXQo J21haWxpbmdfam9pbl9hZGRyJywgJ2dhbGF4eT0KLWFubm91bmNlLWpvaW5AYngucHN1LmVkdScp CiAgICAgICAgIHNlbGYuZXJyb3JfZW1haWxfdG8gPTNEIGt3YXJncy5nZXQoICdlcnJvcl9lbWFp bF90bycsIE5vbmUgKQogICAgICAgICBzZWxmLmFjdGl2YXRpb25fZW1haWwgPTNEIGt3YXJncy5n ZXQoICdhY3RpdmF0aW9uX2VtYWlsJywgTm9uZSApCgpkaWZmIC1yIDQyOGU1OGZjZDMzYTlmOTM0 MjkyZmNhZGFjODQwYzc1NzgzYmNkNjIgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ9CjdiZjQy ZTg2ZjRmZDRmMjFiIGxpYi9nYWxheHkvbW9kZWwvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4 eS9tb2RlbC9fX2luaXRfXy5weQorKysgYi9saWIvZ2FsYXh5L21vZGVsL19faW5pdF9fLnB5CkBA IC0xOCw2ICsxOCw3IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgdGltZQogaW1wb3J0IG51bWJl cnMKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKIGZyb20gdXVpZCBp bXBvcnQgVVVJRCwgdXVpZDQKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogZnJvbSBpdGVy dG9vbHMgaW1wb3J0IGlmaWx0ZXIKQEAgLTMxLDcgKzMyLDcgQEAKIGltcG9ydCBnYWxheHkubW9k ZWwub3JtLm5vdwogZnJvbSBnYWxheHkuc2VjdXJpdHkgaW1wb3J0IGdldF9wZXJtaXR0ZWRfYWN0 aW9ucwogZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgaXNfbXVsdGlfYnl0ZSwgbmljZV9zaXplLCBQ YXJhbXMsIHJlc3RvcmVfdGV4dCwgc2U9Cm5kX21haWwKLWZyb20gZ2FsYXh5LnV0aWwgaW1wb3J0 IHJlYWR5X25hbWVfZm9yX3VybAorZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgcmVhZHlfbmFtZV9m b3JfdXJsLCB1bmlxdWVfaWQKIGZyb20gZ2FsYXh5LnV0aWwuYnVuY2ggaW1wb3J0IEJ1bmNoCiBm cm9tIGdhbGF4eS51dGlsLmhhc2hfdXRpbCBpbXBvcnQgbmV3X3NlY3VyZV9oYXNoCiBmcm9tIGdh bGF4eS51dGlsLmRpcmVjdG9yeV9oYXNoIGltcG9ydCBkaXJlY3RvcnlfaGFzaF9pZApAQCAtMjYx LDYgKzI2MiwxNCBAQAogICAgICAgICBlbnZpcm9ubWVudCA9M0QgVXNlci51c2VyX3RlbXBsYXRl X2Vudmlyb25tZW50KCB1c2VyICkKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKCBpbl9zdHJpbmcg KS5zYWZlX3N1YnN0aXR1dGUoIGVudmlyb25tZW50ICkKPTIwCitjbGFzcyBQYXNzd29yZFJlc2V0 VG9rZW4oIG9iamVjdCApOgorICAgIGRlZiBfX2luaXRfXyggc2VsZiwgdXNlciwgdG9rZW49M0RO b25lKToKKyAgICAgICAgaWYgdG9rZW46CisgICAgICAgICAgICBzZWxmLnRva2VuID0zRCB0b2tl bgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50b2tlbiA9M0QgdW5pcXVlX2lkKCkK KyAgICAgICAgc2VsZi51c2VyID0zRCB1c2VyCisgICAgICAgIHNlbGYuZXhwaXJhdGlvbl90aW1l ID0zRCBkYXRldGltZS5ub3coKSArIHRpbWVkZWx0YShob3Vycz0zRDI0KQo9MjAKIGNsYXNzIEJh c2VKb2JNZXRyaWMoIG9iamVjdCApOgo9MjAKCmRpZmYgLXIgNDI4ZTU4ZmNkMzNhOWY5MzQyOTJm Y2FkYWM4NDBjNzU3ODNiY2Q2MiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzND0KN2JmNDJlODZm NGZkNGYyMWIgbGliL2dhbGF4eS9tb2RlbC9tYXBwaW5nLnB5Ci0tLSBhL2xpYi9nYWxheHkvbW9k ZWwvbWFwcGluZy5weQorKysgYi9saWIvZ2FsYXh5L21vZGVsL21hcHBpbmcucHkKQEAgLTY4LDYg KzY4LDExIEBACiAgICAgQ29sdW1uKCAicHJvdmlkZXIiLCBUcmltbWVkU3RyaW5nKCAyNTUgKSAp LAogICAgICkKPTIwCittb2RlbC5QYXNzd29yZFJlc2V0VG9rZW4udGFibGUgPTNEIFRhYmxlKCJw YXNzd29yZF9yZXNldF90b2tlbiIsIG1ldGFkYXRhLAorICAgIENvbHVtbiggInRva2VuIiwgU3Ry aW5nKCAzMiApLCBwcmltYXJ5X2tleT0zRFRydWUsIHVuaXF1ZT0zRFRydWUsIGluZGU9Cng9M0RU cnVlICksCisgICAgQ29sdW1uKCAiZXhwaXJhdGlvbl90aW1lIiwgRGF0ZVRpbWUgKSwKKyAgICBD b2x1bW4oICJ1c2VyX2lkIiwgSW50ZWdlciwgRm9yZWlnbktleSggImdhbGF4eV91c2VyLmlkIiAp LCBpbmRleD0zRFRyPQp1ZSApICkKKwogbW9kZWwuSGlzdG9yeS50YWJsZSA9M0QgVGFibGUoICJo aXN0b3J5IiwgbWV0YWRhdGEsCiAgICAgQ29sdW1uKCAiaWQiLCBJbnRlZ2VyLCBwcmltYXJ5X2tl eT0zRFRydWUpLAogICAgIENvbHVtbiggImNyZWF0ZV90aW1lIiwgRGF0ZVRpbWUsIGRlZmF1bHQ9 M0Rub3cgKSwKQEAgLTE1NjUsNiArMTU3MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgYXBp X2tleXM9M0RyZWxhdGlvbiggbW9kZWwuQVBJS2V5cywgYmFja3JlZj0zRCJ1c2VyIiw9CiBvcmRl cl9ieT0zRGRlc2MoIG1vZGVsLkFQSUtleXMudGFibGUuYy5jcmVhdGVfdGltZSApICksCiAgICAg ICAgICAgICAgICAgICAgICApICkKPTIwCittYXBwZXIoIG1vZGVsLlBhc3N3b3JkUmVzZXRUb2tl biwgbW9kZWwuUGFzc3dvcmRSZXNldFRva2VuLnRhYmxlLAorICAgICAgICBwcm9wZXJ0aWVzPTNE ZGljdCggdXNlcj0zRHJlbGF0aW9uKCBtb2RlbC5Vc2VyLCBiYWNrcmVmPTNEInJlc2V0X3Q9Cm9r ZW5zIikgKSApCisKKwogIyBTZXQgdXAgcHJveHkgc28gdGhhdCB0aGlzIHN5bnRheCBpcyBwb3Nz aWJsZToKICMgPHVzZXJfb2JqPi5wcmVmZXJlbmNlc1twcmVmX25hbWVdID0zRCBwcmVmX3ZhbHVl CiBtb2RlbC5Vc2VyLnByZWZlcmVuY2VzID0zRCBhc3NvY2lhdGlvbl9wcm94eSgnX3ByZWZlcmVu Y2VzJywgJ3ZhbHVlJywgY3JlYT0KdG9yPTNEbW9kZWwuVXNlclByZWZlcmVuY2UpCgpkaWZmIC1y IDQyOGU1OGZjZDMzYTlmOTM0MjkyZmNhZGFjODQwYzc1NzgzYmNkNjIgLXIgYTI1Y2U2M2NkY2Yw N2NiMmQyMGZmMzQ9CjdiZjQyZTg2ZjRmZDRmMjFiIGxpYi9nYWxheHkvbW9kZWwvbWlncmF0ZS92 ZXJzaW9ucy8wMTI2X3Bhc3N3b3JkX3Jlc2V0LnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dh bGF4eS9tb2RlbC9taWdyYXRlL3ZlcnNpb25zLzAxMjZfcGFzc3dvcmRfcmVzZXQucHkKQEAgLTAs MCArMSw0MyBAQAorIiIiCitNaWdyYXRpb24gc2NyaXB0IGZvciB0aGUgcGFzc3dvcmQgcmVzZXQg dGFibGUKKyIiIgorCitmcm9tIHNxbGFsY2hlbXkgaW1wb3J0ICoKK2Zyb20gc3FsYWxjaGVteS5v cm0gaW1wb3J0ICoKK2Zyb20gbWlncmF0ZSBpbXBvcnQgKgorZnJvbSBtaWdyYXRlLmNoYW5nZXNl dCBpbXBvcnQgKgorZnJvbSBnYWxheHkubW9kZWwuY3VzdG9tX3R5cGVzIGltcG9ydCAqCisKK2lt cG9ydCBkYXRldGltZQorbm93ID0zRCBkYXRldGltZS5kYXRldGltZS51dGNub3cKKworaW1wb3J0 IGxvZ2dpbmcKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKKworbWV0YWRh dGEgPTNEIE1ldGFEYXRhKCkKKworUGFzc3dvcmRSZXNldFRva2VuX3RhYmxlID0zRCBUYWJsZSgi cGFzc3dvcmRfcmVzZXRfdG9rZW4iLCBtZXRhZGF0YSwKKyAgICBDb2x1bW4oICJ0b2tlbiIsIFN0 cmluZyggMzIgKSwgcHJpbWFyeV9rZXk9M0RUcnVlLCB1bmlxdWU9M0RUcnVlLCBpbmRlPQp4PTNE VHJ1ZSApLAorICAgIENvbHVtbiggImV4cGlyYXRpb25fdGltZSIsIERhdGVUaW1lICksCisgICAg Q29sdW1uKCAidXNlcl9pZCIsIEludGVnZXIsIEZvcmVpZ25LZXkoICJnYWxheHlfdXNlci5pZCIg KSwgaW5kZXg9M0RUcj0KdWUgKSkKKworCitkZWYgdXBncmFkZShtaWdyYXRlX2VuZ2luZSk6Cisg ICAgbWV0YWRhdGEuYmluZCA9M0QgbWlncmF0ZV9lbmdpbmUKKyAgICBwcmludCBfX2RvY19fCisg ICAgbWV0YWRhdGEucmVmbGVjdCgpCisgICAgdHJ5OgorICAgICAgICBQYXNzd29yZFJlc2V0VG9r ZW5fdGFibGUuY3JlYXRlKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHBy aW50IHN0cihlKQorICAgICAgICBsb2cuZXhjZXB0aW9uKCJDcmVhdGluZyAlcyB0YWJsZSBmYWls ZWQ6ICVzIiAlIChQYXNzd29yZFJlc2V0VG9rZW49Cl90YWJsZS5uYW1lLCBzdHIoIGUgKSApICkK KworCitkZWYgZG93bmdyYWRlKG1pZ3JhdGVfZW5naW5lKToKKyAgICBtZXRhZGF0YS5iaW5kID0z RCBtaWdyYXRlX2VuZ2luZQorICAgIG1ldGFkYXRhLnJlZmxlY3QoKQorICAgIHRyeToKKyAgICAg ICAgUGFzc3dvcmRSZXNldFRva2VuX3RhYmxlLmRyb3AoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24g YXMgZToKKyAgICAgICAgcHJpbnQgc3RyKGUpCisgICAgICAgIGxvZy5leGNlcHRpb24oIkRyb3Bw aW5nICVzIHRhYmxlIGZhaWxlZDogJXMiICUgKFBhc3N3b3JkUmVzZXRUb2tlbj0KX3RhYmxlLm5h bWUsIHN0ciggZSApICkgKQoKZGlmZiAtciA0MjhlNThmY2QzM2E5ZjkzNDI5MmZjYWRhYzg0MGM3 NTc4M2JjZDYyIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0PQo3YmY0MmU4NmY0ZmQ0ZjIxYiBs aWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3VzZXIucHkKLS0tIGEvbGliL2dh bGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy91c2VyLnB5CisrKyBiL2xpYi9nYWxheHkv d2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdXNlci5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9y dCBvcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNvY2tldAotaW1wb3J0IHN0cmluZwogaW1wb3J0 IHVybGxpYgo9MjAKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKQEAg LTI5LDE4ICsyOCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzZXNGb3JtRGVmaW5pdGlvbnNNaXhpbikKIGZyb20gZ2FsYXh5LndlYi5mb3JtX2J1aWxkZXIg aW1wb3J0IGJ1aWxkX3NlbGVjdF9maWVsZCwgQ2hlY2tib3hGaWVsZAogZnJvbSBnYWxheHkud2Vi LmZyYW1ld29yay5oZWxwZXJzIGltcG9ydCBlc2NhcGUsIGdyaWRzLCB0aW1lX2FnbwotZnJvbSBn YWxheHkud2ViLmZyYW1ld29yay5oZWxwZXJzIGltcG9ydCB0aW1lX2FnbywgZ3JpZHMKLWZyb20g bWFya3Vwc2FmZSBpbXBvcnQgZXNjYXBlCj0yMAogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlcigg X19uYW1lX18gKQo9MjAKLXJlcXVpcmVfbG9naW5fdGVtcGxhdGUgPTNEICIiIgorUkVRVUlSRV9M T0dJTl9URU1QTEFURSA9M0QgIiIiCiA8cD4KICAgICBUaGlzICVzIGhhcyBiZWVuIGNvbmZpZ3Vy ZWQgc3VjaCB0aGF0IG9ubHkgdXNlcnMgd2hvIGFyZSBsb2dnZWQgaW4gbWF5PQogdXNlIGl0LiVz CiA8L3A+PHAvPgogIiIiCj0yMAorUEFTU1dPUkRfUkVTRVRfVEVNUExBVEUgPTNEICIiIgorVG8g cmVzZXQgeW91ciBHYWxheHkgcGFzc3dvcmQgZm9yIHRoZSBpbnN0YW5jZSBhdCAlcywgdXNlIHRo ZSBmb2xsb3dpbmcgbGk9Cm5rOgorCisgICAgPGEgaHJlZj0zRCIlcyI+JXM8L2E+CisKK0lmIHlv dSBkaWQgbm90IG1ha2UgdGhpcyByZXF1ZXN0LCBubyBhY3Rpb24gaXMgbmVjZXNzYXJ5IG9uIHlv dXIgcGFydCwgdGhvPQp1Z2gKK3lvdSBtYXkgd2FudCB0byBub3RpZnkgYW4gYWRtaW5pc3RyYXRv ci4iIiIKKwo9MjAKIGNsYXNzIFVzZXJPcGVuSURHcmlkKCBncmlkcy5HcmlkICk6CiAgICAgdXNl X3BhbmVscyA9M0QgRmFsc2UKQEAgLTQ3NywxNCArNDgyLDE0IEBACiAgICAgICAgICAgICAgICAg Y3JlYXRlX2FjY291bnRfc3RyID0zRCAiICBJZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFj Yz0Kb3VudCwgPGEgaHJlZj0zRCclcyc+eW91IG1heSBjcmVhdGUgb25lPC9hPi4iICUgXAogICAg ICAgICAgICAgICAgICAgICB3ZWIudXJsX2ZvciggY29udHJvbGxlcj0zRCd1c2VyJywgYWN0aW9u PTNEJ2NyZWF0ZScsIGM9Cm50cmxsZXI9M0QndXNlcicgKQogICAgICAgICAgICAgICAgIGlmIHRy YW5zLndlYmFwcC5uYW1lID0zRD0zRCAnZ2FsYXh5JzoKLSAgICAgICAgICAgICAgICAgICAgaGVh ZGVyID0zRCByZXF1aXJlX2xvZ2luX3RlbXBsYXRlICUgKCAiR2FsYXh5IGluc3RhbmNlPQoiLCBj cmVhdGVfYWNjb3VudF9zdHIgKQorICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPTNEIFJFUVVJ UkVfTE9HSU5fVEVNUExBVEUgJSAoICJHYWxheHkgaW5zdGFuY2U9CiIsIGNyZWF0ZV9hY2NvdW50 X3N0ciApCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVy ID0zRCByZXF1aXJlX2xvZ2luX3RlbXBsYXRlICUgKCAiR2FsYXh5IHRvb2wgc2hlPQpkIiwgY3Jl YXRlX2FjY291bnRfc3RyICkKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0zRCBSRVFVSVJF X0xPR0lOX1RFTVBMQVRFICUgKCAiR2FsYXh5IHRvb2wgc2hlPQpkIiwgY3JlYXRlX2FjY291bnRf c3RyICkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgdHJhbnMud2ViYXBw Lm5hbWUgPTNEPTNEICdnYWxheHknOgotICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPTNEIHJl cXVpcmVfbG9naW5fdGVtcGxhdGUgJSAoICJHYWxheHkgaW5zdGFuY2U9CiIsICIiICkKKyAgICAg ICAgICAgICAgICAgICAgaGVhZGVyID0zRCBSRVFVSVJFX0xPR0lOX1RFTVBMQVRFICUgKCAiR2Fs YXh5IGluc3RhbmNlPQoiLCAiIiApCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg ICAgICAgICAgaGVhZGVyID0zRCByZXF1aXJlX2xvZ2luX3RlbXBsYXRlICUgKCAiR2FsYXh5IHRv b2wgc2hlPQpkIiwgIiIgKQorICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPTNEIFJFUVVJUkVf TE9HSU5fVEVNUExBVEUgJSAoICJHYWxheHkgdG9vbCBzaGU9CmQiLCAiIiApCiAgICAgICAgIHJl dHVybiB0cmFucy5maWxsX3RlbXBsYXRlKCAnL3VzZXIvbG9naW4ubWFrbycsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbD0zRGVtYWlsLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPTNEaGVhZGVyLApAQCAtMTAzMSwzOCArMTAzNiw2 IEBACiAgICAgICAgICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCB1c2VyICkKICAg ICAgICAgICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCiAgICAgICAgICAgICAg ICAgbWVzc2FnZSA9M0QgJ1RoZSBsb2dpbiBpbmZvcm1hdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHdp dGggdD0KaGUgY2hhbmdlcy4nCi0gICAgICAgIGVsaWYgdXNlciBhbmQgcGFyYW1zLmdldCggJ2No YW5nZV9wYXNzd29yZF9idXR0b24nLCBGYWxzZSApOgotICAgICAgICAgICAgIyBFZGl0aW5nIHBh c3N3b3JkLiAgRG8gbm90IHNhbml0aXplIHBhc3N3b3Jkcywgc28gZ2V0IGZyb20ga3dkCi0gICAg ICAgICAgICAjIGFuZCBub3QgcGFyYW1zICh3aGljaCB3ZXJlIHNhbml0aXplZCkuCi0gICAgICAg ICAgICBwYXNzd29yZCA9M0Qga3dkLmdldCggJ3Bhc3N3b3JkJywgJycgKQotICAgICAgICAgICAg Y29uZmlybSA9M0Qga3dkLmdldCggJ2NvbmZpcm0nLCAnJyApCi0gICAgICAgICAgICBvayA9M0Qg VHJ1ZQotICAgICAgICAgICAgaWYgbm90IGlzX2FkbWluOgotICAgICAgICAgICAgICAgICMgSWYg dGhlIGN1cnJlbnQgdXNlciBpcyBjaGFuZ2luZyB0aGVpciBvd24gcGFzc3dvcmQsIHZhbGk9CmRh dGUgdGhlaXIgY3VycmVudCBwYXNzd29yZAotICAgICAgICAgICAgICAgIGN1cnJlbnQgPTNEIGt3 ZC5nZXQoICdjdXJyZW50JywgJycgKQotICAgICAgICAgICAgICAgIGlmIG5vdCB0cmFucy51c2Vy LmNoZWNrX3Bhc3N3b3JkKCBjdXJyZW50ICk6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ug PTNEICdJbnZhbGlkIGN1cnJlbnQgcGFzc3dvcmQnCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1 cyA9M0QgJ2Vycm9yJwotICAgICAgICAgICAgICAgICAgICBvayA9M0QgRmFsc2UKLSAgICAgICAg ICAgIGlmIG9rOgotICAgICAgICAgICAgICAgICMgVmFsaWRhdGUgdGhlIG5ldyBwYXNzd29yZAot ICAgICAgICAgICAgICAgIG1lc3NhZ2UgPTNEIHZhbGlkYXRlX3Bhc3N3b3JkKCB0cmFucywgcGFz c3dvcmQsIGNvbmZpcm0gKQotICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2U6Ci0gICAgICAgICAg ICAgICAgICAgIHN0YXR1cyA9M0QgJ2Vycm9yJwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICAgICAgICAgICMgU2F2ZSBuZXcgcGFzc3dvcmQKLSAgICAgICAgICAgICAgICAgICAg dXNlci5zZXRfcGFzc3dvcmRfY2xlYXJ0ZXh0KCBwYXNzd29yZCApCi0gICAgICAgICAgICAgICAg ICAgICMgSW52YWxpZGF0ZSBhbGwgb3RoZXIgc2Vzc2lvbnMKLSAgICAgICAgICAgICAgICAgICAg Zm9yIG90aGVyX2dhbGF4eV9zZXNzaW9uIGluIHRyYW5zLnNhX3Nlc3Npb24ucXVlcnkoIHRyPQph bnMuYXBwLm1vZGVsLkdhbGF4eVNlc3Npb24gKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIGFuZF8oIHRyYW5zLj0KYXBwLm1v ZGVsLkdhbGF4eVNlc3Npb24udGFibGUuYy51c2VyX2lkID0zRD0zRCB0cmFucy51c2VyLmlkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cmFucy49CmFwcC5tb2RlbC5HYWxheHlTZXNzaW9uLnRhYmxlLmMuaXNfdmFs aWQgaXMgVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMuPQphcHAubW9kZWwuR2FsYXh5U2Vzc2lvbi50 YWJsZS5jLmlkICE9M0QgdHJhbnMuZ2FsYXh5X3Nlc3Npb24uaWQgKSApOgotICAgICAgICAgICAg ICAgICAgICAgICAgb3RoZXJfZ2FsYXh5X3Nlc3Npb24uaXNfdmFsaWQgPTNEIEZhbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggb3RoZXJfZ2FsYXh5X3Nl c3Npb24gKQotICAgICAgICAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggdXNlciAp Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQotICAgICAgICAg ICAgICAgICAgICB0cmFucy5sb2dfZXZlbnQoICJVc2VyIGNoYW5nZSBwYXNzd29yZCIgKQotICAg ICAgICAgICAgICAgICAgICBtZXNzYWdlID0zRCAnVGhlIHBhc3N3b3JkIGhhcyBiZWVuIGNoYW5n ZWQgYW5kIGFueSBvdGg9CmVyIGV4aXN0aW5nIEdhbGF4eSBzZXNzaW9ucyBoYXZlIGJlZW4gbG9n Z2VkIG91dCAoYnV0IGpvYnMgaW4gaGlzdG9yaWVzIGluID0KdGhvc2Ugc2Vzc2lvbnMgd2lsbCBu b3QgYmUgaW50ZXJydXB0ZWQpLicKICAgICAgICAgZWxpZiB1c2VyIGFuZCBwYXJhbXMuZ2V0KCAn ZWRpdF91c2VyX2luZm9fYnV0dG9uJywgRmFsc2UgKToKICAgICAgICAgICAgICMgRWRpdCB1c2Vy IGluZm9ybWF0aW9uIC0gd2ViYXBwIE1VU1QgQkUgJ2dhbGF4eScKICAgICAgICAgICAgIHVzZXJf dHlwZV9mZF9pZCA9M0QgcGFyYW1zLmdldCggJ3VzZXJfdHlwZV9mZF9pZCcsICdub25lJyApCkBA IC0xMTA1LDQ3ICsxMDc4LDEwNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dkICkgKQo9MjAKICAgICBAd2ViLmV4cG9zZQot ICAgIGRlZiByZXNldF9wYXNzd29yZCggc2VsZiwgdHJhbnMsIGVtYWlsPTNETm9uZSwgKiprd2Qg KToKKyAgICBkZWYgY2hhbmdlX3Bhc3N3b3JkKCBzZWxmLCB0cmFucywgdG9rZW49M0ROb25lLCAq Kmt3ZCk6CisgICAgICAgICIiIgorICAgICAgICBQcm92aWRlcyBhIGZvcm0gd2l0aCB3aGljaCBv bmUgY2FuIGNoYW5nZSB0aGVpciBwYXNzd29yZC4gIElmIHRva2U9Cm4gaXMKKyAgICAgICAgcHJv dmlkZWQsIGRvbid0IHJlcXVpcmUgY3VycmVudCBwYXNzd29yZC4KKyAgICAgICAgIiIiCisgICAg ICAgIHN0YXR1cyA9M0QgTm9uZQorICAgICAgICBtZXNzYWdlID0zRCBOb25lCisgICAgICAgIHVz ZXIgPTNEIE5vbmUKKyAgICAgICAgaWYga3dkLmdldCggJ2NoYW5nZV9wYXNzd29yZF9idXR0b24n LCBGYWxzZSApOgorICAgICAgICAgICAgcGFzc3dvcmQgPTNEIGt3ZC5nZXQoICdwYXNzd29yZCcs ICcnICkKKyAgICAgICAgICAgIGNvbmZpcm0gPTNEIGt3ZC5nZXQoICdjb25maXJtJywgJycgKQor ICAgICAgICAgICAgY3VycmVudCA9M0Qga3dkLmdldCggJ2N1cnJlbnQnLCAnJyApCisgICAgICAg ICAgICB0b2tlbl9yZXN1bHQgPTNEIE5vbmUKKyAgICAgICAgICAgIGlmIHRva2VuOgorICAgICAg ICAgICAgICAgICMgSWYgYSB0b2tlbiB3YXMgc3VwcGxpZWQsIHZhbGlkYXRlIGFuZCBzZXQgdXNl cgorICAgICAgICAgICAgICAgIHRva2VuX3Jlc3VsdCA9M0QgdHJhbnMuc2Ffc2Vzc2lvbi5xdWVy eSggdHJhbnMuYXBwLm1vZGVsLlA9CmFzc3dvcmRSZXNldFRva2VuICkuZ2V0KHRva2VuKQorICAg ICAgICAgICAgICAgIGlmIHRva2VuX3Jlc3VsdCBhbmQgdG9rZW5fcmVzdWx0LmV4cGlyYXRpb25f dGltZSA+IGRhdGV0aW09CmUubm93KCk6CisgICAgICAgICAgICAgICAgICAgIHVzZXIgPTNEIHRv a2VuX3Jlc3VsdC51c2VyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3JfbWVzc2FnZSgiSW52YWxpZCBvciBleHBpcmVkIHBh PQpzc3dvcmQgcmVzZXQgdG9rZW4sIHBsZWFzZSByZXF1ZXN0IGEgbmV3IG9uZS4iKQorICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoZSB1c2VyIGlzIGNoYW5naW5nIHRoZWly IG93biBwYXNzd29yZCwgdmFsaWRhdGUgdGhlaXIgPQpjdXJyZW50IHBhc3N3b3JkCisgICAgICAg ICAgICAgICAgaWYgdHJhbnMudXNlci5jaGVja19wYXNzd29yZCggY3VycmVudCApOgorICAgICAg ICAgICAgICAgICAgICB1c2VyID0zRCB0cmFucy51c2VyCisgICAgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9M0QgJ0ludmFsaWQgY3VycmVudCBwYXNzd29y ZCcKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0zRCAnZXJyb3InCisgICAgICAgICAgICBp ZiB1c2VyOgorICAgICAgICAgICAgICAgICMgVmFsaWRhdGUgdGhlIG5ldyBwYXNzd29yZAorICAg ICAgICAgICAgICAgIG1lc3NhZ2UgPTNEIHZhbGlkYXRlX3Bhc3N3b3JkKCB0cmFucywgcGFzc3dv cmQsIGNvbmZpcm0gKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAg ICAgICAgIHN0YXR1cyA9M0QgJ2Vycm9yJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgICAgICMgU2F2ZSBuZXcgcGFzc3dvcmQKKyAgICAgICAgICAgICAgICAgICAgdXNl ci5zZXRfcGFzc3dvcmRfY2xlYXJ0ZXh0KCBwYXNzd29yZCApCisgICAgICAgICAgICAgICAgICAg ICMgaWYgd2UgdXNlZCBhIHRva2VuLCBpbnZhbGlkYXRlIGl0IGFuZCBsb2cgdGhlIHVzZXIgaT0K bi4KKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW5fcmVzdWx0OgorICAgICAgICAgICAgICAg ICAgICAgICAgdHJhbnMuaGFuZGxlX3VzZXJfbG9naW4odG9rZW5fcmVzdWx0LnVzZXIpCisgICAg ICAgICAgICAgICAgICAgICAgICB0b2tlbl9yZXN1bHQuZXhwaXJhdGlvbl90aW1lID0zRCBkYXRl dGltZS5ub3coKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQo dG9rZW5fcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAjIEludmFsaWRhdGUgYWxsIG90aGVy IHNlc3Npb25zCisgICAgICAgICAgICAgICAgICAgIGZvciBvdGhlcl9nYWxheHlfc2Vzc2lvbiBp biB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCB0cj0KYW5zLmFwcC5tb2RlbC5HYWxheHlTZXNzaW9u ICkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuZmlsdGVyKCBhbmRfKCB0cmFucy49CmFwcC5tb2RlbC5HYWxheHlTZXNzaW9uLnRhYmxlLmMu dXNlcl9pZCA9M0Q9M0QgdXNlci5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMuPQphcHAubW9kZWwuR2Fs YXh5U2Vzc2lvbi50YWJsZS5jLmlzX3ZhbGlkIGlzIFRydWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zLj0K YXBwLm1vZGVsLkdhbGF4eVNlc3Npb24udGFibGUuYy5pZCAhPTNEIHRyYW5zLmdhbGF4eV9zZXNz aW9uLmlkICkgKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyX2dhbGF4eV9zZXNzaW9u LmlzX3ZhbGlkID0zRCBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5hZGQoIG90aGVyX2dhbGF4eV9zZXNzaW9uICkKKyAgICAgICAgICAgICAgICAgICAgdHJh bnMuc2Ffc2Vzc2lvbi5hZGQoIHVzZXIgKQorICAgICAgICAgICAgICAgICAgICB0cmFucy5zYV9z ZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnMubG9nX2V2ZW50KCAiVXNl ciBjaGFuZ2UgcGFzc3dvcmQiICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNo b3dfb2tfbWVzc2FnZSgnVGhlIHBhc3N3b3JkIGhhcyBiZWVuIGNoPQphbmdlZCBhbmQgYW55IG90 aGVyIGV4aXN0aW5nIEdhbGF4eSBzZXNzaW9ucyBoYXZlIGJlZW4gbG9nZ2VkIG91dCAoYnV0IGpv YnM9CiBpbiBoaXN0b3JpZXMgaW4gdGhvc2Ugc2Vzc2lvbnMgd2lsbCBub3QgYmUgaW50ZXJydXB0 ZWQpLicpCisgICAgICAgIHJldHVybiB0cmFucy5maWxsX3RlbXBsYXRlKCAnL3VzZXIvY2hhbmdl X3Bhc3N3b3JkLm1ha28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r ZW49M0R0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0z RHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9M0Rt ZXNzYWdlICkKKworICAgIEB3ZWIuZXhwb3NlCisgICAgZGVmIHJlc2V0X3Bhc3N3b3JkKCBzZWxm LCB0cmFucywgZW1haWw9M0ROb25lLCB0b2tlbj0zRE5vbmUsICoqa3dkICk6CiAgICAgICAgICIi IlJlc2V0IHRoZSB1c2VyJ3MgcGFzc3dvcmQuIFNlbmQgYW4gZW1haWwgd2l0aCB0aGUgbmV3IHBh c3N3b3JkLj0KIiIiCiAgICAgICAgIGlmIHRyYW5zLmFwcC5jb25maWcuc210cF9zZXJ2ZXIgaXMg Tm9uZToKLSAgICAgICAgICAgIHJldHVybiB0cmFucy5zaG93X2Vycm9yX21lc3NhZ2UoICJNYWls IGlzIG5vdCBjb25maWd1cmVkIGZvciB0PQpoaXMgR2FsYXh5IGluc3RhbmNlLiBQbGVhc2UgY29u dGFjdCB5b3VyIGxvY2FsIEdhbGF4eSBhZG1pbmlzdHJhdG9yLiIgKQotICAgICAgICBtZXNzYWdl ID0zRCAnJworICAgICAgICAgICAgcmV0dXJuIHRyYW5zLnNob3dfZXJyb3JfbWVzc2FnZSggIk1h aWwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHQ9CmhpcyBHYWxheHkgaW5zdGFuY2UgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBwYXNzd29yZCByZXNl dCBpbmZvcm1hdGk9Cm9uIGNhbm5vdCBiZSBzZW50LiAiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIGNvbnRhY3QgeW91ciBsb2NhbCBHYT0KbGF4 eSBhZG1pbmlzdHJhdG9yLiIgKQorICAgICAgICBtZXNzYWdlID0zRCBOb25lCiAgICAgICAgIHN0 YXR1cyA9M0QgJ2RvbmUnCiAgICAgICAgIGlmIGt3ZC5nZXQoICdyZXNldF9wYXNzd29yZF9idXR0 b24nLCBGYWxzZSApOgorICAgICAgICAgICAgIyBEZWZhdWx0IHRvIGEgbm9uLXVzZXJpbmZvLWxl YWtpbmcgcmVzcG9uc2UgbWVzc2FnZQorICAgICAgICAgICAgbWVzc2FnZSA9M0QgIllvdXIgcmVz ZXQgcmVxdWVzdCBmb3IgJXMgaGFzIGJlZW4gcmVjZWl2ZWQuICBQbGU9CmFzZSBjaGVjayB5b3Vy IGVtYWlsIGFjY291bnQgZm9yIG1vcmUgaW5zdHJ1Y3Rpb25zLiAgSWYgeW91IGRvIG5vdCByZWNl aXZlID0KYW4gZW1haWwgc2hvcnRseSwgcGxlYXNlIGNvbnRhY3QgYW4gYWRtaW5pc3RyYXRvci4i ICUgKCBlc2NhcGUoIGVtYWlsICkgKQogICAgICAgICAgICAgcmVzZXRfdXNlciA9M0QgdHJhbnMu c2Ffc2Vzc2lvbi5xdWVyeSggdHJhbnMuYXBwLm1vZGVsLlVzZXIgKS49CmZpbHRlciggdHJhbnMu YXBwLm1vZGVsLlVzZXIudGFibGUuYy5lbWFpbCA9M0Q9M0QgZW1haWwgKS5maXJzdCgpCiAgICAg ICAgICAgICB1c2VyID0zRCB0cmFucy5nZXRfdXNlcigpCiAgICAgICAgICAgICBpZiByZXNldF91 c2VyOgogICAgICAgICAgICAgICAgIGlmIHVzZXIgYW5kIHVzZXIuaWQgIT0zRCByZXNldF91c2Vy LmlkOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBi ZWNhdXNlIGFsbCB0aGV5IGhhdmUgdG89CiBkbyBpcyBsb2cKKyAgICAgICAgICAgICAgICAgICAg IyBvdXQgYW5kIHRoZW4gdHJ5IGl0IGFnYWluICAgI1RPRE8gcmV2aXNpdCB3aHkgdGhpcyBlPQp4 aXN0cy4KICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9M0QgIllvdSBtYXkgb25seSByZXNl dCB5b3VyIG93biBwYXNzd29yZC4iCiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9M0QgJ2Vy cm9yJwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJzID0z RCBzdHJpbmcubGV0dGVycyArIHN0cmluZy5kaWdpdHMKLSAgICAgICAgICAgICAgICAgICAgbmV3 X3Bhc3MgPTNEICIiCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0X3Bhc3N3b3JkX2xlbmd0aCA9 M0QgZ2V0YXR0ciggdHJhbnMuYXBwLmNvbmZpZywgIj0KcmVzZXRfcGFzc3dvcmRfbGVuZ3RoIiwg MTUgKQotICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSggcmVzZXRfcGFzc3dvcmRf bGVuZ3RoICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGFzcyA9M0QgbmV3X3Bhc3Mg KyByYW5kb20uY2hvaWNlKCBjaGFycyApCisgICAgICAgICAgICAgICAgICAgIHBydCA9M0QgbW9k ZWwuUGFzc3dvcmRSZXNldFRva2VuKCByZXNldF91c2VyICkKKyAgICAgICAgICAgICAgICAgICAg dHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHBydCApCisgICAgICAgICAgICAgICAgICAgIHRyYW5zLnNh X3Nlc3Npb24uZmx1c2goKQogICAgICAgICAgICAgICAgICAgICBob3N0ID0zRCB0cmFucy5yZXF1 ZXN0Lmhvc3Quc3BsaXQoICc6JyApWyAwIF0KICAgICAgICAgICAgICAgICAgICAgaWYgaG9zdCA9 M0Q9M0QgJ2xvY2FsaG9zdCc6CiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0zRCBzb2Nr ZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICAgICAgICAgIGJvZHkgPTNEICdZb3VyIHBhc3N3b3Jk IG9uICVzIGhhcyBiZWVuIHJlc2V0IHRvOlxuXG4gID0KJXNcbicgJSAoIGhvc3QsIG5ld19wYXNz ICkKKyAgICAgICAgICAgICAgICAgICAgcmVzZXRfdXJsID0zRCB1cmxfZm9yKCBjb250cm9sbGVy PTNEJ3VzZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp b249M0QiY2hhbmdlX3Bhc3N3b3JkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG9rZW49M0RwcnQudG9rZW4sIHF1YWxpZmllZD0zRFRyPQp1ZSkKKyAgICAgICAg ICAgICAgICAgICAgYm9keSA9M0QgUEFTU1dPUkRfUkVTRVRfVEVNUExBVEUgJSAoIGhvc3QsIHJl c2V0X3VybCwgPQpyZXNldF91cmwgKQogICAgICAgICAgICAgICAgICAgICBmcm0gPTNEICdnYWxh eHktbm8tcmVwbHlAJyArIGhvc3QKICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCA9M0QgJ0dh bGF4eSBQYXNzd29yZCBSZXNldCcKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAg ICAgICAgICAgICAgICAgdXRpbC5zZW5kX21haWwoIGZybSwgZW1haWwsIHN1YmplY3QsIGJvZHks IHRyYW5zLmE9CnBwLmNvbmZpZyApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNldF91c2Vy LnNldF9wYXNzd29yZF9jbGVhcnRleHQoIG5ld19wYXNzICkKICAgICAgICAgICAgICAgICAgICAg ICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRkKCByZXNldF91c2VyICkKICAgICAgICAgICAgICAgICAg ICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQogICAgICAgICAgICAgICAgICAgICAgICAg dHJhbnMubG9nX2V2ZW50KCAiVXNlciByZXNldCBwYXNzd29yZDogJXMiICUgZW1haWw9CiApCi0g ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0zRCAiUGFzc3dvcmQgaGFzIGJlZW4gcmVz ZXQgYW5kIGVtYWlsZWQgdD0KbzogJXMuICA8YSBocmVmPTNEJyVzJz5DbGljayBoZXJlPC9hPiB0 byByZXR1cm4gdG8gdGhlIGxvZ2luIGZvcm0uIiAlICggZXNjPQphcGUoIGVtYWlsICksIHdlYi51 cmxfZm9yKCBjb250cm9sbGVyPTNEJ3VzZXInLCBhY3Rpb249M0QnbG9naW4nLCBub3JlZGlyZWM9 CnQ9M0QndHJ1ZScgKSApCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6 CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPTNEICdlcnJvcicKICAgICAgICAgICAg ICAgICAgICAgICAgIG1lc3NhZ2UgPTNEICdGYWlsZWQgdG8gcmVzZXQgcGFzc3dvcmQ6ICVzJyAl IHN0ciggPQplICkKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oICdVbmFi bGUgdG8gcmVzZXQgcGFzc3dvcmQuJyApCi0gICAgICAgICAgICBlbGlmIGVtYWlsIGlzIG5vdCBO b25lOgotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPTNEICJUaGUgc3BlY2lmaWVkIHVzZXIgZG9l cyBub3QgZXhpc3QuIgotICAgICAgICAgICAgICAgIHN0YXR1cyA9M0QgJ2Vycm9yJwotICAgICAg ICAgICAgZWxpZiBlbWFpbCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGVtYWlsID0zRCAiIgog ICAgICAgICByZXR1cm4gdHJhbnMuZmlsbF90ZW1wbGF0ZSggJy91c2VyL3Jlc2V0X3Bhc3N3b3Jk Lm1ha28nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0zRG1l c3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9M0RzdGF0 dXMgKQoKZGlmZiAtciA0MjhlNThmY2QzM2E5ZjkzNDI5MmZjYWRhYzg0MGM3NTc4M2JjZDYyIC1y IGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0PQo3YmY0MmU4NmY0ZmQ0ZjIxYiB0ZW1wbGF0ZXMvdXNl ci9jaGFuZ2VfcGFzc3dvcmQubWFrbwotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy91c2Vy L2NoYW5nZV9wYXNzd29yZC5tYWtvCkBAIC0wLDAgKzEsMzEgQEAKKzwlaW5oZXJpdCBmaWxlPTNE Ii9iYXNlLm1ha28iLz4KKzwlbmFtZXNwYWNlIGZpbGU9M0QiL21lc3NhZ2UubWFrbyIgaW1wb3J0 PTNEInJlbmRlcl9tc2ciIC8+CisKKyVpZiBtZXNzYWdlOgorICAgICR7cmVuZGVyX21zZyggbWVz c2FnZSwgc3RhdHVzICl9CislZW5kaWYKKworPGRpdiBjbGFzcz0zRCJ0b29sRm9ybSI+CisgICAg PGZvcm0gbmFtZT0zRCJjaGFuZ2VfcGFzc3dvcmQiIGlkPTNEImNoYW5nZV9wYXNzd29yZCIgYWN0 aW9uPTNEIiR7aC51cj0KbF9mb3IoIGNvbnRyb2xsZXI9M0QndXNlcicsIGFjdGlvbj0zRCdjaGFu Z2VfcGFzc3dvcmQnICl9IiBtZXRob2Q9M0QicG9zdCIgPgorICAgICAgICA8ZGl2IGNsYXNzPTNE InRvb2xGb3JtVGl0bGUiPkNoYW5nZSBQYXNzd29yZDwvZGl2PgorICAgICAgICAlaWYgdG9rZW46 CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJoaWRkZW4iIG5hbWU9M0QidG9rZW4iIHZhbHVl PTNEIiR7dG9rZW58aH0iLz4KKyAgICAgICAgJWVsaWYgbm90IGlzX2FkbWluOgorICAgICAgICAg ICAgPGRpdiBjbGFzcz0zRCJmb3JtLXJvdyI+CisgICAgICAgICAgICAgICAgPGxhYmVsPkN1cnJl bnQgcGFzc3dvcmQ6PC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJwYXNz d29yZCIgbmFtZT0zRCJjdXJyZW50IiB2YWx1ZT0zRCIiIHNpemU9Cj0zRCI0MCIvPgorICAgICAg ICAgICAgPC9kaXY+CisgICAgICAgICVlbmRpZgorICAgICAgICA8ZGl2IGNsYXNzPTNEImZvcm0t cm93Ij4KKyAgICAgICAgICAgIDxsYWJlbD5OZXcgcGFzc3dvcmQ6PC9sYWJlbD4KKyAgICAgICAg ICAgIDxpbnB1dCB0eXBlPTNEInBhc3N3b3JkIiBuYW1lPTNEInBhc3N3b3JkIiB2YWx1ZT0zRCIi IHNpemU9M0QiPQo0MCIvPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0zRCJm b3JtLXJvdyI+CisgICAgICAgICAgICA8bGFiZWw+Q29uZmlybTo8L2xhYmVsPgorICAgICAgICAg ICAgPGlucHV0IHR5cGU9M0QicGFzc3dvcmQiIG5hbWU9M0QiY29uZmlybSIgdmFsdWU9M0QiIiBz aXplPTNEIjQ9CjAiLz4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9M0QiZm9y bS1yb3ciPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9M0Qic3VibWl0IiBuYW1lPTNEImNoYW5n ZV9wYXNzd29yZF9idXR0b24iIHZhbHVlPQo9M0QiU2F2ZSIvPgorICAgICAgICA8L2Rpdj4KKyAg ICA8L2Zvcm0+Cis8L2Rpdj4KCmRpZmYgLXIgNDI4ZTU4ZmNkMzNhOWY5MzQyOTJmY2FkYWM4NDBj NzU3ODNiY2Q2MiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzND0KN2JmNDJlODZmNGZkNGYyMWIg dGVtcGxhdGVzL3VzZXIvaW5kZXgubWFrbwotLS0gYS90ZW1wbGF0ZXMvdXNlci9pbmRleC5tYWtv CisrKyBiL3RlbXBsYXRlcy91c2VyL2luZGV4Lm1ha28KQEAgLTYsNyArNiw4IEBACiAgICAgPHVs PgogICAgICAgICAlaWYgdC53ZWJhcHAubmFtZSA9M0Q9M0QgJ2dhbGF4eSc6CiAgICAgICAgICAg ICAlaWYgbm90IHRyYW5zLmFwcC5jb25maWcudXNlX3JlbW90ZV91c2VyOgotICAgICAgICAgICAg ICAgIDxsaT48YSBocmVmPTNEIiR7aC51cmxfZm9yKCBjb250cm9sbGVyPTNEJ3VzZXInLCBhY3Rp b249M0Q9CidtYW5hZ2VfdXNlcl9pbmZvJywgY250cmxsZXI9M0RjbnRybGxlciApfSI+JHtfKCdN YW5hZ2UgeW91ciBpbmZvcm1hdGlvbicpfT0KPC9hPiAoZW1haWwsIHBhc3N3b3JkLCBldGMuKTwv bGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9M0QiJHtoLnVybF9mb3IoIGNvbnRyb2xs ZXI9M0QndXNlcicsIGFjdGlvbj0zRD0KJ21hbmFnZV91c2VyX2luZm8nLCBjbnRybGxlcj0zRGNu dHJsbGVyICl9Ij4ke18oJ01hbmFnZSB5b3VyIGluZm9ybWF0aW9uJyl9PQo8L2E+IChlbWFpbCwg YWRkcmVzcywgZXRjLik8L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPTNEIiR7aC51 cmxfZm9yKCBjb250cm9sbGVyPTNEJ3VzZXInLCBhY3Rpb249M0Q9CidjaGFuZ2VfcGFzc3dvcmQn ICl9Ij4ke18oJ0NoYW5nZSB5b3VyIHBhc3N3b3JkJyl9PC9hPjwvbGk+CiAgICAgICAgICAgICAl ZW5kaWYKICAgICAgICAgICAgIDxsaT48YSBocmVmPTNEIiR7aC51cmxfZm9yKCBjb250cm9sbGVy PTNEJ3VzZXInLCBhY3Rpb249M0Qnc2V0PQpfZGVmYXVsdF9wZXJtaXNzaW9ucycsIGNudHJsbGVy PTNEY250cmxsZXIgKX0iPiR7XygnQ2hhbmdlIGRlZmF1bHQgcGVybWlzc2k9Cm9ucycpfTwvYT4g Zm9yIG5ldyBoaXN0b3JpZXM8L2xpPjxsaT48YSBocmVmPTNEIiR7aC51cmxfZm9yKCBjb250cm9s bGVyPTNEJz0KdXNlcicsIGFjdGlvbj0zRCdhcGlfa2V5cycsIGNudHJsbGVyPTNEY250cmxsZXIg KX0iPiR7XygnTWFuYWdlIHlvdXIgQVBJIGtlPQp5cycpfTwvYT48L2xpPgoKZGlmZiAtciA0Mjhl NThmY2QzM2E5ZjkzNDI5MmZjYWRhYzg0MGM3NTc4M2JjZDYyIC1yIGEyNWNlNjNjZGNmMDdjYjJk MjBmZjM0PQo3YmY0MmU4NmY0ZmQ0ZjIxYiB0ZW1wbGF0ZXMvdXNlci9pbmZvLm1ha28KLS0tIGEv dGVtcGxhdGVzL3VzZXIvaW5mby5tYWtvCisrKyBiL3RlbXBsYXRlcy91c2VyL2luZm8ubWFrbwpA QCAtNyw3ICs3LDcgQEAKICAgICA8c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0Ij4KICAg ICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7Cj0yMAotICAgICAgICAgICAgZnVu Y3Rpb24gdmFsaWRhdGVTdHJpbmcodGVzdF9zdHJpbmcsIHR5cGUpIHs9MjAKKyAgICAgICAgICAg IGZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKHRlc3Rfc3RyaW5nLCB0eXBlKSB7CiAgICAgICAgICAg ICAgICAgdmFyIG1haWxfcmUgPTNEIC9eKChbXjw+KClbXF1cXC4sOzpcc0BcIl0rKFwuW148Pigp W1xdXFwuLD0KOzpcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwz fVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVxdPQopfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEt Wl17Mix9KSkkLzsKICAgICAgICAgICAgICAgICB2YXIgdXNlcm5hbWVfcmUgPTNEIC9eW2EtejAt OVwtXXs0LDI1NX0kLzsKICAgICAgICAgICAgICAgICBpZiAodHlwZSA9M0Q9M0Q9M0QgJ2VtYWls JykgewpAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9 M0Q9M0Q9M0QgJ3VzZXJuYW1lJyl7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VybmFt ZV9yZS50ZXN0KHRlc3Rfc3RyaW5nKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 PTIwCisgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAgZnVuY3Rpb24gcmVuZGVyRXJyb3Io bWVzc2FnZSkgewogICAgICAgICAgICAgICAgICQoIi5kb25lbWVzc2FnZSIpLmhpZGUoKTsKQEAg LTI2LDggKzI2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9M0QgImVy cm9ybWVzc2FnZSI7CiAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPTNEIG1lc3Nh Z2U7CiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKCBkaXYs IGRvY3VtZW50LmJvZHkuZmlyc3RDaD0KaWxkICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZ1bmN0aW9uIHJl bmRlckRvbmUobWVzc2FnZSkgewogICAgICAgICAgICAgICAgICQoIi5lcnJvcm1lc3NhZ2UiKS5o aWRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCQoIi5kb25lbWVzc2FnZSIpLmxlbmd0aCA9M0Q9 M0Q9M0QgMSkgewpAQCAtMzcsOCArMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICBkaXYuY2xh c3NOYW1lID0zRCAiZG9uZW1lc3NhZ2UiOwogICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJI VE1MID0zRCBtZXNzYWdlOwogICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2Vy dEJlZm9yZSggZGl2LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2g9CmlsZCApOwotICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQo9MjAKICAgICAgICAg ICAgIG9yaWdpbmFsX2VtYWlsID0zRCAkKCAnI2VtYWlsX2lucHV0JyApLnZhbCgpOwogICAgICAg ICAgICAgb3JpZ2luYWxfdXNlcm5hbWUgPTNEICQoICcjbmFtZV9pbnB1dCcgKS52YWwoKTsKQEAg LTU1LDcgKzU2LDYgQEAKICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuX2lucHV0ID0zRCAnPGlu cHV0IHR5cGU9M0QiaGlkZGVuIiBpZD0zRCJsb2dpbl9pPQpuZm9fYnV0dG9uIiBuYW1lPTNEImxv Z2luX2luZm9fYnV0dG9uIiB2YWx1ZT0zRCJTdWJtaXQiLz4nOwogICAgICAgICAgICAgICAgICQo ICcjc2VuZCcgKS5hdHRyKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7CiAgICAgICAgICAgICAg ICAgJCggIiNlbWFpbF9pbnB1dCIgKS5iZWZvcmUoIGhpZGRlbl9pbnB1dCApOwotICAgICAgICAg ICAgICAgPTIwCiAgICAgICAgICAgICAgICAgaWYgKCBvcmlnaW5hbF9lbWFpbCAhPTNEPTNEIGVt YWlsICl7CiAgICAgICAgICAgICAgICAgICAgIGlmICggZW1haWwubGVuZ3RoID4gMjU1ICl7IHJl bmRlckVycm9yKCBlcnJvcl90ZXh0X2VtYT0KaWxfbG9uZyApOyB2YWxpZEZvcm0gPTNEIGZhbHNl OyB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAhdmFsaWRhdGVTdHJpbmcoIGVtYWls LCAiZW1haWwiICkgKXsgcmVuZGVyRT0KcnJvciggZXJyb3JfdGV4dF9lbWFpbCApOyB2YWxpZEZv cm0gPTNEIGZhbHNlOyB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCBu b3RoaW5nX2NoYW5nZWQgKXsKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRG9uZSggIk5vdGhp bmcgaGFzIGNoYW5nZWQuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp ZiAoICF2YWxpZEZvcm0gIHx8IG5vdGhpbmdfY2hhbmdlZCApIHs9MjAKKyAgICAgICAgICAgICAg ICBpZiAoICF2YWxpZEZvcm0gIHx8IG5vdGhpbmdfY2hhbmdlZCApIHsKICAgICAgICAgICAgICAg ICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAvLyByZWFjdGl2 YXRlIHRoZSBidXR0b24gaWYgdGhlIGZvcm0gd2Fzbid0IHN1Ym1pdHRlZAogICAgICAgICAgICAg ICAgICAgICAkKCAnI3NlbmQnICkucmVtb3ZlQXR0ciggJ2Rpc2FibGVkJyApOwpAQCAtMTI3LDI3 ICsxMjcsNCBAQAogICAgICAgICAgICAgPC9kaXY+PC9mb3JtPjwvZGl2PgotICAgIDxwPjwvcD4K LSAgICA8ZGl2IGNsYXNzPTNEInRvb2xGb3JtIj4KLSAgICAgICAgPGZvcm0gbmFtZT0zRCJjaGFu Z2VfcGFzc3dvcmQiIGlkPTNEImNoYW5nZV9wYXNzd29yZCIgYWN0aW9uPTNEIiR7PQpoLnVybF9m b3IoIGNvbnRyb2xsZXI9M0QndXNlcicsIGFjdGlvbj0zRCdlZGl0X2luZm8nLCBjbnRybGxlcj0z RGNudHJsbGVyLCA9CnVzZXJfaWQ9M0R0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHVzZXIuaWQg KSApfSIgbWV0aG9kPTNEInBvc3QiID4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9M0QidG9vbEZv cm1UaXRsZSI+Q2hhbmdlIFBhc3N3b3JkPC9kaXY+Ci0gICAgICAgICAgICAlaWYgbm90IGlzX2Fk bWluOgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9M0QiZm9ybS1yb3ciPgotICAgICAgICAg ICAgICAgICAgICA8bGFiZWw+Q3VycmVudCBwYXNzd29yZDo8L2xhYmVsPgotICAgICAgICAgICAg ICAgICAgICA8aW5wdXQgdHlwZT0zRCJwYXNzd29yZCIgbmFtZT0zRCJjdXJyZW50IiB2YWx1ZT0z RCIiIHM9Cml6ZT0zRCI0MCIvPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAg JWVuZGlmCi0gICAgICAgICAgICA8ZGl2IGNsYXNzPTNEImZvcm0tcm93Ij4KLSAgICAgICAgICAg ICAgICA8bGFiZWw+TmV3IHBhc3N3b3JkOjwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPGlucHV0 IHR5cGU9M0QicGFzc3dvcmQiIG5hbWU9M0QicGFzc3dvcmQiIHZhbHVlPTNEIiIgc2l6ZT0KPTNE IjQwIi8+Ci0gICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDxkaXYgY2xhc3M9M0QiZm9y bS1yb3ciPgotICAgICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtOjwvbGFiZWw+Ci0gICAgICAg ICAgICAgICAgPGlucHV0IHR5cGU9M0QicGFzc3dvcmQiIG5hbWU9M0QiY29uZmlybSIgdmFsdWU9 M0QiIiBzaXplPQo9M0QiNDAiLz4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGRp diBjbGFzcz0zRCJmb3JtLXJvdyI+Ci0gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9M0Qic3Vi bWl0IiBuYW1lPTNEImNoYW5nZV9wYXNzd29yZF9idXR0b24iIHZhbD0KdWU9M0QiU2F2ZSIvPgot ICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZm9ybT4KLSAgICA8L2Rpdj48LyVkZWY+CgoK aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzNiYmVh NGZmZjlmMi8KQ2hhbmdlc2V0OiAgIDNiYmVhNGZmZjlmMgpVc2VyOiAgICAgICAgY2FybGZlYmVy aGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0xNCAxMzo1OTozNCswMDowMApTdW1tYXJ5OiAgICAg TWVyZ2VkIGdhbGF4eS9nYWxheHktY2VudHJhbCBpbnRvIGRlZmF1bHQKQWZmZWN0ZWQgIzogIDM5 IGZpbGVzCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIg LXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IC5oZ3RhZ3MKLS0t IGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC04LDE2ICs4LDE4IEBACiA1ZTYwNWVkNjA2OWZl NGM1Y2E5ODc1ZTk1ZTkxYjI3MTM0OTllOGNhIHJlbGVhc2VfMjAxNC4wMi4xMAogOWU1MzI1MWIw YjdlOTNiOTU2MzAwOGEyYjExMmYyZTgxNWEwNGJiYyByZWxlYXNlXzIwMTQuMDQuMTQKIDdlMjU3 YzdiMTBiYWRiNjU3NzJiMTUyOGNiNjFkNTgxNzVhNDJlNDcgcmVsZWFzZV8yMDE0LjA2LjAyCi03 YTRkMzIxYzBlMzhmYTI2M2VhODNkMjlhMzVhNjA4YzMxODFmY2JhIGxhdGVzdF8yMDE0LjA2LjAy Ci05NjYxYjlkNWQ1YjMzMDQ4M2FlM2FkMjIzNjQxMGUwZWZhYTdjNTAwIGxhdGVzdF8yMDE0LjA0 LjE0Ci02YjBiZDkzMDM4YTg0M2IxNTg1MTU1ZjBkNjNmMGVlYTI0NTljNzBiIGxhdGVzdF8yMDEz LjAxLjEzCi0zZTYyMDYwYjE0YjlhZmM0NmY4ZTBlYzAyZTFhNDUwMGQ3N2RiOWUxIGxhdGVzdF8y MDEzLjAyLjA4Ci00MjUwMDliM2ZmNGQ4YjY3ZDI4MTIyNTNiMjIxZjNjNGY0YThkMWUzIGxhdGVz dF8yMDEzLjA0LjAxCi05NzEzZDg2MzkyZWY5ODVmZmNkYzM5ZmYwYzhkZGY1MWExZjljZTQ3IGxh dGVzdF8yMDEzLjA2LjAzCi05ZWQ4NGNkMjA4ZTA3ZTg5ODVlYzkxN2NiMDI1ZmNiYmIwOWVkY2Zi IGxhdGVzdF8yMDEzLjA4LjEyCi04MWZiZTI1YmQwMmVkY2Q1MzA2NWU4ZTQ0NzZkZDFkZmI1YTcy Y2YyIGxhdGVzdF8yMDEzLjExLjA0Ci0yYTc1NmNhMmNiMTgyNmRiNzc5NjAxOGU3N2QxMmUyZGQ3 YjY3NjAzIGxhdGVzdF8yMDE0LjAyLjEwCis0MTQ1NDE3YTZlMWMxM2Y4MmEzZGUzNjVhYWRlZjBm YjNlZDdhYjE0IGxhdGVzdF8yMDE0LjA2LjAyCis4ZjlkY2FjMDMzNjk0ZTRjYWJjZjVkYWFlNWNj YTFjZmVmYmU5NjdmIGxhdGVzdF8yMDE0LjA0LjE0Cis5YzMyM2FhZDRmZmRkNjVhM2RlYjA2YTRh MzZmNmIyYzUxMTVhNjBmIGxhdGVzdF8yMDEzLjAxLjEzCitiOTg2YzE4NGJlODg5NDdiNWQxZDkw YmU3ZjM2Y2ZkMjYyN2RkOTM4IGxhdGVzdF8yMDEzLjAyLjA4CitkZWM5NDMxZDY2YjgzN2EyMDhl MmYwNjBkOTBhZmQ5MTNjNzIxMjI3IGxhdGVzdF8yMDEzLjA0LjAxCisxOWU1NmU2NmIwYjM0NGM2 ZTJhZmE0NTQxZjY5ODhlNGZkYjlhZjI5IGxhdGVzdF8yMDEzLjA2LjAzCitjZWU5MDNiOGIzZWVl OTE0NTYyN2VlODk3NDI1NTVkYWM1ODE3OTFlIGxhdGVzdF8yMDEzLjA4LjEyCis3ZDVhYTE5YTE2 NmNiYTkwMzllMTVmMzM4YTFlM2ZjOTI0YzQzZDNhIGxhdGVzdF8yMDEzLjExLjA0CiswYzAwMGNj MmY5YzA1YmY0YzFjMmJjM2ExMDIxNTAxNGZkNjRlNjk2IGxhdGVzdF8yMDE0LjAyLjEwCiBjYTQ1 Yjc4YWRiNDE1MmZjNmU3Mzk1NTE0ZDQ2ZWJhNmI3ZDBiODM4IHJlbGVhc2VfMjAxNC4wOC4xMQot NTQ4YWIyNDY2N2Q2MjA2NzgwMjM3YmQ4MDdmN2Q4NTdhNDg0YzQ2MSBsYXRlc3RfMjAxNC4wOC4x MQorODE1MDAyNGMwZTZmYzVhZWYzMDMzY2Y4YWFhNTc0ODk2ZjZiNWQwZCBsYXRlc3RfMjAxNC4w OC4xMQogMjA5Mjk0ODkzN2FjMzBlZjgyZjcxNDYzYTIzNWM2NmQzNDk4NzA4OCByZWxlYXNlXzIw MTQuMTAuMDYKLTU4MzRiMTA2NjQ2MmRkMjE5ZjY3YzFjM2NiZDc3Yzc4ZTdjZjNhNmMgbGF0ZXN0 XzIwMTQuMTAuMDYKK2M0MzdiMjgzNDhhOTM0NWRiODQzM2U1YjRmMGUwNWVjOGZiNmMzOGEgbGF0 ZXN0XzIwMTQuMTAuMDYKKzJlOGRkMjk0OWRkM2VlZTBmNTZmOWEzYTVlYmYxYjJiYWNhMjRhZWUg cmVsZWFzZV8yMDE1LjAxLjEzCisyZThkZDI5NDlkZDNlZWUwZjU2ZjlhM2E1ZWJmMWIyYmFjYTI0 YWVlIGxhdGVzdF8yMDE1LjAxLjEzCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0N2Jm NDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBh OWE1IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCi0t LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCisr KyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCkBA IC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgIHRoaXMudHJlZS5maW5hbGl6ZSgpOwogICAg ICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JzCi0gICAgICAgICAgICBpZiAo IXRoaXMud29ya2Zsb3cgJiYgb3B0aW9ucy5lcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRp b25zLmVycm9ycykgewogICAgICAgICAgICAgICAgIHZhciBlcnJvcl9tZXNzYWdlcyA9M0QgdGhp cy50cmVlLm1hdGNoUmVzcG9uc2Uob3B0aW9ucy5lcnI9Cm9ycyk7CiAgICAgICAgICAgICAgICAg Zm9yICh2YXIgaW5wdXRfaWQgaW4gZXJyb3JfbWVzc2FnZXMpIHsKICAgICAgICAgICAgICAgICAg ICAgdGhpcy5oaWdobGlnaHQoaW5wdXRfaWQsIGVycm9yX21lc3NhZ2VzW2lucHV0X2lkXSwgdHJ1 PQplKTsKQEAgLTEzMSw2ICsxMzEsOSBAQAogICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1l bnRfbGlzdFtpXS5yZXNldCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIHJlZnJlc2gKKyAgICAgICAgICAgIHRoaXMu dHJpZ2dlcigncmVmcmVzaCcpOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLyoqIFJlbmRlcnMg dGhlIFVJIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB0aGUgZm9ybQpAQCAtMTQ1LDcgKzE0OCw3IEBA CiAgICAgICAgICAgICAvLyBidXR0b24gZm9yIHZlcnNpb24gc2VsZWN0aW9uCiAgICAgICAgICAg ICB2YXIgcmVxdWlyZW1lbnRzX2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbkljb24oewogICAgICAg ICAgICAgICAgIGljb24gICAgOiAnZmEtaW5mby1jaXJjbGUnLAotICAgICAgICAgICAgICAgIHRp dGxlICAgOiAnUmVxdWlyZW1lbnRzJywKKyAgICAgICAgICAgICAgICB0aXRsZSAgIDogKCF0aGlz LndvcmtmbG93ICYmICdSZXF1aXJlbWVudHMnKSB8fCBudWxsLAogICAgICAgICAgICAgICAgIHRv b2x0aXAgOiAnRGlzcGxheSB0b29sIHJlcXVpcmVtZW50cycsCiAgICAgICAgICAgICAgICAgb25j bGljayA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJs ZSkgewpAQCAtMTcwLDcgKzE3Myw3IEBACiAgICAgICAgICAgICAvLyBidXR0b24gZm9yIHZlcnNp b24gc2VsZWN0aW9uCiAgICAgICAgICAgICB2YXIgdmVyc2lvbnNfYnV0dG9uID0zRCBuZXcgVWku QnV0dG9uTWVudSh7CiAgICAgICAgICAgICAgICAgaWNvbiAgICA6ICdmYS1jdWJlcycsCi0gICAg ICAgICAgICAgICAgdGl0bGUgICA6ICdWZXJzaW9ucycsCisgICAgICAgICAgICAgICAgdGl0bGUg ICA6ICghdGhpcy53b3JrZmxvdyAmJiAnVmVyc2lvbnMnKSB8fCBudWxsLAogICAgICAgICAgICAg ICAgIHRvb2x0aXAgOiAnU2VsZWN0IGFub3RoZXIgdG9vbCB2ZXJzaW9uJwogICAgICAgICAgICAg fSk7CiAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9ucyAmJiBvcHRpb25zLnZlcnNpb25z Lmxlbmd0aCA+IDEpIHsKQEAgLTIwMCw3ICsyMDMsNyBAQAogICAgICAgICAgICAgLy8gYnV0dG9u IG1lbnUKICAgICAgICAgICAgIHZhciBtZW51X2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbk1lbnUo ewogICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtY2FyZXQtZG93bicsCi0gICAgICAgICAg ICAgICAgdGl0bGUgICA6ICdPcHRpb25zJywKKyAgICAgICAgICAgICAgICB0aXRsZSAgIDogKCF0 aGlzLndvcmtmbG93ICYmICdPcHRpb25zJykgfHwgbnVsbCwKICAgICAgICAgICAgICAgICB0b29s dGlwIDogJ1ZpZXcgYXZhaWxhYmxlIG9wdGlvbnMnCiAgICAgICAgICAgICB9KTsKICAgICAgICAg ICAgPTIwCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIg LXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IGNsaWVudC9nYWxh eHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcwotLS0gYS9jbGllbnQv Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKKysrIGIvY2xp ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCkBAIC05 LDYgKzksNyBAQAogICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAg ICAgICAgICAvLyBsaW5rIHdpdGggbm9kZSByZXByZXNlbnRhdGlvbiBpbiB3b3JrZmxvdyBtb2R1 bGUKICAgICAgICAgICAgIHRoaXMubm9kZSA9M0Qgd29ya2Zsb3cuYWN0aXZlX25vZGU7CisKICAg ICAgICAgICAgIGlmICghdGhpcy5ub2RlKSB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1 ZygnRkFJTEVEIC0gdG9vbHMtZm9ybS13b3JrZmxvdzppbml0aWFsaXplKCkgLT0KIE5vZGUgbm90 IGZvdW5kIGluIHdvcmtmbG93LicpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4LDYg KzE5LDIyIEBACiAgICAgICAgICAgICB0aGlzLndvcmtmbG93ID0zRCB0cnVlOwogICAgICAgICAg ICAgdGhpcy5vcHRpb25zID0zRCBvcHRpb25zOwo9MjAKKyAgICAgICAgICAgIC8vIGRlY2xhcmUg ZmllbGRzIGFzIG9wdGlvbmFsCisgICAgICAgICAgICBVdGlscy5kZWVwZWFjaChvcHRpb25zLmlu cHV0cywgZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUpIHsK KyAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25hbCA9M0QgKFsnZGF0YScsICdkYXRhX2hp ZGRlbicsICdoaWRkZW4nLCAnPQpkcmlsbF9kb3duJ10pLmluZGV4T2YoaXRlbS50eXBlKSA9M0Q9 M0QgLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICA9MjAKKyAg ICAgICAgICAgIC8vIGRlY2xhcmUgY29uZGl0aW9uYWwgZmllbGRzIGFzIG5vdCBvcHRpb25hbAor ICAgICAgICAgICAgVXRpbHMuZGVlcGVhY2gob3B0aW9ucy5pbnB1dHMsIGZ1bmN0aW9uKGl0ZW0p IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlKSB7CisgICAgICAgICAgICAgICAgICAg IGlmIChpdGVtLnR5cGUgPTNEPTNEICdjb25kaXRpb25hbCcpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGl0ZW0udGVzdF9wYXJhbS5vcHRpb25hbCA9M0QgZmFsc2U7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKwogICAgICAgICAg ICAgLy8gbG9hZCBleHRlbnNpb24KICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwogICAg ICAgICAgICAgVXRpbHMuZ2V0KHsKQEAgLTM4LDYgKzU1LDcgQEAKICAgICAgICAgICAgIGlucHV0 c1tVdGlscy51dWlkKCldID0zRCB7CiAgICAgICAgICAgICAgICAgbGFiZWwgICA6ICdFZGl0IFN0 ZXAgQXR0cmlidXRlcycsCiAgICAgICAgICAgICAgICAgdHlwZSAgICA6ICdzZWN0aW9uJywKKyAg ICAgICAgICAgICAgICBleHBhbmQgIDogdGhpcy5ub2RlLmFubm90YXRpb24sCiAgICAgICAgICAg ICAgICAgaW5wdXRzICA6IFt7CiAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQW5ub3Rh dGlvbiAvIE5vdGVzJywKICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICA6ICdhbm5vdGF0aW9u JywKQEAgLTE2MCw3ICsxNzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAg OiAnYm9vbGVhbicsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJ2ZhbHNlJywK ICAgICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnZmFsc2UnLAotICAgICAgICAgICAg ICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlvbiB3aWxsIHNlbmQgYW4gZW1haWwgbm90 aWZ5aW49CmcgeW91IHdoZW4gdGhlIGpvYiBpcyBkb25lLicKKyAgICAgICAgICAgICAgICAgICAg aGVscCAgICAgICAgOiAnVGhpcyBhY3Rpb24gd2lsbCBzZW5kIGFuIGVtYWlsIG5vdGlmeWluPQpn IHlvdSB3aGVuIHRoZSBqb2IgaXMgZG9uZS4nLAorICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk ICAgICA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdob3N0JyAgOiB3aW5kb3cubG9jYXRp b24uaG9zdAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSx7CiAgICAg ICAgICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0RlbGV0ZUludGVybWVkaWF0ZXNBY3Rpb24n LAogICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdEZWxldGUgbm9uLW91dHB1dHMn LApAQCAtMTczLDMxICsxOTQsNTEgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyB2 aXNpdCBpbnB1dCBub2RlcyBhbmQgZW5yaWNoIGJ5IG5hbWUvdmFsdWUgcGFpcnMgZnJvbSBzZXJ2 ZT0KciBkYXRhCiAgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKLSAgICAgICAgICAgIGZ1 bmN0aW9uIHZpc2l0IChpbnB1dHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGlu cHV0cykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPTNEIGlucHV0c1tpXTsKKyAg ICAgICAgICAgIGZ1bmN0aW9uIHZpc2l0IChoZWFkLCBoZWFkX2xpc3QpIHsKKyAgICAgICAgICAg ICAgICBoZWFkX2xpc3QgPTNEIGhlYWRfbGlzdCB8fCBbXTsKKyAgICAgICAgICAgICAgICBoZWFk X2xpc3QucHVzaChoZWFkKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGhlYWQuaW5w dXRzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9M0QgaGVhZC5pbnB1dHNbaV07 CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5hY3Rpb24pIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGNvbnN0cnVjdCBpZGVudGlmaWVyIGFzIGV4cGVjdGVkIGJ5IGJhY2tlbmQK ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUgPTNEICdwamFfXycgKyBvdXRwdXRf aWQgKyAnX18nICsgaW5wdXQuPQphY3Rpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo aW5wdXQuYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5uYW1l ICs9M0QgJ19fJyArIGlucHV0LmFyZ3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICA9MjAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1v ZGlmeSBuYW1lcyBvZiBwYXlsb2FkIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGlucHV0LnBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZh ciBwX2lkIGluIGlucHV0LnBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFyIHAgPTNEIGlucHV0LnBheWxvYWRbcF9pZF07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0LnBheWxvYWRbaW5wdXQubmFtZSArICdfXycgKyBwX2lkXSA9Cj0zRCBw OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgID0yMAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzL3Zlcmlm eSBleGlzdGVuY2Ugb2YgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0zRCBz ZWxmLnBvc3Rfam9iX2FjdGlvbnNbaW5wdXQuYWN0aW9uICsgb3V0PQpwdXRfaWRdOwogICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBtYXJrIGFzIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg aiBpbiBoZWFkX2xpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZF9s aXN0W2pdLmV4cGFuZCA9M0QgdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5wdXQgZmllbGQgdmFsdWUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuYXJndW1lbnQpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPTNEIGQuYWN0aW9uX2FyZ3Vt ZW50cyAmJiBkLmFjPQp0aW9uX2FyZ3VtZW50c1tpbnB1dC5hcmd1bWVudF0gfHwgaW5wdXQudmFs dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPTNEICd0cnVlJzsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaW5wdXRz KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQoaW5wdXQuaW5wdXRzKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIHN1YiBzZWN0aW9uCisgICAgICAgICAgICAgICAg ICAgIGlmIChpbnB1dC5pbnB1dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGlu cHV0LCBoZWFkX2xpc3Quc2xpY2UoMCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlzaXQoaW5wdXRfY29uZmln LmlucHV0cyk7Ci0gICAgICAgICAgID0yMAorICAgICAgICAgICAgdmlzaXQoaW5wdXRfY29uZmln KTsKKyAgICAgICAgICAgICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyByZXR1cm4gZmlu YWwgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvbmZpZzsKICAgICAg ICAgfSwKQEAgLTIwNSw2ICsyNDYsMTUgQEAKICAgICAgICAgLyoqIEJ1aWxkcyBhIG5ldyBtb2Rl bCB0aHJvdWdoIGFwaSBjYWxsIGFuZCByZWNyZWF0ZXMgdGhlIGVudGlyZSBmPQpvcm0KICAgICAg ICAgKi8KICAgICAgICAgX2J1aWxkTW9kZWw6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgR2Fs YXh5Lm1vZGFsLnNob3coeworICAgICAgICAgICAgICAgIHRpdGxlICAgOiAnQ29taW5nIHNvb24u Li4nLAorICAgICAgICAgICAgICAgIGJvZHkgICAgOiAnVGhpcyBmZWF0dXJlIGhhcyBub3QgYmVl biBpbXBsZW1lbnRlZCB5ZXQuJywKKyAgICAgICAgICAgICAgICBidXR0b25zIDogeworICAgICAg ICAgICAgICAgICAgICAnQ2xvc2UnIDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBHYWxheHkubW9kYWwuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAgICAgICAgPTIwCiAgICAg ICAgIC8qKiBSZXF1ZXN0IGEgbmV3IG1vZGVsIGZvciBhbiBhbHJlYWR5IGNyZWF0ZWQgdG9vbCBm b3JtIGFuZCB1cGRhdD0KZXMgdGhlIGZvcm0gaW5wdXRzCkBAIC0yMzEsNyArMjgxLDcgQEAKICAg ICAgICAgICAgICAgICBkYXRhICAgIDogY3VycmVudF9zdGF0ZSwKICAgICAgICAgICAgICAgICBz dWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUg bm9kZSBpbiB3b3JrZmxvdyBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5ub2RlLnVw ZGF0ZV9maWVsZF9kYXRhKGRhdGEsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzZWxmLm5v ZGUudXBkYXRlX2ZpZWxkX2RhdGEoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgPTIwCiAgICAg ICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAg IHNlbGYuZGVmZXJyZWQuZG9uZShwcm9jZXNzX2lkKTsKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2Ni MmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJh NjU5OTI0MDNjMGE5YTUgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1pbnB1 dC5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWlucHV0Lmpz CisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtaW5wdXQuanMKQEAg LTEyLDYgKzEyLDcgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBsaW5rIGZpZWxk CiAgICAgICAgICAgICB0aGlzLmZpZWxkID0zRCBvcHRpb25zLmZpZWxkOworICAgICAgICAgICAg dGhpcy5kZWZhdWx0dmFsdWUgPTNEIG9wdGlvbnMuZGVmYXVsdHZhbHVlOwogICAgICAgICAgICA9 MjAKICAgICAgICAgICAgIC8vIHNldCBlbGVtZW50CiAgICAgICAgICAgICB0aGlzLnNldEVsZW1l bnQodGhpcy5fdGVtcGxhdGUob3B0aW9ucykpOwpAQCAtMjUsOCArMjYsMTMgQEAKICAgICAgICAg ICAgIC8vIGFkZCBmaWVsZCBlbGVtZW50CiAgICAgICAgICAgICB0aGlzLiRmaWVsZC5wcmVwZW5k KHRoaXMuZmllbGQuJGVsKTsKICAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBzdGFydCB3 aXRoIGVuYWJsZWQgb3B0aW9uYWwgZmllbGRzCisgICAgICAgICAgICAvLyBkZWNpZGUgd2V0aGVy IHRvIGV4cGFuZCBvciBjb2xsYXBzZSBvcHRpb25hbCBmaWVsZHMKICAgICAgICAgICAgIHRoaXMu ZmllbGQuc2tpcCA9M0QgZmFsc2U7CisgICAgICAgICAgICB2YXIgdiA9M0QgdGhpcy5maWVsZC52 YWx1ZSAmJiB0aGlzLmZpZWxkLnZhbHVlKCk7CisgICAgICAgICAgICB0aGlzLmZpZWxkLnNraXAg PTNEIEJvb2xlYW4ob3B0aW9ucy5vcHRpb25hbCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgodGhpcy5maWVsZC52YWxpZGF0ZSAmJiAhdGhpcy5maWU9CmxkLnZh bGlkYXRlKCkpIHx8ICF2IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHYgPTNEPTNEIHRoaXMuZGVmYXVsdHZhbHVlKSB8fCAoTj0KdW1iZXIodikgPTNEPTNEIE51 bWJlcih0aGlzLmRlZmF1bHR2YWx1ZSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKEpTT04uc3RyaW5naWZ5KHYpID0zRD0zRCBKU09OLnN0cj0KaW5naWZ5KHRo aXMuZGVmYXVsdHZhbHVlKSkpKTsKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyByZWZy ZXNoIHZpZXcKICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2goKTsKQEAgLTYzLDExICs2OSwxMiBA QAogICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkLnNraXApIHsKICAgICAgICAgICAgICAgICB0 aGlzLiRmaWVsZC5mYWRlSW4oJ2Zhc3QnKTsKICAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZV9v cHRpb25hbC5odG1sKCdEaXNhYmxlJyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcHAudHJpZ2dl cigncmVmcmVzaCcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aGlz LiRmaWVsZC5oaWRlKCk7CiAgICAgICAgICAgICAgICAgdGhpcy4kdGl0bGVfb3B0aW9uYWwuaHRt bCgnRW5hYmxlJyk7CisgICAgICAgICAgICAgICAgdGhpcy5maWVsZC52YWx1ZSAmJiB0aGlzLmZp ZWxkLnZhbHVlKHRoaXMuZGVmYXVsdHZhbHVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHRoaXMuYXBwLnRyaWdnZXIoJ3JlZnJlc2gnKTsKICAgICAgICAgfSwKICAgICAgICA9MjAKICAg ICAgICAgLyoqIE1haW4gVGVtcGxhdGUKQEAgLTgyLDcgKzg5LDcgQEAKICAgICAgICAgICAgPTIw CiAgICAgICAgICAgICAvLyBpcyBvcHRpb25hbAogICAgICAgICAgICAgaWYgKG9wdGlvbnMub3B0 aW9uYWwpIHsKLSAgICAgICAgICAgICAgICB0bXAgKz0zRCAgICAgICAgICAnT3B0aW9uYWw6ICcg KyBvcHRpb25zLmxhYmVsICsKKyAgICAgICAgICAgICAgICB0bXAgKz0zRCAgICAgICAgICBvcHRp b25zLmxhYmVsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPiZuYnNw WzxzcGFuIGNsYXNzPTNEInVpLXRhYmxlLWZvcm0tPQp0aXRsZS1vcHRpb25hbCIvPl08L3NwYW4+ JzsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdG1wICs9M0QgICAgICAg ICAgb3B0aW9ucy5sYWJlbDsKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4 NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUg Y2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCi0tLSBhL2Ns aWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcworKysgYi9jbGll bnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKQEAgLTIzMiw5ICsy MzIsOSBAQAogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIGNyZWF0ZSBpbnB1dCBmaWVs ZCB3cmFwcGVyCiAgICAgICAgICAgICB2YXIgaW5wdXRfZWxlbWVudCA9M0QgbmV3IElucHV0RWxl bWVudCh0aGlzLmFwcCwgewotICAgICAgICAgICAgICAgIGxhYmVsICAgICAgIDogaW5wdXRfZGVm LnRpdGxlLAotICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDogaW5wdXRfZGVmLmhlbHAsCi0g ICAgICAgICAgICAgICAgZmllbGQgICAgICAgOiByZXBlYXQKKyAgICAgICAgICAgICAgICBsYWJl bCAgIDogaW5wdXRfZGVmLnRpdGxlLAorICAgICAgICAgICAgICAgIGhlbHAgICAgOiBpbnB1dF9k ZWYuaGVscCwKKyAgICAgICAgICAgICAgICBmaWVsZCAgIDogcmVwZWF0CiAgICAgICAgICAgICB9 KTsKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBkaXNwbGF5cyBhcyBncm91cGVkIHN1 YnNlY3Rpb24KQEAgLTI5Miw2ICsyOTIsMTEgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICB9KTsKICAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBzaG93IHN1YiBzZWN0aW9u IGlmIHJlcXVlc3RlZAorICAgICAgICAgICAgaWYgKGlucHV0X2RlZi5leHBhbmQpIHsKKyAgICAg ICAgICAgICAgICBwb3J0bGV0LiRoZWFkZXIudHJpZ2dlcignY2xpY2snKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBjcmVhdGUgdGFibGUgcm93CiAgICAg ICAgICAgICB0aGlzLnRhYmxlLmFkZChwb3J0bGV0LiRlbCk7Cj0yMApAQCAtMzEzLDEwICszMTgs MTEgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBjcmVhdGUgaW5wdXQgZmllbGQg d3JhcHBlcgogICAgICAgICAgICAgdmFyIGlucHV0X2VsZW1lbnQgPTNEIG5ldyBJbnB1dEVsZW1l bnQodGhpcy5hcHAsIHsKLSAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6IGlucHV0X2RlZi5s YWJlbCwKLSAgICAgICAgICAgICAgICBvcHRpb25hbCAgICA6IGlucHV0X2RlZi5vcHRpb25hbCwK LSAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6IGlucHV0X2RlZi5oZWxwLAotICAgICAgICAg ICAgICAgIGZpZWxkICAgICAgIDogZmllbGQKKyAgICAgICAgICAgICAgICBsYWJlbCAgICAgICAg ICAgOiBpbnB1dF9kZWYubGFiZWwsCisgICAgICAgICAgICAgICAgZGVmYXVsdHZhbHVlICAgIDog aW5wdXRfZGVmLmRlZmF1bHR2YWx1ZSwKKyAgICAgICAgICAgICAgICBvcHRpb25hbCAgICAgICAg OiBpbnB1dF9kZWYub3B0aW9uYWwsCisgICAgICAgICAgICAgICAgaGVscCAgICAgICAgICAgIDog aW5wdXRfZGVmLmhlbHAsCisgICAgICAgICAgICAgICAgZmllbGQgICAgICAgICAgIDogZmllbGQK ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIGFkZCB0byBl bGVtZW50IGxpc3QKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0 ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgY2xpZW50 L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy10ZW1wbGF0ZS5qcwotLS0gYS9jbGllbnQv Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRlbXBsYXRlLmpzCisrKyBiL2NsaWVudC9n YWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdGVtcGxhdGUuanMKQEAgLTQsNyArNCw3IEBA CiAvLyB0b29sIGZvcm0gdGVtcGxhdGVzCiByZXR1cm4gewogICAgIGhlbHA6IGZ1bmN0aW9uKGNv bnRlbnQpIHsKLSAgICAgICAgcmV0dXJuICAnPGRpdiBjbGFzcz0zRCJ0b29sSGVscCI+JyArCisg ICAgICAgIHJldHVybiAgJzxkaXYgY2xhc3M9M0QidG9vbEhlbHAiIHN0eWxlPTNEIm92ZXJmbG93 OiBhdXRvOyI+JyArCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPTNEInRvb2xIZWxw Qm9keSI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICsKICAgICAgICAgICAg ICAgICAgICAgJzwvZGl2PicgKwoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQy ZTg2ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlh NSBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKLS0tIGEvY2xp ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCisrKyBiL2NsaWVudC9n YWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcwpAQCAtMTIyLDEzICsxMjIsMjEg QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0zRCBwYXRjaFtp bnB1dC50eXBlXSh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9MjAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gaGFuZGxlIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFmaWVsZC5za2lwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZmllbGQudmFsaWRhdGUgJiYgIWZpZWxkLnZhbGlkYXRlKD0KdmFsdWUpKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzaW1wbGUgdmFsdWUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5za2lwIHx8IHNlbGYu YXBwLndvcmtmbG93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZmllbGQudmFsaWRhdGUgJiYgIWZpZWxkLnZhbGlkYXRlKD0KKSkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0zRCBudWxsOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGlucHV0Lmlnbm9yZSA9M0Q9M0Q9M0QgdW5kZWZpbmVkIHw9CnwgKHZhbHVlICYmIGlu cHV0Lmlnbm9yZSAhPTNEIHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGlucHV0Lmlnbm9yZSA9M0Q9M0Q9M0QgdW5kZWZpbmVkIHw9CnwgKHZhbHVlICE9 M0Q9M0QgbnVsbCAmJiBpbnB1dC5pZ25vcmUgIT0zRCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdmFsdWUgdG8gc3VibWlzc2lvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAoam9iX2lucHV0X2lkLCBp bnB1dC5pZCwgdmFsdWU9Cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPTIwCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHBheWxvYWQgdG8gc3Vi bWlzc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1 dC5wYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciAodmFyIHBfaWQgaW4gaW5wdXQucGF5bG9hZD0KKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgKHBfaWQsIGlucHV0LmlkLCBpbnB1dD0K LnBheWxvYWRbcF9pZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKZGlmZiAtciBhMjVjZTYz Y2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVl MTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvdXRpbHMvdXRpbHMu anMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL3V0aWxzL3V0aWxzLmpzCisrKyBiL2NsaWVu dC9nYWxheHkvc2NyaXB0cy91dGlscy91dGlscy5qcwpAQCAtNiw2ICs2LDE4IEBACiAvLyBkZXBl bmRlbmNpZXMKIGRlZmluZShbImxpYnMvdW5kZXJzY29yZSJdLCBmdW5jdGlvbihfKSB7Cj0yMAor LyoqIFRyYXZlcnNlIHRocm91Z2gganNvbgorKi8KK2Z1bmN0aW9uIGRlZXBlYWNoKGRpY3QsIGNh bGxiYWNrKSB7CisgICAgZm9yICh2YXIgaSBpbiBkaWN0KSB7CisgICAgICAgIHZhciBkID0zRCBk aWN0W2ldOworICAgICAgICBpZiAoZCAmJiB0eXBlb2YoZCkgPTNEPTNEICJvYmplY3QiKSB7Cisg ICAgICAgICAgICBjYWxsYmFjayhkKTsKKyAgICAgICAgICAgIGRlZXBlYWNoKGQsIGNhbGxiYWNr KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLyoqCiAgKiBTYW5pdGl6ZS9lc2NhcGUgYSBzdHJp bmcKICAqIEBwYXJhbXtTdHJpbmd9ICAgY29udGVudCAtIENvbnRlbnQgdG8gYmUgc2FuaXRpemVk CkBAIC0yNDgsNyArMjYwLDggQEAKICAgICByZXF1ZXN0OiByZXF1ZXN0LAogICAgIHNhbml0aXpl OiBzYW5pdGl6ZSwKICAgICB0ZXh0aWZ5OiB0ZXh0aWZ5LAotICAgIHZhbGlkYXRlOiB2YWxpZGF0 ZQorICAgIHZhbGlkYXRlOiB2YWxpZGF0ZSwKKyAgICBkZWVwZWFjaDogZGVlcGVhY2gKIH07Cj0y MAogfSk7CgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIg LXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IGxpYi9nYWxheHkv ZGF0YXR5cGVzL21ldGFkYXRhLnB5Ci0tLSBhL2xpYi9nYWxheHkvZGF0YXR5cGVzL21ldGFkYXRh LnB5CisrKyBiL2xpYi9nYWxheHkvZGF0YXR5cGVzL21ldGFkYXRhLnB5CkBAIC0yMCw2ICsyMCw3 IEBACj0yMAogaW1wb3J0IGdhbGF4eS5tb2RlbAogZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgbGlz dGlmeQorZnJvbSBnYWxheHkudXRpbC5vYmplY3Rfd3JhcHBlciBpbXBvcnQgc2FuaXRpemVfbGlz dHNfdG9fc3RyaW5nCiBmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBzdHJpbmdpZnlfZGljdGlvbmFy eV9rZXlzCiBmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBzdHJpbmdfYXNfYm9vbAogZnJvbSBnYWxh eHkudXRpbCBpbXBvcnQgaW5fZGlyZWN0b3J5CkBAIC0yMzIsNiArMjMzLDkgQEAKICAgICBkZWYg dG9fc3RyaW5nKCBzZWxmLCB2YWx1ZSApOgogICAgICAgICByZXR1cm4gc3RyKCB2YWx1ZSApCj0y MAorICAgIGRlZiB0b19zYWZlX3N0cmluZyggc2VsZiwgdmFsdWUgKToKKyAgICAgICAgcmV0dXJu IHNhbml0aXplX2xpc3RzX3RvX3N0cmluZyggc2VsZi50b19zdHJpbmcoIHZhbHVlICkgKQorCiAg ICAgZGVmIG1ha2VfY29weSggc2VsZiwgdmFsdWUsIHRhcmdldF9jb250ZXh0ID0zRCBOb25lLCBz b3VyY2VfY29udGV4dCA9Cj0zRCBOb25lICk6CiAgICAgICAgIHJldHVybiBjb3B5LmRlZXBjb3B5 KCB2YWx1ZSApCj0yMApAQCAtNDgwLDYgKzQ4NCwxMCBAQAogICAgIGRlZiB0b19zdHJpbmcoIHNl bGYsIHZhbHVlICk6CiAgICAgICAgIHJldHVybiAganNvbi5kdW1wcyggdmFsdWUgKQo9MjAKKyAg ICBkZWYgdG9fc2FmZV9zdHJpbmcoIHNlbGYsIHZhbHVlICk6CisgICAgICAgICMgV2UgZG8gbm90 IHNhbml0aXplIGpzb24gZGljdHMKKyAgICAgICAgcmV0dXJuIGpzb24uc2FmZV9kdW1wcyggdmFs dWUgKQorCj0yMAogY2xhc3MgUHl0aG9uT2JqZWN0UGFyYW1ldGVyKCBNZXRhZGF0YVBhcmFtZXRl ciApOgo9MjAKQEAgLTUxMCw2ICs1MTgsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBzdHIoIHNl bGYuc3BlYy5ub192YWx1ZSApCiAgICAgICAgIHJldHVybiB2YWx1ZS5maWxlX25hbWUKPTIwCisg ICAgZGVmIHRvX3NhZmVfc3RyaW5nKCBzZWxmLCB2YWx1ZSApOgorICAgICAgICAjIFdlIGRvIG5v dCBzYW5pdGl6ZSBmaWxlIG5hbWVzCisgICAgICAgIHJldHVybiBzZWxmLnRvX3N0cmluZyggdmFs dWUgKQorCiAgICAgZGVmIGdldF9odG1sX2ZpZWxkKCBzZWxmLCB2YWx1ZT0zRE5vbmUsIGNvbnRl eHQ9M0ROb25lLCBvdGhlcl92YWx1ZXM9Cj0zRE5vbmUsICoqa3dkICk6CiAgICAgICAgIGNvbnRl eHQgPTNEIGNvbnRleHQgb3Ige30KICAgICAgICAgb3RoZXJfdmFsdWVzID0zRCBvdGhlcl92YWx1 ZXMgb3Ige30KCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIx YiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgbGliL2dhbGF4 eS90b29scy9fX2luaXRfXy5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL19faW5pdF9fLnB5Cisr KyBiL2xpYi9nYWxheHkvdG9vbHMvX19pbml0X18ucHkKQEAgLTEyLDggKzEyLDEwIEBACiBpbXBv cnQgdGhyZWFkaW5nCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1cmxsaWIKK2ltcG9ydCBjb3B5Cj0y MAotZnJvbSBnYWxheHkgaW1wb3J0IGVnZ3MKK2Zyb20gZ2FsYXh5IGltcG9ydCBlZ2dzLCB1dGls CisKIGVnZ3MucmVxdWlyZSggIk1hcmt1cFNhZmUiICkgICMgTWFya3VwU2FmZSBtdXN0IGxvYWQg YmVmb3JlIG1ha28KIGVnZ3MucmVxdWlyZSggIk1ha28iICkKIGVnZ3MucmVxdWlyZSggImVsZW1l bnR0cmVlIiApCkBAIC0yMTUwLDkgKzIxNTIsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBO b25lCj0yMAogICAgICAgICAjIGVuc3VyZXMgdGhhdCBpbnB1dCBkaWN0aW9uYXJ5IGlzIGpzb25p ZmlhYmxlCi0gICAgICAgIGRlZiBzYW5pdGl6ZShkaWN0KToKKyAgICAgICAgZGVmIHNhbml0aXpl KGRpY3QsIGtleT0zRCd2YWx1ZScpOgogICAgICAgICAgICAgIyBnZXQgY3VycmVudCB2YWx1ZQot ICAgICAgICAgICAgdmFsdWUgPTNEIGRpY3RbJ3ZhbHVlJ10gaWYgJ3ZhbHVlJyBpbiBkaWN0IGVs c2UgTm9uZQorICAgICAgICAgICAgdmFsdWUgPTNEIGRpY3Rba2V5XSBpZiBrZXkgaW4gZGljdCBl bHNlIE5vbmUKPTIwCiAgICAgICAgICAgICAjIGpzb25pZnkgYnkgdHlwZQogICAgICAgICAgICAg aWYgZGljdFsndHlwZSddIGluIFsnZGF0YSddOgpAQCAtMjE2NywxNSArMjE2OSw4IEBACiAgICAg ICAgICAgICAgICAgdmFsdWUgPTNEIGpzb25pZnkodmFsdWUpCj0yMAogICAgICAgICAgICAgIyB1 cGRhdGUgYW5kIHJldHVybgotICAgICAgICAgICAgZGljdFsndmFsdWUnXSA9M0QgdmFsdWUKLSAg ICAgICAgICAgIHJldHVybiBkaWN0CisgICAgICAgICAgICBkaWN0W2tleV0gPTNEIHZhbHVlCiAg ICAgICAgPTIwCi0gICAgICAgICMgaW5pdGlhbGl6ZSBzdGF0ZSB1c2luZyBkZWZhdWx0IHBhcmFt ZXRlcnMKLSAgICAgICAgZGVmIGluaXRpYWxpemVfc3RhdGUodHJhbnMsIGlucHV0cywgc3RhdGUs IGNvbnRleHQ9M0ROb25lKToKLSAgICAgICAgICAgIGNvbnRleHQgPTNEIEV4cHJlc3Npb25Db250 ZXh0KHN0YXRlLCBjb250ZXh0KQotICAgICAgICAgICAgZm9yIGlucHV0IGluIGlucHV0cy5pdGVy dmFsdWVzKCk6Ci0gICAgICAgICAgICAgICAgc3RhdGVbaW5wdXQubmFtZV0gPTNEIGlucHV0Lmdl dF9pbml0aWFsX3ZhbHVlKHRyYW5zLCBjb250ZT0KeHQpCi0gICA9MjAKICAgICAgICAgIyBjaGVj ayB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIHZhbHVlIGFuZCB1cGRhdGUgaXQgaWYgbmVjZXNzYXJ5 CiAgICAgICAgIGRlZiBjaGVja19zdGF0ZSh0cmFucywgaW5wdXQsIGRlZmF1bHRfdmFsdWUsIGNv bnRleHQpOgogICAgICAgICAgICAgdmFsdWUgPTNEIGRlZmF1bHRfdmFsdWUKQEAgLTIxOTUsNiAr MjE5MCw3IEBACiAgICAgICAgIGRlZiBwb3B1bGF0ZV9zdGF0ZSh0cmFucywgaW5wdXRzLCBzdGF0 ZSwgZXJyb3JzLCBpbmNvbWluZywgcHJlZml4PQo9M0QiIiwgY29udGV4dD0zRE5vbmUgKToKICAg ICAgICAgICAgIGNvbnRleHQgPTNEIEV4cHJlc3Npb25Db250ZXh0KHN0YXRlLCBjb250ZXh0KQog ICAgICAgICAgICAgZm9yIGlucHV0IGluIGlucHV0cy5pdGVydmFsdWVzKCk6CisgICAgICAgICAg ICAgICAgc3RhdGVbaW5wdXQubmFtZV0gPTNEIGlucHV0LmdldF9pbml0aWFsX3ZhbHVlKHRyYW5z LCBjb250ZT0KeHQpCiAgICAgICAgICAgICAgICAga2V5ID0zRCBwcmVmaXggKyBpbnB1dC5uYW1l CiAgICAgICAgICAgICAgICAgaWYgaW5wdXQudHlwZSA9M0Q9M0QgJ3JlcGVhdCc6CiAgICAgICAg ICAgICAgICAgICAgIGdyb3VwX3N0YXRlID0zRCBzdGF0ZVtpbnB1dC5uYW1lXQpAQCAtMjIwNyw3 ICsyMjAzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcF9pbmRleCA8IGlucHV0 Lm1heDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdGUgPTNEIHt9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlWydfX2luZGV4X18nXSA9M0QgcmVwX2lu ZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZV9zdGF0ZSh0cmFucywg aW5wdXQuaW5wdXRzLCBuZXdfc3RhdD0KZSwgY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBncm91cF9zdGF0ZS5hcHBlbmQobmV3X3N0YXRlKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBvcHVsYXRlX3N0YXRlKHRyYW5zLCBpbnB1dC5pbnB1dHMsIG5ld19zdGF0ZSw9 CiBlcnJvcnMsIGluY29taW5nLCBwcmVmaXg9M0RyZXBfbmFtZSArICJ8IiwgY29udGV4dD0zRGNv bnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBfaW5kZXggKz0zRCAxCkBAIC0yMjIz LDcgKzIyMTgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfY2FzZSA9M0QgaW5wdXQuZ2V0X2N1cnJlbnRfY2FzZSh2 YWx1ZSw9CiB0cmFucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9zdGF0ZSA9 M0Qgc3RhdGVbaW5wdXQubmFtZV0gPTNEIHt9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5pdGlhbGl6ZV9zdGF0ZSh0cmFucywgaW5wdXQuY2FzZXNbY3VycmVudF9jYT0Kc2VdLmlucHV0 cywgZ3JvdXBfc3RhdGUsIGNvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9w dWxhdGVfc3RhdGUoIHRyYW5zLCBpbnB1dC5jYXNlc1tjdXJyZW50X2Nhcz0KZV0uaW5wdXRzLCBn cm91cF9zdGF0ZSwgZXJyb3JzLCBpbmNvbWluZywgcHJlZml4PTNEZ3JvdXBfcHJlZml4LCBjb250 ZXh0PTNEPQpjb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX3N0YXRl WydfX2N1cnJlbnRfY2FzZV9fJ10gPTNEIGN1cnJlbnRfY2E9CnNlCiAgICAgICAgICAgICAgICAg ICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgpAQCAtMjI3MiwxMyArMjI2NiwxNyBAQAogICAg ICAgICAgICAgICAgICAgICAjIGlkZW50aWZ5IG5hbWUKICAgICAgICAgICAgICAgICAgICAgaW5w dXRfbmFtZSA9M0QgdG9vbF9kaWN0LmdldCgnbmFtZScpCiAgICAgICAgICAgICAgICAgICAgIGlm IGlucHV0X25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGJhY2t1cCBkZWZhdWx0IHZh bHVlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29sX2RpY3RbJ2RlZmF1bHR2YWx1ZSddID0z RCBpbnB1dC5nZXRfaW5pdGlhbF92YT0KbHVlKHRyYW5zLCBvdGhlcl92YWx1ZXMpCisgICAgICAg ICAgICAgICAgICAgICAgID0yMAogICAgICAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgaW5w dXQgdmFsdWUgZnJvbSB0b29sIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnB1 dF9uYW1lIGluIHN0YXRlX2lucHV0czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29s X2RpY3RbJ3ZhbHVlJ10gPTNEIHN0YXRlX2lucHV0c1tpbnB1dF9uYW1lXQotCi0gICAgICAgICAg ICAgICAgICAgICAgICAjIHNhbml0aXplIGlmIHZhbHVlIGV4aXN0cwotICAgICAgICAgICAgICAg ICAgICAgICAgdG9vbF9kaWN0ID0zRCBzYW5pdGl6ZSh0b29sX2RpY3QpCi0gICAgICAgICAgID0y MAorICAgICAgICAgICAgICAgICAgICAgICA9MjAKKyAgICAgICAgICAgICAgICAgICAgICAgICMg c2FuaXRpemUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZSh0b29sX2Rp Y3QsICd2YWx1ZScpCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZSh0b29sX2RpY3Qs ICdkZWZhdWx0dmFsdWUnKQorICAgICAgICAgICAgICAgICAgICAgICA9MjAKICAgICAgICAgICAg ICAgICAjIGJhY2t1cCBmaW5hbCBpbnB1dCBkaWN0aW9uYXJ5CiAgICAgICAgICAgICAgICAgZ3Jv dXBfaW5wdXRzW2lucHV0X2luZGV4XSA9M0QgdG9vbF9kaWN0Cj0yMApAQCAtMjMwMyw3ICsyMzAx LDYgQEAKICAgICAgICAgIyBpbml0aWFsaXplIGFuZCBwb3B1bGF0ZSB0b29sIHN0YXRlCiAgICAg ICAgIHN0YXRlX2lucHV0cyA9M0Qge30KICAgICAgICAgc3RhdGVfZXJyb3JzID0zRCB7fQotICAg ICAgICBpbml0aWFsaXplX3N0YXRlKHRyYW5zLCBzZWxmLmlucHV0cywgc3RhdGVfaW5wdXRzKQog ICAgICAgICBwb3B1bGF0ZV9zdGF0ZSh0cmFucywgc2VsZi5pbnB1dHMsIHN0YXRlX2lucHV0cywg c3RhdGVfZXJyb3JzLCBwYXI9CmFtcy5fX2RpY3RfXykKPTIwCiAgICAgICAgICMgY3JlYXRlIGJh c2ljIHRvb2wgbW9kZWwKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0 ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgbGli L2dhbGF4eS90b29scy9ldmFsdWF0aW9uLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvZXZhbHVh dGlvbi5weQorKysgYi9saWIvZ2FsYXh5L3Rvb2xzL2V2YWx1YXRpb24ucHkKQEAgLTIsMTAgKzIs MTIgQEAKIGltcG9ydCB0ZW1wZmlsZQo9MjAKIGZyb20gZ2FsYXh5IGltcG9ydCBtb2RlbAorZnJv bSBnYWxheHkudXRpbC5vYmplY3Rfd3JhcHBlciBpbXBvcnQgd3JhcF93aXRoX3NhZmVfc3RyaW5n CiBmcm9tIGdhbGF4eS51dGlsLmJ1bmNoIGltcG9ydCBCdW5jaAogZnJvbSBnYWxheHkudXRpbC5u b25lX2xpa2UgaW1wb3J0IE5vbmVEYXRhc2V0CiBmcm9tIGdhbGF4eS51dGlsLnRlbXBsYXRlIGlt cG9ydCBmaWxsX3RlbXBsYXRlCiBmcm9tIGdhbGF4eS50b29scy53cmFwcGVycyBpbXBvcnQgKAor ICAgIFRvb2xQYXJhbWV0ZXJWYWx1ZVdyYXBwZXIsCiAgICAgRGF0YXNldEZpbGVuYW1lV3JhcHBl ciwKICAgICBEYXRhc2V0TGlzdFdyYXBwZXIsCiAgICAgRGF0YXNldENvbGxlY3Rpb25XcmFwcGVy LApAQCAtMTE0LDYgKzExNiw5IEBACiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV9pbnB1dF9kYXRh c2V0X3dyYXBwZXJzKHBhcmFtX2RpY3QsIGlucHV0X2RhdGFzZXRzLD0KIGlucHV0X2RhdGFzZXRf cGF0aHMpCiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV9vdXRwdXRfZGF0YXNldF93cmFwcGVycyhw YXJhbV9kaWN0LCBvdXRwdXRfZGF0YXNldD0Kcywgb3V0cHV0X3BhdGhzLCBqb2Jfd29ya2luZ19k aXJlY3RvcnkpCiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV91bnN0cnVjdHVyZWRfcGF0aF9yZXdy aXRlcyhwYXJhbV9kaWN0KQorICAgICAgICAjIENhbGwgcGFyYW0gZGljdCBzYW5pdGl6ZXIsIGJl Zm9yZSBub24tam9iIHBhcmFtcyBhcmUgYWRkZWQsIGFzIHc9CmUgZG9uJ3Qgd2FudCB0byBzYW5p dGl6ZSBmaWxlbmFtZXMuCisgICAgICAgIHNlbGYuX19zYW5pdGl6ZV9wYXJhbV9kaWN0KCBwYXJh bV9kaWN0ICkKKyAgICAgICAgIyBQYXJhbWV0ZXJzIGFkZGVkIGFmdGVyIHRoaXMgbGluZSBhcmUg bm90IHNhbml0aXplZAogICAgICAgICBzZWxmLl9fcG9wdWxhdGVfbm9uX2pvYl9wYXJhbXMocGFy YW1fZGljdCkKPTIwCiAgICAgICAgICMgUmV0dXJuIHRoZSBkaWN0aW9uYXJ5IG9mIHBhcmFtZXRl cnMKQEAgLTMzNCw2ICszMzksMjQgQEAKICAgICAgICAgICAgICN0aGUgcGF0aHMgcmV3cml0dGVu LgogICAgICAgICAgICAgc2VsZi5fX3dhbGtfaW5wdXRzKCBzZWxmLnRvb2wuaW5wdXRzLCBwYXJh bV9kaWN0LCByZXdyaXRlX3Vuc3Q9CnJ1Y3R1cmVkX3BhdGhzICkKPTIwCisgICAgZGVmIF9fc2Fu aXRpemVfcGFyYW1fZGljdCggc2VsZiwgcGFyYW1fZGljdCApOgorICAgICAgICAiIiIKKyAgICAg ICAgU2FuaXRpemUgYWxsIHZhbHVlcyB0aGF0IHdpbGwgYmUgc3Vic3RpdHV0ZWQgb24gdGhlIGNv bW1hbmQgbGluZSwgPQp3aXRoIHRoZSBleGNlcHRpb24gb2YgVG9vbFBhcmFtZXRlclZhbHVlV3Jh cHBlcnMsCisgICAgICAgIHdoaWNoIGFscmVhZHkgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgc2Fu aXRpemF0aW9uIHJ1bGVzIGFuZCBhbHNvID0KZXhjbHVkZSBzcGVjaWFsLWNhc2VkIG5hbWVkIHZh bHVlcy4KKyAgICAgICAgV2Ugd2lsbCBvbmx5IGV4YW1pbmUgdGhlIGZpcnN0IGxldmVsIGZvciB2 YWx1ZXMgdG8gc2tpcDsgdGhlIHdyYXBwPQppbmcgZnVuY3Rpb24gd2lsbCByZWN1cnNlIGFzIG5l Y2Vzc2FyeS4KKyAgICAgICA9MjAKKyAgICAgICAgTm90ZTogdGhpcyBtZXRob2QgZm9sbG93cyB0 aGUgc3R5bGUgb2YgdGhlIHNpbWlsYXIgcG9wdWxhdGUgY2FsbHMsPQogaW4gdGhhdCBwYXJhbV9k aWN0IGlzIG1vZGlmaWVkIGluLXBsYWNlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBjaHJvbUlu Zm8gaXMgYSBmaWxlbmFtZSwgZG8gbm90IHNhbml0aXplIGl0LgorICAgICAgICBza2lwID0zRCBb ICdjaHJvbUluZm8nIF0KKyAgICAgICAgaWYgbm90IHNlbGYudG9vbCBvciBub3Qgc2VsZi50b29s Lm9wdGlvbnMgb3Igc2VsZi50b29sLm9wdGlvbnMuc2FuPQppdGl6ZToKKyAgICAgICAgICAgIGZv ciBrZXksIHZhbHVlIGluIHBhcmFtX2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBr ZXkgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIGtleSBzbyB0aGF0 IG5ldyB3cmFwcGVkIG9iamVjdCB3aWxsIG9jY3VweSBrZT0KeSBzbG90CisgICAgICAgICAgICAg ICAgICAgIGRlbCBwYXJhbV9kaWN0W2tleV0KKyAgICAgICAgICAgICAgICAgICAgIyBBbmQgcmVw bGFjZSB3aXRoIG5ldyB3cmFwcGVkIGtleQorICAgICAgICAgICAgICAgICAgICBwYXJhbV9kaWN0 WyB3cmFwX3dpdGhfc2FmZV9zdHJpbmcoIGtleSwgbm9fd3JhcF9jbGFzc2U9CnM9M0RUb29sUGFy YW1ldGVyVmFsdWVXcmFwcGVyICkgXSA9M0Qgd3JhcF93aXRoX3NhZmVfc3RyaW5nKCB2YWx1ZSwg bm9fd3JhcD0KX2NsYXNzZXM9M0RUb29sUGFyYW1ldGVyVmFsdWVXcmFwcGVyICkKKwogICAgIGRl ZiBidWlsZCggc2VsZiApOgogICAgICAgICAiIiIKICAgICAgICAgQnVpbGQgcnVudGltZSBkZXNj cmlwdGlvbiBvZiBqb2IgdG8gZXhlY3V0ZSwgZXZhbHVhdGUgY29tbWFuZCBhbmQKCmRpZmYgLXIg YTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIy YWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgbGliL2dhbGF4eS90b29scy93cmFwcGVycy5w eQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3dyYXBwZXJzLnB5CisrKyBiL2xpYi9nYWxheHkvdG9v bHMvd3JhcHBlcnMucHkKQEAgLTIsNiArMiw3IEBACiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0 aW9ucwogZnJvbSBnYWxheHkudXRpbC5ub25lX2xpa2UgaW1wb3J0IE5vbmVEYXRhc2V0CiBmcm9t IGdhbGF4eS51dGlsIGltcG9ydCBvZGljdAorZnJvbSBnYWxheHkudXRpbC5vYmplY3Rfd3JhcHBl ciBpbXBvcnQgd3JhcF93aXRoX3NhZmVfc3RyaW5nCj0yMAogZnJvbSBsb2dnaW5nIGltcG9ydCBn ZXRMb2dnZXIKIGxvZyA9M0QgZ2V0TG9nZ2VyKCBfX25hbWVfXyApCkBAIC0xNjIsMTAgKzE2Mywx MyBAQAogICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLm1ldGFkYXRhLnNwZWM6CiAgICAgICAg ICAgICAgICAgaWYgcnZhbCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBydmFsID0zRCBz ZWxmLm1ldGFkYXRhLnNwZWNbbmFtZV0ubm9fdmFsdWUKLSAgICAgICAgICAgICAgICBydmFsID0z RCBzZWxmLm1ldGFkYXRhLnNwZWNbbmFtZV0ucGFyYW0udG9fc3RyaW5nKCBydmFsICkKKyAgICAg ICAgICAgICAgICBydmFsID0zRCBzZWxmLm1ldGFkYXRhLnNwZWNbIG5hbWUgXS5wYXJhbS50b19z YWZlX3N0cmluZyggPQpydmFsICkKICAgICAgICAgICAgICAgICAjIFN0b3JlIHRoaXMgdmFsdWUs IHNvIHdlIGRvbid0IG5lZWQgdG8gcmVjYWxjdWxhdGUgaWYgbmVlPQpkZWQKICAgICAgICAgICAg ICAgICAjIGFnYWluCiAgICAgICAgICAgICAgICAgc2V0YXR0ciggc2VsZiwgbmFtZSwgcnZhbCAp CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNlc2NhcGUgc3RyaW5nIHZhbHVl IG9mIG5vbi1kZWZpbmVkIG1ldGFkYXRhIHZhbHVlCisgICAgICAgICAgICAgICAgcnZhbCA9M0Qg d3JhcF93aXRoX3NhZmVfc3RyaW5nKCBydmFsICkKICAgICAgICAgICAgIHJldHVybiBydmFsCj0y MAogICAgICAgICBkZWYgX19ub256ZXJvX18oIHNlbGYgKToKQEAgLTE5MCw5ICsxOTQsMTMgQEAK ICAgICAgICAgICAgICAgICBleHQgPTNEIHRvb2wuaW5wdXRzW25hbWVdLmV4dGVuc2lvbnNbMF0K ICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBleHQgPTNEICdkYXRhJwotICAg ICAgICAgICAgc2VsZi5kYXRhc2V0ID0zRCBOb25lRGF0YXNldCggZGF0YXR5cGVzX3JlZ2lzdHJ5 PTNEZGF0YXR5cGVzX3I9CmVnaXN0cnksIGV4dD0zRGV4dCApCisgICAgICAgICAgICBzZWxmLmRh dGFzZXQgPTNEIHdyYXBfd2l0aF9zYWZlX3N0cmluZyggTm9uZURhdGFzZXQoIGRhdGF0eXBlcz0K X3JlZ2lzdHJ5PTNEZGF0YXR5cGVzX3JlZ2lzdHJ5LCBleHQ9M0RleHQgKSwgbm9fd3JhcF9jbGFz c2VzPTNEVG9vbFBhcmFtZXRlPQpyVmFsdWVXcmFwcGVyICkKICAgICAgICAgZWxzZToKLSAgICAg ICAgICAgIHNlbGYuZGF0YXNldCA9M0QgZGF0YXNldAorICAgICAgICAgICAgIyBUb29sIHdyYXBw ZXJzIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgYWNjZXNzaW5nIC5kYXRhc2V0IGRpcmU9CmN0bHks PTIwCisgICAgICAgICAgICAjIHNvIHdlIHdpbGwgd3JhcCBpdCBhbmQga2VlcCB0aGUgb3JpZ2lu YWwgYXJvdW5kIGZvciBmaWxlIHBhdD0KaHMKKyAgICAgICAgICAgICMgU2hvdWxkIHdlIG5hbWUg dGhpcyAudmFsdWUgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCBtb3N0PQogb3RoZXIgVG9v bFBhcmFtZXRlclZhbHVlV3JhcHBlcj8KKyAgICAgICAgICAgIHNlbGYudW5zYW5pdGl6ZWQgPTNE IGRhdGFzZXQKKyAgICAgICAgICAgIHNlbGYuZGF0YXNldCA9M0Qgd3JhcF93aXRoX3NhZmVfc3Ry aW5nKCBkYXRhc2V0LCBub193cmFwX2NsYXNzPQplcz0zRFRvb2xQYXJhbWV0ZXJWYWx1ZVdyYXBw ZXIgKQogICAgICAgICAgICAgc2VsZi5tZXRhZGF0YSA9M0Qgc2VsZi5NZXRhZGF0YVdyYXBwZXIo IGRhdGFzZXQubWV0YWRhdGEgKQogICAgICAgICBzZWxmLmRhdGF0eXBlc19yZWdpc3RyeSA9M0Qg ZGF0YXR5cGVzX3JlZ2lzdHJ5CiAgICAgICAgIHNlbGYuZmFsc2VfcGF0aCA9M0QgZ2V0YXR0cigg ZGF0YXNldF9wYXRoLCAiZmFsc2VfcGF0aCIsIE5vbmUgKQpAQCAtMjEwLDcgKzIxOCw3IEBACiAg ICAgICAgIGlmIHNlbGYuZmFsc2VfcGF0aCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVy biBzZWxmLmZhbHNlX3BhdGgKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxm LmRhdGFzZXQuZmlsZV9uYW1lCisgICAgICAgICAgICByZXR1cm4gc2VsZi51bnNhbml0aXplZC5m aWxlX25hbWUKPTIwCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCBzZWxmLCBrZXkgKToKICAgICAgICAg aWYgc2VsZi5mYWxzZV9wYXRoIGlzIG5vdCBOb25lIGFuZCBrZXkgPTNEPTNEICdmaWxlX25hbWUn OgpAQCAtMjMwLDcgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgIyBvYmplY3Qgc3RvcmUgdG8g ZmluZCB0aGUgc3RhdGljIGxvY2F0aW9uIG9mIHRoaXMKICAgICAgICAgICAgICAgICAjIGRpcmVj dG9yeS4KICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBz ZWxmLmRhdGFzZXQuZXh0cmFfZmlsZXNfcGF0aAorICAgICAgICAgICAgICAgICAgICByZXR1cm4g c2VsZi51bnNhbml0aXplZC5leHRyYV9maWxlc19wYXRoCiAgICAgICAgICAgICAgICAgZXhjZXB0 IGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQ6CiAgICAgICAgICAgICAgICAgICAgICMgTmVzdGVk T2JqZWN0c3RvcmUgcmFpc2VzIGFuIGVycm9yIGhlcmUKICAgICAgICAgICAgICAgICAgICAgIyBp bnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGEgbm9uLWV4aXN0ZW50CgpkaWZmIC1yIGEyNWNlNjNj ZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUx MzY9CmRiYTY1OTkyNDAzYzBhOWE1IGxpYi9nYWxheHkvdXRpbC9fX2luaXRfXy5weQotLS0gYS9s aWIvZ2FsYXh5L3V0aWwvX19pbml0X18ucHkKKysrIGIvbGliL2dhbGF4eS91dGlsL19faW5pdF9f LnB5CkBAIC0zNjAsNDYgKzM2MCw1NyBAQAogICAgICAgICAgICAgICAgICAnIyc6ICdfX3BkX18n fQo9MjAKPTIwCi1kZWYgcmVzdG9yZV90ZXh0KHRleHQpOgorZGVmIHJlc3RvcmVfdGV4dCggdGV4 dCwgY2hhcmFjdGVyX21hcD0zRG1hcHBlZF9jaGFycyApOgogICAgICIiIlJlc3RvcmVzIHNhbml0 aXplZCB0ZXh0IiIiCiAgICAgaWYgbm90IHRleHQ6CiAgICAgICAgIHJldHVybiB0ZXh0Ci0gICAg Zm9yIGtleSwgdmFsdWUgaW4gbWFwcGVkX2NoYXJzLml0ZW1zKCk6CisgICAgZm9yIGtleSwgdmFs dWUgaW4gY2hhcmFjdGVyX21hcC5pdGVtcygpOgogICAgICAgICB0ZXh0ID0zRCB0ZXh0LnJlcGxh Y2UodmFsdWUsIGtleSkKICAgICByZXR1cm4gdGV4dAo9MjAKPTIwCi1kZWYgc2FuaXRpemVfdGV4 dCh0ZXh0KToKK2RlZiBzYW5pdGl6ZV90ZXh0KCB0ZXh0LCB2YWxpZF9jaGFyYWN0ZXJzPTNEdmFs aWRfY2hhcnMsIGNoYXJhY3Rlcl9tYXA9M0RtPQphcHBlZF9jaGFycywgaW52YWxpZF9jaGFyYWN0 ZXI9M0QnWCcgKToKICAgICAiIiIKICAgICBSZXN0cmljdHMgdGhlIGNoYXJhY3RlcnMgdGhhdCBh cmUgYWxsb3dlZCBpbiB0ZXh0OyBhY2NlcHRzIGJvdGggc3RyaW5ncwotICAgIGFuZCBsaXN0cyBv ZiBzdHJpbmdzLgorICAgIGFuZCBsaXN0cyBvZiBzdHJpbmdzOyBub24tc3RyaW5nIGVudGl0aWVz IHdpbGwgYmUgY2FzdCB0byBzdHJpbmdzLgogICAgICIiIgotICAgIGlmIGlzaW5zdGFuY2UoIHRl eHQsIGJhc2VzdHJpbmcgKToKLSAgICAgICAgcmV0dXJuIF9zYW5pdGl6ZV90ZXh0X2hlbHBlcih0 ZXh0KQotICAgIGVsaWYgaXNpbnN0YW5jZSggdGV4dCwgbGlzdCApOgotICAgICAgICByZXR1cm4g WyBfc2FuaXRpemVfdGV4dF9oZWxwZXIodCkgZm9yIHQgaW4gdGV4dCBdCisgICAgaWYgaXNpbnN0 YW5jZSggdGV4dCwgbGlzdCApOgorICAgICAgICByZXR1cm4gbWFwKCBsYW1iZGEgeDogc2FuaXRp emVfdGV4dCggeCwgdmFsaWRfY2hhcmFjdGVycz0zRHZhbGlkX2M9CmhhcmFjdGVycywgY2hhcmFj dGVyX21hcD0zRGNoYXJhY3Rlcl9tYXAsIGludmFsaWRfY2hhcmFjdGVyPTNEaW52YWxpZF9jaGFy YT0KY3RlciApLCB0ZXh0ICkKKyAgICBpZiBub3QgaXNpbnN0YW5jZSggdGV4dCwgYmFzZXN0cmlu ZyApOgorICAgICAgICB0ZXh0ID0zRCBzbWFydF9zdHIoIHRleHQgKQorICAgIHJldHVybiBfc2Fu aXRpemVfdGV4dF9oZWxwZXIoIHRleHQsIHZhbGlkX2NoYXJhY3RlcnM9M0R2YWxpZF9jaGFyYWN0 ZXI9CnMsIGNoYXJhY3Rlcl9tYXA9M0RjaGFyYWN0ZXJfbWFwICkKPTIwCi0KLWRlZiBfc2FuaXRp emVfdGV4dF9oZWxwZXIodGV4dCk6CitkZWYgX3Nhbml0aXplX3RleHRfaGVscGVyKCB0ZXh0LCB2 YWxpZF9jaGFyYWN0ZXJzPTNEdmFsaWRfY2hhcnMsIGNoYXJhY3Rlcj0KX21hcD0zRG1hcHBlZF9j aGFycywgaW52YWxpZF9jaGFyYWN0ZXI9M0QnWCcgKToKICAgICAiIiJSZXN0cmljdHMgdGhlIGNo YXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHN0cmluZyIiIgo9MjAKICAgICBvdXQgPTNE IFtdCiAgICAgZm9yIGMgaW4gdGV4dDoKLSAgICAgICAgaWYgYyBpbiB2YWxpZF9jaGFyczoKKyAg ICAgICAgaWYgYyBpbiB2YWxpZF9jaGFyYWN0ZXJzOgogICAgICAgICAgICAgb3V0LmFwcGVuZChj KQotICAgICAgICBlbGlmIGMgaW4gbWFwcGVkX2NoYXJzOgotICAgICAgICAgICAgb3V0LmFwcGVu ZChtYXBwZWRfY2hhcnNbY10pCisgICAgICAgIGVsaWYgYyBpbiBjaGFyYWN0ZXJfbWFwOgorICAg ICAgICAgICAgb3V0LmFwcGVuZCggY2hhcmFjdGVyX21hcFtjXSApCiAgICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICBvdXQuYXBwZW5kKCdYJykgICMgbWFrZXMgZGVidWdnaW5nIGVhc2llcgorICAg ICAgICAgICAgb3V0LmFwcGVuZCggaW52YWxpZF9jaGFyYWN0ZXIgKSAgIyBtYWtlcyBkZWJ1Z2dp bmcgZWFzaWVyCiAgICAgcmV0dXJuICcnLmpvaW4ob3V0KQo9MjAKPTIwCi1kZWYgc2FuaXRpemVf cGFyYW0odmFsdWUpOgorZGVmIHNhbml0aXplX2xpc3RzX3RvX3N0cmluZyggdmFsdWVzLCB2YWxp ZF9jaGFyYWN0ZXJzPTNEdmFsaWRfY2hhcnMsIGNoYXI9CmFjdGVyX21hcD0zRG1hcHBlZF9jaGFy cywgaW52YWxpZF9jaGFyYWN0ZXI9M0QnWCcgICk6CisgICAgaWYgaXNpbnN0YW5jZSggdmFsdWVz LCBsaXN0ICk6CisgICAgICAgIHJ2YWwgPTNEIFtdCisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1 ZXM6CisgICAgICAgICAgICBydmFsLmFwcGVuZCggc2FuaXRpemVfbGlzdHNfdG9fc3RyaW5nKCB2 YWx1ZSwgdmFsaWRfY2hhcmFjdGVycz0KPTNEdmFsaWRfY2hhcmFjdGVycywgY2hhcmFjdGVyX21h cD0zRGNoYXJhY3Rlcl9tYXAsIGludmFsaWRfY2hhcmFjdGVyPTNEaW52PQphbGlkX2NoYXJhY3Rl ciApICkKKyAgICAgICAgdmFsdWVzID0zRCAiLCIuam9pbiggcnZhbCApCisgICAgZWxzZToKKyAg ICAgICAgdmFsdWVzID0zRCBzYW5pdGl6ZV90ZXh0KCB2YWx1ZXMsIHZhbGlkX2NoYXJhY3RlcnM9 M0R2YWxpZF9jaGFyYWN0PQplcnMsIGNoYXJhY3Rlcl9tYXA9M0RjaGFyYWN0ZXJfbWFwLCBpbnZh bGlkX2NoYXJhY3Rlcj0zRGludmFsaWRfY2hhcmFjdGVyICkKKyAgICByZXR1cm4gdmFsdWVzCisK KworZGVmIHNhbml0aXplX3BhcmFtKCB2YWx1ZSwgdmFsaWRfY2hhcmFjdGVycz0zRHZhbGlkX2No YXJzLCBjaGFyYWN0ZXJfbWFwPQo9M0RtYXBwZWRfY2hhcnMsIGludmFsaWRfY2hhcmFjdGVyPTNE J1gnICk6CiAgICAgIiIiQ2xlYW4gaW5jb21pbmcgcGFyYW1ldGVycyAoc3RyaW5ncyBvciBsaXN0 cykiIiIKICAgICBpZiBpc2luc3RhbmNlKCB2YWx1ZSwgYmFzZXN0cmluZyApOgotICAgICAgICBy ZXR1cm4gc2FuaXRpemVfdGV4dCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNhbml0aXplX3RleHQo IHZhbHVlLCB2YWxpZF9jaGFyYWN0ZXJzPTNEdmFsaWRfY2hhcmFjdGVycywgPQpjaGFyYWN0ZXJf bWFwPTNEY2hhcmFjdGVyX21hcCwgaW52YWxpZF9jaGFyYWN0ZXI9M0RpbnZhbGlkX2NoYXJhY3Rl ciApCiAgICAgZWxpZiBpc2luc3RhbmNlKCB2YWx1ZSwgbGlzdCApOgotICAgICAgICByZXR1cm4g bWFwKHNhbml0aXplX3RleHQsIHZhbHVlKQorICAgICAgICByZXR1cm4gbWFwKCBsYW1iZGEgeDog c2FuaXRpemVfdGV4dCggeCwgdmFsaWRfY2hhcmFjdGVycz0zRHZhbGlkX2M9CmhhcmFjdGVycywg Y2hhcmFjdGVyX21hcD0zRGNoYXJhY3Rlcl9tYXAsIGludmFsaWRfY2hhcmFjdGVyPTNEaW52YWxp ZF9jaGFyYT0KY3RlciApLCB2YWx1ZSApCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRXhjZXB0 aW9uKCdVbmtub3duIHBhcmFtZXRlciB0eXBlICglcyknICUgKCB0eXBlKCB2YWx1ZSApICkpCj0y MAoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1yIDNi YmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBsaWIvZ2FsYXh5L3V0aWwv ZGJrZXlzLnB5Ci0tLSBhL2xpYi9nYWxheHkvdXRpbC9kYmtleXMucHkKKysrIGIvbGliL2dhbGF4 eS91dGlsL2Ria2V5cy5weQpAQCAtNCw2ICs0LDcgQEAKICNkYmtleXMgcmVhZCBmcm9tIGRpc2sg dXNpbmcgYnVpbGRzLnR4dAogZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgcmVhZF9kYm5hbWVzCiBm cm9tIGdhbGF4eS51dGlsLmpzb24gaW1wb3J0IGxvYWRzCitmcm9tIGdhbGF4eS51dGlsLm9iamVj dF93cmFwcGVyIGltcG9ydCBzYW5pdGl6ZV9saXN0c190b19zdHJpbmcKIGltcG9ydCBvcy5wYXRo Cj0yMAo9MjAKQEAgLTg0LDYgKzg1LDcgQEAKICAgICAgICAgIyB1c2UgY29uZmlndXJlZCBzZXJ2 ZXIgbGVuIHBhdGgKICAgICAgICAgaWYgbm90IGNocm9tX2luZm86CiAgICAgICAgICAgICAjIERl ZmF1bHQgdG8gYnVpbHQtaW4gYnVpbGQuCi0gICAgICAgICAgICBjaHJvbV9pbmZvID0zRCBvcy5w YXRoLmpvaW4oIHNlbGYuX3N0YXRpY19jaHJvbV9pbmZvX3BhdGgsICIlcz0KLmxlbiIgJSBkYmtl eSApCisgICAgICAgICAgICAjIFNpbmNlIHdlIGFyZSB1c2luZyBhbiB1bnZlcmlmaWVkIGRia2V5 LCB3ZSB3aWxsIHNhbml0aXplIHRoZT0KIGRia2V5IGJlZm9yZSB1c2UKKyAgICAgICAgICAgIGNo cm9tX2luZm8gPTNEIG9zLnBhdGguam9pbiggc2VsZi5fc3RhdGljX2Nocm9tX2luZm9fcGF0aCwg IiVzPQoubGVuIiAlIHNhbml0aXplX2xpc3RzX3RvX3N0cmluZyggZGJrZXkgKSApCiAgICAgICAg IGNocm9tX2luZm8gPTNEIG9zLnBhdGguYWJzcGF0aCggY2hyb21faW5mbyApCiAgICAgICAgIHJl dHVybiAoIGNocm9tX2luZm8sIGRiX2RhdGFzZXQgKQoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2Iy ZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2 NTk5MjQwM2MwYTlhNSBsaWIvZ2FsYXh5L3V0aWwvb2JqZWN0X3dyYXBwZXIucHkKLS0tIC9kZXYv bnVsbAorKysgYi9saWIvZ2FsYXh5L3V0aWwvb2JqZWN0X3dyYXBwZXIucHkKQEAgLTAsMCArMSw0 MzYgQEAKKyIiIgorQ2xhc3NlcyBmb3Igd3JhcHBpbmcgT2JqZWN0cyBhbmQgU2FuaXRpemluZyBz dHJpbmcgb3V0cHV0LgorIiIiCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgY29weV9yZWcKK2lt cG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIG51bWJlcnMgaW1wb3J0IE51bWJlcgor ZnJvbSB0eXBlcyBpbXBvcnQgKCBOb25lVHlwZSwgTm90SW1wbGVtZW50ZWRUeXBlLCBFbGxpcHNp c1R5cGUsIEZ1bmN0aW9uVHk9CnBlLCBNZXRob2RUeXBlLCBHZW5lcmF0b3JUeXBlLCBDb2RlVHlw ZSwKKyAgICAgICAgICAgICAgICAgICAgQnVpbHRpbkZ1bmN0aW9uVHlwZSwgQnVpbHRpbk1ldGhv ZFR5cGUsIE1vZHVsZVR5cGUsIFhSPQphbmdlVHlwZSwgU2xpY2VUeXBlLCBUcmFjZWJhY2tUeXBl LCBGcmFtZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclR5cGUsIERpY3RQcm94eVR5 cGUsIEdldFNldERlc2NyaXB0b3JUeXBlLCBNZW1iZT0KckRlc2NyaXB0b3JUeXBlICkKK2Zyb20g VXNlckRpY3QgaW1wb3J0IFVzZXJEaWN0CisKK2Zyb20gZ2FsYXh5LnV0aWwgaW1wb3J0IHNhbml0 aXplX2xpc3RzX3RvX3N0cmluZyBhcyBfc2FuaXRpemVfbGlzdHNfdG9fc3RyPQppbmcKKworbG9n ID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQorCisjIERlZmluZSBkaWZmZXJlbnQg YmVoYXZpb3JzIGZvciBkaWZmZXJlbnQgdHlwZXMsIHNlZSBhbHNvOiBodHRwczovL2RvY3MucD0K eXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sCisKKyMgS25vd24gQ2FsbGFibGUgdHlwZXMK K19fQ0FMTEFCTEVfVFlQRVNfXyA9M0QgKCBGdW5jdGlvblR5cGUsIE1ldGhvZFR5cGUsIEdlbmVy YXRvclR5cGUsIENvZGVUeXBlPQosIEJ1aWx0aW5GdW5jdGlvblR5cGUsIEJ1aWx0aW5NZXRob2RU eXBlLCApCisKKyMgQWx3YXlzIHdyYXAgdGhlc2UgdHlwZXMgd2l0aG91dCBhdHRlbXB0aW5nIHRv IHN1YmNsYXNzCitfX1dSQVBfTk9fU1VCQ0xBU1NfXyA9M0QgICggTW9kdWxlVHlwZSwgWFJhbmdl VHlwZSwgU2xpY2VUeXBlLCBCdWZmZXJUeXBlLD0KIFRyYWNlYmFja1R5cGUsIEZyYW1lVHlwZSwg RGljdFByb3h5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U2V0RGVzY3JpcHRv clR5cGUsIE1lbWJlckRlc2NyaXB0b3JUeXBlICkgKyBfPQpfQ0FMTEFCTEVfVFlQRVNfXworCisj IERvbid0IHdyYXAgb3Igc2FuaXRpemUuCitfX0RPTlRfU0FOSVRJWkVfVFlQRVNfXyA9M0QgKCBO dW1iZXIsIGJvb2wsIE5vbmVUeXBlLCBOb3RJbXBsZW1lbnRlZFR5cGUsID0KRWxsaXBzaXNUeXBl LCBieXRlYXJyYXksICkKKworIyBEb24ndCB3cmFwLCBidXQgZG8gc2FuaXRpemUuCitfX0RPTlRf V1JBUF9UWVBFU19fID0zRCB0dXBsZSgpICMoIGJhc2VzdHJpbmcsICkgc28gdGhhdCB3ZSBjYW4g Z2V0IHRoZSB1bj0Kc2FuaXRpemVkIHN0cmluZywgd2Ugd2lsbCBub3cgd3JhcCBiYXNlc3RyaW5n IGluc3RhbmNlcworCisjIFdyYXAgY29udGVudHMsIGJ1dCBub3QgdGhlIGNvbnRhaW5lcgorX19X UkFQX1NFUVVFTkNFU19fID0zRCAoIHR1cGxlLCBsaXN0LCApCitfX1dSQVBfU0VUU19fID0zRCAo IHNldCwgZnJvemVuc2V0LCApCitfX1dSQVBfTUFQUElOR1NfXyA9M0QgKCBkaWN0LCBVc2VyRGlj dCwgKQorCisKKyMgRGVmaW5lIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc2Fu aXRpemVkLCBhbmQgZGVmaW5lIGEgc2V0IG9mPQogbWFwcGluZ3MgZm9yIHRob3NlIHRoYXQgYXJl LgorIyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkCitWQUxJRF9DSEFSQUNURVJTID0zRCBzZXQo IHN0cmluZy5sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICIgLT0zRF8uKCkvKypeLD0KOj8hQCIg KQorCisjIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBidXQgbmVlZCB0byBiZSBlc2NhcGVk CitDSEFSQUNURVJfTUFQID0zRCB7ICc+JzogJ19fZ3RfXycsCisgICAgICAgICAgICAgICAgICc8 JzogJ19fbHRfXycsCisgICAgICAgICAgICAgICAgICInIjogJ19fc3FfXycsCisgICAgICAgICAg ICAgICAgICciJzogJ19fZHFfXycsCisgICAgICAgICAgICAgICAgICdbJzogJ19fb2JfXycsCisg ICAgICAgICAgICAgICAgICddJzogJ19fY2JfXycsCisgICAgICAgICAgICAgICAgICd7JzogJ19f b2NfXycsCisgICAgICAgICAgICAgICAgICd9JzogJ19fY2NfXycsCisgICAgICAgICAgICAgICAg ICdcbic6ICdfX2NuX18nLAorICAgICAgICAgICAgICAgICAnXHInOiAnX19jcl9fJywKKyAgICAg ICAgICAgICAgICAgJ1x0JzogJ19fdGNfXycsCisgICAgICAgICAgICAgICAgICcjJzogJ19fcGRf Xyd9CisKK0lOVkFMSURfQ0hBUkFDVEVSID0zRCAiWCIKKworZGVmIHNhbml0aXplX2xpc3RzX3Rv X3N0cmluZyggdmFsdWVzLCB2YWxpZF9jaGFyYWN0ZXJzPTNEVkFMSURfQ0hBUkFDVEVSUyw9CiBj aGFyYWN0ZXJfbWFwPTNEQ0hBUkFDVEVSX01BUCwgaW52YWxpZF9jaGFyYWN0ZXI9M0RJTlZBTElE X0NIQVJBQ1RFUiAgKToKKyAgICByZXR1cm4gX3Nhbml0aXplX2xpc3RzX3RvX3N0cmluZyggdmFs dWVzLCB2YWxpZF9jaGFyYWN0ZXJzPTNEdmFsaWRfY2hhPQpyYWN0ZXJzLCBjaGFyYWN0ZXJfbWFw PTNEY2hhcmFjdGVyX21hcCwgaW52YWxpZF9jaGFyYWN0ZXI9M0RpbnZhbGlkX2NoYXJhY3Q9CmVy ICApCisKKworZGVmIHdyYXBfd2l0aF9zYWZlX3N0cmluZyggdmFsdWUsIG5vX3dyYXBfY2xhc3Nl cyA9M0QgTm9uZSApOgorICAgICIiIgorICAgIFJlY3Vyc2l2ZWx5IHdyYXAgdmFsdWVzIHRoYXQg c2hvdWxkIGJlIHdyYXBwZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19kb193cmFwKCB2YWx1ZSAp OgorICAgICAgICBpZiBpc2luc3RhbmNlKCB2YWx1ZSwgU2FmZVN0cmluZ1dyYXBwZXIgKToKKyAg ICAgICAgICAgICMgT25seSBldmVyIHdyYXAgb25lLWxheWVyCisgICAgICAgICAgICByZXR1cm4g dmFsdWUKKyAgICAgICAgaWYgY2FsbGFibGUoIHZhbHVlICk6CisgICAgICAgICAgICBzYWZlX2Ns YXNzID0zRCBDYWxsYWJsZVNhZmVTdHJpbmdXcmFwcGVyCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBzYWZlX2NsYXNzID0zRCBTYWZlU3RyaW5nV3JhcHBlcgorICAgICAgICBpZiBpc2luc3Rh bmNlKCB2YWx1ZSwgbm9fd3JhcF9jbGFzc2VzICk6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUK KyAgICAgICAgaWYgaXNpbnN0YW5jZSggdmFsdWUsIF9fRE9OVF9XUkFQX1RZUEVTX18gKToKKyAg ICAgICAgICAgIHJldHVybiBzYW5pdGl6ZV9saXN0c190b19zdHJpbmcoIHZhbHVlLCB2YWxpZF9j aGFyYWN0ZXJzPTNEVkFMPQpJRF9DSEFSQUNURVJTLCBjaGFyYWN0ZXJfbWFwPTNEQ0hBUkFDVEVS X01BUCApCisgICAgICAgIGlmIGlzaW5zdGFuY2UoIHZhbHVlLCBfX1dSQVBfTk9fU1VCQ0xBU1Nf XyApOgorICAgICAgICAgICAgcmV0dXJuIHNhZmVfY2xhc3MoIHZhbHVlLCBzYWZlX3N0cmluZ193 cmFwcGVyX2Z1bmN0aW9uID0zRCBfX2Q9Cm9fd3JhcCApCisgICAgICAgIGZvciB0aGlzX3R5cGUg aW4gX19XUkFQX1NFUVVFTkNFU19fICsgX19XUkFQX1NFVFNfXzoKKyAgICAgICAgICAgIGlmIGlz aW5zdGFuY2UoIHZhbHVlLCB0aGlzX3R5cGUgKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp c190eXBlKCBtYXAoIF9fZG9fd3JhcCwgdmFsdWUgKSApCisgICAgICAgIGZvciB0aGlzX3R5cGUg aW4gX19XUkFQX01BUFBJTkdTX186CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCB2YWx1ZSwg dGhpc190eXBlICk6CisgICAgICAgICAgICAgICAgIyBXcmFwIGJvdGgga2V5IGFuZCB2YWx1ZQor ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzX3R5cGUoIG1hcCggbGFtYmRhIHg6ICggX19kb193 cmFwKCB4WzBdICksIF9fZG89Cl93cmFwKCB4WzFdICkgKSwgdmFsdWUuaXRlbXMoKSApICkKKyAg ICAgICAgIyBDcmVhdGUgYSBkeW5hbWljIGNsYXNzIHRoYXQgam9pbnMgU2FmZVN0cmluZ1dyYXBw ZXIgd2l0aCB0aGUgb2JqPQplY3QgYmVpbmcgd3JhcHBlZC4KKyAgICAgICAgIyBUaGlzIGFsbG93 cyBlLmcuIGlzaW5zdGFuY2UgdG8gY29udGludWUgdG8gd29yay4KKyAgICAgICAgdHJ5OgorICAg ICAgICAgICAgd3JhcHBlZF9jbGFzc19uYW1lID0zRCB2YWx1ZS5fX25hbWVfXworICAgICAgICAg ICAgd3JhcHBlZF9jbGFzcyA9M0QgdmFsdWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg d3JhcHBlZF9jbGFzc19uYW1lID0zRCB2YWx1ZS5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAg ICAgIHdyYXBwZWRfY2xhc3MgPTNEIHZhbHVlLl9fY2xhc3NfXworICAgICAgICB2YWx1ZV9tb2Qg PTNEIGluc3BlY3QuZ2V0bW9kdWxlKCB2YWx1ZSApCisgICAgICAgIGlmIHZhbHVlX21vZDoKKyAg ICAgICAgICAgIHdyYXBwZWRfY2xhc3NfbmFtZSA9M0QgIiVzLiVzIiAlICggdmFsdWVfbW9kLl9f bmFtZV9fLCB3cmFwcGVkPQpfY2xhc3NfbmFtZSApCisgICAgICAgIHdyYXBwZWRfY2xhc3NfbmFt ZSA9M0QgIlNhZmVTdHJpbmdXcmFwcGVyKCVzOiVzKSIgJSAoIHdyYXBwZWRfY2xhcz0Kc19uYW1l LCAiLCIuam9pbiggc29ydGVkKCBtYXAoIHN0ciwgbm9fd3JhcF9jbGFzc2VzICkgKSApICkKKyAg ICAgICAgZG9fd3JhcF9mdW5jX25hbWUgPTNEICJfX2RvX3dyYXBfJXMiICUgKCB3cmFwcGVkX2Ns YXNzX25hbWUgKQorICAgICAgICBkb193cmFwX2Z1bmMgPTNEIF9fZG9fd3JhcAorICAgICAgICBn bG9iYWxfZGljdCA9M0QgZ2xvYmFscygpCisgICAgICAgIGlmIHdyYXBwZWRfY2xhc3NfbmFtZSBp biBnbG9iYWxfZGljdDoKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgY3Jl YXRlZCBhIHdyYXBwZXIgZm9yIHRoaXMgY2xhc3MgeWV0PQosIGlmIHNvLCByZXVzZQorICAgICAg ICAgICAgd3JhcHBlZF9jbGFzcyA9M0QgZ2xvYmFsX2RpY3QuZ2V0KCB3cmFwcGVkX2NsYXNzX25h bWUgKQorICAgICAgICAgICAgZG9fd3JhcF9mdW5jID0zRCBnbG9iYWxfZGljdC5nZXQoIGRvX3dy YXBfZnVuY19uYW1lLCBfX2RvX3dyYXA9CiApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0 cnk6CisgICAgICAgICAgICAgICAgd3JhcHBlZF9jbGFzcyA9M0QgdHlwZSggd3JhcHBlZF9jbGFz c19uYW1lLCAoIHNhZmVfY2xhc3MsID0Kd3JhcHBlZF9jbGFzcywgKSwge30gKQorICAgICAgICAg ICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgIyBGYWlsLXNhZmUgZm9y IHdoZW4gYSBjbGFzcyBjYW5ub3QgYmUgZHluYW1pY2FsbHkgc3ViY2xhPQpzc2VkLgorICAgICAg ICAgICAgICAgICBsb2cud2FybmluZyggIlVuYWJsZSB0byBjcmVhdGUgZHluYW1pYyBzdWJjbGFz cyBmb3IgJXMsICU9CnM6ICVzIiwgdHlwZSggdmFsdWUpLCB2YWx1ZSwgZSApCisgICAgICAgICAg ICAgICAgIHdyYXBwZWRfY2xhc3MgPTNEIHR5cGUoIHdyYXBwZWRfY2xhc3NfbmFtZSwgKCBzYWZl X2NsYXNzLD0KICksIHt9ICkKKyAgICAgICAgICAgIGlmIHdyYXBwZWRfY2xhc3Mgbm90IGluICgg U2FmZVN0cmluZ1dyYXBwZXIsIENhbGxhYmxlU2FmZVN0cmluPQpnV3JhcHBlciApOgorICAgICAg ICAgICAgICAgICMgU2F2ZSB0aGlzIHdyYXBwZXIgZm9yIHJldXNlIGFuZCBwaWNrbGluZy9jb3B5 aW5nCisgICAgICAgICAgICAgICAgZ2xvYmFsX2RpY3RbIHdyYXBwZWRfY2xhc3NfbmFtZSBdID0z RCB3cmFwcGVkX2NsYXNzCisgICAgICAgICAgICAgICAgZG9fd3JhcF9mdW5jLl9fbmFtZV9fID0z RCBkb193cmFwX2Z1bmNfbmFtZQorICAgICAgICAgICAgICAgIGdsb2JhbF9kaWN0WyBkb193cmFw X2Z1bmNfbmFtZSBdID0zRCBkb193cmFwX2Z1bmMKKyAgICAgICAgICAgICAgICBkZWYgcGlja2xl X3NhZmVfb2JqZWN0KCBzYWZlX29iamVjdCApOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g KCB3cmFwcGVkX2NsYXNzLCAoIHNhZmVfb2JqZWN0LnVuc2FuaXRpemVkLCBkb189CndyYXBfZnVu YywgKSApCisgICAgICAgICAgICAgICAgIyBTZXQgcGlja2xlIGFuZCBjb3B5IHByb3BlcnRpZXMK KyAgICAgICAgICAgICAgICBjb3B5X3JlZy5waWNrbGUoIHdyYXBwZWRfY2xhc3MsIHBpY2tsZV9z YWZlX29iamVjdCwgZG9fd3JhPQpwX2Z1bmMgKQorICAgICAgICByZXR1cm4gd3JhcHBlZF9jbGFz cyggdmFsdWUsIHNhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb24gPTNEIGRvX3c9CnJhcF9mdW5j ICkKKyAgICAjIERldGVybWluZSBjbGFzc2VzIG5vdCB0byB3cmFwCisgICAgaWYgbm9fd3JhcF9j bGFzc2VzOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSggbm9fd3JhcF9jbGFzc2VzLCAoIHR1 cGxlLCBsaXN0ICkgKToKKyAgICAgICAgICAgIG5vX3dyYXBfY2xhc3NlcyA9M0QgWyBub193cmFw X2NsYXNzZXMgXQorICAgICAgICBub193cmFwX2NsYXNzZXMgPTNEIGxpc3QoIG5vX3dyYXBfY2xh c3NlcyApICsgbGlzdCggX19ET05UX1NBTklUSVo9CkVfVFlQRVNfXyApICsgWyBTYWZlU3RyaW5n V3JhcHBlciBdCisgICAgZWxzZToKKyAgICAgICAgbm9fd3JhcF9jbGFzc2VzID0zRCBsaXN0KCBf X0RPTlRfU0FOSVRJWkVfVFlQRVNfXyApICsgWyBTYWZlU3RyaW5nPQpXcmFwcGVyIF0KKyAgICBu b193cmFwX2NsYXNzZXMgPTNEIHR1cGxlKCBzZXQoIHNvcnRlZCggbm9fd3JhcF9jbGFzc2VzLCBr ZXk9M0RzdHIgKSApPQogKQorICAgIHJldHVybiBfX2RvX3dyYXAoIHZhbHVlICkKKworCisjIE4u Qi4gcmVmZXIgdG8gZS5nLiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRh bW9kZWwuaHRtbCBmbz0KciBpbmZvcm1hdGlvbiBvbiBQeXRob24ncyBEYXRhIE1vZGVsLgorCisK K2NsYXNzIFNhZmVTdHJpbmdXcmFwcGVyKCBvYmplY3QgKToKKyAgICAiIiIKKyAgICBDbGFzcyB0 aGF0IHdyYXBzIGFuZCBzYW5pdGl6ZXMgYW55IHByb3ZpZGVkIHZhbHVlJ3MgYXR0cmlidXRlcz0y MAorICAgIHRoYXQgd2lsbCBhdHRlbXB0IHRvIGJlIGNhc3QgaW50byBhIHN0cmluZy4KKyAgID0y MAorICAgIEF0dGVtcHRzIHRvIG1pbWljIGJlaGF2aW9yIG9mIG9yaWdpbmFsIGNsYXNzLCBpbmNs dWRpbmcgb3BlcmFuZHMuCisgICA9MjAKKyAgICBUbyBlbnN1cmUgcHJvcGVyIGhhbmRsaW5nIG9m IGUuZy4gc3ViY2xhc3MgY2hlY2tzLCB0aGUgKndyYXBfd2l0aF9zYWZlPQpfc3RyaW5nKCkqCisg ICAgbWV0aG9kIHNob3VsZCBiZSB1c2VkLgorICAgPTIwCisgICAgVGhpcyB3cmFwcGluZyBvY2N1 cnMgaW4gYSByZWN1cnNpdmUvcGFyYXNpdGljIGZhc2hpb24sIGFzIGFsbCBjYWxsZWQgYT0KdHRy aWJ1dGVzIG9mPTIwCisgICAgdGhlIG9yaWdpbmFsbHkgd3JhcHBlZCBvYmplY3Qgd2lsbCBhbHNv IGJlIHdyYXBwZWQgYW5kIHNhbml0aXplZCwgdW5sZT0Kc3MgdGhlIGF0dHJpYnV0ZQorICAgIGlz IG9mIGEgdHlwZSBmb3VuZCBpbiBfX0RPTlRfU0FOSVRJWkVfVFlQRVNfXyArIF9fRE9OVF9XUkFQ X1RZUEVTX18sIHc9CmhlcmUgZS5nLiB+KHN0cmluZ3MKKyAgICB3aWxsIHN0aWxsIGJlIHNhbml0 aXplZCwgYnV0IG5vdCB3cmFwcGVkKSwgYW5kIGUuZy4gaW50ZWdlcnMgd2lsbCBoYXZlPQogbmVp dGhlci4KKyAgICAiIiIKKyAgICBfX1VOU0FOSVRJWkVEX0FUVFJJQlVURV9OQU1FX18gPTNEICd1 bnNhbml0aXplZCc9MjAKKyAgICBfX05PX1dSQVBfTkFNRVNfXyA9M0QgWyAnX19zYWZlX3N0cmlu Z193cmFwcGVyX2Z1bmN0aW9uX18nLCBfX1VOU0FOSVRJPQpaRURfQVRUUklCVVRFX05BTUVfX10K KworCisgICAgZGVmIF9fbmV3X18oIGNscywgKmFyZywgKiprd2QgKToKKyAgICAgICAgIyBXZSBu ZWVkIHRvIGRlZmluZSBhIF9fbmV3X18gc2luY2UsIHdlIGFyZSBzdWJjbGFzc2luZyBmcm9tIGUu Zy4gPQppbW11dGFibGUgc3RyLCB3aGljaCBpbnRlcm5hbGx5IHNldHMgZGF0YT0yMAorICAgICAg ICAjIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gb3RoZXIgKyB0aGlzICh0aGlzICsgb3RoZXIgaXMg aGFuZGxlZCBieSA9Cl9fYWRkX18pCisgICAgICAgIHNhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rp b24gPTNEIGt3ZC5nZXQoICdzYWZlX3N0cmluZ193cmFwcGVyX2Z1bj0KY3Rpb24nLCBOb25lKSBv ciB3cmFwX3dpdGhfc2FmZV9zdHJpbmcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJu IHN1cGVyKCBTYWZlU3RyaW5nV3JhcHBlciwgY2xzICkuX19uZXdfXyggY2xzLCBzYW5pdGl6ZV89 Cmxpc3RzX3RvX3N0cmluZyggYXJnWzBdLCB2YWxpZF9jaGFyYWN0ZXJzPTNEVkFMSURfQ0hBUkFD VEVSUywgY2hhcmFjdGVyX21hcD0KPTNEQ0hBUkFDVEVSX01BUCApICkKKyAgICAgICAgZXhjZXB0 IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGxvZy53YXJuaW5nKCAiQ291bGQgbm90IHByb3Zp ZGUgYW4gYXJndW1lbnQgdG8gJXMuX19uZXdfXzogJXM7PQogd2lsbCB0cnkgd2l0aG91dCBhcmd1 bWVudHMuIiwgY2xzLCBlICkKKyAgICAgICAgICAgIHJldHVybiBzdXBlciggU2FmZVN0cmluZ1dy YXBwZXIsIGNscyApLl9fbmV3X18oIGNscyApCisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIHZh bHVlLCBzYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uID0zRCB3cmFwX3dpdGhfPQpzYWZlX3N0 cmluZyApOgorICAgICAgICBzZWxmLnVuc2FuaXRpemVkID0zRCB2YWx1ZQorICAgICAgICBzZWxm Ll9fc2FmZV9zdHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fID0zRCBzYWZlX3N0cmluZ193cmFwcGVy X2Z1bmM9CnRpb24KKworICAgIGRlZiBfX3N0cl9fKCBzZWxmICk6CisgICAgICAgIHJldHVybiBz YW5pdGl6ZV9saXN0c190b19zdHJpbmcoIHNlbGYudW5zYW5pdGl6ZWQsIHZhbGlkX2NoYXJhY3Rl cj0Kcz0zRFZBTElEX0NIQVJBQ1RFUlMsIGNoYXJhY3Rlcl9tYXA9M0RDSEFSQUNURVJfTUFQICkK KworICAgIGRlZiBfX3JlcHJfXyggc2VsZiApOgorICAgICAgICByZXR1cm4gIiVzIG9iamVjdCBh dCAleCBvbjogJXMiICUgKCBzYW5pdGl6ZV9saXN0c190b19zdHJpbmcoIHNlbGY9Ci5fX2NsYXNz X18uX19uYW1lX18sIHZhbGlkX2NoYXJhY3RlcnM9M0RWQUxJRF9DSEFSQUNURVJTLCBjaGFyYWN0 ZXJfbWFwPTNEQz0KSEFSQUNURVJfTUFQICksIGlkKCBzZWxmICksIHNhbml0aXplX2xpc3RzX3Rv X3N0cmluZyggcmVwciggc2VsZi51bnNhbml0aXplPQpkICksIHZhbGlkX2NoYXJhY3RlcnM9M0RW QUxJRF9DSEFSQUNURVJTLCBjaGFyYWN0ZXJfbWFwPTNEQ0hBUkFDVEVSX01BUCApICkKKworICAg IGRlZiBfX2x0X18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UoIG90 aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3RoZXIgPTNEIG90aGVyLnVu c2FuaXRpemVkCisgICAgICAgIHJldHVybiBzZWxmLnVuc2FuaXRpemVkIDwgb3RoZXIKKworICAg IGRlZiBfX2xlX18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UoIG90 aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3RoZXIgPTNEIG90aGVyLnVu c2FuaXRpemVkCisgICAgICAgIHJldHVybiBzZWxmLnVuc2FuaXRpemVkIDw9M0Qgb3RoZXIKKwor ICAgIGRlZiBfX2VxX18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxlIGlzaW5zdGFuY2Uo IG90aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3RoZXIgPTNEIG90aGVy LnVuc2FuaXRpemVkCisgICAgICAgIHJldHVybiBzZWxmLnVuc2FuaXRpemVkID0zRD0zRCBvdGhl cgorCisgICAgZGVmIF9fbmVfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0 YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qg b3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQgIT0zRCBv dGhlcgorCisgICAgZGVmIF9fZ3RfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNp bnN0YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9 M0Qgb3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQgPiBv dGhlcgorCisgICAgZGVmIF9fZ2VfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNp bnN0YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9 M0Qgb3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQgPj0z RCBvdGhlcgorCisgICAgZGVmIF9fbHRfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUg aXNpbnN0YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhl ciA9M0Qgb3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQg PCBvdGhlcgorCisgICAgZGVmIF9fY21wX18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxl IGlzaW5zdGFuY2UoIG90aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3Ro ZXIgPTNEIG90aGVyLnVuc2FuaXRpemVkCisgICAgICAgIHJldHVybiBjbXAoIHNlbGYudW5zYW5p dGl6ZWQsIG90aGVyICkKKworICAgICMgRG8gbm90IGltcGxlbWVudCBfX3JjbXBfXywgcHl0aG9u IDIuMiA8IDIuNgorCisgICAgZGVmIF9faGFzaF9fKCBzZWxmICk6CisgICAgICAgIHJldHVybiBo YXNoKCBzZWxmLnVuc2FuaXRpemVkICkKKworICAgIGRlZiBfX25vbnplcm9fXyggc2VsZiApOgor ICAgICAgICByZXR1cm4gYm9vbCggc2VsZi51bnNhbml0aXplZCApCisKKyAgICAjIERvIG5vdCBp bXBsZW1lbnQgX191bmljb2RlX18sIHdlIHdpbGwgcmVseSBvbiBfX3N0cl9fCisKKyAgICBkZWYg X19nZXRhdHRyX18oIHNlbGYsIG5hbWUgKToKKyAgICAgICAgaWYgbmFtZSBpbiBTYWZlU3RyaW5n V3JhcHBlci5fX05PX1dSQVBfTkFNRVNfXzoKKyAgICAgICAgICAgICNGSVhNRTogaXMgdGhpcyBl dmVyIHJlYWNoZWQ/CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cl9fKCBzZWxm LCBuYW1lICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0 aW9uX18oIGdldGF0dHIoIHNlbGYudW5zYW5pPQp0aXplZCwgbmFtZSApICkKKworICAgIGRlZiBf X3NldGF0dHJfXyggc2VsZiwgbmFtZSwgdmFsdWUgKToKKyAgICAgICAgaWYgbmFtZSBpbiBTYWZl U3RyaW5nV3JhcHBlci5fX05PX1dSQVBfTkFNRVNfXzoKKyAgICAgICAgICAgIHJldHVybiBvYmpl Y3QuX19zZXRhdHRyX18oIHNlbGYsIG5hbWUsIHZhbHVlICkKKyAgICAgICAgcmV0dXJuIHNldGF0 dHIoIHNlbGYudW5zYW5pdGl6ZWQsIG5hbWUsIHZhbHVlICkKKworICAgIGRlZiBfX2RlbGF0dHJf Xyggc2VsZiwgbmFtZSApOgorICAgICAgICBpZiBuYW1lIGluIFNhZmVTdHJpbmdXcmFwcGVyLl9f Tk9fV1JBUF9OQU1FU19fOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2RlbGF0dHJfXygg c2VsZiwgbmFtZSApCisgICAgICAgIHJldHVybiBkZWxhdHRyKCBzZWxmLnVuc2FuaXRpemVkLCBu YW1lICkKKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCBzZWxmLCBuYW1lICk6CisgICAgICAg IGlmIG5hbWUgaW4gU2FmZVN0cmluZ1dyYXBwZXIuX19OT19XUkFQX05BTUVTX186CisgICAgICAg ICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oIHNlbGYsIG5hbWUgKQorICAgICAg ICByZXR1cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb25fXyggZ2V0YXR0cigg b2JqZWN0Ll9fZ2U9CnRhdHRyaWJ1dGVfXyggc2VsZiwgJ3Vuc2FuaXRpemVkJyApLCBuYW1lICkg KQorCisgICAgIyBTa2lwIERlc2NyaXB0b3JzCisKKyAgICAjIFNraXAgX19zbG90c19fCisgICA9 MjAKKyAgICAjIERvbid0IG5lZWQgX19tZXRhY2xhc3NfXywgd2UnbGwgdXNlIHRoZSBoZWxwZXIg ZnVuY3Rpb24gdG8gaGFuZGxlIHdpPQp0aCBzdWJjbGFzc2luZyBmb3IgZS5nLiBpc2luc3RhbmNl KCkKKworICAgICMgUmV2aXNpdDoKKyAgICAjIF9faW5zdGFuY2VjaGVja19fCisgICAgIyBfX3N1 YmNsYXNzY2hlY2tfXworICAgICMgV2UgYXJlIHVzaW5nIGEgaGVscGVyIGNsYXNzIHRvIGNyZWF0 ZSBkeW5hbWljIHN1YmNsYXNzZXMgdG8gaGFuZGxlIGM9Cmxhc3MgY2hlY2tzCisKKyAgICAjIFdl IGFkZHJlc3MgX19jYWxsX18gYXMgbmVlZGVkIGJhc2VkIHVwb24gdW5zYW5pdGl6ZWQsIHRocm91 Z2ggdGhlIHVzPQplIG9mIGEgQ2FsbGFibGVTYWZlU3RyaW5nV3JhcHBlciBjbGFzcworCisgICAg ZGVmIF9fbGVuX18oIHNlbGYgKToKKyAgICAgICAgb3JpZ2luYWxfdmFsdWUgPTNEIHNlbGYudW5z YW5pdGl6ZWQKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggb3JpZ2luYWxfdmFsdWUsIFNhZmVT dHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvcmlnaW5hbF92YWx1ZSA9M0Qgc2VsZi51bnNh bml0aXplZAorICAgICAgICByZXR1cm4gbGVuKCBzZWxmLnVuc2FuaXRpemVkICkKKworICAgIGRl ZiBfX2dldGl0ZW1fXyggc2VsZiwga2V5ICk6CisgICAgICAgIHJldHVybiBzZWxmLl9fc2FmZV9z dHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBzZWxmLnVuc2FuaXRpemVkWyBrZT0KeSBdICkKKwor ICAgIGRlZiBfX3NldGl0ZW1fXyggc2VsZiwga2V5LCB2YWx1ZSApOgorICAgICAgICB3aGlsZSBp c2luc3RhbmNlKCB2YWx1ZSwgU2FmZVN0cmluZ1dyYXBwZXIgKToKKyAgICAgICAgICAgIHZhbHVl ID0zRCB2YWx1ZS51bnNhbml0aXplZAorICAgICAgICBzZWxmLnVuc2FuaXRpemVkWyBrZXkgXSA9 M0QgdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyggc2VsZiwga2V5ICk6CisgICAgICAgIGRl bCBzZWxmLnVuc2FuaXRpemVkWyBrZXkgXQorCisgICAgZGVmIF9faXRlcl9fKCBzZWxmICk6Cisg ICAgICAgIHJldHVybiBpdGVyKCBtYXAoIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0 aW9uX18sIGl0ZXIoIHNlbD0KZi51bnNhbml0aXplZCApICkgKQorCisgICAgIyBEbyBub3QgaW1w bGVtZW50IF9fcmV2ZXJzZWRfXworCisgICAgZGVmIF9fY29udGFpbnNfXyggc2VsZiwgaXRlbSAp OgorICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGlmIGl0ZW0gaXMvaXNu J3Qgb3IgZG9lcy9kb2Vzbid0IGM9Cm9udGFpbiBTYWZlU3RyaW5nV3JhcHBlcj8KKyAgICAgICAg IyBXaGVuIGNvbnNpZGVyaW5nIGUuZy4gbmVzdGVkIGxpc3RzL2RpY3RzL2V0YywgdGhpcyBnZXRz IGNvbXBsaWNhPQp0ZWQKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggaXRlbSwgU2FmZVN0cmlu Z1dyYXBwZXIgKToKKyAgICAgICAgICAgIGl0ZW0gPTNEIGl0ZW0udW5zYW5pdGl6ZWQKKyAgICAg ICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi51bnNhbml0aXplZAorCisgICAgIyBOb3Qgc3VyZSB0aGF0 IHdlIG5lZWQgdGhlc2Ugc2xpY2UgbWV0aG9kcywgYnV0IHdpbGwgcHJvdmlkZSBhbnl3YXkKKyAg ICBkZWYgX19nZXRzbGljZV9fKCBzZWxmLCBpLCBqICk6CisgICAgICAgIHJldHVybiBzZWxmLl9f c2FmZV9zdHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBzZWxmLnVuc2FuaXRpemVkWyBpOj0KaiBd ICkKKworICAgIGRlZiBfX3NldHNsaWNlX18oIHNlbGYsIGksIGosIHZhbHVlICk6CisgICAgICAg IHNlbGYudW5zYW5pdGl6ZWRbIGk6aiBdID0zRCB2YWx1ZQorCisgICAgZGVmIF9fZGVsc2xpY2Vf Xyggc2VsZiwgaSwgaiApOgorICAgICAgICBkZWwgc2VsZi51bnNhbml0aXplZFsgaTpqIF0KKwor ICAgIGRlZiBfX2FkZF9fKCBzZWxmLCBvdGhlciApOgorICAgICAgICB3aGlsZSBpc2luc3RhbmNl KCBvdGhlciwgU2FmZVN0cmluZ1dyYXBwZXIgKToKKyAgICAgICAgICAgIG90aGVyID0zRCBvdGhl ci51bnNhbml0aXplZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJf ZnVuY3Rpb25fXyggc2VsZi51bnNhbml0aXplZCArIG89CnRoZXIgKQorCisgICAgZGVmIF9fc3Vi X18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxlIGlzaW5zdGFuY2UoIG90aGVyLCBTYWZl U3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3RoZXIgPTNEIG90aGVyLnVuc2FuaXRpemVk CisgICAgICAgIHJldHVybiBzZWxmLl9fc2FmZV9zdHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBz ZWxmLnVuc2FuaXRpemVkIC0gbz0KdGhlciApCisKKyAgICBkZWYgX19tdWxfXyggc2VsZiwgb3Ro ZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVy ICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0 dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIHNlbGYudW5zYW5pdGl6 ZWQgKiBvPQp0aGVyICkKKworICAgIGRlZiBfX2Zsb29yZGl2X18oIHNlbGYsIG90aGVyICk6Cisg ICAgICAgIHdoaWxlIGlzaW5zdGFuY2UoIG90aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAg ICAgICAgICAgb3RoZXIgPTNEIG90aGVyLnVuc2FuaXRpemVkCisgICAgICAgIHJldHVybiBzZWxm Ll9fc2FmZV9zdHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBzZWxmLnVuc2FuaXRpemVkIC8vID0K b3RoZXIgKQorCisgICAgZGVmIF9fbW9kX18oIHNlbGYsIG90aGVyICk6CisgICAgICAgIHdoaWxl IGlzaW5zdGFuY2UoIG90aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAgICAgICAgb3Ro ZXIgPTNEIG90aGVyLnVuc2FuaXRpemVkCisgICAgICAgIHJldHVybiBzZWxmLl9fc2FmZV9zdHJp bmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBzZWxmLnVuc2FuaXRpemVkICUgbz0KdGhlciApCisKKyAg ICBkZWYgX19kaXZtb2RfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5j ZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3Ro ZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVy X2Z1bmN0aW9uX18oIGRpdm1vZCggc2VsZi51bnNhbml0PQppemVkLCBvdGhlciApICkKKworICAg IGRlZiBfX3Bvd19fKCBzZWxmLCAqb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSgg b3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3RoZXIu dW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1 bmN0aW9uX18oIHBvdyggc2VsZi51bnNhbml0aXplPQpkLCAqb3RoZXIgKSApCisKKyAgICBkZWYg X19sc2hpZnRfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggb3Ro ZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3RoZXIudW5z YW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0 aW9uX18oIHNlbGYudW5zYW5pdGl6ZWQgPDwgPQpvdGhlciApCisKKyAgICBkZWYgX19yc2hpZnRf Xyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggb3RoZXIsIFNhZmVT dHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3RoZXIudW5zYW5pdGl6ZWQK KyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIHNl bGYudW5zYW5pdGl6ZWQgPj4gPQpvdGhlciApCisKKyAgICBkZWYgX19hbmRfXyggc2VsZiwgb3Ro ZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVy ICk6CisgICAgICAgICAgICBvdGhlciA9M0Qgb3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0 dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIHNlbGYudW5zYW5pdGl6 ZWQgJiBvPQp0aGVyICkKKworICAgIGRlZiBfX3hvcl9fKCBzZWxmLCBvdGhlciApOgorICAgICAg ICB3aGlsZSBpc2luc3RhbmNlKCBvdGhlciwgU2FmZVN0cmluZ1dyYXBwZXIgKToKKyAgICAgICAg ICAgIG90aGVyID0zRCBvdGhlci51bnNhbml0aXplZAorICAgICAgICByZXR1cm4gc2VsZi5fX3Nh ZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb25fXyggc2VsZi51bnNhbml0aXplZCBeIG89CnRoZXIg KQorCisgICAgZGVmIF9fb3JfXyggc2VsZiwgb3RoZXIgKToKKyAgICAgICAgd2hpbGUgaXNpbnN0 YW5jZSggb3RoZXIsIFNhZmVTdHJpbmdXcmFwcGVyICk6CisgICAgICAgICAgICBvdGhlciA9M0Qg b3RoZXIudW5zYW5pdGl6ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zYWZlX3N0cmluZ193cmFw cGVyX2Z1bmN0aW9uX18oIHNlbGYudW5zYW5pdGl6ZWQgfCBvPQp0aGVyICkKKworICAgIGRlZiBf X2Rpdl9fKCBzZWxmLCBvdGhlciApOgorICAgICAgICB3aGlsZSBpc2luc3RhbmNlKCBvdGhlciwg U2FmZVN0cmluZ1dyYXBwZXIgKToKKyAgICAgICAgICAgIG90aGVyID0zRCBvdGhlci51bnNhbml0 aXplZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb25f Xyggc2VsZi51bnNhbml0aXplZCAvIG89CnRoZXIgKQorCisgICAgZGVmIF9fdHJ1ZWRpdl9fKCBz ZWxmLCBvdGhlciApOgorICAgICAgICB3aGlsZSBpc2luc3RhbmNlKCBvdGhlciwgU2FmZVN0cmlu Z1dyYXBwZXIgKToKKyAgICAgICAgICAgIG90aGVyID0zRCBvdGhlci51bnNhbml0aXplZAorICAg ICAgICByZXR1cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb25fXyggc2VsZi51 bnNhbml0aXplZCAvIG89CnRoZXIgKQorCisgICAgIyBUaGUgb25seSByZWZsZWN0ZWQgb3BlcmFu ZCB0aGF0IHdlIHdpbGwgZGVmaW5lIGlzIF9fcnBvd19fLCBkdWUgdG8gYz0Kb2VyY2lvbiBydWxl cyBjb21wbGljYXRpb25zIGFzIHBlciBkb2NzCisgICAgZGVmIF9fcnBvd19fKCBzZWxmLCBvdGhl ciApOgorICAgICAgICB3aGlsZSBpc2luc3RhbmNlKCBvdGhlciwgU2FmZVN0cmluZ1dyYXBwZXIg KToKKyAgICAgICAgICAgIG90aGVyID0zRCBvdGhlci51bnNhbml0aXplZAorICAgICAgICByZXR1 cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJfZnVuY3Rpb25fXyggcG93KCBvdGhlciwgc2Vs Zi51bnM9CmFuaXRpemVkICkgKQorCisgICAgIyBEbyBub3QgaW1wbGVtZW50IGluLXBsYWNlIG9w ZXJhbmRzCisKKyAgICBkZWYgX19uZWdfXyggc2VsZiApOgorICAgICAgICByZXR1cm4gX19zYWZl X3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIC1zZWxmLnVuc2FuaXRpemVkICkKKworICAgIGRl ZiBfX3Bvc19fKCBzZWxmICk6CisgICAgICAgIHJldHVybiBfX3NhZmVfc3RyaW5nX3dyYXBwZXJf ZnVuY3Rpb25fXyggK3NlbGYudW5zYW5pdGl6ZWQgKQorCisgICAgZGVmIF9fYWJzX18oIHNlbGYg KToKKyAgICAgICAgcmV0dXJuIF9fc2FmZV9zdHJpbmdfd3JhcHBlcl9mdW5jdGlvbl9fKCBhYnMo IHNlbGYudW5zYW5pdGl6ZWQgKSApCisKKyAgICBkZWYgX19pbnZlcnRfXyggc2VsZiApOgorICAg ICAgICByZXR1cm4gX19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIH5zZWxmLnVuc2Fu aXRpemVkICkKKworICAgIGRlZiBfX2NvbXBsZXhfXyggc2VsZiApOgorICAgICAgICByZXR1cm4g X19zYWZlX3N0cmluZ193cmFwcGVyX2Z1bmN0aW9uX18oIGNvbXBsZXgoIHNlbGYudW5zYW5pdGl6 ZWQ9CiApICkKKworICAgIGRlZiBfX2ludF9fKCBzZWxmICk6CisgICAgICAgIHJldHVybiBpbnQo IHNlbGYudW5zYW5pdGl6ZWQgKQorCisgICAgZGVmIF9fZmxvYXRfXyggc2VsZiApOgorICAgICAg ICByZXR1cm4gZmxvYXQoIHNlbGYudW5zYW5pdGl6ZWQgKQorCisgICAgZGVmIF9fb2N0X18oIHNl bGYgKToKKyAgICAgICAgcmV0dXJuIG9jdCggc2VsZi51bnNhbml0aXplZCApCisKKyAgICBkZWYg X19oZXhfXyggc2VsZiApOgorICAgICAgICByZXR1cm4gaGV4KCBzZWxmLnVuc2FuaXRpemVkICkK KworICAgIGRlZiBfX2luZGV4X18oIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5p dGl6ZWQuaW5kZXgoKQorCisgICAgZGVmIF9fY29lcmNlX18oIHNlbGYsIG90aGVyICk6CisgICAg ICAgIHdoaWxlIGlzaW5zdGFuY2UoIG90aGVyLCBTYWZlU3RyaW5nV3JhcHBlciApOgorICAgICAg ICAgICAgb3RoZXIgPTNEIG90aGVyLnVuc2FuaXRpemVkCisgICAgICAgIHJldHVybiBjb2VyY2Uo IHNlbGYudW5zYW5pdGl6ZWQsIG90aGVyICkKKworICAgIGRlZiBfX2VudGVyX18oIHNlbGYgKToK KyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQuX19lbnRlcl9fKCkKKworICAgIGRlZiBf X2V4aXRfXyggc2VsZiwgKmFyZ3MgKToKKyAgICAgICAgcmV0dXJuIHNlbGYudW5zYW5pdGl6ZWQu X19leGl0X18oICphcmdzICkKKworY2xhc3MgQ2FsbGFibGVTYWZlU3RyaW5nV3JhcHBlciggU2Fm ZVN0cmluZ1dyYXBwZXIgKToKKyAgID0yMAorICAgIGRlZiBfX2NhbGxfXyggc2VsZiwgKmFyZ3Ms ICoqa3dkcyApOgorICAgICAgICByZXR1cm4gc2VsZi5fX3NhZmVfc3RyaW5nX3dyYXBwZXJfZnVu Y3Rpb25fXyggc2VsZi51bnNhbml0aXplZCggKmE9CnJncywgKiprd2RzICkgKQorCisKKyMgRW5h YmxlIHBpY2tsaW5nL2RlZXBjb3B5CitkZWYgcGlja2xlX1NhZmVTdHJpbmdXcmFwcGVyKCBzYWZl X29iamVjdCApOgorICAgIGFyZ3MgPTNEICggc2FmZV9vYmplY3QudW5zYW5pdGl6ZWQsICkKKyAg ICBjbHMgPTNEIFNhZmVTdHJpbmdXcmFwcGVyCisgICAgaWYgaXNpbnN0YW5jZSggc2FmZV9vYmpl Y3QsIENhbGxhYmxlU2FmZVN0cmluZ1dyYXBwZXIgKToKKyAgICAgICAgY2xzID0zRCBDYWxsYWJs ZVNhZmVTdHJpbmdXcmFwcGVyCisgICAgcmV0dXJuICggY2xzLCBhcmdzICkKK2NvcHlfcmVnLnBp Y2tsZSggU2FmZVN0cmluZ1dyYXBwZXIsIHBpY2tsZV9TYWZlU3RyaW5nV3JhcHBlciwgd3JhcF93 aXRoX3NhPQpmZV9zdHJpbmcgKQorY29weV9yZWcucGlja2xlKCBDYWxsYWJsZVNhZmVTdHJpbmdX cmFwcGVyLCBwaWNrbGVfU2FmZVN0cmluZ1dyYXBwZXIsIHdyYXA9Cl93aXRoX3NhZmVfc3RyaW5n ICkKKwoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1y IDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBsaWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3Rvb2xfcnVubmVyLnB5Ci0tLSBhL2xpYi9nYWxheHkv d2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdG9vbF9ydW5uZXIucHkKKysrIGIvbGliL2dhbGF4 eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy90b29sX3J1bm5lci5weQpAQCAtODAsMTQgKzgw LDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWVzc2FnZT0zRG1lc3NhZz0KZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9M0RzdGF0dXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJl Y3Q9M0RyZWRpcj0KZWN0ICkgKQotICAgICAgICBwYXJhbXMgPTNEIGdhbGF4eS51dGlsLlBhcmFt cygga3dkLCBzYW5pdGl6ZSA9M0QgRmFsc2UgKSAjU2FuaXRpemU9CiBwYXJhbWV0ZXJzIHdoZW4g c3Vic3RpdHV0aW5nIGludG8gY29tbWFuZCBsaW5lIHZpYSBpbnB1dCB3cmFwcGVycwotICAgICAg ICAjZG8gcGFyYW0gdHJhbnNsYXRpb24gaGVyZSwgdXNlZCBieSBkYXRhc291cmNlIHRvb2xzCi0g ICAgICAgIGlmIHRvb2wuaW5wdXRfdHJhbnNsYXRvcjoKLSAgICAgICAgICAgIHRvb2wuaW5wdXRf dHJhbnNsYXRvci50cmFuc2xhdGUoIHBhcmFtcyApCisKKyAgICAgICAgZGVmIF92YWxpZGF0ZWRf cGFyYW1zX2Zvcigga3dkICk6CisgICAgICAgICAgICBwYXJhbXMgPTNEIGdhbGF4eS51dGlsLlBh cmFtcygga3dkLCBzYW5pdGl6ZT0zREZhbHNlICkgICMgU2FuaT0KdGl6ZSBwYXJhbWV0ZXJzIHdo ZW4gc3Vic3RpdHV0aW5nIGludG8gY29tbWFuZCBsaW5lIHZpYSBpbnB1dCB3cmFwcGVycworICAg ICAgICAgICAgI2RvIHBhcmFtIHRyYW5zbGF0aW9uIGhlcmUsIHVzZWQgYnkgZGF0YXNvdXJjZSB0 b29scworICAgICAgICAgICAgaWYgdG9vbC5pbnB1dF90cmFuc2xhdG9yOgorICAgICAgICAgICAg ICAgIHRvb2wuaW5wdXRfdHJhbnNsYXRvci50cmFuc2xhdGUoIHBhcmFtcyApCisgICAgICAgICAg ICByZXR1cm4gcGFyYW1zCisKKyAgICAgICAgcGFyYW1zID0zRCBfdmFsaWRhdGVkX3BhcmFtc19m b3IoIGt3ZCApCiAgICAgICAgICMgV2UgbWF5IGJlIHZpc2l0aW5nIEdhbGF4eSBmb3IgdGhlIGZp cnN0IHRpbWUgKCBlLmcuLCBzZW5kaW5nIGRhdD0KYSBmcm9tIFVDU0MgKSwKICAgICAgICAgIyBz byBtYWtlIHN1cmUgdG8gY3JlYXRlIGEgbmV3IGhpc3RvcnkgaWYgd2UndmUgbmV2ZXIgaGFkIG9u ZSBiZWZvPQpyZS4KICAgICAgICAgaGlzdG9yeSA9M0QgdG9vbC5nZXRfZGVmYXVsdF9oaXN0b3J5 X2J5X3RyYW5zKCB0cmFucywgY3JlYXRlPTNEVHJ1PQplICkKLSAgICAgICAgdGVtcGxhdGUsIHZh cnMgPTNEIHRvb2wuaGFuZGxlX2lucHV0KCB0cmFucywgcGFyYW1zLl9fZGljdF9fICkKKyAgICAg ICAgdHJ5OgorICAgICAgICAgICAgdGVtcGxhdGUsIHZhcnMgPTNEIHRvb2wuaGFuZGxlX2lucHV0 KCB0cmFucywgcGFyYW1zLl9fZGljdF9fICkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAg ICAgICAgICAgIyBUaGlzIGVycm9yIGluZGljYXRlcyAob3IgYXQgbGVhc3QgY2FuIGluZGljYXRl KSB0aGVyZSB3YXMgYQorICAgICAgICAgICAgIyBwcm9ibGVtIHdpdGggdGhlIHN0b3JlZCB0b29s X3N0YXRlIC0gaXQgaXMgaW5jb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICMgdGhpcyB2YXJp YW50IG9mIHRoZSB0b29sIC0gcG9zc2libHkgYmVjYXVzZSB0aGUgdG9vbCBjaGFuZ2VkCisgICAg ICAgICAgICAjIG9yIGJlY2F1c2UgdGhlIHRvb2wgdmVyc2lvbiBjaGFuZ2VkLgorICAgICAgICAg ICAgZGVsIGt3ZFsgInRvb2xfc3RhdGUiIF0KKyAgICAgICAgICAgIHBhcmFtcyA9M0QgX3ZhbGlk YXRlZF9wYXJhbXNfZm9yKCBrd2QgKQorICAgICAgICAgICAgdGVtcGxhdGUsIHZhcnMgPTNEIHRv b2wuaGFuZGxlX2lucHV0KCB0cmFucywgcGFyYW1zLl9fZGljdF9fICkKICAgICAgICAgaWYgbGVu KCBwYXJhbXMgKSA+IDA6CiAgICAgICAgICAgICB0cmFucy5sb2dfZXZlbnQoICJUb29sIHBhcmFt czogJXMiICUgKCBzdHIoIHBhcmFtcyApICksIHRvb2xfaT0KZD0zRHRvb2xfaWQgKQogICAgICAg ICBhZGRfZnJhbWUgPTNEIEFkZEZyYW1lRGF0YSgpCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJk MjBmZjM0N2JmNDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1 OTkyNDAzYzBhOWE1IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdXNlci5w eQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3VzZXIucHkKKysr IGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy91c2VyLnB5CkBAIC0xMTQ5 LDMzICsxMTQ5LDI3IEBACiAgICAgICAgICAgICByZXNldF91c2VyID0zRCB0cmFucy5zYV9zZXNz aW9uLnF1ZXJ5KCB0cmFucy5hcHAubW9kZWwuVXNlciApLj0KZmlsdGVyKCB0cmFucy5hcHAubW9k ZWwuVXNlci50YWJsZS5jLmVtYWlsID0zRD0zRCBlbWFpbCApLmZpcnN0KCkKICAgICAgICAgICAg IHVzZXIgPTNEIHRyYW5zLmdldF91c2VyKCkKICAgICAgICAgICAgIGlmIHJlc2V0X3VzZXI6Ci0g ICAgICAgICAgICAgICAgaWYgdXNlciBhbmQgdXNlci5pZCAhPTNEIHJlc2V0X3VzZXIuaWQ6Ci0g ICAgICAgICAgICAgICAgICAgICMgVGhpcyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIGJlY2F1c2Ug YWxsIHRoZXkgaGF2ZSB0bz0KIGRvIGlzIGxvZwotICAgICAgICAgICAgICAgICAgICAjIG91dCBh bmQgdGhlbiB0cnkgaXQgYWdhaW4gICAjVE9ETyByZXZpc2l0IHdoeSB0aGlzIGU9Cnhpc3RzLgot ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0zRCAiWW91IG1heSBvbmx5IHJlc2V0IHlvdXIg b3duIHBhc3N3b3JkLiIKKyAgICAgICAgICAgICAgICBwcnQgPTNEIHRyYW5zLmFwcC5tb2RlbC5Q YXNzd29yZFJlc2V0VG9rZW4oIHJlc2V0X3VzZXIgKQorICAgICAgICAgICAgICAgIHRyYW5zLnNh X3Nlc3Npb24uYWRkKCBwcnQgKQorICAgICAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1 c2goKQorICAgICAgICAgICAgICAgIGhvc3QgPTNEIHRyYW5zLnJlcXVlc3QuaG9zdC5zcGxpdCgg JzonIClbIDAgXQorICAgICAgICAgICAgICAgIGlmIGhvc3QgPTNEPTNEICdsb2NhbGhvc3QnOgor ICAgICAgICAgICAgICAgICAgICBob3N0ID0zRCBzb2NrZXQuZ2V0ZnFkbigpCisgICAgICAgICAg ICAgICAgcmVzZXRfdXJsID0zRCB1cmxfZm9yKCBjb250cm9sbGVyPTNEJ3VzZXInLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0zRCJjaGFuZ2VfcGFzc3dv cmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuPTNEcHJ0 LnRva2VuLCBxdWFsaWZpZWQ9M0RUcnU9CmUpCisgICAgICAgICAgICAgICAgYm9keSA9M0QgUEFT U1dPUkRfUkVTRVRfVEVNUExBVEUgJSAoIGhvc3QsIHJlc2V0X3VybCwgcmVzZT0KdF91cmwgKQor ICAgICAgICAgICAgICAgIGZybSA9M0QgJ2dhbGF4eS1uby1yZXBseUAnICsgaG9zdAorICAgICAg ICAgICAgICAgIHN1YmplY3QgPTNEICdHYWxheHkgUGFzc3dvcmQgUmVzZXQnCisgICAgICAgICAg ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB1dGlsLnNlbmRfbWFpbCggZnJtLCBlbWFp bCwgc3ViamVjdCwgYm9keSwgdHJhbnMuYXBwLmM9Cm9uZmlnICkKKyAgICAgICAgICAgICAgICAg ICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHJlc2V0X3VzZXIgKQorICAgICAgICAgICAgICAgICAg ICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnMubG9n X2V2ZW50KCAiVXNlciByZXNldCBwYXNzd29yZDogJXMiICUgZW1haWwgKQorICAgICAgICAgICAg ICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9M0Qg J2Vycm9yJwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHBydCA9 M0QgbW9kZWwuUGFzc3dvcmRSZXNldFRva2VuKCByZXNldF91c2VyICkKLSAgICAgICAgICAgICAg ICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHBydCApCi0gICAgICAgICAgICAgICAgICAgIHRy YW5zLnNhX3Nlc3Npb24uZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBob3N0ID0zRCB0cmFu cy5yZXF1ZXN0Lmhvc3Quc3BsaXQoICc6JyApWyAwIF0KLSAgICAgICAgICAgICAgICAgICAgaWYg aG9zdCA9M0Q9M0QgJ2xvY2FsaG9zdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0z RCBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0X3VybCA9M0QgdXJs X2ZvciggY29udHJvbGxlcj0zRCd1c2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWN0aW9uPTNEImNoYW5nZV9wYXNzd29yZCIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuPTNEcHJ0LnRva2VuLCBxdWFsaWZpZWQ9M0RU cj0KdWUpCi0gICAgICAgICAgICAgICAgICAgIGJvZHkgPTNEIFBBU1NXT1JEX1JFU0VUX1RFTVBM QVRFICUgKCBob3N0LCByZXNldF91cmwsID0KcmVzZXRfdXJsICkKLSAgICAgICAgICAgICAgICAg ICAgZnJtID0zRCAnZ2FsYXh5LW5vLXJlcGx5QCcgKyBob3N0Ci0gICAgICAgICAgICAgICAgICAg IHN1YmplY3QgPTNEICdHYWxheHkgUGFzc3dvcmQgUmVzZXQnCi0gICAgICAgICAgICAgICAgICAg IHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuc2VuZF9tYWlsKCBmcm0sIGVtYWls LCBzdWJqZWN0LCBib2R5LCB0cmFucy5hPQpwcC5jb25maWcgKQotICAgICAgICAgICAgICAgICAg ICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIHJlc2V0X3VzZXIgKQotICAgICAgICAgICAgICAg ICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgICAg ICB0cmFucy5sb2dfZXZlbnQoICJVc2VyIHJlc2V0IHBhc3N3b3JkOiAlcyIgJSBlbWFpbD0KICkK LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cyA9M0QgJ2Vycm9yJwotICAgICAgICAgICAgICAgICAgICAgICAgbWVz c2FnZSA9M0QgJ0ZhaWxlZCB0byByZXNldCBwYXNzd29yZDogJXMnICUgc3RyKCA9CmUgKQotICAg ICAgICAgICAgICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ1VuYWJsZSB0byByZXNldCBwYXNz d29yZC4nICkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9M0QgJ0ZhaWxlZCB0byByZXNl dCBwYXNzd29yZDogJXMnICUgc3RyKCBlICkKKyAgICAgICAgICAgICAgICAgICAgbG9nLmV4Y2Vw dGlvbiggJ1VuYWJsZSB0byByZXNldCBwYXNzd29yZC4nICkKICAgICAgICAgcmV0dXJuIHRyYW5z LmZpbGxfdGVtcGxhdGUoICcvdXNlci9yZXNldF9wYXNzd29yZC5tYWtvJywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9M0RtZXNzYWdlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTNEc3RhdHVzICkKCmRpZmYgLXIgYTI1Y2U2 M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1 ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9tb2Rl bC9fX2luaXRfXy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL21vZGVsL19f aW5pdF9fLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQvbW9kZWwvX19pbml0 X18ucHkKQEAgLTEsNyArMSw5IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wZXJhdG9yCiBp bXBvcnQgb3MKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKIGZyb20g Z2FsYXh5IGltcG9ydCB1dGlsCitmcm9tIGdhbGF4eS51dGlsIGltcG9ydCB1bmlxdWVfaWQKIGZy b20gZ2FsYXh5LnV0aWwuYnVuY2ggaW1wb3J0IEJ1bmNoCiBmcm9tIGdhbGF4eS51dGlsLmhhc2hf dXRpbCBpbXBvcnQgbmV3X3NlY3VyZV9oYXNoCiBmcm9tIGdhbGF4eS5tb2RlbC5pdGVtX2F0dHJz IGltcG9ydCBEaWN0aWZpYWJsZQpAQCAtNjEsNiArNjMsMTYgQEAKICAgICAgICAgc2VsZi5wYXNz d29yZCA9M0QgbmV3X3NlY3VyZV9oYXNoKCB0ZXh0X3R5cGU9M0RjbGVhcnRleHQgKQo9MjAKPTIw CitjbGFzcyBQYXNzd29yZFJlc2V0VG9rZW4oIG9iamVjdCApOgorICAgIGRlZiBfX2luaXRfXygg c2VsZiwgdXNlciwgdG9rZW49M0ROb25lKToKKyAgICAgICAgaWYgdG9rZW46CisgICAgICAgICAg ICBzZWxmLnRva2VuID0zRCB0b2tlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50 b2tlbiA9M0QgdW5pcXVlX2lkKCkKKyAgICAgICAgc2VsZi51c2VyID0zRCB1c2VyCisgICAgICAg IHNlbGYuZXhwaXJhdGlvbl90aW1lID0zRCBkYXRldGltZS5ub3coKSArIHRpbWVkZWx0YShob3Vy cz0zRDI0KQorCisKIGNsYXNzIEdyb3VwKCBvYmplY3QsIERpY3RpZmlhYmxlICk6CiAgICAgZGlj dF9jb2xsZWN0aW9uX3Zpc2libGVfa2V5cyA9M0QgKCAnaWQnLCAnbmFtZScgKQogICAgIGRpY3Rf ZWxlbWVudF92aXNpYmxlX2tleXMgPTNEICggJ2lkJywgJ25hbWUnICkKQEAgLTg1LDcgKzk3LDcg QEAKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9M0QgZGVzY3JpcHRpb24KICAgICAgICAgc2Vs Zi50eXBlID0zRCB0eXBlCiAgICAgICAgIHNlbGYuZGVsZXRlZCA9M0QgZGVsZXRlZAotICAgPTIw CisKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfcmVwb3NpdG9yeV9hZG1pbl9yb2xlKCBzZWxm ICk6CiAgICAgICAgICMgQSByZXBvc2l0b3J5IGFkbWluIHJvbGUgbXVzdCBhbHdheXMgYmUgYXNz b2NpYXRlZCB3aXRoIGEgcmVwb3NpdD0Kb3J5LiBUaGUgbWFwcGVyIHJldHVybnMgYW4KCmRpZmYg LXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5 ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xf c2hlZC9tb2RlbC9tYXBwaW5nLnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQv bW9kZWwvbWFwcGluZy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL21vZGVs L21hcHBpbmcucHkKQEAgLTM3LDYgKzM3LDExIEBACiAgICAgQ29sdW1uKCAiZGVsZXRlZCIsIEJv b2xlYW4sIGluZGV4PTNEVHJ1ZSwgZGVmYXVsdD0zREZhbHNlICksCiAgICAgQ29sdW1uKCAicHVy Z2VkIiwgQm9vbGVhbiwgaW5kZXg9M0RUcnVlLCBkZWZhdWx0PTNERmFsc2UgKSApCj0yMAorUGFz c3dvcmRSZXNldFRva2VuLnRhYmxlID0zRCBUYWJsZSgicGFzc3dvcmRfcmVzZXRfdG9rZW4iLCBt ZXRhZGF0YSwKKyAgICBDb2x1bW4oICJ0b2tlbiIsIFN0cmluZyggMzIgKSwgcHJpbWFyeV9rZXk9 M0RUcnVlLCB1bmlxdWU9M0RUcnVlLCBpbmRlPQp4PTNEVHJ1ZSApLAorICAgIENvbHVtbiggImV4 cGlyYXRpb25fdGltZSIsIERhdGVUaW1lICksCisgICAgQ29sdW1uKCAidXNlcl9pZCIsIEludGVn ZXIsIEZvcmVpZ25LZXkoICJnYWxheHlfdXNlci5pZCIgKSwgaW5kZXg9M0RUcj0KdWUgKSApCisK IEdyb3VwLnRhYmxlID0zRCBUYWJsZSggImdhbGF4eV9ncm91cCIsIG1ldGFkYXRhLAogICAgIENv bHVtbiggImlkIiwgSW50ZWdlciwgcHJpbWFyeV9rZXk9M0RUcnVlICksCiAgICAgQ29sdW1uKCAi Y3JlYXRlX3RpbWUiLCBEYXRlVGltZSwgZGVmYXVsdD0zRG5vdyApLApAQCAtMjA0LDYgKzIwOSw5 IEBACiAgICAgICAgICAgICAgICAgICAgICBnYWxheHlfc2Vzc2lvbnM9M0RyZWxhdGlvbiggR2Fs YXh5U2Vzc2lvbiwgb3JkZXJfYnk9Cj0zRGRlc2MoIEdhbGF4eVNlc3Npb24udGFibGUuYy51cGRh dGVfdGltZSApICksCiAgICAgICAgICAgICAgICAgICAgICBhcGlfa2V5cz0zRHJlbGF0aW9uKCBB UElLZXlzLCBiYWNrcmVmPTNEInVzZXIiLCBvcmRlcj0KX2J5PTNEZGVzYyggQVBJS2V5cy50YWJs ZS5jLmNyZWF0ZV90aW1lICkgKSApICkKPTIwCittYXBwZXIoIFBhc3N3b3JkUmVzZXRUb2tlbiwg UGFzc3dvcmRSZXNldFRva2VuLnRhYmxlLAorICAgICAgICBwcm9wZXJ0aWVzPTNEZGljdCggdXNl cj0zRHJlbGF0aW9uKCBVc2VyLCBiYWNrcmVmPTNEInJlc2V0X3Rva2VucyI9CikgKSApCisKIG1h cHBlciggQVBJS2V5cywgQVBJS2V5cy50YWJsZSwKICAgICBwcm9wZXJ0aWVzID0zRCB7fSApCj0y MAoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1yIDNi YmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBsaWIvZ2FsYXh5L3dlYmFw cHMvdG9vbF9zaGVkL21vZGVsL21pZ3JhdGUvdmVyc2lvbnMvMDAyNF89CnBhc3N3b3JkX3Jlc2V0 LnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9tb2Rl bC9taWdyYXRlL3ZlcnNpb25zLzAwMjRfcGFzc3dvcmRfcmVzPQpldC5weQpAQCAtMCwwICsxLDQz IEBACisiIiIKK01pZ3JhdGlvbiBzY3JpcHQgZm9yIHRoZSBwYXNzd29yZCByZXNldCB0YWJsZQor IiIiCisKK2Zyb20gc3FsYWxjaGVteSBpbXBvcnQgKgorZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBv cnQgKgorZnJvbSBtaWdyYXRlIGltcG9ydCAqCitmcm9tIG1pZ3JhdGUuY2hhbmdlc2V0IGltcG9y dCAqCitmcm9tIGdhbGF4eS5tb2RlbC5jdXN0b21fdHlwZXMgaW1wb3J0ICoKKworaW1wb3J0IGRh dGV0aW1lCitub3cgPTNEIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdworCitpbXBvcnQgbG9nZ2lu ZworbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQorCittZXRhZGF0YSA9M0Qg TWV0YURhdGEoKQorCitQYXNzd29yZFJlc2V0VG9rZW5fdGFibGUgPTNEIFRhYmxlKCJwYXNzd29y ZF9yZXNldF90b2tlbiIsIG1ldGFkYXRhLAorICAgIENvbHVtbiggInRva2VuIiwgU3RyaW5nKCAz MiApLCBwcmltYXJ5X2tleT0zRFRydWUsIHVuaXF1ZT0zRFRydWUsIGluZGU9Cng9M0RUcnVlICks CisgICAgQ29sdW1uKCAiZXhwaXJhdGlvbl90aW1lIiwgRGF0ZVRpbWUgKSwKKyAgICBDb2x1bW4o ICJ1c2VyX2lkIiwgSW50ZWdlciwgRm9yZWlnbktleSggImdhbGF4eV91c2VyLmlkIiApLCBpbmRl eD0zRFRyPQp1ZSApKQorCisKK2RlZiB1cGdyYWRlKG1pZ3JhdGVfZW5naW5lKToKKyAgICBtZXRh ZGF0YS5iaW5kID0zRCBtaWdyYXRlX2VuZ2luZQorICAgIHByaW50IF9fZG9jX18KKyAgICBtZXRh ZGF0YS5yZWZsZWN0KCkKKyAgICB0cnk6CisgICAgICAgIFBhc3N3b3JkUmVzZXRUb2tlbl90YWJs ZS5jcmVhdGUoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcHJpbnQgc3Ry KGUpCisgICAgICAgIGxvZy5leGNlcHRpb24oIkNyZWF0aW5nICVzIHRhYmxlIGZhaWxlZDogJXMi ICUgKFBhc3N3b3JkUmVzZXRUb2tlbj0KX3RhYmxlLm5hbWUsIHN0ciggZSApICkgKQorCisKK2Rl ZiBkb3duZ3JhZGUobWlncmF0ZV9lbmdpbmUpOgorICAgIG1ldGFkYXRhLmJpbmQgPTNEIG1pZ3Jh dGVfZW5naW5lCisgICAgbWV0YWRhdGEucmVmbGVjdCgpCisgICAgdHJ5OgorICAgICAgICBQYXNz d29yZFJlc2V0VG9rZW5fdGFibGUuZHJvcCgpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgor ICAgICAgICBwcmludCBzdHIoZSkKKyAgICAgICAgbG9nLmV4Y2VwdGlvbigiRHJvcHBpbmcgJXMg dGFibGUgZmFpbGVkOiAlcyIgJSAoUGFzc3dvcmRSZXNldFRva2VuPQpfdGFibGUubmFtZSwgc3Ry KCBlICkgKSApCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYy MWIgLXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IHN0YXRpYy9z Y3JpcHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMv bXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvdG9v bHMvdG9vbHMtZm9ybS1iYXNlLmpzCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgIHRo aXMudHJlZS5maW5hbGl6ZSgpOwogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIHNob3cg ZXJyb3JzCi0gICAgICAgICAgICBpZiAoIXRoaXMud29ya2Zsb3cgJiYgb3B0aW9ucy5lcnJvcnMp IHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmVycm9ycykgewogICAgICAgICAgICAgICAgIHZh ciBlcnJvcl9tZXNzYWdlcyA9M0QgdGhpcy50cmVlLm1hdGNoUmVzcG9uc2Uob3B0aW9ucy5lcnI9 Cm9ycyk7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5wdXRfaWQgaW4gZXJyb3JfbWVzc2Fn ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoaW5wdXRfaWQsIGVycm9y X21lc3NhZ2VzW2lucHV0X2lkXSwgdHJ1PQplKTsKQEAgLTEzMSw2ICsxMzEsOSBAQAogICAgICAg ICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRfbGlzdFtpXS5yZXNldCgpOwogICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgIH0pOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIHJl ZnJlc2gKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVmcmVzaCcpOwogICAgICAgICB9LAo9 MjAKICAgICAgICAgLyoqIFJlbmRlcnMgdGhlIFVJIGVsZW1lbnRzIHJlcXVpcmVkIGZvciB0aGUg Zm9ybQpAQCAtMTQ1LDcgKzE0OCw3IEBACiAgICAgICAgICAgICAvLyBidXR0b24gZm9yIHZlcnNp b24gc2VsZWN0aW9uCiAgICAgICAgICAgICB2YXIgcmVxdWlyZW1lbnRzX2J1dHRvbiA9M0QgbmV3 IFVpLkJ1dHRvbkljb24oewogICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtaW5mby1jaXJj bGUnLAotICAgICAgICAgICAgICAgIHRpdGxlICAgOiAnUmVxdWlyZW1lbnRzJywKKyAgICAgICAg ICAgICAgICB0aXRsZSAgIDogKCF0aGlzLndvcmtmbG93ICYmICdSZXF1aXJlbWVudHMnKSB8fCBu dWxsLAogICAgICAgICAgICAgICAgIHRvb2x0aXAgOiAnRGlzcGxheSB0b29sIHJlcXVpcmVtZW50 cycsCiAgICAgICAgICAgICAgICAgb25jbGljayA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg ICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkgewpAQCAtMTcwLDcgKzE3Myw3IEBACiAgICAgICAg ICAgICAvLyBidXR0b24gZm9yIHZlcnNpb24gc2VsZWN0aW9uCiAgICAgICAgICAgICB2YXIgdmVy c2lvbnNfYnV0dG9uID0zRCBuZXcgVWkuQnV0dG9uTWVudSh7CiAgICAgICAgICAgICAgICAgaWNv biAgICA6ICdmYS1jdWJlcycsCi0gICAgICAgICAgICAgICAgdGl0bGUgICA6ICdWZXJzaW9ucycs CisgICAgICAgICAgICAgICAgdGl0bGUgICA6ICghdGhpcy53b3JrZmxvdyAmJiAnVmVyc2lvbnMn KSB8fCBudWxsLAogICAgICAgICAgICAgICAgIHRvb2x0aXAgOiAnU2VsZWN0IGFub3RoZXIgdG9v bCB2ZXJzaW9uJwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJz aW9ucyAmJiBvcHRpb25zLnZlcnNpb25zLmxlbmd0aCA+IDEpIHsKQEAgLTIwMCw3ICsyMDMsNyBA QAogICAgICAgICAgICAgLy8gYnV0dG9uIG1lbnUKICAgICAgICAgICAgIHZhciBtZW51X2J1dHRv biA9M0QgbmV3IFVpLkJ1dHRvbk1lbnUoewogICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEt Y2FyZXQtZG93bicsCi0gICAgICAgICAgICAgICAgdGl0bGUgICA6ICdPcHRpb25zJywKKyAgICAg ICAgICAgICAgICB0aXRsZSAgIDogKCF0aGlzLndvcmtmbG93ICYmICdPcHRpb25zJykgfHwgbnVs bCwKICAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1ZpZXcgYXZhaWxhYmxlIG9wdGlvbnMnCiAg ICAgICAgICAgICB9KTsKICAgICAgICAgICAgPTIwCgpkaWZmIC1yIGEyNWNlNjNjZGNmMDdjYjJk MjBmZjM0N2JmNDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFmMDU2NWUxMzY9CmRiYTY1 OTkyNDAzYzBhOWE1IHN0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93 LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93Lmpz CisrKyBiL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCkBA IC05LDYgKzksNyBAQAogICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CiAg ICAgICAgICAgICAvLyBsaW5rIHdpdGggbm9kZSByZXByZXNlbnRhdGlvbiBpbiB3b3JrZmxvdyBt b2R1bGUKICAgICAgICAgICAgIHRoaXMubm9kZSA9M0Qgd29ya2Zsb3cuYWN0aXZlX25vZGU7CisK ICAgICAgICAgICAgIGlmICghdGhpcy5ub2RlKSB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5k ZWJ1ZygnRkFJTEVEIC0gdG9vbHMtZm9ybS13b3JrZmxvdzppbml0aWFsaXplKCkgLT0KIE5vZGUg bm90IGZvdW5kIGluIHdvcmtmbG93LicpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4 LDYgKzE5LDIyIEBACiAgICAgICAgICAgICB0aGlzLndvcmtmbG93ID0zRCB0cnVlOwogICAgICAg ICAgICAgdGhpcy5vcHRpb25zID0zRCBvcHRpb25zOwo9MjAKKyAgICAgICAgICAgIC8vIGRlY2xh cmUgZmllbGRzIGFzIG9wdGlvbmFsCisgICAgICAgICAgICBVdGlscy5kZWVwZWFjaChvcHRpb25z LmlucHV0cywgZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUp IHsKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25hbCA9M0QgKFsnZGF0YScsICdkYXRh X2hpZGRlbicsICdoaWRkZW4nLCAnPQpkcmlsbF9kb3duJ10pLmluZGV4T2YoaXRlbS50eXBlKSA9 M0Q9M0QgLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICA9MjAK KyAgICAgICAgICAgIC8vIGRlY2xhcmUgY29uZGl0aW9uYWwgZmllbGRzIGFzIG5vdCBvcHRpb25h bAorICAgICAgICAgICAgVXRpbHMuZGVlcGVhY2gob3B0aW9ucy5pbnB1dHMsIGZ1bmN0aW9uKGl0 ZW0pIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmIChpdGVtLnR5cGUgPTNEPTNEICdjb25kaXRpb25hbCcpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGl0ZW0udGVzdF9wYXJhbS5vcHRpb25hbCA9M0QgZmFsc2U7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKwogICAgICAg ICAgICAgLy8gbG9hZCBleHRlbnNpb24KICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwog ICAgICAgICAgICAgVXRpbHMuZ2V0KHsKQEAgLTM4LDYgKzU1LDcgQEAKICAgICAgICAgICAgIGlu cHV0c1tVdGlscy51dWlkKCldID0zRCB7CiAgICAgICAgICAgICAgICAgbGFiZWwgICA6ICdFZGl0 IFN0ZXAgQXR0cmlidXRlcycsCiAgICAgICAgICAgICAgICAgdHlwZSAgICA6ICdzZWN0aW9uJywK KyAgICAgICAgICAgICAgICBleHBhbmQgIDogdGhpcy5ub2RlLmFubm90YXRpb24sCiAgICAgICAg ICAgICAgICAgaW5wdXRzICA6IFt7CiAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnQW5u b3RhdGlvbiAvIE5vdGVzJywKICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICA6ICdhbm5vdGF0 aW9uJywKQEAgLTE2MCw3ICsxNzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAg ICAgOiAnYm9vbGVhbicsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgIDogJ2ZhbHNl JywKICAgICAgICAgICAgICAgICAgICAgaWdub3JlICAgICAgOiAnZmFsc2UnLAotICAgICAgICAg ICAgICAgICAgICBoZWxwICAgICAgICA6ICdUaGlzIGFjdGlvbiB3aWxsIHNlbmQgYW4gZW1haWwg bm90aWZ5aW49CmcgeW91IHdoZW4gdGhlIGpvYiBpcyBkb25lLicKKyAgICAgICAgICAgICAgICAg ICAgaGVscCAgICAgICAgOiAnVGhpcyBhY3Rpb24gd2lsbCBzZW5kIGFuIGVtYWlsIG5vdGlmeWlu PQpnIHlvdSB3aGVuIHRoZSBqb2IgaXMgZG9uZS4nLAorICAgICAgICAgICAgICAgICAgICBwYXls b2FkICAgICA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdob3N0JyAgOiB3aW5kb3cubG9j YXRpb24uaG9zdAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSx7CiAg ICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgICAgIDogJ0RlbGV0ZUludGVybWVkaWF0ZXNBY3Rp b24nLAogICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdEZWxldGUgbm9uLW91dHB1 dHMnLApAQCAtMTczLDMxICsxOTQsNTEgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAv LyB2aXNpdCBpbnB1dCBub2RlcyBhbmQgZW5yaWNoIGJ5IG5hbWUvdmFsdWUgcGFpcnMgZnJvbSBz ZXJ2ZT0KciBkYXRhCiAgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKLSAgICAgICAgICAg IGZ1bmN0aW9uIHZpc2l0IChpbnB1dHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGlu IGlucHV0cykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPTNEIGlucHV0c1tpXTsK KyAgICAgICAgICAgIGZ1bmN0aW9uIHZpc2l0IChoZWFkLCBoZWFkX2xpc3QpIHsKKyAgICAgICAg ICAgICAgICBoZWFkX2xpc3QgPTNEIGhlYWRfbGlzdCB8fCBbXTsKKyAgICAgICAgICAgICAgICBo ZWFkX2xpc3QucHVzaChoZWFkKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGhlYWQu aW5wdXRzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9M0QgaGVhZC5pbnB1dHNb aV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5hY3Rpb24pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGNvbnN0cnVjdCBpZGVudGlmaWVyIGFzIGV4cGVjdGVkIGJ5IGJhY2tl bmQKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUgPTNEICdwamFfXycgKyBvdXRw dXRfaWQgKyAnX18nICsgaW5wdXQuPQphY3Rpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoaW5wdXQuYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5u YW1lICs9M0QgJ19fJyArIGlucHV0LmFyZ3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgICA9MjAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v IG1vZGlmeSBuYW1lcyBvZiBwYXlsb2FkIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGlucHV0LnBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig KHZhciBwX2lkIGluIGlucHV0LnBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFyIHAgPTNEIGlucHV0LnBheWxvYWRbcF9pZF07CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlucHV0LnBheWxvYWRbaW5wdXQubmFtZSArICdfXycgKyBwX2lkXSA9Cj0z RCBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgID0yMAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzL3Zl cmlmeSBleGlzdGVuY2Ugb2YgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0z RCBzZWxmLnBvc3Rfam9iX2FjdGlvbnNbaW5wdXQuYWN0aW9uICsgb3V0PQpwdXRfaWRdOwogICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBtYXJrIGFzIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2 YXIgaiBpbiBoZWFkX2xpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh ZF9saXN0W2pdLmV4cGFuZCA9M0QgdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5wdXQgZmllbGQgdmFs dWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuYXJndW1lbnQpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPTNEIGQuYWN0aW9uX2Fy Z3VtZW50cyAmJiBkLmFjPQp0aW9uX2FyZ3VtZW50c1tpbnB1dC5hcmd1bWVudF0gfHwgaW5wdXQu dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPTNEICd0cnVlJzsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaW5w dXRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQoaW5wdXQuaW5wdXRzKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIHN1YiBzZWN0aW9uCisgICAgICAgICAgICAg ICAgICAgIGlmIChpbnB1dC5pbnB1dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0 KGlucHV0LCBoZWFkX2xpc3Quc2xpY2UoMCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlzaXQoaW5wdXRfY29u ZmlnLmlucHV0cyk7Ci0gICAgICAgICAgID0yMAorICAgICAgICAgICAgdmlzaXQoaW5wdXRfY29u ZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyByZXR1cm4g ZmluYWwgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgcmV0dXJuIGlucHV0X2NvbmZpZzsKICAg ICAgICAgfSwKQEAgLTIwNSw2ICsyNDYsMTUgQEAKICAgICAgICAgLyoqIEJ1aWxkcyBhIG5ldyBt b2RlbCB0aHJvdWdoIGFwaSBjYWxsIGFuZCByZWNyZWF0ZXMgdGhlIGVudGlyZSBmPQpvcm0KICAg ICAgICAgKi8KICAgICAgICAgX2J1aWxkTW9kZWw6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg R2FsYXh5Lm1vZGFsLnNob3coeworICAgICAgICAgICAgICAgIHRpdGxlICAgOiAnQ29taW5nIHNv b24uLi4nLAorICAgICAgICAgICAgICAgIGJvZHkgICAgOiAnVGhpcyBmZWF0dXJlIGhhcyBub3Qg YmVlbiBpbXBsZW1lbnRlZCB5ZXQuJywKKyAgICAgICAgICAgICAgICBidXR0b25zIDogeworICAg ICAgICAgICAgICAgICAgICAnQ2xvc2UnIDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBHYWxheHkubW9kYWwuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAgICAgICAgPTIwCiAg ICAgICAgIC8qKiBSZXF1ZXN0IGEgbmV3IG1vZGVsIGZvciBhbiBhbHJlYWR5IGNyZWF0ZWQgdG9v bCBmb3JtIGFuZCB1cGRhdD0KZXMgdGhlIGZvcm0gaW5wdXRzCkBAIC0yMzEsNyArMjgxLDcgQEAK ICAgICAgICAgICAgICAgICBkYXRhICAgIDogY3VycmVudF9zdGF0ZSwKICAgICAgICAgICAgICAg ICBzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAvLyB1cGRh dGUgbm9kZSBpbiB3b3JrZmxvdyBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5ub2Rl LnVwZGF0ZV9maWVsZF9kYXRhKGRhdGEsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzZWxm Lm5vZGUudXBkYXRlX2ZpZWxkX2RhdGEoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgPTIwCiAg ICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgY29tcGxldGVkCiAgICAgICAgICAgICAgICAg ICAgIHNlbGYuZGVmZXJyZWQuZG9uZShwcm9jZXNzX2lkKTsKCmRpZmYgLXIgYTI1Y2U2M2NkY2Yw N2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0K ZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWlucHV0Lmpz Ci0tLSBhL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy1pbnB1dC5qcworKysgYi9zdGF0 aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtaW5wdXQuanMKQEAgLTEyLDYgKzEyLDcgQEAKICAg ICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBsaW5rIGZpZWxkCiAgICAgICAgICAgICB0aGlz LmZpZWxkID0zRCBvcHRpb25zLmZpZWxkOworICAgICAgICAgICAgdGhpcy5kZWZhdWx0dmFsdWUg PTNEIG9wdGlvbnMuZGVmYXVsdHZhbHVlOwogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8v IHNldCBlbGVtZW50CiAgICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUo b3B0aW9ucykpOwpAQCAtMjUsOCArMjYsMTMgQEAKICAgICAgICAgICAgIC8vIGFkZCBmaWVsZCBl bGVtZW50CiAgICAgICAgICAgICB0aGlzLiRmaWVsZC5wcmVwZW5kKHRoaXMuZmllbGQuJGVsKTsK ICAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBzdGFydCB3aXRoIGVuYWJsZWQgb3B0aW9u YWwgZmllbGRzCisgICAgICAgICAgICAvLyBkZWNpZGUgd2V0aGVyIHRvIGV4cGFuZCBvciBjb2xs YXBzZSBvcHRpb25hbCBmaWVsZHMKICAgICAgICAgICAgIHRoaXMuZmllbGQuc2tpcCA9M0QgZmFs c2U7CisgICAgICAgICAgICB2YXIgdiA9M0QgdGhpcy5maWVsZC52YWx1ZSAmJiB0aGlzLmZpZWxk LnZhbHVlKCk7CisgICAgICAgICAgICB0aGlzLmZpZWxkLnNraXAgPTNEIEJvb2xlYW4ob3B0aW9u cy5vcHRpb25hbCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo dGhpcy5maWVsZC52YWxpZGF0ZSAmJiAhdGhpcy5maWU9CmxkLnZhbGlkYXRlKCkpIHx8ICF2IHx8 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgPTNEPTNEIHRoaXMu ZGVmYXVsdHZhbHVlKSB8fCAoTj0KdW1iZXIodikgPTNEPTNEIE51bWJlcih0aGlzLmRlZmF1bHR2 YWx1ZSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpTT04u c3RyaW5naWZ5KHYpID0zRD0zRCBKU09OLnN0cj0KaW5naWZ5KHRoaXMuZGVmYXVsdHZhbHVlKSkp KTsKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyByZWZyZXNoIHZpZXcKICAgICAgICAg ICAgIHRoaXMuX3JlZnJlc2goKTsKQEAgLTYzLDExICs2OSwxMiBAQAogICAgICAgICAgICAgaWYg KCF0aGlzLmZpZWxkLnNraXApIHsKICAgICAgICAgICAgICAgICB0aGlzLiRmaWVsZC5mYWRlSW4o J2Zhc3QnKTsKICAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZV9vcHRpb25hbC5odG1sKCdEaXNh YmxlJyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcHAudHJpZ2dlcigncmVmcmVzaCcpOwogICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aGlzLiRmaWVsZC5oaWRlKCk7CiAg ICAgICAgICAgICAgICAgdGhpcy4kdGl0bGVfb3B0aW9uYWwuaHRtbCgnRW5hYmxlJyk7CisgICAg ICAgICAgICAgICAgdGhpcy5maWVsZC52YWx1ZSAmJiB0aGlzLmZpZWxkLnZhbHVlKHRoaXMuZGVm YXVsdHZhbHVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuYXBwLnRyaWdnZXIo J3JlZnJlc2gnKTsKICAgICAgICAgfSwKICAgICAgICA9MjAKICAgICAgICAgLyoqIE1haW4gVGVt cGxhdGUKQEAgLTgyLDcgKzg5LDcgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBp cyBvcHRpb25hbAogICAgICAgICAgICAgaWYgKG9wdGlvbnMub3B0aW9uYWwpIHsKLSAgICAgICAg ICAgICAgICB0bXAgKz0zRCAgICAgICAgICAnT3B0aW9uYWw6ICcgKyBvcHRpb25zLmxhYmVsICsK KyAgICAgICAgICAgICAgICB0bXAgKz0zRCAgICAgICAgICBvcHRpb25zLmxhYmVsICsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPiZuYnNwWzxzcGFuIGNsYXNzPTNEInVp LXRhYmxlLWZvcm0tPQp0aXRsZS1vcHRpb25hbCIvPl08L3NwYW4+JzsKICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgdG1wICs9M0QgICAgICAgICAgb3B0aW9ucy5sYWJlbDsK CmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJl YTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3NjcmlwdHMvbXZj L3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rv b2xzLXNlY3Rpb24uanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rp b24uanMKQEAgLTIzMiw5ICsyMzIsOSBAQAogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8v IGNyZWF0ZSBpbnB1dCBmaWVsZCB3cmFwcGVyCiAgICAgICAgICAgICB2YXIgaW5wdXRfZWxlbWVu dCA9M0QgbmV3IElucHV0RWxlbWVudCh0aGlzLmFwcCwgewotICAgICAgICAgICAgICAgIGxhYmVs ICAgICAgIDogaW5wdXRfZGVmLnRpdGxlLAotICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDog aW5wdXRfZGVmLmhlbHAsCi0gICAgICAgICAgICAgICAgZmllbGQgICAgICAgOiByZXBlYXQKKyAg ICAgICAgICAgICAgICBsYWJlbCAgIDogaW5wdXRfZGVmLnRpdGxlLAorICAgICAgICAgICAgICAg IGhlbHAgICAgOiBpbnB1dF9kZWYuaGVscCwKKyAgICAgICAgICAgICAgICBmaWVsZCAgIDogcmVw ZWF0CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBkaXNw bGF5cyBhcyBncm91cGVkIHN1YnNlY3Rpb24KQEAgLTI5Miw2ICsyOTIsMTEgQEAKICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPTIwCisgICAgICAgICAgICAv LyBzaG93IHN1YiBzZWN0aW9uIGlmIHJlcXVlc3RlZAorICAgICAgICAgICAgaWYgKGlucHV0X2Rl Zi5leHBhbmQpIHsKKyAgICAgICAgICAgICAgICBwb3J0bGV0LiRoZWFkZXIudHJpZ2dlcignY2xp Y2snKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBjcmVh dGUgdGFibGUgcm93CiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFkZChwb3J0bGV0LiRlbCk7Cj0y MApAQCAtMzEzLDEwICszMTgsMTEgQEAKICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAvLyBj cmVhdGUgaW5wdXQgZmllbGQgd3JhcHBlcgogICAgICAgICAgICAgdmFyIGlucHV0X2VsZW1lbnQg PTNEIG5ldyBJbnB1dEVsZW1lbnQodGhpcy5hcHAsIHsKLSAgICAgICAgICAgICAgICBsYWJlbCAg ICAgICA6IGlucHV0X2RlZi5sYWJlbCwKLSAgICAgICAgICAgICAgICBvcHRpb25hbCAgICA6IGlu cHV0X2RlZi5vcHRpb25hbCwKLSAgICAgICAgICAgICAgICBoZWxwICAgICAgICA6IGlucHV0X2Rl Zi5oZWxwLAotICAgICAgICAgICAgICAgIGZpZWxkICAgICAgIDogZmllbGQKKyAgICAgICAgICAg ICAgICBsYWJlbCAgICAgICAgICAgOiBpbnB1dF9kZWYubGFiZWwsCisgICAgICAgICAgICAgICAg ZGVmYXVsdHZhbHVlICAgIDogaW5wdXRfZGVmLmRlZmF1bHR2YWx1ZSwKKyAgICAgICAgICAgICAg ICBvcHRpb25hbCAgICAgICAgOiBpbnB1dF9kZWYub3B0aW9uYWwsCisgICAgICAgICAgICAgICAg aGVscCAgICAgICAgICAgIDogaW5wdXRfZGVmLmhlbHAsCisgICAgICAgICAgICAgICAgZmllbGQg ICAgICAgICAgIDogZmllbGQKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICA9MjAKICAgICAg ICAgICAgIC8vIGFkZCB0byBlbGVtZW50IGxpc3QKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQy MGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5 OTI0MDNjMGE5YTUgc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRlbXBsYXRlLmpzCi0t LSBhL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy10ZW1wbGF0ZS5qcworKysgYi9zdGF0 aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdGVtcGxhdGUuanMKQEAgLTQsNyArNCw3IEBACiAv LyB0b29sIGZvcm0gdGVtcGxhdGVzCiByZXR1cm4gewogICAgIGhlbHA6IGZ1bmN0aW9uKGNvbnRl bnQpIHsKLSAgICAgICAgcmV0dXJuICAnPGRpdiBjbGFzcz0zRCJ0b29sSGVscCI+JyArCisgICAg ICAgIHJldHVybiAgJzxkaXYgY2xhc3M9M0QidG9vbEhlbHAiIHN0eWxlPTNEIm92ZXJmbG93OiBh dXRvOyI+JyArCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPTNEInRvb2xIZWxwQm9k eSI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICsKICAgICAgICAgICAgICAg ICAgICAgJzwvZGl2PicgKwoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2 ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBz dGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0 cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMv dG9vbHMtdHJlZS5qcwpAQCAtMTIyLDEzICsxMjIsMjEgQEAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhbHVlID0zRCBwYXRjaFtpbnB1dC50eXBlXSh2YWx1ZSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9MjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGRlZmF1 bHQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5za2lw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudmFsaWRh dGUgJiYgIWZpZWxkLnZhbGlkYXRlKD0KdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGhhbmRsZSBzaW1wbGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFmaWVsZC5za2lwIHx8IHNlbGYuYXBwLndvcmtmbG93KSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGUgJiYgIWZpZWxk LnZhbGlkYXRlKD0KKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbHVlID0zRCBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Lmlnbm9yZSA9M0Q9 M0Q9M0QgdW5kZWZpbmVkIHw9CnwgKHZhbHVlICYmIGlucHV0Lmlnbm9yZSAhPTNEIHZhbHVlKSkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Lmlnbm9yZSA9 M0Q9M0Q9M0QgdW5kZWZpbmVkIHw9CnwgKHZhbHVlICE9M0Q9M0QgbnVsbCAmJiBpbnB1dC5pZ25v cmUgIT0zRCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBhZGQgdmFsdWUgdG8gc3VibWlzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFkZCAoam9iX2lucHV0X2lkLCBpbnB1dC5pZCwgdmFsdWU9Cik7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPTIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gYWRkIHBheWxvYWQgdG8gc3VibWlzc2lvbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5wYXlsb2FkKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBfaWQgaW4gaW5wdXQu cGF5bG9hZD0KKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhZGQgKHBfaWQsIGlucHV0LmlkLCBpbnB1dD0KLnBheWxvYWRbcF9pZF0pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2 ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBz dGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcwotLS0gYS9z dGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcworKysgYi9z dGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcwpAQCAtMSwx ICsxLDEgQEAKLWRlZmluZShbInV0aWxzL3V0aWxzIiwidXRpbHMvZGVmZXJyZWQiLCJtdmMvdWkv dWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjPQoiLCJtdmMvY2l0YXRpb24vY2l0YXRpb24tbW9k ZWwiLCJtdmMvY2l0YXRpb24vY2l0YXRpb24tdmlldyIsIm12Yy90b29scyIsIm09CnZjL3Rvb2xz L3Rvb2xzLXRlbXBsYXRlIiwibXZjL3Rvb2xzL3Rvb2xzLWNvbnRlbnQiLCJtdmMvdG9vbHMvdG9v bHMtc2VjdGlvbj0KIiwibXZjL3Rvb2xzL3Rvb2xzLXRyZWUiXSxmdW5jdGlvbihnLGgsZixrLGks YSxkLGMsZSxqLGIpe3JldHVybiBCYWNrYm9uZS5WPQppZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1 bmN0aW9uKGwpe2NvbnNvbGUuZGVidWcobCk7dmFyIG09M0RwYXJlbnQuR2FsYXh5O2k9CmYobSYm bS5tb2RhbCl7dGhpcy5tb2RhbD0zRG0ubW9kYWx9ZWxzZXt0aGlzLm1vZGFsPTNEbmV3IGsuTW9k YWwuVmlldygpfWlmKD0KbSYmbS5jdXJyVXNlcil7dGhpcy5pc19hZG1pbj0zRG0uY3VyclVzZXIu Z2V0KCJpc19hZG1pbiIpfWVsc2V7dGhpcy5pc19hZG1pPQpuPTNEZmFsc2V9dGhpcy5vcHRpb25z PTNEbDt0aGlzLmNvbnRhaW5lcj0zRHRoaXMub3B0aW9ucy5jb250YWluZXJ8fCJib2R5Ijs9CnRo aXMuZGVmZXJyZWQ9M0RuZXcgaCgpO3RoaXMuc2V0RWxlbWVudCgiPGRpdi8+Iik7JCh0aGlzLmNv bnRhaW5lcikuYXBwZW5kKD0KdGhpcy4kZWwpO3RoaXMuX2J1aWxkRm9ybSgpfSxyZWNpZXB0OmZ1 bmN0aW9uKGwpeyQodGhpcy5jb250YWluZXIpLmVtcHR5KCk7PQokKHRoaXMuY29udGFpbmVyKS5h cHBlbmQobCl9LGhpZ2hsaWdodDpmdW5jdGlvbihtLG4sbCl7dmFyIG89M0R0aGlzLmVsZW1lbnQ9 Cl9saXN0W21dO2lmKG8pe28uZXJyb3Iobnx8IlBsZWFzZSB2ZXJpZnkgdGhpcyBwYXJhbWV0ZXIu Iik7aWYoIWwpeyQodGhpcy5jbz0KbnRhaW5lcikuYW5pbWF0ZSh7c2Nyb2xsVG9wOm8uJGVsLm9m ZnNldCgpLnRvcC0yMH0sNTAwKX19fSxfYnVpbGRGb3JtOmZ1bmN0PQppb24oKXt2YXIgbD0zRHRo aXM7dGhpcy5vZmYoInJlZnJlc2giKTt0aGlzLm9mZigicmVzZXQiKTt0aGlzLmZpZWxkX2xpc3Q9 M0Q9Cnt9O3RoaXMuaW5wdXRfbGlzdD0zRHt9O3RoaXMuZWxlbWVudF9saXN0PTNEe307dGhpcy50 cmVlPTNEbmV3IGIodGhpcyk7dGhpcz0KLmNvbnRlbnQ9M0RuZXcgZSh0aGlzKTt2YXIgbj0zRHRo aXMub3B0aW9uczt0aGlzLl9yZW5kZXJGb3JtKG4pO3RoaXMudHJlZS5mPQppbmFsaXplKCk7aWYo IXRoaXMud29ya2Zsb3cmJm4uZXJyb3JzKXt2YXIgbz0zRHRoaXMudHJlZS5tYXRjaFJlc3BvbnNl KG4uZXI9CnJvcnMpO2Zvcih2YXIgbSBpbiBvKXt0aGlzLmhpZ2hsaWdodChtLG9bbV0sdHJ1ZSl9 fXRoaXMub24oInJlZnJlc2giLGZ1bmN0aT0Kb24oKXtsLmRlZmVycmVkLnJlc2V0KCk7bC5kZWZl cnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7bC5fdXBkYXRlTW9kZWwoKX0pfSk7PQp0aGlzLm9uKCJy ZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIHAgaW4gdGhpcy5lbGVtZW50X2xpc3Qpe3RoaXMuZWxl bWVudF9saXM9CnRbcF0ucmVzZXQoKX19KX0sX3JlbmRlckZvcm06ZnVuY3Rpb24odSl7dmFyIHQ9 M0R0aGlzO3RoaXMubWVzc2FnZT0zRG5ldyBrLj0KTWVzc2FnZSgpO3ZhciBxPTNEbmV3IGsuQnV0 dG9uSWNvbih7aWNvbjoiZmEtaW5mby1jaXJjbGUiLHRpdGxlOiJSZXF1aXJlbWVuPQp0cyIsdG9v bHRpcDoiRGlzcGxheSB0b29sIHJlcXVpcmVtZW50cyIsb25jbGljazpmdW5jdGlvbigpe2lmKCF0 aGlzLnZpc2libGU9Cil7dGhpcy52aXNpYmxlPTNEdHJ1ZTt0Lm1lc3NhZ2UudXBkYXRlKHtwZXJz aXN0ZW50OnRydWUsbWVzc2FnZTpjLnJlcXVpcmVtZT0KbnRzKHUpLHN0YXR1czoiaW5mbyJ9KX1l bHNle3RoaXMudmlzaWJsZT0zRGZhbHNlO3QubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6PQoiIn0p fX19KTtpZighdS5yZXF1aXJlbWVudHN8fHUucmVxdWlyZW1lbnRzLmxlbmd0aD0zRD0zRDApe3Eu JGVsLmhpZGUoKX12YXI9CiBtPTNEbmV3IGsuQnV0dG9uTWVudSh7aWNvbjoiZmEtY3ViZXMiLHRp dGxlOiJWZXJzaW9ucyIsdG9vbHRpcDoiU2VsZWN0IGFubz0KdGhlciB0b29sIHZlcnNpb24ifSk7 aWYodS52ZXJzaW9ucyYmdS52ZXJzaW9ucy5sZW5ndGg+MSl7Zm9yKHZhciBvIGluIHUudmVyPQpz aW9ucyl7dmFyIHI9M0R1LnZlcnNpb25zW29dO2lmKHIhPTNEdS52ZXJzaW9uKXttLmFkZE1lbnUo e3RpdGxlOiJTd2l0Y2ggdG89CiAiK3IsdmVyc2lvbjpyLGljb246ImZhLWN1YmUiLG9uY2xpY2s6 ZnVuY3Rpb24oKXt1LmlkPTNEdS5pZC5yZXBsYWNlKHUudmVycz0KaW9uLHRoaXMudmVyc2lvbik7 dS52ZXJzaW9uPTNEdGhpcy52ZXJzaW9uO3QuZGVmZXJyZWQucmVzZXQoKTt0LmRlZmVycmVkLmV4 PQplY3V0ZShmdW5jdGlvbigpe3QuX2J1aWxkTW9kZWwoKX0pfX0pfX19ZWxzZXttLiRlbC5oaWRl KCl9dmFyIHA9M0RuZXcgay5CdXQ9CnRvbk1lbnUoe2ljb246ImZhLWNhcmV0LWRvd24iLHRpdGxl OiJPcHRpb25zIix0b29sdGlwOiJWaWV3IGF2YWlsYWJsZSBvcHRpbz0KbnMifSk7aWYodS5iaW9z dGFyX3VybCl7cC5hZGRNZW51KHtpY29uOiJmYS1xdWVzdGlvbi1jaXJjbGUiLHRpdGxlOiJRdWVz dGlvPQpuPyIsdG9vbHRpcDoiQXNrIGEgcXVlc3Rpb24gYWJvdXQgdGhpcyB0b29sIChCaW9zdGFy KSIsb25jbGljazpmdW5jdGlvbigpe3c9CmluZG93Lm9wZW4odS5iaW9zdGFyX3VybCsiL3AvbmV3 L3Bvc3QvIil9fSk7cC5hZGRNZW51KHtpY29uOiJmYS1zZWFyY2giLHRpdD0KbGU6IlNlYXJjaCIs dG9vbHRpcDoiU2VhcmNoIGhlbHAgZm9yIHRoaXMgdG9vbCAoQmlvc3RhcikiLG9uY2xpY2s6ZnVu Y3Rpb24oPQope3dpbmRvdy5vcGVuKHUuYmlvc3Rhcl91cmwrIi90LyIrdS5pZCsiLyIpfX0pfXAu YWRkTWVudSh7aWNvbjoiZmEtc2hhcmUiLHQ9Cml0bGU6IlNoYXJlIix0b29sdGlwOiJTaGFyZSB0 aGlzIHRvb2wiLG9uY2xpY2s6ZnVuY3Rpb24oKXtwcm9tcHQoIkNvcHkgdG8gYz0KbGlwYm9hcmQ6 IEN0cmwrQywgRW50ZXIiLHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZ2FsYXh5X2NvbmZpZy5yb290 KyJyb290P3RvPQpvbF9pZD0zRCIrdS5pZCl9fSk7aWYodGhpcy5pc19hZG1pbil7cC5hZGRNZW51 KHtpY29uOiJmYS1kb3dubG9hZCIsdGl0bGU6IkQ9Cm93bmxvYWQiLHRvb2x0aXA6IkRvd25sb2Fk IHRoaXMgdG9vbCIsb25jbGljazpmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5ocj0KZWY9M0Rn YWxheHlfY29uZmlnLnJvb3QrImFwaS90b29scy8iK3UuaWQrIi9kb3dubG9hZCJ9fSl9dGhpcy5z ZWN0aW9uPTNEbmV3PQogai5WaWV3KHQse2lucHV0czp1LmlucHV0cyxjbHM6InVpLXRhYmxlLXBs YWluIn0pO2lmKHRoaXMuaW5jb21wYXRpYmxlKXt0aGk9CnMuJGVsLmhpZGUoKTskKCIjdG9vbC1m b3JtLWNsYXNzaWMiKS5zaG93KCk7cmV0dXJufXRoaXMucG9ydGxldD0zRG5ldyBmLlZpZT0Kdyh7 aWNvbjoiZmEtd3JlbmNoIix0aXRsZToiPGI+Iit1Lm5hbWUrIjwvYj4gIit1LmRlc2NyaXB0aW9u KyIgKEdhbGF4eSBUb29sPQogVmVyc2lvbiAiK3UudmVyc2lvbisiKSIsY2xzOiJ1aS1wb3J0bGV0 LXNsaW0iLG9wZXJhdGlvbnM6e3JlcXVpcmVtZW50czpxLG09CmVudTpwLHZlcnNpb25zOm19LGJ1 dHRvbnM6dGhpcy5idXR0b25zfSk7aWYodGhpcy5vcHRpb25zLndvcmtmbG93KXt0aGlzLnBvcj0K dGxldC4kY29udGVudC5jc3MoInBhZGRpbmciLCIwcHgiKX10aGlzLnBvcnRsZXQuYXBwZW5kKHRo aXMubWVzc2FnZS4kZWwsdHJ1PQplKTt0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMuc2VjdGlvbi4k ZWwpO3RoaXMuJGVsLmVtcHR5KCk7dGhpcy4kZWwuYXBwZW5kKHQ9Cmhpcy5wb3J0bGV0LiRlbCk7 aWYodS5oZWxwIT0zRCIiKXt0aGlzLiRlbC5hcHBlbmQoYy5oZWxwKHUuaGVscCkpfWlmKHUuY2l0 YT0KdGlvbnMpe3ZhciBzPTNEJCgiPGRpdi8+Iik7dmFyIGw9M0RuZXcgaS5Ub29sQ2l0YXRpb25D b2xsZWN0aW9uKCk7bC50b29sX2lkPQo9M0R1LmlkO3ZhciBuPTNEbmV3IGEuQ2l0YXRpb25MaXN0 Vmlldyh7ZWw6cyxjb2xsZWN0aW9uOmx9KTtuLnJlbmRlcigpO2wuZmU9CnRjaCgpO3RoaXMuJGVs LmFwcGVuZChzKX1pZih1Lm1lc3NhZ2Upe3RoaXMubWVzc2FnZS51cGRhdGUoe3BlcnNpc3RlbnQ6 dHJ1ZT0KLHN0YXR1czoid2FybmluZyIsbWVzc2FnZTp1Lm1lc3NhZ2V9KX19fSl9KTsKXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoWyJ1dGlscy91dGlscyIsInV0aWxzL2RlZmVy cmVkIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJtdmMvdWkvdWktbWlzYz0KIiwibXZjL2NpdGF0aW9u L2NpdGF0aW9uLW1vZGVsIiwibXZjL2NpdGF0aW9uL2NpdGF0aW9uLXZpZXciLCJtdmMvdG9vbHMi LCJtPQp2Yy90b29scy90b29scy10ZW1wbGF0ZSIsIm12Yy90b29scy90b29scy1jb250ZW50Iiwi bXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb249CiIsIm12Yy90b29scy90b29scy10cmVlIl0sZnVuY3Rp b24oZyxoLGYsayxpLGEsZCxjLGUsaixiKXtyZXR1cm4gQmFja2JvbmUuVj0KaWV3LmV4dGVuZCh7 aW5pdGlhbGl6ZTpmdW5jdGlvbihsKXtjb25zb2xlLmRlYnVnKGwpO3ZhciBtPTNEcGFyZW50Lkdh bGF4eTtpPQpmKG0mJm0ubW9kYWwpe3RoaXMubW9kYWw9M0RtLm1vZGFsfWVsc2V7dGhpcy5tb2Rh bD0zRG5ldyBrLk1vZGFsLlZpZXcoKX1pZig9Cm0mJm0uY3VyclVzZXIpe3RoaXMuaXNfYWRtaW49 M0RtLmN1cnJVc2VyLmdldCgiaXNfYWRtaW4iKX1lbHNle3RoaXMuaXNfYWRtaT0Kbj0zRGZhbHNl fXRoaXMub3B0aW9ucz0zRGw7dGhpcy5jb250YWluZXI9M0R0aGlzLm9wdGlvbnMuY29udGFpbmVy fHwiYm9keSI7PQp0aGlzLmRlZmVycmVkPTNEbmV3IGgoKTt0aGlzLnNldEVsZW1lbnQoIjxkaXYv PiIpOyQodGhpcy5jb250YWluZXIpLmFwcGVuZCg9CnRoaXMuJGVsKTt0aGlzLl9idWlsZEZvcm0o KX0scmVjaWVwdDpmdW5jdGlvbihsKXskKHRoaXMuY29udGFpbmVyKS5lbXB0eSgpOz0KJCh0aGlz LmNvbnRhaW5lcikuYXBwZW5kKGwpfSxoaWdobGlnaHQ6ZnVuY3Rpb24obSxuLGwpe3ZhciBvPTNE dGhpcy5lbGVtZW50PQpfbGlzdFttXTtpZihvKXtvLmVycm9yKG58fCJQbGVhc2UgdmVyaWZ5IHRo aXMgcGFyYW1ldGVyLiIpO2lmKCFsKXskKHRoaXMuY289Cm50YWluZXIpLmFuaW1hdGUoe3Njcm9s bFRvcDpvLiRlbC5vZmZzZXQoKS50b3AtMjB9LDUwMCl9fX0sX2J1aWxkRm9ybTpmdW5jdD0KaW9u KCl7dmFyIGw9M0R0aGlzO3RoaXMub2ZmKCJyZWZyZXNoIik7dGhpcy5vZmYoInJlc2V0Iik7dGhp cy5maWVsZF9saXN0PTNEPQp7fTt0aGlzLmlucHV0X2xpc3Q9M0R7fTt0aGlzLmVsZW1lbnRfbGlz dD0zRHt9O3RoaXMudHJlZT0zRG5ldyBiKHRoaXMpO3RoaXM9Ci5jb250ZW50PTNEbmV3IGUodGhp cyk7dmFyIG49M0R0aGlzLm9wdGlvbnM7dGhpcy5fcmVuZGVyRm9ybShuKTt0aGlzLnRyZWUuZj0K aW5hbGl6ZSgpO2lmKG4uZXJyb3JzKXt2YXIgbz0zRHRoaXMudHJlZS5tYXRjaFJlc3BvbnNlKG4u ZXJyb3JzKTtmb3IodmFyIG0gPQppbiBvKXt0aGlzLmhpZ2hsaWdodChtLG9bbV0sdHJ1ZSl9fXRo aXMub24oInJlZnJlc2giLGZ1bmN0aW9uKCl7bC5kZWZlcnJlZC49CnJlc2V0KCk7bC5kZWZlcnJl ZC5leGVjdXRlKGZ1bmN0aW9uKCl7bC5fdXBkYXRlTW9kZWwoKX0pfSk7dGhpcy5vbigicmVzZXQi LD0KZnVuY3Rpb24oKXtmb3IodmFyIHAgaW4gdGhpcy5lbGVtZW50X2xpc3Qpe3RoaXMuZWxlbWVu dF9saXN0W3BdLnJlc2V0KCl9fSk7PQp0aGlzLnRyaWdnZXIoInJlZnJlc2giKX0sX3JlbmRlckZv cm06ZnVuY3Rpb24odSl7dmFyIHQ9M0R0aGlzO3RoaXMubWVzc2FnZT0KPTNEbmV3IGsuTWVzc2Fn ZSgpO3ZhciBxPTNEbmV3IGsuQnV0dG9uSWNvbih7aWNvbjoiZmEtaW5mby1jaXJjbGUiLHRpdGxl OighPQp0aGlzLndvcmtmbG93JiYiUmVxdWlyZW1lbnRzIil8fG51bGwsdG9vbHRpcDoiRGlzcGxh eSB0b29sIHJlcXVpcmVtZW50cyIsb249CmNsaWNrOmZ1bmN0aW9uKCl7aWYoIXRoaXMudmlzaWJs ZSl7dGhpcy52aXNpYmxlPTNEdHJ1ZTt0Lm1lc3NhZ2UudXBkYXRlKHtwZT0KcnNpc3RlbnQ6dHJ1 ZSxtZXNzYWdlOmMucmVxdWlyZW1lbnRzKHUpLHN0YXR1czoiaW5mbyJ9KX1lbHNle3RoaXMudmlz aWJsZT0KPTNEZmFsc2U7dC5tZXNzYWdlLnVwZGF0ZSh7bWVzc2FnZToiIn0pfX19KTtpZighdS5y ZXF1aXJlbWVudHN8fHUucmVxdWlyZW1lPQpudHMubGVuZ3RoPTNEPTNEMCl7cS4kZWwuaGlkZSgp fXZhciBtPTNEbmV3IGsuQnV0dG9uTWVudSh7aWNvbjoiZmEtY3ViZXMiLHQ9Cml0bGU6KCF0aGlz LndvcmtmbG93JiYiVmVyc2lvbnMiKXx8bnVsbCx0b29sdGlwOiJTZWxlY3QgYW5vdGhlciB0b29s IHZlcnNpbz0KbiJ9KTtpZih1LnZlcnNpb25zJiZ1LnZlcnNpb25zLmxlbmd0aD4xKXtmb3IodmFy IG8gaW4gdS52ZXJzaW9ucyl7dmFyIHI9M0R1PQoudmVyc2lvbnNbb107aWYociE9M0R1LnZlcnNp b24pe20uYWRkTWVudSh7dGl0bGU6IlN3aXRjaCB0byAiK3IsdmVyc2lvbjpyLGk9CmNvbjoiZmEt Y3ViZSIsb25jbGljazpmdW5jdGlvbigpe3UuaWQ9M0R1LmlkLnJlcGxhY2UodS52ZXJzaW9uLHRo aXMudmVyc2lvbj0KKTt1LnZlcnNpb249M0R0aGlzLnZlcnNpb247dC5kZWZlcnJlZC5yZXNldCgp O3QuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpPQp7dC5fYnVpbGRNb2RlbCgpfSl9fSl9fX1l bHNle20uJGVsLmhpZGUoKX12YXIgcD0zRG5ldyBrLkJ1dHRvbk1lbnUoe2ljb246ImY9CmEtY2Fy ZXQtZG93biIsdGl0bGU6KCF0aGlzLndvcmtmbG93JiYiT3B0aW9ucyIpfHxudWxsLHRvb2x0aXA6 IlZpZXcgYXZhaWxhYj0KbGUgb3B0aW9ucyJ9KTtpZih1LmJpb3N0YXJfdXJsKXtwLmFkZE1lbnUo e2ljb246ImZhLXF1ZXN0aW9uLWNpcmNsZSIsdGl0bGU6PQoiUXVlc3Rpb24/Iix0b29sdGlwOiJB c2sgYSBxdWVzdGlvbiBhYm91dCB0aGlzIHRvb2wgKEJpb3N0YXIpIixvbmNsaWNrOmZ1bmM9CnRp b24oKXt3aW5kb3cub3Blbih1LmJpb3N0YXJfdXJsKyIvcC9uZXcvcG9zdC8iKX19KTtwLmFkZE1l bnUoe2ljb246ImZhLXNlYT0KcmNoIix0aXRsZToiU2VhcmNoIix0b29sdGlwOiJTZWFyY2ggaGVs cCBmb3IgdGhpcyB0b29sIChCaW9zdGFyKSIsb25jbGljazpmPQp1bmN0aW9uKCl7d2luZG93Lm9w ZW4odS5iaW9zdGFyX3VybCsiL3QvIit1LmlkKyIvIil9fSl9cC5hZGRNZW51KHtpY29uOiJmYS09 CnNoYXJlIix0aXRsZToiU2hhcmUiLHRvb2x0aXA6IlNoYXJlIHRoaXMgdG9vbCIsb25jbGljazpm dW5jdGlvbigpe3Byb21wdCgiQz0Kb3B5IHRvIGNsaXBib2FyZDogQ3RybCtDLCBFbnRlciIsd2lu ZG93LmxvY2F0aW9uLm9yaWdpbitnYWxheHlfY29uZmlnLnJvb3QrPQoicm9vdD90b29sX2lkPTNE Iit1LmlkKX19KTtpZih0aGlzLmlzX2FkbWluKXtwLmFkZE1lbnUoe2ljb246ImZhLWRvd25sb2Fk Iiw9CnRpdGxlOiJEb3dubG9hZCIsdG9vbHRpcDoiRG93bmxvYWQgdGhpcyB0b29sIixvbmNsaWNr OmZ1bmN0aW9uKCl7d2luZG93LmxvYz0KYXRpb24uaHJlZj0zRGdhbGF4eV9jb25maWcucm9vdCsi YXBpL3Rvb2xzLyIrdS5pZCsiL2Rvd25sb2FkIn19KX10aGlzLnNlY3RpPQpvbj0zRG5ldyBqLlZp ZXcodCx7aW5wdXRzOnUuaW5wdXRzLGNsczoidWktdGFibGUtcGxhaW4ifSk7aWYodGhpcy5pbmNv bXBhdGk9CmJsZSl7dGhpcy4kZWwuaGlkZSgpOyQoIiN0b29sLWZvcm0tY2xhc3NpYyIpLnNob3co KTtyZXR1cm59dGhpcy5wb3J0bGV0PTNEbj0KZXcgZi5WaWV3KHtpY29uOiJmYS13cmVuY2giLHRp dGxlOiI8Yj4iK3UubmFtZSsiPC9iPiAiK3UuZGVzY3JpcHRpb24rIiAoR2FsPQpheHkgVG9vbCBW ZXJzaW9uICIrdS52ZXJzaW9uKyIpIixjbHM6InVpLXBvcnRsZXQtc2xpbSIsb3BlcmF0aW9uczp7 cmVxdWlyZW09CmVudHM6cSxtZW51OnAsdmVyc2lvbnM6bX0sYnV0dG9uczp0aGlzLmJ1dHRvbnN9 KTtpZih0aGlzLm9wdGlvbnMud29ya2Zsb3cpez0KdGhpcy5wb3J0bGV0LiRjb250ZW50LmNzcygi cGFkZGluZyIsIjBweCIpfXRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlPQouJGVsLHRy dWUpO3RoaXMucG9ydGxldC5hcHBlbmQodGhpcy5zZWN0aW9uLiRlbCk7dGhpcy4kZWwuZW1wdHko KTt0aGlzLiRlbC49CmFwcGVuZCh0aGlzLnBvcnRsZXQuJGVsKTtpZih1LmhlbHAhPTNEIiIpe3Ro aXMuJGVsLmFwcGVuZChjLmhlbHAodS5oZWxwKSl9aT0KZih1LmNpdGF0aW9ucyl7dmFyIHM9M0Qk KCI8ZGl2Lz4iKTt2YXIgbD0zRG5ldyBpLlRvb2xDaXRhdGlvbkNvbGxlY3Rpb24oKTtsPQoudG9v bF9pZD0zRHUuaWQ7dmFyIG49M0RuZXcgYS5DaXRhdGlvbkxpc3RWaWV3KHtlbDpzLGNvbGxlY3Rp b246bH0pO24ucmVuZGU9CnIoKTtsLmZldGNoKCk7dGhpcy4kZWwuYXBwZW5kKHMpfWlmKHUubWVz c2FnZSl7dGhpcy5tZXNzYWdlLnVwZGF0ZSh7cGVyc2lzdD0KZW50OnRydWUsc3RhdHVzOiJ3YXJu aW5nIixtZXNzYWdlOnUubWVzc2FnZX0pfX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAz YmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3NjcmlwdHMv cGFja2VkL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCi0tLSBhL3N0YXRpYy9zY3Jp cHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcworKysgYi9zdGF0aWMv c2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKQEAgLTEsMSAr MSwxIEBACi1kZWZpbmUoWyJ1dGlscy91dGlscyIsIm12Yy90b29scy90b29scy1mb3JtLWJhc2Ui XSxmdW5jdGlvbihiLGEpe3ZhciBjPTNEYT0KLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihl KXt0aGlzLm5vZGU9M0R3b3JrZmxvdy5hY3RpdmVfbm9kZTtpZighdGhpcy5uPQpvZGUpe2NvbnNv bGUuZGVidWcoIkZBSUxFRCAtIHRvb2xzLWZvcm0td29ya2Zsb3c6aW5pdGlhbGl6ZSgpIC0gTm9k ZSBub3QgZm89CnVuZCBpbiB3b3JrZmxvdy4iKTtyZXR1cm59dGhpcy53b3JrZmxvdz0zRHRydWU7 dGhpcy5vcHRpb25zPTNEZTt2YXIgZD0zRHRoaT0KcztiLmdldCh7dXJsOmdhbGF4eV9jb25maWcu cm9vdCsiYXBpL2RhdGF0eXBlcyIsY2FjaGU6dHJ1ZSxzdWNjZXNzOmZ1bmN0aW9uPQooZil7ZC5k YXRhdHlwZXM9M0RmO2QuX21ha2VTZWN0aW9ucyhlLmlucHV0cyk7YS5wcm90b3R5cGUuaW5pdGlh bGl6ZS5jYWxsKGQ9CixlKX19KX0sX21ha2VTZWN0aW9uczpmdW5jdGlvbihkKXtkW2IudXVpZCgp XT0zRHtsYWJlbDoiRWRpdCBTdGVwIEF0dHJpYnV0ZT0KcyIsdHlwZToic2VjdGlvbiIsaW5wdXRz Olt7bGFiZWw6IkFubm90YXRpb24gLyBOb3RlcyIsbmFtZToiYW5ub3RhdGlvbiIsdHlwPQplOiJ0 ZXh0IixhcmVhOnRydWUsaGVscDoiQWRkIGFuIGFubm90YXRpb24gb3Igbm90ZXMgdG8gdGhpcyBz dGVwOyBhbm5vdGF0aW89Cm5zIGFyZSBhdmFpbGFibGUgd2hlbiBhIHdvcmtmbG93IGlzIHZpZXdl ZC4iLHZhbHVlOnRoaXMubm9kZS5hbm5vdGF0aW9ufV19Oz0KdGhpcy5wb3N0X2pvYl9hY3Rpb25z PTNEdGhpcy5ub2RlLnBvc3Rfam9iX2FjdGlvbnM7Zm9yKHZhciBlIGluIHRoaXMubm9kZS5vPQp1 dHB1dF90ZXJtaW5hbHMpe2RbYi51dWlkKCldPTNEdGhpcy5fbWFrZVNlY3Rpb24oZSl9fSxfbWFr ZVNlY3Rpb246ZnVuY3Rpb249CihoKXt2YXIgZz0zRFtdO2ZvcihrZXkgaW4gdGhpcy5kYXRhdHlw ZXMpe2cucHVzaCh7MDp0aGlzLmRhdGF0eXBlc1trZXldLDE6dD0KaGlzLmRhdGF0eXBlc1trZXld fSl9Zy5zb3J0KGZ1bmN0aW9uKGosaSl7cmV0dXJuIGoubGFiZWw+aS5sYWJlbD8xOmoubGFiZWw8 PQppLmxhYmVsPy0xOjB9KTtnLnVuc2hpZnQoezA6IlNlcXVlbmNlcyIsMToiU2VxdWVuY2VzIn0p O2cudW5zaGlmdCh7MDoiUm9hZG09CmFwcyIsMToiUm9hZG1hcHMifSk7Zy51bnNoaWZ0KHswOiJM ZWF2ZSB1bmNoYW5nZWQiLDE6Ik5vbmUifSk7dmFyIGY9M0R7bGFiZT0KbDoiRWRpdCBTdGVwIEFj dGlvbjogJyIraCsiJyIsdHlwZToic2VjdGlvbiIsaW5wdXRzOlt7YWN0aW9uOiJSZW5hbWVEYXRh c2V0PQpBY3Rpb24iLGFyZ3VtZW50OiJuZXduYW1lIixsYWJlbDoiUmVuYW1lIGRhdGFzZXQiLHR5 cGU6InRleHQiLHZhbHVlOiIiLGlnbm89CnJlOiIiLGhlbHA6J1RoaXMgYWN0aW9uIHdpbGwgcmVu YW1lIHRoZSByZXN1bHQgZGF0YXNldC4gQ2xpY2sgPGEgaHJlZj0zRCJodD0KdHBzOi8vd2lraS5n YWxheHlwcm9qZWN0Lm9yZy9MZWFybi9BZHZhbmNlZFdvcmtmbG93L1ZhcmlhYmxlcyI+aGVyZTwv YT4gZm9yPQogbW9yZSBpbmZvcm1hdGlvbi4nfSx7YWN0aW9uOiJDaGFuZ2VEYXRhdHlwZUFjdGlv biIsYXJndW1lbnQ6Im5ld3R5cGUiLGxhYmU9Cmw6IkNoYW5nZSBkYXRhdHlwZSIsdHlwZToic2Vs ZWN0IixpZ25vcmU6Ik5vbmUiLG9wdGlvbnM6ZyxoZWxwOiJUaGlzIGFjdGlvbj0KIHdpbGwgY2hh bmdlIHRoZSBkYXRhdHlwZSBvZiB0aGUgb3V0cHV0IHRvIHRoZSBpbmRpY2F0ZWQgdmFsdWUuIn0s e2FjdGlvbjoiPQpUYWdEYXRhc2V0QWN0aW9uIixhcmd1bWVudDoidGFncyIsbGFiZWw6IlRhZ3Mi LHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZTo9CiIiLGhlbHA6IlRoaXMgYWN0aW9uIHdpbGwg c2V0IHRhZ3MgZm9yIHRoZSBkYXRhc2V0LiJ9LHtsYWJlbDoiQXNzaWduIGNvbHVtbj0KcyIsdHlw ZToic2VjdGlvbiIsaW5wdXRzOlt7YWN0aW9uOiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJj aHJvbUNvbCIsbGFiPQplbDoiQ2hyb20gY29sdW1uIix0eXBlOiJ0ZXh0Iix2YWx1ZToiIixpZ25v cmU6IiJ9LHthY3Rpb246IkNvbHVtblNldEFjdGlvbiI9Cixhcmd1bWVudDoic3RhcnRDb2wiLGxh YmVsOiJTdGFydCBjb2x1bW4iLHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZToiIn0sez0KYWN0 aW9uOiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJlbmRDb2wiLGxhYmVsOiJFbmQgY29sdW1u Iix0eXBlOiJ0ZXh0Iix2PQphbHVlOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0QWN0 aW9uIixhcmd1bWVudDoic3RyYW5kQ29sIixsYWJlbDoiU3Q9CnJhbmQgY29sdW1uIix0eXBlOiJ0 ZXh0Iix2YWx1ZToiIixpZ25vcmU6IiJ9LHthY3Rpb246IkNvbHVtblNldEFjdGlvbiIsYXJndT0K bWVudDoibmFtZUNvbCIsbGFiZWw6Ik5hbWUgY29sdW1uIix0eXBlOiJ0ZXh0Iix2YWx1ZToiIixp Z25vcmU6IiJ9XSxoZWxwOiJUPQpoaXMgYWN0aW9uIHdpbGwgc2V0IGNvbHVtbiBhc3NpZ25tZW50 cyBpbiB0aGUgb3V0cHV0IGRhdGFzZXQuIEJsYW5rIGZpZWxkcyA9CmFyZSBpZ25vcmVkLiJ9LHth Y3Rpb246IkVtYWlsQWN0aW9uIixsYWJlbDoiRW1haWwgbm90aWZpY2F0aW9uIix0eXBlOiJib29s ZT0KYW4iLHZhbHVlOiJmYWxzZSIsaWdub3JlOiJmYWxzZSIsaGVscDoiVGhpcyBhY3Rpb24gd2ls bCBzZW5kIGFuIGVtYWlsIG5vdGlmPQp5aW5nIHlvdSB3aGVuIHRoZSBqb2IgaXMgZG9uZS4ifSx7 YWN0aW9uOiJEZWxldGVJbnRlcm1lZGlhdGVzQWN0aW9uIixsYWJlbDo9CiJEZWxldGUgbm9uLW91 dHB1dHMiLHR5cGU6ImJvb2xlYW4iLHZhbHVlOiJmYWxzZSIsaWdub3JlOiJmYWxzZSIsaGVscDoi QWxsID0Kbm9uLW91dHB1dCBzdGVwcyBvZiB0aGlzIHdvcmtmbG93IHdpbGwgaGF2ZSBkYXRhc2V0 cyBkZWxldGVkIGlmIHRoZXkgYXJlIG5vPQogbG9uZ2VyIGJlaW5nIHVzZWQgYXMgam9iIGlucHV0 cyB3aGVuIHRoZSBqb2IgdGhpcyBhY3Rpb24gaXMgYXR0YWNoZWQgdG8gaXM9CiBmaW5pc2hlZC4g WW91ICptdXN0KiBiZSB1c2luZyB3b3JrZmxvdyBvdXRwdXRzICh0aGUgc25vd2ZsYWtlKSBpbiB5 b3VyIHdvcj0Ka2Zsb3cgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LiJ9XX07dmFyIGQ9M0R0 aGlzO2Z1bmN0aW9uIGUoail7Zm9yKHZhciBsPQogaW4gail7dmFyIGs9M0RqW2xdO2lmKGsuYWN0 aW9uKXtrLm5hbWU9M0QicGphX18iK2grIl9fIitrLmFjdGlvbjtpZihrLmFyZ3U9Cm1lbnQpe2su bmFtZSs9M0QiX18iK2suYXJndW1lbnR9dmFyIG09M0RkLnBvc3Rfam9iX2FjdGlvbnNbay5hY3Rp b24raF07aWYobT0KKXtpZihrLmFyZ3VtZW50KXtrLnZhbHVlPTNEbS5hY3Rpb25fYXJndW1lbnRz JiZtLmFjdGlvbl9hcmd1bWVudHNbay5hcmd1bWVuPQp0XXx8ay52YWx1ZX1lbHNle2sudmFsdWU9 M0QidHJ1ZSJ9fX1lbHNle2lmKGsuaW5wdXRzKXtlKGsuaW5wdXRzKX19fX1lKGYuaW49CnB1dHMp O3JldHVybiBmfSxfYnVpbGRNb2RlbDpmdW5jdGlvbigpe30sX3VwZGF0ZU1vZGVsOmZ1bmN0aW9u KCl7dmFyIGQ9M0R0aD0KaXM7dmFyIGU9M0R0aGlzLnRyZWUuZmluYWxpemUoKTtjb25zb2xlLmRl YnVnKCJ0b29scy1mb3JtLXdvcmtmbG93OjpfcmVmcmVzPQpoRm9ybSgpIC0gUmVmcmVzaGluZyBz dGF0ZXMuIik7Y29uc29sZS5kZWJ1ZyhlKTt2YXIgZz0zRHRoaXMuZGVmZXJyZWQucmVnaXM9CnRl cigpO3ZhciBmPTNEZ2FsYXh5X2NvbmZpZy5yb290KyJ3b3JrZmxvdy9lZGl0b3JfZm9ybV9wb3N0 P3Rvb2xfaWQ9M0QiK3RoaT0Kcy5vcHRpb25zLmlkO2IucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6 ZixkYXRhOmUsc3VjY2VzczpmdW5jdGlvbihoKXtkLm5vZGUuPQp1cGRhdGVfZmllbGRfZGF0YSho LHRydWUpO2QuZGVmZXJyZWQuZG9uZShnKTtjb25zb2xlLmRlYnVnKCJ0b29scy1mb3JtOjpfcmU9 CmZyZXNoRm9ybSgpIC0gU3RhdGVzIHJlZnJlc2hlZC4iKTtjb25zb2xlLmRlYnVnKGgpfSxlcnJv cjpmdW5jdGlvbihoKXtkLmRlZj0KZXJyZWQuZG9uZShnKTtjb25zb2xlLmRlYnVnKCJ0b29scy1m b3JtOjpfcmVmcmVzaEZvcm0oKSAtIFJlZnJlc2ggcmVxdWVzdCBmPQphaWxlZC4iKTtjb25zb2xl LmRlYnVnKGgpfX0pfX0pO3JldHVybntWaWV3OmN9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQorZGVmaW5lKFsidXRpbHMvdXRpbHMiLCJtdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlIl0s ZnVuY3Rpb24oYixhKXt2YXIgYz0zRGE9Ci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7 dGhpcy5ub2RlPTNEd29ya2Zsb3cuYWN0aXZlX25vZGU7aWYoIXRoaXMubj0Kb2RlKXtjb25zb2xl LmRlYnVnKCJGQUlMRUQgLSB0b29scy1mb3JtLXdvcmtmbG93OmluaXRpYWxpemUoKSAtIE5vZGUg bm90IGZvPQp1bmQgaW4gd29ya2Zsb3cuIik7cmV0dXJufXRoaXMud29ya2Zsb3c9M0R0cnVlO3Ro aXMub3B0aW9ucz0zRGU7Yi5kZWVwZWFjaCg9CmUuaW5wdXRzLGZ1bmN0aW9uKGYpe2lmKGYudHlw ZSl7Zi5vcHRpb25hbD0zRChbImRhdGEiLCJkYXRhX2hpZGRlbiIsImhpZGRlbj0KIiwiZHJpbGxf ZG93biJdKS5pbmRleE9mKGYudHlwZSk9M0Q9M0QtMX19KTtiLmRlZXBlYWNoKGUuaW5wdXRzLGZ1 bmN0aW9uKGYpPQp7aWYoZi50eXBlKXtpZihmLnR5cGU9M0Q9M0QiY29uZGl0aW9uYWwiKXtmLnRl c3RfcGFyYW0ub3B0aW9uYWw9M0RmYWxzZX19fSk9Cjt2YXIgZD0zRHRoaXM7Yi5nZXQoe3VybDpn YWxheHlfY29uZmlnLnJvb3QrImFwaS9kYXRhdHlwZXMiLGNhY2hlOnRydWUsc3VjYz0KZXNzOmZ1 bmN0aW9uKGYpe2QuZGF0YXR5cGVzPTNEZjtkLl9tYWtlU2VjdGlvbnMoZS5pbnB1dHMpO2EucHJv dG90eXBlLmluaXRpPQphbGl6ZS5jYWxsKGQsZSl9fSl9LF9tYWtlU2VjdGlvbnM6ZnVuY3Rpb24o ZCl7ZFtiLnV1aWQoKV09M0R7bGFiZWw6IkVkaXQgU3Q9CmVwIEF0dHJpYnV0ZXMiLHR5cGU6InNl Y3Rpb24iLGV4cGFuZDp0aGlzLm5vZGUuYW5ub3RhdGlvbixpbnB1dHM6W3tsYWJlbDoiQT0Kbm5v dGF0aW9uIC8gTm90ZXMiLG5hbWU6ImFubm90YXRpb24iLHR5cGU6InRleHQiLGFyZWE6dHJ1ZSxo ZWxwOiJBZGQgYW4gYW5uPQpvdGF0aW9uIG9yIG5vdGVzIHRvIHRoaXMgc3RlcDsgYW5ub3RhdGlv bnMgYXJlIGF2YWlsYWJsZSB3aGVuIGEgd29ya2Zsb3cgaXM9CiB2aWV3ZWQuIix2YWx1ZTp0aGlz Lm5vZGUuYW5ub3RhdGlvbn1dfTt0aGlzLnBvc3Rfam9iX2FjdGlvbnM9M0R0aGlzLm5vZGUucD0K b3N0X2pvYl9hY3Rpb25zO2Zvcih2YXIgZSBpbiB0aGlzLm5vZGUub3V0cHV0X3Rlcm1pbmFscyl7 ZFtiLnV1aWQoKV09M0R0aGlzPQouX21ha2VTZWN0aW9uKGUpfX0sX21ha2VTZWN0aW9uOmZ1bmN0 aW9uKGgpe3ZhciBnPTNEW107Zm9yKGtleSBpbiB0aGlzLmRhdGE9CnR5cGVzKXtnLnB1c2goezA6 dGhpcy5kYXRhdHlwZXNba2V5XSwxOnRoaXMuZGF0YXR5cGVzW2tleV19KX1nLnNvcnQoZnVuY3Rp bz0KbihqLGkpe3JldHVybiBqLmxhYmVsPmkubGFiZWw/MTpqLmxhYmVsPGkubGFiZWw/LTE6MH0p O2cudW5zaGlmdCh7MDoiU2VxdWVuPQpjZXMiLDE6IlNlcXVlbmNlcyJ9KTtnLnVuc2hpZnQoezA6 IlJvYWRtYXBzIiwxOiJSb2FkbWFwcyJ9KTtnLnVuc2hpZnQoezA6Ikw9CmVhdmUgdW5jaGFuZ2Vk IiwxOiJOb25lIn0pO3ZhciBmPTNEe2xhYmVsOiJFZGl0IFN0ZXAgQWN0aW9uOiAnIitoKyInIix0 eXBlOj0KInNlY3Rpb24iLGlucHV0czpbe2FjdGlvbjoiUmVuYW1lRGF0YXNldEFjdGlvbiIsYXJn dW1lbnQ6Im5ld25hbWUiLGxhYmVsOiJSPQplbmFtZSBkYXRhc2V0Iix0eXBlOiJ0ZXh0Iix2YWx1 ZToiIixpZ25vcmU6IiIsaGVscDonVGhpcyBhY3Rpb24gd2lsbCByZW5hbWU9CiB0aGUgcmVzdWx0 IGRhdGFzZXQuIENsaWNrIDxhIGhyZWY9M0QiaHR0cHM6Ly93aWtpLmdhbGF4eXByb2plY3Qub3Jn L0xlYXJuLz0KQWR2YW5jZWRXb3JrZmxvdy9WYXJpYWJsZXMiPmhlcmU8L2E+IGZvciBtb3JlIGlu Zm9ybWF0aW9uLid9LHthY3Rpb246IkNoYW5nPQplRGF0YXR5cGVBY3Rpb24iLGFyZ3VtZW50OiJu ZXd0eXBlIixsYWJlbDoiQ2hhbmdlIGRhdGF0eXBlIix0eXBlOiJzZWxlY3QiLGk9Cmdub3JlOiJO b25lIixvcHRpb25zOmcsaGVscDoiVGhpcyBhY3Rpb24gd2lsbCBjaGFuZ2UgdGhlIGRhdGF0eXBl IG9mIHRoZSBvdT0KdHB1dCB0byB0aGUgaW5kaWNhdGVkIHZhbHVlLiJ9LHthY3Rpb246IlRhZ0Rh dGFzZXRBY3Rpb24iLGFyZ3VtZW50OiJ0YWdzIixsPQphYmVsOiJUYWdzIix0eXBlOiJ0ZXh0Iix2 YWx1ZToiIixpZ25vcmU6IiIsaGVscDoiVGhpcyBhY3Rpb24gd2lsbCBzZXQgdGFncyA9CmZvciB0 aGUgZGF0YXNldC4ifSx7bGFiZWw6IkFzc2lnbiBjb2x1bW5zIix0eXBlOiJzZWN0aW9uIixpbnB1 dHM6W3thY3Rpb246Ij0KQ29sdW1uU2V0QWN0aW9uIixhcmd1bWVudDoiY2hyb21Db2wiLGxhYmVs OiJDaHJvbSBjb2x1bW4iLHR5cGU6InRleHQiLHZhbHVlPQo6IiIsaWdub3JlOiIifSx7YWN0aW9u OiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJzdGFydENvbCIsbGFiZWw6IlN0YXJ0IGM9Cm9s dW1uIix0eXBlOiJ0ZXh0Iix2YWx1ZToiIixpZ25vcmU6IiJ9LHthY3Rpb246IkNvbHVtblNldEFj dGlvbiIsYXJndW1lbnQ6Ij0KZW5kQ29sIixsYWJlbDoiRW5kIGNvbHVtbiIsdHlwZToidGV4dCIs dmFsdWU6IiIsaWdub3JlOiIifSx7YWN0aW9uOiJDb2x1bW5TPQpldEFjdGlvbiIsYXJndW1lbnQ6 InN0cmFuZENvbCIsbGFiZWw6IlN0cmFuZCBjb2x1bW4iLHR5cGU6InRleHQiLHZhbHVlOiIiLGk9 Cmdub3JlOiIifSx7YWN0aW9uOiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJuYW1lQ29sIixs YWJlbDoiTmFtZSBjb2x1bW4iLD0KdHlwZToidGV4dCIsdmFsdWU6IiIsaWdub3JlOiIifV0saGVs cDoiVGhpcyBhY3Rpb24gd2lsbCBzZXQgY29sdW1uIGFzc2lnbm1lPQpudHMgaW4gdGhlIG91dHB1 dCBkYXRhc2V0LiBCbGFuayBmaWVsZHMgYXJlIGlnbm9yZWQuIn0se2FjdGlvbjoiRW1haWxBY3Rp b249CiIsbGFiZWw6IkVtYWlsIG5vdGlmaWNhdGlvbiIsdHlwZToiYm9vbGVhbiIsdmFsdWU6ImZh bHNlIixpZ25vcmU6ImZhbHNlIixoZT0KbHA6IlRoaXMgYWN0aW9uIHdpbGwgc2VuZCBhbiBlbWFp bCBub3RpZnlpbmcgeW91IHdoZW4gdGhlIGpvYiBpcyBkb25lLiIscGF5PQpsb2FkOntob3N0Ondp bmRvdy5sb2NhdGlvbi5ob3N0fX0se2FjdGlvbjoiRGVsZXRlSW50ZXJtZWRpYXRlc0FjdGlvbiIs bGFiZWw9CjoiRGVsZXRlIG5vbi1vdXRwdXRzIix0eXBlOiJib29sZWFuIix2YWx1ZToiZmFsc2Ui LGlnbm9yZToiZmFsc2UiLGhlbHA6IkFsbD0KIG5vbi1vdXRwdXQgc3RlcHMgb2YgdGhpcyB3b3Jr ZmxvdyB3aWxsIGhhdmUgZGF0YXNldHMgZGVsZXRlZCBpZiB0aGV5IGFyZSBuPQpvIGxvbmdlciBi ZWluZyB1c2VkIGFzIGpvYiBpbnB1dHMgd2hlbiB0aGUgam9iIHRoaXMgYWN0aW9uIGlzIGF0dGFj aGVkIHRvIGk9CnMgZmluaXNoZWQuIFlvdSAqbXVzdCogYmUgdXNpbmcgd29ya2Zsb3cgb3V0cHV0 cyAodGhlIHNub3dmbGFrZSkgaW4geW91ciB3bz0KcmtmbG93IGZvciB0aGlzIHRvIGhhdmUgYW55 IGVmZmVjdC4ifV19O3ZhciBkPTNEdGhpcztmdW5jdGlvbiBlKG4sbyl7bz0zRG98PQp8W107by5w dXNoKG4pO2Zvcih2YXIgbSBpbiBuLmlucHV0cyl7dmFyIGs9M0RuLmlucHV0c1ttXTtpZihrLmFj dGlvbil7ay5uYW09CmU9M0QicGphX18iK2grIl9fIitrLmFjdGlvbjtpZihrLmFyZ3VtZW50KXtr Lm5hbWUrPTNEIl9fIitrLmFyZ3VtZW50fWlmKGsucD0KYXlsb2FkKXtmb3IodmFyIHMgaW4gay5w YXlsb2FkKXt2YXIgcT0zRGsucGF5bG9hZFtzXTtrLnBheWxvYWRbay5uYW1lKyJfXyIrPQpzXT0z RHE7ZGVsZXRlIHF9fXZhciByPTNEZC5wb3N0X2pvYl9hY3Rpb25zW2suYWN0aW9uK2hdO2lmKHIp e2Zvcih2YXIgbCBpbiA9Cm8pe29bbF0uZXhwYW5kPTNEdHJ1ZX1pZihrLmFyZ3VtZW50KXtrLnZh bHVlPTNEci5hY3Rpb25fYXJndW1lbnRzJiZyLmFjdGlvbj0KX2FyZ3VtZW50c1trLmFyZ3VtZW50 XXx8ay52YWx1ZX1lbHNle2sudmFsdWU9M0QidHJ1ZSJ9fX1pZihrLmlucHV0cyl7ZShrLG8uPQpz bGljZSgwKSl9fX1lKGYpO3JldHVybiBmfSxfYnVpbGRNb2RlbDpmdW5jdGlvbigpe0dhbGF4eS5t b2RhbC5zaG93KHt0aXRsZTo9CiJDb21pbmcgc29vbi4uLiIsYm9keToiVGhpcyBmZWF0dXJlIGhh cyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuIixidXR0b25zOj0Ke0Nsb3NlOmZ1bmN0aW9uKCl7 R2FsYXh5Lm1vZGFsLmhpZGUoKX19fSl9LF91cGRhdGVNb2RlbDpmdW5jdGlvbigpe3ZhciBkPTNE PQp0aGlzO3ZhciBlPTNEdGhpcy50cmVlLmZpbmFsaXplKCk7Y29uc29sZS5kZWJ1ZygidG9vbHMt Zm9ybS13b3JrZmxvdzo6X3JlZnI9CmVzaEZvcm0oKSAtIFJlZnJlc2hpbmcgc3RhdGVzLiIpO2Nv bnNvbGUuZGVidWcoZSk7dmFyIGc9M0R0aGlzLmRlZmVycmVkLnJlZz0KaXN0ZXIoKTt2YXIgZj0z RGdhbGF4eV9jb25maWcucm9vdCsid29ya2Zsb3cvZWRpdG9yX2Zvcm1fcG9zdD90b29sX2lkPTNE Iit0PQpoaXMub3B0aW9ucy5pZDtiLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmYsZGF0YTplLHN1 Y2Nlc3M6ZnVuY3Rpb24oaCl7ZC5ub2Q9CmUudXBkYXRlX2ZpZWxkX2RhdGEoaCk7ZC5kZWZlcnJl ZC5kb25lKGcpO2NvbnNvbGUuZGVidWcoInRvb2xzLWZvcm06Ol9yZWZyZT0Kc2hGb3JtKCkgLSBT dGF0ZXMgcmVmcmVzaGVkLiIpO2NvbnNvbGUuZGVidWcoaCl9LGVycm9yOmZ1bmN0aW9uKGgpe2Qu ZGVmZXJyPQplZC5kb25lKGcpO2NvbnNvbGUuZGVidWcoInRvb2xzLWZvcm06Ol9yZWZyZXNoRm9y bSgpIC0gUmVmcmVzaCByZXF1ZXN0IGZhaWw9CmVkLiIpO2NvbnNvbGUuZGVidWcoaCl9fSl9fSk7 cmV0dXJue1ZpZXc6Y319KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGEy NWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFm MDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9v bHMvdG9vbHMtaW5wdXQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90 b29scy1pbnB1dC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xz LWlucHV0LmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEJh Y2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGMsYik9Cnt0aGlzLmFwcD0z RGM7dGhpcy5maWVsZD0zRGIuZmllbGQ7dGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKGIp KTt0aGlzLj0KJGZpZWxkPTNEdGhpcy4kZWwuZmluZCgiLnVpLXRhYmxlLWZvcm0tZmllbGQiKTt0 aGlzLiR0aXRsZV9vcHRpb25hbD0zRHRoaXMuPQokZWwuZmluZCgiLnVpLXRhYmxlLWZvcm0tdGl0 bGUtb3B0aW9uYWwiKTt0aGlzLiRlcnJvcl90ZXh0PTNEdGhpcy4kZWwuZmluZCg9CiIudWktdGFi bGUtZm9ybS1lcnJvci10ZXh0Iik7dGhpcy4kZXJyb3I9M0R0aGlzLiRlbC5maW5kKCIudWktdGFi bGUtZm9ybS1lcj0Kcm9yIik7dGhpcy4kZmllbGQucHJlcGVuZCh0aGlzLmZpZWxkLiRlbCk7dGhp cy5maWVsZC5za2lwPTNEZmFsc2U7dGhpcy5fcmVmPQpyZXNoKCk7dmFyIGE9M0R0aGlzO3RoaXMu JHRpdGxlX29wdGlvbmFsLm9uKCJjbGljayIsZnVuY3Rpb24oKXthLmZpZWxkLnNraXA9Cj0zRCFh LmZpZWxkLnNraXA7YS5fcmVmcmVzaCgpfSl9LGVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuJGVycm9y X3RleHQuaHRtbChhKT0KO3RoaXMuJGVycm9yLmZhZGVJbigpO3RoaXMuJGVsLmFkZENsYXNzKCJ1 aS1lcnJvciIpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuPQokZXJyb3IuaGlkZSgpO3RoaXMuJGVs LnJlbW92ZUNsYXNzKCJ1aS1lcnJvciIpfSxfcmVmcmVzaDpmdW5jdGlvbigpe2lmKCF0aGk9CnMu ZmllbGQuc2tpcCl7dGhpcy4kZmllbGQuZmFkZUluKCJmYXN0Iik7dGhpcy4kdGl0bGVfb3B0aW9u YWwuaHRtbCgiRGlzYWJsZT0KIik7dGhpcy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfWVsc2V7dGhp cy4kZmllbGQuaGlkZSgpO3RoaXMuJHRpdGxlX29wdGlvbmFsPQouaHRtbCgiRW5hYmxlIil9fSxf dGVtcGxhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9M0QnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3I9 Cm0tZWxlbWVudCI+PGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWVycm9yIHVpLWVycm9yIj48 c3BhbiBjbGFzcz0zRCJmYSBmYT0KLWFycm93LWRvd24iLz48c3BhbiBjbGFzcz0zRCJ1aS10YWJs ZS1mb3JtLWVycm9yLXRleHQiLz48L2Rpdj48ZGl2IGNsYXNzPTNEPQoidWktdGFibGUtZm9ybS10 aXRsZS1zdHJvbmciPic7aWYoYS5vcHRpb25hbCl7Yis9M0QiT3B0aW9uYWw6ICIrYS5sYWJlbCsn PHM9CnBhbj4mbmJzcFs8c3BhbiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLXRpdGxlLW9wdGlvbmFs Ii8+XTwvc3Bhbj4nfWVsc2V7Yis9Cj0zRGEubGFiZWx9Yis9M0QnPC9kaXY+PGRpdiBjbGFzcz0z RCJ1aS10YWJsZS1mb3JtLWZpZWxkIj4nO2lmKGEuaGVscCl7Yis9Cj0zRCc8ZGl2IGNsYXNzPTNE InVpLXRhYmxlLWZvcm0taW5mbyI+JythLmhlbHArIjwvZGl2PiJ9Yis9M0QiPC9kaXY+PC9kaXY+ Ij0KO3JldHVybiBifX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFtd LGZ1bmN0aW9uKCl7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0 aW9uKGQsYyk9Cnt0aGlzLmFwcD0zRGQ7dGhpcy5maWVsZD0zRGMuZmllbGQ7dGhpcy5kZWZhdWx0 dmFsdWU9M0RjLmRlZmF1bHR2YWx1ZTt0aGlzLj0Kc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZShj KSk7dGhpcy4kZmllbGQ9M0R0aGlzLiRlbC5maW5kKCIudWktdGFibGUtZm9ybS1mPQppZWxkIik7 dGhpcy4kdGl0bGVfb3B0aW9uYWw9M0R0aGlzLiRlbC5maW5kKCIudWktdGFibGUtZm9ybS10aXRs ZS1vcHRpb25hbCI9Cik7dGhpcy4kZXJyb3JfdGV4dD0zRHRoaXMuJGVsLmZpbmQoIi51aS10YWJs ZS1mb3JtLWVycm9yLXRleHQiKTt0aGlzLiRlcnJvcj0KPTNEdGhpcy4kZWwuZmluZCgiLnVpLXRh YmxlLWZvcm0tZXJyb3IiKTt0aGlzLiRmaWVsZC5wcmVwZW5kKHRoaXMuZmllbGQuJGVsPQopO3Ro aXMuZmllbGQuc2tpcD0zRGZhbHNlO3ZhciBiPTNEdGhpcy5maWVsZC52YWx1ZSYmdGhpcy5maWVs ZC52YWx1ZSgpO3RoaXM9Ci5maWVsZC5za2lwPTNEQm9vbGVhbihjLm9wdGlvbmFsJiYoKHRoaXMu ZmllbGQudmFsaWRhdGUmJiF0aGlzLmZpZWxkLnZhbGlkYT0KdGUoKSl8fCFifHwoYj0zRD0zRHRo aXMuZGVmYXVsdHZhbHVlKXx8KE51bWJlcihiKT0zRD0zRE51bWJlcih0aGlzLmRlZmF1bHR2PQph bHVlKSl8fChKU09OLnN0cmluZ2lmeShiKT0zRD0zREpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVs dHZhbHVlKSkpKTt0aGlzLl89CnJlZnJlc2goKTt2YXIgYT0zRHRoaXM7dGhpcy4kdGl0bGVfb3B0 aW9uYWwub24oImNsaWNrIixmdW5jdGlvbigpe2EuZmllbGQucz0Ka2lwPTNEIWEuZmllbGQuc2tp cDthLl9yZWZyZXNoKCl9KX0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy4kZXJyb3JfdGV4dC5odG1s PQooYSk7dGhpcy4kZXJyb3IuZmFkZUluKCk7dGhpcy4kZWwuYWRkQ2xhc3MoInVpLWVycm9yIil9 LHJlc2V0OmZ1bmN0aW9uKCl7dGg9CmlzLiRlcnJvci5oaWRlKCk7dGhpcy4kZWwucmVtb3ZlQ2xh c3MoInVpLWVycm9yIil9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7aWYoIT0KdGhpcy5maWVsZC5za2lw KXt0aGlzLiRmaWVsZC5mYWRlSW4oImZhc3QiKTt0aGlzLiR0aXRsZV9vcHRpb25hbC5odG1sKCJE aXNhPQpibGUiKX1lbHNle3RoaXMuJGZpZWxkLmhpZGUoKTt0aGlzLiR0aXRsZV9vcHRpb25hbC5o dG1sKCJFbmFibGUiKTt0aGlzLmZpZWw9CmQudmFsdWUmJnRoaXMuZmllbGQudmFsdWUodGhpcy5k ZWZhdWx0dmFsdWUpfXRoaXMuYXBwLnRyaWdnZXIoInJlZnJlc2giKX0sXz0KdGVtcGxhdGU6ZnVu Y3Rpb24oYSl7dmFyIGI9M0QnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWVsZW1lbnQiPjxk aXYgY2xhPQpzcz0zRCJ1aS10YWJsZS1mb3JtLWVycm9yIHVpLWVycm9yIj48c3BhbiBjbGFzcz0z RCJmYSBmYS1hcnJvdy1kb3duIi8+PHNwYW49CiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWVycm9y LXRleHQiLz48L2Rpdj48ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0tdGl0bD0KZS1zdHJvbmci Pic7aWYoYS5vcHRpb25hbCl7Yis9M0RhLmxhYmVsKyc8c3Bhbj4mbmJzcFs8c3BhbiBjbGFzcz0z RCJ1aS10YWJsPQplLWZvcm0tdGl0bGUtb3B0aW9uYWwiLz5dPC9zcGFuPid9ZWxzZXtiKz0zRGEu bGFiZWx9Yis9M0QnPC9kaXY+PGRpdiBjbGFzcz0KPTNEInVpLXRhYmxlLWZvcm0tZmllbGQiPic7 aWYoYS5oZWxwKXtiKz0zRCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0taW5mPQpvIj4nK2Eu aGVscCsiPC9kaXY+In1iKz0zRCI8L2Rpdj48L2Rpdj4iO3JldHVybiBifX0pfSk7ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQy ZTg2ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlh NSBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLXNlY3Rpb24uanMKLS0tIGEv c3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy1zZWN0aW9uLmpzCisrKyBiL3N0 YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcwpAQCAtMSwxICsx LDEgQEAKLWRlZmluZShbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLXRhYmxlIiwibXZjL3VpL3Vp LW1pc2MiLCJtdmMvdWkvdWktcG9ydGxlPQp0IiwibXZjL3Rvb2xzL3Rvb2xzLXJlcGVhdCIsIm12 Yy90b29scy90b29scy1zZWxlY3QtY29udGVudCIsIm12Yy90b29scy90b289CmxzLWlucHV0Il0s ZnVuY3Rpb24oZSxiLGgsZCxjLGEsZil7dmFyIGc9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5p dGlhbGl6ZT0KOmZ1bmN0aW9uKGosaSl7dGhpcy5hcHA9M0RqO3RoaXMuaW5wdXRzPTNEaS5pbnB1 dHM7aS5jbHNfdHI9M0Qic2VjdGlvbi1yb3ciPQo7dGhpcy50YWJsZT0zRG5ldyBiLlZpZXcoaSk7 dGhpcy5zZXRFbGVtZW50KHRoaXMudGFibGUuJGVsKTt0aGlzLnJlbmRlcigpfSw9CnJlbmRlcjpm dW5jdGlvbigpe3RoaXMudGFibGUuZGVsQWxsKCk7Zm9yKHZhciBqIGluIHRoaXMuaW5wdXRzKXt0 aGlzLmFkZCh0aD0KaXMuaW5wdXRzW2pdKX19LGFkZDpmdW5jdGlvbihrKXt2YXIgaj0zRHRoaXM7 dmFyIGk9M0RqUXVlcnkuZXh0ZW5kKHRydWUse30sPQprKTtpLmlkPTNEay5pZD0zRGUudXVpZCgp O3RoaXMuYXBwLmlucHV0X2xpc3RbaS5pZF09M0RpO3ZhciBsPTNEaS50eXBlO3N3aXQ9CmNoKGwp e2Nhc2UiY29uZGl0aW9uYWwiOnRoaXMuX2FkZENvbmRpdGlvbmFsKGkpO2JyZWFrO2Nhc2UicmVw ZWF0Ijp0aGlzLl9hZD0KZFJlcGVhdChpKTticmVhaztjYXNlInNlY3Rpb24iOnRoaXMuX2FkZFNl Y3Rpb24oaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9hZGRSPQpvdyhpKX19LF9hZGRDb25kaXRpb25h bDpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7ai50ZXN0X3BhcmFtLmlkPTNEai5pZDt2YXI9CiBu PTNEdGhpcy5fYWRkUm93KGoudGVzdF9wYXJhbSk7bi5vcHRpb25zLm9uY2hhbmdlPTNEZnVuY3Rp b24odyl7dmFyIHY9M0RrLj0KYXBwLnRyZWUubWF0Y2hDYXNlKGosdyk7Zm9yKHZhciB1IGluIGou Y2FzZXMpe3ZhciBxPTNEai5jYXNlc1t1XTt2YXIgdD0zRGouPQppZCsiLXNlY3Rpb24tIit1O3Zh ciBwPTNEay50YWJsZS5nZXQodCk7dmFyIHM9M0RmYWxzZTtmb3IodmFyIHIgaW4gcS5pbnB1dHM9 Cil7aWYoIXEuaW5wdXRzW3JdLmhpZGRlbil7cz0zRHRydWU7YnJlYWt9fWlmKHU9M0Q9M0R2JiZz KXtwLmZhZGVJbigiZmFzdCIpfT0KZWxzZXtwLmhpZGUoKX19ay5hcHAudHJpZ2dlcigicmVmcmVz aCIpfTtmb3IodmFyIG0gaW4gai5jYXNlcyl7dmFyIGw9M0RqLmlkPQorIi1zZWN0aW9uLSIrbTt2 YXIgbz0zRG5ldyBnKHRoaXMuYXBwLHtpbnB1dHM6ai5jYXNlc1ttXS5pbnB1dHMsY2xzOiJ1aS10 YWI9CmxlLXBsYWluIn0pO28uJGVsLmFkZENsYXNzKCJ1aS10YWJsZS1mb3JtLXNlY3Rpb24iKTt0 aGlzLnRhYmxlLmFkZChvLiRlbCk7dD0KaGlzLnRhYmxlLmFwcGVuZChsKX1uLnRyaWdnZXIoImNo YW5nZSIpfSxfYWRkUmVwZWF0OmZ1bmN0aW9uKHApe3ZhciBzPTNEdGhpPQpzO3ZhciBxPTNEMDtm dW5jdGlvbiBuKGksdSl7dmFyIHQ9M0RwLmlkKyItc2VjdGlvbi0iKyhxKyspO3ZhciB2PTNEbnVs bDtpZig9CnUpe3Y9M0RmdW5jdGlvbigpe2wuZGVsKHQpO2wucmV0aXRsZShwLnRpdGxlKTtzLmFw cC50cmlnZ2VyKCJyZWZyZXNoIil9fXZhcj0KIHc9M0RuZXcgZyhzLmFwcCx7aW5wdXRzOmksY2xz OiJ1aS10YWJsZS1wbGFpbiJ9KTtsLmFkZCh7aWQ6dCx0aXRsZTpwLnRpdGxlPQosJGVsOncuJGVs LG9uZGVsOnZ9KTtsLnJldGl0bGUocC50aXRsZSl9dmFyIGw9M0RuZXcgYy5WaWV3KHt0aXRsZV9u ZXc6cC50aXQ9CmxlLG1heDpwLm1heCxvbm5ldzpmdW5jdGlvbigpe24ocC5pbnB1dHMsdHJ1ZSk7 cy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pOz0KdmFyIGo9M0RwLm1pbjt2YXIgcj0zRF8uc2l6 ZShwLmNhY2hlKTtmb3IodmFyIG09M0QwO208TWF0aC5tYXgocixqKTttKyspe3ZhPQpyIG89M0Ru dWxsO2lmKG08cil7bz0zRHAuY2FjaGVbbV19ZWxzZXtvPTNEcC5pbnB1dHN9bihvLG0+PTNEail9 dmFyIGs9M0RuZXc9CiBmKHRoaXMuYXBwLHtsYWJlbDpwLnRpdGxlLGhlbHA6cC5oZWxwLGZpZWxk Omx9KTtrLiRlbC5hZGRDbGFzcygidWktdGFibGUtZj0Kb3JtLXNlY3Rpb24iKTt0aGlzLnRhYmxl LmFkZChrLiRlbCk7dGhpcy50YWJsZS5hcHBlbmQocC5pZCl9LF9hZGRTZWN0aW9uOmZ1PQpuY3Rp b24oaSl7dmFyIGo9M0R0aGlzO3ZhciBuPTNEbmV3IGcoai5hcHAse2lucHV0czppLmlucHV0cyxj bHM6InVpLXRhYmxlLXA9CmxhaW4ifSk7dmFyIG09M0RuZXcgaC5CdXR0b25JY29uKHtpY29uOiJm YS1leWUtc2xhc2giLHRvb2x0aXA6IlNob3cvaGlkZSBzZT0KY3Rpb24iLGNsczoidWktYnV0dG9u LWljb24tcGxhaW4ifSk7dmFyIGw9M0RuZXcgZC5WaWV3KHt0aXRsZTppLmxhYmVsLGNsczoiPQp1 aS1wb3J0bGV0LXNlY3Rpb24iLG9wZXJhdGlvbnM6e2J1dHRvbl92aXNpYmxlOm19fSk7bC5hcHBl bmQobi4kZWwpO3ZhciBrPQo9M0RmYWxzZTtsLiRjb250ZW50LmhpZGUoKTtsLiRoZWFkZXIuY3Nz KCJjdXJzb3IiLCJwb2ludGVyIik7bC4kaGVhZGVyLm9uKCI9CmNsaWNrIixmdW5jdGlvbigpe2lm KGspe2s9M0RmYWxzZTtsLiRjb250ZW50LmhpZGUoKTttLnNldEljb24oImZhLWV5ZS1zbGFzaD0K Iil9ZWxzZXtrPTNEdHJ1ZTtsLiRjb250ZW50LmZhZGVJbigiZmFzdCIpO20uc2V0SWNvbigiZmEt ZXllIil9fSk7dGhpcy50YWJsPQplLmFkZChsLiRlbCk7dGhpcy50YWJsZS5hcHBlbmQoaS5pZCl9 LF9hZGRSb3c6ZnVuY3Rpb24oaSl7dmFyIGw9M0RpLmlkO3ZhciA9Cmo9M0R0aGlzLl9jcmVhdGVG aWVsZChpKTt0aGlzLmFwcC5maWVsZF9saXN0W2xdPTNEajt2YXIgaz0zRG5ldyBmKHRoaXMuYXBw LD0Ke2xhYmVsOmkubGFiZWwsb3B0aW9uYWw6aS5vcHRpb25hbCxoZWxwOmkuaGVscCxmaWVsZDpq fSk7dGhpcy5hcHAuZWxlbWVudF9sPQppc3RbbF09M0RrO3RoaXMudGFibGUuYWRkKGsuJGVsKTt0 aGlzLnRhYmxlLmFwcGVuZChsKTtpZihpLmhpZGRlbil7dGhpcy50YWI9CmxlLmdldChsKS5oaWRl KCl9cmV0dXJuIGp9LF9jcmVhdGVGaWVsZDpmdW5jdGlvbihpKXt2YXIgaj0zRG51bGw7c3dpdGNo KGkudD0KeXBlKXtjYXNlInRleHQiOmo9M0R0aGlzLl9maWVsZFRleHQoaSk7YnJlYWs7Y2FzZSJz ZWxlY3QiOmo9M0R0aGlzLl9maWVsZFNlPQpsZWN0KGkpO2JyZWFrO2Nhc2UiZGF0YSI6aj0zRHRo aXMuX2ZpZWxkRGF0YShpKTticmVhaztjYXNlImRhdGFfY29sbGVjdGlvbiI9CjpqPTNEdGhpcy5f ZmllbGREYXRhKGkpO2JyZWFrO2Nhc2UiZGF0YV9jb2x1bW4iOmkuZXJyb3JfdGV4dD0zRCJNaXNz aW5nIGNvbD0KdW1ucyBpbiByZWZlcmVuY2VkIGRhdGFzZXQuIjtqPTNEdGhpcy5fZmllbGRTZWxl Y3QoaSk7YnJlYWs7Y2FzZSJoaWRkZW4iOmo9Cj0zRHRoaXMuX2ZpZWxkSGlkZGVuKGkpO2JyZWFr O2Nhc2UiaGlkZGVuX2RhdGEiOmo9M0R0aGlzLl9maWVsZEhpZGRlbihpKTticj0KZWFrO2Nhc2Ui aW50ZWdlciI6aj0zRHRoaXMuX2ZpZWxkU2xpZGVyKGkpO2JyZWFrO2Nhc2UiZmxvYXQiOmo9M0R0 aGlzLl9maWVsPQpkU2xpZGVyKGkpO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aj0zRHRoaXMuX2ZpZWxk Qm9vbGVhbihpKTticmVhaztjYXNlImdlbm9tZWI9CnVpbGQiOmkuc2VhcmNoYWJsZT0zRHRydWU7 aj0zRHRoaXMuX2ZpZWxkU2VsZWN0KGkpO2JyZWFrO2Nhc2UiZHJpbGxfZG93biI6aj0KPTNEdGhp cy5fZmllbGREcmlsbGRvd24oaSk7YnJlYWs7Y2FzZSJiYXNldXJsIjpqPTNEdGhpcy5fZmllbGRI aWRkZW4oaSk7YnJlPQphaztkZWZhdWx0OnRoaXMuYXBwLmluY29tcGF0aWJsZT0zRHRydWU7aWYo aS5vcHRpb25zKXtqPTNEdGhpcy5fZmllbGRTZWxlY3Q9CihpKX1lbHNle2o9M0R0aGlzLl9maWVs ZFRleHQoaSl9Y29uc29sZS5kZWJ1ZygidG9vbHMtZm9ybTo6X2FkZFJvdygpIDogQXV0bz0KIG1h dGNoZWQgZmllbGQgdHlwZSAoIitpLnR5cGUrIikuIil9aWYoaS52YWx1ZSE9M0Q9M0R1bmRlZmlu ZWQpe2oudmFsdWUoaS52PQphbHVlKX1yZXR1cm4gan0sX2ZpZWxkRGF0YTpmdW5jdGlvbihpKXtp Zih0aGlzLmFwcC53b3JrZmxvdyl7dmFyIGs9M0RlLnRleHQ9CmlmeShpLmV4dGVuc2lvbnMudG9T dHJpbmcoKSk7aS5pbmZvPTNEIkRhdGEgaW5wdXQgJyIraS5uYW1lKyInICgiK2srIikiO3JldD0K dXJuIHRoaXMuX2ZpZWxkSGlkZGVuKGkpfXZhciBqPTNEdGhpcztyZXR1cm4gbmV3IGEuVmlldyh0 aGlzLmFwcCx7aWQ6ImZpZWxkPQotIitpLmlkLGV4dGVuc2lvbnM6aS5leHRlbnNpb25zLG11bHRp cGxlOmkubXVsdGlwbGUsdHlwZTppLnR5cGUsZGF0YTppLm9wdGk9Cm9ucyxvbmNoYW5nZTpmdW5j dGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2ZpZWxkU2VsZWN0OmZ1bmN0aW9u KD0Kail7aWYodGhpcy5hcHAud29ya2Zsb3cmJmouaXNfZHluYW1pYyl7aWYoIWUudmFsaWRhdGUo ai52YWx1ZSkpe2oudmFsdWU9M0QiPQoifXJldHVybiB0aGlzLl9maWVsZFRleHQoail9dmFyIGw9 M0RbXTtmb3IodmFyIG0gaW4gai5vcHRpb25zKXt2YXIgbj0zRGoub3A9CnRpb25zW21dO2wucHVz aCh7bGFiZWw6blswXSx2YWx1ZTpuWzFdfSl9dmFyIG89M0RoLlNlbGVjdDtzd2l0Y2goai5kaXNw bGF5KT0Ke2Nhc2UiY2hlY2tib3hlcyI6bz0zRGguQ2hlY2tib3g7YnJlYWs7Y2FzZSJyYWRpbyI6 bz0zRGguUmFkaW87YnJlYWt9dmFyIGs9Cj0zRHRoaXM7cmV0dXJuIG5ldyBvLlZpZXcoe2lkOiJm aWVsZC0iK2ouaWQsZGF0YTpsLGVycm9yX3RleHQ6ai5lcnJvcl90ZXh0fD0KfCJObyBvcHRpb25z IGF2YWlsYWJsZSIsbXVsdGlwbGU6ai5tdWx0aXBsZSxzZWFyY2hhYmxlOmouc2VhcmNoYWJsZSxv bmNoYW5nPQplOmZ1bmN0aW9uKCl7ay5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pfSxfZmllbGRE cmlsbGRvd246ZnVuY3Rpb24oaSl7dmFyIGo9Cj0zRHRoaXM7cmV0dXJuIG5ldyBoLkRyaWxsZG93 bi5WaWV3KHtpZDoiZmllbGQtIitpLmlkLGRhdGE6aS5vcHRpb25zLGRpc3BsYT0KeTppLmRpc3Bs YXksb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9LF9maWVs ZFRleHQ6ZnVuPQpjdGlvbihpKXt2YXIgaj0zRHRoaXM7cmV0dXJuIG5ldyBoLklucHV0KHtpZDoi ZmllbGQtIitpLmlkLGFyZWE6aS5hcmVhLG9uY2g9CmFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmln Z2VyKCJyZWZyZXNoIil9fSl9LF9maWVsZFNsaWRlcjpmdW5jdGlvbihpKXt2YXIgaj0KPTNEdGhp cztyZXR1cm4gbmV3IGguU2xpZGVyLlZpZXcoe2lkOiJmaWVsZC0iK2kuaWQscHJlY2lzZTppLnR5 cGU9M0Q9M0QiZmxvPQphdCIsbWluOmkubWluLG1heDppLm1heCxvbmNoYW5nZTpmdW5jdGlvbigp e2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2Y9CmllbGRIaWRkZW46ZnVuY3Rpb24oaSl7 cmV0dXJuIG5ldyBoLkhpZGRlbih7aWQ6ImZpZWxkLSIraS5pZCxpbmZvOmkuaW5mb30pfT0KLF9m aWVsZEJvb2xlYW46ZnVuY3Rpb24oaSl7dmFyIGo9M0R0aGlzO3JldHVybiBuZXcgaC5SYWRpb0J1 dHRvbi5WaWV3KHtpZDoiPQpmaWVsZC0iK2kuaWQsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0 cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1dLG89Cm5jaGFuZ2U6ZnVuY3Rpb24oKXtq LmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9fSk7cmV0dXJue1ZpZXc6Z319KTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS10YWJs ZSIsIm12Yy91aS91aS1taXNjIiwibXZjL3VpL3VpLXBvcnRsZT0KdCIsIm12Yy90b29scy90b29s cy1yZXBlYXQiLCJtdmMvdG9vbHMvdG9vbHMtc2VsZWN0LWNvbnRlbnQiLCJtdmMvdG9vbHMvdG9v PQpscy1pbnB1dCJdLGZ1bmN0aW9uKGUsYixoLGQsYyxhLGYpe3ZhciBnPTNEQmFja2JvbmUuVmll dy5leHRlbmQoe2luaXRpYWxpemU9CjpmdW5jdGlvbihqLGkpe3RoaXMuYXBwPTNEajt0aGlzLmlu cHV0cz0zRGkuaW5wdXRzO2kuY2xzX3RyPTNEInNlY3Rpb24tcm93Ij0KO3RoaXMudGFibGU9M0Ru ZXcgYi5WaWV3KGkpO3RoaXMuc2V0RWxlbWVudCh0aGlzLnRhYmxlLiRlbCk7dGhpcy5yZW5kZXIo KX0sPQpyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnRhYmxlLmRlbEFsbCgpO2Zvcih2YXIgaiBpbiB0 aGlzLmlucHV0cyl7dGhpcy5hZGQodGg9CmlzLmlucHV0c1tqXSl9fSxhZGQ6ZnVuY3Rpb24oayl7 dmFyIGo9M0R0aGlzO3ZhciBpPTNEalF1ZXJ5LmV4dGVuZCh0cnVlLHt9LD0Kayk7aS5pZD0zRGsu aWQ9M0RlLnV1aWQoKTt0aGlzLmFwcC5pbnB1dF9saXN0W2kuaWRdPTNEaTt2YXIgbD0zRGkudHlw ZTtzd2l0PQpjaChsKXtjYXNlImNvbmRpdGlvbmFsIjp0aGlzLl9hZGRDb25kaXRpb25hbChpKTti cmVhaztjYXNlInJlcGVhdCI6dGhpcy5fYWQ9CmRSZXBlYXQoaSk7YnJlYWs7Y2FzZSJzZWN0aW9u Ijp0aGlzLl9hZGRTZWN0aW9uKGkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fYWRkUj0Kb3coaSl9fSxf YWRkQ29uZGl0aW9uYWw6ZnVuY3Rpb24oail7dmFyIGs9M0R0aGlzO2oudGVzdF9wYXJhbS5pZD0z RGouaWQ7dmFyPQogbj0zRHRoaXMuX2FkZFJvdyhqLnRlc3RfcGFyYW0pO24ub3B0aW9ucy5vbmNo YW5nZT0zRGZ1bmN0aW9uKHcpe3ZhciB2PTNEay49CmFwcC50cmVlLm1hdGNoQ2FzZShqLHcpO2Zv cih2YXIgdSBpbiBqLmNhc2VzKXt2YXIgcT0zRGouY2FzZXNbdV07dmFyIHQ9M0RqLj0KaWQrIi1z ZWN0aW9uLSIrdTt2YXIgcD0zRGsudGFibGUuZ2V0KHQpO3ZhciBzPTNEZmFsc2U7Zm9yKHZhciBy IGluIHEuaW5wdXRzPQope2lmKCFxLmlucHV0c1tyXS5oaWRkZW4pe3M9M0R0cnVlO2JyZWFrfX1p Zih1PTNEPTNEdiYmcyl7cC5mYWRlSW4oImZhc3QiKX09CmVsc2V7cC5oaWRlKCl9fWsuYXBwLnRy aWdnZXIoInJlZnJlc2giKX07Zm9yKHZhciBtIGluIGouY2FzZXMpe3ZhciBsPTNEai5pZD0KKyIt c2VjdGlvbi0iK207dmFyIG89M0RuZXcgZyh0aGlzLmFwcCx7aW5wdXRzOmouY2FzZXNbbV0uaW5w dXRzLGNsczoidWktdGFiPQpsZS1wbGFpbiJ9KTtvLiRlbC5hZGRDbGFzcygidWktdGFibGUtZm9y bS1zZWN0aW9uIik7dGhpcy50YWJsZS5hZGQoby4kZWwpO3Q9Cmhpcy50YWJsZS5hcHBlbmQobCl9 bi50cmlnZ2VyKCJjaGFuZ2UiKX0sX2FkZFJlcGVhdDpmdW5jdGlvbihwKXt2YXIgcz0zRHRoaT0K czt2YXIgcT0zRDA7ZnVuY3Rpb24gbihpLHUpe3ZhciB0PTNEcC5pZCsiLXNlY3Rpb24tIisocSsr KTt2YXIgdj0zRG51bGw7aWYoPQp1KXt2PTNEZnVuY3Rpb24oKXtsLmRlbCh0KTtsLnJldGl0bGUo cC50aXRsZSk7cy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX12YXI9CiB3PTNEbmV3IGcocy5hcHAs e2lucHV0czppLGNsczoidWktdGFibGUtcGxhaW4ifSk7bC5hZGQoe2lkOnQsdGl0bGU6cC50aXRs ZT0KLCRlbDp3LiRlbCxvbmRlbDp2fSk7bC5yZXRpdGxlKHAudGl0bGUpfXZhciBsPTNEbmV3IGMu Vmlldyh7dGl0bGVfbmV3OnAudGl0PQpsZSxtYXg6cC5tYXgsb25uZXc6ZnVuY3Rpb24oKXtuKHAu aW5wdXRzLHRydWUpO3MuYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KTs9CnZhciBqPTNEcC5taW47 dmFyIHI9M0RfLnNpemUocC5jYWNoZSk7Zm9yKHZhciBtPTNEMDttPE1hdGgubWF4KHIsaik7bSsr KXt2YT0KciBvPTNEbnVsbDtpZihtPHIpe289M0RwLmNhY2hlW21dfWVsc2V7bz0zRHAuaW5wdXRz fW4obyxtPj0zRGopfXZhciBrPTNEbmV3PQogZih0aGlzLmFwcCx7bGFiZWw6cC50aXRsZSxoZWxw OnAuaGVscCxmaWVsZDpsfSk7ay4kZWwuYWRkQ2xhc3MoInVpLXRhYmxlLWY9Cm9ybS1zZWN0aW9u Iik7dGhpcy50YWJsZS5hZGQoay4kZWwpO3RoaXMudGFibGUuYXBwZW5kKHAuaWQpfSxfYWRkU2Vj dGlvbjpmdT0KbmN0aW9uKGkpe3ZhciBqPTNEdGhpczt2YXIgbj0zRG5ldyBnKGouYXBwLHtpbnB1 dHM6aS5pbnB1dHMsY2xzOiJ1aS10YWJsZS1wPQpsYWluIn0pO3ZhciBtPTNEbmV3IGguQnV0dG9u SWNvbih7aWNvbjoiZmEtZXllLXNsYXNoIix0b29sdGlwOiJTaG93L2hpZGUgc2U9CmN0aW9uIixj bHM6InVpLWJ1dHRvbi1pY29uLXBsYWluIn0pO3ZhciBsPTNEbmV3IGQuVmlldyh7dGl0bGU6aS5s YWJlbCxjbHM6Ij0KdWktcG9ydGxldC1zZWN0aW9uIixvcGVyYXRpb25zOntidXR0b25fdmlzaWJs ZTptfX0pO2wuYXBwZW5kKG4uJGVsKTt2YXIgaz0KPTNEZmFsc2U7bC4kY29udGVudC5oaWRlKCk7 bC4kaGVhZGVyLmNzcygiY3Vyc29yIiwicG9pbnRlciIpO2wuJGhlYWRlci5vbigiPQpjbGljayIs ZnVuY3Rpb24oKXtpZihrKXtrPTNEZmFsc2U7bC4kY29udGVudC5oaWRlKCk7bS5zZXRJY29uKCJm YS1leWUtc2xhc2g9CiIpfWVsc2V7az0zRHRydWU7bC4kY29udGVudC5mYWRlSW4oImZhc3QiKTtt LnNldEljb24oImZhLWV5ZSIpfX0pO2lmKGkuZXhwYT0KbmQpe2wuJGhlYWRlci50cmlnZ2VyKCJj bGljayIpfXRoaXMudGFibGUuYWRkKGwuJGVsKTt0aGlzLnRhYmxlLmFwcGVuZChpLmlkPQopfSxf YWRkUm93OmZ1bmN0aW9uKGkpe3ZhciBsPTNEaS5pZDt2YXIgaj0zRHRoaXMuX2NyZWF0ZUZpZWxk KGkpO3RoaXMuYXBwLmY9CmllbGRfbGlzdFtsXT0zRGo7dmFyIGs9M0RuZXcgZih0aGlzLmFwcCx7 bGFiZWw6aS5sYWJlbCxkZWZhdWx0dmFsdWU6aS5kZWZhdT0KbHR2YWx1ZSxvcHRpb25hbDppLm9w dGlvbmFsLGhlbHA6aS5oZWxwLGZpZWxkOmp9KTt0aGlzLmFwcC5lbGVtZW50X2xpc3RbbF09Cj0z RGs7dGhpcy50YWJsZS5hZGQoay4kZWwpO3RoaXMudGFibGUuYXBwZW5kKGwpO2lmKGkuaGlkZGVu KXt0aGlzLnRhYmxlLmdldD0KKGwpLmhpZGUoKX1yZXR1cm4gan0sX2NyZWF0ZUZpZWxkOmZ1bmN0 aW9uKGkpe3ZhciBqPTNEbnVsbDtzd2l0Y2goaS50eXBlKXtjPQphc2UidGV4dCI6aj0zRHRoaXMu X2ZpZWxkVGV4dChpKTticmVhaztjYXNlInNlbGVjdCI6aj0zRHRoaXMuX2ZpZWxkU2VsZWN0KGk9 Cik7YnJlYWs7Y2FzZSJkYXRhIjpqPTNEdGhpcy5fZmllbGREYXRhKGkpO2JyZWFrO2Nhc2UiZGF0 YV9jb2xsZWN0aW9uIjpqPTNEdD0KaGlzLl9maWVsZERhdGEoaSk7YnJlYWs7Y2FzZSJkYXRhX2Nv bHVtbiI6aS5lcnJvcl90ZXh0PTNEIk1pc3NpbmcgY29sdW1ucyBpPQpuIHJlZmVyZW5jZWQgZGF0 YXNldC4iO2o9M0R0aGlzLl9maWVsZFNlbGVjdChpKTticmVhaztjYXNlImhpZGRlbiI6aj0zRHRo aXM9Ci5fZmllbGRIaWRkZW4oaSk7YnJlYWs7Y2FzZSJoaWRkZW5fZGF0YSI6aj0zRHRoaXMuX2Zp ZWxkSGlkZGVuKGkpO2JyZWFrO2Nhcz0KZSJpbnRlZ2VyIjpqPTNEdGhpcy5fZmllbGRTbGlkZXIo aSk7YnJlYWs7Y2FzZSJmbG9hdCI6aj0zRHRoaXMuX2ZpZWxkU2xpZGVyPQooaSk7YnJlYWs7Y2Fz ZSJib29sZWFuIjpqPTNEdGhpcy5fZmllbGRCb29sZWFuKGkpO2JyZWFrO2Nhc2UiZ2Vub21lYnVp bGQiOmk9Ci5zZWFyY2hhYmxlPTNEdHJ1ZTtqPTNEdGhpcy5fZmllbGRTZWxlY3QoaSk7YnJlYWs7 Y2FzZSJkcmlsbF9kb3duIjpqPTNEdGhpcz0KLl9maWVsZERyaWxsZG93bihpKTticmVhaztjYXNl ImJhc2V1cmwiOmo9M0R0aGlzLl9maWVsZEhpZGRlbihpKTticmVhaztkZWZhPQp1bHQ6dGhpcy5h cHAuaW5jb21wYXRpYmxlPTNEdHJ1ZTtpZihpLm9wdGlvbnMpe2o9M0R0aGlzLl9maWVsZFNlbGVj dChpKX1lbHM9CmV7aj0zRHRoaXMuX2ZpZWxkVGV4dChpKX1jb25zb2xlLmRlYnVnKCJ0b29scy1m b3JtOjpfYWRkUm93KCkgOiBBdXRvIG1hdGNoZT0KZCBmaWVsZCB0eXBlICgiK2kudHlwZSsiKS4i KX1pZihpLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCl7ai52YWx1ZShpLnZhbHVlKX1yPQpldHVybiBq fSxfZmllbGREYXRhOmZ1bmN0aW9uKGkpe2lmKHRoaXMuYXBwLndvcmtmbG93KXt2YXIgaz0zRGUu dGV4dGlmeShpLmU9Cnh0ZW5zaW9ucy50b1N0cmluZygpKTtpLmluZm89M0QiRGF0YSBpbnB1dCAn IitpLm5hbWUrIicgKCIraysiKSI7cmV0dXJuIHRoaT0Kcy5fZmllbGRIaWRkZW4oaSl9dmFyIGo9 M0R0aGlzO3JldHVybiBuZXcgYS5WaWV3KHRoaXMuYXBwLHtpZDoiZmllbGQtIitpLmlkPQosZXh0 ZW5zaW9uczppLmV4dGVuc2lvbnMsbXVsdGlwbGU6aS5tdWx0aXBsZSx0eXBlOmkudHlwZSxkYXRh Omkub3B0aW9ucyxvbmM9CmhhbmdlOmZ1bmN0aW9uKCl7ai5hcHAudHJpZ2dlcigicmVmcmVzaCIp fX0pfSxfZmllbGRTZWxlY3Q6ZnVuY3Rpb24oail7aWYodD0KaGlzLmFwcC53b3JrZmxvdyYmai5p c19keW5hbWljKXtpZighZS52YWxpZGF0ZShqLnZhbHVlKSl7ai52YWx1ZT0zRCIifXJldHVyPQpu IHRoaXMuX2ZpZWxkVGV4dChqKX12YXIgbD0zRFtdO2Zvcih2YXIgbSBpbiBqLm9wdGlvbnMpe3Zh ciBuPTNEai5vcHRpb25zW209Cl07bC5wdXNoKHtsYWJlbDpuWzBdLHZhbHVlOm5bMV19KX12YXIg bz0zRGguU2VsZWN0O3N3aXRjaChqLmRpc3BsYXkpe2Nhc2UiYz0KaGVja2JveGVzIjpvPTNEaC5D aGVja2JveDticmVhaztjYXNlInJhZGlvIjpvPTNEaC5SYWRpbzticmVha312YXIgaz0zRHRoaXM7 PQpyZXR1cm4gbmV3IG8uVmlldyh7aWQ6ImZpZWxkLSIrai5pZCxkYXRhOmwsZXJyb3JfdGV4dDpq LmVycm9yX3RleHR8fCJObyBvcHQ9CmlvbnMgYXZhaWxhYmxlIixtdWx0aXBsZTpqLm11bHRpcGxl LHNlYXJjaGFibGU6ai5zZWFyY2hhYmxlLG9uY2hhbmdlOmZ1bmN0aT0Kb24oKXtrLmFwcC50cmln Z2VyKCJyZWZyZXNoIil9fSl9LF9maWVsZERyaWxsZG93bjpmdW5jdGlvbihpKXt2YXIgaj0zRHRo aXM7PQpyZXR1cm4gbmV3IGguRHJpbGxkb3duLlZpZXcoe2lkOiJmaWVsZC0iK2kuaWQsZGF0YTpp Lm9wdGlvbnMsZGlzcGxheTppLmRpc3A9CmxheSxvbmNoYW5nZTpmdW5jdGlvbigpe2ouYXBwLnRy aWdnZXIoInJlZnJlc2giKX19KX0sX2ZpZWxkVGV4dDpmdW5jdGlvbihpKT0Ke3ZhciBqPTNEdGhp cztyZXR1cm4gbmV3IGguSW5wdXQoe2lkOiJmaWVsZC0iK2kuaWQsYXJlYTppLmFyZWEsb25jaGFu Z2U6ZnVuPQpjdGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2ZpZWxkU2xpZGVy OmZ1bmN0aW9uKGkpe3ZhciBqPTNEdGhpczs9CnJldHVybiBuZXcgaC5TbGlkZXIuVmlldyh7aWQ6 ImZpZWxkLSIraS5pZCxwcmVjaXNlOmkudHlwZT0zRD0zRCJmbG9hdCIsbWluOj0KaS5taW4sbWF4 OmkubWF4LG9uY2hhbmdlOmZ1bmN0aW9uKCl7ai5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pfSxf ZmllbGRIaWRkPQplbjpmdW5jdGlvbihpKXtyZXR1cm4gbmV3IGguSGlkZGVuKHtpZDoiZmllbGQt IitpLmlkLGluZm86aS5pbmZvfSl9LF9maWVsZEI9Cm9vbGVhbjpmdW5jdGlvbihpKXt2YXIgaj0z RHRoaXM7cmV0dXJuIG5ldyBoLlJhZGlvQnV0dG9uLlZpZXcoe2lkOiJmaWVsZC0iKz0KaS5pZCxk YXRhOlt7bGFiZWw6IlllcyIsdmFsdWU6InRydWUifSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFsc2Ui fV0sb25jaGFuZ2U6PQpmdW5jdGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19KX19KTty ZXR1cm57VmlldzpnfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgYTI1 Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYw NTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29s cy90b29scy10ZW1wbGF0ZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xz L3Rvb2xzLXRlbXBsYXRlLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMv dG9vbHMtdGVtcGxhdGUuanMKQEAgLTEsMSArMSwxIEBACi1kZWZpbmUoW10sZnVuY3Rpb24oKXty ZXR1cm57aGVscDpmdW5jdGlvbihhKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ0b29sSGVscD0KIj48 ZGl2IGNsYXNzPTNEInRvb2xIZWxwQm9keSI+JythKyI8L2Rpdj48L2Rpdj4ifSxzdWNjZXNzOmZ1 bmN0aW9uKGMpe2lmKCFjPQouam9ic3x8IWMuam9icy5sZW5ndGgpe2NvbnNvbGUuZGVidWcoInRv b2xzLXRlbXBsYXRlOjpzdWNjZXNzKCkgLSBGYWlsZWQgam89CmJzLiIpO3JldHVybn12YXIgYT0z RGMuam9icy5sZW5ndGg7dmFyIGQ9M0QiIjtpZihhPTNEPTNEMSl7ZD0zRCIxIGpvYiBoYXMifT0K ZWxzZXtkPTNEYSsiIGpvYnMgaGF2ZSJ9dmFyIGI9M0QnPGRpdiBjbGFzcz0zRCJkb25lbWVzc2Fn ZWxhcmdlIj48cD4nK2QrIiBiPQplZW4gc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBxdWV1ZSAt IHJlc3VsdGluZyBpbiB0aGUgZm9sbG93aW5nIGRhdGFzZXRzOjw9Ci9wPiI7Zm9yKHZhciBlIGlu IGMub3V0cHV0cyl7Yis9M0QnPHAgc3R5bGU9M0QicGFkZGluZzogMTBweCAyMHB4OyI+PGI+Jyso cD0KYXJzZUludChlKSsxKSsiOiAiK2Mub3V0cHV0c1tlXS5uYW1lKyI8L2I+PC9wPiJ9Yis9M0Qi PHA+WW91IGNhbiBjaGVjayB0aGUgPQpzdGF0dXMgb2YgcXVldWVkIGpvYnMgYW5kIHZpZXcgdGhl IHJlc3VsdGluZyBkYXRhIGJ5IHJlZnJlc2hpbmcgdGhlIEhpc3Rvcnk9CiBwYW5lLiBXaGVuIHRo ZSBqb2IgaGFzIGJlZW4gcnVuIHRoZSBzdGF0dXMgd2lsbCBjaGFuZ2UgZnJvbSAncnVubmluZycg dG8gJz0KZmluaXNoZWQnIGlmIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3IgJ2Vycm9yJyBpZiBw cm9ibGVtcyB3ZXJlIGVuY291bnRlcmVkPQouPC9wPjwvZGl2PiI7cmV0dXJuIGJ9LGVycm9yOmZ1 bmN0aW9uKGEpe3JldHVybic8ZGl2PjxwPlRoZSBzZXJ2ZXIgY291bGQgbm89CnQgY29tcGxldGUg dGhlIHJlcXVlc3QuIFBsZWFzZSBjb250YWN0IHRoZSBHYWxheHkgVGVhbSBpZiB0aGlzIGVycm9y IHBlcnNpcz0KdHMuPC9wPjx0ZXh0YXJlYSBjbGFzcz0zRCJ1aS10ZXh0YXJlYSIgZGlzYWJsZWQg c3R5bGU9M0QiY29sb3I6IGJsYWNrOyIgcm93PQpzPTNEIjYiPicrSlNPTi5zdHJpbmdpZnkoYSx1 bmRlZmluZWQsNCkrIjwvdGV4dGFyZWE+PC9kaXY+In0sYmF0Y2hNb2RlOmZ1bmM9CnRpb24oKXty ZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWluZm8iPjxpIGNsYXNzPTNEImZhIGZh LXNpdGVtYXAiID0Kc3R5bGU9M0QiZm9udC1zaXplOiAxLjJlbTsgcGFkZGluZzogMnB4IDVweDsi Lz5UaGlzIGlzIGEgYmF0Y2ggbW9kZSBpbnB1dCBmPQppZWxkLiBBIHNlcGFyYXRlIGpvYiB3aWxs IGJlIHRyaWdnZXJlZCBmb3IgZWFjaCBkYXRhc2V0LjwvZGl2Pid9LHJlcXVpcmVtZW49CnRzOmZ1 bmN0aW9uKGEpe3ZhciBkPTNEIlRoaXMgdG9vbCByZXF1aXJlcyAiO2Zvcih2YXIgYiBpbiBhLnJl cXVpcmVtZW50cyl7dj0KYXIgYz0zRGEucmVxdWlyZW1lbnRzW2JdO2QrPTNEYy5uYW1lO2lmKGMu dmVyc2lvbil7ZCs9M0QiIChWZXJzaW9uICIrYy52ZXJzPQppb24rIikifWlmKGI8YS5yZXF1aXJl bWVudHMubGVuZ3RoLTIpe2QrPTNEIiwgIn1pZihiPTNEPTNEYS5yZXF1aXJlbWVudHMubGU9Cm5n dGgtMil7ZCs9M0QiIGFuZCAifX1yZXR1cm4gZCsnLiBDbGljayA8YSB0YXJnZXQ9M0QiX2JsYW5r IiBocmVmPTNEImh0dHBzOj0KLy93aWtpLmdhbGF4eXByb2plY3Qub3JnL1Rvb2xzL1JlcXVpcmVt ZW50cyI+aGVyZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPQonfX19KTsKXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm57aGVscDpmdW5jdGlv bihhKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ0b29sSGVscD0KIiBzdHlsZT0zRCJvdmVyZmxvdzog YXV0bzsiPjxkaXYgY2xhc3M9M0QidG9vbEhlbHBCb2R5Ij4nK2ErIjwvZGl2PjwvZGl2PiJ9PQos c3VjY2VzczpmdW5jdGlvbihjKXtpZighYy5qb2JzfHwhYy5qb2JzLmxlbmd0aCl7Y29uc29sZS5k ZWJ1ZygidG9vbHMtdGVtcGw9CmF0ZTo6c3VjY2VzcygpIC0gRmFpbGVkIGpvYnMuIik7cmV0dXJu fXZhciBhPTNEYy5qb2JzLmxlbmd0aDt2YXIgZD0zRCIiO2lmKD0KYT0zRD0zRDEpe2Q9M0QiMSBq b2IgaGFzIn1lbHNle2Q9M0RhKyIgam9icyBoYXZlIn12YXIgYj0zRCc8ZGl2IGNsYXNzPTNEImRv PQpuZW1lc3NhZ2VsYXJnZSI+PHA+JytkKyIgYmVlbiBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhl IHF1ZXVlIC0gcmVzdWx0aW5nIGk9Cm4gdGhlIGZvbGxvd2luZyBkYXRhc2V0czo8L3A+Ijtmb3Io dmFyIGUgaW4gYy5vdXRwdXRzKXtiKz0zRCc8cCBzdHlsZT0zRCJwYT0KZGRpbmc6IDEwcHggMjBw eDsiPjxiPicrKHBhcnNlSW50KGUpKzEpKyI6ICIrYy5vdXRwdXRzW2VdLm5hbWUrIjwvYj48L3A+ In1iPQorPTNEIjxwPllvdSBjYW4gY2hlY2sgdGhlIHN0YXR1cyBvZiBxdWV1ZWQgam9icyBhbmQg dmlldyB0aGUgcmVzdWx0aW5nIGRhdGE9CiBieSByZWZyZXNoaW5nIHRoZSBIaXN0b3J5IHBhbmUu IFdoZW4gdGhlIGpvYiBoYXMgYmVlbiBydW4gdGhlIHN0YXR1cyB3aWxsID0KY2hhbmdlIGZyb20g J3J1bm5pbmcnIHRvICdmaW5pc2hlZCcgaWYgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciAnZXJy b3InIGlmPQogcHJvYmxlbXMgd2VyZSBlbmNvdW50ZXJlZC48L3A+PC9kaXY+IjtyZXR1cm4gYn0s ZXJyb3I6ZnVuY3Rpb24oYSl7cmV0dXJuJzw9CmRpdj48cD5UaGUgc2VydmVyIGNvdWxkIG5vdCBj b21wbGV0ZSB0aGUgcmVxdWVzdC4gUGxlYXNlIGNvbnRhY3QgdGhlIEdhbGF4eT0KIFRlYW0gaWYg dGhpcyBlcnJvciBwZXJzaXN0cy48L3A+PHRleHRhcmVhIGNsYXNzPTNEInVpLXRleHRhcmVhIiBk aXNhYmxlZCBzPQp0eWxlPTNEImNvbG9yOiBibGFjazsiIHJvd3M9M0QiNiI+JytKU09OLnN0cmlu Z2lmeShhLHVuZGVmaW5lZCw0KSsiPC90ZXh0YXI9CmVhPjwvZGl2PiJ9LGJhdGNoTW9kZTpmdW5j dGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0taW5mbyI+PD0KaSBjbGFz cz0zRCJmYSBmYS1zaXRlbWFwIiBzdHlsZT0zRCJmb250LXNpemU6IDEuMmVtOyBwYWRkaW5nOiAy cHggNXB4OyIvPlRoPQppcyBpcyBhIGJhdGNoIG1vZGUgaW5wdXQgZmllbGQuIEEgc2VwYXJhdGUg am9iIHdpbGwgYmUgdHJpZ2dlcmVkIGZvciBlYWNoIGQ9CmF0YXNldC48L2Rpdj4nfSxyZXF1aXJl bWVudHM6ZnVuY3Rpb24oYSl7dmFyIGQ9M0QiVGhpcyB0b29sIHJlcXVpcmVzICI7Zm9yKD0KdmFy IGIgaW4gYS5yZXF1aXJlbWVudHMpe3ZhciBjPTNEYS5yZXF1aXJlbWVudHNbYl07ZCs9M0RjLm5h bWU7aWYoYy52ZXJzaW9uPQope2QrPTNEIiAoVmVyc2lvbiAiK2MudmVyc2lvbisiKSJ9aWYoYjxh LnJlcXVpcmVtZW50cy5sZW5ndGgtMil7ZCs9M0QiLCAifWk9CmYoYj0zRD0zRGEucmVxdWlyZW1l bnRzLmxlbmd0aC0yKXtkKz0zRCIgYW5kICJ9fXJldHVybiBkKycuIENsaWNrIDxhIHRhcmdldD0K PTNEIl9ibGFuayIgaHJlZj0zRCJodHRwczovL3dpa2kuZ2FsYXh5cHJvamVjdC5vcmcvVG9vbHMv UmVxdWlyZW1lbnRzIj5oZXJlPQo8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLid9fX0pOwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3 YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNj MGE5YTUgc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy10cmVlLmpzCi0tLSBh L3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcworKysgYi9zdGF0 aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKQEAgLTEsMSArMSwxIEBA Ci1kZWZpbmUoWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGEpe3JldHVybiBCYWNrYm9uZS5Nb2Rl bC5leHRlbmQoe2luaXRpYWxpej0KZTpmdW5jdGlvbihiKXt0aGlzLmFwcD0zRGJ9LGZpbmFsaXpl OmZ1bmN0aW9uKGcpe3ZhciBiPTNEdGhpczt0aGlzLm1hcF9kaWN0PQo9M0R7fTtpZighdGhpcy5h cHAuc2VjdGlvbil7cmV0dXJue319Zz0zRGd8fHt9O3ZhciBmPTNEe307dmFyIGU9M0R7fTt0aGlz Ll89Cml0ZXJhdGUodGhpcy5hcHAuc2VjdGlvbi4kZWwsZSk7ZnVuY3Rpb24gZChqLGksaCl7Zltq XT0zRGg7Yi5tYXBfZGljdFtqXT0zRD0KaX1mdW5jdGlvbiBjKG8scil7Zm9yKHZhciBtIGluIHIp e3ZhciBrPTNEclttXTtpZihrLmlucHV0KXt2YXIgdD0zRGsuaW5wdXQ7PQp2YXIgbj0zRG87aWYo byE9M0QiIil7bis9M0QifCJ9bis9M0R0Lm5hbWU7c3dpdGNoKHQudHlwZSl7Y2FzZSJyZXBlYXQi OnZhciA9Cmo9M0Qic2VjdGlvbi0iO3ZhciB3PTNEW107dmFyIHE9M0RudWxsO2Zvcih2YXIgdiBp biBrKXt2YXIgcD0zRHYuaW5kZXhPZihqKT0KO2lmKHAhPTNELTEpe3ArPTNEai5sZW5ndGg7dy5w dXNoKHBhcnNlSW50KHYuc3Vic3RyKHApKSk7aWYoIXEpe3E9M0R2LnN1YnN0PQpyKDAscCl9fX13 LnNvcnQoZnVuY3Rpb24oeCxpKXtyZXR1cm4geC1pfSk7dmFyIG09M0QwO2Zvcih2YXIgbCBpbiB3 KXtjKG4rIl89CiIrbSsrLGtbcSt3W2xdXSl9YnJlYWs7Y2FzZSJjb25kaXRpb25hbCI6dmFyIHU9 M0RiLmFwcC5maWVsZF9saXN0W3QuaWRdLnZhbD0KdWUoKTtpZihnW3QudGVzdF9wYXJhbS50eXBl XSl7dT0zRGdbdC50ZXN0X3BhcmFtLnR5cGVdKHUpfWQobisifCIrdC50ZXN0X3BhPQpyYW0ubmFt ZSx0LmlkLHUpO3ZhciBoPTNEYi5tYXRjaENhc2UodCx1KTtpZihoIT0zRC0xKXtjKG4sclt0Lmlk KyItc2VjdGlvbi09CiIraF0pfWJyZWFrO2Nhc2Uic2VjdGlvbiI6YygiIixrKTticmVhaztkZWZh dWx0OnZhciBzPTNEYi5hcHAuZmllbGRfbGlzdFt0Lj0KaWRdO2lmKHMmJnMudmFsdWUpe3ZhciB1 PTNEcy52YWx1ZSgpO2lmKGdbdC50eXBlXSl7dT0zRGdbdC50eXBlXSh1KX1pZighcy5zPQpraXAp e2lmKHMudmFsaWRhdGUmJiFzLnZhbGlkYXRlKHUpKXt1PTNEbnVsbH1pZih0Lmlnbm9yZT0zRD0z RD0zRHVuZGVmaW5lZHw9CnwodSYmdC5pZ25vcmUhPTNEdSkpe2Qobix0LmlkLHUpfX19fX19fWMo IiIsZSk7cmV0dXJuIGZ9LG1hdGNoOmZ1bmN0aW9uKGIpez0KcmV0dXJuIHRoaXMubWFwX2RpY3Qm JnRoaXMubWFwX2RpY3RbYl19LG1hdGNoQ2FzZTpmdW5jdGlvbihiLGQpe2lmKGIudGVzdF9wPQph cmFtLnR5cGU9M0Q9M0QiYm9vbGVhbiIpe2lmKGQ9M0Q9M0QidHJ1ZSIpe2Q9M0RiLnRlc3RfcGFy YW0udHJ1ZXZhbHVlfHwidHI9CnVlIn1lbHNle2Q9M0RiLnRlc3RfcGFyYW0uZmFsc2V2YWx1ZXx8 ImZhbHNlIn19Zm9yKHZhciBjIGluIGIuY2FzZXMpe2lmKGIuYz0KYXNlc1tjXS52YWx1ZT0zRD0z RGQpe3JldHVybiBjfX1yZXR1cm4gLTF9LG1hdGNoTW9kZWw6ZnVuY3Rpb24oZCxmKXt2YXIgYj0K PTNEe307dmFyIGM9M0R0aGlzO2Z1bmN0aW9uIGUoZyxwKXtmb3IodmFyIG0gaW4gcCl7dmFyIGs9 M0RwW21dO3ZhciBuPTNEay5uPQphbWU7aWYoZyE9M0QiIil7bj0zRGcrInwiK259c3dpdGNoKGsu dHlwZSl7Y2FzZSJyZXBlYXQiOmZvcih2YXIgbCBpbiBrLmNhY2g9CmUpe2UobisiXyIrbCxrLmNh Y2hlW2xdKX1icmVhaztjYXNlImNvbmRpdGlvbmFsIjp2YXIgcT0zRGsudGVzdF9wYXJhbSYmay50 ZT0Kc3RfcGFyYW0udmFsdWU7dmFyIGg9M0RjLm1hdGNoQ2FzZShrLHEpO2lmKGghPTNELTEpe2Uo bixrLmNhc2VzW2hdLmlucHV0cyl9PQpicmVhaztkZWZhdWx0OnZhciBvPTNEYy5tYXBfZGljdFtu XTtpZihvKXtmKG8sayl9fX19ZSgiIixkLmlucHV0cyk7cmV0dXJuIGI9Cn0sbWF0Y2hSZXNwb25z ZTpmdW5jdGlvbihkKXt2YXIgYj0zRHt9O3ZhciBjPTNEdGhpcztmdW5jdGlvbiBlKGwsail7aWYo dHlwZT0Kb2Ygaj0zRD0zRD0zRCJzdHJpbmciKXt2YXIgZz0zRGMubWFwX2RpY3RbbF07aWYoZyl7 YltnXT0zRGp9fWVsc2V7Zm9yKHZhciBoPQogaW4gail7dmFyIGY9M0RoO2lmKGwhPTNEPTNEIiIp e3ZhciBrPTNEInwiO2lmKGogaW5zdGFuY2VvZiBBcnJheSl7az0zRCJfIn09CmY9M0RsK2srZn1l KGYsaltoXSl9fX1lKCIiLGQpO3JldHVybiBifSxfaXRlcmF0ZTpmdW5jdGlvbihkLGUpe3ZhciBi PTNEdGhpcz0KO3ZhciBjPTNEJChkKS5jaGlsZHJlbigpO2MuZWFjaChmdW5jdGlvbigpe3ZhciBo PTNEdGhpczt2YXIgZz0zRCQoaCkuYXR0cigiPQppZCIpO2lmKCQoaCkuaGFzQ2xhc3MoInNlY3Rp b24tcm93Iikpe2VbZ109M0R7fTt2YXIgZj0zRGIuYXBwLmlucHV0X2xpc3RbZ109CjtpZihmKXtl W2ddPTNEe2lucHV0OmZ9fWIuX2l0ZXJhdGUoaCxlW2ddKX1lbHNle2IuX2l0ZXJhdGUoaCxlKX19 KX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxz Il0sZnVuY3Rpb24oYSl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7aW5pdGlhbGl6PQpl OmZ1bmN0aW9uKGIpe3RoaXMuYXBwPTNEYn0sZmluYWxpemU6ZnVuY3Rpb24oZyl7dmFyIGI9M0R0 aGlzO3RoaXMubWFwX2RpY3Q9Cj0zRHt9O2lmKCF0aGlzLmFwcC5zZWN0aW9uKXtyZXR1cm57fX1n PTNEZ3x8e307dmFyIGY9M0R7fTt2YXIgZT0zRHt9O3RoaXMuXz0KaXRlcmF0ZSh0aGlzLmFwcC5z ZWN0aW9uLiRlbCxlKTtmdW5jdGlvbiBkKGosaSxoKXtmW2pdPTNEaDtiLm1hcF9kaWN0W2pdPTNE PQppfWZ1bmN0aW9uIGMocCxzKXtmb3IodmFyIG4gaW4gcyl7dmFyIGs9M0RzW25dO2lmKGsuaW5w dXQpe3ZhciB1PTNEay5pbnB1dDs9CnZhciBvPTNEcDtpZihwIT0zRCIiKXtvKz0zRCJ8In1vKz0z RHUubmFtZTtzd2l0Y2godS50eXBlKXtjYXNlInJlcGVhdCI6dmFyID0Kaj0zRCJzZWN0aW9uLSI7 dmFyIHg9M0RbXTt2YXIgcj0zRG51bGw7Zm9yKHZhciB3IGluIGspe3ZhciBxPTNEdy5pbmRleE9m KGopPQo7aWYocSE9M0QtMSl7cSs9M0RqLmxlbmd0aDt4LnB1c2gocGFyc2VJbnQody5zdWJzdHIo cSkpKTtpZighcil7cj0zRHcuc3Vic3Q9CnIoMCxxKX19fXguc29ydChmdW5jdGlvbih5LGkpe3Jl dHVybiB5LWl9KTt2YXIgbj0zRDA7Zm9yKHZhciBsIGluIHgpe2MobysiXz0KIituKyssa1tyK3hb bF1dKX1icmVhaztjYXNlImNvbmRpdGlvbmFsIjp2YXIgdj0zRGIuYXBwLmZpZWxkX2xpc3RbdS5p ZF0udmFsPQp1ZSgpO2lmKGdbdS50ZXN0X3BhcmFtLnR5cGVdKXt2PTNEZ1t1LnRlc3RfcGFyYW0u dHlwZV0odil9ZChvKyJ8Iit1LnRlc3RfcGE9CnJhbS5uYW1lLHUuaWQsdik7dmFyIGg9M0RiLm1h dGNoQ2FzZSh1LHYpO2lmKGghPTNELTEpe2MobyxzW3UuaWQrIi1zZWN0aW9uLT0KIitoXSl9YnJl YWs7Y2FzZSJzZWN0aW9uIjpjKCIiLGspO2JyZWFrO2RlZmF1bHQ6dmFyIHQ9M0RiLmFwcC5maWVs ZF9saXN0W3UuPQppZF07aWYodCYmdC52YWx1ZSl7dmFyIHY9M0R0LnZhbHVlKCk7aWYoZ1t1LnR5 cGVdKXt2PTNEZ1t1LnR5cGVdKHYpfWlmKCF0LnM9CmtpcHx8Yi5hcHAud29ya2Zsb3cpe2lmKHQu dmFsaWRhdGUmJiF0LnZhbGlkYXRlKCkpe3Y9M0RudWxsfWlmKHUuaWdub3JlPTNEPQo9M0Q9M0R1 bmRlZmluZWR8fCh2IT0zRD0zRG51bGwmJnUuaWdub3JlIT0zRHYpKXtkKG8sdS5pZCx2KTtpZih1 LnBheWxvYWQpe2Y9Cm9yKHZhciBtIGluIHUucGF5bG9hZCl7ZChtLHUuaWQsdS5wYXlsb2FkW21d KX19fX19fX19fWMoIiIsZSk7cmV0dXJuIGZ9LG1hdD0KY2g6ZnVuY3Rpb24oYil7cmV0dXJuIHRo aXMubWFwX2RpY3QmJnRoaXMubWFwX2RpY3RbYl19LG1hdGNoQ2FzZTpmdW5jdGlvbihiPQosZCl7 aWYoYi50ZXN0X3BhcmFtLnR5cGU9M0Q9M0QiYm9vbGVhbiIpe2lmKGQ9M0Q9M0QidHJ1ZSIpe2Q9 M0RiLnRlc3RfcGFyYW09Ci50cnVldmFsdWV8fCJ0cnVlIn1lbHNle2Q9M0RiLnRlc3RfcGFyYW0u ZmFsc2V2YWx1ZXx8ImZhbHNlIn19Zm9yKHZhciBjIGluID0KYi5jYXNlcyl7aWYoYi5jYXNlc1tj XS52YWx1ZT0zRD0zRGQpe3JldHVybiBjfX1yZXR1cm4gLTF9LG1hdGNoTW9kZWw6ZnVuY3RpPQpv bihkLGYpe3ZhciBiPTNEe307dmFyIGM9M0R0aGlzO2Z1bmN0aW9uIGUoZyxwKXtmb3IodmFyIG0g aW4gcCl7dmFyIGs9M0RwW209Cl07dmFyIG49M0RrLm5hbWU7aWYoZyE9M0QiIil7bj0zRGcrInwi K259c3dpdGNoKGsudHlwZSl7Y2FzZSJyZXBlYXQiOmZvcih2YT0KciBsIGluIGsuY2FjaGUpe2Uo bisiXyIrbCxrLmNhY2hlW2xdKX1icmVhaztjYXNlImNvbmRpdGlvbmFsIjp2YXIgcT0zRGsudGVz PQp0X3BhcmFtJiZrLnRlc3RfcGFyYW0udmFsdWU7dmFyIGg9M0RjLm1hdGNoQ2FzZShrLHEpO2lm KGghPTNELTEpe2UobixrLmNhc2U9CnNbaF0uaW5wdXRzKX1icmVhaztkZWZhdWx0OnZhciBvPTNE Yy5tYXBfZGljdFtuXTtpZihvKXtmKG8sayl9fX19ZSgiIixkLmlucD0KdXRzKTtyZXR1cm4gYn0s bWF0Y2hSZXNwb25zZTpmdW5jdGlvbihkKXt2YXIgYj0zRHt9O3ZhciBjPTNEdGhpcztmdW5jdGlv biBlPQoobCxqKXtpZih0eXBlb2Ygaj0zRD0zRD0zRCJzdHJpbmciKXt2YXIgZz0zRGMubWFwX2Rp Y3RbbF07aWYoZyl7YltnXT0zRGp9fWU9CmxzZXtmb3IodmFyIGggaW4gail7dmFyIGY9M0RoO2lm KGwhPTNEPTNEIiIpe3ZhciBrPTNEInwiO2lmKGogaW5zdGFuY2VvZiBBcj0KcmF5KXtrPTNEIl8i fWY9M0RsK2srZn1lKGYsaltoXSl9fX1lKCIiLGQpO3JldHVybiBifSxfaXRlcmF0ZTpmdW5jdGlv bihkLGUpPQp7dmFyIGI9M0R0aGlzO3ZhciBjPTNEJChkKS5jaGlsZHJlbigpO2MuZWFjaChmdW5j dGlvbigpe3ZhciBoPTNEdGhpczt2YXIgZz0KPTNEJChoKS5hdHRyKCJpZCIpO2lmKCQoaCkuaGFz Q2xhc3MoInNlY3Rpb24tcm93Iikpe2VbZ109M0R7fTt2YXIgZj0zRGIuYXBwPQouaW5wdXRfbGlz dFtnXTtpZihmKXtlW2ddPTNEe2lucHV0OmZ9fWIuX2l0ZXJhdGUoaCxlW2ddKX1lbHNle2IuX2l0 ZXJhdGUoaCw9CmUpfX0pfX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAt ciBhMjVjZTYzY2RjZjA3Y2IyZDIwZmYzNDdiZjQyZTg2ZjRmZDRmMjFiIC1yIDNiYmVhNGZmZjlm MjJhZjA1NjVlMTM2PQpkYmE2NTk5MjQwM2MwYTlhNSBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvdXRp bHMvdXRpbHMuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL3V0aWxzL3V0aWxzLmpzCisr KyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC91dGlscy91dGlscy5qcwpAQCAtMSwxICsxLDEgQEAK LWRlZmluZShbImxpYnMvdW5kZXJzY29yZSJdLGZ1bmN0aW9uKG0pe2Z1bmN0aW9uIGQobil7cmV0 dXJuICQoIjxkaXYvPiIpLnRlPQp4dChuKS5odG1sKCl9ZnVuY3Rpb24gbChvKXtpZighKG8gaW5z dGFuY2VvZiBBcnJheSkpe289M0Rbb119Zm9yKHZhciBuIGluIG89Cil7aWYoWyJOb25lIixudWxs LCJudWxsIix1bmRlZmluZWQsInVuZGVmaW5lZCJdLmluZGV4T2Yob1tuXSk+LTEpe3JldHVybiBm YT0KbHNlfX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBoKG4pe3ZhciBuPTNEbi50b1N0cmluZygpO2lm KG4pe249M0RuLnJlcGxhY2UoLywvPQpnLCIsICIpO3ZhciBvPTNEbi5sYXN0SW5kZXhPZigiLCAi KTtpZihvIT0zRC0xKXtuPTNEbi5zdWJzdHIoMCxvKSsiIG9yICIrbi49CnN1YnN0cihvKzEpfXJl dHVybiBufXJldHVybiIifWZ1bmN0aW9uIGUobil7dG9wLl9fdXRpbHNfX2dldF9fPTNEdG9wLl9f dXRpbD0Kc19fZ2V0X198fHt9O2lmKG4uY2FjaGUmJnRvcC5fX3V0aWxzX19nZXRfX1tuLnVybF0p e24uc3VjY2VzcyYmbi5zdWNjZXNzKHRvPQpwLl9fdXRpbHNfX2dldF9fW24udXJsXSk7Y29uc29s ZS5kZWJ1ZygidXRpbHMuanM6OmdldCgpIC0gRmV0Y2hpbmcgZnJvbSBjYWM9CmhlIFsiK24udXJs KyJdLiIpfWVsc2V7aSh7dXJsOm4udXJsLGRhdGE6bi5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24obyl7 dG9wLl9fdT0KdGlsc19fZ2V0X19bbi51cmxdPTNEbztuLnN1Y2Nlc3MmJm4uc3VjY2VzcyhvKX0s ZXJyb3I6ZnVuY3Rpb24obyl7bi5lcnJvciYmPQpuLmVycm9yKG8pfX0pfX1mdW5jdGlvbiBpKG8p e3ZhciBuPTNEe2NvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9qc29uIix0eXBlOm89Ci50eXBlfHwi R0VUIixkYXRhOm8uZGF0YXx8e30sdXJsOm8udXJsfTtpZihuLnR5cGU9M0Q9M0QiR0VUInx8bi50 eXBlPTNEPTNEIj0KREVMRVRFIil7aWYobi51cmwuaW5kZXhPZigiPyIpPTNEPTNELTEpe24udXJs Kz0zRCI/In1lbHNle24udXJsKz0zRCImIn1uLnVyPQpsPTNEbi51cmwrJC5wYXJhbShuLmRhdGEp O24uZGF0YT0zRG51bGx9ZWxzZXtuLmRhdGFUeXBlPTNEImpzb24iO24udXJsPTNEbi49CnVybDtu LmRhdGE9M0RKU09OLnN0cmluZ2lmeShuLmRhdGEpfSQuYWpheChuKS5kb25lKGZ1bmN0aW9uKHAp e2lmKHR5cGVvZiBwPQo9M0Q9M0Q9M0Qic3RyaW5nIil7dHJ5e3A9M0RwLnJlcGxhY2UoIkluZmlu aXR5LCIsJyJJbmZpbml0eSIsJyk7cD0zRGpRdWVyeS49CnBhcnNlSlNPTihwKX1jYXRjaChxKXtj b25zb2xlLmRlYnVnKHEpfX1vLnN1Y2Nlc3MmJm8uc3VjY2VzcyhwKX0pLmZhaWwoZnVuYz0KdGlv bihxKXt2YXIgcD0zRG51bGw7dHJ5e3A9M0RqUXVlcnkucGFyc2VKU09OKHEucmVzcG9uc2VUZXh0 KX1jYXRjaChyKXtwPTNEPQpxLnJlc3BvbnNlVGV4dH1vLmVycm9yJiZvLmVycm9yKHAscSl9KX1m dW5jdGlvbiBqKHEsbil7dmFyIG89M0QkKCc8ZGl2IGNsYXM9CnM9M0QiJytxKyciPjwvZGl2Picp O28uYXBwZW5kVG8oIjplcSgwKSIpO3ZhciBwPTNEby5jc3Mobik7by5yZW1vdmUoKTtyZXR1cj0K biBwfWZ1bmN0aW9uIGcobil7aWYoISQoJ2xpbmtbaHJlZl49M0QiJytuKyciXScpLmxlbmd0aCl7 JCgnPGxpbmsgaHJlZj0zRCInPQorZ2FsYXh5X2NvbmZpZy5yb290K24rJyIgcmVsPTNEInN0eWxl c2hlZXQiPicpLmFwcGVuZFRvKCJoZWFkIil9fWZ1bmN0aW9uIGs9CihuLG8pe2lmKG4pe3JldHVy biBtLmRlZmF1bHRzKG4sbyl9ZWxzZXtyZXR1cm4gb319ZnVuY3Rpb24gYihvLHEpe3ZhciBwPTNE Ij0KIjtpZihvPj0zRDEwMDAwMDAwMDAwMCl7bz0zRG8vMTAwMDAwMDAwMDAwO3A9M0QiVEIifWVs c2V7aWYobz49M0QxMDAwMDAwMDApPQp7bz0zRG8vMTAwMDAwMDAwO3A9M0QiR0IifWVsc2V7aWYo bz49M0QxMDAwMDApe289M0RvLzEwMDAwMDtwPTNEIk1CIn1lbHNle2k9CmYobz49M0QxMDApe289 M0RvLzEwMDtwPTNEIktCIn1lbHNle2lmKG8+MCl7bz0zRG8qMTA7cD0zRCJiIn1lbHNle3JldHVy biI8cz0KdHJvbmc+LTwvc3Ryb25nPiJ9fX19fXZhciBuPTNEKE1hdGgucm91bmQobykvMTApO2lm KHEpe3JldHVybiBuKyIgIitwfWVsc2V7PQpyZXR1cm4iPHN0cm9uZz4iK24rIjwvc3Ryb25nPiAi K3B9fWZ1bmN0aW9uIGEoKXtyZXR1cm4ieCIrTWF0aC5yYW5kb20oKS50b1M9CnRyaW5nKDM2KS5z dWJzdHJpbmcoMiw5KX1mdW5jdGlvbiBjKG4pe3ZhciBvPTNEJCgiPHA+PC9wPiIpO28uYXBwZW5k KG4pO3JldD0KdXJuIG99ZnVuY3Rpb24gZigpe3ZhciBwPTNEbmV3IERhdGUoKTt2YXIgbj0zRChw LmdldEhvdXJzKCk8MTA/IjAiOiIiKStwLmdlPQp0SG91cnMoKTt2YXIgbz0zRChwLmdldE1pbnV0 ZXMoKTwxMD8iMCI6IiIpK3AuZ2V0TWludXRlcygpO3ZhciBxPTNEcC5nZXREYXQ9CmUoKSsiLyIr KHAuZ2V0TW9udGgoKSsxKSsiLyIrcC5nZXRGdWxsWWVhcigpKyIsICIrbisiOiIrbztyZXR1cm4g cX1yZXR1cm57Yz0Kc3NMb2FkRmlsZTpnLGNzc0dldEF0dHJpYnV0ZTpqLGdldDplLG1lcmdlOmss Ynl0ZXNUb1N0cmluZzpiLHV1aWQ6YSx0aW1lOmYsPQp3cmFwOmMscmVxdWVzdDppLHNhbml0aXpl OmQsdGV4dGlmeTpoLHZhbGlkYXRlOmx9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor ZGVmaW5lKFsibGlicy91bmRlcnNjb3JlIl0sZnVuY3Rpb24obSl7ZnVuY3Rpb24gbihyLHEpe2Zv cih2YXIgbyBpbiByKXt2YXI9CiBwPTNEcltvXTtpZihwJiZ0eXBlb2YocCk9M0Q9M0Qib2JqZWN0 Iil7cShwKTtuKHAscSl9fX1mdW5jdGlvbiBkKG8pe3JldHVybj0KICQoIjxkaXYvPiIpLnRleHQo bykuaHRtbCgpfWZ1bmN0aW9uIGwocCl7aWYoIShwIGluc3RhbmNlb2YgQXJyYXkpKXtwPTNEW3Bd PQp9Zm9yKHZhciBvIGluIHApe2lmKFsiTm9uZSIsbnVsbCwibnVsbCIsdW5kZWZpbmVkLCJ1bmRl ZmluZWQiXS5pbmRleE9mKHBbb109Cik+LTEpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9ZnVu Y3Rpb24gaChvKXt2YXIgbz0zRG8udG9TdHJpbmcoKTtpZihvKXtvPQo9M0RvLnJlcGxhY2UoLywv ZywiLCAiKTt2YXIgcD0zRG8ubGFzdEluZGV4T2YoIiwgIik7aWYocCE9M0QtMSl7bz0zRG8uc3Vi c3Q9CnIoMCxwKSsiIG9yICIrby5zdWJzdHIocCsxKX1yZXR1cm4gb31yZXR1cm4iIn1mdW5jdGlv biBlKG8pe3RvcC5fX3V0aWxzX19nZT0KdF9fPTNEdG9wLl9fdXRpbHNfX2dldF9ffHx7fTtpZihv LmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bby51cmxdKXtvLnN1Y2NlPQpzcyYmby5zdWNjZXNz KHRvcC5fX3V0aWxzX19nZXRfX1tvLnVybF0pO2NvbnNvbGUuZGVidWcoInV0aWxzLmpzOjpnZXQo KSAtIEY9CmV0Y2hpbmcgZnJvbSBjYWNoZSBbIitvLnVybCsiXS4iKX1lbHNle2koe3VybDpvLnVy bCxkYXRhOm8uZGF0YSxzdWNjZXNzOmZ1bj0KY3Rpb24ocCl7dG9wLl9fdXRpbHNfX2dldF9fW28u dXJsXT0zRHA7by5zdWNjZXNzJiZvLnN1Y2Nlc3MocCl9LGVycm9yOmZ1bmN0PQppb24ocCl7by5l cnJvciYmby5lcnJvcihwKX19KX19ZnVuY3Rpb24gaShwKXt2YXIgbz0zRHtjb250ZW50VHlwZToi YXBwbGljYXQ9Cmlvbi9qc29uIix0eXBlOnAudHlwZXx8IkdFVCIsZGF0YTpwLmRhdGF8fHt9LHVy bDpwLnVybH07aWYoby50eXBlPTNEPTNEIkdFVD0KInx8by50eXBlPTNEPTNEIkRFTEVURSIpe2lm KG8udXJsLmluZGV4T2YoIj8iKT0zRD0zRC0xKXtvLnVybCs9M0QiPyJ9ZWxzZXtvPQoudXJsKz0z RCImIn1vLnVybD0zRG8udXJsKyQucGFyYW0oby5kYXRhKTtvLmRhdGE9M0RudWxsfWVsc2V7by5k YXRhVHlwZT0zRCI9Cmpzb24iO28udXJsPTNEby51cmw7by5kYXRhPTNESlNPTi5zdHJpbmdpZnko by5kYXRhKX0kLmFqYXgobykuZG9uZShmdW5jdGlvbj0KKHEpe2lmKHR5cGVvZiBxPTNEPTNEPTNE InN0cmluZyIpe3RyeXtxPTNEcS5yZXBsYWNlKCJJbmZpbml0eSwiLCciSW5maW5pdHkiPQosJyk7 cT0zRGpRdWVyeS5wYXJzZUpTT04ocSl9Y2F0Y2gocil7Y29uc29sZS5kZWJ1ZyhyKX19cC5zdWNj ZXNzJiZwLnN1Y2Nlc3M9CihxKX0pLmZhaWwoZnVuY3Rpb24ocil7dmFyIHE9M0RudWxsO3RyeXtx PTNEalF1ZXJ5LnBhcnNlSlNPTihyLnJlc3BvbnNlVGV4dD0KKX1jYXRjaChzKXtxPTNEci5yZXNw b25zZVRleHR9cC5lcnJvciYmcC5lcnJvcihxLHIpfSl9ZnVuY3Rpb24gaihyLG8pe3ZhciBwPQo9 M0QkKCc8ZGl2IGNsYXNzPTNEIicrcisnIj48L2Rpdj4nKTtwLmFwcGVuZFRvKCI6ZXEoMCkiKTt2 YXIgcT0zRHAuY3NzKG8pO3A9Ci5yZW1vdmUoKTtyZXR1cm4gcX1mdW5jdGlvbiBnKG8pe2lmKCEk KCdsaW5rW2hyZWZePTNEIicrbysnIl0nKS5sZW5ndGgpeyQoJz0KPGxpbmsgaHJlZj0zRCInK2dh bGF4eV9jb25maWcucm9vdCtvKyciIHJlbD0zRCJzdHlsZXNoZWV0Ij4nKS5hcHBlbmRUbygiaGVh PQpkIil9fWZ1bmN0aW9uIGsobyxwKXtpZihvKXtyZXR1cm4gbS5kZWZhdWx0cyhvLHApfWVsc2V7 cmV0dXJuIHB9fWZ1bmN0aW9uIGI9CihwLHIpe3ZhciBxPTNEIiI7aWYocD49M0QxMDAwMDAwMDAw MDApe3A9M0RwLzEwMDAwMDAwMDAwMDtxPTNEIlRCIn1lbHNle2lmKD0KcD49M0QxMDAwMDAwMDAp e3A9M0RwLzEwMDAwMDAwMDtxPTNEIkdCIn1lbHNle2lmKHA+PTNEMTAwMDAwKXtwPTNEcC8xMDAw MDA7PQpxPTNEIk1CIn1lbHNle2lmKHA+PTNEMTAwKXtwPTNEcC8xMDA7cT0zRCJLQiJ9ZWxzZXtp ZihwPjApe3A9M0RwKjEwO3E9M0QiYiI9Cn1lbHNle3JldHVybiI8c3Ryb25nPi08L3N0cm9uZz4i fX19fX12YXIgbz0zRChNYXRoLnJvdW5kKHApLzEwKTtpZihyKXtyZXR1cj0KbiBvKyIgIitxfWVs c2V7cmV0dXJuIjxzdHJvbmc+IitvKyI8L3N0cm9uZz4gIitxfX1mdW5jdGlvbiBhKCl7cmV0dXJu IngiK01hPQp0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9ZnVuY3Rpb24g YyhvKXt2YXIgcD0zRCQoIjxwPjwvcD4iKTs9CnAuYXBwZW5kKG8pO3JldHVybiBwfWZ1bmN0aW9u IGYoKXt2YXIgcT0zRG5ldyBEYXRlKCk7dmFyIG89M0QocS5nZXRIb3VycygpPD0KMTA/IjAiOiIi KStxLmdldEhvdXJzKCk7dmFyIHA9M0QocS5nZXRNaW51dGVzKCk8MTA/IjAiOiIiKStxLmdldE1p bnV0ZXMoKTt2PQphciByPTNEcS5nZXREYXRlKCkrIi8iKyhxLmdldE1vbnRoKCkrMSkrIi8iK3Eu Z2V0RnVsbFllYXIoKSsiLCAiK28rIjoiK3A7cmU9CnR1cm4gcn1yZXR1cm57Y3NzTG9hZEZpbGU6 Zyxjc3NHZXRBdHRyaWJ1dGU6aixnZXQ6ZSxtZXJnZTprLGJ5dGVzVG9TdHJpbmc6Yj0KLHV1aWQ6 YSx0aW1lOmYsd3JhcDpjLHJlcXVlc3Q6aSxzYW5pdGl6ZTpkLHRleHRpZnk6aCx2YWxpZGF0ZTps LGRlZXBlYWNoOm59PQp9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGEy NWNlNjNjZGNmMDdjYjJkMjBmZjM0N2JmNDJlODZmNGZkNGYyMWIgLXIgM2JiZWE0ZmZmOWYyMmFm MDU2NWUxMzY9CmRiYTY1OTkyNDAzYzBhOWE1IHN0YXRpYy9zY3JpcHRzL3V0aWxzL3V0aWxzLmpz Ci0tLSBhL3N0YXRpYy9zY3JpcHRzL3V0aWxzL3V0aWxzLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRz L3V0aWxzL3V0aWxzLmpzCkBAIC02LDYgKzYsMTggQEAKIC8vIGRlcGVuZGVuY2llcwogZGVmaW5l KFsibGlicy91bmRlcnNjb3JlIl0sIGZ1bmN0aW9uKF8pIHsKPTIwCisvKiogVHJhdmVyc2UgdGhy b3VnaCBqc29uCisqLworZnVuY3Rpb24gZGVlcGVhY2goZGljdCwgY2FsbGJhY2spIHsKKyAgICBm b3IgKHZhciBpIGluIGRpY3QpIHsKKyAgICAgICAgdmFyIGQgPTNEIGRpY3RbaV07CisgICAgICAg IGlmIChkICYmIHR5cGVvZihkKSA9M0Q9M0QgIm9iamVjdCIpIHsKKyAgICAgICAgICAgIGNhbGxi YWNrKGQpOworICAgICAgICAgICAgZGVlcGVhY2goZCwgY2FsbGJhY2spOworICAgICAgICB9Cisg ICAgfQorfQorCiAvKioKICAqIFNhbml0aXplL2VzY2FwZSBhIHN0cmluZwogICogQHBhcmFte1N0 cmluZ30gICBjb250ZW50IC0gQ29udGVudCB0byBiZSBzYW5pdGl6ZWQKQEAgLTI0OCw3ICsyNjAs OCBAQAogICAgIHJlcXVlc3Q6IHJlcXVlc3QsCiAgICAgc2FuaXRpemU6IHNhbml0aXplLAogICAg IHRleHRpZnk6IHRleHRpZnksCi0gICAgdmFsaWRhdGU6IHZhbGlkYXRlCisgICAgdmFsaWRhdGU6 IHZhbGlkYXRlLAorICAgIGRlZXBlYWNoOiBkZWVwZWFjaAogfTsKPTIwCiB9KTsKCmRpZmYgLXIg YTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIy YWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3N0eWxlL2JsdWUvYmFzZS5jc3MK LS0tIGEvc3RhdGljL3N0eWxlL2JsdWUvYmFzZS5jc3MKKysrIGIvc3RhdGljL3N0eWxlL2JsdWUv YmFzZS5jc3MKQEAgLTE0MTIsNyArMTQxMiw3IEBACiAudWktYnV0dG9uLWljb24tcGxhaW57Ym9y ZGVyOm5vbmUgIWltcG9ydGFudDtiYWNrZ3JvdW5kOm5vbmUgIWltcG9ydGFudDtoZT0KaWdodDpp bmhlcml0ICFpbXBvcnRhbnQ7d2lkdGg6aW5oZXJpdCAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6 M3B4ICFpbXBvcnRhPQpudH0KIC51aS10YWJzIC51aS10YWJzLWFkZHtmb250LXNpemU6MC44ZW07 bWFyZ2luLXJpZ2h0OjVweH0KIC51aS10YWJzIC51aS10YWJzLWRlbGV0ZXtmb250LXNpemU6MC44 ZW07bWFyZ2luLWxlZnQ6NXB4O2N1cnNvcjpwb2ludGVyfQotLnVpLXBvcnRsZXQsLnVpLXBvcnRs ZXQtc2xpbSwudWktcG9ydGxldC1yZXBlYXQsLnVpLXBvcnRsZXQtc2VjdGlvbiwudWktcG89CnJ0 bGV0LXNsaW0sLnVpLXBvcnRsZXQtcmVwZWF0LC51aS1wb3J0bGV0LXNlY3Rpb257Ym9yZGVyOnNv bGlkICNkNmIxNjEgMXB4Oz0KLXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1y YWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4O3Bvc2l0aW9uPQo6cmVsYXRpdmU7Y2xlYXI6Ym90 aDt3aWR0aDphdXRvO2hlaWdodDoxMDAlfS51aS1wb3J0bGV0IC5wb3J0bGV0LWhlYWRlciwudWk9 Ci1wb3J0bGV0LXNsaW0gLnBvcnRsZXQtaGVhZGVye2JhY2tncm91bmQ6I2ViZDliMjtib3JkZXIt Ym90dG9tOnNvbGlkICNkNmIxNj0KMSAxcHg7cGFkZGluZzoycHggOHB4O292ZXJmbG93OnZpc2li bGU7ZmxvYXQ6cmlnaHQ7d2lkdGg6MTAwJX0udWktcG9ydGxldCAuPQpwb3J0bGV0LWhlYWRlciAu cG9ydGxldC10aXRsZSwudWktcG9ydGxldC1zbGltIC5wb3J0bGV0LWhlYWRlciAucG9ydGxldC10 aXQ9Cmxle2Rpc3BsYXk6aW5saW5lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udWktcG9ydGxldCAu cG9ydGxldC1oZWFkZXIgLnBvcnRsZT0KdC10aXRsZSAucG9ydGxldC10aXRsZS10ZXh0LC51aS1w b3J0bGV0LXNsaW0gLnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0LXRpdGxlPQogLnBvcnRsZXQtdGl0 bGUtdGV4dHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CisudWktcG9ydGxldCwudWktcG9ydGxldC1z bGltLC51aS1wb3J0bGV0LXJlcGVhdCwudWktcG9ydGxldC1zZWN0aW9uLC51aS1wbz0KcnRsZXQt c2xpbSwudWktcG9ydGxldC1yZXBlYXQsLnVpLXBvcnRsZXQtc2VjdGlvbntib3JkZXI6c29saWQg I2Q2YjE2MSAxcHg7PQotd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1 czozcHg7Ym9yZGVyLXJhZGl1czozcHg7cG9zaXRpb249CjpyZWxhdGl2ZTtjbGVhcjpib3RoO3dp ZHRoOmF1dG87aGVpZ2h0OjEwMCV9LnVpLXBvcnRsZXQgLnBvcnRsZXQtaGVhZGVyLC51aT0KLXBv cnRsZXQtc2xpbSAucG9ydGxldC1oZWFkZXJ7YmFja2dyb3VuZDojZWJkOWIyO2JvcmRlci1ib3R0 b206c29saWQgI2Q2YjE2PQoxIDFweDtwYWRkaW5nOjJweCA4cHg7b3ZlcmZsb3c6dmlzaWJsZTtm bG9hdDpyaWdodDt3aWR0aDoxMDAlfS51aS1wb3J0bGV0IC49CnBvcnRsZXQtaGVhZGVyIC5wb3J0 bGV0LXRpdGxlLC51aS1wb3J0bGV0LXNsaW0gLnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0LXRpdD0K bGV7ZGlzcGxheTppbmxpbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS51aS1wb3J0bGV0IC5wb3J0 bGV0LWhlYWRlciAucG9ydGxlPQp0LXRpdGxlIC5wb3J0bGV0LXRpdGxlLXRleHQsLnVpLXBvcnRs ZXQtc2xpbSAucG9ydGxldC1oZWFkZXIgLnBvcnRsZXQtdGl0bGU9CiAucG9ydGxldC10aXRsZS10 ZXh0e3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoyMHB4fQogLnVpLXBvcnRsZXQg LnBvcnRsZXQtaGVhZGVyIC5wb3J0bGV0LXRpdGxlIC5pY29uLC51aS1wb3J0bGV0LXNsaW0gLnBv cnRsZXQ9Ci1oZWFkZXIgLnBvcnRsZXQtdGl0bGUgLmljb257Zm9udC1zaXplOjEuMmVtO3ZlcnRp Y2FsLWFsaWduOm1pZGRsZX0KIC51aS1wb3J0bGV0IC5wb3J0bGV0LWJ1dHRvbnMsLnVpLXBvcnRs ZXQtc2xpbSAucG9ydGxldC1idXR0b25ze2hlaWdodDo1MHB4PQo7cGFkZGluZzoxMHB4fQogLnVp LXBvcnRsZXQgLnBvcnRsZXQtY29udGVudCwudWktcG9ydGxldC1zbGltIC5wb3J0bGV0LWNvbnRl bnR7aGVpZ2h0OmluaGU9CnJpdDtwYWRkaW5nOjEwcHg7Y2xlYXI6Ym90aH0udWktcG9ydGxldCAu cG9ydGxldC1jb250ZW50IC5jb250ZW50LC51aS1wb3J0bD0KZXQtc2xpbSAucG9ydGxldC1jb250 ZW50IC5jb250ZW50e3BhZGRpbmc6MTBweDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS51aS1wPQpv cnRsZXQgLnBvcnRsZXQtY29udGVudCAuY29udGVudCAuYnV0dG9ucywudWktcG9ydGxldC1zbGlt IC5wb3J0bGV0LWNvbnRlbnQ9CiAuY29udGVudCAuYnV0dG9uc3toZWlnaHQ6NTBweDtwYWRkaW5n OjEwcHh9CkBAIC0xNzY1LDcgKzE3NjUsNyBAQAogZGl2LnRvb2xGb3JtRGlzYWJsZWR7Ym9yZGVy LWNvbG9yOiNiZmJmYmZ9CiBkaXYudG9vbEhlbHB7bWFyZ2luLXRvcDoxNXB4O3BhZGRpbmc6NXB4 fQogZGl2LnRvb2xIZWxwQm9keXt3aWR0aDoxMDAlfQotLnRvb2xGb3JtLnRvb2xGb3JtSW5DYW52 YXN7Ym9yZGVyOnNvbGlkICNkNmIxNjEgMXB4O2JhY2tncm91bmQ6I2ZmZn0udG9vbEY9Cm9ybS50 b29sRm9ybUluQ2FudmFzLnRvb2xGb3JtLWFjdGl2ZXtib3JkZXI6c29saWQgYmx1ZSAzcHg7bWFy Z2luOjRweH0KKy50b29sRm9ybS50b29sRm9ybUluQ2FudmFze2JvcmRlcjpzb2xpZCAjZDZiMTYx IDFweDtiYWNrZ3JvdW5kOiNmZmZ9LnRvb2xGPQpvcm0udG9vbEZvcm1JbkNhbnZhcy50b29sRm9y bS1hY3RpdmV7Ym9yZGVyOnNvbGlkICM1ZjY5OTAgM3B4O21hcmdpbjo0cHh9CiAudG9vbEZvcm0u dG9vbEZvcm1JbkNhbnZhcyAudG9vbEZvcm1UaXRsZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdo dDoxLjQyOD0KNTcxNDI5fQogZGl2LmZvcm0sZGl2LnRvb2xGb3Jte2JvcmRlcjpzb2xpZCAjZDZi MTYxIDFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy09Cm1vei1ib3JkZXItcmFkaXVzOjNw eDtib3JkZXItcmFkaXVzOjNweH0KIGRpdi5mb3JtLXRpdGxlLGRpdi50b29sRm9ybVRpdGxle3Bh ZGRpbmc6NXB4IDEwcHg7YmFja2dyb3VuZDojZWJkOWIyO2JvcmRlPQpyLWJvdHRvbTpzb2xpZCAj ZDZiMTYxIDFweH0KCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0 ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGlj L3N0eWxlL3NyYy9sZXNzL2Jhc2UubGVzcwotLS0gYS9zdGF0aWMvc3R5bGUvc3JjL2xlc3MvYmFz ZS5sZXNzCisrKyBiL3N0YXRpYy9zdHlsZS9zcmMvbGVzcy9iYXNlLmxlc3MKQEAgLTU4Niw3ICs1 ODYsNyBAQAogICAgIGJvcmRlcjogc29saWQgQGZvcm0tYm9yZGVyIDFweDsKICAgICBiYWNrZ3Jv dW5kOiBAd2hpdGU7CiAgICAgJi50b29sRm9ybS1hY3RpdmUgewotICAgICAgICBib3JkZXI6IHNv bGlkIGJsdWUgM3B4OworICAgICAgICBib3JkZXI6IHNvbGlkIEBicmFuZC1wcmltYXJ5IDNweDsK ICAgICAgICAgbWFyZ2luOiA0cHg7CiAgICAgfQogICAgIC50b29sRm9ybVRpdGxlIHsKCmRpZmYg LXIgYTI1Y2U2M2NkY2YwN2NiMmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5 ZjIyYWYwNTY1ZTEzNj0KZGJhNjU5OTI0MDNjMGE5YTUgc3RhdGljL3N0eWxlL3NyYy9sZXNzL3Vp Lmxlc3MKLS0tIGEvc3RhdGljL3N0eWxlL3NyYy9sZXNzL3VpLmxlc3MKKysrIGIvc3RhdGljL3N0 eWxlL3NyYy9sZXNzL3VpLmxlc3MKQEAgLTE2OCw2ICsxNjgsNyBAQAogICAgICAgICAgICAgdmVy dGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICAgICAgIC5wb3J0bGV0LXRpdGxlLXRleHQgewog ICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgICAgICAgICAgICAg bGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAuaWNvbiB7CiAg ICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTsKCmRpZmYgLXIgYTI1Y2U2M2NkY2YwN2Ni MmQyMGZmMzQ3YmY0MmU4NmY0ZmQ0ZjIxYiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNj0KZGJh NjU5OTI0MDNjMGE5YTUgdGVtcGxhdGVzL3VzZXIvaW5kZXgubWFrbwotLS0gYS90ZW1wbGF0ZXMv dXNlci9pbmRleC5tYWtvCisrKyBiL3RlbXBsYXRlcy91c2VyL2luZGV4Lm1ha28KQEAgLTE4LDYg KzE4LDcgQEAKICAgICAgICAgICAgIDxsaT48YSBocmVmPTNEIiR7aC51cmxfZm9yKCBjb250cm9s bGVyPTNEJ3VzZXInLCBhY3Rpb249M0QnbG9nPQpvdXQnLCBsb2dvdXRfYWxsPTNEVHJ1ZSApfSIg dGFyZ2V0PTNEIl90b3AiPiR7XygnTG9nb3V0Jyl9PC9hPiAke18oJ29mIGFsbCA9CnVzZXIgc2Vz c2lvbnMnKX08L2xpPgogICAgICAgICAlZWxzZToKICAgICAgICAgICAgIDxsaT48YSBocmVmPTNE IiR7aC51cmxfZm9yKCBjb250cm9sbGVyPTNEJ3VzZXInLCBhY3Rpb249M0QnbWFuPQphZ2VfdXNl cl9pbmZvJywgY250cmxsZXI9M0RjbnRybGxlciApfSI+JHtfKCdNYW5hZ2UgeW91ciBpbmZvcm1h dGlvbicpfTwvYT49CjwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0zRCIke2gudXJsX2Zv ciggY29udHJvbGxlcj0zRCd1c2VyJywgYWN0aW9uPTNEJ2NoYT0KbmdlX3Bhc3N3b3JkJyApfSI+ JHtfKCdDaGFuZ2UgeW91ciBwYXNzd29yZCcpfTwvYT48L2xpPjxsaT48YSBocmVmPTNEIiR7aC51 PQpybF9mb3IoIGNvbnRyb2xsZXI9M0QndXNlcicsIGFjdGlvbj0zRCdhcGlfa2V5cycsIGNudHJs bGVyPTNEY250cmxsZXIgKX0iPiQ9CntfKCdNYW5hZ2UgeW91ciBBUEkga2V5cycpfTwvYT48L2xp PjxsaT48YSBocmVmPTNEIiR7aC51cmxfZm9yKCBjb250cm9sbGVyPQo9M0QncmVwb3NpdG9yeScs IGFjdGlvbj0zRCdtYW5hZ2VfZW1haWxfYWxlcnRzJywgY250cmxsZXI9M0RjbnRybGxlciApfSI+ JHs9Cl8oJ01hbmFnZSB5b3VyIGVtYWlsIGFsZXJ0cycpfTwvYT48L2xpPjxsaT48YSBocmVmPTNE IiR7aC51cmxfZm9yKCBjb250cm9sbD0KZXI9M0QndXNlcicsIGFjdGlvbj0zRCdsb2dvdXQnLCBs b2dvdXRfYWxsPTNEVHJ1ZSApfSIgdGFyZ2V0PTNEIl90b3AiPiR7XygnPQpMb2dvdXQnKX08L2E+ ICR7Xygnb2YgYWxsIHVzZXIgc2Vzc2lvbnMnKX08L2xpPgoKCmh0dHBzOi8vYml0YnVja2V0Lm9y Zy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8zMTM1N2VkZjI2MGUvCkNoYW5nZXNldDog ICAzMTM1N2VkZjI2MGUKVXNlcjogICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIw MTUtMDEtMTQgMjI6MTg6MzUrMDA6MDAKU3VtbWFyeTogICAgIE1lcmdlZCBnYWxheHkvZ2FsYXh5 LWNlbnRyYWwgaW50byBkZWZhdWx0CkFmZmVjdGVkICM6ICA1IGZpbGVzCgpkaWZmIC1yIDNiYmVh NGZmZjlmMjJhZjA1NjVlMTM2ZGJhNjU5OTI0MDNjMGE5YTUgLXIgMzEzNTdlZGYyNjBlYTZiMjU5 ZGM2ODI9CjMwZjMwODNiM2YwZmFmY2EwIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2No YXJ0cy9zdGF0aWMvYnVpbGQtYXBwLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp b25zL2NoYXJ0cy9zdGF0aWMvYnVpbGQtYXBwLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh bGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvYnVpbGQtYXBwLmpzCkBAIC0zLDQgKzMsNCBAQAogLy8g ICAgIChjKSAyMDA5LTIwMTQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZl c3RpZ2F0aXZlIFJlcG89CnJ0ZXJzICYgRWRpdG9ycwogLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJl IGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCj0yMAotZGVmaW5lKCJt dmMvdWkvdWktbW9kYWwiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9M0RCYWNrYm9uZS5WaWV3LmV4dGVu ZCh7ZWxNYWk9Cm46ImJvZHkiLG9wdGlvbnNEZWZhdWx0Ont0aXRsZToidWktbW9kYWwiLGJvZHk6 IiIsYmFja2Ryb3A6ITAsaGVpZ2h0Om51bGwsdz0KaWR0aDpudWxsLGNsb3NpbmdfZXZlbnRzOiEx LGNsb3NpbmdfY2FsbGJhY2s6bnVsbH0sYnV0dG9uTGlzdDp7fSxpbml0aWFsaXplPQo6ZnVuY3Rp b24oZSl7ZSYmdGhpcy5fY3JlYXRlKGUpfSxzaG93OmZ1bmN0aW9uKGUpe3RoaXMuaW5pdGlhbGl6 ZShlKSx0aGlzLm89CnB0aW9ucy5oZWlnaHQ/KHRoaXMuJGJvZHkuY3NzKCJoZWlnaHQiLHRoaXMu b3B0aW9ucy5oZWlnaHQpLHRoaXMuJGJvZHkuY3NzKD0KIm92ZXJmbG93IiwiaGlkZGVuIikpOnRo aXMuJGJvZHkuY3NzKCJtYXgtaGVpZ2h0IiwkKHdpbmRvdykuaGVpZ2h0KCkvMiksdGhpPQpzLm9w dGlvbnMud2lkdGgmJnRoaXMuJGRpYWxvZy5jc3MoIndpZHRoIix0aGlzLm9wdGlvbnMud2lkdGgp LHRoaXMudmlzaWJsZT89CnRoaXMuJGVsLnNob3coKTp0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0 aGlzLnZpc2libGU9M0QhMH0saGlkZTpmdW5jdGlvbigpez0KdGhpcy52aXNpYmxlPTNEITEsdGhp cy4kZWwuZmFkZU91dCgiZmFzdCIpLHRoaXMub3B0aW9ucy5jbG9zaW5nX2NhbGxiYWNrJiZ0PQpo aXMub3B0aW9ucy5jbG9zaW5nX2NhbGxiYWNrKCl9LGVuYWJsZUJ1dHRvbjpmdW5jdGlvbihlKXt2 YXIgdD0zRHRoaXMuYnV0dG89Cm5MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCkucHJv cCgiZGlzYWJsZWQiLCExKX0sZGlzYWJsZUJ1dHRvbjpmdW5jdD0KaW9uKGUpe3ZhciB0PTNEdGhp cy5idXR0b25MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCkucHJvcCgiZGlzYWJsZWQi PQosITApfSxzaG93QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2Vd O3RoaXMuJGJ1dHRvbnMuZmluZCg9CiIjIit0KS5zaG93KCl9LGhpZGVCdXR0b246ZnVuY3Rpb24o ZSl7dmFyIHQ9M0R0aGlzLmJ1dHRvbkxpc3RbZV07dGhpcy4kYnV0dD0Kb25zLmZpbmQoIiMiK3Qp LmhpZGUoKX0sZ2V0QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2Vd O3JlPQp0dXJuIHRoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCl9LHNjcm9sbFRvcDpmdW5jdGlvbigp e3JldHVybiB0aGlzLiRib2R5LnNjcm89CmxsVG9wKCl9LF9jcmVhdGU6ZnVuY3Rpb24oZSl7dmFy IHQ9M0R0aGlzO3RoaXMub3B0aW9ucz0zRF8uZGVmYXVsdHMoZSx0aGlzLj0Kb3B0aW9uc0RlZmF1 bHQpLHRoaXMub3B0aW9ucy5ib2R5PTNEPTNEInByb2dyZXNzIiYmKHRoaXMub3B0aW9ucy5ib2R5 PTNEJCgnPQo8ZGl2IGNsYXNzPTNEInByb2dyZXNzIHByb2dyZXNzLXN0cmlwZWQgYWN0aXZlIj48 ZGl2IGNsYXNzPTNEInByb2dyZXNzLWJhciA9CnByb2dyZXNzLWJhci1pbmZvIiBzdHlsZT0zRCJ3 aWR0aDoxMDAlIj48L2Rpdj48L2Rpdj4nKSksdGhpcy4kZWwmJih0aGlzLiRlbD0KLnJlbW92ZSgp LCQoZG9jdW1lbnQpLm9mZigia2V5dXAudWktbW9kYWwiKSksdGhpcy5zZXRFbGVtZW50KHRoaXMu X3RlbXBsYXRlPQoodGhpcy5vcHRpb25zLnRpdGxlKSksdGhpcy4kZGlhbG9nPTNEdGhpcy4kZWwu ZmluZCgiLm1vZGFsLWRpYWxvZyIpLHRoaXMuJGI9Cm9keT0zRHRoaXMuJGVsLmZpbmQoIi5tb2Rh bC1ib2R5IiksdGhpcy4kZm9vdGVyPTNEdGhpcy4kZWwuZmluZCgiLm1vZGFsLWZvbz0KdGVyIiks dGhpcy4kYnV0dG9ucz0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b25zIiksdGhpcy4kYmFja2Ryb3A9 M0R0aGlzLiRlbC5mPQppbmQoIi5tb2RhbC1iYWNrZHJvcCIpLHRoaXMuJGJvZHkuaHRtbCh0aGlz Lm9wdGlvbnMuYm9keSksdGhpcy5vcHRpb25zLmJhY2s9CmRyb3B8fHRoaXMuJGJhY2tkcm9wLnJl bW92ZUNsYXNzKCJpbiIpO2lmKHRoaXMub3B0aW9ucy5idXR0b25zKXt0aGlzLmJ1dHRvbj0KTGlz dD0zRHt9O3ZhciBuPTNEMDskLmVhY2godGhpcy5vcHRpb25zLmJ1dHRvbnMsZnVuY3Rpb24oZSxy KXt2YXIgaT0zRCJidXR0PQpvbi0iK24rKzt0LiRidXR0b25zLmFwcGVuZCgkKCc8YnV0dG9uIGlk PTNEIicraSsnIj48L2J1dHRvbj4nKS50ZXh0KGUpLmNsaWM9CmsocikpLmFwcGVuZCgiICIpLHQu YnV0dG9uTGlzdFtlXT0zRGl9KX1lbHNlIHRoaXMuJGZvb3Rlci5oaWRlKCk7JCh0aGlzLmVsTT0K YWluKS5hcHBlbmQoJCh0aGlzLmVsKSksdGhpcy5vcHRpb25zLmNsb3NpbmdfZXZlbnRzJiYoJChk b2N1bWVudCkub24oImtleXVwPQoudWktbW9kYWwiLGZ1bmN0aW9uKGUpe2Uua2V5Q29kZT0zRD0z RDI3JiZ0LmhpZGUoKX0pLHRoaXMuJGVsLmZpbmQoIi5tb2RhbC09CmJhY2tkcm9wIikub24oImNs aWNrIixmdW5jdGlvbigpe3QuaGlkZSgpfSkpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJu Jz0KPGRpdiBjbGFzcz0zRCJ1aS1tb2RhbCBtb2RhbCI+PGRpdiBjbGFzcz0zRCJtb2RhbC1iYWNr ZHJvcCBmYWRlIGluIiBzdHlsZT0KPTNEInotaW5kZXg6IC0xOyI+PC9kaXY+PGRpdiBjbGFzcz0z RCJtb2RhbC1kaWFsb2ciPjxkaXYgY2xhc3M9M0QibW9kYWwtY29uPQp0ZW50Ij48ZGl2IGNsYXNz PTNEIm1vZGFsLWhlYWRlciI+PGJ1dHRvbiB0eXBlPTNEImJ1dHRvbiIgY2xhc3M9M0QiY2xvc2Ui IHM9CnR5bGU9M0QiZGlzcGxheTogbm9uZTsiPiZ0aW1lczs8L2J1dHRvbj48aDQgY2xhc3M9M0Qi dGl0bGUiPicrZSsiPC9oND4iKyI8Lz0KZGl2PiIrJzxkaXYgY2xhc3M9M0QibW9kYWwtYm9keSIg c3R5bGU9M0QicG9zaXRpb246IHN0YXRpYzsiPjwvZGl2PicrJzxkaXYgPQpjbGFzcz0zRCJtb2Rh bC1mb290ZXIiPicrJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyIgc3R5bGU9M0QiZmxvYXQ6IHJpZ2h0 OyI+PC89CmRpdj4nKyI8L2Rpdj4iKyI8L2RpdiIrIjwvZGl2PiIrIjwvZGl2PiJ9fSk7cmV0dXJu e1ZpZXc6ZX19KSxmdW5jdGlvbigpe3Zhcj0KIGU9M0R0aGlzLHQ9M0RlLl8sbj0zREFycmF5LnBy b3RvdHlwZSxyPTNET2JqZWN0LnByb3RvdHlwZSxpPTNERnVuY3Rpb24ucHJvPQp0b3R5cGUscz0z RG4ucHVzaCxvPTNEbi5zbGljZSx1PTNEbi5jb25jYXQsYT0zRHIudG9TdHJpbmcsZj0zRHIuaGFz T3duUHJvcGU9CnJ0eSxsPTNEQXJyYXkuaXNBcnJheSxjPTNET2JqZWN0LmtleXMsaD0zRGkuYmlu ZCxwPTNEZnVuY3Rpb24oZSl7aWYoZSBpbnN0YT0KbmNlb2YgcClyZXR1cm4gZTtpZighKHRoaXMg aW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5fd3JhcHBlZD0zRGV9PQo7dHlwZW9m IGV4cG9ydHMhPTNEInVuZGVmaW5lZCI/KHR5cGVvZiBtb2R1bGUhPTNEInVuZGVmaW5lZCImJm1v ZHVsZS5leHBvcnQ9CnMmJihleHBvcnRzPTNEbW9kdWxlLmV4cG9ydHM9M0RwKSxleHBvcnRzLl89 M0RwKTplLl89M0RwLHAuVkVSU0lPTj0zRCIxLjcuMD0KIjt2YXIgZD0zRGZ1bmN0aW9uKGUsdCxu KXtpZih0PTNEPTNEPTNEdm9pZCAwKXJldHVybiBlO3N3aXRjaChuPTNEPTNEbnVsbD8zPQo6bil7 Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1 cm4gZnVuY3Rpb24obiw9CnIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1 bmN0aW9uKG4scixpKXtyZXR1cm4gZS5jYWxsKHQsbixyLD0KaSl9O2Nhc2UgNDpyZXR1cm4gZnVu Y3Rpb24obixyLGkscyl7cmV0dXJuIGUuY2FsbCh0LG4scixpLHMpfX1yZXR1cm4gZnVuY3RpPQpv bigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19O3AuaXRlcmF0ZWU9M0RmdW5jdGlvbihl LHQsbil7cmV0dXJuIGU9M0Q9Cj0zRG51bGw/cC5pZGVudGl0eTpwLmlzRnVuY3Rpb24oZSk/ZChl LHQsbik6cC5pc09iamVjdChlKT9wLm1hdGNoZXMoZSk6cC5wcj0Kb3BlcnR5KGUpfSxwLmVhY2g9 M0RwLmZvckVhY2g9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuIGU7dD0K PTNEZCh0LG4pO3ZhciByLGk9M0RlLmxlbmd0aDtpZihpPTNEPTNEPTNEK2kpZm9yKHI9M0QwO3I8 aTtyKyspdChlW3JdLHIsZSk7PQplbHNle3ZhciBzPTNEcC5rZXlzKGUpO2ZvcihyPTNEMCxpPTNE cy5sZW5ndGg7cjxpO3IrKyl0KGVbc1tyXV0sc1tyXSxlKX1yZXQ9CnVybiBlfSxwLm1hcD0zRHAu Y29sbGVjdD0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt0PTNEcC5p dD0KZXJhdGVlKHQsbik7dmFyIHI9M0RlLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndGgmJnAua2V5cyhl KSxpPTNEKHJ8fGUpLmxlbmd0aCxzPQo9M0RBcnJheShpKSxvO2Zvcih2YXIgdT0zRDA7dTxpO3Ur KylvPTNEcj9yW3VdOnUsc1t1XT0zRHQoZVtvXSxvLGUpO3JldHVybiA9CnN9O3ZhciB2PTNEIlJl ZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiO3AucmVkdWNlPTNEcC5m b2xkbD0KPTNEcC5pbmplY3Q9M0RmdW5jdGlvbihlLHQsbixyKXtlPTNEPTNEbnVsbCYmKGU9M0Rb XSksdD0zRGQodCxyLDQpO3ZhciBpPTNEPQplLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndGgmJnAua2V5 cyhlKSxzPTNEKGl8fGUpLmxlbmd0aCxvPTNEMCx1O2lmKGFyZ3VtZW50cy49Cmxlbmd0aDwzKXtp Zighcyl0aHJvdyBuZXcgVHlwZUVycm9yKHYpO249M0RlW2k/aVtvKytdOm8rK119Zm9yKDtvPHM7 bysrKXU9Cj0zRGk/aVtvXTpvLG49M0R0KG4sZVt1XSx1LGUpO3JldHVybiBufSxwLnJlZHVjZVJp Z2h0PTNEcC5mb2xkcj0zRGZ1bmN0aW9uKD0KZSx0LG4scil7ZT0zRD0zRG51bGwmJihlPTNEW10p LHQ9M0RkKHQsciw0KTt2YXIgaT0zRGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0PQpoJiZwLmtleXMo ZSkscz0zRChpfHxlKS5sZW5ndGgsbztpZihhcmd1bWVudHMubGVuZ3RoPDMpe2lmKCFzKXRocm93 IG5ldyBUeXA9CmVFcnJvcih2KTtuPTNEZVtpP2lbLS1zXTotLXNdfXdoaWxlKHMtLSlvPTNEaT9p W3NdOnMsbj0zRHQobixlW29dLG8sZSk7cmV0dT0Kcm4gbn0scC5maW5kPTNEcC5kZXRlY3Q9M0Rm dW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9M0RwLml0ZXJhdGVlKHQsbiksPQpwLnNvbWUo ZSxmdW5jdGlvbihlLG4saSl7aWYodChlLG4saSkpcmV0dXJuIHI9M0RlLCEwfSkscn0scC5maWx0 ZXI9M0RwLnNlbGU9CmN0PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNEW107cmV0dXJuIGU9M0Q9 M0RudWxsP3I6KHQ9M0RwLml0ZXJhdGVlKHQsbikscD0KLmVhY2goZSxmdW5jdGlvbihlLG4saSl7 dChlLG4saSkmJnIucHVzaChlKX0pLHIpfSxwLnJlamVjdD0zRGZ1bmN0aW9uKGUsdCxuPQope3Jl dHVybiBwLmZpbHRlcihlLHAubmVnYXRlKHAuaXRlcmF0ZWUodCkpLG4pfSxwLmV2ZXJ5PTNEcC5h bGw9M0RmdW5jdGlvbig9CmUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4hMDt0PTNEcC5pdGVy YXRlZSh0LG4pO3ZhciByPTNEZS5sZW5ndGghPTNEPTNEKz0KZS5sZW5ndGgmJnAua2V5cyhlKSxp PTNEKHJ8fGUpLmxlbmd0aCxzLG87Zm9yKHM9M0QwO3M8aTtzKyspe289M0RyP3Jbc106cztpPQpm KCF0KGVbb10sbyxlKSlyZXR1cm4hMX1yZXR1cm4hMH0scC5zb21lPTNEcC5hbnk9M0RmdW5jdGlv bihlLHQsbil7aWYoZT0zRD0KPTNEbnVsbClyZXR1cm4hMTt0PTNEcC5pdGVyYXRlZSh0LG4pO3Zh ciByPTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtlPQp5cyhlKSxpPTNEKHJ8fGUpLmxl bmd0aCxzLG87Zm9yKHM9M0QwO3M8aTtzKyspe289M0RyP3Jbc106cztpZih0KGVbb10sbyxlKSk9 CnJldHVybiEwfXJldHVybiExfSxwLmNvbnRhaW5zPTNEcC5pbmNsdWRlPTNEZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZT0zRD0zRG51bD0KbD8hMTooZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiYoZT0z RHAudmFsdWVzKGUpKSxwLmluZGV4T2YoZSx0KT49M0QwKX0scC5pPQpudm9rZT0zRGZ1bmN0aW9u KGUsdCl7dmFyIG49M0RvLmNhbGwoYXJndW1lbnRzLDIpLHI9M0RwLmlzRnVuY3Rpb24odCk7cmV0 dXI9Cm4gcC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm4ocj90OmVbdF0pLmFwcGx5KGUsbil9KX0s cC5wbHVjaz0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gcC5tYXAoZSxwLnByb3BlcnR5KHQpKX0s cC53aGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZmlsdGVyKGUsPQpwLm1hdGNoZXModCkp fSxwLmZpbmRXaGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZmluZChlLHAubWF0Y2hlcyh0 KSl9LHA9Ci5tYXg9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0QtSW5maW5pdHksaT0zRC1JbmZp bml0eSxzLG87aWYodD0zRD0zRG51bGwmJj0KZSE9M0RudWxsKXtlPTNEZS5sZW5ndGg9M0Q9M0Q9 M0QrZS5sZW5ndGg/ZTpwLnZhbHVlcyhlKTtmb3IodmFyIHU9M0QwLGE9M0RlPQoubGVuZ3RoO3U8 YTt1Kyspcz0zRGVbdV0scz5yJiYocj0zRHMpfWVsc2UgdD0zRHAuaXRlcmF0ZWUodCxuKSxwLmVh Y2goZSxmdW49CmN0aW9uKGUsbixzKXtvPTNEdChlLG4scyk7aWYobz5pfHxvPTNEPTNEPTNELUlu ZmluaXR5JiZyPTNEPTNEPTNELUluZmluaXR5KT0Kcj0zRGUsaT0zRG99KTtyZXR1cm4gcn0scC5t aW49M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0RJbmZpbml0eSxpPTNESW5maW5pPQp0eSxzLG87 aWYodD0zRD0zRG51bGwmJmUhPTNEbnVsbCl7ZT0zRGUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3Ro P2U6cC52YWx1ZXM9CihlKTtmb3IodmFyIHU9M0QwLGE9M0RlLmxlbmd0aDt1PGE7dSsrKXM9M0Rl W3VdLHM8ciYmKHI9M0RzKX1lbHNlIHQ9M0RwLml0ZT0KcmF0ZWUodCxuKSxwLmVhY2goZSxmdW5j dGlvbihlLG4scyl7bz0zRHQoZSxuLHMpO2lmKG88aXx8bz0zRD0zRD0zREluZmluaXR5PQomJnI9 M0Q9M0Q9M0RJbmZpbml0eSlyPTNEZSxpPTNEb30pO3JldHVybiByfSxwLnNodWZmbGU9M0RmdW5j dGlvbihlKXt2YXIgdD0KPTNEZSYmZS5sZW5ndGg9M0Q9M0Q9M0QrZS5sZW5ndGg/ZTpwLnZhbHVl cyhlKSxuPTNEdC5sZW5ndGgscj0zREFycmF5KG4pO2ZvPQpyKHZhciBpPTNEMCxzO2k8bjtpKysp cz0zRHAucmFuZG9tKDAsaSkscyE9M0Q9M0RpJiYocltpXT0zRHJbc10pLHJbc109M0R0W2k9Cl07 cmV0dXJuIHJ9LHAuc2FtcGxlPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PTNEPTNEbnVsbHx8 bj8oZS5sZW5ndGghPTNEPQo9M0QrZS5sZW5ndGgmJihlPTNEcC52YWx1ZXMoZSkpLGVbcC5yYW5k b20oZS5sZW5ndGgtMSldKTpwLnNodWZmbGUoZSkuc2xpY2U9CigwLE1hdGgubWF4KDAsdCkpfSxw LnNvcnRCeT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0zRHAuaXRlcmF0ZWUodCxuKSxwLj0K cGx1Y2socC5tYXAoZSxmdW5jdGlvbihlLG4scil7cmV0dXJue3ZhbHVlOmUsaW5kZXg6bixjcml0 ZXJpYTp0KGUsbixyKX19KS5zPQpvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGUuY3JpdGVyaWEs cj0zRHQuY3JpdGVyaWE7aWYobiE9M0Q9M0RyKXtpZihuPnJ8fG49Cj0zRD0zRD0zRHZvaWQgMCly ZXR1cm4gMTtpZihuPHJ8fHI9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuLTF9cmV0dXJuIGUuaW5kZXgt dD0KLmluZGV4fSksInZhbHVlIil9O3ZhciBtPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9u KHQsbixyKXt2YXIgaT0zRHt9O3JlPQp0dXJuIG49M0RwLml0ZXJhdGVlKG4scikscC5lYWNoKHQs ZnVuY3Rpb24ocixzKXt2YXIgbz0zRG4ocixzLHQpO2UoaSxyLG8pfSk9CixpfX07cC5ncm91cEJ5 PTNEbShmdW5jdGlvbihlLHQsbil7cC5oYXMoZSxuKT9lW25dLnB1c2godCk6ZVtuXT0zRFt0XX0p LHAuaT0KbmRleEJ5PTNEbShmdW5jdGlvbihlLHQsbil7ZVtuXT0zRHR9KSxwLmNvdW50Qnk9M0Rt KGZ1bmN0aW9uKGUsdCxuKXtwLmhhcyhlPQosbik/ZVtuXSsrOmVbbl09M0QxfSkscC5zb3J0ZWRJ bmRleD0zRGZ1bmN0aW9uKGUsdCxuLHIpe249M0RwLml0ZXJhdGVlKG4sciw9CjEpO3ZhciBpPTNE bih0KSxzPTNEMCxvPTNEZS5sZW5ndGg7d2hpbGUoczxvKXt2YXIgdT0zRHMrbz4+PjE7bihlW3Vd KTxpP3M9Cj0zRHUrMTpvPTNEdX1yZXR1cm4gc30scC50b0FycmF5PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGU/cC5pc0FycmF5KGUpP28uY2FsbD0KKGUpOmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3Ro P3AubWFwKGUscC5pZGVudGl0eSk6cC52YWx1ZXMoZSk6W119LHAuc2l6ZT0KPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGU9M0Q9M0RudWxsPzA6ZS5sZW5ndGg9M0Q9M0Q9M0QrZS5sZW5ndGg/ZS5sZW5n dGg6cC5rPQpleXMoZSkubGVuZ3RofSxwLnBhcnRpdGlvbj0zRGZ1bmN0aW9uKGUsdCxuKXt0PTNE cC5pdGVyYXRlZSh0LG4pO3ZhciByPTNEW109CixpPTNEW107cmV0dXJuIHAuZWFjaChlLGZ1bmN0 aW9uKGUsbixzKXsodChlLG4scyk/cjppKS5wdXNoKGUpfSksW3IsaV19LHAuZj0KaXJzdD0zRHAu aGVhZD0zRHAudGFrZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0zRD0zRG51bGw/dm9pZCAw OnQ9M0Q9M0RuPQp1bGx8fG4/ZVswXTp0PDA/W106by5jYWxsKGUsMCx0KX0scC5pbml0aWFsPTNE ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvLmNhbGw9CihlLDAsTWF0aC5tYXgoMCxlLmxlbmd0aC0o dD0zRD0zRG51bGx8fG4/MTp0KSkpfSxwLmxhc3Q9M0RmdW5jdGlvbihlLHQsbil7cj0KZXR1cm4g ZT0zRD0zRG51bGw/dm9pZCAwOnQ9M0Q9M0RudWxsfHxuP2VbZS5sZW5ndGgtMV06by5jYWxsKGUs TWF0aC5tYXgoZS5sPQplbmd0aC10LDApKX0scC5yZXN0PTNEcC50YWlsPTNEcC5kcm9wPTNEZnVu Y3Rpb24oZSx0LG4pe3JldHVybiBvLmNhbGwoZSx0PQo9M0Q9M0RudWxsfHxuPzE6dCl9LHAuY29t cGFjdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmZpbHRlcihlLHAuaWRlbnRpdHkpfTs9CnZhciBn PTNEZnVuY3Rpb24oZSx0LG4scil7aWYodCYmcC5ldmVyeShlLHAuaXNBcnJheSkpcmV0dXJuIHUu YXBwbHkocixlKTtmbz0Kcih2YXIgaT0zRDAsbz0zRGUubGVuZ3RoO2k8bztpKyspe3ZhciBhPTNE ZVtpXTshcC5pc0FycmF5KGEpJiYhcC5pc0FyZ3VtZW50PQpzKGEpP258fHIucHVzaChhKTp0P3Mu YXBwbHkocixhKTpnKGEsdCxuLHIpfXJldHVybiByfTtwLmZsYXR0ZW49M0RmdW5jdGlvbig9CmUs dCl7cmV0dXJuIGcoZSx0LCExLFtdKX0scC53aXRob3V0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIHAu ZGlmZmVyZW5jZShlLG8uYz0KYWxsKGFyZ3VtZW50cywxKSl9LHAudW5pcT0zRHAudW5pcXVlPTNE ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0zRD0zRG51bGwpcmV0PQp1cm5bXTtwLmlzQm9vbGVhbih0 KXx8KHI9M0RuLG49M0R0LHQ9M0QhMSksbiE9M0RudWxsJiYobj0zRHAuaXRlcmF0ZWUobixyKSk9 Cjt2YXIgaT0zRFtdLHM9M0RbXTtmb3IodmFyIG89M0QwLHU9M0RlLmxlbmd0aDtvPHU7bysrKXt2 YXIgYT0zRGVbb107aWYodCkoIT0Kb3x8cyE9M0Q9M0RhKSYmaS5wdXNoKGEpLHM9M0RhO2Vsc2Ug aWYobil7dmFyIGY9M0RuKGEsbyxlKTtwLmluZGV4T2YocyxmKTwwPQomJihzLnB1c2goZiksaS5w dXNoKGEpKX1lbHNlIHAuaW5kZXhPZihpLGEpPDAmJmkucHVzaChhKX1yZXR1cm4gaX0scC51bmlv bj0KPTNEZnVuY3Rpb24oKXtyZXR1cm4gcC51bmlxKGcoYXJndW1lbnRzLCEwLCEwLFtdKSl9LHAu aW50ZXJzZWN0aW9uPTNEZnVuY3RpPQpvbihlKXtpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt2YXIg dD0zRFtdLG49M0Rhcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgcj0zRDA9CixpPTNEZS5sZW5ndGg7 cjxpO3IrKyl7dmFyIHM9M0RlW3JdO2lmKHAuY29udGFpbnModCxzKSljb250aW51ZTtmb3IodmFy IG89Cj0zRDE7bzxuO28rKylpZighcC5jb250YWlucyhhcmd1bWVudHNbb10scykpYnJlYWs7bz0z RD0zRD0zRG4mJnQucHVzaChzKX1yZT0KdHVybiB0fSxwLmRpZmZlcmVuY2U9M0RmdW5jdGlvbihl KXt2YXIgdD0zRGcoby5jYWxsKGFyZ3VtZW50cywxKSwhMCwhMCxbXSk7PQpyZXR1cm4gcC5maWx0 ZXIoZSxmdW5jdGlvbihlKXtyZXR1cm4hcC5jb250YWlucyh0LGUpfSl9LHAuemlwPTNEZnVuY3Rp b24oZSk9CntpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt2YXIgdD0zRHAubWF4KGFyZ3VtZW50cywi bGVuZ3RoIikubGVuZ3RoLG49M0RBcnJheT0KKHQpO2Zvcih2YXIgcj0zRDA7cjx0O3IrKyluW3Jd PTNEcC5wbHVjayhhcmd1bWVudHMscik7cmV0dXJuIG59LHAub2JqZWN0PTNEPQpmdW5jdGlvbihl LHQpe2lmKGU9M0Q9M0RudWxsKXJldHVybnt9O3ZhciBuPTNEe307Zm9yKHZhciByPTNEMCxpPTNE ZS5sZW5ndGg9CjtyPGk7cisrKXQ/bltlW3JdXT0zRHRbcl06bltlW3JdWzBdXT0zRGVbcl1bMV07 cmV0dXJuIG59LHAuaW5kZXhPZj0zRGZ1bmN0aT0Kb24oZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJl dHVybi0xO3ZhciByPTNEMCxpPTNEZS5sZW5ndGg7aWYobil7aWYodHlwZW9mIG4hPQo9M0QibnVt YmVyIilyZXR1cm4gcj0zRHAuc29ydGVkSW5kZXgoZSx0KSxlW3JdPTNEPTNEPTNEdD9yOi0xO3I9 M0RuPDA/TWF0aC49Cm1heCgwLGkrbik6bn1mb3IoO3I8aTtyKyspaWYoZVtyXT0zRD0zRD0zRHQp cmV0dXJuIHI7cmV0dXJuLTF9LHAubGFzdEluZGV4Tz0KZj0zRGZ1bmN0aW9uKGUsdCxuKXtpZihl PTNEPTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRGUubGVuZ3RoO3R5cGVvZiBuPTNEPTNEPQoibnVt YmVyIiYmKHI9M0RuPDA/cituKzE6TWF0aC5taW4ocixuKzEpKTt3aGlsZSgtLXI+PTNEMClpZihl W3JdPTNEPTNEPTNEdCk9CnJldHVybiByO3JldHVybi0xfSxwLnJhbmdlPTNEZnVuY3Rpb24oZSx0 LG4pe2FyZ3VtZW50cy5sZW5ndGg8PTNEMSYmKHQ9M0RlfD0KfDAsZT0zRDApLG49M0RufHwxO3Zh ciByPTNETWF0aC5tYXgoTWF0aC5jZWlsKCh0LWUpL24pLDApLGk9M0RBcnJheShyKTtmb3IoPQp2 YXIgcz0zRDA7czxyO3MrKyxlKz0zRG4paVtzXT0zRGU7cmV0dXJuIGl9O3ZhciB5PTNEZnVuY3Rp b24oKXt9O3AuYmluZD0zRGY9CnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKGgmJmUuYmluZD0zRD0z RD0zRGgpcmV0dXJuIGguYXBwbHkoZSxvLmNhbGwoYXJndW1lbj0KdHMsMSkpO2lmKCFwLmlzRnVu Y3Rpb24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1 PQpuY3Rpb24iKTtyZXR1cm4gbj0zRG8uY2FsbChhcmd1bWVudHMsMikscj0zRGZ1bmN0aW9uKCl7 aWYodGhpcyBpbnN0YW5jZW9mIHI9Cil7eS5wcm90b3R5cGU9M0RlLnByb3RvdHlwZTt2YXIgaT0z RG5ldyB5O3kucHJvdG90eXBlPTNEbnVsbDt2YXIgcz0zRGUuYXBwbD0KeShpLG4uY29uY2F0KG8u Y2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIHAuaXNPYmplY3Qocyk/czppfXJldHVybiBlLmFwcGx5 KHQsPQpuLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkpfSxyfSxwLnBhcnRpYWw9M0RmdW5jdGlv bihlKXt2YXIgdD0zRG8uY2FsbChhcmc9CnVtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIg bj0zRDAscj0zRHQuc2xpY2UoKTtmb3IodmFyIGk9M0QwLHM9M0RyLmxlbj0KZ3RoO2k8cztpKysp cltpXT0zRD0zRD0zRHAmJihyW2ldPTNEYXJndW1lbnRzW24rK10pO3doaWxlKG48YXJndW1lbnRz Lmxlbmd0PQpoKXIucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIGUuYXBwbHkodGhpcyxyKX19 LHAuYmluZEFsbD0zRGZ1bmN0aW9uKGUpe3Y9CmFyIHQsbj0zRGFyZ3VtZW50cy5sZW5ndGgscjtp ZihuPD0zRDEpdGhyb3cgbmV3IEVycm9yKCJiaW5kQWxsIG11c3QgYmUgcGFzcz0KZWQgZnVuY3Rp b24gbmFtZXMiKTtmb3IodD0zRDE7dDxuO3QrKylyPTNEYXJndW1lbnRzW3RdLGVbcl09M0RwLmJp bmQoZVtyXSxlPQopO3JldHVybiBlfSxwLm1lbW9pemU9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNE ZnVuY3Rpb24ocil7dmFyIGk9M0RuLmNhY2hlLHM9Cj0zRHQ/dC5hcHBseSh0aGlzLGFyZ3VtZW50 cyk6cjtyZXR1cm4gcC5oYXMoaSxzKXx8KGlbc109M0RlLmFwcGx5KHRoaXMsYXJndT0KbWVudHMp KSxpW3NdfTtyZXR1cm4gbi5jYWNoZT0zRHt9LG59LHAuZGVsYXk9M0RmdW5jdGlvbihlLHQpe3Zh ciBuPTNEby5jYWxsPQooYXJndW1lbnRzLDIpO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7 cmV0dXJuIGUuYXBwbHkobnVsbCxuKX0sdCl9LHAuZGU9CmZlcj0zRGZ1bmN0aW9uKGUpe3JldHVy biBwLmRlbGF5LmFwcGx5KHAsW2UsMV0uY29uY2F0KG8uY2FsbChhcmd1bWVudHMsMSkpKT0KfSxw LnRocm90dGxlPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxvPTNEbnVsbCx1PTNEMDtufHwo bj0zRHt9KTt2YXIgYT0KPTNEZnVuY3Rpb24oKXt1PTNEbi5sZWFkaW5nPTNEPTNEPTNEITE/MDpw Lm5vdygpLG89M0RudWxsLHM9M0RlLmFwcGx5KHIsaSksPQpvfHwocj0zRGk9M0RudWxsKX07cmV0 dXJuIGZ1bmN0aW9uKCl7dmFyIGY9M0RwLm5vdygpOyF1JiZuLmxlYWRpbmc9M0Q9M0Q9M0Q9CiEx JiYodT0zRGYpO3ZhciBsPTNEdC0oZi11KTtyZXR1cm4gcj0zRHRoaXMsaT0zRGFyZ3VtZW50cyxs PD0zRDB8fGw+dD8oY2xlYT0KclRpbWVvdXQobyksbz0zRG51bGwsdT0zRGYscz0zRGUuYXBwbHko cixpKSxvfHwocj0zRGk9M0RudWxsKSk6IW8mJm4udHJhaWxpPQpuZyE9M0Q9M0QhMSYmKG89M0Rz ZXRUaW1lb3V0KGEsbCkpLHN9fSxwLmRlYm91bmNlPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9 CixzLG8sdSxhPTNEZnVuY3Rpb24oKXt2YXIgZj0zRHAubm93KCktbztmPHQmJmY+MD9yPTNEc2V0 VGltZW91dChhLHQtZik6KHI9Cj0zRG51bGwsbnx8KHU9M0RlLmFwcGx5KHMsaSkscnx8KHM9M0Rp PTNEbnVsbCkpKX07cmV0dXJuIGZ1bmN0aW9uKCl7cz0zRHRoaT0KcyxpPTNEYXJndW1lbnRzLG89 M0RwLm5vdygpO3ZhciBmPTNEbiYmIXI7cmV0dXJuIHJ8fChyPTNEc2V0VGltZW91dChhLHQpKSxm PQomJih1PTNEZS5hcHBseShzLGkpLHM9M0RpPTNEbnVsbCksdX19LHAud3JhcD0zRGZ1bmN0aW9u KGUsdCl7cmV0dXJuIHAucGFydGk9CmFsKHQsZSl9LHAubmVnYXRlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodGhpcyxhcmd1bT0KZW50cyl9fSxwLmNvbXBv c2U9M0RmdW5jdGlvbigpe3ZhciBlPTNEYXJndW1lbnRzLHQ9M0RlLmxlbmd0aC0xO3JldHVybiBm dW5jPQp0aW9uKCl7dmFyIG49M0R0LHI9M0RlW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt3aGls ZShuLS0pcj0zRGVbbl0uY2FsbCh0aGk9CnMscik7cmV0dXJuIHJ9fSxwLmFmdGVyPTNEZnVuY3Rp b24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdD0KLmFwcGx5KHRoaXMs YXJndW1lbnRzKX19LHAuYmVmb3JlPTNEZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gZnVuY3Rp b24oKXtyPQpldHVybi0tZT4wP249M0R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0PTNEbnVsbCxu fX0scC5vbmNlPTNEcC5wYXJ0aWFsKHAuYmU9CmZvcmUsMikscC5rZXlzPTNEZnVuY3Rpb24oZSl7 aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuW107aWYoYylyZXR1cm4gYyhlKTt2YT0KciB0PTNEW107 Zm9yKHZhciBuIGluIGUpcC5oYXMoZSxuKSYmdC5wdXNoKG4pO3JldHVybiB0fSxwLnZhbHVlcz0z RGZ1bmN0aW9uPQooZSl7dmFyIHQ9M0RwLmtleXMoZSksbj0zRHQubGVuZ3RoLHI9M0RBcnJheShu KTtmb3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0KPTNEZVt0W2ldXTtyZXR1cm4gcn0scC5wYWly cz0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEcC5rZXlzKGUpLG49M0R0Lmxlbmd0aCxyPQo9M0RBcnJh eShuKTtmb3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0zRFt0W2ldLGVbdFtpXV1dO3JldHVybiBy fSxwLmludmVydD0KPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R7fSxuPTNEcC5rZXlzKGUpO2Zvcih2 YXIgcj0zRDAsaT0zRG4ubGVuZ3RoO3I8aTtyKyspPQp0W2VbbltyXV1dPTNEbltyXTtyZXR1cm4g dH0scC5mdW5jdGlvbnM9M0RwLm1ldGhvZHM9M0RmdW5jdGlvbihlKXt2YXIgdD0zRFs9Cl07Zm9y KHZhciBuIGluIGUpcC5pc0Z1bmN0aW9uKGVbbl0pJiZ0LnB1c2gobik7cmV0dXJuIHQuc29ydCgp fSxwLmV4dGVuZD0zRD0KZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuIGU7dmFy IHQsbjtmb3IodmFyIHI9M0QxLGk9M0Rhcmd1bWVudHMuPQpsZW5ndGg7cjxpO3IrKyl7dD0zRGFy Z3VtZW50c1tyXTtmb3IobiBpbiB0KWYuY2FsbCh0LG4pJiYoZVtuXT0zRHRbbl0pfXJldHU9CnJu IGV9LHAucGljaz0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRHt9LGk7aWYoZT0zRD0zRG51bGwp cmV0dXJuIHI7aWYocC5pcz0KRnVuY3Rpb24odCkpe3Q9M0RkKHQsbik7Zm9yKGkgaW4gZSl7dmFy IHM9M0RlW2ldO3QocyxpLGUpJiYocltpXT0zRHMpfX1lbHNlPQp7dmFyIGE9M0R1LmFwcGx5KFtd LG8uY2FsbChhcmd1bWVudHMsMSkpO2U9M0RuZXcgT2JqZWN0KGUpO2Zvcih2YXIgZj0zRDAsbD0K PTNEYS5sZW5ndGg7ZjxsO2YrKylpPTNEYVtmXSxpIGluIGUmJihyW2ldPTNEZVtpXSl9cmV0dXJu IHJ9LHAub21pdD0zRGZ1bmN0PQppb24oZSx0LG4pe2lmKHAuaXNGdW5jdGlvbih0KSl0PTNEcC5u ZWdhdGUodCk7ZWxzZXt2YXIgcj0zRHAubWFwKHUuYXBwbHkoW109CixvLmNhbGwoYXJndW1lbnRz LDEpKSxTdHJpbmcpO3Q9M0RmdW5jdGlvbihlLHQpe3JldHVybiFwLmNvbnRhaW5zKHIsdCl9fXJl dD0KdXJuIHAucGljayhlLHQsbil9LHAuZGVmYXVsdHM9M0RmdW5jdGlvbihlKXtpZighcC5pc09i amVjdChlKSlyZXR1cm4gZTtmb3IoPQp2YXIgdD0zRDEsbj0zRGFyZ3VtZW50cy5sZW5ndGg7dDxu O3QrKyl7dmFyIHI9M0Rhcmd1bWVudHNbdF07Zm9yKHZhciBpIGluIHI9CillW2ldPTNEPTNEPTNE dm9pZCAwJiYoZVtpXT0zRHJbaV0pfXJldHVybiBlfSxwLmNsb25lPTNEZnVuY3Rpb24oZSl7cmV0 dXJuID0KcC5pc09iamVjdChlKT9wLmlzQXJyYXkoZSk/ZS5zbGljZSgpOnAuZXh0ZW5kKHt9LGUp OmV9LHAudGFwPTNEZnVuY3Rpb24oZSx0PQope3JldHVybiB0KGUpLGV9O3ZhciBiPTNEZnVuY3Rp b24oZSx0LG4scil7aWYoZT0zRD0zRD0zRHQpcmV0dXJuIGUhPTNEPTNEMHw9CnwxL2U9M0Q9M0Q9 M0QxL3Q7aWYoZT0zRD0zRG51bGx8fHQ9M0Q9M0RudWxsKXJldHVybiBlPTNEPTNEPTNEdDtlIGlu c3RhbmNlbz0KZiBwJiYoZT0zRGUuX3dyYXBwZWQpLHQgaW5zdGFuY2VvZiBwJiYodD0zRHQuX3dy YXBwZWQpO3ZhciBpPTNEYS5jYWxsKGUpO2lmPQooaSE9M0Q9M0RhLmNhbGwodCkpcmV0dXJuITE7 c3dpdGNoKGkpe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3Q9CnJpbmddIjpy ZXR1cm4iIitlPTNEPTNEIiIrdDtjYXNlIltvYmplY3QgTnVtYmVyXSI6aWYoK2UhPTNEPTNEK2Up cmV0dXJuK3QhPQo9M0Q9M0QrdDtyZXR1cm4rZT0zRD0zRD0zRDA/MS8rZT0zRD0zRD0zRDEvdDor ZT0zRD0zRD0zRCt0O2Nhc2UiW29iamVjdCBEYXQ9CmVdIjpjYXNlIltvYmplY3QgQm9vbGVhbl0i OnJldHVybitlPTNEPTNEPTNEK3R9aWYodHlwZW9mIGUhPTNEIm9iamVjdCJ8fHR5cD0KZW9mIHQh PTNEIm9iamVjdCIpcmV0dXJuITE7dmFyIHM9M0RuLmxlbmd0aDt3aGlsZShzLS0paWYobltzXT0z RD0zRD0zRGUpcmV0PQp1cm4gcltzXT0zRD0zRD0zRHQ7dmFyIG89M0RlLmNvbnN0cnVjdG9yLHU9 M0R0LmNvbnN0cnVjdG9yO2lmKG8hPTNEPTNEdSYmImM9Cm9uc3RydWN0b3IiaW4gZSYmImNvbnN0 cnVjdG9yImluIHQmJiEocC5pc0Z1bmN0aW9uKG8pJiZvIGluc3RhbmNlb2YgbyYmcC5pcz0KRnVu Y3Rpb24odSkmJnUgaW5zdGFuY2VvZiB1KSlyZXR1cm4hMTtuLnB1c2goZSksci5wdXNoKHQpO3Zh ciBmLGw7aWYoaT0zRD0KPTNEPTNEIltvYmplY3QgQXJyYXldIil7Zj0zRGUubGVuZ3RoLGw9M0Rm PTNEPTNEPTNEdC5sZW5ndGg7aWYobCl3aGlsZShmLS0pPQppZighKGw9M0RiKGVbZl0sdFtmXSxu LHIpKSlicmVha31lbHNle3ZhciBjPTNEcC5rZXlzKGUpLGg7Zj0zRGMubGVuZ3RoLGw9M0Q9CnAu a2V5cyh0KS5sZW5ndGg9M0Q9M0Q9M0RmO2lmKGwpd2hpbGUoZi0tKXtoPTNEY1tmXTtpZighKGw9 M0RwLmhhcyh0LGgpJiZiKD0KZVtoXSx0W2hdLG4scikpKWJyZWFrfX1yZXR1cm4gbi5wb3AoKSxy LnBvcCgpLGx9O3AuaXNFcXVhbD0zRGZ1bmN0aW9uKGUsdCl7PQpyZXR1cm4gYihlLHQsW10sW10p fSxwLmlzRW1wdHk9M0RmdW5jdGlvbihlKXtpZihlPTNEPTNEbnVsbClyZXR1cm4hMDtpZihwLmk9 CnNBcnJheShlKXx8cC5pc1N0cmluZyhlKXx8cC5pc0FyZ3VtZW50cyhlKSlyZXR1cm4gZS5sZW5n dGg9M0Q9M0Q9M0QwO2Zvcih2YT0KciB0IGluIGUpaWYocC5oYXMoZSx0KSlyZXR1cm4hMTtyZXR1 cm4hMH0scC5pc0VsZW1lbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4hPQohZSYmZS5ub2RlVHlwZT0z RD0zRD0zRDF9LHAuaXNBcnJheT0zRGx8fGZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwoZSk9M0Q9 M0Q9Cj0zRCJbb2JqZWN0IEFycmF5XSJ9LHAuaXNPYmplY3Q9M0RmdW5jdGlvbihlKXt2YXIgdD0z RHR5cGVvZiBlO3JldHVybiB0PTNEPQo9M0Q9M0QiZnVuY3Rpb24ifHx0PTNEPTNEPTNEIm9iamVj dCImJiEhZX0scC5lYWNoKFsiQXJndW1lbnRzIiwiRnVuY3Rpb24iLCI9ClN0cmluZyIsIk51bWJl ciIsIkRhdGUiLCJSZWdFeHAiXSxmdW5jdGlvbihlKXtwWyJpcyIrZV09M0RmdW5jdGlvbih0KXty ZXR1cj0KbiBhLmNhbGwodCk9M0Q9M0Q9M0QiW29iamVjdCAiK2UrIl0ifX0pLHAuaXNBcmd1bWVu dHMoYXJndW1lbnRzKXx8KHAuaXNBcmd1PQptZW50cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmhh cyhlLCJjYWxsZWUiKX0pLHR5cGVvZiAvLi8hPTNEImZ1bmN0aW9uIiYmKHA9Ci5pc0Z1bmN0aW9u PTNEZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uInx8ITF9KSxwLmlz RmluaXRlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUoZSkmJiFpc05hTihwYXJzZUZs b2F0KGUpKX0scC5pc05hTj0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIHAuaXNOdW1iZXIoZSkmJmUh PTNEPTNEK2V9LHAuaXNCb29sZWFuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cj0zRD0zRD0zRCEw fHxlPTNEPTNEPTNEITF8fGEuY2FsbChlKT0zRD0zRD0zRCJbb2JqZWN0IEJvb2xlYW5dIn0scC5p c051bGw9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEPTNEPTNEbnVsbH0scC5pc1VuZGVmaW5l ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPQo9M0Q9M0Q9M0R2b2lkIDB9LHAuaGFzPTNEZnVuY3Rp b24oZSx0KXtyZXR1cm4gZSE9M0RudWxsJiZmLmNhbGwoZSx0KX0scC5ub0M9Cm9uZmxpY3Q9M0Rm dW5jdGlvbigpe3JldHVybiBlLl89M0R0LHRoaXN9LHAuaWRlbnRpdHk9M0RmdW5jdGlvbihlKXty ZXR1cm4gZT0KfSxwLmNvbnN0YW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0 dXJuIGV9fSxwLm5vb3A9M0RmdW5jdGlvbigpPQp7fSxwLnByb3BlcnR5PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfX0scC5tYXRjaGVzPTNEZnU9Cm5jdGlvbihl KXt2YXIgdD0zRHAucGFpcnMoZSksbj0zRHQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtpZihl PTNEPTNEbnVsbD0KKXJldHVybiFuO2U9M0RuZXcgT2JqZWN0KGUpO2Zvcih2YXIgcj0zRDA7cjxu O3IrKyl7dmFyIGk9M0R0W3JdLHM9M0RpWzBdO2lmPQooaVsxXSE9M0Q9M0RlW3NdfHwhKHMgaW4g ZSkpcmV0dXJuITF9cmV0dXJuITB9fSxwLnRpbWVzPTNEZnVuY3Rpb24oZSx0LG4pe3Y9CmFyIHI9 M0RBcnJheShNYXRoLm1heCgwLGUpKTt0PTNEZCh0LG4sMSk7Zm9yKHZhciBpPTNEMDtpPGU7aSsr KXJbaV09M0R0KGkpOz0KcmV0dXJuIHJ9LHAucmFuZG9tPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4g dD0zRD0zRG51bGwmJih0PTNEZSxlPTNEMCksZStNYXRoPQouZmxvb3IoTWF0aC5yYW5kb20oKSoo dC1lKzEpKX0scC5ub3c9M0REYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGU9Ciku Z2V0VGltZSgpfTt2YXIgdz0zRHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyIn OiImcXVvdDsiLCInIjoiJj0KI3gyNzsiLCJgIjoiJiN4NjA7In0sRT0zRHAuaW52ZXJ0KHcpLFM9 M0RmdW5jdGlvbihlKXt2YXIgdD0zRGZ1bmN0aW9uKHQpe3JlPQp0dXJuIGVbdF19LG49M0QiKD86 IitwLmtleXMoZSkuam9pbigifCIpKyIpIixyPTNEUmVnRXhwKG4pLGk9M0RSZWdFeHAobiwiZyI9 Cik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEZT0zRD0zRG51bGw/IiI6IiIrZSxyLnRl c3QoZSk/ZS5yZXBsYWNlKGksdD0KKTplfX07cC5lc2NhcGU9M0RTKHcpLHAudW5lc2NhcGU9M0RT KEUpLHAucmVzdWx0PTNEZnVuY3Rpb24oZSx0KXtpZihlPTNEPTNEPQpudWxsKXJldHVybiB2b2lk IDA7dmFyIG49M0RlW3RdO3JldHVybiBwLmlzRnVuY3Rpb24obik/ZVt0XSgpOm59O3ZhciB4PTNE MDs9CnAudW5pcXVlSWQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRCsreCsiIjtyZXR1cm4gZT9lK3Q6 dH0scC50ZW1wbGF0ZVNldHRpbmdzPQo9M0R7ZXZhbHVhdGU6LzwlKFtcc1xTXSs/KSU+L2csaW50 ZXJwb2xhdGU6LzwlPTNEKFtcc1xTXSs/KSU+L2csZXNjYXBlOi88JS09CihbXHNcU10rPyklPi9n fTt2YXIgVD0zRC8oLileLyxOPTNEeyInIjoiJyIsIlxcIjoiXFwiLCJcciI6InIiLCJcbiI6Im4i LCJcdT0KMjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxDPTNEL1xcfCd8XHJ8XG58XHUy MDI4fFx1MjAyOS9nLGs9M0RmdW5jdGlvPQpuKGUpe3JldHVybiJcXCIrTltlXX07cC50ZW1wbGF0 ZT0zRGZ1bmN0aW9uKGUsdCxuKXshdCYmbiYmKHQ9M0RuKSx0PTNEcC5kZWY9CmF1bHRzKHt9LHQs cC50ZW1wbGF0ZVNldHRpbmdzKTt2YXIgcj0zRFJlZ0V4cChbKHQuZXNjYXBlfHxUKS5zb3VyY2Us KHQuaW50ZT0KcnBvbGF0ZXx8VCkuc291cmNlLCh0LmV2YWx1YXRlfHxUKS5zb3VyY2VdLmpvaW4o InwiKSsifCQiLCJnIiksaT0zRDAscz0zRCJfPQpfcCs9M0QnIjtlLnJlcGxhY2UocixmdW5jdGlv bih0LG4scixvLHUpe3JldHVybiBzKz0zRGUuc2xpY2UoaSx1KS5yZXBsYWNlKEM9CixrKSxpPTNE dSt0Lmxlbmd0aCxuP3MrPTNEIicrXG4oKF9fdD0zRCgiK24rIikpPTNEPTNEbnVsbD8nJzpfLmVz Y2FwZShfX3QpKT0KK1xuJyI6cj9zKz0zRCInK1xuKChfX3Q9M0QoIityKyIpKT0zRD0zRG51bGw/ Jyc6X190KStcbiciOm8mJihzKz0zRCInO1xuIitvPQorIlxuX19wKz0zRCciKSx0fSkscys9M0Qi JztcbiIsdC52YXJpYWJsZXx8KHM9M0Qid2l0aChvYmp8fHt9KXtcbiIrcysifVxuIik9CixzPTNE InZhciBfX3QsX19wPTNEJycsX19qPTNEQXJyYXkucHJvdG90eXBlLmpvaW4scHJpbnQ9M0RmdW5j dGlvbigpe19fcCs9Cj0zRF9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIrcysicmV0dXJuIF9f cDtcbiI7dHJ5e3ZhciBvPTNEbmV3IEZ1bmN0aW9uKD0KdC52YXJpYWJsZXx8Im9iaiIsIl8iLHMp fWNhdGNoKHUpe3Rocm93IHUuc291cmNlPTNEcyx1fXZhciBhPTNEZnVuY3Rpb24oZSl7PQpyZXR1 cm4gby5jYWxsKHRoaXMsZSxwKX0sZj0zRHQudmFyaWFibGV8fCJvYmoiO3JldHVybiBhLnNvdXJj ZT0zRCJmdW5jdGlvbig9CiIrZisiKXtcbiIrcysifSIsYX0scC5jaGFpbj0zRGZ1bmN0aW9uKGUp e3ZhciB0PTNEcChlKTtyZXR1cm4gdC5fY2hhaW49M0QhMD0KLHR9O3ZhciBMPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIHRoaXMuX2NoYWluP3AoZSkuY2hhaW4oKTplfTtwLm1peGluPTNEZnVuY3RpPQpv bihlKXtwLmVhY2gocC5mdW5jdGlvbnMoZSksZnVuY3Rpb24odCl7dmFyIG49M0RwW3RdPTNEZVt0 XTtwLnByb3RvdHlwZVt0XT0KPTNEZnVuY3Rpb24oKXt2YXIgZT0zRFt0aGlzLl93cmFwcGVkXTty ZXR1cm4gcy5hcHBseShlLGFyZ3VtZW50cyksTC5jYWxsKHRoPQppcyxuLmFwcGx5KHAsZSkpfX0p fSxwLm1peGluKHApLHAuZWFjaChbInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzb3I9 CnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RuW2VdO3AucHJvdG90 eXBlW2VdPTNEZnVuY3Rpb24oKT0Ke3ZhciBuPTNEdGhpcy5fd3JhcHBlZDtyZXR1cm4gdC5hcHBs eShuLGFyZ3VtZW50cyksKGU9M0Q9M0Q9M0Qic2hpZnQifHxlPTNEPQo9M0Q9M0Qic3BsaWNlIikm Jm4ubGVuZ3RoPTNEPTNEPTNEMCYmZGVsZXRlIG5bMF0sTC5jYWxsKHRoaXMsbil9fSkscC5lYWNo KFs9CiJjb25jYXQiLCJqb2luIiwic2xpY2UiXSxmdW5jdGlvbihlKXt2YXIgdD0zRG5bZV07cC5w cm90b3R5cGVbZV09M0RmdW5jdGlvbj0KKCl7cmV0dXJuIEwuY2FsbCh0aGlzLHQuYXBwbHkodGhp cy5fd3JhcHBlZCxhcmd1bWVudHMpKX19KSxwLnByb3RvdHlwZS52YWx1PQplPTNEZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5fd3JhcHBlZH0sdHlwZW9mIGRlZmluZT0zRD0zRCJmdW5jdGlvbiImJmRl ZmluZS49CmFtZCYmZGVmaW5lKCJ1bmRlcnNjb3JlIixbXSxmdW5jdGlvbigpe3JldHVybiBwfSl9 LmNhbGwodGhpcyksZGVmaW5lKCJsaWJzLz0KdW5kZXJzY29yZSIsZnVuY3Rpb24oZSl7cmV0dXJu IGZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdHx8ZS5ffX0odGhpcykpLGRlPQpmaW5lKCJ1dGls cy91dGlscyIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3Jl dHVybiAkKCI9CjxkaXYvPiIpLnRleHQoZSkuaHRtbCgpfWZ1bmN0aW9uIG4oZSl7ZSBpbnN0YW5j ZW9mIEFycmF5fHwoZT0zRFtlXSk7Zm9yKHZhcj0KIHQgaW4gZSlpZihbIk5vbmUiLG51bGwsIm51 bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhPZihlW3RdKT4tMSlyZXR1PQpybiExO3Jl dHVybiEwfWZ1bmN0aW9uIHIoZSl7dmFyIGU9M0RlLnRvU3RyaW5nKCk7aWYoZSl7ZT0zRGUucmVw bGFjZSgvLC9nLCI9CiwgIik7dmFyIHQ9M0RlLmxhc3RJbmRleE9mKCIsICIpO3JldHVybiB0IT0z RC0xJiYoZT0zRGUuc3Vic3RyKDAsdCkrIiBvciAiKz0KZS5zdWJzdHIodCsxKSksZX1yZXR1cm4i In1mdW5jdGlvbiBpKGUpe3RvcC5fX3V0aWxzX19nZXRfXz0zRHRvcC5fX3V0aWxzX19nPQpldF9f fHx7fSxlLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bZS51cmxdPyhlLnN1Y2Nlc3MmJmUuc3Vj Y2Vzcyh0b3AuX191dGk9CmxzX19nZXRfX1tlLnVybF0pLGNvbnNvbGUuZGVidWcoInV0aWxzLmpz OjpnZXQoKSAtIEZldGNoaW5nIGZyb20gY2FjaGUgWyIrZT0KLnVybCsiXS4iKSk6cyh7dXJsOmUu dXJsLGRhdGE6ZS5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dG9wLl9fdXRpbHNfX2dldF9fPQpb ZS51cmxdPTNEdCxlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0sZXJyb3I6ZnVuY3Rpb24odCl7ZS5l cnJvciYmZS5lcnJvcih0KX09Cn0pfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9M0R7Y29udGVudFR5cGU6 ImFwcGxpY2F0aW9uL2pzb24iLHR5cGU6ZS50eXBlfHwiR0VUIj0KLGRhdGE6ZS5kYXRhfHx7fSx1 cmw6ZS51cmx9O3QudHlwZT0zRD0zRCJHRVQifHx0LnR5cGU9M0Q9M0QiREVMRVRFIj8odC51cmwu PQppbmRleE9mKCI/Iik9M0Q9M0QtMT90LnVybCs9M0QiPyI6dC51cmwrPTNEIiYiLHQudXJsPTNE dC51cmwrJC5wYXJhbSh0LmRhdGE9CiksdC5kYXRhPTNEbnVsbCk6KHQuZGF0YVR5cGU9M0QianNv biIsdC51cmw9M0R0LnVybCx0LmRhdGE9M0RKU09OLnN0cmluZ2lmeT0KKHQuZGF0YSkpLCQuYWph eCh0KS5kb25lKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PTNEPTNEInN0cmluZyIpdHJ5e3Q9M0R0 LnJlPQpwbGFjZSgiSW5maW5pdHksIiwnIkluZmluaXR5IiwnKSx0PTNEalF1ZXJ5LnBhcnNlSlNP Tih0KX1jYXRjaChuKXtjb25zb2xlLmQ9CmVidWcobil9ZS5zdWNjZXNzJiZlLnN1Y2Nlc3ModCl9 KS5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBuPTNEbnVsbDt0cnl7bj0zRGpRdT0KZXJ5LnBhcnNlSlNP Tih0LnJlc3BvbnNlVGV4dCl9Y2F0Y2gocil7bj0zRHQucmVzcG9uc2VUZXh0fWUuZXJyb3ImJmUu ZXJyb3IoPQpuLHQpfSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPTNEJCgnPGRpdiBjbGFzcz0zRCIn K2UrJyI+PC9kaXY+Jyk7bi5hcHBlbmRUbyg9CiI6ZXEoMCkiKTt2YXIgcj0zRG4uY3NzKHQpO3Jl dHVybiBuLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gdShlKXskKCdsaW5rW2hyZWZePQo9M0QiJytlKyci XScpLmxlbmd0aHx8JCgnPGxpbmsgaHJlZj0zRCInK2dhbGF4eV9jb25maWcucm9vdCtlKyciIHJl bD0zRCJzdHk9Cmxlc2hlZXQiPicpLmFwcGVuZFRvKCJoZWFkIil9ZnVuY3Rpb24gYSh0LG4pe3Jl dHVybiB0P2UuZGVmYXVsdHModCxuKTpufWZ1bj0KY3Rpb24gZihlLHQpe3ZhciBuPTNEIiI7aWYo ZT49M0QxZTExKWUvPTNEMWUxMSxuPTNEIlRCIjtlbHNlIGlmKGU+PTNEMWU4KWUvPQo9M0QxZTgs bj0zRCJHQiI7ZWxzZSBpZihlPj0zRDFlNSllLz0zRDFlNSxuPTNEIk1CIjtlbHNlIGlmKGU+PTNE MTAwKWUvPTNEMTA9CjAsbj0zRCJLQiI7ZWxzZXtpZighKGU+MCkpcmV0dXJuIjxzdHJvbmc+LTwv c3Ryb25nPiI7ZSo9M0QxMCxuPTNEImIifXZhciByPQo9M0RNYXRoLnJvdW5kKGUpLzEwO3JldHVy biB0P3IrIiAiK246IjxzdHJvbmc+IityKyI8L3N0cm9uZz4gIitufWZ1bmN0aW9uIGw9Cigpe3Jl dHVybiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1mdW5jdGlv biBjKGUpe3ZhciB0PQo9M0QkKCI8cD48L3A+Iik7cmV0dXJuIHQuYXBwZW5kKGUpLHR9ZnVuY3Rp b24gaCgpe3ZhciBlPTNEbmV3IERhdGUsdD0zRChlLmc9CmV0SG91cnMoKTwxMD8iMCI6IiIpK2Uu Z2V0SG91cnMoKSxuPTNEKGUuZ2V0TWludXRlcygpPDEwPyIwIjoiIikrZS5nZXRNaW51dD0KZXMo KSxyPTNEZS5nZXREYXRlKCkrIi8iKyhlLmdldE1vbnRoKCkrMSkrIi8iK2UuZ2V0RnVsbFllYXIo KSsiLCAiK3QrIjoiK247PQpyZXR1cm4gcn1yZXR1cm57Y3NzTG9hZEZpbGU6dSxjc3NHZXRBdHRy aWJ1dGU6byxnZXQ6aSxtZXJnZTphLGJ5dGVzVG9TdHJpbmc9CjpmLHV1aWQ6bCx0aW1lOmgsd3Jh cDpjLHJlcXVlc3Q6cyxzYW5pdGl6ZTp0LHRleHRpZnk6cix2YWxpZGF0ZTpufX0pLGRlZmluZT0K KCJtdmMvdWkvdWktcG9ydGxldCIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNE QmFja2JvbmUuVmlldy5leHRlPQpuZCh7dmlzaWJsZTohMSxvcHRpb25zRGVmYXVsdDp7dGl0bGU6 IiIsaWNvbjoiIixidXR0b25zOm51bGwsYm9keTpudWxsLHNjcm89CmxsYWJsZTohMCxub3BhZGRp bmc6ITEsb3BlcmF0aW9uczpudWxsLHBsYWNlbWVudDoiYm90dG9tIixjbHM6InVpLXBvcnRsZXQi LD0Kb3BlcmF0aW9uc19mbHQ6InJpZ2h0In0sJHRpdGxlOm51bGwsJGNvbnRlbnQ6bnVsbCwkYnV0 dG9uczpudWxsLCRvcGVyYXRpb25zPQo6bnVsbCwkaGVhZGVyOm51bGwsaW5pdGlhbGl6ZTpmdW5j dGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHQ9CmlvbnNEZWZhdWx0KSx0 aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy4kY29udGVu dD0zRD0KdGhpcy4kZWwuZmluZCgiLmNvbnRlbnQiKSx0aGlzLiR0aXRsZT0zRHRoaXMuJGVsLmZp bmQoIi5wb3J0bGV0LXRpdGxlLXRleHQiPQopLHRoaXMuJGhlYWRlcj0zRHRoaXMuJGVsLmZpbmQo Ii5wb3J0bGV0LWhlYWRlciIpO3ZhciBuPTNEdGhpcy4kZWwuZmluZCgiLnA9Cm9ydGxldC1jb250 ZW50Iik7dGhpcy5vcHRpb25zLnNjcm9sbGFibGU/bi5hZGRDbGFzcygic2Nyb2xsIik6dGhpcy5v cHRpb25zLj0KdGl0bGU/bi5hZGRDbGFzcygibm8tc2Nyb2xsIik6bi5hZGRDbGFzcygibm8tc2Ny b2xsLW5vLXRpdGxlIiksdGhpcy5vcHRpb25zPQoubm9wYWRkaW5nJiYobi5jc3MoInBhZGRpbmci LCIwcHgiKSx0aGlzLiRjb250ZW50LmNzcygicGFkZGluZyIsIjBweCIpKSx0aGk9CnMuJGJ1dHRv bnM9M0QkKHRoaXMuZWwpLmZpbmQoIi5idXR0b25zIik7aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMp e3ZhciByPTNEdD0KaGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0dG9ucyxmdW5jdGlvbihlLHQp e3QuJGVsLnByb3AoImlkIixlKSxyLiRidXR0b25zPQouYXBwZW5kKHQuJGVsKX0pfWVsc2UgdGhp cy4kYnV0dG9ucy5yZW1vdmUoKTt0aGlzLiRvcGVyYXRpb25zPTNEJCh0aGlzLmVsKS49CmZpbmQo Ii5vcGVyYXRpb25zIik7aWYodGhpcy5vcHRpb25zLm9wZXJhdGlvbnMpe3ZhciByPTNEdGhpczsk LmVhY2godGhpcy5vcD0KdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvbihlLHQpe3QuJGVsLnByb3Ao ImlkIixlKSxyLiRvcGVyYXRpb25zLmFwcGVuZCh0LiRlPQpsKX0pfXRoaXMub3B0aW9ucy5ib2R5 JiZ0aGlzLmFwcGVuZCh0aGlzLm9wdGlvbnMuYm9keSl9LGFwcGVuZDpmdW5jdGlvbih0LG49Cil7 bj90aGlzLiRjb250ZW50LmFwcGVuZCh0KTp0aGlzLiRjb250ZW50LmFwcGVuZChlLndyYXAodCkp fSxjb250ZW50OmZ1bmN0aT0Kb24oKXtyZXR1cm4gdGhpcy4kY29udGVudH0sc2hvdzpmdW5jdGlv bigpe3RoaXMuJGVsLmZhZGVJbigiZmFzdCIpLHRoaXMudmlzPQppYmxlPTNEITB9LGhpZGU6ZnVu Y3Rpb24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITF9LGVuYWI9 CmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrZSkucHJvcCgiZGlz YWJsZWQiLCExKX0sZGlzYWJsZT0KQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuJGJ1dHRvbnMuZmlu ZCgiIyIrZSkucHJvcCgiZGlzYWJsZWQiLCEwKX0saGlkZU9wZXJhPQp0aW9uOmZ1bmN0aW9uKGUp e3RoaXMuJG9wZXJhdGlvbnMuZmluZCgiIyIrZSkuaGlkZSgpfSxzaG93T3BlcmF0aW9uOmZ1bmN0 aW89Cm4oZSl7dGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitlKS5zaG93KCl9LHNldE9wZXJhdGlv bjpmdW5jdGlvbihlLHQpe3ZhciBuPQo9M0R0aGlzLiRvcGVyYXRpb25zLmZpbmQoIiMiK2UpO24u b2ZmKCJjbGljayIpLG4ub24oImNsaWNrIix0KX0sdGl0bGU6ZnVuY3Q9CmlvbihlKXt2YXIgdD0z RHRoaXMuJHRpdGxlO3JldHVybiBlJiZ0Lmh0bWwoZSksdC5odG1sKCl9LF90ZW1wbGF0ZTpmdW5j dGlvbj0KKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEIicrZS5jbHMr JyI+JztyZXR1cm4gZS50aXRsZSYmKHQrPQo9M0QnPGRpdiBjbGFzcz0zRCJwb3J0bGV0LWhlYWRl ciI+PGRpdiBjbGFzcz0zRCJvcGVyYXRpb25zIiBzdHlsZT0zRCJmbG9hdDo9CiAnK2Uub3BlcmF0 aW9uc19mbHQrJzsiPjwvZGl2PicrJzxkaXYgY2xhc3M9M0QicG9ydGxldC10aXRsZSI+JyxlLmlj b24mJih0Kz0KPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyI+Jm5ic3A7PC9pPicp LHQrPTNEJzxzcGFuIGNsYXNzPTNEInBvcnRsPQpldC10aXRsZS10ZXh0Ij4nK2UudGl0bGUrIjwv c3Bhbj4iKyI8L2Rpdj4iKyI8L2Rpdj4iKSx0Kz0zRCc8ZGl2IGNsYXNzPTNEInA9Cm9ydGxldC1j b250ZW50Ij4nLGUucGxhY2VtZW50PTNEPTNEInRvcCImJih0Kz0zRCc8ZGl2IGNsYXNzPTNEImJ1 dHRvbnMiPjwvZD0KaXY+JyksdCs9M0QnPGRpdiBjbGFzcz0zRCJjb250ZW50Ij48L2Rpdj4nLGUu cGxhY2VtZW50PTNEPTNEImJvdHRvbSImJih0Kz0KPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+ PC9kaXY+JyksdCs9M0QiPC9kaXY+PC9kaXY+Iix0fX0pO3JldHVybntWaWV3OnR9PQp9KSxkZWZp bmUoIm12Yy91aS91aS1zZWxlY3QtZGVmYXVsdCIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUp e3ZhciB0PTNEQmE9CmNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOiIiLGNs czoiIixlcnJvcl90ZXh0OiJObyBkYXRhIGF2YWlsYT0KYmxlIix2aXNpYmxlOiEwLHdhaXQ6ITEs bXVsdGlwbGU6ITEsc2VhcmNoYWJsZTohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0PQpoaXMu b3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQo dGhpcy5fdGVtcGxhdGU9Cih0aGlzLm9wdGlvbnMpKSx0aGlzLiRzZWxlY3Q9M0R0aGlzLiRlbC5m aW5kKCIuc2VsZWN0IiksdGhpcy4kaWNvbj0zRHRoaXMuJD0KZWwuZmluZCgiLmljb24iKSx0aGlz LiRidXR0b249M0R0aGlzLiRlbC5maW5kKCIuYnV0dG9uIiksdGhpcy5vcHRpb25zLm11bHRpPQpw bGU/KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWx0aXBsZSIsITApLHRoaXMuJHNlbGVjdC5hZGRDbGFz cygidWktc2VsZWN0LW11bHQ9CmlwbGUiKSx0aGlzLiRpY29uLnJlbW92ZSgpKTp0aGlzLiRlbC5h ZGRDbGFzcygidWktc2VsZWN0IiksdGhpcy51cGRhdGUodGhpcz0KLm9wdGlvbnMuZGF0YSksdGhp cy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0aGlzLm9wdGlvbnMu PQp2YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuaGlkZSgpLHRoaXMub3B0aW9ucy53 YWl0P3RoaXMud2FpdCgpOnRoaXM9Ci5zaG93KCk7dmFyIG49M0R0aGlzO3RoaXMuJHNlbGVjdC5v bigiY2hhbmdlIixmdW5jdGlvbigpe24uX2NoYW5nZSgpfSksdGhpcz0KLm9uKCJjaGFuZ2UiLGZ1 bmN0aW9uKCl7bi5fY2hhbmdlKCl9KX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNE dW5kPQplZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGUpLHRoaXMuJHNlbGVjdC5zZWxlY3QyJiZ0 aGlzLiRzZWxlY3Quc2VsZWN0MigidmE9CmwiLGUpKSx0aGlzLiRzZWxlY3QudmFsKCl9LGZpcnN0 OmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLiRzZWxlY3QuZmluZCgib3B0aT0Kb24iKTtyZXR1cm4g ZS5sZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4g ZS52YWxpPQpkYXRlKHRoaXMudmFsdWUoKSl9LHRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4k c2VsZWN0LmZpbmQoIm9wdGlvbjpzZWxlY3Q9CmVkIikudGV4dCgpfSxzaG93OmZ1bmN0aW9uKCl7 dGhpcy51bndhaXQoKSx0aGlzLiRzZWxlY3Quc2hvdygpLHRoaXMuJGVsLnNobz0KdygpfSxoaWRl OmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSx3YWl0OmZ1bmN0aW9uKCl7dGhpcy4kaWNvbi5y ZW1vdmVDbGFzPQpzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmEgZmEtc3Bpbm5lciBmYS1zcGlu Iil9LHVud2FpdDpmdW5jdGlvbigpe3RoaXMuJGk9CmNvbi5yZW1vdmVDbGFzcygpLHRoaXMuJGlj b24uYWRkQ2xhc3MoImZhIGZhLWNhcmV0LWRvd24iKX0sZGlzYWJsZWQ6ZnVuY3Rpbz0Kbigpe3Jl dHVybiB0aGlzLiRzZWxlY3QuaXMoIjpkaXNhYmxlZCIpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlz LiRzZWxlY3QucHJvPQpwKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy4k c2VsZWN0LnByb3AoImRpc2FibGVkIiwhMCl9LGFkZDo9CmZ1bmN0aW9uKGUpe3RoaXMuJHNlbGVj dC5hcHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb24oZSkpLHRoaXMuX3JlZnJlc2goKX0sZD0KZWw6 ZnVuY3Rpb24oZSl7dGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvblt2YWx1ZT0zRCIrZSsiXSIpLnJl bW92ZSgpLHRoaXMuJHNlPQpsZWN0LnRyaWdnZXIoImNoYW5nZSIpLHRoaXMuX3JlZnJlc2goKX0s dXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy4kc2U9CmxlY3QudmFsKCk7dGhpcy4kc2Vs ZWN0LmZpbmQoIm9wdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgbiBpbiBlKXRoaXMuJHNlbGVjdD0K LmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihlW25dKSk7dGhpcy5fcmVmcmVzaCgpLHRoaXMu JHNlbGVjdC52YWwodCksdGhpPQpzLiRzZWxlY3QudmFsKCl8fHRoaXMuJHNlbGVjdC52YWwodGhp cy5maXJzdCgpKSx0aGlzLm9wdGlvbnMuc2VhcmNoYWJsZSYmKHQ9Cmhpcy4kYnV0dG9uLmhpZGUo KSx0aGlzLiRzZWxlY3Quc2VsZWN0MigiZGVzdHJveSIpLHRoaXMuJHNlbGVjdC5zZWxlY3QyKCkp fT0KLHNldE9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5vbmNoYW5nZT0zRGV9LGV4 aXN0czpmdW5jdGlvbihlKXtyZXR1PQpybiB0aGlzLiRzZWxlY3QuZmluZCgnb3B0aW9uW3ZhbHVl PTNEIicrZSsnIl0nKS5sZW5ndGg+MH0sX2NoYW5nZTpmdW5jdGlvbig9Cil7dGhpcy5vcHRpb25z Lm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy4kc2VsZWN0LnZhbCgpKX0sX3Jl ZnJlcz0KaDpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5maW5kKCJvcHRpb25bdmFsdWU9M0RudWxs XSIpLnJlbW92ZSgpO3ZhciBlPTNEdGhpPQpzLiRzZWxlY3QuZmluZCgib3B0aW9uIikubGVuZ3Ro O2U9M0Q9M0QwPyh0aGlzLmRpc2FibGUoKSx0aGlzLiRzZWxlY3QuYXBwZW49CmQodGhpcy5fdGVt cGxhdGVPcHRpb24oe3ZhbHVlOiJudWxsIixsYWJlbDp0aGlzLm9wdGlvbnMuZXJyb3JfdGV4dH0p KSk6dGhpcz0KLmVuYWJsZSgpfSxfdGVtcGxhdGVPcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuJzxv cHRpb24gdmFsdWU9M0QiJytlLnZhbHVlKyciPQo+JytlLmxhYmVsKyI8L29wdGlvbj4ifSxfdGVt cGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgaWQ9M0QiJytlLmlkKyciPic9CisnPHNlbGVj dCBpZD0zRCJzZWxlY3QiIGNsYXNzPTNEInNlbGVjdCAnK2UuY2xzKyIgIitlLmlkKyciPjwvc2Vs ZWN0PicrJzxkaT0KdiBjbGFzcz0zRCJidXR0b24iPicrJzxpIGNsYXNzPTNEImljb24iLz4nKyI8 L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3PQo6dH19KSxkZWZpbmUoIm12Yy91aS91aS1z bGlkZXIiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib249CmUuVmll dy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OnttaW46bnVsbCxtYXg6bnVsbCxzdGVwOm51bGwscHJl Y2lzZTohMSxzcGxpdD0KOjFlNH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj0zRHRoaXM7 dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0PQppb25zRGVmYXVsdCksdGhpcy5zZXRF bGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRoaXMudXNlc2xpZGVyPQo9M0R0 aGlzLm9wdGlvbnMubWF4IT0zRD0zRG51bGwmJnRoaXMub3B0aW9ucy5taW4hPTNEPTNEbnVsbCYm dGhpcy5vcHRpb25zLm09CmF4PnRoaXMub3B0aW9ucy5taW4sdGhpcy5vcHRpb25zLnN0ZXA9M0Q9 M0Q9M0RudWxsJiYodGhpcy5vcHRpb25zLnN0ZXA9M0QxLD0KdGhpcy5vcHRpb25zLnByZWNpc2Um JnRoaXMudXNlc2xpZGVyJiYodGhpcy5vcHRpb25zLnN0ZXA9M0QodGhpcy5vcHRpb25zLm1hPQp4 LXRoaXMub3B0aW9ucy5taW4pL3RoaXMub3B0aW9ucy5zcGxpdCkpLHRoaXMudXNlc2xpZGVyPyh0 aGlzLiRzbGlkZXI9M0R0aGk9CnMuJGVsLmZpbmQoIiNzbGlkZXIiKSx0aGlzLiRzbGlkZXIuc2xp ZGVyKHRoaXMub3B0aW9ucyksdGhpcy4kc2xpZGVyLm9uKCJzbD0KaWRlIixmdW5jdGlvbihlLHQp e24udmFsdWUodC52YWx1ZSl9KSk6dGhpcy4kZWwuZmluZCgiLnVpLWZvcm0tc2xpZGVyLXRleHQi PQopLmNzcygid2lkdGgiLCIxMDAlIiksdGhpcy4kdGV4dD0zRHRoaXMuJGVsLmZpbmQoIiN0ZXh0 IiksdGhpcy5vcHRpb25zLnZhbHU9CmUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMu b3B0aW9ucy52YWx1ZSksdGhpcy4kdGV4dC5vbigiY2hhbmdlIixmdT0KbmN0aW9uKCl7bi52YWx1 ZSgkKHRoaXMpLnZhbCgpKX0pO3ZhciByPTNEW107dGhpcy4kdGV4dC5vbigia2V5dXAiLGZ1bmN0 aW9uPQooZSl7cltlLndoaWNoXT0zRCExfSksdGhpcy4kdGV4dC5vbigia2V5ZG93biIsZnVuY3Rp b24oZSl7dmFyIHQ9M0RlLndoaWNoO3I9Clt0XT0zRCEwLHQ9M0Q9M0Q4fHx0PTNEPTNEOXx8dD0z RD0zRDEzfHx0PTNEPTNEMzd8fHQ9M0Q9M0QzOXx8dD49M0Q0OCYmdDw9Cj0zRDU3fHx0PTNEPTNE MTkwJiYkKHRoaXMpLnZhbCgpLmluZGV4T2YoIi4iKT0zRD0zRC0xJiZuLm9wdGlvbnMucHJlY2lz ZXx8dD0KPTNEPTNEMTg5JiYkKHRoaXMpLnZhbCgpLmluZGV4T2YoIi0iKT0zRD0zRC0xfHxyWzkx XXx8clsxN118fGV2ZW50LnByZXZlbnREPQplZmF1bHQoKX0pfSx2YWx1ZTpmdW5jdGlvbihlKXty ZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJihpc05hTihlKSYmKGU9M0QwKSw9CnRoaXMub3B0aW9u cy5tYXghPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1pbihlLHRoaXMub3B0aW9ucy5tYXgpKSx0aGlz Lm9wdGlvbj0Kcy5taW4hPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1heChlLHRoaXMub3B0aW9ucy5t aW4pKSx0aGlzLm9wdGlvbnMub25jaGFuZ2UmPQomdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpLHRo aXMuJHNsaWRlciYmdGhpcy4kc2xpZGVyLnNsaWRlcigidmFsdWUiLGUpLHRoaXM9Ci4kdGV4dC52 YWwoZSkpLHRoaXMuJHRleHQudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRp diBpZD0zRCInKz0KZS5pZCsnIiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlciI+JysnPGlucHV0IGlk PTNEInRleHQiIHR5cGU9M0QidGV4dCIgY2xhc3M9Cj0zRCJ1aS1mb3JtLXNsaWRlci10ZXh0Ii8+ JysnPGRpdiBpZD0zRCJzbGlkZXIiIGNsYXNzPTNEInVpLWZvcm0tc2xpZGVyLWVsZT0KbWVudCIv PicrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1vcHRpb25z IixbInV0aWxzL3V0PQppbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib25lLlZpZXcuZXh0 ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXM9Ci5vcHRpb25zRGVmYXVsdD0zRHt2aXNp YmxlOiEwLGRhdGE6W10saWQ6ZS51dWlkKCksZXJyb3JfdGV4dDoiTm8gZGF0YSBhdmFpbD0KYWJs ZS4iLHdhaXRfdGV4dDoiUGxlYXNlIHdhaXQuLi4ifSx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQs dGhpcy5vcHRpb25zRGVmPQphdWx0KSx0aGlzLnNldEVsZW1lbnQoIjxkaXYvPiIpLHRoaXMuJG1l c3NhZ2U9M0QkKCI8ZGl2Lz4iKSx0aGlzLiRvcHRpb25zPQo9M0QkKHRoaXMuX3RlbXBsYXRlKHQp KSx0aGlzLiRlbC5hcHBlbmQodGhpcy4kbWVzc2FnZSksdGhpcy4kZWwuYXBwZW5kKHRoaXM9Ci4k b3B0aW9ucyksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuJGVsLmhpZGUoKSx0aGlzLnVwZGF0 ZSh0aGlzLm9wdGlvbnMuZD0KYXRhKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVk JiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSk7dmFyPQogbj0zRHRoaXM7dGhpcy5vbigi Y2hhbmdlIixmdW5jdGlvbigpe24uX2NoYW5nZSgpfSl9LHVwZGF0ZTpmdW5jdGlvbihlKXt2YXI9 CiB0PTNEdGhpcy5fZ2V0VmFsdWUoKTt0aGlzLiRvcHRpb25zLmVtcHR5KCk7aWYodGhpcy5fdGVt cGxhdGVPcHRpb25zKXRoaXMuJD0Kb3B0aW9ucy5hcHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb25z KGUpKTtlbHNlIGZvcih2YXIgbiBpbiBlKXt2YXIgcj0zRCQodGhpPQpzLl90ZW1wbGF0ZU9wdGlv bihlW25dKSk7ci5hZGRDbGFzcygidWktb3B0aW9uIiksdGhpcy4kb3B0aW9ucy5hcHBlbmQocil9 dmE9CnIgaT0zRHRoaXM7dGhpcy4kZWwuZmluZCgiaW5wdXQiKS5vbigiY2hhbmdlIixmdW5jdGlv bigpe2kudmFsdWUoaS5fZ2V0VmFsdT0KZSgpKSxpLl9jaGFuZ2UoKX0pLHRoaXMuX3JlZnJlc2go KSx0aGlzLnZhbHVlKHQpfSx2YWx1ZTpmdW5jdGlvbihlKXtpZihlIT0KPTNEPTNEdW5kZWZpbmVk KXtlIGluc3RhbmNlb2YgQXJyYXl8fChlPTNEW2VdKSx0aGlzLiRlbC5maW5kKCJpbnB1dCIpLnBy b3AoPQoiY2hlY2tlZCIsITEpO2Zvcih2YXIgdCBpbiBlKXRoaXMuJGVsLmZpbmQoJ2lucHV0W3Zh bHVlPTNEIicrZVt0XSsnIl0nKS5maXI9CnN0KCkucHJvcCgiY2hlY2tlZCIsITApfXJldHVybiB0 aGlzLl9nZXRWYWx1ZSgpfSxleGlzdHM6ZnVuY3Rpb24oZSl7aWYoZSE9Cj0zRD0zRHVuZGVmaW5l ZCl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRFtlXSk7Zm9yKHZhciB0IGluIGUpaWYodGhpcy4k ZWwuZj0KaW5kKCdpbnB1dFt2YWx1ZT0zRCInK2VbdF0rJyJdJykubGVuZ3RoPjApcmV0dXJuITB9 cmV0dXJuITF9LGZpcnN0OmZ1bmN0aW9uPQooKXt2YXIgZT0zRHRoaXMuJGVsLmZpbmQoImlucHV0 Iik7cmV0dXJuIGUubGVuZ3RoPjA/ZS52YWwoKTp1bmRlZmluZWR9LHZhbGk9CmRhdGU6ZnVuY3Rp b24oKXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlzLnZhbHVlKCkpfSx3YWl0OmZ1bmN0aW9uKCl7dGhp cy5fc2l6ZT0KKCk9M0Q9M0QwJiYodGhpcy5fbWVzc2FnZVNob3codGhpcy5vcHRpb25zLndhaXRf dGV4dCwiaW5mbyIpLHRoaXMuJG9wdGlvbnMuPQpoaWRlKCkpfSx1bndhaXQ6ZnVuY3Rpb24oKXt0 aGlzLl9tZXNzYWdlSGlkZSgpLHRoaXMuX3JlZnJlc2goKX0sX2NoYW5nZTpmdW49CmN0aW9uKCl7 dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy5fZ2V0VmFs dWUoKSl9LF9yZT0KZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwPyh0aGlzLl9t ZXNzYWdlU2hvdyh0aGlzLm9wdGlvbnMuZXJyb3JfPQp0ZXh0LCJkYW5nZXIiKSx0aGlzLiRvcHRp b25zLmhpZGUoKSk6KHRoaXMuX21lc3NhZ2VIaWRlKCksdGhpcy4kb3B0aW9ucy5jc3M9CigiZGlz cGxheSIsImlubGluZS1ibG9jayIpKX0sX2dldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlz LiRlbC5maW5kKCI6Yz0KaGVja2VkIik7aWYoZS5sZW5ndGg9M0Q9M0QwKXJldHVybiJudWxsIjtp Zih0aGlzLm9wdGlvbnMubXVsdGlwbGUpe3ZhciB0PTNEPQpbXTtyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKCl7dC5wdXNoKCQodGhpcykudmFsKCkpfSksdH1yZXR1cm4gZS52YWwoKX0sX3NpemU9Cjpm dW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudWktb3B0aW9uIikubGVuZ3RofSxfbWVz c2FnZVNob3c6ZnVuY3Rpbz0KbihlLHQpe3RoaXMuJG1lc3NhZ2Uuc2hvdygpLHRoaXMuJG1lc3Nh Z2UucmVtb3ZlQ2xhc3MoKSx0aGlzLiRtZXNzYWdlLmFkZENsPQphc3MoInVpLW1lc3NhZ2UgYWxl cnQgYWxlcnQtIit0KSx0aGlzLiRtZXNzYWdlLmh0bWwoZSl9LF9tZXNzYWdlSGlkZTpmdW5jdGk9 Cm9uKCl7dGhpcy4kbWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8 ZGl2IGNsYXNzPTNEInVpLW9wdD0KaW9ucyIvPid9fSksbj0zRHt9O24uVmlldz0zRHQuZXh0ZW5k KHtpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLmluPQppdGlhbGl6ZS5jYWxsKHRo aXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48aW5wdXQgdHlw ZT0KPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52 YWx1ZSsnIi8+JytlLmxhYmVsKyI8PQpicj4iKyI8L2Rpdj4ifX0pO3ZhciByPTNEe307ci5WaWV3 PTNEdC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7ZS5tdWw9CnRpcGxlPTNEITAsdC5w cm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlv bihlKT0Ke3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEImNoZWNrYm94IiBuYW1lPTNEIicrdGhp cy5vcHRpb25zLmlkKyciIHZhbHVlPTNEPQoiJytlLnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4i KyI8L2Rpdj4ifX0pO3ZhciBpPTNEe307cmV0dXJuIGkuVmlldz0zRHQuZXg9CnRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LHZh bHVlOmZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kZWwuZmlu ZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiwhPQoxKSx0aGlzLiRlbC5maW5kKCJsYWJlbCIpLnJl bW92ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbC5maW5kKCdbdmFsdWU9M0QiJys9CmUrJyJdJyku cHJvcCgiY2hlY2tlZCIsITApLmNsb3Nlc3QoImxhYmVsIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSx0 aGlzLl9nZXRWYT0KbHVlKCl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8 bGFiZWwgY2xhc3M9M0QiYnRuIGJ0bi1kZWZhdWx0PQoiPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNE JzxpIGNsYXNzPTNEImZhICcrZS5pY29uKyciLz4nKSx0Kz0zRCc8aW5wdXQgdHlwZT0KPTNEInJh ZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIj4n K2UubGFiZWwrIjwvPQpsYWJlbD4iLHR9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2 IGNsYXNzPTNEImJ0bi1ncm91cCB1aS1yYWRpb2J1dHQ9Cm9uIiBkYXRhLXRvZ2dsZT0zRCJidXR0 b25zIi8+J319KSx7QmFzZTp0LFJhZGlvOm4sUmFkaW9CdXR0b246aSxDaGVja2JveDpyfT0KfSks ZGVmaW5lKCJtdmMvdWkvdWktZHJpbGxkb3duIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW9w dGlvbnMiXSxmdW5jdGlvPQpuKGUsdCl7dmFyIG49M0R0LkJhc2UuZXh0ZW5kKHtpbml0aWFsaXpl OmZ1bmN0aW9uKGUpe3RoaXMuZGlzcGxheT0zRGUuZGlzcGw9CmF5fHwiY2hlY2tib3giLGUubXVs dGlwbGU9M0R0aGlzLmRpc3BsYXk9M0Q9M0QiY2hlY2tib3giLHQuQmFzZS5wcm90b3R5cGUuaT0K bml0aWFsaXplLmNhbGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0aW9uKGUsdCxuKXty ZXR1cm4nPGRpdj48aW5wdXQgPQpuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIGNsYXNzPTNE InVpLW9wdGlvbiIgdHlwZT0zRCInK3RoaXMuZGlzcGxheSsnIiA9CnZhbHVlPTNEIicrdCsnIj4n K2UrIjxkaXYvPiJ9LF90ZW1wbGF0ZU9wdGlvbnM6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQp ez0KZnVuY3Rpb24gbihuKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUucmVtb3ZlQ2xhc3MoInRvZ2ds ZS1leHBhbmQiKSxlLmFkZENsYXNzPQooInRvZ2dsZSIpLGUuaXNfZXhwYW5kZWQ9M0QhMCk6KHQu aGlkZSgpLGUucmVtb3ZlQ2xhc3MoInRvZ2dsZSIpLGUuYWRkQ2xhc3M9CigidG9nZ2xlLWV4cGFu ZCIpLGUuaXNfZXhwYW5kZWQ9M0QhMSl9ZS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bighZS5pc19l eHBhbj0KZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKXtmb3IoaSBpbiBzKXt2YXIgbz0zRHNbaV0sdT0z RG8ub3B0aW9ucy5sZW5ndGg+MCxhPTNEPQokKCI8ZGl2Lz4iKTtpZih1KXt2YXIgZj0zRCQoJzxz cGFuIGNsYXNzPTNEInVpLWRyaWxsZG93bi1idXR0b24gZm9ybS10b2dnbGU9CiBpY29uLWJ1dHRv biB0b2dnbGUtZXhwYW5kIiBzdHlsZT0zRCJwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogMnB4OyIv PicpLGw9Cj0zRCQoIjxkaXYvPiIpO2wuYXBwZW5kKGYpLGwuYXBwZW5kKHQuX3RlbXBsYXRlT3B0 aW9uKG8ubmFtZSxvLnZhbHVlKSksYS5hcD0KcGVuZChsKTt2YXIgYz0zRCQoJzxkaXYgc3R5bGU9 M0QiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IDI1cHg7Ii8+Jyk7cihjPQosby5vcHRpb25z KSxhLmFwcGVuZChjKSxuKGYsYyl9ZWxzZSBhLmFwcGVuZCh0Ll90ZW1wbGF0ZU9wdGlvbihvLm5h bWUsby52YWw9CnVlKSk7ZS5hcHBlbmQoYSl9fXZhciB0PTNEdGhpcyxzPTNEJCgiPGRpdi8+Iik7 cmV0dXJuIHIocyxlKSxzfSxfdGVtcGxhdGU6Zj0KdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFz cz0zRCJ1aS1vcHRpb25zIGRyaWxsZG93bi1jb250YWluZXIiIGlkPTNEIicrZS5pPQpkKyciLz4n fX0pO3JldHVybntWaWV3Om59fSksZGVmaW5lKCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLFsidXRp bHMvdXRpbHMiXSw9CmZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0 aW9uc0RlZmF1bHQ6e2lkOiIiLHRpdGxlOiIiLGZsbz0KYXRpbmc6InJpZ2h0IixpY29uOm51bGws b25jbGljazpudWxsLGNsczoidWktYnV0dG9uLWljb24gdWktYnV0dG9uLW1lbnUiLHRvPQpvbHRp cDoiIix0YXJnZXQ6IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHZpc2libGU6ITAsdGFnOiIifSwk bWVudTpudWxsLGluaXQ9CmlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdl KHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbD0KZW1lbnQoJCh0aGlzLl90ZW1wbGF0 ZSh0aGlzLm9wdGlvbnMpKSk7dmFyIG49M0QkKHRoaXMuZWwpLmZpbmQoIi5yb290Iikscj0KPTNE dGhpcztuLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXAiKS5oaWRlKCksZS5wcmV2 ZW50RGVmYXVsdCgpLHIuPQpvcHRpb25zLm9uY2xpY2smJnIub3B0aW9ucy5vbmNsaWNrKCl9KSx0 aGlzLm9wdGlvbnMudmlzaWJsZXx8dGhpcy5oaWRlKCksbi49CnRvb2x0aXAoe3RpdGxlOnQudG9v bHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sc2hvdzpmdW5jdGlvbigpeyQodGhpcy5lbCkucz0K aG93KCl9LGhpZGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUoKX0sYWRkTWVudTpmdW5jdGlv bih0KXt2YXIgbj0zRHt0aXRsPQplOiIiLHRhcmdldDoiIixocmVmOiIiLG9uY2xpY2s6bnVsbCxk aXZpZGVyOiExLGljb246bnVsbCxjbHM6ImJ1dHRvbi1tZW51IGI9CnRuLWdyb3VwIn07bj0zRGUu bWVyZ2UodCxuKSx0aGlzLiRtZW51fHwoJCh0aGlzLmVsKS5hcHBlbmQodGhpcy5fdGVtcGxhdGVN ZT0KbnUoKSksdGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmluZCgiLm1lbnUiKSk7dmFyIHI9M0Qk KHRoaXMuX3RlbXBsYXRlTWVudUl0PQplbShuKSk7ci5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe2Uu cHJldmVudERlZmF1bHQoKSxuLm9uY2xpY2smJm4ub25jbGljaygpfSk9Cix0aGlzLiRtZW51LmFw cGVuZChyKSxuLmRpdmlkZXImJnRoaXMuJG1lbnUuYXBwZW5kKCQodGhpcy5fdGVtcGxhdGVEaXZp ZGVyKD0KKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGk+PGEg Y2xhc3M9M0QiZHJvcGRvd24taXRlbSIgPQpocmVmPTNEIicrZS5ocmVmKyciIHRhcmdldD0zRCIn K2UudGFyZ2V0KyciPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNEJzxpIGNsYXM9CnM9M0QiZmEgJytl Lmljb24rJyI+PC9pPicpLHQrPTNEIiAiK2UudGl0bGUrIjwvYT4iKyI8L2xpPiIsdH0sX3RlbXBs YXRlTWVudT0KOmZ1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJtZW51IGRyb3Bkb3duLW1l bnUgcHVsbC1yaWdodCIgcm9sZT0zRCJtZW51PQoiPjwvdWw+J30sX3RlbXBsYXRlRGl2aWRlcjpm dW5jdGlvbigpe3JldHVybic8bGkgY2xhc3M9M0QiZGl2aWRlciI+PC9saT4nfSw9Cl90ZW1wbGF0 ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpdGxlP3Q9M0Qid2lkdGg6IGF1dG87 IjpuPTNEIm1hcj0KZ2luOiAwcHg7Ijt2YXIgcj0zRCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBzdHls ZT0zRCJmbG9hdDogJytlLmZsb2F0aW5nKyI7ICIrPQp0KyciIGNsYXNzPTNEImRyb3Bkb3duICcr ZS5jbHMrJyI+JysnPGRpdiBjbGFzcz0zRCJyb290IGJ1dHRvbiBkcm9wZG93bi10b2c9CmdsZSIg ZGF0YS10b2dnbGU9M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisnIj4nKyc8aSBjbGFzcz0zRCJp Y29uIGZhICcrZS5pYz0Kb24rJyIvPic7cmV0dXJuIGUudGl0bGUmJihyKz0zRCcmbmJzcDs8c3Bh biBjbGFzcz0zRCJ0aXRsZSI+JytlLnRpdGxlKyI8L3NwPQphbj4iKSxyKz0zRCI8L2Rpdj48L2Rp dj4iLHJ9fSl9KSxkZWZpbmUoIm12Yy91aS91aS1taXNjIixbInV0aWxzL3V0aWxzIiwibXY9CmMv dWkvdWktc2VsZWN0LWRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVyIiwibXZjL3VpL3VpLW9wdGlv bnMiLCJtdmMvdWkvdWktZD0KcmlsbGRvd24iLCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLCJtdmMv dWkvdWktbW9kYWwiXSxmdW5jdGlvbihlLHQsbixyLGkscyxvPQope3ZhciB1PTNEQmFja2JvbmUu Vmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont1cmw6IiIsY2xzOiIifSxpbml0aWFsaXplOmY9 CnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQp LHRoaXMuc2V0RWxlbWVudCh0aD0KaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpfSxfdGVtcGxh dGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxpbWcgY2xhc3M9M0QidWktPQppbWFnZSAnK2UuY2xzKyci IHNyYz0zRCInK2UudXJsKyciLz4nfX0pLGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9u c0Q9CmVmYXVsdDp7dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMu b3B0aW9ucz0zRGUubWVyZ2UodCx0aD0KaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKX0sdGl0bGU6ZnVuPQpjdGlvbihlKXt0aGlz LiRlbC5odG1sKGUpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxsYWJlbCBjbGFzcz0z RCJ1aS09CmxhYmVsICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2xhYmVsPiJ9LHZhbHVlOmZ1bmN0 aW9uKCl7cmV0dXJuIG9wdGlvbnMudGl0bD0KZX19KSxmPTNEQmFja2JvbmUuVmlldy5leHRlbmQo e29wdGlvbnNEZWZhdWx0OntmbG9hdGluZzoicmlnaHQiLGljb246IiIsdG9vPQpsdGlwOiIiLHBs YWNlbWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7 dGhpcy5vcHQ9CmlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRF bGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMubz0KcHRpb25zKSksJCh0aGlzLmVsKS50b29sdGlw KHt0aXRsZTp0LnRvb2x0aXAscGxhY2VtZW50OiJib3R0b20ifSl9LF90ZW1wbGF0PQplOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEImZhICcrZS5pY29uKyciIGNsYXNzPTNE InVpLWljb24iLz49CiZuYnNwOycrZS50aXRsZSsiPC9kaXY+In19KSxsPTNEQmFja2JvbmUuVmll dy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDpudT0KbGwsdGl0bGU6IiIsZmxvYXRpbmc6InJp Z2h0IixjbHM6InVpLWJ1dHRvbiBidG4gYnRuLWRlZmF1bHQiLGljb246IiJ9LGluaXRpPQphbGl6 ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVs dCksdGhpcy5zZXRFbGU9Cm1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksJCh0aGlz LmVsKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7JCgiLnRvbz0KbHRpcCIpLmhpZGUoKSx0Lm9uY2xp Y2smJnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0LnRvb2x0aXAsPQpw bGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxidXR0 b24gaWQ9M0QiJytlLmlkKyc9CiIgdHlwZT0zRCJzdWJtaXQiIHN0eWxlPTNEImZsb2F0OiAnK2Uu ZmxvYXRpbmcrJzsiIHR5cGU9M0QiYnV0dG9uIiBjbGFzcz0zRD0KIicrZS5jbHMrJyI+JztyZXR1 cm4gZS5pY29uJiYodCs9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNvbisnIj48L2k+Jm5i PQpzcDsnKSx0Kz0zRGUudGl0bGUrIjwvYnV0dG9uPiIsdH19KSxjPTNEQmFja2JvbmUuVmlldy5l eHRlbmQoe29wdGlvbnNEZWZhdWw9CnQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0 IixjbHM6InVpLWJ1dHRvbi1pY29uIixpY29uOiIiLHRvb2x0aXA6Ij0KIixvbmNsaWNrOm51bGx9 LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0 aW9uPQpzRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9u cykpLHRoaXMuJGJ1dHRvbj0zRHRoaXM9Ci4kZWwuZmluZCgiLmJ1dHRvbiIpO3ZhciBuPTNEdGhp czskKHRoaXMuZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIudG9vbD0KdGlwIikuaGlkZSgp LHQub25jbGljayYmIW4uZGlzYWJsZWQmJnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdGlw KHt0aXRsPQplOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sZGlzYWJsZTpmdW5jdGlv bigpe3RoaXMuJGJ1dHRvbi5hZGRDbGFzcyg9CiJkaXNhYmxlZCIpLHRoaXMuZGlzYWJsZWQ9M0Qh MH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9uLnJlbW92ZUNsYXNzKD0KImRpc2FibGVk IiksdGhpcy5kaXNhYmxlZD0zRCExfSxzZXRJY29uOmZ1bmN0aW9uKGUpe3RoaXMuJCgiaSIpLnJl bW92ZUNsYXNzPQoodGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNzKGUpLHRoaXMub3B0aW9ucy5p Y29uPTNEZX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGU9Cil7dmFyIHQ9M0QiIjtlLnRpdGxlJiYodD0z RCJ3aWR0aDogYXV0bzsiKTt2YXIgbj0zRCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBzdD0KeWxlPTNE ImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1 cm4gZS50aXRsZT9uPQorPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9uIj48aSBjbGFzcz0zRCJpY29u IGZhICcrZS5pY29uKyciLz4mbmJzcDsnKyc8c3BhbiA9CmNsYXNzPTNEInRpdGxlIj4nK2UudGl0 bGUrIjwvc3Bhbj4iKyI8L2Rpdj4iOm4rPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJytlLj0KaWNv bisnIi8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRp b25zRGVmYXVsdDp7dGl0PQpsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0Q9CmVmYXVsdCksdGhpcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLCQodGhpcy5lbCkub24oImNsaWNrIj0K LHQub25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48YSBocmVmPTNE ImphdmFzY3JpcHQ6dm9pZCgwPQopIiBjbGFzcz0zRCJ1aS1hbmNob3IgJytlLmNscysnIj4nK2Uu dGl0bGUrIjwvYT48L2Rpdj4ifX0pLHA9M0RCYWNrYm9uZS5WaWU9CncuZXh0ZW5kKHtvcHRpb25z RGVmYXVsdDp7bWVzc2FnZTpudWxsLHN0YXR1czoiaW5mbyIscGVyc2lzdGVudDohMX0saW5pdGlh bD0KaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNE ZWZhdWx0KSx0aGlzLnNldEVsZW1lPQpudCgiPGRpdj48L2Rpdj4iKSx0aGlzLm9wdGlvbnMubWVz c2FnZSYmdGhpcy51cGRhdGUodGhpcy5vcHRpb25zKX0sdXBkYXRlOmY9CnVuY3Rpb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpO2lmKHQubWVzc2FnZSE9 M0QiIj0KKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRoaXMu JGVsLmZpbmQoIi5hbGVydCIpLmFwcGVuPQpkKHQubWVzc2FnZSksdGhpcy4kZWwuZmFkZUluKCks dGhpcy50aW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudGltZW89CnV0KTtpZighdC5w ZXJzaXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpcy50aW1lb3V0PTNEd2luZG93LnNldFRpbWVvdXQo ZnVuY3Rpbz0Kbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVsLmZhZGVPdXQoKTpuLiRlbC5o aWRlKCl9LDNlMyl9fWVsc2UgdGhpcy4kZWwuPQpmYWRlT3V0KCl9LF90ZW1wbGF0ZTpmdW5jdGlv bihlKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1tZXNzYWdlIGFsZXJ0IGFsZXI9CnQtJytlLnN0 YXR1cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ontv bmNsaWNrOm51bD0KbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMu b3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvPQpuc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt2YXIgbj0zRHRoaXM7dGhpcy49Cm9wdGlv bnMub25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsZnVuY3Rpb24oZSl7dmFyIHQ9M0RuLiRl bC5maW5kKCIjc2Vhcj0KY2giKTtuLm9wdGlvbnMub25jbGljayh0LnZhbCgpKX0pfSxfdGVtcGxh dGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgY2xhc3M9Cj0zRCJ1aS1zZWFyY2giPjxmb3JtIG9u c3VibWl0PTNEInJldHVybiBmYWxzZTsiPjxpbnB1dCBpZD0zRCJzZWFyY2giIGNsYXNzPQo9M0Qi Zm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5hbWU9M0Qic2VhcmNoIiBwbGFj ZWhvbGRlcj0zRCJTZWE9CnJjaC4uLiIgdmFsdWU9M0QiJytlLnNlYXJjaHdvcmQrJyI+JysnPGJ1 dHRvbiB0eXBlPTNEInN1Ym1pdCIgY2xhc3M9M0QiYnRuID0Kc2VhcmNoLWJ0biI+JysnPGkgY2xh c3M9M0QiZmEgZmEtc2VhcmNoIj48L2k+JysiPC9idXR0b24+IisiPC9mb3JtPiIrIjwvZGl2PQo+ In19KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0eXBlOiJ0ZXh0 IixwbGFjZWhvbGRlcjoiIiw9CmRpc2FibGVkOiExLHZpc2libGU6ITAsY2xzOiIiLGFyZWE6ITF9 LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPQo9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW89 Cm5zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0aGlz Lm9wdGlvbnMudmFsdWUpLHRoaT0Kcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLiRlbC5wcm9wKCJk aXNhYmxlZCIsITApLHRoaXMub3B0aW9ucy52aXNpYmxlfHx0aGlzPQouJGVsLmhpZGUoKTt2YXIg bj0zRHRoaXM7dGhpcy4kZWwub24oImlucHV0IixmdW5jdGlvbigpe24ub3B0aW9ucy5vbmNoYW5n ZSY9CiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9LHZhbHVlOmZ1bmN0aW9uKGUp e3JldHVybiBlIT0zRD0zRHVuZGVmaT0KbmVkJiZ0aGlzLiRlbC52YWwoZSksdGhpcy4kZWwudmFs KCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmVhPyc8PQp0ZXh0YXJlYSBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dGFyZWEgJytlLmNscysnIj48L3RleHRhcmVhPic6 JzxpbnA9CnV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50eXBlKyciIHZhbHVlPTNEIicr ZS52YWx1ZSsnIiBwbGFjZWhvbGRlcj0zRD0KIicrZS5wbGFjZWhvbGRlcisnIiBjbGFzcz0zRCJ1 aS1pbnB1dCAnK2UuY2xzKyciPid9fSksbT0zREJhY2tib25lLlZpZXcuZXh0PQplbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPTNEZSx0aGlzLnNldEVsZW1lbnQodGhpcy5f dGVtcGxhdGU9Cih0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZp bmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucz0KLnZhbHVlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7 cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiQoImhpZGRlbiIpLnZhbChlPQopLHRoaXMu JCgiaGlkZGVuIikudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8ZGl2IGlk PTNEIicrZS5pZCs9CiciID4nO3JldHVybiBlLmluZm8mJih0Kz0zRCI8bGFiZWw+IitlLmluZm8r IjwvbGFiZWw+IiksdCs9M0QnPGhpZGRlbiB2YWx1ZT0KPTNEIicrZS52YWx1ZSsnIi8+JysiPC9k aXY+Iix0fX0pO3JldHVybntBbmNob3I6aCxCdXR0b246bCxCdXR0b25JY29uOmMsQnV0PQp0b25N ZW51OnMsSWNvbjpmLEltYWdlOnUsSW5wdXQ6dixMYWJlbDphLE1lc3NhZ2U6cCxNb2RhbDpvLFJh ZGlvQnV0dG9uOnIuUmE9CmRpb0J1dHRvbixDaGVja2JveDpyLkNoZWNrYm94LFJhZGlvOnIuUmFk aW8sU2VhcmNoYm94OmQsU2VsZWN0OnQsSGlkZGVuOm0sUz0KbGlkZXI6bixEcmlsbGRvd246aX19 KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L2pvYnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvPQpu KGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxu KXt0aGlzLmFwcD0zRHQsdGg9CmlzLm9wdGlvbnM9M0RlLm1lcmdlKG4sdGhpcy5vcHRpb25zRGVm YXVsdCl9LHJlcXVlc3Q6ZnVuY3Rpb24oZSx0LG4scixpKXt2YT0KciBzPTNEdGhpcztlLnN0YXRl KCJ3YWl0IiwiUmVxdWVzdGluZyBqb2IgcmVzdWx0cy4uLiIpO3ZhciBvPTNEZS5nZXQoImRhdGFz PQpldF9pZF9qb2IiKTtvIT0zRCIiP3MuX3dhaXQoZSxyLGkpOnMuX3N1Ym1pdChlLHQsbixyLGkp fSxjbGVhbnVwOmZ1bmN0aW9uKHQ9Cil7dmFyIG49M0R0aGlzLHI9M0R0LmdldCgiZGF0YXNldF9p ZF9qb2IiKTtyIT0zRCIiJiYoZS5yZXF1ZXN0KHt0eXBlOiJQVVQiLD0KdXJsOmNvbmZpZy5yb290 KyJhcGkvaGlzdG9yaWVzL25vbmUvY29udGVudHMvIityLGRhdGE6e2RlbGV0ZWQ6ITB9LHN1Y2Nl c3M6PQpmdW5jdGlvbigpe24uX3JlZnJlc2hIZGFzKCl9fSksdC5zZXQoImRhdGFzZXRfaWRfam9i IiwiIikpfSxfc3VibWl0OmZ1bmN0aW89Cm4odCxuLHIsaSxzKXt2YXIgbz0zRHRoaXMsdT0zRHQu aWQsYT0zRHQuZ2V0KCJ0eXBlIiksZj0zRHQuZGVmaW5pdGlvbjtkYXRhPQo9M0R7dG9vbF9pZDoi Y2hhcnRzIixpbnB1dHM6e2lucHV0OntpZDp0LmdldCgiZGF0YXNldF9pZCIpLHNyYzoiaGRhIn0s bW9kdWw9CmU6Zi5leGVjdXRlLGNvbHVtbnM6cixzZXR0aW5nczpufX0sdC5zdGF0ZSgid2FpdCIs IlNlbmRpbmcgam9iIHJlcXVlc3QuLi4iKT0KLGUucmVxdWVzdCh7dHlwZToiUE9TVCIsdXJsOmNv bmZpZy5yb290KyJhcGkvdG9vbHMiLGRhdGE6ZGF0YSxzdWNjZXNzOmZ1bmN0PQppb24oZSl7aWYo IWUub3V0cHV0c3x8ZS5vdXRwdXRzLmxlbmd0aD0zRD0zRDApdC5zdGF0ZSgiZmFpbGVkIiwiSm9i IHN1Ym1pc3M9CmlvbiBmYWlsZWQuIE5vIHJlc3BvbnNlLiIpLHMmJnMoKTtlbHNle28uX3JlZnJl c2hIZGFzKCk7dmFyIG49M0RlLm91dHB1dHNbMD0KXTt0LnN0YXRlKCJ3YWl0IiwiWW91ciBqb2Ig aGFzIGJlZW4gcXVldWVkLiBZb3UgbWF5IGNsb3NlIHRoZSBicm93c2VyIHdpbmRvPQp3LiBUaGUg am9iIHdpbGwgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLiIpLHQuc2V0KCJkYXRhc2V0X2lkX2pvYiIs bi5pZCksby5hcHA9Ci5zdG9yYWdlLnNhdmUoKSxvLl93YWl0KHQsaSxzKX19LGVycm9yOmZ1bmN0 aW9uKGUpe3ZhciBuPTNEIiI7ZSYmZS5tZXNzYWdlJj0KJmUubWVzc2FnZS5kYXRhJiZlLm1lc3Nh Z2UuZGF0YS5pbnB1dCYmKG49M0RlLm1lc3NhZ2UuZGF0YS5pbnB1dCsiLiIpLHQuc3RhPQp0ZSgi ZmFpbGVkIiwiVGhpcyB2aXN1YWxpemF0aW9uIHJlcXVpcmVzIHRoZSAnY2hhcnRzJyB0b29sLiBQ bGVhc2UgbWFrZSBzdXI9CmUgaXQgaXMgaW5zdGFsbGVkLiAiK24pLHMmJnMoKX19KX0sX3dhaXQ6 ZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEdGhpcztlLnJlcT0KdWVzdCh7dHlwZToiR0VUIix1cmw6 Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3QuZ2V0KCJkYXRhc2V0X2lkX2pvYiIpLGRhPQp0 YTp7fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe3ZhciBzPTNEITE7c3dpdGNoKGUuc3RhdGUpe2Nhc2Ui b2siOnQuc3RhdGUoIndhaXQ9CiIsIkpvYiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Li4uIiksbiYm bihlKSxzPTNEITA7YnJlYWs7Y2FzZSJlcnJvciI6dC5zdGF0ZT0KKCJmYWlsZWQiLCJKb2IgaGFz IGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZSBoaXN0b3J5IGZvciBkZXRhaWxzLiIpLHImJnIoZSks PQpzPTNEITA7YnJlYWs7Y2FzZSJydW5uaW5nIjp0LnN0YXRlKCJ3YWl0IiwiWW91ciBqb2IgaXMg cnVubmluZy4gWW91IG1heSBjbG89CnNlIHRoZSBicm93c2VyIHdpbmRvdy4gVGhlIGpvYiB3aWxs IGNvbnRpbnVlIGluIHRoZSBiYWNrZ3JvdW5kLiIpfXN8fHNldFRpbT0KZW91dChmdW5jdGlvbigp e2kuX3dhaXQodCxuLHIpfSxpLmFwcC5jb25maWcuZ2V0KCJxdWVyeV90aW1lb3V0IikpfX0pfSxf cmVmPQpyZXNoSGRhczpmdW5jdGlvbigpe0dhbGF4eSYmR2FsYXh5LmN1cnJIaXN0b3J5UGFuZWwm JkdhbGF4eS5jdXJySGlzdG9yeVBhbmU9CmwucmVmcmVzaENvbnRlbnRzKCl9fSl9KSxkZWZpbmUo InBsdWdpbi9saWJyYXJ5L2RhdGFzZXRzIixbInV0aWxzL3V0aWxzIl0sZj0KdW5jdGlvbihlKXty ZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe2xpc3Q6e30sY2FjaGU6e30saW5pdGlh bGl6ZTpmPQp1bmN0aW9uKHQsbil7dGhpcy5hcHA9M0R0LHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uo bix0aGlzLm9wdGlvbnNEZWZhdWx0KX0scmU9CnF1ZXN0OmZ1bmN0aW9uKGUpe2UuZ3JvdXBzP3Ro aXMuX2dldF9ibG9ja3MoZSk6dGhpcy5fZ2V0X2RhdGFzZXQoZS5pZCxlLnN1Yz0KY2VzcyxlLmVy cm9yKX0sX2dldF9ibG9ja3M6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYyhpKXtsLl9nZXQoaSxmdW5j dGlvbigpe3ZhPQpyIHM9M0QhMTtmb3IodmFyIG8gaW4gZS5ncm91cHMpe2Rlc3RpbmF0aW9uX2dy b3VwPTNEZS5ncm91cHNbb10sc291cmNlX2dyb3U9CnA9M0RpLmdyb3Vwc1tvXSxkZXN0aW5hdGlv bl9ncm91cC52YWx1ZXN8fChkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXM9M0RbXSksZD0KZXN0aW5h dGlvbl9ncm91cC52YWx1ZXM9M0RkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXMuY29uY2F0KHNvdXJj ZV9ncm91cC52YWx1PQplcyk7aWYoc291cmNlX2dyb3VwLnZhbHVlcy5sZW5ndGg9M0Q9M0QwKXtz PTNEITA7YnJlYWt9fWlmKCsrZjx1JiYhcyl7biYmbig9CnBhcnNlSW50KGYvdSoxMDApKTt2YXIg bD0zRGkuc3RhcnQrcjtpPTNEJC5leHRlbmQoITAsYSx7c3RhcnQ6bH0pLGMoaSl9ZWxzZT0KIHQo KX0pfXZhciB0PTNEZS5zdWNjZXNzLG49M0RlLnByb2dyZXNzLHI9M0R0aGlzLmFwcC5jb25maWcu Z2V0KCJxdWVyeV9saW1pPQp0IiksaT0zRGUuc3RhcnR8fDAscz0zRGkrZS5xdWVyeV9saW1pdHx8 aSt0aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVyeV9saW1pdCI9Ciksbz0zRE1hdGguYWJzKHMtaSk7 aWYobzw9M0QwKXtjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBEYXRhc2V0czo6cmVxdWVzdCgpID0K LSBJbnZhbGlkIHF1ZXJ5IHJhbmdlLiIpO3JldHVybn12YXIgdT0zRE1hdGguY2VpbChvL3IpfHwx LGE9M0QkLmV4dGVuZCghMCx7PQp9LGUpLGY9M0QwLGw9M0R0aGlzLGg9M0QkLmV4dGVuZCghMCxh LHtzdGFydDppfSk7dGhpcy5fZ2V0X2RhdGFzZXQoZS5pZCxmdW49CmN0aW9uKCl7YyhoKX0pfSxf Z2V0X2RhdGFzZXQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEdGhpcy5saXN0W3RdO2lmKGkpe24o aT0KKTtyZXR1cm59dmFyIHM9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Y29uZmln LnJvb3QrImFwaS9kYXRhc2V0cy8iPQordCxzdWNjZXNzOmZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0 YXRlKXtjYXNlImVycm9yIjpyJiZyKGUpO2JyZWFrO2RlZmF1bHQ6cy49Cmxpc3RbdF09M0RlLG4o ZSl9fX0pfSxfYmxvY2tfaWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZCsiXyIrZS5zdGFydCsi XyIrZT0KLnN0YXJ0K3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0IikrIl8iK3R9LF9n ZXQ6ZnVuY3Rpb24oZSx0KXtlLnN0YXJ0PQo9M0RlLnN0YXJ0fHwwO3ZhciBuPTNEW10scj0zRHt9 LGk9M0QwO2Zvcih2YXIgcyBpbiBlLmdyb3Vwcyl7dmFyIG89M0RlLmdyb3U9CnBzW3NdO2Zvcih2 YXIgdSBpbiBvLmNvbHVtbnMpe3ZhciBhPTNEby5jb2x1bW5zW3VdLmluZGV4LGY9M0R0aGlzLl9i bG9ja19pZD0KKGUsYSk7aWYodGhpcy5jYWNoZVtmXXx8YT0zRD0zRD0zRCJhdXRvInx8YT0zRD0z RD0zRCJ6ZXJvIiljb250aW51ZTshclthXSYmPQphIT0zRD0zRHVuZGVmaW5lZCYmKHJbYV09M0Rp LG4ucHVzaChhKSxpKyspfX1pZihuLmxlbmd0aD0zRD0zRDApe3RoaXMuX2ZpbGw9Cl9mcm9tX2Nh Y2hlKGUpLHQoZSk7cmV0dXJufXZhciBsPTNEe2RhdGFzZXRfaWQ6ZS5pZCxzdGFydDplLnN0YXJ0 LGNvbHVtbnM6bj0KfSxjPTNEdGhpczt0aGlzLl9mZXRjaChsLGZ1bmN0aW9uKHIpe2Zvcih2YXIg aSBpbiByKXt2YXIgcz0zRG5baV0sbz0zRGMuX2JsPQpvY2tfaWQoZSxzKTtjLmNhY2hlW29dPTNE cltpXX1jLl9maWxsX2Zyb21fY2FjaGUoZSksdChlKX0pfSxfZmlsbF9mcm9tX2NhY2g9CmU6ZnVu Y3Rpb24oZSl7dmFyIHQ9M0RlLnN0YXJ0O2NvbnNvbGUuZGVidWcoIkRhdGFzZXRzOjpfZmlsbF9m cm9tX2NhY2hlKCkgLT0KIEZpbGxpbmcgcmVxdWVzdCBmcm9tIGNhY2hlIGF0ICIrdCsiLiIpO3Zh ciBuPTNEMDtmb3IodmFyIHIgaW4gZS5ncm91cHMpe3ZhPQpyIGk9M0RlLmdyb3Vwc1tyXTtmb3Io dmFyIHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0zRGkuY29sdW1uc1tzXSx1PTNEdGhpcy5fYmw9Cm9j a19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2EmJihuPTNETWF0aC5tYXgobixhLmxl bmd0aCkpfX1uPTNEPTNEMD0KJiZjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZpbGxfZnJvbV9j YWNoZSgpIC0gUmVhY2hlZCBkYXRhIHJhbmdlIGxpbWl0LiIpPQo7Zm9yKHZhciByIGluIGUuZ3Jv dXBzKXt2YXIgaT0zRGUuZ3JvdXBzW3JdO2kudmFsdWVzPTNEW107Zm9yKHZhciBmPTNEMDtmPG49 CjtmKyspaS52YWx1ZXNbZl09M0R7eDpwYXJzZUludChmKSt0fX1mb3IodmFyIHIgaW4gZS5ncm91 cHMpe3ZhciBpPTNEZS5ncm91cD0Kc1tyXTtmb3IodmFyIHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0z RGkuY29sdW1uc1tzXTtzd2l0Y2goby5pbmRleCl7Y2FzZSJhdXRvPQoiOmZvcih2YXIgZj0zRDA7 ZjxuO2YrKyl7dmFyIGw9M0RpLnZhbHVlc1tmXTtsW3NdPTNEcGFyc2VJbnQoZikrdH1icmVhaztj YXM9CmUiemVybyI6Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2YXIgbD0zRGkudmFsdWVzW2ZdO2xb c109M0QwfWJyZWFrO2RlZmF1bHQ6dj0KYXIgdT0zRHRoaXMuX2Jsb2NrX2lkKGUsby5pbmRleCks YT0zRHRoaXMuY2FjaGVbdV07Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2PQphciBsPTNEaS52YWx1 ZXNbZl0sYz0zRGFbZl07aXNOYU4oYykmJiFvLmlzX2xhYmVsJiYoYz0zRDApLGxbc109M0RjfX19 fX0sX2Y9CmV0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQuc3RhcnQ/dC5zdGFydDowLGk9M0R0 aGlzLmFwcC5jb25maWcuZ2V0KCJxdWVyeT0KX2xpbWl0Iikscz0zRDA7dC5jb2x1bW5zJiYocz0z RHQuY29sdW1ucy5sZW5ndGgsY29uc29sZS5kZWJ1ZygiRGF0YXNldHM6Ol9mPQpldGNoKCkgLSBG ZXRjaGluZyAiK3MrIiBjb2x1bW4ocykgYXQgIityKyIuIikpLHM9M0Q9M0QwJiZjb25zb2xlLmRl YnVnKCJEYXQ9CmFzZXRzOjpfZmV0Y2goKSAtIE5vIGNvbHVtbnMgcmVxdWVzdGVkIik7dmFyIG89 M0QiIjtmb3IodmFyIHUgaW4gdC5jb2x1bW5zKT0Kbys9M0R0LmNvbHVtbnNbdV0rIiwiO289M0Rv LnN1YnN0cmluZygwLG8ubGVuZ3RoLTEpO3ZhciBhPTNEdGhpcztlLnJlcXVlc3QoPQp7dHlwZToi R0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3QuZGF0YXNldF9pZCxkYXRhOntk YXRhX3R5cGU6InI9CmF3X2RhdGEiLHByb3ZpZGVyOiJkYXRhc2V0LWNvbHVtbiIsbGltaXQ6aSxv ZmZzZXQ6cixpbmRlY2VzOm99LHN1Y2Nlc3M6ZnVuYz0KdGlvbihlKXt2YXIgdD0zRG5ldyBBcnJh eShzKTtmb3IodmFyIHI9M0QwO3I8cztyKyspdFtyXT0zRFtdO2Zvcih2YXIgciBpbiBlPQouZGF0 YSl7dmFyIGk9M0RlLmRhdGFbcl07Zm9yKHZhciBvIGluIGkpe3ZhciB1PTNEaVtvXTt1IT0zRD0z RHVuZGVmaW5lZCYmdSE9Cj0zRDIxNDc0ODM2NDcmJnRbb10ucHVzaCh1KX19Y29uc29sZS5kZWJ1 ZygiRGF0YXNldHM6Ol9mZXRjaCgpIC0gRmV0Y2hpbmcgYz0Kb21wbGV0ZS4iKSxuKHQpfX0pfX0p fSksZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2dyb3VwIixbXSxmdW5jdGlvbigpe3JldHVybiBCPQph Y2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2tleToiRGF0YSBsYWJlbCIsZGF0ZToiIn0s cmVzZXQ6ZnVuY3Rpb24oKXs9CnRoaXMuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1 bHRzKSx0aGlzLnRyaWdnZXIoInJlc2V0Iix0aGlzKX19KX0pLD0KZGVmaW5lKCJwbHVnaW4vbW9k ZWxzL2dyb3VwcyIsWyJwbHVnaW4vbW9kZWxzL2dyb3VwIl0sZnVuY3Rpb24oZSl7cmV0dXJuIEJh PQpja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVsOmV9KX0pLGRlZmluZSgicGx1Z2luL21v ZGVscy9jaGFydCIsWyJwbHVnaW49Ci9tb2RlbHMvZ3JvdXBzIl0sZnVuY3Rpb24oZSl7cmV0dXJu IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2lkOm51bD0KbCx0aXRsZToiIix0eXBl OiIiLGRhdGU6bnVsbCxzdGF0ZToiIixzdGF0ZV9pbmZvOiIiLG1vZGlmaWVkOiExLGRhdGFzZXRf aWQ6PQoiIixkYXRhc2V0X2lkX2pvYjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLmdy b3Vwcz0zRG5ldyBlLHRoaXMuc2V0dGk9Cm5ncz0zRG5ldyBCYWNrYm9uZS5Nb2RlbH0scmVzZXQ6 ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKHtzaWxlbnQ6ITB9KS5zZXQodGhpcz0KLmRlZmF1bHRzKSx0 aGlzLmdyb3Vwcy5yZXNldCgpLHRoaXMuc2V0dGluZ3MuY2xlYXIoKSx0aGlzLnRyaWdnZXIoInJl c2V0Iix0PQpoaXMpfSxjb3B5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0LmNsZWFyKHtzaWxl bnQ6ITB9KS5zZXQodGhpcy5kZWZhdWx0cyk9Cix0LnNldChlLmF0dHJpYnV0ZXMpLHQuc2V0dGlu Z3M9M0RlLnNldHRpbmdzLmNsb25lKCksdC5ncm91cHMucmVzZXQoKSxlLmdybz0KdXBzLmVhY2go ZnVuY3Rpb24oZSl7dC5ncm91cHMuYWRkKGUuY2xvbmUoKSl9KSx0LnRyaWdnZXIoImNoYW5nZSIs dCl9LHN0YXRlPQo6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldCgic3RhdGUiLGUpLHRoaXMuc2V0KCJz dGF0ZV9pbmZvIix0KSx0aGlzLnRyaWdnZXIoInM9CmV0OnN0YXRlIiksY29uc29sZS5kZWJ1Zygi Q2hhcnQ6c3RhdGUoKSAtICIrdCsiICgiK2UrIikiKX19KX0pO3ZhciBWaXN1YWxpej0KYXRpb249 M0RCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOntjb25maWc6e319LHVybFJvb3Q6ZnVu Y3Rpb24oKXt2YXIgPQplPTNEIi9hcGkvdmlzdWFsaXphdGlvbnMiO3JldHVybiB3aW5kb3cuZ2Fs YXh5X2NvbmZpZyYmZ2FsYXh5X2NvbmZpZy5yb290P2c9CmFsYXh5X2NvbmZpZy5yb290K2U6ZX0s aW5pdGlhbGl6ZTpmdW5jdGlvbihlKXtfLmlzT2JqZWN0KGUuY29uZmlnKSYmXy5pc09iaj0KZWN0 KHRoaXMuZGVmYXVsdHMuY29uZmlnKSYmXy5kZWZhdWx0cyhlLmNvbmZpZyx0aGlzLmRlZmF1bHRz LmNvbmZpZyksdGhpcy5fPQpzZXRVcExpc3RlbmVycygpfSxfc2V0VXBMaXN0ZW5lcnM6ZnVuY3Rp b24oKXt9LHNldDpmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0Q9Cj0zRCJjb25maWciKXt2YXIgbj0z RHRoaXMuZ2V0KCJjb25maWciKTtfLmlzT2JqZWN0KG4pJiYodD0zRF8uZXh0ZW5kKF8uY2xvbj0K ZShuKSx0KSl9cmV0dXJuIEJhY2tib25lLk1vZGVsLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGUs dCksdGhpc30sdG9TdHJpbmc6PQpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5nZXQoImlkIil8fCIi O3JldHVybiB0aGlzLmdldCgidGl0bGUiKSYmKGUrPTNEIjoiK3Q9Cmhpcy5nZXQoInRpdGxlIikp LCJWaXN1YWxpemF0aW9uKCIrZSsiKSJ9fSksVmlzdWFsaXphdGlvbkNvbGxlY3Rpb249M0RCYWNr Yj0Kb25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpWaXN1YWxpemF0aW9uLHVybDpmdW5jdGlv bigpe3JldHVybiBnYWxheHlfY29uPQpmaWcucm9vdCsiYXBpL3Zpc3VhbGl6YXRpb25zIn0saW5p dGlhbGl6ZTpmdW5jdGlvbihlLHQpe3Q9M0R0fHx7fX0sc2V0OmZ1bmM9CnRpb24oZSx0KXt2YXIg bj0zRHRoaXM7ZT0zRF8ubWFwKGUsZnVuY3Rpb24oZSl7dmFyIHQ9M0RuLmdldChlLmlkKTtpZigh dClyZT0KdHVybiBlO3ZhciByPTNEdC50b0pTT04oKTtyZXR1cm4gXy5leHRlbmQocixlKSxyfSks QmFja2JvbmUuQ29sbGVjdGlvbi5wcm90PQpvdHlwZS5zZXQuY2FsbCh0aGlzLGUsdCl9LHRvU3Ry aW5nOmZ1bmN0aW9uKCl7cmV0dXJuWyJWaXN1YWxpemF0aW9uQ29sbGVjdGk9Cm9uKCIsW3RoaXMu aGlzdG9yeUlkLHRoaXMubGVuZ3RoXS5qb2luKCksIikiXS5qb2luKCIiKX19KTtkZWZpbmUoIm12 Yy92aXN1YT0KbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCIsZnVuY3Rpb24oKXt9KSxkZWZp bmUoInBsdWdpbi9saWJyYXJ5L3N0b3JhZ2UiPQosWyJ1dGlscy91dGlscyIsInBsdWdpbi9tb2Rl bHMvY2hhcnQiLCJwbHVnaW4vbW9kZWxzL2dyb3VwIiwibXZjL3Zpc3VhbGl6YXQ9Cmlvbi92aXN1 YWxpemF0aW9uLW1vZGVsIl0sZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5l eHRlbmQoe3Zpcz0KOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLmFwcD0zRGUsdGhp cy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMuPQpvcHRpb25zPTNEdGhpcy5hcHAub3B0aW9u cyx0aGlzLmlkPTNEdGhpcy5vcHRpb25zLmlkLHRoaXMudmlzPTNEbmV3IFZpc3VhbGk9CnphdGlv bih7dHlwZToiY2hhcnRzIixjb25maWc6e2RhdGFzZXRfaWQ6dGhpcy5vcHRpb25zLmNvbmZpZy5k YXRhc2V0X2lkLGNoYT0KcnRfZGljdDp7fX19KSx0aGlzLmlkJiYodGhpcy52aXMuaWQ9M0R0aGlz LmlkKTt2YXIgdD0zRHRoaXMub3B0aW9ucy5jb25maWcuPQpjaGFydF9kaWN0O3QmJih0aGlzLnZp cy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0R0KX0sc2F2ZTpmdW5jdGlvbigpe3ZhciA9CmU9 M0R0aGlzLmFwcC5jaGFydDt0aGlzLnZpcy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0R7fTt2 YXIgdD0zRGUuZ2V0KCJ0aT0KdGxlIik7dCE9M0QiIiYmdGhpcy52aXMuc2V0KCJ0aXRsZSIsdCk7 dmFyIG49M0R7YXR0cmlidXRlczplLmF0dHJpYnV0ZXMsc2V0PQp0aW5nczplLnNldHRpbmdzLmF0 dHJpYnV0ZXMsZ3JvdXBzOltdfTtlLmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKGUpe24uZ3JvdXBzLnA9 CnVzaChlLmF0dHJpYnV0ZXMpfSksdGhpcy52aXMuZ2V0KCJjb25maWciKS5jaGFydF9kaWN0PTNE bjt2YXIgcj0zRHRoaXM7dGhpcz0KLnZpcy5zYXZlKCkuZmFpbChmdW5jdGlvbihlLHQsbil7Y29u c29sZS5lcnJvcihlLHQsbil9KS50aGVuKGZ1bmN0aW9uKGUpe2UmPQomZS5pZCYmKHIuaWQ9M0Rl LmlkKX0pfSxsb2FkOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLnZpcy5nZXQoImNvbmZpZyIpLmNo YXI9CnRfZGljdDtpZighZS5hdHRyaWJ1dGVzKXJldHVybiExO3ZhciB0PTNEZS5hdHRyaWJ1dGVz LnR5cGU7aWYoIXQpcmV0dXJuIGNvbj0Kc29sZS5kZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gQ2hh cnQgdHlwZSBub3QgcHJvdmlkZWQuIEludmFsaWQgZm9ybWF0LiIpLCExPQo7dmFyIHI9M0R0aGlz LmFwcC50eXBlcy5nZXQodCk7aWYoIXIpcmV0dXJuIGNvbnNvbGUuZGVidWcoIlN0b3JhZ2U6Omxv YWQoKSA9Ci0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmUtY29uZmlndXJlIHRo ZSBjaGFydC4gUmVzZXR0aW5nIGNoYXJ0Lj0KIiksITE7Y29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6 bG9hZCgpIC0gTG9hZGluZyBjaGFydCB0eXBlICIrdCsiLiIpLHRoaXMuY2hhPQpydC5kZWZpbml0 aW9uPTNEcix0aGlzLmNoYXJ0LnNldChlLmF0dHJpYnV0ZXMpLHRoaXMuY2hhcnQuc3RhdGUoIm9r IiwiTG9hZGk9Cm5nIHNhdmVkIHZpc3VhbGl6YXRpb24uLi4iKSx0aGlzLmNoYXJ0LnNldHRpbmdz LnNldChlLnNldHRpbmdzKTtmb3IodmFyIGkgaT0KbiBlLmdyb3Vwcyl0aGlzLmNoYXJ0Lmdyb3Vw cy5hZGQobmV3IG4oZS5ncm91cHNbaV0pKTtyZXR1cm4gdGhpcy5jaGFydC5zZXQoPQoibW9kaWZp ZWQiLCExKSwhMH19KX0pLGRlZmluZSgidXRpbHMvZGVmZXJyZWQiLFsidXRpbHMvdXRpbHMiXSxm dW5jdGlvbihlKXs9CnJldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe3F1ZXVlOltdLHByb2Nl c3M6e30sY291bnRlcjowLGluaXRpYWxpemU6ZnVuYz0KdGlvbigpe3RoaXMub24oInJlZnJlc2gi LGZ1bmN0aW9uKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCYmdGhpcy5yZWFkeSgpKXt2PQphciBl PTNEdGhpcy5xdWV1ZVswXTt0aGlzLnF1ZXVlLnNwbGljZSgwLDEpLGUmJmUoKX19KX0sZXhlY3V0 ZTpmdW5jdGlvbihlKXs9CnRoaXMucXVldWUucHVzaChlKSx0aGlzLnRyaWdnZXIoInJlZnJlc2gi KX0scmVnaXN0ZXI6ZnVuY3Rpb24oKXt2YXIgdD0zRGUudT0KdWlkKCk7cmV0dXJuIHRoaXMucHJv Y2Vzc1t0XT0zRCEwLHRoaXMuY291bnRlcisrLGNvbnNvbGUuZGVidWcoIkRlZmVycmVkOnJlPQpn aXN0ZXIoKSAtIFJlZ2lzdGVyaW5nICIrdCksdH0sZG9uZTpmdW5jdGlvbihlKXt0aGlzLnByb2Nl c3NbZV0mJihkZWxldGUgdGg9CmlzLnByb2Nlc3NbZV0sdGhpcy5jb3VudGVyLS0sY29uc29sZS5k ZWJ1ZygiRGVmZXJyZWQ6ZG9uZSgpIC0gVW5yZWdpc3RlcmluZz0KICIrZSksdGhpcy50cmlnZ2Vy KCJyZWZyZXNoIikpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMucXVldWU9M0RbXX0scmVhZHk6ZnVu PQpjdGlvbigpe3JldHVybiB0aGlzLmNvdW50ZXI9M0Q9M0QwfX0pfSksZGVmaW5lKCJwbHVnaW4v dmlld3Mvdmlld3BvcnQiLFsibXY9CmMvdWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjIiwi dXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJhYz0Ka2JvbmUuVmlldy5leHRl bmQoe2NvbnRhaW5lcl9saXN0OltdLGNhbnZhc19saXN0OltdLGluaXRpYWxpemU6ZnVuY3Rpb24o ZSx0PQope3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5vcHRp b25zPTNEbi5tZXJnZSh0LHRoaXMub3A9CnRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KCQo dGhpcy5fdGVtcGxhdGUoKSkpLHRoaXMuX2Z1bGxzY3JlZW4odGhpcy4kZT0KbCwxMDApLHRoaXMu X2NyZWF0ZUNvbnRhaW5lcigiZGl2Iik7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQub24oInJlZHJh dyIsZnVuPQpjdGlvbigpe3IuX2RyYXcoci5jaGFydCl9KSx0aGlzLmNoYXJ0Lm9uKCJzZXQ6c3Rh dGUiLGZ1bmN0aW9uKCl7dmFyIGU9M0RyLiQ9CmVsLmZpbmQoIiNpbmZvIiksdD0zRHIuJGVsLmZp bmQoIi5jaGFydHMtdmlld3BvcnQtY29udGFpbmVyIiksbj0zRGUuZmluZCgiIz0KaWNvbiIpO24u cmVtb3ZlQ2xhc3MoKSxlLnNob3coKSxlLmZpbmQoIiN0ZXh0IikuaHRtbChyLmNoYXJ0LmdldCgi c3RhdGVfaW5mPQpvIikpO3ZhciBpPTNEci5jaGFydC5nZXQoInN0YXRlIik7c3dpdGNoKGkpe2Nh c2Uib2siOmUuaGlkZSgpLHQuc2hvdygpO2JyZWE9Cms7Y2FzZSJmYWlsZWQiOm4uYWRkQ2xhc3Mo Imljb24gZmEgZmEtd2FybmluZyIpLHQuaGlkZSgpO2JyZWFrO2RlZmF1bHQ6bi5hZD0KZENsYXNz KCJpY29uIGZhIGZhLXNwaW5uZXIgZmEtc3BpbiIpLHQuc2hvdygpfX0pfSxzaG93OmZ1bmN0aW9u KCl7dGhpcy4kZWwuPQpzaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5oaWRlKCl9LF9m dWxsc2NyZWVuOmZ1bmN0aW9uKGUsdCl7ZS5jc3MoImg9CmVpZ2h0IiwkKHdpbmRvdykuaGVpZ2h0 KCktdCksJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe2UuY3NzKCJoZWlnaHQiLCQodz0KaW5k b3cpLmhlaWdodCgpLXQpfSl9LF9jcmVhdGVDb250YWluZXI6ZnVuY3Rpb24oZSx0KXt0PTNEdHx8 MTtmb3IodmFyIG4gaW4gPQp0aGlzLmNvbnRhaW5lcl9saXN0KXRoaXMuY29udGFpbmVyX2xpc3Rb bl0ucmVtb3ZlKCk7dGhpcy5jb250YWluZXJfbGlzdD0zRFs9Cl0sdGhpcy5jYW52YXNfbGlzdD0z RFtdO2Zvcih2YXIgbj0zRDA7bjx0O24rKyl7dmFyIHI9M0QkKHRoaXMuX3RlbXBsYXRlQ29udD0K YWluZXIoZSxwYXJzZUludCgxMDAvdCkpKTt0aGlzLiRlbC5hcHBlbmQociksdGhpcy5jb250YWlu ZXJfbGlzdFtuXT0zRHIsdGhpPQpzLmNhbnZhc19saXN0W25dPTNEci5maW5kKCIuY2hhcnRzLXZp ZXdwb3J0LWNhbnZhcyIpLmF0dHIoImlkIil9fSxfZHJhdzpmdW49CmN0aW9uKGUpe3ZhciB0PTNE dGhpcyxuPTNEdGhpcy5hcHAuZGVmZXJyZWQucmVnaXN0ZXIoKSxyPTNEZS5nZXQoInR5cGUiKTt0 aD0KaXMuY2hhcnRfZGVmaW5pdGlvbj0zRGUuZGVmaW5pdGlvbjt2YXIgaT0zRDE7ZS5zZXR0aW5n cy5nZXQoInVzZV9wYW5lbHMiKT0KPTNEPTNEPTNEInRydWUiJiYoaT0zRGUuZ3JvdXBzLmxlbmd0 aCksdGhpcy5fY3JlYXRlQ29udGFpbmVyKHRoaXMuY2hhcnRfZGVmPQppbml0aW9uLnRhZyxpKSxl LnN0YXRlKCJ3YWl0IiwiUGxlYXNlIHdhaXQuLi4iKTtpZighdGhpcy5jaGFydF9kZWZpbml0aW9u LmU9CnhlY3V0ZXx8dGhpcy5jaGFydF9kZWZpbml0aW9uLmV4ZWN1dGUmJmUuZ2V0KCJtb2RpZmll ZCIpKXRoaXMuYXBwLmpvYnMuY2xlYT0KbnVwKGUpLGUuc2V0KCJtb2RpZmllZCIsITEpO3ZhciB0 PTNEdGhpcztyZXF1aXJlKFsicGx1Z2luL2NoYXJ0cy8iK3RoaXMuYXBwPQouY2hhcnRQYXRoKHIp KyIvd3JhcHBlciJdLGZ1bmN0aW9uKHIpe2lmKHQuY2hhcnRfZGVmaW5pdGlvbi5leGVjdXRlKXQu YXBwLmo9Cm9icy5yZXF1ZXN0KGUsdC5fZGVmYXVsdFNldHRpbmdzU3RyaW5nKGUpLHQuX2RlZmF1 bHRSZXF1ZXN0U3RyaW5nKGUpLGZ1bmN0aT0Kb24oKXt2YXIgaT0zRG5ldyByKHQuYXBwLHtwcm9j ZXNzX2lkOm4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpb25hcnk6dC5fZGVmYXVsPQp0UmVxdWVzdERp Y3Rpb25hcnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlzdH0pfSxmdW5jdGlvbigpe3RoaXMu YXBwLmRlZmU9CnJyZWQuZG9uZShuKX0pO2Vsc2UgdmFyIGk9M0RuZXcgcih0LmFwcCx7cHJvY2Vz c19pZDpuLGNoYXJ0OmUscmVxdWVzdF9kaWN0aT0Kb25hcnk6dC5fZGVmYXVsdFJlcXVlc3REaWN0 aW9uYXJ5KGUpLGNhbnZhc19saXN0OnQuY2FudmFzX2xpc3R9KX0pfSxfZGVmYXVsPQp0UmVxdWVz dFN0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QwLHI9M0R0aGlzO3JldHVybiBlLmdy b3Vwcy5lYWNoKGY9CnVuY3Rpb24oZSl7bisrO2Zvcih2YXIgaSBpbiByLmNoYXJ0X2RlZmluaXRp b24uY29sdW1ucyl0Kz0zRGkrIl8iK24rIjoiKyhwYT0KcnNlSW50KGUuZ2V0KGkpKSsxKSsiLCAi fSksdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKX0sX2RlZmF1bHRTZXR0aW5nc1N0cmluPQpnOmZ1 bmN0aW9uKGUpe3ZhciB0PTNEIiI7Zm9yKGtleSBpbiBlLnNldHRpbmdzLmF0dHJpYnV0ZXMpdCs9 M0RrZXkrIjoiK2Uuc2U9CnR0aW5ncy5nZXQoa2V5KSsiLCAiO3JldHVybiB0LnN1YnN0cmluZygw LHQubGVuZ3RoLTIpfSxfZGVmYXVsdFJlcXVlc3REaWN0aT0Kb25hcnk6ZnVuY3Rpb24oZSl7dmFy IHQ9M0R7Z3JvdXBzOltdfTt0aGlzLmNoYXJ0X2RlZmluaXRpb24uZXhlY3V0ZT90LmlkPTNEPQpl LmdldCgiZGF0YXNldF9pZF9qb2IiKTp0LmlkPTNEZS5nZXQoImRhdGFzZXRfaWQiKTt2YXIgcj0z RDAsaT0zRHRoaXM7cmV0dXI9Cm4gZS5ncm91cHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcz0zRHt9 O2Zvcih2YXIgbyBpbiBpLmNoYXJ0X2RlZmluaXRpb24uY29sdT0KbW5zKXt2YXIgdT0zRGkuY2hh cnRfZGVmaW5pdGlvbi5jb2x1bW5zW29dO3Nbb109M0RuLm1lcmdlKHtpbmRleDplLmdldChvKX0s PQp1KX10Lmdyb3Vwcy5wdXNoKHtrZXk6KytyKyI6IitlLmdldCgia2V5IiksY29sdW1uczpzfSl9 KSx0fSxfdGVtcGxhdGU6ZnVuY3Q9Cmlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEImNoYXJ0cy12 aWV3cG9ydCI+PGRpdiBpZD0zRCJpbmZvIiBjbGFzcz0zRCJpbmZvIj0KPjxzcGFuIGlkPTNEImlj b24iIGNsYXNzPTNEImljb24iLz48c3BhbiBpZD0zRCJ0ZXh0IiBjbGFzcz0zRCJ0ZXh0IiAvPjwv ZGl2PQo+PC9kaXY+J30sX3RlbXBsYXRlQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuJzxk aXYgY2xhc3M9M0QiY2hhcnRzLXZpZXc9CnBvcnQtY29udGFpbmVyIiBzdHlsZT0zRCJ3aWR0aDon K3QrJyU7Ij4nKyc8ZGl2IGlkPTNEIm1lbnUiLz4nKyI8IitlKycgaWQ9Cj0zRCInK24udXVpZCgp KyciIGNsYXNzPTNEImNoYXJ0cy12aWV3cG9ydC1jYW52YXMiPicrIjwvZGl2PiJ9fSl9KSxkZWZp bmUoIj0KcGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5j dGlvbihlKXtmdW5jdGlvbiB0KGUpe2UuPQokZWwuZmluZCgic3ZnIikubGVuZ3RoPjA/cihlKTpu KGUpfWZ1bmN0aW9uIG4oZSl7dHJ5e3ZhciB0PTNEZS4kZWwuZmluZCgiLmo9CnFwbG90LXRhcmdl dCIpLG49M0R0LmpxcGxvdFRvSW1hZ2VTdHIoe30pO24mJih3aW5kb3cubG9jYXRpb24uaHJlZj0z RG4ucmVwbD0KYWNlKCJpbWFnZS9wbmciLCJpbWFnZS9vY3RldC1zdHJlYW0iKSl9Y2F0Y2gocil7 Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gU2NyPQplZW5zaG90OjpfZnJvbUNhbnZhcygpIC0gIity KSxlLmVycm9yJiZlLmVycm9yKCJQbGVhc2UgcmVkdWNlIHlvdXIgY2hhcnQgdG89CiBhIHNpbmds ZSBwYW5lbCBhbmQgdHJ5IGFnYWluLiIpfX1mdW5jdGlvbiByKGUpe3ZhciB0PTNEZS4kZWwsbj0z RGUudXJsLHI9Cj0zRGUubmFtZSxzPTNEbmV3IFhNTFNlcmlhbGl6ZXIsbz0zRGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHU9M0QkKD0KbyksYT0zRHQuZmluZCgic3ZnIikubGVuZ3Ro LGY9M0R0LmZpbmQoInN2ZyIpLmZpcnN0KCksbD0zRHBhcnNlSW50KGYuY3NzKCJoPQplaWdodCIp KSxjPTNEcGFyc2VJbnQoZi5jc3MoIndpZHRoIikpO3UuYXR0cigid2lkdGgiLGMqYSksdS5hdHRy KCJoZWlnaHQiLGw9CiksKCFvLmdldENvbnRleHR8fCFvLmdldENvbnRleHQoIjJkIikpJiZhbGVy dCgiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydD0KIHRoaXMgZmVhdHVyZSwgcGxlYXNlIHVz ZSBhIG1vZGVybiBicm93c2VyIik7dmFyIGg9M0RvLmdldENvbnRleHQoIjJkIikscD0KPTNEMDt0 LmZpbmQoInN2ZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0zRCQodGhpcyk7ZS5hdHRyKHt2ZXJz aW9uOiIxLjEiLHhtPQpsbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpjLGhl aWdodDpsfSk7dmFyIHQ9M0RzLnNlcmlhbGl6ZVRvU3Q9CnJpbmcodGhpcyk7aC5kcmF3U3ZnKHQs cCwwLGMsbCkscCs9M0RjfSksd2luZG93LmxvY2F0aW9uLmhyZWY9M0RpKG8sby5nZXRDbz0KbnRl eHQoIjJkIiksIndoaXRlIikucmVwbGFjZSgiaW1hZ2UvcG5nIiwiaW1hZ2Uvb2N0ZXQtc3RyZWFt Iil9ZnVuY3Rpb24gaShlPQosdCxuKXt2YXIgcj0zRGUud2lkdGgsaT0zRGUuaGVpZ2h0LHM7aWYo bil7cz0zRHQuZ2V0SW1hZ2VEYXRhKDAsMCxyLGkpO3ZhciA9Cm89M0R0Lmdsb2JhbENvbXBvc2l0 ZU9wZXJhdGlvbjt0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0zRCJkZXN0aW5hdGlvbi1vdj0K ZXIiLHQuZmlsbFN0eWxlPTNEbix0LmZpbGxSZWN0KDAsMCxyLGkpfXZhciB1PTNEZS50b0RhdGFV UkwoImltYWdlL3BuZyIpO3JlPQp0dXJuIG4mJih0LmNsZWFyUmVjdCgwLDAscixpKSx0LnB1dElt YWdlRGF0YShzLDAsMCksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXQ9Cmlvbj0zRG8pLHV9ZnVuY3Rp b24gcyhlKXt3aW5kb3cubG9jYXRpb24uaHJlZj0zRCJkYXRhOm5vbmUvbm9uZTtiYXNlNjQsIiti dD0Kb2EoYShlKS5zdHJpbmcpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0IGluIGRvY3VtZW50LnN0 eWxlU2hlZXRzKXt2YXIgbj0zRGRvPQpjdW1lbnQuc3R5bGVTaGVldHNbdF0scj0zRG4uY3NzUnVs ZXM7aWYocilmb3IodmFyIGk9M0QwLHM9M0RyLmxlbmd0aDtpPHM7aSs9CispdHJ5e2UuZmluZChy W2ldLnNlbGVjdG9yVGV4dCkuZWFjaChmdW5jdGlvbihlLHQpe3Quc3R5bGUuY3NzVGV4dCs9M0Ry W2ldLj0Kc3R5bGUuY3NzVGV4dH0pfWNhdGNoKG8pe319fWZ1bmN0aW9uIHUoZSl7dmFyIHQ9M0Rh KGUpLG49M0R7ZmlsZW5hbWU6bmFtZXx8PQoiY2hhcnQiLHR5cGU6ImFwcGxpY2F0aW9uL3BkZiIs aGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsc2NhbGU6Mixzdmc6dC49CnN0cmluZ30scj0z RCQoImJvZHkiKSxpPTNEci5maW5kKCIjdmlld3BvcnQtZm9ybSIpO2kubGVuZ3RoPTNEPTNEPTNE MCYmKGk9Cj0zRCQoIjxmb3JtPiIse2lkOiJ2aWV3cG9ydC1mb3JtIixtZXRob2Q6InBvc3QiLGFj dGlvbjoiaHR0cDovL2V4cG9ydC5oaWdoYz0KaGFydHMuY29tLyIsZGlzcGxheToibm9uZSJ9KSxy LmFwcGVuZChpKSksaS5lbXB0eSgpO2ZvcihuYW1lIGluIG4pe3ZhciBzPTNEPQokKCI8aW5wdXQv PiIse3R5cGU6ImhpZGRlbiIsbmFtZTpuYW1lLHZhbHVlOm5bbmFtZV19KTtpLmFwcGVuZChzKX10 cnl7aS5zdWI9Cm1pdCgpfWNhdGNoKG8pe2NvbnNvbGUubG9nKG8pfX1mdW5jdGlvbiBhKGUpe2lm KGUuJGVsLmZpbmQoInN2ZyIpLmxlbmd0aD0zRD0KPTNEMCYmZS5lcnJvcil7ZS5lcnJvcigiTm8g U1ZHIGZvdW5kLiBUaGlzIGNoYXJ0IHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBTVkcvPQpQREYgZXhw b3J0LiIpO3JldHVybn12YXIgdD0zRGUuJGVsLG49M0R0LmZpbmQoInN2ZyIpLmxlbmd0aCxyPTNE cGFyc2VJbnQodC49CmZpbmQoInN2ZyIpLmZpcnN0KCkuY3NzKCJoZWlnaHQiKSksaT0zRHBhcnNl SW50KHQuZmluZCgic3ZnIikuZmlyc3QoKS5jc3MoIj0Kd2lkdGgiKSkscz0zRG5ldyBYTUxTZXJp YWxpemVyLHU9M0QkKCI8c3ZnLz4iKTt1LmF0dHIoe3ZlcnNpb246IjEuMSIseG1sbnM6PQoiaHR0 cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmkqbixoZWlnaHQ6cn0pO3ZhciBhPTNEIiIs Zj0zRDA7cmV0dXJuIHQ9Ci5maW5kKCJzdmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9M0QkKHRo aXMpLmNsb25lKCk7byhlKTt2YXIgdD0zRCQoJzxnIHRyYT0KbnNmb3JtPTNEInRyYW5zbGF0ZSgn K2YrJywgMCkiPicpO3QuYXBwZW5kKGUuZmluZCgiZyIpLmZpcnN0KCkpLHUuYXBwZW5kKHQpPQos Zis9M0RpfSkse3N0cmluZzpzLnNlcmlhbGl6ZVRvU3RyaW5nKHVbMF0pLGhlaWdodDpyLHdpZHRo Oml9fXJldHVybntjcmVhdGU9ClBORzp0LGNyZWF0ZVNWRzpzLGNyZWF0ZVBERjp1fX0pLGRlZmlu ZSgicGx1Z2luL3ZpZXdzL3ZpZXdlciIsWyJ1dGlscy91dGlscz0KIiwibXZjL3VpL3VpLW1pc2Mi LCJtdmMvdWkvdWktcG9ydGxldCIsInBsdWdpbi92aWV3cy92aWV3cG9ydCIsInBsdWdpbi9saWJy PQphcnkvc2NyZWVuc2hvdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIEJhY2tib25lLlZp ZXcuZXh0ZW5kKHtpbml0aWFsaXo9CmU6ZnVuY3Rpb24oZSxzKXt0aGlzLmFwcD0zRGUsdGhpcy5j aGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMudmlld3BvcnRfdmlldz0KPTNEbmV3IHIoZSk7dmFy IG89M0R0aGlzO3RoaXMubWVzc2FnZT0zRG5ldyB0Lk1lc3NhZ2U7dmFyIHU9M0RuZXcgdC5CdXR0 b25NPQplbnUoe2ljb246ImZhLWNhbWVyYSIsdGl0bGU6IlNjcmVlbnNob3QiLHRvb2x0aXA6IkRv d25sb2FkIGFzIFBORywgU1ZHIG9yIFA9CkRGIGZpbGUifSk7dS5hZGRNZW51KHtpZDoiYnV0dG9u LXBuZyIsdGl0bGU6IlNhdmUgYXMgUE5HIixpY29uOiJmYS1maWxlIixvbj0KY2xpY2s6ZnVuY3Rp b24oKXtvLl93YWl0KG8uY2hhcnQsZnVuY3Rpb24oKXtpLmNyZWF0ZVBORyh7JGVsOm8udmlld3Bv cnRfdmllPQp3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihl KXtvLm1lc3NhZ2UudXBkYXRlKHttZXNzYWc9CmU6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX0p LHUuYWRkTWVudSh7aWQ6ImJ1dHRvbi1zdmciLHRpdGxlOiJTYXZlIGFzIFNWRz0KIixpY29uOiJm YS1maWxlLXRleHQtbyIsb25jbGljazpmdW5jdGlvbigpe28uX3dhaXQoby5jaGFydCxmdW5jdGlv bigpe2kuY3JlPQphdGVTVkcoeyRlbDpvLnZpZXdwb3J0X3ZpZXcuJGVsLHRpdGxlOm8uY2hhcnQu Z2V0KCJ0aXRsZSIpLGVycm9yOmZ1bmN0aW9uKGU9Cil7by5tZXNzYWdlLnVwZGF0ZSh7bWVzc2Fn ZTplLHN0YXR1czoiZGFuZ2VyIn0pfX0pfSl9fSksdS5hZGRNZW51KHtpZDoiYnV0dD0Kb24tcG5n Iix0aXRsZToiU2F2ZSBhcyBQREYiLGljb246ImZhLWZpbGUtbyIsb25jbGljazpmdW5jdGlvbigp e28uYXBwLm1vZGFsPQouc2hvdyh7dGl0bGU6IlNlbmQgY2hhcnQgZGF0YSBmb3IgUERGIGNyZWF0 aW9uIixib2R5OiJHYWxheHkgZG9lcyBub3QgcHJvdmk9CmRlIGludGVncmF0ZWQgUERGIGV4cG9y dCBzY3JpcHRzLiBZb3UgbWF5IGNsaWNrICdDb250aW51ZScgdG8gY3JlYXRlIHRoZSBQRD0KRiBi eSB1c2luZyBhIDNyZCBwYXJ0eSBzZXJ2aWNlIChodHRwczovL2V4cG9ydC5oaWdoY2hhcnRzLmNv bSkuIixidXR0b25zOntDPQphbmNlbDpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUoKX0sQ29u dGludWU6ZnVuY3Rpb24oKXtvLmFwcC5tb2RhbC5oaWRlKCk9CixvLl93YWl0KG8uY2hhcnQsZnVu Y3Rpb24oKXtpLmNyZWF0ZVBERih7JGVsOm8udmlld3BvcnRfdmlldy4kZWwsdGl0bGU6by5jaD0K YXJ0LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtvLm1lc3NhZ2UudXBkYXRlKHttZXNz YWdlOmUsc3RhdHVzOiJkYW5nPQplciJ9KX19KX0pfX19KX19KSx0aGlzLnBvcnRsZXQ9M0RuZXcg bi5WaWV3KHtpY29uOiJmYS1iYXItY2hhcnQtbyIsdGl0bGU6IlY9Cmlld3BvcnQiLHNjcm9sbGFi bGU6ITEsb3BlcmF0aW9uczp7ZWRpdF9idXR0b246bmV3IHQuQnV0dG9uSWNvbih7aWNvbjoiZmEt ZT0KZGl0Iix0b29sdGlwOiJDdXN0b21pemUgdGhpcyBjaGFydCIsdGl0bGU6IkVkaXRvciIsb25j bGljazpmdW5jdGlvbigpe28uX3dhPQppdChvLmNoYXJ0LGZ1bmN0aW9uKCl7by5hcHAuZ28oImVk aXRvciIpfSl9fSkscGljdHVyZV9idXR0b25fbWVudTp1fX0pLHRoaXM9Ci5wb3J0bGV0LmFwcGVu ZCh0aGlzLm1lc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMudmlld3BvcnRfdmll dy4kZT0KbCksdGhpcy5zZXRFbGVtZW50KHRoaXMucG9ydGxldC4kZWwpO3ZhciBvPTNEdGhpczt0 aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6dGl0PQpsZSIsZnVuY3Rpb24oKXtvLl9yZWZyZXNoVGl0bGUo KX0pfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuc2hvdygpLCQod2luZG89CncpLnRyaWdnZXIo InJlc2l6ZSIpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSxfcmVmcmVzaFRpdGxl OmZ1bmN0aT0Kb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJ0aXRsZSIpO3RoaXMucG9ydGxl dC50aXRsZShlKX0sX3dhaXQ6ZnVuY3Rpb24oPQplLHQpe3RoaXMuYXBwLmRlZmVycmVkLnJlYWR5 KCk/dCgpOnRoaXMubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6IllvdXIgY2hhcnQ9CiBpcyBjdXJy ZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiBQbGVhc2Ugd2FpdCBhbmQgdHJ5IGFnYWluLiJ9KX19KX0p LGRlZmluZSgibT0KdmMvdWkvdWktdGFicyIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3Zh ciB0PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wPQp0aW9uc0RlZmF1bHQ6e3RpdGxlX25ldzoi IixvcGVyYXRpb25zOm51bGwsb25uZXc6bnVsbCxtYXg6bnVsbCxvbmNoYW5nZTpudWw9Cmx9LGlu aXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlPTNEITEsdGhpcy4kbmF2PTNEbnVsbCx0 aGlzLiRjb250ZW50PQo9M0RudWxsLHRoaXMuZmlyc3RfdGFiPTNEbnVsbCx0aGlzLmN1cnJlbnRf aWQ9M0RudWxsLHRoaXMub3B0aW9ucz0zRGUubWVyZ2U9Cih0LHRoaXMub3B0aW9uc0RlZmF1bHQp O3ZhciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiRuYXY9Cj0zRG4u ZmluZCgiLnRhYi1uYXZpZ2F0aW9uIiksdGhpcy4kY29udGVudD0zRG4uZmluZCgiLnRhYi1jb250 ZW50IiksdGhpcy5zZT0KdEVsZW1lbnQobiksdGhpcy5saXN0PTNEe307dmFyIHI9M0R0aGlzO3Ro aXMub3B0aW9ucy5vcGVyYXRpb25zJiYkLmVhY2godGhpPQpzLm9wdGlvbnMub3BlcmF0aW9ucyxm dW5jdGlvbihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRuYXYuZmluZCgiLm9wZXJhdGk9Cm9u cyIpLmFwcGVuZCh0LiRlbCl9KTtpZih0aGlzLm9wdGlvbnMub25uZXcpe3ZhciBpPTNEJCh0aGlz Ll90ZW1wbGF0ZV90YWJfbj0KZXcodGhpcy5vcHRpb25zKSk7dGhpcy4kbmF2LmFwcGVuZChpKSxp LnRvb2x0aXAoe3RpdGxlOiJBZGQgYSBuZXcgdGFiIixwbGFjPQplbWVudDoiYm90dG9tIixjb250 YWluZXI6ci4kZWx9KSxpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7aS50b29sdGlwKCJoaWRlIik9 CixyLm9wdGlvbnMub25uZXcoKX0pfX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiBfLnNpemUodGhp cy5saXN0KX0sY3VycmVudDpmdT0KbmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsLmZpbmQoIi50YWIt cGFuZS5hY3RpdmUiKS5hdHRyKCJpZCIpfSxhZGQ6ZnVuY3Rpb24oPQplKXt2YXIgdD0zRHRoaXMs bj0zRGUuaWQscj0zRCQodGhpcy5fdGVtcGxhdGVfdGFiKGUpKSxpPTNEJCh0aGlzLl90ZW1wbGF0 ZV89CnRhYl9jb250ZW50KGUpKTt0aGlzLmxpc3Rbbl09M0RlLm9uZGVsPyEwOiExLHRoaXMub3B0 aW9ucy5vbm5ldz90aGlzLiRuYXYuZj0KaW5kKCIjbmV3LXRhYiIpLmJlZm9yZShyKTp0aGlzLiRu YXYuYXBwZW5kKHIpLGkuYXBwZW5kKGUuJGVsKSx0aGlzLiRjb250ZW50PQouYXBwZW5kKGkpLHRo aXMuc2l6ZSgpPTNEPTNEMSYmKHIuYWRkQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhc3MoImFjdGl2 ZSIpLHQ9Cmhpcy5maXJzdF90YWI9M0RuKSx0aGlzLm9wdGlvbnMubWF4JiZ0aGlzLnNpemUoKT49 M0R0aGlzLm9wdGlvbnMubWF4JiZ0aGlzLj0KJGVsLmZpbmQoIiNuZXctdGFiIikuaGlkZSgpO2lm KGUub25kZWwpe3ZhciBzPTNEci5maW5kKCIjZGVsZXRlIik7cy50b29sdGlwPQooe3RpdGxlOiJE ZWxldGUgdGhpcyB0YWIiLHBsYWNlbWVudDoiYm90dG9tIixjb250YWluZXI6dC4kZWx9KSxzLm9u KCJjbGljayI9CixmdW5jdGlvbigpe3JldHVybiBzLnRvb2x0aXAoImRlc3Ryb3kiKSx0LiRlbC5m aW5kKCIudG9vbHRpcCIpLnJlbW92ZSgpLGUubz0KbmRlbCgpLCExfSl9ci5vbigiY2xpY2siLGZ1 bmN0aW9uKHIpe3IucHJldmVudERlZmF1bHQoKSxlLm9uY2xpY2s/ZS5vbmNsaWNrPQooKTp0LnNo b3cobil9KSx0aGlzLmN1cnJlbnRfaWR8fCh0aGlzLmN1cnJlbnRfaWQ9M0RuKX0sZGVsOmZ1bmN0 aW9uKGUpe3RoaXM9Ci4kZWwuZmluZCgiI3RhYi0iK2UpLnJlbW92ZSgpLHRoaXMuJGVsLmZpbmQo IiMiK2UpLnJlbW92ZSgpLHRoaXMuZmlyc3RfdGFiPQo9M0Q9M0RlJiYodGhpcy5maXJzdF90YWI9 M0RudWxsKSx0aGlzLmZpcnN0X3RhYiE9M0RudWxsJiZ0aGlzLnNob3codGhpcy5maXI9CnN0X3Rh YiksdGhpcy5saXN0W2VdJiZkZWxldGUgdGhpcy5saXN0W2VdLHRoaXMuc2l6ZSgpPHRoaXMub3B0 aW9ucy5tYXgmJnRoaT0Kcy4kZWwuZmluZCgiI25ldy10YWIiKS5zaG93KCl9LGRlbFJlbW92YWJs ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmxpPQpzdCl0aGlzLmRlbChlKX0sc2hvdzpm dW5jdGlvbihlKXt0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0aGlzLnZpc2libGU9M0QhMCw9CmUm Jih0aGlzLiRlbC5maW5kKCIjdGFiLSIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVDbGFzcygiYWN0 aXZlIiksdGhpcy4kZWwuZj0KaW5kKCIjIit0aGlzLmN1cnJlbnRfaWQpLnJlbW92ZUNsYXNzKCJh Y3RpdmUiKSx0aGlzLiRlbC5maW5kKCIjdGFiLSIrZSkuYWRkPQpDbGFzcygiYWN0aXZlIiksdGhp cy4kZWwuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuY3VycmVudF9pZD0zRGU9 CiksdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UoZSl9LGhpZGU6 ZnVuY3Rpb24oKXt0aGlzLiRlbD0KLmZhZGVPdXQoImZhc3QiKSx0aGlzLnZpc2libGU9M0QhMX0s aGlkZU9wZXJhdGlvbjpmdW5jdGlvbihlKXt0aGlzLiRuYXYuZmluPQpkKCIjIitlKS5oaWRlKCl9 LHNob3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kbmF2LmZpbmQoIiMiK2UpLnNob3coKX0s c2U9CnRPcGVyYXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHRoaXMuJG5hdi5maW5kKCIjIitl KTtuLm9mZigiY2xpY2siKSxuLm9uKD0KImNsaWNrIix0KX0sdGl0bGU6ZnVuY3Rpb24oZSx0KXt2 YXIgbj0zRHRoaXMuJGVsLmZpbmQoIiN0YWItdGl0bGUtdGV4dC0iK2UpPQo7cmV0dXJuIHQmJm4u aHRtbCh0KSxuLmh0bWwoKX0scmV0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0zRDA7Zm9yKHZhciBu IGluIHQ9Cmhpcy5saXN0KXRoaXMudGl0bGUobiwrK3QrIjogIitlKX0sX3RlbXBsYXRlOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2IGNsYXNzPQo9M0QidWktdGFicyB0YWJiYWJsZSB0YWJzLWxlZnQi Pjx1bCBpZD0zRCJ0YWItbmF2aWdhdGlvbiIgY2xhc3M9M0QidGFiLW5hdmk9CmdhdGlvbiBuYXYg bmF2LXRhYnMiPjxkaXYgY2xhc3M9M0Qib3BlcmF0aW9ucyIgc3R5bGU9M0QiZmxvYXQ6IHJpZ2h0 OyBtYXJnaT0Kbi1ib3R0b206IDRweDsiPjwvZGl2PjwvdWw+PGRpdiBpZD0zRCJ0YWItY29udGVu dCIgY2xhc3M9M0QidGFiLWNvbnRlbnQiLz48PQovZGl2Pid9LF90ZW1wbGF0ZV90YWJfbmV3OmZ1 bmN0aW9uKGUpe3JldHVybic8bGkgaWQ9M0QibmV3LXRhYiI+PGEgaHJlZj0zRCI9CmphdmFzY3Jp cHQ6dm9pZCgwKTsiPjxpIGNsYXNzPTNEInVpLXRhYnMtYWRkIGZhIGZhLXBsdXMtY2lyY2xlIi8+ JytlLnRpdGxlXz0KbmV3KyI8L2E+IisiPC9saT4ifSxfdGVtcGxhdGVfdGFiOmZ1bmN0aW9uKGUp e3ZhciB0PTNEJzxsaSBpZD0zRCJ0YWItJytlLmlkPQorJyIgY2xhc3M9M0QidGFiLWVsZW1lbnQi PicrJzxhIGlkPTNEInRhYi10aXRsZS1saW5rLScrZS5pZCsnIiB0aXRsZT0zRCIiIGg9CnJlZj0z RCIjJytlLmlkKyciIGRhdGEtb3JpZ2luYWwtdGl0bGU9M0QiIj4nKyc8c3BhbiBpZD0zRCJ0YWIt dGl0bGUtdGV4dC0nKz0KZS5pZCsnIiBjbGFzcz0zRCJ0YWItdGl0bGUtdGV4dCI+JytlLnRpdGxl KyI8L3NwYW4+IjtyZXR1cm4gZS5vbmRlbCYmKHQrPTNEPQonPGkgaWQ9M0QiZGVsZXRlIiBjbGFz cz0zRCJ1aS10YWJzLWRlbGV0ZSBmYSBmYS1taW51cy1jaXJjbGUiLz4nKSx0Kz0zRCI8L2E9Cj48 L2xpPiIsdH0sX3RlbXBsYXRlX3RhYl9jb250ZW50OmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGlk PTNEIicrZS5pZCsnIiBjbD0KYXNzPTNEInRhYi1wYW5lIi8+J319KTtyZXR1cm57Vmlldzp0fX0p LGRlZmluZSgibXZjL3VpL3VpLXRhYmxlIixbInV0aWxzL3V0PQppbHMiXSxmdW5jdGlvbihlKXt2 YXIgdD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtyb3c6bnVsbCxyb3dfY291bnQ6MCxvcHRpb249 CnNEZWZhdWx0Ontjb250ZW50OiJObyBjb250ZW50IGF2YWlsYWJsZS4iLG9uY2hhbmdlOm51bGws b25kYmxjbGljazpudWxsLG9uYz0Kb25maXJtOm51bGwsY2xzOiJ1aS10YWJsZSIsY2xzX3RyOiIi fSxldmVudHM6e2NsaWNrOiJfb25jbGljayIsZGJsY2xpY2s6Il9vPQpuZGJsY2xpY2sifSxpbml0 aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNE ZWY9CmF1bHQpO3ZhciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiR0 aGVhZD0zRG4uZmluZCgidGhlYWQiKT0KLHRoaXMuJHRib2R5PTNEbi5maW5kKCJ0Ym9keSIpLHRo aXMuJHRtZXNzYWdlPTNEbi5maW5kKCJ0bWVzc2FnZSIpLHRoaXMuc2V0PQpFbGVtZW50KG4pLHRo aXMucm93PTNEdGhpcy5fcm93KCl9LGFkZEhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdD0zRCQoIjx0 aD48L3Q9Cmg+Iik7dC5hcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5kKHQpfSxhcHBlbmRIZWFkZXI6 ZnVuY3Rpb24oKXt0aGlzLiR0aGVhZC5hcD0KcGVuZCh0aGlzLnJvdyksdGhpcy5yb3c9M0QkKCI8 dHI+PC90cj4iKX0sYWRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRCQoIjx0PQpkPjwvdGQ+Iik7 dCYmci5jc3MoIndpZHRoIix0KSxuJiZyLmNzcygidGV4dC1hbGlnbiIsbiksci5hcHBlbmQoZSks dGhpcy5yb3c9Ci5hcHBlbmQocil9LGFwcGVuZDpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbW1pdChl LHQsITEpfSxwcmVwZW5kOmZ1bmN0aW9uKGUsdD0KKXt0aGlzLl9jb21taXQoZSx0LCEwKX0sZ2V0 OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRlbC5maW5kKCIjIitlKX0sZGVsOmZ1PQpuY3Rpb24o ZSl7dmFyIHQ9M0R0aGlzLiR0Ym9keS5maW5kKCIjIitlKTt0Lmxlbmd0aD4wJiYodC5yZW1vdmUo KSx0aGlzLnJvd189CmNvdW50LS0sdGhpcy5fcmVmcmVzaCgpKX0sZGVsQWxsOmZ1bmN0aW9uKCl7 dGhpcy4kdGJvZHkuZW1wdHkoKSx0aGlzLnJvd19jbz0KdW50PTNEMCx0aGlzLl9yZWZyZXNoKCl9 LHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYmVmb3JlPTNEdGhpcy4kdGJvZHkuZmluZCgiPQouY3Vy cmVudCIpLmF0dHIoImlkIiksZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiR0Ym9keS5maW5kKCJ0 ciIpLnJlbW92ZUNsYXM9CnMoImN1cnJlbnQiKSxlJiZ0aGlzLiR0Ym9keS5maW5kKCIjIitlKS5h ZGRDbGFzcygiY3VycmVudCIpKTt2YXIgdD0zRHRoaXMuJD0KdGJvZHkuZmluZCgiLmN1cnJlbnQi KS5hdHRyKCJpZCIpO3JldHVybiB0PTNEPTNEPTNEdW5kZWZpbmVkP251bGw6KHQhPTNEdGhpPQpz LmJlZm9yZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UoZSks dCl9LHNpemU6ZnVuY3Rpb249Cigpe3JldHVybiB0aGlzLiR0Ym9keS5maW5kKCJ0ciIpLmxlbmd0 aH0sX2NvbW1pdDpmdW5jdGlvbihlLHQsbil7dGhpcy5kZWwoZT0KKSx0aGlzLnJvdy5hdHRyKCJp ZCIsZSksbj90aGlzLiR0Ym9keS5wcmVwZW5kKHRoaXMucm93KTp0aGlzLiR0Ym9keS5hcHBlbmQo PQp0aGlzLnJvdyksdCYmKHRoaXMucm93LmhpZGUoKSx0aGlzLnJvdy5mYWRlSW4oKSksdGhpcy5y b3c9M0R0aGlzLl9yb3coKSx0aGk9CnMucm93X2NvdW50KyssdGhpcy5fcmVmcmVzaCgpfSxfcm93 OmZ1bmN0aW9uKCl7cmV0dXJuICQoJzx0ciBjbGFzcz0zRCInK3RoaT0Kcy5vcHRpb25zLmNsc190 cisnIj48L3RyPicpfSxfb25jbGljazpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMudmFsdWUoKSxu PTNEPQokKGUudGFyZ2V0KS5jbG9zZXN0KCJ0ciIpLmF0dHIoImlkIik7biE9M0QiIiYmbiYmdCE9 M0RuJiYodGhpcy5vcHRpb25zLm9uY289Cm5maXJtP3RoaXMub3B0aW9ucy5vbmNvbmZpcm0obik6 dGhpcy52YWx1ZShuKSl9LF9vbmRibGNsaWNrOmZ1bmN0aW9uKGUpe3Zhcj0KIHQ9M0R0aGlzLnZh bHVlKCk7dCYmdGhpcy5vcHRpb25zLm9uZGJsY2xpY2smJnRoaXMub3B0aW9ucy5vbmRibGNsaWNr KHQpfSxfPQpyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5yb3dfY291bnQ9M0Q9M0QwP3RoaXMuJHRt ZXNzYWdlLnNob3coKTp0aGlzLiR0bWVzc2E9CmdlLmhpZGUoKX0sX3RlbXBsYXRlOmZ1bmN0aW9u KGUpe3JldHVybic8ZGl2Pjx0YWJsZSBjbGFzcz0zRCInK2UuY2xzKyciPicrIj0KPHRoZWFkPjwv dGhlYWQ+IisiPHRib2R5PjwvdGJvZHk+IisiPC90YWJsZT4iKyI8dG1lc3NhZ2U+IitlLmNvbnRl bnQrIjwvdG1lPQpzc2FnZT4iKyI8ZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoInBs dWdpbi92aWV3cy9ncm91cCIsWyJtdmMvdWkvdWk9Ci10YWJsZSIsIm12Yy91aS91aS1taXNjIiwi dXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJhY2tib25lLlZpZT0Kdy5leHRl bmQoe2luaXRpYWxpemU6ZnVuY3Rpb24ocixpKXt0aGlzLmFwcD0zRHI7dmFyIHM9M0R0aGlzO3Ro aXMuY2hhcnQ9M0R0PQpoaXMuYXBwLmNoYXJ0LHRoaXMuZ3JvdXA9M0RpLmdyb3VwLHRoaXMuZ3Jv dXBfa2V5PTNEbmV3IHQuSW5wdXQoe3BsYWNlaG9sZGU9CnI6IkRhdGEgbGFiZWwiLG9uY2hhbmdl OmZ1bmN0aW9uKGUpe3MuZ3JvdXAuc2V0KCJrZXkiLGUpfX0pLHRoaXMudGFibGU9M0RuZT0KdyBl LlZpZXcoe2NvbnRlbnQ6Ik5vIGRhdGEgY29sdW1uLiJ9KTt2YXIgbz0zRCQoIjxkaXYvPiIpO28u YXBwZW5kKG4ud3JhcCgoPQpuZXcgdC5MYWJlbCh7dGl0bGU6IlByb3ZpZGUgYSBsYWJlbDoifSkp LiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLmdyb3VwX2s9CmV5LiRlbCkpLG8uYXBwZW5kKG4u d3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJTZWxlY3QgY29sdW1uczoifSkpLiRlbCkpLG8uYT0K cHBlbmQobi53cmFwKHRoaXMudGFibGUuJGVsKSksdGhpcy5zZXRFbGVtZW50KG8pO3ZhciBzPTNE dGhpczt0aGlzLmNoYXJ0Lm9uPQooImNoYW5nZTpkYXRhc2V0X2lkIixmdW5jdGlvbigpe3MuX3Jl ZnJlc2hUYWJsZSgpfSksdGhpcy5jaGFydC5vbigiY2hhbmdlOnQ9CnlwZSIsZnVuY3Rpb24oKXtz Ll9yZWZyZXNoVGFibGUoKX0pLHRoaXMuZ3JvdXAub24oImNoYW5nZTprZXkiLGZ1bmN0aW9uKCl7 cz0KLl9yZWZyZXNoR3JvdXBLZXkoKX0pLHRoaXMuZ3JvdXAub24oImNoYW5nZSIsZnVuY3Rpb24o KXtzLl9yZWZyZXNoR3JvdXAoKX0pPQosdGhpcy5fcmVmcmVzaFRhYmxlKCksdGhpcy5fcmVmcmVz aEdyb3VwS2V5KCksdGhpcy5fcmVmcmVzaEdyb3VwKCl9LF9yZWZyZXM9CmhUYWJsZTpmdW5jdGlv bigpe3ZhciBlPTNEdGhpcy5jaGFydC5nZXQoImRhdGFzZXRfaWQiKSxuPTNEdGhpcy5jaGFydC5n ZXQoIj0KdHlwZSIpO2lmKCFlfHwhbilyZXR1cm47dmFyIHI9M0R0aGlzLGk9M0R0aGlzLmNoYXJ0 LmRlZmluaXRpb247dGhpcy50YWJsZS5kPQplbEFsbCgpO3ZhciBzPTNEe307Zm9yKHZhciBvIGlu IGkuY29sdW1ucyl7dmFyIHU9M0RpLmNvbHVtbnNbb107aWYoIXUpe2NvbnM9Cm9sZS5kZWJ1Zygi R3JvdXA6Ol9yZWZyZXNoVGFibGUoKSAtIFNraXBwaW5nIGNvbHVtbiBkZWZpbml0aW9uLiIpO2Nv bnRpbnVlfT0KdmFyIGE9M0RuZXcgdC5TZWxlY3QuVmlldyh7aWQ6InNlbGVjdF8iK28sd2FpdDoh MH0pLGY9M0R1LnRpdGxlO3UuaXNfdW5pcXVlPQomJihmKz0zRCImbmJzcDsoYWxsIGRhdGEgbGFi ZWxzKSIpLHRoaXMudGFibGUuYWRkKGYsIjI1JSIpLHRoaXMudGFibGUuYWRkKGE9Ci4kZWwpLHRo aXMudGFibGUuYXBwZW5kKG8pLHNbb109M0RhfXRoaXMuY2hhcnQuc3RhdGUoIndhaXQiLCJMb2Fk aW5nIG1ldGFkYT0KdGEuLi4iKTt2YXIgbD0zRHRoaXMuYXBwLmRlZmVycmVkLnJlZ2lzdGVyKCks Yz0zRHtpZDplLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7PQpmb3IodmFyIHQgaW4gcylyLl9hZGRSb3co dCxlLHMsaS5jb2x1bW5zW3RdKTtyLmNoYXJ0LnN0YXRlKCJvayIsIk1ldGFkYXRhIGk9Cm5pdGlh bGl6ZWQuLi4iKSxyLmFwcC5kZWZlcnJlZC5kb25lKGwpfX07dGhpcy5hcHAuZGF0YXNldHMucmVx dWVzdChjKX0sX2FkZD0KUm93OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPTNEdGhpcyxzPTNEci5p c19sYWJlbCxvPTNEci5pc19hdXRvLHU9M0RyLmlzX251PQptZXJpYyxhPTNEci5pc191bmlxdWUs Zj0zRHIuaXNfemVybyxsPTNEW10sYz0zRG5bZV07byYmbC5wdXNoKHtsYWJlbDoiQ29sdW09Cm46 IFJvdyBOdW1iZXIiLHZhbHVlOiJhdXRvIn0pLGYmJmwucHVzaCh7bGFiZWw6IkNvbHVtbjogTm9u ZSIsdmFsdWU6Inplcm8ifT0KKTt2YXIgaD0zRHQubWV0YWRhdGFfY29sdW1uX3R5cGVzO2Zvcih2 YXIgcCBpbiBoKXt2YXIgZD0zRCExO2hbcF09M0Q9M0QiaW50PQoifHxoW3BdPTNEPTNEImZsb2F0 Ij9kPTNEdTpkPTNEcyxkJiZsLnB1c2goe2xhYmVsOiJDb2x1bW46ICIrKHBhcnNlSW50KHApKzE9 CikrIiBbIitoW3BdKyJdIix2YWx1ZTpwfSl9Yy51cGRhdGUobCksYSYmdGhpcy5jaGFydC5ncm91 cHMuZmlyc3QoKSYmdGhpcy5ncj0Kb3VwLnNldChlLHRoaXMuY2hhcnQuZ3JvdXBzLmZpcnN0KCku Z2V0KGUpKTtpZighYy5leGlzdHModGhpcy5ncm91cC5nZXQoZSkpPQope3ZhciB2PTNEYy5maXJz dCgpO2NvbnNvbGUuZGVidWcoJ0dyb3VwKCk6Ol9hZGRSb3coKSAtIFN3aXRjaGluZyBtb2RlbCB2 YWw9CnVlIGZyb20gIicrdGhpcy5ncm91cC5nZXQoZSkrJyIgdG8gIicrdisnIi4nKSx0aGlzLmdy b3VwLnNldChlLHYpfWMudmFsdWUodD0KaGlzLmdyb3VwLmdldChlKSksdGhpcy5ncm91cC5vZmYo ImNoYW5nZToiK2UpLHRoaXMuZ3JvdXAub24oImNoYW5nZToiK2UsZnVuPQpjdGlvbigpe2MudmFs dWUoaS5ncm91cC5nZXQoZSkpfSksYy5zZXRPbkNoYW5nZShmdW5jdGlvbih0KXthP2kuY2hhcnQu Z3JvdXA9CnMuZWFjaChmdW5jdGlvbihuKXtuLnNldChlLHQpfSk6aS5ncm91cC5zZXQoZSx0KSxp LmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKT0KfSksYy5zaG93KCl9LF9yZWZyZXNoR3JvdXA6ZnVu Y3Rpb24oKXt0aGlzLmdyb3VwLnNldCgiZGF0ZSIsbi50aW1lKCkpfSxfcmVmPQpyZXNoR3JvdXBL ZXk6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuZ3JvdXAuZ2V0KCJrZXkiKTtlPTNEPTNEPTNEdW5k ZWZpbmVkJiY9CihlPTNEIiIpLHRoaXMuZ3JvdXBfa2V5LnZhbHVlKGUpfX0pfSksZGVmaW5lKCJw bHVnaW4vbGlicmFyeS91aS10YWJsZS1mb3JtIj0KLFsibXZjL3VpL3VpLXRhYmxlIiwibXZjL3Vp L3VpLW1pc2MiLCJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0KPTNEQmFja2Jv bmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixjb250ZW50OiIiLG1vZGU6 IiJ9LGxpc3Q6PQpbXSxpbml0aWFsaXplOmZ1bmN0aW9uKHIsaSl7dGhpcy5hcHA9M0RyLHRoaXMu b3B0aW9ucz0zRG4ubWVyZ2UoaSx0aGlzLm9wdGk9Cm9uc0RlZmF1bHQpLHRoaXMudGFibGVfdGl0 bGU9M0RuZXcgdC5MYWJlbCh7dGl0bGU6dGhpcy5vcHRpb25zLnRpdGxlfSksdGhpcz0KLnRhYmxl PTNEbmV3IGUuVmlldyh7Y29udGVudDp0aGlzLm9wdGlvbnMuY29udGVudH0pO3ZhciBzPTNEJCgn PGRpdiBjbGFzcz0KPTNEInVpLXRhYmxlLWZvcm0iLz4nKTt0aGlzLm9wdGlvbnMudGl0bGUmJnMu YXBwZW5kKG4ud3JhcCh0aGlzLnRhYmxlX3RpdGxlPQouJGVsKSkscy5hcHBlbmQobi53cmFwKHRo aXMudGFibGUuJGVsKSksdGhpcy5zZXRFbGVtZW50KHMpfSx0aXRsZTpmdW5jdGlvbig9CmUpe3Ro aXMudGFibGVfdGl0bGUudGl0bGUoZSl9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe3RoaXMudGFibGUu ZGVsQWxsKCksdGhpcz0KLmxpc3Q9M0RbXTtmb3IodmFyIG4gaW4gZSl0aGlzLl9hZGQoZVtuXS5p ZHx8bixlW25dLHQpO2Zvcih2YXIgbiBpbiB0aGlzLmxpPQpzdCl0aGlzLmxpc3Rbbl0udHJpZ2dl cigiY2hhbmdlIil9LF9hZGQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPTNEdGhpcyxzPTNEbnU9Cmxs LG89M0RuLnR5cGU7c3dpdGNoKG8pe2Nhc2UidGV4dCI6cz0zRG5ldyB0LklucHV0KHtpZDoiZmll bGQtIitlLHBsYWNlaG9sZD0KZXI6bi5wbGFjZWhvbGRlcix2YWx1ZTpyLmdldChlKSxvbmNoYW5n ZTpmdW5jdGlvbih0KXtyLnNldChlLHQpfX0pO2JyZWFrO2NhPQpzZSJyYWRpb2J1dHRvbiI6cz0z RG5ldyB0LlJhZGlvQnV0dG9uLlZpZXcoe2lkOiJmaWVsZC0iK2UsZGF0YTpuLmRhdGEsdmFsdWU9 CjpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvbih0KXtyLnNldChlLHQpO3ZhciBzPTNEXy5maW5k V2hlcmUobi5kYXRhLHt2YWx1ZT0KOnR9KTtpZihzJiZzLm9wZXJhdGlvbnMpe3ZhciBvPTNEcy5v cGVyYXRpb25zO2Zvcih2YXIgdSBpbiBvLnNob3cpe3ZhciBhPTNEPQpvLnNob3dbdV07aS50YWJs ZS5nZXQoYSkuc2hvdygpfWZvcih2YXIgdSBpbiBvLmhpZGUpe3ZhciBhPTNEby5oaWRlW3VdO2ku dGE9CmJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnM9M0RuZXcgdC5T ZWxlY3QuVmlldyh7aWQ6ImZpZWxkLT0KIitlLGRhdGE6bi5kYXRhLHZhbHVlOnIuZ2V0KGUpLG9u Y2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCk7dmFyIHM9M0RfLmZpPQpuZFdoZXJlKG4uZGF0 YSx7dmFsdWU6dH0pO2lmKHMmJnMub3BlcmF0aW9ucyl7dmFyIG89M0RzLm9wZXJhdGlvbnM7Zm9y KHZhciA9CnUgaW4gby5zaG93KXt2YXIgYT0zRG8uc2hvd1t1XTtpLnRhYmxlLmdldChhKS5zaG93 KCl9Zm9yKHZhciB1IGluIG8uaGlkZSl7dj0KYXIgYT0zRG8uaGlkZVt1XTtpLnRhYmxlLmdldChh KS5oaWRlKCl9fX19KTticmVhaztjYXNlImRhdGFzZXQiOnM9M0RuZXcgdC5TPQplbGVjdC5WaWV3 KHtpZDoiZmllbGQtIitlLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCl9fSksaS5hcHAu ZGF0YXNldHM9Ci5vbigiYWxsIixmdW5jdGlvbigpe3ZhciB0PTNEW107aS5hcHAuZGF0YXNldHMu ZWFjaChmdW5jdGlvbihlKXtlLmdldCgiZGF0YT0KdHlwZV9pZCIpPTNEPTNEbi5kYXRhJiZ0LnB1 c2goe3ZhbHVlOmUuZ2V0KCJpZCIpLGxhYmVsOmUuZ2V0KCJuYW1lIil9KX0pLHMuPQp1cGRhdGUo dCksci5nZXQoZSl8fHIuc2V0KGUscy5maXJzdCgpKSxzLnZhbHVlKHIuZ2V0KGUpKX0pLGkuYXBw LmRhdGFzZXRzLnQ9CnJpZ2dlcigiYWxsLmRhdGFzZXRzIik7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6 cz0zRG5ldyB0LlRleHRhcmVhKHtpZDoiZmllbGQtIj0KK2Usb25jaGFuZ2U6ZnVuY3Rpb24oKXty LnNldChlLHMudmFsdWUoKSl9fSk7YnJlYWs7Y2FzZSJzZXBhcmF0b3IiOnM9M0QkKCI8PQpkaXYv PiIpO2JyZWFrO2RlZmF1bHQ6cz0zRG5ldyB0LklucHV0KHtpZDoiZmllbGQtIitlLHBsYWNlaG9s ZGVyOm4ucGxhY2Vob2w9CmRlcix0eXBlOm4udHlwZSxvbmNoYW5nZTpmdW5jdGlvbigpe3Iuc2V0 KGUscy52YWx1ZSgpKX19KX1pZihvIT0zRCJzZXBhcmF0bz0KciIpe3IuZ2V0KGUpfHxyLnNldChl LG4uaW5pdCkscy52YWx1ZShyLmdldChlKSksdGhpcy5saXN0W2VdPTNEczt2YXIgdT0zRCQoPQoi PGRpdi8+Iik7dS5hcHBlbmQocy4kZWwpLG4uaW5mbyYmdS5hcHBlbmQoJzxkaXYgY2xhc3M9M0Qi dWktdGFibGUtZm9ybS1pbmY9Cm8iPicrbi5pbmZvKyI8L2Rpdj4iKSx0aGlzLm9wdGlvbnMuc3R5 bGU9M0Q9M0QiYm9sZCI/KHRoaXMudGFibGUuYWRkKChuZXcgdD0KLkxhYmVsKHt0aXRsZTpuLnRp dGxlLGNsczoiZm9ybS1sYWJlbCJ9KSkuJGVsKSx0aGlzLnRhYmxlLmFkZCh1KSk6KHRoaXMudGFi PQpsZS5hZGQoJzxzcGFuIGNsYXNzPTNEInVpLXRhYmxlLWZvcm0tdGl0bGUiPicrbi50aXRsZSsi PC9zcGFuPiIsIjI1JSIpLHRoaXM9Ci50YWJsZS5hZGQodSkpfWVsc2UgdGhpcy50YWJsZS5hZGQo JzxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS1zZXBhcmF0b3IiPj0KJytuLnRpdGxlKyI6PGRp di8+IiksdGhpcy50YWJsZS5hZGQoJCgiPGRpdi8+IikpO3RoaXMudGFibGUuYXBwZW5kKGUpLG4u aGlkPQplJiZ0aGlzLnRhYmxlLmdldChlKS5oaWRlKCl9fSk7cmV0dXJue1ZpZXc6cn19KSxkZWZp bmUoInBsdWdpbi92aWV3cy9zZXR0aW49CmdzIixbIm12Yy91aS91aS1taXNjIiwicGx1Z2luL2xp YnJhcnkvdWktdGFibGUtZm9ybSIsInV0aWxzL3V0aWxzIl0sZnVuY3Rpbz0KbihlLHQsbil7cmV0 dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUsbil7dGhpcy5h cHA9M0RlPQo7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLmZv cm09M0RuZXcgdC5WaWV3KGUse3RpdGxlOiI9CkNvbmZpZ3VyYXRpb24iLGNvbnRlbnQ6IlRoaXMg Y2hhcnQgdHlwZSBkb2VzIG5vdCBwcm92aWRlIGFueSBvcHRpb25zLiJ9KSx0aD0KaXMuc2V0RWxl bWVudCh0aGlzLmZvcm0uJGVsKTt2YXIgcj0zRHRoaXM7dGhpcy5jaGFydC5vbigiY2hhbmdlIixm dW5jdGlvbigpPQp7ci5fcmVmcmVzaCgpfSl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9M0R0 aGlzLmNoYXJ0LmRlZmluaXRpb247aWYoIWUpcmU9CnR1cm47dGhpcy5mb3JtLnRpdGxlKGUuY2F0 ZWdvcnkrIiAtICIrZS50aXRsZSsiOiIpLHRoaXMuZm9ybS51cGRhdGUoZS5zZXR0aT0KbmdzLHRo aXMuY2hhcnQuc2V0dGluZ3MpfX0pfSksZGVmaW5lKCJwbHVnaW4vdmlld3MvdHlwZXMiLFsidXRp bHMvdXRpbHMiLCJtPQp2Yy91aS91aS1taXNjIl0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gQmFja2Jv bmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ons9Cm9uY2hhbmdlOm51bGwsb25kYmxjbGlj azpudWxsfSxldmVudHM6e2NsaWNrOiJfb25jbGljayIsZGJsY2xpY2s6Il9vbmRibGNsaT0KY2si fSxpbml0aWFsaXplOmZ1bmN0aW9uKG4scil7dmFyIGk9M0R0aGlzO3RoaXMuYXBwPTNEbix0aGlz Lm9wdGlvbnM9M0RlLm1lPQpyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgcz0zRCQoJzxk aXYgY2xhc3M9M0QiY2hhcnRzLWdyaWQiLz4nKTtzLmFwcGU9Cm5kKGUud3JhcCgobmV3IHQuTGFi ZWwoe3RpdGxlOiJIb3cgbWFueSBkYXRhIHBvaW50cyB3b3VsZCB5b3UgbGlrZSB0byBhbmFseT0K emU/In0pKS4kZWwpKSx0aGlzLmxpYnJhcnk9M0RuZXcgdC5SYWRpb0J1dHRvbi5WaWV3KHtkYXRh Olt7bGFiZWw6IkZldyAoPDUwPQowKSIsdmFsdWU6InNtYWxsIn0se2xhYmVsOiJTb21lICg8MTBr KSIsdmFsdWU6Im1lZGl1bSJ9LHtsYWJlbDoiTWFueSAoPjEwayk9CiIsdmFsdWU6ImxhcmdlIn1d LG9uY2hhbmdlOmZ1bmN0aW9uKGUpe2kuX2ZpbHRlcihlKX19KSxzLmFwcGVuZChlLndyYXAodGhp cz0KLmxpYnJhcnkuJGVsKSksdGhpcy5zZXRFbGVtZW50KHMpLHRoaXMuX3JlbmRlcigpLHRoaXMu bGlicmFyeS52YWx1ZSgic21hbGwiPQopLHRoaXMubGlicmFyeS50cmlnZ2VyKCJjaGFuZ2UiKX0s dmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiRlbC5maW5kKCI9Ci5jdXJyZW50IikuYXR0 cigiaWQiKTtlIT0zRD0zRHVuZGVmaW5lZCYmKHRoaXMuJGVsLmZpbmQoIi5jdXJyZW50IikucmVt b3ZlQz0KbGFzcygiY3VycmVudCIpLHRoaXMuJGVsLmZpbmQoIiMiK2UpLmFkZENsYXNzKCJjdXJy ZW50IikpO3ZhciBuPTNEdGhpcy4kZWwuPQpmaW5kKCIuY3VycmVudCIpLmF0dHIoImlkIik7cmV0 dXJuIG49M0Q9M0Q9M0R1bmRlZmluZWQ/bnVsbDoobiE9M0R0JiZ0aGlzLm89CnB0aW9ucy5vbmNo YW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpLG4pfSxfZmlsdGVyOmZ1bmN0aW9uKGUpe3Ro aXMuJGVsLj0KZmluZCgiLmhlYWRlciIpLmhpZGUoKTt2YXIgdD0zRHRoaXMuYXBwLnR5cGVzLmF0 dHJpYnV0ZXM7Zm9yKHZhciBuIGluIHQpe3ZhPQpyIHI9M0R0W25dLGk9M0R0aGlzLiRlbC5maW5k KCIjIituKSxzPTNEdGhpcy4kZWwuZmluZCgiI3R5cGVzLWhlYWRlci0iK3RoaXM9Ci5jYXRlZ29y aWVzX2luZGV4W3IuY2F0ZWdvcnldKSxvPTNEci5rZXl3b3Jkc3x8IiI7by5pbmRleE9mKGUpPj0z RDA/KGkuc2hvdz0KKCkscy5zaG93KCkpOmkuaGlkZSgpfX0sX3JlbmRlcjpmdW5jdGlvbigpe3Ro aXMuY2F0ZWdvcmllcz0zRHt9LHRoaXMuY2F0ZWdvPQpyaWVzX2luZGV4PTNEe307dmFyIGU9M0Qw LHQ9M0R0aGlzLmFwcC50eXBlcy5hdHRyaWJ1dGVzO2Zvcih2YXIgbiBpbiB0KXt2YXI9CiByPTNE dFtuXSxpPTNEci5jYXRlZ29yeTt0aGlzLmNhdGVnb3JpZXNbaV18fCh0aGlzLmNhdGVnb3JpZXNb aV09M0R7fSx0aGlzLj0KY2F0ZWdvcmllc19pbmRleFtpXT0zRGUrKyksdGhpcy5jYXRlZ29yaWVz W2ldW25dPTNEcn1mb3IodmFyIGkgaW4gdGhpcy5jYXRlPQpnb3JpZXMpe3ZhciBzPTNEJCgnPGRp diBzdHlsZT0zRCJjbGVhcjogYm90aDsiLz4nKTtzLmFwcGVuZCh0aGlzLl90ZW1wbGF0ZV89Cmhl YWRlcih7aWQ6InR5cGVzLWhlYWRlci0iK3RoaXMuY2F0ZWdvcmllc19pbmRleFtpXSx0aXRsZTpp fSkpO2Zvcih2YXIgbiBpbj0KIHRoaXMuY2F0ZWdvcmllc1tpXSl7dmFyIHI9M0R0aGlzLmNhdGVn b3JpZXNbaV1bbl0sbz0zRHIudGl0bGUrIiAoIityLmxpYnJhPQpyeSsiKSI7ci56b29tYWJsZSYm KG89M0QnPHNwYW4gY2xhc3M9M0QiZmEgZmEtc2VhcmNoLXBsdXMiLz4nK28pLHMuYXBwZW5kKHQ9 Cmhpcy5fdGVtcGxhdGVfaXRlbSh7aWQ6bix0aXRsZTpvLHVybDpjb25maWcuYXBwX3Jvb3QrImNo YXJ0cy8iK3RoaXMuYXBwLmNoYT0KcnRQYXRoKG4pKyIvbG9nby5wbmcifSkpfXRoaXMuJGVsLmFw cGVuZChzKX19LF9vbmNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNEPQp0aGlzLnZhbHVlKCksbj0z RCQoZS50YXJnZXQpLmNsb3Nlc3QoIi5pdGVtIikuYXR0cigiaWQiKTtuIT0zRCIiJiZuJiZ0IT0z RG49CiYmdGhpcy52YWx1ZShuKX0sX29uZGJsY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlz LnZhbHVlKCk7dCYmdGhpcy5vcHRpbz0KbnMub25kYmxjbGljayYmdGhpcy5vcHRpb25zLm9uZGJs Y2xpY2sodCl9LF90ZW1wbGF0ZV9oZWFkZXI6ZnVuY3Rpb24oZSl7cmV0PQp1cm4nPGRpdiBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QiaGVhZGVyIj4nKyImYnVsbDsgIitlLnRpdGxlKyI8ZGl2PiJ9 LF90ZW09CnBsYXRlX2l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgaWQ9M0QiJytlLmlkKyci IGNsYXNzPTNEIml0ZW0iPicrJzxpbWcgYz0KbGFzcz0zRCJpbWFnZSIgc3JjPTNEIicrZS51cmwr JyI+JysnPGRpdiBjbGFzcz0zRCJ0aXRsZSI+JytlLnRpdGxlKyI8L2Rpdj4iPQorIjxkaXY+In19 KX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL2VkaXRvciIsWyJtdmMvdWkvdWktdGFicyIsIm12Yy91 aS91aS1taXM9CmMiLCJtdmMvdWkvdWktcG9ydGxldCIsInV0aWxzL3V0aWxzIiwicGx1Z2luL21v ZGVscy9jaGFydCIsInBsdWdpbi9tb2RlbHMvZz0Kcm91cCIsInBsdWdpbi92aWV3cy9ncm91cCIs InBsdWdpbi92aWV3cy9zZXR0aW5ncyIsInBsdWdpbi92aWV3cy90eXBlcyJdLGZ1PQpuY3Rpb24o ZSx0LG4scixpLHMsbyx1LGEpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6 ZTpmdW5jdGlvbig9Cmkscyl7dmFyIG89M0R0aGlzO3RoaXMuYXBwPTNEaSx0aGlzLmNoYXJ0PTNE dGhpcy5hcHAuY2hhcnQsdGhpcy5tZXNzYWdlPTNEbj0KZXcgdC5NZXNzYWdlLHRoaXMucG9ydGxl dD0zRG5ldyBuLlZpZXcoe2ljb246ImZhLWJhci1jaGFydC1vIix0aXRsZToiRWRpdG9yPQoiLG9w ZXJhdGlvbnM6e3NhdmU6bmV3IHQuQnV0dG9uSWNvbih7aWNvbjoiZmEtc2F2ZSIsdG9vbHRpcDoi RHJhdyBDaGFydCIsdGk9CnRsZToiRHJhdyIsb25jbGljazpmdW5jdGlvbigpe28uX3NhdmVDaGFy dCgpfX0pLGJhY2s6bmV3IHQuQnV0dG9uSWNvbih7aWNvbj0KOiJmYS1jYXJldC1sZWZ0Iix0b29s dGlwOiJSZXR1cm4gdG8gVmlld2VyIix0aXRsZToiQ2FuY2VsIixvbmNsaWNrOmZ1bmN0aW9uPQoo KXtvLmFwcC5nbygidmlld2VyIiksby5hcHAuc3RvcmFnZS5sb2FkKCl9fSl9fSksdGhpcy50eXBl cz0zRG5ldyBhKGkse29uY2g9CmFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RvLmFwcC50eXBlcy5n ZXQoZSk7dHx8Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gRWRpdD0Kb3I6Om9uY2hhbmdlKCkgLSBD aGFydCB0eXBlIG5vdCBzdXBwb3J0ZWQuIiksby5jaGFydC5kZWZpbml0aW9uPTNEdCxvLmNoYXJ0 PQouc2V0dGluZ3MuY2xlYXIoKSxvLmNoYXJ0LnNldCh7dHlwZTplfSksby5jaGFydC5zZXQoIm1v ZGlmaWVkIiwhMCksY29uc29sZS49CmRlYnVnKCJFZGl0b3I6Om9uY2hhbmdlKCkgLSBTd2l0Y2hl ZCBjaGFydCB0eXBlLiIpfSxvbmRibGNsaWNrOmZ1bmN0aW9uKGUpez0Kby5fc2F2ZUNoYXJ0KCl9 fSksdGhpcy50YWJzPTNEbmV3IGUuVmlldyh7dGl0bGVfbmV3OiJBZGQgRGF0YSIsb25uZXc6ZnVu Y3RpPQpvbigpe3ZhciBlPTNEby5fYWRkR3JvdXBNb2RlbCgpO28udGFicy5zaG93KGUuaWQpfX0p LHRoaXMudGl0bGU9M0RuZXcgdC5JbnA9CnV0KHtwbGFjZWhvbGRlcjoiQ2hhcnQgdGl0bGUiLG9u Y2hhbmdlOmZ1bmN0aW9uKCl7by5jaGFydC5zZXQoInRpdGxlIixvLnRpdD0KbGUudmFsdWUoKSl9 fSk7dmFyIGY9M0QkKCI8ZGl2Lz4iKTtmLmFwcGVuZChyLndyYXAoKG5ldyB0LkxhYmVsKHt0aXRs ZToiUHJvPQp2aWRlIGEgY2hhcnQgdGl0bGU6In0pKS4kZWwpKSxmLmFwcGVuZChyLndyYXAodGhp cy50aXRsZS4kZWwpKSxmLmFwcGVuZChyLnc9CnJhcCh0aGlzLnR5cGVzLiRlbCkpLHRoaXMudGFi cy5hZGQoe2lkOiJtYWluIix0aXRsZToiU3RhcnQiLCRlbDpmfSksdGhpcy5zZT0KdHRpbmdzPTNE bmV3IHUodGhpcy5hcHApLHRoaXMudGFicy5hZGQoe2lkOiJzZXR0aW5ncyIsdGl0bGU6IkNvbmZp Z3VyYXRpb24iPQosJGVsOnRoaXMuc2V0dGluZ3MuJGVsfSksdGhpcy5wb3J0bGV0LmFwcGVuZCh0 aGlzLm1lc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQ9Ci5hcHBlbmQodGhpcy50YWJzLiRlbCksdGhp cy5zZXRFbGVtZW50KHRoaXMucG9ydGxldC4kZWwpLHRoaXMudGFicy5oaWRlT3Blcj0KYXRpb24o ImJhY2siKTt2YXIgbz0zRHRoaXM7dGhpcy5jaGFydC5vbigiY2hhbmdlOnRpdGxlIixmdW5jdGlv bihlKXtvLl9yZWZyPQplc2hUaXRsZSgpfSksdGhpcy5jaGFydC5vbigiY2hhbmdlOnR5cGUiLGZ1 bmN0aW9uKGUpe28udHlwZXMudmFsdWUoZS5nZXQoInQ9CnlwZSIpKX0pLHRoaXMuY2hhcnQub24o InJlc2V0IixmdW5jdGlvbihlKXtvLl9yZXNldENoYXJ0KCl9KSx0aGlzLmFwcC5jaGFydD0KLm9u KCJyZWRyYXciLGZ1bmN0aW9uKGUpe28ucG9ydGxldC5zaG93T3BlcmF0aW9uKCJiYWNrIil9KSx0 aGlzLmFwcC5jaGFydC5nPQpyb3Vwcy5vbigiYWRkIixmdW5jdGlvbihlKXtvLl9hZGRHcm91cChl KX0pLHRoaXMuYXBwLmNoYXJ0Lmdyb3Vwcy5vbigicmVtb3Y9CmUiLGZ1bmN0aW9uKGUpe28uX3Jl bW92ZUdyb3VwKGUpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXBzLm9uKCJyZXNldCIsZnVuY3Rpbz0K bihlKXtvLl9yZW1vdmVBbGxHcm91cHMoKX0pLHRoaXMuYXBwLmNoYXJ0Lmdyb3Vwcy5vbigiY2hh bmdlOmtleSIsZnVuY3Rpb24oPQplKXtvLl9yZWZyZXNoR3JvdXBLZXkoKX0pLHRoaXMuX3Jlc2V0 Q2hhcnQoKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuJGVsLnNob3c9CigpfSxoaWRlOmZ1bmN0aW9u KCl7dGhpcy4kZWwuaGlkZSgpfSxfcmVmcmVzaFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlz Lj0KY2hhcnQuZ2V0KCJ0aXRsZSIpO3RoaXMucG9ydGxldC50aXRsZShlKSx0aGlzLnRpdGxlLnZh bHVlKGUpfSxfcmVmcmVzaEdyb3VwPQpLZXk6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMsdD0zRDA7 dGhpcy5jaGFydC5ncm91cHMuZWFjaChmdW5jdGlvbihuKXt2YXIgcj0KPTNEbi5nZXQoImtleSIs IiIpO3I9M0Q9M0QiIiYmKHI9M0QiRGF0YSBsYWJlbCIpLGUudGFicy50aXRsZShuLmlkLCsrdCsi OiAiPQorcil9KX0sX2FkZEdyb3VwTW9kZWw6ZnVuY3Rpb24oKXt2YXIgZT0zRG5ldyBzKHtpZDpy LnV1aWQoKX0pO3JldHVybiB0aGlzLmM9CmhhcnQuZ3JvdXBzLmFkZChlKSxlfSxfYWRkR3JvdXA6 ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0RuZXcgbyh0aGlzLmFwcD0KLHtncm91cDplfSk7 dGhpcy50YWJzLmFkZCh7aWQ6ZS5pZCwkZWw6bi4kZWwsb25kZWw6ZnVuY3Rpb24oKXt0LmNoYXJ0 Lmdyb3VwPQpzLnJlbW92ZShlLmlkKX19KSx0aGlzLl9yZWZyZXNoR3JvdXBLZXkoKSx0aGlzLmNo YXJ0LnNldCgibW9kaWZpZWQiLCEwKX0sX3I9CmVtb3ZlR3JvdXA6ZnVuY3Rpb24oZSl7dGhpcy50 YWJzLmRlbChlLmlkKSx0aGlzLl9yZWZyZXNoR3JvdXBLZXkoKSx0aGlzLmNoYT0KcnQuc2V0KCJt b2RpZmllZCIsITApfSxfcmVtb3ZlQWxsR3JvdXBzOmZ1bmN0aW9uKGUpe3RoaXMudGFicy5kZWxS ZW1vdmFibGUoPQopfSxfcmVzZXRDaGFydDpmdW5jdGlvbigpe3RoaXMuY2hhcnQuc2V0KCJpZCIs ci51dWlkKCkpLHRoaXMuY2hhcnQuc2V0KCJ0eXA9CmUiLCJudmQzX2JhciIpLHRoaXMuY2hhcnQu c2V0KCJkYXRhc2V0X2lkIix0aGlzLmFwcC5vcHRpb25zLmNvbmZpZy5kYXRhc2V0Xz0KaWQpLHRo aXMuY2hhcnQuc2V0KCJ0aXRsZSIsIk5ldyBDaGFydCIpLHRoaXMucG9ydGxldC5oaWRlT3BlcmF0 aW9uKCJiYWNrIil9PQosX3NhdmVDaGFydDpmdW5jdGlvbigpe3RoaXMuY2hhcnQuc2V0KHt0eXBl OnRoaXMudHlwZXMudmFsdWUoKSx0aXRsZTp0aGlzLnQ9Cml0bGUudmFsdWUoKSxkYXRlOnIudGlt ZSgpfSk7aWYodGhpcy5jaGFydC5ncm91cHMubGVuZ3RoPTNEPTNEMCl7dGhpcy5tZXNzYT0KZ2Uu dXBkYXRlKHttZXNzYWdlOiJQbGVhc2Ugc2VsZWN0IGRhdGEgY29sdW1ucyBiZWZvcmUgZHJhd2lu ZyB0aGUgY2hhcnQuIn0pPQo7dmFyIGU9M0R0aGlzLl9hZGRHcm91cE1vZGVsKCk7dGhpcy50YWJz LnNob3coZS5pZCk7cmV0dXJufXZhciB0PTNEdGhpcyxuPQo9M0QhMCxpPTNEdGhpcy5jaGFydC5k ZWZpbml0aW9uO3RoaXMuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rpb24oZSl7aWYoIW4pcmU9CnR1 cm47Zm9yKHZhciByIGluIGkuY29sdW1ucylpZihlLmF0dHJpYnV0ZXNbcl09M0Q9M0QibnVsbCIp e3QubWVzc2FnZS51cGRhdD0KZSh7c3RhdHVzOiJkYW5nZXIiLG1lc3NhZ2U6IlRoaXMgY2hhcnQg dHlwZSByZXF1aXJlcyBjb2x1bW4gdHlwZXMgbm90IGZvdW5kPQogaW4geW91ciB0YWJ1bGFyIGZp bGUuIn0pLHQudGFicy5zaG93KGUuaWQpLG49M0QhMTtyZXR1cm59fSk7aWYoIW4pcmV0dXJuO3Q9 Cmhpcy5hcHAuZ28oInZpZXdlciIpO3ZhciB0PTNEdGhpczt0aGlzLmFwcC5kZWZlcnJlZC5leGVj dXRlKGZ1bmN0aW9uKCl7dC5hcD0KcC5zdG9yYWdlLnNhdmUoKSx0LmNoYXJ0LnRyaWdnZXIoInJl ZHJhdyIpfSl9fSl9KSxkZWZpbmUoInBsdWdpbi9tb2RlbHMvY29uPQpmaWciLFtdLGZ1bmN0aW9u KCl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e3F1ZXJ5X2xpbWl0OjFl NCw9CnF1ZXJ5X3RpbWVvdXQ6MTAwfX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2Zvcm1zL2Rl ZmF1bHQiLFtdLGZ1bmN0aW9uKCl7cj0KZXR1cm57dGl0bGU6IiIsY2F0ZWdvcnk6IiIsbGlicmFy eToiIix0YWc6IiIsa2V5d29yZHM6IiIsc2V0dGluZ3M6e3NlcGFyYXRvPQpyX3g6e3RpdGxlOiJY IGF4aXMiLHR5cGU6InNlcGFyYXRvciJ9LHhfYXhpc19sYWJlbDp7dGl0bGU6IkF4aXMgbGFiZWwi LGluZm89CjoiUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUgYXhpcy4iLHR5cGU6InRleHQiLGluaXQ6 IlgtYXhpcyIscGxhY2Vob2xkZXI6IkF4aT0KcyBsYWJlbCJ9LHhfYXhpc190eXBlOnt0aXRsZToi QXhpcyB2YWx1ZSB0eXBlIixpbmZvOiJTZWxlY3QgdGhlIHZhbHVlIHR5cGUgPQpvZiB0aGUgYXhp cy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiYXV0byIsZGF0YTpbe2xhYmVsOiItLSBEbyBub3Qgc2hv dyB2YWx1ZXM9CiAtLSIsdmFsdWU6ImhpZGUiLG9wZXJhdGlvbnM6e2hpZGU6WyJ4X2F4aXNfcHJl Y2lzaW9uIl19fSx7bGFiZWw6IkF1dG8iLHZhbD0KdWU6ImF1dG8iLG9wZXJhdGlvbnM6e2hpZGU6 WyJ4X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkZsb2F0Iix2YWx1ZToiZiIsPQpvcGVyYXRp b25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJFeHBvbmVudCIsdmFsdWU6 ImUiLG9wZXJhdGk9Cm9uczp7c2hvdzpbInhfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiSW50 ZWdlciIsdmFsdWU6ImQiLG9wZXJhdGlvbnM6e2hpZD0KZTpbInhfYXhpc19wcmVjaXNpb24iXX19 LHtsYWJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InAiLG9wZXJhdGlvbnM6e3Nob3c6WyJ4PQpfYXhp c19wcmVjaXNpb24iXX19LHtsYWJlbDoiU0ktcHJlZml4Iix2YWx1ZToicyIsb3BlcmF0aW9uczp7 aGlkZTpbInhfYXhpc189CnByZWNpc2lvbiJdfX1dfSx4X2F4aXNfcHJlY2lzaW9uOnt0aXRsZToi QXhpcyB0aWNrIGZvcm1hdCIsaW5mbzoiU2VsZWN0IHRoZT0KIHRpY2sgZm9ybWF0IGZvciB0aGUg YXhpcy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiMSIsZGF0YTpbe2xhYmVsOiIwLjAwMDAxIix2PQph bHVlOiI1In0se2xhYmVsOiIwLjAwMDEiLHZhbHVlOiI0In0se2xhYmVsOiIwLjAwMSIsdmFsdWU6 IjMifSx7bGFiZWw6IjAuMDE9CiIsdmFsdWU6IjIifSx7bGFiZWw6IjAuMSIsdmFsdWU6IjEifSx7 bGFiZWw6IjEiLHZhbHVlOiIwIn1dfSxzZXBhcmF0b3JfeTp7dD0KaXRsZToiWSBheGlzIix0eXBl OiJzZXBhcmF0b3IifSx5X2F4aXNfbGFiZWw6e3RpdGxlOiJBeGlzIGxhYmVsIixpbmZvOiJQcm92 PQppZGUgYSBsYWJlbCBmb3IgdGhlIGF4aXMuIix0eXBlOiJ0ZXh0Iixpbml0OiJZLWF4aXMiLHBs YWNlaG9sZGVyOiJBeGlzIGxhYmU9CmwifSx5X2F4aXNfdHlwZTp7dGl0bGU6IkF4aXMgdmFsdWUg dHlwZSIsaW5mbzoiU2VsZWN0IHRoZSB2YWx1ZSB0eXBlIG9mIHRoZT0KIGF4aXMuIix0eXBlOiJz ZWxlY3QiLGluaXQ6ImF1dG8iLGRhdGE6W3tsYWJlbDoiLS0gRG8gbm90IHNob3cgdmFsdWVzIC0t Iix2PQphbHVlOiJoaWRlIixvcGVyYXRpb25zOntoaWRlOlsieV9heGlzX3ByZWNpc2lvbiJdfX0s e2xhYmVsOiJBdXRvIix2YWx1ZToiYXU9CnRvIixvcGVyYXRpb25zOntoaWRlOlsieV9heGlzX3By ZWNpc2lvbiJdfX0se2xhYmVsOiJGbG9hdCIsdmFsdWU6ImYiLG9wZXJhdD0KaW9uczp7c2hvdzpb InlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiRXhwb25lbnQiLHZhbHVlOiJlIixvcGVyYXRp b25zOntzPQpob3c6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkludGVnZXIiLHZhbHVl OiJkIixvcGVyYXRpb25zOntoaWRlOlsieV89CmF4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IlBl cmNlbnRhZ2UiLHZhbHVlOiJwIixvcGVyYXRpb25zOntzaG93OlsieV9heGlzXz0KcHJlY2lzaW9u Il19fSx7bGFiZWw6IlNJLXByZWZpeCIsdmFsdWU6InMiLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4 aXNfcHJlY2lzPQppb24iXX19XX0seV9heGlzX3ByZWNpc2lvbjp7dGl0bGU6IkF4aXMgdGljayBm b3JtYXQiLGluZm86IlNlbGVjdCB0aGUgdGljayA9CmZvcm1hdCBmb3IgdGhlIGF4aXMuIix0eXBl OiJzZWxlY3QiLGluaXQ6IjEiLGRhdGE6W3tsYWJlbDoiMC4wMDAwMSIsdmFsdWU6Ij0KNSJ9LHts YWJlbDoiMC4wMDAxIix2YWx1ZToiNCJ9LHtsYWJlbDoiMC4wMDEiLHZhbHVlOiIzIn0se2xhYmVs OiIwLjAxIix2YWx1PQplOiIyIn0se2xhYmVsOiIwLjEiLHZhbHVlOiIxIn0se2xhYmVsOiIxIix2 YWx1ZToiMCJ9XX0sc2VwYXJhdG9yX2xlZ2VuZDp7dGk9CnRsZToiT3RoZXJzIix0eXBlOiJzZXBh cmF0b3IifSxzaG93X2xlZ2VuZDp7dGl0bGU6IlNob3cgbGVnZW5kIixpbmZvOiJXb3VsZD0KIHlv dSBsaWtlIHRvIGFkZCBhIGxlZ2VuZD8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJ0cnVlIixk YXRhOlt7bGFiZWw6IlllPQpzIix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxz ZSJ9XX0sdXNlX3BhbmVsczp7dGl0bGU6IlVzZSBtdWx0aS09CnBhbmVscyIsaW5mbzoiV291bGQg eW91IGxpa2UgdG8gc2VwYXJhdGUgeW91ciBkYXRhIGludG8gaW5kaXZpZHVhbCBwYW5lbHM/Ij0K LHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVl OiJ0cnVlIn0se2xhYmVsOiJOPQpvIix2YWx1ZToiZmFsc2UifV19fX19KSxmdW5jdGlvbigpe2Z1 bmN0aW9uIHQoZSx0KXtyZXR1cm4obmV3IERhdGUodCxlKzEsMCk9CikuZ2V0RGF0ZSgpfWZ1bmN0 aW9uIG4oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkscyl7dmFyIG89M0RlKHIpLHU9M0RbXTtv PD0KciYmdChvKTtpZihzPjEpd2hpbGUobzxpKXt2YXIgYT0zRG5ldyBEYXRlKCtvKTtuKGEpJXM9 M0Q9M0Q9M0QwJiZ1LnB1c2goYSksPQp0KG8pfWVsc2Ugd2hpbGUobzxpKXUucHVzaChuZXcgRGF0 ZSgrbykpLHQobyk7cmV0dXJuIHV9fXZhciBlPTNEd2luZG93Lm52fHw9Cnt9O2UudmVyc2lvbj0z RCIxLjEuMTViIixlLmRldj0zRCEwLHdpbmRvdy5udj0zRGUsZS50b29sdGlwPTNEZS50b29sdGlw fHx7fT0KLGUudXRpbHM9M0RlLnV0aWxzfHx7fSxlLm1vZGVscz0zRGUubW9kZWxzfHx7fSxlLmNo YXJ0cz0zRHt9LGUuZ3JhcGhzPTNEW10sPQplLmxvZ3M9M0R7fSxlLmRpc3BhdGNoPTNEZDMuZGlz cGF0Y2goInJlbmRlcl9zdGFydCIsInJlbmRlcl9lbmQiKSxlLmRldiYmKGU9Ci5kaXNwYXRjaC5v bigicmVuZGVyX3N0YXJ0IixmdW5jdGlvbih0KXtlLmxvZ3Muc3RhcnRUaW1lPTNEKyhuZXcgRGF0 ZSl9KSxlLj0KZGlzcGF0Y2gub24oInJlbmRlcl9lbmQiLGZ1bmN0aW9uKHQpe2UubG9ncy5lbmRU aW1lPTNEKyhuZXcgRGF0ZSksZS5sb2dzLnRvPQp0YWxUaW1lPTNEZS5sb2dzLmVuZFRpbWUtZS5s b2dzLnN0YXJ0VGltZSxlLmxvZygidG90YWwiLGUubG9ncy50b3RhbFRpbWUpfSk9CiksZS5sb2c9 M0RmdW5jdGlvbigpe2lmKGUuZGV2JiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2cuYXBwbHkpY29u c29sZS5sb2cuYT0KcHBseShjb25zb2xlLGFyZ3VtZW50cyk7ZWxzZSBpZihlLmRldiYmdHlwZW9m IGNvbnNvbGUubG9nPTNEPTNEImZ1bmN0aW9uIiYmPQpGdW5jdGlvbi5wcm90b3R5cGUuYmluZCl7 dmFyIHQ9M0RGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKGNvbnNvbGUubG9nLGM9Cm9uc29s ZSk7dC5hcHBseShjb25zb2xlLGFyZ3VtZW50cyl9cmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMu bGVuZ3RoLTFdfSxlLj0KcmVuZGVyPTNEZnVuY3Rpb24obil7bj0zRG58fDEsZS5yZW5kZXIuYWN0 aXZlPTNEITAsZS5kaXNwYXRjaC5yZW5kZXJfc3RhcnQoPQopLHNldFRpbWVvdXQoZnVuY3Rpb24o KXt2YXIgdCxyO2Zvcih2YXIgaT0zRDA7aTxuJiYocj0zRGUucmVuZGVyLnF1ZXVlW2ldKTs9Cmkr Kyl0PTNEci5nZW5lcmF0ZSgpLHR5cGVvZiByLmNhbGxiYWNrPTNEPTNEdHlwZW9mIEZ1bmN0aW9u JiZyLmNhbGxiYWNrKHQpLD0KZS5ncmFwaHMucHVzaCh0KTtlLnJlbmRlci5xdWV1ZS5zcGxpY2Uo MCxpKSxlLnJlbmRlci5xdWV1ZS5sZW5ndGg/c2V0VGltZW91PQp0KGFyZ3VtZW50cy5jYWxsZWUs MCk6KGUuZGlzcGF0Y2gucmVuZGVyX2VuZCgpLGUucmVuZGVyLmFjdGl2ZT0zRCExKX0sMCl9LGU9 Ci5yZW5kZXIuYWN0aXZlPTNEITEsZS5yZW5kZXIucXVldWU9M0RbXSxlLmFkZEdyYXBoPTNEZnVu Y3Rpb24odCl7dHlwZW9mIGFyZz0KdW1lbnRzWzBdPTNEPTNEdHlwZW9mIEZ1bmN0aW9uJiYodD0z RHtnZW5lcmF0ZTphcmd1bWVudHNbMF0sY2FsbGJhY2s6YXJndW1lPQpudHNbMV19KSxlLnJlbmRl ci5xdWV1ZS5wdXNoKHQpLGUucmVuZGVyLmFjdGl2ZXx8ZS5yZW5kZXIoKX0sZS5pZGVudGl0eT0z RGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuc3RyaXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5y ZXBsYWNlKC8oXHN8JikvZywiIil9LD0KZDMudGltZS5tb250aEVuZD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpPQosMCl9LGQzLnRpbWUu bW9udGhFbmRzPTNEbihkMy50aW1lLm1vbnRoRW5kLGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShl LmdldFU9ClRDRGF0ZSgpKzEpLGUuc2V0RGF0ZSh0KGUuZ2V0TW9udGgoKSsxLGUuZ2V0RnVsbFll YXIoKSkpfSxmdW5jdGlvbihlKXtyZXR1cj0KbiBlLmdldE1vbnRoKCl9KSxlLmludGVyYWN0aXZl R3VpZGVsaW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBjKG8pe28uZWFjaChmPQp1bmN0aW9uKG8p e2Z1bmN0aW9uIGcoKXt2YXIgZT0zRGQzLm1vdXNlKHRoaXMpLG49M0RlWzBdLHI9M0RlWzFdLG89 M0QhMCxhPQo9M0QhMTtsJiYobj0zRGQzLmV2ZW50Lm9mZnNldFgscj0zRGQzLmV2ZW50Lm9mZnNl dFksZDMuZXZlbnQudGFyZ2V0LnRhZ05hbWU9CiE9M0Q9M0Qic3ZnIiYmKG89M0QhMSksZDMuZXZl bnQudGFyZ2V0LmNsYXNzTmFtZS5iYXNlVmFsLm1hdGNoKCJudi1sZWdlbmQiKT0KJiYoYT0zRCEw KSksbyYmKG4tPTNEaS5sZWZ0LHItPTNEaS50b3ApO2lmKG48MHx8cjwwfHxuPnB8fHI+ZHx8ZDMu ZXZlbnQucmVsPQphdGVkVGFyZ2V0JiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0Lm93bmVyU1ZHRWxl bWVudD0zRD0zRD0zRHVuZGVmaW5lZHx8YSl7aWY9CihsJiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0 JiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0Lm93bmVyU1ZHRWxlbWVudD0zRD0zRD0zRD0KdW5kZWZp bmVkJiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTmFtZS5tYXRjaCh0Lm52UG9pbnRlckV2 ZW50c0NsYXNzKSlyPQpldHVybjt1LmVsZW1lbnRNb3VzZW91dCh7bW91c2VYOm4sbW91c2VZOnJ9 KSxjLnJlbmRlckd1aWRlTGluZShudWxsKTtyZXR1cm49Cn12YXIgZj0zRHMuaW52ZXJ0KG4pO3Uu ZWxlbWVudE1vdXNlbW92ZSh7bW91c2VYOm4sbW91c2VZOnIscG9pbnRYVmFsdWU6Zn0pLD0KZDMu ZXZlbnQudHlwZT0zRD0zRD0zRCJkYmxjbGljayImJnUuZWxlbWVudERibGNsaWNrKHttb3VzZVg6 bixtb3VzZVk6cixwb2luPQp0WFZhbHVlOmZ9KX12YXIgaD0zRGQzLnNlbGVjdCh0aGlzKSxwPTNE bnx8OTYwLGQ9M0RyfHw0MDAsdj0zRGguc2VsZWN0QWxsKCI9CmcubnYtd3JhcC5udi1pbnRlcmFj dGl2ZUxpbmVMYXllciIpLmRhdGEoW29dKSxtPTNEdi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dD0K cigiY2xhc3MiLCIgbnYtd3JhcCBudi1pbnRlcmFjdGl2ZUxpbmVMYXllciIpO20uYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJuPQp2LWludGVyYWN0aXZlR3VpZGVMaW5lIik7aWYoIWYpcmV0dXJu O2Yub24oIm1vdXNlbW92ZSIsZywhMCkub24oIm1vdXNlb3V0Iiw9CmcsITApLm9uKCJkYmxjbGlj ayIsZyksYy5yZW5kZXJHdWlkZUxpbmU9M0RmdW5jdGlvbih0KXtpZighYSlyZXR1cm47dmFyIG49 Cj0zRHYuc2VsZWN0KCIubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUiKS5zZWxlY3RBbGwoImxpbmUi KS5kYXRhKHQhPTNEbnVsbD9bZT0KLnV0aWxzLk5hTnRvWmVybyh0KV06W10sU3RyaW5nKTtuLmVu dGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJudi1nPQp1aWRlbGluZSIpLmF0dHIo IngxIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmF0dHIoIngyIixmdW5jdGlvbihlKXtyZXR1cm4g ZX09CikuYXR0cigieTEiLGQpLmF0dHIoInkyIiwwKSxuLmV4aXQoKS5yZW1vdmUoKX19KX12YXIg dD0zRGUubW9kZWxzLnRvb2x0aXAoKT0KLG49M0RudWxsLHI9M0RudWxsLGk9M0R7bGVmdDowLHRv cDowfSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxpPQpuZWFyKCksdT0zRGQz LmRpc3BhdGNoKCJlbGVtZW50TW91c2Vtb3ZlIiwiZWxlbWVudE1vdXNlb3V0IiwiZWxlbWVudERi bGNsaWM9CmsiKSxhPTNEITAsZj0zRG51bGwsbD0zRG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP ZigiTVNJRSIpIT0zRD0zRC0xO3JldHVybj0KIGMuZGlzcGF0Y2g9M0R1LGMudG9vbHRpcD0zRHQs Yy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhpLnRvcD0z RHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDppLnRvcCxpLmxlZnQ9M0R0eXBlb2Yg ZS5sZWZ0IT0KPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCxjKTppfSxjLndpZHRoPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8obj0zRGUsYyk6bn0sYy5oZWlnaHQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsYyk9CjpyfSxjLnhT Y2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxjKTpzfSxj LnNob3dHdWlkZT0KTGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh PTNEZSxjKTphfSxjLnN2Z0NvbnRhaW5lcj0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLGMpOmZ9LGN9LGUuaW50ZXJhY3RpdmVCaXNlY3Q9M0RmdW49CmN0aW9u KGUsdCxuKXtpZighZSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBudWxsO3R5cGVvZiBuIT0zRCJm dW5jdGlvbiImJihuPQo9M0RmdW5jdGlvbihlLHQpe3JldHVybiBlLnh9KTt2YXIgcj0zRGQzLmJp c2VjdG9yKG4pLmxlZnQsaT0zRGQzLm1heChbMCxyKGU9Cix0KS0xXSkscz0zRG4oZVtpXSxpKTt0 eXBlb2Ygcz0zRD0zRCJ1bmRlZmluZWQiJiYocz0zRGkpO2lmKHM9M0Q9M0Q9M0R0KXJldD0KdXJu IGk7dmFyIG89M0RkMy5taW4oW2krMSxlLmxlbmd0aC0xXSksdT0zRG4oZVtvXSxvKTtyZXR1cm4g dHlwZW9mIHU9M0Q9M0QiPQp1bmRlZmluZWQiJiYodT0zRG8pLE1hdGguYWJzKHUtdCk+PTNETWF0 aC5hYnMocy10KT9pOm99LGUubmVhcmVzdFZhbHVlSW5kZXg9Cj0zRGZ1bmN0aW9uKGUsdCxuKXt2 YXIgcj0zREluZmluaXR5LGk9M0RudWxsO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxzKT0K e3ZhciBvPTNETWF0aC5hYnModC1lKTtvPD0zRHImJm88biYmKHI9M0RvLGk9M0RzKX0pLGl9LGZ1 bmN0aW9uKCl7d2luZG93Lm52PQoudG9vbHRpcD0zRHt9LHdpbmRvdy5udi5tb2RlbHMudG9vbHRp cD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe2lmKGEpe3ZhciA9CmU9M0RkMy5zZWxlY3QoYSk7 ZS5ub2RlKCkudGFnTmFtZSE9M0Q9M0Qic3ZnIiYmKGU9M0RlLnNlbGVjdCgic3ZnIikpO3ZhciB0 PQo9M0RlLm5vZGUoKT9lLmF0dHIoInZpZXdCb3giKTpudWxsO2lmKHQpe3Q9M0R0LnNwbGl0KCIg Iik7dmFyIG49M0RwYXJzZUludCg9CmUuc3R5bGUoIndpZHRoIikpL3RbMl07bC5sZWZ0PTNEbC5s ZWZ0Km4sbC50b3A9M0RsLnRvcCpufX19ZnVuY3Rpb24gYihlKXt2YT0KciB0O2E/dD0zRGQzLnNl bGVjdChhKTp0PTNEZDMuc2VsZWN0KCJib2R5Iik7dmFyIG49M0R0LnNlbGVjdCgiLm52dG9vbHRp cCIpPQo7cmV0dXJuIG4ubm9kZSgpPTNEPTNEPTNEbnVsbCYmKG49M0R0LmFwcGVuZCgiZGl2Iiku YXR0cigiY2xhc3MiLCJudnRvb2x0aXA9CiAiKyh1P3U6Inh5LXRvb2x0aXAiKSkuYXR0cigiaWQi LGgpKSxuLm5vZGUoKS5pbm5lckhUTUw9M0RlLG4uc3R5bGUoInRvcCIsMD0KKS5zdHlsZSgibGVm dCIsMCkuc3R5bGUoIm9wYWNpdHkiLDApLG4uc2VsZWN0QWxsKCJkaXYsIHRhYmxlLCB0ZCwgdHIi KS5jbGFzPQpzZWQocCwhMCksbi5jbGFzc2VkKHAsITApLG4ubm9kZSgpfWZ1bmN0aW9uIHcoKXtp ZighYylyZXR1cm47aWYoIWcobikpcmV0dXI9Cm47eSgpO3ZhciB0PTNEbC5sZWZ0LHU9M0RvIT0z RG51bGw/bzpsLnRvcCxoPTNEYihtKG4pKTtmPTNEaDtpZihhKXt2YXIgcD0zRD0KYS5nZXRFbGVt ZW50c0J5VGFnTmFtZSgic3ZnIilbMF0sZD0zRHA/cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTph LmdldEJvdW5kPQppbmdDbGllbnRSZWN0KCksdj0zRHtsZWZ0OjAsdG9wOjB9O2lmKHApe3ZhciBF PTNEcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSw9ClM9M0RhLmdldEJvdW5kaW5nQ2xpZW50UmVj dCgpLHg9M0RFLnRvcDtpZih4PDApe3ZhciBUPTNEYS5nZXRCb3VuZGluZ0NsaWVudD0KUmVjdCgp O3g9M0RNYXRoLmFicyh4KT5ULmhlaWdodD8wOnh9di50b3A9M0RNYXRoLmFicyh4LVMudG9wKSx2 LmxlZnQ9M0RNYXRoPQouYWJzKEUubGVmdC1TLmxlZnQpfXQrPTNEYS5vZmZzZXRMZWZ0K3YubGVm dC0yKmEuc2Nyb2xsTGVmdCx1Kz0zRGEub2Zmc2V0VG89CnArdi50b3AtMiphLnNjcm9sbFRvcH1y ZXR1cm4gcyYmcz4wJiYodT0zRE1hdGguZmxvb3IodS9zKSpzKSxlLnRvb2x0aXAuY2FsYz0KVG9v bHRpcFBvc2l0aW9uKFt0LHVdLHIsaSxoKSx3fXZhciB0PTNEbnVsbCxuPTNEbnVsbCxyPTNEInci LGk9M0Q1MCxzPTNEMjUsPQpvPTNEbnVsbCx1PTNEbnVsbCxhPTNEbnVsbCxmPTNEbnVsbCxsPTNE e2xlZnQ6bnVsbCx0b3A6bnVsbH0sYz0zRCEwLGg9M0QibnY9CnRvb2x0aXAtIitNYXRoLmZsb29y KE1hdGgucmFuZG9tKCkqMWU1KSxwPTNEIm52LXBvaW50ZXItZXZlbnRzLW5vbmUiLGQ9M0RmdT0K bmN0aW9uKGUsdCl7cmV0dXJuIGV9LHY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZX0sbT0zRGZ1bmN0 aW9uKGUpe2lmKHQhPTNEbnVsPQpsKXJldHVybiB0O2lmKGU9M0Q9M0RudWxsKXJldHVybiIiO3Zh ciBuPTNEZDMuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ9CigidGFibGUiKSkscj0zRG4u c2VsZWN0QWxsKCJ0aGVhZCIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgidGhlYWQiKTtyLmFw cD0KZW5kKCJ0ciIpLmFwcGVuZCgidGQiKS5hdHRyKCJjb2xzcGFuIiwzKS5hcHBlbmQoInN0cm9u ZyIpLmNsYXNzZWQoIngtdmFsdWUiPQosITApLmh0bWwodihlLnZhbHVlKSk7dmFyIGk9M0RuLnNl bGVjdEFsbCgidGJvZHkiKS5kYXRhKFtlXSkuZW50ZXIoKS5hcHBlbmQ9CigidGJvZHkiKSxzPTNE aS5zZWxlY3RBbGwoInRyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXJpZXN9KS5lbnRl cigpLj0KYXBwZW5kKCJ0ciIpLmNsYXNzZWQoImhpZ2hsaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJu IGUuaGlnaGxpZ2h0fSk7cy5hcHBlbmQoPQoidGQiKS5jbGFzc2VkKCJsZWdlbmQtY29sb3ItZ3Vp ZGUiLCEwKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG89CnIiLGZ1bmN0aW9u KGUpe3JldHVybiBlLmNvbG9yfSkscy5hcHBlbmQoInRkIikuY2xhc3NlZCgia2V5IiwhMCkuaHRt bChmdW5jdD0KaW9uKGUpe3JldHVybiBlLmtleX0pLHMuYXBwZW5kKCJ0ZCIpLmNsYXNzZWQoInZh bHVlIiwhMCkuaHRtbChmdW5jdGlvbihlLHQpPQp7cmV0dXJuIGQoZS52YWx1ZSx0KX0pLHMuc2Vs ZWN0QWxsKCJ0ZCIpLmVhY2goZnVuY3Rpb24oZSl7aWYoZS5oaWdobGlnaHQpe3Y9CmFyIHQ9M0Rk My5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLnJhbmdlKFsiI2ZmZiIsZS5jb2xvcl0pLG49 M0QuNjtkMy5zZT0KbGVjdCh0aGlzKS5zdHlsZSgiYm9yZGVyLWJvdHRvbS1jb2xvciIsdChuKSku c3R5bGUoImJvcmRlci10b3AtY29sb3IiLHQobikpPQp9fSk7dmFyIG89M0RuLm5vZGUoKS5vdXRl ckhUTUw7cmV0dXJuIGUuZm9vdGVyIT0zRD0zRHVuZGVmaW5lZCYmKG8rPTNEIjxkaXY9CiBjbGFz cz0zRCdmb290ZXInPiIrZS5mb290ZXIrIjwvZGl2PiIpLG99LGc9M0RmdW5jdGlvbihlKXtyZXR1 cm4gZSYmZS5zZXJpZT0KcyYmZS5zZXJpZXMubGVuZ3RoPjA/ITA6ITF9O3JldHVybiB3Lm52UG9p bnRlckV2ZW50c0NsYXNzPTNEcCx3LmNvbnRlbnQ9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh0PTNEZSx3KTp0fSx3LnRvb2x0aXBFbGVtPTNEZnVuY3Rpb24oKXs9CnJl dHVybiBmfSx3LmNvbnRlbnRHZW5lcmF0b3I9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odHlwZW9mID0KZT0zRD0zRCJmdW5jdGlvbiImJihtPTNEZSksdyk6bX0sdy5kYXRh PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8obj0zRGUsdyk6bn0sdy5n cmF2aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLHcpOnI9 Cn0sdy5kaXN0YW5jZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNE ZSx3KTppfSx3LnNuYXBEaXN0YT0KbmNlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHM9M0RlLHcpOnN9LHcuY2xhc3Nlcz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHU9M0RlLHcpOnV9LHcuY2hhcnRDb250YWluZXI9M0RmdW5jdGlvbihlKXty ZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSx3KTphfSx3LnBvc2l0aW9uPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8obC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9 M0QidW5kZWZpbmVkIj9lLmxlZnQ6bC5sZWZ0LGwudG9wPTNEdHlwZW9mPQogZS50b3AhPTNEInVu ZGVmaW5lZCI/ZS50b3A6bC50b3Asdyk6bH0sdy5maXhlZFRvcD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmc9CnVtZW50cy5sZW5ndGg/KG89M0RlLHcpOm99LHcuZW5hYmxlZD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGM9M0RlLHcpOmN9LHcudmFsdWVGb3JtYXR0ZXI9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odHlwZW9mPQogZT0zRD0zRCJm dW5jdGlvbiImJihkPTNEZSksdyk6ZH0sdy5oZWFkZXJGb3JtYXR0ZXI9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyh0eXBlb2YgZT0zRD0zRCJmdW5jdGlvbiImJih2PTNE ZSksdyk6dn0sdy5pZD0zRGZ1bmN0aW9uKCl7cj0KZXR1cm4gaH0sd30sZS50b29sdGlwLnNob3c9 M0RmdW5jdGlvbih0LG4scixpLHMsbyl7dmFyIHU9M0Rkb2N1bWVudC5jcmVhdGVFPQpsZW1lbnQo ImRpdiIpO3UuY2xhc3NOYW1lPTNEIm52dG9vbHRpcCAiKyhvP286Inh5LXRvb2x0aXAiKTt2YXIg YT0zRHM7aWYoIXM9Cnx8cy50YWdOYW1lLm1hdGNoKC9nfHN2Zy9pKSlhPTNEZG9jdW1lbnQuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTt1Lj0Kc3R5bGUubGVmdD0zRDAsdS5zdHlsZS50 b3A9M0QwLHUuc3R5bGUub3BhY2l0eT0zRDAsdS5pbm5lckhUTUw9M0RuLGEuYXBwZW5kPQpDaGls ZCh1KSxzJiYodFswXT0zRHRbMF0tcy5zY3JvbGxMZWZ0LHRbMV09M0R0WzFdLXMuc2Nyb2xsVG9w KSxlLnRvb2x0aXAuY2E9CmxjVG9vbHRpcFBvc2l0aW9uKHQscixpLHUpfSxlLnRvb2x0aXAuZmlu ZEZpcnN0Tm9uU1ZHUGFyZW50PTNEZnVuY3Rpb24oZSl7dz0KaGlsZShlLnRhZ05hbWUubWF0Y2go L15nfHN2ZyQvaSkhPTNEPTNEbnVsbCllPTNEZS5wYXJlbnROb2RlO3JldHVybiBlfSxlLnRvPQpv bHRpcC5maW5kVG90YWxPZmZzZXRUb3A9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEdDtkbyBpc05h TihlLm9mZnNldFRvcCl8fCg9Cm4rPTNEZS5vZmZzZXRUb3ApO3doaWxlKGU9M0RlLm9mZnNldFBh cmVudCk7cmV0dXJuIG59LGUudG9vbHRpcC5maW5kVG90YWxPZj0KZnNldExlZnQ9M0RmdW5jdGlv bihlLHQpe3ZhciBuPTNEdDtkbyBpc05hTihlLm9mZnNldExlZnQpfHwobis9M0RlLm9mZnNldExl PQpmdCk7d2hpbGUoZT0zRGUub2Zmc2V0UGFyZW50KTtyZXR1cm4gbn0sZS50b29sdGlwLmNhbGNU b29sdGlwUG9zaXRpb249M0RmdW49CmN0aW9uKHQsbixyLGkpe3ZhciBzPTNEcGFyc2VJbnQoaS5v ZmZzZXRIZWlnaHQpLG89M0RwYXJzZUludChpLm9mZnNldFdpZHRoKT0KLHU9M0RlLnV0aWxzLndp bmRvd1NpemUoKS53aWR0aCxhPTNEZS51dGlscy53aW5kb3dTaXplKCkuaGVpZ2h0LGY9M0R3aW5k b3cuPQpwYWdlWU9mZnNldCxsPTNEd2luZG93LnBhZ2VYT2Zmc2V0LGMsaDthPTNEd2luZG93Lmlu bmVyV2lkdGg+PTNEZG9jdW1lbnQuYm89CmR5LnNjcm9sbFdpZHRoP2E6YS0xNix1PTNEd2luZG93 LmlubmVySGVpZ2h0Pj0zRGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Pz0KdTp1LTE2LG49M0Ru fHwicyIscj0zRHJ8fDIwO3ZhciBwPTNEZnVuY3Rpb24odCl7cmV0dXJuIGUudG9vbHRpcC5maW5k VG90YWxPPQpmZnNldFRvcCh0LGgpfSxkPTNEZnVuY3Rpb24odCl7cmV0dXJuIGUudG9vbHRpcC5m aW5kVG90YWxPZmZzZXRMZWZ0KHQsYyl9O3M9CndpdGNoKG4pe2Nhc2UiZSI6Yz0zRHRbMF0tby1y LGg9M0R0WzFdLXMvMjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7djxsJiYoYz0zRD0KdFswXStyPmw/ dFswXStyOmwtditjKSxtPGYmJihoPTNEZi1tK2gpLG0rcz5mK2EmJihoPTNEZithLW0raC1zKTti cmVhaztjYXNlPQoidyI6Yz0zRHRbMF0rcixoPTNEdFsxXS1zLzI7dmFyIHY9M0RkKGkpLG09M0Rw KGkpO3Yrbz51JiYoYz0zRHRbMF0tby1yKSxtPGY9CiYmKGg9M0RmKzUpLG0rcz5mK2EmJihoPTNE ZithLW0raC1zKTticmVhaztjYXNlIm4iOmM9M0R0WzBdLW8vMi01LGg9M0R0WzFdKz0Kcjt2YXIg dj0zRGQoaSksbT0zRHAoaSk7djxsJiYoYz0zRGwrNSksditvPnUmJihjPTNEYy1vLzIrNSksbStz PmYrYSYmKGg9M0RmPQorYS1tK2gtcyk7YnJlYWs7Y2FzZSJzIjpjPTNEdFswXS1vLzIsaD0zRHRb MV0tcy1yO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2PGw9CiYmKGM9M0RsKzUpLHYrbz51JiYoYz0z RGMtby8yKzUpLGY+bSYmKGg9M0RmKTticmVhaztjYXNlIm5vbmUiOmM9M0R0WzBdLGg9Cj0zRHRb MV0tcjt2YXIgdj0zRGQoaSksbT0zRHAoaSl9cmV0dXJuIGkuc3R5bGUubGVmdD0zRGMrInB4Iixp LnN0eWxlLnRvcD0zRD0KaCsicHgiLGkuc3R5bGUub3BhY2l0eT0zRDEsaS5zdHlsZS5wb3NpdGlv bj0zRCJhYnNvbHV0ZSIsaX0sZS50b29sdGlwLmNsZWFuPQp1cD0zRGZ1bmN0aW9uKCl7dmFyIGU9 M0Rkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJudnRvb2x0aXAiKSx0PTNEW109Cjt3 aGlsZShlLmxlbmd0aCl0LnB1c2goZVswXSksZVswXS5zdHlsZS50cmFuc2l0aW9uRGVsYXk9M0Qi MCAhaW1wb3J0YW50IixlWz0KMF0uc3R5bGUub3BhY2l0eT0zRDAsZVswXS5jbGFzc05hbWU9M0Qi bnZ0b29sdGlwLXBlbmRpbmctcmVtb3ZhbCI7c2V0VGltZW91PQp0KGZ1bmN0aW9uKCl7d2hpbGUo dC5sZW5ndGgpe3ZhciBlPTNEdC5wb3AoKTtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9fSw9 CjUwMCl9fSgpLGUudXRpbHMud2luZG93U2l6ZT0zRGZ1bmN0aW9uKCl7dmFyIGU9M0R7d2lkdGg6 NjQwLGhlaWdodDo0ODB9O3JldD0KdXJuIGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkub2Zm c2V0V2lkdGgmJihlLndpZHRoPTNEZG9jdW1lbnQuYm9keS5vZmZzPQpldFdpZHRoLGUuaGVpZ2h0 PTNEZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpLGRvY3VtZW50LmNvbXBhdE1vZGU9M0Q9M0Qi Q1M9ClMxQ29tcGF0IiYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVu dEVsZW1lbnQub2Zmc2V0V2lkdGgmJj0KKGUud2lkdGg9M0Rkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQub2Zmc2V0V2lkdGgsZS5oZWlnaHQ9M0Rkb2N1bWVudC5kb2N1bWVuPQp0RWxlbWVudC5vZmZz ZXRIZWlnaHQpLHdpbmRvdy5pbm5lcldpZHRoJiZ3aW5kb3cuaW5uZXJIZWlnaHQmJihlLndpZHRo PTNEd2k9Cm5kb3cuaW5uZXJXaWR0aCxlLmhlaWdodD0zRHdpbmRvdy5pbm5lckhlaWdodCksZX0s ZS51dGlscy53aW5kb3dSZXNpemU9M0RmdT0KbmN0aW9uKGUpe2lmKGU9M0Q9M0Q9M0R1bmRlZmlu ZWQpcmV0dXJuO3ZhciB0PTNEd2luZG93Lm9ucmVzaXplO3dpbmRvdy5vbnJlPQpzaXplPTNEZnVu Y3Rpb24obil7dHlwZW9mIHQ9M0Q9M0QiZnVuY3Rpb24iJiZ0KG4pLGUobil9fSxlLnV0aWxzLmdl dENvbG9yPQo9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9PYmplY3QucHJv dG90eXBlLnRvU3RyaW5nLmNhbGwodCk9M0Q9Cj0zRD0zRCJbb2JqZWN0IEFycmF5XSI/ZnVuY3Rp b24oZSxuKXtyZXR1cm4gZS5jb2xvcnx8dFtuJXQubGVuZ3RoXX06dDplLnV0aT0KbHMuZGVmYXVs dENvbG9yKCl9LGUudXRpbHMuZGVmYXVsdENvbG9yPTNEZnVuY3Rpb24oKXt2YXIgZT0zRGQzLnNj YWxlLmNhdGVnPQpvcnkyMCgpLnJhbmdlKCk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQu Y29sb3J8fGVbbiVlLmxlbmd0aF19fSxlLnV0aWw9CnMuY3VzdG9tVGhlbWU9M0RmdW5jdGlvbihl LHQsbil7dD0zRHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0sbj0zRG58fGQzLj0Kc2NhbGUu Y2F0ZWdvcnkyMCgpLnJhbmdlKCk7dmFyIHI9M0RuLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oaSxz KXt2YXIgbz0zRHQoPQppKTtyZXR1cm4gcnx8KHI9M0RuLmxlbmd0aCksdHlwZW9mIGVbb10hPTNE InVuZGVmaW5lZCI/dHlwZW9mIGVbb109M0Q9M0QiZnU9Cm5jdGlvbiI/ZVtvXSgpOmVbb106blst LXJdfX0sZS51dGlscy5wamF4PTNEZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKHIpe2QzLj0KaHRt bChyLGZ1bmN0aW9uKHIpe3ZhciBpPTNEZDMuc2VsZWN0KG4pLm5vZGUoKTtpLnBhcmVudE5vZGUu cmVwbGFjZUNoaWxkKGQzPQouc2VsZWN0KHIpLnNlbGVjdChuKS5ub2RlKCksaSksZS51dGlscy5w amF4KHQsbil9KX1kMy5zZWxlY3RBbGwodCkub24oImNsaWM9CmsiLGZ1bmN0aW9uKCl7aGlzdG9y eS5wdXNoU3RhdGUodGhpcy5ocmVmLHRoaXMudGV4dENvbnRlbnQsdGhpcy5ocmVmKSxyKHRoaT0K cy5ocmVmKSxkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSksZDMuc2VsZWN0KHdpbmRvdykub24o InBvcHN0YXRlIixmdW5jdGlvPQpuKCl7ZDMuZXZlbnQuc3RhdGUmJnIoZDMuZXZlbnQuc3RhdGUp fSl9LGUudXRpbHMuY2FsY0FwcHJveFRleHRXaWR0aD0zRGZ1bmM9CnRpb24oZSl7aWYodHlwZW9m IGUuc3R5bGU9M0Q9M0QiZnVuY3Rpb24iJiZ0eXBlb2YgZS50ZXh0PTNEPTNEImZ1bmN0aW9uIil7 dj0KYXIgdD0zRHBhcnNlSW50KGUuc3R5bGUoImZvbnQtc2l6ZSIpLnJlcGxhY2UoInB4IiwiIikp LG49M0RlLnRleHQoKS5sZW5ndGg7PQpyZXR1cm4gbip0Ki41fXJldHVybiAwfSxlLnV0aWxzLk5h TnRvWmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9M0Q9CiJudW1iZXIifHxpc05h TihlKXx8ZT0zRD0zRD0zRG51bGx8fGU9M0Q9M0Q9M0RJbmZpbml0eT8wOmV9LGUudXRpbHMub3B0 aW9ucz0KRnVuYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlJiZkMy5tYXAoZSkuZm9yRWFjaChmdW5j dGlvbihlLHQpe3R5cGVvZiB0aGlzW2VdPQo9M0Q9M0QiZnVuY3Rpb24iJiZ0aGlzW2VdKHQpfS5i aW5kKHRoaXMpKSx0aGlzfSxlLm1vZGVscy5heGlzPTNEZnVuY3Rpb24oKXs9CmZ1bmN0aW9uIG0o ZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRGQzLnNlbGVjdCh0aGlzKSxtPTNE aS5zZWxlYz0KdEFsbCgiZy5udi13cmFwLm52LWF4aXMiKS5kYXRhKFtlXSksZz0zRG0uZW50ZXIo KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnZkMyBudi13cmFwIG52LWF4aXMiKSx5PTNE Zy5hcHBlbmQoImciKSxiPTNEbS5zZWxlY3QoImciKTtwIT0zRD0zRG51bGw/dC49CnRpY2tzKHAp Oih0Lm9yaWVudCgpPTNEPTNEInRvcCJ8fHQub3JpZW50KCk9M0Q9M0QiYm90dG9tIikmJnQudGlj a3MoTWF0aC5hYj0KcyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKS8xMDApLGIuY2FsbCh0KSx2 PTNEdnx8dC5zY2FsZSgpO3ZhciB3PTNEdC50aWNrPQpGb3JtYXQoKTt3PTNEPTNEbnVsbCYmKHc9 M0R2LnRpY2tGb3JtYXQoKSk7dmFyIEU9M0RiLnNlbGVjdEFsbCgidGV4dC5udi1heGk9CnNsYWJl bCIpLmRhdGEoW298fG51bGxdKTtFLmV4aXQoKS5yZW1vdmUoKTtzd2l0Y2godC5vcmllbnQoKSl7 Y2FzZSJ0b3AiOkUuZT0KbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtYXhp c2xhYmVsIik7dmFyIFM9M0RzLnJhbmdlKCkubGVuZ3RoPQo9M0Q9M0QyP3MucmFuZ2UoKVsxXTpz LnJhbmdlKClbcy5yYW5nZSgpLmxlbmd0aC0xXSsocy5yYW5nZSgpWzFdLXMucmFuZ2UoKVs9CjBd KTtFLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsMCkuYXR0cigieCIsUy8y KTtpZih1KXt2YXIgeD0zRD0KbS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmRhdGEocy5k b21haW4oKSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudi1heGlzTWF4 TWluIikuYXBwZW5kKCJ0ZXh0IikseC5leGl0KCkucmVtb3ZlKCkseC5hdHRyKCJ0cmFuc2Zvcm09 CiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrcyhlKSsiLDApIn0pLnNlbGVjdCgi dGV4dCIpLmF0dHIoImR5IiwiLT0KMC41ZW0iKS5hdHRyKCJ5IiwtdC50aWNrUGFkZGluZygpKS5h dHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZnVuY3RpPQpvbihlLHQpe3ZhciBuPTNE dyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4LmF0dHIoInRyYW5zZm9ybSIs ZnU9Cm5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitzLnJhbmdlKClbdF0rIiwwKSJ9KX1i cmVhaztjYXNlImJvdHRvbSI6dmFyID0KVD0zRDM2LE49M0QzMCxDPTNEYi5zZWxlY3RBbGwoImci KS5zZWxlY3QoInRleHQiKTtpZihmJTM2MCl7Qy5lYWNoKGZ1bmN0aW9uPQooZSx0KXt2YXIgbj0z RHRoaXMuZ2V0QkJveCgpLndpZHRoO24+TiYmKE49M0RuKX0pO3ZhciBrPTNETWF0aC5hYnMoTWF0 aC5zaW49CihmKk1hdGguUEkvMTgwKSksVD0zRChrP2sqTjpOKSszMDtDLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybj0KInJvdGF0ZSgiK2YrIiAwLDApIn0pLnN0eWxlKCJ0 ZXh0LWFuY2hvciIsZiUzNjA+MD8ic3RhcnQiOiJlbmQiKX1FLmVudGVyKCkuPQphcHBlbmQoInRl eHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpO3ZhciBTPTNEcy5yYW5nZSgpLmxlbmd0 aD0zRD0zRDI9Cj9zLnJhbmdlKClbMV06cy5yYW5nZSgpW3MucmFuZ2UoKS5sZW5ndGgtMV0rKHMu cmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYT0KdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIp LmF0dHIoInkiLFQpLmF0dHIoIngiLFMvMik7aWYodSl7dmFyIHg9M0RtLnNlbGVjPQp0QWxsKCJn Lm52LWF4aXNNYXhNaW4iKS5kYXRhKFtzLmRvbWFpbigpWzBdLHMuZG9tYWluKClbcy5kb21haW4o KS5sZW5ndGgtMV09Cl0pO3guZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4 aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKSx4LmV4aT0KdCgpLnJlbW92ZSgpLHguYXR0cigidHJh bnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIisocyhlKSsoaD9zPQoucmFu Z2VCYW5kKCkvMjowKSkrIiwwKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi43MWVtIiku YXR0cigieSIsdC50aWM9CmtQYWRkaW5nKCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0 LG4pe3JldHVybiJyb3RhdGUoIitmKyIgMCwwKSJ9KS5zdD0KeWxlKCJ0ZXh0LWFuY2hvciIsZj9m JTM2MD4wPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgPQpu PTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4LmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0KXs9CnJldHVybiJ0cmFuc2xhdGUoIisocyhlKSsoaD9zLnJhbmdlQmFu ZCgpLzI6MCkpKyIsMCkifSl9YyYmQy5hdHRyKCJ0cmFuc2Zvcj0KbSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4idHJhbnNsYXRlKDAsIisodCUyPTNEPTNEMD8iMCI6IjEyIikrIikifSk7YnJlYWs7Y2Fz PQplInJpZ2h0IjpFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlz bGFiZWwiKSxFLnN0eWxlKCJ0ZXg9CnQtYW5jaG9yIixsPyJtaWRkbGUiOiJiZWdpbiIpLmF0dHIo InRyYW5zZm9ybSIsbD8icm90YXRlKDkwKSI6IiIpLmF0dHIoInkiLD0KbD8tTWF0aC5tYXgobi5y aWdodCxyKSsxMjotMTApLmF0dHIoIngiLGw/cy5yYW5nZSgpWzBdLzI6dC50aWNrUGFkZGluZygp KTtpPQpmKHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmRhdGEocy5k b21haW4oKSk7eC5lbnRlcigpLmFwcGU9Cm5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1heGlzTWF4 TWluIikuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDApLHguZT0KeGl0KCkucmVtb3Zl KCkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIr cyhlKSsiPQopIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5IiwiLjMyZW0iKS5hdHRyKCJ5Iiww KS5hdHRyKCJ4Iix0LnRpY2tQYWRkaW5nKCk9Cikuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQi KS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JldHVybigiIituKT0KLm1hdGNoKCJO YU4iKT8iIjpufSkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5z bGF0ZSgwLCIrPQpzLnJhbmdlKClbdF0rIikifSkuc2VsZWN0KCJ0ZXh0Iikuc3R5bGUoIm9wYWNp dHkiLDEpfWJyZWFrO2Nhc2UibGVmdCI6RS5lbnQ9CmVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigi Y2xhc3MiLCJudi1heGlzbGFiZWwiKSxFLnN0eWxlKCJ0ZXh0LWFuY2hvciIsbD8ibT0KaWRkbGUi OiJlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGw/InJvdGF0ZSgtOTApIjoiIikuYXR0cigieSIsbD8t TWF0aC5tYXgobi5sPQplZnQscikrZDotMTApLmF0dHIoIngiLGw/LXMucmFuZ2UoKVswXS8yOi10 LnRpY2tQYWRkaW5nKCkpO2lmKHUpe3ZhciB4PTNEbS49CnNlbGVjdEFsbCgiZy5udi1heGlzTWF4 TWluIikuZGF0YShzLmRvbWFpbigpKTt4LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiYz0KbGFz cyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMCkseC5l eGl0KCkucmVtb3ZlKCksPQp4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4i dHJhbnNsYXRlKDAsIit2KGUpKyIpIn0pLnNlbGVjdCgidGU9Cnh0IikuYXR0cigiZHkiLCIuMzJl bSIpLmF0dHIoInkiLDApLmF0dHIoIngiLC10LnRpY2tQYWRkaW5nKCkpLmF0dHIoInRleHQtYT0K bmNob3IiLCJlbmQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JldHVybigiIitu KS5tYXRjaCgiTmFOIik/IiI6PQpufSkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuInRyYW5zbGF0ZSgwLCIrcy5yYW5nZSgpW3RdKyIpIn09Cikuc2VsZWN0KCJ0ZXh0Iiku c3R5bGUoIm9wYWNpdHkiLDEpfX1FLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx1JiYodC5v cj0KaWVudCgpPTNEPTNEPTNEImxlZnQifHx0Lm9yaWVudCgpPTNEPTNEPTNEInJpZ2h0IikmJihi LnNlbGVjdEFsbCgiZyIpLmVhY2goPQpmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5zZWxl Y3QoInRleHQiKS5hdHRyKCJvcGFjaXR5IiwxKTtpZihzKGUpPHMucmE9Cm5nZSgpWzFdKzEwfHxz KGUpPnMucmFuZ2UoKVswXS0xMCkoZT4xZS0xMHx8ZTwtMWUtMTApJiZkMy5zZWxlY3QodGhpcyku YXR0cj0KKCJvcGFjaXR5IiwwKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuYXR0cigi b3BhY2l0eSIsMCl9KSxzLmRvbWFpbigpPQpbMF09M0Q9M0RzLmRvbWFpbigpWzFdJiZzLmRvbWFp bigpWzBdPTNEPTNEMCYmbS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiI9Cikuc3R5bGUoIm9w YWNpdHkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/MDoxfSkpO2lmKHUmJih0Lm9yaWVudCgpPTNE PTNEPTNEIj0KdG9wInx8dC5vcmllbnQoKT0zRD0zRD0zRCJib3R0b20iKSl7dmFyIEw9M0RbXTtt LnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluPQoiKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dHJ5e3Q/ TC5wdXNoKHMoZSktdGhpcy5nZXRCQm94KCkud2lkdGgtNCk6TC5wdXNoKHMoZSk9Cit0aGlzLmdl dEJCb3goKS53aWR0aCs0KX1jYXRjaChuKXt0P0wucHVzaChzKGUpLTQpOkwucHVzaChzKGUpKzQp fX0pLGIuc2VsZT0KY3RBbGwoImciKS5lYWNoKGZ1bmN0aW9uKGUsdCl7aWYocyhlKTxMWzBdfHxz KGUpPkxbMV0pZT4xZS0xMHx8ZTwtMWUtMTA/ZDMuPQpzZWxlY3QodGhpcykucmVtb3ZlKCk6ZDMu c2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLnJlbW92ZSgpfSl9YSYmYi5zZWxlY3Q9CkFsbCgi LnRpY2siKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXBhcnNlRmxvYXQoTWF0aC5yb3VuZChl Ll9fZGF0YV9fKjFlNT0KKS8xZTYpJiZlLl9fZGF0YV9fIT0zRD0zRHVuZGVmaW5lZH0pLmNsYXNz ZWQoInplcm8iLCEwKSx2PTNEcy5jb3B5KCl9KSxtfXZhPQpyIHQ9M0RkMy5zdmcuYXhpcygpLG49 M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHI9M0Q3NSxpPTNENjAscz0zRGQ9CjMu c2NhbGUubGluZWFyKCksbz0zRG51bGwsdT0zRCEwLGE9M0QhMCxmPTNEMCxsPTNEITAsYz0zRCEx LGg9M0QhMSxwPTNEbnVsbD0KLGQ9M0QxMjt0LnNjYWxlKHMpLm9yaWVudCgiYm90dG9tIikudGlj a0Zvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZX0pO3ZhciB2PQo7cmV0dXJuIG0uYXhpcz0zRHQs ZDMucmViaW5kKG0sdCwib3JpZW50IiwidGlja1ZhbHVlcyIsInRpY2tTdWJkaXZpZGUiLCJ0aWM9 CmtTaXplIiwidGlja1BhZGRpbmciLCJ0aWNrRm9ybWF0IiksZDMucmViaW5kKG0scywiZG9tYWlu IiwicmFuZ2UiLCJyYW5nZUJhbj0KZCIsInJhbmdlQmFuZHMiKSxtLm9wdGlvbnM9M0RlLnV0aWxz Lm9wdGlvbnNGdW5jLmJpbmQobSksbS5tYXJnaW49M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhuLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpu LnQ9Cm9wLG4ucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0Om4u cmlnaHQsbi5ib3R0b209M0R0eXBlbz0KZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRv bTpuLmJvdHRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlPQpmaW5lZCI/ZS5sZWZ0 Om4ubGVmdCxtKTpufSxtLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHI9Cj0zRGUsbSk6cn0sbS50aWNrcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhwPTNEZSxtKTpwfSxtLmhlaT0KZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGk9M0RlLG0pOml9LG0uYXhpc0xhYmVsPTNEZnVuY3RpPQpvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsbSk6b30sbS5zaG93TWF4TWluPTNEZnVuY3Rpb24o ZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsbSk6dX0sbS5oaWdobGlnaHRaZXJv PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oYT0zRGUsbSk6YX0sbS5z Y2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEPQplLHQuc2Nh bGUocyksaD0zRHR5cGVvZiBzLnJhbmdlQmFuZHM9M0Q9M0QiZnVuY3Rpb24iLGQzLnJlYmluZCht LHMsImRvbWFpbiI9CiwicmFuZ2UiLCJyYW5nZUJhbmQiLCJyYW5nZUJhbmRzIiksbSk6c30sbS5y b3RhdGVZTGFiZWw9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhsPTNE ZSxtKTpsfSxtLnJvdGF0ZUxhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5s ZW5ndGg/KGY9M0RlLG0pOmZ9LG0uc3RhZ2dlckxhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3Q9Cmg/KGM9M0RlLG0pOmN9LG0uYXhpc0xhYmVsRGlzdGFuY2U9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0KPTNEZSxtKTpkfSxtfSxlLm1vZGVs cy5oaXN0b3JpY2FsQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB3KEUpe3JldHVybiBFLmVhPQpj aChmdW5jdGlvbih3KXt2YXIgRT0zRG4tdC5sZWZ0LXQucmlnaHQsUz0zRHItdC50b3AtdC5ib3R0 b20sVD0zRGQzLnNlbGVjdCg9CnRoaXMpO3MuZG9tYWluKGR8fGQzLmV4dGVudCh3WzBdLnZhbHVl cy5tYXAodSkuY29uY2F0KGYpKSksYz9zLnJhbmdlKG18fFtFKj0KLjUvd1swXS52YWx1ZXMubGVu Z3RoLEUqKHdbMF0udmFsdWVzLmxlbmd0aC0uNSkvd1swXS52YWx1ZXMubGVuZ3RoXSk6cy5yYW5n PQplKG18fFswLEVdKSxvLmRvbWFpbih2fHxkMy5leHRlbnQod1swXS52YWx1ZXMubWFwKGEpLmNv bmNhdChsKSkpLnJhbmdlKGd8fFs9ClMsMF0pLHMuZG9tYWluKClbMF09M0Q9M0Q9M0RzLmRvbWFp bigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5kb21haT0KbigpWzBdLXMuZG9tYWlu KClbMF0qLjAxLHMuZG9tYWluKClbMV0rcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihbLTEs MV0pPQopLG8uZG9tYWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigpWzFdJiYoby5kb21haW4oKVsw XT9vLmRvbWFpbihbby5kb21haW4oKVs9CjBdK28uZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClb MV0tby5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEsMV0pKTt2YT0KciBOPTNEVC5zZWxl Y3RBbGwoImcubnYtd3JhcC5udi1oaXN0b3JpY2FsQmFyLSIraSkuZGF0YShbd1swXS52YWx1ZXNd KSxDPTNEPQpOLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtaGlzdG9yaWNhbEJhci0iK2kpLGs9M0Q9CkMuYXBwZW5kKCJkZWZzIiksTD0zREMuYXBwZW5k KCJnIiksQT0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYt YmFycyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsi KSIpLFQub24oPQoiY2xpY2siLGZ1bmN0aW9uKGUsdCl7eS5jaGFydENsaWNrKHtkYXRhOmUsaW5k ZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0pfSksay49CmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJp ZCIsIm52LWNoYXJ0LWNsaXAtcGF0aC0iK2kpLmFwcGVuZCgicmVjdCIpLE4uc2VsZT0KY3QoIiNu di1jaGFydC1jbGlwLXBhdGgtIitpKyIgcmVjdCIpLmF0dHIoIndpZHRoIixFKS5hdHRyKCJoZWln aHQiLFMpLEEuYXR0PQpyKCJjbGlwLXBhdGgiLGg/InVybCgjbnYtY2hhcnQtY2xpcC1wYXRoLSIr aSsiKSI6IiIpO3ZhciBPPTNETi5zZWxlY3QoIi5udi09CmJhcnMiKS5zZWxlY3RBbGwoIi5udi1i YXIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVybj0KIHUo ZSx0KX0pO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgicmVjdCIp LmF0dHIoIngiLDApLmF0PQp0cigieSIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50 b1plcm8obyhNYXRoLm1heCgwLGEodCxuKSkpKX0pLmF0dHI9CigiaGVpZ2h0IixmdW5jdGlvbih0 LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhNYXRoLmFicyhvKGEodCxuKSktbygwKSkpfT0K KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhzKHUo ZSx0KSktRS93WzBdLnZhbHVlPQpzLmxlbmd0aCouNDUpKyIsMCkifSkub24oIm1vdXNlb3ZlciIs ZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47ZDMuc2VsZWN0KHQ9CmhpcykuY2xhc3NlZCgiaG92 ZXIiLCEwKSx5LmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50OmUsc2VyaWVzOndbMF0scG9zOltzKHUo ZT0KLHQpKSxvKGEoZSx0KSldLHBvaW50SW5kZXg6dCxzZXJpZXNJbmRleDowLGU6ZDMuZXZlbnR9 KX0pLm9uKCJtb3VzZW91dCIsZnVuPQpjdGlvbihlLHQpe2lmKCFiKXJldHVybjtkMy5zZWxlY3Qo dGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSx5LmVsZW1lbnRNb3VzZW89CnV0KHtwb2ludDplLHNl cmllczp3WzBdLHBvaW50SW5kZXg6dCxzZXJpZXNJbmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJj bGljaz0KIixmdW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjt5LmVsZW1lbnRDbGljayh7dmFsdWU6 YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvPQpzOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2 ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCI9CmRibGNsaWNrIixm dW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjt5LmVsZW1lbnREYmxDbGljayh7dmFsdWU6YShlLHQp LGRhdGE6ZT0KLGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlk Oml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpPQpvbigpfSk7Ty5hdHRyKCJmaWxsIixmdW5jdGlv bihlLHQpe3JldHVybiBwKGUsdCl9KS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSw9CnQsbil7cmV0 dXJuKGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpdmUiKSsiIG52LWJh ci0iK24rIi0iKz0KdH0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJh bnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsPQp1ZXMubGVuZ3RoKi40NSkrIiwwKSJ9KS5h dHRyKCJ3aWR0aCIsRS93WzBdLnZhbHVlcy5sZW5ndGgqLjkpLE8uYXR0cigieSIsZnU9Cm5jdGlv bih0LG4pe3ZhciByPTNEYSh0LG4pPDA/bygwKTpvKDApLW8oYSh0LG4pKTwxP28oMCktMTpvKGEo dCxuKSk7cmV0dXJuID0KZS51dGlscy5OYU50b1plcm8ocil9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0 aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvPQooTWF0aC5tYXgoTWF0aC5hYnMobyhh KHQsbikpLW8oMCkpLDEpKX0pfSksd312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTo9CjAs bGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQp LHM9M0RkMy5zY2FsZS5saT0KbmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JlPQp0dXJuIGUueX0sZj0zRFtdLGw9 M0RbMF0sYz0zRCExLGg9M0QhMCxwPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxkLHYsbSxnLHk9 Cj0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENs aWNrIiwiZWxlbWVudE1vdXNlbz0KdmVyIiwiZWxlbWVudE1vdXNlb3V0IiksYj0zRCEwO3JldHVy biB3LmhpZ2hsaWdodFBvaW50PTNEZnVuY3Rpb24oZSx0KXtkMy5zPQplbGVjdCgiLm52LWhpc3Rv cmljYWxCYXItIitpKS5zZWxlY3QoIi5udi1iYXJzIC5udi1iYXItMC0iK2UpLmNsYXNzZWQoImhv dmU9CnIiLHQpfSx3LmNsZWFySGlnaGxpZ2h0cz0zRGZ1bmN0aW9uKCl7ZDMuc2VsZWN0KCIubnYt aGlzdG9yaWNhbEJhci0iK2kpLnNlbD0KZWN0KCIubnYtYmFycyAubnYtYmFyLmhvdmVyIikuY2xh c3NlZCgiaG92ZXIiLCExKX0sdy5kaXNwYXRjaD0zRHksdy5vcHRpb25zPQo9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQodyksdy54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHU9Cj0zRGUsdyk6dX0sdy55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLHcpOmF9LHcubWFyZ2luPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI9Cj9lLnRvcDp0LnRv cCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0 LHQuYm90dD0Kb209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5i b3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmPQp0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0Lmxl ZnQsdyk6dH0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/ KG49M0RlLHcpOm59LHcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHI9M0RlLD0Kdyk6cn0sdy54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocz0zRGUsdyk6c30sdy55U2NhbGU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZSx3KTpvfSx3LnhEb21haW49M0RmdW5jdGlvbihlKT0Ke3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx3KTpkfSx3LnlEb21haW49M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh2PTNEZSx3KTp2fSx3LnhSYW5nZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPQo9M0RlLHcpOm19LHcueVJhbmdlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLHcpOmd9LHcuZm89CnJjZVg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsdyk6Zn0sdy5mb3Jj ZVk9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSx3KTpsfSx3 LnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhjPTNEZSx3 KTpjfSx3LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8o aD0zRGUsdyk6aH0sdy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhwPTNEZS51dGlscy5nZT0KdENvbG9yKHQpLHcpOnB9LHcuaWQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdyk6aX0sdy5pPQpudGVyYWN0aXZlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0QhMSx3KTpifSx3fSxlLm1vZGVscy49 CmJ1bGxldD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9u KGUsbil7dmFyIHA9M0RjLXQubD0KZWZ0LXQucmlnaHQsbT0zRGgtdC50b3AtdC5ib3R0b20sZz0z RGQzLnNlbGVjdCh0aGlzKSx5PTNEaS5jYWxsKHRoaXMsZSxuKS5zPQpsaWNlKCkuc29ydChkMy5k ZXNjZW5kaW5nKSxiPTNEcy5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGlu Zyk9Cix3PTNEby5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksRT0z RHUuY2FsbCh0aGlzLGUsbikuc2xpYz0KZSgpLFM9M0RhLmNhbGwodGhpcyxlLG4pLnNsaWNlKCks eD0zRGYuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSxUPTNEZDMuc2NhbGUuPQpsaW5lYXIoKS5kb21h aW4oZDMuZXh0ZW50KGQzLm1lcmdlKFtsLHldKSkpLnJhbmdlKHI/W3AsMF06WzAscF0pLE49M0R0 aGlzLl89Cl9jaGFydF9ffHxkMy5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsSW5maW5pdHldKS5y YW5nZShULnJhbmdlKCkpO3RoaXMuX19jaD0KYXJ0X189M0RUO3ZhciBDPTNEZDMubWluKHkpLGs9 M0RkMy5tYXgoeSksTD0zRHlbMV0sQT0zRGcuc2VsZWN0QWxsKCJnLm52LXdyPQphcC5udi1idWxs ZXQiKS5kYXRhKFtlXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 ZDMgbnYtd3I9CmFwIG52LWJ1bGxldCIpLE09M0RPLmFwcGVuZCgiZyIpLF89M0RBLnNlbGVjdCgi ZyIpO00uYXBwZW5kKCJyZWN0IikuYXR0cigiYz0KbGFzcyIsIm52LXJhbmdlIG52LXJhbmdlTWF4 IiksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LXJhbmdlIG52LXJhPQpuZ2VBdmci KSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VNaW4iKSxN LmFwcGVuZCgicmU9CmN0IikuYXR0cigiY2xhc3MiLCJudi1tZWFzdXJlIiksTS5hcHBlbmQoInBh dGgiKS5hdHRyKCJjbGFzcyIsIm52LW1hcmtlclRyaT0KYW5nbGUiKSxBLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgRD0zRGZ1bmN0PQppb24o ZSl7cmV0dXJuIE1hdGguYWJzKE4oZSktTigwKSl9LFA9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0 aC5hYnMoVChlKS1UKDA9CikpfSxIPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9OKGUpOk4oMCl9 LEI9M0RmdW5jdGlvbihlKXtyZXR1cm4gZTwwP1QoZSk6VD0KKDApfTtfLnNlbGVjdCgicmVjdC5u di1yYW5nZU1heCIpLmF0dHIoImhlaWdodCIsbSkuYXR0cigid2lkdGgiLFAoaz4wP2s6QykpPQou YXR0cigieCIsQihrPjA/azpDKSkuZGF0dW0oaz4wP2s6QyksXy5zZWxlY3QoInJlY3QubnYtcmFu Z2VBdmciKS5hdHRyKCJoZWk9CmdodCIsbSkuYXR0cigid2lkdGgiLFAoTCkpLmF0dHIoIngiLEIo TCkpLmRhdHVtKEwpLF8uc2VsZWN0KCJyZWN0Lm52LXJhbmdlTT0KaW4iKS5hdHRyKCJoZWlnaHQi LG0pLmF0dHIoIndpZHRoIixQKGspKS5hdHRyKCJ4IixCKGspKS5hdHRyKCJ3aWR0aCIsUChrPjA/ PQpDOmspKS5hdHRyKCJ4IixCKGs+MD9DOmspKS5kYXR1bShrPjA/QzprKSxfLnNlbGVjdCgicmVj dC5udi1tZWFzdXJlIikuc3R5bGU9CigiZmlsbCIsZCkuYXR0cigiaGVpZ2h0IixtLzMpLmF0dHIo InkiLG0vMykuYXR0cigid2lkdGgiLHc8MD9UKDApLVQod1swXSk6VD0KKHdbMF0pLVQoMCkpLmF0 dHIoIngiLEIodykpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdmVy KHt2PQphbHVlOndbMF0sbGFiZWw6eFswXXx8IkN1cnJlbnQiLHBvczpbVCh3WzBdKSxtLzJdfSl9 KS5vbigibW91c2VvdXQiLGZ1bmN0aW89Cm4oKXt2LmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6d1sw XSxsYWJlbDp4WzBdfHwiQ3VycmVudCJ9KX0pO3ZhciBqPTNEbS82O2JbMD0KXT9fLnNlbGVjdEFs bCgicGF0aC5udi1tYXJrZXJUcmlhbmdsZSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7 cmV0dXJuPQoidHJhbnNsYXRlKCIrVChiWzBdKSsiLCIrbS8yKyIpIn0pLmF0dHIoImQiLCJNMCwi K2orIkwiK2orIiwiKyAtaisiICIrIC1qKyI9CiwiKyAtaisiWiIpLm9uKCJtb3VzZW92ZXIiLGZ1 bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTpiWzBdLGxhYmVsOj0KU1swXXx8IlBy ZXZpb3VzIixwb3M6W1QoYlswXSksbS8yXX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3Yu ZWxlbWVudE1vPQp1c2VvdXQoe3ZhbHVlOmJbMF0sbGFiZWw6U1swXXx8IlByZXZpb3VzIn0pfSk6 Xy5zZWxlY3RBbGwoInBhdGgubnYtbWFya2VyVHI9CmlhbmdsZSIpLnJlbW92ZSgpLEEuc2VsZWN0 QWxsKCIubnYtcmFuZ2UiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe3Zhcj0KIG49M0RF W3RdfHwodD90PTNEPTNEMT8iTWVhbiI6Ik1pbmltdW0iOiJNYXhpbXVtIik7di5lbGVtZW50TW91 c2VvdmVyKHt2YWx1PQplOmUsbGFiZWw6bixwb3M6W1QoZSksbS8yXX0pfSkub24oIm1vdXNlb3V0 IixmdW5jdGlvbihlLHQpe3ZhciBuPTNERVt0XXx8KHQ9Cj90PTNEPTNEMT8iTWVhbiI6Ik1pbmlt dW0iOiJNYXhpbXVtIik7di5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmUsbGFiZWw6bn0pfT0KKX0p LG19dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0QibGVmdCIscj0z RCExLGk9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBlLnJhbmdlc30scz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLm1hcmtlcnN9LG89M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBlLm1lYXN1cmVzfSx1PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmFuZ2VMYWJlbHM/ZS5yYW5nZUxhYmVsczpbXX0sYT0zRD0K ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFya2VyTGFiZWxzP2UubWFya2VyTGFiZWxzOltdfSxmPTNE ZnVuY3Rpb24oZSl7cmV0dXJuPQogZS5tZWFzdXJlTGFiZWxzP2UubWVhc3VyZUxhYmVsczpbXX0s bD0zRFswXSxjPTNEMzgwLGg9M0QzMCxwPTNEbnVsbCxkPTNEZS49CnV0aWxzLmdldENvbG9yKFsi IzFmNzdiNCJdKSx2PTNEZDMuZGlzcGF0Y2goImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91 cz0KZW91dCIpO3JldHVybiBtLmRpc3BhdGNoPTNEdixtLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlv bnNGdW5jLmJpbmQobSksbS5vcmllPQpudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhuPTNEZSxyPTNEbj0zRD0zRCJyaWdodCJ8fG49M0Q9M0Q9CiJib3R0b20iLG0pOm59 LG0ucmFuZ2VzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLG0p Oml9LD0KbS5tYXJrZXJzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9 M0RlLG0pOnN9LG0ubWVhc3VyZXM9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhvPTNEZSxtKTpvfSxtLmZvcmNlWD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50 cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbj0KZ3RoPyhjPTNEZSxtKTpjfSxtLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhoPTNEZSxtKTpoPQp9LG0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCI9CnVuZGVmaW5l ZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6dC5yaT0KZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQi P2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5PQpwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVk Ij9lLmxlZnQ6dC5sZWZ0LG0pOnR9LG0udGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLG0pOnB9LG0uY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1 cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhkPTNEZS51dGlscy5nZXRDb2xvcih0KSxtKTpkfSxtfSxl Lm1vZGVscy5idWxsZXRDaGFydD0zRGZ1bmN0aW9uKCl7PQpmdW5jdGlvbiBtKGUpe3JldHVybiBl LmVhY2goZnVuY3Rpb24obixoKXt2YXIgZz0zRGQzLnNlbGVjdCh0aGlzKSx5PTNEKGF8fHA9CmFy c2VJbnQoZy5zdHlsZSgid2lkdGgiKSl8fDk2MCktaS5sZWZ0LWkucmlnaHQsYj0zRGYtaS50b3At aS5ib3R0b20sdz0zRHRoaT0KczttLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7bShlKX0sbS5jb250YWlu ZXI9M0R0aGlzO2lmKCFufHwhcy5jYWxsKHRoaXMsbixoKSl7PQp2YXIgRT0zRGcuc2VsZWN0QWxs KCIubnYtbm9EYXRhIikuZGF0YShbcF0pO3JldHVybiBFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Iik9 Ci5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxl KCJ0ZXh0LWFuY2hvciIsIm1pZD0KZGxlIiksRS5hdHRyKCJ4IixpLmxlZnQreS8yKS5hdHRyKCJ5 IiwxOCtpLnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuPQogZX0pLG19Zy5zZWxlY3RB bGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgUz0zRHMuY2FsbCh0aGlzLG4saCkuc2xpY2Uo KS49CnNvcnQoZDMuZGVzY2VuZGluZykseD0zRG8uY2FsbCh0aGlzLG4saCkuc2xpY2UoKS5zb3J0 KGQzLmRlc2NlbmRpbmcpLFQ9M0R1Lj0KY2FsbCh0aGlzLG4saCkuc2xpY2UoKS5zb3J0KGQzLmRl c2NlbmRpbmcpLE49M0RnLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWJ1PQpsbGV0Q2hhcnQiKS5k YXRhKFtuXSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt d3JhcCA9Cm52LWJ1bGxldENoYXJ0Iiksaz0zREMuYXBwZW5kKCJnIiksTD0zRE4uc2VsZWN0KCJn Iik7ay5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtYnVsbGV0V3JhcCIpLGsuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi10aXRsZXMiKSxOLmF0dHIoInRyYW5zPQpmb3JtIiwidHJh bnNsYXRlKCIraS5sZWZ0KyIsIitpLnRvcCsiKSIpO3ZhciBBPTNEZDMuc2NhbGUubGluZWFyKCku ZG9tYWluKFs9CjAsTWF0aC5tYXgoU1swXSx4WzBdLFRbMF0pXSkucmFuZ2Uocj9beSwwXTpbMCx5 XSksTz0zRHRoaXMuX19jaGFydF9ffHxkMy5zYz0KYWxlLmxpbmVhcigpLmRvbWFpbihbMCxJbmZp bml0eV0pLnJhbmdlKEEucmFuZ2UoKSk7dGhpcy5fX2NoYXJ0X189M0RBO3ZhciBNPQo9M0RmdW5j dGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoTyhlKS1PKDApKX0sXz0zRGZ1bmN0aW9uKGUpe3JldHVy biBNYXRoLmFicyg9CkEoZSktQSgwKSl9LEQ9M0RrLnNlbGVjdCgiLm52LXRpdGxlcyIpLmFwcGVu ZCgiZyIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoLTYsIisoZi1pLnRvcC1pLmJvdHRvbSkvMisiKSIpO0QuYXBwZW5kKCJ0ZXh0PQoiKS5h dHRyKCJjbGFzcyIsIm52LXRpdGxlIikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZS50aXRsZX0p LEQuYXBwZW5kKCJ0ZXg9CnQiKS5hdHRyKCJjbGFzcyIsIm52LXN1YnRpdGxlIikuYXR0cigiZHki LCIxZW0iKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLj0Kc3VidGl0bGV9KSx0LndpZHRoKHkp LmhlaWdodChiKTt2YXIgUD0zREwuc2VsZWN0KCIubnYtYnVsbGV0V3JhcCIpO2QzLnRyYW5zPQpp dGlvbihQKS5jYWxsKHQpO3ZhciBIPTNEbHx8QS50aWNrRm9ybWF0KHkvMTAwKSxCPTNETC5zZWxl Y3RBbGwoImcubnYtdGljayI9CikuZGF0YShBLnRpY2tzKHkvNTApLGZ1bmN0aW9uKGUpe3JldHVy biB0aGlzLnRleHRDb250ZW50fHxIKGUpfSksaj0zREIuZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtdGljayIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJu PQoidHJhbnNsYXRlKCIrTyhlKSsiLDApIn0pLnN0eWxlKCJvcGFjaXR5IiwxZS02KTtqLmFwcGVu ZCgibGluZSIpLmF0dHIoInkxIiw9CmIpLmF0dHIoInkyIixiKjcvNiksai5hcHBlbmQoInRleHQi KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImR5Ij0KLCIxZW0iKS5hdHRyKCJ5 IixiKjcvNikudGV4dChIKTt2YXIgRj0zRGQzLnRyYW5zaXRpb24oQikuYXR0cigidHJhbnNmb3Jt IixmPQp1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitBKGUpKyIsMCkifSkuc3R5bGUoIm9w YWNpdHkiLDEpO0Yuc2VsZWN0KCJsaW49CmUiKS5hdHRyKCJ5MSIsYikuYXR0cigieTIiLGIqNy82 KSxGLnNlbGVjdCgidGV4dCIpLmF0dHIoInkiLGIqNy82KSxkMy50cmFucz0KaXRpb24oQi5leGl0 KCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK0EoZSkr IiwwKSJ9PQopLnN0eWxlKCJvcGFjaXR5IiwxZS02KS5yZW1vdmUoKSxkLm9uKCJ0b29sdGlwU2hv dyIsZnVuY3Rpb24oZSl7ZS5rZXk9M0RuLnQ9Cml0bGUsYyYmdihlLHcucGFyZW50Tm9kZSl9KX0p LGQzLnRpbWVyLmZsdXNoKCksbX12YXIgdD0zRGUubW9kZWxzLmJ1bGxldCgpLD0Kbj0zRCJsZWZ0 IixyPTNEITEsaT0zRHt0b3A6NSxyaWdodDo0MCxib3R0b206MjAsbGVmdDoxMjB9LHM9M0RmdW5j dGlvbihlKXtyPQpldHVybiBlLnJhbmdlc30sbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcmtl cnN9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS49Cm1lYXN1cmVzfSxhPTNEbnVsbCxmPTNENTUs bD0zRG51bGwsYz0zRCEwLGg9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aD0KMz4iK3Qr IjwvaDM+IisiPHA+IituKyI8L3A+In0scD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLGQ9M0RkMy5k aXNwYXRjaCgidG9vPQpsdGlwU2hvdyIsInRvb2x0aXBIaWRlIiksdj0zRGZ1bmN0aW9uKHQsbil7 dmFyIHI9M0R0LnBvc1swXSsobi5vZmZzZXRMZWZ0fHw9CjApK2kubGVmdCxzPTNEdC5wb3NbMV0r KG4ub2Zmc2V0VG9wfHwwKStpLnRvcCxvPTNEaCh0LmtleSx0LmxhYmVsLHQudmFsdWUsdD0KLG0p O2UudG9vbHRpcC5zaG93KFtyLHNdLG8sdC52YWx1ZTwwPyJlIjoidyIsbnVsbCxuKX07cmV0dXJu IHQuZGlzcGF0Y2gub24oPQoiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtk LnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWw9CmVtZW50TW91c2VvdXQudG9vbHRp cCIsZnVuY3Rpb24oZSl7ZC50b29sdGlwSGlkZShlKX0pLGQub24oInRvb2x0aXBIaWRlIixmdT0K bmN0aW9uKCl7YyYmZS50b29sdGlwLmNsZWFudXAoKX0pLG0uZGlzcGF0Y2g9M0RkLG0uYnVsbGV0 PTNEdCxkMy5yZWJpbmQobSx0PQosImNvbG9yIiksbS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kKG0pLG0ub3JpZW50PTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxl bmd0aD8obj0zRGUscj0zRG49M0Q9M0QicmlnaHQifHxuPTNEPTNEImJvdHRvbSIsbSk6bn0sbS5y YT0Kbmdlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxtKTpz fSxtLm1hcmtlcnM9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNE ZSxtKTpvfSxtLm1lYXN1cmVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0 aD8odT0zRGUsbSk6dX0sbS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPz0KKGE9M0RlLG0pOmF9LG0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLG0pOmZ9LG0uPQptYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGU9CmZpbmVkIj9lLnRv cDppLnRvcCxpLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpp LnJpZ2h0LD0KaS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0 b206aS5ib3R0b20saS5sZWZ0PTNEdHlwZW9mPQogZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVm dDppLmxlZnQsbSk6aX0sbS50aWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1l bnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubD0KZW5ndGg/KGM9M0RlLG0pOmN9LG0udG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpoPTNEZSxtKTpofSxtLm5vRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSxtfSw9CmUubW9k ZWxzLmN1bXVsYXRpdmVMaW5lQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEQoYil7cmV0dXJu IGIuZWFjaChmdW5jdD0KaW9uKGIpe2Z1bmN0aW9uIEkoZSx0KXtkMy5zZWxlY3QoRC5jb250YWlu ZXIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKX1mPQp1bmN0aW9uIHEoZSx0KXtNLng9M0Rk My5ldmVudC54LE0uaT0zRE1hdGgucm91bmQoTy5pbnZlcnQoTS54KSksbnQoKX1mdW5jdGk9Cm9u IFIoZSx0KXtkMy5zZWxlY3QoRC5jb250YWluZXIpLnN0eWxlKCJjdXJzb3IiLCJhdXRvIikseC5p bmRleD0zRE0uaSxrLnN0YT0KdGVDaGFuZ2UoeCl9ZnVuY3Rpb24gbnQoKXt0dC5kYXRhKFtNXSk7 dmFyIGU9M0RELnRyYW5zaXRpb25EdXJhdGlvbigpO0QudHJhPQpuc2l0aW9uRHVyYXRpb24oMCks RC51cGRhdGUoKSxELnRyYW5zaXRpb25EdXJhdGlvbihlKX12YXIgTD0zRGQzLnNlbGVjdCh0aGk9 CnMpLmNsYXNzZWQoIm52LWNoYXJ0LSIrUywhMCksQT0zRHRoaXMsSD0zRChmfHxwYXJzZUludChM LnN0eWxlKCJ3aWR0aCIpKXx8OT0KNjApLXUubGVmdC11LnJpZ2h0LEI9M0QobHx8cGFyc2VJbnQo TC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tPQo7RC51cGRhdGU9M0RmdW5j dGlvbigpe0wuY2FsbChEKX0sRC5jb250YWluZXI9M0R0aGlzLHguZGlzYWJsZWQ9M0RiLm1hcChm dW49CmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFUKXt2YXIgajtUPTNEe307Zm9y KGogaW4geCl4W2pdaW5zdGFuY2VvZj0KIEFycmF5P1Rbal09M0R4W2pdLnNsaWNlKDApOlRbal09 M0R4W2pdfXZhciBGPTNEZDMuYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnPQpzdGFydCIsSSkub24o ImRyYWciLHEpLm9uKCJkcmFnZW5kIixSKTtpZighYnx8IWIubGVuZ3RofHwhYi5maWx0ZXIoZnVu Y3Rpb249CihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgVT0zREwuc2Vs ZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YT0KKFtOXSk7cmV0dXJuIFUuZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiPQpkeSIsIi0uN2Vt Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksVS5hdHRyKCJ4Iix1LmxlZnQrSC8yKS5h dHRyKCJ5Iiw9CnUudG9wK0IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLER9TC5zZWxl Y3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKT0KLHc9M0R0LnhTY2FsZSgpLEU9M0R0LnlTY2Fs ZSgpO2lmKCF5KXt2YXIgej0zRGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlPQouZGlzYWJs ZWR9KS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgcj0zRGQzLmV4dGVudChlLnZhbHVlcyx0LnkoKSk7 cmV0dXJuIHJbMF09CjwtMC45NSYmKHJbMF09M0QtMC45NSksWyhyWzBdLXJbMV0pLygxK3JbMV0p LChyWzFdLXJbMF0pLygxK3JbMF0pXX0pLFc9M0RbZD0KMy5taW4oeixmdW5jdGlvbihlKXtyZXR1 cm4gZVswXX0pLGQzLm1heCh6LGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfSldO3QueURvPQptYWlu KFcpfWVsc2UgdC55RG9tYWluKG51bGwpO08uZG9tYWluKFswLGJbMF0udmFsdWVzLmxlbmd0aC0x XSkucmFuZ2UoWzAsSF09CikuY2xhbXAoITApO3ZhciBiPTNEUChNLmksYiksWD0zRGc/Im5vbmUi OiJhbGwiLFY9M0RMLnNlbGVjdEFsbCgiZy5udi13cmFwLj0KbnYtY3VtdWxhdGl2ZUxpbmUiKS5k YXRhKFtiXSksJD0zRFYuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgPQpu di13cmFwIG52LWN1bXVsYXRpdmVMaW5lIikuYXBwZW5kKCJnIiksSj0zRFYuc2VsZWN0KCJnIik7 JC5hcHBlbmQoImciKS5hdHQ9CnIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmUiKSwkLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIikuc3R5bD0KZSgicG9pbnRlci1ldmVudHMi LCJub25lIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLCQuYXBw PQplbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhY2tncm91bmQiKSwkLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtbGluZXM9CldyYXAiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLFgpLCQu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1hdmdMaW5lc1dyYT0KcCIpLnN0eWxlKCJwb2lu dGVyLWV2ZW50cyIsIm5vbmUiKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5k V3JhPQpwIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLGMm JihpLndpZHRoKEgpLEouc2VsZWN0KCI9Ci5udi1sZWdlbmRXcmFwIikuZGF0dW0oYikuY2FsbChp KSx1LnRvcCE9M0RpLmhlaWdodCgpJiYodS50b3A9M0RpLmhlaWdodCgpLD0KQj0zRChsfHxwYXJz ZUludChMLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLEouc2VsZWN0KCIu bnYtbGVnPQplbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLXUudG9w KyIpIikpO2lmKG0pe3ZhciBLPTNEW3trZXk9CjoiUmUtc2NhbGUgeS1heGlzIixkaXNhYmxlZDoh eX1dO3Mud2lkdGgoMTQwKS5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKT0KLnJpZ2h0QWxp Z24oITEpLm1hcmdpbih7dG9wOjUscmlnaHQ6MCxib3R0b206NSxsZWZ0OjIwfSksSi5zZWxlY3Qo Ii5udi1jb250PQpyb2xzV3JhcCIpLmRhdHVtKEspLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgwLCIrIC11LnRvcCsiKSIpLmNhbGwocyl9Vi49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSxkJiZKLnNlbGVjdCgiLm52LXkubnYtYT0KeGlzIiku YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSCsiLDApIik7dmFyIFE9M0RiLmZpbHRlcihm dW5jdGlvbihlKXtyPQpldHVybiBlLnRlbXBEaXNhYmxlZH0pO1Yuc2VsZWN0KCIudGVtcERpc2Fi bGVkIikucmVtb3ZlKCksUS5sZW5ndGgmJlYuYXBwZW49CmQoInRleHQiKS5hdHRyKCJjbGFzcyIs InRlbXBEaXNhYmxlZCIpLmF0dHIoIngiLEgvMikuYXR0cigieSIsIi0uNzFlbSIpLnN0eT0KbGUo InRleHQtYW5jaG9yIiwiZW5kIikudGV4dChRLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9 KS5qb2luKCIsICIpKyIgPQp2YWx1ZXMgY2Fubm90IGJlIGNhbGN1bGF0ZWQgZm9yIHRoaXMgdGlt ZSBwZXJpb2QuIiksZyYmKG8ud2lkdGgoSCkuaGVpZ2h0KEI9CikubWFyZ2luKHtsZWZ0OnUubGVm dCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoTCkueFNjYWxlKHcpLFYuc2VsZWN0KCIubnYtaT0K bnRlcmFjdGl2ZSIpLmNhbGwobykpLCQuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLmFwcGVuZCgi cmVjdCIpLEouc2VsZWN0KCIuPQpudi1iYWNrZ3JvdW5kIHJlY3QiKS5hdHRyKCJ3aWR0aCIsSCku YXR0cigiaGVpZ2h0IixCKSx0LnkoZnVuY3Rpb24oZSl7cmV0dXI9Cm4gZS5kaXNwbGF5Lnl9KS53 aWR0aChIKS5oZWlnaHQoQikuY29sb3IoYi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xv cj0KfHxhKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hYlt0XS5kaXNhYmxlZCYm IWJbdF0udGVtcERpc2FibGVkfSkpPQo7dmFyIEc9M0RKLnNlbGVjdCgiLm52LWxpbmVzV3JhcCIp LmRhdHVtKGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2E9CmJsZWQmJiFlLnRlbXBE aXNhYmxlZH0pKTtHLmNhbGwodCksYi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5zZXJpZXNJbmRl eD0zRD0KdH0pO3ZhciBZPTNEYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQm JiEhQyhlKX0pLFo9M0RKLnNlbGVjdCgiPQoubnYtYXZnTGluZXNXcmFwIikuc2VsZWN0QWxsKCJs aW5lIikuZGF0YShZLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pLGV0PQo9M0RmdW5jdGlvbihl KXt2YXIgdD0zREUoQyhlKSk7cmV0dXJuIHQ8MD8wOnQ+Qj9COnR9O1ouZW50ZXIoKS5hcHBlbmQo ImxpbmU9CiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5 IiwiMTAsMTAiKS5zdHlsZSgic3Ryb2tlIj0KLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY29sb3Io KShlLGUuc2VyaWVzSW5kZXgpfSkuYXR0cigieDEiLDApLmF0dHIoIngyIixIPQopLmF0dHIoInkx IixldCkuYXR0cigieTIiLGV0KSxaLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oZSl7 dmFyIHQ9M0Q9CkUoQyhlKSk7cmV0dXJuIHQ8MHx8dD5CPzA6MX0pLmF0dHIoIngxIiwwKS5hdHRy KCJ4MiIsSCkuYXR0cigieTEiLGV0KS5hdHRyKD0KInkyIixldCksWi5leGl0KCkucmVtb3ZlKCk7 dmFyIHR0PTNERy5zZWxlY3RBbGwoIi5udi1pbmRleExpbmUiKS5kYXRhKFtNXSk7PQp0dC5lbnRl cigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtaW5kZXhMaW5lIikuYXR0cigid2lk dGgiLDMpLmF0dHI9CigieCIsLTIpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJmaWxsLW9wYWNp dHkiLC41KS5zdHlsZSgicG9pbnRlci1ldmVudHMiLD0KImFsbCIpLmNhbGwoRiksdHQuYXR0cigi dHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrTyhlLmkpKyIsPQowKSJ9 KS5hdHRyKCJoZWlnaHQiLEIpLGgmJihuLnNjYWxlKHcpLnRpY2tzKE1hdGgubWluKGJbMF0udmFs dWVzLmxlbmd0aCxILzc9CjApKS50aWNrU2l6ZSgtQiwwKSxKLnNlbGVjdCgiLm52LXgubnYtYXhp cyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLD0KIitFLnJhbmdlKClbMF0rIikiKSxk My50cmFuc2l0aW9uKEouc2VsZWN0KCIubnYteC5udi1heGlzIikpLmNhbGwobikpLHAmJihyPQou c2NhbGUoRSkudGlja3MoQi8zNikudGlja1NpemUoLUgsMCksZDMudHJhbnNpdGlvbihKLnNlbGVj dCgiLm52LXkubnYtYXhpcyI9CikpLmNhbGwocikpLEouc2VsZWN0KCIubnYtYmFja2dyb3VuZCBy ZWN0Iikub24oImNsaWNrIixmdW5jdGlvbigpe00ueD0zRGQzLj0KbW91c2UodGhpcylbMF0sTS5p PTNETWF0aC5yb3VuZChPLmludmVydChNLngpKSx4LmluZGV4PTNETS5pLGsuc3RhdGVDaGFuZ2Uo PQp4KSxudCgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNrIixmdW5jdGlvbihlKXtNLmk9 M0RlLnBvaW50SW5kZXgsTS54PQo9M0RPKE0uaSkseC5pbmRleD0zRE0uaSxrLnN0YXRlQ2hhbmdl KHgpLG50KCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayI9CixmdW5jdGlvbihlLHQpe2Uu ZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCx5PTNEIWUuZGlzYWJsZWQseC5yZXNjYWxlWT0zRHksay5z dD0KYXRlQ2hhbmdlKHgpLEQudXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIs ZnVuY3Rpb24oZSl7eC5kaXNhYmxlPQpkPTNEZS5kaXNhYmxlZCxrLnN0YXRlQ2hhbmdlKHgpLEQu dXBkYXRlKCl9KSxvLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vtb3Y9CmUiLGZ1bmN0aW9uKGkp e3QuY2xlYXJIaWdobGlnaHRzKCk7dmFyIHMsZixsLGM9M0RbXTtiLmZpbHRlcihmdW5jdGlvbihl LHQpez0KcmV0dXJuIGUuc2VyaWVzSW5kZXg9M0R0LCFlLmRpc2FibGVkfSkuZm9yRWFjaChmdW5j dGlvbihuLHIpe2Y9M0RlLmludGVyYWN0PQppdmVCaXNlY3Qobi52YWx1ZXMsaS5wb2ludFhWYWx1 ZSxELngoKSksdC5oaWdobGlnaHRQb2ludChyLGYsITApO3ZhciBvPTNEbi49CnZhbHVlc1tmXTtp Zih0eXBlb2Ygbz0zRD0zRCJ1bmRlZmluZWQiKXJldHVybjt0eXBlb2Ygcz0zRD0zRCJ1bmRlZmlu ZWQiJiYocz0KPTNEbyksdHlwZW9mIGw9M0Q9M0QidW5kZWZpbmVkIiYmKGw9M0RELnhTY2FsZSgp KEQueCgpKG8sZikpKSxjLnB1c2goe2tleTpuPQoua2V5LHZhbHVlOkQueSgpKG8sZiksY29sb3I6 YShuLG4uc2VyaWVzSW5kZXgpfSl9KTtpZihjLmxlbmd0aD4yKXt2YXIgaD0zREQ9Ci55U2NhbGUo KS5pbnZlcnQoaS5tb3VzZVkpLHA9M0RNYXRoLmFicyhELnlTY2FsZSgpLmRvbWFpbigpWzBdLUQu eVNjYWxlKCkuZD0Kb21haW4oKVsxXSksZD0zRC4wMypwLG09M0RlLm5lYXJlc3RWYWx1ZUluZGV4 KGMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhPQpsdWV9KSxoLGQpO20hPTNEPTNEbnVsbCYm KGNbbV0uaGlnaGxpZ2h0PTNEITApfXZhciBnPTNEbi50aWNrRm9ybWF0KCkoRC54KCk9CihzLGYp LGYpO28udG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK3UubGVmdCx0b3A6aS5tb3VzZVkrdS50b3B9 KS5jaGFydENvbnRhaT0KbmVyKEEucGFyZW50Tm9kZSkuZW5hYmxlZCh2KS52YWx1ZUZvcm1hdHRl cihmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtPQphdCgpKGUpfSkuZGF0YSh7dmFsdWU6 ZyxzZXJpZXM6Y30pKCksby5yZW5kZXJHdWlkZUxpbmUobCl9KSxvLmRpc3BhdGNoLm9uKCI9CmVs ZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7ay50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGln aHRzKCl9KSxrLm9uKCJ0bz0Kb2x0aXBTaG93IixmdW5jdGlvbihlKXt2JiZfKGUsQS5wYXJlbnRO b2RlKX0pLGsub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlPQope3R5cGVvZiBlLmRpc2FibGVk IT0zRCJ1bmRlZmluZWQiJiYoYi5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0zRGU9 Ci5kaXNhYmxlZFtuXX0pLHguZGlzYWJsZWQ9M0RlLmRpc2FibGVkKSx0eXBlb2YgZS5pbmRleCE9 M0QidW5kZWZpbmVkIiYmKE0uaT0KPTNEZS5pbmRleCxNLng9M0RPKE0uaSkseC5pbmRleD0zRGUu aW5kZXgsdHQuZGF0YShbTV0pKSx0eXBlb2YgZS5yZXNjYWxlWSE9Cj0zRCJ1bmRlZmluZWQiJiYo eT0zRGUucmVzY2FsZVkpLEQudXBkYXRlKCl9KX0pLER9ZnVuY3Rpb24gUChlLG4pe3JldHVybiBu Lj0KbWFwKGZ1bmN0aW9uKG4scil7aWYoIW4udmFsdWVzKXJldHVybiBuO3ZhciBpPTNEbi52YWx1 ZXNbZV07aWYoaT0zRD0zRG51bGwpPQpyZXR1cm4gbjt2YXIgcz0zRHQueSgpKGksZSk7cmV0dXJu IHM8LTAuOTUmJiFBPyhuLnRlbXBEaXNhYmxlZD0zRCEwLG4pOihuLnQ9CmVtcERpc2FibGVkPTNE ITEsbi52YWx1ZXM9M0RuLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5kaXNwbGF5 PTNEez0KeToodC55KCkoZSxuKS1zKS8oMStzKX0sZX0pLG4pfSl9dmFyIHQ9M0RlLm1vZGVscy5s aW5lKCksbj0zRGUubW9kZWxzLmF4aXMoPQopLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9k ZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5pbnQ9CmVyYWN0aXZlR3Vp ZGVsaW5lKCksdT0zRHt0b3A6MzAscmlnaHQ6MzAsYm90dG9tOjUwLGxlZnQ6NjB9LGE9M0RlLnV0 aWxzLmRlZj0KYXVsdENvbG9yKCksZj0zRG51bGwsbD0zRG51bGwsYz0zRCEwLGg9M0QhMCxwPTNE ITAsZD0zRCExLHY9M0QhMCxtPTNEITAsZz0KPTNEITEseT0zRCEwLGI9M0RmdW5jdGlvbihlLHQs bixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrPQp0KyI8L3A+In0s dyxFLFM9M0R0LmlkKCkseD0zRHtpbmRleDowLHJlc2NhbGVZOnl9LFQ9M0RudWxsLE49M0QiTm8g RGF0YSBBdmE9CmlsYWJsZS4iLEM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5hdmVyYWdlfSxrPTNE ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidD0Kb29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwi Y2hhbmdlU3RhdGUiKSxMPTNEMCxBPTNEITE7bi5vcmllbnQoImJvdHRvbSIpLnRpPQpja1BhZGRp bmcoNyksci5vcmllbnQoZD8icmlnaHQiOiJsZWZ0Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIE89 M0RkMy5zY2FsZS49CmxpbmVhcigpLE09M0R7aTowLHg6MH0sXz0zRGZ1bmN0aW9uKGkscyl7dmFy IG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKT0KLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRU b3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRlPQp4KSks Zj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRGIoaS5z ZXJpZXMua2V5LGEsZiw9CmksRCk7ZS50b29sdGlwLnNob3coW28sdV0sbCxudWxsLG51bGwscyl9 O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91cz0KZW92ZXIudG9vbHRpcCIsZnVuY3Rp b24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3UudG9wXSxrLnRvb2x0PQpp cFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rp b24oZSl7ay50b29sdGlwSGk9CmRlKGUpfSksay5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7 diYmZS50b29sdGlwLmNsZWFudXAoKX0pLEQuZGlzcGF0Y2g9Cj0zRGssRC5saW5lcz0zRHQsRC5s ZWdlbmQ9M0RpLEQueEF4aXM9M0RuLEQueUF4aXM9M0RyLEQuaW50ZXJhY3RpdmVMYXllcj0zRD0K byxkMy5yZWJpbmQoRCx0LCJkZWZpbmVkIiwiaXNBcmVhIiwieCIsInkiLCJ4U2NhbGUiLCJ5U2Nh bGUiLCJzaXplIiwieERvbWFpPQpuIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNl WCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCI9CmNsaXBWb3Jvbm9pIiwidXNl Vm9yb25vaSIsImlkIiksRC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEQpLEQu bT0KYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odS50b3A9M0R0 eXBlb2YgZS50b3AhPTNEInVuZGVmPQppbmVkIj9lLnRvcDp1LnRvcCx1LnJpZ2h0PTNEdHlwZW9m IGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHU9Ci5ib3R0b209M0R0eXBl b2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20sdS5sZWZ0PTNEdHlw ZW9mID0KZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp1LmxlZnQsRCk6dX0sRC53aWR0aD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KGY9M0RlLEQpOmZ9LEQuaGVp Z2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Cj0zRGUsRCk6bH0s RC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZS51dGls cy5nZXRDbz0KbG9yKHQpLGkuY29sb3IoYSksRCk6YX0sRC5yZXNjYWxlWT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PQo9M0RlLEQpOnl9LEQuc2hvd0NvbnRyb2xzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEQpOm09Cn0sRC51c2VJ bnRlcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhnPTNEZSxlPQo9M0Q9M0Q9M0QhMCYmKEQuaW50ZXJhY3RpdmUoITEpLEQudXNlVm9yb25vaSgh MSkpLEQpOmd9LEQuc2hvd0xlZ2VuZD0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGM9M0RlLEQpOmN9LEQuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJn dW1lbnRzLmxlbmd0aD8oaD0zRGUsRCk6aH0sRC5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhwPTNEZSxEKTpwfSxELnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGQ9M0RlLHIub3JpZW50KGU/InJp Z2h0IjoibGVmdCIpLEQpOmR9LEQudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1 bWVudHMubGVuZ3RoPyh2PTNEZSxEKTp2fSxELnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oYj0zRGUsRCk6Yn0sRC5zdGF0ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSw9CkQpOnh9LEQuZGVmYXVsdFN0YXRl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEQpOlR9LEQubj0K b0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj0zRGUsRCk6Tn0s RC5hdmVyYWdlPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0zRGUs RCk6Q30sRC50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbig9CmUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhMPTNEZSxEKTpMfSxELm5vRXJyb3JDaGVjaz0zRGZ1bmN0aW9uKGUpe3JldHVy bj0KIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEQpOkF9LER9LGUubW9kZWxzLmRpc2NyZXRlQmFy PTNEZnVuY3Rpb24oKXtmdW5jdGlvPQpuIEUoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2 YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQsRT0zRHItdC50b3AtdC5ib3Q9CnRvbSxTPTNEZDMuc2Vs ZWN0KHRoaXMpO2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZvckVhY2goZnVuY3Rp b24oZT0KKXtlLnNlcmllcz0zRHR9KX0pO3ZhciBUPTNEcCYmZD9bXTplLm1hcChmdW5jdGlvbihl KXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTph KGUsdCkseTA6ZS55MH19KX0pO3MuZG9tYWluKHB8fGQzLm1lcmdlKFQpLm09CmFwKGZ1bmN0aW9u KGUpe3JldHVybiBlLnh9KSkucmFuZ2VCYW5kcyh2fHxbMCxpXSwuMSksby5kb21haW4oZHx8ZDMu ZXh0ZW50KD0KZDMubWVyZ2UoVCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9KS5jb25jYXQo ZikpKSxjP28ucmFuZ2UobXx8W0UtKG8uZG9tPQphaW4oKVswXTwwPzEyOjApLG8uZG9tYWluKClb MV0+MD8xMjowXSk6by5yYW5nZShtfHxbRSwwXSksYj0zRGJ8fHMsdz0zRHd8fG89Ci5jb3B5KCku cmFuZ2UoW28oMCksbygwKV0pO3ZhciBOPTNEUy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1kaXNj cmV0ZWJhciIpLj0KZGF0YShbZV0pLEM9M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGViPQphciIpLGs9M0RDLmFwcGVuZCgiZyIpLEw9 M0ROLnNlbGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm89CnVwcyIp LE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3Zh ciBBPTNETi5zZWxlYz0KdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0 YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oPQplKXtyZXR1cm4gZS5rZXl9KTtBLmVu dGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSg9CiJm aWxsLW9wYWNpdHkiLDFlLTYpLEEuZXhpdCgpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNiku c3R5bGUoImZpbGwtb3BhYz0KaXR5IiwxZS02KS5yZW1vdmUoKSxBLmF0dHIoImNsYXNzIixmdW5j dGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtPQoiK3R9KS5jbGFzc2VkKCJob3Zl ciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KSxBLnN0eWxlKCJzdHJva2Utb3BhY2l0eSI9 CiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBPPTNEQS5zZWxlY3RBbGwoImcubnYt YmFyIikuZGF0YShmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVlc30pO08uZXhpdCgpLnJlbW92 ZSgpO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoPQoidHJhbnNmb3JtIixmdW5j dGlvbihlLHQsbil7cmV0dXJuInRyYW5zbGF0ZSgiKyhzKHUoZSx0KSkrcy5yYW5nZUJhbmQoKSou MDU9CikrIiwgIitvKDApKyIpIn0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQsbil7ZDMuc2Vs ZWN0KHRoaXMpLmNsYXNzZWQoImhvdj0KZXIiLCEwKSxnLmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVl OmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3MoPQp1KHQsbikpK3MucmFu Z2VCYW5kKCkqKHQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSldLHBvaW50SW5kZXg6bixz ZXJpZXM9CkluZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rp b24odCxuKXtkMy5zZWxlY3QodGhpcykuYz0KbGFzc2VkKCJob3ZlciIsITEpLGcuZWxlbWVudE1v dXNlb3V0KHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllPQpzXSxwb2ludElu ZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oImNsaWNrIixmdW5j dGlvbih0LG49Cil7Zy5lbGVtZW50Q2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczpl W3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLj0KcmFuZ2VCYW5kKCkqKHQuc2VyaWVzKy41KS9l Lmxlbmd0aCxvKGEodCxuKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlPQpyaWVzLGU6 ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIsZnVu Y3Rpb24odCxuKXs9CmcuZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJp ZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcz0KLnJhbmdlQmFuZCgpKih0LnNlcmllcysu NSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zPQplcmll cyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KTtNLmFwcGVuZCgicmVj dCIpLmF0dHIoImhlaWc9Cmh0IiwwKS5hdHRyKCJ3aWR0aCIscy5yYW5nZUJhbmQoKSouOS9lLmxl bmd0aCksYz8oTS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZT0KeHQtYW5jaG9yIiwibWlkZGxlIiks Ty5zZWxlY3QoInRleHQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoYShlLHQpKX0pPQou YXR0cigieCIscy5yYW5nZUJhbmQoKSouOS8yKS5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVy biBhKGUsdCk8MD9vKGEoZSw9CnQpKS1vKDApKzEyOi00fSkpOk8uc2VsZWN0QWxsKCJ0ZXh0Iiku cmVtb3ZlKCksTy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KT0Ke3JldHVybiBhKGUsdCk8MD8i bnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIn0pLnN0eWxlKCJmaWxsIixmdW5jdGlv PQpuKGUsdCl7cmV0dXJuIGUuY29sb3J8fGwoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIGUuY29sb3I9Cnx8bChlLHQpfSkuc2VsZWN0KCJyZWN0IikuYXR0cigiY2xh c3MiLHkpLmF0dHIoIndpZHRoIixzLnJhbmdlQmFuZCgpKi45L2UubD0KZW5ndGgpLE8uYXR0cigi dHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3ZhciBuPTNEcyh1KGUsdCkpK3MucmFuZ2VCYW5kKCkq LjA1PQoscj0zRGEoZSx0KTwwP28oMCk6bygwKS1vKGEoZSx0KSk8MT9vKDApLTE6byhhKGUsdCkp O3JldHVybiJ0cmFuc2xhdGUoIituKyI9CiwgIityKyIpIn0pLnNlbGVjdCgicmVjdCIpLmF0dHIo ImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aD0KLmFicyhvKGEoZSx0 KSktbyhkJiZkWzBdfHwwKSl8fDEpfSksYj0zRHMuY29weSgpLHc9M0RvLmNvcHkoKX0pLEV9dmFy IHQ9M0R7PQp0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9 M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCk9CioxZTQpLHM9M0RkMy5zY2FsZS5vcmRpbmFsKCks bz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0KLnh9LGE9M0Rm dW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEWzBdLGw9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigp LGM9M0QhMSxoPQo9M0RkMy5mb3JtYXQoIiwuMmYiKSxwLGQsdixtLGc9M0RkMy5kaXNwYXRjaCgi Y2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImU9CmxlbWVudERibENsaWNrIiwiZWxlbWVudE1v dXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLHk9M0QiZGlzY3JldGVCYXIiLGIsdz0KO3JldHVy biBFLmRpc3BhdGNoPTNEZyxFLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoRSks RS54PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsRSk6dX0s RS55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8oYT0zRGUsRSk6YX0s RS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50bz0KcD0z RHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9m IGUucmlnaHQhPTNEInVuPQpkZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBl b2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b209Cjp0LmJvdHRvbSx0LmxlZnQ9M0R0 eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsRSk6dH0sRS53aWR0aD0K PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLEUpOm59LEUuaGVp Z2h0PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsRSk6cn0s RS54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyhzPTNEZSxF KTpzfSxFLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNE ZT0KLEUpOm99LEUueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhwPTNEZSxFKTpwfSxFLnlEb21hPQppbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhkPTNEZSxFKTpkfSxFLnhSYW5nZT0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHY9M0RlLEUpOnZ9LEUueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZT0KbnRzLmxlbmd0aD8obT0zRGUsRSk6bX0sRS5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0KPTNEZSxFKTpmfSxFLmNvbG9yPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvPQpsb3IodCksRSk6bH0s RS5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxFKTppfSxF LnNob3c9ClZhbHVlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNE ZSxFKTpjfSxFLnZhbHVlRm9ybWF0PTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaD0zRGUsRSk6aH0sRS5yZWN0Q2xhc3M9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh5PTNEZSxFKTp5fSxFfSxlLm1vZGVscy5kaXNjcmV0ZUJhckNoYXJ0PTNE ZnVuY3Rpb249Cigpe2Z1bmN0aW9uIHcoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIg dT0zRGQzLnNlbGVjdCh0aGlzKSxwPTNEdGhpcz0KLHk9M0Qoc3x8cGFyc2VJbnQodS5zdHlsZSgi d2lkdGgiKSl8fDk2MCktaS5sZWZ0LWkucmlnaHQsRT0zRChvfHxwYXJzZUludCh1PQouc3R5bGUo ImhlaWdodCIpKXx8NDAwKS1pLnRvcC1pLmJvdHRvbTt3LnVwZGF0ZT0zRGZ1bmN0aW9uKCl7Zy5i ZWZvcmVVcGRhdGU9CigpLHUuY2FsbCh3KX0sdy5jb250YWluZXI9M0R0aGlzO2lmKCFlfHwhZS5s ZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZT0KdHVybiBlLnZhbHVlcy5sZW5ndGh9KS5s ZW5ndGgpe3ZhciBTPTNEdS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFttXSk7PQpyZXR1 cm4gUy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEi KS5hdHRyKCJkeSIsIi09Ci43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxTLmF0 dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLGkudG9wKz0KRS8yKS50ZXh0KGZ1bmN0aW9uKGUp e3JldHVybiBlfSksd311LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGQ9M0R0PQou eFNjYWxlKCksdj0zRHQueVNjYWxlKCkuY2xhbXAoITApO3ZhciBUPTNEdS5zZWxlY3RBbGwoImcu bnYtd3JhcC5udi1kaXNjcmU9CnRlQmFyV2l0aEF4ZXMiKS5kYXRhKFtlXSksTj0zRFQuZW50ZXIo KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtdz0KcmFwIG52LWRpc2NyZXRlQmFy V2l0aEF4ZXMiKS5hcHBlbmQoImciKSxDPTNETi5hcHBlbmQoImRlZnMiKSxrPTNEVC5zZWxlY3Qo PQoiZyIpO04uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxOLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiw9CiJudi15IG52LWF4aXMiKS5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXplcm9MaW5lIikuYXBwZW5kKCJsaW5lIiksTi5hcD0KcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtYmFyc1dyYXAiKSxrLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ku bGVmPQp0KyIsIitpLnRvcCsiKSIpLGwmJmsuc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKCI9Cit5KyIsMCkiKSx0LndpZHRoKHkpLmhlaWdodChFKTt2 YXIgTD0zRGsuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShlLmZpbD0KdGVyKGZ1bmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkfSkpO0wuY2FsbCh0KSxDLmFwcGVuZCgiY2xpcFBhdGgiKS5h dHRyKCJpPQpkIiwibnYteC1sYWJlbC1jbGlwLSIrdC5pZCgpKS5hcHBlbmQoInJlY3QiKSxrLnNl bGVjdCgiI252LXgtbGFiZWwtY2xpcC0iK3Q9Ci5pZCgpKyIgcmVjdCIpLmF0dHIoIndpZHRoIixk LnJhbmdlQmFuZCgpKihjPzI6MSkpLmF0dHIoImhlaWdodCIsMTYpLmF0dHIoIj0KeCIsLWQucmFu Z2VCYW5kKCkvKGM/MToyKSk7aWYoYSl7bi5zY2FsZShkKS50aWNrcyh5LzEwMCkudGlja1NpemUo LUUsMCksay5zPQplbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgwLCIrKHYucmFuZ2UoKVswXSsodC5zaG89CndWYWx1ZXMoKSYmdi5kb21haW4oKVswXTww PzE2OjApKSsiKSIpLGsuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKTt2YT0KciBBPTNE ay5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImciKTtjJiZBLnNlbGVjdEFsbCgi dGV4dCIpLmF0dHIoPQoidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuInRyYW5zbGF0 ZSgwLCIrKG4lMj0zRD0zRDA/IjUiOiIxNyIpKyIpIn09Cil9ZiYmKHIuc2NhbGUodikudGlja3Mo RS8zNikudGlja1NpemUoLXksMCksay5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKD0Kcikp LGsuc2VsZWN0KCIubnYtemVyb0xpbmUgbGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIseSku YXR0cigieTEiLHYoMCkpPQouYXR0cigieTIiLHYoMCkpLGcub24oInRvb2x0aXBTaG93IixmdW5j dGlvbihlKXtoJiZiKGUscC5wYXJlbnROb2RlKX0pfSksd309CnZhciB0PTNEZS5tb2RlbHMuZGlz Y3JldGVCYXIoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRD0K e3RvcDoxNSxyaWdodDoxMCxib3R0b206NTAsbGVmdDo2MH0scz0zRG51bGwsbz0zRG51bGwsdT0z RGUudXRpbHMuZ2V0Q29sb3IoPQopLGE9M0QhMCxmPTNEITAsbD0zRCExLGM9M0QhMSxoPTNEITAs cD0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK3Q9CisiPC9oMz4iKyI8cD4iK24r IjwvcD4ifSxkLHYsbT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLGc9M0RkMy5kaXNwYXRjaCgidG9v bD0KdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYmVmb3JlVXBkYXRlIikseT0zRDA7bi5vcmllbnQo ImJvdHRvbSIpLmhpZ2hsaWdodFplPQpybyghMSkuc2hvd01heE1pbighMSkudGlja0Zvcm1hdChm dW5jdGlvbihlKXtyZXR1cm4gZX0pLHIub3JpZW50KGw/InJpZ2h0Ijo9CiJsZWZ0IikudGlja0Zv cm1hdChkMy5mb3JtYXQoIiwuMWYiKSk7dmFyIGI9M0RmdW5jdGlvbihpLHMpe3ZhciBvPTNEaS5w b3NbMD0KXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxh PTNEbi50aWNrRm9ybWF0KCkodC54KCkoPQppLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRp Y2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9M0Q9CnAoaS5zZXJpZXMu a2V5LGEsZixpLHcpO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52YWx1ZTwwPyJuIjoicyIsbnVs bCxzKX07cj0KZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixm dW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swPQpdK2kubGVmdCxlLnBvc1sxXStpLnRvcF0sZy50 b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC49CnRvb2x0aXAi LGZ1bmN0aW9uKGUpe2cudG9vbHRpcEhpZGUoZSl9KSxnLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rp b24oKXtoJiZlLj0KdG9vbHRpcC5jbGVhbnVwKCl9KSx3LmRpc3BhdGNoPTNEZyx3LmRpc2NyZXRl YmFyPTNEdCx3LnhBeGlzPTNEbix3LnlBeGlzPTNEPQpyLGQzLnJlYmluZCh3LHQsIngiLCJ5Iiwi eERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3I9CmNlWSIs ImlkIiwic2hvd1ZhbHVlcyIsInZhbHVlRm9ybWF0Iiksdy5vcHRpb25zPTNEZS51dGlscy5vcHRp b25zRnVuYy5iaW5kKD0Kdyksdy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaS50b3A9M0R0eXBlb2YgZS50b3AhPTNEPQoidW5kZWZpbmVkIj9lLnRvcDppLnRv cCxpLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDppLnI9Cmln aHQsaS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206aS5i b3R0b20saS5sZWZ0PTNEdD0KeXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDppLmxl ZnQsdyk6aX0sdy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/ KHM9M0RlLHcpOnN9LHcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49 Cmd0aD8obz0zRGUsdyk6b30sdy5jb2xvcj0zRGZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh1PTNEZS51dGlscz0KLmdldENvbG9yKG4pLHQuY29sb3IodSksdyk6dX0sdy5zaG93 WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhhPTNEZSx3KTph fSx3LnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNE ZSw9CncpOmZ9LHcucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGw9M0RlLHIub3JpZT0KbnQoZT8icmlnaHQiOiJsZWZ0Iiksdyk6bH0sdy5zdGFn Z2VyTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8oYz0zRGUs dyk6Y30sdy50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho PTNEZSw9CncpOmh9LHcudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocD0zRGUsdyk6cH0sdz0KLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhtPTNEZSx3KTptfSx3LnRyYW5zaXRpb25EdXJhPQp0aW9uPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLHcpOnl9LHd9LGUubW9kZWxz LmRpc3RyaWI9CnV0aW9uPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGUpe3JldHVybiBlLmVhY2go ZnVuY3Rpb24oZSl7dmFyIGE9M0RuLShpPTNEPQo9M0Q9M0QieCI/dC5sZWZ0K3QucmlnaHQ6dC50 b3ArdC5ib3R0b20pLGw9M0RpPTNEPTNEIngiPyJ5IjoieCIsYz0zRGQzLnNlbGU9CmN0KHRoaXMp O2Y9M0RmfHx1O3ZhciBoPTNEYy5zZWxlY3RBbGwoImcubnYtZGlzdHJpYnV0aW9uIikuZGF0YShb ZV0pLHA9M0RoLj0KZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtZGlz dHJpYnV0aW9uIiksZD0zRHAuYXBwZW5kKCJnIiksPQp2PTNEaC5zZWxlY3QoImciKTtoLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXI9CiBtPTNE di5zZWxlY3RBbGwoImcubnYtZGlzdCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0 aW9uKGUpe3JldHVybj0KIGUua2V5fSk7bS5lbnRlcigpLmFwcGVuZCgiZyIpLG0uYXR0cigiY2xh c3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWRpc3QgPQpudi1zZXJpZXMtIit0fSkuc3R5bGUo InN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQpfSk7dmFyIGc9M0RtLnNlbGU9CmN0 QWxsKCJsaW5lLm52LWRpc3QiK2kpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSk7 Zy5lbnRlcigpLmFwcGVuZD0KKCJsaW5lIikuYXR0cihpKyIxIixmdW5jdGlvbihlLHQpe3JldHVy biBmKHMoZSx0KSl9KS5hdHRyKGkrIjIiLGZ1bmN0aW9uKGUsPQp0KXtyZXR1cm4gZihzKGUsdCkp fSksbS5leGl0KCkuc2VsZWN0QWxsKCJsaW5lLm52LWRpc3QiK2kpLmF0dHIoaSsiMSIsZnVuY3Q9 CmlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KS5hdHRyKGkrIjIiLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIHUocyhlLHQpKX0pLnN0eT0KbGUoInN0cm9rZS1vcGFjaXR5IiwwKS5yZW1vdmUoKSxnLmF0 dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0PQoiK2krIiBudi1kaXN0Iitp KyItIit0fSkuYXR0cihsKyIxIiwwKS5hdHRyKGwrIjIiLHIpLGcuYXR0cihpKyIxIixmdW5jdGlv big9CmUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4gdShzKGUsdCkpfSksZj0zRHUuYz0Kb3B5KCl9KSxsfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAs Ym90dG9tOjAsbGVmdDowfSxuPTNENDAwLHI9M0Q4LGk9M0QieCIscz0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGVbaV19LG89M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHU9M0RkMy5zY2FsZS5saW5l YXIoPQopLGEsZjtyZXR1cm4gbC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGwp LGwubWFyZ2luPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9 M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdD0KLnJpZ2h0PTNEdHlw ZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlw ZW9mIGUuPQpib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNE dHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmU9CmQiP2UubGVmdDp0LmxlZnQsbCk6dH0sbC53aWR0 aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZT0KLGwpOm59LGwu YXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxsKTppfSxs LnNpemU9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxsKTpy fSxsLmdldERhdGE9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNE ZDMuZnVuY3RvcihlKSxsKTpzfSxsLnNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1l bnRzLmxlbmd0aD8odT0zRGUsbCk6dX0sbC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPQo/KG89M0RlLnV0aWxzLmdldENvbG9yKHQpLGwpOm99LGx9LGUubW9kZWxz Lmhpc3RvcmljYWxCYXJDaGFydD0zRGZ1bmN0aW9uKCk9CntmdW5jdGlvbiB4KGUpe3JldHVybiBl LmVhY2goZnVuY3Rpb24oZCl7dmFyIEU9M0RkMy5zZWxlY3QodGhpcyksVD0zRHRoaXMsTj0KPTNE KHV8fHBhcnNlSW50KEUuc3R5bGUoIndpZHRoIikpfHw5NjApLXMubGVmdC1zLnJpZ2h0LEM9M0Qo YXx8cGFyc2VJbnQoRS5zPQp0eWxlKCJoZWlnaHQiKSl8fDQwMCktcy50b3Atcy5ib3R0b207eC51 cGRhdGU9M0RmdW5jdGlvbigpe0UuY2FsbCh4KX0seC5jb249CnRhaW5lcj0zRHRoaXMsZy5kaXNh YmxlZD0zRGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF5KXt2YT0K ciBrO3k9M0R7fTtmb3IoayBpbiBnKWdba11pbnN0YW5jZW9mIEFycmF5P3lba109M0RnW2tdLnNs aWNlKDApOnlba109M0RnW2tdPQp9aWYoIWR8fCFkLmxlbmd0aHx8IWQuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3Y9CmFyIEw9M0RFLnNlbGVjdEFs bCgiLm52LW5vRGF0YSIpLmRhdGEoW2JdKTtyZXR1cm4gTC5lbnRlcigpLmFwcGVuZCgidGV4dCIp Lj0KYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHls ZSgidGV4dC1hbmNob3IiLCJtaWRkPQpsZSIpLEwuYXR0cigieCIscy5sZWZ0K04vMikuYXR0cigi eSIscy50b3ArQy8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSk9Cix4fUUuc2VsZWN0QWxs KCIubnYtbm9EYXRhIikucmVtb3ZlKCksdj0zRHQueFNjYWxlKCksbT0zRHQueVNjYWxlKCk7dmFy IEE9Cj0zREUuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtaGlzdG9yaWNhbEJhckNoYXJ0IikuZGF0 YShbZF0pLE89M0RBLmVudGVyKCkuYT0KcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt d3JhcCBudi1oaXN0b3JpY2FsQmFyQ2hhcnQiKS5hcHBlbmQoImciKSxNPQo9M0RBLnNlbGVjdCgi ZyIpO08uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxPLmFwcGVuZCgi ZyIpLmE9CnR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxPLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtYmFyc1dyYXAiKSxPLmFwcD0KZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdl bmRXcmFwIiksZiYmKGkud2lkdGgoTiksTS5zZWxlY3QoIi5udi1sZWdlbmRXPQpyYXAiKS5kYXR1 bShkKS5jYWxsKGkpLHMudG9wIT0zRGkuaGVpZ2h0KCkmJihzLnRvcD0zRGkuaGVpZ2h0KCksQz0z RChhfHxwYXI9CnNlSW50KEUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1zLnRvcC1zLmJvdHRvbSks QS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYT0KdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo MCwiKyAtcy50b3ArIikiKSksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoPQoiK3MubGVm dCsiLCIrcy50b3ArIikiKSxoJiZNLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW49CnNsYXRlKCIrTisiLDApIiksdC53aWR0aChOKS5oZWlnaHQoQykuY29sb3Io ZC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jbz0KbG9yfHxvKGUsdCl9KS5maWx0ZXIoZnVu Y3Rpb24oZSx0KXtyZXR1cm4hZFt0XS5kaXNhYmxlZH0pKTt2YXIgXz0zRE0uc2VsZWN0PQooIi5u di1iYXJzV3JhcCIpLmRhdHVtKGQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVk fSkpO18uY2FsbCh0KSw9CmwmJihuLnNjYWxlKHYpLnRpY2tTaXplKC1DLDApLE0uc2VsZWN0KCIu bnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidD0KcmFuc2xhdGUoMCwiK20ucmFuZ2Uo KVswXSsiKSIpLE0uc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKSksYyYmKHIuc2NhPQps ZShtKS50aWNrcyhDLzM2KS50aWNrU2l6ZSgtTiwwKSxNLnNlbGVjdCgiLm52LXkubnYtYXhpcyIp LmNhbGwocikpLGkuZGlzcGE9CnRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKHQsbil7dC5k aXNhYmxlZD0zRCF0LmRpc2FibGVkLGQuZmlsdGVyKGZ1bmN0aT0Kb24oZSl7cmV0dXJuIWUuZGlz YWJsZWR9KS5sZW5ndGh8fGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPTNEITEs PQpBLnNlbGVjdEFsbCgiLm52LXNlcmllcyIpLmNsYXNzZWQoImRpc2FibGVkIiwhMSksZX0pLGcu ZGlzYWJsZWQ9M0RkLm1hcChmdW49CmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pLHcuc3Rh dGVDaGFuZ2UoZyksZS5jYWxsKHgpfSksaS5kaXNwYXRjaC5vbigibD0KZWdlbmREYmxjbGljayIs ZnVuY3Rpb24oZSl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMH0pLGUuZGlz YWJsPQplZD0zRCExLGcuZGlzYWJsZWQ9M0RkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlz YWJsZWR9KSx3LnN0YXRlQ2hhbmdlKGc9CikseC51cGRhdGUoKX0pLHcub24oInRvb2x0aXBTaG93 IixmdW5jdGlvbihlKXtwJiZTKGUsVC5wYXJlbnROb2RlKX0pLHcub24oIj0KY2hhbmdlU3RhdGUi LGZ1bmN0aW9uKGUpe3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZC5mb3JFYWNo KGZ1bmN0PQppb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtuXX0pLGcuZGlzYWJsZWQ9 M0RlLmRpc2FibGVkKSx4LnVwZGF0ZSgpfSk9Cn0pLHh9dmFyIHQ9M0RlLm1vZGVscy5oaXN0b3Jp Y2FsQmFyKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcz0KKCksaT0zRGUu bW9kZWxzLmxlZ2VuZCgpLHM9M0R7dG9wOjMwLHJpZ2h0OjkwLGJvdHRvbTo1MCxsZWZ0OjkwfSxv PTNEZS51dGlsPQpzLmRlZmF1bHRDb2xvcigpLHU9M0RudWxsLGE9M0RudWxsLGY9M0QhMSxsPTNE ITAsYz0zRCEwLGg9M0QhMSxwPTNEITAsZD0zRGY9CnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4i PGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx2LG0sZz0zRD0Ke30seT0z RG51bGwsYj0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLHc9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNo b3ciLCJ0b29sdGlwPQpIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEU9M0QwO24u b3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSw9CnIub3JpZW50KGg/InJpZ2h0IjoibGVm dCIpO3ZhciBTPTNEZnVuY3Rpb24oaSxzKXtpZihzKXt2YXIgbz0zRGQzLnNlbGVjdChzKT0KLnNl bGVjdCgic3ZnIiksdT0zRG8ubm9kZSgpP28uYXR0cigidmlld0JveCIpOm51bGw7aWYodSl7dT0z RHUuc3BsaXQoIiAiKTt2PQphciBhPTNEcGFyc2VJbnQoby5zdHlsZSgid2lkdGgiKSkvdVsyXTtp LnBvc1swXT0zRGkucG9zWzBdKmEsaS5wb3NbMV09M0RpLnA9Cm9zWzFdKmF9fXZhciBmPTNEaS5w b3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksbD0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYz0K PTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxoPTNEci50aWNr Rm9ybWF0KCkodC55KCkoaS5wPQpvaW50LGkucG9pbnRJbmRleCkpLHA9M0RkKGkuc2VyaWVzLmtl eSxjLGgsaSx4KTtlLnRvb2x0aXAuc2hvdyhbZixsXSxwLG51bGw9CixudWxsLHMpfTtyZXR1cm4g dC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBv cz0KPTNEW2UucG9zWzBdK3MubGVmdCxlLnBvc1sxXStzLnRvcF0sdy50b29sdGlwU2hvdyhlKX0p LHQuZGlzcGF0Y2gub24oImVsZW1lPQpudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe3cu dG9vbHRpcEhpZGUoZSl9KSx3Lm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Q9Cmlvbigpe3AmJmUudG9v bHRpcC5jbGVhbnVwKCl9KSx4LmRpc3BhdGNoPTNEdyx4LmJhcnM9M0R0LHgubGVnZW5kPTNEaSx4 LnhBeD0KaXM9M0RuLHgueUF4aXM9M0RyLGQzLnJlYmluZCh4LHQsImRlZmluZWQiLCJpc0FyZWEi LCJ4IiwieSIsInNpemUiLCJ4U2NhbGUiPQosInlTY2FsZSIsInhEb21haW4iLCJ5RG9tYWluIiwi eFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaW50ZXJhY3Q9Cml2ZSIsImNsaXBF ZGdlIiwiY2xpcFZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiwiaGlnaGxpZ2h0UG9pbnQiLCJj bGVhckhpZz0KaGxpZ2h0cyIsImludGVyYWN0aXZlIikseC5vcHRpb25zPTNEZS51dGlscy5vcHRp b25zRnVuYy5iaW5kKHgpLHgubWFyZ2luPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocy50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS49CnRvcDpzLnRv cCxzLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpzLnJpZ2h0 LHMuYm90dG9tPQo9M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206cy5i b3R0b20scy5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9Cj0zRCJ1bmRlZmluZWQiP2UubGVmdDpzLmxl ZnQseCk6c30seC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/ KHU9M0RlLHgpOnV9LHguaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLHgpPQo6YX0seC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhvPTNEZS51dGlscy5nZXRDb2xvcih0KSw9CmkuY29sb3IobykseCk6b30seC5zaG93 TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLD0KeCk6 Zn0seC5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0z RGUseCk6bH0seC5zaG93PQpZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhjPTNEZSx4KTpjfSx4LnJpZ2h0QWxpZ25ZQXhpcz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLHgpPQo6 aH0seC50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNE ZSx4KTpwfSx4LnRvb2x0aXA9CkNvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZD0zRGUseCk6ZH0seC5zdGF0ZT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGc9M0RlLHgpOmd9LHguZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0 PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUseCk6eX0seC5ub0RhdGE9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyhiPTNEZSx4KTpifSx4LnRyYW5zaXRpb25EdXJh dGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/KEU9M0RlLHgpOkV9 LHh9LGUubW9kZWxzLmluZGVudGVkVHJlZT0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhlKXtyZXR1 cm4gPQplLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gayhlLHQsbil7ZDMuZXZlbnQuc3RvcFBy b3BhZ2F0aW9uKCk7aWYoZDMuZXZlbnQ9Ci5zaGlmdEtleSYmIW4pcmV0dXJuIGQzLmV2ZW50LnNo aWZ0S2V5PTNEITEsZS52YWx1ZXMmJmUudmFsdWVzLmZvckVhY2goZnVuYz0KdGlvbihlKXsoZS52 YWx1ZXN8fGUuX3ZhbHVlcykmJmsoZSwwLCEwKX0pLCEwO2lmKCFPKGUpKXJldHVybiEwO2UudmFs dWVzPyhlPQouX3ZhbHVlcz0zRGUudmFsdWVzLGUudmFsdWVzPTNEbnVsbCk6KGUudmFsdWVzPTNE ZS5fdmFsdWVzLGUuX3ZhbHVlcz0zRG51bGw9CiksZy51cGRhdGUoKX1mdW5jdGlvbiBMKGUpe3Jl dHVybiBlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGg/aDplLnZhbHVlcyYmZT0KLnZhbHVlcy5s ZW5ndGg/cDoiIn1mdW5jdGlvbiBBKGUpe3JldHVybiBlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5n dGh9ZnVuY3RpPQpvbiBPKGUpe3ZhciB0PTNEZS52YWx1ZXN8fGUuX3ZhbHVlcztyZXR1cm4gdCYm dC5sZW5ndGh9dmFyIHQ9M0QxLG49M0RkMy5zZWw9CmVjdCh0aGlzKSxpPTNEZDMubGF5b3V0LnRy ZWUoKS5jaGlsZHJlbihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5zaXplKD0KW3IsZl0p O2cudXBkYXRlPTNEZnVuY3Rpb24oKXtuLmNhbGwoZyl9LGVbMF18fChlWzBdPTNEe2tleTphfSk7 dmFyIHM9M0RpLm5vPQpkZXMoZVswXSkseT0zRGQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImRp diIpLmRhdGEoW1tzXV0pLGI9M0R5LmVudGVyKCkuYXA9CnBlbmQoImRpdiIpLmF0dHIoImNsYXNz IiwibnZkMyBudi13cmFwIG52LWluZGVudGVkdHJlZSIpLHc9M0RiLmFwcGVuZCgidGFibD0KZSIp LEU9M0R5LnNlbGVjdCgidGFibGUiKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJjbGFzcyIs Yyk7aWYobyl7dmFyIFM9Cj0zRHcuYXBwZW5kKCJ0aGVhZCIpLHg9M0RTLmFwcGVuZCgidHIiKTts LmZvckVhY2goZnVuY3Rpb24oZSl7eC5hcHBlbmQoInRoIj0KKS5hdHRyKCJ3aWR0aCIsZS53aWR0 aD9lLndpZHRoOiIxMCUiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50eXBlPTNEPTNEIm51bWVyPQpp YyI/InJpZ2h0IjoibGVmdCIpLmFwcGVuZCgic3BhbiIpLnRleHQoZS5sYWJlbCl9KX12YXIgVD0z REUuc2VsZWN0QWxsKCJ0Ym89CmR5IikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0pO1QuZW50 ZXIoKS5hcHBlbmQoInRib2R5IiksdD0zRGQzLm1heChzLGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUu ZGVwdGh9KSxpLnNpemUoW3IsdCpmXSk7dmFyIE49M0RULnNlbGVjdEFsbCgidHIiKS5kYXRhKGZ1 PQpuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1JiYhZS5jaGls ZHJlbj91KGUpOiEwfSl9LGZ1bmM9CnRpb24oZSx0KXtyZXR1cm4gZS5pZHx8ZS5pZHx8KyttfSk7 Ti5leGl0KCkucmVtb3ZlKCksTi5zZWxlY3QoImltZy5udi10cmVlaT0KY29uIikuYXR0cigic3Jj IixMKS5jbGFzc2VkKCJmb2xkZWQiLEEpO3ZhciBDPTNETi5lbnRlcigpLmFwcGVuZCgidHIiKTts LmZvPQpyRWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEQy5hcHBlbmQoInRkIikuc3R5bGUoInBh ZGRpbmctbGVmdCIsZnVuY3Rpb24oZSk9CntyZXR1cm4odD8wOmUuZGVwdGgqZisxMisoTChlKT8w OjE2KSkrInB4In0sImltcG9ydGFudCIpLnN0eWxlKCJ0ZXh0LWFsaWduIj0KLGUudHlwZT0zRD0z RCJudW1lcmljIj8icmlnaHQiOiJsZWZ0Iik7dD0zRD0zRDAmJm4uYXBwZW5kKCJpbWciKS5jbGFz c2VkKCJuPQp2LXRyZWVpY29uIiwhMCkuY2xhc3NlZCgibnYtZm9sZGVkIixBKS5hdHRyKCJzcmMi LEwpLnN0eWxlKCJ3aWR0aCIsIjE0cHgiKS49CnN0eWxlKCJoZWlnaHQiLCIxNHB4Iikuc3R5bGUo InBhZGRpbmciLCIwIDFweCIpLnN0eWxlKCJkaXNwbGF5IixmdW5jdGlvbihlKT0Ke3JldHVybiBM KGUpPyJpbmxpbmUtYmxvY2siOiJub25lIn0pLm9uKCJjbGljayIsayksbi5lYWNoKGZ1bmN0aW9u KG4peyF0JiZ2PQoobik/ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgiYSIpLmF0dHIoImhyZWYiLHYp LmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2w9CmFzc2VzKSkuYXBwZW5kKCJzcGFuIik6ZDMu c2VsZWN0KHRoaXMpLmFwcGVuZCgic3BhbiIpLGQzLnNlbGVjdCh0aGlzKS5zZWxlYz0KdCgic3Bh biIpLmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2xhc3NlcykpLnRleHQoZnVuY3Rpb24odCl7 cmV0dXJuIGUuZm9yPQptYXQ/dFtlLmtleV0/ZS5mb3JtYXQodFtlLmtleV0pOiItIjp0W2Uua2V5 XXx8Ii0ifSl9KSxlLnNob3dDb3VudCYmKG4uYXBwZW49CmQoInNwYW4iKS5hdHRyKCJjbGFzcyIs Im52LWNoaWxkcmVuQ291bnQiKSxOLnNlbGVjdEFsbCgic3Bhbi5udi1jaGlsZHJlbkNvdT0KbnQi KS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcyYmZS52YWx1ZXMubGVuZ3RofHxlLl92 YWx1ZXMmJmUuX3ZhbHVlPQpzLmxlbmd0aD8iKCIrKGUudmFsdWVzJiZlLnZhbHVlcy5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIHU/dShlKTohMH0pLmxlbmc9CnRofHxlLl92YWx1ZXMmJmUuX3Zh bHVlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHU/dShlKTohMH0pLmxlbmd0aHx8MCkrIj0K KSI6IiJ9KSl9KSxOLm9yZGVyKCkub24oImNsaWNrIixmdW5jdGlvbihlKXtkLmVsZW1lbnRDbGlj ayh7cm93OnRoaXMsZGF0YTplPQoscG9zOltlLngsZS55XX0pfSkub24oImRibGNsaWNrIixmdW5j dGlvbihlKXtkLmVsZW1lbnREYmxjbGljayh7cm93OnRoaXMsZGE9CnRhOmUscG9zOltlLngsZS55 XX0pfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50TW91c2VvdmVyKHtyb3c6 dD0KaGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUp e2QuZWxlbWVudE1vdXNlb3V0KHtyPQpvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KX0p LGd9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjA9Cn0sbj0zRDk2MCxyPTNE NTAwLGk9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9t KCkqMT0KZTQpLG89M0QhMCx1PTNEITEsYT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLGY9M0QyMCxs PTNEW3trZXk6ImtleSIsbGFiZWw6Ik5hPQptZSIsdHlwZToidGV4dCJ9XSxjPTNEbnVsbCxoPTNE ImltYWdlcy9ncmV5LXBsdXMucG5nIixwPTNEImltYWdlcy9ncmV5LW1pbnU9CnMucG5nIixkPTNE ZDMuZGlzcGF0Y2goImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxjbGljayIsImVsZW1lbnRNb3Vz ZW92ZXIiLD0KImVsZW1lbnRNb3VzZW91dCIpLHY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS51cmx9 LG09M0QwO3JldHVybiBnLm9wdGlvbnM9M0RlPQoudXRpbHMub3B0aW9uc0Z1bmMuYmluZChnKSxn Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9CnQudG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2Yg ZS5yaWdodCE9Cj0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVv ZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLj0KYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxnKTp0fSxnPQoud2lkdGg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsZyk6bn0sZy5oZWln aHQ9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxnKTpyfSxn LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8oaT0zRGUudXRp bHMuZ2V0Q29sb3IodCksc2NhdHRlci5jb2xvcihpKSxnKTppfSxnLmlkPTNEZnVuY3RpPQpvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsZyk6c30sZy5oZWFkZXI9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhvPTNEZSxnKTpvfSxnLm5vRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGE9M0RlLGcpOmF9LGcuZmlsdGVy WmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxnKTp1PQp9 LGcuY29sdW1ucz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxn KTpsfSxnLnRhYmxlQ2xhc3M9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhjPTNEZSxnKTpjfSxnLmljb25PcGVuPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaD0zRGUsZyk6aH0sZy5pY29uQ2xvc2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn PQp1bWVudHMubGVuZ3RoPyhwPTNEZSxnKTpwfSxnLmdldFVybD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyg9CnY9M0RlLGcpOnZ9LGd9LGUubW9kZWxzLmxlZ2VuZD0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5lYWNoKGZ1bj0KY3Rpb24oYyl7dmFyIGg9 M0RuLXQubGVmdC10LnJpZ2h0LHA9M0RkMy5zZWxlY3QodGhpcyksZD0zRHAuc2VsZWN0QWxsKCJn Lm52PQotbGVnZW5kIikuZGF0YShbY10pLHY9M0RkLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LWxlZ2VuZCI9CikuYXBwZW5kKCJnIiksbT0zRGQuc2VsZWN0KCJnIik7 ZC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiKz0KdC50b3ArIikiKTt2 YXIgZz0zRG0uc2VsZWN0QWxsKCIubnYtc2VyaWVzIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4g ZX0pLHk9Cj0zRGcuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNlcmllcyIp Lm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKD0KZSx0KXtsLmxlZ2VuZE1vdXNlb3ZlcihlLHQpfSku b24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2wubGVnZW5kTW91c2VvdXQoPQplLHQpfSkub24o ImNsaWNrIixmdW5jdGlvbihlLHQpe2wubGVnZW5kQ2xpY2soZSx0KSxhJiYoZj8oYy5mb3JFYWNo KGZ1bmN0aW89Cm4oZSl7ZS5kaXNhYmxlZD0zRCEwfSksZS5kaXNhYmxlZD0zRCExKTooZS5kaXNh YmxlZD0zRCFlLmRpc2FibGVkLGMuZXZlcnkoZj0KdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxl ZH0pJiZjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0zRCExfSkpLGwuPQpzdGF0ZUNo YW5nZSh7ZGlzYWJsZWQ6Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSl9KSl9 KS5vbigiZGJsY2w9CmljayIsZnVuY3Rpb24oZSx0KXtsLmxlZ2VuZERibGNsaWNrKGUsdCksYSYm KGMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibD0KZWQ9M0QhMH0pLGUuZGlzYWJsZWQ9M0Qh MSxsLnN0YXRlQ2hhbmdlKHtkaXNhYmxlZDpjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hPQohZS5k aXNhYmxlZH0pfSkpfSk7eS5hcHBlbmQoImNpcmNsZSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIp LmF0dHIoImNsYXNzIiw9CiJudi1sZWdlbmQtc3ltYm9sIikuYXR0cigiciIsNSkseS5hcHBlbmQo InRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Ij0KKS5hdHRyKCJjbGFzcyIsIm52LWxl Z2VuZC10ZXh0IikuYXR0cigiZHkiLCIuMzJlbSIpLmF0dHIoImR4IiwiOCIpLGcuY2xhc3NlPQpk KCJkaXNhYmxlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSxnLmV4aXQoKS5yZW1v dmUoKSxnLnNlbGVjdCgiY2k9CnJjbGUiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4gZS5jb2xvcnx8cyhlLHQpfSkuc3R5bGUoInN0cm9rZSIsZj0KdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxzKGUsdCl9KSxnLnNlbGVjdCgidGV4dCIpLnRleHQoaSk7aWYobyl7dmFyIGI9 Cj0zRFtdO2cuZWFjaChmdW5jdGlvbih0LG4pe3ZhciByPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVj dCgidGV4dCIpLGk7dHJ5e2k9Cj0zRHIuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7aWYoaTw9M0Qw KXRocm93IEVycm9yKCl9Y2F0Y2gocyl7aT0zRGUudXRpbHMuYz0KYWxjQXBwcm94VGV4dFdpZHRo KHIpfWIucHVzaChpKzI4KX0pO3ZhciB3PTNEMCxFPTNEMCxTPTNEW107d2hpbGUoRTxoJiZ3PGIu PQpsZW5ndGgpU1t3XT0zRGJbd10sRSs9M0RiW3crK107dz0zRD0zRD0zRDAmJih3PTNEMSk7d2hp bGUoRT5oJiZ3PjEpe1M9M0RbXSw9CnctLTtmb3IodmFyIHg9M0QwO3g8Yi5sZW5ndGg7eCsrKWJb eF0+KFNbeCV3XXx8MCkmJihTW3gld109M0RiW3hdKTtFPTNEUy5yZT0KZHVjZShmdW5jdGlvbihl LHQsbixyKXtyZXR1cm4gZSt0fSl9dmFyIFQ9M0RbXTtmb3IodmFyIE49M0QwLEM9M0QwO048dztO KyspPQpUW05dPTNEQyxDKz0zRFNbTl07Zy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuInRyYW5zbGF0ZSgiK1RbdCU9CnddKyIsIisoNStNYXRoLmZsb29yKHQvdykqMjApKyIp In0pLHU/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi10Lj0KcmlnaHQtRSkrIiwi K3QudG9wKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3QudG9wKyIpIiks cj0zRHQuPQp0b3ArdC5ib3R0b20rTWF0aC5jZWlsKGIubGVuZ3RoL3cpKjIwfWVsc2V7dmFyIGs9 M0Q1LEw9M0Q1LEE9M0QwLE87Zy5hdHRyKCI9CnRyYW5zZm9ybSIsZnVuY3Rpb24oZSxyKXt2YXIg aT0zRGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5ub2RlKCkuZ2V0Qz0Kb21wdXRlZFRl eHRMZW5ndGgoKSsyODtyZXR1cm4gTz0zREwsbjx0LmxlZnQrdC5yaWdodCtPK2kmJihMPTNETz0z RDUsays9M0QyPQowKSxMKz0zRGksTD5BJiYoQT0zREwpLCJ0cmFuc2xhdGUoIitPKyIsIitrKyIp In0pLG0uYXR0cigidHJhbnNmb3JtIiwidHJhbnM9CmxhdGUoIisobi10LnJpZ2h0LUEpKyIsIit0 LnRvcCsiKSIpLHI9M0R0LnRvcCt0LmJvdHRvbStrKzE1fX0pLGN9dmFyIHQ9M0R7dD0Kb3A6NSxy aWdodDowLGJvdHRvbTo1LGxlZnQ6MH0sbj0zRDQwMCxyPTNEMjAsaT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLmtleX0sPQpzPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxvPTNEITAsdT0zRCEwLGE9 M0QhMCxmPTNEITEsbD0zRGQzLmRpc3BhdGNoKCJsZWc9CmVuZENsaWNrIiwibGVnZW5kRGJsY2xp Y2siLCJsZWdlbmRNb3VzZW92ZXIiLCJsZWdlbmRNb3VzZW91dCIsInN0YXRlQ2hhbmdlIj0KKTty ZXR1cm4gYy5kaXNwYXRjaD0zRGwsYy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5k KGMpLGMubWFyZ2luPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50 b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS49CnRvcDp0LnRvcCx0LnJpZ2h0PTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPQo9 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9Cj0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsYyk6dH0sYy53 aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KG49M0RlLGMpOm59 LGMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGMp PQo6cn0sYy5rZXk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs Yyk6aX0sYy5jb2xvcj0zRGZ1bmM9CnRpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9 M0RlLnV0aWxzLmdldENvbG9yKHQpLGMpOnN9LGMuYWxpZ249M0RmdT0KbmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxjKTpvfSxjLnJpZ2h0QWxpZ249M0RmdW5jdGlvbihl KXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxjKTp1fSxjLnVwZGF0ZVN0YXRlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8oYT0zRGUsYyk6YX0sYy5yYWRp b0J1dHRvbk1vZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhmPTNE ZSxjKTpmfSxjfSxlLm1vZGVscy5saW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBtKGcpe3JldHVy biBnLmVhPQpjaChmdW5jdGlvbihtKXt2YXIgZz0zRHItbi5sZWZ0LW4ucmlnaHQsYj0zRGktbi50 b3Atbi5ib3R0b20sdz0zRGQzLnNlbGVjdCg9CnRoaXMpO2M9M0R0LnhTY2FsZSgpLGg9M0R0LnlT Y2FsZSgpLGQ9M0RkfHxjLHY9M0R2fHxoO3ZhciBFPTNEdy5zZWxlY3RBbGwoIj0KZy5udi13cmFw Lm52LWxpbmUiKS5kYXRhKFttXSksUz0zREUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52ZDMgPQpudi13cmFwIG52LWxpbmUiKSxUPTNEUy5hcHBlbmQoImRlZnMiKSxOPTNEUy5h cHBlbmQoImciKSxDPTNERS5zZWxlY3QoImciKTs9Ck4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1ncm91cHMiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdD0KdGVyV3Jh cCIpLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5sZWZ0KyIsIituLnRvcCsiKSIp LHQud2lkdGgoZykuPQpoZWlnaHQoYik7dmFyIGs9M0RFLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFw Iik7ay5jYWxsKHQpLFQuYXBwZW5kKCJjbGlwUGF0aCI9CikuYXR0cigiaWQiLCJudi1lZGdlLWNs aXAtIit0LmlkKCkpLmFwcGVuZCgicmVjdCIpLEUuc2VsZWN0KCIjbnYtZWRnZS1jbGlwLT0KIit0 LmlkKCkrIiByZWN0IikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhlaWdodCIsYj4wP2I6MCksQy5h dHRyKCJjbGlwLXBhdGgiPQosbD8idXJsKCNudi1lZGdlLWNsaXAtIit0LmlkKCkrIikiOiIiKSxr LmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWM9CmxpcC0iK3QuaWQoKSsiKSI6IiIp O3ZhciBMPTNERS5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi5udi1ncm91cCIpLj0K ZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7TC5l bnRlcigpLmFwcGVuZCgiZyIpPQouc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgi ZmlsbC1vcGFjaXR5IiwxZS02KSxMLmV4aXQoKS5yZW1vdmUoKSw9CkwuYXR0cigiY2xhc3MiLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcmllcy0iK3R9KS5jbGFzc2VkKCJob3Zl cj0KIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihl LHQpe3JldHVybiBzKGUsdCl9KS5zPQp0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IHMoZSx0KX0pLEwuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxKS5zdHk9CmxlKCJmaWxsLW9wYWNp dHkiLC41KTt2YXIgQT0zREwuc2VsZWN0QWxsKCJwYXRoLm52LWFyZWEiKS5kYXRhKGZ1bmN0aW9u KGUpez0KcmV0dXJuIGYoZSk/W2VdOltdfSk7QS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIo ImNsYXNzIiwibnYtYXJlYSIpLmF0dHIoPQoiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQzLnN2Zy5h cmVhKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQ9CixuKXtyZXR1cm4g ZS51dGlscy5OYU50b1plcm8oZChvKHQsbikpKX0pLnkwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUu dXRpbHMuTj0KYU50b1plcm8odih1KHQsbikpKX0pLnkxKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYo aC5kb21haW4oKVswXTw9M0QwP2guZG9tYWluPQooKVsxXT49M0QwPzA6aC5kb21haW4oKVsxXTpo LmRvbWFpbigpWzBdKX0pLmFwcGx5KHRoaXMsW3QudmFsdWVzXSl9KSxMLmV4aXQ9CigpLnNlbGVj dEFsbCgicGF0aC5udi1hcmVhIikucmVtb3ZlKCksQS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1 cm4gZDMuc3ZnLj0KYXJlYSgpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0 LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhjPQoobyh0LG4pKSl9KS55MChmdW5jdGlvbih0 LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhoKHUodCxuKSkpfSkueTEoZnVuY3Q9Cmlvbihl LHQpe3JldHVybiBoKGguZG9tYWluKClbMF08PTNEMD9oLmRvbWFpbigpWzFdPj0zRDA/MDpoLmRv bWFpbigpWzFdOmguZD0Kb21haW4oKVswXSl9KS5hcHBseSh0aGlzLFt0LnZhbHVlc10pfSk7dmFy IE89M0RMLnNlbGVjdEFsbCgicGF0aC5udi1saW5lIikuPQpkYXRhKGZ1bmN0aW9uKGUpe3JldHVy bltlLnZhbHVlc119KTtPLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCI9Cm52 LWxpbmUiKS5hdHRyKCJkIixkMy5zdmcubGluZSgpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSku eChmdW5jdGlvbih0LG4pez0KcmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGQobyh0LG4pKSl9KS55 KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aPQplcm8odih1KHQsbikpKX0pKSxP LmF0dHIoImQiLGQzLnN2Zy5saW5lKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmM9 CnRpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oYyhvKHQsbikpKX0pLnkoZnVuY3Rp b24odCxuKXtyZXR1cm4gZS51dD0KaWxzLk5hTnRvWmVybyhoKHUodCxuKSkpfSkpLGQ9M0RjLmNv cHkoKSx2PTNEaC5jb3B5KCl9KSxtfXZhciB0PTNEZS5tb2RlbHMuPQpzY2F0dGVyKCksbj0zRHt0 b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0scj0zRDk2MCxpPTNENTAwLHM9M0RlLnV0aWxz LmQ9CmVmYXVsdENvbG9yKCksbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHU9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS55fSxhPTNEZj0KdW5jdGlvbihlLHQpe3JldHVybiFpc05hTih1KGUsdCkp JiZ1KGUsdCkhPTNEPTNEbnVsbH0sZj0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGUuYXJlYX0sbD0z RCExLGMsaCxwPTNEImxpbmVhciI7dC5zaXplKDE2KS5zaXplRG9tYWluKFsxNiwyNTZdKTt2YXIg ZCx2O3I9CmV0dXJuIG0uZGlzcGF0Y2g9M0R0LmRpc3BhdGNoLG0uc2NhdHRlcj0zRHQsZDMucmVi aW5kKG0sdCwiaWQiLCJpbnRlcmFjdGl2ZT0KIiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInpT Y2FsZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiPQpzaXplRG9tYWlu IiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9p IiwiY2xpcFI9CmFkaXVzIiwicGFkRGF0YSIsImhpZ2hsaWdodFBvaW50IiwiY2xlYXJIaWdobGln aHRzIiksbS5vcHRpb25zPTNEZS51dGlscy5vcD0KdGlvbnNGdW5jLmJpbmQobSksbS5tYXJnaW49 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi50b3A9M0R0PQp5cGVvZiBl LnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQh PTNEInVuZGVmaW49CmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlb2YgZS5ib3R0 b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206bi5ibz0KdHRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5s ZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsbSk6bn0sbS53aWR0aD0zRGZ1PQpuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLG0pOnJ9LG0uaGVpZ2h0PTNEZnVu Y3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsbSk6aX0sbS54PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kbz0zRGUsdC54KGUpLG0pOm99LG0u eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSx0LnkoZSksPQpt KTp1fSxtLmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9 M0RlLG0pOmx9LG0uY29sb3I9Cj0zRGZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhzPTNEZS51dGlscy5nZXRDb2xvcihuKSx0LmNvbG9yKHMpLD0KbSk6c30sbS5pbnRlcnBvbGF0 ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSxtLmRl PQpmaW5lZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxtKTph fSxtLmlzQXJlYT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0Rk My5mdW5jdG9yKGUpLG0pOmZ9LG19LGUubW9kZWxzLmxpbmVDaGFydD0KPTNEZnVuY3Rpb24oKXtm dW5jdGlvbiBOKG0pe3JldHVybiBtLmVhY2goZnVuY3Rpb24obSl7dmFyIHg9M0RkMy5zZWxlY3Qo dGhpPQpzKSxDPTNEdGhpcyxrPTNEKGF8fHBhcnNlSW50KHguc3R5bGUoIndpZHRoIikpfHw5NjAp LW8ubGVmdC1vLnJpZ2h0LEw9M0QoZnw9CnxwYXJzZUludCh4LnN0eWxlKCJoZWlnaHQiKSl8fDQw MCktby50b3Atby5ib3R0b207Ti51cGRhdGU9M0RmdW5jdGlvbigpe3guYz0KYWxsKE4pfSxOLmNv bnRhaW5lcj0zRHRoaXMsYi5kaXNhYmxlZD0zRG0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5k aXNhYmxlPQpkfSk7aWYoIXcpe3ZhciBBO3c9M0R7fTtmb3IoQSBpbiBiKWJbQV1pbnN0YW5jZW9m IEFycmF5P3dbQV09M0RiW0FdLnNsaWNlKDA9Cik6d1tBXT0zRGJbQV19aWYoIW18fCFtLmxlbmd0 aHx8IW0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndD0KaH0pLmxlbmd0 aCl7dmFyIE89M0R4LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW0VdKTtyZXR1cm4gTy5l bnRlcigpLmFwPQpwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0 dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC09CmFuY2hvciIsIm1pZGRsZSIpLE8uYXR0cigi eCIsby5sZWZ0K2svMikuYXR0cigieSIsby50b3ArTC8yKS50ZXh0KGZ1bmN0aW9uKD0KZSl7cmV0 dXJuIGV9KSxOfXguc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksZz0zRHQueFNjYWxl KCkseT0zRHQueVNjPQphbGUoKTt2YXIgTT0zRHguc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGlu ZUNoYXJ0IikuZGF0YShbbV0pLF89M0RNLmVudGVyKCk9Ci5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52ZDMgbnYtd3JhcCBudi1saW5lQ2hhcnQiKS5hcHBlbmQoImciKSxEPTNETS5zZT0KbGVj dCgiZyIpO18uYXBwZW5kKCJyZWN0Iikuc3R5bGUoIm9wYWNpdHkiLDApLF8uYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJuPQp2LXggbnYtYXhpcyIpLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi15IG52LWF4aXMiKSxfLmFwcGVuZCgiZyIpLmF0dHI9CigiY2xhc3MiLCJudi1saW5lc1dy YXAiKSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLF8uYXBwZT0K bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWludGVyYWN0aXZlIiksRC5zZWxlY3QoInJlY3QiKS5h dHRyKCJ3aWR0aCIsaykuYXR0PQpyKCJoZWlnaHQiLEw+MD9MOjApLGwmJihpLndpZHRoKGspLEQu c2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKG0pLmNhbGw9CihpKSxvLnRvcCE9M0RpLmhl aWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLEw9M0QoZnx8cGFyc2VJbnQoeC5zdHlsZSgiaGVp Zz0KaHQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLE0uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIp LmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNsYXRlKDAsIisgLW8udG9wKyIpIikpLE0uYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRvcCs9CiIpIikscCYmRC5zZWxl Y3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitrKyIsMCki KSxkJj0KJihzLndpZHRoKGspLmhlaWdodChMKS5tYXJnaW4oe2xlZnQ6by5sZWZ0LHRvcDpvLnRv cH0pLnN2Z0NvbnRhaW5lcih4KS54U2NhPQpsZShnKSxNLnNlbGVjdCgiLm52LWludGVyYWN0aXZl IikuY2FsbChzKSksdC53aWR0aChrKS5oZWlnaHQoTCkuY29sb3IobS5tYXA9CihmdW5jdGlvbihl LHQpe3JldHVybiBlLmNvbG9yfHx1KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4h bVt0XS5kaT0Kc2FibGVkfSkpO3ZhciBQPTNERC5zZWxlY3QoIi5udi1saW5lc1dyYXAiKS5kYXR1 bShtLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1PQpybiFlLmRpc2FibGVkfSkpO1AuY2FsbCh0KSxj JiYobi5zY2FsZShnKS50aWNrcyhrLzEwMCkudGlja1NpemUoLUwsMCksRC5zZWw9CmVjdCgiLm52 LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5nZSgpWzBd KyIpIiksRC5zZT0KbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobikpLGgmJihyLnNjYWxlKHkp LnRpY2tzKEwvMzYpLnRpY2tTaXplKC1rLDApLEQuPQpzZWxlY3QoIi5udi15Lm52LWF4aXMiKS5j YWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Yj0KPTNEZSxT LnN0YXRlQ2hhbmdlKGIpLE4udXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vt b3ZlIixmdW5jdGlvPQpuKGkpe3QuY2xlYXJIaWdobGlnaHRzKCk7dmFyIGEsZixsLGM9M0RbXTtt LmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnM9CmVyaWVzSW5kZXg9M0R0LCFlLmRpc2Fi bGVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9M0RlLmludGVyYWN0aXZlQmlzZWN0KD0Kbi52 YWx1ZXMsaS5wb2ludFhWYWx1ZSxOLngoKSksdC5oaWdobGlnaHRQb2ludChyLGYsITApO3ZhciBz PTNEbi52YWx1ZXNbZl07PQppZih0eXBlb2Ygcz0zRD0zRCJ1bmRlZmluZWQiKXJldHVybjt0eXBl b2YgYT0zRD0zRCJ1bmRlZmluZWQiJiYoYT0zRHMpLHR5cGU9Cm9mIGw9M0Q9M0QidW5kZWZpbmVk IiYmKGw9M0ROLnhTY2FsZSgpKE4ueCgpKHMsZikpKSxjLnB1c2goe2tleTpuLmtleSx2YWx1ZT0K Ok4ueSgpKHMsZiksY29sb3I6dShuLG4uc2VyaWVzSW5kZXgpfSl9KTtpZihjLmxlbmd0aD4yKXt2 YXIgaD0zRE4ueVNjYWxlKCkuPQppbnZlcnQoaS5tb3VzZVkpLHA9M0RNYXRoLmFicyhOLnlTY2Fs ZSgpLmRvbWFpbigpWzBdLU4ueVNjYWxlKCkuZG9tYWluKClbMV09CiksZD0zRC4wMypwLGc9M0Rl Lm5lYXJlc3RWYWx1ZUluZGV4KGMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSksaCxk KT0KO2chPTNEPTNEbnVsbCYmKGNbZ10uaGlnaGxpZ2h0PTNEITApfXZhciB5PTNEbi50aWNrRm9y bWF0KCkoTi54KCkoYSxmKSk7cy50PQpvb2x0aXAucG9zaXRpb24oe2xlZnQ6bCtvLmxlZnQsdG9w OmkubW91c2VZK28udG9wfSkuY2hhcnRDb250YWluZXIoQy5wYXJlbnQ9Ck5vZGUpLmVuYWJsZWQo dikudmFsdWVGb3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNrRm9ybWF0KCkoZSl9 KS5kYT0KdGEoe3ZhbHVlOnksc2VyaWVzOmN9KSgpLHMucmVuZGVyR3VpZGVMaW5lKGwpfSkscy5k aXNwYXRjaC5vbigiZWxlbWVudE1vdXNlPQpvdXQiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUo KSx0LmNsZWFySGlnaGxpZ2h0cygpfSksUy5vbigidG9vbHRpcFNob3ciLGY9CnVuY3Rpb24oZSl7 diYmVChlLEMucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlw ZW9mIGUuZD0KaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmbS5sZW5ndGg9M0Q9M0Q9M0RlLmRpc2Fi bGVkLmxlbmd0aCYmKG0uZm9yRWFjaChmdW5jPQp0aW9uKHQsbil7dC5kaXNhYmxlZD0zRGUuZGlz YWJsZWRbbl19KSxiLmRpc2FibGVkPTNEZS5kaXNhYmxlZCksTi51cGRhdGUoKX09Cil9KSxOfXZh ciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4 aXMoKSxpPTNEZT0KLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgp LG89M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1PQowLGxlZnQ6NjB9LHU9M0RlLnV0aWxzLmRl ZmF1bHRDb2xvcigpLGE9M0RudWxsLGY9M0RudWxsLGw9M0QhMCxjPTNEITAsaD0zRCE9CjAscD0z RCExLGQ9M0QhMSx2PTNEITAsbT0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2Ur IjwvaDM+IisiPHA+Ij0KK24rIiBhdCAiK3QrIjwvcD4ifSxnLHksYj0zRHt9LHc9M0RudWxsLEU9 M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNEZDMuZGlzPQpwYXRjaCgidG9vbHRpcFNob3ciLCJ0 b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSx4PTNEMDtuLm9yaWU9Cm50 KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWVudChwPyJyaWdodCI6ImxlZnQiKTt2YXIg VD0zRGZ1bmN0aW9uKGkscz0KKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9 M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpPQpja0Zvcm1hdCgpKHQueCgpKGku cG9pbnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS49 CnBvaW50SW5kZXgpKSxsPTNEbShpLnNlcmllcy5rZXksYSxmLGksTik7ZS50b29sdGlwLnNob3co W28sdV0sbCxudWxsLG51bGwscz0KKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3Vz ZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wPQpvc1swXStvLmxlZnQsZS5w b3NbMV0rby50b3BdLFMudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2U9Cm91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aXBIaWRlKGUpfSksUy5vbigidG9v bHRpcEhpZGUiLGZ1bmN0aW9uKCl7dj0KJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksTi5kaXNwYXRj aD0zRFMsTi5saW5lcz0zRHQsTi5sZWdlbmQ9M0RpLE4ueEF4aXM9M0RuPQosTi55QXhpcz0zRHIs Ti5pbnRlcmFjdGl2ZUxheWVyPTNEcyxkMy5yZWJpbmQoTix0LCJkZWZpbmVkIiwiaXNBcmVhIiwi eCIsInk9CiIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhS YW5nZSIsInlSYW5nZSIsImZvcmNlWCIsIj0KZm9yY2VZIiwiaW50ZXJhY3RpdmUiLCJjbGlwRWRn ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImlkIiwiaW50ZXJwb2xhPQp0ZSIpLE4ub3B0 aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChOKSxOLm1hcmdpbj0zRGZ1bmN0aW9uKGUp e3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRl ZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9Cj0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmlu ZWQiP2UucmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbT0KIT0zRCJ1bmRl ZmluZWQiP2UuYm90dG9tOm8uYm90dG9tLG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVm aW5lZCI/ZS5sPQplZnQ6by5sZWZ0LE4pOm99LE4ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsTik6YX09CixOLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxOKTpmfSxOLmNvbG9yPTNEZnVuYz0KdGlvbih0 KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xv cih1KSxOKTp1fSxOPQouc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhsPTNEZSxOKTpsfSxOLnNob3dYQXhpcz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGM9M0RlLE4pOmN9LE4uc2hvd1lBeGlzPTNEZnVuY3Rpb24oPQplKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsTik6aH0sTi5yaWdodEFsaWduWUF4aXM9M0Rm dW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxyLm9yaWVudChlPyJy aWdodCI6ImxlZnQiKSxOKTpwfSxOLnVzZUludGVyYWN0aT0KdmVHdWlkZWxpbmU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsZT0zRD0zRD0zRCEwJiYoTi5pPQpu dGVyYWN0aXZlKCExKSxOLnVzZVZvcm9ub2koITEpKSxOKTpkfSxOLnRvb2x0aXBzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8odj0zRGUsTik6dn0sTi50b29sdGlwQ29u dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KG09M0RlLE4pOm19 LE4uc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsTik6 PQpifSxOLmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh3PTNEZSxOKTp3fSxOLm5vRGE9CnRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KEU9M0RlLE4pOkV9LE4udHJhbnNpdGlvbkR1cmF0aW9uPQo9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsTik6eH0sTn0sZS5tb2RlbHMubGluZVBsdXNC YXI9CkNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBUKGUpe3JldHVybiBlLmVhY2goZnVuY3Rp b24oZSl7dmFyIGw9M0RkMy5zZWxlYz0KdCh0aGlzKSxjPTNEdGhpcyx2PTNEKGF8fHBhcnNlSW50 KGwuc3R5bGUoIndpZHRoIikpfHw5NjApLXUubGVmdC11LnJpZ2h0LE49Cj0zRChmfHxwYXJzZUlu dChsLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b207VC51cGRhdGU9M0RmdW5j dGlvbj0KKCl7bC5jYWxsKFQpfSxiLmRpc2FibGVkPTNEZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu ISFlLmRpc2FibGVkfSk7aWYoIXcpe3ZhPQpyIEM7dz0zRHt9O2ZvcihDIGluIGIpYltDXWluc3Rh bmNlb2YgQXJyYXk/d1tDXT0zRGJbQ10uc2xpY2UoMCk6d1tDXT0zRGJbQ109Cn1pZighZXx8IWUu bGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxl bmd0aCl7dj0KYXIgaz0zRGwuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbRV0pO3JldHVy biBrLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuPQphdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRh IikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGQ9CmxlIiksay5h dHRyKCJ4Iix1LmxlZnQrdi8yKS5hdHRyKCJ5Iix1LnRvcCtOLzIpLnRleHQoZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KT0KLFR9bC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgTD0z RGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlPQouZGlzYWJsZWQmJmUuYmFyfSksQT0zRGUu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhcn0pO209M0RBLmZpbHRlcihmdW49CmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RoJiZBLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1 cm4hZS5kaXNhYmxlZD0KfSlbMF0udmFsdWVzLmxlbmd0aD90LnhTY2FsZSgpOm4ueFNjYWxlKCks Zz0zRG4ueVNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyPQogTz0zRGQzLnNlbGVjdCh0aGlzKS5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lUGx1c0JhciIpLmRhdGEoW2VdKSxNPTNETy49CmVu dGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVBsdXNC YXIiKS5hcHBlbmQoImciKT0KLF89M0RPLnNlbGVjdCgiZyIpO00uYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi14IG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudi15 MSBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKSw9 Ck0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLE0uYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1saT0KbmVzV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1sZWdlbmRXcmFwIikscCYmKG8ud2lkdGgodi8yKSxfLnNlPQpsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmRhdHVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWdpbmFsS2V5PTNEZS5v cmk9CmdpbmFsS2V5PTNEPTNEPTNEdW5kZWZpbmVkP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9 M0RlLm9yaWdpbmFsS2V5KyhlLmJhcj0KPyIgKGxlZnQgYXhpcykiOiIgKHJpZ2h0IGF4aXMpIiks ZX0pKS5jYWxsKG8pLHUudG9wIT0zRG8uaGVpZ2h0KCkmJih1LnRvcD0KPTNEby5oZWlnaHQoKSxO PTNEKGZ8fHBhcnNlSW50KGwuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbSks Xy5zPQplbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo Iit2LzIrIiwiKyAtdS50b3ArIikiKSk9CixPLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgi K3UubGVmdCsiLCIrdS50b3ArIikiKSx0LndpZHRoKHYpLmhlaWdodChOKT0KLmNvbG9yKGUubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGgoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0 LG4pe3JlPQp0dXJuIWVbbl0uZGlzYWJsZWQmJiFlW25dLmJhcn0pKSxuLndpZHRoKHYpLmhlaWdo dChOKS5jb2xvcihlLm1hcChmdW5jdGlvbig9CmUsdCl7cmV0dXJuIGUuY29sb3J8fGgoZSx0KX0p LmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlWz0Kbl0uYmFyfSkp O3ZhciBEPTNEXy5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHVtKEwubGVuZ3RoP0w6W3t2YWx1 ZXM6W119XSksPQpQPTNEXy5zZWxlY3QoIi5udi1saW5lc1dyYXAiKS5kYXR1bShBWzBdJiYhQVsw XS5kaXNhYmxlZD9BOlt7dmFsdWVzOltdfV0pO2Q9CjMudHJhbnNpdGlvbihEKS5jYWxsKG4pLGQz LnRyYW5zaXRpb24oUCkuY2FsbCh0KSxyLnNjYWxlKG0pLnRpY2tzKHYvMTAwKS50aT0KY2tTaXpl KC1OLDApLF8uc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKDAsIitnLnJhPQpuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oXy5zZWxlY3QoIi5udi14 Lm52LWF4aXMiKSkuY2FsbChyKSxpLnNjYWxlKGcpLnQ9Cmlja3MoTi8zNikudGlja1NpemUoLXYs MCksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLm52LXkxLm52LWF4aXMiKSkuc3R5bGUoIj0Kb3Bh Y2l0eSIsTC5sZW5ndGg/MTowKS5jYWxsKGkpLHMuc2NhbGUoeSkudGlja3MoTi8zNikudGlja1Np emUoTC5sZW5ndGg/MDotPQp2LDApLF8uc2VsZWN0KCIubnYteTIubnYtYXhpcyIpLnN0eWxlKCJv cGFjaXR5IixBLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm89CnJtIiwidHJhbnNsYXRlKCIrdisi LDApIiksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLm52LXkyLm52LWF4aXMiKSkuY2FsbChzKT0K LG8uZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtiPTNEZSxTLnN0YXRlQ2hh bmdlKGIpLFQudXBkYXRlKCl9PQopLFMub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtkJiZ4 KGUsYy5wYXJlbnROb2RlKX0pLFMub24oImNoYW5nZVN0YXRlIiw9CmZ1bmN0aW9uKHQpe3R5cGVv ZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZS5k aT0Kc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLGIuZGlzYWJsZWQ9M0R0LmRpc2FibGVkKSxULnVw ZGF0ZSgpfSl9KSxUfXZhciB0PTNEPQplLm1vZGVscy5saW5lKCksbj0zRGUubW9kZWxzLmhpc3Rv cmljYWxCYXIoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGU9CmxzLmF4aXMoKSxzPTNE ZS5tb2RlbHMuYXhpcygpLG89M0RlLm1vZGVscy5sZWdlbmQoKSx1PTNEe3RvcDozMCxyaWdodDo2 MCxibz0KdHRvbTo1MCxsZWZ0OjYwfSxhPTNEbnVsbCxmPTNEbnVsbCxsPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUueH0sYz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUueX0saD0zRGUudXRpbHMuZGVm YXVsdENvbG9yKCkscD0zRCEwLGQ9M0QhMCx2PTNEZnVuY3Rpb24oZSx0LG49CixyLGkpe3JldHVy biI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LG0sZyx5LGI9M0R7fSx3 PTNEbnVsbD0KLEU9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNEZDMuZGlzcGF0Y2goInRvb2x0 aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0PQplQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKTtuLnBh ZERhdGEoITApLHQuY2xpcEVkZ2UoITEpLnBhZERhdGEoITApLHIub3JpZW50KCI9CmJvdHRvbSIp LnRpY2tQYWRkaW5nKDcpLmhpZ2hsaWdodFplcm8oITEpLGkub3JpZW50KCJsZWZ0Iikscy5vcmll bnQoInJpZ2h0Ij0KKTt2YXIgeD0zRGZ1bmN0aW9uKG4sbyl7dmFyIHU9M0RuLnBvc1swXSsoby5v ZmZzZXRMZWZ0fHwwKSxhPTNEbi5wb3NbMV0rKG8uPQpvZmZzZXRUb3B8fDApLGY9M0RyLnRpY2tG b3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9M0Qobi5zZXJpZXM9Ci5iYXI/ aTpzKS50aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxjPTNEdihuLnNl cmllcy5rZXksZixsLD0KbixUKTtlLnRvb2x0aXAuc2hvdyhbdSxhXSxjLG4udmFsdWU8MD8ibiI6 InMiLG51bGwsbyl9O3JldHVybiB0LmRpc3BhdGNoLm9uPQooImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3U9Ci50 b3BdLFMudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9v bHRpcCIsZnVuY3Rpb24oZT0KKXtTLnRvb2x0aXBIaWRlKGUpfSksbi5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlPQoucG9zPTNEW2UucG9zWzBdK3Uu bGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLG4uZGlzcGF0Y2gub24oImU9 CmxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUoZSl9KSxT Lm9uKCJ0b29sdGlwSGlkZSIsZj0KdW5jdGlvbigpe2QmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxU LmRpc3BhdGNoPTNEUyxULmxlZ2VuZD0zRG8sVC5saW5lcz0zRHQsPQpULmJhcnM9M0RuLFQueEF4 aXM9M0RyLFQueTFBeGlzPTNEaSxULnkyQXhpcz0zRHMsZDMucmViaW5kKFQsdCwiZGVmaW5lZCIs InM9Cml6ZSIsImNsaXBWb3Jvbm9pIiwiaW50ZXJwb2xhdGUiKSxULm9wdGlvbnM9M0RlLnV0aWxz Lm9wdGlvbnNGdW5jLmJpbmQoVCksVD0KLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obD0zRGUsdC54KGUpLG4ueChlKSxUKTpsfSxULnk9M0RmPQp1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx0LnkoZSksbi55KGUpLFQpOmN9LFQubWFyZ2lu PTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odS50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50bz0KcDp1LnRvcCx1LnJpZ2h0PTNEdHlwZW9mIGUucmln aHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUuYm90dG9tPTNEPQp0eXBlb2YgZS5i b3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20sdS5sZWZ0PTNEdHlwZW9mIGUu bGVmdCE9M0Q9CiJ1bmRlZmluZWQiP2UubGVmdDp1LmxlZnQsVCk6dX0sVC53aWR0aD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/KGE9M0RlLFQpOmF9LFQuaGVpZ2h0PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLFQpOmZ9PQosVC5jb2xv cj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZS51dGlscy5nZXRD b2xvcih0KSxvLmM9Cm9sb3IoaCksVCk6aH0sVC5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLFQpOj0KcH0sVC50b29sdGlwcz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxUKTpkfSxULnRvb2x0aXBDPQpvbnRl bnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsVCk6dn0sVC5z dGF0ZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLFQpOmJ9 LFQuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8o dz0zRGUsVCk6d30sVC5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlPQpu Z3RoPyhFPTNEZSxUKTpFfSxUfSxlLm1vZGVscy5saW5lV2l0aEZvY3VzQ2hhcnQ9M0RmdW5jdGlv bigpe2Z1bmN0aW9uIGsoZSk9CntyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIFIo ZSl7dmFyIHQ9M0QrKGU9M0Q9M0QiZSIpLG49M0R0PzE6LTEscj0KPTNETy8zO3JldHVybiJNIisu NSpuKyIsIityKyJBNiw2IDAgMCAiK3QrIiAiKzYuNSpuKyIsIisocis2KSsiViIrKDIqci02KSsi PQpBNiw2IDAgMCAiK3QrIiAiKy41Km4rIiwiKzIqcisiWiIrIk0iKzIuNSpuKyIsIisocis4KSsi ViIrKDIqci04KSsiTSIrNC41Km49CisiLCIrKHIrOCkrIlYiKygyKnItOCl9ZnVuY3Rpb24gVSgp e2EuZW1wdHkoKXx8YS5leHRlbnQodyksRi5kYXRhKFthLmVtcHR5KD0KKT9nLmRvbWFpbigpOndd KS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RnKGVbMF0pLXYucmFuZ2UoKVswXSxyPTNEdi5y YW5nPQplKClbMV0tZyhlWzFdKTtkMy5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVmdCIpLmF0dHIo IndpZHRoIixuPDA/MDpuKSxkMy5zZWw9CmVjdCh0aGlzKS5zZWxlY3QoIi5yaWdodCIpLmF0dHIo IngiLGcoZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0pfWZ1bmN0aT0Kb24geigpe3c9M0Rh LmVtcHR5KCk/bnVsbDphLmV4dGVudCgpO3ZhciBuPTNEYS5lbXB0eSgpP2cuZG9tYWluKCk6YS5l eHRlbnQoPQopO2lmKE1hdGguYWJzKG5bMF0tblsxXSk8PTNEMSlyZXR1cm47VC5icnVzaCh7ZXh0 ZW50Om4sYnJ1c2g6YX0pLFUoKTt2YXIgcz0KPTNEUC5zZWxlY3QoIi5udi1mb2N1cyAubnYtbGlu ZXNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuPQpkaXNhYmxlZH0p Lm1hcChmdW5jdGlvbihlLHIpe3JldHVybntrZXk6ZS5rZXksdmFsdWVzOmUudmFsdWVzLmZpbHRl cihmdW5jdGk9Cm9uKGUscil7cmV0dXJuIHQueCgpKGUscik+PTNEblswXSYmdC54KCkoZSxyKTw9 M0RuWzFdfSl9fSkpO3MuY2FsbCh0KSxQLnNlbD0KZWN0KCIubnYtZm9jdXMgLm52LXgubnYtYXhp cyIpLmNhbGwociksUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteS5udi1heGlzIikuPQpjYWxsKGkp fXZhciBTPTNEZDMuc2VsZWN0KHRoaXMpLE49M0R0aGlzLEw9M0QoaHx8cGFyc2VJbnQoUy5zdHls ZSgid2lkdGgiKSk9Cnx8OTYwKS1mLmxlZnQtZi5yaWdodCxBPTNEKHB8fHBhcnNlSW50KFMuc3R5 bGUoImhlaWdodCIpKXx8NDAwKS1mLnRvcC1mLmJvdD0KdG9tLWQsTz0zRGQtbC50b3AtbC5ib3R0 b207ay51cGRhdGU9M0RmdW5jdGlvbigpe1MuY2FsbChrKX0say5jb250YWluZXI9M0R0PQpoaXM7 aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5s ZW5ndGh9KS5sZW5ndGg9Cil7dmFyIE09M0RTLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEo W3hdKTtyZXR1cm4gTS5lbnRlcigpLmFwcGVuZCgidGV4dD0KIikuYXR0cigiY2xhc3MiLCJudmQz IG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtPQpp ZGRsZSIpLE0uYXR0cigieCIsZi5sZWZ0K0wvMikuYXR0cigieSIsZi50b3ArQS8yKS50ZXh0KGZ1 bmN0aW9uKGUpe3JldHVybiA9CmV9KSxrfVMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3Zl KCksdj0zRHQueFNjYWxlKCksbT0zRHQueVNjYWxlKCksZz0zRD0Kbi54U2NhbGUoKSx5PTNEbi55 U2NhbGUoKTt2YXIgXz0zRFMuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZVdpdGhGb2N1c0No PQphcnQiKS5kYXRhKFtlXSksRD0zRF8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtd3JhcCBudi1saW49CmVXaXRoRm9jdXNDaGFydCIpLmFwcGVuZCgiZyIpLFA9M0Rf LnNlbGVjdCgiZyIpO0QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLD0KIm52LWxlZ2VuZFdyYXAi KTt2YXIgSD0zREQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1mb2N1cyIpO0guYXBwZW5k KCJnPQoiKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEguYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi15IG52LWF4aXMiKSw9CkguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1s aW5lc1dyYXAiKTt2YXIgQj0zREQuYXBwZW5kKCJnIikuYXR0cigiY2xhcz0KcyIsIm52LWNvbnRl eHQiKTtCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksQi5hcHBlbmQo ImciKS5hPQp0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksQi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWxpbmVzV3JhcCIpLEIuYXA9CnBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJy dXNoQmFja2dyb3VuZCIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudj0KLXggbnYtYnJ1 c2giKSxiJiYodS53aWR0aChMKSxQLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5j YWxsKHUpLGYuPQp0b3AhPTNEdS5oZWlnaHQoKSYmKGYudG9wPTNEdS5oZWlnaHQoKSxBPTNEKHB8 fHBhcnNlSW50KFMuc3R5bGUoImhlaWdodCIpKXw9Cnw0MDApLWYudG9wLWYuYm90dG9tLWQpLFAu c2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbD0KYXRlKDAs IisgLWYudG9wKyIpIikpLF8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi5sZWZ0KyIs IitmLnRvcCsiKSIpPQosdC53aWR0aChMKS5oZWlnaHQoQSkuY29sb3IoZS5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmk9Cmx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1 cm4hZVtuXS5kaXNhYmxlZH0pKSxuLmRlZmluZWQodC5kZWZpbmVkKCkpLndpZHRoKEwpLj0KaGVp Z2h0KE8pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0p LmZpbHRlcihmdW5jdGlvPQpuKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksUC5zZWxlY3Qo Ii5udi1jb250ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoMCwiKyhBK2YuYm90 dG9tK2wudG9wKSsiKSIpO3ZhciBqPTNEUC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi1saW5lcz0K V3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpO2Qz LnRyYW5zaXRpb24oaikuY2FsPQpsKG4pLHIuc2NhbGUodikudGlja3MoTC8xMDApLnRpY2tTaXpl KC1BLDApLGkuc2NhbGUobSkudGlja3MoQS8zNikudGlja1NpemU9CigtTCwwKSxQLnNlbGVjdCgi Lm52LWZvY3VzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwi Kz0KQSsiKSIpLGEueChnKS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGU9M0RrLnRyYW5zaXRp b25EdXJhdGlvbigpO2sudHJhbnNpPQp0aW9uRHVyYXRpb24oMCkseigpLGsudHJhbnNpdGlvbkR1 cmF0aW9uKGUpfSksdyYmYS5leHRlbnQodyk7dmFyIEY9M0RQLnNlbGU9CmN0KCIubnYtYnJ1c2hC YWNrZ3JvdW5kIikuc2VsZWN0QWxsKCJnIikuZGF0YShbd3x8YS5leHRlbnQoKV0pLEk9M0RGLmVu dGVyKD0KKS5hcHBlbmQoImciKTtJLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibGVmdCIp LmF0dHIoIngiLDApLmF0dHIoInkiLDApPQouYXR0cigiaGVpZ2h0IixPKSxJLmFwcGVuZCgicmVj dCIpLmF0dHIoImNsYXNzIiwicmlnaHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCI9CnkiLDApLmF0dHIo ImhlaWdodCIsTyk7dmFyIHE9M0RQLnNlbGVjdCgiLm52LXgubnYtYnJ1c2giKS5jYWxsKGEpO3Eu c2VsZWN0QT0KbGwoInJlY3QiKS5hdHRyKCJoZWlnaHQiLE8pLHEuc2VsZWN0QWxsKCIucmVzaXpl IikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsPQpSKSx6KCkscy5zY2FsZShnKS50aWNrcyhMLzEw MCkudGlja1NpemUoLU8sMCksUC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm49CnYtYXhpcyIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksZDMudHJh bnNpdGlvbihQLj0Kc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlzIikpLmNhbGwocyks by5zY2FsZSh5KS50aWNrcyhPLzM2KS50aWNrU2l6PQplKC1MLDApLGQzLnRyYW5zaXRpb24oUC5z ZWxlY3QoIi5udi1jb250ZXh0IC5udi15Lm52LWF4aXMiKSkuY2FsbChvKSxQLnNlbGU9CmN0KCIu bnYtY29udGV4dCAubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs Iit5LnJhbmdlKClbMD0KXSsiKSIpLHUuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlv bihlKXtrLnVwZGF0ZSgpfSksVC5vbigidG9vbHRpcFNoPQpvdyIsZnVuY3Rpb24oZSl7RSYmQyhl LE4ucGFyZW50Tm9kZSl9KX0pLGt9dmFyIHQ9M0RlLm1vZGVscy5saW5lKCksbj0zRGUubW89CmRl bHMubGluZSgpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmF4aXMoKSxzPTNEZS5t b2RlbHMuYXhpcygpLG89Cj0zRGUubW9kZWxzLmF4aXMoKSx1PTNEZS5tb2RlbHMubGVnZW5kKCks YT0zRGQzLnN2Zy5icnVzaCgpLGY9M0R7dG9wOjMwLHJpZz0KaHQ6MzAsYm90dG9tOjMwLGxlZnQ6 NjB9LGw9M0R7dG9wOjAscmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6NjB9LGM9M0RlLnV0aWxzPQou ZGVmYXVsdENvbG9yKCksaD0zRG51bGwscD0zRG51bGwsZD0zRDEwMCx2LG0sZyx5LGI9M0QhMCx3 PTNEbnVsbCxFPTNEITAsUz0KPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsi PC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx4PTNEPQoiTm8gRGF0YSBBdmFpbGFibGUu IixUPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJicnVzaCIpLE49 Cj0zRDA7dC5jbGlwRWRnZSghMCksbi5pbnRlcmFjdGl2ZSghMSksci5vcmllbnQoImJvdHRvbSIp LnRpY2tQYWRkaW5nKDUpLGkubz0KcmllbnQoImxlZnQiKSxzLm9yaWVudCgiYm90dG9tIikudGlj a1BhZGRpbmcoNSksby5vcmllbnQoImxlZnQiKTt2YXIgQz0zRGZ1PQpuY3Rpb24obixzKXt2YXIg bz0zRG4ucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RuLnBvc1sxXSsocy5vZmZzZXRUb3B8 fDA9CiksYT0zRHIudGlja0Zvcm1hdCgpKHQueCgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSksZj0z RGkudGlja0Zvcm1hdCgpKHQueSgpKD0Kbi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPTNEUyhuLnNl cmllcy5rZXksYSxmLG4sayk7ZS50b29sdGlwLnNob3coW28sdV0sbCxuPQp1bGwsbnVsbCxzKX07 cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24o ZSl7ZS49CnBvcz0zRFtlLnBvc1swXStmLmxlZnQsZS5wb3NbMV0rZi50b3BdLFQudG9vbHRpcFNo b3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbD0KZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlv bihlKXtULnRvb2x0aXBIaWRlKGUpfSksVC5vbigidG9vbHRpcEhpZGUiLGZ1PQpuY3Rpb24oKXtF JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksay5kaXNwYXRjaD0zRFQsay5sZWdlbmQ9M0R1LGsubGlu ZXM9M0R0LGs9Ci5saW5lczI9M0RuLGsueEF4aXM9M0RyLGsueUF4aXM9M0RpLGsueDJBeGlzPTNE cyxrLnkyQXhpcz0zRG8sZDMucmViaW5kKGssdD0KLCJkZWZpbmVkIiwiaXNBcmVhIiwic2l6ZSIs InhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiPQpmb3JjZVki LCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJpZCIpLGsub3B0aW9ucz0z RGUudXRpbHMub3A9CnRpb25zRnVuYy5iaW5kKGspLGsueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh0LngoZSksbi54KGUpLD0Kayk6dC54fSxrLnk9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC55KGUpLG4ueShlKSxrKTp0Lnl9LGsuPQptYXJn aW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZi50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGU9CmZpbmVkIj9lLnRvcDpmLnRvcCxmLnJpZ2h0PTNEdHlwZW9mIGUucmln aHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpmLnJpZ2h0LD0KZi5ib3R0b209M0R0eXBlb2YgZS5i b3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206Zi5ib3R0b20sZi5sZWZ0PTNEdHlwZW9mPQog ZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpmLmxlZnQsayk6Zn0say5tYXJnaW4yPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8obD0zRGUsayk6bH0say53aWR0aD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGg9M0RlLGspOmh9LGsuaGVp Z2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLGspOnB9LGsu PQpoZWlnaHQyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLGsp OmR9LGsuY29sb3I9M0RmdW5jdGk9Cm9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNE ZS51dGlscy5nZXRDb2xvcih0KSx1LmNvbG9yKGMpLGspOmN9LGsucz0KaG93TGVnZW5kPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLGspOmJ9LGsudG9vbHRpcHM9 M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxrKTpFfSxrLnRv b2x0aXBDb250ZW50PTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0z RGUsayk6U30say5pbnRlcnBvbGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5s ZW5ndGg/KHQuaW50ZXJwb2xhdGUoZSksbi5pbnRlcnBvbGF0ZShlKSxrKTp0LmludGVycG9sYXRl KCl9LGsuPQpub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0z RGUsayk6eH0say54VGlja0Zvcm1hdD0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHIudGlja0Zvcm1hdChlKSxzLnRpY2tGb3JtYXQoZSksayk6ci50aT0KY2tGb3JtYXQo KX0say55VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhp LnRpY2tGb3JtPQphdChlKSxvLnRpY2tGb3JtYXQoZSksayk6aS50aWNrRm9ybWF0KCl9LGsuYnJ1 c2hFeHRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxr KTp3fSxrLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50 cy5sZW5ndGg/KE49M0RlLGspOk59LGt9LGUubW9kZWxzLmxpbmVQbHVzQmFyV2l0aEZvY3VzQ2hh cnQ9M0RmdW5jdGlvPQpuKCl7ZnVuY3Rpb24gQihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUp e2Z1bmN0aW9uIHR0KGUpe3ZhciB0PTNEKyhlPTNEPQo9M0QiZSIpLG49M0R0PzE6LTEscj0zREkv MztyZXR1cm4iTSIrLjUqbisiLCIrcisiQTYsNiAwIDAgIit0KyIgIis2LjUqbisiLCI9Cisocis2 KSsiViIrKDIqci02KSsiQTYsNiAwIDAgIit0KyIgIisuNSpuKyIsIisyKnIrIloiKyJNIisyLjUq bisiLCIrKHIrOCkrIj0KViIrKDIqci04KSsiTSIrNC41Km4rIiwiKyhyKzgpKyJWIisoMipyLTgp fWZ1bmN0aW9uIG50KCl7aC5lbXB0eSgpfHxoLmV4dGVuPQp0KHgpLFkuZGF0YShbaC5lbXB0eSgp P2suZG9tYWluKCk6eF0pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGsoZVswXSktay49CnJh bmdlKClbMF0scj0zRGsucmFuZ2UoKVsxXS1rKGVbMV0pO2QzLnNlbGVjdCh0aGlzKS5zZWxlY3Qo Ii5sZWZ0IikuYXR0cigidz0KaWR0aCIsbjwwPzA6biksZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgi LnJpZ2h0IikuYXR0cigieCIsayhlWzFdKSkuYXR0cigid2lkPQp0aCIscjwwPzA6cil9KX1mdW5j dGlvbiBydCgpe3g9M0RoLmVtcHR5KCk/bnVsbDpoLmV4dGVudCgpLFM9M0RoLmVtcHR5KCk/ay49 CmRvbWFpbigpOmguZXh0ZW50KCksRC5icnVzaCh7ZXh0ZW50OlMsYnJ1c2g6aH0pLG50KCksci53 aWR0aChqKS5oZWlnaHQoRikuYz0Kb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNv bG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1PQpybiFlW25dLmRpc2FibGVk JiZlW25dLmJhcn0pKSx0LndpZHRoKGopLmhlaWdodChGKS5jb2xvcihlLm1hcChmdW5jdGlvbihl LHQ9Cil7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVy biFlW25dLmRpc2FibGVkJiYhZVtuXT0KLmJhcn0pKTt2YXIgbj0zRCQuc2VsZWN0KCIubnYtZm9j dXMgLm52LWJhcnNXcmFwIikuZGF0dW0oUi5sZW5ndGg/Ui5tYXAoZnVuPQpjdGlvbihlLHQpe3Jl dHVybntrZXk6ZS5rZXksdmFsdWVzOmUudmFsdWVzLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVy biByLng9CigpKGUsdCk+PTNEU1swXSYmci54KCkoZSx0KTw9M0RTWzFdfSl9fSk6W3t2YWx1ZXM6 W119XSksaT0zRCQuc2VsZWN0KCIubnYtZj0Kb2N1cyAubnYtbGluZXNXcmFwIikuZGF0dW0oVVsw XS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOlUubWFwKGZ1bmN0aW9uKGUsbil7PQpyZXR1cm57a2V5 OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC54KCko ZSxuKT49M0Q9ClNbMF0mJnQueCgpKGUsbik8PTNEU1sxXX0pfX0pKTtSLmxlbmd0aD9DPTNEci54 U2NhbGUoKTpDPTNEdC54U2NhbGUoKSxzLnNjYT0KbGUoQykudGlja3Moai8xMDApLnRpY2tTaXpl KC1GLDApLHMuZG9tYWluKFtNYXRoLmNlaWwoU1swXSksTWF0aC5mbG9vcihTWzFdPQopXSksJC5z ZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKHMpLG4uY2FsbChyKSxpLmNhbGwodCksJC5zZWxl Y3QoIi5udi1mb2M9CnVzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiK0wucmFuZ2UoKVswXSsiKSIpLHUuc2NhbD0KZShMKS50aWNrcyhGLzM2KS50aWNrU2l6 ZSgtaiwwKSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1heGlzIikuc3R5bGUoPQoib3Bh Y2l0eSIsUi5sZW5ndGg/MTowKSxhLnNjYWxlKEEpLnRpY2tzKEYvMzYpLnRpY2tTaXplKFIubGVu Z3RoPzA6LWosMCksJC49CnNlbGVjdCgiLm52LWZvY3VzIC5udi15Mi5udi1heGlzIikuc3R5bGUo Im9wYWNpdHkiLFUubGVuZ3RoPzE6MCkuYXR0cigidHJhbj0Kc2Zvcm0iLCJ0cmFuc2xhdGUoIitD LnJhbmdlKClbMV0rIiwwKSIpLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkxLm52LWF4aXMiPQop LmNhbGwodSksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYteTIubnYtYXhpcyIpLmNhbGwoYSl9dmFy IE49M0RkMy5zZWxlY3QodGg9CmlzKSxQPTNEdGhpcyxqPTNEKHZ8fHBhcnNlSW50KE4uc3R5bGUo IndpZHRoIikpfHw5NjApLXAubGVmdC1wLnJpZ2h0LEY9M0QobT0KfHxwYXJzZUludChOLnN0eWxl KCJoZWlnaHQiKSl8fDQwMCktcC50b3AtcC5ib3R0b20tZyxJPTNEZy1kLnRvcC1kLmJvdHRvbTtC PQoudXBkYXRlPTNEZnVuY3Rpb24oKXtOLmNhbGwoQil9LEIuY29udGFpbmVyPTNEdGhpcztpZigh ZXx8IWUubGVuZ3RofHwhZS5maWw9CnRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVu Z3RofSkubGVuZ3RoKXt2YXIgcT0zRE4uc2VsZWN0QWxsKCIubnYtbj0Kb0RhdGEiKS5kYXRhKFtf XSk7cmV0dXJuIHEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt bm9EPQphdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxl IikscS5hdHRyKCJ4IixwLmxlZnQrai89CjIpLmF0dHIoInkiLHAudG9wK0YvMikudGV4dChmdW5j dGlvbihlKXtyZXR1cm4gZX0pLEJ9Ti5zZWxlY3RBbGwoIi5udi1ub0RhdD0KYSIpLnJlbW92ZSgp O3ZhciBSPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUuYmFyfSks VT0zRGUuPQpmaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFyfSk7Qz0zRHIueFNjYWxlKCks az0zRG8uc2NhbGUoKSxMPTNEci55U2NhbGU9CigpLEE9M0R0LnlTY2FsZSgpLE89M0RpLnlTY2Fs ZSgpLE09M0RuLnlTY2FsZSgpO3ZhciB6PTNEZS5maWx0ZXIoZnVuY3Rpb24oZT0KKXtyZXR1cm4h ZS5kaXNhYmxlZCYmZS5iYXJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChm dW5jdGlvbihlPQosdCl7cmV0dXJue3g6eShlLHQpLHk6YihlLHQpfX0pfSksVz0zRGUuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGU9CmQmJiFlLmJhcn0pLm1hcChmdW5jdGlvbihl KXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6eShlLD0KdCkseTpi KGUsdCl9fSl9KTtDLnJhbmdlKFswLGpdKSxrLmRvbWFpbihkMy5leHRlbnQoZDMubWVyZ2Uoei5j b25jYXQoVykpLGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yYW5nZShbMCxqXSk7dmFyIFg9 M0ROLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmU9ClBsdXNCYXIiKS5kYXRhKFtlXSksVj0z RFguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudj0KLWxp bmVQbHVzQmFyIikuYXBwZW5kKCJnIiksJD0zRFguc2VsZWN0KCJnIik7Vi5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52PQotbGVnZW5kV3JhcCIpO3ZhciBKPTNEVi5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWZvY3VzIik7Si5hcHBlbmQoImciKS49CmF0dHIoImNsYXNzIiwibnYteCBu di1heGlzIiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMiKSxKLj0K YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1heGlzIiksSi5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWJhPQpyc1dyYXAiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtbGluZXNXcmFwIik7dmFyIEs9M0RWLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudi1j b250ZXh0Iik7Sy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEsuYXBw ZT0KbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMiKSxLLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYteTIgbnYtPQpheGlzIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LWJhcnNXcmFwIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyI9CiwibnYtbGluZXNXcmFw IiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJydXNoQmFja2dyb3VuZCIpLEsuYXBw ZW5kKD0KImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYnJ1c2giKSxFJiYoYy53aWR0aChqLzIp LCQuc2VsZWN0KCIubnYtbGVnZW5kV3JhPQpwIikuZGF0dW0oZS5tYXAoZnVuY3Rpb24oZSl7cmV0 dXJuIGUub3JpZ2luYWxLZXk9M0RlLm9yaWdpbmFsS2V5PTNEPTNEPTNEdW49CmRlZmluZWQ/ZS5r ZXk6ZS5vcmlnaW5hbEtleSxlLmtleT0zRGUub3JpZ2luYWxLZXkrKGUuYmFyPyIgKGxlZnQgYXhp cykiOiIgKD0KcmlnaHQgYXhpcykiKSxlfSkpLmNhbGwoYykscC50b3AhPTNEYy5oZWlnaHQoKSYm KHAudG9wPTNEYy5oZWlnaHQoKSxGPTNEKG18PQp8cGFyc2VJbnQoTi5zdHlsZSgiaGVpZ2h0Iikp fHw0MDApLXAudG9wLXAuYm90dG9tLWcpLCQuc2VsZWN0KCIubnYtbGVnZW5kV3I9CmFwIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrai8yKyIsIisgLXAudG9wKyIpIikpLFguYXR0cigi dHJhbnNmb3JtIj0KLCJ0cmFuc2xhdGUoIitwLmxlZnQrIiwiK3AudG9wKyIpIiksaS53aWR0aChq KS5oZWlnaHQoSSkuY29sb3IoZS5tYXAoZnVuY3RpPQpvbihlLHQpe3JldHVybiBlLmNvbG9yfHx3 KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCY9CiZlW25d LmJhcn0pKSxuLndpZHRoKGopLmhlaWdodChJKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3Jl dHVybiBlLmNvbG9yfD0KfHcoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25d LmRpc2FibGVkJiYhZVtuXS5iYXJ9KSk7dmFyIFE9M0QkPQouc2VsZWN0KCIubnYtY29udGV4dCAu bnYtYmFyc1dyYXAiKS5kYXR1bShSLmxlbmd0aD9SOlt7dmFsdWVzOltdfV0pLEc9M0QkLnM9CmVs ZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIikuZGF0dW0oVVswXS5kaXNhYmxlZD9be3Zh bHVlczpbXX1dOlUpOyQucz0KZWxlY3QoIi5udi1jb250ZXh0IikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKDAsIisoRitwLmJvdHRvbStkLnRvcCkrIikiPQopLFEuY2FsbChpKSxHLmNhbGwo biksaC54KGspLm9uKCJicnVzaCIscnQpLHgmJmguZXh0ZW50KHgpO3ZhciBZPTNEJC5zZWxlY3Q9 CigiLm52LWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoW3h8fGguZXh0ZW50 KCldKSxaPTNEWS5lbnRlcigpLj0KYXBwZW5kKCJnIik7Wi5hcHBlbmQoInJlY3QiKS5hdHRyKCJj bGFzcyIsImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hPQp0dHIoImhlaWdodCIsSSks Wi5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInJpZ2h0IikuYXR0cigieCIsMCkuYXR0cigi eSI9CiwwKS5hdHRyKCJoZWlnaHQiLEkpO3ZhciBldD0zRCQuc2VsZWN0KCIubnYteC5udi1icnVz aCIpLmNhbGwoaCk7ZXQuc2VsZWN0QT0KbGwoInJlY3QiKS5hdHRyKCJoZWlnaHQiLEkpLGV0LnNl bGVjdEFsbCgiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiPQosdHQpLG8udGlja3Mo ai8xMDApLnRpY2tTaXplKC1JLDApLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlz IikuYXQ9CnRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK08ucmFuZ2UoKVswXSsiKSIpLCQu c2VsZWN0KCIubnYtY29udGV4dCAubnYteD0KLm52LWF4aXMiKS5jYWxsKG8pLGYuc2NhbGUoTyku dGlja3MoSS8zNikudGlja1NpemUoLWosMCksJC5zZWxlY3QoIi5udi1jb250PQpleHQgLm52LXkx Lm52LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsUi5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2w9CmF0ZSgwLCIray5yYW5nZSgpWzBdKyIpIiksJC5zZWxlY3QoIi5udi1jb250ZXh0 IC5udi15MS5udi1heGlzIikuY2FsbChmKSxsLj0Kc2NhbGUoTSkudGlja3MoSS8zNikudGlja1Np emUoUi5sZW5ndGg/MDotaiwwKSwkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXkyPQoubnYtYXhp cyIpLnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK2sucmE9Cm5nZSgpWzFdKyIsMCkiKSwkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXky Lm52LWF4aXMiKS5jYWxsKGwpLGMuZGlzcGF0Y2gubz0Kbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9u KGUpe0IudXBkYXRlKCl9KSxELm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7VCYmPQpIKGUs UC5wYXJlbnROb2RlKX0pLHJ0KCl9KSxCfXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1v ZGVscy5saW5lKCkscj0KPTNEZS5tb2RlbHMuaGlzdG9yaWNhbEJhcigpLGk9M0RlLm1vZGVscy5o aXN0b3JpY2FsQmFyKCkscz0zRGUubW9kZWxzLmF4aXMoPQopLG89M0RlLm1vZGVscy5heGlzKCks dT0zRGUubW9kZWxzLmF4aXMoKSxhPTNEZS5tb2RlbHMuYXhpcygpLGY9M0RlLm1vZGVscy49CmF4 aXMoKSxsPTNEZS5tb2RlbHMuYXhpcygpLGM9M0RlLm1vZGVscy5sZWdlbmQoKSxoPTNEZDMuc3Zn LmJydXNoKCkscD0zRHt0bz0KcDozMCxyaWdodDozMCxib3R0b206MzAsbGVmdDo2MH0sZD0zRHt0 b3A6MCxyaWdodDozMCxib3R0b206MjAsbGVmdDo2MH0sdj0KPTNEbnVsbCxtPTNEbnVsbCxnPTNE MTAwLHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxiPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQog ZS55fSx3PTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxFPTNEITAsUyx4PTNEbnVsbCxUPTNEITAs Tj0zRGZ1bmN0aW9uKGUsdCw9Cm4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24r IiBhdCAiK3QrIjwvcD4ifSxDLGssTCxBLE8sTSxfPTNEIk5vID0KRGF0YSBBdmFpbGFibGUuIixE PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJicnVzaCIpLFA9M0Qw PQo7dC5jbGlwRWRnZSghMCksbi5pbnRlcmFjdGl2ZSghMSkscy5vcmllbnQoImJvdHRvbSIpLnRp Y2tQYWRkaW5nKDUpLHUub3JpZW49CnQoImxlZnQiKSxhLm9yaWVudCgicmlnaHQiKSxvLm9yaWVu dCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksZi5vcmllbnQoImxlZj0KdCIpLGwub3JpZW50KCJy aWdodCIpO3ZhciBIPTNEZnVuY3Rpb24obixyKXtTJiYobi5wb2ludEluZGV4Kz0zRE1hdGguY2Vp bChTPQpbMF0pKTt2YXIgaT0zRG4ucG9zWzBdKyhyLm9mZnNldExlZnR8fDApLG89M0RuLnBvc1sx XSsoci5vZmZzZXRUb3B8fDApLGY9M0Q9CnMudGlja0Zvcm1hdCgpKHQueCgpKG4ucG9pbnQsbi5w b2ludEluZGV4KSksbD0zRChuLnNlcmllcy5iYXI/dTphKS50aWNrRm9ybT0KYXQoKSh0LnkoKShu LnBvaW50LG4ucG9pbnRJbmRleCkpLGM9M0ROKG4uc2VyaWVzLmtleSxmLGwsbixCKTtlLnRvb2x0 aXAuc2hvPQp3KFtpLG9dLGMsbi52YWx1ZTwwPyJuIjoicyIsbnVsbCxyKX07cmV0dXJuIHQuZGlz cGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXI9Ci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0z RFtlLnBvc1swXStwLmxlZnQsZS5wb3NbMV0rcC50b3BdLEQudG9vbHRpcFNobz0KdyhlKX0pLHQu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtELnRvb2x0 aXBIaWRlKGUpPQp9KSxyLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3A9Ci5sZWZ0LGUucG9zWzFdK3AudG9wXSxELnRv b2x0aXBTaG93KGUpfSksci5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvbz0KbHRpcCIs ZnVuY3Rpb24oZSl7RC50b29sdGlwSGlkZShlKX0pLEQub24oInRvb2x0aXBIaWRlIixmdW5jdGlv bigpe1QmJmUudG9vPQpsdGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0Y2g9M0RELEIubGVnZW5kPTNE YyxCLmxpbmVzPTNEdCxCLmxpbmVzMj0zRG4sQi5iYXI9CnM9M0RyLEIuYmFyczI9M0RpLEIueEF4 aXM9M0RzLEIueDJBeGlzPTNEbyxCLnkxQXhpcz0zRHUsQi55MkF4aXM9M0RhLEIueTNBeD0KaXM9 M0RmLEIueTRBeGlzPTNEbCxkMy5yZWJpbmQoQix0LCJkZWZpbmVkIiwic2l6ZSIsImNsaXBWb3Jv bm9pIiwiaW50ZXJwb2xhPQp0ZSIpLEIub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmlu ZChCKSxCLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyh5PTNEZSx0 LngoZSksci54KGUpLEIpOnl9LEIueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0K ZW5ndGg/KGI9M0RlLHQueShlKSxyLnkoZSksQik6Yn0sQi5tYXJnaW49M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhwLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZp bmVkIj9lLnRvcDpwLnRvcCxwLnJpZ2h0PTNEdHlwZW9mIGUucmk9CmdodCE9M0QidW5kZWZpbmVk Ij9lLnJpZ2h0OnAucmlnaHQscC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5l ZD0KIj9lLmJvdHRvbTpwLmJvdHRvbSxwLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmlu ZWQiP2UubGVmdDpwLmxlZnQsQik6PQpwfSxCLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuaGVpZ2h0PTNEZnU9Cm5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQik6bX0sQi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3Jl dHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLnV0aWxzLmdldENvbG9yKHQpLGMuY29sb3Io dyksQik6d30sQi5zaG93TGVnZW5kPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oRT0zRGUsQik6RX0sQi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KFQ9M0RlLEIpOlR9LEIudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhOPTNEZSxCKTpOfSxCLm5vRGF0YT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KF89M0RlLEIpOl99LEIuYnJ1c2hFeHRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsQik9Cjp4fSxCfSxl Lm1vZGVscy5tdWx0aUJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNo KGZ1bmN0aW9uKD0KZSl7dmFyIGc9M0RuLXQubGVmdC10LnJpZ2h0LEM9M0RyLXQudG9wLXQuYm90 dG9tLGs9M0RkMy5zZWxlY3QodGhpcyk7ZCYmZS5sPQplbmd0aCYmKGQ9M0Rbe3ZhbHVlczplWzBd LnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6MCxzZXJpZXM6ZS49CnNlcmll cyxzaXplOi4wMX19KX1dKSxjJiYoZT0zRGQzLmxheW91dC5zdGFjaygpLm9mZnNldChoKS52YWx1 ZXMoZnVuY3Rpb24oZT0KKXtyZXR1cm4gZS52YWx1ZXN9KS55KGEpKCFlLmxlbmd0aCYmZD9kOmUp KSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlPQpzLmZvckVhY2goZnVuY3Rpb24oZSl7 ZS5zZXJpZXM9M0R0fSl9KSxjJiZlWzBdLnZhbHVlcy5tYXAoZnVuY3Rpb24odCxuKXt2YXI9CiBy PTNEMCxpPTNEMDtlLm1hcChmdW5jdGlvbihlKXt2YXIgdD0zRGUudmFsdWVzW25dO3Quc2l6ZT0z RE1hdGguYWJzKHQueSksdD0KLnk8MD8odC55MT0zRGksaS09M0R0LnNpemUpOih0LnkxPTNEdC5z aXplK3Iscis9M0R0LnNpemUpfSl9KTt2YXIgTD0zRHkmJmI/PQpbXTplLm1hcChmdW5jdGlvbihl KXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6dShlLHQpLHk6YSg9 CmUsdCkseTA6ZS55MCx5MTplLnkxfX0pfSk7aS5kb21haW4oeXx8ZDMubWVyZ2UoTCkubWFwKGZ1 bmN0aW9uKGUpe3JldHVybiBlLj0KeH0pKS5yYW5nZUJhbmRzKHd8fFswLGddLFMpLHMuZG9tYWlu KGJ8fGQzLmV4dGVudChkMy5tZXJnZShMKS5tYXAoZnVuY3Rpb24oPQplKXtyZXR1cm4gYz9lLnk+ MD9lLnkxOmUueTErZS55OmUueX0pLmNvbmNhdChmKSkpLnJhbmdlKEV8fFtDLDBdKSxpLmRvbWFp big9CilbMF09M0Q9M0Q9M0RpLmRvbWFpbigpWzFdJiYoaS5kb21haW4oKVswXT9pLmRvbWFpbihb aS5kb21haW4oKVswXS1pLmRvbWFpbj0KKClbMF0qLjAxLGkuZG9tYWluKClbMV0raS5kb21haW4o KVsxXSouMDFdKTppLmRvbWFpbihbLTEsMV0pKSxzLmRvbWFpbigpWzBdPQo9M0Q9M0Q9M0RzLmRv bWFpbigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5kb21haW4oKVswXStzLmRvbWFp bigpWzA9Cl0qLjAxLHMuZG9tYWluKClbMV0tcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihb LTEsMV0pKSxUPTNEVHx8aSxOPTNETnx8cz0KO3ZhciBBPTNEay5zZWxlY3RBbGwoImcubnYtd3Jh cC5udi1tdWx0aWJhciIpLmRhdGEoW2VdKSxPPTNEQS5lbnRlcigpLmFwcGVuPQpkKCJnIikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGliYXIiKSxNPTNETy5hcHBlbmQoImRlZnMi KSxfPTNETy49CmFwcGVuZCgiZyIpLEQ9M0RBLnNlbGVjdCgiZyIpO18uYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1ncm91cHMiKSxBLmF0dD0KcigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr dC5sZWZ0KyIsIit0LnRvcCsiKSIpLE0uYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoPQoiaWQiLCJu di1lZGdlLWNsaXAtIitvKS5hcHBlbmQoInJlY3QiKSxBLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0i K28rIiByZWN0Iik9Ci5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0IixDKSxELmF0dHIoImNs aXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNsaXAtIj0KK28rIikiOiIiKTt2YXIgUD0zREEuc2Vs ZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0PQppb24o ZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KTtQLmVudGVyKCkuYXBwZW5kKCJn Iikuc3R5bGUoInN0cm89CmtlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFl LTYpLFAuZXhpdCgpLnNlbGVjdEFsbCgicmVjdC5udi1iYT0KciIpLmF0dHIoInkiLGZ1bmN0aW9u KGUpe3JldHVybiBjP04oZS55MCk6TigwKX0pLmF0dHIoImhlaWdodCIsMCkucmVtb3ZlKCksPQpQ LmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0 fSkuY2xhc3NlZCgiaG92ZXI9CiIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KS5zdHlsZSgi ZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSkucz0KdHlsZSgic3Ryb2tlIixmdW5j dGlvbihlLHQpe3JldHVybiBwKGUsdCl9KSxQLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5 PQpsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBIPTNEUC5zZWxlY3RBbGwoInJlY3QubnYtYmFy IikuZGF0YShmdW5jdGlvbih0KXs9CnJldHVybiBkJiYhZS5sZW5ndGg/ZC52YWx1ZXM6dC52YWx1 ZXN9KTtILmV4aXQoKS5yZW1vdmUoKTt2YXIgQj0zREguZW50ZXIoKT0KLmFwcGVuZCgicmVjdCIp LmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0 aXZlPQoiOiJudi1iYXIgcG9zaXRpdmUifSkuYXR0cigieCIsZnVuY3Rpb24odCxuLHIpe3JldHVy biBjPzA6cippLnJhbmdlQmFuZCgpL2U9Ci5sZW5ndGh9KS5hdHRyKCJ5IixmdW5jdGlvbihlKXty ZXR1cm4gTihjP2UueTA6MCl9KS5hdHRyKCJoZWlnaHQiLDApLmF0dHIoIj0Kd2lkdGgiLGkucmFu Z2VCYW5kKCkvKGM/MTplLmxlbmd0aCkpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4iPQp0cmFuc2xhdGUoIitpKHUoZSx0KSkrIiwwKSJ9KTtILnN0eWxlKCJmaWxsIixmdW5j dGlvbihlLHQsbil7cmV0dXJuIHAoZSxuLHQ9Cil9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihl LHQsbil7cmV0dXJuIHAoZSxuLHQpfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpbz0Kbih0LG4pe2Qz LnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLHguZWxlbWVudE1vdXNlb3Zlcih7dmFs dWU6YSh0LG4pPQoscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltpKHUodCxuKSkraS5y YW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2U9CnJpZXMrLjUpL2UubGVuZ3RoLHMoYSh0LG4p KyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZT0KOmQzLmV2 ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNz ZWQoImhvdmVyIiwhPQoxKSx4LmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQs c2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6biw9CnNlcmllc0luZGV4OnQuc2VyaWVzLGU6 ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXt4LmVsZW1lbnRDbGljaz0KKHt2 YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltpKHUodCxuKSkraS5y YW5nZUJhbmQoKSooYz9lPQoubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLHMoYSh0LG4p KyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW49CmRleDp0LnNlcmllcyxlOmQzLmV2 ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aT0K b24odCxuKXt4LmVsZW1lbnREYmxDbGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVb dC5zZXJpZXNdLHBvczpbaSh1PQoodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQu c2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjA9CikpXSxwb2ludEluZGV4Om4s c2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlv bj0KKCl9KSxILmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8ibnYt YmFyIG5lZ2F0aXZlIjoibnYtYmFyPQogcG9zaXRpdmUifSkuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitpKHUoZSx0KSkrIiw9CjApIn0pLHYmJihtfHwo bT0zRGUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksSC5zdHlsZSgiZmlsbCIsZnVuY3Rpb24o ZSx0LD0Kbil7cmV0dXJuIGQzLnJnYih2KGUsdCkpLmRhcmtlcihtLm1hcChmdW5jdGlvbihlLHQp e3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0PQppb24oZSx0KXtyZXR1cm4hbVt0XX0pW25dKS50b1N0 cmluZygpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHU9CnJuIGQzLnJnYih2 KGUsdCkpLmRhcmtlcihtLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0 aW9uKGUsdD0KKXtyZXR1cm4hbVt0XX0pW25dKS50b1N0cmluZygpfSkpLGM/SC5hdHRyKCJ5Iixm dW5jdGlvbihlLHQpe3JldHVybiBzKGM/ZS55PQoxOjApfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlv bihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGUueSsoYz9lLnkwOjA9CikpLXMoYz9l LnkwOjApKSwxKX0pLmF0dHIoIngiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGM/MDp0LnNlcmllcypp LnJhbmdlQmFuZD0KKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS8oYz8x OmUubGVuZ3RoKSk6SC5hdHRyKCJ4IixmdW5jdGlvPQpuKHQsbil7cmV0dXJuIHQuc2VyaWVzKmku cmFuZ2VCYW5kKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS89CmUubGVu Z3RoKS5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD9zKDApOnMoMCktcyhh KGUsdCkpPDE/cygwKT0KLTE6cyhhKGUsdCkpfHwwfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbihl LHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhzKGEoPQplLHQpKS1zKDApKSwxKXx8MH0pLFQ9 M0RpLmNvcHkoKSxOPTNEcy5jb3B5KCl9KSxDfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm89CnR0 b206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZDMuc2NhbGUub3JkaW5hbCgpLHM9M0Rk My5zY2FsZS5saW5lYXIoKT0KLG89M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSx1PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUueX0sZj0z RFswXSxsPTNEITAsYz0zRCExLGg9M0QiemVybyIscD0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCk9 CixkPTNEITEsdj0zRG51bGwsbSxnPTNEMTIwMCx5LGIsdyxFLFM9M0QuMSx4PTNEZDMuZGlzcGF0 Y2goImNoYXJ0Q2xpY2siLCJlbD0KZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1l bnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxULE47cmV0PQp1cm4gQy5kaXNwYXRjaD0z RHgsQy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEMpLEMueD0zRGZ1bmN0aW9u KGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEMpOnV9LEMueT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGE9M0RlLEMpOmF9LEMubWFyZ2luPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEPQp0eXBlb2YgZS50b3Ah PTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1 bmRlZmk9Cm5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0z RCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYj0Kb3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9 M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEMpOnR9LEMud2lkdGg9M0RmPQp1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxDKTpufSxDLmhlaWdodD0zRGZ1bmN0aW9u KGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLEMpOnJ9LEMueFNjYWxlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oaT0zRGUsQyk6aX0sQy55U2NhbGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsQyk6PQpzfSxDLnhE b21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsQyk6eX0s Qy55RG9tYWluPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUs Qyk6Yn0sQy54UmFuZ2U9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3 PTNEZSxDKTp3fSxDLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5n dGg/KEU9M0RlLEMpOkV9LEMuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGY9M0RlPQosQyk6Zn0sQy5zdGFja2VkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMuc3RhY2s9Ck9mZnNldD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxDKTpofSxDLmNsaXBFZGdlPTNEZnVuYz0KdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQyk6bH0sQy5jb2xvcj0zRGZ1bmN0 aW9uKHQpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLnV0aWxzLmdldENvbG9yKHQp LEMpOnB9LEMuYmFyQ29sb3I9M0RmdW5jdGlvbih0KXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3Ro Pyh2PTNEZS51dGlscy5nZXRDb2xvcih0KSxDKTp2fSxDLmRpc2FibGVkPTNEZnVuY3Rpb24oZT0K KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQyk6bX0sQy5pZD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KG89M0RlLEMpOm99LEMuaGlkZWFibGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGU9CixDKTpkfSxDLmRlbGF5PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLEMpOmd9LEMuZ3JvdXBT cD0KYWNpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsQyk6 U30sQ30sZS5tb2RlbHMubXVsdGlCPQphckNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBBKGUp e3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGI9M0RkMy5zZWw9CmVjdCh0aGlzKSxrPTNE dGhpcyxPPTNEKHV8fHBhcnNlSW50KGIuc3R5bGUoIndpZHRoIikpfHw5NjApLW8ubGVmdC1vLnJp Z2h0LD0KTT0zRChhfHxwYXJzZUludChiLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5i b3R0b207QS51cGRhdGU9M0RmdW5jdGlvPQpuKCl7Yi5jYWxsKEEpfSxBLmNvbnRhaW5lcj0zRHRo aXMsUy5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS49CmRpc2FibGVkfSk7 aWYoIXgpe3ZhciBfO3g9M0R7fTtmb3IoXyBpbiBTKVNbX11pbnN0YW5jZW9mIEFycmF5P3hbX109 M0RTW19dLj0Kc2xpY2UoMCk6eFtfXT0zRFNbX119aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPQpzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEQ9M0Ri LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW1RdKTtyZXR1cm4gRC5lbnQ9CmVyKCkuYXBw ZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43 ZW0iKS5zdHlsZT0KKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEQuYXR0cigieCIsby5sZWZ0K08v MikuYXR0cigieSIsby50b3ArTS8yKS50ZXh0KGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGV9KSxBfWIu c2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz0zRHQueFNjYWxlKCksRT0KPTNEdC55 U2NhbGUoKTt2YXIgUD0zRGIuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGlCYXJXaXRoTGVn ZW5kIikuZGF0YShbPQplXSksSD0zRFAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtd3JhcCBudi1tdWx0aUJhcldpdGhMZWc9CmVuZCIpLmFwcGVuZCgiZyIpLEI9M0RQ LnNlbGVjdCgiZyIpO0guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aT0KcyIp LEguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxILmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwiPQpudi1iYXJzV3JhcCIpLEguYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1sZWdlbmRXcmFwIiksSC5hcHBlbmQoImciKS5hdHQ9CnIoImNsYXNzIiwibnYtY29udHJv bHNXcmFwIiksYyYmKGkud2lkdGgoTy1DKCkpLHQuYmFyQ29sb3IoKSYmZS5mb3JFYWNoKGZ1bj0K Y3Rpb24oZSx0KXtlLmNvbG9yPTNEZDMucmdiKCIjY2NjIikuZGFya2VyKHQqMS41KS50b1N0cmlu ZygpfSksQi5zZWxlY3QoIi5uPQp2LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLG8udG9w IT0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCksTT0KPTNEKGF8fHBhcnNlSW50KGIu c3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbSksQi5zZWxlY3QoIi5udi1sZWdl PQpuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDKCkrIiwiKyAtby50b3Ar IikiKSk7aWYobCl7dmFyIGo9M0Q9Clt7a2V5OiJHcm91cGVkIixkaXNhYmxlZDp0LnN0YWNrZWQo KX0se2tleToiU3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tlZCgpfT0KXTtzLndpZHRoKEMoKSku Y29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksQi5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAi KS5kPQphdHVtKGopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1vLnRvcCsiKSIp LmNhbGwocyl9UC5hdHRyKCJ0cmFuc2Y9Cm9ybSIsInRyYW5zbGF0ZSgiK28ubGVmdCsiLCIrby50 b3ArIikiKSxkJiZCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoIj0KdHJhbnNmb3JtIiwi dHJhbnNsYXRlKCIrTysiLDApIiksdC5kaXNhYmxlZChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4g ZS5kaXNhPQpibGVkfSkpLndpZHRoKE8pLmhlaWdodChNKS5jb2xvcihlLm1hcChmdW5jdGlvbihl LHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCk9Cn0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVy biFlW25dLmRpc2FibGVkfSkpO3ZhciBGPTNEQi5zZWxlY3QoIi5udi1iYXJzVz0KcmFwIikuZGF0 dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7Ri5jYWxsKHQpO2lm KGgpe24uc2NhPQpsZSh3KS50aWNrcyhPLzEwMCkudGlja1NpemUoLU0sMCksQi5zZWxlY3QoIi5u di14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm09CiIsInRyYW5zbGF0ZSgwLCIrRS5yYW5nZSgp WzBdKyIpIiksQi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pO3ZhciBJPQo9M0RCLnNl bGVjdCgiLm52LXgubnYtYXhpcyA+IGciKS5zZWxlY3RBbGwoImciKTtJLnNlbGVjdEFsbCgibGlu ZSwgdGV4dCIpLnM9CnR5bGUoIm9wYWNpdHkiLDEpO2lmKG0pe3ZhciBxPTNEZnVuY3Rpb24oZSx0 KXtyZXR1cm4idHJhbnNsYXRlKCIrZSsiLCIrdCsiKT0KIn0sUj0zRDUsVT0zRDE3O0kuc2VsZWN0 QWxsKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuPQogcSgw LG4lMj0zRD0zRDA/UjpVKX0pO3ZhciB6PTNEZDMuc2VsZWN0QWxsKCIubnYteC5udi1heGlzIC5u di13cmFwIGcgZyB0ZXg9CnQiKVswXS5sZW5ndGg7Qi5zZWxlY3RBbGwoIi5udi14Lm52LWF4aXMg Lm52LWF4aXNNYXhNaW4gdGV4dCIpLmF0dHIoInRyYW5zZj0Kb3JtIixmdW5jdGlvbihlLHQpe3Jl dHVybiBxKDAsdD0zRD0zRD0zRDB8fHolMiE9M0Q9M0QwP1U6Uil9KX12JiZJLmZpbHRlcihmPQp1 bmN0aW9uKHQsbil7cmV0dXJuIG4lTWF0aC5jZWlsKGVbMF0udmFsdWVzLmxlbmd0aC8oTy8xMDAp KSE9M0Q9M0QwfSkuc2VsZWM9CnRBbGwoInRleHQsIGxpbmUiKS5zdHlsZSgib3BhY2l0eSIsMCks ZyYmSS5zZWxlY3RBbGwoIi50aWNrIHRleHQiKS5hdHRyKCJ0cj0KYW5zZm9ybSIsInJvdGF0ZSgi K2crIiAwLDApIikuc3R5bGUoInRleHQtYW5jaG9yIixnPjA/InN0YXJ0IjoiZW5kIiksQi5zZWxl PQpjdCgiLm52LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIHRleHQiKS5z dHlsZSgib3BhY2l0eSIsMSl9cCY9CiYoci5zY2FsZShFKS50aWNrcyhNLzM2KS50aWNrU2l6ZSgt TywwKSxCLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLD0KaS5kaXNwYXRjaC5vbigi c3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe1M9M0RlLE4uc3RhdGVDaGFuZ2UoUyksQS51cGRhdGUo KX0pPQoscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsbil7aWYoIWUuZGlz YWJsZWQpcmV0dXJuO2o9M0RqLm1hcCg9CmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPTNE ITAsZX0pLGUuZGlzYWJsZWQ9M0QhMTtzd2l0Y2goZS5rZXkpe2Nhc2UiRz0Kcm91cGVkIjp0LnN0 YWNrZWQoITEpO2JyZWFrO2Nhc2UiU3RhY2tlZCI6dC5zdGFja2VkKCEwKX1TLnN0YWNrZWQ9M0R0 LnN0YWNrPQplZCgpLE4uc3RhdGVDaGFuZ2UoUyksQS51cGRhdGUoKX0pLE4ub24oInRvb2x0aXBT aG93IixmdW5jdGlvbihlKXt5JiZMKGUsay49CnBhcmVudE5vZGUpfSksTi5vbigiY2hhbmdlU3Rh dGUiLGZ1bmN0aW9uKG4pe3R5cGVvZiBuLmRpc2FibGVkIT0zRCJ1bmRlZmluZT0KZCImJihlLmZv ckVhY2goZnVuY3Rpb24oZSx0KXtlLmRpc2FibGVkPTNEbi5kaXNhYmxlZFt0XX0pLFMuZGlzYWJs ZWQ9M0RuLmRpPQpzYWJsZWQpLHR5cGVvZiBuLnN0YWNrZWQhPTNEInVuZGVmaW5lZCImJih0LnN0 YWNrZWQobi5zdGFja2VkKSxTLnN0YWNrZWQ9M0Q9Cm4uc3RhY2tlZCksQS51cGRhdGUoKX0pfSks QX12YXIgdD0zRGUubW9kZWxzLm11bHRpQmFyKCksbj0zRGUubW9kZWxzLmF4aXMoKT0KLHI9M0Rl Lm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQo KSxvPTNEe3RvcDozPQowLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0OjYwfSx1PTNEbnVsbCxhPTNE bnVsbCxmPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSw9Cmw9M0QhMCxjPTNEITAsaD0zRCEwLHA9 M0QhMCxkPTNEITEsdj0zRCEwLG09M0QhMSxnPTNEMCx5PTNEITAsYj0zRGZ1bmN0aW9uKD0KZSx0 LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBvbiAiK3QrIjwvcD4ifSx3 LEUsUz0zRHtzdGFja2VkPQo6ITF9LHg9M0RudWxsLFQ9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixO PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHQ9CmlwSGlkZSIsInN0YXRlQ2hhbmdl IiwiY2hhbmdlU3RhdGUiKSxDPTNEZnVuY3Rpb24oKXtyZXR1cm4gbD8xODA6MH0saz0zRDA7dD0K LnN0YWNrZWQoITEpLG4ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KS5oaWdobGlnaHRa ZXJvKCEwKS5zaG93TWF4TWluPQooITEpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9 KSxyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWE9CnQoZDMuZm9ybWF0KCIsLjFm IikpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBMPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9z Wz0KMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0z RG4udGlja0Zvcm1hdCgpKHQueCgpPQooaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50aWNr Rm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPQo9M0RiKGkuc2VyaWVzLmtl eSxhLGYsaSxBKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8ibiI6InMiLG51bGws cyk9Cn07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVu Y3Rpb24oZSl7ZS5wb3M9M0RbZS5wbz0Kc1swXStvLmxlZnQsZS5wb3NbMV0rby50b3BdLE4udG9v bHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvPQp1dC50b29sdGlwIixm dW5jdGlvbihlKXtOLnRvb2x0aXBIaWRlKGUpfSksTi5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9u KCl7eSY9CiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQS5kaXNwYXRjaD0zRE4sQS5tdWx0aWJhcj0z RHQsQS5sZWdlbmQ9M0RpLEEueEF4aXM9Cj0zRG4sQS55QXhpcz0zRHIsZDMucmViaW5kKEEsdCwi eCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZT0KIiwiZm9yY2VYIiwi Zm9yY2VZIiwiY2xpcEVkZ2UiLCJpZCIsInN0YWNrZWQiLCJzdGFja09mZnNldCIsImRlbGF5Iiwi YmFyQ29sPQpvciIsImdyb3VwU3BhY2luZyIpLEEub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1 bmMuYmluZChBKSxBLm1hcmdpbj0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KG8udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOj0Kby50b3Asby5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6by5yaWdodCxvLmJv dHRvbT0zRHR5PQpwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm8uYm90dG9t LG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInU9Cm5kZWZpbmVkIj9lLmxlZnQ6by5sZWZ0LEEp Om99LEEud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyh1PTNE ZSxBKTp1fSxBLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh PTNEZSxBKTphfSxBPQouY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2w9Cm9yKGYpLEEpOmZ9LEEuc2hvd0NvbnRy b2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEEpOj0KbH0s QS5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Rl LEEpOmN9LEEuc2hvd1hBPQp4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oaD0zRGUsQSk6aH0sQS5zaG93WUF4aXM9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhwPTNEZSxBKTpwfSxBLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpez0K cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIp LEEpOmR9LEEucmVkdWNlWFRpPQpja3M9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odj0zRGUsQSk6dn0sQS5yb3RhdGVMYWJlbHM9M0RmdW49CmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhnPTNEZSxBKTpnfSxBLnN0YWdnZXJMYWJlbHM9M0RmdW5jdGlvbihl KT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxBKTptfSxBLnRvb2x0aXA9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhiPTNEZSxBKTpifSxBLnRvb2x0aXBz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9Cj0zRGUsQSk6eX0sQS50 b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNE ZSxBKT0KOmJ9LEEuc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Uz0zRGUsQSk6U30sQS5kZWZhdWx0U3RhPQp0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh4PTNEZSxBKTp4fSxBLm5vRGF0YT0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KFQ9M0RlLEEpOlR9LEEudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rp b24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsQSk6a30sQX0sZS5tb2RlbHMu bXVsdGlCYXJIb3Jpem9udGFsPTNEZnVuY3RpPQpvbigpe2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUu ZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQseT0zRHI9Ci10LnRvcC10 LmJvdHRvbSxDPTNEZDMuc2VsZWN0KHRoaXMpO3AmJihlPTNEZDMubGF5b3V0LnN0YWNrKCkub2Zm c2V0KCJ6ZXJvIj0KKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkueShhKShl KSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52PQphbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUp e2Uuc2VyaWVzPTNEdH0pfSkscCYmZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsbik9Cnt2YXIg cj0zRDAsaT0zRDA7ZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnZhbHVlc1tuXTt0LnNpemU9 M0RNYXRoLmFicyh0Lj0KeSksdC55PDA/KHQueTE9M0RpLXQuc2l6ZSxpLT0zRHQuc2l6ZSk6KHQu eTE9M0RyLHIrPTNEdC5zaXplKX0pfSk7dmFyIGs9M0RiPQomJnc/W106ZS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0KSw9Cnk6 YShlLHQpLHkwOmUueTAseTE6ZS55MX19KX0pO3MuZG9tYWluKGJ8fGQzLm1lcmdlKGspLm1hcChm dW5jdGlvbihlKXtyZXR1cj0KbiBlLnh9KSkucmFuZ2VCYW5kcyhFfHxbMCx5XSwuMSksby5kb21h aW4od3x8ZDMuZXh0ZW50KGQzLm1lcmdlKGspLm1hcChmdW5jPQp0aW9uKGUpe3JldHVybiBwP2Uu eT4wP2UueTErZS55OmUueTE6ZS55fSkuY29uY2F0KGYpKSksZCYmIXA/by5yYW5nZShTfHxbby49 CmRvbWFpbigpWzBdPDA/bTowLGktKG8uZG9tYWluKClbMV0+MD9tOjApXSk6by5yYW5nZShTfHxb MCxpXSksVD0zRFR8fHMsTj0zRD0KTnx8ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKG8uZG9tYWlu KCkpLnJhbmdlKFtvKDApLG8oMCldKTt2YXIgTD0zRGQzLnNlbGVjPQp0KHRoaXMpLnNlbGVjdEFs bCgiZy5udi13cmFwLm52LW11bHRpYmFySG9yaXpvbnRhbCIpLmRhdGEoW2VdKSxBPTNETC5lbnRl cig9CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGliYXJI b3Jpem9udGFsIiksTz0zREEuYXBwZT0KbmQoImRlZnMiKSxNPTNEQS5hcHBlbmQoImciKSxfPTNE TC5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiPQpudi1ncm91cHMiKSxM LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIg RD0zREw9Ci5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi5udi1ncm91cCIpLmRhdGEo ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bj0KY3Rpb24oZSx0KXtyZXR1cm4gdH0pO0QuZW50ZXIo KS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0PQp5bGUoImZpbGwt b3BhY2l0eSIsMWUtNiksRC5leGl0KCkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHls ZSgiZmlsbC09Cm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLEQuYXR0cigiY2xhc3MiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcj0KaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixm dW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlKCJmaWxsIixmdW5jdGlvPQpuKGUsdCl7 cmV0dXJuIGwoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwoZSx0 KX0pLEQuc3R5bGU9Cigic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC43 NSk7dmFyIFA9M0RELnNlbGVjdEFsbCgiZy5udi1iYT0KciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzfSk7UC5leGl0KCkucmVtb3ZlKCk7dmFyIEg9M0RQLmVudGVyKCkuPQphcHBl bmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4idHJhbnNsYXRl KCIrTihwP3QueTA6MCk9CisiLCIrKHA/MDpyKnMucmFuZ2VCYW5kKCkvZS5sZW5ndGgrcyh1KHQs bikpKSsiKSJ9KTtILmFwcGVuZCgicmVjdCIpLmF0dHIoIj0Kd2lkdGgiLDApLmF0dHIoImhlaWdo dCIscy5yYW5nZUJhbmQoKS8ocD8xOmUubGVuZ3RoKSksUC5vbigibW91c2VvdmVyIixmdW5jPQp0 aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCkseC5lbGVtZW50TW91 c2VvdmVyKHt2YWx1ZTphKHQ9CixuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W28o YSh0LG4pKyhwP3QueTA6MCkpLHModSh0LG4pKStzLnJhbmdlQj0KYW5kKCkqKHA/ZS5sZW5ndGgv Mjp0LnNlcmllcysuNSkvZS5sZW5ndGhdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmll PQpzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3Qo dGhpcykuY2xhc3NlZCgiaG92ZXI9CiIsITEpLHguZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTphKHQs bikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9pbnRJbmRleD0KOm4sc2VyaWVzSW5kZXg6 dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oImNsaWNrIixmdW5jdGlvbih0LG4pe3guZWxlbWVu dENsPQppY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3Mo dSh0LG4pKStzLnJhbmdlQmFuZCgpKig9CnA/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5n dGgsbyhhKHQsbikrKHA/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZT0Kc0luZGV4OnQuc2Vy aWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGlj ayIsZnVuPQpjdGlvbih0LG4pe3guZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQsbikscG9pbnQ6 dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOls9CnModSh0LG4pKStzLnJhbmdlQmFuZCgpKihwP2Uu bGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKyhwP3QueT0KMDowKSldLHBv aW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3Rv cFByb3BhZ2F0PQppb24oKX0pLEguYXBwZW5kKCJ0ZXh0IiksZCYmIXA/KFAuc2VsZWN0KCJ0ZXh0 IikuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW89Cm4oZSx0KXtyZXR1cm4gYShlLHQpPDA/ImVu ZCI6InN0YXJ0In0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCkvKGUubGVuZ3RoKjIpKT0KLmF0dHIo ImR5IiwiLjMyZW0iKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcoYShlLHQpKX0pLFAuc2Vs ZWN0KCJ0ZXh0IikuPQphdHRyKCJ4IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8tNDpv KGEoZSx0KSktbygwKSs0fSkpOlAuc2VsZWN0QWxsKCI9CnRleHQiKS50ZXh0KCIiKSx2JiYhcD8o SC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudi1iYXItbGFiZWwiLCEwKSxQLnNlbGVjdD0KKCJ0 ZXh0Lm52LWJhci1sYWJlbCIpLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbihlLHQpe3JldHVy biBhKGUsdCk8MD8ic3RhPQpydCI6ImVuZCJ9KS5hdHRyKCJ5IixzLnJhbmdlQmFuZCgpLyhlLmxl bmd0aCoyKSkuYXR0cigiZHkiLCIuMzJlbSIpLnRleHQoZnU9Cm5jdGlvbihlLHQpe3JldHVybiB1 KGUsdCl9KSxQLnNlbGVjdCgidGV4dC5udi1iYXItbGFiZWwiKS5hdHRyKCJ4IixmdW5jdGlvbj0K KGUsdCl7cmV0dXJuIGEoZSx0KTwwP28oMCktbyhhKGUsdCkpKzQ6LTR9KSk6UC5zZWxlY3RBbGwo InRleHQubnYtYmFyLWxhYmVsPQoiKS50ZXh0KCIiKSxQLmF0dHIoImNsYXNzIixmdW5jdGlvbihl LHQpe3JldHVybiBhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjo9CiJudi1iYXIgcG9zaXRpdmUi fSksYyYmKGh8fChoPTNEZS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSxQLnN0eWxlKCJmaWxs Ij0KLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKGMoZSx0KSkuZGFya2VyKGgubWFwKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIHR9PQopLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFoW3Rd fSlbbl0pLnRvU3RyaW5nKCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGk9Cm9uKGUsdCxuKXtyZXR1 cm4gZDMucmdiKGMoZSx0KSkuZGFya2VyKGgubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KS5m aWx0ZT0KcihmdW5jdGlvbihlLHQpe3JldHVybiFoW3RdfSlbbl0pLnRvU3RyaW5nKCl9KSkscD9Q LmF0dHIoInRyYW5zZm9ybSIsZnVuY3RpPQpvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGUu eTEpKyIsIitzKHUoZSx0KSkrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cig9CiJ3aWR0aCIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMobyhhKGUsdCkrZS55MCktbyhlLnkwKSl9KS5hdHRy KCJoZWlnaD0KdCIscy5yYW5nZUJhbmQoKSk6UC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQs bil7cmV0dXJuInRyYW5zbGF0ZSgiKyhhKHQsPQpuKTwwP28oYSh0LG4pKTpvKDApKSsiLCIrKHQu c2VyaWVzKnMucmFuZ2VCYW5kKCkvZS5sZW5ndGgrcyh1KHQsbikpKSsiKSJ9KS49CnNlbGVjdCgi cmVjdCIpLmF0dHIoImhlaWdodCIscy5yYW5nZUJhbmQoKS9lLmxlbmd0aCkuYXR0cigid2lkdGgi LGZ1bmN0aW9uKD0KZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMobyhhKGUsdCkpLW8oMCkp LDEpfSksVD0zRHMuY29weSgpLE49M0RvLmNvcHkoPQopfSksQ312YXIgdD0zRHt0b3A6MCxyaWdo dDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9M0RNYXRoLmZsb289CnIoTWF0 aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5vcmRpbmFsKCksbz0zRGQzLnNjYWxlLmxpbmVh cigpLHU9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZS55fSxmPTNEWzBdLGw9M0RlLnV0aWxzLmRlZmF1bHRDPQpvbG9yKCksYz0zRG51bGwsaCxwPTNE ITEsZD0zRCExLHY9M0QhMSxtPTNENjAsZz0zRGQzLmZvcm1hdCgiLC4yZiIpLHk9M0QxMjA9CjAs Yix3LEUsUyx4PTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVt ZW50RGJsQ2xpY2siLCJlbD0KZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxULE47 cmV0dXJuIEMuZGlzcGF0Y2g9M0R4LEMub3B0aW9ucz0zRGUuPQp1dGlscy5vcHRpb25zRnVuYy5i aW5kKEMpLEMueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSw9 CkMpOnV9LEMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxD KTphfSxDLm1hcmdpbj0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQu dG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wPQo6dC50b3AsdC5yaWdodD0z RHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0z RHQ9CnlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVm dD0zRHR5cGVvZiBlLmxlZnQhPTNEIj0KdW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEMpOnR9LEMu d2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhuPTNEZSxDKTpu fSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxD KTpyfSw9CkMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9 M0RlLEMpOnN9LEMueVNjYWxlPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obz0zRGUsQyk6b30sQy54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRz Lmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW49Cmd0aD8odz0zRGUsQyk6d30sQy54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQyk6RT0KfSxDLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxDKTpTfSxDLmZvcmNlWT0zRGZ1PQpuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEMpOmZ9LEMuc3RhY2tlZD0zRGZ1bmN0 aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEMpOnB9LEMuY29sb3I9M0Rm dW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhsPTNEZS51dGlscy5nZXRDb2xv cih0KSxDKTpsfSxDLmJhckNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50PQpzLmxl bmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6Y30sQy5kaXNhYmxlZD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KGg9M0RlLEMpOmh9LEMuaWQ9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRD0KZSxDKTppfSxDLmRlbGF5PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEMpOnl9LEMuc2hvd1ZhPQps dWVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEMpOmR9LEMu c2hvd0JhckxhYmVscz0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9 M0RlLEMpOnZ9LEMudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhnPTNEZSxDKTpnfSxDLnZhbHVlUGFkZGluZz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh PQpyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEMpOm19LEN9LGUubW9kZWxzLm11bHRpQmFySG9yaXpv bnRhbENoYXJ0PTNEZnVuY3Rpb249Cigpe2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXt2YXIgZD0zRGQzLnNlbGVjdCh0aGlzKSxtPTNEdGhpcz0KLFQ9M0QodXx8cGFyc2VJ bnQoZC5zdHlsZSgid2lkdGgiKSl8fDk2MCktby5sZWZ0LW8ucmlnaHQsaz0zRChhfHxwYXJzZUlu dChkPQouc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbTtDLnVwZGF0ZT0zRGZ1 bmN0aW9uKCl7ZC5jYWxsKEMpfSxDLmM9Cm9udGFpbmVyPTNEdGhpcyxiLmRpc2FibGVkPTNEZS5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXcpez0KdmFyIEw7dz0zRHt9 O2ZvcihMIGluIGIpYltMXWluc3RhbmNlb2YgQXJyYXk/d1tMXT0zRGJbTF0uc2xpY2UoMCk6d1tM XT0zRGJbPQpMXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJu IGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCk9Cnt2YXIgQT0zRGQuc2VsZWN0QWxsKCIubnYtbm9E YXRhIikuZGF0YShbRV0pO3JldHVybiBBLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Ij0KKS5hdHRyKCJj bGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFu Y2hvciIsIm1pPQpkZGxlIiksQS5hdHRyKCJ4IixvLmxlZnQrVC8yKS5hdHRyKCJ5IixvLnRvcCtr LzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cn0pLEN9ZC5zZWxlY3RBbGwoIi5udi1ub0Rh dGEiKS5yZW1vdmUoKSxnPTNEdC54U2NhbGUoKSx5PTNEdC55U2NhbGUoKTt2YXIgTz0KPTNEZC5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aUJhckhvcml6b250YWxDaGFydCIpLmRhdGEoW2Vd KSxNPTNETy5lbnRlPQpyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5hcHA9CmVuZCgiZyIpLF89M0RPLnNlbGVjdCgi ZyIpO00uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxNLmFwcD0KZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXplcm9MaW5lPQoiKS5hcHBlbmQoImxpbmUiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtYmFyc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudi1sZWdl bmRXcmFwIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLD0K YyYmKGkud2lkdGgoVC14KCkpLHQuYmFyQ29sb3IoKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7 ZS5jb2xvcj0zRGQzLnJnYigiPQojY2NjIikuZGFya2VyKHQqMS41KS50b1N0cmluZygpfSksXy5z ZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbCg9CmkpLG8udG9wIT0zRGkuaGVp Z2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCksaz0zRChhfHxwYXJzZUludChkLnN0eWxlKCJoZWln aD0KdCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbSksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIiku YXR0cigidHJhbnNmb3JtIiwidHJhPQpuc2xhdGUoIit4KCkrIiwiKyAtby50b3ArIikiKSk7aWYo bCl7dmFyIEQ9M0Rbe2tleToiR3JvdXBlZCIsZGlzYWJsZWQ6dC5zdGE9CmNrZWQoKX0se2tleToi U3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tlZCgpfV07cy53aWR0aCh4KCkpLmNvbG9yKFsiIzQ0 NCIsIj0KIzQ0NCIsIiM0NDQiXSksXy5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bShE KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuPQpzbGF0ZSgwLCIrIC1vLnRvcCsiKSIpLmNhbGwocyl9 Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxlZnQrIiwiK289Ci50b3ArIikiKSx0 LmRpc2FibGVkKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkpLndpZHRoKFQp LmhlaWdodD0KKGspLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGYo ZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pPQp7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSk7dmFy IFA9M0RfLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnU9Cm5jdGlvbihl KXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtQLmNhbGwodCk7aWYoaCl7bi5zY2FsZShnKS50aWNrcyhr LzI0KS50aWNrUz0KaXplKC1ULDApLF8uc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKTt2 YXIgSD0zRF8uc2VsZWN0KCIubnYteC5udi1heGlzPQoiKS5zZWxlY3RBbGwoImciKTtILnNlbGVj dEFsbCgibGluZSwgdGV4dCIpfXAmJihyLnNjYWxlKHkpLnRpY2tzKFQvMTAwKS50aWM9CmtTaXpl KC1rLDApLF8uc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKDAsIitrKyIpIj0KKSxfLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLF8uc2Vs ZWN0KCIubnYtemVyb0xpbmUgbGluZSIpLmF0dHIoIngxPQoiLHkoMCkpLmF0dHIoIngyIix5KDAp KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLC1rKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW49Cmdl IixmdW5jdGlvbihlKXtiPTNEZSxTLnN0YXRlQ2hhbmdlKGIpLEMudXBkYXRlKCl9KSxzLmRpc3Bh dGNoLm9uKCJsZWdlbmRDbD0KaWNrIixmdW5jdGlvbihlLG4pe2lmKCFlLmRpc2FibGVkKXJldHVy bjtEPTNERC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzPQphYmxlZD0zRCEwLGV9KSxlLmRp c2FibGVkPTNEITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQiOnQuc3RhY2tlZCghMSk7YnI9 CmVhaztjYXNlIlN0YWNrZWQiOnQuc3RhY2tlZCghMCl9Yi5zdGFja2VkPTNEdC5zdGFja2VkKCks Uy5zdGF0ZUNoYW5nZShiKSxDLj0KdXBkYXRlKCl9KSxTLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rp b24oZSl7diYmTihlLG0ucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuPQpnZVN0YXRlIixmdW5jdGlv bihuKXt0eXBlb2Ygbi5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlv big9CmUsdCl7ZS5kaXNhYmxlZD0zRG4uZGlzYWJsZWRbdF19KSxiLmRpc2FibGVkPTNEbi5kaXNh YmxlZCksdHlwZW9mIG4uc3RhY2tlZD0KIT0zRCJ1bmRlZmluZWQiJiYodC5zdGFja2VkKG4uc3Rh Y2tlZCksYi5zdGFja2VkPTNEbi5zdGFja2VkKSxDLnVwZGF0ZSgpfSl9PQopLEN9dmFyIHQ9M0Rl Lm1vZGVscy5tdWx0aUJhckhvcml6b250YWwoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1v ZGVscy49CmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxzPTNEZS5tb2Rl bHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxvPQo9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxs ZWZ0OjYwfSx1PTNEbnVsbCxhPTNEbnVsbCxmPTNEZS51dGlscy5kZWZhdWw9CnRDb2xvcigpLGw9 M0QhMCxjPTNEITAsaD0zRCEwLHA9M0QhMCxkPTNEITEsdj0zRCEwLG09M0RmdW5jdGlvbihlLHQs bixyLGkpez0KcmV0dXJuIjxoMz4iK2UrIiAtICIrdCsiPC9oMz4iKyI8cD4iK24rIjwvcD4ifSxn LHksYj0zRHtzdGFja2VkOmR9LHc9M0RudWxsPQosRT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLFM9 M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXQ9CmVDaGFuZ2Ui LCJjaGFuZ2VTdGF0ZSIpLHg9M0RmdW5jdGlvbigpe3JldHVybiBsPzE4MDowfSxUPTNEMDt0LnN0 YWNrZWQoZCksbj0KLm9yaWVudCgibGVmdCIpLnRpY2tQYWRkaW5nKDUpLmhpZ2hsaWdodFplcm8o ITEpLnNob3dNYXhNaW4oITEpLnRpY2tGb3JtYXQoPQpmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHIu b3JpZW50KCJib3R0b20iKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLC4xZiIpKSxzLnU9CnBkYXRl U3RhdGUoITEpO3ZhciBOPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNl dExlZnR8fDApLHU9Cj0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1h dCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KT0KKSxmPTNEci50aWNrRm9ybWF0KCkodC55 KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPTNEbShpLnNlcmllcy5rZXksYSxmLGksPQpDKTtl LnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8iZSI6InciLG51bGwscyl9O3JldHVybiB0 LmRpc3BhdGNoLm9uKCI9CmVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5w b3M9M0RbZS5wb3NbMF0rby5sZWZ0LGUucG9zWzFdK28udD0Kb3BdLFMudG9vbHRpcFNob3coZSl9 KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7PQpT LnRvb2x0aXBIaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7diYmZS50b29s dGlwLmNsZWFudXAoKX0pLEM9Ci5kaXNwYXRjaD0zRFMsQy5tdWx0aWJhcj0zRHQsQy5sZWdlbmQ9 M0RpLEMueEF4aXM9M0RuLEMueUF4aXM9M0RyLGQzLnJlYmluZD0KKEMsdCwieCIsInkiLCJ4RG9t YWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImNsaXBF PQpkZ2UiLCJpZCIsImRlbGF5Iiwic2hvd1ZhbHVlcyIsInNob3dCYXJMYWJlbHMiLCJ2YWx1ZUZv cm1hdCIsInN0YWNrZWQiLCJiYXI9CkNvbG9yIiksQy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kKEMpLEMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxl bmd0aD8oby50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6by50b3Asby5y aWdoPQp0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpvLnJpZ2h0LG8u Ym90dG9tPTNEdHlwZW9mIGUuYm90dG89Cm0hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206by5ib3R0 b20sby5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLj0KbGVmdDpvLmxlZnQs Qyk6b30sQy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNE ZSxDKTp1PQp9LEMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGE9M0RlLEMpOmF9LEMuY29sb3I9M0RmdW49CmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhmPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGYpLEMpOmZ9LD0KQy5zaG93Q29u dHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQyk6bH0s Qy5zaG93TGVnPQplbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0z RGUsQyk6Y30sQy5zaG93WEF4aXM9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhoPTNEZSxDKTpofSxDLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3Vt ZW50cy5sZW5ndGg/KHA9M0RlLEMpOnB9LEMudG9vbHRpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuPQpndGg/KG09M0RlLEMpOm19LEMudG9vbHRpcHM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQyk9Cjp2fSxDLnRvb2x0aXBDb250ZW50PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEMpOm19LEMucz0KdGF0 ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxDKTpifSxDLmRl ZmF1bHRTdGF0ZT0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0Rl LEMpOnd9LEMubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8o RT0zRGUsQyk6RX0sQy50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0K cmd1bWVudHMubGVuZ3RoPyhUPTNEZSxDKTpUfSxDfSxlLm1vZGVscy5tdWx0aUNoYXJ0PTNEZnVu Y3Rpb24oKXtmdW5jdGlvbiBDPQooZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgdT0z RGQzLnNlbGVjdCh0aGlzKSxmPTNEdGhpcztDLnVwZGF0ZT0zRGY9CnVuY3Rpb24oKXt1LmNhbGwo Qyl9LEMuY29udGFpbmVyPTNEdGhpczt2YXIgaz0zRChyfHxwYXJzZUludCh1LnN0eWxlKCJ3aWR0 aD0KIikpfHw5NjApLXQubGVmdC10LnJpZ2h0LEw9M0QoaXx8cGFyc2VJbnQodS5zdHlsZSgiaGVp Z2h0IikpfHw0MDApLXQudG9wLXQuPQpib3R0b20sQT0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3Jl dHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSImJmUueUE9Cnhpcz0zRD0zRDF9KSxP PTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0zRD0zRCJs aW5lIj0KJiZlLnlBeGlzPTNEPTNEMn0pLE09M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEPQoiYmFyIiYmZS55QXhpcz0zRD0zRDF9KSxfPTNEZS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0KPTNEPTNEImJhciIm JmUueUF4aXM9M0Q9M0QyfSksRD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGVkJiZlPQoudHlwZT0zRD0zRCJhcmVhIiYmZS55QXhpcz0zRD0zRDF9KSxQPTNEZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWI9CmxlZCYmZS50eXBlPTNEPTNEImFyZWEiJiZlLnlB eGlzPTNEPTNEMn0pLEg9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZT0KLmRpc2FibGVk JiZlLnlBeGlzPTNEPTNEMX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1 bmN0aW9uKGUsPQp0KXtyZXR1cm57eDplLngseTplLnl9fSl9KSxCPTNEZS5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUE9Cnhpcz0zRD0zRDJ9KS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OmUueD0KLHk6ZS55 fX0pfSk7YS5kb21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKEguY29uY2F0KEIpKSxmdW5jdGlvbihl KXtyZXR1cm4gZS54PQp9KSkucmFuZ2UoWzAsa10pO3ZhciBqPTNEdS5zZWxlY3RBbGwoImcud3Jh cC5tdWx0aUNoYXJ0IikuZGF0YShbZV0pLEY9M0RqLmU9Cm50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIndyYXAgbnZkMyBtdWx0aUNoYXJ0IikuYXBwZW5kKCJnIik7Ri5hcHBlbj0KZCgi ZyIpLmF0dHIoImNsYXNzIiwieCBheGlzIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInkx IGF4aXMiKSxGLmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJ5MiBheGlzIiksRi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsImxpbmVzMVdyYXAiKSxGLmE9CnBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJsaW5lczJXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJhcnMxV3JhcD0K IiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJhcnMyV3JhcCIpLEYuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJzdGFjPQprMVdyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi c3RhY2syV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsImxlZ2VuZFdyYXAiKTt2 YXIgST0zRGouc2VsZWN0KCJnIik7cyYmKHgud2lkdGgoay8yKSxJLnNlbGVjdCgiLmxlZ2VuZFdy YT0KcCIpLmRhdHVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWdpbmFsS2V5PTNEZS5v cmlnaW5hbEtleT0zRD0zRD0zRHVuPQpkZWZpbmVkP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9 M0RlLm9yaWdpbmFsS2V5KyhlLnlBeGlzPTNEPTNEMT8iIjoiIChyaWc9Cmh0IGF4aXMpIiksZX0p KS5jYWxsKHgpLHQudG9wIT0zRHguaGVpZ2h0KCkmJih0LnRvcD0zRHguaGVpZ2h0KCksTD0zRChp fHxwYT0KcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS10LnRvcC10LmJvdHRvbSksSS5z ZWxlY3QoIi5sZWdlbmRXcmFwIikuYXR0PQpyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitrLzIr IiwiKyAtdC50b3ArIikiKSksZC53aWR0aChrKS5oZWlnaHQoTCkuaW50ZXI9CnBvbGF0ZSgibW9u b3RvbmUiKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5s ZW5ndGhdfT0KKS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtu XS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0KPTNEPTNEImxpbmUifSkpLHYud2lkdGgoaykuaGVp Z2h0KEwpLmludGVycG9sYXRlKCJtb25vdG9uZSIpLmNvbG9yKGUubWFwKGZ1PQpuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3Jl dHVybiFlW249Cl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QyJiZlW25dLnR5cGU9M0Q9M0Qi bGluZSJ9KSksbS53aWR0aChrKS5oZWlnaHQoTD0KKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQp e3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uPQoodCxuKXty ZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0zRD0zRCJi YXIifSkpLGcud2k9CmR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLj0KZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0 dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QyJiZlW25dLnR5cGU9M0Q9Cj0zRCJi YXIifSkpLHkud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIGUuY29sb3J8fD0Kblt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVy biFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEPQoxJiZlW25dLnR5cGU9M0Q9M0QiYXJl YSJ9KSksYi53aWR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXs9CnJl dHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJu IWVbbl0uZGlzYWJsZWQmJj0KZVtuXS55QXhpcz0zRD0zRDImJmVbbl0udHlwZT0zRD0zRCJhcmVh In0pKSxJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiPQordC5sZWZ0KyIsIit0LnRvcCsi KSIpO3ZhciBxPTNESS5zZWxlY3QoIi5saW5lczFXcmFwIikuZGF0dW0oQSksUj0zREkuc2VsZWM9 CnQoIi5iYXJzMVdyYXAiKS5kYXR1bShNKSxVPTNESS5zZWxlY3QoIi5zdGFjazFXcmFwIikuZGF0 dW0oRCksej0zREkuc2VsZWN0KD0KIi5saW5lczJXcmFwIikuZGF0dW0oTyksVz0zREkuc2VsZWN0 KCIuYmFyczJXcmFwIikuZGF0dW0oXyksWD0zREkuc2VsZWN0KCIuPQpzdGFjazJXcmFwIikuZGF0 dW0oUCksVj0zREQubGVuZ3RoP0QubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLnJl ZHU9CmNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJue3g6 ZS54LHk6ZS55K3Rbbl0ueX19KX0pLj0KY29uY2F0KFt7eDowLHk6MH1dKTpbXSwkPTNEUC5sZW5n dGg/UC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkucmVkPQp1Y2UoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm57eDplLngseTplLnkrdFtuXS55 fX0pfSk9Ci5jb25jYXQoW3t4OjAseTowfV0pOltdO2guZG9tYWluKGx8fGQzLmV4dGVudChkMy5t ZXJnZShIKS5jb25jYXQoViksZnVuY3Rpbz0KbihlKXtyZXR1cm4gZS55fSkpLnJhbmdlKFswLExd KSxwLmRvbWFpbihjfHxkMy5leHRlbnQoZDMubWVyZ2UoQikuY29uY2F0KCQpPQosZnVuY3Rpb24o ZSl7cmV0dXJuIGUueX0pKS5yYW5nZShbMCxMXSksZC55RG9tYWluKGguZG9tYWluKCkpLG0ueURv bWFpbihoLmQ9Cm9tYWluKCkpLHkueURvbWFpbihoLmRvbWFpbigpKSx2LnlEb21haW4ocC5kb21h aW4oKSksZy55RG9tYWluKHAuZG9tYWluKCkpLD0KYi55RG9tYWluKHAuZG9tYWluKCkpLEQubGVu Z3RoJiZkMy50cmFuc2l0aW9uKFUpLmNhbGwoeSksUC5sZW5ndGgmJmQzLnRyYW5zPQppdGlvbihY KS5jYWxsKGIpLE0ubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFIpLmNhbGwobSksXy5sZW5ndGgmJmQz LnRyYW5zaXRpb249CihXKS5jYWxsKGcpLEEubGVuZ3RoJiZkMy50cmFuc2l0aW9uKHEpLmNhbGwo ZCksTy5sZW5ndGgmJmQzLnRyYW5zaXRpb24oeikuYz0KYWxsKHYpLHcudGlja3Moay8xMDApLnRp Y2tTaXplKC1MLDApLEkuc2VsZWN0KCIueC5heGlzIikuYXR0cigidHJhbnNmb3JtIiwiPQp0cmFu c2xhdGUoMCwiK0wrIikiKSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0KCIueC5heGlzIikpLmNhbGwo dyksRS50aWNrcyhMLzM9CjYpLnRpY2tTaXplKC1rLDApLGQzLnRyYW5zaXRpb24oSS5zZWxlY3Qo Ii55MS5heGlzIikpLmNhbGwoRSksUy50aWNrcyhMLzM2KT0KLnRpY2tTaXplKC1rLDApLGQzLnRy YW5zaXRpb24oSS5zZWxlY3QoIi55Mi5heGlzIikpLmNhbGwoUyksSS5zZWxlY3QoIi55Mi5hPQp4 aXMiKS5zdHlsZSgib3BhY2l0eSIsQi5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIithLnJhbmdlKCk9ClsxXSsiLDApIikseC5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2Ui LGZ1bmN0aW9uKGUpe0MudXBkYXRlKCl9KSxULm9uKCJ0b29sdD0KaXBTaG93IixmdW5jdGlvbihl KXtvJiZOKGUsZi5wYXJlbnROb2RlKX0pfSksQ312YXIgdD0zRHt0b3A6MzAscmlnaHQ6MjAsYm90 PQp0b206NTAsbGVmdDo2MH0sbj0zRGQzLnNjYWxlLmNhdGVnb3J5MjAoKS5yYW5nZSgpLHI9M0Ru dWxsLGk9M0RudWxsLHM9M0QhMCw9Cm89M0QhMCx1PTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1 cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD0KPiJ9LGEsZixsLGMsYT0z RGQzLnNjYWxlLmxpbmVhcigpLGg9M0RkMy5zY2FsZS5saW5lYXIoKSxwPTNEZDMuc2NhbGUubGlu ZWFyPQooKSxkPTNEZS5tb2RlbHMubGluZSgpLnlTY2FsZShoKSx2PTNEZS5tb2RlbHMubGluZSgp LnlTY2FsZShwKSxtPTNEZS5tb2RlbHM9Ci5tdWx0aUJhcigpLnN0YWNrZWQoITEpLnlTY2FsZSho KSxnPTNEZS5tb2RlbHMubXVsdGlCYXIoKS5zdGFja2VkKCExKS55U2NhbD0KZShwKSx5PTNEZS5t b2RlbHMuc3RhY2tlZEFyZWEoKS55U2NhbGUoaCksYj0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCku eVNjYWxlPQoocCksdz0zRGUubW9kZWxzLmF4aXMoKS5zY2FsZShhKS5vcmllbnQoImJvdHRvbSIp LnRpY2tQYWRkaW5nKDUpLEU9M0RlLm1vZGU9CmxzLmF4aXMoKS5zY2FsZShoKS5vcmllbnQoImxl ZnQiKSxTPTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKHApLm9yaWVudCgicmlnaD0KdCIpLHg9M0Rl Lm1vZGVscy5sZWdlbmQoKS5oZWlnaHQoMzApLFQ9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ci LCJ0b29sdGlwPQpIaWRlIiksTj0zRGZ1bmN0aW9uKHQsbil7dmFyIHI9M0R0LnBvc1swXSsobi5v ZmZzZXRMZWZ0fHwwKSxpPTNEdC5wb3NbMV0rKG49Ci5vZmZzZXRUb3B8fDApLHM9M0R3LnRpY2tG b3JtYXQoKShkLngoKSh0LnBvaW50LHQucG9pbnRJbmRleCkpLG89M0QodC5zZXJpZT0Kcy55QXhp cz0zRD0zRDI/UzpFKS50aWNrRm9ybWF0KCkoZC55KCkodC5wb2ludCx0LnBvaW50SW5kZXgpKSxh PTNEdSh0LnNlcmllPQpzLmtleSxzLG8sdCxDKTtlLnRvb2x0aXAuc2hvdyhbcixpXSxhLHVuZGVm aW5lZCx1bmRlZmluZWQsbi5vZmZzZXRQYXJlbnQpfTs9CnJldHVybiBkLmRpc3BhdGNoLm9uKCJl bGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWz0KMF0r dC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZC5kaXNwYXRjaC5vbigi ZWxlbWVudE1vdXNlb3V0PQoudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0p LHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG89Cm9sdGlwIixmdW5jdGlvbihlKXtl LnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZT0K KX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtU LnRvb2x0aXBIaWRlKGUpfSksPQptLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0 aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGU9CmZ0LGUucG9zWzFdK3QudG9w XSxULnRvb2x0aXBTaG93KGUpfSksbS5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0 aT0KcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLGcuZGlzcGF0Y2gub24oImVsZW1l bnRNb3VzZW92ZXIudG9vbHRpcCIsPQpmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0Lmxl ZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxnLmQ9CmlzcGF0Y2gub24oImVs ZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSkseS5k aXNwYT0KdGNoLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7aWYoIU1hdGgucm91bmQoeS55 KCkoZS5wb2ludCkqMTAwKSlyZXR1cm4gPQpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZDMuc2VsZWN0 QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEpfSwwKSw9CiExO2UucG9zPTNE W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLHkuZGlz cGF0Y2gubz0KbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxi LmRpc3BhdGNoLm9uKCJ0b29sdGlwU2hvdyIsPQpmdW5jdGlvbihlKXtpZighTWF0aC5yb3VuZChi LnkoKShlLnBvaW50KSoxMDApKXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCk9CntkMy5zZWxl Y3RBbGwoIi5wb2ludC5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LDApLCExO2UucG9zPTNE W2UucG9zWzBdKz0KdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksYi5k aXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0PQppb24oZSl7VC50b29sdGlwSGlkZShlKX0p LGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb249CihlKXtl LnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9 KSxkLmRpc3BhdGNoLj0Kb24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtU LnRvb2x0aXBIaWRlKGUpfSksdi5kaXNwYXRjaC5vbigiPQplbGVtZW50TW91c2VvdmVyLnRvb2x0 aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnQ9Cm9w XSxULnRvb2x0aXBTaG93KGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0 aXAiLGZ1bmN0aW9uKGUpez0KVC50b29sdGlwSGlkZShlKX0pLFQub24oInRvb2x0aXBIaWRlIixm dW5jdGlvbigpe28mJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxDPQouZGlzcGF0Y2g9M0RULEMubGlu ZXMxPTNEZCxDLmxpbmVzMj0zRHYsQy5iYXJzMT0zRG0sQy5iYXJzMj0zRGcsQy5zdGFjazE9M0Q9 CnksQy5zdGFjazI9M0RiLEMueEF4aXM9M0R3LEMueUF4aXMxPTNERSxDLnlBeGlzMj0zRFMsQy5v cHRpb25zPTNEZS51dGlscy5vcD0KdGlvbnNGdW5jLmJpbmQoQyksQy54PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFg9M0RlLGQueChlPQopLG0ueChlKSxDKTpnZXRY fSxDLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZ2V0WT0zRGUsZC55 KGU9CiksbS55KGUpLEMpOmdldFl9LEMueURvbWFpbjE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obD0zRGUsQz0KKTpsfSxDLnlEb21haW4yPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMubWFyZ2luPQo9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0zRGUsQyk6dH0sQy53aWR0aD0zRGZ1bmN0aW9u KGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLEMpOnJ9LEMuaGVpZ2h0PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oaT0zRGUsQyk6aX0sQy5jb2xvcj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSx4PQouY29sb3IoZSks Qyk6bn0sQy5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHM9M0RlLEM9Cik6c30sQy50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhvPTNEZSxDKTpvfSxDLnRvb2x0aT0KcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQ30sZS5tb2RlbHMub2hsPQpjQmFyPTNE ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9 M0RuLXQubGVmdC09CnQucmlnaHQseD0zRHItdC50b3AtdC5ib3R0b20sVD0zRGQzLnNlbGVjdCh0 aGlzKTtzLmRvbWFpbih5fHxkMy5leHRlbnQoZVswXT0KLnZhbHVlcy5tYXAodSkuY29uY2F0KHAp KSksdj9zLnJhbmdlKHd8fFtnKi41L2VbMF0udmFsdWVzLmxlbmd0aCxnKihlWzBdLnZhPQpsdWVz Lmxlbmd0aC0uNSkvZVswXS52YWx1ZXMubGVuZ3RoXSk6cy5yYW5nZSh3fHxbMCxnXSksby5kb21h aW4oYnx8W2QzLm1pbig9CmVbMF0udmFsdWVzLm1hcChoKS5jb25jYXQoZCkpLGQzLm1heChlWzBd LnZhbHVlcy5tYXAoYykuY29uY2F0KGQpKV0pLnJhbmdlKD0KRXx8W3gsMF0pLHMuZG9tYWluKClb MF09M0Q9M0Q9M0RzLmRvbWFpbigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5kPQpv bWFpbigpWzBdLXMuZG9tYWluKClbMF0qLjAxLHMuZG9tYWluKClbMV0rcy5kb21haW4oKVsxXSou MDFdKTpzLmRvbWFpbihbLTE9CiwxXSkpLG8uZG9tYWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigp WzFdJiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21haT0KbigpWzBdK28uZG9tYWluKClb MF0qLjAxLG8uZG9tYWluKClbMV0tby5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEsMV0p PQopO3ZhciBOPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW9obGNC YXIiKS5kYXRhKFtlWzBdLnZhbHU9CmVzXSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1vaGxjQmFyIiksaz0zRD0KQy5hcHBlbmQoImRlZnMi KSxMPTNEQy5hcHBlbmQoImciKSxBPTNETi5zZWxlY3QoImciKTtMLmFwcGVuZCgiZyIpLmF0dHIo ImNsPQphc3MiLCJudi10aWNrcyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5s ZWZ0KyIsIit0LnRvcCsiKSIpLFQub249CigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7Uy5jaGFydENs aWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0pfSksaz0KLmFwcGVuZCgiY2xp cFBhdGgiKS5hdHRyKCJpZCIsIm52LWNoYXJ0LWNsaXAtcGF0aC0iK2kpLmFwcGVuZCgicmVjdCIp LE4uc2VsPQplY3QoIiNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIgcmVjdCIpLmF0dHIoIndpZHRo IixnKS5hdHRyKCJoZWlnaHQiLHgpLEEuYXQ9CnRyKCJjbGlwLXBhdGgiLG0/InVybCgjbnYtY2hh cnQtY2xpcC1wYXRoLSIraSsiKSI6IiIpO3ZhciBPPTNETi5zZWxlY3QoIi5udj0KLXRpY2tzIiku c2VsZWN0QWxsKCIubnYtdGljayIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtPLmV4aXQo KS5yZW1vdmUoPQopO3ZhciBNPTNETy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNz IixmdW5jdGlvbihlLHQsbil7cmV0dXJuKGYoZSw9CnQpPmwoZSx0KT8ibnYtdGljayBuZWdhdGl2 ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiIG52LXRpY2stIituKyItIit0fSkuYXR0cj0KKCJkIixm dW5jdGlvbih0LG4pe3ZhciByPTNEZy9lWzBdLnZhbHVlcy5sZW5ndGgqLjk7cmV0dXJuIm0wLDBs MCwiKyhvKGYodCxuPQopKS1vKGModCxuKSkpKyJsIisgLXIvMisiLDBsIityLzIrIiwwbDAsIiso byhoKHQsbikpLW8oZih0LG4pKSkrImwwLCIrKG8obCg9CnQsbikpLW8oaCh0LG4pKSkrImwiK3Iv MisiLDBsIisgLXIvMisiLDB6In0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KT0Ke3Jl dHVybiJ0cmFuc2xhdGUoIitzKHUoZSx0KSkrIiwiK28oYyhlLHQpKSsiKSJ9KS5vbigibW91c2Vv dmVyIixmdW5jdGlvbih0PQosbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCks Uy5lbGVtZW50TW91c2VvdmVyKHtwb2ludDp0LHNlcmllczo9CmVbMF0scG9zOltzKHUodCxuKSks byhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbj0K KCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIi LCExKSxTLmVsZW1lbnRNb3VzPQplb3V0KHtwb2ludDp0LHNlcmllczplWzBdLHBvaW50SW5kZXg6 bixzZXJpZXNJbmRleDowLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGk9CmNrIixmdW5jdGlvbihlLHQp e1MuZWxlbWVudENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSx0 KT0KKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlv bigpfSkub24oImRibGNsaWNrIixmPQp1bmN0aW9uKGUsdCl7Uy5lbGVtZW50RGJsQ2xpY2soe3Zh bHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShlLHQpKSw9Cm8oYShlLHQpKV0sZTpk My5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KTtPLmF0dHIoImNsYXNz IixmdT0KbmN0aW9uKGUsdCxuKXtyZXR1cm4oZihlLHQpPmwoZSx0KT8ibnYtdGljayBuZWdhdGl2 ZSI6Im52LXRpY2sgcG9zaXRpdmUiKSsiPQogbnYtdGljay0iK24rIi0iK3R9KSxkMy50cmFuc2l0 aW9uKE8pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm49CiJ0cmFuc2xhdGUo IitzKHUoZSx0KSkrIiwiK28oYyhlLHQpKSsiKSJ9KS5hdHRyKCJkIixmdW5jdGlvbih0LG4pe3Zh ciByPTNEZz0KL2VbMF0udmFsdWVzLmxlbmd0aCouOTtyZXR1cm4ibTAsMGwwLCIrKG8oZih0LG4p KS1vKGModCxuKSkpKyJsIisgLXIvMisiLDBsPQoiK3IvMisiLDBsMCwiKyhvKGgodCxuKSktbyhm KHQsbikpKSsibDAsIisobyhsKHQsbikpLW8oaCh0LG4pKSkrImwiK3IvMisiLDA9CmwiKyAtci8y KyIsMHoifSl9KSx4fXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNE OTYwLHI9M0Q1MD0KMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz0zRGQzLnNj YWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lPQphcigpLHU9M0RmdW5jdGlvbihlKXtyZXR1 cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRGZ1bmN0aW9uKGU9Cil7cmV0 dXJuIGUub3Blbn0sbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsb3NlfSxjPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUuaD0KaWdofSxoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubG93fSxwPTNEW10s ZD0zRFtdLHY9M0QhMSxtPTNEITAsZz0zRGUudXRpbHMuPQpkZWZhdWx0Q29sb3IoKSx5LGIsdyxF LFM9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImVsZW1lbnQ9CkRi bENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpO3JldHVybiB4LmRp c3BhdGNoPTNEUyx4Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh4KSx4Lng9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyh1PTNEZSx4KTp1fSx4Lnk9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUseCk6YX0seC5vcGU9 Cm49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUseCk6Zn0seC5j bG9zZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHgpOmx9 LHguaGlnaD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KGM9M0RlLHgp OmN9LHgubG93PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLHgp Omg9Cn0seC5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50 b3A9M0R0eXBlb2YgZS50b3AhPTNEIj0KdW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpPQpnaHQsdC5ib3R0b209 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0 PTNEdHk9CnBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQseCk6dH0seC53 aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLHgpOm59 LHguaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8ocj0zRGUs eCk6cn0seC54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0z RGUseCk6c309Cix4LnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhvPTNEZSx4KTpvfSx4LnhEb21haW49M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh5PTNEZSx4KTp5fSx4LnlEb21haW49M0RmdW5jdGlvbihlKXtyZXR1PQpybiBhcmd1 bWVudHMubGVuZ3RoPyhiPTNEZSx4KTpifSx4LnhSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGU9Cm5ndGg/KHc9M0RlLHgpOnd9LHgueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHgpOj0KRX0seC5mb3JjZVg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUseCk6cH0seC5mb3JjZVk9M0RmPQp1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx4KTpkfSx4LnBhZERhdGE9M0Rm dW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSx4KTp2fSx4LmNsaXBF ZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8obT0zRGUseCk6bX0s eC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZS51PQp0 aWxzLmdldENvbG9yKHQpLHgpOmd9LHguaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaT0zRGUseCk9CjppfSx4fSxlLm1vZGVscy5waWU9M0RmdW5jdGlvbigpe2Z1bmN0 aW9uIFMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdT0KbmN0aW9uIHEoZSl7dmFyIHQ9 M0QoZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpKjkwL01hdGguUEktOTA7cmV0dXJuIHQ+OTA/dC0x PQo4MDp0fWZ1bmN0aW9uIFIoZSl7ZS5lbmRBbmdsZT0zRGlzTmFOKGUuZW5kQW5nbGUpPzA6ZS5l bmRBbmdsZSxlLnN0YXJ0QW5nbGU9Cj0zRGlzTmFOKGUuc3RhcnRBbmdsZSk/MDplLnN0YXJ0QW5n bGUsbXx8KGUuaW5uZXJSYWRpdXM9M0QwKTt2YXIgdD0zRGQzLmludD0KZXJwb2xhdGUodGhpcy5f Y3VycmVudCxlKTtyZXR1cm4gdGhpcy5fY3VycmVudD0zRHQoMCksZnVuY3Rpb24oZSl7cmV0dXJu IEEoPQp0KGUpKX19ZnVuY3Rpb24gVShlKXtlLmlubmVyUmFkaXVzPTNEMDt2YXIgdD0zRGQzLmlu dGVycG9sYXRlKHtzdGFydEFuZ2xlOjA9CixlbmRBbmdsZTowfSxlKTtyZXR1cm4gZnVuY3Rpb24o ZSl7cmV0dXJuIEEodChlKSl9fXZhciBvPTNEbi10LmxlZnQtdC5yaWdodD0KLGY9M0RyLXQudG9w LXQuYm90dG9tLFM9M0RNYXRoLm1pbihvLGYpLzIseD0zRFMtUy81LFQ9M0RkMy5zZWxlY3QodGhp cyksTj0KPTNEVC5zZWxlY3RBbGwoIi5udi13cmFwLm52LXBpZSIpLmRhdGEoZSksQz0zRE4uZW50 ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnZkMyBudi13cmFwIG52LXBpZSBudi1j aGFydC0iK3UpLGs9M0RDLmFwcGVuZCgiZyIpLEw9M0ROLnNlbGVjdCgiZyI9Cik7ay5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXBpZSIpLGsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1waWVMYT0KYmVscyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIs Iit0LnRvcCsiKSIpLEwuc2VsZWN0KCIubnYtPQpwaWUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIitvLzIrIiwiK2YvMisiKSIpLEwuc2VsZWN0KCIubnYtcGllTGFiZWw9CnMiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLzIrIiwiK2YvMisiKSIpLFQub24oImNsaWNrIixm dW5jdGlvbihlLD0KdCl7RS5jaGFydENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQs aWQ6dX0pfSk7dmFyIEE9M0RkMy5zdmcuYXJjKCkuPQpvdXRlclJhZGl1cyh4KTt5JiZBLnN0YXJ0 QW5nbGUoeSksYiYmQS5lbmRBbmdsZShiKSxtJiZBLmlubmVyUmFkaXVzKFMqdyk7dmE9CnIgTz0z RGQzLmxheW91dC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRp c2FibGVkPzA6cyhlKT0KfSksTT0zRE4uc2VsZWN0KCIubnYtcGllIikuc2VsZWN0QWxsKCIubnYt c2xpY2UiKS5kYXRhKE8pLF89M0ROLnNlbGVjdCgiLm52PQotcGllTGFiZWxzIikuc2VsZWN0QWxs KCIubnYtbGFiZWwiKS5kYXRhKE8pO00uZXhpdCgpLnJlbW92ZSgpLF8uZXhpdCgpLnJlbW89CnZl KCk7dmFyIEQ9M0RNLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zbGljZSIp Lm9uKCJtb3VzZW92ZXIiLD0KZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgi aG92ZXIiLCEwKSxFLmVsZW1lbnRNb3VzZW92ZXIoe2xhYmVsPQo6aShlLmRhdGEpLHZhbHVlOnMo ZS5kYXRhKSxwb2ludDplLmRhdGEscG9pbnRJbmRleDp0LHBvczpbZDMuZXZlbnQucGFnZVgsZDM9 Ci5ldmVudC5wYWdlWV0saWQ6dX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2QzLnNl bGVjdCh0aGlzKS5jbGFzc2VkKD0KImhvdmVyIiwhMSksRS5lbGVtZW50TW91c2VvdXQoe2xhYmVs OmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhPQosaW5kZXg6dCxpZDp1fSl9 KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7RS5lbGVtZW50Q2xpY2soe2xhYmVsOmkoZS5kYXRh KSw9CnZhbHVlOnMoZS5kYXRhKSxwb2ludDplLmRhdGEsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6 dX0pLGQzLmV2ZW50LnN0b3BQcm9wYT0KZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9u KGUsdCl7RS5lbGVtZW50RGJsQ2xpY2soe2xhYmVsOmkoZS5kYXRhKSx2PQphbHVlOnMoZS5kYXRh KSxwb2ludDplLmRhdGEsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pLGQzLmV2ZW50LnN0b3BQ cm9wYWc9CmF0aW9uKCl9KTtNLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0 KX0pLmF0dHIoInN0cm9rZSIsZnVuY3Rpbz0KbihlLHQpe3JldHVybiBhKGUsdCl9KTt2YXIgUD0z REQuYXBwZW5kKCJwYXRoIikuZWFjaChmdW5jdGlvbihlKXt0aGlzLl9jdXJyPQplbnQ9M0RlfSk7 TS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBKTtpZihsKXt2YXIgSD0zRGQzLnN2Zy5hcmMoKS5p bm5lclJhZGk9CnVzKDApO2MmJihIPTNEQSksaCYmKEg9M0RkMy5zdmcuYXJjKCkub3V0ZXJSYWRp dXMoQS5vdXRlclJhZGl1cygpKSksXy5lbnRlcj0KKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibnYt bGFiZWwiLCEwKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RkMy5zZWxlY3QoPQp0aGlzKTtu LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7aWYoZyl7ZS5vdXRlclJhZGl1cz0zRHgrMTAs ZS5pbm5lclJhZGk9CnVzPTNEeCsxNTt2YXIgdD0zRChlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkv MiooMTgwL01hdGguUEkpO3JldHVybihlLnN0YXJ0QT0KbmdsZStlLmVuZEFuZ2xlKS8yPE1hdGgu UEk/dC09M0Q5MDp0Kz0zRDkwLCJ0cmFuc2xhdGUoIitILmNlbnRyb2lkKGUpKyIpIHJvPQp0YXRl KCIrdCsiKSJ9cmV0dXJuIGUub3V0ZXJSYWRpdXM9M0RTKzEwLGUuaW5uZXJSYWRpdXM9M0RTKzE1 LCJ0cmFuc2xhdGUoIis9CkguY2VudHJvaWQoZSkrIikifSksbi5hcHBlbmQoInJlY3QiKS5zdHls ZSgic3Ryb2tlIiwiI2ZmZiIpLnN0eWxlKCJmaWxsIiwiIz0KZmZmIikuYXR0cigicngiLDMpLmF0 dHIoInJ5IiwzKSxuLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZz8oZS5zPQp0 YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMjxNYXRoLlBJPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnN0 eWxlKCJmaWxsIiwiIzAwMCI9Cil9KTt2YXIgQj0zRHt9LGo9M0QxNCxGPTNEMTQwLEk9M0RmdW5j dGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlWzBdL0YpKkYrIj0KLCIrTWF0aC5mbG9vcihlWzFd L2opKmp9O18uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtpZihnKXtlLm91dGVyUmFkaXVz PQo9M0R4KzEwLGUuaW5uZXJSYWRpdXM9M0R4KzE1O3ZhciB0PTNEKGUuc3RhcnRBbmdsZStlLmVu ZEFuZ2xlKS8yKigxODAvTWF0aC49ClBJKTtyZXR1cm4oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUp LzI8TWF0aC5QST90LT0zRDkwOnQrPTNEOTAsInRyYW5zbGF0ZSgiKz0KSC5jZW50cm9pZChlKSsi KSByb3RhdGUoIit0KyIpIn1lLm91dGVyUmFkaXVzPTNEUysxMCxlLmlubmVyUmFkaXVzPTNEUysx NTt2PQphciBuPTNESC5jZW50cm9pZChlKSxyPTNESShuKTtyZXR1cm4gQltyXSYmKG5bMV0tPTNE aiksQltJKG4pXT0zRCEwLCJ0cmFuc2w9CmF0ZSgiK24rIikifSksXy5zZWxlY3QoIi5udi1sYWJl bCB0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIixnPyhkLnN0YXJ0QW5nbD0KZStkLmVuZEFuZ2xl KS8yPE1hdGguUEk/InN0YXJ0IjoiZW5kIjoibWlkZGxlIikudGV4dChmdW5jdGlvbihlLHQpe3Zh ciBuPTNEPQooZS5lbmRBbmdsZS1lLnN0YXJ0QW5nbGUpLygyKk1hdGguUEkpLHI9M0R7a2V5Omko ZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscGU9CnJjZW50OmQzLmZvcm1hdCgiJSIpKG4pfTtyZXR1 cm4gZS52YWx1ZSYmbj52P3JbcF06IiJ9KX19KSxTfXZhciB0PTNEe3RvcDowLD0KcmlnaHQ6MCxi b3R0b206MCxsZWZ0OjB9LG49M0Q1MDAscj0zRDUwMCxpPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu eH0scz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUueX0sbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBl LmRlc2NyaXB0aW9ufSx1PTNETWF0aC5mbG9vcig9Ck1hdGgucmFuZG9tKCkqMWU0KSxhPTNEZS51 dGlscy5kZWZhdWx0Q29sb3IoKSxmPTNEZDMuZm9ybWF0KCIsLjJmIiksbD0zRCEwLD0KYz0zRCEw LGg9M0QhMSxwPTNEImtleSIsdj0zRC4wMixtPTNEITEsZz0zRCExLHk9M0QhMSxiPTNEITEsdz0z RC41LEU9M0RkMy5kPQppc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVu dERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImU9CmxlbWVudE1vdXNlb3V0Iik7cmV0dXJu IFMuZGlzcGF0Y2g9M0RFLFMub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZD0KKFMp LFMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNE dHlwZW9mIGUudG9wIT0KPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVv ZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6PQp0LnJpZ2h0LHQuYm90dG9tPTNEdHlw ZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0KPTNE dHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LFMpOnR9LFMud2lkdGg9 M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxTKTpufSxTLmhl aWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KHI9M0RlLFMpOnJ9 LFMudmFsdWVzPTNEZnVuY3Rpb24odCl7cmV0dXJuIGUubG9nKCJwaWUudmFsdWVzKCkgaXMgbj0K byBsb25nZXIgc3VwcG9ydGVkLiIpLFN9LFMueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhpPTNEZSxTPQopOml9LFMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhzPTNEZDMuZnVuY3RvcihlKSxTKTpzfSxTLmQ9CmVzY3JpcHRpb249M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsUyk6b30sUy5zaG93TGFiZWxz PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsUyk6bH0sUy5s YWJlbFN1bmJlYW1MYXlvdXQ9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhnPTNEZSxTKTpnfSxTLmRvbnV0TGFiZWxzT3V0c2lkZT0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLFMpOmh9LFMucGllTGFiZWxzT3V0c2lkZT0zRGZ1bmN0 aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLFMpOmN9LFMubGFiZWxUeXBl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8ocD0zRGUscD0zRHB8fCJr ZXkiLFMpOnB9LFMuZG9udXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3Ro PyhtPTNEZSxTKTptfSxTLmRvbnV0UmF0aW89M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0PQpoPyh3PTNEZSxTKTp3fSxTLnN0YXJ0QW5nbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsUyk9Cjp5fSxTLmVuZEFuZ2xlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLFMpOmJ9LFMuaWQ9M0RmdT0KbmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxTKTp1fSxTLmNvbG9yPTNEZnVuY3Rpb24o dCl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUudXRpbHMuZ2V0Q29sb3IodCksUyk6 YX0sUy52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0RlLFMpOmZ9LFMubGFiZWxUaHJlc2hvbGQ9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1 bWVudHMubGVuZ3RoPyh2PTNEZSxTKTp2fSxTfSxlLm1vZGVscy5waWVDaGFydD0zRGZ1bmN0aW9u KCl7ZnVuY3Rpb24gPQp2KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHU9M0RkMy5z ZWxlY3QodGhpcyksYT0zRHRoaXMsZj0zRChpfHxwYXI9CnNlSW50KHUuc3R5bGUoIndpZHRoIikp fHw5NjApLXIubGVmdC1yLnJpZ2h0LGQ9M0Qoc3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZz0KaHQi KSl8fDQwMCktci50b3Atci5ib3R0b207di51cGRhdGU9M0RmdW5jdGlvbigpe3UuY2FsbCh2KX0s di5jb250YWluZXI9M0R0PQpoaXMsbC5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVy biEhZS5kaXNhYmxlZH0pO2lmKCFjKXt2YXIgbTtjPTNEe309Cjtmb3IobSBpbiBsKWxbbV1pbnN0 YW5jZW9mIEFycmF5P2NbbV09M0RsW21dLnNsaWNlKDApOmNbbV09M0RsW21dfWlmKCFlfHwhZT0K Lmxlbmd0aCl7dmFyIGc9M0R1LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW2hdKTtyZXR1 cm4gZy5lbnRlcigpLmFwcGVuPQpkKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0 YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmM9CmhvciIsIm1pZGRsZSIpLGcu YXR0cigieCIsci5sZWZ0K2YvMikuYXR0cigieSIsci50b3ArZC8yKS50ZXh0KGZ1bmN0aW9uKGUp ez0KcmV0dXJuIGV9KSx2fXUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIHk9 M0R1LnNlbGVjdEFsbCgiZy5udi13PQpyYXAubnYtcGllQ2hhcnQiKS5kYXRhKFtlXSksYj0zRHku ZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnY9Ci13cmFwIG52LXBpZUNo YXJ0IikuYXBwZW5kKCJnIiksdz0zRHkuc2VsZWN0KCJnIik7Yi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcz0KIiwibnYtcGllV3JhcCIpLGIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdl bmRXcmFwIiksbyYmKG4ud2lkdGgoZikuPQprZXkodC54KCkpLHkuc2VsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmRhdHVtKGUpLmNhbGwobiksci50b3AhPTNEbi5oZWlnaHQoKSY9CiYoci50b3A9M0Ru LmhlaWdodCgpLGQ9M0Qoc3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXIudG9w LXIuYm90dD0Kb20pLHkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgwLCIrIC1yLnRvcCsiKSIpPQopLHkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKCIrci5sZWZ0KyIsIityLnRvcCsiKSIpLHQud2lkdGgoZikuaGVpZ2h0KGQ9Cik7dmFyIEU9 M0R3LnNlbGVjdCgiLm52LXBpZVdyYXAiKS5kYXR1bShbZV0pO2QzLnRyYW5zaXRpb24oRSkuY2Fs bCh0KSxuLmRpcz0KcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtsPTNEZSxwLnN0 YXRlQ2hhbmdlKGwpLHYudXBkYXRlKCl9KSx0LmRpPQpzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91 dC50b29sdGlwIixmdW5jdGlvbihlKXtwLnRvb2x0aXBIaWRlKGUpfSkscC5vbigiY2g9CmFuZ2VT dGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZv ckVhY2goZnVuY3Rpbz0KbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVkW25dfSksbC5kaXNh YmxlZD0zRHQuZGlzYWJsZWQpLHYudXBkYXRlKCl9KX0pPQosdn12YXIgdD0zRGUubW9kZWxzLnBp ZSgpLG49M0RlLm1vZGVscy5sZWdlbmQoKSxyPTNEe3RvcDozMCxyaWdodDoyMCxib3R0b209Cjoy MCxsZWZ0OjIwfSxpPTNEbnVsbCxzPTNEbnVsbCxvPTNEITAsdT0zRGUudXRpbHMuZGVmYXVsdENv bG9yKCksYT0zRCEwLGY9Cj0zRGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aDM+IitlKyI8L2gz PiIrIjxwPiIrdCsiPC9wPiJ9LGw9M0R7fSxjPTNEbnVsbD0KLGg9M0QiTm8gRGF0YSBBdmFpbGFi bGUuIixwPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0PQpl Q2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxkPTNEZnVuY3Rpb24obixyKXt2YXIgaT0zRHQuZGVzY3Jp cHRpb24oKShuLnBvaW50KXw9Cnx0LngoKShuLnBvaW50KSxzPTNEbi5wb3NbMF0rKHImJnIub2Zm c2V0TGVmdHx8MCksbz0zRG4ucG9zWzFdKyhyJiZyLm9mZnNldD0KVG9wfHwwKSx1PTNEdC52YWx1 ZUZvcm1hdCgpKHQueSgpKG4ucG9pbnQpKSxhPTNEZihpLHUsbix2KTtlLnRvb2x0aXAuc2hvdyhb PQpzLG9dLGEsbi52YWx1ZTwwPyJuIjoicyIsbnVsbCxyKX07cmV0dXJuIHQuZGlzcGF0Y2gub24o ImVsZW1lbnRNb3VzZW92ZXIudG89Cm9sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1sw XStyLmxlZnQsZS5wb3NbMV0rci50b3BdLHAudG9vbHRpcFNob3coZT0KKX0pLHAub24oInRvb2x0 aXBTaG93IixmdW5jdGlvbihlKXthJiZkKGUpfSkscC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9u KCl7PQphJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksdi5sZWdlbmQ9M0RuLHYuZGlzcGF0Y2g9M0Rw LHYucGllPTNEdCxkMy5yZWJpbmQodiw9CnQsInZhbHVlRm9ybWF0IiwidmFsdWVzIiwieCIsInki LCJkZXNjcmlwdGlvbiIsImlkIiwic2hvd0xhYmVscyIsImRvbnV0TGFiZT0KbHNPdXRzaWRlIiwi cGllTGFiZWxzT3V0c2lkZSIsImxhYmVsVHlwZSIsImRvbnV0IiwiZG9udXRSYXRpbyIsImxhYmVs VGhyZXNoPQpvbGQiKSx2Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5t YXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhyLnRvcD0zRHR5 cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpyLnRvcCxyLnJpZ2h0PQo9M0R0eXBlb2Yg ZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnIucmlnaHQsci5ib3R0b209M0R0eXBlb2Yg ZS5ib3R0b209CiE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpyLmJvdHRvbSxyLmxlZnQ9M0R0eXBl b2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubD0KZWZ0OnIubGVmdCx2KTpyfSx2LndpZHRoPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLHYpOml9PQosdi5oZWln aHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdik6c30sdi5j b2xvcj0zRGZ1bmM9CnRpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLnV0aWxz LmdldENvbG9yKHIpLG4uY29sb3IodSksdC5jb2xvcj0KKHUpLHYpOnV9LHYuc2hvd0xlZ2VuZD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx2KTpvfSx2PQoudG9v bHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsdik6YX0s di50b29sdGlwQ29udGU9Cm50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0RlLHYpOmZ9LHYuc3RhdGU9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSx2KTpsfSx2LmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpy Z3VtZW50cy5sZW5ndGg/KGM9M0RlLHYpOmN9LHYubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg9Cj8oaD0zRGUsdik6aH0sdn0sZS5tb2RlbHMuc2NhdHRlcj0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gSShxKXtyZXR1cm4gcS5lYWNoKD0KZnVuY3Rpb24oSSl7ZnVuY3Rp b24gUSgpe2lmKCFnKXJldHVybiExO3ZhciBlLGk9M0RkMy5tZXJnZShJLm1hcChmdW5jdGlvbihl PQosdCl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLG4pe3ZhciByPTNEZihlLG4pLGk9 M0RsKGUsbik7cmV0dXJuW28ocik9Cix1KGkpLHQsbixlXX0pLmZpbHRlcihmdW5jdGlvbihlLHQp e3JldHVybiBiKGVbNF0sdCl9KX0pKTtpZihEPTNEPTNEPTNEITApez0KaWYoeCl7dmFyIGE9M0RY LnNlbGVjdCgiZGVmcyIpLnNlbGVjdEFsbCgiLm52LXBvaW50LWNsaXBzIikuZGF0YShbc10pLmVu dGVyPQooKTthLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJjbGFzcyIsIm52LXBvaW50LWNsaXBz IikuYXR0cigiaWQiLCJudi1wb2ludHM9Ci1jbGlwLSIrcyk7dmFyIGM9M0RYLnNlbGVjdCgiI252 LXBvaW50cy1jbGlwLSIrcykuc2VsZWN0QWxsKCJjaXJjbGUiKS5kYXRhKD0KaSk7Yy5lbnRlcigp LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsVCksYy5leGl0KCkucmVtb3ZlKCksYy5hdHRyKCJj eCIsZnVuPQpjdGlvbihlKXtyZXR1cm4gZVswXX0pLmF0dHIoImN5IixmdW5jdGlvbihlKXtyZXR1 cm4gZVsxXX0pLFguc2VsZWN0KCIubnYtcG89CmludC1wYXRocyIpLmF0dHIoImNsaXAtcGF0aCIs InVybCgjbnYtcG9pbnRzLWNsaXAtIitzKyIpIil9aS5sZW5ndGgmJihpLnB1cz0KaChbby5yYW5n ZSgpWzBdLTIwLHUucmFuZ2UoKVswXS0yMCxudWxsLG51bGxdKSxpLnB1c2goW28ucmFuZ2UoKVsx XSsyMCx1LnJhPQpuZ2UoKVsxXSsyMCxudWxsLG51bGxdKSxpLnB1c2goW28ucmFuZ2UoKVswXS0y MCx1LnJhbmdlKClbMF0rMjAsbnVsbCxudWxsXSk9CixpLnB1c2goW28ucmFuZ2UoKVsxXSsyMCx1 LnJhbmdlKClbMV0tMjAsbnVsbCxudWxsXSkpO3ZhciBoPTNEZDMuZ2VvbS5wb2x5Zz0Kb24oW1st MTAsLTEwXSxbLTEwLHIrMTBdLFtuKzEwLHIrMTBdLFtuKzEwLC0xMF1dKSxwPTNEMWUtNjtpPTNE aS5zb3J0KGZ1bmN0PQppb24oZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19KTtmb3Io dmFyIGQ9M0QwO2Q8aS5sZW5ndGgtMTspTWF0aC5hYnM9CihpW2RdWzBdLWlbZCsxXVswXSk8cCYm TWF0aC5hYnMoaVtkXVsxXS1pW2QrMV1bMV0pPHA/aS5zcGxpY2UoZCsxLDEpOmQrKzt2YT0KciB2 PTNEZDMuZ2VvbS52b3Jvbm9pKGkpLm1hcChmdW5jdGlvbihlLHQpe3JldHVybntkYXRhOmguY2xp cChlKSxzZXJpZXM6aVt0PQpdWzJdLHBvaW50OmlbdF1bM119fSksbT0zRFguc2VsZWN0KCIubnYt cG9pbnQtcGF0aHMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXQ9CmEodik7bS5lbnRlcigpLmFwcGVu ZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1wYXRoLSIrdD0K fSksbS5leGl0KCkucmVtb3ZlKCksbS5hdHRyKCJkIixmdW5jdGlvbihlKXtyZXR1cm4hZXx8IWUu ZGF0YXx8ZS5kYXRhLmxlbmd0PQpoPTNEPTNEPTNEMD8iTSAwIDAiOiJNIitlLmRhdGEuam9pbigi TCIpKyJaIn0pO3ZhciB5PTNEZnVuY3Rpb24oZSxuKXtpZihGKXI9CmV0dXJuIDA7dmFyIHI9M0RJ W2Uuc2VyaWVzXTtpZih0eXBlb2Ygcj0zRD0zRCJ1bmRlZmluZWQiKXJldHVybjt2YXIgaT0zRHIu dj0KYWx1ZXNbZS5wb2ludF07bih7cG9pbnQ6aSxzZXJpZXM6cixwb3M6W28oZihpLGUucG9pbnQp KSt0LmxlZnQsdShsKGksZS5wb2luPQp0KSkrdC50b3BdLHNlcmllc0luZGV4OmUuc2VyaWVzLHBv aW50SW5kZXg6ZS5wb2ludH0pfTttLm9uKCJjbGljayIsZnVuY3Rpb249CihlKXt5KGUsXy5lbGVt ZW50Q2xpY2spfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7eShlLF8uZWxlbWVudE1vdXNl b3Zlcj0KKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXt5KGUsXy5lbGVtZW50TW91c2Vv dXQpfSl9ZWxzZSBYLnNlbGVjdCgiLm52PQotZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAi KS5zZWxlY3RBbGwoIi5udi1wb2ludCIpLm9uKCJjbGljayIsZnVuY3Rpb249CihlLG4pe2lmKEZ8 fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgcj0zRElbZS5zZXJpZXNdLGk9M0RyLnZhbHVlc1tu XTtfLmVsZT0KbWVudENsaWNrKHtwb2ludDppLHNlcmllczpyLHBvczpbbyhmKGksbikpK3QubGVm dCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luPQpkZXg6ZS5zZXJpZXMscG9pbnRJbmRleDpufSl9 KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLG4pe2lmKEZ8fCFJW2Uuc2VyaWU9CnNdKXJldHVy biAwO3ZhciByPTNESVtlLnNlcmllc10saT0zRHIudmFsdWVzW25dO18uZWxlbWVudE1vdXNlb3Zl cih7cG9pbnQ6aT0KLHNlcmllczpyLHBvczpbbyhmKGksbikpK3QubGVmdCx1KGwoaSxuKSkrdC50 b3BdLHNlcmllc0luZGV4OmUuc2VyaWVzLHBvaW50PQpJbmRleDpufSl9KS5vbigibW91c2VvdXQi LGZ1bmN0aW9uKGUsdCl7aWYoRnx8IUlbZS5zZXJpZXNdKXJldHVybiAwO3ZhciBuPQo9M0RJW2Uu c2VyaWVzXSxyPTNEbi52YWx1ZXNbdF07Xy5lbGVtZW50TW91c2VvdXQoe3BvaW50OnIsc2VyaWVz Om4sc2VyaWVzSW49CmRleDplLnNlcmllcyxwb2ludEluZGV4OnR9KX0pO0Y9M0QhMX12YXIgcT0z RG4tdC5sZWZ0LXQucmlnaHQsUj0zRHItdC50b3AtdD0KLmJvdHRvbSxVPTNEZDMuc2VsZWN0KHRo aXMpO0kuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZvckVhY2goZnVuY3RpPQpvbihl KXtlLnNlcmllcz0zRHR9KX0pO3ZhciBXPTNETiYmQyYmQT9bXTpkMy5tZXJnZShJLm1hcChmdW5j dGlvbihlKXtyZXR1cm49CiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDpmKGUs dCkseTpsKGUsdCksc2l6ZTpjKGUsdCl9fSl9KSk7by5kbz0KbWFpbihOfHxkMy5leHRlbnQoVy5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pLmNvbmNhdChkKSkpLHcmJklbMF0/by5yYW5nPQpl KGt8fFsocSpFK3EpLygyKklbMF0udmFsdWVzLmxlbmd0aCkscS1xKigxK0UpLygyKklbMF0udmFs dWVzLmxlbmd0aCldKTpvLnI9CmFuZ2Uoa3x8WzAscV0pLHUuZG9tYWluKEN8fGQzLmV4dGVudChX Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkuY29uY2F0KD0KdikpKS5yYW5nZShMfHxbUiww XSksYS5kb21haW4oQXx8ZDMuZXh0ZW50KFcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNpemV9 PQopLmNvbmNhdChtKSkpLnJhbmdlKE98fFsxNiwyNTZdKTtpZihvLmRvbWFpbigpWzBdPTNEPTNE PTNEby5kb21haW4oKVsxXXx8dS49CmRvbWFpbigpWzBdPTNEPTNEPTNEdS5kb21haW4oKVsxXSlN PTNEITA7by5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClbMT0KXSYmKG8uZG9tYWluKClb MF0/by5kb21haW4oW28uZG9tYWluKClbMF0tby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsx XStvPQouZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFdKSksdS5kb21haW4oKVswXT0z RD0zRD0zRHUuZG9tYWluKClbMV0mJig9CnUuZG9tYWluKClbMF0/dS5kb21haW4oW3UuZG9tYWlu KClbMF0tdS5kb21haW4oKVswXSouMDEsdS5kb21haW4oKVsxXSt1LmRvbT0KYWluKClbMV0qLjAx XSk6dS5kb21haW4oWy0xLDFdKSksaXNOYU4oby5kb21haW4oKVswXSkmJm8uZG9tYWluKFstMSwx XSksaXNOPQphTih1LmRvbWFpbigpWzBdKSYmdS5kb21haW4oWy0xLDFdKSxQPTNEUHx8byxIPTNE SHx8dSxCPTNEQnx8YTt2YXIgWD0zRFUuc2U9CmxlY3RBbGwoImcubnYtd3JhcC5udi1zY2F0dGVy IikuZGF0YShbSV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52 ZDMgbnYtd3JhcCBudi1zY2F0dGVyIG52LWNoYXJ0LSIrcysoTT8iIG52LXNpbmdsZS1wb2ludCI6 IiIpKSwkPTNEPQpWLmFwcGVuZCgiZGVmcyIpLEo9M0RWLmFwcGVuZCgiZyIpLEs9M0RYLnNlbGVj dCgiZyIpO0ouYXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LWdyb3VwcyIpLEouYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1wb2ludC1wYXRocyIpLFguYXR0cigidHJhbj0Kc2Zvcm0i LCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksJC5hcHBlbmQoImNsaXBQYXRoIiku YXR0cigiaWQiLCJuPQp2LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgicmVjdCIpLFguc2VsZWN0KCIj bnYtZWRnZS1jbGlwLSIrcysiIHJlY3QiKS5hdHRyKCI9CndpZHRoIixxKS5hdHRyKCJoZWlnaHQi LFI+MD9SOjApLEsuYXR0cigiY2xpcC1wYXRoIixTPyJ1cmwoI252LWVkZ2UtY2xpcC0iKz0Kcysi KSI6IiIpLEY9M0QhMDt2YXIgRz0zRFguc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIu bnYtZ3JvdXAiKS5kYXRhPQooZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVy biBlLmtleX0pO0cuZW50ZXIoKS5hcHBlbmQoImciKS5zdHk9CmxlKCJzdHJva2Utb3BhY2l0eSIs MWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksRy5leGl0KCkucmVtb3ZlKCksRy5hdD0K dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0fSku Y2xhc3NlZCgiaG92ZXIiLGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KSxHLnN0eWxlKCJm aWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHk9CmxlKCJzdHJva2UiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUo Ij0KZmlsbC1vcGFjaXR5IiwuNSk7aWYocCl7dmFyIFk9M0RHLnNlbGVjdEFsbCgiY2lyY2xlLm52 LXBvaW50IikuZGF0YShmdW5jdGlvPQpuKGUpe3JldHVybiBlLnZhbHVlc30seSk7WS5lbnRlcigp LmFwcGVuZCgiY2lyY2xlIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGU9Cix0KXtyZXR1cm4gZS5j b2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J9KS5hdHRy KCJjeD0KIixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhQKGYodCxuKSkp fSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsPQpuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oSChs KHQsbikpKX0pLmF0dHIoInIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGg9Ci5zcXJ0KGEoYyhl LHQpKS9NYXRoLlBJKX0pLFkuZXhpdCgpLnJlbW92ZSgpLEcuZXhpdCgpLnNlbGVjdEFsbCgicGF0 aC5udi1wbz0KaW50IikuYXR0cigiY3giLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFO dG9aZXJvKG8oZih0LG4pKSl9KS5hdHRyKCJjPQp5IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0 aWxzLk5hTnRvWmVybyh1KGwodCxuKSkpfSkucmVtb3ZlKCksWS5lYWNoKGZ1bmM9CnRpb24oZSx0 KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgibnYtcG9pbnQiLCEwKS5jbGFzc2VkKCJudi1wb2lu dC0iK3QsITApLj0KY2xhc3NlZCgiaG92ZXIiLCExKX0pLFkuYXR0cigiY3giLGZ1bmN0aW9uKHQs bil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oPQpmKHQsbikpKX0pLmF0dHIoImN5IixmdW5j dGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh1KGwodCxuKSkpfSkuYXQ9CnRyKCJy IixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnNxcnQoYShjKGUsdCkpL01hdGguUEkpfSl9ZWxz ZXt2YXIgWT0zREcucz0KZWxlY3RBbGwoInBhdGgubnYtcG9pbnQiKS5kYXRhKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlc30pO1kuZW50ZXIoKS5hcHBlPQpuZCgicGF0aCIpLnN0eWxlKCJmaWxs IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Q9Cmlv bihlLHQpe3JldHVybiBlLmNvbG9yfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3Jl dHVybiJ0cmFuc2xhdGUoIj0KK1AoZihlLHQpKSsiLCIrSChsKGUsdCkpKyIpIn0pLmF0dHIoImQi LGQzLnN2Zy5zeW1ib2woKS50eXBlKGgpLnNpemUoZnVuY3RpPQpvbihlLHQpe3JldHVybiBhKGMo ZSx0KSl9KSksWS5leGl0KCkucmVtb3ZlKCksRy5leGl0KCkuc2VsZWN0QWxsKCJwYXRoLm52LXA9 Cm9pbnQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgi K28oZihlLHQpKSsiLCIrdShsKD0KZSx0KSkrIikifSkucmVtb3ZlKCksWS5lYWNoKGZ1bmN0aW9u KGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoIm52LXBvaW50PQoiLCEwKS5jbGFzc2VkKCJu di1wb2ludC0iK3QsITApLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxZLmF0dHIoInRyYW5zZm9ybSIs ZnU9Cm5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGYoZSx0KSkrIiwiK3UobChlLHQp KSsiKSJ9KS5hdHRyKCJkIixkMy5zdj0KZy5zeW1ib2woKS50eXBlKGgpLnNpemUoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gYShjKGUsdCkpfSkpfWNsZWFyVGltZW91dChqKSxqPQo9M0RzZXRUaW1lb3V0 KFEsMzAwKSxQPTNEby5jb3B5KCksSD0zRHUuY29weSgpLEI9M0RhLmNvcHkoKX0pLEl9dmFyIHQ9 M0R7dG89CnA6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9M0Rl LnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9Cj0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTUp LG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuc2NhbGUubGluZWFyKD0KKSxhPTNEZDMuc2Nh bGUubGluZWFyKCksZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGw9M0RmdW5jdGlvbihlKXty ZXR1cm4gPQplLnl9LGM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfHwxfSxoPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGUuc2hhcGV8fCJjaXI9CmNsZSJ9LHA9M0QhMCxkPTNEW10sdj0zRFtdLG09 M0RbXSxnPTNEITAseT0zRG51bGwsYj0zRGZ1bmN0aW9uKGUpe3JldHVybiFlLj0Kbm90QWN0aXZl fSx3PTNEITEsRT0zRC4xLFM9M0QhMSx4PTNEITAsVD0zRGZ1bmN0aW9uKCl7cmV0dXJuIDI1fSxO PTNEbnVsbCxDPQo9M0RudWxsLGs9M0RudWxsLEw9M0RudWxsLEE9M0RudWxsLE89M0RudWxsLE09 M0QhMSxfPTNEZDMuZGlzcGF0Y2goImVsZW1lbnQ9CkNsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIs ImVsZW1lbnRNb3VzZW91dCIpLEQ9M0QhMCxQLEgsQixqLEY9M0QhMTtyZXR1cm4gST0KLmNsZWFy SGlnaGxpZ2h0cz0zRGZ1bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIubnYtY2hhcnQtIitzKyIgLm52 LXBvaW50LmhvdmVyPQoiKS5jbGFzc2VkKCJob3ZlciIsITEpfSxJLmhpZ2hsaWdodFBvaW50PTNE ZnVuY3Rpb24oZSx0LG4pe2QzLnNlbGVjdCgiLm52LWM9CmhhcnQtIitzKyIgLm52LXNlcmllcy0i K2UrIiAubnYtcG9pbnQtIit0KS5jbGFzc2VkKCJob3ZlciIsbil9LF8ub24oImVsZW1lbj0KdE1v dXNlb3Zlci5wb2ludCIsZnVuY3Rpb24oZSl7ZyYmSS5oaWdobGlnaHRQb2ludChlLnNlcmllc0lu ZGV4LGUucG9pbnRJbmRlPQp4LCEwKX0pLF8ub24oImVsZW1lbnRNb3VzZW91dC5wb2ludCIsZnVu Y3Rpb24oZSl7ZyYmSS5oaWdobGlnaHRQb2ludChlLnNlcmk9CmVzSW5kZXgsZS5wb2ludEluZGV4 LCExKX0pLEkuZGlzcGF0Y2g9M0RfLEkub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYj0K aW5kKEkpLEkueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZDMu ZnVuY3RvcihlKSxJKTpmfSxJPQoueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZDMuZnVuY3RvcihlKSxJKTpsfSxJLnNpemU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZDMuZnVuY3RvcihlKSxJKTpjfSxJLm1hcmdpbj0zRGZ1 bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wPQo6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0z RCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHQ9CnlwZW9mIGUuYm90dG9t IT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEIj0KdW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEkpOnR9LEkud2lkdGg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhuPTNEZSxJKTpufSxJLmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxJKTpyfSw9CkkueFNjYWxlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLEkpOm99LEkueVNjYWxl PTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsSSk6dX0sSS56 U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxJKTph fSxJLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhOPTNE ZSxJKTpOfSxJLnlEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Qz0zRGUsSSk6Qz0KfSxJLnNpemVEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oQT0zRGUsSSk6QX0sSS54UmFuZ2U9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhrPTNEZSxJKTprfSxJLnlSYW5nZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KEw9M0RlLEkpOkx9LEkuc2l6ZVJhbmdlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8oTz0zRGUsSSk6T30sSS5mb3JjZVg9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0KPTNEZSxJKTpkfSxJLmZvcmNlWT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxJKTp2fSxJLmZvPQpyY2VT aXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEkpOm19LEku aW50ZXJhY3RpdmU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNE ZSxJKTpnfSxJLnBvaW50S2V5PTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oeT0zRGUsSSk6eX0sSS5wb2ludEFjdGl2ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQpt ZW50cy5sZW5ndGg/KGI9M0RlLEkpOmJ9LEkucGFkRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyg9Cnc9M0RlLEkpOnd9LEkucGFkRGF0YU91dGVyPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEkpOj0KRX0sSS5jbGlwRWRnZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxJKTpTfSxJLmNsaXBWb3Jv PQpub2k9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsSSk6eH0s SS51c2VWb3Jvbm9pPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD0z RGUsRD0zRD0zRD0zRCExJiYoeD0zRCExKSxJKTpEfSxJLmNsaXBSYT0KZGl1cz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxJKTpUfSxJLmNvbG9yPTNEZnVuY3Rp b24oPQp0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUudXRpbHMuZ2V0Q29sb3IodCks SSk6aX0sSS5zaGFwZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9 M0RlLEkpOmh9LEkub25seUNpcmNsZXM9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMu bGVuZ3RoPyhwPTNEZSxJKTpwfSxJLmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/PQoocz0zRGUsSSk6c30sSS5zaW5nbGVQb2ludD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhNPTNEZSxJKTo9Ck19LEl9LGUubW9kZWxzLnNjYXR0ZXJDaGFydD0z RGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aT0Kb24oZSl7ZnVu Y3Rpb24gSigpe2lmKFQpcmV0dXJuIFcuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgi cG9pbnRlci1lPQp2ZW50cyIsImFsbCIpLCExO1cuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5z dHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIik9Cjt2YXIgaT0zRGQzLm1vdXNlKHRoaXMpO2gu ZGlzdG9ydGlvbih4KS5mb2N1cyhpWzBdKSxwLmRpc3RvcnRpb24oeCkuZm9jdXMoaT0KWzFdKSxX LnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxiJiZXLnNlbGVjdCgiLm52LXgubnYt YXhpcyIpLmNhbGwoPQpuKSx3JiZXLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwociksVy5z ZWxlY3QoIi5udi1kaXN0cmlidXRpb25YIikuZGF0dW09CihlLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aT0Kb25Z IikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1 KX12YXIgQz0zRGQzLnNlPQpsZWN0KHRoaXMpLGs9M0R0aGlzLEw9M0QoZnx8cGFyc2VJbnQoQy5z dHlsZSgid2lkdGgiKSl8fDk2MCktYS5sZWZ0LWEucmlnaHQ9CixEPTNEKGx8fHBhcnNlSW50KEMu c3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvbTtGLnVwZGF0ZT0zRGZ1bmN0aT0K b24oKXtDLmNhbGwoRil9LEYuY29udGFpbmVyPTNEdGhpcyxBLmRpc2FibGVkPTNEZS5tYXAoZnVu Y3Rpb24oZSl7cmV0dXJuISFlPQouZGlzYWJsZWR9KTtpZighTyl7dmFyIEk7Tz0zRHt9O2ZvcihJ IGluIEEpQVtJXWluc3RhbmNlb2YgQXJyYXk/T1tJXT0zREFbSV09Ci5zbGljZSgwKTpPW0ldPTNE QVtJXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFs dT0KZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgcT0zREMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIiku ZGF0YShbX10pO3JldHVybiBxLmVuPQp0ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWw9CmUoInRleHQtYW5jaG9y IiwibWlkZGxlIikscS5hdHRyKCJ4IixhLmxlZnQrTC8yKS5hdHRyKCJ5IixhLnRvcCtELzIpLnRl eHQoZj0KdW5jdGlvbihlKXtyZXR1cm4gZX0pLEZ9Qy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5y ZW1vdmUoKSxQPTNEUHx8aCxIPTNESHx8PQpwO3ZhciBSPTNEQy5zZWxlY3RBbGwoImcubnYtd3Jh cC5udi1zY2F0dGVyQ2hhcnQiKS5kYXRhKFtlXSksVT0zRFIuZW50ZXIoKS49CmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNjYXR0ZXJDaGFydCBudi1jaGFydC0iK3Qu aWQoKSksej0KPTNEVS5hcHBlbmQoImciKSxXPTNEUi5zZWxlY3QoImciKTt6LmFwcGVuZCgicmVj dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1iPQphY2tncm91bmQiKSx6LmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksei5hcHBlbmQoImciKS5hdHRyKCI9CmNsYXNzIiwi bnYteSBudi1heGlzIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNjYXR0ZXJXcmFw Iiksei5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdFdyYXAiKSx6LmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhPQpwIiksei5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpO2lmKHkpe3ZhciBYPTNEUz9MLzI6TDtpLnc9CmlkdGgo WCksUi5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbChpKSxhLnRvcCE9M0Rp LmhlaWdodCgpJiYoYT0KLnRvcD0zRGkuaGVpZ2h0KCksRD0zRChsfHxwYXJzZUludChDLnN0eWxl KCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b20pPQosUi5zZWxlY3QoIi5udi1sZWdlbmRX cmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEwtWCkrIiwiKyAtYS50b3A9Cisi KSIpfVMmJihzLndpZHRoKDE4MCkuY29sb3IoWyIjNDQ0Il0pLFcuc2VsZWN0KCIubnYtY29udHJv bHNXcmFwIikuZGF0dW0oaj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtYS50 b3ArIikiKS5jYWxsKHMpKSxSLmF0dHIoInRyYW5zZm9ybSIsPQoidHJhbnNsYXRlKCIrYS5sZWZ0 KyIsIithLnRvcCsiKSIpLEUmJlcuc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnM9 CmZvcm0iLCJ0cmFuc2xhdGUoIitMKyIsMCkiKSx0LndpZHRoKEwpLmhlaWdodChEKS5jb2xvcihl Lm1hcChmdW5jdGlvbihlLHQpez0KcmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5j dGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLGQhPTNEPQo9M0QwJiZ0LnhEb21haW4o bnVsbCksdiE9M0Q9M0QwJiZ0LnlEb21haW4obnVsbCksUi5zZWxlY3QoIi5udi1zY2F0dGVyV3Jh cCI9CikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2Fs bCh0KTtpZihkIT0zRD0zRDApe3Zhcj0KIFY9M0RoLmRvbWFpbigpWzFdLWguZG9tYWluKClbMF07 dC54RG9tYWluKFtoLmRvbWFpbigpWzBdLWQqVixoLmRvbWFpbigpWzFdPQorZCpWXSl9aWYodiE9 M0Q9M0QwKXt2YXIgJD0zRHAuZG9tYWluKClbMV0tcC5kb21haW4oKVswXTt0LnlEb21haW4oW3Au ZG9tYWk9Cm4oKVswXS12KiQscC5kb21haW4oKVsxXSt2KiRdKX0odiE9M0Q9M0QwfHxkIT0zRD0z RDApJiZSLnNlbGVjdCgiLm52LXNjYXR0ZT0KcldyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLGImJihuLnNjYWxlPQooaCkudGlja3Mo bi50aWNrcygpJiZuLnRpY2tzKCkubGVuZ3RoP24udGlja3MoKTpMLzEwMCkudGlja1NpemUoLUQs MCksVy5zZWw9CmVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbD0KKG4pKSx3JiYoci5zY2FsZShwKS50aWNrcyhy LnRpY2tzKCkmJnIudGlja3MoKS5sZW5ndGg/ci50aWNrcygpOkQvMzYpLnRpY2tTPQppemUoLUws MCksVy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxtJiYoby5nZXREYXRhKHQueCgp KS5zY2FsZShoKS49CndpZHRoKEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu Y29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbj0KKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJs ZWR9KSksei5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3Mi LCJudi1kaXN0cmlidXRpb25YIiksVy5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25YIikuYXR0cigi dHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmRhdHVtKGUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfT0KKSkuY2FsbChvKSksZyYmKHUuZ2V0 RGF0YSh0LnkoKSkuc2NhbGUocCkud2lkdGgoRCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0PQop e3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZH0pKSx6LnM9CmVsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblkiKSxXLnNlbGVjdD0KKCIubnYtZGlzdHJpYnV0aW9u WSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFP0w6LXUuc2l6ZSgpKSsiLDApIiku PQpkYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHUp KSxkMy5maXNoZXllJiYoVy5zZWw9CmVjdCgiLm52LWJhY2tncm91bmQiKS5hdHRyKCJ3aWR0aCIs TCkuYXR0cigiaGVpZ2h0IixEKSxXLnNlbGVjdCgiLm52LWJhY2tncj0Kb3VuZCIpLm9uKCJtb3Vz ZW1vdmUiLEopLFcuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uKCJjbGljayIsZnVuY3Rpb24o KXtUPQo9M0QhVH0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5mcmVlemVGaXNoZXllIixm dW5jdGlvbigpe1Q9M0QhVH0pKSxzLmQ9CmlzcGF0Y2gub24oImxlZ2VuZENsaWNrIixmdW5jdGlv bihlLGkpe2UuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCx4PTNEZS5kaXNhYj0KbGVkPzA6Mi41LFcu c2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsZS5kaXNhYmxl ZD8ibm9uPQplIjoiYWxsIiksVy5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2lu dGVyLWV2ZW50cyIsZS5kaXNhYmxlZD8iYWw9CmwiOiJub25lIiksZS5kaXNhYmxlZD8oaC5kaXN0 b3J0aW9uKHgpLmZvY3VzKDApLHAuZGlzdG9ydGlvbih4KS5mb2N1cygwKSxXLj0Kc2VsZWN0KCIu bnYtc2NhdHRlcldyYXAiKS5jYWxsKHQpLFcuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChu KSxXLnNlbGVjPQp0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6VD0zRCExLEYudXBkYXRlKCl9 KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSI9CixmdW5jdGlvbihlKXtBLmRpc2FibGVkPTNE ZS5kaXNhYmxlZCxNLnN0YXRlQ2hhbmdlKEEpLEYudXBkYXRlKCl9KSx0LmRpc3BhdD0KY2gub24o ImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZDMuc2VsZWN0KCIubnYtY2hh cnQtIit0LmlkKCkrPQoiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIr ZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsZnVuY3Rpb249Cih0LG4pe3JldHVybiBlLnBvc1sxXS1E fSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZT0Kcmll c0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ4MiIsZS5wb3NbMF0rby5z aXplKCkpLGUucG9zPTNEPQpbZS5wb3NbMF0rYS5sZWZ0LGUucG9zWzFdK2EudG9wXSxNLnRvb2x0 aXBTaG93KGUpfSksTS5vbigidG9vbHRpcFNob3ciLGZ1bmM9CnRpb24oZSl7TiYmQihlLGsucGFy ZW50Tm9kZSl9KSxNLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYT0K YmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9 M0R0LmRpc2FibGVkW25dfSksPQpBLmRpc2FibGVkPTNEdC5kaXNhYmxlZCksRi51cGRhdGUoKX0p LFA9M0RoLmNvcHkoKSxIPTNEcC5jb3B5KCl9KSxGfXZhciB0PQo9M0RlLm1vZGVscy5zY2F0dGVy KCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy49 CmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5tb2RlbHMuZGlzdHJpYnV0aW9u KCksdT0zRGUubW9kZWxzLmRpcz0KdHJpYnV0aW9uKCksYT0zRHt0b3A6MzAscmlnaHQ6MjAsYm90 dG9tOjUwLGxlZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9M0RlPQoudXRpbHMuZGVmYXVsdENv bG9yKCksaD0zRGQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRp c3Q9Cm9ydGlvbigwKTp0LnhTY2FsZSgpLHA9M0RkMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUo ZDMuc2NhbGUubGluZWFyKS5kaXN0bz0KcnRpb24oMCk6dC55U2NhbGUoKSxkPTNEMCx2PTNEMCxt PTNEITEsZz0zRCExLHk9M0QhMCxiPTNEITAsdz0zRCEwLEU9M0QhMSxTPQo9M0QhIWQzLmZpc2hl eWUseD0zRDAsVD0zRCExLE49M0QhMCxDPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiI8c3Ryb25n PiIrdCs9CiI8L3N0cm9uZz4ifSxrPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiI8c3Ryb25nPiIr bisiPC9zdHJvbmc+In0sTD0zRG51bGwsQT0KPTNEe30sTz0zRG51bGwsTT0zRGQzLmRpc3BhdGNo KCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjPQpoYW5nZVN0YXRl IiksXz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLEQ9M0QwO3QueFNjYWxlKGgpLnlTY2FsZShwKSxu Lm9yaWVudCg9CiJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5vcmllbnQoRT8icmlnaHQiOiJs ZWZ0IikudGlja1BhZGRpbmcoMTApLG8uYXhpcz0KKCJ4IiksdS5heGlzKCJ5Iikscy51cGRhdGVT dGF0ZSghMSk7dmFyIFAsSCxCPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zPQpbMF0rKHMu b2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksZj0zRGkucG9zWzBd KyhzLm9mZnNldEw9CmVmdHx8MCksbD0zRHAucmFuZ2UoKVswXSthLnRvcCsocy5vZmZzZXRUb3B8 fDApLGM9M0RoLnJhbmdlKClbMF0rYS5sZWZ0KyhzLj0Kb2Zmc2V0TGVmdHx8MCksZD0zRGkucG9z WzFdKyhzLm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pPQpudCxp LnBvaW50SW5kZXgpKSxtPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5k ZXgpKTtDIT0zRG51bGw9CiYmZS50b29sdGlwLnNob3coW2YsbF0sQyhpLnNlcmllcy5rZXksdixt LGksRiksIm4iLDEscywieC1udnRvb2x0aXAiKSxrIT0zRD0KbnVsbCYmZS50b29sdGlwLnNob3co W2MsZF0sayhpLnNlcmllcy5rZXksdixtLGksRiksImUiLDEscywieS1udnRvb2x0aXAiKSxMPQoh PTNEbnVsbCYmZS50b29sdGlwLnNob3coW28sdV0sTChpLnNlcmllcy5rZXksdixtLGksRiksaS52 YWx1ZTwwPyJuIjoicyIsbnU9CmxsLHMpfSxqPTNEW3trZXk6Ik1hZ25pZnkiLGRpc2FibGVkOiEw fV07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZT0Kb3V0LnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe00udG9vbHRpcEhpZGUoZSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAu PQpudi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIrZS5wb2ludEluZGV4KS5h dHRyKCJ5MSIsMCksZDMuc2VsZWM9CnQoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJpZXMt IitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludEluZD0KZXgpLmF0dHIoIngyIix1 LnNpemUoKSl9KSxNLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtOJiZlLnRvb2x0aXAuY2xl YW51PQpwKCl9KSxGLmRpc3BhdGNoPTNETSxGLnNjYXR0ZXI9M0R0LEYubGVnZW5kPTNEaSxGLmNv bnRyb2xzPTNEcyxGLnhBeGlzPTNEbiw9CkYueUF4aXM9M0RyLEYuZGlzdFg9M0RvLEYuZGlzdFk9 M0R1LGQzLnJlYmluZChGLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJwb2ludD0KQWN0aXZlIiwieCIs InkiLCJzaGFwZSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwi eURvbWFpPQpuIiwieFJhbmdlIiwieVJhbmdlIiwic2l6ZURvbWFpbiIsInNpemVSYW5nZSIsImZv cmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSI9CiwiY2xpcFZvcm9ub2kiLCJjbGlwUmFkaXVzIiwi dXNlVm9yb25vaSIpLEYub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYj0KaW5kKEYpLEYu bWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEudG9wPTNEdHlw ZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ZS50b3A6YS50b3AsYS5yaWdodD0zRHR5cGVvZiBl LnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ9CjphLnJpZ2h0LGEuYm90dG9tPTNEdHlwZW9m IGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmEuYm90dG9tLGEubGVmdD0KPTNEdHlw ZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6YS5sZWZ0LEYpOmF9LEYud2lkdGg9M0Rm dW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxGKTpmfSxGLmhlaWdo dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGw9M0RlLEYpOmx9LEYu Y29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUudT0KdGls cy5nZXRDb2xvcih0KSxpLmNvbG9yKGMpLG8uY29sb3IoYyksdS5jb2xvcihjKSxGKTpjfSxGLnNo b3dEaXN0WD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEYp Om19LEYuc2hvd0Rpc3RZPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8o Zz0zRGUsRik6Z30sRi5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0K dHMubGVuZ3RoPyhTPTNEZSxGKTpTfSxGLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oPQp5PTNEZSxGKTp5fSxGLnNob3dYQXhpcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxGKTpifSw9CkYuc2hvd1lBeGlzPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEYpOnd9LEYucmlnaHRBbGln bj0KWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsci5v cmllbnQoZT8icmlnaHQiOiJsZWZ0PQoiKSxGKTpFfSxGLmZpc2hleWU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsRik6eH0sRi54UGE9CmRkaW5nPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEYpOmR9LEYueVBhZGRpbmc9M0Rm dW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxGKTp2fSxGLnRvb2x0 aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oTj0zRGUsRik6Tn0s Ri50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/ KEw9M0RlLEYpOkx9LEYudG9vbHRpcFhDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZT0Kbmd0aD8oQz0zRGUsRik6Q30sRi50b29sdGlwWUNvbnRlbnQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQprPTNEZSxGKTprfSxGLnN0YXRlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEYpOkF9LEYuZGU9CmZhdWx0U3Rh dGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz0zRGUsRik6T30sRi5u b0RhdGE9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPTNEZSxGKTpf fSxGLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KEQ9M0RlLEYpOkR9LEZ9LGUubW9kZWxzLnNjYXR0ZXJQbHVzTGluZUNoYXI9CnQ9M0Rm dW5jdGlvbigpe2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlv biBWKCl7aWYoUylyZT0KdHVybiBVLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBv aW50ZXItZXZlbnRzIiwiYWxsIiksITE7VS5zZWxlY3QoPQoiLm52LXBvaW50LXBhdGhzIikuc3R5 bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBpPTNEZDMubW91c2UodGhpcyk7aC49CmRp c3RvcnRpb24oRSkuZm9jdXMoaVswXSkscC5kaXN0b3J0aW9uKEUpLmZvY3VzKGlbMV0pLFUuc2Vs ZWN0KCIubnYtc2NhdHRlcj0KV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkfSkpLmNhbGwodCksZyYmVS5zZWxlY3QoPQoiLm52LXgubnYtYXhpcyIpLmNh bGwobikseSYmVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpLFUuc2VsZWN0KCIubnY9 Ci1kaXN0cmlidXRpb25YIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlz YWJsZWR9KSkuY2FsbChvKSxVLj0Kc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWSIpLmRhdHVtKGUu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpPQouY2FsbCh1KX12YXIgVD0z RGQzLnNlbGVjdCh0aGlzKSxOPTNEdGhpcyxDPTNEKGZ8fHBhcnNlSW50KFQuc3R5bGUoIndpZHRo Iik9Cil8fDk2MCktYS5sZWZ0LWEucmlnaHQsTT0zRChsfHxwYXJzZUludChULnN0eWxlKCJoZWln aHQiKSl8fDQwMCktYS50b3AtYS5ibz0KdHRvbTtCLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7VC5jYWxs KEIpfSxCLmNvbnRhaW5lcj0zRHRoaXMsay5kaXNhYmxlZD0zRGUubWFwPQooZnVuY3Rpb24oZSl7 cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIUwpe3ZhciBqO0w9M0R7fTtmb3IoaiBpbiBrKWtbal1p bnN0YW49CmNlb2YgQXJyYXk/TFtqXT0zRGtbal0uc2xpY2UoMCk6TFtqXT0zRGtbal19aWYoIWV8 fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0 aH0pLmxlbmd0aCl7dmFyIEY9M0RULnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpPQouZGF0YShbT10p O3JldHVybiBGLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5v RGF0YSIpLmE9CnR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIp LEYuYXR0cigieCIsYS5sZWZ0K0MvMikuYXR0cj0KKCJ5IixhLnRvcCtNLzIpLnRleHQoZnVuY3Rp b24oZSl7cmV0dXJuIGV9KSxCfVQuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtPQpvdmUoKSxo PTNEdC54U2NhbGUoKSxwPTNEdC55U2NhbGUoKSxfPTNEX3x8aCxEPTNERHx8cDt2YXIgST0zRFQu c2VsZWN0QWxsKCI9CmcubnYtd3JhcC5udi1zY2F0dGVyQ2hhcnQiKS5kYXRhKFtlXSkscT0zREku ZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcz0KIiwibnZkMyBudi13cmFwIG52LXNjYXR0 ZXJDaGFydCBudi1jaGFydC0iK3QuaWQoKSksUj0zRHEuYXBwZW5kKCJnIiksVT0zREkuPQpzZWxl Y3QoImciKTtSLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1iYWNrZ3JvdW5k Iikuc3R5bGUoInBvaW49CnRlci1ldmVudHMiLCJub25lIiksUi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXggbnYtYXhpcyIpLFIuYXBwZW5kKCJnIj0KKS5hdHRyKCJjbGFzcyIsIm52LXkg bnYtYXhpcyIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpPQos Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXJlZ3Jlc3Npb25MaW5lc1dyYXAiKSxSLmFw cGVuZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudi1kaXN0V3JhcCIpLFIuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksUi5hcHBlbmQoIj0KZyIpLmF0dHIoImNsYXNzIiwi bnYtY29udHJvbHNXcmFwIiksSS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmxlZnQr PQoiLCIrYS50b3ArIikiKSxiJiZVLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK0M9CisiLDApIiksbSYmKGkud2lkdGgoQy8yKSxJLnNlbGVjdCgi Lm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLGEudG9wIT0KPTNEaS5oZWlnaHQoKSYm KGEudG9wPTNEaS5oZWlnaHQoKSxNPTNEKGx8fHBhcnNlSW50KFQuc3R5bGUoImhlaWdodCIpKXx8 NDAwPQopLWEudG9wLWEuYm90dG9tKSxJLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIis9CkMvMisiLCIrIC1hLnRvcCsiKSIpKSx3JiYocy53aWR0 aCgxODApLmNvbG9yKFsiIzQ0NCJdKSxVLnNlbGVjdCgiLm52LWNvbnRybz0KbHNXcmFwIikuZGF0 dW0oSCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLWEudG9wKyIpIikuY2FsbChz KSksdC53PQppZHRoKEMpLmhlaWdodChNKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXI9CihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRp c2FibGVkfSkpLEkuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlLj0KZmlsdGVyKGZ1 bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCksSS5zZWxlY3QoIi5udi1yZWdy ZXNzaW9uTGluPQplc1dyYXAiKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI252LWVkZ2UtY2xpcC0i K3QuaWQoKSsiKSIpO3ZhciB6PTNESS5zZWxlY3Q9CigiLm52LXJlZ3Jlc3Npb25MaW5lc1dyYXAi KS5zZWxlY3RBbGwoIi5udi1yZWdMaW5lcyIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dT0Kcm4gZX0p O3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXJlZ0xpbmVzIik7dmFyIFc9 M0R6LnNlbGVjdEFsPQpsKCIubnYtcmVnTGluZSIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuW2Vd fSksWD0zRFcuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS49CmF0dHIoImNsYXNzIiwibnYtcmVnTGlu ZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCk7Vy5hdHRyKCJ4MSIsaC5yYW5nZSgpWz0KMF0p LmF0dHIoIngyIixoLnJhbmdlKClbMV0pLmF0dHIoInkxIixmdW5jdGlvbihlLHQpe3JldHVybiBw KGguZG9tYWluKClbMF0qPQplLnNsb3BlK2UuaW50ZXJjZXB0KX0pLmF0dHIoInkyIixmdW5jdGlv bihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMV0qZS5zbG89CnBlK2UuaW50ZXJjZXB0KX0pLnN0 eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyhlLG4pfSkuc3R5bGUoInN0cj0K b2tlLW9wYWNpdHkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGlzYWJsZWR8fHR5cGVvZiBlLnNs b3BlPTNEPTNEInVuZGVmaW5lPQpkInx8dHlwZW9mIGUuaW50ZXJjZXB0PTNEPTNEInVuZGVmaW5l ZCI/MDoxfSksZyYmKG4uc2NhbGUoaCkudGlja3Mobi50aWNrcyg9Cik/bi50aWNrcygpOkMvMTAw KS50aWNrU2l6ZSgtTSwwKSxVLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9y bT0KIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5jYWxsKG4pKSx5JiYoci5zY2Fs ZShwKS50aWNrcyhyLnRpY2tzKCk/PQpyLnRpY2tzKCk6TS8zNikudGlja1NpemUoLUMsMCksVS5z ZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxkJiYoby5nZXQ9CkRhdGEodC54KCkpLnNj YWxlKGgpLndpZHRoKEMpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8 fGMoZT0KLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSks Ui5zZWxlY3QoIi5udi1kaXN0V3JhcCIpPQouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1k aXN0cmlidXRpb25YIiksVS5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25YIik9Ci5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmRhdHVtKGUuZmlsdGVyKGZ1 bmN0aW9uKD0KZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSksdiYmKHUuZ2V0RGF0YSh0 LnkoKSkuc2NhbGUocCkud2lkdGgoTSkuY29sPQpvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm49CiFlW25dLmRp c2FibGVkfSkpLFIuc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LWRpcz0KdHJpYnV0aW9uWSIpLFUuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWSIpLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiPQo/QzotdS5zaXplKCkpKyIsMCkiKS5kYXR1 bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHU9CikpLGQz LmZpc2hleWUmJihVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5hdHRyKCJ3aWR0aCIsQykuYXR0 cigiaGVpZ2h0IixNKT0KLFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uKCJtb3VzZW1vdmUi LFYpLFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uPQooImNsaWNrIixmdW5jdGlvbigpe1M9 M0QhU30pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5mcmVlemVGaXNoZXllIixmdW49CmN0 aW9uKCl7Uz0zRCFTfSkpLHMuZGlzcGF0Y2gub24oImxlZ2VuZENsaWNrIixmdW5jdGlvbihlLGkp e2UuZGlzYWJsZWQ9M0QhZT0KLmRpc2FibGVkLEU9M0RlLmRpc2FibGVkPzA6Mi41LFUuc2VsZWN0 KCIubnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVyLWV2PQplbnRzIixlLmRpc2FibGVkPyJu b25lIjoiYWxsIiksVS5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWU9 CnZlbnRzIixlLmRpc2FibGVkPyJhbGwiOiJub25lIiksZS5kaXNhYmxlZD8oaC5kaXN0b3J0aW9u KEUpLmZvY3VzKDApLHAuZGlzdD0Kb3J0aW9uKEUpLmZvY3VzKDApLFUuc2VsZWN0KCIubnYtc2Nh dHRlcldyYXAiKS5jYWxsKHQpLFUuc2VsZWN0KCIubnYteC5udi1hPQp4aXMiKS5jYWxsKG4pLFUu c2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6Uz0zRCExLEIudXBkYXRlKCl9KSxpLmRp c3A9CmF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtrPTNEZSxBLnN0YXRlQ2hhbmdl KGspLEIudXBkYXRlKCl9KSx0LmRpcz0KcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRp cCIsZnVuY3Rpb24oZSl7ZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkPQooKSsiIC5udi1zZXJp ZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIs ZS5wb3M9ClsxXS1NKSxkMy5zZWxlY3QoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJpZXMt IitlLnNlcmllc0luZGV4KyIgLm52LWRpcz0KdHktIitlLnBvaW50SW5kZXgpLmF0dHIoIngyIixl LnBvc1swXStvLnNpemUoKSksZS5wb3M9M0RbZS5wb3NbMF0rYS5sZWZ0LGUuPQpwb3NbMV0rYS50 b3BdLEEudG9vbHRpcFNob3coZSl9KSxBLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7eCYm UChlLE4ucGE9CnJlbnROb2RlKX0pLEEub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbih0KXt0eXBl b2YgdC5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIj0KJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7 ZS5kaXNhYmxlZD0zRHQuZGlzYWJsZWRbbl19KSxrLmRpc2FibGVkPTNEdC5kaXNhPQpibGVkKSxC LnVwZGF0ZSgpfSksXz0zRGguY29weSgpLEQ9M0RwLmNvcHkoKX0pLEJ9dmFyIHQ9M0RlLm1vZGVs cy5zY2F0dGVyKCk9CixuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0z RGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscz0KLmxlZ2VuZCgpLG89M0RlLm1vZGVscy5k aXN0cmlidXRpb24oKSx1PTNEZS5tb2RlbHMuZGlzdHJpYnV0aW9uKCksYT0zRHt0b3A6PQozMCxy aWdodDoyMCxib3R0b206NTAsbGVmdDo3NX0sZj0zRG51bGwsbD0zRG51bGwsYz0zRGUudXRpbHMu ZGVmYXVsdENvbG9yKCk9CixoPTNEZDMuZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNjYWxl LmxpbmVhcikuZGlzdG9ydGlvbigwKTp0LnhTY2FsZSgpLD0KcD0zRGQzLmZpc2hleWU/ZDMuZmlz aGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC55U2NhbGUoKSxkPQo9 M0QhMSx2PTNEITEsbT0zRCEwLGc9M0QhMCx5PTNEITAsYj0zRCExLHc9M0QhIWQzLmZpc2hleWUs RT0zRDAsUz0zRCExLHg9M0Q9CiEwLFQ9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIjxzdHJvbmc+ Iit0KyI8L3N0cm9uZz4ifSxOPTNEZnVuY3Rpb24oZSx0LG4pez0KcmV0dXJuIjxzdHJvbmc+Iitu KyI8L3N0cm9uZz4ifSxDPTNEZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoMz4iK2UrIjwvaDM+ PQoiKyI8cD4iK3IrIjwvcD4ifSxrPTNEe30sTD0zRG51bGwsQT0zRGQzLmRpc3BhdGNoKCJ0b29s dGlwU2hvdyIsInRvb2x0aXBIaWQ9CmUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksTz0z RCJObyBEYXRhIEF2YWlsYWJsZS4iLE09M0QwO3QueFNjYWxlKGgpLj0KeVNjYWxlKHApLG4ub3Jp ZW50KCJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5vcmllbnQoYj8icmlnaHQiOiJsZWZ0Iiku dGljPQprUGFkZGluZygxMCksby5heGlzKCJ4IiksdS5heGlzKCJ5Iikscy51cGRhdGVTdGF0ZSgh MSk7dmFyIF8sRCxQPTNEZnVuY3Rpb249CihpLHMpe3ZhciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0 TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksZj0zRD0KaS5wb3NbMF0rKHMu b2Zmc2V0TGVmdHx8MCksbD0zRHAucmFuZ2UoKVswXSthLnRvcCsocy5vZmZzZXRUb3B8fDApLGM9 M0RoLnJhPQpuZ2UoKVswXSthLmxlZnQrKHMub2Zmc2V0TGVmdHx8MCksZD0zRGkucG9zWzFdKyhz Lm9mZnNldFRvcHx8MCksdj0zRG4udGlja0Y9Cm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50 SW5kZXgpKSxtPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaT0KbnRJbmRleCkp O1QhPTNEbnVsbCYmZS50b29sdGlwLnNob3coW2YsbF0sVChpLnNlcmllcy5rZXksdixtLGksQiks Im4iLDEscywiPQp4LW52dG9vbHRpcCIpLE4hPTNEbnVsbCYmZS50b29sdGlwLnNob3coW2MsZF0s TihpLnNlcmllcy5rZXksdixtLGksQiksImUiLDE9CixzLCJ5LW52dG9vbHRpcCIpLEMhPTNEbnVs bCYmZS50b29sdGlwLnNob3coW28sdV0sQyhpLnNlcmllcy5rZXksdixtLGkucG9pbj0KdC50b29s dGlwLGksQiksaS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX0sSD0zRFt7a2V5OiJNYWduaWZ5Iixk aXNhYmxlZDohMH1dPQo7cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXtBLnRvb2x0aXBIaWRlKGU9CiksZDMuc2VsZWN0KCIubnYtY2hhcnQt Iit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iKz0KZS5w b2ludEluZGV4KS5hdHRyKCJ5MSIsMCksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAu bnYtc2VyaWVzLSIrZS5zPQplcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludEluZGV4KS5h dHRyKCJ4MiIsdS5zaXplKCkpfSksQS5vbigidG9vbHRpcEg9CmlkZSIsZnVuY3Rpb24oKXt4JiZl LnRvb2x0aXAuY2xlYW51cCgpfSksQi5kaXNwYXRjaD0zREEsQi5zY2F0dGVyPTNEdCxCLmxlZz0K ZW5kPTNEaSxCLmNvbnRyb2xzPTNEcyxCLnhBeGlzPTNEbixCLnlBeGlzPTNEcixCLmRpc3RYPTNE byxCLmRpc3RZPTNEdSxkMy5yPQplYmluZChCLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJwb2ludEFj dGl2ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxlIiw9CiJ5U2NhbGUiLCJ6U2NhbGUi LCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJzaXpl Uj0KYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwiY2xp cFJhZGl1cyIsInVzZVZvcm9ub2kiPQopLEIub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMu YmluZChCKSxCLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/ KGEudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmEudG9wLGEucmlnaHQ9 M0R0eT0KcGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6YS5yaWdodCxhLmJvdHRv bT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QiPQp1bmRlZmluZWQiP2UuYm90dG9tOmEuYm90dG9tLGEu bGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmE9Ci5sZWZ0LEIpOmF9 LEIud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsQik6 Zn0sQi5oZT0KaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNE ZSxCKTpsfSxCLmNvbG9yPTNEZnVuY3Rpb24oPQp0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Yz0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxvLmNvbG9yKGMpLHU9Ci5jb2xvcihj KSxCKTpjfSxCLnNob3dEaXN0WD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhkPTNEZSxCKT0KOmR9LEIuc2hvd0Rpc3RZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHY9M0RlLEIpOnZ9LEIuc2hvd0NvPQpudHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsQik6d30sQi5zaG93TGVnZW5kPTNEZnU9Cm5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsQik6bX0sQi5zaG93WEF4aXM9M0Rm dW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxCKTpnfSxCLnNob3dZ QXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KHk9M0RlLEIpOnl9 LEIucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0 aD8oYj0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksQik6Yn0sQi5maXNoZXllPTNEZnVu Y3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQik6RX0sQi50b29sdGlw cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KHg9M0RlLEIpOnh9LEIu dG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0K PTNEZSxCKTpDfSxCLnRvb2x0aXBYQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhUPTNEZSxCPQopOlR9LEIudG9vbHRpcFlDb250ZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEIpOk59LEI9Ci5zdGF0ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPTNEZSxCKTprfSxCLmRlZmF1bHRTdGF0ZT0z RD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9M0RlLEIpOkx9LEIubm9E YXRhPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz0zRGUsQik6T30s Qi50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVu Z3RoPyhNPTNEZSxCKTpNfSxCfSxlLm1vZGVscy5zcGFya2xpbmU9M0RmdW5jdGlvbigpe2Z1bmN0 aW9uID0KZChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNEbi10LmxlZnQtdC5y aWdodCxkPTNEci10LnRvcC10LmJvdHRvPQptLHY9M0RkMy5zZWxlY3QodGhpcyk7cy5kb21haW4o bHx8ZDMuZXh0ZW50KGUsdSkpLnJhbmdlKGh8fFswLGldKSxvLmRvbWFpbig9CmN8fGQzLmV4dGVu dChlLGEpKS5yYW5nZShwfHxbZCwwXSk7dmFyIG09M0R2LnNlbGVjdEFsbCgiZy5udi13cmFwLm52 LXNwYXJrbD0KaW5lIikuZGF0YShbZV0pLGc9M0RtLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3BhPQpya2xpbmUiKSxiPTNEZy5hcHBlbmQoImciKSx3 PTNEbS5zZWxlY3QoImciKTttLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg9CiIrdC5sZWZ0 KyIsIit0LnRvcCsiKSIpO3ZhciBFPTNEbS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGZ1bmN0aW9u KGUpe3JldHVybj0KW2VdfSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLEUuZXhpdCgpLnJlbW92 ZSgpLEUuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oPQplLHQpe3JldHVybiBlLmNvbG9yfHxmKGUs dCl9KS5hdHRyKCJkIixkMy5zdmcubGluZSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm49CiBzKHUo ZSx0KSl9KS55KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShlLHQpKX0pKTt2YXIgUz0zRG0uc2Vs ZWN0QWxsKCJjaXJjbD0KZS5udi1wb2ludCIpLmRhdGEoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0 KXtpZih0IT0zRC0xKXt2YXIgbj0zRGVbdF07cmV0dXJuPQogbi5wb2ludEluZGV4PTNEdCxufXJl dHVybiBudWxsfXZhciB0PTNEZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpfSk9Cixy PTNEbih0Lmxhc3RJbmRleE9mKG8uZG9tYWluKClbMV0pKSxpPTNEbih0LmluZGV4T2Yoby5kb21h aW4oKVswXSkpLHM9M0RuKD0KdC5sZW5ndGgtMSk7cmV0dXJuW2kscixzXS5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIGUhPTNEbnVsbH0pfSk7Uy5lbnRlcigpPQouYXBwZW5kKCJjaXJjbGUiKSxT LmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImN4IixmdW5jdGlvbihlLHQpe3JldHVybiBzKHUoZSw9 CmUucG9pbnRJbmRleCkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShlLGUu cG9pbnRJbmRleCkpfSkuYXR0cj0KKCJyIiwyKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gdShlLGUucG9pbnRJbmRleCk9M0Q9M0RzLmRvbWFpbigpPQpbMV0/Im52LXBvaW50IG52 LWN1cnJlbnRWYWx1ZSI6YShlLGUucG9pbnRJbmRleCk9M0Q9M0RvLmRvbWFpbigpWzBdPyJudi1w b2k9Cm50IG52LW1pblZhbHVlIjoibnYtcG9pbnQgbnYtbWF4VmFsdWUifSl9KSxkfXZhciB0PTNE e3RvcDoyLHJpZ2h0OjAsYm90dG9tOj0KMixsZWZ0OjB9LG49M0Q0MDAscj0zRDMyLGk9M0QhMCxz PTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxpbmVhcigpPQosdT0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEZS51dGlscy5n ZXRDb2w9Cm9yKFsiIzAwMCJdKSxsLGMsaCxwO3JldHVybiBkLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoZCksZC5tYXJnaT0Kbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkPQoiP2UudG9wOnQu dG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmln aHQsdC5ib3Q9CnRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0 LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZT0KZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQu bGVmdCxkKTp0fSxkLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0 aD8obj0zRGUsZCk6bn0sZC5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocj0zRGU9CixkKTpyfSxkLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odT0zRGQzLmZ1bmN0b3IoZSksZCk6dX0sZD0KLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGQzLmZ1bmN0b3IoZSksZCk6YX0sZC54U2NhbGU9Cj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxkKTpzfSxkLnlTY2FsZT0z RGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLGQpOm99LGQueERv bWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KGw9M0RlLGQpOmx9 LGQueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPQo9M0Rl LGQpOmN9LGQueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9 M0RlLGQpOmh9LGQueVI9CmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocD0zRGUsZCk6cH0sZC5hbmltYXRlPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaT0zRGUsZCk6aX0sZC5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1PQpt ZW50cy5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENvbG9yKHQpLGQpOmZ9LGR9LGUubW9kZWxzLnNw YXJrbGluZVBsdXM9M0RmdW49CmN0aW9uKCl7ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5lYWNoKGZ1 bmN0aW9uKGMpe2Z1bmN0aW9uIE8oKXtpZihhKXJldHVybjt2YT0KciBlPTNEQy5zZWxlY3RBbGwo Ii5udi1ob3ZlclZhbHVlIikuZGF0YSh1KSxyPTNEZS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIo PQoiY2xhc3MiLCJudi1ob3ZlclZhbHVlIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwwKS5zdHls ZSgiZmlsbC1vcGFjaXR5IiwwKTs9CmUuZXhpdCgpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCku c3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCksZS5hdHRyKD0KInRyYW5zZm9ybSIsZnVu Y3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModC54KCkoY1tlXSxlKSkrIiwwKSJ9KS5zdHls ZSgiPQpzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMSk7aWYoIXUubGVu Z3RoKXJldHVybjtyLmFwcGVuZCgibGk9Cm5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIiwtbi50 b3ApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsYiksci5hcHBlbmQoInRleD0KdCIpLmF0dHIoImNs YXNzIiwibnYteFZhbHVlIikuYXR0cigieCIsLTYpLmF0dHIoInkiLC1uLnRvcCkuYXR0cigidGV4 dC1hbmNoPQpvciIsImVuZCIpLmF0dHIoImR5IiwiLjllbSIpLEMuc2VsZWN0KCIubnYtaG92ZXJW YWx1ZSAubnYteFZhbHVlIikudGV4dChmKHQ9Ci54KCkoY1t1WzBdXSx1WzBdKSkpLHIuYXBwZW5k KCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi15VmFsdWUiKS5hdHRyKCJ4Iiw2KT0KLmF0dHIoInki LC1uLnRvcCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmF0dHIoImR5IiwiLjllbSIpLEMu c2VsZWN0KCIuPQpudi1ob3ZlclZhbHVlIC5udi15VmFsdWUiKS50ZXh0KGwodC55KCkoY1t1WzBd XSx1WzBdKSkpfWZ1bmN0aW9uIE0oKXtmdW5jdGk9Cm9uIHIoZSxuKXt2YXIgcj0zRE1hdGguYWJz KHQueCgpKGVbMF0sMCktbiksaT0zRDA7Zm9yKHZhciBzPTNEMDtzPGUubGVuZ3RoOz0KcysrKU1h dGguYWJzKHQueCgpKGVbc10scyktbik8ciYmKHI9M0RNYXRoLmFicyh0LngoKShlW3NdLHMpLW4p LGk9M0RzKTtyZXR1PQpybiBpfWlmKGEpcmV0dXJuO3ZhciBlPTNEZDMubW91c2UodGhpcylbMF0t bi5sZWZ0O3U9M0RbcihjLE1hdGgucm91bmQocy5pbnY9CmVydChlKSkpXSxPKCl9dmFyIG09M0Rk My5zZWxlY3QodGhpcyksZz0zRChyfHxwYXJzZUludChtLnN0eWxlKCJ3aWR0aCIpKXx8OT0KNjAp LW4ubGVmdC1uLnJpZ2h0LGI9M0QoaXx8cGFyc2VJbnQobS5zdHlsZSgiaGVpZ2h0IikpfHw0MDAp LW4udG9wLW4uYm90dG9tPQo7di51cGRhdGU9M0RmdW5jdGlvbigpe3YoZSl9LHYuY29udGFpbmVy PTNEdGhpcztpZighY3x8IWMubGVuZ3RoKXt2YXIgdz0zRG09Ci5zZWxlY3RBbGwoIi5udi1ub0Rh dGEiKS5kYXRhKFtkXSk7cmV0dXJuIHcuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbD0K YXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5j aG9yIiwibWlkZGxlIiksdy5hPQp0dHIoIngiLG4ubGVmdCtnLzIpLmF0dHIoInkiLG4udG9wK2Iv MikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHZ9bS5zZWw9CmVjdEFsbCgiLm52LW5vRGF0 YSIpLnJlbW92ZSgpO3ZhciBFPTNEdC55KCkoY1tjLmxlbmd0aC0xXSxjLmxlbmd0aC0xKTtzPTNE dD0KLnhTY2FsZSgpLG89M0R0LnlTY2FsZSgpO3ZhciBTPTNEbS5zZWxlY3RBbGwoImcubnYtd3Jh cC5udi1zcGFya2xpbmVwbHVzIikuPQpkYXRhKFtjXSksVD0zRFMuZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zcGFya2xpbmU9CnBsdXMiKSxOPTNEVC5h cHBlbmQoImciKSxDPTNEUy5zZWxlY3QoImciKTtOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtcz0KcGFya2xpbmVXcmFwIiksTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXZhbHVl V3JhcCIpLE4uYXBwZW5kKCJnIikuYXR0PQpyKCJjbGFzcyIsIm52LWhvdmVyQXJlYSIpLFMuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5sZWZ0KyIsIituLnRvcCs9CiIpIik7dmFyIGs9 M0RDLnNlbGVjdCgiLm52LXNwYXJrbGluZVdyYXAiKTt0LndpZHRoKGcpLmhlaWdodChiKSxrLmNh bGwodCk7dj0KYXIgTD0zREMuc2VsZWN0KCIubnYtdmFsdWVXcmFwIiksQT0zREwuc2VsZWN0QWxs KCIubnYtY3VycmVudFZhbHVlIikuZGF0YShbPQpFXSk7QS5lbnRlcigpLmFwcGVuZCgidGV4dCIp LmF0dHIoImNsYXNzIiwibnYtY3VycmVudFZhbHVlIikuYXR0cigiZHgiLHA/LTg9Cjo4KS5hdHRy KCJkeSIsIi45ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLHA/ImVuZCI6InN0YXJ0IiksQS5hdHRy KCJ4IixnKyhwPz0Kbi5yaWdodDowKSkuYXR0cigieSIsaD9mdW5jdGlvbihlKXtyZXR1cm4gbyhl KX06MCkuc3R5bGUoImZpbGwiLHQuY29sb3IoKShjPQpbYy5sZW5ndGgtMV0sYy5sZW5ndGgtMSkp LnRleHQobChFKSksTi5zZWxlY3QoIi5udi1ob3ZlckFyZWEiKS5hcHBlbmQoInJlY3Q9CiIpLm9u KCJtb3VzZW1vdmUiLE0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXthPTNEIWF9KS5vbigibW91c2Vv dXQiLGZ1bmN0aW9uKD0KKXt1PTNEW10sTygpfSksQy5zZWxlY3QoIi5udi1ob3ZlckFyZWEgcmVj dCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7PQpyZXR1cm4idHJhbnNsYXRlKCIrIC1u LmxlZnQrIiwiKyAtbi50b3ArIikifSkuYXR0cigid2lkdGgiLGcrbi5sZWZ0K24ucmlnaHQ9Ciku YXR0cigiaGVpZ2h0IixiK24udG9wKX0pLHZ9dmFyIHQ9M0RlLm1vZGVscy5zcGFya2xpbmUoKSxu PTNEe3RvcDoxNSxyaWdodD0KOjEwMCxib3R0b206MTAsbGVmdDo1MH0scj0zRG51bGwsaT0zRG51 bGwscyxvLHU9M0RbXSxhPTNEITEsZj0zRGQzLmZvcm1hdCgiPQosciIpLGw9M0RkMy5mb3JtYXQo IiwuMmYiKSxjPTNEITAsaD0zRCEwLHA9M0QhMSxkPTNEIk5vIERhdGEgQXZhaWxhYmxlLiI7cmU9 CnR1cm4gdi5zcGFya2xpbmU9M0R0LGQzLnJlYmluZCh2LHQsIngiLCJ5IiwieFNjYWxlIiwieVNj YWxlIiwiY29sb3IiKSx2Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh2KSx2 Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KG4udG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm4udG9wLG4ucmlnaHQ9M0R0eXBlb2Yg ZS49CnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6bi5yaWdodCxuLmJvdHRvbT0zRHR5cGVv ZiBlLmJvdHRvbSE9M0QidW5kZWZpbj0KZWQiP2UuYm90dG9tOm4uYm90dG9tLG4ubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om4ubGVmdCx2PQopOm59LHYud2lkdGg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsdik6cn0sdi5oZWln aHQ9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSx2KTppfSx2 LnhUaWNrRm9ybWF0PTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0z RGUsdik6Zn0sdi55VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5s ZW5ndGg/KGw9M0RlLHYpOmx9LHYuc2hvd1ZhbHVlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW49Cmd0aD8oYz0zRGUsdik6Y30sdi5hbGlnblZhbHVlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLD0Kdik6aH0sdi5yaWdodEFsaWduVmFsdWU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsdik6cH0sPQp2Lm5vRGF0 YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx2KTpkfSx2fSxl Lm1vZGVscy5zdGE9CmNrZWRBcmVhPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBnKGUpe3JldHVybiBl LmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9M0RuLXQubD0KZWZ0LXQucmlnaHQsYj0zRHItdC50b3At dC5ib3R0b20sdz0zRGQzLnNlbGVjdCh0aGlzKTtwPTNEdi54U2NhbGUoKSxkPTNEdi55PQpTY2Fs ZSgpO3ZhciBFPTNEZTtlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnNlcmllc0luZGV4PTNEdCxl LnZhbHVlcz0zRGUudmE9Cmx1ZXMubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUuaW5kZXg9M0Ru LGUuc2VyaWVzSW5kZXg9M0R0LGV9KX0pO3ZhciBTPTNEZT0KLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZS5kaXNhYmxlZH0pO2U9M0RkMy5sYXlvdXQuc3RhY2soKS5vcmRlcihsKS5vZmZzPQpl dChmKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkueChvKS55KHUpLm91dChm dW5jdGlvbihlLHQsbil7dmE9CnIgcj0zRHUoZSk9M0Q9M0Q9M0QwPzA6bjtlLmRpc3BsYXk9M0R7 eTpyLHkwOnR9fSkoUyk7dmFyIFQ9M0R3LnNlbGVjdEFsbCgiZz0KLm52LXdyYXAubnYtc3RhY2tl ZGFyZWEiKS5kYXRhKFtlXSksTj0zRFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs PQoibnZkMyBudi13cmFwIG52LXN0YWNrZWRhcmVhIiksQz0zRE4uYXBwZW5kKCJkZWZzIiksaz0z RE4uYXBwZW5kKCJnIiksTD0zRFQ9Ci5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtYXJlYVdyYXAiKSxrLmFwcGVuZCgiZyIpLmF0dHIoIj0KY2xhc3MiLCJudi1zY2F0 dGVyV3JhcCIpLFQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRv cCsiPQopIiksdi53aWR0aChhKS5oZWlnaHQoYikueChvKS55KGZ1bmN0aW9uKGUpe3JldHVybiBl LmRpc3BsYXkueStlLmRpc3BsYXkueTA9Cn0pLmZvcmNlWShbMF0pLmNvbG9yKGUubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0luZGV4KT0KfSkpO3ZhciBBPTNE TC5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVtKGUpO0EuY2FsbCh2KSxDLmFwcGVuZCgi Y2xpcFBhPQp0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1jbGlwLSIrcykuYXBwZW5kKCJyZWN0Iiks VC5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIis9CnMrIiByZWN0IikuYXR0cigid2lkdGgiLGEpLmF0 dHIoImhlaWdodCIsYiksTC5hdHRyKCJjbGlwLXBhdGgiLGg/InVybCgjbnYtZT0KZGdlLWNsaXAt IitzKyIpIjoiIik7dmFyIE89M0RkMy5zdmcuYXJlYSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm4g cChvKGUsdCkpPQp9KS55MChmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3BsYXkueTApfSkueTEo ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGE9CnkueStlLmRpc3BsYXkueTApfSkuaW50ZXJw b2xhdGUoYyksTT0zRGQzLnN2Zy5hcmVhKCkueChmdW5jdGlvbihlLHQpe3JldHVybj0KIHAobyhl LHQpKX0pLnkwKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlzcGxheS55MCl9KS55MShmdW5jdGlv bihlKXtyZXR1cm4gPQpkKGUuZGlzcGxheS55MCl9KSxfPTNETC5zZWxlY3QoIi5udi1hcmVhV3Jh cCIpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGE9CnRhKGZ1bmN0aW9uKGUpe3JldHVybiBl fSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLD0KdCl7 cmV0dXJuIm52LWFyZWEgbnYtYXJlYS0iK3R9KS5hdHRyKCJkIixmdW5jdGlvbihlLHQpe3JldHVy biBNKGUudmFsdWVzLGUuPQpzZXJpZXNJbmRleCl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihl LHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciI9CiwhMCksbS5hcmVhTW91c2VvdmVy KHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50LnBhZz0K ZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24o ZSx0KXtkMy5zZWxlY3QodGhpPQpzKS5jbGFzc2VkKCJob3ZlciIsITEpLG0uYXJlYU1vdXNlb3V0 KHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50LnA9CmFnZVgsZDMuZXZlbnQucGFn ZVldLHNlcmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oZSx0 KT0Ke2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLG0uYXJlYUNsaWNrKHtwb2lu dDplLHNlcmllczplLmtleSxwb3M6PQpbZDMuZXZlbnQucGFnZVgsZDMuZXZlbnQucGFnZVldLHNl cmllc0luZGV4OmUuc2VyaWVzSW5kZXh9KX0pLF8uZXhpdCgpLnJlbW89CnZlKCksXy5zdHlsZSgi ZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgpfSku c3R5bD0KZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxpKGUsZS5zZXJp ZXNJbmRleCl9KSxfLmF0dHIoImQiLGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4gTyhlLnZhbHVlcyx0 KX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIuYXJlYSIsZnU9Cm5jdGlvbihlKXtM LnNlbGVjdCgiLm52LWNoYXJ0LSIrcysiIC5udi1hcmVhLSIrZS5zZXJpZXNJbmRleCkuY2xhc3Nl ZCgiaG92ZT0KciIsITApfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LmFyZWEiLGZ1 bmN0aW9uKGUpe0wuc2VsZWN0KCIubnYtY2hhPQpydC0iK3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVz SW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxnLmQzX3N0YWNrZWRPZmZzZXQ9Cl9zdGFja1Bl cmNlbnQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRGUubGVuZ3RoLG49M0RlWzBdLmxlbmd0aCxyPTNE MS90LGkscyxvLD0KYT0zRFtdO2ZvcihzPTNEMDtzPG47KytzKXtmb3IoaT0zRDAsbz0zRDA7aTxF Lmxlbmd0aDtpKyspbys9M0R1KEVbaV0udmFsdWVzPQpbc10pO2lmKG8pZm9yKGk9M0QwO2k8dDtp KyspZVtpXVtzXVsxXS89M0RvO2Vsc2UgZm9yKGk9M0QwO2k8dDtpKyspZVtpXVtzXVs9CjFdPTNE cn1mb3Iocz0zRDA7czxuOysrcylhW3NdPTNEMDtyZXR1cm4gYX19KSxnfXZhciB0PTNEe3RvcDow LHJpZ2h0OjAsYm90dD0Kb206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZS51dGlscy5k ZWZhdWx0Q29sb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoPQoucmFuZG9tKCkqMWU1KSxvPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGUueH0sdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGE9M0Q9CiJz dGFjayIsZj0zRCJ6ZXJvIixsPTNEImRlZmF1bHQiLGM9M0QibGluZWFyIixoPTNEITEscCxkLHY9 M0RlLm1vZGVscy5zY2F0dD0KZXIoKSxtPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9v bHRpcEhpZGUiLCJhcmVhQ2xpY2siLCJhcmVhTW91c2VvdmVyPQoiLCJhcmVhTW91c2VvdXQiKTty ZXR1cm4gdi5zaXplKDIuMikuc2l6ZURvbWFpbihbMi4yLDIuMl0pLHYuZGlzcGF0Y2gub24oImU9 CmxlbWVudENsaWNrLmFyZWEiLGZ1bmN0aW9uKGUpe20uYXJlYUNsaWNrKGUpfSksdi5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlbz0KdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2Uu cG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sbS50b29sdGlwPQpTaG93KGUpfSksdi5kaXNw YXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe20udG9vbHRpcEhp ZGU9CihlKX0pLGcuZGlzcGF0Y2g9M0RtLGcuc2NhdHRlcj0zRHYsZDMucmViaW5kKGcsdiwiaW50 ZXJhY3RpdmUiLCJzaXplIiwieFNjYT0KbGUiLCJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwi eURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJmPQpvcmNlWCIsImZvcmNl WSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImNsaXBSYWRpdXMiLCJo aWdobGk9CmdodFBvaW50IiwiY2xlYXJIaWdobGlnaHRzIiksZy5vcHRpb25zPTNEZS51dGlscy5v cHRpb25zRnVuYy5iaW5kKGcpLGcueD0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG89M0RkMy5mdW5jdG9yKGUpLGcpOm99LGcueT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9yKGUpLGcpOnV9LGcubWFyZ2luPTNEZnVu Y3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3Ah PTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdD0KLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNE InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuPQpib3R0b20h PTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9 M0QidW5kZWZpbmU9CmQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53aWR0aD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZT0KLGcpOm59LGcuaGVpZ2h0PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGcpOnJ9LGcuY2xpcEVkPQpnZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxnKTpofSxnLmNvbG9y PTNEZnVuY3Rpb24odCk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUudXRpbHMuZ2V0 Q29sb3IodCksZyk6aX0sZy5vZmZzZXQ9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhmPTNEZSxnKTpmfSxnLm9yZGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQpl bnRzLmxlbmd0aD8obD0zRGUsZyk6bH0sZy5zdHlsZT0zRGZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVu dHMubGVuZ3RoKXJldHVybiA9CmE7YT0zRGU7c3dpdGNoKGEpe2Nhc2Uic3RhY2siOmcub2Zmc2V0 KCJ6ZXJvIiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nhcz0KZSJzdHJlYW0iOmcub2Zmc2V0 KCJ3aWdnbGUiKSxnLm9yZGVyKCJpbnNpZGUtb3V0Iik7YnJlYWs7Y2FzZSJzdHJlYW0tY2VudGVy PQoiOmcub2Zmc2V0KCJzaWxob3VldHRlIiksZy5vcmRlcigiaW5zaWRlLW91dCIpO2JyZWFrO2Nh c2UiZXhwYW5kIjpnLm9mZnNldCg9CiJleHBhbmQiKSxnLm9yZGVyKCJkZWZhdWx0Iik7YnJlYWs7 Y2FzZSJzdGFja19wZXJjZW50IjpnLm9mZnNldChnLmQzX3N0YWNrZT0KZE9mZnNldF9zdGFja1Bl cmNlbnQpLGcub3JkZXIoImRlZmF1bHQiKX1yZXR1cm4gZ30sZy5pbnRlcnBvbGF0ZT0zRGZ1bmN0 aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLGcpOmN9LGd9LGUubW9kZWxz LnN0YWNrZWRBcmVhQ2hhcnQ9M0RmdW49CmN0aW9uKCl7ZnVuY3Rpb24gTSh5KXtyZXR1cm4geS5l YWNoKGZ1bmN0aW9uKHkpe3ZhciBBPTNEZDMuc2VsZWN0KHRoaXMpLF89Cj0zRHRoaXMsRD0zRChh fHxwYXJzZUludChBLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdodCxQPTNEKGZ8 fHBhcj0Kc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tO00udXBk YXRlPTNEZnVuY3Rpb24oKXtBLmNhbGwoPQpNKX0sTS5jb250YWluZXI9M0R0aGlzLFMuZGlzYWJs ZWQ9M0R5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTs9CmlmKCF4KXt2YXIg SDt4PTNEe307Zm9yKEggaW4gUylTW0hdaW5zdGFuY2VvZiBBcnJheT94W0hdPTNEU1tIXS5zbGlj ZSgwKTp4Wz0KSF09M0RTW0hdfWlmKCF5fHwheS5sZW5ndGh8fCF5LmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkuPQpsZW5ndGgpe3ZhciBCPTNEQS5zZWxlY3RBbGwo Ii5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEIuZW50ZXIoKS5hcHBlbmQ9CigidGV4dCIp LmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUo InRleHQtYW5jaD0Kb3IiLCJtaWRkbGUiKSxCLmF0dHIoIngiLHUubGVmdCtELzIpLmF0dHIoInki LHUudG9wK1AvMikudGV4dChmdW5jdGlvbihlKXtyPQpldHVybiBlfSksTX1BLnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLnJlbW92ZSgpLGI9M0R0LnhTY2FsZSgpLHc9M0R0LnlTY2FsZSg9Cik7dmFy IGo9M0RBLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXN0YWNrZWRBcmVhQ2hhcnQiKS5kYXRhKFt5 XSksRj0zRGouZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFw IG52LXN0YWNrZWRBcmVhQ2hhcnQiKS5hcHBlbmQoImciPQopLEk9M0RqLnNlbGVjdCgiZyIpO0Yu YXBwZW5kKCJyZWN0Iikuc3R5bGUoIm9wYWNpdHkiLDApLEYuYXBwZW5kKCJnIikuYXR0cig9CiJj bGFzcyIsIm52LXggbnYtYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52 LWF4aXMiKSxGLmFwcGVuZD0KKCJnIikuYXR0cigiY2xhc3MiLCJudi1zdGFja2VkV3JhcCIpLEYu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXPQpyYXAiKSxGLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGE9 CnNzIiwibnYtaW50ZXJhY3RpdmUiKSxJLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixEKS5h dHRyKCJoZWlnaHQiLFApO2lmKD0KaCl7dmFyIHE9M0RjP0QtQzpEO2kud2lkdGgocSksSS5zZWxl Y3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oeSkuY2FsbChpKSx1PQoudG9wIT0zRGkuaGVpZ2h0 KCkmJih1LnRvcD0zRGkuaGVpZ2h0KCksUD0zRChmfHxwYXJzZUludChBLnN0eWxlKCJoZWlnaHQi KSk9Cnx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYT0KdGUoIisoRC1xKSsiLCIrIC11LnRvcCsiKSIpfWlmKGMp e3ZhciBSPTNEW3trZXk6TC5zdGFja2VkfHwiU3RhY2tlZCIsbWV0YUtlPQp5OiJTdGFja2VkIixk aXNhYmxlZDp0LnN0eWxlKCkhPTNEInN0YWNrIixzdHlsZToic3RhY2sifSx7a2V5Okwuc3RyZWFt fHwiU3Q9CnJlYW0iLG1ldGFLZXk6IlN0cmVhbSIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJzdHJl YW0iLHN0eWxlOiJzdHJlYW0ifSx7a2V5Oj0KTC5leHBhbmRlZHx8IkV4cGFuZGVkIixtZXRhS2V5 OiJFeHBhbmRlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJleHBhbmQiLHN0PQp5bGU6ImV4cGFu ZCJ9LHtrZXk6TC5zdGFja19wZXJjZW50fHwiU3RhY2sgJSIsbWV0YUtleToiU3RhY2tfUGVyY2Vu dCIsZGlzYWI9CmxlZDp0LnN0eWxlKCkhPTNEInN0YWNrX3BlcmNlbnQiLHN0eWxlOiJzdGFja19w ZXJjZW50In1dO0M9M0RrLmxlbmd0aC8zKjI2MD0KLFI9M0RSLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4gay5pbmRleE9mKGUubWV0YUtleSkhPTNEPTNELTF9KSxzLndpZHRoKEMpPQouY29sb3Io WyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksSS5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1 bShSKS5jYWxsKHM9CiksdS50b3AhPTNETWF0aC5tYXgocy5oZWlnaHQoKSxpLmhlaWdodCgpKSYm KHUudG9wPTNETWF0aC5tYXgocy5oZWlnaHQoKSxpLj0KaGVpZ2h0KCkpLFA9M0QoZnx8cGFyc2VJ bnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tKSxJLnNlbGVjPQp0KCIu bnYtY29udHJvbHNXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLXUudG9w KyIpIil9ai5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UubGVmdCsiLCIrdS50b3Ar IikiKSx2JiZJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLj0KYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrRCsiLDApIiksbSYmKG8ud2lkdGgoRCkuaGVpZ2h0KFApLm1hcmdpbih7bGVmPQp0 OnUubGVmdCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoQSkueFNjYWxlKGIpLGouc2VsZWN0KCIu bnYtaW50ZXJhY3RpdmUiKS49CmNhbGwobykpLHQud2lkdGgoRCkuaGVpZ2h0KFApO3ZhciBVPTNE SS5zZWxlY3QoIi5udi1zdGFja2VkV3JhcCIpLmRhdHVtKHkpOz0KVS5jYWxsKHQpLHAmJihuLnNj YWxlKGIpLnRpY2tzKEQvMTAwKS50aWNrU2l6ZSgtUCwwKSxJLnNlbGVjdCgiLm52LXgubnYtYXhp PQpzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitQKyIpIiksSS5zZWxlY3QoIi5u di14Lm52LWF4aXMiKS5jYWxsKG49CikpLGQmJihyLnNjYWxlKHcpLnRpY2tzKHQub2Zmc2V0KCk9 M0Q9M0Qid2lnZ2xlIj8wOlAvMzYpLnRpY2tTaXplKC1ELDApLnNldD0KVGlja0Zvcm1hdCh0LnN0 eWxlKCk9M0Q9M0QiZXhwYW5kInx8dC5zdHlsZSgpPTNEPTNEInN0YWNrX3BlcmNlbnQiP2QzLmZv cm1hPQp0KCIlIik6RSksSS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSx0LmRpc3Bh dGNoLm9uKCJhcmVhQ2xpY2sudG9nZ2w9CmUiLGZ1bmN0aW9uKGUpe3kuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkfSkubGVuZ3RoPTNEPTNEPTNEMT95Lj0KZm9yRWFjaChmdW5j dGlvbihlKXtlLmRpc2FibGVkPTNEITF9KTp5LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2Fi bGVkPTNEPQpuIT0zRGUuc2VyaWVzSW5kZXh9KSxTLmRpc2FibGVkPTNEeS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuISFlLmRpc2FibGVkfSksTi49CnN0YXRlQ2hhbmdlKFMpLE0udXBkYXRlKCl9KSxp LmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Uy5kaXNhYj0KbGVkPTNEZS5k aXNhYmxlZCxOLnN0YXRlQ2hhbmdlKFMpLE0udXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdl bmRDbGljayIsPQpmdW5jdGlvbihlLG4pe2lmKCFlLmRpc2FibGVkKXJldHVybjtSPTNEUi5tYXAo ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9Cj0zRCEwLGV9KSxlLmRpc2FibGVkPTNEITEs dC5zdHlsZShlLnN0eWxlKSxTLnN0eWxlPTNEdC5zdHlsZSgpLE4uc3RhdGVDaGFuZz0KZShTKSxN LnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7 dC5jbGVhckhpZ2hsPQppZ2h0cygpO3ZhciBzLGEsZixjPTNEW107eS5maWx0ZXIoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWU9Ci5kaXNhYmxlZH0pLmZvckVhY2goZnVu Y3Rpb24obixyKXthPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WD0KVmFs dWUsTS54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixhLCEwKTt2YXIgbz0zRG4udmFsdWVzW2FdO2lm KHR5cGVvZiBvPTNEPTNEPQoidW5kZWZpbmVkIilyZXR1cm47dHlwZW9mIHM9M0Q9M0QidW5kZWZp bmVkIiYmKHM9M0RvKSx0eXBlb2YgZj0zRD0zRCJ1bmRlZmk9Cm5lZCImJihmPTNETS54U2NhbGUo KShNLngoKShvLGEpKSk7dmFyIHU9M0R0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kIj9vLmRpc3BsYT0K eS55Ok0ueSgpKG8sYSk7Yy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6dSxjb2xvcjpsKG4sbi5zZXJp ZXNJbmRleCksc3RhY2tlZFZhPQpsdWU6by5kaXNwbGF5fSl9KSxjLnJldmVyc2UoKTtpZihjLmxl bmd0aD4yKXt2YXIgaD0zRE0ueVNjYWxlKCkuaW52ZXJ0KGkubW89CnVzZVkpLHA9M0RJbmZpbml0 eSxkPTNEbnVsbDtjLmZvckVhY2goZnVuY3Rpb24oZSx0KXtoPTNETWF0aC5hYnMoaCk7dmFyIG49 Cj0zRE1hdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkwKSxyPTNETWF0aC5hYnMoZS5zdGFja2VkVmFs dWUueSk7aWYoaD49M0RuJiZoPD0KPTNEcituKXtkPTNEdDtyZXR1cm59fSksZCE9M0RudWxsJiYo Y1tkXS5oaWdobGlnaHQ9M0QhMCl9dmFyIHY9M0RuLnRpY2tGb3JtPQphdCgpKE0ueCgpKHMsYSkp LG09M0R0LnN0eWxlKCk9M0Q9M0QiZXhwYW5kIj9mdW5jdGlvbihlLHQpe3JldHVybiBkMy5mb3Jt YXQ9CigiLjElIikoZSl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIudGlja0Zvcm1hdCgpKGUpfTtv LnRvb2x0aXAucG9zaXRpb24oe2xlZj0KdDpmK3UubGVmdCx0b3A6aS5tb3VzZVkrdS50b3B9KS5j aGFydENvbnRhaW5lcihfLnBhcmVudE5vZGUpLmVuYWJsZWQoZykudmFsPQp1ZUZvcm1hdHRlciht KS5kYXRhKHt2YWx1ZTp2LHNlcmllczpjfSkoKSxvLnJlbmRlckd1aWRlTGluZShmKX0pLG8uZGlz cGF0Y2g9Ci5vbigiZWxlbWVudE1vdXNlb3V0IixmdW5jdGlvbihlKXtOLnRvb2x0aXBIaWRlKCks dC5jbGVhckhpZ2hsaWdodHMoKX0pLE4ubz0KbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2cm Jk8oZSxfLnBhcmVudE5vZGUpfSksTi5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0PQppb24oZSl7dHlw ZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJnkubGVuZ3RoPTNEPTNEPTNEZS5kaXNhYmxl ZC5sZW5ndGg9CiYmKHkuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9M0RlLmRpc2Fi bGVkW25dfSksUy5kaXNhYmxlZD0zRGUuZGlzYT0KYmxlZCksdHlwZW9mIGUuc3R5bGUhPTNEInVu ZGVmaW5lZCImJnQuc3R5bGUoZS5zdHlsZSksTS51cGRhdGUoKX0pfSksTX12YXIgPQp0PTNEZS5t b2RlbHMuc3RhY2tlZEFyZWEoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlz KCksaT0zRGUubW89CmRlbHMubGVnZW5kKCkscz0zRGUubW9kZWxzLmxlZ2VuZCgpLG89M0RlLmlu dGVyYWN0aXZlR3VpZGVsaW5lKCksdT0zRHt0b3A6Mz0KMCxyaWdodDoyNSxib3R0b206NTAsbGVm dDo2MH0sYT0zRG51bGwsZj0zRG51bGwsbD0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksPQpjPTNE ITAsaD0zRCEwLHA9M0QhMCxkPTNEITAsdj0zRCExLG09M0QhMSxnPTNEITAseT0zRGZ1bmN0aW9u KGUsdCxuLHIsaSl7cmU9CnR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBvbiAiK3QrIjwv cD4ifSxiLHcsRT0zRGQzLmZvcm1hdCgiLC4yZiIpLFM9Cj0zRHtzdHlsZTp0LnN0eWxlKCl9LHg9 M0RudWxsLFQ9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixOPTNEZDMuZGlzcGF0Y2goInRvbz0KbHRp cFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxDPTNEMjUw LGs9M0RbIlN0YWNrZWQiPQosIlN0cmVhbSIsIkV4cGFuZGVkIl0sTD0zRHt9LEE9M0QwO24ub3Jp ZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWU9Cm50KHY/InJpZ2h0IjoibGVmdCIp LHMudXBkYXRlU3RhdGUoITEpO3ZhciBPPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWz0K MF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0zRG4u dGlja0Zvcm1hdCgpKHQueCgpPQooaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50aWNrRm9y bWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPQo9M0R5KGkuc2VyaWVzLmtleSxh LGYsaSxNKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyk9 Cn07cmV0dXJuIHQuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtlLnBvcz0z RFtlLnBvc1swXSt1LmxlZnQsZT0KLnBvc1sxXSt1LnRvcF0sTi50b29sdGlwU2hvdyhlKX0pLHQu ZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbihlKXtOPQoudG9vbHRpcEhpZGUoZSl9 KSxOLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtnJiZlLnRvb2x0aXAuY2xlYW51cCgpfSks TS49CmRpc3BhdGNoPTNETixNLnN0YWNrZWQ9M0R0LE0ubGVnZW5kPTNEaSxNLmNvbnRyb2xzPTNE cyxNLnhBeGlzPTNEbixNLnlBeGlzPQo9M0RyLE0uaW50ZXJhY3RpdmVMYXllcj0zRG8sZDMucmVi aW5kKE0sdCwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiw9CiJ4RG9tYWluIiwieURv bWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJpbnRlcmFjdGl2ZSIsInVzZVZv cm9ubz0KaSIsIm9mZnNldCIsIm9yZGVyIiwic3R5bGUiLCJjbGlwRWRnZSIsImZvcmNlWCIsImZv cmNlWSIsImZvcmNlU2l6ZSIsImludGVyPQpwb2xhdGUiKSxNLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoTSksTS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVu dHMubGVuZ3RoPyh1LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp1LnRv cCx1LnJpZz0KaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnUucmln aHQsdS5ib3R0b209M0R0eXBlb2YgZS5ib3R0PQpvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp1 LmJvdHRvbSx1LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2U9Ci5sZWZ0OnUu bGVmdCxNKTp1fSxNLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGE9M0RlLE0pOj0KYX0sTS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZj0zRGUsTSk6Zn0sTS5jb2xvcj0zRGZ1PQpuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvbG9yKG4pLGkuY29sb3IobCksdC5jb2w9Cm9yKGwp LE0pOmx9LE0uc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGM9M0RlLE0pOj0KY30sTS5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGg9M0RlLE0pOmh9LE0uc2hvd1hBPQp4aXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsTSk6cH0sTS5zaG93WUF4aXM9M0RmdW5jdGk9Cm9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxNKTpkfSxNLnJpZ2h0QWxpZ25ZQXhp cz0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLHIub3JpZW50 KGU/InJpZ2h0IjoibGVmdCIpLE0pOnZ9LE0udXNlSW50ZXJhPQpjdGl2ZUd1aWRlbGluZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxlPTNEPTNEPTNEITAmJig9 Ck0uaW50ZXJhY3RpdmUoITEpLE0udXNlVm9yb25vaSghMSkpLE0pOm19LE0udG9vbHRpcD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KHk9M0RlLE0pOnl9LE0udG9vbHRp cHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhnPTNEZSxNKTpnfSxN LnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9 M0Q9CmUsTSk6eX0sTS5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhTPTNEZSxNKTpTfSxNLmRlZmF1bD0KdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHg9M0RlLE0pOnh9LE0ubm9EYXRhPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsTSk6VH0sTS50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5j dGlvbig9CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNEZSxNKTpBfSxNLmNvbnRyb2xz RGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KGs9M0RlLE0pOmt9 LE0uY29udHJvbExhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/ dHlwZW9mIGUhPTNEIm9iamVjdCI/TDooTD0zRGUsTSk6TH0sci5zZXRUaWNrRm9ybWF0PTNEci50 aWNrRm9ybWE9CnQsci50aWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KEU9M0RlLHIpOkV9LE19fSgpLGRlZj0KaW5lKCJwbHVnaW4vcGx1Z2lucy9udmQzL252 LmQzIixmdW5jdGlvbigpe30pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2NvPQptbW9uL2Nv bmZpZyIsWyJwbHVnaW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQiLCJwbHVnaW4vcGx1Z2lucy9udmQz L252LmQzIl0sZnU9Cm5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IiIs Y2F0ZWdvcnk6IiIsbGlicmFyeToiTlZEMyIsdGFnOj0KInN2ZyIsa2V5d29yZHM6InNtYWxsIn0p fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyL2NvbmZpZyIsWyJwbHVnaW4vPQpjaGFy dHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9 LGUse3RpdGxlOiJSZWc9CnVsYXIiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMiLGNvbHVtbnM6e3g6 e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZT0KbDohMCxpc19hdXRvOiEwLGlzX3Vu aXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19PQop fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX3N0YWNrZWQvY29uZmlnIixbInBsdWdp bi9jaGFydHMvbnZkMy9jb209Cm1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRl bmQoITAse30sZSx7dGl0bGU6IlN0YWNrZWQiLGNhdGVnb3J5Oj0KIkJhciBkaWFncmFtcyIsY29s dW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEw PQosaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6 ITB9fX0pfSksZGVmaW5lKCJwbHU9Cmdpbi9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRhbC9jb25m aWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXT0KLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSG9yaXpvbnRhbCIsY2F0ZWdvcnk6IkJhciBk aWFnPQpyYW1zIixzZXR0aW5nczp7eF9heGlzX3R5cGU6e2luaXQ6ImhpZGUifX0sY29sdW1uczp7 eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC09CmF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAsaXNf dW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzXz0KbnVtZXJpYzohMH19 fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRhbF9zdGFja2VkL2Nv bmZpZyIsPQpbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3Q9Cml0bGU6IlN0YWNrZWQgaG9yaXpvbnRhbCIsY2F0 ZWdvcnk6IkJhciBkaWFncmFtcyIsc2V0dGluZ3M6e3hfYXhpc190eXBlOntpbj0KaXQ6ImhpZGUi fX0sY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19h dXRvOiEwLGlzPQpfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251 bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW49Ci9jaGFydHMvbnZkMy9saW5lX2ZvY3VzL2Nv bmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aT0Kb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJMaW5lIHdpdGggZm9jdXMiLGNhdGVnb3J5 OiJPdGhlcnMiLHpvPQpvbWFibGU6Im5hdGl2ZSIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBm b3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiE9CjAsaXNfdW5pcXVlOiEwfSx5Ont0aXRs ZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbD0KdWdp bi9jaGFydHMvbnZkMy9waWUvY29uZmlnIixbInBsdWdpbi9wbHVnaW5zL252ZDMvbnYuZDMiXSxm dW5jdGlvbigpe3JldHVyPQpuICQuZXh0ZW5kKCEwLHt9LHt0aXRsZToiUGllIGNoYXJ0IixjYXRl Z29yeToiQXJlYSBjaGFydHMiLGxpYnJhcnk6Ik5WRDMiLHQ9CmFnOiJzdmciLGtleXdvcmRzOiJz bWFsbCIsY29sdW1uczp7bGFiZWw6e3RpdGxlOiJMYWJlbHMiLGlzX2xhYmVsOiEwLGlzX2F1dD0K bzohMH0seTp7dGl0bGU6IlZhbHVlcyIsaXNfbnVtZXJpYzohMH19LHNldHRpbmdzOnttYWluX3Nl cGFyYXRvcjp7dHlwZToic2VwPQphcmF0b3IiLHRpdGxlOiJQaWUgY2hhcnQgc2V0dGluZ3MifSxk b251dF9yYXRpbzp7dGl0bGU6IkRvbnV0IHJhdGlvIixpbmZvOiI9CkRldGVybWluZSBob3cgbGFy Z2UgdGhlIGRvbnV0IGhvbGUgd2lsbCBiZS4iLHR5cGU6InNlbGVjdCIsaW5pdDoiMC41IixkYXRh Oj0KW3tsYWJlbDoiNTAlIix2YWx1ZToiMC41In0se2xhYmVsOiIyNSUiLHZhbHVlOiIwLjI1In0s e2xhYmVsOiIxMCUiLHZhbHVlOiIwPQouMTAifSx7bGFiZWw6IjAlIix2YWx1ZToiMCJ9XX0sc2hv d19sZWdlbmQ6e3RpdGxlOiJTaG93IGxlZ2VuZCIsaW5mbzoiV291bGQ9CiB5b3UgbGlrZSB0byBh ZGQgYSBsZWdlbmQ/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoiZmFsc2UiLGRhdGE6W3tsYWJl bDoiWT0KZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1dfSxsYWJl bF9zZXBhcmF0b3I6e3R5cGU6InNlcGFyPQphdG9yIix0aXRsZToiTGFiZWwgc2V0dGluZ3MifSxs YWJlbF90eXBlOnt0aXRsZToiRG9udXQgbGFiZWwiLGluZm86IldoYXQgd289CnVsZCB5b3UgbGlr ZSB0byBzaG93IGZvciBlYWNoIHNsaWNlPyIsdHlwZToic2VsZWN0Iixpbml0OiJwZXJjZW50Iixk YXRhOlt7bD0KYWJlbDoiLS0gTm90aGluZyAtLSIsdmFsdWU6ImhpZGUiLGhpZGU6ImxhYmVsX291 dHNpZGUifSx7bGFiZWw6IkxhYmVsIGNvbHVtPQpuIix2YWx1ZToia2V5IixzaG93OiJsYWJlbF9v dXRzaWRlIn0se2xhYmVsOiJWYWx1ZSBjb2x1bW4iLHZhbHVlOiJ2YWx1ZSIsc2g9Cm93OiJsYWJl bF9vdXRzaWRlIn0se2xhYmVsOiJQZXJjZW50YWdlIix2YWx1ZToicGVyY2VudCIsc2hvdzoibGFi ZWxfb3V0c2lkZT0KIn1dfSxsYWJlbF9vdXRzaWRlOnt0aXRsZToiU2hvdyBvdXRzaWRlIixpbmZv OiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGxhYmVsPQpzIG91dHNpZGUgdGhlIGRvbnV0PyIsdHlw ZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6IlllcyIsdmE9Cmx1ZToi dHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sdXNlX3BhbmVsczp7aW5pdDoidHJ1 ZSIsaGlkZTohMH19fT0KKX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVh X2Z1bGwvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkPQozL2NvbW1vbi9jb25maWciXSxmdW5j dGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkV4cGFuZGVkIix6b289Cm1h YmxlOiEwLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29yZHM6ImRlZmF1bHQgc21hbGwiLGNv bHVtbnM6e3g6e3RpdGxlOj0KIlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRv OiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmPQpvciB5LWF4aXMiLGlzX251bWVy aWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvc3RhY2tlZGFyZWFfc3RyZWE9 Cm0vY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24o ZSl7cmV0dXJuICQuZXh0ZW5kKD0KITAse30sZSx7dGl0bGU6IlN0cmVhbSIsY2F0ZWdvcnk6IkFy ZWEgY2hhcnRzIix6b29tYWJsZTohMCxrZXl3b3JkczoiZGVmYXVsPQp0IHNtYWxsIixzaG93bWF4 bWluOiEwLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAs aXM9Cl9hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixp c19udW1lcmljOiEwfX19KX0pLGRlZj0KaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvaGlzdG9ncmFt L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpPQpnIl0sZnVuY3Rpb24o ZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIaXN0b2dyYW0iLGNhdGVnb3J5OiJE YXRhIHA9CnJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9vbCBmcm9tIFRvb2xzaGVkKSIs ZXhlY3V0ZToiaGlzdG9ncmFtIixrZXl3bz0KcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVt bnM6e3k6e3RpdGxlOiJPYnNlcnZhdGlvbnMiLGlzX251bWVyaWM6ITB9fSxzPQpldHRpbmdzOnt4 X2F4aXNfbGFiZWw6e2luaXQ6IlZhbHVlcyJ9LHlfYXhpc19sYWJlbDp7aW5pdDoiRGVuc2l0eSJ9 LHlfYXhpc189CnR5cGU6e2luaXQ6ImYifSx5X2F4aXNfcHJlY2lzaW9uOntpbml0OiIuMiJ9fX0p fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZD0KMy9saW5lL2NvbmZpZyIsWyJwbHVnaW4vY2hh cnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4PQp0ZW5kKCEw LHt9LGUse3RpdGxlOiJMaW5lIGNoYXJ0IixjYXRlZ29yeToiT3RoZXJzIix6b29tYWJsZTohMCxj b2x1bW5zOnt4Ons9CnRpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0 bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYT0KbHVlcyBmb3IgeS1heGlzIixpc19udW1l cmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3NjYXR0ZXIvY29uPQpmaWci LFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4g JC5leHRlbmQoITAse309CixlLHt0aXRsZToiU2NhdHRlciBwbG90IixjYXRlZ29yeToiT3RoZXJz Iix6b29tYWJsZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiVj0KYWx1ZXMgZm9yIHgtYXhpcyIsaXNf bnVtZXJpYzohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwPQp9 fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvc3RhY2tlZGFyZWEvY29uZmlnIixbInBs dWdpbi9jaGFydHMvbnZkMy89CmNvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5l eHRlbmQoITAse30sZSx7dGl0bGU6IlJlZ3VsYXIiLHpvb21hYj0KbGU6ITAsY2F0ZWdvcnk6IkFy ZWEgY2hhcnRzIixrZXl3b3JkczoiZGVmYXVsdCBzbWFsbCIsY29sdW1uczp7eDp7dGl0bGU6IlZh PQpsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5 Ont0aXRsZToiVmFsdWVzIGZvciA9CnktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUo InBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWciLFsicD0KbHVnaW4vY2hhcnRzL2Zv cm1zL2RlZmF1bHQiXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6 IiIsPQpjYXRlZ29yeToiIixsaWJyYXJ5OiJqcVBsb3QiLHRhZzoiZGl2Iix6b29tYWJsZTohMCxr ZXl3b3JkczoibWVkaXVtIixzZXR0aW49CmdzOntzZXBhcmF0b3JfZ3JpZDp7dGl0bGU6IkdyaWRz Iix0eXBlOiJzZXBhcmF0b3IifSx4X2F4aXNfZ3JpZDp7dGl0bGU6IkF4aT0KcyBncmlkIixpbmZv OiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGdyaWQgbGluZXMgZm9yIHRoZSBYIGF4aXM/Iix0eXBl OiJyYWRpPQpvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpbe2xhYmVsOiJPbiIsdmFsdWU6InRy dWUifSx7bGFiZWw6Ik9mZiIsdmFsdWU6ImY9CmFsc2UifV19LHlfYXhpc19ncmlkOnt0aXRsZToi QXhpcyBncmlkIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzaG93IGdyaWQgbD0KaW5lcyBmb3Ig dGhlIFkgYXhpcz8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJ0cnVlIixkYXRhOlt7bGFiZWw6 Ik9uIix2YWx1PQplOiJ0cnVlIn0se2xhYmVsOiJPZmYiLHZhbHVlOiJmYWxzZSJ9XX19fSl9KSxk ZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2I9CmFyL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRz L2pxcGxvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZT0KbmQoITAs e30sZSx7dGl0bGU6IlJlZ3VsYXIiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMiLGNvbHVtbnM6e3g6 e3RpdGxlOiJWYWx1PQplcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3Vu aXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS09CmF4aXMiLGlzX251bWVyaWM6ITB9fX0p fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9saW5lL2NvbmZpZyIsWyJwbHVnaT0Kbi9j aGFydHMvanFwbG90L2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQo ITAse30sZSx7dGl0bGU6PQoiTGluZSBjaGFydCIsY2F0ZWdvcnk6Ik90aGVycyIsY29sdW1uczp7 eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWI9CmVsOiEwLGlzX2F1dG86ITAsaXNf dW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fT0K fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L3NjYXR0ZXIvY29uZmlnIixbInBsdWdp bi9jaGFydHMvanFwbG90L2NvPQptbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4 dGVuZCghMCx7fSxlLHt0aXRsZToiU2NhdHRlciBwbG90IixjYXQ9CmVnb3J5OiJPdGhlcnMiLGNv bHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbnVtZXJpYzohMH0seTp7dGl0 bD0KZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7eF9heGlz X2dyaWQ6e2luaXQ6InRydWUifX19PQopfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9i b3hwbG90L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb209Cm1vbi9jb25maWciXSxm dW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkJveCBwbG90IixjYXRl Z29yeT0KOiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29s c2hlZCkiLGxpYnJhcnk6ImpxUGxvdCIsPQp0YWc6ImRpdiIsZXhlY3V0ZToiYm94cGxvdCIsa2V5 d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSIsY29sdW1uczp7eTp7dGl0bGU9CjoiT2JzZXJ2YXRp b25zIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3Nob3dfbGVnZW5kOntpbml0OiJmYWxzZSJ9 fX0pfSksZD0KZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2hpc3RvZ3JhbV9kaXNjcmV0ZS9j b25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsPQpvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24o ZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJEaXNjcmV0ZSBIaXM9CnRvZ3JhbSIs Y2F0ZWdvcnk6IkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9vbCBmcm9tIFRv b2xzaGVkKSIsZT0KeGVjdXRlOiJoaXN0b2dyYW1kaXNjcmV0ZSIsa2V5d29yZHM6InNtYWxsIG1l ZGl1bSBsYXJnZSIsY29sdW1uczp7eDp7dGl0bGU6PQoiT2JzZXJ2YXRpb25zIixpc19sYWJlbDoh MH19LHNldHRpbmdzOnt4X2F4aXNfbGFiZWw6e2luaXQ6IkJyZWFrcyJ9LHlfYXhpc189CmxhYmVs Ontpbml0OiJEZW5zaXR5In19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRt YXAvY29uZmlnIixbIj0KcGx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhdWx0Il0sZnVuY3Rpb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIPQplYXRtYXAiLGNhdGVnb3J5OiJPdGhl cnMiLGxpYnJhcnk6IkN1c3RvbSIsdGFnOiJzdmciLGtleXdvcmRzOiJzbWFsbCIsem9vbWE9CmJs ZTohMCxjb2x1bW5zOnt4Ont0aXRsZToiQ29sdW1uIGxhYmVscyIsaXNfbGFiZWw6ITAsaXNfbnVt ZXJpYzohMCxpc191bmlxdT0KZTohMH0seTp7dGl0bGU6IlJvdyBsYWJlbHMiLGlzX2xhYmVsOiEw LGlzX251bWVyaWM6ITAsaXNfdW5pcXVlOiEwfSx6Ont0aXRsPQplOiJPYnNlcnZhdGlvbiIsaXNf bnVtZXJpYzohMH19LHNldHRpbmdzOnt1c2VfcGFuZWxzOntpbml0OiJ0cnVlIixoaWRlOiEwfSw9 CmNvbG9yX3NldDp7dGl0bGU6IkNvbG9yIHNjaGVtZSIsaW5mbzoiU2VsZWN0IGEgY29sb3Igc2No ZW1lIGZvciB5b3VyIGhlYXRtYT0KcCIsdHlwZToic2VsZWN0Iixpbml0OiJqZXQiLGRhdGE6W3ts YWJlbDoiQ29sZC10by1Ib3QiLHZhbHVlOiJob3QifSx7bGFiZWw6PQoiQ29vbCIsdmFsdWU6ImNv b2wifSx7bGFiZWw6IkNvcHBlciIsdmFsdWU6ImNvcHBlciJ9LHtsYWJlbDoiR3JheSBzY2FsZSIs dmE9Cmx1ZToiZ3JheSJ9LHtsYWJlbDoiSmV0Iix2YWx1ZToiamV0In0se2xhYmVsOiJOby1HcmVl biIsdmFsdWU6Im5vX2dyZWVuIn0sez0KbGFiZWw6Ik9jZWFuIix2YWx1ZToib2NlYW4ifSx7bGFi ZWw6IlBvbGFyIix2YWx1ZToicG9sYXIifSx7bGFiZWw6IlJlZC10by1HPQpyZWVuIix2YWx1ZToi cmVkZ3JlZW4ifSx7bGFiZWw6IlJlZC10by1ncmVlbiAoc2F0dXJhdGVkKSIsdmFsdWU6InJlZDJn cmVlbiI9Cn0se2xhYmVsOiJSZWxpZWYiLHZhbHVlOiJyZWxpZWYifSx7bGFiZWw6IlNlaXNtb2dy YXBoIix2YWx1ZToic2VpcyJ9LHtsYWJlbD0KOiJTZWFsYW5kIix2YWx1ZToic2VhbGFuZCJ9LHts YWJlbDoiU3BsaXQiLHZhbHVlOiJzcGxpdCJ9LHtsYWJlbDoiV3lzaXd5ZyIsPQp2YWx1ZToid3lz aXd5ZyJ9XX0sdXJsX3RlbXBsYXRlOnt0aXRsZToiVXJsIHRlbXBsYXRlIixpbmZvOiJFbnRlciBh IHVybCB0byA9CmxpbmsgdGhlIGxhYmVscyB3aXRoIGV4dGVybmFsIHNvdXJjZXMuIFVzZSBfX0xB QkVMX18gYXMgcGxhY2Vob2xkZXIuIix0eXBlOj0KInRleHQiLGluaXQ6IiIscGxhY2Vob2xkZXI6 Imh0dHA6Ly9zb21ldXJsLmNvbT9pZD0zRF9fTEFCRUxfXyJ9fX0pfSksZGVmaW5lPQooInBsdWdp bi9jaGFydHMvb3RoZXJzL2hlYXRtYXBfY2x1c3Rlci9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9v dGhlcnMvaGVhdG09CmFwL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7 fSxlLHt0aXRsZToiQ2x1c3RlcmVkIEhlYXRtYXAiLD0KY2F0ZWdvcnk6IkRhdGEgcHJvY2Vzc2lu ZyAocmVxdWlyZXMgJ2NoYXJ0cycgdG9vbCBmcm9tIFRvb2xzaGVkKSIsZXhlY3V0ZToiPQpoZWF0 bWFwIixrZXl3b3Jkczoic21hbGwgbWVkaXVtIGxhcmdlIn0pfSksZGVmaW5lKCJwbHVnaW4vY2hh cnRzL3R5cGVzIixbInA9Cmx1Z2luL2NoYXJ0cy9udmQzL2Jhci9jb25maWciLCJwbHVnaW4vY2hh cnRzL252ZDMvYmFyX3N0YWNrZWQvY29uZmlnIiwicGx1Zz0KaW4vY2hhcnRzL252ZDMvYmFyX2hv cml6b250YWwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9ob3Jpem9udGFsX3N0PQph Y2tlZC9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvbGluZV9mb2N1cy9jb25maWciLCJwbHVn aW4vY2hhcnRzL252ZDMvcGk9CmUvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRh cmVhX2Z1bGwvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzLz0Kc3RhY2tlZGFyZWFfc3RyZWFt L2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9oaXN0b2dyYW0vY29uZmlnIiwicGx1Z2luL2No PQphcnRzL252ZDMvbGluZS9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvc2NhdHRlci9jb25m aWciLCJwbHVnaW4vY2hhcnRzL249CnZkMy9zdGFja2VkYXJlYS9jb25maWciLCJwbHVnaW4vY2hh cnRzL2pxcGxvdC9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9qcT0KcGxvdC9saW5lL2NvbmZp ZyIsInBsdWdpbi9jaGFydHMvanFwbG90L3NjYXR0ZXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9q cXBsPQpvdC9ib3hwbG90L2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90L2hpc3RvZ3JhbV9k aXNjcmV0ZS9jb25maWciLCJwbHVnaW49Ci9jaGFydHMvb3RoZXJzL2hlYXRtYXAvY29uZmlnIiwi cGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcF9jbHVzdGVyL2NvbmZpZz0KIl0sZnVuY3Rpb24o ZSx0LG4scixpLHMsbyx1LGEsZixsLGMsaCxwLGQsdixtLGcseSl7cmV0dXJuIEJhY2tib25lLk1v ZGVsLmV4PQp0ZW5kKHtkZWZhdWx0czp7bnZkM19iYXI6ZSxudmQzX2Jhcl9zdGFja2VkOnQsbnZk M19iYXJfaG9yaXpvbnRhbDpuLG52ZDNfYmE9CnJfaG9yaXpvbnRhbF9zdGFja2VkOnIsbnZkM19s aW5lX2ZvY3VzOmksbnZkM19zdGFja2VkYXJlYTpjLG52ZDNfc3RhY2tlZGFyZT0KYV9mdWxsOm8s bnZkM19zdGFja2VkYXJlYV9zdHJlYW06dSxudmQzX3BpZTpzLG52ZDNfbGluZTpmLG52ZDNfc2Nh dHRlcjpsLG52PQpkM19oaXN0b2dyYW06YSxqcXBsb3RfYmFyOmgsanFwbG90X2hpc3RvZ3JhbV9k aXNjcmV0ZTptLGpxcGxvdF9saW5lOnAsanFwbG89CnRfc2NhdHRlcjpkLGpxcGxvdF9ib3hwbG90 OnYsb3RoZXJzX2hlYXRtYXA6ZyxvdGhlcnNfaGVhdG1hcF9jbHVzdGVyOnl9fSl9KT0KLGRlZmlu ZSgicGx1Z2luL2FwcCIsWyJtdmMvdWkvdWktbW9kYWwiLCJtdmMvdWkvdWktcG9ydGxldCIsIm12 Yy91aS91aS1taXNjPQoiLCJ1dGlscy91dGlscyIsInBsdWdpbi9saWJyYXJ5L2pvYnMiLCJwbHVn aW4vbGlicmFyeS9kYXRhc2V0cyIsInBsdWdpbi9saWI9CnJhcnkvc3RvcmFnZSIsInV0aWxzL2Rl ZmVycmVkIiwicGx1Z2luL3ZpZXdzL3ZpZXdlciIsInBsdWdpbi92aWV3cy9lZGl0b3IiLD0KInBs dWdpbi9tb2RlbHMvY29uZmlnIiwicGx1Z2luL21vZGVscy9jaGFydCIsInBsdWdpbi9jaGFydHMv dHlwZXMiXSxmdW5jdGlvPQpuKGUsdCxuLHIsaSxzLG8sdSxhLGYsbCxjLGgpe3JldHVybiBCYWNr Ym9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGk9Cm9uKHQpe3RoaXMub3B0aW9ucz0z RHQsR2FsYXh5JiZHYWxheHkubW9kYWw/dGhpcy5tb2RhbD0zREdhbGF4eS5tb2RhbDp0aGlzLj0K bW9kYWw9M0RuZXcgZS5WaWV3LHRoaXMuY29uZmlnPTNEbmV3IGwsdGhpcy50eXBlcz0zRG5ldyBo LHRoaXMuY2hhcnQ9M0RuZXcgPQpjLHRoaXMuam9icz0zRG5ldyBpKHRoaXMpLHRoaXMuZGF0YXNl dHM9M0RuZXcgcyh0aGlzKSx0aGlzLnN0b3JhZ2U9M0RuZXcgbyg9CnRoaXMpLHRoaXMuZGVmZXJy ZWQ9M0RuZXcgdSx0aGlzLnZpZXdlcl92aWV3PTNEbmV3IGEodGhpcyksdGhpcy5lZGl0b3Jfdmll dz0KPTNEbmV3IGYodGhpcyksdGhpcy4kZWwuYXBwZW5kKHRoaXMudmlld2VyX3ZpZXcuJGVsKSx0 aGlzLiRlbC5hcHBlbmQodGhpcy5lPQpkaXRvcl92aWV3LiRlbCk7aWYoIXRoaXMuc3RvcmFnZS5s b2FkKCkpdGhpcy5nbygiZWRpdG9yIik7ZWxzZXt0aGlzLmdvKCJ2aWU9CndlciIpO3ZhciBuPTNE dGhpczt0aGlzLmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24oKXtuLmNoYXJ0LnRyaWdnZXIoInJl ZHJhdz0KIil9KX19LGdvOmZ1bmN0aW9uKGUpeyQoIi50b29sdGlwIikuaGlkZSgpO3N3aXRjaChl KXtjYXNlImVkaXRvciI6dGhpcy5lZGl0PQpvcl92aWV3LnNob3coKSx0aGlzLnZpZXdlcl92aWV3 LmhpZGUoKTticmVhaztjYXNlInZpZXdlciI6dGhpcy5lZGl0b3Jfdmlldy49CmhpZGUoKSx0aGlz LnZpZXdlcl92aWV3LnNob3coKX19LGNoYXJ0UGF0aDpmdW5jdGlvbihlKXt2YXIgdD0zRGUuc3Bs aXQoL18oLj0KKykvKTtyZXR1cm4gdC5sZW5ndGg+PTNEMj90WzBdKyIvIit0WzFdOihjb25zb2xl LmRlYnVnKCJGQUlMRUQgQXBwOmNoYXJ0UGF0PQpoKCkgLSBJbnZhbGlkIGZvcm1hdDogIitlKSx1 bmRlZmluZWQpfX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKCJtdmMv dWkvdWktbW9kYWwiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7 ZWxNYWk9Cm46ImJvZHkiLG9wdGlvbnNEZWZhdWx0Ont0aXRsZToidWktbW9kYWwiLGJvZHk6IiIs YmFja2Ryb3A6ITAsaGVpZ2h0Om51bGwsdz0KaWR0aDpudWxsLGNsb3NpbmdfZXZlbnRzOiExLGNs b3NpbmdfY2FsbGJhY2s6bnVsbH0sYnV0dG9uTGlzdDp7fSxpbml0aWFsaXplPQo6ZnVuY3Rpb24o ZSl7ZSYmdGhpcy5fY3JlYXRlKGUpfSxzaG93OmZ1bmN0aW9uKGUpe3RoaXMuaW5pdGlhbGl6ZShl KSx0aGlzLm89CnB0aW9ucy5oZWlnaHQ/KHRoaXMuJGJvZHkuY3NzKCJoZWlnaHQiLHRoaXMub3B0 aW9ucy5oZWlnaHQpLHRoaXMuJGJvZHkuY3NzKD0KIm92ZXJmbG93IiwiaGlkZGVuIikpOnRoaXMu JGJvZHkuY3NzKCJtYXgtaGVpZ2h0IiwkKHdpbmRvdykuaGVpZ2h0KCkvMiksdGhpPQpzLm9wdGlv bnMud2lkdGgmJnRoaXMuJGRpYWxvZy5jc3MoIndpZHRoIix0aGlzLm9wdGlvbnMud2lkdGgpLHRo aXMudmlzaWJsZT89CnRoaXMuJGVsLnNob3coKTp0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0aGlz LnZpc2libGU9M0QhMH0saGlkZTpmdW5jdGlvbigpez0KdGhpcy52aXNpYmxlPTNEITEsdGhpcy4k ZWwuZmFkZU91dCgiZmFzdCIpLHRoaXMub3B0aW9ucy5jbG9zaW5nX2NhbGxiYWNrJiZ0PQpoaXMu b3B0aW9ucy5jbG9zaW5nX2NhbGxiYWNrKCl9LGVuYWJsZUJ1dHRvbjpmdW5jdGlvbihlKXt2YXIg dD0zRHRoaXMuYnV0dG89Cm5MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCkucHJvcCgi ZGlzYWJsZWQiLCExKX0sZGlzYWJsZUJ1dHRvbjpmdW5jdD0KaW9uKGUpe3ZhciB0PTNEdGhpcy5i dXR0b25MaXN0W2VdO3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCkucHJvcCgiZGlzYWJsZWQiPQos ITApfSxzaG93QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2VdO3Ro aXMuJGJ1dHRvbnMuZmluZCg9CiIjIit0KS5zaG93KCl9LGhpZGVCdXR0b246ZnVuY3Rpb24oZSl7 dmFyIHQ9M0R0aGlzLmJ1dHRvbkxpc3RbZV07dGhpcy4kYnV0dD0Kb25zLmZpbmQoIiMiK3QpLmhp ZGUoKX0sZ2V0QnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2VdO3Jl PQp0dXJuIHRoaXMuJGJ1dHRvbnMuZmluZCgiIyIrdCl9LHNjcm9sbFRvcDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLiRib2R5LnNjcm89CmxsVG9wKCl9LF9jcmVhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9 M0R0aGlzO3RoaXMub3B0aW9ucz0zRF8uZGVmYXVsdHMoZSx0aGlzLj0Kb3B0aW9uc0RlZmF1bHQp LHRoaXMub3B0aW9ucy5ib2R5PTNEPTNEInByb2dyZXNzIiYmKHRoaXMub3B0aW9ucy5ib2R5PTNE JCgnPQo8ZGl2IGNsYXNzPTNEInByb2dyZXNzIHByb2dyZXNzLXN0cmlwZWQgYWN0aXZlIj48ZGl2 IGNsYXNzPTNEInByb2dyZXNzLWJhciA9CnByb2dyZXNzLWJhci1pbmZvIiBzdHlsZT0zRCJ3aWR0 aDoxMDAlIj48L2Rpdj48L2Rpdj4nKSksdGhpcy4kZWwmJih0aGlzLiRlbD0KLnJlbW92ZSgpLCQo ZG9jdW1lbnQpLm9mZigia2V5dXAudWktbW9kYWwiKSksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3Rl bXBsYXRlPQoodGhpcy5vcHRpb25zLnRpdGxlKSksdGhpcy4kZGlhbG9nPTNEdGhpcy4kZWwuZmlu ZCgiLm1vZGFsLWRpYWxvZyIpLHRoaXMuJGI9Cm9keT0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1i b2R5IiksdGhpcy4kZm9vdGVyPTNEdGhpcy4kZWwuZmluZCgiLm1vZGFsLWZvbz0KdGVyIiksdGhp cy4kYnV0dG9ucz0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b25zIiksdGhpcy4kYmFja2Ryb3A9M0R0 aGlzLiRlbC5mPQppbmQoIi5tb2RhbC1iYWNrZHJvcCIpLHRoaXMuJGJvZHkuaHRtbCh0aGlzLm9w dGlvbnMuYm9keSksdGhpcy5vcHRpb25zLmJhY2s9CmRyb3B8fHRoaXMuJGJhY2tkcm9wLnJlbW92 ZUNsYXNzKCJpbiIpO2lmKHRoaXMub3B0aW9ucy5idXR0b25zKXt0aGlzLmJ1dHRvbj0KTGlzdD0z RHt9O3ZhciBuPTNEMDskLmVhY2godGhpcy5vcHRpb25zLmJ1dHRvbnMsZnVuY3Rpb24oZSxyKXt2 YXIgaT0zRCJidXR0PQpvbi0iK24rKzt0LiRidXR0b25zLmFwcGVuZCgkKCc8YnV0dG9uIGlkPTNE IicraSsnIj48L2J1dHRvbj4nKS50ZXh0KGUpLmNsaWM9CmsocikpLmFwcGVuZCgiICIpLHQuYnV0 dG9uTGlzdFtlXT0zRGl9KX1lbHNlIHRoaXMuJGZvb3Rlci5oaWRlKCk7JCh0aGlzLmVsTT0KYWlu KS5hcHBlbmQoJCh0aGlzLmVsKSksdGhpcy5vcHRpb25zLmNsb3NpbmdfZXZlbnRzJiYoJChkb2N1 bWVudCkub24oImtleXVwPQoudWktbW9kYWwiLGZ1bmN0aW9uKGUpe2Uua2V5Q29kZT0zRD0zRDI3 JiZ0LmhpZGUoKX0pLHRoaXMuJGVsLmZpbmQoIi5tb2RhbC09CmJhY2tkcm9wIikub24oImNsaWNr IixmdW5jdGlvbigpe3QuaGlkZSgpfSkpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJz0K PGRpdiBjbGFzcz0zRCJ1aS1tb2RhbCBtb2RhbCI+PGRpdiBjbGFzcz0zRCJtb2RhbC1iYWNrZHJv cCBmYWRlIGluIiBzdHlsZT0KPTNEInotaW5kZXg6IC0xOyI+PC9kaXY+PGRpdiBjbGFzcz0zRCJt b2RhbC1kaWFsb2ciPjxkaXYgY2xhc3M9M0QibW9kYWwtY29uPQp0ZW50Ij48ZGl2IGNsYXNzPTNE Im1vZGFsLWhlYWRlciI+PGJ1dHRvbiB0eXBlPTNEImJ1dHRvbiIgY2xhc3M9M0QiY2xvc2UiIHM9 CnR5bGU9M0QiZGlzcGxheTogbm9uZTsiPiZ0aW1lczs8L2J1dHRvbj48aDQgY2xhc3M9M0QidGl0 bGUiPicrZSsiPC9oND4iKyI8Lz0KZGl2PiIrJzxkaXYgY2xhc3M9M0QibW9kYWwtYm9keSIgc3R5 bGU9M0QicG9zaXRpb246IHN0YXRpYzsiPjwvZGl2PicrJzxkaXYgPQpjbGFzcz0zRCJtb2RhbC1m b290ZXIiPicrJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyIgc3R5bGU9M0QiZmxvYXQ6IHJpZ2h0OyI+ PC89CmRpdj4nKyI8L2Rpdj4iKyI8L2RpdiIrIjwvZGl2PiIrIjwvZGl2PiJ9fSk7cmV0dXJue1Zp ZXc6ZX19KSxmdW5jdGlvbigpe3Zhcj0KIGU9M0R0aGlzLHQ9M0RlLl8sbj0zREFycmF5LnByb3Rv dHlwZSxyPTNET2JqZWN0LnByb3RvdHlwZSxpPTNERnVuY3Rpb24ucHJvPQp0b3R5cGUscz0zRG4u cHVzaCxvPTNEbi5zbGljZSx1PTNEbi5jb25jYXQsYT0zRHIudG9TdHJpbmcsZj0zRHIuaGFzT3du UHJvcGU9CnJ0eSxsPTNEQXJyYXkuaXNBcnJheSxjPTNET2JqZWN0LmtleXMsaD0zRGkuYmluZCxw PTNEZnVuY3Rpb24oZSl7aWYoZSBpbnN0YT0KbmNlb2YgcClyZXR1cm4gZTtpZighKHRoaXMgaW5z dGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5fd3JhcHBlZD0zRGV9PQo7dHlwZW9mIGV4 cG9ydHMhPTNEInVuZGVmaW5lZCI/KHR5cGVvZiBtb2R1bGUhPTNEInVuZGVmaW5lZCImJm1vZHVs ZS5leHBvcnQ9CnMmJihleHBvcnRzPTNEbW9kdWxlLmV4cG9ydHM9M0RwKSxleHBvcnRzLl89M0Rw KTplLl89M0RwLHAuVkVSU0lPTj0zRCIxLjcuMD0KIjt2YXIgZD0zRGZ1bmN0aW9uKGUsdCxuKXtp Zih0PTNEPTNEPTNEdm9pZCAwKXJldHVybiBlO3N3aXRjaChuPTNEPTNEbnVsbD8zPQo6bil7Y2Fz ZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4g ZnVuY3Rpb24obiw9CnIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0 aW9uKG4scixpKXtyZXR1cm4gZS5jYWxsKHQsbixyLD0KaSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rp b24obixyLGkscyl7cmV0dXJuIGUuY2FsbCh0LG4scixpLHMpfX1yZXR1cm4gZnVuY3RpPQpvbigp e3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19O3AuaXRlcmF0ZWU9M0RmdW5jdGlvbihlLHQs bil7cmV0dXJuIGU9M0Q9Cj0zRG51bGw/cC5pZGVudGl0eTpwLmlzRnVuY3Rpb24oZSk/ZChlLHQs bik6cC5pc09iamVjdChlKT9wLm1hdGNoZXMoZSk6cC5wcj0Kb3BlcnR5KGUpfSxwLmVhY2g9M0Rw LmZvckVhY2g9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuIGU7dD0KPTNE ZCh0LG4pO3ZhciByLGk9M0RlLmxlbmd0aDtpZihpPTNEPTNEPTNEK2kpZm9yKHI9M0QwO3I8aTty KyspdChlW3JdLHIsZSk7PQplbHNle3ZhciBzPTNEcC5rZXlzKGUpO2ZvcihyPTNEMCxpPTNEcy5s ZW5ndGg7cjxpO3IrKyl0KGVbc1tyXV0sc1tyXSxlKX1yZXQ9CnVybiBlfSxwLm1hcD0zRHAuY29s bGVjdD0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt0PTNEcC5pdD0K ZXJhdGVlKHQsbik7dmFyIHI9M0RlLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndGgmJnAua2V5cyhlKSxp PTNEKHJ8fGUpLmxlbmd0aCxzPQo9M0RBcnJheShpKSxvO2Zvcih2YXIgdT0zRDA7dTxpO3UrKylv PTNEcj9yW3VdOnUsc1t1XT0zRHQoZVtvXSxvLGUpO3JldHVybiA9CnN9O3ZhciB2PTNEIlJlZHVj ZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiO3AucmVkdWNlPTNEcC5mb2xk bD0KPTNEcC5pbmplY3Q9M0RmdW5jdGlvbihlLHQsbixyKXtlPTNEPTNEbnVsbCYmKGU9M0RbXSks dD0zRGQodCxyLDQpO3ZhciBpPTNEPQplLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndGgmJnAua2V5cyhl KSxzPTNEKGl8fGUpLmxlbmd0aCxvPTNEMCx1O2lmKGFyZ3VtZW50cy49Cmxlbmd0aDwzKXtpZigh cyl0aHJvdyBuZXcgVHlwZUVycm9yKHYpO249M0RlW2k/aVtvKytdOm8rK119Zm9yKDtvPHM7bysr KXU9Cj0zRGk/aVtvXTpvLG49M0R0KG4sZVt1XSx1LGUpO3JldHVybiBufSxwLnJlZHVjZVJpZ2h0 PTNEcC5mb2xkcj0zRGZ1bmN0aW9uKD0KZSx0LG4scil7ZT0zRD0zRG51bGwmJihlPTNEW10pLHQ9 M0RkKHQsciw0KTt2YXIgaT0zRGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0PQpoJiZwLmtleXMoZSks cz0zRChpfHxlKS5sZW5ndGgsbztpZihhcmd1bWVudHMubGVuZ3RoPDMpe2lmKCFzKXRocm93IG5l dyBUeXA9CmVFcnJvcih2KTtuPTNEZVtpP2lbLS1zXTotLXNdfXdoaWxlKHMtLSlvPTNEaT9pW3Nd OnMsbj0zRHQobixlW29dLG8sZSk7cmV0dT0Kcm4gbn0scC5maW5kPTNEcC5kZXRlY3Q9M0RmdW5j dGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9M0RwLml0ZXJhdGVlKHQsbiksPQpwLnNvbWUoZSxm dW5jdGlvbihlLG4saSl7aWYodChlLG4saSkpcmV0dXJuIHI9M0RlLCEwfSkscn0scC5maWx0ZXI9 M0RwLnNlbGU9CmN0PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNEW107cmV0dXJuIGU9M0Q9M0Ru dWxsP3I6KHQ9M0RwLml0ZXJhdGVlKHQsbikscD0KLmVhY2goZSxmdW5jdGlvbihlLG4saSl7dChl LG4saSkmJnIucHVzaChlKX0pLHIpfSxwLnJlamVjdD0zRGZ1bmN0aW9uKGUsdCxuPQope3JldHVy biBwLmZpbHRlcihlLHAubmVnYXRlKHAuaXRlcmF0ZWUodCkpLG4pfSxwLmV2ZXJ5PTNEcC5hbGw9 M0RmdW5jdGlvbig9CmUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4hMDt0PTNEcC5pdGVyYXRl ZSh0LG4pO3ZhciByPTNEZS5sZW5ndGghPTNEPTNEKz0KZS5sZW5ndGgmJnAua2V5cyhlKSxpPTNE KHJ8fGUpLmxlbmd0aCxzLG87Zm9yKHM9M0QwO3M8aTtzKyspe289M0RyP3Jbc106cztpPQpmKCF0 KGVbb10sbyxlKSlyZXR1cm4hMX1yZXR1cm4hMH0scC5zb21lPTNEcC5hbnk9M0RmdW5jdGlvbihl LHQsbil7aWYoZT0zRD0KPTNEbnVsbClyZXR1cm4hMTt0PTNEcC5pdGVyYXRlZSh0LG4pO3ZhciBy PTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtlPQp5cyhlKSxpPTNEKHJ8fGUpLmxlbmd0 aCxzLG87Zm9yKHM9M0QwO3M8aTtzKyspe289M0RyP3Jbc106cztpZih0KGVbb10sbyxlKSk9CnJl dHVybiEwfXJldHVybiExfSxwLmNvbnRhaW5zPTNEcC5pbmNsdWRlPTNEZnVuY3Rpb24oZSx0KXty ZXR1cm4gZT0zRD0zRG51bD0KbD8hMTooZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiYoZT0zRHAu dmFsdWVzKGUpKSxwLmluZGV4T2YoZSx0KT49M0QwKX0scC5pPQpudm9rZT0zRGZ1bmN0aW9uKGUs dCl7dmFyIG49M0RvLmNhbGwoYXJndW1lbnRzLDIpLHI9M0RwLmlzRnVuY3Rpb24odCk7cmV0dXI9 Cm4gcC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm4ocj90OmVbdF0pLmFwcGx5KGUsbil9KX0scC5w bHVjaz0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gcC5tYXAoZSxwLnByb3BlcnR5KHQpKX0scC53 aGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZmlsdGVyKGUsPQpwLm1hdGNoZXModCkpfSxw LmZpbmRXaGVyZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAuZmluZChlLHAubWF0Y2hlcyh0KSl9 LHA9Ci5tYXg9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0QtSW5maW5pdHksaT0zRC1JbmZpbml0 eSxzLG87aWYodD0zRD0zRG51bGwmJj0KZSE9M0RudWxsKXtlPTNEZS5sZW5ndGg9M0Q9M0Q9M0Qr ZS5sZW5ndGg/ZTpwLnZhbHVlcyhlKTtmb3IodmFyIHU9M0QwLGE9M0RlPQoubGVuZ3RoO3U8YTt1 Kyspcz0zRGVbdV0scz5yJiYocj0zRHMpfWVsc2UgdD0zRHAuaXRlcmF0ZWUodCxuKSxwLmVhY2go ZSxmdW49CmN0aW9uKGUsbixzKXtvPTNEdChlLG4scyk7aWYobz5pfHxvPTNEPTNEPTNELUluZmlu aXR5JiZyPTNEPTNEPTNELUluZmluaXR5KT0Kcj0zRGUsaT0zRG99KTtyZXR1cm4gcn0scC5taW49 M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0RJbmZpbml0eSxpPTNESW5maW5pPQp0eSxzLG87aWYo dD0zRD0zRG51bGwmJmUhPTNEbnVsbCl7ZT0zRGUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2U6 cC52YWx1ZXM9CihlKTtmb3IodmFyIHU9M0QwLGE9M0RlLmxlbmd0aDt1PGE7dSsrKXM9M0RlW3Vd LHM8ciYmKHI9M0RzKX1lbHNlIHQ9M0RwLml0ZT0KcmF0ZWUodCxuKSxwLmVhY2goZSxmdW5jdGlv bihlLG4scyl7bz0zRHQoZSxuLHMpO2lmKG88aXx8bz0zRD0zRD0zREluZmluaXR5PQomJnI9M0Q9 M0Q9M0RJbmZpbml0eSlyPTNEZSxpPTNEb30pO3JldHVybiByfSxwLnNodWZmbGU9M0RmdW5jdGlv bihlKXt2YXIgdD0KPTNEZSYmZS5sZW5ndGg9M0Q9M0Q9M0QrZS5sZW5ndGg/ZTpwLnZhbHVlcyhl KSxuPTNEdC5sZW5ndGgscj0zREFycmF5KG4pO2ZvPQpyKHZhciBpPTNEMCxzO2k8bjtpKyspcz0z RHAucmFuZG9tKDAsaSkscyE9M0Q9M0RpJiYocltpXT0zRHJbc10pLHJbc109M0R0W2k9Cl07cmV0 dXJuIHJ9LHAuc2FtcGxlPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PTNEPTNEbnVsbHx8bj8o ZS5sZW5ndGghPTNEPQo9M0QrZS5sZW5ndGgmJihlPTNEcC52YWx1ZXMoZSkpLGVbcC5yYW5kb20o ZS5sZW5ndGgtMSldKTpwLnNodWZmbGUoZSkuc2xpY2U9CigwLE1hdGgubWF4KDAsdCkpfSxwLnNv cnRCeT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0zRHAuaXRlcmF0ZWUodCxuKSxwLj0KcGx1 Y2socC5tYXAoZSxmdW5jdGlvbihlLG4scil7cmV0dXJue3ZhbHVlOmUsaW5kZXg6bixjcml0ZXJp YTp0KGUsbixyKX19KS5zPQpvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGUuY3JpdGVyaWEscj0z RHQuY3JpdGVyaWE7aWYobiE9M0Q9M0RyKXtpZihuPnJ8fG49Cj0zRD0zRD0zRHZvaWQgMClyZXR1 cm4gMTtpZihuPHJ8fHI9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuLTF9cmV0dXJuIGUuaW5kZXgtdD0K LmluZGV4fSksInZhbHVlIil9O3ZhciBtPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQs bixyKXt2YXIgaT0zRHt9O3JlPQp0dXJuIG49M0RwLml0ZXJhdGVlKG4scikscC5lYWNoKHQsZnVu Y3Rpb24ocixzKXt2YXIgbz0zRG4ocixzLHQpO2UoaSxyLG8pfSk9CixpfX07cC5ncm91cEJ5PTNE bShmdW5jdGlvbihlLHQsbil7cC5oYXMoZSxuKT9lW25dLnB1c2godCk6ZVtuXT0zRFt0XX0pLHAu aT0KbmRleEJ5PTNEbShmdW5jdGlvbihlLHQsbil7ZVtuXT0zRHR9KSxwLmNvdW50Qnk9M0RtKGZ1 bmN0aW9uKGUsdCxuKXtwLmhhcyhlPQosbik/ZVtuXSsrOmVbbl09M0QxfSkscC5zb3J0ZWRJbmRl eD0zRGZ1bmN0aW9uKGUsdCxuLHIpe249M0RwLml0ZXJhdGVlKG4sciw9CjEpO3ZhciBpPTNEbih0 KSxzPTNEMCxvPTNEZS5sZW5ndGg7d2hpbGUoczxvKXt2YXIgdT0zRHMrbz4+PjE7bihlW3VdKTxp P3M9Cj0zRHUrMTpvPTNEdX1yZXR1cm4gc30scC50b0FycmF5PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGU/cC5pc0FycmF5KGUpP28uY2FsbD0KKGUpOmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP3Au bWFwKGUscC5pZGVudGl0eSk6cC52YWx1ZXMoZSk6W119LHAuc2l6ZT0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGU9M0Q9M0RudWxsPzA6ZS5sZW5ndGg9M0Q9M0Q9M0QrZS5sZW5ndGg/ZS5sZW5ndGg6 cC5rPQpleXMoZSkubGVuZ3RofSxwLnBhcnRpdGlvbj0zRGZ1bmN0aW9uKGUsdCxuKXt0PTNEcC5p dGVyYXRlZSh0LG4pO3ZhciByPTNEW109CixpPTNEW107cmV0dXJuIHAuZWFjaChlLGZ1bmN0aW9u KGUsbixzKXsodChlLG4scyk/cjppKS5wdXNoKGUpfSksW3IsaV19LHAuZj0KaXJzdD0zRHAuaGVh ZD0zRHAudGFrZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0zRD0zRG51bGw/dm9pZCAwOnQ9 M0Q9M0RuPQp1bGx8fG4/ZVswXTp0PDA/W106by5jYWxsKGUsMCx0KX0scC5pbml0aWFsPTNEZnVu Y3Rpb24oZSx0LG4pe3JldHVybiBvLmNhbGw9CihlLDAsTWF0aC5tYXgoMCxlLmxlbmd0aC0odD0z RD0zRG51bGx8fG4/MTp0KSkpfSxwLmxhc3Q9M0RmdW5jdGlvbihlLHQsbil7cj0KZXR1cm4gZT0z RD0zRG51bGw/dm9pZCAwOnQ9M0Q9M0RudWxsfHxuP2VbZS5sZW5ndGgtMV06by5jYWxsKGUsTWF0 aC5tYXgoZS5sPQplbmd0aC10LDApKX0scC5yZXN0PTNEcC50YWlsPTNEcC5kcm9wPTNEZnVuY3Rp b24oZSx0LG4pe3JldHVybiBvLmNhbGwoZSx0PQo9M0Q9M0RudWxsfHxuPzE6dCl9LHAuY29tcGFj dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmZpbHRlcihlLHAuaWRlbnRpdHkpfTs9CnZhciBnPTNE ZnVuY3Rpb24oZSx0LG4scil7aWYodCYmcC5ldmVyeShlLHAuaXNBcnJheSkpcmV0dXJuIHUuYXBw bHkocixlKTtmbz0Kcih2YXIgaT0zRDAsbz0zRGUubGVuZ3RoO2k8bztpKyspe3ZhciBhPTNEZVtp XTshcC5pc0FycmF5KGEpJiYhcC5pc0FyZ3VtZW50PQpzKGEpP258fHIucHVzaChhKTp0P3MuYXBw bHkocixhKTpnKGEsdCxuLHIpfXJldHVybiByfTtwLmZsYXR0ZW49M0RmdW5jdGlvbig9CmUsdCl7 cmV0dXJuIGcoZSx0LCExLFtdKX0scC53aXRob3V0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIHAuZGlm ZmVyZW5jZShlLG8uYz0KYWxsKGFyZ3VtZW50cywxKSl9LHAudW5pcT0zRHAudW5pcXVlPTNEZnVu Y3Rpb24oZSx0LG4scil7aWYoZT0zRD0zRG51bGwpcmV0PQp1cm5bXTtwLmlzQm9vbGVhbih0KXx8 KHI9M0RuLG49M0R0LHQ9M0QhMSksbiE9M0RudWxsJiYobj0zRHAuaXRlcmF0ZWUobixyKSk9Cjt2 YXIgaT0zRFtdLHM9M0RbXTtmb3IodmFyIG89M0QwLHU9M0RlLmxlbmd0aDtvPHU7bysrKXt2YXIg YT0zRGVbb107aWYodCkoIT0Kb3x8cyE9M0Q9M0RhKSYmaS5wdXNoKGEpLHM9M0RhO2Vsc2UgaWYo bil7dmFyIGY9M0RuKGEsbyxlKTtwLmluZGV4T2YocyxmKTwwPQomJihzLnB1c2goZiksaS5wdXNo KGEpKX1lbHNlIHAuaW5kZXhPZihpLGEpPDAmJmkucHVzaChhKX1yZXR1cm4gaX0scC51bmlvbj0K PTNEZnVuY3Rpb24oKXtyZXR1cm4gcC51bmlxKGcoYXJndW1lbnRzLCEwLCEwLFtdKSl9LHAuaW50 ZXJzZWN0aW9uPTNEZnVuY3RpPQpvbihlKXtpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt2YXIgdD0z RFtdLG49M0Rhcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgcj0zRDA9CixpPTNEZS5sZW5ndGg7cjxp O3IrKyl7dmFyIHM9M0RlW3JdO2lmKHAuY29udGFpbnModCxzKSljb250aW51ZTtmb3IodmFyIG89 Cj0zRDE7bzxuO28rKylpZighcC5jb250YWlucyhhcmd1bWVudHNbb10scykpYnJlYWs7bz0zRD0z RD0zRG4mJnQucHVzaChzKX1yZT0KdHVybiB0fSxwLmRpZmZlcmVuY2U9M0RmdW5jdGlvbihlKXt2 YXIgdD0zRGcoby5jYWxsKGFyZ3VtZW50cywxKSwhMCwhMCxbXSk7PQpyZXR1cm4gcC5maWx0ZXIo ZSxmdW5jdGlvbihlKXtyZXR1cm4hcC5jb250YWlucyh0LGUpfSl9LHAuemlwPTNEZnVuY3Rpb24o ZSk9CntpZihlPTNEPTNEbnVsbClyZXR1cm5bXTt2YXIgdD0zRHAubWF4KGFyZ3VtZW50cywibGVu Z3RoIikubGVuZ3RoLG49M0RBcnJheT0KKHQpO2Zvcih2YXIgcj0zRDA7cjx0O3IrKyluW3JdPTNE cC5wbHVjayhhcmd1bWVudHMscik7cmV0dXJuIG59LHAub2JqZWN0PTNEPQpmdW5jdGlvbihlLHQp e2lmKGU9M0Q9M0RudWxsKXJldHVybnt9O3ZhciBuPTNEe307Zm9yKHZhciByPTNEMCxpPTNEZS5s ZW5ndGg9CjtyPGk7cisrKXQ/bltlW3JdXT0zRHRbcl06bltlW3JdWzBdXT0zRGVbcl1bMV07cmV0 dXJuIG59LHAuaW5kZXhPZj0zRGZ1bmN0aT0Kb24oZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVy bi0xO3ZhciByPTNEMCxpPTNEZS5sZW5ndGg7aWYobil7aWYodHlwZW9mIG4hPQo9M0QibnVtYmVy IilyZXR1cm4gcj0zRHAuc29ydGVkSW5kZXgoZSx0KSxlW3JdPTNEPTNEPTNEdD9yOi0xO3I9M0Ru PDA/TWF0aC49Cm1heCgwLGkrbik6bn1mb3IoO3I8aTtyKyspaWYoZVtyXT0zRD0zRD0zRHQpcmV0 dXJuIHI7cmV0dXJuLTF9LHAubGFzdEluZGV4Tz0KZj0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNE PTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRGUubGVuZ3RoO3R5cGVvZiBuPTNEPTNEPQoibnVtYmVy IiYmKHI9M0RuPDA/cituKzE6TWF0aC5taW4ocixuKzEpKTt3aGlsZSgtLXI+PTNEMClpZihlW3Jd PTNEPTNEPTNEdCk9CnJldHVybiByO3JldHVybi0xfSxwLnJhbmdlPTNEZnVuY3Rpb24oZSx0LG4p e2FyZ3VtZW50cy5sZW5ndGg8PTNEMSYmKHQ9M0RlfD0KfDAsZT0zRDApLG49M0RufHwxO3ZhciBy PTNETWF0aC5tYXgoTWF0aC5jZWlsKCh0LWUpL24pLDApLGk9M0RBcnJheShyKTtmb3IoPQp2YXIg cz0zRDA7czxyO3MrKyxlKz0zRG4paVtzXT0zRGU7cmV0dXJuIGl9O3ZhciB5PTNEZnVuY3Rpb24o KXt9O3AuYmluZD0zRGY9CnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKGgmJmUuYmluZD0zRD0zRD0z RGgpcmV0dXJuIGguYXBwbHkoZSxvLmNhbGwoYXJndW1lbj0KdHMsMSkpO2lmKCFwLmlzRnVuY3Rp b24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1PQpu Y3Rpb24iKTtyZXR1cm4gbj0zRG8uY2FsbChhcmd1bWVudHMsMikscj0zRGZ1bmN0aW9uKCl7aWYo dGhpcyBpbnN0YW5jZW9mIHI9Cil7eS5wcm90b3R5cGU9M0RlLnByb3RvdHlwZTt2YXIgaT0zRG5l dyB5O3kucHJvdG90eXBlPTNEbnVsbDt2YXIgcz0zRGUuYXBwbD0KeShpLG4uY29uY2F0KG8uY2Fs bChhcmd1bWVudHMpKSk7cmV0dXJuIHAuaXNPYmplY3Qocyk/czppfXJldHVybiBlLmFwcGx5KHQs PQpuLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkpfSxyfSxwLnBhcnRpYWw9M0RmdW5jdGlvbihl KXt2YXIgdD0zRG8uY2FsbChhcmc9CnVtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj0z RDAscj0zRHQuc2xpY2UoKTtmb3IodmFyIGk9M0QwLHM9M0RyLmxlbj0KZ3RoO2k8cztpKyspcltp XT0zRD0zRD0zRHAmJihyW2ldPTNEYXJndW1lbnRzW24rK10pO3doaWxlKG48YXJndW1lbnRzLmxl bmd0PQpoKXIucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIGUuYXBwbHkodGhpcyxyKX19LHAu YmluZEFsbD0zRGZ1bmN0aW9uKGUpe3Y9CmFyIHQsbj0zRGFyZ3VtZW50cy5sZW5ndGgscjtpZihu PD0zRDEpdGhyb3cgbmV3IEVycm9yKCJiaW5kQWxsIG11c3QgYmUgcGFzcz0KZWQgZnVuY3Rpb24g bmFtZXMiKTtmb3IodD0zRDE7dDxuO3QrKylyPTNEYXJndW1lbnRzW3RdLGVbcl09M0RwLmJpbmQo ZVtyXSxlPQopO3JldHVybiBlfSxwLm1lbW9pemU9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEZnVu Y3Rpb24ocil7dmFyIGk9M0RuLmNhY2hlLHM9Cj0zRHQ/dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6 cjtyZXR1cm4gcC5oYXMoaSxzKXx8KGlbc109M0RlLmFwcGx5KHRoaXMsYXJndT0KbWVudHMpKSxp W3NdfTtyZXR1cm4gbi5jYWNoZT0zRHt9LG59LHAuZGVsYXk9M0RmdW5jdGlvbihlLHQpe3ZhciBu PTNEby5jYWxsPQooYXJndW1lbnRzLDIpO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0 dXJuIGUuYXBwbHkobnVsbCxuKX0sdCl9LHAuZGU9CmZlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBw LmRlbGF5LmFwcGx5KHAsW2UsMV0uY29uY2F0KG8uY2FsbChhcmd1bWVudHMsMSkpKT0KfSxwLnRo cm90dGxlPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxvPTNEbnVsbCx1PTNEMDtufHwobj0z RHt9KTt2YXIgYT0KPTNEZnVuY3Rpb24oKXt1PTNEbi5sZWFkaW5nPTNEPTNEPTNEITE/MDpwLm5v dygpLG89M0RudWxsLHM9M0RlLmFwcGx5KHIsaSksPQpvfHwocj0zRGk9M0RudWxsKX07cmV0dXJu IGZ1bmN0aW9uKCl7dmFyIGY9M0RwLm5vdygpOyF1JiZuLmxlYWRpbmc9M0Q9M0Q9M0Q9CiExJiYo dT0zRGYpO3ZhciBsPTNEdC0oZi11KTtyZXR1cm4gcj0zRHRoaXMsaT0zRGFyZ3VtZW50cyxsPD0z RDB8fGw+dD8oY2xlYT0KclRpbWVvdXQobyksbz0zRG51bGwsdT0zRGYscz0zRGUuYXBwbHkocixp KSxvfHwocj0zRGk9M0RudWxsKSk6IW8mJm4udHJhaWxpPQpuZyE9M0Q9M0QhMSYmKG89M0RzZXRU aW1lb3V0KGEsbCkpLHN9fSxwLmRlYm91bmNlPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9Cixz LG8sdSxhPTNEZnVuY3Rpb24oKXt2YXIgZj0zRHAubm93KCktbztmPHQmJmY+MD9yPTNEc2V0VGlt ZW91dChhLHQtZik6KHI9Cj0zRG51bGwsbnx8KHU9M0RlLmFwcGx5KHMsaSkscnx8KHM9M0RpPTNE bnVsbCkpKX07cmV0dXJuIGZ1bmN0aW9uKCl7cz0zRHRoaT0KcyxpPTNEYXJndW1lbnRzLG89M0Rw Lm5vdygpO3ZhciBmPTNEbiYmIXI7cmV0dXJuIHJ8fChyPTNEc2V0VGltZW91dChhLHQpKSxmPQom Jih1PTNEZS5hcHBseShzLGkpLHM9M0RpPTNEbnVsbCksdX19LHAud3JhcD0zRGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHAucGFydGk9CmFsKHQsZSl9LHAubmVnYXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodGhpcyxhcmd1bT0KZW50cyl9fSxwLmNvbXBvc2U9 M0RmdW5jdGlvbigpe3ZhciBlPTNEYXJndW1lbnRzLHQ9M0RlLmxlbmd0aC0xO3JldHVybiBmdW5j PQp0aW9uKCl7dmFyIG49M0R0LHI9M0RlW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt3aGlsZShu LS0pcj0zRGVbbl0uY2FsbCh0aGk9CnMscik7cmV0dXJuIHJ9fSxwLmFmdGVyPTNEZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLWU8MSlyZXR1cm4gdD0KLmFwcGx5KHRoaXMsYXJn dW1lbnRzKX19LHAuYmVmb3JlPTNEZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24o KXtyPQpldHVybi0tZT4wP249M0R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0PTNEbnVsbCxufX0s cC5vbmNlPTNEcC5wYXJ0aWFsKHAuYmU9CmZvcmUsMikscC5rZXlzPTNEZnVuY3Rpb24oZSl7aWYo IXAuaXNPYmplY3QoZSkpcmV0dXJuW107aWYoYylyZXR1cm4gYyhlKTt2YT0KciB0PTNEW107Zm9y KHZhciBuIGluIGUpcC5oYXMoZSxuKSYmdC5wdXNoKG4pO3JldHVybiB0fSxwLnZhbHVlcz0zRGZ1 bmN0aW9uPQooZSl7dmFyIHQ9M0RwLmtleXMoZSksbj0zRHQubGVuZ3RoLHI9M0RBcnJheShuKTtm b3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0KPTNEZVt0W2ldXTtyZXR1cm4gcn0scC5wYWlycz0z RGZ1bmN0aW9uKGUpe3ZhciB0PTNEcC5rZXlzKGUpLG49M0R0Lmxlbmd0aCxyPQo9M0RBcnJheShu KTtmb3IodmFyIGk9M0QwO2k8bjtpKyspcltpXT0zRFt0W2ldLGVbdFtpXV1dO3JldHVybiByfSxw LmludmVydD0KPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R7fSxuPTNEcC5rZXlzKGUpO2Zvcih2YXIg cj0zRDAsaT0zRG4ubGVuZ3RoO3I8aTtyKyspPQp0W2VbbltyXV1dPTNEbltyXTtyZXR1cm4gdH0s cC5mdW5jdGlvbnM9M0RwLm1ldGhvZHM9M0RmdW5jdGlvbihlKXt2YXIgdD0zRFs9Cl07Zm9yKHZh ciBuIGluIGUpcC5pc0Z1bmN0aW9uKGVbbl0pJiZ0LnB1c2gobik7cmV0dXJuIHQuc29ydCgpfSxw LmV4dGVuZD0zRD0KZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuIGU7dmFyIHQs bjtmb3IodmFyIHI9M0QxLGk9M0Rhcmd1bWVudHMuPQpsZW5ndGg7cjxpO3IrKyl7dD0zRGFyZ3Vt ZW50c1tyXTtmb3IobiBpbiB0KWYuY2FsbCh0LG4pJiYoZVtuXT0zRHRbbl0pfXJldHU9CnJuIGV9 LHAucGljaz0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRHt9LGk7aWYoZT0zRD0zRG51bGwpcmV0 dXJuIHI7aWYocC5pcz0KRnVuY3Rpb24odCkpe3Q9M0RkKHQsbik7Zm9yKGkgaW4gZSl7dmFyIHM9 M0RlW2ldO3QocyxpLGUpJiYocltpXT0zRHMpfX1lbHNlPQp7dmFyIGE9M0R1LmFwcGx5KFtdLG8u Y2FsbChhcmd1bWVudHMsMSkpO2U9M0RuZXcgT2JqZWN0KGUpO2Zvcih2YXIgZj0zRDAsbD0KPTNE YS5sZW5ndGg7ZjxsO2YrKylpPTNEYVtmXSxpIGluIGUmJihyW2ldPTNEZVtpXSl9cmV0dXJuIHJ9 LHAub21pdD0zRGZ1bmN0PQppb24oZSx0LG4pe2lmKHAuaXNGdW5jdGlvbih0KSl0PTNEcC5uZWdh dGUodCk7ZWxzZXt2YXIgcj0zRHAubWFwKHUuYXBwbHkoW109CixvLmNhbGwoYXJndW1lbnRzLDEp KSxTdHJpbmcpO3Q9M0RmdW5jdGlvbihlLHQpe3JldHVybiFwLmNvbnRhaW5zKHIsdCl9fXJldD0K dXJuIHAucGljayhlLHQsbil9LHAuZGVmYXVsdHM9M0RmdW5jdGlvbihlKXtpZighcC5pc09iamVj dChlKSlyZXR1cm4gZTtmb3IoPQp2YXIgdD0zRDEsbj0zRGFyZ3VtZW50cy5sZW5ndGg7dDxuO3Qr Kyl7dmFyIHI9M0Rhcmd1bWVudHNbdF07Zm9yKHZhciBpIGluIHI9CillW2ldPTNEPTNEPTNEdm9p ZCAwJiYoZVtpXT0zRHJbaV0pfXJldHVybiBlfSxwLmNsb25lPTNEZnVuY3Rpb24oZSl7cmV0dXJu ID0KcC5pc09iamVjdChlKT9wLmlzQXJyYXkoZSk/ZS5zbGljZSgpOnAuZXh0ZW5kKHt9LGUpOmV9 LHAudGFwPTNEZnVuY3Rpb24oZSx0PQope3JldHVybiB0KGUpLGV9O3ZhciBiPTNEZnVuY3Rpb24o ZSx0LG4scil7aWYoZT0zRD0zRD0zRHQpcmV0dXJuIGUhPTNEPTNEMHw9CnwxL2U9M0Q9M0Q9M0Qx L3Q7aWYoZT0zRD0zRG51bGx8fHQ9M0Q9M0RudWxsKXJldHVybiBlPTNEPTNEPTNEdDtlIGluc3Rh bmNlbz0KZiBwJiYoZT0zRGUuX3dyYXBwZWQpLHQgaW5zdGFuY2VvZiBwJiYodD0zRHQuX3dyYXBw ZWQpO3ZhciBpPTNEYS5jYWxsKGUpO2lmPQooaSE9M0Q9M0RhLmNhbGwodCkpcmV0dXJuITE7c3dp dGNoKGkpe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3Q9CnJpbmddIjpyZXR1 cm4iIitlPTNEPTNEIiIrdDtjYXNlIltvYmplY3QgTnVtYmVyXSI6aWYoK2UhPTNEPTNEK2UpcmV0 dXJuK3QhPQo9M0Q9M0QrdDtyZXR1cm4rZT0zRD0zRD0zRDA/MS8rZT0zRD0zRD0zRDEvdDorZT0z RD0zRD0zRCt0O2Nhc2UiW29iamVjdCBEYXQ9CmVdIjpjYXNlIltvYmplY3QgQm9vbGVhbl0iOnJl dHVybitlPTNEPTNEPTNEK3R9aWYodHlwZW9mIGUhPTNEIm9iamVjdCJ8fHR5cD0KZW9mIHQhPTNE Im9iamVjdCIpcmV0dXJuITE7dmFyIHM9M0RuLmxlbmd0aDt3aGlsZShzLS0paWYobltzXT0zRD0z RD0zRGUpcmV0PQp1cm4gcltzXT0zRD0zRD0zRHQ7dmFyIG89M0RlLmNvbnN0cnVjdG9yLHU9M0R0 LmNvbnN0cnVjdG9yO2lmKG8hPTNEPTNEdSYmImM9Cm9uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVj dG9yImluIHQmJiEocC5pc0Z1bmN0aW9uKG8pJiZvIGluc3RhbmNlb2YgbyYmcC5pcz0KRnVuY3Rp b24odSkmJnUgaW5zdGFuY2VvZiB1KSlyZXR1cm4hMTtuLnB1c2goZSksci5wdXNoKHQpO3ZhciBm LGw7aWYoaT0zRD0KPTNEPTNEIltvYmplY3QgQXJyYXldIil7Zj0zRGUubGVuZ3RoLGw9M0RmPTNE PTNEPTNEdC5sZW5ndGg7aWYobCl3aGlsZShmLS0pPQppZighKGw9M0RiKGVbZl0sdFtmXSxuLHIp KSlicmVha31lbHNle3ZhciBjPTNEcC5rZXlzKGUpLGg7Zj0zRGMubGVuZ3RoLGw9M0Q9CnAua2V5 cyh0KS5sZW5ndGg9M0Q9M0Q9M0RmO2lmKGwpd2hpbGUoZi0tKXtoPTNEY1tmXTtpZighKGw9M0Rw Lmhhcyh0LGgpJiZiKD0KZVtoXSx0W2hdLG4scikpKWJyZWFrfX1yZXR1cm4gbi5wb3AoKSxyLnBv cCgpLGx9O3AuaXNFcXVhbD0zRGZ1bmN0aW9uKGUsdCl7PQpyZXR1cm4gYihlLHQsW10sW10pfSxw LmlzRW1wdHk9M0RmdW5jdGlvbihlKXtpZihlPTNEPTNEbnVsbClyZXR1cm4hMDtpZihwLmk9CnNB cnJheShlKXx8cC5pc1N0cmluZyhlKXx8cC5pc0FyZ3VtZW50cyhlKSlyZXR1cm4gZS5sZW5ndGg9 M0Q9M0Q9M0QwO2Zvcih2YT0KciB0IGluIGUpaWYocC5oYXMoZSx0KSlyZXR1cm4hMTtyZXR1cm4h MH0scC5pc0VsZW1lbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4hPQohZSYmZS5ub2RlVHlwZT0zRD0z RD0zRDF9LHAuaXNBcnJheT0zRGx8fGZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwoZSk9M0Q9M0Q9 Cj0zRCJbb2JqZWN0IEFycmF5XSJ9LHAuaXNPYmplY3Q9M0RmdW5jdGlvbihlKXt2YXIgdD0zRHR5 cGVvZiBlO3JldHVybiB0PTNEPQo9M0Q9M0QiZnVuY3Rpb24ifHx0PTNEPTNEPTNEIm9iamVjdCIm JiEhZX0scC5lYWNoKFsiQXJndW1lbnRzIiwiRnVuY3Rpb24iLCI9ClN0cmluZyIsIk51bWJlciIs IkRhdGUiLCJSZWdFeHAiXSxmdW5jdGlvbihlKXtwWyJpcyIrZV09M0RmdW5jdGlvbih0KXtyZXR1 cj0KbiBhLmNhbGwodCk9M0Q9M0Q9M0QiW29iamVjdCAiK2UrIl0ifX0pLHAuaXNBcmd1bWVudHMo YXJndW1lbnRzKXx8KHAuaXNBcmd1PQptZW50cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmhhcyhl LCJjYWxsZWUiKX0pLHR5cGVvZiAvLi8hPTNEImZ1bmN0aW9uIiYmKHA9Ci5pc0Z1bmN0aW9uPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uInx8ITF9KSxwLmlzRmlu aXRlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gaXNGaW5pdGUoZSkmJiFpc05hTihwYXJzZUZsb2F0 KGUpKX0scC5pc05hTj0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIHAuaXNOdW1iZXIoZSkmJmUhPTNE PTNEK2V9LHAuaXNCb29sZWFuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cj0zRD0zRD0zRCEwfHxl PTNEPTNEPTNEITF8fGEuY2FsbChlKT0zRD0zRD0zRCJbb2JqZWN0IEJvb2xlYW5dIn0scC5pc051 bGw9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEPTNEPTNEbnVsbH0scC5pc1VuZGVmaW5lZD0z RGZ1bmN0aW9uKGUpe3JldHVybiBlPQo9M0Q9M0Q9M0R2b2lkIDB9LHAuaGFzPTNEZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZSE9M0RudWxsJiZmLmNhbGwoZSx0KX0scC5ub0M9Cm9uZmxpY3Q9M0RmdW5j dGlvbigpe3JldHVybiBlLl89M0R0LHRoaXN9LHAuaWRlbnRpdHk9M0RmdW5jdGlvbihlKXtyZXR1 cm4gZT0KfSxwLmNvbnN0YW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu IGV9fSxwLm5vb3A9M0RmdW5jdGlvbigpPQp7fSxwLnByb3BlcnR5PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfX0scC5tYXRjaGVzPTNEZnU9Cm5jdGlvbihlKXt2 YXIgdD0zRHAucGFpcnMoZSksbj0zRHQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtpZihlPTNE PTNEbnVsbD0KKXJldHVybiFuO2U9M0RuZXcgT2JqZWN0KGUpO2Zvcih2YXIgcj0zRDA7cjxuO3Ir Kyl7dmFyIGk9M0R0W3JdLHM9M0RpWzBdO2lmPQooaVsxXSE9M0Q9M0RlW3NdfHwhKHMgaW4gZSkp cmV0dXJuITF9cmV0dXJuITB9fSxwLnRpbWVzPTNEZnVuY3Rpb24oZSx0LG4pe3Y9CmFyIHI9M0RB cnJheShNYXRoLm1heCgwLGUpKTt0PTNEZCh0LG4sMSk7Zm9yKHZhciBpPTNEMDtpPGU7aSsrKXJb aV09M0R0KGkpOz0KcmV0dXJuIHJ9LHAucmFuZG9tPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD0z RD0zRG51bGwmJih0PTNEZSxlPTNEMCksZStNYXRoPQouZmxvb3IoTWF0aC5yYW5kb20oKSoodC1l KzEpKX0scC5ub3c9M0REYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGU9CikuZ2V0 VGltZSgpfTt2YXIgdz0zRHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiIm cXVvdDsiLCInIjoiJj0KI3gyNzsiLCJgIjoiJiN4NjA7In0sRT0zRHAuaW52ZXJ0KHcpLFM9M0Rm dW5jdGlvbihlKXt2YXIgdD0zRGZ1bmN0aW9uKHQpe3JlPQp0dXJuIGVbdF19LG49M0QiKD86Iitw LmtleXMoZSkuam9pbigifCIpKyIpIixyPTNEUmVnRXhwKG4pLGk9M0RSZWdFeHAobiwiZyI9Cik7 cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEZT0zRD0zRG51bGw/IiI6IiIrZSxyLnRlc3Qo ZSk/ZS5yZXBsYWNlKGksdD0KKTplfX07cC5lc2NhcGU9M0RTKHcpLHAudW5lc2NhcGU9M0RTKEUp LHAucmVzdWx0PTNEZnVuY3Rpb24oZSx0KXtpZihlPTNEPTNEPQpudWxsKXJldHVybiB2b2lkIDA7 dmFyIG49M0RlW3RdO3JldHVybiBwLmlzRnVuY3Rpb24obik/ZVt0XSgpOm59O3ZhciB4PTNEMDs9 CnAudW5pcXVlSWQ9M0RmdW5jdGlvbihlKXt2YXIgdD0zRCsreCsiIjtyZXR1cm4gZT9lK3Q6dH0s cC50ZW1wbGF0ZVNldHRpbmdzPQo9M0R7ZXZhbHVhdGU6LzwlKFtcc1xTXSs/KSU+L2csaW50ZXJw b2xhdGU6LzwlPTNEKFtcc1xTXSs/KSU+L2csZXNjYXBlOi88JS09CihbXHNcU10rPyklPi9nfTt2 YXIgVD0zRC8oLileLyxOPTNEeyInIjoiJyIsIlxcIjoiXFwiLCJcciI6InIiLCJcbiI6Im4iLCJc dT0KMjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxDPTNEL1xcfCd8XHJ8XG58XHUyMDI4 fFx1MjAyOS9nLGs9M0RmdW5jdGlvPQpuKGUpe3JldHVybiJcXCIrTltlXX07cC50ZW1wbGF0ZT0z RGZ1bmN0aW9uKGUsdCxuKXshdCYmbiYmKHQ9M0RuKSx0PTNEcC5kZWY9CmF1bHRzKHt9LHQscC50 ZW1wbGF0ZVNldHRpbmdzKTt2YXIgcj0zRFJlZ0V4cChbKHQuZXNjYXBlfHxUKS5zb3VyY2UsKHQu aW50ZT0KcnBvbGF0ZXx8VCkuc291cmNlLCh0LmV2YWx1YXRlfHxUKS5zb3VyY2VdLmpvaW4oInwi KSsifCQiLCJnIiksaT0zRDAscz0zRCJfPQpfcCs9M0QnIjtlLnJlcGxhY2UocixmdW5jdGlvbih0 LG4scixvLHUpe3JldHVybiBzKz0zRGUuc2xpY2UoaSx1KS5yZXBsYWNlKEM9CixrKSxpPTNEdSt0 Lmxlbmd0aCxuP3MrPTNEIicrXG4oKF9fdD0zRCgiK24rIikpPTNEPTNEbnVsbD8nJzpfLmVzY2Fw ZShfX3QpKT0KK1xuJyI6cj9zKz0zRCInK1xuKChfX3Q9M0QoIityKyIpKT0zRD0zRG51bGw/Jyc6 X190KStcbiciOm8mJihzKz0zRCInO1xuIitvPQorIlxuX19wKz0zRCciKSx0fSkscys9M0QiJztc biIsdC52YXJpYWJsZXx8KHM9M0Qid2l0aChvYmp8fHt9KXtcbiIrcysifVxuIik9CixzPTNEInZh ciBfX3QsX19wPTNEJycsX19qPTNEQXJyYXkucHJvdG90eXBlLmpvaW4scHJpbnQ9M0RmdW5jdGlv bigpe19fcCs9Cj0zRF9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIrcysicmV0dXJuIF9fcDtc biI7dHJ5e3ZhciBvPTNEbmV3IEZ1bmN0aW9uKD0KdC52YXJpYWJsZXx8Im9iaiIsIl8iLHMpfWNh dGNoKHUpe3Rocm93IHUuc291cmNlPTNEcyx1fXZhciBhPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4g by5jYWxsKHRoaXMsZSxwKX0sZj0zRHQudmFyaWFibGV8fCJvYmoiO3JldHVybiBhLnNvdXJjZT0z RCJmdW5jdGlvbig9CiIrZisiKXtcbiIrcysifSIsYX0scC5jaGFpbj0zRGZ1bmN0aW9uKGUpe3Zh ciB0PTNEcChlKTtyZXR1cm4gdC5fY2hhaW49M0QhMD0KLHR9O3ZhciBMPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIHRoaXMuX2NoYWluP3AoZSkuY2hhaW4oKTplfTtwLm1peGluPTNEZnVuY3RpPQpvbihl KXtwLmVhY2gocC5mdW5jdGlvbnMoZSksZnVuY3Rpb24odCl7dmFyIG49M0RwW3RdPTNEZVt0XTtw LnByb3RvdHlwZVt0XT0KPTNEZnVuY3Rpb24oKXt2YXIgZT0zRFt0aGlzLl93cmFwcGVkXTtyZXR1 cm4gcy5hcHBseShlLGFyZ3VtZW50cyksTC5jYWxsKHRoPQppcyxuLmFwcGx5KHAsZSkpfX0pfSxw Lm1peGluKHApLHAuZWFjaChbInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzb3I9CnQi LCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RuW2VdO3AucHJvdG90eXBl W2VdPTNEZnVuY3Rpb24oKT0Ke3ZhciBuPTNEdGhpcy5fd3JhcHBlZDtyZXR1cm4gdC5hcHBseShu LGFyZ3VtZW50cyksKGU9M0Q9M0Q9M0Qic2hpZnQifHxlPTNEPQo9M0Q9M0Qic3BsaWNlIikmJm4u bGVuZ3RoPTNEPTNEPTNEMCYmZGVsZXRlIG5bMF0sTC5jYWxsKHRoaXMsbil9fSkscC5lYWNoKFs9 CiJjb25jYXQiLCJqb2luIiwic2xpY2UiXSxmdW5jdGlvbihlKXt2YXIgdD0zRG5bZV07cC5wcm90 b3R5cGVbZV09M0RmdW5jdGlvbj0KKCl7cmV0dXJuIEwuY2FsbCh0aGlzLHQuYXBwbHkodGhpcy5f d3JhcHBlZCxhcmd1bWVudHMpKX19KSxwLnByb3RvdHlwZS52YWx1PQplPTNEZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5fd3JhcHBlZH0sdHlwZW9mIGRlZmluZT0zRD0zRCJmdW5jdGlvbiImJmRlZmlu ZS49CmFtZCYmZGVmaW5lKCJ1bmRlcnNjb3JlIixbXSxmdW5jdGlvbigpe3JldHVybiBwfSl9LmNh bGwodGhpcyksZGVmaW5lKCJsaWJzLz0KdW5kZXJzY29yZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1 bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdHx8ZS5ffX0odGhpcykpLGRlPQpmaW5lKCJ1dGlscy91 dGlscyIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7Zm9y KHZhciA9CnIgaW4gZSl7dmFyIGk9M0RlW3JdO2kmJnR5cGVvZiBpPTNEPTNEIm9iamVjdCImJihu KGkpLHQoaSxuKSl9fWZ1bmN0aW9uIG4oZT0KKXtyZXR1cm4gJCgiPGRpdi8+IikudGV4dChlKS5o dG1sKCl9ZnVuY3Rpb24gcihlKXtlIGluc3RhbmNlb2YgQXJyYXl8fChlPTNEPQpbZV0pO2Zvcih2 YXIgdCBpbiBlKWlmKFsiTm9uZSIsbnVsbCwibnVsbCIsdW5kZWZpbmVkLCJ1bmRlZmluZWQiXS5p bmRleE9mKGU9Clt0XSk+LTEpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaShlKXt2YXIgZT0z RGUudG9TdHJpbmcoKTtpZihlKXtlPTNEZS5yZT0KcGxhY2UoLywvZywiLCAiKTt2YXIgdD0zRGUu bGFzdEluZGV4T2YoIiwgIik7cmV0dXJuIHQhPTNELTEmJihlPTNEZS5zdWJzdHIoPQowLHQpKyIg b3IgIitlLnN1YnN0cih0KzEpKSxlfXJldHVybiIifWZ1bmN0aW9uIHMoZSl7dG9wLl9fdXRpbHNf X2dldF9fPTNEdG89CnAuX191dGlsc19fZ2V0X198fHt9LGUuY2FjaGUmJnRvcC5fX3V0aWxzX19n ZXRfX1tlLnVybF0/KGUuc3VjY2VzcyYmZS5zdWNjZT0Kc3ModG9wLl9fdXRpbHNfX2dldF9fW2Uu dXJsXSksY29uc29sZS5kZWJ1ZygidXRpbHMuanM6OmdldCgpIC0gRmV0Y2hpbmcgZnJvPQptIGNh Y2hlIFsiK2UudXJsKyJdLiIpKTpvKHt1cmw6ZS51cmwsZGF0YTplLmRhdGEsc3VjY2VzczpmdW5j dGlvbih0KXt0b3AuX189CnV0aWxzX19nZXRfX1tlLnVybF09M0R0LGUuc3VjY2VzcyYmZS5zdWNj ZXNzKHQpfSxlcnJvcjpmdW5jdGlvbih0KXtlLmVycm9yJj0KJmUuZXJyb3IodCl9fSl9ZnVuY3Rp b24gbyhlKXt2YXIgdD0zRHtjb250ZW50VHlwZToiYXBwbGljYXRpb24vanNvbiIsdHlwZTplPQou dHlwZXx8IkdFVCIsZGF0YTplLmRhdGF8fHt9LHVybDplLnVybH07dC50eXBlPTNEPTNEIkdFVCJ8 fHQudHlwZT0zRD0zRCJERUw9CkVURSI/KHQudXJsLmluZGV4T2YoIj8iKT0zRD0zRC0xP3QudXJs Kz0zRCI/Ijp0LnVybCs9M0QiJiIsdC51cmw9M0R0LnVybCskLj0KcGFyYW0odC5kYXRhKSx0LmRh dGE9M0RudWxsKToodC5kYXRhVHlwZT0zRCJqc29uIix0LnVybD0zRHQudXJsLHQuZGF0YT0zREpT PQpPTi5zdHJpbmdpZnkodC5kYXRhKSksJC5hamF4KHQpLmRvbmUoZnVuY3Rpb24odCl7aWYodHlw ZW9mIHQ9M0Q9M0Qic3RyaW5nIik9CnRyeXt0PTNEdC5yZXBsYWNlKCJJbmZpbml0eSwiLCciSW5m aW5pdHkiLCcpLHQ9M0RqUXVlcnkucGFyc2VKU09OKHQpfWNhdGNoKD0Kbil7Y29uc29sZS5kZWJ1 ZyhuKX1lLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0pLmZhaWwoZnVuY3Rpb24odCl7dmFyIG49M0Ru dWxsPQo7dHJ5e249M0RqUXVlcnkucGFyc2VKU09OKHQucmVzcG9uc2VUZXh0KX1jYXRjaChyKXtu PTNEdC5yZXNwb25zZVRleHR9ZS5lcnI9Cm9yJiZlLmVycm9yKG4sdCl9KX1mdW5jdGlvbiB1KGUs dCl7dmFyIG49M0QkKCc8ZGl2IGNsYXNzPTNEIicrZSsnIj48L2Rpdj4nKT0KO24uYXBwZW5kVG8o IjplcSgwKSIpO3ZhciByPTNEbi5jc3ModCk7cmV0dXJuIG4ucmVtb3ZlKCkscn1mdW5jdGlvbiBh KGUpeyQoPQonbGlua1tocmVmXj0zRCInK2UrJyJdJykubGVuZ3RofHwkKCc8bGluayBocmVmPTNE IicrZ2FsYXh5X2NvbmZpZy5yb290K2UrJyI9CiByZWw9M0Qic3R5bGVzaGVldCI+JykuYXBwZW5k VG8oImhlYWQiKX1mdW5jdGlvbiBmKHQsbil7cmV0dXJuIHQ/ZS5kZWZhdWx0cz0KKHQsbik6bn1m dW5jdGlvbiBsKGUsdCl7dmFyIG49M0QiIjtpZihlPj0zRDFlMTEpZS89M0QxZTExLG49M0QiVEIi O2Vsc2UgaWYoPQplPj0zRDFlOCllLz0zRDFlOCxuPTNEIkdCIjtlbHNlIGlmKGU+PTNEMWU1KWUv PTNEMWU1LG49M0QiTUIiO2Vsc2UgaWYoZT49M0Q9CjEwMCllLz0zRDEwMCxuPTNEIktCIjtlbHNl e2lmKCEoZT4wKSlyZXR1cm4iPHN0cm9uZz4tPC9zdHJvbmc+IjtlKj0zRDEwLG49Cj0zRCJiIn12 YXIgcj0zRE1hdGgucm91bmQoZSkvMTA7cmV0dXJuIHQ/cisiICIrbjoiPHN0cm9uZz4iK3IrIjwv c3Ryb25nPiAiKz0Kbn1mdW5jdGlvbiBjKCl7cmV0dXJuIngiK01hdGgucmFuZG9tKCkudG9TdHJp bmcoMzYpLnN1YnN0cmluZygyLDkpfWZ1bmN0aW9uPQogaChlKXt2YXIgdD0zRCQoIjxwPjwvcD4i KTtyZXR1cm4gdC5hcHBlbmQoZSksdH1mdW5jdGlvbiBwKCl7dmFyIGU9M0RuZXcgRGE9CnRlLHQ9 M0QoZS5nZXRIb3VycygpPDEwPyIwIjoiIikrZS5nZXRIb3VycygpLG49M0QoZS5nZXRNaW51dGVz KCk8MTA/IjAiOiIiKT0KK2UuZ2V0TWludXRlcygpLHI9M0RlLmdldERhdGUoKSsiLyIrKGUuZ2V0 TW9udGgoKSsxKSsiLyIrZS5nZXRGdWxsWWVhcigpKyIsPQogIit0KyI6IituO3JldHVybiByfXJl dHVybntjc3NMb2FkRmlsZTphLGNzc0dldEF0dHJpYnV0ZTp1LGdldDpzLG1lcmdlOmYsYnk9CnRl c1RvU3RyaW5nOmwsdXVpZDpjLHRpbWU6cCx3cmFwOmgscmVxdWVzdDpvLHNhbml0aXplOm4sdGV4 dGlmeTppLHZhbGlkYXRlOj0KcixkZWVwZWFjaDp0fX0pLGRlZmluZSgibXZjL3VpL3VpLXBvcnRs ZXQiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgPQp0PTNEQmFja2JvbmUuVmlldy5l eHRlbmQoe3Zpc2libGU6ITEsb3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGljb246IiIsYnV0dG89 Cm5zOm51bGwsYm9keTpudWxsLHNjcm9sbGFibGU6ITAsbm9wYWRkaW5nOiExLG9wZXJhdGlvbnM6 bnVsbCxwbGFjZW1lbnQ6ImJvdD0KdG9tIixjbHM6InVpLXBvcnRsZXQiLG9wZXJhdGlvbnNfZmx0 OiJyaWdodCJ9LCR0aXRsZTpudWxsLCRjb250ZW50Om51bGwsJGJ1PQp0dG9uczpudWxsLCRvcGVy YXRpb25zOm51bGwsJGhlYWRlcjpudWxsLGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRp b249CnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRo aXMuX3RlbXBsYXRlKHRoaXMub3B0aT0Kb25zKSksdGhpcy4kY29udGVudD0zRHRoaXMuJGVsLmZp bmQoIi5jb250ZW50IiksdGhpcy4kdGl0bGU9M0R0aGlzLiRlbC5maW5kPQooIi5wb3J0bGV0LXRp dGxlLXRleHQiKSx0aGlzLiRoZWFkZXI9M0R0aGlzLiRlbC5maW5kKCIucG9ydGxldC1oZWFkZXIi KTt2YXI9CiBuPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtY29udGVudCIpO3RoaXMub3B0aW9u cy5zY3JvbGxhYmxlP24uYWRkQ2xhc3MoIj0Kc2Nyb2xsIik6dGhpcy5vcHRpb25zLnRpdGxlP24u YWRkQ2xhc3MoIm5vLXNjcm9sbCIpOm4uYWRkQ2xhc3MoIm5vLXNjcm9sbC1uPQpvLXRpdGxlIiks dGhpcy5vcHRpb25zLm5vcGFkZGluZyYmKG4uY3NzKCJwYWRkaW5nIiwiMHB4IiksdGhpcy4kY29u dGVudC5jc3M9CigicGFkZGluZyIsIjBweCIpKSx0aGlzLiRidXR0b25zPTNEJCh0aGlzLmVsKS5m aW5kKCIuYnV0dG9ucyIpO2lmKHRoaXMub3B0aT0Kb25zLmJ1dHRvbnMpe3ZhciByPTNEdGhpczsk LmVhY2godGhpcy5vcHRpb25zLmJ1dHRvbnMsZnVuY3Rpb24oZSx0KXt0LiRlbC5wPQpyb3AoImlk IixlKSxyLiRidXR0b25zLmFwcGVuZCh0LiRlbCl9KX1lbHNlIHRoaXMuJGJ1dHRvbnMucmVtb3Zl KCk7dGhpcy4kb3A9CmVyYXRpb25zPTNEJCh0aGlzLmVsKS5maW5kKCIub3BlcmF0aW9ucyIpO2lm KHRoaXMub3B0aW9ucy5vcGVyYXRpb25zKXt2YXIgcj0KPTNEdGhpczskLmVhY2godGhpcy5vcHRp b25zLm9wZXJhdGlvbnMsZnVuY3Rpb24oZSx0KXt0LiRlbC5wcm9wKCJpZCIsZSksci4kPQpvcGVy YXRpb25zLmFwcGVuZCh0LiRlbCl9KX10aGlzLm9wdGlvbnMuYm9keSYmdGhpcy5hcHBlbmQodGhp cy5vcHRpb25zLmJvZHk9Cil9LGFwcGVuZDpmdW5jdGlvbih0LG4pe24/dGhpcy4kY29udGVudC5h cHBlbmQodCk6dGhpcy4kY29udGVudC5hcHBlbmQoZS53cj0KYXAodCkpfSxjb250ZW50OmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuJGNvbnRlbnR9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLiRlbC5mPQph ZGVJbigiZmFzdCIpLHRoaXMudmlzaWJsZT0zRCEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwu ZmFkZU91dCgiZmFzdCIpLHQ9Cmhpcy52aXNpYmxlPTNEITF9LGVuYWJsZUJ1dHRvbjpmdW5jdGlv bihlKXt0aGlzLiRidXR0b25zLmZpbmQoIiMiK2UpLnByb3AoIj0KZGlzYWJsZWQiLCExKX0sZGlz YWJsZUJ1dHRvbjpmdW5jdGlvbihlKXt0aGlzLiRidXR0b25zLmZpbmQoIiMiK2UpLnByb3AoImRp PQpzYWJsZWQiLCEwKX0saGlkZU9wZXJhdGlvbjpmdW5jdGlvbihlKXt0aGlzLiRvcGVyYXRpb25z LmZpbmQoIiMiK2UpLmhpZGUoKX09CixzaG93T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuJG9w ZXJhdGlvbnMuZmluZCgiIyIrZSkuc2hvdygpfSxzZXRPcGVyYXRpbz0KbjpmdW5jdGlvbihlLHQp e3ZhciBuPTNEdGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitlKTtuLm9mZigiY2xpY2siKSxuLm9u KCJjPQpsaWNrIix0KX0sdGl0bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiR0aXRsZTtyZXR1 cm4gZSYmdC5odG1sKGUpLHQuaHRtbCg9Cil9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0z RCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCInK2UuY2xzKyciPj0KJztyZXR1cm4gZS50 aXRsZSYmKHQrPTNEJzxkaXYgY2xhc3M9M0QicG9ydGxldC1oZWFkZXIiPjxkaXYgY2xhc3M9M0Qi b3BlcmF0PQppb25zIiBzdHlsZT0zRCJmbG9hdDogJytlLm9wZXJhdGlvbnNfZmx0Kyc7Ij48L2Rp dj4nKyc8ZGl2IGNsYXNzPTNEInBvcnRsZXQ9Ci10aXRsZSI+JyxlLmljb24mJih0Kz0zRCc8aSBj bGFzcz0zRCJpY29uIGZhICcrZS5pY29uKyciPiZuYnNwOzwvaT4nKSx0Kz0zRD0KJzxzcGFuIGNs YXNzPTNEInBvcnRsZXQtdGl0bGUtdGV4dCI+JytlLnRpdGxlKyI8L3NwYW4+IisiPC9kaXY+Iisi PC9kaXY+IiksPQp0Kz0zRCc8ZGl2IGNsYXNzPTNEInBvcnRsZXQtY29udGVudCI+JyxlLnBsYWNl bWVudD0zRD0zRCJ0b3AiJiYodCs9M0QnPGRpdiA9CmNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Picp LHQrPTNEJzxkaXYgY2xhc3M9M0QiY29udGVudCI+PC9kaXY+JyxlLnBsYWNlbWVudD0KPTNEPTNE ImJvdHRvbSImJih0Kz0zRCc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2PicpLHQrPTNEIjwv ZGl2PjwvZGl2PiIsPQp0fX0pO3JldHVybntWaWV3OnR9fSksZGVmaW5lKCJtdmMvdWkvdWktc2Vs ZWN0LWRlZmF1bHQiLFsidXRpbHMvdXRpbHMiXSxmdW49CmN0aW9uKGUpe3ZhciB0PTNEQmFja2Jv bmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDoiIixjbHM6IiIsZXJyb3JfdD0KZXh0 OiJObyBkYXRhIGF2YWlsYWJsZSIsdmlzaWJsZTohMCx3YWl0OiExLG11bHRpcGxlOiExLHNlYXJj aGFibGU6ITF9LGluaXRpPQphbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdl KHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGU9Cm1lbnQodGhpcy5fdGVtcGxhdGUo dGhpcy5vcHRpb25zKSksdGhpcy4kc2VsZWN0PTNEdGhpcy4kZWwuZmluZCgiLnNlbGVjdCIpLD0K dGhpcy4kaWNvbj0zRHRoaXMuJGVsLmZpbmQoIi5pY29uIiksdGhpcy4kYnV0dG9uPTNEdGhpcy4k ZWwuZmluZCgiLmJ1dHRvbiIpPQosdGhpcy5vcHRpb25zLm11bHRpcGxlPyh0aGlzLiRzZWxlY3Qu cHJvcCgibXVsdGlwbGUiLCEwKSx0aGlzLiRzZWxlY3QuYWRkQ2w9CmFzcygidWktc2VsZWN0LW11 bHRpcGxlIiksdGhpcy4kaWNvbi5yZW1vdmUoKSk6dGhpcy4kZWwuYWRkQ2xhc3MoInVpLXNlbGVj dD0KIiksdGhpcy51cGRhdGUodGhpcy5vcHRpb25zLmRhdGEpLHRoaXMub3B0aW9ucy52YWx1ZSE9 M0Q9M0R1bmRlZmluZWQmJnRoaXMuPQp2YWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpLHRoaXMub3B0 aW9ucy52aXNpYmxlfHx0aGlzLmhpZGUoKSx0aGlzLm9wdGlvbnMud2E9Cml0P3RoaXMud2FpdCgp OnRoaXMuc2hvdygpO3ZhciBuPTNEdGhpczt0aGlzLiRzZWxlY3Qub24oImNoYW5nZSIsZnVuY3Rp b24oKT0Ke24uX2NoYW5nZSgpfSksdGhpcy5vbigiY2hhbmdlIixmdW5jdGlvbigpe24uX2NoYW5n ZSgpfSl9LHZhbHVlOmZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYodGhp cy4kc2VsZWN0LnZhbChlKSx0aGlzLiRzZWxlY3Quc2VsZWN0MiYmdGhpcy49CiRzZWxlY3Quc2Vs ZWN0MigidmFsIixlKSksdGhpcy4kc2VsZWN0LnZhbCgpfSxmaXJzdDpmdW5jdGlvbigpe3ZhciBl PTNEdGhpcz0KLiRzZWxlY3QuZmluZCgib3B0aW9uIik7cmV0dXJuIGUubGVuZ3RoPjA/ZS52YWwo KTp1bmRlZmluZWR9LHZhbGlkYXRlOmZ1bmN0PQppb24oKXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlz LnZhbHVlKCkpfSx0ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNlbGVjdC49CmZpbmQoIm9w dGlvbjpzZWxlY3RlZCIpLnRleHQoKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMudW53YWl0KCksdGhp cy4kc2VsZWN0Lj0Kc2hvdygpLHRoaXMuJGVsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMu JGVsLmhpZGUoKX0sd2FpdDpmdW5jdGlvbigpe3RoPQppcy4kaWNvbi5yZW1vdmVDbGFzcygpLHRo aXMuJGljb24uYWRkQ2xhc3MoImZhIGZhLXNwaW5uZXIgZmEtc3BpbiIpfSx1bndhaXQ9CjpmdW5j dGlvbigpe3RoaXMuJGljb24ucmVtb3ZlQ2xhc3MoKSx0aGlzLiRpY29uLmFkZENsYXNzKCJmYSBm YS1jYXJldC1kb3duIj0KKX0sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VsZWN0 LmlzKCI6ZGlzYWJsZWQiKX0sZW5hYmxlOmZ1bmN0aW9uPQooKXt0aGlzLiRzZWxlY3QucHJvcCgi ZGlzYWJsZWQiLCExKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5wcm9wKCI9CmRp c2FibGVkIiwhMCl9LGFkZDpmdW5jdGlvbihlKXt0aGlzLiRzZWxlY3QuYXBwZW5kKHRoaXMuX3Rl bXBsYXRlT3B0aW9uKGUpKT0KLHRoaXMuX3JlZnJlc2goKX0sZGVsOmZ1bmN0aW9uKGUpe3RoaXMu JHNlbGVjdC5maW5kKCJvcHRpb25bdmFsdWU9M0QiK2UrIl0iPQopLnJlbW92ZSgpLHRoaXMuJHNl bGVjdC50cmlnZ2VyKCJjaGFuZ2UiKSx0aGlzLl9yZWZyZXNoKCl9LHVwZGF0ZTpmdW5jdGlvbig9 CmUpe3ZhciB0PTNEdGhpcy4kc2VsZWN0LnZhbCgpO3RoaXMuJHNlbGVjdC5maW5kKCJvcHRpb24i KS5yZW1vdmUoKTtmb3IodmFyID0KbiBpbiBlKXRoaXMuJHNlbGVjdC5hcHBlbmQodGhpcy5fdGVt cGxhdGVPcHRpb24oZVtuXSkpO3RoaXMuX3JlZnJlc2goKSx0aGlzPQouJHNlbGVjdC52YWwodCks dGhpcy4kc2VsZWN0LnZhbCgpfHx0aGlzLiRzZWxlY3QudmFsKHRoaXMuZmlyc3QoKSksdGhpcy5v cHQ9CmlvbnMuc2VhcmNoYWJsZSYmKHRoaXMuJGJ1dHRvbi5oaWRlKCksdGhpcy4kc2VsZWN0LnNl bGVjdDIoImRlc3Ryb3kiKSx0aGlzLj0KJHNlbGVjdC5zZWxlY3QyKCkpfSxzZXRPbkNoYW5nZTpm dW5jdGlvbihlKXt0aGlzLm9wdGlvbnMub25jaGFuZ2U9M0RlfSxleGlzPQp0czpmdW5jdGlvbihl KXtyZXR1cm4gdGhpcy4kc2VsZWN0LmZpbmQoJ29wdGlvblt2YWx1ZT0zRCInK2UrJyJdJykubGVu Z3RoPjA9Cn0sX2NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5v cHRpb25zLm9uY2hhbmdlKHRoaXMuJHNlbD0KZWN0LnZhbCgpKX0sX3JlZnJlc2g6ZnVuY3Rpb24o KXt0aGlzLiRzZWxlY3QuZmluZCgib3B0aW9uW3ZhbHVlPTNEbnVsbF0iKS5yPQplbW92ZSgpO3Zh ciBlPTNEdGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvbiIpLmxlbmd0aDtlPTNEPTNEMD8odGhpcy5k aXNhYmxlKCk9Cix0aGlzLiRzZWxlY3QuYXBwZW5kKHRoaXMuX3RlbXBsYXRlT3B0aW9uKHt2YWx1 ZToibnVsbCIsbGFiZWw6dGhpcy5vcHRpb25zLj0KZXJyb3JfdGV4dH0pKSk6dGhpcy5lbmFibGUo KX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0aW9uKGUpe3JldHVybic8b3B0aW9uIHZhPQpsdWU9M0Qi JytlLnZhbHVlKyciPicrZS5sYWJlbCsiPC9vcHRpb24+In0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUp e3JldHVybic8ZGk9CnYgaWQ9M0QiJytlLmlkKyciPicrJzxzZWxlY3QgaWQ9M0Qic2VsZWN0IiBj bGFzcz0zRCJzZWxlY3QgJytlLmNscysiICIrZS5pZD0KKyciPjwvc2VsZWN0PicrJzxkaXYgY2xh c3M9M0QiYnV0dG9uIj4nKyc8aSBjbGFzcz0zRCJpY29uIi8+JysiPC9kaXY+IisiPC9kPQppdj4i fX0pO3JldHVybntWaWV3OnR9fSksZGVmaW5lKCJtdmMvdWkvdWktc2xpZGVyIixbInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb249CihlKXt2YXIgdD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25z RGVmYXVsdDp7bWluOm51bGwsbWF4Om51bGwsc3RlcDpudT0KbGwscHJlY2lzZTohMSxzcGxpdDox ZTR9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dmFyIG49M0R0aGlzO3RoaXMub3B0aW9ucz0KPTNE ZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1w bGF0ZSh0aGlzLm9wdGlvPQpucykpLHRoaXMudXNlc2xpZGVyPTNEdGhpcy5vcHRpb25zLm1heCE9 M0Q9M0RudWxsJiZ0aGlzLm9wdGlvbnMubWluIT0zRD0zRG49CnVsbCYmdGhpcy5vcHRpb25zLm1h eD50aGlzLm9wdGlvbnMubWluLHRoaXMub3B0aW9ucy5zdGVwPTNEPTNEPTNEbnVsbCYmKHRoaT0K cy5vcHRpb25zLnN0ZXA9M0QxLHRoaXMub3B0aW9ucy5wcmVjaXNlJiZ0aGlzLnVzZXNsaWRlciYm KHRoaXMub3B0aW9ucy5zdGVwPQo9M0QodGhpcy5vcHRpb25zLm1heC10aGlzLm9wdGlvbnMubWlu KS90aGlzLm9wdGlvbnMuc3BsaXQpKSx0aGlzLnVzZXNsaWRlcj89Cih0aGlzLiRzbGlkZXI9M0R0 aGlzLiRlbC5maW5kKCIjc2xpZGVyIiksdGhpcy4kc2xpZGVyLnNsaWRlcih0aGlzLm9wdGlvbnMp LD0KdGhpcy4kc2xpZGVyLm9uKCJzbGlkZSIsZnVuY3Rpb24oZSx0KXtuLnZhbHVlKHQudmFsdWUp fSkpOnRoaXMuJGVsLmZpbmQoIi51PQppLWZvcm0tc2xpZGVyLXRleHQiKS5jc3MoIndpZHRoIiwi MTAwJSIpLHRoaXMuJHRleHQ9M0R0aGlzLiRlbC5maW5kKCIjdGV4dCI9CiksdGhpcy5vcHRpb25z LnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpLHRo aXMuJD0KdGV4dC5vbigiY2hhbmdlIixmdW5jdGlvbigpe24udmFsdWUoJCh0aGlzKS52YWwoKSl9 KTt2YXIgcj0zRFtdO3RoaXMuJHRleHQuPQpvbigia2V5dXAiLGZ1bmN0aW9uKGUpe3JbZS53aGlj aF09M0QhMX0pLHRoaXMuJHRleHQub24oImtleWRvd24iLGZ1bmN0aW9uKGU9Cil7dmFyIHQ9M0Rl LndoaWNoO3JbdF09M0QhMCx0PTNEPTNEOHx8dD0zRD0zRDl8fHQ9M0Q9M0QxM3x8dD0zRD0zRDM3 fHx0PTNEPQo9M0QzOXx8dD49M0Q0OCYmdDw9M0Q1N3x8dD0zRD0zRDE5MCYmJCh0aGlzKS52YWwo KS5pbmRleE9mKCIuIik9M0Q9M0QtMSYmbi49Cm9wdGlvbnMucHJlY2lzZXx8dD0zRD0zRDE4OSYm JCh0aGlzKS52YWwoKS5pbmRleE9mKCItIik9M0Q9M0QtMXx8cls5MV18fHJbMT0KN118fGV2ZW50 LnByZXZlbnREZWZhdWx0KCl9KX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5k ZWZpbmVkJiYoPQppc05hTihlKSYmKGU9M0QwKSx0aGlzLm9wdGlvbnMubWF4IT0zRD0zRG51bGwm JihlPTNETWF0aC5taW4oZSx0aGlzLm9wdGlvbnM9Ci5tYXgpKSx0aGlzLm9wdGlvbnMubWluIT0z RD0zRG51bGwmJihlPTNETWF0aC5tYXgoZSx0aGlzLm9wdGlvbnMubWluKSksdGhpcz0KLm9wdGlv bnMub25jaGFuZ2UmJnRoaXMub3B0aW9ucy5vbmNoYW5nZShlKSx0aGlzLiRzbGlkZXImJnRoaXMu JHNsaWRlci5zbGlkPQplcigidmFsdWUiLGUpLHRoaXMuJHRleHQudmFsKGUpKSx0aGlzLiR0ZXh0 LnZhbCgpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmU9CnR1cm4nPGRpdiBpZD0zRCInK2UuaWQr JyIgY2xhc3M9M0QidWktZm9ybS1zbGlkZXIiPicrJzxpbnB1dCBpZD0zRCJ0ZXh0IiB0eT0KcGU9 M0QidGV4dCIgY2xhc3M9M0QidWktZm9ybS1zbGlkZXItdGV4dCIvPicrJzxkaXYgaWQ9M0Qic2xp ZGVyIiBjbGFzcz0zRCJ1PQppLWZvcm0tc2xpZGVyLWVsZW1lbnQiLz4nKyI8L2Rpdj4ifX0pO3Jl dHVybntWaWV3OnR9fSksZGVmaW5lKCJtdmMvdWkvdWktb3A9CnRpb25zIixbInV0aWxzL3V0aWxz Il0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZT0K OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9uc0RlZmF1bHQ9M0R7dmlzaWJsZTohMCxkYXRhOltdLGlk OmUudXVpZCgpLGVycm9yX3RlPQp4dDoiTm8gZGF0YSBhdmFpbGFibGUuIix3YWl0X3RleHQ6IlBs ZWFzZSB3YWl0Li4uIn0sdGhpcy5vcHRpb25zPTNEZS5tZXJnZSg9CnQsdGhpcy5vcHRpb25zRGVm YXVsdCksdGhpcy5zZXRFbGVtZW50KCI8ZGl2Lz4iKSx0aGlzLiRtZXNzYWdlPTNEJCgiPGRpdi8+ Ij0KKSx0aGlzLiRvcHRpb25zPTNEJCh0aGlzLl90ZW1wbGF0ZSh0KSksdGhpcy4kZWwuYXBwZW5k KHRoaXMuJG1lc3NhZ2UpLHRoaXMuPQokZWwuYXBwZW5kKHRoaXMuJG9wdGlvbnMpLHRoaXMub3B0 aW9ucy52aXNpYmxlfHx0aGlzLiRlbC5oaWRlKCksdGhpcy51cGRhdGU9Cih0aGlzLm9wdGlvbnMu ZGF0YSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0aGlz Lm9wdD0KaW9ucy52YWx1ZSk7dmFyIG49M0R0aGlzO3RoaXMub24oImNoYW5nZSIsZnVuY3Rpb24o KXtuLl9jaGFuZ2UoKX0pfSx1cGRhdGU6PQpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuX2dldFZh bHVlKCk7dGhpcy4kb3B0aW9ucy5lbXB0eSgpO2lmKHRoaXMuX3RlbXBsYXQ9CmVPcHRpb25zKXRo aXMuJG9wdGlvbnMuYXBwZW5kKHRoaXMuX3RlbXBsYXRlT3B0aW9ucyhlKSk7ZWxzZSBmb3IodmFy IG4gaW4gZT0KKXt2YXIgcj0zRCQodGhpcy5fdGVtcGxhdGVPcHRpb24oZVtuXSkpO3IuYWRkQ2xh c3MoInVpLW9wdGlvbiIpLHRoaXMuJG9wdGlvPQpucy5hcHBlbmQocil9dmFyIGk9M0R0aGlzO3Ro aXMuJGVsLmZpbmQoImlucHV0Iikub24oImNoYW5nZSIsZnVuY3Rpb24oKXtpLnY9CmFsdWUoaS5f Z2V0VmFsdWUoKSksaS5fY2hhbmdlKCl9KSx0aGlzLl9yZWZyZXNoKCksdGhpcy52YWx1ZSh0KX0s dmFsdWU6ZnVuYz0KdGlvbihlKXtpZihlIT0zRD0zRHVuZGVmaW5lZCl7ZSBpbnN0YW5jZW9mIEFy cmF5fHwoZT0zRFtlXSksdGhpcy4kZWwuZmluZCgiPQppbnB1dCIpLnByb3AoImNoZWNrZWQiLCEx KTtmb3IodmFyIHQgaW4gZSl0aGlzLiRlbC5maW5kKCdpbnB1dFt2YWx1ZT0zRCInK2U9Clt0XSsn Il0nKS5maXJzdCgpLnByb3AoImNoZWNrZWQiLCEwKX1yZXR1cm4gdGhpcy5fZ2V0VmFsdWUoKX0s ZXhpc3RzOmZ1bmN0aT0Kb24oZSl7aWYoZSE9M0Q9M0R1bmRlZmluZWQpe2UgaW5zdGFuY2VvZiBB cnJheXx8KGU9M0RbZV0pO2Zvcih2YXIgdCBpbiBlKWlmPQoodGhpcy4kZWwuZmluZCgnaW5wdXRb dmFsdWU9M0QiJytlW3RdKyciXScpLmxlbmd0aD4wKXJldHVybiEwfXJldHVybiExfSxmaXI9CnN0 OmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLiRlbC5maW5kKCJpbnB1dCIpO3JldHVybiBlLmxlbmd0 aD4wP2UudmFsKCk6dW5kZT0KZmluZWR9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUudmFs aWRhdGUodGhpcy52YWx1ZSgpKX0sd2FpdDpmdW5jdGlvbigpPQp7dGhpcy5fc2l6ZSgpPTNEPTNE MCYmKHRoaXMuX21lc3NhZ2VTaG93KHRoaXMub3B0aW9ucy53YWl0X3RleHQsImluZm8iKSx0aGk9 CnMuJG9wdGlvbnMuaGlkZSgpKX0sdW53YWl0OmZ1bmN0aW9uKCl7dGhpcy5fbWVzc2FnZUhpZGUo KSx0aGlzLl9yZWZyZXNoKCl9LD0KX2NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vbmNo YW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKHRoaXMuX2dldFZhPQpsdWUoKSl9LF9yZWZyZXNo OmZ1bmN0aW9uKCl7dGhpcy5fc2l6ZSgpPTNEPTNEMD8odGhpcy5fbWVzc2FnZVNob3codGhpcy5v cHQ9CmlvbnMuZXJyb3JfdGV4dCwiZGFuZ2VyIiksdGhpcy4kb3B0aW9ucy5oaWRlKCkpOih0aGlz Ll9tZXNzYWdlSGlkZSgpLHRoaXMuJD0Kb3B0aW9ucy5jc3MoImRpc3BsYXkiLCJpbmxpbmUtYmxv Y2siKSl9LF9nZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy4kPQplbC5maW5kKCI6Y2hl Y2tlZCIpO2lmKGUubGVuZ3RoPTNEPTNEMClyZXR1cm4ibnVsbCI7aWYodGhpcy5vcHRpb25zLm11 bHRpcGw9CmUpe3ZhciB0PTNEW107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCgkKHRo aXMpLnZhbCgpKX0pLHR9cmV0dXJuIGUudj0KYWwoKX0sX3NpemU6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy4kZWwuZmluZCgiLnVpLW9wdGlvbiIpLmxlbmd0aH0sX21lc3NhZ2VTPQpob3c6ZnVuY3Rp b24oZSx0KXt0aGlzLiRtZXNzYWdlLnNob3coKSx0aGlzLiRtZXNzYWdlLnJlbW92ZUNsYXNzKCks dGhpcy4kbWU9CnNzYWdlLmFkZENsYXNzKCJ1aS1tZXNzYWdlIGFsZXJ0IGFsZXJ0LSIrdCksdGhp cy4kbWVzc2FnZS5odG1sKGUpfSxfbWVzc2FnZT0KSGlkZTpmdW5jdGlvbigpe3RoaXMuJG1lc3Nh Z2UuaGlkZSgpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4nPGRpdiBjbGFzPQpzPTNEInVp LW9wdGlvbnMiLz4nfX0pLG49M0R7fTtuLlZpZXc9M0R0LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5j dGlvbihlKXt0LnA9CnJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLGUpfSxfdGVtcGxhdGVP cHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXY+PD0KaW5wdXQgdHlwZT0zRCJyYWRpbyIgbmFt ZT0zRCInK3RoaXMub3B0aW9ucy5pZCsnIiB2YWx1ZT0zRCInK2UudmFsdWUrJyIvPicrPQplLmxh YmVsKyI8YnI+IisiPC9kaXY+In19KTt2YXIgcj0zRHt9O3IuVmlldz0zRHQuZXh0ZW5kKHtpbml0 aWFsaXplOmZ1bmN0aW89Cm4oZSl7ZS5tdWx0aXBsZT0zRCEwLHQucHJvdG90eXBlLmluaXRpYWxp emUuY2FsbCh0aGlzLGUpfSxfdGVtcGxhdGVPcHRpb246Zj0KdW5jdGlvbihlKXtyZXR1cm4nPGRp dj48aW5wdXQgdHlwZT0zRCJjaGVja2JveCIgbmFtZT0zRCInK3RoaXMub3B0aW9ucy5pZCsnPQoi IHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+JytlLmxhYmVsKyI8YnI+IisiPC9kaXY+In19KTt2YXIg aT0zRHt9O3JldHVybiBpLlY9Cmlldz0zRHQuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUp e3QucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLGUpfT0KLHZhbHVlOmZ1bmN0aW9uKGUp e3JldHVybiBlIT0zRD0zRHVuZGVmaW5lZCYmKHRoaXMuJGVsLmZpbmQoImlucHV0IikucHJvcCgi PQpjaGVja2VkIiwhMSksdGhpcy4kZWwuZmluZCgibGFiZWwiKS5yZW1vdmVDbGFzcygiYWN0aXZl IiksdGhpcy4kZWwuZmluZCgnW3Y9CmFsdWU9M0QiJytlKyciXScpLnByb3AoImNoZWNrZWQiLCEw KS5jbG9zZXN0KCJsYWJlbCIpLmFkZENsYXNzKCJhY3RpdmUiKSksdD0KaGlzLl9nZXRWYWx1ZSgp fSxfdGVtcGxhdGVPcHRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9M0QnPGxhYmVsIGNsYXNzPTNEImJ0 biBiPQp0bi1kZWZhdWx0Ij4nO3JldHVybiBlLmljb24mJih0Kz0zRCc8aSBjbGFzcz0zRCJmYSAn K2UuaWNvbisnIi8+JyksdCs9M0QnPGk9Cm5wdXQgdHlwZT0zRCJyYWRpbyIgbmFtZT0zRCInK3Ro aXMub3B0aW9ucy5pZCsnIiB2YWx1ZT0zRCInK2UudmFsdWUrJyI+JytlLj0KbGFiZWwrIjwvbGFi ZWw+Iix0fSxfdGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJidG4tZ3Jv dXAgdWktPQpyYWRpb2J1dHRvbiIgZGF0YS10b2dnbGU9M0QiYnV0dG9ucyIvPid9fSkse0Jhc2U6 dCxSYWRpbzpuLFJhZGlvQnV0dG9uOmksQ2g9CmVja2JveDpyfX0pLGRlZmluZSgibXZjL3VpL3Vp LWRyaWxsZG93biIsWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS1vcHRpb25zIj0KXSxmdW5jdGlv bihlLHQpe3ZhciBuPTNEdC5CYXNlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlz LmRpc3BsYXk9Cj0zRGUuZGlzcGxheXx8ImNoZWNrYm94IixlLm11bHRpcGxlPTNEdGhpcy5kaXNw bGF5PTNEPTNEImNoZWNrYm94Iix0LkJhc2UucD0Kcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRo aXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuJzxkPQppdj48aW5w dXQgbmFtZT0zRCInK3RoaXMub3B0aW9ucy5pZCsnIiBjbGFzcz0zRCJ1aS1vcHRpb24iIHR5cGU9 M0QiJyt0aGlzLmQ9CmlzcGxheSsnIiB2YWx1ZT0zRCInK3QrJyI+JytlKyI8ZGl2Lz4ifSxfdGVt cGxhdGVPcHRpb25zOmZ1bmN0aW9uKGUpe2Z1bmN0aT0Kb24gbihlLHQpe2Z1bmN0aW9uIG4obil7 bj8odC5mYWRlSW4oImZhc3QiKSxlLnJlbW92ZUNsYXNzKCJ0b2dnbGUtZXhwYW5kIiksPQplLmFk ZENsYXNzKCJ0b2dnbGUiKSxlLmlzX2V4cGFuZGVkPTNEITApOih0LmhpZGUoKSxlLnJlbW92ZUNs YXNzKCJ0b2dnbGUiKSw9CmUuYWRkQ2xhc3MoInRvZ2dsZS1leHBhbmQiKSxlLmlzX2V4cGFuZGVk PTNEITEpfWUub24oImNsaWNrIixmdW5jdGlvbigpe24oIT0KZS5pc19leHBhbmRlZCl9KX1mdW5j dGlvbiByKGUscyl7Zm9yKGkgaW4gcyl7dmFyIG89M0RzW2ldLHU9M0RvLm9wdGlvbnMubGVuPQpn dGg+MCxhPTNEJCgiPGRpdi8+Iik7aWYodSl7dmFyIGY9M0QkKCc8c3BhbiBjbGFzcz0zRCJ1aS1k cmlsbGRvd24tYnV0dG9uIGY9Cm9ybS10b2dnbGUgaWNvbi1idXR0b24gdG9nZ2xlLWV4cGFuZCIg c3R5bGU9M0QicG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDJweD0KOyIvPicpLGw9M0QkKCI8ZGl2 Lz4iKTtsLmFwcGVuZChmKSxsLmFwcGVuZCh0Ll90ZW1wbGF0ZU9wdGlvbihvLm5hbWUsby52YWx1 PQplKSksYS5hcHBlbmQobCk7dmFyIGM9M0QkKCc8ZGl2IHN0eWxlPTNEImRpc3BsYXk6IG5vbmU7 IG1hcmdpbi1sZWZ0OiAyNXB4OyI9Ci8+Jyk7cihjLG8ub3B0aW9ucyksYS5hcHBlbmQoYyksbihm LGMpfWVsc2UgYS5hcHBlbmQodC5fdGVtcGxhdGVPcHRpb24oby5uYT0KbWUsby52YWx1ZSkpO2Uu YXBwZW5kKGEpfX12YXIgdD0zRHRoaXMscz0zRCQoIjxkaXYvPiIpO3JldHVybiByKHMsZSksc30s X3RlPQptcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYgY2xhc3M9M0QidWktb3B0aW9ucyBk cmlsbGRvd24tY29udGFpbmVyIiBpZD0KPTNEIicrZS5pZCsnIi8+J319KTtyZXR1cm57Vmlldzpu fX0pLGRlZmluZSgibXZjL3VpL3VpLWJ1dHRvbi1tZW51IixbInV0aWxzPQovdXRpbHMiXSxmdW5j dGlvbihlKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntpZDoi Iix0aXQ9CmxlOiIiLGZsb2F0aW5nOiJyaWdodCIsaWNvbjpudWxsLG9uY2xpY2s6bnVsbCxjbHM6 InVpLWJ1dHRvbi1pY29uIHVpLWJ1dHRvbj0KLW1lbnUiLHRvb2x0aXA6IiIsdGFyZ2V0OiIiLGhy ZWY6IiIsb251bmxvYWQ6bnVsbCx2aXNpYmxlOiEwLHRhZzoiIn0sJG1lbnU6PQpudWxsLGluaXRp YWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0Rl ZmF1bHQpLHQ9Cmhpcy5zZXRFbGVtZW50KCQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSkp O3ZhciBuPTNEJCh0aGlzLmVsKS5maW5kKCIucj0Kb290Iikscj0zRHRoaXM7bi5vbigiY2xpY2si LGZ1bmN0aW9uKGUpeyQoIi50b29sdGlwIikuaGlkZSgpLGUucHJldmVudERlZmF1PQpsdCgpLHIu b3B0aW9ucy5vbmNsaWNrJiZyLm9wdGlvbnMub25jbGljaygpfSksdGhpcy5vcHRpb25zLnZpc2li bGV8fHRoaXMuaGk9CmRlKCksbi50b29sdGlwKHt0aXRsZTp0LnRvb2x0aXAscGxhY2VtZW50OiJi b3R0b20ifSl9LHNob3c6ZnVuY3Rpb24oKXskKHRoaT0Kcy5lbCkuc2hvdygpfSxoaWRlOmZ1bmN0 aW9uKCl7JCh0aGlzLmVsKS5oaWRlKCl9LGFkZE1lbnU6ZnVuY3Rpb24odCl7dmFyIG49Cj0zRHt0 aXRsZToiIix0YXJnZXQ6IiIsaHJlZjoiIixvbmNsaWNrOm51bGwsZGl2aWRlcjohMSxpY29uOm51 bGwsY2xzOiJidXR0bz0Kbi1tZW51IGJ0bi1ncm91cCJ9O249M0RlLm1lcmdlKHQsbiksdGhpcy4k bWVudXx8KCQodGhpcy5lbCkuYXBwZW5kKHRoaXMuX3RlPQptcGxhdGVNZW51KCkpLHRoaXMuJG1l bnU9M0QkKHRoaXMuZWwpLmZpbmQoIi5tZW51IikpO3ZhciByPTNEJCh0aGlzLl90ZW1wbGE9CnRl TWVudUl0ZW0obikpO3Iub24oImNsaWNrIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCks bi5vbmNsaWNrJiZuLm9uYz0KbGljaygpfSksdGhpcy4kbWVudS5hcHBlbmQociksbi5kaXZpZGVy JiZ0aGlzLiRtZW51LmFwcGVuZCgkKHRoaXMuX3RlbXBsYXRlPQpEaXZpZGVyKCkpKX0sX3RlbXBs YXRlTWVudUl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9M0QnPGxpPjxhIGNsYXNzPTNEImRyb3Bkb3c9 Cm4taXRlbSIgaHJlZj0zRCInK2UuaHJlZisnIiB0YXJnZXQ9M0QiJytlLnRhcmdldCsnIj4nO3Jl dHVybiBlLmljb24mJih0Kz0zRD0KJzxpIGNsYXNzPTNEImZhICcrZS5pY29uKyciPjwvaT4nKSx0 Kz0zRCIgIitlLnRpdGxlKyI8L2E+IisiPC9saT4iLHR9LF90ZW1wPQpsYXRlTWVudTpmdW5jdGlv bigpe3JldHVybic8dWwgY2xhc3M9M0QibWVudSBkcm9wZG93bi1tZW51IHB1bGwtcmlnaHQiIHJv bGU9Cj0zRCJtZW51Ij48L3VsPid9LF90ZW1wbGF0ZURpdmlkZXI6ZnVuY3Rpb24oKXtyZXR1cm4n PGxpIGNsYXNzPTNEImRpdmlkZXIiPj0KPC9saT4nfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFy IHQ9M0QiIixuPTNEIiI7ZS50aXRsZT90PTNEIndpZHRoOiBhdXRvOyI6PQpuPTNEIm1hcmdpbjog MHB4OyI7dmFyIHI9M0QnPGRpdiBpZD0zRCInK2UuaWQrJyIgc3R5bGU9M0QiZmxvYXQ6ICcrZS5m bG9hdGk9Cm5nKyI7ICIrdCsnIiBjbGFzcz0zRCJkcm9wZG93biAnK2UuY2xzKyciPicrJzxkaXYg Y2xhc3M9M0Qicm9vdCBidXR0b24gZHJvcD0KZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPTNEImRy b3Bkb3duIiBzdHlsZT0zRCInK24rJyI+JysnPGkgY2xhc3M9M0QiaWNvbiBmPQphICcrZS5pY29u KyciLz4nO3JldHVybiBlLnRpdGxlJiYocis9M0QnJm5ic3A7PHNwYW4gY2xhc3M9M0QidGl0bGUi PicrZS50aXQ9CmxlKyI8L3NwYW4+Iikscis9M0QiPC9kaXY+PC9kaXY+IixyfX0pfSksZGVmaW5l KCJtdmMvdWkvdWktbWlzYyIsWyJ1dGlscy91dD0KaWxzIiwibXZjL3VpL3VpLXNlbGVjdC1kZWZh dWx0IiwibXZjL3VpL3VpLXNsaWRlciIsIm12Yy91aS91aS1vcHRpb25zIiwibXZjPQovdWkvdWkt ZHJpbGxkb3duIiwibXZjL3VpL3VpLWJ1dHRvbi1tZW51IiwibXZjL3VpL3VpLW1vZGFsIl0sZnVu Y3Rpb24oZSx0LG49CixyLGkscyxvKXt2YXIgdT0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRp b25zRGVmYXVsdDp7dXJsOiIiLGNsczoiIn0saW5pdD0KaWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMu b3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsPQplbWVu dCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3Jl dHVybic8aW1nIGNsYXM9CnM9M0QidWktaW1hZ2UgJytlLmNscysnIiBzcmM9M0QiJytlLnVybCsn Ii8+J319KSxhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoez0Kb3B0aW9uc0RlZmF1bHQ6e3RpdGxl OiIiLGNsczoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lPQpy Z2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUo dGhpcy5vcHRpb25zKSl9LHQ9Cml0bGU6ZnVuY3Rpb24oZSl7dGhpcy4kZWwuaHRtbChlKX0sX3Rl bXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8bGFiZWwgY2xhcz0Kcz0zRCJ1aS1sYWJlbCAnK2Uu Y2xzKyciPicrZS50aXRsZSsiPC9sYWJlbD4ifSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBvcHRp PQpvbnMudGl0bGV9fSksZj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7 ZmxvYXRpbmc6InJpZ2h0IixpY289Cm46IiIsdG9vbHRpcDoiIixwbGFjZW1lbnQ6ImJvdHRvbSIs dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpez0KdGhpcy5vcHRpb25zPTNE ZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1w bGF0PQplKHRoaXMub3B0aW9ucykpLCQodGhpcy5lbCkudG9vbHRpcCh7dGl0bGU6dC50b29sdGlw LHBsYWNlbWVudDoiYm90dG9tIn0pfSw9Cl90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRp dj48c3BhbiBjbGFzcz0zRCJmYSAnK2UuaWNvbisnIiBjbGFzcz0zRCJ1aT0KLWljb24iLz4mbmJz cDsnK2UudGl0bGUrIjwvZGl2PiJ9fSksbD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25z RGVmYXVsPQp0OntpZDpudWxsLHRpdGxlOiIiLGZsb2F0aW5nOiJyaWdodCIsY2xzOiJ1aS1idXR0 b24gYnRuIGJ0bi1kZWZhdWx0IixpY29uOiI9CiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaT0Kcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLCQodGhpcy5lbCkub24oImNsaWNrIixm dW5jdGlvbigpPQp7JCgiLnRvb2x0aXAiKS5oaWRlKCksdC5vbmNsaWNrJiZ0Lm9uY2xpY2soKX0p LCQodGhpcy5lbCkudG9vbHRpcCh7dGl0bGU6dC49CnRvb2x0aXAscGxhY2VtZW50OiJib3R0b20i fSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8YnV0dG9uIGlkPTNEIj0KJytlLmlk KyciIHR5cGU9M0Qic3VibWl0IiBzdHlsZT0zRCJmbG9hdDogJytlLmZsb2F0aW5nKyc7IiB0eXBl PTNEImJ1dHRvbiIgPQpjbGFzcz0zRCInK2UuY2xzKyciPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNE JzxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyI9Cj48L2k+Jm5ic3A7JyksdCs9M0RlLnRp dGxlKyI8L2J1dHRvbj4iLHR9fSksYz0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpbz0KbnNE ZWZhdWx0OntpZDpudWxsLHRpdGxlOiIiLGZsb2F0aW5nOiJyaWdodCIsY2xzOiJ1aS1idXR0b24t aWNvbiIsaWNvbjoiIix0PQpvb2x0aXA6IiIsb25jbGljazpudWxsfSxpbml0aWFsaXplOmZ1bmN0 aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGk9CnMub3B0aW9uc0RlZmF1bHQpLHRo aXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRidXR0bz0K bj0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b24iKTt2YXIgbj0zRHRoaXM7JCh0aGlzLmVsKS5vbigi Y2xpY2siLGZ1bmN0aW9uKCl7PQokKCIudG9vbHRpcCIpLmhpZGUoKSx0Lm9uY2xpY2smJiFuLmRp c2FibGVkJiZ0Lm9uY2xpY2soKX0pLCQodGhpcy5lbCkudG9vbHQ9CmlwKHt0aXRsZTp0LnRvb2x0 aXAscGxhY2VtZW50OiJib3R0b20ifSl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLiRidXR0b24u YT0KZGRDbGFzcygiZGlzYWJsZWQiKSx0aGlzLmRpc2FibGVkPTNEITB9LGVuYWJsZTpmdW5jdGlv bigpe3RoaXMuJGJ1dHRvbi5yZW1vPQp2ZUNsYXNzKCJkaXNhYmxlZCIpLHRoaXMuZGlzYWJsZWQ9 M0QhMX0sc2V0SWNvbjpmdW5jdGlvbihlKXt0aGlzLiQoImkiKS5yZW09Cm92ZUNsYXNzKHRoaXMu b3B0aW9ucy5pY29uKS5hZGRDbGFzcyhlKSx0aGlzLm9wdGlvbnMuaWNvbj0zRGV9LF90ZW1wbGF0 ZTpmdT0KbmN0aW9uKGUpe3ZhciB0PTNEIiI7ZS50aXRsZSYmKHQ9M0Qid2lkdGg6IGF1dG87Iik7 dmFyIG49M0QnPGRpdiBpZD0zRCInK2UuPQppZCsnIiBzdHlsZT0zRCJmbG9hdDogJytlLmZsb2F0 aW5nKyI7ICIrdCsnIiBjbGFzcz0zRCInK2UuY2xzKyciPic7cmV0dXJuIGU9Ci50aXRsZT9uKz0z RCc8ZGl2IGNsYXNzPTNEImJ1dHRvbiI+PGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNvbisnIi8+ Jm5ic3A7Jz0KKyc8c3BhbiBjbGFzcz0zRCJ0aXRsZSI+JytlLnRpdGxlKyI8L3NwYW4+IisiPC9k aXY+IjpuKz0zRCc8aSBjbGFzcz0zRCJpY29uPQogZmEgJytlLmljb24rJyIvPicsbis9M0QiPC9k aXY+IixufX0pLGg9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmE9CnVsdDp7dGl0 bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVy Z2UodCx0aGlzLj0Kb3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0 ZSh0aGlzLm9wdGlvbnMpKSwkKHRoaXMuZWwpLm9uPQooImNsaWNrIix0Lm9uY2xpY2spfSxfdGVt cGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXY+PGEgaHJlZj0zRCJqYXZhc2NyaXA9CnQ6dm9p ZCgwKSIgY2xhc3M9M0QidWktYW5jaG9yICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2E+PC9kaXY+ In19KSxwPTNEQmFjaz0KYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e21lc3NhZ2U6 bnVsbCxzdGF0dXM6ImluZm8iLHBlcnNpc3RlbnQ6ITF9PQosaW5pdGlhbGl6ZTpmdW5jdGlvbih0 KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy49CnNl dEVsZW1lbnQoIjxkaXY+PC9kaXY+IiksdGhpcy5vcHRpb25zLm1lc3NhZ2UmJnRoaXMudXBkYXRl KHRoaXMub3B0aW9ucyl9LD0KdXBkYXRlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVy Z2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KTtpZih0Lm1lc3NhPQpnZSE9M0QiIil7dGhpcy4kZWwu aHRtbCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRlbC5maW5kKCIuYWxlcnQ9 CiIpLmFwcGVuZCh0Lm1lc3NhZ2UpLHRoaXMuJGVsLmZhZGVJbigpLHRoaXMudGltZW91dCYmd2lu ZG93LmNsZWFyVGltZW91dCh0aD0KaXMudGltZW91dCk7aWYoIXQucGVyc2lzdGVudCl7dmFyIG49 M0R0aGlzO3RoaXMudGltZW91dD0zRHdpbmRvdy5zZXRUaW1lb3V0PQooZnVuY3Rpb24oKXtuLiRl bC5pcygiOnZpc2libGUiKT9uLiRlbC5mYWRlT3V0KCk6bi4kZWwuaGlkZSgpfSwzZTMpfX1lbHNl IHQ9Cmhpcy4kZWwuZmFkZU91dCgpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaXYg Y2xhc3M9M0QidWktbWVzc2FnZSBhbD0KZXJ0IGFsZXJ0LScrZS5zdGF0dXMrJyIvPid9fSksZD0z REJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7b25jPQpsaWNrOm51bGwsc2Vh cmNod29yZDoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdl KHQsdGg9CmlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUo dGhpcy5vcHRpb25zKSk7dmFyIG49M0R0aD0KaXM7dGhpcy5vcHRpb25zLm9uY2xpY2smJnRoaXMu JGVsLm9uKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciB0PTNEbi4kZWwuZmluPQpkKCIjc2VhcmNo Iik7bi5vcHRpb25zLm9uY2xpY2sodC52YWwoKSl9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3Jl dHVybic8ZGk9CnYgY2xhc3M9M0QidWktc2VhcmNoIj48Zm9ybSBvbnN1Ym1pdD0zRCJyZXR1cm4g ZmFsc2U7Ij48aW5wdXQgaWQ9M0Qic2VhcmNoIj0KIGNsYXNzPTNEImZvcm0tY29udHJvbCBpbnB1 dC1zbSIgdHlwZT0zRCJ0ZXh0IiBuYW1lPTNEInNlYXJjaCIgcGxhY2Vob2xkZXI9Cj0zRCJTZWFy Y2guLi4iIHZhbHVlPTNEIicrZS5zZWFyY2h3b3JkKyciPicrJzxidXR0b24gdHlwZT0zRCJzdWJt aXQiIGNsYXNzPQo9M0QiYnRuIHNlYXJjaC1idG4iPicrJzxpIGNsYXNzPTNEImZhIGZhLXNlYXJj aCI+PC9pPicrIjwvYnV0dG9uPiIrIjwvZm9ybT49CiIrIjwvZGl2PiJ9fSksdj0zREJhY2tib25l LlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dHlwZToidGV4dCIscGxhY2Vobz0KbGRlcjoi IixkaXNhYmxlZDohMSx2aXNpYmxlOiEwLGNsczoiIixhcmVhOiExfSxpbml0aWFsaXplOmZ1bmN0 aW9uKHQpe3RoaXMuPQpvcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRo aXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGk9CnMub3B0aW9ucykpLHRoaXMub3B0aW9u cy52YWx1ZSE9M0Q9M0R1bmRlZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbD0KdWUp LHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy4kZWwucHJvcCgiZGlzYWJsZWQiLCEwKSx0aGlz Lm9wdGlvbnMudmlzaWJsPQplfHx0aGlzLiRlbC5oaWRlKCk7dmFyIG49M0R0aGlzO3RoaXMuJGVs Lm9uKCJpbnB1dCIsZnVuY3Rpb24oKXtuLm9wdGlvbnMub249CmNoYW5nZSYmbi5vcHRpb25zLm9u Y2hhbmdlKG4uJGVsLnZhbCgpKX0pfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9M0Q9Cj0z RHVuZGVmaW5lZCYmdGhpcy4kZWwudmFsKGUpLHRoaXMuJGVsLnZhbCgpfSxfdGVtcGxhdGU6ZnVu Y3Rpb24oZSl7cmV0dXJuID0KZS5hcmVhPyc8dGV4dGFyZWEgaWQ9M0QiJytlLmlkKyciIGNsYXNz PTNEInVpLXRleHRhcmVhICcrZS5jbHMrJyI+PC90ZXh0YXJlPQphPic6JzxpbnB1dCBpZD0zRCIn K2UuaWQrJyIgdHlwZT0zRCInK2UudHlwZSsnIiB2YWx1ZT0zRCInK2UudmFsdWUrJyIgcGxhY2U9 CmhvbGRlcj0zRCInK2UucGxhY2Vob2xkZXIrJyIgY2xhc3M9M0QidWktaW5wdXQgJytlLmNscysn Ij4nfX0pLG09M0RCYWNrYm9uZT0KLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUp e3RoaXMub3B0aW9ucz0zRGUsdGhpcy5zZXRFbGVtZW50KHRoaXMuPQpfdGVtcGxhdGUodGhpcy5v cHRpb25zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0 aGk9CnMub3B0aW9ucy52YWx1ZSl9LHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRD0zRHVu ZGVmaW5lZCYmdGhpcy4kKCJoaWRkZT0KbiIpLnZhbChlKSx0aGlzLiQoImhpZGRlbiIpLnZhbCgp fSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QnPGRpdiBpZD0KPTNEIicrZS5pZCsnIiA+ JztyZXR1cm4gZS5pbmZvJiYodCs9M0QiPGxhYmVsPiIrZS5pbmZvKyI8L2xhYmVsPiIpLHQrPTNE JzxoPQppZGRlbiB2YWx1ZT0zRCInK2UudmFsdWUrJyIvPicrIjwvZGl2PiIsdH19KTtyZXR1cm57 QW5jaG9yOmgsQnV0dG9uOmwsQnV0dG89Cm5JY29uOmMsQnV0dG9uTWVudTpzLEljb246ZixJbWFn ZTp1LElucHV0OnYsTGFiZWw6YSxNZXNzYWdlOnAsTW9kYWw6byxSYWRpbz0KQnV0dG9uOnIuUmFk aW9CdXR0b24sQ2hlY2tib3g6ci5DaGVja2JveCxSYWRpbzpyLlJhZGlvLFNlYXJjaGJveDpkLFNl bGVjdDp0PQosSGlkZGVuOm0sU2xpZGVyOm4sRHJpbGxkb3duOml9fSksZGVmaW5lKCJwbHVnaW4v bGlicmFyeS9qb2JzIixbInV0aWxzL3V0aWw9CnMiXSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2Jv bmUuTW9kZWwuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsbil7dGhpcz0KLmFwcD0zRHQs dGhpcy5vcHRpb25zPTNEZS5tZXJnZShuLHRoaXMub3B0aW9uc0RlZmF1bHQpfSxyZXF1ZXN0OmZ1 bmN0aW9uKGUsPQp0LG4scixpKXt2YXIgcz0zRHRoaXM7ZS5zdGF0ZSgid2FpdCIsIlJlcXVlc3Rp bmcgam9iIHJlc3VsdHMuLi4iKTt2YXIgbz0zRGU9Ci5nZXQoImRhdGFzZXRfaWRfam9iIik7byE9 M0QiIj9zLl93YWl0KGUscixpKTpzLl9zdWJtaXQoZSx0LG4scixpKX0sY2xlYW51cD0KOmZ1bmN0 aW9uKHQpe3ZhciBuPTNEdGhpcyxyPTNEdC5nZXQoImRhdGFzZXRfaWRfam9iIik7ciE9M0QiIiYm KGUucmVxdWVzdCh7PQp0eXBlOiJQVVQiLHVybDpjb25maWcucm9vdCsiYXBpL2hpc3Rvcmllcy9u b25lL2NvbnRlbnRzLyIrcixkYXRhOntkZWxldGVkOiE9CjB9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtu Ll9yZWZyZXNoSGRhcygpfX0pLHQuc2V0KCJkYXRhc2V0X2lkX2pvYiIsIiIpKX0sX3N1Yj0KbWl0 OmZ1bmN0aW9uKHQsbixyLGkscyl7dmFyIG89M0R0aGlzLHU9M0R0LmlkLGE9M0R0LmdldCgidHlw ZSIpLGY9M0R0LmRlZmluPQppdGlvbjtkYXRhPTNEe3Rvb2xfaWQ6ImNoYXJ0cyIsaW5wdXRzOntp bnB1dDp7aWQ6dC5nZXQoImRhdGFzZXRfaWQiKSxzcmM6Img9CmRhIn0sbW9kdWxlOmYuZXhlY3V0 ZSxjb2x1bW5zOnIsc2V0dGluZ3M6bn19LHQuc3RhdGUoIndhaXQiLCJTZW5kaW5nIGpvYiByZT0K cXVlc3QuLi4iKSxlLnJlcXVlc3Qoe3R5cGU6IlBPU1QiLHVybDpjb25maWcucm9vdCsiYXBpL3Rv b2xzIixkYXRhOmRhdGEsc3VjPQpjZXNzOmZ1bmN0aW9uKGUpe2lmKCFlLm91dHB1dHN8fGUub3V0 cHV0cy5sZW5ndGg9M0Q9M0QwKXQuc3RhdGUoImZhaWxlZCIsIko9Cm9iIHN1Ym1pc3Npb24gZmFp bGVkLiBObyByZXNwb25zZS4iKSxzJiZzKCk7ZWxzZXtvLl9yZWZyZXNoSGRhcygpO3ZhciBuPTNE ZT0KLm91dHB1dHNbMF07dC5zdGF0ZSgid2FpdCIsIllvdXIgam9iIGhhcyBiZWVuIHF1ZXVlZC4g WW91IG1heSBjbG9zZSB0aGUgYnJvPQp3c2VyIHdpbmRvdy4gVGhlIGpvYiB3aWxsIHJ1biBpbiB0 aGUgYmFja2dyb3VuZC4iKSx0LnNldCgiZGF0YXNldF9pZF9qb2IiLG49Ci5pZCksby5hcHAuc3Rv cmFnZS5zYXZlKCksby5fd2FpdCh0LGkscyl9fSxlcnJvcjpmdW5jdGlvbihlKXt2YXIgbj0zRCIi O2UmJj0KZS5tZXNzYWdlJiZlLm1lc3NhZ2UuZGF0YSYmZS5tZXNzYWdlLmRhdGEuaW5wdXQmJihu PTNEZS5tZXNzYWdlLmRhdGEuaW5wdXQrPQoiLiIpLHQuc3RhdGUoImZhaWxlZCIsIlRoaXMgdmlz dWFsaXphdGlvbiByZXF1aXJlcyB0aGUgJ2NoYXJ0cycgdG9vbC4gUGxlYXM9CmUgbWFrZSBzdXJl IGl0IGlzIGluc3RhbGxlZC4gIituKSxzJiZzKCl9fSl9LF93YWl0OmZ1bmN0aW9uKHQsbixyKXt2 YXIgaT0zRD0KdGhpcztlLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmNvbmZpZy5yb290KyJhcGkv ZGF0YXNldHMvIit0LmdldCgiZGF0YXNldF9pPQpkX2pvYiIpLGRhdGE6e30sc3VjY2VzczpmdW5j dGlvbihlKXt2YXIgcz0zRCExO3N3aXRjaChlLnN0YXRlKXtjYXNlIm9rIjp0LnM9CnRhdGUoIndh aXQiLCJKb2IgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4uLiIpLG4mJm4oZSkscz0zRCEwO2JyZWFr O2Nhc2UiZXJybz0KciI6dC5zdGF0ZSgiZmFpbGVkIiwiSm9iIGhhcyBmYWlsZWQuIFBsZWFzZSBj aGVjayB0aGUgaGlzdG9yeSBmb3IgZGV0YWlscy4iPQopLHImJnIoZSkscz0zRCEwO2JyZWFrO2Nh c2UicnVubmluZyI6dC5zdGF0ZSgid2FpdCIsIllvdXIgam9iIGlzIHJ1bm5pbmcuIFk9Cm91IG1h eSBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3cuIFRoZSBqb2Igd2lsbCBjb250aW51ZSBpbiB0aGUg YmFja2dyb3VuZC4iKT0KfXN8fHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl93YWl0KHQsbixyKX0s aS5hcHAuY29uZmlnLmdldCgicXVlcnlfdGltZW91dCIpPQopfX0pfSxfcmVmcmVzaEhkYXM6ZnVu Y3Rpb24oKXtHYWxheHkmJkdhbGF4eS5jdXJySGlzdG9yeVBhbmVsJiZHYWxheHkuY3Vyckg9Cmlz dG9yeVBhbmVsLnJlZnJlc2hDb250ZW50cygpfX0pfSksZGVmaW5lKCJwbHVnaW4vbGlicmFyeS9k YXRhc2V0cyIsWyJ1dGlscz0KL3V0aWxzIl0sZnVuY3Rpb24oZSl7cmV0dXJuIEJhY2tib25lLkNv bGxlY3Rpb24uZXh0ZW5kKHtsaXN0Ont9LGNhY2hlOnt9LGluPQppdGlhbGl6ZTpmdW5jdGlvbih0 LG4pe3RoaXMuYXBwPTNEdCx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKG4sdGhpcy5vcHRpb25zRGU9 CmZhdWx0KX0scmVxdWVzdDpmdW5jdGlvbihlKXtlLmdyb3Vwcz90aGlzLl9nZXRfYmxvY2tzKGUp OnRoaXMuX2dldF9kYXRhc2V0KD0KZS5pZCxlLnN1Y2Nlc3MsZS5lcnJvcil9LF9nZXRfYmxvY2tz OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGMoaSl7bC5fZ2V0KGksZnVuPQpjdGlvbigpe3ZhciBzPTNE ITE7Zm9yKHZhciBvIGluIGUuZ3JvdXBzKXtkZXN0aW5hdGlvbl9ncm91cD0zRGUuZ3JvdXBzW29d LHM9Cm91cmNlX2dyb3VwPTNEaS5ncm91cHNbb10sZGVzdGluYXRpb25fZ3JvdXAudmFsdWVzfHwo ZGVzdGluYXRpb25fZ3JvdXAudmFsdT0KZXM9M0RbXSksZGVzdGluYXRpb25fZ3JvdXAudmFsdWVz PTNEZGVzdGluYXRpb25fZ3JvdXAudmFsdWVzLmNvbmNhdChzb3VyY2VfPQpncm91cC52YWx1ZXMp O2lmKHNvdXJjZV9ncm91cC52YWx1ZXMubGVuZ3RoPTNEPTNEMCl7cz0zRCEwO2JyZWFrfX1pZigr K2Y8dSY9CiYhcyl7biYmbihwYXJzZUludChmL3UqMTAwKSk7dmFyIGw9M0RpLnN0YXJ0K3I7aT0z RCQuZXh0ZW5kKCEwLGEse3N0YXJ0Omx9KT0KLGMoaSl9ZWxzZSB0KCl9KX12YXIgdD0zRGUuc3Vj Y2VzcyxuPTNEZS5wcm9ncmVzcyxyPTNEdGhpcy5hcHAuY29uZmlnLmdldCgiPQpxdWVyeV9saW1p dCIpLGk9M0RlLnN0YXJ0fHwwLHM9M0RpK2UucXVlcnlfbGltaXR8fGkrdGhpcy5hcHAuY29uZmln LmdldCgicXU9CmVyeV9saW1pdCIpLG89M0RNYXRoLmFicyhzLWkpO2lmKG88PTNEMCl7Y29uc29s ZS5kZWJ1ZygiRkFJTEVEIC0gRGF0YXNldHM6Oj0KcmVxdWVzdCgpIC0gSW52YWxpZCBxdWVyeSBy YW5nZS4iKTtyZXR1cm59dmFyIHU9M0RNYXRoLmNlaWwoby9yKXx8MSxhPTNEJC5lPQp4dGVuZCgh MCx7fSxlKSxmPTNEMCxsPTNEdGhpcyxoPTNEJC5leHRlbmQoITAsYSx7c3RhcnQ6aX0pO3RoaXMu X2dldF9kYXRhc2U9CnQoZS5pZCxmdW5jdGlvbigpe2MoaCl9KX0sX2dldF9kYXRhc2V0OmZ1bmN0 aW9uKHQsbixyKXt2YXIgaT0zRHRoaXMubGlzdFt0XT0KO2lmKGkpe24oaSk7cmV0dXJufXZhciBz PTNEdGhpcztlLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvPQpkYXRh c2V0cy8iK3Qsc3VjY2VzczpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdGF0ZSl7Y2FzZSJlcnJvciI6 ciYmcihlKTticmVhazs9CmRlZmF1bHQ6cy5saXN0W3RdPTNEZSxuKGUpfX19KX0sX2Jsb2NrX2lk OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWQrIl8iK2Uucz0KdGFydCsiXyIrZS5zdGFydCt0aGlz LmFwcC5jb25maWcuZ2V0KCJxdWVyeV9saW1pdCIpKyJfIit0fSxfZ2V0OmZ1bmN0aW9uKGUsPQp0 KXtlLnN0YXJ0PTNEZS5zdGFydHx8MDt2YXIgbj0zRFtdLHI9M0R7fSxpPTNEMDtmb3IodmFyIHMg aW4gZS5ncm91cHMpe3ZhciA9Cm89M0RlLmdyb3Vwc1tzXTtmb3IodmFyIHUgaW4gby5jb2x1bW5z KXt2YXIgYT0zRG8uY29sdW1uc1t1XS5pbmRleCxmPTNEdGhpcz0KLl9ibG9ja19pZChlLGEpO2lm KHRoaXMuY2FjaGVbZl18fGE9M0Q9M0Q9M0QiYXV0byJ8fGE9M0Q9M0Q9M0QiemVybyIpY29udGlu PQp1ZTshclthXSYmYSE9M0Q9M0R1bmRlZmluZWQmJihyW2FdPTNEaSxuLnB1c2goYSksaSsrKX19 aWYobi5sZW5ndGg9M0Q9M0QwKXs9CnRoaXMuX2ZpbGxfZnJvbV9jYWNoZShlKSx0KGUpO3JldHVy bn12YXIgbD0zRHtkYXRhc2V0X2lkOmUuaWQsc3RhcnQ6ZS5zdGFydD0KLGNvbHVtbnM6bn0sYz0z RHRoaXM7dGhpcy5fZmV0Y2gobCxmdW5jdGlvbihyKXtmb3IodmFyIGkgaW4gcil7dmFyIHM9M0Ru W2ldPQosbz0zRGMuX2Jsb2NrX2lkKGUscyk7Yy5jYWNoZVtvXT0zRHJbaV19Yy5fZmlsbF9mcm9t X2NhY2hlKGUpLHQoZSl9KX0sX2ZpbGw9Cl9mcm9tX2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PTNE ZS5zdGFydDtjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZpbGxfZnJvbT0KX2NhY2hlKCkgLSBG aWxsaW5nIHJlcXVlc3QgZnJvbSBjYWNoZSBhdCAiK3QrIi4iKTt2YXIgbj0zRDA7Zm9yKHZhciBy IGluIGUuPQpncm91cHMpe3ZhciBpPTNEZS5ncm91cHNbcl07Zm9yKHZhciBzIGluIGkuY29sdW1u cyl7dmFyIG89M0RpLmNvbHVtbnNbc10sdT0KPTNEdGhpcy5fYmxvY2tfaWQoZSxvLmluZGV4KSxh PTNEdGhpcy5jYWNoZVt1XTthJiYobj0zRE1hdGgubWF4KG4sYS5sZW5ndGgpPQopfX1uPTNEPTNE MCYmY29uc29sZS5kZWJ1ZygiRGF0YXNldHM6Ol9maWxsX2Zyb21fY2FjaGUoKSAtIFJlYWNoZWQg ZGF0YSByYW49CmdlIGxpbWl0LiIpO2Zvcih2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0RlLmdy b3Vwc1tyXTtpLnZhbHVlcz0zRFtdO2Zvcih2YT0KciBmPTNEMDtmPG47ZisrKWkudmFsdWVzW2Zd PTNEe3g6cGFyc2VJbnQoZikrdH19Zm9yKHZhciByIGluIGUuZ3JvdXBzKXt2YXIgPQppPTNEZS5n cm91cHNbcl07Zm9yKHZhciBzIGluIGkuY29sdW1ucyl7dmFyIG89M0RpLmNvbHVtbnNbc107c3dp dGNoKG8uaW5kZXg9Cil7Y2FzZSJhdXRvIjpmb3IodmFyIGY9M0QwO2Y8bjtmKyspe3ZhciBsPTNE aS52YWx1ZXNbZl07bFtzXT0zRHBhcnNlSW50KGYpKz0KdH1icmVhaztjYXNlInplcm8iOmZvcih2 YXIgZj0zRDA7ZjxuO2YrKyl7dmFyIGw9M0RpLnZhbHVlc1tmXTtsW3NdPTNEMH1icmVhPQprO2Rl ZmF1bHQ6dmFyIHU9M0R0aGlzLl9ibG9ja19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3Vd O2Zvcih2YXIgZj0zRDA9CjtmPG47ZisrKXt2YXIgbD0zRGkudmFsdWVzW2ZdLGM9M0RhW2ZdO2lz TmFOKGMpJiYhby5pc19sYWJlbCYmKGM9M0QwKSxsW3NdPQo9M0RjfX19fX0sX2ZldGNoOmZ1bmN0 aW9uKHQsbil7dmFyIHI9M0R0LnN0YXJ0P3Quc3RhcnQ6MCxpPTNEdGhpcy5hcHAuY29uZmk9Cmcu Z2V0KCJxdWVyeV9saW1pdCIpLHM9M0QwO3QuY29sdW1ucyYmKHM9M0R0LmNvbHVtbnMubGVuZ3Ro LGNvbnNvbGUuZGVidWcoIj0KRGF0YXNldHM6Ol9mZXRjaCgpIC0gRmV0Y2hpbmcgIitzKyIgY29s dW1uKHMpIGF0ICIrcisiLiIpKSxzPTNEPTNEMCYmY29uc29sPQplLmRlYnVnKCJEYXRhc2V0czo6 X2ZldGNoKCkgLSBObyBjb2x1bW5zIHJlcXVlc3RlZCIpO3ZhciBvPTNEIiI7Zm9yKHZhciB1IGk9 Cm4gdC5jb2x1bW5zKW8rPTNEdC5jb2x1bW5zW3VdKyIsIjtvPTNEby5zdWJzdHJpbmcoMCxvLmxl bmd0aC0xKTt2YXIgYT0zRHRoaT0KcztlLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmNvbmZpZy5y b290KyJhcGkvZGF0YXNldHMvIit0LmRhdGFzZXRfaWQsZGF0YTp7PQpkYXRhX3R5cGU6InJhd19k YXRhIixwcm92aWRlcjoiZGF0YXNldC1jb2x1bW4iLGxpbWl0Omksb2Zmc2V0OnIsaW5kZWNlczpv fSw9CnN1Y2Nlc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RuZXcgQXJyYXkocyk7Zm9yKHZhciByPTNE MDtyPHM7cisrKXRbcl09M0RbXTtmbz0Kcih2YXIgciBpbiBlLmRhdGEpe3ZhciBpPTNEZS5kYXRh W3JdO2Zvcih2YXIgbyBpbiBpKXt2YXIgdT0zRGlbb107dSE9M0Q9M0R1PQpuZGVmaW5lZCYmdSE9 M0QyMTQ3NDgzNjQ3JiZ0W29dLnB1c2godSl9fWNvbnNvbGUuZGVidWcoIkRhdGFzZXRzOjpfZmV0 Y2goKSA9Ci0gRmV0Y2hpbmcgY29tcGxldGUuIiksbih0KX19KX19KX0pLGRlZmluZSgicGx1Z2lu L21vZGVscy9ncm91cCIsW10sZnVuY3Rpbz0Kbigpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRl bmQoe2RlZmF1bHRzOntrZXk6IkRhdGEgbGFiZWwiLGRhdGU6IiJ9LHJlc2V0PQo6ZnVuY3Rpb24o KXt0aGlzLmNsZWFyKHtzaWxlbnQ6ITB9KS5zZXQodGhpcy5kZWZhdWx0cyksdGhpcy50cmlnZ2Vy KCJyZXNldCI9Cix0aGlzKX19KX0pLGRlZmluZSgicGx1Z2luL21vZGVscy9ncm91cHMiLFsicGx1 Z2luL21vZGVscy9ncm91cCJdLGZ1bmN0aW9uKD0KZSl7cmV0dXJuIEJhY2tib25lLkNvbGxlY3Rp b24uZXh0ZW5kKHttb2RlbDplfSl9KSxkZWZpbmUoInBsdWdpbi9tb2RlbHMvY2hhPQpydCIsWyJw bHVnaW4vbW9kZWxzL2dyb3VwcyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5l eHRlbmQoe2RlZmE9CnVsdHM6e2lkOm51bGwsdGl0bGU6IiIsdHlwZToiIixkYXRlOm51bGwsc3Rh dGU6IiIsc3RhdGVfaW5mbzoiIixtb2RpZmllZDohMT0KLGRhdGFzZXRfaWQ6IiIsZGF0YXNldF9p ZF9qb2I6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5ncm91cHM9M0RuZXcgPQplLHRo aXMuc2V0dGluZ3M9M0RuZXcgQmFja2JvbmUuTW9kZWx9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5j bGVhcih7c2lsZW50OiE9CjB9KS5zZXQodGhpcy5kZWZhdWx0cyksdGhpcy5ncm91cHMucmVzZXQo KSx0aGlzLnNldHRpbmdzLmNsZWFyKCksdGhpcy50cmlnZz0KZXIoInJlc2V0Iix0aGlzKX0sY29w eTpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXM7dC5jbGVhcih7c2lsZW50OiEwfSkuc2V0KHRoPQpp cy5kZWZhdWx0cyksdC5zZXQoZS5hdHRyaWJ1dGVzKSx0LnNldHRpbmdzPTNEZS5zZXR0aW5ncy5j bG9uZSgpLHQuZ3JvdXBzLnI9CmVzZXQoKSxlLmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKGUpe3QuZ3Jv dXBzLmFkZChlLmNsb25lKCkpfSksdC50cmlnZ2VyKCJjaGFuZz0KZSIsdCl9LHN0YXRlOmZ1bmN0 aW9uKGUsdCl7dGhpcy5zZXQoInN0YXRlIixlKSx0aGlzLnNldCgic3RhdGVfaW5mbyIsdCksdGhp PQpzLnRyaWdnZXIoInNldDpzdGF0ZSIpLGNvbnNvbGUuZGVidWcoIkNoYXJ0OnN0YXRlKCkgLSAi K3QrIiAoIitlKyIpIil9fSl9KTs9CnZhciBWaXN1YWxpemF0aW9uPTNEQmFja2JvbmUuTW9kZWwu ZXh0ZW5kKHtkZWZhdWx0czp7Y29uZmlnOnt9fSx1cmxSb290OmZ1bj0KY3Rpb24oKXt2YXIgZT0z RCIvYXBpL3Zpc3VhbGl6YXRpb25zIjtyZXR1cm4gd2luZG93LmdhbGF4eV9jb25maWcmJmdhbGF4 eV9jPQpvbmZpZy5yb290P2dhbGF4eV9jb25maWcucm9vdCtlOmV9LGluaXRpYWxpemU6ZnVuY3Rp b24oZSl7Xy5pc09iamVjdChlLmNvbmY9CmlnKSYmXy5pc09iamVjdCh0aGlzLmRlZmF1bHRzLmNv bmZpZykmJl8uZGVmYXVsdHMoZS5jb25maWcsdGhpcy5kZWZhdWx0cy5jbz0KbmZpZyksdGhpcy5f c2V0VXBMaXN0ZW5lcnMoKX0sX3NldFVwTGlzdGVuZXJzOmZ1bmN0aW9uKCl7fSxzZXQ6ZnVuY3Rp b24oZSx0PQope2lmKGU9M0Q9M0Q9M0QiY29uZmlnIil7dmFyIG49M0R0aGlzLmdldCgiY29uZmln Iik7Xy5pc09iamVjdChuKSYmKHQ9M0RfLmU9Cnh0ZW5kKF8uY2xvbmUobiksdCkpfXJldHVybiBC YWNrYm9uZS5Nb2RlbC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxlLHQpLHRoaT0Kc30sdG9TdHJp bmc6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuZ2V0KCJpZCIpfHwiIjtyZXR1cm4gdGhpcy5nZXQo InRpdGxlIikmPQomKGUrPTNEIjoiK3RoaXMuZ2V0KCJ0aXRsZSIpKSwiVmlzdWFsaXphdGlvbigi K2UrIikifX0pLFZpc3VhbGl6YXRpb25Db2xsZWM9CnRpb249M0RCYWNrYm9uZS5Db2xsZWN0aW9u LmV4dGVuZCh7bW9kZWw6VmlzdWFsaXphdGlvbix1cmw6ZnVuY3Rpb24oKXtyZXR1cj0KbiBnYWxh eHlfY29uZmlnLnJvb3QrImFwaS92aXN1YWxpemF0aW9ucyJ9LGluaXRpYWxpemU6ZnVuY3Rpb24o ZSx0KXt0PTNEdHx8PQp7fX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzO2U9M0RfLm1h cChlLGZ1bmN0aW9uKGUpe3ZhciB0PTNEbi5nZXQoZS49CmlkKTtpZighdClyZXR1cm4gZTt2YXIg cj0zRHQudG9KU09OKCk7cmV0dXJuIF8uZXh0ZW5kKHIsZSkscn0pLEJhY2tib25lLkNvbD0KbGVj dGlvbi5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxlLHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3Jl dHVyblsiVmlzdWFsaXphPQp0aW9uQ29sbGVjdGlvbigiLFt0aGlzLmhpc3RvcnlJZCx0aGlzLmxl bmd0aF0uam9pbigpLCIpIl0uam9pbigiIil9fSk7ZGVmaW49CmUoIm12Yy92aXN1YWxpemF0aW9u L3Zpc3VhbGl6YXRpb24tbW9kZWwiLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJwbHVnaW4vbGlicj0K YXJ5L3N0b3JhZ2UiLFsidXRpbHMvdXRpbHMiLCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2lu L21vZGVscy9ncm91cCIsIm12PQpjL3Zpc3VhbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCJd LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQmFja2JvbmUuTW9kZWw9Ci5leHRlbmQoe3ZpczpudWxs LGluaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5hcHA9M0RlLHRoaXMuY2hhcnQ9M0R0aGlzLmFw cD0KLmNoYXJ0LHRoaXMub3B0aW9ucz0zRHRoaXMuYXBwLm9wdGlvbnMsdGhpcy5pZD0zRHRoaXMu b3B0aW9ucy5pZCx0aGlzLnZpcz0KPTNEbmV3IFZpc3VhbGl6YXRpb24oe3R5cGU6ImNoYXJ0cyIs Y29uZmlnOntkYXRhc2V0X2lkOnRoaXMub3B0aW9ucy5jb25maWcuPQpkYXRhc2V0X2lkLGNoYXJ0 X2RpY3Q6e319fSksdGhpcy5pZCYmKHRoaXMudmlzLmlkPTNEdGhpcy5pZCk7dmFyIHQ9M0R0aGlz Lm89CnB0aW9ucy5jb25maWcuY2hhcnRfZGljdDt0JiYodGhpcy52aXMuZ2V0KCJjb25maWciKS5j aGFydF9kaWN0PTNEdCl9LHNhdmU6Zj0KdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5hcHAuY2hhcnQ7 dGhpcy52aXMuZ2V0KCJjb25maWciKS5jaGFydF9kaWN0PTNEe307dmFyPQogdD0zRGUuZ2V0KCJ0 aXRsZSIpO3QhPTNEIiImJnRoaXMudmlzLnNldCgidGl0bGUiLHQpO3ZhciBuPTNEe2F0dHJpYnV0 ZXM6ZS49CmF0dHJpYnV0ZXMsc2V0dGluZ3M6ZS5zZXR0aW5ncy5hdHRyaWJ1dGVzLGdyb3Vwczpb XX07ZS5ncm91cHMuZWFjaChmdW5jdGlvbj0KKGUpe24uZ3JvdXBzLnB1c2goZS5hdHRyaWJ1dGVz KX0pLHRoaXMudmlzLmdldCgiY29uZmlnIikuY2hhcnRfZGljdD0zRG47dmFyPQogcj0zRHRoaXM7 dGhpcy52aXMuc2F2ZSgpLmZhaWwoZnVuY3Rpb24oZSx0LG4pe2NvbnNvbGUuZXJyb3IoZSx0LG4p fSkudGhlbig9CmZ1bmN0aW9uKGUpe2UmJmUuaWQmJihyLmlkPTNEZS5pZCl9KX0sbG9hZDpmdW5j dGlvbigpe3ZhciBlPTNEdGhpcy52aXMuZ2V0KD0KImNvbmZpZyIpLmNoYXJ0X2RpY3Q7aWYoIWUu YXR0cmlidXRlcylyZXR1cm4hMTt2YXIgdD0zRGUuYXR0cmlidXRlcy50eXBlO2lmPQooIXQpcmV0 dXJuIGNvbnNvbGUuZGVidWcoIlN0b3JhZ2U6OmxvYWQoKSAtIENoYXJ0IHR5cGUgbm90IHByb3Zp ZGVkLiBJbnZhbGk9CmQgZm9ybWF0LiIpLCExO3ZhciByPTNEdGhpcy5hcHAudHlwZXMuZ2V0KHQp O2lmKCFyKXJldHVybiBjb25zb2xlLmRlYnVnKCJTdD0Kb3JhZ2U6OmxvYWQoKSAtIENoYXJ0IHR5 cGUgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHJlLWNvbmZpZ3VyZSB0aGUgY2hhcnQuIFJlPQpzZXR0 aW5nIGNoYXJ0LiIpLCExO2NvbnNvbGUuZGVidWcoIlN0b3JhZ2U6OmxvYWQoKSAtIExvYWRpbmcg Y2hhcnQgdHlwZSAiK3Q9CisiLiIpLHRoaXMuY2hhcnQuZGVmaW5pdGlvbj0zRHIsdGhpcy5jaGFy dC5zZXQoZS5hdHRyaWJ1dGVzKSx0aGlzLmNoYXJ0LnN0YT0KdGUoIm9rIiwiTG9hZGluZyBzYXZl ZCB2aXN1YWxpemF0aW9uLi4uIiksdGhpcy5jaGFydC5zZXR0aW5ncy5zZXQoZS5zZXR0aW5nPQpz KTtmb3IodmFyIGkgaW4gZS5ncm91cHMpdGhpcy5jaGFydC5ncm91cHMuYWRkKG5ldyBuKGUuZ3Jv dXBzW2ldKSk7cmV0dXJuIHQ9Cmhpcy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMSksITB9fSl9KSxk ZWZpbmUoInV0aWxzL2RlZmVycmVkIixbInV0aWxzL3V0aWxzIj0KXSxmdW5jdGlvbihlKXtyZXR1 cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtxdWV1ZTpbXSxwcm9jZXNzOnt9LGNvdW50ZXI6MCxp PQpuaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLm9uKCJyZWZyZXNoIixmdW5jdGlvbigpe2lmKHRo aXMucXVldWUubGVuZ3RoPjAmJnQ9Cmhpcy5yZWFkeSgpKXt2YXIgZT0zRHRoaXMucXVldWVbMF07 dGhpcy5xdWV1ZS5zcGxpY2UoMCwxKSxlJiZlKCl9fSl9LGV4ZWN1dD0KZTpmdW5jdGlvbihlKXt0 aGlzLnF1ZXVlLnB1c2goZSksdGhpcy50cmlnZ2VyKCJyZWZyZXNoIil9LHJlZ2lzdGVyOmZ1bmN0 aW9uPQooKXt2YXIgdD0zRGUudXVpZCgpO3JldHVybiB0aGlzLnByb2Nlc3NbdF09M0QhMCx0aGlz LmNvdW50ZXIrKyxjb25zb2xlLmRlYnU9CmcoIkRlZmVycmVkOnJlZ2lzdGVyKCkgLSBSZWdpc3Rl cmluZyAiK3QpLHR9LGRvbmU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9jZXNzWz0KZV0mJihkZWxldGUg dGhpcy5wcm9jZXNzW2VdLHRoaXMuY291bnRlci0tLGNvbnNvbGUuZGVidWcoIkRlZmVycmVkOmRv bmUoKSAtPQogVW5yZWdpc3RlcmluZyAiK2UpLHRoaXMudHJpZ2dlcigicmVmcmVzaCIpKX0scmVz ZXQ6ZnVuY3Rpb24oKXt0aGlzLnF1ZXVlPQo9M0RbXX0scmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5jb3VudGVyPTNEPTNEMH19KX0pLGRlZmluZSgicGx1Z2luL3ZpZXc9CnMvdmlld3BvcnQi LFsibXZjL3VpL3VpLXBvcnRsZXQiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVu Y3Rpb24oZT0KLHQsbil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtjb250YWluZXJfbGlz dDpbXSxjYW52YXNfbGlzdDpbXSxpbml0aWFsPQppemU6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcD0z RGUsdGhpcy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMub3B0aW9ucz0zRG49Ci5tZXJnZSh0 LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgkKHRoaXMuX3RlbXBsYXRlKCkp KSx0aGlzLl9mdT0KbGxzY3JlZW4odGhpcy4kZWwsMTAwKSx0aGlzLl9jcmVhdGVDb250YWluZXIo ImRpdiIpO3ZhciByPTNEdGhpczt0aGlzLmNoYXJ0PQoub24oInJlZHJhdyIsZnVuY3Rpb24oKXty Ll9kcmF3KHIuY2hhcnQpfSksdGhpcy5jaGFydC5vbigic2V0OnN0YXRlIixmdW5jdGk9Cm9uKCl7 dmFyIGU9M0RyLiRlbC5maW5kKCIjaW5mbyIpLHQ9M0RyLiRlbC5maW5kKCIuY2hhcnRzLXZpZXdw b3J0LWNvbnRhaW5lcj0KIiksbj0zRGUuZmluZCgiI2ljb24iKTtuLnJlbW92ZUNsYXNzKCksZS5z aG93KCksZS5maW5kKCIjdGV4dCIpLmh0bWwoci5jaGFyPQp0LmdldCgic3RhdGVfaW5mbyIpKTt2 YXIgaT0zRHIuY2hhcnQuZ2V0KCJzdGF0ZSIpO3N3aXRjaChpKXtjYXNlIm9rIjplLmhpZGU9Cigp LHQuc2hvdygpO2JyZWFrO2Nhc2UiZmFpbGVkIjpuLmFkZENsYXNzKCJpY29uIGZhIGZhLXdhcm5p bmciKSx0LmhpZGUoKTticj0KZWFrO2RlZmF1bHQ6bi5hZGRDbGFzcygiaWNvbiBmYSBmYS1zcGlu bmVyIGZhLXNwaW4iKSx0LnNob3coKX19KX0sc2hvdzpmdW5jPQp0aW9uKCl7dGhpcy4kZWwuc2hv dygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSxfZnVsbHNjcmVlbjpmdW5jdGk9 Cm9uKGUsdCl7ZS5jc3MoImhlaWdodCIsJCh3aW5kb3cpLmhlaWdodCgpLXQpLCQod2luZG93KS5y ZXNpemUoZnVuY3Rpb24oKXtlLj0KY3NzKCJoZWlnaHQiLCQod2luZG93KS5oZWlnaHQoKS10KX0p fSxfY3JlYXRlQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCl7dD0zRHR8PQp8MTtmb3IodmFyIG4gaW4g dGhpcy5jb250YWluZXJfbGlzdCl0aGlzLmNvbnRhaW5lcl9saXN0W25dLnJlbW92ZSgpO3RoaXMu Y289Cm50YWluZXJfbGlzdD0zRFtdLHRoaXMuY2FudmFzX2xpc3Q9M0RbXTtmb3IodmFyIG49M0Qw O248dDtuKyspe3ZhciByPTNEJCh0aD0KaXMuX3RlbXBsYXRlQ29udGFpbmVyKGUscGFyc2VJbnQo MTAwL3QpKSk7dGhpcy4kZWwuYXBwZW5kKHIpLHRoaXMuY29udGFpbmVyPQpfbGlzdFtuXT0zRHIs dGhpcy5jYW52YXNfbGlzdFtuXT0zRHIuZmluZCgiLmNoYXJ0cy12aWV3cG9ydC1jYW52YXMiKS5h dHRyKCI9CmlkIil9fSxfZHJhdzpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMsbj0zRHRoaXMuYXBw LmRlZmVycmVkLnJlZ2lzdGVyKCkscj0zRD0KZS5nZXQoInR5cGUiKTt0aGlzLmNoYXJ0X2RlZmlu aXRpb249M0RlLmRlZmluaXRpb247dmFyIGk9M0QxO2Uuc2V0dGluZ3MuZ2V0PQooInVzZV9wYW5l bHMiKT0zRD0zRD0zRCJ0cnVlIiYmKGk9M0RlLmdyb3Vwcy5sZW5ndGgpLHRoaXMuX2NyZWF0ZUNv bnRhaW5lcig9CnRoaXMuY2hhcnRfZGVmaW5pdGlvbi50YWcsaSksZS5zdGF0ZSgid2FpdCIsIlBs ZWFzZSB3YWl0Li4uIik7aWYoIXRoaXMuY2hhcj0KdF9kZWZpbml0aW9uLmV4ZWN1dGV8fHRoaXMu Y2hhcnRfZGVmaW5pdGlvbi5leGVjdXRlJiZlLmdldCgibW9kaWZpZWQiKSl0aGlzPQouYXBwLmpv YnMuY2xlYW51cChlKSxlLnNldCgibW9kaWZpZWQiLCExKTt2YXIgdD0zRHRoaXM7cmVxdWlyZShb InBsdWdpbi9jaGE9CnJ0cy8iK3RoaXMuYXBwLmNoYXJ0UGF0aChyKSsiL3dyYXBwZXIiXSxmdW5j dGlvbihyKXtpZih0LmNoYXJ0X2RlZmluaXRpb24uZT0KeGVjdXRlKXQuYXBwLmpvYnMucmVxdWVz dChlLHQuX2RlZmF1bHRTZXR0aW5nc1N0cmluZyhlKSx0Ll9kZWZhdWx0UmVxdWVzdFN0PQpyaW5n KGUpLGZ1bmN0aW9uKCl7dmFyIGk9M0RuZXcgcih0LmFwcCx7cHJvY2Vzc19pZDpuLGNoYXJ0OmUs cmVxdWVzdF9kaWN0aW89Cm5hcnk6dC5fZGVmYXVsdFJlcXVlc3REaWN0aW9uYXJ5KGUpLGNhbnZh c19saXN0OnQuY2FudmFzX2xpc3R9KX0sZnVuY3Rpb24oKT0Ke3RoaXMuYXBwLmRlZmVycmVkLmRv bmUobil9KTtlbHNlIHZhciBpPTNEbmV3IHIodC5hcHAse3Byb2Nlc3NfaWQ6bixjaGFydDplPQos cmVxdWVzdF9kaWN0aW9uYXJ5OnQuX2RlZmF1bHRSZXF1ZXN0RGljdGlvbmFyeShlKSxjYW52YXNf bGlzdDp0LmNhbnZhc19saXM9CnR9KX0pfSxfZGVmYXVsdFJlcXVlc3RTdHJpbmc6ZnVuY3Rpb24o ZSl7dmFyIHQ9M0QiIixuPTNEMCxyPTNEdGhpcztyZXR1cm4gZT0KLmdyb3Vwcy5lYWNoKGZ1bmN0 aW9uKGUpe24rKztmb3IodmFyIGkgaW4gci5jaGFydF9kZWZpbml0aW9uLmNvbHVtbnMpdCs9M0Rp PQorIl8iK24rIjoiKyhwYXJzZUludChlLmdldChpKSkrMSkrIiwgIn0pLHQuc3Vic3RyaW5nKDAs dC5sZW5ndGgtMil9LF9kZWZhdWw9CnRTZXR0aW5nc1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0z RCIiO2ZvcihrZXkgaW4gZS5zZXR0aW5ncy5hdHRyaWJ1dGVzKXQrPQo9M0RrZXkrIjoiK2Uuc2V0 dGluZ3MuZ2V0KGtleSkrIiwgIjtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKX0sX2Rl ZmE9CnVsdFJlcXVlc3REaWN0aW9uYXJ5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEe2dyb3VwczpbXX07 dGhpcy5jaGFydF9kZWZpbml0aW9uLj0KZXhlY3V0ZT90LmlkPTNEZS5nZXQoImRhdGFzZXRfaWRf am9iIik6dC5pZD0zRGUuZ2V0KCJkYXRhc2V0X2lkIik7dmFyIHI9M0QwPQosaT0zRHRoaXM7cmV0 dXJuIGUuZ3JvdXBzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHM9M0R7fTtmb3IodmFyIG8gaW4gaS5j aGFydF89CmRlZmluaXRpb24uY29sdW1ucyl7dmFyIHU9M0RpLmNoYXJ0X2RlZmluaXRpb24uY29s dW1uc1tvXTtzW29dPTNEbi5tZXJnZSh7aT0KbmRleDplLmdldChvKX0sdSl9dC5ncm91cHMucHVz aCh7a2V5OisrcisiOiIrZS5nZXQoImtleSIpLGNvbHVtbnM6c30pfSksdH0sPQpfdGVtcGxhdGU6 ZnVuY3Rpb24oKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJjaGFydHMtdmlld3BvcnQiPjxkaXYgaWQ9 M0QiaW5mbyI9CiBjbGFzcz0zRCJpbmZvIj48c3BhbiBpZD0zRCJpY29uIiBjbGFzcz0zRCJpY29u Ii8+PHNwYW4gaWQ9M0QidGV4dCIgY2xhc3M9Cj0zRCJ0ZXh0IiAvPjwvZGl2PjwvZGl2Pid9LF90 ZW1wbGF0ZUNvbnRhaW5lcjpmdW5jdGlvbihlLHQpe3JldHVybic8ZGl2IGNsYT0Kc3M9M0QiY2hh cnRzLXZpZXdwb3J0LWNvbnRhaW5lciIgc3R5bGU9M0Qid2lkdGg6Jyt0KyclOyI+JysnPGRpdiBp ZD0zRCJtZW51PQoiLz4nKyI8IitlKycgaWQ9M0QiJytuLnV1aWQoKSsnIiBjbGFzcz0zRCJjaGFy dHMtdmlld3BvcnQtY2FudmFzIj4nKyI8L2Rpdj49CiJ9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJy YXJ5L3NjcmVlbnNob3QiLFsibGlicy91bmRlcnNjb3JlIl0sZnVuY3Rpb24oZSl7Zj0KdW5jdGlv biB0KGUpe2UuJGVsLmZpbmQoInN2ZyIpLmxlbmd0aD4wP3IoZSk6bihlKX1mdW5jdGlvbiBuKGUp e3RyeXt2YXIgdD0KPTNEZS4kZWwuZmluZCgiLmpxcGxvdC10YXJnZXQiKSxuPTNEdC5qcXBsb3RU b0ltYWdlU3RyKHt9KTtuJiYod2luZG93LmxvY2F0PQppb24uaHJlZj0zRG4ucmVwbGFjZSgiaW1h Z2UvcG5nIiwiaW1hZ2Uvb2N0ZXQtc3RyZWFtIikpfWNhdGNoKHIpe2NvbnNvbGUuZGU9CmJ1Zygi RkFJTEVEIC0gU2NyZWVuc2hvdDo6X2Zyb21DYW52YXMoKSAtICIrciksZS5lcnJvciYmZS5lcnJv cigiUGxlYXNlIHJlZD0KdWNlIHlvdXIgY2hhcnQgdG8gYSBzaW5nbGUgcGFuZWwgYW5kIHRyeSBh Z2Fpbi4iKX19ZnVuY3Rpb24gcihlKXt2YXIgdD0zRGUuPQokZWwsbj0zRGUudXJsLHI9M0RlLm5h bWUscz0zRG5ldyBYTUxTZXJpYWxpemVyLG89M0Rkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI9CmNh bnZhcyIpLHU9M0QkKG8pLGE9M0R0LmZpbmQoInN2ZyIpLmxlbmd0aCxmPTNEdC5maW5kKCJzdmci KS5maXJzdCgpLGw9M0RwYT0KcnNlSW50KGYuY3NzKCJoZWlnaHQiKSksYz0zRHBhcnNlSW50KGYu Y3NzKCJ3aWR0aCIpKTt1LmF0dHIoIndpZHRoIixjKmEpLHUuPQphdHRyKCJoZWlnaHQiLGwpLCgh by5nZXRDb250ZXh0fHwhby5nZXRDb250ZXh0KCIyZCIpKSYmYWxlcnQoIllvdXIgYnJvd3NlciA9 CmRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUsIHBsZWFzZSB1c2UgYSBtb2Rlcm4gYnJvd3Nl ciIpO3ZhciBoPTNEby5nZXRDbz0KbnRleHQoIjJkIikscD0zRDA7dC5maW5kKCJzdmciKS5lYWNo KGZ1bmN0aW9uKCl7dmFyIGU9M0QkKHRoaXMpO2UuYXR0cih7dmVyPQpzaW9uOiIxLjEiLHhtbG5z OiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6YyxoZWlnaHQ6bH0pO3ZhciB0PTNE cy49CnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMpO2guZHJhd1N2Zyh0LHAsMCxjLGwpLHArPTNEY30p LHdpbmRvdy5sb2NhdGlvbi5ocmVmPQo9M0RpKG8sby5nZXRDb250ZXh0KCIyZCIpLCJ3aGl0ZSIp LnJlcGxhY2UoImltYWdlL3BuZyIsImltYWdlL29jdGV0LXN0cmVhbSI9Cil9ZnVuY3Rpb24gaShl LHQsbil7dmFyIHI9M0RlLndpZHRoLGk9M0RlLmhlaWdodCxzO2lmKG4pe3M9M0R0LmdldEltYWdl RGF0YT0KKDAsMCxyLGkpO3ZhciBvPTNEdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9i YWxDb21wb3NpdGVPcGVyYXRpb249M0QiPQpkZXN0aW5hdGlvbi1vdmVyIix0LmZpbGxTdHlsZT0z RG4sdC5maWxsUmVjdCgwLDAscixpKX12YXIgdT0zRGUudG9EYXRhVVJMKCI9CmltYWdlL3BuZyIp O3JldHVybiBuJiYodC5jbGVhclJlY3QoMCwwLHIsaSksdC5wdXRJbWFnZURhdGEocywwLDApLHQu Z2xvYmFsQz0Kb21wb3NpdGVPcGVyYXRpb249M0RvKSx1fWZ1bmN0aW9uIHMoZSl7d2luZG93Lmxv Y2F0aW9uLmhyZWY9M0QiZGF0YTpub25lL25vPQpuZTtiYXNlNjQsIitidG9hKGEoZSkuc3RyaW5n KX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCBpbiBkb2N1bWVudC5zdHlsZVNoZWU9CnRzKXt2YXIg bj0zRGRvY3VtZW50LnN0eWxlU2hlZXRzW3RdLHI9M0RuLmNzc1J1bGVzO2lmKHIpZm9yKHZhciBp PTNEMCxzPTNEcj0KLmxlbmd0aDtpPHM7aSsrKXRyeXtlLmZpbmQocltpXS5zZWxlY3RvclRleHQp LmVhY2goZnVuY3Rpb24oZSx0KXt0LnN0eWxlLmNzPQpzVGV4dCs9M0RyW2ldLnN0eWxlLmNzc1Rl eHR9KX1jYXRjaChvKXt9fX1mdW5jdGlvbiB1KGUpe3ZhciB0PTNEYShlKSxuPTNEe2Y9CmlsZW5h bWU6bmFtZXx8ImNoYXJ0Iix0eXBlOiJhcHBsaWNhdGlvbi9wZGYiLGhlaWdodDp0LmhlaWdodCx3 aWR0aDp0LndpZHRoLD0Kc2NhbGU6Mixzdmc6dC5zdHJpbmd9LHI9M0QkKCJib2R5IiksaT0zRHIu ZmluZCgiI3ZpZXdwb3J0LWZvcm0iKTtpLmxlbmd0aD0KPTNEPTNEPTNEMCYmKGk9M0QkKCI8Zm9y bT4iLHtpZDoidmlld3BvcnQtZm9ybSIsbWV0aG9kOiJwb3N0IixhY3Rpb246Imh0dHA6PQovL2V4 cG9ydC5oaWdoY2hhcnRzLmNvbS8iLGRpc3BsYXk6Im5vbmUifSksci5hcHBlbmQoaSkpLGkuZW1w dHkoKTtmb3IobmFtZSA9CmluIG4pe3ZhciBzPTNEJCgiPGlucHV0Lz4iLHt0eXBlOiJoaWRkZW4i LG5hbWU6bmFtZSx2YWx1ZTpuW25hbWVdfSk7aS5hcHBlbj0KZChzKX10cnl7aS5zdWJtaXQoKX1j YXRjaChvKXtjb25zb2xlLmxvZyhvKX19ZnVuY3Rpb24gYShlKXtpZihlLiRlbC5maW5kKCJzPQp2 ZyIpLmxlbmd0aD0zRD0zRDAmJmUuZXJyb3Ipe2UuZXJyb3IoIk5vIFNWRyBmb3VuZC4gVGhpcyBj aGFydCB0eXBlIGRvZXMgbm89CnQgc3VwcG9ydCBTVkcvUERGIGV4cG9ydC4iKTtyZXR1cm59dmFy IHQ9M0RlLiRlbCxuPTNEdC5maW5kKCJzdmciKS5sZW5ndGgscj0KPTNEcGFyc2VJbnQodC5maW5k KCJzdmciKS5maXJzdCgpLmNzcygiaGVpZ2h0IikpLGk9M0RwYXJzZUludCh0LmZpbmQoInN2ZyIp PQouZmlyc3QoKS5jc3MoIndpZHRoIikpLHM9M0RuZXcgWE1MU2VyaWFsaXplcix1PTNEJCgiPHN2 Zy8+Iik7dS5hdHRyKHt2ZXJzaW89Cm46IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIw MDAvc3ZnIix3aWR0aDppKm4saGVpZ2h0OnJ9KTt2YXIgYT0zRCIiLD0KZj0zRDA7cmV0dXJuIHQu ZmluZCgic3ZnIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPTNEJCh0aGlzKS5jbG9uZSgpO28oZSk7 dmFyPQogdD0zRCQoJzxnIHRyYW5zZm9ybT0zRCJ0cmFuc2xhdGUoJytmKycsIDApIj4nKTt0LmFw cGVuZChlLmZpbmQoImciKS5maXJzdCg9CikpLHUuYXBwZW5kKHQpLGYrPTNEaX0pLHtzdHJpbmc6 cy5zZXJpYWxpemVUb1N0cmluZyh1WzBdKSxoZWlnaHQ6cix3aWR0aDppfT0KfXJldHVybntjcmVh dGVQTkc6dCxjcmVhdGVTVkc6cyxjcmVhdGVQREY6dX19KSxkZWZpbmUoInBsdWdpbi92aWV3cy92 aWV3ZXIiPQosWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS1taXNjIiwibXZjL3VpL3VpLXBvcnRs ZXQiLCJwbHVnaW4vdmlld3Mvdmlld3BvcnQ9CiIsInBsdWdpbi9saWJyYXJ5L3NjcmVlbnNob3Qi XSxmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dD0KZW5kKHtpbml0 aWFsaXplOmZ1bmN0aW9uKGUscyl7dGhpcy5hcHA9M0RlLHRoaXMuY2hhcnQ9M0R0aGlzLmFwcC5j aGFydCx0aGlzPQoudmlld3BvcnRfdmlldz0zRG5ldyByKGUpO3ZhciBvPTNEdGhpczt0aGlzLm1l c3NhZ2U9M0RuZXcgdC5NZXNzYWdlO3ZhciB1PQo9M0RuZXcgdC5CdXR0b25NZW51KHtpY29uOiJm YS1jYW1lcmEiLHRpdGxlOiJTY3JlZW5zaG90Iix0b29sdGlwOiJEb3dubG9hZCA9CmFzIFBORywg U1ZHIG9yIFBERiBmaWxlIn0pO3UuYWRkTWVudSh7aWQ6ImJ1dHRvbi1wbmciLHRpdGxlOiJTYXZl IGFzIFBORyIsaT0KY29uOiJmYS1maWxlIixvbmNsaWNrOmZ1bmN0aW9uKCl7by5fd2FpdChvLmNo YXJ0LGZ1bmN0aW9uKCl7aS5jcmVhdGVQTkcoeyRlPQpsOm8udmlld3BvcnRfdmlldy4kZWwsdGl0 bGU6by5jaGFydC5nZXQoInRpdGxlIiksZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYWc9CmUudXBk YXRlKHttZXNzYWdlOmUsc3RhdHVzOiJkYW5nZXIifSl9fSl9KX19KSx1LmFkZE1lbnUoe2lkOiJi dXR0b24tc3ZnIix0aT0KdGxlOiJTYXZlIGFzIFNWRyIsaWNvbjoiZmEtZmlsZS10ZXh0LW8iLG9u Y2xpY2s6ZnVuY3Rpb24oKXtvLl93YWl0KG8uY2hhcnQsPQpmdW5jdGlvbigpe2kuY3JlYXRlU1ZH KHskZWw6by52aWV3cG9ydF92aWV3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSw9CmVy cm9yOmZ1bmN0aW9uKGUpe28ubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdl ciJ9KX19KX0pfX0pLHUuYT0KZGRNZW51KHtpZDoiYnV0dG9uLXBuZyIsdGl0bGU6IlNhdmUgYXMg UERGIixpY29uOiJmYS1maWxlLW8iLG9uY2xpY2s6ZnVuY3RpPQpvbigpe28uYXBwLm1vZGFsLnNo b3coe3RpdGxlOiJTZW5kIGNoYXJ0IGRhdGEgZm9yIFBERiBjcmVhdGlvbiIsYm9keToiR2FsYXg9 CnkgZG9lcyBub3QgcHJvdmlkZSBpbnRlZ3JhdGVkIFBERiBleHBvcnQgc2NyaXB0cy4gWW91IG1h eSBjbGljayAnQ29udGludWUnID0KdG8gY3JlYXRlIHRoZSBQREYgYnkgdXNpbmcgYSAzcmQgcGFy dHkgc2VydmljZSAoaHR0cHM6Ly9leHBvcnQuaGlnaGNoYXJ0cy5jPQpvbSkuIixidXR0b25zOntD YW5jZWw6ZnVuY3Rpb24oKXtvLmFwcC5tb2RhbC5oaWRlKCl9LENvbnRpbnVlOmZ1bmN0aW9uKCl7 by49CmFwcC5tb2RhbC5oaWRlKCksby5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7aS5jcmVhdGVQ REYoeyRlbDpvLnZpZXdwb3J0X3ZpZT0Kdy4kZWwsdGl0bGU6by5jaGFydC5nZXQoInRpdGxlIiks ZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYWdlLnVwZGF0ZSh7bWVzc2FnPQplOmUsc3RhdHVzOiJk YW5nZXIifSl9fSl9KX19fSl9fSksdGhpcy5wb3J0bGV0PTNEbmV3IG4uVmlldyh7aWNvbjoiZmEt YmFyLWM9CmhhcnQtbyIsdGl0bGU6IlZpZXdwb3J0IixzY3JvbGxhYmxlOiExLG9wZXJhdGlvbnM6 e2VkaXRfYnV0dG9uOm5ldyB0LkJ1dHRvbj0KSWNvbih7aWNvbjoiZmEtZWRpdCIsdG9vbHRpcDoi Q3VzdG9taXplIHRoaXMgY2hhcnQiLHRpdGxlOiJFZGl0b3IiLG9uY2xpY2s6PQpmdW5jdGlvbigp e28uX3dhaXQoby5jaGFydCxmdW5jdGlvbigpe28uYXBwLmdvKCJlZGl0b3IiKX0pfX0pLHBpY3R1 cmVfYnV0dG89Cm5fbWVudTp1fX0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRl bCksdGhpcy5wb3J0bGV0LmFwcGVuZCh0aGlzLj0Kdmlld3BvcnRfdmlldy4kZWwpLHRoaXMuc2V0 RWxlbWVudCh0aGlzLnBvcnRsZXQuJGVsKTt2YXIgbz0zRHRoaXM7dGhpcy5jaGFyPQp0Lm9uKCJj aGFuZ2U6dGl0bGUiLGZ1bmN0aW9uKCl7by5fcmVmcmVzaFRpdGxlKCl9KX0sc2hvdzpmdW5jdGlv bigpe3RoaXMuJGU9Cmwuc2hvdygpLCQod2luZG93KS50cmlnZ2VyKCJyZXNpemUiKX0saGlkZTpm dW5jdGlvbigpe3RoaXMuJGVsLmhpZGUoKX0sX3JlZj0KcmVzaFRpdGxlOmZ1bmN0aW9uKCl7dmFy IGU9M0R0aGlzLmNoYXJ0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRsZXQudGl0bGUoZSl9PQosX3dh aXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcC5kZWZlcnJlZC5yZWFkeSgpP3QoKTp0aGlzLm1lc3Nh Z2UudXBkYXRlKHttZXM9CnNhZ2U6IllvdXIgY2hhcnQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nl c3NlZC4gUGxlYXNlIHdhaXQgYW5kIHRyeSBhZ2Fpbi4ifT0KKX19KX0pLGRlZmluZSgibXZjL3Vp L3VpLXRhYnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib25lPQou Vmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZV9uZXc6IiIsb3BlcmF0aW9uczpudWxs LG9ubmV3Om51bGwsbWF4Om49CnVsbCxvbmNoYW5nZTpudWxsfSxpbml0aWFsaXplOmZ1bmN0aW9u KHQpe3RoaXMudmlzaWJsZT0zRCExLHRoaXMuJG5hdj0zRG51bD0KbCx0aGlzLiRjb250ZW50PTNE bnVsbCx0aGlzLmZpcnN0X3RhYj0zRG51bGwsdGhpcy5jdXJyZW50X2lkPTNEbnVsbCx0aGlzLm9w PQp0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQodGhpcy5f dGVtcGxhdGUodGhpcy5vcHRpb249CnMpKTt0aGlzLiRuYXY9M0RuLmZpbmQoIi50YWItbmF2aWdh dGlvbiIpLHRoaXMuJGNvbnRlbnQ9M0RuLmZpbmQoIi50YWItY29udD0KZW50IiksdGhpcy5zZXRF bGVtZW50KG4pLHRoaXMubGlzdD0zRHt9O3ZhciByPTNEdGhpczt0aGlzLm9wdGlvbnMub3BlcmF0 aW9uPQpzJiYkLmVhY2godGhpcy5vcHRpb25zLm9wZXJhdGlvbnMsZnVuY3Rpb24oZSx0KXt0LiRl bC5wcm9wKCJpZCIsZSksci4kbmF2LmY9CmluZCgiLm9wZXJhdGlvbnMiKS5hcHBlbmQodC4kZWwp fSk7aWYodGhpcy5vcHRpb25zLm9ubmV3KXt2YXIgaT0zRCQodGhpcy5fdD0KZW1wbGF0ZV90YWJf bmV3KHRoaXMub3B0aW9ucykpO3RoaXMuJG5hdi5hcHBlbmQoaSksaS50b29sdGlwKHt0aXRsZToi QWRkIGEgPQpuZXcgdGFiIixwbGFjZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyOnIuJGVsfSksaS5v bigiY2xpY2siLGZ1bmN0aW9uKGUpe2kudG89Cm9sdGlwKCJoaWRlIiksci5vcHRpb25zLm9ubmV3 KCl9KX19LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zaXplKHRoaXMubGlzdD0KKX0sY3VycmVu dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudGFiLXBhbmUuYWN0aXZlIikuYXR0 cigiaWQiKX0sPQphZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0RlLmlkLHI9M0QkKHRo aXMuX3RlbXBsYXRlX3RhYihlKSksaT0zRCQodGg9CmlzLl90ZW1wbGF0ZV90YWJfY29udGVudChl KSk7dGhpcy5saXN0W25dPTNEZS5vbmRlbD8hMDohMSx0aGlzLm9wdGlvbnMub25uZT0Kdz90aGlz LiRuYXYuZmluZCgiI25ldy10YWIiKS5iZWZvcmUocik6dGhpcy4kbmF2LmFwcGVuZChyKSxpLmFw cGVuZChlLiRlbCksPQp0aGlzLiRjb250ZW50LmFwcGVuZChpKSx0aGlzLnNpemUoKT0zRD0zRDEm JihyLmFkZENsYXNzKCJhY3RpdmUiKSxpLmFkZENsYXM9CnMoImFjdGl2ZSIpLHRoaXMuZmlyc3Rf dGFiPTNEbiksdGhpcy5vcHRpb25zLm1heCYmdGhpcy5zaXplKCk+PTNEdGhpcy5vcHRpbz0KbnMu bWF4JiZ0aGlzLiRlbC5maW5kKCIjbmV3LXRhYiIpLmhpZGUoKTtpZihlLm9uZGVsKXt2YXIgcz0z RHIuZmluZCgiI2RlbGV0PQplIik7cy50b29sdGlwKHt0aXRsZToiRGVsZXRlIHRoaXMgdGFiIixw bGFjZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyOnQuJGVsfSk9CixzLm9uKCJjbGljayIsZnVuY3Rp b24oKXtyZXR1cm4gcy50b29sdGlwKCJkZXN0cm95IiksdC4kZWwuZmluZCgiLnRvb2x0aXAiKT0K LnJlbW92ZSgpLGUub25kZWwoKSwhMX0pfXIub24oImNsaWNrIixmdW5jdGlvbihyKXtyLnByZXZl bnREZWZhdWx0KCksZS5vbmNsPQppY2s/ZS5vbmNsaWNrKCk6dC5zaG93KG4pfSksdGhpcy5jdXJy ZW50X2lkfHwodGhpcy5jdXJyZW50X2lkPTNEbil9LGRlbDpmdW49CmN0aW9uKGUpe3RoaXMuJGVs LmZpbmQoIiN0YWItIitlKS5yZW1vdmUoKSx0aGlzLiRlbC5maW5kKCIjIitlKS5yZW1vdmUoKSx0 aD0KaXMuZmlyc3RfdGFiPTNEPTNEZSYmKHRoaXMuZmlyc3RfdGFiPTNEbnVsbCksdGhpcy5maXJz dF90YWIhPTNEbnVsbCYmdGhpcy5zPQpob3codGhpcy5maXJzdF90YWIpLHRoaXMubGlzdFtlXSYm ZGVsZXRlIHRoaXMubGlzdFtlXSx0aGlzLnNpemUoKTx0aGlzLm9wdGk9Cm9ucy5tYXgmJnRoaXMu JGVsLmZpbmQoIiNuZXctdGFiIikuc2hvdygpfSxkZWxSZW1vdmFibGU6ZnVuY3Rpb24oKXtmb3Io dmFyID0KZSBpbiB0aGlzLmxpc3QpdGhpcy5kZWwoZSl9LHNob3c6ZnVuY3Rpb24oZSl7dGhpcy4k ZWwuZmFkZUluKCJmYXN0IiksdGhpcy52PQppc2libGU9M0QhMCxlJiYodGhpcy4kZWwuZmluZCgi I3RhYi0iK3RoaXMuY3VycmVudF9pZCkucmVtb3ZlQ2xhc3MoImFjdGl2ZSI9CiksdGhpcy4kZWwu ZmluZCgiIyIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWwu ZmluZCgiIz0KdGFiLSIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsLmZpbmQoIiMiK2Up LmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLmN1PQpycmVudF9pZD0zRGUpLHRoaXMub3B0aW9ucy5v bmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpfSxoaWRlOmZ1bmN0aW89Cm4oKXt0aGlz LiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITF9LGhpZGVPcGVyYXRpb246ZnVu Y3Rpb24oZSl7dD0KaGlzLiRuYXYuZmluZCgiIyIrZSkuaGlkZSgpfSxzaG93T3BlcmF0aW9uOmZ1 bmN0aW9uKGUpe3RoaXMuJG5hdi5maW5kKCIjIitlPQopLnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1 bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRuYXYuZmluZCgiIyIrZSk7bi5vZmYoImM9CmxpY2si KSxuLm9uKCJjbGljayIsdCl9LHRpdGxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRlbC5m aW5kKCIjdGFiLXRpdD0KbGUtdGV4dC0iK2UpO3JldHVybiB0JiZuLmh0bWwodCksbi5odG1sKCl9 LHJldGl0bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QwO2ZvPQpyKHZhciBuIGluIHRoaXMubGlzdCl0 aGlzLnRpdGxlKG4sKyt0KyI6ICIrZSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm49Cic8 ZGl2IGNsYXNzPTNEInVpLXRhYnMgdGFiYmFibGUgdGFicy1sZWZ0Ij48dWwgaWQ9M0QidGFiLW5h dmlnYXRpb24iIGNsYXNzPQo9M0QidGFiLW5hdmlnYXRpb24gbmF2IG5hdi10YWJzIj48ZGl2IGNs YXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEImZsb2F0OiA9CnJpZ2h0OyBtYXJnaW4tYm90dG9t OiA0cHg7Ij48L2Rpdj48L3VsPjxkaXYgaWQ9M0QidGFiLWNvbnRlbnQiIGNsYXNzPTNEInRhYj0K LWNvbnRlbnQiLz48L2Rpdj4nfSxfdGVtcGxhdGVfdGFiX25ldzpmdW5jdGlvbihlKXtyZXR1cm4n PGxpIGlkPTNEIm5ldy10YWIiPQo+PGEgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCk7Ij48aSBj bGFzcz0zRCJ1aS10YWJzLWFkZCBmYSBmYS1wbHVzLWNpcmNsZSI9Ci8+JytlLnRpdGxlX25ldysi PC9hPiIrIjwvbGk+In0sX3RlbXBsYXRlX3RhYjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGkgaWQ9 Cj0zRCJ0YWItJytlLmlkKyciIGNsYXNzPTNEInRhYi1lbGVtZW50Ij4nKyc8YSBpZD0zRCJ0YWIt dGl0bGUtbGluay0nK2UuaWQrJz0KIiB0aXRsZT0zRCIiIGhyZWY9M0QiIycrZS5pZCsnIiBkYXRh LW9yaWdpbmFsLXRpdGxlPTNEIiI+JysnPHNwYW4gaWQ9M0QidGFiPQotdGl0bGUtdGV4dC0nK2Uu aWQrJyIgY2xhc3M9M0QidGFiLXRpdGxlLXRleHQiPicrZS50aXRsZSsiPC9zcGFuPiI7cmV0dXJu IGU9Ci5vbmRlbCYmKHQrPTNEJzxpIGlkPTNEImRlbGV0ZSIgY2xhc3M9M0QidWktdGFicy1kZWxl dGUgZmEgZmEtbWludXMtY2lyY2xlIj0KLz4nKSx0Kz0zRCI8L2E+PC9saT4iLHR9LF90ZW1wbGF0 ZV90YWJfY29udGVudDpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBpZD0KPTNEIicrZS5pZCsnIiBj bGFzcz0zRCJ0YWItcGFuZSIvPid9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91 aS10PQphYmxlIixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5W aWV3LmV4dGVuZCh7cm93Om51bGwscm89CndfY291bnQ6MCxvcHRpb25zRGVmYXVsdDp7Y29udGVu dDoiTm8gY29udGVudCBhdmFpbGFibGUuIixvbmNoYW5nZTpudWxsLG9uZD0KYmxjbGljazpudWxs LG9uY29uZmlybTpudWxsLGNsczoidWktdGFibGUiLGNsc190cjoiIn0sZXZlbnRzOntjbGljazoi X29uY2xpPQpjayIsZGJsY2xpY2s6Il9vbmRibGNsaWNrIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0 KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQ9Cix0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0z RCQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7dGhpcy4kdGhlYWQ9Cj0zRG4uZmluZCgi dGhlYWQiKSx0aGlzLiR0Ym9keT0zRG4uZmluZCgidGJvZHkiKSx0aGlzLiR0bWVzc2FnZT0zRG4u ZmluZCgidD0KbWVzc2FnZSIpLHRoaXMuc2V0RWxlbWVudChuKSx0aGlzLnJvdz0zRHRoaXMuX3Jv dygpfSxhZGRIZWFkZXI6ZnVuY3Rpb24oZSl7PQp2YXIgdD0zRCQoIjx0aD48L3RoPiIpO3QuYXBw ZW5kKGUpLHRoaXMucm93LmFwcGVuZCh0KX0sYXBwZW5kSGVhZGVyOmZ1bmN0aW89Cm4oKXt0aGlz LiR0aGVhZC5hcHBlbmQodGhpcy5yb3cpLHRoaXMucm93PTNEJCgiPHRyPjwvdHI+Iil9LGFkZDpm dW5jdGlvbihlLD0KdCxuKXt2YXIgcj0zRCQoIjx0ZD48L3RkPiIpO3QmJnIuY3NzKCJ3aWR0aCIs dCksbiYmci5jc3MoInRleHQtYWxpZ24iLG4pLHIuPQphcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5k KHIpfSxhcHBlbmQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb21taXQoZSx0LCExKX0scHI9CmVwZW5k OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29tbWl0KGUsdCwhMCl9LGdldDpmdW5jdGlvbihlKXtyZXR1 cm4gdGhpcy4kZWwuZj0KaW5kKCIjIitlKX0sZGVsOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy4k dGJvZHkuZmluZCgiIyIrZSk7dC5sZW5ndGg+MCYmKHQuPQpyZW1vdmUoKSx0aGlzLnJvd19jb3Vu dC0tLHRoaXMuX3JlZnJlc2goKSl9LGRlbEFsbDpmdW5jdGlvbigpe3RoaXMuJHRib2R5LmU9Cm1w dHkoKSx0aGlzLnJvd19jb3VudD0zRDAsdGhpcy5fcmVmcmVzaCgpfSx2YWx1ZTpmdW5jdGlvbihl KXt0aGlzLmJlZm9yZT0zRD0KdGhpcy4kdGJvZHkuZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIp LGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kdGJvZHkuZmluPQpkKCJ0ciIpLnJlbW92ZUNsYXNz KCJjdXJyZW50IiksZSYmdGhpcy4kdGJvZHkuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImN1cnJlbnQ9 CiIpKTt2YXIgdD0zRHRoaXMuJHRib2R5LmZpbmQoIi5jdXJyZW50IikuYXR0cigiaWQiKTtyZXR1 cm4gdD0zRD0zRD0zRHVuZGVmaT0KbmVkP251bGw6KHQhPTNEdGhpcy5iZWZvcmUmJnRoaXMub3B0 aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpPQosdCl9LHNpemU6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy4kdGJvZHkuZmluZCgidHIiKS5sZW5ndGh9LF9jb21taXQ6ZnVuY3Rp b249CihlLHQsbil7dGhpcy5kZWwoZSksdGhpcy5yb3cuYXR0cigiaWQiLGUpLG4/dGhpcy4kdGJv ZHkucHJlcGVuZCh0aGlzLnJvdyk6dD0KaGlzLiR0Ym9keS5hcHBlbmQodGhpcy5yb3cpLHQmJih0 aGlzLnJvdy5oaWRlKCksdGhpcy5yb3cuZmFkZUluKCkpLHRoaXMucm93PQo9M0R0aGlzLl9yb3co KSx0aGlzLnJvd19jb3VudCsrLHRoaXMuX3JlZnJlc2goKX0sX3JvdzpmdW5jdGlvbigpe3JldHVy biAkKCc9Cjx0ciBjbGFzcz0zRCInK3RoaXMub3B0aW9ucy5jbHNfdHIrJyI+PC90cj4nKX0sX29u Y2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Cj0zRHRoaXMudmFsdWUoKSxuPTNEJChlLnRhcmdldCku Y2xvc2VzdCgidHIiKS5hdHRyKCJpZCIpO24hPTNEIiImJm4mJnQhPTNEbj0KJiYodGhpcy5vcHRp b25zLm9uY29uZmlybT90aGlzLm9wdGlvbnMub25jb25maXJtKG4pOnRoaXMudmFsdWUobikpfSxf b25kYmxjPQpsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy52YWx1ZSgpO3QmJnRoaXMub3B0 aW9ucy5vbmRibGNsaWNrJiZ0aGlzLm9wdGk9Cm9ucy5vbmRibGNsaWNrKHQpfSxfcmVmcmVzaDpm dW5jdGlvbigpe3RoaXMucm93X2NvdW50PTNEPTNEMD90aGlzLiR0bWVzc2FnZT0KLnNob3coKTp0 aGlzLiR0bWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48 dGFibGUgY2xhPQpzcz0zRCInK2UuY2xzKyciPicrIjx0aGVhZD48L3RoZWFkPiIrIjx0Ym9keT48 L3Rib2R5PiIrIjwvdGFibGU+IisiPHRtZXNzYWc9CmU+IitlLmNvbnRlbnQrIjwvdG1lc3NhZ2U+ IisiPGRpdj4ifX0pO3JldHVybntWaWV3OnR9fSksZGVmaW5lKCJwbHVnaW4vdmlldz0Kcy9ncm91 cCIsWyJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVu Y3Rpb24oZSx0LG4pPQp7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1 bmN0aW9uKHIsaSl7dGhpcy5hcHA9M0RyO3ZhciBzPQo9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlz LmFwcC5jaGFydCx0aGlzLmdyb3VwPTNEaS5ncm91cCx0aGlzLmdyb3VwX2tleT0zRG49CmV3IHQu SW5wdXQoe3BsYWNlaG9sZGVyOiJEYXRhIGxhYmVsIixvbmNoYW5nZTpmdW5jdGlvbihlKXtzLmdy b3VwLnNldCgia2V5Ij0KLGUpfX0pLHRoaXMudGFibGU9M0RuZXcgZS5WaWV3KHtjb250ZW50OiJO byBkYXRhIGNvbHVtbi4ifSk7dmFyIG89M0QkKCI8ZGl2PQovPiIpO28uYXBwZW5kKG4ud3JhcCgo bmV3IHQuTGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgbGFiZWw6In0pKS4kZWwpKSxvLmFwcGU9Cm5k KG4ud3JhcCh0aGlzLmdyb3VwX2tleS4kZWwpKSxvLmFwcGVuZChuLndyYXAoKG5ldyB0LkxhYmVs KHt0aXRsZToiU2VsZWN0ID0KY29sdW1uczoifSkpLiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlz LnRhYmxlLiRlbCkpLHRoaXMuc2V0RWxlbWVudChvKTt2YXIgPQpzPTNEdGhpczt0aGlzLmNoYXJ0 Lm9uKCJjaGFuZ2U6ZGF0YXNldF9pZCIsZnVuY3Rpb24oKXtzLl9yZWZyZXNoVGFibGUoKX0pLHQ9 Cmhpcy5jaGFydC5vbigiY2hhbmdlOnR5cGUiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaFRhYmxlKCl9 KSx0aGlzLmdyb3VwLm9uKCJjaD0KYW5nZTprZXkiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaEdyb3Vw S2V5KCl9KSx0aGlzLmdyb3VwLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uPQooKXtzLl9yZWZyZXNoR3Jv dXAoKX0pLHRoaXMuX3JlZnJlc2hUYWJsZSgpLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMu X3I9CmVmcmVzaEdyb3VwKCl9LF9yZWZyZXNoVGFibGU6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMu Y2hhcnQuZ2V0KCJkYXRhc2V0X2lkIj0KKSxuPTNEdGhpcy5jaGFydC5nZXQoInR5cGUiKTtpZigh ZXx8IW4pcmV0dXJuO3ZhciByPTNEdGhpcyxpPTNEdGhpcy5jaGFydC5kPQplZmluaXRpb247dGhp cy50YWJsZS5kZWxBbGwoKTt2YXIgcz0zRHt9O2Zvcih2YXIgbyBpbiBpLmNvbHVtbnMpe3ZhciB1 PTNEaS49CmNvbHVtbnNbb107aWYoIXUpe2NvbnNvbGUuZGVidWcoIkdyb3VwOjpfcmVmcmVzaFRh YmxlKCkgLSBTa2lwcGluZyBjb2x1bW4gZD0KZWZpbml0aW9uLiIpO2NvbnRpbnVlfXZhciBhPTNE bmV3IHQuU2VsZWN0LlZpZXcoe2lkOiJzZWxlY3RfIitvLHdhaXQ6ITB9KSxmPQo9M0R1LnRpdGxl O3UuaXNfdW5pcXVlJiYoZis9M0QiJm5ic3A7KGFsbCBkYXRhIGxhYmVscykiKSx0aGlzLnRhYmxl LmFkZChmLCI9CjI1JSIpLHRoaXMudGFibGUuYWRkKGEuJGVsKSx0aGlzLnRhYmxlLmFwcGVuZChv KSxzW29dPTNEYX10aGlzLmNoYXJ0LnN0YXRlKD0KIndhaXQiLCJMb2FkaW5nIG1ldGFkYXRhLi4u Iik7dmFyIGw9M0R0aGlzLmFwcC5kZWZlcnJlZC5yZWdpc3RlcigpLGM9M0R7aWQ6PQplLHN1Y2Nl c3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHMpci5fYWRkUm93KHQsZSxzLGkuY29sdW1uc1t0 XSk7ci5jaGFydC49CnN0YXRlKCJvayIsIk1ldGFkYXRhIGluaXRpYWxpemVkLi4uIiksci5hcHAu ZGVmZXJyZWQuZG9uZShsKX19O3RoaXMuYXBwLmRhdD0KYXNldHMucmVxdWVzdChjKX0sX2FkZFJv dzpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0zRHRoaXMscz0zRHIuaXNfbGFiZWwsbz0KPTNEci5p c19hdXRvLHU9M0RyLmlzX251bWVyaWMsYT0zRHIuaXNfdW5pcXVlLGY9M0RyLmlzX3plcm8sbD0z RFtdLGM9M0RuW2VdPQo7byYmbC5wdXNoKHtsYWJlbDoiQ29sdW1uOiBSb3cgTnVtYmVyIix2YWx1 ZToiYXV0byJ9KSxmJiZsLnB1c2goe2xhYmVsOiJDb2w9CnVtbjogTm9uZSIsdmFsdWU6Inplcm8i fSk7dmFyIGg9M0R0Lm1ldGFkYXRhX2NvbHVtbl90eXBlcztmb3IodmFyIHAgaW4gaCl7dj0KYXIg ZD0zRCExO2hbcF09M0Q9M0QiaW50Inx8aFtwXT0zRD0zRCJmbG9hdCI/ZD0zRHU6ZD0zRHMsZCYm bC5wdXNoKHtsYWJlbDoiPQpDb2x1bW46ICIrKHBhcnNlSW50KHApKzEpKyIgWyIraFtwXSsiXSIs dmFsdWU6cH0pfWMudXBkYXRlKGwpLGEmJnRoaXMuY2hhcnQ9Ci5ncm91cHMuZmlyc3QoKSYmdGhp cy5ncm91cC5zZXQoZSx0aGlzLmNoYXJ0Lmdyb3Vwcy5maXJzdCgpLmdldChlKSk7aWYoIWMuZT0K eGlzdHModGhpcy5ncm91cC5nZXQoZSkpKXt2YXIgdj0zRGMuZmlyc3QoKTtjb25zb2xlLmRlYnVn KCdHcm91cCgpOjpfYWRkUm93PQooKSAtIFN3aXRjaGluZyBtb2RlbCB2YWx1ZSBmcm9tICInK3Ro aXMuZ3JvdXAuZ2V0KGUpKyciIHRvICInK3YrJyIuJyksdGhpcy49Cmdyb3VwLnNldChlLHYpfWMu dmFsdWUodGhpcy5ncm91cC5nZXQoZSkpLHRoaXMuZ3JvdXAub2ZmKCJjaGFuZ2U6IitlKSx0aGlz Lj0KZ3JvdXAub24oImNoYW5nZToiK2UsZnVuY3Rpb24oKXtjLnZhbHVlKGkuZ3JvdXAuZ2V0KGUp KX0pLGMuc2V0T25DaGFuZ2UoZnVuPQpjdGlvbih0KXthP2kuY2hhcnQuZ3JvdXBzLmVhY2goZnVu Y3Rpb24obil7bi5zZXQoZSx0KX0pOmkuZ3JvdXAuc2V0KGUsdCksaS49CmNoYXJ0LnNldCgibW9k aWZpZWQiLCEwKX0pLGMuc2hvdygpfSxfcmVmcmVzaEdyb3VwOmZ1bmN0aW9uKCl7dGhpcy5ncm91 cC5zZT0KdCgiZGF0ZSIsbi50aW1lKCkpfSxfcmVmcmVzaEdyb3VwS2V5OmZ1bmN0aW9uKCl7dmFy IGU9M0R0aGlzLmdyb3VwLmdldCgia2V5PQoiKTtlPTNEPTNEPTNEdW5kZWZpbmVkJiYoZT0zRCIi KSxlIT0zRHRoaXMuZ3JvdXBfa2V5LnZhbHVlKCkmJnRoaXMuZ3JvdXBfa2U9CnkudmFsdWUoZSl9 fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3VpLXRhYmxlLWZvcm0iLFsibXZjL3VpL3VpLXRh YmxlIiwibT0KdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSx0LG4pe3Zh ciByPTNEQmFja2JvbmUuVmlldy5leHRlbmQoPQp7b3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGNv bnRlbnQ6IiIsbW9kZToiIn0sbGlzdDpbXSxpbml0aWFsaXplOmZ1bmN0aW9uKHI9CixpKXt0aGlz LmFwcD0zRHIsdGhpcy5vcHRpb25zPTNEbi5tZXJnZShpLHRoaXMub3B0aW9uc0RlZmF1bHQpLHRo aXMudGFibGVfdD0KaXRsZT0zRG5ldyB0LkxhYmVsKHt0aXRsZTp0aGlzLm9wdGlvbnMudGl0bGV9 KSx0aGlzLnRhYmxlPTNEbmV3IGUuVmlldyh7Y29uPQp0ZW50OnRoaXMub3B0aW9ucy5jb250ZW50 fSk7dmFyIHM9M0QkKCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0iLz4nKTt0aGk9CnMub3B0 aW9ucy50aXRsZSYmcy5hcHBlbmQobi53cmFwKHRoaXMudGFibGVfdGl0bGUuJGVsKSkscy5hcHBl bmQobi53cmFwKHRoaT0Kcy50YWJsZS4kZWwpKSx0aGlzLnNldEVsZW1lbnQocyl9LHRpdGxlOmZ1 bmN0aW9uKGUpe3RoaXMudGFibGVfdGl0bGUudGl0bGUoPQplKX0sdXBkYXRlOmZ1bmN0aW9uKGUs dCl7dGhpcy50YWJsZS5kZWxBbGwoKSx0aGlzLmxpc3Q9M0RbXTtmb3IodmFyIG4gaW4gZSk9CnRo aXMuX2FkZChlW25dLmlkfHxuLGVbbl0sdCk7Zm9yKHZhciBuIGluIHRoaXMubGlzdCl0aGlzLmxp c3Rbbl0udHJpZ2dlcigiYz0KaGFuZ2UiKX0sX2FkZDpmdW5jdGlvbihlLG4scil7dmFyIGk9M0R0 aGlzLHM9M0RudWxsLG89M0RuLnR5cGU7c3dpdGNoKG8pe2NhPQpzZSJ0ZXh0IjpzPTNEbmV3IHQu SW5wdXQoe2lkOiJmaWVsZC0iK2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcix2YWx1ZTpyLmc9 CmV0KGUpLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCl9fSk7YnJlYWs7Y2FzZSJyYWRp b2J1dHRvbiI6cz0zRG5ldyB0Lj0KUmFkaW9CdXR0b24uVmlldyh7aWQ6ImZpZWxkLSIrZSxkYXRh Om4uZGF0YSx2YWx1ZTpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvPQpuKHQpe3Iuc2V0KGUsdCk7 dmFyIHM9M0RfLmZpbmRXaGVyZShuLmRhdGEse3ZhbHVlOnR9KTtpZihzJiZzLm9wZXJhdGlvbnMp e3Y9CmFyIG89M0RzLm9wZXJhdGlvbnM7Zm9yKHZhciB1IGluIG8uc2hvdyl7dmFyIGE9M0RvLnNo b3dbdV07aS50YWJsZS5nZXQoYSkucz0KaG93KCl9Zm9yKHZhciB1IGluIG8uaGlkZSl7dmFyIGE9 M0RvLmhpZGVbdV07aS50YWJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlPQphaztjYXNlInNlbGVj dCI6cz0zRG5ldyB0LlNlbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLGRhdGE6bi5kYXRhLHZhbHVl OnIuZ2U9CnQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0KTt2YXIgcz0zRF8uZmlu ZFdoZXJlKG4uZGF0YSx7dmFsdWU6dH0pOz0KaWYocyYmcy5vcGVyYXRpb25zKXt2YXIgbz0zRHMu b3BlcmF0aW9ucztmb3IodmFyIHUgaW4gby5zaG93KXt2YXIgYT0zRG8uc2hvPQp3W3VdO2kudGFi bGUuZ2V0KGEpLnNob3coKX1mb3IodmFyIHUgaW4gby5oaWRlKXt2YXIgYT0zRG8uaGlkZVt1XTtp LnRhYmxlLmc9CmV0KGEpLmhpZGUoKX19fX0pO2JyZWFrO2Nhc2UiZGF0YXNldCI6cz0zRG5ldyB0 LlNlbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLD0Kb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQo ZSx0KX19KSxpLmFwcC5kYXRhc2V0cy5vbigiYWxsIixmdW5jdGlvbigpe3ZhciB0PQo9M0RbXTtp LmFwcC5kYXRhc2V0cy5lYWNoKGZ1bmN0aW9uKGUpe2UuZ2V0KCJkYXRhdHlwZV9pZCIpPTNEPTNE bi5kYXRhJiZ0LnA9CnVzaCh7dmFsdWU6ZS5nZXQoImlkIiksbGFiZWw6ZS5nZXQoIm5hbWUiKX0p fSkscy51cGRhdGUodCksci5nZXQoZSl8fHIuc2V0KD0KZSxzLmZpcnN0KCkpLHMudmFsdWUoci5n ZXQoZSkpfSksaS5hcHAuZGF0YXNldHMudHJpZ2dlcigiYWxsLmRhdGFzZXRzIik7YnJlPQphaztj YXNlInRleHRhcmVhIjpzPTNEbmV3IHQuVGV4dGFyZWEoe2lkOiJmaWVsZC0iK2Usb25jaGFuZ2U6 ZnVuY3Rpb24oKXtyLnM9CmV0KGUscy52YWx1ZSgpKX19KTticmVhaztjYXNlInNlcGFyYXRvciI6 cz0zRCQoIjxkaXYvPiIpO2JyZWFrO2RlZmF1bHQ6cz0zRD0KbmV3IHQuSW5wdXQoe2lkOiJmaWVs ZC0iK2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcix0eXBlOm4udHlwZSxvbmNoYW5nZTpmPQp1 bmN0aW9uKCl7ci5zZXQoZSxzLnZhbHVlKCkpfX0pfWlmKG8hPTNEInNlcGFyYXRvciIpe3IuZ2V0 KGUpfHxyLnNldChlLG4uaW49Cml0KSxzLnZhbHVlKHIuZ2V0KGUpKSx0aGlzLmxpc3RbZV09M0Rz O3ZhciB1PTNEJCgiPGRpdi8+Iik7dS5hcHBlbmQocy4kZWwpLD0Kbi5pbmZvJiZ1LmFwcGVuZCgn PGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWluZm8iPicrbi5pbmZvKyI8L2Rpdj4iKSx0aGlz PQoub3B0aW9ucy5zdHlsZT0zRD0zRCJib2xkIj8odGhpcy50YWJsZS5hZGQoKG5ldyB0LkxhYmVs KHt0aXRsZTpuLnRpdGxlLGNsczo9CiJmb3JtLWxhYmVsIn0pKS4kZWwpLHRoaXMudGFibGUuYWRk KHUpKToodGhpcy50YWJsZS5hZGQoJzxzcGFuIGNsYXNzPTNEInVpLT0KdGFibGUtZm9ybS10aXRs ZSI+JytuLnRpdGxlKyI8L3NwYW4+IiwiMjUlIiksdGhpcy50YWJsZS5hZGQodSkpfWVsc2UgdGhp cy50PQphYmxlLmFkZCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLXNlcGFyYXRvciI+Jytu LnRpdGxlKyI6PGRpdi8+IiksdGhpcy49CnRhYmxlLmFkZCgkKCI8ZGl2Lz4iKSk7dGhpcy50YWJs ZS5hcHBlbmQoZSksbi5oaWRlJiZ0aGlzLnRhYmxlLmdldChlKS5oaWRlKD0KKX19KTtyZXR1cm57 VmlldzpyfX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL3NldHRpbmdzIixbIm12Yy91aS91aS1taXNj IiwicGx1PQpnaW4vbGlicmFyeS91aS10YWJsZS1mb3JtIiwidXRpbHMvdXRpbHMiXSxmdW5jdGlv bihlLHQsbil7cmV0dXJuIEJhY2tib25lLlY9Cmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rp b24oZSxuKXt0aGlzLmFwcD0zRGU7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9Cj0zRHRoaXMuYXBw LmNoYXJ0LHRoaXMuZm9ybT0zRG5ldyB0LlZpZXcoZSx7dGl0bGU6IkNvbmZpZ3VyYXRpb24iLGNv bnRlbnQ6Ij0KVGhpcyBjaGFydCB0eXBlIGRvZXMgbm90IHByb3ZpZGUgYW55IG9wdGlvbnMuIn0p LHRoaXMuc2V0RWxlbWVudCh0aGlzLmZvcm0uPQokZWwpO3ZhciByPTNEdGhpczt0aGlzLmNoYXJ0 Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7ci5fcmVmcmVzaCgpfSl9LF9yZWZyZXM9Cmg6ZnVuY3Rp b24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZGVmaW5pdGlvbjtpZighZSlyZXR1cm47dGhpcy5mb3Jt LnRpdGxlKGUuYz0KYXRlZ29yeSsiIC0gIitlLnRpdGxlKyI6IiksdGhpcy5mb3JtLnVwZGF0ZShl LnNldHRpbmdzLHRoaXMuY2hhcnQuc2V0dGluZ3MpPQp9fSl9KSxkZWZpbmUoInBsdWdpbi92aWV3 cy90eXBlcyIsWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS1taXNjIl0sZnVuY3Rpb249CihlLHQp e3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e29uY2hhbmdlOm51 bGwsb25kYmxjbGljaz0KOm51bGx9LGV2ZW50czp7Y2xpY2s6Il9vbmNsaWNrIixkYmxjbGljazoi X29uZGJsY2xpY2sifSxpbml0aWFsaXplOmZ1bmN0aW9uPQoobixyKXt2YXIgaT0zRHRoaXM7dGhp cy5hcHA9M0RuLHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWw9CnQp O3ZhciBzPTNEJCgnPGRpdiBjbGFzcz0zRCJjaGFydHMtZ3JpZCIvPicpO3MuYXBwZW5kKGUud3Jh cCgobmV3IHQuTGFiZWwoez0KdGl0bGU6IkhvdyBtYW55IGRhdGEgcG9pbnRzIHdvdWxkIHlvdSBs aWtlIHRvIGFuYWx5emU/In0pKS4kZWwpKSx0aGlzLmxpYnJhPQpyeT0zRG5ldyB0LlJhZGlvQnV0 dG9uLlZpZXcoe2RhdGE6W3tsYWJlbDoiRmV3ICg8NTAwKSIsdmFsdWU6InNtYWxsIn0se2xhYmU9 Cmw6IlNvbWUgKDwxMGspIix2YWx1ZToibWVkaXVtIn0se2xhYmVsOiJNYW55ICg+MTBrKSIsdmFs dWU6ImxhcmdlIn1dLG9uY2hhbj0KZ2U6ZnVuY3Rpb24oZSl7aS5fZmlsdGVyKGUpfX0pLHMuYXBw ZW5kKGUud3JhcCh0aGlzLmxpYnJhcnkuJGVsKSksdGhpcy5zZXRFPQpsZW1lbnQocyksdGhpcy5f cmVuZGVyKCksdGhpcy5saWJyYXJ5LnZhbHVlKCJzbWFsbCIpLHRoaXMubGlicmFyeS50cmlnZ2Vy KCI9CmNoYW5nZSIpfSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuJGVsLmZpbmQoIi5j dXJyZW50IikuYXR0cigiaWQiKTtlIT0KPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kZWwuZmluZCgi LmN1cnJlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudCIpLHRoaXMuJGVsPQouZmluZCgiIyIrZSku YWRkQ2xhc3MoImN1cnJlbnQiKSk7dmFyIG49M0R0aGlzLiRlbC5maW5kKCIuY3VycmVudCIpLmF0 dHIoImk9CmQiKTtyZXR1cm4gbj0zRD0zRD0zRHVuZGVmaW5lZD9udWxsOihuIT0zRHQmJnRoaXMu b3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcD0KdGlvbnMub25jaGFuZ2UoZSksbil9LF9maWx0ZXI6 ZnVuY3Rpb24oZSl7dGhpcy4kZWwuZmluZCgiLmhlYWRlciIpLmhpZGUoKTt2PQphciB0PTNEdGhp cy5hcHAudHlwZXMuYXR0cmlidXRlcztmb3IodmFyIG4gaW4gdCl7dmFyIHI9M0R0W25dLGk9M0R0 aGlzLiRlbC49CmZpbmQoIiMiK24pLHM9M0R0aGlzLiRlbC5maW5kKCIjdHlwZXMtaGVhZGVyLSIr dGhpcy5jYXRlZ29yaWVzX2luZGV4W3IuY2F0ZT0KZ29yeV0pLG89M0RyLmtleXdvcmRzfHwiIjtv LmluZGV4T2YoZSk+PTNEMD8oaS5zaG93KCkscy5zaG93KCkpOmkuaGlkZSgpfX0sPQpfcmVuZGVy OmZ1bmN0aW9uKCl7dGhpcy5jYXRlZ29yaWVzPTNEe30sdGhpcy5jYXRlZ29yaWVzX2luZGV4PTNE e307dmFyIGU9M0Q9CjAsdD0zRHRoaXMuYXBwLnR5cGVzLmF0dHJpYnV0ZXM7Zm9yKHZhciBuIGlu IHQpe3ZhciByPTNEdFtuXSxpPTNEci5jYXRlZ29yeT0KO3RoaXMuY2F0ZWdvcmllc1tpXXx8KHRo aXMuY2F0ZWdvcmllc1tpXT0zRHt9LHRoaXMuY2F0ZWdvcmllc19pbmRleFtpXT0zRGUrPQorKSx0 aGlzLmNhdGVnb3JpZXNbaV1bbl09M0RyfWZvcih2YXIgaSBpbiB0aGlzLmNhdGVnb3JpZXMpe3Zh ciBzPTNEJCgnPGRpdiA9CnN0eWxlPTNEImNsZWFyOiBib3RoOyIvPicpO3MuYXBwZW5kKHRoaXMu X3RlbXBsYXRlX2hlYWRlcih7aWQ6InR5cGVzLWhlYWRlcj0KLSIrdGhpcy5jYXRlZ29yaWVzX2lu ZGV4W2ldLHRpdGxlOml9KSk7Zm9yKHZhciBuIGluIHRoaXMuY2F0ZWdvcmllc1tpXSl7dmFyPQog cj0zRHRoaXMuY2F0ZWdvcmllc1tpXVtuXSxvPTNEci50aXRsZSsiICgiK3IubGlicmFyeSsiKSI7 ci56b29tYWJsZSYmKG89M0Q9Cic8c3BhbiBjbGFzcz0zRCJmYSBmYS1zZWFyY2gtcGx1cyIvPicr bykscy5hcHBlbmQodGhpcy5fdGVtcGxhdGVfaXRlbSh7aWQ6bj0KLHRpdGxlOm8sdXJsOmNvbmZp Zy5hcHBfcm9vdCsiY2hhcnRzLyIrdGhpcy5hcHAuY2hhcnRQYXRoKG4pKyIvbG9nby5wbmcifSkp PQp9dGhpcy4kZWwuYXBwZW5kKHMpfX0sX29uY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlz LnZhbHVlKCksbj0zRCQoZS50YXI9CmdldCkuY2xvc2VzdCgiLml0ZW0iKS5hdHRyKCJpZCIpO24h PTNEIiImJm4mJnQhPTNEbiYmdGhpcy52YWx1ZShuKX0sX29uZGJsYz0KbGljazpmdW5jdGlvbihl KXt2YXIgdD0zRHRoaXMudmFsdWUoKTt0JiZ0aGlzLm9wdGlvbnMub25kYmxjbGljayYmdGhpcy5v cHRpPQpvbnMub25kYmxjbGljayh0KX0sX3RlbXBsYXRlX2hlYWRlcjpmdW5jdGlvbihlKXtyZXR1 cm4nPGRpdiBpZD0zRCInK2UuaWQrJyI9CiBjbGFzcz0zRCJoZWFkZXIiPicrIiZidWxsOyAiK2Uu dGl0bGUrIjxkaXY+In0sX3RlbXBsYXRlX2l0ZW06ZnVuY3Rpb24oZSl7cj0KZXR1cm4nPGRpdiBp ZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QiaXRlbSI+JysnPGltZyBjbGFzcz0zRCJpbWFnZSIgc3Jj PTNEIicrPQplLnVybCsnIj4nKyc8ZGl2IGNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUrIjwvZGl2 PiIrIjxkaXY+In19KX0pLGRlZmluZSgicGw9CnVnaW4vdmlld3MvZWRpdG9yIixbIm12Yy91aS91 aS10YWJzIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxldCIsIj0KdXRpbHMvdXRp bHMiLCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2luL21vZGVscy9ncm91cCIsInBsdWdpbi92 aWV3cy9ncm91PQpwIiwicGx1Z2luL3ZpZXdzL3NldHRpbmdzIiwicGx1Z2luL3ZpZXdzL3R5cGVz Il0sZnVuY3Rpb24oZSx0LG4scixpLHMsbyx1LGE9Cil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0 ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGkscyl7dmFyIG89M0R0aGlzO3RoaXMuYT0KcHA9M0Rp LHRoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLm1lc3NhZ2U9M0RuZXcgdC5NZXNzYWdl LHRoaXMucG9ydGxlPQp0PTNEbmV3IG4uVmlldyh7aWNvbjoiZmEtYmFyLWNoYXJ0LW8iLHRpdGxl OiJFZGl0b3IiLG9wZXJhdGlvbnM6e3NhdmU6bmV3IHQ9Ci5CdXR0b25JY29uKHtpY29uOiJmYS1z YXZlIix0b29sdGlwOiJEcmF3IENoYXJ0Iix0aXRsZToiRHJhdyIsb25jbGljazpmdW5jdD0KaW9u KCl7by5fc2F2ZUNoYXJ0KCl9fSksYmFjazpuZXcgdC5CdXR0b25JY29uKHtpY29uOiJmYS1jYXJl dC1sZWZ0Iix0b29sdGlwPQo6IlJldHVybiB0byBWaWV3ZXIiLHRpdGxlOiJDYW5jZWwiLG9uY2xp Y2s6ZnVuY3Rpb24oKXtvLmFwcC5nbygidmlld2VyIiksby49CmFwcC5zdG9yYWdlLmxvYWQoKX19 KX19KSx0aGlzLnR5cGVzPTNEbmV3IGEoaSx7b25jaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9Cj0z RG8uYXBwLnR5cGVzLmdldChlKTt0fHxjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBFZGl0b3I6Om9u Y2hhbmdlKCkgLSBDaGFydD0KIHR5cGUgbm90IHN1cHBvcnRlZC4iKSxvLmNoYXJ0LmRlZmluaXRp b249M0R0LG8uY2hhcnQuc2V0dGluZ3MuY2xlYXIoKSxvLmNoPQphcnQuc2V0KHt0eXBlOmV9KSxv LmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKSxjb25zb2xlLmRlYnVnKCJFZGl0b3I6Om9uY2hhbmc9 CmUoKSAtIFN3aXRjaGVkIGNoYXJ0IHR5cGUuIil9LG9uZGJsY2xpY2s6ZnVuY3Rpb24oZSl7by5f c2F2ZUNoYXJ0KCl9fSksdGhpcz0KLnRhYnM9M0RuZXcgZS5WaWV3KHt0aXRsZV9uZXc6IkFkZCBE YXRhIixvbm5ldzpmdW5jdGlvbigpe3ZhciBlPTNEby5fYWRkR3JvPQp1cE1vZGVsKCk7by50YWJz LnNob3coZS5pZCl9fSksdGhpcy50aXRsZT0zRG5ldyB0LklucHV0KHtwbGFjZWhvbGRlcjoiQ2hh cnQ9CiB0aXRsZSIsb25jaGFuZ2U6ZnVuY3Rpb24oKXtvLmNoYXJ0LnNldCgidGl0bGUiLG8udGl0 bGUudmFsdWUoKSl9fSk7dmFyIGY9Cj0zRCQoIjxkaXYvPiIpO2YuYXBwZW5kKHIud3JhcCgobmV3 IHQuTGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgY2hhcnQgdGl0bGU6Ij0KfSkpLiRlbCkpLGYuYXBw ZW5kKHIud3JhcCh0aGlzLnRpdGxlLiRlbCkpLGYuYXBwZW5kKHIud3JhcCh0aGlzLnR5cGVzLiRl bCkpPQosdGhpcy50YWJzLmFkZCh7aWQ6Im1haW4iLHRpdGxlOiJTdGFydCIsJGVsOmZ9KSx0aGlz LnNldHRpbmdzPTNEbmV3IHUodGhpcy49CmFwcCksdGhpcy50YWJzLmFkZCh7aWQ6InNldHRpbmdz Iix0aXRsZToiQ29uZmlndXJhdGlvbiIsJGVsOnRoaXMuc2V0dGluZ3MuJD0KZWx9KSx0aGlzLnBv cnRsZXQuYXBwZW5kKHRoaXMubWVzc2FnZS4kZWwpLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy50 YWJzLiRlPQpsKSx0aGlzLnNldEVsZW1lbnQodGhpcy5wb3J0bGV0LiRlbCksdGhpcy50YWJzLmhp ZGVPcGVyYXRpb24oImJhY2siKTt2YXIgbz0KPTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6 dGl0bGUiLGZ1bmN0aW9uKGUpe28uX3JlZnJlc2hUaXRsZSgpfSksdGhpcy5jPQpoYXJ0Lm9uKCJj aGFuZ2U6dHlwZSIsZnVuY3Rpb24oZSl7by50eXBlcy52YWx1ZShlLmdldCgidHlwZSIpKX0pLHRo aXMuY2hhcnQ9Ci5vbigicmVzZXQiLGZ1bmN0aW9uKGUpe28uX3Jlc2V0Q2hhcnQoKX0pLHRoaXMu YXBwLmNoYXJ0Lm9uKCJyZWRyYXciLGZ1bmN0aT0Kb24oZSl7by5wb3J0bGV0LnNob3dPcGVyYXRp b24oImJhY2siKX0pLHRoaXMuYXBwLmNoYXJ0Lmdyb3Vwcy5vbigiYWRkIixmdW5jPQp0aW9uKGUp e28uX2FkZEdyb3VwKGUpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXBzLm9uKCJyZW1vdmUiLGZ1bmN0 aW9uKGUpe28uX3I9CmVtb3ZlR3JvdXAoZSl9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub24oInJl c2V0IixmdW5jdGlvbihlKXtvLl9yZW1vdmVBbGxHcj0Kb3VwcygpfSksdGhpcy5hcHAuY2hhcnQu Z3JvdXBzLm9uKCJjaGFuZ2U6a2V5IixmdW5jdGlvbihlKXtvLl9yZWZyZXNoR3JvdXBLPQpleSgp fSksdGhpcy5fcmVzZXRDaGFydCgpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuc2hvdygpfSxo aWRlOmZ1bmN0aW9uKCk9Cnt0aGlzLiRlbC5oaWRlKCl9LF9yZWZyZXNoVGl0bGU6ZnVuY3Rpb24o KXt2YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJ0aXRsZSIpOz0KdGhpcy5wb3J0bGV0LnRpdGxlKGUp LHRoaXMudGl0bGUudmFsdWUoZSl9LF9yZWZyZXNoR3JvdXBLZXk6ZnVuY3Rpb24oKXt2YXIgPQpl PTNEdGhpcyx0PTNEMDt0aGlzLmNoYXJ0Lmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPTNE bi5nZXQoImtleSIsIiIpO3I9Cj0zRD0zRCIiJiYocj0zRCJEYXRhIGxhYmVsIiksZS50YWJzLnRp dGxlKG4uaWQsKyt0KyI6ICIrcil9KX0sX2FkZEdyb3VwTW9kZT0KbDpmdW5jdGlvbigpe3ZhciBl PTNEbmV3IHMoe2lkOnIudXVpZCgpfSk7cmV0dXJuIHRoaXMuY2hhcnQuZ3JvdXBzLmFkZChlKSxl PQp9LF9hZGRHcm91cDpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMsbj0zRG5ldyBvKHRoaXMuYXBw LHtncm91cDplfSk7dGhpcy50YWI9CnMuYWRkKHtpZDplLmlkLCRlbDpuLiRlbCxvbmRlbDpmdW5j dGlvbigpe3QuY2hhcnQuZ3JvdXBzLnJlbW92ZShlLmlkKX19KSx0aD0KaXMuX3JlZnJlc2hHcm91 cEtleSgpLHRoaXMuY2hhcnQuc2V0KCJtb2RpZmllZCIsITApfSxfcmVtb3ZlR3JvdXA6ZnVuY3Rp b24oPQplKXt0aGlzLnRhYnMuZGVsKGUuaWQpLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMu Y2hhcnQuc2V0KCJtb2RpZmllZCIsITA9Cil9LF9yZW1vdmVBbGxHcm91cHM6ZnVuY3Rpb24oZSl7 dGhpcy50YWJzLmRlbFJlbW92YWJsZSgpfSxfcmVzZXRDaGFydDpmdW5jdD0KaW9uKCl7dGhpcy5j aGFydC5zZXQoImlkIixyLnV1aWQoKSksdGhpcy5jaGFydC5zZXQoInR5cGUiLCJudmQzX2JhciIp LHRoaXMuPQpjaGFydC5zZXQoImRhdGFzZXRfaWQiLHRoaXMuYXBwLm9wdGlvbnMuY29uZmlnLmRh dGFzZXRfaWQpLHRoaXMuY2hhcnQuc2V0KCI9CnRpdGxlIiwiTmV3IENoYXJ0IiksdGhpcy5wb3J0 bGV0LmhpZGVPcGVyYXRpb24oImJhY2siKX0sX3NhdmVDaGFydDpmdW5jdGlvbj0KKCl7dGhpcy5j aGFydC5zZXQoe3R5cGU6dGhpcy50eXBlcy52YWx1ZSgpLHRpdGxlOnRoaXMudGl0bGUudmFsdWUo KSxkYXRlOnIuPQp0aW1lKCl9KTtpZih0aGlzLmNoYXJ0Lmdyb3Vwcy5sZW5ndGg9M0Q9M0QwKXt0 aGlzLm1lc3NhZ2UudXBkYXRlKHttZXNzYWdlOiI9ClBsZWFzZSBzZWxlY3QgZGF0YSBjb2x1bW5z IGJlZm9yZSBkcmF3aW5nIHRoZSBjaGFydC4ifSk7dmFyIGU9M0R0aGlzLl9hZGRHcj0Kb3VwTW9k ZWwoKTt0aGlzLnRhYnMuc2hvdyhlLmlkKTtyZXR1cm59dmFyIHQ9M0R0aGlzLG49M0QhMCxpPTNE dGhpcy5jaGFydC5kPQplZmluaXRpb247dGhpcy5jaGFydC5ncm91cHMuZWFjaChmdW5jdGlvbihl KXtpZighbilyZXR1cm47Zm9yKHZhciByIGluIGkuY289Cmx1bW5zKWlmKGUuYXR0cmlidXRlc1ty XT0zRD0zRCJudWxsIil7dC5tZXNzYWdlLnVwZGF0ZSh7c3RhdHVzOiJkYW5nZXIiLG1lcz0Kc2Fn ZToiVGhpcyBjaGFydCB0eXBlIHJlcXVpcmVzIGNvbHVtbiB0eXBlcyBub3QgZm91bmQgaW4geW91 ciB0YWJ1bGFyIGZpbGUuPQoifSksdC50YWJzLnNob3coZS5pZCksbj0zRCExO3JldHVybn19KTtp ZighbilyZXR1cm47dGhpcy5hcHAuZ28oInZpZXdlciIpO3Y9CmFyIHQ9M0R0aGlzO3RoaXMuYXBw LmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24oKXt0LmFwcC5zdG9yYWdlLnNhdmUoKSx0LmNoYT0K cnQudHJpZ2dlcigicmVkcmF3Iil9KX19KX0pLGRlZmluZSgicGx1Z2luL21vZGVscy9jb25maWci LFtdLGZ1bmN0aW9uKCl7cmV0PQp1cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7 cXVlcnlfbGltaXQ6MWU0LHF1ZXJ5X3RpbWVvdXQ6MTAwfX0pfSk9CixkZWZpbmUoInBsdWdpbi9j aGFydHMvZm9ybXMvZGVmYXVsdCIsW10sZnVuY3Rpb24oKXtyZXR1cm57dGl0bGU6IiIsY2F0ZWdv cj0KeToiIixsaWJyYXJ5OiIiLHRhZzoiIixrZXl3b3JkczoiIixzZXR0aW5nczp7c2VwYXJhdG9y X3g6e3RpdGxlOiJYIGF4aXMiLHR5PQpwZToic2VwYXJhdG9yIn0seF9heGlzX2xhYmVsOnt0aXRs ZToiQXhpcyBsYWJlbCIsaW5mbzoiUHJvdmlkZSBhIGxhYmVsIGZvciA9CnRoZSBheGlzLiIsdHlw ZToidGV4dCIsaW5pdDoiWC1heGlzIixwbGFjZWhvbGRlcjoiQXhpcyBsYWJlbCJ9LHhfYXhpc190 eXBlOj0Ke3RpdGxlOiJBeGlzIHZhbHVlIHR5cGUiLGluZm86IlNlbGVjdCB0aGUgdmFsdWUgdHlw ZSBvZiB0aGUgYXhpcy4iLHR5cGU6InNlPQpsZWN0Iixpbml0OiJhdXRvIixkYXRhOlt7bGFiZWw6 Ii0tIERvIG5vdCBzaG93IHZhbHVlcyAtLSIsdmFsdWU6ImhpZGUiLG9wZXI9CmF0aW9uczp7aGlk ZTpbInhfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiQXV0byIsdmFsdWU6ImF1dG8iLG9wZXJh dGlvbnM6ez0KaGlkZTpbInhfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiRmxvYXQiLHZhbHVl OiJmIixvcGVyYXRpb25zOntzaG93OlsieF9hPQp4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkV4 cG9uZW50Iix2YWx1ZToiZSIsb3BlcmF0aW9uczp7c2hvdzpbInhfYXhpc19wcmU9CmNpc2lvbiJd fX0se2xhYmVsOiJJbnRlZ2VyIix2YWx1ZToiZCIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhpc19w cmVjaXNpb24iXT0KfX0se2xhYmVsOiJQZXJjZW50YWdlIix2YWx1ZToicCIsb3BlcmF0aW9uczp7 c2hvdzpbInhfYXhpc19wcmVjaXNpb24iXX19LHtsPQphYmVsOiJTSS1wcmVmaXgiLHZhbHVlOiJz IixvcGVyYXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX1dfSx4X2F4aXM9Cl9wcmVj aXNpb246e3RpdGxlOiJBeGlzIHRpY2sgZm9ybWF0IixpbmZvOiJTZWxlY3QgdGhlIHRpY2sgZm9y bWF0IGZvciB0aGUgYT0KeGlzLiIsdHlwZToic2VsZWN0Iixpbml0OiIxIixkYXRhOlt7bGFiZWw6 IjAuMDAwMDEiLHZhbHVlOiI1In0se2xhYmVsOiIwLjAwPQowMSIsdmFsdWU6IjQifSx7bGFiZWw6 IjAuMDAxIix2YWx1ZToiMyJ9LHtsYWJlbDoiMC4wMSIsdmFsdWU6IjIifSx7bGFiZWw6IjA9Ci4x Iix2YWx1ZToiMSJ9LHtsYWJlbDoiMSIsdmFsdWU6IjAifV19LHNlcGFyYXRvcl95Ont0aXRsZToi WSBheGlzIix0eXBlOiJzZT0KcGFyYXRvciJ9LHlfYXhpc19sYWJlbDp7dGl0bGU6IkF4aXMgbGFi ZWwiLGluZm86IlByb3ZpZGUgYSBsYWJlbCBmb3IgdGhlIGF4PQppcy4iLHR5cGU6InRleHQiLGlu aXQ6IlktYXhpcyIscGxhY2Vob2xkZXI6IkF4aXMgbGFiZWwifSx5X2F4aXNfdHlwZTp7dGl0bGU9 CjoiQXhpcyB2YWx1ZSB0eXBlIixpbmZvOiJTZWxlY3QgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGF4 aXMuIix0eXBlOiJzZWxlY3QiLD0KaW5pdDoiYXV0byIsZGF0YTpbe2xhYmVsOiItLSBEbyBub3Qg c2hvdyB2YWx1ZXMgLS0iLHZhbHVlOiJoaWRlIixvcGVyYXRpb25zPQo6e2hpZGU6WyJ5X2F4aXNf cHJlY2lzaW9uIl19fSx7bGFiZWw6IkF1dG8iLHZhbHVlOiJhdXRvIixvcGVyYXRpb25zOntoaWRl Ols9CiJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkZsb2F0Iix2YWx1ZToiZiIsb3BlcmF0 aW9uczp7c2hvdzpbInlfYXhpc19wcj0KZWNpc2lvbiJdfX0se2xhYmVsOiJFeHBvbmVudCIsdmFs dWU6ImUiLG9wZXJhdGlvbnM6e3Nob3c6WyJ5X2F4aXNfcHJlY2lzaW9uPQoiXX19LHtsYWJlbDoi SW50ZWdlciIsdmFsdWU6ImQiLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzaW9uIl19 fSx7bGE9CmJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InAiLG9wZXJhdGlvbnM6e3Nob3c6WyJ5X2F4 aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6Ij0KU0ktcHJlZml4Iix2YWx1ZToicyIsb3BlcmF0aW9u czp7aGlkZTpbInlfYXhpc19wcmVjaXNpb24iXX19XX0seV9heGlzX3ByZWNpPQpzaW9uOnt0aXRs ZToiQXhpcyB0aWNrIGZvcm1hdCIsaW5mbzoiU2VsZWN0IHRoZSB0aWNrIGZvcm1hdCBmb3IgdGhl IGF4aXMuIiw9CnR5cGU6InNlbGVjdCIsaW5pdDoiMSIsZGF0YTpbe2xhYmVsOiIwLjAwMDAxIix2 YWx1ZToiNSJ9LHtsYWJlbDoiMC4wMDAxIix2YT0KbHVlOiI0In0se2xhYmVsOiIwLjAwMSIsdmFs dWU6IjMifSx7bGFiZWw6IjAuMDEiLHZhbHVlOiIyIn0se2xhYmVsOiIwLjEiLHZhPQpsdWU6IjEi fSx7bGFiZWw6IjEiLHZhbHVlOiIwIn1dfSxzZXBhcmF0b3JfbGVnZW5kOnt0aXRsZToiT3RoZXJz Iix0eXBlOiJzZXA9CmFyYXRvciJ9LHNob3dfbGVnZW5kOnt0aXRsZToiU2hvdyBsZWdlbmQiLGlu Zm86IldvdWxkIHlvdSBsaWtlIHRvIGFkZCBhIGxlZz0KZW5kPyIsdHlwZToicmFkaW9idXR0b24i LGluaXQ6InRydWUiLGRhdGE6W3tsYWJlbDoiWWVzIix2YWx1ZToidHJ1ZSJ9LHtsYWJlPQpsOiJO byIsdmFsdWU6ImZhbHNlIn1dfSx1c2VfcGFuZWxzOnt0aXRsZToiVXNlIG11bHRpLXBhbmVscyIs aW5mbzoiV291bGQgeW89CnUgbGlrZSB0byBzZXBhcmF0ZSB5b3VyIGRhdGEgaW50byBpbmRpdmlk dWFsIHBhbmVscz8iLHR5cGU6InJhZGlvYnV0dG9uIixpbj0KaXQ6ImZhbHNlIixkYXRhOlt7bGFi ZWw6IlllcyIsdmFsdWU6InRydWUifSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFsc2UifV19fX19PQop LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3JldHVybihuZXcgRGF0ZSh0LGUrMSwwKSkuZ2V0 RGF0ZSgpfWZ1bmN0aW9uIG49CihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXt2YXIgbz0z RGUociksdT0zRFtdO288ciYmdChvKTtpZihzPjEpd2hpbGUobz0KPGkpe3ZhciBhPTNEbmV3IERh dGUoK28pO24oYSklcz0zRD0zRD0zRDAmJnUucHVzaChhKSx0KG8pfWVsc2Ugd2hpbGUobzxpKXUu PQpwdXNoKG5ldyBEYXRlKCtvKSksdChvKTtyZXR1cm4gdX19dmFyIGU9M0R3aW5kb3cubnZ8fHt9 O2UudmVyc2lvbj0zRCIxLjEuMTU9CmIiLGUuZGV2PTNEITAsd2luZG93Lm52PTNEZSxlLnRvb2x0 aXA9M0RlLnRvb2x0aXB8fHt9LGUudXRpbHM9M0RlLnV0aWxzfHx7fT0KLGUubW9kZWxzPTNEZS5t b2RlbHN8fHt9LGUuY2hhcnRzPTNEe30sZS5ncmFwaHM9M0RbXSxlLmxvZ3M9M0R7fSxlLmRpc3Bh dGNoPQo9M0RkMy5kaXNwYXRjaCgicmVuZGVyX3N0YXJ0IiwicmVuZGVyX2VuZCIpLGUuZGV2JiYo ZS5kaXNwYXRjaC5vbigicmVuZGVyX3M9CnRhcnQiLGZ1bmN0aW9uKHQpe2UubG9ncy5zdGFydFRp bWU9M0QrKG5ldyBEYXRlKX0pLGUuZGlzcGF0Y2gub24oInJlbmRlcl9lbj0KZCIsZnVuY3Rpb24o dCl7ZS5sb2dzLmVuZFRpbWU9M0QrKG5ldyBEYXRlKSxlLmxvZ3MudG90YWxUaW1lPTNEZS5sb2dz LmVuZFRpPQptZS1lLmxvZ3Muc3RhcnRUaW1lLGUubG9nKCJ0b3RhbCIsZS5sb2dzLnRvdGFsVGlt ZSl9KSksZS5sb2c9M0RmdW5jdGlvbigpe2k9CmYoZS5kZXYmJmNvbnNvbGUubG9nJiZjb25zb2xl LmxvZy5hcHBseSljb25zb2xlLmxvZy5hcHBseShjb25zb2xlLGFyZ3VtZW50cz0KKTtlbHNlIGlm KGUuZGV2JiZ0eXBlb2YgY29uc29sZS5sb2c9M0Q9M0QiZnVuY3Rpb24iJiZGdW5jdGlvbi5wcm90 b3R5cGUuYmluPQpkKXt2YXIgdD0zREZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoY29uc29s ZS5sb2csY29uc29sZSk7dC5hcHBseShjb25zb2w9CmUsYXJndW1lbnRzKX1yZXR1cm4gYXJndW1l bnRzW2FyZ3VtZW50cy5sZW5ndGgtMV19LGUucmVuZGVyPTNEZnVuY3Rpb24obil7bj0KPTNEbnx8 MSxlLnJlbmRlci5hY3RpdmU9M0QhMCxlLmRpc3BhdGNoLnJlbmRlcl9zdGFydCgpLHNldFRpbWVv dXQoZnVuY3Rpb24oPQope3ZhciB0LHI7Zm9yKHZhciBpPTNEMDtpPG4mJihyPTNEZS5yZW5kZXIu cXVldWVbaV0pO2krKyl0PTNEci5nZW5lcmF0ZSgpLHQ9CnlwZW9mIHIuY2FsbGJhY2s9M0Q9M0R0 eXBlb2YgRnVuY3Rpb24mJnIuY2FsbGJhY2sodCksZS5ncmFwaHMucHVzaCh0KTtlLnJlbj0KZGVy LnF1ZXVlLnNwbGljZSgwLGkpLGUucmVuZGVyLnF1ZXVlLmxlbmd0aD9zZXRUaW1lb3V0KGFyZ3Vt ZW50cy5jYWxsZWUsMCk6PQooZS5kaXNwYXRjaC5yZW5kZXJfZW5kKCksZS5yZW5kZXIuYWN0aXZl PTNEITEpfSwwKX0sZS5yZW5kZXIuYWN0aXZlPTNEITEsZS49CnJlbmRlci5xdWV1ZT0zRFtdLGUu YWRkR3JhcGg9M0RmdW5jdGlvbih0KXt0eXBlb2YgYXJndW1lbnRzWzBdPTNEPTNEdHlwZW9mID0K RnVuY3Rpb24mJih0PTNEe2dlbmVyYXRlOmFyZ3VtZW50c1swXSxjYWxsYmFjazphcmd1bWVudHNb MV19KSxlLnJlbmRlci5xdWV1PQplLnB1c2godCksZS5yZW5kZXIuYWN0aXZlfHxlLnJlbmRlcigp fSxlLmlkZW50aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGU9Ci5zdHJpcD0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnJlcGxhY2UoLyhcc3wmKS9nLCIiKX0sZDMudGltZS5tb250aEVuZD0zRGZ1 bj0KY3Rpb24oZSl7cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCks MCl9LGQzLnRpbWUubW9udGhFbmRzPQo9M0RuKGQzLnRpbWUubW9udGhFbmQsZnVuY3Rpb24oZSl7 ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpKzEpLGUuc2V0RGF0ZSg9CnQoZS5nZXRNb250aCgp KzEsZS5nZXRGdWxsWWVhcigpKSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KSxl LmludD0KZXJhY3RpdmVHdWlkZWxpbmU9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGMobyl7by5lYWNo KGZ1bmN0aW9uKG8pe2Z1bmN0aW9uIGcoPQope3ZhciBlPTNEZDMubW91c2UodGhpcyksbj0zRGVb MF0scj0zRGVbMV0sbz0zRCEwLGE9M0QhMTtsJiYobj0zRGQzLmV2ZW50Lm89CmZmc2V0WCxyPTNE ZDMuZXZlbnQub2Zmc2V0WSxkMy5ldmVudC50YXJnZXQudGFnTmFtZSE9M0Q9M0Qic3ZnIiYmKG89 M0QhMSksZD0KMy5ldmVudC50YXJnZXQuY2xhc3NOYW1lLmJhc2VWYWwubWF0Y2goIm52LWxlZ2Vu ZCIpJiYoYT0zRCEwKSksbyYmKG4tPTNEaS5sPQplZnQsci09M0RpLnRvcCk7aWYobjwwfHxyPDB8 fG4+cHx8cj5kfHxkMy5ldmVudC5yZWxhdGVkVGFyZ2V0JiZkMy5ldmVudC5yZWw9CmF0ZWRUYXJn ZXQub3duZXJTVkdFbGVtZW50PTNEPTNEPTNEdW5kZWZpbmVkfHxhKXtpZihsJiZkMy5ldmVudC5y ZWxhdGVkVGFyZz0KZXQmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQub3duZXJTVkdFbGVtZW50PTNE PTNEPTNEdW5kZWZpbmVkJiZkMy5ldmVudC5yZWxhPQp0ZWRUYXJnZXQuY2xhc3NOYW1lLm1hdGNo KHQubnZQb2ludGVyRXZlbnRzQ2xhc3MpKXJldHVybjt1LmVsZW1lbnRNb3VzZW91dCg9Cnttb3Vz ZVg6bixtb3VzZVk6cn0pLGMucmVuZGVyR3VpZGVMaW5lKG51bGwpO3JldHVybn12YXIgZj0zRHMu aW52ZXJ0KG4pO3UuZT0KbGVtZW50TW91c2Vtb3ZlKHttb3VzZVg6bixtb3VzZVk6cixwb2ludFhW YWx1ZTpmfSksZDMuZXZlbnQudHlwZT0zRD0zRD0zRCJkPQpibGNsaWNrIiYmdS5lbGVtZW50RGJs Y2xpY2soe21vdXNlWDpuLG1vdXNlWTpyLHBvaW50WFZhbHVlOmZ9KX12YXIgaD0zRGQzLnM9CmVs ZWN0KHRoaXMpLHA9M0RufHw5NjAsZD0zRHJ8fDQwMCx2PTNEaC5zZWxlY3RBbGwoImcubnYtd3Jh cC5udi1pbnRlcmFjdGl2ZT0KTGluZUxheWVyIikuZGF0YShbb10pLG09M0R2LmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCIgbnYtd3JhcCBudi1pPQpudGVyYWN0aXZlTGluZUxheWVy Iik7bS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWludGVyYWN0aXZlR3VpZGVMaW5lIik9 CjtpZighZilyZXR1cm47Zi5vbigibW91c2Vtb3ZlIixnLCEwKS5vbigibW91c2VvdXQiLGcsITAp Lm9uKCJkYmxjbGljayIsZyksYz0KLnJlbmRlckd1aWRlTGluZT0zRGZ1bmN0aW9uKHQpe2lmKCFh KXJldHVybjt2YXIgbj0zRHYuc2VsZWN0KCIubnYtaW50ZXJhY3RpPQp2ZUd1aWRlTGluZSIpLnNl bGVjdEFsbCgibGluZSIpLmRhdGEodCE9M0RudWxsP1tlLnV0aWxzLk5hTnRvWmVybyh0KV06W10s U3Q9CnJpbmcpO24uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm52LWd1aWRl bGluZSIpLmF0dHIoIngxIixmdW5jdD0KaW9uKGUpe3JldHVybiBlfSkuYXR0cigieDIiLGZ1bmN0 aW9uKGUpe3JldHVybiBlfSkuYXR0cigieTEiLGQpLmF0dHIoInkyIiwwPQopLG4uZXhpdCgpLnJl bW92ZSgpfX0pfXZhciB0PTNEZS5tb2RlbHMudG9vbHRpcCgpLG49M0RudWxsLHI9M0RudWxsLGk9 M0R7bGU9CmZ0OjAsdG9wOjB9LHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMuc2NhbGUubGlu ZWFyKCksdT0zRGQzLmRpc3BhdGNoKCJlbD0KZW1lbnRNb3VzZW1vdmUiLCJlbGVtZW50TW91c2Vv dXQiLCJlbGVtZW50RGJsY2xpY2siKSxhPTNEITAsZj0zRG51bGwsbD0zRG5hPQp2aWdhdG9yLnVz ZXJBZ2VudC5pbmRleE9mKCJNU0lFIikhPTNEPTNELTE7cmV0dXJuIGMuZGlzcGF0Y2g9M0R1LGMu dG9vbHRpcD0KPTNEdCxjLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhpLnRvcD0zRHR5cGVvZiBlLnRvcCE9Cj0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGku bGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubD0KZWZ0LGMpOml9 LGMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsYyk6 bn0sYy5oZWlnPQpodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNE ZSxjKTpyfSxjLnhTY2FsZT0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHM9M0RlLGMpOnN9LGMuc2hvd0d1aWRlTGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3Vt ZW50cy5sZW5ndGg/KGE9M0RlLGMpOmF9LGMuc3ZnQ29udGFpbmVyPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oZj0zRGUsYyk6Zn0sY30sZS5pbnRlcmFjdGl2ZUJpc2Vj dD0zRGZ1bmN0aW9uKGUsdCxuKXtpZighZSBpbnN0YW49CmNlb2YgQXJyYXkpcmV0dXJuIG51bGw7 dHlwZW9mIG4hPTNEImZ1bmN0aW9uIiYmKG49M0RmdW5jdGlvbihlLHQpe3JldHVybiBlLj0KeH0p O3ZhciByPTNEZDMuYmlzZWN0b3IobikubGVmdCxpPTNEZDMubWF4KFswLHIoZSx0KS0xXSkscz0z RG4oZVtpXSxpKTt0eXBlPQpvZiBzPTNEPTNEInVuZGVmaW5lZCImJihzPTNEaSk7aWYocz0zRD0z RD0zRHQpcmV0dXJuIGk7dmFyIG89M0RkMy5taW4oW2krMSw9CmUubGVuZ3RoLTFdKSx1PTNEbihl W29dLG8pO3JldHVybiB0eXBlb2YgdT0zRD0zRCJ1bmRlZmluZWQiJiYodT0zRG8pLE1hdGguYT0K YnModS10KT49M0RNYXRoLmFicyhzLXQpP2k6b30sZS5uZWFyZXN0VmFsdWVJbmRleD0zRGZ1bmN0 aW9uKGUsdCxuKXt2YXIgcj0KPTNESW5maW5pdHksaT0zRG51bGw7cmV0dXJuIGUuZm9yRWFjaChm dW5jdGlvbihlLHMpe3ZhciBvPTNETWF0aC5hYnModC1lKTtvPQo8PTNEciYmbzxuJiYocj0zRG8s aT0zRHMpfSksaX0sZnVuY3Rpb24oKXt3aW5kb3cubnYudG9vbHRpcD0zRHt9LHdpbmRvdy5udi49 Cm1vZGVscy50b29sdGlwPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB5KCl7aWYoYSl7dmFyIGU9M0Rk My5zZWxlY3QoYSk7ZS5ub2RlKD0KKS50YWdOYW1lIT0zRD0zRCJzdmciJiYoZT0zRGUuc2VsZWN0 KCJzdmciKSk7dmFyIHQ9M0RlLm5vZGUoKT9lLmF0dHIoInZpZXdCPQpveCIpOm51bGw7aWYodCl7 dD0zRHQuc3BsaXQoIiAiKTt2YXIgbj0zRHBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpL3RbMl07 bC49CmxlZnQ9M0RsLmxlZnQqbixsLnRvcD0zRGwudG9wKm59fX1mdW5jdGlvbiBiKGUpe3ZhciB0 O2E/dD0zRGQzLnNlbGVjdChhKTp0PQo9M0RkMy5zZWxlY3QoImJvZHkiKTt2YXIgbj0zRHQuc2Vs ZWN0KCIubnZ0b29sdGlwIik7cmV0dXJuIG4ubm9kZSgpPTNEPTNEPQo9M0RudWxsJiYobj0zRHQu YXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm52dG9vbHRpcCAiKyh1P3U6Inh5LXRvb2x0aXAi KSk9Ci5hdHRyKCJpZCIsaCkpLG4ubm9kZSgpLmlubmVySFRNTD0zRGUsbi5zdHlsZSgidG9wIiww KS5zdHlsZSgibGVmdCIsMCkuc3R5bD0KZSgib3BhY2l0eSIsMCksbi5zZWxlY3RBbGwoImRpdiwg dGFibGUsIHRkLCB0ciIpLmNsYXNzZWQocCwhMCksbi5jbGFzc2VkKHAsPQohMCksbi5ub2RlKCl9 ZnVuY3Rpb24gdygpe2lmKCFjKXJldHVybjtpZighZyhuKSlyZXR1cm47eSgpO3ZhciB0PTNEbC5s ZWZ0LHU9Cj0zRG8hPTNEbnVsbD9vOmwudG9wLGg9M0RiKG0obikpO2Y9M0RoO2lmKGEpe3ZhciBw PTNEYS5nZXRFbGVtZW50c0J5VGFnTmFtZT0KKCJzdmciKVswXSxkPTNEcD9wLmdldEJvdW5kaW5n Q2xpZW50UmVjdCgpOmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj0zRHtsPQplZnQ6MCx0b3A6 MH07aWYocCl7dmFyIEU9M0RwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFM9M0RhLmdldEJvdW5k aW5nQ2xpZW49CnRSZWN0KCkseD0zREUudG9wO2lmKHg8MCl7dmFyIFQ9M0RhLmdldEJvdW5kaW5n Q2xpZW50UmVjdCgpO3g9M0RNYXRoLmFicyh4KT0KPlQuaGVpZ2h0PzA6eH12LnRvcD0zRE1hdGgu YWJzKHgtUy50b3ApLHYubGVmdD0zRE1hdGguYWJzKEUubGVmdC1TLmxlZnQpfXQrPQo9M0RhLm9m ZnNldExlZnQrdi5sZWZ0LTIqYS5zY3JvbGxMZWZ0LHUrPTNEYS5vZmZzZXRUb3Ardi50b3AtMiph LnNjcm9sbFRvcH09CnJldHVybiBzJiZzPjAmJih1PTNETWF0aC5mbG9vcih1L3MpKnMpLGUudG9v bHRpcC5jYWxjVG9vbHRpcFBvc2l0aW9uKFt0LHVdLD0KcixpLGgpLHd9dmFyIHQ9M0RudWxsLG49 M0RudWxsLHI9M0QidyIsaT0zRDUwLHM9M0QyNSxvPTNEbnVsbCx1PTNEbnVsbCxhPTNEPQpudWxs LGY9M0RudWxsLGw9M0R7bGVmdDpudWxsLHRvcDpudWxsfSxjPTNEITAsaD0zRCJudnRvb2x0aXAt IitNYXRoLmZsb29yKE09CmF0aC5yYW5kb20oKSoxZTUpLHA9M0QibnYtcG9pbnRlci1ldmVudHMt bm9uZSIsZD0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LD0Kdj0zRGZ1bmN0aW9uKGUpe3JldHVy biBlfSxtPTNEZnVuY3Rpb24oZSl7aWYodCE9M0RudWxsKXJldHVybiB0O2lmKGU9M0Q9M0RuPQp1 bGwpcmV0dXJuIiI7dmFyIG49M0RkMy5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFi bGUiKSkscj0zRG4uc2VsZWM9CnRBbGwoInRoZWFkIikuZGF0YShbZV0pLmVudGVyKCkuYXBwZW5k KCJ0aGVhZCIpO3IuYXBwZW5kKCJ0ciIpLmFwcGVuZCgidGQiKT0KLmF0dHIoImNvbHNwYW4iLDMp LmFwcGVuZCgic3Ryb25nIikuY2xhc3NlZCgieC12YWx1ZSIsITApLmh0bWwodihlLnZhbHVlKSk7 PQp2YXIgaT0zRG4uc2VsZWN0QWxsKCJ0Ym9keSIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgi dGJvZHkiKSxzPTNEaS5zZWxlY3Q9CkFsbCgidHIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBl LnNlcmllc30pLmVudGVyKCkuYXBwZW5kKCJ0ciIpLmNsYXNzZWQoIj0KaGlnaGxpZ2h0IixmdW5j dGlvbihlKXtyZXR1cm4gZS5oaWdobGlnaHR9KTtzLmFwcGVuZCgidGQiKS5jbGFzc2VkKCJsZWdl bmQtPQpjb2xvci1ndWlkZSIsITApLmFwcGVuZCgiZGl2Iikuc3R5bGUoImJhY2tncm91bmQtY29s b3IiLGZ1bmN0aW9uKGUpe3JldHVybiA9CmUuY29sb3J9KSxzLmFwcGVuZCgidGQiKS5jbGFzc2Vk KCJrZXkiLCEwKS5odG1sKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pLD0Kcy5hcHBlbmQoInRk IikuY2xhc3NlZCgidmFsdWUiLCEwKS5odG1sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQoZS52YWx1 ZSx0KX0pPQoscy5zZWxlY3RBbGwoInRkIikuZWFjaChmdW5jdGlvbihlKXtpZihlLmhpZ2hsaWdo dCl7dmFyIHQ9M0RkMy5zY2FsZS5saW5lYXI9CigpLmRvbWFpbihbMCwxXSkucmFuZ2UoWyIjZmZm IixlLmNvbG9yXSksbj0zRC42O2QzLnNlbGVjdCh0aGlzKS5zdHlsZSgiYm9yZD0KZXItYm90dG9t LWNvbG9yIix0KG4pKS5zdHlsZSgiYm9yZGVyLXRvcC1jb2xvciIsdChuKSl9fSk7dmFyIG89M0Ru Lm5vZGUoKS5vPQp1dGVySFRNTDtyZXR1cm4gZS5mb290ZXIhPTNEPTNEdW5kZWZpbmVkJiYobys9 M0QiPGRpdiBjbGFzcz0zRCdmb290ZXInPiIrZS49CmZvb3RlcisiPC9kaXY+Iiksb30sZz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBlJiZlLnNlcmllcyYmZS5zZXJpZXMubGVuZ3RoPjA/IT0KMDohMX07 cmV0dXJuIHcubnZQb2ludGVyRXZlbnRzQ2xhc3M9M0RwLHcuY29udGVudD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KHQ9M0RlLHcpOnR9LHcudG9vbHRpcEVsZW09M0Rm dW5jdGlvbigpe3JldHVybiBmfSx3LmNvbnRlbnRHZW49CmVyYXRvcj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh0eXBlb2YgZT0zRD0zRCJmdW5jdGlvbiImJihtPQo9M0Rl KSx3KTptfSx3LmRhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0z RGUsdyk6bn0sdy5ncmE9CnZpdHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocj0zRGUsdyk6cn0sdy5kaXN0YW5jZT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGk9M0RlLHcpOml9LHcuc25hcERpc3RhbmNlPTNEZnVuY3Rpb24oZSl7cmV0PQp1 cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdyk6c30sdy5jbGFzc2VzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy49Cmxlbmd0aD8odT0zRGUsdyk6dX0sdy5jaGFydENvbnRhaW5lcj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKGE9M0RlLHcpOmF9LHcucG9z aXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obC5sZWZ0PTNEdHlw PQplb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpsLmxlZnQsbC50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI9Cj9lLnRvcDpsLnRvcCx3KTpsfSx3LmZpeGVkVG9wPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLD0Kdyk6b30sdy5lbmFibGVk PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHcpOmN9LHcudmFs dWVGPQpvcm1hdHRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0eXBl b2YgZT0zRD0zRCJmdW5jdGlvbiImJig9CmQ9M0RlKSx3KTpkfSx3LmhlYWRlckZvcm1hdHRlcj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0eXBlbz0KZiBlPTNEPTNEImZ1 bmN0aW9uIiYmKHY9M0RlKSx3KTp2fSx3LmlkPTNEZnVuY3Rpb24oKXtyZXR1cm4gaH0sd30sZS50 b29sdGlwPQouc2hvdz0zRGZ1bmN0aW9uKHQsbixyLGkscyxvKXt2YXIgdT0zRGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoImRpdiIpO3UuY2xhc3M9Ck5hbWU9M0QibnZ0b29sdGlwICIrKG8/bzoieHkt dG9vbHRpcCIpO3ZhciBhPTNEcztpZighc3x8cy50YWdOYW1lLm1hdGNoKC9nfD0Kc3ZnL2kpKWE9 M0Rkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO3Uuc3R5bGUubGVmdD0z RDAsdS5zdHlsPQplLnRvcD0zRDAsdS5zdHlsZS5vcGFjaXR5PTNEMCx1LmlubmVySFRNTD0zRG4s YS5hcHBlbmRDaGlsZCh1KSxzJiYodFswXT0zRHQ9ClswXS1zLnNjcm9sbExlZnQsdFsxXT0zRHRb MV0tcy5zY3JvbGxUb3ApLGUudG9vbHRpcC5jYWxjVG9vbHRpcFBvc2l0aW9uKHQscj0KLGksdSl9 LGUudG9vbHRpcC5maW5kRmlyc3ROb25TVkdQYXJlbnQ9M0RmdW5jdGlvbihlKXt3aGlsZShlLnRh Z05hbWUubWF0Y2goPQovXmd8c3ZnJC9pKSE9M0Q9M0RudWxsKWU9M0RlLnBhcmVudE5vZGU7cmV0 dXJuIGV9LGUudG9vbHRpcC5maW5kVG90YWxPZmZzZXQ9ClRvcD0zRGZ1bmN0aW9uKGUsdCl7dmFy IG49M0R0O2RvIGlzTmFOKGUub2Zmc2V0VG9wKXx8KG4rPTNEZS5vZmZzZXRUb3ApO3doaT0KbGUo ZT0zRGUub2Zmc2V0UGFyZW50KTtyZXR1cm4gbn0sZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldExl ZnQ9M0RmdW5jdGlvbihlPQosdCl7dmFyIG49M0R0O2RvIGlzTmFOKGUub2Zmc2V0TGVmdCl8fChu Kz0zRGUub2Zmc2V0TGVmdCk7d2hpbGUoZT0zRGUub2Zmc2U9CnRQYXJlbnQpO3JldHVybiBufSxl LnRvb2x0aXAuY2FsY1Rvb2x0aXBQb3NpdGlvbj0zRGZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzPQo9 M0RwYXJzZUludChpLm9mZnNldEhlaWdodCksbz0zRHBhcnNlSW50KGkub2Zmc2V0V2lkdGgpLHU9 M0RlLnV0aWxzLndpbmRvd1M9Cml6ZSgpLndpZHRoLGE9M0RlLnV0aWxzLndpbmRvd1NpemUoKS5o ZWlnaHQsZj0zRHdpbmRvdy5wYWdlWU9mZnNldCxsPTNEd2luZD0Kb3cucGFnZVhPZmZzZXQsYyxo O2E9M0R3aW5kb3cuaW5uZXJXaWR0aD49M0Rkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoP2E6YS0x PQo2LHU9M0R3aW5kb3cuaW5uZXJIZWlnaHQ+PTNEZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ/ dTp1LTE2LG49M0RufHwicyIscj0KPTNEcnx8MjA7dmFyIHA9M0RmdW5jdGlvbih0KXtyZXR1cm4g ZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldFRvcCh0LGgpfSxkPTNEPQpmdW5jdGlvbih0KXtyZXR1 cm4gZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldExlZnQodCxjKX07c3dpdGNoKG4pe2Nhc2UiZSI6 Yz0KPTNEdFswXS1vLXIsaD0zRHRbMV0tcy8yO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2PGwmJihj PTNEdFswXStyPmw/dFswXStyOmwtPQp2K2MpLG08ZiYmKGg9M0RmLW0raCksbStzPmYrYSYmKGg9 M0RmK2EtbStoLXMpO2JyZWFrO2Nhc2UidyI6Yz0zRHRbMF0rcixoPQo9M0R0WzFdLXMvMjt2YXIg dj0zRGQoaSksbT0zRHAoaSk7ditvPnUmJihjPTNEdFswXS1vLXIpLG08ZiYmKGg9M0RmKzUpLG0r cz49CmYrYSYmKGg9M0RmK2EtbStoLXMpO2JyZWFrO2Nhc2UibiI6Yz0zRHRbMF0tby8yLTUsaD0z RHRbMV0rcjt2YXIgdj0zRGQoaSksbT0KPTNEcChpKTt2PGwmJihjPTNEbCs1KSx2K28+dSYmKGM9 M0RjLW8vMis1KSxtK3M+ZithJiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7PQpjYXNlInMiOmM9M0R0 WzBdLW8vMixoPTNEdFsxXS1zLXI7dmFyIHY9M0RkKGkpLG09M0RwKGkpO3Y8bCYmKGM9M0RsKzUp LHYrbz49CnUmJihjPTNEYy1vLzIrNSksZj5tJiYoaD0zRGYpO2JyZWFrO2Nhc2Uibm9uZSI6Yz0z RHRbMF0saD0zRHRbMV0tcjt2YXIgdj0zRD0KZChpKSxtPTNEcChpKX1yZXR1cm4gaS5zdHlsZS5s ZWZ0PTNEYysicHgiLGkuc3R5bGUudG9wPTNEaCsicHgiLGkuc3R5bGUub3BhPQpjaXR5PTNEMSxp LnN0eWxlLnBvc2l0aW9uPTNEImFic29sdXRlIixpfSxlLnRvb2x0aXAuY2xlYW51cD0zRGZ1bmN0 aW9uKCl7dmE9CnIgZT0zRGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm52dG9vbHRp cCIpLHQ9M0RbXTt3aGlsZShlLmxlbmd0aCl0Lj0KcHVzaChlWzBdKSxlWzBdLnN0eWxlLnRyYW5z aXRpb25EZWxheT0zRCIwICFpbXBvcnRhbnQiLGVbMF0uc3R5bGUub3BhY2l0eT0KPTNEMCxlWzBd LmNsYXNzTmFtZT0zRCJudnRvb2x0aXAtcGVuZGluZy1yZW1vdmFsIjtzZXRUaW1lb3V0KGZ1bmN0 aW9uKCl7d2hpPQpsZSh0Lmxlbmd0aCl7dmFyIGU9M0R0LnBvcCgpO2UucGFyZW50Tm9kZS5yZW1v dmVDaGlsZChlKX19LDUwMCl9fSgpLGUudXRpbHM9Ci53aW5kb3dTaXplPTNEZnVuY3Rpb24oKXt2 YXIgZT0zRHt3aWR0aDo2NDAsaGVpZ2h0OjQ4MH07cmV0dXJuIGRvY3VtZW50LmJvZD0KeSYmZG9j dW1lbnQuYm9keS5vZmZzZXRXaWR0aCYmKGUud2lkdGg9M0Rkb2N1bWVudC5ib2R5Lm9mZnNldFdp ZHRoLGUuaGVpZ2h0PQo9M0Rkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCksZG9jdW1lbnQuY29t cGF0TW9kZT0zRD0zRCJDU1MxQ29tcGF0IiYmZG9jdW09CmVudC5kb2N1bWVudEVsZW1lbnQmJmRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCYmKGUud2lkdGg9M0Rkb2N1bT0KZW50 LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxlLmhlaWdodD0zRGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudC5vZmZzZXRIPQplaWdodCksd2luZG93LmlubmVyV2lkdGgmJndpbmRvdy5pbm5lckhl aWdodCYmKGUud2lkdGg9M0R3aW5kb3cuaW5uZXJXaWR0aCw9CmUuaGVpZ2h0PTNEd2luZG93Lmlu bmVySGVpZ2h0KSxlfSxlLnV0aWxzLndpbmRvd1Jlc2l6ZT0zRGZ1bmN0aW9uKGUpe2lmKGU9Cj0z RD0zRD0zRHVuZGVmaW5lZClyZXR1cm47dmFyIHQ9M0R3aW5kb3cub25yZXNpemU7d2luZG93Lm9u cmVzaXplPTNEZnVuY3Rpbz0KbihuKXt0eXBlb2YgdD0zRD0zRCJmdW5jdGlvbiImJnQobiksZShu KX19LGUudXRpbHMuZ2V0Q29sb3I9M0RmdW5jdGlvbih0KXtyPQpldHVybiBhcmd1bWVudHMubGVu Z3RoP09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT0zRD0zRD0zRCJbb2JqZWN0IEE9 CnJyYXldIj9mdW5jdGlvbihlLG4pe3JldHVybiBlLmNvbG9yfHx0W24ldC5sZW5ndGhdfTp0OmUu dXRpbHMuZGVmYXVsdENvbG9yKD0KKX0sZS51dGlscy5kZWZhdWx0Q29sb3I9M0RmdW5jdGlvbigp e3ZhciBlPTNEZDMuc2NhbGUuY2F0ZWdvcnkyMCgpLnJhbmdlKCk7PQpyZXR1cm4gZnVuY3Rpb24o dCxuKXtyZXR1cm4gdC5jb2xvcnx8ZVtuJWUubGVuZ3RoXX19LGUudXRpbHMuY3VzdG9tVGhlbWU9 M0Q9CmZ1bmN0aW9uKGUsdCxuKXt0PTNEdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSxuPTNE bnx8ZDMuc2NhbGUuY2F0ZWdvcnkyMD0KKCkucmFuZ2UoKTt2YXIgcj0zRG4ubGVuZ3RoO3JldHVy biBmdW5jdGlvbihpLHMpe3ZhciBvPTNEdChpKTtyZXR1cm4gcnx8KHI9Cj0zRG4ubGVuZ3RoKSx0 eXBlb2YgZVtvXSE9M0QidW5kZWZpbmVkIj90eXBlb2YgZVtvXT0zRD0zRCJmdW5jdGlvbiI/ZVtv XSgpOj0KZVtvXTpuWy0tcl19fSxlLnV0aWxzLnBqYXg9M0RmdW5jdGlvbih0LG4pe2Z1bmN0aW9u IHIocil7ZDMuaHRtbChyLGZ1bmN0aW9uPQoocil7dmFyIGk9M0RkMy5zZWxlY3Qobikubm9kZSgp O2kucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZDMuc2VsZWN0KHIpLnNlbGU9CmN0KG4pLm5vZGUo KSxpKSxlLnV0aWxzLnBqYXgodCxuKX0pfWQzLnNlbGVjdEFsbCh0KS5vbigiY2xpY2siLGZ1bmN0 aW9uKCl7aD0KaXN0b3J5LnB1c2hTdGF0ZSh0aGlzLmhyZWYsdGhpcy50ZXh0Q29udGVudCx0aGlz LmhyZWYpLHIodGhpcy5ocmVmKSxkMy5ldmVuPQp0LnByZXZlbnREZWZhdWx0KCl9KSxkMy5zZWxl Y3Qod2luZG93KS5vbigicG9wc3RhdGUiLGZ1bmN0aW9uKCl7ZDMuZXZlbnQuc3Q9CmF0ZSYmcihk My5ldmVudC5zdGF0ZSl9KX0sZS51dGlscy5jYWxjQXBwcm94VGV4dFdpZHRoPTNEZnVuY3Rpb24o ZSl7aWYodHlwZT0Kb2YgZS5zdHlsZT0zRD0zRCJmdW5jdGlvbiImJnR5cGVvZiBlLnRleHQ9M0Q9 M0QiZnVuY3Rpb24iKXt2YXIgdD0zRHBhcnNlSW50PQooZS5zdHlsZSgiZm9udC1zaXplIikucmVw bGFjZSgicHgiLCIiKSksbj0zRGUudGV4dCgpLmxlbmd0aDtyZXR1cm4gbip0Ki41fXI9CmV0dXJu IDB9LGUudXRpbHMuTmFOdG9aZXJvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlIT0zRCJu dW1iZXIifHxpc05hTj0KKGUpfHxlPTNEPTNEPTNEbnVsbHx8ZT0zRD0zRD0zREluZmluaXR5PzA6 ZX0sZS51dGlscy5vcHRpb25zRnVuYz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUmJmQzLm1hcChl KS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dHlwZW9mIHRoaXNbZV09M0Q9M0QiZnVuY3Rpb249CiIm JnRoaXNbZV0odCl9LmJpbmQodGhpcykpLHRoaXN9LGUubW9kZWxzLmF4aXM9M0RmdW5jdGlvbigp e2Z1bmN0aW9uIG0oZSl7cj0KZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNEZDMuc2Vs ZWN0KHRoaXMpLG09M0RpLnNlbGVjdEFsbCgiZy5udi13cmFwPQoubnYtYXhpcyIpLmRhdGEoW2Vd KSxnPTNEbS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG49 CnYtYXhpcyIpLHk9M0RnLmFwcGVuZCgiZyIpLGI9M0RtLnNlbGVjdCgiZyIpO3AhPTNEPTNEbnVs bD90LnRpY2tzKHApOih0Lm9yaT0KZW50KCk9M0Q9M0QidG9wInx8dC5vcmllbnQoKT0zRD0zRCJi b3R0b20iKSYmdC50aWNrcyhNYXRoLmFicyhzLnJhbmdlKClbMV0tPQpzLnJhbmdlKClbMF0pLzEw MCksYi5jYWxsKHQpLHY9M0R2fHx0LnNjYWxlKCk7dmFyIHc9M0R0LnRpY2tGb3JtYXQoKTt3PTNE PQo9M0RudWxsJiYodz0zRHYudGlja0Zvcm1hdCgpKTt2YXIgRT0zRGIuc2VsZWN0QWxsKCJ0ZXh0 Lm52LWF4aXNsYWJlbCIpLmRhdGE9Cihbb3x8bnVsbF0pO0UuZXhpdCgpLnJlbW92ZSgpO3N3aXRj aCh0Lm9yaWVudCgpKXtjYXNlInRvcCI6RS5lbnRlcigpLmFwcGVuZD0KKCJ0ZXh0IikuYXR0cigi Y2xhc3MiLCJudi1heGlzbGFiZWwiKTt2YXIgUz0zRHMucmFuZ2UoKS5sZW5ndGg9M0Q9M0QyP3Mu cmFuPQpnZSgpWzFdOnMucmFuZ2UoKVtzLnJhbmdlKCkubGVuZ3RoLTFdKyhzLnJhbmdlKClbMV0t cy5yYW5nZSgpWzBdKTtFLmF0dHIoInQ9CmV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5Iiww KS5hdHRyKCJ4IixTLzIpO2lmKHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoIj0KZy5udi1heGlzTWF4 TWluIikuZGF0YShzLmRvbWFpbigpKTt4LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1hPQp4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmF0 dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSw9CnQpe3JldHVybiJ0cmFuc2xhdGUoIitzKGUpKyIs MCkifSkuc2VsZWN0KCJ0ZXh0IikuYXR0cigiZHkiLCItMC41ZW0iKS5hdHRyKD0KInkiLC10LnRp Y2tQYWRkaW5nKCkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChmdW5jdGlvbihl LHQpe3ZhciBuPQo9M0R3KGUpO3JldHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLHguYXR0 cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3I9CmV0dXJuInRyYW5zbGF0ZSgiK3MucmFuZ2Uo KVt0XSsiLDApIn0pfWJyZWFrO2Nhc2UiYm90dG9tIjp2YXIgVD0zRDM2LE49M0QzMD0KLEM9M0Ri LnNlbGVjdEFsbCgiZyIpLnNlbGVjdCgidGV4dCIpO2lmKGYlMzYwKXtDLmVhY2goZnVuY3Rpb24o ZSx0KXt2YXIgbj0KPTNEdGhpcy5nZXRCQm94KCkud2lkdGg7bj5OJiYoTj0zRG4pfSk7dmFyIGs9 M0RNYXRoLmFicyhNYXRoLnNpbihmKk1hdGguUEkvPQoxODApKSxUPTNEKGs/aypOOk4pKzMwO0Mu YXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuInJvdGF0ZSgiK2Y9CisiIDAs MCkifSkuc3R5bGUoInRleHQtYW5jaG9yIixmJTM2MD4wPyJzdGFydCI6ImVuZCIpfUUuZW50ZXIo KS5hcHBlbmQoInRleD0KdCIpLmF0dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIik7dmFyIFM9M0Rz LnJhbmdlKCkubGVuZ3RoPTNEPTNEMj9zLnJhbmdlKClbPQoxXTpzLnJhbmdlKClbcy5yYW5nZSgp Lmxlbmd0aC0xXSsocy5yYW5nZSgpWzFdLXMucmFuZ2UoKVswXSk7RS5hdHRyKCJ0ZXh0LWE9Cm5j aG9yIiwibWlkZGxlIikuYXR0cigieSIsVCkuYXR0cigieCIsUy8yKTtpZih1KXt2YXIgeD0zRG0u c2VsZWN0QWxsKCJnLm52LT0KYXhpc01heE1pbiIpLmRhdGEoW3MuZG9tYWluKClbMF0scy5kb21h aW4oKVtzLmRvbWFpbigpLmxlbmd0aC0xXV0pO3guZW50ZXIoPQopLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLHguZXhpdCgpLnJlbW92ZSg9 CikseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhz KGUpKyhoP3MucmFuZ2VCYW5kKD0KKS8yOjApKSsiLDApIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIo ImR5IiwiLjcxZW0iKS5hdHRyKCJ5Iix0LnRpY2tQYWRkaW5nKCkpPQouYXR0cigidHJhbnNmb3Jt IixmdW5jdGlvbihlLHQsbil7cmV0dXJuInJvdGF0ZSgiK2YrIiAwLDApIn0pLnN0eWxlKCJ0ZXh0 LWE9Cm5jaG9yIixmP2YlMzYwPjA/InN0YXJ0IjoiZW5kIjoibWlkZGxlIikudGV4dChmdW5jdGlv bihlLHQpe3ZhciBuPTNEdyhlKTtyZT0KdHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLHgu YXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuPQpzbGF0ZSgiKyhzKGUp KyhoP3MucmFuZ2VCYW5kKCkvMjowKSkrIiwwKSJ9KX1jJiZDLmF0dHIoInRyYW5zZm9ybSIsZnVu Y3Rpb249CihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0JTI9M0Q9M0QwPyIwIjoiMTIiKSsi KSJ9KTticmVhaztjYXNlInJpZ2h0IjpFLj0KZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJj bGFzcyIsIm52LWF4aXNsYWJlbCIpLEUuc3R5bGUoInRleHQtYW5jaG9yIixsPQo/Im1pZGRsZSI6 ImJlZ2luIikuYXR0cigidHJhbnNmb3JtIixsPyJyb3RhdGUoOTApIjoiIikuYXR0cigieSIsbD8t TWF0aC5tYXg9CihuLnJpZ2h0LHIpKzEyOi0xMCkuYXR0cigieCIsbD9zLnJhbmdlKClbMF0vMjp0 LnRpY2tQYWRkaW5nKCkpO2lmKHUpe3ZhciB4PQo9M0RtLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4 TWluIikuZGF0YShzLmRvbWFpbigpKTt4LmVudGVyKCkuYXBwZW5kKCJnIikuYXQ9CnRyKCJjbGFz cyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMCkseC5l eGl0KCkucmVtbz0KdmUoKSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4i dHJhbnNsYXRlKDAsIitzKGUpKyIpIn0pLnNlbGVjPQp0KCJ0ZXh0IikuYXR0cigiZHkiLCIuMzJl bSIpLmF0dHIoInkiLDApLmF0dHIoIngiLHQudGlja1BhZGRpbmcoKSkuc3R5bGUoInQ9CmV4dC1h bmNob3IiLCJzdGFydCIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHcoZSk7cmV0dXJuKCIi K24pLm1hdGNoKCJOYT0KTiIpPyIiOm59KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4idHJhbnNsYXRlKDAsIitzLnJhbmdlKClbPQp0XSsiKSJ9KS5zZWxlY3QoInRleHQi KS5zdHlsZSgib3BhY2l0eSIsMSl9YnJlYWs7Y2FzZSJsZWZ0IjpFLmVudGVyKCkuYXBwZW49CmQo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpLEUuc3R5bGUoInRleHQtYW5jaG9y IixsPyJtaWRkbGUiOiJlbj0KZCIpLmF0dHIoInRyYW5zZm9ybSIsbD8icm90YXRlKC05MCkiOiIi KS5hdHRyKCJ5IixsPy1NYXRoLm1heChuLmxlZnQscikrZDotPQoxMCkuYXR0cigieCIsbD8tcy5y YW5nZSgpWzBdLzI6LXQudGlja1BhZGRpbmcoKSk7aWYodSl7dmFyIHg9M0RtLnNlbGVjdEFsbCg9 CiJnLm52LWF4aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWluKCkpO3guZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LT0KYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJv cGFjaXR5IiwwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmF0dHIoInRyPQphbnNmb3JtIixmdW5jdGlv bihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3YoZSkrIikifSkuc2VsZWN0KCJ0ZXh0IikuYXR0 cig9CiJkeSIsIi4zMmVtIikuYXR0cigieSIsMCkuYXR0cigieCIsLXQudGlja1BhZGRpbmcoKSku YXR0cigidGV4dC1hbmNob3IiLCJlbj0KZCIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHco ZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4iKT8iIjpufSkseC5hdHRyPQooInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKDAsIitzLnJhbmdlKClbdF0rIikifSkuc2Vs ZWN0KCI9CnRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSl9fUUudGV4dChmdW5jdGlvbihlKXtyZXR1 cm4gZX0pLHUmJih0Lm9yaWVudCgpPTNEPQo9M0Q9M0QibGVmdCJ8fHQub3JpZW50KCk9M0Q9M0Q9 M0QicmlnaHQiKSYmKGIuc2VsZWN0QWxsKCJnIikuZWFjaChmdW5jdGlvbig9CmUsdCl7ZDMuc2Vs ZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoIm9wYWNpdHkiLDEpO2lmKHMoZSk8cy5yYW5n ZSgpWzFdKz0KMTB8fHMoZSk+cy5yYW5nZSgpWzBdLTEwKShlPjFlLTEwfHxlPC0xZS0xMCkmJmQz LnNlbGVjdCh0aGlzKS5hdHRyKCJvcGFjaXR5PQoiLDApLGQzLnNlbGVjdCh0aGlzKS5zZWxlY3Qo InRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pLHMuZG9tYWluKClbMF09M0Q9M0Q9CnMuZG9tYWlu KClbMV0mJnMuZG9tYWluKClbMF09M0Q9M0QwJiZtLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWlu Iikuc3R5bGUoIj0Kb3BhY2l0eSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8wOjF9KSk7aWYodSYm KHQub3JpZW50KCk9M0Q9M0Q9M0QidG9wInx8dC5vPQpyaWVudCgpPTNEPTNEPTNEImJvdHRvbSIp KXt2YXIgTD0zRFtdO20uc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5lYWNoKGY9CnVuY3Rp b24oZSx0KXt0cnl7dD9MLnB1c2gocyhlKS10aGlzLmdldEJCb3goKS53aWR0aC00KTpMLnB1c2go cyhlKSt0aGlzLmdldD0KQkJveCgpLndpZHRoKzQpfWNhdGNoKG4pe3Q/TC5wdXNoKHMoZSktNCk6 TC5wdXNoKHMoZSkrNCl9fSksYi5zZWxlY3RBbGwoImciPQopLmVhY2goZnVuY3Rpb24oZSx0KXtp ZihzKGUpPExbMF18fHMoZSk+TFsxXSllPjFlLTEwfHxlPC0xZS0xMD9kMy5zZWxlY3QodGg9Cmlz KS5yZW1vdmUoKTpkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCl9KX1hJiZi LnNlbGVjdEFsbCgiLnRpYz0KayIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hcGFyc2VGbG9h dChNYXRoLnJvdW5kKGUuX19kYXRhX18qMWU1KS8xZTYpJiZlPQouX19kYXRhX18hPTNEPTNEdW5k ZWZpbmVkfSkuY2xhc3NlZCgiemVybyIsITApLHY9M0RzLmNvcHkoKX0pLG19dmFyIHQ9M0RkMy49 CnN2Zy5heGlzKCksbj0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0scj0zRDc1LGk9 M0Q2MCxzPTNEZDMuc2NhbGUubD0KaW5lYXIoKSxvPTNEbnVsbCx1PTNEITAsYT0zRCEwLGY9M0Qw LGw9M0QhMCxjPTNEITEsaD0zRCExLHA9M0RudWxsLGQ9M0QxMjt0PQouc2NhbGUocykub3JpZW50 KCJib3R0b20iKS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7dmFyIHY7cmV0dXJu IG09Ci5heGlzPTNEdCxkMy5yZWJpbmQobSx0LCJvcmllbnQiLCJ0aWNrVmFsdWVzIiwidGlja1N1 YmRpdmlkZSIsInRpY2tTaXplIiwidD0KaWNrUGFkZGluZyIsInRpY2tGb3JtYXQiKSxkMy5yZWJp bmQobSxzLCJkb21haW4iLCJyYW5nZSIsInJhbmdlQmFuZCIsInJhbmdlPQpCYW5kcyIpLG0ub3B0 aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm1hcmdpbj0zRGZ1bmN0aW9uKGUp e3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRl ZmluZWQiP2UudG9wOm4udG9wLG4ucmlnaD0KdD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmlu ZWQiP2UucmlnaHQ6bi5yaWdodCxuLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvPQptIT0zRCJ1bmRl ZmluZWQiP2UuYm90dG9tOm4uYm90dG9tLG4ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVm aW5lZCI/ZS49CmxlZnQ6bi5sZWZ0LG0pOm59LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsbSk6cj0KfSxtLnRpY2tzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLG0pOnB9LG0uaGVpZ2h0PTNEZnVuPQpjdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsbSk6aX0sbS5heGlzTGFiZWw9M0RmdW5j dGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxtKTpvfSxtLnNob3dNYXhN aW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyh1PTNEZSxtKTp1fSxt LmhpZ2hsaWdodFplcm89M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhh PTNEZSxtKTphfSxtLnNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHM9M0RlLHQuc2NhbGU9CihzKSxoPTNEdHlwZW9mIHMucmFuZ2VCYW5kcz0zRD0zRCJmdW5jdGlv biIsZDMucmViaW5kKG0scywiZG9tYWluIiwicmFuZ2UiLD0KInJhbmdlQmFuZCIsInJhbmdlQmFu ZHMiKSxtKTpzfSxtLnJvdGF0ZVlMYWJlbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0 cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0ucm90YXRlTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg9Cj8oZj0zRGUsbSk6Zn0sbS5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLD0KbSk6Y30sbS5heGlzTGFiZWxE aXN0YW5jZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxtKTpk PQp9LG19LGUubW9kZWxzLmhpc3RvcmljYWxCYXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHcoRSl7 cmV0dXJuIEUuZWFjaChmdW5jdGk9Cm9uKHcpe3ZhciBFPTNEbi10LmxlZnQtdC5yaWdodCxTPTNE ci10LnRvcC10LmJvdHRvbSxUPTNEZDMuc2VsZWN0KHRoaXMpO3MuZD0Kb21haW4oZHx8ZDMuZXh0 ZW50KHdbMF0udmFsdWVzLm1hcCh1KS5jb25jYXQoZikpKSxjP3MucmFuZ2UobXx8W0UqLjUvd1sw XS52PQphbHVlcy5sZW5ndGgsRSood1swXS52YWx1ZXMubGVuZ3RoLS41KS93WzBdLnZhbHVlcy5s ZW5ndGhdKTpzLnJhbmdlKG18fFswLEU9Cl0pLG8uZG9tYWluKHZ8fGQzLmV4dGVudCh3WzBdLnZh bHVlcy5tYXAoYSkuY29uY2F0KGwpKSkucmFuZ2UoZ3x8W1MsMF0pLHMuZD0Kb21haW4oKVswXT0z RD0zRD0zRHMuZG9tYWluKClbMV0mJihzLmRvbWFpbigpWzBdP3MuZG9tYWluKFtzLmRvbWFpbigp WzBdLXMuPQpkb21haW4oKVswXSouMDEscy5kb21haW4oKVsxXStzLmRvbWFpbigpWzFdKi4wMV0p OnMuZG9tYWluKFstMSwxXSkpLG8uZG9tYWk9Cm4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClbMV0m JihvLmRvbWFpbigpWzBdP28uZG9tYWluKFtvLmRvbWFpbigpWzBdK28uZG9tYT0KaW4oKVswXSou MDEsby5kb21haW4oKVsxXS1vLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9tYWluKFstMSwxXSkpO3Zh ciBOPTNEVC5zPQplbGVjdEFsbCgiZy5udi13cmFwLm52LWhpc3RvcmljYWxCYXItIitpKS5kYXRh KFt3WzBdLnZhbHVlc10pLEM9M0ROLmVudGVyKCk9Ci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtd3JhcCBudi1oaXN0b3JpY2FsQmFyLSIraSksaz0zREMuYXBwZW5kKD0KImRlZnMi KSxMPTNEQy5hcHBlbmQoImciKSxBPTNETi5zZWxlY3QoImciKTtMLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtPQpiYXJzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0Lmxl ZnQrIiwiK3QudG9wKyIpIiksVC5vbigiY2xpY2siLGY9CnVuY3Rpb24oZSx0KXt5LmNoYXJ0Q2xp Y2soe2RhdGE6ZSxpbmRleDp0LHBvczpkMy5ldmVudCxpZDppfSl9KSxrLmFwcGVuZCgiYz0KbGlw UGF0aCIpLmF0dHIoImlkIiwibnYtY2hhcnQtY2xpcC1wYXRoLSIraSkuYXBwZW5kKCJyZWN0Iiks Ti5zZWxlY3QoIiNudi1jPQpoYXJ0LWNsaXAtcGF0aC0iK2krIiByZWN0IikuYXR0cigid2lkdGgi LEUpLmF0dHIoImhlaWdodCIsUyksQS5hdHRyKCJjbGlwLXA9CmF0aCIsaD8idXJsKCNudi1jaGFy dC1jbGlwLXBhdGgtIitpKyIpIjoiIik7dmFyIE89M0ROLnNlbGVjdCgiLm52LWJhcnMiKS5zZT0K bGVjdEFsbCgiLm52LWJhciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHUoZSx0KX0pPQo7Ty5leGl0KCkucmVtb3ZlKCk7dmFyIE09M0RPLmVudGVyKCku YXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnU9Cm5jdGlvbih0LG4pe3JldHVy biBlLnV0aWxzLk5hTnRvWmVybyhvKE1hdGgubWF4KDAsYSh0LG4pKSkpfSkuYXR0cigiaGVpZ2h0 Ij0KLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKE1hdGguYWJzKG8oYSh0 LG4pKS1vKDApKSl9KS5hdHRyKCJ0PQpyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJh bnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsdWVzLmxlbmd0aCo9Ci40NSkrIiwwKSJ9KS5v bigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjtkMy5zZWxlY3QodGhpcyku Y2xhcz0Kc2VkKCJob3ZlciIsITApLHkuZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ6ZSxzZXJpZXM6 d1swXSxwb3M6W3ModShlLHQpKSxvKGEoPQplLHQpKV0scG9pbnRJbmRleDp0LHNlcmllc0luZGV4 OjAsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQ9Cil7aWYoIWIpcmV0 dXJuO2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLHkuZWxlbWVudE1vdXNlb3V0 KHtwb2ludD0KOmUsc2VyaWVzOndbMF0scG9pbnRJbmRleDp0LHNlcmllc0luZGV4OjAsZTpkMy5l dmVudH0pfSkub24oImNsaWNrIixmdW5jdGlvPQpuKGUsdCl7aWYoIWIpcmV0dXJuO3kuZWxlbWVu dENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSw9CnQpKSxvKGEo ZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24o ImRibGNsaWNrIj0KLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO3kuZWxlbWVudERibENsaWNr KHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQsPQpwb3M6W3ModShlLHQpKSxvKGEoZSx0KSld LGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7Ty49CmF0dHIo ImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0KX0pLmF0dHIoImNsYXNzIixmdW5jdGlv bihlLHQsbil7cmV0dT0Kcm4oYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3Np dGl2ZSIpKyIgbnYtYmFyLSIrbisiLSIrdH0pLmF0dHIoPQoidHJhbnNmb3JtIixmdW5jdGlvbihl LHQpe3JldHVybiJ0cmFuc2xhdGUoIisocyh1KGUsdCkpLUUvd1swXS52YWx1ZXMubGVuZ3Q9Cmgq LjQ1KSsiLDApIn0pLmF0dHIoIndpZHRoIixFL3dbMF0udmFsdWVzLmxlbmd0aCouOSksTy5hdHRy KCJ5IixmdW5jdGlvbih0LD0Kbil7dmFyIHI9M0RhKHQsbik8MD9vKDApOm8oMCktbyhhKHQsbikp PDE/bygwKS0xOm8oYSh0LG4pKTtyZXR1cm4gZS51dGlscy5OPQphTnRvWmVybyhyKX0pLmF0dHIo ImhlaWdodCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oTWF0aC5tYXg9 CihNYXRoLmFicyhvKGEodCxuKSktbygwKSksMSkpfSl9KSx3fXZhciB0PTNEe3RvcDowLHJpZ2h0 OjAsYm90dG9tOjAsbGVmdDowfT0KLG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRo LnJhbmRvbSgpKjFlNCkscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89Cj0zRGQzLnNjYWxlLmxpbmVh cigpLHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu eT0KfSxmPTNEW10sbD0zRFswXSxjPTNEITEsaD0zRCEwLHA9M0RlLnV0aWxzLmRlZmF1bHRDb2xv cigpLGQsdixtLGcseT0zRGQzLmRpPQpzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2si LCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWw9CmVtZW50TW91c2VvdXQi KSxiPTNEITA7cmV0dXJuIHcuaGlnaGxpZ2h0UG9pbnQ9M0RmdW5jdGlvbihlLHQpe2QzLnNlbGVj dCgiLj0KbnYtaGlzdG9yaWNhbEJhci0iK2kpLnNlbGVjdCgiLm52LWJhcnMgLm52LWJhci0wLSIr ZSkuY2xhc3NlZCgiaG92ZXIiLHQpfSx3PQouY2xlYXJIaWdobGlnaHRzPTNEZnVuY3Rpb24oKXtk My5zZWxlY3QoIi5udi1oaXN0b3JpY2FsQmFyLSIraSkuc2VsZWN0KCIubnY9Ci1iYXJzIC5udi1i YXIuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEpfSx3LmRpc3BhdGNoPTNEeSx3Lm9wdGlvbnM9 M0RlLnV0aT0KbHMub3B0aW9uc0Z1bmMuYmluZCh3KSx3Lng9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odT0zRGUsdyk6PQp1fSx3Lnk9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsdyk6YX0sdy5tYXJnaW49M0RmdW5jdGk9Cm9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVk Ij9lLnRvcDp0Lj0KdG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9l LnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlPQpvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVk Ij9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmQ9CmVmaW5l ZCI/ZS5sZWZ0OnQubGVmdCx3KTp0fSx3LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KD0Kbj0zRGUsdyk6bn0sdy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsdyk6cn0sdy54PQpTY2FsZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSx3KTpzfSx3LnlTY2FsZT0zRGZ1bmN0aW89Cm4o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLHcpOm99LHcueERvbWFpbj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHcpOmR9LHcueURvbWFpbj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KHY9M0RlLHcpOnZ9LHcueFJh bmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLHcpOm19LHc9 Ci55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsdyk6 Z30sdy5mb3JjZVg9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNE ZSx3KTpmfSx3LmZvcmNlWT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/ KGw9M0RlLHcpOmx9LHcucGFkRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3Q9Cmg/KGM9M0RlLHcpOmN9LHcuY2xpcEVkZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0zRGUsdyk6aD0KfSx3LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLnV0aWxzLmdldENvbG9yKHQpLHcpPQo6cH0sdy5pZD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSx3KTppfSx3LmludGVyYWN0 aXZlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRCExLHcpOmJ9 LHd9LGUubW9kZWxzLmJ1bGxldD0zRGY9CnVuY3Rpb24oKXtmdW5jdGlvbiBtKGUpe3JldHVybiBl LmVhY2goZnVuY3Rpb24oZSxuKXt2YXIgcD0zRGMtdC5sZWZ0LXQucmlnaD0KdCxtPTNEaC10LnRv cC10LmJvdHRvbSxnPTNEZDMuc2VsZWN0KHRoaXMpLHk9M0RpLmNhbGwodGhpcyxlLG4pLnNsaWNl KCkuc29yPQp0KGQzLmRlc2NlbmRpbmcpLGI9M0RzLmNhbGwodGhpcyxlLG4pLnNsaWNlKCkuc29y dChkMy5kZXNjZW5kaW5nKSx3PTNEby5jYWw9CmwodGhpcyxlLG4pLnNsaWNlKCkuc29ydChkMy5k ZXNjZW5kaW5nKSxFPTNEdS5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLFM9M0RhLj0KY2FsbCh0aGlz LGUsbikuc2xpY2UoKSx4PTNEZi5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLFQ9M0RkMy5zY2FsZS5s aW5lYXIoKS5kPQpvbWFpbihkMy5leHRlbnQoZDMubWVyZ2UoW2wseV0pKSkucmFuZ2Uocj9bcCww XTpbMCxwXSksTj0zRHRoaXMuX19jaGFydF9ffHw9CmQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihb MCxJbmZpbml0eV0pLnJhbmdlKFQucmFuZ2UoKSk7dGhpcy5fX2NoYXJ0X189M0RUOz0KdmFyIEM9 M0RkMy5taW4oeSksaz0zRGQzLm1heCh5KSxMPTNEeVsxXSxBPTNEZy5zZWxlY3RBbGwoImcubnYt d3JhcC5udi1idWxsPQpldCIpLmRhdGEoW2VdKSxPPTNEQS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWJ1bGw9CmV0IiksTT0zRE8uYXBwZW5kKCJnIiks Xz0zREEuc2VsZWN0KCJnIik7TS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LT0KcmFu Z2UgbnYtcmFuZ2VNYXgiKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2Ug bnYtcmFuZ2VBdmciKSxNPQouYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudi1yYW5nZSBu di1yYW5nZU1pbiIpLE0uYXBwZW5kKCJyZWN0IikuYXR0cig9CiJjbGFzcyIsIm52LW1lYXN1cmUi KSxNLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibnYtbWFya2VyVHJpYW5nbGUiKSxBLj0K YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBE PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gTWF0aC5hYnMoTihlKS1OKDApKX0sUD0zRGZ1bmN0aW9u KGUpe3JldHVybiBNYXRoLmFicyhUKGUpLVQoMCkpfSxIPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4g ZTwwP04oZSk6TigwKX0sQj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/VChlKTpUKDApfTtfLnNl bD0KZWN0KCJyZWN0Lm52LXJhbmdlTWF4IikuYXR0cigiaGVpZ2h0IixtKS5hdHRyKCJ3aWR0aCIs UChrPjA/azpDKSkuYXR0cigieCIsPQpCKGs+MD9rOkMpKS5kYXR1bShrPjA/azpDKSxfLnNlbGVj dCgicmVjdC5udi1yYW5nZUF2ZyIpLmF0dHIoImhlaWdodCIsbSkuYXQ9CnRyKCJ3aWR0aCIsUChM KSkuYXR0cigieCIsQihMKSkuZGF0dW0oTCksXy5zZWxlY3QoInJlY3QubnYtcmFuZ2VNaW4iKS5h dHRyKD0KImhlaWdodCIsbSkuYXR0cigid2lkdGgiLFAoaykpLmF0dHIoIngiLEIoaykpLmF0dHIo IndpZHRoIixQKGs+MD9DOmspKS5hdHRyPQooIngiLEIoaz4wP0M6aykpLmRhdHVtKGs+MD9DOmsp LF8uc2VsZWN0KCJyZWN0Lm52LW1lYXN1cmUiKS5zdHlsZSgiZmlsbCIsZCk9Ci5hdHRyKCJoZWln aHQiLG0vMykuYXR0cigieSIsbS8zKS5hdHRyKCJ3aWR0aCIsdzwwP1QoMCktVCh3WzBdKTpUKHdb MF0pLVQoMD0KKSkuYXR0cigieCIsQih3KSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2LmVs ZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOndbMF0sPQpsYWJlbDp4WzBdfHwiQ3VycmVudCIscG9zOltU KHdbMF0pLG0vMl19KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt2LmVsZW09CmVudE1vdXNl b3V0KHt2YWx1ZTp3WzBdLGxhYmVsOnhbMF18fCJDdXJyZW50In0pfSk7dmFyIGo9M0RtLzY7Ylsw XT9fLnNlbGVjdD0KQWxsKCJwYXRoLm52LW1hcmtlclRyaWFuZ2xlIikuYXR0cigidHJhbnNmb3Jt IixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlPQooIitUKGJbMF0pKyIsIittLzIrIikifSku YXR0cigiZCIsIk0wLCIraisiTCIraisiLCIrIC1qKyIgIisgLWorIiwiKyAtaisiWiI9Cikub24o Im1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmJbMF0sbGFi ZWw6U1swXXx8IlByZT0KdmlvdXMiLHBvczpbVChiWzBdKSxtLzJdfSl9KS5vbigibW91c2VvdXQi LGZ1bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdXQoe3ZhPQpsdWU6YlswXSxsYWJlbDpTWzBdfHwi UHJldmlvdXMifSl9KTpfLnNlbGVjdEFsbCgicGF0aC5udi1tYXJrZXJUcmlhbmdsZSIpLnI9CmVt b3ZlKCksQS5zZWxlY3RBbGwoIi5udi1yYW5nZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUs dCl7dmFyIG49M0RFW3RdfD0KfCh0P3Q9M0Q9M0QxPyJNZWFuIjoiTWluaW11bSI6Ik1heGltdW0i KTt2LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmUsbGFiZWw6PQpuLHBvczpbVChlKSxtLzJdfSl9 KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RFW3RdfHwodD90PTNEPTNEMT89 CiJNZWFuIjoiTWluaW11bSI6Ik1heGltdW0iKTt2LmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6ZSxs YWJlbDpufSl9KX0pLG19dmFyID0KdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0s bj0zRCJsZWZ0IixyPTNEITEsaT0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGUucmFuZ2VzfSxzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFya2Vyc30sbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1l YXM9CnVyZXN9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5yYW5nZUxhYmVscz9lLnJhbmdlTGFi ZWxzOltdfSxhPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gZS5tYXJrZXJMYWJlbHM/ZS5tYXJrZXJM YWJlbHM6W119LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWFzdXJlPQpMYWJlbHM/ZS5tZWFz dXJlTGFiZWxzOltdfSxsPTNEWzBdLGM9M0QzODAsaD0zRDMwLHA9M0RudWxsLGQ9M0RlLnV0aWxz LmdldEM9Cm9sb3IoWyIjMWY3N2I0Il0pLHY9M0RkMy5kaXNwYXRjaCgiZWxlbWVudE1vdXNlb3Zl ciIsImVsZW1lbnRNb3VzZW91dCIpO3JldD0KdXJuIG0uZGlzcGF0Y2g9M0R2LG0ub3B0aW9ucz0z RGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm9yaWVudD0zRGZ1bmN0PQppb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLHI9M0RuPTNEPTNEInJpZ2h0Inx8bj0zRD0zRCJi b3R0b20iLG09Cik6bn0sbS5yYW5nZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaT0zRGUsbSk6aX0sbS5tYXJrZXJzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocz0zRGUsbSk6c30sbS5tZWFzdXJlcz0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOm99LG0uZm9yY2VYPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS53aWR0aD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEPQplLG0pOmN9LG0uaGVpZ2h0PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLG0pOmh9LG0ubWFyZ2k9Cm49M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3Ah PTNEInVuZGVmaW5lZD0KIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNE InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90PQp0b209M0R0eXBlb2YgZS5ib3R0b20h PTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGU9CmZ0 IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsbSk6dH0sbS50aWNrRm9ybWF0PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5jb2xvcj0zRGZ1 bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPQo9M0RlLnV0aWxzLmdldENvbG9y KHQpLG0pOmR9LG19LGUubW9kZWxzLmJ1bGxldENoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiA9 Cm0oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihuLGgpe3ZhciBnPTNEZDMuc2VsZWN0KHRoaXMp LHk9M0QoYXx8cGFyc2VJbnQoZz0KLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmxlZnQtaS5yaWdo dCxiPTNEZi1pLnRvcC1pLmJvdHRvbSx3PTNEdGhpczttLnVwZGF0PQplPTNEZnVuY3Rpb24oKXtt KGUpfSxtLmNvbnRhaW5lcj0zRHRoaXM7aWYoIW58fCFzLmNhbGwodGhpcyxuLGgpKXt2YXIgRT0z RGc9Ci5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtwXSk7cmV0dXJuIEUuZW50ZXIoKS5h cHBlbmQoInRleHQiKS5hdHRyKCJjbD0KYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIs Ii0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksRS5hPQp0dHIoIngiLGkubGVm dCt5LzIpLmF0dHIoInkiLDE4K2kudG9wK2IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0p LG19Zy49CnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciBTPTNEcy5jYWxsKHRo aXMsbixoKS5zbGljZSgpLnNvcnQoZDMuZD0KZXNjZW5kaW5nKSx4PTNEby5jYWxsKHRoaXMsbixo KS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksVD0zRHUuY2FsbCh0aGlzPQosbixoKS5zbGlj ZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksTj0zRGcuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtYnVs bGV0Q2hhcnQ9CiIpLmRhdGEoW25dKSxDPTNETi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnZkMyBudi13cmFwIG52LWJ1bGxldD0KQ2hhcnQiKSxrPTNEQy5hcHBlbmQoImciKSxM PTNETi5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtPQpidWxsZXRX cmFwIiksay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpdGxlcyIpLE4uYXR0cigidHJh bnNmb3JtIiwidHI9CmFuc2xhdGUoIitpLmxlZnQrIiwiK2kudG9wKyIpIik7dmFyIEE9M0RkMy5z Y2FsZS5saW5lYXIoKS5kb21haW4oWzAsTWF0aC5tYT0KeChTWzBdLHhbMF0sVFswXSldKS5yYW5n ZShyP1t5LDBdOlswLHldKSxPPTNEdGhpcy5fX2NoYXJ0X198fGQzLnNjYWxlLmxpbmVhPQpyKCku ZG9tYWluKFswLEluZmluaXR5XSkucmFuZ2UoQS5yYW5nZSgpKTt0aGlzLl9fY2hhcnRfXz0zREE7 dmFyIE09M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBNYXRoLmFicyhPKGUpLU8oMCkpfSxfPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKEEoZSktQSgwKT0KKX0sRD0zRGsuc2VsZWN0KCIubnYt dGl0bGVzIikuYXBwZW5kKCJnIikuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5hdHRyKCJ0PQpy YW5zZm9ybSIsInRyYW5zbGF0ZSgtNiwiKyhmLWkudG9wLWkuYm90dG9tKS8yKyIpIik7RC5hcHBl bmQoInRleHQiKS5hdHRyKCI9CmNsYXNzIiwibnYtdGl0bGUiKS50ZXh0KGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnRpdGxlfSksRC5hcHBlbmQoInRleHQiKS5hdHRyKD0KImNsYXNzIiwibnYtc3VidGl0 bGUiKS5hdHRyKCJkeSIsIjFlbSIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VidGl0bGV9 PQopLHQud2lkdGgoeSkuaGVpZ2h0KGIpO3ZhciBQPTNETC5zZWxlY3QoIi5udi1idWxsZXRXcmFw Iik7ZDMudHJhbnNpdGlvbihQKS49CmNhbGwodCk7dmFyIEg9M0RsfHxBLnRpY2tGb3JtYXQoeS8x MDApLEI9M0RMLnNlbGVjdEFsbCgiZy5udi10aWNrIikuZGF0YShBLj0KdGlja3MoeS81MCksZnVu Y3Rpb24oZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnR8fEgoZSl9KSxqPTNEQi5lbnRlcigpLmFw cGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJudi10aWNrIikuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbihlKXtyZXR1cm4idHJhbnNsYXQ9CmUoIitPKGUpKyIsMCkifSkuc3R5bGUoIm9wYWNpdHki LDFlLTYpO2ouYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLGIpLmF0dHIoIj0KeTIiLGIqNy82KSxq LmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZHkiLCIx ZW0iKS5hPQp0dHIoInkiLGIqNy82KS50ZXh0KEgpO3ZhciBGPTNEZDMudHJhbnNpdGlvbihCKS5h dHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGU9Cil7cmV0dXJuInRyYW5zbGF0ZSgiK0EoZSkrIiww KSJ9KS5zdHlsZSgib3BhY2l0eSIsMSk7Ri5zZWxlY3QoImxpbmUiKS5hdHRyKD0KInkxIixiKS5h dHRyKCJ5MiIsYio3LzYpLEYuc2VsZWN0KCJ0ZXh0IikuYXR0cigieSIsYio3LzYpLGQzLnRyYW5z aXRpb24oQi5lPQp4aXQoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJh bnNsYXRlKCIrQShlKSsiLDApIn0pLnN0eWxlKCI9Cm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLGQu b24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtlLmtleT0zRG4udGl0bGUsYyYmdj0KKGUsdy5w YXJlbnROb2RlKX0pfSksZDMudGltZXIuZmx1c2goKSxtfXZhciB0PTNEZS5tb2RlbHMuYnVsbGV0 KCksbj0zRCJsZWZ0PQoiLHI9M0QhMSxpPTNEe3RvcDo1LHJpZ2h0OjQwLGJvdHRvbToyMCxsZWZ0 OjEyMH0scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnI9CmFuZ2VzfSxvPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUubWFya2Vyc30sdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmVzfT0KLGE9 M0RudWxsLGY9M0Q1NSxsPTNEbnVsbCxjPTNEITAsaD0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0 dXJuIjxoMz4iK3QrIjwvPQpoMz4iKyI8cD4iK24rIjwvcD4ifSxwPTNEIk5vIERhdGEgQXZhaWxh YmxlLiIsZD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyI9CiwidG9vbHRpcEhpZGUiKSx2PTNE ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQucG9zWzBdKyhuLm9mZnNldExlZnR8fDApK2kubGVmdD0K LHM9M0R0LnBvc1sxXSsobi5vZmZzZXRUb3B8fDApK2kudG9wLG89M0RoKHQua2V5LHQubGFiZWws dC52YWx1ZSx0LG0pO2UudG9vPQpsdGlwLnNob3coW3Isc10sbyx0LnZhbHVlPDA/ImUiOiJ3Iixu dWxsLG4pfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE09Cm91c2VvdmVyLnRvb2x0aXAi LGZ1bmN0aW9uKGUpe2QudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 cz0KZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtkLnRvb2x0aXBIaWRlKGUpfSksZC5vbigidG9v bHRpcEhpZGUiLGZ1bmN0aW9uKCl7PQpjJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksbS5kaXNwYXRj aD0zRGQsbS5idWxsZXQ9M0R0LGQzLnJlYmluZChtLHQsImNvbG9yIik9CixtLm9wdGlvbnM9M0Rl LnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5vcmllbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndT0KbWVudHMubGVuZ3RoPyhuPTNEZSxyPTNEbj0zRD0zRCJyaWdodCJ8fG49M0Q9M0QiYm90 dG9tIixtKTpufSxtLnJhbmdlcz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHM9M0RlLG0pOnN9LG0ubWFya2Vycz0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50 cy5sZW5ndGg/KG89M0RlLG0pOm99LG0ubWVhc3VyZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLj0KbGVuZ3RoPyh1PTNEZSxtKTp1fSxtLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLG0pPQo6YX0sbS5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsbSk6Zn0sbS5tYXJnaW49M0Q9CmZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLj0KdG9wOmkudG9wLGkucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OmkucmlnaHQsaS5ib3R0b209Cj0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTppLmJvdHRvbSxpLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0KPTNEInVu ZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCxtKTppfSxtLnRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLnRvb2x0aXBzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9Cj0zRGUsbSk6Y30sbS50b29sdGlwQ29u dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxtKT0KOmh9 LG0ubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLG0p OnB9LG19LGUubW9kZWxzPQouY3VtdWxhdGl2ZUxpbmVDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rp b24gRChiKXtyZXR1cm4gYi5lYWNoKGZ1bmN0aW9uKGIpe2Y9CnVuY3Rpb24gSShlLHQpe2QzLnNl bGVjdChELmNvbnRhaW5lcikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpfWZ1bmN0aW9uID0K cShlLHQpe00ueD0zRGQzLmV2ZW50LngsTS5pPTNETWF0aC5yb3VuZChPLmludmVydChNLngpKSxu dCgpfWZ1bmN0aW9uIFIoZSx0PQope2QzLnNlbGVjdChELmNvbnRhaW5lcikuc3R5bGUoImN1cnNv ciIsImF1dG8iKSx4LmluZGV4PTNETS5pLGsuc3RhdGVDaGFuZ2U9Cih4KX1mdW5jdGlvbiBudCgp e3R0LmRhdGEoW01dKTt2YXIgZT0zREQudHJhbnNpdGlvbkR1cmF0aW9uKCk7RC50cmFuc2l0aW9u RD0KdXJhdGlvbigwKSxELnVwZGF0ZSgpLEQudHJhbnNpdGlvbkR1cmF0aW9uKGUpfXZhciBMPTNE ZDMuc2VsZWN0KHRoaXMpLmNsYXNzPQplZCgibnYtY2hhcnQtIitTLCEwKSxBPTNEdGhpcyxIPTNE KGZ8fHBhcnNlSW50KEwuc3R5bGUoIndpZHRoIikpfHw5NjApLXUubGU9CmZ0LXUucmlnaHQsQj0z RChsfHxwYXJzZUludChMLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b207RC51 cGRhdD0KZT0zRGZ1bmN0aW9uKCl7TC5jYWxsKEQpfSxELmNvbnRhaW5lcj0zRHRoaXMseC5kaXNh YmxlZD0zRGIubWFwKGZ1bmN0aW9uKGUpPQp7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIVQpe3Zh ciBqO1Q9M0R7fTtmb3IoaiBpbiB4KXhbal1pbnN0YW5jZW9mIEFycmF5P1Q9CltqXT0zRHhbal0u c2xpY2UoMCk6VFtqXT0zRHhbal19dmFyIEY9M0RkMy5iZWhhdmlvci5kcmFnKCkub24oImRyYWdz dGFydCIsST0KKS5vbigiZHJhZyIscSkub24oImRyYWdlbmQiLFIpO2lmKCFifHwhYi5sZW5ndGh8 fCFiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1PQpybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgp e3ZhciBVPTNETC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtOXSk7cmU9CnR1cm4gVS5l bnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRy KCJkeSIsIi0uNz0KZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxVLmF0dHIoIngi LHUubGVmdCtILzIpLmF0dHIoInkiLHUudG9wK0IvPQoyKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVy biBlfSksRH1MLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLHc9M0R0Lng9ClNjYWxl KCksRT0zRHQueVNjYWxlKCk7aWYoIXkpe3ZhciB6PTNEYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIWUuZGlzYWJsZT0KZH0pLm1hcChmdW5jdGlvbihlLG4pe3ZhciByPTNEZDMuZXh0ZW50KGUu dmFsdWVzLHQueSgpKTtyZXR1cm4gclswXTwtMC45NSYmPQooclswXT0zRC0wLjk1KSxbKHJbMF0t clsxXSkvKDErclsxXSksKHJbMV0tclswXSkvKDErclswXSldfSksVz0zRFtkMy5taW4oeiw9CmZ1 bmN0aW9uKGUpe3JldHVybiBlWzBdfSksZDMubWF4KHosZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19 KV07dC55RG9tYWluKFcpfT0KZWxzZSB0LnlEb21haW4obnVsbCk7Ty5kb21haW4oWzAsYlswXS52 YWx1ZXMubGVuZ3RoLTFdKS5yYW5nZShbMCxIXSkuY2xhbXAoPQohMCk7dmFyIGI9M0RQKE0uaSxi KSxYPTNEZz8ibm9uZSI6ImFsbCIsVj0zREwuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtY3VtdWw9 CmF0aXZlTGluZSIpLmRhdGEoW2JdKSwkPTNEVi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnZkMyBudi13cmFwID0KbnYtY3VtdWxhdGl2ZUxpbmUiKS5hcHBlbmQoImciKSxKPTNE Vi5zZWxlY3QoImciKTskLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzPQoiLCJudi1pbnRlcmFjdGl2 ZSIpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKS5zdHlsZSgicG9p bnQ9CmVyLWV2ZW50cyIsIm5vbmUiKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBu di1heGlzIiksJC5hcHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnYtYmFja2dyb3VuZCIpLCQu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKS5zPQp0eWxlKCJwb2ludGVy LWV2ZW50cyIsWCksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF2Z0xpbmVzV3JhcCIp LnN0eWw9CmUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi1sZWdlbmRXcmFwIiksJC5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29u dHJvbHNXcmFwIiksYyYmKGkud2lkdGgoSCksSi5zZWxlY3QoIi5udi1sZWdlPQpuZFdyYXAiKS5k YXR1bShiKS5jYWxsKGkpLHUudG9wIT0zRGkuaGVpZ2h0KCkmJih1LnRvcD0zRGkuaGVpZ2h0KCks Qj0zRChsfHw9CnBhcnNlSW50KEwuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRv bSksSi5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiKyAtdS50b3ArIikiKSk7aWYobSl7dmFyIEs9M0Rbe2tleToiUmUtc2NhPQpsZSB5LWF4 aXMiLGRpc2FibGVkOiF5fV07cy53aWR0aCgxNDApLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0 Il0pLnJpZ2h0QWw9CmlnbighMSkubWFyZ2luKHt0b3A6NSxyaWdodDowLGJvdHRvbTo1LGxlZnQ6 MjB9KSxKLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcD0KIikuZGF0dW0oSykuYXR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKDAsIisgLXUudG9wKyIpIikuY2FsbChzKX1WLmF0dHIoInRyPQphbnNm b3JtIiwidHJhbnNsYXRlKCIrdS5sZWZ0KyIsIit1LnRvcCsiKSIpLGQmJkouc2VsZWN0KCIubnYt eS5udi1heGlzIikuYXQ9CnRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitIKyIsMCkiKTt2YXIg UT0zRGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLj0KdGVtcERpc2FibGVkfSk7Vi5zZWxl Y3QoIi50ZW1wRGlzYWJsZWQiKS5yZW1vdmUoKSxRLmxlbmd0aCYmVi5hcHBlbmQoInRleHQiPQop LmF0dHIoImNsYXNzIiwidGVtcERpc2FibGVkIikuYXR0cigieCIsSC8yKS5hdHRyKCJ5IiwiLS43 MWVtIikuc3R5bGUoInRleHQ9Ci1hbmNob3IiLCJlbmQiKS50ZXh0KFEubWFwKGZ1bmN0aW9uKGUp e3JldHVybiBlLmtleX0pLmpvaW4oIiwgIikrIiB2YWx1ZXMgYz0KYW5ub3QgYmUgY2FsY3VsYXRl ZCBmb3IgdGhpcyB0aW1lIHBlcmlvZC4iKSxnJiYoby53aWR0aChIKS5oZWlnaHQoQikubWFyZ2lu PQooe2xlZnQ6dS5sZWZ0LHRvcDp1LnRvcH0pLnN2Z0NvbnRhaW5lcihMKS54U2NhbGUodyksVi5z ZWxlY3QoIi5udi1pbnRlcmFjdGk9CnZlIikuY2FsbChvKSksJC5zZWxlY3QoIi5udi1iYWNrZ3Jv dW5kIikuYXBwZW5kKCJyZWN0IiksSi5zZWxlY3QoIi5udi1iYWNrZz0Kcm91bmQgcmVjdCIpLmF0 dHIoIndpZHRoIixIKS5hdHRyKCJoZWlnaHQiLEIpLHQueShmdW5jdGlvbihlKXtyZXR1cm4gZS5k aXNwPQpsYXkueX0pLndpZHRoKEgpLmhlaWdodChCKS5jb2xvcihiLm1hcChmdW5jdGlvbihlLHQp e3JldHVybiBlLmNvbG9yfHxhKGUsdCk9Cn0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFi W3RdLmRpc2FibGVkJiYhYlt0XS50ZW1wRGlzYWJsZWR9KSk7dmFyIEc9Cj0zREouc2VsZWN0KCIu bnYtbGluZXNXcmFwIikuZGF0dW0oYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJs ZWQmJj0KIWUudGVtcERpc2FibGVkfSkpO0cuY2FsbCh0KSxiLmZvckVhY2goZnVuY3Rpb24oZSx0 KXtlLnNlcmllc0luZGV4PTNEdH0pO3ZhPQpyIFk9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1 cm4hZS5kaXNhYmxlZCYmISFDKGUpfSksWj0zREouc2VsZWN0KCIubnYtYXY9CmdMaW5lc1dyYXAi KS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKFksZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSksZXQ9 M0RmdW5jdD0KaW9uKGUpe3ZhciB0PTNERShDKGUpKTtyZXR1cm4gdDwwPzA6dD5CP0I6dH07Wi5l bnRlcigpLmFwcGVuZCgibGluZSIpLnN0eWxlPQooInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0 cm9rZS1kYXNoYXJyYXkiLCIxMCwxMCIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW89Cm4oZSxuKXty ZXR1cm4gdC5jb2xvcigpKGUsZS5zZXJpZXNJbmRleCl9KS5hdHRyKCJ4MSIsMCkuYXR0cigieDIi LEgpLmF0dHIoIj0KeTEiLGV0KS5hdHRyKCJ5MiIsZXQpLFouc3R5bGUoInN0cm9rZS1vcGFjaXR5 IixmdW5jdGlvbihlKXt2YXIgdD0zREUoQyhlKSk7PQpyZXR1cm4gdDwwfHx0PkI/MDoxfSkuYXR0 cigieDEiLDApLmF0dHIoIngyIixIKS5hdHRyKCJ5MSIsZXQpLmF0dHIoInkyIixldCk9CixaLmV4 aXQoKS5yZW1vdmUoKTt2YXIgdHQ9M0RHLnNlbGVjdEFsbCgiLm52LWluZGV4TGluZSIpLmRhdGEo W01dKTt0dC5lbnRlcj0KKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudi1pbmRleExp bmUiKS5hdHRyKCJ3aWR0aCIsMykuYXR0cigieCIsLTIpPQouYXR0cigiZmlsbCIsInJlZCIpLmF0 dHIoImZpbGwtb3BhY2l0eSIsLjUpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmM9CmFs bChGKSx0dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitP KGUuaSkrIiwwKSJ9KS5hdD0KdHIoImhlaWdodCIsQiksaCYmKG4uc2NhbGUodykudGlja3MoTWF0 aC5taW4oYlswXS52YWx1ZXMubGVuZ3RoLEgvNzApKS50aWNrPQpTaXplKC1CLDApLEouc2VsZWN0 KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitFLnJhbmc9 CmUoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oSi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKSkuY2Fs bChuKSkscCYmKHIuc2NhbGUoRT0KKS50aWNrcyhCLzM2KS50aWNrU2l6ZSgtSCwwKSxkMy50cmFu c2l0aW9uKEouc2VsZWN0KCIubnYteS5udi1heGlzIikpLmNhbGwoPQpyKSksSi5zZWxlY3QoIi5u di1iYWNrZ3JvdW5kIHJlY3QiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7TS54PTNEZDMubW91c2Uo dGg9CmlzKVswXSxNLmk9M0RNYXRoLnJvdW5kKE8uaW52ZXJ0KE0ueCkpLHguaW5kZXg9M0RNLmks ay5zdGF0ZUNoYW5nZSh4KSxudCgpfT0KKSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50Q2xpY2siLGZ1 bmN0aW9uKGUpe00uaT0zRGUucG9pbnRJbmRleCxNLng9M0RPKE0uaSksPQp4LmluZGV4PTNETS5p LGsuc3RhdGVDaGFuZ2UoeCksbnQoKX0pLHMuZGlzcGF0Y2gub24oImxlZ2VuZENsaWNrIixmdW5j dGlvbig9CmUsdCl7ZS5kaXNhYmxlZD0zRCFlLmRpc2FibGVkLHk9M0QhZS5kaXNhYmxlZCx4LnJl c2NhbGVZPTNEeSxrLnN0YXRlQ2hhbmdlKD0KeCksRC51cGRhdGUoKX0pLGkuZGlzcGF0Y2gub24o InN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXt4LmRpc2FibGVkPTNEZS5kaXNhPQpibGVkLGsuc3Rh dGVDaGFuZ2UoeCksRC51cGRhdGUoKX0pLG8uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW1vdmUi LGZ1bmN0aW89Cm4oaSl7dC5jbGVhckhpZ2hsaWdodHMoKTt2YXIgcyxmLGwsYz0zRFtdO2IuZmls dGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucz0KZXJpZXNJbmRleD0zRHQsIWUuZGlzYWJsZWR9 KS5mb3JFYWNoKGZ1bmN0aW9uKG4scil7Zj0zRGUuaW50ZXJhY3RpdmVCaXNlY3QoPQpuLnZhbHVl cyxpLnBvaW50WFZhbHVlLEQueCgpKSx0LmhpZ2hsaWdodFBvaW50KHIsZiwhMCk7dmFyIG89M0Ru LnZhbHVlc1tmXTs9CmlmKHR5cGVvZiBvPTNEPTNEInVuZGVmaW5lZCIpcmV0dXJuO3R5cGVvZiBz PTNEPTNEInVuZGVmaW5lZCImJihzPTNEbyksdHlwZT0Kb2YgbD0zRD0zRCJ1bmRlZmluZWQiJiYo bD0zREQueFNjYWxlKCkoRC54KCkobyxmKSkpLGMucHVzaCh7a2V5Om4ua2V5LHZhbHVlPQo6RC55 KCkobyxmKSxjb2xvcjphKG4sbi5zZXJpZXNJbmRleCl9KX0pO2lmKGMubGVuZ3RoPjIpe3ZhciBo PTNERC55U2NhbGUoKS49CmludmVydChpLm1vdXNlWSkscD0zRE1hdGguYWJzKEQueVNjYWxlKCku ZG9tYWluKClbMF0tRC55U2NhbGUoKS5kb21haW4oKVsxXT0KKSxkPTNELjAzKnAsbT0zRGUubmVh cmVzdFZhbHVlSW5kZXgoYy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSxoLGQpPQo7 bSE9M0Q9M0RudWxsJiYoY1ttXS5oaWdobGlnaHQ9M0QhMCl9dmFyIGc9M0RuLnRpY2tGb3JtYXQo KShELngoKShzLGYpLGYpO289Ci50b29sdGlwLnBvc2l0aW9uKHtsZWZ0OmwrdS5sZWZ0LHRvcDpp Lm1vdXNlWSt1LnRvcH0pLmNoYXJ0Q29udGFpbmVyKEEucGFyZT0KbnROb2RlKS5lbmFibGVkKHYp LnZhbHVlRm9ybWF0dGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIudGlja0Zvcm1hdCgpKGUpfSku PQpkYXRhKHt2YWx1ZTpnLHNlcmllczpjfSkoKSxvLnJlbmRlckd1aWRlTGluZShsKX0pLG8uZGlz cGF0Y2gub24oImVsZW1lbnRNb3U9CnNlb3V0IixmdW5jdGlvbihlKXtrLnRvb2x0aXBIaWRlKCks dC5jbGVhckhpZ2hsaWdodHMoKX0pLGsub24oInRvb2x0aXBTaG93Ij0KLGZ1bmN0aW9uKGUpe3Ym Jl8oZSxBLnBhcmVudE5vZGUpfSksay5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKGUpe3R5cGVv ZiBlPQouZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihiLmZvckVhY2goZnVuY3Rpb24odCxuKXt0 LmRpc2FibGVkPTNEZS5kaXNhYmxlZFs9Cm5dfSkseC5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpLHR5 cGVvZiBlLmluZGV4IT0zRCJ1bmRlZmluZWQiJiYoTS5pPTNEZS5pbmRleD0KLE0ueD0zRE8oTS5p KSx4LmluZGV4PTNEZS5pbmRleCx0dC5kYXRhKFtNXSkpLHR5cGVvZiBlLnJlc2NhbGVZIT0zRCJ1 bmRlZmluPQplZCImJih5PTNEZS5yZXNjYWxlWSksRC51cGRhdGUoKX0pfSksRH1mdW5jdGlvbiBQ KGUsbil7cmV0dXJuIG4ubWFwKGZ1bmN0aW89Cm4obixyKXtpZighbi52YWx1ZXMpcmV0dXJuIG47 dmFyIGk9M0RuLnZhbHVlc1tlXTtpZihpPTNEPTNEbnVsbClyZXR1cm4gbjt2YT0KciBzPTNEdC55 KCkoaSxlKTtyZXR1cm4gczwtMC45NSYmIUE/KG4udGVtcERpc2FibGVkPTNEITAsbik6KG4udGVt cERpc2FibGVkPQo9M0QhMSxuLnZhbHVlcz0zRG4udmFsdWVzLm1hcChmdW5jdGlvbihlLG4pe3Jl dHVybiBlLmRpc3BsYXk9M0R7eToodC55KCkoZSw9Cm4pLXMpLygxK3MpfSxlfSksbil9KX12YXIg dD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZD0KZWxzLmF4 aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRGUubW9kZWxzLmxlZ2VuZCgpLG89M0RlLmlu dGVyYWN0aXZlR3VpPQpkZWxpbmUoKSx1PTNEe3RvcDozMCxyaWdodDozMCxib3R0b206NTAsbGVm dDo2MH0sYT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCk9CixmPTNEbnVsbCxsPTNEbnVsbCxjPTNE ITAsaD0zRCEwLHA9M0QhMCxkPTNEITEsdj0zRCEwLG09M0QhMCxnPTNEITEseT0zRCEwLD0KYj0z RGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQg Iit0KyI8L3A+In0sdyxFPQosUz0zRHQuaWQoKSx4PTNEe2luZGV4OjAscmVzY2FsZVk6eX0sVD0z RG51bGwsTj0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLEM9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBl LmF2ZXJhZ2V9LGs9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsIj0K c3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEw9M0QwLEE9M0QhMTtuLm9yaWVudCgiYm90dG9t IikudGlja1BhZGRpbmcoNyksPQpyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKSxzLnVwZGF0ZVN0 YXRlKCExKTt2YXIgTz0zRGQzLnNjYWxlLmxpbmVhcigpLE09M0Q9CntpOjAseDowfSxfPTNEZnVu Y3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sx XT0KKyhzLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5w b2ludEluZGV4KSksZj0zRHIudGljPQprRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5k ZXgpKSxsPTNEYihpLnNlcmllcy5rZXksYSxmLGksRCk7ZS50b29sdGk9CnAuc2hvdyhbbyx1XSxs LG51bGwsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcD0KIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt1LmxlZnQsZS5wb3NbMV0rdS50 b3BdLGsudG9vbHRpcFNob3coZSl9KSx0PQouZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50 b29sdGlwIixmdW5jdGlvbihlKXtrLnRvb2x0aXBIaWRlKGUpfSksay5vbig9CiJ0b29sdGlwSGlk ZSIsZnVuY3Rpb24oKXt2JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksRC5kaXNwYXRjaD0zRGssRC5s aW5lcz0zRD0KdCxELmxlZ2VuZD0zRGksRC54QXhpcz0zRG4sRC55QXhpcz0zRHIsRC5pbnRlcmFj dGl2ZUxheWVyPTNEbyxkMy5yZWJpbmQoRCx0PQosImRlZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIs InhTY2FsZSIsInlTY2FsZSIsInNpemUiLCJ4RG9tYWluIiwieURvbWFpbiIsIng9ClJhbmdlIiwi eVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaW50ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNsaXBW b3Jvbm9pIiwidT0Kc2VWb3Jvbm9pIiwiaWQiKSxELm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNG dW5jLmJpbmQoRCksRC5tYXJnaW49M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh1LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp1LnQ9Cm9wLHUu cmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnUucmlnaHQsdS5i b3R0b209M0R0eXBlbz0KZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp1LmJvdHRv bSx1LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlPQpmaW5lZCI/ZS5sZWZ0OnUubGVmdCxE KTp1fSxELndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9Cj0z RGUsRCk6Zn0sRC5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bD0zRGUsRCk6bH0sRC5jbz0KbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoPQphKSxEKTphfSxELnJlc2NhbGVZ PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEQpOnl9LEQuc2g9 Cm93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUs RCk6bX0sRC51c2VJbnRlcmFjdD0KaXZlR3VpZGVsaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGc9M0RlLGU9M0Q9M0Q9M0QhMCYmKEQuPQppbnRlcmFjdGl2ZSghMSks RC51c2VWb3Jvbm9pKCExKSksRCk6Z30sRC5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGE9CnJndW1lbnRzLmxlbmd0aD8oYz0zRGUsRCk6Y30sRC5zaG93WEF4aXM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhoPTNEZSxEKTpofSxELnNob3dZQXhpcz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxEPQopOnB9LEQucmlnaHRB bGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHIu b3JpZW49CnQoZT8icmlnaHQiOiJsZWZ0IiksRCk6ZH0sRC50b29sdGlwcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKHY9M0RlLEQpOnZ9LEQudG9vbHRpcENvbnRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsPQpEKTpifSxELnN0 YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEQpOnh9LEQu ZGVmYXVsdFM9CnRhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0z RGUsRCk6VH0sRC5ub0RhdGE9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhOPTNEZSxEKTpOfSxELmF2ZXJhZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMu bGVuZ3RoPyhDPTNEZSxEKTpDfSxELnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KEw9M0RlLEQpOkx9LEQubm9FcnJvckNoZWNrPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8oQT0zRGUsRCk6QX0sRH0sZS5tb2Rl bHMuZGlzY3JldGVCYXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGUuPQplYWNo KGZ1bmN0aW9uKGUpe3ZhciBpPTNEbi10LmxlZnQtdC5yaWdodCxFPTNEci10LnRvcC10LmJvdHRv bSxTPTNEZDMuc2VsZWM9CnQodGhpcyk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52YWx1ZXMu Zm9yRWFjaChmdW5jdGlvbihlKXtlLnNlcmllcz0zRHR9KT0KfSk7dmFyIFQ9M0RwJiZkP1tdOmUu bWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1PQpy bnt4OnUoZSx0KSx5OmEoZSx0KSx5MDplLnkwfX0pfSk7cy5kb21haW4ocHx8ZDMubWVyZ2UoVCku bWFwKGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGUueH0pKS5yYW5nZUJhbmRzKHZ8fFswLGldLC4xKSxv LmRvbWFpbihkfHxkMy5leHRlbnQoZDMubWVyZ2UoVCkubWFwKD0KZnVuY3Rpb24oZSl7cmV0dXJu IGUueX0pLmNvbmNhdChmKSkpLGM/by5yYW5nZShtfHxbRS0oby5kb21haW4oKVswXTwwPzEyOjAp PQosby5kb21haW4oKVsxXT4wPzEyOjBdKTpvLnJhbmdlKG18fFtFLDBdKSxiPTNEYnx8cyx3PTNE d3x8by5jb3B5KCkucmFuZ2UoW289CigwKSxvKDApXSk7dmFyIE49M0RTLnNlbGVjdEFsbCgiZy5u di13cmFwLm52LWRpc2NyZXRlYmFyIikuZGF0YShbZV0pLEM9M0ROLj0KZW50ZXIoKS5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1kaXNjcmV0ZWJhciIpLGs9M0RDLmFw cGVuPQpkKCJnIiksTD0zRE4uc2VsZWN0KCJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LWdyb3VwcyIpLE4uYXR0cigidHI9CmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwi K3QudG9wKyIpIik7dmFyIEE9M0ROLnNlbGVjdCgiLm52LWdyb3VwcyIpLj0Kc2VsZWN0QWxsKCIu bnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1cm4g ZS5rZXl9PQopO0EuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFl LTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDE9CmUtNiksQS5leGl0KCkuc3R5bGUoInN0cm9rZS1v cGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KS5yZW1vdj0KZSgpLEEuYXR0 cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcmllcy0iK3R9KS5j bGFzc2VkKCJoPQpvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLEEuc3R5bGUoInN0 cm9rZS1vcGFjaXR5IiwxKS5zdHlsZSgiZmlsbC09Cm9wYWNpdHkiLC43NSk7dmFyIE89M0RBLnNl bGVjdEFsbCgiZy5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbD0KdWVzfSk7 Ty5leGl0KCkucmVtb3ZlKCk7dmFyIE09M0RPLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigidHJh bnNmb3JtIixmdW5jPQp0aW9uKGUsdCxuKXtyZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKStz LnJhbmdlQmFuZCgpKi4wNSkrIiwgIitvKDApKyIpIn09Cikub24oIm1vdXNlb3ZlciIsZnVuY3Rp b24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxnLmVsZW1lbj0KdE1v dXNlb3Zlcih7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1 KHQsbikpK3MucmFuZ2VCPQphbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0s cG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU9CjpkMy5ldmVudH0pfSkub24oIm1v dXNlb3V0IixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsIT0K MSksZy5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2Vy aWVzXSxwb2ludEluZGV4Om4sPQpzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5v bigiY2xpY2siLGZ1bmN0aW9uKHQsbil7Zy5lbGVtZW50Q2xpY2s9Cih7dmFsdWU6YSh0LG4pLHBv aW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHQu cz0KZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4 OnQuc2VyaWVzLGU6ZDMuZXZlbnR9PQopLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24o ImRibGNsaWNrIixmdW5jdGlvbih0LG4pe2cuZWxlbWVudERibENsaWM9Cmsoe3ZhbHVlOmEodCxu KSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgp Kih0Lj0Kc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSldLHBvaW50SW5kZXg6bixzZXJpZXNJ bmRleDp0LnNlcmllcyxlOmQzLmV2ZW50PQp9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p O00uYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWQ9CnRoIixzLnJhbmdl QmFuZCgpKi45L2UubGVuZ3RoKSxjPyhNLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9y IiwibWlkZD0KbGUiKSxPLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oZSx0KXtyZXR1cm4g aChhKGUsdCkpfSkuYXR0cigieCIscy5yYW5nPQplQmFuZCgpKi45LzIpLmF0dHIoInkiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwP28oYShlLHQpKS1vKDApKzEyOi00fSk9Cik6Ty5zZWxl Y3RBbGwoInRleHQiKS5yZW1vdmUoKSxPLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVy biBhKGUsdCk8MD0KPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpdmUifSkuc3R5bGUo ImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuPQpjb2xvcnx8bChlLHQpfSkuc3R5bGUoInN0 cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8bChlLHQpfSkuc2VsZWM9CnQoInJl Y3QiKS5hdHRyKCJjbGFzcyIseSkuYXR0cigid2lkdGgiLHMucmFuZ2VCYW5kKCkqLjkvZS5sZW5n dGgpLE8uYXR0cigidD0KcmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RzKHUoZSx0KSkr cy5yYW5nZUJhbmQoKSouMDUscj0zRGEoZSx0KTwwP28oPQowKTpvKDApLW8oYShlLHQpKTwxP28o MCktMTpvKGEoZSx0KSk7cmV0dXJuInRyYW5zbGF0ZSgiK24rIiwgIityKyIpIn0pLnNlbGU9CmN0 KCJyZWN0IikuYXR0cigiaGVpZ2h0IixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRo LmFicyhvKGEoZSx0KSktbz0KKGQmJmRbMF18fDApKXx8MSl9KSxiPTNEcy5jb3B5KCksdz0zRG8u Y29weSgpfSksRX12YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvPQp0dG9tOjAsbGVmdDowfSxuPTNE OTYwLHI9M0Q1MDAsaT0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2E9 CmxlLm9yZGluYWwoKSxvPTNEZDMuc2NhbGUubGluZWFyKCksdT0zRGZ1bmN0aW9uKGUpe3JldHVy biBlLnh9LGE9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBlLnl9LGY9M0RbMF0sbD0zRGUudXRpbHMu ZGVmYXVsdENvbG9yKCksYz0zRCExLGg9M0RkMy5mb3JtYXQoIiwuPQoyZiIpLHAsZCx2LG0sZz0z RGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNr Iiw9CiJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IikseT0zRCJkaXNjcmV0ZUJh ciIsYix3O3JldHVybiBFLmRpc3BhdD0KY2g9M0RnLEUub3B0aW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYmluZChFKSxFLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3Ro Pyh1PTNEZSxFKTp1fSxFLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o YT0zRGU9CixFKTphfSxFLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcD0KIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQu cmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0PQo6dC5yaWdodCx0 LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRv bSx0LmxlZnQ9Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxF KTp0fSxFLndpZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0z RGUsRSk6bn0sRS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3Ro PyhyPTNEZSxFKTpyfSxFLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZSw9CkUpOnN9LEUueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG89M0RlLEUpOm99LEUueERvbWFpbj0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLEUpOnB9LEUueURvbWFpbj0zRGZ1bmN0aW9uKGUpPQp7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEUpOmR9LEUueFJhbmdlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8odj0zRGUsRSk6dn0sRS55UmFuZ2U9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRD0KZSxFKTptfSxFLmZvcmNlWT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxFKTpmfSxFLmNvbG9yPQo9 M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUudXRpbHMuZ2V0Q29s b3IodCksRSk6bH0sRS5pZD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLEUpOml9LEUuc2hvd1ZhbHVlcz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGM9M0RlLEUpOmN9LEUudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm49 CiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxFKTpofSxFLnJlY3RDbGFzcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KHk9M0RlLEUpOnl9LEV9LGUubW9kZWxzLmRpc2Ny ZXRlQmFyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHcoZSl7PQpyZXR1cm4gZS5lYWNoKGZ1 bmN0aW9uKGUpe3ZhciB1PTNEZDMuc2VsZWN0KHRoaXMpLHA9M0R0aGlzLHk9M0Qoc3x8cGFyc2VJ bnQ9Cih1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmxlZnQtaS5yaWdodCxFPTNEKG98fHBhcnNl SW50KHUuc3R5bGUoImhlaWdodCIpKT0KfHw0MDApLWkudG9wLWkuYm90dG9tO3cudXBkYXRlPTNE ZnVuY3Rpb24oKXtnLmJlZm9yZVVwZGF0ZSgpLHUuY2FsbCh3KX0sdy5jPQpvbnRhaW5lcj0zRHRo aXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVl cy5sZW49Cmd0aH0pLmxlbmd0aCl7dmFyIFM9M0R1LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRh dGEoW21dKTtyZXR1cm4gUy5lbnRlcigpLj0KYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJu dmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4PQp0LWFuY2hvciIs Im1pZGRsZSIpLFMuYXR0cigieCIsaS5sZWZ0K3kvMikuYXR0cigieSIsaS50b3ArRS8yKS50ZXh0 KGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGV9KSx3fXUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVt b3ZlKCksZD0zRHQueFNjYWxlKCksdj0zRHQueT0KU2NhbGUoKS5jbGFtcCghMCk7dmFyIFQ9M0R1 LnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWRpc2NyZXRlQmFyV2l0aEF4ZXMiKS5kPQphdGEoW2Vd KSxOPTNEVC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52 LWRpc2NyZXRlQmE9CnJXaXRoQXhlcyIpLmFwcGVuZCgiZyIpLEM9M0ROLmFwcGVuZCgiZGVmcyIp LGs9M0RULnNlbGVjdCgiZyIpO04uYXBwZW5kKCJnIj0KKS5hdHRyKCJjbGFzcyIsIm52LXggbnYt YXhpcyIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKS5hPQpwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtemVyb0xpbmUiKS5hcHBlbmQoImxpbmUiKSxOLmFwcGVu ZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudi1iYXJzV3JhcCIpLGsuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKCIraS5sZWZ0KyIsIitpLnRvcCsiKSIpLD0KbCYmay5zZWxlY3QoIi5udi15Lm52 LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5KyIsMCkiKSx0LndpZHRoPQoo eSkuaGVpZ2h0KEUpO3ZhciBMPTNEay5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHVtKGUuZmls dGVyKGZ1bmN0aW9uKGUpe3I9CmV0dXJuIWUuZGlzYWJsZWR9KSk7TC5jYWxsKHQpLEMuYXBwZW5k KCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYteC1sYWJlbC1jbD0KaXAtIit0LmlkKCkpLmFwcGVu ZCgicmVjdCIpLGsuc2VsZWN0KCIjbnYteC1sYWJlbC1jbGlwLSIrdC5pZCgpKyIgcmVjdCIpLmF0 PQp0cigid2lkdGgiLGQucmFuZ2VCYW5kKCkqKGM/MjoxKSkuYXR0cigiaGVpZ2h0IiwxNikuYXR0 cigieCIsLWQucmFuZ2VCYW5kKCk9Ci8oYz8xOjIpKTtpZihhKXtuLnNjYWxlKGQpLnRpY2tzKHkv MTAwKS50aWNrU2l6ZSgtRSwwKSxrLnNlbGVjdCgiLm52LXgubnYtYT0KeGlzIikuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKDAsIisodi5yYW5nZSgpWzBdKyh0LnNob3dWYWx1ZXMoKSYmdi5k b21hPQppbigpWzBdPDA/MTY6MCkpKyIpIiksay5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxs KG4pO3ZhciBBPTNEay5zZWxlY3QoIi49Cm52LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZyIpO2Mm JkEuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixmdW5jdD0KaW9uKGUsdCxuKXty ZXR1cm4idHJhbnNsYXRlKDAsIisobiUyPTNEPTNEMD8iNSI6IjE3IikrIikifSl9ZiYmKHIuc2Nh bGUodikuPQp0aWNrcyhFLzM2KS50aWNrU2l6ZSgteSwwKSxrLnNlbGVjdCgiLm52LXkubnYtYXhp cyIpLmNhbGwocikpLGsuc2VsZWN0KCIubnY9Ci16ZXJvTGluZSBsaW5lIikuYXR0cigieDEiLDAp LmF0dHIoIngyIix5KS5hdHRyKCJ5MSIsdigwKSkuYXR0cigieTIiLHYoMCkpLD0KZy5vbigidG9v bHRpcFNob3ciLGZ1bmN0aW9uKGUpe2gmJmIoZSxwLnBhcmVudE5vZGUpfSl9KSx3fXZhciB0PTNE ZS5tb2RlbHMuPQpkaXNjcmV0ZUJhcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxz LmF4aXMoKSxpPTNEe3RvcDoxNSxyaWdodDoxMCw9CmJvdHRvbTo1MCxsZWZ0OjYwfSxzPTNEbnVs bCxvPTNEbnVsbCx1PTNEZS51dGlscy5nZXRDb2xvcigpLGE9M0QhMCxmPTNEITAsbD0KPTNEITEs Yz0zRCExLGg9M0QhMCxwPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrdCsiPC9o Mz4iKyI8cD4iK24rPQoiPC9wPiJ9LGQsdixtPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsZz0zRGQz LmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXA9CkhpZGUiLCJiZWZvcmVVcGRhdGUiKSx5 PTNEMDtuLm9yaWVudCgiYm90dG9tIikuaGlnaGxpZ2h0WmVybyghMSkuc2hvd01heE1pbj0KKCEx KS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksci5vcmllbnQobD8icmlnaHQiOiJs ZWZ0IikudGlja0Zvcm1hPQp0KGQzLmZvcm1hdCgiLC4xZiIpKTt2YXIgYj0zRGZ1bmN0aW9uKGks cyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHw9CjApLHU9M0RpLnBvc1sxXSsocy5v ZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbj0K ZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0z RHAoaS5zZXJpZXMua2V5LGEsPQpmLGksdyk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVl PDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC49Cm9uKCJlbGVtZW50TW91c2Vv dmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK2kubGVmdCxlLnBvc1sx XT0KK2kudG9wXSxnLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNl b3V0LnRvb2x0aXAiLGZ1bmN0aW9uPQooZSl7Zy50b29sdGlwSGlkZShlKX0pLGcub24oInRvb2x0 aXBIaWRlIixmdW5jdGlvbigpe2gmJmUudG9vbHRpcC5jbGVhbnVwKCk9Cn0pLHcuZGlzcGF0Y2g9 M0RnLHcuZGlzY3JldGViYXI9M0R0LHcueEF4aXM9M0RuLHcueUF4aXM9M0RyLGQzLnJlYmluZCh3 LHQsIj0KeCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNl WCIsImZvcmNlWSIsImlkIiwic2hvd1ZhPQpsdWVzIiwidmFsdWVGb3JtYXQiKSx3Lm9wdGlvbnM9 M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodyksdy5tYXJnaW49M0RmdW49CmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVk Ij9lLnRvcD0KOmkudG9wLGkucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9l LnJpZ2h0OmkucmlnaHQsaS5ib3R0b209M0R0PQp5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVk Ij9lLmJvdHRvbTppLmJvdHRvbSxpLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCI9CnVuZGVmaW5l ZCI/ZS5sZWZ0OmkubGVmdCx3KTppfSx3LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndD0KaD8ocz0zRGUsdyk6c30sdy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdyk6b30sPQp3LmNvbG9yPTNEZnVuY3Rpb24obil7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLnV0aWxzLmdldENvbG9yKG4pLHQuY289Cmxvcih1 KSx3KTp1fSx3LnNob3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhhPTNEZSx3KTphfT0KLHcuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLHcpOmZ9LHcucmlnaHRBbGlnPQpuWUF4aXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWY9CnQi KSx3KTpsfSx3LnN0YWdnZXJMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYz0zRGUsdyk6Yz0KfSx3LnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGg9M0RlLHcpOmh9LHcudG9vbHRpcENvPQpudGVudD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSx3KTpwfSx3Lm5vRGF0YT0zRGZ1bmN0aW89 Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLHcpOm19LHcudHJhbnNpdGlvbkR1 cmF0aW9uPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsdyk6 eX0sd30sZS5tb2RlbHMuZGlzdHJpYnV0aW9uPTNEZnVuY3Rpb24oPQope2Z1bmN0aW9uIGwoZSl7 cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgYT0zRG4tKGk9M0Q9M0Q9M0QieCI/dC5sZWZ0 K3Q9Ci5yaWdodDp0LnRvcCt0LmJvdHRvbSksbD0zRGk9M0Q9M0QieCI/InkiOiJ4IixjPTNEZDMu c2VsZWN0KHRoaXMpO2Y9M0RmfHx1Oz0KdmFyIGg9M0RjLnNlbGVjdEFsbCgiZy5udi1kaXN0cmli dXRpb24iKS5kYXRhKFtlXSkscD0zRGguZW50ZXIoKS5hcHBlbmQoImciPQopLmF0dHIoImNsYXNz IiwibnZkMyBudi1kaXN0cmlidXRpb24iKSxkPTNEcC5hcHBlbmQoImciKSx2PTNEaC5zZWxlY3Qo ImciKTs9CmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsi KSIpO3ZhciBtPTNEdi5zZWxlY3RBbGwoIj0KZy5udi1kaXN0IikuZGF0YShmdW5jdGlvbihlKXty ZXR1cm4gZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7bS5lbnRlcigpPQouYXBwZW5kKCJn IiksbS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZGlzdCBudi1zZXJpZXMt Iit0fSkuc3Q9CnlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCl9KTt2YXIg Zz0zRG0uc2VsZWN0QWxsKCJsaW5lLm52LWRpcz0KdCIraSkuZGF0YShmdW5jdGlvbihlKXtyZXR1 cm4gZS52YWx1ZXN9KTtnLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cihpKyIxPQoiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGYocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4gZihzKGUsdCk9Cil9KSxtLmV4aXQoKS5zZWxlY3RBbGwoImxpbmUubnYtZGlzdCIraSkuYXR0 cihpKyIxIixmdW5jdGlvbihlLHQpe3JldHVybiB1KD0KcyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5PQoiLDAp LnJlbW92ZSgpLGcuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWRpc3QiK2kr IiBudi1kaXN0IitpKyI9Ci0iK3R9KS5hdHRyKGwrIjEiLDApLmF0dHIobCsiMiIsciksZy5hdHRy KGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLD0KdCkpfSkuYXR0cihpKyIyIixmdW5j dGlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KSxmPTNEdS5jb3B5KCl9KSxsfXZhciB0PTNEPQp7 dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q0MDAscj0zRDgsaT0zRCJ4IixzPTNE ZnVuY3Rpb24oZSl7cmV0dXI9Cm4gZVtpXX0sbz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksdT0z RGQzLnNjYWxlLmxpbmVhcigpLGEsZjtyZXR1cm4gbC5vcHRpbz0KbnM9M0RlLnV0aWxzLm9wdGlv bnNGdW5jLmJpbmQobCksbC5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl PQpuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0 LnJpZ2h0PTNEdHlwZW9mIGUucmk9CmdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQs dC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZD0KIj9lLmJvdHRvbTp0LmJv dHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQs bCk6PQp0fSxsLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49 M0RlLGwpOm59LGwuYXhpcz0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLGwpOml9LGwuc2l6ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5n dGg/KHI9M0RlLGwpOnJ9LGwuZ2V0RGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPQo/KHM9M0RkMy5mdW5jdG9yKGUpLGwpOnN9LGwuc2NhbGU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0KPTNEZSxsKTp1fSxsLmNvbG9yPTNEZnVuY3Rpb24o dCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLnV0aWxzLmdldENvPQpsb3IodCksbCk6 b30sbH0sZS5tb2RlbHMuaGlzdG9yaWNhbEJhckNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiB4 KGUpe3JldHU9CnJuIGUuZWFjaChmdW5jdGlvbihkKXt2YXIgRT0zRGQzLnNlbGVjdCh0aGlzKSxU PTNEdGhpcyxOPTNEKHV8fHBhcnNlSW50KEUucz0KdHlsZSgid2lkdGgiKSl8fDk2MCktcy5sZWZ0 LXMucmlnaHQsQz0zRChhfHxwYXJzZUludChFLnN0eWxlKCJoZWlnaHQiKSl8fDQwPQowKS1zLnRv cC1zLmJvdHRvbTt4LnVwZGF0ZT0zRGZ1bmN0aW9uKCl7RS5jYWxsKHgpfSx4LmNvbnRhaW5lcj0z RHRoaXMsZy5kaXM9CmFibGVkPTNEZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVk fSk7aWYoIXkpe3ZhciBrO3k9M0R7fTtmb3IoayBpbj0KIGcpZ1trXWluc3RhbmNlb2YgQXJyYXk/ eVtrXT0zRGdba10uc2xpY2UoMCk6eVtrXT0zRGdba119aWYoIWR8fCFkLmxlbmd0aHx8PQohZC5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEw9 M0RFLnNlbGVjdEFsbCg9CiIubnYtbm9EYXRhIikuZGF0YShbYl0pO3JldHVybiBMLmVudGVyKCku YXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzID0KbnYtbm9EYXRhIikuYXR0cigiZHki LCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEwuYXR0cigieCIscy5sPQpl ZnQrTi8yKS5hdHRyKCJ5IixzLnRvcCtDLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx4 fUUuc2VsZWN0QWxsKCIubnY9Ci1ub0RhdGEiKS5yZW1vdmUoKSx2PTNEdC54U2NhbGUoKSxtPTNE dC55U2NhbGUoKTt2YXIgQT0zREUuc2VsZWN0QWxsKCJnLm52LT0Kd3JhcC5udi1oaXN0b3JpY2Fs QmFyQ2hhcnQiKS5kYXRhKFtkXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz PQpzIiwibnZkMyBudi13cmFwIG52LWhpc3RvcmljYWxCYXJDaGFydCIpLmFwcGVuZCgiZyIpLE09 M0RBLnNlbGVjdCgiZyIpO08uYXA9CnBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhp cyIpLE8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LT0KYXhpcyIpLE8uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLE8uYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiPQosIm52LWxlZ2VuZFdyYXAiKSxmJiYoaS53aWR0aChOKSxNLnNlbGVjdCgiLm52LWxlZ2Vu ZFdyYXAiKS5kYXR1bShkKS5jYWxsKGk9Cikscy50b3AhPTNEaS5oZWlnaHQoKSYmKHMudG9wPTNE aS5oZWlnaHQoKSxDPTNEKGF8fHBhcnNlSW50KEUuc3R5bGUoImhlaWdodD0KIikpfHw0MDApLXMu dG9wLXMuYm90dG9tKSxBLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuPQpzbGF0ZSgwLCIrIC1zLnRvcCsiKSIpKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK3MubGVmdCsiLCIrcy50b3ArIik9CiIpLGgmJk0uc2VsZWN0KCIubnYteS5udi1heGlz IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTisiLDApIiksdC53aT0KZHRoKE4pLmhl aWdodChDKS5jb2xvcihkLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxvKGUsdCl9 KS5maWx0ZXIoPQpmdW5jdGlvbihlLHQpe3JldHVybiFkW3RdLmRpc2FibGVkfSkpO3ZhciBfPTNE TS5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHU9Cm0oZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIWUuZGlzYWJsZWR9KSk7Xy5jYWxsKHQpLGwmJihuLnNjYWxlKHYpLnRpY2tTaT0KemUoLUMs MCksTS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo MCwiK20ucmFuZ2UoPQopWzBdKyIpIiksTS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4p KSxjJiYoci5zY2FsZShtKS50aWNrcyhDLzM2KS50aWM9CmtTaXplKC1OLDApLE0uc2VsZWN0KCIu bnYteS5udi1heGlzIikuY2FsbChyKSksaS5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLD0KZnVu Y3Rpb24odCxuKXt0LmRpc2FibGVkPTNEIXQuZGlzYWJsZWQsZC5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsPQplZH0pLmxlbmd0aHx8ZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUu ZGlzYWJsZWQ9M0QhMSxBLnNlbGVjdEFsbCgiLm52LXNlcmk9CmVzIikuY2xhc3NlZCgiZGlzYWJs ZWQiLCExKSxlfSksZy5kaXNhYmxlZD0zRGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaT0K c2FibGVkfSksdy5zdGF0ZUNoYW5nZShnKSxlLmNhbGwoeCl9KSxpLmRpc3BhdGNoLm9uKCJsZWdl bmREYmxjbGljayIsZnVuY3RpPQpvbihlKXtkLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxl ZD0zRCEwfSksZS5kaXNhYmxlZD0zRCExLGcuZGlzYWJsZWQ9M0Q9CmQubWFwKGZ1bmN0aW9uKGUp e3JldHVybiEhZS5kaXNhYmxlZH0pLHcuc3RhdGVDaGFuZ2UoZykseC51cGRhdGUoKX0pLHcub24o Ij0KdG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3AmJlMoZSxULnBhcmVudE5vZGUpfSksdy5vbigi Y2hhbmdlU3RhdGUiLGZ1bmN0aW9uPQooZSl7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5l ZCImJihkLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPQo9M0RlLmRpc2FibGVkW25d fSksZy5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpLHgudXBkYXRlKCl9KX0pLHh9dmFyIHQ9M0RlLm1v ZGU9CmxzLmhpc3RvcmljYWxCYXIoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5h eGlzKCksaT0zRGUubW9kZWxzLmxlZz0KZW5kKCkscz0zRHt0b3A6MzAscmlnaHQ6OTAsYm90dG9t OjUwLGxlZnQ6OTB9LG89M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHU9Cj0zRG51bGwsYT0zRG51 bGwsZj0zRCExLGw9M0QhMCxjPTNEITAsaD0zRCExLHA9M0QhMCxkPTNEZnVuY3Rpb24oZSx0LG4s cixpKT0Ke3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LHYs bSxnPTNEe30seT0zRG51bGwsYj0zRCJOPQpvIERhdGEgQXZhaWxhYmxlLiIsdz0zRGQzLmRpc3Bh dGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2U9CiIsImNoYW5nZVN0 YXRlIiksRT0zRDA7bi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW50KGg/ InJpZ2h0Ij0KOiJsZWZ0Iik7dmFyIFM9M0RmdW5jdGlvbihpLHMpe2lmKHMpe3ZhciBvPTNEZDMu c2VsZWN0KHMpLnNlbGVjdCgic3ZnIiksdT0KPTNEby5ub2RlKCk/by5hdHRyKCJ2aWV3Qm94Iik6 bnVsbDtpZih1KXt1PTNEdS5zcGxpdCgiICIpO3ZhciBhPTNEcGFyc2VJbnQoPQpvLnN0eWxlKCJ3 aWR0aCIpKS91WzJdO2kucG9zWzBdPTNEaS5wb3NbMF0qYSxpLnBvc1sxXT0zRGkucG9zWzFdKmF9 fXZhciBmPQo9M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSxsPTNEaS5wb3NbMV0rKHMub2Zm c2V0VG9wfHwwKSxjPTNEbi50aWNrRm9ybWE9CnQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRl eCkpLGg9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbj0KZGV4KSkscD0z RGQoaS5zZXJpZXMua2V5LGMsaCxpLHgpO2UudG9vbHRpcC5zaG93KFtmLGxdLHAsbnVsbCxudWxs LHMpfTtyZXR1PQpybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3M9Ci5sZWZ0LGUucG9zWzFdK3MudG9wXSx3LnRv b2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvbz0KbHRpcCIs ZnVuY3Rpb24oZSl7dy50b29sdGlwSGlkZShlKX0pLHcub24oInRvb2x0aXBIaWRlIixmdW5jdGlv bigpe3AmJmUudG9vPQpsdGlwLmNsZWFudXAoKX0pLHguZGlzcGF0Y2g9M0R3LHguYmFycz0zRHQs eC5sZWdlbmQ9M0RpLHgueEF4aXM9M0RuLHgueUF4aXM9Cj0zRHIsZDMucmViaW5kKHgsdCwiZGVm aW5lZCIsImlzQXJlYSIsIngiLCJ5Iiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInhEbz0KbWFp biIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJpbnRlcmFj dGl2ZSIsImNsaXBFZGdlPQoiLCJjbGlwVm9yb25vaSIsImlkIiwiaW50ZXJwb2xhdGUiLCJoaWdo bGlnaHRQb2ludCIsImNsZWFySGlnaGxpZ2h0cyIsImludGU9CnJhY3RpdmUiKSx4Lm9wdGlvbnM9 M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoeCkseC5tYXJnaW49M0RmdW5jdGlvbihlKXtyZT0K dHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVk Ij9lLnRvcDpzLnRvcCxzLnJpPQpnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9l LnJpZ2h0OnMucmlnaHQscy5ib3R0b209M0R0eXBlb2YgZS5ib3Q9CnRvbSE9M0QidW5kZWZpbmVk Ij9lLmJvdHRvbTpzLmJvdHRvbSxzLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQi Pz0KZS5sZWZ0OnMubGVmdCx4KTpzfSx4LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHU9M0RlLHgpPQo6dX0seC5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUseCk6YX0seC5jb2xvcj0zRGY9CnVuY3Rpb24odCl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3Iobyks eCk6bz0KfSx4LnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUseCk6Zn0seC5zaG93WEF4PQppcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhsPTNEZSx4KTpsfSx4LnNob3dZQXhpcz0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHgpOmN9LHgucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rp b24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsci5vcmllbnQoZT8icmlnaHQi OiJsZWZ0IikseCk6aH0seC50b29sdGlwcz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHA9M0RlLHgpOnB9LHgudG9vbHRpcENvbnRlbnQ9M0RmdW5jPQp0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSx4KTpkfSx4LnN0YXRlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oZz0zRGUseCk6Z30seC5kZWZhdWx0U3RhdGU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyh5PTNEZSx4KTp5fSx4Lm5vRGF0 YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSx4PQopOmJ9LHgu dHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KEU9M0RlLHgpOkU9Cn0seH0sZS5tb2RlbHMuaW5kZW50ZWRUcmVlPTNEZnVuY3Rpb24oKXtmdW5j dGlvbiBnKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpbz0KbihlKXtmdW5jdGlvbiBrKGUsdCxuKXtk My5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtpZihkMy5ldmVudC5zaGlmdEtleSYmIW4pPQpyZXR1 cm4gZDMuZXZlbnQuc2hpZnRLZXk9M0QhMSxlLnZhbHVlcyYmZS52YWx1ZXMuZm9yRWFjaChmdW5j dGlvbihlKXsoZS52YWw9CnVlc3x8ZS5fdmFsdWVzKSYmayhlLDAsITApfSksITA7aWYoIU8oZSkp cmV0dXJuITA7ZS52YWx1ZXM/KGUuX3ZhbHVlcz0zRGUudj0KYWx1ZXMsZS52YWx1ZXM9M0RudWxs KTooZS52YWx1ZXM9M0RlLl92YWx1ZXMsZS5fdmFsdWVzPTNEbnVsbCksZy51cGRhdGUoKX1mPQp1 bmN0aW9uIEwoZSl7cmV0dXJuIGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmxlbmd0aD9oOmUudmFsdWVz JiZlLnZhbHVlcy5sZW5ndGg9Cj9wOiIifWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGUuX3ZhbHVlcyYm ZS5fdmFsdWVzLmxlbmd0aH1mdW5jdGlvbiBPKGUpe3ZhciB0PQo9M0RlLnZhbHVlc3x8ZS5fdmFs dWVzO3JldHVybiB0JiZ0Lmxlbmd0aH12YXIgdD0zRDEsbj0zRGQzLnNlbGVjdCh0aGlzKSxpPQo9 M0RkMy5sYXlvdXQudHJlZSgpLmNoaWxkcmVuKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30p LnNpemUoW3IsZl0pO2cudXA9CmRhdGU9M0RmdW5jdGlvbigpe24uY2FsbChnKX0sZVswXXx8KGVb MF09M0R7a2V5OmF9KTt2YXIgcz0zRGkubm9kZXMoZVswXSkseT0KPTNEZDMuc2VsZWN0KHRoaXMp LnNlbGVjdEFsbCgiZGl2IikuZGF0YShbW3NdXSksYj0zRHkuZW50ZXIoKS5hcHBlbmQoImRpdiIp PQouYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtaW5kZW50ZWR0cmVlIiksdz0zRGIuYXBw ZW5kKCJ0YWJsZSIpLEU9M0R5LnM9CmVsZWN0KCJ0YWJsZSIpLmF0dHIoIndpZHRoIiwiMTAwJSIp LmF0dHIoImNsYXNzIixjKTtpZihvKXt2YXIgUz0zRHcuYXBwZW5kKD0KInRoZWFkIikseD0zRFMu YXBwZW5kKCJ0ciIpO2wuZm9yRWFjaChmdW5jdGlvbihlKXt4LmFwcGVuZCgidGgiKS5hdHRyKCJ3 aWR0PQpoIixlLndpZHRoP2Uud2lkdGg6IjEwJSIpLnN0eWxlKCJ0ZXh0LWFsaWduIixlLnR5cGU9 M0Q9M0QibnVtZXJpYyI/InJpZ2h0Ijo9CiJsZWZ0IikuYXBwZW5kKCJzcGFuIikudGV4dChlLmxh YmVsKX0pfXZhciBUPTNERS5zZWxlY3RBbGwoInRib2R5IikuZGF0YShmdT0KbmN0aW9uKGUpe3Jl dHVybiBlfSk7VC5lbnRlcigpLmFwcGVuZCgidGJvZHkiKSx0PTNEZDMubWF4KHMsZnVuY3Rpb24o ZSl7cmV0PQp1cm4gZS5kZXB0aH0pLGkuc2l6ZShbcix0KmZdKTt2YXIgTj0zRFQuc2VsZWN0QWxs KCJ0ciIpLmRhdGEoZnVuY3Rpb24oZSl7cmU9CnR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIHUmJiFlLmNoaWxkcmVuP3UoZSk6ITB9KX0sZnVuY3Rpb24oZSx0KXtyZT0KdHVybiBlLmlk fHxlLmlkfHwrK219KTtOLmV4aXQoKS5yZW1vdmUoKSxOLnNlbGVjdCgiaW1nLm52LXRyZWVpY29u IikuYXR0cigiPQpzcmMiLEwpLmNsYXNzZWQoImZvbGRlZCIsQSk7dmFyIEM9M0ROLmVudGVyKCku YXBwZW5kKCJ0ciIpO2wuZm9yRWFjaChmdW5jdGk9Cm9uKGUsdCl7dmFyIG49M0RDLmFwcGVuZCgi dGQiKS5zdHlsZSgicGFkZGluZy1sZWZ0IixmdW5jdGlvbihlKXtyZXR1cm4odD8wOj0KZS5kZXB0 aCpmKzEyKyhMKGUpPzA6MTYpKSsicHgifSwiaW1wb3J0YW50Iikuc3R5bGUoInRleHQtYWxpZ24i LGUudHlwZT0zRD0KPTNEIm51bWVyaWMiPyJyaWdodCI6ImxlZnQiKTt0PTNEPTNEMCYmbi5hcHBl bmQoImltZyIpLmNsYXNzZWQoIm52LXRyZWVpY29uPQoiLCEwKS5jbGFzc2VkKCJudi1mb2xkZWQi LEEpLmF0dHIoInNyYyIsTCkuc3R5bGUoIndpZHRoIiwiMTRweCIpLnN0eWxlKCJoZWk9CmdodCIs IjE0cHgiKS5zdHlsZSgicGFkZGluZyIsIjAgMXB4Iikuc3R5bGUoImRpc3BsYXkiLGZ1bmN0aW9u KGUpe3JldHVybiBMKD0KZSk/ImlubGluZS1ibG9jayI6Im5vbmUifSkub24oImNsaWNrIixrKSxu LmVhY2goZnVuY3Rpb24obil7IXQmJnYobik/ZDMuc2VsPQplY3QodGhpcykuYXBwZW5kKCJhIiku YXR0cigiaHJlZiIsdikuYXR0cigiY2xhc3MiLGQzLmZ1bmN0b3IoZS5jbGFzc2VzKSkuYXA9CnBl bmQoInNwYW4iKTpkMy5zZWxlY3QodGhpcykuYXBwZW5kKCJzcGFuIiksZDMuc2VsZWN0KHRoaXMp LnNlbGVjdCgic3BhbiIpLj0KYXR0cigiY2xhc3MiLGQzLmZ1bmN0b3IoZS5jbGFzc2VzKSkudGV4 dChmdW5jdGlvbih0KXtyZXR1cm4gZS5mb3JtYXQ/dFtlLmtlPQp5XT9lLmZvcm1hdCh0W2Uua2V5 XSk6Ii0iOnRbZS5rZXldfHwiLSJ9KX0pLGUuc2hvd0NvdW50JiYobi5hcHBlbmQoInNwYW4iKS49 CmF0dHIoImNsYXNzIiwibnYtY2hpbGRyZW5Db3VudCIpLE4uc2VsZWN0QWxsKCJzcGFuLm52LWNo aWxkcmVuQ291bnQiKS50ZXh0KD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzJiZlLnZhbHVl cy5sZW5ndGh8fGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmxlbmd0aD8iPQooIisoZS52YWx1ZXMmJmUu dmFsdWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdT91KGUpOiEwfSkubGVuZ3RofHxlLl92 YWw9CnVlcyYmZS5fdmFsdWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdT91KGUpOiEwfSku bGVuZ3RofHwwKSsiKSI6IiJ9KSl9KT0KLE4ub3JkZXIoKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUp e2QuZWxlbWVudENsaWNrKHtyb3c6dGhpcyxkYXRhOmUscG9zOltlLngsPQplLnldfSl9KS5vbigi ZGJsY2xpY2siLGZ1bmN0aW9uKGUpe2QuZWxlbWVudERibGNsaWNrKHtyb3c6dGhpcyxkYXRhOmUs cG9zOls9CmUueCxlLnldfSl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlKXtkLmVsZW1lbnRN b3VzZW92ZXIoe3Jvdzp0aGlzLGRhdGE6ZT0KLHBvczpbZS54LGUueV19KX0pLm9uKCJtb3VzZW91 dCIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50TW91c2VvdXQoe3Jvdzp0aGlzLGRhPQp0YTplLHBvczpb ZS54LGUueV19KX0pfSksZ312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0s bj0zRDk2MCw9CnI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCkscz0zRE1hdGguZmxv b3IoTWF0aC5yYW5kb20oKSoxZTQpLG89M0QhMD0KLHU9M0QhMSxhPTNEIk5vIERhdGEgQXZhaWxh YmxlLiIsZj0zRDIwLGw9M0Rbe2tleToia2V5IixsYWJlbDoiTmFtZSIsdHlwZToiPQp0ZXh0In1d LGM9M0RudWxsLGg9M0QiaW1hZ2VzL2dyZXktcGx1cy5wbmciLHA9M0QiaW1hZ2VzL2dyZXktbWlu dXMucG5nIixkPQo9M0RkMy5kaXNwYXRjaCgiZWxlbWVudENsaWNrIiwiZWxlbWVudERibGNsaWNr IiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnQ9Ck1vdXNlb3V0Iiksdj0zRGZ1bmN0aW9uKGUp e3JldHVybiBlLnVybH0sbT0zRDA7cmV0dXJuIGcub3B0aW9ucz0zRGUudXRpbHMubz0KcHRpb25z RnVuYy5iaW5kKGcpLGcubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHQudG9wPTNEPQp0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmk9Cm5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQu Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYj0Kb3R0 b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LGcp OnR9LGcud2lkdGg9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNE ZSxnKTpufSxnLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/ KHI9M0RlLGcpOnJ9LGcuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0K Z3RoPyhpPTNEZS51dGlscy5nZXRDb2xvcih0KSxzY2F0dGVyLmNvbG9yKGkpLGcpOml9LGcuaWQ9 M0RmdW5jdGlvbihlKXtyZXR1PQpybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxnKTpzfSxnLmhl YWRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KG89M0RlLGcpOm99 LGcubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLGcp Oj0KYX0sZy5maWx0ZXJaZXJvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHU9M0RlLGcpOnV9LGcuY29sdW1uPQpzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGw9M0RlLGcpOmx9LGcudGFibGVDbGFzcz0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGM9M0RlLGcpOmN9LGcuaWNvbk9wZW49M0RmdW5jdGlvbihlKXtyZXR1 cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxnKTpofSxnLmljb25DbG9zZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KHA9M0RlLGcpOnB9LGcuZ2V0VXJsPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLGcpOnY9Cn0sZ30sZS5tb2Rl bHMubGVnZW5kPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBjKGgpe3JldHVybiBoLmVhY2goZnVuY3Rp b24oYyl7dj0KYXIgaD0zRG4tdC5sZWZ0LXQucmlnaHQscD0zRGQzLnNlbGVjdCh0aGlzKSxkPTNE cC5zZWxlY3RBbGwoImcubnYtbGVnZW5kIikuPQpkYXRhKFtjXSksdj0zRGQuZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbGVnZW5kIikuYXBwZW5kKCI9CmciKSxtPTNE ZC5zZWxlY3QoImciKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIr dC50b3ArIikiKT0KO3ZhciBnPTNEbS5zZWxlY3RBbGwoIi5udi1zZXJpZXMiKS5kYXRhKGZ1bmN0 aW9uKGUpe3JldHVybiBlfSkseT0zRGcuZW50ZXIoPQopLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYtc2VyaWVzIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtsLmxlZ2U9Cm5kTW91 c2VvdmVyKGUsdCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7bC5sZWdlbmRNb3VzZW91 dChlLHQpfSkub24oIj0KY2xpY2siLGZ1bmN0aW9uKGUsdCl7bC5sZWdlbmRDbGljayhlLHQpLGEm JihmPyhjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhPQpibGVkPTNEITB9KSxlLmRpc2FibGVk PTNEITEpOihlLmRpc2FibGVkPTNEIWUuZGlzYWJsZWQsYy5ldmVyeShmdW5jdGlvbihlKXs9CnJl dHVybiBlLmRpc2FibGVkfSkmJmMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPTNEITF9 KSksbC5zdGF0ZUNoYW5nZT0KKHtkaXNhYmxlZDpjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUu ZGlzYWJsZWR9KX0pKX0pLm9uKCJkYmxjbGljayIsZnVuY3RpPQpvbihlLHQpe2wubGVnZW5kRGJs Y2xpY2soZSx0KSxhJiYoYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMH0pLGU9 Ci5kaXNhYmxlZD0zRCExLGwuc3RhdGVDaGFuZ2Uoe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9uKGUp e3JldHVybiEhZS5kaXNhYmxlZD0KfSl9KSl9KTt5LmFwcGVuZCgiY2lyY2xlIikuc3R5bGUoInN0 cm9rZS13aWR0aCIsMikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmQtPQpzeW1ib2wiKS5hdHRyKCJy Iiw1KSx5LmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5hdHRyKCJj bGE9CnNzIiwibnYtbGVnZW5kLXRleHQiKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0cigiZHgiLCI4 IiksZy5jbGFzc2VkKCJkaXNhYmxlZD0KIixmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZH0p LGcuZXhpdCgpLnJlbW92ZSgpLGcuc2VsZWN0KCJjaXJjbGUiKS5zdHlsPQplKCJmaWxsIixmdW5j dGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxzKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlv bihlLHQ9Cil7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLGcuc2VsZWN0KCJ0ZXh0IikudGV4dChp KTtpZihvKXt2YXIgYj0zRFtdO2cuZWFjaD0KKGZ1bmN0aW9uKHQsbil7dmFyIHI9M0RkMy5zZWxl Y3QodGhpcykuc2VsZWN0KCJ0ZXh0IiksaTt0cnl7aT0zRHIuZ2V0Q29tcHV0PQplZFRleHRMZW5n dGgoKTtpZihpPD0zRDApdGhyb3cgRXJyb3IoKX1jYXRjaChzKXtpPTNEZS51dGlscy5jYWxjQXBw cm94VGV4dFc9CmlkdGgocil9Yi5wdXNoKGkrMjgpfSk7dmFyIHc9M0QwLEU9M0QwLFM9M0RbXTt3 aGlsZShFPGgmJnc8Yi5sZW5ndGgpU1t3XT0zRD0KYlt3XSxFKz0zRGJbdysrXTt3PTNEPTNEPTNE MCYmKHc9M0QxKTt3aGlsZShFPmgmJnc+MSl7Uz0zRFtdLHctLTtmb3IodmFyIHg9Cj0zRDA7eDxi Lmxlbmd0aDt4KyspYlt4XT4oU1t4JXddfHwwKSYmKFNbeCV3XT0zRGJbeF0pO0U9M0RTLnJlZHVj ZShmdW5jdGlvbj0KKGUsdCxuLHIpe3JldHVybiBlK3R9KX12YXIgVD0zRFtdO2Zvcih2YXIgTj0z RDAsQz0zRDA7Tjx3O04rKylUW05dPTNEQyxDKz0KPTNEU1tOXTtnLmF0dHIoInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrVFt0JXddKyIsIisoNStNPQphdGguZmxv b3IodC93KSoyMCkrIikifSksdT9tLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLXQu cmlnaHQtRSkrIiw9CiIrdC50b3ArIikiKTptLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgw LCIrdC50b3ArIikiKSxyPTNEdC50b3ArdC5ib3R0bz0KbStNYXRoLmNlaWwoYi5sZW5ndGgvdykq MjB9ZWxzZXt2YXIgaz0zRDUsTD0zRDUsQT0zRDAsTztnLmF0dHIoInRyYW5zZm9ybSIsPQpmdW5j dGlvbihlLHIpe3ZhciBpPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLm5vZGUoKS5n ZXRDb21wdXRlZFRleHQ9Ckxlbmd0aCgpKzI4O3JldHVybiBPPTNETCxuPHQubGVmdCt0LnJpZ2h0 K08raSYmKEw9M0RPPTNENSxrKz0zRDIwKSxMKz0zRGksTD0KPkEmJihBPTNETCksInRyYW5zbGF0 ZSgiK08rIiwiK2srIikifSksbS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi10PQou cmlnaHQtQSkrIiwiK3QudG9wKyIpIikscj0zRHQudG9wK3QuYm90dG9tK2srMTV9fSksY312YXIg dD0zRHt0b3A6NSxyaWdodDo9CjAsYm90dG9tOjUsbGVmdDowfSxuPTNENDAwLHI9M0QyMCxpPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSxzPTNEZS51dGlscz0KLmRlZmF1bHRDb2xvcigpLG89 M0QhMCx1PTNEITAsYT0zRCEwLGY9M0QhMSxsPTNEZDMuZGlzcGF0Y2goImxlZ2VuZENsaWNrIiwi PQpsZWdlbmREYmxjbGljayIsImxlZ2VuZE1vdXNlb3ZlciIsImxlZ2VuZE1vdXNlb3V0Iiwic3Rh dGVDaGFuZ2UiKTtyZXR1cm4gYy49CmRpc3BhdGNoPTNEbCxjLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoYyksYy5tYXJnaW49M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRv cCx0PQoucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmln aHQsdC5ib3R0b209M0R0eXBlb2YgZS49CmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0 LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZT0KZCI/ZS5sZWZ0OnQu bGVmdCxjKTp0fSxjLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG49M0RlPQosYyk6bn0sYy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocj0zRGUsYyk6cn0sYy5rZXk9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhpPTNEZSxjKTppfSxjLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dT0Kcm4gYXJndW1l bnRzLmxlbmd0aD8ocz0zRGUudXRpbHMuZ2V0Q29sb3IodCksYyk6c30sYy5hbGlnbj0zRGZ1bmN0 aW9uKGUpe3JlPQp0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLGMpOm99LGMucmlnaHRBbGln bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KHU9M0RlLGMpOnV9LGMu dXBkYXRlU3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhhPTNE ZSxjKTphfSxjLnJhZGlvQnV0dG9uTW9kZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhmPTNEPQplLGMpOmZ9LGN9LGUubW9kZWxzLmxpbmU9M0RmdW5jdGlvbigpe2Z1bmN0 aW9uIG0oZyl7cmV0dXJuIGcuZWFjaChmdW5jdGlvbig9Cm0pe3ZhciBnPTNEci1uLmxlZnQtbi5y aWdodCxiPTNEaS1uLnRvcC1uLmJvdHRvbSx3PTNEZDMuc2VsZWN0KHRoaXMpO2M9M0R0Lj0KeFNj YWxlKCksaD0zRHQueVNjYWxlKCksZD0zRGR8fGMsdj0zRHZ8fGg7dmFyIEU9M0R3LnNlbGVjdEFs bCgiZy5udi13cmFwLm52PQotbGluZSIpLmRhdGEoW21dKSxTPTNERS5lbnRlcigpLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWw9CmluZSIpLFQ9M0RTLmFwcGVuZCgi ZGVmcyIpLE49M0RTLmFwcGVuZCgiZyIpLEM9M0RFLnNlbGVjdCgiZyIpO04uYXBwZW5kKCJnIj0K KS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1zY2F0dGVyV3JhcCIpLEUuPQphdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLmxlZnQr IiwiK24udG9wKyIpIiksdC53aWR0aChnKS5oZWlnaHQoYik7dmE9CnIgaz0zREUuc2VsZWN0KCIu bnYtc2NhdHRlcldyYXAiKTtrLmNhbGwodCksVC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQi LD0KIm52LWVkZ2UtY2xpcC0iK3QuaWQoKSkuYXBwZW5kKCJyZWN0IiksRS5zZWxlY3QoIiNudi1l ZGdlLWNsaXAtIit0LmlkKCkrIiByPQplY3QiKS5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0 IixiPjA/YjowKSxDLmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi09CmVkZ2UtY2xpcC0iK3Qu aWQoKSsiKSI6IiIpLGsuYXR0cigiY2xpcC1wYXRoIixsPyJ1cmwoI252LWVkZ2UtY2xpcC0iK3Qu aWQoKT0KKyIpIjoiIik7dmFyIEw9M0RFLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgi Lm52LWdyb3VwIikuZGF0YShmdW5jdGlvPQpuKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1 cm4gZS5rZXl9KTtMLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm89CmtlLW9wYWNpdHki LDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLEwuZXhpdCgpLnJlbW92ZSgpLEwuYXR0 cigiY2xhcz0KcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0p LmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlPQope3JldHVybiBlLmhvdmVyfSkuc3R5bGUoImZp bGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0KX0pLnN0eWxlKCJzdHJva2U9CiIsZnVuY3Rp b24oZSx0KXtyZXR1cm4gcyhlLHQpfSksTC5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxl KCJmaWxsLW9wYT0KY2l0eSIsLjUpO3ZhciBBPTNETC5zZWxlY3RBbGwoInBhdGgubnYtYXJlYSIp LmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSk/PQpbZV06W119KTtBLmVudGVyKCkuYXBwZW5k KCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1hcmVhIikuYXR0cigiZCIsZnVuY3Rpb249Cih0KXty ZXR1cm4gZDMuc3ZnLmFyZWEoKS5pbnRlcnBvbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVuY3Rpb24o dCxuKXtyZXR1cm4gZT0KLnV0aWxzLk5hTnRvWmVybyhkKG8odCxuKSkpfSkueTAoZnVuY3Rpb24o dCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odih1PQoodCxuKSkpfSkueTEoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gdihoLmRvbWFpbigpWzBdPD0zRDA/aC5kb21haW4oKVsxXT49M0QwPzA9Cjpo LmRvbWFpbigpWzFdOmguZG9tYWluKClbMF0pfSkuYXBwbHkodGhpcyxbdC52YWx1ZXNdKX0pLEwu ZXhpdCgpLnNlbGVjdEFsbD0KKCJwYXRoLm52LWFyZWEiKS5yZW1vdmUoKSxBLmF0dHIoImQiLGZ1 bmN0aW9uKHQpe3JldHVybiBkMy5zdmcuYXJlYSgpLmludGVyPQpwb2xhdGUocCkuZGVmaW5lZChh KS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGMobyh0LG4pKSl9KS49 CnkwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGgodSh0LG4pKSl9KS55 MShmdW5jdGlvbihlLHQpe3JldD0KdXJuIGgoaC5kb21haW4oKVswXTw9M0QwP2guZG9tYWluKClb MV0+PTNEMD8wOmguZG9tYWluKClbMV06aC5kb21haW4oKVswXSl9PQopLmFwcGx5KHRoaXMsW3Qu dmFsdWVzXSl9KTt2YXIgTz0zREwuc2VsZWN0QWxsKCJwYXRoLm52LWxpbmUiKS5kYXRhKGZ1bmN0 aW89Cm4oZSl7cmV0dXJuW2UudmFsdWVzXX0pO08uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRy KCJjbGFzcyIsIm52LWxpbmUiKS5hdD0KdHIoImQiLGQzLnN2Zy5saW5lKCkuaW50ZXJwb2xhdGUo cCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpPQpscy5OYU50b1plcm8o ZChvKHQsbikpKX0pLnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odih1 KHQsbik9CikpfSkpLE8uYXR0cigiZCIsZDMuc3ZnLmxpbmUoKS5pbnRlcnBvbGF0ZShwKS5kZWZp bmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZT0KdHVybiBlLnV0aWxzLk5hTnRvWmVybyhjKG8odCxu KSkpfSkueShmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVyPQpvKGgodSh0LG4p KSl9KSksZD0zRGMuY29weSgpLHY9M0RoLmNvcHkoKX0pLG19dmFyIHQ9M0RlLm1vZGVscy5zY2F0 dGVyKCksbj0KPTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxyPTNEOTYwLGk9M0Q1 MDAscz0zRGUudXRpbHMuZGVmYXVsdENvbG9yPQooKSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu eH0sdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGE9M0RmdW5jdGlvbihlLHQ9Cil7cmV0dXJu IWlzTmFOKHUoZSx0KSkmJnUoZSx0KSE9M0Q9M0RudWxsfSxmPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGUuYXJlYX0sbD0KPTNEITEsYyxoLHA9M0QibGluZWFyIjt0LnNpemUoMTYpLnNpemVEb21haW4o WzE2LDI1Nl0pO3ZhciBkLHY7cmV0dXJuIG0uZGlzPQpwYXRjaD0zRHQuZGlzcGF0Y2gsbS5zY2F0 dGVyPTNEdCxkMy5yZWJpbmQobSx0LCJpZCIsImludGVyYWN0aXZlIiwic2l6ZSIsIng9ClNjYWxl IiwieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2Ui LCJzaXplRG9tYWluIj0KLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25v aSIsInVzZVZvcm9ub2kiLCJjbGlwUmFkaXVzIiwicGFkPQpEYXRhIiwiaGlnaGxpZ2h0UG9pbnQi LCJjbGVhckhpZ2hsaWdodHMiKSxtLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmI9Cmlu ZChtKSxtLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLnRv cD0zRHR5cGVvZiBlLnRvcD0KIT0zRCJ1bmRlZmluZWQiP2UudG9wOm4udG9wLG4ucmlnaHQ9M0R0 eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0PQo6bi5yaWdodCxuLmJvdHRvbT0z RHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpuLmJvdHRvbSxuLmxlZnQ9 Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om4ubGVmdCxtKTpufSxtLndp ZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsbSk6cn0s bS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhpPTNEZSxt KTppfSxtLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdC54 KGU9CiksbSk6b30sbS55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9 M0RlLHQueShlKSxtKTp1fSxtLmNsaT0KcEVkZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS5jb2xvcj0zRGZ1bmN0aW9uPQoobil7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHM9M0RlLnV0aWxzLmdldENvbG9yKG4pLHQuY29sb3IocyksbSk6c30s bS5pbnQ9CmVycG9sYXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9 M0RlLG0pOnB9LG0uZGVmaW5lZD0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLG0pOmF9LG0uaXNBcmVhPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRz Lmxlbmd0aD8oZj0zRGQzLmZ1bmN0b3IoZSksbSk6Zn0sbX0sZS5tb2RlbHMubGluZUNoYXJ0PTNE ZnVuY3Rpb249Cigpe2Z1bmN0aW9uIE4obSl7cmV0dXJuIG0uZWFjaChmdW5jdGlvbihtKXt2YXIg eD0zRGQzLnNlbGVjdCh0aGlzKSxDPTNEdGhpcz0KLGs9M0QoYXx8cGFyc2VJbnQoeC5zdHlsZSgi d2lkdGgiKSl8fDk2MCktby5sZWZ0LW8ucmlnaHQsTD0zRChmfHxwYXJzZUludCh4PQouc3R5bGUo ImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbTtOLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7eC5j YWxsKE4pfSxOLmM9Cm9udGFpbmVyPTNEdGhpcyxiLmRpc2FibGVkPTNEbS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXcpez0KdmFyIEE7dz0zRHt9O2ZvcihBIGluIGIp YltBXWluc3RhbmNlb2YgQXJyYXk/d1tBXT0zRGJbQV0uc2xpY2UoMCk6d1tBXT0zRGJbPQpBXX1p ZighbXx8IW0ubGVuZ3RofHwhbS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxl bmd0aH0pLmxlbmd0aCk9Cnt2YXIgTz0zRHguc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShb RV0pO3JldHVybiBPLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Ij0KKS5hdHRyKCJjbGFzcyIsIm52ZDMg bnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pPQpk ZGxlIiksTy5hdHRyKCJ4IixvLmxlZnQray8yKS5hdHRyKCJ5IixvLnRvcCtMLzIpLnRleHQoZnVu Y3Rpb24oZSl7cmV0dXJuIGU9Cn0pLE59eC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUo KSxnPTNEdC54U2NhbGUoKSx5PTNEdC55U2NhbGUoKTt2YXIgTT0KPTNEeC5zZWxlY3RBbGwoImcu bnYtd3JhcC5udi1saW5lQ2hhcnQiKS5kYXRhKFttXSksXz0zRE0uZW50ZXIoKS5hcHBlbmQoImci PQopLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWxpbmVDaGFydCIpLmFwcGVuZCgiZyIp LEQ9M0RNLnNlbGVjdCgiZyIpO189Ci5hcHBlbmQoInJlY3QiKS5zdHlsZSgib3BhY2l0eSIsMCks Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcz0KIiksXy5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJuPQp2LWxpbmVzV3JhcCIpLF8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRX cmFwIiksXy5hcHBlbmQoImciKS5hdHQ9CnIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmUiKSxELnNl bGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixrKS5hdHRyKCJoZWlnaHQiLD0KTD4wP0w6MCksbCYm KGkud2lkdGgoayksRC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0obSkuY2FsbChpKSxv LnRvcCE9Cj0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaGVpZ2h0KCksTD0zRChmfHxwYXJzZUlu dCh4LnN0eWxlKCJoZWlnaHQiKSl8fDQwMD0KKS1vLnRvcC1vLmJvdHRvbSksTS5zZWxlY3QoIi5u di1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsPQoiKyAtby50b3Ar IikiKSksTS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxlZnQrIiwiK28udG9wKyIp IikscCYmRC49CnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK2srIiwwKSIpLGQmJihzLndpZHRoKD0KaykuaGVpZ2h0KEwpLm1hcmdpbih7bGVmdDpv LmxlZnQsdG9wOm8udG9wfSkuc3ZnQ29udGFpbmVyKHgpLnhTY2FsZShnKSxNLnNlPQpsZWN0KCIu bnYtaW50ZXJhY3RpdmUiKS5jYWxsKHMpKSx0LndpZHRoKGspLmhlaWdodChMKS5jb2xvcihtLm1h cChmdW5jdGlvbig9CmUsdCl7cmV0dXJuIGUuY29sb3J8fHUoZSx0KX0pLmZpbHRlcihmdW5jdGlv bihlLHQpe3JldHVybiFtW3RdLmRpc2FibGVkfSkpOz0KdmFyIFA9M0RELnNlbGVjdCgiLm52LWxp bmVzV3JhcCIpLmRhdHVtKG0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FiPQpsZWR9 KSk7UC5jYWxsKHQpLGMmJihuLnNjYWxlKGcpLnRpY2tzKGsvMTAwKS50aWNrU2l6ZSgtTCwwKSxE LnNlbGVjdCgiLm52LXg9Ci5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs Iit5LnJhbmdlKClbMF0rIikiKSxELnNlbGVjdCgiLm52LT0KeC5udi1heGlzIikuY2FsbChuKSks aCYmKHIuc2NhbGUoeSkudGlja3MoTC8zNikudGlja1NpemUoLWssMCksRC5zZWxlY3QoIi5uPQp2 LXkubnYtYXhpcyIpLmNhbGwocikpLGkuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlv bihlKXtiPTNEZSxTLnN0YXQ9CmVDaGFuZ2UoYiksTi51cGRhdGUoKX0pLHMuZGlzcGF0Y2gub24o ImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xlYT0KckhpZ2hsaWdodHMoKTt2YXIg YSxmLGwsYz0zRFtdO20uZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2VyaWVzSW5kZXg9 Cj0zRHQsIWUuZGlzYWJsZWR9KS5mb3JFYWNoKGZ1bmN0aW9uKG4scil7Zj0zRGUuaW50ZXJhY3Rp dmVCaXNlY3Qobi52YWx1ZXMsaT0KLnBvaW50WFZhbHVlLE4ueCgpKSx0LmhpZ2hsaWdodFBvaW50 KHIsZiwhMCk7dmFyIHM9M0RuLnZhbHVlc1tmXTtpZih0eXBlb2YgPQpzPTNEPTNEInVuZGVmaW5l ZCIpcmV0dXJuO3R5cGVvZiBhPTNEPTNEInVuZGVmaW5lZCImJihhPTNEcyksdHlwZW9mIGw9M0Q9 M0Q9CiJ1bmRlZmluZWQiJiYobD0zRE4ueFNjYWxlKCkoTi54KCkocyxmKSkpLGMucHVzaCh7a2V5 Om4ua2V5LHZhbHVlOk4ueSgpKHMsZj0KKSxjb2xvcjp1KG4sbi5zZXJpZXNJbmRleCl9KX0pO2lm KGMubGVuZ3RoPjIpe3ZhciBoPTNETi55U2NhbGUoKS5pbnZlcnQoaS5tPQpvdXNlWSkscD0zRE1h dGguYWJzKE4ueVNjYWxlKCkuZG9tYWluKClbMF0tTi55U2NhbGUoKS5kb21haW4oKVsxXSksZD0z RC4wMyo9CnAsZz0zRGUubmVhcmVzdFZhbHVlSW5kZXgoYy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu IGUudmFsdWV9KSxoLGQpO2chPTNEPTNEbj0KdWxsJiYoY1tnXS5oaWdobGlnaHQ9M0QhMCl9dmFy IHk9M0RuLnRpY2tGb3JtYXQoKShOLngoKShhLGYpKTtzLnRvb2x0aXAucG9zPQppdGlvbih7bGVm dDpsK28ubGVmdCx0b3A6aS5tb3VzZVkrby50b3B9KS5jaGFydENvbnRhaW5lcihDLnBhcmVudE5v ZGUpLmVuYWI9CmxlZCh2KS52YWx1ZUZvcm1hdHRlcihmdW5jdGlvbihlLHQpe3JldHVybiByLnRp Y2tGb3JtYXQoKShlKX0pLmRhdGEoe3ZhbHVlOj0KeSxzZXJpZXM6Y30pKCkscy5yZW5kZXJHdWlk ZUxpbmUobCl9KSxzLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQiLGZ1bmN0PQppb24oZSl7 Uy50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxTLm9uKCJ0b29sdGlwU2hvdyIs ZnVuY3Rpb24oZSk9Cnt2JiZUKGUsQy5wYXJlbnROb2RlKX0pLFMub24oImNoYW5nZVN0YXRlIixm dW5jdGlvbihlKXt0eXBlb2YgZS5kaXNhYmxlZCE9Cj0zRCJ1bmRlZmluZWQiJiZtLmxlbmd0aD0z RD0zRD0zRGUuZGlzYWJsZWQubGVuZ3RoJiYobS5mb3JFYWNoKGZ1bmN0aW9uKHQsbj0KKXt0LmRp c2FibGVkPTNEZS5kaXNhYmxlZFtuXX0pLGIuZGlzYWJsZWQ9M0RlLmRpc2FibGVkKSxOLnVwZGF0 ZSgpfSl9KSxOfXZhPQpyIHQ9M0RlLm1vZGVscy5saW5lKCksbj0zRGUubW9kZWxzLmF4aXMoKSxy PTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy49CmxlZ2VuZCgpLHM9M0RlLmludGVyYWN0 aXZlR3VpZGVsaW5lKCksbz0zRHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6Nj0KMH0s dT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksYT0zRG51bGwsZj0zRG51bGwsbD0zRCEwLGM9M0Qh MCxoPTNEITAscD0zRCExPQosZD0zRCExLHY9M0QhMCxtPTNEZnVuY3Rpb24oZSx0LG4scixpKXty ZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCA9CiIrdCsiPC9wPiJ9LGcseSxiPTNE e30sdz0zRG51bGwsRT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLFM9M0RkMy5kaXNwYXRjaCgidD0K b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLHg9 M0QwO24ub3JpZW50KCJib3R0PQpvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW50KHA/InJpZ2h0 IjoibGVmdCIpO3ZhciBUPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0KPTNEaS5wb3NbMF0rKHMub2Zm c2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1h PQp0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55 KCkoaS5wb2ludCxpLnBvaW50SW49CmRleCkpLGw9M0RtKGkuc2VyaWVzLmtleSxhLGYsaSxOKTtl LnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51bGwsbnVsbCxzKX07cmV0dT0Kcm4gdC5kaXNwYXRjaC5v bigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1sw XStvPQoubGVmdCxlLnBvc1sxXStvLnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW91dC50b289Cmx0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUo ZSl9KSxTLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXt2JiZlLnRvbz0KbHRpcC5jbGVhbnVw KCl9KSxOLmRpc3BhdGNoPTNEUyxOLmxpbmVzPTNEdCxOLmxlZ2VuZD0zRGksTi54QXhpcz0zRG4s Ti55QXhpPQpzPTNEcixOLmludGVyYWN0aXZlTGF5ZXI9M0RzLGQzLnJlYmluZChOLHQsImRlZmlu ZWQiLCJpc0FyZWEiLCJ4IiwieSIsInNpemU9CiIsInhTY2FsZSIsInlTY2FsZSIsInhEb21haW4i LCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIj0KLCJpbnRlcmFj dGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwiaWQiLCJpbnRlcnBv bGF0ZSIpLE4uPQpvcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKE4pLE4ubWFyZ2lu PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8oby50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6by50b3Asby5yaWdodD0zRHR5cGVvZj0KIGUucmln aHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpvLnJpZ2h0LG8uYm90dG9tPTNEdHlwZW9mIGUuYm90 dG9tIT0zRCJ1bmRlPQpmaW5lZCI/ZS5ib3R0b206by5ib3R0b20sby5sZWZ0PTNEdHlwZW9mIGUu bGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6by5sZWY9CnQsTik6b30sTi53aWR0aD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxOKTphfSxOLmhlaWdodD0KPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLE4pOmZ9LE4uY29sb3I9 M0RmdW5jdGlvbih0KXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZS51dGlscy5nZXRD b2xvcih0KSxpLmNvbG9yKHUpLE4pOnV9LE4uc2hvd0xlZ2U9Cm5kPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLE4pOmx9LE4uc2hvd1hBeGlzPTNEZnVuY3Rpbz0K bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsTik6Y30sTi5zaG93WUF4aXM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxOKTpofSxOLnJpZ2h0 QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KHA9M0Rl LHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLE4pOnB9LE4udXNlSW50ZXJhY3RpdmVHdWlkZWxp bj0KZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxlPTNEPTNE PTNEITAmJihOLmludGVyYWN0aXZlPQooITEpLE4udXNlVm9yb25vaSghMSkpLE4pOmR9LE4udG9v bHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyh2PTNEZSxOKTp2 fSxOLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG09Cj0zRGUsTik6bX0sTi5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhiPTNEZSxOKTpifSxOLmRlZj0KYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHc9M0RlLE4pOnd9LE4ubm9EYXRhPTNEZnVuPQpjdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsTik6RX0sTi50cmFuc2l0aW9uRHVyYXRpb249M0Rm dW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxOKTp4fSxOfSxlLm1v ZGVscy5saW5lUGx1c0JhckNoYXJ0PTNEZj0KdW5jdGlvbigpe2Z1bmN0aW9uIFQoZSl7cmV0dXJu IGUuZWFjaChmdW5jdGlvbihlKXt2YXIgbD0zRGQzLnNlbGVjdCh0aGlzKSxjPQo9M0R0aGlzLHY9 M0QoYXx8cGFyc2VJbnQobC5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQsTj0z RChmfHxwYXI9CnNlSW50KGwuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbTtU LnVwZGF0ZT0zRGZ1bmN0aW9uKCl7bC5jYWxsKD0KVCl9LGIuZGlzYWJsZWQ9M0RlLm1hcChmdW5j dGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7dmFyIEM7dz0zRHt9PQo7Zm9yKEMg aW4gYiliW0NdaW5zdGFuY2VvZiBBcnJheT93W0NdPTNEYltDXS5zbGljZSgwKTp3W0NdPTNEYltD XX1pZighZXx8IWU9Ci5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1 ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgaz0zRGwucz0KZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5k YXRhKFtFXSk7cmV0dXJuIGsuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzPQpzIiwi bnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwi bWlkZGxlIiksay5hdHQ9CnIoIngiLHUubGVmdCt2LzIpLmF0dHIoInkiLHUudG9wK04vMikudGV4 dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLFR9bC5zZWxlYz0KdEFsbCgiLm52LW5vRGF0YSIpLnJl bW92ZSgpO3ZhciBMPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmPQom ZS5iYXJ9KSxBPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFyfSk7bT0zREEuZmls dGVyKGZ1bmN0aW9uKGUpe3I9CmV0dXJuIWUuZGlzYWJsZWR9KS5sZW5ndGgmJkEuZmlsdGVyKGZ1 bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSlbMF0udmFsdT0KZXMubGVuZ3RoP3QueFNjYWxl KCk6bi54U2NhbGUoKSxnPTNEbi55U2NhbGUoKSx5PTNEdC55U2NhbGUoKTt2YXIgTz0zRGQzLnNl PQpsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVQbHVzQmFyIikuZGF0YShb ZV0pLE09M0RPLmVudGVyKCkuYXA9CnBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3Jh cCBudi1saW5lUGx1c0JhciIpLmFwcGVuZCgiZyIpLF89M0RPLnNlbD0KZWN0KCJnIik7TS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0cigi Y2xhPQpzcyIsIm52LXkxIG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt eTIgbnYtYXhpcyIpLE0uYXBwZW5kKCI9CmciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiks TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLD0KTS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxwJiYoby53aWR0aCh2LzIpLF8uc2VsZWN0 KCIubnYtPQpsZWdlbmRXcmFwIikuZGF0dW0oZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3Jp Z2luYWxLZXk9M0RlLm9yaWdpbmFsS2V5PQo9M0Q9M0Q9M0R1bmRlZmluZWQ/ZS5rZXk6ZS5vcmln aW5hbEtleSxlLmtleT0zRGUub3JpZ2luYWxLZXkrKGUuYmFyPyIgKGxlZnQ9CiBheGlzKSI6IiAo cmlnaHQgYXhpcykiKSxlfSkpLmNhbGwobyksdS50b3AhPTNEby5oZWlnaHQoKSYmKHUudG9wPTNE by5oZWlnaD0KdCgpLE49M0QoZnx8cGFyc2VJbnQobC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUu dG9wLXUuYm90dG9tKSxfLnNlbGVjdCgiLm52PQotbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiK3YvMisiLCIrIC11LnRvcCsiKSIpKSxPLmF0dHIoInQ9CnJhbnNmb3Jt IiwidHJhbnNsYXRlKCIrdS5sZWZ0KyIsIit1LnRvcCsiKSIpLHQud2lkdGgodikuaGVpZ2h0KE4p LmNvbG9yKGUubT0KYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aChlLHQpfSkuZmls dGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uPQpkaXNhYmxlZCYmIWVbbl0uYmFyfSkpLG4u d2lkdGgodikuaGVpZ2h0KE4pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXI9Cm4gZS5j b2xvcnx8aChlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQm JmVbbl0uYmFyfSkpOz0KdmFyIEQ9M0RfLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oTC5s ZW5ndGg/TDpbe3ZhbHVlczpbXX1dKSxQPTNEXy5zZWxlPQpjdCgiLm52LWxpbmVzV3JhcCIpLmRh dHVtKEFbMF0mJiFBWzBdLmRpc2FibGVkP0E6W3t2YWx1ZXM6W119XSk7ZDMudHJhbnNpdGk9Cm9u KEQpLmNhbGwobiksZDMudHJhbnNpdGlvbihQKS5jYWxsKHQpLHIuc2NhbGUobSkudGlja3Modi8x MDApLnRpY2tTaXplKC1OLD0KMCksXy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK2cucmFuZ2UoKVswXSsiPQopIiksZDMudHJhbnNpdGlvbihf LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpKS5jYWxsKHIpLGkuc2NhbGUoZykudGlja3MoTi8zNik9 Ci50aWNrU2l6ZSgtdiwwKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteTEubnYtYXhpcyIp KS5zdHlsZSgib3BhY2l0eSIsTD0KLmxlbmd0aD8xOjApLmNhbGwoaSkscy5zY2FsZSh5KS50aWNr cyhOLzM2KS50aWNrU2l6ZShMLmxlbmd0aD8wOi12LDApLF8uc2VsPQplY3QoIi5udi15Mi5udi1h eGlzIikuc3R5bGUoIm9wYWNpdHkiLEEubGVuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJh bnM9CmxhdGUoIit2KyIsMCkiKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteTIubnYtYXhp cyIpKS5jYWxsKHMpLG8uZGlzcGF0Yz0KaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2I9 M0RlLFMuc3RhdGVDaGFuZ2UoYiksVC51cGRhdGUoKX0pLFMub24oInRvPQpvbHRpcFNob3ciLGZ1 bmN0aW9uKGUpe2QmJngoZSxjLnBhcmVudE5vZGUpfSksUy5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0 aW9uKHQ9Cil7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnVu Y3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdD0KLmRpc2FibGVkW25dfSksYi5kaXNhYmxlZD0zRHQu ZGlzYWJsZWQpLFQudXBkYXRlKCl9KX0pLFR9dmFyIHQ9M0RlLm1vZGVscy5sPQppbmUoKSxuPTNE ZS5tb2RlbHMuaGlzdG9yaWNhbEJhcigpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxz LmF4aXMoKSw9CnM9M0RlLm1vZGVscy5heGlzKCksbz0zRGUubW9kZWxzLmxlZ2VuZCgpLHU9M0R7 dG9wOjMwLHJpZ2h0OjYwLGJvdHRvbTo1MCxsZT0KZnQ6NjB9LGE9M0RudWxsLGY9M0RudWxsLGw9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxjPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogZS55fSxo PTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxwPTNEITAsZD0zRCEwLHY9M0RmdW5jdGlvbihlLHQs bixyLGkpe3JldHU9CnJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0s bSxnLHksYj0zRHt9LHc9M0RudWxsLEU9M0QiTm8gRD0KYXRhIEF2YWlsYWJsZS4iLFM9M0RkMy5k aXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiPQpjaGFu Z2VTdGF0ZSIpO24ucGFkRGF0YSghMCksdC5jbGlwRWRnZSghMSkucGFkRGF0YSghMCksci5vcmll bnQoImJvdHRvbSIpLnQ9Cmlja1BhZGRpbmcoNykuaGlnaGxpZ2h0WmVybyghMSksaS5vcmllbnQo ImxlZnQiKSxzLm9yaWVudCgicmlnaHQiKTt2YXIgeD0zRD0KZnVuY3Rpb24obixvKXt2YXIgdT0z RG4ucG9zWzBdKyhvLm9mZnNldExlZnR8fDApLGE9M0RuLnBvc1sxXSsoby5vZmZzZXRUb3B8PQp8 MCksZj0zRHIudGlja0Zvcm1hdCgpKHQueCgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSksbD0zRChu LnNlcmllcy5iYXI/aTpzKS49CnRpY2tGb3JtYXQoKSh0LnkoKShuLnBvaW50LG4ucG9pbnRJbmRl eCkpLGM9M0R2KG4uc2VyaWVzLmtleSxmLGwsbixUKTtlLnRvbz0KbHRpcC5zaG93KFt1LGFdLGMs bi52YWx1ZTwwPyJuIjoicyIsbnVsbCxvKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRN PQpvdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt1LmxlZnQs ZS5wb3NbMV0rdS50b3BdLFMudG89Cm9sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1l bnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aT0KcEhpZGUoZSl9KSxuLmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNE W2UuPQpwb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3UudG9wXSxTLnRvb2x0aXBTaG93KGUpfSksbi5k aXNwYXRjaC5vbigiZWxlbWVudE1vdXM9CmVvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Uy50b29s dGlwSGlkZShlKX0pLFMub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpez0KZCYmZS50b29sdGlw LmNsZWFudXAoKX0pLFQuZGlzcGF0Y2g9M0RTLFQubGVnZW5kPTNEbyxULmxpbmVzPTNEdCxULmJh cnM9M0RuPQosVC54QXhpcz0zRHIsVC55MUF4aXM9M0RpLFQueTJBeGlzPTNEcyxkMy5yZWJpbmQo VCx0LCJkZWZpbmVkIiwic2l6ZSIsImNsaXA9ClZvcm9ub2kiLCJpbnRlcnBvbGF0ZSIpLFQub3B0 aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChUKSxULng9M0RmdW5jdD0KaW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSx0LngoZSksbi54KGUpLFQpOmx9LFQueT0zRGZ1 bmN0aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHQueShlKSxuLnkoZSks VCk6Y30sVC5tYXJnaW49M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1 LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp1LnRvcCx1Lj0KcmlnaHQ9 M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnUucmlnaHQsdS5ib3R0b209 M0R0eXBlb2YgZS5iPQpvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp1LmJvdHRvbSx1Lmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQ9CiI/ZS5sZWZ0OnUubGVmdCxUKTp1fSxU LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLD0KVCk6 YX0sVC5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUs VCk6Zn0sVC5jb2xvcj0KPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9 M0RlLnV0aWxzLmdldENvbG9yKHQpLG8uY29sb3IoaCksPQpUKTpofSxULnNob3dMZWdlbmQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsVCk6cH0sVC50b289Cmx0 aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLFQpOmR9LFQu dG9vbHRpcENvbnRlbnQ9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2 PTNEZSxUKTp2fSxULnN0YXRlPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYj0zRGUsVCk6Yn0sVC5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1 bWVudHMubGVuZ3RoPyh3PTNEZSxUKTp3fSxULm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyg9CkU9M0RlLFQpOkV9LFR9LGUubW9kZWxzLmxpbmVXaXRoRm9jdXND aGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhlKXtyZXR1cj0KbiBlLmVhY2goZnVuY3Rpb24o ZSl7ZnVuY3Rpb24gUihlKXt2YXIgdD0zRCsoZT0zRD0zRCJlIiksbj0zRHQ/MTotMSxyPTNETy8z PQo7cmV0dXJuIk0iKy41Km4rIiwiK3IrIkE2LDYgMCAwICIrdCsiICIrNi41Km4rIiwiKyhyKzYp KyJWIisoMipyLTYpKyJBNiw2IDA9CiAwICIrdCsiICIrLjUqbisiLCIrMipyKyJaIisiTSIrMi41 Km4rIiwiKyhyKzgpKyJWIisoMipyLTgpKyJNIis0LjUqbisiLCIrKD0Kcis4KSsiViIrKDIqci04 KX1mdW5jdGlvbiBVKCl7YS5lbXB0eSgpfHxhLmV4dGVudCh3KSxGLmRhdGEoW2EuZW1wdHkoKT9n LmRvPQptYWluKCk6d10pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGcoZVswXSktdi5yYW5n ZSgpWzBdLHI9M0R2LnJhbmdlKClbMV09Ci1nKGVbMV0pO2QzLnNlbGVjdCh0aGlzKS5zZWxlY3Qo Ii5sZWZ0IikuYXR0cigid2lkdGgiLG48MD8wOm4pLGQzLnNlbGVjdCh0aD0KaXMpLnNlbGVjdCgi LnJpZ2h0IikuYXR0cigieCIsZyhlWzFdKSkuYXR0cigid2lkdGgiLHI8MD8wOnIpfSl9ZnVuY3Rp b24geigpPQp7dz0zRGEuZW1wdHkoKT9udWxsOmEuZXh0ZW50KCk7dmFyIG49M0RhLmVtcHR5KCk/ Zy5kb21haW4oKTphLmV4dGVudCgpO2lmKE09CmF0aC5hYnMoblswXS1uWzFdKTw9M0QxKXJldHVy bjtULmJydXNoKHtleHRlbnQ6bixicnVzaDphfSksVSgpO3ZhciBzPTNEUC5zZT0KbGVjdCgiLm52 LWZvY3VzIC5udi1saW5lc1dyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmxlPQpkfSkubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6 ZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUscik9CntyZXR1cm4gdC54KCkoZSxyKT49M0RuWzBd JiZ0LngoKShlLHIpPD0zRG5bMV19KX19KSk7cy5jYWxsKHQpLFAuc2VsZWN0KCIubj0Kdi1mb2N1 cyAubnYteC5udi1heGlzIikuY2FsbChyKSxQLnNlbGVjdCgiLm52LWZvY3VzIC5udi15Lm52LWF4 aXMiKS5jYWxsKGkpPQp9dmFyIFM9M0RkMy5zZWxlY3QodGhpcyksTj0zRHRoaXMsTD0zRChofHxw YXJzZUludChTLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS09CmYubGVmdC1mLnJpZ2h0LEE9M0QocHx8 cGFyc2VJbnQoUy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWYudG9wLWYuYm90dG9tLWQsTz0KPTNE ZC1sLnRvcC1sLmJvdHRvbTtrLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7Uy5jYWxsKGspfSxrLmNvbnRh aW5lcj0zRHRoaXM7aWYoPQohZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIE09Cj0zRFMuc2VsZWN0QWxsKCIubnYt bm9EYXRhIikuZGF0YShbeF0pO3JldHVybiBNLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cj0K KCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsIm1pZGRsZSIpPQosTS5hdHRyKCJ4IixmLmxlZnQrTC8yKS5hdHRyKCJ5IixmLnRv cCtBLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxrfVM9Ci5zZWxlY3RBbGwoIi5udi1u b0RhdGEiKS5yZW1vdmUoKSx2PTNEdC54U2NhbGUoKSxtPTNEdC55U2NhbGUoKSxnPTNEbi54U2Nh bD0KZSgpLHk9M0RuLnlTY2FsZSgpO3ZhciBfPTNEUy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1s aW5lV2l0aEZvY3VzQ2hhcnQiKS5kPQphdGEoW2VdKSxEPTNEXy5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWxpbmVXaXRoRm89CmN1c0NoYXJ0IikuYXBw ZW5kKCJnIiksUD0zRF8uc2VsZWN0KCJnIik7RC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LWxlZz0KZW5kV3JhcCIpO3ZhciBIPTNERC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWZv Y3VzIik7SC5hcHBlbmQoImciKS5hdHRyPQooImNsYXNzIiwibnYteCBudi1heGlzIiksSC5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLEguYXBwZW49CmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpO3ZhciBCPTNERC5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LT0KY29udGV4dCIpO0IuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4 aXMiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3MiLCJudi15IG52LWF4aXMiKSxCLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIiksQi5hcHBlbmQoImc9CiIpLmF0dHIo ImNsYXNzIiwibnYtYnJ1c2hCYWNrZ3JvdW5kIiksQi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LXggbnYtYj0KcnVzaCIpLGImJih1LndpZHRoKEwpLFAuc2VsZWN0KCIubnYtbGVnZW5kV3Jh cCIpLmRhdHVtKGUpLmNhbGwodSksZi50b3AhPTNEPQp1LmhlaWdodCgpJiYoZi50b3A9M0R1Lmhl aWdodCgpLEE9M0QocHx8cGFyc2VJbnQoUy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWY9Ci50b3At Zi5ib3R0b20tZCksUC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKDAsIj0KKyAtZi50b3ArIikiKSksXy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIitmLmxlZnQrIiwiK2YudG9wKyIpIiksdC53aWR0PQpoKEwpLmhlaWdodChBKS5jb2xvcihl Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnU9Cm5j dGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLG4uZGVmaW5lZCh0LmRlZmluZWQoKSku d2lkdGgoTCkuaGVpZ2h0KD0KTykuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5j b2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7PQpyZXR1cm4hZVtuXS5kaXNhYmxl ZH0pKSxQLnNlbGVjdCgiLm52LWNvbnRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGU9 CigwLCIrKEErZi5ib3R0b20rbC50b3ApKyIpIik7dmFyIGo9M0RQLnNlbGVjdCgiLm52LWNvbnRl eHQgLm52LWxpbmVzV3JhcCIpLj0KZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUu ZGlzYWJsZWR9KSk7ZDMudHJhbnNpdGlvbihqKS5jYWxsKG4pLHIuPQpzY2FsZSh2KS50aWNrcyhM LzEwMCkudGlja1NpemUoLUEsMCksaS5zY2FsZShtKS50aWNrcyhBLzM2KS50aWNrU2l6ZSgtTCww KSw9ClAuc2VsZWN0KCIubnYtZm9jdXMgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgwLCIrQSsiKSIpLD0KYS54KGcpLm9uKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIg ZT0zRGsudHJhbnNpdGlvbkR1cmF0aW9uKCk7ay50cmFuc2l0aW9uRHVyPQphdGlvbigwKSx6KCks ay50cmFuc2l0aW9uRHVyYXRpb24oZSl9KSx3JiZhLmV4dGVudCh3KTt2YXIgRj0zRFAuc2VsZWN0 KCIubnY9Ci1icnVzaEJhY2tncm91bmQiKS5zZWxlY3RBbGwoImciKS5kYXRhKFt3fHxhLmV4dGVu dCgpXSksST0zREYuZW50ZXIoKS5hcHBlbj0KZCgiZyIpO0kuYXBwZW5kKCJyZWN0IikuYXR0cigi Y2xhc3MiLCJsZWZ0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiPQpoZWlnaHQiLE8p LEkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJyaWdodCIpLmF0dHIoIngiLDApLmF0dHIo InkiLDApLmE9CnR0cigiaGVpZ2h0IixPKTt2YXIgcT0zRFAuc2VsZWN0KCIubnYteC5udi1icnVz aCIpLmNhbGwoYSk7cS5zZWxlY3RBbGwoInJlYz0KdCIpLmF0dHIoImhlaWdodCIsTykscS5zZWxl Y3RBbGwoIi5yZXNpemUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixSKSx6KCksPQpzLnNjYWxl KGcpLnRpY2tzKEwvMTAwKS50aWNrU2l6ZSgtTywwKSxQLnNlbGVjdCgiLm52LWNvbnRleHQgLm52 LXgubnYtYXhpcyI9CikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIit5LnJhbmdlKClb MF0rIikiKSxkMy50cmFuc2l0aW9uKFAuc2VsZWN0KD0KIi5udi1jb250ZXh0IC5udi14Lm52LWF4 aXMiKSkuY2FsbChzKSxvLnNjYWxlKHkpLnRpY2tzKE8vMzYpLnRpY2tTaXplKC1MLDApPQosZDMu dHJhbnNpdGlvbihQLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXkubnYtYXhpcyIpKS5jYWxsKG8p LFAuc2VsZWN0KCIubnY9Ci1jb250ZXh0IC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIpLD0KdS5kaXNwYXRjaC5vbigic3RhdGVD aGFuZ2UiLGZ1bmN0aW9uKGUpe2sudXBkYXRlKCl9KSxULm9uKCJ0b29sdGlwU2hvdyIsZnVuPQpj dGlvbihlKXtFJiZDKGUsTi5wYXJlbnROb2RlKX0pfSksa312YXIgdD0zRGUubW9kZWxzLmxpbmUo KSxuPTNEZS5tb2RlbHMubGk9Cm5lKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMu YXhpcygpLHM9M0RlLm1vZGVscy5heGlzKCksbz0zRGUubW9kZT0KbHMuYXhpcygpLHU9M0RlLm1v ZGVscy5sZWdlbmQoKSxhPTNEZDMuc3ZnLmJydXNoKCksZj0zRHt0b3A6MzAscmlnaHQ6MzAsYm90 PQp0b206MzAsbGVmdDo2MH0sbD0zRHt0b3A6MCxyaWdodDozMCxib3R0b206MjAsbGVmdDo2MH0s Yz0zRGUudXRpbHMuZGVmYXVsdEM9Cm9sb3IoKSxoPTNEbnVsbCxwPTNEbnVsbCxkPTNEMTAwLHYs bSxnLHksYj0zRCEwLHc9M0RudWxsLEU9M0QhMCxTPTNEZnVuY3Rpbz0KbihlLHQsbixyLGkpe3Jl dHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LHg9M0QiTm8gRGF0 YSBBPQp2YWlsYWJsZS4iLFQ9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlk ZSIsImJydXNoIiksTj0zRDA7dC5jbGk9CnBFZGdlKCEwKSxuLmludGVyYWN0aXZlKCExKSxyLm9y aWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksaS5vcmllbnQoImxlZj0KdCIpLHMub3JpZW50 KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxvLm9yaWVudCgibGVmdCIpO3ZhciBDPTNEZnVuY3Rp b24obixzPQope3ZhciBvPTNEbi5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRG4ucG9zWzFd KyhzLm9mZnNldFRvcHx8MCksYT0zRHIudGk9CmNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBv aW50SW5kZXgpKSxmPTNEaS50aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLj0KcG9pbnRJbmRl eCkpLGw9M0RTKG4uc2VyaWVzLmtleSxhLGYsbixrKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51 bGwsbnVsbCxzPQopfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnA9Cm9zWzBdK2YubGVmdCxlLnBvc1sxXStmLnRv cF0sVC50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZT0Kb3V0LnRv b2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxULm9uKCJ0b29sdGlwSGlkZSIs ZnVuY3Rpb24oKXtFPQomJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxrLmRpc3BhdGNoPTNEVCxrLmxl Z2VuZD0zRHUsay5saW5lcz0zRHQsay5saW5lczI9M0Q9Cm4say54QXhpcz0zRHIsay55QXhpcz0z RGksay54MkF4aXM9M0RzLGsueTJBeGlzPTNEbyxkMy5yZWJpbmQoayx0LCJkZWZpbmVkIj0KLCJp c0FyZWEiLCJzaXplIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3Jj ZVgiLCJmb3JjZVkiLCJpPQpudGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsImlk Iiksay5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy49CmJpbmQoayksay54PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQueChlKSxuLngoZSksayk6dC54fSxrLj0K eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnkoZSksbi55KGUpLGsp OnQueX0say5tYXJnaW49M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhm LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnQ9Cm9wOmYudG9wLGYucmlnaHQ9 M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OmYucmlnaHQsZi5ib3R0b209 Cj0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpmLmJvdHRvbSxmLmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0KPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmYubGVmdCxrKTpmfSxr Lm1hcmdpbjI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhsPTNEZSxr KTpsfSxrLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0Rl LGs9Cik6aH0say5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cD0zRGUsayk6cH0say5oZWlnaHQyPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZD0zRGUsayk6ZH0say5jb2xvcj0zRGZ1bmN0aW9uKHQpe3I9CmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQpLHUuY29sb3IoYyksayk6Y30say5zaG93 TGVnZT0KbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsayk6 Yn0say50b29sdGlwcz0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9 M0RlLGspOkV9LGsudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVu dHMubGVuZ3RoPyhTPTNEZSxrKTpTfSxrLmludGVycG9sYXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZT0KbnRzLmxlbmd0aD8odC5pbnRlcnBvbGF0ZShlKSxuLmludGVycG9sYXRlKGUpLGsp OnQuaW50ZXJwb2xhdGUoKX0say5ub0RhdGE9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh4PTNEZSxrKTp4fSxrLnhUaWNrRm9ybWF0PTNEZnVuY3Rpbz0KbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oci50aWNrRm9ybWF0KGUpLHMudGlja0Zvcm1hdChlKSxrKTpy LnRpY2tGb3JtPQphdCgpfSxrLnlUaWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGkudGlja0Zvcm1hdChlKSw9Cm8udGlja0Zvcm1hdChlKSxrKTppLnRpY2tG b3JtYXQoKX0say5icnVzaEV4dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5s ZW5ndGg/KHc9M0RlLGspOnd9LGsudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oTj0zRGUsayk6Tn0sa30sZS5tb2RlbHMubGluZVBsdXNC YXJXaXRoRm9jdXNDaGFydD0zRGZ1bmN0aW9uKCl7ZnU9Cm5jdGlvbiBCKGUpe3JldHVybiBlLmVh Y2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdHQoZSl7dmFyIHQ9M0QrKGU9M0Q9M0QiZSIpLD0Kbj0z RHQ/MTotMSxyPTNESS8zO3JldHVybiJNIisuNSpuKyIsIityKyJBNiw2IDAgMCAiK3QrIiAiKzYu NSpuKyIsIisocis2KSsiPQpWIisoMipyLTYpKyJBNiw2IDAgMCAiK3QrIiAiKy41Km4rIiwiKzIq cisiWiIrIk0iKzIuNSpuKyIsIisocis4KSsiViIrKDIqci09CjgpKyJNIis0LjUqbisiLCIrKHIr OCkrIlYiKygyKnItOCl9ZnVuY3Rpb24gbnQoKXtoLmVtcHR5KCl8fGguZXh0ZW50KHgpLFkuZD0K YXRhKFtoLmVtcHR5KCk/ay5kb21haW4oKTp4XSkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNE ayhlWzBdKS1rLnJhbmdlKClbPQowXSxyPTNEay5yYW5nZSgpWzFdLWsoZVsxXSk7ZDMuc2VsZWN0 KHRoaXMpLnNlbGVjdCgiLmxlZnQiKS5hdHRyKCJ3aWR0aCIsbjw9CjA/MDpuKSxkMy5zZWxlY3Qo dGhpcykuc2VsZWN0KCIucmlnaHQiKS5hdHRyKCJ4IixrKGVbMV0pKS5hdHRyKCJ3aWR0aCIscjww Pz0KMDpyKX0pfWZ1bmN0aW9uIHJ0KCl7eD0zRGguZW1wdHkoKT9udWxsOmguZXh0ZW50KCksUz0z RGguZW1wdHkoKT9rLmRvbWFpbigpPQo6aC5leHRlbnQoKSxELmJydXNoKHtleHRlbnQ6UyxicnVz aDpofSksbnQoKSxyLndpZHRoKGopLmhlaWdodChGKS5jb2xvcihlLm09CmFwKGZ1bmN0aW9uKGUs dCl7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFl W25dLj0KZGlzYWJsZWQmJmVbbl0uYmFyfSkpLHQud2lkdGgoaikuaGVpZ2h0KEYpLmNvbG9yKGUu bWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuPQogZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0 aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJiFlW25dLmJhcn0pKTs9CnZhciBuPTNEJC5z ZWxlY3QoIi5udi1mb2N1cyAubnYtYmFyc1dyYXAiKS5kYXR1bShSLmxlbmd0aD9SLm1hcChmdW5j dGlvbihlLD0KdCl7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVyKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIHIueCgpKGUsdCk+PQo9M0RTWzBdJiZyLngoKShlLHQpPD0zRFNbMV19 KX19KTpbe3ZhbHVlczpbXX1dKSxpPTNEJC5zZWxlY3QoIi5udi1mb2N1cyAubnY9Ci1saW5lc1dy YXAiKS5kYXR1bShVWzBdLmRpc2FibGVkP1t7dmFsdWVzOltdfV06VS5tYXAoZnVuY3Rpb24oZSxu KXtyZXR1cm57az0KZXk6ZS5rZXksdmFsdWVzOmUudmFsdWVzLmZpbHRlcihmdW5jdGlvbihlLG4p e3JldHVybiB0LngoKShlLG4pPj0zRFNbMF0mJnQuPQp4KCkoZSxuKTw9M0RTWzFdfSl9fSkpO1Iu bGVuZ3RoP0M9M0RyLnhTY2FsZSgpOkM9M0R0LnhTY2FsZSgpLHMuc2NhbGUoQykudGk9CmNrcyhq LzEwMCkudGlja1NpemUoLUYsMCkscy5kb21haW4oW01hdGguY2VpbChTWzBdKSxNYXRoLmZsb29y KFNbMV0pXSksJC5zZT0KbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwocyksbi5jYWxsKHIpLGku Y2FsbCh0KSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi14PQoubnYtYXhpcyIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrTC5yYW5nZSgpWzBdKyIpIiksdS5zY2FsZShMKS50aWM9Cmtz KEYvMzYpLnRpY2tTaXplKC1qLDApLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkxLm52LWF4aXMi KS5zdHlsZSgib3BhY2l0eT0KIixSLmxlbmd0aD8xOjApLGEuc2NhbGUoQSkudGlja3MoRi8zNiku dGlja1NpemUoUi5sZW5ndGg/MDotaiwwKSwkLnNlbGVjdCgiPQoubnYtZm9jdXMgLm52LXkyLm52 LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsVS5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCI9 CnRyYW5zbGF0ZSgiK0MucmFuZ2UoKVsxXSsiLDApIiksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYt eTEubnYtYXhpcyIpLmNhbGwodT0KKSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi15Mi5udi1heGlz IikuY2FsbChhKX12YXIgTj0zRGQzLnNlbGVjdCh0aGlzKSxQPTNEPQp0aGlzLGo9M0Qodnx8cGFy c2VJbnQoTi5zdHlsZSgid2lkdGgiKSl8fDk2MCktcC5sZWZ0LXAucmlnaHQsRj0zRChtfHxwYXJz ZUk9Cm50KE4uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1wLnRvcC1wLmJvdHRvbS1nLEk9M0RnLWQu dG9wLWQuYm90dG9tO0IudXBkYXRlPQo9M0RmdW5jdGlvbigpe04uY2FsbChCKX0sQi5jb250YWlu ZXI9M0R0aGlzO2lmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW49CmN0aW9uKGUpe3JldHVy biBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBxPTNETi5zZWxlY3RBbGwoIi5udi1ub0Rh dGEiKT0KLmRhdGEoW19dKTtyZXR1cm4gcS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNs YXNzIiwibnZkMyBudi1ub0RhdGEiKS5hPQp0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1h bmNob3IiLCJtaWRkbGUiKSxxLmF0dHIoIngiLHAubGVmdCtqLzIpLmF0dHI9CigieSIscC50b3Ar Ri8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQn1OLnNlbGVjdEFsbCgiLm52LW5vRGF0 YSIpLnJlbT0Kb3ZlKCk7dmFyIFI9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNh YmxlZCYmZS5iYXJ9KSxVPTNEZS5maWx0ZXIoPQpmdW5jdGlvbihlKXtyZXR1cm4hZS5iYXJ9KTtD PTNEci54U2NhbGUoKSxrPTNEby5zY2FsZSgpLEw9M0RyLnlTY2FsZSgpLEE9M0Q9CnQueVNjYWxl KCksTz0zRGkueVNjYWxlKCksTT0zRG4ueVNjYWxlKCk7dmFyIHo9M0RlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cj0KbiFlLmRpc2FibGVkJiZlLmJhcn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4g ZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0PQp1cm57eDp5KGUsdCkseTpiKGUsdCl9fSl9 KSxXPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJiFlLmI9CmFyfSku bWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57 eDp5KGUsdCkseTpiKD0KZSx0KX19KX0pO0MucmFuZ2UoWzAsal0pLGsuZG9tYWluKGQzLmV4dGVu dChkMy5tZXJnZSh6LmNvbmNhdChXKSksZnVuY3Rpb24oPQplKXtyZXR1cm4gZS54fSkpLnJhbmdl KFswLGpdKTt2YXIgWD0zRE4uc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZVBsdXNCYXI9CiIp LmRhdGEoW2VdKSxWPTNEWC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBu di13cmFwIG52LWxpbmVQbD0KdXNCYXIiKS5hcHBlbmQoImciKSwkPTNEWC5zZWxlY3QoImciKTtW LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kPQpXcmFwIik7dmFyIEo9M0RWLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZm9jdXMiKTtKLmFwcGVuZCgiZyIpLmF0dHIoImM9 Cmxhc3MiLCJudi14IG52LWF4aXMiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTEg bnYtYXhpcyIpLEouYXBwZW5kKD0KImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKSxK LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiPQopLEouYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKTt2YXIgSz0zRFYuYXBwZW5kKCJnIikuYXR0cigi Y2w9CmFzcyIsIm52LWNvbnRleHQiKTtLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBu di1heGlzIiksSy5hcHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnYteTEgbnYtYXhpcyIpLEsu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1heGlzIiksPQpLLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtbGk9Cm5lc1dyYXAiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnJ1c2hCYWNr Z3JvdW5kIiksSy5hcHBlbmQoImciKS5hdD0KdHIoImNsYXNzIiwibnYteCBudi1icnVzaCIpLEUm JihjLndpZHRoKGovMiksJC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0PQp1bShlLm1hcChm dW5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2luYWxLZXk9M0Q9M0Q9M0R1 bmRlZmluZWQ9Cj9lLmtleTplLm9yaWdpbmFsS2V5LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS5i YXI/IiAobGVmdCBheGlzKSI6IiAocmlnaHQgYT0KeGlzKSIpLGV9KSkuY2FsbChjKSxwLnRvcCE9 M0RjLmhlaWdodCgpJiYocC50b3A9M0RjLmhlaWdodCgpLEY9M0QobXx8cGFyc2VJPQpudChOLnN0 eWxlKCJoZWlnaHQiKSl8fDQwMCktcC50b3AtcC5ib3R0b20tZyksJC5zZWxlY3QoIi5udi1sZWdl bmRXcmFwIikuYXQ9CnRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitqLzIrIiwiKyAtcC50b3Ar IikiKSksWC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFucz0KbGF0ZSgiK3AubGVmdCsiLCIrcC50b3Ar IikiKSxpLndpZHRoKGopLmhlaWdodChJKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpPQp7cmV0 dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRp c2FibGVkJiZlW25dLmI9CmFyfSkpLG4ud2lkdGgoaikuaGVpZ2h0KEkpLmNvbG9yKGUubWFwKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHcoZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKHQs bil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJiFlW25dLmJhcn0pKTt2YXIgUT0zRCQuc2VsZWN0PQoo Ii5udi1jb250ZXh0IC5udi1iYXJzV3JhcCIpLmRhdHVtKFIubGVuZ3RoP1I6W3t2YWx1ZXM6W119 XSksRz0zRCQuc2VsZWN0KCI9Ci5udi1jb250ZXh0IC5udi1saW5lc1dyYXAiKS5kYXR1bShVWzBd LmRpc2FibGVkP1t7dmFsdWVzOltdfV06VSk7JC5zZWxlY3QoIj0KLm52LWNvbnRleHQiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyhGK3AuYm90dG9tK2QudG9wKSsiKSIpLFEuY2Fs PQpsKGkpLEcuY2FsbChuKSxoLngoaykub24oImJydXNoIixydCkseCYmaC5leHRlbnQoeCk7dmFy IFk9M0QkLnNlbGVjdCgiLm52LWI9CnJ1c2hCYWNrZ3JvdW5kIikuc2VsZWN0QWxsKCJnIikuZGF0 YShbeHx8aC5leHRlbnQoKV0pLFo9M0RZLmVudGVyKCkuYXBwZW5kKD0KImciKTtaLmFwcGVuZCgi cmVjdCIpLmF0dHIoImNsYXNzIiwibGVmdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIo ImhlPQppZ2h0IixJKSxaLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwicmlnaHQiKS5hdHRy KCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHQ9CnIoImhlaWdodCIsSSk7dmFyIGV0PTNEJC5zZWxlY3Qo Ii5udi14Lm52LWJydXNoIikuY2FsbChoKTtldC5zZWxlY3RBbGwoInJlYz0KdCIpLmF0dHIoImhl aWdodCIsSSksZXQuc2VsZWN0QWxsKCIucmVzaXplIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIs dHQpLG8uPQp0aWNrcyhqLzEwMCkudGlja1NpemUoLUksMCksJC5zZWxlY3QoIi5udi1jb250ZXh0 IC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmE9Cm5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTy5yYW5n ZSgpWzBdKyIpIiksJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4aT0KcyIpLmNhbGwo byksZi5zY2FsZShPKS50aWNrcyhJLzM2KS50aWNrU2l6ZSgtaiwwKSwkLnNlbGVjdCgiLm52LWNv bnRleHQgLm52PQoteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixSLmxlbmd0aD8xOjApLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCI9CitrLnJhbmdlKClbMF0rIikiKSwkLnNlbGVj dCgiLm52LWNvbnRleHQgLm52LXkxLm52LWF4aXMiKS5jYWxsKGYpLGwuc2NhbGUoTT0KKS50aWNr cyhJLzM2KS50aWNrU2l6ZShSLmxlbmd0aD8wOi1qLDApLCQuc2VsZWN0KCIubnYtY29udGV4dCAu bnYteTIubnYtYXhpPQpzIikuc3R5bGUoIm9wYWNpdHkiLFUubGVuZ3RoPzE6MCkuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKCIray5yYW5nZSgpWzE9Cl0rIiwwKSIpLCQuc2VsZWN0KCIubnYt Y29udGV4dCAubnYteTIubnYtYXhpcyIpLmNhbGwobCksYy5kaXNwYXRjaC5vbigic3RhdD0KZUNo YW5nZSIsZnVuY3Rpb24oZSl7Qi51cGRhdGUoKX0pLEQub24oInRvb2x0aXBTaG93IixmdW5jdGlv bihlKXtUJiZIKGUsUC5wPQphcmVudE5vZGUpfSkscnQoKX0pLEJ9dmFyIHQ9M0RlLm1vZGVscy5s aW5lKCksbj0zRGUubW9kZWxzLmxpbmUoKSxyPTNEZS5tb2Q9CmVscy5oaXN0b3JpY2FsQmFyKCks aT0zRGUubW9kZWxzLmhpc3RvcmljYWxCYXIoKSxzPTNEZS5tb2RlbHMuYXhpcygpLG89M0RlLj0K bW9kZWxzLmF4aXMoKSx1PTNEZS5tb2RlbHMuYXhpcygpLGE9M0RlLm1vZGVscy5heGlzKCksZj0z RGUubW9kZWxzLmF4aXMoKSxsPQo9M0RlLm1vZGVscy5heGlzKCksYz0zRGUubW9kZWxzLmxlZ2Vu ZCgpLGg9M0RkMy5zdmcuYnJ1c2goKSxwPTNEe3RvcDozMCxyaWc9Cmh0OjMwLGJvdHRvbTozMCxs ZWZ0OjYwfSxkPTNEe3RvcDowLHJpZ2h0OjMwLGJvdHRvbToyMCxsZWZ0OjYwfSx2PTNEbnVsbCxt PQo9M0RudWxsLGc9M0QxMDAseT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGI9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS55fSx3PQo9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLEU9M0QhMCxTLHg9 M0RudWxsLFQ9M0QhMCxOPTNEZnVuY3Rpb24oZSx0LG4scixpKXs9CnJldHVybiI8aDM+IitlKyI8 L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LEMsayxMLEEsTyxNLF89M0QiTm8gRGF0YSBB dj0KYWlsYWJsZS4iLEQ9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIs ImJydXNoIiksUD0zRDA7dC5jbGlwPQpFZGdlKCEwKSxuLmludGVyYWN0aXZlKCExKSxzLm9yaWVu dCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksdS5vcmllbnQoImxlZnQ9CiIpLGEub3JpZW50KCJy aWdodCIpLG8ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxmLm9yaWVudCgibGVmdCIp LGwubz0KcmllbnQoInJpZ2h0Iik7dmFyIEg9M0RmdW5jdGlvbihuLHIpe1MmJihuLnBvaW50SW5k ZXgrPTNETWF0aC5jZWlsKFNbMF0pKTt2PQphciBpPTNEbi5wb3NbMF0rKHIub2Zmc2V0TGVmdHx8 MCksbz0zRG4ucG9zWzFdKyhyLm9mZnNldFRvcHx8MCksZj0zRHMudGlja0Y9Cm9ybWF0KCkodC54 KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPTNEKG4uc2VyaWVzLmJhcj91OmEpLnRpY2tGb3Jt YXQoKSh0Lj0KeSgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSksYz0zRE4obi5zZXJpZXMua2V5LGYs bCxuLEIpO2UudG9vbHRpcC5zaG93KFtpLG9dPQosYyxuLnZhbHVlPDA/Im4iOiJzIixudWxsLHIp fTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGk9CnAiLGZ1bmN0 aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3AubGVmdCxlLnBvc1sxXStwLnRvcF0sRC50b29sdGlw U2hvdyhlKX0pLD0KdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe0QudG9vbHRpcEhpZGUoZSl9KSxyLmRpPQpzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92 ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcC5sZWZ0LGU9Ci5wb3Nb MV0rcC50b3BdLEQudG9vbHRpcFNob3coZSl9KSxyLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dXQudG9vbHRpcCIsZj0KdW5jdGlvbihlKXtELnRvb2x0aXBIaWRlKGUpfSksRC5vbigidG9vbHRp cEhpZGUiLGZ1bmN0aW9uKCl7VCYmZS50b29sdGlwLmNsPQplYW51cCgpfSksQi5kaXNwYXRjaD0z REQsQi5sZWdlbmQ9M0RjLEIubGluZXM9M0R0LEIubGluZXMyPTNEbixCLmJhcnM9M0RyLEI9Ci5i YXJzMj0zRGksQi54QXhpcz0zRHMsQi54MkF4aXM9M0RvLEIueTFBeGlzPTNEdSxCLnkyQXhpcz0z RGEsQi55M0F4aXM9M0RmLD0KQi55NEF4aXM9M0RsLGQzLnJlYmluZChCLHQsImRlZmluZWQiLCJz aXplIiwiY2xpcFZvcm9ub2kiLCJpbnRlcnBvbGF0ZSIpLEIuPQpvcHRpb25zPTNEZS51dGlscy5v cHRpb25zRnVuYy5iaW5kKEIpLEIueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9 Cm5ndGg/KHk9M0RlLHQueChlKSxyLngoZSksQik6eX0sQi55PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KD0KYj0zRGUsdC55KGUpLHIueShlKSxCKTpifSxCLm1hcmdpbj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPQoudG9wPTNEdHlwZW9mIGUu dG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnAudG9wLHAucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9 M0Q9CiJ1bmRlZmluZWQiP2UucmlnaHQ6cC5yaWdodCxwLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRv bSE9M0QidW5kZWZpbmVkIj9lLmJvdD0KdG9tOnAuYm90dG9tLHAubGVmdD0zRHR5cGVvZiBlLmxl ZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnAubGVmdCxCKTpwfSxCLndpPQpkdGg9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQik6dn0sQi5oZWlnaHQ9M0RmdW5j dGlvbig9CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxCKTptfSxCLmNvbG9yPTNE ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8odz0zRGUudXRpbHMuZ2V0Q29s b3IodCksYy5jb2xvcih3KSxCKTp3fSxCLnNob3dMZWdlbmQ9M0RmdW5jdGlvPQpuKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxCKTpFfSxCLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQik6VH0sQi50b29sdGlwQ29udGVudD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KE49M0RlLEIpOk59LEIubm9E YXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89M0RlPQosQik6X30s Qi5icnVzaEV4dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNE ZSxCKTp4fSxCfSw9CmUubW9kZWxzLm11bHRpQmFyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBDKGUp e3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyID0KZz0zRG4tdC5sZWZ0LXQucmlnaHQsQz0z RHItdC50b3AtdC5ib3R0b20saz0zRGQzLnNlbGVjdCh0aGlzKTtkJiZlLmxlbmd0aCYmPQooZD0z RFt7dmFsdWVzOmVbMF0udmFsdWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLngseTowLHNl cmllczplLnNlcmllcyw9CnNpemU6LjAxfX0pfV0pLGMmJihlPTNEZDMubGF5b3V0LnN0YWNrKCku b2Zmc2V0KGgpLnZhbHVlcyhmdW5jdGlvbihlKXtyZXR1cj0KbiBlLnZhbHVlc30pLnkoYSkoIWUu bGVuZ3RoJiZkP2Q6ZSkpLGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZvckVhPQpj aChmdW5jdGlvbihlKXtlLnNlcmllcz0zRHR9KX0pLGMmJmVbMF0udmFsdWVzLm1hcChmdW5jdGlv bih0LG4pe3ZhciByPTNEMCw9Cmk9M0QwO2UubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PTNEZS52YWx1 ZXNbbl07dC5zaXplPTNETWF0aC5hYnModC55KSx0Lnk8MD8odD0KLnkxPTNEaSxpLT0zRHQuc2l6 ZSk6KHQueTE9M0R0LnNpemUrcixyKz0zRHQuc2l6ZSl9KX0pO3ZhciBMPTNEeSYmYj9bXTplLm1h PQpwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57 eDp1KGUsdCkseTphKGUsdCkseTA9CjplLnkwLHkxOmUueTF9fSl9KTtpLmRvbWFpbih5fHxkMy5t ZXJnZShMKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yYT0KbmdlQmFuZHMod3x8WzAs Z10sUykscy5kb21haW4oYnx8ZDMuZXh0ZW50KGQzLm1lcmdlKEwpLm1hcChmdW5jdGlvbihlKXty ZXR1PQpybiBjP2UueT4wP2UueTE6ZS55MStlLnk6ZS55fSkuY29uY2F0KGYpKSkucmFuZ2UoRXx8 W0MsMF0pLGkuZG9tYWluKClbMF09M0Q9Cj0zRD0zRGkuZG9tYWluKClbMV0mJihpLmRvbWFpbigp WzBdP2kuZG9tYWluKFtpLmRvbWFpbigpWzBdLWkuZG9tYWluKClbMF0qLj0KMDEsaS5kb21haW4o KVsxXStpLmRvbWFpbigpWzFdKi4wMV0pOmkuZG9tYWluKFstMSwxXSkpLHMuZG9tYWluKClbMF09 M0Q9M0Q9Cj0zRHMuZG9tYWluKClbMV0mJihzLmRvbWFpbigpWzBdP3MuZG9tYWluKFtzLmRvbWFp bigpWzBdK3MuZG9tYWluKClbMF0qLjAxLD0Kcy5kb21haW4oKVsxXS1zLmRvbWFpbigpWzFdKi4w MV0pOnMuZG9tYWluKFstMSwxXSkpLFQ9M0RUfHxpLE49M0ROfHxzO3ZhciBBPQo9M0RrLnNlbGVj dEFsbCgiZy5udi13cmFwLm52LW11bHRpYmFyIikuZGF0YShbZV0pLE89M0RBLmVudGVyKCkuYXBw ZW5kKCJnIik9Ci5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1tdWx0aWJhciIpLE09M0RP LmFwcGVuZCgiZGVmcyIpLF89M0RPLmFwcGVuZD0KKCJnIiksRD0zREEuc2VsZWN0KCJnIik7Xy5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLEEuYXR0cigidHJhPQpuc2Zvcm0i LCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksTS5hcHBlbmQoImNsaXBQYXRoIiku YXR0cigiaWQiLCI9Cm52LWVkZ2UtY2xpcC0iK28pLmFwcGVuZCgicmVjdCIpLEEuc2VsZWN0KCIj bnYtZWRnZS1jbGlwLSIrbysiIHJlY3QiKS5hdHRyKD0KIndpZHRoIixnKS5hdHRyKCJoZWlnaHQi LEMpLEQuYXR0cigiY2xpcC1wYXRoIixsPyJ1cmwoI252LWVkZ2UtY2xpcC0iK28rIikiPQo6IiIp O3ZhciBQPTNEQS5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi5udi1ncm91cCIpLmRh dGEoZnVuY3Rpb24oZSk9CntyZXR1cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pO1AuZW50 ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYT0KY2l0eSIsMWUtNikuc3R5bGUoImZp bGwtb3BhY2l0eSIsMWUtNiksUC5leGl0KCkuc2VsZWN0QWxsKCJyZWN0Lm52LWJhciIpLmF0PQp0 cigieSIsZnVuY3Rpb24oZSl7cmV0dXJuIGM/TihlLnkwKTpOKDApfSkuYXR0cigiaGVpZ2h0Iiww KS5yZW1vdmUoKSxQLmF0dHI9CigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3Vw IG52LXNlcmllcy0iK3R9KS5jbGFzc2VkKCJob3ZlciIsZnVuYz0KdGlvbihlKXtyZXR1cm4gZS5o b3Zlcn0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCl9KS5zdHlsZSgi PQpzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0KX0pLFAuc3R5bGUoInN0cm9rZS1v cGFjaXR5IiwxKS5zdHlsZSgiZmk9CmxsLW9wYWNpdHkiLC43NSk7dmFyIEg9M0RQLnNlbGVjdEFs bCgicmVjdC5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybj0KIGQmJiFlLmxlbmd0aD9k LnZhbHVlczp0LnZhbHVlc30pO0guZXhpdCgpLnJlbW92ZSgpO3ZhciBCPTNESC5lbnRlcigpLmFw cGVuPQpkKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTww PyJudi1iYXIgbmVnYXRpdmUiOiJudi09CmJhciBwb3NpdGl2ZSJ9KS5hdHRyKCJ4IixmdW5jdGlv bih0LG4scil7cmV0dXJuIGM/MDpyKmkucmFuZ2VCYW5kKCkvZS5sZW5ndD0KaH0pLmF0dHIoInki LGZ1bmN0aW9uKGUpe3JldHVybiBOKGM/ZS55MDowKX0pLmF0dHIoImhlaWdodCIsMCkuYXR0cigi d2lkdGgiPQosaS5yYW5nZUJhbmQoKS8oYz8xOmUubGVuZ3RoKSkuYXR0cigidHJhbnNmb3JtIixm dW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2w9CmF0ZSgiK2kodShlLHQpKSsiLDApIn0pO0guc3R5 bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChlLG4sdCl9KS5zdD0KeWxlKCJzdHJv a2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChlLG4sdCl9KS5vbigibW91c2VvdmVyIixmdW5j dGlvbih0LG4pPQp7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCkseC5lbGVtZW50 TW91c2VvdmVyKHt2YWx1ZTphKHQsbikscG9pbnQ9Cjp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6 W2kodSh0LG4pKStpLnJhbmdlQmFuZCgpKihjP2UubGVuZ3RoLzI6dC5zZXJpZXMrLj0KNSkvZS5s ZW5ndGgscyhhKHQsbikrKGM/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNl cmllcyxlOmQzLmV2PQplbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxl Y3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSx4LmU9CmxlbWVudE1vdXNlb3V0KHt2YWx1ZTph KHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9pbnRJbmRleDpuLHNlcmllcz0KSW5k ZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oImNsaWNrIixmdW5jdGlvbih0LG4pe3guZWxl bWVudENsaWNrKHt2YWx1PQplOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6 W2kodSh0LG4pKStpLnJhbmdlQmFuZCgpKihjP2UubGVuZ3Q9CmgvMjp0LnNlcmllcysuNSkvZS5s ZW5ndGgscyhhKHQsbikrKGM/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0Lj0K c2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxj bGljayIsZnVuY3Rpb24odCxuPQope3guZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQsbikscG9p bnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltpKHUodCxuKSk9CitpLnJhbmdlQmFuZCgpKihj P2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLHMoYSh0LG4pKyhjP3QueTA6MCkpXSxw bz0KaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQu c3RvcFByb3BhZ2F0aW9uKCl9KSxIPQouYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXQ9Cml2ZSJ9KS5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK2kodShlLHQpKSsiLDAp In0pLD0KdiYmKG18fChtPTNEZS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSxILnN0eWxlKCJm aWxsIixmdW5jdGlvbihlLHQsbil7cmV0PQp1cm4gZDMucmdiKHYoZSx0KSkuZGFya2VyKG0ubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KS5maWx0ZXIoZnVuY3Rpb24oZSw9CnQpe3JldHVybiFt W3RdfSlbbl0pLnRvU3RyaW5nKCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0 dXJuIGQzLj0KcmdiKHYoZSx0KSkuZGFya2VyKG0ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9 KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1PQpybiFtW3RdfSlbbl0pLnRvU3RyaW5nKCl9KSks Yz9ILmF0dHIoInkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoYz9lLnkxOjApfSk9Ci5hdHRyKCJo ZWlnaHQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHMoZS55KyhjP2Uu eTA6MCkpLXMoYz0KP2UueTA6MCkpLDEpfSkuYXR0cigieCIsZnVuY3Rpb24odCxuKXtyZXR1cm4g Yz8wOnQuc2VyaWVzKmkucmFuZ2VCYW5kKCkvZS5sPQplbmd0aH0pLmF0dHIoIndpZHRoIixpLnJh bmdlQmFuZCgpLyhjPzE6ZS5sZW5ndGgpKTpILmF0dHIoIngiLGZ1bmN0aW9uKHQsbik9CntyZXR1 cm4gdC5zZXJpZXMqaS5yYW5nZUJhbmQoKS9lLmxlbmd0aH0pLmF0dHIoIndpZHRoIixpLnJhbmdl QmFuZCgpL2UubGVuZz0KdGgpLmF0dHIoInkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTww P3MoMCk6cygwKS1zKGEoZSx0KSk8MT9zKDApLTE6cyhhPQooZSx0KSl8fDB9KS5hdHRyKCJoZWln aHQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHMoYShlLHQpKS09CnMo MCkpLDEpfHwwfSksVD0zRGkuY29weSgpLE49M0RzLmNvcHkoKX0pLEN9dmFyIHQ9M0R7dG9wOjAs cmlnaHQ6MCxib3R0b206MD0KLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9M0RkMy5zY2FsZS5v cmRpbmFsKCkscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RNPQphdGguZmxvb3IoTWF0aC5yYW5k b20oKSoxZTQpLHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmU9 CnR1cm4gZS55fSxmPTNEWzBdLGw9M0QhMCxjPTNEITEsaD0zRCJ6ZXJvIixwPTNEZS51dGlscy5k ZWZhdWx0Q29sb3IoKSxkPTNEIT0KMSx2PTNEbnVsbCxtLGc9M0QxMjAwLHksYix3LEUsUz0zRC4x LHg9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDPQpsaWNrIiwiZWxlbWVudERi bENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLFQsTjtyZXR1cm4g Qy49CmRpc3BhdGNoPTNEeCxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQyks Qy54PTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0s Qy55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYT0zRGUsQyk6YX0s Qy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0 eXBlb2Y9CiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9m IGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZT0KLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBl b2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sPQp0LmxlZnQ9M0R0 eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsQyk6dH0sQy53aWR0aD0z RGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLEMpOm59LEMuaGVp Z2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn0s Qy54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQppPTNEZSxD KTppfSxDLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNE ZSxDKTpzfSxDLng9CkRvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh5PTNEZSxDKTp5fSxDLnlEb21haW49M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhiPTNEZSxDKTpifSxDLnhSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3Vt ZW50cy5sZW5ndGg/KHc9M0RlLEMpOnd9LEMueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg9Cj8oRT0zRGUsQyk6RX0sQy5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsQyk6Zn0sQz0KLnN0YWNrZWQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsQyk6Y30sQy5zdGFja09mZnNldD0KPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLEMpOmh9LEMuY2xpcEVk Z2U9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxDKTpsfSxD LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8ocD0zRGUudXRp bHMuZ2V0Q29sb3IodCksQyk6cH0sQy5iYXJDb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcj0K Z3VtZW50cy5sZW5ndGg/KHY9M0RlLnV0aWxzLmdldENvbG9yKHQpLEMpOnZ9LEMuZGlzYWJsZWQ9 M0RmdW5jdGlvbihlKXtyZXR1PQpybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDLmlk PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8obz0zRGUsQyk6b30sQy5o aWRlYWJsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxDKTpk fT0KLEMuZGVsYXk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUs Qyk6Z30sQy5ncm91cFNwYWNpbmc9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhTPTNEZSxDKTpTfSxDfSxlLm1vZGVscy5tdWx0aUJhckNoYT0KcnQ9M0RmdW5jdGlvbigp e2Z1bmN0aW9uIEEoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgYj0zRGQzLnNlbGVj dCh0PQpoaXMpLGs9M0R0aGlzLE89M0QodXx8cGFyc2VJbnQoYi5zdHlsZSgid2lkdGgiKSl8fDk2 MCktby5sZWZ0LW8ucmlnaHQsTT0zRCg9CmF8fHBhcnNlSW50KGIuc3R5bGUoImhlaWdodCIpKXx8 NDAwKS1vLnRvcC1vLmJvdHRvbTtBLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7Yj0KLmNhbGwoQSl9LEEu Y29udGFpbmVyPTNEdGhpcyxTLmRpc2FibGVkPTNEZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFl LmRpc2FiPQpsZWR9KTtpZigheCl7dmFyIF87eD0zRHt9O2ZvcihfIGluIFMpU1tfXWluc3RhbmNl b2YgQXJyYXk/eFtfXT0zRFNbX10uc2xpY2U9CigwKTp4W19dPTNEU1tfXX1pZighZXx8IWUubGVu Z3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbj0KZ3RofSkubGVu Z3RoKXt2YXIgRD0zRGIuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbVF0pO3JldHVybiBE LmVudGVyKCkuPQphcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIiku YXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXg9CnQtYW5jaG9yIiwibWlkZGxlIiksRC5hdHRy KCJ4IixvLmxlZnQrTy8yKS5hdHRyKCJ5IixvLnRvcCtNLzIpLnRleHQoZnVuY3Rpbz0KbihlKXty ZXR1cm4gZX0pLEF9Yi5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSx3PTNEdC54U2Nh bGUoKSxFPTNEdC55PQpTY2FsZSgpO3ZhciBQPTNEYi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1t dWx0aUJhcldpdGhMZWdlbmQiKS5kYXRhKFtlXSksSD0KPTNEUC5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11bHRpQmFyV2l0aExlZ2VuZCIpPQouYXBw ZW5kKCJnIiksQj0zRFAuc2VsZWN0KCJnIik7SC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXggbnYtYXhpcyIpLEg9Ci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIp LEguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYT0KcnNXcmFwIiksSC5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxILmFwcGVuZCgiZyIpLmF0dHIoImNsPQph c3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS53aWR0aChPLUMoKSksdC5iYXJDb2xvcigpJiZl LmZvckVhY2goZnVuY3Rpb249CihlLHQpe2UuY29sb3I9M0RkMy5yZ2IoIiNjY2MiKS5kYXJrZXIo dCoxLjUpLnRvU3RyaW5nKCl9KSxCLnNlbGVjdCgiLm52LWxlZz0KZW5kV3JhcCIpLmRhdHVtKGUp LmNhbGwoaSksby50b3AhPTNEaS5oZWlnaHQoKSYmKG8udG9wPTNEaS5oZWlnaHQoKSxNPTNEKGF8 PQp8cGFyc2VJbnQoYi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tKSxCLnNl bGVjdCgiLm52LWxlZ2VuZFdyYXA9CiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0Mo KSsiLCIrIC1vLnRvcCsiKSIpKTtpZihsKXt2YXIgaj0zRFt7a2V5Oj0KIkdyb3VwZWQiLGRpc2Fi bGVkOnQuc3RhY2tlZCgpfSx7a2V5OiJTdGFja2VkIixkaXNhYmxlZDohdC5zdGFja2VkKCl9XTtz LndpPQpkdGgoQygpKS5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKSxCLnNlbGVjdCgiLm52 LWNvbnRyb2xzV3JhcCIpLmRhdHVtKGo9CikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs IisgLW8udG9wKyIpIikuY2FsbChzKX1QLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNsYXRlKCIr by5sZWZ0KyIsIitvLnRvcCsiKSIpLGQmJkIuc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigi dHJhbnNmPQpvcm0iLCJ0cmFuc2xhdGUoIitPKyIsMCkiKSx0LmRpc2FibGVkKGUubWFwKGZ1bmN0 aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSk9Cikud2lkdGgoTykuaGVpZ2h0KE0pLmNvbG9yKGUu bWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGYoZSx0KX0pLmZpbD0KdGVyKGZ1bmN0 aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSk7dmFyIEY9M0RCLnNlbGVjdCgiLm52LWJh cnNXcmFwIikuPQpkYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0p KTtGLmNhbGwodCk7aWYoaCl7bi5zY2FsZSh3KS49CnRpY2tzKE8vMTAwKS50aWNrU2l6ZSgtTSww KSxCLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYT0KbnNsYXRl KDAsIitFLnJhbmdlKClbMF0rIikiKSxCLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobik7 dmFyIEk9M0RCLnNlPQpsZWN0KCIubnYteC5udi1heGlzID4gZyIpLnNlbGVjdEFsbCgiZyIpO0ku c2VsZWN0QWxsKCJsaW5lLCB0ZXh0Iikuc3R5bGUoIm89CnBhY2l0eSIsMSk7aWYobSl7dmFyIHE9 M0RmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitlKyIsIit0KyIpIn0sUj0zRD0KNSxV PTNEMTc7SS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxu KXtyZXR1cm4gcSgwLG4lPQoyPTNEPTNEMD9SOlUpfSk7dmFyIHo9M0RkMy5zZWxlY3RBbGwoIi5u di14Lm52LWF4aXMgLm52LXdyYXAgZyBnIHRleHQiKVswXS49Cmxlbmd0aDtCLnNlbGVjdEFsbCgi Lm52LXgubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0IikuYXR0cigidHJhbnNmb3JtIixmdT0K bmN0aW9uKGUsdCl7cmV0dXJuIHEoMCx0PTNEPTNEPTNEMHx8eiUyIT0zRD0zRDA/VTpSKX0pfXYm JkkuZmlsdGVyKGZ1bmN0aW9uPQoodCxuKXtyZXR1cm4gbiVNYXRoLmNlaWwoZVswXS52YWx1ZXMu bGVuZ3RoLyhPLzEwMCkpIT0zRD0zRDB9KS5zZWxlY3RBbGwoInQ9CmV4dCwgbGluZSIpLnN0eWxl KCJvcGFjaXR5IiwwKSxnJiZJLnNlbGVjdEFsbCgiLnRpY2sgdGV4dCIpLmF0dHIoInRyYW5zZm9y bT0KIiwicm90YXRlKCIrZysiIDAsMCkiKS5zdHlsZSgidGV4dC1hbmNob3IiLGc+MD8ic3RhcnQi OiJlbmQiKSxCLnNlbGVjdCgiLm52PQoteC5udi1heGlzIikuc2VsZWN0QWxsKCJnLm52LWF4aXNN YXhNaW4gdGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKX1wJiYoci5zY2E9CmxlKEUpLnRpY2tzKE0v MzYpLnRpY2tTaXplKC1PLDApLEIuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksaS5k aXNwYT0KdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Uz0zRGUsTi5zdGF0ZUNoYW5n ZShTKSxBLnVwZGF0ZSgpfSkscy5kaXNwPQphdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24o ZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47aj0zRGoubWFwKGZ1bmN0aW89Cm4oZSl7cmV0dXJu IGUuZGlzYWJsZWQ9M0QhMCxlfSksZS5kaXNhYmxlZD0zRCExO3N3aXRjaChlLmtleSl7Y2FzZSJH cm91cGVkIj0KOnQuc3RhY2tlZCghMSk7YnJlYWs7Y2FzZSJTdGFja2VkIjp0LnN0YWNrZWQoITAp fVMuc3RhY2tlZD0zRHQuc3RhY2tlZCgpLE4uPQpzdGF0ZUNoYW5nZShTKSxBLnVwZGF0ZSgpfSks Ti5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3kmJkwoZSxrLnBhcmVudE49Cm9kZSl9KSxO Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24obil7dHlwZW9mIG4uZGlzYWJsZWQhPTNEInVuZGVm aW5lZCImJihlLj0KZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuZGlzYWJsZWQ9M0RuLmRpc2FibGVk W3RdfSksUy5kaXNhYmxlZD0zRG4uZGlzYWJsZWQpPQosdHlwZW9mIG4uc3RhY2tlZCE9M0QidW5k ZWZpbmVkIiYmKHQuc3RhY2tlZChuLnN0YWNrZWQpLFMuc3RhY2tlZD0zRG4uc3RhY2s9CmVkKSxB LnVwZGF0ZSgpfSl9KSxBfXZhciB0PTNEZS5tb2RlbHMubXVsdGlCYXIoKSxuPTNEZS5tb2RlbHMu YXhpcygpLHI9M0RlLj0KbW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRGUu bW9kZWxzLmxlZ2VuZCgpLG89M0R7dG9wOjMwLHJpZ2h0PQo6MjAsYm90dG9tOjUwLGxlZnQ6NjB9 LHU9M0RudWxsLGE9M0RudWxsLGY9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGw9M0QhMCw9CmM9 M0QhMCxoPTNEITAscD0zRCEwLGQ9M0QhMSx2PTNEITAsbT0zRCExLGc9M0QwLHk9M0QhMCxiPTNE ZnVuY3Rpb24oZSx0LG4scj0KLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIG9u ICIrdCsiPC9wPiJ9LHcsRSxTPTNEe3N0YWNrZWQ6ITF9LHg9Cj0zRG51bGwsVD0zRCJObyBEYXRh IEF2YWlsYWJsZS4iLE49M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZT0K Iiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEM9M0RmdW5jdGlvbigpe3JldHVybiBsPzE4 MDowfSxrPTNEMDt0LnN0YWNrPQplZCghMSksbi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5n KDcpLmhpZ2hsaWdodFplcm8oITApLnNob3dNYXhNaW4oITEpLnQ9Cmlja0Zvcm1hdChmdW5jdGlv bihlKXtyZXR1cm4gZX0pLHIub3JpZW50KGQ/InJpZ2h0IjoibGVmdCIpLnRpY2tGb3JtYXQoZDMu Zj0Kb3JtYXQoIiwuMWYiKSkscy51cGRhdGVTdGF0ZSghMSk7dmFyIEw9M0RmdW5jdGlvbihpLHMp e3ZhciBvPTNEaS5wb3NbMF0rKHMuPQpvZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zm c2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2k9Cm50LGkucG9pbnRJbmRl eCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9M0Ri KGkucz0KZXJpZXMua2V5LGEsZixpLEEpO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52YWx1ZTww PyJuIjoicyIsbnVsbCxzKX07cmV0dXJuPQogdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zl ci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStvLmw9CmVmdCxlLnBvc1sx XStvLnRvcF0sTi50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91 dC50b29sdD0KaXAiLGZ1bmN0aW9uKGUpe04udG9vbHRpcEhpZGUoZSl9KSxOLm9uKCJ0b29sdGlw SGlkZSIsZnVuY3Rpb24oKXt5JiZlLnRvb2x0PQppcC5jbGVhbnVwKCl9KSxBLmRpc3BhdGNoPTNE TixBLm11bHRpYmFyPTNEdCxBLmxlZ2VuZD0zRGksQS54QXhpcz0zRG4sQS55QXg9CmlzPTNEcixk My5yZWJpbmQoQSx0LCJ4IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdl IiwiZm9yY2VYIj0KLCJmb3JjZVkiLCJjbGlwRWRnZSIsImlkIiwic3RhY2tlZCIsInN0YWNrT2Zm c2V0IiwiZGVsYXkiLCJiYXJDb2xvciIsImdyb3VwPQpTcGFjaW5nIiksQS5vcHRpb25zPTNEZS51 dGlscy5vcHRpb25zRnVuYy5iaW5kKEEpLEEubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4g YXJndW1lbnRzLmxlbmd0aD8oby50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50 b3A6by50b3Asby5yaT0KZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdo dDpvLnJpZ2h0LG8uYm90dG9tPTNEdHlwZW9mIGUuYm90PQp0b20hPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206by5ib3R0b20sby5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj89CmUu bGVmdDpvLmxlZnQsQSk6b30sQS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh1PTNEZSxBKT0KOnV9LEEuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGE9M0RlLEEpOmF9LEEuY29sb3I9M0RmPQp1bmN0aW9uKHQpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGYpLEEpOmY9 Cn0sQS5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bD0zRGUsQSk6bH0sQS5zaG93TD0KZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYz0zRGUsQSk6Y30sQS5zaG93WEF4aXM9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhoPTNEZSxBKTpofSxBLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3Jl dHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEEpOnB9LEEucmlnaHRBbGlnbllBeGlzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8oZD0zRGUsci5vcmllbnQoZT8i cmlnaHQiOiJsZWZ0IiksQSk6ZH0sQS5yZWR1Y2VYVGlja3M9M0RmdW5jPQp0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxBKTp2fSxBLnJvdGF0ZUxhYmVscz0zRGZ1bmN0aW9u KGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLEEpOmd9LEEuc3RhZ2dlckxhYmVs cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KG09M0RlLEEpOm19LEEu dG9vbHRpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KGI9M0RlLEEp OmJ9LEEudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0z RGUsQSk6eX09CixBLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGI9M0RlLEEpOmJ9LEEuc3RhdD0KZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhTPTNEZSxBKTpTfSxBLmRlZmF1bHRTdGF0ZT0zRGZ1bmN0PQppb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEEpOnh9LEEubm9EYXRhPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQSk6VH0sQS50cmFuc2l0aW9uRHVy YXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3RoPyhrPTNEZSxBKTpr fSxBfSxlLm1vZGVscy5tdWx0aUJhckhvcml6b250YWw9M0RmdW5jdGlvbigpe2Z1bmN0PQppb24g QyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNEbi10LmxlZnQtdC5yaWdodCx5 PTNEci10LnRvcC10LmI9Cm90dG9tLEM9M0RkMy5zZWxlY3QodGhpcyk7cCYmKGU9M0RkMy5sYXlv dXQuc3RhY2soKS5vZmZzZXQoInplcm8iKS52YWx1ZXMoZj0KdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZXN9KS55KGEpKGUpKSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlcy5mb3JFPQph Y2goZnVuY3Rpb24oZSl7ZS5zZXJpZXM9M0R0fSl9KSxwJiZlWzBdLnZhbHVlcy5tYXAoZnVuY3Rp b24odCxuKXt2YXIgcj0zRDA9CixpPTNEMDtlLm1hcChmdW5jdGlvbihlKXt2YXIgdD0zRGUudmFs dWVzW25dO3Quc2l6ZT0zRE1hdGguYWJzKHQueSksdC55PDA/KD0KdC55MT0zRGktdC5zaXplLGkt PTNEdC5zaXplKToodC55MT0zRHIscis9M0R0LnNpemUpfSl9KTt2YXIgaz0zRGImJnc/W106ZS5t PQphcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu e3g6dShlLHQpLHk6YShlLHQpLHk9CjA6ZS55MCx5MTplLnkxfX0pfSk7cy5kb21haW4oYnx8ZDMu bWVyZ2UoaykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KSkucj0KYW5nZUJhbmRzKEV8fFsw LHldLC4xKSxvLmRvbWFpbih3fHxkMy5leHRlbnQoZDMubWVyZ2UoaykubWFwKGZ1bmN0aW9uKGUp e3JlPQp0dXJuIHA/ZS55PjA/ZS55MStlLnk6ZS55MTplLnl9KS5jb25jYXQoZikpKSxkJiYhcD9v LnJhbmdlKFN8fFtvLmRvbWFpbigpWzA9Cl08MD9tOjAsaS0oby5kb21haW4oKVsxXT4wP206MCld KTpvLnJhbmdlKFN8fFswLGldKSxUPTNEVHx8cyxOPTNETnx8ZDMuc2NhbD0KZS5saW5lYXIoKS5k b21haW4oby5kb21haW4oKSkucmFuZ2UoW28oMCksbygwKV0pO3ZhciBMPTNEZDMuc2VsZWN0KHRo aXMpLnNlPQpsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGliYXJIb3Jpem9udGFsIikuZGF0YShb ZV0pLEE9M0RMLmVudGVyKCkuYXBwZW5kKCI9CmciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3Jh cCBudi1tdWx0aWJhckhvcml6b250YWwiKSxPPTNEQS5hcHBlbmQoImRlZnMiKT0KLE09M0RBLmFw cGVuZCgiZyIpLF89M0RMLnNlbGVjdCgiZyIpO00uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1ncm91cHMiPQopLEwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0 LnRvcCsiKSIpO3ZhciBEPTNETC5zZWxlY3QoIi49Cm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52 LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSx0KT0Ke3JldHVy biB0fSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNiku c3R5bGUoImZpbGwtPQpvcGFjaXR5IiwxZS02KSxELmV4aXQoKS5zdHlsZSgic3Ryb2tlLW9wYWNp dHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDE9CmUtNikucmVtb3ZlKCksRC5hdHRyKCJj bGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLj0KY2xh c3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhvdmVyfSkuc3R5bGUoImZpbGwiLGZ1 bmN0aW9uKGUsdCl7cmV0PQp1cm4gbChlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gbChlLHQpfSksRC5zdHlsZSgic3Ryb2tlLW89CnBhY2l0eSIsMSkuc3R5bGUoImZp bGwtb3BhY2l0eSIsLjc1KTt2YXIgUD0zREQuc2VsZWN0QWxsKCJnLm52LWJhciIpLmRhdGEoZj0K dW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KTtQLmV4aXQoKS5yZW1vdmUoKTt2YXIgSD0zRFAu ZW50ZXIoKS5hcHBlbmQoImciPQopLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCxuLHIpe3Jl dHVybiJ0cmFuc2xhdGUoIitOKHA/dC55MDowKSsiLCIrKHA/MDo9CnIqcy5yYW5nZUJhbmQoKS9l Lmxlbmd0aCtzKHUodCxuKSkpKyIpIn0pO0guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDAp Lj0KYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFuZCgpLyhwPzE6ZS5sZW5ndGgpKSxQLm9uKCJtb3Vz ZW92ZXIiLGZ1bmN0aW9uKHQsbil7PQpkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEw KSx4LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmEodCxuKSxwb2ludDo9CnQsc2VyaWVzOmVbdC5z ZXJpZXNdLHBvczpbbyhhKHQsbikrKHA/dC55MDowKSkscyh1KHQsbikpK3MucmFuZ2VCYW5kKCkq KHA/ZT0KLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aF0scG9pbnRJbmRleDpuLHNlcmll c0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlPQpudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbih0 LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLHguZWw9CmVtZW50TW91c2Vv dXQoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb2ludEluZGV4Om4s c2VyaWVzST0KbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9u KHQsbil7eC5lbGVtZW50Q2xpY2soe3ZhbHVlPQo6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5z ZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHA/ZS5sZW5ndGg9Ci8yOnQuc2Vy aWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSsocD90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmll c0luZGV4OnQucz0KZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigp fSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG4pPQp7eC5lbGVtZW50RGJsQ2xpY2soe3ZhbHVl OmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKSs9CnMucmFu Z2VCYW5kKCkqKHA/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikrKHA/ dC55MDowKSldLHBvaT0KbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9 KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLEguPQphcHBlbmQoInRleHQiKSxkJiYhcD8o UC5zZWxlY3QoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oZSx0KXtyZXQ9CnVy biBhKGUsdCk8MD8iZW5kIjoic3RhcnQifSkuYXR0cigieSIscy5yYW5nZUJhbmQoKS8oZS5sZW5n dGgqMikpLmF0dHIoImR5Ij0KLCIuMzJlbSIpLnRleHQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZyhh KGUsdCkpfSksUC5zZWxlY3QoInRleHQiKS5hdHRyKCJ4IixmPQp1bmN0aW9uKGUsdCl7cmV0dXJu IGEoZSx0KTwwPy00Om8oYShlLHQpKS1vKDApKzR9KSk6UC5zZWxlY3RBbGwoInRleHQiKS50ZXg9 CnQoIiIpLHYmJiFwPyhILmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm52LWJhci1sYWJlbCIsITAp LFAuc2VsZWN0KCJ0ZXh0Lm52LT0KYmFyLWxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJzdGFydCI6ImVuZCJ9PQopLmF0dHIoInkiLHMucmFu Z2VCYW5kKCkvKGUubGVuZ3RoKjIpKS5hdHRyKCJkeSIsIi4zMmVtIikudGV4dChmdW5jdGlvbihl LHQ9Cil7cmV0dXJuIHUoZSx0KX0pLFAuc2VsZWN0KCJ0ZXh0Lm52LWJhci1sYWJlbCIpLmF0dHIo IngiLGZ1bmN0aW9uKGUsdCl7cmV0dT0Kcm4gYShlLHQpPDA/bygwKS1vKGEoZSx0KSkrNDotNH0p KTpQLnNlbGVjdEFsbCgidGV4dC5udi1iYXItbGFiZWwiKS50ZXh0KCIiPQopLFAuYXR0cigiY2xh c3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1i YXIgcG89CnNpdGl2ZSJ9KSxjJiYoaHx8KGg9M0RlLm1hcChmdW5jdGlvbigpe3JldHVybiEwfSkp LFAuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKD0KZSx0LG4pe3JldHVybiBkMy5yZ2IoYyhlLHQpKS5k YXJrZXIoaC5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmPQp1bmN0aW9uKGUs dCl7cmV0dXJuIWhbdF19KVtuXSkudG9TdHJpbmcoKX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9u KGUsdCxuKXs9CnJldHVybiBkMy5yZ2IoYyhlLHQpKS5kYXJrZXIoaC5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbj0KKGUsdCl7cmV0dXJuIWhbdF19KVtuXSkudG9T dHJpbmcoKX0pKSxwP1AuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JlPQp0dXJuInRy YW5zbGF0ZSgiK28oZS55MSkrIiwiK3ModShlLHQpKSsiKSJ9KS5zZWxlY3QoInJlY3QiKS5hdHRy KCJ3aWR0aCIsZnU9Cm5jdGlvbihlLHQpe3JldHVybiBNYXRoLmFicyhvKGEoZSx0KStlLnkwKS1v KGUueTApKX0pLmF0dHIoImhlaWdodCIscy5yYW5nZT0KQmFuZCgpKTpQLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24odCxuKXtyZXR1cm4idHJhbnNsYXRlKCIrKGEodCxuKTwwP28oYSh0PQosbikp Om8oMCkpKyIsIisodC5zZXJpZXMqcy5yYW5nZUJhbmQoKS9lLmxlbmd0aCtzKHUodCxuKSkpKyIp In0pLnNlbGVjdCgicmU9CmN0IikuYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFuZCgpL2UubGVuZ3Ro KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oZSx0KXtyZXR1cj0KbiBNYXRoLm1heChNYXRoLmFicyhv KGEoZSx0KSktbygwKSksMSl9KSxUPTNEcy5jb3B5KCksTj0zRG8uY29weSgpfSksQ312YXIgPQp0 PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRE1h dGguZmxvb3IoTWF0aC5yYW49CmRvbSgpKjFlNCkscz0zRGQzLnNjYWxlLm9yZGluYWwoKSxvPTNE ZDMuc2NhbGUubGluZWFyKCksdT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGUueH0sYT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBlLnl9LGY9M0RbMF0sbD0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksYz0K PTNEbnVsbCxoLHA9M0QhMSxkPTNEITEsdj0zRCExLG09M0Q2MCxnPTNEZDMuZm9ybWF0KCIsLjJm IikseT0zRDEyMDAsYix3LEUsPQpTLHg9M0RkMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1l bnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3U9CnNlb3ZlciIsImVsZW1lbnRN b3VzZW91dCIpLFQsTjtyZXR1cm4gQy5kaXNwYXRjaD0zRHgsQy5vcHRpb25zPTNEZS51dGlscy5v cD0KdGlvbnNGdW5jLmJpbmQoQyksQy54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHU9M0RlLEMpOnV9LEMuPQp5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGE9M0RlLEMpOmF9LEMubWFyZ2luPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50 b3AsdD0KLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJp Z2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuPQpib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206 dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmU9CmQiP2UubGVmdDp0 LmxlZnQsQyk6dH0sQy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhuPTNEZT0KLEMpOm59LEMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHI9M0RlLEMpOnJ9LEMueFNjYWxlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocz0zRGUsQyk6c30sQy55U2NhbGU9M0RmdW5jdGlvbihlKXs9CnJldHVybiBh cmd1bWVudHMubGVuZ3RoPyhvPTNEZSxDKTpvfSxDLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhiPTNEZSxDKTpifSxDLnlEb21haW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0KPTNEZSxDKTp3fSxDLnhSYW5nZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxDKTpFfSxDLnlSPQphbmdlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLEMpOlN9LEMuZm9yY2VZ PTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsQyk6Zn0sQy5z dGFja2VkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8ocD0zRGUsQyk6 cH0sQy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPQo9M0Rl LnV0aWxzLmdldENvbG9yKHQpLEMpOmx9LEMuYmFyQ29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndW1lbnRzLmxlbmc9CnRoPyhjPTNEZS51dGlscy5nZXRDb2xvcih0KSxDKTpjfSxDLmRpc2Fi bGVkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oaD0zRGUsQyk6aH0s Qy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxDKTppPQp9 LEMuZGVsYXk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsQyk6 eX0sQy5zaG93VmFsdWVzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o ZD0zRGUsQyk6ZH0sQy5zaG93QmFyTGFiZWxzPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odj0zRGUsQyk6dn0sQy52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldD0K dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLEMpOmd9LEMudmFsdWVQYWRkaW5nPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8obT0zRGUsQyk6bX0sQ30sZS5tb2RlbHMu bXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQ9M0RmdW5jdGlvbigpe2Y9CnVuY3Rpb24gQyhlKXtyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBkPTNEZDMuc2VsZWN0KHRoaXMpLG09M0R0aGlzLFQ9 Cj0zRCh1fHxwYXJzZUludChkLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxr PTNEKGF8fHBhcnNlSW50KGQucz0KdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9t O0MudXBkYXRlPTNEZnVuY3Rpb24oKXtkLmNhbGwoQyl9LEMuY29uPQp0YWluZXI9M0R0aGlzLGIu ZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7 dmE9CnIgTDt3PTNEe307Zm9yKEwgaW4gYiliW0xdaW5zdGFuY2VvZiBBcnJheT93W0xdPTNEYltM XS5zbGljZSgwKTp3W0xdPTNEYltMXT0KfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5j dGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2PQphciBBPTNEZC5zZWxl Y3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtFXSk7cmV0dXJuIEEuZW50ZXIoKS5hcHBlbmQoInRl eHQiKS49CmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIiku c3R5bGUoInRleHQtYW5jaG9yIiwibWlkZD0KbGUiKSxBLmF0dHIoIngiLG8ubGVmdCtULzIpLmF0 dHIoInkiLG8udG9wK2svMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pPQosQ31kLnNlbGVj dEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGc9M0R0LnhTY2FsZSgpLHk9M0R0LnlTY2FsZSgp O3ZhciBPPQo9M0RkLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW11bHRpQmFySG9yaXpvbnRhbENo YXJ0IikuZGF0YShbZV0pLE09M0RPLmVudGU9CnIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtd3JhcCBudi1tdWx0aUJhckhvcml6b250YWxDaGFydCIpLmFwcD0KZW5kKCJnIiks Xz0zRE8uc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhp cyIpLE0uYXBwPQplbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtemVyb0xpbmU9CiIpLmFwcGVuZCgibGluZSIpLE0uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLE0uYXBwZW5kKCJnIikuYT0KdHRyKCJj bGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29u dHJvbHNXcmFwIiksPQpjJiYoaS53aWR0aChULXgoKSksdC5iYXJDb2xvcigpJiZlLmZvckVhY2go ZnVuY3Rpb24oZSx0KXtlLmNvbG9yPTNEZDMucmdiKCI9CiNjY2MiKS5kYXJrZXIodCoxLjUpLnRv U3RyaW5nKCl9KSxfLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKD0KaSks by50b3AhPTNEaS5oZWlnaHQoKSYmKG8udG9wPTNEaS5oZWlnaHQoKSxrPTNEKGF8fHBhcnNlSW50 KGQuc3R5bGUoImhlaWdoPQp0IikpfHw0MDApLW8udG9wLW8uYm90dG9tKSxfLnNlbGVjdCgiLm52 LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmE9Cm5zbGF0ZSgiK3goKSsiLCIrIC1v LnRvcCsiKSIpKTtpZihsKXt2YXIgRD0zRFt7a2V5OiJHcm91cGVkIixkaXNhYmxlZDp0LnN0YT0K Y2tlZCgpfSx7a2V5OiJTdGFja2VkIixkaXNhYmxlZDohdC5zdGFja2VkKCl9XTtzLndpZHRoKHgo KSkuY29sb3IoWyIjNDQ0IiwiPQojNDQ0IiwiIzQ0NCJdKSxfLnNlbGVjdCgiLm52LWNvbnRyb2xz V3JhcCIpLmRhdHVtKEQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW49CnNsYXRlKDAsIisgLW8udG9w KyIpIikuY2FsbChzKX1PLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ubGVmdCsiLCIr bz0KLnRvcCsiKSIpLHQuZGlzYWJsZWQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJs ZWR9KSkud2lkdGgoVCkuaGVpZ2h0PQooaykuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1 cm4gZS5jb2xvcnx8ZihlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbik9CntyZXR1cm4hZVtuXS5k aXNhYmxlZH0pKTt2YXIgUD0zRF8uc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShlLmZpbHRl cihmdT0KbmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpO1AuY2FsbCh0KTtpZihoKXtuLnNj YWxlKGcpLnRpY2tzKGsvMjQpLnRpY2tTPQppemUoLVQsMCksXy5zZWxlY3QoIi5udi14Lm52LWF4 aXMiKS5jYWxsKG4pO3ZhciBIPTNEXy5zZWxlY3QoIi5udi14Lm52LWF4aXM9CiIpLnNlbGVjdEFs bCgiZyIpO0guc2VsZWN0QWxsKCJsaW5lLCB0ZXh0Iil9cCYmKHIuc2NhbGUoeSkudGlja3MoVC8x MDApLnRpYz0Ka1NpemUoLWssMCksXy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK2srIikiPQopLF8uc2VsZWN0KCIubnYteS5udi1heGlzIiku Y2FsbChyKSksXy5zZWxlY3QoIi5udi16ZXJvTGluZSBsaW5lIikuYXR0cigieDE9CiIseSgwKSku YXR0cigieDIiLHkoMCkpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsLWspLGkuZGlzcGF0Y2gub24o InN0YXRlQ2hhbj0KZ2UiLGZ1bmN0aW9uKGUpe2I9M0RlLFMuc3RhdGVDaGFuZ2UoYiksQy51cGRh dGUoKX0pLHMuZGlzcGF0Y2gub24oImxlZ2VuZENsPQppY2siLGZ1bmN0aW9uKGUsbil7aWYoIWUu ZGlzYWJsZWQpcmV0dXJuO0Q9M0RELm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXM9CmFibGVk PTNEITAsZX0pLGUuZGlzYWJsZWQ9M0QhMTtzd2l0Y2goZS5rZXkpe2Nhc2UiR3JvdXBlZCI6dC5z dGFja2VkKCExKTticj0KZWFrO2Nhc2UiU3RhY2tlZCI6dC5zdGFja2VkKCEwKX1iLnN0YWNrZWQ9 M0R0LnN0YWNrZWQoKSxTLnN0YXRlQ2hhbmdlKGIpLEMuPQp1cGRhdGUoKX0pLFMub24oInRvb2x0 aXBTaG93IixmdW5jdGlvbihlKXt2JiZOKGUsbS5wYXJlbnROb2RlKX0pLFMub24oImNoYW49Cmdl U3RhdGUiLGZ1bmN0aW9uKG4pe3R5cGVvZiBuLmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5m b3JFYWNoKGZ1bmN0aW9uKD0KZSx0KXtlLmRpc2FibGVkPTNEbi5kaXNhYmxlZFt0XX0pLGIuZGlz YWJsZWQ9M0RuLmRpc2FibGVkKSx0eXBlb2Ygbi5zdGFja2VkPQohPTNEInVuZGVmaW5lZCImJih0 LnN0YWNrZWQobi5zdGFja2VkKSxiLnN0YWNrZWQ9M0RuLnN0YWNrZWQpLEMudXBkYXRlKCl9KX09 CiksQ312YXIgdD0zRGUubW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbCgpLG49M0RlLm1vZGVscy5h eGlzKCkscj0zRGUubW9kZWxzLj0KYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKS5oZWlnaHQo MzApLHM9M0RlLm1vZGVscy5sZWdlbmQoKS5oZWlnaHQoMzApLG89Cj0zRHt0b3A6MzAscmlnaHQ6 MjAsYm90dG9tOjUwLGxlZnQ6NjB9LHU9M0RudWxsLGE9M0RudWxsLGY9M0RlLnV0aWxzLmRlZmF1 bD0KdENvbG9yKCksbD0zRCEwLGM9M0QhMCxoPTNEITAscD0zRCEwLGQ9M0QhMSx2PTNEITAsbT0z RGZ1bmN0aW9uKGUsdCxuLHIsaSl7PQpyZXR1cm4iPGgzPiIrZSsiIC0gIit0KyI8L2gzPiIrIjxw PiIrbisiPC9wPiJ9LGcseSxiPTNEe3N0YWNrZWQ6ZH0sdz0zRG51bGw9CixFPTNEIk5vIERhdGEg QXZhaWxhYmxlLiIsUz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwi c3RhdD0KZUNoYW5nZSIsImNoYW5nZVN0YXRlIikseD0zRGZ1bmN0aW9uKCl7cmV0dXJuIGw/MTgw OjB9LFQ9M0QwO3Quc3RhY2tlZChkKSxuPQoub3JpZW50KCJsZWZ0IikudGlja1BhZGRpbmcoNSku aGlnaGxpZ2h0WmVybyghMSkuc2hvd01heE1pbighMSkudGlja0Zvcm1hdCg9CmZ1bmN0aW9uKGUp e3JldHVybiBlfSksci5vcmllbnQoImJvdHRvbSIpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCIsLjFm IikpLHMudT0KcGRhdGVTdGF0ZSghMSk7dmFyIE49M0RmdW5jdGlvbihpLHMpe3ZhciBvPTNEaS5w b3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0KPTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxh PTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpPQopLGY9M0RyLnRp Y2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9M0RtKGkuc2VyaWVzLmtl eSxhLGYsaSw9CkMpO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52YWx1ZTwwPyJlIjoidyIsbnVs bCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oIj0KZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixm dW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStvLmxlZnQsZS5wb3NbMV0rby50PQpvcF0sUy50 b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixm dW5jdGlvbihlKXs9ClMudG9vbHRpcEhpZGUoZSl9KSxTLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rp b24oKXt2JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQz0KLmRpc3BhdGNoPTNEUyxDLm11bHRpYmFy PTNEdCxDLmxlZ2VuZD0zRGksQy54QXhpcz0zRG4sQy55QXhpcz0zRHIsZDMucmViaW5kPQooQyx0 LCJ4IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwi Zm9yY2VZIiwiY2xpcEU9CmRnZSIsImlkIiwiZGVsYXkiLCJzaG93VmFsdWVzIiwic2hvd0Jhckxh YmVscyIsInZhbHVlRm9ybWF0Iiwic3RhY2tlZCIsImJhcj0KQ29sb3IiKSxDLm9wdGlvbnM9M0Rl LnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQyksQy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1PQpy biBhcmd1bWVudHMubGVuZ3RoPyhvLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9l LnRvcDpvLnRvcCxvLnJpZ2g9CnQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJp Z2h0Om8ucmlnaHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3R0bz0KbSE9M0QidW5kZWZpbmVkIj9l LmJvdHRvbTpvLmJvdHRvbSxvLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2Uu PQpsZWZ0Om8ubGVmdCxDKTpvfSxDLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHU9M0RlLEMpOnU9Cn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oYT0zRGUsQyk6YX0sQy5jb2xvcj0zRGZ1bj0KY3Rpb24odCl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoZiksQyk6 Zn0sPQpDLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhsPTNEZSxDKTpsfSxDLnNob3dMZWc9CmVuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhjPTNEZSxDKTpjfSxDLnNob3dYQXhpcz0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLEMpOmh9LEMuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsQyk6cH0sQy50b29sdGlwPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8obT0zRGUsQyk6bX0sQy50b29sdGlwcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxDKT0KOnZ9LEMudG9v bHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUs Qyk6bX0sQy5zPQp0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9 M0RlLEMpOmJ9LEMuZGVmYXVsdFN0YXRlPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odz0zRGUsQyk6d30sQy5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1 bWVudHMubGVuZ3RoPyhFPTNEZSxDKTpFfSxDLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEMpOlR9LEN9LGUubW9kZWxzLm11 bHRpQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEM9CihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKGUpe3ZhciB1PTNEZDMuc2VsZWN0KHRoaXMpLGY9M0R0aGlzO0MudXBkYXRlPTNEZj0KdW5j dGlvbigpe3UuY2FsbChDKX0sQy5jb250YWluZXI9M0R0aGlzO3ZhciBrPTNEKHJ8fHBhcnNlSW50 KHUuc3R5bGUoIndpZHRoPQoiKSl8fDk2MCktdC5sZWZ0LXQucmlnaHQsTD0zRChpfHxwYXJzZUlu dCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdC50b3AtdC49CmJvdHRvbSxBPTNEZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0zRD0zRCJsaW5lIiYmZS55QT0K eGlzPTNEPTNEMX0pLE89M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYm ZS50eXBlPTNEPTNEImxpbmUiPQomJmUueUF4aXM9M0Q9M0QyfSksTT0zRGUuZmlsdGVyKGZ1bmN0 aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0Q9CiJiYXIiJiZlLnlBeGlzPTNE PTNEMX0pLF89M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBl PQo9M0Q9M0QiYmFyIiYmZS55QXhpcz0zRD0zRDJ9KSxEPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWQmJmU9Ci50eXBlPTNEPTNEImFyZWEiJiZlLnlBeGlzPTNEPTNEMX0p LFA9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYj0KbGVkJiZlLnR5cGU9M0Q9 M0QiYXJlYSImJmUueUF4aXM9M0Q9M0QyfSksSD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlPQouZGlzYWJsZWQmJmUueUF4aXM9M0Q9M0QxfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBl LnZhbHVlcy5tYXAoZnVuY3Rpb24oZSw9CnQpe3JldHVybnt4OmUueCx5OmUueX19KX0pLEI9M0Rl LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS55QT0KeGlzPTNEPTNEMn0p Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu e3g6ZS54PQoseTplLnl9fSl9KTthLmRvbWFpbihkMy5leHRlbnQoZDMubWVyZ2UoSC5jb25jYXQo QikpLGZ1bmN0aW9uKGUpe3JldHVybiBlLng9Cn0pKS5yYW5nZShbMCxrXSk7dmFyIGo9M0R1LnNl bGVjdEFsbCgiZy53cmFwLm11bHRpQ2hhcnQiKS5kYXRhKFtlXSksRj0zRGouZT0KbnRlcigpLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwid3JhcCBudmQzIG11bHRpQ2hhcnQiKS5hcHBlbmQoImci KTtGLmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJ4IGF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwieTEgYXhpcyIpLEYuYXBwZW49CmQoImciKS5hdHRyKCJjbGFzcyIsInkyIGF4 aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZXMxV3JhcCIpLEYuYT0KcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsImxpbmVzMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwiYmFyczFXcmFwPQoiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYmFyczJXcmFwIiks Ri5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YWM9CmsxV3JhcCIpLEYuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJzdGFjazJXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcz0KIiwi bGVnZW5kV3JhcCIpO3ZhciBJPTNEai5zZWxlY3QoImciKTtzJiYoeC53aWR0aChrLzIpLEkuc2Vs ZWN0KCIubGVnZW5kV3JhPQpwIikuZGF0dW0oZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3Jp Z2luYWxLZXk9M0RlLm9yaWdpbmFsS2V5PTNEPTNEPTNEdW49CmRlZmluZWQ/ZS5rZXk6ZS5vcmln aW5hbEtleSxlLmtleT0zRGUub3JpZ2luYWxLZXkrKGUueUF4aXM9M0Q9M0QxPyIiOiIgKHJpZz0K aHQgYXhpcykiKSxlfSkpLmNhbGwoeCksdC50b3AhPTNEeC5oZWlnaHQoKSYmKHQudG9wPTNEeC5o ZWlnaHQoKSxMPTNEKGl8fHBhPQpyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXQudG9w LXQuYm90dG9tKSxJLnNlbGVjdCgiLmxlZ2VuZFdyYXAiKS5hdHQ9CnIoInRyYW5zZm9ybSIsInRy YW5zbGF0ZSgiK2svMisiLCIrIC10LnRvcCsiKSIpKSxkLndpZHRoKGspLmhlaWdodChMKS5pbnRl cj0KcG9sYXRlKCJtb25vdG9uZSIpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu Y29sb3J8fG5bdCVuLmxlbmd0aF19PQopLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25d LmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMSYmZVtuXS50eXBlPQo9M0Q9M0QibGluZSJ9KSks di53aWR0aChrKS5oZWlnaHQoTCkuaW50ZXJwb2xhdGUoIm1vbm90b25lIikuY29sb3IoZS5tYXAo ZnU9Cm5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1 bmN0aW9uKHQsbil7cmV0dXJuIWVbbj0KXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDImJmVb bl0udHlwZT0zRD0zRCJsaW5lIn0pKSxtLndpZHRoKGspLmhlaWdodChMPQopLmNvbG9yKGUubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVu Y3Rpb249Cih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMSYmZVtu XS50eXBlPTNEPTNEImJhciJ9KSksZy53aT0KZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChm dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuPQpmaWx0ZXIoZnVu Y3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDImJmVbbl0u dHlwZT0zRD0KPTNEImJhciJ9KSkseS53aWR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5tYXAoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8PQpuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0 aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0Q9CjEmJmVbbl0u dHlwZT0zRD0zRCJhcmVhIn0pKSxiLndpZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChmdW5j dGlvbihlLHQpez0KcmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rp b24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmPQplW25dLnlBeGlzPTNEPTNEMiYmZVtuXS50 eXBlPTNEPTNEImFyZWEifSkpLEkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCI9Cit0Lmxl ZnQrIiwiK3QudG9wKyIpIik7dmFyIHE9M0RJLnNlbGVjdCgiLmxpbmVzMVdyYXAiKS5kYXR1bShB KSxSPTNESS5zZWxlYz0KdCgiLmJhcnMxV3JhcCIpLmRhdHVtKE0pLFU9M0RJLnNlbGVjdCgiLnN0 YWNrMVdyYXAiKS5kYXR1bShEKSx6PTNESS5zZWxlY3QoPQoiLmxpbmVzMldyYXAiKS5kYXR1bShP KSxXPTNESS5zZWxlY3QoIi5iYXJzMldyYXAiKS5kYXR1bShfKSxYPTNESS5zZWxlY3QoIi49CnN0 YWNrMldyYXAiKS5kYXR1bShQKSxWPTNERC5sZW5ndGg/RC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu IGUudmFsdWVzfSkucmVkdT0KY2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24o ZSxuKXtyZXR1cm57eDplLngseTplLnkrdFtuXS55fX0pfSkuPQpjb25jYXQoW3t4OjAseTowfV0p OltdLCQ9M0RQLmxlbmd0aD9QLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5yZWQ9 CnVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybnt4OmUu eCx5OmUueSt0W25dLnl9fSl9KT0KLmNvbmNhdChbe3g6MCx5OjB9XSk6W107aC5kb21haW4obHx8 ZDMuZXh0ZW50KGQzLm1lcmdlKEgpLmNvbmNhdChWKSxmdW5jdGlvPQpuKGUpe3JldHVybiBlLnl9 KSkucmFuZ2UoWzAsTF0pLHAuZG9tYWluKGN8fGQzLmV4dGVudChkMy5tZXJnZShCKS5jb25jYXQo JCk9CixmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkpLnJhbmdlKFswLExdKSxkLnlEb21haW4oaC5k b21haW4oKSksbS55RG9tYWluKGguZD0Kb21haW4oKSkseS55RG9tYWluKGguZG9tYWluKCkpLHYu eURvbWFpbihwLmRvbWFpbigpKSxnLnlEb21haW4ocC5kb21haW4oKSksPQpiLnlEb21haW4ocC5k b21haW4oKSksRC5sZW5ndGgmJmQzLnRyYW5zaXRpb24oVSkuY2FsbCh5KSxQLmxlbmd0aCYmZDMu dHJhbnM9Cml0aW9uKFgpLmNhbGwoYiksTS5sZW5ndGgmJmQzLnRyYW5zaXRpb24oUikuY2FsbCht KSxfLmxlbmd0aCYmZDMudHJhbnNpdGlvbj0KKFcpLmNhbGwoZyksQS5sZW5ndGgmJmQzLnRyYW5z aXRpb24ocSkuY2FsbChkKSxPLmxlbmd0aCYmZDMudHJhbnNpdGlvbih6KS5jPQphbGwodiksdy50 aWNrcyhrLzEwMCkudGlja1NpemUoLUwsMCksSS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFu c2Zvcm0iLCI9CnRyYW5zbGF0ZSgwLCIrTCsiKSIpLGQzLnRyYW5zaXRpb24oSS5zZWxlY3QoIi54 LmF4aXMiKSkuY2FsbCh3KSxFLnRpY2tzKEwvMz0KNikudGlja1NpemUoLWssMCksZDMudHJhbnNp dGlvbihJLnNlbGVjdCgiLnkxLmF4aXMiKSkuY2FsbChFKSxTLnRpY2tzKEwvMzYpPQoudGlja1Np emUoLWssMCksZDMudHJhbnNpdGlvbihJLnNlbGVjdCgiLnkyLmF4aXMiKSkuY2FsbChTKSxJLnNl bGVjdCgiLnkyLmE9CnhpcyIpLnN0eWxlKCJvcGFjaXR5IixCLmxlbmd0aD8xOjApLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EucmFuZ2UoKT0KWzFdKyIsMCkiKSx4LmRpc3BhdGNoLm9u KCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Qy51cGRhdGUoKX0pLFQub24oInRvb2x0PQppcFNo b3ciLGZ1bmN0aW9uKGUpe28mJk4oZSxmLnBhcmVudE5vZGUpfSl9KSxDfXZhciB0PTNEe3RvcDoz MCxyaWdodDoyMCxib3Q9CnRvbTo1MCxsZWZ0OjYwfSxuPTNEZDMuc2NhbGUuY2F0ZWdvcnkyMCgp LnJhbmdlKCkscj0zRG51bGwsaT0zRG51bGwscz0zRCEwLD0Kbz0zRCEwLHU9M0RmdW5jdGlvbihl LHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPQo+ In0sYSxmLGwsYyxhPTNEZDMuc2NhbGUubGluZWFyKCksaD0zRGQzLnNjYWxlLmxpbmVhcigpLHA9 M0RkMy5zY2FsZS5saW5lYXI9CigpLGQ9M0RlLm1vZGVscy5saW5lKCkueVNjYWxlKGgpLHY9M0Rl Lm1vZGVscy5saW5lKCkueVNjYWxlKHApLG09M0RlLm1vZGVscz0KLm11bHRpQmFyKCkuc3RhY2tl ZCghMSkueVNjYWxlKGgpLGc9M0RlLm1vZGVscy5tdWx0aUJhcigpLnN0YWNrZWQoITEpLnlTY2Fs PQplKHApLHk9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpLnlTY2FsZShoKSxiPTNEZS5tb2RlbHMu c3RhY2tlZEFyZWEoKS55U2NhbGU9CihwKSx3PTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKGEpLm9y aWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNSksRT0zRGUubW9kZT0KbHMuYXhpcygpLnNjYWxl KGgpLm9yaWVudCgibGVmdCIpLFM9M0RlLm1vZGVscy5heGlzKCkuc2NhbGUocCkub3JpZW50KCJy aWdoPQp0IikseD0zRGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgzMCksVD0zRGQzLmRpc3BhdGNo KCJ0b29sdGlwU2hvdyIsInRvb2x0aXA9CkhpZGUiKSxOPTNEZnVuY3Rpb24odCxuKXt2YXIgcj0z RHQucG9zWzBdKyhuLm9mZnNldExlZnR8fDApLGk9M0R0LnBvc1sxXSsobj0KLm9mZnNldFRvcHx8 MCkscz0zRHcudGlja0Zvcm1hdCgpKGQueCgpKHQucG9pbnQsdC5wb2ludEluZGV4KSksbz0zRCh0 LnNlcmllPQpzLnlBeGlzPTNEPTNEMj9TOkUpLnRpY2tGb3JtYXQoKShkLnkoKSh0LnBvaW50LHQu cG9pbnRJbmRleCkpLGE9M0R1KHQuc2VyaWU9CnMua2V5LHMsbyx0LEMpO2UudG9vbHRpcC5zaG93 KFtyLGldLGEsdW5kZWZpbmVkLHVuZGVmaW5lZCxuLm9mZnNldFBhcmVudCl9Oz0KcmV0dXJuIGQu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9 M0RbZS5wb3NbPQowXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxk LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQ9Ci50b29sdGlwIixmdW5jdGlvbihlKXtULnRv b2x0aXBIaWRlKGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50bz0Kb2x0aXAi LGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50 b29sdGlwU2hvdyhlPQopfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAi LGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSw9Cm0uZGlzcGF0Y2gub24oImVsZW1lbnRN b3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZT0KZnQs ZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxtLmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdXQudG9vbHRpPQpwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksZy5kaXNw YXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIiw9CmZ1bmN0aW9uKGUpe2UucG9zPTNE W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLGcuZD0K aXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRp cEhpZGUoZSl9KSx5LmRpc3BhPQp0Y2gub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtpZigh TWF0aC5yb3VuZCh5LnkoKShlLnBvaW50KSoxMDApKXJldHVybiA9CnNldFRpbWVvdXQoZnVuY3Rp b24oKXtkMy5zZWxlY3RBbGwoIi5wb2ludC5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LDAp LD0KITE7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBT aG93KGUpfSkseS5kaXNwYXRjaC5vPQpuKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oZSl7VC50b29s dGlwSGlkZShlKX0pLGIuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93Iiw9CmZ1bmN0aW9uKGUpe2lm KCFNYXRoLnJvdW5kKGIueSgpKGUucG9pbnQpKjEwMCkpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rp b24oKT0Ke2QzLnNlbGVjdEFsbCgiLnBvaW50LmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0s MCksITE7ZS5wb3M9M0RbZS5wb3NbMF0rPQp0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRp cFNob3coZSl9KSxiLmRpc3BhdGNoLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Q9CmlvbihlKXtULnRv b2x0aXBIaWRlKGUpfSksZC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixm dW5jdGlvbj0KKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50 b29sdGlwU2hvdyhlKX0pLGQuZGlzcGF0Y2guPQpvbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAi LGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSx2LmRpc3BhdGNoLm9uKCI9CmVsZW1lbnRN b3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUu cG9zWzFdK3QudD0Kb3BdLFQudG9vbHRpcFNob3coZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7PQpULnRvb2x0aXBIaWRlKGUpfSksVC5vbigi dG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7byYmZS50b29sdGlwLmNsZWFudXAoKX0pLEM9Ci5kaXNw YXRjaD0zRFQsQy5saW5lczE9M0RkLEMubGluZXMyPTNEdixDLmJhcnMxPTNEbSxDLmJhcnMyPTNE ZyxDLnN0YWNrMT0zRD0KeSxDLnN0YWNrMj0zRGIsQy54QXhpcz0zRHcsQy55QXhpczE9M0RFLEMu eUF4aXMyPTNEUyxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wPQp0aW9uc0Z1bmMuYmluZChDKSxDLng9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZ2V0WD0zRGUsZC54KGU9Ciks bS54KGUpLEMpOmdldFh9LEMueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhnZXRZPTNEZSxkLnkoZT0KKSxtLnkoZSksQyk6Z2V0WX0sQy55RG9tYWluMT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxDPQopOmx9LEMueURvbWFpbjI9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsQyk6Y30sQy5tYXJnaW49 Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PTNEZSxDKTp0fSxDLndp ZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn0s Qy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhpPTNEZSxD KTppfSxDLmNvbG9yPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0Rl LHg9Ci5jb2xvcihlKSxDKTpufSxDLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGUsQz0KKTpzfSxDLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLEMpOm99LEMudG9vbHRpPQpwQ29udGVudD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxDKTp1fSxDfSxlLm1vZGVs cy5vaGw9CmNCYXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXt2YXIgZz0zRG4tdC5sZWZ0LT0KdC5yaWdodCx4PTNEci10LnRvcC10LmJvdHRvbSxU PTNEZDMuc2VsZWN0KHRoaXMpO3MuZG9tYWluKHl8fGQzLmV4dGVudChlWzBdPQoudmFsdWVzLm1h cCh1KS5jb25jYXQocCkpKSx2P3MucmFuZ2Uod3x8W2cqLjUvZVswXS52YWx1ZXMubGVuZ3RoLGcq KGVbMF0udmE9Cmx1ZXMubGVuZ3RoLS41KS9lWzBdLnZhbHVlcy5sZW5ndGhdKTpzLnJhbmdlKHd8 fFswLGddKSxvLmRvbWFpbihifHxbZDMubWluKD0KZVswXS52YWx1ZXMubWFwKGgpLmNvbmNhdChk KSksZDMubWF4KGVbMF0udmFsdWVzLm1hcChjKS5jb25jYXQoZCkpXSkucmFuZ2UoPQpFfHxbeCww XSkscy5kb21haW4oKVswXT0zRD0zRD0zRHMuZG9tYWluKClbMV0mJihzLmRvbWFpbigpWzBdP3Mu ZG9tYWluKFtzLmQ9Cm9tYWluKClbMF0tcy5kb21haW4oKVswXSouMDEscy5kb21haW4oKVsxXStz LmRvbWFpbigpWzFdKi4wMV0pOnMuZG9tYWluKFstMT0KLDFdKSksby5kb21haW4oKVswXT0zRD0z RD0zRG8uZG9tYWluKClbMV0mJihvLmRvbWFpbigpWzBdP28uZG9tYWluKFtvLmRvbWFpPQpuKClb MF0rby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsxXS1vLmRvbWFpbigpWzFdKi4wMV0pOm8u ZG9tYWluKFstMSwxXSk9Cik7dmFyIE49M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52 LXdyYXAubnYtb2hsY0JhciIpLmRhdGEoW2VbMF0udmFsdT0KZXNdKSxDPTNETi5lbnRlcigpLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW9obGNCYXIiKSxrPTNEPQpD LmFwcGVuZCgiZGVmcyIpLEw9M0RDLmFwcGVuZCgiZyIpLEE9M0ROLnNlbGVjdCgiZyIpO0wuYXBw ZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LXRpY2tzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksVC5vbj0KKCJjbGljayIsZnVuY3Rpb24o ZSx0KXtTLmNoYXJ0Q2xpY2soe2RhdGE6ZSxpbmRleDp0LHBvczpkMy5ldmVudCxpZDppfSl9KSxr PQouYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtY2hhcnQtY2xpcC1wYXRoLSIraSku YXBwZW5kKCJyZWN0IiksTi5zZWw9CmVjdCgiI252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIiByZWN0 IikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhlaWdodCIseCksQS5hdD0KdHIoImNsaXAtcGF0aCIs bT8idXJsKCNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIpIjoiIik7dmFyIE89M0ROLnNlbGVjdCgi Lm52PQotdGlja3MiKS5zZWxlY3RBbGwoIi5udi10aWNrIikuZGF0YShmdW5jdGlvbihlKXtyZXR1 cm4gZX0pO08uZXhpdCgpLnJlbW92ZSg9Cik7dmFyIE09M0RPLmVudGVyKCkuYXBwZW5kKCJwYXRo IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oZihlLD0KdCk+bChlLHQpPyJu di10aWNrIG5lZ2F0aXZlIjoibnYtdGljayBwb3NpdGl2ZSIpKyIgbnYtdGljay0iK24rIi0iK3R9 KS5hdHRyPQooImQiLGZ1bmN0aW9uKHQsbil7dmFyIHI9M0RnL2VbMF0udmFsdWVzLmxlbmd0aCou OTtyZXR1cm4ibTAsMGwwLCIrKG8oZih0LG49CikpLW8oYyh0LG4pKSkrImwiKyAtci8yKyIsMGwi K3IvMisiLDBsMCwiKyhvKGgodCxuKSktbyhmKHQsbikpKSsibDAsIisobyhsKD0KdCxuKSktbyho KHQsbikpKSsibCIrci8yKyIsMGwiKyAtci8yKyIsMHoifSkuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbihlLHQpPQp7cmV0dXJuInRyYW5zbGF0ZSgiK3ModShlLHQpKSsiLCIrbyhjKGUsdCkpKyIp In0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQ9CixuKXtkMy5zZWxlY3QodGhpcykuY2xhc3Nl ZCgiaG92ZXIiLCEwKSxTLmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50OnQsc2VyaWVzOj0KZVswXSxw b3M6W3ModSh0LG4pKSxvKGEodCxuKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDowLGU6ZDMu ZXZlbnR9KX0pLm9uPQooIm1vdXNlb3V0IixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5j bGFzc2VkKCJob3ZlciIsITEpLFMuZWxlbWVudE1vdXM9CmVvdXQoe3BvaW50OnQsc2VyaWVzOmVb MF0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0pfSkub24oImNsaT0KY2si LGZ1bmN0aW9uKGUsdCl7Uy5lbGVtZW50Q2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6 dCxwb3M6W3ModShlLHQpPQopLG8oYShlLHQpKV0sZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQu c3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGY9CnVuY3Rpb24oZSx0KXtTLmVsZW1l bnREYmxDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkpLD0K byhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p O08uYXR0cigiY2xhc3MiLGZ1PQpuY3Rpb24oZSx0LG4pe3JldHVybihmKGUsdCk+bChlLHQpPyJu di10aWNrIG5lZ2F0aXZlIjoibnYtdGljayBwb3NpdGl2ZSIpKyI9CiBudi10aWNrLSIrbisiLSIr dH0pLGQzLnRyYW5zaXRpb24oTykuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVy bj0KInRyYW5zbGF0ZSgiK3ModShlLHQpKSsiLCIrbyhjKGUsdCkpKyIpIn0pLmF0dHIoImQiLGZ1 bmN0aW9uKHQsbil7dmFyIHI9M0RnPQovZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCww bDAsIisobyhmKHQsbikpLW8oYyh0LG4pKSkrImwiKyAtci8yKyIsMGw9CiIrci8yKyIsMGwwLCIr KG8oaCh0LG4pKS1vKGYodCxuKSkpKyJsMCwiKyhvKGwodCxuKSktbyhoKHQsbikpKSsibCIrci8y KyIsMD0KbCIrIC1yLzIrIiwweiJ9KX0pLHh9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206 MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwPQowLGk9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkq MWU0KSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxpbmU9CmFyKCksdT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEZnVu Y3Rpb24oZT0KKXtyZXR1cm4gZS5vcGVufSxsPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xvc2V9 LGM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5oPQppZ2h9LGg9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZS5sb3d9LHA9M0RbXSxkPTNEW10sdj0zRCExLG09M0QhMCxnPTNEZS51dGlscy49CmRlZmF1bHRD b2xvcigpLHksYix3LEUsUz0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNr IiwiZWxlbWVudD0KRGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0 Iik7cmV0dXJuIHguZGlzcGF0Y2g9M0RTLHgub3B0PQppb25zPTNEZS51dGlscy5vcHRpb25zRnVu Yy5iaW5kKHgpLHgueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KHU9 M0RlLHgpOnV9LHgueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNE ZSx4KTphfSx4Lm9wZT0Kbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhm PTNEZSx4KTpmfSx4LmNsb3NlPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obD0zRGUseCk6bH0seC5oaWdoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxl bmd0aD8oYz0zRGUseCk6Y30seC5sb3c9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaD0zRGUseCk6aD0KfSx4Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QiPQp1bmRlZmluZWQiP2UudG9wOnQu dG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmk9 CmdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0 LmJvdHRvbSx0LmxlZnQ9M0R0eT0KcGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQu bGVmdCx4KTp0fSx4LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0 aD8obj0zRGUseCk6bn0seC5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmc9CnRoPyhyPTNEZSx4KTpyfSx4LnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhzPTNEZSx4KTpzfT0KLHgueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KG89M0RlLHgpOm99LHgueERvbWFpbj0zRGZ1PQpuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLHgpOnl9LHgueURvbWFpbj0zRGZ1bmN0aW9uKGUp e3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLHgpOmJ9LHgueFJhbmdlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8odz0zRGUseCk6d30seC55UmFuZ2U9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUseCk6PQpFfSx4LmZvcmNl WD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSx4KTpwfSx4LmZv cmNlWT0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHgpOmR9 LHgucGFkRGF0YT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Rl LHgpOnZ9LHguY2xpcEVkZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3Ro PyhtPTNEZSx4KTptfSx4LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGc9M0RlLnU9CnRpbHMuZ2V0Q29sb3IodCkseCk6Z30seC5pZD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSx4KT0KOml9LHh9LGUubW9kZWxzLnBpZT0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe2Z1PQpuY3Rp b24gcShlKXt2YXIgdD0zRChlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkqOTAvTWF0aC5QSS05MDty ZXR1cm4gdD45MD90LTE9CjgwOnR9ZnVuY3Rpb24gUihlKXtlLmVuZEFuZ2xlPTNEaXNOYU4oZS5l bmRBbmdsZSk/MDplLmVuZEFuZ2xlLGUuc3RhcnRBbmdsZT0KPTNEaXNOYU4oZS5zdGFydEFuZ2xl KT8wOmUuc3RhcnRBbmdsZSxtfHwoZS5pbm5lclJhZGl1cz0zRDApO3ZhciB0PTNEZDMuaW50PQpl cnBvbGF0ZSh0aGlzLl9jdXJyZW50LGUpO3JldHVybiB0aGlzLl9jdXJyZW50PTNEdCgwKSxmdW5j dGlvbihlKXtyZXR1cm4gQSg9CnQoZSkpfX1mdW5jdGlvbiBVKGUpe2UuaW5uZXJSYWRpdXM9M0Qw O3ZhciB0PTNEZDMuaW50ZXJwb2xhdGUoe3N0YXJ0QW5nbGU6MD0KLGVuZEFuZ2xlOjB9LGUpO3Jl dHVybiBmdW5jdGlvbihlKXtyZXR1cm4gQSh0KGUpKX19dmFyIG89M0RuLXQubGVmdC10LnJpZ2h0 PQosZj0zRHItdC50b3AtdC5ib3R0b20sUz0zRE1hdGgubWluKG8sZikvMix4PTNEUy1TLzUsVD0z RGQzLnNlbGVjdCh0aGlzKSxOPQo9M0RULnNlbGVjdEFsbCgiLm52LXdyYXAubnYtcGllIikuZGF0 YShlKSxDPTNETi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudmQzIG52LXdy YXAgbnYtcGllIG52LWNoYXJ0LSIrdSksaz0zREMuYXBwZW5kKCJnIiksTD0zRE4uc2VsZWN0KCJn Ij0KKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcGllIiksay5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXBpZUxhPQpiZWxzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksTC5zZWxlY3QoIi5udi09CnBpZSIpLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiK28vMisiLCIrZi8yKyIpIiksTC5zZWxlY3QoIi5udi1waWVM YWJlbD0KcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28vMisiLCIrZi8yKyIpIiks VC5vbigiY2xpY2siLGZ1bmN0aW9uKGUsPQp0KXtFLmNoYXJ0Q2xpY2soe2RhdGE6ZSxpbmRleDp0 LHBvczpkMy5ldmVudCxpZDp1fSl9KTt2YXIgQT0zRGQzLnN2Zy5hcmMoKS49Cm91dGVyUmFkaXVz KHgpO3kmJkEuc3RhcnRBbmdsZSh5KSxiJiZBLmVuZEFuZ2xlKGIpLG0mJkEuaW5uZXJSYWRpdXMo Uyp3KTt2YT0KciBPPTNEZDMubGF5b3V0LnBpZSgpLnNvcnQobnVsbCkudmFsdWUoZnVuY3Rpb24o ZSl7cmV0dXJuIGUuZGlzYWJsZWQ/MDpzKGUpPQp9KSxNPTNETi5zZWxlY3QoIi5udi1waWUiKS5z ZWxlY3RBbGwoIi5udi1zbGljZSIpLmRhdGEoTyksXz0zRE4uc2VsZWN0KCIubnY9Ci1waWVMYWJl bHMiKS5zZWxlY3RBbGwoIi5udi1sYWJlbCIpLmRhdGEoTyk7TS5leGl0KCkucmVtb3ZlKCksXy5l eGl0KCkucmVtbz0KdmUoKTt2YXIgRD0zRE0uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXNsaWNlIikub24oIm1vdXNlb3ZlciIsPQpmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0 aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLEUuZWxlbWVudE1vdXNlb3Zlcih7bGFiZWw9CjppKGUu ZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YSxwb2ludEluZGV4OnQscG9zOltkMy5l dmVudC5wYWdlWCxkMz0KLmV2ZW50LnBhZ2VZXSxpZDp1fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0 aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoPQoiaG92ZXIiLCExKSxFLmVsZW1lbnRN b3VzZW91dCh7bGFiZWw6aShlLmRhdGEpLHZhbHVlOnMoZS5kYXRhKSxwb2ludDplLmRhdGE9Cixp bmRleDp0LGlkOnV9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtFLmVsZW1lbnRDbGljayh7 bGFiZWw6aShlLmRhdGEpLD0KdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YSxpbmRleDp0LHBv czpkMy5ldmVudCxpZDp1fSksZDMuZXZlbnQuc3RvcFByb3BhPQpnYXRpb24oKX0pLm9uKCJkYmxj bGljayIsZnVuY3Rpb24oZSx0KXtFLmVsZW1lbnREYmxDbGljayh7bGFiZWw6aShlLmRhdGEpLHY9 CmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YSxpbmRleDp0LHBvczpkMy5ldmVudCxpZDp1fSks ZDMuZXZlbnQuc3RvcFByb3BhZz0KYXRpb24oKX0pO00uYXR0cigiZmlsbCIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gYShlLHQpfSkuYXR0cigic3Ryb2tlIixmdW5jdGlvPQpuKGUsdCl7cmV0dXJuIGEo ZSx0KX0pO3ZhciBQPTNERC5hcHBlbmQoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKGUpe3RoaXMuX2N1 cnI9CmVudD0zRGV9KTtNLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEEpO2lmKGwpe3ZhciBIPTNE ZDMuc3ZnLmFyYygpLmlubmVyUmFkaT0KdXMoMCk7YyYmKEg9M0RBKSxoJiYoSD0zRGQzLnN2Zy5h cmMoKS5vdXRlclJhZGl1cyhBLm91dGVyUmFkaXVzKCkpKSxfLmVudGVyPQooKS5hcHBlbmQoImci KS5jbGFzc2VkKCJudi1sYWJlbCIsITApLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGQzLnNl bGVjdCg9CnRoaXMpO24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtpZihnKXtlLm91dGVy UmFkaXVzPTNEeCsxMCxlLmlubmVyUmFkaT0KdXM9M0R4KzE1O3ZhciB0PTNEKGUuc3RhcnRBbmds ZStlLmVuZEFuZ2xlKS8yKigxODAvTWF0aC5QSSk7cmV0dXJuKGUuc3RhcnRBPQpuZ2xlK2UuZW5k QW5nbGUpLzI8TWF0aC5QST90LT0zRDkwOnQrPTNEOTAsInRyYW5zbGF0ZSgiK0guY2VudHJvaWQo ZSkrIikgcm89CnRhdGUoIit0KyIpIn1yZXR1cm4gZS5vdXRlclJhZGl1cz0zRFMrMTAsZS5pbm5l clJhZGl1cz0zRFMrMTUsInRyYW5zbGF0ZSgiKz0KSC5jZW50cm9pZChlKSsiKSJ9KSxuLmFwcGVu ZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCIjZmZmIikuc3R5bGUoImZpbGwiLCIjPQpmZmYiKS5h dHRyKCJyeCIsMykuYXR0cigicnkiLDMpLG4uYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5j aG9yIixnPyhlLnM9CnRhcnRBbmdsZStlLmVuZEFuZ2xlKS8yPE1hdGguUEk/InN0YXJ0IjoiZW5k IjoibWlkZGxlIikuc3R5bGUoImZpbGwiLCIjMDAwIj0KKX0pO3ZhciBCPTNEe30saj0zRDE0LEY9 M0QxNDAsST0zRGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKGVbMF0vRikqRisiPQosIitN YXRoLmZsb29yKGVbMV0vaikqan07Xy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe2lmKGcp e2Uub3V0ZXJSYWRpdXM9Cj0zRHgrMTAsZS5pbm5lclJhZGl1cz0zRHgrMTU7dmFyIHQ9M0QoZS5z dGFydEFuZ2xlK2UuZW5kQW5nbGUpLzIqKDE4MC9NYXRoLj0KUEkpO3JldHVybihlLnN0YXJ0QW5n bGUrZS5lbmRBbmdsZSkvMjxNYXRoLlBJP3QtPTNEOTA6dCs9M0Q5MCwidHJhbnNsYXRlKCIrPQpI LmNlbnRyb2lkKGUpKyIpIHJvdGF0ZSgiK3QrIikifWUub3V0ZXJSYWRpdXM9M0RTKzEwLGUuaW5u ZXJSYWRpdXM9M0RTKzE1O3Y9CmFyIG49M0RILmNlbnRyb2lkKGUpLHI9M0RJKG4pO3JldHVybiBC W3JdJiYoblsxXS09M0RqKSxCW0kobildPTNEITAsInRyYW5zbD0KYXRlKCIrbisiKSJ9KSxfLnNl bGVjdCgiLm52LWxhYmVsIHRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLGc/KGQuc3RhcnRBbmds PQplK2QuZW5kQW5nbGUpLzI8TWF0aC5QST8ic3RhcnQiOiJlbmQiOiJtaWRkbGUiKS50ZXh0KGZ1 bmN0aW9uKGUsdCl7dmFyIG49M0Q9CihlLmVuZEFuZ2xlLWUuc3RhcnRBbmdsZSkvKDIqTWF0aC5Q SSkscj0zRHtrZXk6aShlLmRhdGEpLHZhbHVlOnMoZS5kYXRhKSxwZT0KcmNlbnQ6ZDMuZm9ybWF0 KCIlIikobil9O3JldHVybiBlLnZhbHVlJiZuPnY/cltwXToiIn0pfX0pLFN9dmFyIHQ9M0R7dG9w OjAsPQpyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDUwMCxyPTNENTAwLGk9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS54fSxzPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gZS55fSxvPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGUuZGVzY3JpcHRpb259LHU9M0RNYXRoLmZsb29yKD0KTWF0aC5yYW5kb20o KSoxZTQpLGE9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGY9M0RkMy5mb3JtYXQoIiwuMmYiKSxs PTNEITAsPQpjPTNEITAsaD0zRCExLHA9M0Qia2V5Iix2PTNELjAyLG09M0QhMSxnPTNEITEseT0z RCExLGI9M0QhMSx3PTNELjUsRT0zRGQzLmQ9CmlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50 Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZT0KbGVtZW50TW91 c2VvdXQiKTtyZXR1cm4gUy5kaXNwYXRjaD0zREUsUy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kPQooUyksUy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPQo9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0 LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDo9CnQucmlnaHQs dC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0 b20sdC5sZWZ0PQo9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQs Uyk6dH0sUy53aWR0aD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49 M0RlLFMpOm59LFMuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0 aD8ocj0zRGUsUyk6cn0sUy52YWx1ZXM9M0RmdW5jdGlvbih0KXtyZXR1cm4gZS5sb2coInBpZS52 YWx1ZXMoKSBpcyBuPQpvIGxvbmdlciBzdXBwb3J0ZWQuIiksU30sUy54PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLFM9Cik6aX0sUy55PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RkMy5mdW5jdG9yKGUpLFMpOnN9LFMuZD0KZXNj cmlwdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxTKTpv fSxTLnNob3dMYWJlbHM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhs PTNEZSxTKTpsfSxTLmxhYmVsU3VuYmVhbUxheW91dD0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGc9M0RlLFMpOmd9LFMuZG9udXRMYWJlbHNPdXRzaWRlPTNEZnVuPQpj dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsUyk6aH0sUy5waWVMYWJlbHNP dXRzaWRlPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsUyk6 Y30sUy5sYWJlbFR5cGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhw PTNEZSxwPTNEcHx8ImtleSIsUyk6cH0sUy5kb251dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 PQptZW50cy5sZW5ndGg/KG09M0RlLFMpOm19LFMuZG9udXRSYXRpbz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KHc9M0RlLFMpOnd9LFMuc3RhcnRBbmdsZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxTKT0KOnl9LFMuZW5kQW5nbGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsUyk6Yn0sUy5pZD0z RGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLFMpOnV9LFMuY29s b3I9M0RmdW5jdGlvbih0KXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZS51dGlscy5n ZXRDb2xvcih0KSxTKTphfSxTLnZhbHVlRm9ybWF0PTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZj0zRGUsUyk6Zn0sUy5sYWJlbFRocmVzaG9sZD0zRGZ1bmN0aW9uKGUp e3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLFMpOnZ9LFN9LGUubW9kZWxzLnBpZUNo YXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiA9CnYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihl KXt2YXIgdT0zRGQzLnNlbGVjdCh0aGlzKSxhPTNEdGhpcyxmPTNEKGl8fHBhcj0Kc2VJbnQodS5z dHlsZSgid2lkdGgiKSl8fDk2MCktci5sZWZ0LXIucmlnaHQsZD0zRChzfHxwYXJzZUludCh1LnN0 eWxlKCJoZWlnPQpodCIpKXx8NDAwKS1yLnRvcC1yLmJvdHRvbTt2LnVwZGF0ZT0zRGZ1bmN0aW9u KCl7dS5jYWxsKHYpfSx2LmNvbnRhaW5lcj0zRHQ9CmhpcyxsLmRpc2FibGVkPTNEZS5tYXAoZnVu Y3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIWMpe3ZhciBtO2M9M0R7fT0KO2Zvciht IGluIGwpbFttXWluc3RhbmNlb2YgQXJyYXk/Y1ttXT0zRGxbbV0uc2xpY2UoMCk6Y1ttXT0zRGxb bV19aWYoIWV8fCFlPQoubGVuZ3RoKXt2YXIgZz0zRHUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIiku ZGF0YShbaF0pO3JldHVybiBnLmVudGVyKCkuYXBwZW49CmQoInRleHQiKS5hdHRyKCJjbGFzcyIs Im52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuYz0KaG9y IiwibWlkZGxlIiksZy5hdHRyKCJ4IixyLmxlZnQrZi8yKS5hdHRyKCJ5IixyLnRvcCtkLzIpLnRl eHQoZnVuY3Rpb24oZSl7PQpyZXR1cm4gZX0pLHZ9dS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5y ZW1vdmUoKTt2YXIgeT0zRHUuc2VsZWN0QWxsKCJnLm52LXc9CnJhcC5udi1waWVDaGFydCIpLmRh dGEoW2VdKSxiPTNEeS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudj0K LXdyYXAgbnYtcGllQ2hhcnQiKS5hcHBlbmQoImciKSx3PTNEeS5zZWxlY3QoImciKTtiLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzPQoiLCJudi1waWVXcmFwIiksYi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxvJiYobi53aWR0aChmKS49CmtleSh0LngoKSkseS5zZWxl Y3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbChuKSxyLnRvcCE9M0RuLmhlaWdodCgp Jj0KJihyLnRvcD0zRG4uaGVpZ2h0KCksZD0zRChzfHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQi KSl8fDQwMCktci50b3Atci5ib3R0PQpvbSkseS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLXIudG9wKyIpIik9CikseS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoIityLmxlZnQrIiwiK3IudG9wKyIpIiksdC53aWR0aChmKS5oZWln aHQoZD0KKTt2YXIgRT0zRHcuc2VsZWN0KCIubnYtcGllV3JhcCIpLmRhdHVtKFtlXSk7ZDMudHJh bnNpdGlvbihFKS5jYWxsKHQpLG4uZGlzPQpwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9u KGUpe2w9M0RlLHAuc3RhdGVDaGFuZ2UobCksdi51cGRhdGUoKX0pLHQuZGk9CnNwYXRjaC5vbigi ZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe3AudG9vbHRpcEhpZGUoZSl9KSxw Lm9uKCJjaD0KYW5nZVN0YXRlIixmdW5jdGlvbih0KXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5k ZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvPQpuKGUsbil7ZS5kaXNhYmxlZD0zRHQuZGlzYWJs ZWRbbl19KSxsLmRpc2FibGVkPTNEdC5kaXNhYmxlZCksdi51cGRhdGUoKX0pfSk9Cix2fXZhciB0 PTNEZS5tb2RlbHMucGllKCksbj0zRGUubW9kZWxzLmxlZ2VuZCgpLHI9M0R7dG9wOjMwLHJpZ2h0 OjIwLGJvdHRvbT0KOjIwLGxlZnQ6MjB9LGk9M0RudWxsLHM9M0RudWxsLG89M0QhMCx1PTNEZS51 dGlscy5kZWZhdWx0Q29sb3IoKSxhPTNEITAsZj0KPTNEZnVuY3Rpb24oZSx0LG4scil7cmV0dXJu IjxoMz4iK2UrIjwvaDM+IisiPHA+Iit0KyI8L3A+In0sbD0zRHt9LGM9M0RudWxsPQosaD0zRCJO byBEYXRhIEF2YWlsYWJsZS4iLHA9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlw SGlkZSIsInN0YXQ9CmVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLGQ9M0RmdW5jdGlvbihuLHIpe3Zh ciBpPTNEdC5kZXNjcmlwdGlvbigpKG4ucG9pbnQpfD0KfHQueCgpKG4ucG9pbnQpLHM9M0RuLnBv c1swXSsociYmci5vZmZzZXRMZWZ0fHwwKSxvPTNEbi5wb3NbMV0rKHImJnIub2Zmc2V0PQpUb3B8 fDApLHU9M0R0LnZhbHVlRm9ybWF0KCkodC55KCkobi5wb2ludCkpLGE9M0RmKGksdSxuLHYpO2Uu dG9vbHRpcC5zaG93KFs9CnMsb10sYSxuLnZhbHVlPDA/Im4iOiJzIixudWxsLHIpfTtyZXR1cm4g dC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50bz0Kb2x0aXAiLGZ1bmN0aW9uKGUpe2Uu cG9zPTNEW2UucG9zWzBdK3IubGVmdCxlLnBvc1sxXStyLnRvcF0scC50b29sdGlwU2hvdyhlPQop fSkscC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2EmJmQoZSl9KSxwLm9uKCJ0b29sdGlw SGlkZSIsZnVuY3Rpb24oKXs9CmEmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSx2LmxlZ2VuZD0zRG4s di5kaXNwYXRjaD0zRHAsdi5waWU9M0R0LGQzLnJlYmluZCh2LD0KdCwidmFsdWVGb3JtYXQiLCJ2 YWx1ZXMiLCJ4IiwieSIsImRlc2NyaXB0aW9uIiwiaWQiLCJzaG93TGFiZWxzIiwiZG9udXRMYWJl PQpsc091dHNpZGUiLCJwaWVMYWJlbHNPdXRzaWRlIiwibGFiZWxUeXBlIiwiZG9udXQiLCJkb251 dFJhdGlvIiwibGFiZWxUaHJlc2g9Cm9sZCIpLHYub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1 bmMuYmluZCh2KSx2Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5n dGg/KHIudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnIudG9wLHIucmln aHQ9Cj0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6ci5yaWdodCxyLmJv dHRvbT0zRHR5cGVvZiBlLmJvdHRvbT0KIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnIuYm90dG9t LHIubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sPQplZnQ6ci5sZWZ0LHYp OnJ9LHYud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs dik6aX09Cix2LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhz PTNEZSx2KTpzfSx2LmNvbG9yPTNEZnVuYz0KdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odT0zRGUudXRpbHMuZ2V0Q29sb3Iociksbi5jb2xvcih1KSx0LmNvbG9yPQoodSksdik6dX0s di5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0Rl LHYpOm99LHY9Ci50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhhPTNEZSx2KTphfSx2LnRvb2x0aXBDb250ZT0KbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZj0zRGUsdik6Zn0sdi5zdGF0ZT0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHYpOmx9LHYuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oYz0zRGUsdik6Y30sdi5ub0RhdGE9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhoPTNEZSx2KTpofSx2fSxlLm1vZGVs cy5zY2F0dGVyPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBJKHEpe3JldHVybiBxLmVhY2goPQpmdW5j dGlvbihJKXtmdW5jdGlvbiBRKCl7aWYoIWcpcmV0dXJuITE7dmFyIGUsaT0zRGQzLm1lcmdlKEku bWFwKGZ1bmN0aW9uKGU9Cix0KXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsbil7dmFy IHI9M0RmKGUsbiksaT0zRGwoZSxuKTtyZXR1cm5bbyhyKT0KLHUoaSksdCxuLGVdfSkuZmlsdGVy KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZVs0XSx0KX0pfSkpO2lmKEQ9M0Q9M0Q9M0QhMCl7PQpp Zih4KXt2YXIgYT0zRFguc2VsZWN0KCJkZWZzIikuc2VsZWN0QWxsKCIubnYtcG9pbnQtY2xpcHMi KS5kYXRhKFtzXSkuZW50ZXI9CigpO2EuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImNsYXNzIiwi bnYtcG9pbnQtY2xpcHMiKS5hdHRyKCJpZCIsIm52LXBvaW50cz0KLWNsaXAtIitzKTt2YXIgYz0z RFguc2VsZWN0KCIjbnYtcG9pbnRzLWNsaXAtIitzKS5zZWxlY3RBbGwoImNpcmNsZSIpLmRhdGEo PQppKTtjLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIixUKSxjLmV4aXQoKS5yZW1v dmUoKSxjLmF0dHIoImN4IixmdW49CmN0aW9uKGUpe3JldHVybiBlWzBdfSkuYXR0cigiY3kiLGZ1 bmN0aW9uKGUpe3JldHVybiBlWzFdfSksWC5zZWxlY3QoIi5udi1wbz0KaW50LXBhdGhzIikuYXR0 cigiY2xpcC1wYXRoIiwidXJsKCNudi1wb2ludHMtY2xpcC0iK3MrIikiKX1pLmxlbmd0aCYmKGku cHVzPQpoKFtvLnJhbmdlKClbMF0tMjAsdS5yYW5nZSgpWzBdLTIwLG51bGwsbnVsbF0pLGkucHVz aChbby5yYW5nZSgpWzFdKzIwLHUucmE9Cm5nZSgpWzFdKzIwLG51bGwsbnVsbF0pLGkucHVzaChb by5yYW5nZSgpWzBdLTIwLHUucmFuZ2UoKVswXSsyMCxudWxsLG51bGxdKT0KLGkucHVzaChbby5y YW5nZSgpWzFdKzIwLHUucmFuZ2UoKVsxXS0yMCxudWxsLG51bGxdKSk7dmFyIGg9M0RkMy5nZW9t LnBvbHlnPQpvbihbWy0xMCwtMTBdLFstMTAscisxMF0sW24rMTAscisxMF0sW24rMTAsLTEwXV0p LHA9M0QxZS02O2k9M0RpLnNvcnQoZnVuY3Q9CmlvbihlLHQpe3JldHVybiBlWzBdLXRbMF18fGVb MV0tdFsxXX0pO2Zvcih2YXIgZD0zRDA7ZDxpLmxlbmd0aC0xOylNYXRoLmFicz0KKGlbZF1bMF0t aVtkKzFdWzBdKTxwJiZNYXRoLmFicyhpW2RdWzFdLWlbZCsxXVsxXSk8cD9pLnNwbGljZShkKzEs MSk6ZCsrO3ZhPQpyIHY9M0RkMy5nZW9tLnZvcm9ub2koaSkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0 dXJue2RhdGE6aC5jbGlwKGUpLHNlcmllczppW3Q9Cl1bMl0scG9pbnQ6aVt0XVszXX19KSxtPTNE WC5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdD0KYSh2KTtt LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu Im52LXBhdGgtIit0PQp9KSxtLmV4aXQoKS5yZW1vdmUoKSxtLmF0dHIoImQiLGZ1bmN0aW9uKGUp e3JldHVybiFlfHwhZS5kYXRhfHxlLmRhdGEubGVuZ3Q9Cmg9M0Q9M0Q9M0QwPyJNIDAgMCI6Ik0i K2UuZGF0YS5qb2luKCJMIikrIloifSk7dmFyIHk9M0RmdW5jdGlvbihlLG4pe2lmKEYpcj0KZXR1 cm4gMDt2YXIgcj0zRElbZS5zZXJpZXNdO2lmKHR5cGVvZiByPTNEPTNEInVuZGVmaW5lZCIpcmV0 dXJuO3ZhciBpPTNEci52PQphbHVlc1tlLnBvaW50XTtuKHtwb2ludDppLHNlcmllczpyLHBvczpb byhmKGksZS5wb2ludCkpK3QubGVmdCx1KGwoaSxlLnBvaW49CnQpKSt0LnRvcF0sc2VyaWVzSW5k ZXg6ZS5zZXJpZXMscG9pbnRJbmRleDplLnBvaW50fSl9O20ub24oImNsaWNrIixmdW5jdGlvbj0K KGUpe3koZSxfLmVsZW1lbnRDbGljayl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlKXt5KGUs Xy5lbGVtZW50TW91c2VvdmVyPQopfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe3koZSxf LmVsZW1lbnRNb3VzZW91dCl9KX1lbHNlIFguc2VsZWN0KCIubnY9Ci1ncm91cHMiKS5zZWxlY3RB bGwoIi5udi1ncm91cCIpLnNlbGVjdEFsbCgiLm52LXBvaW50Iikub24oImNsaWNrIixmdW5jdGlv bj0KKGUsbil7aWYoRnx8IUlbZS5zZXJpZXNdKXJldHVybiAwO3ZhciByPTNESVtlLnNlcmllc10s aT0zRHIudmFsdWVzW25dO18uZWxlPQptZW50Q2xpY2soe3BvaW50Omksc2VyaWVzOnIscG9zOltv KGYoaSxuKSkrdC5sZWZ0LHUobChpLG4pKSt0LnRvcF0sc2VyaWVzSW49CmRleDplLnNlcmllcyxw b2ludEluZGV4Om59KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUsbil7aWYoRnx8IUlbZS5z ZXJpZT0Kc10pcmV0dXJuIDA7dmFyIHI9M0RJW2Uuc2VyaWVzXSxpPTNEci52YWx1ZXNbbl07Xy5l bGVtZW50TW91c2VvdmVyKHtwb2ludDppPQosc2VyaWVzOnIscG9zOltvKGYoaSxuKSkrdC5sZWZ0 LHUobChpLG4pKSt0LnRvcF0sc2VyaWVzSW5kZXg6ZS5zZXJpZXMscG9pbnQ9CkluZGV4Om59KX0p Lm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7 dmFyIG49Cj0zRElbZS5zZXJpZXNdLHI9M0RuLnZhbHVlc1t0XTtfLmVsZW1lbnRNb3VzZW91dCh7 cG9pbnQ6cixzZXJpZXM6bixzZXJpZXNJbj0KZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6dH0pfSk7 Rj0zRCExfXZhciBxPTNEbi10LmxlZnQtdC5yaWdodCxSPTNEci10LnRvcC10PQouYm90dG9tLFU9 M0RkMy5zZWxlY3QodGhpcyk7SS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52YWx1ZXMuZm9yRWFj aChmdW5jdGk9Cm9uKGUpe2Uuc2VyaWVzPTNEdH0pfSk7dmFyIFc9M0ROJiZDJiZBP1tdOmQzLm1l cmdlKEkubWFwKGZ1bmN0aW9uKGUpe3JldHVybj0KIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQp e3JldHVybnt4OmYoZSx0KSx5OmwoZSx0KSxzaXplOmMoZSx0KX19KX0pKTtvLmRvPQptYWluKE58 fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkuY29uY2F0KGQpKSksdyYm SVswXT9vLnJhbmc9CmUoa3x8WyhxKkUrcSkvKDIqSVswXS52YWx1ZXMubGVuZ3RoKSxxLXEqKDEr RSkvKDIqSVswXS52YWx1ZXMubGVuZ3RoKV0pOm8ucj0KYW5nZShrfHxbMCxxXSksdS5kb21haW4o Q3x8ZDMuZXh0ZW50KFcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9KS5jb25jYXQoPQp2KSkp LnJhbmdlKEx8fFtSLDBdKSxhLmRvbWFpbihBfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7 cmV0dXJuIGUuc2l6ZX09CikuY29uY2F0KG0pKSkucmFuZ2UoT3x8WzE2LDI1Nl0pO2lmKG8uZG9t YWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigpWzFdfHx1Lj0KZG9tYWluKClbMF09M0Q9M0Q9M0R1 LmRvbWFpbigpWzFdKU09M0QhMDtvLmRvbWFpbigpWzBdPTNEPTNEPTNEby5kb21haW4oKVsxPQpd JiYoby5kb21haW4oKVswXT9vLmRvbWFpbihbby5kb21haW4oKVswXS1vLmRvbWFpbigpWzBdKi4w MSxvLmRvbWFpbigpWzFdK289Ci5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEsMV0pKSx1 LmRvbWFpbigpWzBdPTNEPTNEPTNEdS5kb21haW4oKVsxXSYmKD0KdS5kb21haW4oKVswXT91LmRv bWFpbihbdS5kb21haW4oKVswXS11LmRvbWFpbigpWzBdKi4wMSx1LmRvbWFpbigpWzFdK3UuZG9t PQphaW4oKVsxXSouMDFdKTp1LmRvbWFpbihbLTEsMV0pKSxpc05hTihvLmRvbWFpbigpWzBdKSYm by5kb21haW4oWy0xLDFdKSxpc049CmFOKHUuZG9tYWluKClbMF0pJiZ1LmRvbWFpbihbLTEsMV0p LFA9M0RQfHxvLEg9M0RIfHx1LEI9M0RCfHxhO3ZhciBYPTNEVS5zZT0KbGVjdEFsbCgiZy5udi13 cmFwLm52LXNjYXR0ZXIiKS5kYXRhKFtJXSksVj0zRFguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjPQpsYXNzIiwibnZkMyBudi13cmFwIG52LXNjYXR0ZXIgbnYtY2hhcnQtIitzKyhNPyIgbnYt c2luZ2xlLXBvaW50IjoiIikpLCQ9M0Q9ClYuYXBwZW5kKCJkZWZzIiksSj0zRFYuYXBwZW5kKCJn IiksSz0zRFguc2VsZWN0KCJnIik7Si5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtZ3Jv dXBzIiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXBvaW50LXBhdGhzIiksWC5hdHRy KCJ0cmFuPQpzZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSwkLmFwcGVu ZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm49CnYtZWRnZS1jbGlwLSIrcykuYXBwZW5kKCJyZWN0 IiksWC5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitzKyIgcmVjdCIpLmF0dHIoIj0Kd2lkdGgiLHEp LmF0dHIoImhlaWdodCIsUj4wP1I6MCksSy5hdHRyKCJjbGlwLXBhdGgiLFM/InVybCgjbnYtZWRn ZS1jbGlwLSIrPQpzKyIpIjoiIiksRj0zRCEwO3ZhciBHPTNEWC5zZWxlY3QoIi5udi1ncm91cHMi KS5zZWxlY3RBbGwoIi5udi1ncm91cCIpLmRhdGE9CihmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVu Y3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7Ry5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eT0KbGUoInN0 cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KSxHLmV4aXQoKS5y ZW1vdmUoKSxHLmF0PQp0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52 LXNlcmllcy0iK3R9KS5jbGFzc2VkKCJob3ZlciIsZnU9Cm5jdGlvbihlKXtyZXR1cm4gZS5ob3Zl cn0pLEcuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0pLnN0eT0KbGUo InN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQpfSkuc3R5bGUoInN0cm9rZS1vcGFj aXR5IiwxKS5zdHlsZSgiPQpmaWxsLW9wYWNpdHkiLC41KTtpZihwKXt2YXIgWT0zREcuc2VsZWN0 QWxsKCJjaXJjbGUubnYtcG9pbnQiKS5kYXRhKGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGUudmFsdWVz fSx5KTtZLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZT0K LHQpe3JldHVybiBlLmNvbG9yfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS5jb2xvcn0pLmF0dHIoImN4PQoiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9a ZXJvKFAoZih0LG4pKSl9KS5hdHRyKCJjeSIsZnVuY3Rpb24odCw9Cm4pe3JldHVybiBlLnV0aWxz Lk5hTnRvWmVybyhIKGwodCxuKSkpfSkuYXR0cigiciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0 aD0KLnNxcnQoYShjKGUsdCkpL01hdGguUEkpfSksWS5leGl0KCkucmVtb3ZlKCksRy5leGl0KCku c2VsZWN0QWxsKCJwYXRoLm52LXBvPQppbnQiKS5hdHRyKCJjeCIsZnVuY3Rpb24odCxuKXtyZXR1 cm4gZS51dGlscy5OYU50b1plcm8obyhmKHQsbikpKX0pLmF0dHIoImM9CnkiLGZ1bmN0aW9uKHQs bil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKHUobCh0LG4pKSl9KS5yZW1vdmUoKSxZLmVhY2go ZnVuYz0KdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1wb2ludCIsITApLmNs YXNzZWQoIm52LXBvaW50LSIrdCwhMCkuPQpjbGFzc2VkKCJob3ZlciIsITEpfSksWS5hdHRyKCJj eCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8obyg9CmYodCxuKSkpfSku YXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKHUobCh0LG4p KSl9KS5hdD0KdHIoInIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguc3FydChhKGMoZSx0KSkv TWF0aC5QSSl9KX1lbHNle3ZhciBZPTNERy5zPQplbGVjdEFsbCgicGF0aC5udi1wb2ludCIpLmRh dGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSk7WS5lbnRlcigpLmFwcGU9Cm5kKCJwYXRo Iikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J9KS5zdHlsZSgic3Ry b2tlIixmdW5jdD0KaW9uKGUsdCl7cmV0dXJuIGUuY29sb3J9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiPQorUChmKGUsdCkpKyIsIitIKGwoZSx0KSkr IikifSkuYXR0cigiZCIsZDMuc3ZnLnN5bWJvbCgpLnR5cGUoaCkuc2l6ZShmdW5jdGk9Cm9uKGUs dCl7cmV0dXJuIGEoYyhlLHQpKX0pKSxZLmV4aXQoKS5yZW1vdmUoKSxHLmV4aXQoKS5zZWxlY3RB bGwoInBhdGgubnYtcD0Kb2ludCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4idHJhbnNsYXRlKCIrbyhmKGUsdCkpKyIsIit1KGwoPQplLHQpKSsiKSJ9KS5yZW1vdmUoKSxZ LmVhY2goZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgibnYtcG9pbnQ9CiIs ITApLmNsYXNzZWQoIm52LXBvaW50LSIrdCwhMCkuY2xhc3NlZCgiaG92ZXIiLCExKX0pLFkuYXR0 cigidHJhbnNmb3JtIixmdT0KbmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK28oZihlLHQp KSsiLCIrdShsKGUsdCkpKyIpIn0pLmF0dHIoImQiLGQzLnN2PQpnLnN5bWJvbCgpLnR5cGUoaCku c2l6ZShmdW5jdGlvbihlLHQpe3JldHVybiBhKGMoZSx0KSl9KSl9Y2xlYXJUaW1lb3V0KGopLGo9 Cj0zRHNldFRpbWVvdXQoUSwzMDApLFA9M0RvLmNvcHkoKSxIPTNEdS5jb3B5KCksQj0zRGEuY29w eSgpfSksSX12YXIgdD0zRHt0bz0KcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYw LHI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCkscz0KPTNETWF0aC5mbG9vcihNYXRo LnJhbmRvbSgpKjFlNSksbz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RkMy5zY2FsZS5saW5lYXIo PQopLGE9M0RkMy5zY2FsZS5saW5lYXIoKSxmPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sbD0z RGZ1bmN0aW9uKGUpe3JldHVybiA9CmUueX0sYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnNpemV8 fDF9LGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5zaGFwZXx8ImNpcj0KY2xlIn0scD0zRCEwLGQ9 M0RbXSx2PTNEW10sbT0zRFtdLGc9M0QhMCx5PTNEbnVsbCxiPTNEZnVuY3Rpb24oZSl7cmV0dXJu IWUuPQpub3RBY3RpdmV9LHc9M0QhMSxFPTNELjEsUz0zRCExLHg9M0QhMCxUPTNEZnVuY3Rpb24o KXtyZXR1cm4gMjV9LE49M0RudWxsLEM9Cj0zRG51bGwsaz0zRG51bGwsTD0zRG51bGwsQT0zRG51 bGwsTz0zRG51bGwsTT0zRCExLF89M0RkMy5kaXNwYXRjaCgiZWxlbWVudD0KQ2xpY2siLCJlbGVt ZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IiksRD0zRCEwLFAsSCxCLGosRj0zRCExO3Jl dHVybiBJPQouY2xlYXJIaWdobGlnaHRzPTNEZnVuY3Rpb24oKXtkMy5zZWxlY3RBbGwoIi5udi1j aGFydC0iK3MrIiAubnYtcG9pbnQuaG92ZXI9CiIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LEkuaGln aGxpZ2h0UG9pbnQ9M0RmdW5jdGlvbihlLHQsbil7ZDMuc2VsZWN0KCIubnYtYz0KaGFydC0iK3Mr IiAubnYtc2VyaWVzLSIrZSsiIC5udi1wb2ludC0iK3QpLmNsYXNzZWQoImhvdmVyIixuKX0sXy5v bigiZWxlbWVuPQp0TW91c2VvdmVyLnBvaW50IixmdW5jdGlvbihlKXtnJiZJLmhpZ2hsaWdodFBv aW50KGUuc2VyaWVzSW5kZXgsZS5wb2ludEluZGU9CngsITApfSksXy5vbigiZWxlbWVudE1vdXNl b3V0LnBvaW50IixmdW5jdGlvbihlKXtnJiZJLmhpZ2hsaWdodFBvaW50KGUuc2VyaT0KZXNJbmRl eCxlLnBvaW50SW5kZXgsITEpfSksSS5kaXNwYXRjaD0zRF8sSS5vcHRpb25zPTNEZS51dGlscy5v cHRpb25zRnVuYy5iPQppbmQoSSksSS54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGY9M0RkMy5mdW5jdG9yKGUpLEkpOmZ9LEk9Ci55PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RkMy5mdW5jdG9yKGUpLEkpOmx9LEkuc2l6ZT0zRD0KZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RkMy5mdW5jdG9yKGUpLEkpOmN9 LEkubWFyZ2luPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9 M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A9Cjp0LnRvcCx0LnJpZ2h0PTNEdHlw ZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdD0K eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNE dHlwZW9mIGUubGVmdCE9M0QiPQp1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsSSk6dH0sSS53aWR0 aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KG49M0RlLEkpOm59LEku aGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLEkpOnJ9 LD0KSS54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUs SSk6b30sSS55U2NhbGU9M0RmdW5jPQp0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1 PTNEZSxJKTp1fSxJLnpTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLEkpOmF9LEkueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZz0KdGg/KE49M0RlLEkpOk59LEkueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhDPTNEZSxJKTpDPQp9LEkuc2l6ZURvbWFpbj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNEZSxJKTpBfSxJLnhSYW5nZT0KPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9M0RlLEkpOmt9LEkueVJhbmdlPTNEZnVuY3Rp b24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0zRGUsSSk6TH0sSS5zaXplUmFuZ2U9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhPPTNEZSxJKTpPfSxJLmZv cmNlWD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPQo9M0RlLEkpOmR9 LEkuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEkp OnZ9LEkuZm89CnJjZVNpemU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bT0zRGUsSSk6bX0sSS5pbnRlcmFjdGl2ZT0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGc9M0RlLEkpOmd9LEkucG9pbnRLZXk9M0RmdW5jdGlvbihlKXtyPQpldHVybiBh cmd1bWVudHMubGVuZ3RoPyh5PTNEZSxJKTp5fSxJLnBvaW50QWN0aXZlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8oYj0zRGUsSSk6Yn0sSS5wYWREYXRhPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kdz0zRGUsSSk6d30sSS5wYWREYXRhT3V0 ZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsSSk6PQpFfSxJ LmNsaXBFZGdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLEkp OlN9LEkuY2xpcFZvcm89Cm5vaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh4PTNEZSxJKTp4fSxJLnVzZVZvcm9ub2k9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhEPTNEZSxEPTNEPTNEPTNEITEmJih4PTNEITEpLEkpOkR9LEkuY2xpcFJhPQpk aXVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEkpOlR9LEku Y29sb3I9M0RmdW5jdGlvbig9CnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZS51dGls cy5nZXRDb2xvcih0KSxJKTppfSxJLnNoYXBlPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0zRGUsSSk6aH0sSS5vbmx5Q2lyY2xlcz0zRGZ1bmN0aW9uKGUpe3JldHVy PQpuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEkpOnB9LEkuaWQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD89CihzPTNEZSxJKTpzfSxJLnNpbmdsZVBvaW50PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09M0RlLEkpOj0KTX0sSX0sZS5tb2RlbHMu c2NhdHRlckNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBGKGUpe3JldHVybiBlLmVhY2goZnVu Y3RpPQpvbihlKXtmdW5jdGlvbiBKKCl7aWYoVClyZXR1cm4gVy5zZWxlY3QoIi5udi1wb2ludC1w YXRocyIpLnN0eWxlKCJwb2ludGVyLWU9CnZlbnRzIiwiYWxsIiksITE7Vy5zZWxlY3QoIi5udi1w b2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKT0KO3ZhciBpPTNEZDMu bW91c2UodGhpcyk7aC5kaXN0b3J0aW9uKHgpLmZvY3VzKGlbMF0pLHAuZGlzdG9ydGlvbih4KS5m b2N1cyhpPQpbMV0pLFcuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5jYWxsKHQpLGImJlcuc2Vs ZWN0KCIubnYteC5udi1heGlzIikuY2FsbCg9Cm4pLHcmJlcuc2VsZWN0KCIubnYteS5udi1heGlz IikuY2FsbChyKSxXLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblgiKS5kYXR1bT0KKGUuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobyksVy5zZWxlY3QoIi5udi1k aXN0cmlidXRpPQpvblkiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNh YmxlZH0pKS5jYWxsKHUpfXZhciBDPTNEZDMuc2U9CmxlY3QodGhpcyksaz0zRHRoaXMsTD0zRChm fHxwYXJzZUludChDLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1hLmxlZnQtYS5yaWdodD0KLEQ9M0Qo bHx8cGFyc2VJbnQoQy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEuYm90dG9tO0YudXBk YXRlPTNEZnVuY3RpPQpvbigpe0MuY2FsbChGKX0sRi5jb250YWluZXI9M0R0aGlzLEEuZGlzYWJs ZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWU9Ci5kaXNhYmxlZH0pO2lmKCFPKXt2YXIg STtPPTNEe307Zm9yKEkgaW4gQSlBW0ldaW5zdGFuY2VvZiBBcnJheT9PW0ldPTNEQVtJXT0KLnNs aWNlKDApOk9bSV09M0RBW0ldfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4gZS52YWx1PQplcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBxPTNEQy5zZWxlY3RBbGwo Ii5udi1ub0RhdGEiKS5kYXRhKFtfXSk7cmV0dXJuIHEuZW49CnRlcigpLmFwcGVuZCgidGV4dCIp LmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bD0K ZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxxLmF0dHIoIngiLGEubGVmdCtMLzIpLmF0dHIoInki LGEudG9wK0QvMikudGV4dChmPQp1bmN0aW9uKGUpe3JldHVybiBlfSksRn1DLnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLnJlbW92ZSgpLFA9M0RQfHxoLEg9M0RIfHw9CnA7dmFyIFI9M0RDLnNlbGVj dEFsbCgiZy5udi13cmFwLm52LXNjYXR0ZXJDaGFydCIpLmRhdGEoW2VdKSxVPTNEUi5lbnRlcigp Lj0KYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc2NhdHRlckNoYXJ0 IG52LWNoYXJ0LSIrdC5pZCgpKSx6PQo9M0RVLmFwcGVuZCgiZyIpLFc9M0RSLnNlbGVjdCgiZyIp O3ouYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LWI9CmFja2dyb3VuZCIpLHou YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSx6LmFwcGVuZCgiZyIpLmF0 dHIoIj0KY2xhc3MiLCJudi15IG52LWF4aXMiKSx6LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtc2NhdHRlcldyYXAiKSx6LmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXN0V3Jh cCIpLHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmE9CnAiKSx6LmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIik7aWYoeSl7dmFyIFg9M0RTP0wv MjpMO2kudz0KaWR0aChYKSxSLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxs KGkpLGEudG9wIT0zRGkuaGVpZ2h0KCkmJihhPQoudG9wPTNEaS5oZWlnaHQoKSxEPTNEKGx8fHBh cnNlSW50KEMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvbSk9CixSLnNlbGVj dCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoTC1YKSsi LCIrIC1hLnRvcD0KKyIpIil9UyYmKHMud2lkdGgoMTgwKS5jb2xvcihbIiM0NDQiXSksVy5zZWxl Y3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bShqPQopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLFIuYXR0cigidHJhbnNmb3JtIiw9CiJ0cmFu c2xhdGUoIithLmxlZnQrIiwiK2EudG9wKyIpIiksRSYmVy5zZWxlY3QoIi5udi15Lm52LWF4aXMi KS5hdHRyKCJ0cmFucz0KZm9ybSIsInRyYW5zbGF0ZSgiK0wrIiwwKSIpLHQud2lkdGgoTCkuaGVp Z2h0KEQpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7PQpyZXR1cm4gZS5jb2xvcnx8YyhlLHQp fSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksZCE9M0Q9Cj0z RDAmJnQueERvbWFpbihudWxsKSx2IT0zRD0zRDAmJnQueURvbWFpbihudWxsKSxSLnNlbGVjdCgi Lm52LXNjYXR0ZXJXcmFwIj0KKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKS5jYWxsKHQpO2lmKGQhPTNEPTNEMCl7dmFyPQogVj0zRGguZG9tYWluKClbMV0t aC5kb21haW4oKVswXTt0LnhEb21haW4oW2guZG9tYWluKClbMF0tZCpWLGguZG9tYWluKClbMV09 CitkKlZdKX1pZih2IT0zRD0zRDApe3ZhciAkPTNEcC5kb21haW4oKVsxXS1wLmRvbWFpbigpWzBd O3QueURvbWFpbihbcC5kb21haT0KbigpWzBdLXYqJCxwLmRvbWFpbigpWzFdK3YqJF0pfSh2IT0z RD0zRDB8fGQhPTNEPTNEMCkmJlIuc2VsZWN0KCIubnYtc2NhdHRlPQpyV3JhcCIpLmRhdHVtKGUu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCksYiYmKG4uc2Nh bGU9CihoKS50aWNrcyhuLnRpY2tzKCkmJm4udGlja3MoKS5sZW5ndGg/bi50aWNrcygpOkwvMTAw KS50aWNrU2l6ZSgtRCwwKSxXLnNlbD0KZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5jYWxsPQoobikpLHcmJihyLnNj YWxlKHApLnRpY2tzKHIudGlja3MoKSYmci50aWNrcygpLmxlbmd0aD9yLnRpY2tzKCk6RC8zNiku dGlja1M9Cml6ZSgtTCwwKSxXLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLG0mJihv LmdldERhdGEodC54KCkpLnNjYWxlKGgpLj0Kd2lkdGgoTCkuY29sb3IoZS5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uPQoodCxuKXtyZXR1 cm4hZVtuXS5kaXNhYmxlZH0pKSx6LnNlbGVjdCgiLm52LWRpc3RXcmFwIikuYXBwZW5kKCJnIiku YXR0cigiY2w9CmFzcyIsIm52LWRpc3RyaWJ1dGlvblgiKSxXLnNlbGVjdCgiLm52LWRpc3RyaWJ1 dGlvblgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cj0KYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIp IikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9PQopKS5jYWxs KG8pKSxnJiYodS5nZXREYXRhKHQueSgpKS5zY2FsZShwKS53aWR0aChEKS5jb2xvcihlLm1hcChm dW5jdGlvbihlLHQ9Cil7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0 LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLHoucz0KZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWSIpLFcuc2VsZWN0PQooIi5u di1kaXN0cmlidXRpb25ZIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEU/TDotdS5z aXplKCkpKyIsMCkiKS49CmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGVkfSkpLmNhbGwodSkpLGQzLmZpc2hleWUmJihXLnNlbD0KZWN0KCIubnYtYmFja2dyb3VuZCIp LmF0dHIoIndpZHRoIixMKS5hdHRyKCJoZWlnaHQiLEQpLFcuc2VsZWN0KCIubnYtYmFja2dyPQpv dW5kIikub24oIm1vdXNlbW92ZSIsSiksVy5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikub24oImNs aWNrIixmdW5jdGlvbigpe1Q9Cj0zRCFUfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNrLmZy ZWV6ZUZpc2hleWUiLGZ1bmN0aW9uKCl7VD0zRCFUfSkpLHMuZD0KaXNwYXRjaC5vbigibGVnZW5k Q2xpY2siLGZ1bmN0aW9uKGUsaSl7ZS5kaXNhYmxlZD0zRCFlLmRpc2FibGVkLHg9M0RlLmRpc2Fi PQpsZWQ/MDoyLjUsVy5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikuc3R5bGUoInBvaW50ZXItZXZl bnRzIixlLmRpc2FibGVkPyJub249CmUiOiJhbGwiKSxXLnNlbGVjdCgiLm52LXBvaW50LXBhdGhz Iikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixlLmRpc2FibGVkPyJhbD0KbCI6Im5vbmUiKSxlLmRp c2FibGVkPyhoLmRpc3RvcnRpb24oeCkuZm9jdXMoMCkscC5kaXN0b3J0aW9uKHgpLmZvY3VzKDAp LFcuPQpzZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNhbGwodCksVy5zZWxlY3QoIi5udi14Lm52 LWF4aXMiKS5jYWxsKG4pLFcuc2VsZWM9CnQoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKTpUPTNE ITEsRi51cGRhdGUoKX0pLGkuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIj0KLGZ1bmN0aW9uKGUp e0EuZGlzYWJsZWQ9M0RlLmRpc2FibGVkLE0uc3RhdGVDaGFuZ2UoQSksRi51cGRhdGUoKX0pLHQu ZGlzcGF0PQpjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtkMy5z ZWxlY3QoIi5udi1jaGFydC0iK3QuaWQoKSs9CiIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgr IiAubnYtZGlzdHgtIitlLnBvaW50SW5kZXgpLmF0dHIoInkxIixmdW5jdGlvbj0KKHQsbil7cmV0 dXJuIGUucG9zWzFdLUR9KSxkMy5zZWxlY3QoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJp ZXMtIitlLnNlPQpyaWVzSW5kZXgrIiAubnYtZGlzdHktIitlLnBvaW50SW5kZXgpLmF0dHIoIngy IixlLnBvc1swXStvLnNpemUoKSksZS5wb3M9M0Q9CltlLnBvc1swXSthLmxlZnQsZS5wb3NbMV0r YS50b3BdLE0udG9vbHRpcFNob3coZSl9KSxNLm9uKCJ0b29sdGlwU2hvdyIsZnVuYz0KdGlvbihl KXtOJiZCKGUsay5wYXJlbnROb2RlKX0pLE0ub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbih0KXt0 eXBlb2YgdC5kaXNhPQpibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUs bil7ZS5kaXNhYmxlZD0zRHQuZGlzYWJsZWRbbl19KSw9CkEuZGlzYWJsZWQ9M0R0LmRpc2FibGVk KSxGLnVwZGF0ZSgpfSksUD0zRGguY29weSgpLEg9M0RwLmNvcHkoKX0pLEZ9dmFyIHQ9Cj0zRGUu bW9kZWxzLnNjYXR0ZXIoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCks aT0zRGUubW9kZWxzLj0KbGVnZW5kKCkscz0zRGUubW9kZWxzLmxlZ2VuZCgpLG89M0RlLm1vZGVs cy5kaXN0cmlidXRpb24oKSx1PTNEZS5tb2RlbHMuZGlzPQp0cmlidXRpb24oKSxhPTNEe3RvcDoz MCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo3NX0sZj0zRG51bGwsbD0zRG51bGwsYz0zRGU9Ci51 dGlscy5kZWZhdWx0Q29sb3IoKSxoPTNEZDMuZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNj YWxlLmxpbmVhcikuZGlzdD0Kb3J0aW9uKDApOnQueFNjYWxlKCkscD0zRGQzLmZpc2hleWU/ZDMu ZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvPQpydGlvbigwKTp0LnlTY2FsZSgp LGQ9M0QwLHY9M0QwLG09M0QhMSxnPTNEITEseT0zRCEwLGI9M0QhMCx3PTNEITAsRT0zRCExLFM9 Cj0zRCEhZDMuZmlzaGV5ZSx4PTNEMCxUPTNEITEsTj0zRCEwLEM9M0RmdW5jdGlvbihlLHQsbil7 cmV0dXJuIjxzdHJvbmc+Iit0Kz0KIjwvc3Ryb25nPiJ9LGs9M0RmdW5jdGlvbihlLHQsbil7cmV0 dXJuIjxzdHJvbmc+IituKyI8L3N0cm9uZz4ifSxMPTNEbnVsbCxBPQo9M0R7fSxPPTNEbnVsbCxN PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIs ImM9CmhhbmdlU3RhdGUiKSxfPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsRD0zRDA7dC54U2NhbGUo aCkueVNjYWxlKHApLG4ub3JpZW50KD0KImJvdHRvbSIpLnRpY2tQYWRkaW5nKDEwKSxyLm9yaWVu dChFPyJyaWdodCI6ImxlZnQiKS50aWNrUGFkZGluZygxMCksby5heGlzPQooIngiKSx1LmF4aXMo InkiKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgUCxILEI9M0RmdW5jdGlvbihpLHMpe3ZhciBvPTNE aS5wb3M9ClswXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHww KSxmPTNEaS5wb3NbMF0rKHMub2Zmc2V0TD0KZWZ0fHwwKSxsPTNEcC5yYW5nZSgpWzBdK2EudG9w KyhzLm9mZnNldFRvcHx8MCksYz0zRGgucmFuZ2UoKVswXSthLmxlZnQrKHMuPQpvZmZzZXRMZWZ0 fHwwKSxkPTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSx2PTNEbi50aWNrRm9ybWF0KCkodC54 KCkoaS5wb2k9Cm50LGkucG9pbnRJbmRleCkpLG09M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBv aW50LGkucG9pbnRJbmRleCkpO0MhPTNEbnVsbD0KJiZlLnRvb2x0aXAuc2hvdyhbZixsXSxDKGku c2VyaWVzLmtleSx2LG0saSxGKSwibiIsMSxzLCJ4LW52dG9vbHRpcCIpLGshPTNEPQpudWxsJiZl LnRvb2x0aXAuc2hvdyhbYyxkXSxrKGkuc2VyaWVzLmtleSx2LG0saSxGKSwiZSIsMSxzLCJ5LW52 dG9vbHRpcCIpLEw9CiE9M0RudWxsJiZlLnRvb2x0aXAuc2hvdyhbbyx1XSxMKGkuc2VyaWVzLmtl eSx2LG0saSxGKSxpLnZhbHVlPDA/Im4iOiJzIixudT0KbGwscyl9LGo9M0Rbe2tleToiTWFnbmlm eSIsZGlzYWJsZWQ6ITB9XTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlPQpvdXQu dG9vbHRpcCIsZnVuY3Rpb24oZSl7TS50b29sdGlwSGlkZShlKSxkMy5zZWxlY3QoIi5udi1jaGFy dC0iK3QuaWQoKSsiIC49Cm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitl LnBvaW50SW5kZXgpLmF0dHIoInkxIiwwKSxkMy5zZWxlYz0KdCgiLm52LWNoYXJ0LSIrdC5pZCgp KyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHktIitlLnBvaW50SW5kPQpl eCkuYXR0cigieDIiLHUuc2l6ZSgpKX0pLE0ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe04m JmUudG9vbHRpcC5jbGVhbnU9CnAoKX0pLEYuZGlzcGF0Y2g9M0RNLEYuc2NhdHRlcj0zRHQsRi5s ZWdlbmQ9M0RpLEYuY29udHJvbHM9M0RzLEYueEF4aXM9M0RuLD0KRi55QXhpcz0zRHIsRi5kaXN0 WD0zRG8sRi5kaXN0WT0zRHUsZDMucmViaW5kKEYsdCwiaWQiLCJpbnRlcmFjdGl2ZSIsInBvaW50 PQpBY3RpdmUiLCJ4IiwieSIsInNoYXBlIiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInpTY2Fs ZSIsInhEb21haW4iLCJ5RG9tYWk9Cm4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwi c2l6ZVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIj0KLCJjbGlwVm9yb25vaSIs ImNsaXBSYWRpdXMiLCJ1c2VWb3Jvbm9pIiksRi5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVu Yy5iPQppbmQoRiksRi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYS50b3A9M0R0eXBlb2YgZS50b3A9CiE9M0QidW5kZWZpbmVkIj9lLnRvcDphLnRvcCxhLnJp Z2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodD0KOmEucmlnaHQsYS5i b3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206YS5ib3R0b20s YS5sZWZ0PQo9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDphLmxlZnQsRik6 YX0sRi53aWR0aD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0Rl LEYpOmZ9LEYuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8o bD0zRGUsRik6bH0sRi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhjPTNEZS51PQp0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoYyksby5jb2xvcihjKSx1LmNvbG9y KGMpLEYpOmN9LEYuc2hvd0Rpc3RYPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obT0zRGUsRik6bX0sRi5zaG93RGlzdFk9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1 bWVudHMubGVuZ3RoPyhnPTNEZSxGKTpnfSxGLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KFM9M0RlLEYpOlN9LEYuc2hvd0xlZ2VuZD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cnk9M0RlLEYpOnl9LEYuc2hvd1hBeGlz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLEYpOmJ9LD0KRi5z aG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsRik6 d30sRi5yaWdodEFsaWduPQpZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhFPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQ9CiIpLEYpOkV9LEYuZmlzaGV5ZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxGKTp4fSxGLnhQYT0K ZGRpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsRik6ZH0s Ri55UGFkZGluZz0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Rl LEYpOnZ9LEYudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3Ro PyhOPTNEZSxGKTpOfSxGLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZT0KbnRzLmxlbmd0aD8oTD0zRGUsRik6TH0sRi50b29sdGlwWENvbnRlbnQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhDPTNEZSxGKTpDfSxGLnRvb2x0aXBZQ29udGVu dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cms9M0RlLEYpOmt9LEYu c3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0zRGUsRik6QX0s Ri5kZT0KZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhP PTNEZSxGKTpPfSxGLm5vRGF0YT0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KF89M0RlLEYpOl99LEYudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Q9CmlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oRD0zRGUsRik6RH0sRn0sZS5tb2RlbHMuc2NhdHRlclBsdXNM aW5lQ2hhcj0KdD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKGUpe2Z1bmN0aW9uIFYoKXtpZihTKXJlPQp0dXJuIFUuc2VsZWN0KCIubnYtcG9pbnQtcGF0 aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSwhMTtVLnNlbGVjdCg9CiIubnYtcG9p bnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIGk9M0RkMy5tb3Vz ZSh0aGlzKTtoLj0KZGlzdG9ydGlvbihFKS5mb2N1cyhpWzBdKSxwLmRpc3RvcnRpb24oRSkuZm9j dXMoaVsxXSksVS5zZWxlY3QoIi5udi1zY2F0dGVyPQpXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxnJiZVLnNlbGVjdCg9CiIubnYt eC5udi1heGlzIikuY2FsbChuKSx5JiZVLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwociks VS5zZWxlY3QoIi5udj0KLWRpc3RyaWJ1dGlvblgiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pLFUuPQpzZWxlY3QoIi5udi1kaXN0cmlidXRp b25ZIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk9Ci5j YWxsKHUpfXZhciBUPTNEZDMuc2VsZWN0KHRoaXMpLE49M0R0aGlzLEM9M0QoZnx8cGFyc2VJbnQo VC5zdHlsZSgid2lkdGgiKT0KKXx8OTYwKS1hLmxlZnQtYS5yaWdodCxNPTNEKGx8fHBhcnNlSW50 KFQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvPQp0dG9tO0IudXBkYXRlPTNEZnVu Y3Rpb24oKXtULmNhbGwoQil9LEIuY29udGFpbmVyPTNEdGhpcyxrLmRpc2FibGVkPTNEZS5tYXA9 CihmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighTCl7dmFyIGo7TD0zRHt9O2Zv cihqIGluIGspa1tqXWluc3Rhbj0KY2VvZiBBcnJheT9MW2pdPTNEa1tqXS5zbGljZSgwKTpMW2pd PTNEa1tqXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuPQpjdGlvbihlKXtyZXR1cm4g ZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgRj0zRFQuc2VsZWN0QWxsKCIubnYtbm9EYXRh Iik9Ci5kYXRhKFtPXSk7cmV0dXJuIEYuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFz cyIsIm52ZDMgbnYtbm9EYXRhIikuYT0KdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5j aG9yIiwibWlkZGxlIiksRi5hdHRyKCJ4IixhLmxlZnQrQy8yKS5hdHRyPQooInkiLGEudG9wK00v MikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLEJ9VC5zZWxlY3RBbGwoIi5udi1ub0RhdGEi KS5yZW09Cm92ZSgpLGg9M0R0LnhTY2FsZSgpLHA9M0R0LnlTY2FsZSgpLF89M0RffHxoLEQ9M0RE fHxwO3ZhciBJPTNEVC5zZWxlY3RBbGwoIj0KZy5udi13cmFwLm52LXNjYXR0ZXJDaGFydCIpLmRh dGEoW2VdKSxxPTNESS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzPQoiLCJudmQzIG52 LXdyYXAgbnYtc2NhdHRlckNoYXJ0IG52LWNoYXJ0LSIrdC5pZCgpKSxSPTNEcS5hcHBlbmQoImci KSxVPTNESS49CnNlbGVjdCgiZyIpO1IuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudmQz IG52LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbj0KdGVyLWV2ZW50cyIsIm5vbmUiKSxSLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksUi5hcHBlbmQoImciPQopLmF0dHIo ImNsYXNzIiwibnYteSBudi1heGlzIiksUi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNj YXR0ZXJXcmFwIik9CixSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcmVncmVzc2lvbkxp bmVzV3JhcCIpLFIuYXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52LWRpc3RXcmFwIiksUi5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxSLmFwcGVuZCgiPQpnIiku YXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK2EubGVmdCs9CiIsIithLnRvcCsiKSIpLGImJlUuc2VsZWN0KCIubnYteS5udi1heGlz IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQz0KKyIsMCkiKSxtJiYoaS53aWR0aChD LzIpLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksYS50b3AhPQo9 M0RpLmhlaWdodCgpJiYoYS50b3A9M0RpLmhlaWdodCgpLE09M0QobHx8cGFyc2VJbnQoVC5zdHls ZSgiaGVpZ2h0IikpfHw0MDA9CiktYS50b3AtYS5ib3R0b20pLEkuc2VsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKz0KQy8yKyIsIisgLWEudG9wKyIp IikpLHcmJihzLndpZHRoKDE4MCkuY29sb3IoWyIjNDQ0Il0pLFUuc2VsZWN0KCIubnYtY29udHJv PQpsc1dyYXAiKS5kYXR1bShIKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtYS50 b3ArIikiKS5jYWxsKHMpKSx0Lnc9CmlkdGgoQykuaGVpZ2h0KE0pLmNvbG9yKGUubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcj0KKGZ1bmN0aW9uKHQsbil7 cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksSS5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVt KGUuPQpmaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxJLnNl bGVjdCgiLm52LXJlZ3Jlc3Npb25MaW49CmVzV3JhcCIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgj bnYtZWRnZS1jbGlwLSIrdC5pZCgpKyIpIik7dmFyIHo9M0RJLnNlbGVjdD0KKCIubnYtcmVncmVz c2lvbkxpbmVzV3JhcCIpLnNlbGVjdEFsbCgiLm52LXJlZ0xpbmVzIikuZGF0YShmdW5jdGlvbihl KXtyZXR1PQpybiBlfSk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcmVn TGluZXMiKTt2YXIgVz0zRHouc2VsZWN0QWw9CmwoIi5udi1yZWdMaW5lIikuZGF0YShmdW5jdGlv bihlKXtyZXR1cm5bZV19KSxYPTNEVy5lbnRlcigpLmFwcGVuZCgibGluZSIpLj0KYXR0cigiY2xh c3MiLCJudi1yZWdMaW5lIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwwKTtXLmF0dHIoIngxIixo LnJhbmdlKClbPQowXSkuYXR0cigieDIiLGgucmFuZ2UoKVsxXSkuYXR0cigieTEiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIHAoaC5kb21haW4oKVswXSo9CmUuc2xvcGUrZS5pbnRlcmNlcHQpfSkuYXR0 cigieTIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoaC5kb21haW4oKVsxXSplLnNsbz0KcGUrZS5p bnRlcmNlcHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjKGUsbil9 KS5zdHlsZSgic3RyPQpva2Utb3BhY2l0eSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kaXNhYmxl ZHx8dHlwZW9mIGUuc2xvcGU9M0Q9M0QidW5kZWZpbmU9CmQifHx0eXBlb2YgZS5pbnRlcmNlcHQ9 M0Q9M0QidW5kZWZpbmVkIj8wOjF9KSxnJiYobi5zY2FsZShoKS50aWNrcyhuLnRpY2tzKD0KKT9u LnRpY2tzKCk6Qy8xMDApLnRpY2tTaXplKC1NLDApLFUuc2VsZWN0KCIubnYteC5udi1heGlzIiku YXR0cigidHJhbnNmb3JtPQoiLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmNhbGwo bikpLHkmJihyLnNjYWxlKHApLnRpY2tzKHIudGlja3MoKT89CnIudGlja3MoKTpNLzM2KS50aWNr U2l6ZSgtQywwKSxVLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLGQmJihvLmdldD0K RGF0YSh0LngoKSkuc2NhbGUoaCkud2lkdGgoQykuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5jb2xvcnx8YyhlPQosdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZH0pKSxSLnNlbGVjdCgiLm52LWRpc3RXcmFwIik9Ci5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblgiKSxVLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblgi KT0KLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuZGF0 dW0oZS5maWx0ZXIoZnVuY3Rpb24oPQplKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pKSx2 JiYodS5nZXREYXRhKHQueSgpKS5zY2FsZShwKS53aWR0aChNKS5jb2w9Cm9yKGUubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3Jl dHVybj0KIWVbbl0uZGlzYWJsZWR9KSksUi5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzPQp0cmlidXRpb25ZIiksVS5zZWxlY3QoIi5udi1kaXN0 cmlidXRpb25ZIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGI9Cj9DOi11LnNpemUo KSkrIiwwKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkp LmNhbGwodT0KKSksZDMuZmlzaGV5ZSYmKFUuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLmF0dHIo IndpZHRoIixDKS5hdHRyKCJoZWlnaHQiLE0pPQosVS5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIiku b24oIm1vdXNlbW92ZSIsViksVS5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikub249CigiY2xpY2si LGZ1bmN0aW9uKCl7Uz0zRCFTfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNrLmZyZWV6ZUZp c2hleWUiLGZ1bj0KY3Rpb24oKXtTPTNEIVN9KSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2si LGZ1bmN0aW9uKGUsaSl7ZS5kaXNhYmxlZD0zRCFlPQouZGlzYWJsZWQsRT0zRGUuZGlzYWJsZWQ/ MDoyLjUsVS5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikuc3R5bGUoInBvaW50ZXItZXY9CmVudHMi LGUuZGlzYWJsZWQ/Im5vbmUiOiJhbGwiKSxVLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5 bGUoInBvaW50ZXItZT0KdmVudHMiLGUuZGlzYWJsZWQ/ImFsbCI6Im5vbmUiKSxlLmRpc2FibGVk PyhoLmRpc3RvcnRpb24oRSkuZm9jdXMoMCkscC5kaXN0PQpvcnRpb24oRSkuZm9jdXMoMCksVS5z ZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNhbGwodCksVS5zZWxlY3QoIi5udi14Lm52LWE9Cnhp cyIpLmNhbGwobiksVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKTpTPTNEITEsQi51 cGRhdGUoKX0pLGkuZGlzcD0KYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2s9M0Rl LEEuc3RhdGVDaGFuZ2UoayksQi51cGRhdGUoKX0pLHQuZGlzPQpwYXRjaC5vbigiZWxlbWVudE1v dXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtkMy5zZWxlY3QoIi5udi1jaGFydC0iK3QuaWQ9 CigpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitlLnBvaW50SW5k ZXgpLmF0dHIoInkxIixlLnBvcz0KWzFdLU0pLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgp KyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzPQp0eS0iK2UucG9pbnRJbmRl eCkuYXR0cigieDIiLGUucG9zWzBdK28uc2l6ZSgpKSxlLnBvcz0zRFtlLnBvc1swXSthLmxlZnQs ZS49CnBvc1sxXSthLnRvcF0sQS50b29sdGlwU2hvdyhlKX0pLEEub24oInRvb2x0aXBTaG93Iixm dW5jdGlvbihlKXt4JiZQKGUsTi5wYT0KcmVudE5vZGUpfSksQS5vbigiY2hhbmdlU3RhdGUiLGZ1 bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiPQomJihlLmZvckVhY2go ZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLGsuZGlzYWJsZWQ9M0R0 LmRpc2E9CmJsZWQpLEIudXBkYXRlKCl9KSxfPTNEaC5jb3B5KCksRD0zRHAuY29weSgpfSksQn12 YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKT0KLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9k ZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRGUubW9kZWxzPQoubGVnZW5kKCks bz0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLHU9M0RlLm1vZGVscy5kaXN0cmlidXRpb24oKSxh PTNEe3RvcDo9CjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0Ojc1fSxmPTNEbnVsbCxsPTNEbnVs bCxjPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKT0KLGg9M0RkMy5maXNoZXllP2QzLmZpc2hleWUu c2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueFNjYWxlKCksPQpwPTNEZDMu ZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlzdG9ydGlvbigwKTp0 LnlTY2FsZSgpLGQ9Cj0zRCExLHY9M0QhMSxtPTNEITAsZz0zRCEwLHk9M0QhMCxiPTNEITEsdz0z RCEhZDMuZmlzaGV5ZSxFPTNEMCxTPTNEITEseD0zRD0KITAsVD0zRGZ1bmN0aW9uKGUsdCxuKXty ZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LE49M0RmdW5jdGlvbihlLHQsbil7PQpyZXR1 cm4iPHN0cm9uZz4iK24rIjwvc3Ryb25nPiJ9LEM9M0RmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4i PGgzPiIrZSsiPC9oMz49CiIrIjxwPiIrcisiPC9wPiJ9LGs9M0R7fSxMPTNEbnVsbCxBPTNEZDMu ZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZD0KZSIsInN0YXRlQ2hhbmdlIiwiY2hh bmdlU3RhdGUiKSxPPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsTT0zRDA7dC54U2NhbGUoaCkuPQp5 U2NhbGUocCksbi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDEwKSxyLm9yaWVudChiPyJy aWdodCI6ImxlZnQiKS50aWM9CmtQYWRkaW5nKDEwKSxvLmF4aXMoIngiKSx1LmF4aXMoInkiKSxz LnVwZGF0ZVN0YXRlKCExKTt2YXIgXyxELFA9M0RmdW5jdGlvbj0KKGkscyl7dmFyIG89M0RpLnBv c1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxmPTNE PQppLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSxsPTNEcC5yYW5nZSgpWzBdK2EudG9wKyhzLm9m ZnNldFRvcHx8MCksYz0zRGgucmE9Cm5nZSgpWzBdK2EubGVmdCsocy5vZmZzZXRMZWZ0fHwwKSxk PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSx2PTNEbi50aWNrRj0Kb3JtYXQoKSh0LngoKShp LnBvaW50LGkucG9pbnRJbmRleCkpLG09M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGku cG9pPQpudEluZGV4KSk7VCE9M0RudWxsJiZlLnRvb2x0aXAuc2hvdyhbZixsXSxUKGkuc2VyaWVz LmtleSx2LG0saSxCKSwibiIsMSxzLCI9CngtbnZ0b29sdGlwIiksTiE9M0RudWxsJiZlLnRvb2x0 aXAuc2hvdyhbYyxkXSxOKGkuc2VyaWVzLmtleSx2LG0saSxCKSwiZSIsMT0KLHMsInktbnZ0b29s dGlwIiksQyE9M0RudWxsJiZlLnRvb2x0aXAuc2hvdyhbbyx1XSxDKGkuc2VyaWVzLmtleSx2LG0s aS5wb2luPQp0LnRvb2x0aXAsaSxCKSxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfSxIPTNEW3tr ZXk6Ik1hZ25pZnkiLGRpc2FibGVkOiEwfV09CjtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe0EudG9vbHRpcEhpZGUoZT0KKSxkMy5zZWxl Y3QoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52 LWRpc3R4LSIrPQplLnBvaW50SW5kZXgpLmF0dHIoInkxIiwwKSxkMy5zZWxlY3QoIi5udi1jaGFy dC0iK3QuaWQoKSsiIC5udi1zZXJpZXMtIitlLnM9CmVyaWVzSW5kZXgrIiAubnYtZGlzdHktIitl LnBvaW50SW5kZXgpLmF0dHIoIngyIix1LnNpemUoKSl9KSxBLm9uKCJ0b29sdGlwSD0KaWRlIixm dW5jdGlvbigpe3gmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxCLmRpc3BhdGNoPTNEQSxCLnNjYXR0 ZXI9M0R0LEIubGVnPQplbmQ9M0RpLEIuY29udHJvbHM9M0RzLEIueEF4aXM9M0RuLEIueUF4aXM9 M0RyLEIuZGlzdFg9M0RvLEIuZGlzdFk9M0R1LGQzLnI9CmViaW5kKEIsdCwiaWQiLCJpbnRlcmFj dGl2ZSIsInBvaW50QWN0aXZlIiwieCIsInkiLCJzaGFwZSIsInNpemUiLCJ4U2NhbGUiLD0KInlT Y2FsZSIsInpTY2FsZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwic2l6 ZURvbWFpbiIsInNpemVSPQphbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xp cFZvcm9ub2kiLCJjbGlwUmFkaXVzIiwidXNlVm9yb25vaSI9CiksQi5vcHRpb25zPTNEZS51dGls cy5vcHRpb25zRnVuYy5iaW5kKEIpLEIubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0K dW1lbnRzLmxlbmd0aD8oYS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6 YS50b3AsYS5yaWdodD0zRHR5PQpwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDph LnJpZ2h0LGEuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCI9CnVuZGVmaW5lZCI/ZS5ib3R0 b206YS5ib3R0b20sYS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6 YT0KLmxlZnQsQik6YX0sQi53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhmPTNEZSxCKTpmfSxCLmhlPQppZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGw9M0RlLEIpOmx9LEIuY29sb3I9M0RmdW5jdGlvbig9CnQpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhjPTNEZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGMpLG8uY29sb3Io YyksdT0KLmNvbG9yKGMpLEIpOmN9LEIuc2hvd0Rpc3RYPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGQ9M0RlLEIpPQo6ZH0sQi5zaG93RGlzdFk9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsQik6dn0sQi5zaG93Q289Cm50cm9scz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxCKTp3fSxCLnNob3dMZWdl bmQ9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxCKTptfSxC LnNob3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JlPQp0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0Rl LEIpOmd9LEIuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0 aD8oeT0zRGUsQik6eX0sQi5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbj0KZ3RoPyhiPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxCKTpifSxC LmZpc2hleWU9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxC KTpFfSxCLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8o eD0zRGUsQik6eH0sQi50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhDPQo9M0RlLEIpOkN9LEIudG9vbHRpcFhDb250ZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLEI9Cik6VH0sQi50b29sdGlwWUNvbnRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj0zRGUsQik6Tn0sQj0KLnN0 YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9M0RlLEIpOmt9LEIu ZGVmYXVsdFN0YXRlPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0z RGUsQik6TH0sQi5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3Ro PyhPPTNEZSxCKTpPfSxCLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybj0K IGFyZ3VtZW50cy5sZW5ndGg/KE09M0RlLEIpOk19LEJ9LGUubW9kZWxzLnNwYXJrbGluZT0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gPQpkKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9 M0RuLXQubGVmdC10LnJpZ2h0LGQ9M0RyLXQudG9wLXQuYm90dG89Cm0sdj0zRGQzLnNlbGVjdCh0 aGlzKTtzLmRvbWFpbihsfHxkMy5leHRlbnQoZSx1KSkucmFuZ2UoaHx8WzAsaV0pLG8uZG9tYWlu KD0KY3x8ZDMuZXh0ZW50KGUsYSkpLnJhbmdlKHB8fFtkLDBdKTt2YXIgbT0zRHYuc2VsZWN0QWxs KCJnLm52LXdyYXAubnYtc3BhcmtsPQppbmUiKS5kYXRhKFtlXSksZz0zRG0uZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zcGE9CnJrbGluZSIpLGI9M0Rn LmFwcGVuZCgiZyIpLHc9M0RtLnNlbGVjdCgiZyIpO20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKD0KIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEU9M0RtLnNlbGVjdEFsbCgicGF0aCIp LmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuPQpbZV19KTtFLmVudGVyKCkuYXBwZW5kKCJwYXRoIiks RS5leGl0KCkucmVtb3ZlKCksRS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbig9CmUsdCl7cmV0dXJu IGUuY29sb3J8fGYoZSx0KX0pLmF0dHIoImQiLGQzLnN2Zy5saW5lKCkueChmdW5jdGlvbihlLHQp e3JldHVybj0KIHModShlLHQpKX0pLnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhhKGUsdCkpfSkp O3ZhciBTPTNEbS5zZWxlY3RBbGwoImNpcmNsPQplLm52LXBvaW50IikuZGF0YShmdW5jdGlvbihl KXtmdW5jdGlvbiBuKHQpe2lmKHQhPTNELTEpe3ZhciBuPTNEZVt0XTtyZXR1cm49CiBuLnBvaW50 SW5kZXg9M0R0LG59cmV0dXJuIG51bGx9dmFyIHQ9M0RlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBhKGUsdCl9KT0KLHI9M0RuKHQubGFzdEluZGV4T2Yoby5kb21haW4oKVsxXSkpLGk9M0RuKHQu aW5kZXhPZihvLmRvbWFpbigpWzBdKSkscz0zRG4oPQp0Lmxlbmd0aC0xKTtyZXR1cm5baSxyLHNd LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9M0RudWxsfSl9KTtTLmVudGVyKCk9Ci5hcHBl bmQoImNpcmNsZSIpLFMuZXhpdCgpLnJlbW92ZSgpLFMuYXR0cigiY3giLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHModShlLD0KZS5wb2ludEluZGV4KSl9KS5hdHRyKCJjeSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gbyhhKGUsZS5wb2ludEluZGV4KSl9KS5hdHRyPQooInIiLDIpLmF0dHIoImNsYXNzIixm dW5jdGlvbihlLHQpe3JldHVybiB1KGUsZS5wb2ludEluZGV4KT0zRD0zRHMuZG9tYWluKCk9Clsx XT8ibnYtcG9pbnQgbnYtY3VycmVudFZhbHVlIjphKGUsZS5wb2ludEluZGV4KT0zRD0zRG8uZG9t YWluKClbMF0/Im52LXBvaT0KbnQgbnYtbWluVmFsdWUiOiJudi1wb2ludCBudi1tYXhWYWx1ZSJ9 KX0pLGR9dmFyIHQ9M0R7dG9wOjIscmlnaHQ6MCxib3R0b206PQoyLGxlZnQ6MH0sbj0zRDQwMCxy PTNEMzIsaT0zRCEwLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMuc2NhbGUubGluZWFyKCk9 Cix1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9 LGY9M0RlLnV0aWxzLmdldENvbD0Kb3IoWyIjMDAwIl0pLGwsYyxoLHA7cmV0dXJuIGQub3B0aW9u cz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChkKSxkLm1hcmdpPQpuPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmlu ZWQ9CiI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQi P2UucmlnaHQ6dC5yaWdodCx0LmJvdD0KdG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlPQpmdCE9M0QidW5kZWZp bmVkIj9lLmxlZnQ6dC5sZWZ0LGQpOnR9LGQud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnQ9CnMubGVuZ3RoPyhuPTNEZSxkKTpufSxkLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZT0KLGQpOnJ9LGQueD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZDMuZnVuY3RvcihlKSxkKTp1fSxkPQoueT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZDMuZnVuY3RvcihlKSxkKTphfSxk LnhTY2FsZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLGQp OnN9LGQueVNjYWxlPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0z RGUsZCk6b30sZC54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0 aD8obD0zRGUsZCk6bH0sZC55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGM9Cj0zRGUsZCk6Y30sZC54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0zRGUsZCk6aH0sZC55Uj0KYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhwPTNEZSxkKTpwfSxkLmFuaW1hdGU9M0RmdW5jdGlvPQpuKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxkKTppfSxkLmNvbG9yPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCksZCk6Zn0s ZH0sZS5tb2RlbHMuc3BhcmtsaW5lUGx1cz0zRGZ1bj0KY3Rpb24oKXtmdW5jdGlvbiB2KGUpe3Jl dHVybiBlLmVhY2goZnVuY3Rpb24oYyl7ZnVuY3Rpb24gTygpe2lmKGEpcmV0dXJuO3ZhPQpyIGU9 M0RDLnNlbGVjdEFsbCgiLm52LWhvdmVyVmFsdWUiKS5kYXRhKHUpLHI9M0RlLmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cig9CiJjbGFzcyIsIm52LWhvdmVyVmFsdWUiKS5zdHlsZSgic3Ryb2tlLW9w YWNpdHkiLDApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApOz0KZS5leGl0KCkuc3R5bGUoInN0cm9r ZS1vcGFjaXR5IiwwKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKS5yZW1vdmUoKSxlLmF0dHIoPQoi dHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrcyh0LngoKShjW2VdLGUp KSsiLDApIn0pLnN0eWxlKCI9CnN0cm9rZS1vcGFjaXR5IiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5 IiwxKTtpZighdS5sZW5ndGgpcmV0dXJuO3IuYXBwZW5kKCJsaT0KbmUiKS5hdHRyKCJ4MSIsMCku YXR0cigieTEiLC1uLnRvcCkuYXR0cigieDIiLDApLmF0dHIoInkyIixiKSxyLmFwcGVuZCgidGV4 PQp0IikuYXR0cigiY2xhc3MiLCJudi14VmFsdWUiKS5hdHRyKCJ4IiwtNikuYXR0cigieSIsLW4u dG9wKS5hdHRyKCJ0ZXh0LWFuY2g9Cm9yIiwiZW5kIikuYXR0cigiZHkiLCIuOWVtIiksQy5zZWxl Y3QoIi5udi1ob3ZlclZhbHVlIC5udi14VmFsdWUiKS50ZXh0KGYodD0KLngoKShjW3VbMF1dLHVb MF0pKSksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LXlWYWx1ZSIpLmF0dHIoIngi LDYpPQouYXR0cigieSIsLW4udG9wKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuYXR0cigi ZHkiLCIuOWVtIiksQy5zZWxlY3QoIi49Cm52LWhvdmVyVmFsdWUgLm52LXlWYWx1ZSIpLnRleHQo bCh0LnkoKShjW3VbMF1dLHVbMF0pKSl9ZnVuY3Rpb24gTSgpe2Z1bmN0aT0Kb24gcihlLG4pe3Zh ciByPTNETWF0aC5hYnModC54KCkoZVswXSwwKS1uKSxpPTNEMDtmb3IodmFyIHM9M0QwO3M8ZS5s ZW5ndGg7PQpzKyspTWF0aC5hYnModC54KCkoZVtzXSxzKS1uKTxyJiYocj0zRE1hdGguYWJzKHQu eCgpKGVbc10scyktbiksaT0zRHMpO3JldHU9CnJuIGl9aWYoYSlyZXR1cm47dmFyIGU9M0RkMy5t b3VzZSh0aGlzKVswXS1uLmxlZnQ7dT0zRFtyKGMsTWF0aC5yb3VuZChzLmludj0KZXJ0KGUpKSld LE8oKX12YXIgbT0zRGQzLnNlbGVjdCh0aGlzKSxnPTNEKHJ8fHBhcnNlSW50KG0uc3R5bGUoIndp ZHRoIikpfHw5PQo2MCktbi5sZWZ0LW4ucmlnaHQsYj0zRChpfHxwYXJzZUludChtLnN0eWxlKCJo ZWlnaHQiKSl8fDQwMCktbi50b3Atbi5ib3R0b209Cjt2LnVwZGF0ZT0zRGZ1bmN0aW9uKCl7dihl KX0sdi5jb250YWluZXI9M0R0aGlzO2lmKCFjfHwhYy5sZW5ndGgpe3ZhciB3PTNEbT0KLnNlbGVj dEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW2RdKTtyZXR1cm4gdy5lbnRlcigpLmFwcGVuZCgidGV4 dCIpLmF0dHIoImNsPQphc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5z dHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmE9CnR0cigieCIsbi5sZWZ0K2cvMikuYXR0 cigieSIsbi50b3ArYi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdn1tLnNlbD0KZWN0 QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIEU9M0R0LnkoKShjW2MubGVuZ3RoLTFdLGMu bGVuZ3RoLTEpO3M9M0R0PQoueFNjYWxlKCksbz0zRHQueVNjYWxlKCk7dmFyIFM9M0RtLnNlbGVj dEFsbCgiZy5udi13cmFwLm52LXNwYXJrbGluZXBsdXMiKS49CmRhdGEoW2NdKSxUPTNEUy5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNwYXJrbGluZT0K cGx1cyIpLE49M0RULmFwcGVuZCgiZyIpLEM9M0RTLnNlbGVjdCgiZyIpO04uYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1zPQpwYXJrbGluZVdyYXAiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtdmFsdWVXcmFwIiksTi5hcHBlbmQoImciKS5hdHQ9CnIoImNsYXNzIiwibnYtaG92 ZXJBcmVhIiksUy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLmxlZnQrIiwiK24udG9w Kz0KIikiKTt2YXIgaz0zREMuc2VsZWN0KCIubnYtc3BhcmtsaW5lV3JhcCIpO3Qud2lkdGgoZyku aGVpZ2h0KGIpLGsuY2FsbCh0KTt2PQphciBMPTNEQy5zZWxlY3QoIi5udi12YWx1ZVdyYXAiKSxB PTNETC5zZWxlY3RBbGwoIi5udi1jdXJyZW50VmFsdWUiKS5kYXRhKFs9CkVdKTtBLmVudGVyKCku YXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1jdXJyZW50VmFsdWUiKS5hdHRyKCJkeCIs cD8tOD0KOjgpLmF0dHIoImR5IiwiLjllbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIscD8iZW5kIjoi c3RhcnQiKSxBLmF0dHIoIngiLGcrKHA/PQpuLnJpZ2h0OjApKS5hdHRyKCJ5IixoP2Z1bmN0aW9u KGUpe3JldHVybiBvKGUpfTowKS5zdHlsZSgiZmlsbCIsdC5jb2xvcigpKGM9CltjLmxlbmd0aC0x XSxjLmxlbmd0aC0xKSkudGV4dChsKEUpKSxOLnNlbGVjdCgiLm52LWhvdmVyQXJlYSIpLmFwcGVu ZCgicmVjdD0KIikub24oIm1vdXNlbW92ZSIsTSkub24oImNsaWNrIixmdW5jdGlvbigpe2E9M0Qh YX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oPQope3U9M0RbXSxPKCl9KSxDLnNlbGVjdCgiLm52 LWhvdmVyQXJlYSByZWN0IikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXs9CnJldHVybiJ0 cmFuc2xhdGUoIisgLW4ubGVmdCsiLCIrIC1uLnRvcCsiKSJ9KS5hdHRyKCJ3aWR0aCIsZytuLmxl ZnQrbi5yaWdodD0KKS5hdHRyKCJoZWlnaHQiLGIrbi50b3ApfSksdn12YXIgdD0zRGUubW9kZWxz LnNwYXJrbGluZSgpLG49M0R7dG9wOjE1LHJpZ2h0PQo6MTAwLGJvdHRvbToxMCxsZWZ0OjUwfSxy PTNEbnVsbCxpPTNEbnVsbCxzLG8sdT0zRFtdLGE9M0QhMSxmPTNEZDMuZm9ybWF0KCI9CixyIiks bD0zRGQzLmZvcm1hdCgiLC4yZiIpLGM9M0QhMCxoPTNEITAscD0zRCExLGQ9M0QiTm8gRGF0YSBB dmFpbGFibGUuIjtyZT0KdHVybiB2LnNwYXJrbGluZT0zRHQsZDMucmViaW5kKHYsdCwieCIsInki LCJ4U2NhbGUiLCJ5U2NhbGUiLCJjb2xvciIpLHYub3B0PQppb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kKHYpLHYubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxl bmd0aD8obi50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5y aWdodD0zRHR5cGVvZiBlLj0KcmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4u Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluPQplZCI/ZS5ib3R0b206bi5ib3R0 b20sbi5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bi5sZWZ0LHY9 Cik6bn0sdi53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNE ZSx2KTpyfSx2LmhlaWdodD0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLHYpOml9LHYueFRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhmPTNEZSx2KTpmfSx2LnlUaWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGE9CnJndW1lbnRzLmxlbmd0aD8obD0zRGUsdik6bH0sdi5zaG93VmFsdWU9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhjPTNEZSx2KTpjfSx2LmFsaWduVmFsdWU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsPQp2KTpofSx2LnJpZ2h0 QWxpZ25WYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSx2 KTpwfSw9CnYubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9 M0RlLHYpOmR9LHZ9LGUubW9kZWxzLnN0YT0KY2tlZEFyZWE9M0RmdW5jdGlvbigpe2Z1bmN0aW9u IGcoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgYT0zRG4tdC5sPQplZnQtdC5yaWdo dCxiPTNEci10LnRvcC10LmJvdHRvbSx3PTNEZDMuc2VsZWN0KHRoaXMpO3A9M0R2LnhTY2FsZSgp LGQ9M0R2Lnk9ClNjYWxlKCk7dmFyIEU9M0RlO2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uuc2Vy aWVzSW5kZXg9M0R0LGUudmFsdWVzPTNEZS52YT0KbHVlcy5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1 cm4gZS5pbmRleD0zRG4sZS5zZXJpZXNJbmRleD0zRHQsZX0pfSk7dmFyIFM9M0RlPQouZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSk7ZT0zRGQzLmxheW91dC5zdGFjaygpLm9y ZGVyKGwpLm9mZnM9CmV0KGYpLnZhbHVlcyhmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS54 KG8pLnkodSkub3V0KGZ1bmN0aW9uKGUsdCxuKXt2YT0KciByPTNEdShlKT0zRD0zRD0zRDA/MDpu O2UuZGlzcGxheT0zRHt5OnIseTA6dH19KShTKTt2YXIgVD0zRHcuc2VsZWN0QWxsKCJnPQoubnYt d3JhcC5udi1zdGFja2VkYXJlYSIpLmRhdGEoW2VdKSxOPTNEVC5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiw9CiJudmQzIG52LXdyYXAgbnYtc3RhY2tlZGFyZWEiKSxDPTNETi5hcHBl bmQoImRlZnMiKSxrPTNETi5hcHBlbmQoImciKSxMPTNEVD0KLnNlbGVjdCgiZyIpO2suYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1hcmVhV3JhcCIpLGsuYXBwZW5kKCJnIikuYXR0cigiPQpj bGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksVC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0 LmxlZnQrIiwiK3QudG9wKyI9CikiKSx2LndpZHRoKGEpLmhlaWdodChiKS54KG8pLnkoZnVuY3Rp b24oZSl7cmV0dXJuIGUuZGlzcGxheS55K2UuZGlzcGxheS55MD0KfSkuZm9yY2VZKFswXSkuY29s b3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgp PQp9KSk7dmFyIEE9M0RMLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZSk7QS5jYWxs KHYpLEMuYXBwZW5kKCJjbGlwUGE9CnRoIikuYXR0cigiaWQiLCJudi1lZGdlLWNsaXAtIitzKS5h cHBlbmQoInJlY3QiKSxULnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iKz0KcysiIHJlY3QiKS5hdHRy KCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixiKSxMLmF0dHIoImNsaXAtcGF0aCIsaD8idXJsKCNu di1lPQpkZ2UtY2xpcC0iK3MrIikiOiIiKTt2YXIgTz0zRGQzLnN2Zy5hcmVhKCkueChmdW5jdGlv bihlLHQpe3JldHVybiBwKG8oZSx0KSk9Cn0pLnkwKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlz cGxheS55MCl9KS55MShmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3BsYT0KeS55K2UuZGlzcGxh eS55MCl9KS5pbnRlcnBvbGF0ZShjKSxNPTNEZDMuc3ZnLmFyZWEoKS54KGZ1bmN0aW9uKGUsdCl7 cmV0dXJuPQogcChvKGUsdCkpfSkueTAoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5Lnkw KX0pLnkxKGZ1bmN0aW9uKGUpe3JldHVybiA9CmQoZS5kaXNwbGF5LnkwKX0pLF89M0RMLnNlbGVj dCgiLm52LWFyZWFXcmFwIikuc2VsZWN0QWxsKCJwYXRoLm52LWFyZWEiKS5kYT0KdGEoZnVuY3Rp b24oZSl7cmV0dXJuIGV9KTtfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLGZ1 bmN0aW9uKGUsPQp0KXtyZXR1cm4ibnYtYXJlYSBudi1hcmVhLSIrdH0pLmF0dHIoImQiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIE0oZS52YWx1ZXMsZS49CnNlcmllc0luZGV4KX0pLm9uKCJtb3VzZW92 ZXIiLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIj0KLCEwKSxt LmFyZWFNb3VzZW92ZXIoe3BvaW50OmUsc2VyaWVzOmUua2V5LHBvczpbZDMuZXZlbnQucGFnZVgs ZDMuZXZlbnQucGFnPQplWV0sc2VyaWVzSW5kZXg6ZS5zZXJpZXNJbmRleH0pfSkub24oIm1vdXNl b3V0IixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGk9CnMpLmNsYXNzZWQoImhvdmVyIiwhMSks bS5hcmVhTW91c2VvdXQoe3BvaW50OmUsc2VyaWVzOmUua2V5LHBvczpbZDMuZXZlbnQucD0KYWdl WCxkMy5ldmVudC5wYWdlWV0sc2VyaWVzSW5kZXg6ZS5zZXJpZXNJbmRleH0pfSkub24oImNsaWNr IixmdW5jdGlvbihlLHQpPQp7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksbS5h cmVhQ2xpY2soe3BvaW50OmUsc2VyaWVzOmUua2V5LHBvczo9CltkMy5ldmVudC5wYWdlWCxkMy5l dmVudC5wYWdlWV0sc2VyaWVzSW5kZXg6ZS5zZXJpZXNJbmRleH0pfSksXy5leGl0KCkucmVtbz0K dmUoKSxfLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxpKGUsZS5z ZXJpZXNJbmRleCl9KS5zdHlsPQplKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29s b3J8fGkoZSxlLnNlcmllc0luZGV4KX0pLF8uYXR0cigiZCIsZnU9Cm5jdGlvbihlLHQpe3JldHVy biBPKGUudmFsdWVzLHQpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci5hcmVhIixm dT0KbmN0aW9uKGUpe0wuc2VsZWN0KCIubnYtY2hhcnQtIitzKyIgLm52LWFyZWEtIitlLnNlcmll c0luZGV4KS5jbGFzc2VkKCJob3ZlPQpyIiwhMCl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdXQuYXJlYSIsZnVuY3Rpb24oZSl7TC5zZWxlY3QoIi5udi1jaGE9CnJ0LSIrcysiIC5udi1h cmVhLSIrZS5zZXJpZXNJbmRleCkuY2xhc3NlZCgiaG92ZXIiLCExKX0pLGcuZDNfc3RhY2tlZE9m ZnNldD0KX3N0YWNrUGVyY2VudD0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEZS5sZW5ndGgsbj0zRGVb MF0ubGVuZ3RoLHI9M0QxL3QsaSxzLG8sPQphPTNEW107Zm9yKHM9M0QwO3M8bjsrK3Mpe2Zvcihp PTNEMCxvPTNEMDtpPEUubGVuZ3RoO2krKylvKz0zRHUoRVtpXS52YWx1ZXM9CltzXSk7aWYobylm b3IoaT0zRDA7aTx0O2krKyllW2ldW3NdWzFdLz0zRG87ZWxzZSBmb3IoaT0zRDA7aTx0O2krKyll W2ldW3NdWz0KMV09M0RyfWZvcihzPTNEMDtzPG47KytzKWFbc109M0QwO3JldHVybiBhfX0pLGd9 dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0PQpvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAw LGk9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9M0RNYXRoLmZsb29yKE1hdGg9Ci5yYW5kb20o KSoxZTUpLG89M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGUueX0sYT0zRD0KInN0YWNrIixmPTNEInplcm8iLGw9M0QiZGVmYXVsdCIsYz0zRCJsaW5lYXIi LGg9M0QhMSxwLGQsdj0zRGUubW9kZWxzLnNjYXR0PQplcigpLG09M0RkMy5kaXNwYXRjaCgidG9v bHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsImFyZWFDbGljayIsImFyZWFNb3VzZW92ZXI9CiIsImFy ZWFNb3VzZW91dCIpO3JldHVybiB2LnNpemUoMi4yKS5zaXplRG9tYWluKFsyLjIsMi4yXSksdi5k aXNwYXRjaC5vbigiZT0KbGVtZW50Q2xpY2suYXJlYSIsZnVuY3Rpb24oZSl7bS5hcmVhQ2xpY2so ZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvPQp2ZXIudG9vbHRpcCIsZnVuY3Rpb24o ZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxtLnRvb2x0aXA9ClNo b3coZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24o ZSl7bS50b29sdGlwSGlkZT0KKGUpfSksZy5kaXNwYXRjaD0zRG0sZy5zY2F0dGVyPTNEdixkMy5y ZWJpbmQoZyx2LCJpbnRlcmFjdGl2ZSIsInNpemUiLCJ4U2NhPQpsZSIsInlTY2FsZSIsInpTY2Fs ZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwic2l6ZURvbWFpbiIsImY9 Cm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwi Y2xpcFJhZGl1cyIsImhpZ2hsaT0KZ2h0UG9pbnQiLCJjbGVhckhpZ2hsaWdodHMiKSxnLm9wdGlv bnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoZyksZy54PTNEPQpmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGQzLmZ1bmN0b3IoZSksZyk6b30sZy55PTNEZnVuY3Rp b249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGQzLmZ1bmN0b3IoZSksZyk6dX0s Zy5tYXJnaW49M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0z RHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0PQoucmlnaHQ9M0R0eXBl b2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBl b2YgZS49CmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0 eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZT0KZCI/ZS5sZWZ0OnQubGVmdCxnKTp0fSxnLndpZHRo PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlPQosZyk6bn0sZy5o ZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsZyk6cn0s Zy5jbGlwRWQ9CmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0Rl LGcpOmh9LGcuY29sb3I9M0RmdW5jdGlvbih0KT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhp PTNEZS51dGlscy5nZXRDb2xvcih0KSxnKTppfSxnLm9mZnNldD0zRGZ1bmN0aW9uPQooZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLGcpOmZ9LGcub3JkZXI9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhsPTNEZSxnKTpsfSxnLnN0eWxlPTNEZnVuY3Rpb24o ZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuID0KYTthPTNEZTtzd2l0Y2goYSl7Y2FzZSJz dGFjayI6Zy5vZmZzZXQoInplcm8iKSxnLm9yZGVyKCJkZWZhdWx0Iik7YnJlYWs7Y2FzPQplInN0 cmVhbSI6Zy5vZmZzZXQoIndpZ2dsZSIpLGcub3JkZXIoImluc2lkZS1vdXQiKTticmVhaztjYXNl InN0cmVhbS1jZW50ZXI9CiI6Zy5vZmZzZXQoInNpbGhvdWV0dGUiKSxnLm9yZGVyKCJpbnNpZGUt b3V0Iik7YnJlYWs7Y2FzZSJleHBhbmQiOmcub2Zmc2V0KD0KImV4cGFuZCIpLGcub3JkZXIoImRl ZmF1bHQiKTticmVhaztjYXNlInN0YWNrX3BlcmNlbnQiOmcub2Zmc2V0KGcuZDNfc3RhY2tlPQpk T2Zmc2V0X3N0YWNrUGVyY2VudCksZy5vcmRlcigiZGVmYXVsdCIpfXJldHVybiBnfSxnLmludGVy cG9sYXRlPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsZyk6 Y30sZ30sZS5tb2RlbHMuc3RhY2tlZEFyZWFDaGFydD0zRGZ1bj0KY3Rpb24oKXtmdW5jdGlvbiBN KHkpe3JldHVybiB5LmVhY2goZnVuY3Rpb24oeSl7dmFyIEE9M0RkMy5zZWxlY3QodGhpcyksXz0K PTNEdGhpcyxEPTNEKGF8fHBhcnNlSW50KEEuc3R5bGUoIndpZHRoIikpfHw5NjApLXUubGVmdC11 LnJpZ2h0LFA9M0QoZnx8cGFyPQpzZUludChBLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3At dS5ib3R0b207TS51cGRhdGU9M0RmdW5jdGlvbigpe0EuY2FsbCg9Ck0pfSxNLmNvbnRhaW5lcj0z RHRoaXMsUy5kaXNhYmxlZD0zRHkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0p Oz0KaWYoIXgpe3ZhciBIO3g9M0R7fTtmb3IoSCBpbiBTKVNbSF1pbnN0YW5jZW9mIEFycmF5P3hb SF09M0RTW0hdLnNsaWNlKDApOnhbPQpIXT0zRFNbSF19aWYoIXl8fCF5Lmxlbmd0aHx8IXkuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS49Cmxlbmd0aCl7dmFyIEI9 M0RBLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW1RdKTtyZXR1cm4gQi5lbnRlcigpLmFw cGVuZD0KKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5Iiwi LS43ZW0iKS5zdHlsZSgidGV4dC1hbmNoPQpvciIsIm1pZGRsZSIpLEIuYXR0cigieCIsdS5sZWZ0 K0QvMikuYXR0cigieSIsdS50b3ArUC8yKS50ZXh0KGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGV9KSxN fUEuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksYj0zRHQueFNjYWxlKCksdz0zRHQu eVNjYWxlKD0KKTt2YXIgaj0zREEuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc3RhY2tlZEFyZWFD aGFydCIpLmRhdGEoW3ldKSxGPTNEai5lbnRlPQpyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudmQzIG52LXdyYXAgbnYtc3RhY2tlZEFyZWFDaGFydCIpLmFwcGVuZCgiZyI9CiksST0zRGou c2VsZWN0KCJnIik7Ri5hcHBlbmQoInJlY3QiKS5zdHlsZSgib3BhY2l0eSIsMCksRi5hcHBlbmQo ImciKS5hdHRyKD0KImNsYXNzIiwibnYteCBudi1heGlzIiksRi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXkgbnYtYXhpcyIpLEYuYXBwZW5kPQooImciKS5hdHRyKCJjbGFzcyIsIm52LXN0 YWNrZWRXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFc9CnJhcCIp LEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxGLmFwcGVuZCgi ZyIpLmF0dHIoImNsYT0Kc3MiLCJudi1pbnRlcmFjdGl2ZSIpLEkuc2VsZWN0KCJyZWN0IikuYXR0 cigid2lkdGgiLEQpLmF0dHIoImhlaWdodCIsUCk7aWYoPQpoKXt2YXIgcT0zRGM/RC1DOkQ7aS53 aWR0aChxKSxJLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bSh5KS5jYWxsKGkpLHU9Ci50 b3AhPTNEaS5oZWlnaHQoKSYmKHUudG9wPTNEaS5oZWlnaHQoKSxQPTNEKGZ8fHBhcnNlSW50KEEu c3R5bGUoImhlaWdodCIpKT0KfHw0MDApLXUudG9wLXUuYm90dG9tKSxJLnNlbGVjdCgiLm52LWxl Z2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhPQp0ZSgiKyhELXEpKyIsIisgLXUu dG9wKyIpIil9aWYoYyl7dmFyIFI9M0Rbe2tleTpMLnN0YWNrZWR8fCJTdGFja2VkIixtZXRhS2U9 Cnk6IlN0YWNrZWQiLGRpc2FibGVkOnQuc3R5bGUoKSE9M0Qic3RhY2siLHN0eWxlOiJzdGFjayJ9 LHtrZXk6TC5zdHJlYW18fCJTdD0KcmVhbSIsbWV0YUtleToiU3RyZWFtIixkaXNhYmxlZDp0LnN0 eWxlKCkhPTNEInN0cmVhbSIsc3R5bGU6InN0cmVhbSJ9LHtrZXk6PQpMLmV4cGFuZGVkfHwiRXhw YW5kZWQiLG1ldGFLZXk6IkV4cGFuZGVkIixkaXNhYmxlZDp0LnN0eWxlKCkhPTNEImV4cGFuZCIs c3Q9CnlsZToiZXhwYW5kIn0se2tleTpMLnN0YWNrX3BlcmNlbnR8fCJTdGFjayAlIixtZXRhS2V5 OiJTdGFja19QZXJjZW50IixkaXNhYj0KbGVkOnQuc3R5bGUoKSE9M0Qic3RhY2tfcGVyY2VudCIs c3R5bGU6InN0YWNrX3BlcmNlbnQifV07Qz0zRGsubGVuZ3RoLzMqMjYwPQosUj0zRFIuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiBrLmluZGV4T2YoZS5tZXRhS2V5KSE9M0Q9M0QtMX0pLHMud2lk dGgoQyk9Ci5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKSxJLnNlbGVjdCgiLm52LWNvbnRy b2xzV3JhcCIpLmRhdHVtKFIpLmNhbGwocz0KKSx1LnRvcCE9M0RNYXRoLm1heChzLmhlaWdodCgp LGkuaGVpZ2h0KCkpJiYodS50b3A9M0RNYXRoLm1heChzLmhlaWdodCgpLGkuPQpoZWlnaHQoKSks UD0zRChmfHxwYXJzZUludChBLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20p LEkuc2VsZWM9CnQoIi5udi1jb250cm9sc1dyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiKyAtdS50b3ArIikiKX1qLmF0dHIoIj0KdHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5s ZWZ0KyIsIit1LnRvcCsiKSIpLHYmJkkuc2VsZWN0KCIubnYteS5udi1heGlzIikuPQphdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsMCkiKSxtJiYoby53aWR0aChEKS5oZWlnaHQoUCku bWFyZ2luKHtsZWY9CnQ6dS5sZWZ0LHRvcDp1LnRvcH0pLnN2Z0NvbnRhaW5lcihBKS54U2NhbGUo Yiksai5zZWxlY3QoIi5udi1pbnRlcmFjdGl2ZSIpLj0KY2FsbChvKSksdC53aWR0aChEKS5oZWln aHQoUCk7dmFyIFU9M0RJLnNlbGVjdCgiLm52LXN0YWNrZWRXcmFwIikuZGF0dW0oeSk7PQpVLmNh bGwodCkscCYmKG4uc2NhbGUoYikudGlja3MoRC8xMDApLnRpY2tTaXplKC1QLDApLEkuc2VsZWN0 KCIubnYteC5udi1heGk9CnMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK1ArIiki KSxJLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobj0KKSksZCYmKHIuc2NhbGUodykudGlj a3ModC5vZmZzZXQoKT0zRD0zRCJ3aWdnbGUiPzA6UC8zNikudGlja1NpemUoLUQsMCkuc2V0PQpU aWNrRm9ybWF0KHQuc3R5bGUoKT0zRD0zRCJleHBhbmQifHx0LnN0eWxlKCk9M0Q9M0Qic3RhY2tf cGVyY2VudCI/ZDMuZm9ybWE9CnQoIiUiKTpFKSxJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNh bGwocikpLHQuZGlzcGF0Y2gub24oImFyZWFDbGljay50b2dnbD0KZSIsZnVuY3Rpb24oZSl7eS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KS5sZW5ndGg9M0Q9M0Q9M0QxP3ku PQpmb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMX0pOnkuZm9yRWFjaChmdW5jdGlv bih0LG4pe3QuZGlzYWJsZWQ9M0Q9Cm4hPTNEZS5zZXJpZXNJbmRleH0pLFMuZGlzYWJsZWQ9M0R5 Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KSxOLj0Kc3RhdGVDaGFuZ2UoUyks TS51cGRhdGUoKX0pLGkuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtTLmRp c2FiPQpsZWQ9M0RlLmRpc2FibGVkLE4uc3RhdGVDaGFuZ2UoUyksTS51cGRhdGUoKX0pLHMuZGlz cGF0Y2gub24oImxlZ2VuZENsaWNrIiw9CmZ1bmN0aW9uKGUsbil7aWYoIWUuZGlzYWJsZWQpcmV0 dXJuO1I9M0RSLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0KPTNEITAsZX0pLGUu ZGlzYWJsZWQ9M0QhMSx0LnN0eWxlKGUuc3R5bGUpLFMuc3R5bGU9M0R0LnN0eWxlKCksTi5zdGF0 ZUNoYW5nPQplKFMpLE0udXBkYXRlKCl9KSxvLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vtb3Zl IixmdW5jdGlvbihpKXt0LmNsZWFySGlnaGw9CmlnaHRzKCk7dmFyIHMsYSxmLGM9M0RbXTt5LmZp bHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnNlcmllc0luZGV4PTNEdCwhZT0KLmRpc2FibGVk fSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2E9M0RlLmludGVyYWN0aXZlQmlzZWN0KG4udmFsdWVz LGkucG9pbnRYPQpWYWx1ZSxNLngoKSksdC5oaWdobGlnaHRQb2ludChyLGEsITApO3ZhciBvPTNE bi52YWx1ZXNbYV07aWYodHlwZW9mIG89M0Q9M0Q9CiJ1bmRlZmluZWQiKXJldHVybjt0eXBlb2Yg cz0zRD0zRCJ1bmRlZmluZWQiJiYocz0zRG8pLHR5cGVvZiBmPTNEPTNEInVuZGVmaT0KbmVkIiYm KGY9M0RNLnhTY2FsZSgpKE0ueCgpKG8sYSkpKTt2YXIgdT0zRHQuc3R5bGUoKT0zRD0zRCJleHBh bmQiP28uZGlzcGxhPQp5Lnk6TS55KCkobyxhKTtjLnB1c2goe2tleTpuLmtleSx2YWx1ZTp1LGNv bG9yOmwobixuLnNlcmllc0luZGV4KSxzdGFja2VkVmE9Cmx1ZTpvLmRpc3BsYXl9KX0pLGMucmV2 ZXJzZSgpO2lmKGMubGVuZ3RoPjIpe3ZhciBoPTNETS55U2NhbGUoKS5pbnZlcnQoaS5tbz0KdXNl WSkscD0zREluZmluaXR5LGQ9M0RudWxsO2MuZm9yRWFjaChmdW5jdGlvbihlLHQpe2g9M0RNYXRo LmFicyhoKTt2YXIgbj0KPTNETWF0aC5hYnMoZS5zdGFja2VkVmFsdWUueTApLHI9M0RNYXRoLmFi cyhlLnN0YWNrZWRWYWx1ZS55KTtpZihoPj0zRG4mJmg8PQo9M0RyK24pe2Q9M0R0O3JldHVybn19 KSxkIT0zRG51bGwmJihjW2RdLmhpZ2hsaWdodD0zRCEwKX12YXIgdj0zRG4udGlja0Zvcm09CmF0 KCkoTS54KCkocyxhKSksbT0zRHQuc3R5bGUoKT0zRD0zRCJleHBhbmQiP2Z1bmN0aW9uKGUsdCl7 cmV0dXJuIGQzLmZvcm1hdD0KKCIuMSUiKShlKX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNr Rm9ybWF0KCkoZSl9O28udG9vbHRpcC5wb3NpdGlvbih7bGVmPQp0OmYrdS5sZWZ0LHRvcDppLm1v dXNlWSt1LnRvcH0pLmNoYXJ0Q29udGFpbmVyKF8ucGFyZW50Tm9kZSkuZW5hYmxlZChnKS52YWw9 CnVlRm9ybWF0dGVyKG0pLmRhdGEoe3ZhbHVlOnYsc2VyaWVzOmN9KSgpLG8ucmVuZGVyR3VpZGVM aW5lKGYpfSksby5kaXNwYXRjaD0KLm9uKCJlbGVtZW50TW91c2VvdXQiLGZ1bmN0aW9uKGUpe04u dG9vbHRpcEhpZGUoKSx0LmNsZWFySGlnaGxpZ2h0cygpfSksTi5vPQpuKCJ0b29sdGlwU2hvdyIs ZnVuY3Rpb24oZSl7ZyYmTyhlLF8ucGFyZW50Tm9kZSl9KSxOLm9uKCJjaGFuZ2VTdGF0ZSIsZnVu Y3Q9CmlvbihlKXt0eXBlb2YgZS5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmeS5sZW5ndGg9M0Q9 M0Q9M0RlLmRpc2FibGVkLmxlbmd0aD0KJiYoeS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNh YmxlZD0zRGUuZGlzYWJsZWRbbl19KSxTLmRpc2FibGVkPTNEZS5kaXNhPQpibGVkKSx0eXBlb2Yg ZS5zdHlsZSE9M0QidW5kZWZpbmVkIiYmdC5zdHlsZShlLnN0eWxlKSxNLnVwZGF0ZSgpfSl9KSxN fXZhciA9CnQ9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpLG49M0RlLm1vZGVscy5heGlzKCkscj0z RGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tbz0KZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVn ZW5kKCksbz0zRGUuaW50ZXJhY3RpdmVHdWlkZWxpbmUoKSx1PTNEe3RvcDozPQowLHJpZ2h0OjI1 LGJvdHRvbTo1MCxsZWZ0OjYwfSxhPTNEbnVsbCxmPTNEbnVsbCxsPTNEZS51dGlscy5kZWZhdWx0 Q29sb3IoKSw9CmM9M0QhMCxoPTNEITAscD0zRCEwLGQ9M0QhMCx2PTNEITEsbT0zRCExLGc9M0Qh MCx5PTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZT0KdHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIr bisiIG9uICIrdCsiPC9wPiJ9LGIsdyxFPTNEZDMuZm9ybWF0KCIsLjJmIiksUz0KPTNEe3N0eWxl OnQuc3R5bGUoKX0seD0zRG51bGwsVD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLE49M0RkMy5kaXNw YXRjaCgidG9vPQpsdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VT dGF0ZSIpLEM9M0QyNTAsaz0zRFsiU3RhY2tlZCI9CiwiU3RyZWFtIiwiRXhwYW5kZWQiXSxMPTNE e30sQT0zRDA7bi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZT0KbnQodj8i cmlnaHQiOiJsZWZ0Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIE89M0RmdW5jdGlvbihpLHMpe3Zh ciBvPTNEaS5wb3NbPQowXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0 VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCk9CihpLnBvaW50LGkucG9pbnRJbmRleCkp LGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9Cj0zRHko aS5zZXJpZXMua2V5LGEsZixpLE0pO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52YWx1ZTwwPyJu IjoicyIsbnVsbCxzKT0KfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigidG9vbHRpcFNob3ciLGZ1bmN0 aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3UubGVmdCxlPQoucG9zWzFdK3UudG9wXSxOLnRvb2x0 aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUpe049Ci50 b29sdGlwSGlkZShlKX0pLE4ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe2cmJmUudG9vbHRp cC5jbGVhbnVwKCl9KSxNLj0KZGlzcGF0Y2g9M0ROLE0uc3RhY2tlZD0zRHQsTS5sZWdlbmQ9M0Rp LE0uY29udHJvbHM9M0RzLE0ueEF4aXM9M0RuLE0ueUF4aXM9Cj0zRHIsTS5pbnRlcmFjdGl2ZUxh eWVyPTNEbyxkMy5yZWJpbmQoTSx0LCJ4IiwieSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLD0K InhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwic2l6ZURvbWFpbiIsImludGVy YWN0aXZlIiwidXNlVm9yb25vPQppIiwib2Zmc2V0Iiwib3JkZXIiLCJzdHlsZSIsImNsaXBFZGdl IiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiaW50ZXI9CnBvbGF0ZSIpLE0ub3B0aW9u cz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChNKSxNLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3Jl dD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmlu ZWQiP2UudG9wOnUudG9wLHUucmlnPQpodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQi P2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHQ9Cm9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5l ZCI/ZT0KLmxlZnQ6dS5sZWZ0LE0pOnV9LE0ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oYT0zRGUsTSk6PQphfSxNLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxNKTpmfSxNLmNvbG9yPTNEZnU9Cm5jdGlvbihuKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUudXRpbHMuZ2V0Q29sb3IobiksaS5jb2xvcihs KSx0LmNvbD0Kb3IobCksTSk6bH0sTS5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsTSk6PQpjfSxNLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsTSk6aH0sTS5zaG93WEE9Cnhpcz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxNKTpwfSxNLnNob3dZQXhp cz0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLE0pOmR9LE0u cmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o dj0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksTSk6dn0sTS51c2VJbnRlcmE9CmN0aXZl R3VpZGVsaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLGU9 M0Q9M0Q9M0QhMCYmKD0KTS5pbnRlcmFjdGl2ZSghMSksTS51c2VWb3Jvbm9pKCExKSksTSk6bX0s TS50b29sdGlwPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oeT0zRGUs TSk6eX0sTS50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/ KGc9M0RlLE0pOmd9LE0udG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oeT0zRD0KZSxNKTp5fSxNLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KFM9M0RlLE0pOlN9LE0uZGVmYXVsPQp0U3RhdGU9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsTSk6eH0sTS5ub0RhdGE9M0RmdW5jdGk9 Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxNKTpUfSxNLnRyYW5zaXRpb25E dXJhdGlvbj0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLE0p OkF9LE0uY29udHJvbHNEYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0 aD8oaz0zRGUsTSk6a30sTS5jb250cm9sTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW49CnRzLmxlbmd0aD90eXBlb2YgZSE9M0Qib2JqZWN0Ij9MOihMPTNEZSxNKTpMfSxyLnNldFRp Y2tGb3JtYXQ9M0RyLnRpY2tGb3JtYT0KdCxyLnRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUscik6RX0sTX19KCksZGVmPQppbmUoInBsdWdpbi9w bHVnaW5zL252ZDMvbnYuZDMiLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252 ZDMvY289Cm1tb24vY29uZmlnIixbInBsdWdpbi9jaGFydHMvZm9ybXMvZGVmYXVsdCIsInBsdWdp bi9wbHVnaW5zL252ZDMvbnYuZDMiXSxmdT0KbmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7 fSxlLHt0aXRsZToiIixjYXRlZ29yeToiIixsaWJyYXJ5OiJOVkQzIix0YWc6PQoic3ZnIixrZXl3 b3Jkczoic21hbGwifSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9iYXIvY29uZmlnIixb InBsdWdpbi89CmNoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4g JC5leHRlbmQoITAse30sZSx7dGl0bGU6IlJlZz0KdWxhciIsY2F0ZWdvcnk6IkJhciBkaWFncmFt cyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19sYWJlPQpsOiEwLGlz X2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlzX251 bWVyaWM6ITB9fX09Cil9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfc3RhY2tlZC9j b25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbT0KbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUp e3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiU3RhY2tlZCIsY2F0ZWdvcnk6PQoiQmFy IGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVs OiEwLGlzX2F1dG86ITA9Cixpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhp cyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdT0KZ2luL2NoYXJ0cy9udmQzL2Jhcl9o b3Jpem9udGFsL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdPQos ZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJIb3Jpem9udGFsIixj YXRlZ29yeToiQmFyIGRpYWc9CnJhbXMiLHNldHRpbmdzOnt4X2F4aXNfdHlwZTp7aW5pdDoiaGlk ZSJ9fSxjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LT0KYXhpcyIsaXNfbGFiZWw6ITAs aXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNf PQpudW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9ob3Jpem9u dGFsX3N0YWNrZWQvY29uZmlnIiw9ClsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWci XSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dD0KaXRsZToiU3RhY2tlZCBo b3Jpem9udGFsIixjYXRlZ29yeToiQmFyIGRpYWdyYW1zIixzZXR0aW5nczp7eF9heGlzX3R5cGU6 e2luPQppdDoiaGlkZSJ9fSxjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlz X2xhYmVsOiEwLGlzX2F1dG86ITAsaXM9Cl91bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9y IHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbj0KL2NoYXJ0cy9udmQz L2xpbmVfZm9jdXMvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0s ZnVuY3RpPQpvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkxpbmUgd2l0aCBm b2N1cyIsY2F0ZWdvcnk6Ik90aGVycyIsem89Cm9tYWJsZToibmF0aXZlIixjb2x1bW5zOnt4Ont0 aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86IT0KMCxpc191bmlx dWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxk ZWZpbmUoInBsPQp1Z2luL2NoYXJ0cy9udmQzL3BpZS9jb25maWciLFsicGx1Z2luL3BsdWdpbnMv bnZkMy9udi5kMyJdLGZ1bmN0aW9uKCl7cmV0dXI9Cm4gJC5leHRlbmQoITAse30se3RpdGxlOiJQ aWUgY2hhcnQiLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsbGlicmFyeToiTlZEMyIsdD0KYWc6InN2 ZyIsa2V5d29yZHM6InNtYWxsIixjb2x1bW5zOntsYWJlbDp7dGl0bGU6IkxhYmVscyIsaXNfbGFi ZWw6ITAsaXNfYXV0PQpvOiEwfSx5Ont0aXRsZToiVmFsdWVzIixpc19udW1lcmljOiEwfX0sc2V0 dGluZ3M6e21haW5fc2VwYXJhdG9yOnt0eXBlOiJzZXA9CmFyYXRvciIsdGl0bGU6IlBpZSBjaGFy dCBzZXR0aW5ncyJ9LGRvbnV0X3JhdGlvOnt0aXRsZToiRG9udXQgcmF0aW8iLGluZm86Ij0KRGV0 ZXJtaW5lIGhvdyBsYXJnZSB0aGUgZG9udXQgaG9sZSB3aWxsIGJlLiIsdHlwZToic2VsZWN0Iixp bml0OiIwLjUiLGRhdGE6PQpbe2xhYmVsOiI1MCUiLHZhbHVlOiIwLjUifSx7bGFiZWw6IjI1JSIs dmFsdWU6IjAuMjUifSx7bGFiZWw6IjEwJSIsdmFsdWU6IjA9Ci4xMCJ9LHtsYWJlbDoiMCUiLHZh bHVlOiIwIn1dfSxzaG93X2xlZ2VuZDp7dGl0bGU6IlNob3cgbGVnZW5kIixpbmZvOiJXb3VsZD0K IHlvdSBsaWtlIHRvIGFkZCBhIGxlZ2VuZD8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJmYWxz ZSIsZGF0YTpbe2xhYmVsOiJZPQplcyIsdmFsdWU6InRydWUifSx7bGFiZWw6Ik5vIix2YWx1ZToi ZmFsc2UifV19LGxhYmVsX3NlcGFyYXRvcjp7dHlwZToic2VwYXI9CmF0b3IiLHRpdGxlOiJMYWJl bCBzZXR0aW5ncyJ9LGxhYmVsX3R5cGU6e3RpdGxlOiJEb251dCBsYWJlbCIsaW5mbzoiV2hhdCB3 bz0KdWxkIHlvdSBsaWtlIHRvIHNob3cgZm9yIGVhY2ggc2xpY2U/Iix0eXBlOiJzZWxlY3QiLGlu aXQ6InBlcmNlbnQiLGRhdGE6W3tsPQphYmVsOiItLSBOb3RoaW5nIC0tIix2YWx1ZToiaGlkZSIs aGlkZToibGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiTGFiZWwgY29sdW09Cm4iLHZhbHVlOiJrZXki LHNob3c6ImxhYmVsX291dHNpZGUifSx7bGFiZWw6IlZhbHVlIGNvbHVtbiIsdmFsdWU6InZhbHVl IixzaD0Kb3c6ImxhYmVsX291dHNpZGUifSx7bGFiZWw6IlBlcmNlbnRhZ2UiLHZhbHVlOiJwZXJj ZW50IixzaG93OiJsYWJlbF9vdXRzaWRlPQoifV19LGxhYmVsX291dHNpZGU6e3RpdGxlOiJTaG93 IG91dHNpZGUiLGluZm86IldvdWxkIHlvdSBsaWtlIHRvIHNob3cgbGFiZWw9CnMgb3V0c2lkZSB0 aGUgZG9udXQ/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoiZmFsc2UiLGRhdGE6W3tsYWJlbDoi WWVzIix2YT0KbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1dfSx1c2VfcGFu ZWxzOntpbml0OiJ0cnVlIixoaWRlOiEwfX19PQopfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252 ZDMvc3RhY2tlZGFyZWFfZnVsbC9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQ9CjMvY29tbW9u L2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiRXhw YW5kZWQiLHpvbz0KbWFibGU6ITAsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIixrZXl3b3JkczoiZGVm YXVsdCBzbWFsbCIsY29sdW1uczp7eDp7dGl0bGU6PQoiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xh YmVsOiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGY9Cm9yIHkt YXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9zdGFj a2VkYXJlYV9zdHJlYT0KbS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25m aWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoPQohMCx7fSxlLHt0aXRsZToiU3RyZWFt IixjYXRlZ29yeToiQXJlYSBjaGFydHMiLHpvb21hYmxlOiEwLGtleXdvcmRzOiJkZWZhdWw9CnQg c21hbGwiLHNob3dtYXhtaW46ITAsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlz Iixpc19sYWJlbDohMCxpcz0KX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVz IGZvciB5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmPQppbmUoInBsdWdpbi9jaGFydHMv bnZkMy9oaXN0b2dyYW0vY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmk9 CmciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6Ikhpc3RvZ3Jh bSIsY2F0ZWdvcnk6IkRhdGEgcD0Kcm9jZXNzaW5nIChyZXF1aXJlcyAnY2hhcnRzJyB0b29sIGZy b20gVG9vbHNoZWQpIixleGVjdXRlOiJoaXN0b2dyYW0iLGtleXdvPQpyZHM6InNtYWxsIG1lZGl1 bSBsYXJnZSIsY29sdW1uczp7eTp7dGl0bGU6Ik9ic2VydmF0aW9ucyIsaXNfbnVtZXJpYzohMH19 LHM9CmV0dGluZ3M6e3hfYXhpc19sYWJlbDp7aW5pdDoiVmFsdWVzIn0seV9heGlzX2xhYmVsOntp bml0OiJEZW5zaXR5In0seV9heGlzXz0KdHlwZTp7aW5pdDoiZiJ9LHlfYXhpc19wcmVjaXNpb246 e2luaXQ6Ii4yIn19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkPQozL2xpbmUvY29uZmln IixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJu ICQuZXg9CnRlbmQoITAse30sZSx7dGl0bGU6IkxpbmUgY2hhcnQiLGNhdGVnb3J5OiJPdGhlcnMi LHpvb21hYmxlOiEwLGNvbHVtbnM6e3g6ez0KdGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19s YWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhPQpsdWVzIGZvciB5 LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvc2Nh dHRlci9jb249CmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fT0KLGUse3RpdGxlOiJTY2F0dGVyIHBsb3QiLGNh dGVnb3J5OiJPdGhlcnMiLHpvb21hYmxlOiEwLGNvbHVtbnM6e3g6e3RpdGxlOiJWPQphbHVlcyBm b3IgeC1heGlzIixpc19udW1lcmljOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LWF4aXMiLGlz X251bWVyaWM6ITA9Cn19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJl YS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzLz0KY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9u KGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiUmVndWxhciIsem9vbWFiPQpsZToh MCxjYXRlZ29yeToiQXJlYSBjaGFydHMiLGtleXdvcmRzOiJkZWZhdWx0IHNtYWxsIixjb2x1bW5z Ont4Ont0aXRsZToiVmE9Cmx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxp c191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yID0KeS1heGlzIixpc19udW1lcmljOiEw fX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpZyIsWyJwPQps dWdpbi9jaGFydHMvZm9ybXMvZGVmYXVsdCJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCgh MCx7fSxlLHt0aXRsZToiIiw9CmNhdGVnb3J5OiIiLGxpYnJhcnk6ImpxUGxvdCIsdGFnOiJkaXYi LHpvb21hYmxlOiEwLGtleXdvcmRzOiJtZWRpdW0iLHNldHRpbj0KZ3M6e3NlcGFyYXRvcl9ncmlk Ont0aXRsZToiR3JpZHMiLHR5cGU6InNlcGFyYXRvciJ9LHhfYXhpc19ncmlkOnt0aXRsZToiQXhp PQpzIGdyaWQiLGluZm86IldvdWxkIHlvdSBsaWtlIHRvIHNob3cgZ3JpZCBsaW5lcyBmb3IgdGhl IFggYXhpcz8iLHR5cGU6InJhZGk9Cm9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6 Ik9uIix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiT2ZmIix2YWx1ZToiZj0KYWxzZSJ9XX0seV9heGlz X2dyaWQ6e3RpdGxlOiJBeGlzIGdyaWQiLGluZm86IldvdWxkIHlvdSBsaWtlIHRvIHNob3cgZ3Jp ZCBsPQppbmVzIGZvciB0aGUgWSBheGlzPyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6InRydWUi LGRhdGE6W3tsYWJlbDoiT24iLHZhbHU9CmU6InRydWUifSx7bGFiZWw6Ik9mZiIsdmFsdWU6ImZh bHNlIn1dfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYj0KYXIvY29uZmlnIixb InBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4g JC5leHRlPQpuZCghMCx7fSxlLHt0aXRsZToiUmVndWxhciIsY2F0ZWdvcnk6IkJhciBkaWFncmFt cyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHU9CmVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlz X2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciB5LT0KYXhpcyIsaXNf bnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvanFwbG90L2xpbmUvY29uZmln IixbInBsdWdpPQpuL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZTo9CiJMaW5lIGNoYXJ0IixjYXRlZ29yeToiT3Ro ZXJzIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYj0KZWw6ITAs aXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNf bnVtZXJpYzohMH19PQp9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3Qvc2NhdHRlci9j b25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY289Cm1tb24vY29uZmlnIl0sZnVuY3Rpb24o ZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJTY2F0dGVyIHBsb3QiLGNhdD0KZWdv cnk6Ik90aGVycyIsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3IgeC1heGlzIixpc19udW1l cmljOiEwfSx5Ont0aXRsPQplOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19LHNl dHRpbmdzOnt4X2F4aXNfZ3JpZDp7aW5pdDoidHJ1ZSJ9fX09Cil9KSxkZWZpbmUoInBsdWdpbi9j aGFydHMvanFwbG90L2JveHBsb3QvY29uZmlnIixbInBsdWdpbi9jaGFydHMvanFwbG90L2NvbT0K bW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToi Qm94IHBsb3QiLGNhdGVnb3J5PQo6IkRhdGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgJ2NoYXJ0cycg dG9vbCBmcm9tIFRvb2xzaGVkKSIsbGlicmFyeToianFQbG90Iiw9CnRhZzoiZGl2IixleGVjdXRl OiJib3hwbG90IixrZXl3b3Jkczoic21hbGwgbWVkaXVtIGxhcmdlIixjb2x1bW5zOnt5Ont0aXRs ZT0KOiJPYnNlcnZhdGlvbnMiLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7c2hvd19sZWdlbmQ6 e2luaXQ6ImZhbHNlIn19fSl9KSxkPQplZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvaGlzdG9n cmFtX2Rpc2NyZXRlL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGw9Cm90L2NvbW1vbi9jb25m aWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkRpc2NyZXRl IEhpcz0KdG9ncmFtIixjYXRlZ29yeToiRGF0YSBwcm9jZXNzaW5nIChyZXF1aXJlcyAnY2hhcnRz JyB0b29sIGZyb20gVG9vbHNoZWQpIixlPQp4ZWN1dGU6Imhpc3RvZ3JhbWRpc2NyZXRlIixrZXl3 b3Jkczoic21hbGwgbWVkaXVtIGxhcmdlIixjb2x1bW5zOnt4Ont0aXRsZTo9CiJPYnNlcnZhdGlv bnMiLGlzX2xhYmVsOiEwfX0sc2V0dGluZ3M6e3hfYXhpc19sYWJlbDp7aW5pdDoiQnJlYWtzIn0s eV9heGlzXz0KbGFiZWw6e2luaXQ6IkRlbnNpdHkifX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0 cy9vdGhlcnMvaGVhdG1hcC9jb25maWciLFsiPQpwbHVnaW4vY2hhcnRzL2Zvcm1zL2RlZmF1bHQi XSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6Ikg9CmVhdG1hcCIs Y2F0ZWdvcnk6Ik90aGVycyIsbGlicmFyeToiQ3VzdG9tIix0YWc6InN2ZyIsa2V5d29yZHM6InNt YWxsIix6b29tYT0KYmxlOiEwLGNvbHVtbnM6e3g6e3RpdGxlOiJDb2x1bW4gbGFiZWxzIixpc19s YWJlbDohMCxpc19udW1lcmljOiEwLGlzX3VuaXF1PQplOiEwfSx5Ont0aXRsZToiUm93IGxhYmVs cyIsaXNfbGFiZWw6ITAsaXNfbnVtZXJpYzohMCxpc191bmlxdWU6ITB9LHo6e3RpdGw9CmU6Ik9i c2VydmF0aW9uIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3VzZV9wYW5lbHM6e2luaXQ6InRy dWUiLGhpZGU6ITB9LD0KY29sb3Jfc2V0Ont0aXRsZToiQ29sb3Igc2NoZW1lIixpbmZvOiJTZWxl Y3QgYSBjb2xvciBzY2hlbWUgZm9yIHlvdXIgaGVhdG1hPQpwIix0eXBlOiJzZWxlY3QiLGluaXQ6 ImpldCIsZGF0YTpbe2xhYmVsOiJDb2xkLXRvLUhvdCIsdmFsdWU6ImhvdCJ9LHtsYWJlbDo9CiJD b29sIix2YWx1ZToiY29vbCJ9LHtsYWJlbDoiQ29wcGVyIix2YWx1ZToiY29wcGVyIn0se2xhYmVs OiJHcmF5IHNjYWxlIix2YT0KbHVlOiJncmF5In0se2xhYmVsOiJKZXQiLHZhbHVlOiJqZXQifSx7 bGFiZWw6Ik5vLUdyZWVuIix2YWx1ZToibm9fZ3JlZW4ifSx7PQpsYWJlbDoiT2NlYW4iLHZhbHVl OiJvY2VhbiJ9LHtsYWJlbDoiUG9sYXIiLHZhbHVlOiJwb2xhciJ9LHtsYWJlbDoiUmVkLXRvLUc9 CnJlZW4iLHZhbHVlOiJyZWRncmVlbiJ9LHtsYWJlbDoiUmVkLXRvLWdyZWVuIChzYXR1cmF0ZWQp Iix2YWx1ZToicmVkMmdyZWVuIj0KfSx7bGFiZWw6IlJlbGllZiIsdmFsdWU6InJlbGllZiJ9LHts YWJlbDoiU2Vpc21vZ3JhcGgiLHZhbHVlOiJzZWlzIn0se2xhYmVsPQo6IlNlYWxhbmQiLHZhbHVl OiJzZWFsYW5kIn0se2xhYmVsOiJTcGxpdCIsdmFsdWU6InNwbGl0In0se2xhYmVsOiJXeXNpd3ln Iiw9CnZhbHVlOiJ3eXNpd3lnIn1dfSx1cmxfdGVtcGxhdGU6e3RpdGxlOiJVcmwgdGVtcGxhdGUi LGluZm86IkVudGVyIGEgdXJsIHRvID0KbGluayB0aGUgbGFiZWxzIHdpdGggZXh0ZXJuYWwgc291 cmNlcy4gVXNlIF9fTEFCRUxfXyBhcyBwbGFjZWhvbGRlci4iLHR5cGU6PQoidGV4dCIsaW5pdDoi IixwbGFjZWhvbGRlcjoiaHR0cDovL3NvbWV1cmwuY29tP2lkPTNEX19MQUJFTF9fIn19fSl9KSxk ZWZpbmU9CigicGx1Z2luL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcF9jbHVzdGVyL2NvbmZpZyIsWyJw bHVnaW4vY2hhcnRzL290aGVycy9oZWF0bT0KYXAvY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJu ICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJDbHVzdGVyZWQgSGVhdG1hcCIsPQpjYXRlZ29yeToi RGF0YSBwcm9jZXNzaW5nIChyZXF1aXJlcyAnY2hhcnRzJyB0b29sIGZyb20gVG9vbHNoZWQpIixl eGVjdXRlOiI9CmhlYXRtYXAiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UifSl9KSxkZWZp bmUoInBsdWdpbi9jaGFydHMvdHlwZXMiLFsicD0KbHVnaW4vY2hhcnRzL252ZDMvYmFyL2NvbmZp ZyIsInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfc3RhY2tlZC9jb25maWciLCJwbHVnPQppbi9jaGFy dHMvbnZkMy9iYXJfaG9yaXpvbnRhbC9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX2hv cml6b250YWxfc3Q9CmFja2VkL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9saW5lX2ZvY3Vz L2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9waT0KZS9jb25maWciLCJwbHVnaW4vY2hhcnRz L252ZDMvc3RhY2tlZGFyZWFfZnVsbC9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvPQpzdGFj a2VkYXJlYV9zdHJlYW0vY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2hpc3RvZ3JhbS9jb25m aWciLCJwbHVnaW4vY2g9CmFydHMvbnZkMy9saW5lL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZk My9zY2F0dGVyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbj0KdmQzL3N0YWNrZWRhcmVhL2NvbmZp ZyIsInBsdWdpbi9jaGFydHMvanFwbG90L2Jhci9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxPQpw bG90L2xpbmUvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9qcXBsb3Qvc2NhdHRlci9jb25maWciLCJw bHVnaW4vY2hhcnRzL2pxcGw9Cm90L2JveHBsb3QvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9qcXBs b3QvaGlzdG9ncmFtX2Rpc2NyZXRlL2NvbmZpZyIsInBsdWdpbj0KL2NoYXJ0cy9vdGhlcnMvaGVh dG1hcC9jb25maWciLCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwX2NsdXN0ZXIvY29uZmln PQoiXSxmdW5jdGlvbihlLHQsbixyLGkscyxvLHUsYSxmLGwsYyxoLHAsZCx2LG0sZyx5KXtyZXR1 cm4gQmFja2JvbmUuTW9kZWwuZXg9CnRlbmQoe2RlZmF1bHRzOntudmQzX2JhcjplLG52ZDNfYmFy X3N0YWNrZWQ6dCxudmQzX2Jhcl9ob3Jpem9udGFsOm4sbnZkM19iYT0Kcl9ob3Jpem9udGFsX3N0 YWNrZWQ6cixudmQzX2xpbmVfZm9jdXM6aSxudmQzX3N0YWNrZWRhcmVhOmMsbnZkM19zdGFja2Vk YXJlPQphX2Z1bGw6byxudmQzX3N0YWNrZWRhcmVhX3N0cmVhbTp1LG52ZDNfcGllOnMsbnZkM19s aW5lOmYsbnZkM19zY2F0dGVyOmwsbnY9CmQzX2hpc3RvZ3JhbTphLGpxcGxvdF9iYXI6aCxqcXBs b3RfaGlzdG9ncmFtX2Rpc2NyZXRlOm0sanFwbG90X2xpbmU6cCxqcXBsbz0KdF9zY2F0dGVyOmQs anFwbG90X2JveHBsb3Q6dixvdGhlcnNfaGVhdG1hcDpnLG90aGVyc19oZWF0bWFwX2NsdXN0ZXI6 eX19KX0pPQosZGVmaW5lKCJwbHVnaW4vYXBwIixbIm12Yy91aS91aS1tb2RhbCIsIm12Yy91aS91 aS1wb3J0bGV0IiwibXZjL3VpL3VpLW1pc2M9CiIsInV0aWxzL3V0aWxzIiwicGx1Z2luL2xpYnJh cnkvam9icyIsInBsdWdpbi9saWJyYXJ5L2RhdGFzZXRzIiwicGx1Z2luL2xpYj0KcmFyeS9zdG9y YWdlIiwidXRpbHMvZGVmZXJyZWQiLCJwbHVnaW4vdmlld3Mvdmlld2VyIiwicGx1Z2luL3ZpZXdz L2VkaXRvciIsPQoicGx1Z2luL21vZGVscy9jb25maWciLCJwbHVnaW4vbW9kZWxzL2NoYXJ0Iiwi cGx1Z2luL2NoYXJ0cy90eXBlcyJdLGZ1bmN0aW89Cm4oZSx0LG4scixpLHMsbyx1LGEsZixsLGMs aCl7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aT0Kb24odCl7 dGhpcy5vcHRpb25zPTNEdCxHYWxheHkmJkdhbGF4eS5tb2RhbD90aGlzLm1vZGFsPTNER2FsYXh5 Lm1vZGFsOnRoaXMuPQptb2RhbD0zRG5ldyBlLlZpZXcsdGhpcy5jb25maWc9M0RuZXcgbCx0aGlz LnR5cGVzPTNEbmV3IGgsdGhpcy5jaGFydD0zRG5ldyA9CmMsdGhpcy5qb2JzPTNEbmV3IGkodGhp cyksdGhpcy5kYXRhc2V0cz0zRG5ldyBzKHRoaXMpLHRoaXMuc3RvcmFnZT0zRG5ldyBvKD0KdGhp cyksdGhpcy5kZWZlcnJlZD0zRG5ldyB1LHRoaXMudmlld2VyX3ZpZXc9M0RuZXcgYSh0aGlzKSx0 aGlzLmVkaXRvcl92aWV3PQo9M0RuZXcgZih0aGlzKSx0aGlzLiRlbC5hcHBlbmQodGhpcy52aWV3 ZXJfdmlldy4kZWwpLHRoaXMuJGVsLmFwcGVuZCh0aGlzLmU9CmRpdG9yX3ZpZXcuJGVsKTtpZigh dGhpcy5zdG9yYWdlLmxvYWQoKSl0aGlzLmdvKCJlZGl0b3IiKTtlbHNle3RoaXMuZ28oInZpZT0K d2VyIik7dmFyIG49M0R0aGlzO3RoaXMuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpe24uY2hh cnQudHJpZ2dlcigicmVkcmF3PQoiKX0pfX0sZ286ZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXAiKS5o aWRlKCk7c3dpdGNoKGUpe2Nhc2UiZWRpdG9yIjp0aGlzLmVkaXQ9Cm9yX3ZpZXcuc2hvdygpLHRo aXMudmlld2VyX3ZpZXcuaGlkZSgpO2JyZWFrO2Nhc2Uidmlld2VyIjp0aGlzLmVkaXRvcl92aWV3 Lj0KaGlkZSgpLHRoaXMudmlld2VyX3ZpZXcuc2hvdygpfX0sY2hhcnRQYXRoOmZ1bmN0aW9uKGUp e3ZhciB0PTNEZS5zcGxpdCgvXyguPQorKS8pO3JldHVybiB0Lmxlbmd0aD49M0QyP3RbMF0rIi8i K3RbMV06KGNvbnNvbGUuZGVidWcoIkZBSUxFRCBBcHA6Y2hhcnRQYXQ9CmgoKSAtIEludmFsaWQg Zm9ybWF0OiAiK2UpLHVuZGVmaW5lZCl9fSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CgpkaWZmIC1yIDNiYmVhNGZmZjlmMjJhZjA1NjVlMTM2ZGJhNjU5OTI0MDNjMGE5YTUgLXIgMzEz NTdlZGYyNjBlYTZiMjU5ZGM2ODI9CjMwZjMwODNiM2YwZmFmY2EwIGNvbmZpZy9wbHVnaW5zL3Zp c3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvdmlld3MvZ3JvdXAuanMKLS0tIGEvY29uZmlnL3Bs dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy92aWV3cy9ncm91cC5qcworKysgYi9j b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3ZpZXdzL2dyb3VwLmpz CkBAIC0yNTQsNyArMjU0LDkgQEAKICAgICAgICAgaWYgKGtleV90ZXh0ID0zRD0zRD0zRCB1bmRl ZmluZWQpIHsKICAgICAgICAgICAgIGtleV90ZXh0ID0zRCAnJzsKICAgICAgICAgfQotICAgICAg ICB0aGlzLmdyb3VwX2tleS52YWx1ZShrZXlfdGV4dCk7CisgICAgICAgIGlmIChrZXlfdGV4dCAh PTNEIHRoaXMuZ3JvdXBfa2V5LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIHRoaXMuZ3JvdXBfa2V5 LnZhbHVlKGtleV90ZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0pOwo9MjAKCmRpZmYgLXIgM2Ji ZWE0ZmZmOWYyMmFmMDU2NWUxMzZkYmE2NTk5MjQwM2MwYTlhNSAtciAzMTM1N2VkZjI2MGVhNmIy NTlkYzY4Mj0KMzBmMzA4M2IzZjBmYWZjYTAgbGliL2dhbGF4eS90b29scy93cmFwcGVycy5weQot LS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3dyYXBwZXJzLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMv d3JhcHBlcnMucHkKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAgICAgICByZXR1cm4gRGF0YXNldEZp bGVuYW1lV3JhcHBlciggZGF0YXNldCwgKip3cmFwcGVyX2t3ZHMgKQo9MjAKPTIwCi1jbGFzcyBE YXRhc2V0TGlzdFdyYXBwZXIoIGxpc3QsIEhhc0RhdGFzZXRzICk6CitjbGFzcyBEYXRhc2V0TGlz dFdyYXBwZXIoIGxpc3QsIFRvb2xQYXJhbWV0ZXJWYWx1ZVdyYXBwZXIsIEhhc0RhdGFzZXRzICk6 CiAgICAgIiIiCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBkYXRhc2V0cywgZGF0 YXNldF9wYXRocz0zRFtdLCAqKmt3YXJncyApOgpAQCAtMjc3LDcgKzI3Nyw3IEBACiAgICAgICAg IHJldHVybiAnLCcuam9pbiggbWFwKCBzdHIsIHNlbGYgKSApCj0yMAo9MjAKLWNsYXNzIERhdGFz ZXRDb2xsZWN0aW9uV3JhcHBlciggb2JqZWN0LCBIYXNEYXRhc2V0cyApOgorY2xhc3MgRGF0YXNl dENvbGxlY3Rpb25XcmFwcGVyKCBUb29sUGFyYW1ldGVyVmFsdWVXcmFwcGVyLCBIYXNEYXRhc2V0 cyApOgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGhhc19jb2xsZWN0aW9uLCBkYXRhc2V0 X3BhdGhzPTNEW10sICoqa3dhcmdzICk6CiAgICAgICAgIHN1cGVyKERhdGFzZXRDb2xsZWN0aW9u V3JhcHBlciwgc2VsZikuX19pbml0X18oKQoKZGlmZiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEz NmRiYTY1OTkyNDAzYzBhOWE1IC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyPQozMGYzMDgzYjNm MGZhZmNhMCBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2NvbnRyb2xsZXJzL3VzZXIucHkKLS0t IGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9sbGVycy91c2VyLnB5CisrKyBiL2xp Yi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMvdXNlci5weQpAQCAtMTE2Nyw4ICsx MTY3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCiAg ICAgICAgICAgICAgICAgICAgIHRyYW5zLmxvZ19ldmVudCggIlVzZXIgcmVzZXQgcGFzc3dvcmQ6 ICVzIiAlIGVtYWlsICkKICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAg ICAgICAgICAgICAgICAgICBzdGF0dXMgPTNEICdlcnJvcicKLSAgICAgICAgICAgICAgICAgICAg bWVzc2FnZSA9M0QgJ0ZhaWxlZCB0byByZXNldCBwYXNzd29yZDogJXMnICUgc3RyKCBlICkKICAg ICAgICAgICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbiggJ1VuYWJsZSB0byByZXNldCBwYXNzd29y ZC4nICkKICAgICAgICAgcmV0dXJuIHRyYW5zLmZpbGxfdGVtcGxhdGUoICcvdXNlci9yZXNldF9w YXNzd29yZC5tYWtvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh Z2U9M0RtZXNzYWdlLAoKZGlmZiAtciAzYmJlYTRmZmY5ZjIyYWYwNTY1ZTEzNmRiYTY1OTkyNDAz YzBhOWE1IC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyPQozMGYzMDgzYjNmMGZhZmNhMCB0ZW1w bGF0ZXMvdXNlci9jaGFuZ2VfcGFzc3dvcmQubWFrbwotLS0gYS90ZW1wbGF0ZXMvdXNlci9jaGFu Z2VfcGFzc3dvcmQubWFrbworKysgYi90ZW1wbGF0ZXMvdXNlci9jaGFuZ2VfcGFzc3dvcmQubWFr bwpAQCAtMTAsNyArMTAsNyBAQAogICAgICAgICA8ZGl2IGNsYXNzPTNEInRvb2xGb3JtVGl0bGUi PkNoYW5nZSBQYXNzd29yZDwvZGl2PgogICAgICAgICAlaWYgdG9rZW46CiAgICAgICAgICAgICA8 aW5wdXQgdHlwZT0zRCJoaWRkZW4iIG5hbWU9M0QidG9rZW4iIHZhbHVlPTNEIiR7dG9rZW58aH0i Lz4KLSAgICAgICAgJWVsaWYgbm90IGlzX2FkbWluOgorICAgICAgICAlZWxzZToKICAgICAgICAg ICAgIDxkaXYgY2xhc3M9M0QiZm9ybS1yb3ciPjxsYWJlbD5DdXJyZW50IHBhc3N3b3JkOjwvbGFi ZWw+PGlucHV0PQogdHlwZT0zRCJwYXNzd29yZCIgbmFtZT0zRCJjdXJyZW50IiB2YWx1ZT0zRCIi IHNpemU9M0QiNDAiLz4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50 cmFsL2NvbW1pdHMvMTQ3OTZhYzg2N2ViLwpDaGFuZ2VzZXQ6ICAgMTQ3OTZhYzg2N2ViClVzZXI6 ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAgICAyMDE1LTAxLTE0IDIyOjI2OjQxKzAw OjAwClN1bW1hcnk6ICAgICBSZW1vdmUgcmVsYXRpdmUgaW1wb3J0cyBpbiBtYW5hZ2VyczsgZmFj dG9yIG91dCBjaXJjdWxhciByZWYgaT0KbiBIREFNYW5hZ2VyIHVzaW5nIHNsaWdodCBjb2RlIGR1 cDsgRmlsbCBvdXQgZGVzZXJpYWxpemVycyBhbmQgcHJvdmRlIGdlbmVyPQppYyBtYW5hZ2VyIGZv ciBkZXNlcmlhbGl6ZXIgc3VwZXJjbGFzc2VzIGFuZCBtaXhpbnM7IEJ1ZyBodW50IHdpdGggZnVu Y3Rpb249CmFsL2Jyb3dzZXIgdGVzdHMKQWZmZWN0ZWQgIzogIDI1IGZpbGVzCgpkaWZmIC1yIDMx MzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3 ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IGxpYi9nYWxheHkvbWFuYWdlcnMvYW5ub3RhdGFi bGUucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9hbm5vdGF0YWJsZS5weQorKysgYi9saWIv Z2FsYXh5L21hbmFnZXJzL2Fubm90YXRhYmxlLnB5CkBAIC0zNyw3ICszNyw3IEBACiBjbGFzcyBB bm5vdGF0YWJsZURlc2VyaWFsaXplciggb2JqZWN0ICk6Cj0yMAogICAgIGRlZiBhZGRfZGVzZXJp YWxpemVycyggc2VsZiApOgotICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnNbICd0YWdzJyBdID0z RCBzZWxmLmRlc2VyaWFsaXplX2Fubm90YXRpb24KKyAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJz WyAnYW5ub3RhdGlvbicgXSA9M0Qgc2VsZi5kZXNlcmlhbGl6ZV9hbm5vdGF0aW9uCj0yMAogICAg IGRlZiBkZXNlcmlhbGl6ZV9hbm5vdGF0aW9uKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwg KToKICAgICAgICAgIiIiCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2Iz ZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IGxp Yi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2Uu cHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5CkBAIC01MjksMTQgKzUyOSwxMiBA QAogICAgICAgID0yMAogICAgICAgICAjIGEgbWFwIG9mIGRpY3Rpb25hcnkga2V5cyB0byB0aGUg ZnVuY3Rpb25zIChvZnRlbiBsYW1iZGFzKSB0aGF0IGM9CnJlYXRlIHRoZSB2YWx1ZXMgZm9yIHRo b3NlIGtleXMKICAgICAgICAgc2VsZi5zZXJpYWxpemVycyA9M0Qge30KLSAgICAgICAgIyBhZGQg c3ViY2xhc3Mgc2VyaWFsaXplcnMgZGVmaW5lZCB0aGVyZQotICAgICAgICBzZWxmLmFkZF9zZXJp YWxpemVycygpCiAgICAgICAgICMgYSBsaXN0IG9mIHZhbGlkIHNlcmlhbGl6YWJsZSBrZXlzIHRo YXQgY2FuIHVzZSB0aGUgZGVmYXVsdCAoc3RyaT0KbmcpIHNlcmlhbGl6ZXIKICAgICAgICAgIyAg IHRoaXMgYWxsb3dzIHVzIHRvOiAnbWVudGlvbicgdGhlIGtleSB3aXRob3V0IGFkZGluZyB0aGUg ZGVmYXVsPQp0IHNlcmlhbGl6ZXIKICAgICAgICAgI05PVEU6IGlmIGEga2V5IGlzIHJlcXVlc3Rl ZCB0aGF0IGlzIGluIG5laXRoZXIgc2VyaWFsaXphYmxlX2tleXMgPQpvciBzZXJpYWxpemVycywg aXQgaXMgbm90IHJldHVybmVkCi0gICAgICAgICNUT0RPOiByZW5hbWUgdG8gJ2tleXNfdXNpbmdf ZGVmYXVsdF9zZXJpYWxpemVyJwotICAgICAgICAjVE9ETzogb3IgKGFsdCkgYWxsb3cga2V5IGlu IHNlcmlhbGl6ZXJzIHdpdGggTm9uZSBhcyB2YWx1ZSAoaW5kaWM9CmF0aW5nIHVzZSBkZWZhdWx0 X3NlcmlhbGl6ZXIpCiAgICAgICAgIHNlbGYuc2VyaWFsaXphYmxlX2tleXMgPTNEIFtdCisgICAg ICAgICMgYWRkIHN1YmNsYXNzIHNlcmlhbGl6ZXJzIGRlZmluZWQgdGhlcmUKKyAgICAgICAgc2Vs Zi5hZGRfc2VyaWFsaXplcnMoKQo9MjAKICAgICAgICAgIyB2aWV3cyBhcmUgY29sbGVjdGlvbnMg b2Ygc2VyaWFsaXphYmxlIGF0dHJpYnV0ZXMgKGEgbmFtZWQgYXJyYXkgPQpvZiBrZXlzKQogICAg ICAgICAjICAgaW5zcGlyZWQgYnkgbW9kZWwuZGljdF97dmlld31fdmlzaWJsZV9rZXlzCkBAIC02 MzMsMTIgKzYzMSw3IEBACiAgICAgICAgICAgICB2aWV3ID0zRCBzZWxmLmRlZmF1bHRfdmlldwog ICAgICAgICBpZiB2aWV3IG5vdCBpbiBzZWxmLnZpZXdzOgogICAgICAgICAgICAgcmFpc2UgTW9k ZWxTZXJpYWxpemluZ0Vycm9yKCAndW5rbm93biB2aWV3Jywgdmlldz0zRHZpZXcsIGF2YWk9Cmxh YmxlX3ZpZXdzPTNEc2VsZi52aWV3cyApCi0gICAgICAgIHJldHVybiBzZWxmLnZpZXdzWyB2aWV3 IF0KLQotICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGFsaWFzZXMKLSAgICAjZGVmIHRvX2RpY3Qo IHNlbGYsIHRyYW5zLCBpdGVtLCB2aWV3PTNETm9uZSwgdmlld19rZXlzPTNETm9uZSApOgotICAg ICMgICAgdmlld19rZXlzID0zRCB2aWV3X2tleXMgb3Igc2VsZi52aWV3X3RvX2xpc3QoIHZpZXcg KQotICAgICMgICAgcmV0dXJuIHNlbGYuc2VyaWFsaXplKCB0cmFucywgaXRlbSwgdmlld19rZXlz ICkKKyAgICAgICAgcmV0dXJuIHNlbGYudmlld3NbIHZpZXcgXVs6XQo9MjAKPTIwCiAjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT0KLS0tLS0KQEAgLTY0Nyw3ICs2NDAsOCBAQAogICAgIEFuIG9iamVjdCB0aGF0 IGNvbnZlcnRzIGFuIGluY29taW5nIHNlcmlhbGl6ZWQgZGljdCBpbnRvIHZhbHVlcyB0aGF0IGM9 CmFuIGJlCiAgICAgZGlyZWN0bHkgYXNzaWduZWQgdG8gYW4gaXRlbSdzIGF0dHJpYnV0ZXMgYW5k IGFzc2lnbnMgdGhlbS4KICAgICAiIiIKLSAgICAjVE9ETzo/PyBJJ20gbm90IGNvbnZpbmNlcyB0 aGUgZm9sbG93aW5nIHR3byBuZWVkIHRvIGV4aXN0Li4uCisgICAgIzogdGhlIGNsYXNzIHVzZWQg dG8gY3JlYXRlIHRoaXMgZGVzZXJpYWxpemVyJ3MgZ2VuZXJpY2FsbHkgYWNjZXNzaWJsZT0KIG1v ZGVsX21hbmFnZXIKKyAgICBtb2RlbF9tYW5hZ2VyX2NsYXNzID0zRCBOb25lCj0yMAogICAgIGRl ZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgICIiIgpAQCAtNjU2LDEyICs2NTAsMTYg QEAKICAgICAgICAgc2VsZi5hcHAgPTNEIGFwcAo9MjAKICAgICAgICAgc2VsZi5kZXNlcmlhbGl6 ZXJzID0zRCB7fQorICAgICAgICBzZWxmLmRlc2VyaWFsaXphYmxlX2tleXMgPTNEIFtdCiAgICAg ICAgIHNlbGYuYWRkX2Rlc2VyaWFsaXplcnMoKQotICAgICAgICBzZWxmLmRlc2VyaWFsaXphYmxl X2tleXMgPTNEIFtdCiAgICAgICAgICMgYSBzdWIgb2JqZWN0IHRoYXQgY2FuIHZhbGlkYXRlIGlu Y29taW5nIHZhbHVlcwogICAgICAgICBzZWxmLnZhbGlkYXRlID0zRCBNb2RlbFZhbGlkYXRvcigg c2VsZi5hcHAgKQo9MjAKLSAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZXNlcmlhbGl6aW5nCisg ICAgICAgICMgY3JlYXRlIGEgZ2VuZXJpY2FsbHkgYWNjZXNzaWJsZSBtYW5hZ2VyIGZvciB0aGUg bW9kZWwgdGhpcyBkZXNlcj0KaWFsaXplciB3b3JrcyB3aXRoL2ZvcgorICAgICAgICBzZWxmLm1h bmFnZXIgPTNEIE5vbmUKKyAgICAgICAgaWYgc2VsZi5tb2RlbF9tYW5hZ2VyX2NsYXNzOgorICAg ICAgICAgICBzZWxmLm1hbmFnZXIgPTNEIHNlbGYubW9kZWxfbWFuYWdlcl9jbGFzcyggc2VsZi5h cHAgKQorCiAgICAgZGVmIGFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6CiAgICAgICAgICIiIgog ICAgICAgICBSZWdpc3RlciBhIG1hcCBvZiBhdHRyaWJ1dGUga2V5cyAtPiBmdW5jdGlvbnMgdGhh dCB3aWxsIGRlc2VyaWFsaXo9CmUgZGF0YQpAQCAtNzIyLDEwICs3MjAsNiBAQAogICAgICAgICB2 YWwgPTNEIHNlbGYudmFsaWRhdGUuZ2Vub21lX2J1aWxkKCB0cmFucywga2V5LCB2YWwgKQogICAg ICAgICByZXR1cm4gc2VsZi5kZWZhdWx0X2Rlc2VyaWFsaXplciggdHJhbnMsIGl0ZW0sIGtleSwg dmFsICkKPTIwCi0gICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gYWxpYXNlcwotICAgICNkZWYgZnJv bV9kaWN0KCBzZWxmLCB0cmFucywgaXRlbSwgZGF0YSApOgotICAgICMgICAgc2VsZi5kZXNlcmlh bGl6ZSggdHJhbnMsIGl0ZW0sIGRhdGEgKQotCj0yMAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0t CiAjVE9ETzo/PyBhIGxhcmdlciBxdWVzdGlvbiBpczogd2hpY2ggc2hvdWxkIGJlIGZpcnN0PyBE ZXNlcmlhbGl6ZSB0aGVuIHZhbD0KaWRhdGUgLSBvciAtIHZhbGlkYXRlIHRoZW4gZGVzZXJpYWxp emU/CkBAIC04MzcsMjcgKzgzMSwzMSBAQAogICAgICAgICByZXR1cm4gaXRlbQo9MjAKPTIwCitj bGFzcyBEZWxldGFibGVNb2RlbFNlcmlhbGl6ZXIoIG9iamVjdCApOgorCisgICAgZGVmIGFkZF9z ZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBwYXNzCisKKwogI1RPRE86IHRoZXNlIGFyZSBv ZiBxdWVzdGlvbmFibGUgdmFsdWUgaWYgd2UgZG9uJ3Qgd2FudCB0byBlbmFibGUgdXNlcnMgdG89 CiBkZWxldGUvcHVyZ2UgdmlhIHVwZGF0ZQogY2xhc3MgRGVsZXRhYmxlTW9kZWxEZXNlcmlhbGl6 ZXIoIG9iamVjdCApOgotICAgIHBhc3MKPTIwCi0gICAgI2RlZiBhZGRfZGVzZXJpYWxpemVycygg c2VsZiApOgotICAgICMgICAgIiIiCi0gICAgIyAgICAiIiIKLSAgICAjICAgIHNlbGYuZGVzZXJp YWxpemVyc1sgJ2RlbGV0ZWQnIF0gPTNEIHNlbGYuZGVzZXJpYWxpemVfZGVsZXRlZAotICAgICMK LSAgICAjZGVmIGRlc2VyaWFsaXplX2RlbGV0ZWQoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZh bCApOgotICAgICMgICAgIiIiCi0gICAgIyAgICAiIiIKLSAgICAjICAgIG5ld19kZWxldGVkID0z RCBzZWxmLnZhbGlkYXRlLmJvb2woIGtleSwgdmFsICkKLSAgICAjICAgIGlmIG5ld19kZWxldGVk ID0zRD0zRCBpdGVtLmRlbGV0ZWQ6Ci0gICAgIyAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAot ICAgICMgICAgI1RPRE86Pz8gZmx1c2g9M0RGYWxzZT8KLSAgICAjICAgIGlmIG5ld19kZWxldGVk OgotICAgICMgICAgICAgIHNlbGYubWdyLmRlbGV0ZSggdHJhbnMsIGl0ZW0gKQotICAgICMgICAg ZWxzZToKLSAgICAjICAgICAgICBzZWxmLm1nci51bmRlbGV0ZSggdHJhbnMsIGl0ZW0gKQotICAg ICMgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAorICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2Vs ZiApOgorICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnNbICdkZWxldGVkJyBdID0zRCBzZWxmLmRl c2VyaWFsaXplX2RlbGV0ZWQKKworICAgIGRlZiBkZXNlcmlhbGl6ZV9kZWxldGVkKCBzZWxmLCB0 cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgIERlbGV0ZSBvciB1 bmRlbGV0ZSBgaXRlbWAgYmFzZWQgb24gYHZhbGAgdGhlbiByZXR1cm4gYGl0ZW0uZGVsZXRlZD0K YC4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld19kZWxldGVkID0zRCBzZWxmLnZhbGlkYXRlLmJv b2woIGtleSwgdmFsICkKKyAgICAgICAgaWYgbmV3X2RlbGV0ZWQgPTNEPTNEIGl0ZW0uZGVsZXRl ZDoKKyAgICAgICAgICAgIHJldHVybiBpdGVtLmRlbGV0ZWQKKyAgICAgICAgI1RPRE86Pz8gZmx1 c2g9M0RGYWxzZT8KKyAgICAgICAgaWYgbmV3X2RlbGV0ZWQ6CisgICAgICAgICAgICBzZWxmLm1h bmFnZXIuZGVsZXRlKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIudW5kZWxldGUoIHRyYW5zLCBpdGVtLCBmbHVzaD0z REZhbHNlICkKKyAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAo9MjAKPTIwCiAjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLT0KLS0tLS0KQEAgLTg4MSwyMCArODc5LDIzIEBACiAgICAgICAgIHJldHVybiBpdGVt Cj0yMAo9MjAKLWNsYXNzIFB1cmdhYmxlTW9kZWxEZXNlcmlhbGl6ZXIoIERlbGV0YWJsZU1vZGVs RGVzZXJpYWxpemVyICk6CitjbGFzcyBQdXJnYWJsZU1vZGVsU2VyaWFsaXplciggRGVsZXRhYmxl TW9kZWxTZXJpYWxpemVyICk6CiAgICAgcGFzcwo9MjAKLSAgICAjZGVmIGFkZF9kZXNlcmlhbGl6 ZXJzKCBzZWxmICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgICIiIgotICAgICMgICAgc2VsZi5k ZXNlcmlhbGl6ZXJzWyAncHVyZ2VkJyBdID0zRCBzZWxmLmRlc2VyaWFsaXplX3B1cmdlZAotICAg ICMKLSAgICAjZGVmIGRlc2VyaWFsaXplX3B1cmdlZCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwg dmFsICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgICIiIgotICAgICMgICAgbmV3X3B1cmdlZCA9 M0Qgc2VsZi52YWxpZGF0ZS5ib29sKCBrZXksIHZhbCApCi0gICAgIyAgICBpZiBuZXdfcHVyZ2Vk ID0zRD0zRCBpdGVtLnB1cmdlZDoKLSAgICAjICAgICAgICByZXR1cm4gaXRlbS5wdXJnZWQKLSAg ICAjICAgIGlmIG5ld19wdXJnZWQ6Ci0gICAgIyAgICAgICAgc2VsZi5tZ3IucHVyZ2UoIHRyYW5z LCBpdGVtICkKLSAgICAjICAgIHJldHVybiBzZWxmLnB1cmdlZAorCitjbGFzcyBQdXJnYWJsZU1v ZGVsRGVzZXJpYWxpemVyKCBEZWxldGFibGVNb2RlbERlc2VyaWFsaXplciApOgorCisgICAgZGVm IGFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgIERlbGV0YWJsZU1vZGVsRGVzZXJp YWxpemVyLmFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICkKKyAgICAgICAgc2VsZi5kZXNlcmlhbGl6 ZXJzWyAncHVyZ2VkJyBdID0zRCBzZWxmLmRlc2VyaWFsaXplX3B1cmdlZAorCisgICAgZGVmIGRl c2VyaWFsaXplX3B1cmdlZCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAg ICIiIgorICAgICAgICBJZiBgdmFsYCBpcyBUcnVlLCBwdXJnZSBgaXRlbWAgYW5kIHJldHVybiBg aXRlbS5wdXJnZWRgLgorICAgICAgICAiIiIKKyAgICAgICAgbmV3X3B1cmdlZCA9M0Qgc2VsZi52 YWxpZGF0ZS5ib29sKCBrZXksIHZhbCApCisgICAgICAgIGlmIG5ld19wdXJnZWQgPTNEPTNEIGl0 ZW0ucHVyZ2VkOgorICAgICAgICAgICAgcmV0dXJuIGl0ZW0ucHVyZ2VkCisgICAgICAgIGlmIG5l d19wdXJnZWQ6CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIucHVyZ2UoIHRyYW5zLCBpdGVtLCBm bHVzaD0zREZhbHNlICkKKyAgICAgICAgcmV0dXJuIHNlbGYucHVyZ2VkCgpkaWZmIC1yIDMxMzU3 ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1 MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IGxpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkK LS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQorKysgYi9saWIvZ2FsYXh5L21h bmFnZXJzL2RhdGFzZXRzLnB5CkBAIC00LDggKzQsOCBAQAogZnJvbSBnYWxheHkgaW1wb3J0IG1v ZGVsCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwo9MjAKLWltcG9ydCBiYXNlCi1pbXBv cnQgdXNlcnMKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlCitmcm9tIGdhbGF4eS5t YW5hZ2VycyBpbXBvcnQgdXNlcnMKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0zRCBsb2dnaW5n LmdldExvZ2dlciggX19uYW1lX18gKQpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgIyAuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLj0KLi4uLi4gZGF0YSwgb2JqZWN0X3N0b3JlCj0yMAo9MjAKLSMgPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT0KLS0tLS0KIGNsYXNzIERhdGFzZXRTZXJpYWxpemVyKCBiYXNlLk1vZGVs U2VyaWFsaXplciApOgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgpAQCAtMjI3 LDkgKzIyNywxMyBAQAogICAgICAgICB9KQo9MjAKPTIwCi1jbGFzcyBEYXRhc2V0RGVzZXJpYWxp emVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyICk6Ci0gICAgcGFzcworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS09Ci0tLS0tCitjbGFzcyBEYXRhc2V0RGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxp emVyLCBiYXNlLlB1cmdhYmxlTW9kZWxEZXNlcj0KaWFsaXplciApOgorICAgIG1vZGVsX21hbmFn ZXJfY2xhc3MgPTNEIERhdGFzZXRNYW5hZ2VyCj0yMAorICAgIGRlZiBhZGRfZGVzZXJpYWxpemVy cyggc2VsZiApOgorICAgICAgICBzdXBlciggRGF0YXNldERlc2VyaWFsaXplciwgc2VsZiApLmFk ZF9kZXNlcmlhbGl6ZXJzKCkKKyAgICAgICAgYmFzZS5QdXJnYWJsZU1vZGVsRGVzZXJpYWxpemVy LmFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICkKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3MgRGF0YXNl dEFzc29jaWF0aW9uTWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2UuQWNjZXNzaWJsZU1v ZGVsSW49CnRlcmZhY2UsIGJhc2UuUHVyZ2FibGVNb2RlbEludGVyZmFjZSApOgpAQCAtMjM4LDcg KzI0Miw2IEBACiAgICAgIyBEQSdzIHdlcmUgbWVhbnQgdG8gYmUgcHJveGllcyAtIGJ1dCB3ZXJl IG5ldmVyIGZ1bGx5IGltcGxlbWVudGVkIGFzID0KdGhlbQogICAgICMgSW5zdGVhZCwgYSBkYXRh c2V0IGFzc29jaWF0aW9uIEhBUyBhIGRhdGFzZXQgYnV0IGNvbnRhaW5zIG1ldGFkYXRhIHM9CnBl Y2lmaWMgdG8gYSBsaWJyYXJ5IChsZGEpIG9yIHVzZXIgKGhkYSkKICAgICBtb2RlbF9jbGFzcyA9 M0QgbW9kZWwuRGF0YXNldEluc3RhbmNlCi0gICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2Rl bC5EYXRhc2V0LmNyZWF0ZV90aW1lLCApCj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBw ICk6CiAgICAgICAgIHN1cGVyKCBEYXRhc2V0QXNzb2NpYXRpb25NYW5hZ2VyLCBzZWxmICkuX19p bml0X18oIGFwcCApCkBAIC0yNjMsMyArMjY2LDIxIEBACiAgICAgIyAgICAiIiIKICAgICAjICAg ICNUT0RPOiBjaGVjayBoaXN0b3J5X2Fzc29jaWF0aW9ucywgbGlicmFyeV9hc3NvY2lhdGlvbnMK ICAgICAjICAgIHBhc3MKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0KK2NsYXNzIERhdGFz ZXRBc3NvY2lhdGlvblNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyICk6CisKKyAgICBk ZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgorICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0 aW9uU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorCisgICAgZGVmIGFkZF9zZXJp YWxpemVycyggc2VsZiApOgorICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uU2VyaWFs aXplciwgc2VsZiApLmFkZF9zZXJpYWxpemVycygpCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0t LS0tCitjbGFzcyBEYXRhc2V0QXNzb2NpYXRpb25EZXNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxEZXNl cmlhbGl6ZXIsIGJhc2UuUHVyZ2FibD0KZU1vZGVsRGVzZXJpYWxpemVyICk6CisKKyAgICBkZWYg YWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgc3VwZXIoIERhdGFzZXRBc3NvY2lh dGlvbkRlc2VyaWFsaXplciwgc2VsZiApLmFkZF9kZXNlcmlhbGl6ZXJzKCkKKyAgICAgICAgYmFz ZS5QdXJnYWJsZU1vZGVsRGVzZXJpYWxpemVyLmFkZF9kZXNlcmlhbGl6ZXJzKCBzZWxmICkKCmRp ZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFj ODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBjOWI4NjhiYjcgbGliL2dhbGF4eS9tYW5hZ2Vycy9o ZGFzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2FsYXh5 L21hbmFnZXJzL2hkYXMucHkKQEAgLTExLDE3ICsxMSwxNSBAQAogZnJvbSBnYWxheHkgaW1wb3J0 IG1vZGVsCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwogZnJvbSBnYWxheHkgaW1wb3J0 IGRhdGF0eXBlcwotCi1pbXBvcnQgYmFzZQotaW1wb3J0IHRhZ2dhYmxlCi1pbXBvcnQgYW5ub3Rh dGFibGUKLWltcG9ydCBoaXN0b3JpZXMKLWltcG9ydCBkYXRhc2V0cwotCiBpbXBvcnQgZ2FsYXh5 LndlYgogaW1wb3J0IGdhbGF4eS5kYXRhdHlwZXMubWV0YWRhdGEKIGZyb20gZ2FsYXh5IGltcG9y dCBvYmplY3RzdG9yZQo9MjAKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBkYXRhc2V0cwor ZnJvbSBnYWxheHkubWFuYWdlcnMgaW1wb3J0IGJhc2UKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGlt cG9ydCB0YWdnYWJsZQorZnJvbSBnYWxheHkubWFuYWdlcnMgaW1wb3J0IGFubm90YXRhYmxlCitm cm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgdXNlcnMKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3Mg SERBTWFuYWdlciggZGF0YXNldHMuRGF0YXNldEFzc29jaWF0aW9uTWFuYWdlciwgYmFzZS5Pd25h YmxlTW9kZWxJbnQ9CmVyZmFjZSwKQEAgLTQ0LDYgKzQyLDcgQEAKICAgICAgICAgU2V0IHVwIGFu ZCBpbml0aWFsaXplIG90aGVyIG1hbmFnZXJzIG5lZWRlZCBieSBoZGFzLgogICAgICAgICAiIiIK ICAgICAgICAgc3VwZXIoIEhEQU1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKKyAgICAg ICAgc2VsZi51c2VyX21hbmFnZXIgPTNEIHVzZXJzLlVzZXJNYW5hZ2VyKCBhcHAgKQo9MjAKICAg ICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uPQouLi4uLiBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMKICAgICBkZWYg aXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGhkYSwgdXNlciApOgpAQCAtNTgsOCArNTcsMTMg QEAKICAgICAgICAgIiIiCiAgICAgICAgIFVzZSBoaXN0b3J5IHRvIHNlZSBpZiBjdXJyZW50IHVz ZXIgb3ducyBIREEuCiAgICAgICAgICIiIgotICAgICAgICAjVE9ETzogdGhpcyBtYXkgYmUgc2xv dyBkdWUgdG8gSGlzdG9yeU1hbmFnZXIgaW5zdGFudGlhdGlvbiBhbmQgcG89CnNzaWJsZSAybmQg dHJhbnNhY3Rpb24gdG8gZ2V0IHRoZSBoZGEuaGlzdG9yeQotICAgICAgICByZXR1cm4gaGlzdG9y aWVzLkhpc3RvcnlNYW5hZ2VyKCBzZWxmLmFwcCApLmlzX293bmVyKCB0cmFucywgaGRhLmg9Cmlz dG9yeSwgdXNlciApCisgICAgICAgIGhpc3RvcnkgPTNEIGhkYS5oaXN0b3J5CisgICAgICAgICNU T0RPOiBzb21lIGR1cCBoZXJlIHdpdGggaGlzdG9yeU1hbmFnZXIuaXNfb3duZXIgYnV0IHByZXZl bnRzIGNpcj0KYyBpbXBvcnQKKyAgICAgICAgaWYgc2VsZi51c2VyX21hbmFnZXIuaXNfYWRtaW4o IHRyYW5zLCB1c2VyICk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxm LnVzZXJfbWFuYWdlci5pc19hbm9ueW1vdXMoIHVzZXIgKSBhbmQgaGlzdG9yeSA9M0Q9M0QgdHJh bnM9Ci5nZXRfaGlzdG9yeSgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0 dXJuIGhpc3RvcnkudXNlciA9M0Q9M0QgdXNlcgo9MjAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4u LiBjcmVhdGUgYW5kIGNvcHkKICAgICBkZWYgY3JlYXRlKCBzZWxmLCB0cmFucywgaGlzdG9yeT0z RE5vbmUsIGRhdGFzZXQ9M0ROb25lLCBmbHVzaD0zRFRydWUsPQogKiprd2FyZ3MgKToKQEAgLTMw Miw3ICszMDYsNyBAQAo9MjAKPTIwCiAjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xhc3MgSERBU2VyaWFsaXplcigg YmFzZS5Nb2RlbFNlcmlhbGl6ZXIsCitjbGFzcyBIREFTZXJpYWxpemVyKCBkYXRhc2V0cy5EYXRh c2V0QXNzb2NpYXRpb25TZXJpYWxpemVyLAogICAgICAgICB0YWdnYWJsZS5UYWdnYWJsZVNlcmlh bGl6ZXIsIGFubm90YXRhYmxlLkFubm90YXRhYmxlU2VyaWFsaXplciApOgogICAgICNUT0RPOiBp bmhlcml0IGZyb20gZGF0YXNldHMuRGF0YXNldEFzc29jaWF0aW9uU2VyaWFsaXplcgogICAgICNU T0RPOiBtb3ZlIHdoYXQgbWFrZXMgc2Vuc2UgaW50byBEYXRhc2V0U2VyaWFsaXplcgpAQCAtMzE0 LDggKzMxOCwxMCBAQAogICAgICAgICAjIG1vc3Qgb2YgdGhlc2Ugdmlld3MgYnVpbGQvYWRkIHRv IHRoZSBwcmV2aW91cyB2aWV3CiAgICAgICAgIHN1bW1hcnlfdmlldyA9M0QgWwogICAgICAgICAg ICAgJ2lkJywgJ25hbWUnLAotICAgICAgICAgICAgJ2hpc3RvcnlfaWQnLCAnaGlkJywgJ2hpc3Rv cnlfY29udGVudF90eXBlJywKLSAgICAgICAgICAgICMnZGF0YXNldF9pZCcsCisgICAgICAgICAg ICAnaGlzdG9yeV9pZCcsICdoaWQnLAorICAgICAgICAgICAgIyB3aHkgaW5jbHVkZSBpZiBtb2Rl bF9jbGFzcyBpcyB0aGVyZT8KKyAgICAgICAgICAgICdoaXN0b3J5X2NvbnRlbnRfdHlwZScsCisg ICAgICAgICAgICAnZGF0YXNldF9pZCcsCiAgICAgICAgICAgICAnc3RhdGUnLCAnZXh0ZW5zaW9u JywKICAgICAgICAgICAgICdkZWxldGVkJywgJ3B1cmdlZCcsICd2aXNpYmxlJywgJ3Jlc3VibWl0 dGVkJywKICAgICAgICAgICAgICd0eXBlJywgJ3VybCcKQEAgLTMyNCwxNSArMzMwLDEzIEBACiAg ICAgICAgICAgICAnaWQnLCAnbmFtZScsICdoaXN0b3J5X2lkJywgJ2hpZCcsICdoaXN0b3J5X2Nv bnRlbnRfdHlwZScsCiAgICAgICAgICAgICAnc3RhdGUnLCAnZGVsZXRlZCcsICd2aXNpYmxlJwog ICAgICAgICBdCi0gICAgICAgIGRldGFpbGVkX3ZpZXcgPTNEIFsKLSAgICAgICAgICAgICdpZCcs ICduYW1lJywgJ21vZGVsX2NsYXNzJywKKyAgICAgICAgZGV0YWlsZWRfdmlldyA9M0Qgc3VtbWFy eV92aWV3ICsgWworICAgICAgICAgICAgJ21vZGVsX2NsYXNzJywKICAgICAgICAgICAgICdoaXN0 b3J5X2lkJywgJ2hpZCcsCiAgICAgICAgICAgICAjIHdoeSBpbmNsdWRlIGlmIG1vZGVsX2NsYXNz IGlzIHRoZXJlPwotICAgICAgICAgICAgJ2hkYV9sZGRhJywgJ2hpc3RvcnlfY29udGVudF90eXBl JywKLSAgICAgICAgICAgICdzdGF0ZScsCisgICAgICAgICAgICAnaGRhX2xkZGEnLAogICAgICAg ICAgICAgI1RPRE86IGFjY2Vzc2libGUgbmVlZHMgdG8gZ28gYXdheQogICAgICAgICAgICAgJ2Fj Y2Vzc2libGUnLAotICAgICAgICAgICAgJ2RlbGV0ZWQnLCAncHVyZ2VkJywgJ3Zpc2libGUnLCAn cmVzdWJtaXR0ZWQnLAo9MjAKICAgICAgICAgICAgICMgcmVtYXBwZWQKICAgICAgICAgICAgICdn ZW5vbWVfYnVpbGQnLCAnbWlzY19pbmZvJywgJ21pc2NfYmx1cmInLApAQCAtMzU1LDE1ICszNTks MTEgQEAKICAgICAgICAgICAgICMndXJsJywKICAgICAgICAgICAgICdkb3dubG9hZF91cmwnLAo9 MjAKLSAgICAgICAgICAgICNtaXhpbjogYW5ub3RhdGFibGUKLSAgICAgICAgICAgICdhbm5vdGF0 aW9uJywKLSAgICAgICAgICAgICNtaXhpbjogdGFnZ2FibGUKLSAgICAgICAgICAgICd0YWdzJywK KyAgICAgICAgICAgICdhbm5vdGF0aW9uJywgJ3RhZ3MnLAo9MjAKICAgICAgICAgICAgICdhcGlf dHlwZScKICAgICAgICAgXQogICAgICAgICBleHRlbmRlZF92aWV3ID0zRCBkZXRhaWxlZF92aWV3 ICsgWwotICAgICAgICAgICAgI05PVEU6IHNlbmRpbmcgcmF3ICdwZWVrJyAobm90IGdldF9kaXNw bGF5X3BlZWspCiAgICAgICAgICAgICAndG9vbF92ZXJzaW9uJywgJ3BhcmVudF9pZCcsICdkZXNp Z25hdGlvbicsCiAgICAgICAgIF0KPTIwCkBAIC00NTIsMTQgKzQ1MiwxNSBAQAogICAgICAgICBP dmVycmlkZSB0byBhZGQgbWV0YWRhdGEgYXMgZmxhdHRlbmVkIGtleXMgb24gdGhlIHNlcmlhbGl6 ZWQgSERBLgogICAgICAgICAiIiIKICAgICAgICAgIyBpZiAnbWV0YWRhdGEnIGlzbid0IHJlbW92 ZWQgZnJvbSBrZXlzIGhlcmUgc2VyaWFsaXplIHdpbGwgcmV0cmllPQp2ZSB0aGUgdW4tc2VyaWFs aXphYmxlIE1ldGFkYXRhQ29sbGVjdGlvbgotICAgICAgICAjVE9ETzogcmVtb3ZlIHRoZXNlIHdo ZW4gbWV0YWRhdGEgaXMgc3ViLW9iamVjdAorI1RPRE86IHJlbW92ZSB0aGVzZSB3aGVuIG1ldGFk YXRhIGlzIHN1Yi1vYmplY3QKICAgICAgICAgS0VZU19IQU5ETEVEX1NFUEFSQVRFTFkgPTNEICgg J21ldGFkYXRhJywgKQogICAgICAgICBsZWZ0X3RvX2hhbmRsZSA9M0Qgc2VsZi5wbHVja19mcm9t X2xpc3QoIGtleXMsIEtFWVNfSEFORExFRF9TRVBBUkE9ClRFTFkgKQogICAgICAgICBzZXJpYWxp emVkID0zRCBzdXBlciggSERBU2VyaWFsaXplciwgc2VsZiApLnNlcmlhbGl6ZSggdHJhbnMsIGhk YSw9CiBrZXlzICkKPTIwCiAgICAgICAgIGlmICdtZXRhZGF0YScgaW4gbGVmdF90b19oYW5kbGU6 CiAgICAgICAgICAgICAjIHdlIGN1cnJlbnRseSBhZGQgbWV0YWRhdGEgZGlyZWN0bHkgdG8gdGhl IGRpY3QgaW5zdGVhZCBvZiBhcz0KIGEgc3ViLW9iamVjdAotICAgICAgICAgICAgc2VyaWFsaXpl ZC51cGRhdGUoIHNlbGYucHJlZml4ZWRfbWV0YWRhdGEoIHRyYW5zLCBoZGEgKSApCisgICAgICAg ICAgICBtZXRhZGF0YSA9M0Qgc2VsZi5wcmVmaXhlZF9tZXRhZGF0YSggdHJhbnMsIGhkYSApCisg ICAgICAgICAgICBzZXJpYWxpemVkLnVwZGF0ZSggbWV0YWRhdGEgKQogICAgICAgICByZXR1cm4g c2VyaWFsaXplZAo9MjAKICAgICAjVE9ETzogdGhpcyBpcyBtb3JlIHV0aWwvZ2VuLiB1c2UKQEAg LTU2NiwxNSArNTY3LDE2IEBACj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFzcyBIREFEZXNlcmlh bGl6ZXIoIGJhc2UuTW9kZWxEZXNlcmlhbGl6ZXIsCitjbGFzcyBIREFEZXNlcmlhbGl6ZXIoIGRh dGFzZXRzLkRhdGFzZXRBc3NvY2lhdGlvbkRlc2VyaWFsaXplciwKICAgICAgICAgdGFnZ2FibGUu VGFnZ2FibGVEZXNlcmlhbGl6ZXIsIGFubm90YXRhYmxlLkFubm90YXRhYmxlRGVzZXJpYWxpemVy PQogKToKICAgICAiIiIKICAgICBJbnRlcmZhY2Uvc2VydmljZSBvYmplY3QgZm9yIHZhbGlkYXRp bmcgYW5kIGRlc2VyaWFsaXppbmcgZGljdGlvbmFyaWVzPQogaW50byBoaXN0b3JpZXMuCiAgICAg IiIiCisgICAgbW9kZWxfbWFuYWdlcl9jbGFzcyA9M0QgSERBTWFuYWdlcgo9MjAKICAgICBkZWYg X19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlciggSERBRGVzZXJpYWxpemVyLCBz ZWxmICkuX19pbml0X18oIGFwcCApCi0gICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIEhEQU1h bmFnZXIoIGFwcCApCisgICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIHNlbGYubWFuYWdlcgo9 MjAKICAgICAjYXNzdW1lczogaW5jb21pbmcgZnJvbSBqc29uLmxvYWRzIGFuZCBzYW5pdGl6ZWQK ICAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKCmRpZmYgLXIgMzEzNTdlZGYyNjBl YTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0K YTFlYzgyNTBjOWI4NjhiYjcgbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKLS0tIGEv bGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vy cy9oaXN0b3JpZXMucHkKQEAgLTgsMTIgKzgsMTEgQEAKIGZyb20gZ2FsYXh5IGltcG9ydCBleGNl cHRpb25zCiBmcm9tIGdhbGF4eSBpbXBvcnQgbW9kZWwKPTIwCi1pbXBvcnQgYmFzZQotaW1wb3J0 IHNoYXJhYmxlCi1pbXBvcnQgaGRhcwotaW1wb3J0IGNvbGxlY3Rpb25zX3V0aWwKK2ltcG9ydCBn YWxheHkud2ViCj0yMAotaW1wb3J0IGdhbGF4eS53ZWIKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGlt cG9ydCBiYXNlCitmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgc2hhcmFibGUKK2Zyb20gZ2Fs YXh5Lm1hbmFnZXJzIGltcG9ydCBoZGFzCj0yMAogaW1wb3J0IGxvZ2dpbmcKIGxvZyA9M0QgbG9n Z2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKQEAgLTM1LDYgKzM0LDcgQEAKPTIwCiAgICAgZGVm IF9faW5pdF9fKCBzZWxmLCBhcHAsICphcmdzLCAqKmt3YXJncyApOgogICAgICAgICBzdXBlcigg SGlzdG9yeU1hbmFnZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwLCAqYXJncywgKiprd2FyZ3MgKQor CiAgICAgICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIGhkYXMuSERBTWFuYWdlciggYXBwICkKPTIw CiAgICAgZGVmIGNvcHkoIHNlbGYsIHRyYW5zLCBoaXN0b3J5LCB1c2VyLCAqKmt3YXJncyApOgpA QCAtNTEsNyArNTEsNyBAQAogICAgICAgICBpZiBub3QgdXNlcjoKICAgICAgICAgICAgIHJldHVy biBOb25lIGlmIHRyYW5zLmhpc3RvcnkuZGVsZXRlZCBlbHNlIHRyYW5zLmhpc3RvcnkKICAgICAg ICAgZGVzY191cGRhdGVfdGltZSA9M0Qgc2VsZi5tb2RlbF9jbGFzcy50YWJsZS5jLnVwZGF0ZV90 aW1lCi0gICAgICAgIHJldHVybiBzZWxmLmJ5X3VzZXIoIHRyYW5zLCB1c2VyLCBvcmRlcl9ieT0z RGRlc2NfdXBkYXRlX3RpbWUsIGxpbT0KaXQ9M0QxLCAqKmt3YXJncyApCisgICAgICAgIHJldHVy biBzZWxmLl9xdWVyeV9ieV91c2VyKCB0cmFucywgdXNlciwgb3JkZXJfYnk9M0RkZXNjX3VwZGF0 ZV90aT0KbWUsIGxpbWl0PTNEMSwgKiprd2FyZ3MgKS5maXJzdCgpCj0yMAogICAgICMgLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi49Ci4uLi4uIHNoYXJhYmxlCiAgICAgIyBvdmVycmlkaW5nIHRvIGhhbmRsZSBhbm9ueW1v dXMgdXNlcnMnIGN1cnJlbnQgaGlzdG9yaWVzIGluIGJvdGggY2FzZXMKQEAgLTEyNCw3ICsxMjQs NyBAQAogICAgICAgICAjVE9ETzogaW5zdGFudGlhdGUgaGVyZT8gcmVhbGx5PwogICAgICAgICBo aXN0b3J5X3NlcmlhbGl6ZXIgPTNEIEhpc3RvcnlTZXJpYWxpemVyKCBzZWxmLmFwcCApCiAgICAg ICAgIGhkYV9zZXJpYWxpemVyID0zRCBoZGFzLkhEQVNlcmlhbGl6ZXIoIHNlbGYuYXBwICkKLSAg ICAgICAgY29sbGVjdGlvbl9kaWN0aWZpZXIgPTNEIGNvbGxlY3Rpb25zX3V0aWwuZGljdGlmeV9k YXRhc2V0X2NvbGxlY3RpPQpvbl9pbnN0YW5jZQorICAgICAgICBjb2xsZWN0aW9uX2RpY3RpZmll ciA9M0QgbWFuYWdlcnMuY29sbGVjdGlvbnNfdXRpbC5kaWN0aWZ5X2RhdGFzZXQ9Cl9jb2xsZWN0 aW9uX2luc3RhbmNlCj0yMAogICAgICAgICBoaXN0b3J5X2RpY3Rpb25hcnkgPTNEIHt9CiAgICAg ICAgIGNvbnRlbnRzX2RpY3Rpb25hcmllcyA9M0QgW10KQEAgLTI0MiwxNCArMjQyLDE3IEBACj0y MAo9MjAKICMjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9Cj0zRD0zRD0zRD0zRAotY2xhc3MgSGlzdG9yeVNlcmlhbGl6ZXIoIHNoYXJhYmxlLlNo YXJhYmxlTW9kZWxTZXJpYWxpemVyICk6CitjbGFzcyBIaXN0b3J5U2VyaWFsaXplciggc2hhcmFi bGUuU2hhcmFibGVNb2RlbFNlcmlhbGl6ZXIsIGJhc2UuUHVyZ2FibGVNbz0KZGVsU2VyaWFsaXpl ciApOgogICAgICIiIgogICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3Igc2VyaWFsaXpp bmcgaGlzdG9yaWVzIGludG8gZGljdGlvbmFyaWVzLgogICAgICIiIgorICAgIFNJTkdMRV9DSEFS X0FCQlIgPTNEICdoJwo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAg ICBzdXBlciggSGlzdG9yeVNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKICAgICAg ICAgc2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIEhpc3RvcnlNYW5hZ2VyKCBhcHAgKQorCisgICAg ICAgIGZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBoZGFzCiAgICAgICAgIHNlbGYuaGRhX21h bmFnZXIgPTNEIGhkYXMuSERBTWFuYWdlciggYXBwICkKICAgICAgICAgc2VsZi5oZGFfc2VyaWFs aXplciA9M0QgaGRhcy5IREFTZXJpYWxpemVyKCBhcHAgKQo9MjAKQEAgLTI1NywxMiArMjYwLDE0 IEBACiAgICAgICAgICAgICAnaWQnLAogICAgICAgICAgICAgJ21vZGVsX2NsYXNzJywKICAgICAg ICAgICAgICduYW1lJywKLSAgICAgICAgICAgICdkZWxldGVkJywgJ3B1cmdlZCcsCisgICAgICAg ICAgICAnZGVsZXRlZCcsCisgICAgICAgICAgICAjJ3B1cmdlZCcsCisgICAgICAgICAgICAjJ2Nv dW50JworICAgICAgICAgICAgJ3VybCcsCisgICAgICAgICAgICAjVE9ETzogd2h5IHRoZXNlPwog ICAgICAgICAgICAgJ3B1Ymxpc2hlZCcsCi0gICAgICAgICAgICAjJ2NvdW50JwogICAgICAgICAg ICAgJ2Fubm90YXRpb24nLAogICAgICAgICAgICAgJ3RhZ3MnLAotICAgICAgICAgICAgJ3VybCcK ICAgICAgICAgXQogICAgICAgICAjIGluIHRoZSBIaXN0b3J5cycgY2FzZSwgZWFjaCBvZiB0aGVz ZSB2aWV3cyBpbmNsdWRlcyB0aGUga2V5cyBmcm89Cm0gdGhlIHByZXZpb3VzCiAgICAgICAgIGRl dGFpbGVkX3ZpZXcgPTNEIHN1bW1hcnlfdmlldyArIFsKQEAgLTI3Miw5ICsyNzcsOCBAQAogICAg ICAgICAgICAgJ3NpemUnLCAnbmljZV9zaXplJywKICAgICAgICAgICAgICd1c2VyX2lkJywKICAg ICAgICAgICAgICdjcmVhdGVfdGltZScsICd1cGRhdGVfdGltZScsCi0gICAgICAgICAgICAnaW1w b3J0YWJsZScsICdzbHVnJywKKyAgICAgICAgICAgICdpbXBvcnRhYmxlJywgJ3NsdWcnLCAndXNl cm5hbWVfYW5kX3NsdWcnLAogICAgICAgICAgICAgJ2dlbm9tZV9idWlsZCcsCi0gICAgICAgICAg ICAjdXNlcm5hbWVfYW5kX3NsdWcgPTNEICggJy8nICkuam9pbigoICd1JywgaGlzdG9yeS51c2Vy LnVzZXJuYT0KbWUsICdoJywgaGlzdG9yeV9kaWN0WyAnc2x1ZycgXSApKQogICAgICAgICAgICAg I1RPRE86IHJlbW92ZSB0aGUgbmV4dCB0aHJlZSAtIGluc3RlYWQgZ2V0dGluZyB0aGUgc2FtZSBp bmZvIGY9CnJvbSB0aGUgJ2hkYXMnIGxpc3QKICAgICAgICAgICAgICdzdGF0ZScsCiAgICAgICAg ICAgICAnc3RhdGVfZGV0YWlscycsCkBAIC0yOTMsMTMgKzI5NywxNCBAQAogICAgICNhc3N1bWVz OiBvdXRnb2luZyB0byBqc29uLmR1bXBzIGFuZCBzYW5pdGl6ZWQKICAgICBkZWYgYWRkX3Nlcmlh bGl6ZXJzKCBzZWxmICk6CiAgICAgICAgIHN1cGVyKCBIaXN0b3J5U2VyaWFsaXplciwgc2VsZiAp LmFkZF9zZXJpYWxpemVycygpCisgICAgICAgIGJhc2UuUHVyZ2FibGVNb2RlbFNlcmlhbGl6ZXIu YWRkX3NlcmlhbGl6ZXJzKCBzZWxmICkKKwogICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0 ZSh7CiAgICAgICAgICAgICAnbW9kZWxfY2xhc3MnICAgOiBsYW1iZGEgKmE6ICdIaXN0b3J5JywK ICAgICAgICAgICAgICdpZCcgICAgICAgICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAogICAgICAg ICAgICAgJ2NvdW50JyAgICAgICAgIDogbGFtYmRhIHRyYW5zLCBpdGVtLCBrZXk6IGxlbiggaXRl bS5kYXRhc2V0cyA9CiksCiAgICAgICAgICAgICAnY3JlYXRlX3RpbWUnICAgOiBzZWxmLnNlcmlh bGl6ZV9kYXRlLAogICAgICAgICAgICAgJ3VwZGF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVf ZGF0ZSwKLSAgICAgICAgICAgICd1c2VyX2lkJyAgICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAog ICAgICAgICAgICAgJ3NpemUnICAgICAgICAgIDogbGFtYmRhIHQsIGksIGs6IGludCggaS5nZXRf ZGlza19zaXplKCkgKSwKICAgICAgICAgICAgICduaWNlX3NpemUnICAgICA6IGxhbWJkYSB0LCBp LCBrOiBpLmdldF9kaXNrX3NpemUoIG5pY2Vfc2l6ZT0KPTNEVHJ1ZSApLAo9MjAKQEAgLTMzNiwy NiArMzQxLDIyIEBACj0yMAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECi1jbGFzcyBIaXN0b3J5RGVzZXJpYWxp emVyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsRGVzZXJpYWxpemVyICk6CitjbGFzcyBIaXN0b3J5 RGVzZXJpYWxpemVyKCBzaGFyYWJsZS5TaGFyYWJsZU1vZGVsRGVzZXJpYWxpemVyLCBiYXNlLlB1 cmdhYj0KbGVNb2RlbERlc2VyaWFsaXplciApOgogICAgICIiIgogICAgIEludGVyZmFjZS9zZXJ2 aWNlIG9iamVjdCBmb3IgdmFsaWRhdGluZyBhbmQgZGVzZXJpYWxpemluZyBkaWN0aW9uYXJpZXM9 CiBpbnRvIGhpc3Rvcmllcy4KICAgICAiIiIKKyAgICBtb2RlbF9tYW5hZ2VyX2NsYXNzID0zRCBI aXN0b3J5TWFuYWdlcgo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAg ICBzdXBlciggSGlzdG9yeURlc2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotICAg ICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlciA9M0QgSGlzdG9yeU1hbmFnZXIoIGFwcCApCisgICAg ICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyID0zRCBzZWxmLm1hbmFnZXIKPTIwCiAgICAgI2Fzc3Vt ZXM6IGluY29taW5nIGZyb20ganNvbi5sb2FkcyBhbmQgc2FuaXRpemVkCiAgICAgZGVmIGFkZF9k ZXNlcmlhbGl6ZXJzKCBzZWxmICk6CiAgICAgICAgIHN1cGVyKCBIaXN0b3J5RGVzZXJpYWxpemVy LCBzZWxmICkuYWRkX2Rlc2VyaWFsaXplcnMoKQorICAgICAgICBiYXNlLlB1cmdhYmxlTW9kZWxE ZXNlcmlhbGl6ZXIuYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKQorCiAgICAgICAgIHNlbGYuZGVz ZXJpYWxpemVycy51cGRhdGUoewogICAgICAgICAgICAgJ25hbWUnICAgICAgICAgIDogc2VsZi5k ZXNlcmlhbGl6ZV9iYXNlc3RyaW5nLAogICAgICAgICAgICAgJ2dlbm9tZV9idWlsZCcgIDogc2Vs Zi5kZXNlcmlhbGl6ZV9nZW5vbWVfYnVpbGQsCi0KLSAgICAgICAgICAgICMgbWl4aW46IGRlbGV0 YWJsZQotICAgICAgICAgICAgJ2RlbGV0ZWQnICAgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9ib29s LAotICAgICAgICAgICAgIyBzaGFyYWJsZQotICAgICAgICAgICAgJ3B1Ymxpc2hlZCcgICAgIDog c2VsZi5kZXNlcmlhbGl6ZV9ib29sLAotICAgICAgICAgICAgJ2ltcG9ydGFibGUnICAgIDogc2Vs Zi5kZXNlcmlhbGl6ZV9ib29sLAogICAgICAgICB9KQotICAgICAgICBzZWxmLmRlc2VyaWFsaXph YmxlX2tleXMgPTNEIHNlbGYuZGVzZXJpYWxpemVycy5rZXlzKCkKCmRpZmYgLXIgMzEzNTdlZGYy NjBlYTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2Vl ZD0KYTFlYzgyNTBjOWI4NjhiYjcgbGliL2dhbGF4eS9tYW5hZ2Vycy9sZGRhcy5weQotLS0gYS9s aWIvZ2FsYXh5L21hbmFnZXJzL2xkZGFzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvbGRk YXMucHkKQEAgLTEsOCArMSw5IEBACi1mcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgYmFzZSBh cyBtYW5hZ2VyX2Jhc2UKKyNmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgYmFzZSBhcyBtYW5h Z2VyX2Jhc2UKPTIwCj0yMAotY2xhc3MgTEREQU1hbmFnZXIoIG1hbmFnZXJfYmFzZS5Nb2RlbE1h bmFnZXIgKToKLSAgICAiIiIgQSBmYWlybHkgc3BhcnNlIG1hbmFnZXIgZm9yIExEREFzLgorY2xh c3MgTEREQU1hbmFnZXIoIG9iamVjdCApOgorICAgICIiIgorICAgIEEgZmFpcmx5IHNwYXJzZSBt YW5hZ2VyIGZvciBMRERBcy4KICAgICAiIiIKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBh cHAgKToKCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAt ciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBjOWI4NjhiYjcgbGliL2dhbGF4eS9t YW5hZ2Vycy9wYWdlcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3BhZ2VzLnB5CisrKyBi L2xpYi9nYWxheHkvbWFuYWdlcnMvcGFnZXMucHkKQEAgLTgsMTEgKzgsMTAgQEAKPTIwCiBmcm9t IGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwogZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCitpbXBv cnQgZ2FsYXh5LndlYgo9MjAKLWltcG9ydCBiYXNlCi1pbXBvcnQgc2hhcmFibGUKLQotaW1wb3J0 IGdhbGF4eS53ZWIKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlCitmcm9tIGdhbGF4 eS5tYW5hZ2VycyBpbXBvcnQgc2hhcmFibGUKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0zRCBs b2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQpAQCAtNzcsMTAgKzc2LDExIEBACiAgICAgSW50 ZXJmYWNlL3NlcnZpY2Ugb2JqZWN0IGZvciB2YWxpZGF0aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRp Y3Rpb25hcmllcwogICAgIGludG8gcGFnZXMuCiAgICAgIiIiCisgICAgbW9kZWxfbWFuYWdlcl9j bGFzcyA9M0QgUGFnZU1hbmFnZXIKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToK ICAgICAgICAgc3VwZXIoIFBhZ2VEZXNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkK LSAgICAgICAgc2VsZi5wYWdlX21hbmFnZXIgPTNEIFBhZ2VNYW5hZ2VyKCBhcHAgKQorICAgICAg ICBzZWxmLnBhZ2VfbWFuYWdlciA9M0Qgc2VsZi5tYW5hZ2VyCj0yMAogICAgIGRlZiBhZGRfZGVz ZXJpYWxpemVycyggc2VsZiApOgogICAgICAgICBzdXBlciggUGFnZURlc2VyaWFsaXplciwgc2Vs ZiApLmFkZF9kZXNlcmlhbGl6ZXJzKCkKCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2ODIz MGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBjOWI4 NjhiYjcgbGliL2dhbGF4eS9tYW5hZ2Vycy9zaGFyYWJsZS5weQotLS0gYS9saWIvZ2FsYXh5L21h bmFnZXJzL3NoYXJhYmxlLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFibGUucHkK QEAgLTE0LDExICsxNCwxMSBAQAo9MjAKIGZyb20gZ2FsYXh5IGltcG9ydCBleGNlcHRpb25zCj0y MAotaW1wb3J0IGJhc2UKLWltcG9ydCB0YWdnYWJsZQotaW1wb3J0IGFubm90YXRhYmxlCi1pbXBv cnQgcmF0YWJsZQotaW1wb3J0IHVzZXJzCitmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgYmFz ZQorZnJvbSBnYWxheHkubWFuYWdlcnMgaW1wb3J0IHRhZ2dhYmxlCitmcm9tIGdhbGF4eS5tYW5h Z2VycyBpbXBvcnQgYW5ub3RhdGFibGUKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCByYXRh YmxlCitmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgdXNlcnMKPTIwCiBpbXBvcnQgbG9nZ2lu ZwogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQpAQCAtMjgsMTAgKzI4LDE0 IEBACiBjbGFzcyBTaGFyYWJsZU1vZGVsTWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2Uu T3duYWJsZU1vZGVsSW50ZXJmYWNlLD0KIGJhc2UuQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlLAog ICAgICAgICB0YWdnYWJsZS5UYWdnYWJsZU1hbmFnZXJJbnRlcmZhY2UsIGFubm90YXRhYmxlLkFu bm90YXRhYmxlTWFuYWdlckk9Cm50ZXJmYWNlLCByYXRhYmxlLlJhdGFibGVNYW5hZ2VySW50ZXJm YWNlICk6CiAgICAgIyBlLmcuIGhpc3RvcmllcywgcGFnZXMsIHN0b3JlZCB3b3JrZmxvd3MsIHZp c3VhbGl6YXRpb25zCisgICAgIyBiYXNlLkRlbGV0ZWFibGVNb2RlbEludGVyZmFjZT8KPTIwCiAg ICAgIyB0aGUgbW9kZWwgdXNlZCBmb3IgVXNlclNoYXJlQXNzb2NpYXRpb25zIHdpdGggdGhpcyBt b2RlbAogICAgIHVzZXJfc2hhcmVfbW9kZWwgPTNEIE5vbmUKPTIwCisgICAgIzogdGhlIHNpbmds ZSBjaGFyYWN0ZXIgYWJicmV2aWF0aW9uIHVzZWQgaW4gdXNlcm5hbWVfYW5kX3NsdWc6IGUuZy4g Jz0KaCcgZm9yIGhpc3RvcmllczogdS91c2VyL2gvc2x1ZworICAgIFNJTkdMRV9DSEFSX0FCQlIg PTNEIE5vbmUKKwogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVy KCBTaGFyYWJsZU1vZGVsTWFuYWdlciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQogICAgICAgICAj IHVzZXIgbWFuYWdlciBpcyBuZWVkZWQgdG8gY2hlY2sgYWNjZXNzL293bmVyc2hpcC9hZG1pbgpA QCAtODYsOCArOTAsNiBAQAogICAgICAgICByZXR1cm4gRmFsc2UKPTIwCiAgICAgIyAuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLj0KLi4uLi4gaW1wb3J0YWJsZQotI1RPRE86IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBp bXBvcnRhYmxlIGFuZCBwdWJsaXNoZWQgaXMgaWxsIGRlZmluZWQKLSM/PzogY2FuIGEgcHVibGlz aGVkIGl0ZW0gYmUgbm9uLWltcG9ydGFibGU/CiAgICAgZGVmIG1ha2VfaW1wb3J0YWJsZSggc2Vs ZiwgdHJhbnMsIGl0ZW0sIGZsdXNoPTNEVHJ1ZSApOgogICAgICAgICAiIiIKICAgICAgICAgTWFr ZXMgaXRlbSBhY2Nlc3NpYmxlLS12aWV3YWJsZSBhbmQgaW1wb3J0YWJsZS0tYW5kIHNldHMgaXRl bSdzIHNsPQp1Zy4KQEAgLTEwNywxMiArMTA5LDEwIEBACiAgICAgICAgIERvZXMgbm90IGZsdXNo L2NvbW1pdCBjaGFuZ2VzLCBob3dldmVyLiBJdGVtIG11c3QgaGF2ZSBuYW1lLCB1c2VyLAogICAg ICAgICBpbXBvcnRhYmxlLCBhbmQgc2x1ZyBhdHRyaWJ1dGVzLgogICAgICAgICAiIiIKLSAgICAg ICAgI2lmIGl0ZW0ucHVibGlzaGVkOgotICAgICAgICAjICAgIGlmIHVucHVibGlzaDoKLSAgICAg ICAgIyAgICAgICAgc2VsZi51bnB1Ymxpc2goIHRyYW5zLCBpdGVtLCBmbHVzaD0zREZhbHNlICkK LSAgICAgICAgIyAgICBlbHNlOgotICAgICAgICAjICAgICAgICByYWlzZSBleGNlcHRpb25zLkJh ZFJlcXVlc3QoICdJdGVtIG11c3QgYmUgbm9uLXB1Ymxpc2hlZCA9CnRvIGJlIGluYWNjZXNzaWJs ZScsIGl0ZW09M0RpdGVtICkKKyAgICAgICAgIyBpdGVtIG11c3QgYmUgdW5wdWJsaXNoZWQgaWYg bm9uLWltcG9ydGFibGUKICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5hZGQoIGl0ZW0g KQorICAgICAgICBpZiBpdGVtLnB1Ymxpc2hlZDoKKyAgICAgICAgICAgIHNlbGYudW5wdWJsaXNo KCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCiAgICAgICAgIGl0ZW0uaW1wb3J0YWJsZSA9 M0QgRmFsc2UKICAgICAgICAgaWYgZmx1c2g6CiAgICAgICAgICAgICBzZWxmLmFwcC5tb2RlbC5j b250ZXh0LmZsdXNoKCkKQEAgLTEzMiwxOSArMTMyLDExIEBACiAgICAgIyAgICByZXR1cm4gc2Vs Zi5saXN0KCB0cmFucywgcXVlcnk9M0RxdWVyeSwgKiprd2FyZ3MgKQo9MjAKICAgICAjIC4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uPQouLi4uLiBwdWJsaXNoZWQKLSNUT0RPOiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4g aW1wb3J0YWJsZSBhbmQgcHVibGlzaGVkIGlzIGlsbCBkZWZpbmVkCi0gICAgI2RlZiBwdWJsaXNo KCBzZWxmLCB0cmFucywgaXRlbSwgbWFrZV9hY2Nlc3NpYmxlPTNEVHJ1ZSwgZmx1c2g9M0RUcnVl ID0KKToKLSAgICAjICAgIGlmIG5vdCBpdGVtLmltcG9ydGFibGU6Ci0gICAgIyAgICAgICAgaWYg bWFrZV9hY2Nlc3NpYmxlOgotICAgICMgICAgICAgICAgICBzZWxmLm1ha2VfYWNjZXNzaWJsZSgg dHJhbnMsIGl0ZW0sIGZsdXNoPTNERmFsc2UgKQotICAgICMgICAgICAgIGVsc2U6Ci0gICAgIyAg ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRp b24oICdJdGVtID0KbXVzdCBiZSBpbXBvcnRhYmxlIHRvIGJlIHB1Ymxpc2hlZCcsCi0gICAgIyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGl0ZW09Cj0zRHN0ciggaXRlbSApICkKLSAgICAjIGEgcHVibGlzaGVkIGl0ZW0gaXMgYWxz by9hbHJlYWR5IGltcG9ydGFibGUoPTNEVHJ1ZSkgaW1wbGljaXRseQogICAgIGRlZiBwdWJsaXNo KCBzZWxmLCB0cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlICk6CiAgICAgICAgICIiIgogICAgICAg ICBTZXQgYm90aCB0aGUgaW1wb3J0YWJsZSBhbmQgcHVibGlzaGVkIGZsYWdzIG9uIGBpdGVtYCB0 byBUcnVlLgogICAgICAgICAiIiIKKyAgICAgICAgIyBpdGVtIG11c3QgYmUgaW1wb3J0YWJsZSB0 byBiZSBwdWJsaXNoZWQKICAgICAgICAgaWYgbm90IGl0ZW0uaW1wb3J0YWJsZToKICAgICAgICAg ICAgIHNlbGYubWFrZV9pbXBvcnRhYmxlKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCiAg ICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuYWRkKCBpdGVtICkKQEAgLTI0Niw2ICsyMzgs MjMgQEAKICAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBzbHVncwogICAgICMgc2x1Z3MgYXJlIGh1 bWFuIHJlYWRhYmxlIHN0cmluZ3Mgb2Z0ZW4gdXNlZCB0byBsaW5rIHRvIHNoYXJhYmxlIHJlc289 CnVyY2VzIChyZXBsYWNpbmcgaWRzKQogICAgICNUT0RPOiBhcyB2YWxpZGF0b3IsIGRlc2VyaWFs aXplciwgZXRjLiAobWF5YmUgYW5vdGhlciBvYmplY3QgZW50aXJlbHk9Cj8pCisgICAgZGVmIHNl dF9zbHVnKCBzZWxmLCB0cmFucywgaXRlbSwgbmV3X3NsdWcsIGZsdXNoPTNEVHJ1ZSApOgorICAg ICAgICAiIiIKKyAgICAgICAgVmFsaWRhdGUgYW5kIHNldCB0aGUgbmV3IHNsdWcgZm9yIGBpdGVt YC4KKyAgICAgICAgIiIiCisgICAgICAgICMgcHJlY29uZGl0aW9uOiBoYXMgYmVlbiB2YWxpZGF0 ZWQKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfdmFsaWRfc2x1ZyggbmV3X3NsdWcgKToKKyAgICAg ICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24o ICJJbnZhbGlkIHNsPQp1ZyIsIHNsdWc9M0RuZXdfc2x1ZyApCisKKyAgICAgICAgIyBlcnJvciBp ZiBzbHVnIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGlmIHNlbGYuX3NsdWdfZXhpc3RzKCB0 cmFucywgdXNlciwgc2x1ZyApOgorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5Db25mbGlj dCggIlNsdWcgYWxyZWFkeSBleGlzdHMiLCBzbHVnPTNEbmV3X3M9Cmx1ZyApCisKKyAgICAgICAg aXRlbS5zbHVnID0zRCBuZXdfc2x1ZworICAgICAgICBpZiBmbHVzaDoKKyAgICAgICAgICAgIHNl bGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQorICAgICAgICByZXR1cm4gaXRlbQorCiAgICAg ZGVmIGlzX3ZhbGlkX3NsdWcoIHNlbGYsIHNsdWcgKToKICAgICAgICAgIiIiCiAgICAgICAgIFJl dHVybnMgdHJ1ZSBpZiBgc2x1Z2AgaXMgdmFsaWQuCkBAIC0yNTMsMjMgKzI2MiwzMSBAQAogICAg ICAgICBWQUxJRF9TTFVHX1JFID0zRCByZS5jb21waWxlKCAiXlthLXowLTlcLV0rJCIgKQogICAg ICAgICByZXR1cm4gVkFMSURfU0xVR19SRS5tYXRjaCggc2x1ZyApCj0yMAotICAgIGRlZiBzZXRf c2x1Zyggc2VsZiwgdHJhbnMsIGl0ZW0sIG5ld19zbHVnLCBmbHVzaD0zRFRydWUgKToKLSAgICAg ICAgIiIiCi0gICAgICAgIFZhbGlkYXRlIGFuZCBzZXQgdGhlIG5ldyBzbHVnIGZvciBgaXRlbWAu Ci0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5pc192YWxpZF9zbHVnKCBuZXdfc2x1 ZyApOgotICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5SZXF1ZXN0UGFyYW1ldGVySW52YWxp ZEV4Y2VwdGlvbiggIkludmFsaWQgc2w9CnVnIiwgc2x1Zz0zRG5ld19zbHVnICkKKyAgICBkZWYg X2V4aXN0aW5nX3NldF9vZl9zbHVncyggc2VsZiwgdHJhbnMsIHVzZXIgKToKKyAgICAgICAgcXVl cnkgPTNEICggc2VsZi5hcHAubW9kZWwuY29udGV4dC5xdWVyeSggc2VsZi5tb2RlbF9jbGFzcy5z bHVnICkKKyAgICAgICAgICAgICAgICAgICAgLmZpbHRlcl9ieSggdXNlcj0zRHVzZXIgKSApCisg ICAgICAgIHJldHVybiBzZXQoIHF1ZXJ5LmFsbCgpICkKPTIwCi0gICAgICAgICMgZXJyb3IgaWYg c2x1ZyBpcyBhbHJlYWR5IGluIHVzZQotICAgICAgICBleGlzdGluZ19tYXRjaCA9M0QgKCBzZWxm LmFwcC5tb2RlbC5jb250ZXh0LnF1ZXJ5KCBzZWxmLm1vZGVsX2NsYXM9CnMgKQotICAgICAgICAg ICAgLmZpbHRlcl9ieSggdXNlcj0zRGl0ZW0udXNlciwgc2x1Zz0zRG5ld19zbHVnLCBpbXBvcnRh YmxlPTNEVHI9CnVlICkgKQotICAgICAgICBpZiggZXhpc3RpbmdfbWF0Y2guY291bnQoKSAhPTNE IDAgKToKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQmFkUmVxdWVzdCggIlNsdWcgYWxy ZWFkeSBleGlzdHMiLCBzbHVnPTNEbmV3PQpfc2x1ZyApCisgICAgZGVmIF9zbHVnX2V4aXN0cygg c2VsZiwgdHJhbnMsIHVzZXIsIHNsdWcgKToKKyAgICAgICAgcXVlcnkgPTNEICggc2VsZi5hcHAu bW9kZWwuY29udGV4dC5xdWVyeSggc2VsZi5tb2RlbF9jbGFzcy5zbHVnICkKKyAgICAgICAgICAg ICAgICAgICAgLmZpbHRlcl9ieSggdXNlcj0zRHVzZXIsIHNsdWc9M0RzbHVnICkgKQorICAgICAg ICByZXR1cm4gcXVlcnkuY291bnQoKSAhPTNEIDAKPTIwCi0gICAgICAgIGl0ZW0uc2x1ZyA9M0Qg bmV3X3NsdWcKLSAgICAgICAgaWYgZmx1c2g6Ci0gICAgICAgICAgICBzZWxmLmFwcC5tb2RlbC5j b250ZXh0LmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIGl0ZW0KKyAgICBkZWYgX3NsdWdpZnkoIHNl bGYsIHN0YXJ0X3dpdGggKToKKyAgICAgICAgIyBSZXBsYWNlIHdoaXRlc3BhY2Ugd2l0aCAnLScK KyAgICAgICAgc2x1Z19iYXNlID0zRCByZS5zdWIoICJccysiLCAiLSIsIHN0YXJ0X3dpdGggKQor ICAgICAgICAjIFJlbW92ZSBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLgorICAgICAg ICBzbHVnX2Jhc2UgPTNEIHJlLnN1YiggIlteYS16QS1aMC05XC1dIiwgIiIsIHNsdWdfYmFzZSAp CisgICAgICAgICMgUmVtb3ZlIHRyYWlsaW5nICctJy4KKyAgICAgICAgaWYgc2x1Z19iYXNlLmVu ZHN3aXRoKCctJyk6CisgICAgICAgICAgICBzbHVnX2Jhc2UgPTNEIHNsdWdfYmFzZVs6LTFdCisg ICAgICAgIHJldHVybiBzbHVnX2Jhc2UKKworICAgIGRlZiBfZGVmYXVsdF9zbHVnX2Jhc2UoIHNl bGYsIHRyYW5zLCBpdGVtICk6CisgICAgICAgICMgb3ZlcnJpZGUgaW4gc3ViY2xhc3NlcworICAg ICAgICBpZiBoYXNhdHRyKCBpdGVtLCAndGl0bGUnICk6CisgICAgICAgICAgICByZXR1cm4gaXRl bS50aXRsZS5sb3dlcigpCisgICAgICAgIHJldHVybiBpdGVtLm5hbWUubG93ZXIoKQo9MjAKICAg ICBkZWYgZ2V0X3VuaXF1ZV9zbHVnKCBzZWxmLCB0cmFucywgaXRlbSApOgogICAgICAgICAiIiIK QEAgLTI4MCwxOSArMjk3LDcgQEAKPTIwCiAgICAgICAgICMgU2V0dXAgc2x1ZyBiYXNlLgogICAg ICAgICBpZiBjdXJfc2x1ZyBpcyBOb25lIG9yIGN1cl9zbHVnID0zRD0zRCAiIjoKLSAgICAgICAg ICAgICMgSXRlbSBjYW4gaGF2ZSBlaXRoZXIgYSBuYW1lIG9yIGEgdGl0bGUuCi0jVE9ETzogdGhp cyBkZXBlbmRzIG9uIHRoZSBtb2RlbCBoYXZpbmcgbmFtZSBvciB0aXRsZQotICAgICAgICAgICAg aWYgaGFzYXR0ciggaXRlbSwgJ25hbWUnICk6Ci0gICAgICAgICAgICAgICAgaXRlbV9uYW1lID0z RCBpdGVtLm5hbWUKLSAgICAgICAgICAgIGVsaWYgaGFzYXR0ciggaXRlbSwgJ3RpdGxlJyApOgot ICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9M0QgaXRlbS50aXRsZQotICAgICAgICAgICAgIyBS ZXBsYWNlIHdoaXRlc3BhY2Ugd2l0aCAnLScKLSAgICAgICAgICAgIHNsdWdfYmFzZSA9M0QgcmUu c3ViKCAiXHMrIiwgIi0iLCBpdGVtX25hbWUubG93ZXIoKSApCi0gICAgICAgICAgICAjIFJlbW92 ZSBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgc2x1Z19iYXNl ID0zRCByZS5zdWIoICJbXmEtekEtWjAtOVwtXSIsICIiLCBzbHVnX2Jhc2UgKQotICAgICAgICAg ICAgIyBSZW1vdmUgdHJhaWxpbmcgJy0nLgotICAgICAgICAgICAgaWYgc2x1Z19iYXNlLmVuZHN3 aXRoKCctJyk6Ci0gICAgICAgICAgICAgICAgc2x1Z19iYXNlID0zRCBzbHVnX2Jhc2VbOi0xXQor ICAgICAgICAgICAgc2x1Z19iYXNlID0zRCBzZWxmLl9zbHVnaWZ5KCBzZWxmLl9kZWZhdWx0X3Ns dWdfYmFzZSggdHJhbnMsIGk9CnRlbSApICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNs dWdfYmFzZSA9M0QgY3VyX3NsdWcKPTIwCkBAIC0zNDEsNiArMzQ2LDcgQEAKIGNsYXNzIFNoYXJh YmxlTW9kZWxTZXJpYWxpemVyKCBiYXNlLk1vZGVsU2VyaWFsaXplciwKICAgICAgICAgdGFnZ2Fi bGUuVGFnZ2FibGVTZXJpYWxpemVyLCBhbm5vdGF0YWJsZS5Bbm5vdGF0YWJsZVNlcmlhbGl6ZXIs IHJhPQp0YWJsZS5SYXRhYmxlU2VyaWFsaXplciApOgogI1RPRE86IHN0dWIKKyAgICBTSU5HTEVf Q0hBUl9BQkJSID0zRCBOb25lCj0yMAogICAgIGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToK ICAgICAgICAgc3VwZXIoIFNoYXJhYmxlTW9kZWxTZXJpYWxpemVyLCBzZWxmICkuYWRkX3Nlcmlh bGl6ZXJzKCkKQEAgLTM0OCw2ICszNTQsMTkgQEAKICAgICAgICAgYW5ub3RhdGFibGUuQW5ub3Rh dGFibGVTZXJpYWxpemVyLmFkZF9zZXJpYWxpemVycyggc2VsZiApCiAgICAgICAgIHJhdGFibGUu UmF0YWJsZVNlcmlhbGl6ZXIuYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICkKPTIwCisgICAgICAgIHNl bGYuc2VyaWFsaXplcnMudXBkYXRlKHsKKyAgICAgICAgICAgICd1c2VyX2lkJyAgICAgICAgICAg OiBzZWxmLnNlcmlhbGl6ZV9pZCwKKyAgICAgICAgICAgICd1c2VybmFtZV9hbmRfc2x1ZycgOiBz ZWxmLnNlcmlhbGl6ZV91c2VybmFtZV9hbmRfc2x1ZworICAgICAgICB9KQorICAgICAgICBzZWxm LnNlcmlhbGl6YWJsZV9rZXlzLmV4dGVuZChbCisgICAgICAgICAgICAnaW1wb3J0YWJsZScsICdw dWJsaXNoZWQnLCAnc2x1ZycKKyAgICAgICAgXSkKKworICAgIGRlZiBzZXJpYWxpemVfdXNlcm5h bWVfYW5kX3NsdWcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAgICAgaWYgbm90ICgg aXRlbS51c2VyIGFuZCBpdGVtLnNsdWcgYW5kIHNlbGYuU0lOR0xFX0NIQVJfQUJCUiApOgorICAg ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuICggJy8nICkuam9pbigoICd1Jywg aXRlbS51c2VyLnVzZXJuYW1lLCBzZWxmLlNJTkdMRV9DSEFSX0FCPQpCUiwgaXRlbS5zbHVnICkg KQorCiAgICAgIyB0aGUgb25seSBvbmVzIHRoYXQgbmVlZHMgYW55IGZuczoKICAgICAjICAgdXNl ci91c2VyX2lkCiAgICAgIyAgIHVzZXJfc2hhcmVzPwpAQCAtMzcyLDE4ICszOTEsMzcgQEAKICAg ICAgICAgYW5ub3RhdGFibGUuQW5ub3RhdGFibGVEZXNlcmlhbGl6ZXIuYWRkX2Rlc2VyaWFsaXpl cnMoIHNlbGYgKQogICAgICAgICByYXRhYmxlLlJhdGFibGVEZXNlcmlhbGl6ZXIuYWRkX2Rlc2Vy aWFsaXplcnMoIHNlbGYgKQo9MjAKLSAgICAjZGVmIGRlc2VyaWFsaXplX3B1Ymxpc2hlZCggc2Vs ZiwgdHJhbnMsIGl0ZW0sIHZhbCApOgotICAgICMgICAgIiIiCi0gICAgIyAgICAiIiIKLSAgICAj ICAgICNUT0RPOiBjYWxsIG1hbmFnZXIucHVibGlzaC91bnB1Ymxpc2gKLSAgICAjICAgIHBhc3MK LSAgICAjCi0gICAgI2RlZiBkZXNlcmlhbGl6ZV9pbXBvcnRhYmxlKCBzZWxmLCB0cmFucywgaXRl bSwgdmFsICk6Ci0gICAgIyAgICAiIiIKLSAgICAjICAgICIiIgotICAgICMgICAgI1RPRE86IGNh bGwgbWFuYWdlci5tYWtlX2ltcG9ydGFibGUvbm9uX2ltcG9ydGFibGUKLSAgICAjICAgIHBhc3MK LSAgICAjCisgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycy51cGRhdGUoeworICAgICAgICAgICAg J3B1Ymxpc2hlZCcgICAgIDogc2VsZi5kZXNlcmlhbGl6ZV9wdWJsaXNoZWQsCisgICAgICAgICAg ICAnaW1wb3J0YWJsZScgICAgOiBzZWxmLmRlc2VyaWFsaXplX2ltcG9ydGFibGUsCisgICAgICAg IH0pCisKKyAgICBkZWYgZGVzZXJpYWxpemVfcHVibGlzaGVkKCBzZWxmLCB0cmFucywgaXRlbSwg a2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICB2YWwgPTNEIHNl bGYudmFsaWRhdGUuYm9vbCgga2V5LCB2YWwgKQorICAgICAgICBpZiBpdGVtLnB1Ymxpc2hlZCA9 M0Q9M0QgdmFsOgorICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgICAgIGlmIHZhbDoKKyAg ICAgICAgICAgIHNlbGYubWFuYWdlci5wdWJsaXNoKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxz ZSApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIudW5wdWJsaXNoKCB0 cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCisgICAgICAgIHJldHVybiBpdGVtLnB1Ymxpc2hl ZAorCisgICAgZGVmIGRlc2VyaWFsaXplX2ltcG9ydGFibGUoIHNlbGYsIHRyYW5zLCBpdGVtLCBr ZXksIHZhbCApOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIHZhbCA9M0Qgc2Vs Zi52YWxpZGF0ZS5ib29sKCBrZXksIHZhbCApCisgICAgICAgIGlmIGl0ZW0uaW1wb3J0YWJsZSA9 M0Q9M0QgdmFsOgorICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgICAgIGlmIHZhbDoKKyAg ICAgICAgICAgIHNlbGYubWFuYWdlci5tYWtlX2ltcG9ydGFibGUoIHRyYW5zLCBpdGVtLCBmbHVz aD0zREZhbHNlICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuYWdlci5tYWtl X25vbl9pbXBvcnRhYmxlKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCisgICAgICAgIHJl dHVybiBpdGVtLnB1Ymxpc2hlZAorCiAgICAgI2RlZiBkZXNlcmlhbGl6ZV9zbHVnKCBzZWxmLCB0 cmFucywgaXRlbSwgdmFsICk6CiAgICAgIyAgICAiIiIKICAgICAjICAgICIiIgoKZGlmZiAtciAz MTM1N2VkZjI2MGVhNmIyNTlkYzY4MjMwZjMwODNiM2YwZmFmY2EwIC1yIDE0Nzk2YWM4NjdlYjBj N2RjNTE3ZWVkPQphMWVjODI1MGM5Yjg2OGJiNyBsaWIvZ2FsYXh5L21hbmFnZXJzL3VzZXJzLnB5 Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5h Z2Vycy91c2Vycy5weQpAQCAtOCw5ICs4LDEwIEBACj0yMAogZnJvbSBnYWxheHkgaW1wb3J0IG1v ZGVsCiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwotaW1wb3J0IGFwaV9rZXlzCj0yMAot aW1wb3J0IGJhc2UKK2Zyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlCitmcm9tIGdhbGF4 eS5tYW5hZ2VycyBpbXBvcnQgYXBpX2tleXMKKwo9MjAKIGltcG9ydCBsb2dnaW5nCiBsb2cgPTNE IGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1 OWRjNjgyMzBmMzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4 MjUwYzliODY4YmI3IGxpYi9nYWxheHkvbWFuYWdlcnMvdmlzdWFsaXphdGlvbnMucHkKLS0tIGEv bGliL2dhbGF4eS9tYW5hZ2Vycy92aXN1YWxpemF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L21h bmFnZXJzL3Zpc3VhbGl6YXRpb25zLnB5CkBAIC03LDExICs3LDEwIEBACj0yMAogZnJvbSBnYWxh eHkgaW1wb3J0IGV4Y2VwdGlvbnMKIGZyb20gZ2FsYXh5IGltcG9ydCBtb2RlbAoraW1wb3J0IGdh bGF4eS53ZWIKPTIwCi1pbXBvcnQgYmFzZQotaW1wb3J0IHNoYXJhYmxlCi0KLWltcG9ydCBnYWxh eHkud2ViCitmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgYmFzZQorZnJvbSBnYWxheHkubWFu YWdlcnMgaW1wb3J0IHNoYXJhYmxlCj0yMAogaW1wb3J0IGxvZ2dpbmcKIGxvZyA9M0QgbG9nZ2lu Zy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKQEAgLTc4LDEwICs3NywxMSBAQAogICAgIEludGVyZmFj ZS9zZXJ2aWNlIG9iamVjdCBmb3IgdmFsaWRhdGluZyBhbmQgZGVzZXJpYWxpemluZwogICAgIGRp Y3Rpb25hcmllcyBpbnRvIHZpc3VhbGl6YXRpb25zLgogICAgICIiIgorICAgIG1vZGVsX21hbmFn ZXJfY2xhc3MgPTNEIFZpc3VhbGl6YXRpb25NYW5hZ2VyCj0yMAogICAgIGRlZiBfX2luaXRfXygg c2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVyKCBWaXN1YWxpemF0aW9uRGVzZXJpYWxpemVyLCBz ZWxmICkuX19pbml0X18oIGFwcCApCi0gICAgICAgIHNlbGYudmlzdWFsaXphdGlvbl9tYW5hZ2Vy ID0zRCBWaXN1YWxpemF0aW9uTWFuYWdlciggYXBwICkKKyAgICAgICAgc2VsZi52aXN1YWxpemF0 aW9uX21hbmFnZXIgPTNEIHNlbGYubWFuYWdlcgo9MjAKICAgICBkZWYgYWRkX2Rlc2VyaWFsaXpl cnMoIHNlbGYgKToKICAgICAgICAgc3VwZXIoIFZpc3VhbGl6YXRpb25EZXNlcmlhbGl6ZXIsIHNl bGYgKS5hZGRfZGVzZXJpYWxpemVycygpCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgy MzBmMzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzli ODY4YmI3IGxpYi9nYWxheHkvd2ViL2Jhc2UvY29udHJvbGxlci5weQotLS0gYS9saWIvZ2FsYXh5 L3dlYi9iYXNlL2NvbnRyb2xsZXIucHkKKysrIGIvbGliL2dhbGF4eS93ZWIvYmFzZS9jb250cm9s bGVyLnB5CkBAIC0xNSw2ICsxNSw3IEBACiBmcm9tIHBhc3RlLmh0dHBleGNlcHRpb25zIGltcG9y dCBIVFRQTm90SW1wbGVtZW50ZWQsIEhUVFBSZXF1ZXN0UmFuZ2VOb3RTYT0KdGlzZmlhYmxlCiBm cm9tIGdhbGF4eS5leGNlcHRpb25zIGltcG9ydCBJdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiwg SXRlbURlbGV0aW9uRXhjZT0KcHRpb24sIEl0ZW1Pd25lcnNoaXBFeGNlcHRpb24KIGZyb20gZ2Fs YXh5LmV4Y2VwdGlvbnMgaW1wb3J0IE1lc3NhZ2VFeGNlcHRpb24KK2Zyb20gZ2FsYXh5IGltcG9y dCBleGNlcHRpb25zCj0yMAogZnJvbSBnYWxheHkgaW1wb3J0IHdlYgogZnJvbSBnYWxheHkgaW1w b3J0IG1vZGVsCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2IzZjBmYWZj YTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IGxpYi9nYWxh eHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3Rvcmllcy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS9oaXN0b3JpZXMucHkKKysrIGIvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4 eS9hcGkvaGlzdG9yaWVzLnB5CkBAIC03LDYgKzcsOSBAQAogaW1wb3J0IHBrZ19yZXNvdXJjZXMK IHBrZ19yZXNvdXJjZXMucmVxdWlyZSggIlBhc3RlIiApCj0yMAorcGtnX3Jlc291cmNlcy5yZXF1 aXJlKCAiU1FMQWxjaGVteSA+PTNEIDAuNCIgKQoraW1wb3J0IHNxbGFsY2hlbXkKKwogZnJvbSBn YWxheHkgaW1wb3J0IGV4Y2VwdGlvbnMKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1dHVyZV9l eHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1dHVyZV9l eHBvc2VfYXBpX2Fub255bW91cyBhcyBleHBvc2VfYXBpX2Fub255bW91cwpAQCAtNTksNyArNjIs OSBAQAogICAgICAgICBpZiBzdHJpbmdfYXNfYm9vbCggZGVsZXRlZCApOgogICAgICAgICAgICAg ZGVsZXRlZF9maWx0ZXIgPTNEICggc2VsZi5hcHAubW9kZWwuSGlzdG9yeS5kZWxldGVkID0zRD0z RCBUcnU9CmUgKQo9MjAKLSAgICAgICAgaGlzdG9yaWVzID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdl ci5ieV91c2VyKCB0cmFucywgdXNlcj0zRHRyYW5zLnVzPQplciwgZmlsdGVycz0zRGRlbGV0ZWRf ZmlsdGVyICkKKyAgICAgICAgI1RPRE86IGNyZWF0ZSB0aW1lPyBpcyB0aGlzIHJpZ2h0PworICAg ICAgICBvcmRlcl9ieSA9M0Qgc3FsYWxjaGVteS5kZXNjKCBzZWxmLmFwcC5tb2RlbC5IaXN0b3J5 LmNyZWF0ZV90aW1lICkKKyAgICAgICAgaGlzdG9yaWVzID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdl ci5ieV91c2VyKCB0cmFucywgdXNlcj0zRHRyYW5zLnVzPQplciwgZmlsdGVycz0zRGRlbGV0ZWRf ZmlsdGVyLCBvcmRlcl9ieT0zRG9yZGVyX2J5ICkKICAgICAgICAgZm9yIGhpc3RvcnkgaW4gaGlz dG9yaWVzOgogICAgICAgICAgICAgaGlzdG9yeV9kaWN0ID0zRCBzZWxmLmhpc3Rvcnlfc2VyaWFs aXplci5zZXJpYWxpemVfdG9fdmlldyggdHI9CmFucywgaGlzdG9yeSwgKipzZXJpYWxpemF0aW9u X3BhcmFtcyApCiAgICAgICAgICAgICBydmFsLmFwcGVuZCggaGlzdG9yeV9kaWN0ICkKQEAgLTE1 Miw3ICsxNTcsNyBAQAo9MjAKICAgICAgICAgIyBvdGhlcndpc2UsIGNyZWF0ZSBhIG5ldyBlbXB0 eSBoaXN0b3J5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdfaGlzdG9yeSA9M0QgdHJh bnMuYXBwLm1vZGVsLkhpc3RvcnkoIHVzZXI9M0R0cmFucy51c2VyLCBuYT0KbWU9M0RoaXN0X25h bWUgKQorICAgICAgICAgICAgbmV3X2hpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmNy ZWF0ZSggdHJhbnMsIHVzZXI9M0R0cmE9Cm5zLnVzZXIsIG5hbWU9M0RoaXN0X25hbWUgKQo9MjAK ICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIG5ld19oaXN0b3J5ICkKICAgICAgICAgdHJh bnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCkBAIC0xOTMsNyArMTk4LDcgQEAKICAgICAgICAgaWYgcHVy Z2U6CiAgICAgICAgICAgICBzZWxmLmhpc3RvcnlfbWFuYWdlci5wdXJnZSggdHJhbnMsIGhpc3Rv cnkgKQo9MjAKLSAgICAgICAgcmV0dXJuIHNlbGYuaGlzdG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6 ZV90b192aWV3KCB0cmFucywgbmV3X2hpc3RvPQpyeSwKKyAgICAgICAgcmV0dXJuIHNlbGYuaGlz dG9yeV9zZXJpYWxpemVyLnNlcmlhbGl6ZV90b192aWV3KCB0cmFucywgaGlzdG9yeSwKICAgICAg ICAgICAgICoqc2VsZi5fcGFyc2Vfc2VyaWFsaXphdGlvbl9wYXJhbXMoIGt3ZCwgJ2RldGFpbGVk JyApICkKPTIwCiAgICAgQGV4cG9zZV9hcGkKQEAgLTIzOCw3ICsyNDMsNiBAQAogICAgICAgICAj VE9ETzogUFVUIC9hcGkvaGlzdG9yaWVzL3tlbmNvZGVkX2hpc3RvcnlfaWR9IHBheWxvYWQgPTNE IHsgcmF0aW49Cmc6IHJhdGluZyB9ICh3LyBubyBzZWN1cml0eSBjaGVja3MpCiAgICAgICAgIGhp c3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9vd25lZCggdHJhbnMsIHNlbGYuZGVj b2RlX2lkKD0KIGlkICksIHRyYW5zLnVzZXIgKQo9MjAKLSAgICAgICAgI1RPRE86IGZsdXNoaW5n IGluIGRlc2VyaWFsaXplIGlzIGFuIGlmZnkgcGF0dGVybi4uLgogICAgICAgICBzZWxmLmhpc3Rv cnlfZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCB0cmFucywgaGlzdG9yeSwgcGF5bG9hZCApCiAg ICAgICAgIHJldHVybiBzZWxmLmhpc3Rvcnlfc2VyaWFsaXplci5zZXJpYWxpemVfdG9fdmlldygg dHJhbnMsIGhpc3RvcnksCiAgICAgICAgICAgICAqKnNlbGYuX3BhcnNlX3NlcmlhbGl6YXRpb25f cGFyYW1zKCBrd2QsICdkZXRhaWxlZCcgKSApCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRj NjgyMzBmMzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUw YzliODY4YmI3IGxpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2hpc3RvcnlfY29udGVudHMu cHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9hcGkvaGlzdG9yeV9jb250ZW50cy5w eQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9oaXN0b3J5X2NvbnRlbnRzLnB5 CkBAIC0xMzIsNiArMTMyLDggQEAKICAgICAgICAgOnJ0eXBlOiAgICAgZGljdAogICAgICAgICA6 cmV0dXJuczogICBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZGV0YWlsZWQgSERBIGluZm9ybWF0aW9u CiAgICAgICAgICIiIgorICAgICAgICBoaXN0b3J5ID0zRCBzZWxmLmhpc3RvcnlfbWFuYWdlci5n ZXRfYWNjZXNzaWJsZSggdHJhbnMsIHNlbGYuZGVjb2Q9CmVfaWQoIGhpc3RvcnlfaWQgKSwgdHJh bnMudXNlciApCisKICAgICAgICAgY29udGVudHNfdHlwZSA9M0Qga3dkLmdldCgndHlwZScsICdk YXRhc2V0JykKICAgICAgICAgaWYgY29udGVudHNfdHlwZSA9M0Q9M0QgJ2RhdGFzZXQnOgogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuX19zaG93X2RhdGFzZXQoIHRyYW5zLCBpZCwgKiprd2QgKQpA QCAtMjQ2LDYgKzI0OCw4IEBACiAgICAgICAgIGVsaWYgc291cmNlID0zRD0zRCAnaGRhJzoKICAg ICAgICAgICAgIHVuZW5jb2RlZF9oZGFfaWQgPTNEIHNlbGYuZGVjb2RlX2lkKCBjb250ZW50ICkK ICAgICAgICAgICAgIG9yaWdpbmFsID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxl KCB0cmFucywgdW5lbmNvZGVkPQpfaGRhX2lkLCB0cmFucy51c2VyICkKKyAgICAgICAgICAgICMg Y2hlY2sgZm9yIGFjY2VzcyBvbiBoaXN0b3J5IHRoYXQgY29udGFpbnMgdGhlIG9yaWdpbmFsIGhk YSBhPQpzIHdlbGwKKyAgICAgICAgICAgIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmVycm9yX3VubGVz c19hY2Nlc3NpYmxlKCB0cmFucywgb3JpZ2luYWwuPQpoaXN0b3J5LCB0cmFucy51c2VyICkKICAg ICAgICAgICAgIGRhdGFfY29weSA9M0Qgb3JpZ2luYWwuY29weSggY29weV9jaGlsZHJlbj0zRFRy dWUgKQogICAgICAgICAgICAgaGRhID0zRCBoaXN0b3J5LmFkZF9kYXRhc2V0KCBkYXRhX2NvcHkg KQo9MjAKQEAgLTMxNyw3ICszMjEsNyBAQAogICAgICAgICBpZiB0cmFucy51c2VyID0zRD0zRCBO b25lOgogICAgICAgICAgICAgaGRhID0zRCBzZWxmLmhkYV9tYW5hZ2VyLmJ5X2lkKCB0cmFucywg c2VsZi5kZWNvZGVfaWQoIGlkICkgKQogICAgICAgICAgICAgaWYgaGRhLmhpc3RvcnkgIT0zRCB0 cmFucy5oaXN0b3J5OgotICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQXV0aGVudGlj YXRpb25SZXF1aXJlZCggJ1lvdSBtdXN0IGJlIGxvZ2c9CmVkIGluIHRvIHVwZGF0ZSB0aGlzIGRh dGFzZXQnICkKKyAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkF1dGhlbnRpY2F0aW9u UmVxdWlyZWQoICdBUEkgYXV0aGVudGljYXRpPQpvbiByZXF1aXJlZCBmb3IgdGhpcyByZXF1ZXN0 JyApCiAgICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZXJyb3JfaWZfdXBsb2Fk aW5nKCB0cmFucywgaGRhICkKPTIwCiAgICAgICAgICAgICBhbm9uX2FsbG93ZWRfcGF5bG9hZCA9 M0Qge30KQEAgLTMyOSw4ICszMzMsNyBAQAo9MjAKICAgICAgICAgIyBsb2dnZWQgaW4gdXNlcjog dXNlIGZ1bGwgcGF5bG9hZCwgY2hlY2sgc3RhdGUgaWYgZGVsZXRpbmcsIGFuZCBtPQpha2Ugc3Vy ZSB0aGUgaGlzdG9yeSBpcyB0aGVpcnMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhkYSA9 M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXRfYWNjZXNzaWJsZSggdHJhbnMsIHNlbGYuZGVjb2RlX2lk PQooIGlkICksIHRyYW5zLnVzZXIgKQotICAgICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIu ZXJyb3JfdW5sZXNzX293bmVyKCB0cmFucywgaGRhLmhpc3RvcnksIHQ9CnJhbnMudXNlciApCisg ICAgICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0X293bmVkKCB0cmFucywgc2Vs Zi5kZWNvZGVfaWQoIGlkID0KKSwgdHJhbnMudXNlciApCj0yMAogICAgICAgICAgICAgIyBvbmx5 IGNoZWNrX3N0YXRlIGlmIG5vdCBkZWxldGluZywgb3RoZXJ3aXNlIGNhbm5vdCBkZWxldGUgdXA9 CmxvYWRpbmcgZmlsZXMKICAgICAgICAgICAgIGNoZWNrX3N0YXRlID0zRCBub3QgcGF5bG9hZC5n ZXQoICdkZWxldGVkJywgRmFsc2UgKQpAQCAtMzk2LDggKzM5OSw3IEBACiAgICAgICAgICAgICAj IHBheWxvYWQgdGFrZXMgcHJpb3JpdHkKICAgICAgICAgICAgIHB1cmdlID0zRCB1dGlsLnN0cmlu Z19hc19ib29sKCBrd2RbJ3BheWxvYWQnXS5nZXQoICdwdXJnZScsIHB1PQpyZ2UgKSApCj0yMAot ICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuYnlfaWQoIHRyYW5zLCBzZWxmLmRlY29k ZV9pZCggaWQgKSwgdHJhbnM9Ci51c2VyICkKLSAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIu ZXJyb3JfdW5sZXNzX293bmVyc2hpcCggdHJhbnMsIGhkYS5oaXN0b3J5LCB0PQpyYW5zLnVzZXIg KQorICAgICAgICBoZGEgPTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0X293bmVkKCB0cmFucywgc2Vs Zi5kZWNvZGVfaWQoIGlkICksIHQ9CnJhbnMudXNlciApCiAgICAgICAgIHNlbGYuaGRhX21hbmFn ZXIuZXJyb3JfaWZfdXBsb2FkaW5nKCB0cmFucywgaGRhICkKPTIwCiAgICAgICAgIGlmIHB1cmdl OgoKZGlmZiAtciAzMTM1N2VkZjI2MGVhNmIyNTlkYzY4MjMwZjMwODNiM2YwZmFmY2EwIC1yIDE0 Nzk2YWM4NjdlYjBjN2RjNTE3ZWVkPQphMWVjODI1MGM5Yjg2OGJiNyBsaWIvZ2FsYXh5L3dlYmFw cHMvZ2FsYXh5L2FwaS92aXN1YWxpemF0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMv Z2FsYXh5L2FwaS92aXN1YWxpemF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2Fs YXh5L2FwaS92aXN1YWxpemF0aW9ucy5weQpAQCAtMTIyLDcgKzEyMiwxMSBAQAo9MjAKICAgICAg ICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGF5bG9hZCA9M0Qgc2VsZi5fdmFsaWRhdGVf YW5kX3BhcnNlX3BheWxvYWQoIHBheWxvYWQgKQorICAgICAgICAgICAgICAgICMgbXVzdCBoYXZl IGEgdHlwZSAoSSd2ZSB0YWtlbiB0aGlzIHRvIGJlIHRoZSB2aXN1YWxpemF0aW89Cm4gbmFtZSkK KyAgICAgICAgICAgICAgICBpZiAndHlwZScgbm90IGluIHBheWxvYWQ6CisgICAgICAgICAgICAg ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoICJrZXkvdmFsdWUgJ3R5cGUnIGlzIHJlcXVpcmVkIiAp CiAgICAgICAgICAgICAgICAgdmlzX3R5cGUgPTNEIHBheWxvYWQucG9wKCAndHlwZScsIEZhbHNl ICkKKwogICAgICAgICAgICAgICAgIHBheWxvYWRbICdzYXZlJyBdID0zRCBUcnVlCiAgICAgICAg ICAgICAgICAgIyBnZW5lcmF0ZSBkZWZhdWx0cyAtIHRoaXMgd2lsbCBlcnIgaWYgZ2l2ZW4gYSB3 ZWlyZCBrZXk/CiAgICAgICAgICAgICAgICAgdmlzdWFsaXphdGlvbiA9M0Qgc2VsZi5jcmVhdGVf dmlzdWFsaXphdGlvbiggdHJhbnMsIHZpc190eT0KcGUsICoqcGF5bG9hZCApCkBAIC0yMjEsMTAg KzIyNSw2IEBACiAgICAgICAgICNUT0RPOiBkZWxldGVkCiAgICAgICAgICNUT0RPOiBpbXBvcnRh YmxlCj0yMAotICAgICAgICAjIG11c3QgaGF2ZSBhIHR5cGUgKEkndmUgdGFrZW4gdGhpcyB0byBi ZSB0aGUgdmlzdWFsaXphdGlvbiBuYW1lKQotICAgICAgICBpZiAndHlwZScgbm90IGluIHBheWxv YWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCAia2V5L3ZhbHVlICd0eXBlJyBpcyBy ZXF1aXJlZCIgKQotCiAgICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkID0zRCB7fQogICAgICAgICBm b3Iga2V5LCB2YWwgaW4gcGF5bG9hZC5pdGVtcygpOgogICAgICAgICAgICAgI1RPRE86IHZhbGlk YXRlIHR5cGVzIGluIFZBTElEX1RZUEVTL3JlZ2lzdHJ5IG5hbWVzIGF0IHRoZSBtaXg9CmluL21v ZGVsIGxldmVsPwpAQCAtMjU2LDggKzI1Niw5IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNl IFZhbHVlRXJyb3IoICclcyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuaWNvZGU6ICVzJz0KICUoIGtl eSwgc3RyKCB0eXBlKCB2YWwgKSApICkgKQogICAgICAgICAgICAgICAgIHZhbCA9M0QgdXRpbC5z YW5pdGl6ZV9odG1sLnNhbml0aXplX2h0bWwoIHZhbCwgJ3V0Zi04JyApCj0yMAotICAgICAgICAg ICAgI2VsaWYga2V5IG5vdCBpbiB2YWxpZF9idXRfdW5lZGl0YWJsZV9rZXlzOgotICAgICAgICAg ICAgIyAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciggJ3Vua25vd24ga2V5OiAlcycgJSggc3RyKCBr ZXkgKSApICkKKyAgICAgICAgICAgIGVsaWYga2V5IG5vdCBpbiB2YWxpZF9idXRfdW5lZGl0YWJs ZV9rZXlzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgI3JhaXNl IEF0dHJpYnV0ZUVycm9yKCAndW5rbm93biBrZXk6ICVzJyAlKCBzdHIoIGtleSApICkgKQo9MjAK ICAgICAgICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkWyBrZXkgXSA9M0QgdmFsCiAgICAgICAgIHJl dHVybiB2YWxpZGF0ZWRfcGF5bG9hZAoKZGlmZiAtciAzMTM1N2VkZjI2MGVhNmIyNTlkYzY4MjMw ZjMwODNiM2YwZmFmY2EwIC1yIDE0Nzk2YWM4NjdlYjBjN2RjNTE3ZWVkPQphMWVjODI1MGM5Yjg2 OGJiNyBsaWIvZ2FsYXh5L3dvcmtmbG93L3J1bl9yZXF1ZXN0LnB5Ci0tLSBhL2xpYi9nYWxheHkv d29ya2Zsb3cvcnVuX3JlcXVlc3QucHkKKysrIGIvbGliL2dhbGF4eS93b3JrZmxvdy9ydW5fcmVx dWVzdC5weQpAQCAtMTk2LDcgKzE5Niw3IEBACiAgICAgICAgICMgUGFzc2luZyBhbiBleGlzdGlu ZyBoaXN0b3J5IHRvIHVzZS4KICAgICAgICAgZW5jb2RlZF9oaXN0b3J5X2lkID0zRCBoaXN0b3J5 X3BhcmFtWyA4OiBdCiAgICAgICAgIGhpc3RvcnlfaWQgPTNEIF9fZGVjb2RlX2lkKCB0cmFucywg ZW5jb2RlZF9oaXN0b3J5X2lkLCBtb2RlbF90eXBlPQo9M0QiaGlzdG9yeSIgKQotICAgICAgICBo aXN0b3J5ID0zRCBoaXN0b3J5X21hbmFnZXIub3duZWRfYnlfaWQoIHRyYW5zLCBoaXN0b3J5X2lk LCB0cmFucy49CnVzZXIgKQorICAgICAgICBoaXN0b3J5ID0zRCBoaXN0b3J5X21hbmFnZXIuZ2V0 X293bmVkKCB0cmFucywgaGlzdG9yeV9pZCwgdHJhbnMudXM9CmVyICkKICAgICBlbHNlOgogICAg ICAgICAjIFNlbmQgd29ya2Zsb3cgb3V0cHV0cyB0byBuZXcgaGlzdG9yeS4KICAgICAgICAgaGlz dG9yeSA9M0QgYXBwLm1vZGVsLkhpc3RvcnkobmFtZT0zRGhpc3RvcnlfcGFyYW0sIHVzZXI9M0R0 cmFucy51PQpzZXIpCgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2IzZjBm YWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IHRlc3Qv Y2FzcGVyanMvYXBpLWFub24taGlzdG9yeS1wZXJtaXNzaW9uLXRlc3RzLmpzCi0tLSBhL3Rlc3Qv Y2FzcGVyanMvYXBpLWFub24taGlzdG9yeS1wZXJtaXNzaW9uLXRlc3RzLmpzCisrKyBiL3Rlc3Qv Y2FzcGVyanMvYXBpLWFub24taGlzdG9yeS1wZXJtaXNzaW9uLXRlc3RzLmpzCkBAIC05NSw3ICs5 NSw3IEBACiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnc2hvdyBzaG91bGQgZmFpbCBmb3Ig aGlzdG9yeTogJyArIGhpc3RvcnkubmFtZT0KICk7CiAgICAgICAgIHRoaXMuYXBpLmFzc2VydFJh aXNlcyggZnVuY3Rpb24oKXsKICAgICAgICAgICAgIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCBo aXN0b3J5LmlkICk7Ci0gICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IGFjY2Vzc2libGUg dG8gdGhlIGN1cnJlbnQgdXNlcicsICdzaG93IGZhaT0KbGVkIHdpdGggZXJyb3InICk7CisgICAg ICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IGFjY2Vzc2libGUgYnkgdXNlcicsICdzaG93IGZh aWxlZCB3aXRoIGVycj0Kb3InICk7CiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnY29weWlu ZyBzaG91bGQgZmFpbCBmb3IgaGlzdG9yeSAoaW1wbGljaXQgbXVsdD0KaXBsZSBoaXN0b3JpZXMp OiAnICsgaGlzdG9yeS5uYW1lICk7CiAgICAgICAgIHRoaXMuYXBpLmFzc2VydFJhaXNlcyggZnVu Y3Rpb24oKXsKICAgICAgICAgICAgIHRoaXMuYXBpLmhpc3Rvcmllcy5jcmVhdGUoeyBoaXN0b3J5 X2lkIDogaGlzdG9yeS5pZCB9KTsKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgICAgICAgIHRoaXMu dGVzdC5jb21tZW50KCAnaW5kZXggYW5kIHNob3cgb2YgaGlzdG9yeSBjb250ZW50cyBzaG91bGQg ZmFpbD0KIGZvciBoaXN0b3J5OiAnICsgaGlzdG9yeS5uYW1lICk7CiAgICAgICAgIHRoaXMuYXBp LmFzc2VydFJhaXNlcyggZnVuY3Rpb24oKXsKICAgICAgICAgICAgIHRoaXMuYXBpLmhkYXMuaW5k ZXgoIGhpc3RvcnkuaWQgKTsKLSAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3QgYWNjZXNz aWJsZSB0byB0aGUgY3VycmVudCB1c2VyJywgJ2hkYSBpbmRlPQp4IGZhaWxlZCB3aXRoIGVycm9y JyApOworICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBhY2Nlc3NpYmxlIGJ5IHVzZXIn LCAnaGRhIGluZGV4IGZhaWxlZCB3aXQ9CmggZXJyb3InICk7CiAgICAgICAgIHRoaXMuYXBpLmFz c2VydFJhaXNlcyggZnVuY3Rpb24oKXsKICAgICAgICAgICAgIHRoaXMuYXBpLmhkYXMuc2hvdygg aGlzdG9yeS5pZCwgaGRhc1swXS5pZCApOwotICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5v dCBhY2Nlc3NpYmxlIHRvIHRoZSBjdXJyZW50IHVzZXInLCAnaGRhIHNob3c9CiBmYWlsZWQgd2l0 aCBlcnJvcicgKTsKKyAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3QgYWNjZXNzaWJsZSBi eSB1c2VyJywgJ2hkYSBzaG93IGZhaWxlZCB3aXRoPQogZXJyb3InICk7Cj0yMAogICAgICAgICB0 aGlzLnRlc3QuY29tbWVudCggJ0F0dGVtcHRpbmcgdG8gY29weSBhbiBhY2Nlc3NpYmxlIGhkYSAo ZGVmYXVsdCA9CmlzIGFjY2Vzc2libGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICsgJyBm cm9tIGFuIGluYWNjZXNzaWJsZSBoaXN0b3J5IHNob3VsZCBmYWlsIGZvcjo9CiAnICsgaGlzdG9y eS5uYW1lICk7CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgICAgICBjb250ZW50IDog aGRhc1swXS5pZAogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB0aGlzLmRlYnVnKCB0aGlz Lmpzb25TdHIoIHJldHVybmVkICkgKTsKLSAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3Qg YWNjZXNzaWJsZSB0byB0aGUgY3VycmVudCB1c2VyJywgJ2hkYSBjb3B5PQogZnJvbSBmYWlsZWQg d2l0aCBlcnJvcicgKTsKKyAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3QgYWNjZXNzaWJs ZSBieSB1c2VyJywgJ2hkYSBjb3B5IGZyb20gZmFpbGVkPQogd2l0aCBlcnJvcicgKTsKPTIwCiAg ICAgfQo9MjAKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICB0aGlzLmFwaS5hc3NlcnRSYWlz ZXMoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICB0aGlzLmFwaS5oZGFzLnVwZGF0ZSggaGlzdG9y eS5pZCwgaGRhc1swXS5pZCwgeyBkZWxldGVkOiB0cnVlID0KfSk7CiAgICAgICAgIC8vIGFub24g aGRhIHVwZGF0ZSBmYWlscyB3LyB0aGlzIG1zZyBpZiB0cnlpbmcgdG8gdXBkYXRlIG5vbi1jdXJy ZT0KbnQgaGlzdG9yeSBoZGEKLSAgICAgICAgfSwgNDAzLCAnWW91IG11c3QgYmUgbG9nZ2VkIGlu IHRvIHVwZGF0ZSB0aGlzIGhpc3RvcnknLCAnaGRhIHVwZGF0PQplIGZhaWxlZCB3aXRoIGVycm9y JyApOworICAgICAgICB9LCA0MDMsICdBUEkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgZm9yIHRo aXMgcmVxdWVzdCcsICdoZGEgdXBkYXQ9CmUgZmFpbGVkIHdpdGggZXJyb3InICk7CiAgICAgICAg IHRoaXMudGVzdC5jb21tZW50KCAnaGRhIGRlbGV0aW9uIHNob3VsZCBmYWlsIGZvciBoaXN0b3J5 OiAnICsgaGlzdD0Kb3J5Lm5hbWUgKTsKICAgICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFpc2VzKCBm dW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGRhcy5kZWxldGVfKCBoaXN0b3J5Lmlk LCBoZGFzWzBdLmlkICk7CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgICAgICAgICAvLyBz aG91bGQgZXJyb3IgYmVmb3JlIGl0IGNoZWNrcyB0aGUgaWQKICAgICAgICAgICAgICAgICBjb250 ZW50IDogJ2JsZXInCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwgNDAzLCAnTXVzdCBiZSBs b2dnZWQgaW4gdG8gbWFuYWdlIEdhbGF4eSBoaXN0b3JpZXMnLCAnaGRhIGNvcHkgPQp0byBmYWls ZWQnICk7CisgICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IG93bmVkIGJ5IHVzZXInLCAn aGRhIGNvcHkgdG8gZmFpbGVkJyApOwogICAgIH0KPTIwCiAgICAgZnVuY3Rpb24gdGVzdEFub25J bmFjY2Vzc2libGUoIGhpc3RvcnksIGhkYXMgKXsKCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5 ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgy NTBjOWI4NjhiYjcgdGVzdC9jYXNwZXJqcy9hcGktYW5vbi1oaXN0b3J5LXRlc3RzLmpzCi0tLSBh L3Rlc3QvY2FzcGVyanMvYXBpLWFub24taGlzdG9yeS10ZXN0cy5qcworKysgYi90ZXN0L2Nhc3Bl cmpzL2FwaS1hbm9uLWhpc3RvcnktdGVzdHMuanMKQEAgLTI2LDkgKzI2LDkgQEAKPTIwCiAgICAg ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhbm9uIGZvcmJpZGRl bgogICAgICAgICAvL1RPRE86IHdoeSBub3QgcmV0dXJuIHRoZSBjdXJyZW50IGhpc3Rvcnk/Ci0g ICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnY2FsbGluZyBzaG93IHdpdGggIm1vc3RfcmVjZW50 bHlfdXNlZCIgc2hvdWxkID0KcmV0dXJuIE5vbmUgZm9yIGFuIGFub24gdXNlcicgKTsKKyAgICAg ICAgdGhpcy50ZXN0LmNvbW1lbnQoICdjYWxsaW5nIHNob3cgd2l0aCAibW9zdF9yZWNlbnRseV91 c2VkIiBzaG91bGQgPQpyZXR1cm4gY3VycmVudCBoaXN0b3J5IGZvciBhbiBhbm9uIHVzZXInICk7 CiAgICAgICAgIHZhciByZWNlbnQgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCAnbW9zdF9y ZWNlbnRseV91c2VkJyApOwotICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0KCByZWNlbnQgPTNEPTNE PTNEIG51bGwsICdtb3N0X3JlY2VudGx5X3VzZWQgcmV0dXI9Cm5lZCBOb25lJyApOworICAgICAg ICB0aGlzLnRlc3QuYXNzZXJ0KCByZWNlbnQuaWQgPTNEPTNEPTNEIGhpc3RvcnlTaG93LmlkLCAn bW9zdF9yZWNlbnQ9Cmx5X3VzZWQgcmV0dXJuZWQgY3VycmVudCcgKTsKPTIwCiAgICAgICAgIHRo aXMudGVzdC5jb21tZW50KCAnQ2FsbGluZyBjcmVhdGUgc2hvdWxkIGZhaWwgZm9yIGFuIGFub255 bW91cyB1cz0KZXInICk7CiAgICAgICAgIHRoaXMuYXBpLmFzc2VydFJhaXNlcyggZnVuY3Rpb24o KXsKCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAx NDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBjOWI4NjhiYjcgdGVzdC9jYXNwZXJqcy9h cGktaGRhLXRlc3RzLmpzCi0tLSBhL3Rlc3QvY2FzcGVyanMvYXBpLWhkYS10ZXN0cy5qcworKysg Yi90ZXN0L2Nhc3BlcmpzL2FwaS1oZGEtdGVzdHMuanMKQEAgLTk3LDE4ICs5NywxMSBAQAo9MjAK ICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVQREFURQog ICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gaWRpb3QgcHJv b2ZpbmcKLSAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGluZyB0byB0aGUgY3VycmVu dCB2YWx1ZSBzaG91bGQgcmV0dXJuIG5vPQogdmFsdWUgKG5vIGNoYW5nZSknICk7Ci0gICAgICAg IGhkYVNob3cgPTNEIHRoaXMuYXBpLmhkYXMuc2hvdyggbGFzdEhpc3RvcnkuaWQsIGZpcnN0SGRh LmlkICk7Ci0gICAgICAgIHZhciByZXR1cm5lZCA9M0QgdGhpcy5hcGkuaGRhcy51cGRhdGUoIGxh c3RIaXN0b3J5LmlkLCBmaXJzdEhkYS5pZD0KLCB7Ci0gICAgICAgICAgICBuYW1lIDogaGRhU2hv dy5uYW1lCi0gICAgICAgIH0pOwotICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0KCB0aGlzLmNvdW50 S2V5cyggcmV0dXJuZWQgKSA9M0Q9M0Q9M0QgMCwgIk5vIGNoYW49CmdlZCByZXR1cm5lZDogIiAr IHRoaXMuanNvblN0ciggcmV0dXJuZWQgKSApOwotCiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50 KCAndXBkYXRpbmcgdXNpbmcgYSBub25zZW5zZSBrZXkgc2hvdWxkIE5PVCBmYWlsID0Kd2l0aCBh biBlcnJvcicgKTsKICAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBpLmhkYXMudXBkYXRlKCBs YXN0SGlzdG9yeS5pZCwgZmlyc3RIZGEuaWQsIHsKICAgICAgICAgICAgIGtvbmFtaUNvZGUgOiAn dXVkZGxybHJiYScKICAgICAgICAgfSk7Ci0gICAgICAgIHRoaXMudGVzdC5hc3NlcnQoIHRoaXMu Y291bnRLZXlzKCByZXR1cm5lZCApID0zRD0zRD0zRCAwLCAiTm8gY2hhbj0KZ2VkIHJldHVybmVk OiAiICsgdGhpcy5qc29uU3RyKCByZXR1cm5lZCApICk7CisgICAgICAgIHRoaXMudGVzdC5hc3Nl cnQoIHJldHVybmVkLmlkID0zRD0zRD0zRCBmaXJzdEhkYS5pZCApOwo9MjAKICAgICAgICAgdGhp cy50ZXN0LmNvbW1lbnQoICd1cGRhdGluZyBieSBhdHRlbXB0aW5nIHRvIGNoYW5nZSB0eXBlIHNo b3VsZCBjPQphdXNlIGFuIGVycm9yJyApOwogICAgICAgICB0aGlzLmFwaS5hc3NlcnRSYWlzZXMo IGZ1bmN0aW9uKCl7CkBAIC0xMTYsNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICAvL25hbWUg OiBmYWxzZQogICAgICAgICAgICAgICAgIGRlbGV0ZWQgOiAnc3VyZSB3aHkgbm90JwogICAgICAg ICAgICAgfSk7Ci0gICAgICAgIH0sIDQwMCwgJ2RlbGV0ZWQgbXVzdCBiZSBhIGJvb2xlYW4nLCAn Y2hhbmdpbmcgZGVsZXRlZCB0eXBlIGZhaWxlZD0KJyApOworICAgICAgICB9LCA0MDAsICJtdXN0 IGJlIGEgdHlwZTogPHR5cGUgJ2Jvb2wnPiIsICdjaGFuZ2luZyBkZWxldGVkIHR5cGUgZmE9Cmls ZWQnICk7Cj0yMAogICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4gbmFtZQogICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cg Y2hhbmdpbmcgdGhlIG5hbWUnICk7CkBAIC0xMjcsMTMgKzEyMCw4IEBACiAgICAgICAgIGhkYVNo b3cgPTNEIHRoaXMuYXBpLmhkYXMuc2hvdyggbGFzdEhpc3RvcnkuaWQsIGZpcnN0SGRhLmlkICk7 CiAgICAgICAgIHRoaXMudGVzdC5hc3NlcnQoIGhkYVNob3cubmFtZSA9M0Q9M0Q9M0QgJ05ldyBu YW1lJywgIk5hbWUgc3VjY2Vzcz0KZnVsbHkgc2V0IHZpYSB1cGRhdGU6ICIgKyBoZGFTaG93Lm5h bWUgKTsKPTIwCi0gICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAndXBkYXRlIHNob3VsZCBzYW5p dGl6ZSBhbnkgbmV3IG5hbWUnICk7Ci0gICAgICAgIHJldHVybmVkID0zRCB0aGlzLmFwaS5oZGFz LnVwZGF0ZSggbGFzdEhpc3RvcnkuaWQsIGZpcnN0SGRhLmlkLCB7Ci0gICAgICAgICAgICBuYW1l IDogJ05ldyBuYW1lPHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCIgc3JjPTNEImJsZXIi Pj0KYWxlcnQoImJsYWgiKTs8L3NjcmlwdD4nCi0gICAgICAgIH0pOwotICAgICAgICAvL3RoaXMu ZGVidWcoICdyZXR1cm5lZDpcbicgKyB0aGlzLmpzb25TdHIoIHJldHVybmVkICkgKTsKLSAgICAg ICAgaGRhU2hvdyA9M0QgdGhpcy5hcGkuaGRhcy5zaG93KCBsYXN0SGlzdG9yeS5pZCwgZmlyc3RI ZGEuaWQgKTsKLSAgICAgICAgdGhpcy50ZXN0LmFzc2VydCggaGRhU2hvdy5uYW1lID0zRD0zRD0z RCAnTmV3IG5hbWUnLCAiVXBkYXRlIHNhbml0PQppemVkIG5hbWU6ICIgKyBoZGFTaG93Lm5hbWUg KTsKKyAgICAgICAgLy8gbm8gc2FuaXRpemluZyBpbnB1dAorICAgICAgICAvL3RoaXMudGVzdC5j b21tZW50KCAndXBkYXRlIHNob3VsZCBzYW5pdGl6ZSBhbnkgbmV3IG5hbWUnICk7Cj0yMAogICAg ICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cgdW5pY29kZSBpbiBu YW1lcycgKTsKICAgICAgICAgdmFyIHVuaWNvZGVOYW1lID0zRCAnPUQwPUEwPUQwPUI2PUQwPUI1 PUQwPUIyPUQxPTgxPUQwPUJBPUQwPUI4PUQwPQo9QjkgPUQxPTgxPUQwPUIwPUQwPUJGPUQwPUJF PUQwPUIzPUQwPUI4JzsKQEAgLTE5NSwyNyArMTgzLDIxIEBACiAgICAgICAgICAgICAiZ2Vub21l X2J1aWxkIHN1Y2Nlc3NmdWxseSBzZXQgdmlhIHVwZGF0ZTogIiArIGhkYVNob3cuZ2Vub21lXz0K YnVpbGQgKTsKICAgICAgICAgdGhpcy50ZXN0LmFzc2VydCggaGRhU2hvdy5tZXRhZGF0YV9kYmtl eSA9M0Q9M0Q9M0QgJ2hnMTgnLAogICAgICAgICAgICAgIm1ldGFkYXRhX2Ria2V5IHN1Y2Nlc3Nm dWxseSBzZXQgdmlhIHRoZSBzYW1lIHVwZGF0ZTogIiArIGhkYVM9Cmhvdy5tZXRhZGF0YV9kYmtl eSApOwotICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgc2FuaXRpemUg YW55IGdlbm9tZV9idWlsZCcgKTsKLSAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBpLmhkYXMu dXBkYXRlKCBsYXN0SGlzdG9yeS5pZCwgZmlyc3RIZGEuaWQsIHsKLSAgICAgICAgICAgIGdlbm9t ZV9idWlsZCA6ICdoZzE4PHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCIgc3JjPTNEImJs PQplciI+YWxlcnQoImJsYWgiKTs8L3NjcmlwdD4nCi0gICAgICAgIH0pOworCisgICAgICAgIC8v IG5vIHNhbml0aXppbmcgaW5wdXQKKyAgICAgICAgLy90aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0 ZSBzaG91bGQgc2FuaXRpemUgYW55IGdlbm9tZV9idWlsZCcgKTsKKworICAgICAgICAvL1RPRE86 IHRoaXMgYWN0dWFsbHkgdGhyb3dzIGFuICdpbnZhbGlkIGdlbm9tZV9idWlsZCcgZXJyb3IKKyAg ICAgICAgLy90aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cgdW5pY29kZSBp biBnZW5vbWUgYnVpbGRzPQonICk7CisgICAgICAgIC8vdmFyIHVuaWNvZGVCdWlsZCA9M0QgJz1E MD1BMD1EMD1CNj1EMD1CNT1EMD1CMj1EMT04MT1EMD1CQT1EMD1COD0KPUQwPUI5MTgnOworICAg ICAgICAvL3JldHVybmVkID0zRCB0aGlzLmFwaS5oZGFzLnVwZGF0ZSggbGFzdEhpc3RvcnkuaWQs IGZpcnN0SGRhLmlkLCB7CisgICAgICAgIC8vICAgIGdlbm9tZV9idWlsZCA6IHVuaWNvZGVCdWls ZAorICAgICAgICAvL30pOwogICAgICAgICAvL3RoaXMuZGVidWcoICdyZXR1cm5lZDpcbicgKyB0 aGlzLmpzb25TdHIoIHJldHVybmVkICkgKTsKLSAgICAgICAgaGRhU2hvdyA9M0QgdGhpcy5hcGku aGRhcy5zaG93KCBsYXN0SGlzdG9yeS5pZCwgZmlyc3RIZGEuaWQgKTsKLSAgICAgICAgdGhpcy50 ZXN0LmFzc2VydCggaGRhU2hvdy5nZW5vbWVfYnVpbGQgPTNEPTNEPTNEICdoZzE4JywKLSAgICAg ICAgICAgICJVcGRhdGUgc2FuaXRpemVkIGdlbm9tZV9idWlsZDogIiArIGhkYVNob3cuZ2Vub21l X2J1aWxkICk7Ci0gICAgICAgIHRoaXMudGVzdC5hc3NlcnQoIGhkYVNob3cubWV0YWRhdGFfZGJr ZXkgPTNEPTNEPTNEICdoZzE4JywKLSAgICAgICAgICAgICJtZXRhZGF0YV9kYmtleSBzdWNjZXNz ZnVsbHkgc2V0IHZpYSB0aGUgc2FtZSB1cGRhdGU6ICIgKyBoZGFTPQpob3cubWV0YWRhdGFfZGJr ZXkgKTsKLQotICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cg dW5pY29kZSBpbiBnZW5vbWUgYnVpbGRzJyA9Cik7Ci0gICAgICAgIHZhciB1bmljb2RlQnVpbGQg PTNEICc9RDA9QTA9RDA9QjY9RDA9QjU9RDA9QjI9RDE9ODE9RDA9QkE9RDA9Qjg9Cj1EMD1COTE4 JzsKLSAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBpLmhkYXMudXBkYXRlKCBsYXN0SGlzdG9y eS5pZCwgZmlyc3RIZGEuaWQsIHsKLSAgICAgICAgICAgIGdlbm9tZV9idWlsZCA6IHVuaWNvZGVC dWlsZAotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5kZWJ1ZyggJ3JldHVybmVkOlxuJyArIHRo aXMuanNvblN0ciggcmV0dXJuZWQgKSApOwotICAgICAgICBoZGFTaG93ID0zRCB0aGlzLmFwaS5o ZGFzLnNob3coIGxhc3RIaXN0b3J5LmlkLCBmaXJzdEhkYS5pZCApOwotICAgICAgICB0aGlzLmRl YnVnKCAnaGRhU2hvdzpcbicgKyB0aGlzLmpzb25TdHIoIGhkYVNob3cgKSApOwotICAgICAgICB0 aGlzLnRlc3QuYXNzZXJ0KCBoZGFTaG93Lmdlbm9tZV9idWlsZCA9M0Q9M0Q9M0QgdW5pY29kZUJ1 aWxkLAotICAgICAgICAgICAgIlVwZGF0ZSBhY2NlcHRlZCB1bmljb2RlIGdlbm9tZV9idWlsZDog IiArIGhkYVNob3cuZ2Vub21lX2J1aWw9CmQgKTsKKyAgICAgICAgLy9oZGFTaG93ID0zRCB0aGlz LmFwaS5oZGFzLnNob3coIGxhc3RIaXN0b3J5LmlkLCBmaXJzdEhkYS5pZCApOworICAgICAgICAv L3RoaXMuZGVidWcoICdoZGFTaG93OlxuJyArIHRoaXMuanNvblN0ciggaGRhU2hvdyApICk7Cisg ICAgICAgIC8vdGhpcy50ZXN0LmFzc2VydCggaGRhU2hvdy5nZW5vbWVfYnVpbGQgPTNEPTNEPTNE IHVuaWNvZGVCdWlsZCwKKyAgICAgICAgLy8gICAgIlVwZGF0ZSBhY2NlcHRlZCB1bmljb2RlIGdl bm9tZV9idWlsZDogIiArIGhkYVNob3cuZ2Vub21lX2J1PQppbGQgKTsKPTIwCiAgICAgICAgIC8v IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLj0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBtaXNjX2luZm8vaW5mbwogICAg ICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cgY2hhbmdpbmcgdGhl IG1pc2NfaW5mbycgKTsKQEAgLTIyOCwxNSArMjEwLDggQEAKICAgICAgICAgdGhpcy50ZXN0LmFz c2VydCggaGRhU2hvdy5taXNjX2luZm8gPTNEPTNEPTNEIG5ld0luZm8sCiAgICAgICAgICAgICAi bWlzY19pbmZvIHN1Y2Nlc3NmdWxseSBzZXQgdmlhIHVwZGF0ZTogIiArIGhkYVNob3cubWlzY19p bmZvID0KKTsKPTIwCi0gICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAndXBkYXRlIHNob3VsZCBz YW5pdGl6ZSBhbnkgbWlzY19pbmZvJyApOwotICAgICAgICB2YXIgbmV3SW5mbyA9M0QgJ1lvdVwn cmUgZ29pbmcgdG8gZ2V0IGhvcC1vbnMuJzsKLSAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBp LmhkYXMudXBkYXRlKCBsYXN0SGlzdG9yeS5pZCwgZmlyc3RIZGEuaWQsIHsKLSAgICAgICAgICAg IG1pc2NfaW5mbyA6IG5ld0luZm8gKyAnPHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCIg c3JjPTNEPQoiYmxlciI+YWxlcnQoImJsYWgiKTs8L3NjcmlwdD4nCi0gICAgICAgIH0pOwotICAg ICAgICAvL3RoaXMuZGVidWcoICdyZXR1cm5lZDpcbicgKyB0aGlzLmpzb25TdHIoIHJldHVybmVk ICkgKTsKLSAgICAgICAgaGRhU2hvdyA9M0QgdGhpcy5hcGkuaGRhcy5zaG93KCBsYXN0SGlzdG9y eS5pZCwgZmlyc3RIZGEuaWQgKTsKLSAgICAgICAgdGhpcy50ZXN0LmFzc2VydCggaGRhU2hvdy5t aXNjX2luZm8gPTNEPTNEPTNEIG5ld0luZm8sCi0gICAgICAgICAgICAiVXBkYXRlIHNhbml0aXpl ZCBtaXNjX2luZm86ICIgKyBoZGFTaG93Lm1pc2NfaW5mbyApOworICAgICAgICAvLyBubyBzYW5p dGl6aW5nIGlucHV0CisgICAgICAgIC8vdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGUgc2hvdWxk IHNhbml0aXplIGFueSBtaXNjX2luZm8nICk7Cj0yMAogICAgICAgICB0aGlzLnRlc3QuY29tbWVu dCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cgdW5pY29kZSBpbiBtaXNjX2luZm8nICk7CiAgICAgICAg IHZhciB1bmljb2RlSW5mbyA9M0QgJz1FQz05Nz1BQz1FQj1CMz1CNCEnOwpAQCAtMjYwLDE0ICsy MzUsOCBAQAogICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0KCBoZGFTaG93LmFubm90YXRpb24gPTNE PTNEPTNEIG5ld0Fubm90YXRpb24sCiAgICAgICAgICAgICAiQW5ub3RhdGlvbiBzdWNjZXNzZnVs bHkgc2V0IHZpYSB1cGRhdGU6ICIgKyBoZGFTaG93LmFubm90YXRpbz0KbiApOwo9MjAKLSAgICAg ICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGUgc2hvdWxkIHNhbml0aXplIGFueSBuZXcgYW5u b3RhdGlvbicgKTsKLSAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBpLmhkYXMudXBkYXRlKCBs YXN0SGlzdG9yeS5pZCwgZmlyc3RIZGEuaWQsIHsKLSAgICAgICAgICAgIGFubm90YXRpb24gOiAn TmV3IGFubm90YXRpb248c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0IiBzPQpyYz0zRCJi bGVyIj5hbGVydCgiYmxhaCIpOzwvc2NyaXB0PicKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vdGhp cy5kZWJ1ZyggJ3JldHVybmVkOlxuJyArIHRoaXMuanNvblN0ciggcmV0dXJuZWQgKSApOwotICAg ICAgICBoZGFTaG93ID0zRCB0aGlzLmFwaS5oZGFzLnNob3coIGxhc3RIaXN0b3J5LmlkLCBmaXJz dEhkYS5pZCApOwotICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0KCBoZGFTaG93LmFubm90YXRpb24g PTNEPTNEPTNEICdOZXcgYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAiVXBkYXRlIHNhbml0aXpl ZCBhbm5vdGF0aW9uOiAiICsgaGRhU2hvdy5hbm5vdGF0aW9uICk7CisgICAgICAgIC8vIG5vIHNh bml0aXppbmcgaW5wdXQKKyAgICAgICAgLy90aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0ZSBzaG91 bGQgc2FuaXRpemUgYW55IG5ldyBhbm5vdGF0aW9uJyApOwo9MjAKICAgICAgICAgdGhpcy50ZXN0 LmNvbW1lbnQoICd1cGRhdGUgc2hvdWxkIGFsbG93IHVuaWNvZGUgaW4gYW5ub3RhdGlvbnMnICk7 CiAgICAgICAgIHZhciB1bmljb2RlQW5ub3RhdGlvbiA9M0QgJz1FMz04MT04QT1FOT1BMT05OD1F Mz04MT04ND1FMz04MT1BRj1FMz0KPTgwPTgxPUUzPTgxPTlEPUUzPTgyPThDPUUzPTgxPThDPUU4 PTkwPUJEPUU0PUI4PThCPUUzPTgxPTk1PUUzPTgxPTlCPUUzPTgxPQo9QUE9RTM9ODE9ODQnOwpA QCAtMzE2LDI1ICsyODUsMzIgQEAKICAgICAgICAgc3BhY2VnaG9zdC50ZXN0LmNvbW1lbnQoICdB IGJhZCBpZCBzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB1c2luPQpnIHVuZGVsZXRlJyApOwo9 MjAKICAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGluZyBieSBhdHRlbXB0aW5nIHRv IGNoYW5nZSB0eXBlIHNob3VsZCBjPQphdXNlIGFuIGVycm9yJyApOwotICAgICAgICBbICduYW1l JywgJ2Fubm90YXRpb24nLCAnZ2Vub21lX2J1aWxkJywgJ21pc2NfaW5mbycgXS5mb3JFYWNoKCBm dW49CmN0aW9uKCBrZXkgKXsKKyAgICAgICAgWyAnbmFtZScsICdtaXNjX2luZm8nIF0uZm9yRWFj aCggZnVuY3Rpb24oIGtleSApewogICAgICAgICAgICAgdmFyIHVwZGF0ZWRBdHRycyA9M0Qge307 CiAgICAgICAgICAgICB1cGRhdGVkQXR0cnNbIGtleSBdID0zRCBmYWxzZTsKICAgICAgICAgICAg IHNwYWNlZ2hvc3QuYXBpLmFzc2VydFJhaXNlcyggZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAg ICByZXR1cm5lZCA9M0Qgc3BhY2VnaG9zdC5hcGkuaGRhcy51cGRhdGUoIGhkYVNob3cuaGlzdG9y eV9pPQpkLCBoZGFTaG93LmlkLCB1cGRhdGVkQXR0cnMgKTsKLSAgICAgICAgICAgIH0sIDQwMCwg a2V5ICsgJyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuaWNvZGUnLCAndHlwZSB2YWxpZGF0aW9uPQog ZXJyb3InICk7CisgICAgICAgICAgICB9LCA0MDAsICJtdXN0IGJlIGEgdHlwZTogPHR5cGUgJ2Jh c2VzdHJpbmcnPiIsICd0eXBlIHZhbGlkYXRpbz0KbiBlcnJvcicgKTsKICAgICAgICAgfSk7Cisg ICAgICAgIHNwYWNlZ2hvc3QuYXBpLmFzc2VydFJhaXNlcyggZnVuY3Rpb24oKXsKKyAgICAgICAg ICAgIHJldHVybmVkID0zRCBzcGFjZWdob3N0LmFwaS5oZGFzLnVwZGF0ZSggaGRhU2hvdy5oaXN0 b3J5X2lkLCBoPQpkYVNob3cuaWQsIHsgYW5ub3RhdGlvbjogZmFsc2UgfSApOworICAgICAgICB9 LCA0MDAsICJtdXN0IGJlIGEgdHlwZTogKDx0eXBlICdiYXNlc3RyaW5nJz4sIDx0eXBlICdOb25l VHlwZSc+KSI9CiwgJ3R5cGUgdmFsaWRhdGlvbiBlcnJvcicgKTsKKyAgICAgICAgc3BhY2VnaG9z dC5hcGkuYXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpeworICAgICAgICAgICAgcmV0dXJuZWQgPTNE IHNwYWNlZ2hvc3QuYXBpLmhkYXMudXBkYXRlKCBoZGFTaG93Lmhpc3RvcnlfaWQsIGg9CmRhU2hv dy5pZCwgeyBnZW5vbWVfYnVpbGQ6IGZhbHNlIH0gKTsKKyAgICAgICAgfSwgNDAwLCAiaW52YWxp ZCByZWZlcmVuY2UiLCAndHlwZSB2YWxpZGF0aW9uIGVycm9yJyApOwogICAgICAgICBbICdkZWxl dGVkJywgJ3Zpc2libGUnIF0uZm9yRWFjaCggZnVuY3Rpb24oIGtleSApewogICAgICAgICAgICAg dmFyIHVwZGF0ZWRBdHRycyA9M0Qge307CiAgICAgICAgICAgICB1cGRhdGVkQXR0cnNbIGtleSBd ID0zRCAnc3RyYWFhbmcnOwogICAgICAgICAgICAgc3BhY2VnaG9zdC5hcGkuYXNzZXJ0UmFpc2Vz KCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgIHJldHVybmVkID0zRCBzcGFjZWdob3N0LmFw aS5oZGFzLnVwZGF0ZSggaGRhU2hvdy5oaXN0b3J5X2k9CmQsIGhkYVNob3cuaWQsIHVwZGF0ZWRB dHRycyApOwotICAgICAgICAgICAgfSwgNDAwLCBrZXkgKyAnIG11c3QgYmUgYSBib29sZWFuJywg J3R5cGUgdmFsaWRhdGlvbiBlcnJvcicgKTsKKyAgICAgICAgICAgIH0sIDQwMCwgIm11c3QgYmUg YSB0eXBlOiA8dHlwZSAnYm9vbCc+IiwgJ3R5cGUgdmFsaWRhdGlvbiBlcnJvPQpyJyApOwogICAg ICAgICB9KTsKLSAgICAgICAgWyAneW91XCdyZSBpdCcsIFsgdHJ1ZSBdIF0uZm9yRWFjaCggZnVu Y3Rpb24oIGJhZFZhbCApewotICAgICAgICAgICAgc3BhY2VnaG9zdC5hcGkuYXNzZXJ0UmFpc2Vz KCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJldHVybmVkID0zRCBzcGFjZWdob3N0LmFw aS5oZGFzLnVwZGF0ZSggaGRhU2hvdy5oaXN0b3J5X2k9CmQsIGhkYVNob3cuaWQsIHsgdGFnczog YmFkVmFsIH0pOwotICAgICAgICAgICAgfSwgNDAwLCAndGFncyBtdXN0IGJlIGEgbGlzdCcsICd0 eXBlIHZhbGlkYXRpb24gZXJyb3InICk7Ci0gICAgICAgIH0pOworICAgICAgICBzcGFjZWdob3N0 LmFwaS5hc3NlcnRSYWlzZXMoIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICByZXR1cm5lZCA9M0Qg c3BhY2VnaG9zdC5hcGkuaGRhcy51cGRhdGUoIGhkYVNob3cuaGlzdG9yeV9pZCwgaD0KZGFTaG93 LmlkLCB7IHRhZ3M6ICd5b3VcJ3JlIGl0JyB9KTsKKyAgICAgICAgfSwgNDAwLCAibXVzdCBiZSBh IHR5cGU6IDx0eXBlICdsaXN0Jz4iLCAndHlwZSB2YWxpZGF0aW9uIGVycm9yJyApOworICAgICAg ICBzcGFjZWdob3N0LmFwaS5hc3NlcnRSYWlzZXMoIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICBy ZXR1cm5lZCA9M0Qgc3BhY2VnaG9zdC5hcGkuaGRhcy51cGRhdGUoIGhkYVNob3cuaGlzdG9yeV9p ZCwgaD0KZGFTaG93LmlkLCB7IHRhZ3M6IFsgdHJ1ZSBdIH0pOworICAgICAgICB9LCA0MDAsICJt dXN0IGJlIGEgdHlwZTogPHR5cGUgJ2Jhc2VzdHJpbmcnPiIsICd0eXBlIHZhbGlkYXRpb24gZXI9 CnJvcicgKTsKPTIwCiAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSBERUxFVEUKICAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICdjYWxsaW5nIGRlbGV0ZSBv biBhbiBoZGEgc2hvdWxkIG1hcmsgaXQgYXMgZGVsPQpldGVkIGJ1dCBub3QgY2hhbmdlIHRoZSBo aXN0b3J5IHNpemUnICk7CgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBmMzA4M2Iz ZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4YmI3IHRl c3QvY2FzcGVyanMvYXBpLWhpc3RvcnktcGVybWlzc2lvbi10ZXN0cy5qcwotLS0gYS90ZXN0L2Nh c3BlcmpzL2FwaS1oaXN0b3J5LXBlcm1pc3Npb24tdGVzdHMuanMKKysrIGIvdGVzdC9jYXNwZXJq cy9hcGktaGlzdG9yeS1wZXJtaXNzaW9uLXRlc3RzLmpzCkBAIC01Niw3ICs1Niw3IEBACiAgICAg ICAgIHRoaXMuZGVidWcoIHRoaXMuanNvblN0ciggcmV0dXJuZWQgKSApOwogICAgICAgICBhY2Nl c3NpYmxlSGlzdG9yeSA9M0QgdGhpcy5hcGkuaGlzdG9yaWVzLnNob3coIGFjY2Vzc2libGVIaXN0 b3J5Lmk9CmQgKTsKICAgICAgICAgdGhpcy50ZXN0LmFzc2VydCggdGhpcy5oYXNLZXlzKCBhY2Nl c3NpYmxlSGlzdG9yeSwgWyAndXNlcm5hbWVfYW5kPQpfc2x1ZycgXSApLAotICAgICAgICAgICAg J0hhcyB0aGUgcHJvcGVyIGtleXMnICk7CisgICAgICAgICAgICAnSGFzIHVzZXJuYW1lX2FuZF9z bHVnJyApOwogICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0KCBhY2Nlc3NpYmxlSGlzdG9yeS5zbHVn ID0zRD0zRD0zRCAnYWNjZXNzaWJsZScsCiAgICAgICAgICAgICAnc2x1ZyBpcyBub3QgbnVsbDog JyArIGFjY2Vzc2libGVIaXN0b3J5LnNsdWcgKTsKICAgICAgICAgdGhpcy50ZXN0LmFzc2VydCgg YWNjZXNzaWJsZUhpc3RvcnkuaW1wb3J0YWJsZSwKQEAgLTg2LDcgKzg2LDcgQEAKPTIwCiAgICAg fSk7Cj0yMAotICAgIC8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVw bG9hZCBzb21lIGZpbGVzCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIHVwbG9hZCBzb21lIGZpbGVzCiAgICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpewog ICAgICAgICB0aGlzLmFwaS50b29scy50aGVuVXBsb2FkKCBpbmFjY2Vzc2libGVIaXN0b3J5Lmlk LCB7IGZpbGVwYXRoOiAnLi49Ci8uLi90ZXN0LWRhdGEvMS5iZWQnIH0pOwogICAgICAgICB0aGlz LmFwaS50b29scy50aGVuVXBsb2FkKCAgIGFjY2Vzc2libGVIaXN0b3J5LmlkLCB7IGZpbGVwYXRo OiAnLi49Ci8uLi90ZXN0LWRhdGEvMS5iZWQnIH0pOwpAQCAtMTQ0LDIwICsxNDQsMjAgQEAKICAg ICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICdzaG93IHNob3VsZCBmYWlsIGZvciBoaXN0b3J5OiAn ICsgaGlzdG9yeS5uYW1lPQogKTsKICAgICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFpc2VzKCBmdW5j dGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGlzdG9yaWVzLnNob3coIGhpc3RvcnkuaWQg KTsKLSAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3QgYWNjZXNzaWJsZSB0byB0aGUgY3Vy cmVudCB1c2VyJywgJ3Nob3cgZmFpPQpsZWQgd2l0aCBlcnJvcicgKTsKKyAgICAgICAgfSwgNDAz LCAnSGlzdG9yeSBpcyBub3QgYWNjZXNzaWJsZSBieSB1c2VyJywgJ3Nob3cgZmFpbGVkIHdpdGgg ZXJyPQpvcicgKTsKICAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICdjb3B5aW5nIHNob3VsZCBm YWlsIGZvciBoaXN0b3J5OiAnICsgaGlzdG9yeS5uPQphbWUgKTsKICAgICAgICAgdGhpcy5hcGku YXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGlzdG9yaWVz LmNyZWF0ZSh7IGhpc3RvcnlfaWQgOiBoaXN0b3J5LmlkIH0pOwotICAgICAgICB9LCA0MDMsICdI aXN0b3J5IGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjdXJyZW50IHVzZXInLCAnY29weSBmYWk9 CmxlZCB3aXRoIGVycm9yJyApOworICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBhY2Nl c3NpYmxlIGJ5IHVzZXInLCAnY29weSBmYWlsZWQgd2l0aCBlcnI9Cm9yJyApOwo9MjAKICAgICAg ICAgLy8gcmVhZCBmdW5jdGlvbnMgZm9yIGhpc3RvcnkgY29udGVudHMKICAgICAgICAgdGhpcy50 ZXN0LmNvbW1lbnQoICdpbmRleCBhbmQgc2hvdyBvZiBoaXN0b3J5IGNvbnRlbnRzIHNob3VsZCBm YWlsPQogZm9yIGhpc3Rvcnk6ICcgKyBoaXN0b3J5Lm5hbWUgKTsKICAgICAgICAgdGhpcy5hcGku YXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGRhcy5pbmRl eCggaGlzdG9yeS5pZCApOwotICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBhY2Nlc3Np YmxlIHRvIHRoZSBjdXJyZW50IHVzZXInLCAnaGRhIGluZGU9CnggZmFpbGVkIHdpdGggZXJyb3In ICk7CisgICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IGFjY2Vzc2libGUgYnkgdXNlcics ICdoZGEgaW5kZXggZmFpbGVkIHdpdD0KaCBlcnJvcicgKTsKICAgICAgICAgdGhpcy5hcGkuYXNz ZXJ0UmFpc2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGRhcy5zaG93KCBo aXN0b3J5LmlkLCBoZGFzWzBdLmlkICk7Ci0gICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90 IGFjY2Vzc2libGUgdG8gdGhlIGN1cnJlbnQgdXNlcicsICdoZGEgc2hvdz0KIGZhaWxlZCB3aXRo IGVycm9yJyApOworICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBhY2Nlc3NpYmxlIGJ5 IHVzZXInLCAnaGRhIHNob3cgZmFpbGVkIHdpdGg9CiBlcnJvcicgKTsKPTIwCiAgICAgICAgIHRo aXMudGVzdC5jb21tZW50KCAnQXR0ZW1wdGluZyB0byBjb3B5IGFuIGFjY2Vzc2libGUgaGRhIChk ZWZhdWx0ID0KaXMgYWNjZXNzaWJsZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnIGZy b20gYW4gaW5hY2Nlc3NpYmxlIGhpc3Rvcnkgc2hvdWxkIGZhaWwgZm9yOj0KICcgKyBoaXN0b3J5 Lm5hbWUgKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRlbnQgOiBo ZGFzWzBdLmlkCiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHRoaXMuZGVidWcoIHRoaXMu anNvblN0ciggcmV0dXJuZWQgKSApOwotICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBh Y2Nlc3NpYmxlIHRvIHRoZSBjdXJyZW50IHVzZXInLCAnaGRhIGNvcHk9CiBmcm9tIGZhaWxlZCB3 aXRoIGVycm9yJyApOworICAgICAgICB9LCA0MDMsICdIaXN0b3J5IGlzIG5vdCBhY2Nlc3NpYmxl IGJ5IHVzZXInLCAnaGRhIGNvcHkgZnJvbSBmYWlsZWQ9CiB3aXRoIGVycm9yJyApOwo9MjAKICAg ICB9Cj0yMApAQCAtMTc3LDIwICsxNzcsMjAgQEAKICAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQo ICd1cGRhdGUgc2hvdWxkIGZhaWwgZm9yIGhpc3Rvcnk6ICcgKyBoaXN0b3J5Lm5hPQptZSApOwog ICAgICAgICB0aGlzLmFwaS5hc3NlcnRSYWlzZXMoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICB0 aGlzLmFwaS5oaXN0b3JpZXMudXBkYXRlKCBoaXN0b3J5LmlkLCB7IGRlbGV0ZWQ6IHRydWUgfSk7 Ci0gICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IG93bmVkIGJ5IHRoZSBjdXJyZW50IHVz ZXInLCAndXBkYXRlIGZhaWxlZD0KIHdpdGggZXJyb3InICk7CisgICAgICAgIH0sIDQwMywgJ0hp c3RvcnkgaXMgbm90IG93bmVkIGJ5IHVzZXInLCAndXBkYXRlIGZhaWxlZCB3aXRoIGVycm9yJz0K ICk7CiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnZGVsZXRlIHNob3VsZCBmYWlsIGZvciBo aXN0b3J5OiAnICsgaGlzdG9yeS5uYT0KbWUgKTsKICAgICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFp c2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGlzdG9yaWVzLmRlbGV0ZV8o IGhpc3RvcnkuaWQgKTsKLSAgICAgICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3Qgb3duZWQgYnkg dGhlIGN1cnJlbnQgdXNlcicsICdkZWxldGUgZmFpbGVkPQogd2l0aCBlcnJvcicgKTsKKyAgICAg ICAgfSwgNDAzLCAnSGlzdG9yeSBpcyBub3Qgb3duZWQgYnkgdXNlcicsICdkZWxldGUgZmFpbGVk IHdpdGggZXJyb3InPQogKTsKPTIwCiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnaGRhIHVw ZGF0aW5nIHNob3VsZCBmYWlsIGZvciBoaXN0b3J5OiAnICsgaGlzdD0Kb3J5Lm5hbWUgKTsKICAg ICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhp cy5hcGkuaGRhcy51cGRhdGUoIGhpc3RvcnkuaWQsIGhkYXNbMF0uaWQsIHsgZGVsZXRlZDogdHJ1 ZSA9Cn0pOwotICAgICAgICB9LCA0MDMsICdIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uIGlzIG5v dCBvd25lZCBieSB0aGUgY3VycmVudCB1c2U9CnInLCAnaGRhIHVwZGF0ZSBmYWlsZWQgd2l0aCBl cnJvcicgKTsKKyAgICAgICAgfSwgNDAzLCAnSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbiBpcyBu b3Qgb3duZWQgYnkgdXNlcicsICdoZGEgdXBkPQphdGUgZmFpbGVkIHdpdGggZXJyb3InICk7CiAg ICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnaGRhIGRlbGV0aW9uIHNob3VsZCBmYWlsIGZvciBo aXN0b3J5OiAnICsgaGlzdD0Kb3J5Lm5hbWUgKTsKICAgICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFp c2VzKCBmdW5jdGlvbigpewogICAgICAgICAgICAgdGhpcy5hcGkuaGRhcy5kZWxldGVfKCBoaXN0 b3J5LmlkLCBoZGFzWzBdLmlkICk7Ci0gICAgICAgIH0sIDQwMywgJ0hpc3RvcnlEYXRhc2V0QXNz b2NpYXRpb24gaXMgbm90IG93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZT0KcicsICdoZGEgZGVsZXRl IGZhaWxlZCB3aXRoIGVycm9yJyApOworICAgICAgICB9LCA0MDMsICdIaXN0b3J5RGF0YXNldEFz c29jaWF0aW9uIGlzIG5vdCBvd25lZCBieSB1c2VyJywgJ2hkYSBkZWw9CmV0ZSBmYWlsZWQgd2l0 aCBlcnJvcicgKTsKPTIwCiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnY29weWluZyBoZGEg aW50byBoaXN0b3J5IHNob3VsZCBmYWlsIGZvciBoaXN0bz0Kcnk6ICcgKyBoaXN0b3J5Lm5hbWUg KTsKICAgICAgICAgdGhpcy5hcGkuYXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpewpAQCAtMTk5LDcg KzE5OSw3IEBACiAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGVycm9yIGJlZm9yZSBpdCBjaGVj a3MgdGhlIGlkCiAgICAgICAgICAgICAgICAgY29udGVudCA6ICdibGVyJwogICAgICAgICAgICAg fSk7Ci0gICAgICAgIH0sIDQwMywgJ0hpc3RvcnkgaXMgbm90IG93bmVkIGJ5IHRoZSBjdXJyZW50 IHVzZXInLCAnaGRhIGNvcHkgdG8gZj0KYWlsZWQnICk7CisgICAgICAgIH0sIDQwMywgJ0hpc3Rv cnkgaXMgbm90IG93bmVkIGJ5IHVzZXInLCAnaGRhIGNvcHkgdG8gZmFpbGVkJyApOwogICAgIH0K PTIwCiAgICAgZnVuY3Rpb24gdGVzdEluYWNjZXNzaWJsZSggaGlzdG9yeSwgaGRhcyApewoKZGlm ZiAtciAzMTM1N2VkZjI2MGVhNmIyNTlkYzY4MjMwZjMwODNiM2YwZmFmY2EwIC1yIDE0Nzk2YWM4 NjdlYjBjN2RjNTE3ZWVkPQphMWVjODI1MGM5Yjg2OGJiNyB0ZXN0L2Nhc3BlcmpzL2FwaS1oaXN0 b3J5LXRlc3RzLmpzCi0tLSBhL3Rlc3QvY2FzcGVyanMvYXBpLWhpc3RvcnktdGVzdHMuanMKKysr IGIvdGVzdC9jYXNwZXJqcy9hcGktaGlzdG9yeS10ZXN0cy5qcwpAQCAtMTA4LDkgKzEwOCw5IEBA CiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVOREVMRVRFCiAg ICAgdGhpcy50ZXN0LmNvbW1lbnQoICdjYWxsaW5nIHVuZGVsZXRlIHNob3VsZCB1bmRlbGV0ZSB0 aGUgZ2l2ZW4gaGlzdG9yeT0KIGFuZCByZS1pbmNsdWRlIGl0IGluIGluZGV4JyApOwogICAgIHZh ciB1bmRlbGV0ZWRIaXN0b3J5ID0zRCB0aGlzLmFwaS5oaXN0b3JpZXMudW5kZWxldGUoIGNyZWF0 ZWRIaXN0b3J5Lmk9CmQgKTsKLSAgICAvL3RoaXMuZGVidWcoICdyZXR1cm5lZCBmcm9tIHVuZGVs ZXRlOlxuJyArIHRoaXMuanNvblN0ciggdW5kZWxldGVkSGlzPQp0b3J5ICkgKTsKLSAgICB0aGlz LnRlc3QuYXNzZXJ0KCB1bmRlbGV0ZWRIaXN0b3J5ID0zRD0zRD0zRCAnT0snLAotICAgICAgICAi VW5kZWxldGlvbiByZXR1cm5lZCAnT0snIC0gZXZlbiB0aG91Z2ggdGhhdCdzIG5vdCBhIGdyZWF0 LCBpbmZvcm09CmF0aXZlIHJlc3BvbnNlOiAiICsgdW5kZWxldGVkSGlzdG9yeSApOworICAgIHRo aXMuZGVidWcoICdyZXR1cm5lZCBmcm9tIHVuZGVsZXRlOlxuJyArIHRoaXMuanNvblN0ciggdW5k ZWxldGVkSGlzdG89CnJ5ICkgKTsKKyAgICB0aGlzLnRlc3QuYXNzZXJ0KCAoIHVuZGVsZXRlZEhp c3RvcnkuaWQgPTNEPTNEPTNEIGNyZWF0ZWRIaXN0b3J5LmlkICkgPQomJiAoICF1bmRlbGV0ZWRI aXN0b3J5LmRlbGV0ZWQgKSwKKyAgICAgICAgIlVuZGVsZXRpb24gbmV3LCB1cGRhdGVkIEpTT04g Zm9yIHRoZSBoaXN0b3J5IiApOwo9MjAKICAgICBuZXdGaXJzdEhpc3RvcnkgPTNEIHRoaXMuYXBp Lmhpc3Rvcmllcy5pbmRleCgpWzBdOwogICAgIC8vdGhpcy5kZWJ1ZyggJ25ld0ZpcnN0SGlzdG9y eTpcbicgKyB0aGlzLmpzb25TdHIoIG5ld0ZpcnN0SGlzdG9yeSApICk7CkBAIC0xMzAsMTMgKzEz MCw4IEBACiAgICAgaGlzdG9yeVNob3cgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCBuZXdG aXJzdEhpc3RvcnkuaWQgKTsKICAgICB0aGlzLnRlc3QuYXNzZXJ0KCBoaXN0b3J5U2hvdy5uYW1l ID0zRD0zRD0zRCAnTmV3IG5hbWUnLCAiTmFtZSBzdWNjZXNzPQpmdWxseSBzZXQgdmlhIHVwZGF0 ZTogIiArIGhpc3RvcnlTaG93Lm5hbWUgKTsKPTIwCi0gICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1 cGRhdGUgc2hvdWxkIHNhbml0aXplIGFueSBuZXcgbmFtZScgKTsKLSAgICByZXR1cm5lZCA9M0Qg dGhpcy5hcGkuaGlzdG9yaWVzLnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5LmlkLCB7Ci0gICAgICAg IG5hbWUgOiAnTmV3IG5hbWU8c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0IiBzcmM9M0Qi YmxlciI+YWxlcj0KdCgiYmxhaCIpOzwvc2NyaXB0PicKLSAgICB9KTsKLSAgICAvL3RoaXMuZGVi dWcoICdyZXR1cm5lZDpcbicgKyB0aGlzLmpzb25TdHIoIHJldHVybmVkICkgKTsKLSAgICBoaXN0 b3J5U2hvdyA9M0QgdGhpcy5hcGkuaGlzdG9yaWVzLnNob3coIG5ld0ZpcnN0SGlzdG9yeS5pZCAp OwotICAgIHRoaXMudGVzdC5hc3NlcnQoIGhpc3RvcnlTaG93Lm5hbWUgPTNEPTNEPTNEICdOZXcg bmFtZScsICJVcGRhdGUgc2FuaXQ9Cml6ZWQgbmFtZTogIiArIGhpc3RvcnlTaG93Lm5hbWUgKTsK KyAgICAvLyBubyBzYW5pdGl6aW5nIGlucHV0CisgICAgLy90aGlzLnRlc3QuY29tbWVudCggJ3Vw ZGF0ZSBzaG91bGQgc2FuaXRpemUgYW55IG5ldyBuYW1lJyApOwo9MjAKICAgICAvL05PVEUhOiB0 aGlzIGZhaWxzIG9uIHNxbGl0ZTMgKHdpdGggZGVmYXVsdCBzZXR1cCkKICAgICB0aGlzLnRlc3Qu Y29tbWVudCggJ3VwZGF0ZSBzaG91bGQgYWxsb3cgdW5pY29kZSBpbiBuYW1lcycgKTsKQEAgLTE5 NywyNSArMTkyLDE4IEBACiAgICAgdGhpcy50ZXN0LmFzc2VydCggaGlzdG9yeVNob3cuZ2Vub21l X2J1aWxkID0zRD0zRD0zRCAnaGcxOCcsCiAgICAgICAgICJnZW5vbWVfYnVpbGQgc3VjY2Vzc2Z1 bGx5IHNldCB2aWEgdXBkYXRlOiAiICsgaGlzdG9yeVNob3cuZ2Vub21lXz0KYnVpbGQgKTsKPTIw Ci0gICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGUgc2hvdWxkIHNhbml0aXplIGFueSBnZW5v bWVfYnVpbGQnICk7Ci0gICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy51cGRhdGUo IG5ld0ZpcnN0SGlzdG9yeS5pZCwgewotICAgICAgICBnZW5vbWVfYnVpbGQgOiAnaGcxODxzY3Jp cHQgdHlwZT0zRCJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0zRCJibGVyIj49CmFsZXJ0KCJibGFoIik7 PC9zY3JpcHQ+JwotICAgIH0pOwotICAgIC8vdGhpcy5kZWJ1ZyggJ3JldHVybmVkOlxuJyArIHRo aXMuanNvblN0ciggcmV0dXJuZWQgKSApOwotICAgIGhpc3RvcnlTaG93ID0zRCB0aGlzLmFwaS5o aXN0b3JpZXMuc2hvdyggbmV3Rmlyc3RIaXN0b3J5LmlkICk7Ci0gICAgdGhpcy50ZXN0LmFzc2Vy dCggaGlzdG9yeVNob3cuZ2Vub21lX2J1aWxkID0zRD0zRD0zRCAnaGcxOCcsCi0gICAgICAgICJV cGRhdGUgc2FuaXRpemVkIGdlbm9tZV9idWlsZDogIiArIGhpc3RvcnlTaG93Lmdlbm9tZV9idWls ZCApOworICAgIC8vIG5vIHNhbml0aXppbmcgaW5wdXQKKyAgICAvL3RoaXMudGVzdC5jb21tZW50 KCAndXBkYXRlIHNob3VsZCBzYW5pdGl6ZSBhbnkgZ2Vub21lX2J1aWxkJyApOwo9MjAKLSAgICAv LyByZW1vdmluZyBmb3Igbm93IHVudGlsIEkgY2FuIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlw IGJldHdlZW4gdW5pPQpjb2RlIGFuZCBnZW5vbWVfYnVpbGRzCi0gICAgdGhpcy50ZXN0LmNvbW1l bnQoICd1cGRhdGUgc2hvdWxkIGFsbG93IHVuaWNvZGUgaW4gZ2Vub21lIGJ1aWxkcycgKTsKLSAg ICB2YXIgdW5pY29kZUJ1aWxkID0zRCAnPUU2PUExPTlDMTInOwotICAgIHJldHVybmVkID0zRCB0 aGlzLmFwaS5oaXN0b3JpZXMudXBkYXRlKCBuZXdGaXJzdEhpc3RvcnkuaWQsIHsKLSAgICAgICAg Z2Vub21lX2J1aWxkIDogdW5pY29kZUJ1aWxkCi0gICAgfSk7Ci0gICAgLy90aGlzLmRlYnVnKCAn cmV0dXJuZWQ6XG4nICsgdGhpcy5qc29uU3RyKCByZXR1cm5lZCApICk7Ci0gICAgaGlzdG9yeVNo b3cgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCBuZXdGaXJzdEhpc3RvcnkuaWQgKTsKLSAg ICB0aGlzLnRlc3QuYXNzZXJ0KCBoaXN0b3J5U2hvdy5nZW5vbWVfYnVpbGQgPTNEPTNEPTNEIHVu aWNvZGVCdWlsZCwKLSAgICAgICAgIlVwZGF0ZSBhY2NlcHRlZCB1bmljb2RlIGdlbm9tZV9idWls ZDogIiArIGhpc3RvcnlTaG93Lmdlbm9tZV9idWlsPQpkICk7CisgICAgLy8gcmVtb3ZlZCBzaW5j ZSB3ZSBoYXZlIG5vIHByZS1pbnN0YWxsZWQgdW5pY29kZSBidWlsZHMKKyAgICAvL3RoaXMudGVz dC5jb21tZW50KCAndXBkYXRlIHNob3VsZCBhbGxvdyB1bmljb2RlIGluIGdlbm9tZSBidWlsZHMn ICk7CisKKyAgICBzcGFjZWdob3N0LnRlc3QuY29tbWVudCggJ0FuIHVua25vd24gcmVmZXJlbmNl L2dlbm9tZV9idWlsZCBzaG91bGQgcmV0PQp1cm4gYSA0MDAnICk7CisgICAgdGhpcy5hcGkuYXNz ZXJ0UmFpc2VzKCBmdW5jdGlvbigpeworICAgICAgICByZXR1cm5lZCA9M0QgdGhpcy5hcGkuaGlz dG9yaWVzLnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5LmlkLCB7CisgICAgICAgICAgICBnZW5vbWVf YnVpbGQgOiAnd29va2llZTEyJworICAgICAgICB9KTsKKyAgICB9LCA0MDAsICdpbnZhbGlkIHJl ZmVyZW5jZScsICdCYWQgUmVxdWVzdCB3aXRoIGludmFsaWQgaWQ6IHNob3cnICk7Cj0yMAo9MjAK ICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gYW5ub3RhdGlvbgpA QCAtMjI0LDE5ICsyMTIsMTMgQEAKICAgICByZXR1cm5lZCA9M0QgdGhpcy5hcGkuaGlzdG9yaWVz LnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5LmlkLCB7CiAgICAgICAgIGFubm90YXRpb24gOiBuZXdB bm5vdGF0aW9uCiAgICAgfSk7Ci0gICAgLy90aGlzLmRlYnVnKCAncmV0dXJuZWQ6XG4nICsgdGhp cy5qc29uU3RyKCByZXR1cm5lZCApICk7CisgICAgdGhpcy5kZWJ1ZyggJ3JldHVybmVkOlxuJyAr IHRoaXMuanNvblN0ciggcmV0dXJuZWQgKSApOwogICAgIGhpc3RvcnlTaG93ID0zRCB0aGlzLmFw aS5oaXN0b3JpZXMuc2hvdyggbmV3Rmlyc3RIaXN0b3J5LmlkICk7CiAgICAgdGhpcy50ZXN0LmFz c2VydCggaGlzdG9yeVNob3cuYW5ub3RhdGlvbiA9M0Q9M0Q9M0QgbmV3QW5ub3RhdGlvbiwKICAg ICAgICAgIkFubm90YXRpb24gc3VjY2Vzc2Z1bGx5IHNldCB2aWEgdXBkYXRlOiAiICsgaGlzdG9y eVNob3cuYW5ub3RhdGlvPQpuICk7Cj0yMAotICAgIHRoaXMudGVzdC5jb21tZW50KCAndXBkYXRl IHNob3VsZCBzYW5pdGl6ZSBhbnkgbmV3IGFubm90YXRpb24nICk7Ci0gICAgcmV0dXJuZWQgPTNE IHRoaXMuYXBpLmhpc3Rvcmllcy51cGRhdGUoIG5ld0ZpcnN0SGlzdG9yeS5pZCwgewotICAgICAg ICBhbm5vdGF0aW9uIDogJ05ldyBhbm5vdGF0aW9uPHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNj cmlwdCIgc3JjPQo9M0QiYmxlciI+YWxlcnQoImJsYWgiKTs8L3NjcmlwdD4nCi0gICAgfSk7Ci0g ICAgLy90aGlzLmRlYnVnKCAncmV0dXJuZWQ6XG4nICsgdGhpcy5qc29uU3RyKCByZXR1cm5lZCAp ICk7Ci0gICAgaGlzdG9yeVNob3cgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCBuZXdGaXJz dEhpc3RvcnkuaWQgKTsKLSAgICB0aGlzLnRlc3QuYXNzZXJ0KCBoaXN0b3J5U2hvdy5hbm5vdGF0 aW9uID0zRD0zRD0zRCAnTmV3IGFubm90YXRpb24nLAotICAgICAgICAiVXBkYXRlIHNhbml0aXpl ZCBhbm5vdGF0aW9uOiAiICsgaGlzdG9yeVNob3cuYW5ub3RhdGlvbiApOworICAgIC8vIG5vIHNh bml0aXppbmcgaW5wdXQKKyAgICAvL3RoaXMudGVzdC5jb21tZW50KCAndXBkYXRlIHNob3VsZCBz YW5pdGl6ZSBhbnkgbmV3IGFubm90YXRpb24nICk7Cj0yMAogICAgIHRoaXMudGVzdC5jb21tZW50 KCAndXBkYXRlIHNob3VsZCBhbGxvdyB1bmljb2RlIGluIGFubm90YXRpb25zJyApOwogICAgIHZh ciB1bmljb2RlQW5ub3RhdGlvbiA9M0QgJz1FMz04MT04QT1FOT1BMT05OD1FMz04MT04ND1FMz04 MT1BRj1FMz04MD0KPTgxPUUzPTgxPTlEPUUzPTgyPThDPUUzPTgxPThDPUU4PTkwPUJEPUU0PUI4 PThCPUUzPTgxPTk1PUUzPTgxPTlCPUUzPTgxPUFBPQo9RTM9ODE9ODQnOwpAQCAtMjYxLDEzICsy NDMsNiBAQAo9MjAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g RVJST1JTCiAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGlkaW90 IHByb29maW5nCi0gICAgdGhpcy50ZXN0LmNvbW1lbnQoICd1cGRhdGluZyB0byB0aGUgY3VycmVu dCB2YWx1ZSBzaG91bGQgcmV0dXJuIG5vIHZhbD0KdWUgKG5vIGNoYW5nZSknICk7Ci0gICAgaGlz dG9yeVNob3cgPTNEIHRoaXMuYXBpLmhpc3Rvcmllcy5zaG93KCBuZXdGaXJzdEhpc3RvcnkuaWQg KTsKLSAgICByZXR1cm5lZCA9M0QgdGhpcy5hcGkuaGlzdG9yaWVzLnVwZGF0ZSggbmV3Rmlyc3RI aXN0b3J5LmlkLCB7Ci0gICAgICAgIG5hbWUgOiBoaXN0b3J5U2hvdy5uYW1lCi0gICAgfSk7Ci0g ICAgdGhpcy50ZXN0LmFzc2VydCggdGhpcy5jb3VudEtleXMoIHJldHVybmVkICkgPTNEPTNEPTNE IDAsICJObyBjaGFuZ2VkID0KcmV0dXJuZWQ6ICIgKyB0aGlzLmpzb25TdHIoIHJldHVybmVkICkg KTsKLQogICAgIHRoaXMudGVzdC5jb21tZW50KCAndXBkYXRpbmcgdXNpbmcgYSBub25zZW5zZSBr ZXkgc2hvdWxkIGZhaWwgc2lsZW50bHk9CicgKTsKICAgICByZXR1cm5lZCA9M0QgdGhpcy5hcGku aGlzdG9yaWVzLnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5LmlkLCB7CiAgICAgICAgIGtvbmFtaUNv ZGUgOiAndXVkZGxybHJiYScKQEAgLTI5OCwyNSArMjczLDI1IEBACiAgICAgICAgIHVwZGF0ZWRB dHRyc1sga2V5IF0gPTNEIGZhbHNlOwogICAgICAgICBzcGFjZWdob3N0LmFwaS5hc3NlcnRSYWlz ZXMoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICByZXR1cm5lZCA9M0Qgc3BhY2VnaG9zdC5hcGku aGlzdG9yaWVzLnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5Lj0KaWQsIHVwZGF0ZWRBdHRycyApOwot ICAgICAgICB9LCA0MDAsIGtleSArICcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmljb2RlJywgJ3R5 cGUgdmFsaWRhdGlvbiBlcnI9Cm9yJyApOworICAgICAgICAvLyBub3RlOiBhbm5vdGF0aW9uIGNh biBiZSBiYXNlc3RyaW5nIG9yIG51bGwgKGEgdHVwbGUpIHNvIGp1c3QgdXM9CmUgdGhlIHBhcnRp YWwgZXJyb3Igc3RyaW5nCisgICAgICAgIH0sIDQwMCwgJ211c3QgYmUgYSB0eXBlJywgJ3R5cGUg dmFsaWRhdGlvbiBlcnJvcicgKTsKICAgICB9KTsKICAgICBbICdkZWxldGVkJywgJ2ltcG9ydGFi bGUnLCAncHVibGlzaGVkJyBdLmZvckVhY2goIGZ1bmN0aW9uKCBrZXkgKXsKICAgICAgICAgdmFy IHVwZGF0ZWRBdHRycyA9M0Qge307CiAgICAgICAgIHVwZGF0ZWRBdHRyc1sga2V5IF0gPTNEICdz dHJhYWFuZyc7CiAgICAgICAgIHNwYWNlZ2hvc3QuYXBpLmFzc2VydFJhaXNlcyggZnVuY3Rpb24o KXsKICAgICAgICAgICAgIHJldHVybmVkID0zRCBzcGFjZWdob3N0LmFwaS5oaXN0b3JpZXMudXBk YXRlKCBuZXdGaXJzdEhpc3RvcnkuPQppZCwgdXBkYXRlZEF0dHJzICk7Ci0gICAgICAgIH0sIDQw MCwga2V5ICsgJyBtdXN0IGJlIGEgYm9vbGVhbicsICd0eXBlIHZhbGlkYXRpb24gZXJyb3InICk7 CisgICAgICAgIH0sIDQwMCwgIm11c3QgYmUgYSB0eXBlOiA8dHlwZSAnYm9vbCc+IiwgJ3R5cGUg dmFsaWRhdGlvbiBlcnJvcicgKTsKICAgICB9KTsKLSAgICBbICd5b3VcJ3JlIGl0JywgWyB0cnVl IF0gXS5mb3JFYWNoKCBmdW5jdGlvbiggYmFkVmFsICl7Ci0gICAgICAgIHNwYWNlZ2hvc3QuYXBp LmFzc2VydFJhaXNlcyggZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIHJldHVybmVkID0zRCBzcGFj ZWdob3N0LmFwaS5oaXN0b3JpZXMudXBkYXRlKCBuZXdGaXJzdEhpc3RvcnkuPQppZCwgeyB0YWdz OiBiYWRWYWwgfSk7Ci0gICAgICAgIH0sIDQwMCwgJ3RhZ3MgbXVzdCBiZSBhIGxpc3QnLCAndHlw ZSB2YWxpZGF0aW9uIGVycm9yJyApOwotICAgIH0pOworICAgIHNwYWNlZ2hvc3QuYXBpLmFzc2Vy dFJhaXNlcyggZnVuY3Rpb24oKXsKKyAgICAgICAgcmV0dXJuZWQgPTNEIHNwYWNlZ2hvc3QuYXBp Lmhpc3Rvcmllcy51cGRhdGUoIG5ld0ZpcnN0SGlzdG9yeS5pZCwgPQp7IHRhZ3M6ICd5b3VcJ3Jl IGl0JyB9KTsKKyAgICB9LCA0MDAsICJtdXN0IGJlIGEgdHlwZTogPHR5cGUgJ2xpc3QnPiIsICd0 eXBlIHZhbGlkYXRpb24gZXJyb3InICk7CisgICAgc3BhY2VnaG9zdC5hcGkuYXNzZXJ0UmFpc2Vz KCBmdW5jdGlvbigpeworICAgICAgICByZXR1cm5lZCA9M0Qgc3BhY2VnaG9zdC5hcGkuaGlzdG9y aWVzLnVwZGF0ZSggbmV3Rmlyc3RIaXN0b3J5LmlkLCA9CnsgdGFnczogWyB0cnVlIF0gfSk7Cisg ICAgfSwgNDAwLCAibXVzdCBiZSBhIHR5cGU6IDx0eXBlICdiYXNlc3RyaW5nJz4iLCAndHlwZSB2 YWxpZGF0aW9uIGVycm9yJz0KICk7Cj0yMAotICAgIHRoaXMudGVzdC5jb21tZW50KCAnY2FsbGlu ZyBzaG93IHdpdGggL2RlbGV0ZWQgc2hvdWxkIHJhaXNlIGEgYmFkIHJlcXU9CmVzdCcgKTsKLSAg ICB0aGlzLmFwaS5hc3NlcnRSYWlzZXMoIGZ1bmN0aW9uKCl7Ci0gICAgICAgIHRoaXMuYXBpLmhp c3Rvcmllcy5zaG93KCBuZXdGaXJzdEhpc3RvcnkuaWQsIHRydWUgKTsKLSAgICB9LCA0MDAsICdp cyBub3QgZGVsZXRlZCcsICdCYWQgUmVxdWVzdCByZXR1cm5lZCBmb3Igbm9uLWRlbGV0ZWQnICk7 CisgICAgLy8gbm8gbG9uZ2VyIHRocm93cyBpZiBzaG93aW5nIGRlbGV0ZWQuLi4KKyAgICAvL3Ro aXMudGVzdC5jb21tZW50KCAnY2FsbGluZyBzaG93IHdpdGggL2RlbGV0ZWQgc2hvdWxkIHJhaXNl IGEgYmFkIHJlPQpxdWVzdCcgKTsKIC8qCiAqLwogICAgIC8vdGhpcy5kZWJ1ZyggdGhpcy5qc29u U3RyKCBoaXN0b3J5U2hvdyApICk7CgpkaWZmIC1yIDMxMzU3ZWRmMjYwZWE2YjI1OWRjNjgyMzBm MzA4M2IzZjBmYWZjYTAgLXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWQ9CmExZWM4MjUwYzliODY4 YmI3IHRlc3QvY2FzcGVyanMvYXBpLXZpc3VhbGl6YXRpb25zLXRlc3RzLmpzCi0tLSBhL3Rlc3Qv Y2FzcGVyanMvYXBpLXZpc3VhbGl6YXRpb25zLXRlc3RzLmpzCisrKyBiL3Rlc3QvY2FzcGVyanMv YXBpLXZpc3VhbGl6YXRpb25zLXRlc3RzLmpzCkBAIC0xNDksMjUgKzE0OSwyOSBAQAogICAgICAg ICB9LCA0MDAsICJ2aXN1YWxpemF0aW9uIGlkZW50aWZpZXIgbXVzdCBjb25zaXN0IG9mIG9ubHkg bG93ZXJjYXNlIGw9CmV0dGVycywgbnVtYmVycywgYW5kIHRoZSAnLScgY2hhcmFjdGVyIiApOwog ICAgICAgICB2aXN1YWxpemF0aW9uRGF0YS5zbHVnID0zRCBvbGRTbHVnOwo9MjAKLSAgICAgICAg dGhpcy50ZXN0LmNvbW1lbnQoICdDYWxsaW5nIGNyZWF0ZSB3aXRoIGFuIHVucmVjb2duaXplZCBr ZXkgd2lsbCBjPQphdXNlIGFuIEFQSSBlcnJvcicgKTsKKyAgICAgICAgdGhpcy50ZXN0LmNvbW1l bnQoICdDYWxsaW5nIGNyZWF0ZSB3aXRoIGFuIHVucmVjb2duaXplZCBrZXkgd2lsbCBiPQplIGln bm9yZWQnICk7CisgICAgICAgIHZpc3VhbGl6YXRpb25EYXRhLnRpdGxlID0zRCAnVW5yZWNvZ25p emVkIGtleSc7CisgICAgICAgIHZpc3VhbGl6YXRpb25EYXRhLnNsdWcgPTNEICd1bnJlY29nbml6 ZWQta2V5JzsKICAgICAgICAgdmlzdWFsaXphdGlvbkRhdGEuYmxlciA9M0QgJ2JsYWgnOwotICAg ICAgICB0aGlzLmFwaS5hc3NlcnRSYWlzZXMoIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICBjcmVh dGVkID0zRCB0aGlzLmFwaS52aXN1YWxpemF0aW9ucy5jcmVhdGUoIHZpc3VhbGl6YXRpb25EYXRh ID0KKTsKLSAgICAgICAgfSwgNDAwLCAndW5rbm93biBrZXk6IGJsZXInICk7CisgICAgICAgIGNy ZWF0ZWQgPTNEIHRoaXMuYXBpLnZpc3VhbGl6YXRpb25zLmNyZWF0ZSggdmlzdWFsaXphdGlvbkRh dGEgKTsKKyAgICAgICAgdGhpcy50ZXN0LmFzc2VydCggY3JlYXRlZC5ibGVyID0zRD0zRD0zRCB1 bmRlZmluZWQgKTsKICAgICAgICAgZGVsZXRlIHZpc3VhbGl6YXRpb25EYXRhLmJsZXI7Cj0yMAog ICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ0NhbGxpbmcgY3JlYXRlIHdpdGggYW4gdW5wYXJz YWJsZSBKU09OIGNvbmZpZyA9CndpbGwgY2F1c2UgYW4gQVBJIGVycm9yJyApOworICAgICAgICB2 aXN1YWxpemF0aW9uRGF0YS50aXRsZSA9M0QgJ1VucGFyc2FibGUnOworICAgICAgICB2aXN1YWxp emF0aW9uRGF0YS5zbHVnID0zRCAndW5wYXJzYWJsZSc7CiAgICAgICAgIHZpc3VhbGl6YXRpb25E YXRhLmNvbmZpZyA9M0QgJzMgPTNEIG5pbWUnOwogICAgICAgICB0aGlzLmFwaS5hc3NlcnRSYWlz ZXMoIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICBjcmVhdGVkID0zRCB0aGlzLmFwaS52aXN1YWxp emF0aW9ucy5jcmVhdGUoIHZpc3VhbGl6YXRpb25EYXRhID0KKTsKLSAgICAgICAgfSwgNDAwLCAn Y29uZmlnIG11c3QgYmUgYSBkaWN0aW9uYXJ5IChKU09OKScgKTsKKyAgICAgICAgfSwgNDAwLCAi Y29uZmlnIG11c3QgYmUgYSBkaWN0aW9uYXJ5OiA8dHlwZSAndW5pY29kZSc+IiApOwo9MjAKICAg ICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVBEQVRFCiAgICAg ICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLj0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBpZGlvdCBwcm9vZmlu ZwotICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ3VwZGF0aW5nIHVzaW5nIGEgbm9uc2Vuc2Ug a2V5IHNob3VsZCBmYWlsIHdpdGg9CiBhbiBlcnJvcicgKTsKLSAgICAgICAgdGhpcy5hcGkuYXNz ZXJ0UmFpc2VzKCBmdW5jdGlvbigpewotICAgICAgICAgICAgcmV0dXJuZWQgPTNEIHRoaXMuYXBp LnZpc3VhbGl6YXRpb25zLnVwZGF0ZSggY3JlYXRlZC5pZCwgeyBibGU9CnIgOiAnYmxhaCcgfSk7 Ci0gICAgICAgIH0sIDQwMCwgJ3Vua25vd24ga2V5OiBibGVyJyApOworICAgICAgICAvL3RoaXMu dGVzdC5jb21tZW50KCAndXBkYXRpbmcgdXNpbmcgYSBub25zZW5zZSBrZXkgc2hvdWxkIGZhaWwg d2k9CnRoIGFuIGVycm9yJyApOworICAgICAgICAvL3JldHVybmVkID0zRCB0aGlzLmFwaS52aXN1 YWxpemF0aW9ucy51cGRhdGUoIGNyZWF0ZWQuaWQsIHsgYmxlciA9CjogJ2JsYWgnIH0pOworICAg ICAgICAvLy8vVE9ETzogdGhpcyBpc24ndCByZXR1cm5pbmcgYW4gb2JqZWN0Li4uCisgICAgICAg IC8vdGhpcy5kZWJ1ZyggJ3JldHVybmVkOicgKyB0aGlzLmpzb25TdHIoIHJldHVybmVkICkgKTsK KyAgICAgICAgLy90aGlzLnRlc3QuYXNzZXJ0KCByZXR1cm5lZC5ibGVyID0zRD0zRD0zRCB1bmRl ZmluZWQgKTsKPTIwCiAgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAndXBkYXRpbmcgYnkgYXR0 ZW1wdGluZyB0byBjaGFuZ2UgdHlwZSBzaG91bGQgYz0KYXVzZSBhbiBlcnJvcicgKTsKICAgICAg ICAgdGhpcy5hcGkuYXNzZXJ0UmFpc2VzKCBmdW5jdGlvbigpewoKZGlmZiAtciAzMTM1N2VkZjI2 MGVhNmIyNTlkYzY4MjMwZjMwODNiM2YwZmFmY2EwIC1yIDE0Nzk2YWM4NjdlYjBjN2RjNTE3ZWVk PQphMWVjODI1MGM5Yjg2OGJiNyB0ZXN0L2Nhc3BlcmpzL2Nhc3BlcmpzX3J1bm5lci5weQotLS0g YS90ZXN0L2Nhc3BlcmpzL2Nhc3BlcmpzX3J1bm5lci5weQorKysgYi90ZXN0L2Nhc3BlcmpzL2Nh c3BlcmpzX3J1bm5lci5weQpAQCAtNDMwLDYgKzQzMCwzMSBAQAogICAgICAgICAiIiIKICAgICAg ICAgc2VsZi5ydW5fanNfc2NyaXB0KCAnYXBpLWFub24taGlzdG9yeS1wZXJtaXNzaW9uLXRlc3Rz LmpzJyApCj0yMAorICAgIGRlZiB0ZXN0XzA1X3dvcmtmbG93X2FwaSggc2VsZiApOgorICAgICAg ICAiIiJUZXN0IEFQSSBmb3Igd29ya2Zsb3dzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5y dW5fanNfc2NyaXB0KCAnYXBpLXdvcmtmbG93LXRlc3RzLmpzJyApCisKKyAgICBkZWYgdGVzdF8w Nl92aXN1YWxpemF0aW9uX2FwaSggc2VsZiApOgorICAgICAgICAiIiJUZXN0IEFQSSBmb3Igdmlz dWFsaXphdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bl9qc19zY3JpcHQoICdh cGktdmlzdWFsaXphdGlvbnMtdGVzdHMuanMnICkKKworICAgIGRlZiB0ZXN0XzA3X3Rvb2xzX2Fw aSggc2VsZiApOgorICAgICAgICAiIiJUZXN0IEFQSSBmb3IgdG9vbHMuCisgICAgICAgICIiIgor ICAgICAgICBzZWxmLnJ1bl9qc19zY3JpcHQoICdhcGktdG9vbC10ZXN0cy5qcycgKQorCisgICAg ZGVmIHRlc3RfMDhfY29uZmlndXJhdGlvbl9hcGkoIHNlbGYgKToKKyAgICAgICAgIiIiVGVzdCBB UEkgZm9yIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bl9qc19z Y3JpcHQoICdhcGktY29uZmlndXJhdGlvbi10ZXN0cy5qcycgKQorCisgICAgZGVmIHRlc3RfMDlf dXNlcl9hcGkoIHNlbGYgKToKKyAgICAgICAgIiIiVGVzdCBBUEkgZm9yIHVzZXJzLgorICAgICAg ICAiIiIKKyAgICAgICAgc2VsZi5ydW5fanNfc2NyaXB0KCAnYXBpLXVzZXItdGVzdHMuanMnICkK Kwo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRCBNQUlOCiBpZiBf X25hbWVfXyA9M0Q9M0QgJ19fbWFpbl9fJzoKCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2 ODIzMGYzMDgzYjNmMGZhZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBj OWI4NjhiYjcgdGVzdC9jYXNwZXJqcy9oaXN0b3J5LXBhbmVsLXRlc3RzLmpzCi0tLSBhL3Rlc3Qv Y2FzcGVyanMvaGlzdG9yeS1wYW5lbC10ZXN0cy5qcworKysgYi90ZXN0L2Nhc3BlcmpzL2hpc3Rv cnktcGFuZWwtdGVzdHMuanMKQEAgLTk5LDYgKzk5LDcgQEAKICAgICAgICAgdGhpcy5wYWdlLnNl bmRFdmVudCggJ2tleXByZXNzJywgdGhpcy5wYWdlLmV2ZW50LmtleS5FbnRlciApOwogICAgICAg ICAvLyB3YWl0IGZvciBzZW5kIGFuZCByZS1yZW5kZXIgbmFtZQogICAgICAgICB0aGlzLndhaXQo IDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLmNhcHR1cmUoICduYW1lLnBuZycg KTsKICAgICAgICAgICAgIHRoaXMudGVzdC5hc3NlcnRTZWxlY3Rvckhhc1RleHQoIG5hbWVTZWxl Y3RvciwgbmV3SGlzdG9yeU5hbWUsPQogJ0hpc3RvcnkgbmFtZSBpcyAnICsgbmV3SGlzdG9yeU5h bWUgKTsKICAgICAgICAgICAgIHRoaXMudGVzdC5hc3NlcnREb2VzbnRFeGlzdCggZWRpdGFibGVU ZXh0SW5wdXQsICJJbnB1dCBkaXNhcHBlPQphcnMgYWZ0ZXIgcHJlc3NpbmcgZW50ZXIiICk7CiAg ICAgICAgIH0pOwpAQCAtMTEyLDE1NyArMTEzLDE1OCBAQAo9MjAKICAgICAgICAgdGhpcy5wYWdl LnNlbmRFdmVudCggJ21vdXNlZG93bicsIC0xLCAtMSApOwogICAgICAgICB0aGlzLndhaXQoIDEw MDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLmRlYnVnKCAnd2FhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYT0KYXQnICk7CiAgICAgICAgICAgICB0 aGlzLnRlc3QuYXNzZXJ0U2VsZWN0b3JIYXNUZXh0KCBuYW1lU2VsZWN0b3IsIG5ld0hpc3RvcnlO YW1lLD0KICdIaXN0b3J5IG5hbWUgaXMgU1RJTEwgJyArIG5ld0hpc3RvcnlOYW1lICk7CiAgICAg ICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RG9lc250RXhpc3QoIGVkaXRhYmxlVGV4dElucHV0LCAi SW5wdXQgZGlzYXBwZT0KYXJzIGFmdGVyIGNsaWNraW5nIGF3YXkiICk7CiAgICAgICAgIH0pOwog ICAgIH0pOwo9MjAKLSAgICBzcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7Ci0gICAgICAgIHRo aXMudGVzdC5jb21tZW50KCAnbmFtZSBzaG91bGQgcmV2ZXJ0IGlmIHVzZXIgaGl0cyBFU0Mgd2hp bGUgZWRpdD0KaW5nJyApOwotCi0gICAgICAgIHRoaXMuY2xpY2soIG5hbWVTZWxlY3RvciApOwot ICAgICAgICB0aGlzLnBhZ2Uuc2VuZEV2ZW50KCAna2V5cHJlc3MnLCAiQXJzZW5pYyBCYWN0ZXJp YSIgKTsKLQotICAgICAgICB0aGlzLnBhZ2Uuc2VuZEV2ZW50KCAna2V5cHJlc3MnLCB0aGlzLnBh Z2UuZXZlbnQua2V5LkVzY2FwZSApOwotICAgICAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9u KCl7Ci0gICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0U2VsZWN0b3JIYXNUZXh0KCBuYW1lU2Vs ZWN0b3IsIG5ld0hpc3RvcnlOYW1lLD0KICdIaXN0b3J5IG5hbWUgaXMgU1RJTEwgJyArIG5ld0hp c3RvcnlOYW1lICk7Ci0gICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RG9lc250RXhpc3QoIGVk aXRhYmxlVGV4dElucHV0LCAiSW5wdXQgZGlzYXBwZT0KYXJzIGFmdGVyIGhpdHRpbmcgRVNDIiAp OwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09CiBjaGVjayBzdHJ1 Y3R1cmUgb2YgTk9OIGVtcHR5IGhpc3RvcnkKLSAgICAvLyB1cGxvYWQgZmlsZTogMS50eHQKLSAg ICBzcGFjZWdob3N0LmFwaS50b29scy50aGVuVXBsb2FkVG9DdXJyZW50KHsgZmlsZXBhdGg6IGZp bGVwYXRoVG9VcGxvYWQgPQp9LCBmdW5jdGlvbiB1cGxvYWRDYWxsYmFjayggaWQsIGpzb24gKXsK LSAgICAgICAgdXBsb2FkSWQgPTNEIGlkOwotICAgIH0pOwotCi0gICAgc3BhY2VnaG9zdC5vcGVu SG9tZVBhZ2UoKS50aGVuKCBmdW5jdGlvbiBjaGVja1BhbmVsU3RydWN0dXJlKCl7Ci0gICAgICAg IHRoaXMudGVzdC5jb21tZW50KCAnY2hlY2tpbmcgc3RydWN0dXJlIG9mIG5vbi1lbXB0eSBwYW5l bCcgKTsKLQotICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggImhpc3RvcnkgbmFtZSBzaG91bGQg ZXhpc3QsIGJlIHZpc2libGUsIGFuZCBoYXY9CmUgdGV4dCAiICsgdW5uYW1lZE5hbWUgKTsKLSAg ICAgICAgdGhpcy50ZXN0LmFzc2VydEV4aXN0cyggbmFtZVNlbGVjdG9yLCBuYW1lU2VsZWN0b3Ig KyAnIGV4aXN0cycgKTsKLSAgICAgICAgdGhpcy50ZXN0LmFzc2VydFZpc2libGUoIG5hbWVTZWxl Y3RvciwgJ0hpc3RvcnkgbmFtZSBpcyB2aXNpYmxlJyApOwotICAgICAgICB0aGlzLnRlc3QuYXNz ZXJ0U2VsZWN0b3JIYXNUZXh0KCBuYW1lU2VsZWN0b3IsIG5ld0hpc3RvcnlOYW1lLCAnSGk9CnN0 b3J5IG5hbWUgaXMgJyArIG5ld0hpc3RvcnlOYW1lICk7Ci0KLSAgICAgICAgdmFyIG9uZXR4dEZp bGVzaXplID0zRCByZXF1aXJlKCAnZnMnICkuc2l6ZSggZmlsZXBhdGhUb1VwbG9hZCApLAotICAg ICAgICAgICAgZXhwZWN0ZWRTaXplID0zRCBvbmV0eHRGaWxlc2l6ZSArICcgYnl0ZXMnOwotICAg ICAgICB0aGlzLnRlc3QuY29tbWVudCggImhpc3Rvcnkgc2hvdWxkIGRpc3BsYXkgc2l6ZSBhbmQg c2l6ZSBzaG91bGQgYmU9CiAiICsgb25ldHh0RmlsZXNpemUgKyAiIGJ5dGVzIiApOwotICAgICAg ICB0aGlzLnRlc3QuYXNzZXJ0RXhpc3RzKCBzaXplU2VsZWN0b3IsICdGb3VuZCAnICsgc2l6ZVNl bGVjdG9yICk7Ci0gICAgICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBzaXplU2VsZWN0b3Is ICdIaXN0b3J5IHNpemUgaXMgdmlzaWJsZScgKTsKLSAgICAgICAgdGhpcy50ZXN0LmFzc2VydFNl bGVjdG9ySGFzVGV4dCggc2l6ZVNlbGVjdG9yLCBleHBlY3RlZFNpemUsCi0gICAgICAgICAgICAn SGlzdG9yeSBzaXplIGhhcyAiJyArIGV4cGVjdGVkU2l6ZSArICciOiAnICsgdGhpcy5mZXRjaFRl eHQoID0Kc2l6ZVNlbGVjdG9yICkudHJpbSgpICk7Ci0KLSAgICAgICAgdGhpcy50ZXN0LmNvbW1l bnQoICJ0YWdzIGFuZCBhbm5vdGF0aW9uIGljb25zIHNob3VsZCBiZSBhdmFpbGFibGUiPQogKTsK LSAgICAgICAgdGhpcy50ZXN0LmFzc2VydEV4aXN0cyggdGFnSWNvblNlbGVjdG9yLCAgJ1RhZyBp Y29uIGJ1dHRvbiBmb3VuZCcgPQopOwotICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RXhpc3RzKCBh bm5vSWNvblNlbGVjdG9yLCAnQW5ub3RhdGlvbiBpY29uIGJ1dHRvbiA9CmZvdW5kJyApOwotCi0g ICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAiQSBtZXNzYWdlIGFib3V0IHRoZSBjdXJyZW50IGhp c3RvcnkgYmVpbmcgZW1wdD0KeSBzaG91bGQgTk9UIGJlIGRpc3BsYXllZCIgKTsKLSAgICAgICAg dGhpcy50ZXN0LmFzc2VydEV4aXN0cyggZW1wdHlNc2dTZWxlY3RvciwgZW1wdHlNc2dTZWxlY3Rv ciArICcgZXhpPQpzdHMnICk7Ci0gICAgICAgIHRoaXMudGVzdC5hc3NlcnROb3RWaXNpYmxlKCBl bXB0eU1zZ1NlbGVjdG9yLCAnRW1wdHkgaGlzdG9yeSBtZXNzYT0KZ2UgaXMgTk9UIHZpc2libGUn ICk7Ci0gICAgfSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQogdGFncwotICAgIC8vIGtlZXBpbmcg dGhpcyBsaWdodCBoZXJlIC0gYmV0dGVyIGZvciBpdHMgb3duIHRlc3QgZmlsZQotICAgIC8vVE9E TzogY2hlY2sgdG9vbHRpcHMKLSAgICBzcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uIG9wZW5UYWdz KCl7Ci0gICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAndGFnIGFyZWEgc2hvdWxkIG9wZW4gd2hl biB0aGUgaGlzdG9yeSBwYW5lbCB0YT0KZyBpY29uIGlzIGNsaWNrZWQnICk7Ci0KLSAgICAgICAg dGhpcy5jbGljayggdGFnSWNvblNlbGVjdG9yICk7Ci0gICAgICAgIHRoaXMud2FpdCggMTAwMCwg ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCB0YWdBcmVh U2VsZWN0b3IsICdUYWcgYXJlYSBpcyBub3cgZGlzPQpwbGF5ZWQnICk7Ci0gICAgICAgIH0pOwot ICAgIH0pOwotICAgIHNwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5vdGF0aW9uKCl7 Ci0gICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnYW5ub3RhdGlvbiBhcmVhIHNob3VsZCBjbG9z ZSB3aGVuIHRoZSBoaXN0b3J5ID0KcGFuZWwgdGFnIGljb24gaXMgY2xpY2tlZCBhZ2FpbicgKTsK LQotICAgICAgICB0aGlzLmNsaWNrKCB0YWdJY29uU2VsZWN0b3IgKTsKLSAgICAgICAgdGhpcy53 YWl0KCAxMDAwLCBmdW5jdGlvbigpewotICAgICAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZp c2libGUoIHRhZ0FyZWFTZWxlY3RvciwgJ1RhZyBhcmVhIGlzIG5vdyA9CmhpZGRlbicgKTsKLSAg ICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQogYW5ub3RhdGlvbgotICAg IC8vIGtlZXBpbmcgdGhpcyBsaWdodCBoZXJlIC0gYmV0dGVyIGZvciBpdHMgb3duIHRlc3QgZmls ZQotICAgIC8vVE9ETzogY2hlY2sgdG9vbHRpcHMKLSAgICBzcGFjZWdob3N0LnRoZW4oIGZ1bmN0 aW9uIG9wZW5Bbm5vdGF0aW9uKCl7Ci0gICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnYW5ub3Rh dGlvbiBhcmVhIHNob3VsZCBvcGVuIHdoZW4gdGhlIGhpc3RvcnkgcD0KYW5lbCBhbm5vdGF0aW9u IGljb24gaXMgY2xpY2tlZCcgKTsKLQotICAgICAgICB0aGlzLmNsaWNrKCBhbm5vSWNvblNlbGVj dG9yICk7Ci0gICAgICAgIHRoaXMud2FpdCggMTAwMCwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAg IHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBhbm5vQXJlYVNlbGVjdG9yLCAnQW5ub3RhdGlvbiBh cmVhIGlzPQogbm93IGRpc3BsYXllZCcgKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgc3Bh Y2VnaG9zdC50aGVuKCBmdW5jdGlvbiBjbG9zZUFubm90YXRpb24oKXsKLSAgICAgICAgdGhpcy50 ZXN0LmNvbW1lbnQoICdhbm5vdGF0aW9uIGFyZWEgc2hvdWxkIGNsb3NlIHdoZW4gdGhlIGhpc3Rv cnkgPQpwYW5lbCB0YWcgaWNvbiBpcyBjbGlja2VkIGFnYWluJyApOwotCi0gICAgICAgIHRoaXMu Y2xpY2soIGFubm9JY29uU2VsZWN0b3IgKTsKLSAgICAgICAgdGhpcy53YWl0KCAxMDAwLCBmdW5j dGlvbigpewotICAgICAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUoIGFubm9BcmVh U2VsZWN0b3IsICdBbm5vdGF0aW9uIGFyZWE9CiBpcyBub3cgaGlkZGVuJyApOwotICAgICAgICB9 KTsKLSAgICB9KTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09CiByZWZyZXNoIGJ1dHRvbgotICAgIHNw YWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gcmVmcmVzaEJ1dHRvbigpewotICAgICAgICB0aGlzLnRl c3QuY29tbWVudCggJ0hpc3RvcnkgcGFuZWwgc2hvdWxkIHJlZnJlc2ggd2hlbiB0aGUgaGlzdG9y eSA9CnJlZnJlc2ggaWNvbiBpcyBjbGlja2VkJyApOwotCi0gICAgICAgIHRoaXMudGVzdC5hc3Nl cnRFeGlzdHMoICByZWZyZXNoQnV0dG9uU2VsZWN0b3IsICJGb3VuZCByZWZyZXNoIGJ1dD0KdG9u IiApOwotICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggcmVmcmVzaEJ1dHRvblNlbGVj dG9yLCAiUmVmcmVzaCBidXR0b24gaXM9CiB2aXNpYmxlIiApOwotICAgICAgICB0aGlzLnRlc3Qu YXNzZXJ0VmlzaWJsZSggcmVmcmVzaEJ1dHRvblNlbGVjdG9yICsgJyAnICsgcmVmcmVzaEJ1dHQ9 Cm9uSWNvblNlbGVjdG9yLCAiUmVmcmVzaCBpY29uIGlzIHZpc2libGUiICk7Ci0KLSAgICAgICAg Ly90aGlzLmFzc2VydE5hdmlnYXRpb25SZXF1ZXN0ZWQoIHJlZnJlc2hCdXR0b25IcmVmLCAiSGlz dG9yeSByZWZyPQplc2hlZCB3aGVuIGNsaWNraW5nIHJlZnJlc2ggaWNvbiIsIGZ1bmN0aW9uKCl7 Ci0gICAgICAgIC8vICAgIHRoaXMuY2xpY2soIHJlZnJlc2hCdXR0b25TZWxlY3RvciApOwotICAg ICAgICAvL30pOwotICAgIH0pOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KIGhkYXMgY2FuIGJlIGV4 cGFuZGVkIGJ5IGNsaWNraW5nIG9uIHRoZSBoZGEKLSAgICAvLyBicm9rZW4gaW4gd2Via2l0IHcv IGpxIDEuNwotICAgIHNwYWNlZ2hvc3QuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBmdW5jdGlv bigpewotICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ0hEQXMgY2FuIGJlIGV4cGFuZGVkIGJ5 IGNsaWNraW5nIG9uIHRoZSBuYW1lJyA9Cik7Ci0gICAgICAgIHZhciB1cGxvYWRlZFNlbGVjdG9y ID0zRCAnI2RhdGFzZXQtJyArIHVwbG9hZElkOwotCi0gICAgICAgIHRoaXMuY2xpY2soIHVwbG9h ZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3RvcnlwYW5lbC5kYXRhLnNlbGVjdD0Kb3JzLmhk YS50aXRsZSApOwotICAgICAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7Ci0gICAgICAg ICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggdXBsb2FkZWRTZWxlY3RvciArICcgJyArIHRo aXMuaGlzdG9yeT0KcGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHksCi0gICAgICAgICAgICAg ICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUgaXMgdmlzaWJsZSIgKTsKLSAgICAgICAgfSk7Ci0g ICAgfSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQogZXhwYW5kZWQgaGRhcyBzdGlsbCBleHBhbmRl ZCBhZnRlciByZWZyZXNoCi0gICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpewotICAgICAg ICB0aGlzLnRlc3QuY29tbWVudCggJ0V4cGFuZGVkIGhkYXMgYXJlIHN0aWxsIGV4cGFuZGVkIGFm dGVyIGEgcmVmcmU9CnNoJyApOwotICAgICAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNk YXRhc2V0LScgKyB1cGxvYWRJZDsKLQotICAgICAgICB0aGlzLmNsaWNrKCByZWZyZXNoQnV0dG9u U2VsZWN0b3IgKTsKLSAgICAgICAgdGhpcy5oaXN0b3J5cGFuZWwud2FpdEZvckhkYXMoIGZ1bmN0 aW9uKCl7Ci0gICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggdXBsb2FkZWRTZWxl Y3RvciArICcgJyArIHRoaXMuaGlzdG9yeT0KcGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHks Ci0gICAgICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUgaXMgdmlzaWJsZSIgKTsK LSAgICAgICAgfSk7Ci0gICAgICAgIC8vIHRoaXMgd2lsbCBicmVhazogd2Via2l0ICsganEgMS43 Ci0gICAgfSk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQogZXhwYW5kZWQgaGRhcyBjb2xsYXBzZSBi eSBjbGlja2luZyBuYW1lIGFnYWluCi0gICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpewot ICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ0V4cGFuZGVkIGhkYXMgY29sbGFwc2UgYnkgY2xp Y2tpbmcgbmFtZSBhZ2Fpbic9CiApOwotICAgICAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0Qg JyNkYXRhc2V0LScgKyB1cGxvYWRJZDsKLQotICAgICAgICB0aGlzLmNsaWNrKCB1cGxvYWRlZFNl bGVjdG9yICsgJyAnICsgdGhpcy5oaXN0b3J5cGFuZWwuZGF0YS5zZWxlY3Q9Cm9ycy5oZGEudGl0 bGUgKTsKLSAgICAgICAgdGhpcy53YWl0KCA1MDAsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICB0 aGlzLnRlc3QuYXNzZXJ0Tm90VmlzaWJsZSggdXBsb2FkZWRTZWxlY3RvciArICcgJyArIHRoaXMu aGlzdD0Kb3J5cGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHksCi0gICAgICAgICAgICAgICAg IkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUgaXMgbm90IHZpc2libGUiICk7Ci0gICAgICAgIH0pOwot ICAgIH0pOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KIGNvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxh cHNlZCBhZnRlciByZWZyZXNoCi0gICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpewotICAg ICAgICB0aGlzLnRlc3QuY29tbWVudCggJ2NvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxhcHNlZCBh ZnRlciBhIHJlZnJlc2g9CicgKTsKLSAgICAgICAgdmFyIHVwbG9hZGVkU2VsZWN0b3IgPTNEICcj ZGF0YXNldC0nICsgdXBsb2FkSWQ7Ci0KLSAgICAgICAgdGhpcy5jbGljayggcmVmcmVzaEJ1dHRv blNlbGVjdG9yICk7Ci0gICAgICAgIHRoaXMuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBmdW5j dGlvbigpewotICAgICAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUoIHVwbG9hZGVk U2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3Q9Cm9yeXBhbmVsLmRhdGEuc2VsZWN0b3JzLmhkYS5i b2R5LAotICAgICAgICAgICAgICAgICJCb2R5IGZvciB1cGxvYWRlZCBmaWxlIGlzIG5vdCB2aXNp YmxlIiApOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICAvL3NwYWNlZ2hvc3QudGhlbiggZnVu Y3Rpb24oKXsKKyAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ25hbWUgc2hvdWxkIHJldmVy dCBpZiB1c2VyIGhpdHMgRVNDIHdoaWxlIGVkPQppdGluZycgKTsKKyAgICAvLworICAgIC8vICAg IHRoaXMuY2xpY2soIG5hbWVTZWxlY3RvciApOworICAgIC8vICAgIHRoaXMucGFnZS5zZW5kRXZl bnQoICdrZXlwcmVzcycsICJBcnNlbmljIEJhY3RlcmlhIiApOworICAgIC8vCisgICAgLy8gICAg dGhpcy5wYWdlLnNlbmRFdmVudCggJ2tleXByZXNzJywgdGhpcy5wYWdlLmV2ZW50LmtleS5Fc2Nh cGUgKTsKKyAgICAvLyAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgLy8gICAg ICAgIHRoaXMudGVzdC5hc3NlcnRTZWxlY3Rvckhhc1RleHQoIG5hbWVTZWxlY3RvciwgbmV3SGlz dG9yeU5hbT0KZSwgJ0hpc3RvcnkgbmFtZSBpcyBTVElMTCAnICsgbmV3SGlzdG9yeU5hbWUgKTsK KyAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydERvZXNudEV4aXN0KCBlZGl0YWJsZVRleHRJ bnB1dCwgIklucHV0IGRpc2FwPQpwZWFycyBhZnRlciBoaXR0aW5nIEVTQyIgKTsKKyAgICAvLyAg ICB9KTsKKyAgICAvL30pOworICAgIC8vCisgICAgLy8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0gY2hlY2sgc3Ry dWN0dXJlIG9mIE5PTiBlbXB0eSBoaXN0b3J5CisgICAgLy8vLyB1cGxvYWQgZmlsZTogMS50eHQK KyAgICAvL3NwYWNlZ2hvc3QuYXBpLnRvb2xzLnRoZW5VcGxvYWRUb0N1cnJlbnQoeyBmaWxlcGF0 aDogZmlsZXBhdGhUb1VwbG9hPQpkIH0sIGZ1bmN0aW9uIHVwbG9hZENhbGxiYWNrKCBpZCwganNv biApeworICAgIC8vICAgIHVwbG9hZElkID0zRCBpZDsKKyAgICAvL30pOworICAgIC8vCisgICAg Ly9zcGFjZWdob3N0Lm9wZW5Ib21lUGFnZSgpLnRoZW4oIGZ1bmN0aW9uIGNoZWNrUGFuZWxTdHJ1 Y3R1cmUoKXsKKyAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ2NoZWNraW5nIHN0cnVjdHVy ZSBvZiBub24tZW1wdHkgcGFuZWwnICk7CisgICAgLy8KKyAgICAvLyAgICB0aGlzLnRlc3QuY29t bWVudCggImhpc3RvcnkgbmFtZSBzaG91bGQgZXhpc3QsIGJlIHZpc2libGUsIGFuZCBoPQphdmUg dGV4dCAiICsgdW5uYW1lZE5hbWUgKTsKKyAgICAvLyAgICB0aGlzLnRlc3QuYXNzZXJ0RXhpc3Rz KCBuYW1lU2VsZWN0b3IsIG5hbWVTZWxlY3RvciArICcgZXhpc3RzJyApOworICAgIC8vICAgIHRo aXMudGVzdC5hc3NlcnRWaXNpYmxlKCBuYW1lU2VsZWN0b3IsICdIaXN0b3J5IG5hbWUgaXMgdmlz aWJsZSc9CiApOworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRTZWxlY3Rvckhhc1RleHQoIG5h bWVTZWxlY3RvciwgbmV3SGlzdG9yeU5hbWUsICc9Ckhpc3RvcnkgbmFtZSBpcyAnICsgbmV3SGlz dG9yeU5hbWUgKTsKKyAgICAvLworICAgIC8vICAgIHZhciBvbmV0eHRGaWxlc2l6ZSA9M0QgcmVx dWlyZSggJ2ZzJyApLnNpemUoIGZpbGVwYXRoVG9VcGxvYWQgKSwKKyAgICAvLyAgICAgICAgZXhw ZWN0ZWRTaXplID0zRCBvbmV0eHRGaWxlc2l6ZSArICcgYnl0ZXMnOworICAgIC8vICAgIHRoaXMu dGVzdC5jb21tZW50KCAiaGlzdG9yeSBzaG91bGQgZGlzcGxheSBzaXplIGFuZCBzaXplIHNob3Vs ZCA9CmJlICIgKyBvbmV0eHRGaWxlc2l6ZSArICIgYnl0ZXMiICk7CisgICAgLy8gICAgdGhpcy50 ZXN0LmFzc2VydEV4aXN0cyggc2l6ZVNlbGVjdG9yLCAnRm91bmQgJyArIHNpemVTZWxlY3RvciAp OworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBzaXplU2VsZWN0b3IsICdIaXN0 b3J5IHNpemUgaXMgdmlzaWJsZSc9CiApOworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRTZWxl Y3Rvckhhc1RleHQoIHNpemVTZWxlY3RvciwgZXhwZWN0ZWRTaXplLAorICAgIC8vICAgICAgICAn SGlzdG9yeSBzaXplIGhhcyAiJyArIGV4cGVjdGVkU2l6ZSArICciOiAnICsgdGhpcy5mZXRjaFRl eHQ9Ciggc2l6ZVNlbGVjdG9yICkudHJpbSgpICk7CisgICAgLy8KKyAgICAvLyAgICB0aGlzLnRl c3QuY29tbWVudCggInRhZ3MgYW5kIGFubm90YXRpb24gaWNvbnMgc2hvdWxkIGJlIGF2YWlsYWJs PQplIiApOworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoIHRhZ0ljb25TZWxlY3Rv ciwgICdUYWcgaWNvbiBidXR0b24gZm91bmQ9CicgKTsKKyAgICAvLyAgICB0aGlzLnRlc3QuYXNz ZXJ0RXhpc3RzKCBhbm5vSWNvblNlbGVjdG9yLCAnQW5ub3RhdGlvbiBpY29uIGJ1dHRvPQpuIGZv dW5kJyApOworICAgIC8vCisgICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICJBIG1lc3NhZ2Ug YWJvdXQgdGhlIGN1cnJlbnQgaGlzdG9yeSBiZWluZyBlbT0KcHR5IHNob3VsZCBOT1QgYmUgZGlz cGxheWVkIiApOworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoIGVtcHR5TXNnU2Vs ZWN0b3IsIGVtcHR5TXNnU2VsZWN0b3IgKyAnIGU9Cnhpc3RzJyApOworICAgIC8vICAgIHRoaXMu dGVzdC5hc3NlcnROb3RWaXNpYmxlKCBlbXB0eU1zZ1NlbGVjdG9yLCAnRW1wdHkgaGlzdG9yeSBt ZXM9CnNhZ2UgaXMgTk9UIHZpc2libGUnICk7CisgICAgLy99KTsKKyAgICAvLworICAgIC8vLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS09Ci0tIHRhZ3MKKyAgICAvLy8vIGtlZXBpbmcgdGhpcyBsaWdodCBoZXJlIC0gYmV0 dGVyIGZvciBpdHMgb3duIHRlc3QgZmlsZQorICAgIC8vLy9UT0RPOiBjaGVjayB0b29sdGlwcwor ICAgIC8vc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbiBvcGVuVGFncygpeworICAgIC8vICAgIHRo aXMudGVzdC5jb21tZW50KCAndGFnIGFyZWEgc2hvdWxkIG9wZW4gd2hlbiB0aGUgaGlzdG9yeSBw YW5lbCA9CnRhZyBpY29uIGlzIGNsaWNrZWQnICk7CisgICAgLy8KKyAgICAvLyAgICB0aGlzLmNs aWNrKCB0YWdJY29uU2VsZWN0b3IgKTsKKyAgICAvLyAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0 aW9uKCl7CisgICAgLy8gICAgICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCB0YWdBcmVhU2Vs ZWN0b3IsICdUYWcgYXJlYSBpcyBub3cgZD0KaXNwbGF5ZWQnICk7CisgICAgLy8gICAgfSk7Cisg ICAgLy99KTsKKyAgICAvL3NwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5vdGF0aW9u KCl7CisgICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICdhbm5vdGF0aW9uIGFyZWEgc2hvdWxk IGNsb3NlIHdoZW4gdGhlIGhpc3Rvcj0KeSBwYW5lbCB0YWcgaWNvbiBpcyBjbGlja2VkIGFnYWlu JyApOworICAgIC8vCisgICAgLy8gICAgdGhpcy5jbGljayggdGFnSWNvblNlbGVjdG9yICk7Cisg ICAgLy8gICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlvbigpeworICAgIC8vICAgICAgICB0aGlz LnRlc3QuYXNzZXJ0Tm90VmlzaWJsZSggdGFnQXJlYVNlbGVjdG9yLCAnVGFnIGFyZWEgaXMgbm89 CncgaGlkZGVuJyApOworICAgIC8vICAgIH0pOworICAgIC8vfSk7CisgICAgLy8KKyAgICAvLy8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPQotLSBhbm5vdGF0aW9uCisgICAgLy8vLyBrZWVwaW5nIHRoaXMgbGlnaHQgaGVy ZSAtIGJldHRlciBmb3IgaXRzIG93biB0ZXN0IGZpbGUKKyAgICAvLy8vVE9ETzogY2hlY2sgdG9v bHRpcHMKKyAgICAvL3NwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gb3BlbkFubm90YXRpb24oKXsK KyAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ2Fubm90YXRpb24gYXJlYSBzaG91bGQgb3Bl biB3aGVuIHRoZSBoaXN0b3J5PQogcGFuZWwgYW5ub3RhdGlvbiBpY29uIGlzIGNsaWNrZWQnICk7 CisgICAgLy8KKyAgICAvLyAgICB0aGlzLmNsaWNrKCBhbm5vSWNvblNlbGVjdG9yICk7CisgICAg Ly8gICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlvbigpeworICAgIC8vICAgICAgICB0aGlzLnRl c3QuYXNzZXJ0VmlzaWJsZSggYW5ub0FyZWFTZWxlY3RvciwgJ0Fubm90YXRpb24gYXJlYSA9Cmlz IG5vdyBkaXNwbGF5ZWQnICk7CisgICAgLy8gICAgfSk7CisgICAgLy99KTsKKyAgICAvL3NwYWNl Z2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5vdGF0aW9uKCl7CisgICAgLy8gICAgdGhpcy50 ZXN0LmNvbW1lbnQoICdhbm5vdGF0aW9uIGFyZWEgc2hvdWxkIGNsb3NlIHdoZW4gdGhlIGhpc3Rv cj0KeSBwYW5lbCB0YWcgaWNvbiBpcyBjbGlja2VkIGFnYWluJyApOworICAgIC8vCisgICAgLy8g ICAgdGhpcy5jbGljayggYW5ub0ljb25TZWxlY3RvciApOworICAgIC8vICAgIHRoaXMud2FpdCgg MTAwMCwgZnVuY3Rpb24oKXsKKyAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2li bGUoIGFubm9BcmVhU2VsZWN0b3IsICdBbm5vdGF0aW9uIGFyPQplYSBpcyBub3cgaGlkZGVuJyAp OworICAgIC8vICAgIH0pOworICAgIC8vfSk7CisgICAgLy8KKyAgICAvLy8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQot LSByZWZyZXNoIGJ1dHRvbgorICAgIC8vc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbiByZWZyZXNo QnV0dG9uKCl7CisgICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICdIaXN0b3J5IHBhbmVsIHNo b3VsZCByZWZyZXNoIHdoZW4gdGhlIGhpc3Rvcj0KeSByZWZyZXNoIGljb24gaXMgY2xpY2tlZCcg KTsKKyAgICAvLworICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoICByZWZyZXNoQnV0 dG9uU2VsZWN0b3IsICJGb3VuZCByZWZyZXNoIGI9CnV0dG9uIiApOworICAgIC8vICAgIHRoaXMu dGVzdC5hc3NlcnRWaXNpYmxlKCByZWZyZXNoQnV0dG9uU2VsZWN0b3IsICJSZWZyZXNoIGJ1dHRv biA9CmlzIHZpc2libGUiICk7CisgICAgLy8gICAgdGhpcy50ZXN0LmFzc2VydFZpc2libGUoIHJl ZnJlc2hCdXR0b25TZWxlY3RvciArICcgJyArIHJlZnJlc2hCdT0KdHRvbkljb25TZWxlY3Rvciwg IlJlZnJlc2ggaWNvbiBpcyB2aXNpYmxlIiApOworICAgIC8vCisgICAgLy8gICAgLy90aGlzLmFz c2VydE5hdmlnYXRpb25SZXF1ZXN0ZWQoIHJlZnJlc2hCdXR0b25IcmVmLCAiSGlzdG9yeSByZT0K ZnJlc2hlZCB3aGVuIGNsaWNraW5nIHJlZnJlc2ggaWNvbiIsIGZ1bmN0aW9uKCl7CisgICAgLy8g ICAgLy8gICAgdGhpcy5jbGljayggcmVmcmVzaEJ1dHRvblNlbGVjdG9yICk7CisgICAgLy8gICAg Ly99KTsKKyAgICAvL30pOworICAgIC8vCisgICAgLy8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0gaGRhcyBjYW4g YmUgZXhwYW5kZWQgYnkgY2xpY2tpbmcgb24gdGhlIGhkYQorICAgIC8vLy8gYnJva2VuIGluIHdl YmtpdCB3LyBqcSAxLjcKKyAgICAvL3NwYWNlZ2hvc3QuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFz KCBmdW5jdGlvbigpeworICAgIC8vICAgIHRoaXMudGVzdC5jb21tZW50KCAnSERBcyBjYW4gYmUg ZXhwYW5kZWQgYnkgY2xpY2tpbmcgb24gdGhlIG5hbWU9CicgKTsKKyAgICAvLyAgICB2YXIgdXBs b2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0LScgKyB1cGxvYWRJZDsKKyAgICAvLworICAgIC8v ICAgIHRoaXMuY2xpY2soIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3RvcnlwYW5l bC5kYXRhLnNlbGU9CmN0b3JzLmhkYS50aXRsZSApOworICAgIC8vICAgIHRoaXMud2FpdCggMTAw MCwgZnVuY3Rpb24oKXsKKyAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydFZpc2libGUoIHVw bG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3RvPQpyeXBhbmVsLmRhdGEuc2VsZWN0b3Jz LmhkYS5ib2R5LAorICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUgaXMg dmlzaWJsZSIgKTsKKyAgICAvLyAgICB9KTsKKyAgICAvL30pOworICAgIC8vCisgICAgLy8vLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLT0KLS0gZXhwYW5kZWQgaGRhcyBzdGlsbCBleHBhbmRlZCBhZnRlciByZWZyZXNoCisg ICAgLy9zcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7CisgICAgLy8gICAgdGhpcy50ZXN0LmNv bW1lbnQoICdFeHBhbmRlZCBoZGFzIGFyZSBzdGlsbCBleHBhbmRlZCBhZnRlciBhIHJlZj0KcmVz aCcgKTsKKyAgICAvLyAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0LScgKyB1 cGxvYWRJZDsKKyAgICAvLworICAgIC8vICAgIHRoaXMuY2xpY2soIHJlZnJlc2hCdXR0b25TZWxl Y3RvciApOworICAgIC8vICAgIHRoaXMuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBmdW5jdGlv bigpeworICAgIC8vICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggdXBsb2FkZWRTZWxl Y3RvciArICcgJyArIHRoaXMuaGlzdG89CnJ5cGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHks CisgICAgLy8gICAgICAgICAgICAiQm9keSBmb3IgdXBsb2FkZWQgZmlsZSBpcyB2aXNpYmxlIiAp OworICAgIC8vICAgIH0pOworICAgIC8vICAgIC8vIHRoaXMgd2lsbCBicmVhazogd2Via2l0ICsg anEgMS43CisgICAgLy99KTsKKyAgICAvLworICAgIC8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tIGV4cGFuZGVk IGhkYXMgY29sbGFwc2UgYnkgY2xpY2tpbmcgbmFtZSBhZ2FpbgorICAgIC8vc3BhY2VnaG9zdC50 aGVuKCBmdW5jdGlvbigpeworICAgIC8vICAgIHRoaXMudGVzdC5jb21tZW50KCAnRXhwYW5kZWQg aGRhcyBjb2xsYXBzZSBieSBjbGlja2luZyBuYW1lIGFnYWk9Cm4nICk7CisgICAgLy8gICAgdmFy IHVwbG9hZGVkU2VsZWN0b3IgPTNEICcjZGF0YXNldC0nICsgdXBsb2FkSWQ7CisgICAgLy8KKyAg ICAvLyAgICB0aGlzLmNsaWNrKCB1cGxvYWRlZFNlbGVjdG9yICsgJyAnICsgdGhpcy5oaXN0b3J5 cGFuZWwuZGF0YS5zZWxlPQpjdG9ycy5oZGEudGl0bGUgKTsKKyAgICAvLyAgICB0aGlzLndhaXQo IDUwMCwgZnVuY3Rpb24oKXsKKyAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2li bGUoIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpPQpzdG9yeXBhbmVsLmRhdGEuc2Vs ZWN0b3JzLmhkYS5ib2R5LAorICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZp bGUgaXMgbm90IHZpc2libGUiICk7CisgICAgLy8gICAgfSk7CisgICAgLy99KTsKKyAgICAvLwor ICAgIC8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tIGNvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxhcHNlZCBhZnRl ciByZWZyZXNoCisgICAgLy9zcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7CisgICAgLy8gICAg dGhpcy50ZXN0LmNvbW1lbnQoICdjb2xsYXBzZWQgaGRhcyBzdGlsbCBjb2xsYXBzZWQgYWZ0ZXIg YSByZWZyZT0Kc2gnICk7CisgICAgLy8gICAgdmFyIHVwbG9hZGVkU2VsZWN0b3IgPTNEICcjZGF0 YXNldC0nICsgdXBsb2FkSWQ7CisgICAgLy8KKyAgICAvLyAgICB0aGlzLmNsaWNrKCByZWZyZXNo QnV0dG9uU2VsZWN0b3IgKTsKKyAgICAvLyAgICB0aGlzLmhpc3RvcnlwYW5lbC53YWl0Rm9ySGRh cyggZnVuY3Rpb24oKXsKKyAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUo IHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpPQpzdG9yeXBhbmVsLmRhdGEuc2VsZWN0 b3JzLmhkYS5ib2R5LAorICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUg aXMgbm90IHZpc2libGUiICk7CisgICAgLy8gICAgfSk7CisgICAgLy99KTsKICAgICAvKgogICAg ICovCiAgICAgLy8gPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAoKZGlmZiAtciAz MTM1N2VkZjI2MGVhNmIyNTlkYzY4MjMwZjMwODNiM2YwZmFmY2EwIC1yIDE0Nzk2YWM4NjdlYjBj N2RjNTE3ZWVkPQphMWVjODI1MGM5Yjg2OGJiNyB0ZXN0L2Nhc3BlcmpzL3NwYWNlZ2hvc3QuanMK LS0tIGEvdGVzdC9jYXNwZXJqcy9zcGFjZWdob3N0LmpzCisrKyBiL3Rlc3QvY2FzcGVyanMvc3Bh Y2VnaG9zdC5qcwpAQCAtOTExLDYgKzkxMSw3IEBACiAgICAgaWYoICF1dGlscy5pc09iamVjdCgg b2JqZWN0ICkgKXsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZm9yKCB2YXIgaT0zRDA7IGk8a2V5c0Fy cmF5Lmxlbmd0aDsgaSArPTNEIDEgKXsKICAgICAgICAgaWYoICFvYmplY3QuaGFzT3duUHJvcGVy dHkoIGtleXNBcnJheVtpXSApICl7CisgICAgICAgICAgICB0aGlzLmRlYnVnKCAnbWlzc2luZyBr ZXk6ICcgKyBrZXlzQXJyYXlbaV0gKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg ICAgfQogICAgIH0KCmRpZmYgLXIgMzEzNTdlZGYyNjBlYTZiMjU5ZGM2ODIzMGYzMDgzYjNmMGZh ZmNhMCAtciAxNDc5NmFjODY3ZWIwYzdkYzUxN2VlZD0KYTFlYzgyNTBjOWI4NjhiYjcgdGVzdC91 bml0L21hbmFnZXJzL3Rlc3RfSGlzdG9yeU1hbmFnZXIucHkKLS0tIGEvdGVzdC91bml0L21hbmFn ZXJzL3Rlc3RfSGlzdG9yeU1hbmFnZXIucHkKKysrIGIvdGVzdC91bml0L21hbmFnZXJzL3Rlc3Rf SGlzdG9yeU1hbmFnZXIucHkKQEAgLTQzLDYgKzQzLDggQEAKICAgICAgICAgc2VsZi5sb2coICJz aG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSBuZXcgaGlzdG9yeSIgKQogICAgICAgICBoaXN0b3J5 MSA9M0Qgc2VsZi5oaXN0b3J5X21nci5jcmVhdGUoIHNlbGYudHJhbnMsIG5hbWU9M0QnaGlzdG9y eTE9CicsIHVzZXI9M0R1c2VyMiApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSggaGlz dG9yeTEsIG1vZGVsLkhpc3RvcnkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBoaXN0b3J5 MS5uYW1lLCAnaGlzdG9yeTEnICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggaGlzdG9yeTEu dXNlciwgdXNlcjIgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBoaXN0b3J5MSwgc2VsZi50 cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5IaXM9CnRvcnkgKS5nZXQoIGhpc3RvcnkxLmlk ICkgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBoaXN0b3J5MSwKICAgICAgICAgICAgIHNl bGYudHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuSGlzdG9yeSApLmZpbHRlciggbW9kZWwu SGlzPQp0b3J5Lm5hbWUgPTNEPTNEICdoaXN0b3J5MScgKS5vbmUoKSApCgoKaHR0cHM6Ly9iaXRi dWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzJhNjYzNTEwMzUzYi8KQ2hh bmdlc2V0OiAgIDJhNjYzNTEwMzUzYgpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAg ICAgICAgMjAxNS0wMS0xNCAyMjozMTowNSswMDowMApTdW1tYXJ5OiAgICAgRml4IHRvIDE0Nzk2 YWM6IGZvciBoaXN0b3J5LXBhbmVsLXRlc3RzLmpzCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYg LXIgMTQ3OTZhYzg2N2ViMGM3ZGM1MTdlZWRhMWVjODI1MGM5Yjg2OGJiNyAtciAyYTY2MzUxMDM1 M2JhODI2OGRlZmYwNj0KM2JhNTBkMjdkZTE4MGI4ODkgdGVzdC9jYXNwZXJqcy9oaXN0b3J5LXBh bmVsLXRlc3RzLmpzCi0tLSBhL3Rlc3QvY2FzcGVyanMvaGlzdG9yeS1wYW5lbC10ZXN0cy5qcwor KysgYi90ZXN0L2Nhc3BlcmpzL2hpc3RvcnktcGFuZWwtdGVzdHMuanMKQEAgLTk5LDcgKzk5LDYg QEAKICAgICAgICAgdGhpcy5wYWdlLnNlbmRFdmVudCggJ2tleXByZXNzJywgdGhpcy5wYWdlLmV2 ZW50LmtleS5FbnRlciApOwogICAgICAgICAvLyB3YWl0IGZvciBzZW5kIGFuZCByZS1yZW5kZXIg bmFtZQogICAgICAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICB0 aGlzLmNhcHR1cmUoICduYW1lLnBuZycgKTsKICAgICAgICAgICAgIHRoaXMudGVzdC5hc3NlcnRT ZWxlY3Rvckhhc1RleHQoIG5hbWVTZWxlY3RvciwgbmV3SGlzdG9yeU5hbWUsPQogJ0hpc3Rvcnkg bmFtZSBpcyAnICsgbmV3SGlzdG9yeU5hbWUgKTsKICAgICAgICAgICAgIHRoaXMudGVzdC5hc3Nl cnREb2VzbnRFeGlzdCggZWRpdGFibGVUZXh0SW5wdXQsICJJbnB1dCBkaXNhcHBlPQphcnMgYWZ0 ZXIgcHJlc3NpbmcgZW50ZXIiICk7CiAgICAgICAgIH0pOwpAQCAtMTEzLDE1OCArMTEyLDE1NyBA QAo9MjAKICAgICAgICAgdGhpcy5wYWdlLnNlbmRFdmVudCggJ21vdXNlZG93bicsIC0xLCAtMSAp OwogICAgICAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICB0aGlz LmRlYnVnKCAnd2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YT0KYXQnICk7CiAgICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0U2VsZWN0b3JIYXNUZXh0KCBu YW1lU2VsZWN0b3IsIG5ld0hpc3RvcnlOYW1lLD0KICdIaXN0b3J5IG5hbWUgaXMgU1RJTEwgJyAr IG5ld0hpc3RvcnlOYW1lICk7CiAgICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RG9lc250RXhp c3QoIGVkaXRhYmxlVGV4dElucHV0LCAiSW5wdXQgZGlzYXBwZT0KYXJzIGFmdGVyIGNsaWNraW5n IGF3YXkiICk7CiAgICAgICAgIH0pOwogICAgIH0pOwo9MjAKLSAgICAvL3NwYWNlZ2hvc3QudGhl biggZnVuY3Rpb24oKXsKLSAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ25hbWUgc2hvdWxk IHJldmVydCBpZiB1c2VyIGhpdHMgRVNDIHdoaWxlIGVkPQppdGluZycgKTsKLSAgICAvLwotICAg IC8vICAgIHRoaXMuY2xpY2soIG5hbWVTZWxlY3RvciApOwotICAgIC8vICAgIHRoaXMucGFnZS5z ZW5kRXZlbnQoICdrZXlwcmVzcycsICJBcnNlbmljIEJhY3RlcmlhIiApOwotICAgIC8vCi0gICAg Ly8gICAgdGhpcy5wYWdlLnNlbmRFdmVudCggJ2tleXByZXNzJywgdGhpcy5wYWdlLmV2ZW50Lmtl eS5Fc2NhcGUgKTsKLSAgICAvLyAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7Ci0gICAg Ly8gICAgICAgIHRoaXMudGVzdC5hc3NlcnRTZWxlY3Rvckhhc1RleHQoIG5hbWVTZWxlY3Rvciwg bmV3SGlzdG9yeU5hbT0KZSwgJ0hpc3RvcnkgbmFtZSBpcyBTVElMTCAnICsgbmV3SGlzdG9yeU5h bWUgKTsKLSAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydERvZXNudEV4aXN0KCBlZGl0YWJs ZVRleHRJbnB1dCwgIklucHV0IGRpc2FwPQpwZWFycyBhZnRlciBoaXR0aW5nIEVTQyIgKTsKLSAg ICAvLyAgICB9KTsKLSAgICAvL30pOwotICAgIC8vCi0gICAgLy8vLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0gY2hl Y2sgc3RydWN0dXJlIG9mIE5PTiBlbXB0eSBoaXN0b3J5Ci0gICAgLy8vLyB1cGxvYWQgZmlsZTog MS50eHQKLSAgICAvL3NwYWNlZ2hvc3QuYXBpLnRvb2xzLnRoZW5VcGxvYWRUb0N1cnJlbnQoeyBm aWxlcGF0aDogZmlsZXBhdGhUb1VwbG9hPQpkIH0sIGZ1bmN0aW9uIHVwbG9hZENhbGxiYWNrKCBp ZCwganNvbiApewotICAgIC8vICAgIHVwbG9hZElkID0zRCBpZDsKLSAgICAvL30pOwotICAgIC8v Ci0gICAgLy9zcGFjZWdob3N0Lm9wZW5Ib21lUGFnZSgpLnRoZW4oIGZ1bmN0aW9uIGNoZWNrUGFu ZWxTdHJ1Y3R1cmUoKXsKLSAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ2NoZWNraW5nIHN0 cnVjdHVyZSBvZiBub24tZW1wdHkgcGFuZWwnICk7Ci0gICAgLy8KLSAgICAvLyAgICB0aGlzLnRl c3QuY29tbWVudCggImhpc3RvcnkgbmFtZSBzaG91bGQgZXhpc3QsIGJlIHZpc2libGUsIGFuZCBo PQphdmUgdGV4dCAiICsgdW5uYW1lZE5hbWUgKTsKLSAgICAvLyAgICB0aGlzLnRlc3QuYXNzZXJ0 RXhpc3RzKCBuYW1lU2VsZWN0b3IsIG5hbWVTZWxlY3RvciArICcgZXhpc3RzJyApOwotICAgIC8v ICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBuYW1lU2VsZWN0b3IsICdIaXN0b3J5IG5hbWUg aXMgdmlzaWJsZSc9CiApOwotICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRTZWxlY3Rvckhhc1Rl eHQoIG5hbWVTZWxlY3RvciwgbmV3SGlzdG9yeU5hbWUsICc9Ckhpc3RvcnkgbmFtZSBpcyAnICsg bmV3SGlzdG9yeU5hbWUgKTsKLSAgICAvLwotICAgIC8vICAgIHZhciBvbmV0eHRGaWxlc2l6ZSA9 M0QgcmVxdWlyZSggJ2ZzJyApLnNpemUoIGZpbGVwYXRoVG9VcGxvYWQgKSwKLSAgICAvLyAgICAg ICAgZXhwZWN0ZWRTaXplID0zRCBvbmV0eHRGaWxlc2l6ZSArICcgYnl0ZXMnOwotICAgIC8vICAg IHRoaXMudGVzdC5jb21tZW50KCAiaGlzdG9yeSBzaG91bGQgZGlzcGxheSBzaXplIGFuZCBzaXpl IHNob3VsZCA9CmJlICIgKyBvbmV0eHRGaWxlc2l6ZSArICIgYnl0ZXMiICk7Ci0gICAgLy8gICAg dGhpcy50ZXN0LmFzc2VydEV4aXN0cyggc2l6ZVNlbGVjdG9yLCAnRm91bmQgJyArIHNpemVTZWxl Y3RvciApOwotICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBzaXplU2VsZWN0b3Is ICdIaXN0b3J5IHNpemUgaXMgdmlzaWJsZSc9CiApOwotICAgIC8vICAgIHRoaXMudGVzdC5hc3Nl cnRTZWxlY3Rvckhhc1RleHQoIHNpemVTZWxlY3RvciwgZXhwZWN0ZWRTaXplLAotICAgIC8vICAg ICAgICAnSGlzdG9yeSBzaXplIGhhcyAiJyArIGV4cGVjdGVkU2l6ZSArICciOiAnICsgdGhpcy5m ZXRjaFRleHQ9Ciggc2l6ZVNlbGVjdG9yICkudHJpbSgpICk7Ci0gICAgLy8KLSAgICAvLyAgICB0 aGlzLnRlc3QuY29tbWVudCggInRhZ3MgYW5kIGFubm90YXRpb24gaWNvbnMgc2hvdWxkIGJlIGF2 YWlsYWJsPQplIiApOwotICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoIHRhZ0ljb25T ZWxlY3RvciwgICdUYWcgaWNvbiBidXR0b24gZm91bmQ9CicgKTsKLSAgICAvLyAgICB0aGlzLnRl c3QuYXNzZXJ0RXhpc3RzKCBhbm5vSWNvblNlbGVjdG9yLCAnQW5ub3RhdGlvbiBpY29uIGJ1dHRv PQpuIGZvdW5kJyApOwotICAgIC8vCi0gICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICJBIG1l c3NhZ2UgYWJvdXQgdGhlIGN1cnJlbnQgaGlzdG9yeSBiZWluZyBlbT0KcHR5IHNob3VsZCBOT1Qg YmUgZGlzcGxheWVkIiApOwotICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoIGVtcHR5 TXNnU2VsZWN0b3IsIGVtcHR5TXNnU2VsZWN0b3IgKyAnIGU9Cnhpc3RzJyApOwotICAgIC8vICAg IHRoaXMudGVzdC5hc3NlcnROb3RWaXNpYmxlKCBlbXB0eU1zZ1NlbGVjdG9yLCAnRW1wdHkgaGlz dG9yeSBtZXM9CnNhZ2UgaXMgTk9UIHZpc2libGUnICk7Ci0gICAgLy99KTsKLSAgICAvLwotICAg IC8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS09Ci0tIHRhZ3MKLSAgICAvLy8vIGtlZXBpbmcgdGhpcyBsaWdodCBoZXJl IC0gYmV0dGVyIGZvciBpdHMgb3duIHRlc3QgZmlsZQotICAgIC8vLy9UT0RPOiBjaGVjayB0b29s dGlwcwotICAgIC8vc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbiBvcGVuVGFncygpewotICAgIC8v ICAgIHRoaXMudGVzdC5jb21tZW50KCAndGFnIGFyZWEgc2hvdWxkIG9wZW4gd2hlbiB0aGUgaGlz dG9yeSBwYW5lbCA9CnRhZyBpY29uIGlzIGNsaWNrZWQnICk7Ci0gICAgLy8KLSAgICAvLyAgICB0 aGlzLmNsaWNrKCB0YWdJY29uU2VsZWN0b3IgKTsKLSAgICAvLyAgICB0aGlzLndhaXQoIDEwMDAs IGZ1bmN0aW9uKCl7Ci0gICAgLy8gICAgICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCB0YWdB cmVhU2VsZWN0b3IsICdUYWcgYXJlYSBpcyBub3cgZD0KaXNwbGF5ZWQnICk7Ci0gICAgLy8gICAg fSk7Ci0gICAgLy99KTsKLSAgICAvL3NwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5v dGF0aW9uKCl7Ci0gICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICdhbm5vdGF0aW9uIGFyZWEg c2hvdWxkIGNsb3NlIHdoZW4gdGhlIGhpc3Rvcj0KeSBwYW5lbCB0YWcgaWNvbiBpcyBjbGlja2Vk IGFnYWluJyApOwotICAgIC8vCi0gICAgLy8gICAgdGhpcy5jbGljayggdGFnSWNvblNlbGVjdG9y ICk7Ci0gICAgLy8gICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlvbigpewotICAgIC8vICAgICAg ICB0aGlzLnRlc3QuYXNzZXJ0Tm90VmlzaWJsZSggdGFnQXJlYVNlbGVjdG9yLCAnVGFnIGFyZWEg aXMgbm89CncgaGlkZGVuJyApOwotICAgIC8vICAgIH0pOwotICAgIC8vfSk7Ci0gICAgLy8KLSAg ICAvLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPQotLSBhbm5vdGF0aW9uCi0gICAgLy8vLyBrZWVwaW5nIHRoaXMgbGln aHQgaGVyZSAtIGJldHRlciBmb3IgaXRzIG93biB0ZXN0IGZpbGUKLSAgICAvLy8vVE9ETzogY2hl Y2sgdG9vbHRpcHMKLSAgICAvL3NwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gb3BlbkFubm90YXRp b24oKXsKLSAgICAvLyAgICB0aGlzLnRlc3QuY29tbWVudCggJ2Fubm90YXRpb24gYXJlYSBzaG91 bGQgb3BlbiB3aGVuIHRoZSBoaXN0b3J5PQogcGFuZWwgYW5ub3RhdGlvbiBpY29uIGlzIGNsaWNr ZWQnICk7Ci0gICAgLy8KLSAgICAvLyAgICB0aGlzLmNsaWNrKCBhbm5vSWNvblNlbGVjdG9yICk7 Ci0gICAgLy8gICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlvbigpewotICAgIC8vICAgICAgICB0 aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggYW5ub0FyZWFTZWxlY3RvciwgJ0Fubm90YXRpb24gYXJl YSA9CmlzIG5vdyBkaXNwbGF5ZWQnICk7Ci0gICAgLy8gICAgfSk7Ci0gICAgLy99KTsKLSAgICAv L3NwYWNlZ2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5vdGF0aW9uKCl7Ci0gICAgLy8gICAg dGhpcy50ZXN0LmNvbW1lbnQoICdhbm5vdGF0aW9uIGFyZWEgc2hvdWxkIGNsb3NlIHdoZW4gdGhl IGhpc3Rvcj0KeSBwYW5lbCB0YWcgaWNvbiBpcyBjbGlja2VkIGFnYWluJyApOwotICAgIC8vCi0g ICAgLy8gICAgdGhpcy5jbGljayggYW5ub0ljb25TZWxlY3RvciApOwotICAgIC8vICAgIHRoaXMu d2FpdCggMTAwMCwgZnVuY3Rpb24oKXsKLSAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5v dFZpc2libGUoIGFubm9BcmVhU2VsZWN0b3IsICdBbm5vdGF0aW9uIGFyPQplYSBpcyBub3cgaGlk ZGVuJyApOwotICAgIC8vICAgIH0pOwotICAgIC8vfSk7Ci0gICAgLy8KLSAgICAvLy8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPQotLSByZWZyZXNoIGJ1dHRvbgotICAgIC8vc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbiBy ZWZyZXNoQnV0dG9uKCl7Ci0gICAgLy8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICdIaXN0b3J5IHBh bmVsIHNob3VsZCByZWZyZXNoIHdoZW4gdGhlIGhpc3Rvcj0KeSByZWZyZXNoIGljb24gaXMgY2xp Y2tlZCcgKTsKLSAgICAvLwotICAgIC8vICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoICByZWZy ZXNoQnV0dG9uU2VsZWN0b3IsICJGb3VuZCByZWZyZXNoIGI9CnV0dG9uIiApOwotICAgIC8vICAg IHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCByZWZyZXNoQnV0dG9uU2VsZWN0b3IsICJSZWZyZXNo IGJ1dHRvbiA9CmlzIHZpc2libGUiICk7Ci0gICAgLy8gICAgdGhpcy50ZXN0LmFzc2VydFZpc2li bGUoIHJlZnJlc2hCdXR0b25TZWxlY3RvciArICcgJyArIHJlZnJlc2hCdT0KdHRvbkljb25TZWxl Y3RvciwgIlJlZnJlc2ggaWNvbiBpcyB2aXNpYmxlIiApOwotICAgIC8vCi0gICAgLy8gICAgLy90 aGlzLmFzc2VydE5hdmlnYXRpb25SZXF1ZXN0ZWQoIHJlZnJlc2hCdXR0b25IcmVmLCAiSGlzdG9y eSByZT0KZnJlc2hlZCB3aGVuIGNsaWNraW5nIHJlZnJlc2ggaWNvbiIsIGZ1bmN0aW9uKCl7Ci0g ICAgLy8gICAgLy8gICAgdGhpcy5jbGljayggcmVmcmVzaEJ1dHRvblNlbGVjdG9yICk7Ci0gICAg Ly8gICAgLy99KTsKLSAgICAvL30pOwotICAgIC8vCi0gICAgLy8vLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0gaGRh cyBjYW4gYmUgZXhwYW5kZWQgYnkgY2xpY2tpbmcgb24gdGhlIGhkYQotICAgIC8vLy8gYnJva2Vu IGluIHdlYmtpdCB3LyBqcSAxLjcKLSAgICAvL3NwYWNlZ2hvc3QuaGlzdG9yeXBhbmVsLndhaXRG b3JIZGFzKCBmdW5jdGlvbigpewotICAgIC8vICAgIHRoaXMudGVzdC5jb21tZW50KCAnSERBcyBj YW4gYmUgZXhwYW5kZWQgYnkgY2xpY2tpbmcgb24gdGhlIG5hbWU9CicgKTsKLSAgICAvLyAgICB2 YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0LScgKyB1cGxvYWRJZDsKLSAgICAvLwot ICAgIC8vICAgIHRoaXMuY2xpY2soIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3Rv cnlwYW5lbC5kYXRhLnNlbGU9CmN0b3JzLmhkYS50aXRsZSApOwotICAgIC8vICAgIHRoaXMud2Fp dCggMTAwMCwgZnVuY3Rpb24oKXsKLSAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydFZpc2li bGUoIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpc3RvPQpyeXBhbmVsLmRhdGEuc2Vs ZWN0b3JzLmhkYS5ib2R5LAotICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVkIGZp bGUgaXMgdmlzaWJsZSIgKTsKLSAgICAvLyAgICB9KTsKLSAgICAvL30pOwotICAgIC8vCi0gICAg Ly8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLT0KLS0gZXhwYW5kZWQgaGRhcyBzdGlsbCBleHBhbmRlZCBhZnRlciByZWZy ZXNoCi0gICAgLy9zcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7Ci0gICAgLy8gICAgdGhpcy50 ZXN0LmNvbW1lbnQoICdFeHBhbmRlZCBoZGFzIGFyZSBzdGlsbCBleHBhbmRlZCBhZnRlciBhIHJl Zj0KcmVzaCcgKTsKLSAgICAvLyAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0 LScgKyB1cGxvYWRJZDsKLSAgICAvLwotICAgIC8vICAgIHRoaXMuY2xpY2soIHJlZnJlc2hCdXR0 b25TZWxlY3RvciApOwotICAgIC8vICAgIHRoaXMuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBm dW5jdGlvbigpewotICAgIC8vICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggdXBsb2Fk ZWRTZWxlY3RvciArICcgJyArIHRoaXMuaGlzdG89CnJ5cGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRh LmJvZHksCi0gICAgLy8gICAgICAgICAgICAiQm9keSBmb3IgdXBsb2FkZWQgZmlsZSBpcyB2aXNp YmxlIiApOwotICAgIC8vICAgIH0pOwotICAgIC8vICAgIC8vIHRoaXMgd2lsbCBicmVhazogd2Vi a2l0ICsganEgMS43Ci0gICAgLy99KTsKLSAgICAvLwotICAgIC8vLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tIGV4 cGFuZGVkIGhkYXMgY29sbGFwc2UgYnkgY2xpY2tpbmcgbmFtZSBhZ2FpbgotICAgIC8vc3BhY2Vn aG9zdC50aGVuKCBmdW5jdGlvbigpewotICAgIC8vICAgIHRoaXMudGVzdC5jb21tZW50KCAnRXhw YW5kZWQgaGRhcyBjb2xsYXBzZSBieSBjbGlja2luZyBuYW1lIGFnYWk9Cm4nICk7Ci0gICAgLy8g ICAgdmFyIHVwbG9hZGVkU2VsZWN0b3IgPTNEICcjZGF0YXNldC0nICsgdXBsb2FkSWQ7Ci0gICAg Ly8KLSAgICAvLyAgICB0aGlzLmNsaWNrKCB1cGxvYWRlZFNlbGVjdG9yICsgJyAnICsgdGhpcy5o aXN0b3J5cGFuZWwuZGF0YS5zZWxlPQpjdG9ycy5oZGEudGl0bGUgKTsKLSAgICAvLyAgICB0aGlz LndhaXQoIDUwMCwgZnVuY3Rpb24oKXsKLSAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5v dFZpc2libGUoIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpPQpzdG9yeXBhbmVsLmRh dGEuc2VsZWN0b3JzLmhkYS5ib2R5LAotICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9h ZGVkIGZpbGUgaXMgbm90IHZpc2libGUiICk7Ci0gICAgLy8gICAgfSk7Ci0gICAgLy99KTsKLSAg ICAvLwotICAgIC8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tIGNvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxhcHNl ZCBhZnRlciByZWZyZXNoCi0gICAgLy9zcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7Ci0gICAg Ly8gICAgdGhpcy50ZXN0LmNvbW1lbnQoICdjb2xsYXBzZWQgaGRhcyBzdGlsbCBjb2xsYXBzZWQg YWZ0ZXIgYSByZWZyZT0Kc2gnICk7Ci0gICAgLy8gICAgdmFyIHVwbG9hZGVkU2VsZWN0b3IgPTNE ICcjZGF0YXNldC0nICsgdXBsb2FkSWQ7Ci0gICAgLy8KLSAgICAvLyAgICB0aGlzLmNsaWNrKCBy ZWZyZXNoQnV0dG9uU2VsZWN0b3IgKTsKLSAgICAvLyAgICB0aGlzLmhpc3RvcnlwYW5lbC53YWl0 Rm9ySGRhcyggZnVuY3Rpb24oKXsKLSAgICAvLyAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZp c2libGUoIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0aGlzLmhpPQpzdG9yeXBhbmVsLmRhdGEu c2VsZWN0b3JzLmhkYS5ib2R5LAotICAgIC8vICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVk IGZpbGUgaXMgbm90IHZpc2libGUiICk7Ci0gICAgLy8gICAgfSk7Ci0gICAgLy99KTsKKyAgICBz cGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uKCl7CisgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAn bmFtZSBzaG91bGQgcmV2ZXJ0IGlmIHVzZXIgaGl0cyBFU0Mgd2hpbGUgZWRpdD0KaW5nJyApOwor CisgICAgICAgIHRoaXMuY2xpY2soIG5hbWVTZWxlY3RvciApOworICAgICAgICB0aGlzLnBhZ2Uu c2VuZEV2ZW50KCAna2V5cHJlc3MnLCAiQXJzZW5pYyBCYWN0ZXJpYSIgKTsKKworICAgICAgICB0 aGlzLnBhZ2Uuc2VuZEV2ZW50KCAna2V5cHJlc3MnLCB0aGlzLnBhZ2UuZXZlbnQua2V5LkVzY2Fw ZSApOworICAgICAgICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0 aGlzLnRlc3QuYXNzZXJ0U2VsZWN0b3JIYXNUZXh0KCBuYW1lU2VsZWN0b3IsIG5ld0hpc3RvcnlO YW1lLD0KICdIaXN0b3J5IG5hbWUgaXMgU1RJTEwgJyArIG5ld0hpc3RvcnlOYW1lICk7CisgICAg ICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RG9lc250RXhpc3QoIGVkaXRhYmxlVGV4dElucHV0LCAi SW5wdXQgZGlzYXBwZT0KYXJzIGFmdGVyIGhpdHRpbmcgRVNDIiApOworICAgICAgICB9KTsKKyAg ICB9KTsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09CiBjaGVjayBzdHJ1Y3R1cmUgb2YgTk9OIGVtcHR5 IGhpc3RvcnkKKyAgICAvLyB1cGxvYWQgZmlsZTogMS50eHQKKyAgICBzcGFjZWdob3N0LmFwaS50 b29scy50aGVuVXBsb2FkVG9DdXJyZW50KHsgZmlsZXBhdGg6IGZpbGVwYXRoVG9VcGxvYWQgPQp9 LCBmdW5jdGlvbiB1cGxvYWRDYWxsYmFjayggaWQsIGpzb24gKXsKKyAgICAgICAgdXBsb2FkSWQg PTNEIGlkOworICAgIH0pOworCisgICAgc3BhY2VnaG9zdC5vcGVuSG9tZVBhZ2UoKS50aGVuKCBm dW5jdGlvbiBjaGVja1BhbmVsU3RydWN0dXJlKCl7CisgICAgICAgIHRoaXMudGVzdC5jb21tZW50 KCAnY2hlY2tpbmcgc3RydWN0dXJlIG9mIG5vbi1lbXB0eSBwYW5lbCcgKTsKKworICAgICAgICB0 aGlzLnRlc3QuY29tbWVudCggImhpc3RvcnkgbmFtZSBzaG91bGQgZXhpc3QsIGJlIHZpc2libGUs IGFuZCBoYXY9CmUgdGV4dCAiICsgdW5uYW1lZE5hbWUgKTsKKyAgICAgICAgdGhpcy50ZXN0LmFz c2VydEV4aXN0cyggbmFtZVNlbGVjdG9yLCBuYW1lU2VsZWN0b3IgKyAnIGV4aXN0cycgKTsKKyAg ICAgICAgdGhpcy50ZXN0LmFzc2VydFZpc2libGUoIG5hbWVTZWxlY3RvciwgJ0hpc3RvcnkgbmFt ZSBpcyB2aXNpYmxlJyApOworICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0U2VsZWN0b3JIYXNUZXh0 KCBuYW1lU2VsZWN0b3IsIG5ld0hpc3RvcnlOYW1lLCAnSGk9CnN0b3J5IG5hbWUgaXMgJyArIG5l d0hpc3RvcnlOYW1lICk7CisKKyAgICAgICAgdmFyIG9uZXR4dEZpbGVzaXplID0zRCByZXF1aXJl KCAnZnMnICkuc2l6ZSggZmlsZXBhdGhUb1VwbG9hZCApLAorICAgICAgICAgICAgZXhwZWN0ZWRT aXplID0zRCBvbmV0eHRGaWxlc2l6ZSArICcgYnl0ZXMnOworICAgICAgICB0aGlzLnRlc3QuY29t bWVudCggImhpc3Rvcnkgc2hvdWxkIGRpc3BsYXkgc2l6ZSBhbmQgc2l6ZSBzaG91bGQgYmU9CiAi ICsgb25ldHh0RmlsZXNpemUgKyAiIGJ5dGVzIiApOworICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0 RXhpc3RzKCBzaXplU2VsZWN0b3IsICdGb3VuZCAnICsgc2l6ZVNlbGVjdG9yICk7CisgICAgICAg IHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCBzaXplU2VsZWN0b3IsICdIaXN0b3J5IHNpemUgaXMg dmlzaWJsZScgKTsKKyAgICAgICAgdGhpcy50ZXN0LmFzc2VydFNlbGVjdG9ySGFzVGV4dCggc2l6 ZVNlbGVjdG9yLCBleHBlY3RlZFNpemUsCisgICAgICAgICAgICAnSGlzdG9yeSBzaXplIGhhcyAi JyArIGV4cGVjdGVkU2l6ZSArICciOiAnICsgdGhpcy5mZXRjaFRleHQoID0Kc2l6ZVNlbGVjdG9y ICkudHJpbSgpICk7CisKKyAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICJ0YWdzIGFuZCBhbm5v dGF0aW9uIGljb25zIHNob3VsZCBiZSBhdmFpbGFibGUiPQogKTsKKyAgICAgICAgdGhpcy50ZXN0 LmFzc2VydEV4aXN0cyggdGFnSWNvblNlbGVjdG9yLCAgJ1RhZyBpY29uIGJ1dHRvbiBmb3VuZCcg PQopOworICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0RXhpc3RzKCBhbm5vSWNvblNlbGVjdG9yLCAn QW5ub3RhdGlvbiBpY29uIGJ1dHRvbiA9CmZvdW5kJyApOworCisgICAgICAgIHRoaXMudGVzdC5j b21tZW50KCAiQSBtZXNzYWdlIGFib3V0IHRoZSBjdXJyZW50IGhpc3RvcnkgYmVpbmcgZW1wdD0K eSBzaG91bGQgTk9UIGJlIGRpc3BsYXllZCIgKTsKKyAgICAgICAgdGhpcy50ZXN0LmFzc2VydEV4 aXN0cyggZW1wdHlNc2dTZWxlY3RvciwgZW1wdHlNc2dTZWxlY3RvciArICcgZXhpPQpzdHMnICk7 CisgICAgICAgIHRoaXMudGVzdC5hc3NlcnROb3RWaXNpYmxlKCBlbXB0eU1zZ1NlbGVjdG9yLCAn RW1wdHkgaGlzdG9yeSBtZXNzYT0KZ2UgaXMgTk9UIHZpc2libGUnICk7CisgICAgfSk7CisKKyAg ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPQogdGFncworICAgIC8vIGtlZXBpbmcgdGhpcyBsaWdodCBoZXJlIC0g YmV0dGVyIGZvciBpdHMgb3duIHRlc3QgZmlsZQorICAgIC8vVE9ETzogY2hlY2sgdG9vbHRpcHMK KyAgICBzcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uIG9wZW5UYWdzKCl7CisgICAgICAgIHRoaXMu dGVzdC5jb21tZW50KCAndGFnIGFyZWEgc2hvdWxkIG9wZW4gd2hlbiB0aGUgaGlzdG9yeSBwYW5l bCB0YT0KZyBpY29uIGlzIGNsaWNrZWQnICk7CisKKyAgICAgICAgdGhpcy5jbGljayggdGFnSWNv blNlbGVjdG9yICk7CisgICAgICAgIHRoaXMud2FpdCggMTAwMCwgZnVuY3Rpb24oKXsKKyAgICAg ICAgICAgIHRoaXMudGVzdC5hc3NlcnRWaXNpYmxlKCB0YWdBcmVhU2VsZWN0b3IsICdUYWcgYXJl YSBpcyBub3cgZGlzPQpwbGF5ZWQnICk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIHNwYWNl Z2hvc3QudGhlbiggZnVuY3Rpb24gY2xvc2VBbm5vdGF0aW9uKCl7CisgICAgICAgIHRoaXMudGVz dC5jb21tZW50KCAnYW5ub3RhdGlvbiBhcmVhIHNob3VsZCBjbG9zZSB3aGVuIHRoZSBoaXN0b3J5 ID0KcGFuZWwgdGFnIGljb24gaXMgY2xpY2tlZCBhZ2FpbicgKTsKKworICAgICAgICB0aGlzLmNs aWNrKCB0YWdJY29uU2VsZWN0b3IgKTsKKyAgICAgICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlv bigpeworICAgICAgICAgICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUoIHRhZ0FyZWFTZWxl Y3RvciwgJ1RhZyBhcmVhIGlzIG5vdyA9CmhpZGRlbicgKTsKKyAgICAgICAgfSk7CisgICAgfSk7 CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPQogYW5ub3RhdGlvbgorICAgIC8vIGtlZXBpbmcgdGhpcyBs aWdodCBoZXJlIC0gYmV0dGVyIGZvciBpdHMgb3duIHRlc3QgZmlsZQorICAgIC8vVE9ETzogY2hl Y2sgdG9vbHRpcHMKKyAgICBzcGFjZWdob3N0LnRoZW4oIGZ1bmN0aW9uIG9wZW5Bbm5vdGF0aW9u KCl7CisgICAgICAgIHRoaXMudGVzdC5jb21tZW50KCAnYW5ub3RhdGlvbiBhcmVhIHNob3VsZCBv cGVuIHdoZW4gdGhlIGhpc3RvcnkgcD0KYW5lbCBhbm5vdGF0aW9uIGljb24gaXMgY2xpY2tlZCcg KTsKKworICAgICAgICB0aGlzLmNsaWNrKCBhbm5vSWNvblNlbGVjdG9yICk7CisgICAgICAgIHRo aXMud2FpdCggMTAwMCwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIHRoaXMudGVzdC5hc3NlcnRW aXNpYmxlKCBhbm5vQXJlYVNlbGVjdG9yLCAnQW5ub3RhdGlvbiBhcmVhIGlzPQogbm93IGRpc3Bs YXllZCcgKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgc3BhY2VnaG9zdC50aGVuKCBmdW5j dGlvbiBjbG9zZUFubm90YXRpb24oKXsKKyAgICAgICAgdGhpcy50ZXN0LmNvbW1lbnQoICdhbm5v dGF0aW9uIGFyZWEgc2hvdWxkIGNsb3NlIHdoZW4gdGhlIGhpc3RvcnkgPQpwYW5lbCB0YWcgaWNv biBpcyBjbGlja2VkIGFnYWluJyApOworCisgICAgICAgIHRoaXMuY2xpY2soIGFubm9JY29uU2Vs ZWN0b3IgKTsKKyAgICAgICAgdGhpcy53YWl0KCAxMDAwLCBmdW5jdGlvbigpeworICAgICAgICAg ICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUoIGFubm9BcmVhU2VsZWN0b3IsICdBbm5vdGF0 aW9uIGFyZWE9CiBpcyBub3cgaGlkZGVuJyApOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAg IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS09CiByZWZyZXNoIGJ1dHRvbgorICAgIHNwYWNlZ2hvc3QudGhlbiggZnVu Y3Rpb24gcmVmcmVzaEJ1dHRvbigpeworICAgICAgICB0aGlzLnRlc3QuY29tbWVudCggJ0hpc3Rv cnkgcGFuZWwgc2hvdWxkIHJlZnJlc2ggd2hlbiB0aGUgaGlzdG9yeSA9CnJlZnJlc2ggaWNvbiBp cyBjbGlja2VkJyApOworCisgICAgICAgIHRoaXMudGVzdC5hc3NlcnRFeGlzdHMoICByZWZyZXNo QnV0dG9uU2VsZWN0b3IsICJGb3VuZCByZWZyZXNoIGJ1dD0KdG9uIiApOworICAgICAgICB0aGlz LnRlc3QuYXNzZXJ0VmlzaWJsZSggcmVmcmVzaEJ1dHRvblNlbGVjdG9yLCAiUmVmcmVzaCBidXR0 b24gaXM9CiB2aXNpYmxlIiApOworICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggcmVm cmVzaEJ1dHRvblNlbGVjdG9yICsgJyAnICsgcmVmcmVzaEJ1dHQ9Cm9uSWNvblNlbGVjdG9yLCAi UmVmcmVzaCBpY29uIGlzIHZpc2libGUiICk7CisKKyAgICAgICAgLy90aGlzLmFzc2VydE5hdmln YXRpb25SZXF1ZXN0ZWQoIHJlZnJlc2hCdXR0b25IcmVmLCAiSGlzdG9yeSByZWZyPQplc2hlZCB3 aGVuIGNsaWNraW5nIHJlZnJlc2ggaWNvbiIsIGZ1bmN0aW9uKCl7CisgICAgICAgIC8vICAgIHRo aXMuY2xpY2soIHJlZnJlc2hCdXR0b25TZWxlY3RvciApOworICAgICAgICAvL30pOworICAgIH0p OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KIGhkYXMgY2FuIGJlIGV4cGFuZGVkIGJ5IGNsaWNraW5n IG9uIHRoZSBoZGEKKyAgICAvLyBicm9rZW4gaW4gd2Via2l0IHcvIGpxIDEuNworICAgIHNwYWNl Z2hvc3QuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBmdW5jdGlvbigpeworICAgICAgICB0aGlz LnRlc3QuY29tbWVudCggJ0hEQXMgY2FuIGJlIGV4cGFuZGVkIGJ5IGNsaWNraW5nIG9uIHRoZSBu YW1lJyA9Cik7CisgICAgICAgIHZhciB1cGxvYWRlZFNlbGVjdG9yID0zRCAnI2RhdGFzZXQtJyAr IHVwbG9hZElkOworCisgICAgICAgIHRoaXMuY2xpY2soIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcg KyB0aGlzLmhpc3RvcnlwYW5lbC5kYXRhLnNlbGVjdD0Kb3JzLmhkYS50aXRsZSApOworICAgICAg ICB0aGlzLndhaXQoIDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLnRlc3QuYXNz ZXJ0VmlzaWJsZSggdXBsb2FkZWRTZWxlY3RvciArICcgJyArIHRoaXMuaGlzdG9yeT0KcGFuZWwu ZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHksCisgICAgICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9h ZGVkIGZpbGUgaXMgdmlzaWJsZSIgKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPQogZXhwYW5kZWQgaGRhcyBzdGlsbCBleHBhbmRlZCBhZnRlciByZWZyZXNoCisg ICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpeworICAgICAgICB0aGlzLnRlc3QuY29tbWVu dCggJ0V4cGFuZGVkIGhkYXMgYXJlIHN0aWxsIGV4cGFuZGVkIGFmdGVyIGEgcmVmcmU9CnNoJyAp OworICAgICAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0LScgKyB1cGxvYWRJ ZDsKKworICAgICAgICB0aGlzLmNsaWNrKCByZWZyZXNoQnV0dG9uU2VsZWN0b3IgKTsKKyAgICAg ICAgdGhpcy5oaXN0b3J5cGFuZWwud2FpdEZvckhkYXMoIGZ1bmN0aW9uKCl7CisgICAgICAgICAg ICB0aGlzLnRlc3QuYXNzZXJ0VmlzaWJsZSggdXBsb2FkZWRTZWxlY3RvciArICcgJyArIHRoaXMu aGlzdG9yeT0KcGFuZWwuZGF0YS5zZWxlY3RvcnMuaGRhLmJvZHksCisgICAgICAgICAgICAgICAg IkJvZHkgZm9yIHVwbG9hZGVkIGZpbGUgaXMgdmlzaWJsZSIgKTsKKyAgICAgICAgfSk7CisgICAg ICAgIC8vIHRoaXMgd2lsbCBicmVhazogd2Via2l0ICsganEgMS43CisgICAgfSk7CisKKyAgICAv LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPQogZXhwYW5kZWQgaGRhcyBjb2xsYXBzZSBieSBjbGlja2luZyBuYW1lIGFn YWluCisgICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpeworICAgICAgICB0aGlzLnRlc3Qu Y29tbWVudCggJ0V4cGFuZGVkIGhkYXMgY29sbGFwc2UgYnkgY2xpY2tpbmcgbmFtZSBhZ2Fpbic9 CiApOworICAgICAgICB2YXIgdXBsb2FkZWRTZWxlY3RvciA9M0QgJyNkYXRhc2V0LScgKyB1cGxv YWRJZDsKKworICAgICAgICB0aGlzLmNsaWNrKCB1cGxvYWRlZFNlbGVjdG9yICsgJyAnICsgdGhp cy5oaXN0b3J5cGFuZWwuZGF0YS5zZWxlY3Q9Cm9ycy5oZGEudGl0bGUgKTsKKyAgICAgICAgdGhp cy53YWl0KCA1MDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aGlzLnRlc3QuYXNzZXJ0Tm90 VmlzaWJsZSggdXBsb2FkZWRTZWxlY3RvciArICcgJyArIHRoaXMuaGlzdD0Kb3J5cGFuZWwuZGF0 YS5zZWxlY3RvcnMuaGRhLmJvZHksCisgICAgICAgICAgICAgICAgIkJvZHkgZm9yIHVwbG9hZGVk IGZpbGUgaXMgbm90IHZpc2libGUiICk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT0KIGNvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxhcHNlZCBhZnRlciByZWZyZXNo CisgICAgc3BhY2VnaG9zdC50aGVuKCBmdW5jdGlvbigpeworICAgICAgICB0aGlzLnRlc3QuY29t bWVudCggJ2NvbGxhcHNlZCBoZGFzIHN0aWxsIGNvbGxhcHNlZCBhZnRlciBhIHJlZnJlc2g9Cicg KTsKKyAgICAgICAgdmFyIHVwbG9hZGVkU2VsZWN0b3IgPTNEICcjZGF0YXNldC0nICsgdXBsb2Fk SWQ7CisKKyAgICAgICAgdGhpcy5jbGljayggcmVmcmVzaEJ1dHRvblNlbGVjdG9yICk7CisgICAg ICAgIHRoaXMuaGlzdG9yeXBhbmVsLndhaXRGb3JIZGFzKCBmdW5jdGlvbigpeworICAgICAgICAg ICAgdGhpcy50ZXN0LmFzc2VydE5vdFZpc2libGUoIHVwbG9hZGVkU2VsZWN0b3IgKyAnICcgKyB0 aGlzLmhpc3Q9Cm9yeXBhbmVsLmRhdGEuc2VsZWN0b3JzLmhkYS5ib2R5LAorICAgICAgICAgICAg ICAgICJCb2R5IGZvciB1cGxvYWRlZCBmaWxlIGlzIG5vdCB2aXNpYmxlIiApOworICAgICAgICB9 KTsKKyAgICB9KTsKICAgICAvKgogICAgICovCiAgICAgLy8gPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy YWwvY29tbWl0cy9kODM2ODcxOTRjY2YvCkNoYW5nZXNldDogICBkODM2ODcxOTRjY2YKVXNlcjog ICAgICAgIGNhcmxmZWJlcmhhcmQKRGF0ZTogICAgICAgIDIwMTUtMDEtMTUgMTU6MTY6MzMrMDA6 MDAKU3VtbWFyeTogICAgIChNYW51YWxseSkgbWVyZ2UgY2VudHJhbApBZmZlY3RlZCAjOiAgNTYg ZmlsZXMKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAt ciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgLmhndGFncwotLS0g YS8uaGd0YWdzCisrKyBiLy5oZ3RhZ3MKQEAgLTgsNyArOCw3IEBACiA1ZTYwNWVkNjA2OWZlNGM1 Y2E5ODc1ZTk1ZTkxYjI3MTM0OTllOGNhIHJlbGVhc2VfMjAxNC4wMi4xMAogOWU1MzI1MWIwYjdl OTNiOTU2MzAwOGEyYjExMmYyZTgxNWEwNGJiYyByZWxlYXNlXzIwMTQuMDQuMTQKIDdlMjU3Yzdi MTBiYWRiNjU3NzJiMTUyOGNiNjFkNTgxNzVhNDJlNDcgcmVsZWFzZV8yMDE0LjA2LjAyCi00MTQ1 NDE3YTZlMWMxM2Y4MmEzZGUzNjVhYWRlZjBmYjNlZDdhYjE0IGxhdGVzdF8yMDE0LjA2LjAyCis5 YmNlM2Y0MjY4NjNmOGJhODgwNjJmNjdjN2VmYzE4MzZlODJlZTdjIGxhdGVzdF8yMDE0LjA2LjAy CiA4ZjlkY2FjMDMzNjk0ZTRjYWJjZjVkYWFlNWNjYTFjZmVmYmU5NjdmIGxhdGVzdF8yMDE0LjA0 LjE0CiA5YzMyM2FhZDRmZmRkNjVhM2RlYjA2YTRhMzZmNmIyYzUxMTVhNjBmIGxhdGVzdF8yMDEz LjAxLjEzCiBiOTg2YzE4NGJlODg5NDdiNWQxZDkwYmU3ZjM2Y2ZkMjYyN2RkOTM4IGxhdGVzdF8y MDEzLjAyLjA4CkBAIC0xOCw4ICsxOCw4IEBACiA3ZDVhYTE5YTE2NmNiYTkwMzllMTVmMzM4YTFl M2ZjOTI0YzQzZDNhIGxhdGVzdF8yMDEzLjExLjA0CiAwYzAwMGNjMmY5YzA1YmY0YzFjMmJjM2Ex MDIxNTAxNGZkNjRlNjk2IGxhdGVzdF8yMDE0LjAyLjEwCiBjYTQ1Yjc4YWRiNDE1MmZjNmU3Mzk1 NTE0ZDQ2ZWJhNmI3ZDBiODM4IHJlbGVhc2VfMjAxNC4wOC4xMQotODE1MDAyNGMwZTZmYzVhZWYz MDMzY2Y4YWFhNTc0ODk2ZjZiNWQwZCBsYXRlc3RfMjAxNC4wOC4xMQorZjNmYzQ2MDJlMjJiMzk0 NjhkNzgwYjk1NWExYTA1Y2FmODY3YTdlOSBsYXRlc3RfMjAxNC4wOC4xMQogMjA5Mjk0ODkzN2Fj MzBlZjgyZjcxNDYzYTIzNWM2NmQzNDk4NzA4OCByZWxlYXNlXzIwMTQuMTAuMDYKLWM0MzdiMjgz NDhhOTM0NWRiODQzM2U1YjRmMGUwNWVjOGZiNmMzOGEgbGF0ZXN0XzIwMTQuMTAuMDYKKzliZDZm OGI1YjgxNTNkYjc1MmY0ZTYxZWQ2MmYyYjZjMDFhZTRhMTEgbGF0ZXN0XzIwMTQuMTAuMDYKIDJl OGRkMjk0OWRkM2VlZTBmNTZmOWEzYTVlYmYxYjJiYWNhMjRhZWUgcmVsZWFzZV8yMDE1LjAxLjEz CiAyZThkZDI5NDlkZDNlZWUwZjU2ZjlhM2E1ZWJmMWIyYmFjYTI0YWVlIGxhdGVzdF8yMDE1LjAx LjEzCgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIg ZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5MDcxYmQzM2ExYjQ0N2Y0IGNsaWVudC9nYWxheHkv c2NyaXB0cy9tdmMvdWkvdWktcG9ydGxldC5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMv bXZjL3VpL3VpLXBvcnRsZXQuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy91aS91 aS1wb3J0bGV0LmpzCkBAIC00NCwxNyArNDQsOCBAQAogICAgICAgICAvLyBsaW5rIGhlYWRlcgog ICAgICAgICB0aGlzLiRoZWFkZXIgPTNEIHRoaXMuJGVsLmZpbmQoJy5wb3J0bGV0LWhlYWRlcicp OwogICAgICAgID0yMAotICAgICAgICAvLyBzZXQgY29udGVudCBmb3JtYXQKKyAgICAgICAgLy8g bGluayBwb3J0bGV0IGNvbnRlbnQgKHdyYXBzICdjb250ZW50JykKICAgICAgICAgdmFyICRwb3J0 bGV0X2NvbnRlbnQgPTNEIHRoaXMuJGVsLmZpbmQoJy5wb3J0bGV0LWNvbnRlbnQnKTsKLSAgICAg ICAgaWYgKCF0aGlzLm9wdGlvbnMuc2Nyb2xsYWJsZSkgewotICAgICAgICAgICAgaWYgKHRoaXMu b3B0aW9ucy50aXRsZSkgewotICAgICAgICAgICAgICAgICRwb3J0bGV0X2NvbnRlbnQuYWRkQ2xh c3MoJ25vLXNjcm9sbCcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAk cG9ydGxldF9jb250ZW50LmFkZENsYXNzKCduby1zY3JvbGwtbm8tdGl0bGUnKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRwb3J0bGV0X2NvbnRlbnQuYWRk Q2xhc3MoJ3Njcm9sbCcpOwotICAgICAgICB9CiAgICAgICAgPTIwCiAgICAgICAgIC8vIHNldCBj b250ZW50IHBhZGRpbmcKICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub3BhZGRpbmcpIHsKCmRp ZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcx OTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgY29uZmlnL3BsdWdpbnMvdmlzdWFs aXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMv dmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKKysrIGIvY29uZmlnL3Bs dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9idWlsZC1hcHAuanMKQEAgLTMsNCAr Myw0IEBACiAvLyAgICAgKGMpIDIwMDktMjAxNCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xv dWQgYW5kIEludmVzdGlnYXRpdmUgUmVwbz0KcnRlcnMgJiBFZGl0b3JzCiAvLyAgICAgVW5kZXJz Y29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KPTIw Ci1kZWZpbmUoIm12Yy91aS91aS1tb2RhbCIsW10sZnVuY3Rpb24oKXt2YXIgZT0zREJhY2tib25l LlZpZXcuZXh0ZW5kKHtlbE1haT0KbjoiYm9keSIsb3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiJ1aS1t b2RhbCIsYm9keToiIixiYWNrZHJvcDohMCxoZWlnaHQ6bnVsbCx3PQppZHRoOm51bGwsY2xvc2lu Z19ldmVudHM6ITEsY2xvc2luZ19jYWxsYmFjazpudWxsfSxidXR0b25MaXN0Ont9LGluaXRpYWxp emU9CjpmdW5jdGlvbihlKXtlJiZ0aGlzLl9jcmVhdGUoZSl9LHNob3c6ZnVuY3Rpb24oZSl7dGhp cy5pbml0aWFsaXplKGUpLHRoaXMubz0KcHRpb25zLmhlaWdodD8odGhpcy4kYm9keS5jc3MoImhl aWdodCIsdGhpcy5vcHRpb25zLmhlaWdodCksdGhpcy4kYm9keS5jc3MoPQoib3ZlcmZsb3ciLCJo aWRkZW4iKSk6dGhpcy4kYm9keS5jc3MoIm1heC1oZWlnaHQiLCQod2luZG93KS5oZWlnaHQoKS8y KSx0aGk9CnMub3B0aW9ucy53aWR0aCYmdGhpcy4kZGlhbG9nLmNzcygid2lkdGgiLHRoaXMub3B0 aW9ucy53aWR0aCksdGhpcy52aXNpYmxlPz0KdGhpcy4kZWwuc2hvdygpOnRoaXMuJGVsLmZhZGVJ bigiZmFzdCIpLHRoaXMudmlzaWJsZT0zRCEwfSxoaWRlOmZ1bmN0aW9uKCl7PQp0aGlzLnZpc2li bGU9M0QhMSx0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy5vcHRpb25zLmNsb3NpbmdfY2Fs bGJhY2smJnQ9Cmhpcy5vcHRpb25zLmNsb3NpbmdfY2FsbGJhY2soKX0sZW5hYmxlQnV0dG9uOmZ1 bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0bz0Kbkxpc3RbZV07dGhpcy4kYnV0dG9ucy5maW5k KCIjIit0KS5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOmZ1bmN0PQppb24oZSl7 dmFyIHQ9M0R0aGlzLmJ1dHRvbkxpc3RbZV07dGhpcy4kYnV0dG9ucy5maW5kKCIjIit0KS5wcm9w KCJkaXNhYmxlZCI9CiwhMCl9LHNob3dCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLmJ1 dHRvbkxpc3RbZV07dGhpcy4kYnV0dG9ucy5maW5kKD0KIiMiK3QpLnNob3coKX0saGlkZUJ1dHRv bjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRidXR0PQpvbnMu ZmluZCgiIyIrdCkuaGlkZSgpfSxnZXRCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLmJ1 dHRvbkxpc3RbZV07cmU9CnR1cm4gdGhpcy4kYnV0dG9ucy5maW5kKCIjIit0KX0sc2Nyb2xsVG9w OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGJvZHkuc2Nybz0KbGxUb3AoKX0sX2NyZWF0ZTpmdW5j dGlvbihlKXt2YXIgdD0zRHRoaXM7dGhpcy5vcHRpb25zPTNEXy5kZWZhdWx0cyhlLHRoaXMuPQpv cHRpb25zRGVmYXVsdCksdGhpcy5vcHRpb25zLmJvZHk9M0Q9M0QicHJvZ3Jlc3MiJiYodGhpcy5v cHRpb25zLmJvZHk9M0QkKCc9CjxkaXYgY2xhc3M9M0QicHJvZ3Jlc3MgcHJvZ3Jlc3Mtc3RyaXBl ZCBhY3RpdmUiPjxkaXYgY2xhc3M9M0QicHJvZ3Jlc3MtYmFyID0KcHJvZ3Jlc3MtYmFyLWluZm8i IHN0eWxlPTNEIndpZHRoOjEwMCUiPjwvZGl2PjwvZGl2PicpKSx0aGlzLiRlbCYmKHRoaXMuJGVs PQoucmVtb3ZlKCksJChkb2N1bWVudCkub2ZmKCJrZXl1cC51aS1tb2RhbCIpKSx0aGlzLnNldEVs ZW1lbnQodGhpcy5fdGVtcGxhdGU9Cih0aGlzLm9wdGlvbnMudGl0bGUpKSx0aGlzLiRkaWFsb2c9 M0R0aGlzLiRlbC5maW5kKCIubW9kYWwtZGlhbG9nIiksdGhpcy4kYj0Kb2R5PTNEdGhpcy4kZWwu ZmluZCgiLm1vZGFsLWJvZHkiKSx0aGlzLiRmb290ZXI9M0R0aGlzLiRlbC5maW5kKCIubW9kYWwt Zm9vPQp0ZXIiKSx0aGlzLiRidXR0b25zPTNEdGhpcy4kZWwuZmluZCgiLmJ1dHRvbnMiKSx0aGlz LiRiYWNrZHJvcD0zRHRoaXMuJGVsLmY9CmluZCgiLm1vZGFsLWJhY2tkcm9wIiksdGhpcy4kYm9k eS5odG1sKHRoaXMub3B0aW9ucy5ib2R5KSx0aGlzLm9wdGlvbnMuYmFjaz0KZHJvcHx8dGhpcy4k YmFja2Ryb3AucmVtb3ZlQ2xhc3MoImluIik7aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe3RoaXMu YnV0dG9uPQpMaXN0PTNEe307dmFyIG49M0QwOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0dG9ucyxm dW5jdGlvbihlLHIpe3ZhciBpPTNEImJ1dHQ9Cm9uLSIrbisrO3QuJGJ1dHRvbnMuYXBwZW5kKCQo JzxidXR0b24gaWQ9M0QiJytpKyciPjwvYnV0dG9uPicpLnRleHQoZSkuY2xpYz0KayhyKSkuYXBw ZW5kKCIgIiksdC5idXR0b25MaXN0W2VdPTNEaX0pfWVsc2UgdGhpcy4kZm9vdGVyLmhpZGUoKTsk KHRoaXMuZWxNPQphaW4pLmFwcGVuZCgkKHRoaXMuZWwpKSx0aGlzLm9wdGlvbnMuY2xvc2luZ19l dmVudHMmJigkKGRvY3VtZW50KS5vbigia2V5dXA9Ci51aS1tb2RhbCIsZnVuY3Rpb24oZSl7ZS5r ZXlDb2RlPTNEPTNEMjcmJnQuaGlkZSgpfSksdGhpcy4kZWwuZmluZCgiLm1vZGFsLT0KYmFja2Ry b3AiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5oaWRlKCl9KSl9LF90ZW1wbGF0ZTpmdW5jdGlv bihlKXtyZXR1cm4nPQo8ZGl2IGNsYXNzPTNEInVpLW1vZGFsIG1vZGFsIj48ZGl2IGNsYXNzPTNE Im1vZGFsLWJhY2tkcm9wIGZhZGUgaW4iIHN0eWxlPQo9M0Qiei1pbmRleDogLTE7Ij48L2Rpdj48 ZGl2IGNsYXNzPTNEIm1vZGFsLWRpYWxvZyI+PGRpdiBjbGFzcz0zRCJtb2RhbC1jb249CnRlbnQi PjxkaXYgY2xhc3M9M0QibW9kYWwtaGVhZGVyIj48YnV0dG9uIHR5cGU9M0QiYnV0dG9uIiBjbGFz cz0zRCJjbG9zZSIgcz0KdHlsZT0zRCJkaXNwbGF5OiBub25lOyI+JnRpbWVzOzwvYnV0dG9uPjxo NCBjbGFzcz0zRCJ0aXRsZSI+JytlKyI8L2g0PiIrIjwvPQpkaXY+IisnPGRpdiBjbGFzcz0zRCJt b2RhbC1ib2R5IiBzdHlsZT0zRCJwb3NpdGlvbjogc3RhdGljOyI+PC9kaXY+JysnPGRpdiA9CmNs YXNzPTNEIm1vZGFsLWZvb3RlciI+JysnPGRpdiBjbGFzcz0zRCJidXR0b25zIiBzdHlsZT0zRCJm bG9hdDogcmlnaHQ7Ij48Lz0KZGl2PicrIjwvZGl2PiIrIjwvZGl2IisiPC9kaXY+IisiPC9kaXY+ In19KTtyZXR1cm57VmlldzplfX0pLGZ1bmN0aW9uKCl7dmFyPQogZT0zRHRoaXMsdD0zRGUuXyxu PTNEQXJyYXkucHJvdG90eXBlLHI9M0RPYmplY3QucHJvdG90eXBlLGk9M0RGdW5jdGlvbi5wcm89 CnRvdHlwZSxzPTNEbi5wdXNoLG89M0RuLnNsaWNlLHU9M0RuLmNvbmNhdCxhPTNEci50b1N0cmlu ZyxmPTNEci5oYXNPd25Qcm9wZT0KcnR5LGw9M0RBcnJheS5pc0FycmF5LGM9M0RPYmplY3Qua2V5 cyxoPTNEaS5iaW5kLHA9M0RmdW5jdGlvbihlKXtpZihlIGluc3RhPQpuY2VvZiBwKXJldHVybiBl O2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcChlKTt0aGlzLl93cmFwcGVkPTNE ZX09Cjt0eXBlb2YgZXhwb3J0cyE9M0QidW5kZWZpbmVkIj8odHlwZW9mIG1vZHVsZSE9M0QidW5k ZWZpbmVkIiYmbW9kdWxlLmV4cG9ydD0KcyYmKGV4cG9ydHM9M0Rtb2R1bGUuZXhwb3J0cz0zRHAp LGV4cG9ydHMuXz0zRHApOmUuXz0zRHAscC5WRVJTSU9OPTNEIjEuNy4wPQoiO3ZhciBkPTNEZnVu Y3Rpb24oZSx0LG4pe2lmKHQ9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuIGU7c3dpdGNoKG49M0Q9M0Ru dWxsPzM9CjpuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmNhbGwodCxuKX07 Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLD0Kcil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2Ug MzpyZXR1cm4gZnVuY3Rpb24obixyLGkpe3JldHVybiBlLmNhbGwodCxuLHIsPQppKX07Y2FzZSA0 OnJldHVybiBmdW5jdGlvbihuLHIsaSxzKXtyZXR1cm4gZS5jYWxsKHQsbixyLGkscyl9fXJldHVy biBmdW5jdGk9Cm9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX07cC5pdGVyYXRlZT0z RGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0zRD0KPTNEbnVsbD9wLmlkZW50aXR5OnAuaXNGdW5j dGlvbihlKT9kKGUsdCxuKTpwLmlzT2JqZWN0KGUpP3AubWF0Y2hlcyhlKTpwLnByPQpvcGVydHko ZSl9LHAuZWFjaD0zRHAuZm9yRWFjaD0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbCly ZXR1cm4gZTt0PQo9M0RkKHQsbik7dmFyIHIsaT0zRGUubGVuZ3RoO2lmKGk9M0Q9M0Q9M0QraSlm b3Iocj0zRDA7cjxpO3IrKyl0KGVbcl0scixlKTs9CmVsc2V7dmFyIHM9M0RwLmtleXMoZSk7Zm9y KHI9M0QwLGk9M0RzLmxlbmd0aDtyPGk7cisrKXQoZVtzW3JdXSxzW3JdLGUpfXJldD0KdXJuIGV9 LHAubWFwPTNEcC5jb2xsZWN0PTNEZnVuY3Rpb24oZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVy bltdO3Q9M0RwLml0PQplcmF0ZWUodCxuKTt2YXIgcj0zRGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0 aCYmcC5rZXlzKGUpLGk9M0Qocnx8ZSkubGVuZ3RoLHM9Cj0zREFycmF5KGkpLG87Zm9yKHZhciB1 PTNEMDt1PGk7dSsrKW89M0RyP3JbdV06dSxzW3VdPTNEdChlW29dLG8sZSk7cmV0dXJuID0Kc307 dmFyIHY9M0QiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSI7cC5y ZWR1Y2U9M0RwLmZvbGRsPQo9M0RwLmluamVjdD0zRGZ1bmN0aW9uKGUsdCxuLHIpe2U9M0Q9M0Ru dWxsJiYoZT0zRFtdKSx0PTNEZCh0LHIsNCk7dmFyIGk9M0Q9CmUubGVuZ3RoIT0zRD0zRCtlLmxl bmd0aCYmcC5rZXlzKGUpLHM9M0QoaXx8ZSkubGVuZ3RoLG89M0QwLHU7aWYoYXJndW1lbnRzLj0K bGVuZ3RoPDMpe2lmKCFzKXRocm93IG5ldyBUeXBlRXJyb3Iodik7bj0zRGVbaT9pW28rK106bysr XX1mb3IoO288cztvKyspdT0KPTNEaT9pW29dOm8sbj0zRHQobixlW3VdLHUsZSk7cmV0dXJuIG59 LHAucmVkdWNlUmlnaHQ9M0RwLmZvbGRyPTNEZnVuY3Rpb24oPQplLHQsbixyKXtlPTNEPTNEbnVs bCYmKGU9M0RbXSksdD0zRGQodCxyLDQpO3ZhciBpPTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3Q9 CmgmJnAua2V5cyhlKSxzPTNEKGl8fGUpLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Myl7 aWYoIXMpdGhyb3cgbmV3IFR5cD0KZUVycm9yKHYpO249M0RlW2k/aVstLXNdOi0tc119d2hpbGUo cy0tKW89M0RpP2lbc106cyxuPTNEdChuLGVbb10sbyxlKTtyZXR1PQpybiBufSxwLmZpbmQ9M0Rw LmRldGVjdD0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gdD0zRHAuaXRlcmF0ZWUodCxu KSw9CnAuc29tZShlLGZ1bmN0aW9uKGUsbixpKXtpZih0KGUsbixpKSlyZXR1cm4gcj0zRGUsITB9 KSxyfSxwLmZpbHRlcj0zRHAuc2VsZT0KY3Q9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0RbXTty ZXR1cm4gZT0zRD0zRG51bGw/cjoodD0zRHAuaXRlcmF0ZWUodCxuKSxwPQouZWFjaChlLGZ1bmN0 aW9uKGUsbixpKXt0KGUsbixpKSYmci5wdXNoKGUpfSkscil9LHAucmVqZWN0PTNEZnVuY3Rpb24o ZSx0LG49Cil7cmV0dXJuIHAuZmlsdGVyKGUscC5uZWdhdGUocC5pdGVyYXRlZSh0KSksbil9LHAu ZXZlcnk9M0RwLmFsbD0zRGZ1bmN0aW9uKD0KZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVybiEw O3Q9M0RwLml0ZXJhdGVlKHQsbik7dmFyIHI9M0RlLmxlbmd0aCE9M0Q9M0QrPQplLmxlbmd0aCYm cC5rZXlzKGUpLGk9M0Qocnx8ZSkubGVuZ3RoLHMsbztmb3Iocz0zRDA7czxpO3MrKyl7bz0zRHI/ cltzXTpzO2k9CmYoIXQoZVtvXSxvLGUpKXJldHVybiExfXJldHVybiEwfSxwLnNvbWU9M0RwLmFu eT0zRGZ1bmN0aW9uKGUsdCxuKXtpZihlPTNEPQo9M0RudWxsKXJldHVybiExO3Q9M0RwLml0ZXJh dGVlKHQsbik7dmFyIHI9M0RlLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndGgmJnAua2U9CnlzKGUpLGk9 M0Qocnx8ZSkubGVuZ3RoLHMsbztmb3Iocz0zRDA7czxpO3MrKyl7bz0zRHI/cltzXTpzO2lmKHQo ZVtvXSxvLGUpKT0KcmV0dXJuITB9cmV0dXJuITF9LHAuY29udGFpbnM9M0RwLmluY2x1ZGU9M0Rm dW5jdGlvbihlLHQpe3JldHVybiBlPTNEPTNEbnVsPQpsPyExOihlLmxlbmd0aCE9M0Q9M0QrZS5s ZW5ndGgmJihlPTNEcC52YWx1ZXMoZSkpLHAuaW5kZXhPZihlLHQpPj0zRDApfSxwLmk9Cm52b2tl PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRG8uY2FsbChhcmd1bWVudHMsMikscj0zRHAuaXNGdW5j dGlvbih0KTtyZXR1cj0KbiBwLm1hcChlLGZ1bmN0aW9uKGUpe3JldHVybihyP3Q6ZVt0XSkuYXBw bHkoZSxuKX0pfSxwLnBsdWNrPTNEZnVuY3Rpb24oZSx0PQope3JldHVybiBwLm1hcChlLHAucHJv cGVydHkodCkpfSxwLndoZXJlPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5maWx0ZXIoZSw9CnAu bWF0Y2hlcyh0KSl9LHAuZmluZFdoZXJlPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5maW5kKGUs cC5tYXRjaGVzKHQpKX0scD0KLm1heD0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRC1JbmZpbml0 eSxpPTNELUluZmluaXR5LHMsbztpZih0PTNEPTNEbnVsbCYmPQplIT0zRG51bGwpe2U9M0RlLmxl bmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9lOnAudmFsdWVzKGUpO2Zvcih2YXIgdT0zRDAsYT0zRGU9 Ci5sZW5ndGg7dTxhO3UrKylzPTNEZVt1XSxzPnImJihyPTNEcyl9ZWxzZSB0PTNEcC5pdGVyYXRl ZSh0LG4pLHAuZWFjaChlLGZ1bj0KY3Rpb24oZSxuLHMpe289M0R0KGUsbixzKTtpZihvPml8fG89 M0Q9M0Q9M0QtSW5maW5pdHkmJnI9M0Q9M0Q9M0QtSW5maW5pdHkpPQpyPTNEZSxpPTNEb30pO3Jl dHVybiByfSxwLm1pbj0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zREluZmluaXR5LGk9M0RJbmZp bmk9CnR5LHMsbztpZih0PTNEPTNEbnVsbCYmZSE9M0RudWxsKXtlPTNEZS5sZW5ndGg9M0Q9M0Q9 M0QrZS5sZW5ndGg/ZTpwLnZhbHVlcz0KKGUpO2Zvcih2YXIgdT0zRDAsYT0zRGUubGVuZ3RoO3U8 YTt1Kyspcz0zRGVbdV0sczxyJiYocj0zRHMpfWVsc2UgdD0zRHAuaXRlPQpyYXRlZSh0LG4pLHAu ZWFjaChlLGZ1bmN0aW9uKGUsbixzKXtvPTNEdChlLG4scyk7aWYobzxpfHxvPTNEPTNEPTNESW5m aW5pdHk9CiYmcj0zRD0zRD0zREluZmluaXR5KXI9M0RlLGk9M0RvfSk7cmV0dXJuIHJ9LHAuc2h1 ZmZsZT0zRGZ1bmN0aW9uKGUpe3ZhciB0PQo9M0RlJiZlLmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0 aD9lOnAudmFsdWVzKGUpLG49M0R0Lmxlbmd0aCxyPTNEQXJyYXkobik7Zm89CnIodmFyIGk9M0Qw LHM7aTxuO2krKylzPTNEcC5yYW5kb20oMCxpKSxzIT0zRD0zRGkmJihyW2ldPTNEcltzXSkscltz XT0zRHRbaT0KXTtyZXR1cm4gcn0scC5zYW1wbGU9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9 M0Q9M0RudWxsfHxuPyhlLmxlbmd0aCE9M0Q9Cj0zRCtlLmxlbmd0aCYmKGU9M0RwLnZhbHVlcyhl KSksZVtwLnJhbmRvbShlLmxlbmd0aC0xKV0pOnAuc2h1ZmZsZShlKS5zbGljZT0KKDAsTWF0aC5t YXgoMCx0KSl9LHAuc29ydEJ5PTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PTNEcC5pdGVyYXRl ZSh0LG4pLHAuPQpwbHVjayhwLm1hcChlLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm57dmFsdWU6ZSxp bmRleDpuLGNyaXRlcmlhOnQoZSxuLHIpfX0pLnM9Cm9ydChmdW5jdGlvbihlLHQpe3ZhciBuPTNE ZS5jcml0ZXJpYSxyPTNEdC5jcml0ZXJpYTtpZihuIT0zRD0zRHIpe2lmKG4+cnx8bj0KPTNEPTNE PTNEdm9pZCAwKXJldHVybiAxO2lmKG48cnx8cj0zRD0zRD0zRHZvaWQgMClyZXR1cm4tMX1yZXR1 cm4gZS5pbmRleC10PQouaW5kZXh9KSwidmFsdWUiKX07dmFyIG09M0RmdW5jdGlvbihlKXtyZXR1 cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEe307cmU9CnR1cm4gbj0zRHAuaXRlcmF0ZWUobixy KSxwLmVhY2godCxmdW5jdGlvbihyLHMpe3ZhciBvPTNEbihyLHMsdCk7ZShpLHIsbyl9KT0KLGl9 fTtwLmdyb3VwQnk9M0RtKGZ1bmN0aW9uKGUsdCxuKXtwLmhhcyhlLG4pP2Vbbl0ucHVzaCh0KTpl W25dPTNEW3RdfSkscC5pPQpuZGV4Qnk9M0RtKGZ1bmN0aW9uKGUsdCxuKXtlW25dPTNEdH0pLHAu Y291bnRCeT0zRG0oZnVuY3Rpb24oZSx0LG4pe3AuaGFzKGU9CixuKT9lW25dKys6ZVtuXT0zRDF9 KSxwLnNvcnRlZEluZGV4PTNEZnVuY3Rpb24oZSx0LG4scil7bj0zRHAuaXRlcmF0ZWUobixyLD0K MSk7dmFyIGk9M0RuKHQpLHM9M0QwLG89M0RlLmxlbmd0aDt3aGlsZShzPG8pe3ZhciB1PTNEcytv Pj4+MTtuKGVbdV0pPGk/cz0KPTNEdSsxOm89M0R1fXJldHVybiBzfSxwLnRvQXJyYXk9M0RmdW5j dGlvbihlKXtyZXR1cm4gZT9wLmlzQXJyYXkoZSk/by5jYWxsPQooZSk6ZS5sZW5ndGg9M0Q9M0Q9 M0QrZS5sZW5ndGg/cC5tYXAoZSxwLmlkZW50aXR5KTpwLnZhbHVlcyhlKTpbXX0scC5zaXplPQo9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0zRD0zRG51bGw/MDplLmxlbmd0aD0zRD0zRD0zRCtlLmxl bmd0aD9lLmxlbmd0aDpwLms9CmV5cyhlKS5sZW5ndGh9LHAucGFydGl0aW9uPTNEZnVuY3Rpb24o ZSx0LG4pe3Q9M0RwLml0ZXJhdGVlKHQsbik7dmFyIHI9M0RbXT0KLGk9M0RbXTtyZXR1cm4gcC5l YWNoKGUsZnVuY3Rpb24oZSxuLHMpeyh0KGUsbixzKT9yOmkpLnB1c2goZSl9KSxbcixpXX0scC5m PQppcnN0PTNEcC5oZWFkPTNEcC50YWtlPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPTNEPTNE bnVsbD92b2lkIDA6dD0zRD0zRG49CnVsbHx8bj9lWzBdOnQ8MD9bXTpvLmNhbGwoZSwwLHQpfSxw LmluaXRpYWw9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIG8uY2FsbD0KKGUsMCxNYXRoLm1heCgw LGUubGVuZ3RoLSh0PTNEPTNEbnVsbHx8bj8xOnQpKSl9LHAubGFzdD0zRGZ1bmN0aW9uKGUsdCxu KXtyPQpldHVybiBlPTNEPTNEbnVsbD92b2lkIDA6dD0zRD0zRG51bGx8fG4/ZVtlLmxlbmd0aC0x XTpvLmNhbGwoZSxNYXRoLm1heChlLmw9CmVuZ3RoLXQsMCkpfSxwLnJlc3Q9M0RwLnRhaWw9M0Rw LmRyb3A9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIG8uY2FsbChlLHQ9Cj0zRD0zRG51bGx8fG4/ MTp0KX0scC5jb21wYWN0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIHAuZmlsdGVyKGUscC5pZGVudGl0 eSl9Oz0KdmFyIGc9M0RmdW5jdGlvbihlLHQsbixyKXtpZih0JiZwLmV2ZXJ5KGUscC5pc0FycmF5 KSlyZXR1cm4gdS5hcHBseShyLGUpO2ZvPQpyKHZhciBpPTNEMCxvPTNEZS5sZW5ndGg7aTxvO2kr Kyl7dmFyIGE9M0RlW2ldOyFwLmlzQXJyYXkoYSkmJiFwLmlzQXJndW1lbnQ9CnMoYSk/bnx8ci5w dXNoKGEpOnQ/cy5hcHBseShyLGEpOmcoYSx0LG4scil9cmV0dXJuIHJ9O3AuZmxhdHRlbj0zRGZ1 bmN0aW9uKD0KZSx0KXtyZXR1cm4gZyhlLHQsITEsW10pfSxwLndpdGhvdXQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gcC5kaWZmZXJlbmNlKGUsby5jPQphbGwoYXJndW1lbnRzLDEpKX0scC51bmlxPTNE cC51bmlxdWU9M0RmdW5jdGlvbihlLHQsbixyKXtpZihlPTNEPTNEbnVsbClyZXQ9CnVybltdO3Au aXNCb29sZWFuKHQpfHwocj0zRG4sbj0zRHQsdD0zRCExKSxuIT0zRG51bGwmJihuPTNEcC5pdGVy YXRlZShuLHIpKT0KO3ZhciBpPTNEW10scz0zRFtdO2Zvcih2YXIgbz0zRDAsdT0zRGUubGVuZ3Ro O288dTtvKyspe3ZhciBhPTNEZVtvXTtpZih0KSghPQpvfHxzIT0zRD0zRGEpJiZpLnB1c2goYSks cz0zRGE7ZWxzZSBpZihuKXt2YXIgZj0zRG4oYSxvLGUpO3AuaW5kZXhPZihzLGYpPDA9CiYmKHMu cHVzaChmKSxpLnB1c2goYSkpfWVsc2UgcC5pbmRleE9mKGksYSk8MCYmaS5wdXNoKGEpfXJldHVy biBpfSxwLnVuaW9uPQo9M0RmdW5jdGlvbigpe3JldHVybiBwLnVuaXEoZyhhcmd1bWVudHMsITAs ITAsW10pKX0scC5pbnRlcnNlY3Rpb249M0RmdW5jdGk9Cm9uKGUpe2lmKGU9M0Q9M0RudWxsKXJl dHVybltdO3ZhciB0PTNEW10sbj0zRGFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciByPTNEMD0KLGk9 M0RlLmxlbmd0aDtyPGk7cisrKXt2YXIgcz0zRGVbcl07aWYocC5jb250YWlucyh0LHMpKWNvbnRp bnVlO2Zvcih2YXIgbz0KPTNEMTtvPG47bysrKWlmKCFwLmNvbnRhaW5zKGFyZ3VtZW50c1tvXSxz KSlicmVhaztvPTNEPTNEPTNEbiYmdC5wdXNoKHMpfXJlPQp0dXJuIHR9LHAuZGlmZmVyZW5jZT0z RGZ1bmN0aW9uKGUpe3ZhciB0PTNEZyhvLmNhbGwoYXJndW1lbnRzLDEpLCEwLCEwLFtdKTs9CnJl dHVybiBwLmZpbHRlcihlLGZ1bmN0aW9uKGUpe3JldHVybiFwLmNvbnRhaW5zKHQsZSl9KX0scC56 aXA9M0RmdW5jdGlvbihlKT0Ke2lmKGU9M0Q9M0RudWxsKXJldHVybltdO3ZhciB0PTNEcC5tYXgo YXJndW1lbnRzLCJsZW5ndGgiKS5sZW5ndGgsbj0zREFycmF5PQoodCk7Zm9yKHZhciByPTNEMDty PHQ7cisrKW5bcl09M0RwLnBsdWNrKGFyZ3VtZW50cyxyKTtyZXR1cm4gbn0scC5vYmplY3Q9M0Q9 CmZ1bmN0aW9uKGUsdCl7aWYoZT0zRD0zRG51bGwpcmV0dXJue307dmFyIG49M0R7fTtmb3IodmFy IHI9M0QwLGk9M0RlLmxlbmd0aD0KO3I8aTtyKyspdD9uW2Vbcl1dPTNEdFtyXTpuW2Vbcl1bMF1d PTNEZVtyXVsxXTtyZXR1cm4gbn0scC5pbmRleE9mPTNEZnVuY3RpPQpvbihlLHQsbil7aWYoZT0z RD0zRG51bGwpcmV0dXJuLTE7dmFyIHI9M0QwLGk9M0RlLmxlbmd0aDtpZihuKXtpZih0eXBlb2Yg biE9Cj0zRCJudW1iZXIiKXJldHVybiByPTNEcC5zb3J0ZWRJbmRleChlLHQpLGVbcl09M0Q9M0Q9 M0R0P3I6LTE7cj0zRG48MD9NYXRoLj0KbWF4KDAsaStuKTpufWZvcig7cjxpO3IrKylpZihlW3Jd PTNEPTNEPTNEdClyZXR1cm4gcjtyZXR1cm4tMX0scC5sYXN0SW5kZXhPPQpmPTNEZnVuY3Rpb24o ZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVybi0xO3ZhciByPTNEZS5sZW5ndGg7dHlwZW9mIG49 M0Q9M0Q9CiJudW1iZXIiJiYocj0zRG48MD9yK24rMTpNYXRoLm1pbihyLG4rMSkpO3doaWxlKC0t cj49M0QwKWlmKGVbcl09M0Q9M0Q9M0R0KT0KcmV0dXJuIHI7cmV0dXJuLTF9LHAucmFuZ2U9M0Rm dW5jdGlvbihlLHQsbil7YXJndW1lbnRzLmxlbmd0aDw9M0QxJiYodD0zRGV8PQp8MCxlPTNEMCks bj0zRG58fDE7dmFyIHI9M0RNYXRoLm1heChNYXRoLmNlaWwoKHQtZSkvbiksMCksaT0zREFycmF5 KHIpO2Zvcig9CnZhciBzPTNEMDtzPHI7cysrLGUrPTNEbilpW3NdPTNEZTtyZXR1cm4gaX07dmFy IHk9M0RmdW5jdGlvbigpe307cC5iaW5kPTNEZj0KdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoaCYm ZS5iaW5kPTNEPTNEPTNEaClyZXR1cm4gaC5hcHBseShlLG8uY2FsbChhcmd1bWVuPQp0cywxKSk7 aWYoIXAuaXNGdW5jdGlvbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCaW5kIG11c3QgYmUgY2Fs bGVkIG9uIGEgZnU9Cm5jdGlvbiIpO3JldHVybiBuPTNEby5jYWxsKGFyZ3VtZW50cywyKSxyPTNE ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2Ygcj0KKXt5LnByb3RvdHlwZT0zRGUucHJvdG90 eXBlO3ZhciBpPTNEbmV3IHk7eS5wcm90b3R5cGU9M0RudWxsO3ZhciBzPTNEZS5hcHBsPQp5KGks bi5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKTtyZXR1cm4gcC5pc09iamVjdChzKT9zOml9cmV0 dXJuIGUuYXBwbHkodCw9Cm4uY29uY2F0KG8uY2FsbChhcmd1bWVudHMpKSl9LHJ9LHAucGFydGlh bD0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEby5jYWxsKGFyZz0KdW1lbnRzLDEpO3JldHVybiBmdW5j dGlvbigpe3ZhciBuPTNEMCxyPTNEdC5zbGljZSgpO2Zvcih2YXIgaT0zRDAscz0zRHIubGVuPQpn dGg7aTxzO2krKylyW2ldPTNEPTNEPTNEcCYmKHJbaV09M0Rhcmd1bWVudHNbbisrXSk7d2hpbGUo bjxhcmd1bWVudHMubGVuZ3Q9Cmgpci5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4gZS5hcHBs eSh0aGlzLHIpfX0scC5iaW5kQWxsPTNEZnVuY3Rpb24oZSl7dj0KYXIgdCxuPTNEYXJndW1lbnRz Lmxlbmd0aCxyO2lmKG48PTNEMSl0aHJvdyBuZXcgRXJyb3IoImJpbmRBbGwgbXVzdCBiZSBwYXNz PQplZCBmdW5jdGlvbiBuYW1lcyIpO2Zvcih0PTNEMTt0PG47dCsrKXI9M0Rhcmd1bWVudHNbdF0s ZVtyXT0zRHAuYmluZChlW3JdLGU9Cik7cmV0dXJuIGV9LHAubWVtb2l6ZT0zRGZ1bmN0aW9uKGUs dCl7dmFyIG49M0RmdW5jdGlvbihyKXt2YXIgaT0zRG4uY2FjaGUscz0KPTNEdD90LmFwcGx5KHRo aXMsYXJndW1lbnRzKTpyO3JldHVybiBwLmhhcyhpLHMpfHwoaVtzXT0zRGUuYXBwbHkodGhpcyxh cmd1PQptZW50cykpLGlbc119O3JldHVybiBuLmNhY2hlPTNEe30sbn0scC5kZWxheT0zRGZ1bmN0 aW9uKGUsdCl7dmFyIG49M0RvLmNhbGw9Cihhcmd1bWVudHMsMik7cmV0dXJuIHNldFRpbWVvdXQo ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShudWxsLG4pfSx0KX0scC5kZT0KZmVyPTNEZnVuY3Rp b24oZSl7cmV0dXJuIHAuZGVsYXkuYXBwbHkocCxbZSwxXS5jb25jYXQoby5jYWxsKGFyZ3VtZW50 cywxKSkpPQp9LHAudGhyb3R0bGU9M0RmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG89M0RudWxs LHU9M0QwO258fChuPTNEe30pO3ZhciBhPQo9M0RmdW5jdGlvbigpe3U9M0RuLmxlYWRpbmc9M0Q9 M0Q9M0QhMT8wOnAubm93KCksbz0zRG51bGwscz0zRGUuYXBwbHkocixpKSw9Cm98fChyPTNEaT0z RG51bGwpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj0zRHAubm93KCk7IXUmJm4ubGVhZGluZz0z RD0zRD0zRD0KITEmJih1PTNEZik7dmFyIGw9M0R0LShmLXUpO3JldHVybiByPTNEdGhpcyxpPTNE YXJndW1lbnRzLGw8PTNEMHx8bD50PyhjbGVhPQpyVGltZW91dChvKSxvPTNEbnVsbCx1PTNEZixz PTNEZS5hcHBseShyLGkpLG98fChyPTNEaT0zRG51bGwpKTohbyYmbi50cmFpbGk9Cm5nIT0zRD0z RCExJiYobz0zRHNldFRpbWVvdXQoYSxsKSksc319LHAuZGVib3VuY2U9M0RmdW5jdGlvbihlLHQs bil7dmFyIHIsaT0KLHMsbyx1LGE9M0RmdW5jdGlvbigpe3ZhciBmPTNEcC5ub3coKS1vO2Y8dCYm Zj4wP3I9M0RzZXRUaW1lb3V0KGEsdC1mKToocj0KPTNEbnVsbCxufHwodT0zRGUuYXBwbHkocyxp KSxyfHwocz0zRGk9M0RudWxsKSkpfTtyZXR1cm4gZnVuY3Rpb24oKXtzPTNEdGhpPQpzLGk9M0Rh cmd1bWVudHMsbz0zRHAubm93KCk7dmFyIGY9M0RuJiYhcjtyZXR1cm4gcnx8KHI9M0RzZXRUaW1l b3V0KGEsdCkpLGY9CiYmKHU9M0RlLmFwcGx5KHMsaSkscz0zRGk9M0RudWxsKSx1fX0scC53cmFw PTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5wYXJ0aT0KYWwodCxlKX0scC5uZWdhdGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hZS5hcHBseSh0aGlzLGFyZ3VtPQplbnRz KX19LHAuY29tcG9zZT0zRGZ1bmN0aW9uKCl7dmFyIGU9M0Rhcmd1bWVudHMsdD0zRGUubGVuZ3Ro LTE7cmV0dXJuIGZ1bmM9CnRpb24oKXt2YXIgbj0zRHQscj0zRGVbdF0uYXBwbHkodGhpcyxhcmd1 bWVudHMpO3doaWxlKG4tLSlyPTNEZVtuXS5jYWxsKHRoaT0KcyxyKTtyZXR1cm4gcn19LHAuYWZ0 ZXI9M0RmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2lmKC0tZTwxKXJldHVybiB0PQou YXBwbHkodGhpcyxhcmd1bWVudHMpfX0scC5iZWZvcmU9M0RmdW5jdGlvbihlLHQpe3ZhciBuO3Jl dHVybiBmdW5jdGlvbigpe3I9CmV0dXJuLS1lPjA/bj0zRHQuYXBwbHkodGhpcyxhcmd1bWVudHMp OnQ9M0RudWxsLG59fSxwLm9uY2U9M0RwLnBhcnRpYWwocC5iZT0KZm9yZSwyKSxwLmtleXM9M0Rm dW5jdGlvbihlKXtpZighcC5pc09iamVjdChlKSlyZXR1cm5bXTtpZihjKXJldHVybiBjKGUpO3Zh PQpyIHQ9M0RbXTtmb3IodmFyIG4gaW4gZSlwLmhhcyhlLG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9 LHAudmFsdWVzPTNEZnVuY3Rpb249CihlKXt2YXIgdD0zRHAua2V5cyhlKSxuPTNEdC5sZW5ndGgs cj0zREFycmF5KG4pO2Zvcih2YXIgaT0zRDA7aTxuO2krKylyW2ldPQo9M0RlW3RbaV1dO3JldHVy biByfSxwLnBhaXJzPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RwLmtleXMoZSksbj0zRHQubGVuZ3Ro LHI9Cj0zREFycmF5KG4pO2Zvcih2YXIgaT0zRDA7aTxuO2krKylyW2ldPTNEW3RbaV0sZVt0W2ld XV07cmV0dXJuIHJ9LHAuaW52ZXJ0PQo9M0RmdW5jdGlvbihlKXt2YXIgdD0zRHt9LG49M0RwLmtl eXMoZSk7Zm9yKHZhciByPTNEMCxpPTNEbi5sZW5ndGg7cjxpO3IrKyk9CnRbZVtuW3JdXV09M0Ru W3JdO3JldHVybiB0fSxwLmZ1bmN0aW9ucz0zRHAubWV0aG9kcz0zRGZ1bmN0aW9uKGUpe3ZhciB0 PTNEWz0KXTtmb3IodmFyIG4gaW4gZSlwLmlzRnVuY3Rpb24oZVtuXSkmJnQucHVzaChuKTtyZXR1 cm4gdC5zb3J0KCl9LHAuZXh0ZW5kPTNEPQpmdW5jdGlvbihlKXtpZighcC5pc09iamVjdChlKSly ZXR1cm4gZTt2YXIgdCxuO2Zvcih2YXIgcj0zRDEsaT0zRGFyZ3VtZW50cy49Cmxlbmd0aDtyPGk7 cisrKXt0PTNEYXJndW1lbnRzW3JdO2ZvcihuIGluIHQpZi5jYWxsKHQsbikmJihlW25dPTNEdFtu XSl9cmV0dT0Kcm4gZX0scC5waWNrPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNEe30saTtpZihl PTNEPTNEbnVsbClyZXR1cm4gcjtpZihwLmlzPQpGdW5jdGlvbih0KSl7dD0zRGQodCxuKTtmb3Io aSBpbiBlKXt2YXIgcz0zRGVbaV07dChzLGksZSkmJihyW2ldPTNEcyl9fWVsc2U9Cnt2YXIgYT0z RHUuYXBwbHkoW10sby5jYWxsKGFyZ3VtZW50cywxKSk7ZT0zRG5ldyBPYmplY3QoZSk7Zm9yKHZh ciBmPTNEMCxsPQo9M0RhLmxlbmd0aDtmPGw7ZisrKWk9M0RhW2ZdLGkgaW4gZSYmKHJbaV09M0Rl W2ldKX1yZXR1cm4gcn0scC5vbWl0PTNEZnVuY3Q9CmlvbihlLHQsbil7aWYocC5pc0Z1bmN0aW9u KHQpKXQ9M0RwLm5lZ2F0ZSh0KTtlbHNle3ZhciByPTNEcC5tYXAodS5hcHBseShbXT0KLG8uY2Fs bChhcmd1bWVudHMsMSkpLFN0cmluZyk7dD0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIXAuY29udGFp bnMocix0KX19cmV0PQp1cm4gcC5waWNrKGUsdCxuKX0scC5kZWZhdWx0cz0zRGZ1bmN0aW9uKGUp e2lmKCFwLmlzT2JqZWN0KGUpKXJldHVybiBlO2Zvcig9CnZhciB0PTNEMSxuPTNEYXJndW1lbnRz Lmxlbmd0aDt0PG47dCsrKXt2YXIgcj0zRGFyZ3VtZW50c1t0XTtmb3IodmFyIGkgaW4gcj0KKWVb aV09M0Q9M0Q9M0R2b2lkIDAmJihlW2ldPTNEcltpXSl9cmV0dXJuIGV9LHAuY2xvbmU9M0RmdW5j dGlvbihlKXtyZXR1cm4gPQpwLmlzT2JqZWN0KGUpP3AuaXNBcnJheShlKT9lLnNsaWNlKCk6cC5l eHRlbmQoe30sZSk6ZX0scC50YXA9M0RmdW5jdGlvbihlLHQ9Cil7cmV0dXJuIHQoZSksZX07dmFy IGI9M0RmdW5jdGlvbihlLHQsbixyKXtpZihlPTNEPTNEPTNEdClyZXR1cm4gZSE9M0Q9M0QwfD0K fDEvZT0zRD0zRD0zRDEvdDtpZihlPTNEPTNEbnVsbHx8dD0zRD0zRG51bGwpcmV0dXJuIGU9M0Q9 M0Q9M0R0O2UgaW5zdGFuY2VvPQpmIHAmJihlPTNEZS5fd3JhcHBlZCksdCBpbnN0YW5jZW9mIHAm Jih0PTNEdC5fd3JhcHBlZCk7dmFyIGk9M0RhLmNhbGwoZSk7aWY9CihpIT0zRD0zRGEuY2FsbCh0 KSlyZXR1cm4hMTtzd2l0Y2goaSl7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBT dD0KcmluZ10iOnJldHVybiIiK2U9M0Q9M0QiIit0O2Nhc2UiW29iamVjdCBOdW1iZXJdIjppZigr ZSE9M0Q9M0QrZSlyZXR1cm4rdCE9Cj0zRD0zRCt0O3JldHVybitlPTNEPTNEPTNEMD8xLytlPTNE PTNEPTNEMS90OitlPTNEPTNEPTNEK3Q7Y2FzZSJbb2JqZWN0IERhdD0KZV0iOmNhc2UiW29iamVj dCBCb29sZWFuXSI6cmV0dXJuK2U9M0Q9M0Q9M0QrdH1pZih0eXBlb2YgZSE9M0Qib2JqZWN0Inx8 dHlwPQplb2YgdCE9M0Qib2JqZWN0IilyZXR1cm4hMTt2YXIgcz0zRG4ubGVuZ3RoO3doaWxlKHMt LSlpZihuW3NdPTNEPTNEPTNEZSlyZXQ9CnVybiByW3NdPTNEPTNEPTNEdDt2YXIgbz0zRGUuY29u c3RydWN0b3IsdT0zRHQuY29uc3RydWN0b3I7aWYobyE9M0Q9M0R1JiYiYz0Kb25zdHJ1Y3RvciJp biBlJiYiY29uc3RydWN0b3IiaW4gdCYmIShwLmlzRnVuY3Rpb24obykmJm8gaW5zdGFuY2VvZiBv JiZwLmlzPQpGdW5jdGlvbih1KSYmdSBpbnN0YW5jZW9mIHUpKXJldHVybiExO24ucHVzaChlKSxy LnB1c2godCk7dmFyIGYsbDtpZihpPTNEPQo9M0Q9M0QiW29iamVjdCBBcnJheV0iKXtmPTNEZS5s ZW5ndGgsbD0zRGY9M0Q9M0Q9M0R0Lmxlbmd0aDtpZihsKXdoaWxlKGYtLSk9CmlmKCEobD0zRGIo ZVtmXSx0W2ZdLG4scikpKWJyZWFrfWVsc2V7dmFyIGM9M0RwLmtleXMoZSksaDtmPTNEYy5sZW5n dGgsbD0zRD0KcC5rZXlzKHQpLmxlbmd0aD0zRD0zRD0zRGY7aWYobCl3aGlsZShmLS0pe2g9M0Rj W2ZdO2lmKCEobD0zRHAuaGFzKHQsaCkmJmIoPQplW2hdLHRbaF0sbixyKSkpYnJlYWt9fXJldHVy biBuLnBvcCgpLHIucG9wKCksbH07cC5pc0VxdWFsPTNEZnVuY3Rpb24oZSx0KXs9CnJldHVybiBi KGUsdCxbXSxbXSl9LHAuaXNFbXB0eT0zRGZ1bmN0aW9uKGUpe2lmKGU9M0Q9M0RudWxsKXJldHVy biEwO2lmKHAuaT0Kc0FycmF5KGUpfHxwLmlzU3RyaW5nKGUpfHxwLmlzQXJndW1lbnRzKGUpKXJl dHVybiBlLmxlbmd0aD0zRD0zRD0zRDA7Zm9yKHZhPQpyIHQgaW4gZSlpZihwLmhhcyhlLHQpKXJl dHVybiExO3JldHVybiEwfSxwLmlzRWxlbWVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiE9CiFlJiZl Lm5vZGVUeXBlPTNEPTNEPTNEMX0scC5pc0FycmF5PTNEbHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGEu Y2FsbChlKT0zRD0zRD0KPTNEIltvYmplY3QgQXJyYXldIn0scC5pc09iamVjdD0zRGZ1bmN0aW9u KGUpe3ZhciB0PTNEdHlwZW9mIGU7cmV0dXJuIHQ9M0Q9Cj0zRD0zRCJmdW5jdGlvbiJ8fHQ9M0Q9 M0Q9M0Qib2JqZWN0IiYmISFlfSxwLmVhY2goWyJBcmd1bWVudHMiLCJGdW5jdGlvbiIsIj0KU3Ry aW5nIiwiTnVtYmVyIiwiRGF0ZSIsIlJlZ0V4cCJdLGZ1bmN0aW9uKGUpe3BbImlzIitlXT0zRGZ1 bmN0aW9uKHQpe3JldHVyPQpuIGEuY2FsbCh0KT0zRD0zRD0zRCJbb2JqZWN0ICIrZSsiXSJ9fSks cC5pc0FyZ3VtZW50cyhhcmd1bWVudHMpfHwocC5pc0FyZ3U9Cm1lbnRzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIHAuaGFzKGUsImNhbGxlZSIpfSksdHlwZW9mIC8uLyE9M0QiZnVuY3Rpb24iJiYocD0K LmlzRnVuY3Rpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9M0Q9M0QiZnVuY3Rpb24i fHwhMX0pLHAuaXNGaW5pdGU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBpc0Zpbml0ZShlKSYmIWlz TmFOKHBhcnNlRmxvYXQoZSkpfSxwLmlzTmFOPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gcC5pc051 bWJlcihlKSYmZSE9M0Q9M0QrZX0scC5pc0Jvb2xlYW49M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0K PTNEPTNEPTNEITB8fGU9M0Q9M0Q9M0QhMXx8YS5jYWxsKGUpPTNEPTNEPTNEIltvYmplY3QgQm9v bGVhbl0ifSxwLmlzTnVsbD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9M0Q9M0Q9M0RudWxsfSxw LmlzVW5kZWZpbmVkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cj0zRD0zRD0zRHZvaWQgMH0scC5o YXM9M0RmdW5jdGlvbihlLHQpe3JldHVybiBlIT0zRG51bGwmJmYuY2FsbChlLHQpfSxwLm5vQz0K b25mbGljdD0zRGZ1bmN0aW9uKCl7cmV0dXJuIGUuXz0zRHQsdGhpc30scC5pZGVudGl0eT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBlPQp9LHAuY29uc3RhbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gZnVu Y3Rpb24oKXtyZXR1cm4gZX19LHAubm9vcD0zRGZ1bmN0aW9uKCk9Cnt9LHAucHJvcGVydHk9M0Rm dW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRbZV19fSxwLm1hdGNoZXM9M0Rm dT0KbmN0aW9uKGUpe3ZhciB0PTNEcC5wYWlycyhlKSxuPTNEdC5sZW5ndGg7cmV0dXJuIGZ1bmN0 aW9uKGUpe2lmKGU9M0Q9M0RudWxsPQopcmV0dXJuIW47ZT0zRG5ldyBPYmplY3QoZSk7Zm9yKHZh ciByPTNEMDtyPG47cisrKXt2YXIgaT0zRHRbcl0scz0zRGlbMF07aWY9CihpWzFdIT0zRD0zRGVb c118fCEocyBpbiBlKSlyZXR1cm4hMX1yZXR1cm4hMH19LHAudGltZXM9M0RmdW5jdGlvbihlLHQs bil7dj0KYXIgcj0zREFycmF5KE1hdGgubWF4KDAsZSkpO3Q9M0RkKHQsbiwxKTtmb3IodmFyIGk9 M0QwO2k8ZTtpKyspcltpXT0zRHQoaSk7PQpyZXR1cm4gcn0scC5yYW5kb209M0RmdW5jdGlvbihl LHQpe3JldHVybiB0PTNEPTNEbnVsbCYmKHQ9M0RlLGU9M0QwKSxlK01hdGg9Ci5mbG9vcihNYXRo LnJhbmRvbSgpKih0LWUrMSkpfSxwLm5vdz0zRERhdGUubm93fHxmdW5jdGlvbigpe3JldHVybihu ZXcgRGF0ZT0KKS5nZXRUaW1lKCl9O3ZhciB3PTNEeyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4i OiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImPQojeDI3OyIsImAiOiImI3g2MDsifSxFPTNEcC5p bnZlcnQodyksUz0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEZnVuY3Rpb24odCl7cmU9CnR1cm4gZVt0 XX0sbj0zRCIoPzoiK3Aua2V5cyhlKS5qb2luKCJ8IikrIikiLHI9M0RSZWdFeHAobiksaT0zRFJl Z0V4cChuLCJnIj0KKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU9M0RlPTNEPTNEbnVsbD8i IjoiIitlLHIudGVzdChlKT9lLnJlcGxhY2UoaSx0PQopOmV9fTtwLmVzY2FwZT0zRFModykscC51 bmVzY2FwZT0zRFMoRSkscC5yZXN1bHQ9M0RmdW5jdGlvbihlLHQpe2lmKGU9M0Q9M0Q9Cm51bGwp cmV0dXJuIHZvaWQgMDt2YXIgbj0zRGVbdF07cmV0dXJuIHAuaXNGdW5jdGlvbihuKT9lW3RdKCk6 bn07dmFyIHg9M0QwOz0KcC51bmlxdWVJZD0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEKyt4KyIiO3Jl dHVybiBlP2UrdDp0fSxwLnRlbXBsYXRlU2V0dGluZ3M9Cj0zRHtldmFsdWF0ZTovPCUoW1xzXFNd Kz8pJT4vZyxpbnRlcnBvbGF0ZTovPCU9M0QoW1xzXFNdKz8pJT4vZyxlc2NhcGU6LzwlLT0KKFtc c1xTXSs/KSU+L2d9O3ZhciBUPTNELyguKV4vLE49M0R7IiciOiInIiwiXFwiOiJcXCIsIlxyIjoi ciIsIlxuIjoibiIsIlx1PQoyMDI4IjoidTIwMjgiLCJcdTIwMjkiOiJ1MjAyOSJ9LEM9M0QvXFx8 J3xccnxcbnxcdTIwMjh8XHUyMDI5L2csaz0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIlxcIitOW2Vd fTtwLnRlbXBsYXRlPTNEZnVuY3Rpb24oZSx0LG4peyF0JiZuJiYodD0zRG4pLHQ9M0RwLmRlZj0K YXVsdHMoe30sdCxwLnRlbXBsYXRlU2V0dGluZ3MpO3ZhciByPTNEUmVnRXhwKFsodC5lc2NhcGV8 fFQpLnNvdXJjZSwodC5pbnRlPQpycG9sYXRlfHxUKS5zb3VyY2UsKHQuZXZhbHVhdGV8fFQpLnNv dXJjZV0uam9pbigifCIpKyJ8JCIsImciKSxpPTNEMCxzPTNEIl89Cl9wKz0zRCciO2UucmVwbGFj ZShyLGZ1bmN0aW9uKHQsbixyLG8sdSl7cmV0dXJuIHMrPTNEZS5zbGljZShpLHUpLnJlcGxhY2Uo Qz0KLGspLGk9M0R1K3QubGVuZ3RoLG4/cys9M0QiJytcbigoX190PTNEKCIrbisiKSk9M0Q9M0Ru dWxsPycnOl8uZXNjYXBlKF9fdCkpPQorXG4nIjpyP3MrPTNEIicrXG4oKF9fdD0zRCgiK3IrIikp PTNEPTNEbnVsbD8nJzpfX3QpK1xuJyI6byYmKHMrPTNEIic7XG4iK289CisiXG5fX3ArPTNEJyIp LHR9KSxzKz0zRCInO1xuIix0LnZhcmlhYmxlfHwocz0zRCJ3aXRoKG9ianx8e30pe1xuIitzKyJ9 XG4iKT0KLHM9M0QidmFyIF9fdCxfX3A9M0QnJyxfX2o9M0RBcnJheS5wcm90b3R5cGUuam9pbixw cmludD0zRGZ1bmN0aW9uKCl7X19wKz0KPTNEX19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIitz KyJyZXR1cm4gX19wO1xuIjt0cnl7dmFyIG89M0RuZXcgRnVuY3Rpb24oPQp0LnZhcmlhYmxlfHwi b2JqIiwiXyIscyl9Y2F0Y2godSl7dGhyb3cgdS5zb3VyY2U9M0RzLHV9dmFyIGE9M0RmdW5jdGlv bihlKXs9CnJldHVybiBvLmNhbGwodGhpcyxlLHApfSxmPTNEdC52YXJpYWJsZXx8Im9iaiI7cmV0 dXJuIGEuc291cmNlPTNEImZ1bmN0aW9uKD0KIitmKyIpe1xuIitzKyJ9IixhfSxwLmNoYWluPTNE ZnVuY3Rpb24oZSl7dmFyIHQ9M0RwKGUpO3JldHVybiB0Ll9jaGFpbj0zRCEwPQosdH07dmFyIEw9 M0RmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2hhaW4/cChlKS5jaGFpbigpOmV9O3AubWl4aW49 M0RmdW5jdGk9Cm9uKGUpe3AuZWFjaChwLmZ1bmN0aW9ucyhlKSxmdW5jdGlvbih0KXt2YXIgbj0z RHBbdF09M0RlW3RdO3AucHJvdG90eXBlW3RdPQo9M0RmdW5jdGlvbigpe3ZhciBlPTNEW3RoaXMu X3dyYXBwZWRdO3JldHVybiBzLmFwcGx5KGUsYXJndW1lbnRzKSxMLmNhbGwodGg9CmlzLG4uYXBw bHkocCxlKSl9fSl9LHAubWl4aW4ocCkscC5lYWNoKFsicG9wIiwicHVzaCIsInJldmVyc2UiLCJz aGlmdCIsInNvcj0KdCIsInNwbGljZSIsInVuc2hpZnQiXSxmdW5jdGlvbihlKXt2YXIgdD0zRG5b ZV07cC5wcm90b3R5cGVbZV09M0RmdW5jdGlvbigpPQp7dmFyIG49M0R0aGlzLl93cmFwcGVkO3Jl dHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKSwoZT0zRD0zRD0zRCJzaGlmdCJ8fGU9M0Q9Cj0zRD0z RCJzcGxpY2UiKSYmbi5sZW5ndGg9M0Q9M0Q9M0QwJiZkZWxldGUgblswXSxMLmNhbGwodGhpcyxu KX19KSxwLmVhY2goWz0KImNvbmNhdCIsImpvaW4iLCJzbGljZSJdLGZ1bmN0aW9uKGUpe3ZhciB0 PTNEbltlXTtwLnByb3RvdHlwZVtlXT0zRGZ1bmN0aW9uPQooKXtyZXR1cm4gTC5jYWxsKHRoaXMs dC5hcHBseSh0aGlzLl93cmFwcGVkLGFyZ3VtZW50cykpfX0pLHAucHJvdG90eXBlLnZhbHU9CmU9 M0RmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwcGVkfSx0eXBlb2YgZGVmaW5lPTNEPTNEImZ1 bmN0aW9uIiYmZGVmaW5lLj0KYW1kJiZkZWZpbmUoInVuZGVyc2NvcmUiLFtdLGZ1bmN0aW9uKCl7 cmV0dXJuIHB9KX0uY2FsbCh0aGlzKSxkZWZpbmUoImxpYnMvPQp1bmRlcnNjb3JlIixmdW5jdGlv bihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiB0fHxlLl99fSh0aGlzKSksZGU9 CmZpbmUoInV0aWxzL3V0aWxzIixbImxpYnMvdW5kZXJzY29yZSJdLGZ1bmN0aW9uKGUpe2Z1bmN0 aW9uIHQoZSxuKXtmb3IodmFyID0KciBpbiBlKXt2YXIgaT0zRGVbcl07aSYmdHlwZW9mIGk9M0Q9 M0Qib2JqZWN0IiYmKG4oaSksdChpLG4pKX19ZnVuY3Rpb24gbihlPQope3JldHVybiAkKCI8ZGl2 Lz4iKS50ZXh0KGUpLmh0bWwoKX1mdW5jdGlvbiByKGUpe2UgaW5zdGFuY2VvZiBBcnJheXx8KGU9 M0Q9CltlXSk7Zm9yKHZhciB0IGluIGUpaWYoWyJOb25lIixudWxsLCJudWxsIix1bmRlZmluZWQs InVuZGVmaW5lZCJdLmluZGV4T2YoZT0KW3RdKT4tMSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlv biBpKGUpe3ZhciBlPTNEZS50b1N0cmluZygpO2lmKGUpe2U9M0RlLnJlPQpwbGFjZSgvLC9nLCIs ICIpO3ZhciB0PTNEZS5sYXN0SW5kZXhPZigiLCAiKTtyZXR1cm4gdCE9M0QtMSYmKGU9M0RlLnN1 YnN0cig9CjAsdCkrIiBvciAiK2Uuc3Vic3RyKHQrMSkpLGV9cmV0dXJuIiJ9ZnVuY3Rpb24gcyhl KXt0b3AuX191dGlsc19fZ2V0X189M0R0bz0KcC5fX3V0aWxzX19nZXRfX3x8e30sZS5jYWNoZSYm dG9wLl9fdXRpbHNfX2dldF9fW2UudXJsXT8oZS5zdWNjZXNzJiZlLnN1Y2NlPQpzcyh0b3AuX191 dGlsc19fZ2V0X19bZS51cmxdKSxjb25zb2xlLmRlYnVnKCJ1dGlscy5qczo6Z2V0KCkgLSBGZXRj aGluZyBmcm89Cm0gY2FjaGUgWyIrZS51cmwrIl0uIikpOm8oe3VybDplLnVybCxkYXRhOmUuZGF0 YSxzdWNjZXNzOmZ1bmN0aW9uKHQpe3RvcC5fXz0KdXRpbHNfX2dldF9fW2UudXJsXT0zRHQsZS5z dWNjZXNzJiZlLnN1Y2Nlc3ModCl9LGVycm9yOmZ1bmN0aW9uKHQpe2UuZXJyb3ImPQomZS5lcnJv cih0KX19KX1mdW5jdGlvbiBvKGUpe3ZhciB0PTNEe2NvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9q c29uIix0eXBlOmU9Ci50eXBlfHwiR0VUIixkYXRhOmUuZGF0YXx8e30sdXJsOmUudXJsfTt0LnR5 cGU9M0Q9M0QiR0VUInx8dC50eXBlPTNEPTNEIkRFTD0KRVRFIj8odC51cmwuaW5kZXhPZigiPyIp PTNEPTNELTE/dC51cmwrPTNEIj8iOnQudXJsKz0zRCImIix0LnVybD0zRHQudXJsKyQuPQpwYXJh bSh0LmRhdGEpLHQuZGF0YT0zRG51bGwpOih0LmRhdGFUeXBlPTNEImpzb24iLHQudXJsPTNEdC51 cmwsdC5kYXRhPTNESlM9Ck9OLnN0cmluZ2lmeSh0LmRhdGEpKSwkLmFqYXgodCkuZG9uZShmdW5j dGlvbih0KXtpZih0eXBlb2YgdD0zRD0zRCJzdHJpbmciKT0KdHJ5e3Q9M0R0LnJlcGxhY2UoIklu ZmluaXR5LCIsJyJJbmZpbml0eSIsJyksdD0zRGpRdWVyeS5wYXJzZUpTT04odCl9Y2F0Y2goPQpu KXtjb25zb2xlLmRlYnVnKG4pfWUuc3VjY2VzcyYmZS5zdWNjZXNzKHQpfSkuZmFpbChmdW5jdGlv bih0KXt2YXIgbj0zRG51bGw9Cjt0cnl7bj0zRGpRdWVyeS5wYXJzZUpTT04odC5yZXNwb25zZVRl eHQpfWNhdGNoKHIpe249M0R0LnJlc3BvbnNlVGV4dH1lLmVycj0Kb3ImJmUuZXJyb3Iobix0KX0p fWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj0zRCQoJzxkaXYgY2xhc3M9M0QiJytlKyciPjwvZGl2Picp PQo7bi5hcHBlbmRUbygiOmVxKDApIik7dmFyIHI9M0RuLmNzcyh0KTtyZXR1cm4gbi5yZW1vdmUo KSxyfWZ1bmN0aW9uIGEoZSl7JCg9CidsaW5rW2hyZWZePTNEIicrZSsnIl0nKS5sZW5ndGh8fCQo JzxsaW5rIGhyZWY9M0QiJytnYWxheHlfY29uZmlnLnJvb3QrZSsnIj0KIHJlbD0zRCJzdHlsZXNo ZWV0Ij4nKS5hcHBlbmRUbygiaGVhZCIpfWZ1bmN0aW9uIGYodCxuKXtyZXR1cm4gdD9lLmRlZmF1 bHRzPQoodCxuKTpufWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj0zRCIiO2lmKGU+PTNEMWUxMSllLz0z RDFlMTEsbj0zRCJUQiI7ZWxzZSBpZig9CmU+PTNEMWU4KWUvPTNEMWU4LG49M0QiR0IiO2Vsc2Ug aWYoZT49M0QxZTUpZS89M0QxZTUsbj0zRCJNQiI7ZWxzZSBpZihlPj0zRD0KMTAwKWUvPTNEMTAw LG49M0QiS0IiO2Vsc2V7aWYoIShlPjApKXJldHVybiI8c3Ryb25nPi08L3N0cm9uZz4iO2UqPTNE MTAsbj0KPTNEImIifXZhciByPTNETWF0aC5yb3VuZChlKS8xMDtyZXR1cm4gdD9yKyIgIituOiI8 c3Ryb25nPiIrcisiPC9zdHJvbmc+ICIrPQpufWZ1bmN0aW9uIGMoKXtyZXR1cm4ieCIrTWF0aC5y YW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9ZnVuY3Rpb249CiBoKGUpe3ZhciB0 PTNEJCgiPHA+PC9wPiIpO3JldHVybiB0LmFwcGVuZChlKSx0fWZ1bmN0aW9uIHAoKXt2YXIgZT0z RG5ldyBEYT0KdGUsdD0zRChlLmdldEhvdXJzKCk8MTA/IjAiOiIiKStlLmdldEhvdXJzKCksbj0z RChlLmdldE1pbnV0ZXMoKTwxMD8iMCI6IiIpPQorZS5nZXRNaW51dGVzKCkscj0zRGUuZ2V0RGF0 ZSgpKyIvIisoZS5nZXRNb250aCgpKzEpKyIvIitlLmdldEZ1bGxZZWFyKCkrIiw9CiAiK3QrIjoi K247cmV0dXJuIHJ9cmV0dXJue2Nzc0xvYWRGaWxlOmEsY3NzR2V0QXR0cmlidXRlOnUsZ2V0OnMs bWVyZ2U6ZixieT0KdGVzVG9TdHJpbmc6bCx1dWlkOmMsdGltZTpwLHdyYXA6aCxyZXF1ZXN0Om8s c2FuaXRpemU6bix0ZXh0aWZ5OmksdmFsaWRhdGU6PQpyLGRlZXBlYWNoOnR9fSksZGVmaW5lKCJt dmMvdWkvdWktcG9ydGxldCIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciA9CnQ9M0RC YWNrYm9uZS5WaWV3LmV4dGVuZCh7dmlzaWJsZTohMSxvcHRpb25zRGVmYXVsdDp7dGl0bGU6IiIs aWNvbjoiIixidXR0bz0KbnM6bnVsbCxib2R5Om51bGwsc2Nyb2xsYWJsZTohMCxub3BhZGRpbmc6 ITEsb3BlcmF0aW9uczpudWxsLHBsYWNlbWVudDoiYm90PQp0b20iLGNsczoidWktcG9ydGxldCIs b3BlcmF0aW9uc19mbHQ6InJpZ2h0In0sJHRpdGxlOm51bGwsJGNvbnRlbnQ6bnVsbCwkYnU9CnR0 b25zOm51bGwsJG9wZXJhdGlvbnM6bnVsbCwkaGVhZGVyOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlv bih0KXt0aGlzLm9wdGlvbj0Kcz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlz LnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpPQpvbnMpKSx0aGlzLiRjb250ZW50 PTNEdGhpcy4kZWwuZmluZCgiLmNvbnRlbnQiKSx0aGlzLiR0aXRsZT0zRHRoaXMuJGVsLmZpbmQ9 CigiLnBvcnRsZXQtdGl0bGUtdGV4dCIpLHRoaXMuJGhlYWRlcj0zRHRoaXMuJGVsLmZpbmQoIi5w b3J0bGV0LWhlYWRlciIpO3Zhcj0KIG49M0R0aGlzLiRlbC5maW5kKCIucG9ydGxldC1jb250ZW50 Iik7dGhpcy5vcHRpb25zLnNjcm9sbGFibGU/bi5hZGRDbGFzcygiPQpzY3JvbGwiKTp0aGlzLm9w dGlvbnMudGl0bGU/bi5hZGRDbGFzcygibm8tc2Nyb2xsIik6bi5hZGRDbGFzcygibm8tc2Nyb2xs LW49Cm8tdGl0bGUiKSx0aGlzLm9wdGlvbnMubm9wYWRkaW5nJiYobi5jc3MoInBhZGRpbmciLCIw cHgiKSx0aGlzLiRjb250ZW50LmNzcz0KKCJwYWRkaW5nIiwiMHB4IikpLHRoaXMuJGJ1dHRvbnM9 M0QkKHRoaXMuZWwpLmZpbmQoIi5idXR0b25zIik7aWYodGhpcy5vcHRpPQpvbnMuYnV0dG9ucyl7 dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuYnV0dG9ucyxmdW5jdGlvbihlLHQpe3Qu JGVsLnA9CnJvcCgiaWQiLGUpLHIuJGJ1dHRvbnMuYXBwZW5kKHQuJGVsKX0pfWVsc2UgdGhpcy4k YnV0dG9ucy5yZW1vdmUoKTt0aGlzLiRvcD0KZXJhdGlvbnM9M0QkKHRoaXMuZWwpLmZpbmQoIi5v cGVyYXRpb25zIik7aWYodGhpcy5vcHRpb25zLm9wZXJhdGlvbnMpe3ZhciByPQo9M0R0aGlzOyQu ZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvbihlLHQpe3QuJGVsLnByb3AoImlk IixlKSxyLiQ9Cm9wZXJhdGlvbnMuYXBwZW5kKHQuJGVsKX0pfXRoaXMub3B0aW9ucy5ib2R5JiZ0 aGlzLmFwcGVuZCh0aGlzLm9wdGlvbnMuYm9keT0KKX0sYXBwZW5kOmZ1bmN0aW9uKHQsbil7bj90 aGlzLiRjb250ZW50LmFwcGVuZCh0KTp0aGlzLiRjb250ZW50LmFwcGVuZChlLndyPQphcCh0KSl9 LGNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29udGVudH0sc2hvdzpmdW5jdGlvbigp e3RoaXMuJGVsLmY9CmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITB9LGhpZGU6ZnVuY3Rp b24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdD0KaGlzLnZpc2libGU9M0QhMX0sZW5hYmxl QnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuJGJ1dHRvbnMuZmluZCgiIyIrZSkucHJvcCgiPQpkaXNh YmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuJGJ1dHRvbnMuZmluZCgi IyIrZSkucHJvcCgiZGk9CnNhYmxlZCIsITApfSxoaWRlT3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3Ro aXMuJG9wZXJhdGlvbnMuZmluZCgiIyIrZSkuaGlkZSgpfT0KLHNob3dPcGVyYXRpb246ZnVuY3Rp b24oZSl7dGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitlKS5zaG93KCl9LHNldE9wZXJhdGlvPQpu OmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRvcGVyYXRpb25zLmZpbmQoIiMiK2UpO24ub2Zm KCJjbGljayIpLG4ub24oImM9CmxpY2siLHQpfSx0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0zRHRo aXMuJHRpdGxlO3JldHVybiBlJiZ0Lmh0bWwoZSksdC5odG1sKD0KKX0sX3RlbXBsYXRlOmZ1bmN0 aW9uKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEIicrZS5jbHMrJyI+ PQonO3JldHVybiBlLnRpdGxlJiYodCs9M0QnPGRpdiBjbGFzcz0zRCJwb3J0bGV0LWhlYWRlciI+ PGRpdiBjbGFzcz0zRCJvcGVyYXQ9CmlvbnMiIHN0eWxlPTNEImZsb2F0OiAnK2Uub3BlcmF0aW9u c19mbHQrJzsiPjwvZGl2PicrJzxkaXYgY2xhc3M9M0QicG9ydGxldD0KLXRpdGxlIj4nLGUuaWNv biYmKHQrPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyI+Jm5ic3A7PC9pPicpLHQr PTNEPQonPHNwYW4gY2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0Ij4nK2UudGl0bGUrIjwvc3Bh bj4iKyI8L2Rpdj4iKyI8L2Rpdj4iKSw9CnQrPTNEJzxkaXYgY2xhc3M9M0QicG9ydGxldC1jb250 ZW50Ij4nLGUucGxhY2VtZW50PTNEPTNEInRvcCImJih0Kz0zRCc8ZGl2ID0KY2xhc3M9M0QiYnV0 dG9ucyI+PC9kaXY+JyksdCs9M0QnPGRpdiBjbGFzcz0zRCJjb250ZW50Ij48L2Rpdj4nLGUucGxh Y2VtZW50PQo9M0Q9M0QiYm90dG9tIiYmKHQrPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+PC9k aXY+JyksdCs9M0QiPC9kaXY+PC9kaXY+Iiw9CnR9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUo Im12Yy91aS91aS1zZWxlY3QtZGVmYXVsdCIsWyJ1dGlscy91dGlscyJdLGZ1bj0KY3Rpb24oZSl7 dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOiIiLGNsczoi IixlcnJvcl90PQpleHQ6Ik5vIGRhdGEgYXZhaWxhYmxlIix2aXNpYmxlOiEwLHdhaXQ6ITEsbXVs dGlwbGU6ITEsc2VhcmNoYWJsZTohMX0saW5pdGk9CmFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0 aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZT0KbWVudCh0 aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRzZWxlY3Q9M0R0aGlzLiRlbC5maW5k KCIuc2VsZWN0IiksPQp0aGlzLiRpY29uPTNEdGhpcy4kZWwuZmluZCgiLmljb24iKSx0aGlzLiRi dXR0b249M0R0aGlzLiRlbC5maW5kKCIuYnV0dG9uIik9Cix0aGlzLm9wdGlvbnMubXVsdGlwbGU/ KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWx0aXBsZSIsITApLHRoaXMuJHNlbGVjdC5hZGRDbD0KYXNz KCJ1aS1zZWxlY3QtbXVsdGlwbGUiKSx0aGlzLiRpY29uLnJlbW92ZSgpKTp0aGlzLiRlbC5hZGRD bGFzcygidWktc2VsZWN0PQoiKSx0aGlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMuZGF0YSksdGhpcy5v cHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy49CnZhbHVlKHRoaXMub3B0aW9ucy52 YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuaGlkZSgpLHRoaXMub3B0aW9ucy53YT0K aXQ/dGhpcy53YWl0KCk6dGhpcy5zaG93KCk7dmFyIG49M0R0aGlzO3RoaXMuJHNlbGVjdC5vbigi Y2hhbmdlIixmdW5jdGlvbigpPQp7bi5fY2hhbmdlKCl9KSx0aGlzLm9uKCJjaGFuZ2UiLGZ1bmN0 aW9uKCl7bi5fY2hhbmdlKCl9KX0sdmFsdWU6ZnVuY3Rpb24oZSk9CntyZXR1cm4gZSE9M0Q9M0R1 bmRlZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGUpLHRoaXMuJHNlbGVjdC5zZWxlY3QyJiZ0aGlz Lj0KJHNlbGVjdC5zZWxlY3QyKCJ2YWwiLGUpKSx0aGlzLiRzZWxlY3QudmFsKCl9LGZpcnN0OmZ1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzPQouJHNlbGVjdC5maW5kKCJvcHRpb24iKTtyZXR1cm4gZS5s ZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0sdmFsaWRhdGU6ZnVuY3Q9Cmlvbigpe3JldHVybiBl LnZhbGlkYXRlKHRoaXMudmFsdWUoKSl9LHRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Vs ZWN0Lj0KZmluZCgib3B0aW9uOnNlbGVjdGVkIikudGV4dCgpfSxzaG93OmZ1bmN0aW9uKCl7dGhp cy51bndhaXQoKSx0aGlzLiRzZWxlY3QuPQpzaG93KCksdGhpcy4kZWwuc2hvdygpfSxoaWRlOmZ1 bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSx3YWl0OmZ1bmN0aW9uKCl7dGg9CmlzLiRpY29uLnJl bW92ZUNsYXNzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmEgZmEtc3Bpbm5lciBmYS1zcGluIil9 LHVud2FpdD0KOmZ1bmN0aW9uKCl7dGhpcy4kaWNvbi5yZW1vdmVDbGFzcygpLHRoaXMuJGljb24u YWRkQ2xhc3MoImZhIGZhLWNhcmV0LWRvd24iPQopfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVy biB0aGlzLiRzZWxlY3QuaXMoIjpkaXNhYmxlZCIpfSxlbmFibGU6ZnVuY3Rpb249Cigpe3RoaXMu JHNlbGVjdC5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy4kc2Vs ZWN0LnByb3AoIj0KZGlzYWJsZWQiLCEwKX0sYWRkOmZ1bmN0aW9uKGUpe3RoaXMuJHNlbGVjdC5h cHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb24oZSkpPQosdGhpcy5fcmVmcmVzaCgpfSxkZWw6ZnVu Y3Rpb24oZSl7dGhpcy4kc2VsZWN0LmZpbmQoIm9wdGlvblt2YWx1ZT0zRCIrZSsiXSI9CikucmVt b3ZlKCksdGhpcy4kc2VsZWN0LnRyaWdnZXIoImNoYW5nZSIpLHRoaXMuX3JlZnJlc2goKX0sdXBk YXRlOmZ1bmN0aW9uKD0KZSl7dmFyIHQ9M0R0aGlzLiRzZWxlY3QudmFsKCk7dGhpcy4kc2VsZWN0 LmZpbmQoIm9wdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgPQpuIGluIGUpdGhpcy4kc2VsZWN0LmFw cGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihlW25dKSk7dGhpcy5fcmVmcmVzaCgpLHRoaXM9Ci4k c2VsZWN0LnZhbCh0KSx0aGlzLiRzZWxlY3QudmFsKCl8fHRoaXMuJHNlbGVjdC52YWwodGhpcy5m aXJzdCgpKSx0aGlzLm9wdD0KaW9ucy5zZWFyY2hhYmxlJiYodGhpcy4kYnV0dG9uLmhpZGUoKSx0 aGlzLiRzZWxlY3Quc2VsZWN0MigiZGVzdHJveSIpLHRoaXMuPQokc2VsZWN0LnNlbGVjdDIoKSl9 LHNldE9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5vbmNoYW5nZT0zRGV9LGV4aXM9 CnRzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRzZWxlY3QuZmluZCgnb3B0aW9uW3ZhbHVlPTNE IicrZSsnIl0nKS5sZW5ndGg+MD0KfSxfY2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9u Y2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy4kc2VsPQplY3QudmFsKCkpfSxfcmVm cmVzaDpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5maW5kKCJvcHRpb25bdmFsdWU9M0RudWxsXSIp LnI9CmVtb3ZlKCk7dmFyIGU9M0R0aGlzLiRzZWxlY3QuZmluZCgib3B0aW9uIikubGVuZ3RoO2U9 M0Q9M0QwPyh0aGlzLmRpc2FibGUoKT0KLHRoaXMuJHNlbGVjdC5hcHBlbmQodGhpcy5fdGVtcGxh dGVPcHRpb24oe3ZhbHVlOiJudWxsIixsYWJlbDp0aGlzLm9wdGlvbnMuPQplcnJvcl90ZXh0fSkp KTp0aGlzLmVuYWJsZSgpfSxfdGVtcGxhdGVPcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuJzxvcHRp b24gdmE9Cmx1ZT0zRCInK2UudmFsdWUrJyI+JytlLmxhYmVsKyI8L29wdGlvbj4ifSxfdGVtcGxh dGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaT0KdiBpZD0zRCInK2UuaWQrJyI+JysnPHNlbGVjdCBp ZD0zRCJzZWxlY3QiIGNsYXNzPTNEInNlbGVjdCAnK2UuY2xzKyIgIitlLmlkPQorJyI+PC9zZWxl Y3Q+JysnPGRpdiBjbGFzcz0zRCJidXR0b24iPicrJzxpIGNsYXNzPTNEImljb24iLz4nKyI8L2Rp dj4iKyI8L2Q9Cml2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1zbGlk ZXIiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbj0KKGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5l eHRlbmQoe29wdGlvbnNEZWZhdWx0OnttaW46bnVsbCxtYXg6bnVsbCxzdGVwOm51PQpsbCxwcmVj aXNlOiExLHNwbGl0OjFlNH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj0zRHRoaXM7dGhp cy5vcHRpb25zPQo9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW89Cm5zKSksdGhpcy51c2VzbGlkZXI9M0R0aGlz Lm9wdGlvbnMubWF4IT0zRD0zRG51bGwmJnRoaXMub3B0aW9ucy5taW4hPTNEPTNEbj0KdWxsJiZ0 aGlzLm9wdGlvbnMubWF4PnRoaXMub3B0aW9ucy5taW4sdGhpcy5vcHRpb25zLnN0ZXA9M0Q9M0Q9 M0RudWxsJiYodGhpPQpzLm9wdGlvbnMuc3RlcD0zRDEsdGhpcy5vcHRpb25zLnByZWNpc2UmJnRo aXMudXNlc2xpZGVyJiYodGhpcy5vcHRpb25zLnN0ZXA9Cj0zRCh0aGlzLm9wdGlvbnMubWF4LXRo aXMub3B0aW9ucy5taW4pL3RoaXMub3B0aW9ucy5zcGxpdCkpLHRoaXMudXNlc2xpZGVyPz0KKHRo aXMuJHNsaWRlcj0zRHRoaXMuJGVsLmZpbmQoIiNzbGlkZXIiKSx0aGlzLiRzbGlkZXIuc2xpZGVy KHRoaXMub3B0aW9ucyksPQp0aGlzLiRzbGlkZXIub24oInNsaWRlIixmdW5jdGlvbihlLHQpe24u dmFsdWUodC52YWx1ZSl9KSk6dGhpcy4kZWwuZmluZCgiLnU9CmktZm9ybS1zbGlkZXItdGV4dCIp LmNzcygid2lkdGgiLCIxMDAlIiksdGhpcy4kdGV4dD0zRHRoaXMuJGVsLmZpbmQoIiN0ZXh0Ij0K KSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0 aW9ucy52YWx1ZSksdGhpcy4kPQp0ZXh0Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi52YWx1ZSgk KHRoaXMpLnZhbCgpKX0pO3ZhciByPTNEW107dGhpcy4kdGV4dC49Cm9uKCJrZXl1cCIsZnVuY3Rp b24oZSl7cltlLndoaWNoXT0zRCExfSksdGhpcy4kdGV4dC5vbigia2V5ZG93biIsZnVuY3Rpb24o ZT0KKXt2YXIgdD0zRGUud2hpY2g7clt0XT0zRCEwLHQ9M0Q9M0Q4fHx0PTNEPTNEOXx8dD0zRD0z RDEzfHx0PTNEPTNEMzd8fHQ9M0Q9Cj0zRDM5fHx0Pj0zRDQ4JiZ0PD0zRDU3fHx0PTNEPTNEMTkw JiYkKHRoaXMpLnZhbCgpLmluZGV4T2YoIi4iKT0zRD0zRC0xJiZuLj0Kb3B0aW9ucy5wcmVjaXNl fHx0PTNEPTNEMTg5JiYkKHRoaXMpLnZhbCgpLmluZGV4T2YoIi0iKT0zRD0zRC0xfHxyWzkxXXx8 clsxPQo3XXx8ZXZlbnQucHJldmVudERlZmF1bHQoKX0pfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1 cm4gZSE9M0Q9M0R1bmRlZmluZWQmJig9CmlzTmFOKGUpJiYoZT0zRDApLHRoaXMub3B0aW9ucy5t YXghPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1pbihlLHRoaXMub3B0aW9ucz0KLm1heCkpLHRoaXMu b3B0aW9ucy5taW4hPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1heChlLHRoaXMub3B0aW9ucy5taW4p KSx0aGlzPQoub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpLHRoaXMu JHNsaWRlciYmdGhpcy4kc2xpZGVyLnNsaWQ9CmVyKCJ2YWx1ZSIsZSksdGhpcy4kdGV4dC52YWwo ZSkpLHRoaXMuJHRleHQudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZT0KdHVybic8ZGl2 IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlciI+JysnPGlucHV0IGlkPTNE InRleHQiIHR5PQpwZT0zRCJ0ZXh0IiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlci10ZXh0Ii8+Jysn PGRpdiBpZD0zRCJzbGlkZXIiIGNsYXNzPTNEInU9CmktZm9ybS1zbGlkZXItZWxlbWVudCIvPicr IjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1vcD0KdGlvbnMi LFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tib25lLlZpZXcuZXh0ZW5k KHtpbml0aWFsaXplPQo6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zRGVmYXVsdD0zRHt2aXNpYmxl OiEwLGRhdGE6W10saWQ6ZS51dWlkKCksZXJyb3JfdGU9Cnh0OiJObyBkYXRhIGF2YWlsYWJsZS4i LHdhaXRfdGV4dDoiUGxlYXNlIHdhaXQuLi4ifSx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKD0KdCx0 aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQoIjxkaXYvPiIpLHRoaXMuJG1lc3Nh Z2U9M0QkKCI8ZGl2Lz4iPQopLHRoaXMuJG9wdGlvbnM9M0QkKHRoaXMuX3RlbXBsYXRlKHQpKSx0 aGlzLiRlbC5hcHBlbmQodGhpcy4kbWVzc2FnZSksdGhpcy49CiRlbC5hcHBlbmQodGhpcy4kb3B0 aW9ucyksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuJGVsLmhpZGUoKSx0aGlzLnVwZGF0ZT0K KHRoaXMub3B0aW9ucy5kYXRhKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0 aGlzLnZhbHVlKHRoaXMub3B0PQppb25zLnZhbHVlKTt2YXIgbj0zRHRoaXM7dGhpcy5vbigiY2hh bmdlIixmdW5jdGlvbigpe24uX2NoYW5nZSgpfSl9LHVwZGF0ZTo9CmZ1bmN0aW9uKGUpe3ZhciB0 PTNEdGhpcy5fZ2V0VmFsdWUoKTt0aGlzLiRvcHRpb25zLmVtcHR5KCk7aWYodGhpcy5fdGVtcGxh dD0KZU9wdGlvbnMpdGhpcy4kb3B0aW9ucy5hcHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb25zKGUp KTtlbHNlIGZvcih2YXIgbiBpbiBlPQope3ZhciByPTNEJCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihl W25dKSk7ci5hZGRDbGFzcygidWktb3B0aW9uIiksdGhpcy4kb3B0aW89Cm5zLmFwcGVuZChyKX12 YXIgaT0zRHRoaXM7dGhpcy4kZWwuZmluZCgiaW5wdXQiKS5vbigiY2hhbmdlIixmdW5jdGlvbigp e2kudj0KYWx1ZShpLl9nZXRWYWx1ZSgpKSxpLl9jaGFuZ2UoKX0pLHRoaXMuX3JlZnJlc2goKSx0 aGlzLnZhbHVlKHQpfSx2YWx1ZTpmdW5jPQp0aW9uKGUpe2lmKGUhPTNEPTNEdW5kZWZpbmVkKXtl IGluc3RhbmNlb2YgQXJyYXl8fChlPTNEW2VdKSx0aGlzLiRlbC5maW5kKCI9CmlucHV0IikucHJv cCgiY2hlY2tlZCIsITEpO2Zvcih2YXIgdCBpbiBlKXRoaXMuJGVsLmZpbmQoJ2lucHV0W3ZhbHVl PTNEIicrZT0KW3RdKyciXScpLmZpcnN0KCkucHJvcCgiY2hlY2tlZCIsITApfXJldHVybiB0aGlz Ll9nZXRWYWx1ZSgpfSxleGlzdHM6ZnVuY3RpPQpvbihlKXtpZihlIT0zRD0zRHVuZGVmaW5lZCl7 ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRFtlXSk7Zm9yKHZhciB0IGluIGUpaWY9Cih0aGlzLiRl bC5maW5kKCdpbnB1dFt2YWx1ZT0zRCInK2VbdF0rJyJdJykubGVuZ3RoPjApcmV0dXJuITB9cmV0 dXJuITF9LGZpcj0Kc3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJGVsLmZpbmQoImlucHV0Iik7 cmV0dXJuIGUubGVuZ3RoPjA/ZS52YWwoKTp1bmRlPQpmaW5lZH0sdmFsaWRhdGU6ZnVuY3Rpb24o KXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlzLnZhbHVlKCkpfSx3YWl0OmZ1bmN0aW9uKCk9Cnt0aGlz Ll9zaXplKCk9M0Q9M0QwJiYodGhpcy5fbWVzc2FnZVNob3codGhpcy5vcHRpb25zLndhaXRfdGV4 dCwiaW5mbyIpLHRoaT0Kcy4kb3B0aW9ucy5oaWRlKCkpfSx1bndhaXQ6ZnVuY3Rpb24oKXt0aGlz Ll9tZXNzYWdlSGlkZSgpLHRoaXMuX3JlZnJlc2goKX0sPQpfY2hhbmdlOmZ1bmN0aW9uKCl7dGhp cy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UodGhpcy5fZ2V0VmE9Cmx1 ZSgpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwPyh0aGlzLl9tZXNz YWdlU2hvdyh0aGlzLm9wdD0KaW9ucy5lcnJvcl90ZXh0LCJkYW5nZXIiKSx0aGlzLiRvcHRpb25z LmhpZGUoKSk6KHRoaXMuX21lc3NhZ2VIaWRlKCksdGhpcy4kPQpvcHRpb25zLmNzcygiZGlzcGxh eSIsImlubGluZS1ibG9jayIpKX0sX2dldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLiQ9 CmVsLmZpbmQoIjpjaGVja2VkIik7aWYoZS5sZW5ndGg9M0Q9M0QwKXJldHVybiJudWxsIjtpZih0 aGlzLm9wdGlvbnMubXVsdGlwbD0KZSl7dmFyIHQ9M0RbXTtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9u KCl7dC5wdXNoKCQodGhpcykudmFsKCkpfSksdH1yZXR1cm4gZS52PQphbCgpfSxfc2l6ZTpmdW5j dGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudWktb3B0aW9uIikubGVuZ3RofSxfbWVzc2Fn ZVM9CmhvdzpmdW5jdGlvbihlLHQpe3RoaXMuJG1lc3NhZ2Uuc2hvdygpLHRoaXMuJG1lc3NhZ2Uu cmVtb3ZlQ2xhc3MoKSx0aGlzLiRtZT0Kc3NhZ2UuYWRkQ2xhc3MoInVpLW1lc3NhZ2UgYWxlcnQg YWxlcnQtIit0KSx0aGlzLiRtZXNzYWdlLmh0bWwoZSl9LF9tZXNzYWdlPQpIaWRlOmZ1bmN0aW9u KCl7dGhpcy4kbWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2 IGNsYXM9CnM9M0QidWktb3B0aW9ucyIvPid9fSksbj0zRHt9O24uVmlldz0zRHQuZXh0ZW5kKHtp bml0aWFsaXplOmZ1bmN0aW9uKGUpe3QucD0Kcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMs ZSl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48PQppbnB1dCB0eXBl PTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52YWx1 ZSsnIi8+Jys9CmUubGFiZWwrIjxicj4iKyI8L2Rpdj4ifX0pO3ZhciByPTNEe307ci5WaWV3PTNE dC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpbz0KbihlKXtlLm11bHRpcGxlPTNEITAsdC5wcm90 b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1wbGF0ZU9wdGlvbjpmPQp1bmN0aW9u KGUpe3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEImNoZWNrYm94IiBuYW1lPTNEIicrdGhpcy5v cHRpb25zLmlkKyc9CiIgdmFsdWU9M0QiJytlLnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4iKyI8 L2Rpdj4ifX0pO3ZhciBpPTNEe307cmV0dXJuIGkuVj0KaWV3PTNEdC5leHRlbmQoe2luaXRpYWxp emU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSl9PQosdmFs dWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kZWwuZmluZCgi aW5wdXQiKS5wcm9wKCI9CmNoZWNrZWQiLCExKSx0aGlzLiRlbC5maW5kKCJsYWJlbCIpLnJlbW92 ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbC5maW5kKCdbdj0KYWx1ZT0zRCInK2UrJyJdJykucHJv cCgiY2hlY2tlZCIsITApLmNsb3Nlc3QoImxhYmVsIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSx0PQpo aXMuX2dldFZhbHVlKCl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGFi ZWwgY2xhc3M9M0QiYnRuIGI9CnRuLWRlZmF1bHQiPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNEJzxp IGNsYXNzPTNEImZhICcrZS5pY29uKyciLz4nKSx0Kz0zRCc8aT0KbnB1dCB0eXBlPTNEInJhZGlv IiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIHZhbHVlPTNEIicrZS52YWx1ZSsnIj4nK2Uu PQpsYWJlbCsiPC9sYWJlbD4iLHR9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNs YXNzPTNEImJ0bi1ncm91cCB1aS09CnJhZGlvYnV0dG9uIiBkYXRhLXRvZ2dsZT0zRCJidXR0b25z Ii8+J319KSx7QmFzZTp0LFJhZGlvOm4sUmFkaW9CdXR0b246aSxDaD0KZWNrYm94OnJ9fSksZGVm aW5lKCJtdmMvdWkvdWktZHJpbGxkb3duIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW9wdGlv bnMiPQpdLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0LkJhc2UuZXh0ZW5kKHtpbml0aWFsaXplOmZ1 bmN0aW9uKGUpe3RoaXMuZGlzcGxheT0KPTNEZS5kaXNwbGF5fHwiY2hlY2tib3giLGUubXVsdGlw bGU9M0R0aGlzLmRpc3BsYXk9M0Q9M0QiY2hlY2tib3giLHQuQmFzZS5wPQpyb3RvdHlwZS5pbml0 aWFsaXplLmNhbGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0aW9uKGUsdCxuKXtyZXR1 cm4nPGQ9Cml2PjxpbnB1dCBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIGNsYXNzPTNEInVp LW9wdGlvbiIgdHlwZT0zRCInK3RoaXMuZD0KaXNwbGF5KyciIHZhbHVlPTNEIicrdCsnIj4nK2Ur IjxkaXYvPiJ9LF90ZW1wbGF0ZU9wdGlvbnM6ZnVuY3Rpb24oZSl7ZnVuY3RpPQpvbiBuKGUsdCl7 ZnVuY3Rpb24gbihuKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUucmVtb3ZlQ2xhc3MoInRvZ2dsZS1l eHBhbmQiKSw9CmUuYWRkQ2xhc3MoInRvZ2dsZSIpLGUuaXNfZXhwYW5kZWQ9M0QhMCk6KHQuaGlk ZSgpLGUucmVtb3ZlQ2xhc3MoInRvZ2dsZSIpLD0KZS5hZGRDbGFzcygidG9nZ2xlLWV4cGFuZCIp LGUuaXNfZXhwYW5kZWQ9M0QhMSl9ZS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bighPQplLmlzX2V4 cGFuZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKXtmb3IoaSBpbiBzKXt2YXIgbz0zRHNbaV0sdT0zRG8u b3B0aW9ucy5sZW49Cmd0aD4wLGE9M0QkKCI8ZGl2Lz4iKTtpZih1KXt2YXIgZj0zRCQoJzxzcGFu IGNsYXNzPTNEInVpLWRyaWxsZG93bi1idXR0b24gZj0Kb3JtLXRvZ2dsZSBpY29uLWJ1dHRvbiB0 b2dnbGUtZXhwYW5kIiBzdHlsZT0zRCJwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogMnB4PQo7Ii8+ JyksbD0zRCQoIjxkaXYvPiIpO2wuYXBwZW5kKGYpLGwuYXBwZW5kKHQuX3RlbXBsYXRlT3B0aW9u KG8ubmFtZSxvLnZhbHU9CmUpKSxhLmFwcGVuZChsKTt2YXIgYz0zRCQoJzxkaXYgc3R5bGU9M0Qi ZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IDI1cHg7Ij0KLz4nKTtyKGMsby5vcHRpb25zKSxh LmFwcGVuZChjKSxuKGYsYyl9ZWxzZSBhLmFwcGVuZCh0Ll90ZW1wbGF0ZU9wdGlvbihvLm5hPQpt ZSxvLnZhbHVlKSk7ZS5hcHBlbmQoYSl9fXZhciB0PTNEdGhpcyxzPTNEJCgiPGRpdi8+Iik7cmV0 dXJuIHIocyxlKSxzfSxfdGU9Cm1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFzcz0z RCJ1aS1vcHRpb25zIGRyaWxsZG93bi1jb250YWluZXIiIGlkPQo9M0QiJytlLmlkKyciLz4nfX0p O3JldHVybntWaWV3Om59fSksZGVmaW5lKCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLFsidXRpbHM9 Ci91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9u c0RlZmF1bHQ6e2lkOiIiLHRpdD0KbGU6IiIsZmxvYXRpbmc6InJpZ2h0IixpY29uOm51bGwsb25j bGljazpudWxsLGNsczoidWktYnV0dG9uLWljb24gdWktYnV0dG9uPQotbWVudSIsdG9vbHRpcDoi Iix0YXJnZXQ6IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHZpc2libGU6ITAsdGFnOiIifSwkbWVu dTo9Cm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQs dGhpcy5vcHRpb25zRGVmYXVsdCksdD0KaGlzLnNldEVsZW1lbnQoJCh0aGlzLl90ZW1wbGF0ZSh0 aGlzLm9wdGlvbnMpKSk7dmFyIG49M0QkKHRoaXMuZWwpLmZpbmQoIi5yPQpvb3QiKSxyPTNEdGhp cztuLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXAiKS5oaWRlKCksZS5wcmV2ZW50 RGVmYXU9Cmx0KCksci5vcHRpb25zLm9uY2xpY2smJnIub3B0aW9ucy5vbmNsaWNrKCl9KSx0aGlz Lm9wdGlvbnMudmlzaWJsZXx8dGhpcy5oaT0KZGUoKSxuLnRvb2x0aXAoe3RpdGxlOnQudG9vbHRp cCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sc2hvdzpmdW5jdGlvbigpeyQodGhpPQpzLmVsKS5zaG93 KCl9LGhpZGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUoKX0sYWRkTWVudTpmdW5jdGlvbih0 KXt2YXIgbj0KPTNEe3RpdGxlOiIiLHRhcmdldDoiIixocmVmOiIiLG9uY2xpY2s6bnVsbCxkaXZp ZGVyOiExLGljb246bnVsbCxjbHM6ImJ1dHRvPQpuLW1lbnUgYnRuLWdyb3VwIn07bj0zRGUubWVy Z2UodCxuKSx0aGlzLiRtZW51fHwoJCh0aGlzLmVsKS5hcHBlbmQodGhpcy5fdGU9Cm1wbGF0ZU1l bnUoKSksdGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmluZCgiLm1lbnUiKSk7dmFyIHI9M0QkKHRo aXMuX3RlbXBsYT0KdGVNZW51SXRlbShuKSk7ci5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe2UucHJl dmVudERlZmF1bHQoKSxuLm9uY2xpY2smJm4ub25jPQpsaWNrKCl9KSx0aGlzLiRtZW51LmFwcGVu ZChyKSxuLmRpdmlkZXImJnRoaXMuJG1lbnUuYXBwZW5kKCQodGhpcy5fdGVtcGxhdGU9CkRpdmlk ZXIoKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8bGk+PGEgY2xh c3M9M0QiZHJvcGRvdz0Kbi1pdGVtIiBocmVmPTNEIicrZS5ocmVmKyciIHRhcmdldD0zRCInK2Uu dGFyZ2V0KyciPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNEPQonPGkgY2xhc3M9M0QiZmEgJytlLmlj b24rJyI+PC9pPicpLHQrPTNEIiAiK2UudGl0bGUrIjwvYT4iKyI8L2xpPiIsdH0sX3RlbXA9Cmxh dGVNZW51OmZ1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJtZW51IGRyb3Bkb3duLW1lbnUg cHVsbC1yaWdodCIgcm9sZT0KPTNEIm1lbnUiPjwvdWw+J30sX3RlbXBsYXRlRGl2aWRlcjpmdW5j dGlvbigpe3JldHVybic8bGkgY2xhc3M9M0QiZGl2aWRlciI+PQo8L2xpPid9LF90ZW1wbGF0ZTpm dW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpdGxlP3Q9M0Qid2lkdGg6IGF1dG87Ijo9 Cm49M0QibWFyZ2luOiAwcHg7Ijt2YXIgcj0zRCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBzdHlsZT0z RCJmbG9hdDogJytlLmZsb2F0aT0KbmcrIjsgIit0KyciIGNsYXNzPTNEImRyb3Bkb3duICcrZS5j bHMrJyI+JysnPGRpdiBjbGFzcz0zRCJyb290IGJ1dHRvbiBkcm9wPQpkb3duLXRvZ2dsZSIgZGF0 YS10b2dnbGU9M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisnIj4nKyc8aSBjbGFzcz0zRCJpY29u IGY9CmEgJytlLmljb24rJyIvPic7cmV0dXJuIGUudGl0bGUmJihyKz0zRCcmbmJzcDs8c3BhbiBj bGFzcz0zRCJ0aXRsZSI+JytlLnRpdD0KbGUrIjwvc3Bhbj4iKSxyKz0zRCI8L2Rpdj48L2Rpdj4i LHJ9fSl9KSxkZWZpbmUoIm12Yy91aS91aS1taXNjIixbInV0aWxzL3V0PQppbHMiLCJtdmMvdWkv dWktc2VsZWN0LWRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVyIiwibXZjL3VpL3VpLW9wdGlvbnMi LCJtdmM9Ci91aS91aS1kcmlsbGRvd24iLCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLCJtdmMvdWkv dWktbW9kYWwiXSxmdW5jdGlvbihlLHQsbj0KLHIsaSxzLG8pe3ZhciB1PTNEQmFja2JvbmUuVmll dy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont1cmw6IiIsY2xzOiIifSxpbml0PQppYWxpemU6ZnVu Y3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRo aXMuc2V0RWw9CmVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpfSxfdGVtcGxhdGU6 ZnVuY3Rpb24oZSl7cmV0dXJuJzxpbWcgY2xhcz0Kcz0zRCJ1aS1pbWFnZSAnK2UuY2xzKyciIHNy Yz0zRCInK2UudXJsKyciLz4nfX0pLGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7PQpvcHRpb25z RGVmYXVsdDp7dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0 aW9ucz0zRGUubWU9CnJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0 aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKX0sdD0KaXRsZTpmdW5jdGlvbihlKXt0aGlzLiRl bC5odG1sKGUpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuJzxsYWJlbCBjbGFzPQpzPTNE InVpLWxhYmVsICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2xhYmVsPiJ9LHZhbHVlOmZ1bmN0aW9u KCl7cmV0dXJuIG9wdGk9Cm9ucy50aXRsZX19KSxmPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29w dGlvbnNEZWZhdWx0OntmbG9hdGluZzoicmlnaHQiLGljbz0KbjoiIix0b29sdGlwOiIiLHBsYWNl bWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7PQp0 aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXQ9CmUodGhpcy5vcHRpb25zKSksJCh0aGlzLmVsKS50b29sdGlwKHt0 aXRsZTp0LnRvb2x0aXAscGxhY2VtZW50OiJib3R0b20ifSl9LD0KX3RlbXBsYXRlOmZ1bmN0aW9u KGUpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEImZhICcrZS5pY29uKyciIGNsYXNzPTNEInVp PQotaWNvbiIvPiZuYnNwOycrZS50aXRsZSsiPC9kaXY+In19KSxsPTNEQmFja2JvbmUuVmlldy5l eHRlbmQoe29wdGlvbnNEZWZhdWw9CnQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0 IixjbHM6InVpLWJ1dHRvbiBidG4gYnRuLWRlZmF1bHQiLGljb246Ij0KIn0saW5pdGlhbGl6ZTpm dW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCks dGhpPQpzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksJCh0aGlzLmVs KS5vbigiY2xpY2siLGZ1bmN0aW9uKCk9CnskKCIudG9vbHRpcCIpLmhpZGUoKSx0Lm9uY2xpY2sm JnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0Lj0KdG9vbHRpcCxwbGFj ZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxidXR0b24g aWQ9M0QiPQonK2UuaWQrJyIgdHlwZT0zRCJzdWJtaXQiIHN0eWxlPTNEImZsb2F0OiAnK2UuZmxv YXRpbmcrJzsiIHR5cGU9M0QiYnV0dG9uIiA9CmNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1cm4g ZS5pY29uJiYodCs9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNvbisnIj0KPjwvaT4mbmJz cDsnKSx0Kz0zRGUudGl0bGUrIjwvYnV0dG9uPiIsdH19KSxjPTNEQmFja2JvbmUuVmlldy5leHRl bmQoe29wdGlvPQpuc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0Iixj bHM6InVpLWJ1dHRvbi1pY29uIixpY29uOiIiLHQ9Cm9vbHRpcDoiIixvbmNsaWNrOm51bGx9LGlu aXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaT0Kcy5vcHRp b25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykp LHRoaXMuJGJ1dHRvPQpuPTNEdGhpcy4kZWwuZmluZCgiLmJ1dHRvbiIpO3ZhciBuPTNEdGhpczsk KHRoaXMuZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXs9CiQoIi50b29sdGlwIikuaGlkZSgpLHQu b25jbGljayYmIW4uZGlzYWJsZWQmJnQub25jbGljaygpfSksJCh0aGlzLmVsKS50b29sdD0KaXAo e3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sZGlzYWJsZTpmdW5jdGlvbigp e3RoaXMuJGJ1dHRvbi5hPQpkZENsYXNzKCJkaXNhYmxlZCIpLHRoaXMuZGlzYWJsZWQ9M0QhMH0s ZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9uLnJlbW89CnZlQ2xhc3MoImRpc2FibGVkIiks dGhpcy5kaXNhYmxlZD0zRCExfSxzZXRJY29uOmZ1bmN0aW9uKGUpe3RoaXMuJCgiaSIpLnJlbT0K b3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNzKGUpLHRoaXMub3B0aW9ucy5pY29u PTNEZX0sX3RlbXBsYXRlOmZ1PQpuY3Rpb24oZSl7dmFyIHQ9M0QiIjtlLnRpdGxlJiYodD0zRCJ3 aWR0aDogYXV0bzsiKTt2YXIgbj0zRCc8ZGl2IGlkPTNEIicrZS49CmlkKyciIHN0eWxlPTNEImZs b2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1cm4g ZT0KLnRpdGxlP24rPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9uIj48aSBjbGFzcz0zRCJpY29uIGZh ICcrZS5pY29uKyciLz4mbmJzcDsnPQorJzxzcGFuIGNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUr Ijwvc3Bhbj4iKyI8L2Rpdj4iOm4rPTNEJzxpIGNsYXNzPTNEImljb249CiBmYSAnK2UuaWNvbisn Ii8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25z RGVmYT0KdWx0Ont0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5v cHRpb25zPTNEZS5tZXJnZSh0LHRoaXMuPQpvcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50 KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLCQodGhpcy5lbCkub249CigiY2xpY2siLHQu b25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48YSBocmVmPTNEImph dmFzY3JpcD0KdDp2b2lkKDApIiBjbGFzcz0zRCJ1aS1hbmNob3IgJytlLmNscysnIj4nK2UudGl0 bGUrIjwvYT48L2Rpdj4ifX0pLHA9M0RCYWNrPQpib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVm YXVsdDp7bWVzc2FnZTpudWxsLHN0YXR1czoiaW5mbyIscGVyc2lzdGVudDohMX09Cixpbml0aWFs aXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZh dWx0KSx0aGlzLj0Kc2V0RWxlbWVudCgiPGRpdj48L2Rpdj4iKSx0aGlzLm9wdGlvbnMubWVzc2Fn ZSYmdGhpcy51cGRhdGUodGhpcy5vcHRpb25zKX0sPQp1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5v cHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpO2lmKHQubWVzc2E9CmdlIT0z RCIiKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpLHRoaXMuJGVs LmZpbmQoIi5hbGVydD0KIikuYXBwZW5kKHQubWVzc2FnZSksdGhpcy4kZWwuZmFkZUluKCksdGhp cy50aW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoPQppcy50aW1lb3V0KTtpZighdC5wZXJz aXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpcy50aW1lb3V0PTNEd2luZG93LnNldFRpbWVvdXQ9Cihm dW5jdGlvbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVsLmZhZGVPdXQoKTpuLiRlbC5oaWRl KCl9LDNlMyl9fWVsc2UgdD0KaGlzLiRlbC5mYWRlT3V0KCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihl KXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1tZXNzYWdlIGFsPQplcnQgYWxlcnQtJytlLnN0YXR1 cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0OntvbmM9 CmxpY2s6bnVsbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0 aW9ucz0zRGUubWVyZ2UodCx0aD0KaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0 aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt2YXIgbj0zRHRoPQppczt0aGlzLm9wdGlvbnMu b25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsZnVuY3Rpb24oZSl7dmFyIHQ9M0RuLiRlbC5m aW49CmQoIiNzZWFyY2giKTtuLm9wdGlvbnMub25jbGljayh0LnZhbCgpKX0pfSxfdGVtcGxhdGU6 ZnVuY3Rpb24oZSl7cmV0dXJuJzxkaT0KdiBjbGFzcz0zRCJ1aS1zZWFyY2giPjxmb3JtIG9uc3Vi bWl0PTNEInJldHVybiBmYWxzZTsiPjxpbnB1dCBpZD0zRCJzZWFyY2giPQogY2xhc3M9M0QiZm9y bS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5hbWU9M0Qic2VhcmNoIiBwbGFjZWhv bGRlcj0KPTNEIlNlYXJjaC4uLiIgdmFsdWU9M0QiJytlLnNlYXJjaHdvcmQrJyI+JysnPGJ1dHRv biB0eXBlPTNEInN1Ym1pdCIgY2xhc3M9Cj0zRCJidG4gc2VhcmNoLWJ0biI+JysnPGkgY2xhc3M9 M0QiZmEgZmEtc2VhcmNoIj48L2k+JysiPC9idXR0b24+IisiPC9mb3JtPj0KIisiPC9kaXY+In19 KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0eXBlOiJ0ZXh0Iixw bGFjZWhvPQpsZGVyOiIiLGRpc2FibGVkOiExLHZpc2libGU6ITAsY2xzOiIiLGFyZWE6ITF9LGlu aXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy49Cm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRp b25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaT0Kcy5vcHRpb25z KSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcy52YWx1ZSh0aGlzLm9w dGlvbnMudmFsPQp1ZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLiRlbC5wcm9wKCJkaXNh YmxlZCIsITApLHRoaXMub3B0aW9ucy52aXNpYmw9CmV8fHRoaXMuJGVsLmhpZGUoKTt2YXIgbj0z RHRoaXM7dGhpcy4kZWwub24oImlucHV0IixmdW5jdGlvbigpe24ub3B0aW9ucy5vbj0KY2hhbmdl JiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9LHZhbHVlOmZ1bmN0aW9uKGUpe3Jl dHVybiBlIT0zRD0KPTNEdW5kZWZpbmVkJiZ0aGlzLiRlbC52YWwoZSksdGhpcy4kZWwudmFsKCl9 LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gPQplLmFyZWE/Jzx0ZXh0YXJlYSBpZD0zRCIn K2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dGFyZWEgJytlLmNscysnIj48L3RleHRhcmU9CmE+Jzon PGlucHV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50eXBlKyciIHZhbHVlPTNEIicrZS52 YWx1ZSsnIiBwbGFjZT0KaG9sZGVyPTNEIicrZS5wbGFjZWhvbGRlcisnIiBjbGFzcz0zRCJ1aS1p bnB1dCAnK2UuY2xzKyciPid9fSksbT0zREJhY2tib25lPQouVmlldy5leHRlbmQoe2luaXRpYWxp emU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPTNEZSx0aGlzLnNldEVsZW1lbnQodGhpcy49Cl90 ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVk JiZ0aGlzLnZhbHVlKHRoaT0Kcy5vcHRpb25zLnZhbHVlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0 dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiQoImhpZGRlPQpuIikudmFsKGUpLHRoaXMuJCgi aGlkZGVuIikudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCc8ZGl2IGlkPQo9 M0QiJytlLmlkKyciID4nO3JldHVybiBlLmluZm8mJih0Kz0zRCI8bGFiZWw+IitlLmluZm8rIjwv bGFiZWw+IiksdCs9M0QnPGg9CmlkZGVuIHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+JysiPC9kaXY+ Iix0fX0pO3JldHVybntBbmNob3I6aCxCdXR0b246bCxCdXR0bz0Kbkljb246YyxCdXR0b25NZW51 OnMsSWNvbjpmLEltYWdlOnUsSW5wdXQ6dixMYWJlbDphLE1lc3NhZ2U6cCxNb2RhbDpvLFJhZGlv PQpCdXR0b246ci5SYWRpb0J1dHRvbixDaGVja2JveDpyLkNoZWNrYm94LFJhZGlvOnIuUmFkaW8s U2VhcmNoYm94OmQsU2VsZWN0OnQ9CixIaWRkZW46bSxTbGlkZXI6bixEcmlsbGRvd246aX19KSxk ZWZpbmUoInBsdWdpbi9saWJyYXJ5L2pvYnMiLFsidXRpbHMvdXRpbD0KcyJdLGZ1bmN0aW9uKGUp e3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxuKXt0 aGlzPQouYXBwPTNEdCx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKG4sdGhpcy5vcHRpb25zRGVmYXVs dCl9LHJlcXVlc3Q6ZnVuY3Rpb24oZSw9CnQsbixyLGkpe3ZhciBzPTNEdGhpcztlLnN0YXRlKCJ3 YWl0IiwiUmVxdWVzdGluZyBqb2IgcmVzdWx0cy4uLiIpO3ZhciBvPTNEZT0KLmdldCgiZGF0YXNl dF9pZF9qb2IiKTtvIT0zRCIiP3MuX3dhaXQoZSxyLGkpOnMuX3N1Ym1pdChlLHQsbixyLGkpfSxj bGVhbnVwPQo6ZnVuY3Rpb24odCl7dmFyIG49M0R0aGlzLHI9M0R0LmdldCgiZGF0YXNldF9pZF9q b2IiKTtyIT0zRCIiJiYoZS5yZXF1ZXN0KHs9CnR5cGU6IlBVVCIsdXJsOmNvbmZpZy5yb290KyJh cGkvaGlzdG9yaWVzL25vbmUvY29udGVudHMvIityLGRhdGE6e2RlbGV0ZWQ6IT0KMH0sc3VjY2Vz czpmdW5jdGlvbigpe24uX3JlZnJlc2hIZGFzKCl9fSksdC5zZXQoImRhdGFzZXRfaWRfam9iIiwi IikpfSxfc3ViPQptaXQ6ZnVuY3Rpb24odCxuLHIsaSxzKXt2YXIgbz0zRHRoaXMsdT0zRHQuaWQs YT0zRHQuZ2V0KCJ0eXBlIiksZj0zRHQuZGVmaW49Cml0aW9uO2RhdGE9M0R7dG9vbF9pZDoiY2hh cnRzIixpbnB1dHM6e2lucHV0OntpZDp0LmdldCgiZGF0YXNldF9pZCIpLHNyYzoiaD0KZGEifSxt b2R1bGU6Zi5leGVjdXRlLGNvbHVtbnM6cixzZXR0aW5nczpufX0sdC5zdGF0ZSgid2FpdCIsIlNl bmRpbmcgam9iIHJlPQpxdWVzdC4uLiIpLGUucmVxdWVzdCh7dHlwZToiUE9TVCIsdXJsOmNvbmZp Zy5yb290KyJhcGkvdG9vbHMiLGRhdGE6ZGF0YSxzdWM9CmNlc3M6ZnVuY3Rpb24oZSl7aWYoIWUu b3V0cHV0c3x8ZS5vdXRwdXRzLmxlbmd0aD0zRD0zRDApdC5zdGF0ZSgiZmFpbGVkIiwiSj0Kb2Ig c3VibWlzc2lvbiBmYWlsZWQuIE5vIHJlc3BvbnNlLiIpLHMmJnMoKTtlbHNle28uX3JlZnJlc2hI ZGFzKCk7dmFyIG49M0RlPQoub3V0cHV0c1swXTt0LnN0YXRlKCJ3YWl0IiwiWW91ciBqb2IgaGFz IGJlZW4gcXVldWVkLiBZb3UgbWF5IGNsb3NlIHRoZSBicm89CndzZXIgd2luZG93LiBUaGUgam9i IHdpbGwgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLiIpLHQuc2V0KCJkYXRhc2V0X2lkX2pvYiIsbj0K LmlkKSxvLmFwcC5zdG9yYWdlLnNhdmUoKSxvLl93YWl0KHQsaSxzKX19LGVycm9yOmZ1bmN0aW9u KGUpe3ZhciBuPTNEIiI7ZSYmPQplLm1lc3NhZ2UmJmUubWVzc2FnZS5kYXRhJiZlLm1lc3NhZ2Uu ZGF0YS5pbnB1dCYmKG49M0RlLm1lc3NhZ2UuZGF0YS5pbnB1dCs9CiIuIiksdC5zdGF0ZSgiZmFp bGVkIiwiVGhpcyB2aXN1YWxpemF0aW9uIHJlcXVpcmVzIHRoZSAnY2hhcnRzJyB0b29sLiBQbGVh cz0KZSBtYWtlIHN1cmUgaXQgaXMgaW5zdGFsbGVkLiAiK24pLHMmJnMoKX19KX0sX3dhaXQ6ZnVu Y3Rpb24odCxuLHIpe3ZhciBpPTNEPQp0aGlzO2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Y29u ZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3QuZ2V0KCJkYXRhc2V0X2k9CmRfam9iIiksZGF0YTp7 fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe3ZhciBzPTNEITE7c3dpdGNoKGUuc3RhdGUpe2Nhc2Uib2si OnQucz0KdGF0ZSgid2FpdCIsIkpvYiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Li4uIiksbiYmbihl KSxzPTNEITA7YnJlYWs7Y2FzZSJlcnJvPQpyIjp0LnN0YXRlKCJmYWlsZWQiLCJKb2IgaGFzIGZh aWxlZC4gUGxlYXNlIGNoZWNrIHRoZSBoaXN0b3J5IGZvciBkZXRhaWxzLiI9CiksciYmcihlKSxz PTNEITA7YnJlYWs7Y2FzZSJydW5uaW5nIjp0LnN0YXRlKCJ3YWl0IiwiWW91ciBqb2IgaXMgcnVu bmluZy4gWT0Kb3UgbWF5IGNsb3NlIHRoZSBicm93c2VyIHdpbmRvdy4gVGhlIGpvYiB3aWxsIGNv bnRpbnVlIGluIHRoZSBiYWNrZ3JvdW5kLiIpPQp9c3x8c2V0VGltZW91dChmdW5jdGlvbigpe2ku X3dhaXQodCxuLHIpfSxpLmFwcC5jb25maWcuZ2V0KCJxdWVyeV90aW1lb3V0Iik9Cil9fSl9LF9y ZWZyZXNoSGRhczpmdW5jdGlvbigpe0dhbGF4eSYmR2FsYXh5LmN1cnJIaXN0b3J5UGFuZWwmJkdh bGF4eS5jdXJySD0KaXN0b3J5UGFuZWwucmVmcmVzaENvbnRlbnRzKCl9fSl9KSxkZWZpbmUoInBs dWdpbi9saWJyYXJ5L2RhdGFzZXRzIixbInV0aWxzPQovdXRpbHMiXSxmdW5jdGlvbihlKXtyZXR1 cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe2xpc3Q6e30sY2FjaGU6e30saW49Cml0aWFs aXplOmZ1bmN0aW9uKHQsbil7dGhpcy5hcHA9M0R0LHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uobix0 aGlzLm9wdGlvbnNEZT0KZmF1bHQpfSxyZXF1ZXN0OmZ1bmN0aW9uKGUpe2UuZ3JvdXBzP3RoaXMu X2dldF9ibG9ja3MoZSk6dGhpcy5fZ2V0X2RhdGFzZXQoPQplLmlkLGUuc3VjY2VzcyxlLmVycm9y KX0sX2dldF9ibG9ja3M6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYyhpKXtsLl9nZXQoaSxmdW49CmN0 aW9uKCl7dmFyIHM9M0QhMTtmb3IodmFyIG8gaW4gZS5ncm91cHMpe2Rlc3RpbmF0aW9uX2dyb3Vw PTNEZS5ncm91cHNbb10scz0Kb3VyY2VfZ3JvdXA9M0RpLmdyb3Vwc1tvXSxkZXN0aW5hdGlvbl9n cm91cC52YWx1ZXN8fChkZXN0aW5hdGlvbl9ncm91cC52YWx1PQplcz0zRFtdKSxkZXN0aW5hdGlv bl9ncm91cC52YWx1ZXM9M0RkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXMuY29uY2F0KHNvdXJjZV89 Cmdyb3VwLnZhbHVlcyk7aWYoc291cmNlX2dyb3VwLnZhbHVlcy5sZW5ndGg9M0Q9M0QwKXtzPTNE ITA7YnJlYWt9fWlmKCsrZjx1Jj0KJiFzKXtuJiZuKHBhcnNlSW50KGYvdSoxMDApKTt2YXIgbD0z RGkuc3RhcnQrcjtpPTNEJC5leHRlbmQoITAsYSx7c3RhcnQ6bH0pPQosYyhpKX1lbHNlIHQoKX0p fXZhciB0PTNEZS5zdWNjZXNzLG49M0RlLnByb2dyZXNzLHI9M0R0aGlzLmFwcC5jb25maWcuZ2V0 KCI9CnF1ZXJ5X2xpbWl0IiksaT0zRGUuc3RhcnR8fDAscz0zRGkrZS5xdWVyeV9saW1pdHx8aSt0 aGlzLmFwcC5jb25maWcuZ2V0KCJxdT0KZXJ5X2xpbWl0Iiksbz0zRE1hdGguYWJzKHMtaSk7aWYo bzw9M0QwKXtjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBEYXRhc2V0czo6PQpyZXF1ZXN0KCkgLSBJ bnZhbGlkIHF1ZXJ5IHJhbmdlLiIpO3JldHVybn12YXIgdT0zRE1hdGguY2VpbChvL3IpfHwxLGE9 M0QkLmU9Cnh0ZW5kKCEwLHt9LGUpLGY9M0QwLGw9M0R0aGlzLGg9M0QkLmV4dGVuZCghMCxhLHtz dGFydDppfSk7dGhpcy5fZ2V0X2RhdGFzZT0KdChlLmlkLGZ1bmN0aW9uKCl7YyhoKX0pfSxfZ2V0 X2RhdGFzZXQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPTNEdGhpcy5saXN0W3RdPQo7aWYoaSl7bihp KTtyZXR1cm59dmFyIHM9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Y29uZmlnLnJv b3QrImFwaS89CmRhdGFzZXRzLyIrdCxzdWNjZXNzOmZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0YXRl KXtjYXNlImVycm9yIjpyJiZyKGUpO2JyZWFrOz0KZGVmYXVsdDpzLmxpc3RbdF09M0RlLG4oZSl9 fX0pfSxfYmxvY2tfaWQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZCsiXyIrZS5zPQp0YXJ0KyJf IitlLnN0YXJ0K3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0IikrIl8iK3R9LF9nZXQ6 ZnVuY3Rpb24oZSw9CnQpe2Uuc3RhcnQ9M0RlLnN0YXJ0fHwwO3ZhciBuPTNEW10scj0zRHt9LGk9 M0QwO2Zvcih2YXIgcyBpbiBlLmdyb3Vwcyl7dmFyID0Kbz0zRGUuZ3JvdXBzW3NdO2Zvcih2YXIg dSBpbiBvLmNvbHVtbnMpe3ZhciBhPTNEby5jb2x1bW5zW3VdLmluZGV4LGY9M0R0aGlzPQouX2Js b2NrX2lkKGUsYSk7aWYodGhpcy5jYWNoZVtmXXx8YT0zRD0zRD0zRCJhdXRvInx8YT0zRD0zRD0z RCJ6ZXJvIiljb250aW49CnVlOyFyW2FdJiZhIT0zRD0zRHVuZGVmaW5lZCYmKHJbYV09M0RpLG4u cHVzaChhKSxpKyspfX1pZihuLmxlbmd0aD0zRD0zRDApez0KdGhpcy5fZmlsbF9mcm9tX2NhY2hl KGUpLHQoZSk7cmV0dXJufXZhciBsPTNEe2RhdGFzZXRfaWQ6ZS5pZCxzdGFydDplLnN0YXJ0PQos Y29sdW1uczpufSxjPTNEdGhpczt0aGlzLl9mZXRjaChsLGZ1bmN0aW9uKHIpe2Zvcih2YXIgaSBp biByKXt2YXIgcz0zRG5baV09CixvPTNEYy5fYmxvY2tfaWQoZSxzKTtjLmNhY2hlW29dPTNEcltp XX1jLl9maWxsX2Zyb21fY2FjaGUoZSksdChlKX0pfSxfZmlsbD0KX2Zyb21fY2FjaGU6ZnVuY3Rp b24oZSl7dmFyIHQ9M0RlLnN0YXJ0O2NvbnNvbGUuZGVidWcoIkRhdGFzZXRzOjpfZmlsbF9mcm9t PQpfY2FjaGUoKSAtIEZpbGxpbmcgcmVxdWVzdCBmcm9tIGNhY2hlIGF0ICIrdCsiLiIpO3ZhciBu PTNEMDtmb3IodmFyIHIgaW4gZS49Cmdyb3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmb3IodmFy IHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0zRGkuY29sdW1uc1tzXSx1PQo9M0R0aGlzLl9ibG9ja19p ZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2EmJihuPTNETWF0aC5tYXgobixhLmxlbmd0 aCk9Cil9fW49M0Q9M0QwJiZjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZpbGxfZnJvbV9jYWNo ZSgpIC0gUmVhY2hlZCBkYXRhIHJhbj0KZ2UgbGltaXQuIik7Zm9yKHZhciByIGluIGUuZ3JvdXBz KXt2YXIgaT0zRGUuZ3JvdXBzW3JdO2kudmFsdWVzPTNEW107Zm9yKHZhPQpyIGY9M0QwO2Y8bjtm KyspaS52YWx1ZXNbZl09M0R7eDpwYXJzZUludChmKSt0fX1mb3IodmFyIHIgaW4gZS5ncm91cHMp e3ZhciA9Cmk9M0RlLmdyb3Vwc1tyXTtmb3IodmFyIHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0zRGku Y29sdW1uc1tzXTtzd2l0Y2goby5pbmRleD0KKXtjYXNlImF1dG8iOmZvcih2YXIgZj0zRDA7Zjxu O2YrKyl7dmFyIGw9M0RpLnZhbHVlc1tmXTtsW3NdPTNEcGFyc2VJbnQoZikrPQp0fWJyZWFrO2Nh c2UiemVybyI6Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2YXIgbD0zRGkudmFsdWVzW2ZdO2xbc109 M0QwfWJyZWE9Cms7ZGVmYXVsdDp2YXIgdT0zRHRoaXMuX2Jsb2NrX2lkKGUsby5pbmRleCksYT0z RHRoaXMuY2FjaGVbdV07Zm9yKHZhciBmPTNEMD0KO2Y8bjtmKyspe3ZhciBsPTNEaS52YWx1ZXNb Zl0sYz0zRGFbZl07aXNOYU4oYykmJiFvLmlzX2xhYmVsJiYoYz0zRDApLGxbc109Cj0zRGN9fX19 fSxfZmV0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQuc3RhcnQ/dC5zdGFydDowLGk9M0R0aGlz LmFwcC5jb25maT0KZy5nZXQoInF1ZXJ5X2xpbWl0Iikscz0zRDA7dC5jb2x1bW5zJiYocz0zRHQu Y29sdW1ucy5sZW5ndGgsY29uc29sZS5kZWJ1ZygiPQpEYXRhc2V0czo6X2ZldGNoKCkgLSBGZXRj aGluZyAiK3MrIiBjb2x1bW4ocykgYXQgIityKyIuIikpLHM9M0Q9M0QwJiZjb25zb2w9CmUuZGVi dWcoIkRhdGFzZXRzOjpfZmV0Y2goKSAtIE5vIGNvbHVtbnMgcmVxdWVzdGVkIik7dmFyIG89M0Qi Ijtmb3IodmFyIHUgaT0KbiB0LmNvbHVtbnMpbys9M0R0LmNvbHVtbnNbdV0rIiwiO289M0RvLnN1 YnN0cmluZygwLG8ubGVuZ3RoLTEpO3ZhciBhPTNEdGhpPQpzO2UucmVxdWVzdCh7dHlwZToiR0VU Iix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cy8iK3QuZGF0YXNldF9pZCxkYXRhOns9CmRh dGFfdHlwZToicmF3X2RhdGEiLHByb3ZpZGVyOiJkYXRhc2V0LWNvbHVtbiIsbGltaXQ6aSxvZmZz ZXQ6cixpbmRlY2VzOm99LD0Kc3VjY2VzczpmdW5jdGlvbihlKXt2YXIgdD0zRG5ldyBBcnJheShz KTtmb3IodmFyIHI9M0QwO3I8cztyKyspdFtyXT0zRFtdO2ZvPQpyKHZhciByIGluIGUuZGF0YSl7 dmFyIGk9M0RlLmRhdGFbcl07Zm9yKHZhciBvIGluIGkpe3ZhciB1PTNEaVtvXTt1IT0zRD0zRHU9 Cm5kZWZpbmVkJiZ1IT0zRDIxNDc0ODM2NDcmJnRbb10ucHVzaCh1KX19Y29uc29sZS5kZWJ1Zygi RGF0YXNldHM6Ol9mZXRjaCgpID0KLSBGZXRjaGluZyBjb21wbGV0ZS4iKSxuKHQpfX0pfX0pfSks ZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2dyb3VwIixbXSxmdW5jdGlvPQpuKCl7cmV0dXJuIEJhY2ti b25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2tleToiRGF0YSBsYWJlbCIsZGF0ZToiIn0scmVz ZXQ9CjpmdW5jdGlvbigpe3RoaXMuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1bHRz KSx0aGlzLnRyaWdnZXIoInJlc2V0Ij0KLHRoaXMpfX0pfSksZGVmaW5lKCJwbHVnaW4vbW9kZWxz L2dyb3VwcyIsWyJwbHVnaW4vbW9kZWxzL2dyb3VwIl0sZnVuY3Rpb24oPQplKXtyZXR1cm4gQmFj a2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVsOmV9KX0pLGRlZmluZSgicGx1Z2luL21vZGVs cy9jaGE9CnJ0IixbInBsdWdpbi9tb2RlbHMvZ3JvdXBzIl0sZnVuY3Rpb24oZSl7cmV0dXJuIEJh Y2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYT0KdWx0czp7aWQ6bnVsbCx0aXRsZToiIix0eXBlOiIi LGRhdGU6bnVsbCxzdGF0ZToiIixzdGF0ZV9pbmZvOiIiLG1vZGlmaWVkOiExPQosZGF0YXNldF9p ZDoiIixkYXRhc2V0X2lkX2pvYjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLmdyb3Vw cz0zRG5ldyA9CmUsdGhpcy5zZXR0aW5ncz0zRG5ldyBCYWNrYm9uZS5Nb2RlbH0scmVzZXQ6ZnVu Y3Rpb24oKXt0aGlzLmNsZWFyKHtzaWxlbnQ6IT0KMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0aGlz Lmdyb3Vwcy5yZXNldCgpLHRoaXMuc2V0dGluZ3MuY2xlYXIoKSx0aGlzLnRyaWdnPQplcigicmVz ZXQiLHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0LmNsZWFyKHtzaWxlbnQ6 ITB9KS5zZXQodGg9CmlzLmRlZmF1bHRzKSx0LnNldChlLmF0dHJpYnV0ZXMpLHQuc2V0dGluZ3M9 M0RlLnNldHRpbmdzLmNsb25lKCksdC5ncm91cHMucj0KZXNldCgpLGUuZ3JvdXBzLmVhY2goZnVu Y3Rpb24oZSl7dC5ncm91cHMuYWRkKGUuY2xvbmUoKSl9KSx0LnRyaWdnZXIoImNoYW5nPQplIix0 KX0sc3RhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldCgic3RhdGUiLGUpLHRoaXMuc2V0KCJzdGF0 ZV9pbmZvIix0KSx0aGk9CnMudHJpZ2dlcigic2V0OnN0YXRlIiksY29uc29sZS5kZWJ1ZygiQ2hh cnQ6c3RhdGUoKSAtICIrdCsiICgiK2UrIikiKX19KX0pOz0KdmFyIFZpc3VhbGl6YXRpb249M0RC YWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOntjb25maWc6e319LHVybFJvb3Q6ZnVuPQpj dGlvbigpe3ZhciBlPTNEIi9hcGkvdmlzdWFsaXphdGlvbnMiO3JldHVybiB3aW5kb3cuZ2FsYXh5 X2NvbmZpZyYmZ2FsYXh5X2M9Cm9uZmlnLnJvb3Q/Z2FsYXh5X2NvbmZpZy5yb290K2U6ZX0saW5p dGlhbGl6ZTpmdW5jdGlvbihlKXtfLmlzT2JqZWN0KGUuY29uZj0KaWcpJiZfLmlzT2JqZWN0KHRo aXMuZGVmYXVsdHMuY29uZmlnKSYmXy5kZWZhdWx0cyhlLmNvbmZpZyx0aGlzLmRlZmF1bHRzLmNv PQpuZmlnKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfSxfc2V0VXBMaXN0ZW5lcnM6ZnVuY3Rpb24o KXt9LHNldDpmdW5jdGlvbihlLHQ9Cil7aWYoZT0zRD0zRD0zRCJjb25maWciKXt2YXIgbj0zRHRo aXMuZ2V0KCJjb25maWciKTtfLmlzT2JqZWN0KG4pJiYodD0zRF8uZT0KeHRlbmQoXy5jbG9uZShu KSx0KSl9cmV0dXJuIEJhY2tib25lLk1vZGVsLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGUsdCks dGhpPQpzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5nZXQoImlkIil8fCIiO3Jl dHVybiB0aGlzLmdldCgidGl0bGUiKSY9CiYoZSs9M0QiOiIrdGhpcy5nZXQoInRpdGxlIikpLCJW aXN1YWxpemF0aW9uKCIrZSsiKSJ9fSksVmlzdWFsaXphdGlvbkNvbGxlYz0KdGlvbj0zREJhY2ti b25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpWaXN1YWxpemF0aW9uLHVybDpmdW5jdGlvbigp e3JldHVyPQpuIGdhbGF4eV9jb25maWcucm9vdCsiYXBpL3Zpc3VhbGl6YXRpb25zIn0saW5pdGlh bGl6ZTpmdW5jdGlvbihlLHQpe3Q9M0R0fHw9Cnt9fSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0z RHRoaXM7ZT0zRF8ubWFwKGUsZnVuY3Rpb24oZSl7dmFyIHQ9M0RuLmdldChlLj0KaWQpO2lmKCF0 KXJldHVybiBlO3ZhciByPTNEdC50b0pTT04oKTtyZXR1cm4gXy5leHRlbmQocixlKSxyfSksQmFj a2JvbmUuQ29sPQpsZWN0aW9uLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGUsdCl9LHRvU3RyaW5n OmZ1bmN0aW9uKCl7cmV0dXJuWyJWaXN1YWxpemE9CnRpb25Db2xsZWN0aW9uKCIsW3RoaXMuaGlz dG9yeUlkLHRoaXMubGVuZ3RoXS5qb2luKCksIikiXS5qb2luKCIiKX19KTtkZWZpbj0KZSgibXZj L3Zpc3VhbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCIsZnVuY3Rpb24oKXt9KSxkZWZpbmUo InBsdWdpbi9saWJyPQphcnkvc3RvcmFnZSIsWyJ1dGlscy91dGlscyIsInBsdWdpbi9tb2RlbHMv Y2hhcnQiLCJwbHVnaW4vbW9kZWxzL2dyb3VwIiwibXY9CmMvdmlzdWFsaXphdGlvbi92aXN1YWxp emF0aW9uLW1vZGVsIl0sZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCYWNrYm9uZS5Nb2RlbD0KLmV4 dGVuZCh7dmlzOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLmFwcD0zRGUsdGhpcy5j aGFydD0zRHRoaXMuYXBwPQouY2hhcnQsdGhpcy5vcHRpb25zPTNEdGhpcy5hcHAub3B0aW9ucyx0 aGlzLmlkPTNEdGhpcy5vcHRpb25zLmlkLHRoaXMudmlzPQo9M0RuZXcgVmlzdWFsaXphdGlvbih7 dHlwZToiY2hhcnRzIixjb25maWc6e2RhdGFzZXRfaWQ6dGhpcy5vcHRpb25zLmNvbmZpZy49CmRh dGFzZXRfaWQsY2hhcnRfZGljdDp7fX19KSx0aGlzLmlkJiYodGhpcy52aXMuaWQ9M0R0aGlzLmlk KTt2YXIgdD0zRHRoaXMubz0KcHRpb25zLmNvbmZpZy5jaGFydF9kaWN0O3QmJih0aGlzLnZpcy5n ZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0R0KX0sc2F2ZTpmPQp1bmN0aW9uKCl7dmFyIGU9M0R0 aGlzLmFwcC5jaGFydDt0aGlzLnZpcy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0R7fTt2YXI9 CiB0PTNEZS5nZXQoInRpdGxlIik7dCE9M0QiIiYmdGhpcy52aXMuc2V0KCJ0aXRsZSIsdCk7dmFy IG49M0R7YXR0cmlidXRlczplLj0KYXR0cmlidXRlcyxzZXR0aW5nczplLnNldHRpbmdzLmF0dHJp YnV0ZXMsZ3JvdXBzOltdfTtlLmdyb3Vwcy5lYWNoKGZ1bmN0aW9uPQooZSl7bi5ncm91cHMucHVz aChlLmF0dHJpYnV0ZXMpfSksdGhpcy52aXMuZ2V0KCJjb25maWciKS5jaGFydF9kaWN0PTNEbjt2 YXI9CiByPTNEdGhpczt0aGlzLnZpcy5zYXZlKCkuZmFpbChmdW5jdGlvbihlLHQsbil7Y29uc29s ZS5lcnJvcihlLHQsbil9KS50aGVuKD0KZnVuY3Rpb24oZSl7ZSYmZS5pZCYmKHIuaWQ9M0RlLmlk KX0pfSxsb2FkOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLnZpcy5nZXQoPQoiY29uZmlnIikuY2hh cnRfZGljdDtpZighZS5hdHRyaWJ1dGVzKXJldHVybiExO3ZhciB0PTNEZS5hdHRyaWJ1dGVzLnR5 cGU7aWY9CighdClyZXR1cm4gY29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gQ2hhcnQg dHlwZSBub3QgcHJvdmlkZWQuIEludmFsaT0KZCBmb3JtYXQuIiksITE7dmFyIHI9M0R0aGlzLmFw cC50eXBlcy5nZXQodCk7aWYoIXIpcmV0dXJuIGNvbnNvbGUuZGVidWcoIlN0PQpvcmFnZTo6bG9h ZCgpIC0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmUtY29uZmlndXJlIHRoZSBj aGFydC4gUmU9CnNldHRpbmcgY2hhcnQuIiksITE7Y29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6bG9h ZCgpIC0gTG9hZGluZyBjaGFydCB0eXBlICIrdD0KKyIuIiksdGhpcy5jaGFydC5kZWZpbml0aW9u PTNEcix0aGlzLmNoYXJ0LnNldChlLmF0dHJpYnV0ZXMpLHRoaXMuY2hhcnQuc3RhPQp0ZSgib2si LCJMb2FkaW5nIHNhdmVkIHZpc3VhbGl6YXRpb24uLi4iKSx0aGlzLmNoYXJ0LnNldHRpbmdzLnNl dChlLnNldHRpbmc9CnMpO2Zvcih2YXIgaSBpbiBlLmdyb3Vwcyl0aGlzLmNoYXJ0Lmdyb3Vwcy5h ZGQobmV3IG4oZS5ncm91cHNbaV0pKTtyZXR1cm4gdD0KaGlzLmNoYXJ0LnNldCgibW9kaWZpZWQi LCExKSwhMH19KX0pLGRlZmluZSgidXRpbHMvZGVmZXJyZWQiLFsidXRpbHMvdXRpbHMiPQpdLGZ1 bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe3F1ZXVlOltdLHByb2Nlc3M6 e30sY291bnRlcjowLGk9Cm5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMub24oInJlZnJlc2giLGZ1 bmN0aW9uKCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCYmdD0KaGlzLnJlYWR5KCkpe3ZhciBlPTNE dGhpcy5xdWV1ZVswXTt0aGlzLnF1ZXVlLnNwbGljZSgwLDEpLGUmJmUoKX19KX0sZXhlY3V0PQpl OmZ1bmN0aW9uKGUpe3RoaXMucXVldWUucHVzaChlKSx0aGlzLnRyaWdnZXIoInJlZnJlc2giKX0s cmVnaXN0ZXI6ZnVuY3Rpb249Cigpe3ZhciB0PTNEZS51dWlkKCk7cmV0dXJuIHRoaXMucHJvY2Vz c1t0XT0zRCEwLHRoaXMuY291bnRlcisrLGNvbnNvbGUuZGVidT0KZygiRGVmZXJyZWQ6cmVnaXN0 ZXIoKSAtIFJlZ2lzdGVyaW5nICIrdCksdH0sZG9uZTpmdW5jdGlvbihlKXt0aGlzLnByb2Nlc3Nb PQplXSYmKGRlbGV0ZSB0aGlzLnByb2Nlc3NbZV0sdGhpcy5jb3VudGVyLS0sY29uc29sZS5kZWJ1 ZygiRGVmZXJyZWQ6ZG9uZSgpIC09CiBVbnJlZ2lzdGVyaW5nICIrZSksdGhpcy50cmlnZ2VyKCJy ZWZyZXNoIikpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMucXVldWU9Cj0zRFtdfSxyZWFkeTpmdW5j dGlvbigpe3JldHVybiB0aGlzLmNvdW50ZXI9M0Q9M0QwfX0pfSksZGVmaW5lKCJwbHVnaW4vdmll dz0Kcy92aWV3cG9ydCIsWyJtdmMvdWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjIiwidXRp bHMvdXRpbHMiXSxmdW5jdGlvbihlPQosdCxuKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQo e2NvbnRhaW5lcl9saXN0OltdLGNhbnZhc19saXN0OltdLGluaXRpYWw9Cml6ZTpmdW5jdGlvbihl LHQpe3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5vcHRpb25z PTNEbj0KLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KCQodGhp cy5fdGVtcGxhdGUoKSkpLHRoaXMuX2Z1PQpsbHNjcmVlbih0aGlzLiRlbCwxMDApLHRoaXMuX2Ny ZWF0ZUNvbnRhaW5lcigiZGl2Iik7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9Ci5vbigicmVkcmF3 IixmdW5jdGlvbigpe3IuX2RyYXcoci5jaGFydCl9KSx0aGlzLmNoYXJ0Lm9uKCJzZXQ6c3RhdGUi LGZ1bmN0aT0Kb24oKXt2YXIgZT0zRHIuJGVsLmZpbmQoIiNpbmZvIiksdD0zRHIuJGVsLmZpbmQo Ii5jaGFydHMtdmlld3BvcnQtY29udGFpbmVyPQoiKSxuPTNEZS5maW5kKCIjaWNvbiIpO24ucmVt b3ZlQ2xhc3MoKSxlLnNob3coKSxlLmZpbmQoIiN0ZXh0IikuaHRtbChyLmNoYXI9CnQuZ2V0KCJz dGF0ZV9pbmZvIikpO3ZhciBpPTNEci5jaGFydC5nZXQoInN0YXRlIik7c3dpdGNoKGkpe2Nhc2Ui b2siOmUuaGlkZT0KKCksdC5zaG93KCk7YnJlYWs7Y2FzZSJmYWlsZWQiOm4uYWRkQ2xhc3MoImlj b24gZmEgZmEtd2FybmluZyIpLHQuaGlkZSgpO2JyPQplYWs7ZGVmYXVsdDpuLmFkZENsYXNzKCJp Y29uIGZhIGZhLXNwaW5uZXIgZmEtc3BpbiIpLHQuc2hvdygpfX0pfSxzaG93OmZ1bmM9CnRpb24o KXt0aGlzLiRlbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5oaWRlKCl9LF9mdWxs c2NyZWVuOmZ1bmN0aT0Kb24oZSx0KXtlLmNzcygiaGVpZ2h0IiwkKHdpbmRvdykuaGVpZ2h0KCkt dCksJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe2UuPQpjc3MoImhlaWdodCIsJCh3aW5kb3cp LmhlaWdodCgpLXQpfSl9LF9jcmVhdGVDb250YWluZXI6ZnVuY3Rpb24oZSx0KXt0PTNEdHw9Cnwx O2Zvcih2YXIgbiBpbiB0aGlzLmNvbnRhaW5lcl9saXN0KXRoaXMuY29udGFpbmVyX2xpc3Rbbl0u cmVtb3ZlKCk7dGhpcy5jbz0KbnRhaW5lcl9saXN0PTNEW10sdGhpcy5jYW52YXNfbGlzdD0zRFtd O2Zvcih2YXIgbj0zRDA7bjx0O24rKyl7dmFyIHI9M0QkKHRoPQppcy5fdGVtcGxhdGVDb250YWlu ZXIoZSxwYXJzZUludCgxMDAvdCkpKTt0aGlzLiRlbC5hcHBlbmQociksdGhpcy5jb250YWluZXI9 Cl9saXN0W25dPTNEcix0aGlzLmNhbnZhc19saXN0W25dPTNEci5maW5kKCIuY2hhcnRzLXZpZXdw b3J0LWNhbnZhcyIpLmF0dHIoIj0KaWQiKX19LF9kcmF3OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhp cyxuPTNEdGhpcy5hcHAuZGVmZXJyZWQucmVnaXN0ZXIoKSxyPTNEPQplLmdldCgidHlwZSIpO3Ro aXMuY2hhcnRfZGVmaW5pdGlvbj0zRGUuZGVmaW5pdGlvbjt2YXIgaT0zRDE7ZS5zZXR0aW5ncy5n ZXQ9CigidXNlX3BhbmVscyIpPTNEPTNEPTNEInRydWUiJiYoaT0zRGUuZ3JvdXBzLmxlbmd0aCks dGhpcy5fY3JlYXRlQ29udGFpbmVyKD0KdGhpcy5jaGFydF9kZWZpbml0aW9uLnRhZyxpKSxlLnN0 YXRlKCJ3YWl0IiwiUGxlYXNlIHdhaXQuLi4iKTtpZighdGhpcy5jaGFyPQp0X2RlZmluaXRpb24u ZXhlY3V0ZXx8dGhpcy5jaGFydF9kZWZpbml0aW9uLmV4ZWN1dGUmJmUuZ2V0KCJtb2RpZmllZCIp KXRoaXM9Ci5hcHAuam9icy5jbGVhbnVwKGUpLGUuc2V0KCJtb2RpZmllZCIsITEpO3ZhciB0PTNE dGhpcztyZXF1aXJlKFsicGx1Z2luL2NoYT0KcnRzLyIrdGhpcy5hcHAuY2hhcnRQYXRoKHIpKyIv d3JhcHBlciJdLGZ1bmN0aW9uKHIpe2lmKHQuY2hhcnRfZGVmaW5pdGlvbi5lPQp4ZWN1dGUpdC5h cHAuam9icy5yZXF1ZXN0KGUsdC5fZGVmYXVsdFNldHRpbmdzU3RyaW5nKGUpLHQuX2RlZmF1bHRS ZXF1ZXN0U3Q9CnJpbmcoZSksZnVuY3Rpb24oKXt2YXIgaT0zRG5ldyByKHQuYXBwLHtwcm9jZXNz X2lkOm4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpbz0KbmFyeTp0Ll9kZWZhdWx0UmVxdWVzdERpY3Rp b25hcnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlzdH0pfSxmdW5jdGlvbigpPQp7dGhpcy5h cHAuZGVmZXJyZWQuZG9uZShuKX0pO2Vsc2UgdmFyIGk9M0RuZXcgcih0LmFwcCx7cHJvY2Vzc19p ZDpuLGNoYXJ0OmU9CixyZXF1ZXN0X2RpY3Rpb25hcnk6dC5fZGVmYXVsdFJlcXVlc3REaWN0aW9u YXJ5KGUpLGNhbnZhc19saXN0OnQuY2FudmFzX2xpcz0KdH0pfSl9LF9kZWZhdWx0UmVxdWVzdFN0 cmluZzpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QwLHI9M0R0aGlzO3JldHVybiBlPQouZ3Jv dXBzLmVhY2goZnVuY3Rpb24oZSl7bisrO2Zvcih2YXIgaSBpbiByLmNoYXJ0X2RlZmluaXRpb24u Y29sdW1ucyl0Kz0zRGk9CisiXyIrbisiOiIrKHBhcnNlSW50KGUuZ2V0KGkpKSsxKSsiLCAifSks dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0yKX0sX2RlZmF1bD0KdFNldHRpbmdzU3RyaW5nOmZ1bmN0 aW9uKGUpe3ZhciB0PTNEIiI7Zm9yKGtleSBpbiBlLnNldHRpbmdzLmF0dHJpYnV0ZXMpdCs9Cj0z RGtleSsiOiIrZS5zZXR0aW5ncy5nZXQoa2V5KSsiLCAiO3JldHVybiB0LnN1YnN0cmluZygwLHQu bGVuZ3RoLTIpfSxfZGVmYT0KdWx0UmVxdWVzdERpY3Rpb25hcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9 M0R7Z3JvdXBzOltdfTt0aGlzLmNoYXJ0X2RlZmluaXRpb24uPQpleGVjdXRlP3QuaWQ9M0RlLmdl dCgiZGF0YXNldF9pZF9qb2IiKTp0LmlkPTNEZS5nZXQoImRhdGFzZXRfaWQiKTt2YXIgcj0zRDA9 CixpPTNEdGhpcztyZXR1cm4gZS5ncm91cHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcz0zRHt9O2Zv cih2YXIgbyBpbiBpLmNoYXJ0Xz0KZGVmaW5pdGlvbi5jb2x1bW5zKXt2YXIgdT0zRGkuY2hhcnRf ZGVmaW5pdGlvbi5jb2x1bW5zW29dO3Nbb109M0RuLm1lcmdlKHtpPQpuZGV4OmUuZ2V0KG8pfSx1 KX10Lmdyb3Vwcy5wdXNoKHtrZXk6KytyKyI6IitlLmdldCgia2V5IiksY29sdW1uczpzfSl9KSx0 fSw9Cl90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEImNoYXJ0cy12aWV3 cG9ydCI+PGRpdiBpZD0zRCJpbmZvIj0KIGNsYXNzPTNEImluZm8iPjxzcGFuIGlkPTNEImljb24i IGNsYXNzPTNEImljb24iLz48c3BhbiBpZD0zRCJ0ZXh0IiBjbGFzcz0KPTNEInRleHQiIC8+PC9k aXY+PC9kaXY+J30sX3RlbXBsYXRlQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuJzxkaXYg Y2xhPQpzcz0zRCJjaGFydHMtdmlld3BvcnQtY29udGFpbmVyIiBzdHlsZT0zRCJ3aWR0aDonK3Qr JyU7Ij4nKyc8ZGl2IGlkPTNEIm1lbnU9CiIvPicrIjwiK2UrJyBpZD0zRCInK24udXVpZCgpKyci IGNsYXNzPTNEImNoYXJ0cy12aWV3cG9ydC1jYW52YXMiPicrIjwvZGl2Pj0KIn19KX0pLGRlZmlu ZSgicGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCIsWyJsaWJzL3VuZGVyc2NvcmUiXSxmdW5jdGlv bihlKXtmPQp1bmN0aW9uIHQoZSl7ZS4kZWwuZmluZCgic3ZnIikubGVuZ3RoPjA/cihlKTpuKGUp fWZ1bmN0aW9uIG4oZSl7dHJ5e3ZhciB0PQo9M0RlLiRlbC5maW5kKCIuanFwbG90LXRhcmdldCIp LG49M0R0LmpxcGxvdFRvSW1hZ2VTdHIoe30pO24mJih3aW5kb3cubG9jYXQ9Cmlvbi5ocmVmPTNE bi5yZXBsYWNlKCJpbWFnZS9wbmciLCJpbWFnZS9vY3RldC1zdHJlYW0iKSl9Y2F0Y2gocil7Y29u c29sZS5kZT0KYnVnKCJGQUlMRUQgLSBTY3JlZW5zaG90OjpfZnJvbUNhbnZhcygpIC0gIityKSxl LmVycm9yJiZlLmVycm9yKCJQbGVhc2UgcmVkPQp1Y2UgeW91ciBjaGFydCB0byBhIHNpbmdsZSBw YW5lbCBhbmQgdHJ5IGFnYWluLiIpfX1mdW5jdGlvbiByKGUpe3ZhciB0PTNEZS49CiRlbCxuPTNE ZS51cmwscj0zRGUubmFtZSxzPTNEbmV3IFhNTFNlcmlhbGl6ZXIsbz0zRGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoIj0KY2FudmFzIiksdT0zRCQobyksYT0zRHQuZmluZCgic3ZnIikubGVuZ3RoLGY9 M0R0LmZpbmQoInN2ZyIpLmZpcnN0KCksbD0zRHBhPQpyc2VJbnQoZi5jc3MoImhlaWdodCIpKSxj PTNEcGFyc2VJbnQoZi5jc3MoIndpZHRoIikpO3UuYXR0cigid2lkdGgiLGMqYSksdS49CmF0dHIo ImhlaWdodCIsbCksKCFvLmdldENvbnRleHR8fCFvLmdldENvbnRleHQoIjJkIikpJiZhbGVydCgi WW91ciBicm93c2VyID0KZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgcGxlYXNlIHVzZSBh IG1vZGVybiBicm93c2VyIik7dmFyIGg9M0RvLmdldENvPQpudGV4dCgiMmQiKSxwPTNEMDt0LmZp bmQoInN2ZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0zRCQodGhpcyk7ZS5hdHRyKHt2ZXI9CnNp b246IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpjLGhlaWdo dDpsfSk7dmFyIHQ9M0RzLj0Kc2VyaWFsaXplVG9TdHJpbmcodGhpcyk7aC5kcmF3U3ZnKHQscCww LGMsbCkscCs9M0RjfSksd2luZG93LmxvY2F0aW9uLmhyZWY9Cj0zRGkobyxvLmdldENvbnRleHQo IjJkIiksIndoaXRlIikucmVwbGFjZSgiaW1hZ2UvcG5nIiwiaW1hZ2Uvb2N0ZXQtc3RyZWFtIj0K KX1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj0zRGUud2lkdGgsaT0zRGUuaGVpZ2h0LHM7aWYobil7 cz0zRHQuZ2V0SW1hZ2VEYXRhPQooMCwwLHIsaSk7dmFyIG89M0R0Lmdsb2JhbENvbXBvc2l0ZU9w ZXJhdGlvbjt0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0zRCI9CmRlc3RpbmF0aW9uLW92ZXIi LHQuZmlsbFN0eWxlPTNEbix0LmZpbGxSZWN0KDAsMCxyLGkpfXZhciB1PTNEZS50b0RhdGFVUkwo Ij0KaW1hZ2UvcG5nIik7cmV0dXJuIG4mJih0LmNsZWFyUmVjdCgwLDAscixpKSx0LnB1dEltYWdl RGF0YShzLDAsMCksdC5nbG9iYWxDPQpvbXBvc2l0ZU9wZXJhdGlvbj0zRG8pLHV9ZnVuY3Rpb24g cyhlKXt3aW5kb3cubG9jYXRpb24uaHJlZj0zRCJkYXRhOm5vbmUvbm89Cm5lO2Jhc2U2NCwiK2J0 b2EoYShlKS5zdHJpbmcpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0IGluIGRvY3VtZW50LnN0eWxl U2hlZT0KdHMpe3ZhciBuPTNEZG9jdW1lbnQuc3R5bGVTaGVldHNbdF0scj0zRG4uY3NzUnVsZXM7 aWYocilmb3IodmFyIGk9M0QwLHM9M0RyPQoubGVuZ3RoO2k8cztpKyspdHJ5e2UuZmluZChyW2ld LnNlbGVjdG9yVGV4dCkuZWFjaChmdW5jdGlvbihlLHQpe3Quc3R5bGUuY3M9CnNUZXh0Kz0zRHJb aV0uc3R5bGUuY3NzVGV4dH0pfWNhdGNoKG8pe319fWZ1bmN0aW9uIHUoZSl7dmFyIHQ9M0RhKGUp LG49M0R7Zj0KaWxlbmFtZTpuYW1lfHwiY2hhcnQiLHR5cGU6ImFwcGxpY2F0aW9uL3BkZiIsaGVp Z2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsPQpzY2FsZToyLHN2Zzp0LnN0cmluZ30scj0zRCQo ImJvZHkiKSxpPTNEci5maW5kKCIjdmlld3BvcnQtZm9ybSIpO2kubGVuZ3RoPQo9M0Q9M0Q9M0Qw JiYoaT0zRCQoIjxmb3JtPiIse2lkOiJ2aWV3cG9ydC1mb3JtIixtZXRob2Q6InBvc3QiLGFjdGlv bjoiaHR0cDo9Ci8vZXhwb3J0LmhpZ2hjaGFydHMuY29tLyIsZGlzcGxheToibm9uZSJ9KSxyLmFw cGVuZChpKSksaS5lbXB0eSgpO2ZvcihuYW1lID0KaW4gbil7dmFyIHM9M0QkKCI8aW5wdXQvPiIs e3R5cGU6ImhpZGRlbiIsbmFtZTpuYW1lLHZhbHVlOm5bbmFtZV19KTtpLmFwcGVuPQpkKHMpfXRy eXtpLnN1Ym1pdCgpfWNhdGNoKG8pe2NvbnNvbGUubG9nKG8pfX1mdW5jdGlvbiBhKGUpe2lmKGUu JGVsLmZpbmQoInM9CnZnIikubGVuZ3RoPTNEPTNEMCYmZS5lcnJvcil7ZS5lcnJvcigiTm8gU1ZH IGZvdW5kLiBUaGlzIGNoYXJ0IHR5cGUgZG9lcyBubz0KdCBzdXBwb3J0IFNWRy9QREYgZXhwb3J0 LiIpO3JldHVybn12YXIgdD0zRGUuJGVsLG49M0R0LmZpbmQoInN2ZyIpLmxlbmd0aCxyPQo9M0Rw YXJzZUludCh0LmZpbmQoInN2ZyIpLmZpcnN0KCkuY3NzKCJoZWlnaHQiKSksaT0zRHBhcnNlSW50 KHQuZmluZCgic3ZnIik9Ci5maXJzdCgpLmNzcygid2lkdGgiKSkscz0zRG5ldyBYTUxTZXJpYWxp emVyLHU9M0QkKCI8c3ZnLz4iKTt1LmF0dHIoe3ZlcnNpbz0KbjoiMS4xIix4bWxuczoiaHR0cDov L3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmkqbixoZWlnaHQ6cn0pO3ZhciBhPTNEIiIsPQpm PTNEMDtyZXR1cm4gdC5maW5kKCJzdmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9M0QkKHRoaXMp LmNsb25lKCk7byhlKTt2YXI9CiB0PTNEJCgnPGcgdHJhbnNmb3JtPTNEInRyYW5zbGF0ZSgnK2Yr JywgMCkiPicpO3QuYXBwZW5kKGUuZmluZCgiZyIpLmZpcnN0KD0KKSksdS5hcHBlbmQodCksZis9 M0RpfSkse3N0cmluZzpzLnNlcmlhbGl6ZVRvU3RyaW5nKHVbMF0pLGhlaWdodDpyLHdpZHRoOml9 PQp9cmV0dXJue2NyZWF0ZVBORzp0LGNyZWF0ZVNWRzpzLGNyZWF0ZVBERjp1fX0pLGRlZmluZSgi cGx1Z2luL3ZpZXdzL3ZpZXdlciI9CixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW1pc2MiLCJt dmMvdWkvdWktcG9ydGxldCIsInBsdWdpbi92aWV3cy92aWV3cG9ydD0KIiwicGx1Z2luL2xpYnJh cnkvc2NyZWVuc2hvdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIEJhY2tib25lLlZpZXcu ZXh0PQplbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSxzKXt0aGlzLmFwcD0zRGUsdGhpcy5jaGFy dD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXM9Ci52aWV3cG9ydF92aWV3PTNEbmV3IHIoZSk7dmFyIG89 M0R0aGlzO3RoaXMubWVzc2FnZT0zRG5ldyB0Lk1lc3NhZ2U7dmFyIHU9Cj0zRG5ldyB0LkJ1dHRv bk1lbnUoe2ljb246ImZhLWNhbWVyYSIsdGl0bGU6IlNjcmVlbnNob3QiLHRvb2x0aXA6IkRvd25s b2FkID0KYXMgUE5HLCBTVkcgb3IgUERGIGZpbGUifSk7dS5hZGRNZW51KHtpZDoiYnV0dG9uLXBu ZyIsdGl0bGU6IlNhdmUgYXMgUE5HIixpPQpjb246ImZhLWZpbGUiLG9uY2xpY2s6ZnVuY3Rpb24o KXtvLl93YWl0KG8uY2hhcnQsZnVuY3Rpb24oKXtpLmNyZWF0ZVBORyh7JGU9Cmw6by52aWV3cG9y dF92aWV3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtv Lm1lc3NhZz0KZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX0pLHUu YWRkTWVudSh7aWQ6ImJ1dHRvbi1zdmciLHRpPQp0bGU6IlNhdmUgYXMgU1ZHIixpY29uOiJmYS1m aWxlLXRleHQtbyIsb25jbGljazpmdW5jdGlvbigpe28uX3dhaXQoby5jaGFydCw9CmZ1bmN0aW9u KCl7aS5jcmVhdGVTVkcoeyRlbDpvLnZpZXdwb3J0X3ZpZXcuJGVsLHRpdGxlOm8uY2hhcnQuZ2V0 KCJ0aXRsZSIpLD0KZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYWdlLnVwZGF0ZSh7bWVzc2FnZTpl LHN0YXR1czoiZGFuZ2VyIn0pfX0pfSl9fSksdS5hPQpkZE1lbnUoe2lkOiJidXR0b24tcG5nIix0 aXRsZToiU2F2ZSBhcyBQREYiLGljb246ImZhLWZpbGUtbyIsb25jbGljazpmdW5jdGk9Cm9uKCl7 by5hcHAubW9kYWwuc2hvdyh7dGl0bGU6IlNlbmQgY2hhcnQgZGF0YSBmb3IgUERGIGNyZWF0aW9u Iixib2R5OiJHYWxheD0KeSBkb2VzIG5vdCBwcm92aWRlIGludGVncmF0ZWQgUERGIGV4cG9ydCBz Y3JpcHRzLiBZb3UgbWF5IGNsaWNrICdDb250aW51ZScgPQp0byBjcmVhdGUgdGhlIFBERiBieSB1 c2luZyBhIDNyZCBwYXJ0eSBzZXJ2aWNlIChodHRwczovL2V4cG9ydC5oaWdoY2hhcnRzLmM9Cm9t KS4iLGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUoKX0sQ29udGlu dWU6ZnVuY3Rpb24oKXtvLj0KYXBwLm1vZGFsLmhpZGUoKSxvLl93YWl0KG8uY2hhcnQsZnVuY3Rp b24oKXtpLmNyZWF0ZVBERih7JGVsOm8udmlld3BvcnRfdmllPQp3LiRlbCx0aXRsZTpvLmNoYXJ0 LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtvLm1lc3NhZ2UudXBkYXRlKHttZXNzYWc9 CmU6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX19KX19KSx0aGlzLnBvcnRsZXQ9M0RuZXcgbi5W aWV3KHtpY29uOiJmYS1iYXItYz0KaGFydC1vIix0aXRsZToiVmlld3BvcnQiLHNjcm9sbGFibGU6 ITEsb3BlcmF0aW9uczp7ZWRpdF9idXR0b246bmV3IHQuQnV0dG9uPQpJY29uKHtpY29uOiJmYS1l ZGl0Iix0b29sdGlwOiJDdXN0b21pemUgdGhpcyBjaGFydCIsdGl0bGU6IkVkaXRvciIsb25jbGlj azo9CmZ1bmN0aW9uKCl7by5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7by5hcHAuZ28oImVkaXRv ciIpfSl9fSkscGljdHVyZV9idXR0bz0Kbl9tZW51OnV9fSksdGhpcy5wb3J0bGV0LmFwcGVuZCh0 aGlzLm1lc3NhZ2UuJGVsKSx0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMuPQp2aWV3cG9ydF92aWV3 LiRlbCksdGhpcy5zZXRFbGVtZW50KHRoaXMucG9ydGxldC4kZWwpO3ZhciBvPTNEdGhpczt0aGlz LmNoYXI9CnQub24oImNoYW5nZTp0aXRsZSIsZnVuY3Rpb24oKXtvLl9yZWZyZXNoVGl0bGUoKX0p fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZT0KbC5zaG93KCksJCh3aW5kb3cpLnRyaWdnZXIoInJl c2l6ZSIpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSxfcmVmPQpyZXNoVGl0bGU6 ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJ0aXRsZSIpO3RoaXMucG9ydGxldC50 aXRsZShlKX09Cixfd2FpdDpmdW5jdGlvbihlLHQpe3RoaXMuYXBwLmRlZmVycmVkLnJlYWR5KCk/ dCgpOnRoaXMubWVzc2FnZS51cGRhdGUoe21lcz0Kc2FnZToiWW91ciBjaGFydCBpcyBjdXJyZW50 bHkgYmVpbmcgcHJvY2Vzc2VkLiBQbGVhc2Ugd2FpdCBhbmQgdHJ5IGFnYWluLiJ9PQopfX0pfSks ZGVmaW5lKCJtdmMvdWkvdWktdGFicyIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0 PTNEQmFja2JvbmU9Ci5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e3RpdGxlX25ldzoiIixv cGVyYXRpb25zOm51bGwsb25uZXc6bnVsbCxtYXg6bj0KdWxsLG9uY2hhbmdlOm51bGx9LGluaXRp YWxpemU6ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlPTNEITEsdGhpcy4kbmF2PTNEbnVsPQpsLHRo aXMuJGNvbnRlbnQ9M0RudWxsLHRoaXMuZmlyc3RfdGFiPTNEbnVsbCx0aGlzLmN1cnJlbnRfaWQ9 M0RudWxsLHRoaXMub3A9CnRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpO3Zh ciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbj0KcykpO3RoaXMuJG5hdj0zRG4uZmlu ZCgiLnRhYi1uYXZpZ2F0aW9uIiksdGhpcy4kY29udGVudD0zRG4uZmluZCgiLnRhYi1jb250PQpl bnQiKSx0aGlzLnNldEVsZW1lbnQobiksdGhpcy5saXN0PTNEe307dmFyIHI9M0R0aGlzO3RoaXMu b3B0aW9ucy5vcGVyYXRpb249CnMmJiQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5j dGlvbihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRuYXYuZj0KaW5kKCIub3BlcmF0aW9ucyIp LmFwcGVuZCh0LiRlbCl9KTtpZih0aGlzLm9wdGlvbnMub25uZXcpe3ZhciBpPTNEJCh0aGlzLl90 PQplbXBsYXRlX3RhYl9uZXcodGhpcy5vcHRpb25zKSk7dGhpcy4kbmF2LmFwcGVuZChpKSxpLnRv b2x0aXAoe3RpdGxlOiJBZGQgYSA9Cm5ldyB0YWIiLHBsYWNlbWVudDoiYm90dG9tIixjb250YWlu ZXI6ci4kZWx9KSxpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7aS50bz0Kb2x0aXAoImhpZGUiKSxy Lm9wdGlvbnMub25uZXcoKX0pfX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiBfLnNpemUodGhpcy5s aXN0PQopfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsLmZpbmQoIi50YWItcGFu ZS5hY3RpdmUiKS5hdHRyKCJpZCIpfSw9CmFkZDpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMsbj0z RGUuaWQscj0zRCQodGhpcy5fdGVtcGxhdGVfdGFiKGUpKSxpPTNEJCh0aD0KaXMuX3RlbXBsYXRl X3RhYl9jb250ZW50KGUpKTt0aGlzLmxpc3Rbbl09M0RlLm9uZGVsPyEwOiExLHRoaXMub3B0aW9u cy5vbm5lPQp3P3RoaXMuJG5hdi5maW5kKCIjbmV3LXRhYiIpLmJlZm9yZShyKTp0aGlzLiRuYXYu YXBwZW5kKHIpLGkuYXBwZW5kKGUuJGVsKSw9CnRoaXMuJGNvbnRlbnQuYXBwZW5kKGkpLHRoaXMu c2l6ZSgpPTNEPTNEMSYmKHIuYWRkQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhcz0KcygiYWN0aXZl IiksdGhpcy5maXJzdF90YWI9M0RuKSx0aGlzLm9wdGlvbnMubWF4JiZ0aGlzLnNpemUoKT49M0R0 aGlzLm9wdGlvPQpucy5tYXgmJnRoaXMuJGVsLmZpbmQoIiNuZXctdGFiIikuaGlkZSgpO2lmKGUu b25kZWwpe3ZhciBzPTNEci5maW5kKCIjZGVsZXQ9CmUiKTtzLnRvb2x0aXAoe3RpdGxlOiJEZWxl dGUgdGhpcyB0YWIiLHBsYWNlbWVudDoiYm90dG9tIixjb250YWluZXI6dC4kZWx9KT0KLHMub24o ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBzLnRvb2x0aXAoImRlc3Ryb3kiKSx0LiRlbC5maW5k KCIudG9vbHRpcCIpPQoucmVtb3ZlKCksZS5vbmRlbCgpLCExfSl9ci5vbigiY2xpY2siLGZ1bmN0 aW9uKHIpe3IucHJldmVudERlZmF1bHQoKSxlLm9uY2w9Cmljaz9lLm9uY2xpY2soKTp0LnNob3co bil9KSx0aGlzLmN1cnJlbnRfaWR8fCh0aGlzLmN1cnJlbnRfaWQ9M0RuKX0sZGVsOmZ1bj0KY3Rp b24oZSl7dGhpcy4kZWwuZmluZCgiI3RhYi0iK2UpLnJlbW92ZSgpLHRoaXMuJGVsLmZpbmQoIiMi K2UpLnJlbW92ZSgpLHRoPQppcy5maXJzdF90YWI9M0Q9M0RlJiYodGhpcy5maXJzdF90YWI9M0Ru dWxsKSx0aGlzLmZpcnN0X3RhYiE9M0RudWxsJiZ0aGlzLnM9Cmhvdyh0aGlzLmZpcnN0X3RhYiks dGhpcy5saXN0W2VdJiZkZWxldGUgdGhpcy5saXN0W2VdLHRoaXMuc2l6ZSgpPHRoaXMub3B0aT0K b25zLm1heCYmdGhpcy4kZWwuZmluZCgiI25ldy10YWIiKS5zaG93KCl9LGRlbFJlbW92YWJsZTpm dW5jdGlvbigpe2Zvcih2YXIgPQplIGluIHRoaXMubGlzdCl0aGlzLmRlbChlKX0sc2hvdzpmdW5j dGlvbihlKXt0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0aGlzLnY9CmlzaWJsZT0zRCEwLGUmJih0 aGlzLiRlbC5maW5kKCIjdGFiLSIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVDbGFzcygiYWN0aXZl Ij0KKSx0aGlzLiRlbC5maW5kKCIjIit0aGlzLmN1cnJlbnRfaWQpLnJlbW92ZUNsYXNzKCJhY3Rp dmUiKSx0aGlzLiRlbC5maW5kKCIjPQp0YWItIitlKS5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy4k ZWwuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuY3U9CnJyZW50X2lkPTNEZSks dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UoZSl9LGhpZGU6ZnVu Y3Rpbz0Kbigpe3RoaXMuJGVsLmZhZGVPdXQoImZhc3QiKSx0aGlzLnZpc2libGU9M0QhMX0saGlk ZU9wZXJhdGlvbjpmdW5jdGlvbihlKXt0PQpoaXMuJG5hdi5maW5kKCIjIitlKS5oaWRlKCl9LHNo b3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kbmF2LmZpbmQoIiMiK2U9Cikuc2hvdygpfSxz ZXRPcGVyYXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHRoaXMuJG5hdi5maW5kKCIjIitlKTtu Lm9mZigiYz0KbGljayIpLG4ub24oImNsaWNrIix0KX0sdGl0bGU6ZnVuY3Rpb24oZSx0KXt2YXIg bj0zRHRoaXMuJGVsLmZpbmQoIiN0YWItdGl0PQpsZS10ZXh0LSIrZSk7cmV0dXJuIHQmJm4uaHRt bCh0KSxuLmh0bWwoKX0scmV0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0zRDA7Zm89CnIodmFyIG4g aW4gdGhpcy5saXN0KXRoaXMudGl0bGUobiwrK3QrIjogIitlKX0sX3RlbXBsYXRlOmZ1bmN0aW9u KGUpe3JldHVybj0KJzxkaXYgY2xhc3M9M0QidWktdGFicyB0YWJiYWJsZSB0YWJzLWxlZnQiPjx1 bCBpZD0zRCJ0YWItbmF2aWdhdGlvbiIgY2xhc3M9Cj0zRCJ0YWItbmF2aWdhdGlvbiBuYXYgbmF2 LXRhYnMiPjxkaXYgY2xhc3M9M0Qib3BlcmF0aW9ucyIgc3R5bGU9M0QiZmxvYXQ6ID0KcmlnaHQ7 IG1hcmdpbi1ib3R0b206IDRweDsiPjwvZGl2PjwvdWw+PGRpdiBpZD0zRCJ0YWItY29udGVudCIg Y2xhc3M9M0QidGFiPQotY29udGVudCIvPjwvZGl2Pid9LF90ZW1wbGF0ZV90YWJfbmV3OmZ1bmN0 aW9uKGUpe3JldHVybic8bGkgaWQ9M0QibmV3LXRhYiI9Cj48YSBocmVmPTNEImphdmFzY3JpcHQ6 dm9pZCgwKTsiPjxpIGNsYXNzPTNEInVpLXRhYnMtYWRkIGZhIGZhLXBsdXMtY2lyY2xlIj0KLz4n K2UudGl0bGVfbmV3KyI8L2E+IisiPC9saT4ifSxfdGVtcGxhdGVfdGFiOmZ1bmN0aW9uKGUpe3Zh ciB0PTNEJzxsaSBpZD0KPTNEInRhYi0nK2UuaWQrJyIgY2xhc3M9M0QidGFiLWVsZW1lbnQiPicr JzxhIGlkPTNEInRhYi10aXRsZS1saW5rLScrZS5pZCsnPQoiIHRpdGxlPTNEIiIgaHJlZj0zRCIj JytlLmlkKyciIGRhdGEtb3JpZ2luYWwtdGl0bGU9M0QiIj4nKyc8c3BhbiBpZD0zRCJ0YWI9Ci10 aXRsZS10ZXh0LScrZS5pZCsnIiBjbGFzcz0zRCJ0YWItdGl0bGUtdGV4dCI+JytlLnRpdGxlKyI8 L3NwYW4+IjtyZXR1cm4gZT0KLm9uZGVsJiYodCs9M0QnPGkgaWQ9M0QiZGVsZXRlIiBjbGFzcz0z RCJ1aS10YWJzLWRlbGV0ZSBmYSBmYS1taW51cy1jaXJjbGUiPQovPicpLHQrPTNEIjwvYT48L2xp PiIsdH0sX3RlbXBsYXRlX3RhYl9jb250ZW50OmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGlkPQo9 M0QiJytlLmlkKyciIGNsYXNzPTNEInRhYi1wYW5lIi8+J319KTtyZXR1cm57Vmlldzp0fX0pLGRl ZmluZSgibXZjL3VpL3VpLXQ9CmFibGUiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIg dD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtyb3c6bnVsbCxybz0Kd19jb3VudDowLG9wdGlvbnNE ZWZhdWx0Ontjb250ZW50OiJObyBjb250ZW50IGF2YWlsYWJsZS4iLG9uY2hhbmdlOm51bGwsb25k PQpibGNsaWNrOm51bGwsb25jb25maXJtOm51bGwsY2xzOiJ1aS10YWJsZSIsY2xzX3RyOiIifSxl dmVudHM6e2NsaWNrOiJfb25jbGk9CmNrIixkYmxjbGljazoiX29uZGJsY2xpY2sifSxpbml0aWFs aXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodD0KLHRoaXMub3B0aW9uc0Rl ZmF1bHQpO3ZhciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiR0aGVh ZD0KPTNEbi5maW5kKCJ0aGVhZCIpLHRoaXMuJHRib2R5PTNEbi5maW5kKCJ0Ym9keSIpLHRoaXMu JHRtZXNzYWdlPTNEbi5maW5kKCJ0PQptZXNzYWdlIiksdGhpcy5zZXRFbGVtZW50KG4pLHRoaXMu cm93PTNEdGhpcy5fcm93KCl9LGFkZEhlYWRlcjpmdW5jdGlvbihlKXs9CnZhciB0PTNEJCgiPHRo PjwvdGg+Iik7dC5hcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5kKHQpfSxhcHBlbmRIZWFkZXI6ZnVu Y3Rpbz0Kbigpe3RoaXMuJHRoZWFkLmFwcGVuZCh0aGlzLnJvdyksdGhpcy5yb3c9M0QkKCI8dHI+ PC90cj4iKX0sYWRkOmZ1bmN0aW9uKGUsPQp0LG4pe3ZhciByPTNEJCgiPHRkPjwvdGQ+Iik7dCYm ci5jc3MoIndpZHRoIix0KSxuJiZyLmNzcygidGV4dC1hbGlnbiIsbiksci49CmFwcGVuZChlKSx0 aGlzLnJvdy5hcHBlbmQocil9LGFwcGVuZDpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbW1pdChlLHQs ITEpfSxwcj0KZXBlbmQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb21taXQoZSx0LCEwKX0sZ2V0OmZ1 bmN0aW9uKGUpe3JldHVybiB0aGlzLiRlbC5mPQppbmQoIiMiK2UpfSxkZWw6ZnVuY3Rpb24oZSl7 dmFyIHQ9M0R0aGlzLiR0Ym9keS5maW5kKCIjIitlKTt0Lmxlbmd0aD4wJiYodC49CnJlbW92ZSgp LHRoaXMucm93X2NvdW50LS0sdGhpcy5fcmVmcmVzaCgpKX0sZGVsQWxsOmZ1bmN0aW9uKCl7dGhp cy4kdGJvZHkuZT0KbXB0eSgpLHRoaXMucm93X2NvdW50PTNEMCx0aGlzLl9yZWZyZXNoKCl9LHZh bHVlOmZ1bmN0aW9uKGUpe3RoaXMuYmVmb3JlPTNEPQp0aGlzLiR0Ym9keS5maW5kKCIuY3VycmVu dCIpLmF0dHIoImlkIiksZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiR0Ym9keS5maW49CmQoInRy IikucmVtb3ZlQ2xhc3MoImN1cnJlbnQiKSxlJiZ0aGlzLiR0Ym9keS5maW5kKCIjIitlKS5hZGRD bGFzcygiY3VycmVudD0KIikpO3ZhciB0PTNEdGhpcy4kdGJvZHkuZmluZCgiLmN1cnJlbnQiKS5h dHRyKCJpZCIpO3JldHVybiB0PTNEPTNEPTNEdW5kZWZpPQpuZWQ/bnVsbDoodCE9M0R0aGlzLmJl Zm9yZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25jaGFuZ2UoZSk9Cix0 KX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0Ym9keS5maW5kKCJ0ciIpLmxlbmd0aH0s X2NvbW1pdDpmdW5jdGlvbj0KKGUsdCxuKXt0aGlzLmRlbChlKSx0aGlzLnJvdy5hdHRyKCJpZCIs ZSksbj90aGlzLiR0Ym9keS5wcmVwZW5kKHRoaXMucm93KTp0PQpoaXMuJHRib2R5LmFwcGVuZCh0 aGlzLnJvdyksdCYmKHRoaXMucm93LmhpZGUoKSx0aGlzLnJvdy5mYWRlSW4oKSksdGhpcy5yb3c9 Cj0zRHRoaXMuX3JvdygpLHRoaXMucm93X2NvdW50KyssdGhpcy5fcmVmcmVzaCgpfSxfcm93OmZ1 bmN0aW9uKCl7cmV0dXJuICQoJz0KPHRyIGNsYXNzPTNEIicrdGhpcy5vcHRpb25zLmNsc190cisn Ij48L3RyPicpfSxfb25jbGljazpmdW5jdGlvbihlKXt2YXIgdD0KPTNEdGhpcy52YWx1ZSgpLG49 M0QkKGUudGFyZ2V0KS5jbG9zZXN0KCJ0ciIpLmF0dHIoImlkIik7biE9M0QiIiYmbiYmdCE9M0Ru PQomJih0aGlzLm9wdGlvbnMub25jb25maXJtP3RoaXMub3B0aW9ucy5vbmNvbmZpcm0obik6dGhp cy52YWx1ZShuKSl9LF9vbmRibGM9CmxpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLnZhbHVl KCk7dCYmdGhpcy5vcHRpb25zLm9uZGJsY2xpY2smJnRoaXMub3B0aT0Kb25zLm9uZGJsY2xpY2so dCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5yb3dfY291bnQ9M0Q9M0QwP3RoaXMuJHRtZXNz YWdlPQouc2hvdygpOnRoaXMuJHRtZXNzYWdlLmhpZGUoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUp e3JldHVybic8ZGl2Pjx0YWJsZSBjbGE9CnNzPTNEIicrZS5jbHMrJyI+JysiPHRoZWFkPjwvdGhl YWQ+IisiPHRib2R5PjwvdGJvZHk+IisiPC90YWJsZT4iKyI8dG1lc3NhZz0KZT4iK2UuY29udGVu dCsiPC90bWVzc2FnZT4iKyI8ZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoInBsdWdp bi92aWV3PQpzL2dyb3VwIixbIm12Yy91aS91aS10YWJsZSIsIm12Yy91aS91aS1taXNjIiwidXRp bHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbik9CntyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQo e2luaXRpYWxpemU6ZnVuY3Rpb24ocixpKXt0aGlzLmFwcD0zRHI7dmFyIHM9Cj0zRHRoaXM7dGhp cy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMuZ3JvdXA9M0RpLmdyb3VwLHRoaXMuZ3JvdXBf a2V5PTNEbj0KZXcgdC5JbnB1dCh7cGxhY2Vob2xkZXI6IkRhdGEgbGFiZWwiLG9uY2hhbmdlOmZ1 bmN0aW9uKGUpe3MuZ3JvdXAuc2V0KCJrZXkiPQosZSl9fSksdGhpcy50YWJsZT0zRG5ldyBlLlZp ZXcoe2NvbnRlbnQ6Ik5vIGRhdGEgY29sdW1uLiJ9KTt2YXIgbz0zRCQoIjxkaXY9Ci8+Iik7by5h cHBlbmQobi53cmFwKChuZXcgdC5MYWJlbCh7dGl0bGU6IlByb3ZpZGUgYSBsYWJlbDoifSkpLiRl bCkpLG8uYXBwZT0KbmQobi53cmFwKHRoaXMuZ3JvdXBfa2V5LiRlbCkpLG8uYXBwZW5kKG4ud3Jh cCgobmV3IHQuTGFiZWwoe3RpdGxlOiJTZWxlY3QgPQpjb2x1bW5zOiJ9KSkuJGVsKSksby5hcHBl bmQobi53cmFwKHRoaXMudGFibGUuJGVsKSksdGhpcy5zZXRFbGVtZW50KG8pO3ZhciA9CnM9M0R0 aGlzO3RoaXMuY2hhcnQub24oImNoYW5nZTpkYXRhc2V0X2lkIixmdW5jdGlvbigpe3MuX3JlZnJl c2hUYWJsZSgpfSksdD0KaGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6dHlwZSIsZnVuY3Rpb24oKXtzLl9y ZWZyZXNoVGFibGUoKX0pLHRoaXMuZ3JvdXAub24oImNoPQphbmdlOmtleSIsZnVuY3Rpb24oKXtz Ll9yZWZyZXNoR3JvdXBLZXkoKX0pLHRoaXMuZ3JvdXAub24oImNoYW5nZSIsZnVuY3Rpb249Cigp e3MuX3JlZnJlc2hHcm91cCgpfSksdGhpcy5fcmVmcmVzaFRhYmxlKCksdGhpcy5fcmVmcmVzaEdy b3VwS2V5KCksdGhpcy5fcj0KZWZyZXNoR3JvdXAoKX0sX3JlZnJlc2hUYWJsZTpmdW5jdGlvbigp e3ZhciBlPTNEdGhpcy5jaGFydC5nZXQoImRhdGFzZXRfaWQiPQopLG49M0R0aGlzLmNoYXJ0Lmdl dCgidHlwZSIpO2lmKCFlfHwhbilyZXR1cm47dmFyIHI9M0R0aGlzLGk9M0R0aGlzLmNoYXJ0LmQ9 CmVmaW5pdGlvbjt0aGlzLnRhYmxlLmRlbEFsbCgpO3ZhciBzPTNEe307Zm9yKHZhciBvIGluIGku Y29sdW1ucyl7dmFyIHU9M0RpLj0KY29sdW1uc1tvXTtpZighdSl7Y29uc29sZS5kZWJ1ZygiR3Jv dXA6Ol9yZWZyZXNoVGFibGUoKSAtIFNraXBwaW5nIGNvbHVtbiBkPQplZmluaXRpb24uIik7Y29u dGludWV9dmFyIGE9M0RuZXcgdC5TZWxlY3QuVmlldyh7aWQ6InNlbGVjdF8iK28sd2FpdDohMH0p LGY9Cj0zRHUudGl0bGU7dS5pc191bmlxdWUmJihmKz0zRCImbmJzcDsoYWxsIGRhdGEgbGFiZWxz KSIpLHRoaXMudGFibGUuYWRkKGYsIj0KMjUlIiksdGhpcy50YWJsZS5hZGQoYS4kZWwpLHRoaXMu dGFibGUuYXBwZW5kKG8pLHNbb109M0RhfXRoaXMuY2hhcnQuc3RhdGUoPQoid2FpdCIsIkxvYWRp bmcgbWV0YWRhdGEuLi4iKTt2YXIgbD0zRHRoaXMuYXBwLmRlZmVycmVkLnJlZ2lzdGVyKCksYz0z RHtpZDo9CmUsc3VjY2VzczpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gcylyLl9hZGRSb3codCxl LHMsaS5jb2x1bW5zW3RdKTtyLmNoYXJ0Lj0Kc3RhdGUoIm9rIiwiTWV0YWRhdGEgaW5pdGlhbGl6 ZWQuLi4iKSxyLmFwcC5kZWZlcnJlZC5kb25lKGwpfX07dGhpcy5hcHAuZGF0PQphc2V0cy5yZXF1 ZXN0KGMpfSxfYWRkUm93OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPTNEdGhpcyxzPTNEci5pc19s YWJlbCxvPQo9M0RyLmlzX2F1dG8sdT0zRHIuaXNfbnVtZXJpYyxhPTNEci5pc191bmlxdWUsZj0z RHIuaXNfemVybyxsPTNEW10sYz0zRG5bZV09CjtvJiZsLnB1c2goe2xhYmVsOiJDb2x1bW46IFJv dyBOdW1iZXIiLHZhbHVlOiJhdXRvIn0pLGYmJmwucHVzaCh7bGFiZWw6IkNvbD0KdW1uOiBOb25l Iix2YWx1ZToiemVybyJ9KTt2YXIgaD0zRHQubWV0YWRhdGFfY29sdW1uX3R5cGVzO2Zvcih2YXIg cCBpbiBoKXt2PQphciBkPTNEITE7aFtwXT0zRD0zRCJpbnQifHxoW3BdPTNEPTNEImZsb2F0Ij9k PTNEdTpkPTNEcyxkJiZsLnB1c2goe2xhYmVsOiI9CkNvbHVtbjogIisocGFyc2VJbnQocCkrMSkr IiBbIitoW3BdKyJdIix2YWx1ZTpwfSl9Yy51cGRhdGUobCksYSYmdGhpcy5jaGFydD0KLmdyb3Vw cy5maXJzdCgpJiZ0aGlzLmdyb3VwLnNldChlLHRoaXMuY2hhcnQuZ3JvdXBzLmZpcnN0KCkuZ2V0 KGUpKTtpZighYy5lPQp4aXN0cyh0aGlzLmdyb3VwLmdldChlKSkpe3ZhciB2PTNEYy5maXJzdCgp O2NvbnNvbGUuZGVidWcoJ0dyb3VwKCk6Ol9hZGRSb3c9CigpIC0gU3dpdGNoaW5nIG1vZGVsIHZh bHVlIGZyb20gIicrdGhpcy5ncm91cC5nZXQoZSkrJyIgdG8gIicrdisnIi4nKSx0aGlzLj0KZ3Jv dXAuc2V0KGUsdil9Yy52YWx1ZSh0aGlzLmdyb3VwLmdldChlKSksdGhpcy5ncm91cC5vZmYoImNo YW5nZToiK2UpLHRoaXMuPQpncm91cC5vbigiY2hhbmdlOiIrZSxmdW5jdGlvbigpe2MudmFsdWUo aS5ncm91cC5nZXQoZSkpfSksYy5zZXRPbkNoYW5nZShmdW49CmN0aW9uKHQpe2E/aS5jaGFydC5n cm91cHMuZWFjaChmdW5jdGlvbihuKXtuLnNldChlLHQpfSk6aS5ncm91cC5zZXQoZSx0KSxpLj0K Y2hhcnQuc2V0KCJtb2RpZmllZCIsITApfSksYy5zaG93KCl9LF9yZWZyZXNoR3JvdXA6ZnVuY3Rp b24oKXt0aGlzLmdyb3VwLnNlPQp0KCJkYXRlIixuLnRpbWUoKSl9LF9yZWZyZXNoR3JvdXBLZXk6 ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuZ3JvdXAuZ2V0KCJrZXk9CiIpO2U9M0Q9M0Q9M0R1bmRl ZmluZWQmJihlPTNEIiIpLGUhPTNEdGhpcy5ncm91cF9rZXkudmFsdWUoKSYmdGhpcy5ncm91cF9r ZT0KeS52YWx1ZShlKX19KX0pLGRlZmluZSgicGx1Z2luL2xpYnJhcnkvdWktdGFibGUtZm9ybSIs WyJtdmMvdWkvdWktdGFibGUiLCJtPQp2Yy91aS91aS1taXNjIiwidXRpbHMvdXRpbHMiXSxmdW5j dGlvbihlLHQsbil7dmFyIHI9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCg9CntvcHRpb25zRGVmYXVs dDp7dGl0bGU6IiIsY29udGVudDoiIixtb2RlOiIifSxsaXN0OltdLGluaXRpYWxpemU6ZnVuY3Rp b24ocj0KLGkpe3RoaXMuYXBwPTNEcix0aGlzLm9wdGlvbnM9M0RuLm1lcmdlKGksdGhpcy5vcHRp b25zRGVmYXVsdCksdGhpcy50YWJsZV90PQppdGxlPTNEbmV3IHQuTGFiZWwoe3RpdGxlOnRoaXMu b3B0aW9ucy50aXRsZX0pLHRoaXMudGFibGU9M0RuZXcgZS5WaWV3KHtjb249CnRlbnQ6dGhpcy5v cHRpb25zLmNvbnRlbnR9KTt2YXIgcz0zRCQoJzxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybSIv PicpO3RoaT0Kcy5vcHRpb25zLnRpdGxlJiZzLmFwcGVuZChuLndyYXAodGhpcy50YWJsZV90aXRs ZS4kZWwpKSxzLmFwcGVuZChuLndyYXAodGhpPQpzLnRhYmxlLiRlbCkpLHRoaXMuc2V0RWxlbWVu dChzKX0sdGl0bGU6ZnVuY3Rpb24oZSl7dGhpcy50YWJsZV90aXRsZS50aXRsZSg9CmUpfSx1cGRh dGU6ZnVuY3Rpb24oZSx0KXt0aGlzLnRhYmxlLmRlbEFsbCgpLHRoaXMubGlzdD0zRFtdO2Zvcih2 YXIgbiBpbiBlKT0KdGhpcy5fYWRkKGVbbl0uaWR8fG4sZVtuXSx0KTtmb3IodmFyIG4gaW4gdGhp cy5saXN0KXRoaXMubGlzdFtuXS50cmlnZ2VyKCJjPQpoYW5nZSIpfSxfYWRkOmZ1bmN0aW9uKGUs bixyKXt2YXIgaT0zRHRoaXMscz0zRG51bGwsbz0zRG4udHlwZTtzd2l0Y2gobyl7Y2E9CnNlInRl eHQiOnM9M0RuZXcgdC5JbnB1dCh7aWQ6ImZpZWxkLSIrZSxwbGFjZWhvbGRlcjpuLnBsYWNlaG9s ZGVyLHZhbHVlOnIuZz0KZXQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0KX19KTti cmVhaztjYXNlInJhZGlvYnV0dG9uIjpzPTNEbmV3IHQuPQpSYWRpb0J1dHRvbi5WaWV3KHtpZDoi ZmllbGQtIitlLGRhdGE6bi5kYXRhLHZhbHVlOnIuZ2V0KGUpLG9uY2hhbmdlOmZ1bmN0aW89Cm4o dCl7ci5zZXQoZSx0KTt2YXIgcz0zRF8uZmluZFdoZXJlKG4uZGF0YSx7dmFsdWU6dH0pO2lmKHMm JnMub3BlcmF0aW9ucyl7dj0KYXIgbz0zRHMub3BlcmF0aW9ucztmb3IodmFyIHUgaW4gby5zaG93 KXt2YXIgYT0zRG8uc2hvd1t1XTtpLnRhYmxlLmdldChhKS5zPQpob3coKX1mb3IodmFyIHUgaW4g by5oaWRlKXt2YXIgYT0zRG8uaGlkZVt1XTtpLnRhYmxlLmdldChhKS5oaWRlKCl9fX19KTticmU9 CmFrO2Nhc2Uic2VsZWN0IjpzPTNEbmV3IHQuU2VsZWN0LlZpZXcoe2lkOiJmaWVsZC0iK2UsZGF0 YTpuLmRhdGEsdmFsdWU6ci5nZT0KdChlKSxvbmNoYW5nZTpmdW5jdGlvbih0KXtyLnNldChlLHQp O3ZhciBzPTNEXy5maW5kV2hlcmUobi5kYXRhLHt2YWx1ZTp0fSk7PQppZihzJiZzLm9wZXJhdGlv bnMpe3ZhciBvPTNEcy5vcGVyYXRpb25zO2Zvcih2YXIgdSBpbiBvLnNob3cpe3ZhciBhPTNEby5z aG89CndbdV07aS50YWJsZS5nZXQoYSkuc2hvdygpfWZvcih2YXIgdSBpbiBvLmhpZGUpe3ZhciBh PTNEby5oaWRlW3VdO2kudGFibGUuZz0KZXQoYSkuaGlkZSgpfX19fSk7YnJlYWs7Y2FzZSJkYXRh c2V0IjpzPTNEbmV3IHQuU2VsZWN0LlZpZXcoe2lkOiJmaWVsZC0iK2UsPQpvbmNoYW5nZTpmdW5j dGlvbih0KXtyLnNldChlLHQpfX0pLGkuYXBwLmRhdGFzZXRzLm9uKCJhbGwiLGZ1bmN0aW9uKCl7 dmFyIHQ9Cj0zRFtdO2kuYXBwLmRhdGFzZXRzLmVhY2goZnVuY3Rpb24oZSl7ZS5nZXQoImRhdGF0 eXBlX2lkIik9M0Q9M0RuLmRhdGEmJnQucD0KdXNoKHt2YWx1ZTplLmdldCgiaWQiKSxsYWJlbDpl LmdldCgibmFtZSIpfSl9KSxzLnVwZGF0ZSh0KSxyLmdldChlKXx8ci5zZXQoPQplLHMuZmlyc3Qo KSkscy52YWx1ZShyLmdldChlKSl9KSxpLmFwcC5kYXRhc2V0cy50cmlnZ2VyKCJhbGwuZGF0YXNl dHMiKTticmU9CmFrO2Nhc2UidGV4dGFyZWEiOnM9M0RuZXcgdC5UZXh0YXJlYSh7aWQ6ImZpZWxk LSIrZSxvbmNoYW5nZTpmdW5jdGlvbigpe3Iucz0KZXQoZSxzLnZhbHVlKCkpfX0pO2JyZWFrO2Nh c2Uic2VwYXJhdG9yIjpzPTNEJCgiPGRpdi8+Iik7YnJlYWs7ZGVmYXVsdDpzPTNEPQpuZXcgdC5J bnB1dCh7aWQ6ImZpZWxkLSIrZSxwbGFjZWhvbGRlcjpuLnBsYWNlaG9sZGVyLHR5cGU6bi50eXBl LG9uY2hhbmdlOmY9CnVuY3Rpb24oKXtyLnNldChlLHMudmFsdWUoKSl9fSl9aWYobyE9M0Qic2Vw YXJhdG9yIil7ci5nZXQoZSl8fHIuc2V0KGUsbi5pbj0KaXQpLHMudmFsdWUoci5nZXQoZSkpLHRo aXMubGlzdFtlXT0zRHM7dmFyIHU9M0QkKCI8ZGl2Lz4iKTt1LmFwcGVuZChzLiRlbCksPQpuLmlu Zm8mJnUuYXBwZW5kKCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0taW5mbyI+JytuLmluZm8r IjwvZGl2PiIpLHRoaXM9Ci5vcHRpb25zLnN0eWxlPTNEPTNEImJvbGQiPyh0aGlzLnRhYmxlLmFk ZCgobmV3IHQuTGFiZWwoe3RpdGxlOm4udGl0bGUsY2xzOj0KImZvcm0tbGFiZWwifSkpLiRlbCks dGhpcy50YWJsZS5hZGQodSkpOih0aGlzLnRhYmxlLmFkZCgnPHNwYW4gY2xhc3M9M0QidWktPQp0 YWJsZS1mb3JtLXRpdGxlIj4nK24udGl0bGUrIjwvc3Bhbj4iLCIyNSUiKSx0aGlzLnRhYmxlLmFk ZCh1KSl9ZWxzZSB0aGlzLnQ9CmFibGUuYWRkKCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0t c2VwYXJhdG9yIj4nK24udGl0bGUrIjo8ZGl2Lz4iKSx0aGlzLj0KdGFibGUuYWRkKCQoIjxkaXYv PiIpKTt0aGlzLnRhYmxlLmFwcGVuZChlKSxuLmhpZGUmJnRoaXMudGFibGUuZ2V0KGUpLmhpZGUo PQopfX0pO3JldHVybntWaWV3OnJ9fSksZGVmaW5lKCJwbHVnaW4vdmlld3Mvc2V0dGluZ3MiLFsi bXZjL3VpL3VpLW1pc2MiLCJwbHU9Cmdpbi9saWJyYXJ5L3VpLXRhYmxlLWZvcm0iLCJ1dGlscy91 dGlscyJdLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQmFja2JvbmUuVj0KaWV3LmV4dGVuZCh7aW5p dGlhbGl6ZTpmdW5jdGlvbihlLG4pe3RoaXMuYXBwPTNEZTt2YXIgcj0zRHRoaXM7dGhpcy5jaGFy dD0KPTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5mb3JtPTNEbmV3IHQuVmlldyhlLHt0aXRsZToiQ29u ZmlndXJhdGlvbiIsY29udGVudDoiPQpUaGlzIGNoYXJ0IHR5cGUgZG9lcyBub3QgcHJvdmlkZSBh bnkgb3B0aW9ucy4ifSksdGhpcy5zZXRFbGVtZW50KHRoaXMuZm9ybS49CiRlbCk7dmFyIHI9M0R0 aGlzO3RoaXMuY2hhcnQub24oImNoYW5nZSIsZnVuY3Rpb24oKXtyLl9yZWZyZXNoKCl9KX0sX3Jl ZnJlcz0KaDpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5jaGFydC5kZWZpbml0aW9uO2lmKCFlKXJl dHVybjt0aGlzLmZvcm0udGl0bGUoZS5jPQphdGVnb3J5KyIgLSAiK2UudGl0bGUrIjoiKSx0aGlz LmZvcm0udXBkYXRlKGUuc2V0dGluZ3MsdGhpcy5jaGFydC5zZXR0aW5ncyk9Cn19KX0pLGRlZmlu ZSgicGx1Z2luL3ZpZXdzL3R5cGVzIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW1pc2MiXSxm dW5jdGlvbj0KKGUsdCl7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVs dDp7b25jaGFuZ2U6bnVsbCxvbmRibGNsaWNrPQo6bnVsbH0sZXZlbnRzOntjbGljazoiX29uY2xp Y2siLGRibGNsaWNrOiJfb25kYmxjbGljayJ9LGluaXRpYWxpemU6ZnVuY3Rpb249CihuLHIpe3Zh ciBpPTNEdGhpczt0aGlzLmFwcD0zRG4sdGhpcy5vcHRpb25zPTNEZS5tZXJnZShyLHRoaXMub3B0 aW9uc0RlZmF1bD0KdCk7dmFyIHM9M0QkKCc8ZGl2IGNsYXNzPTNEImNoYXJ0cy1ncmlkIi8+Jyk7 cy5hcHBlbmQoZS53cmFwKChuZXcgdC5MYWJlbCh7PQp0aXRsZToiSG93IG1hbnkgZGF0YSBwb2lu dHMgd291bGQgeW91IGxpa2UgdG8gYW5hbHl6ZT8ifSkpLiRlbCkpLHRoaXMubGlicmE9CnJ5PTNE bmV3IHQuUmFkaW9CdXR0b24uVmlldyh7ZGF0YTpbe2xhYmVsOiJGZXcgKDw1MDApIix2YWx1ZToi c21hbGwifSx7bGFiZT0KbDoiU29tZSAoPDEwaykiLHZhbHVlOiJtZWRpdW0ifSx7bGFiZWw6Ik1h bnkgKD4xMGspIix2YWx1ZToibGFyZ2UifV0sb25jaGFuPQpnZTpmdW5jdGlvbihlKXtpLl9maWx0 ZXIoZSl9fSkscy5hcHBlbmQoZS53cmFwKHRoaXMubGlicmFyeS4kZWwpKSx0aGlzLnNldEU9Cmxl bWVudChzKSx0aGlzLl9yZW5kZXIoKSx0aGlzLmxpYnJhcnkudmFsdWUoInNtYWxsIiksdGhpcy5s aWJyYXJ5LnRyaWdnZXIoIj0KY2hhbmdlIil9LHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhp cy4kZWwuZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpO2UhPQo9M0Q9M0R1bmRlZmluZWQmJih0 aGlzLiRlbC5maW5kKCIuY3VycmVudCIpLnJlbW92ZUNsYXNzKCJjdXJyZW50IiksdGhpcy4kZWw9 Ci5maW5kKCIjIitlKS5hZGRDbGFzcygiY3VycmVudCIpKTt2YXIgbj0zRHRoaXMuJGVsLmZpbmQo Ii5jdXJyZW50IikuYXR0cigiaT0KZCIpO3JldHVybiBuPTNEPTNEPTNEdW5kZWZpbmVkP251bGw6 KG4hPTNEdCYmdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wPQp0aW9ucy5vbmNoYW5nZShl KSxuKX0sX2ZpbHRlcjpmdW5jdGlvbihlKXt0aGlzLiRlbC5maW5kKCIuaGVhZGVyIikuaGlkZSgp O3Y9CmFyIHQ9M0R0aGlzLmFwcC50eXBlcy5hdHRyaWJ1dGVzO2Zvcih2YXIgbiBpbiB0KXt2YXIg cj0zRHRbbl0saT0zRHRoaXMuJGVsLj0KZmluZCgiIyIrbikscz0zRHRoaXMuJGVsLmZpbmQoIiN0 eXBlcy1oZWFkZXItIit0aGlzLmNhdGVnb3JpZXNfaW5kZXhbci5jYXRlPQpnb3J5XSksbz0zRHIu a2V5d29yZHN8fCIiO28uaW5kZXhPZihlKT49M0QwPyhpLnNob3coKSxzLnNob3coKSk6aS5oaWRl KCl9fSw9Cl9yZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmNhdGVnb3JpZXM9M0R7fSx0aGlzLmNhdGVn b3JpZXNfaW5kZXg9M0R7fTt2YXIgZT0zRD0KMCx0PTNEdGhpcy5hcHAudHlwZXMuYXR0cmlidXRl cztmb3IodmFyIG4gaW4gdCl7dmFyIHI9M0R0W25dLGk9M0RyLmNhdGVnb3J5PQo7dGhpcy5jYXRl Z29yaWVzW2ldfHwodGhpcy5jYXRlZ29yaWVzW2ldPTNEe30sdGhpcy5jYXRlZ29yaWVzX2luZGV4 W2ldPTNEZSs9CispLHRoaXMuY2F0ZWdvcmllc1tpXVtuXT0zRHJ9Zm9yKHZhciBpIGluIHRoaXMu Y2F0ZWdvcmllcyl7dmFyIHM9M0QkKCc8ZGl2ID0Kc3R5bGU9M0QiY2xlYXI6IGJvdGg7Ii8+Jyk7 cy5hcHBlbmQodGhpcy5fdGVtcGxhdGVfaGVhZGVyKHtpZDoidHlwZXMtaGVhZGVyPQotIit0aGlz LmNhdGVnb3JpZXNfaW5kZXhbaV0sdGl0bGU6aX0pKTtmb3IodmFyIG4gaW4gdGhpcy5jYXRlZ29y aWVzW2ldKXt2YXI9CiByPTNEdGhpcy5jYXRlZ29yaWVzW2ldW25dLG89M0RyLnRpdGxlKyIgKCIr ci5saWJyYXJ5KyIpIjtyLnpvb21hYmxlJiYobz0zRD0KJzxzcGFuIGNsYXNzPTNEImZhIGZhLXNl YXJjaC1wbHVzIi8+JytvKSxzLmFwcGVuZCh0aGlzLl90ZW1wbGF0ZV9pdGVtKHtpZDpuPQosdGl0 bGU6byx1cmw6Y29uZmlnLmFwcF9yb290KyJjaGFydHMvIit0aGlzLmFwcC5jaGFydFBhdGgobikr Ii9sb2dvLnBuZyJ9KSk9Cn10aGlzLiRlbC5hcHBlbmQocyl9fSxfb25jbGljazpmdW5jdGlvbihl KXt2YXIgdD0zRHRoaXMudmFsdWUoKSxuPTNEJChlLnRhcj0KZ2V0KS5jbG9zZXN0KCIuaXRlbSIp LmF0dHIoImlkIik7biE9M0QiIiYmbiYmdCE9M0RuJiZ0aGlzLnZhbHVlKG4pfSxfb25kYmxjPQps aWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy52YWx1ZSgpO3QmJnRoaXMub3B0aW9ucy5vbmRi bGNsaWNrJiZ0aGlzLm9wdGk9Cm9ucy5vbmRibGNsaWNrKHQpfSxfdGVtcGxhdGVfaGVhZGVyOmZ1 bmN0aW9uKGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIj0KIGNsYXNzPTNEImhlYWRlciI+ JysiJmJ1bGw7ICIrZS50aXRsZSsiPGRpdj4ifSxfdGVtcGxhdGVfaXRlbTpmdW5jdGlvbihlKXty PQpldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJpdGVtIj4nKyc8aW1nIGNsYXNz PTNEImltYWdlIiBzcmM9M0QiJys9CmUudXJsKyciPicrJzxkaXYgY2xhc3M9M0QidGl0bGUiPicr ZS50aXRsZSsiPC9kaXY+IisiPGRpdj4ifX0pfSksZGVmaW5lKCJwbD0KdWdpbi92aWV3cy9lZGl0 b3IiLFsibXZjL3VpL3VpLXRhYnMiLCJtdmMvdWkvdWktbWlzYyIsIm12Yy91aS91aS1wb3J0bGV0 IiwiPQp1dGlscy91dGlscyIsInBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbHVnaW4vbW9kZWxzL2dy b3VwIiwicGx1Z2luL3ZpZXdzL2dyb3U9CnAiLCJwbHVnaW4vdmlld3Mvc2V0dGluZ3MiLCJwbHVn aW4vdmlld3MvdHlwZXMiXSxmdW5jdGlvbihlLHQsbixyLGkscyxvLHUsYT0KKXtyZXR1cm4gQmFj a2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oaSxzKXt2YXIgbz0zRHRoaXM7 dGhpcy5hPQpwcD0zRGksdGhpcy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMubWVzc2FnZT0z RG5ldyB0Lk1lc3NhZ2UsdGhpcy5wb3J0bGU9CnQ9M0RuZXcgbi5WaWV3KHtpY29uOiJmYS1iYXIt Y2hhcnQtbyIsdGl0bGU6IkVkaXRvciIsb3BlcmF0aW9uczp7c2F2ZTpuZXcgdD0KLkJ1dHRvbklj b24oe2ljb246ImZhLXNhdmUiLHRvb2x0aXA6IkRyYXcgQ2hhcnQiLHRpdGxlOiJEcmF3IixvbmNs aWNrOmZ1bmN0PQppb24oKXtvLl9zYXZlQ2hhcnQoKX19KSxiYWNrOm5ldyB0LkJ1dHRvbkljb24o e2ljb246ImZhLWNhcmV0LWxlZnQiLHRvb2x0aXA9CjoiUmV0dXJuIHRvIFZpZXdlciIsdGl0bGU6 IkNhbmNlbCIsb25jbGljazpmdW5jdGlvbigpe28uYXBwLmdvKCJ2aWV3ZXIiKSxvLj0KYXBwLnN0 b3JhZ2UubG9hZCgpfX0pfX0pLHRoaXMudHlwZXM9M0RuZXcgYShpLHtvbmNoYW5nZTpmdW5jdGlv bihlKXt2YXIgdD0KPTNEby5hcHAudHlwZXMuZ2V0KGUpO3R8fGNvbnNvbGUuZGVidWcoIkZBSUxF RCAtIEVkaXRvcjo6b25jaGFuZ2UoKSAtIENoYXJ0PQogdHlwZSBub3Qgc3VwcG9ydGVkLiIpLG8u Y2hhcnQuZGVmaW5pdGlvbj0zRHQsby5jaGFydC5zZXR0aW5ncy5jbGVhcigpLG8uY2g9CmFydC5z ZXQoe3R5cGU6ZX0pLG8uY2hhcnQuc2V0KCJtb2RpZmllZCIsITApLGNvbnNvbGUuZGVidWcoIkVk aXRvcjo6b25jaGFuZz0KZSgpIC0gU3dpdGNoZWQgY2hhcnQgdHlwZS4iKX0sb25kYmxjbGljazpm dW5jdGlvbihlKXtvLl9zYXZlQ2hhcnQoKX19KSx0aGlzPQoudGFicz0zRG5ldyBlLlZpZXcoe3Rp dGxlX25ldzoiQWRkIERhdGEiLG9ubmV3OmZ1bmN0aW9uKCl7dmFyIGU9M0RvLl9hZGRHcm89CnVw TW9kZWwoKTtvLnRhYnMuc2hvdyhlLmlkKX19KSx0aGlzLnRpdGxlPTNEbmV3IHQuSW5wdXQoe3Bs YWNlaG9sZGVyOiJDaGFydD0KIHRpdGxlIixvbmNoYW5nZTpmdW5jdGlvbigpe28uY2hhcnQuc2V0 KCJ0aXRsZSIsby50aXRsZS52YWx1ZSgpKX19KTt2YXIgZj0KPTNEJCgiPGRpdi8+Iik7Zi5hcHBl bmQoci53cmFwKChuZXcgdC5MYWJlbCh7dGl0bGU6IlByb3ZpZGUgYSBjaGFydCB0aXRsZToiPQp9 KSkuJGVsKSksZi5hcHBlbmQoci53cmFwKHRoaXMudGl0bGUuJGVsKSksZi5hcHBlbmQoci53cmFw KHRoaXMudHlwZXMuJGVsKSk9Cix0aGlzLnRhYnMuYWRkKHtpZDoibWFpbiIsdGl0bGU6IlN0YXJ0 IiwkZWw6Zn0pLHRoaXMuc2V0dGluZ3M9M0RuZXcgdSh0aGlzLj0KYXBwKSx0aGlzLnRhYnMuYWRk KHtpZDoic2V0dGluZ3MiLHRpdGxlOiJDb25maWd1cmF0aW9uIiwkZWw6dGhpcy5zZXR0aW5ncy4k PQplbH0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCksdGhpcy5wb3J0bGV0 LmFwcGVuZCh0aGlzLnRhYnMuJGU9CmwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQuJGVs KSx0aGlzLnRhYnMuaGlkZU9wZXJhdGlvbigiYmFjayIpO3ZhciBvPQo9M0R0aGlzO3RoaXMuY2hh cnQub24oImNoYW5nZTp0aXRsZSIsZnVuY3Rpb24oZSl7by5fcmVmcmVzaFRpdGxlKCl9KSx0aGlz LmM9CmhhcnQub24oImNoYW5nZTp0eXBlIixmdW5jdGlvbihlKXtvLnR5cGVzLnZhbHVlKGUuZ2V0 KCJ0eXBlIikpfSksdGhpcy5jaGFydD0KLm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVzZXRD aGFydCgpfSksdGhpcy5hcHAuY2hhcnQub24oInJlZHJhdyIsZnVuY3RpPQpvbihlKXtvLnBvcnRs ZXQuc2hvd09wZXJhdGlvbigiYmFjayIpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXBzLm9uKCJhZGQi LGZ1bmM9CnRpb24oZSl7by5fYWRkR3JvdXAoZSl9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub24o InJlbW92ZSIsZnVuY3Rpb24oZSl7by5fcj0KZW1vdmVHcm91cChlKX0pLHRoaXMuYXBwLmNoYXJ0 Lmdyb3Vwcy5vbigicmVzZXQiLGZ1bmN0aW9uKGUpe28uX3JlbW92ZUFsbEdyPQpvdXBzKCl9KSx0 aGlzLmFwcC5jaGFydC5ncm91cHMub24oImNoYW5nZTprZXkiLGZ1bmN0aW9uKGUpe28uX3JlZnJl c2hHcm91cEs9CmV5KCl9KSx0aGlzLl9yZXNldENoYXJ0KCl9LHNob3c6ZnVuY3Rpb24oKXt0aGlz LiRlbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKT0Ke3RoaXMuJGVsLmhpZGUoKX0sX3JlZnJlc2hU aXRsZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5jaGFydC5nZXQoInRpdGxlIik7PQp0aGlzLnBv cnRsZXQudGl0bGUoZSksdGhpcy50aXRsZS52YWx1ZShlKX0sX3JlZnJlc2hHcm91cEtleTpmdW5j dGlvbigpe3ZhciA9CmU9M0R0aGlzLHQ9M0QwO3RoaXMuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rp b24obil7dmFyIHI9M0RuLmdldCgia2V5IiwiIik7cj0KPTNEPTNEIiImJihyPTNEIkRhdGEgbGFi ZWwiKSxlLnRhYnMudGl0bGUobi5pZCwrK3QrIjogIityKX0pfSxfYWRkR3JvdXBNb2RlPQpsOmZ1 bmN0aW9uKCl7dmFyIGU9M0RuZXcgcyh7aWQ6ci51dWlkKCl9KTtyZXR1cm4gdGhpcy5jaGFydC5n cm91cHMuYWRkKGUpLGU9Cn0sX2FkZEdyb3VwOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcyxuPTNE bmV3IG8odGhpcy5hcHAse2dyb3VwOmV9KTt0aGlzLnRhYj0Kcy5hZGQoe2lkOmUuaWQsJGVsOm4u JGVsLG9uZGVsOmZ1bmN0aW9uKCl7dC5jaGFydC5ncm91cHMucmVtb3ZlKGUuaWQpfX0pLHRoPQpp cy5fcmVmcmVzaEdyb3VwS2V5KCksdGhpcy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMCl9LF9yZW1v dmVHcm91cDpmdW5jdGlvbig9CmUpe3RoaXMudGFicy5kZWwoZS5pZCksdGhpcy5fcmVmcmVzaEdy b3VwS2V5KCksdGhpcy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMD0KKX0sX3JlbW92ZUFsbEdyb3Vw czpmdW5jdGlvbihlKXt0aGlzLnRhYnMuZGVsUmVtb3ZhYmxlKCl9LF9yZXNldENoYXJ0OmZ1bmN0 PQppb24oKXt0aGlzLmNoYXJ0LnNldCgiaWQiLHIudXVpZCgpKSx0aGlzLmNoYXJ0LnNldCgidHlw ZSIsIm52ZDNfYmFyIiksdGhpcy49CmNoYXJ0LnNldCgiZGF0YXNldF9pZCIsdGhpcy5hcHAub3B0 aW9ucy5jb25maWcuZGF0YXNldF9pZCksdGhpcy5jaGFydC5zZXQoIj0KdGl0bGUiLCJOZXcgQ2hh cnQiKSx0aGlzLnBvcnRsZXQuaGlkZU9wZXJhdGlvbigiYmFjayIpfSxfc2F2ZUNoYXJ0OmZ1bmN0 aW9uPQooKXt0aGlzLmNoYXJ0LnNldCh7dHlwZTp0aGlzLnR5cGVzLnZhbHVlKCksdGl0bGU6dGhp cy50aXRsZS52YWx1ZSgpLGRhdGU6ci49CnRpbWUoKX0pO2lmKHRoaXMuY2hhcnQuZ3JvdXBzLmxl bmd0aD0zRD0zRDApe3RoaXMubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6Ij0KUGxlYXNlIHNlbGVj dCBkYXRhIGNvbHVtbnMgYmVmb3JlIGRyYXdpbmcgdGhlIGNoYXJ0LiJ9KTt2YXIgZT0zRHRoaXMu X2FkZEdyPQpvdXBNb2RlbCgpO3RoaXMudGFicy5zaG93KGUuaWQpO3JldHVybn12YXIgdD0zRHRo aXMsbj0zRCEwLGk9M0R0aGlzLmNoYXJ0LmQ9CmVmaW5pdGlvbjt0aGlzLmNoYXJ0Lmdyb3Vwcy5l YWNoKGZ1bmN0aW9uKGUpe2lmKCFuKXJldHVybjtmb3IodmFyIHIgaW4gaS5jbz0KbHVtbnMpaWYo ZS5hdHRyaWJ1dGVzW3JdPTNEPTNEIm51bGwiKXt0Lm1lc3NhZ2UudXBkYXRlKHtzdGF0dXM6ImRh bmdlciIsbWVzPQpzYWdlOiJUaGlzIGNoYXJ0IHR5cGUgcmVxdWlyZXMgY29sdW1uIHR5cGVzIG5v dCBmb3VuZCBpbiB5b3VyIHRhYnVsYXIgZmlsZS49CiJ9KSx0LnRhYnMuc2hvdyhlLmlkKSxuPTNE ITE7cmV0dXJufX0pO2lmKCFuKXJldHVybjt0aGlzLmFwcC5nbygidmlld2VyIik7dj0KYXIgdD0z RHRoaXM7dGhpcy5hcHAuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpe3QuYXBwLnN0b3JhZ2Uu c2F2ZSgpLHQuY2hhPQpydC50cmlnZ2VyKCJyZWRyYXciKX0pfX0pfSksZGVmaW5lKCJwbHVnaW4v bW9kZWxzL2NvbmZpZyIsW10sZnVuY3Rpb24oKXtyZXQ9CnVybiBCYWNrYm9uZS5Nb2RlbC5leHRl bmQoe2RlZmF1bHRzOntxdWVyeV9saW1pdDoxZTQscXVlcnlfdGltZW91dDoxMDB9fSl9KT0KLGRl ZmluZSgicGx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhdWx0IixbXSxmdW5jdGlvbigpe3JldHVybnt0 aXRsZToiIixjYXRlZ29yPQp5OiIiLGxpYnJhcnk6IiIsdGFnOiIiLGtleXdvcmRzOiIiLHNldHRp bmdzOntzZXBhcmF0b3JfeDp7dGl0bGU6IlggYXhpcyIsdHk9CnBlOiJzZXBhcmF0b3IifSx4X2F4 aXNfbGFiZWw6e3RpdGxlOiJBeGlzIGxhYmVsIixpbmZvOiJQcm92aWRlIGEgbGFiZWwgZm9yID0K dGhlIGF4aXMuIix0eXBlOiJ0ZXh0Iixpbml0OiJYLWF4aXMiLHBsYWNlaG9sZGVyOiJBeGlzIGxh YmVsIn0seF9heGlzX3R5cGU6PQp7dGl0bGU6IkF4aXMgdmFsdWUgdHlwZSIsaW5mbzoiU2VsZWN0 IHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBheGlzLiIsdHlwZToic2U9CmxlY3QiLGluaXQ6ImF1dG8i LGRhdGE6W3tsYWJlbDoiLS0gRG8gbm90IHNob3cgdmFsdWVzIC0tIix2YWx1ZToiaGlkZSIsb3Bl cj0KYXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJBdXRvIix2YWx1 ZToiYXV0byIsb3BlcmF0aW9uczp7PQpoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVs OiJGbG9hdCIsdmFsdWU6ImYiLG9wZXJhdGlvbnM6e3Nob3c6WyJ4X2E9Cnhpc19wcmVjaXNpb24i XX19LHtsYWJlbDoiRXhwb25lbnQiLHZhbHVlOiJlIixvcGVyYXRpb25zOntzaG93OlsieF9heGlz X3ByZT0KY2lzaW9uIl19fSx7bGFiZWw6IkludGVnZXIiLHZhbHVlOiJkIixvcGVyYXRpb25zOnto aWRlOlsieF9heGlzX3ByZWNpc2lvbiJdPQp9fSx7bGFiZWw6IlBlcmNlbnRhZ2UiLHZhbHVlOiJw IixvcGVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2w9CmFiZWw6IlNJLXBy ZWZpeCIsdmFsdWU6InMiLG9wZXJhdGlvbnM6e2hpZGU6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fV19 LHhfYXhpcz0KX3ByZWNpc2lvbjp7dGl0bGU6IkF4aXMgdGljayBmb3JtYXQiLGluZm86IlNlbGVj dCB0aGUgdGljayBmb3JtYXQgZm9yIHRoZSBhPQp4aXMuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjEi LGRhdGE6W3tsYWJlbDoiMC4wMDAwMSIsdmFsdWU6IjUifSx7bGFiZWw6IjAuMDA9CjAxIix2YWx1 ZToiNCJ9LHtsYWJlbDoiMC4wMDEiLHZhbHVlOiIzIn0se2xhYmVsOiIwLjAxIix2YWx1ZToiMiJ9 LHtsYWJlbDoiMD0KLjEiLHZhbHVlOiIxIn0se2xhYmVsOiIxIix2YWx1ZToiMCJ9XX0sc2VwYXJh dG9yX3k6e3RpdGxlOiJZIGF4aXMiLHR5cGU6InNlPQpwYXJhdG9yIn0seV9heGlzX2xhYmVsOnt0 aXRsZToiQXhpcyBsYWJlbCIsaW5mbzoiUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUgYXg9CmlzLiIs dHlwZToidGV4dCIsaW5pdDoiWS1heGlzIixwbGFjZWhvbGRlcjoiQXhpcyBsYWJlbCJ9LHlfYXhp c190eXBlOnt0aXRsZT0KOiJBeGlzIHZhbHVlIHR5cGUiLGluZm86IlNlbGVjdCB0aGUgdmFsdWUg dHlwZSBvZiB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIsPQppbml0OiJhdXRvIixkYXRhOlt7bGFi ZWw6Ii0tIERvIG5vdCBzaG93IHZhbHVlcyAtLSIsdmFsdWU6ImhpZGUiLG9wZXJhdGlvbnM9Cjp7 aGlkZTpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiQXV0byIsdmFsdWU6ImF1dG8iLG9w ZXJhdGlvbnM6e2hpZGU6Wz0KInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiRmxvYXQiLHZh bHVlOiJmIixvcGVyYXRpb25zOntzaG93OlsieV9heGlzX3ByPQplY2lzaW9uIl19fSx7bGFiZWw6 IkV4cG9uZW50Iix2YWx1ZToiZSIsb3BlcmF0aW9uczp7c2hvdzpbInlfYXhpc19wcmVjaXNpb249 CiJdfX0se2xhYmVsOiJJbnRlZ2VyIix2YWx1ZToiZCIsb3BlcmF0aW9uczp7aGlkZTpbInlfYXhp c19wcmVjaXNpb24iXX19LHtsYT0KYmVsOiJQZXJjZW50YWdlIix2YWx1ZToicCIsb3BlcmF0aW9u czp7c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiPQpTSS1wcmVmaXgiLHZhbHVl OiJzIixvcGVyYXRpb25zOntoaWRlOlsieV9heGlzX3ByZWNpc2lvbiJdfX1dfSx5X2F4aXNfcHJl Y2k9CnNpb246e3RpdGxlOiJBeGlzIHRpY2sgZm9ybWF0IixpbmZvOiJTZWxlY3QgdGhlIHRpY2sg Zm9ybWF0IGZvciB0aGUgYXhpcy4iLD0KdHlwZToic2VsZWN0Iixpbml0OiIxIixkYXRhOlt7bGFi ZWw6IjAuMDAwMDEiLHZhbHVlOiI1In0se2xhYmVsOiIwLjAwMDEiLHZhPQpsdWU6IjQifSx7bGFi ZWw6IjAuMDAxIix2YWx1ZToiMyJ9LHtsYWJlbDoiMC4wMSIsdmFsdWU6IjIifSx7bGFiZWw6IjAu MSIsdmE9Cmx1ZToiMSJ9LHtsYWJlbDoiMSIsdmFsdWU6IjAifV19LHNlcGFyYXRvcl9sZWdlbmQ6 e3RpdGxlOiJPdGhlcnMiLHR5cGU6InNlcD0KYXJhdG9yIn0sc2hvd19sZWdlbmQ6e3RpdGxlOiJT aG93IGxlZ2VuZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gYWRkIGEgbGVnPQplbmQ/Iix0eXBl OiJyYWRpb2J1dHRvbiIsaW5pdDoidHJ1ZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVl In0se2xhYmU9Cmw6Ik5vIix2YWx1ZToiZmFsc2UifV19LHVzZV9wYW5lbHM6e3RpdGxlOiJVc2Ug bXVsdGktcGFuZWxzIixpbmZvOiJXb3VsZCB5bz0KdSBsaWtlIHRvIHNlcGFyYXRlIHlvdXIgZGF0 YSBpbnRvIGluZGl2aWR1YWwgcGFuZWxzPyIsdHlwZToicmFkaW9idXR0b24iLGluPQppdDoiZmFs c2UiLGRhdGE6W3tsYWJlbDoiWWVzIix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJm YWxzZSJ9XX19fX09CiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuKG5ldyBEYXRl KHQsZSsxLDApKS5nZXREYXRlKCl9ZnVuY3Rpb24gbj0KKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24o cixpLHMpe3ZhciBvPTNEZShyKSx1PTNEW107bzxyJiZ0KG8pO2lmKHM+MSl3aGlsZShvPQo8aSl7 dmFyIGE9M0RuZXcgRGF0ZSgrbyk7bihhKSVzPTNEPTNEPTNEMCYmdS5wdXNoKGEpLHQobyl9ZWxz ZSB3aGlsZShvPGkpdS49CnB1c2gobmV3IERhdGUoK28pKSx0KG8pO3JldHVybiB1fX12YXIgZT0z RHdpbmRvdy5udnx8e307ZS52ZXJzaW9uPTNEIjEuMS4xNT0KYiIsZS5kZXY9M0QhMCx3aW5kb3cu bnY9M0RlLGUudG9vbHRpcD0zRGUudG9vbHRpcHx8e30sZS51dGlscz0zRGUudXRpbHN8fHt9PQos ZS5tb2RlbHM9M0RlLm1vZGVsc3x8e30sZS5jaGFydHM9M0R7fSxlLmdyYXBocz0zRFtdLGUubG9n cz0zRHt9LGUuZGlzcGF0Y2g9Cj0zRGQzLmRpc3BhdGNoKCJyZW5kZXJfc3RhcnQiLCJyZW5kZXJf ZW5kIiksZS5kZXYmJihlLmRpc3BhdGNoLm9uKCJyZW5kZXJfcz0KdGFydCIsZnVuY3Rpb24odCl7 ZS5sb2dzLnN0YXJ0VGltZT0zRCsobmV3IERhdGUpfSksZS5kaXNwYXRjaC5vbigicmVuZGVyX2Vu PQpkIixmdW5jdGlvbih0KXtlLmxvZ3MuZW5kVGltZT0zRCsobmV3IERhdGUpLGUubG9ncy50b3Rh bFRpbWU9M0RlLmxvZ3MuZW5kVGk9Cm1lLWUubG9ncy5zdGFydFRpbWUsZS5sb2coInRvdGFsIixl LmxvZ3MudG90YWxUaW1lKX0pKSxlLmxvZz0zRGZ1bmN0aW9uKCl7aT0KZihlLmRldiYmY29uc29s ZS5sb2cmJmNvbnNvbGUubG9nLmFwcGx5KWNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1l bnRzPQopO2Vsc2UgaWYoZS5kZXYmJnR5cGVvZiBjb25zb2xlLmxvZz0zRD0zRCJmdW5jdGlvbiIm JkZ1bmN0aW9uLnByb3RvdHlwZS5iaW49CmQpe3ZhciB0PTNERnVuY3Rpb24ucHJvdG90eXBlLmJp bmQuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlKTt0LmFwcGx5KGNvbnNvbD0KZSxhcmd1bWVudHMp fXJldHVybiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXX0sZS5yZW5kZXI9M0RmdW5jdGlv bihuKXtuPQo9M0RufHwxLGUucmVuZGVyLmFjdGl2ZT0zRCEwLGUuZGlzcGF0Y2gucmVuZGVyX3N0 YXJ0KCksc2V0VGltZW91dChmdW5jdGlvbig9Cil7dmFyIHQscjtmb3IodmFyIGk9M0QwO2k8biYm KHI9M0RlLnJlbmRlci5xdWV1ZVtpXSk7aSsrKXQ9M0RyLmdlbmVyYXRlKCksdD0KeXBlb2Ygci5j YWxsYmFjaz0zRD0zRHR5cGVvZiBGdW5jdGlvbiYmci5jYWxsYmFjayh0KSxlLmdyYXBocy5wdXNo KHQpO2UucmVuPQpkZXIucXVldWUuc3BsaWNlKDAsaSksZS5yZW5kZXIucXVldWUubGVuZ3RoP3Nl dFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTo9CihlLmRpc3BhdGNoLnJlbmRlcl9lbmQoKSxl LnJlbmRlci5hY3RpdmU9M0QhMSl9LDApfSxlLnJlbmRlci5hY3RpdmU9M0QhMSxlLj0KcmVuZGVy LnF1ZXVlPTNEW10sZS5hZGRHcmFwaD0zRGZ1bmN0aW9uKHQpe3R5cGVvZiBhcmd1bWVudHNbMF09 M0Q9M0R0eXBlb2YgPQpGdW5jdGlvbiYmKHQ9M0R7Z2VuZXJhdGU6YXJndW1lbnRzWzBdLGNhbGxi YWNrOmFyZ3VtZW50c1sxXX0pLGUucmVuZGVyLnF1ZXU9CmUucHVzaCh0KSxlLnJlbmRlci5hY3Rp dmV8fGUucmVuZGVyKCl9LGUuaWRlbnRpdHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZX0sZT0KLnN0 cmlwPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKFxzfCYpL2csIiIpfSxkMy50aW1l Lm1vbnRoRW5kPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigp LGUuZ2V0TW9udGgoKSwwKX0sZDMudGltZS5tb250aEVuZHM9Cj0zRG4oZDMudGltZS5tb250aEVu ZCxmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrMSksZS5zZXREYXRlKD0K dChlLmdldE1vbnRoKCkrMSxlLmdldEZ1bGxZZWFyKCkpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUu Z2V0TW9udGgoKX0pLGUuaW50PQplcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKCl7ZnVuY3Rp b24gYyhvKXtvLmVhY2goZnVuY3Rpb24obyl7ZnVuY3Rpb24gZyg9Cil7dmFyIGU9M0RkMy5tb3Vz ZSh0aGlzKSxuPTNEZVswXSxyPTNEZVsxXSxvPTNEITAsYT0zRCExO2wmJihuPTNEZDMuZXZlbnQu bz0KZmZzZXRYLHI9M0RkMy5ldmVudC5vZmZzZXRZLGQzLmV2ZW50LnRhcmdldC50YWdOYW1lIT0z RD0zRCJzdmciJiYobz0zRCExKSxkPQozLmV2ZW50LnRhcmdldC5jbGFzc05hbWUuYmFzZVZhbC5t YXRjaCgibnYtbGVnZW5kIikmJihhPTNEITApKSxvJiYobi09M0RpLmw9CmVmdCxyLT0zRGkudG9w KTtpZihuPDB8fHI8MHx8bj5wfHxyPmR8fGQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQmJmQzLmV2ZW50 LnJlbD0KYXRlZFRhcmdldC5vd25lclNWR0VsZW1lbnQ9M0Q9M0Q9M0R1bmRlZmluZWR8fGEpe2lm KGwmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnPQpldCYmZDMuZXZlbnQucmVsYXRlZFRhcmdldC5vd25l clNWR0VsZW1lbnQ9M0Q9M0Q9M0R1bmRlZmluZWQmJmQzLmV2ZW50LnJlbGE9CnRlZFRhcmdldC5j bGFzc05hbWUubWF0Y2godC5udlBvaW50ZXJFdmVudHNDbGFzcykpcmV0dXJuO3UuZWxlbWVudE1v dXNlb3V0KD0Ke21vdXNlWDpuLG1vdXNlWTpyfSksYy5yZW5kZXJHdWlkZUxpbmUobnVsbCk7cmV0 dXJufXZhciBmPTNEcy5pbnZlcnQobik7dS5lPQpsZW1lbnRNb3VzZW1vdmUoe21vdXNlWDpuLG1v dXNlWTpyLHBvaW50WFZhbHVlOmZ9KSxkMy5ldmVudC50eXBlPTNEPTNEPTNEImQ9CmJsY2xpY2si JiZ1LmVsZW1lbnREYmxjbGljayh7bW91c2VYOm4sbW91c2VZOnIscG9pbnRYVmFsdWU6Zn0pfXZh ciBoPTNEZDMucz0KZWxlY3QodGhpcykscD0zRG58fDk2MCxkPTNEcnx8NDAwLHY9M0RoLnNlbGVj dEFsbCgiZy5udi13cmFwLm52LWludGVyYWN0aXZlPQpMaW5lTGF5ZXIiKS5kYXRhKFtvXSksbT0z RHYuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIiBudi13cmFwIG52LWk9Cm50ZXJh Y3RpdmVMaW5lTGF5ZXIiKTttLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtaW50ZXJhY3Rp dmVHdWlkZUxpbmUiKT0KO2lmKCFmKXJldHVybjtmLm9uKCJtb3VzZW1vdmUiLGcsITApLm9uKCJt b3VzZW91dCIsZywhMCkub24oImRibGNsaWNrIixnKSxjPQoucmVuZGVyR3VpZGVMaW5lPTNEZnVu Y3Rpb24odCl7aWYoIWEpcmV0dXJuO3ZhciBuPTNEdi5zZWxlY3QoIi5udi1pbnRlcmFjdGk9CnZl R3VpZGVMaW5lIikuc2VsZWN0QWxsKCJsaW5lIikuZGF0YSh0IT0zRG51bGw/W2UudXRpbHMuTmFO dG9aZXJvKHQpXTpbXSxTdD0KcmluZyk7bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNs YXNzIiwibnYtZ3VpZGVsaW5lIikuYXR0cigieDEiLGZ1bmN0PQppb24oZSl7cmV0dXJuIGV9KS5h dHRyKCJ4MiIsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5hdHRyKCJ5MSIsZCkuYXR0cigieTIiLDA9 Ciksbi5leGl0KCkucmVtb3ZlKCl9fSl9dmFyIHQ9M0RlLm1vZGVscy50b29sdGlwKCksbj0zRG51 bGwscj0zRG51bGwsaT0zRHtsZT0KZnQ6MCx0b3A6MH0scz0zRGQzLnNjYWxlLmxpbmVhcigpLG89 M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuZGlzcGF0Y2goImVsPQplbWVudE1vdXNlbW92ZSIs ImVsZW1lbnRNb3VzZW91dCIsImVsZW1lbnREYmxjbGljayIpLGE9M0QhMCxmPTNEbnVsbCxsPTNE bmE9CnZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSE9M0Q9M0QtMTtyZXR1cm4gYy5k aXNwYXRjaD0zRHUsYy50b29sdGlwPQo9M0R0LGMubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0KPTNEInVuZGVmaW5lZCI/ ZS50b3A6aS50b3AsaS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6 aS5sPQplZnQsYyk6aX0sYy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhuPTNEZSxjKTpufSxjLmhlaWc9Cmh0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHI9M0RlLGMpOnJ9LGMueFNjYWxlPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGUsYyk6c30sYy5zaG93R3VpZGVMaW5lPTNEZnVuY3Rpb24oZSl7 cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsYyk6YX0sYy5zdmdDb250YWluZXI9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyhmPTNEZSxjKTpmfSxjfSxlLmlu dGVyYWN0aXZlQmlzZWN0PTNEZnVuY3Rpb24oZSx0LG4pe2lmKCFlIGluc3Rhbj0KY2VvZiBBcnJh eSlyZXR1cm4gbnVsbDt0eXBlb2YgbiE9M0QiZnVuY3Rpb24iJiYobj0zRGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuPQp4fSk7dmFyIHI9M0RkMy5iaXNlY3RvcihuKS5sZWZ0LGk9M0RkMy5tYXgoWzAs cihlLHQpLTFdKSxzPTNEbihlW2ldLGkpO3R5cGU9Cm9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9 M0RpKTtpZihzPTNEPTNEPTNEdClyZXR1cm4gaTt2YXIgbz0zRGQzLm1pbihbaSsxLD0KZS5sZW5n dGgtMV0pLHU9M0RuKGVbb10sbyk7cmV0dXJuIHR5cGVvZiB1PTNEPTNEInVuZGVmaW5lZCImJih1 PTNEbyksTWF0aC5hPQpicyh1LXQpPj0zRE1hdGguYWJzKHMtdCk/aTpvfSxlLm5lYXJlc3RWYWx1 ZUluZGV4PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPQo9M0RJbmZpbml0eSxpPTNEbnVsbDtyZXR1 cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUscyl7dmFyIG89M0RNYXRoLmFicyh0LWUpO289Cjw9M0Ry JiZvPG4mJihyPTNEbyxpPTNEcyl9KSxpfSxmdW5jdGlvbigpe3dpbmRvdy5udi50b29sdGlwPTNE e30sd2luZG93Lm52Lj0KbW9kZWxzLnRvb2x0aXA9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHkoKXtp ZihhKXt2YXIgZT0zRGQzLnNlbGVjdChhKTtlLm5vZGUoPQopLnRhZ05hbWUhPTNEPTNEInN2ZyIm JihlPTNEZS5zZWxlY3QoInN2ZyIpKTt2YXIgdD0zRGUubm9kZSgpP2UuYXR0cigidmlld0I9Cm94 Iik6bnVsbDtpZih0KXt0PTNEdC5zcGxpdCgiICIpO3ZhciBuPTNEcGFyc2VJbnQoZS5zdHlsZSgi d2lkdGgiKSkvdFsyXTtsLj0KbGVmdD0zRGwubGVmdCpuLGwudG9wPTNEbC50b3Aqbn19fWZ1bmN0 aW9uIGIoZSl7dmFyIHQ7YT90PTNEZDMuc2VsZWN0KGEpOnQ9Cj0zRGQzLnNlbGVjdCgiYm9keSIp O3ZhciBuPTNEdC5zZWxlY3QoIi5udnRvb2x0aXAiKTtyZXR1cm4gbi5ub2RlKCk9M0Q9M0Q9Cj0z RG51bGwmJihuPTNEdC5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibnZ0b29sdGlwICIrKHU/ dToieHktdG9vbHRpcCIpKT0KLmF0dHIoImlkIixoKSksbi5ub2RlKCkuaW5uZXJIVE1MPTNEZSxu LnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKS5zdHlsPQplKCJvcGFjaXR5IiwwKSxuLnNl bGVjdEFsbCgiZGl2LCB0YWJsZSwgdGQsIHRyIikuY2xhc3NlZChwLCEwKSxuLmNsYXNzZWQocCw9 CiEwKSxuLm5vZGUoKX1mdW5jdGlvbiB3KCl7aWYoIWMpcmV0dXJuO2lmKCFnKG4pKXJldHVybjt5 KCk7dmFyIHQ9M0RsLmxlZnQsdT0KPTNEbyE9M0RudWxsP286bC50b3AsaD0zRGIobShuKSk7Zj0z RGg7aWYoYSl7dmFyIHA9M0RhLmdldEVsZW1lbnRzQnlUYWdOYW1lPQooInN2ZyIpWzBdLGQ9M0Rw P3AuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PTNE e2w9CmVmdDowLHRvcDowfTtpZihwKXt2YXIgRT0zRHAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCks Uz0zRGEuZ2V0Qm91bmRpbmdDbGllbj0KdFJlY3QoKSx4PTNERS50b3A7aWYoeDwwKXt2YXIgVD0z RGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7eD0zRE1hdGguYWJzKHgpPQo+VC5oZWlnaHQ/MDp4 fXYudG9wPTNETWF0aC5hYnMoeC1TLnRvcCksdi5sZWZ0PTNETWF0aC5hYnMoRS5sZWZ0LVMubGVm dCl9dCs9Cj0zRGEub2Zmc2V0TGVmdCt2LmxlZnQtMiphLnNjcm9sbExlZnQsdSs9M0RhLm9mZnNl dFRvcCt2LnRvcC0yKmEuc2Nyb2xsVG9wfT0KcmV0dXJuIHMmJnM+MCYmKHU9M0RNYXRoLmZsb29y KHUvcykqcyksZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb24oW3QsdV0sPQpyLGksaCksd312 YXIgdD0zRG51bGwsbj0zRG51bGwscj0zRCJ3IixpPTNENTAscz0zRDI1LG89M0RudWxsLHU9M0Ru dWxsLGE9M0Q9Cm51bGwsZj0zRG51bGwsbD0zRHtsZWZ0Om51bGwsdG9wOm51bGx9LGM9M0QhMCxo PTNEIm52dG9vbHRpcC0iK01hdGguZmxvb3IoTT0KYXRoLnJhbmRvbSgpKjFlNSkscD0zRCJudi1w b2ludGVyLWV2ZW50cy1ub25lIixkPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sPQp2PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGV9LG09M0RmdW5jdGlvbihlKXtpZih0IT0zRG51bGwpcmV0dXJuIHQ7 aWYoZT0zRD0zRG49CnVsbClyZXR1cm4iIjt2YXIgbj0zRGQzLnNlbGVjdChkb2N1bWVudC5jcmVh dGVFbGVtZW50KCJ0YWJsZSIpKSxyPTNEbi5zZWxlYz0KdEFsbCgidGhlYWQiKS5kYXRhKFtlXSku ZW50ZXIoKS5hcHBlbmQoInRoZWFkIik7ci5hcHBlbmQoInRyIikuYXBwZW5kKCJ0ZCIpPQouYXR0 cigiY29sc3BhbiIsMykuYXBwZW5kKCJzdHJvbmciKS5jbGFzc2VkKCJ4LXZhbHVlIiwhMCkuaHRt bCh2KGUudmFsdWUpKTs9CnZhciBpPTNEbi5zZWxlY3RBbGwoInRib2R5IikuZGF0YShbZV0pLmVu dGVyKCkuYXBwZW5kKCJ0Ym9keSIpLHM9M0RpLnNlbGVjdD0KQWxsKCJ0ciIpLmRhdGEoZnVuY3Rp b24oZSl7cmV0dXJuIGUuc2VyaWVzfSkuZW50ZXIoKS5hcHBlbmQoInRyIikuY2xhc3NlZCgiPQpo aWdobGlnaHQiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhpZ2hsaWdodH0pO3MuYXBwZW5kKCJ0ZCIp LmNsYXNzZWQoImxlZ2VuZC09CmNvbG9yLWd1aWRlIiwhMCkuYXBwZW5kKCJkaXYiKS5zdHlsZSgi YmFja2dyb3VuZC1jb2xvciIsZnVuY3Rpb24oZSl7cmV0dXJuID0KZS5jb2xvcn0pLHMuYXBwZW5k KCJ0ZCIpLmNsYXNzZWQoImtleSIsITApLmh0bWwoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSks PQpzLmFwcGVuZCgidGQiKS5jbGFzc2VkKCJ2YWx1ZSIsITApLmh0bWwoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZChlLnZhbHVlLHQpfSk9CixzLnNlbGVjdEFsbCgidGQiKS5lYWNoKGZ1bmN0aW9uKGUp e2lmKGUuaGlnaGxpZ2h0KXt2YXIgdD0zRGQzLnNjYWxlLmxpbmVhcj0KKCkuZG9tYWluKFswLDFd KS5yYW5nZShbIiNmZmYiLGUuY29sb3JdKSxuPTNELjY7ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJi b3JkPQplci1ib3R0b20tY29sb3IiLHQobikpLnN0eWxlKCJib3JkZXItdG9wLWNvbG9yIix0KG4p KX19KTt2YXIgbz0zRG4ubm9kZSgpLm89CnV0ZXJIVE1MO3JldHVybiBlLmZvb3RlciE9M0Q9M0R1 bmRlZmluZWQmJihvKz0zRCI8ZGl2IGNsYXNzPTNEJ2Zvb3Rlcic+IitlLj0KZm9vdGVyKyI8L2Rp dj4iKSxvfSxnPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2VyaWVzJiZlLnNlcmllcy5sZW5n dGg+MD8hPQowOiExfTtyZXR1cm4gdy5udlBvaW50ZXJFdmVudHNDbGFzcz0zRHAsdy5jb250ZW50 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8odD0zRGUsdyk6dH0sdy50 b29sdGlwRWxlbT0zRGZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHcuY29udGVudEdlbj0KZXJhdG9yPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0 aW9uIiYmKG09Cj0zRGUpLHcpOm19LHcuZGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhuPTNEZSx3KTpufSx3LmdyYT0Kdml0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3LmRpc3RhbmNlPTNEZnVuY3RpPQpvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdyk6aX0sdy5zbmFwRGlzdGFuY2U9M0RmdW5j dGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSx3KTpzfSx3LmNsYXNzZXM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyh1PTNEZSx3KTp1fSx3LmNo YXJ0Q29udGFpbmVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYT0z RGUsdyk6YX0sdy5wb3NpdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhsLmxlZnQ9M0R0eXA9CmVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmwubGVmdCxs LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj0KP2UudG9wOmwudG9wLHcpOmx9LHcu Zml4ZWRUb3A9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsPQp3 KTpvfSx3LmVuYWJsZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0z RGUsdyk6Y30sdy52YWx1ZUY9Cm9ybWF0dGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKD0KZD0zRGUpLHcpOmR9LHcuaGVh ZGVyRm9ybWF0dGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVv PQpmIGU9M0Q9M0QiZnVuY3Rpb24iJiYodj0zRGUpLHcpOnZ9LHcuaWQ9M0RmdW5jdGlvbigpe3Jl dHVybiBofSx3fSxlLnRvb2x0aXA9Ci5zaG93PTNEZnVuY3Rpb24odCxuLHIsaSxzLG8pe3ZhciB1 PTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzcz0KTmFtZT0zRCJudnRvb2x0 aXAgIisobz9vOiJ4eS10b29sdGlwIik7dmFyIGE9M0RzO2lmKCFzfHxzLnRhZ05hbWUubWF0Y2go L2d8PQpzdmcvaSkpYT0zRGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07 dS5zdHlsZS5sZWZ0PTNEMCx1LnN0eWw9CmUudG9wPTNEMCx1LnN0eWxlLm9wYWNpdHk9M0QwLHUu aW5uZXJIVE1MPTNEbixhLmFwcGVuZENoaWxkKHUpLHMmJih0WzBdPTNEdD0KWzBdLXMuc2Nyb2xs TGVmdCx0WzFdPTNEdFsxXS1zLnNjcm9sbFRvcCksZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRp b24odCxyPQosaSx1KX0sZS50b29sdGlwLmZpbmRGaXJzdE5vblNWR1BhcmVudD0zRGZ1bmN0aW9u KGUpe3doaWxlKGUudGFnTmFtZS5tYXRjaCg9Ci9eZ3xzdmckL2kpIT0zRD0zRG51bGwpZT0zRGUu cGFyZW50Tm9kZTtyZXR1cm4gZX0sZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldD0KVG9wPTNEZnVu Y3Rpb24oZSx0KXt2YXIgbj0zRHQ7ZG8gaXNOYU4oZS5vZmZzZXRUb3ApfHwobis9M0RlLm9mZnNl dFRvcCk7d2hpPQpsZShlPTNEZS5vZmZzZXRQYXJlbnQpO3JldHVybiBufSxlLnRvb2x0aXAuZmlu ZFRvdGFsT2Zmc2V0TGVmdD0zRGZ1bmN0aW9uKGU9Cix0KXt2YXIgbj0zRHQ7ZG8gaXNOYU4oZS5v ZmZzZXRMZWZ0KXx8KG4rPTNEZS5vZmZzZXRMZWZ0KTt3aGlsZShlPTNEZS5vZmZzZT0KdFBhcmVu dCk7cmV0dXJuIG59LGUudG9vbHRpcC5jYWxjVG9vbHRpcFBvc2l0aW9uPTNEZnVuY3Rpb24odCxu LHIsaSl7dmFyIHM9Cj0zRHBhcnNlSW50KGkub2Zmc2V0SGVpZ2h0KSxvPTNEcGFyc2VJbnQoaS5v ZmZzZXRXaWR0aCksdT0zRGUudXRpbHMud2luZG93Uz0KaXplKCkud2lkdGgsYT0zRGUudXRpbHMu d2luZG93U2l6ZSgpLmhlaWdodCxmPTNEd2luZG93LnBhZ2VZT2Zmc2V0LGw9M0R3aW5kPQpvdy5w YWdlWE9mZnNldCxjLGg7YT0zRHdpbmRvdy5pbm5lcldpZHRoPj0zRGRvY3VtZW50LmJvZHkuc2Ny b2xsV2lkdGg/YTphLTE9CjYsdT0zRHdpbmRvdy5pbm5lckhlaWdodD49M0Rkb2N1bWVudC5ib2R5 LnNjcm9sbEhlaWdodD91OnUtMTYsbj0zRG58fCJzIixyPQo9M0RyfHwyMDt2YXIgcD0zRGZ1bmN0 aW9uKHQpe3JldHVybiBlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0VG9wKHQsaCl9LGQ9M0Q9CmZ1 bmN0aW9uKHQpe3JldHVybiBlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0TGVmdCh0LGMpfTtzd2l0 Y2gobil7Y2FzZSJlIjpjPQo9M0R0WzBdLW8tcixoPTNEdFsxXS1zLzI7dmFyIHY9M0RkKGkpLG09 M0RwKGkpO3Y8bCYmKGM9M0R0WzBdK3I+bD90WzBdK3I6bC09CnYrYyksbTxmJiYoaD0zRGYtbSto KSxtK3M+ZithJiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7Y2FzZSJ3IjpjPTNEdFswXStyLGg9Cj0z RHRbMV0tcy8yO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2K28+dSYmKGM9M0R0WzBdLW8tciksbTxm JiYoaD0zRGYrNSksbStzPj0KZithJiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7Y2FzZSJuIjpjPTNE dFswXS1vLzItNSxoPTNEdFsxXStyO3ZhciB2PTNEZChpKSxtPQo9M0RwKGkpO3Y8bCYmKGM9M0Rs KzUpLHYrbz51JiYoYz0zRGMtby8yKzUpLG0rcz5mK2EmJihoPTNEZithLW0raC1zKTticmVhazs9 CmNhc2UicyI6Yz0zRHRbMF0tby8yLGg9M0R0WzFdLXMtcjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7 djxsJiYoYz0zRGwrNSksditvPj0KdSYmKGM9M0RjLW8vMis1KSxmPm0mJihoPTNEZik7YnJlYWs7 Y2FzZSJub25lIjpjPTNEdFswXSxoPTNEdFsxXS1yO3ZhciB2PTNEPQpkKGkpLG09M0RwKGkpfXJl dHVybiBpLnN0eWxlLmxlZnQ9M0RjKyJweCIsaS5zdHlsZS50b3A9M0RoKyJweCIsaS5zdHlsZS5v cGE9CmNpdHk9M0QxLGkuc3R5bGUucG9zaXRpb249M0QiYWJzb2x1dGUiLGl9LGUudG9vbHRpcC5j bGVhbnVwPTNEZnVuY3Rpb24oKXt2YT0KciBlPTNEZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNz TmFtZSgibnZ0b29sdGlwIiksdD0zRFtdO3doaWxlKGUubGVuZ3RoKXQuPQpwdXNoKGVbMF0pLGVb MF0uc3R5bGUudHJhbnNpdGlvbkRlbGF5PTNEIjAgIWltcG9ydGFudCIsZVswXS5zdHlsZS5vcGFj aXR5PQo9M0QwLGVbMF0uY2xhc3NOYW1lPTNEIm52dG9vbHRpcC1wZW5kaW5nLXJlbW92YWwiO3Nl dFRpbWVvdXQoZnVuY3Rpb24oKXt3aGk9CmxlKHQubGVuZ3RoKXt2YXIgZT0zRHQucG9wKCk7ZS5w YXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX0sNTAwKX19KCksZS51dGlscz0KLndpbmRvd1NpemU9 M0RmdW5jdGlvbigpe3ZhciBlPTNEe3dpZHRoOjY0MCxoZWlnaHQ6NDgwfTtyZXR1cm4gZG9jdW1l bnQuYm9kPQp5JiZkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoJiYoZS53aWR0aD0zRGRvY3VtZW50 LmJvZHkub2Zmc2V0V2lkdGgsZS5oZWlnaHQ9Cj0zRGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0 KSxkb2N1bWVudC5jb21wYXRNb2RlPTNEPTNEIkNTUzFDb21wYXQiJiZkb2N1bT0KZW50LmRvY3Vt ZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoJiYoZS53aWR0 aD0zRGRvY3VtPQplbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLGUuaGVpZ2h0PTNEZG9j dW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEg9CmVpZ2h0KSx3aW5kb3cuaW5uZXJXaWR0aCYm d2luZG93LmlubmVySGVpZ2h0JiYoZS53aWR0aD0zRHdpbmRvdy5pbm5lcldpZHRoLD0KZS5oZWln aHQ9M0R3aW5kb3cuaW5uZXJIZWlnaHQpLGV9LGUudXRpbHMud2luZG93UmVzaXplPTNEZnVuY3Rp b24oZSl7aWYoZT0KPTNEPTNEPTNEdW5kZWZpbmVkKXJldHVybjt2YXIgdD0zRHdpbmRvdy5vbnJl c2l6ZTt3aW5kb3cub25yZXNpemU9M0RmdW5jdGlvPQpuKG4pe3R5cGVvZiB0PTNEPTNEImZ1bmN0 aW9uIiYmdChuKSxlKG4pfX0sZS51dGlscy5nZXRDb2xvcj0zRGZ1bmN0aW9uKHQpe3I9CmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPTNEPTNE PTNEIltvYmplY3QgQT0KcnJheV0iP2Z1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29sb3J8fHRbbiV0 Lmxlbmd0aF19OnQ6ZS51dGlscy5kZWZhdWx0Q29sb3IoPQopfSxlLnV0aWxzLmRlZmF1bHRDb2xv cj0zRGZ1bmN0aW9uKCl7dmFyIGU9M0RkMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2UoKTs9CnJl dHVybiBmdW5jdGlvbih0LG4pe3JldHVybiB0LmNvbG9yfHxlW24lZS5sZW5ndGhdfX0sZS51dGls cy5jdXN0b21UaGVtZT0zRD0KZnVuY3Rpb24oZSx0LG4pe3Q9M0R0fHxmdW5jdGlvbihlKXtyZXR1 cm4gZS5rZXl9LG49M0RufHxkMy5zY2FsZS5jYXRlZ29yeTIwPQooKS5yYW5nZSgpO3ZhciByPTNE bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dmFyIG89M0R0KGkpO3JldHVybiByfHwocj0K PTNEbi5sZW5ndGgpLHR5cGVvZiBlW29dIT0zRCJ1bmRlZmluZWQiP3R5cGVvZiBlW29dPTNEPTNE ImZ1bmN0aW9uIj9lW29dKCk6PQplW29dOm5bLS1yXX19LGUudXRpbHMucGpheD0zRGZ1bmN0aW9u KHQsbil7ZnVuY3Rpb24gcihyKXtkMy5odG1sKHIsZnVuY3Rpb249CihyKXt2YXIgaT0zRGQzLnNl bGVjdChuKS5ub2RlKCk7aS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkMy5zZWxlY3Qocikuc2Vs ZT0KY3Qobikubm9kZSgpLGkpLGUudXRpbHMucGpheCh0LG4pfSl9ZDMuc2VsZWN0QWxsKHQpLm9u KCJjbGljayIsZnVuY3Rpb24oKXtoPQppc3RvcnkucHVzaFN0YXRlKHRoaXMuaHJlZix0aGlzLnRl eHRDb250ZW50LHRoaXMuaHJlZikscih0aGlzLmhyZWYpLGQzLmV2ZW49CnQucHJldmVudERlZmF1 bHQoKX0pLGQzLnNlbGVjdCh3aW5kb3cpLm9uKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtkMy5ldmVu dC5zdD0KYXRlJiZyKGQzLmV2ZW50LnN0YXRlKX0pfSxlLnV0aWxzLmNhbGNBcHByb3hUZXh0V2lk dGg9M0RmdW5jdGlvbihlKXtpZih0eXBlPQpvZiBlLnN0eWxlPTNEPTNEImZ1bmN0aW9uIiYmdHlw ZW9mIGUudGV4dD0zRD0zRCJmdW5jdGlvbiIpe3ZhciB0PTNEcGFyc2VJbnQ9CihlLnN0eWxlKCJm b250LXNpemUiKS5yZXBsYWNlKCJweCIsIiIpKSxuPTNEZS50ZXh0KCkubGVuZ3RoO3JldHVybiBu KnQqLjV9cj0KZXR1cm4gMH0sZS51dGlscy5OYU50b1plcm89M0RmdW5jdGlvbihlKXtyZXR1cm4g dHlwZW9mIGUhPTNEIm51bWJlciJ8fGlzTmFOPQooZSl8fGU9M0Q9M0Q9M0RudWxsfHxlPTNEPTNE PTNESW5maW5pdHk/MDplfSxlLnV0aWxzLm9wdGlvbnNGdW5jPTNEZnVuY3Rpb249CihlKXtyZXR1 cm4gZSYmZDMubWFwKGUpLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0eXBlb2YgdGhpc1tlXT0zRD0z RCJmdW5jdGlvbj0KIiYmdGhpc1tlXSh0KX0uYmluZCh0aGlzKSksdGhpc30sZS5tb2RlbHMuYXhp cz0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXtyPQpldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7 dmFyIGk9M0RkMy5zZWxlY3QodGhpcyksbT0zRGkuc2VsZWN0QWxsKCJnLm52LXdyYXA9Ci5udi1h eGlzIikuZGF0YShbZV0pLGc9M0RtLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dmQzIG52LXdyYXAgbj0Kdi1heGlzIikseT0zRGcuYXBwZW5kKCJnIiksYj0zRG0uc2VsZWN0KCJn Iik7cCE9M0Q9M0RudWxsP3QudGlja3MocCk6KHQub3JpPQplbnQoKT0zRD0zRCJ0b3AifHx0Lm9y aWVudCgpPTNEPTNEImJvdHRvbSIpJiZ0LnRpY2tzKE1hdGguYWJzKHMucmFuZ2UoKVsxXS09CnMu cmFuZ2UoKVswXSkvMTAwKSxiLmNhbGwodCksdj0zRHZ8fHQuc2NhbGUoKTt2YXIgdz0zRHQudGlj a0Zvcm1hdCgpO3c9M0Q9Cj0zRG51bGwmJih3PTNEdi50aWNrRm9ybWF0KCkpO3ZhciBFPTNEYi5z ZWxlY3RBbGwoInRleHQubnYtYXhpc2xhYmVsIikuZGF0YT0KKFtvfHxudWxsXSk7RS5leGl0KCku cmVtb3ZlKCk7c3dpdGNoKHQub3JpZW50KCkpe2Nhc2UidG9wIjpFLmVudGVyKCkuYXBwZW5kPQoo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpO3ZhciBTPTNEcy5yYW5nZSgpLmxl bmd0aD0zRD0zRDI/cy5yYW49CmdlKClbMV06cy5yYW5nZSgpW3MucmFuZ2UoKS5sZW5ndGgtMV0r KHMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYXR0cigidD0KZXh0LWFuY2hvciIsIm1pZGRs ZSIpLmF0dHIoInkiLDApLmF0dHIoIngiLFMvMik7aWYodSl7dmFyIHg9M0RtLnNlbGVjdEFsbCgi PQpnLm52LWF4aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWluKCkpO3guZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LWE9Cnhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLHguZXhpdCgp LnJlbW92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLD0KdCl7cmV0dXJuInRyYW5z bGF0ZSgiK3MoZSkrIiwwKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi0wLjVlbSIpLmF0 dHIoPQoieSIsLXQudGlja1BhZGRpbmcoKSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50 ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49Cj0zRHcoZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4i KT8iIjpufSkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cj0KZXR1cm4idHJhbnNs YXRlKCIrcy5yYW5nZSgpW3RdKyIsMCkifSl9YnJlYWs7Y2FzZSJib3R0b20iOnZhciBUPTNEMzYs Tj0zRDMwPQosQz0zRGIuc2VsZWN0QWxsKCJnIikuc2VsZWN0KCJ0ZXh0Iik7aWYoZiUzNjApe0Mu ZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPQo9M0R0aGlzLmdldEJCb3goKS53aWR0aDtuPk4mJihO PTNEbil9KTt2YXIgaz0zRE1hdGguYWJzKE1hdGguc2luKGYqTWF0aC5QSS89CjE4MCkpLFQ9M0Qo az9rKk46TikrMzA7Qy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4icm90 YXRlKCIrZj0KKyIgMCwwKSJ9KS5zdHlsZSgidGV4dC1hbmNob3IiLGYlMzYwPjA/InN0YXJ0Ijoi ZW5kIil9RS5lbnRlcigpLmFwcGVuZCgidGV4PQp0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFi ZWwiKTt2YXIgUz0zRHMucmFuZ2UoKS5sZW5ndGg9M0Q9M0QyP3MucmFuZ2UoKVs9CjFdOnMucmFu Z2UoKVtzLnJhbmdlKCkubGVuZ3RoLTFdKyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKTtFLmF0 dHIoInRleHQtYT0KbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IixUKS5hdHRyKCJ4IixTLzIpO2lm KHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoImcubnYtPQpheGlzTWF4TWluIikuZGF0YShbcy5kb21h aW4oKVswXSxzLmRvbWFpbigpW3MuZG9tYWluKCkubGVuZ3RoLTFdXSk7eC5lbnRlcig9CikuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0IikseC5l eGl0KCkucmVtb3ZlKD0KKSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4i dHJhbnNsYXRlKCIrKHMoZSkrKGg/cy5yYW5nZUJhbmQoPQopLzI6MCkpKyIsMCkifSkuc2VsZWN0 KCJ0ZXh0IikuYXR0cigiZHkiLCIuNzFlbSIpLmF0dHIoInkiLHQudGlja1BhZGRpbmcoKSk9Ci5h dHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4icm90YXRlKCIrZisiIDAsMCki fSkuc3R5bGUoInRleHQtYT0KbmNob3IiLGY/ZiUzNjA+MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUi KS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JlPQp0dXJuKCIiK24pLm1hdGNoKCJO YU4iKT8iIjpufSkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW49 CnNsYXRlKCIrKHMoZSkrKGg/cy5yYW5nZUJhbmQoKS8yOjApKSsiLDApIn0pfWMmJkMuYXR0cigi dHJhbnNmb3JtIixmdW5jdGlvbj0KKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQlMj0zRD0z RDA/IjAiOiIxMiIpKyIpIn0pO2JyZWFrO2Nhc2UicmlnaHQiOkUuPQplbnRlcigpLmFwcGVuZCgi dGV4dCIpLmF0dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIiksRS5zdHlsZSgidGV4dC1hbmNob3Ii LGw9Cj8ibWlkZGxlIjoiYmVnaW4iKS5hdHRyKCJ0cmFuc2Zvcm0iLGw/InJvdGF0ZSg5MCkiOiIi KS5hdHRyKCJ5IixsPy1NYXRoLm1heD0KKG4ucmlnaHQscikrMTI6LTEwKS5hdHRyKCJ4IixsP3Mu cmFuZ2UoKVswXS8yOnQudGlja1BhZGRpbmcoKSk7aWYodSl7dmFyIHg9Cj0zRG0uc2VsZWN0QWxs KCJnLm52LWF4aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWluKCkpO3guZW50ZXIoKS5hcHBlbmQoImci KS5hdD0KdHIoImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJv cGFjaXR5IiwwKSx4LmV4aXQoKS5yZW1vPQp2ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlv bihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3MoZSkrIikifSkuc2VsZWM9CnQoInRleHQiKS5h dHRyKCJkeSIsIi4zMmVtIikuYXR0cigieSIsMCkuYXR0cigieCIsdC50aWNrUGFkZGluZygpKS5z dHlsZSgidD0KZXh0LWFuY2hvciIsInN0YXJ0IikudGV4dChmdW5jdGlvbihlLHQpe3ZhciBuPTNE dyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hPQpOIik/IiI6bn0pLHguYXR0cigidHJhbnNmb3Jt IixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3MucmFuZ2UoKVs9CnRdKyIpIn0p LnNlbGVjdCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKX1icmVhaztjYXNlImxlZnQiOkUuZW50 ZXIoKS5hcHBlbj0KZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIiksRS5zdHls ZSgidGV4dC1hbmNob3IiLGw/Im1pZGRsZSI6ImVuPQpkIikuYXR0cigidHJhbnNmb3JtIixsPyJy b3RhdGUoLTkwKSI6IiIpLmF0dHIoInkiLGw/LU1hdGgubWF4KG4ubGVmdCxyKStkOi09CjEwKS5h dHRyKCJ4IixsPy1zLnJhbmdlKClbMF0vMjotdC50aWNrUGFkZGluZygpKTtpZih1KXt2YXIgeD0z RG0uc2VsZWN0QWxsKD0KImcubnYtYXhpc01heE1pbiIpLmRhdGEocy5kb21haW4oKSk7eC5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtPQpheGlzTWF4TWluIikuYXBwZW5kKCJ0 ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDApLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0cigidHI9CmFu c2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrdihlKSsiKSJ9KS5zZWxl Y3QoInRleHQiKS5hdHRyKD0KImR5IiwiLjMyZW0iKS5hdHRyKCJ5IiwwKS5hdHRyKCJ4IiwtdC50 aWNrUGFkZGluZygpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuPQpkIikudGV4dChmdW5jdGlvbihl LHQpe3ZhciBuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4LmF0dHI9 CigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3MucmFuZ2Uo KVt0XSsiKSJ9KS5zZWxlY3QoIj0KdGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKX19RS50ZXh0KGZ1 bmN0aW9uKGUpe3JldHVybiBlfSksdSYmKHQub3JpZW50KCk9M0Q9Cj0zRD0zRCJsZWZ0Inx8dC5v cmllbnQoKT0zRD0zRD0zRCJyaWdodCIpJiYoYi5zZWxlY3RBbGwoImciKS5lYWNoKGZ1bmN0aW9u KD0KZSx0KXtkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuYXR0cigib3BhY2l0eSIsMSk7 aWYocyhlKTxzLnJhbmdlKClbMV0rPQoxMHx8cyhlKT5zLnJhbmdlKClbMF0tMTApKGU+MWUtMTB8 fGU8LTFlLTEwKSYmZDMuc2VsZWN0KHRoaXMpLmF0dHIoIm9wYWNpdHk9CiIsMCksZDMuc2VsZWN0 KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkscy5kb21haW4oKVswXT0z RD0zRD0Kcy5kb21haW4oKVsxXSYmcy5kb21haW4oKVswXT0zRD0zRDAmJm0uc2VsZWN0QWxsKCJn Lm52LWF4aXNNYXhNaW4iKS5zdHlsZSgiPQpvcGFjaXR5IixmdW5jdGlvbihlLHQpe3JldHVybiB0 PzA6MX0pKTtpZih1JiYodC5vcmllbnQoKT0zRD0zRD0zRCJ0b3AifHx0Lm89CnJpZW50KCk9M0Q9 M0Q9M0QiYm90dG9tIikpe3ZhciBMPTNEW107bS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIp LmVhY2goZj0KdW5jdGlvbihlLHQpe3RyeXt0P0wucHVzaChzKGUpLXRoaXMuZ2V0QkJveCgpLndp ZHRoLTQpOkwucHVzaChzKGUpK3RoaXMuZ2V0PQpCQm94KCkud2lkdGgrNCl9Y2F0Y2gobil7dD9M LnB1c2gocyhlKS00KTpMLnB1c2gocyhlKSs0KX19KSxiLnNlbGVjdEFsbCgiZyI9CikuZWFjaChm dW5jdGlvbihlLHQpe2lmKHMoZSk8TFswXXx8cyhlKT5MWzFdKWU+MWUtMTB8fGU8LTFlLTEwP2Qz LnNlbGVjdCh0aD0KaXMpLnJlbW92ZSgpOmQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5y ZW1vdmUoKX0pfWEmJmIuc2VsZWN0QWxsKCIudGljPQprIikuZmlsdGVyKGZ1bmN0aW9uKGUpe3Jl dHVybiFwYXJzZUZsb2F0KE1hdGgucm91bmQoZS5fX2RhdGFfXyoxZTUpLzFlNikmJmU9Ci5fX2Rh dGFfXyE9M0Q9M0R1bmRlZmluZWR9KS5jbGFzc2VkKCJ6ZXJvIiwhMCksdj0zRHMuY29weSgpfSks bX12YXIgdD0zRGQzLj0Kc3ZnLmF4aXMoKSxuPTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVm dDowfSxyPTNENzUsaT0zRDYwLHM9M0RkMy5zY2FsZS5sPQppbmVhcigpLG89M0RudWxsLHU9M0Qh MCxhPTNEITAsZj0zRDAsbD0zRCEwLGM9M0QhMSxoPTNEITEscD0zRG51bGwsZD0zRDEyO3Q9Ci5z Y2FsZShzKS5vcmllbnQoImJvdHRvbSIpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9 KTt2YXIgdjtyZXR1cm4gbT0KLmF4aXM9M0R0LGQzLnJlYmluZChtLHQsIm9yaWVudCIsInRpY2tW YWx1ZXMiLCJ0aWNrU3ViZGl2aWRlIiwidGlja1NpemUiLCJ0PQppY2tQYWRkaW5nIiwidGlja0Zv cm1hdCIpLGQzLnJlYmluZChtLHMsImRvbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5kIiwicmFuZ2U9 CkJhbmRzIiksbS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKG0pLG0ubWFyZ2lu PTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8obi50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdoPQp0PTNEdHlwZW9mIGUucmln aHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4uYm90dG9tPTNEdHlwZW9mIGUuYm90 dG89Cm0hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3R0b20sbi5sZWZ0PTNEdHlwZW9mIGUu bGVmdCE9M0QidW5kZWZpbmVkIj9lLj0KbGVmdDpuLmxlZnQsbSk6bn0sbS53aWR0aD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxtKTpyPQp9LG0udGlja3M9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5oZWlnaHQ9 M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLmF4 aXNMYWJlbD0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0p Om99LG0uc2hvd01heE1pbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/ KHU9M0RlLG0pOnV9LG0uaGlnaGxpZ2h0WmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3Q9Cmg/KGE9M0RlLG0pOmF9LG0uc2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGUsdC5zY2FsZT0KKHMpLGg9M0R0eXBlb2Ygcy5yYW5nZUJhbmRz PTNEPTNEImZ1bmN0aW9uIixkMy5yZWJpbmQobSxzLCJkb21haW4iLCJyYW5nZSIsPQoicmFuZ2VC YW5kIiwicmFuZ2VCYW5kcyIpLG0pOnN9LG0ucm90YXRlWUxhYmVsPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8obD0zRGUsbSk6bH0sbS5yb3RhdGVMYWJlbHM9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhmPTNEZSxtKTpmfSxtLnN0YWdnZXJM YWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsPQptKTpj fSxtLmF4aXNMYWJlbERpc3RhbmNlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGQ9M0RlLG0pOmQ9Cn0sbX0sZS5tb2RlbHMuaGlzdG9yaWNhbEJhcj0zRGZ1bmN0aW9uKCl7 ZnVuY3Rpb24gdyhFKXtyZXR1cm4gRS5lYWNoKGZ1bmN0aT0Kb24odyl7dmFyIEU9M0RuLXQubGVm dC10LnJpZ2h0LFM9M0RyLXQudG9wLXQuYm90dG9tLFQ9M0RkMy5zZWxlY3QodGhpcyk7cy5kPQpv bWFpbihkfHxkMy5leHRlbnQod1swXS52YWx1ZXMubWFwKHUpLmNvbmNhdChmKSkpLGM/cy5yYW5n ZShtfHxbRSouNS93WzBdLnY9CmFsdWVzLmxlbmd0aCxFKih3WzBdLnZhbHVlcy5sZW5ndGgtLjUp L3dbMF0udmFsdWVzLmxlbmd0aF0pOnMucmFuZ2UobXx8WzAsRT0KXSksby5kb21haW4odnx8ZDMu ZXh0ZW50KHdbMF0udmFsdWVzLm1hcChhKS5jb25jYXQobCkpKS5yYW5nZShnfHxbUywwXSkscy5k PQpvbWFpbigpWzBdPTNEPTNEPTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21h aW4oW3MuZG9tYWluKClbMF0tcy49CmRvbWFpbigpWzBdKi4wMSxzLmRvbWFpbigpWzFdK3MuZG9t YWluKClbMV0qLjAxXSk6cy5kb21haW4oWy0xLDFdKSksby5kb21haT0KbigpWzBdPTNEPTNEPTNE by5kb21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0rby5k b21hPQppbigpWzBdKi4wMSxvLmRvbWFpbigpWzFdLW8uZG9tYWluKClbMV0qLjAxXSk6by5kb21h aW4oWy0xLDFdKSk7dmFyIE49M0RULnM9CmVsZWN0QWxsKCJnLm52LXdyYXAubnYtaGlzdG9yaWNh bEJhci0iK2kpLmRhdGEoW3dbMF0udmFsdWVzXSksQz0zRE4uZW50ZXIoKT0KLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWhpc3RvcmljYWxCYXItIitpKSxrPTNEQy5h cHBlbmQoPQoiZGVmcyIpLEw9M0RDLmFwcGVuZCgiZyIpLEE9M0ROLnNlbGVjdCgiZyIpO0wuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi09CmJhcnMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRy YW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxULm9uKCJjbGljayIsZj0KdW5jdGlvbihl LHQpe3kuY2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOml9KX0pLGsu YXBwZW5kKCJjPQpsaXBQYXRoIikuYXR0cigiaWQiLCJudi1jaGFydC1jbGlwLXBhdGgtIitpKS5h cHBlbmQoInJlY3QiKSxOLnNlbGVjdCgiI252LWM9CmhhcnQtY2xpcC1wYXRoLSIraSsiIHJlY3Qi KS5hdHRyKCJ3aWR0aCIsRSkuYXR0cigiaGVpZ2h0IixTKSxBLmF0dHIoImNsaXAtcD0KYXRoIixo PyJ1cmwoI252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIikiOiIiKTt2YXIgTz0zRE4uc2VsZWN0KCIu bnYtYmFycyIpLnNlPQpsZWN0QWxsKCIubnYtYmFyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4g ZX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpfSk9CjtPLmV4aXQoKS5yZW1vdmUoKTt2YXIg TT0zRE8uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdT0KbmN0 aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKG8oTWF0aC5tYXgoMCxhKHQsbikpKSl9 KS5hdHRyKCJoZWlnaHQiPQosZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8o TWF0aC5hYnMobyhhKHQsbikpLW8oMCkpKX0pLmF0dHIoInQ9CnJhbnNmb3JtIixmdW5jdGlvbihl LHQpe3JldHVybiJ0cmFuc2xhdGUoIisocyh1KGUsdCkpLUUvd1swXS52YWx1ZXMubGVuZ3RoKj0K LjQ1KSsiLDApIn0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO2Qz LnNlbGVjdCh0aGlzKS5jbGFzPQpzZWQoImhvdmVyIiwhMCkseS5lbGVtZW50TW91c2VvdmVyKHtw b2ludDplLHNlcmllczp3WzBdLHBvczpbcyh1KGUsdCkpLG8oYSg9CmUsdCkpXSxwb2ludEluZGV4 OnQsc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUs dD0KKXtpZighYilyZXR1cm47ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSkseS5l bGVtZW50TW91c2VvdXQoe3BvaW50PQo6ZSxzZXJpZXM6d1swXSxwb2ludEluZGV4OnQsc2VyaWVz SW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW89Cm4oZSx0KXtpZighYily ZXR1cm47eS5lbGVtZW50Q2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3Mo dShlLD0KdCkpLG8oYShlLHQpKV0sZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3Bh Z2F0aW9uKCl9KS5vbigiZGJsY2xpY2siPQosZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47eS5l bGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCw9CnBvczpbcyh1KGUs dCkpLG8oYShlLHQpKV0sZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9u KCl9KTtPLj0KYXR0cigiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSkuYXR0cigi Y2xhc3MiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1PQpybihhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZl IjoibnYtYmFyIHBvc2l0aXZlIikrIiBudi1iYXItIituKyItIit0fSkuYXR0cig9CiJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhzKHUoZSx0KSktRS93WzBdLnZh bHVlcy5sZW5ndD0KaCouNDUpKyIsMCkifSkuYXR0cigid2lkdGgiLEUvd1swXS52YWx1ZXMubGVu Z3RoKi45KSxPLmF0dHIoInkiLGZ1bmN0aW9uKHQsPQpuKXt2YXIgcj0zRGEodCxuKTwwP28oMCk6 bygwKS1vKGEodCxuKSk8MT9vKDApLTE6byhhKHQsbikpO3JldHVybiBlLnV0aWxzLk49CmFOdG9a ZXJvKHIpfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRv WmVybyhNYXRoLm1heD0KKE1hdGguYWJzKG8oYSh0LG4pKS1vKDApKSwxKSl9KX0pLHd9dmFyIHQ9 M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9PQosbj0zRDk2MCxyPTNENTAwLGk9M0RN YXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0KPTNE ZDMuc2NhbGUubGluZWFyKCksdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS55PQp9LGY9M0RbXSxsPTNEWzBdLGM9M0QhMSxoPTNEITAscD0zRGUudXRp bHMuZGVmYXVsdENvbG9yKCksZCx2LG0sZyx5PTNEZDMuZGk9CnNwYXRjaCgiY2hhcnRDbGljayIs ImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbD0K ZW1lbnRNb3VzZW91dCIpLGI9M0QhMDtyZXR1cm4gdy5oaWdobGlnaHRQb2ludD0zRGZ1bmN0aW9u KGUsdCl7ZDMuc2VsZWN0KCIuPQpudi1oaXN0b3JpY2FsQmFyLSIraSkuc2VsZWN0KCIubnYtYmFy cyAubnYtYmFyLTAtIitlKS5jbGFzc2VkKCJob3ZlciIsdCl9LHc9Ci5jbGVhckhpZ2hsaWdodHM9 M0RmdW5jdGlvbigpe2QzLnNlbGVjdCgiLm52LWhpc3RvcmljYWxCYXItIitpKS5zZWxlY3QoIi5u dj0KLWJhcnMgLm52LWJhci5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LHcuZGlzcGF0Y2g9 M0R5LHcub3B0aW9ucz0zRGUudXRpPQpscy5vcHRpb25zRnVuYy5iaW5kKHcpLHcueD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSx3KTo9CnV9LHcueT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSx3KTphfSx3Lm1hcmdpbj0zRGZ1 bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wOnQuPQp0b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0z RCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGU9Cm9mIGUuYm90dG9t IT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEInVuZD0KZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LHcpOnR9LHcud2lkdGg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpuPTNEZSx3KTpufSx3LmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3Lng9ClNjYWxlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHcpOnN9LHcueVNjYWxl PTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdyk6b30sdy54 RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oZD0zRGUsdyk6 ZH0sdy55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8odj0z RGUsdyk6dn0sdy54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bT0zRGUsdyk6bX0sdz0KLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhnPTNEZSx3KTpnfSx3LmZvcmNlWD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLHcpOmZ9LHcuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJn dW1lbnRzLmxlbmd0aD8obD0zRGUsdyk6bH0sdy5wYWREYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndD0KaD8oYz0zRGUsdyk6Y30sdy5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx3KTpoPQp9LHcuY29sb3I9M0RmdW5jdGlv bih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUudXRpbHMuZ2V0Q29sb3IodCksdyk9 CjpwfSx3LmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLHcp Oml9LHcuaW50ZXJhY3RpdmU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhiPTNEITEsdyk6Yn0sd30sZS5tb2RlbHMuYnVsbGV0PTNEZj0KdW5jdGlvbigpe2Z1bmN0aW9u IG0oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlLG4pe3ZhciBwPTNEYy10LmxlZnQtdC5yaWdo PQp0LG09M0RoLXQudG9wLXQuYm90dG9tLGc9M0RkMy5zZWxlY3QodGhpcykseT0zRGkuY2FsbCh0 aGlzLGUsbikuc2xpY2UoKS5zb3I9CnQoZDMuZGVzY2VuZGluZyksYj0zRHMuY2FsbCh0aGlzLGUs bikuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLHc9M0RvLmNhbD0KbCh0aGlzLGUsbikuc2xp Y2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLEU9M0R1LmNhbGwodGhpcyxlLG4pLnNsaWNlKCksUz0z RGEuPQpjYWxsKHRoaXMsZSxuKS5zbGljZSgpLHg9M0RmLmNhbGwodGhpcyxlLG4pLnNsaWNlKCks VD0zRGQzLnNjYWxlLmxpbmVhcigpLmQ9Cm9tYWluKGQzLmV4dGVudChkMy5tZXJnZShbbCx5XSkp KS5yYW5nZShyP1twLDBdOlswLHBdKSxOPTNEdGhpcy5fX2NoYXJ0X198fD0KZDMuc2NhbGUubGlu ZWFyKCkuZG9tYWluKFswLEluZmluaXR5XSkucmFuZ2UoVC5yYW5nZSgpKTt0aGlzLl9fY2hhcnRf Xz0zRFQ7PQp2YXIgQz0zRGQzLm1pbih5KSxrPTNEZDMubWF4KHkpLEw9M0R5WzFdLEE9M0RnLnNl bGVjdEFsbCgiZy5udi13cmFwLm52LWJ1bGw9CmV0IikuZGF0YShbZV0pLE89M0RBLmVudGVyKCku YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbD0KZXQiKSxNPTNE Ty5hcHBlbmQoImciKSxfPTNEQS5zZWxlY3QoImciKTtNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNs YXNzIiwibnYtPQpyYW5nZSBudi1yYW5nZU1heCIpLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xh c3MiLCJudi1yYW5nZSBudi1yYW5nZUF2ZyIpLE09Ci5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFz cyIsIm52LXJhbmdlIG52LXJhbmdlTWluIiksTS5hcHBlbmQoInJlY3QiKS5hdHRyKD0KImNsYXNz IiwibnYtbWVhc3VyZSIpLE0uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1tYXJrZXJU cmlhbmdsZSIpLEEuPQphdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3Qu dG9wKyIpIik7dmFyIEQ9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBNYXRoLmFicyhOKGUpLU4oMCkp fSxQPTNEZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKFQoZSktVCgwKSl9LEg9M0RmdT0KbmN0 aW9uKGUpe3JldHVybiBlPDA/TihlKTpOKDApfSxCPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9U KGUpOlQoMCl9O18uc2VsPQplY3QoInJlY3QubnYtcmFuZ2VNYXgiKS5hdHRyKCJoZWlnaHQiLG0p LmF0dHIoIndpZHRoIixQKGs+MD9rOkMpKS5hdHRyKCJ4Iiw9CkIoaz4wP2s6QykpLmRhdHVtKGs+ MD9rOkMpLF8uc2VsZWN0KCJyZWN0Lm52LXJhbmdlQXZnIikuYXR0cigiaGVpZ2h0IixtKS5hdD0K dHIoIndpZHRoIixQKEwpKS5hdHRyKCJ4IixCKEwpKS5kYXR1bShMKSxfLnNlbGVjdCgicmVjdC5u di1yYW5nZU1pbiIpLmF0dHIoPQoiaGVpZ2h0IixtKS5hdHRyKCJ3aWR0aCIsUChrKSkuYXR0cigi eCIsQihrKSkuYXR0cigid2lkdGgiLFAoaz4wP0M6aykpLmF0dHI9CigieCIsQihrPjA/QzprKSku ZGF0dW0oaz4wP0M6ayksXy5zZWxlY3QoInJlY3QubnYtbWVhc3VyZSIpLnN0eWxlKCJmaWxsIixk KT0KLmF0dHIoImhlaWdodCIsbS8zKS5hdHRyKCJ5IixtLzMpLmF0dHIoIndpZHRoIix3PDA/VCgw KS1UKHdbMF0pOlQod1swXSktVCgwPQopKS5hdHRyKCJ4IixCKHcpKS5vbigibW91c2VvdmVyIixm dW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6d1swXSw9CmxhYmVsOnhbMF18fCJD dXJyZW50Iixwb3M6W1Qod1swXSksbS8yXX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3Yu ZWxlbT0KZW50TW91c2VvdXQoe3ZhbHVlOndbMF0sbGFiZWw6eFswXXx8IkN1cnJlbnQifSl9KTt2 YXIgaj0zRG0vNjtiWzBdP18uc2VsZWN0PQpBbGwoInBhdGgubnYtbWFya2VyVHJpYW5nbGUiKS5h dHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGU9CigiK1QoYlswXSkr IiwiK20vMisiKSJ9KS5hdHRyKCJkIiwiTTAsIitqKyJMIitqKyIsIisgLWorIiAiKyAtaisiLCIr IC1qKyJaIj0KKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3Zlcih7 dmFsdWU6YlswXSxsYWJlbDpTWzBdfHwiUHJlPQp2aW91cyIscG9zOltUKGJbMF0pLG0vMl19KX0p Lm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt2LmVsZW1lbnRNb3VzZW91dCh7dmE9Cmx1ZTpiWzBd LGxhYmVsOlNbMF18fCJQcmV2aW91cyJ9KX0pOl8uc2VsZWN0QWxsKCJwYXRoLm52LW1hcmtlclRy aWFuZ2xlIikucj0KZW1vdmUoKSxBLnNlbGVjdEFsbCgiLm52LXJhbmdlIikub24oIm1vdXNlb3Zl ciIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zREVbdF18PQp8KHQ/dD0zRD0zRDE/Ik1lYW4iOiJNaW5p bXVtIjoiTWF4aW11bSIpO3YuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6ZSxsYWJlbDo9Cm4scG9z OltUKGUpLG0vMl19KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zREVbdF18 fCh0P3Q9M0Q9M0QxPz0KIk1lYW4iOiJNaW5pbXVtIjoiTWF4aW11bSIpO3YuZWxlbWVudE1vdXNl b3V0KHt2YWx1ZTplLGxhYmVsOm59KX0pfSksbX12YXIgPQp0PTNEe3RvcDowLHJpZ2h0OjAsYm90 dG9tOjAsbGVmdDowfSxuPTNEImxlZnQiLHI9M0QhMSxpPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4g ZS5yYW5nZXN9LHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXJrZXJzfSxvPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUubWVhcz0KdXJlc30sdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhbmdlTGFi ZWxzP2UucmFuZ2VMYWJlbHM6W119LGE9M0RmdW5jdGlvbihlPQope3JldHVybiBlLm1hcmtlckxh YmVscz9lLm1hcmtlckxhYmVsczpbXX0sZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmU9 CkxhYmVscz9lLm1lYXN1cmVMYWJlbHM6W119LGw9M0RbMF0sYz0zRDM4MCxoPTNEMzAscD0zRG51 bGwsZD0zRGUudXRpbHMuZ2V0Qz0Kb2xvcihbIiMxZjc3YjQiXSksdj0zRGQzLmRpc3BhdGNoKCJl bGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0Iik7cmV0PQp1cm4gbS5kaXNwYXRjaD0z RHYsbS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKG0pLG0ub3JpZW50PTNEZnVu Y3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUscj0zRG49M0Q9M0Qicmln aHQifHxuPTNEPTNEImJvdHRvbSIsbT0KKTpufSxtLnJhbmdlcz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLm1hcmtlcnM9Cj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxtKTpzfSxtLm1lYXN1cmVzPTNEZnVuY3Rp b24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsbSk6b30sbS5mb3JjZVg9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLndpZHRo PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Q9CmUsbSk6Y30sbS5o ZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsbSk6aH0s bS5tYXJnaT0Kbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0z RHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkPQoiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBl b2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3Q9CnRvbT0zRHR5 cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0 eXBlb2YgZS5sZT0KZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxtKTp0fSxtLnRpY2tG b3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpw fSxtLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Cj0zRGUu dXRpbHMuZ2V0Q29sb3IodCksbSk6ZH0sbX0sZS5tb2RlbHMuYnVsbGV0Q2hhcnQ9M0RmdW5jdGlv bigpe2Z1bmN0aW9uID0KbShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG4saCl7dmFyIGc9M0Rk My5zZWxlY3QodGhpcykseT0zRChhfHxwYXJzZUludChnPQouc3R5bGUoIndpZHRoIikpfHw5NjAp LWkubGVmdC1pLnJpZ2h0LGI9M0RmLWkudG9wLWkuYm90dG9tLHc9M0R0aGlzO20udXBkYXQ9CmU9 M0RmdW5jdGlvbigpe20oZSl9LG0uY29udGFpbmVyPTNEdGhpcztpZighbnx8IXMuY2FsbCh0aGlz LG4saCkpe3ZhciBFPTNEZz0KLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW3BdKTtyZXR1 cm4gRS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsPQphc3MiLCJudmQzIG52LW5vRGF0 YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxFLmE9 CnR0cigieCIsaS5sZWZ0K3kvMikuYXR0cigieSIsMTgraS50b3ArYi8yKS50ZXh0KGZ1bmN0aW9u KGUpe3JldHVybiBlfSksbX1nLj0Kc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFy IFM9M0RzLmNhbGwodGhpcyxuLGgpLnNsaWNlKCkuc29ydChkMy5kPQplc2NlbmRpbmcpLHg9M0Rv LmNhbGwodGhpcyxuLGgpLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxUPTNEdS5jYWxsKHRo aXM9CixuLGgpLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxOPTNEZy5zZWxlY3RBbGwoImcu bnYtd3JhcC5udi1idWxsZXRDaGFydD0KIikuZGF0YShbbl0pLEM9M0ROLmVudGVyKCkuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbGV0PQpDaGFydCIpLGs9M0RD LmFwcGVuZCgiZyIpLEw9M0ROLnNlbGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi09CmJ1bGxldFdyYXAiKSxrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtdGl0bGVz IiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cj0KYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArIiki KTt2YXIgQT0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxNYXRoLm1hPQp4KFNbMF0seFsw XSxUWzBdKV0pLnJhbmdlKHI/W3ksMF06WzAseV0pLE89M0R0aGlzLl9fY2hhcnRfX3x8ZDMuc2Nh bGUubGluZWE9CnIoKS5kb21haW4oWzAsSW5maW5pdHldKS5yYW5nZShBLnJhbmdlKCkpO3RoaXMu X19jaGFydF9fPTNEQTt2YXIgTT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIE1hdGguYWJzKE8oZSkt TygwKSl9LF89M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoQShlKS1BKDApPQopfSxEPTNE ay5zZWxlY3QoIi5udi10aXRsZXMiKS5hcHBlbmQoImciKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVu ZCIpLmF0dHIoInQ9CnJhbnNmb3JtIiwidHJhbnNsYXRlKC02LCIrKGYtaS50b3AtaS5ib3R0b20p LzIrIikiKTtELmFwcGVuZCgidGV4dCIpLmF0dHIoIj0KY2xhc3MiLCJudi10aXRsZSIpLnRleHQo ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGl0bGV9KSxELmFwcGVuZCgidGV4dCIpLmF0dHIoPQoiY2xh c3MiLCJudi1zdWJ0aXRsZSIpLmF0dHIoImR5IiwiMWVtIikudGV4dChmdW5jdGlvbihlKXtyZXR1 cm4gZS5zdWJ0aXRsZX09CiksdC53aWR0aCh5KS5oZWlnaHQoYik7dmFyIFA9M0RMLnNlbGVjdCgi Lm52LWJ1bGxldFdyYXAiKTtkMy50cmFuc2l0aW9uKFApLj0KY2FsbCh0KTt2YXIgSD0zRGx8fEEu dGlja0Zvcm1hdCh5LzEwMCksQj0zREwuc2VsZWN0QWxsKCJnLm52LXRpY2siKS5kYXRhKEEuPQp0 aWNrcyh5LzUwKSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudHx8SChlKX0pLGo9 M0RCLmVudGVyKCkuYXBwZW49CmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpY2siKS5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdD0KZSgiK08oZSkrIiwwKSJ9KS5z dHlsZSgib3BhY2l0eSIsMWUtNik7ai5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsYikuYXR0cigi PQp5MiIsYio3LzYpLGouYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUi KS5hdHRyKCJkeSIsIjFlbSIpLmE9CnR0cigieSIsYio3LzYpLnRleHQoSCk7dmFyIEY9M0RkMy50 cmFuc2l0aW9uKEIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZT0KKXtyZXR1cm4idHJhbnNs YXRlKCIrQShlKSsiLDApIn0pLnN0eWxlKCJvcGFjaXR5IiwxKTtGLnNlbGVjdCgibGluZSIpLmF0 dHIoPQoieTEiLGIpLmF0dHIoInkyIixiKjcvNiksRi5zZWxlY3QoInRleHQiKS5hdHRyKCJ5Iixi KjcvNiksZDMudHJhbnNpdGlvbihCLmU9CnhpdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9u KGUpe3JldHVybiJ0cmFuc2xhdGUoIitBKGUpKyIsMCkifSkuc3R5bGUoIj0Kb3BhY2l0eSIsMWUt NikucmVtb3ZlKCksZC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2Uua2V5PTNEbi50aXRs ZSxjJiZ2PQooZSx3LnBhcmVudE5vZGUpfSl9KSxkMy50aW1lci5mbHVzaCgpLG19dmFyIHQ9M0Rl Lm1vZGVscy5idWxsZXQoKSxuPTNEImxlZnQ9CiIscj0zRCExLGk9M0R7dG9wOjUscmlnaHQ6NDAs Ym90dG9tOjIwLGxlZnQ6MTIwfSxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucj0KYW5nZXN9LG89 M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXJrZXJzfSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu bWVhc3VyZXN9PQosYT0zRG51bGwsZj0zRDU1LGw9M0RudWxsLGM9M0QhMCxoPTNEZnVuY3Rpb24o ZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrdCsiPC89CmgzPiIrIjxwPiIrbisiPC9wPiJ9LHA9M0Qi Tm8gRGF0YSBBdmFpbGFibGUuIixkPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93Ij0KLCJ0b29s dGlwSGlkZSIpLHY9M0RmdW5jdGlvbih0LG4pe3ZhciByPTNEdC5wb3NbMF0rKG4ub2Zmc2V0TGVm dHx8MCkraS5sZWZ0PQoscz0zRHQucG9zWzFdKyhuLm9mZnNldFRvcHx8MCkraS50b3Asbz0zRGgo dC5rZXksdC5sYWJlbCx0LnZhbHVlLHQsbSk7ZS50b289Cmx0aXAuc2hvdyhbcixzXSxvLHQudmFs dWU8MD8iZSI6InciLG51bGwsbil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TT0Kb3Vz ZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZC50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzPQplb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QudG9vbHRpcEhpZGUo ZSl9KSxkLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXs9CmMmJmUudG9vbHRpcC5jbGVhbnVw KCl9KSxtLmRpc3BhdGNoPTNEZCxtLmJ1bGxldD0zRHQsZDMucmViaW5kKG0sdCwiY29sb3IiKT0K LG0ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm9yaWVudD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KG49M0RlLHI9M0RuPTNEPTNEInJpZ2h0 Inx8bj0zRD0zRCJib3R0b20iLG0pOm59LG0ucmFuZ2VzPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsbSk6c30sbS5tYXJrZXJzPTNEZnVuY3Rpb24oZSl7cmV0 dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsbSk6b30sbS5tZWFzdXJlcz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KHU9M0RlLG0pOnV9LG0ud2lkdGg9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsbSk9CjphfSxtLmhlaWdodD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxtKTpmfSxtLm1hcmdp bj0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UuPQp0b3A6aS50b3AsaS5yaWdodD0zRHR5cGVvZiBlLnJp Z2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdodCxpLmJvdHRvbT0KPTNEdHlwZW9mIGUu Ym90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmkuYm90dG9tLGkubGVmdD0zRHR5cGVvZiBl LmxlZnQhPQo9M0QidW5kZWZpbmVkIj9lLmxlZnQ6aS5sZWZ0LG0pOml9LG0udGlja0Zvcm1hdD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0udG9v bHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0KPTNEZSxtKTpj fSxtLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGg9M0RlLG0pPQo6aH0sbS5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocD0zRGUsbSk6cH0sbX0sZS5tb2RlbHM9Ci5jdW11bGF0aXZlTGluZUNoYXJ0PTNEZnVu Y3Rpb24oKXtmdW5jdGlvbiBEKGIpe3JldHVybiBiLmVhY2goZnVuY3Rpb24oYil7Zj0KdW5jdGlv biBJKGUsdCl7ZDMuc2VsZWN0KEQuY29udGFpbmVyKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXpl Iil9ZnVuY3Rpb24gPQpxKGUsdCl7TS54PTNEZDMuZXZlbnQueCxNLmk9M0RNYXRoLnJvdW5kKE8u aW52ZXJ0KE0ueCkpLG50KCl9ZnVuY3Rpb24gUihlLHQ9Cil7ZDMuc2VsZWN0KEQuY29udGFpbmVy KS5zdHlsZSgiY3Vyc29yIiwiYXV0byIpLHguaW5kZXg9M0RNLmksay5zdGF0ZUNoYW5nZT0KKHgp fWZ1bmN0aW9uIG50KCl7dHQuZGF0YShbTV0pO3ZhciBlPTNERC50cmFuc2l0aW9uRHVyYXRpb24o KTtELnRyYW5zaXRpb25EPQp1cmF0aW9uKDApLEQudXBkYXRlKCksRC50cmFuc2l0aW9uRHVyYXRp b24oZSl9dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuY2xhc3M9CmVkKCJudi1jaGFydC0iK1MsITAp LEE9M0R0aGlzLEg9M0QoZnx8cGFyc2VJbnQoTC5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZT0K ZnQtdS5yaWdodCxCPTNEKGx8fHBhcnNlSW50KEwuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRv cC11LmJvdHRvbTtELnVwZGF0PQplPTNEZnVuY3Rpb24oKXtMLmNhbGwoRCl9LEQuY29udGFpbmVy PTNEdGhpcyx4LmRpc2FibGVkPTNEYi5tYXAoZnVuY3Rpb24oZSk9CntyZXR1cm4hIWUuZGlzYWJs ZWR9KTtpZighVCl7dmFyIGo7VD0zRHt9O2ZvcihqIGluIHgpeFtqXWluc3RhbmNlb2YgQXJyYXk/ VD0KW2pdPTNEeFtqXS5zbGljZSgwKTpUW2pdPTNEeFtqXX12YXIgRj0zRGQzLmJlaGF2aW9yLmRy YWcoKS5vbigiZHJhZ3N0YXJ0IixJPQopLm9uKCJkcmFnIixxKS5vbigiZHJhZ2VuZCIsUik7aWYo IWJ8fCFiLmxlbmd0aHx8IWIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUudmFsdWVzLmxl bmd0aH0pLmxlbmd0aCl7dmFyIFU9M0RMLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW05d KTtyZT0KdHVybiBVLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52 LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43PQplbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRs ZSIpLFUuYXR0cigieCIsdS5sZWZ0K0gvMikuYXR0cigieSIsdS50b3ArQi89CjIpLnRleHQoZnVu Y3Rpb24oZSl7cmV0dXJuIGV9KSxEfUwuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCks dz0zRHQueD0KU2NhbGUoKSxFPTNEdC55U2NhbGUoKTtpZigheSl7dmFyIHo9M0RiLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlPQpkfSkubWFwKGZ1bmN0aW9uKGUsbil7dmFyIHI9 M0RkMy5leHRlbnQoZS52YWx1ZXMsdC55KCkpO3JldHVybiByWzBdPC0wLjk1JiY9CihyWzBdPTNE LTAuOTUpLFsoclswXS1yWzFdKS8oMStyWzFdKSwoclsxXS1yWzBdKS8oMStyWzBdKV19KSxXPTNE W2QzLm1pbih6LD0KZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSxkMy5tYXgoeixmdW5jdGlvbihl KXtyZXR1cm4gZVsxXX0pXTt0LnlEb21haW4oVyl9PQplbHNlIHQueURvbWFpbihudWxsKTtPLmRv bWFpbihbMCxiWzBdLnZhbHVlcy5sZW5ndGgtMV0pLnJhbmdlKFswLEhdKS5jbGFtcCg9CiEwKTt2 YXIgYj0zRFAoTS5pLGIpLFg9M0RnPyJub25lIjoiYWxsIixWPTNETC5zZWxlY3RBbGwoImcubnYt d3JhcC5udi1jdW11bD0KYXRpdmVMaW5lIikuZGF0YShbYl0pLCQ9M0RWLmVudGVyKCkuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgPQpudi1jdW11bGF0aXZlTGluZSIpLmFw cGVuZCgiZyIpLEo9M0RWLnNlbGVjdCgiZyIpOyQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIs Im52LWludGVyYWN0aXZlIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhp cyIpLnN0eWxlKCJwb2ludD0KZXItZXZlbnRzIiwibm9uZSIpLCQuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi15IG52LWF4aXMiKSwkLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudi1i YWNrZ3JvdW5kIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLnM9 CnR5bGUoInBvaW50ZXItZXZlbnRzIixYKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt YXZnTGluZXNXcmFwIikuc3R5bD0KZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksJC5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSwkLmFwPQpwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS53aWR0aChIKSxKLnNlbGVjdCgiLm52LWxl Z2U9Cm5kV3JhcCIpLmRhdHVtKGIpLmNhbGwoaSksdS50b3AhPTNEaS5oZWlnaHQoKSYmKHUudG9w PTNEaS5oZWlnaHQoKSxCPTNEKGx8fD0KcGFyc2VJbnQoTC5zdHlsZSgiaGVpZ2h0IikpfHw0MDAp LXUudG9wLXUuYm90dG9tKSxKLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiPQopLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIpKTtpZihtKXt2YXIgSz0zRFt7a2V5OiJS ZS1zY2E9CmxlIHktYXhpcyIsZGlzYWJsZWQ6IXl9XTtzLndpZHRoKDE0MCkuY29sb3IoWyIjNDQ0 IiwiIzQ0NCIsIiM0NDQiXSkucmlnaHRBbD0KaWduKCExKS5tYXJnaW4oe3RvcDo1LHJpZ2h0OjAs Ym90dG9tOjUsbGVmdDoyMH0pLEouc2VsZWN0KCIubnYtY29udHJvbHNXcmFwPQoiKS5kYXR1bShL KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKS5jYWxsKHMpfVYu YXR0cigidHI9CmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksZCYm Si5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdD0KdHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgi K0grIiwwKSIpO3ZhciBRPTNEYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuPQp0ZW1wRGlz YWJsZWR9KTtWLnNlbGVjdCgiLnRlbXBEaXNhYmxlZCIpLnJlbW92ZSgpLFEubGVuZ3RoJiZWLmFw cGVuZCgidGV4dCI9CikuYXR0cigiY2xhc3MiLCJ0ZW1wRGlzYWJsZWQiKS5hdHRyKCJ4IixILzIp LmF0dHIoInkiLCItLjcxZW0iKS5zdHlsZSgidGV4dD0KLWFuY2hvciIsImVuZCIpLnRleHQoUS5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSkuam9pbigiLCAiKSsiIHZhbHVlcyBjPQphbm5v dCBiZSBjYWxjdWxhdGVkIGZvciB0aGlzIHRpbWUgcGVyaW9kLiIpLGcmJihvLndpZHRoKEgpLmhl aWdodChCKS5tYXJnaW49Cih7bGVmdDp1LmxlZnQsdG9wOnUudG9wfSkuc3ZnQ29udGFpbmVyKEwp LnhTY2FsZSh3KSxWLnNlbGVjdCgiLm52LWludGVyYWN0aT0KdmUiKS5jYWxsKG8pKSwkLnNlbGVj dCgiLm52LWJhY2tncm91bmQiKS5hcHBlbmQoInJlY3QiKSxKLnNlbGVjdCgiLm52LWJhY2tnPQpy b3VuZCByZWN0IikuYXR0cigid2lkdGgiLEgpLmF0dHIoImhlaWdodCIsQiksdC55KGZ1bmN0aW9u KGUpe3JldHVybiBlLmRpc3A9CmxheS55fSkud2lkdGgoSCkuaGVpZ2h0KEIpLmNvbG9yKGIubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGEoZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9u KGUsdCl7cmV0dXJuIWJbdF0uZGlzYWJsZWQmJiFiW3RdLnRlbXBEaXNhYmxlZH0pKTt2YXIgRz0K PTNESi5zZWxlY3QoIi5udi1saW5lc1dyYXAiKS5kYXR1bShiLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZS5kaXNhYmxlZCYmPQohZS50ZW1wRGlzYWJsZWR9KSk7Ry5jYWxsKHQpLGIuZm9yRWFj aChmdW5jdGlvbihlLHQpe2Uuc2VyaWVzSW5kZXg9M0R0fSk7dmE9CnIgWT0zRGIuZmlsdGVyKGZ1 bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiYhIUMoZSl9KSxaPTNESi5zZWxlY3QoIi5udi1h dj0KZ0xpbmVzV3JhcCIpLnNlbGVjdEFsbCgibGluZSIpLmRhdGEoWSxmdW5jdGlvbihlKXtyZXR1 cm4gZS5rZXl9KSxldD0zRGZ1bmN0PQppb24oZSl7dmFyIHQ9M0RFKEMoZSkpO3JldHVybiB0PDA/ MDp0PkI/Qjp0fTtaLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuc3R5bGU9Cigic3Ryb2tlLXdpZHRo IiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEwLDEwIikuc3R5bGUoInN0cm9rZSIsZnVu Y3Rpbz0KbihlLG4pe3JldHVybiB0LmNvbG9yKCkoZSxlLnNlcmllc0luZGV4KX0pLmF0dHIoIngx IiwwKS5hdHRyKCJ4MiIsSCkuYXR0cigiPQp5MSIsZXQpLmF0dHIoInkyIixldCksWi5zdHlsZSgi c3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKGUpe3ZhciB0PTNERShDKGUpKTs9CnJldHVybiB0PDB8 fHQ+Qj8wOjF9KS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLEgpLmF0dHIoInkxIixldCkuYXR0cigi eTIiLGV0KT0KLFouZXhpdCgpLnJlbW92ZSgpO3ZhciB0dD0zREcuc2VsZWN0QWxsKCIubnYtaW5k ZXhMaW5lIikuZGF0YShbTV0pO3R0LmVudGVyPQooKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFz cyIsIm52LWluZGV4TGluZSIpLmF0dHIoIndpZHRoIiwzKS5hdHRyKCJ4IiwtMik9Ci5hdHRyKCJm aWxsIiwicmVkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwuNSkuc3R5bGUoInBvaW50ZXItZXZlbnRz IiwiYWxsIikuYz0KYWxsKEYpLHR0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJu InRyYW5zbGF0ZSgiK08oZS5pKSsiLDApIn0pLmF0PQp0cigiaGVpZ2h0IixCKSxoJiYobi5zY2Fs ZSh3KS50aWNrcyhNYXRoLm1pbihiWzBdLnZhbHVlcy5sZW5ndGgsSC83MCkpLnRpY2s9ClNpemUo LUIsMCksSi5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiK0UucmFuZz0KZSgpWzBdKyIpIiksZDMudHJhbnNpdGlvbihKLnNlbGVjdCgiLm52LXgu bnYtYXhpcyIpKS5jYWxsKG4pKSxwJiYoci5zY2FsZShFPQopLnRpY2tzKEIvMzYpLnRpY2tTaXpl KC1ILDApLGQzLnRyYW5zaXRpb24oSi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKSkuY2FsbCg9CnIp KSxKLnNlbGVjdCgiLm52LWJhY2tncm91bmQgcmVjdCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtN Lng9M0RkMy5tb3VzZSh0aD0KaXMpWzBdLE0uaT0zRE1hdGgucm91bmQoTy5pbnZlcnQoTS54KSks eC5pbmRleD0zRE0uaSxrLnN0YXRlQ2hhbmdlKHgpLG50KCl9PQopLHQuZGlzcGF0Y2gub24oImVs ZW1lbnRDbGljayIsZnVuY3Rpb24oZSl7TS5pPTNEZS5wb2ludEluZGV4LE0ueD0zRE8oTS5pKSw9 CnguaW5kZXg9M0RNLmksay5zdGF0ZUNoYW5nZSh4KSxudCgpfSkscy5kaXNwYXRjaC5vbigibGVn ZW5kQ2xpY2siLGZ1bmN0aW9uKD0KZSx0KXtlLmRpc2FibGVkPTNEIWUuZGlzYWJsZWQseT0zRCFl LmRpc2FibGVkLHgucmVzY2FsZVk9M0R5LGsuc3RhdGVDaGFuZ2UoPQp4KSxELnVwZGF0ZSgpfSks aS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe3guZGlzYWJsZWQ9M0RlLmRp c2E9CmJsZWQsay5zdGF0ZUNoYW5nZSh4KSxELnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlbW92ZSIsZnVuY3Rpbz0KbihpKXt0LmNsZWFySGlnaGxpZ2h0cygpO3ZhciBzLGYs bCxjPTNEW107Yi5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zPQplcmllc0luZGV4PTNE dCwhZS5kaXNhYmxlZH0pLmZvckVhY2goZnVuY3Rpb24obixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJp c2VjdCg9Cm4udmFsdWVzLGkucG9pbnRYVmFsdWUsRC54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixm LCEwKTt2YXIgbz0zRG4udmFsdWVzW2ZdOz0KaWYodHlwZW9mIG89M0Q9M0QidW5kZWZpbmVkIily ZXR1cm47dHlwZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9M0RvKSx0eXBlPQpvZiBsPTNEPTNE InVuZGVmaW5lZCImJihsPTNERC54U2NhbGUoKShELngoKShvLGYpKSksYy5wdXNoKHtrZXk6bi5r ZXksdmFsdWU9CjpELnkoKShvLGYpLGNvbG9yOmEobixuLnNlcmllc0luZGV4KX0pfSk7aWYoYy5s ZW5ndGg+Mil7dmFyIGg9M0RELnlTY2FsZSgpLj0KaW52ZXJ0KGkubW91c2VZKSxwPTNETWF0aC5h YnMoRC55U2NhbGUoKS5kb21haW4oKVswXS1ELnlTY2FsZSgpLmRvbWFpbigpWzFdPQopLGQ9M0Qu MDMqcCxtPTNEZS5uZWFyZXN0VmFsdWVJbmRleChjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZX0pLGgsZCk9CjttIT0zRD0zRG51bGwmJihjW21dLmhpZ2hsaWdodD0zRCEwKX12YXIgZz0z RG4udGlja0Zvcm1hdCgpKEQueCgpKHMsZiksZik7bz0KLnRvb2x0aXAucG9zaXRpb24oe2xlZnQ6 bCt1LmxlZnQsdG9wOmkubW91c2VZK3UudG9wfSkuY2hhcnRDb250YWluZXIoQS5wYXJlPQpudE5v ZGUpLmVuYWJsZWQodikudmFsdWVGb3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNr Rm9ybWF0KCkoZSl9KS49CmRhdGEoe3ZhbHVlOmcsc2VyaWVzOmN9KSgpLG8ucmVuZGVyR3VpZGVM aW5lKGwpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdT0Kc2VvdXQiLGZ1bmN0aW9uKGUpe2su dG9vbHRpcEhpZGUoKSx0LmNsZWFySGlnaGxpZ2h0cygpfSksay5vbigidG9vbHRpcFNob3ciPQos ZnVuY3Rpb24oZSl7diYmXyhlLEEucGFyZW50Tm9kZSl9KSxrLm9uKCJjaGFuZ2VTdGF0ZSIsZnVu Y3Rpb24oZSl7dHlwZW9mIGU9Ci5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGIuZm9yRWFjaChm dW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkWz0Kbl19KSx4LmRpc2FibGVkPTNE ZS5kaXNhYmxlZCksdHlwZW9mIGUuaW5kZXghPTNEInVuZGVmaW5lZCImJihNLmk9M0RlLmluZGV4 PQosTS54PTNETyhNLmkpLHguaW5kZXg9M0RlLmluZGV4LHR0LmRhdGEoW01dKSksdHlwZW9mIGUu cmVzY2FsZVkhPTNEInVuZGVmaW49CmVkIiYmKHk9M0RlLnJlc2NhbGVZKSxELnVwZGF0ZSgpfSl9 KSxEfWZ1bmN0aW9uIFAoZSxuKXtyZXR1cm4gbi5tYXAoZnVuY3Rpbz0KbihuLHIpe2lmKCFuLnZh bHVlcylyZXR1cm4gbjt2YXIgaT0zRG4udmFsdWVzW2VdO2lmKGk9M0Q9M0RudWxsKXJldHVybiBu O3ZhPQpyIHM9M0R0LnkoKShpLGUpO3JldHVybiBzPC0wLjk1JiYhQT8obi50ZW1wRGlzYWJsZWQ9 M0QhMCxuKToobi50ZW1wRGlzYWJsZWQ9Cj0zRCExLG4udmFsdWVzPTNEbi52YWx1ZXMubWFwKGZ1 bmN0aW9uKGUsbil7cmV0dXJuIGUuZGlzcGxheT0zRHt5Oih0LnkoKShlLD0KbiktcykvKDErcyl9 LGV9KSxuKX0pfXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5heGlzKCkscj0z RGUubW9kPQplbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVn ZW5kKCksbz0zRGUuaW50ZXJhY3RpdmVHdWk9CmRlbGluZSgpLHU9M0R7dG9wOjMwLHJpZ2h0OjMw LGJvdHRvbTo1MCxsZWZ0OjYwfSxhPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKT0KLGY9M0RudWxs LGw9M0RudWxsLGM9M0QhMCxoPTNEITAscD0zRCEwLGQ9M0QhMSx2PTNEITAsbT0zRCEwLGc9M0Qh MSx5PTNEITAsPQpiPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4i KyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx3LEU9CixTPTNEdC5pZCgpLHg9M0R7aW5kZXg6MCxy ZXNjYWxlWTp5fSxUPTNEbnVsbCxOPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsQz0zRD0KZnVuY3Rp b24oZSl7cmV0dXJuIGUuYXZlcmFnZX0saz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRv b2x0aXBIaWRlIiwiPQpzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksTD0zRDAsQT0zRCExO24u b3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSw9CnIub3JpZW50KGQ/InJpZ2h0IjoibGVm dCIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBPPTNEZDMuc2NhbGUubGluZWFyKCksTT0zRD0Ke2k6 MCx4OjB9LF89M0RmdW5jdGlvbihpLHMpe3ZhciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8 MCksdT0zRGkucG9zWzFdPQorKHMub2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54 KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50aWM9CmtGb3JtYXQoKSh0LnkoKShpLnBv aW50LGkucG9pbnRJbmRleCkpLGw9M0RiKGkuc2VyaWVzLmtleSxhLGYsaSxEKTtlLnRvb2x0aT0K cC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3Zlci50b29sdGlwPQoiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3UubGVm dCxlLnBvc1sxXSt1LnRvcF0say50b29sdGlwU2hvdyhlKX0pLHQ9Ci5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2sudG9vbHRpcEhpZGUoZSl9KSxrLm9u KD0KInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxELmRp c3BhdGNoPTNEayxELmxpbmVzPTNEPQp0LEQubGVnZW5kPTNEaSxELnhBeGlzPTNEbixELnlBeGlz PTNEcixELmludGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJlYmluZChELHQ9CiwiZGVmaW5lZCIsImlz QXJlYSIsIngiLCJ5IiwieFNjYWxlIiwieVNjYWxlIiwic2l6ZSIsInhEb21haW4iLCJ5RG9tYWlu IiwieD0KUmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNs aXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJ1PQpzZVZvcm9ub2kiLCJpZCIpLEQub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChEKSxELm1hcmdpbj0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHUudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2Uu dG9wOnUudD0Kb3AsdS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uucmln aHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvPQpmIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2Uu Ym90dG9tOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGU9CmZpbmVkIj9l LmxlZnQ6dS5sZWZ0LEQpOnV9LEQud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZj0KPTNEZSxEKTpmfSxELmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSxEKTpsfSxELmNvPQpsb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcig9CmEpLEQp OmF9LEQucmVzY2FsZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0z RGUsRCk6eX0sRC5zaD0Kb3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhtPTNEZSxEKTptfSxELnVzZUludGVyYWN0PQppdmVHdWlkZWxpbmU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsZT0zRD0zRD0zRCEwJiYoRC49Cmlu dGVyYWN0aXZlKCExKSxELnVzZVZvcm9ub2koITEpKSxEKTpnfSxELnNob3dMZWdlbmQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxEKTpjfSxELnNob3dYQXhp cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGg9M0RlLEQpOmh9LEQu c2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEQ9 Cik6cH0sRC5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZD0zRGUsci5vcmllbj0KdChlPyJyaWdodCI6ImxlZnQiKSxEKTpkfSxELnRvb2x0aXBz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoodj0zRGUsRCk6dn0sRC50 b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNE ZSw9CkQpOmJ9LEQuc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o eD0zRGUsRCk6eH0sRC5kZWZhdWx0Uz0KdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhUPTNEZSxEKTpUfSxELm5vRGF0YT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KE49M0RlLEQpOk59LEQuYXZlcmFnZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmc9CnVtZW50cy5sZW5ndGg/KEM9M0RlLEQpOkN9LEQudHJhbnNpdGlvbkR1cmF0aW9uPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oTD0zRGUsRCk6TH0sRC5ub0Vy cm9yQ2hlY2s9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhBPTNEZSxE KTpBfSxEfSxlLm1vZGVscy5kaXNjcmV0ZUJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRShlKXty ZXR1cm4gZS49CmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9M0RuLXQubGVmdC10LnJpZ2h0LEU9M0Ry LXQudG9wLXQuYm90dG9tLFM9M0RkMy5zZWxlYz0KdCh0aGlzKTtlLmZvckVhY2goZnVuY3Rpb24o ZSx0KXtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pPQp9KTt2YXIg VD0zRHAmJmQ/W106ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlv bihlLHQpe3JldHU9CnJue3g6dShlLHQpLHk6YShlLHQpLHkwOmUueTB9fSl9KTtzLmRvbWFpbihw fHxkMy5tZXJnZShUKS5tYXAoZnVuY3Rpb24oZSl7cj0KZXR1cm4gZS54fSkpLnJhbmdlQmFuZHMo dnx8WzAsaV0sLjEpLG8uZG9tYWluKGR8fGQzLmV4dGVudChkMy5tZXJnZShUKS5tYXAoPQpmdW5j dGlvbihlKXtyZXR1cm4gZS55fSkuY29uY2F0KGYpKSksYz9vLnJhbmdlKG18fFtFLShvLmRvbWFp bigpWzBdPDA/MTI6MCk9CixvLmRvbWFpbigpWzFdPjA/MTI6MF0pOm8ucmFuZ2UobXx8W0UsMF0p LGI9M0RifHxzLHc9M0R3fHxvLmNvcHkoKS5yYW5nZShbbz0KKDApLG8oMCldKTt2YXIgTj0zRFMu c2VsZWN0QWxsKCJnLm52LXdyYXAubnYtZGlzY3JldGViYXIiKS5kYXRhKFtlXSksQz0zRE4uPQpl bnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWRpc2NyZXRl YmFyIiksaz0zREMuYXBwZW49CmQoImciKSxMPTNETi5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksTi5hdHRyKCJ0cj0KYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgQT0zRE4uc2VsZWN0KCIubnYtZ3JvdXBzIiku PQpzZWxlY3RBbGwoIi5udi1ncm91cCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0 aW9uKGUpe3JldHVybiBlLmtleX09Cik7QS5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJv a2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMT0KZS02KSxBLmV4aXQoKS5z dHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLnJl bW92PQplKCksQS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYt c2VyaWVzLSIrdH0pLmNsYXNzZWQoImg9Cm92ZXIiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhvdmVy fSksQS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLT0Kb3BhY2l0eSIsLjc1 KTt2YXIgTz0zREEuc2VsZWN0QWxsKCJnLm52LWJhciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJu IGUudmFsPQp1ZXN9KTtPLmV4aXQoKS5yZW1vdmUoKTt2YXIgTT0zRE8uZW50ZXIoKS5hcHBlbmQo ImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmM9CnRpb24oZSx0LG4pe3JldHVybiJ0cmFuc2xhdGUo Iisocyh1KGUsdCkpK3MucmFuZ2VCYW5kKCkqLjA1KSsiLCAiK28oMCkrIikifT0KKS5vbigibW91 c2VvdmVyIixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITAp LGcuZWxlbWVuPQp0TW91c2VvdmVyKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNl cmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUI9CmFuZCgpKih0LnNlcmllcysuNSkvZS5sZW5n dGgsbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZT0KOmQzLmV2 ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNz ZWQoImhvdmVyIiwhPQoxKSxnLmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQs c2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6biw9CnNlcmllc0luZGV4OnQuc2VyaWVzLGU6 ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXtnLmVsZW1lbnRDbGljaz0KKHt2 YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5y YW5nZUJhbmQoKSoodC5zPQplcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludEluZGV4 Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH09CiksZDMuZXZlbnQuc3RvcFByb3Bh Z2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbil7Zy5lbGVtZW50RGJsQ2xpYz0K ayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikp K3MucmFuZ2VCYW5kKCkqKHQuPQpzZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9pbnRJ bmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnQ9Cn0pLGQzLmV2ZW50LnN0b3BQ cm9wYWdhdGlvbigpfSk7TS5hcHBlbmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLDApLmF0dHIoIndp ZD0KdGgiLHMucmFuZ2VCYW5kKCkqLjkvZS5sZW5ndGgpLGM/KE0uYXBwZW5kKCJ0ZXh0IikuYXR0 cigidGV4dC1hbmNob3IiLCJtaWRkPQpsZSIpLE8uc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlv bihlLHQpe3JldHVybiBoKGEoZSx0KSl9KS5hdHRyKCJ4IixzLnJhbmc9CmVCYW5kKCkqLjkvMiku YXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/byhhKGUsdCkpLW8oMCkrMTI6 LTR9KT0KKTpPLnNlbGVjdEFsbCgidGV4dCIpLnJlbW92ZSgpLE8uYXR0cigiY2xhc3MiLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPQo/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3Np dGl2ZSJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS49CmNvbG9yfHxsKGUs dCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxsKGUsdCl9 KS5zZWxlYz0KdCgicmVjdCIpLmF0dHIoImNsYXNzIix5KS5hdHRyKCJ3aWR0aCIscy5yYW5nZUJh bmQoKSouOS9lLmxlbmd0aCksTy5hdHRyKCJ0PQpyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXt2YXIg bj0zRHModShlLHQpKStzLnJhbmdlQmFuZCgpKi4wNSxyPTNEYShlLHQpPDA/byg9CjApOm8oMCkt byhhKGUsdCkpPDE/bygwKS0xOm8oYShlLHQpKTtyZXR1cm4idHJhbnNsYXRlKCIrbisiLCAiK3Ir IikifSkuc2VsZT0KY3QoInJlY3QiKS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IE1hdGgubWF4KE1hdGguYWJzKG8oYShlLHQpKS1vPQooZCYmZFswXXx8MCkpfHwxKX0pLGI9M0Rz LmNvcHkoKSx3PTNEby5jb3B5KCl9KSxFfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm89CnR0b206 MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFl NCkscz0zRGQzLnNjYT0KbGUub3JkaW5hbCgpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUueX0sZj0zRFsw XSxsPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxjPTNEITEsaD0zRGQzLmZvcm1hdCgiLC49CjJm IikscCxkLHYsbSxnPTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJl bGVtZW50RGJsQ2xpY2siLD0KImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSx5 PTNEImRpc2NyZXRlQmFyIixiLHc7cmV0dXJuIEUuZGlzcGF0PQpjaD0zRGcsRS5vcHRpb25zPTNE ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEUpLEUueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9 CnVtZW50cy5sZW5ndGg/KHU9M0RlLEUpOnV9LEUueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhhPTNEZT0KLEUpOmF9LEUubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uucmln aHQ9Cjp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2Uu Ym90dG9tOnQuYm90dG9tLHQubGVmdD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9l LmxlZnQ6dC5sZWZ0LEUpOnR9LEUud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhuPTNEZSxFKTpufSxFLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHM9Ci5sZW5ndGg/KHI9M0RlLEUpOnJ9LEUueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLD0KRSk6c30sRS55U2NhbGU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsRSk6b30sRS54RG9tYWluPQo9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsRSk6cH0sRS55RG9tYWluPTNEZnVu Y3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsRSk6ZH0sRS54UmFuZ2U9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyh2PTNEZSxFKTp2fSxFLnlS YW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEPQplLEUpOm19 LEUuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEUp OmZ9LEUuY29sb3I9Cj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNE ZS51dGlscy5nZXRDb2xvcih0KSxFKTpsfSxFLmlkPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oaT0zRGUsRSk6aX0sRS5zaG93VmFsdWVzPTNEZnVuY3Rpb249CihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsRSk6Y30sRS52YWx1ZUZvcm1hdD0zRGZ1bmN0 aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLEUpOmh9LEUucmVjdENsYXNz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8oeT0zRGUsRSk6eX0sRX0s ZS5tb2RlbHMuZGlzY3JldGVCYXJDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdyhlKXs9CnJl dHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHU9M0RkMy5zZWxlY3QodGhpcykscD0zRHRoaXMs eT0zRChzfHxwYXJzZUludD0KKHUuc3R5bGUoIndpZHRoIikpfHw5NjApLWkubGVmdC1pLnJpZ2h0 LEU9M0Qob3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpPQp8fDQwMCktaS50b3AtaS5ib3R0 b207dy51cGRhdGU9M0RmdW5jdGlvbigpe2cuYmVmb3JlVXBkYXRlKCksdS5jYWxsKHcpfSx3LmM9 Cm9udGFpbmVyPTNEdGhpcztpZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIGUudmFsdWVzLmxlbj0KZ3RofSkubGVuZ3RoKXt2YXIgUz0zRHUuc2VsZWN0QWxsKCIu bnYtbm9EYXRhIikuZGF0YShbbV0pO3JldHVybiBTLmVudGVyKCkuPQphcHBlbmQoInRleHQiKS5h dHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0 ZXg9CnQtYW5jaG9yIiwibWlkZGxlIiksUy5hdHRyKCJ4IixpLmxlZnQreS8yKS5hdHRyKCJ5Iixp LnRvcCtFLzIpLnRleHQoZnVuY3Rpbz0KbihlKXtyZXR1cm4gZX0pLHd9dS5zZWxlY3RBbGwoIi5u di1ub0RhdGEiKS5yZW1vdmUoKSxkPTNEdC54U2NhbGUoKSx2PTNEdC55PQpTY2FsZSgpLmNsYW1w KCEwKTt2YXIgVD0zRHUuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtZGlzY3JldGVCYXJXaXRoQXhl cyIpLmQ9CmF0YShbZV0pLE49M0RULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dmQzIG52LXdyYXAgbnYtZGlzY3JldGVCYT0KcldpdGhBeGVzIikuYXBwZW5kKCJnIiksQz0zRE4u YXBwZW5kKCJkZWZzIiksaz0zRFQuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciPQopLmF0dHIoImNs YXNzIiwibnYteCBudi1heGlzIiksTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYt YXhpcyIpLmE9CnBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi16ZXJvTGluZSIpLmFwcGVuZCgi bGluZSIpLE4uYXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52LWJhcnNXcmFwIiksay5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmxlZnQrIiwiK2kudG9wKyIpIiksPQpsJiZrLnNl bGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiww KSIpLHQud2lkdGg9Cih5KS5oZWlnaHQoRSk7dmFyIEw9M0RrLnNlbGVjdCgiLm52LWJhcnNXcmFw IikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cj0KZXR1cm4hZS5kaXNhYmxlZH0pKTtMLmNh bGwodCksQy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi14LWxhYmVsLWNsPQppcC0i K3QuaWQoKSkuYXBwZW5kKCJyZWN0Iiksay5zZWxlY3QoIiNudi14LWxhYmVsLWNsaXAtIit0Lmlk KCkrIiByZWN0IikuYXQ9CnRyKCJ3aWR0aCIsZC5yYW5nZUJhbmQoKSooYz8yOjEpKS5hdHRyKCJo ZWlnaHQiLDE2KS5hdHRyKCJ4IiwtZC5yYW5nZUJhbmQoKT0KLyhjPzE6MikpO2lmKGEpe24uc2Nh bGUoZCkudGlja3MoeS8xMDApLnRpY2tTaXplKC1FLDApLGsuc2VsZWN0KCIubnYteC5udi1hPQp4 aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyh2LnJhbmdlKClbMF0rKHQuc2hv d1ZhbHVlcygpJiZ2LmRvbWE9CmluKClbMF08MD8xNjowKSkrIikiKSxrLnNlbGVjdCgiLm52LXgu bnYtYXhpcyIpLmNhbGwobik7dmFyIEE9M0RrLnNlbGVjdCgiLj0KbnYteC5udi1heGlzIikuc2Vs ZWN0QWxsKCJnIik7YyYmQS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 PQppb24oZSx0LG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhuJTI9M0Q9M0QwPyI1IjoiMTciKSsi KSJ9KX1mJiYoci5zY2FsZSh2KS49CnRpY2tzKEUvMzYpLnRpY2tTaXplKC15LDApLGsuc2VsZWN0 KCIubnYteS5udi1heGlzIikuY2FsbChyKSksay5zZWxlY3QoIi5udj0KLXplcm9MaW5lIGxpbmUi KS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLHkpLmF0dHIoInkxIix2KDApKS5hdHRyKCJ5MiIsdigw KSksPQpnLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7aCYmYihlLHAucGFyZW50Tm9kZSl9 KX0pLHd9dmFyIHQ9M0RlLm1vZGVscy49CmRpc2NyZXRlQmFyKCksbj0zRGUubW9kZWxzLmF4aXMo KSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0R7dG9wOjE1LHJpZ2h0OjEwLD0KYm90dG9tOjUwLGxl ZnQ6NjB9LHM9M0RudWxsLG89M0RudWxsLHU9M0RlLnV0aWxzLmdldENvbG9yKCksYT0zRCEwLGY9 M0QhMCxsPQo9M0QhMSxjPTNEITEsaD0zRCEwLHA9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVy biI8aDM+Iit0KyI8L2gzPiIrIjxwPiIrbis9CiI8L3A+In0sZCx2LG09M0QiTm8gRGF0YSBBdmFp bGFibGUuIixnPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcD0KSGlkZSIsImJl Zm9yZVVwZGF0ZSIpLHk9M0QwO24ub3JpZW50KCJib3R0b20iKS5oaWdobGlnaHRaZXJvKCExKS5z aG93TWF4TWluPQooITEpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVu dChsPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWE9CnQoZDMuZm9ybWF0KCIsLjFmIikpO3ZhciBi PTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fD0KMCksdT0z RGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9p bnQsaS5wb2ludEluPQpkZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBv aW50SW5kZXgpKSxsPTNEcChpLnNlcmllcy5rZXksYSw9CmYsaSx3KTtlLnRvb2x0aXAuc2hvdyhb byx1XSxsLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLj0Kb24o ImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0r aS5sZWZ0LGUucG9zWzFdPQoraS50b3BdLGcudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9u KCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb249CihlKXtnLnRvb2x0aXBIaWRlKGUp fSksZy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7aCYmZS50b29sdGlwLmNsZWFudXAoKT0K fSksdy5kaXNwYXRjaD0zRGcsdy5kaXNjcmV0ZWJhcj0zRHQsdy54QXhpcz0zRG4sdy55QXhpcz0z RHIsZDMucmViaW5kKHcsdCwiPQp4IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwi eVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaWQiLCJzaG93VmE9Cmx1ZXMiLCJ2YWx1ZUZvcm1h dCIpLHcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh3KSx3Lm1hcmdpbj0zRGZ1 bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wPQo6aS50b3AsaS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0z RCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdodCxpLmJvdHRvbT0zRHQ9CnlwZW9mIGUuYm90dG9t IT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmkuYm90dG9tLGkubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEIj0KdW5kZWZpbmVkIj9lLmxlZnQ6aS5sZWZ0LHcpOml9LHcud2lkdGg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhzPTNEZSx3KTpzfSx3LmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx3KTpvfSw9CncuY29sb3I9M0Rm dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUudXRpbHMuZ2V0Q29sb3Io biksdC5jbz0KbG9yKHUpLHcpOnV9LHcuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9PQosdy5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsdyk6Zn0sdy5yaWdodEFsaWc9Cm5ZQXhpcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxyLm9yaWVudChlPyJy aWdodCI6ImxlZj0KdCIpLHcpOmx9LHcuc3RhZ2dlckxhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx3KTpjPQp9LHcudG9vbHRpcHM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsdyk6aH0sdy50b29sdGlwQ289Cm50ZW50 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHcpOnB9LHcubm9E YXRhPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsdyk6bX0s dy50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh5PTNEZSx3KTp5fSx3fSxlLm1vZGVscy5kaXN0cmlidXRpb249M0RmdW5jdGlvbig9Cil7 ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPTNEbi0oaT0zRD0z RD0zRCJ4Ij90LmxlZnQrdD0KLnJpZ2h0OnQudG9wK3QuYm90dG9tKSxsPTNEaT0zRD0zRCJ4Ij8i eSI6IngiLGM9M0RkMy5zZWxlY3QodGhpcyk7Zj0zRGZ8fHU7PQp2YXIgaD0zRGMuc2VsZWN0QWxs KCJnLm52LWRpc3RyaWJ1dGlvbiIpLmRhdGEoW2VdKSxwPTNEaC5lbnRlcigpLmFwcGVuZCgiZyI9 CikuYXR0cigiY2xhc3MiLCJudmQzIG52LWRpc3RyaWJ1dGlvbiIpLGQ9M0RwLmFwcGVuZCgiZyIp LHY9M0RoLnNlbGVjdCgiZyIpOz0KaC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0Lmxl ZnQrIiwiK3QudG9wKyIpIik7dmFyIG09M0R2LnNlbGVjdEFsbCgiPQpnLm52LWRpc3QiKS5kYXRh KGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KTttLmVudGVy KCk9Ci5hcHBlbmQoImciKSxtLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1k aXN0IG52LXNlcmllcy0iK3R9KS5zdD0KeWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IG8oZSx0KX0pO3ZhciBnPTNEbS5zZWxlY3RBbGwoImxpbmUubnYtZGlzPQp0IitpKS5kYXRhKGZ1 bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO2cuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRy KGkrIjE9CiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihzKGUsdCkpfSkuYXR0cihpKyIyIixmdW5j dGlvbihlLHQpe3JldHVybiBmKHMoZSx0KT0KKX0pLG0uZXhpdCgpLnNlbGVjdEFsbCgibGluZS5u di1kaXN0IitpKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoPQpzKGUsdCkpfSku YXR0cihpKyIyIixmdW5jdGlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KS5zdHlsZSgic3Ryb2tl LW9wYWNpdHk9CiIsMCkucmVtb3ZlKCksZy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4ibnYtZGlzdCIraSsiIG52LWRpc3QiK2krIj0KLSIrdH0pLmF0dHIobCsiMSIsMCkuYXR0cihs KyIyIixyKSxnLmF0dHIoaSsiMSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsPQp0KSl9KS5h dHRyKGkrIjIiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLGY9M0R1LmNvcHkoKX0p LGx9dmFyIHQ9M0Q9Cnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDQwMCxyPTNE OCxpPTNEIngiLHM9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBlW2ldfSxvPTNEZS51dGlscy5kZWZh dWx0Q29sb3IoKSx1PTNEZDMuc2NhbGUubGluZWFyKCksYSxmO3JldHVybiBsLm9wdGlvPQpucz0z RGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChsKSxsLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGU9Cm5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaT0KZ2h0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkPQoi P2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ ZS5sZWZ0OnQubGVmdCxsKTo9CnR9LGwud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obj0zRGUsbCk6bn0sbC5heGlzPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oaT0zRGUsbCk6aX0sbC5zaXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy PQpndW1lbnRzLmxlbmd0aD8ocj0zRGUsbCk6cn0sbC5nZXREYXRhPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8ocz0zRGQzLmZ1bmN0b3IoZSksbCk6c30sbC5zY2FsZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PQo9M0RlLGwpOnV9LGwuY29s b3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUudXRpbHMuZ2V0 Q289Cmxvcih0KSxsKTpvfSxsfSxlLm1vZGVscy5oaXN0b3JpY2FsQmFyQ2hhcnQ9M0RmdW5jdGlv bigpe2Z1bmN0aW9uIHgoZSl7cmV0dT0Kcm4gZS5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBFPTNEZDMu c2VsZWN0KHRoaXMpLFQ9M0R0aGlzLE49M0QodXx8cGFyc2VJbnQoRS5zPQp0eWxlKCJ3aWR0aCIp KXx8OTYwKS1zLmxlZnQtcy5yaWdodCxDPTNEKGF8fHBhcnNlSW50KEUuc3R5bGUoImhlaWdodCIp KXx8NDA9CjApLXMudG9wLXMuYm90dG9tO3gudXBkYXRlPTNEZnVuY3Rpb24oKXtFLmNhbGwoeCl9 LHguY29udGFpbmVyPTNEdGhpcyxnLmRpcz0KYWJsZWQ9M0RkLm1hcChmdW5jdGlvbihlKXtyZXR1 cm4hIWUuZGlzYWJsZWR9KTtpZigheSl7dmFyIGs7eT0zRHt9O2ZvcihrIGluPQogZylnW2tdaW5z dGFuY2VvZiBBcnJheT95W2tdPTNEZ1trXS5zbGljZSgwKTp5W2tdPTNEZ1trXX1pZighZHx8IWQu bGVuZ3RofHw9CiFkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSku bGVuZ3RoKXt2YXIgTD0zREUuc2VsZWN0QWxsKD0KIi5udi1ub0RhdGEiKS5kYXRhKFtiXSk7cmV0 dXJuIEwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgPQpudi1ub0Rh dGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTC5h dHRyKCJ4IixzLmw9CmVmdCtOLzIpLmF0dHIoInkiLHMudG9wK0MvMikudGV4dChmdW5jdGlvbihl KXtyZXR1cm4gZX0pLHh9RS5zZWxlY3RBbGwoIi5udj0KLW5vRGF0YSIpLnJlbW92ZSgpLHY9M0R0 LnhTY2FsZSgpLG09M0R0LnlTY2FsZSgpO3ZhciBBPTNERS5zZWxlY3RBbGwoImcubnYtPQp3cmFw Lm52LWhpc3RvcmljYWxCYXJDaGFydCIpLmRhdGEoW2RdKSxPPTNEQS5lbnRlcigpLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXM9CnMiLCJudmQzIG52LXdyYXAgbnYtaGlzdG9yaWNhbEJhckNoYXJ0Iiku YXBwZW5kKCJnIiksTT0zREEuc2VsZWN0KCJnIik7Ty5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYteCBudi1heGlzIiksTy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtPQph eGlzIiksTy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksTy5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyI9CiwibnYtbGVnZW5kV3JhcCIpLGYmJihpLndpZHRoKE4pLE0uc2Vs ZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGQpLmNhbGwoaT0KKSxzLnRvcCE9M0RpLmhlaWdo dCgpJiYocy50b3A9M0RpLmhlaWdodCgpLEM9M0QoYXx8cGFyc2VJbnQoRS5zdHlsZSgiaGVpZ2h0 PQoiKSl8fDQwMCktcy50b3Atcy5ib3R0b20pLEEuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0 dHIoInRyYW5zZm9ybSIsInRyYW49CnNsYXRlKDAsIisgLXMudG9wKyIpIikpLEEuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKCIrcy5sZWZ0KyIsIitzLnRvcCsiKT0KIiksaCYmTS5zZWxlY3Qo Ii5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitOKyIsMCkiKSx0 LndpPQpkdGgoTikuaGVpZ2h0KEMpLmNvbG9yKGQubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu Y29sb3J8fG8oZSx0KX0pLmZpbHRlcig9CmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWRbdF0uZGlzYWJs ZWR9KSk7dmFyIF89M0RNLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dT0KbShkLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtfLmNhbGwodCksbCYmKG4uc2NhbGUodiku dGlja1NpPQp6ZSgtQywwKSxNLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgwLCIrbS5yYW5nZSg9CilbMF0rIikiKSxNLnNlbGVjdCgiLm52LXgubnYt YXhpcyIpLmNhbGwobikpLGMmJihyLnNjYWxlKG0pLnRpY2tzKEMvMzYpLnRpYz0Ka1NpemUoLU4s MCksTS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJsZWdl bmRDbGljayIsPQpmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9M0QhdC5kaXNhYmxlZCxkLmZpbHRl cihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmw9CmVkfSkubGVuZ3RofHxkLm1hcChmdW5jdGlv bihlKXtyZXR1cm4gZS5kaXNhYmxlZD0zRCExLEEuc2VsZWN0QWxsKCIubnYtc2VyaT0KZXMiKS5j bGFzc2VkKCJkaXNhYmxlZCIsITEpLGV9KSxnLmRpc2FibGVkPTNEZC5tYXAoZnVuY3Rpb24oZSl7 cmV0dXJuISFlLmRpPQpzYWJsZWR9KSx3LnN0YXRlQ2hhbmdlKGcpLGUuY2FsbCh4KX0pLGkuZGlz cGF0Y2gub24oImxlZ2VuZERibGNsaWNrIixmdW5jdGk9Cm9uKGUpe2QuZm9yRWFjaChmdW5jdGlv bihlKXtlLmRpc2FibGVkPTNEITB9KSxlLmRpc2FibGVkPTNEITEsZy5kaXNhYmxlZD0zRD0KZC5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksdy5zdGF0ZUNoYW5nZShnKSx4LnVw ZGF0ZSgpfSksdy5vbigiPQp0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7cCYmUyhlLFQucGFyZW50 Tm9kZSl9KSx3Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb249CihlKXt0eXBlb2YgZS5kaXNhYmxl ZCE9M0QidW5kZWZpbmVkIiYmKGQuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9Cj0z RGUuZGlzYWJsZWRbbl19KSxnLmRpc2FibGVkPTNEZS5kaXNhYmxlZCkseC51cGRhdGUoKX0pfSks eH12YXIgdD0zRGUubW9kZT0KbHMuaGlzdG9yaWNhbEJhcigpLG49M0RlLm1vZGVscy5heGlzKCks cj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnPQplbmQoKSxzPTNEe3RvcDozMCxy aWdodDo5MCxib3R0b206NTAsbGVmdDo5MH0sbz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksdT0K PTNEbnVsbCxhPTNEbnVsbCxmPTNEITEsbD0zRCEwLGM9M0QhMCxoPTNEITEscD0zRCEwLGQ9M0Rm dW5jdGlvbihlLHQsbixyLGkpPQp7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQg Iit0KyI8L3A+In0sdixtLGc9M0R7fSx5PTNEbnVsbCxiPTNEIk49Cm8gRGF0YSBBdmFpbGFibGUu Iix3PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5n ZT0KIiwiY2hhbmdlU3RhdGUiKSxFPTNEMDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmco Nyksci5vcmllbnQoaD8icmlnaHQiPQo6ImxlZnQiKTt2YXIgUz0zRGZ1bmN0aW9uKGkscyl7aWYo cyl7dmFyIG89M0RkMy5zZWxlY3Qocykuc2VsZWN0KCJzdmciKSx1PQo9M0RvLm5vZGUoKT9vLmF0 dHIoInZpZXdCb3giKTpudWxsO2lmKHUpe3U9M0R1LnNwbGl0KCIgIik7dmFyIGE9M0RwYXJzZUlu dCg9Cm8uc3R5bGUoIndpZHRoIikpL3VbMl07aS5wb3NbMF09M0RpLnBvc1swXSphLGkucG9zWzFd PTNEaS5wb3NbMV0qYX19dmFyIGY9Cj0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLGw9M0Rp LnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGM9M0RuLnRpY2tGb3JtYT0KdCgpKHQueCgpKGkucG9p bnQsaS5wb2ludEluZGV4KSksaD0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2lu dEluPQpkZXgpKSxwPTNEZChpLnNlcmllcy5rZXksYyxoLGkseCk7ZS50b29sdGlwLnNob3coW2Ys bF0scCxudWxsLG51bGwscyl9O3JldHU9CnJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92 ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcz0KLmxlZnQsZS5wb3Nb MV0rcy50b3BdLHcudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dXQudG9vPQpsdGlwIixmdW5jdGlvbihlKXt3LnRvb2x0aXBIaWRlKGUpfSksdy5vbigidG9vbHRp cEhpZGUiLGZ1bmN0aW9uKCl7cCYmZS50b289Cmx0aXAuY2xlYW51cCgpfSkseC5kaXNwYXRjaD0z RHcseC5iYXJzPTNEdCx4LmxlZ2VuZD0zRGkseC54QXhpcz0zRG4seC55QXhpcz0KPTNEcixkMy5y ZWJpbmQoeCx0LCJkZWZpbmVkIiwiaXNBcmVhIiwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNj YWxlIiwieERvPQptYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZv cmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2U9CiIsImNsaXBWb3Jvbm9pIiwiaWQiLCJpbnRl cnBvbGF0ZSIsImhpZ2hsaWdodFBvaW50IiwiY2xlYXJIaWdobGlnaHRzIiwiaW50ZT0KcmFjdGl2 ZSIpLHgub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh4KSx4Lm1hcmdpbj0zRGZ1 bmN0aW9uKGUpe3JlPQp0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMudG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wOnMudG9wLHMucmk9CmdodD0zRHR5cGVvZiBlLnJpZ2h0IT0z RCJ1bmRlZmluZWQiP2UucmlnaHQ6cy5yaWdodCxzLmJvdHRvbT0zRHR5cGVvZiBlLmJvdD0KdG9t IT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnMuYm90dG9tLHMubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEInVuZGVmaW5lZCI/PQplLmxlZnQ6cy5sZWZ0LHgpOnN9LHgud2lkdGg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUseCk9Cjp1fSx4LmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSx4KTphfSx4LmNvbG9yPTNEZj0K dW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUudXRpbHMuZ2V0Q29sb3Io dCksaS5jb2xvcihvKSx4KTpvPQp9LHguc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZSx4KTpmfSx4LnNob3dYQXg9CmlzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHgpOmx9LHguc2hvd1lBeGlzPTNEZnVuY3Rp bz0KbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUseCk6Y30seC5yaWdodEFsaWdu WUF4aXM9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxyLm9y aWVudChlPyJyaWdodCI6ImxlZnQiKSx4KTpofSx4LnRvb2x0aXBzPQo9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUseCk6cH0seC50b29sdGlwQ29udGVudD0zRGZ1 bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLHgpOmR9LHguc3RhdGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhnPTNEZSx4KTpnfSx4LmRl ZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KHk9M0Rl LHgpOnl9LHgubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9 M0RlLHg9Cik6Yn0seC50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oRT0zRGUseCk6RT0KfSx4fSxlLm1vZGVscy5pbmRlbnRlZFRyZWU9M0Rm dW5jdGlvbigpe2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvPQpuKGUpe2Z1bmN0 aW9uIGsoZSx0LG4pe2QzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2lmKGQzLmV2ZW50LnNoaWZ0 S2V5JiYhbik9CnJldHVybiBkMy5ldmVudC5zaGlmdEtleT0zRCExLGUudmFsdWVzJiZlLnZhbHVl cy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhlLnZhbD0KdWVzfHxlLl92YWx1ZXMpJiZrKGUsMCwhMCl9 KSwhMDtpZighTyhlKSlyZXR1cm4hMDtlLnZhbHVlcz8oZS5fdmFsdWVzPTNEZS52PQphbHVlcyxl LnZhbHVlcz0zRG51bGwpOihlLnZhbHVlcz0zRGUuX3ZhbHVlcyxlLl92YWx1ZXM9M0RudWxsKSxn LnVwZGF0ZSgpfWY9CnVuY3Rpb24gTChlKXtyZXR1cm4gZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVu Z3RoP2g6ZS52YWx1ZXMmJmUudmFsdWVzLmxlbmd0aD0KP3A6IiJ9ZnVuY3Rpb24gQShlKXtyZXR1 cm4gZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RofWZ1bmN0aW9uIE8oZSl7dmFyIHQ9Cj0zRGUu dmFsdWVzfHxlLl92YWx1ZXM7cmV0dXJuIHQmJnQubGVuZ3RofXZhciB0PTNEMSxuPTNEZDMuc2Vs ZWN0KHRoaXMpLGk9Cj0zRGQzLmxheW91dC50cmVlKCkuY2hpbGRyZW4oZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzfSkuc2l6ZShbcixmXSk7Zy51cD0KZGF0ZT0zRGZ1bmN0aW9uKCl7bi5jYWxs KGcpfSxlWzBdfHwoZVswXT0zRHtrZXk6YX0pO3ZhciBzPTNEaS5ub2RlcyhlWzBdKSx5PQo9M0Rk My5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJkaXYiKS5kYXRhKFtbc11dKSxiPTNEeS5lbnRlcigp LmFwcGVuZCgiZGl2Iik9Ci5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1pbmRlbnRlZHRy ZWUiKSx3PTNEYi5hcHBlbmQoInRhYmxlIiksRT0zRHkucz0KZWxlY3QoInRhYmxlIikuYXR0cigi d2lkdGgiLCIxMDAlIikuYXR0cigiY2xhc3MiLGMpO2lmKG8pe3ZhciBTPTNEdy5hcHBlbmQoPQoi dGhlYWQiKSx4PTNEUy5hcHBlbmQoInRyIik7bC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3guYXBwZW5k KCJ0aCIpLmF0dHIoIndpZHQ9CmgiLGUud2lkdGg/ZS53aWR0aDoiMTAlIikuc3R5bGUoInRleHQt YWxpZ24iLGUudHlwZT0zRD0zRCJudW1lcmljIj8icmlnaHQiOj0KImxlZnQiKS5hcHBlbmQoInNw YW4iKS50ZXh0KGUubGFiZWwpfSl9dmFyIFQ9M0RFLnNlbGVjdEFsbCgidGJvZHkiKS5kYXRhKGZ1 PQpuY3Rpb24oZSl7cmV0dXJuIGV9KTtULmVudGVyKCkuYXBwZW5kKCJ0Ym9keSIpLHQ9M0RkMy5t YXgocyxmdW5jdGlvbihlKXtyZXQ9CnVybiBlLmRlcHRofSksaS5zaXplKFtyLHQqZl0pO3ZhciBO PTNEVC5zZWxlY3RBbGwoInRyIikuZGF0YShmdW5jdGlvbihlKXtyZT0KdHVybiBlLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4gdSYmIWUuY2hpbGRyZW4/dShlKTohMH0pfSxmdW5jdGlvbihlLHQp e3JlPQp0dXJuIGUuaWR8fGUuaWR8fCsrbX0pO04uZXhpdCgpLnJlbW92ZSgpLE4uc2VsZWN0KCJp bWcubnYtdHJlZWljb24iKS5hdHRyKCI9CnNyYyIsTCkuY2xhc3NlZCgiZm9sZGVkIixBKTt2YXIg Qz0zRE4uZW50ZXIoKS5hcHBlbmQoInRyIik7bC5mb3JFYWNoKGZ1bmN0aT0Kb24oZSx0KXt2YXIg bj0zREMuYXBwZW5kKCJ0ZCIpLnN0eWxlKCJwYWRkaW5nLWxlZnQiLGZ1bmN0aW9uKGUpe3JldHVy bih0PzA6PQplLmRlcHRoKmYrMTIrKEwoZSk/MDoxNikpKyJweCJ9LCJpbXBvcnRhbnQiKS5zdHls ZSgidGV4dC1hbGlnbiIsZS50eXBlPTNEPQo9M0QibnVtZXJpYyI/InJpZ2h0IjoibGVmdCIpO3Q9 M0Q9M0QwJiZuLmFwcGVuZCgiaW1nIikuY2xhc3NlZCgibnYtdHJlZWljb249CiIsITApLmNsYXNz ZWQoIm52LWZvbGRlZCIsQSkuYXR0cigic3JjIixMKS5zdHlsZSgid2lkdGgiLCIxNHB4Iikuc3R5 bGUoImhlaT0KZ2h0IiwiMTRweCIpLnN0eWxlKCJwYWRkaW5nIiwiMCAxcHgiKS5zdHlsZSgiZGlz cGxheSIsZnVuY3Rpb24oZSl7cmV0dXJuIEwoPQplKT8iaW5saW5lLWJsb2NrIjoibm9uZSJ9KS5v bigiY2xpY2siLGspLG4uZWFjaChmdW5jdGlvbihuKXshdCYmdihuKT9kMy5zZWw9CmVjdCh0aGlz KS5hcHBlbmQoImEiKS5hdHRyKCJocmVmIix2KS5hdHRyKCJjbGFzcyIsZDMuZnVuY3RvcihlLmNs YXNzZXMpKS5hcD0KcGVuZCgic3BhbiIpOmQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoInNwYW4iKSxk My5zZWxlY3QodGhpcykuc2VsZWN0KCJzcGFuIikuPQphdHRyKCJjbGFzcyIsZDMuZnVuY3Rvcihl LmNsYXNzZXMpKS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBlLmZvcm1hdD90W2Uua2U9CnldP2Uu Zm9ybWF0KHRbZS5rZXldKToiLSI6dFtlLmtleV18fCItIn0pfSksZS5zaG93Q291bnQmJihuLmFw cGVuZCgic3BhbiIpLj0KYXR0cigiY2xhc3MiLCJudi1jaGlsZHJlbkNvdW50IiksTi5zZWxlY3RB bGwoInNwYW4ubnYtY2hpbGRyZW5Db3VudCIpLnRleHQoPQpmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZXMmJmUudmFsdWVzLmxlbmd0aHx8ZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RoPyI9Cigi KyhlLnZhbHVlcyYmZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1P3UoZSk6ITB9 KS5sZW5ndGh8fGUuX3ZhbD0KdWVzJiZlLl92YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biB1P3UoZSk6ITB9KS5sZW5ndGh8fDApKyIpIjoiIn0pKX0pPQosTi5vcmRlcigpLm9uKCJjbGlj ayIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50Q2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCw9 CmUueV19KX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50RGJsY2xpY2soe3Jv dzp0aGlzLGRhdGE6ZSxwb3M6Wz0KZS54LGUueV19KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9u KGUpe2QuZWxlbWVudE1vdXNlb3Zlcih7cm93OnRoaXMsZGF0YTplPQoscG9zOltlLngsZS55XX0p fSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlKXtkLmVsZW1lbnRNb3VzZW91dCh7cm93OnRoaXMs ZGE9CnRhOmUscG9zOltlLngsZS55XX0pfSl9KSxnfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90 dG9tOjAsbGVmdDowfSxuPTNEOTYwLD0Kcj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3Io KSxzPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksbz0zRCEwPQosdT0zRCExLGE9M0Qi Tm8gRGF0YSBBdmFpbGFibGUuIixmPTNEMjAsbD0zRFt7a2V5OiJrZXkiLGxhYmVsOiJOYW1lIix0 eXBlOiI9CnRleHQifV0sYz0zRG51bGwsaD0zRCJpbWFnZXMvZ3JleS1wbHVzLnBuZyIscD0zRCJp bWFnZXMvZ3JleS1taW51cy5wbmciLGQ9Cj0zRGQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLCJl bGVtZW50RGJsY2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudD0KTW91c2VvdXQiKSx2 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUudXJsfSxtPTNEMDtyZXR1cm4gZy5vcHRpb25zPTNEZS51 dGlscy5vPQpwdGlvbnNGdW5jLmJpbmQoZyksZy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0Q9CnR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9l LnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaT0KbmVkIj9lLnJp Z2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206dC5iPQpvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2Uu bGVmdDp0LmxlZnQsZyk6dH0sZy53aWR0aD0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG49M0RlLGcpOm59LGcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJn dW1lbnRzLmxlbmd0aD8ocj0zRGUsZyk6cn0sZy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBh cmd1bWVudHMubGVuPQpndGg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLHNjYXR0ZXIuY29sb3Io aSksZyk6aX0sZy5pZD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9 M0RlLGcpOnN9LGcuaGVhZGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0 aD8obz0zRGUsZyk6b30sZy5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYT0zRGUsZyk6PQphfSxnLmZpbHRlclplcm89M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odT0zRGUsZyk6dX0sZy5jb2x1bW49CnM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsZyk6bH0sZy50YWJsZUNsYXNzPTNEZnVuY3Rpbz0K bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsZyk6Y30sZy5pY29uT3Blbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLGcpOmh9LGcuaWNvbkNs b3NlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8ocD0zRGUsZyk6cH0s Zy5nZXRVcmw9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsZyk6 dj0KfSxnfSxlLm1vZGVscy5sZWdlbmQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGMoaCl7cmV0dXJu IGguZWFjaChmdW5jdGlvbihjKXt2PQphciBoPTNEbi10LmxlZnQtdC5yaWdodCxwPTNEZDMuc2Vs ZWN0KHRoaXMpLGQ9M0RwLnNlbGVjdEFsbCgiZy5udi1sZWdlbmQiKS49CmRhdGEoW2NdKSx2PTNE ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1sZWdlbmQiKS5hcHBl bmQoIj0KZyIpLG09M0RkLnNlbGVjdCgiZyIpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpPQo7dmFyIGc9M0RtLnNlbGVjdEFsbCgiLm52LXNlcmll cyIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx5PTNEZy5lbnRlcig9CikuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1zZXJpZXMiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQp e2wubGVnZT0KbmRNb3VzZW92ZXIoZSx0KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXts LmxlZ2VuZE1vdXNlb3V0KGUsdCl9KS5vbigiPQpjbGljayIsZnVuY3Rpb24oZSx0KXtsLmxlZ2Vu ZENsaWNrKGUsdCksYSYmKGY/KGMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2E9CmJsZWQ9M0Qh MH0pLGUuZGlzYWJsZWQ9M0QhMSk6KGUuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCxjLmV2ZXJ5KGZ1 bmN0aW9uKGUpez0KcmV0dXJuIGUuZGlzYWJsZWR9KSYmYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uu ZGlzYWJsZWQ9M0QhMX0pKSxsLnN0YXRlQ2hhbmdlPQooe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9u KGUpe3JldHVybiEhZS5kaXNhYmxlZH0pfSkpfSkub24oImRibGNsaWNrIixmdW5jdGk9Cm9uKGUs dCl7bC5sZWdlbmREYmxjbGljayhlLHQpLGEmJihjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNh YmxlZD0zRCEwfSksZT0KLmRpc2FibGVkPTNEITEsbC5zdGF0ZUNoYW5nZSh7ZGlzYWJsZWQ6Yy5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkPQp9KX0pKX0pO3kuYXBwZW5kKCJjaXJj bGUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZC09CnN5 bWJvbCIpLmF0dHIoInIiLDUpLHkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJz dGFydCIpLmF0dHIoImNsYT0Kc3MiLCJudi1sZWdlbmQtdGV4dCIpLmF0dHIoImR5IiwiLjMyZW0i KS5hdHRyKCJkeCIsIjgiKSxnLmNsYXNzZWQoImRpc2FibGVkPQoiLGZ1bmN0aW9uKGUpe3JldHVy biBlLmRpc2FibGVkfSksZy5leGl0KCkucmVtb3ZlKCksZy5zZWxlY3QoImNpcmNsZSIpLnN0eWw9 CmUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLnN0eWxlKCJz dHJva2UiLGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gZS5jb2xvcnx8cyhlLHQpfSksZy5zZWxlY3Qo InRleHQiKS50ZXh0KGkpO2lmKG8pe3ZhciBiPTNEW107Zy5lYWNoPQooZnVuY3Rpb24odCxuKXt2 YXIgcj0zRGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKSxpO3RyeXtpPTNEci5nZXRDb21w dXQ9CmVkVGV4dExlbmd0aCgpO2lmKGk8PTNEMCl0aHJvdyBFcnJvcigpfWNhdGNoKHMpe2k9M0Rl LnV0aWxzLmNhbGNBcHByb3hUZXh0Vz0KaWR0aChyKX1iLnB1c2goaSsyOCl9KTt2YXIgdz0zRDAs RT0zRDAsUz0zRFtdO3doaWxlKEU8aCYmdzxiLmxlbmd0aClTW3ddPTNEPQpiW3ddLEUrPTNEYlt3 KytdO3c9M0Q9M0Q9M0QwJiYodz0zRDEpO3doaWxlKEU+aCYmdz4xKXtTPTNEW10sdy0tO2Zvcih2 YXIgeD0KPTNEMDt4PGIubGVuZ3RoO3grKyliW3hdPihTW3gld118fDApJiYoU1t4JXddPTNEYlt4 XSk7RT0zRFMucmVkdWNlKGZ1bmN0aW9uPQooZSx0LG4scil7cmV0dXJuIGUrdH0pfXZhciBUPTNE W107Zm9yKHZhciBOPTNEMCxDPTNEMDtOPHc7TisrKVRbTl09M0RDLEMrPQo9M0RTW05dO2cuYXR0 cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitUW3Qld10rIiwi Kyg1K009CmF0aC5mbG9vcih0L3cpKjIwKSsiKSJ9KSx1P20uYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrKG4tdC5yaWdodC1FKSsiLD0KIit0LnRvcCsiKSIpOm0uYXR0cigidHJhbnNmb3Jt IiwidHJhbnNsYXRlKDAsIit0LnRvcCsiKSIpLHI9M0R0LnRvcCt0LmJvdHRvPQptK01hdGguY2Vp bChiLmxlbmd0aC93KSoyMH1lbHNle3ZhciBrPTNENSxMPTNENSxBPTNEMCxPO2cuYXR0cigidHJh bnNmb3JtIiw9CmZ1bmN0aW9uKGUscil7dmFyIGk9M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0 ZXh0Iikubm9kZSgpLmdldENvbXB1dGVkVGV4dD0KTGVuZ3RoKCkrMjg7cmV0dXJuIE89M0RMLG48 dC5sZWZ0K3QucmlnaHQrTytpJiYoTD0zRE89M0Q1LGsrPTNEMjApLEwrPTNEaSxMPQo+QSYmKEE9 M0RMKSwidHJhbnNsYXRlKCIrTysiLCIraysiKSJ9KSxtLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiKyhuLXQ9Ci5yaWdodC1BKSsiLCIrdC50b3ArIikiKSxyPTNEdC50b3ArdC5ib3R0b20r aysxNX19KSxjfXZhciB0PTNEe3RvcDo1LHJpZ2h0Oj0KMCxib3R0b206NSxsZWZ0OjB9LG49M0Q0 MDAscj0zRDIwLGk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9LHM9M0RlLnV0aWxzPQouZGVm YXVsdENvbG9yKCksbz0zRCEwLHU9M0QhMCxhPTNEITAsZj0zRCExLGw9M0RkMy5kaXNwYXRjaCgi bGVnZW5kQ2xpY2siLCI9CmxlZ2VuZERibGNsaWNrIiwibGVnZW5kTW91c2VvdmVyIiwibGVnZW5k TW91c2VvdXQiLCJzdGF0ZUNoYW5nZSIpO3JldHVybiBjLj0KZGlzcGF0Y2g9M0RsLGMub3B0aW9u cz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChjKSxjLm1hcmdpbj0zRGZ1bmN0aW9uKGUpPQp7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmlu ZWQiP2UudG9wOnQudG9wLHQ9Ci5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQi P2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLj0KYm90dG9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5l PQpkIj9lLmxlZnQ6dC5sZWZ0LGMpOnR9LGMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obj0zRGU9CixjKTpufSxjLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxjKTpyfSxjLmtleT0zRD0KZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLGMpOml9LGMuY29sb3I9M0RmdW5jdGlvbih0KXty ZXR1PQpybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZS51dGlscy5nZXRDb2xvcih0KSxjKTpzfSxj LmFsaWduPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsYyk6 b30sYy5yaWdodEFsaWduPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8o dT0zRGUsYyk6dX0sYy51cGRhdGVTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPQo/KGE9M0RlLGMpOmF9LGMucmFkaW9CdXR0b25Nb2RlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0Q9CmUsYyk6Zn0sY30sZS5tb2RlbHMubGluZT0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gbShnKXtyZXR1cm4gZy5lYWNoKGZ1bmN0aW9uKD0KbSl7dmFyIGc9 M0RyLW4ubGVmdC1uLnJpZ2h0LGI9M0RpLW4udG9wLW4uYm90dG9tLHc9M0RkMy5zZWxlY3QodGhp cyk7Yz0zRHQuPQp4U2NhbGUoKSxoPTNEdC55U2NhbGUoKSxkPTNEZHx8Yyx2PTNEdnx8aDt2YXIg RT0zRHcuc2VsZWN0QWxsKCJnLm52LXdyYXAubnY9Ci1saW5lIikuZGF0YShbbV0pLFM9M0RFLmVu dGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbD0KaW5lIiks VD0zRFMuYXBwZW5kKCJkZWZzIiksTj0zRFMuYXBwZW5kKCJnIiksQz0zREUuc2VsZWN0KCJnIik7 Ti5hcHBlbmQoImciPQopLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksTi5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksRS49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK24ubGVmdCsiLCIrbi50b3ArIikiKSx0LndpZHRoKGcpLmhlaWdodChiKTt2YT0KciBr PTNERS5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpO2suY2FsbCh0KSxULmFwcGVuZCgiY2xpcFBh dGgiKS5hdHRyKCJpZCIsPQoibnYtZWRnZS1jbGlwLSIrdC5pZCgpKS5hcHBlbmQoInJlY3QiKSxF LnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiIHI9CmVjdCIpLmF0dHIoIndpZHRoIixn KS5hdHRyKCJoZWlnaHQiLGI+MD9iOjApLEMuYXR0cigiY2xpcC1wYXRoIixsPyJ1cmwoI252LT0K ZWRnZS1jbGlwLSIrdC5pZCgpKyIpIjoiIiksay5hdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYt ZWRnZS1jbGlwLSIrdC5pZCgpPQorIikiOiIiKTt2YXIgTD0zREUuc2VsZWN0KCIubnYtZ3JvdXBz Iikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGV9LGZ1 bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO0wuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Ry bz0Ka2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksTC5leGl0KCku cmVtb3ZlKCksTC5hdHRyKCJjbGFzPQpzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBu di1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGUuaG92 ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQpfSkuc3R5bGUoInN0 cm9rZT0KIixmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9KSxMLnN0eWxlKCJzdHJva2Utb3Bh Y2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhPQpjaXR5IiwuNSk7dmFyIEE9M0RMLnNlbGVjdEFsbCgi cGF0aC5udi1hcmVhIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZihlKT89CltlXTpbXX0pO0Eu ZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm52LWFyZWEiKS5hdHRyKCJkIixm dW5jdGlvbj0KKHQpe3JldHVybiBkMy5zdmcuYXJlYSgpLmludGVycG9sYXRlKHApLmRlZmluZWQo YSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlPQoudXRpbHMuTmFOdG9aZXJvKGQobyh0LG4pKSl9 KS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHU9Cih0LG4pKSl9 KS55MShmdW5jdGlvbihlLHQpe3JldHVybiB2KGguZG9tYWluKClbMF08PTNEMD9oLmRvbWFpbigp WzFdPj0zRDA/MD0KOmguZG9tYWluKClbMV06aC5kb21haW4oKVswXSl9KS5hcHBseSh0aGlzLFt0 LnZhbHVlc10pfSksTC5leGl0KCkuc2VsZWN0QWxsPQooInBhdGgubnYtYXJlYSIpLnJlbW92ZSgp LEEuYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50ZXI9CnBvbGF0 ZShwKS5kZWZpbmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8o YyhvKHQsbikpKX0pLj0KeTAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8o aCh1KHQsbikpKX0pLnkxKGZ1bmN0aW9uKGUsdCl7cmV0PQp1cm4gaChoLmRvbWFpbigpWzBdPD0z RDA/aC5kb21haW4oKVsxXT49M0QwPzA6aC5kb21haW4oKVsxXTpoLmRvbWFpbigpWzBdKX09Ciku YXBwbHkodGhpcyxbdC52YWx1ZXNdKX0pO3ZhciBPPTNETC5zZWxlY3RBbGwoInBhdGgubnYtbGlu ZSIpLmRhdGEoZnVuY3Rpbz0KbihlKXtyZXR1cm5bZS52YWx1ZXNdfSk7Ty5lbnRlcigpLmFwcGVu ZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibnYtbGluZSIpLmF0PQp0cigiZCIsZDMuc3ZnLmxpbmUo KS5pbnRlcnBvbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGk9 CmxzLk5hTnRvWmVybyhkKG8odCxuKSkpfSkueShmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxz Lk5hTnRvWmVybyh2KHUodCxuKT0KKSl9KSksTy5hdHRyKCJkIixkMy5zdmcubGluZSgpLmludGVy cG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JlPQp0dXJuIGUudXRpbHMuTmFO dG9aZXJvKGMobyh0LG4pKSl9KS55KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9a ZXI9Cm8oaCh1KHQsbikpKX0pKSxkPTNEYy5jb3B5KCksdj0zRGguY29weSgpfSksbX12YXIgdD0z RGUubW9kZWxzLnNjYXR0ZXIoKSxuPQo9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9 LHI9M0Q5NjAsaT0zRDUwMCxzPTNEZS51dGlscy5kZWZhdWx0Q29sb3I9CigpLG89M0RmdW5jdGlv bihlKXtyZXR1cm4gZS54fSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYT0zRGZ1bmN0aW9u KGUsdD0KKXtyZXR1cm4haXNOYU4odShlLHQpKSYmdShlLHQpIT0zRD0zRG51bGx9LGY9M0RmdW5j dGlvbihlKXtyZXR1cm4gZS5hcmVhfSxsPQo9M0QhMSxjLGgscD0zRCJsaW5lYXIiO3Quc2l6ZSgx Nikuc2l6ZURvbWFpbihbMTYsMjU2XSk7dmFyIGQsdjtyZXR1cm4gbS5kaXM9CnBhdGNoPTNEdC5k aXNwYXRjaCxtLnNjYXR0ZXI9M0R0LGQzLnJlYmluZChtLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJz aXplIiwieD0KU2NhbGUiLCJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhS YW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iPQosImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6 ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImNsaXBSYWRpdXMiLCJwYWQ9CkRhdGEiLCJo aWdobGlnaHRQb2ludCIsImNsZWFySGlnaGxpZ2h0cyIpLG0ub3B0aW9ucz0zRGUudXRpbHMub3B0 aW9uc0Z1bmMuYj0KaW5kKG0pLG0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50 b3Asbi5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ9CjpuLnJp Z2h0LG4uYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm4u Ym90dG9tLG4ubGVmdD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bi5s ZWZ0LG0pOm59LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhyPTNEZSxtKTpyfSxtLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5s ZW5ndGg/KGk9M0RlLG0pOml9LG0ueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhvPTNEZSx0LngoZT0KKSxtKTpvfSxtLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odT0zRGUsdC55KGUpLG0pOnV9LG0uY2xpPQpwRWRnZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLmNvbG9yPTNEZnVuY3Rpb249 CihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUudXRpbHMuZ2V0Q29sb3IobiksdC5j b2xvcihzKSxtKTpzfSxtLmludD0KZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5kZWZpbmVkPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsbSk6YX0sbS5pc0FyZWE9M0RmdW5jdGlvbihlKXtyZXR1 cm49CiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZDMuZnVuY3RvcihlKSxtKTpmfSxtfSxlLm1vZGVs cy5saW5lQ2hhcnQ9M0RmdW5jdGlvbj0KKCl7ZnVuY3Rpb24gTihtKXtyZXR1cm4gbS5lYWNoKGZ1 bmN0aW9uKG0pe3ZhciB4PTNEZDMuc2VsZWN0KHRoaXMpLEM9M0R0aGlzPQosaz0zRChhfHxwYXJz ZUludCh4LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxMPTNEKGZ8fHBhcnNl SW50KHg9Ci5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tO04udXBkYXRlPTNE ZnVuY3Rpb24oKXt4LmNhbGwoTil9LE4uYz0Kb250YWluZXI9M0R0aGlzLGIuZGlzYWJsZWQ9M0Rt Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7PQp2YXIgQTt3PTNE e307Zm9yKEEgaW4gYiliW0FdaW5zdGFuY2VvZiBBcnJheT93W0FdPTNEYltBXS5zbGljZSgwKTp3 W0FdPTNEYls9CkFdfWlmKCFtfHwhbS5sZW5ndGh8fCFtLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1 cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKT0Ke3ZhciBPPTNEeC5zZWxlY3RBbGwoIi5udi1u b0RhdGEiKS5kYXRhKFtFXSk7cmV0dXJuIE8uZW50ZXIoKS5hcHBlbmQoInRleHQiPQopLmF0dHIo ImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQt YW5jaG9yIiwibWk9CmRkbGUiKSxPLmF0dHIoIngiLG8ubGVmdCtrLzIpLmF0dHIoInkiLG8udG9w K0wvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZT0KfSksTn14LnNlbGVjdEFsbCgiLm52LW5v RGF0YSIpLnJlbW92ZSgpLGc9M0R0LnhTY2FsZSgpLHk9M0R0LnlTY2FsZSgpO3ZhciBNPQo9M0R4 LnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVDaGFydCIpLmRhdGEoW21dKSxfPTNETS5lbnRl cigpLmFwcGVuZCgiZyI9CikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZUNoYXJ0 IikuYXBwZW5kKCJnIiksRD0zRE0uc2VsZWN0KCJnIik7Xz0KLmFwcGVuZCgicmVjdCIpLnN0eWxl KCJvcGFjaXR5IiwwKSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzPQoi KSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksXy5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm49CnYtbGluZXNXcmFwIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LWxlZ2VuZFdyYXAiKSxfLmFwcGVuZCgiZyIpLmF0dD0KcigiY2xhc3MiLCJudi1pbnRl cmFjdGl2ZSIpLEQuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLGspLmF0dHIoImhlaWdodCIs PQpMPjA/TDowKSxsJiYoaS53aWR0aChrKSxELnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1 bShtKS5jYWxsKGkpLG8udG9wIT0KPTNEaS5oZWlnaHQoKSYmKG8udG9wPTNEaS5oZWlnaHQoKSxM PTNEKGZ8fHBhcnNlSW50KHguc3R5bGUoImhlaWdodCIpKXx8NDAwPQopLW8udG9wLW8uYm90dG9t KSxNLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo MCw9CiIrIC1vLnRvcCsiKSIpKSxNLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ubGVm dCsiLCIrby50b3ArIikiKSxwJiZELj0Kc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKCIraysiLDApIiksZCYmKHMud2lkdGgoPQprKS5oZWlnaHQoTCku bWFyZ2luKHtsZWZ0Om8ubGVmdCx0b3A6by50b3B9KS5zdmdDb250YWluZXIoeCkueFNjYWxlKGcp LE0uc2U9CmxlY3QoIi5udi1pbnRlcmFjdGl2ZSIpLmNhbGwocykpLHQud2lkdGgoaykuaGVpZ2h0 KEwpLmNvbG9yKG0ubWFwKGZ1bmN0aW9uKD0KZSx0KXtyZXR1cm4gZS5jb2xvcnx8dShlLHQpfSku ZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIW1bdF0uZGlzYWJsZWR9KSk7PQp2YXIgUD0zREQu c2VsZWN0KCIubnYtbGluZXNXcmFwIikuZGF0dW0obS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJu IWUuZGlzYWI9CmxlZH0pKTtQLmNhbGwodCksYyYmKG4uc2NhbGUoZykudGlja3Moay8xMDApLnRp Y2tTaXplKC1MLDApLEQuc2VsZWN0KCIubnYteD0KLm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIpLEQuc2VsZWN0KCIubnYtPQp4Lm52LWF4 aXMiKS5jYWxsKG4pKSxoJiYoci5zY2FsZSh5KS50aWNrcyhMLzM2KS50aWNrU2l6ZSgtaywwKSxE LnNlbGVjdCgiLm49CnYteS5udi1heGlzIikuY2FsbChyKSksaS5kaXNwYXRjaC5vbigic3RhdGVD aGFuZ2UiLGZ1bmN0aW9uKGUpe2I9M0RlLFMuc3RhdD0KZUNoYW5nZShiKSxOLnVwZGF0ZSgpfSks cy5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhPQpySGln aGxpZ2h0cygpO3ZhciBhLGYsbCxjPTNEW107bS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS5zZXJpZXNJbmRleD0KPTNEdCwhZS5kaXNhYmxlZH0pLmZvckVhY2goZnVuY3Rpb24obixyKXtm PTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpPQoucG9pbnRYVmFsdWUsTi54KCkpLHQu aGlnaGxpZ2h0UG9pbnQocixmLCEwKTt2YXIgcz0zRG4udmFsdWVzW2ZdO2lmKHR5cGVvZiA9CnM9 M0Q9M0QidW5kZWZpbmVkIilyZXR1cm47dHlwZW9mIGE9M0Q9M0QidW5kZWZpbmVkIiYmKGE9M0Rz KSx0eXBlb2YgbD0zRD0zRD0KInVuZGVmaW5lZCImJihsPTNETi54U2NhbGUoKShOLngoKShzLGYp KSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6Ti55KCkocyxmPQopLGNvbG9yOnUobixuLnNlcmll c0luZGV4KX0pfSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0ROLnlTY2FsZSgpLmludmVydChpLm09 Cm91c2VZKSxwPTNETWF0aC5hYnMoTi55U2NhbGUoKS5kb21haW4oKVswXS1OLnlTY2FsZSgpLmRv bWFpbigpWzFdKSxkPTNELjAzKj0KcCxnPTNEZS5uZWFyZXN0VmFsdWVJbmRleChjLm1hcChmdW5j dGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLGgsZCk7ZyE9M0Q9M0RuPQp1bGwmJihjW2ddLmhpZ2hs aWdodD0zRCEwKX12YXIgeT0zRG4udGlja0Zvcm1hdCgpKE4ueCgpKGEsZikpO3MudG9vbHRpcC5w b3M9Cml0aW9uKHtsZWZ0Omwrby5sZWZ0LHRvcDppLm1vdXNlWStvLnRvcH0pLmNoYXJ0Q29udGFp bmVyKEMucGFyZW50Tm9kZSkuZW5hYj0KbGVkKHYpLnZhbHVlRm9ybWF0dGVyKGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHIudGlja0Zvcm1hdCgpKGUpfSkuZGF0YSh7dmFsdWU6PQp5LHNlcmllczpjfSko KSxzLnJlbmRlckd1aWRlTGluZShsKX0pLHMuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dCIs ZnVuY3Q9CmlvbihlKXtTLnRvb2x0aXBIaWRlKCksdC5jbGVhckhpZ2hsaWdodHMoKX0pLFMub24o InRvb2x0aXBTaG93IixmdW5jdGlvbihlKT0Ke3YmJlQoZSxDLnBhcmVudE5vZGUpfSksUy5vbigi Y2hhbmdlU3RhdGUiLGZ1bmN0aW9uKGUpe3R5cGVvZiBlLmRpc2FibGVkIT0KPTNEInVuZGVmaW5l ZCImJm0ubGVuZ3RoPTNEPTNEPTNEZS5kaXNhYmxlZC5sZW5ndGgmJihtLmZvckVhY2goZnVuY3Rp b24odCxuPQope3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkW25dfSksYi5kaXNhYmxlZD0zRGUuZGlz YWJsZWQpLE4udXBkYXRlKCl9KX0pLE59dmE9CnIgdD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZS5t b2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLj0KbGVnZW5kKCks cz0zRGUuaW50ZXJhY3RpdmVHdWlkZWxpbmUoKSxvPTNEe3RvcDozMCxyaWdodDoyMCxib3R0b206 NTAsbGVmdDo2PQowfSx1PTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxhPTNEbnVsbCxmPTNEbnVs bCxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPTNEITE9CixkPTNEITEsdj0zRCEwLG09M0RmdW5jdGlv bihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ID0KIit0KyI8 L3A+In0sZyx5LGI9M0R7fSx3PTNEbnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsUz0zRGQz LmRpc3BhdGNoKCJ0PQpvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNo YW5nZVN0YXRlIikseD0zRDA7bi5vcmllbnQoImJvdHQ9Cm9tIikudGlja1BhZGRpbmcoNyksci5v cmllbnQocD8icmlnaHQiOiJsZWZ0Iik7dmFyIFQ9M0RmdW5jdGlvbihpLHMpe3ZhciBvPQo9M0Rp LnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxh PTNEbi50aWNrRm9ybWE9CnQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRp Y2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbj0KZGV4KSksbD0zRG0oaS5zZXJpZXMu a2V5LGEsZixpLE4pO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1PQpy biB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2Uu cG9zPTNEW2UucG9zWzBdK289Ci5sZWZ0LGUucG9zWzFdK28udG9wXSxTLnRvb2x0aXBTaG93KGUp fSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvbz0KbHRpcCIsZnVuY3Rpb24oZSl7 Uy50b29sdGlwSGlkZShlKX0pLFMub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3YmJmUudG9v PQpsdGlwLmNsZWFudXAoKX0pLE4uZGlzcGF0Y2g9M0RTLE4ubGluZXM9M0R0LE4ubGVnZW5kPTNE aSxOLnhBeGlzPTNEbixOLnlBeGk9CnM9M0RyLE4uaW50ZXJhY3RpdmVMYXllcj0zRHMsZDMucmVi aW5kKE4sdCwiZGVmaW5lZCIsImlzQXJlYSIsIngiLCJ5Iiwic2l6ZT0KIiwieFNjYWxlIiwieVNj YWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3Jj ZVkiPQosImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2ki LCJpZCIsImludGVycG9sYXRlIiksTi49Cm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJp bmQoTiksTi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhv LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PTNE dHlwZW9mPQogZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGU9CmZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZj0KdCxOKTpvfSxO LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLE4pOmF9 LE4uaGVpZ2h0PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUs Tik6Zn0sTi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9 M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IodSksTik6dX0sTi5zaG93TGVnZT0KbmQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsTik6bH0sTi5zaG93WEF4 aXM9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxOKTpjfSxO LnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KGg9M0Rl LE4pOmh9LE4ucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRz Lmxlbmd0aD8ocD0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksTik6cH0sTi51c2VJbnRl cmFjdGl2ZUd1aWRlbGluPQplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGQ9M0RlLGU9M0Q9M0Q9M0QhMCYmKE4uaW50ZXJhY3RpdmU9CighMSksTi51c2VWb3Jvbm9pKCEx KSksTik6ZH0sTi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0K dGg/KHY9M0RlLE4pOnZ9LE4udG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obT0KPTNEZSxOKTptfSxOLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLE4pOmJ9LE4uZGVmPQphdWx0U3RhdGU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsTik6d30sTi5ub0RhdGE9M0RmdW49 CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxOKTpFfSxOLnRyYW5zaXRp b25EdXJhdGlvbj0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0Rl LE4pOnh9LE59LGUubW9kZWxzLmxpbmVQbHVzQmFyQ2hhcnQ9M0RmPQp1bmN0aW9uKCl7ZnVuY3Rp b24gVChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBsPTNEZDMuc2VsZWN0KHRoaXMp LGM9Cj0zRHRoaXMsdj0zRChhfHxwYXJzZUludChsLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11Lmxl ZnQtdS5yaWdodCxOPTNEKGZ8fHBhcj0Kc2VJbnQobC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUu dG9wLXUuYm90dG9tO1QudXBkYXRlPTNEZnVuY3Rpb24oKXtsLmNhbGwoPQpUKX0sYi5kaXNhYmxl ZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgQzt3 PTNEe309Cjtmb3IoQyBpbiBiKWJbQ11pbnN0YW5jZW9mIEFycmF5P3dbQ109M0RiW0NdLnNsaWNl KDApOndbQ109M0RiW0NdfWlmKCFlfHwhZT0KLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBrPTNEbC5zPQplbGVjdEFsbCgi Lm52LW5vRGF0YSIpLmRhdGEoW0VdKTtyZXR1cm4gay5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0 dHIoImNsYXM9CnMiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgi dGV4dC1hbmNob3IiLCJtaWRkbGUiKSxrLmF0dD0KcigieCIsdS5sZWZ0K3YvMikuYXR0cigieSIs dS50b3ArTi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksVH1sLnNlbGVjPQp0QWxsKCIu bnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIEw9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmxlZCY9CiZlLmJhcn0pLEE9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5i YXJ9KTttPTNEQS5maWx0ZXIoZnVuY3Rpb24oZSl7cj0KZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0 aCYmQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KVswXS52YWx1PQplcy5s ZW5ndGg/dC54U2NhbGUoKTpuLnhTY2FsZSgpLGc9M0RuLnlTY2FsZSgpLHk9M0R0LnlTY2FsZSgp O3ZhciBPPTNEZDMuc2U9CmxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZVBs dXNCYXIiKS5kYXRhKFtlXSksTT0zRE8uZW50ZXIoKS5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnZkMyBudi13cmFwIG52LWxpbmVQbHVzQmFyIikuYXBwZW5kKCJnIiksXz0zRE8uc2VsPQpl Y3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBl bmQoImciKS5hdHRyKCJjbGE9CnNzIiwibnYteTEgbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi15MiBudi1heGlzIiksTS5hcHBlbmQoIj0KZyIpLmF0dHIoImNsYXNzIiwi bnYtYmFyc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIiks PQpNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLHAmJihvLndpZHRo KHYvMiksXy5zZWxlY3QoIi5udi09CmxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihl KXtyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2luYWxLZXk9Cj0zRD0zRD0zRHVuZGVmaW5l ZD9lLmtleTplLm9yaWdpbmFsS2V5LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS5iYXI/IiAobGVm dD0KIGF4aXMpIjoiIChyaWdodCBheGlzKSIpLGV9KSkuY2FsbChvKSx1LnRvcCE9M0RvLmhlaWdo dCgpJiYodS50b3A9M0RvLmhlaWdoPQp0KCksTj0zRChmfHxwYXJzZUludChsLnN0eWxlKCJoZWln aHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLF8uc2VsZWN0KCIubnY9Ci1sZWdlbmRXcmFwIiku YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdi8yKyIsIisgLXUudG9wKyIpIikpLE8uYXR0 cigidD0KcmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksdC53aWR0 aCh2KS5oZWlnaHQoTikuY29sb3IoZS5tPQphcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9y fHxoKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS49CmRpc2FibGVkJiYh ZVtuXS5iYXJ9KSksbi53aWR0aCh2KS5oZWlnaHQoTikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cj0KbiBlLmNvbG9yfHxoKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4h ZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSk7PQp2YXIgRD0zRF8uc2VsZWN0KCIubnYtYmFyc1dy YXAiKS5kYXR1bShMLmxlbmd0aD9MOlt7dmFsdWVzOltdfV0pLFA9M0RfLnNlbGU9CmN0KCIubnYt bGluZXNXcmFwIikuZGF0dW0oQVswXSYmIUFbMF0uZGlzYWJsZWQ/QTpbe3ZhbHVlczpbXX1dKTtk My50cmFuc2l0aT0Kb24oRCkuY2FsbChuKSxkMy50cmFuc2l0aW9uKFApLmNhbGwodCksci5zY2Fs ZShtKS50aWNrcyh2LzEwMCkudGlja1NpemUoLU4sPQowKSxfLnNlbGVjdCgiLm52LXgubnYtYXhp cyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrZy5yYW5nZSgpWzBdKyI9CikiKSxk My50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteC5udi1heGlzIikpLmNhbGwociksaS5zY2FsZShn KS50aWNrcyhOLzM2KT0KLnRpY2tTaXplKC12LDApLGQzLnRyYW5zaXRpb24oXy5zZWxlY3QoIi5u di15MS5udi1heGlzIikpLnN0eWxlKCJvcGFjaXR5IixMPQoubGVuZ3RoPzE6MCkuY2FsbChpKSxz LnNjYWxlKHkpLnRpY2tzKE4vMzYpLnRpY2tTaXplKEwubGVuZ3RoPzA6LXYsMCksXy5zZWw9CmVj dCgiLm52LXkyLm52LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsQS5sZW5ndGg/MTowKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFucz0KbGF0ZSgiK3YrIiwwKSIpLGQzLnRyYW5zaXRpb24oXy5zZWxlY3Qo Ii5udi15Mi5udi1heGlzIikpLmNhbGwocyksby5kaXNwYXRjPQpoLm9uKCJzdGF0ZUNoYW5nZSIs ZnVuY3Rpb24oZSl7Yj0zRGUsUy5zdGF0ZUNoYW5nZShiKSxULnVwZGF0ZSgpfSksUy5vbigidG89 Cm9sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZCYmeChlLGMucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFu Z2VTdGF0ZSIsZnVuY3Rpb24odD0KKXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYm KGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9M0R0PQouZGlzYWJsZWRbbl19KSxi LmRpc2FibGVkPTNEdC5kaXNhYmxlZCksVC51cGRhdGUoKX0pfSksVH12YXIgdD0zRGUubW9kZWxz Lmw9CmluZSgpLG49M0RlLm1vZGVscy5oaXN0b3JpY2FsQmFyKCkscj0zRGUubW9kZWxzLmF4aXMo KSxpPTNEZS5tb2RlbHMuYXhpcygpLD0Kcz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5tb2RlbHMu bGVnZW5kKCksdT0zRHt0b3A6MzAscmlnaHQ6NjAsYm90dG9tOjUwLGxlPQpmdDo2MH0sYT0zRG51 bGwsZj0zRG51bGwsbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGM9M0RmdW5jdGlvbihlKXty ZXR1cm49CiBlLnl9LGg9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHA9M0QhMCxkPTNEITAsdj0z RGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dT0Kcm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBh dCAiK3QrIjwvcD4ifSxtLGcseSxiPTNEe30sdz0zRG51bGwsRT0zRCJObyBEPQphdGEgQXZhaWxh YmxlLiIsUz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVD aGFuZ2UiLCI9CmNoYW5nZVN0YXRlIik7bi5wYWREYXRhKCEwKSx0LmNsaXBFZGdlKCExKS5wYWRE YXRhKCEwKSxyLm9yaWVudCgiYm90dG9tIikudD0KaWNrUGFkZGluZyg3KS5oaWdobGlnaHRaZXJv KCExKSxpLm9yaWVudCgibGVmdCIpLHMub3JpZW50KCJyaWdodCIpO3ZhciB4PTNEPQpmdW5jdGlv bihuLG8pe3ZhciB1PTNEbi5wb3NbMF0rKG8ub2Zmc2V0TGVmdHx8MCksYT0zRG4ucG9zWzFdKyhv Lm9mZnNldFRvcHw9CnwwKSxmPTNEci50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW50 SW5kZXgpKSxsPTNEKG4uc2VyaWVzLmJhcj9pOnMpLj0KdGlja0Zvcm1hdCgpKHQueSgpKG4ucG9p bnQsbi5wb2ludEluZGV4KSksYz0zRHYobi5zZXJpZXMua2V5LGYsbCxuLFQpO2UudG9vPQpsdGlw LnNob3coW3UsYV0sYyxuLnZhbHVlPDA/Im4iOiJzIixudWxsLG8pfTtyZXR1cm4gdC5kaXNwYXRj aC5vbigiZWxlbWVudE09Cm91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2Uu cG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50bz0Kb2x0aXBTaG93KGUpfSksdC5kaXNw YXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpPQpw SGlkZShlKX0pLG4uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rp b24oZSl7ZS5wb3M9M0RbZS49CnBvc1swXSt1LmxlZnQsZS5wb3NbMV0rdS50b3BdLFMudG9vbHRp cFNob3coZSl9KSxuLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91cz0KZW91dC50b29sdGlwIixmdW5j dGlvbihlKXtTLnRvb2x0aXBIaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7 PQpkJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksVC5kaXNwYXRjaD0zRFMsVC5sZWdlbmQ9M0RvLFQu bGluZXM9M0R0LFQuYmFycz0zRG49CixULnhBeGlzPTNEcixULnkxQXhpcz0zRGksVC55MkF4aXM9 M0RzLGQzLnJlYmluZChULHQsImRlZmluZWQiLCJzaXplIiwiY2xpcD0KVm9yb25vaSIsImludGVy cG9sYXRlIiksVC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKFQpLFQueD0zRGZ1 bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHQueChlKSxuLngoZSks VCk6bH0sVC55PTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUs dC55KGUpLG4ueShlKSxUKTpjfSxULm1hcmdpbj0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHUudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnUu dG9wLHUuPQpyaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dS5y aWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmI9Cm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9t OnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZD0KIj9lLmxlZnQ6 dS5sZWZ0LFQpOnV9LFQud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYT0zRGUsPQpUKTphfSxULmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhmPTNEZSxUKTpmfSxULmNvbG9yPQo9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0zRGUudXRpbHMuZ2V0Q29sb3IodCksby5jb2xvcihoKSw9ClQpOmh9LFQu c2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxU KTpwfSxULnRvbz0KbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o ZD0zRGUsVCk6ZH0sVC50b29sdGlwQ29udGVudD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHY9M0RlLFQpOnZ9LFQuc3RhdGU9M0RmdW5jdGlvbihlKXtyPQpldHVybiBh cmd1bWVudHMubGVuZ3RoPyhiPTNEZSxUKTpifSxULmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KHc9M0RlLFQpOnd9LFQubm9EYXRhPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0KRT0zRGUsVCk6RX0sVH0sZS5tb2RlbHMu bGluZVdpdGhGb2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBrKGUpe3JldHVyPQpuIGUu ZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBSKGUpe3ZhciB0PTNEKyhlPTNEPTNEImUiKSxuPTNE dD8xOi0xLHI9M0RPLzM9CjtyZXR1cm4iTSIrLjUqbisiLCIrcisiQTYsNiAwIDAgIit0KyIgIis2 LjUqbisiLCIrKHIrNikrIlYiKygyKnItNikrIkE2LDYgMD0KIDAgIit0KyIgIisuNSpuKyIsIisy KnIrIloiKyJNIisyLjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCkrIk0iKzQuNSpuKyIsIisoPQpy KzgpKyJWIisoMipyLTgpfWZ1bmN0aW9uIFUoKXthLmVtcHR5KCl8fGEuZXh0ZW50KHcpLEYuZGF0 YShbYS5lbXB0eSgpP2cuZG89Cm1haW4oKTp3XSkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNE ZyhlWzBdKS12LnJhbmdlKClbMF0scj0zRHYucmFuZ2UoKVsxXT0KLWcoZVsxXSk7ZDMuc2VsZWN0 KHRoaXMpLnNlbGVjdCgiLmxlZnQiKS5hdHRyKCJ3aWR0aCIsbjwwPzA6biksZDMuc2VsZWN0KHRo PQppcykuc2VsZWN0KCIucmlnaHQiKS5hdHRyKCJ4IixnKGVbMV0pKS5hdHRyKCJ3aWR0aCIscjww PzA6cil9KX1mdW5jdGlvbiB6KCk9Cnt3PTNEYS5lbXB0eSgpP251bGw6YS5leHRlbnQoKTt2YXIg bj0zRGEuZW1wdHkoKT9nLmRvbWFpbigpOmEuZXh0ZW50KCk7aWYoTT0KYXRoLmFicyhuWzBdLW5b MV0pPD0zRDEpcmV0dXJuO1QuYnJ1c2goe2V4dGVudDpuLGJydXNoOmF9KSxVKCk7dmFyIHM9M0RQ LnNlPQpsZWN0KCIubnYtZm9jdXMgLm52LWxpbmVzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0 aW9uKGUpe3JldHVybiFlLmRpc2FibGU9CmR9KS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm57a2V5 OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSxyKT0Ke3JldHVybiB0Lngo KShlLHIpPj0zRG5bMF0mJnQueCgpKGUscik8PTNEblsxXX0pfX0pKTtzLmNhbGwodCksUC5zZWxl Y3QoIi5uPQp2LWZvY3VzIC5udi14Lm52LWF4aXMiKS5jYWxsKHIpLFAuc2VsZWN0KCIubnYtZm9j dXMgLm52LXkubnYtYXhpcyIpLmNhbGwoaSk9Cn12YXIgUz0zRGQzLnNlbGVjdCh0aGlzKSxOPTNE dGhpcyxMPTNEKGh8fHBhcnNlSW50KFMuc3R5bGUoIndpZHRoIikpfHw5NjApLT0KZi5sZWZ0LWYu cmlnaHQsQT0zRChwfHxwYXJzZUludChTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktZi50b3AtZi5i b3R0b20tZCxPPQo9M0RkLWwudG9wLWwuYm90dG9tO2sudXBkYXRlPTNEZnVuY3Rpb24oKXtTLmNh bGwoayl9LGsuY29udGFpbmVyPTNEdGhpcztpZig9CiFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgTT0KPTNEUy5z ZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFt4XSk7cmV0dXJuIE0uZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyPQooImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2Vt Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIik9CixNLmF0dHIoIngiLGYubGVmdCtMLzIp LmF0dHIoInkiLGYudG9wK0EvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLGt9Uz0KLnNl bGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLHY9M0R0LnhTY2FsZSgpLG09M0R0LnlTY2Fs ZSgpLGc9M0RuLnhTY2FsPQplKCkseT0zRG4ueVNjYWxlKCk7dmFyIF89M0RTLnNlbGVjdEFsbCgi Zy5udi13cmFwLm52LWxpbmVXaXRoRm9jdXNDaGFydCIpLmQ9CmF0YShbZV0pLEQ9M0RfLmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVdpdGhGbz0K Y3VzQ2hhcnQiKS5hcHBlbmQoImciKSxQPTNEXy5zZWxlY3QoImciKTtELmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtbGVnPQplbmRXcmFwIik7dmFyIEg9M0RELmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtZm9jdXMiKTtILmFwcGVuZCgiZyIpLmF0dHI9CigiY2xhc3MiLCJudi14IG52 LWF4aXMiKSxILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksSC5hcHBl bj0KZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIik7dmFyIEI9M0RELmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtPQpjb250ZXh0Iik7Qi5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXggbnYtYXhpcyIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LXkgbnYt YXhpcyIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxCLmFwcGVu ZCgiZz0KIikuYXR0cigiY2xhc3MiLCJudi1icnVzaEJhY2tncm91bmQiKSxCLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYteCBudi1iPQpydXNoIiksYiYmKHUud2lkdGgoTCksUC5zZWxlY3Qo Ii5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbCh1KSxmLnRvcCE9M0Q9CnUuaGVpZ2h0KCkm JihmLnRvcD0zRHUuaGVpZ2h0KCksQT0zRChwfHxwYXJzZUludChTLnN0eWxlKCJoZWlnaHQiKSl8 fDQwMCktZj0KLnRvcC1mLmJvdHRvbS1kKSxQLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiPQorIC1mLnRvcCsiKSIpKSxfLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK2YubGVmdCsiLCIrZi50b3ArIikiKSx0LndpZHQ9CmgoTCkuaGVp Z2h0KEEpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0p LmZpbHRlcihmdT0KbmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksbi5kZWZpbmVk KHQuZGVmaW5lZCgpKS53aWR0aChMKS5oZWlnaHQoPQpPKS5jb2xvcihlLm1hcChmdW5jdGlvbihl LHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXs9CnJldHVy biFlW25dLmRpc2FibGVkfSkpLFAuc2VsZWN0KCIubnYtY29udGV4dCIpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZT0KKDAsIisoQStmLmJvdHRvbStsLnRvcCkrIikiKTt2YXIgaj0zRFAuc2Vs ZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIikuPQpkYXR1bShlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtkMy50cmFuc2l0aW9uKGopLmNhbGwobiksci49CnNj YWxlKHYpLnRpY2tzKEwvMTAwKS50aWNrU2l6ZSgtQSwwKSxpLnNjYWxlKG0pLnRpY2tzKEEvMzYp LnRpY2tTaXplKC1MLDApLD0KUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heGlzIikuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitBKyIpIiksPQphLngoZykub24oImJydXNoIixm dW5jdGlvbigpe3ZhciBlPTNEay50cmFuc2l0aW9uRHVyYXRpb24oKTtrLnRyYW5zaXRpb25EdXI9 CmF0aW9uKDApLHooKSxrLnRyYW5zaXRpb25EdXJhdGlvbihlKX0pLHcmJmEuZXh0ZW50KHcpO3Zh ciBGPTNEUC5zZWxlY3QoIi5udj0KLWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZyIpLmRh dGEoW3d8fGEuZXh0ZW50KCldKSxJPTNERi5lbnRlcigpLmFwcGVuPQpkKCJnIik7SS5hcHBlbmQo InJlY3QiKS5hdHRyKCJjbGFzcyIsImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRy KCI9CmhlaWdodCIsTyksSS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInJpZ2h0IikuYXR0 cigieCIsMCkuYXR0cigieSIsMCkuYT0KdHRyKCJoZWlnaHQiLE8pO3ZhciBxPTNEUC5zZWxlY3Qo Ii5udi14Lm52LWJydXNoIikuY2FsbChhKTtxLnNlbGVjdEFsbCgicmVjPQp0IikuYXR0cigiaGVp Z2h0IixPKSxxLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFIp LHooKSw9CnMuc2NhbGUoZykudGlja3MoTC8xMDApLnRpY2tTaXplKC1PLDApLFAuc2VsZWN0KCIu bnYtY29udGV4dCAubnYteC5udi1heGlzIj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo MCwiK3kucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oUC5zZWxlY3QoPQoiLm52LWNvbnRl eHQgLm52LXgubnYtYXhpcyIpKS5jYWxsKHMpLG8uc2NhbGUoeSkudGlja3MoTy8zNikudGlja1Np emUoLUwsMCk9CixkMy50cmFuc2l0aW9uKFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYteS5udi1h eGlzIikpLmNhbGwobyksUC5zZWxlY3QoIi5udj0KLWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksPQp1LmRpc3Bh dGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7ay51cGRhdGUoKX0pLFQub24oInRvb2x0 aXBTaG93IixmdW49CmN0aW9uKGUpe0UmJkMoZSxOLnBhcmVudE5vZGUpfSl9KSxrfXZhciB0PTNE ZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5saT0KbmUoKSxyPTNEZS5tb2RlbHMuYXhpcygp LGk9M0RlLm1vZGVscy5heGlzKCkscz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5tb2RlPQpscy5h eGlzKCksdT0zRGUubW9kZWxzLmxlZ2VuZCgpLGE9M0RkMy5zdmcuYnJ1c2goKSxmPTNEe3RvcDoz MCxyaWdodDozMCxib3Q9CnRvbTozMCxsZWZ0OjYwfSxsPTNEe3RvcDowLHJpZ2h0OjMwLGJvdHRv bToyMCxsZWZ0OjYwfSxjPTNEZS51dGlscy5kZWZhdWx0Qz0Kb2xvcigpLGg9M0RudWxsLHA9M0Ru dWxsLGQ9M0QxMDAsdixtLGcseSxiPTNEITAsdz0zRG51bGwsRT0zRCEwLFM9M0RmdW5jdGlvPQpu KGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+ In0seD0zRCJObyBEYXRhIEE9CnZhaWxhYmxlLiIsVD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hv dyIsInRvb2x0aXBIaWRlIiwiYnJ1c2giKSxOPTNEMDt0LmNsaT0KcEVkZ2UoITApLG4uaW50ZXJh Y3RpdmUoITEpLHIub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxpLm9yaWVudCgibGVm PQp0Iikscy5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLG8ub3JpZW50KCJsZWZ0Iik7 dmFyIEM9M0RmdW5jdGlvbihuLHM9Cil7dmFyIG89M0RuLnBvc1swXSsocy5vZmZzZXRMZWZ0fHww KSx1PTNEbi5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEci50aT0KY2tGb3JtYXQoKSh0Lngo KShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGY9M0RpLnRpY2tGb3JtYXQoKSh0LnkoKShuLnBvaW50 LG4uPQpwb2ludEluZGV4KSksbD0zRFMobi5zZXJpZXMua2V5LGEsZixuLGspO2UudG9vbHRpcC5z aG93KFtvLHVdLGwsbnVsbCxudWxsLHM9Cil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucD0Kb3NbMF0rZi5sZWZ0 LGUucG9zWzFdK2YudG9wXSxULnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlPQpvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLFQub24o InRvb2x0aXBIaWRlIixmdW5jdGlvbigpe0U9CiYmZS50b29sdGlwLmNsZWFudXAoKX0pLGsuZGlz cGF0Y2g9M0RULGsubGVnZW5kPTNEdSxrLmxpbmVzPTNEdCxrLmxpbmVzMj0zRD0KbixrLnhBeGlz PTNEcixrLnlBeGlzPTNEaSxrLngyQXhpcz0zRHMsay55MkF4aXM9M0RvLGQzLnJlYmluZChrLHQs ImRlZmluZWQiPQosImlzQXJlYSIsInNpemUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIs InlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImk9Cm50ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNs aXBWb3Jvbm9pIiwiaWQiKSxrLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLj0KYmluZChr KSxrLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC54KGUpLG4ueChl KSxrKTp0Lnh9LGsuPQp5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQu eShlKSxuLnkoZSksayk6dC55fSxrLm1hcmdpbj0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGYudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudD0Kb3A6 Zi50b3AsZi5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6Zi5y aWdodCxmLmJvdHRvbT0KPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9t OmYuYm90dG9tLGYubGVmdD0zRHR5cGVvZiBlLmxlZnQhPQo9M0QidW5kZWZpbmVkIj9lLmxlZnQ6 Zi5sZWZ0LGspOmZ9LGsubWFyZ2luMj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5s ZW5ndGg/KGw9M0RlLGspOmx9LGsud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaD0zRGUsaz0KKTpofSxrLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhwPTNEZSxrKTpwfSxrLmhlaWdodDI9Cj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxrKTpkfSxrLmNvbG9yPTNEZnVuY3Rpb24odCl7cj0K ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksdS5jb2xvcihj KSxrKTpjfSxrLnNob3dMZWdlPQpuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhiPTNEZSxrKTpifSxrLnRvb2x0aXBzPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oRT0zRGUsayk6RX0say50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3Jl dD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLGspOlN9LGsuaW50ZXJwb2xhdGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh0LmludGVycG9sYXRlKGUpLG4uaW50 ZXJwb2xhdGUoZSksayk6dC5pbnRlcnBvbGF0ZSgpfSxrLm5vRGF0YT0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLGspOnh9LGsueFRpY2tGb3JtYXQ9M0RmdW5j dGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLnRpY2tGb3JtYXQoZSkscy50aWNr Rm9ybWF0KGUpLGspOnIudGlja0Zvcm09CmF0KCl9LGsueVRpY2tGb3JtYXQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50aWNrRm9ybWF0KGUpLD0Kby50aWNrRm9ybWF0 KGUpLGspOmkudGlja0Zvcm1hdCgpfSxrLmJydXNoRXh0ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtPQplbnRzLmxlbmd0aD8odz0zRGUsayk6d30say50cmFuc2l0aW9uRHVyYXRpb249M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyhOPTNEZSxrKTpOfSxrfSxlLm1v ZGVscy5saW5lUGx1c0JhcldpdGhGb2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtmdT0KbmN0aW9uIEIo ZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiB0dChlKXt2YXIgdD0zRCsoZT0z RD0zRCJlIiksPQpuPTNEdD8xOi0xLHI9M0RJLzM7cmV0dXJuIk0iKy41Km4rIiwiK3IrIkE2LDYg MCAwICIrdCsiICIrNi41Km4rIiwiKyhyKzYpKyI9ClYiKygyKnItNikrIkE2LDYgMCAwICIrdCsi ICIrLjUqbisiLCIrMipyKyJaIisiTSIrMi41Km4rIiwiKyhyKzgpKyJWIisoMipyLT0KOCkrIk0i KzQuNSpuKyIsIisocis4KSsiViIrKDIqci04KX1mdW5jdGlvbiBudCgpe2guZW1wdHkoKXx8aC5l eHRlbnQoeCksWS5kPQphdGEoW2guZW1wdHkoKT9rLmRvbWFpbigpOnhdKS5lYWNoKGZ1bmN0aW9u KGUsdCl7dmFyIG49M0RrKGVbMF0pLWsucmFuZ2UoKVs9CjBdLHI9M0RrLnJhbmdlKClbMV0tayhl WzFdKTtkMy5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVmdCIpLmF0dHIoIndpZHRoIixuPD0KMD8w Om4pLGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5yaWdodCIpLmF0dHIoIngiLGsoZVsxXSkpLmF0 dHIoIndpZHRoIixyPDA/PQowOnIpfSl9ZnVuY3Rpb24gcnQoKXt4PTNEaC5lbXB0eSgpP251bGw6 aC5leHRlbnQoKSxTPTNEaC5lbXB0eSgpP2suZG9tYWluKCk9CjpoLmV4dGVudCgpLEQuYnJ1c2go e2V4dGVudDpTLGJydXNoOmh9KSxudCgpLHIud2lkdGgoaikuaGVpZ2h0KEYpLmNvbG9yKGUubT0K YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9u KHQsbil7cmV0dXJuIWVbbl0uPQpkaXNhYmxlZCYmZVtuXS5iYXJ9KSksdC53aWR0aChqKS5oZWln aHQoRikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm49CiBlLmNvbG9yfHx3KGUsdCl9 KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkp Oz0KdmFyIG49M0QkLnNlbGVjdCgiLm52LWZvY3VzIC5udi1iYXJzV3JhcCIpLmRhdHVtKFIubGVu Z3RoP1IubWFwKGZ1bmN0aW9uKGUsPQp0KXtyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVl cy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci54KCkoZSx0KT49Cj0zRFNbMF0mJnIueCgp KGUsdCk8PTNEU1sxXX0pfX0pOlt7dmFsdWVzOltdfV0pLGk9M0QkLnNlbGVjdCgiLm52LWZvY3Vz IC5udj0KLWxpbmVzV3JhcCIpLmRhdHVtKFVbMF0uZGlzYWJsZWQ/W3t2YWx1ZXM6W119XTpVLm1h cChmdW5jdGlvbihlLG4pe3JldHVybntrPQpleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVy KGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQueCgpKGUsbik+PTNEU1swXSYmdC49CngoKShlLG4pPD0z RFNbMV19KX19KSk7Ui5sZW5ndGg/Qz0zRHIueFNjYWxlKCk6Qz0zRHQueFNjYWxlKCkscy5zY2Fs ZShDKS50aT0KY2tzKGovMTAwKS50aWNrU2l6ZSgtRiwwKSxzLmRvbWFpbihbTWF0aC5jZWlsKFNb MF0pLE1hdGguZmxvb3IoU1sxXSldKSwkLnNlPQpsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChz KSxuLmNhbGwociksaS5jYWxsKHQpLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXg9Ci5udi1heGlz IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitMLnJhbmdlKClbMF0rIikiKSx1LnNj YWxlKEwpLnRpYz0Ka3MoRi8zNikudGlja1NpemUoLWosMCksJC5zZWxlY3QoIi5udi1mb2N1cyAu bnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5PQoiLFIubGVuZ3RoPzE6MCksYS5zY2FsZShB KS50aWNrcyhGLzM2KS50aWNrU2l6ZShSLmxlbmd0aD8wOi1qLDApLCQuc2VsZWN0KCI9Ci5udi1m b2N1cyAubnYteTIubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLmF0dHIo InRyYW5zZm9ybSIsIj0KdHJhbnNsYXRlKCIrQy5yYW5nZSgpWzFdKyIsMCkiKSwkLnNlbGVjdCgi Lm52LWZvY3VzIC5udi15MS5udi1heGlzIikuY2FsbCh1PQopLCQuc2VsZWN0KCIubnYtZm9jdXMg Lm52LXkyLm52LWF4aXMiKS5jYWxsKGEpfXZhciBOPTNEZDMuc2VsZWN0KHRoaXMpLFA9M0Q9CnRo aXMsaj0zRCh2fHxwYXJzZUludChOLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1wLmxlZnQtcC5yaWdo dCxGPTNEKG18fHBhcnNlST0KbnQoTi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wLXAuYm90 dG9tLWcsST0zRGctZC50b3AtZC5ib3R0b207Qi51cGRhdGU9Cj0zRGZ1bmN0aW9uKCl7Ti5jYWxs KEIpfSxCLmNvbnRhaW5lcj0zRHRoaXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bj0K Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIHE9M0ROLnNlbGVj dEFsbCgiLm52LW5vRGF0YSIpPQouZGF0YShbX10pO3JldHVybiBxLmVudGVyKCkuYXBwZW5kKCJ0 ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmE9CnR0cigiZHkiLCItLjdlbSIp LnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHEuYXR0cigieCIscC5sZWZ0K2ovMikuYXR0 cj0KKCJ5IixwLnRvcCtGLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxCfU4uc2VsZWN0 QWxsKCIubnYtbm9EYXRhIikucmVtPQpvdmUoKTt2YXIgUj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLFU9M0RlLmZpbHRlcig9CmZ1bmN0aW9uKGUpe3Jl dHVybiFlLmJhcn0pO0M9M0RyLnhTY2FsZSgpLGs9M0RvLnNjYWxlKCksTD0zRHIueVNjYWxlKCks QT0zRD0KdC55U2NhbGUoKSxPPTNEaS55U2NhbGUoKSxNPTNEbi55U2NhbGUoKTt2YXIgej0zRGUu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVyPQpuIWUuZGlzYWJsZWQmJmUuYmFyfSkubWFwKGZ1bmN0 aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXQ9CnVybnt4OnkoZSx0 KSx5OmIoZSx0KX19KX0pLFc9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxl ZCYmIWUuYj0KYXJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlv bihlLHQpe3JldHVybnt4OnkoZSx0KSx5OmIoPQplLHQpfX0pfSk7Qy5yYW5nZShbMCxqXSksay5k b21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKHouY29uY2F0KFcpKSxmdW5jdGlvbig9CmUpe3JldHVy biBlLnh9KSkucmFuZ2UoWzAsal0pO3ZhciBYPTNETi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1s aW5lUGx1c0Jhcj0KIikuZGF0YShbZV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVBsPQp1c0JhciIpLmFwcGVuZCgiZyIpLCQ9M0RY LnNlbGVjdCgiZyIpO1YuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmQ9CldyYXAi KTt2YXIgSj0zRFYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1mb2N1cyIpO0ouYXBwZW5k KCJnIikuYXR0cigiYz0KbGFzcyIsIm52LXggbnYtYXhpcyIpLEouYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi15MSBudi1heGlzIiksSi5hcHBlbmQoPQoiZyIpLmF0dHIoImNsYXNzIiwibnYt eTIgbnYtYXhpcyIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCI9Ciks Si5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpO3ZhciBLPTNEVi5hcHBl bmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtY29udGV4dCIpO0suYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi14IG52LWF4aXMiKSxLLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudi15 MSBudi1heGlzIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKSw9 CksuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLEsuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1saT0KbmVzV3JhcCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1icnVzaEJhY2tncm91bmQiKSxLLmFwcGVuZCgiZyIpLmF0PQp0cigiY2xhc3MiLCJudi14 IG52LWJydXNoIiksRSYmKGMud2lkdGgoai8yKSwkLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5k YXQ9CnVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWdpbmFsS2V5PTNEZS5vcmlnaW5h bEtleT0zRD0zRD0zRHVuZGVmaW5lZD0KP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9M0RlLm9y aWdpbmFsS2V5KyhlLmJhcj8iIChsZWZ0IGF4aXMpIjoiIChyaWdodCBhPQp4aXMpIiksZX0pKS5j YWxsKGMpLHAudG9wIT0zRGMuaGVpZ2h0KCkmJihwLnRvcD0zRGMuaGVpZ2h0KCksRj0zRChtfHxw YXJzZUk9Cm50KE4uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1wLnRvcC1wLmJvdHRvbS1nKSwkLnNl bGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdD0KdHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ov MisiLCIrIC1wLnRvcCsiKSIpKSxYLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zPQpsYXRlKCIrcC5s ZWZ0KyIsIitwLnRvcCsiKSIpLGkud2lkdGgoaikuaGVpZ2h0KEkpLmNvbG9yKGUubWFwKGZ1bmN0 aW9uKGUsdCk9CntyZXR1cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7 cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0uYj0KYXJ9KSksbi53aWR0aChqKS5oZWlnaHQoSSku Y29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQpPQp9KS5maWx0 ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpO3ZhciBR PTNEJC5zZWxlY3Q9CigiLm52LWNvbnRleHQgLm52LWJhcnNXcmFwIikuZGF0dW0oUi5sZW5ndGg/ Ujpbe3ZhbHVlczpbXX1dKSxHPTNEJC5zZWxlY3QoIj0KLm52LWNvbnRleHQgLm52LWxpbmVzV3Jh cCIpLmRhdHVtKFVbMF0uZGlzYWJsZWQ/W3t2YWx1ZXM6W119XTpVKTskLnNlbGVjdCgiPQoubnYt Y29udGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKEYrcC5ib3R0b20rZC50 b3ApKyIpIiksUS5jYWw9CmwoaSksRy5jYWxsKG4pLGgueChrKS5vbigiYnJ1c2giLHJ0KSx4JiZo LmV4dGVudCh4KTt2YXIgWT0zRCQuc2VsZWN0KCIubnYtYj0KcnVzaEJhY2tncm91bmQiKS5zZWxl Y3RBbGwoImciKS5kYXRhKFt4fHxoLmV4dGVudCgpXSksWj0zRFkuZW50ZXIoKS5hcHBlbmQoPQoi ZyIpO1ouYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJsZWZ0IikuYXR0cigieCIsMCkuYXR0 cigieSIsMCkuYXR0cigiaGU9CmlnaHQiLEkpLFouYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3Mi LCJyaWdodCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dD0KcigiaGVpZ2h0IixJKTt2YXIg ZXQ9M0QkLnNlbGVjdCgiLm52LXgubnYtYnJ1c2giKS5jYWxsKGgpO2V0LnNlbGVjdEFsbCgicmVj PQp0IikuYXR0cigiaGVpZ2h0IixJKSxldC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hcHBlbmQoInBh dGgiKS5hdHRyKCJkIix0dCksby49CnRpY2tzKGovMTAwKS50aWNrU2l6ZSgtSSwwKSwkLnNlbGVj dCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYT0KbnNmb3JtIiwidHJhbnNs YXRlKDAsIitPLnJhbmdlKClbMF0rIikiKSwkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgubnYt YXhpPQpzIikuY2FsbChvKSxmLnNjYWxlKE8pLnRpY2tzKEkvMzYpLnRpY2tTaXplKC1qLDApLCQu c2VsZWN0KCIubnYtY29udGV4dCAubnY9Ci15MS5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFIu bGVuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIj0KK2sucmFuZ2UoKVsw XSsiKSIpLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteTEubnYtYXhpcyIpLmNhbGwoZiksbC5z Y2FsZShNPQopLnRpY2tzKEkvMzYpLnRpY2tTaXplKFIubGVuZ3RoPzA6LWosMCksJC5zZWxlY3Qo Ii5udi1jb250ZXh0IC5udi15Mi5udi1heGk9CnMiKS5zdHlsZSgib3BhY2l0eSIsVS5sZW5ndGg/ MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitrLnJhbmdlKClbMT0KXSsiLDApIiks JC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Mi5udi1heGlzIikuY2FsbChsKSxjLmRpc3BhdGNo Lm9uKCJzdGF0PQplQ2hhbmdlIixmdW5jdGlvbihlKXtCLnVwZGF0ZSgpfSksRC5vbigidG9vbHRp cFNob3ciLGZ1bmN0aW9uKGUpe1QmJkgoZSxQLnA9CmFyZW50Tm9kZSl9KSxydCgpfSksQn12YXIg dD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMubGluZSgpLHI9M0RlLm1vZD0KZWxzLmhp c3RvcmljYWxCYXIoKSxpPTNEZS5tb2RlbHMuaGlzdG9yaWNhbEJhcigpLHM9M0RlLm1vZGVscy5h eGlzKCksbz0zRGUuPQptb2RlbHMuYXhpcygpLHU9M0RlLm1vZGVscy5heGlzKCksYT0zRGUubW9k ZWxzLmF4aXMoKSxmPTNEZS5tb2RlbHMuYXhpcygpLGw9Cj0zRGUubW9kZWxzLmF4aXMoKSxjPTNE ZS5tb2RlbHMubGVnZW5kKCksaD0zRGQzLnN2Zy5icnVzaCgpLHA9M0R7dG9wOjMwLHJpZz0KaHQ6 MzAsYm90dG9tOjMwLGxlZnQ6NjB9LGQ9M0R7dG9wOjAscmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6 NjB9LHY9M0RudWxsLG09Cj0zRG51bGwsZz0zRDEwMCx5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu eH0sYj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LHc9Cj0zRGUudXRpbHMuZGVmYXVsdENvbG9y KCksRT0zRCEwLFMseD0zRG51bGwsVD0zRCEwLE49M0RmdW5jdGlvbihlLHQsbixyLGkpez0KcmV0 dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sQyxrLEwsQSxPLE0s Xz0zRCJObyBEYXRhIEF2PQphaWxhYmxlLiIsRD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIs InRvb2x0aXBIaWRlIiwiYnJ1c2giKSxQPTNEMDt0LmNsaXA9CkVkZ2UoITApLG4uaW50ZXJhY3Rp dmUoITEpLHMub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSx1Lm9yaWVudCgibGVmdD0K IiksYS5vcmllbnQoInJpZ2h0Iiksby5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLGYu b3JpZW50KCJsZWZ0IiksbC5vPQpyaWVudCgicmlnaHQiKTt2YXIgSD0zRGZ1bmN0aW9uKG4scil7 UyYmKG4ucG9pbnRJbmRleCs9M0RNYXRoLmNlaWwoU1swXSkpO3Y9CmFyIGk9M0RuLnBvc1swXSso ci5vZmZzZXRMZWZ0fHwwKSxvPTNEbi5wb3NbMV0rKHIub2Zmc2V0VG9wfHwwKSxmPTNEcy50aWNr Rj0Kb3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9M0Qobi5zZXJpZXMuYmFy P3U6YSkudGlja0Zvcm1hdCgpKHQuPQp5KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxjPTNETihu LnNlcmllcy5rZXksZixsLG4sQik7ZS50b29sdGlwLnNob3coW2ksb109CixjLG4udmFsdWU8MD8i biI6InMiLG51bGwscil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRv b2x0aT0KcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcC5sZWZ0LGUucG9zWzFdK3Au dG9wXSxELnRvb2x0aXBTaG93KGUpfSksPQp0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQu dG9vbHRpcCIsZnVuY3Rpb24oZSl7RC50b29sdGlwSGlkZShlKX0pLHIuZGk9CnNwYXRjaC5vbigi ZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStw LmxlZnQsZT0KLnBvc1sxXStwLnRvcF0sRC50b29sdGlwU2hvdyhlKX0pLHIuZGlzcGF0Y2gub24o ImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmPQp1bmN0aW9uKGUpe0QudG9vbHRpcEhpZGUoZSl9 KSxELm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtUJiZlLnRvb2x0aXAuY2w9CmVhbnVwKCl9 KSxCLmRpc3BhdGNoPTNERCxCLmxlZ2VuZD0zRGMsQi5saW5lcz0zRHQsQi5saW5lczI9M0RuLEIu YmFycz0zRHIsQj0KLmJhcnMyPTNEaSxCLnhBeGlzPTNEcyxCLngyQXhpcz0zRG8sQi55MUF4aXM9 M0R1LEIueTJBeGlzPTNEYSxCLnkzQXhpcz0zRGYsPQpCLnk0QXhpcz0zRGwsZDMucmViaW5kKEIs dCwiZGVmaW5lZCIsInNpemUiLCJjbGlwVm9yb25vaSIsImludGVycG9sYXRlIiksQi49Cm9wdGlv bnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQiksQi54PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZT0Kbmd0aD8oeT0zRGUsdC54KGUpLHIueChlKSxCKTp5fSxCLnk9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpiPTNEZSx0LnkoZSksci55KGUpLEIp OmJ9LEIubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9Ci50 b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6cC50b3AscC5yaWdodD0zRHR5 cGVvZiBlLnJpZ2h0IT0zRD0KInVuZGVmaW5lZCI/ZS5yaWdodDpwLnJpZ2h0LHAuYm90dG9tPTNE dHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90PQp0b206cC5ib3R0b20scC5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6cC5sZWZ0LEIpOnB9LEIud2k9 CmR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxCKTp2fSxC LmhlaWdodD0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEIp Om19LEIuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh3PTNE ZS51dGlscy5nZXRDb2xvcih0KSxjLmNvbG9yKHcpLEIpOnd9LEIuc2hvd0xlZ2VuZD0zRGZ1bmN0 aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxCKTpUfSxCLnRv b2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oTj0z RGUsQik6Tn0sQi5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Xz0zRGU9CixCKTpffSxCLmJydXNoRXh0ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHg9M0RlLEIpOnh9LEJ9LD0KZS5tb2RlbHMubXVsdGlCYXI9M0RmdW5jdGlvbigp e2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgPQpnPTNEbi10Lmxl ZnQtdC5yaWdodCxDPTNEci10LnRvcC10LmJvdHRvbSxrPTNEZDMuc2VsZWN0KHRoaXMpO2QmJmUu bGVuZ3RoJiY9CihkPTNEW3t2YWx1ZXM6ZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVy bnt4OmUueCx5OjAsc2VyaWVzOmUuc2VyaWVzLD0Kc2l6ZTouMDF9fSl9XSksYyYmKGU9M0RkMy5s YXlvdXQuc3RhY2soKS5vZmZzZXQoaCkudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVyPQpuIGUudmFs dWVzfSkueShhKSghZS5sZW5ndGgmJmQ/ZDplKSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52 YWx1ZXMuZm9yRWE9CmNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pfSksYyYmZVswXS52YWx1 ZXMubWFwKGZ1bmN0aW9uKHQsbil7dmFyIHI9M0QwLD0KaT0zRDA7ZS5tYXAoZnVuY3Rpb24oZSl7 dmFyIHQ9M0RlLnZhbHVlc1tuXTt0LnNpemU9M0RNYXRoLmFicyh0LnkpLHQueTwwPyh0PQoueTE9 M0RpLGktPTNEdC5zaXplKToodC55MT0zRHQuc2l6ZStyLHIrPTNEdC5zaXplKX0pfSk7dmFyIEw9 M0R5JiZiP1tdOmUubWE9CnAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlv bihlLHQpe3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5MD0KOmUueTAseTE6ZS55MX19KX0pO2ku ZG9tYWluKHl8fGQzLm1lcmdlKEwpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhPQpu Z2VCYW5kcyh3fHxbMCxnXSxTKSxzLmRvbWFpbihifHxkMy5leHRlbnQoZDMubWVyZ2UoTCkubWFw KGZ1bmN0aW9uKGUpe3JldHU9CnJuIGM/ZS55PjA/ZS55MTplLnkxK2UueTplLnl9KS5jb25jYXQo ZikpKS5yYW5nZShFfHxbQywwXSksaS5kb21haW4oKVswXT0zRD0KPTNEPTNEaS5kb21haW4oKVsx XSYmKGkuZG9tYWluKClbMF0/aS5kb21haW4oW2kuZG9tYWluKClbMF0taS5kb21haW4oKVswXSou PQowMSxpLmRvbWFpbigpWzFdK2kuZG9tYWluKClbMV0qLjAxXSk6aS5kb21haW4oWy0xLDFdKSks cy5kb21haW4oKVswXT0zRD0zRD0KPTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5k b21haW4oW3MuZG9tYWluKClbMF0rcy5kb21haW4oKVswXSouMDEsPQpzLmRvbWFpbigpWzFdLXMu ZG9tYWluKClbMV0qLjAxXSk6cy5kb21haW4oWy0xLDFdKSksVD0zRFR8fGksTj0zRE58fHM7dmFy IEE9Cj0zRGsuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGliYXIiKS5kYXRhKFtlXSksTz0z REEuZW50ZXIoKS5hcHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11 bHRpYmFyIiksTT0zRE8uYXBwZW5kKCJkZWZzIiksXz0zRE8uYXBwZW5kPQooImciKSxEPTNEQS5z ZWxlY3QoImciKTtfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksQS5hdHRy KCJ0cmE9Cm5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxNLmFwcGVu ZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIj0KbnYtZWRnZS1jbGlwLSIrbykuYXBwZW5kKCJyZWN0 IiksQS5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitvKyIgcmVjdCIpLmF0dHIoPQoid2lkdGgiLGcp LmF0dHIoImhlaWdodCIsQyksRC5hdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlw LSIrbysiKSI9CjoiIik7dmFyIFA9M0RBLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgi Lm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKT0Ke3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3Jl dHVybiB0fSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhPQpjaXR5Iiwx ZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KSxQLmV4aXQoKS5zZWxlY3RBbGwoInJlY3Qu bnYtYmFyIikuYXQ9CnRyKCJ5IixmdW5jdGlvbihlKXtyZXR1cm4gYz9OKGUueTApOk4oMCl9KS5h dHRyKCJoZWlnaHQiLDApLnJlbW92ZSgpLFAuYXR0cj0KKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXty ZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jPQp0aW9u KGUpe3JldHVybiBlLmhvdmVyfSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAo ZSx0KX0pLnN0eWxlKCI9CnN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSksUC5z dHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaT0KbGwtb3BhY2l0eSIsLjc1KTt2YXIg SD0zRFAuc2VsZWN0QWxsKCJyZWN0Lm52LWJhciIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuPQog ZCYmIWUubGVuZ3RoP2QudmFsdWVzOnQudmFsdWVzfSk7SC5leGl0KCkucmVtb3ZlKCk7dmFyIEI9 M0RILmVudGVyKCkuYXBwZW49CmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LT0KYmFyIHBvc2l0aXZlIn0pLmF0 dHIoIngiLGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gYz8wOnIqaS5yYW5nZUJhbmQoKS9lLmxlbmd0 PQpofSkuYXR0cigieSIsZnVuY3Rpb24oZSl7cmV0dXJuIE4oYz9lLnkwOjApfSkuYXR0cigiaGVp Z2h0IiwwKS5hdHRyKCJ3aWR0aCI9CixpLnJhbmdlQmFuZCgpLyhjPzE6ZS5sZW5ndGgpKS5hdHRy KCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbD0KYXRlKCIraSh1KGUsdCkp KyIsMCkifSk7SC5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsbix0KX0p LnN0PQp5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsbix0KX0pLm9uKCJt b3VzZW92ZXIiLGZ1bmN0aW9uKHQsbik9CntkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIi LCEwKSx4LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmEodCxuKSxwb2ludD0KOnQsc2VyaWVzOmVb dC5zZXJpZXNdLHBvczpbaSh1KHQsbikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5ndGgvMjp0LnNl cmllcysuPQo1KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNl cmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXY9CmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlv bih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLHguZT0KbGVtZW50TW91 c2VvdXQoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb2ludEluZGV4 Om4sc2VyaWVzPQpJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0 aW9uKHQsbil7eC5lbGVtZW50Q2xpY2soe3ZhbHU9CmU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVb dC5zZXJpZXNdLHBvczpbaSh1KHQsbikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5ndD0KaC8yOnQu c2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNl cmllc0luZGV4OnQuPQpzZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlv bigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG49Cil7eC5lbGVtZW50RGJsQ2xpY2soe3Zh bHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W2kodSh0LG4pKT0KK2ku cmFuZ2VCYW5kKCkqKGM/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKHQsbikr KGM/dC55MDowKSldLHBvPQppbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZl bnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLEg9Ci5hdHRyKCJjbGFzcyIsZnVuY3Rp b24oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdD0K aXZlIn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIr aSh1KGUsdCkpKyIsMCkifSksPQp2JiYobXx8KG09M0RlLm1hcChmdW5jdGlvbigpe3JldHVybiEw fSkpLEguc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCxuKXtyZXQ9CnVybiBkMy5yZ2IodihlLHQp KS5kYXJrZXIobS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihl LD0KdCl7cmV0dXJuIW1bdF19KVtuXSkudG9TdHJpbmcoKX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0 aW9uKGUsdCxuKXtyZXR1cm4gZDMuPQpyZ2IodihlLHQpKS5kYXJrZXIobS5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHU9CnJuIW1bdF19KVtuXSku dG9TdHJpbmcoKX0pKSxjP0guYXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhjP2UueTE6 MCl9KT0KLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5h YnMocyhlLnkrKGM/ZS55MDowKSktcyhjPQo/ZS55MDowKSksMSl9KS5hdHRyKCJ4IixmdW5jdGlv bih0LG4pe3JldHVybiBjPzA6dC5zZXJpZXMqaS5yYW5nZUJhbmQoKS9lLmw9CmVuZ3RofSkuYXR0 cigid2lkdGgiLGkucmFuZ2VCYW5kKCkvKGM/MTplLmxlbmd0aCkpOkguYXR0cigieCIsZnVuY3Rp b24odCxuKT0Ke3JldHVybiB0LnNlcmllcyppLnJhbmdlQmFuZCgpL2UubGVuZ3RofSkuYXR0cigi d2lkdGgiLGkucmFuZ2VCYW5kKCkvZS5sZW5nPQp0aCkuYXR0cigieSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gYShlLHQpPDA/cygwKTpzKDApLXMoYShlLHQpKTwxP3MoMCktMTpzKGE9CihlLHQpKXx8 MH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMo cyhhKGUsdCkpLT0KcygwKSksMSl8fDB9KSxUPTNEaS5jb3B5KCksTj0zRHMuY29weSgpfSksQ312 YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowPQosbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAs aT0zRGQzLnNjYWxlLm9yZGluYWwoKSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRE09CmF0aC5m bG9vcihNYXRoLnJhbmRvbSgpKjFlNCksdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0Rm dW5jdGlvbihlKXtyZT0KdHVybiBlLnl9LGY9M0RbMF0sbD0zRCEwLGM9M0QhMSxoPTNEInplcm8i LHA9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGQ9M0QhPQoxLHY9M0RudWxsLG0sZz0zRDEyMDAs eSxiLHcsRSxTPTNELjEseD0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudEM9Cmxp Y2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0 IiksVCxOO3JldHVybiBDLj0KZGlzcGF0Y2g9M0R4LEMub3B0aW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGlvbihlKXtyZXR1PQpybiBhcmd1bWVudHMubGVuZ3Ro Pyh1PTNEZSxDKTp1fSxDLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89 CihhPTNEZSxDKTphfSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh0LnRvcD0zRHR5cGVvZj0KIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQu cmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lPQoucmlnaHQ6dC5yaWdodCx0 LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRv bSw9CnQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxD KTp0fSxDLndpZHRoPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0z RGUsQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3Ro PyhyPTNEZSxDKTpyfSxDLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyg9Cmk9M0RlLEMpOml9LEMueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMueD0KRG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHk9M0RlLEMpOnl9LEMueURvbWFpbj0zRGZ1bmN0PQppb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLEMpOmJ9LEMueFJhbmdlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8odz0zRGUsQyk6d30sQy55UmFuZ2U9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhFPTNEZSxDKTpFfSxDLmZvcmNlWT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxDKTpmfSxDPQouc3RhY2tl ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxDKTpjfSxDLnN0 YWNrT2Zmc2V0PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUs Qyk6aH0sQy5jbGlwRWRnZT0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGw9M0RlLEMpOmx9LEMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbj0KdHMubGVu Z3RoPyhwPTNEZS51dGlscy5nZXRDb2xvcih0KSxDKTpwfSxDLmJhckNvbG9yPTNEZnVuY3Rpb24o dCl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8odj0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6 dn0sQy5kaXNhYmxlZD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KG09 M0RlLEMpOm19LEMuaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhv PTNEZSxDKTpvfSxDLmhpZGVhYmxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGQ9M0RlLEMpOmR9PQosQy5kZWxheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhnPTNEZSxDKTpnfSxDLmdyb3VwU3BhY2luZz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLEMpOlN9LEN9LGUubW9kZWxzLm11bHRpQmFyQ2hhPQpy dD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3Zh ciBiPTNEZDMuc2VsZWN0KHQ9Cmhpcyksaz0zRHRoaXMsTz0zRCh1fHxwYXJzZUludChiLnN0eWxl KCJ3aWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxNPTNEKD0KYXx8cGFyc2VJbnQoYi5zdHls ZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tO0EudXBkYXRlPTNEZnVuY3Rpb24oKXti PQouY2FsbChBKX0sQS5jb250YWluZXI9M0R0aGlzLFMuZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlv bihlKXtyZXR1cm4hIWUuZGlzYWI9CmxlZH0pO2lmKCF4KXt2YXIgXzt4PTNEe307Zm9yKF8gaW4g UylTW19daW5zdGFuY2VvZiBBcnJheT94W19dPTNEU1tfXS5zbGljZT0KKDApOnhbX109M0RTW19d fWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMu bGVuPQpndGh9KS5sZW5ndGgpe3ZhciBEPTNEYi5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRh KFtUXSk7cmV0dXJuIEQuZW50ZXIoKS49CmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZk MyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleD0KdC1hbmNob3IiLCJt aWRkbGUiKSxELmF0dHIoIngiLG8ubGVmdCtPLzIpLmF0dHIoInkiLG8udG9wK00vMikudGV4dChm dW5jdGlvPQpuKGUpe3JldHVybiBlfSksQX1iLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92 ZSgpLHc9M0R0LnhTY2FsZSgpLEU9M0R0Lnk9ClNjYWxlKCk7dmFyIFA9M0RiLnNlbGVjdEFsbCgi Zy5udi13cmFwLm52LW11bHRpQmFyV2l0aExlZ2VuZCIpLmRhdGEoW2VdKSxIPQo9M0RQLmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGlCYXJXaXRo TGVnZW5kIik9Ci5hcHBlbmQoImciKSxCPTNEUC5zZWxlY3QoImciKTtILmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksSD0KLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYteSBudi1heGlzIiksSC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhPQpyc1dyYXAi KSxILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEguYXBwZW5kKCJn IikuYXR0cigiY2w9CmFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLGMmJihpLndpZHRoKE8tQygpKSx0 LmJhckNvbG9yKCkmJmUuZm9yRWFjaChmdW5jdGlvbj0KKGUsdCl7ZS5jb2xvcj0zRGQzLnJnYigi I2NjYyIpLmRhcmtlcih0KjEuNSkudG9TdHJpbmcoKX0pLEIuc2VsZWN0KCIubnYtbGVnPQplbmRX cmFwIikuZGF0dW0oZSkuY2FsbChpKSxvLnRvcCE9M0RpLmhlaWdodCgpJiYoby50b3A9M0RpLmhl aWdodCgpLE09M0QoYXw9CnxwYXJzZUludChiLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3At by5ib3R0b20pLEIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcD0KIikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKCIrQygpKyIsIisgLW8udG9wKyIpIikpO2lmKGwpe3ZhciBqPTNEW3trZXk6PQoi R3JvdXBlZCIsZGlzYWJsZWQ6dC5zdGFja2VkKCl9LHtrZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0 LnN0YWNrZWQoKX1dO3Mud2k9CmR0aChDKCkpLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0p LEIuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oaj0KKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoMCwiKyAtby50b3ArIikiKS5jYWxsKHMpfVAuYXR0cigidHJhbnNmb3JtIiwi PQp0cmFuc2xhdGUoIitvLmxlZnQrIiwiK28udG9wKyIpIiksZCYmQi5zZWxlY3QoIi5udi15Lm52 LWF4aXMiKS5hdHRyKCJ0cmFuc2Y9Cm9ybSIsInRyYW5zbGF0ZSgiK08rIiwwKSIpLHQuZGlzYWJs ZWQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KT0KKS53aWR0aChPKS5oZWln aHQoTSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8ZihlLHQpfSku ZmlsPQp0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKTt2YXIgRj0zREIu c2VsZWN0KCIubnYtYmFyc1dyYXAiKS49CmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkfSkpO0YuY2FsbCh0KTtpZihoKXtuLnNjYWxlKHcpLj0KdGlja3MoTy8xMDAp LnRpY2tTaXplKC1NLDApLEIuc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3Jt IiwidHJhPQpuc2xhdGUoMCwiK0UucmFuZ2UoKVswXSsiKSIpLEIuc2VsZWN0KCIubnYteC5udi1h eGlzIikuY2FsbChuKTt2YXIgST0zREIuc2U9CmxlY3QoIi5udi14Lm52LWF4aXMgPiBnIikuc2Vs ZWN0QWxsKCJnIik7SS5zZWxlY3RBbGwoImxpbmUsIHRleHQiKS5zdHlsZSgibz0KcGFjaXR5Iiwx KTtpZihtKXt2YXIgcT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK2UrIiwiK3Qr IikifSxSPTNEPQo1LFU9M0QxNztJLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxKDAsbiU9CjI9M0Q9M0QwP1I6VSl9KTt2YXIgej0zRGQz LnNlbGVjdEFsbCgiLm52LXgubnYtYXhpcyAubnYtd3JhcCBnIGcgdGV4dCIpWzBdLj0KbGVuZ3Ro O0Iuc2VsZWN0QWxsKCIubnYteC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQiKS5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4gcSgwLHQ9M0Q9M0Q9M0QwfHx6JTIhPTNE PTNEMD9VOlIpfSl9diYmSS5maWx0ZXIoZnVuY3Rpb249Cih0LG4pe3JldHVybiBuJU1hdGguY2Vp bChlWzBdLnZhbHVlcy5sZW5ndGgvKE8vMTAwKSkhPTNEPTNEMH0pLnNlbGVjdEFsbCgidD0KZXh0 LCBsaW5lIikuc3R5bGUoIm9wYWNpdHkiLDApLGcmJkkuc2VsZWN0QWxsKCIudGljayB0ZXh0Iiku YXR0cigidHJhbnNmb3JtPQoiLCJyb3RhdGUoIitnKyIgMCwwKSIpLnN0eWxlKCJ0ZXh0LWFuY2hv ciIsZz4wPyJzdGFydCI6ImVuZCIpLEIuc2VsZWN0KCIubnY9Ci14Lm52LWF4aXMiKS5zZWxlY3RB bGwoImcubnYtYXhpc01heE1pbiB0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfXAmJihyLnNjYT0K bGUoRSkudGlja3MoTS8zNikudGlja1NpemUoLU8sMCksQi5zZWxlY3QoIi5udi15Lm52LWF4aXMi KS5jYWxsKHIpKSxpLmRpc3BhPQp0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtTPTNE ZSxOLnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRlKCl9KSxzLmRpc3A9CmF0Y2gub24oImxlZ2VuZENs aWNrIixmdW5jdGlvbihlLG4pe2lmKCFlLmRpc2FibGVkKXJldHVybjtqPTNEai5tYXAoZnVuY3Rp bz0KbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0zRCEwLGV9KSxlLmRpc2FibGVkPTNEITE7c3dpdGNo KGUua2V5KXtjYXNlIkdyb3VwZWQiPQo6dC5zdGFja2VkKCExKTticmVhaztjYXNlIlN0YWNrZWQi OnQuc3RhY2tlZCghMCl9Uy5zdGFja2VkPTNEdC5zdGFja2VkKCksTi49CnN0YXRlQ2hhbmdlKFMp LEEudXBkYXRlKCl9KSxOLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7eSYmTChlLGsucGFy ZW50Tj0Kb2RlKX0pLE4ub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihuKXt0eXBlb2Ygbi5kaXNh YmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuPQpmb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxl ZD0zRG4uZGlzYWJsZWRbdF19KSxTLmRpc2FibGVkPTNEbi5kaXNhYmxlZCk9Cix0eXBlb2Ygbi5z dGFja2VkIT0zRCJ1bmRlZmluZWQiJiYodC5zdGFja2VkKG4uc3RhY2tlZCksUy5zdGFja2VkPTNE bi5zdGFjaz0KZWQpLEEudXBkYXRlKCl9KX0pLEF9dmFyIHQ9M0RlLm1vZGVscy5tdWx0aUJhcigp LG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUuPQptb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5s ZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRHt0b3A6MzAscmlnaHQ9CjoyMCxib3R0 b206NTAsbGVmdDo2MH0sdT0zRG51bGwsYT0zRG51bGwsZj0zRGUudXRpbHMuZGVmYXVsdENvbG9y KCksbD0zRCEwLD0KYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEITEsZz0z RDAseT0zRCEwLGI9M0RmdW5jdGlvbihlLHQsbixyPQosaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+ IisiPHA+IituKyIgb24gIit0KyI8L3A+In0sdyxFLFM9M0R7c3RhY2tlZDohMX0seD0KPTNEbnVs bCxUPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsTj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIs InRvb2x0aXBIaWRlPQoiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksQz0zRGZ1bmN0aW9u KCl7cmV0dXJuIGw/MTgwOjB9LGs9M0QwO3Quc3RhY2s9CmVkKCExKSxuLm9yaWVudCgiYm90dG9t IikudGlja1BhZGRpbmcoNykuaGlnaGxpZ2h0WmVybyghMCkuc2hvd01heE1pbighMSkudD0KaWNr Rm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksci5vcmllbnQoZD8icmlnaHQiOiJsZWZ0Iiku dGlja0Zvcm1hdChkMy5mPQpvcm1hdCgiLC4xZiIpKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTD0z RGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy49Cm9mZnNldExlZnR8fDApLHU9M0Rp LnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaT0K bnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2lu dEluZGV4KSksbD0zRGIoaS5zPQplcmllcy5rZXksYSxmLGksQSk7ZS50b29sdGlwLnNob3coW28s dV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm49CiB0LmRpc3BhdGNoLm9uKCJl bGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK28u bD0KZWZ0LGUucG9zWzFdK28udG9wXSxOLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigi ZWxlbWVudE1vdXNlb3V0LnRvb2x0PQppcCIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZShlKX0p LE4ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3kmJmUudG9vbHQ9CmlwLmNsZWFudXAoKX0p LEEuZGlzcGF0Y2g9M0ROLEEubXVsdGliYXI9M0R0LEEubGVnZW5kPTNEaSxBLnhBeGlzPTNEbixB LnlBeD0KaXM9M0RyLGQzLnJlYmluZChBLHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLCJ4 UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiPQosImZvcmNlWSIsImNsaXBFZGdlIiwiaWQiLCJzdGFj a2VkIiwic3RhY2tPZmZzZXQiLCJkZWxheSIsImJhckNvbG9yIiwiZ3JvdXA9ClNwYWNpbmciKSxB Lm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQSksQS5tYXJnaW49M0RmdW5jdGlv bihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0Qi dW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpPQpnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5k ZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3Q9CnRvbSE9M0Qi dW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1 bmRlZmluZWQiPz0KZS5sZWZ0Om8ubGVmdCxBKTpvfSxBLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEEpPQo6dX0sQS5oZWlnaHQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsQSk6YX0sQS5jb2xvcj0zRGY9CnVuY3Rp b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENvbG9yKHQpLGku Y29sb3IoZiksQSk6Zj0KfSxBLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSxBKTpsfSxBLnNob3dMPQplZ2VuZD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxBKTpjfSxBLnNob3dYQXhpcz0zRGZ1bmM9CnRp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLEEpOmh9LEEuc2hvd1lBeGlzPTNE ZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsQSk6cH0sQS5yaWdo dEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhkPTNE ZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxBKTpkfSxBLnJlZHVjZVhUaWNrcz0zRGZ1bmM9 CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEEpOnZ9LEEucm90YXRlTGFi ZWxzPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsQSk6Z30s QS5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8o bT0zRGUsQSk6bX0sQS50b29sdGlwPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg9Cj8oYj0zRGUsQSk6Yn0sQS50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh5PTNEZSxBKTp5fT0KLEEudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsQSk6Yn0sQS5zdGF0PQplPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLEEpOlN9LEEuZGVmYXVsdFN0YXRlPTNE ZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsQSk6eH0sQS5ub0Rh dGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxBKTpUfSxB LnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5n dGg/KGs9M0RlLEEpOmt9LEF9LGUubW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbD0zRGZ1bmN0aW9u KCl7ZnVuY3Q9CmlvbiBDKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9M0RuLXQu bGVmdC10LnJpZ2h0LHk9M0RyLXQudG9wLXQuYj0Kb3R0b20sQz0zRGQzLnNlbGVjdCh0aGlzKTtw JiYoZT0zRGQzLmxheW91dC5zdGFjaygpLm9mZnNldCgiemVybyIpLnZhbHVlcyhmPQp1bmN0aW9u KGUpe3JldHVybiBlLnZhbHVlc30pLnkoYSkoZSkpLGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uu dmFsdWVzLmZvckU9CmFjaChmdW5jdGlvbihlKXtlLnNlcmllcz0zRHR9KX0pLHAmJmVbMF0udmFs dWVzLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPTNEMD0KLGk9M0QwO2UubWFwKGZ1bmN0aW9uKGUp e3ZhciB0PTNEZS52YWx1ZXNbbl07dC5zaXplPTNETWF0aC5hYnModC55KSx0Lnk8MD8oPQp0Lnkx PTNEaS10LnNpemUsaS09M0R0LnNpemUpOih0LnkxPTNEcixyKz0zRHQuc2l6ZSl9KX0pO3ZhciBr PTNEYiYmdz9bXTplLm09CmFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTphKGUsdCkseT0KMDplLnkwLHkxOmUueTF9fSl9KTtz LmRvbWFpbihifHxkMy5tZXJnZShrKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yPQph bmdlQmFuZHMoRXx8WzAseV0sLjEpLG8uZG9tYWluKHd8fGQzLmV4dGVudChkMy5tZXJnZShrKS5t YXAoZnVuY3Rpb24oZSl7cmU9CnR1cm4gcD9lLnk+MD9lLnkxK2UueTplLnkxOmUueX0pLmNvbmNh dChmKSkpLGQmJiFwP28ucmFuZ2UoU3x8W28uZG9tYWluKClbMD0KXTwwP206MCxpLShvLmRvbWFp bigpWzFdPjA/bTowKV0pOm8ucmFuZ2UoU3x8WzAsaV0pLFQ9M0RUfHxzLE49M0ROfHxkMy5zY2Fs PQplLmxpbmVhcigpLmRvbWFpbihvLmRvbWFpbigpKS5yYW5nZShbbygwKSxvKDApXSk7dmFyIEw9 M0RkMy5zZWxlY3QodGhpcykuc2U9CmxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aWJhckhvcml6 b250YWwiKS5kYXRhKFtlXSksQT0zREwuZW50ZXIoKS5hcHBlbmQoIj0KZyIpLmF0dHIoImNsYXNz IiwibnZkMyBudi13cmFwIG52LW11bHRpYmFySG9yaXpvbnRhbCIpLE89M0RBLmFwcGVuZCgiZGVm cyIpPQosTT0zREEuYXBwZW5kKCJnIiksXz0zREwuc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWdyb3VwcyI9CiksTC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo Iit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEQ9M0RMLnNlbGVjdCgiLj0KbnYtZ3JvdXBzIiku c2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlv bihlLHQpPQp7cmV0dXJuIHR9KTtELmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1v cGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC09Cm9wYWNpdHkiLDFlLTYpLEQuZXhpdCgpLnN0eWxl KCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMT0KZS02KS5yZW1v dmUoKSxELmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJp ZXMtIit0fSkuPQpjbGFzc2VkKCJob3ZlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KS5z dHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXQ9CnVybiBsKGUsdCl9KS5zdHlsZSgic3Ryb2tl IixmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCl9KSxELnN0eWxlKCJzdHJva2Utbz0KcGFjaXR5 IiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBQPTNERC5zZWxlY3RBbGwoImcubnYt YmFyIikuZGF0YShmPQp1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO1AuZXhpdCgpLnJlbW92 ZSgpO3ZhciBIPTNEUC5lbnRlcigpLmFwcGVuZCgiZyI9CikuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbih0LG4scil7cmV0dXJuInRyYW5zbGF0ZSgiK04ocD90LnkwOjApKyIsIisocD8wOj0Kcipz LnJhbmdlQmFuZCgpL2UubGVuZ3RoK3ModSh0LG4pKSkrIikifSk7SC5hcHBlbmQoInJlY3QiKS5h dHRyKCJ3aWR0aCIsMCkuPQphdHRyKCJoZWlnaHQiLHMucmFuZ2VCYW5kKCkvKHA/MTplLmxlbmd0 aCkpLFAub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXs9CmQzLnNlbGVjdCh0aGlzKS5jbGFz c2VkKCJob3ZlciIsITApLHguZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4pLHBvaW50Oj0K dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltvKGEodCxuKSsocD90LnkwOjApKSxzKHUodCxuKSkr cy5yYW5nZUJhbmQoKSoocD9lPQoubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoXSxwb2lu dEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmU9Cm50fSl9KS5vbigibW91c2Vv dXQiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSkseC5l bD0KZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNd LHBvaW50SW5kZXg6bixzZXJpZXNJPQpuZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJj bGljayIsZnVuY3Rpb24odCxuKXt4LmVsZW1lbnRDbGljayh7dmFsdWU9CjphKHQsbikscG9pbnQ6 dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoocD9lLmxl bmd0aD0KLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKyhwP3QueTA6MCkpXSxwb2lu dEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zPQplcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3Rv cFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbik9Cnt4LmVsZW1lbnRE YmxDbGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1 KHQsbikpKz0Kcy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0 aCxvKGEodCxuKSsocD90LnkwOjApKV0scG9pPQpudEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJp ZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksSC49CmFwcGVuZCgi dGV4dCIpLGQmJiFwPyhQLnNlbGVjdCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlv bihlLHQpe3JldD0KdXJuIGEoZSx0KTwwPyJlbmQiOiJzdGFydCJ9KS5hdHRyKCJ5IixzLnJhbmdl QmFuZCgpLyhlLmxlbmd0aCoyKSkuYXR0cigiZHkiPQosIi4zMmVtIikudGV4dChmdW5jdGlvbihl LHQpe3JldHVybiBnKGEoZSx0KSl9KSxQLnNlbGVjdCgidGV4dCIpLmF0dHIoIngiLGY9CnVuY3Rp b24oZSx0KXtyZXR1cm4gYShlLHQpPDA/LTQ6byhhKGUsdCkpLW8oMCkrNH0pKTpQLnNlbGVjdEFs bCgidGV4dCIpLnRleD0KdCgiIiksdiYmIXA/KEguYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibnYt YmFyLWxhYmVsIiwhMCksUC5zZWxlY3QoInRleHQubnYtPQpiYXItbGFiZWwiKS5hdHRyKCJ0ZXh0 LWFuY2hvciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/InN0YXJ0IjoiZW5kIn09Ciku YXR0cigieSIscy5yYW5nZUJhbmQoKS8oZS5sZW5ndGgqMikpLmF0dHIoImR5IiwiLjMyZW0iKS50 ZXh0KGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gdShlLHQpfSksUC5zZWxlY3QoInRleHQubnYtYmFy LWxhYmVsIikuYXR0cigieCIsZnVuY3Rpb24oZSx0KXtyZXR1PQpybiBhKGUsdCk8MD9vKDApLW8o YShlLHQpKSs0Oi00fSkpOlAuc2VsZWN0QWxsKCJ0ZXh0Lm52LWJhci1sYWJlbCIpLnRleHQoIiI9 CiksUC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBu ZWdhdGl2ZSI6Im52LWJhciBwbz0Kc2l0aXZlIn0pLGMmJihofHwoaD0zRGUubWFwKGZ1bmN0aW9u KCl7cmV0dXJuITB9KSksUC5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oPQplLHQsbil7cmV0dXJuIGQz LnJnYihjKGUsdCkpLmRhcmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVy KGY9CnVuY3Rpb24oZSx0KXtyZXR1cm4haFt0XX0pW25dKS50b1N0cmluZygpfSkuc3R5bGUoInN0 cm9rZSIsZnVuY3Rpb24oZSx0LG4pez0KcmV0dXJuIGQzLnJnYihjKGUsdCkpLmRhcmtlcihoLm1h cChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uPQooZSx0KXtyZXR1cm4h aFt0XX0pW25dKS50b1N0cmluZygpfSkpLHA/UC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUs dCl7cmU9CnR1cm4idHJhbnNsYXRlKCIrbyhlLnkxKSsiLCIrcyh1KGUsdCkpKyIpIn0pLnNlbGVj dCgicmVjdCIpLmF0dHIoIndpZHRoIixmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKG8o YShlLHQpK2UueTApLW8oZS55MCkpfSkuYXR0cigiaGVpZ2h0IixzLnJhbmdlPQpCYW5kKCkpOlAu YXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0LG4pe3JldHVybiJ0cmFuc2xhdGUoIisoYSh0LG4p PDA/byhhKHQ9CixuKSk6bygwKSkrIiwiKyh0LnNlcmllcypzLnJhbmdlQmFuZCgpL2UubGVuZ3Ro K3ModSh0LG4pKSkrIikifSkuc2VsZWN0KCJyZT0KY3QiKS5hdHRyKCJoZWlnaHQiLHMucmFuZ2VC YW5kKCkvZS5sZW5ndGgpLmF0dHIoIndpZHRoIixmdW5jdGlvbihlLHQpe3JldHVyPQpuIE1hdGgu bWF4KE1hdGguYWJzKG8oYShlLHQpKS1vKDApKSwxKX0pLFQ9M0RzLmNvcHkoKSxOPTNEby5jb3B5 KCl9KSxDfXZhciA9CnQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q5NjAs cj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbj0KZG9tKCkqMWU0KSxzPTNEZDMuc2NhbGUu b3JkaW5hbCgpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4g ZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRFswXSxsPTNEZS51dGlscy5kZWZh dWx0Q29sb3IoKSxjPQo9M0RudWxsLGgscD0zRCExLGQ9M0QhMSx2PTNEITEsbT0zRDYwLGc9M0Rk My5mb3JtYXQoIiwuMmYiKSx5PTNEMTIwMCxiLHcsRSw9ClMseD0zRGQzLmRpc3BhdGNoKCJjaGFy dENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdT0Kc2Vv dmVyIiwiZWxlbWVudE1vdXNlb3V0IiksVCxOO3JldHVybiBDLmRpc3BhdGNoPTNEeCxDLm9wdGlv bnM9M0RlLnV0aWxzLm9wPQp0aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQy49Cnk9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsQyk6YX0sQy5tYXJnaW49M0RmdW5jdGlvbihlKT0K e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZp bmVkIj9lLnRvcDp0LnRvcCx0PQoucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVk Ij9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS49CmJvdHRvbSE9M0QidW5kZWZp bmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmlu ZT0KZCI/ZS5sZWZ0OnQubGVmdCxDKTp0fSxDLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KG49M0RlPQosQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn0sQy54U2NhbGU9Cj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxDKTpzfSxDLnlTY2FsZT0zRGZ1bmN0aW9u KGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLEMpOm99LEMueERvbWFpbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KGI9M0RlLEMpOmJ9LEMueURvbWFp bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PQo9M0RlLEMpOnd9LEMu eFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEMpOkV9 LEMueVI9CmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUs Qyk6U30sQy5mb3JjZVk9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhm PTNEZSxDKTpmfSxDLnN0YWNrZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVu Z3RoPyhwPTNEZSxDKTpwfSxDLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGw9Cj0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6bH0sQy5iYXJDb2xvcj0zRGZ1bmN0 aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQp LEMpOmN9LEMuZGlzYWJsZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3Ro PyhoPTNEZSxDKTpofSxDLmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLEMpOmk9Cn0sQy5kZWxheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh5PTNEZSxDKTp5fSxDLnNob3dWYWx1ZXM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhkPTNEZSxDKTpkfSxDLnNob3dCYXJMYWJlbHM9M0RmdW5jdD0KaW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxDKTp2fSxDLnZhbHVlRm9ybWF0PTNEZnVu Y3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsQyk6Z30sQy52YWx1ZVBh ZGRpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhtPTNEZSxDKTpt fSxDfSxlLm1vZGVscy5tdWx0aUJhckhvcml6b250YWxDaGFydD0zRGZ1bmN0aW9uKCl7Zj0KdW5j dGlvbiBDKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGQ9M0RkMy5zZWxlY3QodGhp cyksbT0zRHRoaXMsVD0KPTNEKHV8fHBhcnNlSW50KGQuc3R5bGUoIndpZHRoIikpfHw5NjApLW8u bGVmdC1vLnJpZ2h0LGs9M0QoYXx8cGFyc2VJbnQoZC5zPQp0eWxlKCJoZWlnaHQiKSl8fDQwMCkt by50b3Atby5ib3R0b207Qy51cGRhdGU9M0RmdW5jdGlvbigpe2QuY2FsbChDKX0sQy5jb249CnRh aW5lcj0zRHRoaXMsYi5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNh YmxlZH0pO2lmKCF3KXt2YT0KciBMO3c9M0R7fTtmb3IoTCBpbiBiKWJbTF1pbnN0YW5jZW9mIEFy cmF5P3dbTF09M0RiW0xdLnNsaWNlKDApOndbTF09M0RiW0xdPQp9aWYoIWV8fCFlLmxlbmd0aHx8 IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3Y9 CmFyIEE9M0RkLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW0VdKTtyZXR1cm4gQS5lbnRl cigpLmFwcGVuZCgidGV4dCIpLj0KYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIo ImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkPQpsZSIpLEEuYXR0cigieCIs by5sZWZ0K1QvMikuYXR0cigieSIsby50b3Aray8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBl fSk9CixDfWQuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksZz0zRHQueFNjYWxlKCks eT0zRHQueVNjYWxlKCk7dmFyIE89Cj0zRGQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGlC YXJIb3Jpem9udGFsQ2hhcnQiKS5kYXRhKFtlXSksTT0zRE8uZW50ZT0KcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11bHRpQmFySG9yaXpvbnRhbENoYXJ0Iiku YXBwPQplbmQoImciKSxfPTNETy5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYteCBudi1heGlzIiksTS5hcHA9CmVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1h eGlzIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi16ZXJvTGluZT0KIikuYXBwZW5kKCJs aW5lIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksTS5hcHBlbmQo ImciKS5hPQp0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSw9CmMmJihpLndpZHRoKFQteCgpKSx0LmJhckNvbG9y KCkmJmUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuY29sb3I9M0RkMy5yZ2IoIj0KI2NjYyIpLmRh cmtlcih0KjEuNSkudG9TdHJpbmcoKX0pLF8uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVt KGUpLmNhbGwoPQppKSxvLnRvcCE9M0RpLmhlaWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLGs9 M0QoYXx8cGFyc2VJbnQoZC5zdHlsZSgiaGVpZ2g9CnQiKSl8fDQwMCktby50b3Atby5ib3R0b20p LF8uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYT0KbnNsYXRl KCIreCgpKyIsIisgLW8udG9wKyIpIikpO2lmKGwpe3ZhciBEPTNEW3trZXk6Ikdyb3VwZWQiLGRp c2FibGVkOnQuc3RhPQpja2VkKCl9LHtrZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0LnN0YWNrZWQo KX1dO3Mud2lkdGgoeCgpKS5jb2xvcihbIiM0NDQiLCI9CiM0NDQiLCIjNDQ0Il0pLF8uc2VsZWN0 KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oRCkuYXR0cigidHJhbnNmb3JtIiwidHJhbj0Kc2xh dGUoMCwiKyAtby50b3ArIikiKS5jYWxsKHMpfU8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIrby5sZWZ0KyIsIitvPQoudG9wKyIpIiksdC5kaXNhYmxlZChlLm1hcChmdW5jdGlvbihlKXty ZXR1cm4gZS5kaXNhYmxlZH0pKS53aWR0aChUKS5oZWlnaHQ9CihrKS5jb2xvcihlLm1hcChmdW5j dGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKT0K e3JldHVybiFlW25dLmRpc2FibGVkfSkpO3ZhciBQPTNEXy5zZWxlY3QoIi5udi1iYXJzV3JhcCIp LmRhdHVtKGUuZmlsdGVyKGZ1PQpuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7UC5jYWxs KHQpO2lmKGgpe24uc2NhbGUoZykudGlja3Moay8yNCkudGlja1M9Cml6ZSgtVCwwKSxfLnNlbGVj dCgiLm52LXgubnYtYXhpcyIpLmNhbGwobik7dmFyIEg9M0RfLnNlbGVjdCgiLm52LXgubnYtYXhp cz0KIikuc2VsZWN0QWxsKCJnIik7SC5zZWxlY3RBbGwoImxpbmUsIHRleHQiKX1wJiYoci5zY2Fs ZSh5KS50aWNrcyhULzEwMCkudGljPQprU2l6ZSgtaywwKSxfLnNlbGVjdCgiLm52LXkubnYtYXhp cyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIraysiKSI9CiksXy5zZWxlY3QoIi5u di15Lm52LWF4aXMiKS5jYWxsKHIpKSxfLnNlbGVjdCgiLm52LXplcm9MaW5lIGxpbmUiKS5hdHRy KCJ4MT0KIix5KDApKS5hdHRyKCJ4MiIseSgwKSkuYXR0cigieTEiLDApLmF0dHIoInkyIiwtayks aS5kaXNwYXRjaC5vbigic3RhdGVDaGFuPQpnZSIsZnVuY3Rpb24oZSl7Yj0zRGUsUy5zdGF0ZUNo YW5nZShiKSxDLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2w9CmljayIsZnVuY3Rp b24oZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47RD0zREQubWFwKGZ1bmN0aW9uKGUpe3JldHVy biBlLmRpcz0KYWJsZWQ9M0QhMCxlfSksZS5kaXNhYmxlZD0zRCExO3N3aXRjaChlLmtleSl7Y2Fz ZSJHcm91cGVkIjp0LnN0YWNrZWQoITEpO2JyPQplYWs7Y2FzZSJTdGFja2VkIjp0LnN0YWNrZWQo ITApfWIuc3RhY2tlZD0zRHQuc3RhY2tlZCgpLFMuc3RhdGVDaGFuZ2UoYiksQy49CnVwZGF0ZSgp fSksUy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3YmJk4oZSxtLnBhcmVudE5vZGUpfSks Uy5vbigiY2hhbj0KZ2VTdGF0ZSIsZnVuY3Rpb24obil7dHlwZW9mIG4uZGlzYWJsZWQhPTNEInVu ZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oPQplLHQpe2UuZGlzYWJsZWQ9M0RuLmRpc2Fi bGVkW3RdfSksYi5kaXNhYmxlZD0zRG4uZGlzYWJsZWQpLHR5cGVvZiBuLnN0YWNrZWQ9CiE9M0Qi dW5kZWZpbmVkIiYmKHQuc3RhY2tlZChuLnN0YWNrZWQpLGIuc3RhY2tlZD0zRG4uc3RhY2tlZCks Qy51cGRhdGUoKX0pfT0KKSxDfXZhciB0PTNEZS5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsKCks bj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuPQpheGlzKCksaT0zRGUubW9kZWxzLmxl Z2VuZCgpLmhlaWdodCgzMCkscz0zRGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgzMCksbz0KPTNE e3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo2MH0sdT0zRG51bGwsYT0zRG51bGwsZj0z RGUudXRpbHMuZGVmYXVsPQp0Q29sb3IoKSxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0z RCExLHY9M0QhMCxtPTNEZnVuY3Rpb24oZSx0LG4scixpKXs9CnJldHVybiI8aDM+IitlKyIgLSAi K3QrIjwvaDM+IisiPHA+IituKyI8L3A+In0sZyx5LGI9M0R7c3RhY2tlZDpkfSx3PTNEbnVsbD0K LEU9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixTPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93Iiwi dG9vbHRpcEhpZGUiLCJzdGF0PQplQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSx4PTNEZnVuY3Rpb24o KXtyZXR1cm4gbD8xODA6MH0sVD0zRDA7dC5zdGFja2VkKGQpLG49Ci5vcmllbnQoImxlZnQiKS50 aWNrUGFkZGluZyg1KS5oaWdobGlnaHRaZXJvKCExKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0 KD0KZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudCgiYm90dG9tIikudGlja0Zvcm1hdChk My5mb3JtYXQoIiwuMWYiKSkscy51PQpwZGF0ZVN0YXRlKCExKTt2YXIgTj0zRGZ1bmN0aW9uKGks cyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PQo9M0RpLnBvc1sxXSsocy5v ZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRl eCk9CiksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0z RG0oaS5zZXJpZXMua2V5LGEsZixpLD0KQyk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVl PDA/ImUiOiJ3IixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiPQplbGVtZW50TW91c2Vv dmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVmdCxlLnBvc1sx XStvLnQ9Cm9wXSxTLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNl b3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpez0KUy50b29sdGlwSGlkZShlKX0pLFMub24oInRvb2x0 aXBIaWRlIixmdW5jdGlvbigpe3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxDPQouZGlzcGF0Y2g9 M0RTLEMubXVsdGliYXI9M0R0LEMubGVnZW5kPTNEaSxDLnhBeGlzPTNEbixDLnlBeGlzPTNEcixk My5yZWJpbmQ9CihDLHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFu Z2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJjbGlwRT0KZGdlIiwiaWQiLCJkZWxheSIsInNob3dWYWx1 ZXMiLCJzaG93QmFyTGFiZWxzIiwidmFsdWVGb3JtYXQiLCJzdGFja2VkIiwiYmFyPQpDb2xvciIp LEMub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLm1hcmdpbj0zRGZ1bmN0 aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPTNEdHlwZW9mIGUudG9wIT0z RCJ1bmRlZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaD0KdD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1 bmRlZmluZWQiP2UucmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvPQptIT0z RCJ1bmRlZmluZWQiP2UuYm90dG9tOm8uYm90dG9tLG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNE InVuZGVmaW5lZCI/ZS49CmxlZnQ6by5sZWZ0LEMpOm99LEMud2lkdGg9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dT0KfSxDLmhlaWdodD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxDKTphfSxDLmNvbG9yPTNEZnVuPQpj dGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCks aS5jb2xvcihmKSxDKTpmfSw9CkMuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGw9M0RlLEMpOmx9LEMuc2hvd0xlZz0KZW5kPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMuc2hvd1hBeGlzPTNEZnVuY3Rp PQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5zaG93WUF4aXM9 M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxDKTpwfSxDLnRv b2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhtPTNEZSxDKTpt fSxDLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Rl LEMpPQo6dn0sQy50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhtPTNEZSxDKTptfSxDLnM9CnRhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy5kZWZhdWx0U3RhdGU9M0RmdT0KbmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxDKTp3fSxDLm5vRGF0YT0zRGZ1bmN0aW9uKGUp e3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEMpOkV9LEMudHJhbnNpdGlvbkR1cmF0 aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQyk6VH0s Q30sZS5tb2RlbHMubXVsdGlDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQz0KKGUpe3JldHVy biBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHU9M0RkMy5zZWxlY3QodGhpcyksZj0zRHRoaXM7Qy51 cGRhdGU9M0RmPQp1bmN0aW9uKCl7dS5jYWxsKEMpfSxDLmNvbnRhaW5lcj0zRHRoaXM7dmFyIGs9 M0Qocnx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGg9CiIpKXx8OTYwKS10LmxlZnQtdC5yaWdodCxM PTNEKGl8fHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS10LnRvcC10Lj0KYm90dG9t LEE9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNE ImxpbmUiJiZlLnlBPQp4aXM9M0Q9M0QxfSksTz0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSI9CiYmZS55QXhpcz0zRD0zRDJ9KSxNPTNE ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0zRD0zRD0KImJh ciImJmUueUF4aXM9M0Q9M0QxfSksXz0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRp c2FibGVkJiZlLnR5cGU9Cj0zRD0zRCJiYXIiJiZlLnlBeGlzPTNEPTNEMn0pLEQ9M0RlLmZpbHRl cihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZT0KLnR5cGU9M0Q9M0QiYXJlYSImJmUu eUF4aXM9M0Q9M0QxfSksUD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FiPQps ZWQmJmUudHlwZT0zRD0zRCJhcmVhIiYmZS55QXhpcz0zRD0zRDJ9KSxIPTNEZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIWU9Ci5kaXNhYmxlZCYmZS55QXhpcz0zRD0zRDF9KS5tYXAoZnVuY3Rp b24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLD0KdCl7cmV0dXJue3g6ZS54LHk6 ZS55fX0pfSksQj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnlB PQp4aXM9M0Q9M0QyfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm57eDplLng9Cix5OmUueX19KX0pO2EuZG9tYWluKGQzLmV4dGVudChkMy5t ZXJnZShILmNvbmNhdChCKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUueD0KfSkpLnJhbmdlKFswLGtd KTt2YXIgaj0zRHUuc2VsZWN0QWxsKCJnLndyYXAubXVsdGlDaGFydCIpLmRhdGEoW2VdKSxGPTNE ai5lPQpudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ3cmFwIG52ZDMgbXVsdGlDaGFy dCIpLmFwcGVuZCgiZyIpO0YuYXBwZW49CmQoImciKS5hdHRyKCJjbGFzcyIsInggYXhpcyIpLEYu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ5MSBheGlzIiksRi5hcHBlbj0KZCgiZyIpLmF0dHIo ImNsYXNzIiwieTIgYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lczFXcmFw IiksRi5hPQpwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZXMyV3JhcCIpLEYuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJiYXJzMVdyYXA9CiIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJiYXJzMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhYz0KazFXcmFwIiks Ri5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YWNrMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzPQoiLCJsZWdlbmRXcmFwIik7dmFyIEk9M0RqLnNlbGVjdCgiZyIpO3MmJih4Lndp ZHRoKGsvMiksSS5zZWxlY3QoIi5sZWdlbmRXcmE9CnAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihl KXtyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2luYWxLZXk9M0Q9M0Q9M0R1bj0KZGVmaW5l ZD9lLmtleTplLm9yaWdpbmFsS2V5LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS55QXhpcz0zRD0z RDE/IiI6IiAocmlnPQpodCBheGlzKSIpLGV9KSkuY2FsbCh4KSx0LnRvcCE9M0R4LmhlaWdodCgp JiYodC50b3A9M0R4LmhlaWdodCgpLEw9M0QoaXx8cGE9CnJzZUludCh1LnN0eWxlKCJoZWlnaHQi KSl8fDQwMCktdC50b3AtdC5ib3R0b20pLEkuc2VsZWN0KCIubGVnZW5kV3JhcCIpLmF0dD0Kcigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKCIray8yKyIsIisgLXQudG9wKyIpIikpLGQud2lkdGgoayku aGVpZ2h0KEwpLmludGVyPQpwb2xhdGUoIm1vbm90b25lIikuY29sb3IoZS5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX09CikuZmlsdGVyKGZ1bmN0aW9uKHQs bil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QxJiZlW25dLnR5cGU9Cj0z RD0zRCJsaW5lIn0pKSx2LndpZHRoKGspLmhlaWdodChMKS5pbnRlcnBvbGF0ZSgibW9ub3RvbmUi KS5jb2xvcihlLm1hcChmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0 aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuPQpdLmRpc2FibGVkJiZlW25dLnlB eGlzPTNEPTNEMiYmZVtuXS50eXBlPTNEPTNEImxpbmUifSkpLG0ud2lkdGgoaykuaGVpZ2h0KEw9 CikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3Ro XX0pLmZpbHRlcihmdW5jdGlvbj0KKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4 aXM9M0Q9M0QxJiZlW25dLnR5cGU9M0Q9M0QiYmFyIn0pKSxnLndpPQpkdGgoaykuaGVpZ2h0KEwp LmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19 KS49CmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlz PTNEPTNEMiYmZVtuXS50eXBlPTNEPQo9M0QiYmFyIn0pKSx5LndpZHRoKGspLmhlaWdodChMKS5j b2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHw9Cm5bdCVuLmxlbmd0aF19 KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0z RD0zRD0KMSYmZVtuXS50eXBlPTNEPTNEImFyZWEifSkpLGIud2lkdGgoaykuaGVpZ2h0KEwpLmNv bG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7PQpyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0p LmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiY9CmVbbl0ueUF4aXM9 M0Q9M0QyJiZlW25dLnR5cGU9M0Q9M0QiYXJlYSJ9KSksSS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIj0KK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgcT0zREkuc2VsZWN0KCIubGluZXMx V3JhcCIpLmRhdHVtKEEpLFI9M0RJLnNlbGVjPQp0KCIuYmFyczFXcmFwIikuZGF0dW0oTSksVT0z REkuc2VsZWN0KCIuc3RhY2sxV3JhcCIpLmRhdHVtKEQpLHo9M0RJLnNlbGVjdCg9CiIubGluZXMy V3JhcCIpLmRhdHVtKE8pLFc9M0RJLnNlbGVjdCgiLmJhcnMyV3JhcCIpLmRhdHVtKF8pLFg9M0RJ LnNlbGVjdCgiLj0Kc3RhY2syV3JhcCIpLmRhdHVtKFApLFY9M0RELmxlbmd0aD9ELm1hcChmdW5j dGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5yZWR1PQpjZShmdW5jdGlvbihlLHQpe3JldHVybiBl Lm1hcChmdW5jdGlvbihlLG4pe3JldHVybnt4OmUueCx5OmUueSt0W25dLnl9fSl9KS49CmNvbmNh dChbe3g6MCx5OjB9XSk6W10sJD0zRFAubGVuZ3RoP1AubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBl LnZhbHVlc30pLnJlZD0KdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUs bil7cmV0dXJue3g6ZS54LHk6ZS55K3Rbbl0ueX19KX0pPQouY29uY2F0KFt7eDowLHk6MH1dKTpb XTtoLmRvbWFpbihsfHxkMy5leHRlbnQoZDMubWVyZ2UoSCkuY29uY2F0KFYpLGZ1bmN0aW89Cm4o ZSl7cmV0dXJuIGUueX0pKS5yYW5nZShbMCxMXSkscC5kb21haW4oY3x8ZDMuZXh0ZW50KGQzLm1l cmdlKEIpLmNvbmNhdCgkKT0KLGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9KSkucmFuZ2UoWzAsTF0p LGQueURvbWFpbihoLmRvbWFpbigpKSxtLnlEb21haW4oaC5kPQpvbWFpbigpKSx5LnlEb21haW4o aC5kb21haW4oKSksdi55RG9tYWluKHAuZG9tYWluKCkpLGcueURvbWFpbihwLmRvbWFpbigpKSw9 CmIueURvbWFpbihwLmRvbWFpbigpKSxELmxlbmd0aCYmZDMudHJhbnNpdGlvbihVKS5jYWxsKHkp LFAubGVuZ3RoJiZkMy50cmFucz0KaXRpb24oWCkuY2FsbChiKSxNLmxlbmd0aCYmZDMudHJhbnNp dGlvbihSKS5jYWxsKG0pLF8ubGVuZ3RoJiZkMy50cmFuc2l0aW9uPQooVykuY2FsbChnKSxBLmxl bmd0aCYmZDMudHJhbnNpdGlvbihxKS5jYWxsKGQpLE8ubGVuZ3RoJiZkMy50cmFuc2l0aW9uKHop LmM9CmFsbCh2KSx3LnRpY2tzKGsvMTAwKS50aWNrU2l6ZSgtTCwwKSxJLnNlbGVjdCgiLnguYXhp cyIpLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNsYXRlKDAsIitMKyIpIiksZDMudHJhbnNpdGlv bihJLnNlbGVjdCgiLnguYXhpcyIpKS5jYWxsKHcpLEUudGlja3MoTC8zPQo2KS50aWNrU2l6ZSgt aywwKSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0KCIueTEuYXhpcyIpKS5jYWxsKEUpLFMudGlja3Mo TC8zNik9Ci50aWNrU2l6ZSgtaywwKSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0KCIueTIuYXhpcyIp KS5jYWxsKFMpLEkuc2VsZWN0KCIueTIuYT0KeGlzIikuc3R5bGUoIm9wYWNpdHkiLEIubGVuZ3Ro PzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5yYW5nZSgpPQpbMV0rIiwwKSIp LHguZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtDLnVwZGF0ZSgpfSksVC5v bigidG9vbHQ9CmlwU2hvdyIsZnVuY3Rpb24oZSl7byYmTihlLGYucGFyZW50Tm9kZSl9KX0pLEN9 dmFyIHQ9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdD0KdG9tOjUwLGxlZnQ6NjB9LG49M0RkMy5zY2Fs ZS5jYXRlZ29yeTIwKCkucmFuZ2UoKSxyPTNEbnVsbCxpPTNEbnVsbCxzPTNEITAsPQpvPTNEITAs dT0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIg YXQgIit0KyI8L3A9Cj4ifSxhLGYsbCxjLGE9M0RkMy5zY2FsZS5saW5lYXIoKSxoPTNEZDMuc2Nh bGUubGluZWFyKCkscD0zRGQzLnNjYWxlLmxpbmVhcj0KKCksZD0zRGUubW9kZWxzLmxpbmUoKS55 U2NhbGUoaCksdj0zRGUubW9kZWxzLmxpbmUoKS55U2NhbGUocCksbT0zRGUubW9kZWxzPQoubXVs dGlCYXIoKS5zdGFja2VkKCExKS55U2NhbGUoaCksZz0zRGUubW9kZWxzLm11bHRpQmFyKCkuc3Rh Y2tlZCghMSkueVNjYWw9CmUocCkseT0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCkueVNjYWxlKGgp LGI9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpLnlTY2FsZT0KKHApLHc9M0RlLm1vZGVscy5heGlz KCkuc2NhbGUoYSkub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxFPTNEZS5tb2RlPQps cy5heGlzKCkuc2NhbGUoaCkub3JpZW50KCJsZWZ0IiksUz0zRGUubW9kZWxzLmF4aXMoKS5zY2Fs ZShwKS5vcmllbnQoInJpZ2g9CnQiKSx4PTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxU PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcD0KSGlkZSIpLE49M0RmdW5jdGlv bih0LG4pe3ZhciByPTNEdC5wb3NbMF0rKG4ub2Zmc2V0TGVmdHx8MCksaT0zRHQucG9zWzFdKyhu PQoub2Zmc2V0VG9wfHwwKSxzPTNEdy50aWNrRm9ybWF0KCkoZC54KCkodC5wb2ludCx0LnBvaW50 SW5kZXgpKSxvPTNEKHQuc2VyaWU9CnMueUF4aXM9M0Q9M0QyP1M6RSkudGlja0Zvcm1hdCgpKGQu eSgpKHQucG9pbnQsdC5wb2ludEluZGV4KSksYT0zRHUodC5zZXJpZT0Kcy5rZXkscyxvLHQsQyk7 ZS50b29sdGlwLnNob3coW3IsaV0sYSx1bmRlZmluZWQsdW5kZWZpbmVkLG4ub2Zmc2V0UGFyZW50 KX07PQpyZXR1cm4gZC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5j dGlvbihlKXtlLnBvcz0zRFtlLnBvc1s9CjBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29s dGlwU2hvdyhlKX0pLGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dD0KLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dmVyLnRvPQpvbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9z WzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGU9Cil9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLD0KbS5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBv c1swXSt0LmxlPQpmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLG0uZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGk9CnAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhp ZGUoZSl9KSxnLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLD0KZnVuY3Rp b24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBT aG93KGUpfSksZy5kPQppc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rp b24oZSl7VC50b29sdGlwSGlkZShlKX0pLHkuZGlzcGE9CnRjaC5vbigidG9vbHRpcFNob3ciLGZ1 bmN0aW9uKGUpe2lmKCFNYXRoLnJvdW5kKHkueSgpKGUucG9pbnQpKjEwMCkpcmV0dXJuID0Kc2V0 VGltZW91dChmdW5jdGlvbigpe2QzLnNlbGVjdEFsbCgiLnBvaW50LmhvdmVyIikuY2xhc3NlZCgi aG92ZXIiLCExKX0sMCksPQohMTtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50 b3BdLFQudG9vbHRpcFNob3coZSl9KSx5LmRpc3BhdGNoLm89Cm4oInRvb2x0aXBIaWRlIixmdW5j dGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRpcFNob3ciLD0K ZnVuY3Rpb24oZSl7aWYoIU1hdGgucm91bmQoYi55KCkoZS5wb2ludCkqMTAwKSlyZXR1cm4gc2V0 VGltZW91dChmdW5jdGlvbigpPQp7ZDMuc2VsZWN0QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2Vk KCJob3ZlciIsITEpfSwwKSwhMTtlLnBvcz0zRFtlLnBvc1swXSs9CnQubGVmdCxlLnBvc1sxXSt0 LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLGIuZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5j dD0KaW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dmVyLnRvb2x0aXAiLGZ1bmN0aW9uPQooZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9z WzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZC5kaXNwYXRjaC49Cm9uKCJlbGVtZW50TW91 c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLHYuZGlzcGF0Y2gu b24oIj0KZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBv c1swXSt0LmxlZnQsZS5wb3NbMV0rdC50PQpvcF0sVC50b29sdGlwU2hvdyhlKX0pLHYuZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXs9ClQudG9vbHRpcEhp ZGUoZSl9KSxULm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtvJiZlLnRvb2x0aXAuY2xlYW51 cCgpfSksQz0KLmRpc3BhdGNoPTNEVCxDLmxpbmVzMT0zRGQsQy5saW5lczI9M0R2LEMuYmFyczE9 M0RtLEMuYmFyczI9M0RnLEMuc3RhY2sxPTNEPQp5LEMuc3RhY2syPTNEYixDLnhBeGlzPTNEdyxD LnlBeGlzMT0zREUsQy55QXhpczI9M0RTLEMub3B0aW9ucz0zRGUudXRpbHMub3A9CnRpb25zRnVu Yy5iaW5kKEMpLEMueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnZXRY PTNEZSxkLngoZT0KKSxtLngoZSksQyk6Z2V0WH0sQy55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGdldFk9M0RlLGQueShlPQopLG0ueShlKSxDKTpnZXRZfSxDLnlEb21h aW4xPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEM9Cik6bH0s Qy55RG9tYWluMj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxD KTpjfSxDLm1hcmdpbj0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9 M0RlLEMpOnR9LEMud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhyPTNEZSxDKTpyfSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5s ZW5ndGg/KGk9M0RlLEMpOml9LEMuY29sb3I9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obj0zRGUseD0KLmNvbG9yKGUpLEMpOm59LEMuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxDPQopOnN9LEMudG9vbHRpcHM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsQyk6b30sQy50b29sdGk9 CnBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEMp OnV9LEN9LGUubW9kZWxzLm9obD0KY0Jhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChlKXtyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPTNEbi10LmxlZnQtPQp0LnJpZ2h0LHg9M0RyLXQu dG9wLXQuYm90dG9tLFQ9M0RkMy5zZWxlY3QodGhpcyk7cy5kb21haW4oeXx8ZDMuZXh0ZW50KGVb MF09Ci52YWx1ZXMubWFwKHUpLmNvbmNhdChwKSkpLHY/cy5yYW5nZSh3fHxbZyouNS9lWzBdLnZh bHVlcy5sZW5ndGgsZyooZVswXS52YT0KbHVlcy5sZW5ndGgtLjUpL2VbMF0udmFsdWVzLmxlbmd0 aF0pOnMucmFuZ2Uod3x8WzAsZ10pLG8uZG9tYWluKGJ8fFtkMy5taW4oPQplWzBdLnZhbHVlcy5t YXAoaCkuY29uY2F0KGQpKSxkMy5tYXgoZVswXS52YWx1ZXMubWFwKGMpLmNvbmNhdChkKSldKS5y YW5nZSg9CkV8fFt4LDBdKSxzLmRvbWFpbigpWzBdPTNEPTNEPTNEcy5kb21haW4oKVsxXSYmKHMu ZG9tYWluKClbMF0/cy5kb21haW4oW3MuZD0Kb21haW4oKVswXS1zLmRvbWFpbigpWzBdKi4wMSxz LmRvbWFpbigpWzFdK3MuZG9tYWluKClbMV0qLjAxXSk6cy5kb21haW4oWy0xPQosMV0pKSxvLmRv bWFpbigpWzBdPTNEPTNEPTNEby5kb21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4o W28uZG9tYWk9Cm4oKVswXStvLmRvbWFpbigpWzBdKi4wMSxvLmRvbWFpbigpWzFdLW8uZG9tYWlu KClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFdKT0KKTt2YXIgTj0zRGQzLnNlbGVjdCh0aGlzKS5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1vaGxjQmFyIikuZGF0YShbZVswXS52YWx1PQplc10pLEM9 M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtb2hs Y0JhciIpLGs9M0Q9CkMuYXBwZW5kKCJkZWZzIiksTD0zREMuYXBwZW5kKCJnIiksQT0zRE4uc2Vs ZWN0KCJnIik7TC5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtdGlja3MiKSxOLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxULm9uPQooImNs aWNrIixmdW5jdGlvbihlLHQpe1MuY2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2 ZW50LGlkOml9KX0pLGs9Ci5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1jaGFydC1j bGlwLXBhdGgtIitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbD0KZWN0KCIjbnYtY2hhcnQtY2xpcC1w YXRoLSIraSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0Iix4KSxBLmF0PQp0 cigiY2xpcC1wYXRoIixtPyJ1cmwoI252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIikiOiIiKTt2YXIg Tz0zRE4uc2VsZWN0KCIubnY9Ci10aWNrcyIpLnNlbGVjdEFsbCgiLm52LXRpY2siKS5kYXRhKGZ1 bmN0aW9uKGUpe3JldHVybiBlfSk7Ty5leGl0KCkucmVtb3ZlKD0KKTt2YXIgTT0zRE8uZW50ZXIo KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3JldHVybihmKGUs PQp0KT5sKGUsdCk/Im52LXRpY2sgbmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZlIikrIiBudi10 aWNrLSIrbisiLSIrdH0pLmF0dHI9CigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0zRGcvZVswXS52 YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCwwbDAsIisobyhmKHQsbj0KKSktbyhjKHQsbikpKSsi bCIrIC1yLzIrIiwwbCIrci8yKyIsMGwwLCIrKG8oaCh0LG4pKS1vKGYodCxuKSkpKyJsMCwiKyhv KGwoPQp0LG4pKS1vKGgodCxuKSkpKyJsIityLzIrIiwwbCIrIC1yLzIrIiwweiJ9KS5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCk9CntyZXR1cm4idHJhbnNsYXRlKCIrcyh1KGUsdCkpKyIs IitvKGMoZSx0KSkrIikifSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odD0KLG4pe2QzLnNlbGVj dCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLFMuZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ6dCxz ZXJpZXM6PQplWzBdLHBvczpbcyh1KHQsbikpLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmll c0luZGV4OjAsZTpkMy5ldmVudH0pfSkub249CigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMu c2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksUy5lbGVtZW50TW91cz0KZW91dCh7cG9p bnQ6dCxzZXJpZXM6ZVswXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9 KS5vbigiY2xpPQpjayIsZnVuY3Rpb24oZSx0KXtTLmVsZW1lbnRDbGljayh7dmFsdWU6YShlLHQp LGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCk9CiksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlk Oml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIsZj0KdW5jdGlv bihlLHQpe1MuZWxlbWVudERibENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9z OltzKHUoZSx0KSksPQpvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQ cm9wYWdhdGlvbigpfSk7Ty5hdHRyKCJjbGFzcyIsZnU9Cm5jdGlvbihlLHQsbil7cmV0dXJuKGYo ZSx0KT5sKGUsdCk/Im52LXRpY2sgbmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZlIikrIj0KIG52 LXRpY2stIituKyItIit0fSksZDMudHJhbnNpdGlvbihPKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuPQoidHJhbnNsYXRlKCIrcyh1KGUsdCkpKyIsIitvKGMoZSx0KSkrIiki fSkuYXR0cigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0zRGc9Ci9lWzBdLnZhbHVlcy5sZW5ndGgq Ljk7cmV0dXJuIm0wLDBsMCwiKyhvKGYodCxuKSktbyhjKHQsbikpKSsibCIrIC1yLzIrIiwwbD0K IityLzIrIiwwbDAsIisobyhoKHQsbikpLW8oZih0LG4pKSkrImwwLCIrKG8obCh0LG4pKS1vKGgo dCxuKSkpKyJsIityLzIrIiwwPQpsIisgLXIvMisiLDB6In0pfSkseH12YXIgdD0zRHt0b3A6MCxy aWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTA9CjAsaT0zRE1hdGguZmxvb3Io TWF0aC5yYW5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMuc2NhbGUubGlu ZT0KYXIoKSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JldHVy biBlLnl9LGY9M0RmdW5jdGlvbihlPQope3JldHVybiBlLm9wZW59LGw9M0RmdW5jdGlvbihlKXty ZXR1cm4gZS5jbG9zZX0sYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmg9CmlnaH0saD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBlLmxvd30scD0zRFtdLGQ9M0RbXSx2PTNEITEsbT0zRCEwLGc9M0RlLnV0 aWxzLj0KZGVmYXVsdENvbG9yKCkseSxiLHcsRSxTPTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2si LCJlbGVtZW50Q2xpY2siLCJlbGVtZW50PQpEYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJl bGVtZW50TW91c2VvdXQiKTtyZXR1cm4geC5kaXNwYXRjaD0zRFMseC5vcHQ9CmlvbnM9M0RlLnV0 aWxzLm9wdGlvbnNGdW5jLmJpbmQoeCkseC54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndD0KaD8odT0zRGUseCk6dX0seC55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGE9M0RlLHgpOmF9LHgub3BlPQpuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGY9M0RlLHgpOmZ9LHguY2xvc2U9M0RmdW5jdGlvbihlKXs9CnJldHVybiBh cmd1bWVudHMubGVuZ3RoPyhsPTNEZSx4KTpsfSx4LmhpZ2g9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLj0KbGVuZ3RoPyhjPTNEZSx4KTpjfSx4Lmxvdz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx4KTpoPQp9LHgubWFyZ2luPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCI9CnVuZGVm aW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQi P2UucmlnaHQ6dC5yaT0KZ2h0LHQuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5PQpwZW9mIGUubGVmdCE9M0QidW5kZWZp bmVkIj9lLmxlZnQ6dC5sZWZ0LHgpOnR9LHgud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBh cmd1bWVudHMubGVuZ3RoPyhuPTNEZSx4KTpufSx4LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZz0KdGg/KHI9M0RlLHgpOnJ9LHgueFNjYWxlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHgpOnN9PQoseC55U2NhbGU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUseCk6b30seC54RG9tYWluPTNEZnU9 Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUseCk6eX0seC55RG9tYWlu PTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUseCk6Yn0seC54 UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyh3PTNEZSx4KTp3 fSx4LnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSx4 KTo9CkV9LHguZm9yY2VYPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9 M0RlLHgpOnB9LHguZm9yY2VZPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZD0zRGUseCk6ZH0seC5wYWREYXRhPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRz Lmxlbmd0aD8odj0zRGUseCk6dn0seC5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHM9Ci5sZW5ndGg/KG09M0RlLHgpOm19LHguY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oZz0zRGUudT0KdGlscy5nZXRDb2xvcih0KSx4KTpnfSx4LmlkPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLHgpPQo6aX0seH0sZS5t b2RlbHMucGllPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBTKGUpe3JldHVybiBlLmVhY2goZnVuY3Rp b24oZSl7ZnU9Cm5jdGlvbiBxKGUpe3ZhciB0PTNEKGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKSo5 MC9NYXRoLlBJLTkwO3JldHVybiB0PjkwP3QtMT0KODA6dH1mdW5jdGlvbiBSKGUpe2UuZW5kQW5n bGU9M0Rpc05hTihlLmVuZEFuZ2xlKT8wOmUuZW5kQW5nbGUsZS5zdGFydEFuZ2xlPQo9M0Rpc05h TihlLnN0YXJ0QW5nbGUpPzA6ZS5zdGFydEFuZ2xlLG18fChlLmlubmVyUmFkaXVzPTNEMCk7dmFy IHQ9M0RkMy5pbnQ9CmVycG9sYXRlKHRoaXMuX2N1cnJlbnQsZSk7cmV0dXJuIHRoaXMuX2N1cnJl bnQ9M0R0KDApLGZ1bmN0aW9uKGUpe3JldHVybiBBKD0KdChlKSl9fWZ1bmN0aW9uIFUoZSl7ZS5p bm5lclJhZGl1cz0zRDA7dmFyIHQ9M0RkMy5pbnRlcnBvbGF0ZSh7c3RhcnRBbmdsZTowPQosZW5k QW5nbGU6MH0sZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBKHQoZSkpfX12YXIgbz0zRG4t dC5sZWZ0LXQucmlnaHQ9CixmPTNEci10LnRvcC10LmJvdHRvbSxTPTNETWF0aC5taW4obyxmKS8y LHg9M0RTLVMvNSxUPTNEZDMuc2VsZWN0KHRoaXMpLE49Cj0zRFQuc2VsZWN0QWxsKCIubnYtd3Jh cC5udi1waWUiKS5kYXRhKGUpLEM9M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiYz0KbGFz cyIsIm52ZDMgbnYtd3JhcCBudi1waWUgbnYtY2hhcnQtIit1KSxrPTNEQy5hcHBlbmQoImciKSxM PTNETi5zZWxlY3QoImciPQopO2suYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1waWUiKSxr LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcGllTGE9CmJlbHMiKSxOLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxMLnNlbGVjdCgiLm52LT0K cGllIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby8yKyIsIitmLzIrIikiKSxMLnNl bGVjdCgiLm52LXBpZUxhYmVsPQpzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby8y KyIsIitmLzIrIikiKSxULm9uKCJjbGljayIsZnVuY3Rpb24oZSw9CnQpe0UuY2hhcnRDbGljayh7 ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KX0pO3ZhciBBPTNEZDMuc3ZnLmFyYygp Lj0Kb3V0ZXJSYWRpdXMoeCk7eSYmQS5zdGFydEFuZ2xlKHkpLGImJkEuZW5kQW5nbGUoYiksbSYm QS5pbm5lclJhZGl1cyhTKncpO3ZhPQpyIE89M0RkMy5sYXlvdXQucGllKCkuc29ydChudWxsKS52 YWx1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD8wOnMoZSk9Cn0pLE09M0ROLnNlbGVj dCgiLm52LXBpZSIpLnNlbGVjdEFsbCgiLm52LXNsaWNlIikuZGF0YShPKSxfPTNETi5zZWxlY3Qo Ii5udj0KLXBpZUxhYmVscyIpLnNlbGVjdEFsbCgiLm52LWxhYmVsIikuZGF0YShPKTtNLmV4aXQo KS5yZW1vdmUoKSxfLmV4aXQoKS5yZW1vPQp2ZSgpO3ZhciBEPTNETS5lbnRlcigpLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtc2xpY2UiKS5vbigibW91c2VvdmVyIiw9CmZ1bmN0aW9uKGUs dCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCksRS5lbGVtZW50TW91c2VvdmVy KHtsYWJlbD0KOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLHBvaW50SW5k ZXg6dCxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzPQouZXZlbnQucGFnZVldLGlkOnV9KX0pLm9uKCJt b3VzZW91dCIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCg9CiJob3ZlciIs ITEpLEUuZWxlbWVudE1vdXNlb3V0KHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBv aW50OmUuZGF0YT0KLGluZGV4OnQsaWQ6dX0pfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe0Uu ZWxlbWVudENsaWNrKHtsYWJlbDppKGUuZGF0YSksPQp2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5k YXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGE9CmdhdGlv bigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbihlLHQpe0UuZWxlbWVudERibENsaWNrKHtsYWJl bDppKGUuZGF0YSksdj0KYWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLGluZGV4OnQscG9zOmQz LmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGFnPQphdGlvbigpfSk7TS5hdHRyKCJmaWxs IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCl9KS5hdHRyKCJzdHJva2UiLGZ1bmN0aW89Cm4o ZSx0KXtyZXR1cm4gYShlLHQpfSk7dmFyIFA9M0RELmFwcGVuZCgicGF0aCIpLmVhY2goZnVuY3Rp b24oZSl7dGhpcy5fY3Vycj0KZW50PTNEZX0pO00uc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQSk7 aWYobCl7dmFyIEg9M0RkMy5zdmcuYXJjKCkuaW5uZXJSYWRpPQp1cygwKTtjJiYoSD0zREEpLGgm JihIPTNEZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKEEub3V0ZXJSYWRpdXMoKSkpLF8uZW50ZXI9 CigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm52LWxhYmVsIiwhMCkuZWFjaChmdW5jdGlvbihlLHQp e3ZhciBuPTNEZDMuc2VsZWN0KD0KdGhpcyk7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUp e2lmKGcpe2Uub3V0ZXJSYWRpdXM9M0R4KzEwLGUuaW5uZXJSYWRpPQp1cz0zRHgrMTU7dmFyIHQ9 M0QoZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzIqKDE4MC9NYXRoLlBJKTtyZXR1cm4oZS5zdGFy dEE9Cm5nbGUrZS5lbmRBbmdsZSkvMjxNYXRoLlBJP3QtPTNEOTA6dCs9M0Q5MCwidHJhbnNsYXRl KCIrSC5jZW50cm9pZChlKSsiKSBybz0KdGF0ZSgiK3QrIikifXJldHVybiBlLm91dGVyUmFkaXVz PTNEUysxMCxlLmlubmVyUmFkaXVzPTNEUysxNSwidHJhbnNsYXRlKCIrPQpILmNlbnRyb2lkKGUp KyIpIn0pLG4uYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsIiNmZmYiKS5zdHlsZSgiZmls bCIsIiM9CmZmZiIpLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMyksbi5hcHBlbmQoInRleHQiKS5z dHlsZSgidGV4dC1hbmNob3IiLGc/KGUucz0KdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0aC5Q ST8ic3RhcnQiOiJlbmQiOiJtaWRkbGUiKS5zdHlsZSgiZmlsbCIsIiMwMDAiPQopfSk7dmFyIEI9 M0R7fSxqPTNEMTQsRj0zRDE0MCxJPTNEZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZVsw XS9GKSpGKyI9CiwiK01hdGguZmxvb3IoZVsxXS9qKSpqfTtfLmF0dHIoInRyYW5zZm9ybSIsZnVu Y3Rpb24oZSl7aWYoZyl7ZS5vdXRlclJhZGl1cz0KPTNEeCsxMCxlLmlubmVyUmFkaXVzPTNEeCsx NTt2YXIgdD0zRChlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMiooMTgwL01hdGguPQpQSSk7cmV0 dXJuKGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yPE1hdGguUEk/dC09M0Q5MDp0Kz0zRDkwLCJ0 cmFuc2xhdGUoIis9CkguY2VudHJvaWQoZSkrIikgcm90YXRlKCIrdCsiKSJ9ZS5vdXRlclJhZGl1 cz0zRFMrMTAsZS5pbm5lclJhZGl1cz0zRFMrMTU7dj0KYXIgbj0zREguY2VudHJvaWQoZSkscj0z REkobik7cmV0dXJuIEJbcl0mJihuWzFdLT0zRGopLEJbSShuKV09M0QhMCwidHJhbnNsPQphdGUo IituKyIpIn0pLF8uc2VsZWN0KCIubnYtbGFiZWwgdGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIs Zz8oZC5zdGFydEFuZ2w9CmUrZC5lbmRBbmdsZSkvMjxNYXRoLlBJPyJzdGFydCI6ImVuZCI6Im1p ZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRD0KKGUuZW5kQW5nbGUtZS5zdGFydEFu Z2xlKS8oMipNYXRoLlBJKSxyPTNEe2tleTppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBlPQpy Y2VudDpkMy5mb3JtYXQoIiUiKShuKX07cmV0dXJuIGUudmFsdWUmJm4+dj9yW3BdOiIifSl9fSks U312YXIgdD0zRHt0b3A6MCw9CnJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNENTAwLHI9M0Q1 MDAsaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHM9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBl Lnl9LG89M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXNjcmlwdGlvbn0sdT0zRE1hdGguZmxvb3Io PQpNYXRoLnJhbmRvbSgpKjFlNCksYT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksZj0zRGQzLmZv cm1hdCgiLC4yZiIpLGw9M0QhMCw9CmM9M0QhMCxoPTNEITEscD0zRCJrZXkiLHY9M0QuMDIsbT0z RCExLGc9M0QhMSx5PTNEITEsYj0zRCExLHc9M0QuNSxFPTNEZDMuZD0KaXNwYXRjaCgiY2hhcnRD bGljayIsImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIi LCJlPQpsZW1lbnRNb3VzZW91dCIpO3JldHVybiBTLmRpc3BhdGNoPTNERSxTLm9wdGlvbnM9M0Rl LnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQ9CihTKSxTLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9Cj0zRCJ1bmRlZmluZWQi P2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJp Z2h0Oj0KdC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9l LmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ ZS5sZWZ0OnQubGVmdCxTKTp0fSxTLndpZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obj0zRGUsUyk6bn0sUy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzPQoubGVuZ3RoPyhyPTNEZSxTKTpyfSxTLnZhbHVlcz0zRGZ1bmN0aW9uKHQpe3JldHVy biBlLmxvZygicGllLnZhbHVlcygpIGlzIG49Cm8gbG9uZ2VyIHN1cHBvcnRlZC4iKSxTfSxTLng9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsUz0KKTppfSxTLnk9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGQzLmZ1bmN0b3IoZSks Uyk6c30sUy5kPQplc2NyaXB0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KG89M0RlLFMpOm99LFMuc2hvd0xhYmVscz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGw9M0RlLFMpOmx9LFMubGFiZWxTdW5iZWFtTGF5b3V0PTNEPQpmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsUyk6Z30sUy5kb251dExhYmVsc091 dHNpZGU9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxTKTpo fSxTLnBpZUxhYmVsc091dHNpZGU9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhjPTNEZSxTKTpjfSxTLmxhYmVsVHlwZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3Vt ZW50cy5sZW5ndGg/KHA9M0RlLHA9M0RwfHwia2V5IixTKTpwfSxTLmRvbnV0PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8obT0zRGUsUyk6bX0sUy5kb251dFJhdGlvPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8odz0zRGUsUyk6d30sUy5zdGFy dEFuZ2xlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLFMpPQo6 eX0sUy5lbmRBbmdsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNE ZSxTKTpifSxTLmlkPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0z RGUsUyk6dX0sUy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/ KGE9M0RlLnV0aWxzLmdldENvbG9yKHQpLFMpOmF9LFMudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihl PQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxTKTpmfSxTLmxhYmVsVGhyZXNob2xk PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsUyk6dn0sU30s ZS5tb2RlbHMucGllQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uID0KdihlKXtyZXR1cm4gZS5l YWNoKGZ1bmN0aW9uKGUpe3ZhciB1PTNEZDMuc2VsZWN0KHRoaXMpLGE9M0R0aGlzLGY9M0QoaXx8 cGFyPQpzZUludCh1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1yLmxlZnQtci5yaWdodCxkPTNEKHN8 fHBhcnNlSW50KHUuc3R5bGUoImhlaWc9Cmh0IikpfHw0MDApLXIudG9wLXIuYm90dG9tO3YudXBk YXRlPTNEZnVuY3Rpb24oKXt1LmNhbGwodil9LHYuY29udGFpbmVyPTNEdD0KaGlzLGwuZGlzYWJs ZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighYyl7dmFyIG07 Yz0zRHt9PQo7Zm9yKG0gaW4gbClsW21daW5zdGFuY2VvZiBBcnJheT9jW21dPTNEbFttXS5zbGlj ZSgwKTpjW21dPTNEbFttXX1pZighZXx8IWU9Ci5sZW5ndGgpe3ZhciBnPTNEdS5zZWxlY3RBbGwo Ii5udi1ub0RhdGEiKS5kYXRhKFtoXSk7cmV0dXJuIGcuZW50ZXIoKS5hcHBlbj0KZCgidGV4dCIp LmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUo InRleHQtYW5jPQpob3IiLCJtaWRkbGUiKSxnLmF0dHIoIngiLHIubGVmdCtmLzIpLmF0dHIoInki LHIudG9wK2QvMikudGV4dChmdW5jdGlvbihlKXs9CnJldHVybiBlfSksdn11LnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciB5PTNEdS5zZWxlY3RBbGwoImcubnYtdz0KcmFwLm52 LXBpZUNoYXJ0IikuZGF0YShbZV0pLGI9M0R5LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52PQotd3JhcCBudi1waWVDaGFydCIpLmFwcGVuZCgiZyIpLHc9M0R5LnNlbGVj dCgiZyIpO2IuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsIm52LXBpZVdyYXAiKSxiLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLG8mJihuLndpZHRoKGYpLj0Ka2V5 KHQueCgpKSx5LnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKG4pLHIudG9w IT0zRG4uaGVpZ2h0KCkmPQomKHIudG9wPTNEbi5oZWlnaHQoKSxkPTNEKHN8fHBhcnNlSW50KHUu c3R5bGUoImhlaWdodCIpKXx8NDAwKS1yLnRvcC1yLmJvdHQ9Cm9tKSx5LnNlbGVjdCgiLm52LWxl Z2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtci50b3ArIikiKT0K KSx5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3IubGVmdCsiLCIrci50b3ArIikiKSx0 LndpZHRoKGYpLmhlaWdodChkPQopO3ZhciBFPTNEdy5zZWxlY3QoIi5udi1waWVXcmFwIikuZGF0 dW0oW2VdKTtkMy50cmFuc2l0aW9uKEUpLmNhbGwodCksbi5kaXM9CnBhdGNoLm9uKCJzdGF0ZUNo YW5nZSIsZnVuY3Rpb24oZSl7bD0zRGUscC5zdGF0ZUNoYW5nZShsKSx2LnVwZGF0ZSgpfSksdC5k aT0Kc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7cC50b29s dGlwSGlkZShlKX0pLHAub24oImNoPQphbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRp c2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW89Cm4oZSxuKXtlLmRpc2Fi bGVkPTNEdC5kaXNhYmxlZFtuXX0pLGwuZGlzYWJsZWQ9M0R0LmRpc2FibGVkKSx2LnVwZGF0ZSgp fSl9KT0KLHZ9dmFyIHQ9M0RlLm1vZGVscy5waWUoKSxuPTNEZS5tb2RlbHMubGVnZW5kKCkscj0z RHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tPQo6MjAsbGVmdDoyMH0saT0zRG51bGwscz0zRG51bGws bz0zRCEwLHU9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGE9M0QhMCxmPQo9M0RmdW5jdGlvbihl LHQsbixyKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK3QrIjwvcD4ifSxsPTNEe30sYz0z RG51bGw9CixoPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIscD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlw U2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdD0KZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksZD0zRGZ1 bmN0aW9uKG4scil7dmFyIGk9M0R0LmRlc2NyaXB0aW9uKCkobi5wb2ludCl8PQp8dC54KCkobi5w b2ludCkscz0zRG4ucG9zWzBdKyhyJiZyLm9mZnNldExlZnR8fDApLG89M0RuLnBvc1sxXSsociYm ci5vZmZzZXQ9ClRvcHx8MCksdT0zRHQudmFsdWVGb3JtYXQoKSh0LnkoKShuLnBvaW50KSksYT0z RGYoaSx1LG4sdik7ZS50b29sdGlwLnNob3coWz0KcyxvXSxhLG4udmFsdWU8MD8ibiI6InMiLG51 bGwscil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvPQpvbHRpcCIs ZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rci5sZWZ0LGUucG9zWzFdK3IudG9wXSxwLnRv b2x0aXBTaG93KGU9Cil9KSxwLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7YSYmZChlKX0p LHAub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpez0KYSYmZS50b29sdGlwLmNsZWFudXAoKX0p LHYubGVnZW5kPTNEbix2LmRpc3BhdGNoPTNEcCx2LnBpZT0zRHQsZDMucmViaW5kKHYsPQp0LCJ2 YWx1ZUZvcm1hdCIsInZhbHVlcyIsIngiLCJ5IiwiZGVzY3JpcHRpb24iLCJpZCIsInNob3dMYWJl bHMiLCJkb251dExhYmU9CmxzT3V0c2lkZSIsInBpZUxhYmVsc091dHNpZGUiLCJsYWJlbFR5cGUi LCJkb251dCIsImRvbnV0UmF0aW8iLCJsYWJlbFRocmVzaD0Kb2xkIiksdi5vcHRpb25zPTNEZS51 dGlscy5vcHRpb25zRnVuYy5iaW5kKHYpLHYubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQog YXJndW1lbnRzLmxlbmd0aD8oci50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50 b3A6ci50b3Asci5yaWdodD0KPTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdo dDpyLnJpZ2h0LHIuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tPQohPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206ci5ib3R0b20sci5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmw9 CmVmdDpyLmxlZnQsdik6cn0sdi53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhpPTNEZSx2KTppfT0KLHYuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHM9M0RlLHYpOnN9LHYuY29sb3I9M0RmdW5jPQp0aW9uKHIpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh1PTNEZS51dGlscy5nZXRDb2xvcihyKSxuLmNvbG9yKHUpLHQuY29s b3I9Cih1KSx2KTp1fSx2LnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obz0zRGUsdik6b30sdj0KLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGE9M0RlLHYpOmF9LHYudG9vbHRpcENvbnRlPQpudD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSx2KTpmfSx2LnN0YXRlPTNEZnVuY3Rp b24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsdik6bH0sdi5kZWZhdWx0U3Rh dGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx2KTpjfSx2 Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KGg9M0RlLHYp Omh9LHZ9LGUubW9kZWxzLnNjYXR0ZXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEkocSl7cmV0dXJu IHEuZWFjaCg9CmZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFEoKXtpZighZylyZXR1cm4hMTt2YXIgZSxp PTNEZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24oZT0KLHQpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVu Y3Rpb24oZSxuKXt2YXIgcj0zRGYoZSxuKSxpPTNEbChlLG4pO3JldHVybltvKHIpPQosdShpKSx0 LG4sZV19KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYihlWzRdLHQpfSl9KSk7aWYoRD0z RD0zRD0zRCEwKXs9CmlmKHgpe3ZhciBhPTNEWC5zZWxlY3QoImRlZnMiKS5zZWxlY3RBbGwoIi5u di1wb2ludC1jbGlwcyIpLmRhdGEoW3NdKS5lbnRlcj0KKCk7YS5hcHBlbmQoImNsaXBQYXRoIiku YXR0cigiY2xhc3MiLCJudi1wb2ludC1jbGlwcyIpLmF0dHIoImlkIiwibnYtcG9pbnRzPQotY2xp cC0iK3MpO3ZhciBjPTNEWC5zZWxlY3QoIiNudi1wb2ludHMtY2xpcC0iK3MpLnNlbGVjdEFsbCgi Y2lyY2xlIikuZGF0YSg9CmkpO2MuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLFQp LGMuZXhpdCgpLnJlbW92ZSgpLGMuYXR0cigiY3giLGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGVbMF19 KS5hdHRyKCJjeSIsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19KSxYLnNlbGVjdCgiLm52LXBvPQpp bnQtcGF0aHMiKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI252LXBvaW50cy1jbGlwLSIrcysiKSIp fWkubGVuZ3RoJiYoaS5wdXM9CmgoW28ucmFuZ2UoKVswXS0yMCx1LnJhbmdlKClbMF0tMjAsbnVs bCxudWxsXSksaS5wdXNoKFtvLnJhbmdlKClbMV0rMjAsdS5yYT0KbmdlKClbMV0rMjAsbnVsbCxu dWxsXSksaS5wdXNoKFtvLnJhbmdlKClbMF0tMjAsdS5yYW5nZSgpWzBdKzIwLG51bGwsbnVsbF0p PQosaS5wdXNoKFtvLnJhbmdlKClbMV0rMjAsdS5yYW5nZSgpWzFdLTIwLG51bGwsbnVsbF0pKTt2 YXIgaD0zRGQzLmdlb20ucG9seWc9Cm9uKFtbLTEwLC0xMF0sWy0xMCxyKzEwXSxbbisxMCxyKzEw XSxbbisxMCwtMTBdXSkscD0zRDFlLTY7aT0zRGkuc29ydChmdW5jdD0KaW9uKGUsdCl7cmV0dXJu IGVbMF0tdFswXXx8ZVsxXS10WzFdfSk7Zm9yKHZhciBkPTNEMDtkPGkubGVuZ3RoLTE7KU1hdGgu YWJzPQooaVtkXVswXS1pW2QrMV1bMF0pPHAmJk1hdGguYWJzKGlbZF1bMV0taVtkKzFdWzFdKTxw P2kuc3BsaWNlKGQrMSwxKTpkKys7dmE9CnIgdj0zRGQzLmdlb20udm9yb25vaShpKS5tYXAoZnVu Y3Rpb24oZSx0KXtyZXR1cm57ZGF0YTpoLmNsaXAoZSksc2VyaWVzOmlbdD0KXVsyXSxwb2ludDpp W3RdWzNdfX0pLG09M0RYLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc2VsZWN0QWxsKCJwYXRo IikuZGF0PQphKHYpO20uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rp b24oZSx0KXtyZXR1cm4ibnYtcGF0aC0iK3Q9Cn0pLG0uZXhpdCgpLnJlbW92ZSgpLG0uYXR0cigi ZCIsZnVuY3Rpb24oZSl7cmV0dXJuIWV8fCFlLmRhdGF8fGUuZGF0YS5sZW5ndD0KaD0zRD0zRD0z RDA/Ik0gMCAwIjoiTSIrZS5kYXRhLmpvaW4oIkwiKSsiWiJ9KTt2YXIgeT0zRGZ1bmN0aW9uKGUs bil7aWYoRilyPQpldHVybiAwO3ZhciByPTNESVtlLnNlcmllc107aWYodHlwZW9mIHI9M0Q9M0Qi dW5kZWZpbmVkIilyZXR1cm47dmFyIGk9M0RyLnY9CmFsdWVzW2UucG9pbnRdO24oe3BvaW50Omks c2VyaWVzOnIscG9zOltvKGYoaSxlLnBvaW50KSkrdC5sZWZ0LHUobChpLGUucG9pbj0KdCkpK3Qu dG9wXSxzZXJpZXNJbmRleDplLnNlcmllcyxwb2ludEluZGV4OmUucG9pbnR9KX07bS5vbigiY2xp Y2siLGZ1bmN0aW9uPQooZSl7eShlLF8uZWxlbWVudENsaWNrKX0pLm9uKCJtb3VzZW92ZXIiLGZ1 bmN0aW9uKGUpe3koZSxfLmVsZW1lbnRNb3VzZW92ZXI9Cil9KS5vbigibW91c2VvdXQiLGZ1bmN0 aW9uKGUsdCl7eShlLF8uZWxlbWVudE1vdXNlb3V0KX0pfWVsc2UgWC5zZWxlY3QoIi5udj0KLWdy b3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuc2VsZWN0QWxsKCIubnYtcG9pbnQiKS5vbigi Y2xpY2siLGZ1bmN0aW9uPQooZSxuKXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7dmFyIHI9 M0RJW2Uuc2VyaWVzXSxpPTNEci52YWx1ZXNbbl07Xy5lbGU9Cm1lbnRDbGljayh7cG9pbnQ6aSxz ZXJpZXM6cixwb3M6W28oZihpLG4pKSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxzZXJpZXNJbj0K ZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6bn0pfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSxu KXtpZihGfHwhSVtlLnNlcmllPQpzXSlyZXR1cm4gMDt2YXIgcj0zRElbZS5zZXJpZXNdLGk9M0Ry LnZhbHVlc1tuXTtfLmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50Omk9CixzZXJpZXM6cixwb3M6W28o ZihpLG4pKSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxzZXJpZXNJbmRleDplLnNlcmllcyxwb2lu dD0KSW5kZXg6bn0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2lmKEZ8fCFJW2Uuc2Vy aWVzXSlyZXR1cm4gMDt2YXIgbj0KPTNESVtlLnNlcmllc10scj0zRG4udmFsdWVzW3RdO18uZWxl bWVudE1vdXNlb3V0KHtwb2ludDpyLHNlcmllczpuLHNlcmllc0luPQpkZXg6ZS5zZXJpZXMscG9p bnRJbmRleDp0fSl9KTtGPTNEITF9dmFyIHE9M0RuLXQubGVmdC10LnJpZ2h0LFI9M0RyLXQudG9w LXQ9Ci5ib3R0b20sVT0zRGQzLnNlbGVjdCh0aGlzKTtJLmZvckVhY2goZnVuY3Rpb24oZSx0KXtl LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aT0Kb24oZSl7ZS5zZXJpZXM9M0R0fSl9KTt2YXIgVz0zRE4m JkMmJkE/W106ZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuPQogZS52YWx1ZXMubWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZihlLHQpLHk6bChlLHQpLHNpemU6YyhlLHQpfX0pfSkp O28uZG89Cm1haW4oTnx8ZDMuZXh0ZW50KFcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KS5j b25jYXQoZCkpKSx3JiZJWzBdP28ucmFuZz0KZShrfHxbKHEqRStxKS8oMipJWzBdLnZhbHVlcy5s ZW5ndGgpLHEtcSooMStFKS8oMipJWzBdLnZhbHVlcy5sZW5ndGgpXSk6by5yPQphbmdlKGt8fFsw LHFdKSx1LmRvbWFpbihDfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0p LmNvbmNhdCg9CnYpKSkucmFuZ2UoTHx8W1IsMF0pLGEuZG9tYWluKEF8fGQzLmV4dGVudChXLm1h cChmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfT0KKS5jb25jYXQobSkpKS5yYW5nZShPfHxbMTYs MjU2XSk7aWYoby5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClbMV18fHUuPQpkb21haW4o KVswXT0zRD0zRD0zRHUuZG9tYWluKClbMV0pTT0zRCEwO28uZG9tYWluKClbMF09M0Q9M0Q9M0Rv LmRvbWFpbigpWzE9Cl0mJihvLmRvbWFpbigpWzBdP28uZG9tYWluKFtvLmRvbWFpbigpWzBdLW8u ZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClbMV0rbz0KLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9t YWluKFstMSwxXSkpLHUuZG9tYWluKClbMF09M0Q9M0Q9M0R1LmRvbWFpbigpWzFdJiYoPQp1LmRv bWFpbigpWzBdP3UuZG9tYWluKFt1LmRvbWFpbigpWzBdLXUuZG9tYWluKClbMF0qLjAxLHUuZG9t YWluKClbMV0rdS5kb209CmFpbigpWzFdKi4wMV0pOnUuZG9tYWluKFstMSwxXSkpLGlzTmFOKG8u ZG9tYWluKClbMF0pJiZvLmRvbWFpbihbLTEsMV0pLGlzTj0KYU4odS5kb21haW4oKVswXSkmJnUu ZG9tYWluKFstMSwxXSksUD0zRFB8fG8sSD0zREh8fHUsQj0zREJ8fGE7dmFyIFg9M0RVLnNlPQps ZWN0QWxsKCJnLm52LXdyYXAubnYtc2NhdHRlciIpLmRhdGEoW0ldKSxWPTNEWC5lbnRlcigpLmFw cGVuZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudmQzIG52LXdyYXAgbnYtc2NhdHRlciBudi1jaGFy dC0iK3MrKE0/IiBudi1zaW5nbGUtcG9pbnQiOiIiKSksJD0zRD0KVi5hcHBlbmQoImRlZnMiKSxK PTNEVi5hcHBlbmQoImciKSxLPTNEWC5zZWxlY3QoImciKTtKLmFwcGVuZCgiZyIpLmF0dHIoImNs PQphc3MiLCJudi1ncm91cHMiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcG9pbnQt cGF0aHMiKSxYLmF0dHIoInRyYW49CnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRv cCsiKSIpLCQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibj0Kdi1lZGdlLWNsaXAtIitz KS5hcHBlbmQoInJlY3QiKSxYLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3MrIiByZWN0IikuYXR0 cigiPQp3aWR0aCIscSkuYXR0cigiaGVpZ2h0IixSPjA/UjowKSxLLmF0dHIoImNsaXAtcGF0aCIs Uz8idXJsKCNudi1lZGdlLWNsaXAtIis9CnMrIikiOiIiKSxGPTNEITA7dmFyIEc9M0RYLnNlbGVj dCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YT0KKGZ1bmN0aW9uKGUp e3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KTtHLmVudGVyKCkuYXBwZW5kKCJn Iikuc3R5PQpsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFl LTYpLEcuZXhpdCgpLnJlbW92ZSgpLEcuYXQ9CnRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdT0KbmN0aW9uKGUp e3JldHVybiBlLmhvdmVyfSksRy5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShl LHQpfSkuc3R5PQpsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHls ZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCI9CmZpbGwtb3BhY2l0eSIsLjUpO2lmKHApe3Zh ciBZPTNERy5zZWxlY3RBbGwoImNpcmNsZS5udi1wb2ludCIpLmRhdGEoZnVuY3Rpbz0KbihlKXty ZXR1cm4gZS52YWx1ZXN9LHkpO1kuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLnN0eWxlKCJmaWxs IixmdW5jdGlvbihlPQosdCl7cmV0dXJuIGUuY29sb3J9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlv bihlLHQpe3JldHVybiBlLmNvbG9yfSkuYXR0cigiY3g9CiIsZnVuY3Rpb24odCxuKXtyZXR1cm4g ZS51dGlscy5OYU50b1plcm8oUChmKHQsbikpKX0pLmF0dHIoImN5IixmdW5jdGlvbih0LD0Kbil7 cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKEgobCh0LG4pKSl9KS5hdHRyKCJyIixmdW5jdGlvbihl LHQpe3JldHVybiBNYXRoPQouc3FydChhKGMoZSx0KSkvTWF0aC5QSSl9KSxZLmV4aXQoKS5yZW1v dmUoKSxHLmV4aXQoKS5zZWxlY3RBbGwoInBhdGgubnYtcG89CmludCIpLmF0dHIoImN4IixmdW5j dGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKGYodCxuKSkpfSkuYXR0cigiYz0K eSIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odShsKHQsbikpKX0pLnJl bW92ZSgpLFkuZWFjaChmdW5jPQp0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoIm52 LXBvaW50IiwhMCkuY2xhc3NlZCgibnYtcG9pbnQtIit0LCEwKS49CmNsYXNzZWQoImhvdmVyIiwh MSl9KSxZLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhv KD0KZih0LG4pKSl9KS5hdHRyKCJjeSIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50 b1plcm8odShsKHQsbikpKX0pLmF0PQp0cigiciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5z cXJ0KGEoYyhlLHQpKS9NYXRoLlBJKX0pfWVsc2V7dmFyIFk9M0RHLnM9CmVsZWN0QWxsKCJwYXRo Lm52LXBvaW50IikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KTtZLmVudGVyKCku YXBwZT0KbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xv cn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0PQppb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLmF0dHIo InRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCI9CitQKGYoZSx0KSkr IiwiK0gobChlLHQpKSsiKSJ9KS5hdHRyKCJkIixkMy5zdmcuc3ltYm9sKCkudHlwZShoKS5zaXpl KGZ1bmN0aT0Kb24oZSx0KXtyZXR1cm4gYShjKGUsdCkpfSkpLFkuZXhpdCgpLnJlbW92ZSgpLEcu ZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1wPQpvaW50IikuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGYoZSx0KSkrIiwiK3UobCg9CmUsdCkpKyIp In0pLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2Vk KCJudi1wb2ludD0KIiwhMCkuY2xhc3NlZCgibnYtcG9pbnQtIit0LCEwKS5jbGFzc2VkKCJob3Zl ciIsITEpfSksWS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNs YXRlKCIrbyhmKGUsdCkpKyIsIit1KGwoZSx0KSkrIikifSkuYXR0cigiZCIsZDMuc3Y9Cmcuc3lt Ym9sKCkudHlwZShoKS5zaXplKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoYyhlLHQpKX0pKX1jbGVh clRpbWVvdXQoaiksaj0KPTNEc2V0VGltZW91dChRLDMwMCksUD0zRG8uY29weSgpLEg9M0R1LmNv cHkoKSxCPTNEYS5jb3B5KCl9KSxJfXZhciB0PTNEe3RvPQpwOjAscmlnaHQ6MCxib3R0b206MCxs ZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxzPQo9M0RN YXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU1KSxvPTNEZDMuc2NhbGUubGluZWFyKCksdT0zRGQz LnNjYWxlLmxpbmVhcig9CiksYT0zRGQzLnNjYWxlLmxpbmVhcigpLGY9M0RmdW5jdGlvbihlKXty ZXR1cm4gZS54fSxsPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KZS55fSxjPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUuc2l6ZXx8MX0saD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnNoYXBlfHwiY2lyPQpj bGUifSxwPTNEITAsZD0zRFtdLHY9M0RbXSxtPTNEW10sZz0zRCEwLHk9M0RudWxsLGI9M0RmdW5j dGlvbihlKXtyZXR1cm4hZS49Cm5vdEFjdGl2ZX0sdz0zRCExLEU9M0QuMSxTPTNEITEseD0zRCEw LFQ9M0RmdW5jdGlvbigpe3JldHVybiAyNX0sTj0zRG51bGwsQz0KPTNEbnVsbCxrPTNEbnVsbCxM PTNEbnVsbCxBPTNEbnVsbCxPPTNEbnVsbCxNPTNEITEsXz0zRGQzLmRpc3BhdGNoKCJlbGVtZW50 PQpDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxEPTNEITAsUCxI LEIsaixGPTNEITE7cmV0dXJuIEk9Ci5jbGVhckhpZ2hsaWdodHM9M0RmdW5jdGlvbigpe2QzLnNl bGVjdEFsbCgiLm52LWNoYXJ0LSIrcysiIC5udi1wb2ludC5ob3Zlcj0KIikuY2xhc3NlZCgiaG92 ZXIiLCExKX0sSS5oaWdobGlnaHRQb2ludD0zRGZ1bmN0aW9uKGUsdCxuKXtkMy5zZWxlY3QoIi5u di1jPQpoYXJ0LSIrcysiIC5udi1zZXJpZXMtIitlKyIgLm52LXBvaW50LSIrdCkuY2xhc3NlZCgi aG92ZXIiLG4pfSxfLm9uKCJlbGVtZW49CnRNb3VzZW92ZXIucG9pbnQiLGZ1bmN0aW9uKGUpe2cm JkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpZXNJbmRleCxlLnBvaW50SW5kZT0KeCwhMCl9KSxfLm9u KCJlbGVtZW50TW91c2VvdXQucG9pbnQiLGZ1bmN0aW9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQo ZS5zZXJpPQplc0luZGV4LGUucG9pbnRJbmRleCwhMSl9KSxJLmRpc3BhdGNoPTNEXyxJLm9wdGlv bnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmI9CmluZChJKSxJLng9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGQzLmZ1bmN0b3IoZSksSSk6Zn0sST0KLnk9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGQzLmZ1bmN0b3IoZSksSSk6bH0s SS5zaXplPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGQzLmZ1 bmN0b3IoZSksSSk6Y30sSS5tYXJnaW49M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcD0KOnQudG9w LHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQs dC5ib3R0b209M0R0PQp5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJv dHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCI9CnVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVm dCxJKTp0fSxJLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8o bj0zRGUsSSk6bn0sSS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocj0zRGUsSSk6cn0sPQpJLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhvPTNEZSxJKTpvfSxJLnlTY2FsZT0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHU9M0RlLEkpOnV9LEkuelNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0K YXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsSSk6YX0sSS54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8oTj0zRGUsSSk6Tn0sSS55RG9tYWluPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0RlLEkpOkM9Cn0sSS5zaXplRG9tYWluPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEkpOkF9LEkueFJhbmdl PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsSSk6a30sSS55 UmFuZ2U9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxJKTpM fSxJLnNpemVSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5sZW5ndGg/KE89 M0RlLEkpOk99LEkuZm9yY2VYPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGQ9Cj0zRGUsSSk6ZH0sSS5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odj0zRGUsSSk6dn0sSS5mbz0KcmNlU2l6ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhtPTNEZSxJKTptfSxJLmludGVyYWN0aXZlPTNEPQpmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsSSk6Z30sSS5wb2ludEtleT0zRGZ1bmN0aW9u KGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEkpOnl9LEkucG9pbnRBY3RpdmU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3RoPyhiPTNEZSxJKTpifSxJLnBh ZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQp3PTNEZSxJKTp3 fSxJLnBhZERhdGFPdXRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhF PTNEZSxJKTo9CkV9LEkuY2xpcEVkZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oUz0zRGUsSSk6U30sSS5jbGlwVm9ybz0Kbm9pPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHg9M0RlLEkpOnh9LEkudXNlVm9yb25vaT0zRGZ1bmN0PQppb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9M0RlLEQ9M0Q9M0Q9M0QhMSYmKHg9M0QhMSksSSk6 RH0sSS5jbGlwUmE9CmRpdXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o VD0zRGUsSSk6VH0sSS5jb2xvcj0zRGZ1bmN0aW9uKD0KdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLEkpOml9LEkuc2hhcGU9M0RmdW5jdGlvPQpuKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxJKTpofSxJLm9ubHlDaXJjbGVzPTNEZnVu Y3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsSSk6cH0sSS5pZD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKHM9M0RlLEkpOnN9LEkuc2luZ2xl UG9pbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0zRGUsSSk6PQpN fSxJfSxlLm1vZGVscy5zY2F0dGVyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEYoZSl7cmV0 dXJuIGUuZWFjaChmdW5jdGk9Cm9uKGUpe2Z1bmN0aW9uIEooKXtpZihUKXJldHVybiBXLnNlbGVj dCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZT0KdmVudHMiLCJhbGwiKSwhMTtX LnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIp PQo7dmFyIGk9M0RkMy5tb3VzZSh0aGlzKTtoLmRpc3RvcnRpb24oeCkuZm9jdXMoaVswXSkscC5k aXN0b3J0aW9uKHgpLmZvY3VzKGk9ClsxXSksVy5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNh bGwodCksYiYmVy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKD0KbiksdyYmVy5zZWxlY3Qo Ii5udi15Lm52LWF4aXMiKS5jYWxsKHIpLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmRh dHVtPQooZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSxX LnNlbGVjdCgiLm52LWRpc3RyaWJ1dGk9Cm9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodSl9dmFyIEM9M0RkMy5zZT0KbGVjdCh0aGlzKSxr PTNEdGhpcyxMPTNEKGZ8fHBhcnNlSW50KEMuc3R5bGUoIndpZHRoIikpfHw5NjApLWEubGVmdC1h LnJpZ2h0PQosRD0zRChsfHxwYXJzZUludChDLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3At YS5ib3R0b207Ri51cGRhdGU9M0RmdW5jdGk9Cm9uKCl7Qy5jYWxsKEYpfSxGLmNvbnRhaW5lcj0z RHRoaXMsQS5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZT0KLmRpc2FibGVk fSk7aWYoIU8pe3ZhciBJO089M0R7fTtmb3IoSSBpbiBBKUFbSV1pbnN0YW5jZW9mIEFycmF5P09b SV09M0RBW0ldPQouc2xpY2UoMCk6T1tJXT0zREFbSV19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHU9CmVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIHE9 M0RDLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW19dKTtyZXR1cm4gcS5lbj0KdGVyKCku YXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5Iiwi LS43ZW0iKS5zdHlsPQplKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHEuYXR0cigieCIsYS5sZWZ0 K0wvMikuYXR0cigieSIsYS50b3ArRC8yKS50ZXh0KGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxG fUMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksUD0zRFB8fGgsSD0zREh8fD0KcDt2 YXIgUj0zREMuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc2NhdHRlckNoYXJ0IikuZGF0YShbZV0p LFU9M0RSLmVudGVyKCkuPQphcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBu di1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkpLHo9Cj0zRFUuYXBwZW5kKCJnIiksVz0z RFIuc2VsZWN0KCJnIik7ei5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYj0K YWNrZ3JvdW5kIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLHou YXBwZW5kKCJnIikuYXR0cigiPQpjbGFzcyIsIm52LXkgbnYtYXhpcyIpLHouYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpLHouYXBwZW49CmQoImciKS5hdHRyKCJjbGFz cyIsIm52LWRpc3RXcmFwIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdy YT0KcCIpLHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKTtpZih5 KXt2YXIgWD0zRFM/TC8yOkw7aS53PQppZHRoKFgpLFIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIp LmRhdHVtKGUpLmNhbGwoaSksYS50b3AhPTNEaS5oZWlnaHQoKSYmKGE9Ci50b3A9M0RpLmhlaWdo dCgpLEQ9M0QobHx8cGFyc2VJbnQoQy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEuYm90 dG9tKT0KLFIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiKyhMLVgpKyIsIisgLWEudG9wPQorIikiKX1TJiYocy53aWR0aCgxODApLmNvbG9yKFsi IzQ0NCJdKSxXLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKGo9CikuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLWEudG9wKyIpIikuY2FsbChzKSksUi5hdHRyKCJ0cmFu c2Zvcm0iLD0KInRyYW5zbGF0ZSgiK2EubGVmdCsiLCIrYS50b3ArIikiKSxFJiZXLnNlbGVjdCgi Lm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zPQpmb3JtIiwidHJhbnNsYXRlKCIrTCsiLDApIiks dC53aWR0aChMKS5oZWlnaHQoRCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXs9CnJldHVybiBl LmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxl ZH0pKSxkIT0zRD0KPTNEMCYmdC54RG9tYWluKG51bGwpLHYhPTNEPTNEMCYmdC55RG9tYWluKG51 bGwpLFIuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiPQopLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCk7aWYoZCE9M0Q9M0QwKXt2YXI9CiBWPTNE aC5kb21haW4oKVsxXS1oLmRvbWFpbigpWzBdO3QueERvbWFpbihbaC5kb21haW4oKVswXS1kKlYs aC5kb21haW4oKVsxXT0KK2QqVl0pfWlmKHYhPTNEPTNEMCl7dmFyICQ9M0RwLmRvbWFpbigpWzFd LXAuZG9tYWluKClbMF07dC55RG9tYWluKFtwLmRvbWFpPQpuKClbMF0tdiokLHAuZG9tYWluKClb MV0rdiokXSl9KHYhPTNEPTNEMHx8ZCE9M0Q9M0QwKSYmUi5zZWxlY3QoIi5udi1zY2F0dGU9CnJX cmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2Fs bCh0KSxiJiYobi5zY2FsZT0KKGgpLnRpY2tzKG4udGlja3MoKSYmbi50aWNrcygpLmxlbmd0aD9u LnRpY2tzKCk6TC8xMDApLnRpY2tTaXplKC1ELDApLFcuc2VsPQplY3QoIi5udi14Lm52LWF4aXMi KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmNhbGw9 CihuKSksdyYmKHIuc2NhbGUocCkudGlja3Moci50aWNrcygpJiZyLnRpY2tzKCkubGVuZ3RoP3Iu dGlja3MoKTpELzM2KS50aWNrUz0KaXplKC1MLDApLFcuc2VsZWN0KCIubnYteS5udi1heGlzIiku Y2FsbChyKSksbSYmKG8uZ2V0RGF0YSh0LngoKSkuc2NhbGUoaCkuPQp3aWR0aChMKS5jb2xvcihl Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rp b249Cih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLHouc2VsZWN0KCIubnYtZGlzdFdyYXAi KS5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpLFcuc2VsZWN0 KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNsYXRlKDAsIitw LnJhbmdlKClbMF0rIikiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNh YmxlZH09CikpLmNhbGwobykpLGcmJih1LmdldERhdGEodC55KCkpLnNjYWxlKHApLndpZHRoKEQp LmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmls dGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksei5zPQplbGVjdCgiLm52 LWRpc3RXcmFwIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXN0cmlidXRpb25ZIiks Vy5zZWxlY3Q9CigiLm52LWRpc3RyaWJ1dGlvblkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIisoRT9MOi11LnNpemUoKSkrIiwwKSIpLj0KZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMuZmlzaGV5ZSYmKFcuc2VsPQplY3QoIi5u di1iYWNrZ3JvdW5kIikuYXR0cigid2lkdGgiLEwpLmF0dHIoImhlaWdodCIsRCksVy5zZWxlY3Qo Ii5udi1iYWNrZ3I9Cm91bmQiKS5vbigibW91c2Vtb3ZlIixKKSxXLnNlbGVjdCgiLm52LWJhY2tn cm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7VD0KPTNEIVR9KSx0LmRpc3BhdGNoLm9uKCJl bGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuY3Rpb24oKXtUPTNEIVR9KSkscy5kPQppc3Bh dGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPTNEIWUuZGlzYWJs ZWQseD0zRGUuZGlzYWI9CmxlZD8wOjIuNSxXLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5zdHls ZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/Im5vbj0KZSI6ImFsbCIpLFcuc2VsZWN0KCIu bnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/ImFsPQps Ijoibm9uZSIpLGUuZGlzYWJsZWQ/KGguZGlzdG9ydGlvbih4KS5mb2N1cygwKSxwLmRpc3RvcnRp b24oeCkuZm9jdXMoMCksVy49CnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxXLnNl bGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksVy5zZWxlYz0KdCgiLm52LXkubnYtYXhpcyIp LmNhbGwocikpOlQ9M0QhMSxGLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2Ui PQosZnVuY3Rpb24oZSl7QS5kaXNhYmxlZD0zRGUuZGlzYWJsZWQsTS5zdGF0ZUNoYW5nZShBKSxG LnVwZGF0ZSgpfSksdC5kaXNwYXQ9CmNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKz0KIiAubnYtc2VyaWVzLSIr ZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGZ1bmN0 aW9uPQoodCxuKXtyZXR1cm4gZS5wb3NbMV0tRH0pLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5p ZCgpKyIgLm52LXNlcmllcy0iK2Uuc2U9CnJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJ bmRleCkuYXR0cigieDIiLGUucG9zWzBdK28uc2l6ZSgpKSxlLnBvcz0zRD0KW2UucG9zWzBdK2Eu bGVmdCxlLnBvc1sxXSthLnRvcF0sTS50b29sdGlwU2hvdyhlKX0pLE0ub24oInRvb2x0aXBTaG93 IixmdW5jPQp0aW9uKGUpe04mJkIoZSxrLnBhcmVudE5vZGUpfSksTS5vbigiY2hhbmdlU3RhdGUi LGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2E9CmJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVh Y2goZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLD0KQS5kaXNhYmxl ZD0zRHQuZGlzYWJsZWQpLEYudXBkYXRlKCl9KSxQPTNEaC5jb3B5KCksSD0zRHAuY29weSgpfSks Rn12YXIgdD0KPTNEZS5tb2RlbHMuc2NhdHRlcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUu bW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMuPQpsZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5k KCksbz0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLHU9M0RlLm1vZGVscy5kaXM9CnRyaWJ1dGlv bigpLGE9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0Ojc1fSxmPTNEbnVsbCxsPTNE bnVsbCxjPTNEZT0KLnV0aWxzLmRlZmF1bHRDb2xvcigpLGg9M0RkMy5maXNoZXllP2QzLmZpc2hl eWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0PQpvcnRpb24oMCk6dC54U2NhbGUoKSxwPTNE ZDMuZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlzdG89CnJ0aW9u KDApOnQueVNjYWxlKCksZD0zRDAsdj0zRDAsbT0zRCExLGc9M0QhMSx5PTNEITAsYj0zRCEwLHc9 M0QhMCxFPTNEITEsUz0KPTNEISFkMy5maXNoZXllLHg9M0QwLFQ9M0QhMSxOPTNEITAsQz0zRGZ1 bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK3QrPQoiPC9zdHJvbmc+In0saz0zRGZ1bmN0 aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK24rIjwvc3Ryb25nPiJ9LEw9M0RudWxsLEE9Cj0z RHt9LE89M0RudWxsLE09M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIs InN0YXRlQ2hhbmdlIiwiYz0KaGFuZ2VTdGF0ZSIpLF89M0QiTm8gRGF0YSBBdmFpbGFibGUuIixE PTNEMDt0LnhTY2FsZShoKS55U2NhbGUocCksbi5vcmllbnQoPQoiYm90dG9tIikudGlja1BhZGRp bmcoMTApLHIub3JpZW50KEU/InJpZ2h0IjoibGVmdCIpLnRpY2tQYWRkaW5nKDEwKSxvLmF4aXM9 CigieCIpLHUuYXhpcygieSIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBQLEgsQj0zRGZ1bmN0aW9u KGkscyl7dmFyIG89M0RpLnBvcz0KWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSso cy5vZmZzZXRUb3B8fDApLGY9M0RpLnBvc1swXSsocy5vZmZzZXRMPQplZnR8fDApLGw9M0RwLnJh bmdlKClbMF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxjPTNEaC5yYW5nZSgpWzBdK2EubGVmdCso cy49Cm9mZnNldExlZnR8fDApLGQ9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLHY9M0RuLnRp Y2tGb3JtYXQoKSh0LngoKShpLnBvaT0KbnQsaS5wb2ludEluZGV4KSksbT0zRHIudGlja0Zvcm1h dCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSk7QyE9M0RudWxsPQomJmUudG9vbHRpcC5z aG93KFtmLGxdLEMoaS5zZXJpZXMua2V5LHYsbSxpLEYpLCJuIiwxLHMsIngtbnZ0b29sdGlwIiks ayE9M0Q9Cm51bGwmJmUudG9vbHRpcC5zaG93KFtjLGRdLGsoaS5zZXJpZXMua2V5LHYsbSxpLEYp LCJlIiwxLHMsInktbnZ0b29sdGlwIiksTD0KIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtvLHVd LEwoaS5zZXJpZXMua2V5LHYsbSxpLEYpLGkudmFsdWU8MD8ibiI6InMiLG51PQpsbCxzKX0saj0z RFt7a2V5OiJNYWduaWZ5IixkaXNhYmxlZDohMH1dO3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2U9Cm91dC50b29sdGlwIixmdW5jdGlvbihlKXtNLnRvb2x0aXBIaWRlKGUpLGQzLnNl bGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLj0KbnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsi IC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLDApLGQzLnNlbGVjPQp0KCIubnYt Y2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eS0i K2UucG9pbnRJbmQ9CmV4KS5hdHRyKCJ4MiIsdS5zaXplKCkpfSksTS5vbigidG9vbHRpcEhpZGUi LGZ1bmN0aW9uKCl7TiYmZS50b29sdGlwLmNsZWFudT0KcCgpfSksRi5kaXNwYXRjaD0zRE0sRi5z Y2F0dGVyPTNEdCxGLmxlZ2VuZD0zRGksRi5jb250cm9scz0zRHMsRi54QXhpcz0zRG4sPQpGLnlB eGlzPTNEcixGLmRpc3RYPTNEbyxGLmRpc3RZPTNEdSxkMy5yZWJpbmQoRix0LCJpZCIsImludGVy YWN0aXZlIiwicG9pbnQ9CkFjdGl2ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxlIiwi eVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haT0KbiIsInhSYW5nZSIsInlSYW5nZSIs InNpemVEb21haW4iLCJzaXplUmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiPQos ImNsaXBWb3Jvbm9pIiwiY2xpcFJhZGl1cyIsInVzZVZvcm9ub2kiKSxGLm9wdGlvbnM9M0RlLnV0 aWxzLm9wdGlvbnNGdW5jLmI9CmluZChGKSxGLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhhLnRvcD0zRHR5cGVvZiBlLnRvcD0KIT0zRCJ1bmRlZmluZWQiP2Uu dG9wOmEudG9wLGEucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0 PQo6YS5yaWdodCxhLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJv dHRvbTphLmJvdHRvbSxhLmxlZnQ9Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5s ZWZ0OmEubGVmdCxGKTphfSxGLndpZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZj0zRGUsRik6Zn0sRi5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzPQoubGVuZ3RoPyhsPTNEZSxGKTpsfSxGLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGM9M0RlLnU9CnRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxvLmNv bG9yKGMpLHUuY29sb3IoYyksRik6Y30sRi5zaG93RGlzdFg9M0RmdW5jdD0KaW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxGKTptfSxGLnNob3dEaXN0WT0zRGZ1bmN0aW9uKGUp e3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLEYpOmd9LEYuc2hvd0NvbnRyb2xzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8oUz0zRGUsRik6U30sRi5zaG93 TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0KeT0zRGUsRik6 eX0sRi5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0z RGUsRik6Yn0sPQpGLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh3PTNEZSxGKTp3fSxGLnJpZ2h0QWxpZ249CllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdD0KIiksRik6 RX0sRi5maXNoZXllPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0Rl LEYpOnh9LEYueFBhPQpkZGluZz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhkPTNEZSxGKTpkfSxGLnlQYWRkaW5nPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odj0zRGUsRik6dn0sRi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFy Z3VtZW50cy5sZW5ndGg/KE49M0RlLEYpOk59LEYudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhMPTNEZSxGKTpMfSxGLnRvb2x0aXBYQ29udGVu dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KEM9M0RlLEYpOkN9LEYu dG9vbHRpcFlDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0K az0zRGUsRik6a30sRi5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhBPTNEZSxGKTpBfSxGLmRlPQpmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KE89M0RlLEYpOk99LEYubm9EYXRhPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oXz0zRGUsRik6X30sRi50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5j dD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPTNEZSxGKTpEfSxGfSxlLm1vZGVs cy5zY2F0dGVyUGx1c0xpbmVDaGFyPQp0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBCKGUpe3JldHVy biBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gVigpe2lmKFMpcmU9CnR1cm4gVS5zZWxlY3Qo Ii5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLCExO1Uuc2Vs ZWN0KD0KIi5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2 YXIgaT0zRGQzLm1vdXNlKHRoaXMpO2guPQpkaXN0b3J0aW9uKEUpLmZvY3VzKGlbMF0pLHAuZGlz dG9ydGlvbihFKS5mb2N1cyhpWzFdKSxVLnNlbGVjdCgiLm52LXNjYXR0ZXI9CldyYXAiKS5kYXR1 bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLGcmJlUu c2VsZWN0KD0KIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pLHkmJlUuc2VsZWN0KCIubnYteS5udi1h eGlzIikuY2FsbChyKSxVLnNlbGVjdCgiLm52PQotZGlzdHJpYnV0aW9uWCIpLmRhdHVtKGUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobyksVS49CnNlbGVjdCgi Lm52LWRpc3RyaWJ1dGlvblkiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKT0KLmNhbGwodSl9dmFyIFQ9M0RkMy5zZWxlY3QodGhpcyksTj0zRHRoaXMsQz0z RChmfHxwYXJzZUludChULnN0eWxlKCJ3aWR0aCIpPQopfHw5NjApLWEubGVmdC1hLnJpZ2h0LE09 M0QobHx8cGFyc2VJbnQoVC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEuYm89CnR0b207 Qi51cGRhdGU9M0RmdW5jdGlvbigpe1QuY2FsbChCKX0sQi5jb250YWluZXI9M0R0aGlzLGsuZGlz YWJsZWQ9M0RlLm1hcD0KKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFMKXt2 YXIgajtMPTNEe307Zm9yKGogaW4gaylrW2pdaW5zdGFuPQpjZW9mIEFycmF5P0xbal09M0RrW2pd LnNsaWNlKDApOkxbal09M0RrW2pdfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW49CmN0 aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBGPTNEVC5zZWxlY3RB bGwoIi5udi1ub0RhdGEiKT0KLmRhdGEoW09dKTtyZXR1cm4gRi5lbnRlcigpLmFwcGVuZCgidGV4 dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hPQp0dHIoImR5IiwiLS43ZW0iKS5z dHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxGLmF0dHIoIngiLGEubGVmdCtDLzIpLmF0dHI9 CigieSIsYS50b3ArTS8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQn1ULnNlbGVjdEFs bCgiLm52LW5vRGF0YSIpLnJlbT0Kb3ZlKCksaD0zRHQueFNjYWxlKCkscD0zRHQueVNjYWxlKCks Xz0zRF98fGgsRD0zRER8fHA7dmFyIEk9M0RULnNlbGVjdEFsbCgiPQpnLm52LXdyYXAubnYtc2Nh dHRlckNoYXJ0IikuZGF0YShbZV0pLHE9M0RJLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3M9CiIsIm52ZDMgbnYtd3JhcCBudi1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkpLFI9 M0RxLmFwcGVuZCgiZyIpLFU9M0RJLj0Kc2VsZWN0KCJnIik7Ui5hcHBlbmQoInJlY3QiKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2luPQp0ZXItZXZlbnRzIiwi bm9uZSIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxSLmFwcGVu ZCgiZyI9CikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxSLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtc2NhdHRlcldyYXAiKT0KLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1yZWdyZXNzaW9uTGluZXNXcmFwIiksUi5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnYt ZGlzdFdyYXAiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLFIu YXBwZW5kKCI9CmciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLEkuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKCIrYS5sZWZ0Kz0KIiwiK2EudG9wKyIpIiksYiYmVS5zZWxlY3Qo Ii5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDPQorIiwwKSIp LG0mJihpLndpZHRoKEMvMiksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2Fs bChpKSxhLnRvcCE9Cj0zRGkuaGVpZ2h0KCkmJihhLnRvcD0zRGkuaGVpZ2h0KCksTT0zRChsfHxw YXJzZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMD0KKS1hLnRvcC1hLmJvdHRvbSksSS5zZWxl Y3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrPQpDLzIr IiwiKyAtYS50b3ArIikiKSksdyYmKHMud2lkdGgoMTgwKS5jb2xvcihbIiM0NDQiXSksVS5zZWxl Y3QoIi5udi1jb250cm89CmxzV3JhcCIpLmRhdHVtKEgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLHQudz0KaWR0aChDKS5oZWlnaHQoTSkuY29s b3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyPQoo ZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxJLnNlbGVjdCgiLm52LXNjYXR0 ZXJXcmFwIikuZGF0dW0oZS49CmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0p KS5jYWxsKHQpLEkuc2VsZWN0KCIubnYtcmVncmVzc2lvbkxpbj0KZXNXcmFwIikuYXR0cigiY2xp cC1wYXRoIiwidXJsKCNudi1lZGdlLWNsaXAtIit0LmlkKCkrIikiKTt2YXIgej0zREkuc2VsZWN0 PQooIi5udi1yZWdyZXNzaW9uTGluZXNXcmFwIikuc2VsZWN0QWxsKCIubnYtcmVnTGluZXMiKS5k YXRhKGZ1bmN0aW9uKGUpe3JldHU9CnJuIGV9KTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1yZWdMaW5lcyIpO3ZhciBXPTNEei5zZWxlY3RBbD0KbCgiLm52LXJlZ0xpbmUi KS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pLFg9M0RXLmVudGVyKCkuYXBwZW5kKCJsaW5l IikuPQphdHRyKCJjbGFzcyIsIm52LXJlZ0xpbmUiKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDAp O1cuYXR0cigieDEiLGgucmFuZ2UoKVs9CjBdKS5hdHRyKCJ4MiIsaC5yYW5nZSgpWzFdKS5hdHRy KCJ5MSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRvbWFpbigpWzBdKj0KZS5zbG9wZStlLmlu dGVyY2VwdCl9KS5hdHRyKCJ5MiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRvbWFpbigpWzFd KmUuc2xvPQpwZStlLmludGVyY2VwdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQsbil7 cmV0dXJuIGMoZSxuKX0pLnN0eWxlKCJzdHI9Cm9rZS1vcGFjaXR5IixmdW5jdGlvbihlLHQpe3Jl dHVybiBlLmRpc2FibGVkfHx0eXBlb2YgZS5zbG9wZT0zRD0zRCJ1bmRlZmluZT0KZCJ8fHR5cGVv ZiBlLmludGVyY2VwdD0zRD0zRCJ1bmRlZmluZWQiPzA6MX0pLGcmJihuLnNjYWxlKGgpLnRpY2tz KG4udGlja3MoPQopP24udGlja3MoKTpDLzEwMCkudGlja1NpemUoLU0sMCksVS5zZWxlY3QoIi5u di14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm09CiIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgp WzBdKyIpIikuY2FsbChuKSkseSYmKHIuc2NhbGUocCkudGlja3Moci50aWNrcygpPz0Kci50aWNr cygpOk0vMzYpLnRpY2tTaXplKC1DLDApLFUuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChy KSksZCYmKG8uZ2V0PQpEYXRhKHQueCgpKS5zY2FsZShoKS53aWR0aChDKS5jb2xvcihlLm1hcChm dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGU9Cix0KX0pLmZpbHRlcihmdW5jdGlvbih0 LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLFIuc2VsZWN0KCIubnYtZGlzdFdyYXAiKT0KLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpLFUuc2VsZWN0KCIubnYt ZGlzdHJpYnV0aW9uWCIpPQouYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitwLnJhbmdl KClbMF0rIikiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbig9CmUpe3JldHVybiFlLmRpc2FibGVk fSkpLmNhbGwobykpLHYmJih1LmdldERhdGEodC55KCkpLnNjYWxlKHApLndpZHRoKE0pLmNvbD0K b3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1 bmN0aW9uKHQsbil7cmV0dXJuPQohZVtuXS5kaXNhYmxlZH0pKSxSLnNlbGVjdCgiLm52LWRpc3RX cmFwIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXM9CnRyaWJ1dGlvblkiKSxVLnNl bGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIiso Yj0KP0M6LXUuc2l6ZSgpKSsiLDApIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJu IWUuZGlzYWJsZWR9KSkuY2FsbCh1PQopKSxkMy5maXNoZXllJiYoVS5zZWxlY3QoIi5udi1iYWNr Z3JvdW5kIikuYXR0cigid2lkdGgiLEMpLmF0dHIoImhlaWdodCIsTSk9CixVLnNlbGVjdCgiLm52 LWJhY2tncm91bmQiKS5vbigibW91c2Vtb3ZlIixWKSxVLnNlbGVjdCgiLm52LWJhY2tncm91bmQi KS5vbj0KKCJjbGljayIsZnVuY3Rpb24oKXtTPTNEIVN9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50 Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuPQpjdGlvbigpe1M9M0QhU30pKSxzLmRpc3BhdGNoLm9u KCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPTNEIWU9Ci5kaXNhYmxlZCxF PTNEZS5kaXNhYmxlZD8wOjIuNSxVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5zdHlsZSgicG9p bnRlci1ldj0KZW50cyIsZS5kaXNhYmxlZD8ibm9uZSI6ImFsbCIpLFUuc2VsZWN0KCIubnYtcG9p bnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1lPQp2ZW50cyIsZS5kaXNhYmxlZD8iYWxsIjoibm9u ZSIpLGUuZGlzYWJsZWQ/KGguZGlzdG9ydGlvbihFKS5mb2N1cygwKSxwLmRpc3Q9Cm9ydGlvbihF KS5mb2N1cygwKSxVLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxVLnNlbGVjdCgi Lm52LXgubnYtYT0KeGlzIikuY2FsbChuKSxVLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwo cikpOlM9M0QhMSxCLnVwZGF0ZSgpfSksaS5kaXNwPQphdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVu Y3Rpb24oZSl7az0zRGUsQS5zdGF0ZUNoYW5nZShrKSxCLnVwZGF0ZSgpfSksdC5kaXM9CnBhdGNo Lm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52 LWNoYXJ0LSIrdC5pZD0KKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0 eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGUucG9zPQpbMV0tTSksZDMuc2VsZWN0KCIubnYt Y2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXM9CnR5 LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ4MiIsZS5wb3NbMF0rby5zaXplKCkpLGUucG9zPTNEW2Uu cG9zWzBdK2EubGVmdCxlLj0KcG9zWzFdK2EudG9wXSxBLnRvb2x0aXBTaG93KGUpfSksQS5vbigi dG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3gmJlAoZSxOLnBhPQpyZW50Tm9kZSl9KSxBLm9uKCJj aGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCI9 CiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVkW25dfSks ay5kaXNhYmxlZD0zRHQuZGlzYT0KYmxlZCksQi51cGRhdGUoKX0pLF89M0RoLmNvcHkoKSxEPTNE cC5jb3B5KCl9KSxCfXZhciB0PTNEZS5tb2RlbHMuc2NhdHRlcigpPQosbj0zRGUubW9kZWxzLmF4 aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2Rl bHM9Ci5sZWdlbmQoKSxvPTNEZS5tb2RlbHMuZGlzdHJpYnV0aW9uKCksdT0zRGUubW9kZWxzLmRp c3RyaWJ1dGlvbigpLGE9M0R7dG9wOj0KMzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NzV9LGY9 M0RudWxsLGw9M0RudWxsLGM9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpPQosaD0zRGQzLmZpc2hl eWU/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC54U2Nh bGUoKSw9CnA9M0RkMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5k aXN0b3J0aW9uKDApOnQueVNjYWxlKCksZD0KPTNEITEsdj0zRCExLG09M0QhMCxnPTNEITAseT0z RCEwLGI9M0QhMSx3PTNEISFkMy5maXNoZXllLEU9M0QwLFM9M0QhMSx4PTNEPQohMCxUPTNEZnVu Y3Rpb24oZSx0LG4pe3JldHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0sTj0zRGZ1bmN0aW9u KGUsdCxuKXs9CnJldHVybiI8c3Ryb25nPiIrbisiPC9zdHJvbmc+In0sQz0zRGZ1bmN0aW9uKGUs dCxuLHIpe3JldHVybiI8aDM+IitlKyI8L2gzPj0KIisiPHA+IityKyI8L3A+In0saz0zRHt9LEw9 M0RudWxsLEE9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkPQplIiwic3Rh dGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLE89M0QiTm8gRGF0YSBBdmFpbGFibGUuIixNPTNEMDt0 LnhTY2FsZShoKS49CnlTY2FsZShwKSxuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoMTAp LHIub3JpZW50KGI/InJpZ2h0IjoibGVmdCIpLnRpYz0Ka1BhZGRpbmcoMTApLG8uYXhpcygieCIp LHUuYXhpcygieSIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBfLEQsUD0zRGZ1bmN0aW9uPQooaSxz KXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZz ZXRUb3B8fDApLGY9M0Q9CmkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLGw9M0RwLnJhbmdlKClb MF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxjPTNEaC5yYT0KbmdlKClbMF0rYS5sZWZ0KyhzLm9m ZnNldExlZnR8fDApLGQ9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLHY9M0RuLnRpY2tGPQpv cm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbT0zRHIudGlja0Zvcm1hdCgpKHQu eSgpKGkucG9pbnQsaS5wb2k9Cm50SW5kZXgpKTtUIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtm LGxdLFQoaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJuIiwxLHMsIj0KeC1udnRvb2x0aXAiKSxOIT0z RG51bGwmJmUudG9vbHRpcC5zaG93KFtjLGRdLE4oaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJlIiwx PQoscywieS1udnRvb2x0aXAiKSxDIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtvLHVdLEMoaS5z ZXJpZXMua2V5LHYsbSxpLnBvaW49CnQudG9vbHRpcCxpLEIpLGkudmFsdWU8MD8ibiI6InMiLG51 bGwscyl9LEg9M0Rbe2tleToiTWFnbmlmeSIsZGlzYWJsZWQ6ITB9XT0KO3JldHVybiB0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7QS50b29sdGlwSGlk ZShlPQopLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2Vy aWVzSW5kZXgrIiAubnYtZGlzdHgtIis9CmUucG9pbnRJbmRleCkuYXR0cigieTEiLDApLGQzLnNl bGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uucz0KZXJpZXNJbmRleCsi IC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLHUuc2l6ZSgpKX0pLEEub24oInRv b2x0aXBIPQppZGUiLGZ1bmN0aW9uKCl7eCYmZS50b29sdGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0 Y2g9M0RBLEIuc2NhdHRlcj0zRHQsQi5sZWc9CmVuZD0zRGksQi5jb250cm9scz0zRHMsQi54QXhp cz0zRG4sQi55QXhpcz0zRHIsQi5kaXN0WD0zRG8sQi5kaXN0WT0zRHUsZDMucj0KZWJpbmQoQix0 LCJpZCIsImludGVyYWN0aXZlIiwicG9pbnRBY3RpdmUiLCJ4IiwieSIsInNoYXBlIiwic2l6ZSIs InhTY2FsZSIsPQoieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2Ui LCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwic2l6ZVI9CmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJm b3JjZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaXBSYWRpdXMiLCJ1c2VWb3Jvbm9pIj0KKSxCLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQiksQi5tYXJnaW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhhLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLnRvcDphLnRvcCxhLnJpZ2h0PTNEdHk9CnBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEIj0KdW5k ZWZpbmVkIj9lLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRl ZmluZWQiP2UubGVmdDphPQoubGVmdCxCKTphfSxCLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEIpOmZ9LEIuaGU9CmlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQik6bH0sQi5jb2xvcj0zRGZ1bmN0aW9uKD0K dCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29s b3IoYyksby5jb2xvcihjKSx1PQouY29sb3IoYyksQik6Y30sQi5zaG93RGlzdFg9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsQik9CjpkfSxCLnNob3dEaXN0WT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxCKTp2fSxCLnNob3dD bz0KbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEIp Ond9LEIuc2hvd0xlZ2VuZD0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG09M0RlLEIpOm19LEIuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZz0zRGUsQik6Z30sQi5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbj0KdHMubGVuZ3RoPyh5PTNEZSxCKTp5fSxCLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGI9M0RlLHIub3JpZW50KGU/InJpZ2h0Ijoi bGVmdCIpLEIpOmJ9LEIuZmlzaGV5ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5s ZW5ndGg/KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbj0KZ3RoPyh4PTNEZSxCKTp4fSxCLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9Cj0zRGUsQik6Q30sQi50b29sdGlwWENvbnRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQj0KKTpUfSxCLnRv b2x0aXBZQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPTNE ZSxCKTpOfSxCPQouc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o az0zRGUsQik6a30sQi5kZWZhdWx0U3RhdGU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhMPTNEZSxCKTpMfSxCLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFy Z3VtZW50cy5sZW5ndGg/KE89M0RlLEIpOk99LEIudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rp b24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oTT0zRGUsQik6TX0sQn0sZS5tb2RlbHMu c3BhcmtsaW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiA9CmQoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQsZD0zRHItdC50b3AtdC5ib3R0bz0KbSx2 PTNEZDMuc2VsZWN0KHRoaXMpO3MuZG9tYWluKGx8fGQzLmV4dGVudChlLHUpKS5yYW5nZShofHxb MCxpXSksby5kb21haW4oPQpjfHxkMy5leHRlbnQoZSxhKSkucmFuZ2UocHx8W2QsMF0pO3ZhciBt PTNEdi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFya2w9CmluZSIpLmRhdGEoW2VdKSxnPTNE bS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNwYT0K cmtsaW5lIiksYj0zRGcuYXBwZW5kKCJnIiksdz0zRG0uc2VsZWN0KCJnIik7bS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoPQoiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgRT0zRG0uc2Vs ZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm49CltlXX0pO0UuZW50ZXIoKS5h cHBlbmQoInBhdGgiKSxFLmV4aXQoKS5yZW1vdmUoKSxFLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9u KD0KZSx0KXtyZXR1cm4gZS5jb2xvcnx8ZihlLHQpfSkuYXR0cigiZCIsZDMuc3ZnLmxpbmUoKS54 KGZ1bmN0aW9uKGUsdCl7cmV0dXJuPQogcyh1KGUsdCkpfSkueShmdW5jdGlvbihlLHQpe3JldHVy biBvKGEoZSx0KSl9KSk7dmFyIFM9M0RtLnNlbGVjdEFsbCgiY2lyY2w9CmUubnYtcG9pbnQiKS5k YXRhKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aWYodCE9M0QtMSl7dmFyIG49M0RlW3RdO3Jl dHVybj0KIG4ucG9pbnRJbmRleD0zRHQsbn1yZXR1cm4gbnVsbH12YXIgdD0zRGUubWFwKGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pPQoscj0zRG4odC5sYXN0SW5kZXhPZihvLmRvbWFpbigp WzFdKSksaT0zRG4odC5pbmRleE9mKG8uZG9tYWluKClbMF0pKSxzPTNEbig9CnQubGVuZ3RoLTEp O3JldHVybltpLHIsc10uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRG51bGx9KX0pO1Mu ZW50ZXIoKT0KLmFwcGVuZCgiY2lyY2xlIiksUy5leGl0KCkucmVtb3ZlKCksUy5hdHRyKCJjeCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh1KGUsPQplLnBvaW50SW5kZXgpKX0pLmF0dHIoImN5Iixm dW5jdGlvbihlLHQpe3JldHVybiBvKGEoZSxlLnBvaW50SW5kZXgpKX0pLmF0dHI9CigiciIsMiku YXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSxlLnBvaW50SW5kZXgpPTNEPTNE cy5kb21haW4oKT0KWzFdPyJudi1wb2ludCBudi1jdXJyZW50VmFsdWUiOmEoZSxlLnBvaW50SW5k ZXgpPTNEPTNEby5kb21haW4oKVswXT8ibnYtcG9pPQpudCBudi1taW5WYWx1ZSI6Im52LXBvaW50 IG52LW1heFZhbHVlIn0pfSksZH12YXIgdD0zRHt0b3A6MixyaWdodDowLGJvdHRvbTo9CjIsbGVm dDowfSxuPTNENDAwLHI9M0QzMixpPTNEITAscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RkMy5z Y2FsZS5saW5lYXIoKT0KLHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUueX0sZj0zRGUudXRpbHMuZ2V0Q29sPQpvcihbIiMwMDAiXSksbCxjLGgscDty ZXR1cm4gZC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGQpLGQubWFyZ2k9Cm49 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50 b3AhPTNEInVuZGVmaW5lZD0KIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQh PTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90PQp0b209M0R0eXBlb2YgZS5ib3R0 b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGU9 CmZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsZCk6dH0sZC53aWR0aD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KG49M0RlLGQpOm59LGQuaGVpZ2h0PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlPQosZCk6cn0sZC54PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9yKGUpLGQpOnV9 LGQ9Ci55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RkMy5mdW5j dG9yKGUpLGQpOmF9LGQueFNjYWxlPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocz0zRGUsZCk6c30sZC55U2NhbGU9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhvPTNEZSxkKTpvfSxkLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbj0KdHMubGVuZ3RoPyhsPTNEZSxkKTpsfSxkLnlEb21haW49M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0KPTNEZSxkKTpjfSxkLnhSYW5nZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxkKTpofSxkLnlSPQphbmdlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLGQpOnB9LGQuYW5pbWF0ZT0zRGZ1 bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLGQpOml9LGQuY29sb3I9 M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3RoPyhmPTNEZS51dGlscy5nZXRD b2xvcih0KSxkKTpmfSxkfSxlLm1vZGVscy5zcGFya2xpbmVQbHVzPTNEZnVuPQpjdGlvbigpe2Z1 bmN0aW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihjKXtmdW5jdGlvbiBPKCl7aWYoYSly ZXR1cm47dmE9CnIgZT0zREMuc2VsZWN0QWxsKCIubnYtaG92ZXJWYWx1ZSIpLmRhdGEodSkscj0z RGUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKD0KImNsYXNzIiwibnYtaG92ZXJWYWx1ZSIpLnN0 eWxlKCJzdHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCk7PQplLmV4aXQo KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLnJlbW92 ZSgpLGUuYXR0cig9CiJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitz KHQueCgpKGNbZV0sZSkpKyIsMCkifSkuc3R5bGUoIj0Kc3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxl KCJmaWxsLW9wYWNpdHkiLDEpO2lmKCF1Lmxlbmd0aClyZXR1cm47ci5hcHBlbmQoImxpPQpuZSIp LmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsLW4udG9wKS5hdHRyKCJ4MiIsMCkuYXR0cigieTIiLGIp LHIuYXBwZW5kKCJ0ZXg9CnQiKS5hdHRyKCJjbGFzcyIsIm52LXhWYWx1ZSIpLmF0dHIoIngiLC02 KS5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaD0Kb3IiLCJlbmQiKS5hdHRyKCJkeSIs Ii45ZW0iKSxDLnNlbGVjdCgiLm52LWhvdmVyVmFsdWUgLm52LXhWYWx1ZSIpLnRleHQoZih0PQou eCgpKGNbdVswXV0sdVswXSkpKSxyLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYteVZh bHVlIikuYXR0cigieCIsNik9Ci5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaG9yIiwi c3RhcnQiKS5hdHRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLj0KbnYtaG92ZXJWYWx1ZSAubnYt eVZhbHVlIikudGV4dChsKHQueSgpKGNbdVswXV0sdVswXSkpKX1mdW5jdGlvbiBNKCl7ZnVuY3Rp PQpvbiByKGUsbil7dmFyIHI9M0RNYXRoLmFicyh0LngoKShlWzBdLDApLW4pLGk9M0QwO2Zvcih2 YXIgcz0zRDA7czxlLmxlbmd0aDs9CnMrKylNYXRoLmFicyh0LngoKShlW3NdLHMpLW4pPHImJihy PTNETWF0aC5hYnModC54KCkoZVtzXSxzKS1uKSxpPTNEcyk7cmV0dT0Kcm4gaX1pZihhKXJldHVy bjt2YXIgZT0zRGQzLm1vdXNlKHRoaXMpWzBdLW4ubGVmdDt1PTNEW3IoYyxNYXRoLnJvdW5kKHMu aW52PQplcnQoZSkpKV0sTygpfXZhciBtPTNEZDMuc2VsZWN0KHRoaXMpLGc9M0Qocnx8cGFyc2VJ bnQobS5zdHlsZSgid2lkdGgiKSl8fDk9CjYwKS1uLmxlZnQtbi5yaWdodCxiPTNEKGl8fHBhcnNl SW50KG0uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1uLnRvcC1uLmJvdHRvbT0KO3YudXBkYXRlPTNE ZnVuY3Rpb24oKXt2KGUpfSx2LmNvbnRhaW5lcj0zRHRoaXM7aWYoIWN8fCFjLmxlbmd0aCl7dmFy IHc9M0RtPQouc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbZF0pO3JldHVybiB3LmVudGVy KCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2w9CmFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigi ZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYT0KdHRyKCJ4Iixu LmxlZnQrZy8yKS5hdHRyKCJ5IixuLnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9 KSx2fW0uc2VsPQplY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgRT0zRHQueSgpKGNb Yy5sZW5ndGgtMV0sYy5sZW5ndGgtMSk7cz0zRHQ9Ci54U2NhbGUoKSxvPTNEdC55U2NhbGUoKTt2 YXIgUz0zRG0uc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc3BhcmtsaW5lcGx1cyIpLj0KZGF0YShb Y10pLFQ9M0RTLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtc3BhcmtsaW5lPQpwbHVzIiksTj0zRFQuYXBwZW5kKCJnIiksQz0zRFMuc2VsZWN0KCJnIik7 Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXM9CnBhcmtsaW5lV3JhcCIpLE4uYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi12YWx1ZVdyYXAiKSxOLmFwcGVuZCgiZyIpLmF0dD0Kcigi Y2xhc3MiLCJudi1ob3ZlckFyZWEiKSxTLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24u bGVmdCsiLCIrbi50b3ArPQoiKSIpO3ZhciBrPTNEQy5zZWxlY3QoIi5udi1zcGFya2xpbmVXcmFw Iik7dC53aWR0aChnKS5oZWlnaHQoYiksay5jYWxsKHQpO3Y9CmFyIEw9M0RDLnNlbGVjdCgiLm52 LXZhbHVlV3JhcCIpLEE9M0RMLnNlbGVjdEFsbCgiLm52LWN1cnJlbnRWYWx1ZSIpLmRhdGEoWz0K RV0pO0EuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWN1cnJlbnRWYWx1 ZSIpLmF0dHIoImR4IixwPy04PQo6OCkuYXR0cigiZHkiLCIuOWVtIikuc3R5bGUoInRleHQtYW5j aG9yIixwPyJlbmQiOiJzdGFydCIpLEEuYXR0cigieCIsZysocD89Cm4ucmlnaHQ6MCkpLmF0dHIo InkiLGg/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9OjApLnN0eWxlKCJmaWxsIix0LmNvbG9yKCko Yz0KW2MubGVuZ3RoLTFdLGMubGVuZ3RoLTEpKS50ZXh0KGwoRSkpLE4uc2VsZWN0KCIubnYtaG92 ZXJBcmVhIikuYXBwZW5kKCJyZWN0PQoiKS5vbigibW91c2Vtb3ZlIixNKS5vbigiY2xpY2siLGZ1 bmN0aW9uKCl7YT0zRCFhfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbig9Cil7dT0zRFtdLE8oKX0p LEMuc2VsZWN0KCIubnYtaG92ZXJBcmVhIHJlY3QiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9u KGUpez0KcmV0dXJuInRyYW5zbGF0ZSgiKyAtbi5sZWZ0KyIsIisgLW4udG9wKyIpIn0pLmF0dHIo IndpZHRoIixnK24ubGVmdCtuLnJpZ2h0PQopLmF0dHIoImhlaWdodCIsYituLnRvcCl9KSx2fXZh ciB0PTNEZS5tb2RlbHMuc3BhcmtsaW5lKCksbj0zRHt0b3A6MTUscmlnaHQ9CjoxMDAsYm90dG9t OjEwLGxlZnQ6NTB9LHI9M0RudWxsLGk9M0RudWxsLHMsbyx1PTNEW10sYT0zRCExLGY9M0RkMy5m b3JtYXQoIj0KLHIiKSxsPTNEZDMuZm9ybWF0KCIsLjJmIiksYz0zRCEwLGg9M0QhMCxwPTNEITEs ZD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iO3JlPQp0dXJuIHYuc3BhcmtsaW5lPTNEdCxkMy5yZWJp bmQodix0LCJ4IiwieSIsInhTY2FsZSIsInlTY2FsZSIsImNvbG9yIiksdi5vcHQ9CmlvbnM9M0Rl LnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLj0KbGVuZ3RoPyhuLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9l LnRvcDpuLnRvcCxuLnJpZ2h0PTNEdHlwZW9mIGUuPQpyaWdodCE9M0QidW5kZWZpbmVkIj9lLnJp Z2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW49CmVkIj9l LmJvdHRvbTpuLmJvdHRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2Uu bGVmdDpuLmxlZnQsdj0KKTpufSx2LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHI9M0RlLHYpOnJ9LHYuaGVpZ2h0PTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oaT0zRGUsdik6aX0sdi54VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGU9Cil7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHYpOmZ9LHYueVRpY2tGb3JtYXQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhsPTNEZSx2KTpsfSx2LnNob3dWYWx1 ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGM9M0RlLHYpOmN9LHYu YWxpZ25WYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSw9 CnYpOmh9LHYucmlnaHRBbGlnblZhbHVlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHA9M0RlLHYpOnB9LD0Kdi5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oZD0zRGUsdik6ZH0sdn0sZS5tb2RlbHMuc3RhPQpja2VkQXJlYT0zRGZ1bmN0 aW9uKCl7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPTNEbi10 Lmw9CmVmdC10LnJpZ2h0LGI9M0RyLXQudG9wLXQuYm90dG9tLHc9M0RkMy5zZWxlY3QodGhpcyk7 cD0zRHYueFNjYWxlKCksZD0zRHYueT0KU2NhbGUoKTt2YXIgRT0zRGU7ZS5mb3JFYWNoKGZ1bmN0 aW9uKGUsdCl7ZS5zZXJpZXNJbmRleD0zRHQsZS52YWx1ZXM9M0RlLnZhPQpsdWVzLm1hcChmdW5j dGlvbihlLG4pe3JldHVybiBlLmluZGV4PTNEbixlLnNlcmllc0luZGV4PTNEdCxlfSl9KTt2YXIg Uz0zRGU9Ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KTtlPTNEZDMubGF5 b3V0LnN0YWNrKCkub3JkZXIobCkub2Zmcz0KZXQoZikudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHVlc30pLngobykueSh1KS5vdXQoZnVuY3Rpb24oZSx0LG4pe3ZhPQpyIHI9M0R1KGUp PTNEPTNEPTNEMD8wOm47ZS5kaXNwbGF5PTNEe3k6cix5MDp0fX0pKFMpO3ZhciBUPTNEdy5zZWxl Y3RBbGwoImc9Ci5udi13cmFwLm52LXN0YWNrZWRhcmVhIikuZGF0YShbZV0pLE49M0RULmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLD0KIm52ZDMgbnYtd3JhcCBudi1zdGFja2VkYXJl YSIpLEM9M0ROLmFwcGVuZCgiZGVmcyIpLGs9M0ROLmFwcGVuZCgiZyIpLEw9M0RUPQouc2VsZWN0 KCJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWFyZWFXcmFwIiksay5hcHBlbmQo ImciKS5hdHRyKCI9CmNsYXNzIiwibnYtc2NhdHRlcldyYXAiKSxULmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIj0KKSIpLHYud2lkdGgoYSkuaGVpZ2h0KGIp LngobykueShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwbGF5LnkrZS5kaXNwbGF5LnkwPQp9KS5m b3JjZVkoWzBdKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxpKGUs ZS5zZXJpZXNJbmRleCk9Cn0pKTt2YXIgQT0zREwuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5k YXR1bShlKTtBLmNhbGwodiksQy5hcHBlbmQoImNsaXBQYT0KdGgiKS5hdHRyKCJpZCIsIm52LWVk Z2UtY2xpcC0iK3MpLmFwcGVuZCgicmVjdCIpLFQuc2VsZWN0KCIjbnYtZWRnZS1jbGlwLSIrPQpz KyIgcmVjdCIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGIpLEwuYXR0cigiY2xpcC1w YXRoIixoPyJ1cmwoI252LWU9CmRnZS1jbGlwLSIrcysiKSI6IiIpO3ZhciBPPTNEZDMuc3ZnLmFy ZWEoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAobyhlLHQpKT0KfSkueTAoZnVuY3Rpb24oZSl7 cmV0dXJuIGQoZS5kaXNwbGF5LnkwKX0pLnkxKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlzcGxh PQp5LnkrZS5kaXNwbGF5LnkwKX0pLmludGVycG9sYXRlKGMpLE09M0RkMy5zdmcuYXJlYSgpLngo ZnVuY3Rpb24oZSx0KXtyZXR1cm49CiBwKG8oZSx0KSl9KS55MChmdW5jdGlvbihlKXtyZXR1cm4g ZChlLmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7cmV0dXJuID0KZChlLmRpc3BsYXkueTAp fSksXz0zREwuc2VsZWN0KCIubnYtYXJlYVdyYXAiKS5zZWxlY3RBbGwoInBhdGgubnYtYXJlYSIp LmRhPQp0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0pO18uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5h dHRyKCJjbGFzcyIsZnVuY3Rpb24oZSw9CnQpe3JldHVybiJudi1hcmVhIG52LWFyZWEtIit0fSku YXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTShlLnZhbHVlcyxlLj0Kc2VyaWVzSW5kZXgp fSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgi aG92ZXIiPQosITApLG0uYXJlYU1vdXNlb3Zlcih7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltk My5ldmVudC5wYWdlWCxkMy5ldmVudC5wYWc9CmVZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4 fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaT0KcykuY2xhc3Nl ZCgiaG92ZXIiLCExKSxtLmFyZWFNb3VzZW91dCh7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltk My5ldmVudC5wPQphZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4 fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCk9CntkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgi aG92ZXIiLCExKSxtLmFyZWFDbGljayh7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOj0KW2QzLmV2 ZW50LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4fSl9KSxf LmV4aXQoKS5yZW1vPQp2ZSgpLF8uc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu Y29sb3J8fGkoZSxlLnNlcmllc0luZGV4KX0pLnN0eWw9CmUoInN0cm9rZSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgpfSksXy5hdHRyKCJkIixmdT0KbmN0 aW9uKGUsdCl7cmV0dXJuIE8oZS52YWx1ZXMsdCl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdmVyLmFyZWEiLGZ1PQpuY3Rpb24oZSl7TC5zZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYt YXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmU9CnIiLCEwKX0pLHYuZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW91dC5hcmVhIixmdW5jdGlvbihlKXtMLnNlbGVjdCgiLm52LWNoYT0K cnQtIitzKyIgLm52LWFyZWEtIitlLnNlcmllc0luZGV4KS5jbGFzc2VkKCJob3ZlciIsITEpfSks Zy5kM19zdGFja2VkT2Zmc2V0PQpfc3RhY2tQZXJjZW50PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0Rl Lmxlbmd0aCxuPTNEZVswXS5sZW5ndGgscj0zRDEvdCxpLHMsbyw9CmE9M0RbXTtmb3Iocz0zRDA7 czxuOysrcyl7Zm9yKGk9M0QwLG89M0QwO2k8RS5sZW5ndGg7aSsrKW8rPTNEdShFW2ldLnZhbHVl cz0KW3NdKTtpZihvKWZvcihpPTNEMDtpPHQ7aSsrKWVbaV1bc11bMV0vPTNEbztlbHNlIGZvcihp PTNEMDtpPHQ7aSsrKWVbaV1bc11bPQoxXT0zRHJ9Zm9yKHM9M0QwO3M8bjsrK3MpYVtzXT0zRDA7 cmV0dXJuIGF9fSksZ312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHQ9Cm9tOjAsbGVmdDowfSxu PTNEOTYwLHI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCkscz0zRE1hdGguZmxvb3Io TWF0aD0KLnJhbmRvbSgpKjFlNSksbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHU9M0RmdW5j dGlvbihlKXtyZXR1cm4gZS55fSxhPTNEPQoic3RhY2siLGY9M0QiemVybyIsbD0zRCJkZWZhdWx0 IixjPTNEImxpbmVhciIsaD0zRCExLHAsZCx2PTNEZS5tb2RlbHMuc2NhdHQ9CmVyKCksbT0zRGQz LmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYXJlYUNsaWNrIiwiYXJlYU1v dXNlb3Zlcj0KIiwiYXJlYU1vdXNlb3V0Iik7cmV0dXJuIHYuc2l6ZSgyLjIpLnNpemVEb21haW4o WzIuMiwyLjJdKSx2LmRpc3BhdGNoLm9uKCJlPQpsZW1lbnRDbGljay5hcmVhIixmdW5jdGlvbihl KXttLmFyZWFDbGljayhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW89CnZlci50b29s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3Bd LG0udG9vbHRpcD0KU2hvdyhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXttLnRvb2x0aXBIaWRlPQooZSl9KSxnLmRpc3BhdGNoPTNEbSxnLnNj YXR0ZXI9M0R2LGQzLnJlYmluZChnLHYsImludGVyYWN0aXZlIiwic2l6ZSIsInhTY2E9CmxlIiwi eVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJz aXplRG9tYWluIiwiZj0Kb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIs InVzZVZvcm9ub2kiLCJjbGlwUmFkaXVzIiwiaGlnaGxpPQpnaHRQb2ludCIsImNsZWFySGlnaGxp Z2h0cyIpLGcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChnKSxnLng9M0Q9CmZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZDMuZnVuY3RvcihlKSxnKTpv fSxnLnk9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZDMuZnVu Y3RvcihlKSxnKTp1fSxnLm1hcmdpbj0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQ9 Ci5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0 LmJvdHRvbT0zRHR5cGVvZiBlLj0KYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90 dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lPQpkIj9lLmxlZnQ6dC5sZWZ0 LGcpOnR9LGcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0z RGU9CixnKTpufSxnLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhyPTNEZSxnKTpyfSxnLmNsaXBFZD0KZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaD0zRGUsZyk6aH0sZy5jb2xvcj0zRGZ1bmN0aW9uKHQpPQp7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLGcpOml9LGcub2Zmc2V0PTNEZnVu Y3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsZyk6Zn0sZy5vcmRlcj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5sZW5ndGg/KGw9M0RlLGcpOmx9LGcuc3R5 bGU9M0RmdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gPQphO2E9M0RlO3N3 aXRjaChhKXtjYXNlInN0YWNrIjpnLm9mZnNldCgiemVybyIpLGcub3JkZXIoImRlZmF1bHQiKTti cmVhaztjYXM9CmUic3RyZWFtIjpnLm9mZnNldCgid2lnZ2xlIiksZy5vcmRlcigiaW5zaWRlLW91 dCIpO2JyZWFrO2Nhc2Uic3RyZWFtLWNlbnRlcj0KIjpnLm9mZnNldCgic2lsaG91ZXR0ZSIpLGcu b3JkZXIoImluc2lkZS1vdXQiKTticmVhaztjYXNlImV4cGFuZCI6Zy5vZmZzZXQoPQoiZXhwYW5k IiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nhc2Uic3RhY2tfcGVyY2VudCI6Zy5vZmZzZXQo Zy5kM19zdGFja2U9CmRPZmZzZXRfc3RhY2tQZXJjZW50KSxnLm9yZGVyKCJkZWZhdWx0Iil9cmV0 dXJuIGd9LGcuaW50ZXJwb2xhdGU9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhjPTNEZSxnKTpjfSxnfSxlLm1vZGVscy5zdGFja2VkQXJlYUNoYXJ0PTNEZnVuPQpjdGlv bigpe2Z1bmN0aW9uIE0oeSl7cmV0dXJuIHkuZWFjaChmdW5jdGlvbih5KXt2YXIgQT0zRGQzLnNl bGVjdCh0aGlzKSxfPQo9M0R0aGlzLEQ9M0QoYXx8cGFyc2VJbnQoQS5zdHlsZSgid2lkdGgiKSl8 fDk2MCktdS5sZWZ0LXUucmlnaHQsUD0zRChmfHxwYXI9CnNlSW50KEEuc3R5bGUoImhlaWdodCIp KXx8NDAwKS11LnRvcC11LmJvdHRvbTtNLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7QS5jYWxsKD0KTSl9 LE0uY29udGFpbmVyPTNEdGhpcyxTLmRpc2FibGVkPTNEeS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu ISFlLmRpc2FibGVkfSk7PQppZigheCl7dmFyIEg7eD0zRHt9O2ZvcihIIGluIFMpU1tIXWluc3Rh bmNlb2YgQXJyYXk/eFtIXT0zRFNbSF0uc2xpY2UoMCk6eFs9CkhdPTNEU1tIXX1pZigheXx8IXku bGVuZ3RofHwheS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLj0K bGVuZ3RoKXt2YXIgQj0zREEuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbVF0pO3JldHVy biBCLmVudGVyKCkuYXBwZW5kPQooInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRh IikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2g9Cm9yIiwibWlkZGxlIiksQi5h dHRyKCJ4Iix1LmxlZnQrRC8yKS5hdHRyKCJ5Iix1LnRvcCtQLzIpLnRleHQoZnVuY3Rpb24oZSl7 cj0KZXR1cm4gZX0pLE19QS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxiPTNEdC54 U2NhbGUoKSx3PTNEdC55U2NhbGUoPQopO3ZhciBqPTNEQS5zZWxlY3RBbGwoImcubnYtd3JhcC5u di1zdGFja2VkQXJlYUNoYXJ0IikuZGF0YShbeV0pLEY9M0RqLmVudGU9CnIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zdGFja2VkQXJlYUNoYXJ0IikuYXBwZW5k KCJnIj0KKSxJPTNEai5zZWxlY3QoImciKTtGLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJvcGFjaXR5 IiwwKSxGLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudi14IG52LWF4aXMiKSxGLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksRi5hcHBlbmQ9CigiZyIpLmF0dHIo ImNsYXNzIiwibnYtc3RhY2tlZFdyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt bGVnZW5kVz0KcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3Jh cCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhPQpzcyIsIm52LWludGVyYWN0aXZlIiksSS5zZWxl Y3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsRCkuYXR0cigiaGVpZ2h0IixQKTtpZig9Cmgpe3ZhciBx PTNEYz9ELUM6RDtpLndpZHRoKHEpLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKHkp LmNhbGwoaSksdT0KLnRvcCE9M0RpLmhlaWdodCgpJiYodS50b3A9M0RpLmhlaWdodCgpLFA9M0Qo Znx8cGFyc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpPQp8fDQwMCktdS50b3AtdS5ib3R0b20pLEku c2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGE9CnRlKCIr KEQtcSkrIiwiKyAtdS50b3ArIikiKX1pZihjKXt2YXIgUj0zRFt7a2V5Okwuc3RhY2tlZHx8IlN0 YWNrZWQiLG1ldGFLZT0KeToiU3RhY2tlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJzdGFjayIs c3R5bGU6InN0YWNrIn0se2tleTpMLnN0cmVhbXx8IlN0PQpyZWFtIixtZXRhS2V5OiJTdHJlYW0i LGRpc2FibGVkOnQuc3R5bGUoKSE9M0Qic3RyZWFtIixzdHlsZToic3RyZWFtIn0se2tleTo9Ckwu ZXhwYW5kZWR8fCJFeHBhbmRlZCIsbWV0YUtleToiRXhwYW5kZWQiLGRpc2FibGVkOnQuc3R5bGUo KSE9M0QiZXhwYW5kIixzdD0KeWxlOiJleHBhbmQifSx7a2V5Okwuc3RhY2tfcGVyY2VudHx8IlN0 YWNrICUiLG1ldGFLZXk6IlN0YWNrX1BlcmNlbnQiLGRpc2FiPQpsZWQ6dC5zdHlsZSgpIT0zRCJz dGFja19wZXJjZW50IixzdHlsZToic3RhY2tfcGVyY2VudCJ9XTtDPTNEay5sZW5ndGgvMyoyNjA9 CixSPTNEUi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGsuaW5kZXhPZihlLm1ldGFLZXkpIT0z RD0zRC0xfSkscy53aWR0aChDKT0KLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0pLEkuc2Vs ZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oUikuY2FsbChzPQopLHUudG9wIT0zRE1hdGgu bWF4KHMuaGVpZ2h0KCksaS5oZWlnaHQoKSkmJih1LnRvcD0zRE1hdGgubWF4KHMuaGVpZ2h0KCks aS49CmhlaWdodCgpKSxQPTNEKGZ8fHBhcnNlSW50KEEuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11 LnRvcC11LmJvdHRvbSksSS5zZWxlYz0KdCgiLm52LWNvbnRyb2xzV3JhcCIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIpfWouYXR0cigiPQp0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksdiYmSS5zZWxlY3QoIi5udi15Lm52LWF4 aXMiKS49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwwKSIpLG0mJihvLndpZHRo KEQpLmhlaWdodChQKS5tYXJnaW4oe2xlZj0KdDp1LmxlZnQsdG9wOnUudG9wfSkuc3ZnQ29udGFp bmVyKEEpLnhTY2FsZShiKSxqLnNlbGVjdCgiLm52LWludGVyYWN0aXZlIikuPQpjYWxsKG8pKSx0 LndpZHRoKEQpLmhlaWdodChQKTt2YXIgVT0zREkuc2VsZWN0KCIubnYtc3RhY2tlZFdyYXAiKS5k YXR1bSh5KTs9ClUuY2FsbCh0KSxwJiYobi5zY2FsZShiKS50aWNrcyhELzEwMCkudGlja1NpemUo LVAsMCksSS5zZWxlY3QoIi5udi14Lm52LWF4aT0KcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgwLCIrUCsiKSIpLEkuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuPQopKSxkJiYo ci5zY2FsZSh3KS50aWNrcyh0Lm9mZnNldCgpPTNEPTNEIndpZ2dsZSI/MDpQLzM2KS50aWNrU2l6 ZSgtRCwwKS5zZXQ9ClRpY2tGb3JtYXQodC5zdHlsZSgpPTNEPTNEImV4cGFuZCJ8fHQuc3R5bGUo KT0zRD0zRCJzdGFja19wZXJjZW50Ij9kMy5mb3JtYT0KdCgiJSIpOkUpLEkuc2VsZWN0KCIubnYt eS5udi1heGlzIikuY2FsbChyKSksdC5kaXNwYXRjaC5vbigiYXJlYUNsaWNrLnRvZ2dsPQplIixm dW5jdGlvbihlKXt5LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0 aD0zRD0zRD0zRDE/eS49CmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0zRCExfSk6eS5m b3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0zRD0KbiE9M0RlLnNlcmllc0luZGV4fSks Uy5kaXNhYmxlZD0zRHkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pLE4uPQpz dGF0ZUNoYW5nZShTKSxNLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1 bmN0aW9uKGUpe1MuZGlzYWI9CmxlZD0zRGUuZGlzYWJsZWQsTi5zdGF0ZUNoYW5nZShTKSxNLnVw ZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLD0KZnVuY3Rpb24oZSxuKXtpZigh ZS5kaXNhYmxlZClyZXR1cm47Uj0zRFIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVk PQo9M0QhMCxlfSksZS5kaXNhYmxlZD0zRCExLHQuc3R5bGUoZS5zdHlsZSksUy5zdHlsZT0zRHQu c3R5bGUoKSxOLnN0YXRlQ2hhbmc9CmUoUyksTS51cGRhdGUoKX0pLG8uZGlzcGF0Y2gub24oImVs ZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xlYXJIaWdobD0KaWdodHMoKTt2YXIgcyxh LGYsYz0zRFtdO3kuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2VyaWVzSW5kZXg9M0R0 LCFlPQouZGlzYWJsZWR9KS5mb3JFYWNoKGZ1bmN0aW9uKG4scil7YT0zRGUuaW50ZXJhY3RpdmVC aXNlY3Qobi52YWx1ZXMsaS5wb2ludFg9ClZhbHVlLE0ueCgpKSx0LmhpZ2hsaWdodFBvaW50KHIs YSwhMCk7dmFyIG89M0RuLnZhbHVlc1thXTtpZih0eXBlb2Ygbz0zRD0zRD0KInVuZGVmaW5lZCIp cmV0dXJuO3R5cGVvZiBzPTNEPTNEInVuZGVmaW5lZCImJihzPTNEbyksdHlwZW9mIGY9M0Q9M0Qi dW5kZWZpPQpuZWQiJiYoZj0zRE0ueFNjYWxlKCkoTS54KCkobyxhKSkpO3ZhciB1PTNEdC5zdHls ZSgpPTNEPTNEImV4cGFuZCI/by5kaXNwbGE9CnkueTpNLnkoKShvLGEpO2MucHVzaCh7a2V5Om4u a2V5LHZhbHVlOnUsY29sb3I6bChuLG4uc2VyaWVzSW5kZXgpLHN0YWNrZWRWYT0KbHVlOm8uZGlz cGxheX0pfSksYy5yZXZlcnNlKCk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RNLnlTY2FsZSgpLmlu dmVydChpLm1vPQp1c2VZKSxwPTNESW5maW5pdHksZD0zRG51bGw7Yy5mb3JFYWNoKGZ1bmN0aW9u KGUsdCl7aD0zRE1hdGguYWJzKGgpO3ZhciBuPQo9M0RNYXRoLmFicyhlLnN0YWNrZWRWYWx1ZS55 MCkscj0zRE1hdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkpO2lmKGg+PTNEbiYmaDw9Cj0zRHIrbil7 ZD0zRHQ7cmV0dXJufX0pLGQhPTNEbnVsbCYmKGNbZF0uaGlnaGxpZ2h0PTNEITApfXZhciB2PTNE bi50aWNrRm9ybT0KYXQoKShNLngoKShzLGEpKSxtPTNEdC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/ ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZDMuZm9ybWF0PQooIi4xJSIpKGUpfTpmdW5jdGlvbihlLHQp e3JldHVybiByLnRpY2tGb3JtYXQoKShlKX07by50b29sdGlwLnBvc2l0aW9uKHtsZWY9CnQ6Zit1 LmxlZnQsdG9wOmkubW91c2VZK3UudG9wfSkuY2hhcnRDb250YWluZXIoXy5wYXJlbnROb2RlKS5l bmFibGVkKGcpLnZhbD0KdWVGb3JtYXR0ZXIobSkuZGF0YSh7dmFsdWU6dixzZXJpZXM6Y30pKCks by5yZW5kZXJHdWlkZUxpbmUoZil9KSxvLmRpc3BhdGNoPQoub24oImVsZW1lbnRNb3VzZW91dCIs ZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxOLm89Cm4o InRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtnJiZPKGUsXy5wYXJlbnROb2RlKX0pLE4ub24oImNo YW5nZVN0YXRlIixmdW5jdD0KaW9uKGUpe3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1bmRlZmluZWQi JiZ5Lmxlbmd0aD0zRD0zRD0zRGUuZGlzYWJsZWQubGVuZ3RoPQomJih5LmZvckVhY2goZnVuY3Rp b24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtuXX0pLFMuZGlzYWJsZWQ9M0RlLmRpc2E9 CmJsZWQpLHR5cGVvZiBlLnN0eWxlIT0zRCJ1bmRlZmluZWQiJiZ0LnN0eWxlKGUuc3R5bGUpLE0u dXBkYXRlKCl9KX0pLE19dmFyID0KdD0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCksbj0zRGUubW9k ZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vPQpkZWxzLmxlZ2VuZCgpLHM9 M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgpLHU9M0R7dG9w OjM9CjAscmlnaHQ6MjUsYm90dG9tOjUwLGxlZnQ6NjB9LGE9M0RudWxsLGY9M0RudWxsLGw9M0Rl LnV0aWxzLmRlZmF1bHRDb2xvcigpLD0KYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCEwLHY9M0Qh MSxtPTNEITEsZz0zRCEwLHk9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JlPQp0dXJuIjxoMz4iK2Ur IjwvaDM+IisiPHA+IituKyIgb24gIit0KyI8L3A+In0sYix3LEU9M0RkMy5mb3JtYXQoIiwuMmYi KSxTPQo9M0R7c3R5bGU6dC5zdHlsZSgpfSx4PTNEbnVsbCxUPTNEIk5vIERhdGEgQXZhaWxhYmxl LiIsTj0zRGQzLmRpc3BhdGNoKCJ0b289Cmx0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNo YW5nZSIsImNoYW5nZVN0YXRlIiksQz0zRDI1MCxrPTNEWyJTdGFja2VkIj0KLCJTdHJlYW0iLCJF eHBhbmRlZCJdLEw9M0R7fSxBPTNEMDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNyks ci5vcmllPQpudCh2PyJyaWdodCI6ImxlZnQiKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTz0zRGZ1 bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1s9CjBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBv c1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKT0KKGkucG9pbnQs aS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludElu ZGV4KSksbD0KPTNEeShpLnNlcmllcy5rZXksYSxmLGksTSk7ZS50b29sdGlwLnNob3coW28sdV0s bCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpPQp9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJ0b29s dGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGU9Ci5wb3NbMV0r dS50b3BdLE4udG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJ0b29sdGlwSGlkZSIsZnVu Y3Rpb24oZSl7Tj0KLnRvb2x0aXBIaWRlKGUpfSksTi5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9u KCl7ZyYmZS50b29sdGlwLmNsZWFudXAoKX0pLE0uPQpkaXNwYXRjaD0zRE4sTS5zdGFja2VkPTNE dCxNLmxlZ2VuZD0zRGksTS5jb250cm9scz0zRHMsTS54QXhpcz0zRG4sTS55QXhpcz0KPTNEcixN LmludGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJlYmluZChNLHQsIngiLCJ5Iiwic2l6ZSIsInhTY2Fs ZSIsInlTY2FsZSIsPQoieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXpl RG9tYWluIiwiaW50ZXJhY3RpdmUiLCJ1c2VWb3Jvbm89CmkiLCJvZmZzZXQiLCJvcmRlciIsInN0 eWxlIiwiY2xpcEVkZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJpbnRlcj0KcG9s YXRlIiksTS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKE0pLE0ubWFyZ2luPTNE ZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8odS50b3A9M0R0eXBlb2YgZS50 b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dS50b3AsdS5yaWc9Cmh0PTNEdHlwZW9mIGUucmlnaHQh PTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUuYm90dG9tPTNEdHlwZW9mIGUuYm90dD0K b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20sdS5sZWZ0PTNEdHlwZW9mIGUubGVm dCE9M0QidW5kZWZpbmVkIj9lPQoubGVmdDp1LmxlZnQsTSk6dX0sTS53aWR0aD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxNKTo9CmF9LE0uaGVpZ2h0PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLE0pOmZ9LE0uY29sb3I9M0Rm dT0KbmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZS51dGlscy5nZXRDb2xv cihuKSxpLmNvbG9yKGwpLHQuY29sPQpvcihsKSxNKTpsfSxNLnNob3dDb250cm9scz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxNKTo9CmN9LE0uc2hvd0xlZ2Vu ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxNKTpofSxNLnNo b3dYQT0KeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLE0p OnB9LE0uc2hvd1lBeGlzPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o ZD0zRGUsTSk6ZH0sTS5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh2PTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxNKTp2fSxNLnVz ZUludGVyYT0KY3RpdmVHdWlkZWxpbmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obT0zRGUsZT0zRD0zRD0zRCEwJiYoPQpNLmludGVyYWN0aXZlKCExKSxNLnVzZVZvcm9u b2koITEpKSxNKTptfSxNLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMu bGVuZ3RoPyh5PTNEZSxNKTp5fSxNLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndD0KaD8oZz0zRGUsTSk6Z30sTS50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEPQplLE0pOnl9LE0uc3RhdGU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsTSk6U30sTS5kZWZhdWw9CnRTdGF0 ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxNKTp4fSxNLm5v RGF0YT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLE0pOlR9 LE0udHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oQT0zRGUsTSk6QX0sTS5jb250cm9sc0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBh cmd1bWVudHMubGVuZ3RoPyhrPTNEZSxNKTprfSxNLmNvbnRyb2xMYWJlbHM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoP3R5cGVvZiBlIT0zRCJvYmplY3QiP0w6KEw9M0Rl LE0pOkx9LHIuc2V0VGlja0Zvcm1hdD0zRHIudGlja0Zvcm1hPQp0LHIudGlja0Zvcm1hdD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxyKTpFfSxNfX0oKSxkZWY9 CmluZSgicGx1Z2luL3BsdWdpbnMvbnZkMy9udi5kMyIsZnVuY3Rpb24oKXt9KSxkZWZpbmUoInBs dWdpbi9jaGFydHMvbnZkMy9jbz0KbW1vbi9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9mb3Jtcy9k ZWZhdWx0IiwicGx1Z2luL3BsdWdpbnMvbnZkMy9udi5kMyJdLGZ1PQpuY3Rpb24oZSl7cmV0dXJu ICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLGNhdGVnb3J5OiIiLGxpYnJhcnk6Ik5WRDMiLHRh Zzo9CiJzdmciLGtleXdvcmRzOiJzbWFsbCJ9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQz L2Jhci9jb25maWciLFsicGx1Z2luLz0KY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiUmVnPQp1bGFyIixjYXRlZ29y eToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlz X2xhYmU9Cmw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9y IHktYXhpcyIsaXNfbnVtZXJpYzohMH19fT0KKX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQz L2Jhcl9zdGFja2VkL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tPQptb24vY29uZmln Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJTdGFja2VkIixj YXRlZ29yeTo9CiJCYXIgZGlhZ3JhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgt YXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMD0KLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZh bHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1PQpnaW4vY2hh cnRzL252ZDMvYmFyX2hvcml6b250YWwvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21t b24vY29uZmlnIl09CixmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6 Ikhvcml6b250YWwiLGNhdGVnb3J5OiJCYXIgZGlhZz0KcmFtcyIsc2V0dGluZ3M6e3hfYXhpc190 eXBlOntpbml0OiJoaWRlIn19LGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtPQpheGlz Iixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBm b3IgeS1heGlzIixpc189Cm51bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252 ZDMvYmFyX2hvcml6b250YWxfc3RhY2tlZC9jb25maWciLD0KWyJwbHVnaW4vY2hhcnRzL252ZDMv Y29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0PQpp dGxlOiJTdGFja2VkIGhvcml6b250YWwiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMiLHNldHRpbmdz Ont4X2F4aXNfdHlwZTp7aW49Cml0OiJoaWRlIn19LGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMg Zm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpcz0KX3VuaXF1ZTohMH0seTp7dGl0 bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2lu PQovY2hhcnRzL252ZDMvbGluZV9mb2N1cy9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2Nv bW1vbi9jb25maWciXSxmdW5jdGk9Cm9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRs ZToiTGluZSB3aXRoIGZvY3VzIixjYXRlZ29yeToiT3RoZXJzIix6bz0Kb21hYmxlOiJuYXRpdmUi LGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0 bzohPQowLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1l cmljOiEwfX19KX0pLGRlZmluZSgicGw9CnVnaW4vY2hhcnRzL252ZDMvcGllL2NvbmZpZyIsWyJw bHVnaW4vcGx1Z2lucy9udmQzL252LmQzIl0sZnVuY3Rpb24oKXtyZXR1cj0KbiAkLmV4dGVuZCgh MCx7fSx7dGl0bGU6IlBpZSBjaGFydCIsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIixsaWJyYXJ5OiJO VkQzIix0PQphZzoic3ZnIixrZXl3b3Jkczoic21hbGwiLGNvbHVtbnM6e2xhYmVsOnt0aXRsZToi TGFiZWxzIixpc19sYWJlbDohMCxpc19hdXQ9Cm86ITB9LHk6e3RpdGxlOiJWYWx1ZXMiLGlzX251 bWVyaWM6ITB9fSxzZXR0aW5nczp7bWFpbl9zZXBhcmF0b3I6e3R5cGU6InNlcD0KYXJhdG9yIix0 aXRsZToiUGllIGNoYXJ0IHNldHRpbmdzIn0sZG9udXRfcmF0aW86e3RpdGxlOiJEb251dCByYXRp byIsaW5mbzoiPQpEZXRlcm1pbmUgaG93IGxhcmdlIHRoZSBkb251dCBob2xlIHdpbGwgYmUuIix0 eXBlOiJzZWxlY3QiLGluaXQ6IjAuNSIsZGF0YTo9Clt7bGFiZWw6IjUwJSIsdmFsdWU6IjAuNSJ9 LHtsYWJlbDoiMjUlIix2YWx1ZToiMC4yNSJ9LHtsYWJlbDoiMTAlIix2YWx1ZToiMD0KLjEwIn0s e2xhYmVsOiIwJSIsdmFsdWU6IjAifV19LHNob3dfbGVnZW5kOnt0aXRsZToiU2hvdyBsZWdlbmQi LGluZm86IldvdWxkPQogeW91IGxpa2UgdG8gYWRkIGEgbGVnZW5kPyIsdHlwZToicmFkaW9idXR0 b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6Ilk9CmVzIix2YWx1ZToidHJ1ZSJ9LHtsYWJl bDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sbGFiZWxfc2VwYXJhdG9yOnt0eXBlOiJzZXBhcj0KYXRv ciIsdGl0bGU6IkxhYmVsIHNldHRpbmdzIn0sbGFiZWxfdHlwZTp7dGl0bGU6IkRvbnV0IGxhYmVs IixpbmZvOiJXaGF0IHdvPQp1bGQgeW91IGxpa2UgdG8gc2hvdyBmb3IgZWFjaCBzbGljZT8iLHR5 cGU6InNlbGVjdCIsaW5pdDoicGVyY2VudCIsZGF0YTpbe2w9CmFiZWw6Ii0tIE5vdGhpbmcgLS0i LHZhbHVlOiJoaWRlIixoaWRlOiJsYWJlbF9vdXRzaWRlIn0se2xhYmVsOiJMYWJlbCBjb2x1bT0K biIsdmFsdWU6ImtleSIsc2hvdzoibGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiVmFsdWUgY29sdW1u Iix2YWx1ZToidmFsdWUiLHNoPQpvdzoibGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiUGVyY2VudGFn ZSIsdmFsdWU6InBlcmNlbnQiLHNob3c6ImxhYmVsX291dHNpZGU9CiJ9XX0sbGFiZWxfb3V0c2lk ZTp7dGl0bGU6IlNob3cgb3V0c2lkZSIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBsYWJl bD0KcyBvdXRzaWRlIHRoZSBkb251dD8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJmYWxzZSIs ZGF0YTpbe2xhYmVsOiJZZXMiLHZhPQpsdWU6InRydWUifSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFs c2UifV19LHVzZV9wYW5lbHM6e2luaXQ6InRydWUiLGhpZGU6ITB9fX09Cil9KSxkZWZpbmUoInBs dWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mdWxsL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRz L252ZD0KMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9 LGUse3RpdGxlOiJFeHBhbmRlZCIsem9vPQptYWJsZTohMCxjYXRlZ29yeToiQXJlYSBjaGFydHMi LGtleXdvcmRzOiJkZWZhdWx0IHNtYWxsIixjb2x1bW5zOnt4Ont0aXRsZTo9CiJWYWx1ZXMgZm9y IHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJW YWx1ZXMgZj0Kb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2No YXJ0cy9udmQzL3N0YWNrZWRhcmVhX3N0cmVhPQptL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252 ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCg9CiEwLHt9LGUs e3RpdGxlOiJTdHJlYW0iLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsem9vbWFibGU6ITAsa2V5d29y ZHM6ImRlZmF1bD0KdCBzbWFsbCIsc2hvd21heG1pbjohMCxjb2x1bW5zOnt4Ont0aXRsZToiVmFs dWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzPQpfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6 e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWY9CmluZSgi cGx1Z2luL2NoYXJ0cy9udmQzL2hpc3RvZ3JhbS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQz L2NvbW1vbi9jb25maT0KZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0 aXRsZToiSGlzdG9ncmFtIixjYXRlZ29yeToiRGF0YSBwPQpyb2Nlc3NpbmcgKHJlcXVpcmVzICdj aGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6Imhpc3RvZ3JhbSIsa2V5d289CnJk czoic21hbGwgbWVkaXVtIGxhcmdlIixjb2x1bW5zOnt5Ont0aXRsZToiT2JzZXJ2YXRpb25zIixp c19udW1lcmljOiEwfX0scz0KZXR0aW5nczp7eF9heGlzX2xhYmVsOntpbml0OiJWYWx1ZXMifSx5 X2F4aXNfbGFiZWw6e2luaXQ6IkRlbnNpdHkifSx5X2F4aXNfPQp0eXBlOntpbml0OiJmIn0seV9h eGlzX3ByZWNpc2lvbjp7aW5pdDoiLjIifX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQ9 CjMvbGluZS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5j dGlvbihlKXtyZXR1cm4gJC5leD0KdGVuZCghMCx7fSxlLHt0aXRsZToiTGluZSBjaGFydCIsY2F0 ZWdvcnk6Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1uczp7eDp7PQp0aXRsZToiVmFsdWVzIGZv ciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToi VmE9Cmx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9j aGFydHMvbnZkMy9zY2F0dGVyL2Nvbj0KZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24v Y29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9PQosZSx7dGl0bGU6IlNj YXR0ZXIgcGxvdCIsY2F0ZWdvcnk6Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1uczp7eDp7dGl0 bGU6IlY9CmFsdWVzIGZvciB4LWF4aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGxlOiJWYWx1ZXMg Zm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMD0KfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9u dmQzL3N0YWNrZWRhcmVhL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvPQpjb21tb24vY29u ZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJSZWd1bGFy Iix6b29tYWI9CmxlOiEwLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29yZHM6ImRlZmF1bHQg c21hbGwiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYT0KbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDoh MCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgPQp5LWF4aXMi LGlzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24v Y29uZmlnIixbInA9Cmx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhdWx0Il0sZnVuY3Rpb24oZSl7cmV0 dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLD0KY2F0ZWdvcnk6IiIsbGlicmFyeToianFQ bG90Iix0YWc6ImRpdiIsem9vbWFibGU6ITAsa2V5d29yZHM6Im1lZGl1bSIsc2V0dGluPQpnczp7 c2VwYXJhdG9yX2dyaWQ6e3RpdGxlOiJHcmlkcyIsdHlwZToic2VwYXJhdG9yIn0seF9heGlzX2dy aWQ6e3RpdGxlOiJBeGk9CnMgZ3JpZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBncmlk IGxpbmVzIGZvciB0aGUgWCBheGlzPyIsdHlwZToicmFkaT0Kb2J1dHRvbiIsaW5pdDoiZmFsc2Ui LGRhdGE6W3tsYWJlbDoiT24iLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJPZmYiLHZhbHVlOiJmPQph bHNlIn1dfSx5X2F4aXNfZ3JpZDp7dGl0bGU6IkF4aXMgZ3JpZCIsaW5mbzoiV291bGQgeW91IGxp a2UgdG8gc2hvdyBncmlkIGw9CmluZXMgZm9yIHRoZSBZIGF4aXM/Iix0eXBlOiJyYWRpb2J1dHRv biIsaW5pdDoidHJ1ZSIsZGF0YTpbe2xhYmVsOiJPbiIsdmFsdT0KZToidHJ1ZSJ9LHtsYWJlbDoi T2ZmIix2YWx1ZToiZmFsc2UifV19fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9i PQphci9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpZyJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGU9Cm5kKCEwLHt9LGUse3RpdGxlOiJSZWd1bGFyIixjYXRlZ29y eToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdT0KZXMgZm9yIHgtYXhpcyIs aXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9y IHktPQpheGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBs b3QvbGluZS9jb25maWciLFsicGx1Z2k9Cm4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIl0s ZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOj0KIkxpbmUgY2hhcnQi LGNhdGVnb3J5OiJPdGhlcnMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIs aXNfbGFiPQplbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBm b3IgeS1heGlzIixpc19udW1lcmljOiEwfX09Cn0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2px cGxvdC9zY2F0dGVyL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jbz0KbW1vbi9jb25m aWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlNjYXR0ZXIg cGxvdCIsY2F0PQplZ29yeToiT3RoZXJzIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4 LWF4aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGw9CmU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19u dW1lcmljOiEwfX0sc2V0dGluZ3M6e3hfYXhpc19ncmlkOntpbml0OiJ0cnVlIn19fT0KKX0pLGRl ZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYm94cGxvdC9jb25maWciLFsicGx1Z2luL2NoYXJ0 cy9qcXBsb3QvY29tPQptb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEw LHt9LGUse3RpdGxlOiJCb3ggcGxvdCIsY2F0ZWdvcnk9CjoiRGF0YSBwcm9jZXNzaW5nIChyZXF1 aXJlcyAnY2hhcnRzJyB0b29sIGZyb20gVG9vbHNoZWQpIixsaWJyYXJ5OiJqcVBsb3QiLD0KdGFn OiJkaXYiLGV4ZWN1dGU6ImJveHBsb3QiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNv bHVtbnM6e3k6e3RpdGxlPQo6Ik9ic2VydmF0aW9ucyIsaXNfbnVtZXJpYzohMH19LHNldHRpbmdz OntzaG93X2xlZ2VuZDp7aW5pdDoiZmFsc2UifX19KX0pLGQ9CmVmaW5lKCJwbHVnaW4vY2hhcnRz L2pxcGxvdC9oaXN0b2dyYW1fZGlzY3JldGUvY29uZmlnIixbInBsdWdpbi9jaGFydHMvanFwbD0K b3QvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0 aXRsZToiRGlzY3JldGUgSGlzPQp0b2dyYW0iLGNhdGVnb3J5OiJEYXRhIHByb2Nlc3NpbmcgKHJl cXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGU9CnhlY3V0ZToiaGlzdG9ncmFt ZGlzY3JldGUiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3g6e3RpdGxl Oj0KIk9ic2VydmF0aW9ucyIsaXNfbGFiZWw6ITB9fSxzZXR0aW5nczp7eF9heGlzX2xhYmVsOntp bml0OiJCcmVha3MifSx5X2F4aXNfPQpsYWJlbDp7aW5pdDoiRGVuc2l0eSJ9fX0pfSksZGVmaW5l KCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwL2NvbmZpZyIsWyI9CnBsdWdpbi9jaGFydHMv Zm9ybXMvZGVmYXVsdCJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRs ZToiSD0KZWF0bWFwIixjYXRlZ29yeToiT3RoZXJzIixsaWJyYXJ5OiJDdXN0b20iLHRhZzoic3Zn IixrZXl3b3Jkczoic21hbGwiLHpvb21hPQpibGU6ITAsY29sdW1uczp7eDp7dGl0bGU6IkNvbHVt biBsYWJlbHMiLGlzX2xhYmVsOiEwLGlzX251bWVyaWM6ITAsaXNfdW5pcXU9CmU6ITB9LHk6e3Rp dGxlOiJSb3cgbGFiZWxzIixpc19sYWJlbDohMCxpc19udW1lcmljOiEwLGlzX3VuaXF1ZTohMH0s ejp7dGl0bD0KZToiT2JzZXJ2YXRpb24iLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7dXNlX3Bh bmVsczp7aW5pdDoidHJ1ZSIsaGlkZTohMH0sPQpjb2xvcl9zZXQ6e3RpdGxlOiJDb2xvciBzY2hl bWUiLGluZm86IlNlbGVjdCBhIGNvbG9yIHNjaGVtZSBmb3IgeW91ciBoZWF0bWE9CnAiLHR5cGU6 InNlbGVjdCIsaW5pdDoiamV0IixkYXRhOlt7bGFiZWw6IkNvbGQtdG8tSG90Iix2YWx1ZToiaG90 In0se2xhYmVsOj0KIkNvb2wiLHZhbHVlOiJjb29sIn0se2xhYmVsOiJDb3BwZXIiLHZhbHVlOiJj b3BwZXIifSx7bGFiZWw6IkdyYXkgc2NhbGUiLHZhPQpsdWU6ImdyYXkifSx7bGFiZWw6IkpldCIs dmFsdWU6ImpldCJ9LHtsYWJlbDoiTm8tR3JlZW4iLHZhbHVlOiJub19ncmVlbiJ9LHs9CmxhYmVs OiJPY2VhbiIsdmFsdWU6Im9jZWFuIn0se2xhYmVsOiJQb2xhciIsdmFsdWU6InBvbGFyIn0se2xh YmVsOiJSZWQtdG8tRz0KcmVlbiIsdmFsdWU6InJlZGdyZWVuIn0se2xhYmVsOiJSZWQtdG8tZ3Jl ZW4gKHNhdHVyYXRlZCkiLHZhbHVlOiJyZWQyZ3JlZW4iPQp9LHtsYWJlbDoiUmVsaWVmIix2YWx1 ZToicmVsaWVmIn0se2xhYmVsOiJTZWlzbW9ncmFwaCIsdmFsdWU6InNlaXMifSx7bGFiZWw9Cjoi U2VhbGFuZCIsdmFsdWU6InNlYWxhbmQifSx7bGFiZWw6IlNwbGl0Iix2YWx1ZToic3BsaXQifSx7 bGFiZWw6Ild5c2l3eWciLD0KdmFsdWU6Ind5c2l3eWcifV19LHVybF90ZW1wbGF0ZTp7dGl0bGU6 IlVybCB0ZW1wbGF0ZSIsaW5mbzoiRW50ZXIgYSB1cmwgdG8gPQpsaW5rIHRoZSBsYWJlbHMgd2l0 aCBleHRlcm5hbCBzb3VyY2VzLiBVc2UgX19MQUJFTF9fIGFzIHBsYWNlaG9sZGVyLiIsdHlwZTo9 CiJ0ZXh0Iixpbml0OiIiLHBsYWNlaG9sZGVyOiJodHRwOi8vc29tZXVybC5jb20/aWQ9M0RfX0xB QkVMX18ifX19KX0pLGRlZmluZT0KKCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwX2NsdXN0 ZXIvY29uZmlnIixbInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRtPQphcC9jb25maWciXSxmdW5j dGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkNsdXN0ZXJlZCBIZWF0bWFw Iiw9CmNhdGVnb3J5OiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJv bSBUb29sc2hlZCkiLGV4ZWN1dGU6Ij0KaGVhdG1hcCIsa2V5d29yZHM6InNtYWxsIG1lZGl1bSBs YXJnZSJ9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy90eXBlcyIsWyJwPQpsdWdpbi9jaGFydHMv bnZkMy9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIs InBsdWc9CmluL2NoYXJ0cy9udmQzL2Jhcl9ob3Jpem9udGFsL2NvbmZpZyIsInBsdWdpbi9jaGFy dHMvbnZkMy9iYXJfaG9yaXpvbnRhbF9zdD0KYWNrZWQvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9u dmQzL2xpbmVfZm9jdXMvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3BpPQplL2NvbmZpZyIs InBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mdWxsL2NvbmZpZyIsInBsdWdpbi9jaGFy dHMvbnZkMy89CnN0YWNrZWRhcmVhX3N0cmVhbS9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMv aGlzdG9ncmFtL2NvbmZpZyIsInBsdWdpbi9jaD0KYXJ0cy9udmQzL2xpbmUvY29uZmlnIiwicGx1 Z2luL2NoYXJ0cy9udmQzL3NjYXR0ZXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9uPQp2ZDMvc3Rh Y2tlZGFyZWEvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYmFyL2NvbmZpZyIsInBsdWdp bi9jaGFydHMvanE9CnBsb3QvbGluZS9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9zY2F0 dGVyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbD0Kb3QvYm94cGxvdC9jb25maWciLCJwbHVn aW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlzY3JldGUvY29uZmlnIiwicGx1Z2luPQovY2hh cnRzL290aGVycy9oZWF0bWFwL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRtYXBf Y2x1c3Rlci9jb25maWc9CiJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSxhLGYsbCxjLGgscCxk LHYsbSxnLHkpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leD0KdGVuZCh7ZGVmYXVsdHM6e252ZDNf YmFyOmUsbnZkM19iYXJfc3RhY2tlZDp0LG52ZDNfYmFyX2hvcml6b250YWw6bixudmQzX2JhPQpy X2hvcml6b250YWxfc3RhY2tlZDpyLG52ZDNfbGluZV9mb2N1czppLG52ZDNfc3RhY2tlZGFyZWE6 YyxudmQzX3N0YWNrZWRhcmU9CmFfZnVsbDpvLG52ZDNfc3RhY2tlZGFyZWFfc3RyZWFtOnUsbnZk M19waWU6cyxudmQzX2xpbmU6ZixudmQzX3NjYXR0ZXI6bCxudj0KZDNfaGlzdG9ncmFtOmEsanFw bG90X2JhcjpoLGpxcGxvdF9oaXN0b2dyYW1fZGlzY3JldGU6bSxqcXBsb3RfbGluZTpwLGpxcGxv PQp0X3NjYXR0ZXI6ZCxqcXBsb3RfYm94cGxvdDp2LG90aGVyc19oZWF0bWFwOmcsb3RoZXJzX2hl YXRtYXBfY2x1c3Rlcjp5fX0pfSk9CixkZWZpbmUoInBsdWdpbi9hcHAiLFsibXZjL3VpL3VpLW1v ZGFsIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJtdmMvdWkvdWktbWlzYz0KIiwidXRpbHMvdXRpbHMi LCJwbHVnaW4vbGlicmFyeS9qb2JzIiwicGx1Z2luL2xpYnJhcnkvZGF0YXNldHMiLCJwbHVnaW4v bGliPQpyYXJ5L3N0b3JhZ2UiLCJ1dGlscy9kZWZlcnJlZCIsInBsdWdpbi92aWV3cy92aWV3ZXIi LCJwbHVnaW4vdmlld3MvZWRpdG9yIiw9CiJwbHVnaW4vbW9kZWxzL2NvbmZpZyIsInBsdWdpbi9t b2RlbHMvY2hhcnQiLCJwbHVnaW4vY2hhcnRzL3R5cGVzIl0sZnVuY3Rpbz0KbihlLHQsbixyLGks cyxvLHUsYSxmLGwsYyxoKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6 ZnVuY3RpPQpvbih0KXt0aGlzLm9wdGlvbnM9M0R0LEdhbGF4eSYmR2FsYXh5Lm1vZGFsP3RoaXMu bW9kYWw9M0RHYWxheHkubW9kYWw6dGhpcy49Cm1vZGFsPTNEbmV3IGUuVmlldyx0aGlzLmNvbmZp Zz0zRG5ldyBsLHRoaXMudHlwZXM9M0RuZXcgaCx0aGlzLmNoYXJ0PTNEbmV3ID0KYyx0aGlzLmpv YnM9M0RuZXcgaSh0aGlzKSx0aGlzLmRhdGFzZXRzPTNEbmV3IHModGhpcyksdGhpcy5zdG9yYWdl PTNEbmV3IG8oPQp0aGlzKSx0aGlzLmRlZmVycmVkPTNEbmV3IHUsdGhpcy52aWV3ZXJfdmlldz0z RG5ldyBhKHRoaXMpLHRoaXMuZWRpdG9yX3ZpZXc9Cj0zRG5ldyBmKHRoaXMpLHRoaXMuJGVsLmFw cGVuZCh0aGlzLnZpZXdlcl92aWV3LiRlbCksdGhpcy4kZWwuYXBwZW5kKHRoaXMuZT0KZGl0b3Jf dmlldy4kZWwpO2lmKCF0aGlzLnN0b3JhZ2UubG9hZCgpKXRoaXMuZ28oImVkaXRvciIpO2Vsc2V7 dGhpcy5nbygidmllPQp3ZXIiKTt2YXIgbj0zRHRoaXM7dGhpcy5kZWZlcnJlZC5leGVjdXRlKGZ1 bmN0aW9uKCl7bi5jaGFydC50cmlnZ2VyKCJyZWRyYXc9CiIpfSl9fSxnbzpmdW5jdGlvbihlKXsk KCIudG9vbHRpcCIpLmhpZGUoKTtzd2l0Y2goZSl7Y2FzZSJlZGl0b3IiOnRoaXMuZWRpdD0Kb3Jf dmlldy5zaG93KCksdGhpcy52aWV3ZXJfdmlldy5oaWRlKCk7YnJlYWs7Y2FzZSJ2aWV3ZXIiOnRo aXMuZWRpdG9yX3ZpZXcuPQpoaWRlKCksdGhpcy52aWV3ZXJfdmlldy5zaG93KCl9fSxjaGFydFBh dGg6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnNwbGl0KC9fKC49CispLyk7cmV0dXJuIHQubGVuZ3Ro Pj0zRDI/dFswXSsiLyIrdFsxXTooY29uc29sZS5kZWJ1ZygiRkFJTEVEIEFwcDpjaGFydFBhdD0K aCgpIC0gSW52YWxpZCBmb3JtYXQ6ICIrZSksdW5kZWZpbmVkKX19KX0pOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKK2RlZmluZSgibXZjL3VpL3VpLW1vZGFsIixbXSxmdW5jdGlvbigpe3Zh ciBlPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2VsTWFpPQpuOiJib2R5IixvcHRpb25zRGVmYXVs dDp7dGl0bGU6InVpLW1vZGFsIixib2R5OiIiLGJhY2tkcm9wOiEwLGhlaWdodDpudWxsLHc9Cmlk dGg6bnVsbCxjbG9zaW5nX2V2ZW50czohMSxjbG9zaW5nX2NhbGxiYWNrOm51bGx9LGJ1dHRvbkxp c3Q6e30saW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGUpe2UmJnRoaXMuX2NyZWF0ZShlKX0sc2hvdzpm dW5jdGlvbihlKXt0aGlzLmluaXRpYWxpemUoZSksdGhpcy5vPQpwdGlvbnMuaGVpZ2h0Pyh0aGlz LiRib2R5LmNzcygiaGVpZ2h0Iix0aGlzLm9wdGlvbnMuaGVpZ2h0KSx0aGlzLiRib2R5LmNzcyg9 CiJvdmVyZmxvdyIsImhpZGRlbiIpKTp0aGlzLiRib2R5LmNzcygibWF4LWhlaWdodCIsJCh3aW5k b3cpLmhlaWdodCgpLzIpLHRoaT0Kcy5vcHRpb25zLndpZHRoJiZ0aGlzLiRkaWFsb2cuY3NzKCJ3 aWR0aCIsdGhpcy5vcHRpb25zLndpZHRoKSx0aGlzLnZpc2libGU/PQp0aGlzLiRlbC5zaG93KCk6 dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITB9LGhpZGU6ZnVuY3Rpb24o KXs9CnRoaXMudmlzaWJsZT0zRCExLHRoaXMuJGVsLmZhZGVPdXQoImZhc3QiKSx0aGlzLm9wdGlv bnMuY2xvc2luZ19jYWxsYmFjayYmdD0KaGlzLm9wdGlvbnMuY2xvc2luZ19jYWxsYmFjaygpfSxl bmFibGVCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLmJ1dHRvPQpuTGlzdFtlXTt0aGlz LiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVkIiwhMSl9LGRpc2FibGVCdXR0b246 ZnVuY3Q9CmlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRidXR0b25zLmZp bmQoIiMiK3QpLnByb3AoImRpc2FibGVkIj0KLCEwKX0sc2hvd0J1dHRvbjpmdW5jdGlvbihlKXt2 YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRidXR0b25zLmZpbmQoPQoiIyIrdCkuc2hv dygpfSxoaWRlQnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5idXR0b25MaXN0W2VdO3Ro aXMuJGJ1dHQ9Cm9ucy5maW5kKCIjIit0KS5oaWRlKCl9LGdldEJ1dHRvbjpmdW5jdGlvbihlKXt2 YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTtyZT0KdHVybiB0aGlzLiRidXR0b25zLmZpbmQoIiMi K3QpfSxzY3JvbGxUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYm9keS5zY3JvPQpsbFRvcCgp fSxfY3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0aGlzLm9wdGlvbnM9M0RfLmRlZmF1 bHRzKGUsdGhpcy49Cm9wdGlvbnNEZWZhdWx0KSx0aGlzLm9wdGlvbnMuYm9keT0zRD0zRCJwcm9n cmVzcyImJih0aGlzLm9wdGlvbnMuYm9keT0zRCQoJz0KPGRpdiBjbGFzcz0zRCJwcm9ncmVzcyBw cm9ncmVzcy1zdHJpcGVkIGFjdGl2ZSI+PGRpdiBjbGFzcz0zRCJwcm9ncmVzcy1iYXIgPQpwcm9n cmVzcy1iYXItaW5mbyIgc3R5bGU9M0Qid2lkdGg6MTAwJSI+PC9kaXY+PC9kaXY+JykpLHRoaXMu JGVsJiYodGhpcy4kZWw9Ci5yZW1vdmUoKSwkKGRvY3VtZW50KS5vZmYoImtleXVwLnVpLW1vZGFs IikpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZT0KKHRoaXMub3B0aW9ucy50aXRsZSkp LHRoaXMuJGRpYWxvZz0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiPQpv ZHk9M0R0aGlzLiRlbC5maW5kKCIubW9kYWwtYm9keSIpLHRoaXMuJGZvb3Rlcj0zRHRoaXMuJGVs LmZpbmQoIi5tb2RhbC1mb289CnRlciIpLHRoaXMuJGJ1dHRvbnM9M0R0aGlzLiRlbC5maW5kKCIu YnV0dG9ucyIpLHRoaXMuJGJhY2tkcm9wPTNEdGhpcy4kZWwuZj0KaW5kKCIubW9kYWwtYmFja2Ry b3AiKSx0aGlzLiRib2R5Lmh0bWwodGhpcy5vcHRpb25zLmJvZHkpLHRoaXMub3B0aW9ucy5iYWNr PQpkcm9wfHx0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKTtpZih0aGlzLm9wdGlvbnMu YnV0dG9ucyl7dGhpcy5idXR0b249Ckxpc3Q9M0R7fTt2YXIgbj0zRDA7JC5lYWNoKHRoaXMub3B0 aW9ucy5idXR0b25zLGZ1bmN0aW9uKGUscil7dmFyIGk9M0QiYnV0dD0Kb24tIituKys7dC4kYnV0 dG9ucy5hcHBlbmQoJCgnPGJ1dHRvbiBpZD0zRCInK2krJyI+PC9idXR0b24+JykudGV4dChlKS5j bGljPQprKHIpKS5hcHBlbmQoIiAiKSx0LmJ1dHRvbkxpc3RbZV09M0RpfSl9ZWxzZSB0aGlzLiRm b290ZXIuaGlkZSgpOyQodGhpcy5lbE09CmFpbikuYXBwZW5kKCQodGhpcy5lbCkpLHRoaXMub3B0 aW9ucy5jbG9zaW5nX2V2ZW50cyYmKCQoZG9jdW1lbnQpLm9uKCJrZXl1cD0KLnVpLW1vZGFsIixm dW5jdGlvbihlKXtlLmtleUNvZGU9M0Q9M0QyNyYmdC5oaWRlKCl9KSx0aGlzLiRlbC5maW5kKCIu bW9kYWwtPQpiYWNrZHJvcCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0LmhpZGUoKX0pKX0sX3Rl bXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic9CjxkaXYgY2xhc3M9M0QidWktbW9kYWwgbW9kYWwi PjxkaXYgY2xhc3M9M0QibW9kYWwtYmFja2Ryb3AgZmFkZSBpbiIgc3R5bGU9Cj0zRCJ6LWluZGV4 OiAtMTsiPjwvZGl2PjxkaXYgY2xhc3M9M0QibW9kYWwtZGlhbG9nIj48ZGl2IGNsYXNzPTNEIm1v ZGFsLWNvbj0KdGVudCI+PGRpdiBjbGFzcz0zRCJtb2RhbC1oZWFkZXIiPjxidXR0b24gdHlwZT0z RCJidXR0b24iIGNsYXNzPTNEImNsb3NlIiBzPQp0eWxlPTNEImRpc3BsYXk6IG5vbmU7Ij4mdGlt ZXM7PC9idXR0b24+PGg0IGNsYXNzPTNEInRpdGxlIj4nK2UrIjwvaDQ+IisiPC89CmRpdj4iKyc8 ZGl2IGNsYXNzPTNEIm1vZGFsLWJvZHkiIHN0eWxlPTNEInBvc2l0aW9uOiBzdGF0aWM7Ij48L2Rp dj4nKyc8ZGl2ID0KY2xhc3M9M0QibW9kYWwtZm9vdGVyIj4nKyc8ZGl2IGNsYXNzPTNEImJ1dHRv bnMiIHN0eWxlPTNEImZsb2F0OiByaWdodDsiPjwvPQpkaXY+JysiPC9kaXY+IisiPC9kaXYiKyI8 L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3OmV9fSksZnVuY3Rpb24oKXt2YXI9CiBlPTNE dGhpcyx0PTNEZS5fLG49M0RBcnJheS5wcm90b3R5cGUscj0zRE9iamVjdC5wcm90b3R5cGUsaT0z REZ1bmN0aW9uLnBybz0KdG90eXBlLHM9M0RuLnB1c2gsbz0zRG4uc2xpY2UsdT0zRG4uY29uY2F0 LGE9M0RyLnRvU3RyaW5nLGY9M0RyLmhhc093blByb3BlPQpydHksbD0zREFycmF5LmlzQXJyYXks Yz0zRE9iamVjdC5rZXlzLGg9M0RpLmJpbmQscD0zRGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGE9Cm5j ZW9mIHApcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKGUpO3Ro aXMuX3dyYXBwZWQ9M0RlfT0KO3R5cGVvZiBleHBvcnRzIT0zRCJ1bmRlZmluZWQiPyh0eXBlb2Yg bW9kdWxlIT0zRCJ1bmRlZmluZWQiJiZtb2R1bGUuZXhwb3J0PQpzJiYoZXhwb3J0cz0zRG1vZHVs ZS5leHBvcnRzPTNEcCksZXhwb3J0cy5fPTNEcCk6ZS5fPTNEcCxwLlZFUlNJT049M0QiMS43LjA9 CiI7dmFyIGQ9M0RmdW5jdGlvbihlLHQsbil7aWYodD0zRD0zRD0zRHZvaWQgMClyZXR1cm4gZTtz d2l0Y2gobj0zRD0zRG51bGw/Mz0KOm4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJu IGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4sPQpyKXtyZXR1cm4gZS5jYWxs KHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGUuY2FsbCh0LG4s ciw9CmkpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKG4scixpLHMpe3JldHVybiBlLmNhbGwodCxu LHIsaSxzKX19cmV0dXJuIGZ1bmN0aT0Kb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9 fTtwLml0ZXJhdGVlPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPTNEPQo9M0RudWxsP3AuaWRl bnRpdHk6cC5pc0Z1bmN0aW9uKGUpP2QoZSx0LG4pOnAuaXNPYmplY3QoZSk/cC5tYXRjaGVzKGUp OnAucHI9Cm9wZXJ0eShlKX0scC5lYWNoPTNEcC5mb3JFYWNoPTNEZnVuY3Rpb24oZSx0LG4pe2lm KGU9M0Q9M0RudWxsKXJldHVybiBlO3Q9Cj0zRGQodCxuKTt2YXIgcixpPTNEZS5sZW5ndGg7aWYo aT0zRD0zRD0zRCtpKWZvcihyPTNEMDtyPGk7cisrKXQoZVtyXSxyLGUpOz0KZWxzZXt2YXIgcz0z RHAua2V5cyhlKTtmb3Iocj0zRDAsaT0zRHMubGVuZ3RoO3I8aTtyKyspdChlW3Nbcl1dLHNbcl0s ZSl9cmV0PQp1cm4gZX0scC5tYXA9M0RwLmNvbGxlY3Q9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0z RD0zRG51bGwpcmV0dXJuW107dD0zRHAuaXQ9CmVyYXRlZSh0LG4pO3ZhciByPTNEZS5sZW5ndGgh PTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSksaT0zRChyfHxlKS5sZW5ndGgscz0KPTNEQXJyYXko aSksbztmb3IodmFyIHU9M0QwO3U8aTt1Kyspbz0zRHI/clt1XTp1LHNbdV09M0R0KGVbb10sbyxl KTtyZXR1cm4gPQpzfTt2YXIgdj0zRCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0 aWFsIHZhbHVlIjtwLnJlZHVjZT0zRHAuZm9sZGw9Cj0zRHAuaW5qZWN0PTNEZnVuY3Rpb24oZSx0 LG4scil7ZT0zRD0zRG51bGwmJihlPTNEW10pLHQ9M0RkKHQsciw0KTt2YXIgaT0zRD0KZS5sZW5n dGghPTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSkscz0zRChpfHxlKS5sZW5ndGgsbz0zRDAsdTtp Zihhcmd1bWVudHMuPQpsZW5ndGg8Myl7aWYoIXMpdGhyb3cgbmV3IFR5cGVFcnJvcih2KTtuPTNE ZVtpP2lbbysrXTpvKytdfWZvcig7bzxzO28rKyl1PQo9M0RpP2lbb106byxuPTNEdChuLGVbdV0s dSxlKTtyZXR1cm4gbn0scC5yZWR1Y2VSaWdodD0zRHAuZm9sZHI9M0RmdW5jdGlvbig9CmUsdCxu LHIpe2U9M0Q9M0RudWxsJiYoZT0zRFtdKSx0PTNEZCh0LHIsNCk7dmFyIGk9M0RlLmxlbmd0aCE9 M0Q9M0QrZS5sZW5ndD0KaCYmcC5rZXlzKGUpLHM9M0QoaXx8ZSkubGVuZ3RoLG87aWYoYXJndW1l bnRzLmxlbmd0aDwzKXtpZighcyl0aHJvdyBuZXcgVHlwPQplRXJyb3Iodik7bj0zRGVbaT9pWy0t c106LS1zXX13aGlsZShzLS0pbz0zRGk/aVtzXTpzLG49M0R0KG4sZVtvXSxvLGUpO3JldHU9CnJu IG59LHAuZmluZD0zRHAuZGV0ZWN0PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PTNE cC5pdGVyYXRlZSh0LG4pLD0KcC5zb21lKGUsZnVuY3Rpb24oZSxuLGkpe2lmKHQoZSxuLGkpKXJl dHVybiByPTNEZSwhMH0pLHJ9LHAuZmlsdGVyPTNEcC5zZWxlPQpjdD0zRGZ1bmN0aW9uKGUsdCxu KXt2YXIgcj0zRFtdO3JldHVybiBlPTNEPTNEbnVsbD9yOih0PTNEcC5pdGVyYXRlZSh0LG4pLHA9 Ci5lYWNoKGUsZnVuY3Rpb24oZSxuLGkpe3QoZSxuLGkpJiZyLnB1c2goZSl9KSxyKX0scC5yZWpl Y3Q9M0RmdW5jdGlvbihlLHQsbj0KKXtyZXR1cm4gcC5maWx0ZXIoZSxwLm5lZ2F0ZShwLml0ZXJh dGVlKHQpKSxuKX0scC5ldmVyeT0zRHAuYWxsPTNEZnVuY3Rpb24oPQplLHQsbil7aWYoZT0zRD0z RG51bGwpcmV0dXJuITA7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0zRGUubGVuZ3RoIT0zRD0z RCs9CmUubGVuZ3RoJiZwLmtleXMoZSksaT0zRChyfHxlKS5sZW5ndGgscyxvO2ZvcihzPTNEMDtz PGk7cysrKXtvPTNEcj9yW3NdOnM7aT0KZighdChlW29dLG8sZSkpcmV0dXJuITF9cmV0dXJuITB9 LHAuc29tZT0zRHAuYW55PTNEZnVuY3Rpb24oZSx0LG4pe2lmKGU9M0Q9Cj0zRG51bGwpcmV0dXJu ITE7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0zRGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0aCYm cC5rZT0KeXMoZSksaT0zRChyfHxlKS5sZW5ndGgscyxvO2ZvcihzPTNEMDtzPGk7cysrKXtvPTNE cj9yW3NdOnM7aWYodChlW29dLG8sZSkpPQpyZXR1cm4hMH1yZXR1cm4hMX0scC5jb250YWlucz0z RHAuaW5jbHVkZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9M0Q9M0RudWw9Cmw/ITE6KGUubGVu Z3RoIT0zRD0zRCtlLmxlbmd0aCYmKGU9M0RwLnZhbHVlcyhlKSkscC5pbmRleE9mKGUsdCk+PTNE MCl9LHAuaT0KbnZva2U9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEby5jYWxsKGFyZ3VtZW50cywy KSxyPTNEcC5pc0Z1bmN0aW9uKHQpO3JldHVyPQpuIHAubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJu KHI/dDplW3RdKS5hcHBseShlLG4pfSl9LHAucGx1Y2s9M0RmdW5jdGlvbihlLHQ9Cil7cmV0dXJu IHAubWFwKGUscC5wcm9wZXJ0eSh0KSl9LHAud2hlcmU9M0RmdW5jdGlvbihlLHQpe3JldHVybiBw LmZpbHRlcihlLD0KcC5tYXRjaGVzKHQpKX0scC5maW5kV2hlcmU9M0RmdW5jdGlvbihlLHQpe3Jl dHVybiBwLmZpbmQoZSxwLm1hdGNoZXModCkpfSxwPQoubWF4PTNEZnVuY3Rpb24oZSx0LG4pe3Zh ciByPTNELUluZmluaXR5LGk9M0QtSW5maW5pdHkscyxvO2lmKHQ9M0Q9M0RudWxsJiY9CmUhPTNE bnVsbCl7ZT0zRGUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2U6cC52YWx1ZXMoZSk7Zm9yKHZh ciB1PTNEMCxhPTNEZT0KLmxlbmd0aDt1PGE7dSsrKXM9M0RlW3VdLHM+ciYmKHI9M0RzKX1lbHNl IHQ9M0RwLml0ZXJhdGVlKHQsbikscC5lYWNoKGUsZnVuPQpjdGlvbihlLG4scyl7bz0zRHQoZSxu LHMpO2lmKG8+aXx8bz0zRD0zRD0zRC1JbmZpbml0eSYmcj0zRD0zRD0zRC1JbmZpbml0eSk9CnI9 M0RlLGk9M0RvfSk7cmV0dXJuIHJ9LHAubWluPTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNESW5m aW5pdHksaT0zREluZmluaT0KdHkscyxvO2lmKHQ9M0Q9M0RudWxsJiZlIT0zRG51bGwpe2U9M0Rl Lmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9lOnAudmFsdWVzPQooZSk7Zm9yKHZhciB1PTNEMCxh PTNEZS5sZW5ndGg7dTxhO3UrKylzPTNEZVt1XSxzPHImJihyPTNEcyl9ZWxzZSB0PTNEcC5pdGU9 CnJhdGVlKHQsbikscC5lYWNoKGUsZnVuY3Rpb24oZSxuLHMpe289M0R0KGUsbixzKTtpZihvPGl8 fG89M0Q9M0Q9M0RJbmZpbml0eT0KJiZyPTNEPTNEPTNESW5maW5pdHkpcj0zRGUsaT0zRG99KTty ZXR1cm4gcn0scC5zaHVmZmxlPTNEZnVuY3Rpb24oZSl7dmFyIHQ9Cj0zRGUmJmUubGVuZ3RoPTNE PTNEPTNEK2UubGVuZ3RoP2U6cC52YWx1ZXMoZSksbj0zRHQubGVuZ3RoLHI9M0RBcnJheShuKTtm bz0Kcih2YXIgaT0zRDAscztpPG47aSsrKXM9M0RwLnJhbmRvbSgwLGkpLHMhPTNEPTNEaSYmKHJb aV09M0RyW3NdKSxyW3NdPTNEdFtpPQpdO3JldHVybiByfSxwLnNhbXBsZT0zRGZ1bmN0aW9uKGUs dCxuKXtyZXR1cm4gdD0zRD0zRG51bGx8fG4/KGUubGVuZ3RoIT0zRD0KPTNEK2UubGVuZ3RoJiYo ZT0zRHAudmFsdWVzKGUpKSxlW3AucmFuZG9tKGUubGVuZ3RoLTEpXSk6cC5zaHVmZmxlKGUpLnNs aWNlPQooMCxNYXRoLm1heCgwLHQpKX0scC5zb3J0Qnk9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJu IHQ9M0RwLml0ZXJhdGVlKHQsbikscC49CnBsdWNrKHAubWFwKGUsZnVuY3Rpb24oZSxuLHIpe3Jl dHVybnt2YWx1ZTplLGluZGV4Om4sY3JpdGVyaWE6dChlLG4scil9fSkucz0Kb3J0KGZ1bmN0aW9u KGUsdCl7dmFyIG49M0RlLmNyaXRlcmlhLHI9M0R0LmNyaXRlcmlhO2lmKG4hPTNEPTNEcil7aWYo bj5yfHxuPQo9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuIDE7aWYobjxyfHxyPTNEPTNEPTNEdm9pZCAw KXJldHVybi0xfXJldHVybiBlLmluZGV4LXQ9Ci5pbmRleH0pLCJ2YWx1ZSIpfTt2YXIgbT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGk9M0R7fTtyZT0KdHVybiBuPTNE cC5pdGVyYXRlZShuLHIpLHAuZWFjaCh0LGZ1bmN0aW9uKHIscyl7dmFyIG89M0RuKHIscyx0KTtl KGkscixvKX0pPQosaX19O3AuZ3JvdXBCeT0zRG0oZnVuY3Rpb24oZSx0LG4pe3AuaGFzKGUsbik/ ZVtuXS5wdXNoKHQpOmVbbl09M0RbdF19KSxwLmk9Cm5kZXhCeT0zRG0oZnVuY3Rpb24oZSx0LG4p e2Vbbl09M0R0fSkscC5jb3VudEJ5PTNEbShmdW5jdGlvbihlLHQsbil7cC5oYXMoZT0KLG4pP2Vb bl0rKzplW25dPTNEMX0pLHAuc29ydGVkSW5kZXg9M0RmdW5jdGlvbihlLHQsbixyKXtuPTNEcC5p dGVyYXRlZShuLHIsPQoxKTt2YXIgaT0zRG4odCkscz0zRDAsbz0zRGUubGVuZ3RoO3doaWxlKHM8 byl7dmFyIHU9M0RzK28+Pj4xO24oZVt1XSk8aT9zPQo9M0R1KzE6bz0zRHV9cmV0dXJuIHN9LHAu dG9BcnJheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlP3AuaXNBcnJheShlKT9vLmNhbGw9CihlKTpl Lmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9wLm1hcChlLHAuaWRlbnRpdHkpOnAudmFsdWVzKGUp OltdfSxwLnNpemU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEPTNEbnVsbD8wOmUubGVuZ3Ro PTNEPTNEPTNEK2UubGVuZ3RoP2UubGVuZ3RoOnAuaz0KZXlzKGUpLmxlbmd0aH0scC5wYXJ0aXRp b249M0RmdW5jdGlvbihlLHQsbil7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0zRFtdPQosaT0z RFtdO3JldHVybiBwLmVhY2goZSxmdW5jdGlvbihlLG4scyl7KHQoZSxuLHMpP3I6aSkucHVzaChl KX0pLFtyLGldfSxwLmY9Cmlyc3Q9M0RwLmhlYWQ9M0RwLnRha2U9M0RmdW5jdGlvbihlLHQsbil7 cmV0dXJuIGU9M0Q9M0RudWxsP3ZvaWQgMDp0PTNEPTNEbj0KdWxsfHxuP2VbMF06dDwwP1tdOm8u Y2FsbChlLDAsdCl9LHAuaW5pdGlhbD0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby5jYWxsPQoo ZSwwLE1hdGgubWF4KDAsZS5sZW5ndGgtKHQ9M0Q9M0RudWxsfHxuPzE6dCkpKX0scC5sYXN0PTNE ZnVuY3Rpb24oZSx0LG4pe3I9CmV0dXJuIGU9M0Q9M0RudWxsP3ZvaWQgMDp0PTNEPTNEbnVsbHx8 bj9lW2UubGVuZ3RoLTFdOm8uY2FsbChlLE1hdGgubWF4KGUubD0KZW5ndGgtdCwwKSl9LHAucmVz dD0zRHAudGFpbD0zRHAuZHJvcD0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gby5jYWxsKGUsdD0K PTNEPTNEbnVsbHx8bj8xOnQpfSxwLmNvbXBhY3Q9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5maWx0 ZXIoZSxwLmlkZW50aXR5KX07PQp2YXIgZz0zRGZ1bmN0aW9uKGUsdCxuLHIpe2lmKHQmJnAuZXZl cnkoZSxwLmlzQXJyYXkpKXJldHVybiB1LmFwcGx5KHIsZSk7Zm89CnIodmFyIGk9M0QwLG89M0Rl Lmxlbmd0aDtpPG87aSsrKXt2YXIgYT0zRGVbaV07IXAuaXNBcnJheShhKSYmIXAuaXNBcmd1bWVu dD0KcyhhKT9ufHxyLnB1c2goYSk6dD9zLmFwcGx5KHIsYSk6ZyhhLHQsbixyKX1yZXR1cm4gcn07 cC5mbGF0dGVuPTNEZnVuY3Rpb24oPQplLHQpe3JldHVybiBnKGUsdCwhMSxbXSl9LHAud2l0aG91 dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmRpZmZlcmVuY2UoZSxvLmM9CmFsbChhcmd1bWVudHMs MSkpfSxwLnVuaXE9M0RwLnVuaXF1ZT0zRGZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9M0Q9M0RudWxs KXJldD0KdXJuW107cC5pc0Jvb2xlYW4odCl8fChyPTNEbixuPTNEdCx0PTNEITEpLG4hPTNEbnVs bCYmKG49M0RwLml0ZXJhdGVlKG4scikpPQo7dmFyIGk9M0RbXSxzPTNEW107Zm9yKHZhciBvPTNE MCx1PTNEZS5sZW5ndGg7bzx1O28rKyl7dmFyIGE9M0RlW29dO2lmKHQpKCE9Cm98fHMhPTNEPTNE YSkmJmkucHVzaChhKSxzPTNEYTtlbHNlIGlmKG4pe3ZhciBmPTNEbihhLG8sZSk7cC5pbmRleE9m KHMsZik8MD0KJiYocy5wdXNoKGYpLGkucHVzaChhKSl9ZWxzZSBwLmluZGV4T2YoaSxhKTwwJiZp LnB1c2goYSl9cmV0dXJuIGl9LHAudW5pb249Cj0zRGZ1bmN0aW9uKCl7cmV0dXJuIHAudW5pcShn KGFyZ3VtZW50cywhMCwhMCxbXSkpfSxwLmludGVyc2VjdGlvbj0zRGZ1bmN0aT0Kb24oZSl7aWYo ZT0zRD0zRG51bGwpcmV0dXJuW107dmFyIHQ9M0RbXSxuPTNEYXJndW1lbnRzLmxlbmd0aDtmb3Io dmFyIHI9M0QwPQosaT0zRGUubGVuZ3RoO3I8aTtyKyspe3ZhciBzPTNEZVtyXTtpZihwLmNvbnRh aW5zKHQscykpY29udGludWU7Zm9yKHZhciBvPQo9M0QxO288bjtvKyspaWYoIXAuY29udGFpbnMo YXJndW1lbnRzW29dLHMpKWJyZWFrO289M0Q9M0Q9M0RuJiZ0LnB1c2gocyl9cmU9CnR1cm4gdH0s cC5kaWZmZXJlbmNlPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RnKG8uY2FsbChhcmd1bWVudHMsMSks ITAsITAsW10pOz0KcmV0dXJuIHAuZmlsdGVyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIXAuY29udGFp bnModCxlKX0pfSxwLnppcD0zRGZ1bmN0aW9uKGUpPQp7aWYoZT0zRD0zRG51bGwpcmV0dXJuW107 dmFyIHQ9M0RwLm1heChhcmd1bWVudHMsImxlbmd0aCIpLmxlbmd0aCxuPTNEQXJyYXk9Cih0KTtm b3IodmFyIHI9M0QwO3I8dDtyKyspbltyXT0zRHAucGx1Y2soYXJndW1lbnRzLHIpO3JldHVybiBu fSxwLm9iamVjdD0zRD0KZnVuY3Rpb24oZSx0KXtpZihlPTNEPTNEbnVsbClyZXR1cm57fTt2YXIg bj0zRHt9O2Zvcih2YXIgcj0zRDAsaT0zRGUubGVuZ3RoPQo7cjxpO3IrKyl0P25bZVtyXV09M0R0 W3JdOm5bZVtyXVswXV09M0RlW3JdWzFdO3JldHVybiBufSxwLmluZGV4T2Y9M0RmdW5jdGk9Cm9u KGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRDAsaT0zRGUubGVuZ3RoO2lm KG4pe2lmKHR5cGVvZiBuIT0KPTNEIm51bWJlciIpcmV0dXJuIHI9M0RwLnNvcnRlZEluZGV4KGUs dCksZVtyXT0zRD0zRD0zRHQ/cjotMTtyPTNEbjwwP01hdGguPQptYXgoMCxpK24pOm59Zm9yKDty PGk7cisrKWlmKGVbcl09M0Q9M0Q9M0R0KXJldHVybiByO3JldHVybi0xfSxwLmxhc3RJbmRleE89 CmY9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuLTE7dmFyIHI9M0RlLmxl bmd0aDt0eXBlb2Ygbj0zRD0zRD0KIm51bWJlciImJihyPTNEbjwwP3IrbisxOk1hdGgubWluKHIs bisxKSk7d2hpbGUoLS1yPj0zRDApaWYoZVtyXT0zRD0zRD0zRHQpPQpyZXR1cm4gcjtyZXR1cm4t MX0scC5yYW5nZT0zRGZ1bmN0aW9uKGUsdCxuKXthcmd1bWVudHMubGVuZ3RoPD0zRDEmJih0PTNE ZXw9CnwwLGU9M0QwKSxuPTNEbnx8MTt2YXIgcj0zRE1hdGgubWF4KE1hdGguY2VpbCgodC1lKS9u KSwwKSxpPTNEQXJyYXkocik7Zm9yKD0KdmFyIHM9M0QwO3M8cjtzKyssZSs9M0RuKWlbc109M0Rl O3JldHVybiBpfTt2YXIgeT0zRGZ1bmN0aW9uKCl7fTtwLmJpbmQ9M0RmPQp1bmN0aW9uKGUsdCl7 dmFyIG4scjtpZihoJiZlLmJpbmQ9M0Q9M0Q9M0RoKXJldHVybiBoLmFwcGx5KGUsby5jYWxsKGFy Z3VtZW49CnRzLDEpKTtpZighcC5pc0Z1bmN0aW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkJp bmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdT0KbmN0aW9uIik7cmV0dXJuIG49M0RvLmNhbGwoYXJn dW1lbnRzLDIpLHI9M0RmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiByPQope3kucHJvdG90 eXBlPTNEZS5wcm90b3R5cGU7dmFyIGk9M0RuZXcgeTt5LnByb3RvdHlwZT0zRG51bGw7dmFyIHM9 M0RlLmFwcGw9CnkoaSxuLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBwLmlzT2Jq ZWN0KHMpP3M6aX1yZXR1cm4gZS5hcHBseSh0LD0Kbi5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykp KX0scn0scC5wYXJ0aWFsPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RvLmNhbGwoYXJnPQp1bWVudHMs MSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49M0QwLHI9M0R0LnNsaWNlKCk7Zm9yKHZhciBpPTNE MCxzPTNEci5sZW49Cmd0aDtpPHM7aSsrKXJbaV09M0Q9M0Q9M0RwJiYocltpXT0zRGFyZ3VtZW50 c1tuKytdKTt3aGlsZShuPGFyZ3VtZW50cy5sZW5ndD0KaClyLnB1c2goYXJndW1lbnRzW24rK10p O3JldHVybiBlLmFwcGx5KHRoaXMscil9fSxwLmJpbmRBbGw9M0RmdW5jdGlvbihlKXt2PQphciB0 LG49M0Rhcmd1bWVudHMubGVuZ3RoLHI7aWYobjw9M0QxKXRocm93IG5ldyBFcnJvcigiYmluZEFs bCBtdXN0IGJlIHBhc3M9CmVkIGZ1bmN0aW9uIG5hbWVzIik7Zm9yKHQ9M0QxO3Q8bjt0Kyspcj0z RGFyZ3VtZW50c1t0XSxlW3JdPTNEcC5iaW5kKGVbcl0sZT0KKTtyZXR1cm4gZX0scC5tZW1vaXpl PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGZ1bmN0aW9uKHIpe3ZhciBpPTNEbi5jYWNoZSxzPQo9 M0R0P3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnI7cmV0dXJuIHAuaGFzKGkscyl8fChpW3NdPTNE ZS5hcHBseSh0aGlzLGFyZ3U9Cm1lbnRzKSksaVtzXX07cmV0dXJuIG4uY2FjaGU9M0R7fSxufSxw LmRlbGF5PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRG8uY2FsbD0KKGFyZ3VtZW50cywyKTtyZXR1 cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51bGwsbil9LHQpfSxwLmRl PQpmZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5kZWxheS5hcHBseShwLFtlLDFdLmNvbmNhdChv LmNhbGwoYXJndW1lbnRzLDEpKSk9Cn0scC50aHJvdHRsZT0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIg cixpLHMsbz0zRG51bGwsdT0zRDA7bnx8KG49M0R7fSk7dmFyIGE9Cj0zRGZ1bmN0aW9uKCl7dT0z RG4ubGVhZGluZz0zRD0zRD0zRCExPzA6cC5ub3coKSxvPTNEbnVsbCxzPTNEZS5hcHBseShyLGkp LD0Kb3x8KHI9M0RpPTNEbnVsbCl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBmPTNEcC5ub3coKTsh dSYmbi5sZWFkaW5nPTNEPTNEPTNEPQohMSYmKHU9M0RmKTt2YXIgbD0zRHQtKGYtdSk7cmV0dXJu IHI9M0R0aGlzLGk9M0Rhcmd1bWVudHMsbDw9M0QwfHxsPnQ/KGNsZWE9CnJUaW1lb3V0KG8pLG89 M0RudWxsLHU9M0RmLHM9M0RlLmFwcGx5KHIsaSksb3x8KHI9M0RpPTNEbnVsbCkpOiFvJiZuLnRy YWlsaT0KbmchPTNEPTNEITEmJihvPTNEc2V0VGltZW91dChhLGwpKSxzfX0scC5kZWJvdW5jZT0z RGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPQoscyxvLHUsYT0zRGZ1bmN0aW9uKCl7dmFyIGY9M0Rw Lm5vdygpLW87Zjx0JiZmPjA/cj0zRHNldFRpbWVvdXQoYSx0LWYpOihyPQo9M0RudWxsLG58fCh1 PTNEZS5hcHBseShzLGkpLHJ8fChzPTNEaT0zRG51bGwpKSl9O3JldHVybiBmdW5jdGlvbigpe3M9 M0R0aGk9CnMsaT0zRGFyZ3VtZW50cyxvPTNEcC5ub3coKTt2YXIgZj0zRG4mJiFyO3JldHVybiBy fHwocj0zRHNldFRpbWVvdXQoYSx0KSksZj0KJiYodT0zRGUuYXBwbHkocyxpKSxzPTNEaT0zRG51 bGwpLHV9fSxwLndyYXA9M0RmdW5jdGlvbihlLHQpe3JldHVybiBwLnBhcnRpPQphbCh0LGUpfSxw Lm5lZ2F0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFlLmFwcGx5KHRo aXMsYXJndW09CmVudHMpfX0scC5jb21wb3NlPTNEZnVuY3Rpb24oKXt2YXIgZT0zRGFyZ3VtZW50 cyx0PTNEZS5sZW5ndGgtMTtyZXR1cm4gZnVuYz0KdGlvbigpe3ZhciBuPTNEdCxyPTNEZVt0XS5h cHBseSh0aGlzLGFyZ3VtZW50cyk7d2hpbGUobi0tKXI9M0RlW25dLmNhbGwodGhpPQpzLHIpO3Jl dHVybiByfX0scC5hZnRlcj0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1l PDEpcmV0dXJuIHQ9Ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxwLmJlZm9yZT0zRGZ1bmN0aW9u KGUsdCl7dmFyIG47cmV0dXJuIGZ1bmN0aW9uKCl7cj0KZXR1cm4tLWU+MD9uPTNEdC5hcHBseSh0 aGlzLGFyZ3VtZW50cyk6dD0zRG51bGwsbn19LHAub25jZT0zRHAucGFydGlhbChwLmJlPQpmb3Jl LDIpLHAua2V5cz0zRGZ1bmN0aW9uKGUpe2lmKCFwLmlzT2JqZWN0KGUpKXJldHVybltdO2lmKGMp cmV0dXJuIGMoZSk7dmE9CnIgdD0zRFtdO2Zvcih2YXIgbiBpbiBlKXAuaGFzKGUsbikmJnQucHVz aChuKTtyZXR1cm4gdH0scC52YWx1ZXM9M0RmdW5jdGlvbj0KKGUpe3ZhciB0PTNEcC5rZXlzKGUp LG49M0R0Lmxlbmd0aCxyPTNEQXJyYXkobik7Zm9yKHZhciBpPTNEMDtpPG47aSsrKXJbaV09Cj0z RGVbdFtpXV07cmV0dXJuIHJ9LHAucGFpcnM9M0RmdW5jdGlvbihlKXt2YXIgdD0zRHAua2V5cyhl KSxuPTNEdC5sZW5ndGgscj0KPTNEQXJyYXkobik7Zm9yKHZhciBpPTNEMDtpPG47aSsrKXJbaV09 M0RbdFtpXSxlW3RbaV1dXTtyZXR1cm4gcn0scC5pbnZlcnQ9Cj0zRGZ1bmN0aW9uKGUpe3ZhciB0 PTNEe30sbj0zRHAua2V5cyhlKTtmb3IodmFyIHI9M0QwLGk9M0RuLmxlbmd0aDtyPGk7cisrKT0K dFtlW25bcl1dXT0zRG5bcl07cmV0dXJuIHR9LHAuZnVuY3Rpb25zPTNEcC5tZXRob2RzPTNEZnVu Y3Rpb24oZSl7dmFyIHQ9M0RbPQpdO2Zvcih2YXIgbiBpbiBlKXAuaXNGdW5jdGlvbihlW25dKSYm dC5wdXNoKG4pO3JldHVybiB0LnNvcnQoKX0scC5leHRlbmQ9M0Q9CmZ1bmN0aW9uKGUpe2lmKCFw LmlzT2JqZWN0KGUpKXJldHVybiBlO3ZhciB0LG47Zm9yKHZhciByPTNEMSxpPTNEYXJndW1lbnRz Lj0KbGVuZ3RoO3I8aTtyKyspe3Q9M0Rhcmd1bWVudHNbcl07Zm9yKG4gaW4gdClmLmNhbGwodCxu KSYmKGVbbl09M0R0W25dKX1yZXR1PQpybiBlfSxwLnBpY2s9M0RmdW5jdGlvbihlLHQsbil7dmFy IHI9M0R7fSxpO2lmKGU9M0Q9M0RudWxsKXJldHVybiByO2lmKHAuaXM9CkZ1bmN0aW9uKHQpKXt0 PTNEZCh0LG4pO2ZvcihpIGluIGUpe3ZhciBzPTNEZVtpXTt0KHMsaSxlKSYmKHJbaV09M0RzKX19 ZWxzZT0Ke3ZhciBhPTNEdS5hcHBseShbXSxvLmNhbGwoYXJndW1lbnRzLDEpKTtlPTNEbmV3IE9i amVjdChlKTtmb3IodmFyIGY9M0QwLGw9Cj0zRGEubGVuZ3RoO2Y8bDtmKyspaT0zRGFbZl0saSBp biBlJiYocltpXT0zRGVbaV0pfXJldHVybiByfSxwLm9taXQ9M0RmdW5jdD0KaW9uKGUsdCxuKXtp ZihwLmlzRnVuY3Rpb24odCkpdD0zRHAubmVnYXRlKHQpO2Vsc2V7dmFyIHI9M0RwLm1hcCh1LmFw cGx5KFtdPQosby5jYWxsKGFyZ3VtZW50cywxKSksU3RyaW5nKTt0PTNEZnVuY3Rpb24oZSx0KXty ZXR1cm4hcC5jb250YWlucyhyLHQpfX1yZXQ9CnVybiBwLnBpY2soZSx0LG4pfSxwLmRlZmF1bHRz PTNEZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuIGU7Zm9yKD0KdmFyIHQ9M0Qx LG49M0Rhcmd1bWVudHMubGVuZ3RoO3Q8bjt0Kyspe3ZhciByPTNEYXJndW1lbnRzW3RdO2Zvcih2 YXIgaSBpbiByPQopZVtpXT0zRD0zRD0zRHZvaWQgMCYmKGVbaV09M0RyW2ldKX1yZXR1cm4gZX0s cC5jbG9uZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CnAuaXNPYmplY3QoZSk/cC5pc0FycmF5KGUp P2Uuc2xpY2UoKTpwLmV4dGVuZCh7fSxlKTplfSxwLnRhcD0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1 cm4gdChlKSxlfTt2YXIgYj0zRGZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9M0Q9M0Q9M0R0KXJldHVy biBlIT0zRD0zRDB8PQp8MS9lPTNEPTNEPTNEMS90O2lmKGU9M0Q9M0RudWxsfHx0PTNEPTNEbnVs bClyZXR1cm4gZT0zRD0zRD0zRHQ7ZSBpbnN0YW5jZW89CmYgcCYmKGU9M0RlLl93cmFwcGVkKSx0 IGluc3RhbmNlb2YgcCYmKHQ9M0R0Ll93cmFwcGVkKTt2YXIgaT0zRGEuY2FsbChlKTtpZj0KKGkh PTNEPTNEYS5jYWxsKHQpKXJldHVybiExO3N3aXRjaChpKXtjYXNlIltvYmplY3QgUmVnRXhwXSI6 Y2FzZSJbb2JqZWN0IFN0PQpyaW5nXSI6cmV0dXJuIiIrZT0zRD0zRCIiK3Q7Y2FzZSJbb2JqZWN0 IE51bWJlcl0iOmlmKCtlIT0zRD0zRCtlKXJldHVybit0IT0KPTNEPTNEK3Q7cmV0dXJuK2U9M0Q9 M0Q9M0QwPzEvK2U9M0Q9M0Q9M0QxL3Q6K2U9M0Q9M0Q9M0QrdDtjYXNlIltvYmplY3QgRGF0PQpl XSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rZT0zRD0zRD0zRCt0fWlmKHR5cGVvZiBl IT0zRCJvYmplY3QifHx0eXA9CmVvZiB0IT0zRCJvYmplY3QiKXJldHVybiExO3ZhciBzPTNEbi5s ZW5ndGg7d2hpbGUocy0tKWlmKG5bc109M0Q9M0Q9M0RlKXJldD0KdXJuIHJbc109M0Q9M0Q9M0R0 O3ZhciBvPTNEZS5jb25zdHJ1Y3Rvcix1PTNEdC5jb25zdHJ1Y3RvcjtpZihvIT0zRD0zRHUmJiJj PQpvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKHAuaXNGdW5jdGlvbihvKSYm byBpbnN0YW5jZW9mIG8mJnAuaXM9CkZ1bmN0aW9uKHUpJiZ1IGluc3RhbmNlb2YgdSkpcmV0dXJu ITE7bi5wdXNoKGUpLHIucHVzaCh0KTt2YXIgZixsO2lmKGk9M0Q9Cj0zRD0zRCJbb2JqZWN0IEFy cmF5XSIpe2Y9M0RlLmxlbmd0aCxsPTNEZj0zRD0zRD0zRHQubGVuZ3RoO2lmKGwpd2hpbGUoZi0t KT0KaWYoIShsPTNEYihlW2ZdLHRbZl0sbixyKSkpYnJlYWt9ZWxzZXt2YXIgYz0zRHAua2V5cyhl KSxoO2Y9M0RjLmxlbmd0aCxsPTNEPQpwLmtleXModCkubGVuZ3RoPTNEPTNEPTNEZjtpZihsKXdo aWxlKGYtLSl7aD0zRGNbZl07aWYoIShsPTNEcC5oYXModCxoKSYmYig9CmVbaF0sdFtoXSxuLHIp KSlicmVha319cmV0dXJuIG4ucG9wKCksci5wb3AoKSxsfTtwLmlzRXF1YWw9M0RmdW5jdGlvbihl LHQpez0KcmV0dXJuIGIoZSx0LFtdLFtdKX0scC5pc0VtcHR5PTNEZnVuY3Rpb24oZSl7aWYoZT0z RD0zRG51bGwpcmV0dXJuITA7aWYocC5pPQpzQXJyYXkoZSl8fHAuaXNTdHJpbmcoZSl8fHAuaXNB cmd1bWVudHMoZSkpcmV0dXJuIGUubGVuZ3RoPTNEPTNEPTNEMDtmb3IodmE9CnIgdCBpbiBlKWlm KHAuaGFzKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9LHAuaXNFbGVtZW50PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIT0KIWUmJmUubm9kZVR5cGU9M0Q9M0Q9M0QxfSxwLmlzQXJyYXk9M0RsfHxmdW5jdGlv bihlKXtyZXR1cm4gYS5jYWxsKGUpPTNEPTNEPQo9M0QiW29iamVjdCBBcnJheV0ifSxwLmlzT2Jq ZWN0PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R0eXBlb2YgZTtyZXR1cm4gdD0zRD0KPTNEPTNEImZ1 bmN0aW9uInx8dD0zRD0zRD0zRCJvYmplY3QiJiYhIWV9LHAuZWFjaChbIkFyZ3VtZW50cyIsIkZ1 bmN0aW9uIiwiPQpTdHJpbmciLCJOdW1iZXIiLCJEYXRlIiwiUmVnRXhwIl0sZnVuY3Rpb24oZSl7 cFsiaXMiK2VdPTNEZnVuY3Rpb24odCl7cmV0dXI9Cm4gYS5jYWxsKHQpPTNEPTNEPTNEIltvYmpl Y3QgIitlKyJdIn19KSxwLmlzQXJndW1lbnRzKGFyZ3VtZW50cyl8fChwLmlzQXJndT0KbWVudHM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5oYXMoZSwiY2FsbGVlIil9KSx0eXBlb2YgLy4vIT0zRCJm dW5jdGlvbiImJihwPQouaXNGdW5jdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT0z RD0zRCJmdW5jdGlvbiJ8fCExfSkscC5pc0Zpbml0ZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGlz RmluaXRlKGUpJiYhaXNOYU4ocGFyc2VGbG9hdChlKSl9LHAuaXNOYU49M0RmdW5jdGlvPQpuKGUp e3JldHVybiBwLmlzTnVtYmVyKGUpJiZlIT0zRD0zRCtlfSxwLmlzQm9vbGVhbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBlPQo9M0Q9M0Q9M0QhMHx8ZT0zRD0zRD0zRCExfHxhLmNhbGwoZSk9M0Q9M0Q9 M0QiW29iamVjdCBCb29sZWFuXSJ9LHAuaXNOdWxsPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0z RD0zRD0zRG51bGx9LHAuaXNVbmRlZmluZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0KPTNEPTNE PTNEdm9pZCAwfSxwLmhhcz0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUhPTNEbnVsbCYmZi5jYWxs KGUsdCl9LHAubm9DPQpvbmZsaWN0PTNEZnVuY3Rpb24oKXtyZXR1cm4gZS5fPTNEdCx0aGlzfSxw LmlkZW50aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cn0scC5jb25zdGFudD0zRGZ1bmN0aW9u KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX0scC5ub29wPTNEZnVuY3Rpb24oKT0Ke30s cC5wcm9wZXJ0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdFtlXX19 LHAubWF0Y2hlcz0zRGZ1PQpuY3Rpb24oZSl7dmFyIHQ9M0RwLnBhaXJzKGUpLG49M0R0Lmxlbmd0 aDtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZT0zRD0zRG51bGw9CilyZXR1cm4hbjtlPTNEbmV3IE9i amVjdChlKTtmb3IodmFyIHI9M0QwO3I8bjtyKyspe3ZhciBpPTNEdFtyXSxzPTNEaVswXTtpZj0K KGlbMV0hPTNEPTNEZVtzXXx8IShzIGluIGUpKXJldHVybiExfXJldHVybiEwfX0scC50aW1lcz0z RGZ1bmN0aW9uKGUsdCxuKXt2PQphciByPTNEQXJyYXkoTWF0aC5tYXgoMCxlKSk7dD0zRGQodCxu LDEpO2Zvcih2YXIgaT0zRDA7aTxlO2krKylyW2ldPTNEdChpKTs9CnJldHVybiByfSxwLnJhbmRv bT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9M0Q9M0RudWxsJiYodD0zRGUsZT0zRDApLGUrTWF0 aD0KLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9LHAubm93PTNERGF0ZS5ub3d8fGZ1bmN0 aW9uKCl7cmV0dXJuKG5ldyBEYXRlPQopLmdldFRpbWUoKX07dmFyIHc9M0R7IiYiOiImYW1wOyIs IjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiY9CiN4Mjc7IiwiYCI6IiYj eDYwOyJ9LEU9M0RwLmludmVydCh3KSxTPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RmdW5jdGlvbih0 KXtyZT0KdHVybiBlW3RdfSxuPTNEIig/OiIrcC5rZXlzKGUpLmpvaW4oInwiKSsiKSIscj0zRFJl Z0V4cChuKSxpPTNEUmVnRXhwKG4sImciPQopO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT0z RGU9M0Q9M0RudWxsPyIiOiIiK2Usci50ZXN0KGUpP2UucmVwbGFjZShpLHQ9Cik6ZX19O3AuZXNj YXBlPTNEUyh3KSxwLnVuZXNjYXBlPTNEUyhFKSxwLnJlc3VsdD0zRGZ1bmN0aW9uKGUsdCl7aWYo ZT0zRD0zRD0KbnVsbClyZXR1cm4gdm9pZCAwO3ZhciBuPTNEZVt0XTtyZXR1cm4gcC5pc0Z1bmN0 aW9uKG4pP2VbdF0oKTpufTt2YXIgeD0zRDA7PQpwLnVuaXF1ZUlkPTNEZnVuY3Rpb24oZSl7dmFy IHQ9M0QrK3grIiI7cmV0dXJuIGU/ZSt0OnR9LHAudGVtcGxhdGVTZXR0aW5ncz0KPTNEe2V2YWx1 YXRlOi88JShbXHNcU10rPyklPi9nLGludGVycG9sYXRlOi88JT0zRChbXHNcU10rPyklPi9nLGVz Y2FwZTovPCUtPQooW1xzXFNdKz8pJT4vZ307dmFyIFQ9M0QvKC4pXi8sTj0zRHsiJyI6IiciLCJc XCI6IlxcIiwiXHIiOiJyIiwiXG4iOiJuIiwiXHU9CjIwMjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUy MDI5In0sQz0zRC9cXHwnfFxyfFxufFx1MjAyOHxcdTIwMjkvZyxrPTNEZnVuY3Rpbz0KbihlKXty ZXR1cm4iXFwiK05bZV19O3AudGVtcGxhdGU9M0RmdW5jdGlvbihlLHQsbil7IXQmJm4mJih0PTNE biksdD0zRHAuZGVmPQphdWx0cyh7fSx0LHAudGVtcGxhdGVTZXR0aW5ncyk7dmFyIHI9M0RSZWdF eHAoWyh0LmVzY2FwZXx8VCkuc291cmNlLCh0LmludGU9CnJwb2xhdGV8fFQpLnNvdXJjZSwodC5l dmFsdWF0ZXx8VCkuc291cmNlXS5qb2luKCJ8IikrInwkIiwiZyIpLGk9M0QwLHM9M0QiXz0KX3Ar PTNEJyI7ZS5yZXBsYWNlKHIsZnVuY3Rpb24odCxuLHIsbyx1KXtyZXR1cm4gcys9M0RlLnNsaWNl KGksdSkucmVwbGFjZShDPQosayksaT0zRHUrdC5sZW5ndGgsbj9zKz0zRCInK1xuKChfX3Q9M0Qo IituKyIpKT0zRD0zRG51bGw/Jyc6Xy5lc2NhcGUoX190KSk9CitcbiciOnI/cys9M0QiJytcbigo X190PTNEKCIrcisiKSk9M0Q9M0RudWxsPycnOl9fdCkrXG4nIjpvJiYocys9M0QiJztcbiIrbz0K KyJcbl9fcCs9M0QnIiksdH0pLHMrPTNEIic7XG4iLHQudmFyaWFibGV8fChzPTNEIndpdGgob2Jq fHx7fSl7XG4iK3MrIn1cbiIpPQoscz0zRCJ2YXIgX190LF9fcD0zRCcnLF9faj0zREFycmF5LnBy b3RvdHlwZS5qb2luLHByaW50PTNEZnVuY3Rpb24oKXtfX3ArPQo9M0RfX2ouY2FsbChhcmd1bWVu dHMsJycpO307XG4iK3MrInJldHVybiBfX3A7XG4iO3RyeXt2YXIgbz0zRG5ldyBGdW5jdGlvbig9 CnQudmFyaWFibGV8fCJvYmoiLCJfIixzKX1jYXRjaCh1KXt0aHJvdyB1LnNvdXJjZT0zRHMsdX12 YXIgYT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIG8uY2FsbCh0aGlzLGUscCl9LGY9M0R0LnZhcmlh YmxlfHwib2JqIjtyZXR1cm4gYS5zb3VyY2U9M0QiZnVuY3Rpb24oPQoiK2YrIil7XG4iK3MrIn0i LGF9LHAuY2hhaW49M0RmdW5jdGlvbihlKXt2YXIgdD0zRHAoZSk7cmV0dXJuIHQuX2NoYWluPTNE ITA9Cix0fTt2YXIgTD0zRGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jaGFpbj9wKGUpLmNoYWlu KCk6ZX07cC5taXhpbj0zRGZ1bmN0aT0Kb24oZSl7cC5lYWNoKHAuZnVuY3Rpb25zKGUpLGZ1bmN0 aW9uKHQpe3ZhciBuPTNEcFt0XT0zRGVbdF07cC5wcm90b3R5cGVbdF09Cj0zRGZ1bmN0aW9uKCl7 dmFyIGU9M0RbdGhpcy5fd3JhcHBlZF07cmV0dXJuIHMuYXBwbHkoZSxhcmd1bWVudHMpLEwuY2Fs bCh0aD0KaXMsbi5hcHBseShwLGUpKX19KX0scC5taXhpbihwKSxwLmVhY2goWyJwb3AiLCJwdXNo IiwicmV2ZXJzZSIsInNoaWZ0Iiwic29yPQp0Iiwic3BsaWNlIiwidW5zaGlmdCJdLGZ1bmN0aW9u KGUpe3ZhciB0PTNEbltlXTtwLnByb3RvdHlwZVtlXT0zRGZ1bmN0aW9uKCk9Cnt2YXIgbj0zRHRo aXMuX3dyYXBwZWQ7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpLChlPTNEPTNEPTNEInNoaWZ0 Inx8ZT0zRD0KPTNEPTNEInNwbGljZSIpJiZuLmxlbmd0aD0zRD0zRD0zRDAmJmRlbGV0ZSBuWzBd LEwuY2FsbCh0aGlzLG4pfX0pLHAuZWFjaChbPQoiY29uY2F0Iiwiam9pbiIsInNsaWNlIl0sZnVu Y3Rpb24oZSl7dmFyIHQ9M0RuW2VdO3AucHJvdG90eXBlW2VdPTNEZnVuY3Rpb249Cigpe3JldHVy biBMLmNhbGwodGhpcyx0LmFwcGx5KHRoaXMuX3dyYXBwZWQsYXJndW1lbnRzKSl9fSkscC5wcm90 b3R5cGUudmFsdT0KZT0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBwZWR9LHR5cGVvZiBk ZWZpbmU9M0Q9M0QiZnVuY3Rpb24iJiZkZWZpbmUuPQphbWQmJmRlZmluZSgidW5kZXJzY29yZSIs W10sZnVuY3Rpb24oKXtyZXR1cm4gcH0pfS5jYWxsKHRoaXMpLGRlZmluZSgibGlicy89CnVuZGVy c2NvcmUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHR8fGUu X319KHRoaXMpKSxkZT0KZmluZSgidXRpbHMvdXRpbHMiLFsibGlicy91bmRlcnNjb3JlIl0sZnVu Y3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIgPQpyIGluIGUpe3ZhciBpPTNEZVtyXTtp JiZ0eXBlb2YgaT0zRD0zRCJvYmplY3QiJiYobihpKSx0KGksbikpfX1mdW5jdGlvbiBuKGU9Cil7 cmV0dXJuICQoIjxkaXYvPiIpLnRleHQoZSkuaHRtbCgpfWZ1bmN0aW9uIHIoZSl7ZSBpbnN0YW5j ZW9mIEFycmF5fHwoZT0zRD0KW2VdKTtmb3IodmFyIHQgaW4gZSlpZihbIk5vbmUiLG51bGwsIm51 bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhPZihlPQpbdF0pPi0xKXJldHVybiExO3Jl dHVybiEwfWZ1bmN0aW9uIGkoZSl7dmFyIGU9M0RlLnRvU3RyaW5nKCk7aWYoZSl7ZT0zRGUucmU9 CnBsYWNlKC8sL2csIiwgIik7dmFyIHQ9M0RlLmxhc3RJbmRleE9mKCIsICIpO3JldHVybiB0IT0z RC0xJiYoZT0zRGUuc3Vic3RyKD0KMCx0KSsiIG9yICIrZS5zdWJzdHIodCsxKSksZX1yZXR1cm4i In1mdW5jdGlvbiBzKGUpe3RvcC5fX3V0aWxzX19nZXRfXz0zRHRvPQpwLl9fdXRpbHNfX2dldF9f fHx7fSxlLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bZS51cmxdPyhlLnN1Y2Nlc3MmJmUuc3Vj Y2U9CnNzKHRvcC5fX3V0aWxzX19nZXRfX1tlLnVybF0pLGNvbnNvbGUuZGVidWcoInV0aWxzLmpz OjpnZXQoKSAtIEZldGNoaW5nIGZybz0KbSBjYWNoZSBbIitlLnVybCsiXS4iKSk6byh7dXJsOmUu dXJsLGRhdGE6ZS5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dG9wLl9fPQp1dGlsc19fZ2V0X19b ZS51cmxdPTNEdCxlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0sZXJyb3I6ZnVuY3Rpb24odCl7ZS5l cnJvciY9CiZlLmVycm9yKHQpfX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9M0R7Y29udGVudFR5cGU6 ImFwcGxpY2F0aW9uL2pzb24iLHR5cGU6ZT0KLnR5cGV8fCJHRVQiLGRhdGE6ZS5kYXRhfHx7fSx1 cmw6ZS51cmx9O3QudHlwZT0zRD0zRCJHRVQifHx0LnR5cGU9M0Q9M0QiREVMPQpFVEUiPyh0LnVy bC5pbmRleE9mKCI/Iik9M0Q9M0QtMT90LnVybCs9M0QiPyI6dC51cmwrPTNEIiYiLHQudXJsPTNE dC51cmwrJC49CnBhcmFtKHQuZGF0YSksdC5kYXRhPTNEbnVsbCk6KHQuZGF0YVR5cGU9M0QianNv biIsdC51cmw9M0R0LnVybCx0LmRhdGE9M0RKUz0KT04uc3RyaW5naWZ5KHQuZGF0YSkpLCQuYWph eCh0KS5kb25lKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PTNEPTNEInN0cmluZyIpPQp0cnl7dD0z RHQucmVwbGFjZSgiSW5maW5pdHksIiwnIkluZmluaXR5IiwnKSx0PTNEalF1ZXJ5LnBhcnNlSlNP Tih0KX1jYXRjaCg9Cm4pe2NvbnNvbGUuZGVidWcobil9ZS5zdWNjZXNzJiZlLnN1Y2Nlc3ModCl9 KS5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBuPTNEbnVsbD0KO3RyeXtuPTNEalF1ZXJ5LnBhcnNlSlNP Tih0LnJlc3BvbnNlVGV4dCl9Y2F0Y2gocil7bj0zRHQucmVzcG9uc2VUZXh0fWUuZXJyPQpvciYm ZS5lcnJvcihuLHQpfSl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPTNEJCgnPGRpdiBjbGFzcz0zRCIn K2UrJyI+PC9kaXY+Jyk9CjtuLmFwcGVuZFRvKCI6ZXEoMCkiKTt2YXIgcj0zRG4uY3NzKHQpO3Jl dHVybiBuLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gYShlKXskKD0KJ2xpbmtbaHJlZl49M0QiJytlKyci XScpLmxlbmd0aHx8JCgnPGxpbmsgaHJlZj0zRCInK2dhbGF4eV9jb25maWcucm9vdCtlKyciPQog cmVsPTNEInN0eWxlc2hlZXQiPicpLmFwcGVuZFRvKCJoZWFkIil9ZnVuY3Rpb24gZih0LG4pe3Jl dHVybiB0P2UuZGVmYXVsdHM9Cih0LG4pOm59ZnVuY3Rpb24gbChlLHQpe3ZhciBuPTNEIiI7aWYo ZT49M0QxZTExKWUvPTNEMWUxMSxuPTNEIlRCIjtlbHNlIGlmKD0KZT49M0QxZTgpZS89M0QxZTgs bj0zRCJHQiI7ZWxzZSBpZihlPj0zRDFlNSllLz0zRDFlNSxuPTNEIk1CIjtlbHNlIGlmKGU+PTNE PQoxMDApZS89M0QxMDAsbj0zRCJLQiI7ZWxzZXtpZighKGU+MCkpcmV0dXJuIjxzdHJvbmc+LTwv c3Ryb25nPiI7ZSo9M0QxMCxuPQo9M0QiYiJ9dmFyIHI9M0RNYXRoLnJvdW5kKGUpLzEwO3JldHVy biB0P3IrIiAiK246IjxzdHJvbmc+IityKyI8L3N0cm9uZz4gIis9Cm59ZnVuY3Rpb24gYygpe3Jl dHVybiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1mdW5jdGlv bj0KIGgoZSl7dmFyIHQ9M0QkKCI8cD48L3A+Iik7cmV0dXJuIHQuYXBwZW5kKGUpLHR9ZnVuY3Rp b24gcCgpe3ZhciBlPTNEbmV3IERhPQp0ZSx0PTNEKGUuZ2V0SG91cnMoKTwxMD8iMCI6IiIpK2Uu Z2V0SG91cnMoKSxuPTNEKGUuZ2V0TWludXRlcygpPDEwPyIwIjoiIik9CitlLmdldE1pbnV0ZXMo KSxyPTNEZS5nZXREYXRlKCkrIi8iKyhlLmdldE1vbnRoKCkrMSkrIi8iK2UuZ2V0RnVsbFllYXIo KSsiLD0KICIrdCsiOiIrbjtyZXR1cm4gcn1yZXR1cm57Y3NzTG9hZEZpbGU6YSxjc3NHZXRBdHRy aWJ1dGU6dSxnZXQ6cyxtZXJnZTpmLGJ5PQp0ZXNUb1N0cmluZzpsLHV1aWQ6Yyx0aW1lOnAsd3Jh cDpoLHJlcXVlc3Q6byxzYW5pdGl6ZTpuLHRleHRpZnk6aSx2YWxpZGF0ZTo9CnIsZGVlcGVhY2g6 dH19KSxkZWZpbmUoIm12Yy91aS91aS1wb3J0bGV0IixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24o ZSl7dmFyID0KdD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHt2aXNpYmxlOiExLG9wdGlvbnNEZWZh dWx0Ont0aXRsZToiIixpY29uOiIiLGJ1dHRvPQpuczpudWxsLGJvZHk6bnVsbCxzY3JvbGxhYmxl OiEwLG5vcGFkZGluZzohMSxvcGVyYXRpb25zOm51bGwscGxhY2VtZW50OiJib3Q9CnRvbSIsY2xz OiJ1aS1wb3J0bGV0IixvcGVyYXRpb25zX2ZsdDoicmlnaHQifSwkdGl0bGU6bnVsbCwkY29udGVu dDpudWxsLCRidT0KdHRvbnM6bnVsbCwkb3BlcmF0aW9uczpudWxsLCRoZWFkZXI6bnVsbCxpbml0 aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9uPQpzPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9u c0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGk9Cm9ucykp LHRoaXMuJGNvbnRlbnQ9M0R0aGlzLiRlbC5maW5kKCIuY29udGVudCIpLHRoaXMuJHRpdGxlPTNE dGhpcy4kZWwuZmluZD0KKCIucG9ydGxldC10aXRsZS10ZXh0IiksdGhpcy4kaGVhZGVyPTNEdGhp cy4kZWwuZmluZCgiLnBvcnRsZXQtaGVhZGVyIik7dmFyPQogbj0zRHRoaXMuJGVsLmZpbmQoIi5w b3J0bGV0LWNvbnRlbnQiKTt0aGlzLm9wdGlvbnMubm9wYWRkaW5nJiYobi5jc3MoInBhZGQ9Cmlu ZyIsIjBweCIpLHRoaXMuJGNvbnRlbnQuY3NzKCJwYWRkaW5nIiwiMHB4IikpLHRoaXMuJGJ1dHRv bnM9M0QkKHRoaXMuZWwpLj0KZmluZCgiLmJ1dHRvbnMiKTtpZih0aGlzLm9wdGlvbnMuYnV0dG9u cyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuPQpidXR0b25zLGZ1bmN0aW9uKGUs dCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJGJ1dHRvbnMuYXBwZW5kKHQuJGVsKX0pfWVsc2UgdGg9 CmlzLiRidXR0b25zLnJlbW92ZSgpO3RoaXMuJG9wZXJhdGlvbnM9M0QkKHRoaXMuZWwpLmZpbmQo Ii5vcGVyYXRpb25zIik7aWYodD0KaGlzLm9wdGlvbnMub3BlcmF0aW9ucyl7dmFyIHI9M0R0aGlz OyQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvPQpuKGUsdCl7dC4kZWwucHJv cCgiaWQiLGUpLHIuJG9wZXJhdGlvbnMuYXBwZW5kKHQuJGVsKX0pfXRoaXMub3B0aW9ucy5ib2R5 JiY9CnRoaXMuYXBwZW5kKHRoaXMub3B0aW9ucy5ib2R5KX0sYXBwZW5kOmZ1bmN0aW9uKHQsbil7 bj90aGlzLiRjb250ZW50LmFwcGVuZD0KKHQpOnRoaXMuJGNvbnRlbnQuYXBwZW5kKGUud3JhcCh0 KSl9LGNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29udGVuPQp0fSxzaG93OmZ1bmN0 aW9uKCl7dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITB9LGhpZGU6ZnVu Y3Rpb249Cigpe3RoaXMuJGVsLmZhZGVPdXQoImZhc3QiKSx0aGlzLnZpc2libGU9M0QhMX0sZW5h YmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaT0Kcy4kYnV0dG9ucy5maW5kKCIjIitlKS5wcm9wKCJk aXNhYmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaXMuPQokYnV0dG9ucy5m aW5kKCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITApfSxoaWRlT3BlcmF0aW9uOmZ1bmN0aW9uKGUp e3RoaXMuJG89CnBlcmF0aW9ucy5maW5kKCIjIitlKS5oaWRlKCl9LHNob3dPcGVyYXRpb246ZnVu Y3Rpb24oZSl7dGhpcy4kb3BlcmF0aW9ucy5maT0KbmQoIiMiK2UpLnNob3coKX0sc2V0T3BlcmF0 aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRvcGVyYXRpb25zLmZpbmQoPQoiIyIrZSk7 bi5vZmYoImNsaWNrIiksbi5vbigiY2xpY2siLHQpfSx0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0z RHRoaXMuJHRpdGw9CmU7cmV0dXJuIGUmJnQuaHRtbChlKSx0Lmh0bWwoKX0sX3RlbXBsYXRlOmZ1 bmN0aW9uKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJz0KK2UuaWQrJyIgY2xhc3M9M0QiJytlLmNs cysnIj4nO3JldHVybiBlLnRpdGxlJiYodCs9M0QnPGRpdiBjbGFzcz0zRCJwb3J0bGV0PQotaGVh ZGVyIj48ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEImZsb2F0OiAnK2Uub3BlcmF0 aW9uc19mbHQrJzsiPjw9Ci9kaXY+JysnPGRpdiBjbGFzcz0zRCJwb3J0bGV0LXRpdGxlIj4nLGUu aWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJz0KK2UuaWNvbisnIj4mbmJzcDs8L2k+ JyksdCs9M0QnPHNwYW4gY2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0Ij4nK2UudGl0bGUrPQoi PC9zcGFuPiIrIjwvZGl2PiIrIjwvZGl2PiIpLHQrPTNEJzxkaXYgY2xhc3M9M0QicG9ydGxldC1j b250ZW50Ij4nLGUucGxhY2U9Cm1lbnQ9M0Q9M0QidG9wIiYmKHQrPTNEJzxkaXYgY2xhc3M9M0Qi YnV0dG9ucyI+PC9kaXY+JyksdCs9M0QnPGRpdiBjbGFzcz0zRD0KImNvbnRlbnQiPjwvZGl2Pics ZS5wbGFjZW1lbnQ9M0Q9M0QiYm90dG9tIiYmKHQrPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+ PQo8L2Rpdj4nKSx0Kz0zRCI8L2Rpdj48L2Rpdj4iLHR9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZp bmUoIm12Yy91aS91aS1zZWxlY3Q9Ci1kZWZhdWx0IixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24o ZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9ucz0KRGVmYXVsdDp7aWQ6IiIs Y2xzOiIiLGVycm9yX3RleHQ6Ik5vIGRhdGEgYXZhaWxhYmxlIix2aXNpYmxlOiEwLHdhaXQ6ITEs bXVsPQp0aXBsZTohMSxzZWFyY2hhYmxlOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMu b3B0aW9ucz0zRGUubWVyZ2UodCx0aGk9CnMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRzZWxlYz0KdD0zRHRoaXMuJGVs LmZpbmQoIi5zZWxlY3QiKSx0aGlzLiRpY29uPTNEdGhpcy4kZWwuZmluZCgiLmljb24iKSx0aGlz LiRidXR0PQpvbj0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b24iKSx0aGlzLm9wdGlvbnMubXVsdGlw bGU/KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWw9CnRpcGxlIiwhMCksdGhpcy4kc2VsZWN0LmFkZENs YXNzKCJ1aS1zZWxlY3QtbXVsdGlwbGUiKSx0aGlzLiRpY29uLnJlbW92ZSgpKT0KOnRoaXMuJGVs LmFkZENsYXNzKCJ1aS1zZWxlY3QiKSx0aGlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMuZGF0YSksdGhp cy5vcHRpb25zPQoudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9u cy52YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGU9Cnx8dGhpcy5oaWRlKCksdGhpcy5vcHRpb25z LndhaXQ/dGhpcy53YWl0KCk6dGhpcy5zaG93KCk7dmFyIG49M0R0aGlzO3RoaXMuJD0Kc2VsZWN0 Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hhbmdlKCl9KSx0aGlzLm9uKCJjaGFuZ2UiLGZ1 bmN0aW9uKCl7bi5fPQpjaGFuZ2UoKX0pfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9M0Q9 M0R1bmRlZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGU9CiksdGhpcy4kc2VsZWN0LnNlbGVjdDIm JnRoaXMuJHNlbGVjdC5zZWxlY3QyKCJ2YWwiLGUpKSx0aGlzLiRzZWxlY3QudmFsKCl9LD0KZmly c3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJHNlbGVjdC5maW5kKCJvcHRpb24iKTtyZXR1cm4g ZS5sZW5ndGg+MD9lLnZhPQpsKCk6dW5kZWZpbmVkfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVy biBlLnZhbGlkYXRlKHRoaXMudmFsdWUoKSl9LHRleHQ6ZnU9Cm5jdGlvbigpe3JldHVybiB0aGlz LiRzZWxlY3QuZmluZCgib3B0aW9uOnNlbGVjdGVkIikudGV4dCgpfSxzaG93OmZ1bmN0aW9uKD0K KXt0aGlzLnVud2FpdCgpLHRoaXMuJHNlbGVjdC5zaG93KCksdGhpcy4kZWwuc2hvdygpfSxoaWRl OmZ1bmN0aW9uKCl7dGhpcy4kPQplbC5oaWRlKCl9LHdhaXQ6ZnVuY3Rpb24oKXt0aGlzLiRpY29u LnJlbW92ZUNsYXNzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmE9CiBmYS1zcGlubmVyIGZhLXNw aW4iKX0sdW53YWl0OmZ1bmN0aW9uKCl7dGhpcy4kaWNvbi5yZW1vdmVDbGFzcygpLHRoaXMuJGlj bz0Kbi5hZGRDbGFzcygiZmEgZmEtY2FyZXQtZG93biIpfSxkaXNhYmxlZDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLiRzZWxlY3QuaXMoPQoiOmRpc2FibGVkIil9LGVuYWJsZTpmdW5jdGlvbigpe3Ro aXMuJHNlbGVjdC5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmY9CnVuY3Rpb24oKXt0aGlz LiRzZWxlY3QucHJvcCgiZGlzYWJsZWQiLCEwKX0sYWRkOmZ1bmN0aW9uKGUpe3RoaXMuJHNlbGVj dC5hcD0KcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihlKSksdGhpcy5fcmVmcmVzaCgpfSxkZWw6 ZnVuY3Rpb24oZSl7dGhpcy4kc2VsZWN0PQouZmluZCgib3B0aW9uW3ZhbHVlPTNEIitlKyJdIiku cmVtb3ZlKCksdGhpcy4kc2VsZWN0LnRyaWdnZXIoImNoYW5nZSIpLHRoaXM9Ci5fcmVmcmVzaCgp fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiRzZWxlY3QudmFsKCk7dGhpcy4kc2Vs ZWN0LmZpbj0KZCgib3B0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciBuIGluIGUpdGhpcy4kc2VsZWN0 LmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvPQpuKGVbbl0pKTt0aGlzLl9yZWZyZXNoKCksdGhp cy4kc2VsZWN0LnZhbCh0KSx0aGlzLiRzZWxlY3QudmFsKCl8fHRoaXMuJHNlbGU9CmN0LnZhbCh0 aGlzLmZpcnN0KCkpLHRoaXMub3B0aW9ucy5zZWFyY2hhYmxlJiYodGhpcy4kYnV0dG9uLmhpZGUo KSx0aGlzLiRzZT0KbGVjdC5zZWxlY3QyKCJkZXN0cm95IiksdGhpcy4kc2VsZWN0LnNlbGVjdDIo KSl9LHNldE9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoPQppcy5vcHRpb25zLm9uY2hhbmdlPTNEZX0s ZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRzZWxlY3QuZmluZCgnb3B0aW89Cm5bdmFs dWU9M0QiJytlKyciXScpLmxlbmd0aD4wfSxfY2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25z Lm9uY2hhbmdlJiZ0aD0KaXMub3B0aW9ucy5vbmNoYW5nZSh0aGlzLiRzZWxlY3QudmFsKCkpfSxf cmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5mPQppbmQoIm9wdGlvblt2YWx1ZT0zRG51 bGxdIikucmVtb3ZlKCk7dmFyIGU9M0R0aGlzLiRzZWxlY3QuZmluZCgib3B0aW9uIikubGU9Cm5n dGg7ZT0zRD0zRDA/KHRoaXMuZGlzYWJsZSgpLHRoaXMuJHNlbGVjdC5hcHBlbmQodGhpcy5fdGVt cGxhdGVPcHRpb24oe3ZhbD0KdWU6Im51bGwiLGxhYmVsOnRoaXMub3B0aW9ucy5lcnJvcl90ZXh0 fSkpKTp0aGlzLmVuYWJsZSgpfSxfdGVtcGxhdGVPcHRpb246PQpmdW5jdGlvbihlKXtyZXR1cm4n PG9wdGlvbiB2YWx1ZT0zRCInK2UudmFsdWUrJyI+JytlLmxhYmVsKyI8L29wdGlvbj4ifSxfdGU9 Cm1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBpZD0zRCInK2UuaWQrJyI+JysnPHNlbGVj dCBpZD0zRCJzZWxlY3QiIGNsYT0Kc3M9M0Qic2VsZWN0ICcrZS5jbHMrIiAiK2UuaWQrJyI+PC9z ZWxlY3Q+JysnPGRpdiBjbGFzcz0zRCJidXR0b24iPicrJzxpIGNsPQphc3M9M0QiaWNvbiIvPicr IjwvZGl2PiIrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1z bGk9CmRlciIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEQmFja2JvbmUuVmll dy5leHRlbmQoe29wdGlvbnNEZWZhdT0KbHQ6e21pbjpudWxsLG1heDpudWxsLHN0ZXA6bnVsbCxw cmVjaXNlOiExLHNwbGl0OjFlNH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0PQope3ZhciBuPTNEdGhp czt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRF bGVtZW49CnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy51c2VzbGlkZXI9M0R0 aGlzLm9wdGlvbnMubWF4IT0zRD0zRG51bD0KbCYmdGhpcy5vcHRpb25zLm1pbiE9M0Q9M0RudWxs JiZ0aGlzLm9wdGlvbnMubWF4PnRoaXMub3B0aW9ucy5taW4sdGhpcy5vcHRpPQpvbnMuc3RlcD0z RD0zRD0zRG51bGwmJih0aGlzLm9wdGlvbnMuc3RlcD0zRDEsdGhpcy5vcHRpb25zLnByZWNpc2Um JnRoaXMudXM9CmVzbGlkZXImJih0aGlzLm9wdGlvbnMuc3RlcD0zRCh0aGlzLm9wdGlvbnMubWF4 LXRoaXMub3B0aW9ucy5taW4pL3RoaXMub3B0aT0Kb25zLnNwbGl0KSksdGhpcy51c2VzbGlkZXI/ KHRoaXMuJHNsaWRlcj0zRHRoaXMuJGVsLmZpbmQoIiNzbGlkZXIiKSx0aGlzLiRzPQpsaWRlci5z bGlkZXIodGhpcy5vcHRpb25zKSx0aGlzLiRzbGlkZXIub24oInNsaWRlIixmdW5jdGlvbihlLHQp e24udmFsdWUodC49CnZhbHVlKX0pKTp0aGlzLiRlbC5maW5kKCIudWktZm9ybS1zbGlkZXItdGV4 dCIpLmNzcygid2lkdGgiLCIxMDAlIiksdGhpcy4kdD0KZXh0PTNEdGhpcy4kZWwuZmluZCgiI3Rl eHQiKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlPQoodGhp cy5vcHRpb25zLnZhbHVlKSx0aGlzLiR0ZXh0Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi52YWx1 ZSgkKHRoaXMpLnZhbCg9CikpfSk7dmFyIHI9M0RbXTt0aGlzLiR0ZXh0Lm9uKCJrZXl1cCIsZnVu Y3Rpb24oZSl7cltlLndoaWNoXT0zRCExfSksdGhpcy4kdD0KZXh0Lm9uKCJrZXlkb3duIixmdW5j dGlvbihlKXt2YXIgdD0zRGUud2hpY2g7clt0XT0zRCEwLHQ9M0Q9M0Q4fHx0PTNEPTNEOXx8PQp0 PTNEPTNEMTN8fHQ9M0Q9M0QzN3x8dD0zRD0zRDM5fHx0Pj0zRDQ4JiZ0PD0zRDU3fHx0PTNEPTNE MTkwJiYkKHRoaXMpLnZhbCg9CikuaW5kZXhPZigiLiIpPTNEPTNELTEmJm4ub3B0aW9ucy5wcmVj aXNlfHx0PTNEPTNEMTg5JiYkKHRoaXMpLnZhbCgpLmluZGV4Tz0KZigiLSIpPTNEPTNELTF8fHJb OTFdfHxyWzE3XXx8ZXZlbnQucHJldmVudERlZmF1bHQoKX0pfSx2YWx1ZTpmdW5jdGlvbihlKXty PQpldHVybiBlIT0zRD0zRHVuZGVmaW5lZCYmKGlzTmFOKGUpJiYoZT0zRDApLHRoaXMub3B0aW9u cy5tYXghPTNEPTNEbnVsbCYmKGU9Cj0zRE1hdGgubWluKGUsdGhpcy5vcHRpb25zLm1heCkpLHRo aXMub3B0aW9ucy5taW4hPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1heD0KKGUsdGhpcy5vcHRpb25z Lm1pbikpLHRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpLHRo aXMuPQokc2xpZGVyJiZ0aGlzLiRzbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsZSksdGhpcy4kdGV4dC52 YWwoZSkpLHRoaXMuJHRleHQudmFsKCk9Cn0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8 ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlcj0KIj4nKyc8aW5wdXQg aWQ9M0QidGV4dCIgdHlwZT0zRCJ0ZXh0IiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRlci10ZXh0Ii8+ JysnPGRpPQp2IGlkPTNEInNsaWRlciIgY2xhc3M9M0QidWktZm9ybS1zbGlkZXItZWxlbWVudCIv PicrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc9Cjp0fX0pLGRlZmluZSgibXZjL3VpL3VpLW9wdGlv bnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJhY2tibz0KbmUuVmlldy5l eHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zRGVmYXVsdD0zRHt2aXNp YmxlOiEwLGRhPQp0YTpbXSxpZDplLnV1aWQoKSxlcnJvcl90ZXh0OiJObyBkYXRhIGF2YWlsYWJs ZS4iLHdhaXRfdGV4dDoiUGxlYXNlIHdhaXQuLi49CiJ9LHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uo dCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQoIjxkaXYvPiIpLD0KdGhpcy4k bWVzc2FnZT0zRCQoIjxkaXYvPiIpLHRoaXMuJG9wdGlvbnM9M0QkKHRoaXMuX3RlbXBsYXRlKHQp KSx0aGlzLiRlbC5hPQpwcGVuZCh0aGlzLiRtZXNzYWdlKSx0aGlzLiRlbC5hcHBlbmQodGhpcy4k b3B0aW9ucyksdGhpcy5vcHRpb25zLnZpc2libGV8fHQ9Cmhpcy4kZWwuaGlkZSgpLHRoaXMudXBk YXRlKHRoaXMub3B0aW9ucy5kYXRhKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZT0KZmlu ZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTt2YXIgbj0zRHRoaXM7dGhpcy5vbigi Y2hhbmdlIixmdW5jdGlvPQpuKCl7bi5fY2hhbmdlKCl9KX0sdXBkYXRlOmZ1bmN0aW9uKGUpe3Zh ciB0PTNEdGhpcy5fZ2V0VmFsdWUoKTt0aGlzLiRvcHRpb249CnMuZW1wdHkoKTtpZih0aGlzLl90 ZW1wbGF0ZU9wdGlvbnMpdGhpcy4kb3B0aW9ucy5hcHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpbz0K bnMoZSkpO2Vsc2UgZm9yKHZhciBuIGluIGUpe3ZhciByPTNEJCh0aGlzLl90ZW1wbGF0ZU9wdGlv bihlW25dKSk7ci5hZGRDbGFzPQpzKCJ1aS1vcHRpb24iKSx0aGlzLiRvcHRpb25zLmFwcGVuZChy KX12YXIgaT0zRHRoaXM7dGhpcy4kZWwuZmluZCgiaW5wdXQiKS49Cm9uKCJjaGFuZ2UiLGZ1bmN0 aW9uKCl7aS52YWx1ZShpLl9nZXRWYWx1ZSgpKSxpLl9jaGFuZ2UoKX0pLHRoaXMuX3JlZnJlc2go KT0KLHRoaXMudmFsdWUodCl9LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUhPTNEPTNEdW5kZWZpbmVk KXtlIGluc3RhbmNlb2YgQXJyYXl8PQp8KGU9M0RbZV0pLHRoaXMuJGVsLmZpbmQoImlucHV0Iiku cHJvcCgiY2hlY2tlZCIsITEpO2Zvcih2YXIgdCBpbiBlKXRoaXMuJGU9CmwuZmluZCgnaW5wdXRb dmFsdWU9M0QiJytlW3RdKyciXScpLmZpcnN0KCkucHJvcCgiY2hlY2tlZCIsITApfXJldHVybiB0 aGlzLj0KX2dldFZhbHVlKCl9LGV4aXN0czpmdW5jdGlvbihlKXtpZihlIT0zRD0zRHVuZGVmaW5l ZCl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoPQplPTNEW2VdKTtmb3IodmFyIHQgaW4gZSlpZih0aGlz LiRlbC5maW5kKCdpbnB1dFt2YWx1ZT0zRCInK2VbdF0rJyJdJykubGVuZ3Q9Cmg+MClyZXR1cm4h MH1yZXR1cm4hMX0sZmlyc3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJGVsLmZpbmQoImlucHV0 Iik7cmV0dT0Kcm4gZS5sZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0sdmFsaWRhdGU6ZnVuY3Rp b24oKXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlzPQoudmFsdWUoKSl9LHdhaXQ6ZnVuY3Rpb24oKXt0 aGlzLl9zaXplKCk9M0Q9M0QwJiYodGhpcy5fbWVzc2FnZVNob3codGhpcy5vcHQ9CmlvbnMud2Fp dF90ZXh0LCJpbmZvIiksdGhpcy4kb3B0aW9ucy5oaWRlKCkpfSx1bndhaXQ6ZnVuY3Rpb24oKXt0 aGlzLl9tZXNzYT0KZ2VIaWRlKCksdGhpcy5fcmVmcmVzaCgpfSxfY2hhbmdlOmZ1bmN0aW9uKCl7 dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wPQp0aW9ucy5vbmNoYW5nZSh0aGlzLl9nZXRW YWx1ZSgpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwPyg9CnRoaXMu X21lc3NhZ2VTaG93KHRoaXMub3B0aW9ucy5lcnJvcl90ZXh0LCJkYW5nZXIiKSx0aGlzLiRvcHRp b25zLmhpZGUoKSk6KD0KdGhpcy5fbWVzc2FnZUhpZGUoKSx0aGlzLiRvcHRpb25zLmNzcygiZGlz cGxheSIsImlubGluZS1ibG9jayIpKX0sX2dldFZhbHVlPQo6ZnVuY3Rpb24oKXt2YXIgZT0zRHRo aXMuJGVsLmZpbmQoIjpjaGVja2VkIik7aWYoZS5sZW5ndGg9M0Q9M0QwKXJldHVybiJudWw9Cmwi O2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIHQ9M0RbXTtyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKCl7dC5wdXNoKCQodD0KaGlzKS52YWwoKSl9KSx0fXJldHVybiBlLnZhbCgpfSxfc2l6ZTpm dW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudWktPQpvcHRpb24iKS5sZW5ndGh9LF9t ZXNzYWdlU2hvdzpmdW5jdGlvbihlLHQpe3RoaXMuJG1lc3NhZ2Uuc2hvdygpLHRoaXMuJG1lc3M9 CmFnZS5yZW1vdmVDbGFzcygpLHRoaXMuJG1lc3NhZ2UuYWRkQ2xhc3MoInVpLW1lc3NhZ2UgYWxl cnQgYWxlcnQtIit0KSx0aGlzLj0KJG1lc3NhZ2UuaHRtbChlKX0sX21lc3NhZ2VIaWRlOmZ1bmN0 aW9uKCl7dGhpcy4kbWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmPQp1bmN0aW9uKCl7cmV0dXJu JzxkaXYgY2xhc3M9M0QidWktb3B0aW9ucyIvPid9fSksbj0zRHt9O24uVmlldz0zRHQuZXh0ZW5k KHs9CmluaXRpYWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRo aXMsZSl9LF90ZW1wbGF0ZU9wdGlvbj0KOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2PjxpbnB1dCB0 eXBlPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciPQogdmFsdWU9M0QiJytl LnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4iKyI8L2Rpdj4ifX0pO3ZhciByPTNEe307ci5WaWV3 PTNEdC49CmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlKXtlLm11bHRpcGxlPTNEITAsdC5w cm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKD0KdGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEImNoZWNrYm94IiBuPQphbWU9M0QiJyt0 aGlzLm9wdGlvbnMuaWQrJyIgdmFsdWU9M0QiJytlLnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4i KyI8L2Rpdj49CiJ9fSk7dmFyIGk9M0R7fTtyZXR1cm4gaS5WaWV3PTNEdC5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cD0KZS5pbml0aWFsaXplLmNhbGwodGhpcyxlKX0s dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpPQpzLiRlbC5m aW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiLCExKSx0aGlzLiRlbC5maW5kKCJsYWJlbCIpLnJl bW92ZUNsYXNzKCI9CmFjdGl2ZSIpLHRoaXMuJGVsLmZpbmQoJ1t2YWx1ZT0zRCInK2UrJyJdJyku cHJvcCgiY2hlY2tlZCIsITApLmNsb3Nlc3QoImxhYj0KZWwiKS5hZGRDbGFzcygiYWN0aXZlIikp LHRoaXMuX2dldFZhbHVlKCl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlvbihlKXt2YXIgPQp0PTNE JzxsYWJlbCBjbGFzcz0zRCJidG4gYnRuLWRlZmF1bHQiPic7cmV0dXJuIGUuaWNvbiYmKHQrPTNE JzxpIGNsYXNzPTNEImY9CmEgJytlLmljb24rJyIvPicpLHQrPTNEJzxpbnB1dCB0eXBlPTNEInJh ZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciID0KdmFsdWU9M0QiJytlLnZhbHVlKyci PicrZS5sYWJlbCsiPC9sYWJlbD4iLHR9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8PQpk aXYgY2xhc3M9M0QiYnRuLWdyb3VwIHVpLXJhZGlvYnV0dG9uIiBkYXRhLXRvZ2dsZT0zRCJidXR0 b25zIi8+J319KSx7QmFzZTo9CnQsUmFkaW86bixSYWRpb0J1dHRvbjppLENoZWNrYm94OnJ9fSks ZGVmaW5lKCJtdmMvdWkvdWktZHJpbGxkb3duIixbInV0aWxzLz0KdXRpbHMiLCJtdmMvdWkvdWkt b3B0aW9ucyJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0LkJhc2UuZXh0ZW5kKHtpbml0aWFsaXpl PQo6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwbGF5PTNEZS5kaXNwbGF5fHwiY2hlY2tib3giLGUubXVs dGlwbGU9M0R0aGlzLmRpc3BsYXk9Cj0zRD0zRCJjaGVja2JveCIsdC5CYXNlLnByb3RvdHlwZS5p bml0aWFsaXplLmNhbGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOj0KZnVuY3Rpb24oZSx0LG4p e3JldHVybic8ZGl2PjxpbnB1dCBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciIGNsYXNzPTNE InVpPQotb3B0aW9uIiB0eXBlPTNEIicrdGhpcy5kaXNwbGF5KyciIHZhbHVlPTNEIicrdCsnIj4n K2UrIjxkaXYvPiJ9LF90ZW1wbGF0ZU89CnB0aW9uczpmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUs dCl7ZnVuY3Rpb24gbihuKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUucmVtbz0KdmVDbGFzcygidG9n Z2xlLWV4cGFuZCIpLGUuYWRkQ2xhc3MoInRvZ2dsZSIpLGUuaXNfZXhwYW5kZWQ9M0QhMCk6KHQu aGlkZSgpPQosZS5yZW1vdmVDbGFzcygidG9nZ2xlIiksZS5hZGRDbGFzcygidG9nZ2xlLWV4cGFu ZCIpLGUuaXNfZXhwYW5kZWQ9M0QhMSl9ZS49Cm9uKCJjbGljayIsZnVuY3Rpb24oKXtuKCFlLmlz X2V4cGFuZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKXtmb3IoaSBpbiBzKXt2YXIgbz0KPTNEc1tpXSx1 PTNEby5vcHRpb25zLmxlbmd0aD4wLGE9M0QkKCI8ZGl2Lz4iKTtpZih1KXt2YXIgZj0zRCQoJzxz cGFuIGNsYXNzPQo9M0QidWktZHJpbGxkb3duLWJ1dHRvbiBmb3JtLXRvZ2dsZSBpY29uLWJ1dHRv biB0b2dnbGUtZXhwYW5kIiBzdHlsZT0zRCJwb3M9Cml0aW9uOiByZWxhdGl2ZTsgdG9wOiAycHg7 Ii8+JyksbD0zRCQoIjxkaXYvPiIpO2wuYXBwZW5kKGYpLGwuYXBwZW5kKHQuX3RlbT0KcGxhdGVP cHRpb24oby5uYW1lLG8udmFsdWUpKSxhLmFwcGVuZChsKTt2YXIgYz0zRCQoJzxkaXYgc3R5bGU9 M0QiZGlzcGxheTogPQpub25lOyBtYXJnaW4tbGVmdDogMjVweDsiLz4nKTtyKGMsby5vcHRpb25z KSxhLmFwcGVuZChjKSxuKGYsYyl9ZWxzZSBhLmFwcGU9Cm5kKHQuX3RlbXBsYXRlT3B0aW9uKG8u bmFtZSxvLnZhbHVlKSk7ZS5hcHBlbmQoYSl9fXZhciB0PTNEdGhpcyxzPTNEJCgiPGRpdj0KLz4i KTtyZXR1cm4gcihzLGUpLHN9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFz cz0zRCJ1aS1vcHRpb25zPQogZHJpbGxkb3duLWNvbnRhaW5lciIgaWQ9M0QiJytlLmlkKyciLz4n fX0pO3JldHVybntWaWV3Om59fSksZGVmaW5lKCJtdmMvdWk9Ci91aS1idXR0b24tbWVudSIsWyJ1 dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7bz0K cHRpb25zRGVmYXVsdDp7aWQ6IiIsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0IixpY29uOm51bGws b25jbGljazpudWxsLGNsczoiPQp1aS1idXR0b24taWNvbiB1aS1idXR0b24tbWVudSIsdG9vbHRp cDoiIix0YXJnZXQ6IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHY9CmlzaWJsZTohMCx0YWc6IiJ9 LCRtZW51Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdl KD0KdCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQoJCh0aGlzLl90ZW1wbGF0 ZSh0aGlzLm9wdGlvbnMpKSk7dmFyPQogbj0zRCQodGhpcy5lbCkuZmluZCgiLnJvb3QiKSxyPTNE dGhpcztuLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXA9CiIpLmhpZGUoKSxlLnBy ZXZlbnREZWZhdWx0KCksci5vcHRpb25zLm9uY2xpY2smJnIub3B0aW9ucy5vbmNsaWNrKCl9KSx0 aGlzLj0Kb3B0aW9ucy52aXNpYmxlfHx0aGlzLmhpZGUoKSxuLnRvb2x0aXAoe3RpdGxlOnQudG9v bHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9PQopfSxzaG93OmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5z aG93KCl9LGhpZGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUoKX0sYWQ9CmRNZW51OmZ1bmN0 aW9uKHQpe3ZhciBuPTNEe3RpdGxlOiIiLHRhcmdldDoiIixocmVmOiIiLG9uY2xpY2s6bnVsbCxk aXZpZGVyOj0KITEsaWNvbjpudWxsLGNsczoiYnV0dG9uLW1lbnUgYnRuLWdyb3VwIn07bj0zRGUu bWVyZ2UodCxuKSx0aGlzLiRtZW51fHwoJCh0PQpoaXMuZWwpLmFwcGVuZCh0aGlzLl90ZW1wbGF0 ZU1lbnUoKSksdGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmluZCgiLm1lbnUiKSk9Cjt2YXIgcj0z RCQodGhpcy5fdGVtcGxhdGVNZW51SXRlbShuKSk7ci5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe2Uu cHJldmVudERlZj0KYXVsdCgpLG4ub25jbGljayYmbi5vbmNsaWNrKCl9KSx0aGlzLiRtZW51LmFw cGVuZChyKSxuLmRpdmlkZXImJnRoaXMuJG1lbnUuPQphcHBlbmQoJCh0aGlzLl90ZW1wbGF0ZURp dmlkZXIoKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpmdW5jdGlvbihlKXt2YXIgdD0zRCc9CjxsaT48 YSBjbGFzcz0zRCJkcm9wZG93bi1pdGVtIiBocmVmPTNEIicrZS5ocmVmKyciIHRhcmdldD0zRCIn K2UudGFyZ2V0KyciPj0KJztyZXR1cm4gZS5pY29uJiYodCs9M0QnPGkgY2xhc3M9M0QiZmEgJytl Lmljb24rJyI+PC9pPicpLHQrPTNEIiAiK2UudGl0bGUrPQoiPC9hPiIrIjwvbGk+Iix0fSxfdGVt cGxhdGVNZW51OmZ1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJtZW51IGRyb3Bkb3c9Cm4t bWVudSBwdWxsLXJpZ2h0IiByb2xlPTNEIm1lbnUiPjwvdWw+J30sX3RlbXBsYXRlRGl2aWRlcjpm dW5jdGlvbigpe3JldHVybj0KJzxsaSBjbGFzcz0zRCJkaXZpZGVyIj48L2xpPid9LF90ZW1wbGF0 ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpPQp0bGU/dD0zRCJ3aWR0aDogYXV0 bzsiOm49M0QibWFyZ2luOiAwcHg7Ijt2YXIgcj0zRCc8ZGl2IGlkPTNEIicrZS5pZCsnIiBzdHk9 CmxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPTNEImRyb3Bkb3duICcr ZS5jbHMrJyI+JysnPGRpdiBjbD0KYXNzPTNEInJvb3QgYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSIg ZGF0YS10b2dnbGU9M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisnPQoiPicrJzxpIGNsYXNzPTNE Imljb24gZmEgJytlLmljb24rJyIvPic7cmV0dXJuIGUudGl0bGUmJihyKz0zRCcmbmJzcDs8c3Bh biA9CmNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUrIjwvc3Bhbj4iKSxyKz0zRCI8L2Rpdj48L2Rp dj4iLHJ9fSl9KSxkZWZpbmUoIm12Yz0KL3VpL3VpLW1pc2MiLFsidXRpbHMvdXRpbHMiLCJtdmMv dWkvdWktc2VsZWN0LWRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVyIiwiPQptdmMvdWkvdWktb3B0 aW9ucyIsIm12Yy91aS91aS1kcmlsbGRvd24iLCJtdmMvdWkvdWktYnV0dG9uLW1lbnUiLCJtdmMv dWkvdWk9Ci1tb2RhbCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8pe3ZhciB1PTNEQmFja2JvbmUu Vmlldy5leHRlbmQoe29wdGlvbnNEZWZhdT0KbHQ6e3VybDoiIixjbHM6IiJ9LGluaXRpYWxpemU6 ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0PQppb25zRGVmYXVs dCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpfSxfdGVtcGxh dGU6ZnVuY3Q9CmlvbihlKXtyZXR1cm4nPGltZyBjbGFzcz0zRCJ1aS1pbWFnZSAnK2UuY2xzKyci IHNyYz0zRCInK2UudXJsKyciLz4nfX0pLGE9Cj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRp b25zRGVmYXVsdDp7dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1bmN0aT0Kb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90PQplbXBsYXRlKHRoaXMub3B0aW9ucykpfSx0aXRsZTpmdW5jdGlvbihlKXt0aGlz LiRlbC5odG1sKGUpfSxfdGVtcGxhdGU6ZnVuY3Q9CmlvbihlKXtyZXR1cm4nPGxhYmVsIGNsYXNz PTNEInVpLWxhYmVsICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2xhYmVsPiJ9LHZhbD0KdWU6ZnVu Y3Rpb24oKXtyZXR1cm4gb3B0aW9ucy50aXRsZX19KSxmPTNEQmFja2JvbmUuVmlldy5leHRlbmQo e29wdGlvbnNEZWZhPQp1bHQ6e2Zsb2F0aW5nOiJyaWdodCIsaWNvbjoiIix0b29sdGlwOiIiLHBs YWNlbWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6IiI9Cn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0 KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcz0KLnNl dEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksJCh0aGlzLmVsKS50b29sdGlw KHt0aXRsZTp0LnRvb2x0PQppcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEImY9CmEgJytlLmljb24rJyIgY2xhc3M9 M0QidWktaWNvbiIvPiZuYnNwOycrZS50aXRsZSsiPC9kaXY+In19KSxsPTNEQmFja2JvbmUuVj0K aWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJp Z2h0IixjbHM6InVpLWJ1dHRvPQpuIGJ0biBidG4tZGVmYXVsdCIsaWNvbjoiIn0saW5pdGlhbGl6 ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQ9Cix0aGlzLm9wdGlvbnNEZWZh dWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksJCh0aGlz Lj0KZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIudG9vbHRpcCIpLmhpZGUoKSx0Lm9uY2xp Y2smJnQub25jbGljaygpfSksJCh0PQpoaXMuZWwpLnRvb2x0aXAoe3RpdGxlOnQudG9vbHRpcCxw bGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGU9Cil7dmFyIHQ9M0QnPGJ1 dHRvbiBpZD0zRCInK2UuaWQrJyIgdHlwZT0zRCJzdWJtaXQiIHN0eWxlPTNEImZsb2F0OiAnK2Uu ZmxvYT0KdGluZysnOyIgdHlwZT0zRCJidXR0b24iIGNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1 cm4gZS5pY29uJiYodCs9M0QnPGkgY2xhPQpzcz0zRCJpY29uIGZhICcrZS5pY29uKyciPjwvaT4m bmJzcDsnKSx0Kz0zRGUudGl0bGUrIjwvYnV0dG9uPiIsdH19KSxjPTNEQmE9CmNrYm9uZS5WaWV3 LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InJpZ2h0 IixjbHM6Ij0KdWktYnV0dG9uLWljb24iLGljb246IiIsdG9vbHRpcDoiIixvbmNsaWNrOm51bGx9 LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpPQpzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHQ9Cmhpcy5vcHRp b25zKSksdGhpcy4kYnV0dG9uPTNEdGhpcy4kZWwuZmluZCgiLmJ1dHRvbiIpO3ZhciBuPTNEdGhp czskKHRoaXMuZT0KbCkub24oImNsaWNrIixmdW5jdGlvbigpeyQoIi50b29sdGlwIikuaGlkZSgp LHQub25jbGljayYmIW4uZGlzYWJsZWQmJnQub25jPQpsaWNrKCl9KSwkKHRoaXMuZWwpLnRvb2x0 aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sZGlzYWJsZTo9CmZ1bmN0 aW9uKCl7dGhpcy4kYnV0dG9uLmFkZENsYXNzKCJkaXNhYmxlZCIpLHRoaXMuZGlzYWJsZWQ9M0Qh MH0sZW5hYmxlOmZ1bj0KY3Rpb24oKXt0aGlzLiRidXR0b24ucmVtb3ZlQ2xhc3MoImRpc2FibGVk IiksdGhpcy5kaXNhYmxlZD0zRCExfSxzZXRJY29uOmZ1PQpuY3Rpb24oZSl7dGhpcy4kKCJpIiku cmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNzKGUpLHRoaXMub3B0aW89Cm5z Lmljb249M0RlfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QiIjtlLnRpdGxlJiYodD0z RCJ3aWR0aDogYXV0bzsiKT0KO3ZhciBuPTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciIHN0eWxlPTNE ImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPQo9M0QiJytlLmNscysnIj4nO3Jl dHVybiBlLnRpdGxlP24rPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9uIj48aSBjbGFzcz0zRCJpY289 Cm4gZmEgJytlLmljb24rJyIvPiZuYnNwOycrJzxzcGFuIGNsYXNzPTNEInRpdGxlIj4nK2UudGl0 bGUrIjwvc3Bhbj4iKyI8L2Rpdj0KPiI6bis9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNv bisnIi8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2tib25lPQouVmlldy5leHRlbmQoe29w dGlvbnNEZWZhdWx0Ont0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhp cy49Cm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVt ZW50KHRoaXMuX3RlbXBsYXRlKHRoaT0Kcy5vcHRpb25zKSksJCh0aGlzLmVsKS5vbigiY2xpY2si LHQub25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPQo8ZGl2PjxhIGhyZWY9 M0QiamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0zRCJ1aS1hbmNob3IgJytlLmNscysnIj4nK2Uu dGl0bGU9CisiPC9hPjwvZGl2PiJ9fSkscD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25z RGVmYXVsdDp7bWVzc2FnZTpudWxsLHN0YT0KdHVzOiJpbmZvIixwZXJzaXN0ZW50OiExfSxpbml0 aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0PQpoaXMub3B0aW9u c0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgiPGRpdj48L2Rpdj4iKSx0aGlzLm9wdGlvbnMubWVz c2FnZSYmdGg9CmlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMubz0KcHRpb25zRGVmYXVsdCk7aWYodC5tZXNzYWdl IT0zRCIiKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9uPQpzKSksdGhp cy4kZWwuZmluZCgiLmFsZXJ0IikuYXBwZW5kKHQubWVzc2FnZSksdGhpcy4kZWwuZmFkZUluKCks dGhpcy50aW1lb3U9CnQmJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtpZighdC5w ZXJzaXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpcy50aT0KbWVvdXQ9M0R3aW5kb3cuc2V0VGltZW91 dChmdW5jdGlvbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVsLmZhZGVPdXQoKTpuPQouJGVs LmhpZGUoKX0sM2UzKX19ZWxzZSB0aGlzLiRlbC5mYWRlT3V0KCl9LF90ZW1wbGF0ZTpmdW5jdGlv bihlKXtyZXR1cm4nPGQ9Cml2IGNsYXNzPTNEInVpLW1lc3NhZ2UgYWxlcnQgYWxlcnQtJytlLnN0 YXR1cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmlldy5leD0KdGVuZCh7b3B0aW9uc0RlZmF1bHQ6 e29uY2xpY2s6bnVsbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoPQpp cy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVu dCh0aGlzLl90ZW1wbGF0ZSg9CnRoaXMub3B0aW9ucykpO3ZhciBuPTNEdGhpczt0aGlzLm9wdGlv bnMub25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsZnVuYz0KdGlvbihlKXt2YXIgdD0zRG4u JGVsLmZpbmQoIiNzZWFyY2giKTtuLm9wdGlvbnMub25jbGljayh0LnZhbCgpKX0pfSxfdGVtcGxh PQp0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1zZWFyY2giPjxmb3JtIG9u c3VibWl0PTNEInJldHVybiBmYWw9CnNlOyI+PGlucHV0IGlkPTNEInNlYXJjaCIgY2xhc3M9M0Qi Zm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5hbT0KZT0zRCJzZWFyY2giIHBs YWNlaG9sZGVyPTNEIlNlYXJjaC4uLiIgdmFsdWU9M0QiJytlLnNlYXJjaHdvcmQrJyI+JysnPGJ1 dHRvPQpuIHR5cGU9M0Qic3VibWl0IiBjbGFzcz0zRCJidG4gc2VhcmNoLWJ0biI+JysnPGkgY2xh c3M9M0QiZmEgZmEtc2VhcmNoIj48L2k9Cj4nKyI8L2J1dHRvbj4iKyI8L2Zvcm0+IisiPC9kaXY+ In19KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdT0KbHQ6e3R5cGU6InRl eHQiLHBsYWNlaG9sZGVyOiIiLGRpc2FibGVkOiExLHZpc2libGU6ITAsY2xzOiIiLGFyZWE6ITF9 LGluaXRpPQphbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGU9Cm1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRp b25zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYmdGhpcz0KLnZhbHVlKHRo aXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLiRlbC5wcm9wKCJk aXNhYmxlZCIsPQohMCksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMuJGVsLmhpZGUoKTt2YXIg bj0zRHRoaXM7dGhpcy4kZWwub24oImlucHV0Iiw9CmZ1bmN0aW9uKCl7bi5vcHRpb25zLm9uY2hh bmdlJiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9LHZhbHVlOmZ1bj0KY3Rpb24o ZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiRlbC52YWwoZSksdGhpcy4kZWwudmFs KCl9LF90ZW1wbGF0PQplOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFyZWE/Jzx0ZXh0YXJlYSBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dGFyZWE9CiAnK2UuY2xzKyciPjwvdGV4dGFyZWE+ JzonPGlucHV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50eXBlKyciIHZhbHVlPQo9M0Qi JytlLnZhbHVlKyciIHBsYWNlaG9sZGVyPTNEIicrZS5wbGFjZWhvbGRlcisnIiBjbGFzcz0zRCJ1 aS1pbnB1dCAnK2UuY2w9CnMrJyI+J319KSxtPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPTNEZT0KLHRoaXMuc2V0RWxlbWVudCh0aGlz Ll90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kPQpl ZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7 cmV0dXJuIGUhPTNEPTNEdW49CmRlZmluZWQmJnRoaXMuJCgiaGlkZGVuIikudmFsKGUpLHRoaXMu JCgiaGlkZGVuIikudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbj0KKGUpe3ZhciB0PTNEJzxkaXYg aWQ9M0QiJytlLmlkKyciID4nO3JldHVybiBlLmluZm8mJih0Kz0zRCI8bGFiZWw+IitlLmluZm8r PQoiPC9sYWJlbD4iKSx0Kz0zRCc8aGlkZGVuIHZhbHVlPTNEIicrZS52YWx1ZSsnIi8+JysiPC9k aXY+Iix0fX0pO3JldHVybntBbmM9CmhvcjpoLEJ1dHRvbjpsLEJ1dHRvbkljb246YyxCdXR0b25N ZW51OnMsSWNvbjpmLEltYWdlOnUsSW5wdXQ6dixMYWJlbDphLE1lcz0Kc2FnZTpwLE1vZGFsOm8s UmFkaW9CdXR0b246ci5SYWRpb0J1dHRvbixDaGVja2JveDpyLkNoZWNrYm94LFJhZGlvOnIuUmFk aW8sPQpTZWFyY2hib3g6ZCxTZWxlY3Q6dCxIaWRkZW46bSxTbGlkZXI6bixEcmlsbGRvd246aX19 KSxkZWZpbmUoInBsdWdpbi9saWJyYXI9Cnkvam9icyIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9u KGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRpYWxpej0KZTpmdW5jdGlvbih0 LG4pe3RoaXMuYXBwPTNEdCx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKG4sdGhpcy5vcHRpb25zRGVm YXVsdCl9PQoscmVxdWVzdDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPTNEdGhpcztlLnN0YXRl KCJ3YWl0IiwiUmVxdWVzdGluZyBqb2IgcmU9CnN1bHRzLi4uIik7dmFyIG89M0RlLmdldCgiZGF0 YXNldF9pZF9qb2IiKTtvIT0zRCIiP3MuX3dhaXQoZSxyLGkpOnMuX3N1Ym1pdD0KKGUsdCxuLHIs aSl9LGNsZWFudXA6ZnVuY3Rpb24odCl7dmFyIG49M0R0aGlzLHI9M0R0LmdldCgiZGF0YXNldF9p ZF9qb2IiKTtyPQohPTNEIiImJihlLnJlcXVlc3Qoe3R5cGU6IlBVVCIsdXJsOmNvbmZpZy5yb290 KyJhcGkvaGlzdG9yaWVzL25vbmUvY29udGVudHM9Ci8iK3IsZGF0YTp7ZGVsZXRlZDohMH0sc3Vj Y2VzczpmdW5jdGlvbigpe24uX3JlZnJlc2hIZGFzKCl9fSksdC5zZXQoImRhdGFzZT0KdF9pZF9q b2IiLCIiKSl9LF9zdWJtaXQ6ZnVuY3Rpb24odCxuLHIsaSxzKXt2YXIgbz0zRHRoaXMsdT0zRHQu aWQsYT0zRHQuZ2V0PQooInR5cGUiKSxmPTNEdC5kZWZpbml0aW9uO2RhdGE9M0R7dG9vbF9pZDoi Y2hhcnRzIixpbnB1dHM6e2lucHV0OntpZDp0LmdldCg9CiJkYXRhc2V0X2lkIiksc3JjOiJoZGEi fSxtb2R1bGU6Zi5leGVjdXRlLGNvbHVtbnM6cixzZXR0aW5nczpufX0sdC5zdGF0ZSgidz0KYWl0 IiwiU2VuZGluZyBqb2IgcmVxdWVzdC4uLiIpLGUucmVxdWVzdCh7dHlwZToiUE9TVCIsdXJsOmNv bmZpZy5yb290KyJhcGkvPQp0b29scyIsZGF0YTpkYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7aWYo IWUub3V0cHV0c3x8ZS5vdXRwdXRzLmxlbmd0aD0zRD0zRDA9Cil0LnN0YXRlKCJmYWlsZWQiLCJK b2Igc3VibWlzc2lvbiBmYWlsZWQuIE5vIHJlc3BvbnNlLiIpLHMmJnMoKTtlbHNle28uX3JlZj0K cmVzaEhkYXMoKTt2YXIgbj0zRGUub3V0cHV0c1swXTt0LnN0YXRlKCJ3YWl0IiwiWW91ciBqb2Ig aGFzIGJlZW4gcXVldWVkLiBZPQpvdSBtYXkgY2xvc2UgdGhlIGJyb3dzZXIgd2luZG93LiBUaGUg am9iIHdpbGwgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLiIpLHQuc2U9CnQoImRhdGFzZXRfaWRfam9i IixuLmlkKSxvLmFwcC5zdG9yYWdlLnNhdmUoKSxvLl93YWl0KHQsaSxzKX19LGVycm9yOmZ1bmN0 aT0Kb24oZSl7dmFyIG49M0QiIjtlJiZlLm1lc3NhZ2UmJmUubWVzc2FnZS5kYXRhJiZlLm1lc3Nh Z2UuZGF0YS5pbnB1dCYmKG49M0RlPQoubWVzc2FnZS5kYXRhLmlucHV0KyIuIiksdC5zdGF0ZSgi ZmFpbGVkIiwiVGhpcyB2aXN1YWxpemF0aW9uIHJlcXVpcmVzIHRoZSA9CidjaGFydHMnIHRvb2wu IFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgaW5zdGFsbGVkLiAiK24pLHMmJnMoKX19KX0sX3dhaXQ6 ZnVuYz0KdGlvbih0LG4scil7dmFyIGk9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6 Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0PQpzLyIrdC5nZXQoImRhdGFzZXRfaWRfam9iIiksZGF0 YTp7fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe3ZhciBzPTNEITE7c3dpdGNoKGU9Ci5zdGF0ZSl7Y2Fz ZSJvayI6dC5zdGF0ZSgid2FpdCIsIkpvYiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Li4uIiksbiYm bihlKSxzPQo9M0QhMDticmVhaztjYXNlImVycm9yIjp0LnN0YXRlKCJmYWlsZWQiLCJKb2IgaGFz IGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZSA9Cmhpc3RvcnkgZm9yIGRldGFpbHMuIiksciYmcihl KSxzPTNEITA7YnJlYWs7Y2FzZSJydW5uaW5nIjp0LnN0YXRlKCJ3YWl0IiwiWT0Kb3VyIGpvYiBp cyBydW5uaW5nLiBZb3UgbWF5IGNsb3NlIHRoZSBicm93c2VyIHdpbmRvdy4gVGhlIGpvYiB3aWxs IGNvbnRpbnVlPQogaW4gdGhlIGJhY2tncm91bmQuIil9c3x8c2V0VGltZW91dChmdW5jdGlvbigp e2kuX3dhaXQodCxuLHIpfSxpLmFwcC5jb25maWc9Ci5nZXQoInF1ZXJ5X3RpbWVvdXQiKSl9fSl9 LF9yZWZyZXNoSGRhczpmdW5jdGlvbigpe0dhbGF4eSYmR2FsYXh5LmN1cnJIaXN0bz0KcnlQYW5l bCYmR2FsYXh5LmN1cnJIaXN0b3J5UGFuZWwucmVmcmVzaENvbnRlbnRzKCl9fSl9KSxkZWZpbmUo InBsdWdpbi9saWJyPQphcnkvZGF0YXNldHMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXty ZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQ9Cih7bGlzdDp7fSxjYWNoZTp7fSxpbml0 aWFsaXplOmZ1bmN0aW9uKHQsbil7dGhpcy5hcHA9M0R0LHRoaXMub3B0aW9ucz0zRGUubT0KZXJn ZShuLHRoaXMub3B0aW9uc0RlZmF1bHQpfSxyZXF1ZXN0OmZ1bmN0aW9uKGUpe2UuZ3JvdXBzP3Ro aXMuX2dldF9ibG9ja3MoPQplKTp0aGlzLl9nZXRfZGF0YXNldChlLmlkLGUuc3VjY2VzcyxlLmVy cm9yKX0sX2dldF9ibG9ja3M6ZnVuY3Rpb24oZSl7ZnVuY3Q9CmlvbiBjKGkpe2wuX2dldChpLGZ1 bmN0aW9uKCl7dmFyIHM9M0QhMTtmb3IodmFyIG8gaW4gZS5ncm91cHMpe2Rlc3RpbmF0aW9uXz0K Z3JvdXA9M0RlLmdyb3Vwc1tvXSxzb3VyY2VfZ3JvdXA9M0RpLmdyb3Vwc1tvXSxkZXN0aW5hdGlv bl9ncm91cC52YWx1ZXN8fChkPQplc3RpbmF0aW9uX2dyb3VwLnZhbHVlcz0zRFtdKSxkZXN0aW5h dGlvbl9ncm91cC52YWx1ZXM9M0RkZXN0aW5hdGlvbl9ncm91cC49CnZhbHVlcy5jb25jYXQoc291 cmNlX2dyb3VwLnZhbHVlcyk7aWYoc291cmNlX2dyb3VwLnZhbHVlcy5sZW5ndGg9M0Q9M0QwKXtz PQo9M0QhMDticmVha319aWYoKytmPHUmJiFzKXtuJiZuKHBhcnNlSW50KGYvdSoxMDApKTt2YXIg bD0zRGkuc3RhcnQrcjtpPTNEJC49CmV4dGVuZCghMCxhLHtzdGFydDpsfSksYyhpKX1lbHNlIHQo KX0pfXZhciB0PTNEZS5zdWNjZXNzLG49M0RlLnByb2dyZXNzLHI9Cj0zRHRoaXMuYXBwLmNvbmZp Zy5nZXQoInF1ZXJ5X2xpbWl0IiksaT0zRGUuc3RhcnR8fDAscz0zRGkrZS5xdWVyeV9saW1pdHx8 aT0KK3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0Iiksbz0zRE1hdGguYWJzKHMtaSk7 aWYobzw9M0QwKXtjb25zb2xlLmRlPQpidWcoIkZBSUxFRCAtIERhdGFzZXRzOjpyZXF1ZXN0KCkg LSBJbnZhbGlkIHF1ZXJ5IHJhbmdlLiIpO3JldHVybn12YXIgdT0zRE09CmF0aC5jZWlsKG8vcil8 fDEsYT0zRCQuZXh0ZW5kKCEwLHt9LGUpLGY9M0QwLGw9M0R0aGlzLGg9M0QkLmV4dGVuZCghMCxh LHtzdD0KYXJ0Oml9KTt0aGlzLl9nZXRfZGF0YXNldChlLmlkLGZ1bmN0aW9uKCl7YyhoKX0pfSxf Z2V0X2RhdGFzZXQ6ZnVuY3Rpb24odCxuPQoscil7dmFyIGk9M0R0aGlzLmxpc3RbdF07aWYoaSl7 bihpKTtyZXR1cm59dmFyIHM9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToiR0U9ClQiLHVybDpjb25m aWcucm9vdCsiYXBpL2RhdGFzZXRzLyIrdCxzdWNjZXNzOmZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0 YXRlKXtjYT0Kc2UiZXJyb3IiOnImJnIoZSk7YnJlYWs7ZGVmYXVsdDpzLmxpc3RbdF09M0RlLG4o ZSl9fX0pfSxfYmxvY2tfaWQ6ZnVuY3Rpb24oPQplLHQpe3JldHVybiBlLmlkKyJfIitlLnN0YXJ0 KyJfIitlLnN0YXJ0K3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0Iik9CisiXyIrdH0s X2dldDpmdW5jdGlvbihlLHQpe2Uuc3RhcnQ9M0RlLnN0YXJ0fHwwO3ZhciBuPTNEW10scj0zRHt9 LGk9M0QwO2Zvcj0KKHZhciBzIGluIGUuZ3JvdXBzKXt2YXIgbz0zRGUuZ3JvdXBzW3NdO2Zvcih2 YXIgdSBpbiBvLmNvbHVtbnMpe3ZhciBhPTNEby5jPQpvbHVtbnNbdV0uaW5kZXgsZj0zRHRoaXMu X2Jsb2NrX2lkKGUsYSk7aWYodGhpcy5jYWNoZVtmXXx8YT0zRD0zRD0zRCJhdXRvInw9CnxhPTNE PTNEPTNEInplcm8iKWNvbnRpbnVlOyFyW2FdJiZhIT0zRD0zRHVuZGVmaW5lZCYmKHJbYV09M0Rp LG4ucHVzaChhKSxpKz0KKyl9fWlmKG4ubGVuZ3RoPTNEPTNEMCl7dGhpcy5fZmlsbF9mcm9tX2Nh Y2hlKGUpLHQoZSk7cmV0dXJufXZhciBsPTNEe2RhdGFzPQpldF9pZDplLmlkLHN0YXJ0OmUuc3Rh cnQsY29sdW1uczpufSxjPTNEdGhpczt0aGlzLl9mZXRjaChsLGZ1bmN0aW9uKHIpe2Zvcig9CnZh ciBpIGluIHIpe3ZhciBzPTNEbltpXSxvPTNEYy5fYmxvY2tfaWQoZSxzKTtjLmNhY2hlW29dPTNE cltpXX1jLl9maWxsX2Zybz0KbV9jYWNoZShlKSx0KGUpfSl9LF9maWxsX2Zyb21fY2FjaGU6ZnVu Y3Rpb24oZSl7dmFyIHQ9M0RlLnN0YXJ0O2NvbnNvbGUuZGViPQp1ZygiRGF0YXNldHM6Ol9maWxs X2Zyb21fY2FjaGUoKSAtIEZpbGxpbmcgcmVxdWVzdCBmcm9tIGNhY2hlIGF0ICIrdCsiLiIpO3Y9 CmFyIG49M0QwO2Zvcih2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmb3Io dmFyIHMgaW4gaS5jb2x1bW5zKT0Ke3ZhciBvPTNEaS5jb2x1bW5zW3NdLHU9M0R0aGlzLl9ibG9j a19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2EmJihuPQo9M0RNYXRoLm1heChuLGEu bGVuZ3RoKSl9fW49M0Q9M0QwJiZjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZpbGxfZnJvbV9j YWM9CmhlKCkgLSBSZWFjaGVkIGRhdGEgcmFuZ2UgbGltaXQuIik7Zm9yKHZhciByIGluIGUuZ3Jv dXBzKXt2YXIgaT0zRGUuZ3JvdXBzWz0Kcl07aS52YWx1ZXM9M0RbXTtmb3IodmFyIGY9M0QwO2Y8 bjtmKyspaS52YWx1ZXNbZl09M0R7eDpwYXJzZUludChmKSt0fX1mb3IoPQp2YXIgciBpbiBlLmdy b3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmb3IodmFyIHMgaW4gaS5jb2x1bW5zKXt2YXIgbz0z RGkuY289Cmx1bW5zW3NdO3N3aXRjaChvLmluZGV4KXtjYXNlImF1dG8iOmZvcih2YXIgZj0zRDA7 ZjxuO2YrKyl7dmFyIGw9M0RpLnZhbHVlcz0KW2ZdO2xbc109M0RwYXJzZUludChmKSt0fWJyZWFr O2Nhc2UiemVybyI6Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2YXIgbD0zRGkuPQp2YWx1ZXNbZl07 bFtzXT0zRDB9YnJlYWs7ZGVmYXVsdDp2YXIgdT0zRHRoaXMuX2Jsb2NrX2lkKGUsby5pbmRleCks YT0zRHRoaXM9Ci5jYWNoZVt1XTtmb3IodmFyIGY9M0QwO2Y8bjtmKyspe3ZhciBsPTNEaS52YWx1 ZXNbZl0sYz0zRGFbZl07aXNOYU4oYykmJiFvLj0KaXNfbGFiZWwmJihjPTNEMCksbFtzXT0zRGN9 fX19fSxfZmV0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQuc3RhcnQ/dC5zdGFyPQp0OjAsaT0z RHRoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0Iikscz0zRDA7dC5jb2x1bW5zJiYocz0z RHQuY29sdW1ucy49Cmxlbmd0aCxjb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBG ZXRjaGluZyAiK3MrIiBjb2x1bW4ocykgYXQgIityKz0KIi4iKSkscz0zRD0zRDAmJmNvbnNvbGUu ZGVidWcoIkRhdGFzZXRzOjpfZmV0Y2goKSAtIE5vIGNvbHVtbnMgcmVxdWVzdGVkIik7PQp2YXIg bz0zRCIiO2Zvcih2YXIgdSBpbiB0LmNvbHVtbnMpbys9M0R0LmNvbHVtbnNbdV0rIiwiO289M0Rv LnN1YnN0cmluZygwLG89Ci5sZW5ndGgtMSk7dmFyIGE9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToi R0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cz0KLyIrdC5kYXRhc2V0X2lkLGRhdGE6 e2RhdGFfdHlwZToicmF3X2RhdGEiLHByb3ZpZGVyOiJkYXRhc2V0LWNvbHVtbiIsbGltaXQ6PQpp LG9mZnNldDpyLGluZGVjZXM6b30sc3VjY2VzczpmdW5jdGlvbihlKXt2YXIgdD0zRG5ldyBBcnJh eShzKTtmb3IodmFyIHI9M0Q9CjA7cjxzO3IrKyl0W3JdPTNEW107Zm9yKHZhciByIGluIGUuZGF0 YSl7dmFyIGk9M0RlLmRhdGFbcl07Zm9yKHZhciBvIGluIGkpez0KdmFyIHU9M0RpW29dO3UhPTNE PTNEdW5kZWZpbmVkJiZ1IT0zRDIxNDc0ODM2NDcmJnRbb10ucHVzaCh1KX19Y29uc29sZS5kZWJ1 PQpnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBGZXRjaGluZyBjb21wbGV0ZS4iKSxuKHQpfX0pfX0p fSksZGVmaW5lKCJwbHVnaW4vbW89CmRlbHMvZ3JvdXAiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEJh Y2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2tleToiRGF0YT0KIGxhYmVsIixkYXRlOiIi fSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1 bHRzPQopLHRoaXMudHJpZ2dlcigicmVzZXQiLHRoaXMpfX0pfSksZGVmaW5lKCJwbHVnaW4vbW9k ZWxzL2dyb3VwcyIsWyJwbHVnaW4vbW89CmRlbHMvZ3JvdXAiXSxmdW5jdGlvbihlKXtyZXR1cm4g QmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVsOmV9KX0pLGRlZj0KaW5lKCJwbHVnaW4v bW9kZWxzL2NoYXJ0IixbInBsdWdpbi9tb2RlbHMvZ3JvdXBzIl0sZnVuY3Rpb24oZSl7cmV0dXJu IEJhY2tiPQpvbmUuTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7aWQ6bnVsbCx0aXRsZToiIix0eXBl OiIiLGRhdGU6bnVsbCxzdGF0ZToiIixzdGE9CnRlX2luZm86IiIsbW9kaWZpZWQ6ITEsZGF0YXNl dF9pZDoiIixkYXRhc2V0X2lkX2pvYjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbj0KKHQpe3RoaXMu Z3JvdXBzPTNEbmV3IGUsdGhpcy5zZXR0aW5ncz0zRG5ldyBCYWNrYm9uZS5Nb2RlbH0scmVzZXQ6 ZnVuY3Rpb24oPQope3RoaXMuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0 aGlzLmdyb3Vwcy5yZXNldCgpLHRoaXMuc2V0dGk9Cm5ncy5jbGVhcigpLHRoaXMudHJpZ2dlcigi cmVzZXQiLHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0LmNsZT0KYXIoe3Np bGVudDohMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0LnNldChlLmF0dHJpYnV0ZXMpLHQuc2V0dGlu Z3M9M0RlLnNldHRpPQpuZ3MuY2xvbmUoKSx0Lmdyb3Vwcy5yZXNldCgpLGUuZ3JvdXBzLmVhY2go ZnVuY3Rpb24oZSl7dC5ncm91cHMuYWRkKGUuY2xvbmU9CigpKX0pLHQudHJpZ2dlcigiY2hhbmdl Iix0KX0sc3RhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldCgic3RhdGUiLGUpLHRoaXMucz0KZXQo InN0YXRlX2luZm8iLHQpLHRoaXMudHJpZ2dlcigic2V0OnN0YXRlIiksY29uc29sZS5kZWJ1Zygi Q2hhcnQ6c3RhdGUoKSAtPQogIit0KyIgKCIrZSsiKSIpfX0pfSk7dmFyIFZpc3VhbGl6YXRpb249 M0RCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOns9CmNvbmZpZzp7fX0sdXJsUm9vdDpm dW5jdGlvbigpe3ZhciBlPTNEIi9hcGkvdmlzdWFsaXphdGlvbnMiO3JldHVybiB3aW5kb3cuZz0K YWxheHlfY29uZmlnJiZnYWxheHlfY29uZmlnLnJvb3Q/Z2FsYXh5X2NvbmZpZy5yb290K2U6ZX0s aW5pdGlhbGl6ZTpmdW5jdGlvPQpuKGUpe18uaXNPYmplY3QoZS5jb25maWcpJiZfLmlzT2JqZWN0 KHRoaXMuZGVmYXVsdHMuY29uZmlnKSYmXy5kZWZhdWx0cyhlLmM9Cm9uZmlnLHRoaXMuZGVmYXVs dHMuY29uZmlnKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfSxfc2V0VXBMaXN0ZW5lcnM6ZnVuY3Rp bz0Kbigpe30sc2V0OmZ1bmN0aW9uKGUsdCl7aWYoZT0zRD0zRD0zRCJjb25maWciKXt2YXIgbj0z RHRoaXMuZ2V0KCJjb25maWciKTtfPQouaXNPYmplY3QobikmJih0PTNEXy5leHRlbmQoXy5jbG9u ZShuKSx0KSl9cmV0dXJuIEJhY2tib25lLk1vZGVsLnByb3RvdHlwZS49CnNldC5jYWxsKHRoaXMs ZSx0KSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5nZXQoImlkIil8fCIi O3JldD0KdXJuIHRoaXMuZ2V0KCJ0aXRsZSIpJiYoZSs9M0QiOiIrdGhpcy5nZXQoInRpdGxlIikp LCJWaXN1YWxpemF0aW9uKCIrZSsiKSJ9PQp9KSxWaXN1YWxpemF0aW9uQ29sbGVjdGlvbj0zREJh Y2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpWaXN1YWxpemF0aW89Cm4sdXJsOmZ1bmN0 aW9uKCl7cmV0dXJuIGdhbGF4eV9jb25maWcucm9vdCsiYXBpL3Zpc3VhbGl6YXRpb25zIn0saW5p dGlhbGl6ZT0KOmZ1bmN0aW9uKGUsdCl7dD0zRHR8fHt9fSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIg bj0zRHRoaXM7ZT0zRF8ubWFwKGUsZnVuY3RpPQpvbihlKXt2YXIgdD0zRG4uZ2V0KGUuaWQpO2lm KCF0KXJldHVybiBlO3ZhciByPTNEdC50b0pTT04oKTtyZXR1cm4gXy5leHRlbmQ9CihyLGUpLHJ9 KSxCYWNrYm9uZS5Db2xsZWN0aW9uLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGUsdCl9LHRvU3Ry aW5nOmZ1bmN0aT0Kb24oKXtyZXR1cm5bIlZpc3VhbGl6YXRpb25Db2xsZWN0aW9uKCIsW3RoaXMu aGlzdG9yeUlkLHRoaXMubGVuZ3RoXS5qb2luKCksPQoiKSJdLmpvaW4oIiIpfX0pO2RlZmluZSgi bXZjL3Zpc3VhbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCIsZnVuY3Rpb24oKXs9Cn0pLGRl ZmluZSgicGx1Z2luL2xpYnJhcnkvc3RvcmFnZSIsWyJ1dGlscy91dGlscyIsInBsdWdpbi9tb2Rl bHMvY2hhcnQiLCJwbD0KdWdpbi9tb2RlbHMvZ3JvdXAiLCJtdmMvdmlzdWFsaXphdGlvbi92aXN1 YWxpemF0aW9uLW1vZGVsIl0sZnVuY3Rpb24oZSx0LG4pPQp7cmV0dXJuIEJhY2tib25lLk1vZGVs LmV4dGVuZCh7dmlzOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLmFwcD0zRGU9Cix0 aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5vcHRpb25zPTNEdGhpcy5hcHAub3B0aW9u cyx0aGlzLmlkPTNEdGhpcz0KLm9wdGlvbnMuaWQsdGhpcy52aXM9M0RuZXcgVmlzdWFsaXphdGlv bih7dHlwZToiY2hhcnRzIixjb25maWc6e2RhdGFzZXRfaWQ6PQp0aGlzLm9wdGlvbnMuY29uZmln LmRhdGFzZXRfaWQsY2hhcnRfZGljdDp7fX19KSx0aGlzLmlkJiYodGhpcy52aXMuaWQ9M0R0aGk9 CnMuaWQpO3ZhciB0PTNEdGhpcy5vcHRpb25zLmNvbmZpZy5jaGFydF9kaWN0O3QmJih0aGlzLnZp cy5nZXQoImNvbmZpZyIpLmNoYT0KcnRfZGljdD0zRHQpfSxzYXZlOmZ1bmN0aW9uKCl7dmFyIGU9 M0R0aGlzLmFwcC5jaGFydDt0aGlzLnZpcy5nZXQoImNvbmZpZyIpPQouY2hhcnRfZGljdD0zRHt9 O3ZhciB0PTNEZS5nZXQoInRpdGxlIik7dCE9M0QiIiYmdGhpcy52aXMuc2V0KCJ0aXRsZSIsdCk7 dmE9CnIgbj0zRHthdHRyaWJ1dGVzOmUuYXR0cmlidXRlcyxzZXR0aW5nczplLnNldHRpbmdzLmF0 dHJpYnV0ZXMsZ3JvdXBzOltdfTtlLj0KZ3JvdXBzLmVhY2goZnVuY3Rpb24oZSl7bi5ncm91cHMu cHVzaChlLmF0dHJpYnV0ZXMpfSksdGhpcy52aXMuZ2V0KCJjb25maWciPQopLmNoYXJ0X2RpY3Q9 M0RuO3ZhciByPTNEdGhpczt0aGlzLnZpcy5zYXZlKCkuZmFpbChmdW5jdGlvbihlLHQsbil7Y29u c29sZS49CmVycm9yKGUsdCxuKX0pLnRoZW4oZnVuY3Rpb24oZSl7ZSYmZS5pZCYmKHIuaWQ9M0Rl LmlkKX0pfSxsb2FkOmZ1bmN0aW9uKCl7dj0KYXIgZT0zRHRoaXMudmlzLmdldCgiY29uZmlnIiku Y2hhcnRfZGljdDtpZighZS5hdHRyaWJ1dGVzKXJldHVybiExO3ZhciB0PTNEPQplLmF0dHJpYnV0 ZXMudHlwZTtpZighdClyZXR1cm4gY29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gQ2hh cnQgdHlwZSA9Cm5vdCBwcm92aWRlZC4gSW52YWxpZCBmb3JtYXQuIiksITE7dmFyIHI9M0R0aGlz LmFwcC50eXBlcy5nZXQodCk7aWYoIXIpcmV0dT0Kcm4gY29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6 bG9hZCgpIC0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmUtY29uPQpmaWd1cmUg dGhlIGNoYXJ0LiBSZXNldHRpbmcgY2hhcnQuIiksITE7Y29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6 bG9hZCgpIC0gTG89CmFkaW5nIGNoYXJ0IHR5cGUgIit0KyIuIiksdGhpcy5jaGFydC5kZWZpbml0 aW9uPTNEcix0aGlzLmNoYXJ0LnNldChlLmF0dHJpYj0KdXRlcyksdGhpcy5jaGFydC5zdGF0ZSgi b2siLCJMb2FkaW5nIHNhdmVkIHZpc3VhbGl6YXRpb24uLi4iKSx0aGlzLmNoYXJ0LnNlPQp0dGlu Z3Muc2V0KGUuc2V0dGluZ3MpO2Zvcih2YXIgaSBpbiBlLmdyb3Vwcyl0aGlzLmNoYXJ0Lmdyb3Vw cy5hZGQobmV3IG4oZS49Cmdyb3Vwc1tpXSkpO3JldHVybiB0aGlzLmNoYXJ0LnNldCgibW9kaWZp ZWQiLCExKSwhMH19KX0pLGRlZmluZSgidXRpbHMvZGVmZT0KcnJlZCIsWyJ1dGlscy91dGlscyJd LGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe3F1ZXVlOltdLHByPQpv Y2Vzczp7fSxjb3VudGVyOjAsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMub24oInJlZnJlc2gi LGZ1bmN0aW9uKCl7aWYodGg9CmlzLnF1ZXVlLmxlbmd0aD4wJiZ0aGlzLnJlYWR5KCkpe3ZhciBl PTNEdGhpcy5xdWV1ZVswXTt0aGlzLnF1ZXVlLnNwbGljZSgwLD0KMSksZSYmZSgpfX0pfSxleGVj dXRlOmZ1bmN0aW9uKGUpe3RoaXMucXVldWUucHVzaChlKSx0aGlzLnRyaWdnZXIoInJlZnJlc2gi PQopfSxyZWdpc3RlcjpmdW5jdGlvbigpe3ZhciB0PTNEZS51dWlkKCk7cmV0dXJuIHRoaXMucHJv Y2Vzc1t0XT0zRCEwLHRoaXMuY289CnVudGVyKyssY29uc29sZS5kZWJ1ZygiRGVmZXJyZWQ6cmVn aXN0ZXIoKSAtIFJlZ2lzdGVyaW5nICIrdCksdH0sZG9uZTpmdW5jdD0KaW9uKGUpe3RoaXMucHJv Y2Vzc1tlXSYmKGRlbGV0ZSB0aGlzLnByb2Nlc3NbZV0sdGhpcy5jb3VudGVyLS0sY29uc29sZS5k ZWJ1PQpnKCJEZWZlcnJlZDpkb25lKCkgLSBVbnJlZ2lzdGVyaW5nICIrZSksdGhpcy50cmlnZ2Vy KCJyZWZyZXNoIikpfSxyZXNldDpmdW49CmN0aW9uKCl7dGhpcy5xdWV1ZT0zRFtdfSxyZWFkeTpm dW5jdGlvbigpe3JldHVybiB0aGlzLmNvdW50ZXI9M0Q9M0QwfX0pfSksZD0KZWZpbmUoInBsdWdp bi92aWV3cy92aWV3cG9ydCIsWyJtdmMvdWkvdWktcG9ydGxldCIsIm12Yy91aS91aS1taXNjIiwi dXRpbHMvPQp1dGlscyJdLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRl bmQoe2NvbnRhaW5lcl9saXN0OltdLGNhbnY9CmFzX2xpc3Q6W10saW5pdGlhbGl6ZTpmdW5jdGlv bihlLHQpe3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcj0KdCx0aGlzLm9w dGlvbnM9M0RuLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KCQo dGhpcy5fdGVtPQpwbGF0ZSgpKSksdGhpcy5fZnVsbHNjcmVlbih0aGlzLiRlbCwxMDApO3ZhciBy PTNEJCgiYm9keSIpLmNzcygib3ZlcmZsb3ciKTs9CnRoaXMuJGVsLm9uKCJtb3VzZW92ZXIiLGZ1 bmN0aW9uKCl7JCgiYm9keSIpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKX0pLm9uKD0KIm1vdXNl b3V0IixmdW5jdGlvbigpeyQoImJvZHkiKS5jc3MoIm92ZXJmbG93IixyKX0pLHRoaXMuX2NyZWF0 ZUNvbnRhaW5lcigiPQpkaXYiKTt2YXIgaT0zRHRoaXM7dGhpcy5jaGFydC5vbigicmVkcmF3Iixm dW5jdGlvbigpe2kuX2RyYXcoaS5jaGFydCl9KSx0aGk9CnMuY2hhcnQub24oInNldDpzdGF0ZSIs ZnVuY3Rpb24oKXt2YXIgZT0zRGkuJGVsLmZpbmQoIiNpbmZvIiksdD0zRGkuJGVsLmZpbj0KZCgi LmNoYXJ0cy12aWV3cG9ydC1jb250YWluZXIiKSxuPTNEZS5maW5kKCIjaWNvbiIpO24ucmVtb3Zl Q2xhc3MoKSxlLnNob3coPQopLGUuZmluZCgiI3RleHQiKS5odG1sKGkuY2hhcnQuZ2V0KCJzdGF0 ZV9pbmZvIikpO3ZhciByPTNEaS5jaGFydC5nZXQoInN0YXQ9CmUiKTtzd2l0Y2gocil7Y2FzZSJv ayI6ZS5oaWRlKCksdC5zaG93KCk7YnJlYWs7Y2FzZSJmYWlsZWQiOm4uYWRkQ2xhc3MoImljbz0K biBmYSBmYS13YXJuaW5nIiksdC5oaWRlKCk7YnJlYWs7ZGVmYXVsdDpuLmFkZENsYXNzKCJpY29u IGZhIGZhLXNwaW5uZXIgZmEtPQpzcGluIiksdC5zaG93KCl9fSl9LHNob3c6ZnVuY3Rpb24oKXt0 aGlzLiRlbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiQ9CmVsLmhpZGUoKX0sX2Z1bGxz Y3JlZW46ZnVuY3Rpb24oZSx0KXtlLmNzcygiaGVpZ2h0IiwkKHdpbmRvdykuaGVpZ2h0KCktdCks JD0KKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7ZS5jc3MoImhlaWdodCIsJCh3aW5kb3cpLmhl aWdodCgpLXQpfSl9LF9jcmVhdGVDPQpvbnRhaW5lcjpmdW5jdGlvbihlLHQpe3Q9M0R0fHwxO2Zv cih2YXIgbiBpbiB0aGlzLmNvbnRhaW5lcl9saXN0KXRoaXMuY29udGE9CmluZXJfbGlzdFtuXS5y ZW1vdmUoKTt0aGlzLmNvbnRhaW5lcl9saXN0PTNEW10sdGhpcy5jYW52YXNfbGlzdD0zRFtdO2Zv cih2YT0KciBuPTNEMDtuPHQ7bisrKXt2YXIgcj0zRCQodGhpcy5fdGVtcGxhdGVDb250YWluZXIo ZSxwYXJzZUludCgxMDAvdCkpKTt0aGlzPQouJGVsLmFwcGVuZChyKSx0aGlzLmNvbnRhaW5lcl9s aXN0W25dPTNEcix0aGlzLmNhbnZhc19saXN0W25dPTNEci5maW5kKCIuY2g9CmFydHMtdmlld3Bv cnQtY2FudmFzIikuYXR0cigiaWQiKX19LF9kcmF3OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcyxu PTNEdGhpcz0KLmFwcC5kZWZlcnJlZC5yZWdpc3RlcigpLHI9M0RlLmdldCgidHlwZSIpO3RoaXMu Y2hhcnRfZGVmaW5pdGlvbj0zRGUuZGVmaW5pPQp0aW9uO3ZhciBpPTNEMTtlLnNldHRpbmdzLmdl dCgidXNlX3BhbmVscyIpPTNEPTNEPTNEInRydWUiJiYoaT0zRGUuZ3JvdXBzLmw9CmVuZ3RoKSx0 aGlzLl9jcmVhdGVDb250YWluZXIodGhpcy5jaGFydF9kZWZpbml0aW9uLnRhZyxpKSxlLnN0YXRl KCJ3YWl0IiwiUD0KbGVhc2Ugd2FpdC4uLiIpO2lmKCF0aGlzLmNoYXJ0X2RlZmluaXRpb24uZXhl Y3V0ZXx8dGhpcy5jaGFydF9kZWZpbml0aW9uLmV4PQplY3V0ZSYmZS5nZXQoIm1vZGlmaWVkIikp dGhpcy5hcHAuam9icy5jbGVhbnVwKGUpLGUuc2V0KCJtb2RpZmllZCIsITEpO3ZhciA9CnQ9M0R0 aGlzO3JlcXVpcmUoWyJwbHVnaW4vY2hhcnRzLyIrdGhpcy5hcHAuY2hhcnRQYXRoKHIpKyIvd3Jh cHBlciJdLGZ1bmN0aT0Kb24ocil7aWYodC5jaGFydF9kZWZpbml0aW9uLmV4ZWN1dGUpdC5hcHAu am9icy5yZXF1ZXN0KGUsdC5fZGVmYXVsdFNldHRpbmdzPQpTdHJpbmcoZSksdC5fZGVmYXVsdFJl cXVlc3RTdHJpbmcoZSksZnVuY3Rpb24oKXt2YXIgaT0zRG5ldyByKHQuYXBwLHtwcm9jZXM9CnNf aWQ6bixjaGFydDplLHJlcXVlc3RfZGljdGlvbmFyeTp0Ll9kZWZhdWx0UmVxdWVzdERpY3Rpb25h cnkoZSksY2FudmFzX2xpcz0KdDp0LmNhbnZhc19saXN0fSl9LGZ1bmN0aW9uKCl7dGhpcy5hcHAu ZGVmZXJyZWQuZG9uZShuKX0pO2Vsc2UgdmFyIGk9M0RuZXcgPQpyKHQuYXBwLHtwcm9jZXNzX2lk Om4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpb25hcnk6dC5fZGVmYXVsdFJlcXVlc3REaWN0aW9uYXI9 CnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlzdH0pfSl9LF9kZWZhdWx0UmVxdWVzdFN0cmlu ZzpmdW5jdGlvbihlKXt2YXIgdD0KPTNEIiIsbj0zRDAscj0zRHRoaXM7cmV0dXJuIGUuZ3JvdXBz LmVhY2goZnVuY3Rpb24oZSl7bisrO2Zvcih2YXIgaSBpbiByLmNoPQphcnRfZGVmaW5pdGlvbi5j b2x1bW5zKXQrPTNEaSsiXyIrbisiOiIrKHBhcnNlSW50KGUuZ2V0KGkpKSsxKSsiLCAifSksdC5z dWI9CnN0cmluZygwLHQubGVuZ3RoLTIpfSxfZGVmYXVsdFNldHRpbmdzU3RyaW5nOmZ1bmN0aW9u KGUpe3ZhciB0PTNEIiI7Zm9yKGtleT0KIGluIGUuc2V0dGluZ3MuYXR0cmlidXRlcyl0Kz0zRGtl eSsiOiIrZS5zZXR0aW5ncy5nZXQoa2V5KSsiLCAiO3JldHVybiB0LnN1PQpic3RyaW5nKDAsdC5s ZW5ndGgtMil9LF9kZWZhdWx0UmVxdWVzdERpY3Rpb25hcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R7 Z3JvdXA9CnM6W119O3RoaXMuY2hhcnRfZGVmaW5pdGlvbi5leGVjdXRlP3QuaWQ9M0RlLmdldCgi ZGF0YXNldF9pZF9qb2IiKTp0LmlkPTNEZT0KLmdldCgiZGF0YXNldF9pZCIpO3ZhciByPTNEMCxp PTNEdGhpcztyZXR1cm4gZS5ncm91cHMuZWFjaChmdW5jdGlvbihlKXt2YXIgPQpzPTNEe307Zm9y KHZhciBvIGluIGkuY2hhcnRfZGVmaW5pdGlvbi5jb2x1bW5zKXt2YXIgdT0zRGkuY2hhcnRfZGVm aW5pdGlvbi49CmNvbHVtbnNbb107c1tvXT0zRG4ubWVyZ2Uoe2luZGV4OmUuZ2V0KG8pfSx1KX10 Lmdyb3Vwcy5wdXNoKHtrZXk6KytyKyI6IitlLj0KZ2V0KCJrZXkiKSxjb2x1bW5zOnN9KX0pLHR9 LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNEImNoYXJ0PQpzLXZpZXdw b3J0Ij48ZGl2IGlkPTNEImluZm8iIGNsYXNzPTNEImluZm8iPjxzcGFuIGlkPTNEImljb24iIGNs YXNzPTNEImljb249CiIvPjxzcGFuIGlkPTNEInRleHQiIGNsYXNzPTNEInRleHQiIC8+PC9kaXY+ PC9kaXY+J30sX3RlbXBsYXRlQ29udGFpbmVyOmZ1bj0KY3Rpb24oZSx0KXtyZXR1cm4nPGRpdiBj bGFzcz0zRCJjaGFydHMtdmlld3BvcnQtY29udGFpbmVyIiBzdHlsZT0zRCJ3aWR0aDonPQordCsn JTsiPicrJzxkaXYgaWQ9M0QibWVudSIvPicrIjwiK2UrJyBpZD0zRCInK24udXVpZCgpKyciIGNs YXNzPTNEImNoYXJ0cy09CnZpZXdwb3J0LWNhbnZhcyI+JysiPC9kaXY+In19KX0pLGRlZmluZSgi cGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCIsWyJsaWJzLz0KdW5kZXJzY29yZSJdLGZ1bmN0aW9u KGUpe2Z1bmN0aW9uIHQoZSl7ZS4kZWwuZmluZCgic3ZnIikubGVuZ3RoPjA/cihlKTpuKGUpPQp9 ZnVuY3Rpb24gbihlKXt0cnl7dmFyIHQ9M0RlLiRlbC5maW5kKCIuanFwbG90LXRhcmdldCIpLG49 M0R0LmpxcGxvdFRvSW1hZ2U9ClN0cih7fSk7biYmKHdpbmRvdy5sb2NhdGlvbi5ocmVmPTNEbi5y ZXBsYWNlKCJpbWFnZS9wbmciLCJpbWFnZS9vY3RldC1zdHJlYT0KbSIpKX1jYXRjaChyKXtjb25z b2xlLmRlYnVnKCJGQUlMRUQgLSBTY3JlZW5zaG90OjpfZnJvbUNhbnZhcygpIC0gIityKSxlLmVy PQpyb3ImJmUuZXJyb3IoIlBsZWFzZSByZWR1Y2UgeW91ciBjaGFydCB0byBhIHNpbmdsZSBwYW5l bCBhbmQgdHJ5IGFnYWluLiIpfX09CmZ1bmN0aW9uIHIoZSl7dmFyIHQ9M0RlLiRlbCxuPTNEZS51 cmwscj0zRGUubmFtZSxzPTNEbmV3IFhNTFNlcmlhbGl6ZXIsbz0zRD0KZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgiY2FudmFzIiksdT0zRCQobyksYT0zRHQuZmluZCgic3ZnIikubGVuZ3RoLGY9M0R0 LmZpPQpuZCgic3ZnIikuZmlyc3QoKSxsPTNEcGFyc2VJbnQoZi5jc3MoImhlaWdodCIpKSxjPTNE cGFyc2VJbnQoZi5jc3MoIndpZHRoIik9Cik7dS5hdHRyKCJ3aWR0aCIsYyphKSx1LmF0dHIoImhl aWdodCIsbCksKCFvLmdldENvbnRleHR8fCFvLmdldENvbnRleHQoIjJkIj0KKSkmJmFsZXJ0KCJZ b3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgcGxlYXNlIHVzZSBhIG1v ZGVybiBiPQpyb3dzZXIiKTt2YXIgaD0zRG8uZ2V0Q29udGV4dCgiMmQiKSxwPTNEMDt0LmZpbmQo InN2ZyIpLmVhY2goZnVuY3Rpb24oKXt2YXI9CiBlPTNEJCh0aGlzKTtlLmF0dHIoe3ZlcnNpb246 IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aD0KOmMsaGVpZ2h0 Omx9KTt2YXIgdD0zRHMuc2VyaWFsaXplVG9TdHJpbmcodGhpcyk7aC5kcmF3U3ZnKHQscCwwLGMs bCkscCs9M0RjPQp9KSx3aW5kb3cubG9jYXRpb24uaHJlZj0zRGkobyxvLmdldENvbnRleHQoIjJk IiksIndoaXRlIikucmVwbGFjZSgiaW1hZ2UvcG49CmciLCJpbWFnZS9vY3RldC1zdHJlYW0iKX1m dW5jdGlvbiBpKGUsdCxuKXt2YXIgcj0zRGUud2lkdGgsaT0zRGUuaGVpZ2h0LHM7aT0KZihuKXtz PTNEdC5nZXRJbWFnZURhdGEoMCwwLHIsaSk7dmFyIG89M0R0Lmdsb2JhbENvbXBvc2l0ZU9wZXJh dGlvbjt0Lmdsb2JhPQpsQ29tcG9zaXRlT3BlcmF0aW9uPTNEImRlc3RpbmF0aW9uLW92ZXIiLHQu ZmlsbFN0eWxlPTNEbix0LmZpbGxSZWN0KDAsMCxyLGk9Cil9dmFyIHU9M0RlLnRvRGF0YVVSTCgi aW1hZ2UvcG5nIik7cmV0dXJuIG4mJih0LmNsZWFyUmVjdCgwLDAscixpKSx0LnB1dEltYT0KZ2VE YXRhKHMsMCwwKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0zRG8pLHV9ZnVuY3Rpb24gcyhl KXt3aW5kb3cubG9jYXRpPQpvbi5ocmVmPTNEImRhdGE6bm9uZS9ub25lO2Jhc2U2NCwiK2J0b2Eo YShlKS5zdHJpbmcpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciA9CnQgaW4gZG9jdW1lbnQuc3R5bGVT aGVldHMpe3ZhciBuPTNEZG9jdW1lbnQuc3R5bGVTaGVldHNbdF0scj0zRG4uY3NzUnVsZXM7aT0K ZihyKWZvcih2YXIgaT0zRDAscz0zRHIubGVuZ3RoO2k8cztpKyspdHJ5e2UuZmluZChyW2ldLnNl bGVjdG9yVGV4dCkuZWFjaChmPQp1bmN0aW9uKGUsdCl7dC5zdHlsZS5jc3NUZXh0Kz0zRHJbaV0u c3R5bGUuY3NzVGV4dH0pfWNhdGNoKG8pe319fWZ1bmN0aW9uIHU9CihlKXt2YXIgdD0zRGEoZSks bj0zRHtmaWxlbmFtZTpuYW1lfHwiY2hhcnQiLHR5cGU6ImFwcGxpY2F0aW9uL3BkZiIsaGVpZ2h0 Oj0KdC5oZWlnaHQsd2lkdGg6dC53aWR0aCxzY2FsZToyLHN2Zzp0LnN0cmluZ30scj0zRCQoImJv ZHkiKSxpPTNEci5maW5kKCIjdmllPQp3cG9ydC1mb3JtIik7aS5sZW5ndGg9M0Q9M0Q9M0QwJiYo aT0zRCQoIjxmb3JtPiIse2lkOiJ2aWV3cG9ydC1mb3JtIixtZXRob2Q9CjoicG9zdCIsYWN0aW9u OiJodHRwOi8vZXhwb3J0LmhpZ2hjaGFydHMuY29tLyIsZGlzcGxheToibm9uZSJ9KSxyLmFwcGVu ZChpKT0KKSxpLmVtcHR5KCk7Zm9yKG5hbWUgaW4gbil7dmFyIHM9M0QkKCI8aW5wdXQvPiIse3R5 cGU6ImhpZGRlbiIsbmFtZTpuYW1lLHZhPQpsdWU6bltuYW1lXX0pO2kuYXBwZW5kKHMpfXRyeXtp LnN1Ym1pdCgpfWNhdGNoKG8pe2NvbnNvbGUubG9nKG8pfX1mdW5jdGlvbiA9CmEoZSl7aWYoZS4k ZWwuZmluZCgic3ZnIikubGVuZ3RoPTNEPTNEMCYmZS5lcnJvcil7ZS5lcnJvcigiTm8gU1ZHIGZv dW5kLiBUaD0KaXMgY2hhcnQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IFNWRy9QREYgZXhwb3J0LiIp O3JldHVybn12YXIgdD0zRGUuJGVsLG49M0R0PQouZmluZCgic3ZnIikubGVuZ3RoLHI9M0RwYXJz ZUludCh0LmZpbmQoInN2ZyIpLmZpcnN0KCkuY3NzKCJoZWlnaHQiKSksaT0zRHA9CmFyc2VJbnQo dC5maW5kKCJzdmciKS5maXJzdCgpLmNzcygid2lkdGgiKSkscz0zRG5ldyBYTUxTZXJpYWxpemVy LHU9M0QkKCI8cz0KdmcvPiIpO3UuYXR0cih7dmVyc2lvbjoiMS4xIix4bWxuczoiaHR0cDovL3d3 dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmkqbixoPQplaWdodDpyfSk7dmFyIGE9M0QiIixmPTNE MDtyZXR1cm4gdC5maW5kKCJzdmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9M0QkKHQ9Cmhpcyku Y2xvbmUoKTtvKGUpO3ZhciB0PTNEJCgnPGcgdHJhbnNmb3JtPTNEInRyYW5zbGF0ZSgnK2YrJywg MCkiPicpO3QuYXBwZT0KbmQoZS5maW5kKCJnIikuZmlyc3QoKSksdS5hcHBlbmQodCksZis9M0Rp fSkse3N0cmluZzpzLnNlcmlhbGl6ZVRvU3RyaW5nKHVbPQowXSksaGVpZ2h0OnIsd2lkdGg6aX19 cmV0dXJue2NyZWF0ZVBORzp0LGNyZWF0ZVNWRzpzLGNyZWF0ZVBERjp1fX0pLGRlZmluZSg9CiJw bHVnaW4vdmlld3Mvdmlld2VyIixbInV0aWxzL3V0aWxzIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMv dWkvdWktcG9ydGxldCIsIj0KcGx1Z2luL3ZpZXdzL3ZpZXdwb3J0IiwicGx1Z2luL2xpYnJhcnkv c2NyZWVuc2hvdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0PQp1cm4gQmFja2JvbmUuVmlldy5l eHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSxzKXt0aGlzLmFwcD0zRGUsdGhpcy5jaGFydD0K PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy52aWV3cG9ydF92aWV3PTNEbmV3IHIoZSk7dmFyIG89M0R0 aGlzO3RoaXMubWVzc2FnZT0KPTNEbmV3IHQuTWVzc2FnZTt2YXIgdT0zRG5ldyB0LkJ1dHRvbk1l bnUoe2ljb246ImZhLWNhbWVyYSIsdGl0bGU6IlNjcmVlbnNoPQpvdCIsdG9vbHRpcDoiRG93bmxv YWQgYXMgUE5HLCBTVkcgb3IgUERGIGZpbGUifSk7dS5hZGRNZW51KHtpZDoiYnV0dG9uLXBuZyI9 Cix0aXRsZToiU2F2ZSBhcyBQTkciLGljb246ImZhLWZpbGUiLG9uY2xpY2s6ZnVuY3Rpb24oKXtv Ll93YWl0KG8uY2hhcnQsZnVuYz0KdGlvbigpe2kuY3JlYXRlUE5HKHskZWw6by52aWV3cG9ydF92 aWV3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSxlcnJvPQpyOmZ1bmN0aW9uKGUpe28u bWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX0pLHUuYWRk TWU9Cm51KHtpZDoiYnV0dG9uLXN2ZyIsdGl0bGU6IlNhdmUgYXMgU1ZHIixpY29uOiJmYS1maWxl LXRleHQtbyIsb25jbGljazpmdW5jdD0KaW9uKCl7by5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7 aS5jcmVhdGVTVkcoeyRlbDpvLnZpZXdwb3J0X3ZpZXcuJGVsLHRpdGxlPQo6by5jaGFydC5nZXQo InRpdGxlIiksZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYWdlLnVwZGF0ZSh7bWVzc2FnZTplLHN0 YXR1czo9CiJkYW5nZXIifSl9fSl9KX19KSx1LmFkZE1lbnUoe2lkOiJidXR0b24tcG5nIix0aXRs ZToiU2F2ZSBhcyBQREYiLGljb246ImZhLT0KZmlsZS1vIixvbmNsaWNrOmZ1bmN0aW9uKCl7by5h cHAubW9kYWwuc2hvdyh7dGl0bGU6IlNlbmQgY2hhcnQgZGF0YSBmb3IgUERGPQogY3JlYXRpb24i LGJvZHk6IkdhbGF4eSBkb2VzIG5vdCBwcm92aWRlIGludGVncmF0ZWQgUERGIGV4cG9ydCBzY3Jp cHRzLiBZb3U9CiBtYXkgY2xpY2sgJ0NvbnRpbnVlJyB0byBjcmVhdGUgdGhlIFBERiBieSB1c2lu ZyBhIDNyZCBwYXJ0eSBzZXJ2aWNlIChodHRwcz0KOi8vZXhwb3J0LmhpZ2hjaGFydHMuY29tKS4i LGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUoKX0sPQpDb250aW51 ZTpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUoKSxvLl93YWl0KG8uY2hhcnQsZnVuY3Rpb24o KXtpLmNyZWF0ZVA9CkRGKHskZWw6by52aWV3cG9ydF92aWV3LiRlbCx0aXRsZTpvLmNoYXJ0Lmdl dCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtvLj0KbWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6 ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX19KX19KSx0aGlzLnBvcnRsZXQ9M0RuZXcgPQpuLlZp ZXcoe2ljb246ImZhLWJhci1jaGFydC1vIix0aXRsZToiVmlld3BvcnQiLG9wZXJhdGlvbnM6e2Vk aXRfYnV0dG9uOm5ldyA9CnQuQnV0dG9uSWNvbih7aWNvbjoiZmEtZWRpdCIsdG9vbHRpcDoiQ3Vz dG9taXplIHRoaXMgY2hhcnQiLHRpdGxlOiJFZGl0b3IiLD0Kb25jbGljazpmdW5jdGlvbigpe28u X3dhaXQoby5jaGFydCxmdW5jdGlvbigpe28uYXBwLmdvKCJlZGl0b3IiKX0pfX0pLHBpY3R1PQpy ZV9idXR0b25fbWVudTp1fX0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCks dGhpcy5wb3J0bGV0LmFwcGU9Cm5kKHRoaXMudmlld3BvcnRfdmlldy4kZWwpLHRoaXMuc2V0RWxl bWVudCh0aGlzLnBvcnRsZXQuJGVsKTt2YXIgbz0zRHRoaXM7dD0KaGlzLmNoYXJ0Lm9uKCJjaGFu Z2U6dGl0bGUiLGZ1bmN0aW9uKCl7by5fcmVmcmVzaFRpdGxlKCl9KX0sc2hvdzpmdW5jdGlvbigp PQp7dGhpcy4kZWwuc2hvdygpLCQod2luZG93KS50cmlnZ2VyKCJyZXNpemUiKX0saGlkZTpmdW5j dGlvbigpe3RoaXMuJGVsLmhpZGU9CigpfSxfcmVmcmVzaFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGU9 M0R0aGlzLmNoYXJ0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRsZXQudD0KaXRsZShlKX0sX3dhaXQ6 ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcC5kZWZlcnJlZC5yZWFkeSgpP3QoKTp0aGlzLm1lc3NhZ2Uu dXBkPQphdGUoe21lc3NhZ2U6IllvdXIgY2hhcnQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3Nl ZC4gUGxlYXNlIHdhaXQgYW5kIHRyeSA9CmFnYWluLiJ9KX19KX0pLGRlZmluZSgibXZjL3VpL3Vp LXRhYnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zRD0KQmFja2JvbmUuVmll dy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZV9uZXc6IiIsb3BlcmF0aW9uczpudWxsLG9u bmV3Om51PQpsbCxtYXg6bnVsbCxvbmNoYW5nZTpudWxsfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQp e3RoaXMudmlzaWJsZT0zRCExLHRoaXMuJG49CmF2PTNEbnVsbCx0aGlzLiRjb250ZW50PTNEbnVs bCx0aGlzLmZpcnN0X3RhYj0zRG51bGwsdGhpcy5jdXJyZW50X2lkPTNEbnVsbD0KLHRoaXMub3B0 aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQodGhpcy5fdGVt cGxhdGUodGhpPQpzLm9wdGlvbnMpKTt0aGlzLiRuYXY9M0RuLmZpbmQoIi50YWItbmF2aWdhdGlv biIpLHRoaXMuJGNvbnRlbnQ9M0RuLmZpbmQoIi49CnRhYi1jb250ZW50IiksdGhpcy5zZXRFbGVt ZW50KG4pLHRoaXMubGlzdD0zRHt9O3ZhciByPTNEdGhpczt0aGlzLm9wdGlvbnMubz0KcGVyYXRp b25zJiYkLmVhY2godGhpcy5vcHRpb25zLm9wZXJhdGlvbnMsZnVuY3Rpb24oZSx0KXt0LiRlbC5w cm9wKCJpZCIsZSksPQpyLiRuYXYuZmluZCgiLm9wZXJhdGlvbnMiKS5hcHBlbmQodC4kZWwpfSk7 aWYodGhpcy5vcHRpb25zLm9ubmV3KXt2YXIgaT0zRCQ9Cih0aGlzLl90ZW1wbGF0ZV90YWJfbmV3 KHRoaXMub3B0aW9ucykpO3RoaXMuJG5hdi5hcHBlbmQoaSksaS50b29sdGlwKHt0aXRsZT0KOiJB ZGQgYSBuZXcgdGFiIixwbGFjZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyOnIuJGVsfSksaS5vbigi Y2xpY2siLGZ1bmN0aW9uPQooZSl7aS50b29sdGlwKCJoaWRlIiksci5vcHRpb25zLm9ubmV3KCl9 KX19LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zaXplKHQ9Cmhpcy5saXN0KX0sY3VycmVudDpm dW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudGFiLXBhbmUuYWN0aXZlIikuYXR0cj0K KCJpZCIpfSxhZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0RlLmlkLHI9M0QkKHRoaXMu X3RlbXBsYXRlX3RhYihlKSksPQppPTNEJCh0aGlzLl90ZW1wbGF0ZV90YWJfY29udGVudChlKSk7 dGhpcy5saXN0W25dPTNEZS5vbmRlbD8hMDohMSx0aGlzLm9wdGk9Cm9ucy5vbm5ldz90aGlzLiRu YXYuZmluZCgiI25ldy10YWIiKS5iZWZvcmUocik6dGhpcy4kbmF2LmFwcGVuZChyKSxpLmFwcGVu ZD0KKGUuJGVsKSx0aGlzLiRjb250ZW50LmFwcGVuZChpKSx0aGlzLnNpemUoKT0zRD0zRDEmJihy LmFkZENsYXNzKCJhY3RpdmUiKSxpPQouYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuZmlyc3RfdGFi PTNEbiksdGhpcy5vcHRpb25zLm1heCYmdGhpcy5zaXplKCk+PTNEdGg9CmlzLm9wdGlvbnMubWF4 JiZ0aGlzLiRlbC5maW5kKCIjbmV3LXRhYiIpLmhpZGUoKTtpZihlLm9uZGVsKXt2YXIgcz0zRHIu ZmluZD0KKCIjZGVsZXRlIik7cy50b29sdGlwKHt0aXRsZToiRGVsZXRlIHRoaXMgdGFiIixwbGFj ZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyPQo6dC4kZWx9KSxzLm9uKCJjbGljayIsZnVuY3Rpb24o KXtyZXR1cm4gcy50b29sdGlwKCJkZXN0cm95IiksdC4kZWwuZmluZCgiLnQ9Cm9vbHRpcCIpLnJl bW92ZSgpLGUub25kZWwoKSwhMX0pfXIub24oImNsaWNrIixmdW5jdGlvbihyKXtyLnByZXZlbnRE ZWZhdWx0KD0KKSxlLm9uY2xpY2s/ZS5vbmNsaWNrKCk6dC5zaG93KG4pfSksdGhpcy5jdXJyZW50 X2lkfHwodGhpcy5jdXJyZW50X2lkPTNEbil9PQosZGVsOmZ1bmN0aW9uKGUpe3RoaXMuJGVsLmZp bmQoIiN0YWItIitlKS5yZW1vdmUoKSx0aGlzLiRlbC5maW5kKCIjIitlKS5yZW09Cm92ZSgpLHRo aXMuZmlyc3RfdGFiPTNEPTNEZSYmKHRoaXMuZmlyc3RfdGFiPTNEbnVsbCksdGhpcy5maXJzdF90 YWIhPTNEbnVsbD0KJiZ0aGlzLnNob3codGhpcy5maXJzdF90YWIpLHRoaXMubGlzdFtlXSYmZGVs ZXRlIHRoaXMubGlzdFtlXSx0aGlzLnNpemUoKTx0PQpoaXMub3B0aW9ucy5tYXgmJnRoaXMuJGVs LmZpbmQoIiNuZXctdGFiIikuc2hvdygpfSxkZWxSZW1vdmFibGU6ZnVuY3Rpb24oKXs9CmZvcih2 YXIgZSBpbiB0aGlzLmxpc3QpdGhpcy5kZWwoZSl9LHNob3c6ZnVuY3Rpb24oZSl7dGhpcy4kZWwu ZmFkZUluKCJmYXN0Ij0KKSx0aGlzLnZpc2libGU9M0QhMCxlJiYodGhpcy4kZWwuZmluZCgiI3Rh Yi0iK3RoaXMuY3VycmVudF9pZCkucmVtb3ZlQ2xhc3MoPQoiYWN0aXZlIiksdGhpcy4kZWwuZmlu ZCgiIyIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWw9Ci5m aW5kKCIjdGFiLSIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVsLmZpbmQoIiMiK2UpLmFk ZENsYXNzKCJhY3RpdmUiKT0KLHRoaXMuY3VycmVudF9pZD0zRGUpLHRoaXMub3B0aW9ucy5vbmNo YW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpfSxoaWRlPQo6ZnVuY3Rpb24oKXt0aGlzLiRl bC5mYWRlT3V0KCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITF9LGhpZGVPcGVyYXRpb246ZnVuY3Q9 CmlvbihlKXt0aGlzLiRuYXYuZmluZCgiIyIrZSkuaGlkZSgpfSxzaG93T3BlcmF0aW9uOmZ1bmN0 aW9uKGUpe3RoaXMuJG5hdi5maT0KbmQoIiMiK2UpLnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0 aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRuYXYuZmluZCgiIyIrZSk7PQpuLm9mZigiY2xpY2siKSxu Lm9uKCJjbGljayIsdCl9LHRpdGxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRlbC5maW5k KCI9CiN0YWItdGl0bGUtdGV4dC0iK2UpO3JldHVybiB0JiZuLmh0bWwodCksbi5odG1sKCl9LHJl dGl0bGU6ZnVuY3Rpb24oZSl7dmFyID0KdD0zRDA7Zm9yKHZhciBuIGluIHRoaXMubGlzdCl0aGlz LnRpdGxlKG4sKyt0KyI6ICIrZSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlPQope3JldHVybic8ZGl2 IGNsYXNzPTNEInVpLXRhYnMgdGFiYmFibGUgdGFicy1sZWZ0Ij48dWwgaWQ9M0QidGFiLW5hdmln YXRpb249CiIgY2xhc3M9M0QidGFiLW5hdmlnYXRpb24gbmF2IG5hdi10YWJzIj48ZGl2IGNsYXNz PTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEIj0KZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tYm90dG9tOiA0 cHg7Ij48L2Rpdj48L3VsPjxkaXYgaWQ9M0QidGFiLWNvbnRlbnQiIGNsYXNzPQo9M0QidGFiLWNv bnRlbnQiLz48L2Rpdj4nfSxfdGVtcGxhdGVfdGFiX25ldzpmdW5jdGlvbihlKXtyZXR1cm4nPGxp IGlkPTNEIm49CmV3LXRhYiI+PGEgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCk7Ij48aSBjbGFz cz0zRCJ1aS10YWJzLWFkZCBmYSBmYS1wbHVzLT0KY2lyY2xlIi8+JytlLnRpdGxlX25ldysiPC9h PiIrIjwvbGk+In0sX3RlbXBsYXRlX3RhYjpmdW5jdGlvbihlKXt2YXIgdD0zRCc8PQpsaSBpZD0z RCJ0YWItJytlLmlkKyciIGNsYXNzPTNEInRhYi1lbGVtZW50Ij4nKyc8YSBpZD0zRCJ0YWItdGl0 bGUtbGluay0nK2U9Ci5pZCsnIiB0aXRsZT0zRCIiIGhyZWY9M0QiIycrZS5pZCsnIiBkYXRhLW9y aWdpbmFsLXRpdGxlPTNEIiI+JysnPHNwYW4gaWQ9Cj0zRCJ0YWItdGl0bGUtdGV4dC0nK2UuaWQr JyIgY2xhc3M9M0QidGFiLXRpdGxlLXRleHQiPicrZS50aXRsZSsiPC9zcGFuPiI7cj0KZXR1cm4g ZS5vbmRlbCYmKHQrPTNEJzxpIGlkPTNEImRlbGV0ZSIgY2xhc3M9M0QidWktdGFicy1kZWxldGUg ZmEgZmEtbWludXMtPQpjaXJjbGUiLz4nKSx0Kz0zRCI8L2E+PC9saT4iLHR9LF90ZW1wbGF0ZV90 YWJfY29udGVudDpmdW5jdGlvbihlKXtyZXR1cm4nPGQ9Cml2IGlkPTNEIicrZS5pZCsnIiBjbGFz cz0zRCJ0YWItcGFuZSIvPid9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aT0KL3Vp LXRhYmxlIixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7cm93Om51PQpsbCxyb3dfY291bnQ6MCxvcHRpb25zRGVmYXVsdDp7Y29udGVudDoi Tm8gY29udGVudCBhdmFpbGFibGUuIixvbmNoYW5nZTpudWw9Cmwsb25kYmxjbGljazpudWxsLG9u Y29uZmlybTpudWxsLGNsczoidWktdGFibGUiLGNsc190cjoiIn0sZXZlbnRzOntjbGljazoiXz0K b25jbGljayIsZGJsY2xpY2s6Il9vbmRibGNsaWNrIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0 aGlzLm9wdGlvbnM9M0RlLm1lPQpyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQo dGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7dGhpcy4kdGg9CmVhZD0zRG4uZmluZCgidGhl YWQiKSx0aGlzLiR0Ym9keT0zRG4uZmluZCgidGJvZHkiKSx0aGlzLiR0bWVzc2FnZT0zRG4uZmlu ZD0KKCJ0bWVzc2FnZSIpLHRoaXMuc2V0RWxlbWVudChuKSx0aGlzLnJvdz0zRHRoaXMuX3Jvdygp fSxhZGRIZWFkZXI6ZnVuY3Rpb24oPQplKXt2YXIgdD0zRCQoIjx0aD48L3RoPiIpO3QuYXBwZW5k KGUpLHRoaXMucm93LmFwcGVuZCh0KX0sYXBwZW5kSGVhZGVyOmZ1bmM9CnRpb24oKXt0aGlzLiR0 aGVhZC5hcHBlbmQodGhpcy5yb3cpLHRoaXMucm93PTNEJCgiPHRyPjwvdHI+Iil9LGFkZDpmdW5j dGlvbj0KKGUsdCxuKXt2YXIgcj0zRCQoIjx0ZD48L3RkPiIpO3QmJnIuY3NzKCJ3aWR0aCIsdCks biYmci5jc3MoInRleHQtYWxpZ24iLG4pPQosci5hcHBlbmQoZSksdGhpcy5yb3cuYXBwZW5kKHIp fSxhcHBlbmQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb21taXQoZSx0LCExKX09CixwcmVwZW5kOmZ1 bmN0aW9uKGUsdCl7dGhpcy5fY29tbWl0KGUsdCwhMCl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4g dGhpcy4kZT0KbC5maW5kKCIjIitlKX0sZGVsOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy4kdGJv ZHkuZmluZCgiIyIrZSk7dC5sZW5ndGg+MCYmPQoodC5yZW1vdmUoKSx0aGlzLnJvd19jb3VudC0t LHRoaXMuX3JlZnJlc2goKSl9LGRlbEFsbDpmdW5jdGlvbigpe3RoaXMuJHRib2Q9CnkuZW1wdHko KSx0aGlzLnJvd19jb3VudD0zRDAsdGhpcy5fcmVmcmVzaCgpfSx2YWx1ZTpmdW5jdGlvbihlKXt0 aGlzLmJlZm9yZT0KPTNEdGhpcy4kdGJvZHkuZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpLGUh PTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kdGJvZHkuPQpmaW5kKCJ0ciIpLnJlbW92ZUNsYXNzKCJj dXJyZW50IiksZSYmdGhpcy4kdGJvZHkuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImN1cnI9CmVudCIp KTt2YXIgdD0zRHRoaXMuJHRib2R5LmZpbmQoIi5jdXJyZW50IikuYXR0cigiaWQiKTtyZXR1cm4g dD0zRD0zRD0zRHVuZD0KZWZpbmVkP251bGw6KHQhPTNEdGhpcy5iZWZvcmUmJnRoaXMub3B0aW9u cy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlPQooZSksdCl9LHNpemU6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy4kdGJvZHkuZmluZCgidHIiKS5sZW5ndGh9LF9jb21taXQ6ZnVuY3Q9Cmlv bihlLHQsbil7dGhpcy5kZWwoZSksdGhpcy5yb3cuYXR0cigiaWQiLGUpLG4/dGhpcy4kdGJvZHku cHJlcGVuZCh0aGlzLnJvdz0KKTp0aGlzLiR0Ym9keS5hcHBlbmQodGhpcy5yb3cpLHQmJih0aGlz LnJvdy5oaWRlKCksdGhpcy5yb3cuZmFkZUluKCkpLHRoaXMuPQpyb3c9M0R0aGlzLl9yb3coKSx0 aGlzLnJvd19jb3VudCsrLHRoaXMuX3JlZnJlc2goKX0sX3JvdzpmdW5jdGlvbigpe3JldHVybiA9 CiQoJzx0ciBjbGFzcz0zRCInK3RoaXMub3B0aW9ucy5jbHNfdHIrJyI+PC90cj4nKX0sX29uY2xp Y2s6ZnVuY3Rpb24oZSl7dmFyID0KdD0zRHRoaXMudmFsdWUoKSxuPTNEJChlLnRhcmdldCkuY2xv c2VzdCgidHIiKS5hdHRyKCJpZCIpO24hPTNEIiImJm4mJnQhPTNEPQpuJiYodGhpcy5vcHRpb25z Lm9uY29uZmlybT90aGlzLm9wdGlvbnMub25jb25maXJtKG4pOnRoaXMudmFsdWUobikpfSxfb25k Ymw9CmNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy52YWx1ZSgpO3QmJnRoaXMub3B0aW9u cy5vbmRibGNsaWNrJiZ0aGlzLm9wdD0KaW9ucy5vbmRibGNsaWNrKHQpfSxfcmVmcmVzaDpmdW5j dGlvbigpe3RoaXMucm93X2NvdW50PTNEPTNEMD90aGlzLiR0bWVzc2FnPQplLnNob3coKTp0aGlz LiR0bWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdj48dGFi bGUgY2w9CmFzcz0zRCInK2UuY2xzKyciPicrIjx0aGVhZD48L3RoZWFkPiIrIjx0Ym9keT48L3Ri b2R5PiIrIjwvdGFibGU+IisiPHRtZXNzYT0KZ2U+IitlLmNvbnRlbnQrIjwvdG1lc3NhZ2U+Iisi PGRpdj4ifX0pO3JldHVybntWaWV3OnR9fSksZGVmaW5lKCJwbHVnaW4vdmllPQp3cy9ncm91cCIs WyJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVuY3Rp b24oZSx0LG49Cil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0 aW9uKHIsaSl7dGhpcy5hcHA9M0RyO3ZhciBzPQo9M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlzLmFw cC5jaGFydCx0aGlzLmdyb3VwPTNEaS5ncm91cCx0aGlzLmdyb3VwX2tleT0zRG49CmV3IHQuSW5w dXQoe3BsYWNlaG9sZGVyOiJEYXRhIGxhYmVsIixvbmNoYW5nZTpmdW5jdGlvbihlKXtzLmdyb3Vw LnNldCgia2V5Ij0KLGUpfX0pLHRoaXMudGFibGU9M0RuZXcgZS5WaWV3KHtjb250ZW50OiJObyBk YXRhIGNvbHVtbi4ifSk7dmFyIG89M0QkKCI8ZGl2PQovPiIpO28uYXBwZW5kKG4ud3JhcCgobmV3 IHQuTGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgbGFiZWw6In0pKS4kZWwpKSxvLmFwcGU9Cm5kKG4u d3JhcCh0aGlzLmdyb3VwX2tleS4kZWwpKSxvLmFwcGVuZChuLndyYXAoKG5ldyB0LkxhYmVsKHt0 aXRsZToiU2VsZWN0ID0KY29sdW1uczoifSkpLiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLnRh YmxlLiRlbCkpLHRoaXMuc2V0RWxlbWVudChvKTt2YXIgPQpzPTNEdGhpczt0aGlzLmNoYXJ0Lm9u KCJjaGFuZ2U6ZGF0YXNldF9pZCIsZnVuY3Rpb24oKXtzLl9yZWZyZXNoVGFibGUoKX0pLHQ9Cmhp cy5jaGFydC5vbigiY2hhbmdlOnR5cGUiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaFRhYmxlKCl9KSx0 aGlzLmdyb3VwLm9uKCJjaD0KYW5nZTprZXkiLGZ1bmN0aW9uKCl7cy5fcmVmcmVzaEdyb3VwS2V5 KCl9KSx0aGlzLmdyb3VwLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uPQooKXtzLl9yZWZyZXNoR3JvdXAo KX0pLHRoaXMuX3JlZnJlc2hUYWJsZSgpLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMuX3I9 CmVmcmVzaEdyb3VwKCl9LF9yZWZyZXNoVGFibGU6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuY2hh cnQuZ2V0KCJkYXRhc2V0X2lkIj0KKSxuPTNEdGhpcy5jaGFydC5nZXQoInR5cGUiKTtpZighZXx8 IW4pcmV0dXJuO3ZhciByPTNEdGhpcyxpPTNEdGhpcy5jaGFydC5kPQplZmluaXRpb247dGhpcy50 YWJsZS5kZWxBbGwoKTt2YXIgcz0zRHt9O2Zvcih2YXIgbyBpbiBpLmNvbHVtbnMpe3ZhciB1PTNE aS49CmNvbHVtbnNbb107aWYoIXUpe2NvbnNvbGUuZGVidWcoIkdyb3VwOjpfcmVmcmVzaFRhYmxl KCkgLSBTa2lwcGluZyBjb2x1bW4gZD0KZWZpbml0aW9uLiIpO2NvbnRpbnVlfXZhciBhPTNEbmV3 IHQuU2VsZWN0LlZpZXcoe2lkOiJzZWxlY3RfIitvLHdhaXQ6ITB9KSxmPQo9M0R1LnRpdGxlO3Uu aXNfdW5pcXVlJiYoZis9M0QiJm5ic3A7KGFsbCBkYXRhIGxhYmVscykiKSx0aGlzLnRhYmxlLmFk ZChmLCI9CjI1JSIpLHRoaXMudGFibGUuYWRkKGEuJGVsKSx0aGlzLnRhYmxlLmFwcGVuZChvKSxz W29dPTNEYX10aGlzLmNoYXJ0LnN0YXRlKD0KIndhaXQiLCJMb2FkaW5nIG1ldGFkYXRhLi4uIik7 dmFyIGw9M0R0aGlzLmFwcC5kZWZlcnJlZC5yZWdpc3RlcigpLGM9M0R7aWQ6PQplLHN1Y2Nlc3M6 ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHMpci5fYWRkUm93KHQsZSxzLGkuY29sdW1uc1t0XSk7 ci5jaGFydC49CnN0YXRlKCJvayIsIk1ldGFkYXRhIGluaXRpYWxpemVkLi4uIiksci5hcHAuZGVm ZXJyZWQuZG9uZShsKX19O3RoaXMuYXBwLmRhdD0KYXNldHMucmVxdWVzdChjKX0sX2FkZFJvdzpm dW5jdGlvbihlLHQsbixyKXt2YXIgaT0zRHRoaXMscz0zRHIuaXNfbGFiZWwsbz0KPTNEci5pc19h dXRvLHU9M0RyLmlzX251bWVyaWMsYT0zRHIuaXNfdW5pcXVlLGY9M0RyLmlzX3plcm8sbD0zRFtd LGM9M0RuW2VdPQo7byYmbC5wdXNoKHtsYWJlbDoiQ29sdW1uOiBSb3cgTnVtYmVyIix2YWx1ZToi YXV0byJ9KSxmJiZsLnB1c2goe2xhYmVsOiJDb2w9CnVtbjogTm9uZSIsdmFsdWU6Inplcm8ifSk7 dmFyIGg9M0R0Lm1ldGFkYXRhX2NvbHVtbl90eXBlcztmb3IodmFyIHAgaW4gaCl7dj0KYXIgZD0z RCExO2hbcF09M0Q9M0QiaW50Inx8aFtwXT0zRD0zRCJmbG9hdCI/ZD0zRHU6ZD0zRHMsZCYmbC5w dXNoKHtsYWJlbDoiPQpDb2x1bW46ICIrKHBhcnNlSW50KHApKzEpKyIgWyIraFtwXSsiXSIsdmFs dWU6cH0pfWMudXBkYXRlKGwpLGEmJnRoaXMuY2hhcnQ9Ci5ncm91cHMuZmlyc3QoKSYmdGhpcy5n cm91cC5zZXQoZSx0aGlzLmNoYXJ0Lmdyb3Vwcy5maXJzdCgpLmdldChlKSk7aWYoIWMuZT0KeGlz dHModGhpcy5ncm91cC5nZXQoZSkpKXt2YXIgdj0zRGMuZmlyc3QoKTtjb25zb2xlLmRlYnVnKCdH cm91cCgpOjpfYWRkUm93PQooKSAtIFN3aXRjaGluZyBtb2RlbCB2YWx1ZSBmcm9tICInK3RoaXMu Z3JvdXAuZ2V0KGUpKyciIHRvICInK3YrJyIuJyksdGhpcy49Cmdyb3VwLnNldChlLHYpfWMudmFs dWUodGhpcy5ncm91cC5nZXQoZSkpLHRoaXMuZ3JvdXAub2ZmKCJjaGFuZ2U6IitlKSx0aGlzLj0K Z3JvdXAub24oImNoYW5nZToiK2UsZnVuY3Rpb24oKXtjLnZhbHVlKGkuZ3JvdXAuZ2V0KGUpKX0p LGMuc2V0T25DaGFuZ2UoZnVuPQpjdGlvbih0KXthP2kuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rp b24obil7bi5zZXQoZSx0KX0pOmkuZ3JvdXAuc2V0KGUsdCksaS49CmNoYXJ0LnNldCgibW9kaWZp ZWQiLCEwKX0pLGMuc2hvdygpfSxfcmVmcmVzaEdyb3VwOmZ1bmN0aW9uKCl7dGhpcy5ncm91cC5z ZT0KdCgiZGF0ZSIsbi50aW1lKCkpfSxfcmVmcmVzaEdyb3VwS2V5OmZ1bmN0aW9uKCl7dmFyIGU9 M0R0aGlzLmdyb3VwLmdldCgia2V5PQoiKTtlPTNEPTNEPTNEdW5kZWZpbmVkJiYoZT0zRCIiKSxl IT0zRHRoaXMuZ3JvdXBfa2V5LnZhbHVlKCkmJnRoaXMuZ3JvdXBfa2U9CnkudmFsdWUoZSl9fSl9 KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3VpLXRhYmxlLWZvcm0iLFsibXZjL3VpL3VpLXRhYmxl IiwibT0KdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciBy PTNEQmFja2JvbmUuVmlldy5leHRlbmQoPQp7b3B0aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGNvbnRl bnQ6IiIsbW9kZToiIn0sbGlzdDpbXSxpbml0aWFsaXplOmZ1bmN0aW9uKHI9CixpKXt0aGlzLmFw cD0zRHIsdGhpcy5vcHRpb25zPTNEbi5tZXJnZShpLHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMu dGFibGVfdD0KaXRsZT0zRG5ldyB0LkxhYmVsKHt0aXRsZTp0aGlzLm9wdGlvbnMudGl0bGV9KSx0 aGlzLnRhYmxlPTNEbmV3IGUuVmlldyh7Y29uPQp0ZW50OnRoaXMub3B0aW9ucy5jb250ZW50fSk7 dmFyIHM9M0QkKCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0iLz4nKTt0aGk9CnMub3B0aW9u cy50aXRsZSYmcy5hcHBlbmQobi53cmFwKHRoaXMudGFibGVfdGl0bGUuJGVsKSkscy5hcHBlbmQo bi53cmFwKHRoaT0Kcy50YWJsZS4kZWwpKSx0aGlzLnNldEVsZW1lbnQocyl9LHRpdGxlOmZ1bmN0 aW9uKGUpe3RoaXMudGFibGVfdGl0bGUudGl0bGUoPQplKX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7 dGhpcy50YWJsZS5kZWxBbGwoKSx0aGlzLmxpc3Q9M0RbXTtmb3IodmFyIG4gaW4gZSk9CnRoaXMu X2FkZChlW25dLmlkfHxuLGVbbl0sdCk7Zm9yKHZhciBuIGluIHRoaXMubGlzdCl0aGlzLmxpc3Rb bl0udHJpZ2dlcigiYz0KaGFuZ2UiKX0sX2FkZDpmdW5jdGlvbihlLG4scil7dmFyIGk9M0R0aGlz LHM9M0RudWxsLG89M0RuLnR5cGU7c3dpdGNoKG8pe2NhPQpzZSJ0ZXh0IjpzPTNEbmV3IHQuSW5w dXQoe2lkOiJmaWVsZC0iK2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcix2YWx1ZTpyLmc9CmV0 KGUpLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCl9fSk7YnJlYWs7Y2FzZSJyYWRpb2J1 dHRvbiI6cz0zRG5ldyB0Lj0KUmFkaW9CdXR0b24uVmlldyh7aWQ6ImZpZWxkLSIrZSxkYXRhOm4u ZGF0YSx2YWx1ZTpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvPQpuKHQpe3Iuc2V0KGUsdCk7dmFy IHM9M0RfLmZpbmRXaGVyZShuLmRhdGEse3ZhbHVlOnR9KTtpZihzJiZzLm9wZXJhdGlvbnMpe3Y9 CmFyIG89M0RzLm9wZXJhdGlvbnM7Zm9yKHZhciB1IGluIG8uc2hvdyl7dmFyIGE9M0RvLnNob3db dV07aS50YWJsZS5nZXQoYSkucz0KaG93KCl9Zm9yKHZhciB1IGluIG8uaGlkZSl7dmFyIGE9M0Rv LmhpZGVbdV07aS50YWJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlPQphaztjYXNlInNlbGVjdCI6 cz0zRG5ldyB0LlNlbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLGRhdGE6bi5kYXRhLHZhbHVlOnIu Z2U9CnQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0KTt2YXIgcz0zRF8uZmluZFdo ZXJlKG4uZGF0YSx7dmFsdWU6dH0pOz0KaWYocyYmcy5vcGVyYXRpb25zKXt2YXIgbz0zRHMub3Bl cmF0aW9ucztmb3IodmFyIHUgaW4gby5zaG93KXt2YXIgYT0zRG8uc2hvPQp3W3VdO2kudGFibGUu Z2V0KGEpLnNob3coKX1mb3IodmFyIHUgaW4gby5oaWRlKXt2YXIgYT0zRG8uaGlkZVt1XTtpLnRh YmxlLmc9CmV0KGEpLmhpZGUoKX19fX0pO2JyZWFrO2Nhc2UiZGF0YXNldCI6cz0zRG5ldyB0LlNl bGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLD0Kb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0 KX19KSxpLmFwcC5kYXRhc2V0cy5vbigiYWxsIixmdW5jdGlvbigpe3ZhciB0PQo9M0RbXTtpLmFw cC5kYXRhc2V0cy5lYWNoKGZ1bmN0aW9uKGUpe2UuZ2V0KCJkYXRhdHlwZV9pZCIpPTNEPTNEbi5k YXRhJiZ0LnA9CnVzaCh7dmFsdWU6ZS5nZXQoImlkIiksbGFiZWw6ZS5nZXQoIm5hbWUiKX0pfSks cy51cGRhdGUodCksci5nZXQoZSl8fHIuc2V0KD0KZSxzLmZpcnN0KCkpLHMudmFsdWUoci5nZXQo ZSkpfSksaS5hcHAuZGF0YXNldHMudHJpZ2dlcigiYWxsLmRhdGFzZXRzIik7YnJlPQphaztjYXNl InRleHRhcmVhIjpzPTNEbmV3IHQuVGV4dGFyZWEoe2lkOiJmaWVsZC0iK2Usb25jaGFuZ2U6ZnVu Y3Rpb24oKXtyLnM9CmV0KGUscy52YWx1ZSgpKX19KTticmVhaztjYXNlInNlcGFyYXRvciI6cz0z RCQoIjxkaXYvPiIpO2JyZWFrO2RlZmF1bHQ6cz0zRD0KbmV3IHQuSW5wdXQoe2lkOiJmaWVsZC0i K2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcix0eXBlOm4udHlwZSxvbmNoYW5nZTpmPQp1bmN0 aW9uKCl7ci5zZXQoZSxzLnZhbHVlKCkpfX0pfWlmKG8hPTNEInNlcGFyYXRvciIpe3IuZ2V0KGUp fHxyLnNldChlLG4uaW49Cml0KSxzLnZhbHVlKHIuZ2V0KGUpKSx0aGlzLmxpc3RbZV09M0RzO3Zh ciB1PTNEJCgiPGRpdi8+Iik7dS5hcHBlbmQocy4kZWwpLD0Kbi5pbmZvJiZ1LmFwcGVuZCgnPGRp diBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWluZm8iPicrbi5pbmZvKyI8L2Rpdj4iKSx0aGlzPQou b3B0aW9ucy5zdHlsZT0zRD0zRCJib2xkIj8odGhpcy50YWJsZS5hZGQoKG5ldyB0LkxhYmVsKHt0 aXRsZTpuLnRpdGxlLGNsczo9CiJmb3JtLWxhYmVsIn0pKS4kZWwpLHRoaXMudGFibGUuYWRkKHUp KToodGhpcy50YWJsZS5hZGQoJzxzcGFuIGNsYXNzPTNEInVpLT0KdGFibGUtZm9ybS10aXRsZSI+ JytuLnRpdGxlKyI8L3NwYW4+IiwiMjUlIiksdGhpcy50YWJsZS5hZGQodSkpfWVsc2UgdGhpcy50 PQphYmxlLmFkZCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLXNlcGFyYXRvciI+JytuLnRp dGxlKyI6PGRpdi8+IiksdGhpcy49CnRhYmxlLmFkZCgkKCI8ZGl2Lz4iKSk7dGhpcy50YWJsZS5h cHBlbmQoZSksbi5oaWRlJiZ0aGlzLnRhYmxlLmdldChlKS5oaWRlKD0KKX19KTtyZXR1cm57Vmll dzpyfX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL3NldHRpbmdzIixbIm12Yy91aS91aS1taXNjIiwi cGx1PQpnaW4vbGlicmFyeS91aS10YWJsZS1mb3JtIiwidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihl LHQsbil7cmV0dXJuIEJhY2tib25lLlY9Cmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24o ZSxuKXt0aGlzLmFwcD0zRGU7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9Cj0zRHRoaXMuYXBwLmNo YXJ0LHRoaXMuZm9ybT0zRG5ldyB0LlZpZXcoZSx7dGl0bGU6IkNvbmZpZ3VyYXRpb24iLGNvbnRl bnQ6Ij0KVGhpcyBjaGFydCB0eXBlIGRvZXMgbm90IHByb3ZpZGUgYW55IG9wdGlvbnMuIn0pLHRo aXMuc2V0RWxlbWVudCh0aGlzLmZvcm0uPQokZWwpO3ZhciByPTNEdGhpczt0aGlzLmNoYXJ0Lm9u KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7ci5fcmVmcmVzaCgpfSl9LF9yZWZyZXM9Cmg6ZnVuY3Rpb24o KXt2YXIgZT0zRHRoaXMuY2hhcnQuZGVmaW5pdGlvbjtpZighZSlyZXR1cm47dGhpcy5mb3JtLnRp dGxlKGUuYz0KYXRlZ29yeSsiIC0gIitlLnRpdGxlKyI6IiksdGhpcy5mb3JtLnVwZGF0ZShlLnNl dHRpbmdzLHRoaXMuY2hhcnQuc2V0dGluZ3MpPQp9fSl9KSxkZWZpbmUoInBsdWdpbi92aWV3cy90 eXBlcyIsWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS1taXNjIl0sZnVuY3Rpb249CihlLHQpe3Jl dHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e29uY2hhbmdlOm51bGws b25kYmxjbGljaz0KOm51bGx9LGV2ZW50czp7Y2xpY2s6Il9vbmNsaWNrIixkYmxjbGljazoiX29u ZGJsY2xpY2sifSxpbml0aWFsaXplOmZ1bmN0aW9uPQoobixyKXt2YXIgaT0zRHRoaXM7dGhpcy5h cHA9M0RuLHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uocix0aGlzLm9wdGlvbnNEZWZhdWw9CnQpO3Zh ciBzPTNEJCgnPGRpdiBjbGFzcz0zRCJjaGFydHMtZ3JpZCIvPicpO3MuYXBwZW5kKGUud3JhcCgo bmV3IHQuTGFiZWwoez0KdGl0bGU6IkhvdyBtYW55IGRhdGEgcG9pbnRzIHdvdWxkIHlvdSBsaWtl IHRvIGFuYWx5emU/In0pKS4kZWwpKSx0aGlzLmxpYnJhPQpyeT0zRG5ldyB0LlJhZGlvQnV0dG9u LlZpZXcoe2RhdGE6W3tsYWJlbDoiRmV3ICg8NTAwKSIsdmFsdWU6InNtYWxsIn0se2xhYmU9Cmw6 IlNvbWUgKDwxMGspIix2YWx1ZToibWVkaXVtIn0se2xhYmVsOiJNYW55ICg+MTBrKSIsdmFsdWU6 ImxhcmdlIn1dLG9uY2hhbj0KZ2U6ZnVuY3Rpb24oZSl7aS5fZmlsdGVyKGUpfX0pLHMuYXBwZW5k KGUud3JhcCh0aGlzLmxpYnJhcnkuJGVsKSksdGhpcy5zZXRFPQpsZW1lbnQocyksdGhpcy5fcmVu ZGVyKCksdGhpcy5saWJyYXJ5LnZhbHVlKCJzbWFsbCIpLHRoaXMubGlicmFyeS50cmlnZ2VyKCI9 CmNoYW5nZSIpfSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuJGVsLmZpbmQoIi5jdXJy ZW50IikuYXR0cigiaWQiKTtlIT0KPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kZWwuZmluZCgiLmN1 cnJlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudCIpLHRoaXMuJGVsPQouZmluZCgiIyIrZSkuYWRk Q2xhc3MoImN1cnJlbnQiKSk7dmFyIG49M0R0aGlzLiRlbC5maW5kKCIuY3VycmVudCIpLmF0dHIo Imk9CmQiKTtyZXR1cm4gbj0zRD0zRD0zRHVuZGVmaW5lZD9udWxsOihuIT0zRHQmJnRoaXMub3B0 aW9ucy5vbmNoYW5nZSYmdGhpcy5vcD0KdGlvbnMub25jaGFuZ2UoZSksbil9LF9maWx0ZXI6ZnVu Y3Rpb24oZSl7dGhpcy4kZWwuZmluZCgiLmhlYWRlciIpLmhpZGUoKTt2PQphciB0PTNEdGhpcy5h cHAudHlwZXMuYXR0cmlidXRlcztmb3IodmFyIG4gaW4gdCl7dmFyIHI9M0R0W25dLGk9M0R0aGlz LiRlbC49CmZpbmQoIiMiK24pLHM9M0R0aGlzLiRlbC5maW5kKCIjdHlwZXMtaGVhZGVyLSIrdGhp cy5jYXRlZ29yaWVzX2luZGV4W3IuY2F0ZT0KZ29yeV0pLG89M0RyLmtleXdvcmRzfHwiIjtvLmlu ZGV4T2YoZSk+PTNEMD8oaS5zaG93KCkscy5zaG93KCkpOmkuaGlkZSgpfX0sPQpfcmVuZGVyOmZ1 bmN0aW9uKCl7dGhpcy5jYXRlZ29yaWVzPTNEe30sdGhpcy5jYXRlZ29yaWVzX2luZGV4PTNEe307 dmFyIGU9M0Q9CjAsdD0zRHRoaXMuYXBwLnR5cGVzLmF0dHJpYnV0ZXM7Zm9yKHZhciBuIGluIHQp e3ZhciByPTNEdFtuXSxpPTNEci5jYXRlZ29yeT0KO3RoaXMuY2F0ZWdvcmllc1tpXXx8KHRoaXMu Y2F0ZWdvcmllc1tpXT0zRHt9LHRoaXMuY2F0ZWdvcmllc19pbmRleFtpXT0zRGUrPQorKSx0aGlz LmNhdGVnb3JpZXNbaV1bbl09M0RyfWZvcih2YXIgaSBpbiB0aGlzLmNhdGVnb3JpZXMpe3ZhciBz PTNEJCgnPGRpdiA9CnN0eWxlPTNEImNsZWFyOiBib3RoOyIvPicpO3MuYXBwZW5kKHRoaXMuX3Rl bXBsYXRlX2hlYWRlcih7aWQ6InR5cGVzLWhlYWRlcj0KLSIrdGhpcy5jYXRlZ29yaWVzX2luZGV4 W2ldLHRpdGxlOml9KSk7Zm9yKHZhciBuIGluIHRoaXMuY2F0ZWdvcmllc1tpXSl7dmFyPQogcj0z RHRoaXMuY2F0ZWdvcmllc1tpXVtuXSxvPTNEci50aXRsZSsiICgiK3IubGlicmFyeSsiKSI7ci56 b29tYWJsZSYmKG89M0Q9Cic8c3BhbiBjbGFzcz0zRCJmYSBmYS1zZWFyY2gtcGx1cyIvPicrbyks cy5hcHBlbmQodGhpcy5fdGVtcGxhdGVfaXRlbSh7aWQ6bj0KLHRpdGxlOm8sdXJsOmNvbmZpZy5h cHBfcm9vdCsiY2hhcnRzLyIrdGhpcy5hcHAuY2hhcnRQYXRoKG4pKyIvbG9nby5wbmcifSkpPQp9 dGhpcy4kZWwuYXBwZW5kKHMpfX0sX29uY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLnZh bHVlKCksbj0zRCQoZS50YXI9CmdldCkuY2xvc2VzdCgiLml0ZW0iKS5hdHRyKCJpZCIpO24hPTNE IiImJm4mJnQhPTNEbiYmdGhpcy52YWx1ZShuKX0sX29uZGJsYz0KbGljazpmdW5jdGlvbihlKXt2 YXIgdD0zRHRoaXMudmFsdWUoKTt0JiZ0aGlzLm9wdGlvbnMub25kYmxjbGljayYmdGhpcy5vcHRp PQpvbnMub25kYmxjbGljayh0KX0sX3RlbXBsYXRlX2hlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4n PGRpdiBpZD0zRCInK2UuaWQrJyI9CiBjbGFzcz0zRCJoZWFkZXIiPicrIiZidWxsOyAiK2UudGl0 bGUrIjxkaXY+In0sX3RlbXBsYXRlX2l0ZW06ZnVuY3Rpb24oZSl7cj0KZXR1cm4nPGRpdiBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QiaXRlbSI+JysnPGltZyBjbGFzcz0zRCJpbWFnZSIgc3JjPTNE IicrPQplLnVybCsnIj4nKyc8ZGl2IGNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUrIjwvZGl2PiIr IjxkaXY+In19KX0pLGRlZmluZSgicGw9CnVnaW4vdmlld3MvZWRpdG9yIixbIm12Yy91aS91aS10 YWJzIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxldCIsIj0KdXRpbHMvdXRpbHMi LCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2luL21vZGVscy9ncm91cCIsInBsdWdpbi92aWV3 cy9ncm91PQpwIiwicGx1Z2luL3ZpZXdzL3NldHRpbmdzIiwicGx1Z2luL3ZpZXdzL3R5cGVzIl0s ZnVuY3Rpb24oZSx0LG4scixpLHMsbyx1LGE9Cil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5k KHtpbml0aWFsaXplOmZ1bmN0aW9uKGkscyl7dmFyIG89M0R0aGlzO3RoaXMuYT0KcHA9M0RpLHRo aXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLm1lc3NhZ2U9M0RuZXcgdC5NZXNzYWdlLHRo aXMucG9ydGxlPQp0PTNEbmV3IG4uVmlldyh7aWNvbjoiZmEtYmFyLWNoYXJ0LW8iLHRpdGxlOiJF ZGl0b3IiLG9wZXJhdGlvbnM6e3NhdmU6bmV3IHQ9Ci5CdXR0b25JY29uKHtpY29uOiJmYS1zYXZl Iix0b29sdGlwOiJEcmF3IENoYXJ0Iix0aXRsZToiRHJhdyIsb25jbGljazpmdW5jdD0KaW9uKCl7 by5fc2F2ZUNoYXJ0KCl9fSksYmFjazpuZXcgdC5CdXR0b25JY29uKHtpY29uOiJmYS1jYXJldC1s ZWZ0Iix0b29sdGlwPQo6IlJldHVybiB0byBWaWV3ZXIiLHRpdGxlOiJDYW5jZWwiLG9uY2xpY2s6 ZnVuY3Rpb24oKXtvLmFwcC5nbygidmlld2VyIiksby49CmFwcC5zdG9yYWdlLmxvYWQoKX19KX19 KSx0aGlzLnR5cGVzPTNEbmV3IGEoaSx7b25jaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9Cj0zRG8u YXBwLnR5cGVzLmdldChlKTt0fHxjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBFZGl0b3I6Om9uY2hh bmdlKCkgLSBDaGFydD0KIHR5cGUgbm90IHN1cHBvcnRlZC4iKSxvLmNoYXJ0LmRlZmluaXRpb249 M0R0LG8uY2hhcnQuc2V0dGluZ3MuY2xlYXIoKSxvLmNoPQphcnQuc2V0KHt0eXBlOmV9KSxvLmNo YXJ0LnNldCgibW9kaWZpZWQiLCEwKSxjb25zb2xlLmRlYnVnKCJFZGl0b3I6Om9uY2hhbmc9CmUo KSAtIFN3aXRjaGVkIGNoYXJ0IHR5cGUuIil9LG9uZGJsY2xpY2s6ZnVuY3Rpb24oZSl7by5fc2F2 ZUNoYXJ0KCl9fSksdGhpcz0KLnRhYnM9M0RuZXcgZS5WaWV3KHt0aXRsZV9uZXc6IkFkZCBEYXRh Iixvbm5ldzpmdW5jdGlvbigpe3ZhciBlPTNEby5fYWRkR3JvPQp1cE1vZGVsKCk7by50YWJzLnNo b3coZS5pZCl9fSksdGhpcy50aXRsZT0zRG5ldyB0LklucHV0KHtwbGFjZWhvbGRlcjoiQ2hhcnQ9 CiB0aXRsZSIsb25jaGFuZ2U6ZnVuY3Rpb24oKXtvLmNoYXJ0LnNldCgidGl0bGUiLG8udGl0bGUu dmFsdWUoKSl9fSk7dmFyIGY9Cj0zRCQoIjxkaXYvPiIpO2YuYXBwZW5kKHIud3JhcCgobmV3IHQu TGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgY2hhcnQgdGl0bGU6Ij0KfSkpLiRlbCkpLGYuYXBwZW5k KHRoaXMudGl0bGUuJGVsKSxmLmFwcGVuZCgkKCI8ZGl2Lz4iKS5hZGRDbGFzcygidWktdGFibGUt PQpmb3JtLWluZm8iKS5odG1sKCJUaGlzIHRpdGxlIHdpbGwgYXBwZWFyIGluIHRoZSBsaXN0IG9m ICdTYXZlZCBWaXN1YWxpemF0aW89Cm5zJy4gQ2hhcnRzIGFyZSBzYXZlZCB1cG9uIGNyZWF0aW9u LiIpKSxmLmFwcGVuZChyLndyYXAoKSksZi5hcHBlbmQoci53cmFwKD0KdGhpcy50eXBlcy4kZWwp KSx0aGlzLnRhYnMuYWRkKHtpZDoibWFpbiIsdGl0bGU6IlN0YXJ0IiwkZWw6Zn0pLHRoaXMuc2V0 dGluPQpncz0zRG5ldyB1KHRoaXMuYXBwKSx0aGlzLnRhYnMuYWRkKHtpZDoic2V0dGluZ3MiLHRp dGxlOiJDb25maWd1cmF0aW9uIiwkZWw9Cjp0aGlzLnNldHRpbmdzLiRlbH0pLHRoaXMucG9ydGxl dC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCksdGhpcy5wb3J0bGV0LmFwcD0KZW5kKHRoaXMudGFi cy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQuJGVsKSx0aGlzLnRhYnMuaGlkZU9w ZXJhdGlvPQpuKCJiYWNrIik7dmFyIG89M0R0aGlzO3RoaXMuY2hhcnQub24oImNoYW5nZTp0aXRs ZSIsZnVuY3Rpb24oZSl7by5fcmVmcmVzaFQ9Cml0bGUoKX0pLHRoaXMuY2hhcnQub24oImNoYW5n ZTp0eXBlIixmdW5jdGlvbihlKXtvLnR5cGVzLnZhbHVlKGUuZ2V0KCJ0eXBlIj0KKSl9KSx0aGlz LmNoYXJ0Lm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVzZXRDaGFydCgpfSksdGhpcy5hcHAu Y2hhcnQub24oPQoicmVkcmF3IixmdW5jdGlvbihlKXtvLnBvcnRsZXQuc2hvd09wZXJhdGlvbigi YmFjayIpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXA9CnMub24oImFkZCIsZnVuY3Rpb24oZSl7by5f YWRkR3JvdXAoZSl9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub24oInJlbW92ZSIsZj0KdW5jdGlv bihlKXtvLl9yZW1vdmVHcm91cChlKX0pLHRoaXMuYXBwLmNoYXJ0Lmdyb3Vwcy5vbigicmVzZXQi LGZ1bmN0aW9uKGUpPQp7by5fcmVtb3ZlQWxsR3JvdXBzKCl9KSx0aGlzLmFwcC5jaGFydC5ncm91 cHMub24oImNoYW5nZTprZXkiLGZ1bmN0aW9uKGUpe289Ci5fcmVmcmVzaEdyb3VwS2V5KCl9KSx0 aGlzLl9yZXNldENoYXJ0KCl9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLiRlbC5zaG93KCl9LD0KaGlk ZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhpZGUoKX0sX3JlZnJlc2hUaXRsZTpmdW5jdGlvbigpe3Zh ciBlPTNEdGhpcy5jaGFyPQp0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRsZXQudGl0bGUoZSksdGhp cy50aXRsZS52YWx1ZSgpIT0zRGUmJnRoaXMudGl0bGUudmE9Cmx1ZShlKX0sX3JlZnJlc2hHcm91 cEtleTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcyx0PTNEMDt0aGlzLmNoYXJ0Lmdyb3Vwcy5lYT0K Y2goZnVuY3Rpb24obil7dmFyIHI9M0RuLmdldCgia2V5IiwiIik7cj0zRD0zRCIiJiYocj0zRCJE YXRhIGxhYmVsIiksZS50YWJzPQoudGl0bGUobi5pZCwrK3QrIjogIityKX0pfSxfYWRkR3JvdXBN b2RlbDpmdW5jdGlvbigpe3ZhciBlPTNEbmV3IHMoe2lkOnIudXU9CmlkKCl9KTtyZXR1cm4gdGhp cy5jaGFydC5ncm91cHMuYWRkKGUpLGV9LF9hZGRHcm91cDpmdW5jdGlvbihlKXt2YXIgdD0zRHRo aT0KcyxuPTNEbmV3IG8odGhpcy5hcHAse2dyb3VwOmV9KTt0aGlzLnRhYnMuYWRkKHtpZDplLmlk LCRlbDpuLiRlbCxvbmRlbDpmdW5jPQp0aW9uKCl7dC5jaGFydC5ncm91cHMucmVtb3ZlKGUuaWQp fX0pLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMuY2hhcnQuc2U9CnQoIm1vZGlmaWVkIiwh MCl9LF9yZW1vdmVHcm91cDpmdW5jdGlvbihlKXt0aGlzLnRhYnMuZGVsKGUuaWQpLHRoaXMuX3Jl ZnJlcz0KaEdyb3VwS2V5KCksdGhpcy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMCl9LF9yZW1vdmVB bGxHcm91cHM6ZnVuY3Rpb24oZSl7dGhpPQpzLnRhYnMuZGVsUmVtb3ZhYmxlKCl9LF9yZXNldENo YXJ0OmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zZXQoImlkIixyLnV1aWQoKSk9Cix0aGlzLmNoYXJ0 LnNldCgidHlwZSIsIm52ZDNfYmFyIiksdGhpcy5jaGFydC5zZXQoImRhdGFzZXRfaWQiLHRoaXMu YXBwLm9wdD0KaW9ucy5jb25maWcuZGF0YXNldF9pZCksdGhpcy5jaGFydC5zZXQoInRpdGxlIiwi TmV3IENoYXJ0IiksdGhpcy5wb3J0bGV0LmhpPQpkZU9wZXJhdGlvbigiYmFjayIpfSxfc2F2ZUNo YXJ0OmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zZXQoe3R5cGU6dGhpcy50eXBlcy49CnZhbHVlKCks dGl0bGU6dGhpcy50aXRsZS52YWx1ZSgpLGRhdGU6ci50aW1lKCl9KTtpZih0aGlzLmNoYXJ0Lmdy b3Vwcy5sZW5ndD0KaD0zRD0zRDApe3RoaXMubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6IlBsZWFz ZSBzZWxlY3QgZGF0YSBjb2x1bW5zIGJlZm9yZSBkPQpyYXdpbmcgdGhlIGNoYXJ0LiJ9KTt2YXIg ZT0zRHRoaXMuX2FkZEdyb3VwTW9kZWwoKTt0aGlzLnRhYnMuc2hvdyhlLmlkKTtyZXQ9CnVybn12 YXIgdD0zRHRoaXMsbj0zRCEwLGk9M0R0aGlzLmNoYXJ0LmRlZmluaXRpb247dGhpcy5jaGFydC5n cm91cHMuZWFjaChmdT0KbmN0aW9uKGUpe2lmKCFuKXJldHVybjtmb3IodmFyIHIgaW4gaS5jb2x1 bW5zKWlmKGUuYXR0cmlidXRlc1tyXT0zRD0zRCJudWxsPQoiKXt0Lm1lc3NhZ2UudXBkYXRlKHtz dGF0dXM6ImRhbmdlciIsbWVzc2FnZToiVGhpcyBjaGFydCB0eXBlIHJlcXVpcmVzIGNvbHU9Cm1u IHR5cGVzIG5vdCBmb3VuZCBpbiB5b3VyIHRhYnVsYXIgZmlsZS4ifSksdC50YWJzLnNob3coZS5p ZCksbj0zRCExO3JldHVybj0KfX0pO2lmKCFuKXJldHVybjt0aGlzLmFwcC5nbygidmlld2VyIik7 dmFyIHQ9M0R0aGlzO3RoaXMuYXBwLmRlZmVycmVkLmV4ZWN1PQp0ZShmdW5jdGlvbigpe3QuYXBw LnN0b3JhZ2Uuc2F2ZSgpLHQuY2hhcnQudHJpZ2dlcigicmVkcmF3Iil9KX19KX0pLGRlZmluZSg9 CiJwbHVnaW4vbW9kZWxzL2NvbmZpZyIsW10sZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuTW9k ZWwuZXh0ZW5kKHtkZWZhdWx0cz0KOntxdWVyeV9saW1pdDoxZTQscXVlcnlfdGltZW91dDoxMDB9 fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvZm9ybXMvZGVmYXVsPQp0IixbXSxmdW5jdGlvbigp e3JldHVybnt0aXRsZToiIixjYXRlZ29yeToiIixsaWJyYXJ5OiIiLHRhZzoiIixrZXl3b3Jkczoi Iiw9CnNldHRpbmdzOntzZXBhcmF0b3JfeDp7dGl0bGU6IlggYXhpcyIsdHlwZToic2VwYXJhdG9y In0seF9heGlzX2xhYmVsOnt0aXRsZT0KOiJBeGlzIGxhYmVsIixpbmZvOiJQcm92aWRlIGEgbGFi ZWwgZm9yIHRoZSBheGlzLiIsdHlwZToidGV4dCIsaW5pdDoiWC1heGlzPQoiLHBsYWNlaG9sZGVy OiJBeGlzIGxhYmVsIn0seF9heGlzX3R5cGU6e3RpdGxlOiJBeGlzIHZhbHVlIHR5cGUiLGluZm86 IlNlbGU9CmN0IHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBheGlzLiIsdHlwZToic2VsZWN0Iixpbml0 OiJhdXRvIixkYXRhOlt7bGFiZWw6Ii0tID0KRG8gbm90IHNob3cgdmFsdWVzIC0tIix2YWx1ZToi aGlkZSIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhpc19wcmVjaXNpb24iXX19PQose2xhYmVsOiJB dXRvIix2YWx1ZToiYXV0byIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhpc19wcmVjaXNpb24iXX19 LHtsYWJlbDo9CiJGbG9hdCIsdmFsdWU6ImYiLG9wZXJhdGlvbnM6e3Nob3c6WyJ4X2F4aXNfcHJl Y2lzaW9uIl19fSx7bGFiZWw6IkV4cG9uZW50Ij0KLHZhbHVlOiJlIixvcGVyYXRpb25zOntzaG93 OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJJbnRlZ2VyIix2YWx1ZToiPQpkIixvcGVy YXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJQZXJjZW50YWdlIix2 YWx1ZToicCIsb3A9CmVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVs OiJTSS1wcmVmaXgiLHZhbHVlOiJzIixvcGVyYXRpbz0KbnM6e2hpZGU6WyJ4X2F4aXNfcHJlY2lz aW9uIl19fV19LHhfYXhpc19wcmVjaXNpb246e3RpdGxlOiJBeGlzIHRpY2sgZm9ybWF0PQoiLGlu Zm86IlNlbGVjdCB0aGUgdGljayBmb3JtYXQgZm9yIHRoZSBheGlzLiIsdHlwZToic2VsZWN0Iixp bml0OiIxIixkYXRhOls9CntsYWJlbDoiMC4wMDAwMSIsdmFsdWU6IjUifSx7bGFiZWw6IjAuMDAw MSIsdmFsdWU6IjQifSx7bGFiZWw6IjAuMDAxIix2YWx1ZT0KOiIzIn0se2xhYmVsOiIwLjAxIix2 YWx1ZToiMiJ9LHtsYWJlbDoiMC4xIix2YWx1ZToiMSJ9LHtsYWJlbDoiMSIsdmFsdWU6IjAiPQp9 XX0sc2VwYXJhdG9yX3k6e3RpdGxlOiJZIGF4aXMiLHR5cGU6InNlcGFyYXRvciJ9LHlfYXhpc19s YWJlbDp7dGl0bGU6IkF4aXM9CiBsYWJlbCIsaW5mbzoiUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUg YXhpcy4iLHR5cGU6InRleHQiLGluaXQ6IlktYXhpcyIscGxhYz0KZWhvbGRlcjoiQXhpcyBsYWJl bCJ9LHlfYXhpc190eXBlOnt0aXRsZToiQXhpcyB2YWx1ZSB0eXBlIixpbmZvOiJTZWxlY3QgdGhl PQogdmFsdWUgdHlwZSBvZiB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiYXV0byIsZGF0 YTpbe2xhYmVsOiItLSBEbyBub3Q9CiBzaG93IHZhbHVlcyAtLSIsdmFsdWU6ImhpZGUiLG9wZXJh dGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZT0KbDoiQXV0byIsdmFsdWU6 ImF1dG8iLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkZs b2F0PQoiLHZhbHVlOiJmIixvcGVyYXRpb25zOntzaG93OlsieV9heGlzX3ByZWNpc2lvbiJdfX0s e2xhYmVsOiJFeHBvbmVudCIsdmFsdWU9CjoiZSIsb3BlcmF0aW9uczp7c2hvdzpbInlfYXhpc19w cmVjaXNpb24iXX19LHtsYWJlbDoiSW50ZWdlciIsdmFsdWU6ImQiLG9wZT0KcmF0aW9uczp7aGlk ZTpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InAiLG9w ZXJhdGlvPQpuczp7c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiU0ktcHJlZml4 Iix2YWx1ZToicyIsb3BlcmF0aW9uczp7aGk9CmRlOlsieV9heGlzX3ByZWNpc2lvbiJdfX1dfSx5 X2F4aXNfcHJlY2lzaW9uOnt0aXRsZToiQXhpcyB0aWNrIGZvcm1hdCIsaW5mbz0KOiJTZWxlY3Qg dGhlIHRpY2sgZm9ybWF0IGZvciB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIsaW5pdDoiMSIsZGF0 YTpbe2xhYmVsPQo6IjAuMDAwMDEiLHZhbHVlOiI1In0se2xhYmVsOiIwLjAwMDEiLHZhbHVlOiI0 In0se2xhYmVsOiIwLjAwMSIsdmFsdWU6IjMifSw9CntsYWJlbDoiMC4wMSIsdmFsdWU6IjIifSx7 bGFiZWw6IjAuMSIsdmFsdWU6IjEifSx7bGFiZWw6IjEiLHZhbHVlOiIwIn1dfSxzZT0KcGFyYXRv cl9sZWdlbmQ6e3RpdGxlOiJPdGhlcnMiLHR5cGU6InNlcGFyYXRvciJ9LHNob3dfbGVnZW5kOnt0 aXRsZToiU2hvdyBsPQplZ2VuZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gYWRkIGEgbGVnZW5k PyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6InRydWU9CiIsZGF0YTpbe2xhYmVsOiJZZXMiLHZh bHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1dfSx1c2VfcGFuZWxzOj0Ke3Rp dGxlOiJVc2UgbXVsdGktcGFuZWxzIixpbmZvOiJXb3VsZCB5b3UgbGlrZSB0byBzZXBhcmF0ZSB5 b3VyIGRhdGEgaW50byBpPQpuZGl2aWR1YWwgcGFuZWxzPyIsdHlwZToicmFkaW9idXR0b24iLGlu aXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6IlllcyIsdmFsdWU9CjoidHJ1ZSJ9LHtsYWJlbDoiTm8i LHZhbHVlOiJmYWxzZSJ9XX19fX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3JldHVybj0K KG5ldyBEYXRlKHQsZSsxLDApKS5nZXREYXRlKCl9ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGZ1 bmN0aW9uKHIsaSxzKXt2YXIgPQpvPTNEZShyKSx1PTNEW107bzxyJiZ0KG8pO2lmKHM+MSl3aGls ZShvPGkpe3ZhciBhPTNEbmV3IERhdGUoK28pO24oYSklcz0zRD0KPTNEPTNEMCYmdS5wdXNoKGEp LHQobyl9ZWxzZSB3aGlsZShvPGkpdS5wdXNoKG5ldyBEYXRlKCtvKSksdChvKTtyZXR1cm4gdX19 PQp2YXIgZT0zRHdpbmRvdy5udnx8e307ZS52ZXJzaW9uPTNEIjEuMS4xNWIiLGUuZGV2PTNEITAs d2luZG93Lm52PTNEZSxlLnRvb2w9CnRpcD0zRGUudG9vbHRpcHx8e30sZS51dGlscz0zRGUudXRp bHN8fHt9LGUubW9kZWxzPTNEZS5tb2RlbHN8fHt9LGUuY2hhcnRzPQo9M0R7fSxlLmdyYXBocz0z RFtdLGUubG9ncz0zRHt9LGUuZGlzcGF0Y2g9M0RkMy5kaXNwYXRjaCgicmVuZGVyX3N0YXJ0Iiwi cmU9Cm5kZXJfZW5kIiksZS5kZXYmJihlLmRpc3BhdGNoLm9uKCJyZW5kZXJfc3RhcnQiLGZ1bmN0 aW9uKHQpe2UubG9ncy5zdGFydFRpbT0KZT0zRCsobmV3IERhdGUpfSksZS5kaXNwYXRjaC5vbigi cmVuZGVyX2VuZCIsZnVuY3Rpb24odCl7ZS5sb2dzLmVuZFRpbWU9M0QrPQoobmV3IERhdGUpLGUu bG9ncy50b3RhbFRpbWU9M0RlLmxvZ3MuZW5kVGltZS1lLmxvZ3Muc3RhcnRUaW1lLGUubG9nKCJ0 b3RhbCI9CixlLmxvZ3MudG90YWxUaW1lKX0pKSxlLmxvZz0zRGZ1bmN0aW9uKCl7aWYoZS5kZXYm JmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZz0KLmFwcGx5KWNvbnNvbGUubG9nLmFwcGx5KGNvbnNv bGUsYXJndW1lbnRzKTtlbHNlIGlmKGUuZGV2JiZ0eXBlb2YgY29uc29sZS5sPQpvZz0zRD0zRCJm dW5jdGlvbiImJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKXt2YXIgdD0zREZ1bmN0aW9uLnByb3Rv dHlwZS5iaW49CmQuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlKTt0LmFwcGx5KGNvbnNvbGUsYXJn dW1lbnRzKX1yZXR1cm4gYXJndW1lbnRzW2FyZz0KdW1lbnRzLmxlbmd0aC0xXX0sZS5yZW5kZXI9 M0RmdW5jdGlvbihuKXtuPTNEbnx8MSxlLnJlbmRlci5hY3RpdmU9M0QhMCxlLmRpPQpzcGF0Y2gu cmVuZGVyX3N0YXJ0KCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHZhciBpPTNE MDtpPG4mJihyPQo9M0RlLnJlbmRlci5xdWV1ZVtpXSk7aSsrKXQ9M0RyLmdlbmVyYXRlKCksdHlw ZW9mIHIuY2FsbGJhY2s9M0Q9M0R0eXBlb2YgRnU9Cm5jdGlvbiYmci5jYWxsYmFjayh0KSxlLmdy YXBocy5wdXNoKHQpO2UucmVuZGVyLnF1ZXVlLnNwbGljZSgwLGkpLGUucmVuZGVyLj0KcXVldWUu bGVuZ3RoP3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTooZS5kaXNwYXRjaC5yZW5kZXJf ZW5kKCksZS5yZW5kPQplci5hY3RpdmU9M0QhMSl9LDApfSxlLnJlbmRlci5hY3RpdmU9M0QhMSxl LnJlbmRlci5xdWV1ZT0zRFtdLGUuYWRkR3JhcGg9M0Q9CmZ1bmN0aW9uKHQpe3R5cGVvZiBhcmd1 bWVudHNbMF09M0Q9M0R0eXBlb2YgRnVuY3Rpb24mJih0PTNEe2dlbmVyYXRlOmFyZ3VtZT0KbnRz WzBdLGNhbGxiYWNrOmFyZ3VtZW50c1sxXX0pLGUucmVuZGVyLnF1ZXVlLnB1c2godCksZS5yZW5k ZXIuYWN0aXZlfHxlLnJlPQpuZGVyKCl9LGUuaWRlbnRpdHk9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZX0sZS5zdHJpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnI9CmVwbGFjZSgvKFxzfCYpL2csIiIp fSxkMy50aW1lLm1vbnRoRW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEYXRlKGUuZ2V0Rj0K dWxsWWVhcigpLGUuZ2V0TW9udGgoKSwwKX0sZDMudGltZS5tb250aEVuZHM9M0RuKGQzLnRpbWUu bW9udGhFbmQsZnVuY3Rpb24oPQplKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrMSksZS5z ZXREYXRlKHQoZS5nZXRNb250aCgpKzEsZS5nZXRGdWxsWWVhcig9CikpKX0sZnVuY3Rpb24oZSl7 cmV0dXJuIGUuZ2V0TW9udGgoKX0pLGUuaW50ZXJhY3RpdmVHdWlkZWxpbmU9M0RmdW5jdGlvbigp ez0KZnVuY3Rpb24gYyhvKXtvLmVhY2goZnVuY3Rpb24obyl7ZnVuY3Rpb24gZygpe3ZhciBlPTNE ZDMubW91c2UodGhpcyksbj0zRGVbPQowXSxyPTNEZVsxXSxvPTNEITAsYT0zRCExO2wmJihuPTNE ZDMuZXZlbnQub2Zmc2V0WCxyPTNEZDMuZXZlbnQub2Zmc2V0WSxkMy49CmV2ZW50LnRhcmdldC50 YWdOYW1lIT0zRD0zRCJzdmciJiYobz0zRCExKSxkMy5ldmVudC50YXJnZXQuY2xhc3NOYW1lLmJh c2VWYT0KbC5tYXRjaCgibnYtbGVnZW5kIikmJihhPTNEITApKSxvJiYobi09M0RpLmxlZnQsci09 M0RpLnRvcCk7aWYobjwwfHxyPDB8fG4+PQpwfHxyPmR8fGQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQm JmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQub3duZXJTVkdFbGVtZW50PTNEPQo9M0Q9M0R1bmRlZmlu ZWR8fGEpe2lmKGwmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQmJmQzLmV2ZW50LnJlbGF0ZWRUYXJn ZXQub3c9Cm5lclNWR0VsZW1lbnQ9M0Q9M0Q9M0R1bmRlZmluZWQmJmQzLmV2ZW50LnJlbGF0ZWRU YXJnZXQuY2xhc3NOYW1lLm1hdGNoKHQubj0KdlBvaW50ZXJFdmVudHNDbGFzcykpcmV0dXJuO3Uu ZWxlbWVudE1vdXNlb3V0KHttb3VzZVg6bixtb3VzZVk6cn0pLGMucmVuZGVyPQpHdWlkZUxpbmUo bnVsbCk7cmV0dXJufXZhciBmPTNEcy5pbnZlcnQobik7dS5lbGVtZW50TW91c2Vtb3ZlKHttb3Vz ZVg6bixtb3U9CnNlWTpyLHBvaW50WFZhbHVlOmZ9KSxkMy5ldmVudC50eXBlPTNEPTNEPTNEImRi bGNsaWNrIiYmdS5lbGVtZW50RGJsY2xpY2soez0KbW91c2VYOm4sbW91c2VZOnIscG9pbnRYVmFs dWU6Zn0pfXZhciBoPTNEZDMuc2VsZWN0KHRoaXMpLHA9M0RufHw5NjAsZD0zRHJ8PQp8NDAwLHY9 M0RoLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWludGVyYWN0aXZlTGluZUxheWVyIikuZGF0YShb b10pLG09M0R2LmU9Cm50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIiBudi13cmFwIG52 LWludGVyYWN0aXZlTGluZUxheWVyIik7bS5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt aW50ZXJhY3RpdmVHdWlkZUxpbmUiKTtpZighZilyZXR1cm47Zi5vbigibW91c2Vtb3ZlPQoiLGcs ITApLm9uKCJtb3VzZW91dCIsZywhMCkub24oImRibGNsaWNrIixnKSxjLnJlbmRlckd1aWRlTGlu ZT0zRGZ1bmN0aW9uKHQ9Cil7aWYoIWEpcmV0dXJuO3ZhciBuPTNEdi5zZWxlY3QoIi5udi1pbnRl cmFjdGl2ZUd1aWRlTGluZSIpLnNlbGVjdEFsbCgibGluZT0KIikuZGF0YSh0IT0zRG51bGw/W2Uu dXRpbHMuTmFOdG9aZXJvKHQpXTpbXSxTdHJpbmcpO24uZW50ZXIoKS5hcHBlbmQoImxpbmUiPQop LmF0dHIoImNsYXNzIiwibnYtZ3VpZGVsaW5lIikuYXR0cigieDEiLGZ1bmN0aW9uKGUpe3JldHVy biBlfSkuYXR0cigieDIiLGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5hdHRyKCJ5MSIsZCkuYXR0 cigieTIiLDApLG4uZXhpdCgpLnJlbW92ZSgpfX0pfXZhciB0PQo9M0RlLm1vZGVscy50b29sdGlw KCksbj0zRG51bGwscj0zRG51bGwsaT0zRHtsZWZ0OjAsdG9wOjB9LHM9M0RkMy5zY2FsZS5saW49 CmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuZGlzcGF0Y2goImVsZW1lbnRNb3Vz ZW1vdmUiLCJlbGVtZW50TW91cz0KZW91dCIsImVsZW1lbnREYmxjbGljayIpLGE9M0QhMCxmPTNE bnVsbCxsPTNEbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNPQpTSUUiKSE9M0Q9M0QtMTty ZXR1cm4gYy5kaXNwYXRjaD0zRHUsYy50b29sdGlwPTNEdCxjLm1hcmdpbj0zRGZ1bmN0aW9uKGUp e3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRl ZmluZWQiP2UudG9wOmkudG9wLGkubD0KZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVk Ij9lLmxlZnQ6aS5sZWZ0LGMpOml9LGMud2lkdGg9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhuPTNEZSxjKTpufSxjLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWU9Cm50cy5sZW5ndGg/KHI9M0RlLGMpOnJ9LGMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Cj0zRGUsYyk6c30sYy5zaG93R3VpZGVMaW5lPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLGMpOj0KYX0sYy5zdmdDb250 YWluZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsYyk6Zn0s Y30sZS5pPQpudGVyYWN0aXZlQmlzZWN0PTNEZnVuY3Rpb24oZSx0LG4pe2lmKCFlIGluc3RhbmNl b2YgQXJyYXkpcmV0dXJuIG51bGw7dHlwZW89CmYgbiE9M0QiZnVuY3Rpb24iJiYobj0zRGZ1bmN0 aW9uKGUsdCl7cmV0dXJuIGUueH0pO3ZhciByPTNEZDMuYmlzZWN0b3IobikubD0KZWZ0LGk9M0Rk My5tYXgoWzAscihlLHQpLTFdKSxzPTNEbihlW2ldLGkpO3R5cGVvZiBzPTNEPTNEInVuZGVmaW5l ZCImJihzPTNEPQppKTtpZihzPTNEPTNEPTNEdClyZXR1cm4gaTt2YXIgbz0zRGQzLm1pbihbaSsx LGUubGVuZ3RoLTFdKSx1PTNEbihlW29dLG8pO3I9CmV0dXJuIHR5cGVvZiB1PTNEPTNEInVuZGVm aW5lZCImJih1PTNEbyksTWF0aC5hYnModS10KT49M0RNYXRoLmFicyhzLXQpP2k6bz0KfSxlLm5l YXJlc3RWYWx1ZUluZGV4PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNESW5maW5pdHksaT0zRG51 bGw7cmV0dXJuIGUuPQpmb3JFYWNoKGZ1bmN0aW9uKGUscyl7dmFyIG89M0RNYXRoLmFicyh0LWUp O288PTNEciYmbzxuJiYocj0zRG8saT0zRHMpfSksaX09CixmdW5jdGlvbigpe3dpbmRvdy5udi50 b29sdGlwPTNEe30sd2luZG93Lm52Lm1vZGVscy50b29sdGlwPTNEZnVuY3Rpb24oKXtmdT0KbmN0 aW9uIHkoKXtpZihhKXt2YXIgZT0zRGQzLnNlbGVjdChhKTtlLm5vZGUoKS50YWdOYW1lIT0zRD0z RCJzdmciJiYoZT0zRGUuPQpzZWxlY3QoInN2ZyIpKTt2YXIgdD0zRGUubm9kZSgpP2UuYXR0cigi dmlld0JveCIpOm51bGw7aWYodCl7dD0zRHQuc3BsaXQoIiA9CiIpO3ZhciBuPTNEcGFyc2VJbnQo ZS5zdHlsZSgid2lkdGgiKSkvdFsyXTtsLmxlZnQ9M0RsLmxlZnQqbixsLnRvcD0zRGwudG9wKj0K bn19fWZ1bmN0aW9uIGIoZSl7dmFyIHQ7YT90PTNEZDMuc2VsZWN0KGEpOnQ9M0RkMy5zZWxlY3Qo ImJvZHkiKTt2YXIgbj0zRHQuPQpzZWxlY3QoIi5udnRvb2x0aXAiKTtyZXR1cm4gbi5ub2RlKCk9 M0Q9M0Q9M0RudWxsJiYobj0zRHQuYXBwZW5kKCJkaXYiKS5hdHQ9CnIoImNsYXNzIiwibnZ0b29s dGlwICIrKHU/dToieHktdG9vbHRpcCIpKS5hdHRyKCJpZCIsaCkpLG4ubm9kZSgpLmlubmVySFRN TD0KPTNEZSxuLnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3BhY2l0eSIs MCksbi5zZWxlY3RBbGwoImRpdiwgPQp0YWJsZSwgdGQsIHRyIikuY2xhc3NlZChwLCEwKSxuLmNs YXNzZWQocCwhMCksbi5ub2RlKCl9ZnVuY3Rpb24gdygpe2lmKCFjKXI9CmV0dXJuO2lmKCFnKG4p KXJldHVybjt5KCk7dmFyIHQ9M0RsLmxlZnQsdT0zRG8hPTNEbnVsbD9vOmwudG9wLGg9M0RiKG0o bikpOz0KZj0zRGg7aWYoYSl7dmFyIHA9M0RhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVsw XSxkPTNEcD9wLmdldEJvdW5kaW5nQ2xpPQplbnRSZWN0KCk6YS5nZXRCb3VuZGluZ0NsaWVudFJl Y3QoKSx2PTNEe2xlZnQ6MCx0b3A6MH07aWYocCl7dmFyIEU9M0RwLmdldEI9Cm91bmRpbmdDbGll bnRSZWN0KCksUz0zRGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD0zREUudG9wO2lmKHg8MCl7 dmFyIFQ9Cj0zRGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7eD0zRE1hdGguYWJzKHgpPlQuaGVp Z2h0PzA6eH12LnRvcD0zRE1hdGguYWJzKD0KeC1TLnRvcCksdi5sZWZ0PTNETWF0aC5hYnMoRS5s ZWZ0LVMubGVmdCl9dCs9M0RhLm9mZnNldExlZnQrdi5sZWZ0LTIqYS5zY3JvPQpsbExlZnQsdSs9 M0RhLm9mZnNldFRvcCt2LnRvcC0yKmEuc2Nyb2xsVG9wfXJldHVybiBzJiZzPjAmJih1PTNETWF0 aC5mbG9vcig9CnUvcykqcyksZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb24oW3QsdV0scixp LGgpLHd9dmFyIHQ9M0RudWxsLG49M0RudWxsLD0Kcj0zRCJ3IixpPTNENTAscz0zRDI1LG89M0Ru dWxsLHU9M0RudWxsLGE9M0RudWxsLGY9M0RudWxsLGw9M0R7bGVmdDpudWxsLHRvPQpwOm51bGx9 LGM9M0QhMCxoPTNEIm52dG9vbHRpcC0iK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTUpLHA9 M0QibnYtcG9pbnQ9CmVyLWV2ZW50cy1ub25lIixkPTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0s dj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlfSxtPTNEZj0KdW5jdGlvbihlKXtpZih0IT0zRG51bGwp cmV0dXJuIHQ7aWYoZT0zRD0zRG51bGwpcmV0dXJuIiI7dmFyIG49M0RkMy5zZWxlY3QoPQpkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpKSxyPTNEbi5zZWxlY3RBbGwoInRoZWFkIikuZGF0 YShbZV0pLmVudGVyKCk9Ci5hcHBlbmQoInRoZWFkIik7ci5hcHBlbmQoInRyIikuYXBwZW5kKCJ0 ZCIpLmF0dHIoImNvbHNwYW4iLDMpLmFwcGVuZCgic3Rybz0KbmciKS5jbGFzc2VkKCJ4LXZhbHVl IiwhMCkuaHRtbCh2KGUudmFsdWUpKTt2YXIgaT0zRG4uc2VsZWN0QWxsKCJ0Ym9keSIpLmRhPQp0 YShbZV0pLmVudGVyKCkuYXBwZW5kKCJ0Ym9keSIpLHM9M0RpLnNlbGVjdEFsbCgidHIiKS5kYXRh KGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUuc2VyaWVzfSkuZW50ZXIoKS5hcHBlbmQoInRyIikuY2xh c3NlZCgiaGlnaGxpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4gZT0KLmhpZ2hsaWdodH0pO3MuYXBw ZW5kKCJ0ZCIpLmNsYXNzZWQoImxlZ2VuZC1jb2xvci1ndWlkZSIsITApLmFwcGVuZCgiZGl2Iiku PQpzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29sb3J9KSxz LmFwcGVuZCgidGQiKS5jbGFzc2U9CmQoImtleSIsITApLmh0bWwoZnVuY3Rpb24oZSl7cmV0dXJu IGUua2V5fSkscy5hcHBlbmQoInRkIikuY2xhc3NlZCgidmFsdWUiLD0KITApLmh0bWwoZnVuY3Rp b24oZSx0KXtyZXR1cm4gZChlLnZhbHVlLHQpfSkscy5zZWxlY3RBbGwoInRkIikuZWFjaChmdW5j dGlvPQpuKGUpe2lmKGUuaGlnaGxpZ2h0KXt2YXIgdD0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFp bihbMCwxXSkucmFuZ2UoWyIjZmZmIiw9CmUuY29sb3JdKSxuPTNELjY7ZDMuc2VsZWN0KHRoaXMp LnN0eWxlKCJib3JkZXItYm90dG9tLWNvbG9yIix0KG4pKS5zdHlsZSgiYj0Kb3JkZXItdG9wLWNv bG9yIix0KG4pKX19KTt2YXIgbz0zRG4ubm9kZSgpLm91dGVySFRNTDtyZXR1cm4gZS5mb290ZXIh PTNEPTNEPQp1bmRlZmluZWQmJihvKz0zRCI8ZGl2IGNsYXNzPTNEJ2Zvb3Rlcic+IitlLmZvb3Rl cisiPC9kaXY+Iiksb30sZz0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGUmJmUuc2VyaWVzJiZlLnNl cmllcy5sZW5ndGg+MD8hMDohMX07cmV0dXJuIHcubnZQb2ludGVyRXZlbnRzQz0KbGFzcz0zRHAs dy5jb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9M0RlLHcp OnR9LHcudG9vPQpsdGlwRWxlbT0zRGZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHcuY29udGVudEdlbmVy YXRvcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNE PTNEImZ1bmN0aW9uIiYmKG09M0RlKSx3KTptfSx3LmRhdGE9M0RmdW5jdGlvbihlKT0Ke3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSx3KTpufSx3LmdyYXZpdHk9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3LmRpc3RhbmNlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Cj0zRGUsdyk6aX0sdy5zbmFwRGlzdGFu Y2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdyk6cz0KfSx3 LmNsYXNzZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsdyk6 dX0sdy5jaGFydENvbnRhPQppbmVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGE9M0RlLHcpOmF9LHcucG9zaXRpb249M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhsLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdD0K OmwubGVmdCxsLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpsLnRvcCx3 KTpsfSx3LmZpeGVkVG9wPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bz0zRGUsdyk6b30sdy5lbmFibGVkPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYz0zRGUsdyk6Y30sdy52YWx1ZUZvcm1hdHRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cj0KZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKGQ9M0RlKSx3KTpk fSx3LmhlYWRlckZvcm1hdHRlcj0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKHY9M0RlKSx3PQopOnZ9LHcuaWQ9M0RmdW5j dGlvbigpe3JldHVybiBofSx3fSxlLnRvb2x0aXAuc2hvdz0zRGZ1bmN0aW9uKHQsbixyLGkscyxv KXs9CnZhciB1PTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc05hbWU9M0Qi bnZ0b29sdGlwICIrKG8/bzoieHktdD0Kb29sdGlwIik7dmFyIGE9M0RzO2lmKCFzfHxzLnRhZ05h bWUubWF0Y2goL2d8c3ZnL2kpKWE9M0Rkb2N1bWVudC5nZXRFbGVtZW50PQpzQnlUYWdOYW1lKCJi b2R5IilbMF07dS5zdHlsZS5sZWZ0PTNEMCx1LnN0eWxlLnRvcD0zRDAsdS5zdHlsZS5vcGFjaXR5 PTNEMCw9CnUuaW5uZXJIVE1MPTNEbixhLmFwcGVuZENoaWxkKHUpLHMmJih0WzBdPTNEdFswXS1z LnNjcm9sbExlZnQsdFsxXT0zRHRbMV0tcz0KLnNjcm9sbFRvcCksZS50b29sdGlwLmNhbGNUb29s dGlwUG9zaXRpb24odCxyLGksdSl9LGUudG9vbHRpcC5maW5kRmlyc3ROb25TPQpWR1BhcmVudD0z RGZ1bmN0aW9uKGUpe3doaWxlKGUudGFnTmFtZS5tYXRjaCgvXmd8c3ZnJC9pKSE9M0Q9M0RudWxs KWU9M0RlLnA9CmFyZW50Tm9kZTtyZXR1cm4gZX0sZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldFRv cD0zRGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0Oz0KZG8gaXNOYU4oZS5vZmZzZXRUb3ApfHwobis9 M0RlLm9mZnNldFRvcCk7d2hpbGUoZT0zRGUub2Zmc2V0UGFyZW50KTtyZXR1cm4gPQpufSxlLnRv b2x0aXAuZmluZFRvdGFsT2Zmc2V0TGVmdD0zRGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0O2RvIGlz TmFOKGUub2Zmc2U9CnRMZWZ0KXx8KG4rPTNEZS5vZmZzZXRMZWZ0KTt3aGlsZShlPTNEZS5vZmZz ZXRQYXJlbnQpO3JldHVybiBufSxlLnRvb2x0aXAuYz0KYWxjVG9vbHRpcFBvc2l0aW9uPTNEZnVu Y3Rpb24odCxuLHIsaSl7dmFyIHM9M0RwYXJzZUludChpLm9mZnNldEhlaWdodCksbz0KPTNEcGFy c2VJbnQoaS5vZmZzZXRXaWR0aCksdT0zRGUudXRpbHMud2luZG93U2l6ZSgpLndpZHRoLGE9M0Rl LnV0aWxzLndpbmRvPQp3U2l6ZSgpLmhlaWdodCxmPTNEd2luZG93LnBhZ2VZT2Zmc2V0LGw9M0R3 aW5kb3cucGFnZVhPZmZzZXQsYyxoO2E9M0R3aW5kb3c9Ci5pbm5lcldpZHRoPj0zRGRvY3VtZW50 LmJvZHkuc2Nyb2xsV2lkdGg/YTphLTE2LHU9M0R3aW5kb3cuaW5uZXJIZWlnaHQ+PTNEZD0Kb2N1 bWVudC5ib2R5LnNjcm9sbEhlaWdodD91OnUtMTYsbj0zRG58fCJzIixyPTNEcnx8MjA7dmFyIHA9 M0RmdW5jdGlvbih0KXtyPQpldHVybiBlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0VG9wKHQsaCl9 LGQ9M0RmdW5jdGlvbih0KXtyZXR1cm4gZS50b29sdGlwLmY9CmluZFRvdGFsT2Zmc2V0TGVmdCh0 LGMpfTtzd2l0Y2gobil7Y2FzZSJlIjpjPTNEdFswXS1vLXIsaD0zRHRbMV0tcy8yO3ZhciB2PQo9 M0RkKGkpLG09M0RwKGkpO3Y8bCYmKGM9M0R0WzBdK3I+bD90WzBdK3I6bC12K2MpLG08ZiYmKGg9 M0RmLW0raCksbStzPmYrYSY9CiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7Y2FzZSJ3IjpjPTNEdFsw XStyLGg9M0R0WzFdLXMvMjt2YXIgdj0zRGQoaSksbT0zRHAoaT0KKTt2K28+dSYmKGM9M0R0WzBd LW8tciksbTxmJiYoaD0zRGYrNSksbStzPmYrYSYmKGg9M0RmK2EtbStoLXMpO2JyZWFrO2Nhc2Ui PQpuIjpjPTNEdFswXS1vLzItNSxoPTNEdFsxXStyO3ZhciB2PTNEZChpKSxtPTNEcChpKTt2PGwm JihjPTNEbCs1KSx2K28+dSYmKGM9Cj0zRGMtby8yKzUpLG0rcz5mK2EmJihoPTNEZithLW0raC1z KTticmVhaztjYXNlInMiOmM9M0R0WzBdLW8vMixoPTNEdFsxXS1zLT0Kcjt2YXIgdj0zRGQoaSks bT0zRHAoaSk7djxsJiYoYz0zRGwrNSksditvPnUmJihjPTNEYy1vLzIrNSksZj5tJiYoaD0zRGYp O2JyPQplYWs7Y2FzZSJub25lIjpjPTNEdFswXSxoPTNEdFsxXS1yO3ZhciB2PTNEZChpKSxtPTNE cChpKX1yZXR1cm4gaS5zdHlsZS5sZWY9CnQ9M0RjKyJweCIsaS5zdHlsZS50b3A9M0RoKyJweCIs aS5zdHlsZS5vcGFjaXR5PTNEMSxpLnN0eWxlLnBvc2l0aW9uPTNEImFicz0Kb2x1dGUiLGl9LGUu dG9vbHRpcC5jbGVhbnVwPTNEZnVuY3Rpb24oKXt2YXIgZT0zRGRvY3VtZW50LmdldEVsZW1lbnRz QnlDbGFzPQpzTmFtZSgibnZ0b29sdGlwIiksdD0zRFtdO3doaWxlKGUubGVuZ3RoKXQucHVzaChl WzBdKSxlWzBdLnN0eWxlLnRyYW5zaXRpb249CkRlbGF5PTNEIjAgIWltcG9ydGFudCIsZVswXS5z dHlsZS5vcGFjaXR5PTNEMCxlWzBdLmNsYXNzTmFtZT0zRCJudnRvb2x0aXAtcD0KZW5kaW5nLXJl bW92YWwiO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aGlsZSh0Lmxlbmd0aCl7dmFyIGU9M0R0LnBv cCgpO2UucGFyPQplbnROb2RlLnJlbW92ZUNoaWxkKGUpfX0sNTAwKX19KCksZS51dGlscy53aW5k b3dTaXplPTNEZnVuY3Rpb24oKXt2YXIgZT0zRHs9CndpZHRoOjY0MCxoZWlnaHQ6NDgwfTtyZXR1 cm4gZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCYmKGUudz0KaWR0aD0z RGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsZS5oZWlnaHQ9M0Rkb2N1bWVudC5ib2R5Lm9mZnNl dEhlaWdodCksZG9jPQp1bWVudC5jb21wYXRNb2RlPTNEPTNEIkNTUzFDb21wYXQiJiZkb2N1bWVu dC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3U9Cm1lbnRFbGVtZW50Lm9mZnNldFdpZHRo JiYoZS53aWR0aD0zRGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxlLj0KaGVp Z2h0PTNEZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCksd2luZG93LmlubmVy V2lkdGgmJndpbmRvdy5pPQpubmVySGVpZ2h0JiYoZS53aWR0aD0zRHdpbmRvdy5pbm5lcldpZHRo LGUuaGVpZ2h0PTNEd2luZG93LmlubmVySGVpZ2h0KSxlfSw9CmUudXRpbHMud2luZG93UmVzaXpl PTNEZnVuY3Rpb24oZSl7aWYoZT0zRD0zRD0zRHVuZGVmaW5lZClyZXR1cm47dmFyIHQ9M0R3aT0K bmRvdy5vbnJlc2l6ZTt3aW5kb3cub25yZXNpemU9M0RmdW5jdGlvbihuKXt0eXBlb2YgdD0zRD0z RCJmdW5jdGlvbiImJnQobiksPQplKG4pfX0sZS51dGlscy5nZXRDb2xvcj0zRGZ1bmN0aW9uKHQp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoP09iamVjdC5wcm90b3Q9CnlwZS50b1N0cmluZy5jYWxs KHQpPTNEPTNEPTNEIltvYmplY3QgQXJyYXldIj9mdW5jdGlvbihlLG4pe3JldHVybiBlLmNvbG9y fD0KfHRbbiV0Lmxlbmd0aF19OnQ6ZS51dGlscy5kZWZhdWx0Q29sb3IoKX0sZS51dGlscy5kZWZh dWx0Q29sb3I9M0RmdW5jdGlvbigpPQp7dmFyIGU9M0RkMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFu Z2UoKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5jb2xvcnw9CnxlW24lZS5sZW5ndGhd fX0sZS51dGlscy5jdXN0b21UaGVtZT0zRGZ1bmN0aW9uKGUsdCxuKXt0PTNEdHx8ZnVuY3Rpb24o ZSl7cj0KZXR1cm4gZS5rZXl9LG49M0RufHxkMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2UoKTt2 YXIgcj0zRG4ubGVuZ3RoO3JldHVybiBmPQp1bmN0aW9uKGkscyl7dmFyIG89M0R0KGkpO3JldHVy biByfHwocj0zRG4ubGVuZ3RoKSx0eXBlb2YgZVtvXSE9M0QidW5kZWZpbmU9CmQiP3R5cGVvZiBl W29dPTNEPTNEImZ1bmN0aW9uIj9lW29dKCk6ZVtvXTpuWy0tcl19fSxlLnV0aWxzLnBqYXg9M0Rm dW5jdGlvbj0KKHQsbil7ZnVuY3Rpb24gcihyKXtkMy5odG1sKHIsZnVuY3Rpb24ocil7dmFyIGk9 M0RkMy5zZWxlY3Qobikubm9kZSgpO2kucGFyPQplbnROb2RlLnJlcGxhY2VDaGlsZChkMy5zZWxl Y3Qocikuc2VsZWN0KG4pLm5vZGUoKSxpKSxlLnV0aWxzLnBqYXgodCxuKX0pfWQ9CjMuc2VsZWN0 QWxsKHQpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoaXN0b3J5LnB1c2hTdGF0ZSh0aGlzLmhyZWYs dGhpcy50ZXh0Qz0Kb250ZW50LHRoaXMuaHJlZikscih0aGlzLmhyZWYpLGQzLmV2ZW50LnByZXZl bnREZWZhdWx0KCl9KSxkMy5zZWxlY3Qod2luZG93PQopLm9uKCJwb3BzdGF0ZSIsZnVuY3Rpb24o KXtkMy5ldmVudC5zdGF0ZSYmcihkMy5ldmVudC5zdGF0ZSl9KX0sZS51dGlscy5jYWw9CmNBcHBy b3hUZXh0V2lkdGg9M0RmdW5jdGlvbihlKXtpZih0eXBlb2YgZS5zdHlsZT0zRD0zRCJmdW5jdGlv biImJnR5cGVvZiBlLj0KdGV4dD0zRD0zRCJmdW5jdGlvbiIpe3ZhciB0PTNEcGFyc2VJbnQoZS5z dHlsZSgiZm9udC1zaXplIikucmVwbGFjZSgicHgiLCIiPQopKSxuPTNEZS50ZXh0KCkubGVuZ3Ro O3JldHVybiBuKnQqLjV9cmV0dXJuIDB9LGUudXRpbHMuTmFOdG9aZXJvPTNEZnVuY3Rpb249Cihl KXtyZXR1cm4gdHlwZW9mIGUhPTNEIm51bWJlciJ8fGlzTmFOKGUpfHxlPTNEPTNEPTNEbnVsbHx8 ZT0zRD0zRD0zREluZmluaT0KdHk/MDplfSxlLnV0aWxzLm9wdGlvbnNGdW5jPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUmJmQzLm1hcChlKS5mb3JFYWNoKGZ1bmN0PQppb24oZSx0KXt0eXBlb2YgdGhp c1tlXT0zRD0zRCJmdW5jdGlvbiImJnRoaXNbZV0odCl9LmJpbmQodGhpcykpLHRoaXN9LGUubW89 CmRlbHMuYXhpcz0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKGUpe3ZhciBpPTNEZDMucz0KZWxlY3QodGhpcyksbT0zRGkuc2VsZWN0QWxsKCJnLm52LXdy YXAubnYtYXhpcyIpLmRhdGEoW2VdKSxnPTNEbS5lbnRlcigpLmFwPQpwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYXhpcyIpLHk9M0RnLmFwcGVuZCgiZyIpLGI9M0RtLnNl bGU9CmN0KCJnIik7cCE9M0Q9M0RudWxsP3QudGlja3MocCk6KHQub3JpZW50KCk9M0Q9M0QidG9w Inx8dC5vcmllbnQoKT0zRD0zRCJibz0KdHRvbSIpJiZ0LnRpY2tzKE1hdGguYWJzKHMucmFuZ2Uo KVsxXS1zLnJhbmdlKClbMF0pLzEwMCksYi5jYWxsKHQpLHY9M0R2fHx0PQouc2NhbGUoKTt2YXIg dz0zRHQudGlja0Zvcm1hdCgpO3c9M0Q9M0RudWxsJiYodz0zRHYudGlja0Zvcm1hdCgpKTt2YXIg RT0zRGI9Ci5zZWxlY3RBbGwoInRleHQubnYtYXhpc2xhYmVsIikuZGF0YShbb3x8bnVsbF0pO0Uu ZXhpdCgpLnJlbW92ZSgpO3N3aXRjaCh0Lj0Kb3JpZW50KCkpe2Nhc2UidG9wIjpFLmVudGVyKCku YXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFiZWwiKTt2PQphciBTPTNEcy5y YW5nZSgpLmxlbmd0aD0zRD0zRDI/cy5yYW5nZSgpWzFdOnMucmFuZ2UoKVtzLnJhbmdlKCkubGVu Z3RoLTFdKyg9CnMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYXR0cigidGV4dC1hbmNob3Ii LCJtaWRkbGUiKS5hdHRyKCJ5IiwwKS5hdHRyKD0KIngiLFMvMik7aWYodSl7dmFyIHg9M0RtLnNl bGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmRvbWFpbigpKTt4LmVuPQp0ZXIoKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKSx4 LmV4aXQoKS5yZW09Cm92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVy biJ0cmFuc2xhdGUoIitzKGUpKyIsMCkifSkuc2VsZT0KY3QoInRleHQiKS5hdHRyKCJkeSIsIi0w LjVlbSIpLmF0dHIoInkiLC10LnRpY2tQYWRkaW5nKCkpLmF0dHIoInRleHQtYW5jaG9yPQoiLCJt aWRkbGUiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JldHVybigiIituKS5tYXRj aCgiTmFOIik/IiI6bn09CikseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJu InRyYW5zbGF0ZSgiK3MucmFuZ2UoKVt0XSsiLDApIn0pfT0KYnJlYWs7Y2FzZSJib3R0b20iOnZh ciBUPTNEMzYsTj0zRDMwLEM9M0RiLnNlbGVjdEFsbCgiZyIpLnNlbGVjdCgidGV4dCIpO2lmPQoo ZiUzNjApe0MuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEdGhpcy5nZXRCQm94KCkud2lkdGg7 bj5OJiYoTj0zRG4pfSk7dmE9CnIgaz0zRE1hdGguYWJzKE1hdGguc2luKGYqTWF0aC5QSS8xODAp KSxUPTNEKGs/aypOOk4pKzMwO0MuYXR0cigidHJhbnNmb3JtIj0KLGZ1bmN0aW9uKGUsdCxuKXty ZXR1cm4icm90YXRlKCIrZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5jaG9yIixmJTM2MD4wPyJz PQp0YXJ0IjoiZW5kIil9RS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYt YXhpc2xhYmVsIik7dmFyIFM9M0Q9CnMucmFuZ2UoKS5sZW5ndGg9M0Q9M0QyP3MucmFuZ2UoKVsx XTpzLnJhbmdlKClbcy5yYW5nZSgpLmxlbmd0aC0xXSsocy5yYW5nZT0KKClbMV0tcy5yYW5nZSgp WzBdKTtFLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsVCkuYXR0cigieCIs Uy8yPQopO2lmKHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmRhdGEo W3MuZG9tYWluKClbMF0scy5kb21haW49CigpW3MuZG9tYWluKCkubGVuZ3RoLTFdXSk7eC5lbnRl cigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXhpc01heE1pbj0KIikuYXBwZW5kKCJ0 ZXh0IikseC5leGl0KCkucmVtb3ZlKCkseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuPQoidHJhbnNsYXRlKCIrKHMoZSkrKGg/cy5yYW5nZUJhbmQoKS8yOjApKSsiLDApIn0p LnNlbGVjdCgidGV4dCIpLmF0dHIoImR5Iiw9CiIuNzFlbSIpLmF0dHIoInkiLHQudGlja1BhZGRp bmcoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIj0Kcm90YXRlKCIr ZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5jaG9yIixmP2YlMzYwPjA/InN0YXJ0IjoiZW5kIjoi bWlkZGxlIikuPQp0ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3JldHVybigiIituKS5t YXRjaCgiTmFOIik/IiI6bn0pLHguYXR0cigidHI9CmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuInRyYW5zbGF0ZSgiKyhzKGUpKyhoP3MucmFuZ2VCYW5kKCkvMjowKSkrIiwwKT0KIn0pfWMm JkMuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0 JTI9M0Q9M0QwPyIwPQoiOiIxMiIpKyIpIn0pO2JyZWFrO2Nhc2UicmlnaHQiOkUuZW50ZXIoKS5h cHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWE9Cnhpc2xhYmVsIiksRS5zdHlsZSgidGV4 dC1hbmNob3IiLGw/Im1pZGRsZSI6ImJlZ2luIikuYXR0cigidHJhbnNmb3JtIixsPyJybz0KdGF0 ZSg5MCkiOiIiKS5hdHRyKCJ5IixsPy1NYXRoLm1heChuLnJpZ2h0LHIpKzEyOi0xMCkuYXR0cigi eCIsbD9zLnJhbmdlKClbPQowXS8yOnQudGlja1BhZGRpbmcoKSk7aWYodSl7dmFyIHg9M0RtLnNl bGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmQ9Cm9tYWluKCkpO3guZW50ZXIoKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKT0K LnN0eWxlKCJvcGFjaXR5IiwwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmF0dHIoInRyYW5zZm9ybSIs ZnVuY3Rpb24oZSx0KXtyZXR1PQpybiJ0cmFuc2xhdGUoMCwiK3MoZSkrIikifSkuc2VsZWN0KCJ0 ZXh0IikuYXR0cigiZHkiLCIuMzJlbSIpLmF0dHIoInkiLDApLmE9CnR0cigieCIsdC50aWNrUGFk ZGluZygpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQoZnVuY3Rpb24oZSx0KXt2 YT0KciBuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4LmF0dHIoInRy YW5zZm9ybSIsZnVuY3Rpb24oZSx0PQope3JldHVybiJ0cmFuc2xhdGUoMCwiK3MucmFuZ2UoKVt0 XSsiKSJ9KS5zZWxlY3QoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSk9Cn1icmVhaztjYXNlImxl ZnQiOkUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIp LEUucz0KdHlsZSgidGV4dC1hbmNob3IiLGw/Im1pZGRsZSI6ImVuZCIpLmF0dHIoInRyYW5zZm9y bSIsbD8icm90YXRlKC05MCkiOiIiKS5hPQp0dHIoInkiLGw/LU1hdGgubWF4KG4ubGVmdCxyKStk Oi0xMCkuYXR0cigieCIsbD8tcy5yYW5nZSgpWzBdLzI6LXQudGlja1BhZGQ9CmluZygpKTtpZih1 KXt2YXIgeD0zRG0uc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWluKCkp O3guZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFw cGVuZCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5PQoiLDApLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0 cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCw9CiIrdihlKSsi KSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0cigieSIsMCkuYXR0cigi eCIsLXQudGljaz0KUGFkZGluZygpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLnRleHQoZnVu Y3Rpb24oZSx0KXt2YXIgbj0zRHcoZSk7cmV0dXJuPQooIiIrbikubWF0Y2goIk5hTiIpPyIiOm59 KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXQ9CmUoMCwi K3MucmFuZ2UoKVt0XSsiKSJ9KS5zZWxlY3QoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSl9fUUu dGV4dChmdW5jdGlvbj0KKGUpe3JldHVybiBlfSksdSYmKHQub3JpZW50KCk9M0Q9M0Q9M0QibGVm dCJ8fHQub3JpZW50KCk9M0Q9M0Q9M0QicmlnaHQiKSYmPQooYi5zZWxlY3RBbGwoImciKS5lYWNo KGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoIm89CnBh Y2l0eSIsMSk7aWYocyhlKTxzLnJhbmdlKClbMV0rMTB8fHMoZSk+cy5yYW5nZSgpWzBdLTEwKShl PjFlLTEwfHxlPC0xZS0xMD0KKSYmZDMuc2VsZWN0KHRoaXMpLmF0dHIoIm9wYWNpdHkiLDApLGQz LnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJvPQpwYWNpdHkiLDApfSkscy5kb21h aW4oKVswXT0zRD0zRHMuZG9tYWluKClbMV0mJnMuZG9tYWluKClbMF09M0Q9M0QwJiZtLnNlbGU9 CmN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gdD8wOjF9KSk7aWYodT0KJiYodC5vcmllbnQoKT0zRD0zRD0zRCJ0b3AifHx0Lm9yaWVu dCgpPTNEPTNEPTNEImJvdHRvbSIpKXt2YXIgTD0zRFtdO20uc2VsPQplY3RBbGwoImcubnYtYXhp c01heE1pbiIpLmVhY2goZnVuY3Rpb24oZSx0KXt0cnl7dD9MLnB1c2gocyhlKS10aGlzLmdldEJC b3g9CigpLndpZHRoLTQpOkwucHVzaChzKGUpK3RoaXMuZ2V0QkJveCgpLndpZHRoKzQpfWNhdGNo KG4pe3Q/TC5wdXNoKHMoZSktNCk6TD0KLnB1c2gocyhlKSs0KX19KSxiLnNlbGVjdEFsbCgiZyIp LmVhY2goZnVuY3Rpb24oZSx0KXtpZihzKGUpPExbMF18fHMoZSk+TFsxPQpdKWU+MWUtMTB8fGU8 LTFlLTEwP2QzLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTpkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0 ZXh0Iik9Ci5yZW1vdmUoKX0pfWEmJmIuc2VsZWN0QWxsKCIudGljayIpLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hcGFyc2VGbG9hdChNYT0KdGgucm91bmQoZS5fX2RhdGFfXyoxZTUpLzFlNikm JmUuX19kYXRhX18hPTNEPTNEdW5kZWZpbmVkfSkuY2xhc3NlZCgiemVybyIsPQohMCksdj0zRHMu Y29weSgpfSksbX12YXIgdD0zRGQzLnN2Zy5heGlzKCksbj0zRHt0b3A6MCxyaWdodDowLGJvdHRv bTowLGxlZnQ9CjowfSxyPTNENzUsaT0zRDYwLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEbnVs bCx1PTNEITAsYT0zRCEwLGY9M0QwLGw9M0QhMD0KLGM9M0QhMSxoPTNEITEscD0zRG51bGwsZD0z RDEyO3Quc2NhbGUocykub3JpZW50KCJib3R0b20iKS50aWNrRm9ybWF0KGZ1bmN0PQppb24oZSl7 cmV0dXJuIGV9KTt2YXIgdjtyZXR1cm4gbS5heGlzPTNEdCxkMy5yZWJpbmQobSx0LCJvcmllbnQi LCJ0aWNrVmFsdWU9CnMiLCJ0aWNrU3ViZGl2aWRlIiwidGlja1NpemUiLCJ0aWNrUGFkZGluZyIs InRpY2tGb3JtYXQiKSxkMy5yZWJpbmQobSxzLCJkbz0KbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5k IiwicmFuZ2VCYW5kcyIpLG0ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluPQpkKG0p LG0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPTNE dHlwZW9mIGUudG9wIT0KPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdodD0zRHR5cGVv ZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6PQpuLnJpZ2h0LG4uYm90dG9tPTNEdHlw ZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm4uYm90dG9tLG4ubGVmdD0KPTNE dHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bi5sZWZ0LG0pOm59LG0ud2lkdGg9 M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxtKTpyfSxtLnRp Y2tzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxlbmd0aD8ocD0zRGUsbSk6cH0s bS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsbT0K KTppfSxtLmF4aXNMYWJlbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhv PTNEZSxtKTpvfSxtLnNob3dNPQpheE1pbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh1PTNEZSxtKTp1fSxtLmhpZ2hsaWdodFplcm89M0Q9CmZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxtKTphfSxtLnNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0 dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdC5zY2FsZShzKSxoPTNEdHlwZW9mIHMucmFu Z2VCYW5kcz0zRD0zRCJmdW5jdGlvPQpuIixkMy5yZWJpbmQobSxzLCJkb21haW4iLCJyYW5nZSIs InJhbmdlQmFuZCIsInJhbmdlQmFuZHMiKSxtKTpzfSxtLnJvdGF0ZVk9CkxhYmVsPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0ucm90YXRlTGFiZWxz PTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsbSk6Zn0sbS5z dGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0z RGUsbSk6Y30sbS5heGlzTGFiZWxEaXN0YW5jZT0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGQ9M0RlLG0pOmR9LG19LGUubW9kZWxzLmhpc3RvcmljYWxCYXI9M0RmdW5j dGlvbigpez0KZnVuY3Rpb24gdyhFKXtyZXR1cm4gRS5lYWNoKGZ1bmN0aW9uKHcpe3ZhciBFPTNE bi10LmxlZnQtdC5yaWdodCxTPTNEci10LnRvPQpwLXQuYm90dG9tLFQ9M0RkMy5zZWxlY3QodGhp cyk7cy5kb21haW4oZHx8ZDMuZXh0ZW50KHdbMF0udmFsdWVzLm1hcCh1KS5jb249CmNhdChmKSkp LGM/cy5yYW5nZShtfHxbRSouNS93WzBdLnZhbHVlcy5sZW5ndGgsRSood1swXS52YWx1ZXMubGVu Z3RoLS41KS93Wz0KMF0udmFsdWVzLmxlbmd0aF0pOnMucmFuZ2UobXx8WzAsRV0pLG8uZG9tYWlu KHZ8fGQzLmV4dGVudCh3WzBdLnZhbHVlcy5tYXAoPQphKS5jb25jYXQobCkpKS5yYW5nZShnfHxb UywwXSkscy5kb21haW4oKVswXT0zRD0zRD0zRHMuZG9tYWluKClbMV0mJihzLmRvbWE9CmluKClb MF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0tcy5kb21haW4oKVswXSouMDEscy5kb21haW4oKVsx XStzLmRvbWFpbigpWz0KMV0qLjAxXSk6cy5kb21haW4oWy0xLDFdKSksby5kb21haW4oKVswXT0z RD0zRD0zRG8uZG9tYWluKClbMV0mJihvLmRvbWFpbigpPQpbMF0/by5kb21haW4oW28uZG9tYWlu KClbMF0rby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsxXS1vLmRvbWFpbigpWzFdKi49CjAx XSk6by5kb21haW4oWy0xLDFdKSk7dmFyIE49M0RULnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWhp c3RvcmljYWxCYXItIitpKT0KLmRhdGEoW3dbMF0udmFsdWVzXSksQz0zRE4uZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBuPQp2LWhpc3RvcmljYWxCYXItIitp KSxrPTNEQy5hcHBlbmQoImRlZnMiKSxMPTNEQy5hcHBlbmQoImciKSxBPTNETi5zZWxlY3QoImc9 CiIpO0wuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzIiksTi5hdHRyKCJ0cmFuc2Zv cm0iLCJ0cmFuc2xhdGUoIit0Lj0KbGVmdCsiLCIrdC50b3ArIikiKSxULm9uKCJjbGljayIsZnVu Y3Rpb24oZSx0KXt5LmNoYXJ0Q2xpY2soe2RhdGE6ZSxpbmRleDp0PQoscG9zOmQzLmV2ZW50LGlk Oml9KX0pLGsuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtY2hhcnQtY2xpcC1wYXRo LSI9CitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbGVjdCgiI252LWNoYXJ0LWNsaXAtcGF0aC0iK2kr IiByZWN0IikuYXR0cigid2lkdGgiLD0KRSkuYXR0cigiaGVpZ2h0IixTKSxBLmF0dHIoImNsaXAt cGF0aCIsaD8idXJsKCNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIpIjoiPQoiKTt2YXIgTz0zRE4u c2VsZWN0KCIubnYtYmFycyIpLnNlbGVjdEFsbCgiLm52LWJhciIpLmRhdGEoZnVuY3Rpb24oZSl7 cmV0dXI9Cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpfSk7Ty5leGl0KCkucmVtb3Zl KCk7dmFyIE09M0RPLmVudGVyKCkuYXBwZT0KbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5 IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKE1hPQp0aC5tYXgoMCxh KHQsbikpKSl9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFO dG9aZXJvKE09CmF0aC5hYnMobyhhKHQsbikpLW8oMCkpKX0pLmF0dHIoInRyYW5zZm9ybSIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKD0KIisocyh1KGUsdCkpLUUvd1swXS52YWx1ZXMu bGVuZ3RoKi40NSkrIiwwKSJ9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpPQp7aWYoIWIp cmV0dXJuO2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLHkuZWxlbWVudE1vdXNl b3Zlcih7cG9pbnQ9CjplLHNlcmllczp3WzBdLHBvczpbcyh1KGUsdCkpLG8oYShlLHQpKV0scG9p bnRJbmRleDp0LHNlcmllc0luZGV4OjAsZTpkMy5ldj0KZW50fSl9KS5vbigibW91c2VvdXQiLGZ1 bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJoPQpvdmVy IiwhMSkseS5lbGVtZW50TW91c2VvdXQoe3BvaW50OmUsc2VyaWVzOndbMF0scG9pbnRJbmRleDp0 LHNlcmllc0luZGV4OjA9CixlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7 aWYoIWIpcmV0dXJuO3kuZWxlbWVudENsaWNrKHt2YWx1ZT0KOmEoZSx0KSxkYXRhOmUsaW5kZXg6 dCxwb3M6W3ModShlLHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50PQou c3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0 dXJuO3kuZWxlbWVudERibEM9CmxpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6 W3ModShlLHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aT0KfSksZDMuZXZlbnQuc3RvcFBy b3BhZ2F0aW9uKCl9KTtPLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0KX0p PQouYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oYShlLHQpPDA/Im52LWJhciBu ZWdhdGl2ZSI6Im52LWJhciBwb3M9Cml0aXZlIikrIiBudi1iYXItIituKyItIit0fSkuYXR0cigi dHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdD0KZSgiKyhzKHUoZSx0KSkt RS93WzBdLnZhbHVlcy5sZW5ndGgqLjQ1KSsiLDApIn0pLmF0dHIoIndpZHRoIixFL3dbMF0udmFs dWVzPQoubGVuZ3RoKi45KSxPLmF0dHIoInkiLGZ1bmN0aW9uKHQsbil7dmFyIHI9M0RhKHQsbik8 MD9vKDApOm8oMCktbyhhKHQsbikpPDE9Cj9vKDApLTE6byhhKHQsbikpO3JldHVybiBlLnV0aWxz Lk5hTnRvWmVybyhyKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCxuKT0Ke3JldHVybiBlLnV0 aWxzLk5hTnRvWmVybyhNYXRoLm1heChNYXRoLmFicyhvKGEodCxuKSktbygwKSksMSkpfSl9KSx3 fXZhciB0PQo9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUw MCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmQ9Cm9tKCkqMWU0KSxzPTNEZDMuc2NhbGUubGluZWFy KCksbz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBlLnh9LGE9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEW10sbD0zRFswXSxjPTNEITEsaD0zRCEwLHA9 M0RlLnV0aWxzPQouZGVmYXVsdENvbG9yKCksZCx2LG0sZyx5PTNEZDMuZGlzcGF0Y2goImNoYXJ0 Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW49CnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92 ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxiPTNEITA7cmV0dXJuIHcuaGlnaGxpZ2h0UD0Kb2ludD0z RGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KCIubnYtaGlzdG9yaWNhbEJhci0iK2kpLnNlbGVjdCgi Lm52LWJhcnMgLm52PQotYmFyLTAtIitlKS5jbGFzc2VkKCJob3ZlciIsdCl9LHcuY2xlYXJIaWdo bGlnaHRzPTNEZnVuY3Rpb24oKXtkMy5zZWxlY3QoIi49Cm52LWhpc3RvcmljYWxCYXItIitpKS5z ZWxlY3QoIi5udi1iYXJzIC5udi1iYXIuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEpfT0KLHcu ZGlzcGF0Y2g9M0R5LHcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh3KSx3Lng9 M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSx3KTp1fSx3Lnk9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhhPTNEZSx3KTphfSx3Lm1h cmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cD0K ZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5y aWdodCE9M0QidW5kZWZpbmVkPQoiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHQ9Cm9tLHQubGVmdD0zRHR5cGVv ZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCx3KTp0fSx3LndpZHRoPTNEZnVu Yz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsdyk6bn0sdy5oZWlnaHQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3LnhT Y2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KHM9M0RlLHcpOnN9 LHcueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLHcp Om99LD0Kdy54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9 M0RlLHcpOmR9LHcueURvbWFpbj0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHY9M0RlLHcpOnZ9LHcueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRz Lmxlbmd0aD8obT0zRGUsdyk6bX0sdy55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbj0KZ3RoPyhnPTNEZSx3KTpnfSx3LmZvcmNlWD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZSx3KTpmPQp9LHcuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHcpOmx9LHcucGFkRGF0YT0zRGY9CnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHcpOmN9LHcuY2xpcEVkZ2U9M0RmdW5j dGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx3KTpofSx3LmNvbG9yPTNE ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8ocD0zRGUudXRpbHMuZ2V0Q29s b3IodCksdyk6cH0sdy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/ KGk9M0RlLHcpOml9LHcuaW50ZXJhY3RpdmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYj0zRD0KITEsdyk6Yn0sd30sZS5tb2RlbHMuYnVsbGV0PTNEZnVuY3Rpb24oKXtm dW5jdGlvbiBtKGUpe3JldHVybiBlLmVhY2goZnVuY3RpPQpvbihlLG4pe3ZhciBwPTNEYy10Lmxl ZnQtdC5yaWdodCxtPTNEaC10LnRvcC10LmJvdHRvbSxnPTNEZDMuc2VsZWN0KHRoaXMpLHk9Cj0z RGkuY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLGI9M0RzLmNhbGwo dGhpcyxlLG4pLnNsaWNlKD0KKS5zb3J0KGQzLmRlc2NlbmRpbmcpLHc9M0RvLmNhbGwodGhpcyxl LG4pLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxFPTNEPQp1LmNhbGwodGhpcyxlLG4pLnNs aWNlKCksUz0zRGEuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSx4PTNEZi5jYWxsKHRoaXMsZSxuKS49 CnNsaWNlKCksVD0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihkMy5leHRlbnQoZDMubWVyZ2Uo W2wseV0pKSkucmFuZ2Uocj9bcD0KLDBdOlswLHBdKSxOPTNEdGhpcy5fX2NoYXJ0X198fGQzLnNj YWxlLmxpbmVhcigpLmRvbWFpbihbMCxJbmZpbml0eV0pLnJhbmdlPQooVC5yYW5nZSgpKTt0aGlz Ll9fY2hhcnRfXz0zRFQ7dmFyIEM9M0RkMy5taW4oeSksaz0zRGQzLm1heCh5KSxMPTNEeVsxXSxB PQo9M0RnLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWJ1bGxldCIpLmRhdGEoW2VdKSxPPTNEQS5l bnRlcigpLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbGV0 IiksTT0zRE8uYXBwZW5kKCJnIiksXz0zREEuc2VsZWN0KCJnIik7TT0KLmFwcGVuZCgicmVjdCIp LmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VNYXgiKSxNLmFwcGVuZCgicmVjdCIpLmF0 dHIoPQoiY2xhc3MiLCJudi1yYW5nZSBudi1yYW5nZUF2ZyIpLE0uYXBwZW5kKCJyZWN0IikuYXR0 cigiY2xhc3MiLCJudi1yYW5nZSBudi09CnJhbmdlTWluIiksTS5hcHBlbmQoInJlY3QiKS5hdHRy KCJjbGFzcyIsIm52LW1lYXN1cmUiKSxNLmFwcGVuZCgicGF0aCIpLmF0dD0KcigiY2xhc3MiLCJu di1tYXJrZXJUcmlhbmdsZSIpLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0 KyIsIit0PQoudG9wKyIpIik7dmFyIEQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoTihl KS1OKDApKX0sUD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIE1hdGguYWJzKFQoZSktVCgwKSl9LEg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZTwwP04oZSk6TigwKX0sQj0zRGZ1bmN0aT0Kb24oZSl7cmV0 dXJuIGU8MD9UKGUpOlQoMCl9O18uc2VsZWN0KCJyZWN0Lm52LXJhbmdlTWF4IikuYXR0cigiaGVp Z2h0IixtKS5hPQp0dHIoIndpZHRoIixQKGs+MD9rOkMpKS5hdHRyKCJ4IixCKGs+MD9rOkMpKS5k YXR1bShrPjA/azpDKSxfLnNlbGVjdCgicmVjdC49Cm52LXJhbmdlQXZnIikuYXR0cigiaGVpZ2h0 IixtKS5hdHRyKCJ3aWR0aCIsUChMKSkuYXR0cigieCIsQihMKSkuZGF0dW0oTCksXz0KLnNlbGVj dCgicmVjdC5udi1yYW5nZU1pbiIpLmF0dHIoImhlaWdodCIsbSkuYXR0cigid2lkdGgiLFAoaykp LmF0dHIoIngiLEIoPQprKSkuYXR0cigid2lkdGgiLFAoaz4wP0M6aykpLmF0dHIoIngiLEIoaz4w P0M6aykpLmRhdHVtKGs+MD9DOmspLF8uc2VsZWN0KCI9CnJlY3QubnYtbWVhc3VyZSIpLnN0eWxl KCJmaWxsIixkKS5hdHRyKCJoZWlnaHQiLG0vMykuYXR0cigieSIsbS8zKS5hdHRyKCJ3aT0KZHRo Iix3PDA/VCgwKS1UKHdbMF0pOlQod1swXSktVCgwKSkuYXR0cigieCIsQih3KSkub24oIm1vdXNl b3ZlciIsZnVuY3Rpb24oPQope3YuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6d1swXSxsYWJlbDp4 WzBdfHwiQ3VycmVudCIscG9zOltUKHdbMF0pLG0vMl19KX09Cikub24oIm1vdXNlb3V0IixmdW5j dGlvbigpe3YuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTp3WzBdLGxhYmVsOnhbMF18fCJDdXJyZT0K bnQifSl9KTt2YXIgaj0zRG0vNjtiWzBdP18uc2VsZWN0QWxsKCJwYXRoLm52LW1hcmtlclRyaWFu Z2xlIikuYXR0cigidHJhbnNmPQpvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitU KGJbMF0pKyIsIittLzIrIikifSkuYXR0cigiZCIsIk0wLCIrais9CiJMIitqKyIsIisgLWorIiAi KyAtaisiLCIrIC1qKyJaIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2LmVsZW1lbnRNb3Vz ZT0Kb3Zlcih7dmFsdWU6YlswXSxsYWJlbDpTWzBdfHwiUHJldmlvdXMiLHBvczpbVChiWzBdKSxt LzJdfSl9KS5vbigibW91c2VvdXQiPQosZnVuY3Rpb24oKXt2LmVsZW1lbnRNb3VzZW91dCh7dmFs dWU6YlswXSxsYWJlbDpTWzBdfHwiUHJldmlvdXMifSl9KTpfLnNlbGU9CmN0QWxsKCJwYXRoLm52 LW1hcmtlclRyaWFuZ2xlIikucmVtb3ZlKCksQS5zZWxlY3RBbGwoIi5udi1yYW5nZSIpLm9uKCJt b3VzZT0Kb3ZlciIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zREVbdF18fCh0P3Q9M0Q9M0QxPyJNZWFu IjoiTWluaW11bSI6Ik1heGltdW0iKTt2PQouZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6ZSxsYWJl bDpuLHBvczpbVChlKSxtLzJdfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW89Cm4oZSx0KXt2YXIg bj0zREVbdF18fCh0P3Q9M0Q9M0QxPyJNZWFuIjoiTWluaW11bSI6Ik1heGltdW0iKTt2LmVsZW1l bnRNb3VzZT0Kb3V0KHt2YWx1ZTplLGxhYmVsOm59KX0pfSksbX12YXIgdD0zRHt0b3A6MCxyaWdo dDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRCJsPQplZnQiLHI9M0QhMSxpPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUucmFuZ2VzfSxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFya2U9CnJzfSxvPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3VyZXN9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5y YW5nZUxhYmVscz0KP2UucmFuZ2VMYWJlbHM6W119LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5t YXJrZXJMYWJlbHM/ZS5tYXJrZXJMYWJlbHM6W119PQosZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBl Lm1lYXN1cmVMYWJlbHM/ZS5tZWFzdXJlTGFiZWxzOltdfSxsPTNEWzBdLGM9M0QzODA9CixoPTNE MzAscD0zRG51bGwsZD0zRGUudXRpbHMuZ2V0Q29sb3IoWyIjMWY3N2I0Il0pLHY9M0RkMy5kaXNw YXRjaCgiZWxlbWVudD0KTW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0Iik7cmV0dXJuIG0uZGlz cGF0Y2g9M0R2LG0ub3B0aW9ucz0zRGUudXRpbHMub3B0PQppb25zRnVuYy5iaW5kKG0pLG0ub3Jp ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLHI9M0Q9Cm49 M0Q9M0QicmlnaHQifHxuPTNEPTNEImJvdHRvbSIsbSk6bn0sbS5yYW5nZXM9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLm1hcmtlcnM9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0KPTNEZSxtKTpzfSxtLm1lYXN1cmVz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOm99LG0uPQpm b3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsbSk6bH0s bS53aWR0aD0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLG0p OmN9LG0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8oaD0z RGUsbSk6aH0sbS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o PQp0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0 PTNEdHlwZW9mIGUucmlnaHQhPQo9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0 b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS49CmJvdHRvbTp0LmJvdHRvbSx0 LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsbSk6dH0s bT0KLnRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0z RGUsbSk6cH0sbS5jb2xvcj0zRGZ1PQpuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGQ9M0RlLnV0aWxzLmdldENvbG9yKHQpLG0pOmR9LG19LGUubW9kZWw9CnMuYnVsbGV0Q2hhcnQ9 M0RmdW5jdGlvbigpe2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihuLGgpe3Zh ciBnPQo9M0RkMy5zZWxlY3QodGhpcykseT0zRChhfHxwYXJzZUludChnLnN0eWxlKCJ3aWR0aCIp KXx8OTYwKS1pLmxlZnQtaS5yaWdodCw9CmI9M0RmLWkudG9wLWkuYm90dG9tLHc9M0R0aGlzO20u dXBkYXRlPTNEZnVuY3Rpb24oKXttKGUpfSxtLmNvbnRhaW5lcj0zRHRoaT0KcztpZighbnx8IXMu Y2FsbCh0aGlzLG4saCkpe3ZhciBFPTNEZy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtw XSk7cmV0PQp1cm4gRS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBu di1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2U9Cm0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRk bGUiKSxFLmF0dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLDE4K2kudG9wKz0KYi8yKS50ZXh0 KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksbX1nLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92 ZSgpO3ZhciBTPQo9M0RzLmNhbGwodGhpcyxuLGgpLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5n KSx4PTNEby5jYWxsKHRoaXMsbixoKS5zbGljZSg9Cikuc29ydChkMy5kZXNjZW5kaW5nKSxUPTNE dS5jYWxsKHRoaXMsbixoKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksTj0zRD0KZy5zZWxl Y3RBbGwoImcubnYtd3JhcC5udi1idWxsZXRDaGFydCIpLmRhdGEoW25dKSxDPTNETi5lbnRlcigp LmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbGV0Q2hhcnQi KSxrPTNEQy5hcHBlbmQoImciKSxMPTNETi5zZWxlY3Q9CigiZyIpO2suYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1idWxsZXRXcmFwIiksay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcz0KIiwi bnYtdGl0bGVzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmxlZnQrIiwiK2ku dG9wKyIpIik7dmFyIEE9Cj0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxNYXRoLm1heChT WzBdLHhbMF0sVFswXSldKS5yYW5nZShyP1t5LDBdOlswLD0KeV0pLE89M0R0aGlzLl9fY2hhcnRf X3x8ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLEluZmluaXR5XSkucmFuZ2UoQS5yYW5nPQpl KCkpO3RoaXMuX19jaGFydF9fPTNEQTt2YXIgTT0zRGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFi cyhPKGUpLU8oMCkpfSxfPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoQShlKS1BKDAp KX0sRD0zRGsuc2VsZWN0KCIubnYtdGl0bGVzIikuYXBwZW49CmQoImciKS5hdHRyKCJ0ZXh0LWFu Y2hvciIsImVuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtNiwiKyhmLWkudG9wLT0K aS5ib3R0b20pLzIrIikiKTtELmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtdGl0bGUi KS50ZXh0KGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUudGl0bGV9KSxELmFwcGVuZCgidGV4dCIpLmF0 dHIoImNsYXNzIiwibnYtc3VidGl0bGUiKS5hdHRyKCJkeSIsIjE9CmVtIikudGV4dChmdW5jdGlv bihlKXtyZXR1cm4gZS5zdWJ0aXRsZX0pLHQud2lkdGgoeSkuaGVpZ2h0KGIpO3ZhciBQPTNETC5z ZT0KbGVjdCgiLm52LWJ1bGxldFdyYXAiKTtkMy50cmFuc2l0aW9uKFApLmNhbGwodCk7dmFyIEg9 M0RsfHxBLnRpY2tGb3JtYXQoeS8xPQowMCksQj0zREwuc2VsZWN0QWxsKCJnLm52LXRpY2siKS5k YXRhKEEudGlja3MoeS81MCksZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9Ci50ZXh0Q29udGVudHx8 SChlKX0pLGo9M0RCLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi10aWNrIiku YXR0cj0KKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitPKGUpKyIs MCkifSkuc3R5bGUoIm9wYWNpdHkiLDFlPQotNik7ai5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIs YikuYXR0cigieTIiLGIqNy82KSxqLmFwcGVuZCgidGV4dCIpLmF0dHIoInQ9CmV4dC1hbmNob3Ii LCJtaWRkbGUiKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoInkiLGIqNy82KS50ZXh0KEgpO3ZhciBG PTNEZDMudD0KcmFuc2l0aW9uKEIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJu InRyYW5zbGF0ZSgiK0EoZSkrIiwwKSJ9KS5zPQp0eWxlKCJvcGFjaXR5IiwxKTtGLnNlbGVjdCgi bGluZSIpLmF0dHIoInkxIixiKS5hdHRyKCJ5MiIsYio3LzYpLEYuc2VsZWN0KCI9CnRleHQiKS5h dHRyKCJ5IixiKjcvNiksZDMudHJhbnNpdGlvbihCLmV4aXQoKSkuYXR0cigidHJhbnNmb3JtIixm dW5jdGlvbihlKT0Ke3JldHVybiJ0cmFuc2xhdGUoIitBKGUpKyIsMCkifSkuc3R5bGUoIm9wYWNp dHkiLDFlLTYpLnJlbW92ZSgpLGQub24oInRvb2x0PQppcFNob3ciLGZ1bmN0aW9uKGUpe2Uua2V5 PTNEbi50aXRsZSxjJiZ2KGUsdy5wYXJlbnROb2RlKX0pfSksZDMudGltZXIuZmx1c2g9CigpLG19 dmFyIHQ9M0RlLm1vZGVscy5idWxsZXQoKSxuPTNEImxlZnQiLHI9M0QhMSxpPTNEe3RvcDo1LHJp Z2h0OjQwLGJvdHRvbT0KOjIwLGxlZnQ6MTIwfSxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucmFu Z2VzfSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFyPQprZXJzfSx1PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUubWVhc3VyZXN9LGE9M0RudWxsLGY9M0Q1NSxsPTNEbnVsbCxjPTNEITAsaD0KPTNE ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrdCsiPC9oMz4iKyI8cD4iK24rIjwvcD4i fSxwPTNEIk5vIERhdGEgPQpBdmFpbGFibGUuIixkPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93 IiwidG9vbHRpcEhpZGUiKSx2PTNEZnVuY3Rpb24odCxuKXs9CnZhciByPTNEdC5wb3NbMF0rKG4u b2Zmc2V0TGVmdHx8MCkraS5sZWZ0LHM9M0R0LnBvc1sxXSsobi5vZmZzZXRUb3B8fDApK2kudD0K b3Asbz0zRGgodC5rZXksdC5sYWJlbCx0LnZhbHVlLHQsbSk7ZS50b29sdGlwLnNob3coW3Isc10s byx0LnZhbHVlPDA/ImUiOiJ3PQoiLG51bGwsbil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QudG89Cm9sdGlwU2hvdyhlKX0pLHQu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtkLnRvb2x0 aT0KcEhpZGUoZSl9KSxkLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtjJiZlLnRvb2x0aXAu Y2xlYW51cCgpfSksbS5kaXNwYXRjPQpoPTNEZCxtLmJ1bGxldD0zRHQsZDMucmViaW5kKG0sdCwi Y29sb3IiKSxtLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmI9CmluZChtKSxtLm9yaWVu dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxyPTNEbj0zRD0z RCJyaT0KZ2h0Inx8bj0zRD0zRCJib3R0b20iLG0pOm59LG0ucmFuZ2VzPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocz0zRGUsbSk6c30sbS5tYXJrZXJzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOm99LG09Ci5tZWFzdXJlcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxtKTp1fSxtLndpZHRo PTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsbSk6YX0sbS5o ZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxtKTpm fSxtLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGkudG9w PTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGkucmlnaHQ9M0R0eXBl b2YgZS5yaWdodD0KIT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdodCxpLmJvdHRvbT0zRHR5 cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lPQouYm90dG9tOmkuYm90dG9tLGkubGVmdD0z RHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCxtKTppfSw9Cm0udGlj a0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxtKTps fSxtLnRvb2x0aXBzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0z RGUsbSk6Y30sbS50b29sdGlwQ29udGVudD0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGg9M0RlLG0pOmh9LG0ubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJn dW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbX0sZS5tb2RlbHMuY3VtdWxhdGl2ZUxpbmVDaGFy dD0zRGZ1bmN0aW9uKCl7PQpmdW5jdGlvbiBEKGIpe3JldHVybiBiLmVhY2goZnVuY3Rpb24oYil7 ZnVuY3Rpb24gSShlLHQpe2QzLnNlbGVjdChELmNvbnRhaW49CmVyKS5zdHlsZSgiY3Vyc29yIiwi ZXctcmVzaXplIil9ZnVuY3Rpb24gcShlLHQpe00ueD0zRGQzLmV2ZW50LngsTS5pPTNETWF0aD0K LnJvdW5kKE8uaW52ZXJ0KE0ueCkpLG50KCl9ZnVuY3Rpb24gUihlLHQpe2QzLnNlbGVjdChELmNv bnRhaW5lcikuc3R5bGUoImN1PQpyc29yIiwiYXV0byIpLHguaW5kZXg9M0RNLmksay5zdGF0ZUNo YW5nZSh4KX1mdW5jdGlvbiBudCgpe3R0LmRhdGEoW01dKTt2YXI9CiBlPTNERC50cmFuc2l0aW9u RHVyYXRpb24oKTtELnRyYW5zaXRpb25EdXJhdGlvbigwKSxELnVwZGF0ZSgpLEQudHJhbnNpdGlv bj0KRHVyYXRpb24oZSl9dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgibnYtY2hhcnQt IitTLCEwKSxBPTNEdGhpcyxIPTNEPQooZnx8cGFyc2VJbnQoTC5zdHlsZSgid2lkdGgiKSl8fDk2 MCktdS5sZWZ0LXUucmlnaHQsQj0zRChsfHxwYXJzZUludChMLnN0eWw9CmUoImhlaWdodCIpKXx8 NDAwKS11LnRvcC11LmJvdHRvbTtELnVwZGF0ZT0zRGZ1bmN0aW9uKCl7TC5jYWxsKEQpfSxELmNv bnRhaT0KbmVyPTNEdGhpcyx4LmRpc2FibGVkPTNEYi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFl LmRpc2FibGVkfSk7aWYoIVQpe3ZhciBqPQo7VD0zRHt9O2ZvcihqIGluIHgpeFtqXWluc3RhbmNl b2YgQXJyYXk/VFtqXT0zRHhbal0uc2xpY2UoMCk6VFtqXT0zRHhbal19dmE9CnIgRj0zRGQzLmJl aGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixJKS5vbigiZHJhZyIscSkub24oImRyYWdlbmQi LFIpO2lmKD0KIWJ8fCFiLmxlbmd0aHx8IWIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZh bHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBVPQo9M0RMLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIp LmRhdGEoW05dKTtyZXR1cm4gVS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHI9CigiY2xhc3Mi LCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3Ii LCJtaWRkbGUiKT0KLFUuYXR0cigieCIsdS5sZWZ0K0gvMikuYXR0cigieSIsdS50b3ArQi8yKS50 ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksRH1MPQouc2VsZWN0QWxsKCIubnYtbm9EYXRhIiku cmVtb3ZlKCksdz0zRHQueFNjYWxlKCksRT0zRHQueVNjYWxlKCk7aWYoIXkpe3ZhciA9Cno9M0Ri LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLm1hcChmdW5jdGlvbihlLG4p e3ZhciByPTNEZDMuZT0KeHRlbnQoZS52YWx1ZXMsdC55KCkpO3JldHVybiByWzBdPC0wLjk1JiYo clswXT0zRC0wLjk1KSxbKHJbMF0tclsxXSkvKDErclsxPQpdKSwoclsxXS1yWzBdKS8oMStyWzBd KV19KSxXPTNEW2QzLm1pbih6LGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdfSksZDMubWF4KHo9Cixm dW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pXTt0LnlEb21haW4oVyl9ZWxzZSB0LnlEb21haW4obnVs bCk7Ty5kb21haW4oWzAsYj0KWzBdLnZhbHVlcy5sZW5ndGgtMV0pLnJhbmdlKFswLEhdKS5jbGFt cCghMCk7dmFyIGI9M0RQKE0uaSxiKSxYPTNEZz8ibm9uZSI6PQoiYWxsIixWPTNETC5zZWxlY3RB bGwoImcubnYtd3JhcC5udi1jdW11bGF0aXZlTGluZSIpLmRhdGEoW2JdKSwkPTNEVi5lbnRlcig9 CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtY3VtdWxhdGl2ZUxp bmUiKS5hcHBlbmQoImciKSxKPQo9M0RWLnNlbGVjdCgiZyIpOyQuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1pbnRlcmFjdGl2ZSIpLCQuYXBwZW5kKCJnIik9Ci5hdHRyKCJjbGFzcyIsIm52 LXggbnYtYXhpcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSwkLmFwcGVuZCgiZyIp Lj0KYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYtYmFja2dyb3VuZCIpLCQuPQphcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVz V3JhcCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsWCksJC5hcHBlbmQ9CigiZyIpLmF0dHIoImNs YXNzIiwibnYtYXZnTGluZXNXcmFwIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLCQu YXBwZT0KbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSwkLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtY29udHJvPQpsc1dyYXAiKSxjJiYoaS53aWR0aChIKSxKLnNlbGVj dCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShiKS5jYWxsKGkpLHUudG9wIT0KPTNEaS5oZWlnaHQo KSYmKHUudG9wPTNEaS5oZWlnaHQoKSxCPTNEKGx8fHBhcnNlSW50KEwuc3R5bGUoImhlaWdodCIp KXx8NDAwPQopLXUudG9wLXUuYm90dG9tKSxKLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCw9CiIrIC11LnRvcCsiKSIpKTtpZihtKXt2YXIgSz0z RFt7a2V5OiJSZS1zY2FsZSB5LWF4aXMiLGRpc2FibGVkOiF5fV07cy53aWR0aD0KKDE0MCkuY29s b3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSkucmlnaHRBbGlnbighMSkubWFyZ2luKHt0b3A6NSxy aWdodDowLGJvPQp0dG9tOjUsbGVmdDoyMH0pLEouc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIiku ZGF0dW0oSykuYXR0cigidHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKS5j YWxsKHMpfVYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5sZWZ0KyIsIj0KK3UudG9w KyIpIiksZCYmSi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIitIKyIsPQowKSIpO3ZhciBRPTNEYi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUu dGVtcERpc2FibGVkfSk7Vi5zZWxlY3QoIi50ZW1wRGk9CnNhYmxlZCIpLnJlbW92ZSgpLFEubGVu Z3RoJiZWLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidGVtcERpc2FibGVkIikuYT0KdHRy KCJ4IixILzIpLmF0dHIoInkiLCItLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJlbmQiKS50 ZXh0KFEubWFwKGZ1bmN0PQppb24oZSl7cmV0dXJuIGUua2V5fSkuam9pbigiLCAiKSsiIHZhbHVl cyBjYW5ub3QgYmUgY2FsY3VsYXRlZCBmb3IgdGhpcyB0aW09CmUgcGVyaW9kLiIpLGcmJihvLndp ZHRoKEgpLmhlaWdodChCKS5tYXJnaW4oe2xlZnQ6dS5sZWZ0LHRvcDp1LnRvcH0pLnN2Z0Nvbj0K dGFpbmVyKEwpLnhTY2FsZSh3KSxWLnNlbGVjdCgiLm52LWludGVyYWN0aXZlIikuY2FsbChvKSks JC5zZWxlY3QoIi5udi1iYWNrPQpncm91bmQiKS5hcHBlbmQoInJlY3QiKSxKLnNlbGVjdCgiLm52 LWJhY2tncm91bmQgcmVjdCIpLmF0dHIoIndpZHRoIixIKS5hdHQ9CnIoImhlaWdodCIsQiksdC55 KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3BsYXkueX0pLndpZHRoKEgpLmhlaWdodChCKS5jb2xv cj0KKGIubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGEoZSx0KX0pLmZpbHRlcihm dW5jdGlvbihlLHQpe3JldHVybiFiPQpbdF0uZGlzYWJsZWQmJiFiW3RdLnRlbXBEaXNhYmxlZH0p KTt2YXIgRz0zREouc2VsZWN0KCIubnYtbGluZXNXcmFwIikuZGF0dW09CihiLmZpbHRlcihmdW5j dGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmIWUudGVtcERpc2FibGVkfSkpO0cuY2FsbCh0KSxi LmZvcj0KRWFjaChmdW5jdGlvbihlLHQpe2Uuc2VyaWVzSW5kZXg9M0R0fSk7dmFyIFk9M0RiLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hPQplLmRpc2FibGVkJiYhIUMoZSl9KSxaPTNESi5zZWxl Y3QoIi5udi1hdmdMaW5lc1dyYXAiKS5zZWxlY3RBbGwoImxpbmUiKS5kYXQ9CmEoWSxmdW5jdGlv bihlKXtyZXR1cm4gZS5rZXl9KSxldD0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNERShDKGUpKTtyZXR1 cm4gdDwwPz0KMDp0PkI/Qjp0fTtaLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9r ZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kPQphc2hhcnJheSIsIjEwLDEwIikuc3R5bGUoInN0 cm9rZSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jb2xvcigpKGUsZS5zZXJpZXM9CkluZGV4KX0p LmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsSCkuYXR0cigieTEiLGV0KS5hdHRyKCJ5MiIsZXQpLFou c3R5bGUoInN0cj0Kb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKGUpe3ZhciB0PTNERShDKGUpKTtyZXR1 cm4gdDwwfHx0PkI/MDoxfSkuYXR0cigieDEiLDApPQouYXR0cigieDIiLEgpLmF0dHIoInkxIixl dCkuYXR0cigieTIiLGV0KSxaLmV4aXQoKS5yZW1vdmUoKTt2YXIgdHQ9M0RHLnNlbGU9CmN0QWxs KCIubnYtaW5kZXhMaW5lIikuZGF0YShbTV0pO3R0LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0 cigiY2xhc3MiLCJudj0KLWluZGV4TGluZSIpLmF0dHIoIndpZHRoIiwzKS5hdHRyKCJ4IiwtMiku YXR0cigiZmlsbCIsInJlZCIpLmF0dHIoImZpbGwtb3BhPQpjaXR5IiwuNSkuc3R5bGUoInBvaW50 ZXItZXZlbnRzIiwiYWxsIikuY2FsbChGKSx0dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW89Cm4o ZSl7cmV0dXJuInRyYW5zbGF0ZSgiK08oZS5pKSsiLDApIn0pLmF0dHIoImhlaWdodCIsQiksaCYm KG4uc2NhbGUodykudGljaz0KcyhNYXRoLm1pbihiWzBdLnZhbHVlcy5sZW5ndGgsSC83MCkpLnRp Y2tTaXplKC1CLDApLEouc2VsZWN0KCIubnYteC5udi1heGlzPQoiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoMCwiK0UucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oSi5zZWxlY3Q9 CigiLm52LXgubnYtYXhpcyIpKS5jYWxsKG4pKSxwJiYoci5zY2FsZShFKS50aWNrcyhCLzM2KS50 aWNrU2l6ZSgtSCwwKSxkMy50cj0KYW5zaXRpb24oSi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKSku Y2FsbChyKSksSi5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIHJlY3QiPQopLm9uKCJjbGljayIsZnVu Y3Rpb24oKXtNLng9M0RkMy5tb3VzZSh0aGlzKVswXSxNLmk9M0RNYXRoLnJvdW5kKE8uaW52ZXJ0 KE09Ci54KSkseC5pbmRleD0zRE0uaSxrLnN0YXRlQ2hhbmdlKHgpLG50KCl9KSx0LmRpc3BhdGNo Lm9uKCJlbGVtZW50Q2xpY2siLGZ1bj0KY3Rpb24oZSl7TS5pPTNEZS5wb2ludEluZGV4LE0ueD0z RE8oTS5pKSx4LmluZGV4PTNETS5pLGsuc3RhdGVDaGFuZ2UoeCksbnQoPQopfSkscy5kaXNwYXRj aC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxlZD0zRCFlLmRpc2FibGVk LHk9M0Q9CiFlLmRpc2FibGVkLHgucmVzY2FsZVk9M0R5LGsuc3RhdGVDaGFuZ2UoeCksRC51cGRh dGUoKX0pLGkuZGlzcGF0Y2gub24oInN0YT0KdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe3guZGlzYWJs ZWQ9M0RlLmRpc2FibGVkLGsuc3RhdGVDaGFuZ2UoeCksRC51cGRhdGUoKX0pPQosby5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhckhpZ2hsaWdodHMoKTt2 YXIgcyxmLGw9CixjPTNEW107Yi5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJ bmRleD0zRHQsIWUuZGlzYWJsZWR9KS5mb3JFYT0KY2goZnVuY3Rpb24obixyKXtmPTNEZS5pbnRl cmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WFZhbHVlLEQueCgpKSx0LmhpPQpnaGxpZ2h0 UG9pbnQocixmLCEwKTt2YXIgbz0zRG4udmFsdWVzW2ZdO2lmKHR5cGVvZiBvPTNEPTNEInVuZGVm aW5lZCIpcmV0dXI9Cm47dHlwZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYmKHM9M0RvKSx0eXBlb2Yg bD0zRD0zRCJ1bmRlZmluZWQiJiYobD0zREQueFNjYT0KbGUoKShELngoKShvLGYpKSksYy5wdXNo KHtrZXk6bi5rZXksdmFsdWU6RC55KCkobyxmKSxjb2xvcjphKG4sbi5zZXJpZXNJbmRlPQp4KX0p fSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RELnlTY2FsZSgpLmludmVydChpLm1vdXNlWSkscD0z RE1hdGguYWJzKEQueVM9CmNhbGUoKS5kb21haW4oKVswXS1ELnlTY2FsZSgpLmRvbWFpbigpWzFd KSxkPTNELjAzKnAsbT0zRGUubmVhcmVzdFZhbHVlSW5kZT0KeChjLm1hcChmdW5jdGlvbihlKXty ZXR1cm4gZS52YWx1ZX0pLGgsZCk7bSE9M0Q9M0RudWxsJiYoY1ttXS5oaWdobGlnaHQ9M0QhPQow KX12YXIgZz0zRG4udGlja0Zvcm1hdCgpKEQueCgpKHMsZiksZik7by50b29sdGlwLnBvc2l0aW9u KHtsZWZ0OmwrdS5sZWZ0LHQ9Cm9wOmkubW91c2VZK3UudG9wfSkuY2hhcnRDb250YWluZXIoQS5w YXJlbnROb2RlKS5lbmFibGVkKHYpLnZhbHVlRm9ybWF0dGVyKD0KZnVuY3Rpb24oZSx0KXtyZXR1 cm4gci50aWNrRm9ybWF0KCkoZSl9KS5kYXRhKHt2YWx1ZTpnLHNlcmllczpjfSkoKSxvLnJlbmRl PQpyR3VpZGVMaW5lKGwpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0IixmdW5jdGlv bihlKXtrLnRvb2x0aXBIaWRlKCk9Cix0LmNsZWFySGlnaGxpZ2h0cygpfSksay5vbigidG9vbHRp cFNob3ciLGZ1bmN0aW9uKGUpe3YmJl8oZSxBLnBhcmVudE5vZGUpfT0KKSxrLm9uKCJjaGFuZ2VT dGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihiLmZv ckVhPQpjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkW25dfSkseC5kaXNh YmxlZD0zRGUuZGlzYWJsZWQpLHR5cGU9Cm9mIGUuaW5kZXghPTNEInVuZGVmaW5lZCImJihNLmk9 M0RlLmluZGV4LE0ueD0zRE8oTS5pKSx4LmluZGV4PTNEZS5pbmRleCx0dD0KLmRhdGEoW01dKSks dHlwZW9mIGUucmVzY2FsZVkhPTNEInVuZGVmaW5lZCImJih5PTNEZS5yZXNjYWxlWSksRC51cGRh dGUoKX0pPQp9KSxEfWZ1bmN0aW9uIFAoZSxuKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obixyKXtp Zighbi52YWx1ZXMpcmV0dXJuIG47dmFyIGk9Cj0zRG4udmFsdWVzW2VdO2lmKGk9M0Q9M0RudWxs KXJldHVybiBuO3ZhciBzPTNEdC55KCkoaSxlKTtyZXR1cm4gczwtMC45NSYmIT0KQT8obi50ZW1w RGlzYWJsZWQ9M0QhMCxuKToobi50ZW1wRGlzYWJsZWQ9M0QhMSxuLnZhbHVlcz0zRG4udmFsdWVz Lm1hcChmdW5jPQp0aW9uKGUsbil7cmV0dXJuIGUuZGlzcGxheT0zRHt5Oih0LnkoKShlLG4pLXMp LygxK3MpfSxlfSksbil9KX12YXIgdD0zRGUubW89CmRlbHMubGluZSgpLG49M0RlLm1vZGVscy5h eGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0KPTNEZS5t b2RlbHMubGVnZW5kKCksbz0zRGUuaW50ZXJhY3RpdmVHdWlkZWxpbmUoKSx1PTNEe3RvcDozMCxy aWdodDozMCxib3R0PQpvbTo1MCxsZWZ0OjYwfSxhPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxm PTNEbnVsbCxsPTNEbnVsbCxjPTNEITAsaD0zRCEwLHA9Cj0zRCEwLGQ9M0QhMSx2PTNEITAsbT0z RCEwLGc9M0QhMSx5PTNEITAsYj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz0KPiIr ZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx3LEUsUz0zRHQuaWQoKSx4PTNEe2lu ZGV4OjAscmVzY2FsZVk6PQp5fSxUPTNEbnVsbCxOPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsQz0z RGZ1bmN0aW9uKGUpe3JldHVybiBlLmF2ZXJhZ2V9LGs9M0Q9CmQzLmRpc3BhdGNoKCJ0b29sdGlw U2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEw9M0QwLD0K QT0zRCExO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWVudChkPyJyaWdo dCI6ImxlZnQiKSxzLnVwZGF0PQplU3RhdGUoITEpO3ZhciBPPTNEZDMuc2NhbGUubGluZWFyKCks TT0zRHtpOjAseDowfSxfPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0KPTNEaS5wb3NbMF0rKHMub2Zm c2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT0zRG4udGlja0Zvcm1h PQp0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50aWNrRm9ybWF0KCkodC55 KCkoaS5wb2ludCxpLnBvaW50SW49CmRleCkpLGw9M0RiKGkuc2VyaWVzLmtleSxhLGYsaSxEKTtl LnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51bGwsbnVsbCxzKX07cmV0dT0Kcm4gdC5kaXNwYXRjaC5v bigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1sw XSt1PQoubGVmdCxlLnBvc1sxXSt1LnRvcF0say50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW91dC50b289Cmx0aXAiLGZ1bmN0aW9uKGUpe2sudG9vbHRpcEhpZGUo ZSl9KSxrLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXt2JiZlLnRvbz0KbHRpcC5jbGVhbnVw KCl9KSxELmRpc3BhdGNoPTNEayxELmxpbmVzPTNEdCxELmxlZ2VuZD0zRGksRC54QXhpcz0zRG4s RC55QXhpPQpzPTNEcixELmludGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJlYmluZChELHQsImRlZmlu ZWQiLCJpc0FyZWEiLCJ4IiwieSIsInhTY2E9CmxlIiwieVNjYWxlIiwic2l6ZSIsInhEb21haW4i LCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIj0KLCJpbnRlcmFj dGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwiaWQiKSxELm9wdGlv bnM9M0RlLnV0PQppbHMub3B0aW9uc0Z1bmMuYmluZChEKSxELm1hcmdpbj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnQ9Cm9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRl ZmluZWQiP2UudG9wOnUudG9wLHUucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidT0KbmRlZmlu ZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZp bmVkIj9lLmJvdHRvPQptOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVm aW5lZCI/ZS5sZWZ0OnUubGVmdCxEKTp1fSxELndpZHQ9Cmg9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsRCk6Zn0sRC5oZWlnaHQ9M0RmdW5jdGlvbihlKT0Ke3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxEKTpsfSxELmNvbG9yPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oYT0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xv cihhKSxEKTphfSxELnJlc2NhbGVZPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oeT0zRGUsRCk6eX0sRC5zaG93Q29udHJvbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0K cmd1bWVudHMubGVuZ3RoPyhtPTNEZSxEKTptfSxELnVzZUludGVyYWN0aXZlR3VpZGVsaW5lPTNE ZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsZT0zRD0zRD0zRCEw JiYoRC5pbnRlcmFjdGl2ZSghMSksRC51c2VWb3Jvbm9pKCExKSk9CixEKTpnfSxELnNob3dMZWdl bmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsRCk6Y30sRC5z aD0Kb3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxE KTpofSxELnNob3dZQXhpcz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHA9M0RlLEQpOnB9LEQucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZD0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksRCk6ZH0sRC50 b29sdD0KaXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEQp OnZ9LEQudG9vbHRpcENvbnRlbnQ9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhiPTNEZSxEKTpifSxELnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRz Lmxlbmd0aD8oeD0zRGUsRCk6eH0sRC5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbj0KdHMubGVuZ3RoPyhUPTNEZSxEKTpUfSxELm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPTNEPQplLEQpOk59LEQuYXZlcmFnZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPTNEZSxEKTpDfSxELnRyYW49CnNpdGlvbkR1 cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9M0RlLEQpOkx9 LEQubm9FcnJvcj0KQ2hlY2s9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o QT0zRGUsRCk6QX0sRH0sZS5tb2RlbHMuZGlzY3JlPQp0ZUJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rp b24gRShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNEbi10LmxlZnQ9Ci10LnJp Z2h0LEU9M0RyLXQudG9wLXQuYm90dG9tLFM9M0RkMy5zZWxlY3QodGhpcyk7ZS5mb3JFYWNoKGZ1 bmN0aW9uKGUsdCl7ZT0KLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0p fSk7dmFyIFQ9M0RwJiZkP1tdOmUubWFwKGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUudmFsdWVzLm1h cChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5MDplLnkwfX0pfSk9Cjtz LmRvbWFpbihwfHxkMy5tZXJnZShUKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yYW5n ZUJhbmRzKHZ8fFswLGldLD0KLjEpLG8uZG9tYWluKGR8fGQzLmV4dGVudChkMy5tZXJnZShUKS5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdChmPQopKSksYz9vLnJhbmdlKG18fFtF LShvLmRvbWFpbigpWzBdPDA/MTI6MCksby5kb21haW4oKVsxXT4wPzEyOjBdKTpvLnJhbmdlKG09 Cnx8W0UsMF0pLGI9M0RifHxzLHc9M0R3fHxvLmNvcHkoKS5yYW5nZShbbygwKSxvKDApXSk7dmFy IE49M0RTLnNlbGVjdEFsbCgiZz0KLm52LXdyYXAubnYtZGlzY3JldGViYXIiKS5kYXRhKFtlXSks Qz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnZkMyBudi13cmFwIG52 LWRpc2NyZXRlYmFyIiksaz0zREMuYXBwZW5kKCJnIiksTD0zRE4uc2VsZWN0KCJnIik7ay5hcHBl bmQ9CigiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIit0LmxlZnQrIiwiKz0KdC50b3ArIikiKTt2YXIgQT0zRE4uc2VsZWN0KCIubnYt Z3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0PQppb24oZSl7cmV0dXJu IGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO0EuZW50ZXIoKS5hcHBlbmQoImciKS5zdHls ZSgic3Q9CnJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksQS5l eGl0KCkuc3R5bGUoInN0cm9rZS1vcGFjaT0KdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHki LDFlLTYpLnJlbW92ZSgpLEEuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7PQpyZXR1cm4ibnYt Z3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4g ZS5ob3Zlcn09CiksQS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNp dHkiLC43NSk7dmFyIE89M0RBLnNlbGVjdEFsbD0KKCJnLm52LWJhciIpLmRhdGEoZnVuY3Rpb24o ZSl7cmV0dXJuIGUudmFsdWVzfSk7Ty5leGl0KCkucmVtb3ZlKCk7dmFyIE09M0RPPQouZW50ZXIo KS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idHJh bnNsYXRlKCIrKHM9Cih1KGUsdCkpK3MucmFuZ2VCYW5kKCkqLjA1KSsiLCAiK28oMCkrIikifSku b24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtkMz0KLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJo b3ZlciIsITApLGcuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4pLHBvaW50OnQsPQpzZXJp ZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zZXJpZXMrLjUp L2UubGVuZ3RoLG8oYSg9CnQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMs ZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdD0KaW9uKHQsbil7ZDMuc2VsZWN0KHRo aXMpLmNsYXNzZWQoImhvdmVyIiwhMSksZy5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmEodCxuPQop LHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNl cmllcyxlOmQzLmV2ZW50fSk9Cn0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXtnLmVsZW1lbnRD bGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdD0KLnNlcmllc10scG9zOltzKHUo dCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9p PQpudEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0 b3BQcm9wYWdhdGlvbigpfSkub249CigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbil7Zy5lbGVtZW50 RGJsQ2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplWz0KdC5zZXJpZXNdLHBvczpb cyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSld LHBvPQppbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVu dC5zdG9wUHJvcGFnYXRpb24oKX0pO009Ci5hcHBlbmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLDAp LmF0dHIoIndpZHRoIixzLnJhbmdlQmFuZCgpKi45L2UubGVuZ3RoKSxjPz0KKE0uYXBwZW5kKCJ0 ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxPLnNlbGVjdCgidGV4dCIpLnRleHQo ZnVuY3RpPQpvbihlLHQpe3JldHVybiBoKGEoZSx0KSl9KS5hdHRyKCJ4IixzLnJhbmdlQmFuZCgp Ki45LzIpLmF0dHIoInkiLGZ1bmN0aW9uKGU9Cix0KXtyZXR1cm4gYShlLHQpPDA/byhhKGUsdCkp LW8oMCkrMTI6LTR9KSk6Ty5zZWxlY3RBbGwoInRleHQiKS5yZW1vdmUoKSxPLj0KYXR0cigiY2xh c3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1i YXIgcG9zaXRpPQp2ZSJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xv cnx8bChlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnU9Cm5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9y fHxsKGUsdCl9KS5zZWxlY3QoInJlY3QiKS5hdHRyKCJjbGFzcyIseSkuYXR0cigidz0KaWR0aCIs cy5yYW5nZUJhbmQoKSouOS9lLmxlbmd0aCksTy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUs dCl7dmFyIG49M0RzPQoodShlLHQpKStzLnJhbmdlQmFuZCgpKi4wNSxyPTNEYShlLHQpPDA/bygw KTpvKDApLW8oYShlLHQpKTwxP28oMCktMTpvKGEoZSw9CnQpKTtyZXR1cm4idHJhbnNsYXRlKCIr bisiLCAiK3IrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixmdW5jdGlvbj0KKGUs dCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKG8oYShlLHQpKS1vKGQmJmRbMF18fDApKXx8MSl9 KSxiPTNEcy5jb3B5KCksPQp3PTNEby5jb3B5KCl9KSxFfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAs Ym90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0KPTNETWF0aC5mbG9vcihNYXRoLnJh bmRvbSgpKjFlNCkscz0zRGQzLnNjYWxlLm9yZGluYWwoKSxvPTNEZDMuc2NhbGUubGluZWFyPQoo KSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9 LGY9M0RbMF0sbD0zRGUudXQ9Cmlscy5kZWZhdWx0Q29sb3IoKSxjPTNEITEsaD0zRGQzLmZvcm1h dCgiLC4yZiIpLHAsZCx2LG0sZz0zRGQzLmRpc3BhdGNoKCJjaD0KYXJ0Q2xpY2siLCJlbGVtZW50 Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNl PQpvdXQiKSx5PTNEImRpc2NyZXRlQmFyIixiLHc7cmV0dXJuIEUuZGlzcGF0Y2g9M0RnLEUub3B0 aW9ucz0zRGUudXRpbHMub3B0aW89Cm5zRnVuYy5iaW5kKEUpLEUueD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxFKTp1fSxFLnk9Cj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxFKTphfSxFLm1hcmdpbj0zRGZ1bmN0aW9uKGUp ez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRl ZmluZWQiP2UudG9wOnQudG9wLHQuPQpyaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmlu ZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmI9Cm90dG9tIT0zRCJ1bmRl ZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVm aW5lZD0KIj9lLmxlZnQ6dC5sZWZ0LEUpOnR9LEUud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8obj0zRGUsPQpFKTpufSxFLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxFKTpyfSxFLnhTY2FsZT0KPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEUpOnN9LEUueVNjYWxlPTNEZnVuY3Rp b24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsRSk6b30sRS54RG9tYWluPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8ocD0zRGUsRSk6cH0sRS55RG9t YWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Cj0zRGUsRSk6ZH0s RS54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsRSk6 dn0sRS55Uj0KYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNE ZSxFKTptfSxFLmZvcmNlWT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0RlLEUpOmZ9LEUuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW09CmVudHMubGVu Z3RoPyhsPTNEZS51dGlscy5nZXRDb2xvcih0KSxFKTpsfSxFLmlkPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oaT0zRGUsRSk6aX0sRS5zaG93VmFsdWVzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYz0zRGUsRSk6Y30sRS52YWx1ZUZvcm1h dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxFKTo9Cmh9LEUu cmVjdENsYXNzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEUp Onl9LEV9LGUubW9kZT0KbHMuZGlzY3JldGVCYXJDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24g dyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhPQpyIHU9M0RkMy5zZWxlY3QodGhpcyks cD0zRHRoaXMseT0zRChzfHxwYXJzZUludCh1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmw9CmVm dC1pLnJpZ2h0LEU9M0Qob3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWkudG9w LWkuYm90dG9tO3cudXBkYT0KdGU9M0RmdW5jdGlvbigpe2cuYmVmb3JlVXBkYXRlKCksdS5jYWxs KHcpfSx3LmNvbnRhaW5lcj0zRHRoaXM7aWYoIWV8fCFlLmxlPQpuZ3RofHwhZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIFM9M0R1LnNlbGU9 CmN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbbV0pO3JldHVybiBTLmVudGVyKCkuYXBwZW5kKCJ0 ZXh0IikuYXR0cigiY2xhc3MiLD0KIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIp LnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLFMuYXR0cigiPQp4IixpLmxlZnQreS8yKS5h dHRyKCJ5IixpLnRvcCtFLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx3fXUuc2VsZWN0 QWw9CmwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxkPTNEdC54U2NhbGUoKSx2PTNEdC55U2NhbGUo KS5jbGFtcCghMCk7dmFyIFQ9M0R1Lj0Kc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtZGlzY3JldGVC YXJXaXRoQXhlcyIpLmRhdGEoW2VdKSxOPTNEVC5lbnRlcigpLmFwcGVuPQpkKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGVCYXJXaXRoQXhlcyIpLmFwcGVuZCgiZyIp LEM9M0Q9Ck4uYXBwZW5kKCJkZWZzIiksaz0zRFQuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcz0KIiksTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LXkgbnYtYXhpcyIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtPQp6ZXJvTGluZSIp LmFwcGVuZCgibGluZSIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIp LGsuYXR0cig9CiJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmxlZnQrIiwiK2kudG9wKyIpIiks bCYmay5zZWxlY3QoIi5udi15Lm52LWF4aXMiKT0KLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK3krIiwwKSIpLHQud2lkdGgoeSkuaGVpZ2h0KEUpO3ZhciBMPTNEay5zZWxlPQpjdCgiLm52 LWJhcnNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9 KSk7TC5jYWxsKHQ9CiksQy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi14LWxhYmVs LWNsaXAtIit0LmlkKCkpLmFwcGVuZCgicmVjdCIpLD0Kay5zZWxlY3QoIiNudi14LWxhYmVsLWNs aXAtIit0LmlkKCkrIiByZWN0IikuYXR0cigid2lkdGgiLGQucmFuZ2VCYW5kKCkqKGM/PQoyOjEp KS5hdHRyKCJoZWlnaHQiLDE2KS5hdHRyKCJ4IiwtZC5yYW5nZUJhbmQoKS8oYz8xOjIpKTtpZihh KXtuLnNjYWxlKGQpLnQ9Cmlja3MoeS8xMDApLnRpY2tTaXplKC1FLDApLGsuc2VsZWN0KCIubnYt eC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbj0Kc2xhdGUoMCwiKyh2LnJhbmdlKClb MF0rKHQuc2hvd1ZhbHVlcygpJiZ2LmRvbWFpbigpWzBdPDA/MTY6MCkpKyIpIiksay5zZWxlPQpj dCgiLm52LXgubnYtYXhpcyIpLmNhbGwobik7dmFyIEE9M0RrLnNlbGVjdCgiLm52LXgubnYtYXhp cyIpLnNlbGVjdEFsbCgiZyI9Cik7YyYmQS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idHJhbnNsYXRlKD0KMCwiKyhuJTI9M0Q9M0QwPyI1 IjoiMTciKSsiKSJ9KX1mJiYoci5zY2FsZSh2KS50aWNrcyhFLzM2KS50aWNrU2l6ZSgteSwwKSxr PQouc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksay5zZWxlY3QoIi5udi16ZXJvTGlu ZSBsaW5lIikuYXR0cigieDEiLDA9CikuYXR0cigieDIiLHkpLmF0dHIoInkxIix2KDApKS5hdHRy KCJ5MiIsdigwKSksZy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKD0KZSl7aCYmYihlLHAucGFy ZW50Tm9kZSl9KX0pLHd9dmFyIHQ9M0RlLm1vZGVscy5kaXNjcmV0ZUJhcigpLG49M0RlLm1vZGVs cy5hPQp4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0R7dG9wOjE1LHJpZ2h0OjEwLGJvdHRv bTo1MCxsZWZ0OjYwfSxzPTNEbnVsbCw9Cm89M0RudWxsLHU9M0RlLnV0aWxzLmdldENvbG9yKCks YT0zRCEwLGY9M0QhMCxsPTNEITEsYz0zRCExLGg9M0QhMCxwPTNEZnVuYz0KdGlvbihlLHQsbixy LGkpe3JldHVybiI8aDM+Iit0KyI8L2gzPiIrIjxwPiIrbisiPC9wPiJ9LGQsdixtPTNEIk5vIERh dGEgQXZhPQppbGFibGUuIixnPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhp ZGUiLCJiZWZvcmVVcGRhdGUiKSx5PTNEMDs9Cm4ub3JpZW50KCJib3R0b20iKS5oaWdobGlnaHRa ZXJvKCExKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpez0KcmV0dXJuIGV9 KSxyLm9yaWVudChsPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLC4xZiIp KTt2YXIgYj0KPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8 fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUPQpvcHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQu eCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQ9Ci55KCkoaS5w b2ludCxpLnBvaW50SW5kZXgpKSxsPTNEcChpLnNlcmllcy5rZXksYSxmLGksdyk7ZS50b29sdGlw LnNob3coW28sdT0KXSxsLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9O3JldHVybiB0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0PQppcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0Rb ZS5wb3NbMF0raS5sZWZ0LGUucG9zWzFdK2kudG9wXSxnLnRvb2x0aXBTaG93KGUpfSk9Cix0LmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Zy50b29sdGlw SGlkZShlKX0pLGcubz0KbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7aCYmZS50b29sdGlwLmNs ZWFudXAoKX0pLHcuZGlzcGF0Y2g9M0RnLHcuZGlzY3JlPQp0ZWJhcj0zRHQsdy54QXhpcz0zRG4s dy55QXhpcz0zRHIsZDMucmViaW5kKHcsdCwieCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiI9Ciwi eFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaWQiLCJzaG93VmFsdWVzIiwidmFs dWVGb3JtYXQiKSx3Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZCh3KSx3Lm1h cmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KGkudG9wPTNEdHlw ZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGkucmlnaHQ9M0R0eXBlb2YgZS49 CnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdodCxpLmJvdHRvbT0zRHR5cGVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbj0KZWQiP2UuYm90dG9tOmkuYm90dG9tLGkubGVmdD0zRHR5cGVv ZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCx3PQopOml9LHcud2lkdGg9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdyk6c30sdy5oZWlnaHQ9 M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx3KTpvfSx3LmNv bG9yPTNEZnVuY3Rpb24obil7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUudXRpbHMu Z2V0Q29sb3IobiksdC5jb2xvcih1KSx3KTp1fSx3LnNob3dYQXhpcz0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9LHcuc2hvd1lBeGlzPTNEZnVuY3Rp b24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsdyk6Zn0sdy5yaWdodEFsaWdu WUF4aXM9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxyLm9y aWVudChlPyJyaWdodCI6ImxlZnQiKSx3KTpsfSx3LnN0YWdnZXJMYWJlbD0Kcz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx3KTpjfSx3LnRvb2x0aXBzPTNEZnVu Y3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsdyk6aH0sdy50b29sdGlw Q29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHcp OnB9LHcubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8obT0z RGUsdyk6bX0sdy50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0PQpoPyh5PTNEZSx3KTp5fSx3fSxlLm1vZGVscy5kaXN0cmlidXRpb249M0RmdW5j dGlvbigpe2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGU9Ci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPTNE bi0oaT0zRD0zRD0zRCJ4Ij90LmxlZnQrdC5yaWdodDp0LnRvcCt0LmJvdHRvbSksbD0KPTNEaT0z RD0zRCJ4Ij8ieSI6IngiLGM9M0RkMy5zZWxlY3QodGhpcyk7Zj0zRGZ8fHU7dmFyIGg9M0RjLnNl bGVjdEFsbCgiZy5uPQp2LWRpc3RyaWJ1dGlvbiIpLmRhdGEoW2VdKSxwPTNEaC5lbnRlcigpLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi09CmRpc3RyaWJ1dGlvbiIpLGQ9M0RwLmFw cGVuZCgiZyIpLHY9M0RoLnNlbGVjdCgiZyIpO2guYXR0cigidHJhbnNmb3JtIiwidHJhbj0Kc2xh dGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIG09M0R2LnNlbGVjdEFsbCgiZy5udi1kaXN0 IikuZGF0YShmdW5jdGlvPQpuKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9 KTttLmVudGVyKCkuYXBwZW5kKCJnIiksbS5hdHRyKCJjbGE9CnNzIixmdW5jdGlvbihlLHQpe3Jl dHVybiJudi1kaXN0IG52LXNlcmllcy0iK3R9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLD0K dCl7cmV0dXJuIG8oZSx0KX0pO3ZhciBnPTNEbS5zZWxlY3RBbGwoImxpbmUubnYtZGlzdCIraSku ZGF0YShmdW5jdGlvbihlKXtyPQpldHVybiBlLnZhbHVlc30pO2cuZW50ZXIoKS5hcHBlbmQoImxp bmUiKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGY9CihzKGUsdCkpfSkuYXR0cihp KyIyIixmdW5jdGlvbihlLHQpe3JldHVybiBmKHMoZSx0KSl9KSxtLmV4aXQoKS5zZWxlY3RBbGwo Ij0KbGluZS5udi1kaXN0IitpKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhl LHQpKX0pLmF0dHIoaSsiMiIsZnVuPQpjdGlvbihlLHQpe3JldHVybiB1KHMoZSx0KSl9KS5zdHls ZSgic3Ryb2tlLW9wYWNpdHkiLDApLnJlbW92ZSgpLGcuYXR0cigiY2w9CmFzcyIsZnVuY3Rpb24o ZSx0KXtyZXR1cm4ibnYtZGlzdCIraSsiIG52LWRpc3QiK2krIi0iK3R9KS5hdHRyKGwrIjEiLDAp LmF0dD0KcihsKyIyIixyKSxnLmF0dHIoaSsiMSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUs dCkpfSkuYXR0cihpKyIyIixmdW5jdGlvPQpuKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLGY9M0R1 LmNvcHkoKX0pLGx9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCw9CmxlZnQ6MH0sbj0z RDQwMCxyPTNEOCxpPTNEIngiLHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZVtpXX0sbz0zRGUudXRp bHMuZGVmYT0KdWx0Q29sb3IoKSx1PTNEZDMuc2NhbGUubGluZWFyKCksYSxmO3JldHVybiBsLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jPQouYmluZChsKSxsLm1hcmdpbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnQ9Cm9wIT0zRCJ1 bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZz0KaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlPQpmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVu ZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxsKTp0fSxsLndpZHRoPTNEZnVuY3Rpb24oZSk9CntyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsbCk6bn0sbC5heGlzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oaT0zRGUsbCk6aX0sbC5zaXplPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGwpPQo6cn0sbC5nZXREYXRhPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RkMy5mdW5jdG9yKGUpLGwpOnM9Cn0s bC5zY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxsKTp1 fSxsLmNvbG9yPTNEZnVuYz0KdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUu dXRpbHMuZ2V0Q29sb3IodCksbCk6b30sbH0sZS5tb2RlbHMuPQpoaXN0b3JpY2FsQmFyQ2hhcnQ9 M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihkKXt2YXI9 CiBFPTNEZDMuc2VsZWN0KHRoaXMpLFQ9M0R0aGlzLE49M0QodXx8cGFyc2VJbnQoRS5zdHlsZSgi d2lkdGgiKSl8fDk2MCktcy5sZT0KZnQtcy5yaWdodCxDPTNEKGF8fHBhcnNlSW50KEUuc3R5bGUo ImhlaWdodCIpKXx8NDAwKS1zLnRvcC1zLmJvdHRvbTt4LnVwZGF0PQplPTNEZnVuY3Rpb24oKXtF LmNhbGwoeCl9LHguY29udGFpbmVyPTNEdGhpcyxnLmRpc2FibGVkPTNEZC5tYXAoZnVuY3Rpb24o ZSk9CntyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheSl7dmFyIGs7eT0zRHt9O2ZvcihrIGluIGcp Z1trXWluc3RhbmNlb2YgQXJyYXk/eT0KW2tdPTNEZ1trXS5zbGljZSgwKTp5W2tdPTNEZ1trXX1p ZighZHx8IWQubGVuZ3RofHwhZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0PQp1cm4gZS52YWx1ZXMu bGVuZ3RofSkubGVuZ3RoKXt2YXIgTD0zREUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShb Yl0pO3I9CmV0dXJuIEwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMg bnYtbm9EYXRhIikuYXR0cigiZHkiLCItLj0KN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlk ZGxlIiksTC5hdHRyKCJ4IixzLmxlZnQrTi8yKS5hdHRyKCJ5IixzLnRvcCtDPQovMikudGV4dChm dW5jdGlvbihlKXtyZXR1cm4gZX0pLHh9RS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUo KSx2PTNEdC49CnhTY2FsZSgpLG09M0R0LnlTY2FsZSgpO3ZhciBBPTNERS5zZWxlY3RBbGwoImcu bnYtd3JhcC5udi1oaXN0b3JpY2FsQmFyQ2hhcj0KdCIpLmRhdGEoW2RdKSxPPTNEQS5lbnRlcigp LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWhpc3RvPQpyaWNhbEJh ckNoYXJ0IikuYXBwZW5kKCJnIiksTT0zREEuc2VsZWN0KCJnIik7Ty5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm49CnYteCBudi1heGlzIiksTy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXkgbnYtYXhpcyIpLE8uYXBwZW5kKCJnIikuYXR0cj0KKCJjbGFzcyIsIm52LWJhcnNXcmFwIiks Ty5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxmJiYoaS53PQppZHRo KE4pLE0uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGQpLmNhbGwoaSkscy50b3AhPTNE aS5oZWlnaHQoKSYmKHM9Ci50b3A9M0RpLmhlaWdodCgpLEM9M0QoYXx8cGFyc2VJbnQoRS5zdHls ZSgiaGVpZ2h0IikpfHw0MDApLXMudG9wLXMuYm90dG9tKT0KLEEuc2VsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1zLnRvcCsiKSIpKSxBPQou YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5sZWZ0KyIsIitzLnRvcCsiKSIpLGgmJk0u c2VsZWN0KCIubnYteS5udi09CmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitO KyIsMCkiKSx0LndpZHRoKE4pLmhlaWdodChDKS5jb2xvcihkLj0KbWFwKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuY29sb3J8fG8oZSx0KX0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFkW3Rd PQouZGlzYWJsZWR9KSk7dmFyIF89M0RNLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZC5m aWx0ZXIoZnVuY3Rpb24oZSl7cmU9CnR1cm4hZS5kaXNhYmxlZH0pKTtfLmNhbGwodCksbCYmKG4u c2NhbGUodikudGlja1NpemUoLUMsMCksTS5zZWxlY3QoIi5udi14Lj0KbnYtYXhpcyIpLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrbS5yYW5nZSgpWzBdKyIpIiksTS5zZWxlY3QoIi5u di14PQoubnYtYXhpcyIpLmNhbGwobikpLGMmJihyLnNjYWxlKG0pLnRpY2tzKEMvMzYpLnRpY2tT aXplKC1OLDApLE0uc2VsZWN0KCIubnY9Ci15Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNo Lm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPQo9M0QhdC5kaXNhYmxl ZCxkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aHx8ZC5tYXAo ZnVuY3Q9CmlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0zRCExLEEuc2VsZWN0QWxsKCIubnYtc2Vy aWVzIikuY2xhc3NlZCgiZGlzYWJsZWQiLD0KITEpLGV9KSxnLmRpc2FibGVkPTNEZC5tYXAoZnVu Y3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksdy5zdGF0ZUNoYW5nZShnPQopLGUuY2FsbCh4 KX0pLGkuZGlzcGF0Y2gub24oImxlZ2VuZERibGNsaWNrIixmdW5jdGlvbihlKXtkLmZvckVhY2go ZnVuY3Rpb249CihlKXtlLmRpc2FibGVkPTNEITB9KSxlLmRpc2FibGVkPTNEITEsZy5kaXNhYmxl ZD0zRGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybj0KISFlLmRpc2FibGVkfSksdy5zdGF0ZUNoYW5n ZShnKSx4LnVwZGF0ZSgpfSksdy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpPQp7cCYmUyhl LFQucGFyZW50Tm9kZSl9KSx3Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUu ZGlzYWJsZWQhPQo9M0QidW5kZWZpbmVkIiYmKGQuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGlz YWJsZWQ9M0RlLmRpc2FibGVkW25dfSksZy5kaXM9CmFibGVkPTNEZS5kaXNhYmxlZCkseC51cGRh dGUoKX0pfSkseH12YXIgdD0zRGUubW9kZWxzLmhpc3RvcmljYWxCYXIoKSxuPTNEZT0KLm1vZGVs cy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRHt0 b3A6MzAscmlnaHQ6PQo5MCxib3R0b206NTAsbGVmdDo5MH0sbz0zRGUudXRpbHMuZGVmYXVsdENv bG9yKCksdT0zRG51bGwsYT0zRG51bGwsZj0zRCExLGw9Cj0zRCEwLGM9M0QhMCxoPTNEITEscD0z RCEwLGQ9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIj0KPHA+ IituKyIgYXQgIit0KyI8L3A+In0sdixtLGc9M0R7fSx5PTNEbnVsbCxiPTNEIk5vIERhdGEgQXZh aWxhYmxlLiIsdz0zRGQzPQouZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJz dGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksRT0zRDA7bi49Cm9yaWVudCgiYm90dG9tIikudGlj a1BhZGRpbmcoNyksci5vcmllbnQoaD8icmlnaHQiOiJsZWZ0Iik7dmFyIFM9M0RmdW5jdGlvbj0K KGkscyl7aWYocyl7dmFyIG89M0RkMy5zZWxlY3Qocykuc2VsZWN0KCJzdmciKSx1PTNEby5ub2Rl KCk/by5hdHRyKCJ2aWV3Qm94PQoiKTpudWxsO2lmKHUpe3U9M0R1LnNwbGl0KCIgIik7dmFyIGE9 M0RwYXJzZUludChvLnN0eWxlKCJ3aWR0aCIpKS91WzJdO2kucG89CnNbMF09M0RpLnBvc1swXSph LGkucG9zWzFdPTNEaS5wb3NbMV0qYX19dmFyIGY9M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHww KT0KLGw9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGM9M0RuLnRpY2tGb3JtYXQoKSh0Lngo KShpLnBvaW50LGkucG9pbnRJbmRlPQp4KSksaD0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9p bnQsaS5wb2ludEluZGV4KSkscD0zRGQoaS5zZXJpZXMua2V5LGMsaCw9CmkseCk7ZS50b29sdGlw LnNob3coW2YsbF0scCxudWxsLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91cz0KZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcy5sZWZ0 LGUucG9zWzFdK3MudG9wXSx3LnRvb2x0PQppcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7dy50b29sdGlwSGk9CmRlKGUpfSksdy5v bigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7cCYmZS50b29sdGlwLmNsZWFudXAoKX0pLHguZGlz cGF0Y2g9Cj0zRHcseC5iYXJzPTNEdCx4LmxlZ2VuZD0zRGkseC54QXhpcz0zRG4seC55QXhpcz0z RHIsZDMucmViaW5kKHgsdCwiZGVmaW5lZD0KIiwiaXNBcmVhIiwieCIsInkiLCJzaXplIiwieFNj YWxlIiwieVNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5PQpSYW5nZSIsImZv cmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsImlk IiwiaW50ZXI9CnBvbGF0ZSIsImhpZ2hsaWdodFBvaW50IiwiY2xlYXJIaWdobGlnaHRzIiwiaW50 ZXJhY3RpdmUiKSx4Lm9wdGlvbnM9M0RlLnV0aT0KbHMub3B0aW9uc0Z1bmMuYmluZCh4KSx4Lm1h cmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnRvPQpwPTNEdHlw ZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnMudG9wLHMucmlnaHQ9M0R0eXBlb2YgZS5y aWdodCE9M0QidW49CmRlZmluZWQiP2UucmlnaHQ6cy5yaWdodCxzLmJvdHRvbT0zRHR5cGVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbT0KOnMuYm90dG9tLHMubGVmdD0zRHR5cGVv ZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnMubGVmdCx4KTpzfSx4LndpZHRoPQo9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUseCk6dX0seC5oZWlnaHQ9 M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSx4KTphfSx4LmNv bG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8obz0zRGUudXRpbHMu Z2V0Q29sb3IodCksaS5jb2xvcihvKSx4KTpvfSx4LnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlPQop e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSx4KTpmfSx4LnNob3dYQXhpcz0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KGw9M0RlLHgpOmx9LHguc2hvd1lBeGlz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8oYz0zRGUseCk6Y30seC5y aWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0K PTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSx4KTpofSx4LnRvb2x0aXBzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8ocD0zRGUseCk6cH0seC50b29sdGlwQ29u dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KGQ9M0RlLHgpOmR9 LHguc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUseCk6 Zz0KfSx4LmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh5PTNEZSx4KTp5fSx4Lm5vRGF0PQphPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGI9M0RlLHgpOmJ9LHgudHJhbnNpdGlvbkR1cmF0aW9uPQo9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUseCk6RX0seH0sZS5tb2RlbHMuaW5kZW50ZWRU cmU9CmU9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihl KXtmdW5jdGlvbiBrKGUsdCxuKXtkMz0KLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2lmKGQzLmV2 ZW50LnNoaWZ0S2V5JiYhbilyZXR1cm4gZDMuZXZlbnQuc2hpZnRLZXk9Cj0zRCExLGUudmFsdWVz JiZlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhlLnZhbHVlc3x8ZS5fdmFsdWVzKSYmayhl LDAsIT0KMCl9KSwhMDtpZighTyhlKSlyZXR1cm4hMDtlLnZhbHVlcz8oZS5fdmFsdWVzPTNEZS52 YWx1ZXMsZS52YWx1ZXM9M0RudWxsKTooPQplLnZhbHVlcz0zRGUuX3ZhbHVlcyxlLl92YWx1ZXM9 M0RudWxsKSxnLnVwZGF0ZSgpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUuX3Y9CmFsdWVzJiZlLl92 YWx1ZXMubGVuZ3RoP2g6ZS52YWx1ZXMmJmUudmFsdWVzLmxlbmd0aD9wOiIifWZ1bmN0aW9uIEEo ZSl7cmV0dT0Kcm4gZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RofWZ1bmN0aW9uIE8oZSl7dmFy IHQ9M0RlLnZhbHVlc3x8ZS5fdmFsdWVzO3JlPQp0dXJuIHQmJnQubGVuZ3RofXZhciB0PTNEMSxu PTNEZDMuc2VsZWN0KHRoaXMpLGk9M0RkMy5sYXlvdXQudHJlZSgpLmNoaWxkcmU9Cm4oZnVuY3Rp b24oZSl7cmV0dXJuIGUudmFsdWVzfSkuc2l6ZShbcixmXSk7Zy51cGRhdGU9M0RmdW5jdGlvbigp e24uY2FsbChnKT0KfSxlWzBdfHwoZVswXT0zRHtrZXk6YX0pO3ZhciBzPTNEaS5ub2RlcyhlWzBd KSx5PTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsPQpsKCJkaXYiKS5kYXRhKFtbc11dKSxiPTNE eS5lbnRlcigpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXA9CiBudi1p bmRlbnRlZHRyZWUiKSx3PTNEYi5hcHBlbmQoInRhYmxlIiksRT0zRHkuc2VsZWN0KCJ0YWJsZSIp LmF0dHIoIndpZHRoIj0KLCIxMDAlIikuYXR0cigiY2xhc3MiLGMpO2lmKG8pe3ZhciBTPTNEdy5h cHBlbmQoInRoZWFkIikseD0zRFMuYXBwZW5kKCJ0ciIpPQo7bC5mb3JFYWNoKGZ1bmN0aW9uKGUp e3guYXBwZW5kKCJ0aCIpLmF0dHIoIndpZHRoIixlLndpZHRoP2Uud2lkdGg6IjEwJSIpLnM9CnR5 bGUoInRleHQtYWxpZ24iLGUudHlwZT0zRD0zRCJudW1lcmljIj8icmlnaHQiOiJsZWZ0IikuYXBw ZW5kKCJzcGFuIikudGV4dD0KKGUubGFiZWwpfSl9dmFyIFQ9M0RFLnNlbGVjdEFsbCgidGJvZHki KS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7VC5lbnRlPQpyKCkuYXBwZW5kKCJ0Ym9keSIp LHQ9M0RkMy5tYXgocyxmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXB0aH0pLGkuc2l6ZShbcix0KmY9 Cl0pO3ZhciBOPTNEVC5zZWxlY3RBbGwoInRyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS5m aWx0ZXIoZnVuY3Rpb24oZSl7cj0KZXR1cm4gdSYmIWUuY2hpbGRyZW4/dShlKTohMH0pfSxmdW5j dGlvbihlLHQpe3JldHVybiBlLmlkfHxlLmlkfHwrK219KTtOLmV4PQppdCgpLnJlbW92ZSgpLE4u c2VsZWN0KCJpbWcubnYtdHJlZWljb24iKS5hdHRyKCJzcmMiLEwpLmNsYXNzZWQoImZvbGRlZCIs QSk9Cjt2YXIgQz0zRE4uZW50ZXIoKS5hcHBlbmQoInRyIik7bC5mb3JFYWNoKGZ1bmN0aW9uKGUs dCl7dmFyIG49M0RDLmFwcGVuZCgidD0KZCIpLnN0eWxlKCJwYWRkaW5nLWxlZnQiLGZ1bmN0aW9u KGUpe3JldHVybih0PzA6ZS5kZXB0aCpmKzEyKyhMKGUpPzA6MTYpKSsiPQpweCJ9LCJpbXBvcnRh bnQiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50eXBlPTNEPTNEIm51bWVyaWMiPyJyaWdodCI6Imxl ZnQiKTs9CnQ9M0Q9M0QwJiZuLmFwcGVuZCgiaW1nIikuY2xhc3NlZCgibnYtdHJlZWljb24iLCEw KS5jbGFzc2VkKCJudi1mb2xkZWQiLEEpLj0KYXR0cigic3JjIixMKS5zdHlsZSgid2lkdGgiLCIx NHB4Iikuc3R5bGUoImhlaWdodCIsIjE0cHgiKS5zdHlsZSgicGFkZGluZyIsPQoiMCAxcHgiKS5z dHlsZSgiZGlzcGxheSIsZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSk/ImlubGluZS1ibG9jayI6Im5v bmUifSkub249CigiY2xpY2siLGspLG4uZWFjaChmdW5jdGlvbihuKXshdCYmdihuKT9kMy5zZWxl Y3QodGhpcykuYXBwZW5kKCJhIikuYXR0cigiaD0KcmVmIix2KS5hdHRyKCJjbGFzcyIsZDMuZnVu Y3RvcihlLmNsYXNzZXMpKS5hcHBlbmQoInNwYW4iKTpkMy5zZWxlY3QodGhpcykuPQphcHBlbmQo InNwYW4iKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJzcGFuIikuYXR0cigiY2xhc3MiLGQzLmZ1 bmN0b3IoZS5jbGE9CnNzZXMpKS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBlLmZvcm1hdD90W2Uu a2V5XT9lLmZvcm1hdCh0W2Uua2V5XSk6Ii0iOnRbZT0KLmtleV18fCItIn0pfSksZS5zaG93Q291 bnQmJihuLmFwcGVuZCgic3BhbiIpLmF0dHIoImNsYXNzIiwibnYtY2hpbGRyZW5Db3VuPQp0Iiks Ti5zZWxlY3RBbGwoInNwYW4ubnYtY2hpbGRyZW5Db3VudCIpLnRleHQoZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzJiY9CmUudmFsdWVzLmxlbmd0aHx8ZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVu Z3RoPyIoIisoZS52YWx1ZXMmJmUudmFsdWVzLmZpbHRlcj0KKGZ1bmN0aW9uKGUpe3JldHVybiB1 P3UoZSk6ITB9KS5sZW5ndGh8fGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmZpbHRlcihmdW5jdGlvPQpu KGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8fDApKyIpIjoiIn0pKX0pLE4ub3JkZXIoKS5v bigiY2xpY2siLGZ1bmN0aW89Cm4oZSl7ZC5lbGVtZW50Q2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxw b3M6W2UueCxlLnldfSl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aT0Kb24oZSl7ZC5lbGVtZW50RGJs Y2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigibW91c2VvdmVyIixm PQp1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3Zlcih7cm93OnRoaXMsZGF0YTplLHBvczpbZS54 LGUueV19KX0pLm9uKCJtb3VzZW89CnV0IixmdW5jdGlvbihlKXtkLmVsZW1lbnRNb3VzZW91dCh7 cm93OnRoaXMsZGF0YTplLHBvczpbZS54LGUueV19KX0pfSksZ312YT0KciB0PTNEe3RvcDowLHJp Z2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVs dENvPQpsb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksbz0zRCEwLHU9M0Qh MSxhPTNEIk5vIERhdGEgQXZhaWxhYmw9CmUuIixmPTNEMjAsbD0zRFt7a2V5OiJrZXkiLGxhYmVs OiJOYW1lIix0eXBlOiJ0ZXh0In1dLGM9M0RudWxsLGg9M0QiaW1hZ2VzLz0KZ3JleS1wbHVzLnBu ZyIscD0zRCJpbWFnZXMvZ3JleS1taW51cy5wbmciLGQ9M0RkMy5kaXNwYXRjaCgiZWxlbWVudENs aWNrIiwiPQplbGVtZW50RGJsY2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNl b3V0Iiksdj0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUudXJsfSxtPTNEMDtyZXR1cm4gZy5vcHRp b25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGcpLGcubWFyZ2luPTNEZj0KdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVm aW5lZCI/ZS50PQpvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5l ZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPQo9M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVm aW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9Cj0zRCJ1bmRl ZmluZWQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubD0KZW5ndGg/KG49M0RlLGcpOm59LGcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGcpPQo6cn0sZy5jb2xvcj0zRGZ1bmN0aW9uKHQp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZS51dGlscy5nZXRDb2xvcih0KSw9CnNjYXR0 ZXIuY29sb3IoaSksZyk6aX0sZy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZSxnKT0KOnN9LGcuaGVhZGVyPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG89M0RlLGcpOm99LGcubm9EYXRhPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oYT0zRGUsZyk6YX0sZy5maWx0ZXJaZXJvPTNEZnVuY3Rpb24oZSk9Cnty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsZyk6dX0sZy5jb2x1bW5zPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8obD0zRGUsZyk6bH0sZy50YWJsZUNsYXNzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYz0zRGUsZyk6Y30sZy5pY29u T3Blbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxnKTpofSw9 CmcuaWNvbkNsb3NlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0Rl LGcpOnB9LGcuZ2V0VXJsPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o dj0zRGUsZyk6dn0sZ30sZS5tb2RlbHMubGVnZW5kPTNEZnVuY3RpPQpvbigpe2Z1bmN0aW9uIGMo aCl7cmV0dXJuIGguZWFjaChmdW5jdGlvbihjKXt2YXIgaD0zRG4tdC5sZWZ0LXQucmlnaHQscD0z RGQ9CjMuc2VsZWN0KHRoaXMpLGQ9M0RwLnNlbGVjdEFsbCgiZy5udi1sZWdlbmQiKS5kYXRhKFtj XSksdj0zRGQuZW50ZXIoKS5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1sZWdl bmQiKS5hcHBlbmQoImciKSxtPTNEZC5zZWxlY3QoImciKTtkLmF0dHIoPQoidHJhbnNmb3JtIiwi dHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBnPTNEbS5zZWxlY3RBbGwoIi5u di1zZXI9CmllcyIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx5PTNEZy5lbnRlcigpLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibj0Kdi1zZXJpZXMiKS5vbigibW91c2VvdmVyIixmdW5j dGlvbihlLHQpe2wubGVnZW5kTW91c2VvdmVyKGUsdCl9KS5vbigibW91c2VvPQp1dCIsZnVuY3Rp b24oZSx0KXtsLmxlZ2VuZE1vdXNlb3V0KGUsdCl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7 bC5sZWdlbmQ9CkNsaWNrKGUsdCksYSYmKGY/KGMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2Fi bGVkPTNEITB9KSxlLmRpc2FibGVkPTNEITEpOj0KKGUuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCxj LmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkmJmMuZm9yRWFjPQpoKGZ1bmN0 aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMX0pKSxsLnN0YXRlQ2hhbmdlKHtkaXNhYmxlZDpjLm1hcChm dW5jdGlvbihlKXs9CnJldHVybiEhZS5kaXNhYmxlZH0pfSkpfSkub24oImRibGNsaWNrIixmdW5j dGlvbihlLHQpe2wubGVnZW5kRGJsY2xpY2soZSx0KT0KLGEmJihjLmZvckVhY2goZnVuY3Rpb24o ZSl7ZS5kaXNhYmxlZD0zRCEwfSksZS5kaXNhYmxlZD0zRCExLGwuc3RhdGVDaGFuZ2UoPQp7ZGlz YWJsZWQ6Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSl9KSl9KTt5LmFwcGVu ZCgiY2lyY2xlIikuc3Q9CnlsZSgic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJjbGFzcyIsIm52LWxl Z2VuZC1zeW1ib2wiKS5hdHRyKCJyIiw1KSx5LmFwcGVuZD0KKCJ0ZXh0IikuYXR0cigidGV4dC1h bmNob3IiLCJzdGFydCIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kLXRleHQiKS5hdHRyKCJkPQp5 IiwiLjMyZW0iKS5hdHRyKCJkeCIsIjgiKSxnLmNsYXNzZWQoImRpc2FibGVkIixmdW5jdGlvbihl KXtyZXR1cm4gZS5kaXNhYmw9CmVkfSksZy5leGl0KCkucmVtb3ZlKCksZy5zZWxlY3QoImNpcmNs ZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybj0KIGUuY29sb3J8fHMoZSx0KX0p LnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLGcu PQpzZWxlY3QoInRleHQiKS50ZXh0KGkpO2lmKG8pe3ZhciBiPTNEW107Zy5lYWNoKGZ1bmN0aW9u KHQsbil7dmFyIHI9M0RkMy5zZWw9CmVjdCh0aGlzKS5zZWxlY3QoInRleHQiKSxpO3RyeXtpPTNE ci5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtpZihpPD0zRDApdGhybz0KdyBFcnJvcigpfWNhdGNo KHMpe2k9M0RlLnV0aWxzLmNhbGNBcHByb3hUZXh0V2lkdGgocil9Yi5wdXNoKGkrMjgpfSk7dmFy IHc9Cj0zRDAsRT0zRDAsUz0zRFtdO3doaWxlKEU8aCYmdzxiLmxlbmd0aClTW3ddPTNEYlt3XSxF Kz0zRGJbdysrXTt3PTNEPTNEPTNEMD0KJiYodz0zRDEpO3doaWxlKEU+aCYmdz4xKXtTPTNEW10s dy0tO2Zvcih2YXIgeD0zRDA7eDxiLmxlbmd0aDt4KyspYlt4XT4oU1t4PQold118fDApJiYoU1t4 JXddPTNEYlt4XSk7RT0zRFMucmVkdWNlKGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlK3R9KX12 YXIgVD0KPTNEW107Zm9yKHZhciBOPTNEMCxDPTNEMDtOPHc7TisrKVRbTl09M0RDLEMrPTNEU1tO XTtnLmF0dHIoInRyYW5zZm9ybSIsZnVuPQpjdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitU W3Qld10rIiwiKyg1K01hdGguZmxvb3IodC93KSoyMCkrIikifSksdT9tLmE9CnR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKCIrKG4tdC5yaWdodC1FKSsiLCIrdC50b3ArIikiKTptLmF0dHIoInRy YW5zZm9ybT0KIiwidHJhbnNsYXRlKDAsIit0LnRvcCsiKSIpLHI9M0R0LnRvcCt0LmJvdHRvbStN YXRoLmNlaWwoYi5sZW5ndGgvdykqMjB9ZWxzPQple3ZhciBrPTNENSxMPTNENSxBPTNEMCxPO2cu YXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHIpe3ZhciBpPTNEZDMuc2VsZWM9CnQodGhpcyku c2VsZWN0KCJ0ZXh0Iikubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpKzI4O3JldHVybiBP PTNETCxuPHQubD0KZWZ0K3QucmlnaHQrTytpJiYoTD0zRE89M0Q1LGsrPTNEMjApLEwrPTNEaSxM PkEmJihBPTNETCksInRyYW5zbGF0ZSgiK08rIiwiPQoraysiKSJ9KSxtLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiKyhuLXQucmlnaHQtQSkrIiwiK3QudG9wKyIpIikscj0zRHQ9Ci50b3Ar dC5ib3R0b20raysxNX19KSxjfXZhciB0PTNEe3RvcDo1LHJpZ2h0OjAsYm90dG9tOjUsbGVmdDow fSxuPTNENDAwLHI9Cj0zRDIwLGk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9LHM9M0RlLnV0 aWxzLmRlZmF1bHRDb2xvcigpLG89M0QhMCx1PTNEIT0KMCxhPTNEITAsZj0zRCExLGw9M0RkMy5k aXNwYXRjaCgibGVnZW5kQ2xpY2siLCJsZWdlbmREYmxjbGljayIsImxlZ2VuZE1vdXNlPQpvdmVy IiwibGVnZW5kTW91c2VvdXQiLCJzdGF0ZUNoYW5nZSIpO3JldHVybiBjLmRpc3BhdGNoPTNEbCxj Lm9wdGlvbnM9M0RlLnU9CnRpbHMub3B0aW9uc0Z1bmMuYmluZChjKSxjLm1hcmdpbj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0Lj0KdG9wPTNEdHlwZW9mIGUudG9wIT0z RCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QiPQp1 bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0Qi dW5kZWZpbmVkIj9lLmJvdHQ9Cm9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNE InVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxjKTp0fSxjLndpZD0KdGg9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsYyk6bn0sYy5oZWlnaHQ9M0RmdW5jdGlvbihl PQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxjKTpyfSxjLmtleT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGk9M0RlLGMpOml9LGMuY29sb3I9M0RmdW5j dGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUudT0KdGlscy5nZXRDb2xvcih0 KSxjKTpzfSxjLmFsaWduPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89 M0RlPQosYyk6b30sYy5yaWdodEFsaWduPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHU9M0RlLGMpOnV9LGMudXA9CmRhdGVTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhhPTNEZSxjKTphfSxjLnJhZGlvQnV0dG9uTT0Kb2RlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLGMpOmZ9LGN9LGUubW9kZWxzLmxp bmU9M0RmPQp1bmN0aW9uKCl7ZnVuY3Rpb24gbShnKXtyZXR1cm4gZy5lYWNoKGZ1bmN0aW9uKG0p e3ZhciBnPTNEci1uLmxlZnQtbi5yaWdodCw9CmI9M0RpLW4udG9wLW4uYm90dG9tLHc9M0RkMy5z ZWxlY3QodGhpcyk7Yz0zRHQueFNjYWxlKCksaD0zRHQueVNjYWxlKCksZD0zRD0KZHx8Yyx2PTNE dnx8aDt2YXIgRT0zRHcuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZSIpLmRhdGEoW21dKSxT PTNERS5lbnRlPQpyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYt bGluZSIpLFQ9M0RTLmFwcGVuZCgiZGVmcyIpLE49Cj0zRFMuYXBwZW5kKCJnIiksQz0zREUuc2Vs ZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLD0KTi5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksRS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoPQoiK24ubGVmdCsiLCIrbi50b3ArIikiKSx0LndpZHRoKGcpLmhlaWdodChi KTt2YXIgaz0zREUuc2VsZWN0KCIubnYtc2NhdHRlclc9CnJhcCIpO2suY2FsbCh0KSxULmFwcGVu ZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK3QuaWQoKSkuYXBwZT0KbmQo InJlY3QiKSxFLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiIHJlY3QiKS5hdHRyKCJ3 aWR0aCIsZykuYXR0cigiPQpoZWlnaHQiLGI+MD9iOjApLEMuYXR0cigiY2xpcC1wYXRoIixsPyJ1 cmwoI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiKSI6IiIpLGs9Ci5hdHRyKCJjbGlwLXBhdGgiLGw/ InVybCgjbnYtZWRnZS1jbGlwLSIrdC5pZCgpKyIpIjoiIik7dmFyIEw9M0RFLnNlbGVjdCgiLj0K bnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVy biBlfSxmdW5jdGlvbihlKXtyPQpldHVybiBlLmtleX0pO0wuZW50ZXIoKS5hcHBlbmQoImciKS5z dHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWw9Cmwtb3BhY2l0eSIsMWUtNiks TC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYt Zz0Kcm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHVy biBlLmhvdmVyfSkuc3R5bGUoImZpPQpsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQpfSku c3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQ9Cil9KSxMLnN0eWxlKCJz dHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjUpO3ZhciBBPTNETC5zZWxl Y3RBbD0KbCgicGF0aC5udi1hcmVhIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZihlKT9bZV06 W119KTtBLmVudGVyKCkuYXBwZW5kKCJwPQphdGgiKS5hdHRyKCJjbGFzcyIsIm52LWFyZWEiKS5h dHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gZDMuc3ZnLmFyZWEoKS5pbnQ9CmVycG9sYXRlKHAp LmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhkKG8o dCxuKSkpfT0KKS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHUo dCxuKSkpfSkueTEoZnVuY3Rpb24oZSx0KXtyPQpldHVybiB2KGguZG9tYWluKClbMF08PTNEMD9o LmRvbWFpbigpWzFdPj0zRDA/MDpoLmRvbWFpbigpWzFdOmguZG9tYWluKClbMF09Cil9KS5hcHBs eSh0aGlzLFt0LnZhbHVlc10pfSksTC5leGl0KCkuc2VsZWN0QWxsKCJwYXRoLm52LWFyZWEiKS5y ZW1vdmUoKSxBLj0KYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50 ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0PQppb24odCxuKXtyZXR1cm4gZS51dGlscy5O YU50b1plcm8oYyhvKHQsbikpKX0pLnkwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXQ9Cmlscy5O YU50b1plcm8oaCh1KHQsbikpKX0pLnkxKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoaC5kb21haW4o KVswXTw9M0QwP2guZD0Kb21haW4oKVsxXT49M0QwPzA6aC5kb21haW4oKVsxXTpoLmRvbWFpbigp WzBdKX0pLmFwcGx5KHRoaXMsW3QudmFsdWVzXSl9KTt2PQphciBPPTNETC5zZWxlY3RBbGwoInBh dGgubnYtbGluZSIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuW2UudmFsdWVzXX0pO08uZW49CnRl cigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibnYtbGluZSIpLmF0dHIoImQiLGQzLnN2 Zy5saW5lKCkuaW50ZXJwbz0KbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZXR1 cm4gZS51dGlscy5OYU50b1plcm8oZChvKHQsbikpKX0pLnkoPQpmdW5jdGlvbih0LG4pe3JldHVy biBlLnV0aWxzLk5hTnRvWmVybyh2KHUodCxuKSkpfSkpLE8uYXR0cigiZCIsZDMuc3ZnLmxpbmU9 CigpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0 aWxzLk5hTnRvWmVybyhjKG8odD0KLG4pKSl9KS55KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRp bHMuTmFOdG9aZXJvKGgodSh0LG4pKSl9KSksZD0zRGMuY29weSgpPQosdj0zRGguY29weSgpfSks bX12YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKSxuPTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAs bGU9CmZ0OjB9LHI9M0Q5NjAsaT0zRDUwMCxzPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxvPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueD0KfSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYT0z RGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWlzTmFOKHUoZSx0KSkmJnUoZSx0PQopIT0zRD0zRG51bGx9 LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmVhfSxsPTNEITEsYyxoLHA9M0QibGluZWFyIjt0 LnNpemU9CigxNikuc2l6ZURvbWFpbihbMTYsMjU2XSk7dmFyIGQsdjtyZXR1cm4gbS5kaXNwYXRj aD0zRHQuZGlzcGF0Y2gsbS5zY2F0dGVyPQo9M0R0LGQzLnJlYmluZChtLHQsImlkIiwiaW50ZXJh Y3RpdmUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieEQ9Cm9tYWluIiwieURv bWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJmb3JjZVgiLCJmb3JjZVkiLCJm b3JjZVNpej0KZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImNsaXBSYWRpdXMiLCJwYWRE YXRhIiwiaGlnaGxpZ2h0UG9pbnQiLCJjbGVhPQpySGlnaGxpZ2h0cyIpLG0ub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm1hcmdpbj0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2Uu dG9wOm4udG9wLD0Kbi5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uucmln aHQ6bi5yaWdodCxuLmJvdHRvbT0zRHR5cGVvZiBlPQouYm90dG9tIT0zRCJ1bmRlZmluZWQiP2Uu Ym90dG9tOm4uYm90dG9tLG4ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW49CmVkIj9l LmxlZnQ6bi5sZWZ0LG0pOm59LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocj0zRD0KZSxtKTpyfSxtLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLng9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZSx0LngoZSksbSk6b30sbS55PTNEZnVuY3Rpb24oZSl7cmU9CnR1 cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsdC55KGUpLG0pOnV9LG0uY2xpcEVkZ2U9M0RmdW5j dGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLmNvbG9yPTNE ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocz0zRGUudXRpbHMuZ2V0Q29s b3IobiksdC5jb2xvcihzKSxtKTpzfSxtLmludGVycG9sYXRlPTNEZnVuY3Rpb24oZSl7cmV0dXI9 Cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5kZWZpbmVkPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oYT0zRGUsbSk6YX0sbS5pc0FyZWE9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGQzLmZ1PQpuY3RvcihlKSxtKTpmfSxt fSxlLm1vZGVscy5saW5lQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIE4obSl7cmV0dXJuIG0u ZWE9CmNoKGZ1bmN0aW9uKG0pe3ZhciB4PTNEZDMuc2VsZWN0KHRoaXMpLEM9M0R0aGlzLGs9M0Qo YXx8cGFyc2VJbnQoeC5zdHlsZSgidz0KaWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxMPTNE KGZ8fHBhcnNlSW50KHguc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvPQpwLW8uYm90dG9tO04u dXBkYXRlPTNEZnVuY3Rpb24oKXt4LmNhbGwoTil9LE4uY29udGFpbmVyPTNEdGhpcyxiLmRpc2Fi bGVkPQo9M0RtLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7dmFy IEE7dz0zRHt9O2ZvcihBIGluIGIpYls9CkFdaW5zdGFuY2VvZiBBcnJheT93W0FdPTNEYltBXS5z bGljZSgwKTp3W0FdPTNEYltBXX1pZighbXx8IW0ubGVuZ3RofHwhbS5maT0KbHRlcihmdW5jdGlv bihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgTz0zRHguc2VsZWN0QWxs KCIubnYtPQpub0RhdGEiKS5kYXRhKFtFXSk7cmV0dXJuIE8uZW50ZXIoKS5hcHBlbmQoInRleHQi KS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm89CkRhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5 bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTy5hdHRyKCJ4IixvLmxlZnQraz0KLzIpLmF0dHIo InkiLG8udG9wK0wvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLE59eC5zZWxlY3RBbGwo Ii5udi1ub0RhPQp0YSIpLnJlbW92ZSgpLGc9M0R0LnhTY2FsZSgpLHk9M0R0LnlTY2FsZSgpO3Zh ciBNPTNEeC5zZWxlY3RBbGwoImcubnYtd3JhcC49Cm52LWxpbmVDaGFydCIpLmRhdGEoW21dKSxf PTNETS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cj0KYXAgbnYt bGluZUNoYXJ0IikuYXBwZW5kKCJnIiksRD0zRE0uc2VsZWN0KCJnIik7Xy5hcHBlbmQoInJlY3Qi KS5zdHlsZSgib3BhPQpjaXR5IiwwKSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBu di1heGlzIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGE9CnNzIiwibnYteSBudi1heGlzIiksXy5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLF8uYXBwZW5kKCJnIj0KKS5h dHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtaW50ZXJhY3RpdmUiPQopLEQuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLGspLmF0dHIo ImhlaWdodCIsTD4wP0w6MCksbCYmKGkud2lkdGgoayksRC49CnNlbGVjdCgiLm52LWxlZ2VuZFdy YXAiKS5kYXR1bShtKS5jYWxsKGkpLG8udG9wIT0zRGkuaGVpZ2h0KCkmJihvLnRvcD0zRGkuaD0K ZWlnaHQoKSxMPTNEKGZ8fHBhcnNlSW50KHguc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1v LmJvdHRvbSksTS5zZWxlY3QoPQoiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoMCwiKyAtby50b3ArIikiKSksTS5hdHRyKCJ0cmE9Cm5zZm9ybSIsInRyYW5zbGF0 ZSgiK28ubGVmdCsiLCIrby50b3ArIikiKSxwJiZELnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0 dD0KcigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraysiLDApIiksZCYmKHMud2lkdGgoaykuaGVp Z2h0KEwpLm1hcmdpbih7bGVmdDpvPQoubGVmdCx0b3A6by50b3B9KS5zdmdDb250YWluZXIoeCku eFNjYWxlKGcpLE0uc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWw9CmwocykpLHQud2lkdGgo aykuaGVpZ2h0KEwpLmNvbG9yKG0ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHUo ZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIW1bdF0uZGlzYWJsZWR9KSk7dmFy IFA9M0RELnNlbGVjdCgiLm52LWxpbmVzPQpXcmFwIikuZGF0dW0obS5maWx0ZXIoZnVuY3Rpb24o ZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7UC5jYWxsKHQpLGMmJihuLnNjYWw9CmUoZykudGlja3Mo ay8xMDApLnRpY2tTaXplKC1MLDApLEQuc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJh bnNmb3JtIj0KLCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIpLEQuc2VsZWN0KCIubnYt eC5udi1heGlzIikuY2FsbChuKSksaCYmKHIuPQpzY2FsZSh5KS50aWNrcyhMLzM2KS50aWNrU2l6 ZSgtaywwKSxELnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLGkuZGk9CnNwYXRjaC5v bigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2I9M0RlLFMuc3RhdGVDaGFuZ2UoYiksTi51cGRh dGUoKX0pLHMuZD0KaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5j bGVhckhpZ2hsaWdodHMoKTt2YXIgYSxmLGwsYz0KPTNEW107bS5maWx0ZXIoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWUuZGlzYWJsZWR9KS5mb3JFYWNoPQooZnVuY3Rp b24obixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WFZhbHVlLE4u eCgpKSx0LmhpZ2g9CmxpZ2h0UG9pbnQocixmLCEwKTt2YXIgcz0zRG4udmFsdWVzW2ZdO2lmKHR5 cGVvZiBzPTNEPTNEInVuZGVmaW5lZCIpcmV0dXJuOz0KdHlwZW9mIGE9M0Q9M0QidW5kZWZpbmVk IiYmKGE9M0RzKSx0eXBlb2YgbD0zRD0zRCJ1bmRlZmluZWQiJiYobD0zRE4ueFNjYWxlPQooKShO LngoKShzLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6Ti55KCkocyxmKSxjb2xvcjp1KG4s bi5zZXJpZXNJbmRleCk9Cn0pfSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0ROLnlTY2FsZSgpLmlu dmVydChpLm1vdXNlWSkscD0zRE1hdGguYWJzKE4ueVNjYT0KbGUoKS5kb21haW4oKVswXS1OLnlT Y2FsZSgpLmRvbWFpbigpWzFdKSxkPTNELjAzKnAsZz0zRGUubmVhcmVzdFZhbHVlSW5kZXgoPQpj Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLGgsZCk7ZyE9M0Q9M0RudWxsJiYoY1tn XS5oaWdobGlnaHQ9M0QhMCk9Cn12YXIgeT0zRG4udGlja0Zvcm1hdCgpKE4ueCgpKGEsZikpO3Mu dG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK28ubGVmdCx0b3A6aT0KLm1vdXNlWStvLnRvcH0pLmNo YXJ0Q29udGFpbmVyKEMucGFyZW50Tm9kZSkuZW5hYmxlZCh2KS52YWx1ZUZvcm1hdHRlcihmdW5j PQp0aW9uKGUsdCl7cmV0dXJuIHIudGlja0Zvcm1hdCgpKGUpfSkuZGF0YSh7dmFsdWU6eSxzZXJp ZXM6Y30pKCkscy5yZW5kZXJHdWk9CmRlTGluZShsKX0pLHMuZGlzcGF0Y2gub24oImVsZW1lbnRN b3VzZW91dCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZSgpLHQuYz0KbGVhckhpZ2hsaWdodHMo KX0pLFMub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXt2JiZUKGUsQy5wYXJlbnROb2RlKX0p LFMuPQpvbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKGUpe3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1 bmRlZmluZWQiJiZtLmxlbmd0aD0zRD0KPTNEPTNEZS5kaXNhYmxlZC5sZW5ndGgmJihtLmZvckVh Y2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtuPQpdfSksYi5kaXNhYmxl ZD0zRGUuZGlzYWJsZWQpLE4udXBkYXRlKCl9KX0pLE59dmFyIHQ9M0RlLm1vZGVscy5saW5lKCks bj0zRGU9Ci5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCksaT0zRGUubW9kZWxzLmxl Z2VuZCgpLHM9M0RlLmludGVyYWN0aXZlRz0KdWlkZWxpbmUoKSxvPTNEe3RvcDozMCxyaWdodDoy MCxib3R0b206NTAsbGVmdDo2MH0sdT0zRGUudXRpbHMuZGVmYXVsdENvbG9yPQooKSxhPTNEbnVs bCxmPTNEbnVsbCxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPTNEITEsZD0zRCExLHY9M0QhMCxtPTNE ZnVuY3Rpb249CihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0 ICIrdCsiPC9wPiJ9LGcseSxiPTNEe30sdz0zRD0KbnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxl LiIsUz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiPQpzdGF0ZUNo YW5nZSIsImNoYW5nZVN0YXRlIikseD0zRDA7bi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5n KDcpLHIub3JpZW49CnQocD8icmlnaHQiOiJsZWZ0Iik7dmFyIFQ9M0RmdW5jdGlvbihpLHMpe3Zh ciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MD0KKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0 VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kPQpleCkp LGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9M0RtKGku c2VyaWVzLmtleSxhLGY9CixpLE4pO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMp fTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdT0Kc2VvdmVyLnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnRvcF0sUy50b29sPQp0 aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0 aW9uKGUpe1MudG9vbHRpcEg9CmlkZShlKX0pLFMub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigp e3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxOLmRpc3BhdGNoPQo9M0RTLE4ubGluZXM9M0R0LE4u bGVnZW5kPTNEaSxOLnhBeGlzPTNEbixOLnlBeGlzPTNEcixOLmludGVyYWN0aXZlTGF5ZXI9M0Q9 CnMsZDMucmViaW5kKE4sdCwiZGVmaW5lZCIsImlzQXJlYSIsIngiLCJ5Iiwic2l6ZSIsInhTY2Fs ZSIsInlTY2FsZSIsInhEb21haT0KbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3Jj ZVgiLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiPQpjbGlwVm9yb25vaSIsInVz ZVZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiksTi5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnU9Cm5jLmJpbmQoTiksTi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oby50b3A9M0R0eXBlb2YgZT0KLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxv LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yPQppZ2h0Om8ucmlnaHQs by5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206by5ib3R0 b20sby49CmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZnQs Tik6b30sTi53aWR0aD0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9 M0RlLE4pOmF9LE4uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0 aD8oZj0zRGUsTik6Zn0sTi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh1PQo9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IodSksTik6dX0sTi5zaG93TGVn ZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8obD0zRGUsTik6bH0s Ti5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhjPTNE ZSxOKTpjfSxOLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZSxOPQopOmh9LE4ucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLHIub3JpZW49CnQoZT8icmlnaHQiOiJsZWZ0IiksTik6cH0s Ti51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50 cy5sZW5ndGg/KGQ9M0RlLGU9M0Q9M0Q9M0QhMCYmKE4uaW50ZXJhY3RpdmUoITEpLE4udXNlVm9y b25vaSghMSkpLE4pPQo6ZH0sTi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh2PTNEZSxOKTp2fSxOLnRvb2x0aXA9CkNvbnRlbnQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsTik6bX0sTi5zdGF0ZT0zRGZ1bmN0aT0Kb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLE4pOmJ9LE4uZGVmYXVsdFN0YXRlPTNE ZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0zRGUsTik6d30sTi5ub0Rh dGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyhFPTNEZSxOKTpFfSxO LnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0K dGg/KHg9M0RlLE4pOnh9LE59LGUubW9kZWxzLmxpbmVQbHVzQmFyQ2hhcnQ9M0RmdW5jdGlvbigp e2Z1bmN0aW9uIFQoZSl7cmV0PQp1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBsPTNEZDMuc2Vs ZWN0KHRoaXMpLGM9M0R0aGlzLHY9M0QoYXx8cGFyc2VJbnQobC49CnN0eWxlKCJ3aWR0aCIpKXx8 OTYwKS11LmxlZnQtdS5yaWdodCxOPTNEKGZ8fHBhcnNlSW50KGwuc3R5bGUoImhlaWdodCIpKXx8 ND0KMDApLXUudG9wLXUuYm90dG9tO1QudXBkYXRlPTNEZnVuY3Rpb24oKXtsLmNhbGwoVCl9LGIu ZGlzYWJsZWQ9M0RlLm1hcChmdW5jPQp0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3 KXt2YXIgQzt3PTNEe307Zm9yKEMgaW4gYiliW0NdaW5zdGFuY2VvZiA9CkFycmF5P3dbQ109M0Ri W0NdLnNsaWNlKDApOndbQ109M0RiW0NdfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5j dGlvbj0KKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBrPTNEbC5zZWxl Y3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhPQooW0VdKTtyZXR1cm4gay5lbnRlcigpLmFwcGVuZCgi dGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCI9CmR5IiwiLS43ZW0i KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxrLmF0dHIoIngiLHUubGVmdCt2LzIpLmF0 dHIoInkiLD0KdS50b3ArTi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksVH1sLnNlbGVj dEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpPQo7dmFyIEw9M0RlLmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4hZS5kaXNhYmxlZCYmZS5iYXJ9KSxBPTNEZS5maWx0ZXIoZnVuY3Q9CmlvbihlKXty ZXR1cm4hZS5iYXJ9KTttPTNEQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9 KS5sZW5ndGgmJj0KQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KVswXS52 YWx1ZXMubGVuZ3RoP3QueFNjYWxlKCk6bi54U2NhPQpsZSgpLGc9M0RuLnlTY2FsZSgpLHk9M0R0 LnlTY2FsZSgpO3ZhciBPPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5udi09CndyYXAu bnYtbGluZVBsdXNCYXIiKS5kYXRhKFtlXSksTT0zRE8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZD0KMyBudi13cmFwIG52LWxpbmVQbHVzQmFyIikuYXBwZW5kKCJnIiksXz0z RE8uc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyPQooImNsYXNzIiwibnYteCBudi1heGlz IiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMiKSxNLmFwcGU9Cm5k KCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWJhcnNXcj0KYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGlu ZXNXcmFwIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnYtbGVnZW5kV3JhcCIpLHAm JihvLndpZHRoKHYvMiksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZS5tYXAoZnU9 Cm5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2luYWxLZXk9M0Q9M0Q9M0R1 bmRlZmluZWQ/ZS5rZXk6ZS5vcj0KaWdpbmFsS2V5LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS5i YXI/IiAobGVmdCBheGlzKSI6IiAocmlnaHQgYXhpcykiKSxlfSkpPQouY2FsbChvKSx1LnRvcCE9 M0RvLmhlaWdodCgpJiYodS50b3A9M0RvLmhlaWdodCgpLE49M0QoZnx8cGFyc2VJbnQobC5zdHls ZSg9CiJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLF8uc2VsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmF0dHIoInRyYW5zZm9ybT0KIiwidHJhbnNsYXRlKCIrdi8yKyIsIisgLXUudG9wKyIp IikpLE8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5sZWZ0PQorIiwiK3UudG9wKyIp IiksdC53aWR0aCh2KS5oZWlnaHQoTikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS5jb2w9Cm9yfHxoKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNh YmxlZCYmIWVbbl0uYmFyfSkpLG4ud2lkdD0KaCh2KS5oZWlnaHQoTikuY29sb3IoZS5tYXAoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aChlLHQpfSkuZmlsdGVyKGZ1PQpuY3Rpb24odCxu KXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSk7dmFyIEQ9M0RfLnNlbGVjdCgiLm52 LWJhcnNXcmE9CnAiKS5kYXR1bShMLmxlbmd0aD9MOlt7dmFsdWVzOltdfV0pLFA9M0RfLnNlbGVj dCgiLm52LWxpbmVzV3JhcCIpLmRhdHVtKEFbMD0KXSYmIUFbMF0uZGlzYWJsZWQ/QTpbe3ZhbHVl czpbXX1dKTtkMy50cmFuc2l0aW9uKEQpLmNhbGwobiksZDMudHJhbnNpdGlvbihQPQopLmNhbGwo dCksci5zY2FsZShtKS50aWNrcyh2LzEwMCkudGlja1NpemUoLU4sMCksXy5zZWxlY3QoIi5udi14 Lm52LWF4aXMiKS49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrZy5yYW5nZSgpWzBd KyIpIiksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLj0KbnYteC5udi1heGlzIikpLmNhbGwociks aS5zY2FsZShnKS50aWNrcyhOLzM2KS50aWNrU2l6ZSgtdiwwKSxkMy50cmFuc2l0aW9uPQooXy5z ZWxlY3QoIi5udi15MS5udi1heGlzIikpLnN0eWxlKCJvcGFjaXR5IixMLmxlbmd0aD8xOjApLmNh bGwoaSkscy5zY2FsZSg9CnkpLnRpY2tzKE4vMzYpLnRpY2tTaXplKEwubGVuZ3RoPzA6LXYsMCks Xy5zZWxlY3QoIi5udi15Mi5udi1heGlzIikuc3R5bGUoIj0Kb3BhY2l0eSIsQS5sZW5ndGg/MTow KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsMCkiKSxkMy50cmFuc2l0aW9uPQoo Xy5zZWxlY3QoIi5udi15Mi5udi1heGlzIikpLmNhbGwocyksby5kaXNwYXRjaC5vbigic3RhdGVD aGFuZ2UiLGZ1bmN0aW9uKGU9Cil7Yj0zRGUsUy5zdGF0ZUNoYW5nZShiKSxULnVwZGF0ZSgpfSks Uy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2QmJngoZT0KLGMucGFyZW50Tm9kZSl9KSxT Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVm PQppbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVk W25dfSksYi5kaXNhYmxlZD0zRHQ9Ci5kaXNhYmxlZCksVC51cGRhdGUoKX0pfSksVH12YXIgdD0z RGUubW9kZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMuaGlzdG9yaWNhbD0KQmFyKCkscj0zRGUubW9k ZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMuYXhpcygpLHM9M0RlLm1vZGVscy5heGlzKCksbz0zRGUu bW9kPQplbHMubGVnZW5kKCksdT0zRHt0b3A6MzAscmlnaHQ6NjAsYm90dG9tOjUwLGxlZnQ6NjB9 LGE9M0RudWxsLGY9M0RudWxsLGw9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGM9M0RmdW5j dGlvbihlKXtyZXR1cm4gZS55fSxoPTNEZS51dGlscy5kZWZhdWx0Q29sbz0KcigpLHA9M0QhMCxk PTNEITAsdj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+ IituKyIgPQphdCAiK3QrIjwvcD4ifSxtLGcseSxiPTNEe30sdz0zRG51bGwsRT0zRCJObyBEYXRh IEF2YWlsYWJsZS4iLFM9M0RkMy5kaXNwYXQ9CmNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRl Iiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpO24ucGFkRGF0YSghMCksdD0KLmNsaXBFZGdl KCExKS5wYWREYXRhKCEwKSxyLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNykuaGlnaGxp Z2h0WmVybyghPQoxKSxpLm9yaWVudCgibGVmdCIpLHMub3JpZW50KCJyaWdodCIpO3ZhciB4PTNE ZnVuY3Rpb24obixvKXt2YXIgdT0zRG4ucG9zWzA9Cl0rKG8ub2Zmc2V0TGVmdHx8MCksYT0zRG4u cG9zWzFdKyhvLm9mZnNldFRvcHx8MCksZj0zRHIudGlja0Zvcm1hdCgpKHQueCgpKD0Kbi5wb2lu dCxuLnBvaW50SW5kZXgpKSxsPTNEKG4uc2VyaWVzLmJhcj9pOnMpLnRpY2tGb3JtYXQoKSh0Lnko KShuLnBvaW50LG4uPQpwb2ludEluZGV4KSksYz0zRHYobi5zZXJpZXMua2V5LGYsbCxuLFQpO2Uu dG9vbHRpcC5zaG93KFt1LGFdLGMsbi52YWx1ZTwwPyI9Cm4iOiJzIixudWxsLG8pfTtyZXR1cm4g dC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKT0Ke2Uu cG9zPTNEW2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50b29sdGlwU2hvdyhlKX0p LHQuZGlzcGF0Y2gub24oPQoiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1Mu dG9vbHRpcEhpZGUoZSl9KSxuLmRpc3BhdGNoLm9uKCJlbGU9Cm1lbnRNb3VzZW92ZXIudG9vbHRp cCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3UudG9wXT0K LFMudG9vbHRpcFNob3coZSl9KSxuLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRp cCIsZnVuY3Rpb24oZSl7Uy50PQpvb2x0aXBIaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1 bmN0aW9uKCl7ZCYmZS50b29sdGlwLmNsZWFudXAoKX0pLFQuZGk9CnNwYXRjaD0zRFMsVC5sZWdl bmQ9M0RvLFQubGluZXM9M0R0LFQuYmFycz0zRG4sVC54QXhpcz0zRHIsVC55MUF4aXM9M0RpLFQu eT0KMkF4aXM9M0RzLGQzLnJlYmluZChULHQsImRlZmluZWQiLCJzaXplIiwiY2xpcFZvcm9ub2ki LCJpbnRlcnBvbGF0ZSIpLFQub3B0PQppb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKFQp LFQueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGw9M0RlLHQueChl KSxuLngoZSksVCk6bH0sVC55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGM9Cj0zRGUsdC55KGUpLG4ueShlKSxUKTpjfSxULm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh1Lj0KdG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UudG9wOnUudG9wLHUucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QiPQp1bmRlZmluZWQiP2Uu cmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9l LmJvdHQ9Cm9tOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ ZS5sZWZ0OnUubGVmdCxUKTp1fSxULndpZD0KdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYT0zRGUsVCk6YX0sVC5oZWlnaHQ9M0RmdW5jdGlvbihlPQope3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZSxUKTpmfSxULmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJu IGFyZ3VtZW49CnRzLmxlbmd0aD8oaD0zRGUudXRpbHMuZ2V0Q29sb3IodCksby5jb2xvcihoKSxU KTpofSxULnNob3dMZWdlbmQ9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhwPTNEZSxUKTpwfSxULnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRz Lmxlbmd0aD8oZD0zRGUsVCk6ZH0sVC50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHM9Ci5sZW5ndGg/KHY9M0RlLFQpOnZ9LFQuc3RhdGU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsVD0KKTpifSxULmRlZmF1bHRTdGF0ZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxUKTp3fSxULm5vPQpEYXRh PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLFQpOkV9LFR9LGUu bW9kZWxzLmxpbmVXaXQ9CmhGb2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBrKGUpe3Jl dHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gUj0KKGUpe3ZhciB0PTNEKyhlPTNEPTNE ImUiKSxuPTNEdD8xOi0xLHI9M0RPLzM7cmV0dXJuIk0iKy41Km4rIiwiK3IrIkE2LDYgMCAwPQog Iit0KyIgIis2LjUqbisiLCIrKHIrNikrIlYiKygyKnItNikrIkE2LDYgMCAwICIrdCsiICIrLjUq bisiLCIrMipyKyJaIisiTSI9CisyLjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCkrIk0iKzQuNSpu KyIsIisocis4KSsiViIrKDIqci04KX1mdW5jdGlvbiBVKCl7YT0KLmVtcHR5KCl8fGEuZXh0ZW50 KHcpLEYuZGF0YShbYS5lbXB0eSgpP2cuZG9tYWluKCk6d10pLmVhY2goZnVuY3Rpb24oZSx0KXt2 PQphciBuPTNEZyhlWzBdKS12LnJhbmdlKClbMF0scj0zRHYucmFuZ2UoKVsxXS1nKGVbMV0pO2Qz LnNlbGVjdCh0aGlzKS5zZWxlY3Q9CigiLmxlZnQiKS5hdHRyKCJ3aWR0aCIsbjwwPzA6biksZDMu c2VsZWN0KHRoaXMpLnNlbGVjdCgiLnJpZ2h0IikuYXR0cigieCIsZz0KKGVbMV0pKS5hdHRyKCJ3 aWR0aCIscjwwPzA6cil9KX1mdW5jdGlvbiB6KCl7dz0zRGEuZW1wdHkoKT9udWxsOmEuZXh0ZW50 KCk7PQp2YXIgbj0zRGEuZW1wdHkoKT9nLmRvbWFpbigpOmEuZXh0ZW50KCk7aWYoTWF0aC5hYnMo blswXS1uWzFdKTw9M0QxKXJldHVybjs9ClQuYnJ1c2goe2V4dGVudDpuLGJydXNoOmF9KSxVKCk7 dmFyIHM9M0RQLnNlbGVjdCgiLm52LWZvY3VzIC5udi1saW5lc1dyYXAiKT0KLmRhdHVtKGUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKGUscil7cmV0 dXJue2tlPQp5OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSxyKXtyZXR1 cm4gdC54KCkoZSxyKT49M0RuWzBdJiZ0Lng9CigpKGUscik8PTNEblsxXX0pfX0pKTtzLmNhbGwo dCksUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heGlzIikuY2FsbChyKT0KLFAuc2VsZWN0 KCIubnYtZm9jdXMgLm52LXkubnYtYXhpcyIpLmNhbGwoaSl9dmFyIFM9M0RkMy5zZWxlY3QodGhp cyksTj0zRHRoPQppcyxMPTNEKGh8fHBhcnNlSW50KFMuc3R5bGUoIndpZHRoIikpfHw5NjApLWYu bGVmdC1mLnJpZ2h0LEE9M0QocHx8cGFyc2VJbnQ9CihTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCkt Zi50b3AtZi5ib3R0b20tZCxPPTNEZC1sLnRvcC1sLmJvdHRvbTtrLnVwZGF0ZT0zRD0KZnVuY3Rp b24oKXtTLmNhbGwoayl9LGsuY29udGFpbmVyPTNEdGhpcztpZighZXx8IWUubGVuZ3RofHwhZS5m aWx0ZXIoZnVuY3RpPQpvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIg TT0zRFMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGE9CnRhKFt4XSk7cmV0dXJuIE0uZW50ZXIo KS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cj0KKCJk eSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTS5hdHRyKCJ4IixmLmxl ZnQrTC8yKS5hdHRyKCJ5PQoiLGYudG9wK0EvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0p LGt9Uy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmU9CigpLHY9M0R0LnhTY2FsZSgpLG09 M0R0LnlTY2FsZSgpLGc9M0RuLnhTY2FsZSgpLHk9M0RuLnlTY2FsZSgpO3ZhciBfPTNEUy5zZT0K bGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVXaXRoRm9jdXNDaGFydCIpLmRhdGEoW2VdKSxEPTNE Xy5lbnRlcigpLmFwcGVuZCgiPQpnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGlu ZVdpdGhGb2N1c0NoYXJ0IikuYXBwZW5kKCJnIiksUD0zRF8uc2U9CmxlY3QoImciKTtELmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpO3ZhciBIPTNERC5hcHBlbmQoImci KT0KLmF0dHIoImNsYXNzIiwibnYtZm9jdXMiKTtILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYteCBudi1heGlzIiksSC5hcHBlPQpuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlz IiksSC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3I9CmFwIik7dmFyIEI9M0RE LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udGV4dCIpO0IuYXBwZW5kKCJnIikuYXR0 cigiYz0KbGFzcyIsIm52LXggbnYtYXhpcyIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di15IG52LWF4aXMiKSxCLmFwcGVuZCgiPQpnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAi KSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnJ1c2hCYWNrZ3I9Cm91bmQiKSxCLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1icnVzaCIpLGImJih1LndpZHRoKEwpLFAu c2VsZWN0KD0KIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbCh1KSxmLnRvcCE9M0R1Lmhl aWdodCgpJiYoZi50b3A9M0R1LmhlaWdodCgpPQosQT0zRChwfHxwYXJzZUludChTLnN0eWxlKCJo ZWlnaHQiKSl8fDQwMCktZi50b3AtZi5ib3R0b20tZCksUC5zZWxlY3QoIi5udi09CmxlZ2VuZFdy YXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtZi50b3ArIikiKSksXy5hdHRy KCJ0cmFuc2Zvcj0KbSIsInRyYW5zbGF0ZSgiK2YubGVmdCsiLCIrZi50b3ArIikiKSx0LndpZHRo KEwpLmhlaWdodChBKS5jb2xvcihlLm1hcChmdW5jPQp0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8 fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGU9CmR9KSks bi5kZWZpbmVkKHQuZGVmaW5lZCgpKS53aWR0aChMKS5oZWlnaHQoTykuY29sb3IoZS5tYXAoZnVu Y3Rpb24oZSx0KXtyZT0KdHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxu KXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxQLnNlbGVjPQp0KCIubnYtY29udGV4dCIpLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKEErZi5ib3R0b20rbC50b3ApKyIpIik7dmE9CnIg aj0zRFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIikuZGF0dW0oZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dT0Kcm4hZS5kaXNhYmxlZH0pKTtkMy50cmFuc2l0aW9uKGopLmNhbGwo biksci5zY2FsZSh2KS50aWNrcyhMLzEwMCkudGlja1NpemUoPQotQSwwKSxpLnNjYWxlKG0pLnRp Y2tzKEEvMzYpLnRpY2tTaXplKC1MLDApLFAuc2VsZWN0KCIubnYtZm9jdXMgLm52LXgubnYtYXg9 CmlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitBKyIpIiksYS54KGcpLm9uKCJi cnVzaCIsZnVuY3Rpb24oKXt2YT0KciBlPTNEay50cmFuc2l0aW9uRHVyYXRpb24oKTtrLnRyYW5z aXRpb25EdXJhdGlvbigwKSx6KCksay50cmFuc2l0aW9uRHVyYXRpPQpvbihlKX0pLHcmJmEuZXh0 ZW50KHcpO3ZhciBGPTNEUC5zZWxlY3QoIi5udi1icnVzaEJhY2tncm91bmQiKS5zZWxlY3RBbGwo Imc9CiIpLmRhdGEoW3d8fGEuZXh0ZW50KCldKSxJPTNERi5lbnRlcigpLmFwcGVuZCgiZyIpO0ku YXBwZW5kKCJyZWN0IikuYXR0cigiYz0KbGFzcyIsImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5 IiwwKS5hdHRyKCJoZWlnaHQiLE8pLEkuYXBwZW5kKCJyZWN0IikuYXR0PQpyKCJjbGFzcyIsInJp Z2h0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixPKTt2YXIgcT0zRFAu c2VsZWM9CnQoIi5udi14Lm52LWJydXNoIikuY2FsbChhKTtxLnNlbGVjdEFsbCgicmVjdCIpLmF0 dHIoImhlaWdodCIsTykscS5zZWxlY3RBbD0KbCgiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0 dHIoImQiLFIpLHooKSxzLnNjYWxlKGcpLnRpY2tzKEwvMTAwKS50aWNrU2l6PQplKC1PLDApLFAu c2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDA9CiwiK3kucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oUC5zZWxlY3QoIi5u di1jb250ZXh0IC5udi14Lm52LWF4aXMiKSkuYz0KYWxsKHMpLG8uc2NhbGUoeSkudGlja3MoTy8z NikudGlja1NpemUoLUwsMCksZDMudHJhbnNpdGlvbihQLnNlbGVjdCgiLm52LWNvPQpudGV4dCAu bnYteS5udi1heGlzIikpLmNhbGwobyksUC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4 aXMiKS5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiks dS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bj0KY3Rpb24oZSl7ay51cGRhdGUoKX0pLFQu b24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtFJiZDKGUsTi5wYXJlbnROb2RlKX0pPQp9KSxr fXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5saW5lKCkscj0zRGUubW9kZWxz LmF4aXMoKSxpPTNEZS49Cm1vZGVscy5heGlzKCkscz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5t b2RlbHMuYXhpcygpLHU9M0RlLm1vZGVscy5sZWdlbmQoKT0KLGE9M0RkMy5zdmcuYnJ1c2goKSxm PTNEe3RvcDozMCxyaWdodDozMCxib3R0b206MzAsbGVmdDo2MH0sbD0zRHt0b3A6MCxyaWdoPQp0 OjMwLGJvdHRvbToyMCxsZWZ0OjYwfSxjPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxoPTNEbnVs bCxwPTNEbnVsbCxkPTNEMTA9CjAsdixtLGcseSxiPTNEITAsdz0zRG51bGwsRT0zRCEwLFM9M0Rm dW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8Lz0KaDM+IisiPHA+IituKyIgYXQg Iit0KyI8L3A+In0seD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLFQ9M0RkMy5kaXNwYXRjaCgidG9v PQpsdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYnJ1c2giKSxOPTNEMDt0LmNsaXBFZGdlKCEwKSxu LmludGVyYWN0aXZlKCExKSxyLm89CnJpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxpLm9y aWVudCgibGVmdCIpLHMub3JpZW50KCJib3R0b20iKS50aWNrUGFkZD0KaW5nKDUpLG8ub3JpZW50 KCJsZWZ0Iik7dmFyIEM9M0RmdW5jdGlvbihuLHMpe3ZhciBvPTNEbi5wb3NbMF0rKHMub2Zmc2V0 TGVmPQp0fHwwKSx1PTNEbi5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEci50aWNrRm9ybWF0 KCkodC54KCkobi5wb2ludCxuLnBvaW49CnRJbmRleCkpLGY9M0RpLnRpY2tGb3JtYXQoKSh0Lnko KShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9M0RTKG4uc2VyaWVzLmtleT0KLGEsZixuLGspO2Uu dG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigi ZWxlbWVuPQp0TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBd K2YubGVmdCxlLnBvc1sxXStmLnRvcF0sVC49CnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5v bigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbD0KdGlwSGlkZShl KX0pLFQub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe0UmJmUudG9vbHRpcC5jbGVhbnVwKCl9 KSxrLmRpc3BhPQp0Y2g9M0RULGsubGVnZW5kPTNEdSxrLmxpbmVzPTNEdCxrLmxpbmVzMj0zRG4s ay54QXhpcz0zRHIsay55QXhpcz0zRGksay54MkE9Cnhpcz0zRHMsay55MkF4aXM9M0RvLGQzLnJl YmluZChrLHQsImRlZmluZWQiLCJpc0FyZWEiLCJzaXplIiwieERvbWFpbiIsInlEbz0KbWFpbiIs InhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVk Z2UiLCJjbGlwVm9yPQpvbm9pIiwiaWQiKSxrLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5j LmJpbmQoayksay54PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8odC54 KGUpLG4ueChlKSxrKTp0Lnh9LGsueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5s ZW5ndGg/KHQueShlKSxuLnkoZSksayk6dC55fSxrLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuPQpndGg/KGYudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UudG9wOmYudG9wLGYucmlnaHQ9M0R0eXBlb2YgZS5yaWc9Cmh0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6Zi5yaWdodCxmLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj0K P2UuYm90dG9tOmYuYm90dG9tLGYubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ ZS5sZWZ0OmYubGVmdCxrKTpmPQp9LGsubWFyZ2luMj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSxrKTpsfSxrLndpZHRoPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsayk6aH0say5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1 cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxrKTpwfSxrLmhlaWdodDI9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhkPTNEZSxrKTpkfSxrLmNvbG9yPTNEZnVuY3Rp b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWw9CnMuZ2V0Q29sb3IodCks dS5jb2xvcihjKSxrKTpjfSxrLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLj0KbGVuZ3RoPyhiPTNEZSxrKTpifSxrLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlPQosayk6RX0say50b29sdGlwQ29udGVudD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxrKTpTfSw9CmsuaW50ZXJwb2xh dGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5pbnRlcnBvbGF0ZShl KSxuLmludD0KZXJwb2xhdGUoZSksayk6dC5pbnRlcnBvbGF0ZSgpfSxrLm5vRGF0YT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KHg9M0RlLGspOnh9LGsueFRpY2tGb3Jt YXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci50aWM9CmtGb3JtYXQo ZSkscy50aWNrRm9ybWF0KGUpLGspOnIudGlja0Zvcm1hdCgpfSxrLnlUaWNrRm9ybWF0PTNEZnVu Y3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50aWNrRm9ybWF0KGUpLG8udGlj a0Zvcm1hdChlKSxrKTppLnRpY2tGb3JtYXQoKX0sPQprLmJydXNoRXh0ZW50PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLGspOnd9LGsudHJhbnNpdGk9Cm9uRHVy YXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj0zRGUsayk6Tn0s a30sZS5tb2RlbHMubD0KaW5lUGx1c0JhcldpdGhGb2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtmdW5j dGlvbiBCKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oPQplKXtmdW5jdGlvbiB0dChlKXt2YXIg dD0zRCsoZT0zRD0zRCJlIiksbj0zRHQ/MTotMSxyPTNESS8zO3JldHVybiJNIisuNSpuKyI9Ciwi K3IrIkE2LDYgMCAwICIrdCsiICIrNi41Km4rIiwiKyhyKzYpKyJWIisoMipyLTYpKyJBNiw2IDAg MCAiK3QrIiAiKy41Km4rIj0KLCIrMipyKyJaIisiTSIrMi41Km4rIiwiKyhyKzgpKyJWIisoMipy LTgpKyJNIis0LjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCl9PQpmdW5jdGlvbiBudCgpe2guZW1w dHkoKXx8aC5leHRlbnQoeCksWS5kYXRhKFtoLmVtcHR5KCk/ay5kb21haW4oKTp4XSkuZWFjaCg9 CmZ1bmN0aW9uKGUsdCl7dmFyIG49M0RrKGVbMF0pLWsucmFuZ2UoKVswXSxyPTNEay5yYW5nZSgp WzFdLWsoZVsxXSk7ZDMuc2VsZT0KY3QodGhpcykuc2VsZWN0KCIubGVmdCIpLmF0dHIoIndpZHRo IixuPDA/MDpuKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCIucmlnPQpodCIpLmF0dHIoIngiLGso ZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0pfWZ1bmN0aW9uIHJ0KCl7eD0zRGguZW1wdHko KT89Cm51bGw6aC5leHRlbnQoKSxTPTNEaC5lbXB0eSgpP2suZG9tYWluKCk6aC5leHRlbnQoKSxE LmJydXNoKHtleHRlbnQ6UyxicnVzaD0KOmh9KSxudCgpLHIud2lkdGgoaikuaGVpZ2h0KEYpLmNv bG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHcoPQplLHQpfSkuZmlsdGVy KGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0uYmFyfSkpLHQud2lkdGgo aikuaGU9CmlnaHQoRikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8 dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKD0KdCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVb bl0uYmFyfSkpO3ZhciBuPTNEJC5zZWxlY3QoIi5udi1mb2N1cyAubnYtYmFyPQpzV3JhcCIpLmRh dHVtKFIubGVuZ3RoP1IubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6 ZS52YWx1ZXM9Ci5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci54KCkoZSx0KT49M0RTWzBd JiZyLngoKShlLHQpPD0zRFNbMV19KX19KTpbez0KdmFsdWVzOltdfV0pLGk9M0QkLnNlbGVjdCgi Lm52LWZvY3VzIC5udi1saW5lc1dyYXAiKS5kYXR1bShVWzBdLmRpc2FibGVkP1t7PQp2YWx1ZXM6 W119XTpVLm1hcChmdW5jdGlvbihlLG4pe3JldHVybntrZXk6ZS5rZXksdmFsdWVzOmUudmFsdWVz LmZpbHRlcihmdW49CmN0aW9uKGUsbil7cmV0dXJuIHQueCgpKGUsbik+PTNEU1swXSYmdC54KCko ZSxuKTw9M0RTWzFdfSl9fSkpO1IubGVuZ3RoP0M9Cj0zRHIueFNjYWxlKCk6Qz0zRHQueFNjYWxl KCkscy5zY2FsZShDKS50aWNrcyhqLzEwMCkudGlja1NpemUoLUYsMCkscy5kb21haT0KbihbTWF0 aC5jZWlsKFNbMF0pLE1hdGguZmxvb3IoU1sxXSldKSwkLnNlbGVjdCgiLm52LXgubnYtYXhpcyIp LmNhbGwocyksbi5jPQphbGwociksaS5jYWxsKHQpLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXgu bnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW49CnNsYXRlKDAsIitMLnJhbmdlKClbMF0r IikiKSx1LnNjYWxlKEwpLnRpY2tzKEYvMzYpLnRpY2tTaXplKC1qLDApLCQuc2VsZWN0KD0KIi5u di1mb2N1cyAubnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixSLmxlbmd0aD8xOjApLGEu c2NhbGUoQSkudGlja3MoPQpGLzM2KS50aWNrU2l6ZShSLmxlbmd0aD8wOi1qLDApLCQuc2VsZWN0 KCIubnYtZm9jdXMgLm52LXkyLm52LWF4aXMiKS5zdHlsZSg9CiJvcGFjaXR5IixVLmxlbmd0aD8x OjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MucmFuZ2UoKVsxXSsiLDApIiksJD0K LnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1heGlzIikuY2FsbCh1KSwkLnNlbGVjdCgiLm52 LWZvY3VzIC5udi15Mi5udi1hPQp4aXMiKS5jYWxsKGEpfXZhciBOPTNEZDMuc2VsZWN0KHRoaXMp LFA9M0R0aGlzLGo9M0Qodnx8cGFyc2VJbnQoTi5zdHlsZSgid2k9CmR0aCIpKXx8OTYwKS1wLmxl ZnQtcC5yaWdodCxGPTNEKG18fHBhcnNlSW50KE4uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1wLnRv cD0KLXAuYm90dG9tLWcsST0zRGctZC50b3AtZC5ib3R0b207Qi51cGRhdGU9M0RmdW5jdGlvbigp e04uY2FsbChCKX0sQi5jb250YWluPQplcj0zRHRoaXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS49Cmxlbmd0aCl7dmFyIHE9 M0ROLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW19dKTtyZXR1cm4gcS5lbnRlcigpLmFw cGVuZD0KKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5Iiwi LS43ZW0iKS5zdHlsZSgidGV4dC1hbmNoPQpvciIsIm1pZGRsZSIpLHEuYXR0cigieCIscC5sZWZ0 K2ovMikuYXR0cigieSIscC50b3ArRi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGV9KSxC fU4uc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIFI9M0RlLmZpbHRlcihmdW5j dGlvbihlKT0Ke3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLFU9M0RlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hZS5iYXJ9KTtDPTNEci54PQpTY2FsZSgpLGs9M0RvLnNjYWxlKCksTD0zRHIu eVNjYWxlKCksQT0zRHQueVNjYWxlKCksTz0zRGkueVNjYWxlKCksTT0zRG4ueVM9CmNhbGUoKTt2 YXIgej0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLm1h cChmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57 eDp5KGUsdCkseTpiKGUsdCl9fSl9KSxXPTNEZS5mPQppbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmxlZCYmIWUuYmFyfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHU9CmVzLm1h cChmdW5jdGlvbihlLHQpe3JldHVybnt4OnkoZSx0KSx5OmIoZSx0KX19KX0pO0MucmFuZ2UoWzAs al0pLGsuZG9tYWluKD0KZDMuZXh0ZW50KGQzLm1lcmdlKHouY29uY2F0KFcpKSxmdW5jdGlvbihl KXtyZXR1cm4gZS54fSkpLnJhbmdlKFswLGpdKTt2YXIgPQpYPTNETi5zZWxlY3RBbGwoImcubnYt d3JhcC5udi1saW5lUGx1c0JhciIpLmRhdGEoW2VdKSxWPTNEWC5lbnRlcigpLmFwcGVuZCg9CiJn IikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVBsdXNCYXIiKS5hcHBlbmQoImci KSwkPTNEWC5zZWxlY3QoIj0KZyIpO1YuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdl bmRXcmFwIik7dmFyIEo9M0RWLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudi1mb2N1cyIp O0ouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxKLmFwcGVuZCgiZyI9 CikuYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlzIiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXkyIG52LWF4aXMiKT0KLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJz V3JhcCIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sPQppbmVzV3JhcCIpO3ZhciBL PTNEVi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRleHQiKTtLLmFwcGVuZCgiZyIp LmE9CnR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYteTEgbnYtYXhpcyIpLEsuYT0KcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52 LWF4aXMiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyPQpzV3JhcCIpLEsuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxLLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXM9CnMiLCJudi1icnVzaEJhY2tncm91bmQiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYteCBudi1icnVzaCIpLEUmJihjLj0Kd2lkdGgoai8yKSwkLnNlbGVjdCgiLm52LWxlZ2Vu ZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmlnPQppbmFsS2V5PTNE ZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuZGVmaW5lZD9lLmtleTplLm9yaWdpbmFsS2V5LGUua2V5 PTNEZS5vcmk9CmdpbmFsS2V5KyhlLmJhcj8iIChsZWZ0IGF4aXMpIjoiIChyaWdodCBheGlzKSIp LGV9KSkuY2FsbChjKSxwLnRvcCE9M0RjLmhlaT0KZ2h0KCkmJihwLnRvcD0zRGMuaGVpZ2h0KCks Rj0zRChtfHxwYXJzZUludChOLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktcC50b3AtPQpwLmJvdHRv bS1nKSwkLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIitqLzIrIiw9CiIrIC1wLnRvcCsiKSIpKSxYLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK3AubGVmdCsiLCIrcC50b3ArIikiKSxpLndpZD0KdGgoaikuaGVpZ2h0KEkpLmNvbG9yKGUu bWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihmPQp1bmN0 aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0uYmFyfSkpLG4ud2lkdGgoaikuaGVp Z2h0KEkpLmNvbG9yKGU9Ci5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQp fSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbj0KXS5kaXNhYmxlZCYmIWVbbl0uYmFy fSkpO3ZhciBRPTNEJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi1iYXJzV3JhcCIpLmRhdHVtPQoo Ui5sZW5ndGg/Ujpbe3ZhbHVlczpbXX1dKSxHPTNEJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi1s aW5lc1dyYXAiKS5kYXR1bSg9ClVbMF0uZGlzYWJsZWQ/W3t2YWx1ZXM6W119XTpVKTskLnNlbGVj dCgiLm52LWNvbnRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cj0KYW5zbGF0ZSgwLCIrKEYrcC5i b3R0b20rZC50b3ApKyIpIiksUS5jYWxsKGkpLEcuY2FsbChuKSxoLngoaykub24oImJydXNoIixy PQp0KSx4JiZoLmV4dGVudCh4KTt2YXIgWT0zRCQuc2VsZWN0KCIubnYtYnJ1c2hCYWNrZ3JvdW5k Iikuc2VsZWN0QWxsKCJnIikuZGE9CnRhKFt4fHxoLmV4dGVudCgpXSksWj0zRFkuZW50ZXIoKS5h cHBlbmQoImciKTtaLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIj0KLCJsZWZ0IikuYXR0cigi eCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixJKSxaLmFwcGVuZCgicmVjdCIpLmF0dHIo ImNsPQphc3MiLCJyaWdodCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImhlaWdodCIs SSk7dmFyIGV0PTNEJC5zZWxlY3QoIi49Cm52LXgubnYtYnJ1c2giKS5jYWxsKGgpO2V0LnNlbGVj dEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsSSksZXQuc2VsZWN0QWxsKD0KIi5yZXNpemUiKS5h cHBlbmQoInBhdGgiKS5hdHRyKCJkIix0dCksby50aWNrcyhqLzEwMCkudGlja1NpemUoLUksMCks JC5zZWxlPQpjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgwLCIrTy5yYW5nZSgpWzA9Cl0rIikiKSwkLnNlbGVjdCgiLm52LWNvbnRleHQg Lm52LXgubnYtYXhpcyIpLmNhbGwobyksZi5zY2FsZShPKS50aWNrcyhJLzM2KT0KLnRpY2tTaXpl KC1qLDApLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFj aXR5IixSLmxlPQpuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitrLnJh bmdlKClbMF0rIikiKSwkLnNlbGVjdCgiLm52LWM9Cm9udGV4dCAubnYteTEubnYtYXhpcyIpLmNh bGwoZiksbC5zY2FsZShNKS50aWNrcyhJLzM2KS50aWNrU2l6ZShSLmxlbmd0aD8wOj0KLWosMCks JC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Mi5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFUu bGVuZ3RoPzE6MCkuPQphdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitrLnJhbmdlKClbMV0r IiwwKSIpLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnY9Ci15Mi5udi1heGlzIikuY2FsbChsKSxj LmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Qi51cGRhdGUoKX0pLD0KRC5v bigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe1QmJkgoZSxQLnBhcmVudE5vZGUpfSkscnQoKX0p LEJ9dmFyIHQ9M0RlLm1vPQpkZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMubGluZSgpLHI9M0RlLm1v ZGVscy5oaXN0b3JpY2FsQmFyKCksaT0zRGUubW9kZWxzLmg9CmlzdG9yaWNhbEJhcigpLHM9M0Rl Lm1vZGVscy5heGlzKCksbz0zRGUubW9kZWxzLmF4aXMoKSx1PTNEZS5tb2RlbHMuYXhpcygpLD0K YT0zRGUubW9kZWxzLmF4aXMoKSxmPTNEZS5tb2RlbHMuYXhpcygpLGw9M0RlLm1vZGVscy5heGlz KCksYz0zRGUubW9kZWxzLmxlPQpnZW5kKCksaD0zRGQzLnN2Zy5icnVzaCgpLHA9M0R7dG9wOjMw LHJpZ2h0OjMwLGJvdHRvbTozMCxsZWZ0OjYwfSxkPTNEe3RvcDo9CjAscmlnaHQ6MzAsYm90dG9t OjIwLGxlZnQ6NjB9LHY9M0RudWxsLG09M0RudWxsLGc9M0QxMDAseT0zRGZ1bmN0aW9uKGUpe3Jl dD0KdXJuIGUueH0sYj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LHc9M0RlLnV0aWxzLmRlZmF1 bHRDb2xvcigpLEU9M0QhMCxTLHg9Cj0zRG51bGwsVD0zRCEwLE49M0RmdW5jdGlvbihlLHQsbixy LGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ID0KIit0KyI8L3A+In0sQyxr LEwsQSxPLE0sXz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLEQ9M0RkMy5kaXNwYXRjaCgidG9vbHRp cFNoPQpvdyIsInRvb2x0aXBIaWRlIiwiYnJ1c2giKSxQPTNEMDt0LmNsaXBFZGdlKCEwKSxuLmlu dGVyYWN0aXZlKCExKSxzLm9yaWVudCg9CiJib3R0b20iKS50aWNrUGFkZGluZyg1KSx1Lm9yaWVu dCgibGVmdCIpLGEub3JpZW50KCJyaWdodCIpLG8ub3JpZW50KCJib3R0bz0KbSIpLnRpY2tQYWRk aW5nKDUpLGYub3JpZW50KCJsZWZ0IiksbC5vcmllbnQoInJpZ2h0Iik7dmFyIEg9M0RmdW5jdGlv bihuLHIpPQp7UyYmKG4ucG9pbnRJbmRleCs9M0RNYXRoLmNlaWwoU1swXSkpO3ZhciBpPTNEbi5w b3NbMF0rKHIub2Zmc2V0TGVmdHx8MCksbz0KPTNEbi5wb3NbMV0rKHIub2Zmc2V0VG9wfHwwKSxm PTNEcy50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW50SW5kZXgpPQopLGw9M0Qobi5z ZXJpZXMuYmFyP3U6YSkudGlja0Zvcm1hdCgpKHQueSgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSks Yz0zRE4obi49CnNlcmllcy5rZXksZixsLG4sQik7ZS50b29sdGlwLnNob3coW2ksb10sYyxuLnZh bHVlPDA/Im4iOiJzIixudWxsLHIpfTtyZXR1cj0KbiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3AuPQpsZWZ0LGUu cG9zWzFdK3AudG9wXSxELnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3V0LnRvb2w9CnRpcCIsZnVuY3Rpb24oZSl7RC50b29sdGlwSGlkZShlKX0pLHIuZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcD0KIixmdW5jdGlvbihlKXtlLnBvcz0zRFtl LnBvc1swXStwLmxlZnQsZS5wb3NbMV0rcC50b3BdLEQudG9vbHRpcFNob3coZSl9KSxyPQouZGlz cGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtELnRvb2x0aXBI aWRlKGUpfSksRC5vbig9CiJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtUJiZlLnRvb2x0aXAuY2xl YW51cCgpfSksQi5kaXNwYXRjaD0zREQsQi5sZWdlbmQ9Cj0zRGMsQi5saW5lcz0zRHQsQi5saW5l czI9M0RuLEIuYmFycz0zRHIsQi5iYXJzMj0zRGksQi54QXhpcz0zRHMsQi54MkF4aXM9Cj0zRG8s Qi55MUF4aXM9M0R1LEIueTJBeGlzPTNEYSxCLnkzQXhpcz0zRGYsQi55NEF4aXM9M0RsLGQzLnJl YmluZChCLHQsImRlZj0KaW5lZCIsInNpemUiLCJjbGlwVm9yb25vaSIsImludGVycG9sYXRlIiks Qi5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iPQppbmQoQiksQi54PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLHQueChlKSxyLngoZSksQik6eX09CixC Lnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsdC55KGUpLHIu eShlKSxCKTpifSxCLm1hcj0KZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHAudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluPQplZCI/ZS50b3A6cC50b3AscC5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6cC5yaWdodCxwLmI9 Cm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnAuYm90dG9t LHAubGVmdD0zRHR5cGVvZiBlLj0KbGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6cC5sZWZ0LEIp OnB9LEIud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh2PTNE ZSxCKTp2fSxCLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyht PQo9M0RlLEIpOm19LEIuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odz0zRGUudXRpbHMuZ2V0Q289Cmxvcih0KSxjLmNvbG9yKHcpLEIpOnd9LEIuc2hvd0xlZ2Vu ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKEU9M0RlLEIpOkV9LEIu dG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQik6 VH0sPQpCLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KE49M0RlLEIpOk59LEIubm9EYXQ9CmE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oXz0zRGUsQik6X30sQi5icnVzaEV4dGVudD0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEIpOnh9LEJ9LGUubW9kZWxzLm11bHRpQmFyPTNEZnVu Y3Rpb24oPQope2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgZz0z RG4tdC5sZWZ0LXQucmlnaHQsQz0zRHItdC49CnRvcC10LmJvdHRvbSxrPTNEZDMuc2VsZWN0KHRo aXMpO2QmJmUubGVuZ3RoJiYoZD0zRFt7dmFsdWVzOmVbMF0udmFsdWVzLm1hcD0KKGZ1bmN0aW9u KGUpe3JldHVybnt4OmUueCx5OjAsc2VyaWVzOmUuc2VyaWVzLHNpemU6LjAxfX0pfV0pLGMmJihl PTNEZDMubGF5PQpvdXQuc3RhY2soKS5vZmZzZXQoaCkudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHVlc30pLnkoYSkoIWUubGVuZ3RoJiY9CmQ/ZDplKSksZS5mb3JFYWNoKGZ1bmN0aW9u KGUsdCl7ZS52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNlcmllcz0zRHR9KT0KfSksYyYm ZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsbil7dmFyIHI9M0QwLGk9M0QwO2UubWFwKGZ1bmN0 aW9uKGUpe3ZhciB0PQo9M0RlLnZhbHVlc1tuXTt0LnNpemU9M0RNYXRoLmFicyh0LnkpLHQueTww Pyh0LnkxPTNEaSxpLT0zRHQuc2l6ZSk6KHQueTE9M0Q9CnQuc2l6ZStyLHIrPTNEdC5zaXplKX0p fSk7dmFyIEw9M0R5JiZiP1tdOmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcz0KLm1h cChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5MDplLnkwLHkxOmUueTF9 fSl9KTtpLmRvbWFpbih5PQp8fGQzLm1lcmdlKEwpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54 fSkpLnJhbmdlQmFuZHMod3x8WzAsZ10sUykscy5kb21haW49CihifHxkMy5leHRlbnQoZDMubWVy Z2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjP2UueT4wP2UueTE6ZS55MStlLnk6ZS55fT0K KS5jb25jYXQoZikpKS5yYW5nZShFfHxbQywwXSksaS5kb21haW4oKVswXT0zRD0zRD0zRGkuZG9t YWluKClbMV0mJihpLmRvbWFpPQpuKClbMF0/aS5kb21haW4oW2kuZG9tYWluKClbMF0taS5kb21h aW4oKVswXSouMDEsaS5kb21haW4oKVsxXStpLmRvbWFpbigpWzE9Cl0qLjAxXSk6aS5kb21haW4o Wy0xLDFdKSkscy5kb21haW4oKVswXT0zRD0zRD0zRHMuZG9tYWluKClbMV0mJihzLmRvbWFpbigp Wz0KMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0rcy5kb21haW4oKVswXSouMDEscy5kb21haW4o KVsxXS1zLmRvbWFpbigpWzFdKi4wPQoxXSk6cy5kb21haW4oWy0xLDFdKSksVD0zRFR8fGksTj0z RE58fHM7dmFyIEE9M0RrLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW09CnVsdGliYXIiKS5kYXRh KFtlXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3Jh cCBudj0KLW11bHRpYmFyIiksTT0zRE8uYXBwZW5kKCJkZWZzIiksXz0zRE8uYXBwZW5kKCJnIiks RD0zREEuc2VsZWN0KCJnIik7Xy5hcHBlPQpuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBz IiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiw9CiIrdC50b3ArIiki KSxNLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK28pLmFwcGVu ZCgicmVjdD0KIiksQS5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitvKyIgcmVjdCIpLmF0dHIoIndp ZHRoIixnKS5hdHRyKCJoZWlnaHQiLEMpLEQuPQphdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYt ZWRnZS1jbGlwLSIrbysiKSI6IiIpO3ZhciBQPTNEQS5zZWxlY3QoIi5udi1ncm89CnVwcyIpLnNl bGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24o ZSx0KXtyZXR1cj0KbiB0fSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3Bh Y2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0PQp5IiwxZS02KSxQLmV4aXQoKS5zZWxlY3RB bGwoInJlY3QubnYtYmFyIikuYXR0cigieSIsZnVuY3Rpb24oZSl7cmV0dXJuIGM/Tig9CmUueTAp Ok4oMCl9KS5hdHRyKCJoZWlnaHQiLDApLnJlbW92ZSgpLFAuYXR0cigiY2xhc3MiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIj0KbnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixm dW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlPQooImZpbGwiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHAoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHA9Cihl LHQpfSksUC5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC43 NSk7dmFyIEg9M0RQLnNlbD0KZWN0QWxsKCJyZWN0Lm52LWJhciIpLmRhdGEoZnVuY3Rpb24odCl7 cmV0dXJuIGQmJiFlLmxlbmd0aD9kLnZhbHVlczp0LnZhbHVlPQpzfSk7SC5leGl0KCkucmVtb3Zl KCk7dmFyIEI9M0RILmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW89 Cm4oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2 ZSJ9KS5hdHRyKCJ4IixmdW5jdD0KaW9uKHQsbixyKXtyZXR1cm4gYz8wOnIqaS5yYW5nZUJhbmQo KS9lLmxlbmd0aH0pLmF0dHIoInkiLGZ1bmN0aW9uKGUpe3JldHVyPQpuIE4oYz9lLnkwOjApfSku YXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS8oYz8xOmUubGVuZ3Ro KSk9Ci5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK2ko dShlLHQpKSsiLDApIn0pO0guc3R5bD0KZSgiZmlsbCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBw KGUsbix0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyPQpldHVybiBwKGUsbix0 KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQo ImhvdmU9CnIiLCEwKSx4LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNl cmllczplW3Quc2VyaWVzXSxwb3M6W2kodT0KKHQsbikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5n dGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKHQsbikrKGM/dC55MDowPQopKV0scG9pbnRJ bmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIs ZnVuY3Rpb249Cih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLHguZWxl bWVudE1vdXNlb3V0KHt2YWx1ZTphKHQsbikscD0Kb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxw b2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkuPQpvbigiY2xp Y2siLGZ1bmN0aW9uKHQsbil7eC5lbGVtZW50Q2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNl cmllczplW3Quc2U9CnJpZXNdLHBvczpbaSh1KHQsbikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5n dGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKD0KdCxuKSsoYz90LnkwOjApKV0scG9pbnRJ bmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zPQp0b3BQ cm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG4pe3guZWxlbWVudERibENs aWNrKHt2YWx1ZTphKHQ9CixuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W2kodSh0 LG4pKStpLnJhbmdlQmFuZCgpKihjP2UubGVuZ3RoLzI6dD0KLnNlcmllcysuNSkvZS5sZW5ndGgs cyhhKHQsbikrKGM/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllPQpz LGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLEguYXR0cigiY2xhc3Mi LGZ1bmN0aW9uKGUsdCl7cmU9CnR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJh ciBwb3NpdGl2ZSJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aT0Kb24oZSx0KXtyZXR1cm4idHJh bnNsYXRlKCIraSh1KGUsdCkpKyIsMCkifSksdiYmKG18fChtPTNEZS5tYXAoZnVuY3Rpb24oKXty PQpldHVybiEwfSkpLEguc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdi KHYoZSx0KSkuZGFya2VyKG0ubWE9CnAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihm dW5jdGlvbihlLHQpe3JldHVybiFtW3RdfSlbbl0pLnRvU3RyaW5nKD0KKX0pLnN0eWxlKCJzdHJv a2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKHYoZSx0KSkuZGFya2VyKG0ubWFwKGZ1 bmN0PQppb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFtW3Rd fSlbbl0pLnRvU3RyaW5nKCl9KSksYz89CkguYXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4g cyhjP2UueTE6MCl9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKGUsdCl7cj0KZXR1cm4gTWF0aC5t YXgoTWF0aC5hYnMocyhlLnkrKGM/ZS55MDowKSktcyhjP2UueTA6MCkpLDEpfSkuYXR0cigieCIs ZnVuY3RpPQpvbih0LG4pe3JldHVybiBjPzA6dC5zZXJpZXMqaS5yYW5nZUJhbmQoKS9lLmxlbmd0 aH0pLmF0dHIoIndpZHRoIixpLnJhbmdlQmE9Cm5kKCkvKGM/MTplLmxlbmd0aCkpOkguYXR0cigi eCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXJpZXMqaS5yYW5nZUJhbmQoKT0KL2UubGVuZ3Ro fSkuYXR0cigid2lkdGgiLGkucmFuZ2VCYW5kKCkvZS5sZW5ndGgpLmF0dHIoInkiLGZ1bmN0aW9u KGUsdCl7cmV0PQp1cm4gYShlLHQpPDA/cygwKTpzKDApLXMoYShlLHQpKTwxP3MoMCktMTpzKGEo ZSx0KSl8fDB9KS5hdHRyKCJoZWlnaHQiLGZ1bmM9CnRpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgo TWF0aC5hYnMocyhhKGUsdCkpLXMoMCkpLDEpfHwwfSksVD0zRGkuY29weSgpLE49Cj0zRHMuY29w eSgpfSksQ312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxy PTNENTAwLGk9Cj0zRGQzLnNjYWxlLm9yZGluYWwoKSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0z RE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZT0KNCksdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBl Lnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEWzBdLGw9M0QhMCxjPQo9M0QhMSxo PTNEInplcm8iLHA9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGQ9M0QhMSx2PTNEbnVsbCxtLGc9 M0QxMjAwLHksYiw9CncsRSxTPTNELjEseD0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxl bWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZT0KbGVtZW50TW91c2VvdmVyIiwiZWxlbWVu dE1vdXNlb3V0IiksVCxOO3JldHVybiBDLmRpc3BhdGNoPTNEeCxDLm9wdGlvbnM9M0RlPQoudXRp bHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odT0zRGU9CixDKTp1fSxDLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYT0zRGUsQyk6YX0sQy5tYXJnaW49M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvPQpw OnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQu cmlnaHQsdC5ib3R0b209M0Q9CnR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRv bTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRD0KInVuZGVmaW5lZCI/ZS5sZWZ0 OnQubGVmdCxDKTp0fSxDLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n PQp0aD8obj0zRGUsQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocj0zRGUsQyk6cn09CixDLnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhpPTNEZSxDKTppfSxDLnlTY2FsZT0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3Jl dHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEMpOnl9LEMueURvbWFpbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KGI9M0RlLEMpOmJ9LEMueFJhbmdlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEMpOj0Kd30sQy55UmFuZ2U9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsQyk6RX0sQy5mb3Jj ZVk9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxDKTpmfSxD LnN0YWNrZWQ9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxD KTpjfSxDLnN0YWNrT2Zmc2V0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0 aD8oaD0zRGUsQyk6aH0sQy5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhsPQo9M0RlLEMpOmx9LEMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocD0zRGUudXRpbHMuZ2V0Q289Cmxvcih0KSxDKTpwfSxDLmJhckNvbG9yPTNE ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLnV0aWxzLj0KZ2V0Q29s b3IodCksQyk6dn0sQy5kaXNhYmxlZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhtPTNEZSxDPQopOm19LEMuaWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obz0zRGUsQyk6b30sQy5oaWRlYWJsZT0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGQ9M0RlLEMpOmR9LEMuZGVsYXk9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBh cmd1bWVudHMubGVuZ3RoPyhnPTNEZSxDKTpnfSxDLmdyb3VwU3BhY2luZz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KFM9M0RlLEMpOlN9LEN9LGUubW9kZWxzLm11bHRp QmFyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEEoZSk9CntyZXR1cm4gZS5lYWNoKGZ1bmN0 aW9uKGUpe3ZhciBiPTNEZDMuc2VsZWN0KHRoaXMpLGs9M0R0aGlzLE89M0QodXx8cGFyc2VJbj0K dChiLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxNPTNEKGF8fHBhcnNlSW50 KGIuc3R5bGUoImhlaWdodCIpPQopfHw0MDApLW8udG9wLW8uYm90dG9tO0EudXBkYXRlPTNEZnVu Y3Rpb24oKXtiLmNhbGwoQSl9LEEuY29udGFpbmVyPTNEdGhpcyw9ClMuZGlzYWJsZWQ9M0RlLm1h cChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheCl7dmFyIF87eD0zRHt9O2Zv cj0KKF8gaW4gUylTW19daW5zdGFuY2VvZiBBcnJheT94W19dPTNEU1tfXS5zbGljZSgwKTp4W19d PTNEU1tfXX1pZighZXx8IWUubGVuPQpndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4g ZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgRD0zRGIuc2VsZWM9CnRBbGwoIi5udi1ub0Rh dGEiKS5kYXRhKFtUXSk7cmV0dXJuIEQuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFz cyIsIj0KbnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5j aG9yIiwibWlkZGxlIiksRC5hdHRyKCJ4PQoiLG8ubGVmdCtPLzIpLmF0dHIoInkiLG8udG9wK00v MikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLEF9Yi5zZWxlY3RBbGw9CigiLm52LW5vRGF0 YSIpLnJlbW92ZSgpLHc9M0R0LnhTY2FsZSgpLEU9M0R0LnlTY2FsZSgpO3ZhciBQPTNEYi5zZWxl Y3RBbGwoIj0KZy5udi13cmFwLm52LW11bHRpQmFyV2l0aExlZ2VuZCIpLmRhdGEoW2VdKSxIPTNE UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVs dGlCYXJXaXRoTGVnZW5kIikuYXBwZW5kKCJnIiksQj0zRFAuc2VsZWN0KCJnIik9CjtILmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksSC5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LT0KeSBudi1heGlzIiksSC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJh cnNXcmFwIiksSC5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEgu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS49CndpZHRo KE8tQygpKSx0LmJhckNvbG9yKCkmJmUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuY29sb3I9M0Rk My5yZ2IoIiNjY2MiKT0KLmRhcmtlcih0KjEuNSkudG9TdHJpbmcoKX0pLEIuc2VsZWN0KCIubnYt bGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksby50PQpvcCE9M0RpLmhlaWdodCgpJiYoby50 b3A9M0RpLmhlaWdodCgpLE09M0QoYXx8cGFyc2VJbnQoYi5zdHlsZSgiaGVpZ2h0IikpfHw9CjQw MCktby50b3Atby5ib3R0b20pLEIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZT0KKCIrQygpKyIsIisgLW8udG9wKyIpIikpO2lmKGwpe3ZhciBqPTNE W3trZXk6Ikdyb3VwZWQiLGRpc2FibGVkOnQuc3RhY2tlZCgpPQp9LHtrZXk6IlN0YWNrZWQiLGRp c2FibGVkOiF0LnN0YWNrZWQoKX1dO3Mud2lkdGgoQygpKS5jb2xvcihbIiM0NDQiLCIjNDQ0Iiw9 CiIjNDQ0Il0pLEIuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oaikuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKD0KMCwiKyAtby50b3ArIikiKS5jYWxsKHMpfVAuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRvcCsiPQopIiksZCYmQi5zZWxlY3Qo Ii5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitPKyIsMCkiKSx0 LmQ9CmlzYWJsZWQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSkud2lkdGgo TykuaGVpZ2h0KE0pLmNvbG9yKGUubT0KYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8 ZihlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uPQpkaXNhYmxlZH0pKTt2 YXIgRj0zREIuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihl KXtyZXQ9CnVybiFlLmRpc2FibGVkfSkpO0YuY2FsbCh0KTtpZihoKXtuLnNjYWxlKHcpLnRpY2tz KE8vMTAwKS50aWNrU2l6ZSgtTSwwKSxCLj0Kc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitFLnJhbmdlKClbMF0rIikiKSxCPQouc2VsZWN0KCIu bnYteC5udi1heGlzIikuY2FsbChuKTt2YXIgST0zREIuc2VsZWN0KCIubnYteC5udi1heGlzID4g ZyIpLnNlbGU9CmN0QWxsKCJnIik7SS5zZWxlY3RBbGwoImxpbmUsIHRleHQiKS5zdHlsZSgib3Bh Y2l0eSIsMSk7aWYobSl7dmFyIHE9M0RmdW5jdD0KaW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgi K2UrIiwiK3QrIikifSxSPTNENSxVPTNEMTc7SS5zZWxlY3RBbGwoInRleHQiKS5hPQp0dHIoInRy YW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxKDAsbiUyPTNEPTNEMD9SOlUpfSk7dmFy IHo9M0RkMy5zZWw9CmVjdEFsbCgiLm52LXgubnYtYXhpcyAubnYtd3JhcCBnIGcgdGV4dCIpWzBd Lmxlbmd0aDtCLnNlbGVjdEFsbCgiLm52LXgubnYtYT0KeGlzIC5udi1heGlzTWF4TWluIHRleHQi KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEoMCx0PTNEPTNEPQo9M0Qw fHx6JTIhPTNEPTNEMD9VOlIpfSl9diYmSS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4gbiVN YXRoLmNlaWwoZVswXS49CnZhbHVlcy5sZW5ndGgvKE8vMTAwKSkhPTNEPTNEMH0pLnNlbGVjdEFs bCgidGV4dCwgbGluZSIpLnN0eWxlKCJvcGFjaXR5IiwwKT0KLGcmJkkuc2VsZWN0QWxsKCIudGlj ayB0ZXh0IikuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKCIrZysiIDAsMCkiKS5zdHlsZSgiPQp0 ZXh0LWFuY2hvciIsZz4wPyJzdGFydCI6ImVuZCIpLEIuc2VsZWN0KCIubnYteC5udi1heGlzIiku c2VsZWN0QWxsKCJnLm52LWE9Cnhpc01heE1pbiB0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfXAm JihyLnNjYWxlKEUpLnRpY2tzKE0vMzYpLnRpY2tTaXplKC1PLD0KMCksQi5zZWxlY3QoIi5udi15 Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24o PQplKXtTPTNEZSxOLnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJs ZWdlbmRDbGljayIsZnVuY3Rpb249CihlLG4pe2lmKCFlLmRpc2FibGVkKXJldHVybjtqPTNEai5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9M0QhMCxlfT0KKSxlLmRpc2FibGVkPTNE ITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQiOnQuc3RhY2tlZCghMSk7YnJlYWs7Y2FzZSJT dGFjPQprZWQiOnQuc3RhY2tlZCghMCl9Uy5zdGFja2VkPTNEdC5zdGFja2VkKCksTi5zdGF0ZUNo YW5nZShTKSxBLnVwZGF0ZSgpfSksTi49Cm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7eSYm TChlLGsucGFyZW50Tm9kZSl9KSxOLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuYz0KdGlvbihuKXt0eXBl b2Ygbi5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uu ZGlzYWJsPQplZD0zRG4uZGlzYWJsZWRbdF19KSxTLmRpc2FibGVkPTNEbi5kaXNhYmxlZCksdHlw ZW9mIG4uc3RhY2tlZCE9M0QidW5kZWZpbmU9CmQiJiYodC5zdGFja2VkKG4uc3RhY2tlZCksUy5z dGFja2VkPTNEbi5zdGFja2VkKSxBLnVwZGF0ZSgpfSl9KSxBfXZhciB0PTNEZT0KLm1vZGVscy5t dWx0aUJhcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5t b2RlbHMubGVnPQplbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRHt0b3A6MzAscmlnaHQ6 MjAsYm90dG9tOjUwLGxlZnQ6NjB9LHU9M0RudWw9CmwsYT0zRG51bGwsZj0zRGUudXRpbHMuZGVm YXVsdENvbG9yKCksbD0zRCEwLGM9M0QhMCxoPTNEITAscD0zRCEwLGQ9M0QhMSx2PQo9M0QhMCxt PTNEITEsZz0zRDAseT0zRCEwLGI9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+Iitl KyI8L2gzPiIrIjw9CnA+IituKyIgb24gIit0KyI8L3A+In0sdyxFLFM9M0R7c3RhY2tlZDohMX0s eD0zRG51bGwsVD0zRCJObyBEYXRhIEF2YWlsYWJsZT0KLiIsTj0zRGQzLmRpc3BhdGNoKCJ0b29s dGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpPQosQz0z RGZ1bmN0aW9uKCl7cmV0dXJuIGw/MTgwOjB9LGs9M0QwO3Quc3RhY2tlZCghMSksbi5vcmllbnQo ImJvdHRvbSIpLnRpY2s9ClBhZGRpbmcoNykuaGlnaGxpZ2h0WmVybyghMCkuc2hvd01heE1pbigh MSkudGlja0Zvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZT0KfSksci5vcmllbnQoZD8icmlnaHQi OiJsZWZ0IikudGlja0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSkscy51cGRhdGVTdGF0ZSghPQox KTt2YXIgTD0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHww KSx1PTNEaS5wb3NbMV0rKHM9Ci5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0Lngo KShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGbz0Kcm1hdCgpKHQueSgpKGkucG9p bnQsaS5wb2ludEluZGV4KSksbD0zRGIoaS5zZXJpZXMua2V5LGEsZixpLEEpO2UudG9vbHRpcC5z PQpob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlb3Y9CmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2Uu cG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnRvcF0sTi50b29sdGlwUz0KaG93KGUpfSksdC5kaXNw YXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe04udG9vbHRpcEhp ZGUoPQplKX0pLE4ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3kmJmUudG9vbHRpcC5jbGVh bnVwKCl9KSxBLmRpc3BhdGNoPTNETiw9CkEubXVsdGliYXI9M0R0LEEubGVnZW5kPTNEaSxBLnhB eGlzPTNEbixBLnlBeGlzPTNEcixkMy5yZWJpbmQoQSx0LCJ4IiwieSIsIj0KeERvbWFpbiIsInlE b21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJjbGlwRWRnZSIsImlk Iiwic3RhPQpja2VkIiwic3RhY2tPZmZzZXQiLCJkZWxheSIsImJhckNvbG9yIiwiZ3JvdXBTcGFj aW5nIiksQS5vcHRpb25zPTNEZS51dGlscy49Cm9wdGlvbnNGdW5jLmJpbmQoQSksQS5tYXJnaW49 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby50b3A9Cj0zRHR5cGVvZiBl LnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQh PTNEInVuZD0KZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3R0 b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206PQpvLmJvdHRvbSxvLmxlZnQ9M0R0eXBlb2YgZS5s ZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZnQsQSk6b30sQS53aWR0aD0KPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEEpOnV9LEEuaGVpZ2h0PTNEZnVu Y3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsQSk6YX0sQS5jb2xvcj0z RGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENv bG9yKHQpLGkuY29sb3IoZiksQSk6Zn0sQS5zaG93Q29udHJvbHM9M0RmdW5jdGlvbj0KKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxBKTpsfSxBLnNob3dMZWdlbmQ9M0RmdW5jdGlv bihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxBKTpjfSxBLnNob3dYQXhpcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KGg9M0RlLEEpOmh9LEEuc2hv d1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLD0KQSk6 cH0sQS5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZD0zRGUsci5vcmllPQpudChlPyJyaWdodCI6ImxlZnQiKSxBKTpkfSxBLnJlZHVjZVhUaWNr cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KHY9M0RlLEEpOnZ9LEEu cm90YXRlTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9Cj0z RGUsQSk6Z30sQS5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG09M0RlLEEpOj0KbX0sQS50b29sdGlwPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGI9M0RlLEEpOmJ9LEEudG9vbHRpcHM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxBKTp5fSxBLnRvb2x0aXBDb250ZW50PTNEZnVuYz0K dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsQSk6Yn0sQS5zdGF0ZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLEEpOlN9LEEuZGVmYXVs dFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxlbmd0aD8oeD0zRGUsQSk6 eH0sQS5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUs QT0KKTpUfSxBLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhrPTNEZSxBKTprPQp9LEF9LGUubW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbD0z RGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKGY9CnVuY3Rpb24oZSl7dmFy IGk9M0RuLXQubGVmdC10LnJpZ2h0LHk9M0RyLXQudG9wLXQuYm90dG9tLEM9M0RkMy5zZWxlY3Qo dGhpcz0KKTtwJiYoZT0zRGQzLmxheW91dC5zdGFjaygpLm9mZnNldCgiemVybyIpLnZhbHVlcyhm dW5jdGlvbihlKXtyZXR1cm4gZS52YWx1PQplc30pLnkoYSkoZSkpLGUuZm9yRWFjaChmdW5jdGlv bihlLHQpe2UudmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXJpZXM9Cj0zRHR9KX0pLHAm JmVbMF0udmFsdWVzLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPTNEMCxpPTNEMDtlLm1hcChmdW5j dGlvbihlKT0Ke3ZhciB0PTNEZS52YWx1ZXNbbl07dC5zaXplPTNETWF0aC5hYnModC55KSx0Lnk8 MD8odC55MT0zRGktdC5zaXplLGktPTNEdC5zPQppemUpOih0LnkxPTNEcixyKz0zRHQuc2l6ZSl9 KX0pO3ZhciBrPTNEYiYmdz9bXTplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS49CnZhbHVlcy5t YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTphKGUsdCkseTA6ZS55MCx5MTplLnkx fX0pfSk7cy5kbz0KbWFpbihifHxkMy5tZXJnZShrKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUu eH0pKS5yYW5nZUJhbmRzKEV8fFswLHldLC4xKSxvPQouZG9tYWluKHd8fGQzLmV4dGVudChkMy5t ZXJnZShrKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHA/ZS55PjA/ZS55MStlLnk6ZS49CnkxOmUu eX0pLmNvbmNhdChmKSkpLGQmJiFwP28ucmFuZ2UoU3x8W28uZG9tYWluKClbMF08MD9tOjAsaS0o by5kb21haW4oKVsxXT0KPjA/bTowKV0pOm8ucmFuZ2UoU3x8WzAsaV0pLFQ9M0RUfHxzLE49M0RO fHxkMy5zY2FsZS5saW5lYXIoKS5kb21haW4oby5kb21hPQppbigpKS5yYW5nZShbbygwKSxvKDAp XSk7dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXU9Cmx0 aWJhckhvcml6b250YWwiKS5kYXRhKFtlXSksQT0zREwuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52ZDMgbj0Kdi13cmFwIG52LW11bHRpYmFySG9yaXpvbnRhbCIpLE89M0RBLmFw cGVuZCgiZGVmcyIpLE09M0RBLmFwcGVuZCgiZyIpLF89M0RMPQouc2VsZWN0KCJnIik7TS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLEwuYXR0cigidHJhbnNmb3JtIiwidHI9 CmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEQ9M0RMLnNlbGVjdCgiLm52LWdy b3VwcyIpLnNlbGVjdEFsbCgiLj0KbnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBl fSxmdW5jdGlvbihlLHQpe3JldHVybiB0fSk7RC5lbnRlcigpLmFwPQpwZW5kKCJnIikuc3R5bGUo InN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxZS02KSxELmV4aXQo KS49CnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUt NikucmVtb3ZlKCksRC5hdHRyKCJjbD0KYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91 cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUu aG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQpfSkuc3R5bGUo InN0cm89CmtlIixmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCl9KSxELnN0eWxlKCJzdHJva2Ut b3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtbz0KcGFjaXR5IiwuNzUpO3ZhciBQPTNERC5zZWxlY3RB bGwoImcubnYtYmFyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1PQplc30pO1AuZXhp dCgpLnJlbW92ZSgpO3ZhciBIPTNEUC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Q9Cmlvbih0LG4scil7cmV0dXJuInRyYW5zbGF0ZSgiK04ocD90LnkwOjApKyIsIiso cD8wOnIqcy5yYW5nZUJhbmQoKS9lLmxlbmd0aD0KK3ModSh0LG4pKSkrIikifSk7SC5hcHBlbmQo InJlY3QiKS5hdHRyKCJ3aWR0aCIsMCkuYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFuPQpkKCkvKHA/ MTplLmxlbmd0aCkpLFAub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhp cykuY2xhc3NlZCg9CiJob3ZlciIsITApLHguZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4p LHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvcz0KOltvKGEodCxuKSsocD90LnkwOjApKSxz KHUodCxuKSkrcy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lPQoubGVu Z3RoXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24o Im1vdXNlb3V0IixmdW49CmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVy IiwhMSkseC5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmEodD0KLG4pLHBvaW50OnQsc2VyaWVzOmVb dC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50PQp9 KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXt4LmVsZW1lbnRDbGljayh7dmFsdWU6YSh0LG4p LHBvaW50OnQsc2VyaWVzOmU9Clt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQo KSoocD9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aD0KLG8oYSh0LG4pKyhwP3QueTA6 MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2 PQplbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbil7eC5l bGVtZW50RGJsQ2xpY2soe3ZhbHU9CmU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNd LHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHA/ZS5sZW5ndD0KaC8yOnQuc2VyaWVzKy41 KS9lLmxlbmd0aCxvKGEodCxuKSsocD90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4 OnQuPQpzZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksSC5h cHBlbmQoInRleHQiKSxkJiYhcD8oUC49CnNlbGVjdCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9y IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8iZW5kIjoic3Rhcj0KdCJ9KS5hdHRyKCJ5 IixzLnJhbmdlQmFuZCgpLyhlLmxlbmd0aCoyKSkuYXR0cigiZHkiLCIuMzJlbSIpLnRleHQoZnVu Y3Rpb24oPQplLHQpe3JldHVybiBnKGEoZSx0KSl9KSxQLnNlbGVjdCgidGV4dCIpLmF0dHIoIngi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSw9CnQpPDA/LTQ6byhhKGUsdCkpLW8oMCkrNH0pKTpQ LnNlbGVjdEFsbCgidGV4dCIpLnRleHQoIiIpLHYmJiFwPyhILmFwcGVuZCgidD0KZXh0IikuY2xh c3NlZCgibnYtYmFyLWxhYmVsIiwhMCksUC5zZWxlY3QoInRleHQubnYtYmFyLWxhYmVsIikuYXR0 cigidGV4dC1hPQpuY2hvciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/InN0YXJ0Ijoi ZW5kIn0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCk9Ci8oZS5sZW5ndGgqMikpLmF0dHIoImR5Iiwi LjMyZW0iKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0KX0pLFAuc2VsZT0KY3QoInRl eHQubnYtYmFyLWxhYmVsIikuYXR0cigieCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/ bygwKS1vKGEoZSx0PQopKSs0Oi00fSkpOlAuc2VsZWN0QWxsKCJ0ZXh0Lm52LWJhci1sYWJlbCIp LnRleHQoIiIpLFAuYXR0cigiY2xhc3MiLGZ1bmN0aW89Cm4oZSx0KXtyZXR1cm4gYShlLHQpPDA/ Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2ZSJ9KSxjJiYoaHx8KGg9M0RlLj0KbWFw KGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksUC5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0LG4pe3Jl dHVybiBkMy5yZ2IoYyhlPQosdCkpLmRhcmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0 fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWhbdF09Cn0pW25dKS50b1N0cmluZygpfSku c3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkMy5yZ2IoYyhlLHQpKS5kYT0K cmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIWhbdF19KVtuXSkuPQp0b1N0cmluZygpfSkpLHA/UC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK28oZS55MSk9CisiLCIrcyh1KGUsdCkpKyIp In0pLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRo Lj0KYWJzKG8oYShlLHQpK2UueTApLW8oZS55MCkpfSkuYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFu ZCgpKTpQLmF0dHIoInRyYW5zZm9yPQptIixmdW5jdGlvbih0LG4pe3JldHVybiJ0cmFuc2xhdGUo IisoYSh0LG4pPDA/byhhKHQsbikpOm8oMCkpKyIsIisodC5zZXJpZXM9CipzLnJhbmdlQmFuZCgp L2UubGVuZ3RoK3ModSh0LG4pKSkrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0Iixz LnJhbj0KZ2VCYW5kKCkvZS5sZW5ndGgpLmF0dHIoIndpZHRoIixmdW5jdGlvbihlLHQpe3JldHVy biBNYXRoLm1heChNYXRoLmFicyhvKGEoPQplLHQpKS1vKDApKSwxKX0pLFQ9M0RzLmNvcHkoKSxO PTNEby5jb3B5KCl9KSxDfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG89Cm06MCxsZWZ0OjB9 LG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz0zRGQz LnNjYWxlLj0Kb3JkaW5hbCgpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUueX0sZj0zRFswXSxsPTNEZS51 dGlscy5kZWZhdWx0Q29sb3IoKSxjPTNEbnVsbCxoLHA9M0QhMSxkPTNEITEsdj0KPTNEITEsbT0z RDYwLGc9M0RkMy5mb3JtYXQoIiwuMmYiKSx5PTNEMTIwMCxiLHcsRSxTLHg9M0RkMy5kaXNwYXRj aCgiY2hhcnRDPQpsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVu dE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCI9CiksVCxOO3JldHVybiBDLmRpc3BhdGNoPTNE eCxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQyksQy54PTNEZj0KdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQy55PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oYT0zRGUsQyk6YX0sQy5tYXJnaW49M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89Cih0LnRvcD0zRHR5cGVvZiBlLnRvcCE9 M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPQo9M0Qi dW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNE InVuZGVmaW5lZCI/ZS49CmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0z RCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsQyk6dH0sQz0KLndpZHRoPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLEMpOm59LEMuaGVpZ2h0PTNEZnVuY3RpPQpv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn0sQy54U2NhbGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhzPTNEZSxDKTpzfSxDLnlTY2FsZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKG89M0RlLEMpOm99LEMueERv bWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxDKTpifSxD PQoueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxD KTp3fSxDLnhSYW5nZT0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9 M0RlLEMpOkV9LEMueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0 aD8oUz0zRGUsQyk6U30sQy5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0PQpoPyhmPTNEZSxDKTpmfSxDLnN0YWNrZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocD0zRGUsQyk6cH09CixDLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvbG9yKHQpLEMpOj0KbH0sQy5iYXJDb2xv cj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZS51dGlscy5nZXRD b2xvcih0PQopLEMpOmN9LEMuZGlzYWJsZWQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5pZD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGk9M0RlLEMpOml9LEMuZGVsYXk9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh5PTNEZSxDKTp5fSxDLnNob3dWYWx1ZXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW09CmVudHMubGVuZ3RoPyhkPTNEZSxDKTpkfSxDLnNob3dCYXJMYWJlbHM9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyh2PTNEZSxDKTp2fSxDLnZhbHVlRm9y bWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlPQosQyk6Z30s Qy52YWx1ZVBhZGRpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0z RGUsQyk6bX0sQ309CixlLm1vZGVscy5tdWx0aUJhckhvcml6b250YWxDaGFydD0zRGZ1bmN0aW9u KCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKD0KZnVuY3Rpb24oZSl7dmFyIGQ9M0RkMy5z ZWxlY3QodGhpcyksbT0zRHRoaXMsVD0zRCh1fHxwYXJzZUludChkLnN0eWxlKCJ3aWR0PQpoIikp fHw5NjApLW8ubGVmdC1vLnJpZ2h0LGs9M0QoYXx8cGFyc2VJbnQoZC5zdHlsZSgiaGVpZ2h0Iikp fHw0MDApLW8udG9wLW89Ci5ib3R0b207Qy51cGRhdGU9M0RmdW5jdGlvbigpe2QuY2FsbChDKX0s Qy5jb250YWluZXI9M0R0aGlzLGIuZGlzYWJsZWQ9M0RlLj0KbWFwKGZ1bmN0aW9uKGUpe3JldHVy biEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgTDt3PTNEe307Zm9yKEwgaW4gYiliW0xdaW5zPQp0 YW5jZW9mIEFycmF5P3dbTF09M0RiW0xdLnNsaWNlKDApOndbTF09M0RiW0xdfWlmKCFlfHwhZS5s ZW5ndGh8fCFlLmZpbHRlcig9CmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5s ZW5ndGgpe3ZhciBBPTNEZC5zZWxlY3RBbGwoIi5udi1ub0RhdD0KYSIpLmRhdGEoW0VdKTtyZXR1 cm4gQS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEi PQopLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxBLmF0 dHIoIngiLG8ubGVmdCtULzIpLmE9CnR0cigieSIsby50b3Aray8yKS50ZXh0KGZ1bmN0aW9uKGUp e3JldHVybiBlfSksQ31kLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLj0KcmVtb3ZlKCksZz0zRHQu eFNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyIE89M0RkLnNlbGVjdEFsbCgiZy5udi13cmFwLm52 LW11PQpsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5kYXRhKFtlXSksTT0zRE8uZW50ZXIoKS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm49CnZkMyBudi13cmFwIG52LW11bHRpQmFySG9yaXpvbnRh bENoYXJ0IikuYXBwZW5kKCJnIiksXz0zRE8uc2VsZWN0KCJnIik7TS5hcD0KcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LXkgbnYtPQpheGlzIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi16ZXJvTGluZSIpLmFw cGVuZCgibGluZSIpLE0uYXBwZW5kKCJnIik9Ci5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiks TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxNLj0KYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS53aWR0aChULXgoKSksdC5i YXJDb2xvcigpPQomJmUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuY29sb3I9M0RkMy5yZ2IoIiNj Y2MiKS5kYXJrZXIodCoxLjUpLnRvU3RyaW5nKCk9Cn0pLF8uc2VsZWN0KCIubnYtbGVnZW5kV3Jh cCIpLmRhdHVtKGUpLmNhbGwoaSksby50b3AhPTNEaS5oZWlnaHQoKSYmKG8udG9wPQo9M0RpLmhl aWdodCgpLGs9M0QoYXx8cGFyc2VJbnQoZC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8u Ym90dG9tKSxfLnM9CmVsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRy YW5zbGF0ZSgiK3goKSsiLCIrIC1vLnRvcCsiKSIpKT0KO2lmKGwpe3ZhciBEPTNEW3trZXk6Ikdy b3VwZWQiLGRpc2FibGVkOnQuc3RhY2tlZCgpfSx7a2V5OiJTdGFja2VkIixkaXNhYmxlPQpkOiF0 LnN0YWNrZWQoKX1dO3Mud2lkdGgoeCgpKS5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKSxf LnNlbGVjdCgiLm52LWM9Cm9udHJvbHNXcmFwIikuZGF0dW0oRCkuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKDAsIisgLW8udG9wKyIpIikuY2FsbChzKT0KfU8uYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRvcCsiKSIpLHQuZGlzYWJsZWQoZS5tYXAoZnVuPQpj dGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZH0pKS53aWR0aChUKS5oZWlnaHQoaykuY29sb3IoZS5t YXAoZnVuY3Rpb24oZSx0KXs9CnJldHVybiBlLmNvbG9yfHxmKGUsdCl9KS5maWx0ZXIoZnVuY3Rp b24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKTt2YXIgUD0KPTNEXy5zZWxlY3QoIi5udi1i YXJzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkp PQo7UC5jYWxsKHQpO2lmKGgpe24uc2NhbGUoZykudGlja3Moay8yNCkudGlja1NpemUoLVQsMCks Xy5zZWxlY3QoIi5udi14Lm52LWE9CnhpcyIpLmNhbGwobik7dmFyIEg9M0RfLnNlbGVjdCgiLm52 LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZyIpO0guc2VsZWN0QWxsKD0KImxpbmUsIHRleHQiKX1w JiYoci5zY2FsZSh5KS50aWNrcyhULzEwMCkudGlja1NpemUoLWssMCksXy5zZWxlY3QoIi5udi15 Lm52PQotYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIraysiKSIpLF8uc2Vs ZWN0KCIubnYteS5udi1heGlzIikuY2E9CmxsKHIpKSxfLnNlbGVjdCgiLm52LXplcm9MaW5lIGxp bmUiKS5hdHRyKCJ4MSIseSgwKSkuYXR0cigieDIiLHkoMCkpLmF0dHIoIj0KeTEiLDApLmF0dHIo InkyIiwtayksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2I9M0RlLFMu c3RhdGVDPQpoYW5nZShiKSxDLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2si LGZ1bmN0aW9uKGUsbil7aWYoIWUuZGlzYWI9CmxlZClyZXR1cm47RD0zREQubWFwKGZ1bmN0aW9u KGUpe3JldHVybiBlLmRpc2FibGVkPTNEITAsZX0pLGUuZGlzYWJsZWQ9M0QhMT0KO3N3aXRjaChl LmtleSl7Y2FzZSJHcm91cGVkIjp0LnN0YWNrZWQoITEpO2JyZWFrO2Nhc2UiU3RhY2tlZCI6dC5z dGFja2VkKCEwPQopfWIuc3RhY2tlZD0zRHQuc3RhY2tlZCgpLFMuc3RhdGVDaGFuZ2UoYiksQy51 cGRhdGUoKX0pLFMub24oInRvb2x0aXBTaG93Iiw9CmZ1bmN0aW9uKGUpe3YmJk4oZSxtLnBhcmVu dE5vZGUpfSksUy5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKG4pe3R5cGVvZiBuLj0KZGlzYWJs ZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmRpc2FibGVkPTNE bi5kaXNhYmxlZFt0PQpdfSksYi5kaXNhYmxlZD0zRG4uZGlzYWJsZWQpLHR5cGVvZiBuLnN0YWNr ZWQhPTNEInVuZGVmaW5lZCImJih0LnN0YWNrZWQobi49CnN0YWNrZWQpLGIuc3RhY2tlZD0zRG4u c3RhY2tlZCksQy51cGRhdGUoKX0pfSksQ312YXIgdD0zRGUubW9kZWxzLm11bHRpQmFySD0Kb3Jp em9udGFsKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1v ZGVscy5sZWdlbmQoKS5oPQplaWdodCgzMCkscz0zRGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgz MCksbz0zRHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGw9CmVmdDo2MH0sdT0zRG51bGwsYT0z RG51bGwsZj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksbD0zRCEwLGM9M0QhMCxoPTNEITAscD0K PTNEITAsZD0zRCExLHY9M0QhMCxtPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIr ZSsiIC0gIit0KyI8L2gzPiIrPQoiPHA+IituKyI8L3A+In0sZyx5LGI9M0R7c3RhY2tlZDpkfSx3 PTNEbnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsUz0zRGQ9CjMuZGlzcGF0Y2goInRvb2x0 aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIikseD0zRGZ1 bj0KY3Rpb24oKXtyZXR1cm4gbD8xODA6MH0sVD0zRDA7dC5zdGFja2VkKGQpLG4ub3JpZW50KCJs ZWZ0IikudGlja1BhZGRpbmcoNSkuPQpoaWdobGlnaHRaZXJvKCExKS5zaG93TWF4TWluKCExKS50 aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksci5vcmllbnQ9CigiYm90dG9tIikudGlj a0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSkscy51cGRhdGVTdGF0ZSghMSk7dmFyIE49M0RmdW5j dGlvbj0KKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3Nb MV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEPQpuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGku cG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW49CnQsaS5wb2ludElu ZGV4KSksbD0zRG0oaS5zZXJpZXMua2V5LGEsZixpLEMpO2UudG9vbHRpcC5zaG93KFtvLHVdLGws aS52YWx1ZT0KPDA/ImUiOiJ3IixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvPQpuKGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVm dCxlLnBvc1sxXStvLnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2g9Ci5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUoZSl9KSxTLm9u KCJ0b29sdGlwSD0KaWRlIixmdW5jdGlvbigpe3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxDLmRp c3BhdGNoPTNEUyxDLm11bHRpYmFyPTNEdCxDLmxlPQpnZW5kPTNEaSxDLnhBeGlzPTNEbixDLnlB eGlzPTNEcixkMy5yZWJpbmQoQyx0LCJ4IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiw9CiJ4UmFu Z2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJjbGlwRWRnZSIsImlkIiwiZGVsYXkiLCJz aG93VmFsdWVzIiwicz0KaG93QmFyTGFiZWxzIiwidmFsdWVGb3JtYXQiLCJzdGFja2VkIiwiYmFy Q29sb3IiKSxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvPQpuc0Z1bmMuYmluZChDKSxDLm1hcmdp bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnRvcD0zRHR5cGU9Cm9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9M0R0eXBlb2YgZS5yaWdo dCE9M0QidW5kZWZpbmVkIj0KP2UucmlnaHQ6by5yaWdodCxvLmJvdHRvbT0zRHR5cGVvZiBlLmJv dHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvPQptLG8ubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om8ubGVmdCxDKTpvfSxDLndpZHRoPTNEZnVuY3Q9 CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0sQy5oZWlnaHQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxDKTphfSxDLmNvbG9y PTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooZj0zRGUudXRpbHMuZ2V0 Q29sb3IodCksaS5jb2xvcihmKSxDKTpmfSxDLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3Jl dHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEMpOmx9LEMuc2hvd0xlZ2VuZD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KGM9M0RlLEMpOmN9LEMuc2hvd1hBeGlz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9Cj0zRGUsQyk6aH0sQy5z aG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsQyk6 cH0sQz0KLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0z RGUsQyk6bX0sQy50b29sdGlwcz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHY9M0RlLEMpOnZ9LEMudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbig9CmUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZT0KbnRzLmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy5kZWZhdWx0U3RhdGU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyh3PTNEZSxDKTp3fSxDLm5vRGF0YT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxDKTpFfSw9CkMudHJhbnNp dGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0Rl LEMpOlR9LEN9LD0KZS5tb2RlbHMubXVsdGlDaGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhl KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhPQpyIHU9M0RkMy5zZWxlY3QodGhpcyksZj0z RHRoaXM7Qy51cGRhdGU9M0RmdW5jdGlvbigpe3UuY2FsbChDKX0sQy5jb250YWluZXI9Cj0zRHRo aXM7dmFyIGs9M0Qocnx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8fDk2MCktdC5sZWZ0LXQu cmlnaHQsTD0zRChpfD0KfHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS10LnRvcC10 LmJvdHRvbSxBPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7PQpyZXR1cm4hZS5kaXNhYmxlZCYmZS50 eXBlPTNEPTNEImxpbmUiJiZlLnlBeGlzPTNEPTNEMX0pLE89M0RlLmZpbHRlcihmdW5jdGk9Cm9u KGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSImJmUueUF4aXM9M0Q9M0Qy fSksTT0zRGUuZmlsdGVyKD0KZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0z RD0zRCJiYXIiJiZlLnlBeGlzPTNEPTNEMX0pLF89M0RlLmZpPQpsdGVyKGZ1bmN0aW9uKGUpe3Jl dHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QiYmFyIiYmZS55QXhpcz0zRD0zRDJ9KSxEPQo9 M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEImFy ZWEiJiZlLnlBeGlzPTNEPQo9M0QxfSksUD0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFl LmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QiYXJlYSImJmUueUE9Cnhpcz0zRD0zRDJ9KSxIPTNEZS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUF4aXM9M0Q9M0QxfSkubT0K YXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4 OmUueCx5OmUueX19KX0pLEI9Cj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGVkJiZlLnlBeGlzPTNEPTNEMn0pLm1hcChmdW5jdGlvbihlKT0Ke3JldHVybiBlLnZhbHVlcy5t YXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDplLngseTplLnl9fSl9KTthLmRvbWFpbihkMy5leHRl PQpudChkMy5tZXJnZShILmNvbmNhdChCKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yYW5n ZShbMCxrXSk7dmFyIGo9M0R1LnM9CmVsZWN0QWxsKCJnLndyYXAubXVsdGlDaGFydCIpLmRhdGEo W2VdKSxGPTNEai5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYT0Kc3MiLCJ3cmFwIG52ZDMg bXVsdGlDaGFydCIpLmFwcGVuZCgiZyIpO0YuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ4IGF4 aXMiPQopLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ5MSBheGlzIiksRi5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsInkyIGF4aXM9CiIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJs aW5lczFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbj0KZXMyV3JhcCIpLEYu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXJzMVdyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzPQoiLCJiYXJzMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhY2sx V3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cig9CiJjbGFzcyIsInN0YWNrMldyYXAiKSxGLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kV3JhcCIpO3ZhciBJPTNEai5zZT0KbGVjdCgiZyIp O3MmJih4LndpZHRoKGsvMiksSS5zZWxlY3QoIi5sZWdlbmRXcmFwIikuZGF0dW0oZS5tYXAoZnVu Y3Rpb24oZSl7PQpyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2luYWxLZXk9M0Q9M0Q9M0R1 bmRlZmluZWQ/ZS5rZXk6ZS5vcmlnaW5hbEtleSw9CmUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS55 QXhpcz0zRD0zRDE/IiI6IiAocmlnaHQgYXhpcykiKSxlfSkpLmNhbGwoeCksdC50bz0KcCE9M0R4 LmhlaWdodCgpJiYodC50b3A9M0R4LmhlaWdodCgpLEw9M0QoaXx8cGFyc2VJbnQodS5zdHlsZSgi aGVpZ2h0IikpfHw0PQowMCktdC50b3AtdC5ib3R0b20pLEkuc2VsZWN0KCIubGVnZW5kV3JhcCIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2s9Ci8yKyIsIisgLXQudG9wKyIpIikpLGQu d2lkdGgoaykuaGVpZ2h0KEwpLmludGVycG9sYXRlKCJtb25vdG9uZSIpLmNvbG9yKGUubT0KYXAo ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5j dGlvbih0LG4pe3JldHVyPQpuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QxJiZlW25d LnR5cGU9M0Q9M0QibGluZSJ9KSksdi53aWR0aChrKS5oZWk9CmdodChMKS5pbnRlcnBvbGF0ZSgi bW9ub3RvbmUiKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuWz0K dCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYm ZVtuXS55QXhpcz0zRD0zRDImPQomZVtuXS50eXBlPTNEPTNEImxpbmUifSkpLG0ud2lkdGgoayku aGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmU9CnR1cm4gZS5jb2xvcnx8blt0 JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZl Wz0Kbl0ueUF4aXM9M0Q9M0QxJiZlW25dLnR5cGU9M0Q9M0QiYmFyIn0pKSxnLndpZHRoKGspLmhl aWdodChMKS5jb2xvcihlLm1hcChmPQp1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVu Lmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVs9Cm5dLmRpc2FibGVkJiZl W25dLnlBeGlzPTNEPTNEMiYmZVtuXS50eXBlPTNEPTNEImJhciJ9KSkseS53aWR0aChrKS5oZWln aHQoTD0KKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5s ZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uPQoodCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtu XS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0zRD0zRCJhcmVhIn0pKSxiLnc9CmlkdGgoaykuaGVp Z2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxl bmd0aF19KT0KLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25d LnlBeGlzPTNEPTNEMiYmZVtuXS50eXBlPTNEPQo9M0QiYXJlYSJ9KSksSS5hdHRyKCJ0cmFuc2Zv cm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIHE9M0Q9Ckkuc2VsZWN0 KCIubGluZXMxV3JhcCIpLmRhdHVtKEEpLFI9M0RJLnNlbGVjdCgiLmJhcnMxV3JhcCIpLmRhdHVt KE0pLFU9M0RJLj0Kc2VsZWN0KCIuc3RhY2sxV3JhcCIpLmRhdHVtKEQpLHo9M0RJLnNlbGVjdCgi LmxpbmVzMldyYXAiKS5kYXR1bShPKSxXPTNESS5zPQplbGVjdCgiLmJhcnMyV3JhcCIpLmRhdHVt KF8pLFg9M0RJLnNlbGVjdCgiLnN0YWNrMldyYXAiKS5kYXR1bShQKSxWPTNERC5sZW49Cmd0aD9E Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5tYXAoZj0KdW5jdGlvbihlLG4pe3JldHVybnt4OmUueCx5OmUueSt0W25dLnl9fSl9 KS5jb25jYXQoW3t4OjAseTowfV0pOltdLCQ9M0RQLmxlPQpuZ3RoP1AubWFwKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlc30pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCg9CmZ1 bmN0aW9uKGUsbil7cmV0dXJue3g6ZS54LHk6ZS55K3Rbbl0ueX19KX0pLmNvbmNhdChbe3g6MCx5 OjB9XSk6W107aC5kb21haT0KbihsfHxkMy5leHRlbnQoZDMubWVyZ2UoSCkuY29uY2F0KFYpLGZ1 bmN0aW9uKGUpe3JldHVybiBlLnl9KSkucmFuZ2UoWzAsTF0pPQoscC5kb21haW4oY3x8ZDMuZXh0 ZW50KGQzLm1lcmdlKEIpLmNvbmNhdCgkKSxmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkpLnJhbmc9 CmUoWzAsTF0pLGQueURvbWFpbihoLmRvbWFpbigpKSxtLnlEb21haW4oaC5kb21haW4oKSkseS55 RG9tYWluKGguZG9tYWluKCkpLD0Kdi55RG9tYWluKHAuZG9tYWluKCkpLGcueURvbWFpbihwLmRv bWFpbigpKSxiLnlEb21haW4ocC5kb21haW4oKSksRC5sZW5ndGgmPQomZDMudHJhbnNpdGlvbihV KS5jYWxsKHkpLFAubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFgpLmNhbGwoYiksTS5sZW5ndGgmJmQz LnQ9CnJhbnNpdGlvbihSKS5jYWxsKG0pLF8ubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFcpLmNhbGwo ZyksQS5sZW5ndGgmJmQzLnRyYW5zaT0KdGlvbihxKS5jYWxsKGQpLE8ubGVuZ3RoJiZkMy50cmFu c2l0aW9uKHopLmNhbGwodiksdy50aWNrcyhrLzEwMCkudGlja1NpemUoPQotTCwwKSxJLnNlbGVj dCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTCsiKSIpLGQzLnRy YW5zaXQ9CmlvbihJLnNlbGVjdCgiLnguYXhpcyIpKS5jYWxsKHcpLEUudGlja3MoTC8zNikudGlj a1NpemUoLWssMCksZDMudHJhbnNpdGlvbj0KKEkuc2VsZWN0KCIueTEuYXhpcyIpKS5jYWxsKEUp LFMudGlja3MoTC8zNikudGlja1NpemUoLWssMCksZDMudHJhbnNpdGlvbihJPQouc2VsZWN0KCIu eTIuYXhpcyIpKS5jYWxsKFMpLEkuc2VsZWN0KCIueTIuYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixC Lmxlbmd0aD89CjE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5yYW5nZSgpWzFd KyIsMCkiKSx4LmRpc3BhdGNoLm9uKCJzdGF0ZT0KQ2hhbmdlIixmdW5jdGlvbihlKXtDLnVwZGF0 ZSgpfSksVC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe28mJk4oZSxmLnBhPQpyZW50Tm9k ZSl9KX0pLEN9dmFyIHQ9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0OjYwfSxuPTNE ZDMuc2NhbGUuY2E9CnRlZ29yeTIwKCkucmFuZ2UoKSxyPTNEbnVsbCxpPTNEbnVsbCxzPTNEITAs bz0zRCEwLHU9M0RmdW5jdGlvbihlLHQsbixyLGkpez0KcmV0dXJuIjxoMz4iK2UrIjwvaDM+Iisi PHA+IituKyIgYXQgIit0KyI8L3A+In0sYSxmLGwsYyxhPTNEZDMuc2NhbGUubGluZWFyPQooKSxo PTNEZDMuc2NhbGUubGluZWFyKCkscD0zRGQzLnNjYWxlLmxpbmVhcigpLGQ9M0RlLm1vZGVscy5s aW5lKCkueVNjYWxlKGg9Ciksdj0zRGUubW9kZWxzLmxpbmUoKS55U2NhbGUocCksbT0zRGUubW9k ZWxzLm11bHRpQmFyKCkuc3RhY2tlZCghMSkueVNjYWxlKD0KaCksZz0zRGUubW9kZWxzLm11bHRp QmFyKCkuc3RhY2tlZCghMSkueVNjYWxlKHApLHk9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpPQou eVNjYWxlKGgpLGI9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpLnlTY2FsZShwKSx3PTNEZS5tb2Rl bHMuYXhpcygpLnNjYWxlKGE9Cikub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxFPTNE ZS5tb2RlbHMuYXhpcygpLnNjYWxlKGgpLm9yaWVudCgibGVmdD0KIiksUz0zRGUubW9kZWxzLmF4 aXMoKS5zY2FsZShwKS5vcmllbnQoInJpZ2h0IikseD0zRGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdo PQp0KDMwKSxUPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiKSxOPTNE ZnVuY3Rpb24odCxuKXt2YXIgcj0KPTNEdC5wb3NbMF0rKG4ub2Zmc2V0TGVmdHx8MCksaT0zRHQu cG9zWzFdKyhuLm9mZnNldFRvcHx8MCkscz0zRHcudGlja0Zvcm1hPQp0KCkoZC54KCkodC5wb2lu dCx0LnBvaW50SW5kZXgpKSxvPTNEKHQuc2VyaWVzLnlBeGlzPTNEPTNEMj9TOkUpLnRpY2tGb3Jt YXQ9CigpKGQueSgpKHQucG9pbnQsdC5wb2ludEluZGV4KSksYT0zRHUodC5zZXJpZXMua2V5LHMs byx0LEMpO2UudG9vbHRpcC5zaG93KD0KW3IsaV0sYSx1bmRlZmluZWQsdW5kZWZpbmVkLG4ub2Zm c2V0UGFyZW50KX07cmV0dXJuIGQuZGlzcGF0Y2gub24oImVsZW1lbnRNPQpvdXNlb3Zlci50b29s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3Bd LFQudG89Cm9sdGlwU2hvdyhlKX0pLGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmdW5jdGlvbihlKXtULnRvb2x0aT0KcEhpZGUoZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UuPQpwb3NbMF0rdC5s ZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksdi5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXM9CmVvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLG0u ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZT0Kci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBv cz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNoPQpvdyhlKX0p LG0uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRv b2x0aXBIaWRlKGU9Cil9KSxnLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAi LGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdKz0KdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxU LnRvb2x0aXBTaG93KGUpfSksZy5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvPQpvbHRp cCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLHkuZGlzcGF0Y2gub24oInRvb2x0aXBT aG93IixmdW5jdGlvbig9CmUpe2lmKCFNYXRoLnJvdW5kKHkueSgpKGUucG9pbnQpKjEwMCkpcmV0 dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkMy5zZWxlYz0KdEFsbCgiLnBvaW50LmhvdmVyIiku Y2xhc3NlZCgiaG92ZXIiLCExKX0sMCksITE7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUuPQpw b3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSx5LmRpc3BhdGNoLm9uKCJ0b29sdGlwSGlk ZSIsZnVuY3Rpb24oZSl7VC49CnRvb2x0aXBIaWRlKGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRp cFNob3ciLGZ1bmN0aW9uKGUpe2lmKCFNYXRoLnJvdW5kKGIueT0KKCkoZS5wb2ludCkqMTAwKSly ZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2QzLnNlbGVjdEFsbCgiLnBvaW50LmhvdmVyIiku PQpjbGFzc2VkKCJob3ZlciIsITEpfSwwKSwhMTtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5w b3NbMV0rdC50b3BdLFQudG9vbHQ9CmlwU2hvdyhlKX0pLGIuZGlzcGF0Y2gub24oInRvb2x0aXBI aWRlIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksZC5kaT0Kc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3QubGVm dCxlPQoucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZC5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvb2x0aXAiLGY9CnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLHYu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuYz0KdGlvbihlKXtlLnBv cz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSx2 LmRpc3BhPQp0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRv b2x0aXBIaWRlKGUpfSksVC5vbigidG9vbHQ9CmlwSGlkZSIsZnVuY3Rpb24oKXtvJiZlLnRvb2x0 aXAuY2xlYW51cCgpfSksQy5kaXNwYXRjaD0zRFQsQy5saW5lczE9M0RkLEMubD0KaW5lczI9M0R2 LEMuYmFyczE9M0RtLEMuYmFyczI9M0RnLEMuc3RhY2sxPTNEeSxDLnN0YWNrMj0zRGIsQy54QXhp cz0zRHcsQy55PQpBeGlzMT0zREUsQy55QXhpczI9M0RTLEMub3B0aW9ucz0zRGUudXRpbHMub3B0 aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhnZXRYPTNEZSxkLngoZSksbS54KGUpLEMpOmdldFh9LEMueT0zRGZ1bmN0aT0Kb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFk9M0RlLGQueShlKSxtLnkoZSksQyk6Z2V0WX0s Qy55RG9tYWluMT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0Rl LEMpOmx9LEMueURvbWFpbjI9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhjPTNEZSxDKTpjfSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5s ZW5ndGg/KHQ9M0RlLEMpOnR9LEMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocj0zRD0KZSxDKTpyfSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhpPTNEZSxDKTppfSxDLmNvbG9yPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8obj0zRGUseC5jb2xvcihlKSxDKTpufSxDLnNob3dMZWdlbmQ9Cj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxDKTpzfSxDLnRvb2x0 aXBzPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsQyk6b30s Qy50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/ KHU9M0RlLEMpOnV9LEN9LGUubW9kZWxzLm9obGNCYXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHg9 CihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPTNEbi10LmxlZnQtdC5yaWdodCx4 PTNEci10LnRvcC10LmJvdHRvbT0KLFQ9M0RkMy5zZWxlY3QodGhpcyk7cy5kb21haW4oeXx8ZDMu ZXh0ZW50KGVbMF0udmFsdWVzLm1hcCh1KS5jb25jYXQocCkpKSx2PQo/cy5yYW5nZSh3fHxbZyou NS9lWzBdLnZhbHVlcy5sZW5ndGgsZyooZVswXS52YWx1ZXMubGVuZ3RoLS41KS9lWzBdLnZhbHVl cy49Cmxlbmd0aF0pOnMucmFuZ2Uod3x8WzAsZ10pLG8uZG9tYWluKGJ8fFtkMy5taW4oZVswXS52 YWx1ZXMubWFwKGgpLmNvbmNhdChkKT0KKSxkMy5tYXgoZVswXS52YWx1ZXMubWFwKGMpLmNvbmNh dChkKSldKS5yYW5nZShFfHxbeCwwXSkscy5kb21haW4oKVswXT0zRD0KPTNEPTNEcy5kb21haW4o KVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0tcy5kb21haW4oKVsw XSouPQowMSxzLmRvbWFpbigpWzFdK3MuZG9tYWluKClbMV0qLjAxXSk6cy5kb21haW4oWy0xLDFd KSksby5kb21haW4oKVswXT0zRD0zRD0KPTNEby5kb21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/ by5kb21haW4oW28uZG9tYWluKClbMF0rby5kb21haW4oKVswXSouMDEsPQpvLmRvbWFpbigpWzFd LW8uZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFdKSk7dmFyIE49M0RkMy5zZWxlY3Qo dGhpcyk9Ci5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1vaGxjQmFyIikuZGF0YShbZVswXS52YWx1 ZXNdKSxDPTNETi5lbnRlcigpLmFwcGVuZD0KKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdy YXAgbnYtb2hsY0JhciIpLGs9M0RDLmFwcGVuZCgiZGVmcyIpLEw9M0RDLmFwPQpwZW5kKCJnIiks QT0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpY2tzIiks Ti5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxU Lm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtTLj0KY2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQs cG9zOmQzLmV2ZW50LGlkOml9KX0pLGsuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoPQoiaWQiLCJu di1jaGFydC1jbGlwLXBhdGgtIitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbGVjdCgiI252LWNoYXJ0 LWNsaXAtcGF0aC09CiIraSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0Iix4 KSxBLmF0dHIoImNsaXAtcGF0aCIsbT8idXJsKCNudj0KLWNoYXJ0LWNsaXAtcGF0aC0iK2krIiki OiIiKTt2YXIgTz0zRE4uc2VsZWN0KCIubnYtdGlja3MiKS5zZWxlY3RBbGwoIi5udi10PQppY2si KS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7Ty5leGl0KCkucmVtb3ZlKCk7dmFyIE09M0RP LmVudGVyKCkuYXBwZW49CmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3Jl dHVybihmKGUsdCk+bChlLHQpPyJudi10aWNrIG5lZ2F0aT0KdmUiOiJudi10aWNrIHBvc2l0aXZl IikrIiBudi10aWNrLSIrbisiLSIrdH0pLmF0dHIoImQiLGZ1bmN0aW9uKHQsbil7dmFyIHI9Cj0z RGcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCwwbDAsIisobyhmKHQsbikpLW8oYyh0 LG4pKSkrImwiKyAtci8yKz0KIiwwbCIrci8yKyIsMGwwLCIrKG8oaCh0LG4pKS1vKGYodCxuKSkp KyJsMCwiKyhvKGwodCxuKSktbyhoKHQsbikpKSsibCIrci8yPQorIiwwbCIrIC1yLzIrIiwweiJ9 KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModSg9 CmUsdCkpKyIsIitvKGMoZSx0KSkrIikifSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtk My5zZWxlY3QodGhpcykuY2xhcz0Kc2VkKCJob3ZlciIsITApLFMuZWxlbWVudE1vdXNlb3Zlcih7 cG9pbnQ6dCxzZXJpZXM6ZVswXSxwb3M6W3ModSh0LG4pKSxvKGEoPQp0LG4pKV0scG9pbnRJbmRl eDpuLHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbih0 LG49Cil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksUy5lbGVtZW50TW91c2Vv dXQoe3BvaW50OnQsc2VyaWVzOmVbMD0KXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6MCxlOmQz LmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7Uy5lbGVtPQplbnRDbGljayh7dmFs dWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkpLG8oYShlLHQpKV0sZTpkMy5l dmVudCw9CmlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIs ZnVuY3Rpb24oZSx0KXtTLmVsZW1lbnREYj0KbENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGlu ZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkPQo6aX0pLGQzLmV2 ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7Ty5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3Jl dHVybihmKGU9Cix0KT5sKGUsdCk/Im52LXRpY2sgbmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZl IikrIiBudi10aWNrLSIrbisiLSIrdH0pLGQzLj0KdHJhbnNpdGlvbihPKS5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModShlLHQpKSsiPQosIitvKGMo ZSx0KSkrIikifSkuYXR0cigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0zRGcvZVswXS52YWx1ZXMu bGVuZ3RoKi45O3I9CmV0dXJuIm0wLDBsMCwiKyhvKGYodCxuKSktbyhjKHQsbikpKSsibCIrIC1y LzIrIiwwbCIrci8yKyIsMGwwLCIrKG8oaCh0LG4pKT0KLW8oZih0LG4pKSkrImwwLCIrKG8obCh0 LG4pKS1vKGgodCxuKSkpKyJsIityLzIrIiwwbCIrIC1yLzIrIiwweiJ9KX0pLHh9dmFyPQogdD0z RHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9M0RNYXRo LmZsb29yKE1hdGgucmE9Cm5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMu c2NhbGUubGluZWFyKCksdT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGUueH0sYT0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnl9LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5vcGVufSxsPTNEZnVuPQpj dGlvbihlKXtyZXR1cm4gZS5jbG9zZX0sYz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmhpZ2h9LGg9 M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBlLmxvd30scD0zRFtdLGQ9M0RbXSx2PTNEITEsbT0zRCEw LGc9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHksYix3LEUsUz0KPTNEZDMuZGlzcGF0Y2goImNo YXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2Vv PQp2ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1cm4geC5kaXNwYXRjaD0zRFMseC5vcHRpb25z PTNEZS51dGlscy5vcHRpb25zRnU9Cm5jLmJpbmQoeCkseC54PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLHgpOnV9LHgueT0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHgpOmF9LHgub3Blbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhPQpyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHgpOmZ9LHguY2xvc2U9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihsPTNEZSx4KTpsfSx4LmhpZ2g9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUseCk6Y30seC5sbz0Kdz0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx4KTpofSx4Lm1hcmdpbj0zRGZ1bmN0 aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0z RCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQ9Ci5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1 bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLj0KYm90dG9tIT0z RCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNE InVuZGVmaW5lPQpkIj9lLmxlZnQ6dC5sZWZ0LHgpOnR9LHgud2lkdGg9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGU9Cix4KTpufSx4LmhlaWdodD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSx4KTpyfSx4LnhTY2FsZT0KPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHgpOnN9LHgueVNjYWxlPTNE ZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUseCk6b30seC54RG9t YWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8oeT0zRGUseCk6eX0s eC55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9Cj0zRGUs eCk6Yn0seC54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0z RGUseCk6d30seC55Uj0KYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhFPTNEZSx4KTpFfSx4LmZvcmNlWD0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHA9M0RlLHgpOnB9LHguZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1l bnRzLmxlbmd0aD8oZD0zRGUseCk6ZH0seC5wYWREYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KD0Kdj0zRGUseCk6dn0seC5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSx4KTptfSx4PQouY29sb3I9M0RmdW5jdGlvbih0 KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUudXRpbHMuZ2V0Q29sb3IodCkseCk6Z309 Cix4LmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLHgpOml9 LHh9LGUubW9kZWxzLnBpZT0zRD0KZnVuY3Rpb24oKXtmdW5jdGlvbiBTKGUpe3JldHVybiBlLmVh Y2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcShlKXt2YXIgdD0zRChlPQouc3RhcnRBbmdsZStlLmVu ZEFuZ2xlKSo5MC9NYXRoLlBJLTkwO3JldHVybiB0PjkwP3QtMTgwOnR9ZnVuY3Rpb24gUihlKXtl LmU9Cm5kQW5nbGU9M0Rpc05hTihlLmVuZEFuZ2xlKT8wOmUuZW5kQW5nbGUsZS5zdGFydEFuZ2xl PTNEaXNOYU4oZS5zdGFydEFuZ2xlKT0KPzA6ZS5zdGFydEFuZ2xlLG18fChlLmlubmVyUmFkaXVz PTNEMCk7dmFyIHQ9M0RkMy5pbnRlcnBvbGF0ZSh0aGlzLl9jdXJyZW50PQosZSk7cmV0dXJuIHRo aXMuX2N1cnJlbnQ9M0R0KDApLGZ1bmN0aW9uKGUpe3JldHVybiBBKHQoZSkpfX1mdW5jdGlvbiBV KGUpe2U9Ci5pbm5lclJhZGl1cz0zRDA7dmFyIHQ9M0RkMy5pbnRlcnBvbGF0ZSh7c3RhcnRBbmds ZTowLGVuZEFuZ2xlOjB9LGUpO3JldHVybj0KIGZ1bmN0aW9uKGUpe3JldHVybiBBKHQoZSkpfX12 YXIgbz0zRG4tdC5sZWZ0LXQucmlnaHQsZj0zRHItdC50b3AtdC5ib3R0b20sPQpTPTNETWF0aC5t aW4obyxmKS8yLHg9M0RTLVMvNSxUPTNEZDMuc2VsZWN0KHRoaXMpLE49M0RULnNlbGVjdEFsbCgi Lm52LXdyYXA9Ci5udi1waWUiKS5kYXRhKGUpLEM9M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtcD0KaWUgbnYtY2hhcnQtIit1KSxrPTNEQy5hcHBl bmQoImciKSxMPTNETi5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3MiLCJu di1waWUiKSxrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcGllTGFiZWxzIiksTi5hdHRy KCJ0cmFuc2Zvcm09CiIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxMLnNlbGVj dCgiLm52LXBpZSIpLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNsYXRlKCIrby8yKyIsIitmLzIr IikiKSxMLnNlbGVjdCgiLm52LXBpZUxhYmVscyIpLmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNs YXRlKCIrby8yKyIsIitmLzIrIikiKSxULm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtFLmNoYXJ0 Q2xpY2soe2RhdGE6ZSw9CmluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KX0pO3ZhciBBPTNEZDMu c3ZnLmFyYygpLm91dGVyUmFkaXVzKHgpO3kmJkEuc3Rhcj0KdEFuZ2xlKHkpLGImJkEuZW5kQW5n bGUoYiksbSYmQS5pbm5lclJhZGl1cyhTKncpO3ZhciBPPTNEZDMubGF5b3V0LnBpZSgpLnNvPQpy dChudWxsKS52YWx1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD8wOnMoZSl9KSxNPTNE Ti5zZWxlY3QoIi5udi1waWU9CiIpLnNlbGVjdEFsbCgiLm52LXNsaWNlIikuZGF0YShPKSxfPTNE Ti5zZWxlY3QoIi5udi1waWVMYWJlbHMiKS5zZWxlY3RBbGwoIj0KLm52LWxhYmVsIikuZGF0YShP KTtNLmV4aXQoKS5yZW1vdmUoKSxfLmV4aXQoKS5yZW1vdmUoKTt2YXIgRD0zRE0uZW50ZXIoKS5h PQpwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2xpY2UiKS5vbigibW91c2VvdmVyIixmdW5j dGlvbihlLHQpe2QzLnNlbGVjdCg9CnRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCksRS5lbGVtZW50 TW91c2VvdmVyKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdD0KYSkscG9pbnQ6ZS5kYXRh LHBvaW50SW5kZXg6dCxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxpZDp1fSl9 KS5vPQpuKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgi aG92ZXIiLCExKSxFLmVsZW1lbnRNb3U9CnNlb3V0KHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhl LmRhdGEpLHBvaW50OmUuZGF0YSxpbmRleDp0LGlkOnV9KX0pLm9uKCJjbD0KaWNrIixmdW5jdGlv bihlLHQpe0UuZWxlbWVudENsaWNrKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBv aW50OmUuPQpkYXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJv cGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayI9CixmdW5jdGlvbihlLHQpe0UuZWxlbWVudERibENs aWNrKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZD0KYXRhLGluZGV4 OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pO00uYXR0 cigiZmlsbCIsPQpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCl9KS5hdHRyKCJzdHJva2UiLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pO3Y9CmFyIFA9M0RELmFwcGVuZCgicGF0aCIpLmVh Y2goZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudD0zRGV9KTtNLnNlbGVjdCgicGF0aD0KIikuYXR0 cigiZCIsQSk7aWYobCl7dmFyIEg9M0RkMy5zdmcuYXJjKCkuaW5uZXJSYWRpdXMoMCk7YyYmKEg9 M0RBKSxoJiYoSD0KPTNEZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKEEub3V0ZXJSYWRpdXMoKSkp LF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkPQooIm52LWxhYmVsIiwhMCkuZWFjaChmdW5j dGlvbihlLHQpe3ZhciBuPTNEZDMuc2VsZWN0KHRoaXMpO24uYXR0cigidHJhbnNmb3I9Cm0iLGZ1 bmN0aW9uKGUpe2lmKGcpe2Uub3V0ZXJSYWRpdXM9M0R4KzEwLGUuaW5uZXJSYWRpdXM9M0R4KzE1 O3ZhciB0PTNEKGUucz0KdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzIqKDE4MC9NYXRoLlBJKTtyZXR1 cm4oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0PQpoLlBJP3QtPTNEOTA6dCs9M0Q5MCwi dHJhbnNsYXRlKCIrSC5jZW50cm9pZChlKSsiKSByb3RhdGUoIit0KyIpIn1yZXR1cm4gZS49Cm91 dGVyUmFkaXVzPTNEUysxMCxlLmlubmVyUmFkaXVzPTNEUysxNSwidHJhbnNsYXRlKCIrSC5jZW50 cm9pZChlKSsiKSJ9KSxuLj0KYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsIiNmZmYiKS5z dHlsZSgiZmlsbCIsIiNmZmYiKS5hdHRyKCJyeCIsMykuYXR0PQpyKCJyeSIsMyksbi5hcHBlbmQo InRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLGc/KGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS89 CjI8TWF0aC5QST8ic3RhcnQiOiJlbmQiOiJtaWRkbGUiKS5zdHlsZSgiZmlsbCIsIiMwMDAiKX0p O3ZhciBCPTNEe30saj0zRDE0LD0KRj0zRDE0MCxJPTNEZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgu Zmxvb3IoZVswXS9GKSpGKyIsIitNYXRoLmZsb29yKGVbMV0vaikqPQpqfTtfLmF0dHIoInRyYW5z Zm9ybSIsZnVuY3Rpb24oZSl7aWYoZyl7ZS5vdXRlclJhZGl1cz0zRHgrMTAsZS5pbm5lclJhZGl1 cz0KPTNEeCsxNTt2YXIgdD0zRChlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMiooMTgwL01hdGgu UEkpO3JldHVybihlLnN0YXJ0QW5nPQpsZStlLmVuZEFuZ2xlKS8yPE1hdGguUEk/dC09M0Q5MDp0 Kz0zRDkwLCJ0cmFuc2xhdGUoIitILmNlbnRyb2lkKGUpKyIpIHJvdGE9CnRlKCIrdCsiKSJ9ZS5v dXRlclJhZGl1cz0zRFMrMTAsZS5pbm5lclJhZGl1cz0zRFMrMTU7dmFyIG49M0RILmNlbnRyb2lk KGUpLD0Kcj0zREkobik7cmV0dXJuIEJbcl0mJihuWzFdLT0zRGopLEJbSShuKV09M0QhMCwidHJh bnNsYXRlKCIrbisiKSJ9KSxfLnNlbGVjPQp0KCIubnYtbGFiZWwgdGV4dCIpLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsZz8oZC5zdGFydEFuZ2xlK2QuZW5kQW5nbGUpLzI8TWF0aC49ClBJPyJzdGFydCI6 ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRChlLmVuZEFuZ2xlLWUu c3RhcnRBbj0KZ2xlKS8oMipNYXRoLlBJKSxyPTNEe2tleTppKGUuZGF0YSksdmFsdWU6cyhlLmRh dGEpLHBlcmNlbnQ6ZDMuZm9ybWF0KCIlIikoPQpuKX07cmV0dXJuIGUudmFsdWUmJm4+dj9yW3Bd OiIifSl9fSksU312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ9CjowfSxuPTNE NTAwLHI9M0Q1MDAsaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHM9M0RmdW5jdGlvbihlKXty ZXR1cm4gZS55fT0KLG89M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXNjcmlwdGlvbn0sdT0zRE1h dGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLGE9Cj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCks Zj0zRGQzLmZvcm1hdCgiLC4yZiIpLGw9M0QhMCxjPTNEITAsaD0zRCExLHA9M0Qiaz0KZXkiLHY9 M0QuMDIsbT0zRCExLGc9M0QhMSx5PTNEITEsYj0zRCExLHc9M0QuNSxFPTNEZDMuZGlzcGF0Y2go ImNoYXJ0Q2xpY2siPQosImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRN b3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXQ9CnVybiBTLmRpc3BhdGNoPTNERSxTLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoUyksUy5tYXJnaW49M0RmdW5jdD0KaW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLnRvcDp0PQoudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXA9CmVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bj0K ZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxTKTp0fSxTLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/PQoobj0zRGUsUyk6bn0sUy5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsUyk6cn0sUy49CnZhbHVlcz0zRGZ1bmN0aW9u KHQpe3JldHVybiBlLmxvZygicGllLnZhbHVlcygpIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIiks Uz0KfSxTLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsUyk6 aX0sUy55PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGQzLmZ1 bmN0b3IoZSksUyk6c30sUy5kZXNjcmlwdGlvbj0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KG89M0RlLFMpOm99LFMuc2hvd0xhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcj0KZ3VtZW50cy5sZW5ndGg/KGw9M0RlLFMpOmx9LFMubGFiZWxTdW5iZWFtTGF5b3V0PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8oZz0zRGUsUyk6Z30sUy5kb251 dExhYmVsc091dHNpZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyho PTNEZSxTKTpofSxTLnBpZUxhYmVsc091dHNpZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbj0KZ3RoPyhjPTNEZSxTKTpjfSxTLmxhYmVsVHlwZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxwPQo9M0RwfHwia2V5IixTKTpwfSxTLmRvbnV0PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLFMpOm09Cn0sUy5kb251 dFJhdGlvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLFMpOnd9 LFMuc3RhcnRBbj0KZ2xlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9 M0RlLFMpOnl9LFMuZW5kQW5nbGU9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhiPTNEZSxTKTpifSxTLmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxl bmd0aD8odT0zRGUsUyk6dX0sUy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhhPTNEZT0KLnV0aWxzLmdldENvbG9yKHQpLFMpOmF9LFMudmFsdWVGb3JtYXQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhmPTNEZSxTKTpmfSxTLmxhYmVs VGhyZXNob2xkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Q9CmUs Uyk6dn0sU30sZS5tb2RlbHMucGllQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHYoZSl7cmV0 dXJuIGUuZWFjaChmdW5jdD0KaW9uKGUpe3ZhciB1PTNEZDMuc2VsZWN0KHRoaXMpLGE9M0R0aGlz LGY9M0QoaXx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8PQp8OTYwKS1yLmxlZnQtci5yaWdo dCxkPTNEKHN8fHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1yLnRvcC1yLmJvdHQ9 Cm9tO3YudXBkYXRlPTNEZnVuY3Rpb24oKXt1LmNhbGwodil9LHYuY29udGFpbmVyPTNEdGhpcyxs LmRpc2FibGVkPTNEZS5tYXAoZj0KdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigh Yyl7dmFyIG07Yz0zRHt9O2ZvcihtIGluIGwpbFttXWluc3RhbmNlPQpvZiBBcnJheT9jW21dPTNE bFttXS5zbGljZSgwKTpjW21dPTNEbFttXX1pZighZXx8IWUubGVuZ3RoKXt2YXIgZz0zRHUuc2Vs ZWM9CnRBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtoXSk7cmV0dXJuIGcuZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyKCJjbGFzcyIsIj0KbnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2Vt Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksZy5hdHRyKCJ4PQoiLHIubGVmdCtmLzIp LmF0dHIoInkiLHIudG9wK2QvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHZ9dS5zZWxl Y3RBbGw9CigiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciB5PTNEdS5zZWxlY3RBbGwoImcubnYt d3JhcC5udi1waWVDaGFydCIpLmRhdGEoWz0KZV0pLGI9M0R5LmVudGVyKCkuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtcGllQ2hhcnQiKS5hcHBlPQpuZCgiZyIpLHc9 M0R5LnNlbGVjdCgiZyIpO2IuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1waWVXcmFwIiks Yi5hcHBlbmQ9CigiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLG8mJihuLndpZHRo KGYpLmtleSh0LngoKSkseS5zZWxlY3QoIi5udj0KLWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxs KG4pLHIudG9wIT0zRG4uaGVpZ2h0KCkmJihyLnRvcD0zRG4uaGVpZ2h0KCksZD0KPTNEKHN8fHBh cnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1yLnRvcC1yLmJvdHRvbSkseS5zZWxlY3Qo Ii5udi1sZWdlPQpuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtci50 b3ArIikiKSkseS5hdHRyKCJ0cmFuc2Zvcm0iLCI9CnRyYW5zbGF0ZSgiK3IubGVmdCsiLCIrci50 b3ArIikiKSx0LndpZHRoKGYpLmhlaWdodChkKTt2YXIgRT0zRHcuc2VsZWN0KCIubj0Kdi1waWVX cmFwIikuZGF0dW0oW2VdKTtkMy50cmFuc2l0aW9uKEUpLmNhbGwodCksbi5kaXNwYXRjaC5vbigi c3RhdGVDaGFuZ2UiPQosZnVuY3Rpb24oZSl7bD0zRGUscC5zdGF0ZUNoYW5nZShsKSx2LnVwZGF0 ZSgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXM9CmVvdXQudG9vbHRpcCIsZnVuY3Rpb24o ZSl7cC50b29sdGlwSGlkZShlKX0pLHAub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbih0KT0Ke3R5 cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7 ZS5kaXNhYmxlZD0zRHQuPQpkaXNhYmxlZFtuXX0pLGwuZGlzYWJsZWQ9M0R0LmRpc2FibGVkKSx2 LnVwZGF0ZSgpfSl9KSx2fXZhciB0PTNEZS5tb2RlbHMucGk9CmUoKSxuPTNEZS5tb2RlbHMubGVn ZW5kKCkscj0zRHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjIwLGxlZnQ6MjB9LGk9M0RudWxsLD0K cz0zRG51bGwsbz0zRCEwLHU9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGE9M0QhMCxmPTNEZnVu Y3Rpb24oZSx0LG4scil7cmV0PQp1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK3QrIjwvcD4ifSxs PTNEe30sYz0zRG51bGwsaD0zRCJObyBEYXRhIEF2YWlsYWJsZS49CiIscD0zRGQzLmRpc3BhdGNo KCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIp LD0KZD0zRGZ1bmN0aW9uKG4scil7dmFyIGk9M0R0LmRlc2NyaXB0aW9uKCkobi5wb2ludCl8fHQu eCgpKG4ucG9pbnQpLHM9M0RuLnBvPQpzWzBdKyhyJiZyLm9mZnNldExlZnR8fDApLG89M0RuLnBv c1sxXSsociYmci5vZmZzZXRUb3B8fDApLHU9M0R0LnZhbHVlRm9ybWE9CnQoKSh0LnkoKShuLnBv aW50KSksYT0zRGYoaSx1LG4sdik7ZS50b29sdGlwLnNob3coW3Msb10sYSxuLnZhbHVlPDA/Im4i OiJzIj0KLG51bGwscil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRv b2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPQo9M0RbZS5wb3NbMF0rci5sZWZ0LGUucG9zWzFdK3Iu dG9wXSxwLnRvb2x0aXBTaG93KGUpfSkscC5vbigidG9vbHRpcFNob3ciLGY9CnVuY3Rpb24oZSl7 YSYmZChlKX0pLHAub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe2EmJmUudG9vbHRpcC5jbGVh bnVwKCl9KT0KLHYubGVnZW5kPTNEbix2LmRpc3BhdGNoPTNEcCx2LnBpZT0zRHQsZDMucmViaW5k KHYsdCwidmFsdWVGb3JtYXQiLCJ2YWx1ZXMiPQosIngiLCJ5IiwiZGVzY3JpcHRpb24iLCJpZCIs InNob3dMYWJlbHMiLCJkb251dExhYmVsc091dHNpZGUiLCJwaWVMYWJlbHNPdXQ9CnNpZGUiLCJs YWJlbFR5cGUiLCJkb251dCIsImRvbnV0UmF0aW8iLCJsYWJlbFRocmVzaG9sZCIpLHYub3B0aW9u cz0zRGUudXRpbD0Kcy5vcHRpb25zRnVuYy5iaW5kKHYpLHYubWFyZ2luPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIudG9wPQo9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVm aW5lZCI/ZS50b3A6ci50b3Asci5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmQ9CmVmaW5l ZCI/ZS5yaWdodDpyLnJpZ2h0LHIuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmlu ZWQiP2UuYm90dG9tOj0Kci5ib3R0b20sci5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZp bmVkIj9lLmxlZnQ6ci5sZWZ0LHYpOnJ9LHYud2lkdGg9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhpPTNEZSx2KTppfSx2LmhlaWdodD0zRGZ1bmN0aW9uKGUpez0KcmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHYpOnN9LHYuY29sb3I9M0RmdW5jdGlvbihyKXty ZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyh1PTNEZS51dGlscy5nZXRDb2xvcihyKSxuLmNvbG9y KHUpLHQuY29sb3IodSksdik6dX0sdi5zaG93TGVnZW5kPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdik6b30sdi50b29sdGlwcz0zRGZ1bmN0aW9uKGU9Cil7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHYpOmF9LHYudG9vbHRpcENvbnRlbnQ9M0Rm dW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSx2KTpmfSx2LnN0YXRl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8obD0zRGUsdik6bH0sdi5k ZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGU9 Cix2KTpjfSx2Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho PTNEZSx2KTpofSx2fSxlLm1vZD0KZWxzLnNjYXR0ZXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEko cSl7cmV0dXJuIHEuZWFjaChmdW5jdGlvbihJKXtmdW5jdGlvbiBRPQooKXtpZighZylyZXR1cm4h MTt2YXIgZSxpPTNEZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZXMu bWE9CnAoZnVuY3Rpb24oZSxuKXt2YXIgcj0zRGYoZSxuKSxpPTNEbChlLG4pO3JldHVybltvKHIp LHUoaSksdCxuLGVdfSkuZmlsdGVyKD0KZnVuY3Rpb24oZSx0KXtyZXR1cm4gYihlWzRdLHQpfSl9 KSk7aWYoRD0zRD0zRD0zRCEwKXtpZih4KXt2YXIgYT0zRFguc2VsZWN0PQooImRlZnMiKS5zZWxl Y3RBbGwoIi5udi1wb2ludC1jbGlwcyIpLmRhdGEoW3NdKS5lbnRlcigpO2EuYXBwZW5kKCJjbGlw UGF0aCI9CikuYXR0cigiY2xhc3MiLCJudi1wb2ludC1jbGlwcyIpLmF0dHIoImlkIiwibnYtcG9p bnRzLWNsaXAtIitzKTt2YXIgYz0zRFgucz0KZWxlY3QoIiNudi1wb2ludHMtY2xpcC0iK3MpLnNl bGVjdEFsbCgiY2lyY2xlIikuZGF0YShpKTtjLmVudGVyKCkuYXBwZW5kKCJjPQppcmNsZSIpLmF0 dHIoInIiLFQpLGMuZXhpdCgpLnJlbW92ZSgpLGMuYXR0cigiY3giLGZ1bmN0aW9uKGUpe3JldHVy biBlWzBdfSk9Ci5hdHRyKCJjeSIsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19KSxYLnNlbGVjdCgi Lm52LXBvaW50LXBhdGhzIikuYXR0cigiY2xpcD0KLXBhdGgiLCJ1cmwoI252LXBvaW50cy1jbGlw LSIrcysiKSIpfWkubGVuZ3RoJiYoaS5wdXNoKFtvLnJhbmdlKClbMF0tMjAsdS5yPQphbmdlKClb MF0tMjAsbnVsbCxudWxsXSksaS5wdXNoKFtvLnJhbmdlKClbMV0rMjAsdS5yYW5nZSgpWzFdKzIw LG51bGwsbnVsbF09CiksaS5wdXNoKFtvLnJhbmdlKClbMF0tMjAsdS5yYW5nZSgpWzBdKzIwLG51 bGwsbnVsbF0pLGkucHVzaChbby5yYW5nZSgpWzFdKz0KMjAsdS5yYW5nZSgpWzFdLTIwLG51bGws bnVsbF0pKTt2YXIgaD0zRGQzLmdlb20ucG9seWdvbihbWy0xMCwtMTBdLFstMTAscisxPQowXSxb bisxMCxyKzEwXSxbbisxMCwtMTBdXSkscD0zRDFlLTY7aT0zRGkuc29ydChmdW5jdGlvbihlLHQp e3JldHVybiBlWzBdLXQ9ClswXXx8ZVsxXS10WzFdfSk7Zm9yKHZhciBkPTNEMDtkPGkubGVuZ3Ro LTE7KU1hdGguYWJzKGlbZF1bMF0taVtkKzFdWzBdKTxwJj0KJk1hdGguYWJzKGlbZF1bMV0taVtk KzFdWzFdKTxwP2kuc3BsaWNlKGQrMSwxKTpkKys7dmFyIHY9M0RkMy5nZW9tLnZvcm9ub2koPQpp KS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57ZGF0YTpoLmNsaXAoZSksc2VyaWVzOmlbdF1bMl0s cG9pbnQ6aVt0XVszXX19KSw9Cm09M0RYLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc2VsZWN0 QWxsKCJwYXRoIikuZGF0YSh2KTttLmVudGVyKCkuYXBwZW5kKD0KInBhdGgiKS5hdHRyKCJjbGFz cyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtcGF0aC0iK3R9KSxtLmV4aXQoKS5yZW1vdmUoKSxt PQouYXR0cigiZCIsZnVuY3Rpb24oZSl7cmV0dXJuIWV8fCFlLmRhdGF8fGUuZGF0YS5sZW5ndGg9 M0Q9M0Q9M0QwPyJNIDAgMCI6Ik09CiIrZS5kYXRhLmpvaW4oIkwiKSsiWiJ9KTt2YXIgeT0zRGZ1 bmN0aW9uKGUsbil7aWYoRilyZXR1cm4gMDt2YXIgcj0zRElbZS5zZT0Kcmllc107aWYodHlwZW9m IHI9M0Q9M0QidW5kZWZpbmVkIilyZXR1cm47dmFyIGk9M0RyLnZhbHVlc1tlLnBvaW50XTtuKHtw b2luPQp0Omksc2VyaWVzOnIscG9zOltvKGYoaSxlLnBvaW50KSkrdC5sZWZ0LHUobChpLGUucG9p bnQpKSt0LnRvcF0sc2VyaWVzSW5kZXg9CjplLnNlcmllcyxwb2ludEluZGV4OmUucG9pbnR9KX07 bS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe3koZSxfLmVsZW1lbnRDbGljaz0KKX0pLm9uKCJtb3Vz ZW92ZXIiLGZ1bmN0aW9uKGUpe3koZSxfLmVsZW1lbnRNb3VzZW92ZXIpfSkub24oIm1vdXNlb3V0 IixmdW5jPQp0aW9uKGUsdCl7eShlLF8uZWxlbWVudE1vdXNlb3V0KX0pfWVsc2UgWC5zZWxlY3Qo Ii5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi49Cm52LWdyb3VwIikuc2VsZWN0QWxsKCIubnYtcG9p bnQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsbil7aWYoRnx8IUlbZS5zZXJpZT0Kc10pcmV0dXJu IDA7dmFyIHI9M0RJW2Uuc2VyaWVzXSxpPTNEci52YWx1ZXNbbl07Xy5lbGVtZW50Q2xpY2soe3Bv aW50Omksc2VyPQppZXM6cixwb3M6W28oZihpLG4pKSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxz ZXJpZXNJbmRleDplLnNlcmllcyxwb2ludEluZGU9Cng6bn0pfSkub24oIm1vdXNlb3ZlciIsZnVu Y3Rpb24oZSxuKXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7dmFyIHI9M0RJWz0KZS5zZXJp ZXNdLGk9M0RyLnZhbHVlc1tuXTtfLmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50Omksc2VyaWVzOnIs cG9zOltvKGYoaSxuPQopKSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxzZXJpZXNJbmRleDplLnNl cmllcyxwb2ludEluZGV4Om59KX0pLm9uKCJtb3VzZW89CnV0IixmdW5jdGlvbihlLHQpe2lmKEZ8 fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgbj0zRElbZS5zZXJpZXNdLHI9M0RuLnZhbD0KdWVz W3RdO18uZWxlbWVudE1vdXNlb3V0KHtwb2ludDpyLHNlcmllczpuLHNlcmllc0luZGV4OmUuc2Vy aWVzLHBvaW50SW5kZXg6PQp0fSl9KTtGPTNEITF9dmFyIHE9M0RuLXQubGVmdC10LnJpZ2h0LFI9 M0RyLXQudG9wLXQuYm90dG9tLFU9M0RkMy5zZWxlY3QodGg9CmlzKTtJLmZvckVhY2goZnVuY3Rp b24oZSx0KXtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pfSk7dj0K YXIgVz0zRE4mJkMmJkE/W106ZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFs dWVzLm1hcChmdW5jdGlvbihlPQosdCl7cmV0dXJue3g6ZihlLHQpLHk6bChlLHQpLHNpemU6Yyhl LHQpfX0pfSkpO28uZG9tYWluKE58fGQzLmV4dGVudChXLm1hcCg9CmZ1bmN0aW9uKGUpe3JldHVy biBlLnh9KS5jb25jYXQoZCkpKSx3JiZJWzBdP28ucmFuZ2Uoa3x8WyhxKkUrcSkvKDIqSVswXS52 YT0KbHVlcy5sZW5ndGgpLHEtcSooMStFKS8oMipJWzBdLnZhbHVlcy5sZW5ndGgpXSk6by5yYW5n ZShrfHxbMCxxXSksdS5kb21haW4oPQpDfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0 dXJuIGUueX0pLmNvbmNhdCh2KSkpLnJhbmdlKEx8fFtSLDBdKSxhLmQ9Cm9tYWluKEF8fGQzLmV4 dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfSkuY29uY2F0KG0pKSkucmFuZ2Uo T3x8Wz0KMTYsMjU2XSk7aWYoby5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClbMV18fHUu ZG9tYWluKClbMF09M0Q9M0Q9M0R1LmRvPQptYWluKClbMV0pTT0zRCEwO28uZG9tYWluKClbMF09 M0Q9M0Q9M0RvLmRvbWFpbigpWzFdJiYoby5kb21haW4oKVswXT9vLmRvbWE9CmluKFtvLmRvbWFp bigpWzBdLW8uZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClbMV0rby5kb21haW4oKVsxXSouMDFd KTpvLmRvbT0KYWluKFstMSwxXSkpLHUuZG9tYWluKClbMF09M0Q9M0Q9M0R1LmRvbWFpbigpWzFd JiYodS5kb21haW4oKVswXT91LmRvbWFpbihbPQp1LmRvbWFpbigpWzBdLXUuZG9tYWluKClbMF0q LjAxLHUuZG9tYWluKClbMV0rdS5kb21haW4oKVsxXSouMDFdKTp1LmRvbWFpbig9ClstMSwxXSkp LGlzTmFOKG8uZG9tYWluKClbMF0pJiZvLmRvbWFpbihbLTEsMV0pLGlzTmFOKHUuZG9tYWluKClb MF0pJiZ1LmRvbT0KYWluKFstMSwxXSksUD0zRFB8fG8sSD0zREh8fHUsQj0zREJ8fGE7dmFyIFg9 M0RVLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXNjPQphdHRlciIpLmRhdGEoW0ldKSxWPTNEWC5l bnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXM9CmNhdHRl ciBudi1jaGFydC0iK3MrKE0/IiBudi1zaW5nbGUtcG9pbnQiOiIiKSksJD0zRFYuYXBwZW5kKCJk ZWZzIiksSj0zRFYuYT0KcHBlbmQoImciKSxLPTNEWC5zZWxlY3QoImciKTtKLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksSi5hcHBlPQpuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtcG9pbnQtcGF0aHMiKSxYLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGU9CmZ0 KyIsIit0LnRvcCsiKSIpLCQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1j bGlwLSIrcykuYXBwZW5kKD0KInJlY3QiKSxYLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3MrIiBy ZWN0IikuYXR0cigid2lkdGgiLHEpLmF0dHIoImhlaWdodCIsPQpSPjA/UjowKSxLLmF0dHIoImNs aXAtcGF0aCIsUz8idXJsKCNudi1lZGdlLWNsaXAtIitzKyIpIjoiIiksRj0zRCEwO3ZhciBHPQo9 M0RYLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5j dGlvbihlKXtyZXR1cm4gZX09CixmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KTtHLmVudGVyKCku YXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZT0KLTYpLnN0eWxlKCJmaWxsLW9w YWNpdHkiLDFlLTYpLEcuZXhpdCgpLnJlbW92ZSgpLEcuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUs PQp0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5j dGlvbihlKXtyZXR1cm4gZS5ob3Y9CmVyfSksRy5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gaShlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZT0KLHQpe3JldHVybiBpKGUs dCl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC41KTtp ZihwPQope3ZhciBZPTNERy5zZWxlY3RBbGwoImNpcmNsZS5udi1wb2ludCIpLmRhdGEoZnVuY3Rp b24oZSl7cmV0dXJuIGUudmFsdWVzfSw9CnkpO1kuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLnN0 eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkucz0KdHlsZSgic3Ryb2tl IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuYXR0cigiY3giLGZ1bmN0aW9uKHQsbil7 cmV0dXJuPQogZS51dGlscy5OYU50b1plcm8oUChmKHQsbikpKX0pLmF0dHIoImN5IixmdW5jdGlv bih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnQ9Cm9aZXJvKEgobCh0LG4pKSl9KS5hdHRyKCJyIixm dW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnNxcnQoYShjKGUsdCkpL01hdGguUD0KSSl9KSxZLmV4 aXQoKS5yZW1vdmUoKSxHLmV4aXQoKS5zZWxlY3RBbGwoInBhdGgubnYtcG9pbnQiKS5hdHRyKCJj eCIsZnVuY3RpPQpvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKGYodCxuKSkpfSku YXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXI9Cm4gZS51dGlscy5OYU50b1plcm8odShsKHQs bikpKX0pLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aD0KaXMpLmNs YXNzZWQoIm52LXBvaW50IiwhMCkuY2xhc3NlZCgibnYtcG9pbnQtIit0LCEwKS5jbGFzc2VkKCJo b3ZlciIsITEpfSksPQpZLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5h TnRvWmVybyhvKGYodCxuKSkpfSkuYXR0cigiY3kiLGY9CnVuY3Rpb24odCxuKXtyZXR1cm4gZS51 dGlscy5OYU50b1plcm8odShsKHQsbikpKX0pLmF0dHIoInIiLGZ1bmN0aW9uKGUsdCl7cj0KZXR1 cm4gTWF0aC5zcXJ0KGEoYyhlLHQpKS9NYXRoLlBJKX0pfWVsc2V7dmFyIFk9M0RHLnNlbGVjdEFs bCgicGF0aC5udi1wb2luPQp0IikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KTtZ LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGw9CiIsZnVuY3Rpb24oZSx0KXtyZXR1 cm4gZS5jb2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sbz0K cn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrUChm KGUsdCkpKyIsIitIKGwoZSx0PQopKSsiKSJ9KS5hdHRyKCJkIixkMy5zdmcuc3ltYm9sKCkudHlw ZShoKS5zaXplKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoYyhlLHQ9CikpfSkpLFkuZXhpdCgpLnJl bW92ZSgpLEcuZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1wb2ludCIpLmF0dHIoInRyYW5zZm9y bT0KIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGYoZSx0KSkrIiwiK3UobChl LHQpKSsiKSJ9KS5yZW1vdmUoKSxZPQouZWFjaChmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlz KS5jbGFzc2VkKCJudi1wb2ludCIsITApLmNsYXNzZWQoIm52LXBvaW49CnQtIit0LCEwKS5jbGFz c2VkKCJob3ZlciIsITEpfSksWS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJu InRyYT0KbnNsYXRlKCIrbyhmKGUsdCkpKyIsIit1KGwoZSx0KSkrIikifSkuYXR0cigiZCIsZDMu c3ZnLnN5bWJvbCgpLnR5cGUoaCkuc2l6PQplKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoYyhlLHQp KX0pKX1jbGVhclRpbWVvdXQoaiksaj0zRHNldFRpbWVvdXQoUSwzMDApLFA9Cj0zRG8uY29weSgp LEg9M0R1LmNvcHkoKSxCPTNEYS5jb3B5KCl9KSxJfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90 dG9tOjAsbD0KZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3Io KSxzPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvPQptKCkqMWU1KSxvPTNEZDMuc2NhbGUubGluZWFy KCksdT0zRGQzLnNjYWxlLmxpbmVhcigpLGE9M0RkMy5zY2FsZS5saW5lYXIoKSw9CmY9M0RmdW5j dGlvbihlKXtyZXR1cm4gZS54fSxsPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYz0zRGZ1bmN0 aW9uKGUpe3JldD0KdXJuIGUuc2l6ZXx8MX0saD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnNoYXBl fHwiY2lyY2xlIn0scD0zRCEwLGQ9M0RbXSx2PTNEPQpbXSxtPTNEW10sZz0zRCEwLHk9M0RudWxs LGI9M0RmdW5jdGlvbihlKXtyZXR1cm4hZS5ub3RBY3RpdmV9LHc9M0QhMSxFPTNELjE9CixTPTNE ITEseD0zRCEwLFQ9M0RmdW5jdGlvbigpe3JldHVybiAyNX0sTj0zRG51bGwsQz0zRG51bGwsaz0z RG51bGwsTD0zRG51bD0KbCxBPTNEbnVsbCxPPTNEbnVsbCxNPTNEITEsXz0zRGQzLmRpc3BhdGNo KCJlbGVtZW50Q2xpY2siLCJlbGVtZW50TW91c2VvdmVyPQoiLCJlbGVtZW50TW91c2VvdXQiKSxE PTNEITAsUCxILEIsaixGPTNEITE7cmV0dXJuIEkuY2xlYXJIaWdobGlnaHRzPTNEZnVuY3Q9Cmlv bigpe2QzLnNlbGVjdEFsbCgiLm52LWNoYXJ0LSIrcysiIC5udi1wb2ludC5ob3ZlciIpLmNsYXNz ZWQoImhvdmVyIiwhMSl9LD0KSS5oaWdobGlnaHRQb2ludD0zRGZ1bmN0aW9uKGUsdCxuKXtkMy5z ZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYtc2VyaWVzLSIrPQplKyIgLm52LXBvaW50LSIrdCku Y2xhc3NlZCgiaG92ZXIiLG4pfSxfLm9uKCJlbGVtZW50TW91c2VvdmVyLnBvaW50IixmdW5jdGk9 Cm9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpZXNJbmRleCxlLnBvaW50SW5kZXgsITAp fSksXy5vbigiZWxlbWVudE1vdT0Kc2VvdXQucG9pbnQiLGZ1bmN0aW9uKGUpe2cmJkkuaGlnaGxp Z2h0UG9pbnQoZS5zZXJpZXNJbmRleCxlLnBvaW50SW5kZXgsITEpPQp9KSxJLmRpc3BhdGNoPTNE XyxJLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoSSksSS54PTNEZnVuY3Rpb24o ZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGQzLmZ1bmN0b3IoZSksSSk6Zn0sSS55 PTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8obD0zRGQzLmZ1bmN0b3Io ZSksSSk6bH0sSS5zaXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8o Yz0zRGQzLmZ1bmN0b3IoZSksSSk6Y30sSS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnQ9CnMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRv cDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mID0KZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0 OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmPQppbmVkIj9lLmJv dHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVm dDp0LmxlZnQ9CixJKTp0fSxJLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG49M0RlLEkpOm59LEkuaGVpZ2h0PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocj0zRGUsSSk6cn0sSS54U2NhbGU9M0RmdW5jdGlvbihlKXs9CnJldHVybiBh cmd1bWVudHMubGVuZ3RoPyhvPTNEZSxJKTpvfSxJLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudD0Kcy5sZW5ndGg/KHU9M0RlLEkpOnV9LEkuelNjYWxlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlPQosSSk6YX0sSS54RG9tYWluPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEkpOk59LEkueURvbWE9CmluPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0RlLEkpOkN9LEkuc2l6ZURv bWFpbj0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9M0RlLEkpOkF9 LEkueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oaz0zRGUs SSk6a30sSS55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihM PTNEZSxJKTpMfSxJLnNpemVSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhPPTNEZSxJKTpPfT0KLEkuZm9yY2VYPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGQ9M0RlLEkpOmR9LEkuZm9yY2VZPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odj0zRGUsSSk6dn0sSS5mb3JjZVNpemU9M0RmdW5jdGlvbihlKXtyZXQ9 CnVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxJKTptfSxJLmludGVyYWN0aXZlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oZz0zRGUsSSk6Z30sSS5wb2ludEtleT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PQo9M0RlLEkpOnl9LEkucG9p bnRBY3RpdmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsSSk6 Yn09CixJLnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0z RGUsSSk6d30sSS5wYWREYXRhT3V0ZT0Kcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhFPTNEZSxJKTpFfSxJLmNsaXBFZGdlPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oUz0zRGUsSSk6U30sSS5jbGlwVm9yb25vaT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEkpOnh9LEkudXNlVm9yb25vaT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KEQ9M0RlLEQ9M0Q9M0Q9M0QhMSYmKHg9 M0QhMSksSSk6RH0sSS5jbGlwUmFkaXVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRz Lmxlbmd0aD8oVD0zRGUsSSk6VH0sSS5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu dHMubGVuZ3Q9Cmg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLEkpOml9LEkuc2hhcGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhoPTNEZSxJKTpofSxJLm9ubHlDaXJj bGVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlPQosSSk6cH0s SS5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxJKTpzfSxJ LnNpbmdsZVBvaW49CnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0z RGUsSSk6TX0sSX0sZS5tb2RlbHMuc2NhdHRlckNoYT0KcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9u IEYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBKKCl7aWYoVClyPQpldHVy biBXLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxs IiksITE7Vy5zZWxlY3Q9CigiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRz Iiwibm9uZSIpO3ZhciBpPTNEZDMubW91c2UodGhpcyk7aD0KLmRpc3RvcnRpb24oeCkuZm9jdXMo aVswXSkscC5kaXN0b3J0aW9uKHgpLmZvY3VzKGlbMV0pLFcuc2VsZWN0KCIubnYtc2NhdHRlPQpy V3JhcCIpLmNhbGwodCksYiYmVy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pLHcmJlcu c2VsZWN0KCIubnYteS5udi09CmF4aXMiKS5jYWxsKHIpLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0 aW9uWCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldD0KdXJuIWUuZGlzYWJsZWR9KSku Y2FsbChvKSxXLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5kYXR1bShlLmZpbHRlcihmdW5j PQp0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodSl9dmFyIEM9M0RkMy5zZWxlY3Qo dGhpcyksaz0zRHRoaXMsTD0zRCg9CmZ8fHBhcnNlSW50KEMuc3R5bGUoIndpZHRoIikpfHw5NjAp LWEubGVmdC1hLnJpZ2h0LEQ9M0QobHx8cGFyc2VJbnQoQy5zdHlsZT0KKCJoZWlnaHQiKSl8fDQw MCktYS50b3AtYS5ib3R0b207Ri51cGRhdGU9M0RmdW5jdGlvbigpe0MuY2FsbChGKX0sRi5jb250 YWluPQplcj0zRHRoaXMsQS5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5k aXNhYmxlZH0pO2lmKCFPKXt2YXIgSTs9Ck89M0R7fTtmb3IoSSBpbiBBKUFbSV1pbnN0YW5jZW9m IEFycmF5P09bSV09M0RBW0ldLnNsaWNlKDApOk9bSV09M0RBW0ldfWlmKD0KIWV8fCFlLmxlbmd0 aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgp e3ZhciBxPQo9M0RDLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW19dKTtyZXR1cm4gcS5l bnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHI9CigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0 dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKT0KLHEuYXR0cigi eCIsYS5sZWZ0K0wvMikuYXR0cigieSIsYS50b3ArRC8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVy biBlfSksRn1DPQouc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksUD0zRFB8fGgsSD0z REh8fHA7dmFyIFI9M0RDLnNlbGVjdEFsbCgiZy49Cm52LXdyYXAubnYtc2NhdHRlckNoYXJ0Iiku ZGF0YShbZV0pLFU9M0RSLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLD0KIm52ZDMg bnYtd3JhcCBudi1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkpLHo9M0RVLmFwcGVuZCgi ZyIpLFc9M0RSLnNlPQpsZWN0KCJnIik7ei5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52 ZDMgbnYtYmFja2dyb3VuZCIpLHouYXBwZW5kKCJnIik9Ci5hdHRyKCJjbGFzcyIsIm52LXggbnYt YXhpcyIpLHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSx6Lj0KYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpLHouYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1kPQppc3RXcmFwIiksei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LWxlZ2VuZFdyYXAiKSx6LmFwcGVuZCgiZyIpLmF0dHIoImM9Cmxhc3MiLCJudi1jb250cm9sc1dy YXAiKTtpZih5KXt2YXIgWD0zRFM/TC8yOkw7aS53aWR0aChYKSxSLnNlbGVjdCgiLm52LWxlZz0K ZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksYS50b3AhPTNEaS5oZWlnaHQoKSYmKGEudG9wPTNE aS5oZWlnaHQoKSxEPTNEKGx8PQp8cGFyc2VJbnQoQy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEu dG9wLWEuYm90dG9tKSxSLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXA9CiIpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiKyhMLVgpKyIsIisgLWEudG9wKyIpIil9UyYmKHMud2lkdGgoMTgwKS5j bz0KbG9yKFsiIzQ0NCJdKSxXLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKGopLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zPQpsYXRlKDAsIisgLWEudG9wKyIpIikuY2FsbChzKSksUi5h dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmxlZnQrIiwiK2E9Ci50b3ArIikiKSxFJiZX LnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0wr IiwwKT0KIiksdC53aWR0aChMKS5oZWlnaHQoRCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuPQpmaWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZH0pKSxkIT0zRD0zRDAmJnQueERvbWFpbihudWxsKSx2IT0KPTNEPTNEMCYmdC55 RG9tYWluKG51bGwpLFIuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlLmZpbHRlcihm dW5jdGlvPQpuKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCk7aWYoZCE9M0Q9M0QwKXt2 YXIgVj0zRGguZG9tYWluKClbMV0taC5kb209CmFpbigpWzBdO3QueERvbWFpbihbaC5kb21haW4o KVswXS1kKlYsaC5kb21haW4oKVsxXStkKlZdKX1pZih2IT0zRD0zRDApe3Zhcj0KICQ9M0RwLmRv bWFpbigpWzFdLXAuZG9tYWluKClbMF07dC55RG9tYWluKFtwLmRvbWFpbigpWzBdLXYqJCxwLmRv bWFpbigpWzFdPQordiokXSl9KHYhPTNEPTNEMHx8ZCE9M0Q9M0QwKSYmUi5zZWxlY3QoIi5udi1z Y2F0dGVyV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGY9CnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJs ZWR9KSkuY2FsbCh0KSxiJiYobi5zY2FsZShoKS50aWNrcyhuLnRpY2tzKCkmJm4udD0KaWNrcygp Lmxlbmd0aD9uLnRpY2tzKCk6TC8xMDApLnRpY2tTaXplKC1ELDApLFcuc2VsZWN0KCIubnYteC5u di1heGlzIikuYXR0PQpyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsi KSIpLmNhbGwobikpLHcmJihyLnNjYWxlKHApLnRpY2s9CnMoci50aWNrcygpJiZyLnRpY2tzKCku bGVuZ3RoP3IudGlja3MoKTpELzM2KS50aWNrU2l6ZSgtTCwwKSxXLnNlbGVjdCgiLm52LT0KeS5u di1heGlzIikuY2FsbChyKSksbSYmKG8uZ2V0RGF0YSh0LngoKSkuc2NhbGUoaCkud2lkdGgoTCku Y29sb3IoZS5tYXAoZnVuPQpjdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0 ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmw9CmVkfSkpLHouc2VsZWN0KCIubnYt ZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblgiKT0K LFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgwLCIrcC5yYW5nZSgpWzBdPQorIikiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1 cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pKSxnJiYodS5nZXREYXQ9CmEodC55KCkpLnNjYWxlKHAp LndpZHRoKEQpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0 KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksei5zZWxl Y3QoIi5udi1kaXN0V3JhcCIpLmFwPQpwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXN0cmli dXRpb25ZIiksVy5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25ZIikuYXQ9CnRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIisoRT9MOi11LnNpemUoKSkrIiwwKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0 aW9uKD0KZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMuZmlzaGV5ZSYmKFcuc2Vs ZWN0KCIubnYtYmFja2dyb3VuZCIpLmF0PQp0cigid2lkdGgiLEwpLmF0dHIoImhlaWdodCIsRCks Vy5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikub24oIm1vdXNlbW92ZSIsSik9CixXLnNlbGVjdCgi Lm52LWJhY2tncm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7VD0zRCFUfSksdC5kaXNwYXRj aC5vbigiZT0KbGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuY3Rpb24oKXtUPTNEIVR9KSks cy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siPQosZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPTNE IWUuZGlzYWJsZWQseD0zRGUuZGlzYWJsZWQ/MDoyLjUsVy5zZWxlY3QoIi5udi09CmJhY2tncm91 bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/Im5vbmUiOiJhbGwiKSxXLnNl bGVjdCgiLm52LT0KcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJs ZWQ/ImFsbCI6Im5vbmUiKSxlLmRpc2FibGVkPyhoPQouZGlzdG9ydGlvbih4KS5mb2N1cygwKSxw LmRpc3RvcnRpb24oeCkuZm9jdXMoMCksVy5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCI9CikuY2Fs bCh0KSxXLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksVy5zZWxlY3QoIi5udi15Lm52 LWF4aXMiKS5jYWxsKD0KcikpOlQ9M0QhMSxGLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3Rh dGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0EuZGlzYWJsZWQ9Cj0zRGUuZGlzYWJsZWQsTS5zdGF0ZUNo YW5nZShBKSxGLnVwZGF0ZSgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlcj0KLnRv b2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNl cmllcy0iK2Uuc2VyaWVzPQpJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigi eTEiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUucG9zWzFdLUQ9Cn0pLGQzLnNlbGVjdCgiLm52LWNo YXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHktIj0K K2UucG9pbnRJbmRleCkuYXR0cigieDIiLGUucG9zWzBdK28uc2l6ZSgpKSxlLnBvcz0zRFtlLnBv c1swXSthLmxlZnQsZS5wb3NbPQoxXSthLnRvcF0sTS50b29sdGlwU2hvdyhlKX0pLE0ub24oInRv b2x0aXBTaG93IixmdW5jdGlvbihlKXtOJiZCKGUsay5wYXJlbnQ9Ck5vZGUpfSksTS5vbigiY2hh bmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYo ZT0KLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLEEu ZGlzYWJsZWQ9M0R0LmRpc2FibGVkPQopLEYudXBkYXRlKCl9KSxQPTNEaC5jb3B5KCksSD0zRHAu Y29weSgpfSksRn12YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKSxuPQo9M0RlLm1vZGVscy5heGlz KCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5kKCkscz0zRGUubW9kZWxz Lmw9CmVnZW5kKCksbz0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLHU9M0RlLm1vZGVscy5kaXN0 cmlidXRpb24oKSxhPTNEe3RvcDozMD0KLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0Ojc1fSxmPTNE bnVsbCxsPTNEbnVsbCxjPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxoPQo9M0RkMy5maXNoZXll P2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueFNjYWxl KCkscD0KPTNEZDMuZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlz dG9ydGlvbigwKTp0LnlTY2FsZSgpLGQ9Cj0zRDAsdj0zRDAsbT0zRCExLGc9M0QhMSx5PTNEITAs Yj0zRCEwLHc9M0QhMCxFPTNEITEsUz0zRCEhZDMuZmlzaGV5ZSx4PTNEMD0KLFQ9M0QhMSxOPTNE ITAsQz0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LGs9 M0RmdW5jPQp0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK24rIjwvc3Ryb25nPiJ9LEw9M0Ru dWxsLEE9M0R7fSxPPTNEbnVsbCxNPTNEZDM9Ci5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29s dGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxfPTNEIk5vID0KRGF0YSBBdmFp bGFibGUuIixEPTNEMDt0LnhTY2FsZShoKS55U2NhbGUocCksbi5vcmllbnQoImJvdHRvbSIpLnRp Y2tQYWRkaW5nPQooMTApLHIub3JpZW50KEU/InJpZ2h0IjoibGVmdCIpLnRpY2tQYWRkaW5nKDEw KSxvLmF4aXMoIngiKSx1LmF4aXMoInkiKSxzLnU9CnBkYXRlU3RhdGUoITEpO3ZhciBQLEgsQj0z RGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKT0KLHU9M0Rp LnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGY9M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSxs PTNEcC5yYW5nZSgpPQpbMF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxjPTNEaC5yYW5nZSgpWzBd K2EubGVmdCsocy5vZmZzZXRMZWZ0fHwwKSxkPTNEaS49CnBvc1sxXSsocy5vZmZzZXRUb3B8fDAp LHY9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLG09Cj0zRHIu dGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSk7QyE9M0RudWxsJiZlLnRv b2x0aXAuc2hvdyhbZj0KLGxdLEMoaS5zZXJpZXMua2V5LHYsbSxpLEYpLCJuIiwxLHMsIngtbnZ0 b29sdGlwIiksayE9M0RudWxsJiZlLnRvb2x0aXAuc2hvPQp3KFtjLGRdLGsoaS5zZXJpZXMua2V5 LHYsbSxpLEYpLCJlIiwxLHMsInktbnZ0b29sdGlwIiksTCE9M0RudWxsJiZlLnRvb2x0aXA9Ci5z aG93KFtvLHVdLEwoaS5zZXJpZXMua2V5LHYsbSxpLEYpLGkudmFsdWU8MD8ibiI6InMiLG51bGws cyl9LGo9M0Rbe2tleToiTT0KYWduaWZ5IixkaXNhYmxlZDohMH1dO3JldHVybiB0LmRpc3BhdGNo Lm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3RpPQpvbihlKXtNLnRvb2x0aXBIaWRl KGUpLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWU9 CnNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLDApLGQzLnNlbGVj dCgiLm52LWNoYXJ0LSIrdC5pZD0KKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5u di1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLHUuc2l6PQplKCkpfSksTS5vbigidG9v bHRpcEhpZGUiLGZ1bmN0aW9uKCl7TiYmZS50b29sdGlwLmNsZWFudXAoKX0pLEYuZGlzcGF0Y2g9 M0Q9Ck0sRi5zY2F0dGVyPTNEdCxGLmxlZ2VuZD0zRGksRi5jb250cm9scz0zRHMsRi54QXhpcz0z RG4sRi55QXhpcz0zRHIsRi5kaXN0WD0KPTNEbyxGLmRpc3RZPTNEdSxkMy5yZWJpbmQoRix0LCJp ZCIsImludGVyYWN0aXZlIiwicG9pbnRBY3RpdmUiLCJ4IiwieSIsInNoPQphcGUiLCJzaXplIiwi eFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5 UmFuZ2U9CiIsInNpemVEb21haW4iLCJzaXplUmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3Jj ZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaT0KcFJhZGl1cyIsInVzZVZvcm9ub2kiKSxGLm9wdGlv bnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoRiksRi5tYXJnaW49M0RmPQp1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZp bmVkIj9lLnQ9Cm9wOmEudG9wLGEucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVk Ij9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209Cj0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZp bmVkIj9lLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0KPTNEInVuZGVm aW5lZCI/ZS5sZWZ0OmEubGVmdCxGKTphfSxGLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sPQplbmd0aD8oZj0zRGUsRik6Zn0sRi5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsRik9CjpsfSxGLmNvbG9yPTNEZnVuY3Rpb24odCl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQpLD0KaS5jb2xv cihjKSxvLmNvbG9yKGMpLHUuY29sb3IoYyksRik6Y30sRi5zaG93RGlzdFg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhtPTNEZSxGKTptfSxGLnNob3dEaXN0WT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGc9M0RlLEYpOmd9LEYuc2hvd0Nv bnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9M0RlLD0KRik6 U30sRi5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9 M0RlLEYpOnl9LEYuc2hvPQp3WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYj0zRGUsRik6Yn0sRi5zaG93WUF4aXM9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyh3PTNEZSxGKTp3fSxGLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKD0K ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVm dCIpLEYpOkV9LEYuZmlzaGV5PQplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHg9M0RlLEYpOnh9LEYueFBhZGRpbmc9M0RmdW5jdGlvbig9CmUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhkPTNEZSxGKTpkfSxGLnlQYWRkaW5nPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Zz0KdW1lbnRzLmxlbmd0aD8odj0zRGUsRik6dn0sRi50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KE49M0RlLEYpOk59LEYudG9vbHRpcENvbnRlbnQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0zRGU9CixGKTpMfSxGLnRvb2x0 aXBYQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPTNEZSxG KTpDfT0KLEYudG9vbHRpcFlDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGs9M0RlLEYpOmt9LEYuc3RhPQp0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhBPTNEZSxGKTpBfSxGLmRlZmF1bHRTdGF0ZT0zRGZ1bmM9CnRpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89M0RlLEYpOk99LEYubm9EYXRhPTNEZnVuY3Rpb24oZSl7 cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8oXz0zRGUsRik6X30sRi50cmFuc2l0aW9uRHVyYXRp b249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhEPTNEZSxGKTpEfSxG fSxlLm1vZGVscy5zY2F0dGVyUGx1c0xpbmVDaGFydD0zRGZ1bmN0aW9uKCl7ZnU9Cm5jdGlvbiBC KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gVigpe2lmKFMpcmV0dXJuIFUu c2VsZWN0KCIubj0Kdi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIp LCExO1Uuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiPQopLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIs Im5vbmUiKTt2YXIgaT0zRGQzLm1vdXNlKHRoaXMpO2guZGlzdG9ydGlvbihFKS5mb2M9CnVzKGlb MF0pLHAuZGlzdG9ydGlvbihFKS5mb2N1cyhpWzFdKSxVLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFw IikuZGF0dW0oZS5maT0KbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxs KHQpLGcmJlUuc2VsZWN0KCIubnYteC5udi1heGlzIikuPQpjYWxsKG4pLHkmJlUuc2VsZWN0KCIu bnYteS5udi1heGlzIikuY2FsbChyKSxVLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblgiKS49CmRh dHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobyksVS5z ZWxlY3QoIi5udi1kaXN0cj0KaWJ1dGlvblkiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHUpfXZhciBUPTNEPQpkMy5zZWxlY3QodGhpcyksTj0z RHRoaXMsQz0zRChmfHxwYXJzZUludChULnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1hLmxlZnQtYS49 CnJpZ2h0LE09M0QobHx8cGFyc2VJbnQoVC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEu Ym90dG9tO0IudXBkYXRlPTNEZj0KdW5jdGlvbigpe1QuY2FsbChCKX0sQi5jb250YWluZXI9M0R0 aGlzLGsuZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1PQpybiEhZS5kaXNhYmxlZH0p O2lmKCFMKXt2YXIgajtMPTNEe307Zm9yKGogaW4gaylrW2pdaW5zdGFuY2VvZiBBcnJheT9MW2pd PQo9M0RrW2pdLnNsaWNlKDApOkxbal09M0RrW2pdfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRl cihmdW5jdGlvbihlKXtyZXR1cm49CiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBGPTNE VC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtPXSk7cmV0dT0Kcm4gRi5lbnRlcigpLmFw cGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0u N2VtPQoiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxGLmF0dHIoIngiLGEubGVmdCtD LzIpLmF0dHIoInkiLGEudG9wK00vMik9Ci50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQn1U LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGg9M0R0LnhTYz0KYWxlKCkscD0zRHQu eVNjYWxlKCksXz0zRF98fGgsRD0zRER8fHA7dmFyIEk9M0RULnNlbGVjdEFsbCgiZy5udi13cmFw Lm52LXNjPQphdHRlckNoYXJ0IikuZGF0YShbZV0pLHE9M0RJLmVudGVyKCkuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXA9CiBudi1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0 LmlkKCkpLFI9M0RxLmFwcGVuZCgiZyIpLFU9M0RJLnNlbGVjdCgiZyIpO1IuYT0KcHBlbmQoInJl Y3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYmFja2dyb3VuZCIpLnN0eWxlKCJwb2ludGVyLWV2 ZW50cyIsIm5vPQpuZSIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMi KSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiw9CiJudi15IG52LWF4aXMiKSxSLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdHRlcldyYXAiKSxSLmFwcGVuZCgiZyIpLj0KYXR0cigi Y2xhc3MiLCJudi1yZWdyZXNzaW9uTGluZXNXcmFwIiksUi5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LWRpc3RXPQpyYXAiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5k V3JhcCIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsIm52LWNvbnRyb2xzV3JhcCIpLEku YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5sZWZ0KyIsIithLnRvcCsiKSIpLD0KYiYm VS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitD KyIsMCkiKSxtJiYoaS53PQppZHRoKEMvMiksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0 dW0oZSkuY2FsbChpKSxhLnRvcCE9M0RpLmhlaWdodCgpJiY9CihhLnRvcD0zRGkuaGVpZ2h0KCks TT0zRChsfHxwYXJzZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0bz0K bSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIrQy8yKyIsIisgLWEudG9wPQorIikiKSksdyYmKHMud2lkdGgoMTgwKS5jb2xvcihbIiM0NDQi XSksVS5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bSg9CkgpLmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLHQud2lkdGgoQykuaGVpZ2h0 KD0KTSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSku ZmlsdGVyKGZ1bmN0aW9uKHQsbil7PQpyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxJLnNlbGVjdCgi Lm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb249CihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKS5jYWxsKHQpLEkuc2VsZWN0KCIubnYtcmVncmVzc2lvbkxpbmVzV3JhcCIpLmF0 dHIoIj0KY2xpcC1wYXRoIiwidXJsKCNudi1lZGdlLWNsaXAtIit0LmlkKCkrIikiKTt2YXIgej0z REkuc2VsZWN0KCIubnYtcmVncmVzc2lvPQpuTGluZXNXcmFwIikuc2VsZWN0QWxsKCIubnYtcmVn TGluZXMiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7ei5lbnRlcig9CikuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1yZWdMaW5lcyIpO3ZhciBXPTNEei5zZWxlY3RBbGwoIi5udi1y ZWdMaW5lIj0KKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pLFg9M0RXLmVudGVyKCkuYXBw ZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJuPQp2LXJlZ0xpbmUiKS5zdHlsZSgic3Ryb2tlLW9w YWNpdHkiLDApO1cuYXR0cigieDEiLGgucmFuZ2UoKVswXSkuYXR0cigieDIiLGg9Ci5yYW5nZSgp WzFdKS5hdHRyKCJ5MSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRvbWFpbigpWzBdKmUuc2xv cGUrZS5pbnRlcj0KY2VwdCl9KS5hdHRyKCJ5MiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRv bWFpbigpWzFdKmUuc2xvcGUrZS5pbnRlcmNlcHQpPQp9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlv bihlLHQsbil7cmV0dXJuIGMoZSxuKX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnU9Cm5jdGlv bihlLHQpe3JldHVybiBlLmRpc2FibGVkfHx0eXBlb2YgZS5zbG9wZT0zRD0zRCJ1bmRlZmluZWQi fHx0eXBlb2YgZS5pbj0KdGVyY2VwdD0zRD0zRCJ1bmRlZmluZWQiPzA6MX0pLGcmJihuLnNjYWxl KGgpLnRpY2tzKG4udGlja3MoKT9uLnRpY2tzKCk6Qy8xPQowMCkudGlja1NpemUoLU0sMCksVS5z ZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCw9CiIr cC5yYW5nZSgpWzBdKyIpIikuY2FsbChuKSkseSYmKHIuc2NhbGUocCkudGlja3Moci50aWNrcygp P3IudGlja3MoKTpNLzM2KT0KLnRpY2tTaXplKC1DLDApLFUuc2VsZWN0KCIubnYteS5udi1heGlz IikuY2FsbChyKSksZCYmKG8uZ2V0RGF0YSh0LngoKSkuc2NhPQpsZShoKS53aWR0aChDKS5jb2xv cihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnU9 Cm5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLFIuc2VsZWN0KCIubnYtZGlzdFdy YXAiKS5hcHBlbmQoImciKS5hdD0KdHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpLFUuc2Vs ZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5zZm9yPQptIiwidHJhbnNsYXRlKDAs IitwLnJhbmdlKClbMF0rIikiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXM9CmFibGVkfSkpLmNhbGwobykpLHYmJih1LmdldERhdGEodC55KCkpLnNjYWxlKHApLndpZHRo KE0pLmNvbG9yKGUubWFwKGZ1bmN0aT0Kb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSku ZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9PQopKSxSLnNlbGVjdCgi Lm52LWRpc3RXcmFwIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXN0cmlidXRpb25Z IiksVS49CnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIisoYj9DOi11LnNpemUoKSkrIj0KLDApIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24o ZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMuZmlzaGV5ZSYmPQooVS5zZWxlY3Qo Ii5udi1iYWNrZ3JvdW5kIikuYXR0cigid2lkdGgiLEMpLmF0dHIoImhlaWdodCIsTSksVS5zZWxl Y3QoIi5udi09CmJhY2tncm91bmQiKS5vbigibW91c2Vtb3ZlIixWKSxVLnNlbGVjdCgiLm52LWJh Y2tncm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aT0Kb24oKXtTPTNEIVN9KSx0LmRpc3BhdGNoLm9u KCJlbGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuY3Rpb24oKXtTPTNEIVN9PQopKSxzLmRp c3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPTNEIWUuZGlz YWJsZWQsRT0zRGU9Ci5kaXNhYmxlZD8wOjIuNSxVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5z dHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZT0KZD8ibm9uZSI6ImFsbCIpLFUuc2VsZWN0 KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsPQplZD8i YWxsIjoibm9uZSIpLGUuZGlzYWJsZWQ/KGguZGlzdG9ydGlvbihFKS5mb2N1cygwKSxwLmRpc3Rv cnRpb24oRSkuZm9jdXM9CigwKSxVLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxV LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksVT0KLnNlbGVjdCgiLm52LXkubnYtYXhp cyIpLmNhbGwocikpOlM9M0QhMSxCLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDPQpo YW5nZSIsZnVuY3Rpb24oZSl7az0zRGUsQS5zdGF0ZUNoYW5nZShrKSxCLnVwZGF0ZSgpfSksdC5k aXNwYXRjaC5vbigiZWxlbWU9Cm50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNl bGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcz0KLSIrZS5zZXJpZXNJbmRleCsi IC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGUucG9zWzFdLU0pLGQzLnNlbGVj PQp0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5u di1kaXN0eS0iK2UucG9pbnRJbmQ9CmV4KS5hdHRyKCJ4MiIsZS5wb3NbMF0rby5zaXplKCkpLGUu cG9zPTNEW2UucG9zWzBdK2EubGVmdCxlLnBvc1sxXSthLnRvcF0sQT0KLnRvb2x0aXBTaG93KGUp fSksQS5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3gmJlAoZSxOLnBhcmVudE5vZGUpfSks QS5vPQpuKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVu ZGVmaW5lZCImJihlLmZvckVhY2goZnU9Cm5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2Fi bGVkW25dfSksay5kaXNhYmxlZD0zRHQuZGlzYWJsZWQpLEIudXBkYXRlKD0KKX0pLF89M0RoLmNv cHkoKSxEPTNEcC5jb3B5KCl9KSxCfXZhciB0PTNEZS5tb2RlbHMuc2NhdHRlcigpLG49M0RlLm1v ZGVscy5hPQp4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxz PTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRGU9Ci5tb2RlbHMuZGlzdHJpYnV0aW9uKCksdT0zRGUu bW9kZWxzLmRpc3RyaWJ1dGlvbigpLGE9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdD0KdG9tOjUwLGxl ZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGg9M0Rk My5maXNoZXllPQo/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24o MCk6dC54U2NhbGUoKSxwPTNEZDMuZmlzaGV5ZT89CmQzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUu bGluZWFyKS5kaXN0b3J0aW9uKDApOnQueVNjYWxlKCksZD0zRCExLHY9M0QhMSxtPQo9M0QhMCxn PTNEITAseT0zRCEwLGI9M0QhMSx3PTNEISFkMy5maXNoZXllLEU9M0QwLFM9M0QhMSx4PTNEITAs VD0zRGZ1bmN0aW89Cm4oZSx0LG4pe3JldHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0sTj0z RGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz0KPiIrbisiPC9zdHJvbmc+In0sQz0zRGZ1 bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrcisiPC9wPQo+In0s az0zRHt9LEw9M0RudWxsLEE9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlk ZSIsInN0YXRlQ2hhbmc9CmUiLCJjaGFuZ2VTdGF0ZSIpLE89M0QiTm8gRGF0YSBBdmFpbGFibGUu IixNPTNEMDt0LnhTY2FsZShoKS55U2NhbGUocCksbi5vcj0KaWVudCgiYm90dG9tIikudGlja1Bh ZGRpbmcoMTApLHIub3JpZW50KGI/InJpZ2h0IjoibGVmdCIpLnRpY2tQYWRkaW5nKDEwKSxvPQou YXhpcygieCIpLHUuYXhpcygieSIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBfLEQsUD0zRGZ1bmN0 aW9uKGkscyl7dmFyIG89M0Q9CmkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sx XSsocy5vZmZzZXRUb3B8fDApLGY9M0RpLnBvc1swXSsocy5vZj0KZnNldExlZnR8fDApLGw9M0Rw LnJhbmdlKClbMF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxjPTNEaC5yYW5nZSgpWzBdK2EubGVm PQp0KyhzLm9mZnNldExlZnR8fDApLGQ9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLHY9M0Ru LnRpY2tGb3JtYXQoKSh0LngoKSg9CmkucG9pbnQsaS5wb2ludEluZGV4KSksbT0zRHIudGlja0Zv cm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSk7VCE9Cj0zRG51bGwmJmUudG9vbHRp cC5zaG93KFtmLGxdLFQoaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJuIiwxLHMsIngtbnZ0b29sdGlw Ij0KKSxOIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtjLGRdLE4oaS5zZXJpZXMua2V5LHYsbSxp LEIpLCJlIiwxLHMsInktbnZ0b29sPQp0aXAiKSxDIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtv LHVdLEMoaS5zZXJpZXMua2V5LHYsbSxpLnBvaW50LnRvb2x0aXAsaSw9CkIpLGkudmFsdWU8MD8i biI6InMiLG51bGwscyl9LEg9M0Rbe2tleToiTWFnbmlmeSIsZGlzYWJsZWQ6ITB9XTtyZXR1cm4g dC5kaT0Kc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7QS50 b29sdGlwSGlkZShlKSxkMy5zZWxlY3QoPQoiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmll cy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitlLnBvaW50SW5kZXg9CikuYXR0cigieTEi LDApLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVz SW5kZXgrIj0KIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLHUuc2l6ZSgpKX0p LEEub24oInRvb2x0aXBIaWRlIixmdW5jdGlvPQpuKCl7eCYmZS50b29sdGlwLmNsZWFudXAoKX0p LEIuZGlzcGF0Y2g9M0RBLEIuc2NhdHRlcj0zRHQsQi5sZWdlbmQ9M0RpLEIuY289Cm50cm9scz0z RHMsQi54QXhpcz0zRG4sQi55QXhpcz0zRHIsQi5kaXN0WD0zRG8sQi5kaXN0WT0zRHUsZDMucmVi aW5kKEIsdCwiaT0KZCIsImludGVyYWN0aXZlIiwicG9pbnRBY3RpdmUiLCJ4IiwieSIsInNoYXBl Iiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInpTPQpjYWxlIiwieERvbWFpbiIsInlEb21haW4i LCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwic2l6ZVJhbmdlIiwiZm9yY2U9ClgiLCJm b3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaXBSYWRpdXMiLCJ1c2VWb3Jvbm9p IiksQi5vcHRpb25zPQo9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQiksQi5tYXJnaW49M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhhLnRvcD0zRHR5cGVvZiBlLnRv cCE9M0QidW5kZWZpbmVkIj9lLnRvcDphLnRvcCxhLnJpZ2h0PTNEdHlwZW9mIGUucmlnaD0KdCE9 M0QidW5kZWZpbmVkIj9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20h PTNEInVuZGVmaW5lZCI/PQplLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0 IT0zRCJ1bmRlZmluZWQiP2UubGVmdDphLmxlZnQsQik6YX09CixCLndpZHRoPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEIpOmZ9LEIuaGVpZ2h0PTNEZnVuYz0K dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQik6bH0sQi5jb2xvcj0zRGZ1 bmN0aW9uKHQpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9y KHQpLGkuY29sb3IoYyksby5jb2xvcihjKSx1LmNvbG9yKGMpLEI9Cik6Y30sQi5zaG93RGlzdFg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsQik6ZH0sQi5zaG93 RD0KaXN0WT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxCKTp2 fSxCLnNob3dDb250cm9scz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHc9M0RlLEIpOnd9LEIuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG09M0RlLEIpOm19LEIuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZT0KbnRzLmxlbmd0aD8oZz0zRGUsQik6Z30sQi5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQp5PTNEZSxCKTp5fSxCLnJpZ2h0QWxpZ25ZQXhpcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSw9CnIub3JpZW50KGU/ InJpZ2h0IjoibGVmdCIpLEIpOmJ9LEIuZmlzaGV5ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubD0KZW5ndGg/KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsPQpCKTp4fSxCLnRvb2x0aXBDb250ZW50PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0RlLEIpOkN9LEI9Ci50b29sdGlw WENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQik6 VH0sQi50b29sdD0KaXBZQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhOPTNEZSxCKTpOfSxCLnN0YXRlPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oaz0zRGUsQik6a30sQi5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXs9CnJldHVy biBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxCKTpMfSxCLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KE89M0RlLEIpOk99LEIudHJhbnNpdGlvbkR1cmF0aW9u PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8oTT0zRGUsQik6TX0sQn0s ZS5tb2RlbHMuc3BhcmtsaW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBkKGUpe3JldHVybiA9CmUu ZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQsZD0zRHItdC50b3AtdC5i b3R0b20sdj0zRGQzLnNlbD0KZWN0KHRoaXMpO3MuZG9tYWluKGx8fGQzLmV4dGVudChlLHUpKS5y YW5nZShofHxbMCxpXSksby5kb21haW4oY3x8ZDMuZXh0ZW50PQooZSxhKSkucmFuZ2UocHx8W2Qs MF0pO3ZhciBtPTNEdi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFya2xpbmUiKS5kYXRhKFs9 CmVdKSxnPTNEbS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFw IG52LXNwYXJrbGluZSIpLGI9Cj0zRGcuYXBwZW5kKCJnIiksdz0zRG0uc2VsZWN0KCJnIik7bS5h dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIj0KLCIrdC50b3ArIikiKTt2YXIg RT0zRG0uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm5bZV19KTtFLmVu PQp0ZXIoKS5hcHBlbmQoInBhdGgiKSxFLmV4aXQoKS5yZW1vdmUoKSxFLnN0eWxlKCJzdHJva2Ui LGZ1bmN0aW9uKGUsdCl7cmV0dXI9Cm4gZS5jb2xvcnx8ZihlLHQpfSkuYXR0cigiZCIsZDMuc3Zn LmxpbmUoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModShlLHQpKT0KfSkueShmdW5jdGlvbihl LHQpe3JldHVybiBvKGEoZSx0KSl9KSk7dmFyIFM9M0RtLnNlbGVjdEFsbCgiY2lyY2xlLm52LXBv aW50PQoiKS5kYXRhKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aWYodCE9M0QtMSl7dmFyIG49 M0RlW3RdO3JldHVybiBuLnBvaW50SW49CmRleD0zRHQsbn1yZXR1cm4gbnVsbH12YXIgdD0zRGUu bWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pLHI9M0RuKHQubD0KYXN0SW5kZXhPZihv LmRvbWFpbigpWzFdKSksaT0zRG4odC5pbmRleE9mKG8uZG9tYWluKClbMF0pKSxzPTNEbih0Lmxl bmd0aC0xPQopO3JldHVybltpLHIsc10uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRG51 bGx9KX0pO1MuZW50ZXIoKS5hcHBlbmQoImM9CmlyY2xlIiksUy5leGl0KCkucmVtb3ZlKCksUy5h dHRyKCJjeCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh1KGUsZS5wb2ludEluZD0KZXgpKX0pLmF0 dHIoImN5IixmdW5jdGlvbihlLHQpe3JldHVybiBvKGEoZSxlLnBvaW50SW5kZXgpKX0pLmF0dHIo InIiLDIpLmF0PQp0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSxlLnBvaW50SW5k ZXgpPTNEPTNEcy5kb21haW4oKVsxXT8ibnYtcG89CmludCBudi1jdXJyZW50VmFsdWUiOmEoZSxl LnBvaW50SW5kZXgpPTNEPTNEby5kb21haW4oKVswXT8ibnYtcG9pbnQgbnYtbWluVj0KYWx1ZSI6 Im52LXBvaW50IG52LW1heFZhbHVlIn0pfSksZH12YXIgdD0zRHt0b3A6MixyaWdodDowLGJvdHRv bToyLGxlZnQ6MH0sPQpuPTNENDAwLHI9M0QzMixpPTNEITAscz0zRGQzLnNjYWxlLmxpbmVhcigp LG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gZS54fSxhPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRGUudXRpbHMuZ2V0Q29sb3IoWyIjMDAwIj0KXSks bCxjLGgscDtyZXR1cm4gZC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGQpLGQu bWFyZ2luPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0 eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC49CnRvcCx0LnJpZ2h0PTNEdHlwZW9m IGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPTNEdHlwZT0K b2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlw ZW9mIGUubGVmdCE9M0QidW5kPQplZmluZWQiP2UubGVmdDp0LmxlZnQsZCk6dH0sZC53aWR0aD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cm49M0RlLGQpOm59LGQuaGVp Z2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGQpOnJ9LGQu eD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9y KGUpLGQpOnV9LGQueT0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9 M0RkMy5mdW5jdG9yKGUpLGQpOmF9LGQueFNjYWxlPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocz0zRGUsZCk6c30sZC55U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndT0KbWVudHMubGVuZ3RoPyhvPTNEZSxkKTpvfSxkLnhEb21haW49M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpsPTNEZSxkKTpsfSxkLnlEb21haW49M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsZCk6Y30sZC49CnhSYW5nZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxkKTpofSxkLnlSYW5nZT0z RGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLGQpOnB9LGQuYW5p bWF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLGQpOml9 LGQuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihmPTNEZS51 dGlscy5nZXRDb2xvcih0KSxkKTpmfSxkfSxlLm1vZGVscy5zcGFya2xpbmVQbHVzPTNEZnVuY3Rp b24oKXtmdW5jdD0KaW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihjKXtmdW5jdGlvbiBP KCl7aWYoYSlyZXR1cm47dmFyIGU9M0RDLnNlbGVjPQp0QWxsKCIubnYtaG92ZXJWYWx1ZSIpLmRh dGEodSkscj0zRGUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWg9Cm92ZXJW YWx1ZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCk7 ZS5leGl0KCkuc3R5bD0KZSgic3Ryb2tlLW9wYWNpdHkiLDApLnN0eWxlKCJmaWxsLW9wYWNpdHki LDApLnJlbW92ZSgpLGUuYXR0cigidHJhbnNmb3JtIixmPQp1bmN0aW9uKGUpe3JldHVybiJ0cmFu c2xhdGUoIitzKHQueCgpKGNbZV0sZSkpKyIsMCkifSkuc3R5bGUoInN0cm9rZS1vcGFjaXQ9Cnki LDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDEpO2lmKCF1Lmxlbmd0aClyZXR1cm47ci5hcHBlbmQo ImxpbmUiKS5hdHRyKCJ4MT0KIiwwKS5hdHRyKCJ5MSIsLW4udG9wKS5hdHRyKCJ4MiIsMCkuYXR0 cigieTIiLGIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhPQpzcyIsIm52LXhWYWx1ZSIpLmF0 dHIoIngiLC02KS5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXQ9 CnRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLm52LWhvdmVyVmFsdWUgLm52LXhWYWx1ZSIpLnRl eHQoZih0LngoKShjW3VbMF1dLD0KdVswXSkpKSxyLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNz IiwibnYteVZhbHVlIikuYXR0cigieCIsNikuYXR0cigieSIsLW4uPQp0b3ApLmF0dHIoInRleHQt YW5jaG9yIiwic3RhcnQiKS5hdHRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLm52LWhvdmVyVmFs dWU9CiAubnYteVZhbHVlIikudGV4dChsKHQueSgpKGNbdVswXV0sdVswXSkpKX1mdW5jdGlvbiBN KCl7ZnVuY3Rpb24gcihlLG4pe3Zhcj0KIHI9M0RNYXRoLmFicyh0LngoKShlWzBdLDApLW4pLGk9 M0QwO2Zvcih2YXIgcz0zRDA7czxlLmxlbmd0aDtzKyspTWF0aC5hYnMoPQp0LngoKShlW3NdLHMp LW4pPHImJihyPTNETWF0aC5hYnModC54KCkoZVtzXSxzKS1uKSxpPTNEcyk7cmV0dXJuIGl9aWYo YSlyZXQ9CnVybjt2YXIgZT0zRGQzLm1vdXNlKHRoaXMpWzBdLW4ubGVmdDt1PTNEW3IoYyxNYXRo LnJvdW5kKHMuaW52ZXJ0KGUpKSldLE8oKT0KfXZhciBtPTNEZDMuc2VsZWN0KHRoaXMpLGc9M0Qo cnx8cGFyc2VJbnQobS5zdHlsZSgid2lkdGgiKSl8fDk2MCktbi5sZWZ0LW4uPQpyaWdodCxiPTNE KGl8fHBhcnNlSW50KG0uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1uLnRvcC1uLmJvdHRvbTt2LnVw ZGF0ZT0zRGY9CnVuY3Rpb24oKXt2KGUpfSx2LmNvbnRhaW5lcj0zRHRoaXM7aWYoIWN8fCFjLmxl bmd0aCl7dmFyIHc9M0RtLnNlbGVjdEFsbCgiLj0KbnYtbm9EYXRhIikuZGF0YShbZF0pO3JldHVy biB3LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52PQotbm9EYXRh IikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYXR0 cigieCIsbi5sZWY9CnQrZy8yKS5hdHRyKCJ5IixuLnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KSx2fW0uc2VsZWN0QWxsKCIubnYtbj0Kb0RhdGEiKS5yZW1vdmUoKTt2YXIgRT0z RHQueSgpKGNbYy5sZW5ndGgtMV0sYy5sZW5ndGgtMSk7cz0zRHQueFNjYWxlKCksbz0KPTNEdC55 U2NhbGUoKTt2YXIgUz0zRG0uc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc3BhcmtsaW5lcGx1cyIp LmRhdGEoW2NdKSxUPQo9M0RTLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQz IG52LXdyYXAgbnYtc3BhcmtsaW5lcGx1cyIpLE49M0Q9ClQuYXBwZW5kKCJnIiksQz0zRFMuc2Vs ZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNwYXJrbGluZVdyYT0KcCIp LE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi12YWx1ZVdyYXAiKSxOLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwiPQpudi1ob3ZlckFyZWEiKSxTLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK24ubGVmdCsiLCIrbi50b3ArIikiKTt2YXIgaz0KPTNEQy5zZWxlY3QoIi5udi1zcGFy a2xpbmVXcmFwIik7dC53aWR0aChnKS5oZWlnaHQoYiksay5jYWxsKHQpO3ZhciBMPTNEQy5zPQpl bGVjdCgiLm52LXZhbHVlV3JhcCIpLEE9M0RMLnNlbGVjdEFsbCgiLm52LWN1cnJlbnRWYWx1ZSIp LmRhdGEoW0VdKTtBLmVudGU9CnIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWN1 cnJlbnRWYWx1ZSIpLmF0dHIoImR4IixwPy04OjgpLmF0dHIoIj0KZHkiLCIuOWVtIikuc3R5bGUo InRleHQtYW5jaG9yIixwPyJlbmQiOiJzdGFydCIpLEEuYXR0cigieCIsZysocD9uLnJpZ2h0OjAp PQopLmF0dHIoInkiLGg/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9OjApLnN0eWxlKCJmaWxsIix0 LmNvbG9yKCkoY1tjLmxlbmd0aC09CjFdLGMubGVuZ3RoLTEpKS50ZXh0KGwoRSkpLE4uc2VsZWN0 KCIubnYtaG92ZXJBcmVhIikuYXBwZW5kKCJyZWN0Iikub24oIm1vdT0Kc2Vtb3ZlIixNKS5vbigi Y2xpY2siLGZ1bmN0aW9uKCl7YT0zRCFhfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3U9M0Rb XSxPPQooKX0pLEMuc2VsZWN0KCIubnYtaG92ZXJBcmVhIHJlY3QiKS5hdHRyKCJ0cmFuc2Zvcm0i LGZ1bmN0aW9uKGUpe3JldHVybiJ0cmE9Cm5zbGF0ZSgiKyAtbi5sZWZ0KyIsIisgLW4udG9wKyIp In0pLmF0dHIoIndpZHRoIixnK24ubGVmdCtuLnJpZ2h0KS5hdHRyKCJoZT0KaWdodCIsYituLnRv cCl9KSx2fXZhciB0PTNEZS5tb2RlbHMuc3BhcmtsaW5lKCksbj0zRHt0b3A6MTUscmlnaHQ6MTAw LGJvdHRvPQptOjEwLGxlZnQ6NTB9LHI9M0RudWxsLGk9M0RudWxsLHMsbyx1PTNEW10sYT0zRCEx LGY9M0RkMy5mb3JtYXQoIixyIiksbD0zRGQ9CjMuZm9ybWF0KCIsLjJmIiksYz0zRCEwLGg9M0Qh MCxwPTNEITEsZD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iO3JldHVybiB2LnNwYT0KcmtsaW5lPTNE dCxkMy5yZWJpbmQodix0LCJ4IiwieSIsInhTY2FsZSIsInlTY2FsZSIsImNvbG9yIiksdi5vcHRp b25zPTNEZS51PQp0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5tYXJnaW49M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi49CnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEIj0KdW5kZWZp bmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVm aW5lZCI/ZS5ib3R0PQpvbTpuLmJvdHRvbSxuLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRl ZmluZWQiP2UubGVmdDpuLmxlZnQsdik6bn0sdi53aWQ9CnRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLHYpOnJ9LHYuaGVpZ2h0PTNEZnVuY3Rpb24oZT0KKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdik6aX0sdi54VGlja0Zvcm1hdD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHYpOmZ9LHYueVRpY2tGb3Jt YXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyhsPTNEZSx2KTpsfSx2 LnNob3dWYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZT0K LHYpOmN9LHYuYWxpZ25WYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZSx2KTpofSx2LnJpPQpnaHRBbGlnblZhbHVlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLHYpOnB9LHYubm9EYXRhPQo9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsdik6ZH0sdn0sZS5tb2RlbHMuc3RhY2tlZEFyZWE9 Cj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3Zh ciBhPTNEbi10LmxlZnQtdC5yaT0KZ2h0LGI9M0RyLXQudG9wLXQuYm90dG9tLHc9M0RkMy5zZWxl Y3QodGhpcyk7cD0zRHYueFNjYWxlKCksZD0zRHYueVNjYWxlKCk7PQp2YXIgRT0zRGU7ZS5mb3JF YWNoKGZ1bmN0aW9uKGUsdCl7ZS5zZXJpZXNJbmRleD0zRHQsZS52YWx1ZXM9M0RlLnZhbHVlcy5t YXA9CihmdW5jdGlvbihlLG4pe3JldHVybiBlLmluZGV4PTNEbixlLnNlcmllc0luZGV4PTNEdCxl fSl9KTt2YXIgUz0zRGUuZmlsdGVyKD0KZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KTtl PTNEZDMubGF5b3V0LnN0YWNrKCkub3JkZXIobCkub2Zmc2V0KGYpLnZhPQpsdWVzKGZ1bmN0aW9u KGUpe3JldHVybiBlLnZhbHVlc30pLngobykueSh1KS5vdXQoZnVuY3Rpb24oZSx0LG4pe3ZhciBy PTNEdSg9CmUpPTNEPTNEPTNEMD8wOm47ZS5kaXNwbGF5PTNEe3k6cix5MDp0fX0pKFMpO3ZhciBU PTNEdy5zZWxlY3RBbGwoImcubnYtd3JhcD0KLm52LXN0YWNrZWRhcmVhIikuZGF0YShbZV0pLE49 M0RULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52PQotd3JhcCBudi1z dGFja2VkYXJlYSIpLEM9M0ROLmFwcGVuZCgiZGVmcyIpLGs9M0ROLmFwcGVuZCgiZyIpLEw9M0RU LnNlbGVjdCg9CiJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWFyZWFXcmFwIiks ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIj0KbnYtc2NhdHRlcldyYXAiKSxULmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSx2LndpPQpkdGgoYSku aGVpZ2h0KGIpLngobykueShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwbGF5LnkrZS5kaXNwbGF5 LnkwfSkuZm9yY2U9ClkoWzBdKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNv bG9yfHxpKGUsZS5zZXJpZXNJbmRleCl9KSk7dmFyID0KQT0zREwuc2VsZWN0KCIubnYtc2NhdHRl cldyYXAiKS5kYXR1bShlKTtBLmNhbGwodiksQy5hcHBlbmQoImNsaXBQYXRoIikuYXR0PQpyKCJp ZCIsIm52LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgicmVjdCIpLFQuc2VsZWN0KCIjbnYtZWRnZS1j bGlwLSIrcysiIHJlY3Q9CiIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGIpLEwuYXR0 cigiY2xpcC1wYXRoIixoPyJ1cmwoI252LWVkZ2UtY2xpcD0KLSIrcysiKSI6IiIpO3ZhciBPPTNE ZDMuc3ZnLmFyZWEoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAobyhlLHQpKX0pLnkwKGZ1PQpu Y3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5LnkwKX0pLnkxKGZ1bmN0aW9uKGUpe3JldHVybiBk KGUuZGlzcGxheS55K2UuZGk9CnNwbGF5LnkwKX0pLmludGVycG9sYXRlKGMpLE09M0RkMy5zdmcu YXJlYSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChvKGUsdD0KKSl9KS55MChmdW5jdGlvbihl KXtyZXR1cm4gZChlLmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNw PQpsYXkueTApfSksXz0zREwuc2VsZWN0KCIubnYtYXJlYVdyYXAiKS5zZWxlY3RBbGwoInBhdGgu bnYtYXJlYSIpLmRhdGEoZnVuY3Q9CmlvbihlKXtyZXR1cm4gZX0pO18uZW50ZXIoKS5hcHBlbmQo InBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cj0KbiJudi1hcmVhIG52LWFy ZWEtIit0fSkuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTShlLnZhbHVlcyxlLnNlcmll c0luPQpkZXgpfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcyku Y2xhc3NlZCgiaG92ZXIiLCEwKSxtLmE9CnJlYU1vdXNlb3Zlcih7cG9pbnQ6ZSxzZXJpZXM6ZS5r ZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy5ldmVudC5wYWdlWV0sc2VyaT0KZXNJbmRleDplLnNl cmllc0luZGV4fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMp LmNsYXNzPQplZCgiaG92ZXIiLCExKSxtLmFyZWFNb3VzZW91dCh7cG9pbnQ6ZSxzZXJpZXM6ZS5r ZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy49CmV2ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDplLnNl cmllc0luZGV4fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZT0KY3QodGhpcyku Y2xhc3NlZCgiaG92ZXIiLCExKSxtLmFyZWFDbGljayh7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9z OltkMy5ldmVuPQp0LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDplLnNlcmllc0lu ZGV4fSl9KSxfLmV4aXQoKS5yZW1vdmUoKSxfLnM9CnR5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0luZGV4KX0pLnN0eWxlKCJzdHJvaz0KZSIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgpfSksXy5hdHRyKCJk IixmdW5jdGlvbihlPQosdCl7cmV0dXJuIE8oZS52YWx1ZXMsdCl9KSx2LmRpc3BhdGNoLm9uKCJl bGVtZW50TW91c2VvdmVyLmFyZWEiLGZ1bmN0aW9uKGU9Cil7TC5zZWxlY3QoIi5udi1jaGFydC0i K3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMCl9KT0KLHYu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC5hcmVhIixmdW5jdGlvbihlKXtMLnNlbGVjdCgi Lm52LWNoYXJ0LSIrcysiPQogLm52LWFyZWEtIitlLnNlcmllc0luZGV4KS5jbGFzc2VkKCJob3Zl ciIsITEpfSksZy5kM19zdGFja2VkT2Zmc2V0X3N0YWNrUGU9CnJjZW50PTNEZnVuY3Rpb24oZSl7 dmFyIHQ9M0RlLmxlbmd0aCxuPTNEZVswXS5sZW5ndGgscj0zRDEvdCxpLHMsbyxhPTNEW107Zj0K b3Iocz0zRDA7czxuOysrcyl7Zm9yKGk9M0QwLG89M0QwO2k8RS5sZW5ndGg7aSsrKW8rPTNEdShF W2ldLnZhbHVlc1tzXSk7aWYoPQpvKWZvcihpPTNEMDtpPHQ7aSsrKWVbaV1bc11bMV0vPTNEbztl bHNlIGZvcihpPTNEMDtpPHQ7aSsrKWVbaV1bc11bMV09M0RyfWY9Cm9yKHM9M0QwO3M8bjsrK3Mp YVtzXT0zRDA7cmV0dXJuIGF9fSksZ312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxl Zj0KdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCkscz0zRE1h dGguZmxvb3IoTWF0aC5yYW5kb20oPQopKjFlNSksbz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9 LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxhPTNEInN0YWNrIiw9CmY9M0QiemVybyIsbD0z RCJkZWZhdWx0IixjPTNEImxpbmVhciIsaD0zRCExLHAsZCx2PTNEZS5tb2RlbHMuc2NhdHRlcigp LG09Cj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYXJlYUNsaWNr IiwiYXJlYU1vdXNlb3ZlciIsImFyZT0KYU1vdXNlb3V0Iik7cmV0dXJuIHYuc2l6ZSgyLjIpLnNp emVEb21haW4oWzIuMiwyLjJdKSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50PQpDbGljay5hcmVhIixm dW5jdGlvbihlKXttLmFyZWFDbGljayhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92 ZXIudG89Cm9sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3Nb MV0rdC50b3BdLG0udG9vbHRpcFNob3coZT0KKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3Vz ZW91dC50b29sdGlwIixmdW5jdGlvbihlKXttLnRvb2x0aXBIaWRlKGUpfSksPQpnLmRpc3BhdGNo PTNEbSxnLnNjYXR0ZXI9M0R2LGQzLnJlYmluZChnLHYsImludGVyYWN0aXZlIiwic2l6ZSIsInhT Y2FsZSIsInk9ClNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5 UmFuZ2UiLCJzaXplRG9tYWluIiwiZm9yY2VYIj0KLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlw Vm9yb25vaSIsInVzZVZvcm9ub2kiLCJjbGlwUmFkaXVzIiwiaGlnaGxpZ2h0UG9pPQpudCIsImNs ZWFySGlnaGxpZ2h0cyIpLGcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChnKSxn Lng9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZDMuZnVuY3Rv cihlKSxnKTpvfSxnLnk9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyh1 PTNEZDMuZnVuY3RvcihlKSxnKTp1fSxnLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFy Z3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9w OnQudG9wLHQucmlnaHQ9Cj0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6 dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbT0KIT0zRCJ1bmRlZmluZWQiP2UuYm90 dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sPQpl ZnQ6dC5sZWZ0LGcpOnR9LGcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obj0zRGUsZyk6bn09CixnLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhyPTNEZSxnKTpyfSxnLmNsaXBFZGdlPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsZyk6aH0sZy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVy PQpuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLGcpOml9LGcub2Zm c2V0PTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsZyk6Zn0s Zy5vcmRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KGw9M0RlLGcp Omx9LGcuc3R5bGU9M0RmdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTth PTNEPQplO3N3aXRjaChhKXtjYXNlInN0YWNrIjpnLm9mZnNldCgiemVybyIpLGcub3JkZXIoImRl ZmF1bHQiKTticmVhaztjYXNlInN0cmU9CmFtIjpnLm9mZnNldCgid2lnZ2xlIiksZy5vcmRlcigi aW5zaWRlLW91dCIpO2JyZWFrO2Nhc2Uic3RyZWFtLWNlbnRlciI6Zy5vZj0KZnNldCgic2lsaG91 ZXR0ZSIpLGcub3JkZXIoImluc2lkZS1vdXQiKTticmVhaztjYXNlImV4cGFuZCI6Zy5vZmZzZXQo ImV4cGFuPQpkIiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nhc2Uic3RhY2tfcGVyY2VudCI6 Zy5vZmZzZXQoZy5kM19zdGFja2VkT2Zmc2U9CnRfc3RhY2tQZXJjZW50KSxnLm9yZGVyKCJkZWZh dWx0Iil9cmV0dXJuIGd9LGcuaW50ZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1 bWVudHMubGVuZ3RoPyhjPTNEZSxnKTpjfSxnfSxlLm1vZGVscy5zdGFja2VkQXJlYUNoYXJ0PTNE ZnVuY3Rpb24oPQope2Z1bmN0aW9uIE0oeSl7cmV0dXJuIHkuZWFjaChmdW5jdGlvbih5KXt2YXIg QT0zRGQzLnNlbGVjdCh0aGlzKSxfPTNEdGhpcyw9CkQ9M0QoYXx8cGFyc2VJbnQoQS5zdHlsZSgi d2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQsUD0zRChmfHxwYXJzZUludChBLj0Kc3R5bGUo ImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbTtNLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7QS5j YWxsKE0pfSxNLmNvPQpudGFpbmVyPTNEdGhpcyxTLmRpc2FibGVkPTNEeS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXgpe3Y9CmFyIEg7eD0zRHt9O2ZvcihIIGluIFMp U1tIXWluc3RhbmNlb2YgQXJyYXk/eFtIXT0zRFNbSF0uc2xpY2UoMCk6eFtIXT0zRFNbSD0KXX1p ZigheXx8IXkubGVuZ3RofHwheS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxl bmd0aH0pLmxlbmd0aCl7PQp2YXIgQj0zREEuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShb VF0pO3JldHVybiBCLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Iik9Ci5hdHRyKCJjbGFzcyIsIm52ZDMg bnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZD0K ZGxlIiksQi5hdHRyKCJ4Iix1LmxlZnQrRC8yKS5hdHRyKCJ5Iix1LnRvcCtQLzIpLnRleHQoZnVu Y3Rpb24oZSl7cmV0dXJuIGV9PQopLE19QS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUo KSxiPTNEdC54U2NhbGUoKSx3PTNEdC55U2NhbGUoKTt2YXIgaj0KPTNEQS5zZWxlY3RBbGwoImcu bnYtd3JhcC5udi1zdGFja2VkQXJlYUNoYXJ0IikuZGF0YShbeV0pLEY9M0RqLmVudGVyKCkuYXBw PQplbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zdGFja2VkQXJlYUNoYXJ0 IikuYXBwZW5kKCJnIiksST0zRGo9Ci5zZWxlY3QoImciKTtGLmFwcGVuZCgicmVjdCIpLnN0eWxl KCJvcGFjaXR5IiwwKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIj0KLCJudi14IG52LWF4aXMi KSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksRi5hcHBlbmQoImci KS5hPQp0dHIoImNsYXNzIiwibnYtc3RhY2tlZFdyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtbGVnZW5kV3JhcCIpLEY9Ci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNv bnRyb2xzV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudj0KLWludGVyYWN0aXZl IiksSS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsRCkuYXR0cigiaGVpZ2h0IixQKTtpZiho KXt2YXIgPQpxPTNEYz9ELUM6RDtpLndpZHRoKHEpLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIp LmRhdHVtKHkpLmNhbGwoaSksdS50b3AhPQo9M0RpLmhlaWdodCgpJiYodS50b3A9M0RpLmhlaWdo dCgpLFA9M0QoZnx8cGFyc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0MDA9CiktdS50b3AtdS5i b3R0b20pLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiKz0KKEQtcSkrIiwiKyAtdS50b3ArIikiKX1pZihjKXt2YXIgUj0zRFt7a2V5Okwuc3Rh Y2tlZHx8IlN0YWNrZWQiLG1ldGFLZXk6IlN0PQphY2tlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0z RCJzdGFjayIsc3R5bGU6InN0YWNrIn0se2tleTpMLnN0cmVhbXx8IlN0cmVhbSI9CixtZXRhS2V5 OiJTdHJlYW0iLGRpc2FibGVkOnQuc3R5bGUoKSE9M0Qic3RyZWFtIixzdHlsZToic3RyZWFtIn0s e2tleTpMLmV4cD0KYW5kZWR8fCJFeHBhbmRlZCIsbWV0YUtleToiRXhwYW5kZWQiLGRpc2FibGVk OnQuc3R5bGUoKSE9M0QiZXhwYW5kIixzdHlsZToiPQpleHBhbmQifSx7a2V5Okwuc3RhY2tfcGVy Y2VudHx8IlN0YWNrICUiLG1ldGFLZXk6IlN0YWNrX1BlcmNlbnQiLGRpc2FibGVkOnQ9Ci5zdHls ZSgpIT0zRCJzdGFja19wZXJjZW50IixzdHlsZToic3RhY2tfcGVyY2VudCJ9XTtDPTNEay5sZW5n dGgvMyoyNjAsUj0zRD0KUi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGsuaW5kZXhPZihlLm1l dGFLZXkpIT0zRD0zRC0xfSkscy53aWR0aChDKS5jb2xvPQpyKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0 Il0pLEkuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oUikuY2FsbChzKSx1LnQ9Cm9w IT0zRE1hdGgubWF4KHMuaGVpZ2h0KCksaS5oZWlnaHQoKSkmJih1LnRvcD0zRE1hdGgubWF4KHMu aGVpZ2h0KCksaS5oZWlnaD0KdCgpKSxQPTNEKGZ8fHBhcnNlSW50KEEuc3R5bGUoImhlaWdodCIp KXx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3QoIi5uPQp2LWNvbnRyb2xzV3JhcCIpLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIpfWouYXR0cigidHJhbnM9 CmZvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksdiYmSS5zZWxlY3QoIi5u di15Lm52LWF4aXMiKS5hdHRyKD0KInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwwKSIpLG0m JihvLndpZHRoKEQpLmhlaWdodChQKS5tYXJnaW4oe2xlZnQ6dS5sPQplZnQsdG9wOnUudG9wfSku c3ZnQ29udGFpbmVyKEEpLnhTY2FsZShiKSxqLnNlbGVjdCgiLm52LWludGVyYWN0aXZlIikuY2Fs bCg9Cm8pKSx0LndpZHRoKEQpLmhlaWdodChQKTt2YXIgVT0zREkuc2VsZWN0KCIubnYtc3RhY2tl ZFdyYXAiKS5kYXR1bSh5KTtVLmNhbD0KbCh0KSxwJiYobi5zY2FsZShiKS50aWNrcyhELzEwMCku dGlja1NpemUoLVAsMCksSS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hPQp0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgwLCIrUCsiKSIpLEkuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChu KSksZCY9CiYoci5zY2FsZSh3KS50aWNrcyh0Lm9mZnNldCgpPTNEPTNEIndpZ2dsZSI/MDpQLzM2 KS50aWNrU2l6ZSgtRCwwKS5zZXRUaWNrRj0Kb3JtYXQodC5zdHlsZSgpPTNEPTNEImV4cGFuZCJ8 fHQuc3R5bGUoKT0zRD0zRCJzdGFja19wZXJjZW50Ij9kMy5mb3JtYXQoIiUiPQopOkUpLEkuc2Vs ZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksdC5kaXNwYXRjaC5vbigiYXJlYUNsaWNrLnRv Z2dsZSIsZnU9Cm5jdGlvbihlKXt5LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxl ZH0pLmxlbmd0aD0zRD0zRD0zRDE/eS5mb3JFYT0KY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0z RCExfSk6eS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0zRG4hPTNEPQplLnNlcmll c0luZGV4fSksUy5kaXNhYmxlZD0zRHkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxl ZH0pLE4uc3RhdGU9CkNoYW5nZShTKSxNLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVD aGFuZ2UiLGZ1bmN0aW9uKGUpe1MuZGlzYWJsZWQ9Cj0zRGUuZGlzYWJsZWQsTi5zdGF0ZUNoYW5n ZShTKSxNLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bj0KY3Rpb24o ZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47Uj0zRFIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBl LmRpc2FibGVkPTNEPQohMCxlfSksZS5kaXNhYmxlZD0zRCExLHQuc3R5bGUoZS5zdHlsZSksUy5z dHlsZT0zRHQuc3R5bGUoKSxOLnN0YXRlQ2hhbmdlKFM9CiksTS51cGRhdGUoKX0pLG8uZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xlYXJIaWdobGlnaD0KdHMo KTt2YXIgcyxhLGYsYz0zRFtdO3kuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2VyaWVz SW5kZXg9M0R0LCFlLmRpPQpzYWJsZWR9KS5mb3JFYWNoKGZ1bmN0aW9uKG4scil7YT0zRGUuaW50 ZXJhY3RpdmVCaXNlY3Qobi52YWx1ZXMsaS5wb2ludFhWYWw9CnVlLE0ueCgpKSx0LmhpZ2hsaWdo dFBvaW50KHIsYSwhMCk7dmFyIG89M0RuLnZhbHVlc1thXTtpZih0eXBlb2Ygbz0zRD0zRCJ1bj0K ZGVmaW5lZCIpcmV0dXJuO3R5cGVvZiBzPTNEPTNEInVuZGVmaW5lZCImJihzPTNEbyksdHlwZW9m IGY9M0Q9M0QidW5kZWZpbmVkPQoiJiYoZj0zRE0ueFNjYWxlKCkoTS54KCkobyxhKSkpO3ZhciB1 PTNEdC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/by5kaXNwbGF5Lnk9CjpNLnkoKShvLGEpO2MucHVz aCh7a2V5Om4ua2V5LHZhbHVlOnUsY29sb3I6bChuLG4uc2VyaWVzSW5kZXgpLHN0YWNrZWRWYWx1 ZT0KOm8uZGlzcGxheX0pfSksYy5yZXZlcnNlKCk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RNLnlT Y2FsZSgpLmludmVydChpLm1vdXNlPQpZKSxwPTNESW5maW5pdHksZD0zRG51bGw7Yy5mb3JFYWNo KGZ1bmN0aW9uKGUsdCl7aD0zRE1hdGguYWJzKGgpO3ZhciBuPTNETWE9CnRoLmFicyhlLnN0YWNr ZWRWYWx1ZS55MCkscj0zRE1hdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkpO2lmKGg+PTNEbiYmaDw9 M0RyKz0Kbil7ZD0zRHQ7cmV0dXJufX0pLGQhPTNEbnVsbCYmKGNbZF0uaGlnaGxpZ2h0PTNEITAp fXZhciB2PTNEbi50aWNrRm9ybWF0KCkoPQpNLngoKShzLGEpKSxtPTNEdC5zdHlsZSgpPTNEPTNE ImV4cGFuZCI/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZDMuZm9ybWF0KCIuMSU9CiIpKGUpfTpmdW5j dGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtYXQoKShlKX07by50b29sdGlwLnBvc2l0aW9uKHts ZWZ0OmYrdT0KLmxlZnQsdG9wOmkubW91c2VZK3UudG9wfSkuY2hhcnRDb250YWluZXIoXy5wYXJl bnROb2RlKS5lbmFibGVkKGcpLnZhbHVlRm9yPQptYXR0ZXIobSkuZGF0YSh7dmFsdWU6dixzZXJp ZXM6Y30pKCksby5yZW5kZXJHdWlkZUxpbmUoZil9KSxvLmRpc3BhdGNoLm9uKCI9CmVsZW1lbnRN b3VzZW91dCIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9 KSxOLm9uKCJ0bz0Kb2x0aXBTaG93IixmdW5jdGlvbihlKXtnJiZPKGUsXy5wYXJlbnROb2RlKX0p LE4ub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlPQope3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1 bmRlZmluZWQiJiZ5Lmxlbmd0aD0zRD0zRD0zRGUuZGlzYWJsZWQubGVuZ3RoJiYoeS49CmZvckVh Y2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtuXX0pLFMuZGlzYWJsZWQ9 M0RlLmRpc2FibGVkKT0KLHR5cGVvZiBlLnN0eWxlIT0zRCJ1bmRlZmluZWQiJiZ0LnN0eWxlKGUu c3R5bGUpLE0udXBkYXRlKCl9KX0pLE19dmFyIHQ9M0RlPQoubW9kZWxzLnN0YWNrZWRBcmVhKCks bj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy49Cmxl Z2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgp LHU9M0R7dG9wOjMwLHJpZz0KaHQ6MjUsYm90dG9tOjUwLGxlZnQ6NjB9LGE9M0RudWxsLGY9M0Ru dWxsLGw9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGM9M0QhPQowLGg9M0QhMCxwPTNEITAsZD0z RCEwLHY9M0QhMSxtPTNEITEsZz0zRCEwLHk9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI9 CjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgb24gIit0KyI8L3A+In0sYix3LEU9M0RkMy5mb3Jt YXQoIiwuMmYiKSxTPTNEe3N0eT0KbGU6dC5zdHlsZSgpfSx4PTNEbnVsbCxUPTNEIk5vIERhdGEg QXZhaWxhYmxlLiIsTj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvPQp3IiwidG9vbHRpcEhpZGUi LCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksQz0zRDI1MCxrPTNEWyJTdGFja2VkIiwiU3Ry ZWE9Cm0iLCJFeHBhbmRlZCJdLEw9M0R7fSxBPTNEMDtuLm9yaWVudCgiYm90dG9tIikudGlja1Bh ZGRpbmcoNyksci5vcmllbnQodj8icj0KaWdodCI6ImxlZnQiKSxzLnVwZGF0ZVN0YXRlKCExKTt2 YXIgTz0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vPQpmZnNldExlZnR8fDAp LHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShp LnBvaW49CnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQs aS5wb2ludEluZGV4KSksbD0zRHkoaS5zZT0Kcmllcy5rZXksYSxmLGksTSk7ZS50b29sdGlwLnNo b3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm4gPQp0LmRpc3BhdGNo Lm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUu cG9zWzFdK3U9Ci50b3BdLE4udG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJ0b29sdGlw SGlkZSIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSD0KaWRlKGUpfSksTi5vbigidG9vbHRpcEhpZGUi LGZ1bmN0aW9uKCl7ZyYmZS50b29sdGlwLmNsZWFudXAoKX0pLE0uZGlzcGF0Y2g9Cj0zRE4sTS5z dGFja2VkPTNEdCxNLmxlZ2VuZD0zRGksTS5jb250cm9scz0zRHMsTS54QXhpcz0zRG4sTS55QXhp cz0zRHIsTS5pbj0KdGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJlYmluZChNLHQsIngiLCJ5Iiwic2l6 ZSIsInhTY2FsZSIsInlTY2FsZSIsInhEb21haW4iPQosInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFu Z2UiLCJzaXplRG9tYWluIiwiaW50ZXJhY3RpdmUiLCJ1c2VWb3Jvbm9pIiwib2Zmc2U9CnQiLCJv cmRlciIsInN0eWxlIiwiY2xpcEVkZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJp bnRlcnBvbGF0ZSIpLD0KTS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKE0pLE0u bWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8odS50b3A9M0R0 eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dS50b3AsdS5yaWdodD0zRHR5cGU9Cm9m IGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUuYm90dG9tPTNEdHlwZW9m IGUuYm90dG9tIT0zRCJ1bj0KZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20sdS5sZWZ0PTNEdHlw ZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dS5sPQplZnQsTSk6dX0sTS53aWR0aD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxNKTphfSxNLmhlaWc9 Cmh0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLE0pOmZ9LE0u Y29sb3I9M0RmdW5jdGlvbihuKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZS51dGls cy5nZXRDb2xvcihuKSxpLmNvbG9yKGwpLHQuY29sb3IobCksTSk6PQpsfSxNLnNob3dDb250cm9s cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxNKTpjfSxNLnNo b3c9CkxlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxN KTpofSxNLnNob3dYQXhpcz0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHA9M0RlLE0pOnB9LE0uc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZD0zRGUsTSk6ZH0sTS5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyh2PTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxN KTp2fSxNLnVzZUludGVyYWN0aXZlR3VpZD0KZWxpbmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obT0zRGUsZT0zRD0zRD0zRCEwJiYoTS5pbnRlcmFjPQp0aXZlKCExKSxN LnVzZVZvcm9ub2koITEpKSxNKTptfSxNLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmw9CmVuZ3RoPyh5PTNEZSxNKTp5fSxNLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLD0KTSk6Z30sTS50b29sdGlwQ29udGVudD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxNKTp5fSxNPQouc3RhdGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsTSk6U30sTS5kZWZh dWx0U3RhdGU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxN KTp4fSxNLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9 M0RlLE0pOlR9LE0udHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJn dW1lbnRzLmxlbmd0aD8oQT0zRGUsTSk6QX0sTS5jb250cm9sc0RhdGE9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyhrPTNEZSxNKTprfSxNLmNvbnRyb2xMYWJlbHM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KP3R5cGVvZiBlIT0zRCJvYmplY3Qi P0w6KEw9M0RlLE0pOkx9LHIuc2V0VGlja0Zvcm1hdD0zRHIudGlja0Zvcm1hdCxyLnRpY2tGPQpv cm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxyKTpFfSxN fX0oKSxkZWZpbmUoInBsdWc9CmluL3BsdWdpbnMvbnZkMy9udi5kMyIsZnVuY3Rpb24oKXt9KSxk ZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZj0KaWciLFsicGx1Z2luL2NoYXJ0 cy9mb3Jtcy9kZWZhdWx0IiwicGx1Z2luL3BsdWdpbnMvbnZkMy9udi5kMyJdLGZ1bmN0aW9uKGUp PQp7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLGNhdGVnb3J5OiIiLGxpYnJhcnk6 Ik5WRDMiLHRhZzoic3ZnIixrZXk9CndvcmRzOiJzbWFsbCJ9KX0pLGRlZmluZSgicGx1Z2luL2No YXJ0cy9udmQzL2Jhci9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udj0KZDMvY29tbW9uL2NvbmZp ZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiUmVndWxhciIs Y2F0PQplZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4 LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2E9CnV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJW YWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbj0KZSgicGx1Z2luL2No YXJ0cy9udmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9u L2NvbmZpPQpnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJT dGFja2VkIixjYXRlZ29yeToiQmFyIGRpYWc9CnJhbXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1 ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdT0KZTohMH0seTp7 dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1 Z2luL2NoYXJ0PQpzL252ZDMvYmFyX2hvcml6b250YWwvY29uZmlnIixbInBsdWdpbi9jaGFydHMv bnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb249CihlKXtyZXR1cm4gJC5leHRlbmQoITAse30s ZSx7dGl0bGU6Ikhvcml6b250YWwiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMiLHNldD0KdGluZ3M6 e3hfYXhpc190eXBlOntpbml0OiJoaWRlIn19LGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9y IHgtYXhpcyIsaXNfPQpsYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6 IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiE9CjB9fX0pfSksZGVmaW5lKCJwbHVnaW4v Y2hhcnRzL252ZDMvYmFyX2hvcml6b250YWxfc3RhY2tlZC9jb25maWciLFsicGx1Z2luLz0KY2hh cnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7 fSxlLHt0aXRsZToiU3RhPQpja2VkIGhvcml6b250YWwiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMi LHNldHRpbmdzOnt4X2F4aXNfdHlwZTp7aW5pdDoiaGlkZSI9Cn19LGNvbHVtbnM6e3g6e3RpdGxl OiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6IT0K MH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmlu ZSgicGx1Z2luL2NoYXJ0cy9uPQp2ZDMvbGluZV9mb2N1cy9jb25maWciLFsicGx1Z2luL2NoYXJ0 cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXQ9CnVybiAkLmV4dGVuZCghMCx7 fSxlLHt0aXRsZToiTGluZSB3aXRoIGZvY3VzIixjYXRlZ29yeToiT3RoZXJzIix6b29tYWJsZToi bj0KYXRpdmUiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6 ITAsaXNfYXV0bzohMCxpc191bmlxPQp1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlz Iixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXI9CnRzL252ZDMvcGllL2Nv bmZpZyIsWyJwbHVnaW4vcGx1Z2lucy9udmQzL252LmQzIl0sZnVuY3Rpb24oKXtyZXR1cm4gJC5l eHRlbj0KZCghMCx7fSx7dGl0bGU6IlBpZSBjaGFydCIsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIixs aWJyYXJ5OiJOVkQzIix0YWc6InN2ZyIsPQprZXl3b3Jkczoic21hbGwiLGNvbHVtbnM6e2xhYmVs Ont0aXRsZToiTGFiZWxzIixpc19sYWJlbDohMCxpc19hdXRvOiEwfSx5Ons9CnRpdGxlOiJWYWx1 ZXMiLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7bWFpbl9zZXBhcmF0b3I6e3R5cGU6InNlcGFy YXRvciIsdD0KaXRsZToiUGllIGNoYXJ0IHNldHRpbmdzIn0sZG9udXRfcmF0aW86e3RpdGxlOiJE b251dCByYXRpbyIsaW5mbzoiRGV0ZXJtaW5lPQogaG93IGxhcmdlIHRoZSBkb251dCBob2xlIHdp bGwgYmUuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjAuNSIsZGF0YTpbe2xhYmVsOiI9CjUwJSIsdmFs dWU6IjAuNSJ9LHtsYWJlbDoiMjUlIix2YWx1ZToiMC4yNSJ9LHtsYWJlbDoiMTAlIix2YWx1ZToi MC4xMCJ9LHtsYT0KYmVsOiIwJSIsdmFsdWU6IjAifV19LHNob3dfbGVnZW5kOnt0aXRsZToiU2hv dyBsZWdlbmQiLGluZm86IldvdWxkIHlvdSBsaWtlPQogdG8gYWRkIGEgbGVnZW5kPyIsdHlwZToi cmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6IlllcyIsdmFsdWU9CjoidHJ1 ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sbGFiZWxfc2VwYXJhdG9yOnt0eXBlOiJz ZXBhcmF0b3IiLHRpdD0KbGU6IkxhYmVsIHNldHRpbmdzIn0sbGFiZWxfdHlwZTp7dGl0bGU6IkRv bnV0IGxhYmVsIixpbmZvOiJXaGF0IHdvdWxkIHlvdSBsPQppa2UgdG8gc2hvdyBmb3IgZWFjaCBz bGljZT8iLHR5cGU6InNlbGVjdCIsaW5pdDoicGVyY2VudCIsZGF0YTpbe2xhYmVsOiItLSA9Ck5v dGhpbmcgLS0iLHZhbHVlOiJoaWRlIixoaWRlOiJsYWJlbF9vdXRzaWRlIn0se2xhYmVsOiJMYWJl bCBjb2x1bW4iLHZhbHVlOj0KImtleSIsc2hvdzoibGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiVmFs dWUgY29sdW1uIix2YWx1ZToidmFsdWUiLHNob3c6ImxhYmVsPQpfb3V0c2lkZSJ9LHtsYWJlbDoi UGVyY2VudGFnZSIsdmFsdWU6InBlcmNlbnQiLHNob3c6ImxhYmVsX291dHNpZGUifV19LGxhYmU9 Cmxfb3V0c2lkZTp7dGl0bGU6IlNob3cgb3V0c2lkZSIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8g c2hvdyBsYWJlbHMgb3V0c2lkZT0KIHRoZSBkb251dD8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0 OiJmYWxzZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlPQoifSx7bGFiZWw6Ik5vIix2 YWx1ZToiZmFsc2UifV19LHVzZV9wYW5lbHM6e2luaXQ6InRydWUiLGhpZGU6ITB9fX0pfSksZGVm aW49CmUoInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mdWxsL2NvbmZpZyIsWyJwbHVn aW4vY2hhcnRzL252ZDMvY29tbW9uLz0KY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0 ZW5kKCEwLHt9LGUse3RpdGxlOiJFeHBhbmRlZCIsem9vbWFibGU6ITAsPQpjYXRlZ29yeToiQXJl YSBjaGFydHMiLGtleXdvcmRzOiJkZWZhdWx0IHNtYWxsIixjb2x1bW5zOnt4Ont0aXRsZToiVmFs dWVzIGY9Cm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6 e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcz0KIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgi cGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhX3N0cmVhbS9jb25maWciPQosWyJwbHVnaW4v Y2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCgh MCx7fSxlLHs9CnRpdGxlOiJTdHJlYW0iLGNhdGVnb3J5OiJBcmVhIGNoYXJ0cyIsem9vbWFibGU6 ITAsa2V5d29yZHM6ImRlZmF1bHQgc21hbGwiLD0Kc2hvd21heG1pbjohMCxjb2x1bW5zOnt4Ont0 aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAsPQppc191bmlx dWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxk ZWZpbmUoInBsdWc9CmluL2NoYXJ0cy9udmQzL2hpc3RvZ3JhbS9jb25maWciLFsicGx1Z2luL2No YXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdD0KaW9uKGUpe3JldHVybiAkLmV4dGVuZCgh MCx7fSxlLHt0aXRsZToiSGlzdG9ncmFtIixjYXRlZ29yeToiRGF0YSBwcm9jZXNzaW5nPQogKHJl cXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6Imhpc3RvZ3JhbSIs a2V5d29yZHM6InNtYWw9CmwgbWVkaXVtIGxhcmdlIixjb2x1bW5zOnt5Ont0aXRsZToiT2JzZXJ2 YXRpb25zIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6ez0KeF9heGlzX2xhYmVsOntpbml0OiJW YWx1ZXMifSx5X2F4aXNfbGFiZWw6e2luaXQ6IkRlbnNpdHkifSx5X2F4aXNfdHlwZTp7aW5pPQp0 OiJmIn0seV9heGlzX3ByZWNpc2lvbjp7aW5pdDoiLjIifX19KX0pLGRlZmluZSgicGx1Z2luL2No YXJ0cy9udmQzL2xpbmUvY289Cm5maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25m aWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAsez0KfSxlLHt0aXRsZToiTGluZSBj aGFydCIsY2F0ZWdvcnk6Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1uczp7eDp7dGl0bGU6IlZh PQpsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5 Ont0aXRsZToiVmFsdWVzIGZvciA9CnktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUo InBsdWdpbi9jaGFydHMvbnZkMy9zY2F0dGVyL2NvbmZpZyIsWyJwbD0KdWdpbi9jaGFydHMvbnZk My9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3Rp dGxlPQo6IlNjYXR0ZXIgcGxvdCIsY2F0ZWdvcnk6Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1u czp7eDp7dGl0bGU6IlZhbHVlcyBmb3I9CiB4LWF4aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGxl OiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZT0KZmluZSgicGx1Z2lu L2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29t bW9uL2NvPQpuZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxl OiJSZWd1bGFyIix6b29tYWJsZTohMCxjYXQ9CmVnb3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29yZHM6 ImRlZmF1bHQgc21hbGwiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yID0KeC1heGlzIixp c19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3Ig eS1heGlzIixpPQpzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxv dC9jb21tb24vY29uZmlnIixbInBsdWdpbi9jaGE9CnJ0cy9mb3Jtcy9kZWZhdWx0Il0sZnVuY3Rp b24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLGNhdGVnb3J5Oj0KIiIsbGli cmFyeToianFQbG90Iix0YWc6ImRpdiIsem9vbWFibGU6ITAsa2V5d29yZHM6Im1lZGl1bSIsc2V0 dGluZ3M6e3NlcGFyPQphdG9yX2dyaWQ6e3RpdGxlOiJHcmlkcyIsdHlwZToic2VwYXJhdG9yIn0s eF9heGlzX2dyaWQ6e3RpdGxlOiJBeGlzIGdyaWQiLGk9Cm5mbzoiV291bGQgeW91IGxpa2UgdG8g c2hvdyBncmlkIGxpbmVzIGZvciB0aGUgWCBheGlzPyIsdHlwZToicmFkaW9idXR0b24iLD0KaW5p dDoiZmFsc2UiLGRhdGE6W3tsYWJlbDoiT24iLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJPZmYiLHZh bHVlOiJmYWxzZSJ9XX0sPQp5X2F4aXNfZ3JpZDp7dGl0bGU6IkF4aXMgZ3JpZCIsaW5mbzoiV291 bGQgeW91IGxpa2UgdG8gc2hvdyBncmlkIGxpbmVzIGZvciA9CnRoZSBZIGF4aXM/Iix0eXBlOiJy YWRpb2J1dHRvbiIsaW5pdDoidHJ1ZSIsZGF0YTpbe2xhYmVsOiJPbiIsdmFsdWU6InRydWUifT0K LHtsYWJlbDoiT2ZmIix2YWx1ZToiZmFsc2UifV19fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRz L2pxcGxvdC9iYXIvY29uZmlnPQoiLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZp ZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSw9CmUse3RpdGxlOiJSZWd1bGFy IixjYXRlZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4 LT0KYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJW YWx1ZXMgZm9yIHktYXhpcyIsaXNfPQpudW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2No YXJ0cy9qcXBsb3QvbGluZS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy89CmpxcGxvdC9jb21tb24v Y29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJMaW5l IGNoYT0KcnQiLGNhdGVnb3J5OiJPdGhlcnMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9y IHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfPQphdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6 IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmk9Cm5lKCJwbHVnaW4v Y2hhcnRzL2pxcGxvdC9zY2F0dGVyL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21t b24vY29uZj0KaWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6 IlNjYXR0ZXIgcGxvdCIsY2F0ZWdvcnk6Ik90PQpoZXJzIixjb2x1bW5zOnt4Ont0aXRsZToiVmFs dWVzIGZvciB4LWF4aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGxlOiJWYWx1ZXM9CiBmb3IgeS1h eGlzIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3hfYXhpc19ncmlkOntpbml0OiJ0cnVlIn19 fSl9KSxkZWZpbj0KZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYm94cGxvdC9jb25maWciLFsicGx1 Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpPQpnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQu ZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJCb3ggcGxvdCIsY2F0ZWdvcnk6IkRhdGEgcHI9Cm9jZXNz aW5nIChyZXF1aXJlcyAnY2hhcnRzJyB0b29sIGZyb20gVG9vbHNoZWQpIixsaWJyYXJ5OiJqcVBs b3QiLHRhZzoiZGl2Ij0KLGV4ZWN1dGU6ImJveHBsb3QiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0g bGFyZ2UiLGNvbHVtbnM6e3k6e3RpdGxlOiJPYnNlcnZhPQp0aW9ucyIsaXNfbnVtZXJpYzohMH19 LHNldHRpbmdzOntzaG93X2xlZ2VuZDp7aW5pdDoiZmFsc2UifX19KX0pLGRlZmluZSgicGw9CnVn aW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlzY3JldGUvY29uZmlnIixbInBsdWdpbi9jaGFy dHMvanFwbG90L2NvbW1vbj0KL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCgh MCx7fSxlLHt0aXRsZToiRGlzY3JldGUgSGlzdG9ncmFtIixjPQphdGVnb3J5OiJEYXRhIHByb2Nl c3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6Img9 CmlzdG9ncmFtZGlzY3JldGUiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6 e3g6e3RpdGxlOiJPYnNlcnZhdD0KaW9ucyIsaXNfbGFiZWw6ITB9fSxzZXR0aW5nczp7eF9heGlz X2xhYmVsOntpbml0OiJCcmVha3MifSx5X2F4aXNfbGFiZWw6e2luPQppdDoiRGVuc2l0eSJ9fX0p fSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwL2NvbmZpZyIsWyJwbHVnaW4v Y2g9CmFydHMvZm9ybXMvZGVmYXVsdCJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7 fSxlLHt0aXRsZToiSGVhdG1hcCIsYz0KYXRlZ29yeToiT3RoZXJzIixsaWJyYXJ5OiJDdXN0b20i LHRhZzoic3ZnIixrZXl3b3Jkczoic21hbGwiLHpvb21hYmxlOiEwLGNvPQpsdW1uczp7eDp7dGl0 bGU6IkNvbHVtbiBsYWJlbHMiLGlzX2xhYmVsOiEwLGlzX251bWVyaWM6ITAsaXNfdW5pcXVlOiEw fSx5Ons9CnRpdGxlOiJSb3cgbGFiZWxzIixpc19sYWJlbDohMCxpc19udW1lcmljOiEwLGlzX3Vu aXF1ZTohMH0sejp7dGl0bGU6Ik9ic2Vydj0KYXRpb24iLGlzX251bWVyaWM6ITB9fSxzZXR0aW5n czp7dXNlX3BhbmVsczp7aW5pdDoidHJ1ZSIsaGlkZTohMH0sY29sb3Jfc2V0PQo6e3RpdGxlOiJD b2xvciBzY2hlbWUiLGluZm86IlNlbGVjdCBhIGNvbG9yIHNjaGVtZSBmb3IgeW91ciBoZWF0bWFw Iix0eXBlOiI9CnNlbGVjdCIsaW5pdDoiamV0IixkYXRhOlt7bGFiZWw6IkNvbGQtdG8tSG90Iix2 YWx1ZToiaG90In0se2xhYmVsOiJDb29sIix2YT0KbHVlOiJjb29sIn0se2xhYmVsOiJDb3BwZXIi LHZhbHVlOiJjb3BwZXIifSx7bGFiZWw6IkdyYXkgc2NhbGUiLHZhbHVlOiJncmF5PQoifSx7bGFi ZWw6IkpldCIsdmFsdWU6ImpldCJ9LHtsYWJlbDoiTm8tR3JlZW4iLHZhbHVlOiJub19ncmVlbiJ9 LHtsYWJlbDoiT2M9CmVhbiIsdmFsdWU6Im9jZWFuIn0se2xhYmVsOiJQb2xhciIsdmFsdWU6InBv bGFyIn0se2xhYmVsOiJSZWQtdG8tR3JlZW4iLHZhbD0KdWU6InJlZGdyZWVuIn0se2xhYmVsOiJS ZWQtdG8tZ3JlZW4gKHNhdHVyYXRlZCkiLHZhbHVlOiJyZWQyZ3JlZW4ifSx7bGFiZWw6PQoiUmVs aWVmIix2YWx1ZToicmVsaWVmIn0se2xhYmVsOiJTZWlzbW9ncmFwaCIsdmFsdWU6InNlaXMifSx7 bGFiZWw6IlNlYWxhbmQ9CiIsdmFsdWU6InNlYWxhbmQifSx7bGFiZWw6IlNwbGl0Iix2YWx1ZToi c3BsaXQifSx7bGFiZWw6Ild5c2l3eWciLHZhbHVlOiJ3eT0Kc2l3eWcifV19LHVybF90ZW1wbGF0 ZTp7dGl0bGU6IlVybCB0ZW1wbGF0ZSIsaW5mbzoiRW50ZXIgYSB1cmwgdG8gbGluayB0aGUgPQps YWJlbHMgd2l0aCBleHRlcm5hbCBzb3VyY2VzLiBVc2UgX19MQUJFTF9fIGFzIHBsYWNlaG9sZGVy LiIsdHlwZToidGV4dCIsaW49Cml0OiIiLHBsYWNlaG9sZGVyOiJodHRwOi8vc29tZXVybC5jb20/ aWQ9M0RfX0xBQkVMX18ifX19KX0pLGRlZmluZSgicGx1Z2luLz0KY2hhcnRzL290aGVycy9oZWF0 bWFwX2NsdXN0ZXIvY29uZmlnIixbInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRtYXAvY29uZmln PQoiXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IkNsdXN0ZXJl ZCBIZWF0bWFwIixjYXRlZ29yeTo9CiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMn IHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6ImhlYXRtYXAiLD0Ka2V5d29yZHM6InNtYWxs IG1lZGl1bSBsYXJnZSJ9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy90eXBlcyIsWyJwbHVnaW4v Y2hhPQpydHMvbnZkMy9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2Vk L2NvbmZpZyIsInBsdWdpbi9jaGFydHM9Ci9udmQzL2Jhcl9ob3Jpem9udGFsL2NvbmZpZyIsInBs dWdpbi9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRhbF9zdGFja2VkL2Nvbj0KZmlnIiwicGx1Z2lu L2NoYXJ0cy9udmQzL2xpbmVfZm9jdXMvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3BpZS9j b25maWciPQosInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mdWxsL2NvbmZpZyIsInBs dWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXI9CmVhX3N0cmVhbS9jb25maWciLCJwbHVnaW4vY2hh cnRzL252ZDMvaGlzdG9ncmFtL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMz0KL2xpbmUvY29u ZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3NjYXR0ZXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9u dmQzL3N0YWNrPQplZGFyZWEvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYmFyL2NvbmZp ZyIsInBsdWdpbi9jaGFydHMvanFwbG90L2xpbmU9Ci9jb25maWciLCJwbHVnaW4vY2hhcnRzL2px cGxvdC9zY2F0dGVyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90L2JveHBsbz0KdC9jb25m aWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlzY3JldGUvY29uZmlnIiwicGx1 Z2luL2NoYXJ0cy9vPQp0aGVycy9oZWF0bWFwL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvb3RoZXJz L2hlYXRtYXBfY2x1c3Rlci9jb25maWciXSxmdW5jdGk9Cm9uKGUsdCxuLHIsaSxzLG8sdSxhLGYs bCxjLGgscCxkLHYsbSxnLHkpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZj0KYXVs dHM6e252ZDNfYmFyOmUsbnZkM19iYXJfc3RhY2tlZDp0LG52ZDNfYmFyX2hvcml6b250YWw6bixu dmQzX2Jhcl9ob3Jpem9uPQp0YWxfc3RhY2tlZDpyLG52ZDNfbGluZV9mb2N1czppLG52ZDNfc3Rh Y2tlZGFyZWE6YyxudmQzX3N0YWNrZWRhcmVhX2Z1bGw6byw9Cm52ZDNfc3RhY2tlZGFyZWFfc3Ry ZWFtOnUsbnZkM19waWU6cyxudmQzX2xpbmU6ZixudmQzX3NjYXR0ZXI6bCxudmQzX2hpc3RvZz0K cmFtOmEsanFwbG90X2JhcjpoLGpxcGxvdF9oaXN0b2dyYW1fZGlzY3JldGU6bSxqcXBsb3RfbGlu ZTpwLGpxcGxvdF9zY2F0dGVyPQo6ZCxqcXBsb3RfYm94cGxvdDp2LG90aGVyc19oZWF0bWFwOmcs b3RoZXJzX2hlYXRtYXBfY2x1c3Rlcjp5fX0pfSksZGVmaW5lKCI9CnBsdWdpbi9hcHAiLFsibXZj L3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxz Lz0KdXRpbHMiLCJwbHVnaW4vbGlicmFyeS9qb2JzIiwicGx1Z2luL2xpYnJhcnkvZGF0YXNldHMi LCJwbHVnaW4vbGlicmFyeS9zdG9yPQphZ2UiLCJ1dGlscy9kZWZlcnJlZCIsInBsdWdpbi92aWV3 cy92aWV3ZXIiLCJwbHVnaW4vdmlld3MvZWRpdG9yIiwicGx1Z2luL209Cm9kZWxzL2NvbmZpZyIs InBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbHVnaW4vY2hhcnRzL3R5cGVzIl0sZnVuY3Rpb24oZSx0 LG4scj0KLGkscyxvLHUsYSxmLGwsYyxoKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe2lu aXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpPQpzLm9wdGlvbnM9M0R0LEdhbGF4eSYmR2FsYXh5Lm1v ZGFsP3RoaXMubW9kYWw9M0RHYWxheHkubW9kYWw6dGhpcy5tb2RhbD0zRG49CmV3IGUuVmlldyx0 aGlzLmNvbmZpZz0zRG5ldyBsLHRoaXMudHlwZXM9M0RuZXcgaCx0aGlzLmNoYXJ0PTNEbmV3IGMs dGhpcy5qbz0KYnM9M0RuZXcgaSh0aGlzKSx0aGlzLmRhdGFzZXRzPTNEbmV3IHModGhpcyksdGhp cy5zdG9yYWdlPTNEbmV3IG8odGhpcyksdGhpPQpzLmRlZmVycmVkPTNEbmV3IHUsdGhpcy52aWV3 ZXJfdmlldz0zRG5ldyBhKHRoaXMpLHRoaXMuZWRpdG9yX3ZpZXc9M0RuZXcgZig9CnRoaXMpLHRo aXMuJGVsLmFwcGVuZCh0aGlzLnZpZXdlcl92aWV3LiRlbCksdGhpcy4kZWwuYXBwZW5kKHRoaXMu ZWRpdG9yX3ZpZT0Kdy4kZWwpO2lmKCF0aGlzLnN0b3JhZ2UubG9hZCgpKXRoaXMuZ28oImVkaXRv ciIpO2Vsc2V7dGhpcy5nbygidmlld2VyIik7dmFyPQogbj0zRHRoaXM7dGhpcy5kZWZlcnJlZC5l eGVjdXRlKGZ1bmN0aW9uKCl7bi5jaGFydC50cmlnZ2VyKCJyZWRyYXciKX0pfX0sZ289CjpmdW5j dGlvbihlKXskKCIudG9vbHRpcCIpLmhpZGUoKTtzd2l0Y2goZSl7Y2FzZSJlZGl0b3IiOnRoaXMu ZWRpdG9yX3ZpZXcucz0KaG93KCksdGhpcy52aWV3ZXJfdmlldy5oaWRlKCk7YnJlYWs7Y2FzZSJ2 aWV3ZXIiOnRoaXMuZWRpdG9yX3ZpZXcuaGlkZSgpLHRoPQppcy52aWV3ZXJfdmlldy5zaG93KCl9 fSxjaGFydFBhdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnNwbGl0KC9fKC4rKS8pO3JldHU9CnJu IHQubGVuZ3RoPj0zRDI/dFswXSsiLyIrdFsxXTooY29uc29sZS5kZWJ1ZygiRkFJTEVEIEFwcDpj aGFydFBhdGgoKSAtIEludj0KYWxpZCBmb3JtYXQ6ICIrZSksdW5kZWZpbmVkKX19KX0pOwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYz YmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFi NDQ3ZjQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMv b3RoZXJzPQovaGVhdG1hcC9oZWF0bWFwLXBsdWdpbi5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92 aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9vdGhlcnMvaGVhdG1hcC9oZWE9CnRt YXAtcGx1Z2luLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9z dGF0aWMvY2hhcnRzL290aGVycy9oZWF0bWFwL2hlYT0KdG1hcC1wbHVnaW4uanMKQEAgLTgzLDcg KzgzLDcgQEAKICAgICAgICAgVG9vbHMuYWRkWm9vbSh7CiAgICAgICAgICAgICB4QXhpcyAgICAg ICA6IHRoaXMueEF4aXMsCiAgICAgICAgICAgICB5QXhpcyAgICAgICA6IHRoaXMueUF4aXMsCi0g ICAgICAgICAgICByZWRyYXcgICAgICA6IGZ1bmN0aW9uKCkgeyBzZWxmLnJlZHJhdygpIH0sCisg ICAgICAgICAgICByZWRyYXcgICAgICA6IGZ1bmN0aW9uKCkgeyBzZWxmLnJlZHJhdygpOyB9LAog ICAgICAgICAgICAgc3ZnICAgICAgICAgOiBkMy5zZWxlY3QoJyMnICsgdGhpcy5jYW52YXNfaWQp CiAgICAgICAgIH0pOwogICAgIH0sCgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4MjY4ZGVmZjA2M2Jh NTBkMjdkZTE4MGI4ODkgLXIgZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5MDcxYmQzM2ExYjQ0 N2Y0IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvdmlld3MvZWRp dG9yLj0KanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRp Yy92aWV3cy9lZGl0b3IuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh cnRzL3N0YXRpYy92aWV3cy9lZGl0b3IuanMKQEAgLTEwOCw3ICsxMDgsOSBAQAogICAgICAgICAv LyBhcHBlbmQgZWxlbWVudAogICAgICAgICB2YXIgJG1haW4gPTNEICQoJzxkaXYvPicpOwogICAg ICAgICAkbWFpbi5hcHBlbmQoVXRpbHMud3JhcCgobmV3IFVpLkxhYmVsKHsgdGl0bGUgOiAnUHJv dmlkZSBhIGNoYXJ0IHQ9Cml0bGU6J30pKS4kZWwpKTsKLSAgICAgICAgJG1haW4uYXBwZW5kKFV0 aWxzLndyYXAodGhpcy50aXRsZS4kZWwpKTsKKyAgICAgICAgJG1haW4uYXBwZW5kKHRoaXMudGl0 bGUuJGVsKTsKKyAgICAgICAgJG1haW4uYXBwZW5kKCQoJzxkaXYvPicpLmFkZENsYXNzKCd1aS10 YWJsZS1mb3JtLWluZm8nKS5odG1sKCdUaGlzPQogdGl0bGUgd2lsbCBhcHBlYXIgaW4gdGhlIGxp c3Qgb2YgXCdTYXZlZCBWaXN1YWxpemF0aW9uc1wnLiBDaGFydHMgYXJlIHNhdmU9CmQgdXBvbiBj cmVhdGlvbi4nKSk7CisgICAgICAgICRtYWluLmFwcGVuZChVdGlscy53cmFwKCkpOwogICAgICAg ICAkbWFpbi5hcHBlbmQoVXRpbHMud3JhcCh0aGlzLnR5cGVzLiRlbCkpOwogICAgICAgID0yMAog ICAgICAgICAvLyBhZGQgdGFiCkBAIC0xODksNyArMTkxLDkgQEAKICAgICBfcmVmcmVzaFRpdGxl OiBmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHRpdGxlID0zRCB0aGlzLmNoYXJ0LmdldCgndGl0 bGUnKTsKICAgICAgICAgdGhpcy5wb3J0bGV0LnRpdGxlKHRpdGxlKTsKLSAgICAgICAgdGhpcy50 aXRsZS52YWx1ZSh0aXRsZSk7CisgICAgICAgIGlmICh0aGlzLnRpdGxlLnZhbHVlKCkgIT0zRCB0 aXRsZSkgeworICAgICAgICAgICAgdGhpcy50aXRsZS52YWx1ZSh0aXRsZSk7CisgICAgICAgIH0K ICAgICB9LAogICAgPTIwCiAgICAgLy8gcmVmcmVzaCBncm91cAoKZGlmZiAtciAyYTY2MzUxMDM1 M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0 PQo3OTA3MWJkMzNhMWI0NDdmNCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMv c3RhdGljL3ZpZXdzL3ZpZXdlci49CmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp b25zL2NoYXJ0cy9zdGF0aWMvdmlld3Mvdmlld2VyLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp c3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvdmlld3Mvdmlld2VyLmpzCkBAIC05OSw3ICs5OSw2 IEBACiAgICAgICAgIHRoaXMucG9ydGxldCA9M0QgbmV3IFBvcnRsZXQuVmlldyh7CiAgICAgICAg ICAgICBpY29uIDogJ2ZhLWJhci1jaGFydC1vJywKICAgICAgICAgICAgIHRpdGxlOiAnVmlld3Bv cnQnLAotICAgICAgICAgICAgc2Nyb2xsYWJsZTogZmFsc2UsCiAgICAgICAgICAgICBvcGVyYXRp b25zOiB7CiAgICAgICAgICAgICAgICAgZWRpdF9idXR0b246IG5ldyBVaS5CdXR0b25JY29uKHsK ICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6ICdmYS1lZGl0JywKCmRpZmYgLXIgMmE2NjM1 MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNj MTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh cnRzL3N0YXRpYy92aWV3cy92aWV3cG9yPQp0LmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh bGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvdmlld3Mvdmlld3BvcnQuanMKKysrIGIvY29uZmlnL3Bs dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy92aWV3cy92aWV3cG9ydC5qcwpAQCAt MzAsNiArMzAsMTQgQEAKICAgICAgICAgLy8gdXNlIGZ1bGwgc2NyZWVuIGZvciB2aWV3ZXIKICAg ICAgICAgdGhpcy5fZnVsbHNjcmVlbih0aGlzLiRlbCwgMTAwKTsKICAgICAgICA9MjAKKyAgICAg ICAgLy8gcHJldmVudCB3aW5kb3cgc2Nyb2xsaW5nCisgICAgICAgIHZhciBpbml0aWFsX292ZXJm bG93ID0zRCAkKCdib2R5JykuY3NzKCdvdmVyZmxvdycpOworICAgICAgICB0aGlzLiRlbC5vbign bW91c2VvdmVyJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAkKCdib2R5JykuY3NzKCdvdmVy ZmxvdycsICdoaWRkZW4nKTsKKyAgICAgICAgfSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7 CisgICAgICAgICAgICAkKCdib2R5JykuY3NzKCdvdmVyZmxvdycsIGluaXRpYWxfb3ZlcmZsb3cp OworICAgICAgICB9KTsKKyAgICAgICA9MjAKICAgICAgICAgLy8gY3JlYXRlIGNvbnRhaW5lciBl bGVtZW50CiAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbnRhaW5lcignZGl2Jyk7CiAgICAgICAgPTIw CgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIgZDgz Njg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5MDcxYmQzM2ExYjQ0N2Y0IGxpYi9nYWxheHkvZGF0YXNl dF9jb2xsZWN0aW9ucy9yZWdpc3RyeS5weQotLS0gYS9saWIvZ2FsYXh5L2RhdGFzZXRfY29sbGVj dGlvbnMvcmVnaXN0cnkucHkKKysrIGIvbGliL2dhbGF4eS9kYXRhc2V0X2NvbGxlY3Rpb25zL3Jl Z2lzdHJ5LnB5CkBAIC0xLDYgKzEsNiBAQAogZnJvbSAudHlwZXMgaW1wb3J0IGxpc3QKIGZyb20g LnR5cGVzIGltcG9ydCBwYWlyZWQKLQorZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsCj0yMAogUExV R0lOX0NMQVNTRVMgPTNEIFtsaXN0Lkxpc3REYXRhc2V0Q29sbGVjdGlvblR5cGUsIHBhaXJlZC5Q YWlyZWREYXRhc2V0Q289CmxsZWN0aW9uVHlwZV0KPTIwCkBAIC0xMiwzICsxMiwxMyBAQAo9MjAK ICAgICBkZWYgZ2V0KCBzZWxmLCBwbHVnaW5fdHlwZSApOgogICAgICAgICByZXR1cm4gc2VsZi5f X3BsdWdpbnNbIHBsdWdpbl90eXBlIF0KKworICAgIGRlZiBwcm90b3R5cGUoIHNlbGYsIHBsdWdp bl90eXBlICk6CisgICAgICAgIHBsdWdpbl90eXBlX29iamVjdCA9M0Qgc2VsZi5nZXQoIHBsdWdp bl90eXBlICkKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoIHBsdWdpbl90eXBlX29iamVjdCwgJ3By b3RvdHlwZV9lbGVtZW50cycgKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiggIkNhbm5v dCBwcmUtZGV0ZXJtaW5lIHN0cnVjdHVyZSBmb3IgY29sbGVjdGlvPQpuIG9mIHR5cGUgJXMiICUg cGx1Z2luX3R5cGUgKQorCisgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbiA9M0QgbW9kZWwuRGF0 YXNldENvbGxlY3Rpb24oKQorICAgICAgICBlbGVtZW50cyA9M0QgWyBlIGZvciBlIGluIHBsdWdp bl90eXBlX29iamVjdC5wcm90b3R5cGVfZWxlbWVudHMoKSBdCisgICAgICAgIGRhdGFzZXRfY29s bGVjdGlvbi5lbGVtZW50cyA9M0QgZWxlbWVudHMKKyAgICAgICAgcmV0dXJuIGRhdGFzZXRfY29s bGVjdGlvbgoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5 IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5 L2RhdGFzZXRfY29sbGVjdGlvbnMvdHlwZXMvcGFpcmVkLnB5Ci0tLSBhL2xpYi9nYWxheHkvZGF0 YXNldF9jb2xsZWN0aW9ucy90eXBlcy9wYWlyZWQucHkKKysrIGIvbGliL2dhbGF4eS9kYXRhc2V0 X2NvbGxlY3Rpb25zL3R5cGVzL3BhaXJlZC5weQpAQCAtMSw2ICsxLDYgQEAKIGZyb20gLi50eXBl cyBpbXBvcnQgQmFzZURhdGFzZXRDb2xsZWN0aW9uVHlwZQo9MjAKLWZyb20gZ2FsYXh5Lm1vZGVs IGltcG9ydCBEYXRhc2V0Q29sbGVjdGlvbkVsZW1lbnQKK2Zyb20gZ2FsYXh5Lm1vZGVsIGltcG9y dCBEYXRhc2V0Q29sbGVjdGlvbkVsZW1lbnQsIEhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpPQpvbgo9 MjAKIEZPUldBUkRfSURFTlRJRklFUiA9M0QgImZvcndhcmQiCiBSRVZFUlNFX0lERU5USUZJRVIg PTNEICJyZXZlcnNlIgpAQCAtMzIsMyArMzIsMTUgQEAKICAgICAgICAgKQogICAgICAgICB5aWVs ZCBsZWZ0X2Fzc29jaWF0aW9uCiAgICAgICAgIHlpZWxkIHJpZ2h0X2Fzc29jaWF0aW9uCisKKyAg ICBkZWYgcHJvdG90eXBlX2VsZW1lbnRzKCBzZWxmICk6CisgICAgICAgIGxlZnRfYXNzb2NpYXRp b24gPTNEIERhdGFzZXRDb2xsZWN0aW9uRWxlbWVudCgKKyAgICAgICAgICAgIGVsZW1lbnQ9M0RI aXN0b3J5RGF0YXNldEFzc29jaWF0aW9uKCksCisgICAgICAgICAgICBlbGVtZW50X2lkZW50aWZp ZXI9M0RGT1JXQVJEX0lERU5USUZJRVIsCisgICAgICAgICkKKyAgICAgICAgcmlnaHRfYXNzb2Np YXRpb24gPTNEIERhdGFzZXRDb2xsZWN0aW9uRWxlbWVudCgKKyAgICAgICAgICAgIGVsZW1lbnQ9 M0RIaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uKCksCisgICAgICAgICAgICBlbGVtZW50X2lkZW50 aWZpZXI9M0RSRVZFUlNFX0lERU5USUZJRVIsCisgICAgICAgICkKKyAgICAgICAgeWllbGQgbGVm dF9hc3NvY2lhdGlvbgorICAgICAgICB5aWVsZCByaWdodF9hc3NvY2lhdGlvbgoKZGlmZiAtciAy YTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5NGNjZjg0 OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L2pvYnMvX19pbml0X18ucHkK LS0tIGEvbGliL2dhbGF4eS9qb2JzL19faW5pdF9fLnB5CisrKyBiL2xpYi9nYWxheHkvam9icy9f X2luaXRfXy5weQpAQCAtMTIwMiw2ICsxMjAyLDExIEBACiAgICAgICAgIG91dF9kYXRhID0zRCBk aWN0KCBbICggZGEubmFtZSwgZGEuZGF0YXNldCApIGZvciBkYSBpbiBqb2Iub3V0cHV0Xz0KZGF0 YXNldHMgXSApCiAgICAgICAgIGlucF9kYXRhLnVwZGF0ZSggWyAoIGRhLm5hbWUsIGRhLmRhdGFz ZXQgKSBmb3IgZGEgaW4gam9iLmlucHV0X2xpYj0KcmFyeV9kYXRhc2V0cyBdICkKICAgICAgICAg b3V0X2RhdGEudXBkYXRlKCBbICggZGEubmFtZSwgZGEuZGF0YXNldCApIGZvciBkYSBpbiBqb2Iu b3V0cHV0X2xpPQpicmFyeV9kYXRhc2V0cyBdICkKKworICAgICAgICAjIFRPRE86IGVsaW1pbmF0 ZSBvdmVybGFwIHdpdGggdG9vbHMvZXZhbHVhdGlvbi5weQorICAgICAgICBvdXRfY29sbGVjdGlv bnMgPTNEIGRpY3QoIFsgKCBvYmoubmFtZSwgb2JqLmRhdGFzZXRfY29sbGVjdGlvbl9pbnM9CnRh bmNlICkgZm9yIG9iaiBpbiBqb2Iub3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZXMg XSApCisgICAgICAgIG91dF9jb2xsZWN0aW9ucy51cGRhdGUoIFsgKCBvYmoubmFtZSwgb2JqLmRh dGFzZXRfY29sbGVjdGlvbiApIGZvcj0KIG9iaiBpbiBqb2Iub3V0cHV0X2RhdGFzZXRfY29sbGVj dGlvbnMgXSApCisKICAgICAgICAgaW5wdXRfZXh0ID0zRCAnZGF0YScKICAgICAgICAgZm9yIF8s IGRhdGEgaW4gaW5wX2RhdGEuaXRlbXMoKToKICAgICAgICAgICAgICMgRm9yIGxvb3Agb2RkLCBi dXQgc29ydCBzaW11bGF0aW5nIGJlaGF2aW9yIGluIGdhbGF4eS50b29scy5hPQpjdGlvbnMKQEAg LTEyMTgsNiArMTIyMywxMiBAQAogICAgICAgICAgICAgJ2NoaWxkcmVuJzogc2VsZi50b29sLmNv bGxlY3RfY2hpbGRfZGF0YXNldHMob3V0X2RhdGEsIHNlbGYud289CnJraW5nX2RpcmVjdG9yeSks CiAgICAgICAgICAgICAncHJpbWFyeSc6IHNlbGYudG9vbC5jb2xsZWN0X3ByaW1hcnlfZGF0YXNl dHMob3V0X2RhdGEsIHNlbGYudz0Kb3JraW5nX2RpcmVjdG9yeSwgaW5wdXRfZXh0KQogICAgICAg ICB9CisgICAgICAgIHNlbGYudG9vbC5jb2xsZWN0X2R5bmFtaWNfY29sbGVjdGlvbnMoCisgICAg ICAgICAgICBvdXRfY29sbGVjdGlvbnMsCisgICAgICAgICAgICBqb2Jfd29ya2luZ19kaXJlY3Rv cnk9M0RzZWxmLndvcmtpbmdfZGlyZWN0b3J5LAorICAgICAgICAgICAgaW5wX2RhdGE9M0RpbnBf ZGF0YSwKKyAgICAgICAgICAgIGpvYj0zRGpvYiwKKyAgICAgICAgKQogICAgICAgICBwYXJhbV9k aWN0LnVwZGF0ZSh7J19fY29sbGVjdGVkX2RhdGFzZXRzX18nOiBjb2xsZWN0ZWRfZGF0YXNldHN9 KQogICAgICAgICAjIENlcnRhaW4gdG9vbHMgcmVxdWlyZSB0YXNrcyB0byBiZSBjb21wbGV0ZWQg YWZ0ZXIgam9iIGV4ZWN1dGlvbgogICAgICAgICAjICggdGhpcyB1c2VkIHRvIGJlIHBlcmZvcm1l ZCBpbiB0aGUgImV4ZWNfYWZ0ZXJfcHJvY2VzcyIgaG9vaywgYnU9CnQgaG9va3MgYXJlIGRlcHJl Y2F0ZWQgKS4KCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4 OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4 eS9qb2JzL3J1bm5lcnMvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS9qb2JzL3J1bm5lcnMv X19pbml0X18ucHkKKysrIGIvbGliL2dhbGF4eS9qb2JzL3J1bm5lcnMvX19pbml0X18ucHkKQEAg LTIxNiw3ICsyMTYsNyBAQAogICAgICAgICBqb2JfdG9vbCA9M0Qgam9iX3dyYXBwZXIudG9vbAog ICAgICAgICBmb3IgKGpvZGEsIGRhdGFzZXQpIGluIHNlbGYuX3dhbGtfZGF0YXNldF9vdXRwdXRz KCBqb2IgKToKICAgICAgICAgICAgIGlmIGpvZGEgYW5kIGpvYl90b29sOgotICAgICAgICAgICAg ICAgIGhkYV90b29sX291dHB1dCA9M0Qgam9iX3Rvb2wub3V0cHV0cy5nZXQoIGpvZGEubmFtZSwg Tm9uZSApCisgICAgICAgICAgICAgICAgaGRhX3Rvb2xfb3V0cHV0ID0zRCBqb2JfdG9vbC5maW5k X291dHB1dF9kZWYoIGpvZGEubmFtZSApCiAgICAgICAgICAgICAgICAgaWYgaGRhX3Rvb2xfb3V0 cHV0IGFuZCBoZGFfdG9vbF9vdXRwdXQuZnJvbV93b3JrX2RpcjoKICAgICAgICAgICAgICAgICAg ICAgIyBDb3B5IGZyb20gd29ya2luZyBkaXIgdG8gSERBLgogICAgICAgICAgICAgICAgICAgICAj IFRPRE86IG1vdmUgaW5zdGVhZCBvZiBjb3B5IHRvIHNhdmUgdGltZT8KCmRpZmYgLXIgMmE2NjM1 MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNj MTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5w eQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zLnB5CisrKyBiL2xpYi9nYWxh eHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKQEAgLTI5LDYgKzI5LDcgQEAKICAgICBBYnN0cmFj dGlvbiBmb3IgaW50ZXJmYWNpbmcgd2l0aCBkYXRhc2V0IGNvbGxlY3Rpb25zIGluc3RhbmNlIC0g aWRlYWxsPQp5IGFic3RhcmN0cwogICAgIG91dCBtb2RlbCBhbmQgcGx1Z2luIGRldGFpbHMuCiAg ICAgIiIiCisgICAgRUxFTUVOVFNfVU5JTklUSUFMSVpFRCA9M0Qgb2JqZWN0KCkKPTIwCiAgICAg ZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKICAgICAgICAgc2VsZi50eXBlX3JlZ2lzdHJ5ID0z RCBEYXRhc2V0Q29sbGVjdGlvblR5cGVzUmVnaXN0cnkoIGFwcCApCkBAIC03NSw3ICs3NiwxMSBA QAogICAgICAgICAgICAgICAgIGZvciBpbnB1dF9uYW1lLCBpbnB1dF9jb2xsZWN0aW9uIGluIGlt cGxpY2l0X2NvbGxlY3Rpb25faW49CmZvWyAiaW1wbGljaXRfaW5wdXRzIiBdOgogICAgICAgICAg ICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UuYWRkX2ltcGxpY2l0X2lucHV0 X2NvbGxlY3Q9CmlvbiggaW5wdXRfbmFtZSwgaW5wdXRfY29sbGVjdGlvbiApCiAgICAgICAgICAg ICAgICAgZm9yIG91dHB1dF9kYXRhc2V0IGluIGltcGxpY2l0X2NvbGxlY3Rpb25faW5mby5nZXQo ICJvdXRwdT0KdHMiICk6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhc2V0LmhpZGRl bl9iZW5lYXRoX2NvbGxlY3Rpb25faW5zdGFuY2UgPTNEID0KZGF0YXNldF9jb2xsZWN0aW9uX2lu c3RhbmNlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoIG91dHB1dF9kYXRhc2V0 LCBtb2RlbC5IaXN0b3J5RGF0YXNldENvbD0KbGVjdGlvbkFzc29jaWF0aW9uICk6CisgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UuYWRkX2ltcGxpY2l0 X2lucHV0X2NvbD0KbGVjdGlvbiggaW5wdXRfbmFtZSwgaW5wdXRfY29sbGVjdGlvbiApCisgICAg ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGFzZXQg Y29sbGVjdGlvbiwgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgorICAgICAgICAgICAgICAg ICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCgg b3V0cHV0X2RhdGFzZXQgKQo9MjAKICAgICAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25f aW5zdGFuY2UuaW1wbGljaXRfb3V0cHV0X25hbWUgPTNEIGltcGxpPQpjaXRfY29sbGVjdGlvbl9p bmZvWyAiaW1wbGljaXRfb3V0cHV0X25hbWUiIF0KQEAgLTk4LDYgKzEwMywxOCBAQAo9MjAKICAg ICAgICAgcmV0dXJuIHNlbGYuX19wZXJzaXN0KCBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2Ug KQo9MjAKKyAgICBkZWYgY3JlYXRlX2RhdGFzZXRfY29sbGVjdGlvbigKKyAgICAgICAgc2VsZiwK KyAgICAgICAgdHJhbnMsCisgICAgICAgIGNvbGxlY3Rpb25fdHlwZSwKKyAgICAgICAgZWxlbWVu dHM9M0ROb25lLAorICAgICk6CisgICAgICAgIHJldHVybiBzZWxmLl9fY3JlYXRlX2RhdGFzZXRf Y29sbGVjdGlvbigKKyAgICAgICAgICAgIHRyYW5zPTNEdHJhbnMsCisgICAgICAgICAgICBjb2xs ZWN0aW9uX3R5cGU9M0Rjb2xsZWN0aW9uX3R5cGUsCisgICAgICAgICAgICBlbGVtZW50cz0zRGVs ZW1lbnRzLAorICAgICAgICApCisKICAgICBkZWYgX19jcmVhdGVfZGF0YXNldF9jb2xsZWN0aW9u KAogICAgICAgICBzZWxmLAogICAgICAgICB0cmFucywKQEAgLTExOSw5ICsxMzYsMjQgQEAKICAg ICAgICAgICAgIGVsZW1lbnRzID0zRCBzZWxmLl9fbG9hZF9lbGVtZW50cyggdHJhbnMsIGVsZW1l bnRfaWRlbnRpZmllcnMgKQogICAgICAgICAjIGVsc2UgaWYgZWxlbWVudHMgaXMgc2V0LCBpdCBi ZXR0ZXIgYmUgYW4gb3JkZXJlZCBkaWN0IQo9MjAKKyAgICAgICAgaWYgZWxlbWVudHMgaXMgbm90 IHNlbGYuRUxFTUVOVFNfVU5JTklUSUFMSVpFRDoKKyAgICAgICAgICAgIHR5cGVfcGx1Z2luID0z RCBjb2xsZWN0aW9uX3R5cGVfZGVzY3JpcHRpb24ucmFua190eXBlX3BsdWdpbigpCisgICAgICAg ICAgICBkYXRhc2V0X2NvbGxlY3Rpb24gPTNEIGJ1aWxkZXIuYnVpbGRfY29sbGVjdGlvbiggdHlw ZV9wbHVnaW4sID0KZWxlbWVudHMgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YXNl dF9jb2xsZWN0aW9uID0zRCBtb2RlbC5EYXRhc2V0Q29sbGVjdGlvbiggcG9wdWxhdGVkPTNERmE9 CmxzZSApCisgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbi5jb2xsZWN0aW9uX3R5cGUgPTNEIGNv bGxlY3Rpb25fdHlwZQorICAgICAgICByZXR1cm4gZGF0YXNldF9jb2xsZWN0aW9uCisKKyAgICBk ZWYgc2V0X2NvbGxlY3Rpb25fZWxlbWVudHMoIHNlbGYsIGRhdGFzZXRfY29sbGVjdGlvbiwgZGF0 YXNldF9pbnN0YW5jPQplcyApOgorICAgICAgICBpZiBkYXRhc2V0X2NvbGxlY3Rpb24ucG9wdWxh dGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW5ub3QgcmVzZXQgZWxlbWVudHMg b2YgYW4gYWxyZWFkeSBwb3B1bGF0ZWQ9CiBkYXRhc2V0IGNvbGxlY3Rpb24uIikKKworICAgICAg ICBjb2xsZWN0aW9uX3R5cGUgPTNEIGRhdGFzZXRfY29sbGVjdGlvbi5jb2xsZWN0aW9uX3R5cGUK KyAgICAgICAgY29sbGVjdGlvbl90eXBlX2Rlc2NyaXB0aW9uID0zRCBzZWxmLmNvbGxlY3Rpb25f dHlwZV9kZXNjcmlwdGlvbnMuPQpmb3JfY29sbGVjdGlvbl90eXBlKCBjb2xsZWN0aW9uX3R5cGUg KQogICAgICAgICB0eXBlX3BsdWdpbiA9M0QgY29sbGVjdGlvbl90eXBlX2Rlc2NyaXB0aW9uLnJh bmtfdHlwZV9wbHVnaW4oKQotICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb24gPTNEIGJ1aWxkZXIu YnVpbGRfY29sbGVjdGlvbiggdHlwZV9wbHVnaW4sIGVsZW09CmVudHMgKQotICAgICAgICBkYXRh c2V0X2NvbGxlY3Rpb24uY29sbGVjdGlvbl90eXBlID0zRCBjb2xsZWN0aW9uX3R5cGUKKyAgICAg ICAgYnVpbGRlci5zZXRfY29sbGVjdGlvbl9lbGVtZW50cyggZGF0YXNldF9jb2xsZWN0aW9uLCB0 eXBlX3BsdWdpbiwgPQpkYXRhc2V0X2luc3RhbmNlcyApCisgICAgICAgIGRhdGFzZXRfY29sbGVj dGlvbi5tYXJrX2FzX3BvcHVsYXRlZCgpCisKICAgICAgICAgcmV0dXJuIGRhdGFzZXRfY29sbGVj dGlvbgo9MjAKICAgICBkZWYgZGVsZXRlKCBzZWxmLCB0cmFucywgaW5zdGFuY2VfdHlwZSwgaWQg KToKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBk ODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS9tYW5h Z2Vycy9jb2xsZWN0aW9uc191dGlsLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVj dGlvbnNfdXRpbC5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zX3V0aWwu cHkKQEAgLTc2LDcgKzc2LDkgQEAKICAgICAgICAgIyBUT0RPOiBXb3JrIGluIHByb2dyZXNzIC0g dGhpcyBlbmQtcG9pbnQgaXMgbm90IHJpZ2h0IHlldC4uLgogICAgICAgICBkaWN0X3ZhbHVlWyAn dXJsJyBdID0zRCB3ZWIudXJsX2ZvciggJ2xpYnJhcnlfY29udGVudCcsIGxpYnJhcnlfaWQ9Cj0z RGVuY29kZWRfbGlicmFyeV9pZCwgaWQ9M0RlbmNvZGVkX2lkLCBmb2xkZXJfaWQ9M0RlbmNvZGVk X2ZvbGRlcl9pZCApCiAgICAgaWYgdmlldyA9M0Q9M0QgImVsZW1lbnQiOgotICAgICAgICBkaWN0 X3ZhbHVlWyAnZWxlbWVudHMnIF0gPTNEIG1hcCggZGljdGlmeV9lbGVtZW50LCBkYXRhc2V0X2Nv bGxlY3Q9Cmlvbl9pbnN0YW5jZS5jb2xsZWN0aW9uLmVsZW1lbnRzICkKKyAgICAgICAgY29sbGVj dGlvbiA9M0QgZGF0YXNldF9jb2xsZWNpdG9uX2luc3RhbmNlLmNvbGxlY3Rpb24KKyAgICAgICAg ZGljdF92YWx1ZVsgJ2VsZW1lbnRzJyBdID0zRCBtYXAoIGRpY3RpZnlfZWxlbWVudCwgY29sbGVj dGlvbi5lbGVtPQplbnRzICkKKyAgICAgICAgZGljdF92YWx1ZVsgJ3BvcHVsYXRlZCcgXSA9M0Qg Y29sbGVjdGlvbi5wb3B1bGF0ZWQKICAgICBzZWN1cml0eS5lbmNvZGVfYWxsX2lkcyggZGljdF92 YWx1ZSwgcmVjdXJzaXZlPTNEVHJ1ZSApICAjIFRPRE86IFVzZSBLPQp5bGUncyByZWN1c3JpdmUg Zm9ybXVsYXRpb24gb2YgdGhpcy4KICAgICByZXR1cm4gZGljdF92YWx1ZQo9MjAKQEAgLTg2LDcg Kzg4LDkgQEAKICAgICBvYmplY3RfZGV0aWFscyA9M0QgZWxlbWVudC5lbGVtZW50X29iamVjdC50 b19kaWN0KCkKICAgICBpZiBlbGVtZW50LmNoaWxkX2NvbGxlY3Rpb246CiAgICAgICAgICMgUmVj dXJzaXZlbHkgeWllbGQgZWxlbWVudHMgZm9yIGVhY2ggbmVzdGVkIGNvbGxlY3Rpb24uLi4KLSAg ICAgICAgb2JqZWN0X2RldGlhbHNbICJlbGVtZW50cyIgXSA9M0QgbWFwKCBkaWN0aWZ5X2VsZW1l bnQsIGVsZW1lbnQuY2hpPQpsZF9jb2xsZWN0aW9uLmVsZW1lbnRzICkKKyAgICAgICAgY2hpbGRf Y29sbGVjdGlvbiA9M0QgZWxlbWVudC5jaGlsZF9jb2xsZWN0aW9uCisgICAgICAgIG9iamVjdF9k ZXRpYWxzWyAiZWxlbWVudHMiIF0gPTNEIG1hcCggZGljdGlmeV9lbGVtZW50LCBjaGlsZF9jb2xs ZT0KY3Rpb24uZWxlbWVudHMgKQorICAgICAgICBvYmplY3RfZGV0aWFsc1sgInBvcHVsYXRlZCIg XSA9M0QgY2hpbGRfY29sbGVjdGlvbi5wb3B1bGF0ZWQKPTIwCiAgICAgZGljdGlmaWVkWyAib2Jq ZWN0IiBdID0zRCBvYmplY3RfZGV0aWFscwogICAgIHJldHVybiBkaWN0aWZpZWQKCmRpZmYgLXIg MmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4 NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS9tb2RlbC9fX2luaXRfXy5w eQotLS0gYS9saWIvZ2FsYXh5L21vZGVsL19faW5pdF9fLnB5CisrKyBiL2xpYi9nYWxheHkvbW9k ZWwvX19pbml0X18ucHkKQEAgLTMyOSw2ICszMjksNyBAQAogICAgICAgICBzZWxmLmlucHV0X2Rh dGFzZXRzID0zRCBbXQogICAgICAgICBzZWxmLm91dHB1dF9kYXRhc2V0cyA9M0QgW10KICAgICAg ICAgc2VsZi5pbnB1dF9kYXRhc2V0X2NvbGxlY3Rpb25zID0zRCBbXQorICAgICAgICBzZWxmLm91 dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2VzID0zRCBbXQogICAgICAgICBzZWxmLm91 dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb25zID0zRCBbXQogICAgICAgICBzZWxmLmlucHV0X2xpYnJh cnlfZGF0YXNldHMgPTNEIFtdCiAgICAgICAgIHNlbGYub3V0cHV0X2xpYnJhcnlfZGF0YXNldHMg PTNEIFtdCkBAIC00NzIsOCArNDczLDEwIEBACiAgICAgICAgIHNlbGYub3V0cHV0X2RhdGFzZXRz LmFwcGVuZCggSm9iVG9PdXRwdXREYXRhc2V0QXNzb2NpYXRpb24oIG5hbWUsID0KZGF0YXNldCAp ICkKICAgICBkZWYgYWRkX2lucHV0X2RhdGFzZXRfY29sbGVjdGlvbiggc2VsZiwgbmFtZSwgZGF0 YXNldCApOgogICAgICAgICBzZWxmLmlucHV0X2RhdGFzZXRfY29sbGVjdGlvbnMuYXBwZW5kKCBK b2JUb0lucHV0RGF0YXNldENvbGxlY3Rpb249CkFzc29jaWF0aW9uKCBuYW1lLCBkYXRhc2V0ICkg KQotICAgIGRlZiBhZGRfb3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbiggc2VsZiwgbmFtZSwgZGF0 YXNldCApOgotICAgICAgICBzZWxmLm91dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb25zLmFwcGVuZCgg Sm9iVG9PdXRwdXREYXRhc2V0Q29sbGVjdGk9Cm9uQXNzb2NpYXRpb24oIG5hbWUsIGRhdGFzZXQg KSApCisgICAgZGVmIGFkZF9vdXRwdXRfZGF0YXNldF9jb2xsZWN0aW9uKCBzZWxmLCBuYW1lLCBk YXRhc2V0X2NvbGxlY3Rpb25faW5zdD0KYW5jZSApOgorICAgICAgICBzZWxmLm91dHB1dF9kYXRh c2V0X2NvbGxlY3Rpb25faW5zdGFuY2VzLmFwcGVuZCggSm9iVG9PdXRwdXREYXRhc2U9CnRDb2xs ZWN0aW9uQXNzb2NpYXRpb24oIG5hbWUsIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSApICkK KyAgICBkZWYgYWRkX2ltcGxpY2l0X291dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb24oIHNlbGYsIG5h bWUsIGRhdGFzZXRfY29sbGVjPQp0aW9uICk6CisgICAgICAgIHNlbGYub3V0cHV0X2RhdGFzZXRf Y29sbGVjdGlvbnMuYXBwZW5kKCBKb2JUb0ltcGxpY2l0T3V0cHV0RGF0YXNldD0KQ29sbGVjdGlv bkFzc29jaWF0aW9uKCBuYW1lLCBkYXRhc2V0X2NvbGxlY3Rpb24gKSApCiAgICAgZGVmIGFkZF9p bnB1dF9saWJyYXJ5X2RhdGFzZXQoIHNlbGYsIG5hbWUsIGRhdGFzZXQgKToKICAgICAgICAgc2Vs Zi5pbnB1dF9saWJyYXJ5X2RhdGFzZXRzLmFwcGVuZCggSm9iVG9JbnB1dExpYnJhcnlEYXRhc2V0 QXNzb2NpPQphdGlvbiggbmFtZSwgZGF0YXNldCApICkKICAgICBkZWYgYWRkX291dHB1dF9saWJy YXJ5X2RhdGFzZXQoIHNlbGYsIG5hbWUsIGRhdGFzZXQgKToKQEAgLTczNCw3ICs3MzcsMTggQEAK ICAgICAgICAgc2VsZi5kYXRhc2V0ID0zRCBkYXRhc2V0Cj0yMAo9MjAKKyMgTWFueSBqb2JzIG1h eSBtYXAgdG8gb25lIEhpc3RvcnlEYXRhc2V0Q29sbGVjdGlvbiB1c2luZyB0aGVzZSBmb3IgYSBn aXZlbgorIyB0b29sIG91dHB1dCAoaWYgbWFwcGluZyBvdmVyIGFuIGlucHV0IGNvbGxlY3Rpb24p LgogY2xhc3MgSm9iVG9PdXRwdXREYXRhc2V0Q29sbGVjdGlvbkFzc29jaWF0aW9uKCBvYmplY3Qg KToKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIG5hbWUsIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0 YW5jZSApOgorICAgICAgICBzZWxmLm5hbWUgPTNEIG5hbWUKKyAgICAgICAgc2VsZi5kYXRhc2V0 X2NvbGxlY3Rpb25faW5zdGFuY2UgPTNEIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZQorCisK KyMgQSBEYXRhc2V0Q29sbGVjdGlvbiB3aWxsIGJlIG1hcHBlZCB0byBhdCBtb3N0IG9uZSBqb2Ig cGVyIHRvb2wgb3V0cHV0CisjIHVzaW5nIHRoZXNlLiAoWW91IGNhbiB0aGluayBvZiBtYW55IG9m IHRoZXNlIG1vZGVscyBhcyBnb2luZyBpbnRvIHRoZQorIyBjcmVhdGlvbiBvZiBhIEpvYlRvT3V0 cHV0RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdGlvbi4pCitjbGFzcyBKb2JUb0ltcGxpY2l0T3V0 cHV0RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdGlvbiggb2JqZWN0ICk6CiAgICAgZGVmIF9faW5p dF9fKCBzZWxmLCBuYW1lLCBkYXRhc2V0X2NvbGxlY3Rpb24gKToKICAgICAgICAgc2VsZi5uYW1l ID0zRCBuYW1lCiAgICAgICAgIHNlbGYuZGF0YXNldF9jb2xsZWN0aW9uID0zRCBkYXRhc2V0X2Nv bGxlY3Rpb24KQEAgLTI2NzksMTQgKzI2OTMsMzcgQEAKICAgICAiIiIKICAgICBkaWN0X2NvbGxl Y3Rpb25fdmlzaWJsZV9rZXlzID0zRCAoICdpZCcsICdjb2xsZWN0aW9uX3R5cGUnICkKICAgICBk aWN0X2VsZW1lbnRfdmlzaWJsZV9rZXlzID0zRCAoICdpZCcsICdjb2xsZWN0aW9uX3R5cGUnICkK KyAgICBwb3B1bGF0ZWRfc3RhdGVzID0zRCBCdW5jaCgKKyAgICAgICAgTkVXPTNEJ25ldycsICAj IE5ldyBkYXRhc2V0IGNvbGxlY3Rpb24sIHVucG9wdWxhdGVkIGVsZW1lbnRzCisgICAgICAgIE9L PTNEJ29rJywgICMgQ29sbGVjdGlvbiBlbGVtZW50cyBwb3B1bGF0ZWQgKEhEQXMgbWF5IG9yIG1h eSBub3QgaD0KYXZlIGVycm9ycykKKyAgICAgICAgRkFJTEVEPTNEJ2ZhaWxlZCcsICAjIHNvbWUg cHJvYmxlbSBwb3B1bGF0aW5nIHN0YXRlLCB3b24ndCBiZSBwb3B1PQpsYXRlZAorICAgICkKPTIw CiAgICAgZGVmIF9faW5pdF9fKAogICAgICAgICBzZWxmLAogICAgICAgICBpZD0zRE5vbmUsCiAg ICAgICAgIGNvbGxlY3Rpb25fdHlwZT0zRE5vbmUsCisgICAgICAgIHBvcHVsYXRlZD0zRFRydWUs CiAgICAgKToKICAgICAgICAgc2VsZi5pZCA9M0QgaWQKICAgICAgICAgc2VsZi5jb2xsZWN0aW9u X3R5cGUgPTNEIGNvbGxlY3Rpb25fdHlwZQorICAgICAgICBpZiBub3QgcG9wdWxhdGVkOgorICAg ICAgICAgICAgc2VsZi5wb3B1bGF0ZWRfc3RhdGUgPTNEIERhdGFzZXRDb2xsZWN0aW9uLnBvcHVs YXRlZF9zdGF0ZXMuTkVXCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcG9wdWxhdGVkKCBzZWxm ICk6CisgICAgICAgIHJldHVybiBzZWxmLnBvcHVsYXRlZF9zdGF0ZSA9M0Q9M0QgRGF0YXNldENv bGxlY3Rpb24ucG9wdWxhdGVkX3N0YT0KdGVzLk9LCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg d2FpdGluZ19mb3JfZWxlbWVudHMoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYucG9wdWxh dGVkX3N0YXRlID0zRD0zRCBEYXRhc2V0Q29sbGVjdGlvbi5wb3B1bGF0ZWRfc3RhPQp0ZXMuTkVX CisKKyAgICBkZWYgbWFya19hc19wb3B1bGF0ZWQoIHNlbGYgKToKKyAgICAgICAgc2VsZi5wb3B1 bGF0ZWRfc3RhdGUgPTNEIERhdGFzZXRDb2xsZWN0aW9uLnBvcHVsYXRlZF9zdGF0ZXMuT0sKKwor ICAgIGRlZiBoYW5kbGVfcG9wdWxhdGlvbl9mYWlsZWQoIHNlbGYsIG1lc3NhZ2UgKToKKyAgICAg ICAgc2VsZi5wb3B1bGF0ZWRfc3RhdGUgPTNEIERhdGFzZXRDb2xsZWN0aW9uLnBvcHVsYXRlZF9z dGF0ZXMuRkFJTEVECisgICAgICAgIHNlbGYucG9wdWxhdGVkX3N0YXRlX21lc3NhZ2UgPTNEIG1l c3NhZ2UKPTIwCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGRhdGFzZXRfaW5zdGFuY2VzKCBzZWxm ICk6CgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIg ZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5MDcxYmQzM2ExYjQ0N2Y0IGxpYi9nYWxheHkvbW9k ZWwvbWFwcGluZy5weQotLS0gYS9saWIvZ2FsYXh5L21vZGVsL21hcHBpbmcucHkKKysrIGIvbGli L2dhbGF4eS9tb2RlbC9tYXBwaW5nLnB5CkBAIC00NDksNiArNDQ5LDEyIEBACiAgICAgQ29sdW1u KCAiZGF0YXNldF9jb2xsZWN0aW9uX2lkIiwgSW50ZWdlciwgRm9yZWlnbktleSggImhpc3Rvcnlf ZGF0YXNldD0KX2NvbGxlY3Rpb25fYXNzb2NpYXRpb24uaWQiICksIGluZGV4PTNEVHJ1ZSApLAog ICAgIENvbHVtbiggIm5hbWUiLCBVbmljb2RlKDI1NSkgKSApCj0yMAorbW9kZWwuSm9iVG9JbXBs aWNpdE91dHB1dERhdGFzZXRDb2xsZWN0aW9uQXNzb2NpYXRpb24udGFibGUgPTNEIFRhYmxlKCAi am89CmJfdG9faW1wbGljaXRfb3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbiIsIG1ldGFkYXRhLAor ICAgIENvbHVtbiggImlkIiwgSW50ZWdlciwgcHJpbWFyeV9rZXk9M0RUcnVlICksCisgICAgQ29s dW1uKCAiam9iX2lkIiwgSW50ZWdlciwgRm9yZWlnbktleSggImpvYi5pZCIgKSwgaW5kZXg9M0RU cnVlICksCisgICAgQ29sdW1uKCAiZGF0YXNldF9jb2xsZWN0aW9uX2lkIiwgSW50ZWdlciwgRm9y ZWlnbktleSggImRhdGFzZXRfY29sbGVjdD0KaW9uLmlkIiApLCBpbmRleD0zRFRydWUgKSwKKyAg ICBDb2x1bW4oICJuYW1lIiwgVW5pY29kZSgyNTUpICkgKQorCiBtb2RlbC5Kb2JUb091dHB1dERh dGFzZXRDb2xsZWN0aW9uQXNzb2NpYXRpb24udGFibGUgPTNEIFRhYmxlKCAiam9iX3RvX291dD0K cHV0X2RhdGFzZXRfY29sbGVjdGlvbiIsIG1ldGFkYXRhLAogICAgIENvbHVtbiggImlkIiwgSW50 ZWdlciwgcHJpbWFyeV9rZXk9M0RUcnVlICksCiAgICAgQ29sdW1uKCAiam9iX2lkIiwgSW50ZWdl ciwgRm9yZWlnbktleSggImpvYi5pZCIgKSwgaW5kZXg9M0RUcnVlICksCkBAIC02MTYsNiArNjIy LDggQEAKIG1vZGVsLkRhdGFzZXRDb2xsZWN0aW9uLnRhYmxlID0zRCBUYWJsZSggImRhdGFzZXRf Y29sbGVjdGlvbiIsIG1ldGFkYXRhLAogICAgIENvbHVtbiggImlkIiwgSW50ZWdlciwgcHJpbWFy eV9rZXk9M0RUcnVlICksCiAgICAgQ29sdW1uKCAiY29sbGVjdGlvbl90eXBlIiwgVW5pY29kZSgy NTUpLCBudWxsYWJsZT0zREZhbHNlICksCisgICAgQ29sdW1uKCAicG9wdWxhdGVkX3N0YXRlIiwg VHJpbW1lZFN0cmluZyggNjQgKSwgZGVmYXVsdD0zRCdvaycsIG51bGxhYj0KbGU9M0RGYWxzZSAp LAorICAgIENvbHVtbiggInBvcHVsYXRlZF9zdGF0ZV9tZXNzYWdlIiwgVEVYVCApLAogICAgIENv bHVtbiggImNyZWF0ZV90aW1lIiwgRGF0ZVRpbWUsIGRlZmF1bHQ9M0Rub3cgKSwKICAgICBDb2x1 bW4oICJ1cGRhdGVfdGltZSIsIERhdGVUaW1lLCBkZWZhdWx0PTNEbm93LCBvbnVwZGF0ZT0zRG5v dyApLAogKQpAQCAtMTgxMCw4ICsxODE4LDEzIEBACj0yMAogbWFwcGVyKCBtb2RlbC5Kb2JUb091 dHB1dERhdGFzZXRDb2xsZWN0aW9uQXNzb2NpYXRpb24sCiAgICAgICAgIG1vZGVsLkpvYlRvT3V0 cHV0RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdGlvbi50YWJsZSwgcHJvcGVydGllcz0zRD0KZGlj dCgKKyAgICAgICAgICAgIGpvYj0zRHJlbGF0aW9uKCBtb2RlbC5Kb2IgKSwgZGF0YXNldF9jb2xs ZWN0aW9uX2luc3RhbmNlPTNEcmVsPQphdGlvbigKKyAgICAgICAgICAgICAgICBtb2RlbC5IaXN0 b3J5RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdGlvbiwgbGF6eT0zREZhbHNlLCBiPQphY2tyZWY9 M0Qib3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZXMiICkgKSApCisKK21hcHBlcigg bW9kZWwuSm9iVG9JbXBsaWNpdE91dHB1dERhdGFzZXRDb2xsZWN0aW9uQXNzb2NpYXRpb24sCisg ICAgICAgIG1vZGVsLkpvYlRvSW1wbGljaXRPdXRwdXREYXRhc2V0Q29sbGVjdGlvbkFzc29jaWF0 aW9uLnRhYmxlLCBwcm9wZT0KcnRpZXM9M0RkaWN0KAogICAgICAgICAgICAgam9iPTNEcmVsYXRp b24oIG1vZGVsLkpvYiApLCBkYXRhc2V0X2NvbGxlY3Rpb249M0RyZWxhdGlvbigKLSAgICAgICAg ICAgICAgICBtb2RlbC5IaXN0b3J5RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdGlvbiwgbGF6eT0z REZhbHNlICkgPQopICkKKyAgICAgICAgICAgICAgICBtb2RlbC5EYXRhc2V0Q29sbGVjdGlvbiwg YmFja3JlZj0zRCJvdXRwdXRfZGF0YXNldF9jb2xsZWN0PQppb25zIiApICkgKQo9MjAKIG1hcHBl ciggbW9kZWwuSm9iVG9JbnB1dExpYnJhcnlEYXRhc2V0QXNzb2NpYXRpb24sCiAgICAgICAgIG1v ZGVsLkpvYlRvSW5wdXRMaWJyYXJ5RGF0YXNldEFzc29jaWF0aW9uLnRhYmxlLCBwcm9wZXJ0aWVz PTNEZGljdCgKQEAgLTE4OTYsNiArMTkwOSw4IEBACiAgICAgICAgICAgICAgICAgICAgICBwYXJh bWV0ZXJzPTNEcmVsYXRpb24oIG1vZGVsLkpvYlBhcmFtZXRlciwgbGF6eT0zREZhbD0Kc2UgKSwK ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGFzZXRzPTNEcmVsYXRpb24oIG1vZGVsLkpv YlRvSW5wdXREYXRhc2V0QXNzPQpvY2lhdGlvbiApLAogICAgICAgICAgICAgICAgICAgICAgb3V0 cHV0X2RhdGFzZXRzPTNEcmVsYXRpb24oIG1vZGVsLkpvYlRvT3V0cHV0RGF0YXNldEE9CnNzb2Np YXRpb24gKSwKKyAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb25f aW5zdGFuY2VzPTNEcmVsYXRpb24oIG1vZGVsPQouSm9iVG9PdXRwdXREYXRhc2V0Q29sbGVjdGlv bkFzc29jaWF0aW9uICksCisgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YXNldF9jb2xs ZWN0aW9ucz0zRHJlbGF0aW9uKCBtb2RlbC5Kb2JUb0ltcD0KbGljaXRPdXRwdXREYXRhc2V0Q29s bGVjdGlvbkFzc29jaWF0aW9uICksCiAgICAgICAgICAgICAgICAgICAgICBwb3N0X2pvYl9hY3Rp b25zPTNEcmVsYXRpb24oIG1vZGVsLlBvc3RKb2JBY3Rpb25Bc3NvYz0KaWF0aW9uLCBsYXp5PTNE RmFsc2UgKSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpYnJhcnlfZGF0YXNldHM9M0Ry ZWxhdGlvbiggbW9kZWwuSm9iVG9JbnB1dExpPQpicmFyeURhdGFzZXRBc3NvY2lhdGlvbiApLAog ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xpYnJhcnlfZGF0YXNldHM9M0RyZWxhdGlvbigg bW9kZWwuSm9iVG9PdXRwdXQ9CkxpYnJhcnlEYXRhc2V0QXNzb2NpYXRpb24gKSwKCmRpZmYgLXIg MmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4 NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS9tb2RlbC9taWdyYXRlL3Zl cnNpb25zLzAxMjdfb3V0cHV0X2NvbGxlY3Rpb25fPQphZGp1c3RtZW50cy5weQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYi9nYWxheHkvbW9kZWwvbWlncmF0ZS92ZXJzaW9ucy8wMTI3X291dHB1dF9j b2xsZWN0aW9uX2FkanVzdG1lbnRzLj0KcHkKQEAgLTAsMCArMSw4NSBAQAorIiIiCitNaWdyYXRp b24gc2NyaXB0IHVwZGF0aW5nIGNvbGxlY3Rpb25zIHRhYmxlcyBmb3Igb3V0cHV0IGNvbGxlY3Rp b25zLgorIiIiCisKK2Zyb20gc3FsYWxjaGVteSBpbXBvcnQgKgorZnJvbSBzcWxhbGNoZW15Lm9y bSBpbXBvcnQgKgorZnJvbSBtaWdyYXRlIGltcG9ydCAqCitmcm9tIG1pZ3JhdGUuY2hhbmdlc2V0 IGltcG9ydCAqCitmcm9tIGdhbGF4eS5tb2RlbC5jdXN0b21fdHlwZXMgaW1wb3J0ICoKKworaW1w b3J0IGRhdGV0aW1lCitub3cgPTNEIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vdworCitpbXBvcnQg bG9nZ2luZworbG9nID0zRCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQorCittZXRhZGF0 YSA9M0QgTWV0YURhdGEoKQorCitKb2JUb0ltcGxpY2l0T3V0cHV0RGF0YXNldENvbGxlY3Rpb25B c3NvY2lhdGlvbl90YWJsZSA9M0QgVGFibGUoCisgICAgImpvYl90b19pbXBsaWNpdF9vdXRwdXRf ZGF0YXNldF9jb2xsZWN0aW9uIiwgbWV0YWRhdGEsCisgICAgQ29sdW1uKCAiaWQiLCBJbnRlZ2Vy LCBwcmltYXJ5X2tleT0zRFRydWUgKSwKKyAgICBDb2x1bW4oICJqb2JfaWQiLCBJbnRlZ2VyLCBG b3JlaWduS2V5KCAiam9iLmlkIiApLCBpbmRleD0zRFRydWUgKSwKKyAgICBDb2x1bW4oICJkYXRh c2V0X2NvbGxlY3Rpb25faWQiLCBJbnRlZ2VyLCBGb3JlaWduS2V5KCAiZGF0YXNldF9jb2xsZWN0 PQppb24uaWQiICksIGluZGV4PTNEVHJ1ZSApLAorICAgIENvbHVtbiggIm5hbWUiLCBVbmljb2Rl KDI1NSkgKQorKQorCisKK1RBQkxFUyA9M0QgWworICAgIEpvYlRvSW1wbGljaXRPdXRwdXREYXRh c2V0Q29sbGVjdGlvbkFzc29jaWF0aW9uX3RhYmxlLAorXQorCisKK2RlZiB1cGdyYWRlKG1pZ3Jh dGVfZW5naW5lKToKKyAgICBtZXRhZGF0YS5iaW5kID0zRCBtaWdyYXRlX2VuZ2luZQorICAgIHBy aW50IF9fZG9jX18KKyAgICBtZXRhZGF0YS5yZWZsZWN0KCkKKworICAgIGZvciB0YWJsZSBpbiBU QUJMRVM6CisgICAgICAgIF9fY3JlYXRlKHRhYmxlKQorCisgICAgdHJ5OgorICAgICAgICBkYXRh c2V0X2NvbGxlY3Rpb25fdGFibGUgPTNEIFRhYmxlKCAiZGF0YXNldF9jb2xsZWN0aW9uIiwgbWV0 YWRhdGE9CiwgYXV0b2xvYWQ9M0RUcnVlICkKKyAgICAgICAgIyBuZWVkIHNlcnZlcl9kZWZhdWx0 IGJlY2F1c2UgY29sdW1uIGluIG5vbi1udWxsCisgICAgICAgIHBvcHVsYXRlZF9zdGF0ZV9jb2x1 bW4gPTNEIENvbHVtbiggJ3BvcHVsYXRlZF9zdGF0ZScsIFRyaW1tZWRTdHJpbj0KZyggNjQgKSwg ZGVmYXVsdD0zRCdvaycsIHNlcnZlcl9kZWZhdWx0PTNEIm9rIiwgbnVsbGFibGU9M0RGYWxzZSAp CisgICAgICAgIHBvcHVsYXRlZF9zdGF0ZV9jb2x1bW4uY3JlYXRlKCBkYXRhc2V0X2NvbGxlY3Rp b25fdGFibGUgKQorCisgICAgICAgIHBvcHVsYXRlZF9tZXNzYWdlX2NvbHVtbiA9M0QgQ29sdW1u KCAncG9wdWxhdGVkX3N0YXRlX21lc3NhZ2UnLCBURT0KWFQsIG51bGxhYmxlPTNEVHJ1ZSApCisg ICAgICAgIHBvcHVsYXRlZF9tZXNzYWdlX2NvbHVtbi5jcmVhdGUoIGRhdGFzZXRfY29sbGVjdGlv bl90YWJsZSApCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBwcmludCBzdHIo ZSkKKyAgICAgICAgbG9nLmV4Y2VwdGlvbiggIkNyZWF0aW5nIGRhdGFzZXQgY29sbGVjdGlvbiBw b3B1bGF0ZWQgY29sdW1uIGZhaWxlPQpkLiIgKQorCisKK2RlZiBkb3duZ3JhZGUobWlncmF0ZV9l bmdpbmUpOgorICAgIG1ldGFkYXRhLmJpbmQgPTNEIG1pZ3JhdGVfZW5naW5lCisgICAgbWV0YWRh dGEucmVmbGVjdCgpCisKKyAgICBmb3IgdGFibGUgaW4gVEFCTEVTOgorICAgICAgICBfX2Ryb3Ao dGFibGUpCisKKyAgICB0cnk6CisgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbl90YWJsZSA9M0Qg VGFibGUoICJkYXRhc2V0X2NvbGxlY3Rpb24iLCBtZXRhZGF0YT0KLCBhdXRvbG9hZD0zRFRydWUg KQorICAgICAgICBwb3B1bGF0ZWRfc3RhdGVfY29sdW1uID0zRCBkYXRhc2V0X2NvbGxlY3Rpb25f dGFibGUuYy5wb3B1bGF0ZWRfc3Q9CmF0ZQorICAgICAgICBwb3B1bGF0ZWRfc3RhdGVfY29sdW1u LmRyb3AoKQorICAgICAgICBwb3B1bGF0ZWRfbWVzc2FnZV9jb2x1bW4gPTNEIGRhdGFzZXRfY29s bGVjdGlvbl90YWJsZS5jLnBvcHVsYXRlZF89CnN0YXRlX21lc3NhZ2UKKyAgICAgICAgcG9wdWxh dGVkX21lc3NhZ2VfY29sdW1uLmRyb3AoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAg ICAgICAgcHJpbnQgc3RyKGUpCisgICAgICAgIGxvZy5leGNlcHRpb24oICJEcm9wcGluZyBkYXRh c2V0IGNvbGxlY3Rpb24gcG9wdWxhdGVkX3N0YXRlLyBjb2x1bT0KbiBmYWlsZWQuIiApCisKKwor ZGVmIF9fY3JlYXRlKHRhYmxlKToKKyAgICB0cnk6CisgICAgICAgIHRhYmxlLmNyZWF0ZSgpCisg ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBwcmludCBzdHIoZSkKKyAgICAgICAg bG9nLmV4Y2VwdGlvbigiQ3JlYXRpbmcgJXMgdGFibGUgZmFpbGVkOiAlcyIgJSAodGFibGUubmFt ZSwgc3RyKCBlPQogKSApICkKKworCitkZWYgX19kcm9wKHRhYmxlKToKKyAgICB0cnk6CisgICAg ICAgIHRhYmxlLmRyb3AoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcHJp bnQgc3RyKGUpCisgICAgICAgIGxvZy5leGNlcHRpb24oIkRyb3BwaW5nICVzIHRhYmxlIGZhaWxl ZDogJXMiICUgKHRhYmxlLm5hbWUsIHN0ciggZT0KICkgKSApCgpkaWZmIC1yIDJhNjYzNTEwMzUz YmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIgZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2NjQ9 Cjc5MDcxYmQzM2ExYjQ0N2Y0IGxpYi9nYWxheHkvdG9vbHMvX19pbml0X18ucHkKLS0tIGEvbGli L2dhbGF4eS90b29scy9fX2luaXRfXy5weQorKysgYi9saWIvZ2FsYXh5L3Rvb2xzL19faW5pdF9f LnB5CkBAIC0yMjIsNyArMjIyLDE4IEBACiAgICAgICAgIHJldHVybiBuZXdfc3RhdGUKPTIwCj0y MAotY2xhc3MgVG9vbE91dHB1dCggb2JqZWN0LCBEaWN0aWZpYWJsZSApOgorY2xhc3MgVG9vbE91 dHB1dEJhc2UoIG9iamVjdCwgRGljdGlmaWFibGUgKToKKworICAgIGRlZiBfX2luaXRfXyggc2Vs ZiwgbmFtZSwgbGFiZWw9M0ROb25lLCBmaWx0ZXJzPTNETm9uZSwgaGlkZGVuPTNERmFsc2U9CiAp OgorICAgICAgICBzdXBlciggVG9vbE91dHB1dEJhc2UsIHNlbGYgKS5fX2luaXRfXygpCisgICAg ICAgIHNlbGYubmFtZSA9M0QgbmFtZQorICAgICAgICBzZWxmLmxhYmVsID0zRCBsYWJlbAorICAg ICAgICBzZWxmLmZpbHRlcnMgPTNEIGZpbHRlcnMgb3IgW10KKyAgICAgICAgc2VsZi5oaWRkZW4g PTNEIGhpZGRlbgorICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPTNEIEZhbHNlCisKKworY2xhc3Mg VG9vbE91dHB1dCggVG9vbE91dHB1dEJhc2UgKToKICAgICAiIiIKICAgICBSZXByZXNlbnRzIGFu IG91dHB1dCBkYXRhc2V0cyBwcm9kdWNlZCBieSBhIHRvb2wuIEZvciBiYWNrd2FyZAogICAgIGNv bXBhdGliaWxpdHkgdGhpcyBiZWhhdmVzIGFzIGlmIGl0IHdlcmUgdGhlIHR1cGxlOjoKQEAgLTIz MywxNiArMjQ0LDE4IEBACiAgICAgZGljdF9jb2xsZWN0aW9uX3Zpc2libGVfa2V5cyA9M0QgKCAn bmFtZScsICdmb3JtYXQnLCAnbGFiZWwnLCAnaGlkZGVuJz0KICkKPTIwCiAgICAgZGVmIF9faW5p dF9fKCBzZWxmLCBuYW1lLCBmb3JtYXQ9M0ROb25lLCBmb3JtYXRfc291cmNlPTNETm9uZSwgbWV0 YWRhdD0KYV9zb3VyY2U9M0ROb25lLAotICAgICAgICAgICAgICAgICAgcGFyZW50PTNETm9uZSwg bGFiZWw9M0ROb25lLCBmaWx0ZXJzPTNETm9uZSwgYWN0aW9ucz0zRE49Cm9uZSwgaGlkZGVuPTNE RmFsc2UgKToKLSAgICAgICAgc2VsZi5uYW1lID0zRCBuYW1lCisgICAgICAgICAgICAgICAgICBw YXJlbnQ9M0ROb25lLCBsYWJlbD0zRE5vbmUsIGZpbHRlcnM9M0ROb25lLCBhY3Rpb25zPTNETj0K b25lLCBoaWRkZW49M0RGYWxzZSwKKyAgICAgICAgICAgICAgICAgIGltcGxpY2l0PTNERmFsc2Ug KToKKyAgICAgICAgc3VwZXIoIFRvb2xPdXRwdXQsIHNlbGYgKS5fX2luaXRfXyggbmFtZSwgbGFi ZWw9M0RsYWJlbCwgZmlsdGVycz0KPTNEZmlsdGVycywgaGlkZGVuPTNEaGlkZGVuICkKICAgICAg ICAgc2VsZi5mb3JtYXQgPTNEIGZvcm1hdAogICAgICAgICBzZWxmLmZvcm1hdF9zb3VyY2UgPTNE IGZvcm1hdF9zb3VyY2UKICAgICAgICAgc2VsZi5tZXRhZGF0YV9zb3VyY2UgPTNEIG1ldGFkYXRh X3NvdXJjZQogICAgICAgICBzZWxmLnBhcmVudCA9M0QgcGFyZW50Ci0gICAgICAgIHNlbGYubGFi ZWwgPTNEIGxhYmVsCi0gICAgICAgIHNlbGYuZmlsdGVycyA9M0QgZmlsdGVycyBvciBbXQogICAg ICAgICBzZWxmLmFjdGlvbnMgPTNEIGFjdGlvbnMKLSAgICAgICAgc2VsZi5oaWRkZW4gPTNEIGhp ZGRlbgorCisgICAgICAgICMgSW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlcworICAgICAgICBzZWxm LmNoYW5nZV9mb3JtYXQgPTNEIFtdCisgICAgICAgIHNlbGYuaW1wbGljaXQgPTNEIGltcGxpY2l0 Cj0yMAogICAgICMgVHVwbGUgZW11bGF0aW9uCj0yMApAQCAtMjYzLDYgKzI3NiwxMzcgQEAKICAg ICAgICAgcmV0dXJuIGl0ZXIoICggc2VsZi5mb3JtYXQsIHNlbGYubWV0YWRhdGFfc291cmNlLCBz ZWxmLnBhcmVudCApICkKPTIwCj0yMAorY2xhc3MgVG9vbE91dHB1dENvbGxlY3Rpb24oIFRvb2xP dXRwdXRCYXNlICk6CisgICAgIiIiCisgICAgUmVwcmVzZW50cyBhIEhpc3RvcnlEYXRhc2V0Q29s bGVjdGlvbkFzc29jaWF0aW9uIG9mICBvdXRwdXQgZGF0YXNldHMgcD0Kcm9kdWNlZCBieSBhIHRv b2wuCisgICAgPG91dHB1dHM+CisgICAgICA8ZGF0YXNldF9jb2xsZWN0aW9uIHR5cGU9M0QibGlz dCIgbGFiZWw9M0QiJHt0b29sLm5hbWV9IG9uICR7b25fc3RyaT0Kbmd9IGZhc3RhIj4KKyAgICAg ICAgPGRpc2NvdmVyX2RhdGFzZXRzIHBhdHRlcm49M0QiX19uYW1lX18iIGV4dD0zRCJmYXN0YSIg dmlzaWJsZT0zRCJUPQpydWUiIGRpcmVjdG9yeT0zRCJvdXRwdXRGaWxlcyIgLz4KKyAgICAgIDwv ZGF0YXNldF9jb2xsZWN0aW9uPgorICAgICAgPGRhdGFzZXRfY29sbGVjdGlvbiB0eXBlPTNEInBh aXJlZCIgbGFiZWw9M0QiJHt0b29sLm5hbWV9IG9uICR7b25fc3Q9CnJpbmd9IHBhaXJlZCByZWFk cyI+CisgICAgICAgIDxkYXRhIG5hbWU9M0QiZm9yd2FyZCIgZm9ybWF0PTNEImZhc3Rxc2FuZ2Vy IiAvPgorICAgICAgICA8ZGF0YSBuYW1lPTNEInJldmVyc2UiIGZvcm1hdD0zRCJmYXN0cXNhbmdl ciIvPgorICAgICAgPC9kYXRhc2V0X2NvbGxlY3Rpb24+CisgICAgPG91dHB1dHM+CisgICAgIiIi CisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsCisgICAgICAgIG5hbWUsCisgICAg ICAgIHN0cnVjdHVyZSwKKyAgICAgICAgbGFiZWw9M0ROb25lLAorICAgICAgICBmaWx0ZXJzPTNE Tm9uZSwKKyAgICAgICAgaGlkZGVuPTNERmFsc2UsCisgICAgICAgIGRlZmF1bHRfZm9ybWF0PTNE ImRhdGEiLAorICAgICAgICBkZWZhdWx0X2Zvcm1hdF9zb3VyY2U9M0ROb25lLAorICAgICAgICBk ZWZhdWx0X21ldGFkYXRhX3NvdXJjZT0zRE5vbmUsCisgICAgICAgIGluaGVyaXRfZm9ybWF0PTNE RmFsc2UsCisgICAgICAgIGluaGVyaXRfbWV0YWRhdGE9M0RGYWxzZQorICAgICk6CisgICAgICAg IHN1cGVyKCBUb29sT3V0cHV0Q29sbGVjdGlvbiwgc2VsZiApLl9faW5pdF9fKCBuYW1lLCBsYWJl bD0zRGxhYmVsLD0KIGZpbHRlcnM9M0RmaWx0ZXJzLCBoaWRkZW49M0RoaWRkZW4gKQorICAgICAg ICBzZWxmLmNvbGxlY3Rpb24gPTNEIFRydWUKKyAgICAgICAgc2VsZi5kZWZhdWx0X2Zvcm1hdCA9 M0QgZGVmYXVsdF9mb3JtYXQKKyAgICAgICAgc2VsZi5zdHJ1Y3R1cmUgPTNEIHN0cnVjdHVyZQor ICAgICAgICBzZWxmLm91dHB1dHMgPTNEIG9kaWN0KCkKKworICAgICAgICBzZWxmLmluaGVyaXRf Zm9ybWF0ID0zRCBpbmhlcml0X2Zvcm1hdAorICAgICAgICBzZWxmLmluaGVyaXRfbWV0YWRhdGEg PTNEIGluaGVyaXRfbWV0YWRhdGEKKworICAgICAgICBzZWxmLm1ldGFkYXRhX3NvdXJjZSA9M0Qg ZGVmYXVsdF9tZXRhZGF0YV9zb3VyY2UKKyAgICAgICAgc2VsZi5mb3JtYXRfc291cmNlID0zRCBk ZWZhdWx0X2Zvcm1hdF9zb3VyY2UKKyAgICAgICAgc2VsZi5jaGFuZ2VfZm9ybWF0ID0zRCBbXSAg IyBUT0RPCisKKyAgICBkZWYga25vd25fb3V0cHV0cyggc2VsZiwgaW5wdXRzLCB0eXBlX3JlZ2lz dHJ5ICk6CisgICAgICAgIGlmIHNlbGYuZHluYW1pY19zdHJ1Y3R1cmU6CisgICAgICAgICAgICBy ZXR1cm4gW10KKworICAgICAgICBkZWYgdG9fcGFydCggKCBlbGVtZW50X2lkZW50aWZpZXIsIG91 dHB1dCApICk6CisgICAgICAgICAgICByZXR1cm4gVG9vbE91dHB1dENvbGxlY3Rpb25QYXJ0KCBz ZWxmLCBlbGVtZW50X2lkZW50aWZpZXIsIG91dD0KcHV0ICkKKworICAgICAgICAjIFRoaXMgbGlu ZSBpcyBwcm9iYWJseSBub3QgcmlnaHQgLSBzaG91bGQgdmVyaWZ5IHN0cnVjdHVyZWRfbGlrZQor ICAgICAgICAjIG9yIGhhdmUgb3V0cHV0cyBhbmQgYWxsIG91dHB1dHMgaGF2ZSBuYW1lLgorICAg ICAgICBpZiBsZW4oIHNlbGYub3V0cHV0cyApID4gMToKKyAgICAgICAgICAgIG91dHB1dHMgPTNE IHNlbGYub3V0cHV0cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBlaXRoZXIgbXVzdCBo YXZlIHNwZWNpZmllZCBzdHJ1Y3R1cmVkX2xpa2Ugb3Igc29tZXRoaW5nIHdvcnNlCisgICAgICAg ICAgICBpZiBzZWxmLnN0cnVjdHVyZS5zdHJ1Y3R1cmVkX2xpa2U6CisgICAgICAgICAgICAgICAg Y29sbGVjdGlvbl9wcm90b3R5cGUgPTNEIGlucHV0c1sgc2VsZi5zdHJ1Y3R1cmUuc3RydWN0dXJl ZD0KX2xpa2UgXS5jb2xsZWN0aW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg IGNvbGxlY3Rpb25fcHJvdG90eXBlID0zRCB0eXBlX3JlZ2lzdHJ5LnByb3RvdHlwZSggc2VsZi5z dHI9CnVjdHVyZS5jb2xsZWN0aW9uX3R5cGUgKQorICAgICAgICAgICAgIyBUT0RPOiBIYW5kbGUg bmVzdGVkIHN0cnVjdHVyZXMuCisgICAgICAgICAgICBvdXRwdXRzID0zRCBvZGljdCgpCisgICAg ICAgICAgICBmb3IgZWxlbWVudCBpbiBjb2xsZWN0aW9uX3Byb3RvdHlwZS5lbGVtZW50czoKKyAg ICAgICAgICAgICAgICBuYW1lID0zRCBlbGVtZW50LmVsZW1lbnRfaWRlbnRpZmllcgorICAgICAg ICAgICAgICAgIGZvcm1hdCA9M0Qgc2VsZi5kZWZhdWx0X2Zvcm1hdAorICAgICAgICAgICAgICAg IGlmIHNlbGYuaW5oZXJpdF9mb3JtYXQ6CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9M0Qg ZWxlbWVudC5kYXRhc2V0X2luc3RhbmNlLmV4dAorICAgICAgICAgICAgICAgIG91dHB1dCA9M0Qg VG9vbE91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgZm9ybWF0PTNEZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc291cmNlPTNE c2VsZi5mb3JtYXRfc291cmNlLAorICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YV9zb3VyY2U9 M0RzZWxmLm1ldGFkYXRhX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQ9M0RU cnVlLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmluaGVyaXRf bWV0YWRhdGE6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5tZXRhZGF0YV9zb3VyY2UgPTNE IGVsZW1lbnQuZGF0YXNldF9pbnN0YW5jZQorCisgICAgICAgICAgICAgICAgb3V0cHV0c1sgZWxl bWVudC5lbGVtZW50X2lkZW50aWZpZXIgXSA9M0Qgb3V0cHV0CisKKyAgICAgICAgcmV0dXJuIG1h cCggdG9fcGFydCwgb3V0cHV0cy5pdGVtcygpICkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBk eW5hbWljX3N0cnVjdHVyZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RydWN0dXJlLmR5 bmFtaWMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYXRhc2V0X2NvbGxlY3RvcnMoc2VsZik6 CisgICAgICAgIGlmIG5vdCBzZWxmLmR5bmFtaWNfc3RydWN0dXJlOgorICAgICAgICAgICAgcmFp c2UgRXhjZXB0aW9uKCJkYXRhc2V0X2NvbGxlY3RvcnMgY2FsbGVkIGZvciBvdXRwdXQgY29sbGVj dGk9Cm9uIHdpdGggc3RhdGljIHN0cnVjdHVyZSIpCisgICAgICAgIHJldHVybiBzZWxmLnN0cnVj dHVyZS5kYXRhc2V0X2NvbGxlY3RvcnMKKworCitjbGFzcyBUb29sT3V0cHV0Q29sbGVjdGlvblN0 cnVjdHVyZSggb2JqZWN0ICk6CisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsCisg ICAgICAgIGNvbGxlY3Rpb25fdHlwZSwKKyAgICAgICAgc3RydWN0dXJlZF9saWtlLAorICAgICAg ICBkYXRhc2V0X2NvbGxlY3RvcnMsCisgICAgKToKKyAgICAgICAgc2VsZi5jb2xsZWN0aW9uX3R5 cGUgPTNEIGNvbGxlY3Rpb25fdHlwZQorICAgICAgICBzZWxmLnN0cnVjdHVyZWRfbGlrZSA9M0Qg c3RydWN0dXJlZF9saWtlCisgICAgICAgIHNlbGYuZGF0YXNldF9jb2xsZWN0b3JzID0zRCBkYXRh c2V0X2NvbGxlY3RvcnMKKyAgICAgICAgaWYgY29sbGVjdGlvbl90eXBlIGlzIE5vbmUgYW5kIHN0 cnVjdHVyZWRfbGlrZSBpcyBOb25lIGFuZCBkYXRhc2V0PQpfY29sbGVjdG9ycyBpcyBOb25lOgor ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciggIk91dHB1dCBjb2xsZWN0aW9uIHR5cGVzIG11 c3QgYmUgc3BlY2lmeSB0eXA9CmUgb2Ygc3RydWN0dXJlZF9saWtlIiApCisgICAgICAgIGlmIGRh dGFzZXRfY29sbGVjdG9ycyBhbmQgc3RydWN0dXJlZF9saWtlOgorICAgICAgICAgICAgcmFpc2Ug VmFsdWVFcnJvciggIkNhbm5vdCBzcGVjaWZ5IGR5bmFtaWMgc3RydWN0dXJlIChkaXNjb3ZlcmU9 CmRfZGF0YXNldHMpIGFuZCBzdHJ1Y3R1cmVkX2xpa2UgYXR0cmlidXRlLiIgKQorICAgICAgICBz ZWxmLmR5bmFtaWMgPTNEIGRhdGFzZXRfY29sbGVjdG9ycyBpcyBub3QgTm9uZQorCisKK2NsYXNz IFRvb2xPdXRwdXRDb2xsZWN0aW9uUGFydCggb2JqZWN0ICk6CisKKyAgICBkZWYgX19pbml0X18o IHNlbGYsIG91dHB1dF9jb2xsZWN0aW9uX2RlZiwgZWxlbWVudF9pZGVudGlmaWVyLCBvdXRwdXRf PQpkZWYgKToKKyAgICAgICAgc2VsZi5vdXRwdXRfY29sbGVjdGlvbl9kZWYgPTNEIG91dHB1dF9j b2xsZWN0aW9uX2RlZgorICAgICAgICBzZWxmLmVsZW1lbnRfaWRlbnRpZmllciA9M0QgZWxlbWVu dF9pZGVudGlmaWVyCisgICAgICAgIHNlbGYub3V0cHV0X2RlZiA9M0Qgb3V0cHV0X2RlZgorCisg ICAgQHByb3BlcnR5CisgICAgZGVmIGVmZmVjdGl2ZV9vdXRwdXRfbmFtZSggc2VsZiApOgorICAg ICAgICBuYW1lID0zRCBzZWxmLm91dHB1dF9jb2xsZWN0aW9uX2RlZi5uYW1lCisgICAgICAgIHBh cnRfbmFtZSA9M0Qgc2VsZi5lbGVtZW50X2lkZW50aWZpZXIKKyAgICAgICAgZWZmZWN0aXZlX291 dHB1dF9uYW1lID0zRCAiJXN8X19wYXJ0X198JXMiICUgKCBuYW1lLCBwYXJ0X25hbWUgKQorICAg ICAgICByZXR1cm4gZWZmZWN0aXZlX291dHB1dF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisg ICAgZGVmIGlzX25hbWVkX2NvbGxlY3Rpb25fcGFydF9uYW1lKCBuYW1lICk6CisgICAgICAgIHJl dHVybiAifF9fcGFydF9ffCIgaW4gbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBz cGxpdF9vdXRwdXRfbmFtZSggbmFtZSApOgorICAgICAgICBhc3NlcnQgVG9vbE91dHB1dENvbGxl Y3Rpb25QYXJ0LmlzX25hbWVkX2NvbGxlY3Rpb25fcGFydF9uYW1lKCBuYW09CmUgKQorICAgICAg ICByZXR1cm4gbmFtZS5zcGxpdCgifF9fcGFydF9ffCIpCisKKwogY2xhc3MgVG9vbCggb2JqZWN0 LCBEaWN0aWZpYWJsZSApOgogICAgICIiIgogICAgIFJlcHJlc2VudHMgYSBjb21wdXRhdGlvbmFs IHRvb2wgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgdGhyb3VnaCBHYWxheHkuCkBAIC0zNTIsNiArNDk2 LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0KICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlu c3RhbGxlZF9jaGFuZ2VzZXRfcmV2aXNpb24gKQogICAgICAgICByZXR1cm4gTm9uZQo9MjAKKyAg ICBAcHJvcGVydHkKKyAgICBkZWYgcHJvZHVjZXNfY29sbGVjdGlvbnMoIHNlbGYgKToKKyAgICAg ICAgcmV0dXJuIGFueSggby5jb2xsZWN0aW9uIGZvciBvIGluIHNlbGYub3V0cHV0cy52YWx1ZXMo KSApCisKICAgICBkZWYgX19nZXRfam9iX3Rvb2xfY29uZmlndXJhdGlvbihzZWxmLCBqb2JfcGFy YW1zPTNETm9uZSk6CiAgICAgICAgICIiIkdlbmVyYWxpemVkIG1ldGhvZCBmb3IgZ2V0dGluZyB0 aGlzIHRvb2wncyBqb2IgY29uZmlndXJhdGlvbi4KPTIwCkBAIC03MDAsOSArODQ4LDcgQEAKICAg ICAgICAgIiIiCiAgICAgICAgIFBhcnNlIDxvdXRwdXRzPiBlbGVtZW50cyBhbmQgZmlsbCBpbiBz ZWxmLm91dHB1dHMgKGtleWVkIGJ5IG5hbWUpCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLm91 dHB1dHMgPTNEIG9kaWN0KCkKLSAgICAgICAgZm9yIG91dHB1dCBpbiB0b29sX3NvdXJjZS5wYXJz ZV9vdXRwdXRzKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5vdXRwdXRzWyBvdXRwdXQubmFtZSBd ID0zRCBvdXRwdXQKKyAgICAgICAgc2VsZi5vdXRwdXRzLCBzZWxmLm91dHB1dF9jb2xsZWN0aW9u cyA9M0QgdG9vbF9zb3VyY2UucGFyc2Vfb3V0cHV0PQpzKHNlbGYpCj0yMAogICAgICMgVE9ETzog SW5jbHVkZSB0aGUgdG9vbCdzIG5hbWUgaW4gYW55IHBhcnNpbmcgd2FybmluZ3MuCiAgICAgZGVm IHBhcnNlX3N0ZGlvKCBzZWxmLCB0b29sX3NvdXJjZSApOgpAQCAtOTMwLDYgKzEwNzYsMTkgQEAK ICAgICAgICAgd2hpbGUgbGVuKCBzZWxmLl9faGVscF9ieV9wYWdlICkgPCBzZWxmLm5wYWdlczoK ICAgICAgICAgICAgIHNlbGYuX19oZWxwX2J5X3BhZ2UuYXBwZW5kKCBzZWxmLl9faGVscCApCj0y MAorICAgIGRlZiBmaW5kX291dHB1dF9kZWYoIHNlbGYsIG5hbWUgKToKKyAgICAgICAgIyBuYW1l IGlzIEpvYlRvT3V0cHV0RGF0YXNldEFzc29jaWF0aW9uIG5hbWUuCisgICAgICAgICMgVE9ETzog dG8gZGVmZW5zaXZlLCBqdXN0IHRocm93IEluZGV4RXJyb3IgYW5kIGNhdGNoIHNvbWV3aGVyZQor ICAgICAgICAjIHVwIHRoYXQgc3RhY2suCisgICAgICAgIGlmIFRvb2xPdXRwdXRDb2xsZWN0aW9u UGFydC5pc19uYW1lZF9jb2xsZWN0aW9uX3BhcnRfbmFtZSggbmFtZSApOgorICAgICAgICAgICAg Y29sbGVjdGlvbl9uYW1lLCBwYXJ0ID0zRCBUb29sT3V0cHV0Q29sbGVjdGlvblBhcnQuc3BsaXRf b3V0cHU9CnRfbmFtZSggbmFtZSApCisgICAgICAgICAgICBjb2xsZWN0aW9uX2RlZiA9M0Qgc2Vs Zi5vdXRwdXRfY29sbGVjdGlvbnMuZ2V0KCBjb2xsZWN0aW9uX25hbT0KZSwgTm9uZSApCisgICAg ICAgICAgICBpZiBub3QgY29sbGVjdGlvbl9kZWY6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5v bmUKKyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uX2RlZi5vdXRwdXRzLmdldCggcGFydCwg Tm9uZSApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5vdXRwdXRzLmdl dCggbmFtZSwgTm9uZSApCisKICAgICBkZWYgY2hlY2tfd29ya2Zsb3dfY29tcGF0aWJsZSggc2Vs ZiwgdG9vbF9zb3VyY2UgKToKICAgICAgICAgIiIiCiAgICAgICAgIERldGVybWluZSBpZiBhIHRv b2wgY2FuIGJlIHVzZWQgaW4gd29ya2Zsb3dzLiBFeHRlcm5hbCB0b29scyBhbmQgdD0KaGUKQEAg LTk0NCwxMCArMTEwMywxNSBAQAogICAgICAgICBpZiBzZWxmLnRvb2xfdHlwZS5zdGFydHN3aXRo KCAnZGF0YV9zb3VyY2UnICk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKPTIwCisgICAgICAg IGlmIHNlbGYucHJvZHVjZXNfY29sbGVjdGlvbnM6CisgICAgICAgICAgICAjIFNvbWVkYXkgd2Ug d2lsbCBnZXQgdGhlcmUhCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgICAgICBpZiBo YXNhdHRyKCB0b29sX3NvdXJjZSwgInJvb3QiKToKICAgICAgICAgICAgIHJvb3QgPTNEIHRvb2xf c291cmNlLnJvb3QKICAgICAgICAgICAgIGlmIG5vdCBzdHJpbmdfYXNfYm9vbCggcm9vdC5nZXQo ICJ3b3JrZmxvd19jb21wYXRpYmxlIiwgIlRydWUiPQogKSApOgogICAgICAgICAgICAgICAgIHJl dHVybiBGYWxzZQorCiAgICAgICAgICMgVE9ETzogQW55d2F5IHRvIGNhcHR1cmUgdG9vbHMgdGhh dCBkeW5hbWljYWxseSBjaGFuZ2UgdGhlaXIgb3duCiAgICAgICAgICMgICAgICAgb3V0cHV0cz8K ICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTExMDksNiArMTI3Myw3IEBACiAgICAgICAgICAgICAg ICAgICAgICAgICBudW1fam9icz0zRGxlbiggZXhlY3V0aW9uX3RyYWNrZXIuc3VjY2Vzc2Z1bF9q b2JzID0KKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGpvYl9lcnJvcnM9M0RleGVjdXRpb25f dHJhY2tlci5leGVjdXRpb25fZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgam9icz0z RGV4ZWN1dGlvbl90cmFja2VyLnN1Y2Nlc3NmdWxfam9icywKKyAgICAgICAgICAgICAgICAgICAg ICAgIG91dHB1dF9jb2xsZWN0aW9ucz0zRGV4ZWN1dGlvbl90cmFja2VyLm91dHB1dF9jb2xsPQpl Y3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRfY29sbGVjdGlvbnM9M0Rl eGVjdXRpb25fdHJhY2tlci5pbXBsaWNpdF89CmNvbGxlY3Rpb25zLAogICAgICAgICAgICAgICAg ICAgICApCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTExMjIsMTQgKzEyODcsMTQgQEAKICAg ICBkZWYgX19zaG91bGRfcmVmcmVzaF9zdGF0ZSggc2VsZiwgaW5jb21pbmcgKToKICAgICAgICAg cmV0dXJuIG5vdCggJ3J1bnRvb2xfYnRuJyBpbiBpbmNvbWluZyBvciAnVVJMJyBpbiBpbmNvbWlu ZyBvciAnYWphPQp4X3VwbG9hZCcgaW4gaW5jb21pbmcgKQo9MjAKLSAgICBkZWYgaGFuZGxlX3Np bmdsZV9leGVjdXRpb24oIHNlbGYsIHRyYW5zLCByZXJ1bl9yZW1hcF9qb2JfaWQsIHBhcmFtcywg PQpoaXN0b3J5ICk6CisgICAgZGVmIGhhbmRsZV9zaW5nbGVfZXhlY3V0aW9uKCBzZWxmLCB0cmFu cywgcmVydW5fcmVtYXBfam9iX2lkLCBwYXJhbXMsID0KaGlzdG9yeSwgbWFwcGluZ19vdmVyX2Nv bGxlY3Rpb24gKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybiBhIHBhaXIgd2l0aCB3aGV0 aGVyIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsIGFzIHdlbGwgYXMgZWl0aD0KZXIKICAgICAgICAg cmVzdWx0aW5nIG91dHB1dCBkYXRhIG9yIGFuIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUg cHJvYmxlbS4KICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBhcmFtcyA9 M0Qgc2VsZi5fX3JlbW92ZV9tZXRhX3Byb3BlcnRpZXMoIHBhcmFtcyApCi0gICAgICAgICAgICBq b2IsIG91dF9kYXRhID0zRCBzZWxmLmV4ZWN1dGUoIHRyYW5zLCBpbmNvbWluZz0zRHBhcmFtcywg aGlzdD0Kb3J5PTNEaGlzdG9yeSwgcmVydW5fcmVtYXBfam9iX2lkPTNEcmVydW5fcmVtYXBfam9i X2lkICkKKyAgICAgICAgICAgIGpvYiwgb3V0X2RhdGEgPTNEIHNlbGYuZXhlY3V0ZSggdHJhbnMs IGluY29taW5nPTNEcGFyYW1zLCBoaXN0PQpvcnk9M0RoaXN0b3J5LCByZXJ1bl9yZW1hcF9qb2Jf aWQ9M0RyZXJ1bl9yZW1hcF9qb2JfaWQsIG1hcHBpbmdfb3Zlcl9jb2xsZWM9CnRpb249M0RtYXBw aW5nX292ZXJfY29sbGVjdGlvbiApCiAgICAgICAgIGV4Y2VwdCBodHRwZXhjZXB0aW9ucy5IVFRQ Rm91bmQsIGU6CiAgICAgICAgICAgICAjaWYgaXQncyBhIHBhc3RlIHJlZGlyZWN0IGV4Y2VwdGlv biwgcGFzcyBpdCB1cCB0aGUgc3RhY2sKICAgICAgICAgICAgIHJhaXNlIGUKQEAgLTIwNDcsNiAr MjIxMiwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIG91dHB1dF9jb2xsZWN0LmNv bGxlY3RfcHJpbWFyeV9kYXRhc2V0cyggc2VsZiwgb3V0cHV0LCBqb2JfPQp3b3JraW5nX2RpcmVj dG9yeSwgaW5wdXRfZXh0ICkKPTIwCisgICAgZGVmIGNvbGxlY3RfZHluYW1pY19jb2xsZWN0aW9u cyggc2VsZiwgb3V0cHV0LCAqKmt3ZHMgKToKKyAgICAgICAgIiIiIEZpbmQgZmlsZXMgY29ycmVz cG9uZGluZyB0byBkeW5hbWljYWxseSBzdHJ1Y3R1cmVkIGNvbGxlY3Rpb25zLgorICAgICAgICAi IiIKKyAgICAgICAgcmV0dXJuIG91dHB1dF9jb2xsZWN0LmNvbGxlY3RfZHluYW1pY19jb2xsZWN0 aW9ucyggc2VsZiwgb3V0cHV0LCAqPQoqa3dkcyApCisKICAgICBkZWYgdG9fZGljdCggc2VsZiwg dHJhbnMsIGxpbmtfZGV0YWlscz0zREZhbHNlLCBpb19kZXRhaWxzPTNERmFsc2UgKToKICAgICAg ICAgIiIiIFJldHVybnMgZGljdCBvZiB0b29sLiAiIiIKPTIwCkBAIC0yNzU2LDYgKzI5MjYsMTUg QEAKICAgICAgICAgcmV0dXJuIGlucHV0cwo9MjAKPTIwCitjbGFzcyBUZXN0Q29sbGVjdGlvbk91 dHB1dERlZiggb2JqZWN0ICk6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIG5hbWUsIGF0dHJp YiwgZWxlbWVudF90ZXN0cyApOgorICAgICAgICBzZWxmLm5hbWUgPTNEIG5hbWUKKyAgICAgICAg c2VsZi5jb2xsZWN0aW9uX3R5cGUgPTNEIGF0dHJpYi5nZXQoICJ0eXBlIiwgTm9uZSApCisgICAg ICAgIHNlbGYuYXR0cmliID0zRCBhdHRyaWIKKyAgICAgICAgc2VsZi5lbGVtZW50X3Rlc3RzID0z RCBlbGVtZW50X3Rlc3RzCisKKwogZGVmIGpzb25fZml4KCB2YWwgKToKICAgICBpZiBpc2luc3Rh bmNlKCB2YWwsIGxpc3QgKToKICAgICAgICAgcmV0dXJuIFsganNvbl9maXgoIHYgKSBmb3IgdiBp biB2YWwgXQoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5 IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5 L3Rvb2xzL2FjdGlvbnMvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS90b29scy9hY3Rpb25z L19faW5pdF9fLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvYWN0aW9ucy9fX2luaXRfXy5weQpA QCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgIHRvb2wudmlzaXRfaW5wdXRzKCBwYXJhbV92YWx1 ZXMsIHZpc2l0b3IgKQogICAgICAgICByZXR1cm4gaW5wdXRfZGF0YXNldF9jb2xsZWN0aW9ucwo9 MjAKLSAgICBkZWYgZXhlY3V0ZShzZWxmLCB0b29sLCB0cmFucywgaW5jb21pbmc9M0R7fSwgcmV0 dXJuX2pvYj0zREZhbHNlLCBzZXRfPQpvdXRwdXRfaGlkPTNEVHJ1ZSwgc2V0X291dHB1dF9oaXN0 b3J5PTNEVHJ1ZSwgaGlzdG9yeT0zRE5vbmUsIGpvYl9wYXJhbXM9M0Q9Ck5vbmUsIHJlcnVuX3Jl bWFwX2pvYl9pZD0zRE5vbmUpOgorICAgIGRlZiBleGVjdXRlKHNlbGYsIHRvb2wsIHRyYW5zLCBp bmNvbWluZz0zRHt9LCByZXR1cm5fam9iPTNERmFsc2UsIHNldF89Cm91dHB1dF9oaWQ9M0RUcnVl LCBzZXRfb3V0cHV0X2hpc3Rvcnk9M0RUcnVlLCBoaXN0b3J5PTNETm9uZSwgam9iX3BhcmFtcz0z RD0KTm9uZSwgcmVydW5fcmVtYXBfam9iX2lkPTNETm9uZSwgbWFwcGluZ19vdmVyX2NvbGxlY3Rp b249M0RGYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBFeGVjdXRlcyBhIHRvb2wsIGNyZWF0 aW5nIGpvYiBhbmQgdG9vbCBvdXRwdXRzLCBhc3NvY2lhdGluZyB0aGVtLCA9CmFuZAogICAgICAg ICBzdWJtaXR0aW5nIHRoZSBqb2IgdG8gdGhlIGpvYiBxdWV1ZS4gSWYgaGlzdG9yeSBpcyBub3Qg c3BlY2lmaWVkLCA9CnVzZQpAQCAtMTYwLDYgKzE2MCw4IEBACiAgICAgICAgICAgICBoaXN0b3J5 ID0zRCB0b29sLmdldF9kZWZhdWx0X2hpc3RvcnlfYnlfdHJhbnMoIHRyYW5zLCBjcmVhdGU9Cj0z RFRydWUgKQo9MjAKICAgICAgICAgb3V0X2RhdGEgPTNEIG9kaWN0KCkKKyAgICAgICAgb3V0X2Nv bGxlY3Rpb25zID0zRCB7fQorICAgICAgICBvdXRfY29sbGVjdGlvbl9pbnN0YW5jZXMgPTNEIHt9 CiAgICAgICAgICMgVHJhY2sgaW5wdXQgZGF0YXNldCBjb2xsZWN0aW9ucyAtIGJ1dCByZXBsYWNl IHdpdGggc2ltcGx5IGxpc3RzID0Kc28gY29sbGVjdAogICAgICAgICAjIGlucHV0IGRhdGFzZXRz IGNhbiBwcm9jZXNzIHRoZXNlIG5vcm1hbGx5LgogICAgICAgICBpbnBfZGF0YXNldF9jb2xsZWN0 aW9ucyA9M0Qgc2VsZi5jb2xsZWN0X2lucHV0X2RhdGFzZXRfY29sbGVjdGlvbnM9CiggdG9vbCwg aW5jb21pbmcgKQpAQCAtMjQzLDggKzI0NSwxNiBAQAogICAgICAgICAgICAgIyBUaGlzIG1heSBu b3QgYmUgbmVjY2VzYXJ5IHdpdGggdGhlIG5ldyBwYXJlbnQvY2hpbGQgYXNzb2NpYXQ9CmlvbnMK ICAgICAgICAgICAgIGRhdGEuZGVzaWduYXRpb24gPTNEIG5hbWUKICAgICAgICAgICAgICMgQ29w eSBtZXRhZGF0YSBmcm9tIG9uZSBvZiB0aGUgaW5wdXRzIGlmIHJlcXVlc3RlZC4KLSAgICAgICAg ICAgIGlmIG91dHB1dC5tZXRhZGF0YV9zb3VyY2U6Ci0gICAgICAgICAgICAgICAgZGF0YS5pbml0 X21ldGEoIGNvcHlfZnJvbT0zRGlucF9kYXRhW291dHB1dC5tZXRhZGF0YV9zb3VyYz0KZV0gKQor CisgICAgICAgICAgICAjIG1ldGFkYXRhIHNvdXJjZSBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHJl ZmVyZW5jaW5nIGFuIGlucHV0CisgICAgICAgICAgICAjIG9yIGFuIGFjdHVhbCBvYmplY3QgdG8g Y29weS4KKyAgICAgICAgICAgIG1ldGFkYXRhX3NvdXJjZSA9M0Qgb3V0cHV0Lm1ldGFkYXRhX3Nv dXJjZQorICAgICAgICAgICAgaWYgbWV0YWRhdGFfc291cmNlOgorICAgICAgICAgICAgICAgIGlm IGlzaW5zdGFuY2UoIG1ldGFkYXRhX3NvdXJjZSwgYmFzZXN0cmluZyApOgorICAgICAgICAgICAg ICAgICAgICBtZXRhZGF0YV9zb3VyY2UgPTNEIGlucF9kYXRhW21ldGFkYXRhX3NvdXJjZV0KKwor ICAgICAgICAgICAgaWYgbWV0YWRhdGFfc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg ICAgIGRhdGEuaW5pdF9tZXRhKCBjb3B5X2Zyb209M0RtZXRhZGF0YV9zb3VyY2UgKQogICAgICAg ICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkYXRhLmluaXRfbWV0YSgpCiAgICAgICAgICAg ICAjIFRha2UgZGJrZXkgZnJvbSBMQVNUIGlucHV0CkBAIC0yNjQsMTAgKzI3NCw1OSBAQAogICAg ICAgICAgICAgICAgIG91dHB1dC5hY3Rpb25zLmFwcGx5X2FjdGlvbiggZGF0YSwgb3V0cHV0X2Fj dGlvbl9wYXJhbXMgKQogICAgICAgICAgICAgIyBTdG9yZSBhbGwgY2hhbmdlcyB0byBkYXRhYmFz ZQogICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgICAgICByZXR1 cm4gZGF0YQo9MjAKICAgICAgICAgZm9yIG5hbWUsIG91dHB1dCBpbiB0b29sLm91dHB1dHMuaXRl bXMoKToKICAgICAgICAgICAgIGlmIG5vdCBmaWx0ZXJfb3V0cHV0KG91dHB1dCwgaW5jb21pbmcp OgotICAgICAgICAgICAgICAgIGhhbmRsZV9vdXRwdXQoIG5hbWUsIG91dHB1dCApCisgICAgICAg ICAgICAgICAgaWYgb3V0cHV0LmNvbGxlY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGNvbGxl Y3Rpb25zX21hbmFnZXIgPTNEIHRyYW5zLmFwcC5kYXRhc2V0X2NvbGxlY3Rpb25zXz0Kc2Vydmlj ZQorCisgICAgICAgICAgICAgICAgICAgICMgQXMgZmFyIGFzIEkgY2FuIHRlbGwgLSB0aGlzIGlz IGFsd2F5cyB0cnVlIC0gYnV0IGp1cz0KdCB2ZXJpZnkKKyAgICAgICAgICAgICAgICAgICAgYXNz ZXJ0IHNldF9vdXRwdXRfaGlzdG9yeSwgIkNhbm5vdCBjcmVhdGUgZGF0YXNldCBjb2xsPQplY3Rp b24gZm9yIHRoaXMga2luZCBvZiB0b29sLiIKKworICAgICAgICAgICAgICAgICAgICBlbGVtZW50 cyA9M0Qgb2RpY3QoKQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9jb2xsZWN0aW9ucyA9M0Qg ZGljdCggWyAoaywgdlswXSkgZm9yIGssIHYgaW4gaW49CnBfZGF0YXNldF9jb2xsZWN0aW9ucy5p dGVyaXRlbXMoKSBdICkKKyAgICAgICAgICAgICAgICAgICAga25vd25fb3V0cHV0cyA9M0Qgb3V0 cHV0Lmtub3duX291dHB1dHMoIGlucHV0X2NvbGxlY3RpPQpvbnMsIGNvbGxlY3Rpb25zX21hbmFn ZXIudHlwZV9yZWdpc3RyeSApCisgICAgICAgICAgICAgICAgICAgICMgSnVzdCB0byBlY2hvIFRP RE8gZWxzZXdoZXJlIC0gdGhpcyBzaG91bGQgYmUgcmVzdHJ1Yz0KdHVyZWQgdG8gYWxsb3cKKyAg ICAgICAgICAgICAgICAgICAgIyBuZXN0ZWQgY29sbGVjdGlvbnMuCisgICAgICAgICAgICAgICAg ICAgIGZvciBvdXRwdXRfcGFydF9kZWYgaW4ga25vd25fb3V0cHV0czoKKyAgICAgICAgICAgICAg ICAgICAgICAgIGVmZmVjdGl2ZV9vdXRwdXRfbmFtZSA9M0Qgb3V0cHV0X3BhcnRfZGVmLmVmZmVj dGl2PQplX291dHB1dF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0zRCBo YW5kbGVfb3V0cHV0KCBlZmZlY3RpdmVfb3V0cHV0X25hbWUsID0Kb3V0cHV0X3BhcnRfZGVmLm91 dHB1dF9kZWYgKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBGb2xsb3dpbmcgaGFjayBjYXVz ZXMgZGF0YXNldCB0byBubyBiZSBhZGRlZCB0byA9Cmhpc3RvcnkuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgIGNoaWxkX2RhdGFzZXRfbmFtZXMuYWRkKCBlZmZlY3RpdmVfb3V0cHV0X25hbWUg KQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXRfb3V0cHV0X2hpc3Rvcnk6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5hZGRfZGF0YXNldCggZWxlbWVudCwgc2V0 X2hpZD0zRHNldF9vdT0KdHB1dF9oaWQgKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMu c2Ffc2Vzc2lvbi5hZGQoIGVsZW1lbnQgKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMu c2Ffc2Vzc2lvbi5mbHVzaCgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzWyBv dXRwdXRfcGFydF9kZWYuZWxlbWVudF9pZGVudGlmaWVyIF0gPTNEPQogZWxlbWVudAorCisgICAg ICAgICAgICAgICAgICAgIGlmIG91dHB1dC5keW5hbWljX3N0cnVjdHVyZToKKyAgICAgICAgICAg ICAgICAgICAgICAgIGFzc2VydCBub3QgZWxlbWVudHMgICMga25vd25fb3V0cHV0cyBtdXN0IGhh dmUgYmVlPQpuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyA9M0QgY29s bGVjdGlvbnNfbWFuYWdlci5FTEVNRU5UU19VTklOSVRJQT0KTElaRUQKKworICAgICAgICAgICAg ICAgICAgICBpZiBtYXBwaW5nX292ZXJfY29sbGVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRjID0zRCBjb2xsZWN0aW9uc19tYW5hZ2VyLmNyZWF0ZV9kYXRhc2V0X2NvbGxlY3RpPQpv bigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb2xsZWN0aW9uX3R5cGU9M0RvdXRwdXQuc3RydWN0dXJlLmNvbGxlY3Rpb25f PQp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzPTNEZWxlbWVudHMs CisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRf Y29sbGVjdGlvbnNbIG5hbWUgXSA9M0QgZGMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICAgICAgICAgIGhkY2FfbmFtZSA9M0Qgc2VsZi5nZXRfb3V0cHV0X25hbWUo IG91dHB1dCwgTm9uZSwgPQp0b29sLCBvbl90ZXh0LCB0cmFucywgaW5jb21pbmcsIGhpc3Rvcnks IHdyYXBwZWRfcGFyYW1zLnBhcmFtcywgam9iX3BhcmFtcyApCisgICAgICAgICAgICAgICAgICAg ICAgICBoZGNhID0zRCBjb2xsZWN0aW9uc19tYW5hZ2VyLmNyZWF0ZSgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0cmFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9M0RoZGNhX25hbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl90eXBlPTNEb3V0cHV0LnN0cnVjdHVyZS5j b2xsZWN0aW9uXz0KdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cz0z RGVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAg ICAgICAgIyBuYW1lIGhlcmUgaXMgbmFtZSBvZiB0aGUgb3V0cHV0IGVsZW1lbnQgLSBub3QgbmE9 Cm1lCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIHRoZSBoZGNhLgorICAgICAgICAgICAg ICAgICAgICAgICAgb3V0X2NvbGxlY3Rpb25faW5zdGFuY2VzWyBuYW1lIF0gPTNEIGhkY2EKKyAg ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVfb3V0cHV0KCBu YW1lLCBvdXRwdXQgKQogICAgICAgICAjIEFkZCBhbGwgdGhlIHRvcC1sZXZlbCAobm9uLWNoaWxk KSBkYXRhc2V0cyB0byB0aGUgaGlzdG9yeSB1bmxlc3M9CiBvdGhlcndpc2Ugc3BlY2lmaWVkCiAg ICAgICAgIGZvciBuYW1lIGluIG91dF9kYXRhLmtleXMoKToKICAgICAgICAgICAgIGlmIG5hbWUg bm90IGluIGNoaWxkX2RhdGFzZXRfbmFtZXMgYW5kIG5hbWUgbm90IGluIGluY29taW5nOiAgPQoj IGRvbid0IGFkZCBjaGlsZHJlbjsgb3IgYWxyZWFkeSBleGlzdGluZyBkYXRhc2V0cywgaS5lLiBh c3luYyBjcmVhdGVkCkBAIC0zMjIsNiArMzgxLDEwIEBACiAgICAgICAgICAgICAgICAgam9iLmFk ZF9pbnB1dF9kYXRhc2V0KCBuYW1lLCBOb25lICkKICAgICAgICAgZm9yIG5hbWUsIGRhdGFzZXQg aW4gb3V0X2RhdGEuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICBqb2IuYWRkX291dHB1dF9kYXRh c2V0KCBuYW1lLCBkYXRhc2V0ICkKKyAgICAgICAgZm9yIG5hbWUsIGRhdGFzZXRfY29sbGVjdGlv biBpbiBvdXRfY29sbGVjdGlvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBqb2IuYWRkX2lt cGxpY2l0X291dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb24oIG5hbWUsIGRhdGFzZXRfY29sbD0KZWN0 aW9uICkKKyAgICAgICAgZm9yIG5hbWUsIGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSBpbiBv dXRfY29sbGVjdGlvbl9pbnN0YW5jZXMuPQppdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGpvYi5h ZGRfb3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbiggbmFtZSwgZGF0YXNldF9jb2xsZWN0aW9uX2lu PQpzdGFuY2UgKQogICAgICAgICBqb2Iub2JqZWN0X3N0b3JlX2lkID0zRCBvYmplY3Rfc3RvcmVf cG9wdWxhdG9yLm9iamVjdF9zdG9yZV9pZAogICAgICAgICBpZiBqb2JfcGFyYW1zOgogICAgICAg ICAgICAgam9iLnBhcmFtcyA9M0QgZHVtcHMoIGpvYl9wYXJhbXMgKQoKZGlmZiAtciAyYTY2MzUx MDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2Mx NjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L3Rvb2xzL2V2YWx1YXRpb24ucHkKLS0t IGEvbGliL2dhbGF4eS90b29scy9ldmFsdWF0aW9uLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMv ZXZhbHVhdGlvbi5weQpAQCAtNTksNiArNTksOSBAQAogICAgICAgICBpbnBfZGF0YS51cGRhdGUo IFsgKCBkYS5uYW1lLCBkYS5kYXRhc2V0ICkgZm9yIGRhIGluIGpvYi5pbnB1dF9saWI9CnJhcnlf ZGF0YXNldHMgXSApCiAgICAgICAgIG91dF9kYXRhLnVwZGF0ZSggWyAoIGRhLm5hbWUsIGRhLmRh dGFzZXQgKSBmb3IgZGEgaW4gam9iLm91dHB1dF9saT0KYnJhcnlfZGF0YXNldHMgXSApCj0yMAor ICAgICAgICBvdXRfY29sbGVjdGlvbnMgPTNEIGRpY3QoIFsgKCBvYmoubmFtZSwgb2JqLmRhdGFz ZXRfY29sbGVjdGlvbl9pbnM9CnRhbmNlICkgZm9yIG9iaiBpbiBqb2Iub3V0cHV0X2RhdGFzZXRf Y29sbGVjdGlvbl9pbnN0YW5jZXMgXSApCisgICAgICAgIG91dF9jb2xsZWN0aW9ucy51cGRhdGUo IFsgKCBvYmoubmFtZSwgb2JqLmRhdGFzZXRfY29sbGVjdGlvbiApIGZvcj0KIG9iaiBpbiBqb2Iu b3V0cHV0X2RhdGFzZXRfY29sbGVjdGlvbnMgXSApCisKICAgICAgICAgaWYgZ2V0X3NwZWNpYWw6 Cj0yMAogICAgICAgICAgICAgIyBTZXQgdXAgb3V0cHV0IGRhdGFzZXQgYXNzb2NpYXRpb24gZm9y IGV4cG9ydCBoaXN0b3J5IGpvYnMuIEI9CmVjYXVzZSBqb2IKQEAgLTg0LDYgKzg3LDcgQEAKICAg ICAgICAgICAgIGluY29taW5nLAogICAgICAgICAgICAgaW5wX2RhdGEsCiAgICAgICAgICAgICBv dXRfZGF0YSwKKyAgICAgICAgICAgIG91dHB1dF9jb2xsZWN0aW9ucz0zRG91dF9jb2xsZWN0aW9u cywKICAgICAgICAgICAgIG91dHB1dF9wYXRocz0zRGNvbXB1dGVfZW52aXJvbm1lbnQub3V0cHV0 X3BhdGhzKCksCiAgICAgICAgICAgICBqb2Jfd29ya2luZ19kaXJlY3Rvcnk9M0Rjb21wdXRlX2Vu dmlyb25tZW50LndvcmtpbmdfZGlyZWN0b3J5KD0KKSwKICAgICAgICAgICAgIGlucHV0X3BhdGhz PTNEY29tcHV0ZV9lbnZpcm9ubWVudC5pbnB1dF9wYXRocygpCkBAIC05OCw3ICsxMDIsNyBAQAo9 MjAKICAgICAgICAgc2VsZi5wYXJhbV9kaWN0ID0zRCBwYXJhbV9kaWN0Cj0yMAotICAgIGRlZiBi dWlsZF9wYXJhbV9kaWN0KCBzZWxmLCBpbmNvbWluZywgaW5wdXRfZGF0YXNldHMsIG91dHB1dF9k YXRhc2V0cyw9CiBvdXRwdXRfcGF0aHMsIGpvYl93b3JraW5nX2RpcmVjdG9yeSwgaW5wdXRfcGF0 aHM9M0RbXSApOgorICAgIGRlZiBidWlsZF9wYXJhbV9kaWN0KCBzZWxmLCBpbmNvbWluZywgaW5w dXRfZGF0YXNldHMsIG91dHB1dF9kYXRhc2V0cyw9CiBvdXRwdXRfY29sbGVjdGlvbnMsIG91dHB1 dF9wYXRocywgam9iX3dvcmtpbmdfZGlyZWN0b3J5LCBpbnB1dF9wYXRocz0zRFtdID0KKToKICAg ICAgICAgIiIiCiAgICAgICAgIEJ1aWxkIHRoZSBkaWN0aW9uYXJ5IG9mIHBhcmFtZXRlcnMgZm9y IHN1YnN0aXR1dGluZyBpbnRvIHRoZSBjb21tYT0KbmQKICAgICAgICAgbGluZS4gRWFjaCB2YWx1 ZSBpcyB3cmFwcGVkIGluIGEgYElucHV0VmFsdWVXcmFwcGVyYCwgd2hpY2ggYWxsb3dzCkBAIC0x MTUsNiArMTE5LDcgQEAKICAgICAgICAgc2VsZi5fX3BvcHVsYXRlX3dyYXBwZXJzKHBhcmFtX2Rp Y3QsIGlucHV0X2RhdGFzZXRfcGF0aHMpCiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV9pbnB1dF9k YXRhc2V0X3dyYXBwZXJzKHBhcmFtX2RpY3QsIGlucHV0X2RhdGFzZXRzLD0KIGlucHV0X2RhdGFz ZXRfcGF0aHMpCiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV9vdXRwdXRfZGF0YXNldF93cmFwcGVy cyhwYXJhbV9kaWN0LCBvdXRwdXRfZGF0YXNldD0Kcywgb3V0cHV0X3BhdGhzLCBqb2Jfd29ya2lu Z19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX19wb3B1bGF0ZV9vdXRwdXRfY29sbGVjdGlvbl93 cmFwcGVycyhwYXJhbV9kaWN0LCBvdXRwdXRfY29sbD0KZWN0aW9ucywgb3V0cHV0X3BhdGhzLCBq b2Jfd29ya2luZ19kaXJlY3RvcnkpCiAgICAgICAgIHNlbGYuX19wb3B1bGF0ZV91bnN0cnVjdHVy ZWRfcGF0aF9yZXdyaXRlcyhwYXJhbV9kaWN0KQogICAgICAgICAjIENhbGwgcGFyYW0gZGljdCBz YW5pdGl6ZXIsIGJlZm9yZSBub24tam9iIHBhcmFtcyBhcmUgYWRkZWQsIGFzIHc9CmUgZG9uJ3Qg d2FudCB0byBzYW5pdGl6ZSBmaWxlbmFtZXMuCiAgICAgICAgIHNlbGYuX19zYW5pdGl6ZV9wYXJh bV9kaWN0KCBwYXJhbV9kaWN0ICkKQEAgLTI2OSw2ICsyNzQsMzUgQEAKICAgICAgICAgICAgICAg ICBmb3IgY2hpbGQgaW4gZGF0YS5jaGlsZHJlbjoKICAgICAgICAgICAgICAgICAgICAgcGFyYW1f ZGljdFsgIl9DSElMRF9fXyVzX19fJXMiICUgKCBuYW1lLCBjaGlsZC5kZXNpZ25hPQp0aW9uICkg XSA9M0QgRGF0YXNldEZpbGVuYW1lV3JhcHBlciggY2hpbGQgKQo9MjAKKyAgICBkZWYgX19wb3B1 bGF0ZV9vdXRwdXRfY29sbGVjdGlvbl93cmFwcGVycyhzZWxmLCBwYXJhbV9kaWN0LCBvdXRwdXRf Y29sPQpsZWN0aW9ucywgb3V0cHV0X3BhdGhzLCBqb2Jfd29ya2luZ19kaXJlY3RvcnkpOgorICAg ICAgICBvdXRwdXRfZGF0YXNldF9wYXRocyA9M0QgZGF0YXNldF9wYXRoX3Jld3JpdGVzKCBvdXRw dXRfcGF0aHMgKQorICAgICAgICB0b29sID0zRCBzZWxmLnRvb2wKKyAgICAgICAgZm9yIG5hbWUs IG91dF9jb2xsZWN0aW9uIGluIG91dHB1dF9jb2xsZWN0aW9ucy5pdGVtcygpOgorICAgICAgICAg ICAgaWYgbmFtZSBub3QgaW4gdG9vbC5vdXRwdXRfY29sbGVjdGlvbnM6CisgICAgICAgICAgICAg ICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjbWVzc2FnZV90ZW1wbGF0ZSA9M0QgIk5hbWUg WyVzXSBub3QgZm91bmQgaW4gdG9vbC5vdXRwdXRfPQpjb2xsZWN0aW9ucyAlcyIKKyAgICAgICAg ICAgICAgICAjbWVzc2FnZSA9M0QgbWVzc2FnZV90ZW1wbGF0ZSAlICggbmFtZSwgdG9vbC5vdXRw dXRfY29sbGVjPQp0aW9ucyApCisgICAgICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9y KCBtZXNzYWdlICkKKworICAgICAgICAgICAgd3JhcHBlcl9rd2RzID0zRCBkaWN0KAorICAgICAg ICAgICAgICAgIGRhdGF0eXBlc19yZWdpc3RyeT0zRHNlbGYuYXBwLmRhdGF0eXBlc19yZWdpc3Ry eSwKKyAgICAgICAgICAgICAgICBkYXRhc2V0X3BhdGhzPTNEb3V0cHV0X2RhdGFzZXRfcGF0aHMs CisgICAgICAgICAgICAgICAgdG9vbD0zRHRvb2wsCisgICAgICAgICAgICAgICAgbmFtZT0zRG5h bWUKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHdyYXBwZXIgPTNEIERhdGFzZXRDb2xsZWN0 aW9uV3JhcHBlcigKKyAgICAgICAgICAgICAgICBvdXRfY29sbGVjdGlvbiwKKyAgICAgICAgICAg ICAgICAqKndyYXBwZXJfa3dkcworICAgICAgICAgICAgKQorICAgICAgICAgICAgcGFyYW1fZGlj dFsgbmFtZSBdID0zRCB3cmFwcGVyCisgICAgICAgICAgICAjIFRPRE86IEhhbmRsZSBuZXN0ZWQg Y29sbGVjdGlvbnMuLi4KKyAgICAgICAgICAgIG91dHB1dF9kZWYgPTNEIHRvb2wub3V0cHV0X2Nv bGxlY3Rpb25zWyBuYW1lIF0KKyAgICAgICAgICAgIGZvciBlbGVtZW50X2lkZW50aWZpZXIsIG91 dHB1dF9kZWYgaW4gb3V0cHV0X2RlZi5vdXRwdXRzLml0ZW1zPQooKToKKyAgICAgICAgICAgICAg ICBpZiBub3Qgb3V0cHV0X2RlZi5pbXBsaWNpdDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YXNl dF93cmFwcGVyID0zRCB3cmFwcGVyWyBlbGVtZW50X2lkZW50aWZpZXIgXQorICAgICAgICAgICAg ICAgICAgICBwYXJhbV9kaWN0WyBvdXRwdXRfZGVmLm5hbWUgXSA9M0QgZGF0YXNldF93cmFwcGVy CisgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJVcGRhdGluZyBwYXJhbV9kaWN0IGZvciAl cyB3aXRoICVzIiAlIChvdXRwdT0KdF9kZWYubmFtZSwgZGF0YXNldF93cmFwcGVyKSApCisKICAg ICBkZWYgX19wb3B1bGF0ZV9vdXRwdXRfZGF0YXNldF93cmFwcGVycyhzZWxmLCBwYXJhbV9kaWN0 LCBvdXRwdXRfZGF0YXNlPQp0cywgb3V0cHV0X3BhdGhzLCBqb2Jfd29ya2luZ19kaXJlY3Rvcnkp OgogICAgICAgICBvdXRwdXRfZGF0YXNldF9wYXRocyA9M0QgZGF0YXNldF9wYXRoX3Jld3JpdGVz KCBvdXRwdXRfcGF0aHMgKQogICAgICAgICBmb3IgbmFtZSwgaGRhIGluIG91dHB1dF9kYXRhc2V0 cy5pdGVtcygpOgoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBi ODg5IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2Fs YXh5L3Rvb2xzL2V4ZWN1dGUucHkKLS0tIGEvbGliL2dhbGF4eS90b29scy9leGVjdXRlLnB5Cisr KyBiL2xpYi9nYWxheHkvdG9vbHMvZXhlY3V0ZS5weQpAQCAtNCw2ICs0LDcgQEAKIGNvbGxlY3Rp b25zIGZyb20gbWF0Y2hlZCBjb2xsZWN0aW9ucy4KICIiIgogaW1wb3J0IGNvbGxlY3Rpb25zCitp bXBvcnQgZ2FsYXh5LnRvb2xzCiBmcm9tIGdhbGF4eS50b29scy5hY3Rpb25zIGltcG9ydCBvbl90 ZXh0X2Zvcl9uYW1lcwo9MjAKIGltcG9ydCBsb2dnaW5nCkBAIC0yMyw3ICsyNCw3IEBACiAgICAg ICAgICAgICAjIE9ubHkgd29ya2Zsb3cgaW52b2NhdGlvbiBjb2RlIGdldHMgdG8gc2V0IHRoaXMs IGlnbm9yZSB1c2VyID0Kc3VwcGxpZWQKICAgICAgICAgICAgICMgdmFsdWVzIG9yIHJlcnVuIHBh cmFtZXRlcnMuCiAgICAgICAgICAgICBkZWwgcGFyYW1zWyAnX193b3JrZmxvd19pbnZvY2F0aW9u X3V1aWRfXycgXQotICAgICAgICBqb2IsIHJlc3VsdCA9M0QgdG9vbC5oYW5kbGVfc2luZ2xlX2V4 ZWN1dGlvbiggdHJhbnMsIHJlcnVuX3JlbWFwX2o9Cm9iX2lkLCBwYXJhbXMsIGhpc3RvcnkgKQor ICAgICAgICBqb2IsIHJlc3VsdCA9M0QgdG9vbC5oYW5kbGVfc2luZ2xlX2V4ZWN1dGlvbiggdHJh bnMsIHJlcnVuX3JlbWFwX2o9Cm9iX2lkLCBwYXJhbXMsIGhpc3RvcnksIGNvbGxlY3Rpb25faW5m byApCiAgICAgICAgIGlmIGpvYjoKICAgICAgICAgICAgIGV4ZWN1dGlvbl90cmFja2VyLnJlY29y ZF9zdWNjZXNzKCBqb2IsIHJlc3VsdCApCiAgICAgICAgIGVsc2U6CkBAIC00Niw2ICs0Nyw3IEBA CiAgICAgICAgIHNlbGYuZmFpbGVkX2pvYnMgPTNEIDAKICAgICAgICAgc2VsZi5leGVjdXRpb25f ZXJyb3JzID0zRCBbXQogICAgICAgICBzZWxmLm91dHB1dF9kYXRhc2V0cyA9M0QgW10KKyAgICAg ICAgc2VsZi5vdXRwdXRfY29sbGVjdGlvbnMgPTNEIFtdCiAgICAgICAgIHNlbGYub3V0cHV0c19i eV9vdXRwdXRfbmFtZSA9M0QgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgICAgICAg c2VsZi5pbXBsaWNpdF9jb2xsZWN0aW9ucyA9M0Qge30KPTIwCkBAIC01Myw3ICs1NSwxNSBAQAog ICAgICAgICBzZWxmLnN1Y2Nlc3NmdWxfam9icy5hcHBlbmQoIGpvYiApCiAgICAgICAgIHNlbGYu b3V0cHV0X2RhdGFzZXRzLmV4dGVuZCggb3V0cHV0cyApCiAgICAgICAgIGZvciBvdXRwdXRfbmFt ZSwgb3V0cHV0X2RhdGFzZXQgaW4gb3V0cHV0czoKKyAgICAgICAgICAgIGlmIGdhbGF4eS50b29s cy5Ub29sT3V0cHV0Q29sbGVjdGlvblBhcnQuaXNfbmFtZWRfY29sbGVjdGlvbl9wPQphcnRfbmFt ZSggb3V0cHV0X25hbWUgKToKKyAgICAgICAgICAgICAgICAjIFNraXAga25vd24gY29sbGVjdGlv biBvdXRwdXRzLCB0aGVzZSB3aWxsIGJlIGNvdmVyZWQgYnkKKyAgICAgICAgICAgICAgICAjIG91 dHB1dCBjb2xsZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAg c2VsZi5vdXRwdXRzX2J5X291dHB1dF9uYW1lWyBvdXRwdXRfbmFtZSBdLmFwcGVuZCggb3V0cHV0 X2RhdGE9CnNldCApCisgICAgICAgIGZvciBqb2Jfb3V0cHV0IGluIGpvYi5vdXRwdXRfZGF0YXNl dF9jb2xsZWN0aW9uczoKKyAgICAgICAgICAgIHNlbGYub3V0cHV0c19ieV9vdXRwdXRfbmFtZVsg am9iX291dHB1dC5uYW1lIF0uYXBwZW5kKCBqb2Jfb3V0PQpwdXQuZGF0YXNldF9jb2xsZWN0aW9u ICkKKyAgICAgICAgZm9yIGpvYl9vdXRwdXQgaW4gam9iLm91dHB1dF9kYXRhc2V0X2NvbGxlY3Rp b25faW5zdGFuY2VzOgorICAgICAgICAgICAgc2VsZi5vdXRwdXRfY29sbGVjdGlvbnMuYXBwZW5k KCAoIGpvYl9vdXRwdXQubmFtZSwgam9iX291dHB1dC49CmRhdGFzZXRfY29sbGVjdGlvbl9pbnN0 YW5jZSApICkKPTIwCiAgICAgZGVmIHJlY29yZF9lcnJvciggc2VsZiwgZXJyb3IgKToKICAgICAg ICAgc2VsZi5mYWlsZWRfam9icyArPTNEIDEKQEAgLTEyMCw2ICsxMzAsMTEgQEAKICAgICAgICAg ICAgICAgICBjb2xsZWN0aW9uX3R5cGU9M0Rjb2xsZWN0aW9uX3R5cGUsCiAgICAgICAgICAgICAg ICAgaW1wbGljaXRfY29sbGVjdGlvbl9pbmZvPTNEaW1wbGljaXRfY29sbGVjdGlvbl9pbmZvLAog ICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIGpvYiBpbiBzZWxmLnN1Y2Nlc3NmdWxfam9i czoKKyAgICAgICAgICAgICAgICAjIFRPRE86IFRoaW5rIHRocm91Z2ggdGhpcywgbWF5IG9ubHkg d2FudCB0aGlzIGZvciBvdXRwdXQKKyAgICAgICAgICAgICAgICAjIGNvbGxlY3Rpb25zIC0gb3Ig d2UgbWF5IGJlIGFscmVhZHkgcmVjb3JkaW5nIGRhdGEgaW4gc29tZQorICAgICAgICAgICAgICAg ICMgb3RoZXIgd2F5LgorICAgICAgICAgICAgICAgIGpvYi5hZGRfb3V0cHV0X2RhdGFzZXRfY29s bGVjdGlvbiggb3V0cHV0X25hbWUsIGNvbGxlY3Rpb249CiApCiAgICAgICAgICAgICBjb2xsZWN0 aW9uc1sgb3V0cHV0X25hbWUgXSA9M0QgY29sbGVjdGlvbgo9MjAKICAgICAgICAgc2VsZi5pbXBs aWNpdF9jb2xsZWN0aW9ucyA9M0QgY29sbGVjdGlvbnMKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgy NjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkw NzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS90b29scy9wYXJhbWV0ZXJzL2Jhc2ljLnB5Ci0tLSBh L2xpYi9nYWxheHkvdG9vbHMvcGFyYW1ldGVycy9iYXNpYy5weQorKysgYi9saWIvZ2FsYXh5L3Rv b2xzL3BhcmFtZXRlcnMvYmFzaWMucHkKQEAgLTIwODgsNyArMjA4OCw2IEBACiAgICAgICAgIGZv ciBpbnN0YW5jZSBzaG91bGQgSSBqdXN0IGJlIGNoZWNraW5nIGR5bmFtaWMgb3B0aW9ucykuCiAg ICAgICAgICIiIgogICAgICAgICBhbGxvdyA9M0QgVHJ1ZQotICAgICAgICAjIFRPRE86IGFsbG93 IHNob3VsZCBiZSBmYWxzZSBpbiBzb21lIGluIGNhc2VzLi4uCiAgICAgICAgIHJldHVybiBhbGxv dwo9MjAKICAgICBkZWYgX29wdGlvbnNfZmlsdGVyX2F0dHJpYnV0ZSggc2VsZiwgdmFsdWUgKToK CmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2 ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS90b29scy9w YXJhbWV0ZXJzL2RhdGFzZXRfbWF0Y2hlci5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3BhcmFt ZXRlcnMvZGF0YXNldF9tYXRjaGVyLnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvcGFyYW1ldGVy cy9kYXRhc2V0X21hdGNoZXIucHkKQEAgLTE2Miw2ICsxNjIsMTEgQEAKICAgICAgICAgICAgIHJl dHVybiBzZWxmLmRhdGFzZXRfY29sbGVjdGlvbl9tYXRjaCggZGF0YXNldF9jb2xsZWN0aW9uICkK PTIwCiAgICAgZGVmIGRhdGFzZXRfY29sbGVjdGlvbl9tYXRjaCggc2VsZiwgZGF0YXNldF9jb2xs ZWN0aW9uICk6CisgICAgICAgICMgSWYgZGF0YXNldCBjb2xsZWN0aW9uIG5vdCB5ZXQgcG9wdWxh dGVkLCBjYW5ub3QgZGV0ZXJtaW5lIGlmIGl0CisgICAgICAgICMgd291bGQgYmUgYSB2YWxpZCBt YXRjaCBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgIGlmIG5vdCBkYXRhc2V0X2NvbGxlY3Rp b24ucG9wdWxhdGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAgdmFsaWQg PTNEIFRydWUKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZGF0YXNldF9jb2xsZWN0aW9uLmVsZW1l bnRzOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX192YWxpZF9lbGVtZW50KCBlbGVtZW50ICk6 CgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIgZDgz Njg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5MDcxYmQzM2ExYjQ0N2Y0IGxpYi9nYWxheHkvdG9vbHMv cGFyYW1ldGVycy9vdXRwdXRfY29sbGVjdC5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3BhcmFt ZXRlcnMvb3V0cHV0X2NvbGxlY3QucHkKKysrIGIvbGliL2dhbGF4eS90b29scy9wYXJhbWV0ZXJz L291dHB1dF9jb2xsZWN0LnB5CkBAIC0xMiw2ICsxMiwxNzggQEAKIERBVEFTRVRfSURfVE9LRU4g PTNEICJEQVRBU0VUX0lEIgogREVGQVVMVF9FWFRSQV9GSUxFTkFNRV9QQVRURVJOID0zRCByInBy aW1hcnlfREFUQVNFVF9JRF8oP1A8ZGVzaWduYXRpb24+W149Cl9dKylfKD9QPHZpc2libGU+W15f XSspXyg/UDxleHQ+W15fXSspKF8oP1A8ZGJrZXk+W15fXSspKT8iCj0yMAoraW1wb3J0IGxvZ2dp bmcKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKKworCitkZWYgY29sbGVj dF9keW5hbWljX2NvbGxlY3Rpb25zKAorICAgIHRvb2wsCisgICAgb3V0cHV0X2NvbGxlY3Rpb25z LAorICAgIGpvYl93b3JraW5nX2RpcmVjdG9yeSwKKyAgICBpbnBfZGF0YT0zRHt9LAorICAgIGpv Yj0zRE5vbmUsCispOgorICAgIGNvbGxlY3Rpb25zX3NlcnZpY2UgPTNEIHRvb2wuYXBwLmRhdGFz ZXRfY29sbGVjdGlvbnNfc2VydmljZQorICAgIGpvYl9jb250ZXh0ID0zRCBKb2JDb250ZXh0KAor ICAgICAgICB0b29sLAorICAgICAgICBqb2IsCisgICAgICAgIGpvYl93b3JraW5nX2RpcmVjdG9y eSwKKyAgICAgICAgaW5wX2RhdGEsCisgICAgKQorCisgICAgZm9yIG5hbWUsIGhhc19jb2xsZWN0 aW9uIGluIG91dHB1dF9jb2xsZWN0aW9ucy5pdGVtcygpOgorICAgICAgICBpZiBuYW1lIG5vdCBp biB0b29sLm91dHB1dF9jb2xsZWN0aW9uczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg IG91dHB1dF9jb2xsZWN0aW9uX2RlZiA9M0QgdG9vbC5vdXRwdXRfY29sbGVjdGlvbnNbIG5hbWUg XQorICAgICAgICBpZiBub3Qgb3V0cHV0X2NvbGxlY3Rpb25fZGVmLmR5bmFtaWNfc3RydWN0dXJl OgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIENvdWxkIGJlIEhEQ0EgZm9yIG5v cm1hbCBqb2JzIG9yIGEgREMgZm9yIG1hcHBpbmcKKyAgICAgICAgIyBqb2JzLgorICAgICAgICBp ZiBoYXNhdHRyKGhhc19jb2xsZWN0aW9uLCAiY29sbGVjdGlvbiIpOgorICAgICAgICAgICAgY29s bGVjdGlvbiA9M0QgaGFzX2NvbGxlY3Rpb24uY29sbGVjdGlvbgorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgY29sbGVjdGlvbiA9M0QgaGFzX2NvbGxlY3Rpb24KKworICAgICAgICB0cnk6Cisg ICAgICAgICAgICBlbGVtZW50cyA9M0Qgam9iX2NvbnRleHQuYnVpbGRfY29sbGVjdGlvbl9lbGVt ZW50cygKKyAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLAorICAgICAgICAgICAgICAgIG91dHB1 dF9jb2xsZWN0aW9uX2RlZiwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGNvbGxlY3Rpb25z X3NlcnZpY2Uuc2V0X2NvbGxlY3Rpb25fZWxlbWVudHMoCisgICAgICAgICAgICAgICAgY29sbGVj dGlvbiwKKyAgICAgICAgICAgICAgICBlbGVtZW50cworICAgICAgICAgICAgKQorICAgICAgICBl eGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nLmluZm8oIlByb2JsZW0gZ2F0aGVyaW5n IG91dHB1dCBjb2xsZWN0aW9uLiIpCisgICAgICAgICAgICBjb2xsZWN0aW9uLmhhbmRsZV9wb3B1 bGF0aW9uX2ZhaWxlZCgiUHJvYmxlbSBidWlsZGluZyBkYXRhc2V0cz0KIGZvciBjb2xsZWN0aW9u LiIpCisKKworY2xhc3MgSm9iQ29udGV4dCggb2JqZWN0ICk6CisKKyAgICBkZWYgX19pbml0X18o IHNlbGYsIHRvb2wsIGpvYiwgam9iX3dvcmtpbmdfZGlyZWN0b3J5LCBpbnBfZGF0YSApOgorICAg ICAgICBzZWxmLmlucF9kYXRhID0zRCBpbnBfZGF0YQorICAgICAgICBzZWxmLmFwcCA9M0QgdG9v bC5hcHAKKyAgICAgICAgc2VsZi5zYV9zZXNzaW9uID0zRCB0b29sLnNhX3Nlc3Npb24KKyAgICAg ICAgc2VsZi5qb2IgPTNEIGpvYgorICAgICAgICBzZWxmLmpvYl93b3JraW5nX2RpcmVjdG9yeSA9 M0Qgam9iX3dvcmtpbmdfZGlyZWN0b3J5CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGVybWlz c2lvbnMoIHNlbGYgKToKKyAgICAgICAgaW5wX2RhdGEgPTNEIHNlbGYuaW5wX2RhdGEKKyAgICAg ICAgZXhpc3RpbmdfZGF0YXNldHMgPTNEIFsgaW5wIGZvciBpbnAgaW4gaW5wX2RhdGEudmFsdWVz KCkgaWYgaW5wIF0KKyAgICAgICAgaWYgZXhpc3RpbmdfZGF0YXNldHM6CisgICAgICAgICAgICBw ZXJtaXNzaW9ucyA9M0Qgc2VsZi5hcHAuc2VjdXJpdHlfYWdlbnQuZ3Vlc3NfZGVyaXZlZF9wZXJt aXNzaT0Kb25zX2Zvcl9kYXRhc2V0cyggZXhpc3RpbmdfZGF0YXNldHMgKQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgIyBObyB2YWxpZCBpbnB1dHMsIHdlIHdpbGwgdXNlIGhpc3RvcnkgZGVm YXVsdHMKKyAgICAgICAgICAgIHBlcm1pc3Npb25zID0zRCBzZWxmLmFwcC5zZWN1cml0eV9hZ2Vu dC5oaXN0b3J5X2dldF9kZWZhdWx0X3BlPQpybWlzc2lvbnMoIHNlbGYuam9iLmhpc3RvcnkgKQor ICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMKKworICAgIGRlZiBmaW5kX2ZpbGVzKCBzZWxmLCBj b2xsZWN0aW9uLCBkYXRhc2V0X2NvbGxlY3RvcnMgKToKKyAgICAgICAgZmlsZW5hbWVzID0zRCBv ZGljdC5vZGljdCgpCisgICAgICAgIGZvciBwYXRoLCBleHRyYV9maWxlX2NvbGxlY3RvciBpbiB3 YWxrX292ZXJfZXh0cmFfZmlsZXMoIGRhdGFzZXRfYz0Kb2xsZWN0b3JzLCBzZWxmLmpvYl93b3Jr aW5nX2RpcmVjdG9yeSwgY29sbGVjdGlvbiApOgorICAgICAgICAgICAgZmlsZW5hbWVzWyBwYXRo IF0gPTNEIGV4dHJhX2ZpbGVfY29sbGVjdG9yCisgICAgICAgIHJldHVybiBmaWxlbmFtZXMKKwor ICAgIGRlZiBidWlsZF9jb2xsZWN0aW9uX2VsZW1lbnRzKCBzZWxmLCBjb2xsZWN0aW9uLCBvdXRw dXRfY29sbGVjdGlvbl9kZWY9CiApOgorICAgICAgICBkYXRhc2V0cyA9M0Qgc2VsZi5jcmVhdGVf ZGF0YXNldHMoCisgICAgICAgICAgICBjb2xsZWN0aW9uLAorICAgICAgICAgICAgb3V0cHV0X2Nv bGxlY3Rpb25fZGVmLAorICAgICAgICApCisKKyAgICAgICAgZWxlbWVudHMgPTNEIG9kaWN0Lm9k aWN0KCkKKyAgICAgICAgIyBUT0RPOiBhbGxvdyBjb25maWd1cmFibGUgc29ydGluZy4KKyAgICAg ICAgIyAgICA8c29ydCBieT0zRCJsZXhpY2FsIiAvPjwhLS0gZGVmYXVsdCAtLT4KKyAgICAgICAg IyAgICA8c29ydCBieT0zRCJyZXZlcnNlX2xleGljYWwiIC8+CisgICAgICAgICMgICAgPHNvcnQg cmVnZXg9M0QiZXhhbXBsZS4oXGQrKS5mYXN0cSIgYnk9M0QiMTpudW1lcmljYWwiIC8+CisgICAg ICAgICMgICAgPHNvcnQgcmVnZXg9M0QicGFydF8oXGQrKV9zYW1wbGVfKFteX10rKS5mYXN0cSIg Ynk9M0QiMjpsZXhpYz0KYWwsMTpudW1lcmljYWwiIC8+CisgICAgICAgICMgVE9ETzogYWxsb3cg bmVzdGVkIHN0cnVjdHVyZQorICAgICAgICBmb3IgZGVzaWduYXRpb24gaW4gZGF0YXNldHMua2V5 cygpOgorICAgICAgICAgICAgZWxlbWVudHNbIGRlc2lnbmF0aW9uIF0gPTNEIGRhdGFzZXRzWyBk ZXNpZ25hdGlvbiBdCisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRzCisKKyAgICBkZWYgY3JlYXRl X2RhdGFzZXRzKCBzZWxmLCBjb2xsZWN0aW9uLCBvdXRwdXRfY29sbGVjdGlvbl9kZWYgKToKKyAg ICAgICAgZGF0YXNldF9jb2xsZWN0b3JzID0zRCBvdXRwdXRfY29sbGVjdGlvbl9kZWYuZGF0YXNl dF9jb2xsZWN0b3JzCisgICAgICAgIGZpbGVuYW1lcyA9M0Qgc2VsZi5maW5kX2ZpbGVzKCBjb2xs ZWN0aW9uLCBkYXRhc2V0X2NvbGxlY3RvcnMgKQorCisgICAgICAgIGRhdGFzZXRzID0zRCB7fQor ICAgICAgICBmb3IgZmlsZW5hbWUsIGV4dHJhX2ZpbGVfY29sbGVjdG9yIGluIGZpbGVuYW1lcy5p dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZpZWxkc19tYXRjaCA9M0QgZXh0cmFfZmlsZV9jb2xs ZWN0b3IubWF0Y2goIGNvbGxlY3Rpb24sIG9zLnBhPQp0aC5iYXNlbmFtZSggZmlsZW5hbWUgKSAp CisgICAgICAgICAgICBpZiBub3QgZmllbGRzX21hdGNoOgorICAgICAgICAgICAgICAgIHJhaXNl IEV4Y2VwdGlvbiggIlByb2JsZW0gcGFyc2luZyBtZXRhZGF0YSBmaWVsZHMgZm9yIGZpbGU9CiAl cyIgJSBmaWxlbmFtZSApCisgICAgICAgICAgICBkZXNpZ25hdGlvbiA9M0QgZmllbGRzX21hdGNo LmRlc2lnbmF0aW9uCisgICAgICAgICAgICB2aXNpYmxlID0zRCBmaWVsZHNfbWF0Y2gudmlzaWJs ZQorICAgICAgICAgICAgZXh0ID0zRCBmaWVsZHNfbWF0Y2guZXh0CisgICAgICAgICAgICBkYmtl eSA9M0QgZmllbGRzX21hdGNoLmRia2V5CisgICAgICAgICAgICAjIENyZWF0ZSBuZXcgcHJpbWFy eSBkYXRhc2V0CisgICAgICAgICAgICBuYW1lID0zRCBmaWVsZHNfbWF0Y2gubmFtZSBvciBkZXNp Z25hdGlvbgorCisgICAgICAgICAgICBkYXRhc2V0ID0zRCBzZWxmLmNyZWF0ZV9kYXRhc2V0KAor ICAgICAgICAgICAgICAgIGV4dD0zRGV4dCwKKyAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbj0z RGRlc2lnbmF0aW9uLAorICAgICAgICAgICAgICAgIHZpc2libGU9M0R2aXNpYmxlLAorICAgICAg ICAgICAgICAgIGRia2V5PTNEZGJrZXksCisgICAgICAgICAgICAgICAgbmFtZT0zRG5hbWUsCisg ICAgICAgICAgICAgICAgZmlsZW5hbWU9M0RmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICBtZXRh ZGF0YV9zb3VyY2VfbmFtZT0zRG91dHB1dF9jb2xsZWN0aW9uX2RlZi5tZXRhZGF0YV9zb3VyPQpj ZSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgZGF0YXNldHNbIGRlc2lnbmF0aW9uIF0g PTNEIGRhdGFzZXQKKyAgICAgICAgcmV0dXJuIGRhdGFzZXRzCisKKyAgICBkZWYgY3JlYXRlX2Rh dGFzZXQoCisgICAgICAgIHNlbGYsCisgICAgICAgIGV4dCwKKyAgICAgICAgZGVzaWduYXRpb24s CisgICAgICAgIHZpc2libGUsCisgICAgICAgIGRia2V5LAorICAgICAgICBuYW1lLAorICAgICAg ICBmaWxlbmFtZSwKKyAgICAgICAgbWV0YWRhdGFfc291cmNlX25hbWUsCisgICAgKToKKyAgICAg ICAgYXBwID0zRCBzZWxmLmFwcAorICAgICAgICBzYV9zZXNzaW9uID0zRCBzZWxmLnNhX3Nlc3Np b24KKworICAgICAgICAjIENvcHkgbWV0YWRhdGEgZnJvbSBvbmUgb2YgdGhlIGlucHV0cyBpZiBy ZXF1ZXN0ZWQuCisgICAgICAgIG1ldGFkYXRhX3NvdXJjZSA9M0QgTm9uZQorICAgICAgICBpZiBt ZXRhZGF0YV9zb3VyY2VfbmFtZToKKyAgICAgICAgICAgIG1ldGFkYXRhX3NvdXJjZSA9M0Qgc2Vs Zi5pbnBfZGF0YVsgbWV0YWRhdGFfc291cmNlX25hbWUgXQorCisgICAgICAgICMgQ3JlYXRlIG5l dyBwcmltYXJ5IGRhdGFzZXQKKyAgICAgICAgcHJpbWFyeV9kYXRhID0zRCBhcHAubW9kZWwuSGlz dG9yeURhdGFzZXRBc3NvY2lhdGlvbiggZXh0ZW5zaW9uPTNEPQpleHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ25hdGlv bj0zRD0KZGVzaWduYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlPTNEdmlzaT0KYmxlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJrZXk9M0Rk YmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNyZWF0ZV9kYXRhc2V0PQo9M0RUcnVlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ffc2Vzc2lvbj0zRHM9CmFf c2Vzc2lvbiApCisgICAgICAgIGFwcC5zZWN1cml0eV9hZ2VudC5zZXRfYWxsX2RhdGFzZXRfcGVy bWlzc2lvbnMoIHByaW1hcnlfZGF0YS5kYXRhcz0KZXQsIHNlbGYucGVybWlzc2lvbnMgKQorICAg ICAgICBzYV9zZXNzaW9uLmFkZCggcHJpbWFyeV9kYXRhICkKKyAgICAgICAgc2Ffc2Vzc2lvbi5m bHVzaCgpCisgICAgICAgICMgTW92ZSBkYXRhIGZyb20gdGVtcCBsb2NhdGlvbiB0byBkYXRhc2V0 IGxvY2F0aW9uCisgICAgICAgIGFwcC5vYmplY3Rfc3RvcmUudXBkYXRlX2Zyb21fZmlsZShwcmlt YXJ5X2RhdGEuZGF0YXNldCwgZmlsZV9uYW1lPQo9M0RmaWxlbmFtZSwgY3JlYXRlPTNEVHJ1ZSkK KyAgICAgICAgcHJpbWFyeV9kYXRhLnNldF9zaXplKCkKKyAgICAgICAgIyBJZiBtYXRjaCBzcGVj aWZpZWQgYSBuYW1lIHVzZSBvdGhlcndpc2UgZ2VuZXJhdGUgb25lIGZyb20KKyAgICAgICAgIyBk ZXNpZ25hdGlvbi4KKyAgICAgICAgcHJpbWFyeV9kYXRhLm5hbWUgPTNEIG5hbWUKKworICAgICAg ICBpZiBtZXRhZGF0YV9zb3VyY2U6CisgICAgICAgICAgICBwcmltYXJ5X2RhdGEuaW5pdF9tZXRh KCBjb3B5X2Zyb209M0RtZXRhZGF0YV9zb3VyY2UgKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbWFyeV9kYXRhLmluaXRfbWV0YSgpCisKKyAgICAgICAgIyBBc3NvY2lhdGUgbmV3IGRh dGFzZXQgd2l0aCBqb2IKKyAgICAgICAgaWYgc2VsZi5qb2I6CisgICAgICAgICAgICBzZWxmLmpv Yi5oaXN0b3J5LmFkZF9kYXRhc2V0KCBwcmltYXJ5X2RhdGEgKQorCisgICAgICAgICAgICBhc3Nv YyA9M0QgYXBwLm1vZGVsLkpvYlRvT3V0cHV0RGF0YXNldEFzc29jaWF0aW9uKCAnX19uZXdfcHJp bT0KYXJ5X2ZpbGVfJXN8JXNfXycgJSAoIG5hbWUsIGRlc2lnbmF0aW9uICksIHByaW1hcnlfZGF0 YSApCisgICAgICAgICAgICBhc3NvYy5qb2IgPTNEIHNlbGYuam9iCisgICAgICAgICAgICBzYV9z ZXNzaW9uLmFkZCggYXNzb2MgKQorICAgICAgICAgICAgc2Ffc2Vzc2lvbi5mbHVzaCgpCisKKyAg ICAgICAgcHJpbWFyeV9kYXRhLnN0YXRlID0zRCAnb2snCisgICAgICAgIHJldHVybiBwcmltYXJ5 X2RhdGEKKwo9MjAKIGRlZiBjb2xsZWN0X3ByaW1hcnlfZGF0YXNldHMoIHRvb2wsIG91dHB1dCwg am9iX3dvcmtpbmdfZGlyZWN0b3J5LCBpbnB1dF9lPQp4dCApOgogICAgIGFwcCA9M0QgdG9vbC5h cHAKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBk ODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS90b29s cy9wYXJzZXIvaW50ZXJmYWNlLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvcGFyc2VyL2ludGVy ZmFjZS5weQorKysgYi9saWIvZ2FsYXh5L3Rvb2xzL3BhcnNlci9pbnRlcmZhY2UucHkKQEAgLTEz MCw3ICsxMzAsOCBAQAo9MjAKICAgICBAYWJzdHJhY3RtZXRob2QKICAgICBkZWYgcGFyc2Vfb3V0 cHV0cyhzZWxmLCB0b29sKToKLSAgICAgICAgIiIiIFJldHVybiBhIGxpc3Qgb2YgVG9vbE91dHB1 dCBvYmplY3RzLgorICAgICAgICAiIiIgUmV0dXJuIGEgcGFpciBvZiBvdXRwdXQgYW5kIG91dHB1 dCBjb2xsZWN0aW9ucyBvcmRlcmVkCisgICAgICAgIGRpY3Rpb25hcmllcyBmb3IgdXNlIGJ5IFRv b2wuCiAgICAgICAgICIiIgo9MjAKICAgICBAYWJzdHJhY3RtZXRob2QKCmRpZmYgLXIgMmE2NjM1 MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNj MTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGliL2dhbGF4eS90b29scy9wYXJzZXIveG1sLnB5Ci0t LSBhL2xpYi9nYWxheHkvdG9vbHMvcGFyc2VyL3htbC5weQorKysgYi9saWIvZ2FsYXh5L3Rvb2xz L3BhcnNlci94bWwucHkKQEAgLTEyLDYgKzEyLDcgQEAKICAgICBJbnB1dFNvdXJjZSwKICkKIGZy b20gZ2FsYXh5LnV0aWwgaW1wb3J0IHN0cmluZ19hc19ib29sLCB4bWxfdGV4dCwgeG1sX3RvX3N0 cmluZworZnJvbSBnYWxheHkudXRpbC5vZGljdCBpbXBvcnQgb2RpY3QKIGZyb20gZ2FsYXh5LnRv b2xzLmRlcHMgaW1wb3J0IHJlcXVpcmVtZW50cwogaW1wb3J0IGdhbGF4eS50b29scwogZnJvbSBn YWxheHkudG9vbHMucGFyYW1ldGVycyBpbXBvcnQgb3V0cHV0X2NvbGxlY3QKQEAgLTEzMywyMCAr MTM0LDg1IEBACj0yMAogICAgIGRlZiBwYXJzZV9vdXRwdXRzKHNlbGYsIHRvb2wpOgogICAgICAg ICBvdXRfZWxlbSA9M0Qgc2VsZi5yb290LmZpbmQoIm91dHB1dHMiKQorICAgICAgICBvdXRwdXRz ID0zRCBvZGljdCgpCisgICAgICAgIG91dHB1dF9jb2xsZWN0aW9ucyA9M0Qgb2RpY3QoKQogICAg ICAgICBpZiBvdXRfZWxlbSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAg ICAgICByZXR1cm4gb3V0cHV0cywgb3V0cHV0X2NvbGxlY3Rpb25zCj0yMAotICAgICAgICBkZWYg X3BhcnNlKGRhdGFfZWxlbSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2Vfb3V0cHV0 KGRhdGFfZWxlbSwgdG9vbCkKKyAgICAgICAgZGF0YV9kaWN0ID0zRCBvZGljdCgpCj0yMAotICAg ICAgICByZXR1cm4gbWFwKF9wYXJzZSwgb3V0X2VsZW0uZmluZGFsbCgiZGF0YSIpKQorICAgICAg ICBkZWYgX3BhcnNlKGRhdGFfZWxlbSwgKiprd2RzKToKKyAgICAgICAgICAgIG91dHB1dF9kZWYg PTNEIHNlbGYuX3BhcnNlX291dHB1dChkYXRhX2VsZW0sIHRvb2wsICoqa3dkcykKKyAgICAgICAg ICAgIGRhdGFfZGljdFtvdXRwdXRfZGVmLm5hbWVdID0zRCBvdXRwdXRfZGVmCisgICAgICAgICAg ICByZXR1cm4gb3V0cHV0X2RlZgo9MjAKLSAgICBkZWYgX3BhcnNlX291dHB1dChzZWxmLCBkYXRh X2VsZW0sIHRvb2wpOgorICAgICAgICBtYXAoX3BhcnNlLCBvdXRfZWxlbS5maW5kYWxsKCJkYXRh IikpCisKKyAgICAgICAgZm9yIGNvbGxlY3Rpb25fZWxlbSBpbiBvdXRfZWxlbS5maW5kYWxsKCJj b2xsZWN0aW9uIik6CisgICAgICAgICAgICBuYW1lID0zRCBjb2xsZWN0aW9uX2VsZW0uZ2V0KCAi bmFtZSIgKQorICAgICAgICAgICAgZGVmYXVsdF9mb3JtYXQgPTNEIGNvbGxlY3Rpb25fZWxlbS5n ZXQoICJmb3JtYXQiLCAiZGF0YSIgKQorICAgICAgICAgICAgY29sbGVjdGlvbl90eXBlID0zRCBj b2xsZWN0aW9uX2VsZW0uZ2V0KCAidHlwZSIsIE5vbmUgKQorICAgICAgICAgICAgc3RydWN0dXJl ZF9saWtlID0zRCBjb2xsZWN0aW9uX2VsZW0uZ2V0KCAic3RydWN0dXJlZF9saWtlIiwgTm89Cm5l ICkKKyAgICAgICAgICAgIGluaGVyaXRfZm9ybWF0ID0zRCBGYWxzZQorICAgICAgICAgICAgaW5o ZXJpdF9tZXRhZGF0YSA9M0QgRmFsc2UKKyAgICAgICAgICAgIGlmIHN0cnVjdHVyZWRfbGlrZToK KyAgICAgICAgICAgICAgICBpbmhlcml0X2Zvcm1hdCA9M0Qgc3RyaW5nX2FzX2Jvb2woIGNvbGxl Y3Rpb25fZWxlbS5nZXQoICJpPQpuaGVyaXRfZm9ybWF0IiwgTm9uZSApICkKKyAgICAgICAgICAg ICAgICBpbmhlcml0X21ldGFkYXRhID0zRCBzdHJpbmdfYXNfYm9vbCggY29sbGVjdGlvbl9lbGVt LmdldCggPQoiaW5oZXJpdF9tZXRhZGF0YSIsIE5vbmUgKSApCisgICAgICAgICAgICBkZWZhdWx0 X2Zvcm1hdF9zb3VyY2UgPTNEIGNvbGxlY3Rpb25fZWxlbS5nZXQoICJmb3JtYXRfc291cmNlIj0K LCBOb25lICkKKyAgICAgICAgICAgIGRlZmF1bHRfbWV0YWRhdGFfc291cmNlID0zRCBjb2xsZWN0 aW9uX2VsZW0uZ2V0KCAibWV0YWRhdGFfc291PQpyY2UiLCAiIiApCisKKyAgICAgICAgICAgIGRh dGFzZXRfY29sbGVjdG9ycyA9M0QgTm9uZQorICAgICAgICAgICAgaWYgY29sbGVjdGlvbl9lbGVt LmZpbmQoICJkaXNjb3Zlcl9kYXRhc2V0cyIgKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg ICBkYXRhc2V0X2NvbGxlY3RvcnMgPTNEIG91dHB1dF9jb2xsZWN0LmRhdGFzZXRfY29sbGVjdG9y c19mPQpyb21fZWxlbSggY29sbGVjdGlvbl9lbGVtICkKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9 M0QgZ2FsYXh5LnRvb2xzLlRvb2xPdXRwdXRDb2xsZWN0aW9uU3RydWN0dXJlKAorICAgICAgICAg ICAgICAgIGNvbGxlY3Rpb25fdHlwZT0zRGNvbGxlY3Rpb25fdHlwZSwKKyAgICAgICAgICAgICAg ICBzdHJ1Y3R1cmVkX2xpa2U9M0RzdHJ1Y3R1cmVkX2xpa2UsCisgICAgICAgICAgICAgICAgZGF0 YXNldF9jb2xsZWN0b3JzPTNEZGF0YXNldF9jb2xsZWN0b3JzLAorICAgICAgICAgICAgKQorICAg ICAgICAgICAgb3V0cHV0X2NvbGxlY3Rpb24gPTNEIGdhbGF4eS50b29scy5Ub29sT3V0cHV0Q29s bGVjdGlvbigKKyAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVy ZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X2Zvcm1hdD0zRGRlZmF1bHRfZm9ybWF0LAorICAg ICAgICAgICAgICAgIGluaGVyaXRfZm9ybWF0PTNEaW5oZXJpdF9mb3JtYXQsCisgICAgICAgICAg ICAgICAgaW5oZXJpdF9tZXRhZGF0YT0zRGluaGVyaXRfbWV0YWRhdGEsCisgICAgICAgICAgICAg ICAgZGVmYXVsdF9mb3JtYXRfc291cmNlPTNEZGVmYXVsdF9mb3JtYXRfc291cmNlLAorICAgICAg ICAgICAgICAgIGRlZmF1bHRfbWV0YWRhdGFfc291cmNlPTNEZGVmYXVsdF9tZXRhZGF0YV9zb3Vy Y2UsCisgICAgICAgICAgICApCisgICAgICAgICAgICBvdXRwdXRzW291dHB1dF9jb2xsZWN0aW9u Lm5hbWVdID0zRCBvdXRwdXRfY29sbGVjdGlvbgorCisgICAgICAgICAgICBmb3IgZGF0YV9lbGVt IGluIGNvbGxlY3Rpb25fZWxlbS5maW5kYWxsKCJkYXRhIik6CisgICAgICAgICAgICAgICAgX3Bh cnNlKAorICAgICAgICAgICAgICAgICAgICBkYXRhX2VsZW0sCisgICAgICAgICAgICAgICAgICAg IGRlZmF1bHRfZm9ybWF0PTNEZGVmYXVsdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHRfZm9ybWF0X3NvdXJjZT0zRGRlZmF1bHRfZm9ybWF0X3NvdXJjZSwKKyAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdF9tZXRhZGF0YV9zb3VyY2U9M0RkZWZhdWx0X21ldGFkYXRhX3NvdXJj ZSwKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGZvciBkYXRhX2VsZW0gaW4gY29s bGVjdGlvbl9lbGVtLmZpbmRhbGwoImRhdGEiKToKKyAgICAgICAgICAgICAgICBvdXRwdXRfbmFt ZSA9M0QgZGF0YV9lbGVtLmdldCgibmFtZSIpCisgICAgICAgICAgICAgICAgZGF0YSA9M0QgZGF0 YV9kaWN0W291dHB1dF9uYW1lXQorICAgICAgICAgICAgICAgIGFzc2VydCBkYXRhCisgICAgICAg ICAgICAgICAgZGVsIGRhdGFfZGljdFtvdXRwdXRfbmFtZV0KKyAgICAgICAgICAgICAgICBvdXRw dXRfY29sbGVjdGlvbi5vdXRwdXRzW291dHB1dF9uYW1lXSA9M0QgZGF0YQorICAgICAgICAgICAg b3V0cHV0X2NvbGxlY3Rpb25zWyBuYW1lIF0gPTNEIG91dHB1dF9jb2xsZWN0aW9uCisKKyAgICAg ICAgZm9yIG91dHB1dF9kZWYgaW4gZGF0YV9kaWN0LnZhbHVlcygpOgorICAgICAgICAgICAgb3V0 cHV0c1tvdXRwdXRfZGVmLm5hbWVdID0zRCBvdXRwdXRfZGVmCisgICAgICAgIHJldHVybiBvdXRw dXRzLCBvdXRwdXRfY29sbGVjdGlvbnMKKworICAgIGRlZiBfcGFyc2Vfb3V0cHV0KAorICAgICAg ICBzZWxmLAorICAgICAgICBkYXRhX2VsZW0sCisgICAgICAgIHRvb2wsCisgICAgICAgIGRlZmF1 bHRfZm9ybWF0PTNEImRhdGEiLAorICAgICAgICBkZWZhdWx0X2Zvcm1hdF9zb3VyY2U9M0ROb25l LAorICAgICAgICBkZWZhdWx0X21ldGFkYXRhX3NvdXJjZT0zRCIiLAorICAgICk6CiAgICAgICAg IG91dHB1dCA9M0QgZ2FsYXh5LnRvb2xzLlRvb2xPdXRwdXQoIGRhdGFfZWxlbS5nZXQoIm5hbWUi KSApCi0gICAgICAgIG91dHB1dC5mb3JtYXQgPTNEIGRhdGFfZWxlbS5nZXQoImZvcm1hdCIsICJk YXRhIikKKyAgICAgICAgb3V0cHV0LmZvcm1hdCA9M0QgZGF0YV9lbGVtLmdldCgiZm9ybWF0Iiwg ZGVmYXVsdF9mb3JtYXQpCiAgICAgICAgIG91dHB1dC5jaGFuZ2VfZm9ybWF0ID0zRCBkYXRhX2Vs ZW0uZmluZGFsbCgiY2hhbmdlX2Zvcm1hdCIpCi0gICAgICAgIG91dHB1dC5mb3JtYXRfc291cmNl ID0zRCBkYXRhX2VsZW0uZ2V0KCJmb3JtYXRfc291cmNlIiwgTm9uZSkKLSAgICAgICAgb3V0cHV0 Lm1ldGFkYXRhX3NvdXJjZSA9M0QgZGF0YV9lbGVtLmdldCgibWV0YWRhdGFfc291cmNlIiwgIiIp CisgICAgICAgIG91dHB1dC5mb3JtYXRfc291cmNlID0zRCBkYXRhX2VsZW0uZ2V0KCJmb3JtYXRf c291cmNlIiwgZGVmYXVsdF9mbz0Kcm1hdF9zb3VyY2UpCisgICAgICAgIG91dHB1dC5tZXRhZGF0 YV9zb3VyY2UgPTNEIGRhdGFfZWxlbS5nZXQoIm1ldGFkYXRhX3NvdXJjZSIsIGRlZmF1bD0KdF9t ZXRhZGF0YV9zb3VyY2UpCiAgICAgICAgIG91dHB1dC5wYXJlbnQgPTNEIGRhdGFfZWxlbS5nZXQo InBhcmVudCIsIE5vbmUpCiAgICAgICAgIG91dHB1dC5sYWJlbCA9M0QgeG1sX3RleHQoIGRhdGFf ZWxlbSwgImxhYmVsIiApCiAgICAgICAgIG91dHB1dC5jb3VudCA9M0QgaW50KCBkYXRhX2VsZW0u Z2V0KCJjb3VudCIsIDEpICkKQEAgLTE4NSw2ICsyNTEsNyBAQAogZGVmIF90ZXN0X2VsZW1fdG9f ZGljdCh0ZXN0X2VsZW0sIGkpOgogICAgIHJ2YWwgPTNEIGRpY3QoCiAgICAgICAgIG91dHB1dHM9 M0RfX3BhcnNlX291dHB1dF9lbGVtcyh0ZXN0X2VsZW0pLAorICAgICAgICBvdXRwdXRfY29sbGVj dGlvbnM9M0RfX3BhcnNlX291dHB1dF9jb2xsZWN0aW9uX2VsZW1zKHRlc3RfZWxlbSksCiAgICAg ICAgIGlucHV0cz0zRF9fcGFyc2VfaW5wdXRfZWxlbXModGVzdF9lbGVtLCBpKSwKICAgICAgICAg Y29tbWFuZD0zRF9fcGFyc2VfYXNzZXJ0X2xpc3RfZnJvbV9lbGVtKCB0ZXN0X2VsZW0uZmluZCgi YXNzZXJ0X2NvPQptbWFuZCIpICksCiAgICAgICAgIHN0ZG91dD0zRF9fcGFyc2VfYXNzZXJ0X2xp c3RfZnJvbV9lbGVtKCB0ZXN0X2VsZW0uZmluZCgiYXNzZXJ0X3N0ZD0Kb3V0IikgKSwKQEAgLTIz Miw2ICsyOTksMjkgQEAKICAgICByZXR1cm4gX19wYXJzZV9hc3NlcnRfbGlzdF9mcm9tX2VsZW0o IGFzc2VydF9lbGVtICkKPTIwCj0yMAorZGVmIF9fcGFyc2Vfb3V0cHV0X2NvbGxlY3Rpb25fZWxl bXMoIHRlc3RfZWxlbSApOgorICAgIG91dHB1dF9jb2xsZWN0aW9ucyA9M0QgW10KKyAgICBmb3Ig b3V0cHV0X2NvbGxlY3Rpb25fZWxlbSBpbiB0ZXN0X2VsZW0uZmluZGFsbCggIm91dHB1dF9jb2xs ZWN0aW9uIiApOgorICAgICAgICBvdXRwdXRfY29sbGVjdGlvbl9kZWYgPTNEIF9fcGFyc2Vfb3V0 cHV0X2NvbGxlY3Rpb25fZWxlbSggb3V0cHV0X2M9Cm9sbGVjdGlvbl9lbGVtICkKKyAgICAgICAg b3V0cHV0X2NvbGxlY3Rpb25zLmFwcGVuZCggb3V0cHV0X2NvbGxlY3Rpb25fZGVmICkKKyAgICBy ZXR1cm4gb3V0cHV0X2NvbGxlY3Rpb25zCisKKworZGVmIF9fcGFyc2Vfb3V0cHV0X2NvbGxlY3Rp b25fZWxlbSggb3V0cHV0X2NvbGxlY3Rpb25fZWxlbSApOgorICAgIGF0dHJpYiA9M0QgZGljdCgg b3V0cHV0X2NvbGxlY3Rpb25fZWxlbS5hdHRyaWIgKQorICAgIG5hbWUgPTNEIGF0dHJpYi5wb3Ao ICduYW1lJywgTm9uZSApCisgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICByYWlzZSBFeGNl cHRpb24oICJUZXN0IG91dHB1dCBjb2xsZWN0aW9uIGRvZXMgbm90IGhhdmUgYSAnbmFtZSciICkK KyAgICBlbGVtZW50X3Rlc3RzID0zRCB7fQorICAgIGZvciBlbGVtZW50IGluIG91dHB1dF9jb2xs ZWN0aW9uX2VsZW0uZmluZGFsbCgiZWxlbWVudCIpOgorICAgICAgICBlbGVtZW50X2F0dHJpYiA9 M0QgZGljdCggZWxlbWVudC5hdHRyaWIgKQorICAgICAgICBpZGVudGlmaWVyID0zRCBlbGVtZW50 X2F0dHJpYi5wb3AoICduYW1lJywgTm9uZSApCisgICAgICAgIGlmIGlkZW50aWZpZXIgaXMgTm9u ZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiggIlRlc3QgcHJpbWFyeSBkYXRhc2V0IGRv ZXMgbm90IGhhdmUgYSAnaWRlbnRpPQpmaWVyJyIgKQorICAgICAgICBlbGVtZW50X3Rlc3RzWyBp ZGVudGlmaWVyIF0gPTNEIF9fcGFyc2VfdGVzdF9hdHRyaWJ1dGVzKCBlbGVtZW50LCA9CmVsZW1l bnRfYXR0cmliICkKKyAgICByZXR1cm4gZ2FsYXh5LnRvb2xzLlRlc3RDb2xsZWN0aW9uT3V0cHV0 RGVmKCBuYW1lLCBhdHRyaWIsIGVsZW1lbnRfdGVzPQp0cyApCisKKwogZGVmIF9fcGFyc2VfdGVz dF9hdHRyaWJ1dGVzKCBvdXRwdXRfZWxlbSwgYXR0cmliICk6CiAgICAgYXNzZXJ0X2xpc3QgPTNE IF9fcGFyc2VfYXNzZXJ0X2xpc3QoIG91dHB1dF9lbGVtICkKICAgICBmaWxlID0zRCBhdHRyaWIu cG9wKCAnZmlsZScsIE5vbmUgKQoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUw ZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdm NCBsaWIvZ2FsYXh5L3Rvb2xzL3BhcnNlci95YW1sLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMv cGFyc2VyL3lhbWwucHkKKysrIGIvbGliL2dhbGF4eS90b29scy9wYXJzZXIveWFtbC5weQpAQCAt NSw2ICs1LDcgQEAKPTIwCiBmcm9tIGdhbGF4eS50b29scy5kZXBzIGltcG9ydCByZXF1aXJlbWVu dHMKIGZyb20gZ2FsYXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0IG91dHB1dF9jb2xsZWN0Citm cm9tIGdhbGF4eS51dGlsLm9kaWN0IGltcG9ydCBvZGljdAogaW1wb3J0IGdhbGF4eS50b29scwo9 MjAKPTIwCkBAIC03Niw3ICs3NywxMSBAQAogICAgICAgICBvdXRwdXRfZGVmcyA9M0QgW10KICAg ICAgICAgZm9yIG5hbWUsIG91dHB1dF9kaWN0IGluIG91dHB1dHMuaXRlbXMoKToKICAgICAgICAg ICAgIG91dHB1dF9kZWZzLmFwcGVuZChzZWxmLl9wYXJzZV9vdXRwdXQodG9vbCwgbmFtZSwgb3V0 cHV0X2RpY3QpKQotICAgICAgICByZXR1cm4gb3V0cHV0X2RlZnMKKyAgICAgICAgb3V0cHV0cyA9 M0Qgb2RpY3QoKQorICAgICAgICBmb3Igb3V0cHV0IGluIG91dHB1dF9kZWZzOgorICAgICAgICAg ICAgb3V0cHV0c1tvdXRwdXQubmFtZV0gPTNEIG91dHB1dAorICAgICAgICAjIFRPRE86IHBhcnNl IG91dHB1dHMgY29sbGVjdGlvbnMKKyAgICAgICAgcmV0dXJuIG91dHB1dF9kZWZzLCBvZGljdCgp Cj0yMAogICAgIGRlZiBfcGFyc2Vfb3V0cHV0KHNlbGYsIHRvb2wsIG5hbWUsIG91dHB1dF9kaWN0 KToKICAgICAgICAgIyBUT0RPOiBoYW5kbGUgZmlsdGVycywgYWN0aW9ucywgY2hhbmdlX2Zvcm1h dAoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4 MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L3Rvb2xz L3Rlc3QucHkKLS0tIGEvbGliL2dhbGF4eS90b29scy90ZXN0LnB5CisrKyBiL2xpYi9nYWxheHkv dG9vbHMvdGVzdC5weQpAQCAtMTIzLDYgKzEyMyw3IEBACj0yMAogICAgICAgICAgICAgc2VsZi5p bnB1dHMgPTNEIHNlbGYuX19wcm9jZXNzX3Jhd19pbnB1dHMoIHNlbGYudG9vbC5pbnB1dHMsIHQ9 CmVzdF9kaWN0WyJpbnB1dHMiXSApCiAgICAgICAgICAgICBzZWxmLm91dHB1dHMgPTNEIHRlc3Rf ZGljdFsib3V0cHV0cyJdCisgICAgICAgICAgICBzZWxmLm91dHB1dF9jb2xsZWN0aW9ucyA9M0Qg dGVzdF9kaWN0WyJvdXRwdXRfY29sbGVjdGlvbnMiXQogICAgICAgICAgICAgbnVtX291dHB1dHMg PTNEIHRlc3RfZGljdC5nZXQoICdleHBlY3RfbnVtX291dHB1dHMnLCBOb25lICkKICAgICAgICAg ICAgIGlmIG51bV9vdXRwdXRzOgogICAgICAgICAgICAgICAgIG51bV9vdXRwdXRzID0zRCBpbnQo IG51bV9vdXRwdXRzICkKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2Rl MTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgbGli L2dhbGF4eS90b29scy93cmFwcGVycy5weQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL3dyYXBwZXJz LnB5CisrKyBiL2xpYi9nYWxheHkvdG9vbHMvd3JhcHBlcnMucHkKQEAgLTI5MiwxMCArMjkyLDEz IEBACiAgICAgICAgICAgICAjIEl0IGlzIGEgSGlzdG9yeURhdGFzZXRDb2xsZWN0aW9uQXNzb2Np YXRpb24KICAgICAgICAgICAgIGNvbGxlY3Rpb24gPTNEIGhhc19jb2xsZWN0aW9uLmNvbGxlY3Rp b24KICAgICAgICAgICAgIHNlbGYubmFtZSA9M0QgaGFzX2NvbGxlY3Rpb24ubmFtZQotICAgICAg ICBlbHNlOgorICAgICAgICBlbGlmIGhhc2F0dHIoIGhhc19jb2xsZWN0aW9uLCAiY2hpbGRfY29s bGVjdGlvbiIgKToKICAgICAgICAgICAgICMgSXQgaXMgYSBEYXRhc2V0Q29sbGVjdGlvbkVsZW1l bnQgaW5zdGFuY2UgcmVmZXJlbmNpbmcgYW5vdGhlPQpyIGNvbGxlY3Rpb24KICAgICAgICAgICAg IGNvbGxlY3Rpb24gPTNEIGhhc19jb2xsZWN0aW9uLmNoaWxkX2NvbGxlY3Rpb24KICAgICAgICAg ICAgIHNlbGYubmFtZSA9M0QgaGFzX2NvbGxlY3Rpb24uZWxlbWVudF9pZGVudGlmaWVyCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBjb2xsZWN0aW9uID0zRCBoYXNfY29sbGVjdGlvbgorICAg ICAgICAgICAgc2VsZi5uYW1lID0zRCBOb25lCj0yMAogICAgICAgICBlbGVtZW50cyA9M0QgY29s bGVjdGlvbi5lbGVtZW50cwogICAgICAgICBlbGVtZW50X2luc3RhbmNlcyA9M0Qgb2RpY3Qub2Rp Y3QoKQoKZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1y IGQ4MzY4NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L3dl YmFwcHMvZ2FsYXh5L2FwaS90b29scy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5 L2FwaS90b29scy5weQorKysgYi9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS90b29scy5w eQpAQCAtMTkwLDYgKzE5MCw3IEBACiAgICAgICAgIG91dHB1dF9kYXRhc2V0cyA9M0QgdmFycy5n ZXQoICdvdXRfZGF0YScsIFtdICkKICAgICAgICAgcnZhbCA9M0QgewogICAgICAgICAgICAgIm91 dHB1dHMiOiBbXSwKKyAgICAgICAgICAgICJvdXRwdXRfY29sbGVjdGlvbnMiOiBbXSwKICAgICAg ICAgICAgICJqb2JzIjogW10sCiAgICAgICAgICAgICAiaW1wbGljaXRfY29sbGVjdGlvbnMiOiBb XSwKICAgICAgICAgfQpAQCAtMjEyLDYgKzIxMywxMiBAQAogICAgICAgICBmb3Igam9iIGluIHZh cnMuZ2V0KCdqb2JzJywgW10pOgogICAgICAgICAgICAgcnZhbFsgJ2pvYnMnIF0uYXBwZW5kKCBz ZWxmLmVuY29kZV9hbGxfaWRzKCB0cmFucywgam9iLnRvX2RpY3Q9Ciggdmlldz0zRCdjb2xsZWN0 aW9uJyApLCByZWN1cnNpdmU9M0RUcnVlICkgKQo9MjAKKyAgICAgICAgZm9yIG91dHB1dF9uYW1l LCBjb2xsZWN0aW9uX2luc3RhbmNlIGluIHZhcnMuZ2V0KCdvdXRwdXRfY29sbGVjdGlvPQpucycs IFtdKToKKyAgICAgICAgICAgIGhpc3RvcnkgPTNEIHRhcmdldF9oaXN0b3J5IG9yIHRyYW5zLmhp c3RvcnkKKyAgICAgICAgICAgIG91dHB1dF9kaWN0ID0zRCBkaWN0aWZ5X2RhdGFzZXRfY29sbGVj dGlvbl9pbnN0YW5jZSggY29sbGVjdGlvPQpuX2luc3RhbmNlLCBzZWN1cml0eT0zRHRyYW5zLnNl Y3VyaXR5LCBwYXJlbnQ9M0RoaXN0b3J5ICkKKyAgICAgICAgICAgIG91dHB1dF9kaWN0WyAnb3V0 cHV0X25hbWUnIF0gPTNEIG91dHB1dF9uYW1lCisgICAgICAgICAgICBydmFsWyAnb3V0cHV0X2Nv bGxlY3Rpb25zJyBdLmFwcGVuZCggb3V0cHV0X2RpY3QgKQorCiAgICAgICAgIGZvciBvdXRwdXRf bmFtZSwgY29sbGVjdGlvbl9pbnN0YW5jZSBpbiB2YXJzLmdldCggJ2ltcGxpY2l0X2NvbGxlYz0K dGlvbnMnLCB7fSApLml0ZXJpdGVtcygpOgogICAgICAgICAgICAgaGlzdG9yeSA9M0QgdGFyZ2V0 X2hpc3Rvcnkgb3IgdHJhbnMuaGlzdG9yeQogICAgICAgICAgICAgb3V0cHV0X2RpY3QgPTNEIGRp Y3RpZnlfZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlKCBjb2xsZWN0aW89Cm5faW5zdGFuY2Us IHNlY3VyaXR5PTNEdHJhbnMuc2VjdXJpdHksIHBhcmVudD0zRGhpc3RvcnkgKQoKZGlmZiAtciAy YTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5NGNjZjg0 OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L3dvcmtmbG93L2V4dHJhY3Qu cHkKLS0tIGEvbGliL2dhbGF4eS93b3JrZmxvdy9leHRyYWN0LnB5CisrKyBiL2xpYi9nYWxheHkv d29ya2Zsb3cvZXh0cmFjdC5weQpAQCAtMTEsNiArMTEsNyBAQAogICAgIFNlbGVjdFRvb2xQYXJh bWV0ZXIsCiAgICAgVW52YWxpZGF0ZWRWYWx1ZQogKQorZnJvbSBnYWxheHkudG9vbHMgaW1wb3J0 IFRvb2xPdXRwdXRDb2xsZWN0aW9uUGFydAogZnJvbSBnYWxheHkudG9vbHMucGFyYW1ldGVycy5n cm91cGluZyBpbXBvcnQgKAogICAgIENvbmRpdGlvbmFsLAogICAgIFJlcGVhdApAQCAtMTE1LDYg KzExNiw4IEBACiAgICAgICAgICAgICAgICAgaW5wdXRfY29sbGVjdGlvbiA9M0QgYW5faW1wbGlj aXRfb3V0cHV0X2NvbGxlY3Rpb24uZmluZF9pbT0KcGxpY2l0X2lucHV0X2NvbGxlY3Rpb24oIGlu cHV0X25hbWUgKQogICAgICAgICAgICAgICAgIGlmIGlucHV0X2NvbGxlY3Rpb246CiAgICAgICAg ICAgICAgICAgICAgIG90aGVyX2hpZCA9M0QgaW5wdXRfY29sbGVjdGlvbi5oaWQKKyAgICAgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiQ2Fubm90IGZpbmQg aW1wbGljaXQgaW5wdXQgY29sbGVjdGlvbiBmb3IgJXM9CiIgJSBpbnB1dF9uYW1lKQogICAgICAg ICAgICAgaWYgb3RoZXJfaGlkIGluIGhpZF90b19vdXRwdXRfcGFpcjoKICAgICAgICAgICAgICAg ICBvdGhlcl9zdGVwLCBvdGhlcl9uYW1lID0zRCBoaWRfdG9fb3V0cHV0X3BhaXJbIG90aGVyX2hp ZCBdCiAgICAgICAgICAgICAgICAgY29ubiA9M0QgbW9kZWwuV29ya2Zsb3dTdGVwQ29ubmVjdGlv bigpCkBAIC0xMjYsMTggKzEyOSwyNiBAQAogICAgICAgICBzdGVwcy5hcHBlbmQoIHN0ZXAgKQog ICAgICAgICBzdGVwc19ieV9qb2JfaWRbIGpvYl9pZCBdID0zRCBzdGVwCiAgICAgICAgICMgU3Rv cmUgY3JlYXRlZCBkYXRhc2V0IGhpZHMKLSAgICAgICAgZm9yIGFzc29jIGluIGpvYi5vdXRwdXRf ZGF0YXNldHM6CisgICAgICAgIGZvciBhc3NvYyBpbiAoam9iLm91dHB1dF9kYXRhc2V0cyArIGpv Yi5vdXRwdXRfZGF0YXNldF9jb2xsZWN0aW9uXz0KaW5zdGFuY2VzKToKKyAgICAgICAgICAgIGFz c29jX25hbWUgPTNEIGFzc29jLm5hbWUKKyAgICAgICAgICAgIGlmIFRvb2xPdXRwdXRDb2xsZWN0 aW9uUGFydC5pc19uYW1lZF9jb2xsZWN0aW9uX3BhcnRfbmFtZSggYXNzPQpvY19uYW1lICk6Cisg ICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGpvYiBpbiBzdW1tYXJ5Lmlt cGxpY2l0X21hcF9qb2JzOgogICAgICAgICAgICAgICAgIGhpZCA9M0QgTm9uZQogICAgICAgICAg ICAgICAgIGZvciBpbXBsaWNpdF9wYWlyIGluIGpvYnNbIGpvYiBdOgogICAgICAgICAgICAgICAg ICAgICBxdWVyeV9hc3NvY19uYW1lLCBkYXRhc2V0X2NvbGxlY3Rpb24gPTNEIGltcGxpY2l0X3Bh aXIKLSAgICAgICAgICAgICAgICAgICAgaWYgcXVlcnlfYXNzb2NfbmFtZSA9M0Q9M0QgYXNzb2Mu bmFtZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcXVlcnlfYXNzb2NfbmFtZSA9M0Q9M0QgYXNz b2NfbmFtZToKICAgICAgICAgICAgICAgICAgICAgICAgIGhpZCA9M0QgZGF0YXNldF9jb2xsZWN0 aW9uLmhpZAogICAgICAgICAgICAgICAgIGlmIGhpZCBpcyBOb25lOgotICAgICAgICAgICAgICAg ICAgICBsb2cud2FybigiRmFpbGVkIHRvIGZpbmQgbWF0Y2hpbmcgaW1wbGljaXQgam9iLiIpCisg ICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0zRCAiRmFpbGVkIHRvIGZpbmQgbWF0Y2hpbmcg aW1wbGljaXQgam9iIC0gaj0Kb2IgaXMgJXMsIGpvYnMgYXJlICVzLCBhc3NvY19uYW1lIGlzICVz LiIKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9M0QgdGVtcGxhdGUgJSAoIGpvYi5pZCwg am9icywgYXNzb2MubmFtZSApCisgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCBtZXNzYWdl ICkKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCAiRmFpbGVkIHRvIGV4dHJh Y3Qgam9iLiIgKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBoaWQgPTNEIGFz c29jLmRhdGFzZXQuaGlkCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0ciggYXNzb2MsICJkYXRh c2V0IiApOgorICAgICAgICAgICAgICAgICAgICBoaWQgPTNEIGFzc29jLmRhdGFzZXQuaGlkCisg ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaGlkID0zRCBhc3NvYy5k YXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UuaGlkCiAgICAgICAgICAgICBoaWRfdG9fb3V0cHV0 X3BhaXJbIGhpZCBdID0zRCAoIHN0ZXAsIGFzc29jLm5hbWUgKQogICAgIHJldHVybiBzdGVwcwo9 MjAKQEAgLTIxMCwxMSArMjIxLDE4IEBACiAgICAgICAgIGRhdGFzZXRfY29sbGVjdGlvbiA9M0Qg Y29udGVudAogICAgICAgICBoaWQgPTNEIGNvbnRlbnQuaGlkCiAgICAgICAgIHNlbGYuY29sbGVj dGlvbl90eXBlc1sgaGlkIF0gPTNEIGNvbnRlbnQuY29sbGVjdGlvbi5jb2xsZWN0aW9uX3R5cGUK LSAgICAgICAgaWYgbm90IGNvbnRlbnQuaW1wbGljaXRfb3V0cHV0X25hbWU6Ci0gICAgICAgICAg ICBqb2IgPTNEIERhdGFzZXRDb2xsZWN0aW9uQ3JlYXRpb25Kb2IoIGNvbnRlbnQgKQotICAgICAg ICAgICAgc2VsZi5qb2JzWyBqb2IgXSA9M0QgWyAoIE5vbmUsIGNvbnRlbnQgKSBdCi0gICAgICAg IGVsc2U6Ci0gICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb24gPTNEIGNvbnRlbnQKKyAgICAg ICAgaWYgY29udGVudC5jcmVhdGluZ19qb2JfYXNzb2NpYXRpb25zOgorICAgICAgICAgICAgZm9y IGFzc29jIGluIGNvbnRlbnQuY3JlYXRpbmdfam9iX2Fzc29jaWF0aW9uczoKKyAgICAgICAgICAg ICAgICBqb2IgPTNEIGFzc29jLmpvYgorICAgICAgICAgICAgICAgIGlmIGpvYiBub3QgaW4gc2Vs Zi5qb2JzIG9yIHNlbGYuam9ic1sgam9iIF1bIDAgXVsgMSBdLmhpc3Q9Cm9yeV9jb250ZW50X3R5 cGUgPTNEPTNEICJkYXRhc2V0IjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5qb2JzWyBqb2Ig XSA9M0QgWyAoIGFzc29jLm5hbWUsIGRhdGFzZXRfY29sbGVjdGlvPQpuICkgXQorICAgICAgICAg ICAgICAgICAgICBpZiBjb250ZW50LmltcGxpY2l0X291dHB1dF9uYW1lOgorICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZi5pbXBsaWNpdF9tYXBfam9icy5hcHBlbmQoIGpvYiApCisgICAgICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5qb2JzWyBqb2IgXS5hcHBl bmQoICggYXNzb2MubmFtZSwgZGF0YXNldF9jb2xsZWN0PQppb24gKSApCisgICAgICAgICMgVGhp cyB3aG9sZSBlbGlmIGNvbmRpdGlvbiBtYXkgbm8gbG9uZ2VyIGJlIG5lZWRlZCBkbyB0byBhZGRp dGlvbj0KYWwKKyAgICAgICAgIyB0cmFja2luZyB3aXRoIGNyZWF0aW5nX2pvYl9hc3NvY2lhdGlv bnMuIFdpbGwgZGVsZXRlIGF0IHNvbWUgcG9pPQpudC4KKyAgICAgICAgZWxpZiBjb250ZW50Lmlt cGxpY2l0X291dHB1dF9uYW1lOgogICAgICAgICAgICAgIyBUT0RPOiBPcHRpbWl6ZSBkYiBjYWxs CiAgICAgICAgICAgICBkYXRhc2V0X2luc3RhbmNlID0zRCBkYXRhc2V0X2NvbGxlY3Rpb24uY29s bGVjdGlvbi5kYXRhc2V0X2lucz0KdGFuY2VzWyAwIF0KICAgICAgICAgICAgIGlmIG5vdCBzZWxm Ll9fY2hlY2tfc3RhdGUoIGRhdGFzZXRfaW5zdGFuY2UgKToKQEAgLTIzNSw2ICsyNTMsOSBAQAog ICAgICAgICAgICAgICAgICAgICBzZWxmLmltcGxpY2l0X21hcF9qb2JzLmFwcGVuZCggam9iICkK ICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmpvYnNbIGpv YiBdLmFwcGVuZCggKCBhc3NvYy5uYW1lLCBkYXRhc2V0X2NvbGxlY3Q9CmlvbiApICkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIGpvYiA9M0QgRGF0YXNldENvbGxlY3Rpb25DcmVhdGlvbkpv YiggY29udGVudCApCisgICAgICAgICAgICBzZWxmLmpvYnNbIGpvYiBdID0zRCBbICggTm9uZSwg Y29udGVudCApIF0KPTIwCiAgICAgZGVmIF9fc3VtbWFyaXplX2RhdGFzZXQoIHNlbGYsIGRhdGFz ZXQgKToKICAgICAgICAgaWYgbm90IHNlbGYuX19jaGVja19zdGF0ZSggZGF0YXNldCApOgoKZGlm ZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5 NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBsaWIvZ2FsYXh5L3dvcmtmbG93L21v ZHVsZXMucHkKLS0tIGEvbGliL2dhbGF4eS93b3JrZmxvdy9tb2R1bGVzLnB5CisrKyBiL2xpYi9n YWxheHkvd29ya2Zsb3cvbW9kdWxlcy5weQpAQCAtNjQ5LDcgKzY0OSw5IEBACiAgICAgICAgIGRh dGFfb3V0cHV0cyA9M0QgW10KICAgICAgICAgZGF0YV9pbnB1dHMgPTNEIE5vbmUKICAgICAgICAg Zm9yIG5hbWUsIHRvb2xfb3V0cHV0IGluIHNlbGYudG9vbC5vdXRwdXRzLml0ZXJpdGVtcygpOgot ICAgICAgICAgICAgaWYgdG9vbF9vdXRwdXQuZm9ybWF0X3NvdXJjZSAhPTNEIE5vbmU6CisgICAg ICAgICAgICBpZiB0b29sX291dHB1dC5jb2xsZWN0aW9uOgorICAgICAgICAgICAgICAgIGZvcm1h dHMgPTNEIFsgJ2lucHV0JyBdCisgICAgICAgICAgICBlbGlmIHRvb2xfb3V0cHV0LmZvcm1hdF9z b3VyY2UgIT0zRCBOb25lOgogICAgICAgICAgICAgICAgIGZvcm1hdHMgPTNEIFsgJ2lucHV0JyBd ICAjIGRlZmF1bHQgdG8gc3BlY2lhbCBuYW1lICJpbnB1dCI9CiB3aGljaCByZW1vdmUgcmVzdHJp Y3Rpb25zIG9uIGNvbm5lY3Rpb25zCiAgICAgICAgICAgICAgICAgaWYgZGF0YV9pbnB1dHMgPTNE PTNEIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGRhdGFfaW5wdXRzID0zRCBzZWxmLmdldF9k YXRhX2lucHV0cygpCkBAIC04MjEsNiArODIzLDcgQEAKICAgICAgICAgICAgIHN0ZXBfb3V0cHV0 cyA9M0QgZGljdCggZXhlY3V0aW9uX3RyYWNrZXIuaW1wbGljaXRfY29sbGVjdGlvbnMgKQogICAg ICAgICBlbHNlOgogICAgICAgICAgICAgc3RlcF9vdXRwdXRzID0zRCBkaWN0KCBleGVjdXRpb25f dHJhY2tlci5vdXRwdXRfZGF0YXNldHMgKQorICAgICAgICAgICAgc3RlcF9vdXRwdXRzLnVwZGF0 ZSggZXhlY3V0aW9uX3RyYWNrZXIub3V0cHV0X2NvbGxlY3Rpb25zICkKICAgICAgICAgcHJvZ3Jl c3Muc2V0X3N0ZXBfb3V0cHV0cyggc3RlcCwgc3RlcF9vdXRwdXRzICkKICAgICAgICAgam9icyA9 M0QgZXhlY3V0aW9uX3RyYWNrZXIuc3VjY2Vzc2Z1bF9qb2JzCiAgICAgICAgIGZvciBqb2IgaW4g am9iczoKQEAgLTkwMCw2ICs5MDMsMTEgQEAKICAgICAgICAgICAgIGlmIHJlcGxhY2VtZW50X3Zh bHVlLmhpZGRlbl9iZW5lYXRoX2NvbGxlY3Rpb25faW5zdGFuY2U6CiAgICAgICAgICAgICAgICAg cmVwbGFjZW1lbnRfdmFsdWUgPTNEIHJlcGxhY2VtZW50X3ZhbHVlLmhpZGRlbl9iZW5lYXRoX2Nv bD0KbGVjdGlvbl9pbnN0YW5jZQogICAgICAgICAgICAgb3V0cHV0c1sgcmVwbGFjZW1lbnRfbmFt ZSBdID0zRCByZXBsYWNlbWVudF92YWx1ZQorICAgICAgICBmb3Igam9iX291dHB1dF9jb2xsZWN0 aW9uIGluIGpvYl8wLm91dHB1dF9kYXRhc2V0X2NvbGxlY3Rpb25faW5zdGE9Cm5jZXM6CisgICAg ICAgICAgICByZXBsYWNlbWVudF9uYW1lID0zRCBqb2Jfb3V0cHV0X2NvbGxlY3Rpb24ubmFtZQor ICAgICAgICAgICAgcmVwbGFjZW1lbnRfdmFsdWUgPTNEIGpvYl9vdXRwdXRfY29sbGVjdGlvbi5k YXRhc2V0X2NvbGxlY3Rpb249Cl9pbnN0YW5jZQorICAgICAgICAgICAgb3V0cHV0c1sgcmVwbGFj ZW1lbnRfbmFtZSBdID0zRCByZXBsYWNlbWVudF92YWx1ZQorCiAgICAgICAgIHByb2dyZXNzLnNl dF9zdGVwX291dHB1dHMoIHN0ZXAsIG91dHB1dHMgKQo9MjAKPTIwCgpkaWZmIC1yIDJhNjYzNTEw MzUzYmE4MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIgZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2 NjQ9Cjc5MDcxYmQzM2ExYjQ0N2Y0IGxpYi9nYWxheHkvd29ya2Zsb3cvcnVuLnB5Ci0tLSBhL2xp Yi9nYWxheHkvd29ya2Zsb3cvcnVuLnB5CisrKyBiL2xpYi9nYWxheHkvd29ya2Zsb3cvcnVuLnB5 CkBAIC0yNTEsNyArMjUxLDE4IEBACiAgICAgICAgIHN0ZXBfb3V0cHV0cyA9M0Qgc2VsZi5vdXRw dXRzWyBjb25uZWN0aW9uLm91dHB1dF9zdGVwLmlkIF0KICAgICAgICAgaWYgc3RlcF9vdXRwdXRz IGlzIFNURVBfT1VUUFVUX0RFTEFZRUQ6CiAgICAgICAgICAgICByYWlzZSBtb2R1bGVzLkRlbGF5 ZWRXb3JrZmxvd0V2YWx1YXRpb24oKQotICAgICAgICByZXR1cm4gc3RlcF9vdXRwdXRzWyBjb25u ZWN0aW9uLm91dHB1dF9uYW1lIF0KKyAgICAgICAgcmVwbGFjZW1lbnQgPTNEIHN0ZXBfb3V0cHV0 c1sgY29ubmVjdGlvbi5vdXRwdXRfbmFtZSBdCisgICAgICAgIGlmIGlzaW5zdGFuY2UoIHJlcGxh Y2VtZW50LCBtb2RlbC5IaXN0b3J5RGF0YXNldENvbGxlY3Rpb25Bc3NvY2lhdD0KaW9uICk6Cisg ICAgICAgICAgICBpZiBub3QgcmVwbGFjZW1lbnQuY29sbGVjdGlvbi5wb3B1bGF0ZWQ6CisgICAg ICAgICAgICAgICAgaWYgbm90IHJlcGxhY2VtZW50LmNvbGxlY3Rpb24ud2FpdGluZ19mb3JfZWxl bWVudHM6CisgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBl bGVtZW50cywgdGhlcmUgd2FzIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgIyBwcm9ibGVtIGNy ZWF0aW5nIHRoZSBjb2xsZWN0aW9uLiBDb2xsZWN0aW9uIHdpbGwgbmV2PQplcgorICAgICAgICAg ICAgICAgICAgICAjIGJlIHBvcHVsYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiBj b25zaWRlciBkaXN0aW5ndWlzaCBiZXR3ZWVuIGNhbmNlbGxlZCBhbmQgZmFpPQpsZWQ/CisgICAg ICAgICAgICAgICAgICAgIHJhaXNlIG1vZHVsZXMuQ2FuY2VsV29ya2Zsb3dFdmFsdWF0aW9uKCkK KworICAgICAgICAgICAgICAgIHJhaXNlIG1vZHVsZXMuRGVsYXllZFdvcmtmbG93RXZhbHVhdGlv bigpCisgICAgICAgIHJldHVybiByZXBsYWNlbWVudAo9MjAKICAgICBkZWYgc2V0X291dHB1dHNf Zm9yX2lucHV0KCBzZWxmLCBzdGVwLCBvdXRwdXRzPTNEe30gKToKICAgICAgICAgaWYgc2VsZi5p bnB1dHNfYnlfc3RlcF9pZDoKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQy N2RlMTgwYjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQg bGliL3Rvb2xfc2hlZC9zY3JpcHRzL2NoZWNrX3JlcG9zaXRvcmllc19mb3JfZnVuY3Rpb25hbF90 PQplc3RzLnB5Ci0tLSBhL2xpYi90b29sX3NoZWQvc2NyaXB0cy9jaGVja19yZXBvc2l0b3JpZXNf Zm9yX2Z1bmN0aW9uYWxfdGVzdHMucHkKKysrIGIvbGliL3Rvb2xfc2hlZC9zY3JpcHRzL2NoZWNr X3JlcG9zaXRvcmllc19mb3JfZnVuY3Rpb25hbF90ZXN0cy5weQpAQCAtMjUsOCArMjUsNiBAQAog ZnJvbSBpbnN0YWxsX2FuZF90ZXN0X3Rvb2xfc2hlZF9yZXBvc2l0b3JpZXMuYmFzZS51dGlsIGlt cG9ydCBnZXRfcmVwb3NpdG89CnJ5X2N1cnJlbnRfcmV2aXNpb24KIGZyb20gaW5zdGFsbF9hbmRf dGVzdF90b29sX3NoZWRfcmVwb3NpdG9yaWVzLmJhc2UudXRpbCBpbXBvcnQgUmVwb3NpdG9yeU1l PQp0YWRhdGFBcHBsaWNhdGlvbgogZnJvbSBnYWxheHkubW9kZWwub3JtIGltcG9ydCBhbmRfCi1m cm9tIGdhbGF4eS5tb2RlbC5vcm0gaW1wb3J0IG5vdF8KLWZyb20gZ2FsYXh5Lm1vZGVsLm9ybSBp bXBvcnQgc2VsZWN0CiBmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBsaXN0aWZ5CiBmcm9tIG1lcmN1 cmlhbCBpbXBvcnQgX192ZXJzaW9uX18KIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNl cgpAQCAtMzUsMTAgKzMzLDEyIEBACiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCAnY2hlY2tf cmVwb3NpdG9yaWVzX2Zvcl9mdW5jdGlvbmFsX3Rlc3RzJyApCiBhc3NlcnQgc3lzLnZlcnNpb25f aW5mb1sgOjIgXSA+PTNEICggMiwgNiApCj0yMAorCiBkZWYgY2hlY2tfYW5kX3VwZGF0ZV9yZXBv c2l0b3J5X21ldGFkYXRhKCBhcHAsIGluZm9fb25seT0zREZhbHNlLCB2ZXJib3NpdD0KeT0zRDEg KToKICAgICAiIiIKLSAgICBUaGlzIG1ldGhvZCB3aWxsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcmVj b3JkcyBpbiB0aGUgcmVwb3NpdG9yeV9tZXRhZGF0PQphIHRhYmxlLCBjaGVja2luZyBlYWNoIG9u ZSBmb3IgdG9vbCBtZXRhZGF0YSwKLSAgICB0aGVuIGNoZWNraW5nIHRoZSB0b29sIG1ldGFkYXRh IGZvciB0ZXN0cy4gIEVhY2ggdG9vbCdzIG1ldGFkYXRhIHNob3VsPQpkIGxvb2sgc29tZXRoaW5n IGxpa2U6CisgICAgVGhpcyBtZXRob2Qgd2lsbCBpdGVyYXRlIHRocm91Z2ggYWxsIHJlY29yZHMg aW4gdGhlIHJlcG9zaXRvcnlfbWV0YWRhdGEKKyAgICB0YWJsZSwgY2hlY2tpbmcgZWFjaCBvbmUg Zm9yIHRvb2wgbWV0YWRhdGEsIHRoZW4gY2hlY2tpbmcgdGhlIHRvb2wKKyAgICBtZXRhZGF0YSBm b3IgdGVzdHMuICBFYWNoIHRvb2wncyBtZXRhZGF0YSBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlr ZToKICAgICB7CiAgICAgICAiYWRkX3RvX3Rvb2xfcGFuZWwiOiB0cnVlLAogICAgICAgImRlc2Ny aXB0aW9uIjogIiIsCkBAIC02Myw3ICs2Myw2IEBACiAgICAgdG9vbF9jb3VudCA9M0QgMAogICAg IGhhc190ZXN0cyA9M0QgMAogICAgIG5vX3Rlc3RzID0zRCAwCi0gICAgbm9fdG9vbHMgPTNEIDAK ICAgICB2YWxpZF9yZXZpc2lvbnMgPTNEIDAKICAgICBpbnZhbGlkX3JldmlzaW9ucyA9M0QgMAog ICAgIHJlY29yZHNfY2hlY2tlZCA9M0QgMApAQCAtOTgsOSArOTcsOSBAQAogICAgICAgICBpZiBy ZXBvc2l0b3J5LmlkIG5vdCBpbiBjaGVja2VkX3JlcG9zaXRvcnlfaWRzOgogICAgICAgICAgICAg Y2hlY2tlZF9yZXBvc2l0b3J5X2lkcy5hcHBlbmQoIHJlcG9zaXRvcnkuaWQgKQogICAgICAgICBw cmludCAnIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS09Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCi0gICAgICAgIHBy aW50ICcjIENoZWNraW5nIHJldmlzaW9uICVzIG9mICVzIG93bmVkIGJ5ICVzLicgJSAoIGNoYW5n ZXNldF9yZT0KdmlzaW9uLCAgbmFtZSwgb3duZXIgKQorICAgICAgICBwcmludCAnIyBDaGVja2lu ZyByZXZpc2lvbiAlcyBvZiAlcyBvd25lZCBieSAlcy4nICUgKCBjaGFuZ2VzZXRfcmU9CnZpc2lv biwgbmFtZSwgb3duZXIgKQogICAgICAgICBpZiByZXBvc2l0b3J5X21ldGFkYXRhLmlkIGluIHNr aXBfbWV0YWRhdGFfaWRzOgotICAgICAgICAgICAgcHJpbnQnIyBTa2lwcGluZyByZXZpc2lvbiAl cyBvZiAlcyBvd25lZCBieSAlcyBiZWNhdXNlIHRoZSBza2k9CnBfdG9vbF90ZXN0IHNldHRpbmcg aGFzIGJlZW4gc2V0LicgJSAoIGNoYW5nZXNldF9yZXZpc2lvbiwgIG5hbWUsIG93bmVyICkKKyAg ICAgICAgICAgIHByaW50JyMgU2tpcHBpbmcgcmV2aXNpb24gJXMgb2YgJXMgb3duZWQgYnkgJXMg YmVjYXVzZSB0aGUgc2tpPQpwX3Rvb2xfdGVzdCBzZXR0aW5nIGhhcyBiZWVuIHNldC4nICUgKCBj aGFuZ2VzZXRfcmV2aXNpb24sIG5hbWUsIG93bmVyICkKICAgICAgICAgICAgIGNvbnRpbnVlCiAg ICAgICAgICMgSWYgdGhpcyBjaGFuZ2VzZXQgcmV2aXNpb24gaGFzIG5vIHRvb2xzLCB3ZSBkb24n dCBuZWVkIHRvIGRvIGFueT0KdGhpbmcgaGVyZSwgdGhlIGluc3RhbGwgYW5kIHRlc3Qgc2NyaXB0 IGhhcyBhIGZpbHRlciBmb3IgcmV0dXJuaW5nCiAgICAgICAgICMgb25seSByZXBvc2l0b3JpZXMg dGhhdCBjb250YWluIHRvb2xzLgpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgICAgIGlmIHRvb2xf ZGljdHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAjIENsb25lIHRoZSByZXBvc2l0b3J5IHVw IHRvIHRoZSBjaGFuZ2VzZXQgcmV2aXNpb24gd2UncmUgY2hlYz0Ka2luZy4KICAgICAgICAgICAg IHJlcG9fZGlyID0zRCByZXBvc2l0b3J5LnJlcG9fcGF0aCggYXBwICkKLSAgICAgICAgICAgIHJl cG8gPTNEIGhnX3V0aWwuZ2V0X3JlcG9fZm9yX3JlcG9zaXRvcnkoIGFwcCwgcmVwb3NpdG9yeT0z RE5vPQpuZSwgcmVwb19wYXRoPTNEcmVwb19kaXIsIGNyZWF0ZT0zREZhbHNlICkKKyAgICAgICAg ICAgIGhnX3V0aWwuZ2V0X3JlcG9fZm9yX3JlcG9zaXRvcnkoIGFwcCwgcmVwb3NpdG9yeT0zRE5v bmUsIHJlcG9fPQpwYXRoPTNEcmVwb19kaXIsIGNyZWF0ZT0zREZhbHNlICkKICAgICAgICAgICAg IHdvcmtfZGlyID0zRCB0ZW1wZmlsZS5ta2R0ZW1wKCBwcmVmaXg9M0QidG1wLXRvb2xzaGVkLWNh ZnIiICApCiAgICAgICAgICAgICBjbG9uZWRfb2ssIGVycm9yX21lc3NhZ2UgPTNEIGhnX3V0aWwu Y2xvbmVfcmVwb3NpdG9yeSggcmVwb19kaT0Kciwgd29ya19kaXIsIGNoYW5nZXNldF9yZXZpc2lv biApCiAgICAgICAgICAgICBpZiBjbG9uZWRfb2s6CkBAIC0xMjcsMTAgKzEyNiwxMyBAQAogICAg ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwcmludCAnIyBUZXN0IGRhdGEgZGlyZWN0 b3J5IG1pc3NpbmcgaW4gY2hhbmdlc2V0IHJldmlzaW9uPQogJXMgb2YgcmVwb3NpdG9yeSAlcyBv d25lZCBieSAlcy4nICUgKCBjaGFuZ2VzZXRfcmV2aXNpb24sIG5hbWUsIG93bmVyICkKICAgICAg ICAgICAgIHByaW50ICcjIENoZWNraW5nIGZvciBmdW5jdGlvbmFsIHRlc3RzIGluIGNoYW5nZXNl dCByZXZpc2lvbiAlPQpzIG9mICVzLCBvd25lZCBieSAlcy4nICUgXAotICAgICAgICAgICAgICAg ICggY2hhbmdlc2V0X3JldmlzaW9uLCAgbmFtZSwgb3duZXIgKQotICAgICAgICAgICAgIyBJbnNw ZWN0IGVhY2ggdG9vbF9kaWN0IGZvciBkZWZpbmVkIGZ1bmN0aW9uYWwgdGVzdHMuICBJZiB0aGU9 CnJlIGFyZSBubyB0ZXN0cywgdGhpcyB0b29sIHNob3VsZCBub3QgYmUgdGVzdGVkLCBzaW5jZSB0 aGUKLSAgICAgICAgICAgICMgdG9vbCBmdW5jdGlvbmFsIHRlc3RzIG9ubHkgcmVwb3J0IGZhaWx1 cmUgaWYgdGhlIHRlc3QgaXRzZWxmPQogZmFpbHMsIG5vdCBpZiBpdCdzIG1pc3Npbmcgb3IgdW5k ZWZpbmVkLiBGaWx0ZXJpbmcgb3V0IHRob3NlCi0gICAgICAgICAgICAjIHJlcG9zaXRvcmllcyBh dCB0aGlzIHN0ZXAgd2lsbCByZWR1Y2UgdGhlIG51bWJlciBvZiAiZmFsc2Ugbj0KZWdhdGl2ZXMi IHRoZSBhdXRvbWF0ZWQgZnVuY3Rpb25hbCB0ZXN0IGZyYW1ld29yayBwcm9kdWNlcy4KKyAgICAg ICAgICAgICAgICAoIGNoYW5nZXNldF9yZXZpc2lvbiwgbmFtZSwgb3duZXIgKQorICAgICAgICAg ICAgIyBJbnNwZWN0IGVhY2ggdG9vbF9kaWN0IGZvciBkZWZpbmVkIGZ1bmN0aW9uYWwgdGVzdHMu ICBJZiB0aGU9CnJlCisgICAgICAgICAgICAjIGFyZSBubyB0ZXN0cywgdGhpcyB0b29sIHNob3Vs ZCBub3QgYmUgdGVzdGVkLCBzaW5jZSB0aGUgdG9vbAorICAgICAgICAgICAgIyBmdW5jdGlvbmFs IHRlc3RzIG9ubHkgcmVwb3J0IGZhaWx1cmUgaWYgdGhlIHRlc3QgaXRzZWxmIGZhaWw9CnMsCisg ICAgICAgICAgICAjIG5vdCBpZiBpdCdzIG1pc3Npbmcgb3IgdW5kZWZpbmVkLiBGaWx0ZXJpbmcg b3V0IHRob3NlCisgICAgICAgICAgICAjIHJlcG9zaXRvcmllcyBhdCB0aGlzIHN0ZXAgd2lsbCBy ZWR1Y2UgdGhlIG51bWJlciBvZiAiZmFsc2UKKyAgICAgICAgICAgICMgbmVnYXRpdmVzIiB0aGUg YXV0b21hdGVkIGZ1bmN0aW9uYWwgdGVzdCBmcmFtZXdvcmsgcHJvZHVjZXMuCiAgICAgICAgICAg ICBmb3IgdG9vbF9kaWN0IGluIHRvb2xfZGljdHM6CiAgICAgICAgICAgICAgICAgZmFpbHVyZV9y ZWFzb24gPTNEICcnCiAgICAgICAgICAgICAgICAgcHJvYmxlbV9mb3VuZCA9M0QgRmFsc2UKQEAg LTE0NywxNiArMTQ5LDE2IEBACiAgICAgICAgICAgICAgICAgaWYgZGVmaW5lZF90ZXN0X2RpY3Rz IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gaW5zcGVjdCB0 aGUgPHRlc3Q+IHRhZ3MgYmVjYXVzZSB0aGUgZm9sbG89CndpbmcgdGFncy4uLgogICAgICAgICAg ICAgICAgICAgICAjIDx0ZXN0cz4KLSAgICAgICAgICAgICAgICAgICAgIyA8L3Rlc3RzPj0yMAor ICAgICAgICAgICAgICAgICAgICAjIDwvdGVzdHM+CiAgICAgICAgICAgICAgICAgICAgICMgLi4u d2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGE6CiAgICAgICAgICAgICAgICAgICAg ICMgInRlc3RzIjogW10KICAgICAgICAgICAgICAgICAgICAgIyBBbmQgdGhlIGZvbGxvd2luZyB0 YWdzLi4uCiAgICAgICAgICAgICAgICAgICAgICMgPHRlc3RzPgogICAgICAgICAgICAgICAgICAg ICAjICAgICA8dGVzdD4KICAgICAgICAgICAgICAgICAgICAgIyAgICA8L3Rlc3Q+Ci0gICAgICAg ICAgICAgICAgICAgICMgPC90ZXN0cz49MjAKKyAgICAgICAgICAgICAgICAgICAgIyA8L3Rlc3Rz PgogICAgICAgICAgICAgICAgICAgICAjIC4uLndpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIG1l dGFkYXRhOgotICAgICAgICAgICAgICAgICAgICAjICJ0ZXN0cyI6PTIwCisgICAgICAgICAgICAg ICAgICAgICMgInRlc3RzIjoKICAgICAgICAgICAgICAgICAgICAgIyAgICBbeyJpbnB1dHMiOiBb XSwgIm5hbWUiOiAiVGVzdC0xIiwgIm91dHB1dHMiOiBbXSwgPQoicmVxdWlyZWRfZmlsZXMiOiBb XX1dCiAgICAgICAgICAgICAgICAgICAgIGZvciBkZWZpbmVkX3Rlc3RfZGljdCBpbiBkZWZpbmVk X3Rlc3RfZGljdHM6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgPTNEIGRlZmluZWRf dGVzdF9kaWN0LmdldCggJ2lucHV0cycsIFtdICkKQEAgLTE5NCw3ICsxOTYsNyBAQAogICAgICAg ICAgICAgICAgICAgICBpZiB0ZXN0X2Vycm9ycyBub3QgaW4gbWlzc2luZ190ZXN0X2NvbXBvbmVu dHM6CiAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nX3Rlc3RfY29tcG9uZW50cy5hcHBl bmQoIHRlc3RfZXJyb3JzICkKICAgICAgICAgICAgICAgICBpZiB0b29sX2hhc19kZWZpbmVkX3Rl c3RzIGFuZCB0b29sX2hhc190ZXN0X2ZpbGVzOgotICAgICAgICAgICAgICAgICAgICBwcmludCAn IyBSZXZpc2lvbiAlcyBvZiAlcyBvd25lZCBieSAlcyBpcyBhIHRlc3RhYmxlIHI9CmV2aXNpb24u JyAlICggY2hhbmdlc2V0X3JldmlzaW9uLCAgbmFtZSwgb3duZXIgKQorICAgICAgICAgICAgICAg ICAgICBwcmludCAnIyBSZXZpc2lvbiAlcyBvZiAlcyBvd25lZCBieSAlcyBpcyBhIHRlc3RhYmxl IHI9CmV2aXNpb24uJyAlICggY2hhbmdlc2V0X3JldmlzaW9uLCBuYW1lLCBvd25lciApCiAgICAg ICAgICAgICAgICAgICAgIHRlc3RhYmxlX3JldmlzaW9uID0zRCBUcnVlCiAgICAgICAgICAgICAj IFJlbW92ZSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgcGF0aC4gVGhpcyBoYXMgdG8gYmUgZG9uZSBh ZnRlcj0KIHRoZSBjaGVjayBmb3IgcmVxdWlyZWQgdGVzdCBmaWxlcywgZm9yIG9idmlvdXMgcmVh c29ucy4KICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCB3b3JrX2RpciApOgpAQCAtMjI2 LDggKzIyOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgdGVzdF9lbnZpcm9ubWVu dCBlbnRyeS4gIElmIHdlIHVzZSBpdCB3ZSBuZWVkID0KdG8gdGVtcG9yYXJpbHkgZWxpbWluYXRl IGl0IGZyb20gdGhlIGxpc3Qgb2YgdG9vbF90ZXN0X3Jlc3VsdHNfZGljdHMKICAgICAgICAgICAg ICAgICAgICAgICAgICMgc2luY2UgaXQgd2lsbCBiZSByZS1pbnNlcnRlZCBsYXRlci4KICAgICAg ICAgICAgICAgICAgICAgICAgIHRvb2xfdGVzdF9yZXN1bHRzX2RpY3QgPTNEIHRvb2xfdGVzdF9y ZXN1bHRzX2RpY3RzPQoucG9wKCAwICkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBsZW4oIHRv b2xfdGVzdF9yZXN1bHRzX2RpY3QgKSA9M0Q9M0QgMiBhbmQgXAotICAgICAgICAgICAgICAgICAg ICAgICAgJ3Rlc3RfZW52aXJvbm1lbnQnIGluIHRvb2xfdGVzdF9yZXN1bHRzX2RpY3QgYW5kICc9 Cm1pc3NpbmdfdGVzdF9jb21wb25lbnRzJyBpbiB0b29sX3Rlc3RfcmVzdWx0c19kaWN0OgorICAg ICAgICAgICAgICAgICAgICBlbGlmIChsZW4oIHRvb2xfdGVzdF9yZXN1bHRzX2RpY3QgKSA9M0Q9 M0QgMiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZW52aXJvbm1lbnQnIGlu IHRvb2xfdGVzdF9yZXN1bHRzX2RpY3QgYW5kPQogJ21pc3NpbmdfdGVzdF9jb21wb25lbnRzJyBp biB0b29sX3Rlc3RfcmVzdWx0c19kaWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICMgV2Ug Y2FuIHJlLXVzZSB0b29sX3Rlc3RfcmVzdWx0c19kaWN0IGlmIGl0cyBvbmx5PQogZW50cmllcyBh cmUgInRlc3RfZW52aXJvbm1lbnQiIGFuZCAibWlzc2luZ190ZXN0X2NvbXBvbmVudHMiLgogICAg ICAgICAgICAgICAgICAgICAgICAgIyBJbiB0aGlzIGNhc2UsIHNvbWUgdG9vbHMgYXJlIG1pc3Np bmcgdGVzdHMgY29tcG89Cm5lbnRzIHdoaWxlIG90aGVycyBhcmUgbm90LgogICAgICAgICAgICAg ICAgICAgICAgICAgdG9vbF90ZXN0X3Jlc3VsdHNfZGljdCA9M0QgdG9vbF90ZXN0X3Jlc3VsdHNf ZGljdHM9Ci5wb3AoIDAgKQpAQCAtMjYwLDE5ICsyNjIsMjIgQEAKICAgICAgICAgICAgICAgICAg ICAgIyAgICBJbiB0aGUgaW5zdGFsbCBhbmQgdGVzdCBzY3JpcHQsIHRoaXMgYmVoYXZpb3IgaXMg PQpzbGlnaHRseSBkaWZmZXJlbnQsIHNpbmNlIHdlIGRvIHdhbnQgdG8gYWx3YXlzIHJ1biBmdW5j dGlvbmFsCiAgICAgICAgICAgICAgICAgICAgICMgICAgdGVzdHMgb24gdGhlIG1vc3QgcmVjZW50 IGRvd25sb2FkYWJsZSBjaGFuZ2VzZXQgcj0KZXZpc2lvbi4KICAgICAgICAgICAgICAgICAgICAg aWYgc2hvdWxkX3NldF9kb19ub3RfdGVzdF9mbGFnKCBhcHAsIHJlcG9zaXRvcnksIGNoYW5nPQpl c2V0X3JldmlzaW9uLCB0ZXN0YWJsZV9yZXZpc2lvbiApOgotICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnQgIiMgU2V0dGluZyBkb19ub3RfdGVzdCB0byBUcnVlIG9uIHJldmlzaW9uICU9CnMg b2YgJXMgb3duZWQgYnkgJXMgYmVjYXVzZSBpdCBpcyBtaXNzaW5nIHRlc3QgY29tcG9uZW50cyIg JSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjaGFuZ2VzZXRfcmV2aXNpb24sICBu YW1lLCBvd25lciApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIyBTZXR0aW5nIGRv X25vdF90ZXN0IHRvIFRydWUgb24gcmV2aXNpb24gJT0KcyBvZiAlcyBvd25lZCBieSAlcyBiZWNh dXNlIGl0IGlzIG1pc3NpbmcgdGVzdCBjb21wb25lbnRzIiAlICgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFuZ2VzZXRfcmV2aXNpb24sIG5hbWUsIG93bmVyCisgICAgICAgICAgICAg ICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIyBhbmQgaXQgaXMg bm90IHRoZSBsYXRlc3QgZG93bmxvYWRhYmxlIHJldj0KaXNpb24uIgogICAgICAgICAgICAgICAg ICAgICAgICAgcmVwb3NpdG9yeV9tZXRhZGF0YS5kb19ub3RfdGVzdCA9M0QgVHJ1ZQogICAgICAg ICAgICAgICAgICAgICBpZiBub3QgdGVzdGFibGVfcmV2aXNpb246CiAgICAgICAgICAgICAgICAg ICAgICAgICAjIEV2ZW4gdGhvdWdoIHNvbWUgdG9vbHMgbWF5IGJlIG1pc3NpbmcgdGVzdCBjb21w bz0KbmVudHMsIGl0IG1heSBiZSBwb3NzaWJsZSB0byB0ZXN0IG90aGVyIHRvb2xzLiAgU2luY2Ug dGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGluc3RhbGwgYW5kIHRlc3QgZnJhbWV3b3Jr IGZpbHRlcnMgb3V0IHJlcG9zaXRvcj0KaWVzIG1hcmtlZCBhcyBtaXNzaW5nIHRlc3QgY29tcG9u ZW50cywgd2UnbGwgc2V0IGl0IG9ubHkgaWYKICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8g dG9vbHMgY2FuIGJlIHRlc3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICcjIFNl dHRpbmcgbWlzc2luZ190ZXN0X2NvbXBvbmVudHMgdG8gVHJ1ZSBmPQpvciByZXZpc2lvbiAlcyBv ZiAlcyBvd25lZCBieSAlcyBiZWNhdXNlIGFsbCB0b29scyBhcmUgbWlzc2luZyB0ZXN0IGNvbXBv bmU9Cm50cy4nICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICggY2hhbmdlc2V0X3Jl dmlzaW9uLCAgbmFtZSwgb3duZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyMg U2V0dGluZyBtaXNzaW5nX3Rlc3RfY29tcG9uZW50cyB0byBUcnVlIGY9Cm9yIHJldmlzaW9uICVz IG9mICVzIG93bmVkIGJ5ICVzIGJlY2F1c2UgYWxsIHRvb2xzIGFyZSBtaXNzaW5nIHRlc3QgY29t cG9uZT0KbnRzLicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0X3Jl dmlzaW9uLCBuYW1lLCBvd25lcgorICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAg ICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9tZXRhZGF0YS5taXNzaW5nX3Rlc3RfY29tcG9uZW50 cyA9M0QgVHI9CnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIyBTZXR0aW5nIHRv b2xzX2Z1bmN0aW9uYWxseV9jb3JyZWN0IHRvIEZhbD0Kc2Ugb24gcmV2aXNpb24gJXMgb2YgJXMg b3duZWQgYnkgJXMgYmVjYXVzZSBpdCBpcyBtaXNzaW5nIHRlc3QgY29tcG9uZW50cyIgPQolIFwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGNoYW5nZXNldF9yZXZpc2lvbiwgIG5hbWUs IG93bmVyICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIjIFNldHRpbmcgdG9vbHNf ZnVuY3Rpb25hbGx5X2NvcnJlY3QgdG8gRmFsPQpzZSBvbiByZXZpc2lvbiAlcyBvZiAlcyBvd25l ZCBieSAlcyBiZWNhdXNlIGl0IGlzIG1pc3NpbmcgdGVzdCBjb21wb25lbnRzIiA9CiUgKAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNldF9yZXZpc2lvbiwgbmFtZSwgb3duZXIK KyAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9z aXRvcnlfbWV0YWRhdGEudG9vbHNfZnVuY3Rpb25hbGx5X2NvcnJlY3QgPTNEPQogRmFsc2UKICAg ICAgICAgICAgICAgICAgICAgdG9vbF90ZXN0X3Jlc3VsdHNfZGljdFsgJ21pc3NpbmdfdGVzdF9j b21wb25lbnRzJyBdID0KPTNEIG1pc3NpbmdfdGVzdF9jb21wb25lbnRzCiAgICAgICAgICAgICAg ICAgIyBTdG9yZSBvbmx5IHRoZSBjb25maWd1cmVkIG51bWJlciBvZiB0ZXN0IHJ1bnMuCkBAIC0y OTksNiArMzA0LDcgQEAKICAgICBwcmludCAiIyBFbGFwc2VkIHRpbWU6ICIsIHN0b3AgLSBzdGFy dAogICAgIHByaW50ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyM9CiMjIyMjIyMjIyMjIyMjIgo9MjAKKwogZGVmIGNoZWNrX2Zv cl9taXNzaW5nX3Rlc3RfZmlsZXMoIHRlc3RfZGVmaW5pdGlvbiwgdGVzdF9kYXRhX3BhdGggKToK ICAgICAnJydQcm9jZXNzIHRoZSB0b29sJ3MgZnVuY3Rpb25hbCB0ZXN0IGRlZmluaXRpb25zIGFu ZCBjaGVjayBmb3IgZWFjaCBmPQppbGUgc3BlY2lmaWVkIGFzIGFuIGlucHV0IG9yIG91dHB1dC4n JycKICAgICBtaXNzaW5nX3Rlc3RfZmlsZXMgPTNEIFtdCkBAIC0zMTQsNiArMzIwLDcgQEAKICAg ICAgICAgICAgIG1pc3NpbmdfdGVzdF9maWxlcy5hcHBlbmQoIHJlcXVpcmVkX2ZpbGUgKQogICAg IHJldHVybiBtaXNzaW5nX3Rlc3RfZmlsZXMKPTIwCisKIGRlZiBtYWluKCk6CiAgICAgJycnU2Ny aXB0IHRoYXQgY2hlY2tzIHJlcG9zaXRvcmllcyB0byBzZWUgaWYgdGhlIHRvb2xzIGNvbnRhaW5l ZCB3aXRoaT0KbiB0aGVtIGhhdmUgZnVuY3Rpb25hbCB0ZXN0cyBkZWZpbmVkLicnJwogICAgIHBh cnNlciA9M0QgT3B0aW9uUGFyc2VyKCkKQEAgLTMyOSw3ICszMzYsNyBAQAogICAgIGV4Y2VwdCBJ bmRleEVycm9yOgogICAgICAgICBwcmludCAiVXNhZ2U6IHB5dGhvbiAlcyA8dG9vbCBzaGVkIC5p bmkgZmlsZT4gW29wdGlvbnNdIiAlIHN5cy5hcmc9CnZbIDAgXQogICAgICAgICBleGl0KCAxMjcg KQotICAgIGNvbmZpZ19wYXJzZXIgPTNEIENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoIHsnaGVy ZSc6b3MuZ2V0Y3dkKCkgfSApCisgICAgY29uZmlnX3BhcnNlciA9M0QgQ29uZmlnUGFyc2VyLkNv bmZpZ1BhcnNlciggeyAnaGVyZSc6IG9zLmdldGN3ZCgpIH0gKQogICAgIGNvbmZpZ19wYXJzZXIu cmVhZCggaW5pX2ZpbGUgKQogICAgIGNvbmZpZ19kaWN0ID0zRCB7fQogICAgIGZvciBrZXksIHZh bHVlIGluIGNvbmZpZ19wYXJzZXIuaXRlbXMoICJhcHA6bWFpbiIgKToKQEAgLTM0OSw2ICszNTYs NyBAQAogICAgICAgICBwcmludCAiIyBEaXNwbGF5aW5nIGV4dHJhIGluZm9ybWF0aW9uICggLS12 ZXJib3NpdHkgPTNEICVkICkiICUgb3A9CnRpb25zLnZlcmJvc2l0eQogICAgIGNoZWNrX2FuZF91 cGRhdGVfcmVwb3NpdG9yeV9tZXRhZGF0YSggYXBwLCBpbmZvX29ubHk9M0RvcHRpb25zLmluZm9f b249Cmx5LCB2ZXJib3NpdHk9M0RvcHRpb25zLnZlcmJvc2l0eSApCj0yMAorCiBkZWYgc2hvdWxk X3NldF9kb19ub3RfdGVzdF9mbGFnKCBhcHAsIHJlcG9zaXRvcnksIGNoYW5nZXNldF9yZXZpc2lv biwgdGVzdD0KYWJsZV9yZXZpc2lvbiApOgogICAgICIiIgogICAgIFRoZSByZWNlaXZlZCB0ZXN0 YWJsZV9yZXZpc2lvbiBpcyBUcnVlIGlmIHRoZSB0b29sIGhhcyBkZWZpbmVkIHRlc3RzIGE9Cm5k IHRlc3QgZmlsZXMgYXJlIGluIHRoZSByZXBvc2l0b3J5CgpkaWZmIC1yIDJhNjYzNTEwMzUzYmE4 MjY4ZGVmZjA2M2JhNTBkMjdkZTE4MGI4ODkgLXIgZDgzNjg3MTk0Y2NmODQ5ZjAzYzE2NjQ9Cjc5 MDcxYmQzM2ExYjQ0N2Y0IHN0YXRpYy9zY3JpcHRzL212Yy91aS91aS1wb3J0bGV0LmpzCi0tLSBh L3N0YXRpYy9zY3JpcHRzL212Yy91aS91aS1wb3J0bGV0LmpzCisrKyBiL3N0YXRpYy9zY3JpcHRz L212Yy91aS91aS1wb3J0bGV0LmpzCkBAIC00NCwxNyArNDQsOCBAQAogICAgICAgICAvLyBsaW5r IGhlYWRlcgogICAgICAgICB0aGlzLiRoZWFkZXIgPTNEIHRoaXMuJGVsLmZpbmQoJy5wb3J0bGV0 LWhlYWRlcicpOwogICAgICAgID0yMAotICAgICAgICAvLyBzZXQgY29udGVudCBmb3JtYXQKKyAg ICAgICAgLy8gbGluayBwb3J0bGV0IGNvbnRlbnQgKHdyYXBzICdjb250ZW50JykKICAgICAgICAg dmFyICRwb3J0bGV0X2NvbnRlbnQgPTNEIHRoaXMuJGVsLmZpbmQoJy5wb3J0bGV0LWNvbnRlbnQn KTsKLSAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2Nyb2xsYWJsZSkgewotICAgICAgICAgICAg aWYgKHRoaXMub3B0aW9ucy50aXRsZSkgewotICAgICAgICAgICAgICAgICRwb3J0bGV0X2NvbnRl bnQuYWRkQ2xhc3MoJ25vLXNjcm9sbCcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAkcG9ydGxldF9jb250ZW50LmFkZENsYXNzKCduby1zY3JvbGwtbm8tdGl0bGUnKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRwb3J0bGV0X2Nv bnRlbnQuYWRkQ2xhc3MoJ3Njcm9sbCcpOwotICAgICAgICB9CiAgICAgICAgPTIwCiAgICAgICAg IC8vIHNldCBjb250ZW50IHBhZGRpbmcKICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub3BhZGRp bmcpIHsKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgwYjg4OSAt ciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgc3RhdGljL3Njcmlw dHMvcGFja2VkL212Yy91aS91aS1wb3J0bGV0LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tl ZC9tdmMvdWkvdWktcG9ydGxldC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Vp L3VpLXBvcnRsZXQuanMKQEAgLTEsMSArMSwxIEBACi1kZWZpbmUoWyJ1dGlscy91dGlscyJdLGZ1 bmN0aW9uKGEpe3ZhciBiPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe3Zpc2libGU6Zj0KYWxzZSxv cHRpb25zRGVmYXVsdDp7dGl0bGU6IiIsaWNvbjoiIixidXR0b25zOm51bGwsYm9keTpudWxsLHNj cm9sbGFibGU6dHJ1PQplLG5vcGFkZGluZzpmYWxzZSxvcGVyYXRpb25zOm51bGwscGxhY2VtZW50 OiJib3R0b20iLGNsczoidWktcG9ydGxldCIsb3BlcmE9CnRpb25zX2ZsdDoicmlnaHQifSwkdGl0 bGU6bnVsbCwkY29udGVudDpudWxsLCRidXR0b25zOm51bGwsJG9wZXJhdGlvbnM6bnVsbD0KLCRo ZWFkZXI6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz0zRGEubWVyZ2Uo ZSx0aGlzLm9wdGlvbnNEPQplZmF1bHQpO3RoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0 aGlzLm9wdGlvbnMpKTt0aGlzLiRjb250ZW50PTNEdGhpcy49CiRlbC5maW5kKCIuY29udGVudCIp O3RoaXMuJHRpdGxlPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtdGl0bGUtdGV4dCIpO3RoaT0K cy4kaGVhZGVyPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtaGVhZGVyIik7dmFyIGQ9M0R0aGlz LiRlbC5maW5kKCIucG9ydGxlPQp0LWNvbnRlbnQiKTtpZighdGhpcy5vcHRpb25zLnNjcm9sbGFi bGUpe2lmKHRoaXMub3B0aW9ucy50aXRsZSl7ZC5hZGRDbGFzcyg9CiJuby1zY3JvbGwiKX1lbHNl e2QuYWRkQ2xhc3MoIm5vLXNjcm9sbC1uby10aXRsZSIpfX1lbHNle2QuYWRkQ2xhc3MoInNjcm9s bD0KIil9aWYodGhpcy5vcHRpb25zLm5vcGFkZGluZyl7ZC5jc3MoInBhZGRpbmciLCIwcHgiKTt0 aGlzLiRjb250ZW50LmNzcygicGFkPQpkaW5nIiwiMHB4Iil9dGhpcy4kYnV0dG9ucz0zRCQodGhp cy5lbCkuZmluZCgiLmJ1dHRvbnMiKTtpZih0aGlzLm9wdGlvbnMuYnU9CnR0b25zKXt2YXIgYz0z RHRoaXM7JC5lYWNoKHRoaXMub3B0aW9ucy5idXR0b25zLGZ1bmN0aW9uKGYsZyl7Zy4kZWwucHJv cCgiaT0KZCIsZik7Yy4kYnV0dG9ucy5hcHBlbmQoZy4kZWwpfSl9ZWxzZXt0aGlzLiRidXR0b25z LnJlbW92ZSgpfXRoaXMuJG9wZXJhdGlvPQpucz0zRCQodGhpcy5lbCkuZmluZCgiLm9wZXJhdGlv bnMiKTtpZih0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyl7dmFyIGM9M0R0aGk9CnM7JC5lYWNoKHRo aXMub3B0aW9ucy5vcGVyYXRpb25zLGZ1bmN0aW9uKGYsZyl7Zy4kZWwucHJvcCgiaWQiLGYpO2Mu JG9wZXJhdD0KaW9ucy5hcHBlbmQoZy4kZWwpfSl9aWYodGhpcy5vcHRpb25zLmJvZHkpe3RoaXMu YXBwZW5kKHRoaXMub3B0aW9ucy5ib2R5KX19PQosYXBwZW5kOmZ1bmN0aW9uKGQsYyl7aWYoYyl7 dGhpcy4kY29udGVudC5hcHBlbmQoZCl9ZWxzZXt0aGlzLiRjb250ZW50LmFwcGU9Cm5kKGEud3Jh cChkKSl9fSxjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNvbnRlbnR9LHNob3c6ZnVu Y3Rpb24oKXt0aD0KaXMuJGVsLmZhZGVJbigiZmFzdCIpO3RoaXMudmlzaWJsZT0zRHRydWV9LGhp ZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5mYWRlT3V0PQooImZhc3QiKTt0aGlzLnZpc2libGU9M0Rm YWxzZX0sZW5hYmxlQnV0dG9uOmZ1bmN0aW9uKGMpe3RoaXMuJGJ1dHRvbnMuZmluZCg9CiIjIitj KS5wcm9wKCJkaXNhYmxlZCIsZmFsc2UpfSxkaXNhYmxlQnV0dG9uOmZ1bmN0aW9uKGMpe3RoaXMu JGJ1dHRvbnMuZmluZD0KKCIjIitjKS5wcm9wKCJkaXNhYmxlZCIsdHJ1ZSl9LGhpZGVPcGVyYXRp b246ZnVuY3Rpb24oYyl7dGhpcy4kb3BlcmF0aW9ucy5mPQppbmQoIiMiK2MpLmhpZGUoKX0sc2hv d09wZXJhdGlvbjpmdW5jdGlvbihjKXt0aGlzLiRvcGVyYXRpb25zLmZpbmQoIiMiK2MpLnM9Cmhv dygpfSxzZXRPcGVyYXRpb246ZnVuY3Rpb24oZSxkKXt2YXIgYz0zRHRoaXMuJG9wZXJhdGlvbnMu ZmluZCgiIyIrZSk7Yy5vZj0KZigiY2xpY2siKTtjLm9uKCJjbGljayIsZCl9LHRpdGxlOmZ1bmN0 aW9uKGQpe3ZhciBjPTNEdGhpcy4kdGl0bGU7aWYoZCl7Yy5oPQp0bWwoZCl9cmV0dXJuIGMuaHRt bCgpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9M0QnPGRpdiBpZD0zRCInK2QuaWQrJyI9 CiBjbGFzcz0zRCInK2QuY2xzKyciPic7aWYoZC50aXRsZSl7Yys9M0QnPGRpdiBjbGFzcz0zRCJw b3J0bGV0LWhlYWRlciI+PGRpdj0KIGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEImZsb2F0 OiAnK2Qub3BlcmF0aW9uc19mbHQrJzsiPjwvZGl2PjxkaXYgY2xhPQpzcz0zRCJwb3J0bGV0LXRp dGxlIj4nO2lmKGQuaWNvbil7Yys9M0QnPGkgY2xhc3M9M0QiaWNvbiBmYSAnK2QuaWNvbisnIj4m bmI9CnNwOzwvaT4nfWMrPTNEJzxzcGFuIGNsYXNzPTNEInBvcnRsZXQtdGl0bGUtdGV4dCI+Jytk LnRpdGxlKyI8L3NwYW4+PC9kaXY+PD0KL2Rpdj4ifWMrPTNEJzxkaXYgY2xhc3M9M0QicG9ydGxl dC1jb250ZW50Ij4nO2lmKGQucGxhY2VtZW50PTNEPTNEInRvcCIpe2MrPQo9M0QnPGRpdiBjbGFz cz0zRCJidXR0b25zIj48L2Rpdj4nfWMrPTNEJzxkaXYgY2xhc3M9M0QiY29udGVudCI+PC9kaXY+ JztpZig9CmQucGxhY2VtZW50PTNEPTNEImJvdHRvbSIpe2MrPTNEJzxkaXYgY2xhc3M9M0QiYnV0 dG9ucyI+PC9kaXY+J31jKz0zRCI8L2Rpdj0KPjwvZGl2PiI7cmV0dXJuIGN9fSk7cmV0dXJue1Zp ZXc6Yn19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoWyJ1dGlscy91dGls cyJdLGZ1bmN0aW9uKGEpe3ZhciBiPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe3Zpc2libGU6Zj0K YWxzZSxvcHRpb25zRGVmYXVsdDp7dGl0bGU6IiIsaWNvbjoiIixidXR0b25zOm51bGwsYm9keTpu dWxsLHNjcm9sbGFibGU6dHJ1PQplLG5vcGFkZGluZzpmYWxzZSxvcGVyYXRpb25zOm51bGwscGxh Y2VtZW50OiJib3R0b20iLGNsczoidWktcG9ydGxldCIsb3BlcmE9CnRpb25zX2ZsdDoicmlnaHQi fSwkdGl0bGU6bnVsbCwkY29udGVudDpudWxsLCRidXR0b25zOm51bGwsJG9wZXJhdGlvbnM6bnVs bD0KLCRoZWFkZXI6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz0zRGEu bWVyZ2UoZSx0aGlzLm9wdGlvbnNEPQplZmF1bHQpO3RoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1w bGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiRjb250ZW50PTNEdGhpcy49CiRlbC5maW5kKCIuY29u dGVudCIpO3RoaXMuJHRpdGxlPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtdGl0bGUtdGV4dCIp O3RoaT0Kcy4kaGVhZGVyPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtaGVhZGVyIik7dmFyIGQ9 M0R0aGlzLiRlbC5maW5kKCIucG9ydGxlPQp0LWNvbnRlbnQiKTtpZih0aGlzLm9wdGlvbnMubm9w YWRkaW5nKXtkLmNzcygicGFkZGluZyIsIjBweCIpO3RoaXMuJGNvbnRlbnQ9Ci5jc3MoInBhZGRp bmciLCIwcHgiKX10aGlzLiRidXR0b25zPTNEJCh0aGlzLmVsKS5maW5kKCIuYnV0dG9ucyIpO2lm KHRoaXMubz0KcHRpb25zLmJ1dHRvbnMpe3ZhciBjPTNEdGhpczskLmVhY2godGhpcy5vcHRpb25z LmJ1dHRvbnMsZnVuY3Rpb24oZixnKXtnLiRlPQpsLnByb3AoImlkIixmKTtjLiRidXR0b25zLmFw cGVuZChnLiRlbCl9KX1lbHNle3RoaXMuJGJ1dHRvbnMucmVtb3ZlKCl9dGhpcy49CiRvcGVyYXRp b25zPTNEJCh0aGlzLmVsKS5maW5kKCIub3BlcmF0aW9ucyIpO2lmKHRoaXMub3B0aW9ucy5vcGVy YXRpb25zKXt2YT0KciBjPTNEdGhpczskLmVhY2godGhpcy5vcHRpb25zLm9wZXJhdGlvbnMsZnVu Y3Rpb24oZixnKXtnLiRlbC5wcm9wKCJpZCIsZik7PQpjLiRvcGVyYXRpb25zLmFwcGVuZChnLiRl bCl9KX1pZih0aGlzLm9wdGlvbnMuYm9keSl7dGhpcy5hcHBlbmQodGhpcy5vcHRpb249CnMuYm9k eSl9fSxhcHBlbmQ6ZnVuY3Rpb24oZCxjKXtpZihjKXt0aGlzLiRjb250ZW50LmFwcGVuZChkKX1l bHNle3RoaXMuJGNvbj0KdGVudC5hcHBlbmQoYS53cmFwKGQpKX19LGNvbnRlbnQ6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy4kY29udGVudH0sc2hvdzpmdW5jPQp0aW9uKCl7dGhpcy4kZWwuZmFkZUlu KCJmYXN0Iik7dGhpcy52aXNpYmxlPTNEdHJ1ZX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGU9Cmwu ZmFkZU91dCgiZmFzdCIpO3RoaXMudmlzaWJsZT0zRGZhbHNlfSxlbmFibGVCdXR0b246ZnVuY3Rp b24oYyl7dGhpcy4kYnV0dD0Kb25zLmZpbmQoIiMiK2MpLnByb3AoImRpc2FibGVkIixmYWxzZSl9 LGRpc2FibGVCdXR0b246ZnVuY3Rpb24oYyl7dGhpcy4kYnV0PQp0b25zLmZpbmQoIiMiK2MpLnBy b3AoImRpc2FibGVkIix0cnVlKX0saGlkZU9wZXJhdGlvbjpmdW5jdGlvbihjKXt0aGlzLiRvcGU9 CnJhdGlvbnMuZmluZCgiIyIrYykuaGlkZSgpfSxzaG93T3BlcmF0aW9uOmZ1bmN0aW9uKGMpe3Ro aXMuJG9wZXJhdGlvbnMuZmluZD0KKCIjIitjKS5zaG93KCl9LHNldE9wZXJhdGlvbjpmdW5jdGlv bihlLGQpe3ZhciBjPTNEdGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjPQoiK2UpO2Mub2ZmKCJjbGlj ayIpO2Mub24oImNsaWNrIixkKX0sdGl0bGU6ZnVuY3Rpb24oZCl7dmFyIGM9M0R0aGlzLiR0aXRs ZTs9CmlmKGQpe2MuaHRtbChkKX1yZXR1cm4gYy5odG1sKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihk KXt2YXIgYz0zRCc8ZGl2IGlkPTNEIj0KJytkLmlkKyciIGNsYXNzPTNEIicrZC5jbHMrJyI+Jztp ZihkLnRpdGxlKXtjKz0zRCc8ZGl2IGNsYXNzPTNEInBvcnRsZXQtaGVhPQpkZXIiPjxkaXYgY2xh c3M9M0Qib3BlcmF0aW9ucyIgc3R5bGU9M0QiZmxvYXQ6ICcrZC5vcGVyYXRpb25zX2ZsdCsnOyI+ PC9kaXY9Cj48ZGl2IGNsYXNzPTNEInBvcnRsZXQtdGl0bGUiPic7aWYoZC5pY29uKXtjKz0zRCc8 aSBjbGFzcz0zRCJpY29uIGZhICcrZC5pYz0Kb24rJyI+Jm5ic3A7PC9pPid9Yys9M0QnPHNwYW4g Y2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0Ij4nK2QudGl0bGUrIjwvc3BhPQpuPjwvZGl2Pjwv ZGl2PiJ9Yys9M0QnPGRpdiBjbGFzcz0zRCJwb3J0bGV0LWNvbnRlbnQiPic7aWYoZC5wbGFjZW1l bnQ9M0Q9M0Q9CiJ0b3AiKXtjKz0zRCc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiPjwvZGl2Pid9Yys9 M0QnPGRpdiBjbGFzcz0zRCJjb250ZW50Ij48Lz0KZGl2Pic7aWYoZC5wbGFjZW1lbnQ9M0Q9M0Qi Ym90dG9tIil7Yys9M0QnPGRpdiBjbGFzcz0zRCJidXR0b25zIj48L2Rpdj4nfWMrPQo9M0QiPC9k aXY+PC9kaXY+IjtyZXR1cm4gY319KTtyZXR1cm57VmlldzpifX0pOwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKCmRpZmYgLXIgMmE2NjM1MTAzNTNiYTgyNjhkZWZmMDYzYmE1MGQyN2RlMTgw Yjg4OSAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2ND0KNzkwNzFiZDMzYTFiNDQ3ZjQgc3RhdGlj L3N0eWxlL2JsdWUvYmFzZS5jc3MKLS0tIGEvc3RhdGljL3N0eWxlL2JsdWUvYmFzZS5jc3MKKysr IGIvc3RhdGljL3N0eWxlL2JsdWUvYmFzZS5jc3MKQEAgLTE0MTYsNyArMTQxNiw2IEBACiAudWkt cG9ydGxldCAucG9ydGxldC1oZWFkZXIgLnBvcnRsZXQtdGl0bGUgLmljb24sLnVpLXBvcnRsZXQt c2xpbSAucG9ydGxldD0KLWhlYWRlciAucG9ydGxldC10aXRsZSAuaWNvbntmb250LXNpemU6MS4y ZW07dmVydGljYWwtYWxpZ246bWlkZGxlfQogLnVpLXBvcnRsZXQgLnBvcnRsZXQtYnV0dG9ucywu dWktcG9ydGxldC1zbGltIC5wb3J0bGV0LWJ1dHRvbnN7aGVpZ2h0OjUwcHg9CjtwYWRkaW5nOjEw cHh9CiAudWktcG9ydGxldCAucG9ydGxldC1jb250ZW50LC51aS1wb3J0bGV0LXNsaW0gLnBvcnRs ZXQtY29udGVudHtoZWlnaHQ6aW5oZT0Kcml0O3BhZGRpbmc6MTBweDtjbGVhcjpib3RofS51aS1w b3J0bGV0IC5wb3J0bGV0LWNvbnRlbnQgLmNvbnRlbnQsLnVpLXBvcnRsPQpldC1zbGltIC5wb3J0 bGV0LWNvbnRlbnQgLmNvbnRlbnR7cGFkZGluZzoxMHB4O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9 LnVpLXA9Cm9ydGxldCAucG9ydGxldC1jb250ZW50IC5jb250ZW50IC5idXR0b25zLC51aS1wb3J0 bGV0LXNsaW0gLnBvcnRsZXQtY29udGVudD0KIC5jb250ZW50IC5idXR0b25ze2hlaWdodDo1MHB4 O3BhZGRpbmc6MTBweH0KLS51aS1wb3J0bGV0IC5uby1zY3JvbGwsLnVpLXBvcnRsZXQtc2xpbSAu bm8tc2Nyb2xse2hlaWdodDpjYWxjKDEwMCUgLSA4MHB4PQopfQogLnVpLXBvcnRsZXQtc2xpbXtt YXgtd2lkdGg6OTAwcHh9CiAudWktcG9ydGxldC1yZXBlYXQsLnVpLXBvcnRsZXQtc2VjdGlvbiwu dWktcG9ydGxldC1zZWN0aW9ue2JvcmRlcjpub25lO2Jvcj0KZGVyLWxlZnQ6c29saWQgM3B4ICNl YmQ5YjI7Ym9yZGVyLXJhZGl1czo1cHh9LnVpLXBvcnRsZXQtcmVwZWF0IC5wb3J0bGV0LWhlPQph ZGVyLC51aS1wb3J0bGV0LXNlY3Rpb24gLnBvcnRsZXQtaGVhZGVye2JhY2tncm91bmQ6I2ViZDli Mjtib3JkZXItcmFkaXVzOjM9CnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MHB4O3BhZGRp bmc6MHB4IDJweH0KIC51aS1wb3J0bGV0LXJlcGVhdCAucG9ydGxldC1jb250ZW50LC51aS1wb3J0 bGV0LXNlY3Rpb24gLnBvcnRsZXQtY29udGVudHtwPQphZGRpbmc6MHB4fS51aS1wb3J0bGV0LXJl cGVhdCAucG9ydGxldC1jb250ZW50IC5jb250ZW50LC51aS1wb3J0bGV0LXNlY3Rpb249CiAucG9y dGxldC1jb250ZW50IC5jb250ZW50e3BhZGRpbmc6MHB4O3BhZGRpbmctbGVmdDoxMHB4fQoKZGlm ZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4NzE5 NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCBzdGF0aWMvc3R5bGUvc3JjL2xlc3Mv dWkubGVzcwotLS0gYS9zdGF0aWMvc3R5bGUvc3JjL2xlc3MvdWkubGVzcworKysgYi9zdGF0aWMv c3R5bGUvc3JjL2xlc3MvdWkubGVzcwpAQCAtMTk4LDEwICsxOTgsNiBAQAogICAgICAgICAgICAg fQogICAgICAgICB9CiAgICAgfQotCi0gICAgLm5vLXNjcm9sbCB7Ci0gICAgICAgIGhlaWdodDog fidjYWxjKDEwMCUgLSA4MHB4KSc7Ci0gICAgfQogfQo9MjAKIC51aS1wb3J0bGV0LXNsaW0gewoK ZGlmZiAtciAyYTY2MzUxMDM1M2JhODI2OGRlZmYwNjNiYTUwZDI3ZGUxODBiODg5IC1yIGQ4MzY4 NzE5NGNjZjg0OWYwM2MxNjY0PQo3OTA3MWJkMzNhMWI0NDdmNCB0ZXN0L2FwaS9oZWxwZXJzLnB5 Ci0tLSBhL3Rlc3QvYXBpL2hlbHBlcnMucHkKKysrIGIvdGVzdC9hcGkvaGVscGVycy5weQpAQCAt MTM0LDcgKzEzNCw3IEBACj0yMAogICAgIGRlZiBnZXRfaGlzdG9yeV9kYXRhc2V0X2RldGFpbHMo IHNlbGYsIGhpc3RvcnlfaWQsICoqa3dkcyApOgogICAgICAgICBkYXRhc2V0X2lkID0zRCBzZWxm Ll9faGlzdG9yeV9kYXRhc2V0X2lkKCBoaXN0b3J5X2lkLCAqKmt3ZHMgKQotICAgICAgICBkZXRh aWxzX3Jlc3BvbnNlID0zRCBzZWxmLl9fZ2V0X2NvbnRlbnRzX3JlcXVlc3QoIGhpc3RvcnlfaWQs ICIvJXM9CiIgJSBkYXRhc2V0X2lkICkKKyAgICAgICAgZGV0YWlsc19yZXNwb25zZSA9M0Qgc2Vs Zi5fX2dldF9jb250ZW50c19yZXF1ZXN0KCBoaXN0b3J5X2lkLCAiL2RhPQp0YXNldHMvJXMiICUg ZGF0YXNldF9pZCApCiAgICAgICAgIGFzc2VydCBkZXRhaWxzX3Jlc3BvbnNlLnN0YXR1c19jb2Rl ID0zRD0zRCAyMDAKICAgICAgICAgcmV0dXJuIGRldGFpbHNfcmVzcG9uc2UuanNvbigpCj0yMAoK VGhpcyBkaWZmIGlzIHNvIGJpZyB0aGF0IHdlIG5lZWRlZCB0byB0cnVuY2F0ZSB0aGUgcmVtYWlu ZGVyLgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRz L2I0NTBkNzE5ODdhMS8KQ2hhbmdlc2V0OiAgIGI0NTBkNzE5ODdhMQpVc2VyOiAgICAgICAgY2Fy bGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0xNSAxODoxODo0MSswMDowMApTdW1tYXJ5 OiAgICAgTWVyZ2VkIGdhbGF4eS9nYWxheHktY2VudHJhbCBpbnRvIGRlZmF1bHQKQWZmZWN0ZWQg IzogIDEgZmlsZQoKZGlmZiAtciBkODM2ODcxOTRjY2Y4NDlmMDNjMTY2NDc5MDcxYmQzM2ExYjQ0 N2Y0IC1yIGI0NTBkNzE5ODdhMWIyYTIxZWE1ZTUyPQowMzUxMmZlMGQ1ZWE5MTJmOCBlZ2dzLmlu aQotLS0gYS9lZ2dzLmluaQorKysgYi9lZ2dzLmluaQpAQCAtMzQsNyArMzQsNyBAQAogYW1xcCA9 M0QgMS40LjUKIGFueWpzb24gPTNEIDAuMy4zCiBCZWFrZXIgPTNEIDEuNAotYmlvYmxlbmQgPTNE IDAuNC4yCitiaW9ibGVuZCA9M0QgMC41LjIKIGJvdG8gPTNEIDIuMjcuMAogZGVjb3JhdG9yID0z RCAzLjEuMgogZG9jdXRpbHMgPTNEIDAuNwpAQCAtNjMsNiArNjMsNyBAQAogcmVxdWVzdHMgPTNE IDIuMi4xCiBSb3V0ZXMgPTNEIDEuMTIuMwogc2ltcGxlanNvbiA9M0QgMi4xLjEKK3NpeCA9M0Qg MS45LjAKIHNxbGFsY2hlbXlfbWlncmF0ZSA9M0QgMC43LjIKIHNzaCA9M0QgMS43LjE0CiBTVkdG aWcgPTNEIDEuMS42CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJh bC9jb21taXRzL2Q0MjdkYzIwNWNkZC8KQ2hhbmdlc2V0OiAgIGQ0MjdkYzIwNWNkZApVc2VyOiAg ICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0xNSAxODoxOTo0OCswMDow MApTdW1tYXJ5OiAgICAgTWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24KQWZmZWN0ZWQgIzog IDEwIGZpbGVzCgpkaWZmIC1yIGI0NTBkNzE5ODdhMWIyYTIxZWE1ZTUyMDM1MTJmZTBkNWVhOTEy ZjggLXIgZDQyN2RjMjA1Y2RkY2UzMWRiMjYzMzY9CjdmNzYzNmUzMzE4MDQzZjUxIGxpYi9nYWxh eHkvbWFuYWdlcnMvYmFzZS5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKKysr IGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5CkBAIC0xLDMgKzEsMzAgQEAKKyIiIgorS2Vl cHMgdGhlIG9sZGVyIEJhc2VDb250cm9sbGVyIHNlY3VyaXR5IGFuZCBmZXRjaGluZyBtZXRob2Rz IGFuZCBhbHNvCitkZWZpbmVzIGEgYmFzZSBNb2RlbE1hbmFnZXIsIE1vZGVsU2VyaWFsaXplciwg YW5kIE1vZGVsRGVzZXJpYWxpemVyLgorCitNb2RlbE1hbmFnZXJzIGFyZSB1c2VkIGZvciBvcGVy YXRpb25zIG9uIG1vZGVscyB0aGF0IG9jY3VyIG91dHNpZGUgdGhlIHNjbz0KcGUgb2YKK2Egc2lu Z2xlIG1vZGVsIG9iamVjdCwgc3VjaCBhczoKKyAgICAtIG9iamVjdCBjcmVhdGlvbgorICAgIC0g b2JqZWN0IGxvb2t1cAorICAgIC0gaW50ZXJhY3Rpb25zIGJldHdlZW4gMisgb2JqZWN0cyBvZiBk aWZmZXJlbnQgbW9kZWwgY2xhc3NlcworCisoU2luY2UgdGhlc2Ugd2VyZSB0byByZXBsYWNlIG1v ZGVsIE1peGlucyBmcm9tCit3ZWIvZnJhbWV3b3JrL2Jhc2UvY29udHJvbGxlci5weSB0aGUgcnVs ZSBvZiB0aHVtYiB1c2VkIHRoZXJlIGFsc28gZ2VuZXJhbD0KbHkKK2hhcyBiZWVuIGFwcGxpZWQg aGVyZTogaWYgaXQgdXNlcyB0aGUgdHJhbnMgb3Igc2Ffc2Vzc2lvbiwgcHV0IGl0IGluIGEgbWFu PQphZ2VyCithbmQgbm90IHRoZSBtb2RlbC4pCisKK01vZGVsU2VyaWFsaXplcnMgYWxsb3cgZmxl eGlibGUgY29udmVyc2lvbiBvZiBtb2RlbCBvYmplY3RzIHRvIGRpY3Rpb25hcmllPQpzLgorVGhl eSBjb250cm9sIHdoYXQga2V5cyBhcmUgc2VudCwgaG93IHZhbHVlcyBhcmUgc2ltcGxpZmllZCwg Y2FuIHJlbWFwIGtleXMsCithbmQgYWxsb3cgYm90aCBwcmVkZWZpbmVkIGFuZCB1c2VyIGNvbnRy b2xsZWQga2V5IHNldHMuCisKK01vZGVsRGVzZXJpYWxpemVycyBjb250cm9sIGhvdyBhIG1vZGVs IHZhbGlkYXRlcyBhbmQgcHJvY2VzcyBhbiBpbmNvbWluZworYXR0cmlidXRlIGNoYW5nZSB0byBh IG1vZGVsIG9iamVjdC4KKyIiIgorI1RPRE86IGl0IG1heSBiZSB0aGVyZSdzIGEgYmV0dGVyIHdh eSB0byBjb21iaW5lIHRoZSBhYm92ZSB0aHJlZSBjbGFzc2VzCisjICAgc3VjaCBhczogYSBzaW5n bGUgZmxhdCBjbGFzcywgc2VyaWFsaXplcnMgYmVpbmcgc2luZ2xldG9ucyBpbiB0aGUgbWFuYT0K Z2VyLCBldGMuCisjICAgaW5zdGVhZCBvZiB0aGUgdGhyZWUgc2VwYXJhdGUgY2xhc3Nlcy4gV2l0 aCBubyAnYXBwYXJlbnQnIHBlcmZlY3Qgc2NoZT0KbWUKKyMgICBJJ20gb3B0aW5nIHRvIGp1c3Qg a2VlcCB0aGVtIHNlcGFyYXRlLgorCiBpbXBvcnQgcmUKPTIwCiBpbXBvcnQgcGtnX3Jlc291cmNl cwpAQCAtMTc3LDcgKzIwNCw3IEBACj0yMAogICAgICAgICAoV2hpbGUgYWxsb3dpbmcgdGhlbSB0 byBiZSBOb25lLCBub24tbGlzdHMsIG9yIGxpc3RzLikKICAgICAgICAgIiIiCi0gICAgICAgICMg Li4uIHdoaWNoIHNvdW5kcyBsaWtlIGEgZXVwaGFtaXNtIGZvciBzb21ldGhpbmcKKyAgICAgICAg I1RPRE86IHRoZXJlJ3Mgbm90aGluZyBzcGVjaWZpY2FsbHkgZmlsdGVyIG9yIG1vZGVsLXJlbGF0 ZWQgaGVyZSAtPQogbW92ZSB0byB1dGlsCiAgICAgICAgIGlmIGZpbHRlcnNBIGlzIE5vbmU6CiAg ICAgICAgICAgICByZXR1cm4gZmlsdGVyc0IKICAgICAgICAgaWYgZmlsdGVyc0IgaXMgTm9uZToK QEAgLTIxOSw3ICsyNDYsNiBAQAogICAgICAgICByZXR1cm4gcXVlcnkKPTIwCiAgICAgIyAuLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLj0KLi4uLi4gY29tbW9uIHF1ZXJpZXMKLSAgICAjVE9ETzogbmVlZGVkPwogICAgIGRl ZiBvbmUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKICAgICAgICAgU2Vu ZHMga3dhcmdzIHRvIGJ1aWxkIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBvbmUgYW5kIG9ubHkgb25l IG1vZGVsLgpAQCAtMjUzLDEyICsyNzksNyBAQAogICAgICAgICBleGNlcHQgZXhjZXB0aW9ucy5P YmplY3ROb3RGb3VuZCwgbm90X2ZvdW5kOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKPTIwCi0g ICAgI2RlZiBnZXQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2FyZ3MgKToKLSAgICAjICAgICIiIgot ICAgICMgICAgIiIiCi0gICAgIyAgICAjVE9ETzogZWl0aGVyIHJlbW92ZSB0byBwcmV2ZW50IGNv bmZ1c2lvbiB3aXRoIHNxbGFseCBnZXQgb3IgbWFrZT0KIGl0IGJlaGF2ZSAqbXVjaCogbW9yZSBs aWtlIGl0OiBvYmovTm9uZQotICAgICMgICAgaWRfZmlsdGVyID0zRCBzZWxmLm1vZGVsX2NsYXNz LmlkID0zRD0zRCBpZAotICAgICMgICAgcmV0dXJuIHNlbGYub25lKCB0cmFucywgZmlsdGVycz0z RGlkX2ZpbHRlciwgKiprd2FyZ3MgKQorICAgICNUT0RPOiBnZXQ/Cj0yMAogICAgIGRlZiBieV9p ZCggc2VsZiwgdHJhbnMsIGlkLCAqKmt3YXJncyApOgogICAgICAgICAiIiIKQEAgLTM3NiwxMjEg KzM5Nyw2IEBACiAgICAgIyAgICByZXR1cm4gaXRlbQo9MjAKPTIwCi0jID0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAotY2xh c3MgQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlKCBvYmplY3QgKToKLSAgICAiIiIKLSAgICBBIHNl Y3VyaXR5IGludGVyZmFjZSB0byBjaGVjayBpZiBhIFVzZXIgY2FuIHJlYWQvdmlldyBhbiBpdGVt J3MuCi0KLSAgICBUaGlzIGNhbiBhbHNvIGJlIHRob3VnaHQgb2YgYXMgJ3JlYWQgYnV0IG5vdCBt b2RpZnknIHByaXZpbGVnZXMuCi0gICAgIiIiCi0KLSAgICAjIGRvbid0IHdhbnQgdG8gb3ZlcnJp ZGUgYnlfaWQgc2luY2UgY29uc3VtZXJzIHdpbGwgYWxzbyB3YW50IHRvIGZldGNoPQogdy9vIGFu eSBzZWN1cml0eSBjaGVja3MKLSAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGl0 ZW0sIHVzZXIgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBpdGVt IGFjY2Vzc2libGUgdG8gdXNlci4KLSAgICAgICAgIiIiCi0gICAgICAgICMgb3ZlcnJpZGUgaGVy ZQotICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50 ZXJmYWNlIE1ldGhvZCIgKQotICAgICAgICAjT1I/IHJldHVybiBGYWxzZQotCi0gICAgZGVmIGdl dF9hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6Ci0gICAgICAg ICIiIgotICAgICAgICBSZXR1cm4gdGhlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgaXQncyBh Y2Nlc3NpYmxlIHRvIHVzZXIsCi0gICAgICAgIG90aGVyd2lzZSByYWlzZSBhbiBlcnJvci4KLQot ICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246Ci0g ICAgICAgICIiIgotICAgICAgICBpdGVtID0zRCBNb2RlbE1hbmFnZXIuYnlfaWQoIHNlbGYsIHRy YW5zLCBpZCApCi0gICAgICAgIHJldHVybiBzZWxmLmVycm9yX3VubGVzc19hY2Nlc3NpYmxlKCB0 cmFucywgaXRlbSwgdXNlciApCi0KLSAgICBkZWYgZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHNl bGYsIHRyYW5zLCBpdGVtLCB1c2VyICk6Ci0gICAgICAgICIiIgotICAgICAgICBSYWlzZSBhbiBl cnJvciBpZiB0aGUgaXRlbSBpcyBOT1QgYWNjZXNzaWJsZSB0byB1c2VyLCBvdGhlcndpc2UgcmU9 CnR1cm4gdGhlIGl0ZW0uCi0KLSAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkl0ZW1BY2Nlc3Np YmlsaXR5RXhjZXB0aW9uOgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5pc19hY2Nlc3Np YmxlKCB0cmFucywgaXRlbSwgdXNlciApOgotICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAg ICAgcmFpc2UgZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiggIiVzIGlzIG5v dCBhY2Nlc3NpYmxlPQogYnkgdXNlciIgJSAoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKSAp Ci0KLSAgICAjVE9ETzo/PyBhcmUgdGhlc2UgZXZlbiB1c2VmdWw/Ci0gICAgZGVmIGxpc3RfYWNj ZXNzaWJsZSggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6Ci0gICAgICAgICIiIgotICAg ICAgICBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIsIHJhaXNp bmcgYW4gZXJyb3IgaWY9CiBBTlkKLSAgICAgICAgYXJlIGluYWNjZXNzaWJsZS4KLQotICAgICAg ICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246Ci0gICAgICAg ICIiIgotICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZmaWNpZW50IGxp c3QgaWYgZmlsdGVycyBhcmUgbm90IHA9CmFzc2VkIGluIGt3YXJncwotICAgICAgICBpdGVtcyA9 M0QgTW9kZWxNYW5hZ2VyLmxpc3QoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApCi0gICAgICAgIHJl dHVybiBbIHNlbGYuZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHRyYW5zLCBpdGVtLCB1c2VyICkg Zm9yIGl0ZT0KbSBpbiBpdGVtcyBdCi0KLSAgICBkZWYgZmlsdGVyX2FjY2Vzc2libGUoIHNlbGYs IHRyYW5zLCB1c2VyLCAqKmt3YXJncyApOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGEg bGlzdCBvZiBpdGVtcyBhY2Nlc3NpYmxlIHRvIHRoZSB1c2VyLgotICAgICAgICAiIiIKLSAgICAg ICAgI05PVEU6IHRoaXMgd2lsbCBiZSBhIGxhcmdlLCBpbmVmZmljaWVudCBsaXN0IGlmIGZpbHRl cnMgYXJlIG5vdCAgPQpwYXNzZWQgaW4ga3dhcmdzCi0gICAgICAgIGl0ZW1zID0zRCBNb2RlbE1h bmFnZXIubGlzdCggc2VsZiwgdHJhbnMsICoqa3dhcmdzICkKLSAgICAgICAgcmV0dXJuIGZpbHRl ciggbGFtYmRhIGl0ZW06IHNlbGYuaXNfYWNjZXNzaWJsZSggdHJhbnMsIGl0ZW0sIHVzZXIgPQop LCBpdGVtcyApCi0KLQotIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKLWNsYXNzIE93bmFibGVNb2RlbEludGVyZmFjZSgg b2JqZWN0ICk6Ci0gICAgIiIiCi0gICAgQSBzZWN1cml0eSBpbnRlcmZhY2UgdG8gY2hlY2sgaWYg YSBVc2VyIGlzIGFuIGl0ZW0ncyBvd25lci4KLQotICAgIFNvbWUgcmVzb3VyY2VzIGFyZSBhc3Nv Y2lhdGVkIHdpdGggdGhlIFVzZXIgdGhhdCBjcmVhdGVkIG9yIGltcG9ydGVkIHQ9CmhlbQotICAg IGFuZCB0aGVzZSBVc2VycyBjYW4gYmUgY29uc2lkZXJlZCB0aGUgbW9kZWxzJyBvd25lci4KLQot ICAgIFRoaXMgY2FuIGFsc28gYmUgdGhvdWdodCBvZiBhcyB3cml0ZS9lZGl0IHByaXZpbGVnZXMu Ci0gICAgIiIiCi0KLSAgICBkZWYgaXNfb3duZXIoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyICk6 Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm4gVHJ1ZSBpZiB1c2VyIG93bnMgdGhlIGl0ZW0u Ci0gICAgICAgICIiIgotICAgICAgICAjIG92ZXJyaWRlIGhlcmUKLSAgICAgICAgcmFpc2UgZXhj ZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZCggIkFic3RyYWN0IEludGVyZmFjZSBNZXRob2QiICkKLSAg ICAgICAgI09SPyByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRfb3duZWQoIHNlbGYsIHRyYW5z LCBpZCwgdXNlciwgKiprd2FyZ3MgKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0aGUg aXRlbSB3aXRoIHRoZSBnaXZlbiBpZCBpZiBvd25lZCBieSB0aGUgdXNlciwKLSAgICAgICAgb3Ro ZXJ3aXNlIHJhaXNlIGFuIGVycm9yLgotCi0gICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5JdGVt T3duZXJzaGlwRXhjZXB0aW9uOgotICAgICAgICAiIiIKLSAgICAgICAgaXRlbSA9M0QgTW9kZWxN YW5hZ2VyLmJ5X2lkKCBzZWxmLCB0cmFucywgaWQgKQotICAgICAgICByZXR1cm4gc2VsZi5lcnJv cl91bmxlc3Nfb3duZXIoIHRyYW5zLCBpdGVtLCB1c2VyICkKLQotICAgIGRlZiBlcnJvcl91bmxl c3Nfb3duZXIoIHNlbGYsIHRyYW5zLCBpdGVtLCB1c2VyICk6Ci0gICAgICAgICIiIgotICAgICAg ICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgaXRlbSBpcyBOT1Qgb3duZWQgYnkgdXNlciwgb3RoZXJ3 aXNlIHJldHVybiA9CnRoZSBpdGVtLgotCi0gICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5JdGVt QWNjZXNzaWJpbGl0eUV4Y2VwdGlvbjoKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuaXNf b3duZXIoIHRyYW5zLCBpdGVtLCB1c2VyICk6Ci0gICAgICAgICAgICByZXR1cm4gaXRlbQotICAg ICAgICByYWlzZSBleGNlcHRpb25zLkl0ZW1Pd25lcnNoaXBFeGNlcHRpb24oICIlcyBpcyBub3Qg b3duZWQgYnkgdXNlciI9CiAlICggc2VsZi5tb2RlbF9jbGFzcy5fX25hbWVfXyApICkKLQotICAg IGRlZiBsaXN0X293bmVkKCBzZWxmLCB0cmFucywgdXNlciwgKiprd2FyZ3MgKToKLSAgICAgICAg IiIiCi0gICAgICAgIFJldHVybiBhIGxpc3Qgb2YgaXRlbXMgb3duZWQgYnkgdGhlIHVzZXIsIHJh aXNpbmcgYW4gZXJyb3IgaWYgQU5ZCi0gICAgICAgIGFyZSBub3QuCi0KLSAgICAgICAgOnJhaXNl cyBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uOgotICAgICAgICAiIiIKLSAg ICAgICAgIyBqdXN0IGFsaWFzIHRvIGJ5X3VzZXIgKGVhc2llci9zYW1lIHRoaW5nKQotICAgICAg ICByZXR1cm4gc2VsZi5ieV91c2VyKCB0cmFucywgdXNlciwgKiprd2FyZ3MgKQotCi0gICAgZGVm IGZpbHRlcl9vd25lZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6Ci0gICAgICAgICIi IgotICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIG93bmVkIGJ5IHRoZSB1c2VyLgotICAg ICAgICAiIiIKLSAgICAgICAgIyBqdXN0IGFsaWFzIHRvIGxpc3Rfb3duZWQKLSAgICAgICAgcmV0 dXJuIHNlbGYubGlzdF9vd25lZCggdHJhbnMsIHVzZXIsICoqa3dhcmdzICkKLQotCiAjID0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRCBTRVJJQUxJWkVSUy90b19kaWN0LGZyb21fZGljdAogY2xhc3MgTW9kZWxTZXJpYWxpemlu Z0Vycm9yKCBleGNlcHRpb25zLkludGVybmFsU2VydmVyRXJyb3IgKToKICAgICAiIiJUaHJvd24g d2hlbiByZXF1ZXN0IG1vZGVsIHZhbHVlcyBjYW4ndCBiZSBzZXJpYWxpemVkIiIiCkBAIC01NDks NyArNDU1LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgICMgdG8gYmUgb3ZlcnJpZGRlbiBpbiBz dWJjbGFzc2VzCiAgICAgICAgIHBhc3MKLSAgICAgICAgI3N1cGVyKCBNb2RlbFNlcmlhbGl6ZXIs IHNlbGYgKS5hZGRfc2VyaWFsaXplcnMoKQo9MjAKICAgICBkZWYgc2VyaWFsaXplKCBzZWxmLCB0 cmFucywgaXRlbSwga2V5cyApOgogICAgICAgICAiIiIKQEAgLTgwMCw2ICs3MDUsMTIxIEBACj0y MAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPQo9M0Q9M0Q9M0QKICMgTWl4aW5zIChoZXJlIGZvciBub3cpCisjID0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAorY2xh c3MgQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlKCBvYmplY3QgKToKKyAgICAiIiIKKyAgICBBIHNl Y3VyaXR5IGludGVyZmFjZSB0byBjaGVjayBpZiBhIFVzZXIgY2FuIHJlYWQvdmlldyBhbiBpdGVt J3MuCisKKyAgICBUaGlzIGNhbiBhbHNvIGJlIHRob3VnaHQgb2YgYXMgJ3JlYWQgYnV0IG5vdCBt b2RpZnknIHByaXZpbGVnZXMuCisgICAgIiIiCisKKyAgICAjIGRvbid0IHdhbnQgdG8gb3ZlcnJp ZGUgYnlfaWQgc2luY2UgY29uc3VtZXJzIHdpbGwgYWxzbyB3YW50IHRvIGZldGNoPQogdy9vIGFu eSBzZWN1cml0eSBjaGVja3MKKyAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGl0 ZW0sIHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBpdGVt IGFjY2Vzc2libGUgdG8gdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgb3ZlcnJpZGUgaW4g c3ViY2xhc3NlcworICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJz dHJhY3QgSW50ZXJmYWNlIE1ldGhvZCIgKQorCisgICAgZGVmIGdldF9hY2Nlc3NpYmxlKCBzZWxm LCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1 cm4gdGhlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgaXQncyBhY2Nlc3NpYmxlIHRvIHVzZXIs CisgICAgICAgIG90aGVyd2lzZSByYWlzZSBhbiBlcnJvci4KKworICAgICAgICA6cmFpc2VzIGV4 Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAg ICBpdGVtID0zRCBNb2RlbE1hbmFnZXIuYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCApCisgICAgICAg IHJldHVybiBzZWxmLmVycm9yX3VubGVzc19hY2Nlc3NpYmxlKCB0cmFucywgaXRlbSwgdXNlciAp CisKKyAgICBkZWYgZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHNlbGYsIHRyYW5zLCBpdGVtLCB1 c2VyICk6CisgICAgICAgICIiIgorICAgICAgICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgaXRlbSBp cyBOT1QgYWNjZXNzaWJsZSB0byB1c2VyLCBvdGhlcndpc2UgcmU9CnR1cm4gdGhlIGl0ZW0uCisK KyAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhjZXB0aW9uOgor ICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5pc19hY2Nlc3NpYmxlKCB0cmFucywgaXRlbSwg dXNlciApOgorICAgICAgICAgICAgcmV0dXJuIGl0ZW0KKyAgICAgICAgcmFpc2UgZXhjZXB0aW9u cy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiggIiVzIGlzIG5vdCBhY2Nlc3NpYmxlPQogYnkg dXNlciIgJSAoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKSApCisKKyAgICAjVE9ETzo/PyBh cmUgdGhlc2UgZXZlbiB1c2VmdWw/CisgICAgZGVmIGxpc3RfYWNjZXNzaWJsZSggc2VsZiwgdHJh bnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0 IG9mIGl0ZW1zIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIsIHJhaXNpbmcgYW4gZXJyb3IgaWY9CiBB TlkKKyAgICAgICAgYXJlIGluYWNjZXNzaWJsZS4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlv bnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAgICByYWlz ZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNlIE1ldGhvZCIg KQorICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZmaWNpZW50IGxpc3Qg aWYgZmlsdGVycyBhcmUgbm90IHA9CmFzc2VkIGluIGt3YXJncworICAgICAgICAjaXRlbXMgPTNE IE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQorICAgICAgICAjcmV0 dXJuIFsgc2VsZi5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggdHJhbnMsIGl0ZW0sIHVzZXIgKSBm b3IgaXQ9CmVtIGluIGl0ZW1zIF0KKworICAgIGRlZiBmaWx0ZXJfYWNjZXNzaWJsZSggc2VsZiwg dHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBs aXN0IG9mIGl0ZW1zIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIuCisgICAgICAgICIiIgorICAgICAg ICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNlIE1l dGhvZCIgKQorICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZmaWNpZW50 IGxpc3QgaWYgZmlsdGVycyBhcmUgbm90ICA9CnBhc3NlZCBpbiBrd2FyZ3MKKyAgICAgICAgI2l0 ZW1zID0zRCBNb2RlbE1hbmFnZXIubGlzdCggc2VsZiwgdHJhbnMsICoqa3dhcmdzICkKKyAgICAg ICAgI3JldHVybiBmaWx0ZXIoIGxhbWJkYSBpdGVtOiBzZWxmLmlzX2FjY2Vzc2libGUoIHRyYW5z LCBpdGVtLCB1c2VyPQogKSwgaXRlbXMgKQorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBPd25hYmxl TW9kZWxJbnRlcmZhY2UoIG9iamVjdCApOgorICAgICIiIgorICAgIEEgc2VjdXJpdHkgaW50ZXJm YWNlIHRvIGNoZWNrIGlmIGEgVXNlciBpcyBhbiBpdGVtJ3Mgb3duZXIuCisKKyAgICBTb21lIHJl c291cmNlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBVc2VyIHRoYXQgY3JlYXRlZCBvciBpbXBv cnRlZCB0PQpoZW0KKyAgICBhbmQgdGhlc2UgVXNlcnMgY2FuIGJlIGNvbnNpZGVyZWQgdGhlIG1v ZGVscycgb3duZXIuCisKKyAgICBUaGlzIGNhbiBhbHNvIGJlIHRob3VnaHQgb2YgYXMgd3JpdGUv ZWRpdCBwcml2aWxlZ2VzLgorICAgICIiIgorCisgICAgZGVmIGlzX293bmVyKCBzZWxmLCB0cmFu cywgaXRlbSwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgdXNl ciBvd25zIHRoZSBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAgIyBvdmVycmlkZSBpbiBzdWJj bGFzc2VzCisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWQoICJBYnN0cmFj dCBJbnRlcmZhY2UgTWV0aG9kIiApCisKKyAgICBkZWYgZ2V0X293bmVkKCBzZWxmLCB0cmFucywg aWQsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGl0 ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb3duZWQgYnkgdGhlIHVzZXIsCisgICAgICAgIG90aGVy d2lzZSByYWlzZSBhbiBlcnJvci4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbU93 bmVyc2hpcEV4Y2VwdGlvbjoKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW0gPTNEIE1vZGVsTWFu YWdlci5ieV9pZCggc2VsZiwgdHJhbnMsIGlkICkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3Jf dW5sZXNzX293bmVyKCB0cmFucywgaXRlbSwgdXNlciApCisKKyAgICBkZWYgZXJyb3JfdW5sZXNz X293bmVyKCBzZWxmLCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAg UmFpc2UgYW4gZXJyb3IgaWYgdGhlIGl0ZW0gaXMgTk9UIG93bmVkIGJ5IHVzZXIsIG90aGVyd2lz ZSByZXR1cm4gPQp0aGUgaXRlbS4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbUFj Y2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmlzX293 bmVyKCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAgICAgcmV0dXJuIGl0ZW0KKyAgICAg ICAgcmFpc2UgZXhjZXB0aW9ucy5JdGVtT3duZXJzaGlwRXhjZXB0aW9uKCAiJXMgaXMgbm90IG93 bmVkIGJ5IHVzZXIiPQogJSAoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKSApCisKKyAgICBk ZWYgbGlzdF9vd25lZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIi IgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIG93bmVkIGJ5IHRoZSB1c2VyLCByYWlz aW5nIGFuIGVycm9yIGlmIEFOWQorICAgICAgICBhcmUgbm90LgorCisgICAgICAgIDpyYWlzZXMg ZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbjoKKyAgICAgICAgIiIiCisgICAg ICAgICMganVzdCBhbGlhcyB0byBieV91c2VyIChlYXNpZXIvc2FtZSB0aGluZykKKyAgICAgICAg cmV0dXJuIHNlbGYuYnlfdXNlciggdHJhbnMsIHVzZXIsICoqa3dhcmdzICkKKworICAgIGRlZiBm aWx0ZXJfb3duZWQoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApOgorICAgICAgICAiIiIK KyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBpdGVtcyBvd25lZCBieSB0aGUgdXNlci4KKyAgICAg ICAgIiIiCisgICAgICAgICMganVzdCBhbGlhcyB0byBsaXN0X293bmVkCisgICAgICAgIHJldHVy biBzZWxmLmxpc3Rfb3duZWQoIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApCisKKwogIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS09Ci0tLS0tCiBjbGFzcyBEZWxldGFibGVNb2RlbEludGVyZmFjZSggb2JqZWN0ICk6 CiAgICAgIiIiCkBAIC04ODAsNyArOTAwLDkgQEAKPTIwCj0yMAogY2xhc3MgUHVyZ2FibGVNb2Rl bFNlcmlhbGl6ZXIoIERlbGV0YWJsZU1vZGVsU2VyaWFsaXplciApOgotICAgIHBhc3MKKworICAg IGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgRGVsZXRhYmxlTW9kZWxTZXJp YWxpemVyLmFkZF9zZXJpYWxpemVycyggc2VsZiApCj0yMAo9MjAKIGNsYXNzIFB1cmdhYmxlTW9k ZWxEZXNlcmlhbGl6ZXIoIERlbGV0YWJsZU1vZGVsRGVzZXJpYWxpemVyICk6CgpkaWZmIC1yIGI0 NTBkNzE5ODdhMWIyYTIxZWE1ZTUyMDM1MTJmZTBkNWVhOTEyZjggLXIgZDQyN2RjMjA1Y2RkY2Uz MWRiMjYzMzY9CjdmNzYzNmUzMzE4MDQzZjUxIGxpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlv bnMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9ucy5weQorKysgYi9saWIv Z2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zLnB5CkBAIC0zMjksODcgKzMyOSwzIEBACiAgICAg ICAgICAgICBpZiBub3QgdHJhbnMuYXBwLnNlY3VyaXR5X2FnZW50LmNhbl9hY2Nlc3NfbGlicmFy eV9pdGVtKCB0cmFucz0KLmdldF9jdXJyZW50X3VzZXJfcm9sZXMoKSwgY29sbGVjdGlvbl9pbnN0 YW5jZSwgdHJhbnMudXNlciApOgogICAgICAgICAgICAgICAgIHJhaXNlIEl0ZW1BY2Nlc3NpYmls aXR5RXhjZXB0aW9uKCAiTGlicmFyeURhdGFzZXRDb2xsZWN0aW89Cm5Bc3NvY2lhdGlvbiBpcyBu b3QgYWNjZXNzaWJsZSB0byB0aGUgY3VycmVudCB1c2VyIiwgdHlwZT0zRCdlcnJvcicgKQogICAg ICAgICByZXR1cm4gY29sbGVjdGlvbl9pbnN0YW5jZQotCi0KLWNsYXNzIERhdGFzZXRDb2xsZWN0 aW9uU2VyaWFsaXplciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIgKToKLQotICAgIGRlZiBfX2luaXRf Xyggc2VsZiwgYXBwICk6Ci0gICAgICAgIHN1cGVyKCBEYXRhc2V0Q29sbGVjdGlvblNlcmlhbGl6 ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKLQotI2RlZiBkaWN0aWZ5X2RhdGFzZXRfY29sbGVj dGlvbl9pbnN0YW5jZSggZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLCBwYXI9CmVudCwgc2Vj dXJpdHksIHZpZXc9M0QiZWxlbWVudCIgKToKLSMgICAgZGljdF92YWx1ZSA9M0QgZGF0YXNldF9j b2xsZWN0aW9uX2luc3RhbmNlLnRvX2RpY3QoIHZpZXc9M0R2aWV3ICkKLSMgICAgZW5jb2RlZF9p ZCA9M0Qgc2VjdXJpdHkuZW5jb2RlX2lkKCBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UuaWQg KQotIyAgICBpZiBpc2luc3RhbmNlKCBwYXJlbnQsIG1vZGVsLkhpc3RvcnkgKToKLSMgICAgICAg IGVuY29kZWRfaGlzdG9yeV9pZCA9M0Qgc2VjdXJpdHkuZW5jb2RlX2lkKCBwYXJlbnQuaWQgKQot IyAgICAgICAgZGljdF92YWx1ZVsgJ3VybCcgXSA9M0Qgd2ViLnVybF9mb3IoICdoaXN0b3J5X2Nv bnRlbnRfdHlwZWQnLCBoaXM9CnRvcnlfaWQ9M0RlbmNvZGVkX2hpc3RvcnlfaWQsIGlkPTNEZW5j b2RlZF9pZCwgdHlwZT0zRCJkYXRhc2V0X2NvbGxlY3Rpb24iICkKLSMgICAgZWxpZiBpc2luc3Rh bmNlKCBwYXJlbnQsIG1vZGVsLkxpYnJhcnlGb2xkZXIgKToKLSMgICAgICAgIGVuY29kZWRfbGli cmFyeV9pZCA9M0Qgc2VjdXJpdHkuZW5jb2RlX2lkKCBwYXJlbnQubGlicmFyeS5pZCApCi0jICAg ICAgICBlbmNvZGVkX2ZvbGRlcl9pZCA9M0Qgc2VjdXJpdHkuZW5jb2RlX2lkKCBwYXJlbnQuaWQg KQotIyAgICAgICAgIyBUT0RPOiBXb3JrIGluIHByb2dyZXNzIC0gdGhpcyBlbmQtcG9pbnQgaXMg bm90IHJpZ2h0IHlldC4uLgotIyAgICAgICAgZGljdF92YWx1ZVsgJ3VybCcgXSA9M0Qgd2ViLnVy bF9mb3IoICdsaWJyYXJ5X2NvbnRlbnQnLCBsaWJyYXJ5X2k9CmQ9M0RlbmNvZGVkX2xpYnJhcnlf aWQsIGlkPTNEZW5jb2RlZF9pZCwgZm9sZGVyX2lkPTNEZW5jb2RlZF9mb2xkZXJfaWQgKQotIyAg ICBpZiB2aWV3ID0zRD0zRCAiZWxlbWVudCI6Ci0jICAgICAgICBkaWN0X3ZhbHVlWyAnZWxlbWVu dHMnIF0gPTNEIG1hcCggZGljdGlmeV9lbGVtZW50LCBkYXRhc2V0X2NvbGxlYz0KdGlvbl9pbnN0 YW5jZS5jb2xsZWN0aW9uLmVsZW1lbnRzICkKLSMgICAgc2VjdXJpdHkuZW5jb2RlX2FsbF9pZHMo IGRpY3RfdmFsdWUsIHJlY3Vyc2l2ZT0zRFRydWUgKSAgIyBUT0RPOiBVc2UgPQpLeWxlJ3MgcmVj dXNyaXZlIGZvcm11bGF0aW9uIG9mIHRoaXMuCi0jICAgIHJldHVybiBkaWN0X3ZhbHVlCi0jCi0j Ci0jZGVmIGRpY3RpZnlfZWxlbWVudCggZWxlbWVudCApOgotIyAgICBkaWN0aWZpZWQgPTNEIGVs ZW1lbnQudG9fZGljdCggdmlldz0zRCJlbGVtZW50IiApCi0jICAgIG9iamVjdF9kZXRpYWxzID0z RCBlbGVtZW50LmVsZW1lbnRfb2JqZWN0LnRvX2RpY3QoKQotIyAgICBpZiBlbGVtZW50LmNoaWxk X2NvbGxlY3Rpb246Ci0jICAgICAgICAjIFJlY3Vyc2l2ZWx5IHlpZWxkIGVsZW1lbnRzIGZvciBl YWNoIG5lc3RlZCBjb2xsZWN0aW9uLi4uCi0jICAgICAgICBvYmplY3RfZGV0aWFsc1sgImVsZW1l bnRzIiBdID0zRCBtYXAoIGRpY3RpZnlfZWxlbWVudCwgZWxlbWVudC5jaD0KaWxkX2NvbGxlY3Rp b24uZWxlbWVudHMgKQotIwotIyAgICBkaWN0aWZpZWRbICJvYmplY3QiIF0gPTNEIG9iamVjdF9k ZXRpYWxzCi0jICAgIHJldHVybiBkaWN0aWZpZWQKLSMKLSMgICAgZGVmIHNlcmlhbGl6ZV9tZXRh ZGF0YSggc2VsZiwgdHJhbnMsIGhkYSwga2V5ICk6Ci0jICAgICAgICBub3RfaW5jbHVkZWQgPTNE IFsgJ2Ria2V5JyBdCi0jICAgICAgICBtZCA9M0Qge30KLSMgICAgICAgIGZvciBuYW1lLCBzcGVj IGluIGhkYS5tZXRhZGF0YS5zcGVjLml0ZW1zKCk6Ci0jICAgICAgICAgICAgaWYgbmFtZSBpbiBu b3RfaW5jbHVkZWQ6Ci0jICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0jICAgICAgICAgICAgdmFs ID0zRCBoZGEubWV0YWRhdGEuZ2V0KCBuYW1lICkKLSMgICAgICAgICAgICAjTk9URTogbm8gZmls ZXMKLSMgICAgICAgICAgICBpZiBpc2luc3RhbmNlKCB2YWwsIG1vZGVsLk1ldGFkYXRhRmlsZSAp OgotIyAgICAgICAgICAgICAgICBjb250aW51ZQotIyAgICAgICAgICAgICNUT0RPOj8gcG9zc2li bHkgc3BsaXQgdGhpcyBvZmY/Ci0jICAgICAgICAgICAgIyBJZiBubyB2YWx1ZSBmb3IgbWV0YWRh dGEsIGxvb2sgaW4gZGF0YXR5cGUgZm9yIG1ldGFkYXRhLgotIyAgICAgICAgICAgIGVsaWYgdmFs IGlzIE5vbmUgYW5kIGhhc2F0dHIoIGhkYS5kYXRhdHlwZSwgbmFtZSApOgotIyAgICAgICAgICAg ICAgICB2YWwgPTNEIGdldGF0dHIoIGhkYS5kYXRhdHlwZSwgbmFtZSApCi0jICAgICAgICAgICAg bWRbIG5hbWUgXSA9M0QgdmFsCi0jCi0jICAgICAgICByZXR1cm4gbWQKLQotCi1jbGFzcyBEYXRh c2V0Q29sbGVjdGlvbkRlc2VyaWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciApOgotCi0g ICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKLSAgICAgICAgc3VwZXIoIERhdGFzZXRDb2xs ZWN0aW9uU2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQotCi0gICAgI2RlZiBfdmFs aWRhdGVfYW5kX3BhcnNlX3VwZGF0ZV9wYXlsb2FkKCBzZWxmLCBwYXlsb2FkICk6Ci0gICAgIyAg ICB2YWxpZGF0ZWRfcGF5bG9hZCA9M0Qge30KLSAgICAjICAgIGZvciBrZXksIHZhbCBpbiBwYXls b2FkLml0ZW1zKCk6Ci0gICAgIyAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgIyAgICAgICAg ICAgIGNvbnRpbnVlCi0gICAgIyAgICAgICAgaWYga2V5IGluICggJ25hbWUnICk6Ci0gICAgIyAg ICAgICAgICAgIHZhbCA9M0QgdmFsaWRhdGlvbi52YWxpZGF0ZV9hbmRfc2FuaXRpemVfYmFzZXN0 cmluZygga2V5LD0KIHZhbCApCi0gICAgIyAgICAgICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkWyBr ZXkgXSA9M0QgdmFsCi0gICAgIyAgICAgICAgaWYga2V5IGluICggJ2RlbGV0ZWQnLCAndmlzaWJs ZScgKToKLSAgICAjICAgICAgICAgICAgdmFsaWRhdGVkX3BheWxvYWRbIGtleSBdID0zRCB2YWxp ZGF0aW9uLnZhbGlkYXRlX2Jvb2xlYW4oPQoga2V5LCB2YWwgKQotICAgICMgICAgICAgIGVsaWYg a2V5ID0zRD0zRCAndGFncyc6Ci0gICAgIyAgICAgICAgICAgIHZhbGlkYXRlZF9wYXlsb2FkWyBr ZXkgXSA9M0QgdmFsaWRhdGlvbi52YWxpZGF0ZV9hbmRfc2FuaT0KdGl6ZV9iYXNlc3RyaW5nX2xp c3QoIGtleSwgdmFsICkKLSAgICAjICAgIHJldHVybiB2YWxpZGF0ZWRfcGF5bG9hZAotCi0gICAg I2RlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgotICAgICMgICAgc2VsZi5kZXNlcmlhbGl6 ZXJzLnVwZGF0ZSh7Ci0gICAgIyAgICAgICAgJ25hbWUnICAgICAgICAgIDogc2VsZi5kZXNlcmlh bGl6ZV9iYXNlc3RyaW5nLAotICAgICMgICAgICAgICdnZW5vbWVfYnVpbGQnICA6IHNlbGYuZGVz ZXJpYWxpemVfZ2Vub21lX2J1aWxkLAotICAgICMgICAgICAgICdkZWxldGVkJyAgICAgICA6IHNl bGYuZGVzZXJpYWxpemVfYm9vbCwKLSAgICAjICAgICAgICAncHVibGlzaGVkJyAgICAgOiBzZWxm LmRlc2VyaWFsaXplX2Jvb2wsCi0gICAgIyAgICAgICAgI1RPRE86IHRvIG1peGluOiBhbm5vdGF0 YWJsZQotICAgICMgICAgICAgICMnYW5ub3RhdGlvbicgICAgOiBzZWxmLmRlc2VyaWFsaXplX2Fu bm90YXRpb24sCi0gICAgIyAgICAgICAgI1RPRE86IHRvIG1peGluOiB0YWdnYWJsZQotICAgICMg ICAgICAgICMndGFncycgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgaywgdjogLAotICAgICMgICAg fSkKLSAgICAjICAgIHNlbGYuZGVzZXJpYWxpemFibGVfa2V5cyA9M0Qgc2VsZi5kZXNlcmlhbGl6 ZXJzLmtleXMoKQoKZGlmZiAtciBiNDUwZDcxOTg3YTFiMmEyMWVhNWU1MjAzNTEyZmUwZDVlYTkx MmY4IC1yIGQ0MjdkYzIwNWNkZGNlMzFkYjI2MzM2PQo3Zjc2MzZlMzMxODA0M2Y1MSBsaWIvZ2Fs YXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNl dHMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQpAQCAtMTkyLDcgKzE5 Miw3IEBACj0yMAo9MjAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLQotY2xhc3MgRGF0YXNldFNl cmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyICk6CitjbGFzcyBEYXRhc2V0U2VyaWFsaXpl ciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIsIGJhc2UuUHVyZ2FibGVNb2RlbFNlcmlhbGl6ZT0KciAp Ogo9MjAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlciggRGF0 YXNldFNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKQEAgLTIxOSw2ICsyMTksNyBA QAogICAgICAgICBzZWxmLmRlZmF1bHRfdmlldyA9M0QgJ3N1bW1hcnknCj0yMAogICAgIGRlZiBh ZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgYmFzZS5QdXJnYWJsZU1vZGVsU2VyaWFs aXplci5hZGRfc2VyaWFsaXplcnMoIHNlbGYgKQogICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVw ZGF0ZSh7CiAgICAgICAgICAgICAnaWQnICAgICAgICAgICAgOiBzZWxmLnNlcmlhbGl6ZV9pZCwK ICAgICAgICAgICAgICdjcmVhdGVfdGltZScgICA6IHNlbGYuc2VyaWFsaXplX2RhdGUsCkBAIC0y MzUsNiArMjM2LDcgQEAKICAgICAgICAgc3VwZXIoIERhdGFzZXREZXNlcmlhbGl6ZXIsIHNlbGYg KS5hZGRfZGVzZXJpYWxpemVycygpCiAgICAgICAgIGJhc2UuUHVyZ2FibGVNb2RlbERlc2VyaWFs aXplci5hZGRfZGVzZXJpYWxpemVycyggc2VsZiApCj0yMAorCiAjID0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRAogY2xhc3Mg RGF0YXNldEFzc29jaWF0aW9uTWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIsIGJhc2UuQWNjZXNz aWJsZU1vZGVsSW49CnRlcmZhY2UsIGJhc2UuUHVyZ2FibGVNb2RlbEludGVyZmFjZSApOgogICAg ICIiIgpAQCAtMjY5LDEzICsyNzEsMTEgQEAKPTIwCj0yMAogIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0t LS0tCi1jbGFzcyBEYXRhc2V0QXNzb2NpYXRpb25TZXJpYWxpemVyKCBiYXNlLk1vZGVsU2VyaWFs aXplciApOgotCi0gICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAgKToKLSAgICAgICAgc3VwZXIo IERhdGFzZXRBc3NvY2lhdGlvblNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKK2Ns YXNzIERhdGFzZXRBc3NvY2lhdGlvblNlcmlhbGl6ZXIoIGJhc2UuTW9kZWxTZXJpYWxpemVyLCBi YXNlLlB1cmdhYmxlTW9kPQplbFNlcmlhbGl6ZXIgKToKPTIwCiAgICAgZGVmIGFkZF9zZXJpYWxp emVycyggc2VsZiApOgogICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uU2VyaWFsaXpl ciwgc2VsZiApLmFkZF9zZXJpYWxpemVycygpCisgICAgICAgIGJhc2UuUHVyZ2FibGVNb2RlbFNl cmlhbGl6ZXIuYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICkKPTIwCj0yMAogIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS09Ci0tLS0tCgpkaWZmIC1yIGI0NTBkNzE5ODdhMWIyYTIxZWE1ZTUyMDM1MTJmZTBkNWVhOTEy ZjggLXIgZDQyN2RjMjA1Y2RkY2UzMWRiMjYzMzY9CjdmNzYzNmUzMzE4MDQzZjUxIGxpYi9nYWxh eHkvbWFuYWdlcnMvaGRhcy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKKysr IGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5CkBAIC01NzgsMTEgKzU3OCwxMSBAQAogICAg ICAgICBzdXBlciggSERBRGVzZXJpYWxpemVyLCBzZWxmICkuX19pbml0X18oIGFwcCApCiAgICAg ICAgIHNlbGYuaGRhX21hbmFnZXIgPTNEIHNlbGYubWFuYWdlcgo9MjAKLSAgICAjYXNzdW1lczog aW5jb21pbmcgZnJvbSBqc29uLmxvYWRzIGFuZCBzYW5pdGl6ZWQKICAgICBkZWYgYWRkX2Rlc2Vy aWFsaXplcnMoIHNlbGYgKToKICAgICAgICAgc3VwZXIoIEhEQURlc2VyaWFsaXplciwgc2VsZiAp LmFkZF9kZXNlcmlhbGl6ZXJzKCkKICAgICAgICAgdGFnZ2FibGUuVGFnZ2FibGVEZXNlcmlhbGl6 ZXIuYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKQogICAgICAgICBhbm5vdGF0YWJsZS5Bbm5vdGF0 YWJsZURlc2VyaWFsaXplci5hZGRfZGVzZXJpYWxpemVycyggc2VsZiApCisKICAgICAgICAgc2Vs Zi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZSh7CiAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgOiBz ZWxmLmRlc2VyaWFsaXplX2Jhc2VzdHJpbmcsCiAgICAgICAgICAgICAndmlzaWJsZScgICAgICAg OiBzZWxmLmRlc2VyaWFsaXplX2Jvb2wsCkBAIC02MDMsNCArNjAzLDQgQEAKICAgICAgICAgICAg ICdpbXBvcnRhYmxlJyAgICA6IHNlbGYuZGVzZXJpYWxpemVfYm9vbCwKPTIwCiAgICAgICAgIH0p Ci0gICAgICAgIHNlbGYuZGVzZXJpYWxpemFibGVfa2V5cyA9M0Qgc2VsZi5kZXNlcmlhbGl6ZXJz LmtleXMoKQorICAgICAgICBzZWxmLmRlc2VyaWFsaXphYmxlX2tleXMuZXh0ZW5kKCBzZWxmLmRl c2VyaWFsaXplcnMua2V5cygpICkKCmRpZmYgLXIgYjQ1MGQ3MTk4N2ExYjJhMjFlYTVlNTIwMzUx MmZlMGQ1ZWE5MTJmOCAtciBkNDI3ZGMyMDVjZGRjZTMxZGIyNjMzNj0KN2Y3NjM2ZTMzMTgwNDNm NTEgbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5h Z2Vycy9oaXN0b3JpZXMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9oaXN0b3JpZXMucHkK QEAgLTI1Miw3ICsyNTIsNiBAQAogICAgICAgICBzdXBlciggSGlzdG9yeVNlcmlhbGl6ZXIsIHNl bGYgKS5fX2luaXRfXyggYXBwICkKICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIgPTNEIEhp c3RvcnlNYW5hZ2VyKCBhcHAgKQo9MjAKLSAgICAgICAgZnJvbSBnYWxheHkubWFuYWdlcnMgaW1w b3J0IGhkYXMKICAgICAgICAgc2VsZi5oZGFfbWFuYWdlciA9M0QgaGRhcy5IREFNYW5hZ2VyKCBh cHAgKQogICAgICAgICBzZWxmLmhkYV9zZXJpYWxpemVyID0zRCBoZGFzLkhEQVNlcmlhbGl6ZXIo IGFwcCApCj0yMAoKZGlmZiAtciBiNDUwZDcxOTg3YTFiMmEyMWVhNWU1MjAzNTEyZmUwZDVlYTkx MmY4IC1yIGQ0MjdkYzIwNWNkZGNlMzFkYjI2MzM2PQo3Zjc2MzZlMzMxODA0M2Y1MSBsaWIvZ2Fs YXh5L21hbmFnZXJzL3BhZ2VzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvcGFnZXMucHkK KysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9wYWdlcy5weQpAQCAtNDcsNiArNDcsNyBAQAogICAg ICIiIgogICAgIEludGVyZmFjZS9zZXJ2aWNlIG9iamVjdCBmb3Igc2VyaWFsaXppbmcgcGFnZXMg aW50byBkaWN0aW9uYXJpZXMuCiAgICAgIiIiCisgICAgU0lOR0xFX0NIQVJfQUJCUiA9M0QgJ3An Cj0yMAogICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CiAgICAgICAgIHN1cGVyKCBQYWdl U2VyaWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQoKZGlmZiAtciBiNDUwZDcxOTg3YTFi MmEyMWVhNWU1MjAzNTEyZmUwZDVlYTkxMmY4IC1yIGQ0MjdkYzIwNWNkZGNlMzFkYjI2MzM2PQo3 Zjc2MzZlMzMxODA0M2Y1MSBsaWIvZ2FsYXh5L21hbmFnZXJzL3JhdGFibGUucHkKLS0tIGEvbGli L2dhbGF4eS9tYW5hZ2Vycy9yYXRhYmxlLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvcmF0 YWJsZS5weQpAQCAtMzUsNyArMzUsNiBAQAo9MjAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECiBjbGFzcyBSYXRhYmxl RGVzZXJpYWxpemVyKCBvYmplY3QgKToKLSAgICBwYXNzCj0yMAogICAgIGRlZiBhZGRfZGVzZXJp YWxpemVycyggc2VsZiApOgogICAgICAgICBwYXNzCkBAIC00NCw0ICs0MywzIEBACiAgICAgI2Rl ZiBkZXNlcmlhbGl6ZV9yYXRpbmcoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApOgogICAg ICMgICAgdmFsID0zRCBzZWxmLnZhbGlkYXRlLmludF9yYW5nZSgga2V5LCB2YWwsIDAsIDUgKQog ICAgICMgICAgcmV0dXJuIHNlbGYuc2V0X3JhdGluZy4uLiggdHJhbnMsIGl0ZW0sIHZhbCwgdXNl cj0zRHRyYW5zLnVzZXIgKQotCgpkaWZmIC1yIGI0NTBkNzE5ODdhMWIyYTIxZWE1ZTUyMDM1MTJm ZTBkNWVhOTEyZjggLXIgZDQyN2RjMjA1Y2RkY2UzMWRiMjYzMzY9CjdmNzYzNmUzMzE4MDQzZjUx IGxpYi9nYWxheHkvbWFuYWdlcnMvc2hhcmFibGUucHkKLS0tIGEvbGliL2dhbGF4eS9tYW5hZ2Vy cy9zaGFyYWJsZS5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL3NoYXJhYmxlLnB5CkBAIC0z MzgsOCArMzM4LDYgQEAKICAgICAjICAgICIiIiBTZXQgdXNlcidzIHB1YmxpYyB1c2VybmFtZSBh bmQgZGVsZWdhdGUgdG8gc2hhcmluZygpICIiIgogICAgICNkZWYgc2hhcmluZyggc2VsZiwgdHJh bnMsIGlkLCAqKmt3YXJncyApOgogICAgICMgICAgIiIiIEhhbmRsZSBpdGVtIHNoYXJpbmcuICIi IgotICAgICNkZWYgZ2V0X25hbWVfYW5kX2xpbmtfYXN5bmMoIHNlbGYsIHRyYW5zLCBpZD0zRE5v bmUgKToKLSAgICAjICAgICIiIiBSZXR1cm5zIGl0ZW0ncyBuYW1lIGFuZCBsaW5rLiAiIiIKPTIw Cj0yMAogIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPQo9M0Q9M0Q9M0QKCmRpZmYgLXIgYjQ1MGQ3MTk4N2ExYjJhMjFlYTVlNTIwMzUxMmZl MGQ1ZWE5MTJmOCAtciBkNDI3ZGMyMDVjZGRjZTMxZGIyNjMzNj0KN2Y3NjM2ZTMzMTgwNDNmNTEg bGliL2dhbGF4eS9tYW5hZ2Vycy91c2Vycy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3Vz ZXJzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKQEAgLTI2LDcgKzI2LDYg QEAKICAgICAjVE9ETzogdGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZnVuY3Rpb25hbGl0eSBhcm91 bmQgdGhlIHVzZXIgKGF1dGhlbnRpPQpjYXRpb24sIHBlcm1pc3Npb25zLCBxdW90YXMsIGdyb3Vw cy9yb2xlcykKICAgICAjICAgbW9zdCBvZiB3aGljaCBpdCBtYXkgYmUgdW5uZWNjZXNzYXJ5IHRv IGhhdmUgaGVyZQo9MjAKLSAgICAjVE9ETzogaW5jb3JwIFByb3ZpZGVzVXNlckNvbnRleHQKICAg ICAjVE9ETzogaW5jb3JwIEJhc2VBUElDb250cm9sbGVyLnZhbGlkYXRlX2luX3VzZXJzX2FuZF9n cm91cHMKICAgICAjVE9ETzogaW5jb3JwIENyZWF0ZXNVc2Vyc01peGluCiAgICAgI1RPRE86IGlu Y29ycCBDcmVhdGVzQXBpS2V5c01peGluCgpkaWZmIC1yIGI0NTBkNzE5ODdhMWIyYTIxZWE1ZTUy MDM1MTJmZTBkNWVhOTEyZjggLXIgZDQyN2RjMjA1Y2RkY2UzMWRiMjYzMzY9CjdmNzYzNmUzMzE4 MDQzZjUxIGxpYi9nYWxheHkvbWFuYWdlcnMvdmlzdWFsaXphdGlvbnMucHkKLS0tIGEvbGliL2dh bGF4eS9tYW5hZ2Vycy92aXN1YWxpemF0aW9ucy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJz L3Zpc3VhbGl6YXRpb25zLnB5CkBAIC00OCw2ICs0OCw3IEBACiAgICAgIiIiCiAgICAgSW50ZXJm YWNlL3NlcnZpY2Ugb2JqZWN0IGZvciBzZXJpYWxpemluZyB2aXN1YWxpemF0aW9ucyBpbnRvIGRp Y3Rpb25hcj0KaWVzLgogICAgICIiIgorICAgIFNJTkdMRV9DSEFSX0FCQlIgPTNEICd2Jwo9MjAK ICAgICBkZWYgX19pbml0X18oIHNlbGYsIGFwcCApOgogICAgICAgICBzdXBlciggVmlzdWFsaXph dGlvblNlcmlhbGl6ZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwICkKCgpodHRwczovL2JpdGJ1Y2tl dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMjk0ODZhNzEzZmFiLwpDaGFuZ2Vz ZXQ6ICAgMjk0ODZhNzEzZmFiClVzZXI6ICAgICAgICBjYXJsZmViZXJoYXJkCkRhdGU6ICAgICAg ICAyMDE1LTAxLTE1IDE4OjU4OjU1KzAwOjAwClN1bW1hcnk6ICAgICBNZXJnZWQgZ2FsYXh5L2dh bGF4eS1jZW50cmFsIGludG8gZGVmYXVsdApBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGQ0 MjdkYzIwNWNkZGNlMzFkYjI2MzM2N2Y3NjM2ZTMzMTgwNDNmNTEgLXIgMjk0ODZhNzEzZmFiOTAz ODRlOTFkMzI9CmIzOTM0NDYxMzg2ZDQ1YWVjIGxpYi9nYWxheHkvdG9vbHMvZXZhbHVhdGlvbi5w eQotLS0gYS9saWIvZ2FsYXh5L3Rvb2xzL2V2YWx1YXRpb24ucHkKKysrIGIvbGliL2dhbGF4eS90 b29scy9ldmFsdWF0aW9uLnB5CkBAIC0zODIsNyArMzgyLDcgQEAKICAgICAgICAgTm90ZTogdGhp cyBtZXRob2QgZm9sbG93cyB0aGUgc3R5bGUgb2YgdGhlIHNpbWlsYXIgcG9wdWxhdGUgY2FsbHMs PQogaW4gdGhhdCBwYXJhbV9kaWN0IGlzIG1vZGlmaWVkIGluLXBsYWNlLgogICAgICAgICAiIiIK ICAgICAgICAgIyBjaHJvbUluZm8gaXMgYSBmaWxlbmFtZSwgZG8gbm90IHNhbml0aXplIGl0Lgot ICAgICAgICBza2lwID0zRCBbICdjaHJvbUluZm8nIF0KKyAgICAgICAgc2tpcCA9M0QgWyAnY2hy b21JbmZvJyBdICsgc2VsZi50b29sLnRlbXBsYXRlX21hY3JvX3BhcmFtcy5rZXlzKCkKICAgICAg ICAgaWYgbm90IHNlbGYudG9vbCBvciBub3Qgc2VsZi50b29sLm9wdGlvbnMgb3Igc2VsZi50b29s Lm9wdGlvbnMuc2FuPQppdGl6ZToKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHBhcmFt X2RpY3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNraXA6CgoKaHR0 cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzhhNzA0NTc5 MmM3Zi8KQ2hhbmdlc2V0OiAgIDhhNzA0NTc5MmM3ZgpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFy ZApEYXRlOiAgICAgICAgMjAxNS0wMS0xNSAxOTowMToyOCswMDowMApTdW1tYXJ5OiAgICAgUHVz aCBkZWZhdWx0X29yZGVyX2J5IGRvd24gZnJvbSBjbGFzcyBsZXZlbCB2YXIgdG8gaW5zdGFuY2Ug bWU9CnRob2QgKGNsYXNzIGxldmVsIHJlbGllcyBvbiBtYXBwaW5nIGJlaW5nIGxvYWRlZCBiZWZv cmUgbWFuYWdlcnMpCkFmZmVjdGVkICM6ICA3IGZpbGVzCgpkaWZmIC1yIDI5NDg2YTcxM2ZhYjkw Mzg0ZTkxZDMyYjM5MzQ0NjEzODZkNDVhZWMgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1Nzc9CjA0 ZTUxZTMxM2QzMmU2Y2RkIGxpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQotLS0gYS9saWIvZ2Fs YXh5L21hbmFnZXJzL2Jhc2UucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9iYXNlLnB5CkBA IC0xNTgsMTEgKzE1OCwxNyBAQAogICAgIG92ZXIgdGhlIE9STS4KICAgICAiIiIKICAgICBtb2Rl bF9jbGFzcyA9M0Qgb2JqZWN0Ci0gICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgTm9uZQogICAgIGZv cmVpZ25fa2V5X25hbWUgPTNEIE5vbmUKPTIwCiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBhcHAg KToKICAgICAgICAgc2VsZi5hcHAgPTNEIGFwcAorICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJf YnkgPTNEIE5vbmUKKworICAgIGRlZiBfZGVmYXVsdF9vcmRlcl9ieSggc2VsZiApOgorICAgICAg ICAiIiIKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIG9mIGNvbHVtbnMgZm9yIHRoZSBkZWZhdWx0 IG9yZGVyIHdoZW4gZ2V0dGluZyBtdWx0PQppcGxlIG1vZGVscy4KKyAgICAgICAgIiIiCisgICAg ICAgIHJldHVybiAoIHNlbGYubW9kZWxfY2xhc3MuY3JlYXRlX3RpbWUsICkKPTIwCiAgICAgI05P VEU6IGF0IHRoaXMgbGF5ZXIsIGFsbCBpZHMgYXJlIGV4cGVjdGVkIHRvIGJlIGRlY29kZWQgYW5k IGluIGludCBmbz0Kcm0KICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLSBnZXQvcmVhZC9xdWVyeQpA QCAtMjI5LDcgKzIzNSw3IEBACiAgICAgICAgIFVzZSB0aGUgbWFuYWdlcidzIGRlZmF1bHRfb3Jk ZXJfYnkgaWYgb3JkZXJfYnkgaXMgTm9uZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG9yZGVy X2J5IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gcXVlcnkub3JkZXJfYnkoICpzZWxmLmRl ZmF1bHRfb3JkZXJfYnkgKQorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVyX2J5KCAqc2Vs Zi5kZWZhdWx0X29yZGVyX2J5KCkgKQo9MjAKICAgICAgICAgaWYgaXNpbnN0YW5jZSggb3JkZXJf YnksICggbGlzdCwgdHVwbGUgKSApOgogICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVyX2J5 KCAqb3JkZXJfYnkgKQoKZGlmZiAtciAyOTQ4NmE3MTNmYWI5MDM4NGU5MWQzMmIzOTM0NDYxMzg2 ZDQ1YWVjIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3PQowNGU1MWUzMTNkMzJlNmNkZCBsaWIv Z2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvZGF0 YXNldHMucHkKKysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9kYXRhc2V0cy5weQpAQCAtMTgsNyAr MTgsNiBAQAogICAgICIiIgo9MjAKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuRGF0YXNldAot ICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNEICggbW9kZWwuRGF0YXNldC5jcmVhdGVfdGltZSwgKQog ICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdkYXRhc2V0Jwo9MjAKICAgICAjVE9ETzo/PyBnZXQg KyBlcnJvcl9pZl91cGxvYWRpbmcgaXMgY29tbW9uIHBhdHRlcm4sIHNob3VsZCB1cGxvYWQgY2hl PQpjayBiZSB3b3JrZWQgaW50byBhY2Nlc3Mvb3dlZD8KCmRpZmYgLXIgMjk0ODZhNzEzZmFiOTAz ODRlOTFkMzJiMzkzNDQ2MTM4NmQ0NWFlYyAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3Nz0KMDRl NTFlMzEzZDMyZTZjZGQgbGliL2dhbGF4eS9tYW5hZ2Vycy9oZGFzLnB5Ci0tLSBhL2xpYi9nYWxh eHkvbWFuYWdlcnMvaGRhcy5weQorKysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2hkYXMucHkKQEAg LTMwLDcgKzMwLDYgQEAKICAgICAiIiIKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuSGlzdG9y eURhdGFzZXRBc3NvY2lhdGlvbgogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICdoaXN0b3J5X2Rh dGFzZXRfYXNzb2NpYXRpb24nCi0gICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2RlbC5IaXN0 b3J5RGF0YXNldEFzc29jaWF0aW9uLmNyZWF0ZV90aW1lLCApCj0yMAogICAgIHRhZ19hc3NvYyA9 M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvblRhZ0Fzc29jaWF0aW9uCiAgICAgYW5u b3RhdGlvbl9hc3NvYyA9M0QgbW9kZWwuSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbkFubm90YXRp b25Bc3NvY2lhdD0KaW9uCgpkaWZmIC1yIDI5NDg2YTcxM2ZhYjkwMzg0ZTkxZDMyYjM5MzQ0NjEz ODZkNDVhZWMgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1Nzc9CjA0ZTUxZTMxM2QzMmU2Y2RkIGxp Yi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMv aGlzdG9yaWVzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvaGlzdG9yaWVzLnB5CkBAIC0y Miw3ICsyMiw2IEBACiBjbGFzcyBIaXN0b3J5TWFuYWdlciggc2hhcmFibGUuU2hhcmFibGVNb2Rl bE1hbmFnZXIsIGJhc2UuUHVyZ2FibGVNb2RlbEludD0KZXJmYWNlICk6Cj0yMAogICAgIG1vZGVs X2NsYXNzID0zRCBtb2RlbC5IaXN0b3J5Ci0gICAgZGVmYXVsdF9vcmRlcl9ieSA9M0QgKCBtb2Rl bC5IaXN0b3J5LmNyZWF0ZV90aW1lLCApCiAgICAgZm9yZWlnbl9rZXlfbmFtZSA9M0QgJ2hpc3Rv cnknCiAgICAgdXNlcl9zaGFyZV9tb2RlbCA9M0QgbW9kZWwuSGlzdG9yeVVzZXJTaGFyZUFzc29j aWF0aW9uCj0yMAoKZGlmZiAtciAyOTQ4NmE3MTNmYWI5MDM4NGU5MWQzMmIzOTM0NDYxMzg2ZDQ1 YWVjIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3PQowNGU1MWUzMTNkMzJlNmNkZCBsaWIvZ2Fs YXh5L21hbmFnZXJzL3BhZ2VzLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvcGFnZXMucHkK KysrIGIvbGliL2dhbGF4eS9tYW5hZ2Vycy9wYWdlcy5weQpAQCAtMjMsNyArMjMsNiBAQAogICAg ICIiIgo9MjAKICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuUGFnZQotICAgIGRlZmF1bHRfb3Jk ZXJfYnkgPTNEICggbW9kZWwuUGFnZS5jcmVhdGVfdGltZSwgKQogICAgIGZvcmVpZ25fa2V5X25h bWUgPTNEICdwYWdlJwogICAgIHVzZXJfc2hhcmVfbW9kZWwgPTNEIG1vZGVsLlBhZ2VVc2VyU2hh cmVBc3NvY2lhdGlvbgo9MjAKCmRpZmYgLXIgMjk0ODZhNzEzZmFiOTAzODRlOTFkMzJiMzkzNDQ2 MTM4NmQ0NWFlYyAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3Nz0KMDRlNTFlMzEzZDMyZTZjZGQg bGliL2dhbGF4eS9tYW5hZ2Vycy91c2Vycy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL3Vz ZXJzLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvdXNlcnMucHkKQEAgLTIwLDcgKzIwLDYg QEAKICMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0KPTNEPTNEPTNECiBjbGFzcyBVc2VyTWFuYWdlciggYmFzZS5Nb2RlbE1hbmFnZXIgKToK ICAgICBtb2RlbF9jbGFzcyA9M0QgbW9kZWwuVXNlcgotICAgIGRlZmF1bHRfb3JkZXJfYnkgPTNE ICggbW9kZWwuVXNlci5jcmVhdGVfdGltZSwgKQogICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEICd1 c2VyJwo9MjAKICAgICAjVE9ETzogdGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZnVuY3Rpb25hbGl0 eSBhcm91bmQgdGhlIHVzZXIgKGF1dGhlbnRpPQpjYXRpb24sIHBlcm1pc3Npb25zLCBxdW90YXMs IGdyb3Vwcy9yb2xlcykKCmRpZmYgLXIgMjk0ODZhNzEzZmFiOTAzODRlOTFkMzJiMzkzNDQ2MTM4 NmQ0NWFlYyAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3Nz0KMDRlNTFlMzEzZDMyZTZjZGQgbGli L2dhbGF4eS9tYW5hZ2Vycy92aXN1YWxpemF0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFn ZXJzL3Zpc3VhbGl6YXRpb25zLnB5CisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvdmlzdWFsaXph dGlvbnMucHkKQEAgLTIyLDcgKzIyLDYgQEAKICAgICAiIiIKPTIwCiAgICAgbW9kZWxfY2xhc3Mg PTNEIG1vZGVsLlZpc3VhbGl6YXRpb24KLSAgICBkZWZhdWx0X29yZGVyX2J5ID0zRCAoIG1vZGVs LlZpc3VhbGl6YXRpb24uY3JlYXRlX3RpbWUsICkKICAgICBmb3JlaWduX2tleV9uYW1lID0zRCAn dmlzdWFsaXphdGlvbicKICAgICB1c2VyX3NoYXJlX21vZGVsID0zRCBtb2RlbC5WaXN1YWxpemF0 aW9uVXNlclNoYXJlQXNzb2NpYXRpb24KPTIwCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4 eS9nYWxheHktY2VudHJhbC9jb21taXRzLzBmNzM3NDg1Y2I3Zi8KQ2hhbmdlc2V0OiAgIDBmNzM3 NDg1Y2I3ZgpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMS0y MSAxNzo0NTozNyswMDowMApTdW1tYXJ5OiAgICAgKE1hbnVhbGx5KSBtZXJnZSBjZW50cmFsCkFm ZmVjdGVkICM6ICAzNCBmaWxlcwoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUx ZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2 ZiAuaGd0YWdzCi0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMjIsNCArMjIsNCBAQAog MjA5Mjk0ODkzN2FjMzBlZjgyZjcxNDYzYTIzNWM2NmQzNDk4NzA4OCByZWxlYXNlXzIwMTQuMTAu MDYKIDliZDZmOGI1YjgxNTNkYjc1MmY0ZTYxZWQ2MmYyYjZjMDFhZTRhMTEgbGF0ZXN0XzIwMTQu MTAuMDYKIDJlOGRkMjk0OWRkM2VlZTBmNTZmOWEzYTVlYmYxYjJiYWNhMjRhZWUgcmVsZWFzZV8y MDE1LjAxLjEzCi0yZThkZDI5NDlkZDNlZWUwZjU2ZjlhM2E1ZWJmMWIyYmFjYTI0YWVlIGxhdGVz dF8yMDE1LjAxLjEzCis1MDdlZGY4MmFkMWQ4ODhmYWFiMjVlOWJhNjZkMjlmNmVhYjUzOGY0IGxh dGVzdF8yMDE1LjAxLjEzCgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFlMzEz ZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZmIGNs aWVudC9nYWxheHkvc2NyaXB0cy9nYWxheHkubWFzdGhlYWQuanMKLS0tIGEvY2xpZW50L2dhbGF4 eS9zY3JpcHRzL2dhbGF4eS5tYXN0aGVhZC5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMv Z2FsYXh5Lm1hc3RoZWFkLmpzCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgdmFyICRwb3Bv dmVyX2VsZW1lbnQgPTNEICQodGhpcy5lbCkuZmluZCgnLmhlYWQnKTsKICAgICAgICAgJHBvcG92 ZXJfZWxlbWVudC5wb3BvdmVyKHsKICAgICAgICAgICAgIGh0bWw6IHRydWUsCi0gICAgICAgICAg ICBjb250ZW50OiAnUGxlYXNlIDxhIGhyZWY9M0QiJyArIGdhbGF4eV9jb25maWcucm9vdCArICcv dXNlci9sbz0KZ2luIj5sb2cgaW48L2E+IG9yIDxhIGhyZWY9M0QiJyArIGdhbGF4eV9jb25maWcu cm9vdCArICcvdXNlci9jcmVhdGUiPnJlZ2lzPQp0ZXI8L2E+IHRvIHVzZSB0aGlzIGZlYXR1cmUu JywKKyAgICAgICAgICAgIGNvbnRlbnQ6ICdQbGVhc2UgPGEgaHJlZj0zRCInICsgZ2FsYXh5X2Nv bmZpZy5yb290ICsgJ3VzZXIvbG9nPQppbj91c2VfcGFuZWxzPTNEVHJ1ZSI+bG9nIGluPC9hPiBv ciA8YSBocmVmPTNEIicgKyBnYWxheHlfY29uZmlnLnJvb3QgKyAndXM9CmVyL2NyZWF0ZT91c2Vf cGFuZWxzPTNEVHJ1ZSI+cmVnaXN0ZXI8L2E+IHRvIHVzZSB0aGlzIGZlYXR1cmUuJywKICAgICAg ICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScKICAgICAgICAgfSkub24oJ3Nob3duLmJzLnBvcG92 ZXInLCBmdW5jdGlvbigpIHsgLy8gaG9va2luZyBvbiBib290c3RyYXAgZXZlPQpudCB0byBhdXRv bWF0aWNhbGx5IGhpZGUgcG9wb3ZlcnMgYWZ0ZXIgZGVsYXkKICAgICAgICAgICAgIHNldFRpbWVv dXQoZnVuY3Rpb24oKSB7CgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFlMzEz ZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZmIGNs aWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCi0tLSBhL2Ns aWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCisrKyBiL2Ns aWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCkBAIC0xMSw4 ICsxMSwyMyBAQAogICAgIHJldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CiAgICAgICAgIC8v IGluaXRpYWxpemUKICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykgeworICAg ICAgICAgICAgLy8gb3B0aW9ucworICAgICAgICAgICAgdGhpcy5vcHRpb25zRGVmYXVsdCA9M0Qg eworICAgICAgICAgICAgICAgIC8vIHVzZXMgZHluYW1pYyBmaWVsZHMgaW5zdGVhZCBvZiB0ZXh0 IGZpZWxkcworICAgICAgICAgICAgICAgIGlzX2R5bmFtaWMgICAgICA6IHRydWUsCisgICAgICAg ICAgICAgICAgLy8gc2hvd3MgZm9ybSBpbiBjb21wYWN0IHZpZXcgbW9kZQorICAgICAgICAgICAg ICAgIGNvbXBhY3QgICAgICAgICA6IGZhbHNlLAorICAgICAgICAgICAgICAgIC8vIHNob3dzIGVy cm9ycyBvbiBzdGFydAorICAgICAgICAgICAgICAgIGluaXRpYWxfZXJyb3JzICA6IGZhbHNlLAor ICAgICAgICAgICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhbGwgZGF0YSBpbmNsdWRpbmcgZGlzYWJs ZWQgb3B0aW9uYWwgZmllbGQ9CnMgYXJlIHN1Ym1pdHRlZCB0byB0aGUgc2VydmVyCisgICAgICAg ICAgICAgICAgc2VuZF9hbGwgICAgICAgIDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICA9MjAK KyAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSBvcHRpb25zCisgICAgICAgICAgICB0aGlzLm9wdGlv bnMgPTNEIFV0aWxzLm1lcmdlKG9wdGlvbnMsIHRoaXMub3B0aW9uc0RlZmF1bHQpOworICAgPTIw CiAgICAgICAgICAgICAvLyBsb2cgb3B0aW9ucwotICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhv cHRpb25zKTsKKyAgICAgICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5vcHRpb25zKTsKICAgICAg ICAgICAgPTIwCiAgICAgICAgICAgICAvLyBsaW5rIGdhbGF4eSBtb2RhbCBvciBjcmVhdGUgb25l CiAgICAgICAgICAgICB2YXIgZ2FsYXh5ID0zRCBwYXJlbnQuR2FsYXh5OwpAQCAtMjksOSArNDQs NiBAQAogICAgICAgICAgICAgICAgIHRoaXMuaXNfYWRtaW4gPTNEIGZhbHNlOwogICAgICAgICAg ICAgfQogICAgICAgICAgICA9MjAKLSAgICAgICAgICAgIC8vIGxpbmsgb3B0aW9ucwotICAgICAg ICAgICAgdGhpcy5vcHRpb25zID0zRCBvcHRpb25zOwotICAgICAgICAgICA9MjAKICAgICAgICAg ICAgIC8vIGxpbmsgY29udGFpbmVyCiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9M0QgdGhp cy5vcHRpb25zLmNvbnRhaW5lciB8fCAnYm9keSc7CiAgICAgICAgICAgID0yMApAQCAtNzYsNiAr ODgsMjQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICA9MjAKKyAgICAgICAg LyoqIEhpZ2hsaWdodHMgZXJyb3JzCisgICAgICAgICovCisgICAgICAgIF9lcnJvcnM6IGZ1bmN0 aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIC8vIGhpZGUgcHJldmlvdXMgZXJyb3Igc3RhdGVt ZW50cworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdyZXNldCcpOworICAgICAgID0yMAorICAg ICAgICAgICAgLy8gaGlnaGxpZ2h0IGFsbCBlcnJvcnMKKyAgICAgICAgICAgIGlmIChvcHRpb25z ICYmIG9wdGlvbnMuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yX21lc3NhZ2Vz ID0zRCB0aGlzLnRyZWUubWF0Y2hSZXNwb25zZShvcHRpb25zLmVycj0Kb3JzKTsKKyAgICAgICAg ICAgICAgICBmb3IgKHZhciBpbnB1dF9pZCBpbiB0aGlzLmVsZW1lbnRfbGlzdCkgeworICAgICAg ICAgICAgICAgICAgICB2YXIgaW5wdXQgPTNEIHRoaXMuZWxlbWVudF9saXN0W2lucHV0X2lkXTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yX21lc3NhZ2VzW2lucHV0X2lkXSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoaW5wdXRfaWQsIGVycm9yX21lc3Nh Z2VzW2lucHV0X2lkXSw9CiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICA9MjAKICAgICAgICAg LyoqIE1haW4gdG9vbCBmb3JtIGJ1aWxkIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBvbmNlIGEgPQpuZXcgbW9kZWwgaXMgYXZhaWxhYmxlLgogICAgICAgICAqLwogICAgICAgICBf YnVpbGRGb3JtOiBmdW5jdGlvbigpIHsKQEAgLTExMCwxNyArMTQwLDE0IEBACiAgICAgICAgICAg ICAvLyByZWJ1aWxkIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlCiAgICAgICAgICAgICB0 aGlzLnRyZWUuZmluYWxpemUoKTsKICAgICAgICAgICAgPTIwCi0gICAgICAgICAgICAvLyBzaG93 IGVycm9ycwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JzKSB7Ci0gICAgICAgICAgICAg ICAgdmFyIGVycm9yX21lc3NhZ2VzID0zRCB0aGlzLnRyZWUubWF0Y2hSZXNwb25zZShvcHRpb25z LmVycj0Kb3JzKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpbnB1dF9pZCBpbiBlcnJvcl9t ZXNzYWdlcykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodChpbnB1dF9pZCwg ZXJyb3JfbWVzc2FnZXNbaW5wdXRfaWRdLCB0cnU9CmUpOwotICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIC8vIHNob3cgZXJyb3JzIG9uIHN0YXJ0dXAKKyAgICAgICAgICAgIGlmIChvcHRp b25zLmluaXRpYWxfZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JzKG9wdGlv bnMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIGFkZCBy ZWZyZXNoIGxpc3RlbmVyCiAgICAgICAgICAgICB0aGlzLm9uKCdyZWZyZXNoJywgZnVuY3Rpb24o KSB7Ci0gICAgICAgICAgICAgICAgLy8gYnkgdXNpbmcvcmVzZXRpbmcgdGhlIGRlZmVycmVkIGFq YXggcXVldWUgdGhlIG51bWJlciBvZj0KIHJlZHVuZGFudCBjYWxscyBpcyByZWR1Y2VkCisgICAg ICAgICAgICAgICAgLy8gYnkgdXNpbmcvcmVzZXR0aW5nIHRoZSBkZWZlcnJlZCBhamF4IHF1ZXVl IHRoZSBudW1iZXIgbz0KZiByZWR1bmRhbnQgY2FsbHMgaXMgcmVkdWNlZAogICAgICAgICAgICAg ICAgIHNlbGYuZGVmZXJyZWQucmVzZXQoKTsKICAgICAgICAgICAgICAgICBzZWxmLmRlZmVycmVk LmV4ZWN1dGUoZnVuY3Rpb24oKXtzZWxmLl91cGRhdGVNb2RlbCgpfSk7CiAgICAgICAgICAgICB9 KTsKQEAgLTE0OCw3ICsxNzUsNyBAQAogICAgICAgICAgICAgLy8gYnV0dG9uIGZvciB2ZXJzaW9u IHNlbGVjdGlvbgogICAgICAgICAgICAgdmFyIHJlcXVpcmVtZW50c19idXR0b24gPTNEIG5ldyBV aS5CdXR0b25JY29uKHsKICAgICAgICAgICAgICAgICBpY29uICAgIDogJ2ZhLWluZm8tY2lyY2xl JywKLSAgICAgICAgICAgICAgICB0aXRsZSAgIDogKCF0aGlzLndvcmtmbG93ICYmICdSZXF1aXJl bWVudHMnKSB8fCBudWxsLAorICAgICAgICAgICAgICAgIHRpdGxlICAgOiAoIW9wdGlvbnMuY29t cGFjdCAmJiAnUmVxdWlyZW1lbnRzJykgfHwgbnVsbCwKICAgICAgICAgICAgICAgICB0b29sdGlw IDogJ0Rpc3BsYXkgdG9vbCByZXF1aXJlbWVudHMnLAogICAgICAgICAgICAgICAgIG9uY2xpY2sg OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHsK QEAgLTE3Myw3ICsyMDAsNyBAQAogICAgICAgICAgICAgLy8gYnV0dG9uIGZvciB2ZXJzaW9uIHNl bGVjdGlvbgogICAgICAgICAgICAgdmFyIHZlcnNpb25zX2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRv bk1lbnUoewogICAgICAgICAgICAgICAgIGljb24gICAgOiAnZmEtY3ViZXMnLAotICAgICAgICAg ICAgICAgIHRpdGxlICAgOiAoIXRoaXMud29ya2Zsb3cgJiYgJ1ZlcnNpb25zJykgfHwgbnVsbCwK KyAgICAgICAgICAgICAgICB0aXRsZSAgIDogKCFvcHRpb25zLmNvbXBhY3QgJiYgJ1ZlcnNpb25z JykgfHwgbnVsbCwKICAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1NlbGVjdCBhbm90aGVyIHRv b2wgdmVyc2lvbicKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVy c2lvbnMgJiYgb3B0aW9ucy52ZXJzaW9ucy5sZW5ndGggPiAxKSB7CkBAIC0yMDMsNyArMjMwLDcg QEAKICAgICAgICAgICAgIC8vIGJ1dHRvbiBtZW51CiAgICAgICAgICAgICB2YXIgbWVudV9idXR0 b24gPTNEIG5ldyBVaS5CdXR0b25NZW51KHsKICAgICAgICAgICAgICAgICBpY29uICAgIDogJ2Zh LWNhcmV0LWRvd24nLAotICAgICAgICAgICAgICAgIHRpdGxlICAgOiAoIXRoaXMud29ya2Zsb3cg JiYgJ09wdGlvbnMnKSB8fCBudWxsLAorICAgICAgICAgICAgICAgIHRpdGxlICAgOiAoIW9wdGlv bnMuY29tcGFjdCAmJiAnT3B0aW9ucycpIHx8IG51bGwsCiAgICAgICAgICAgICAgICAgdG9vbHRp cCA6ICdWaWV3IGF2YWlsYWJsZSBvcHRpb25zJwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAg ID0yMApAQCAtMjgwLDcgKzMwNyw3IEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPTIw CiAgICAgICAgICAgICAvLyByZW1vdmUgcGFkZGluZwotICAgICAgICAgICAgaWYgKHRoaXMub3B0 aW9ucy53b3JrZmxvdykgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29tcGFjdCkgewogICAg ICAgICAgICAgICAgIHRoaXMucG9ydGxldC4kY29udGVudC5jc3MoJ3BhZGRpbmcnLCAnMHB4Jyk7 CiAgICAgICAgICAgICB9CiAgICAgICAgICAgID0yMAoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhh OTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4 ZGMwMmJhMzY5OTc2ZiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0t d29ya2Zsb3cuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1m b3JtLXdvcmtmbG93LmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9v bHMtZm9ybS13b3JrZmxvdy5qcwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgICAgICAgICB2YXIg cHJvY2Vzc19pZCA9M0QgdGhpcy5kZWZlcnJlZC5yZWdpc3RlcigpOwo9MjAKICAgICAgICAgICAg IC8vIGJ1aWxkIG1vZGVsIHVybCBmb3IgcmVxdWVzdAotICAgICAgICAgICAgdmFyIG1vZGVsX3Vy bCA9M0QgZ2FsYXh5X2NvbmZpZy5yb290ICsgJ3dvcmtmbG93L2VkaXRvcl9mb3JtX3A9Cm9zdD90 b29sX2lkPTNEJyArIHRoaXMub3B0aW9ucy5pZDsKKyAgICAgICAgICAgIHZhciBtb2RlbF91cmwg PTNEIGdhbGF4eV9jb25maWcucm9vdCArICd3b3JrZmxvdy9lZGl0b3JfZm9ybV9wPQpvc3Q/dG9v bF9pZD0zRCcgKyB0aGlzLm9wdGlvbnMuaWQgKyAnJl9faXNfZHluYW1pY19fPTNERmFsc2UnOwog ICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIHBvc3Qgam9iCiAgICAgICAgICAgICBVdGls cy5yZXF1ZXN0KHsKQEAgLTI4Miw3ICsyODIsMTAgQEAKICAgICAgICAgICAgICAgICBzdWNjZXNz IDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbm9kZSBp biB3b3JrZmxvdyBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5ub2RlLnVwZGF0ZV9m aWVsZF9kYXRhKGRhdGEpOwotICAgICAgICAgICAgICAgICAgID0yMAorCisgICAgICAgICAgICAg ICAgICAgIC8vIGhpZ2hsaWdodCBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJy b3JzKGRhdGEgJiYgZGF0YS50b29sX21vZGVsKTsKKwogICAgICAgICAgICAgICAgICAgICAvLyBw cm9jZXNzIGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgICBzZWxmLmRlZmVycmVkLmRvbmUo cHJvY2Vzc19pZCk7CiAgICAgICAgICAgID0yMAoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTky OTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMw MmJhMzY5OTc2ZiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWlucHV0Lmpz Ci0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtaW5wdXQuanMKKysr IGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1pbnB1dC5qcwpAQCAtNTEs OSArNTEsMTEgQEAKICAgICAgICAgLyoqIFNldCBlcnJvciB0ZXh0CiAgICAgICAgICovCiAgICAg ICAgIGVycm9yOiBmdW5jdGlvbih0ZXh0KSB7Ci0gICAgICAgICAgICB0aGlzLiRlcnJvcl90ZXh0 Lmh0bWwodGV4dCk7Ci0gICAgICAgICAgICB0aGlzLiRlcnJvci5mYWRlSW4oKTsKLSAgICAgICAg ICAgIHRoaXMuJGVsLmFkZENsYXNzKCd1aS1lcnJvcicpOworICAgICAgICAgICAgaWYgKCF0aGlz LmZpZWxkLnNraXApIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRlcnJvcl90ZXh0Lmh0bWwodGV4 dCk7CisgICAgICAgICAgICAgICAgdGhpcy4kZXJyb3IuZmFkZUluKCdmYXN0Jyk7CisgICAgICAg ICAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ3VpLWVycm9yJyk7CisgICAgICAgICAgICB9CiAg ICAgICAgIH0sCiAgICAgICAgPTIwCiAgICAgICAgIC8qKiBSZXNldCB0aGlzIHZpZXcKQEAgLTcw LDYgKzcyLDcgQEAKICAgICAgICAgICAgICAgICB0aGlzLiRmaWVsZC5mYWRlSW4oJ2Zhc3QnKTsK ICAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZV9vcHRpb25hbC5odG1sKCdEaXNhYmxlJyk7CiAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAg ICAgICAgICAgICB0aGlzLiRmaWVsZC5oaWRlKCk7CiAgICAgICAgICAgICAgICAgdGhpcy4kdGl0 bGVfb3B0aW9uYWwuaHRtbCgnRW5hYmxlJyk7CiAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC52 YWx1ZSAmJiB0aGlzLmZpZWxkLnZhbHVlKHRoaXMuZGVmYXVsdHZhbHVlKTsKCmRpZmYgLXIgOGE3 MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1 NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29s cy90b29scy1zZWN0aW9uLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMv dG9vbHMtc2VjdGlvbi5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rv b2xzLXNlY3Rpb24uanMKQEAgLTEwLDUxICsxMCw1MSBAQAogICAgICAgICBpbml0aWFsaXplOiBm dW5jdGlvbihhcHAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgIC8vIGxpbmsgYXBwCiAgICAgICAg ICAgICB0aGlzLmFwcCA9M0QgYXBwOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8g bGluayBpbnB1dHMKICAgICAgICAgICAgIHRoaXMuaW5wdXRzID0zRCBvcHRpb25zLmlucHV0czsK LSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGFkZCB0YWJsZSBjbGFzcyBmb3IgdHIg dGFnCiAgICAgICAgICAgICAvLyB0aGlzIGFzc2lzdCBpbiB0cmFuc2Zvcm1pbmcgdGhlIGZvcm0g aW50byBhIGpzb24gc3RydWN0dXJlCiAgICAgICAgICAgICBvcHRpb25zLmNsc190ciA9M0QgJ3Nl Y3Rpb24tcm93JzsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGNyZWF0ZSB0YWJs ZQogICAgICAgICAgICAgdGhpcy50YWJsZSA9M0QgbmV3IFRhYmxlLlZpZXcob3B0aW9ucyk7Ci0g ICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBjb25maWd1cmUgcG9ydGxldCBhbmQgZm9y bSB0YWJsZQogICAgICAgICAgICAgdGhpcy5zZXRFbGVtZW50KHRoaXMudGFibGUuJGVsKTsKLSAg ICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIHJlbmRlciB0b29sIHNlY3Rpb24KICAgICAg ICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgIH0sCi0gICAgICAgPTIwCisKICAgICAgICAg LyoqIFJlbmRlciBzZWN0aW9uIHZpZXcKICAgICAgICAgKi8KICAgICAgICAgcmVuZGVyOiBmdW5j dGlvbigpIHsKICAgICAgICAgICAgIC8vIHJlc2V0IHRhYmxlCiAgICAgICAgICAgICB0aGlzLnRh YmxlLmRlbEFsbCgpOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gbG9hZCBzZXR0 aW5ncyBlbGVtZW50cyBpbnRvIHRhYmxlCiAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMu aW5wdXRzKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5pbnB1dHNbaV0pOwogICAg ICAgICAgICAgfQogICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAgICAgIC8qKiBBZGQgYSBu ZXcgaW5wdXQgZWxlbWVudAogICAgICAgICAqLwogICAgICAgICBhZGQ6IGZ1bmN0aW9uKGlucHV0 KSB7CiAgICAgICAgICAgICAvLyBsaW5rIHRoaXMKICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0 aGlzOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY2xvbmUgZGVmaW5pdGlvbgog ICAgICAgICAgICAgdmFyIGlucHV0X2RlZiA9M0QgalF1ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgaW5w dXQpOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3JlYXRlIHVuaXF1ZSBpZAog ICAgICAgICAgICAgaW5wdXRfZGVmLmlkID0zRCBpbnB1dC5pZCA9M0QgVXRpbHMudXVpZCgpOwot ICAgPTIwCisKICAgICAgICAgICAgIC8vIGFkZCB0byBzZXF1ZW50aWFsIGxpc3Qgb2YgaW5wdXRz CiAgICAgICAgICAgICB0aGlzLmFwcC5pbnB1dF9saXN0W2lucHV0X2RlZi5pZF0gPTNEIGlucHV0 X2RlZjsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGlkZW50aWZ5IGZpZWxkIHR5 cGUKICAgICAgICAgICAgIHZhciB0eXBlID0zRCBpbnB1dF9kZWYudHlwZTsKICAgICAgICAgICAg IHN3aXRjaCh0eXBlKSB7CkBAIC03NSwzNSArNzUsMzUgQEAKICAgICAgICAgICAgICAgICAgICAg dGhpcy5fYWRkUm93KGlucHV0X2RlZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCi0gICAg ICAgPTIwCisKICAgICAgICAgLyoqIEFkZCBhIGNvbmRpdGlvbmFsIGJsb2NrCiAgICAgICAgICov CiAgICAgICAgIF9hZGRDb25kaXRpb25hbDogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CiAgICAgICAg ICAgICAvLyBsaW5rIHRoaXMKICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwotICAgICAg ICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY29weSBpZGVudGlmaWVyCiAgICAgICAgICAgICBp bnB1dF9kZWYudGVzdF9wYXJhbS5pZCA9M0QgaW5wdXRfZGVmLmlkOwotICAgICAgICAgICA9MjAK KwogICAgICAgICAgICAgLy8gYnVpbGQgdGVzdCBwYXJhbWV0ZXIKICAgICAgICAgICAgIHZhciBm aWVsZCA9M0QgdGhpcy5fYWRkUm93KGlucHV0X2RlZi50ZXN0X3BhcmFtKTsKLSAgICAgICAgICAg PTIwCisKICAgICAgICAgICAgIC8vIHNldCBvbmNoYW5nZSBldmVudCBmb3IgdGVzdCBwYXJhbWV0 ZXIKICAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMub25jaGFuZ2UgPTNEIGZ1bmN0aW9uKHZhbHVl KSB7CiAgICAgICAgICAgICAgICAgLy8gaWRlbnRpZnkgdGhlIHNlbGVjdGVkIGNhc2UKICAgICAg ICAgICAgICAgICB2YXIgc2VsZWN0ZWRDYXNlID0zRCBzZWxmLmFwcC50cmVlLm1hdGNoQ2FzZShp bnB1dF9kZWYsIHZhPQpsdWUpOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAg ICAvLyBjaGVjayB2YWx1ZSBpbiBvcmRlciB0byBoaWRlL3Nob3cgb3B0aW9ucwogICAgICAgICAg ICAgICAgIGZvciAodmFyIGkgaW4gaW5wdXRfZGVmLmNhc2VzKSB7CiAgICAgICAgICAgICAgICAg ICAgIC8vIGdldCBjYXNlCiAgICAgICAgICAgICAgICAgICAgIHZhciBjYXNlX2RlZiA9M0QgaW5w dXRfZGVmLmNhc2VzW2ldOwotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAg ICAgICAgIC8vIGlkZW50aWZ5IHN1YnNlY3Rpb24gbmFtZQogICAgICAgICAgICAgICAgICAgICB2 YXIgc2VjdGlvbl9pZCA9M0QgaW5wdXRfZGVmLmlkICsgJy1zZWN0aW9uLScgKyBpOwotICAgICAg ICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGlkZW50aWZ5IHJvdwog ICAgICAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbl9yb3cgPTNEIHNlbGYudGFibGUuZ2V0KHNl Y3Rpb25faWQpOwotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgICAg IC8vIGNoZWNrIGlmIG5vbi1oaWRkZW4gZWxlbWVudHMgZXhpc3QKICAgICAgICAgICAgICAgICAg ICAgdmFyIG5vbmhpZGRlbiA9M0QgZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy IGogaW4gY2FzZV9kZWYuaW5wdXRzKSB7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAg ICAgICAgIC8vIHNob3cvaGlkZSBzdWIgZm9ybQogICAgICAgICAgICAgICAgICAgICBpZiAoaSA9 M0Q9M0Qgc2VsZWN0ZWRDYXNlICYmIG5vbmhpZGRlbikgewogICAgICAgICAgICAgICAgICAgICAg ICAgc2VjdGlvbl9yb3cuZmFkZUluKCdmYXN0Jyk7CkBAIC0xMjAsNzEgKzEyMCw3MSBAQAogICAg ICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbl9yb3cuaGlkZSgpOwogICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAg ICAgICAgICAvLyByZWZyZXNoIGZvcm0gaW5wdXRzCiAgICAgICAgICAgICAgICAgc2VsZi5hcHAu dHJpZ2dlcigncmVmcmVzaCcpOwogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgPTIwCisKICAg ICAgICAgICAgIC8vIGFkZCBjb25kaXRpb25hbCBzdWIgc2VjdGlvbnMKICAgICAgICAgICAgIGZv ciAodmFyIGkgaW4gaW5wdXRfZGVmLmNhc2VzKSB7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRl IGlkIHRhZwogICAgICAgICAgICAgICAgIHZhciBzdWJfc2VjdGlvbl9pZCA9M0QgaW5wdXRfZGVm LmlkICsgJy1zZWN0aW9uLScgKyBpOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAg ICAgICAvLyBjcmVhdGUgc3ViIHNlY3Rpb24KICAgICAgICAgICAgICAgICB2YXIgc3ViX3NlY3Rp b24gPTNEIG5ldyBWaWV3KHRoaXMuYXBwLCB7CiAgICAgICAgICAgICAgICAgICAgIGlucHV0cyAg OiBpbnB1dF9kZWYuY2FzZXNbaV0uaW5wdXRzLAogICAgICAgICAgICAgICAgICAgICBjbHMgICAg IDogJ3VpLXRhYmxlLXBsYWluJwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg PTIwCisKICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5cyBhcyBncm91cGVkIHN1YnNlY3Rpb24K ICAgICAgICAgICAgICAgICBzdWJfc2VjdGlvbi4kZWwuYWRkQ2xhc3MoJ3VpLXRhYmxlLWZvcm0t c2VjdGlvbicpOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBjcmVh dGUgdGFibGUgcm93CiAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5hZGQoc3ViX3NlY3Rpb24u JGVsKTsKLSAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gYXBwZW5kIHRv IHRhYmxlCiAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5hcHBlbmQoc3ViX3NlY3Rpb25faWQp OwogICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gdHJpZ2dl ciByZWZyZXNoIG9uIGNvbmRpdGlvbmFsIGlucHV0IGZpZWxkIGFmdGVyIGFsbCBpbnB1dCA9CmVs ZW1lbnRzIGhhdmUgYmVlbiBjcmVhdGVkCiAgICAgICAgICAgICBmaWVsZC50cmlnZ2VyKCdjaGFu Z2UnKTsKICAgICAgICAgfSwKLSAgICAgICA9MjAKKwogICAgICAgICAvKiogQWRkIGEgcmVwZWF0 IGJsb2NrCiAgICAgICAgICovCiAgICAgICAgIF9hZGRSZXBlYXQ6IGZ1bmN0aW9uKGlucHV0X2Rl ZikgewogICAgICAgICAgICAgLy8gbGluayB0aGlzCiAgICAgICAgICAgICB2YXIgc2VsZiA9M0Qg dGhpczsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGJsb2NrIGluZGV4CiAgICAg ICAgICAgICB2YXIgYmxvY2tfaW5kZXggPTNEIDA7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAg ICAgICAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIG5ldyByZXBlYXQgYmxvY2tzCiAgICAg ICAgICAgICBmdW5jdGlvbiBjcmVhdGUgKGlucHV0cywgZGVsZXRlYWJsZSkgewogICAgICAgICAg ICAgICAgIC8vIGNyZWF0ZSBpZCB0YWcKICAgICAgICAgICAgICAgICB2YXIgc3ViX3NlY3Rpb25f aWQgPTNEIGlucHV0X2RlZi5pZCArICctc2VjdGlvbi0nICsgKGJsb2NrPQpfaW5kZXgrKyk7Ci0g ICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlL2Rpc2FibGUgcmVwZWF0 IGRlbGV0ZSBidXR0b24KICAgICAgICAgICAgICAgICB2YXIgb25kZWwgPTNEIG51bGw7CiAgICAg ICAgICAgICAgICAgaWYgKGRlbGV0ZWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgb25kZWwg PTNEIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHJlcGVh dCBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0LmRlbChzdWJfc2VjdGlvbl9p ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgICAgICAg ICAvLyByZXRpdGxlIHJlcGVhdCBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0 LnJldGl0bGUoaW5wdXRfZGVmLnRpdGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgPTIwCisK ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgcmVmcmVzaAogICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZi5hcHAudHJpZ2dlcigncmVmcmVzaCcpOwogICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAg ICAgICAgICAgICAgLy8gY3JlYXRlIHN1YiBzZWN0aW9uCiAgICAgICAgICAgICAgICAgdmFyIHN1 Yl9zZWN0aW9uID0zRCBuZXcgVmlldyhzZWxmLmFwcCwgewogICAgICAgICAgICAgICAgICAgICBp bnB1dHMgIDogaW5wdXRzLAogICAgICAgICAgICAgICAgICAgICBjbHMgICAgIDogJ3VpLXRhYmxl LXBsYWluJwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAg ICAgICAgICAgICAvLyBhZGQgdGFiCiAgICAgICAgICAgICAgICAgcmVwZWF0LmFkZCh7CiAgICAg ICAgICAgICAgICAgICAgIGlkICAgICAgOiBzdWJfc2VjdGlvbl9pZCwKQEAgLTE5MiwxMSArMTky LDExIEBACiAgICAgICAgICAgICAgICAgICAgICRlbCAgICAgOiBzdWJfc2VjdGlvbi4kZWwsCiAg ICAgICAgICAgICAgICAgICAgIG9uZGVsICAgOiBvbmRlbAogICAgICAgICAgICAgICAgIH0pOwot ICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyByZXRpdGxlIHJlcGVhdCBi bG9jawogICAgICAgICAgICAgICAgIHJlcGVhdC5yZXRpdGxlKGlucHV0X2RlZi50aXRsZSk7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLwogICAgICAgICAg ICAgLy8gY3JlYXRlIHJlcGVhdCBibG9jayBlbGVtZW50CiAgICAgICAgICAgICAvLwpAQCAtMjEx LDcgKzIxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXBwLnRyaWdnZXIoJ3JlZnJl c2gnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgPTIw CisKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBhZGQgcGFyc2VkL21pbmltdW0gbnVt YmVyIG9mIHJlcGVhdCBibG9ja3MKICAgICAgICAgICAgIC8vCkBAIC0yMjUsMjggKzIyNSwyOCBA QAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlucHV0cyA9 M0QgaW5wdXRfZGVmLmlucHV0czsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICA9 MjAKKwogICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSByZXBlYXQgYmxvY2sKICAgICAgICAgICAg ICAgICBjcmVhdGUoaW5wdXRzLCBpID49M0Qgbl9taW4pOwogICAgICAgICAgICAgfQotICAgICAg ICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3JlYXRlIGlucHV0IGZpZWxkIHdyYXBwZXIKICAg ICAgICAgICAgIHZhciBpbnB1dF9lbGVtZW50ID0zRCBuZXcgSW5wdXRFbGVtZW50KHRoaXMuYXBw LCB7CiAgICAgICAgICAgICAgICAgbGFiZWwgICA6IGlucHV0X2RlZi50aXRsZSwKICAgICAgICAg ICAgICAgICBoZWxwICAgIDogaW5wdXRfZGVmLmhlbHAsCiAgICAgICAgICAgICAgICAgZmllbGQg ICA6IHJlcGVhdAogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAg ICAvLyBkaXNwbGF5cyBhcyBncm91cGVkIHN1YnNlY3Rpb24KICAgICAgICAgICAgIGlucHV0X2Vs ZW1lbnQuJGVsLmFkZENsYXNzKCd1aS10YWJsZS1mb3JtLXNlY3Rpb24nKTsKLSAgICAgICAgICAg ICAgID0yMAorCiAgICAgICAgICAgICAvLyBjcmVhdGUgdGFibGUgcm93CiAgICAgICAgICAgICB0 aGlzLnRhYmxlLmFkZChpbnB1dF9lbGVtZW50LiRlbCk7Ci0gICAgICAgICAgID0yMAorCiAgICAg ICAgICAgICAvLyBhcHBlbmQgcm93IHRvIHRhYmxlCiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFw cGVuZChpbnB1dF9kZWYuaWQpOwogICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAgICAgIC8q KiBBZGQgYSBjdXN0b21pemVkIHNlY3Rpb24KICAgICAgICAgKi8KICAgICAgICAgX2FkZFNlY3Rp b246IGZ1bmN0aW9uKGlucHV0X2RlZikgewpAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICAgICAg ICAgICAgICBpbnB1dHMgIDogaW5wdXRfZGVmLmlucHV0cywKICAgICAgICAgICAgICAgICBjbHMg ICAgIDogJ3VpLXRhYmxlLXBsYWluJwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgID0yMAor CiAgICAgICAgICAgICAvLyBkZWxldGUgYnV0dG9uCiAgICAgICAgICAgICB2YXIgYnV0dG9uX3Zp c2libGUgPTNEIG5ldyBVaS5CdXR0b25JY29uKHsKICAgICAgICAgICAgICAgICBpY29uICAgIDog J2ZhLWV5ZS1zbGFzaCcsCiAgICAgICAgICAgICAgICAgdG9vbHRpcCA6ICdTaG93L2hpZGUgc2Vj dGlvbicsCiAgICAgICAgICAgICAgICAgY2xzICAgICA6ICd1aS1idXR0b24taWNvbi1wbGFpbicK ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3JlYXRl IHBvcnRsZXQgZm9yIHN1YiBzZWN0aW9uCiAgICAgICAgICAgICB2YXIgcG9ydGxldCA9M0QgbmV3 IFBvcnRsZXQuVmlldyh7CiAgICAgICAgICAgICAgICAgdGl0bGUgICAgICAgOiBpbnB1dF9kZWYu bGFiZWwsCkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICB9KTsKICAgICAgICAgICAgIHBvcnRsZXQuYXBwZW5kKHN1Yl9zZWN0aW9uLiRlbCk7Ci0gICAg ICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBhZGQgZXZlbnQgaGFuZGxlciB2aXNpYmlsaXR5 IGJ1dHRvbgogICAgICAgICAgICAgdmFyIHZpc2libGUgPTNEIGZhbHNlOwogICAgICAgICAgICAg cG9ydGxldC4kY29udGVudC5oaWRlKCk7CkBAIC0yOTEsMTIgKzI5MSwxMiBAQAogICAgICAgICAg ICAgICAgICAgICBidXR0b25fdmlzaWJsZS5zZXRJY29uKCdmYS1leWUnKTsKICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8v IHNob3cgc3ViIHNlY3Rpb24gaWYgcmVxdWVzdGVkCiAgICAgICAgICAgICBpZiAoaW5wdXRfZGVm LmV4cGFuZCkgewogICAgICAgICAgICAgICAgIHBvcnRsZXQuJGhlYWRlci50cmlnZ2VyKCdjbGlj aycpOwogICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3Jl YXRlIHRhYmxlIHJvdwogICAgICAgICAgICAgdGhpcy50YWJsZS5hZGQocG9ydGxldC4kZWwpOwo9 MjAKQEAgLTMxMiwxMCArMzEyLDEwIEBACj0yMAogICAgICAgICAgICAgLy8gY3JlYXRlIGlucHV0 IGZpZWxkCiAgICAgICAgICAgICB2YXIgZmllbGQgPTNEIHRoaXMuX2NyZWF0ZUZpZWxkKGlucHV0 X2RlZik7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBhZGQgdG8gZmllbGQgbGlz dAogICAgICAgICAgICAgdGhpcy5hcHAuZmllbGRfbGlzdFtpZF0gPTNEIGZpZWxkOwotICAgICAg ICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3JlYXRlIGlucHV0IGZpZWxkIHdyYXBwZXIKICAg ICAgICAgICAgIHZhciBpbnB1dF9lbGVtZW50ID0zRCBuZXcgSW5wdXRFbGVtZW50KHRoaXMuYXBw LCB7CiAgICAgICAgICAgICAgICAgbGFiZWwgICAgICAgICAgIDogaW5wdXRfZGVmLmxhYmVsLApA QCAtMzI0LDY5ICszMjQsNjkgQEAKICAgICAgICAgICAgICAgICBoZWxwICAgICAgICAgICAgOiBp bnB1dF9kZWYuaGVscCwKICAgICAgICAgICAgICAgICBmaWVsZCAgICAgICAgICAgOiBmaWVsZAog ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBhZGQgdG8g ZWxlbWVudCBsaXN0CiAgICAgICAgICAgICB0aGlzLmFwcC5lbGVtZW50X2xpc3RbaWRdID0zRCBp bnB1dF9lbGVtZW50OwotICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY3JlYXRl IHRhYmxlIHJvdwogICAgICAgICAgICAgdGhpcy50YWJsZS5hZGQoaW5wdXRfZWxlbWVudC4kZWwp OwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gYXBwZW5kIHRvIHRhYmxlCiAgICAg ICAgICAgICB0aGlzLnRhYmxlLmFwcGVuZChpZCk7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAg ICAgICAvLyBoaWRlIHJvdyBpZiBuZWNjZXNzYXJ5CiAgICAgICAgICAgICBpZiAoaW5wdXRfZGVm LmhpZGRlbikgewogICAgICAgICAgICAgICAgIHRoaXMudGFibGUuZ2V0KGlkKS5oaWRlKCk7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyByZXR1cm4gY3Jl YXRlZCBmaWVsZAogICAgICAgICAgICAgcmV0dXJuIGZpZWxkOwogICAgICAgICB9LAotICAgICAg ID0yMAorCiAgICAgICAgIC8qKiBSZXR1cm5zIGFuIGlucHV0IGZpZWxkIGZvciBhIGdpdmVuIGZp ZWxkIHR5cGUKICAgICAgICAgKi8KICAgICAgICAgX2NyZWF0ZUZpZWxkOiBmdW5jdGlvbihpbnB1 dF9kZWYpIHsKICAgICAgICAgICAgIC8vIGZpZWxkIHdyYXBwZXIKICAgICAgICAgICAgIHZhciBm aWVsZCA9M0QgbnVsbDsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGlkZW50aWZ5 IGZpZWxkIHR5cGUKICAgICAgICAgICAgIHN3aXRjaChpbnB1dF9kZWYudHlwZSkgewogICAgICAg ICAgICAgICAgIC8vIHRleHQgaW5wdXQgZmllbGQKICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0 JyA6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZFRleHQoaW5wdXRf ZGVmKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgPTIw CisKICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgZmllbGQKICAgICAgICAgICAgICAgICBjYXNl ICdzZWxlY3QnIDoKICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkU2Vs ZWN0KGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gZGF0YSBzZWxlY3RvcgogICAgICAgICAg ICAgICAgIGNhc2UgJ2RhdGEnOgogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5f ZmllbGREYXRhKGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0aW9uIHNlbGVjdG9yCiAg ICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9jb2xsZWN0aW9uJzoKICAgICAgICAgICAgICAgICAg ICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkRGF0YShpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8v IGRhdGEgY29sdW1uCiAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YV9jb2x1bW4nOgogICAgICAg ICAgICAgICAgICAgICBpbnB1dF9kZWYuZXJyb3JfdGV4dCA9M0QgJ01pc3NpbmcgY29sdW1ucyBp biByZWZlcmVuY2U9CmQgZGF0YXNldC4nOwogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0Qg dGhpcy5fZmllbGRTZWxlY3QoaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBoaWRkZW4gZmll bGQKICAgICAgICAgICAgICAgICBjYXNlICdoaWRkZW4nOgogICAgICAgICAgICAgICAgICAgICBm aWVsZCA9M0QgdGhpcy5fZmllbGRIaWRkZW4oaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGhpZGRl biBkYXRhIGZpZWxkCiAgICAgICAgICAgICAgICAgY2FzZSAnaGlkZGVuX2RhdGEnOgogICAgICAg ICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmllbGRIaWRkZW4oaW5wdXRfZGVmKTsKICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAg ICAgICAgIC8vIGludGVnZXIgZmllbGQKICAgICAgICAgICAgICAgICBjYXNlICdpbnRlZ2VyJzoK ICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkU2xpZGVyKGlucHV0X2Rl Zik7CkBAIC0zOTYsMzMgKzM5NiwzMyBAQAogICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzoK ICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkU2xpZGVyKGlucHV0X2Rl Zik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGJvb2xlYW4gZmllbGQKICAgICAg ICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNE IHRoaXMuX2ZpZWxkQm9vbGVhbihpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGdlbm9tZSBm aWVsZAogICAgICAgICAgICAgICAgIGNhc2UgJ2dlbm9tZWJ1aWxkJzoKICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfZGVmLnNlYXJjaGFibGUgPTNEIHRydWU7CiAgICAgICAgICAgICAgICAgICAg IGZpZWxkID0zRCB0aGlzLl9maWVsZFNlbGVjdChpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gZHJp bGwgZG93biBmaWVsZAogICAgICAgICAgICAgICAgIGNhc2UgJ2RyaWxsX2Rvd24nOgogICAgICAg ICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmllbGREcmlsbGRvd24oaW5wdXRfZGVmKTsK ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAg ICAgICAgICAgIC8vIGJhc2UgdXJsIGZpZWxkCiAgICAgICAgICAgICAgICAgY2FzZSAnYmFzZXVy bCc6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZEhpZGRlbihpbnB1 dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBmaWVsZCBub3QgZm91bmQKICAgICAgICAgICAg ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAvLyBmbGFnCiAgICAgICAgICAgICAg ICAgICAgIHRoaXMuYXBwLmluY29tcGF0aWJsZSA9M0QgdHJ1ZTsKLSAgICAgICAgICAgICAgICAg ICA9MjAKKwogICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIG9yIHdpdGhvdXQgb3B0aW9ucwog ICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRfZGVmLm9wdGlvbnMpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGFzc2lnbiBzZWxlY3QgZmllbGQKQEAgLTQzMSwyNiArNDMxLDI2IEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gdGV4dCBmaWVsZAogICAgICAgICAg ICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkVGV4dChpbnB1dF9kZWYpOwogICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAg ICAgICAgICAgLy8gbG9nCiAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ3Rvb2xz LWZvcm06Ol9hZGRSb3coKSA6IEF1dG8gbWF0Y2hlZCBmaT0KZWxkIHR5cGUgKCcgKyBpbnB1dF9k ZWYudHlwZSArICcpLicpOwogICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKKwogICAgICAg ICAgICAgLy8gc2V0IGZpZWxkIHZhbHVlCiAgICAgICAgICAgICBpZiAoaW5wdXRfZGVmLnZhbHVl ICE9M0Q9M0QgdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUoaW5wdXRf ZGVmLnZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAg IC8vIHJldHVybiBmaWVsZCBlbGVtZW50CiAgICAgICAgICAgICByZXR1cm4gZmllbGQ7CiAgICAg ICAgIH0sCi0gICAgICAgPTIwCisKICAgICAgICAgLyoqIERhdGEgaW5wdXQgZmllbGQKICAgICAg ICAgKi8KICAgICAgICAgX2ZpZWxkRGF0YSA6IGZ1bmN0aW9uKGlucHV0X2RlZikgewotICAgICAg ICAgICAgaWYgKHRoaXMuYXBwLndvcmtmbG93KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4dGVu c2lvbnMgPTNEIFV0aWxzLnRleHRpZnkoaW5wdXRfZGVmLmV4dGVuc2lvbnMudG9TdD0KcmluZygp KTsKLSAgICAgICAgICAgICAgICBpbnB1dF9kZWYuaW5mbyA9M0QgJ0RhdGEgaW5wdXQgXCcnICsg aW5wdXRfZGVmLm5hbWUgKyAnXCcgPQooJyArIGV4dGVuc2lvbnMgKyAnKSc7CisgICAgICAgICAg ICBpZiAoIXRoaXMuYXBwLm9wdGlvbnMuaXNfZHluYW1pYykgeworICAgICAgICAgICAgICAgIGlu cHV0X2RlZi5pbmZvID0zRCAnRGF0YSBpbnB1dCBcJycgKyBpbnB1dF9kZWYubmFtZSArICdcJyA9 CignICsgVXRpbHMudGV4dGlmeShpbnB1dF9kZWYuZXh0ZW5zaW9ucy50b1N0cmluZygpKSArICcp JzsKKyAgICAgICAgICAgICAgICBpbnB1dF9kZWYudmFsdWUgPTNEIG51bGw7CiAgICAgICAgICAg ICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkSGlkZGVuKGlucHV0X2RlZik7CiAgICAgICAgICAgICB9 CiAgICAgICAgICAgICB2YXIgc2VsZiA9M0QgdGhpczsKQEAgLTQ2NSwxOCArNDY1LDE1IEBACiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgPTIw CisKICAgICAgICAgLyoqIFNlbGVjdC9DaGVja2JveC9SYWRpbyBvcHRpb25zIGZpZWxkCiAgICAg ICAgICovCiAgICAgICAgIF9maWVsZFNlbGVjdCA6IGZ1bmN0aW9uIChpbnB1dF9kZWYpIHsKLSAg ICAgICAgICAgIC8vIHNob3cgdGV4dCBmaWVsZCBpbiB3b3JrZmxvdwotICAgICAgICAgICAgaWYg KHRoaXMuYXBwLndvcmtmbG93ICYmIGlucHV0X2RlZi5pc19keW5hbWljKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKCFVdGlscy52YWxpZGF0ZShpbnB1dF9kZWYudmFsdWUpKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlucHV0X2RlZi52YWx1ZSA9M0QgJyc7Ci0gICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgLy8gc2hvdyB0ZXh0IGZpZWxkIGluIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBkaXNh YmxlZCBlLmcuIGluIHc9Cm9ya2Zsb3cgZWRpdG9yCisgICAgICAgICAgICBpZiAoIXRoaXMuYXBw Lm9wdGlvbnMuaXNfZHluYW1pYyAmJiBpbnB1dF9kZWYuaXNfZHluYW1pYykgewogICAgICAgICAg ICAgICAgIHJldHVybiB0aGlzLl9maWVsZFRleHQoaW5wdXRfZGVmKTsKICAgICAgICAgICAgIH0K LSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSBvcHRpb25zIGZpZWxk cwogICAgICAgICAgICAgdmFyIG9wdGlvbnMgPTNEIFtdOwogICAgICAgICAgICAgZm9yICh2YXIg aSBpbiBpbnB1dF9kZWYub3B0aW9ucykgewpAQCAtNDg2LDcgKzQ4Myw3IEBACiAgICAgICAgICAg ICAgICAgICAgIHZhbHVlOiBvcHRpb25bMV0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGlkZW50aWZ5IGRpc3BsYXkg dHlwZQogICAgICAgICAgICAgdmFyIFNlbGVjdENsYXNzID0zRCBVaS5TZWxlY3Q7CiAgICAgICAg ICAgICBzd2l0Y2ggKGlucHV0X2RlZi5kaXNwbGF5KSB7CkBAIC00OTcsNyArNDk0LDcgQEAKICAg ICAgICAgICAgICAgICAgICAgU2VsZWN0Q2xhc3MgPTNEIFVpLlJhZGlvOwogICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgPTIwCisKICAgICAgICAg ICAgIC8vIHNlbGVjdCBmaWVsZAogICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAg ICAgICAgICByZXR1cm4gbmV3IFNlbGVjdENsYXNzLlZpZXcoewpAQCAtNTExLDEwICs1MDgsMTYg QEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKLSAgICAg ICA9MjAKKwogICAgICAgICAvKiogRHJpbGwgZG93biBvcHRpb25zIGZpZWxkCiAgICAgICAgICov CiAgICAgICAgIF9maWVsZERyaWxsZG93biA6IGZ1bmN0aW9uIChpbnB1dF9kZWYpIHsKKyAgICAg ICAgICAgIC8vIHNob3cgdGV4dCBmaWVsZCBpbiBpZiBkeW5hbWljIGZpZWxkcyBhcmUgZGlzYWJs ZWQgZS5nLiBpbiB3PQpvcmtmbG93IGVkaXRvcgorICAgICAgICAgICAgaWYgKCF0aGlzLmFwcC5v cHRpb25zLmlzX2R5bmFtaWMgJiYgaW5wdXRfZGVmLmlzX2R5bmFtaWMpIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gdGhpcy5fZmllbGRUZXh0KGlucHV0X2RlZik7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gY3JlYXRlIGRyaWxsIGRvd24gZmllbGQKICAg ICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBVaS5E cmlsbGRvd24uVmlldyh7CiAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQtJyAr IGlucHV0X2RlZi5pZCwKQEAgLTUyOSw2ICs1MzIsMjcgQEAKICAgICAgICAgLyoqIFRleHQgaW5w dXQgZmllbGQKICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkVGV4dCA6IGZ1bmN0aW9uKGlucHV0 X2RlZikgeworICAgICAgICAgICAgLy8gZmllbGQgcmVwbGFjZXMgZS5nLiBhIHNlbGVjdCBmaWVs ZAorICAgICAgICAgICAgaWYgKGlucHV0X2RlZi5vcHRpb25zKSB7CisgICAgICAgICAgICAgICAg Ly8gc2hvdyB0ZXh0IGFyZWEgaWYgc2VsZWN0aW5nIG11bHRpcGxlIGVudHJpZXMgaXMgYWxsb3dl ZAorICAgICAgICAgICAgICAgIGlucHV0X2RlZi5hcmVhID0zRCBpbnB1dF9kZWYubXVsdGlwbGU7 CisKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSB2YWx1ZQorICAgICAgICAgICAgICAgIGlm ICghVXRpbHMudmFsaWRhdGUoaW5wdXRfZGVmLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAg ICBpbnB1dF9kZWYudmFsdWUgPTNEICcnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChpbnB1dF9kZWYudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGVmLnZhbHVlID0zRCB2YWx1ZS50b1N0cmlu ZygpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfZGVmLnZhbHVlID0zRCBTdHJpbmcoaW5wdXRfZGVmLnZhbHVlKS5yZXBsYWM9CmUo L1tcW1xdJyJcc10vZywgJycpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0X2Rl Zi5tdWx0aXBsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RlZi52YWx1 ZSA9M0QgaW5wdXRfZGVmLnZhbHVlLnJlcGxhY2UoLyw9Ci9nLCAnXG4nKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY3JlYXRlIGlucHV0IGVsZW1lbnQKICAg ICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBVaS5J bnB1dCh7CiAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgOiAnZmllbGQtJyArIGlucHV0X2Rl Zi5pZCwKQEAgLTUzOCw3ICs1NjIsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg IH0pOwogICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAgICAgIC8qKiBTbGlkZXIgZmllbGQK ICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkU2xpZGVyOiBmdW5jdGlvbihpbnB1dF9kZWYpIHsK QEAgLTU1Myw3ICs1NzcsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwog ICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAgICAgIC8qKiBIaWRkZW4gZmllbGQKICAgICAg ICAgKi8KICAgICAgICAgX2ZpZWxkSGlkZGVuIDogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CkBAIC01 NjIsNyArNTg2LDcgQEAKICAgICAgICAgICAgICAgICBpbmZvICAgICAgICA6IGlucHV0X2RlZi5p bmZvCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKLSAgICAgICA9MjAKKwogICAgICAgICAv KiogQm9vbGVhbiBmaWVsZAogICAgICAgICAqLwogICAgICAgICBfZmllbGRCb29sZWFuIDogZnVu Y3Rpb24oaW5wdXRfZGVmKSB7CgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFl MzEzZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZm IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtdHJlZS5qcwotLS0gYS9jbGll bnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKKysrIGIvY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy10cmVlLmpzCkBAIC0xMjMsMTQgKzEyMywxNCBA QAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRs ZSBzaW1wbGUgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVs ZC5za2lwIHx8IHNlbGYuYXBwLndvcmtmbG93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghZmllbGQuc2tpcCB8fCBzZWxmLmFwcC5vcHRpb25zLnNlbmRfYT0KbGwpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0ZSAm JiAhZmllbGQudmFsaWRhdGUoPQopKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWUgPTNEIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaWdu b3JlID0zRD0zRD0zRCB1bmRlZmluZWQgfD0KfCAodmFsdWUgIT0zRD0zRCBudWxsICYmIGlucHV0 Lmlnbm9yZSAhPTNEIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vIGFkZCB2YWx1ZSB0byBzdWJtaXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkIChqb2JfaW5wdXRfaWQsIGlucHV0LmlkLCB2YWx1ZT0KKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGFkZCBwYXlsb2FkIHRvIHN1Ym1pc3Npb24KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQucGF5bG9hZCkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwX2lkIGlu IGlucHV0LnBheWxvYWQ9CikgewoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUx ZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2 ZiBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcwotLS0gYS9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcworKysgYi9jbGll bnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcwpAQCAtMzM1LDggKzMz NSw4IEBACiAgICAgICAgIHRvb2xfaW5wdXRbJ2Ria2V5J10gPTNEIGdlbm9tZTsKICAgICAgICAg dG9vbF9pbnB1dFsnZmlsZV90eXBlJ10gPTNEIGV4dGVuc2lvbjsKICAgICAgICAgdG9vbF9pbnB1 dFsnZmlsZXNfMHx0eXBlJ10gPTNEICd1cGxvYWRfZGF0YXNldCc7Ci0gICAgICAgIHRvb2xfaW5w dXRbJ3NwYWNlX3RvX3RhYnMnXSA9M0Qgc3BhY2VfdG9fdGFiczsKLSAgICAgICAgdG9vbF9pbnB1 dFsndG9fcG9zaXhfbGluZXMnXSA9M0QgdG9fcG9zaXhfbGluZXM7CisgICAgICAgIHRvb2xfaW5w dXRbJ2ZpbGVzXzB8c3BhY2VfdG9fdGFiJ10gPTNEIHNwYWNlX3RvX3RhYnMgJiYgJ1llcycgfHwg bj0KdWxsOworICAgICAgICB0b29sX2lucHV0WydmaWxlc18wfHRvX3Bvc2l4X2xpbmVzJ10gPTNE IHRvX3Bvc2l4X2xpbmVzICYmICdZZXMnIHw9CnwgbnVsbDsKICAgICAgICA9MjAKICAgICAgICAg Ly8gc2V0dXAgZGF0YQogICAgICAgICBkYXRhID0zRCB7fTsKCmRpZmYgLXIgOGE3MDQ1NzkyYzdm ZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4YT0K YjhmOGRjMDJiYTM2OTk3NmYgY2xpZW50L2dhbGF4eS9zY3JpcHRzL3V0aWxzL3V0aWxzLmpzCi0t LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy91dGlscy91dGlscy5qcworKysgYi9jbGllbnQvZ2Fs YXh5L3NjcmlwdHMvdXRpbHMvdXRpbHMuanMKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgYWpheENvbmZpZy51cmwgKz0zRCAnJic7CiAgICAgICAgIH0K LSAgICAgICAgYWpheENvbmZpZy51cmwgICAgICA9M0QgYWpheENvbmZpZy51cmwgKyAkLnBhcmFt KGFqYXhDb25maWcuZGF0YSk7CisgICAgICAgIGFqYXhDb25maWcudXJsICAgICAgPTNEIGFqYXhD b25maWcudXJsICsgJC5wYXJhbShhamF4Q29uZmlnLmRhdGEsID0KdHJ1ZSk7CiAgICAgICAgIGFq YXhDb25maWcuZGF0YSAgICAgPTNEIG51bGw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYWpheENv bmZpZy5kYXRhVHlwZSA9M0QgJ2pzb24nOwoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3 NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJh MzY5OTc2ZiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2J1aWxk LWFwcC5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGlj L2J1aWxkLWFwcC5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMv c3RhdGljL2J1aWxkLWFwcC5qcwpAQCAtMyw0ICszLDQgQEAKIC8vICAgICAoYykgMjAwOS0yMDE0 IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvPQpy dGVycyAmIEVkaXRvcnMKIC8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgo9MjAKLWRlZmluZSgibXZjL3VpL3VpLW1vZGFsIixb XSxmdW5jdGlvbigpe3ZhciBlPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2VsTWFpPQpuOiJib2R5 IixvcHRpb25zRGVmYXVsdDp7dGl0bGU6InVpLW1vZGFsIixib2R5OiIiLGJhY2tkcm9wOiEwLGhl aWdodDpudWxsLHc9CmlkdGg6bnVsbCxjbG9zaW5nX2V2ZW50czohMSxjbG9zaW5nX2NhbGxiYWNr Om51bGx9LGJ1dHRvbkxpc3Q6e30saW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGUpe2UmJnRoaXMuX2Ny ZWF0ZShlKX0sc2hvdzpmdW5jdGlvbihlKXt0aGlzLmluaXRpYWxpemUoZSksdGhpcy5vPQpwdGlv bnMuaGVpZ2h0Pyh0aGlzLiRib2R5LmNzcygiaGVpZ2h0Iix0aGlzLm9wdGlvbnMuaGVpZ2h0KSx0 aGlzLiRib2R5LmNzcyg9CiJvdmVyZmxvdyIsImhpZGRlbiIpKTp0aGlzLiRib2R5LmNzcygibWF4 LWhlaWdodCIsJCh3aW5kb3cpLmhlaWdodCgpLzIpLHRoaT0Kcy5vcHRpb25zLndpZHRoJiZ0aGlz LiRkaWFsb2cuY3NzKCJ3aWR0aCIsdGhpcy5vcHRpb25zLndpZHRoKSx0aGlzLnZpc2libGU/PQp0 aGlzLiRlbC5zaG93KCk6dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITB9 LGhpZGU6ZnVuY3Rpb24oKXs9CnRoaXMudmlzaWJsZT0zRCExLHRoaXMuJGVsLmZhZGVPdXQoImZh c3QiKSx0aGlzLm9wdGlvbnMuY2xvc2luZ19jYWxsYmFjayYmdD0KaGlzLm9wdGlvbnMuY2xvc2lu Z19jYWxsYmFjaygpfSxlbmFibGVCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLmJ1dHRv PQpuTGlzdFtlXTt0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVkIiwhMSl9 LGRpc2FibGVCdXR0b246ZnVuY3Q9CmlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0 aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVkIj0KLCEwKX0sc2hvd0J1dHRv bjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRidXR0b25zLmZp bmQoPQoiIyIrdCkuc2hvdygpfSxoaWRlQnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5i dXR0b25MaXN0W2VdO3RoaXMuJGJ1dHQ9Cm9ucy5maW5kKCIjIit0KS5oaWRlKCl9LGdldEJ1dHRv bjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTtyZT0KdHVybiB0aGlzLiRi dXR0b25zLmZpbmQoIiMiK3QpfSxzY3JvbGxUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYm9k eS5zY3JvPQpsbFRvcCgpfSxfY3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpczt0aGlzLm9w dGlvbnM9M0RfLmRlZmF1bHRzKGUsdGhpcy49Cm9wdGlvbnNEZWZhdWx0KSx0aGlzLm9wdGlvbnMu Ym9keT0zRD0zRCJwcm9ncmVzcyImJih0aGlzLm9wdGlvbnMuYm9keT0zRCQoJz0KPGRpdiBjbGFz cz0zRCJwcm9ncmVzcyBwcm9ncmVzcy1zdHJpcGVkIGFjdGl2ZSI+PGRpdiBjbGFzcz0zRCJwcm9n cmVzcy1iYXIgPQpwcm9ncmVzcy1iYXItaW5mbyIgc3R5bGU9M0Qid2lkdGg6MTAwJSI+PC9kaXY+ PC9kaXY+JykpLHRoaXMuJGVsJiYodGhpcy4kZWw9Ci5yZW1vdmUoKSwkKGRvY3VtZW50KS5vZmYo ImtleXVwLnVpLW1vZGFsIikpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZT0KKHRoaXMu b3B0aW9ucy50aXRsZSkpLHRoaXMuJGRpYWxvZz0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1kaWFs b2ciKSx0aGlzLiRiPQpvZHk9M0R0aGlzLiRlbC5maW5kKCIubW9kYWwtYm9keSIpLHRoaXMuJGZv b3Rlcj0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1mb289CnRlciIpLHRoaXMuJGJ1dHRvbnM9M0R0 aGlzLiRlbC5maW5kKCIuYnV0dG9ucyIpLHRoaXMuJGJhY2tkcm9wPTNEdGhpcy4kZWwuZj0KaW5k KCIubW9kYWwtYmFja2Ryb3AiKSx0aGlzLiRib2R5Lmh0bWwodGhpcy5vcHRpb25zLmJvZHkpLHRo aXMub3B0aW9ucy5iYWNrPQpkcm9wfHx0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKTtp Zih0aGlzLm9wdGlvbnMuYnV0dG9ucyl7dGhpcy5idXR0b249Ckxpc3Q9M0R7fTt2YXIgbj0zRDA7 JC5lYWNoKHRoaXMub3B0aW9ucy5idXR0b25zLGZ1bmN0aW9uKGUscil7dmFyIGk9M0QiYnV0dD0K b24tIituKys7dC4kYnV0dG9ucy5hcHBlbmQoJCgnPGJ1dHRvbiBpZD0zRCInK2krJyI+PC9idXR0 b24+JykudGV4dChlKS5jbGljPQprKHIpKS5hcHBlbmQoIiAiKSx0LmJ1dHRvbkxpc3RbZV09M0Rp fSl9ZWxzZSB0aGlzLiRmb290ZXIuaGlkZSgpOyQodGhpcy5lbE09CmFpbikuYXBwZW5kKCQodGhp cy5lbCkpLHRoaXMub3B0aW9ucy5jbG9zaW5nX2V2ZW50cyYmKCQoZG9jdW1lbnQpLm9uKCJrZXl1 cD0KLnVpLW1vZGFsIixmdW5jdGlvbihlKXtlLmtleUNvZGU9M0Q9M0QyNyYmdC5oaWRlKCl9KSx0 aGlzLiRlbC5maW5kKCIubW9kYWwtPQpiYWNrZHJvcCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0 LmhpZGUoKX0pKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic9CjxkaXYgY2xhc3M9M0Qi dWktbW9kYWwgbW9kYWwiPjxkaXYgY2xhc3M9M0QibW9kYWwtYmFja2Ryb3AgZmFkZSBpbiIgc3R5 bGU9Cj0zRCJ6LWluZGV4OiAtMTsiPjwvZGl2PjxkaXYgY2xhc3M9M0QibW9kYWwtZGlhbG9nIj48 ZGl2IGNsYXNzPTNEIm1vZGFsLWNvbj0KdGVudCI+PGRpdiBjbGFzcz0zRCJtb2RhbC1oZWFkZXIi PjxidXR0b24gdHlwZT0zRCJidXR0b24iIGNsYXNzPTNEImNsb3NlIiBzPQp0eWxlPTNEImRpc3Bs YXk6IG5vbmU7Ij4mdGltZXM7PC9idXR0b24+PGg0IGNsYXNzPTNEInRpdGxlIj4nK2UrIjwvaDQ+ IisiPC89CmRpdj4iKyc8ZGl2IGNsYXNzPTNEIm1vZGFsLWJvZHkiIHN0eWxlPTNEInBvc2l0aW9u OiBzdGF0aWM7Ij48L2Rpdj4nKyc8ZGl2ID0KY2xhc3M9M0QibW9kYWwtZm9vdGVyIj4nKyc8ZGl2 IGNsYXNzPTNEImJ1dHRvbnMiIHN0eWxlPTNEImZsb2F0OiByaWdodDsiPjwvPQpkaXY+JysiPC9k aXY+IisiPC9kaXYiKyI8L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3OmV9fSksZnVuY3Rp b24oKXt2YXI9CiBlPTNEdGhpcyx0PTNEZS5fLG49M0RBcnJheS5wcm90b3R5cGUscj0zRE9iamVj dC5wcm90b3R5cGUsaT0zREZ1bmN0aW9uLnBybz0KdG90eXBlLHM9M0RuLnB1c2gsbz0zRG4uc2xp Y2UsdT0zRG4uY29uY2F0LGE9M0RyLnRvU3RyaW5nLGY9M0RyLmhhc093blByb3BlPQpydHksbD0z REFycmF5LmlzQXJyYXksYz0zRE9iamVjdC5rZXlzLGg9M0RpLmJpbmQscD0zRGZ1bmN0aW9uKGUp e2lmKGUgaW5zdGE9Cm5jZW9mIHApcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0 dXJuIG5ldyBwKGUpO3RoaXMuX3dyYXBwZWQ9M0RlfT0KO3R5cGVvZiBleHBvcnRzIT0zRCJ1bmRl ZmluZWQiPyh0eXBlb2YgbW9kdWxlIT0zRCJ1bmRlZmluZWQiJiZtb2R1bGUuZXhwb3J0PQpzJiYo ZXhwb3J0cz0zRG1vZHVsZS5leHBvcnRzPTNEcCksZXhwb3J0cy5fPTNEcCk6ZS5fPTNEcCxwLlZF UlNJT049M0QiMS43LjA9CiI7dmFyIGQ9M0RmdW5jdGlvbihlLHQsbil7aWYodD0zRD0zRD0zRHZv aWQgMClyZXR1cm4gZTtzd2l0Y2gobj0zRD0zRG51bGw/Mz0KOm4pe2Nhc2UgMTpyZXR1cm4gZnVu Y3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4sPQpy KXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsaSl7cmV0 dXJuIGUuY2FsbCh0LG4sciw9CmkpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKG4scixpLHMpe3Jl dHVybiBlLmNhbGwodCxuLHIsaSxzKX19cmV0dXJuIGZ1bmN0aT0Kb24oKXtyZXR1cm4gZS5hcHBs eSh0LGFyZ3VtZW50cyl9fTtwLml0ZXJhdGVlPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPTNE PQo9M0RudWxsP3AuaWRlbnRpdHk6cC5pc0Z1bmN0aW9uKGUpP2QoZSx0LG4pOnAuaXNPYmplY3Qo ZSk/cC5tYXRjaGVzKGUpOnAucHI9Cm9wZXJ0eShlKX0scC5lYWNoPTNEcC5mb3JFYWNoPTNEZnVu Y3Rpb24oZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVybiBlO3Q9Cj0zRGQodCxuKTt2YXIgcixp PTNEZS5sZW5ndGg7aWYoaT0zRD0zRD0zRCtpKWZvcihyPTNEMDtyPGk7cisrKXQoZVtyXSxyLGUp Oz0KZWxzZXt2YXIgcz0zRHAua2V5cyhlKTtmb3Iocj0zRDAsaT0zRHMubGVuZ3RoO3I8aTtyKysp dChlW3Nbcl1dLHNbcl0sZSl9cmV0PQp1cm4gZX0scC5tYXA9M0RwLmNvbGxlY3Q9M0RmdW5jdGlv bihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuW107dD0zRHAuaXQ9CmVyYXRlZSh0LG4pO3Zh ciByPTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSksaT0zRChyfHxlKS5sZW5n dGgscz0KPTNEQXJyYXkoaSksbztmb3IodmFyIHU9M0QwO3U8aTt1Kyspbz0zRHI/clt1XTp1LHNb dV09M0R0KGVbb10sbyxlKTtyZXR1cm4gPQpzfTt2YXIgdj0zRCJSZWR1Y2Ugb2YgZW1wdHkgYXJy YXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIjtwLnJlZHVjZT0zRHAuZm9sZGw9Cj0zRHAuaW5qZWN0 PTNEZnVuY3Rpb24oZSx0LG4scil7ZT0zRD0zRG51bGwmJihlPTNEW10pLHQ9M0RkKHQsciw0KTt2 YXIgaT0zRD0KZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSkscz0zRChpfHxlKS5s ZW5ndGgsbz0zRDAsdTtpZihhcmd1bWVudHMuPQpsZW5ndGg8Myl7aWYoIXMpdGhyb3cgbmV3IFR5 cGVFcnJvcih2KTtuPTNEZVtpP2lbbysrXTpvKytdfWZvcig7bzxzO28rKyl1PQo9M0RpP2lbb106 byxuPTNEdChuLGVbdV0sdSxlKTtyZXR1cm4gbn0scC5yZWR1Y2VSaWdodD0zRHAuZm9sZHI9M0Rm dW5jdGlvbig9CmUsdCxuLHIpe2U9M0Q9M0RudWxsJiYoZT0zRFtdKSx0PTNEZCh0LHIsNCk7dmFy IGk9M0RlLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndD0KaCYmcC5rZXlzKGUpLHM9M0QoaXx8ZSkubGVu Z3RoLG87aWYoYXJndW1lbnRzLmxlbmd0aDwzKXtpZighcyl0aHJvdyBuZXcgVHlwPQplRXJyb3Io dik7bj0zRGVbaT9pWy0tc106LS1zXX13aGlsZShzLS0pbz0zRGk/aVtzXTpzLG49M0R0KG4sZVtv XSxvLGUpO3JldHU9CnJuIG59LHAuZmluZD0zRHAuZGV0ZWN0PTNEZnVuY3Rpb24oZSx0LG4pe3Zh ciByO3JldHVybiB0PTNEcC5pdGVyYXRlZSh0LG4pLD0KcC5zb21lKGUsZnVuY3Rpb24oZSxuLGkp e2lmKHQoZSxuLGkpKXJldHVybiByPTNEZSwhMH0pLHJ9LHAuZmlsdGVyPTNEcC5zZWxlPQpjdD0z RGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRFtdO3JldHVybiBlPTNEPTNEbnVsbD9yOih0PTNEcC5p dGVyYXRlZSh0LG4pLHA9Ci5lYWNoKGUsZnVuY3Rpb24oZSxuLGkpe3QoZSxuLGkpJiZyLnB1c2go ZSl9KSxyKX0scC5yZWplY3Q9M0RmdW5jdGlvbihlLHQsbj0KKXtyZXR1cm4gcC5maWx0ZXIoZSxw Lm5lZ2F0ZShwLml0ZXJhdGVlKHQpKSxuKX0scC5ldmVyeT0zRHAuYWxsPTNEZnVuY3Rpb24oPQpl LHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuITA7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0z RGUubGVuZ3RoIT0zRD0zRCs9CmUubGVuZ3RoJiZwLmtleXMoZSksaT0zRChyfHxlKS5sZW5ndGgs cyxvO2ZvcihzPTNEMDtzPGk7cysrKXtvPTNEcj9yW3NdOnM7aT0KZighdChlW29dLG8sZSkpcmV0 dXJuITF9cmV0dXJuITB9LHAuc29tZT0zRHAuYW55PTNEZnVuY3Rpb24oZSx0LG4pe2lmKGU9M0Q9 Cj0zRG51bGwpcmV0dXJuITE7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0zRGUubGVuZ3RoIT0z RD0zRCtlLmxlbmd0aCYmcC5rZT0KeXMoZSksaT0zRChyfHxlKS5sZW5ndGgscyxvO2ZvcihzPTNE MDtzPGk7cysrKXtvPTNEcj9yW3NdOnM7aWYodChlW29dLG8sZSkpPQpyZXR1cm4hMH1yZXR1cm4h MX0scC5jb250YWlucz0zRHAuaW5jbHVkZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9M0Q9M0Ru dWw9Cmw/ITE6KGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0aCYmKGU9M0RwLnZhbHVlcyhlKSkscC5p bmRleE9mKGUsdCk+PTNEMCl9LHAuaT0KbnZva2U9M0RmdW5jdGlvbihlLHQpe3ZhciBuPTNEby5j YWxsKGFyZ3VtZW50cywyKSxyPTNEcC5pc0Z1bmN0aW9uKHQpO3JldHVyPQpuIHAubWFwKGUsZnVu Y3Rpb24oZSl7cmV0dXJuKHI/dDplW3RdKS5hcHBseShlLG4pfSl9LHAucGx1Y2s9M0RmdW5jdGlv bihlLHQ9Cil7cmV0dXJuIHAubWFwKGUscC5wcm9wZXJ0eSh0KSl9LHAud2hlcmU9M0RmdW5jdGlv bihlLHQpe3JldHVybiBwLmZpbHRlcihlLD0KcC5tYXRjaGVzKHQpKX0scC5maW5kV2hlcmU9M0Rm dW5jdGlvbihlLHQpe3JldHVybiBwLmZpbmQoZSxwLm1hdGNoZXModCkpfSxwPQoubWF4PTNEZnVu Y3Rpb24oZSx0LG4pe3ZhciByPTNELUluZmluaXR5LGk9M0QtSW5maW5pdHkscyxvO2lmKHQ9M0Q9 M0RudWxsJiY9CmUhPTNEbnVsbCl7ZT0zRGUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2U6cC52 YWx1ZXMoZSk7Zm9yKHZhciB1PTNEMCxhPTNEZT0KLmxlbmd0aDt1PGE7dSsrKXM9M0RlW3VdLHM+ ciYmKHI9M0RzKX1lbHNlIHQ9M0RwLml0ZXJhdGVlKHQsbikscC5lYWNoKGUsZnVuPQpjdGlvbihl LG4scyl7bz0zRHQoZSxuLHMpO2lmKG8+aXx8bz0zRD0zRD0zRC1JbmZpbml0eSYmcj0zRD0zRD0z RC1JbmZpbml0eSk9CnI9M0RlLGk9M0RvfSk7cmV0dXJuIHJ9LHAubWluPTNEZnVuY3Rpb24oZSx0 LG4pe3ZhciByPTNESW5maW5pdHksaT0zREluZmluaT0KdHkscyxvO2lmKHQ9M0Q9M0RudWxsJiZl IT0zRG51bGwpe2U9M0RlLmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9lOnAudmFsdWVzPQooZSk7 Zm9yKHZhciB1PTNEMCxhPTNEZS5sZW5ndGg7dTxhO3UrKylzPTNEZVt1XSxzPHImJihyPTNEcyl9 ZWxzZSB0PTNEcC5pdGU9CnJhdGVlKHQsbikscC5lYWNoKGUsZnVuY3Rpb24oZSxuLHMpe289M0R0 KGUsbixzKTtpZihvPGl8fG89M0Q9M0Q9M0RJbmZpbml0eT0KJiZyPTNEPTNEPTNESW5maW5pdHkp cj0zRGUsaT0zRG99KTtyZXR1cm4gcn0scC5zaHVmZmxlPTNEZnVuY3Rpb24oZSl7dmFyIHQ9Cj0z RGUmJmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2U6cC52YWx1ZXMoZSksbj0zRHQubGVuZ3Ro LHI9M0RBcnJheShuKTtmbz0Kcih2YXIgaT0zRDAscztpPG47aSsrKXM9M0RwLnJhbmRvbSgwLGkp LHMhPTNEPTNEaSYmKHJbaV09M0RyW3NdKSxyW3NdPTNEdFtpPQpdO3JldHVybiByfSxwLnNhbXBs ZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0zRD0zRG51bGx8fG4/KGUubGVuZ3RoIT0zRD0K PTNEK2UubGVuZ3RoJiYoZT0zRHAudmFsdWVzKGUpKSxlW3AucmFuZG9tKGUubGVuZ3RoLTEpXSk6 cC5zaHVmZmxlKGUpLnNsaWNlPQooMCxNYXRoLm1heCgwLHQpKX0scC5zb3J0Qnk9M0RmdW5jdGlv bihlLHQsbil7cmV0dXJuIHQ9M0RwLml0ZXJhdGVlKHQsbikscC49CnBsdWNrKHAubWFwKGUsZnVu Y3Rpb24oZSxuLHIpe3JldHVybnt2YWx1ZTplLGluZGV4Om4sY3JpdGVyaWE6dChlLG4scil9fSku cz0Kb3J0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RlLmNyaXRlcmlhLHI9M0R0LmNyaXRlcmlhO2lm KG4hPTNEPTNEcil7aWYobj5yfHxuPQo9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuIDE7aWYobjxyfHxy PTNEPTNEPTNEdm9pZCAwKXJldHVybi0xfXJldHVybiBlLmluZGV4LXQ9Ci5pbmRleH0pLCJ2YWx1 ZSIpfTt2YXIgbT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIGk9M0R7 fTtyZT0KdHVybiBuPTNEcC5pdGVyYXRlZShuLHIpLHAuZWFjaCh0LGZ1bmN0aW9uKHIscyl7dmFy IG89M0RuKHIscyx0KTtlKGkscixvKX0pPQosaX19O3AuZ3JvdXBCeT0zRG0oZnVuY3Rpb24oZSx0 LG4pe3AuaGFzKGUsbik/ZVtuXS5wdXNoKHQpOmVbbl09M0RbdF19KSxwLmk9Cm5kZXhCeT0zRG0o ZnVuY3Rpb24oZSx0LG4pe2Vbbl09M0R0fSkscC5jb3VudEJ5PTNEbShmdW5jdGlvbihlLHQsbil7 cC5oYXMoZT0KLG4pP2Vbbl0rKzplW25dPTNEMX0pLHAuc29ydGVkSW5kZXg9M0RmdW5jdGlvbihl LHQsbixyKXtuPTNEcC5pdGVyYXRlZShuLHIsPQoxKTt2YXIgaT0zRG4odCkscz0zRDAsbz0zRGUu bGVuZ3RoO3doaWxlKHM8byl7dmFyIHU9M0RzK28+Pj4xO24oZVt1XSk8aT9zPQo9M0R1KzE6bz0z RHV9cmV0dXJuIHN9LHAudG9BcnJheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlP3AuaXNBcnJheShl KT9vLmNhbGw9CihlKTplLmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9wLm1hcChlLHAuaWRlbnRp dHkpOnAudmFsdWVzKGUpOltdfSxwLnNpemU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPTNEPTNE bnVsbD8wOmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2UubGVuZ3RoOnAuaz0KZXlzKGUpLmxl bmd0aH0scC5wYXJ0aXRpb249M0RmdW5jdGlvbihlLHQsbil7dD0zRHAuaXRlcmF0ZWUodCxuKTt2 YXIgcj0zRFtdPQosaT0zRFtdO3JldHVybiBwLmVhY2goZSxmdW5jdGlvbihlLG4scyl7KHQoZSxu LHMpP3I6aSkucHVzaChlKX0pLFtyLGldfSxwLmY9Cmlyc3Q9M0RwLmhlYWQ9M0RwLnRha2U9M0Rm dW5jdGlvbihlLHQsbil7cmV0dXJuIGU9M0Q9M0RudWxsP3ZvaWQgMDp0PTNEPTNEbj0KdWxsfHxu P2VbMF06dDwwP1tdOm8uY2FsbChlLDAsdCl9LHAuaW5pdGlhbD0zRGZ1bmN0aW9uKGUsdCxuKXty ZXR1cm4gby5jYWxsPQooZSwwLE1hdGgubWF4KDAsZS5sZW5ndGgtKHQ9M0Q9M0RudWxsfHxuPzE6 dCkpKX0scC5sYXN0PTNEZnVuY3Rpb24oZSx0LG4pe3I9CmV0dXJuIGU9M0Q9M0RudWxsP3ZvaWQg MDp0PTNEPTNEbnVsbHx8bj9lW2UubGVuZ3RoLTFdOm8uY2FsbChlLE1hdGgubWF4KGUubD0KZW5n dGgtdCwwKSl9LHAucmVzdD0zRHAudGFpbD0zRHAuZHJvcD0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1 cm4gby5jYWxsKGUsdD0KPTNEPTNEbnVsbHx8bj8xOnQpfSxwLmNvbXBhY3Q9M0RmdW5jdGlvbihl KXtyZXR1cm4gcC5maWx0ZXIoZSxwLmlkZW50aXR5KX07PQp2YXIgZz0zRGZ1bmN0aW9uKGUsdCxu LHIpe2lmKHQmJnAuZXZlcnkoZSxwLmlzQXJyYXkpKXJldHVybiB1LmFwcGx5KHIsZSk7Zm89CnIo dmFyIGk9M0QwLG89M0RlLmxlbmd0aDtpPG87aSsrKXt2YXIgYT0zRGVbaV07IXAuaXNBcnJheShh KSYmIXAuaXNBcmd1bWVudD0KcyhhKT9ufHxyLnB1c2goYSk6dD9zLmFwcGx5KHIsYSk6ZyhhLHQs bixyKX1yZXR1cm4gcn07cC5mbGF0dGVuPTNEZnVuY3Rpb24oPQplLHQpe3JldHVybiBnKGUsdCwh MSxbXSl9LHAud2l0aG91dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmRpZmZlcmVuY2UoZSxvLmM9 CmFsbChhcmd1bWVudHMsMSkpfSxwLnVuaXE9M0RwLnVuaXF1ZT0zRGZ1bmN0aW9uKGUsdCxuLHIp e2lmKGU9M0Q9M0RudWxsKXJldD0KdXJuW107cC5pc0Jvb2xlYW4odCl8fChyPTNEbixuPTNEdCx0 PTNEITEpLG4hPTNEbnVsbCYmKG49M0RwLml0ZXJhdGVlKG4scikpPQo7dmFyIGk9M0RbXSxzPTNE W107Zm9yKHZhciBvPTNEMCx1PTNEZS5sZW5ndGg7bzx1O28rKyl7dmFyIGE9M0RlW29dO2lmKHQp KCE9Cm98fHMhPTNEPTNEYSkmJmkucHVzaChhKSxzPTNEYTtlbHNlIGlmKG4pe3ZhciBmPTNEbihh LG8sZSk7cC5pbmRleE9mKHMsZik8MD0KJiYocy5wdXNoKGYpLGkucHVzaChhKSl9ZWxzZSBwLmlu ZGV4T2YoaSxhKTwwJiZpLnB1c2goYSl9cmV0dXJuIGl9LHAudW5pb249Cj0zRGZ1bmN0aW9uKCl7 cmV0dXJuIHAudW5pcShnKGFyZ3VtZW50cywhMCwhMCxbXSkpfSxwLmludGVyc2VjdGlvbj0zRGZ1 bmN0aT0Kb24oZSl7aWYoZT0zRD0zRG51bGwpcmV0dXJuW107dmFyIHQ9M0RbXSxuPTNEYXJndW1l bnRzLmxlbmd0aDtmb3IodmFyIHI9M0QwPQosaT0zRGUubGVuZ3RoO3I8aTtyKyspe3ZhciBzPTNE ZVtyXTtpZihwLmNvbnRhaW5zKHQscykpY29udGludWU7Zm9yKHZhciBvPQo9M0QxO288bjtvKysp aWYoIXAuY29udGFpbnMoYXJndW1lbnRzW29dLHMpKWJyZWFrO289M0Q9M0Q9M0RuJiZ0LnB1c2go cyl9cmU9CnR1cm4gdH0scC5kaWZmZXJlbmNlPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RnKG8uY2Fs bChhcmd1bWVudHMsMSksITAsITAsW10pOz0KcmV0dXJuIHAuZmlsdGVyKGUsZnVuY3Rpb24oZSl7 cmV0dXJuIXAuY29udGFpbnModCxlKX0pfSxwLnppcD0zRGZ1bmN0aW9uKGUpPQp7aWYoZT0zRD0z RG51bGwpcmV0dXJuW107dmFyIHQ9M0RwLm1heChhcmd1bWVudHMsImxlbmd0aCIpLmxlbmd0aCxu PTNEQXJyYXk9Cih0KTtmb3IodmFyIHI9M0QwO3I8dDtyKyspbltyXT0zRHAucGx1Y2soYXJndW1l bnRzLHIpO3JldHVybiBufSxwLm9iamVjdD0zRD0KZnVuY3Rpb24oZSx0KXtpZihlPTNEPTNEbnVs bClyZXR1cm57fTt2YXIgbj0zRHt9O2Zvcih2YXIgcj0zRDAsaT0zRGUubGVuZ3RoPQo7cjxpO3Ir Kyl0P25bZVtyXV09M0R0W3JdOm5bZVtyXVswXV09M0RlW3JdWzFdO3JldHVybiBufSxwLmluZGV4 T2Y9M0RmdW5jdGk9Cm9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4tMTt2YXIgcj0zRDAs aT0zRGUubGVuZ3RoO2lmKG4pe2lmKHR5cGVvZiBuIT0KPTNEIm51bWJlciIpcmV0dXJuIHI9M0Rw LnNvcnRlZEluZGV4KGUsdCksZVtyXT0zRD0zRD0zRHQ/cjotMTtyPTNEbjwwP01hdGguPQptYXgo MCxpK24pOm59Zm9yKDtyPGk7cisrKWlmKGVbcl09M0Q9M0Q9M0R0KXJldHVybiByO3JldHVybi0x fSxwLmxhc3RJbmRleE89CmY9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJu LTE7dmFyIHI9M0RlLmxlbmd0aDt0eXBlb2Ygbj0zRD0zRD0KIm51bWJlciImJihyPTNEbjwwP3Ir bisxOk1hdGgubWluKHIsbisxKSk7d2hpbGUoLS1yPj0zRDApaWYoZVtyXT0zRD0zRD0zRHQpPQpy ZXR1cm4gcjtyZXR1cm4tMX0scC5yYW5nZT0zRGZ1bmN0aW9uKGUsdCxuKXthcmd1bWVudHMubGVu Z3RoPD0zRDEmJih0PTNEZXw9CnwwLGU9M0QwKSxuPTNEbnx8MTt2YXIgcj0zRE1hdGgubWF4KE1h dGguY2VpbCgodC1lKS9uKSwwKSxpPTNEQXJyYXkocik7Zm9yKD0KdmFyIHM9M0QwO3M8cjtzKyss ZSs9M0RuKWlbc109M0RlO3JldHVybiBpfTt2YXIgeT0zRGZ1bmN0aW9uKCl7fTtwLmJpbmQ9M0Rm PQp1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihoJiZlLmJpbmQ9M0Q9M0Q9M0RoKXJldHVybiBoLmFw cGx5KGUsby5jYWxsKGFyZ3VtZW49CnRzLDEpKTtpZighcC5pc0Z1bmN0aW9uKGUpKXRocm93IG5l dyBUeXBlRXJyb3IoIkJpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdT0KbmN0aW9uIik7cmV0dXJu IG49M0RvLmNhbGwoYXJndW1lbnRzLDIpLHI9M0RmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2Vv ZiByPQope3kucHJvdG90eXBlPTNEZS5wcm90b3R5cGU7dmFyIGk9M0RuZXcgeTt5LnByb3RvdHlw ZT0zRG51bGw7dmFyIHM9M0RlLmFwcGw9CnkoaSxuLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkp O3JldHVybiBwLmlzT2JqZWN0KHMpP3M6aX1yZXR1cm4gZS5hcHBseSh0LD0Kbi5jb25jYXQoby5j YWxsKGFyZ3VtZW50cykpKX0scn0scC5wYXJ0aWFsPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RvLmNh bGwoYXJnPQp1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49M0QwLHI9M0R0LnNsaWNl KCk7Zm9yKHZhciBpPTNEMCxzPTNEci5sZW49Cmd0aDtpPHM7aSsrKXJbaV09M0Q9M0Q9M0RwJiYo cltpXT0zRGFyZ3VtZW50c1tuKytdKTt3aGlsZShuPGFyZ3VtZW50cy5sZW5ndD0KaClyLnB1c2go YXJndW1lbnRzW24rK10pO3JldHVybiBlLmFwcGx5KHRoaXMscil9fSxwLmJpbmRBbGw9M0RmdW5j dGlvbihlKXt2PQphciB0LG49M0Rhcmd1bWVudHMubGVuZ3RoLHI7aWYobjw9M0QxKXRocm93IG5l dyBFcnJvcigiYmluZEFsbCBtdXN0IGJlIHBhc3M9CmVkIGZ1bmN0aW9uIG5hbWVzIik7Zm9yKHQ9 M0QxO3Q8bjt0Kyspcj0zRGFyZ3VtZW50c1t0XSxlW3JdPTNEcC5iaW5kKGVbcl0sZT0KKTtyZXR1 cm4gZX0scC5tZW1vaXplPTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGZ1bmN0aW9uKHIpe3ZhciBp PTNEbi5jYWNoZSxzPQo9M0R0P3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnI7cmV0dXJuIHAuaGFz KGkscyl8fChpW3NdPTNEZS5hcHBseSh0aGlzLGFyZ3U9Cm1lbnRzKSksaVtzXX07cmV0dXJuIG4u Y2FjaGU9M0R7fSxufSxwLmRlbGF5PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRG8uY2FsbD0KKGFy Z3VtZW50cywyKTtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51 bGwsbil9LHQpfSxwLmRlPQpmZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5kZWxheS5hcHBseShw LFtlLDFdLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzLDEpKSk9Cn0scC50aHJvdHRsZT0zRGZ1bmN0 aW9uKGUsdCxuKXt2YXIgcixpLHMsbz0zRG51bGwsdT0zRDA7bnx8KG49M0R7fSk7dmFyIGE9Cj0z RGZ1bmN0aW9uKCl7dT0zRG4ubGVhZGluZz0zRD0zRD0zRCExPzA6cC5ub3coKSxvPTNEbnVsbCxz PTNEZS5hcHBseShyLGkpLD0Kb3x8KHI9M0RpPTNEbnVsbCl9O3JldHVybiBmdW5jdGlvbigpe3Zh ciBmPTNEcC5ub3coKTshdSYmbi5sZWFkaW5nPTNEPTNEPTNEPQohMSYmKHU9M0RmKTt2YXIgbD0z RHQtKGYtdSk7cmV0dXJuIHI9M0R0aGlzLGk9M0Rhcmd1bWVudHMsbDw9M0QwfHxsPnQ/KGNsZWE9 CnJUaW1lb3V0KG8pLG89M0RudWxsLHU9M0RmLHM9M0RlLmFwcGx5KHIsaSksb3x8KHI9M0RpPTNE bnVsbCkpOiFvJiZuLnRyYWlsaT0KbmchPTNEPTNEITEmJihvPTNEc2V0VGltZW91dChhLGwpKSxz fX0scC5kZWJvdW5jZT0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPQoscyxvLHUsYT0zRGZ1bmN0 aW9uKCl7dmFyIGY9M0RwLm5vdygpLW87Zjx0JiZmPjA/cj0zRHNldFRpbWVvdXQoYSx0LWYpOihy PQo9M0RudWxsLG58fCh1PTNEZS5hcHBseShzLGkpLHJ8fChzPTNEaT0zRG51bGwpKSl9O3JldHVy biBmdW5jdGlvbigpe3M9M0R0aGk9CnMsaT0zRGFyZ3VtZW50cyxvPTNEcC5ub3coKTt2YXIgZj0z RG4mJiFyO3JldHVybiByfHwocj0zRHNldFRpbWVvdXQoYSx0KSksZj0KJiYodT0zRGUuYXBwbHko cyxpKSxzPTNEaT0zRG51bGwpLHV9fSxwLndyYXA9M0RmdW5jdGlvbihlLHQpe3JldHVybiBwLnBh cnRpPQphbCh0LGUpfSxwLm5lZ2F0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3Jl dHVybiFlLmFwcGx5KHRoaXMsYXJndW09CmVudHMpfX0scC5jb21wb3NlPTNEZnVuY3Rpb24oKXt2 YXIgZT0zRGFyZ3VtZW50cyx0PTNEZS5sZW5ndGgtMTtyZXR1cm4gZnVuYz0KdGlvbigpe3ZhciBu PTNEdCxyPTNEZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7d2hpbGUobi0tKXI9M0RlW25dLmNh bGwodGhpPQpzLHIpO3JldHVybiByfX0scC5hZnRlcj0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1 bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQ9Ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxwLmJl Zm9yZT0zRGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIGZ1bmN0aW9uKCl7cj0KZXR1cm4tLWU+ MD9uPTNEdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dD0zRG51bGwsbn19LHAub25jZT0zRHAucGFy dGlhbChwLmJlPQpmb3JlLDIpLHAua2V5cz0zRGZ1bmN0aW9uKGUpe2lmKCFwLmlzT2JqZWN0KGUp KXJldHVybltdO2lmKGMpcmV0dXJuIGMoZSk7dmE9CnIgdD0zRFtdO2Zvcih2YXIgbiBpbiBlKXAu aGFzKGUsbikmJnQucHVzaChuKTtyZXR1cm4gdH0scC52YWx1ZXM9M0RmdW5jdGlvbj0KKGUpe3Zh ciB0PTNEcC5rZXlzKGUpLG49M0R0Lmxlbmd0aCxyPTNEQXJyYXkobik7Zm9yKHZhciBpPTNEMDtp PG47aSsrKXJbaV09Cj0zRGVbdFtpXV07cmV0dXJuIHJ9LHAucGFpcnM9M0RmdW5jdGlvbihlKXt2 YXIgdD0zRHAua2V5cyhlKSxuPTNEdC5sZW5ndGgscj0KPTNEQXJyYXkobik7Zm9yKHZhciBpPTNE MDtpPG47aSsrKXJbaV09M0RbdFtpXSxlW3RbaV1dXTtyZXR1cm4gcn0scC5pbnZlcnQ9Cj0zRGZ1 bmN0aW9uKGUpe3ZhciB0PTNEe30sbj0zRHAua2V5cyhlKTtmb3IodmFyIHI9M0QwLGk9M0RuLmxl bmd0aDtyPGk7cisrKT0KdFtlW25bcl1dXT0zRG5bcl07cmV0dXJuIHR9LHAuZnVuY3Rpb25zPTNE cC5tZXRob2RzPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RbPQpdO2Zvcih2YXIgbiBpbiBlKXAuaXNG dW5jdGlvbihlW25dKSYmdC5wdXNoKG4pO3JldHVybiB0LnNvcnQoKX0scC5leHRlbmQ9M0Q9CmZ1 bmN0aW9uKGUpe2lmKCFwLmlzT2JqZWN0KGUpKXJldHVybiBlO3ZhciB0LG47Zm9yKHZhciByPTNE MSxpPTNEYXJndW1lbnRzLj0KbGVuZ3RoO3I8aTtyKyspe3Q9M0Rhcmd1bWVudHNbcl07Zm9yKG4g aW4gdClmLmNhbGwodCxuKSYmKGVbbl09M0R0W25dKX1yZXR1PQpybiBlfSxwLnBpY2s9M0RmdW5j dGlvbihlLHQsbil7dmFyIHI9M0R7fSxpO2lmKGU9M0Q9M0RudWxsKXJldHVybiByO2lmKHAuaXM9 CkZ1bmN0aW9uKHQpKXt0PTNEZCh0LG4pO2ZvcihpIGluIGUpe3ZhciBzPTNEZVtpXTt0KHMsaSxl KSYmKHJbaV09M0RzKX19ZWxzZT0Ke3ZhciBhPTNEdS5hcHBseShbXSxvLmNhbGwoYXJndW1lbnRz LDEpKTtlPTNEbmV3IE9iamVjdChlKTtmb3IodmFyIGY9M0QwLGw9Cj0zRGEubGVuZ3RoO2Y8bDtm KyspaT0zRGFbZl0saSBpbiBlJiYocltpXT0zRGVbaV0pfXJldHVybiByfSxwLm9taXQ9M0RmdW5j dD0KaW9uKGUsdCxuKXtpZihwLmlzRnVuY3Rpb24odCkpdD0zRHAubmVnYXRlKHQpO2Vsc2V7dmFy IHI9M0RwLm1hcCh1LmFwcGx5KFtdPQosby5jYWxsKGFyZ3VtZW50cywxKSksU3RyaW5nKTt0PTNE ZnVuY3Rpb24oZSx0KXtyZXR1cm4hcC5jb250YWlucyhyLHQpfX1yZXQ9CnVybiBwLnBpY2soZSx0 LG4pfSxwLmRlZmF1bHRzPTNEZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkpcmV0dXJuIGU7 Zm9yKD0KdmFyIHQ9M0QxLG49M0Rhcmd1bWVudHMubGVuZ3RoO3Q8bjt0Kyspe3ZhciByPTNEYXJn dW1lbnRzW3RdO2Zvcih2YXIgaSBpbiByPQopZVtpXT0zRD0zRD0zRHZvaWQgMCYmKGVbaV09M0Ry W2ldKX1yZXR1cm4gZX0scC5jbG9uZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CnAuaXNPYmplY3Qo ZSk/cC5pc0FycmF5KGUpP2Uuc2xpY2UoKTpwLmV4dGVuZCh7fSxlKTplfSxwLnRhcD0zRGZ1bmN0 aW9uKGUsdD0KKXtyZXR1cm4gdChlKSxlfTt2YXIgYj0zRGZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9 M0Q9M0Q9M0R0KXJldHVybiBlIT0zRD0zRDB8PQp8MS9lPTNEPTNEPTNEMS90O2lmKGU9M0Q9M0Ru dWxsfHx0PTNEPTNEbnVsbClyZXR1cm4gZT0zRD0zRD0zRHQ7ZSBpbnN0YW5jZW89CmYgcCYmKGU9 M0RlLl93cmFwcGVkKSx0IGluc3RhbmNlb2YgcCYmKHQ9M0R0Ll93cmFwcGVkKTt2YXIgaT0zRGEu Y2FsbChlKTtpZj0KKGkhPTNEPTNEYS5jYWxsKHQpKXJldHVybiExO3N3aXRjaChpKXtjYXNlIltv YmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0PQpyaW5nXSI6cmV0dXJuIiIrZT0zRD0zRCIi K3Q7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmlmKCtlIT0zRD0zRCtlKXJldHVybit0IT0KPTNEPTNE K3Q7cmV0dXJuK2U9M0Q9M0Q9M0QwPzEvK2U9M0Q9M0Q9M0QxL3Q6K2U9M0Q9M0Q9M0QrdDtjYXNl IltvYmplY3QgRGF0PQplXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rZT0zRD0zRD0z RCt0fWlmKHR5cGVvZiBlIT0zRCJvYmplY3QifHx0eXA9CmVvZiB0IT0zRCJvYmplY3QiKXJldHVy biExO3ZhciBzPTNEbi5sZW5ndGg7d2hpbGUocy0tKWlmKG5bc109M0Q9M0Q9M0RlKXJldD0KdXJu IHJbc109M0Q9M0Q9M0R0O3ZhciBvPTNEZS5jb25zdHJ1Y3Rvcix1PTNEdC5jb25zdHJ1Y3Rvcjtp ZihvIT0zRD0zRHUmJiJjPQpvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKHAu aXNGdW5jdGlvbihvKSYmbyBpbnN0YW5jZW9mIG8mJnAuaXM9CkZ1bmN0aW9uKHUpJiZ1IGluc3Rh bmNlb2YgdSkpcmV0dXJuITE7bi5wdXNoKGUpLHIucHVzaCh0KTt2YXIgZixsO2lmKGk9M0Q9Cj0z RD0zRCJbb2JqZWN0IEFycmF5XSIpe2Y9M0RlLmxlbmd0aCxsPTNEZj0zRD0zRD0zRHQubGVuZ3Ro O2lmKGwpd2hpbGUoZi0tKT0KaWYoIShsPTNEYihlW2ZdLHRbZl0sbixyKSkpYnJlYWt9ZWxzZXt2 YXIgYz0zRHAua2V5cyhlKSxoO2Y9M0RjLmxlbmd0aCxsPTNEPQpwLmtleXModCkubGVuZ3RoPTNE PTNEPTNEZjtpZihsKXdoaWxlKGYtLSl7aD0zRGNbZl07aWYoIShsPTNEcC5oYXModCxoKSYmYig9 CmVbaF0sdFtoXSxuLHIpKSlicmVha319cmV0dXJuIG4ucG9wKCksci5wb3AoKSxsfTtwLmlzRXF1 YWw9M0RmdW5jdGlvbihlLHQpez0KcmV0dXJuIGIoZSx0LFtdLFtdKX0scC5pc0VtcHR5PTNEZnVu Y3Rpb24oZSl7aWYoZT0zRD0zRG51bGwpcmV0dXJuITA7aWYocC5pPQpzQXJyYXkoZSl8fHAuaXNT dHJpbmcoZSl8fHAuaXNBcmd1bWVudHMoZSkpcmV0dXJuIGUubGVuZ3RoPTNEPTNEPTNEMDtmb3Io dmE9CnIgdCBpbiBlKWlmKHAuaGFzKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9LHAuaXNFbGVtZW50 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIT0KIWUmJmUubm9kZVR5cGU9M0Q9M0Q9M0QxfSxwLmlzQXJy YXk9M0RsfHxmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKGUpPTNEPTNEPQo9M0QiW29iamVjdCBB cnJheV0ifSxwLmlzT2JqZWN0PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R0eXBlb2YgZTtyZXR1cm4g dD0zRD0KPTNEPTNEImZ1bmN0aW9uInx8dD0zRD0zRD0zRCJvYmplY3QiJiYhIWV9LHAuZWFjaChb IkFyZ3VtZW50cyIsIkZ1bmN0aW9uIiwiPQpTdHJpbmciLCJOdW1iZXIiLCJEYXRlIiwiUmVnRXhw Il0sZnVuY3Rpb24oZSl7cFsiaXMiK2VdPTNEZnVuY3Rpb24odCl7cmV0dXI9Cm4gYS5jYWxsKHQp PTNEPTNEPTNEIltvYmplY3QgIitlKyJdIn19KSxwLmlzQXJndW1lbnRzKGFyZ3VtZW50cyl8fChw LmlzQXJndT0KbWVudHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5oYXMoZSwiY2FsbGVlIil9KSx0 eXBlb2YgLy4vIT0zRCJmdW5jdGlvbiImJihwPQouaXNGdW5jdGlvbj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiB0eXBlb2YgZT0zRD0zRCJmdW5jdGlvbiJ8fCExfSkscC5pc0Zpbml0ZT0KPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGlzRmluaXRlKGUpJiYhaXNOYU4ocGFyc2VGbG9hdChlKSl9LHAuaXNOYU49 M0RmdW5jdGlvPQpuKGUpe3JldHVybiBwLmlzTnVtYmVyKGUpJiZlIT0zRD0zRCtlfSxwLmlzQm9v bGVhbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPQo9M0Q9M0Q9M0QhMHx8ZT0zRD0zRD0zRCExfHxh LmNhbGwoZSk9M0Q9M0Q9M0QiW29iamVjdCBCb29sZWFuXSJ9LHAuaXNOdWxsPQo9M0RmdW5jdGlv bihlKXtyZXR1cm4gZT0zRD0zRD0zRG51bGx9LHAuaXNVbmRlZmluZWQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gZT0KPTNEPTNEPTNEdm9pZCAwfSxwLmhhcz0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUh PTNEbnVsbCYmZi5jYWxsKGUsdCl9LHAubm9DPQpvbmZsaWN0PTNEZnVuY3Rpb24oKXtyZXR1cm4g ZS5fPTNEdCx0aGlzfSxwLmlkZW50aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9Cn0scC5jb25z dGFudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX0scC5ub29wPTNE ZnVuY3Rpb24oKT0Ke30scC5wcm9wZXJ0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0 KXtyZXR1cm4gdFtlXX19LHAubWF0Y2hlcz0zRGZ1PQpuY3Rpb24oZSl7dmFyIHQ9M0RwLnBhaXJz KGUpLG49M0R0Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZT0zRD0zRG51bGw9CilyZXR1 cm4hbjtlPTNEbmV3IE9iamVjdChlKTtmb3IodmFyIHI9M0QwO3I8bjtyKyspe3ZhciBpPTNEdFty XSxzPTNEaVswXTtpZj0KKGlbMV0hPTNEPTNEZVtzXXx8IShzIGluIGUpKXJldHVybiExfXJldHVy biEwfX0scC50aW1lcz0zRGZ1bmN0aW9uKGUsdCxuKXt2PQphciByPTNEQXJyYXkoTWF0aC5tYXgo MCxlKSk7dD0zRGQodCxuLDEpO2Zvcih2YXIgaT0zRDA7aTxlO2krKylyW2ldPTNEdChpKTs9CnJl dHVybiByfSxwLnJhbmRvbT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9M0Q9M0RudWxsJiYodD0z RGUsZT0zRDApLGUrTWF0aD0KLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9LHAubm93PTNE RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlPQopLmdldFRpbWUoKX07dmFyIHc9 M0R7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiY9 CiN4Mjc7IiwiYCI6IiYjeDYwOyJ9LEU9M0RwLmludmVydCh3KSxTPTNEZnVuY3Rpb24oZSl7dmFy IHQ9M0RmdW5jdGlvbih0KXtyZT0KdHVybiBlW3RdfSxuPTNEIig/OiIrcC5rZXlzKGUpLmpvaW4o InwiKSsiKSIscj0zRFJlZ0V4cChuKSxpPTNEUmVnRXhwKG4sImciPQopO3JldHVybiBmdW5jdGlv bihlKXtyZXR1cm4gZT0zRGU9M0Q9M0RudWxsPyIiOiIiK2Usci50ZXN0KGUpP2UucmVwbGFjZShp LHQ9Cik6ZX19O3AuZXNjYXBlPTNEUyh3KSxwLnVuZXNjYXBlPTNEUyhFKSxwLnJlc3VsdD0zRGZ1 bmN0aW9uKGUsdCl7aWYoZT0zRD0zRD0KbnVsbClyZXR1cm4gdm9pZCAwO3ZhciBuPTNEZVt0XTty ZXR1cm4gcC5pc0Z1bmN0aW9uKG4pP2VbdF0oKTpufTt2YXIgeD0zRDA7PQpwLnVuaXF1ZUlkPTNE ZnVuY3Rpb24oZSl7dmFyIHQ9M0QrK3grIiI7cmV0dXJuIGU/ZSt0OnR9LHAudGVtcGxhdGVTZXR0 aW5ncz0KPTNEe2V2YWx1YXRlOi88JShbXHNcU10rPyklPi9nLGludGVycG9sYXRlOi88JT0zRChb XHNcU10rPyklPi9nLGVzY2FwZTovPCUtPQooW1xzXFNdKz8pJT4vZ307dmFyIFQ9M0QvKC4pXi8s Tj0zRHsiJyI6IiciLCJcXCI6IlxcIiwiXHIiOiJyIiwiXG4iOiJuIiwiXHU9CjIwMjgiOiJ1MjAy OCIsIlx1MjAyOSI6InUyMDI5In0sQz0zRC9cXHwnfFxyfFxufFx1MjAyOHxcdTIwMjkvZyxrPTNE ZnVuY3Rpbz0KbihlKXtyZXR1cm4iXFwiK05bZV19O3AudGVtcGxhdGU9M0RmdW5jdGlvbihlLHQs bil7IXQmJm4mJih0PTNEbiksdD0zRHAuZGVmPQphdWx0cyh7fSx0LHAudGVtcGxhdGVTZXR0aW5n cyk7dmFyIHI9M0RSZWdFeHAoWyh0LmVzY2FwZXx8VCkuc291cmNlLCh0LmludGU9CnJwb2xhdGV8 fFQpLnNvdXJjZSwodC5ldmFsdWF0ZXx8VCkuc291cmNlXS5qb2luKCJ8IikrInwkIiwiZyIpLGk9 M0QwLHM9M0QiXz0KX3ArPTNEJyI7ZS5yZXBsYWNlKHIsZnVuY3Rpb24odCxuLHIsbyx1KXtyZXR1 cm4gcys9M0RlLnNsaWNlKGksdSkucmVwbGFjZShDPQosayksaT0zRHUrdC5sZW5ndGgsbj9zKz0z RCInK1xuKChfX3Q9M0QoIituKyIpKT0zRD0zRG51bGw/Jyc6Xy5lc2NhcGUoX190KSk9Citcbici OnI/cys9M0QiJytcbigoX190PTNEKCIrcisiKSk9M0Q9M0RudWxsPycnOl9fdCkrXG4nIjpvJiYo cys9M0QiJztcbiIrbz0KKyJcbl9fcCs9M0QnIiksdH0pLHMrPTNEIic7XG4iLHQudmFyaWFibGV8 fChzPTNEIndpdGgob2JqfHx7fSl7XG4iK3MrIn1cbiIpPQoscz0zRCJ2YXIgX190LF9fcD0zRCcn LF9faj0zREFycmF5LnByb3RvdHlwZS5qb2luLHByaW50PTNEZnVuY3Rpb24oKXtfX3ArPQo9M0Rf X2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iK3MrInJldHVybiBfX3A7XG4iO3RyeXt2YXIgbz0z RG5ldyBGdW5jdGlvbig9CnQudmFyaWFibGV8fCJvYmoiLCJfIixzKX1jYXRjaCh1KXt0aHJvdyB1 LnNvdXJjZT0zRHMsdX12YXIgYT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIG8uY2FsbCh0aGlzLGUs cCl9LGY9M0R0LnZhcmlhYmxlfHwib2JqIjtyZXR1cm4gYS5zb3VyY2U9M0QiZnVuY3Rpb24oPQoi K2YrIil7XG4iK3MrIn0iLGF9LHAuY2hhaW49M0RmdW5jdGlvbihlKXt2YXIgdD0zRHAoZSk7cmV0 dXJuIHQuX2NoYWluPTNEITA9Cix0fTt2YXIgTD0zRGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9j aGFpbj9wKGUpLmNoYWluKCk6ZX07cC5taXhpbj0zRGZ1bmN0aT0Kb24oZSl7cC5lYWNoKHAuZnVu Y3Rpb25zKGUpLGZ1bmN0aW9uKHQpe3ZhciBuPTNEcFt0XT0zRGVbdF07cC5wcm90b3R5cGVbdF09 Cj0zRGZ1bmN0aW9uKCl7dmFyIGU9M0RbdGhpcy5fd3JhcHBlZF07cmV0dXJuIHMuYXBwbHkoZSxh cmd1bWVudHMpLEwuY2FsbCh0aD0KaXMsbi5hcHBseShwLGUpKX19KX0scC5taXhpbihwKSxwLmVh Y2goWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0Iiwic29yPQp0Iiwic3BsaWNlIiwidW5z aGlmdCJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEbltlXTtwLnByb3RvdHlwZVtlXT0zRGZ1bmN0aW9u KCk9Cnt2YXIgbj0zRHRoaXMuX3dyYXBwZWQ7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpLChl PTNEPTNEPTNEInNoaWZ0Inx8ZT0zRD0KPTNEPTNEInNwbGljZSIpJiZuLmxlbmd0aD0zRD0zRD0z RDAmJmRlbGV0ZSBuWzBdLEwuY2FsbCh0aGlzLG4pfX0pLHAuZWFjaChbPQoiY29uY2F0Iiwiam9p biIsInNsaWNlIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RuW2VdO3AucHJvdG90eXBlW2VdPTNEZnVu Y3Rpb249Cigpe3JldHVybiBMLmNhbGwodGhpcyx0LmFwcGx5KHRoaXMuX3dyYXBwZWQsYXJndW1l bnRzKSl9fSkscC5wcm90b3R5cGUudmFsdT0KZT0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dy YXBwZWR9LHR5cGVvZiBkZWZpbmU9M0Q9M0QiZnVuY3Rpb24iJiZkZWZpbmUuPQphbWQmJmRlZmlu ZSgidW5kZXJzY29yZSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gcH0pfS5jYWxsKHRoaXMpLGRlZmlu ZSgibGlicy89CnVuZGVyc2NvcmUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0 LG47cmV0dXJuIHR8fGUuX319KHRoaXMpKSxkZT0KZmluZSgidXRpbHMvdXRpbHMiLFsibGlicy91 bmRlcnNjb3JlIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIgPQpyIGluIGUp e3ZhciBpPTNEZVtyXTtpJiZ0eXBlb2YgaT0zRD0zRCJvYmplY3QiJiYobihpKSx0KGksbikpfX1m dW5jdGlvbiBuKGU9Cil7cmV0dXJuICQoIjxkaXYvPiIpLnRleHQoZSkuaHRtbCgpfWZ1bmN0aW9u IHIoZSl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRD0KW2VdKTtmb3IodmFyIHQgaW4gZSlpZihb Ik5vbmUiLG51bGwsIm51bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhPZihlPQpbdF0p Pi0xKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkoZSl7dmFyIGU9M0RlLnRvU3RyaW5nKCk7 aWYoZSl7ZT0zRGUucmU9CnBsYWNlKC8sL2csIiwgIik7dmFyIHQ9M0RlLmxhc3RJbmRleE9mKCIs ICIpO3JldHVybiB0IT0zRC0xJiYoZT0zRGUuc3Vic3RyKD0KMCx0KSsiIG9yICIrZS5zdWJzdHIo dCsxKSksZX1yZXR1cm4iIn1mdW5jdGlvbiBzKGUpe3RvcC5fX3V0aWxzX19nZXRfXz0zRHRvPQpw Ll9fdXRpbHNfX2dldF9ffHx7fSxlLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bZS51cmxdPyhl LnN1Y2Nlc3MmJmUuc3VjY2U9CnNzKHRvcC5fX3V0aWxzX19nZXRfX1tlLnVybF0pLGNvbnNvbGUu ZGVidWcoInV0aWxzLmpzOjpnZXQoKSAtIEZldGNoaW5nIGZybz0KbSBjYWNoZSBbIitlLnVybCsi XS4iKSk6byh7dXJsOmUudXJsLGRhdGE6ZS5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dG9wLl9f PQp1dGlsc19fZ2V0X19bZS51cmxdPTNEdCxlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0KX0sZXJyb3I6 ZnVuY3Rpb24odCl7ZS5lcnJvciY9CiZlLmVycm9yKHQpfX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9 M0R7Y29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLHR5cGU6ZT0KLnR5cGV8fCJHRVQiLGRh dGE6ZS5kYXRhfHx7fSx1cmw6ZS51cmx9O3QudHlwZT0zRD0zRCJHRVQifHx0LnR5cGU9M0Q9M0Qi REVMPQpFVEUiPyh0LnVybC5pbmRleE9mKCI/Iik9M0Q9M0QtMT90LnVybCs9M0QiPyI6dC51cmwr PTNEIiYiLHQudXJsPTNEdC51cmwrJC49CnBhcmFtKHQuZGF0YSksdC5kYXRhPTNEbnVsbCk6KHQu ZGF0YVR5cGU9M0QianNvbiIsdC51cmw9M0R0LnVybCx0LmRhdGE9M0RKUz0KT04uc3RyaW5naWZ5 KHQuZGF0YSkpLCQuYWpheCh0KS5kb25lKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PTNEPTNEInN0 cmluZyIpPQp0cnl7dD0zRHQucmVwbGFjZSgiSW5maW5pdHksIiwnIkluZmluaXR5IiwnKSx0PTNE alF1ZXJ5LnBhcnNlSlNPTih0KX1jYXRjaCg9Cm4pe2NvbnNvbGUuZGVidWcobil9ZS5zdWNjZXNz JiZlLnN1Y2Nlc3ModCl9KS5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBuPTNEbnVsbD0KO3RyeXtuPTNE alF1ZXJ5LnBhcnNlSlNPTih0LnJlc3BvbnNlVGV4dCl9Y2F0Y2gocil7bj0zRHQucmVzcG9uc2VU ZXh0fWUuZXJyPQpvciYmZS5lcnJvcihuLHQpfSl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPTNEJCgn PGRpdiBjbGFzcz0zRCInK2UrJyI+PC9kaXY+Jyk9CjtuLmFwcGVuZFRvKCI6ZXEoMCkiKTt2YXIg cj0zRG4uY3NzKHQpO3JldHVybiBuLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gYShlKXskKD0KJ2xpbmtb aHJlZl49M0QiJytlKyciXScpLmxlbmd0aHx8JCgnPGxpbmsgaHJlZj0zRCInK2dhbGF4eV9jb25m aWcucm9vdCtlKyciPQogcmVsPTNEInN0eWxlc2hlZXQiPicpLmFwcGVuZFRvKCJoZWFkIil9ZnVu Y3Rpb24gZih0LG4pe3JldHVybiB0P2UuZGVmYXVsdHM9Cih0LG4pOm59ZnVuY3Rpb24gbChlLHQp e3ZhciBuPTNEIiI7aWYoZT49M0QxZTExKWUvPTNEMWUxMSxuPTNEIlRCIjtlbHNlIGlmKD0KZT49 M0QxZTgpZS89M0QxZTgsbj0zRCJHQiI7ZWxzZSBpZihlPj0zRDFlNSllLz0zRDFlNSxuPTNEIk1C IjtlbHNlIGlmKGU+PTNEPQoxMDApZS89M0QxMDAsbj0zRCJLQiI7ZWxzZXtpZighKGU+MCkpcmV0 dXJuIjxzdHJvbmc+LTwvc3Ryb25nPiI7ZSo9M0QxMCxuPQo9M0QiYiJ9dmFyIHI9M0RNYXRoLnJv dW5kKGUpLzEwO3JldHVybiB0P3IrIiAiK246IjxzdHJvbmc+IityKyI8L3N0cm9uZz4gIis9Cm59 ZnVuY3Rpb24gYygpe3JldHVybiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJp bmcoMiw5KX1mdW5jdGlvbj0KIGgoZSl7dmFyIHQ9M0QkKCI8cD48L3A+Iik7cmV0dXJuIHQuYXBw ZW5kKGUpLHR9ZnVuY3Rpb24gcCgpe3ZhciBlPTNEbmV3IERhPQp0ZSx0PTNEKGUuZ2V0SG91cnMo KTwxMD8iMCI6IiIpK2UuZ2V0SG91cnMoKSxuPTNEKGUuZ2V0TWludXRlcygpPDEwPyIwIjoiIik9 CitlLmdldE1pbnV0ZXMoKSxyPTNEZS5nZXREYXRlKCkrIi8iKyhlLmdldE1vbnRoKCkrMSkrIi8i K2UuZ2V0RnVsbFllYXIoKSsiLD0KICIrdCsiOiIrbjtyZXR1cm4gcn1yZXR1cm57Y3NzTG9hZEZp bGU6YSxjc3NHZXRBdHRyaWJ1dGU6dSxnZXQ6cyxtZXJnZTpmLGJ5PQp0ZXNUb1N0cmluZzpsLHV1 aWQ6Yyx0aW1lOnAsd3JhcDpoLHJlcXVlc3Q6byxzYW5pdGl6ZTpuLHRleHRpZnk6aSx2YWxpZGF0 ZTo9CnIsZGVlcGVhY2g6dH19KSxkZWZpbmUoIm12Yy91aS91aS1wb3J0bGV0IixbInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb24oZSl7dmFyID0KdD0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHt2aXNpYmxl OiExLG9wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixpY29uOiIiLGJ1dHRvPQpuczpudWxsLGJvZHk6 bnVsbCxzY3JvbGxhYmxlOiEwLG5vcGFkZGluZzohMSxvcGVyYXRpb25zOm51bGwscGxhY2VtZW50 OiJib3Q9CnRvbSIsY2xzOiJ1aS1wb3J0bGV0IixvcGVyYXRpb25zX2ZsdDoicmlnaHQifSwkdGl0 bGU6bnVsbCwkY29udGVudDpudWxsLCRidT0KdHRvbnM6bnVsbCwkb3BlcmF0aW9uczpudWxsLCRo ZWFkZXI6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9uPQpzPTNEZS5tZXJn ZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0 aGlzLm9wdGk9Cm9ucykpLHRoaXMuJGNvbnRlbnQ9M0R0aGlzLiRlbC5maW5kKCIuY29udGVudCIp LHRoaXMuJHRpdGxlPTNEdGhpcy4kZWwuZmluZD0KKCIucG9ydGxldC10aXRsZS10ZXh0IiksdGhp cy4kaGVhZGVyPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtaGVhZGVyIik7dmFyPQogbj0zRHRo aXMuJGVsLmZpbmQoIi5wb3J0bGV0LWNvbnRlbnQiKTt0aGlzLm9wdGlvbnMubm9wYWRkaW5nJiYo bi5jc3MoInBhZGQ9CmluZyIsIjBweCIpLHRoaXMuJGNvbnRlbnQuY3NzKCJwYWRkaW5nIiwiMHB4 IikpLHRoaXMuJGJ1dHRvbnM9M0QkKHRoaXMuZWwpLj0KZmluZCgiLmJ1dHRvbnMiKTtpZih0aGlz Lm9wdGlvbnMuYnV0dG9ucyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMuPQpidXR0 b25zLGZ1bmN0aW9uKGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJGJ1dHRvbnMuYXBwZW5kKHQu JGVsKX0pfWVsc2UgdGg9CmlzLiRidXR0b25zLnJlbW92ZSgpO3RoaXMuJG9wZXJhdGlvbnM9M0Qk KHRoaXMuZWwpLmZpbmQoIi5vcGVyYXRpb25zIik7aWYodD0KaGlzLm9wdGlvbnMub3BlcmF0aW9u cyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9ucyxmdW5jdGlvPQpu KGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJG9wZXJhdGlvbnMuYXBwZW5kKHQuJGVsKX0pfXRo aXMub3B0aW9ucy5ib2R5JiY9CnRoaXMuYXBwZW5kKHRoaXMub3B0aW9ucy5ib2R5KX0sYXBwZW5k OmZ1bmN0aW9uKHQsbil7bj90aGlzLiRjb250ZW50LmFwcGVuZD0KKHQpOnRoaXMuJGNvbnRlbnQu YXBwZW5kKGUud3JhcCh0KSl9LGNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29udGVu PQp0fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNpYmxl PTNEITB9LGhpZGU6ZnVuY3Rpb249Cigpe3RoaXMuJGVsLmZhZGVPdXQoImZhc3QiKSx0aGlzLnZp c2libGU9M0QhMX0sZW5hYmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3RoaT0Kcy4kYnV0dG9ucy5maW5k KCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOmZ1bmN0aW9uKGUpe3Ro aXMuPQokYnV0dG9ucy5maW5kKCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITApfSxoaWRlT3BlcmF0 aW9uOmZ1bmN0aW9uKGUpe3RoaXMuJG89CnBlcmF0aW9ucy5maW5kKCIjIitlKS5oaWRlKCl9LHNo b3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kb3BlcmF0aW9ucy5maT0KbmQoIiMiK2UpLnNo b3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRvcGVyYXRpb25z LmZpbmQoPQoiIyIrZSk7bi5vZmYoImNsaWNrIiksbi5vbigiY2xpY2siLHQpfSx0aXRsZTpmdW5j dGlvbihlKXt2YXIgdD0zRHRoaXMuJHRpdGw9CmU7cmV0dXJuIGUmJnQuaHRtbChlKSx0Lmh0bWwo KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJz0KK2UuaWQrJyIg Y2xhc3M9M0QiJytlLmNscysnIj4nO3JldHVybiBlLnRpdGxlJiYodCs9M0QnPGRpdiBjbGFzcz0z RCJwb3J0bGV0PQotaGVhZGVyIj48ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEImZs b2F0OiAnK2Uub3BlcmF0aW9uc19mbHQrJzsiPjw9Ci9kaXY+JysnPGRpdiBjbGFzcz0zRCJwb3J0 bGV0LXRpdGxlIj4nLGUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNEImljb24gZmEgJz0KK2UuaWNv bisnIj4mbmJzcDs8L2k+JyksdCs9M0QnPHNwYW4gY2xhc3M9M0QicG9ydGxldC10aXRsZS10ZXh0 Ij4nK2UudGl0bGUrPQoiPC9zcGFuPiIrIjwvZGl2PiIrIjwvZGl2PiIpLHQrPTNEJzxkaXYgY2xh c3M9M0QicG9ydGxldC1jb250ZW50Ij4nLGUucGxhY2U9Cm1lbnQ9M0Q9M0QidG9wIiYmKHQrPTNE JzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+PC9kaXY+JyksdCs9M0QnPGRpdiBjbGFzcz0zRD0KImNv bnRlbnQiPjwvZGl2PicsZS5wbGFjZW1lbnQ9M0Q9M0QiYm90dG9tIiYmKHQrPTNEJzxkaXYgY2xh c3M9M0QiYnV0dG9ucyI+PQo8L2Rpdj4nKSx0Kz0zRCI8L2Rpdj48L2Rpdj4iLHR9fSk7cmV0dXJu e1ZpZXc6dH19KSxkZWZpbmUoIm12Yy91aS91aS1zZWxlY3Q9Ci1kZWZhdWx0IixbInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9ucz0K RGVmYXVsdDp7aWQ6IiIsY2xzOiIiLGVycm9yX3RleHQ6Ik5vIGRhdGEgYXZhaWxhYmxlIix2aXNp YmxlOiEwLHdhaXQ6ITEsbXVsPQp0aXBsZTohMSxzZWFyY2hhYmxlOiExfSxpbml0aWFsaXplOmZ1 bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGk9CnMub3B0aW9uc0RlZmF1bHQp LHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLiRzZWxl Yz0KdD0zRHRoaXMuJGVsLmZpbmQoIi5zZWxlY3QiKSx0aGlzLiRpY29uPTNEdGhpcy4kZWwuZmlu ZCgiLmljb24iKSx0aGlzLiRidXR0PQpvbj0zRHRoaXMuJGVsLmZpbmQoIi5idXR0b24iKSx0aGlz Lm9wdGlvbnMubXVsdGlwbGU/KHRoaXMuJHNlbGVjdC5wcm9wKCJtdWw9CnRpcGxlIiwhMCksdGhp cy4kc2VsZWN0LmFkZENsYXNzKCJ1aS1zZWxlY3QtbXVsdGlwbGUiKSx0aGlzLiRpY29uLnJlbW92 ZSgpKT0KOnRoaXMuJGVsLmFkZENsYXNzKCJ1aS1zZWxlY3QiKSx0aGlzLnVwZGF0ZSh0aGlzLm9w dGlvbnMuZGF0YSksdGhpcy5vcHRpb25zPQoudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLnZh bHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25zLnZpc2libGU9Cnx8dGhpcy5oaWRl KCksdGhpcy5vcHRpb25zLndhaXQ/dGhpcy53YWl0KCk6dGhpcy5zaG93KCk7dmFyIG49M0R0aGlz O3RoaXMuJD0Kc2VsZWN0Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hhbmdlKCl9KSx0aGlz Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fPQpjaGFuZ2UoKX0pfSx2YWx1ZTpmdW5jdGlvbihl KXtyZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiRzZWxlY3QudmFsKGU9CiksdGhpcy4k c2VsZWN0LnNlbGVjdDImJnRoaXMuJHNlbGVjdC5zZWxlY3QyKCJ2YWwiLGUpKSx0aGlzLiRzZWxl Y3QudmFsKCl9LD0KZmlyc3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJHNlbGVjdC5maW5kKCJv cHRpb24iKTtyZXR1cm4gZS5sZW5ndGg+MD9lLnZhPQpsKCk6dW5kZWZpbmVkfSx2YWxpZGF0ZTpm dW5jdGlvbigpe3JldHVybiBlLnZhbGlkYXRlKHRoaXMudmFsdWUoKSl9LHRleHQ6ZnU9Cm5jdGlv bigpe3JldHVybiB0aGlzLiRzZWxlY3QuZmluZCgib3B0aW9uOnNlbGVjdGVkIikudGV4dCgpfSxz aG93OmZ1bmN0aW9uKD0KKXt0aGlzLnVud2FpdCgpLHRoaXMuJHNlbGVjdC5zaG93KCksdGhpcy4k ZWwuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kPQplbC5oaWRlKCl9LHdhaXQ6ZnVuY3Rp b24oKXt0aGlzLiRpY29uLnJlbW92ZUNsYXNzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmE9CiBm YS1zcGlubmVyIGZhLXNwaW4iKX0sdW53YWl0OmZ1bmN0aW9uKCl7dGhpcy4kaWNvbi5yZW1vdmVD bGFzcygpLHRoaXMuJGljbz0Kbi5hZGRDbGFzcygiZmEgZmEtY2FyZXQtZG93biIpfSxkaXNhYmxl ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzZWxlY3QuaXMoPQoiOmRpc2FibGVkIil9LGVuYWJs ZTpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmY9 CnVuY3Rpb24oKXt0aGlzLiRzZWxlY3QucHJvcCgiZGlzYWJsZWQiLCEwKX0sYWRkOmZ1bmN0aW9u KGUpe3RoaXMuJHNlbGVjdC5hcD0KcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvbihlKSksdGhpcy5f cmVmcmVzaCgpfSxkZWw6ZnVuY3Rpb24oZSl7dGhpcy4kc2VsZWN0PQouZmluZCgib3B0aW9uW3Zh bHVlPTNEIitlKyJdIikucmVtb3ZlKCksdGhpcy4kc2VsZWN0LnRyaWdnZXIoImNoYW5nZSIpLHRo aXM9Ci5fcmVmcmVzaCgpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLiRzZWxlY3Qu dmFsKCk7dGhpcy4kc2VsZWN0LmZpbj0KZCgib3B0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciBuIGlu IGUpdGhpcy4kc2VsZWN0LmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlvPQpuKGVbbl0pKTt0aGlz Ll9yZWZyZXNoKCksdGhpcy4kc2VsZWN0LnZhbCh0KSx0aGlzLiRzZWxlY3QudmFsKCl8fHRoaXMu JHNlbGU9CmN0LnZhbCh0aGlzLmZpcnN0KCkpLHRoaXMub3B0aW9ucy5zZWFyY2hhYmxlJiYodGhp cy4kYnV0dG9uLmhpZGUoKSx0aGlzLiRzZT0KbGVjdC5zZWxlY3QyKCJkZXN0cm95IiksdGhpcy4k c2VsZWN0LnNlbGVjdDIoKSl9LHNldE9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoPQppcy5vcHRpb25z Lm9uY2hhbmdlPTNEZX0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRzZWxlY3QuZmlu ZCgnb3B0aW89Cm5bdmFsdWU9M0QiJytlKyciXScpLmxlbmd0aD4wfSxfY2hhbmdlOmZ1bmN0aW9u KCl7dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aD0KaXMub3B0aW9ucy5vbmNoYW5nZSh0aGlzLiRz ZWxlY3QudmFsKCkpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5mPQppbmQoIm9w dGlvblt2YWx1ZT0zRG51bGxdIikucmVtb3ZlKCk7dmFyIGU9M0R0aGlzLiRzZWxlY3QuZmluZCgi b3B0aW9uIikubGU9Cm5ndGg7ZT0zRD0zRDA/KHRoaXMuZGlzYWJsZSgpLHRoaXMuJHNlbGVjdC5h cHBlbmQodGhpcy5fdGVtcGxhdGVPcHRpb24oe3ZhbD0KdWU6Im51bGwiLGxhYmVsOnRoaXMub3B0 aW9ucy5lcnJvcl90ZXh0fSkpKTp0aGlzLmVuYWJsZSgpfSxfdGVtcGxhdGVPcHRpb246PQpmdW5j dGlvbihlKXtyZXR1cm4nPG9wdGlvbiB2YWx1ZT0zRCInK2UudmFsdWUrJyI+JytlLmxhYmVsKyI8 L29wdGlvbj4ifSxfdGU9Cm1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBpZD0zRCInK2Uu aWQrJyI+JysnPHNlbGVjdCBpZD0zRCJzZWxlY3QiIGNsYT0Kc3M9M0Qic2VsZWN0ICcrZS5jbHMr IiAiK2UuaWQrJyI+PC9zZWxlY3Q+JysnPGRpdiBjbGFzcz0zRCJidXR0b24iPicrJzxpIGNsPQph c3M9M0QiaWNvbiIvPicrIjwvZGl2PiIrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZp bmUoIm12Yy91aS91aS1zbGk9CmRlciIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3ZhciB0 PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdT0KbHQ6e21pbjpudWxsLG1heDpu dWxsLHN0ZXA6bnVsbCxwcmVjaXNlOiExLHNwbGl0OjFlNH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0 PQope3ZhciBuPTNEdGhpczt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVm YXVsdCksdGhpcy5zZXRFbGVtZW49CnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhp cy51c2VzbGlkZXI9M0R0aGlzLm9wdGlvbnMubWF4IT0zRD0zRG51bD0KbCYmdGhpcy5vcHRpb25z Lm1pbiE9M0Q9M0RudWxsJiZ0aGlzLm9wdGlvbnMubWF4PnRoaXMub3B0aW9ucy5taW4sdGhpcy5v cHRpPQpvbnMuc3RlcD0zRD0zRD0zRG51bGwmJih0aGlzLm9wdGlvbnMuc3RlcD0zRDEsdGhpcy5v cHRpb25zLnByZWNpc2UmJnRoaXMudXM9CmVzbGlkZXImJih0aGlzLm9wdGlvbnMuc3RlcD0zRCh0 aGlzLm9wdGlvbnMubWF4LXRoaXMub3B0aW9ucy5taW4pL3RoaXMub3B0aT0Kb25zLnNwbGl0KSks dGhpcy51c2VzbGlkZXI/KHRoaXMuJHNsaWRlcj0zRHRoaXMuJGVsLmZpbmQoIiNzbGlkZXIiKSx0 aGlzLiRzPQpsaWRlci5zbGlkZXIodGhpcy5vcHRpb25zKSx0aGlzLiRzbGlkZXIub24oInNsaWRl IixmdW5jdGlvbihlLHQpe24udmFsdWUodC49CnZhbHVlKX0pKTp0aGlzLiRlbC5maW5kKCIudWkt Zm9ybS1zbGlkZXItdGV4dCIpLmNzcygid2lkdGgiLCIxMDAlIiksdGhpcy4kdD0KZXh0PTNEdGhp cy4kZWwuZmluZCgiI3RleHQiKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZpbmVkJiZ0 aGlzLnZhbHVlPQoodGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLiR0ZXh0Lm9uKCJjaGFuZ2UiLGZ1 bmN0aW9uKCl7bi52YWx1ZSgkKHRoaXMpLnZhbCg9CikpfSk7dmFyIHI9M0RbXTt0aGlzLiR0ZXh0 Lm9uKCJrZXl1cCIsZnVuY3Rpb24oZSl7cltlLndoaWNoXT0zRCExfSksdGhpcy4kdD0KZXh0Lm9u KCJrZXlkb3duIixmdW5jdGlvbihlKXt2YXIgdD0zRGUud2hpY2g7clt0XT0zRCEwLHQ9M0Q9M0Q4 fHx0PTNEPTNEOXx8PQp0PTNEPTNEMTN8fHQ9M0Q9M0QzN3x8dD0zRD0zRDM5fHx0Pj0zRDQ4JiZ0 PD0zRDU3fHx0PTNEPTNEMTkwJiYkKHRoaXMpLnZhbCg9CikuaW5kZXhPZigiLiIpPTNEPTNELTEm Jm4ub3B0aW9ucy5wcmVjaXNlfHx0PTNEPTNEMTg5JiYkKHRoaXMpLnZhbCgpLmluZGV4Tz0KZigi LSIpPTNEPTNELTF8fHJbOTFdfHxyWzE3XXx8ZXZlbnQucHJldmVudERlZmF1bHQoKX0pfSx2YWx1 ZTpmdW5jdGlvbihlKXtyPQpldHVybiBlIT0zRD0zRHVuZGVmaW5lZCYmKGlzTmFOKGUpJiYoZT0z RDApLHRoaXMub3B0aW9ucy5tYXghPTNEPTNEbnVsbCYmKGU9Cj0zRE1hdGgubWluKGUsdGhpcy5v cHRpb25zLm1heCkpLHRoaXMub3B0aW9ucy5taW4hPTNEPTNEbnVsbCYmKGU9M0RNYXRoLm1heD0K KGUsdGhpcy5vcHRpb25zLm1pbikpLHRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25z Lm9uY2hhbmdlKGUpLHRoaXMuPQokc2xpZGVyJiZ0aGlzLiRzbGlkZXIuc2xpZGVyKCJ2YWx1ZSIs ZSksdGhpcy4kdGV4dC52YWwoZSkpLHRoaXMuJHRleHQudmFsKCk9Cn0sX3RlbXBsYXRlOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJ1aS1mb3JtLXNsaWRl cj0KIj4nKyc8aW5wdXQgaWQ9M0QidGV4dCIgdHlwZT0zRCJ0ZXh0IiBjbGFzcz0zRCJ1aS1mb3Jt LXNsaWRlci10ZXh0Ii8+JysnPGRpPQp2IGlkPTNEInNsaWRlciIgY2xhc3M9M0QidWktZm9ybS1z bGlkZXItZWxlbWVudCIvPicrIjwvZGl2PiJ9fSk7cmV0dXJue1ZpZXc9Cjp0fX0pLGRlZmluZSgi bXZjL3VpL3VpLW9wdGlvbnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0zREJh Y2tibz0KbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25z RGVmYXVsdD0zRHt2aXNpYmxlOiEwLGRhPQp0YTpbXSxpZDplLnV1aWQoKSxlcnJvcl90ZXh0OiJO byBkYXRhIGF2YWlsYWJsZS4iLHdhaXRfdGV4dDoiUGxlYXNlIHdhaXQuLi49CiJ9LHRoaXMub3B0 aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQoIjxk aXYvPiIpLD0KdGhpcy4kbWVzc2FnZT0zRCQoIjxkaXYvPiIpLHRoaXMuJG9wdGlvbnM9M0QkKHRo aXMuX3RlbXBsYXRlKHQpKSx0aGlzLiRlbC5hPQpwcGVuZCh0aGlzLiRtZXNzYWdlKSx0aGlzLiRl bC5hcHBlbmQodGhpcy4kb3B0aW9ucyksdGhpcy5vcHRpb25zLnZpc2libGV8fHQ9Cmhpcy4kZWwu aGlkZSgpLHRoaXMudXBkYXRlKHRoaXMub3B0aW9ucy5kYXRhKSx0aGlzLm9wdGlvbnMudmFsdWUh PTNEPTNEdW5kZT0KZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTt2YXIgbj0z RHRoaXM7dGhpcy5vbigiY2hhbmdlIixmdW5jdGlvPQpuKCl7bi5fY2hhbmdlKCl9KX0sdXBkYXRl OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5fZ2V0VmFsdWUoKTt0aGlzLiRvcHRpb249CnMuZW1w dHkoKTtpZih0aGlzLl90ZW1wbGF0ZU9wdGlvbnMpdGhpcy4kb3B0aW9ucy5hcHBlbmQodGhpcy5f dGVtcGxhdGVPcHRpbz0KbnMoZSkpO2Vsc2UgZm9yKHZhciBuIGluIGUpe3ZhciByPTNEJCh0aGlz Ll90ZW1wbGF0ZU9wdGlvbihlW25dKSk7ci5hZGRDbGFzPQpzKCJ1aS1vcHRpb24iKSx0aGlzLiRv cHRpb25zLmFwcGVuZChyKX12YXIgaT0zRHRoaXM7dGhpcy4kZWwuZmluZCgiaW5wdXQiKS49Cm9u KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aS52YWx1ZShpLl9nZXRWYWx1ZSgpKSxpLl9jaGFuZ2UoKX0p LHRoaXMuX3JlZnJlc2goKT0KLHRoaXMudmFsdWUodCl9LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUh PTNEPTNEdW5kZWZpbmVkKXtlIGluc3RhbmNlb2YgQXJyYXl8PQp8KGU9M0RbZV0pLHRoaXMuJGVs LmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIsITEpO2Zvcih2YXIgdCBpbiBlKXRoaXMuJGU9 CmwuZmluZCgnaW5wdXRbdmFsdWU9M0QiJytlW3RdKyciXScpLmZpcnN0KCkucHJvcCgiY2hlY2tl ZCIsITApfXJldHVybiB0aGlzLj0KX2dldFZhbHVlKCl9LGV4aXN0czpmdW5jdGlvbihlKXtpZihl IT0zRD0zRHVuZGVmaW5lZCl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoPQplPTNEW2VdKTtmb3IodmFy IHQgaW4gZSlpZih0aGlzLiRlbC5maW5kKCdpbnB1dFt2YWx1ZT0zRCInK2VbdF0rJyJdJykubGVu Z3Q9Cmg+MClyZXR1cm4hMH1yZXR1cm4hMX0sZmlyc3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMu JGVsLmZpbmQoImlucHV0Iik7cmV0dT0Kcm4gZS5sZW5ndGg+MD9lLnZhbCgpOnVuZGVmaW5lZH0s dmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS52YWxpZGF0ZSh0aGlzPQoudmFsdWUoKSl9LHdh aXQ6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwJiYodGhpcy5fbWVzc2FnZVNob3codGhp cy5vcHQ9CmlvbnMud2FpdF90ZXh0LCJpbmZvIiksdGhpcy4kb3B0aW9ucy5oaWRlKCkpfSx1bndh aXQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXNzYT0KZ2VIaWRlKCksdGhpcy5fcmVmcmVzaCgpfSxfY2hh bmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wPQp0aW9ucy5vbmNo YW5nZSh0aGlzLl9nZXRWYWx1ZSgpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9 M0Q9M0QwPyg9CnRoaXMuX21lc3NhZ2VTaG93KHRoaXMub3B0aW9ucy5lcnJvcl90ZXh0LCJkYW5n ZXIiKSx0aGlzLiRvcHRpb25zLmhpZGUoKSk6KD0KdGhpcy5fbWVzc2FnZUhpZGUoKSx0aGlzLiRv cHRpb25zLmNzcygiZGlzcGxheSIsImlubGluZS1ibG9jayIpKX0sX2dldFZhbHVlPQo6ZnVuY3Rp b24oKXt2YXIgZT0zRHRoaXMuJGVsLmZpbmQoIjpjaGVja2VkIik7aWYoZS5sZW5ndGg9M0Q9M0Qw KXJldHVybiJudWw9CmwiO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIHQ9M0RbXTtyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dC5wdXNoKCQodD0KaGlzKS52YWwoKSl9KSx0fXJldHVybiBl LnZhbCgpfSxfc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudWktPQpvcHRp b24iKS5sZW5ndGh9LF9tZXNzYWdlU2hvdzpmdW5jdGlvbihlLHQpe3RoaXMuJG1lc3NhZ2Uuc2hv dygpLHRoaXMuJG1lc3M9CmFnZS5yZW1vdmVDbGFzcygpLHRoaXMuJG1lc3NhZ2UuYWRkQ2xhc3Mo InVpLW1lc3NhZ2UgYWxlcnQgYWxlcnQtIit0KSx0aGlzLj0KJG1lc3NhZ2UuaHRtbChlKX0sX21l c3NhZ2VIaWRlOmZ1bmN0aW9uKCl7dGhpcy4kbWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmPQp1 bmN0aW9uKCl7cmV0dXJuJzxkaXYgY2xhc3M9M0QidWktb3B0aW9ucyIvPid9fSksbj0zRHt9O24u Vmlldz0zRHQuZXh0ZW5kKHs9CmluaXRpYWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuaW5p dGlhbGl6ZS5jYWxsKHRoaXMsZSl9LF90ZW1wbGF0ZU9wdGlvbj0KOmZ1bmN0aW9uKGUpe3JldHVy bic8ZGl2PjxpbnB1dCB0eXBlPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyci PQogdmFsdWU9M0QiJytlLnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4iKyI8L2Rpdj4ifX0pO3Zh ciByPTNEe307ci5WaWV3PTNEdC49CmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlKXtlLm11 bHRpcGxlPTNEITAsdC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKD0KdGhpcyxlKX0sX3RlbXBs YXRlT3B0aW9uOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEImNoZWNrYm94 IiBuPQphbWU9M0QiJyt0aGlzLm9wdGlvbnMuaWQrJyIgdmFsdWU9M0QiJytlLnZhbHVlKyciLz4n K2UubGFiZWwrIjxicj4iKyI8L2Rpdj49CiJ9fSk7dmFyIGk9M0R7fTtyZXR1cm4gaS5WaWV3PTNE dC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dC5wcm90b3R5cD0KZS5pbml0aWFsaXpl LmNhbGwodGhpcyxlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVk JiYodGhpPQpzLiRlbC5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiLCExKSx0aGlzLiRlbC5m aW5kKCJsYWJlbCIpLnJlbW92ZUNsYXNzKCI9CmFjdGl2ZSIpLHRoaXMuJGVsLmZpbmQoJ1t2YWx1 ZT0zRCInK2UrJyJdJykucHJvcCgiY2hlY2tlZCIsITApLmNsb3Nlc3QoImxhYj0KZWwiKS5hZGRD bGFzcygiYWN0aXZlIikpLHRoaXMuX2dldFZhbHVlKCl9LF90ZW1wbGF0ZU9wdGlvbjpmdW5jdGlv bihlKXt2YXIgPQp0PTNEJzxsYWJlbCBjbGFzcz0zRCJidG4gYnRuLWRlZmF1bHQiPic7cmV0dXJu IGUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPTNEImY9CmEgJytlLmljb24rJyIvPicpLHQrPTNEJzxp bnB1dCB0eXBlPTNEInJhZGlvIiBuYW1lPTNEIicrdGhpcy5vcHRpb25zLmlkKyciID0KdmFsdWU9 M0QiJytlLnZhbHVlKyciPicrZS5sYWJlbCsiPC9sYWJlbD4iLHR9LF90ZW1wbGF0ZTpmdW5jdGlv bigpe3JldHVybic8PQpkaXYgY2xhc3M9M0QiYnRuLWdyb3VwIHVpLXJhZGlvYnV0dG9uIiBkYXRh LXRvZ2dsZT0zRCJidXR0b25zIi8+J319KSx7QmFzZTo9CnQsUmFkaW86bixSYWRpb0J1dHRvbjpp LENoZWNrYm94OnJ9fSksZGVmaW5lKCJtdmMvdWkvdWktZHJpbGxkb3duIixbInV0aWxzLz0KdXRp bHMiLCJtdmMvdWkvdWktb3B0aW9ucyJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0LkJhc2UuZXh0 ZW5kKHtpbml0aWFsaXplPQo6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwbGF5PTNEZS5kaXNwbGF5fHwi Y2hlY2tib3giLGUubXVsdGlwbGU9M0R0aGlzLmRpc3BsYXk9Cj0zRD0zRCJjaGVja2JveCIsdC5C YXNlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxlKX0sX3RlbXBsYXRlT3B0aW9uOj0K ZnVuY3Rpb24oZSx0LG4pe3JldHVybic8ZGl2PjxpbnB1dCBuYW1lPTNEIicrdGhpcy5vcHRpb25z LmlkKyciIGNsYXNzPTNEInVpPQotb3B0aW9uIiB0eXBlPTNEIicrdGhpcy5kaXNwbGF5KyciIHZh bHVlPTNEIicrdCsnIj4nK2UrIjxkaXYvPiJ9LF90ZW1wbGF0ZU89CnB0aW9uczpmdW5jdGlvbihl KXtmdW5jdGlvbiBuKGUsdCl7ZnVuY3Rpb24gbihuKXtuPyh0LmZhZGVJbigiZmFzdCIpLGUucmVt bz0KdmVDbGFzcygidG9nZ2xlLWV4cGFuZCIpLGUuYWRkQ2xhc3MoInRvZ2dsZSIpLGUuaXNfZXhw YW5kZWQ9M0QhMCk6KHQuaGlkZSgpPQosZS5yZW1vdmVDbGFzcygidG9nZ2xlIiksZS5hZGRDbGFz cygidG9nZ2xlLWV4cGFuZCIpLGUuaXNfZXhwYW5kZWQ9M0QhMSl9ZS49Cm9uKCJjbGljayIsZnVu Y3Rpb24oKXtuKCFlLmlzX2V4cGFuZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKXtmb3IoaSBpbiBzKXt2 YXIgbz0KPTNEc1tpXSx1PTNEby5vcHRpb25zLmxlbmd0aD4wLGE9M0QkKCI8ZGl2Lz4iKTtpZih1 KXt2YXIgZj0zRCQoJzxzcGFuIGNsYXNzPQo9M0QidWktZHJpbGxkb3duLWJ1dHRvbiBmb3JtLXRv Z2dsZSBpY29uLWJ1dHRvbiB0b2dnbGUtZXhwYW5kIiBzdHlsZT0zRCJwb3M9Cml0aW9uOiByZWxh dGl2ZTsgdG9wOiAycHg7Ii8+JyksbD0zRCQoIjxkaXYvPiIpO2wuYXBwZW5kKGYpLGwuYXBwZW5k KHQuX3RlbT0KcGxhdGVPcHRpb24oby5uYW1lLG8udmFsdWUpKSxhLmFwcGVuZChsKTt2YXIgYz0z RCQoJzxkaXYgc3R5bGU9M0QiZGlzcGxheTogPQpub25lOyBtYXJnaW4tbGVmdDogMjVweDsiLz4n KTtyKGMsby5vcHRpb25zKSxhLmFwcGVuZChjKSxuKGYsYyl9ZWxzZSBhLmFwcGU9Cm5kKHQuX3Rl bXBsYXRlT3B0aW9uKG8ubmFtZSxvLnZhbHVlKSk7ZS5hcHBlbmQoYSl9fXZhciB0PTNEdGhpcyxz PTNEJCgiPGRpdj0KLz4iKTtyZXR1cm4gcihzLGUpLHN9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXty ZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1vcHRpb25zPQogZHJpbGxkb3duLWNvbnRhaW5lciIgaWQ9 M0QiJytlLmlkKyciLz4nfX0pO3JldHVybntWaWV3Om59fSksZGVmaW5lKCJtdmMvdWk9Ci91aS1i dXR0b24tbWVudSIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5W aWV3LmV4dGVuZCh7bz0KcHRpb25zRGVmYXVsdDp7aWQ6IiIsdGl0bGU6IiIsZmxvYXRpbmc6InJp Z2h0IixpY29uOm51bGwsb25jbGljazpudWxsLGNsczoiPQp1aS1idXR0b24taWNvbiB1aS1idXR0 b24tbWVudSIsdG9vbHRpcDoiIix0YXJnZXQ6IiIsaHJlZjoiIixvbnVubG9hZDpudWxsLHY9Cmlz aWJsZTohMCx0YWc6IiJ9LCRtZW51Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9w dGlvbnM9M0RlLm1lcmdlKD0KdCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQo JCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSk7dmFyPQogbj0zRCQodGhpcy5lbCkuZmlu ZCgiLnJvb3QiKSxyPTNEdGhpcztuLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7JCgiLnRvb2x0aXA9 CiIpLmhpZGUoKSxlLnByZXZlbnREZWZhdWx0KCksci5vcHRpb25zLm9uY2xpY2smJnIub3B0aW9u cy5vbmNsaWNrKCl9KSx0aGlzLj0Kb3B0aW9ucy52aXNpYmxlfHx0aGlzLmhpZGUoKSxuLnRvb2x0 aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9PQopfSxzaG93OmZ1bmN0aW9u KCl7JCh0aGlzLmVsKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmhpZGUoKX0s YWQ9CmRNZW51OmZ1bmN0aW9uKHQpe3ZhciBuPTNEe3RpdGxlOiIiLHRhcmdldDoiIixocmVmOiIi LG9uY2xpY2s6bnVsbCxkaXZpZGVyOj0KITEsaWNvbjpudWxsLGNsczoiYnV0dG9uLW1lbnUgYnRu LWdyb3VwIn07bj0zRGUubWVyZ2UodCxuKSx0aGlzLiRtZW51fHwoJCh0PQpoaXMuZWwpLmFwcGVu ZCh0aGlzLl90ZW1wbGF0ZU1lbnUoKSksdGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmluZCgiLm1l bnUiKSk9Cjt2YXIgcj0zRCQodGhpcy5fdGVtcGxhdGVNZW51SXRlbShuKSk7ci5vbigiY2xpY2si LGZ1bmN0aW9uKGUpe2UucHJldmVudERlZj0KYXVsdCgpLG4ub25jbGljayYmbi5vbmNsaWNrKCl9 KSx0aGlzLiRtZW51LmFwcGVuZChyKSxuLmRpdmlkZXImJnRoaXMuJG1lbnUuPQphcHBlbmQoJCh0 aGlzLl90ZW1wbGF0ZURpdmlkZXIoKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpmdW5jdGlvbihlKXt2 YXIgdD0zRCc9CjxsaT48YSBjbGFzcz0zRCJkcm9wZG93bi1pdGVtIiBocmVmPTNEIicrZS5ocmVm KyciIHRhcmdldD0zRCInK2UudGFyZ2V0KyciPj0KJztyZXR1cm4gZS5pY29uJiYodCs9M0QnPGkg Y2xhc3M9M0QiZmEgJytlLmljb24rJyI+PC9pPicpLHQrPTNEIiAiK2UudGl0bGUrPQoiPC9hPiIr IjwvbGk+Iix0fSxfdGVtcGxhdGVNZW51OmZ1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJt ZW51IGRyb3Bkb3c9Cm4tbWVudSBwdWxsLXJpZ2h0IiByb2xlPTNEIm1lbnUiPjwvdWw+J30sX3Rl bXBsYXRlRGl2aWRlcjpmdW5jdGlvbigpe3JldHVybj0KJzxsaSBjbGFzcz0zRCJkaXZpZGVyIj48 L2xpPid9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0zRCIiLG49M0QiIjtlLnRpPQp0bGU/ dD0zRCJ3aWR0aDogYXV0bzsiOm49M0QibWFyZ2luOiAwcHg7Ijt2YXIgcj0zRCc8ZGl2IGlkPTNE IicrZS5pZCsnIiBzdHk9CmxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNz PTNEImRyb3Bkb3duICcrZS5jbHMrJyI+JysnPGRpdiBjbD0KYXNzPTNEInJvb3QgYnV0dG9uIGRy b3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9M0QiZHJvcGRvd24iIHN0eWxlPTNEIicrbisnPQoi PicrJzxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyIvPic7cmV0dXJuIGUudGl0bGUmJihy Kz0zRCcmbmJzcDs8c3BhbiA9CmNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUrIjwvc3Bhbj4iKSxy Kz0zRCI8L2Rpdj48L2Rpdj4iLHJ9fSl9KSxkZWZpbmUoIm12Yz0KL3VpL3VpLW1pc2MiLFsidXRp bHMvdXRpbHMiLCJtdmMvdWkvdWktc2VsZWN0LWRlZmF1bHQiLCJtdmMvdWkvdWktc2xpZGVyIiwi PQptdmMvdWkvdWktb3B0aW9ucyIsIm12Yy91aS91aS1kcmlsbGRvd24iLCJtdmMvdWkvdWktYnV0 dG9uLW1lbnUiLCJtdmMvdWkvdWk9Ci1tb2RhbCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8pe3Zh ciB1PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdT0KbHQ6e3VybDoiIixjbHM6 IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMu b3B0PQppb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0 aW9ucykpfSxfdGVtcGxhdGU6ZnVuY3Q9CmlvbihlKXtyZXR1cm4nPGltZyBjbGFzcz0zRCJ1aS1p bWFnZSAnK2UuY2xzKyciIHNyYz0zRCInK2UudXJsKyciLz4nfX0pLGE9Cj0zREJhY2tib25lLlZp ZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dGl0bGU6IiIsY2xzOiIifSxpbml0aWFsaXplOmZ1 bmN0aT0Kb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQp LHRoaXMuc2V0RWxlbWVudCh0aGlzLl90PQplbXBsYXRlKHRoaXMub3B0aW9ucykpfSx0aXRsZTpm dW5jdGlvbihlKXt0aGlzLiRlbC5odG1sKGUpfSxfdGVtcGxhdGU6ZnVuY3Q9CmlvbihlKXtyZXR1 cm4nPGxhYmVsIGNsYXNzPTNEInVpLWxhYmVsICcrZS5jbHMrJyI+JytlLnRpdGxlKyI8L2xhYmVs PiJ9LHZhbD0KdWU6ZnVuY3Rpb24oKXtyZXR1cm4gb3B0aW9ucy50aXRsZX19KSxmPTNEQmFja2Jv bmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhPQp1bHQ6e2Zsb2F0aW5nOiJyaWdodCIsaWNvbjoi Iix0b29sdGlwOiIiLHBsYWNlbWVudDoiYm90dG9tIix0aXRsZToiIixjbHM6IiI9Cn0saW5pdGlh bGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVm YXVsdCksdGhpcz0KLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksJCh0 aGlzLmVsKS50b29sdGlwKHt0aXRsZTp0LnRvb2x0PQppcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0s X3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2PjxzcGFuIGNsYXNzPTNEImY9CmEgJytl Lmljb24rJyIgY2xhc3M9M0QidWktaWNvbiIvPiZuYnNwOycrZS50aXRsZSsiPC9kaXY+In19KSxs PTNEQmFja2JvbmUuVj0KaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6 IiIsZmxvYXRpbmc6InJpZ2h0IixjbHM6InVpLWJ1dHRvPQpuIGJ0biBidG4tZGVmYXVsdCIsaWNv bjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQ9Cix0 aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5v cHRpb25zKSksJCh0aGlzLj0KZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXskKCIudG9vbHRpcCIp LmhpZGUoKSx0Lm9uY2xpY2smJnQub25jbGljaygpfSksJCh0PQpoaXMuZWwpLnRvb2x0aXAoe3Rp dGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGU9 Cil7dmFyIHQ9M0QnPGJ1dHRvbiBpZD0zRCInK2UuaWQrJyIgdHlwZT0zRCJzdWJtaXQiIHN0eWxl PTNEImZsb2F0OiAnK2UuZmxvYT0KdGluZysnOyIgdHlwZT0zRCJidXR0b24iIGNsYXNzPTNEIicr ZS5jbHMrJyI+JztyZXR1cm4gZS5pY29uJiYodCs9M0QnPGkgY2xhPQpzcz0zRCJpY29uIGZhICcr ZS5pY29uKyciPjwvaT4mbmJzcDsnKSx0Kz0zRGUudGl0bGUrIjwvYnV0dG9uPiIsdH19KSxjPTNE QmE9CmNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51bGwsdGl0bGU6IiIs ZmxvYXRpbmc6InJpZ2h0IixjbHM6Ij0KdWktYnV0dG9uLWljb24iLGljb246IiIsdG9vbHRpcDoi IixvbmNsaWNrOm51bGx9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpPQpzLm9wdGlvbnM9M0Rl Lm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBs YXRlKHQ9Cmhpcy5vcHRpb25zKSksdGhpcy4kYnV0dG9uPTNEdGhpcy4kZWwuZmluZCgiLmJ1dHRv biIpO3ZhciBuPTNEdGhpczskKHRoaXMuZT0KbCkub24oImNsaWNrIixmdW5jdGlvbigpeyQoIi50 b29sdGlwIikuaGlkZSgpLHQub25jbGljayYmIW4uZGlzYWJsZWQmJnQub25jPQpsaWNrKCl9KSwk KHRoaXMuZWwpLnRvb2x0aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0s ZGlzYWJsZTo9CmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9uLmFkZENsYXNzKCJkaXNhYmxlZCIpLHRo aXMuZGlzYWJsZWQ9M0QhMH0sZW5hYmxlOmZ1bj0KY3Rpb24oKXt0aGlzLiRidXR0b24ucmVtb3Zl Q2xhc3MoImRpc2FibGVkIiksdGhpcy5kaXNhYmxlZD0zRCExfSxzZXRJY29uOmZ1PQpuY3Rpb24o ZSl7dGhpcy4kKCJpIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNzKGUp LHRoaXMub3B0aW89Cm5zLmljb249M0RlfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0Qi IjtlLnRpdGxlJiYodD0zRCJ3aWR0aDogYXV0bzsiKT0KO3ZhciBuPTNEJzxkaXYgaWQ9M0QiJytl LmlkKyciIHN0eWxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsgIit0KyciIGNsYXNzPQo9M0Qi JytlLmNscysnIj4nO3JldHVybiBlLnRpdGxlP24rPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9uIj48 aSBjbGFzcz0zRCJpY289Cm4gZmEgJytlLmljb24rJyIvPiZuYnNwOycrJzxzcGFuIGNsYXNzPTNE InRpdGxlIj4nK2UudGl0bGUrIjwvc3Bhbj4iKyI8L2Rpdj0KPiI6bis9M0QnPGkgY2xhc3M9M0Qi aWNvbiBmYSAnK2UuaWNvbisnIi8+JyxuKz0zRCI8L2Rpdj4iLG59fSksaD0zREJhY2tib25lPQou Vmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixjbHM6IiJ9LGluaXRpYWxpemU6 ZnVuY3Rpb24odCl7dGhpcy49Cm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVs dCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaT0Kcy5vcHRpb25zKSksJCh0aGlz LmVsKS5vbigiY2xpY2siLHQub25jbGljayl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4n PQo8ZGl2PjxhIGhyZWY9M0QiamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0zRCJ1aS1hbmNob3Ig JytlLmNscysnIj4nK2UudGl0bGU9CisiPC9hPjwvZGl2PiJ9fSkscD0zREJhY2tib25lLlZpZXcu ZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7bWVzc2FnZTpudWxsLHN0YT0KdHVzOiJpbmZvIixwZXJz aXN0ZW50OiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2Uo dCx0PQpoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgiPGRpdj48L2Rpdj4iKSx0 aGlzLm9wdGlvbnMubWVzc2FnZSYmdGg9CmlzLnVwZGF0ZSh0aGlzLm9wdGlvbnMpfSx1cGRhdGU6 ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMubz0KcHRpb25zRGVmYXVs dCk7aWYodC5tZXNzYWdlIT0zRCIiKXt0aGlzLiRlbC5odG1sKHRoaXMuX3RlbXBsYXRlKHRoaXMu b3B0aW9uPQpzKSksdGhpcy4kZWwuZmluZCgiLmFsZXJ0IikuYXBwZW5kKHQubWVzc2FnZSksdGhp cy4kZWwuZmFkZUluKCksdGhpcy50aW1lb3U9CnQmJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50 aW1lb3V0KTtpZighdC5wZXJzaXN0ZW50KXt2YXIgbj0zRHRoaXM7dGhpcy50aT0KbWVvdXQ9M0R3 aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uJGVsLmlzKCI6dmlzaWJsZSIpP24uJGVsLmZh ZGVPdXQoKTpuPQouJGVsLmhpZGUoKX0sM2UzKX19ZWxzZSB0aGlzLiRlbC5mYWRlT3V0KCl9LF90 ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGQ9Cml2IGNsYXNzPTNEInVpLW1lc3NhZ2UgYWxl cnQgYWxlcnQtJytlLnN0YXR1cysnIi8+J319KSxkPTNEQmFja2JvbmUuVmlldy5leD0KdGVuZCh7 b3B0aW9uc0RlZmF1bHQ6e29uY2xpY2s6bnVsbCxzZWFyY2h3b3JkOiIifSxpbml0aWFsaXplOmZ1 bmN0aW9uKHQpe3RoPQppcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQp LHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSg9CnRoaXMub3B0aW9ucykpO3ZhciBuPTNE dGhpczt0aGlzLm9wdGlvbnMub25jbGljayYmdGhpcy4kZWwub24oInN1Ym1pdCIsZnVuYz0KdGlv bihlKXt2YXIgdD0zRG4uJGVsLmZpbmQoIiNzZWFyY2giKTtuLm9wdGlvbnMub25jbGljayh0LnZh bCgpKX0pfSxfdGVtcGxhPQp0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJ1aS1z ZWFyY2giPjxmb3JtIG9uc3VibWl0PTNEInJldHVybiBmYWw9CnNlOyI+PGlucHV0IGlkPTNEInNl YXJjaCIgY2xhc3M9M0QiZm9ybS1jb250cm9sIGlucHV0LXNtIiB0eXBlPTNEInRleHQiIG5hbT0K ZT0zRCJzZWFyY2giIHBsYWNlaG9sZGVyPTNEIlNlYXJjaC4uLiIgdmFsdWU9M0QiJytlLnNlYXJj aHdvcmQrJyI+JysnPGJ1dHRvPQpuIHR5cGU9M0Qic3VibWl0IiBjbGFzcz0zRCJidG4gc2VhcmNo LWJ0biI+JysnPGkgY2xhc3M9M0QiZmEgZmEtc2VhcmNoIj48L2k9Cj4nKyI8L2J1dHRvbj4iKyI8 L2Zvcm0+IisiPC9kaXY+In19KSx2PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZh dT0KbHQ6e3R5cGU6InRleHQiLHBsYWNlaG9sZGVyOiIiLGRpc2FibGVkOiExLHZpc2libGU6ITAs Y2xzOiIiLGFyZWE6ITF9LGluaXRpPQphbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0Rl Lm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGU9Cm1lbnQodGhpcy5fdGVt cGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0zRD0zRHVuZGVmaW5lZCYm dGhpcz0KLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0 aGlzLiRlbC5wcm9wKCJkaXNhYmxlZCIsPQohMCksdGhpcy5vcHRpb25zLnZpc2libGV8fHRoaXMu JGVsLmhpZGUoKTt2YXIgbj0zRHRoaXM7dGhpcy4kZWwub24oImlucHV0Iiw9CmZ1bmN0aW9uKCl7 bi5vcHRpb25zLm9uY2hhbmdlJiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZWwudmFsKCkpfSl9LHZh bHVlOmZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0aGlzLiRlbC52YWwo ZSksdGhpcy4kZWwudmFsKCl9LF90ZW1wbGF0PQplOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFyZWE/ Jzx0ZXh0YXJlYSBpZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QidWktdGV4dGFyZWE9CiAnK2UuY2xz KyciPjwvdGV4dGFyZWE+JzonPGlucHV0IGlkPTNEIicrZS5pZCsnIiB0eXBlPTNEIicrZS50eXBl KyciIHZhbHVlPQo9M0QiJytlLnZhbHVlKyciIHBsYWNlaG9sZGVyPTNEIicrZS5wbGFjZWhvbGRl cisnIiBjbGFzcz0zRCJ1aS1pbnB1dCAnK2UuY2w9CnMrJyI+J319KSxtPTNEQmFja2JvbmUuVmll dy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPTNEZT0KLHRoaXMu c2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlzLm9wdGlvbnMudmFs dWUhPTNEPTNEdW5kPQplZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKX0sdmFs dWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW49CmRlZmluZWQmJnRoaXMuJCgiaGlkZGVu IikudmFsKGUpLHRoaXMuJCgiaGlkZGVuIikudmFsKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbj0KKGUp e3ZhciB0PTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciID4nO3JldHVybiBlLmluZm8mJih0Kz0zRCI8 bGFiZWw+IitlLmluZm8rPQoiPC9sYWJlbD4iKSx0Kz0zRCc8aGlkZGVuIHZhbHVlPTNEIicrZS52 YWx1ZSsnIi8+JysiPC9kaXY+Iix0fX0pO3JldHVybntBbmM9CmhvcjpoLEJ1dHRvbjpsLEJ1dHRv bkljb246YyxCdXR0b25NZW51OnMsSWNvbjpmLEltYWdlOnUsSW5wdXQ6dixMYWJlbDphLE1lcz0K c2FnZTpwLE1vZGFsOm8sUmFkaW9CdXR0b246ci5SYWRpb0J1dHRvbixDaGVja2JveDpyLkNoZWNr Ym94LFJhZGlvOnIuUmFkaW8sPQpTZWFyY2hib3g6ZCxTZWxlY3Q6dCxIaWRkZW46bSxTbGlkZXI6 bixEcmlsbGRvd246aX19KSxkZWZpbmUoInBsdWdpbi9saWJyYXI9Cnkvam9icyIsWyJ1dGlscy91 dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRpYWxp ej0KZTpmdW5jdGlvbih0LG4pe3RoaXMuYXBwPTNEdCx0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKG4s dGhpcy5vcHRpb25zRGVmYXVsdCl9PQoscmVxdWVzdDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBz PTNEdGhpcztlLnN0YXRlKCJ3YWl0IiwiUmVxdWVzdGluZyBqb2IgcmU9CnN1bHRzLi4uIik7dmFy IG89M0RlLmdldCgiZGF0YXNldF9pZF9qb2IiKTtvIT0zRCIiP3MuX3dhaXQoZSxyLGkpOnMuX3N1 Ym1pdD0KKGUsdCxuLHIsaSl9LGNsZWFudXA6ZnVuY3Rpb24odCl7dmFyIG49M0R0aGlzLHI9M0R0 LmdldCgiZGF0YXNldF9pZF9qb2IiKTtyPQohPTNEIiImJihlLnJlcXVlc3Qoe3R5cGU6IlBVVCIs dXJsOmNvbmZpZy5yb290KyJhcGkvaGlzdG9yaWVzL25vbmUvY29udGVudHM9Ci8iK3IsZGF0YTp7 ZGVsZXRlZDohMH0sc3VjY2VzczpmdW5jdGlvbigpe24uX3JlZnJlc2hIZGFzKCl9fSksdC5zZXQo ImRhdGFzZT0KdF9pZF9qb2IiLCIiKSl9LF9zdWJtaXQ6ZnVuY3Rpb24odCxuLHIsaSxzKXt2YXIg bz0zRHRoaXMsdT0zRHQuaWQsYT0zRHQuZ2V0PQooInR5cGUiKSxmPTNEdC5kZWZpbml0aW9uO2Rh dGE9M0R7dG9vbF9pZDoiY2hhcnRzIixpbnB1dHM6e2lucHV0OntpZDp0LmdldCg9CiJkYXRhc2V0 X2lkIiksc3JjOiJoZGEifSxtb2R1bGU6Zi5leGVjdXRlLGNvbHVtbnM6cixzZXR0aW5nczpufX0s dC5zdGF0ZSgidz0KYWl0IiwiU2VuZGluZyBqb2IgcmVxdWVzdC4uLiIpLGUucmVxdWVzdCh7dHlw ZToiUE9TVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvPQp0b29scyIsZGF0YTpkYXRhLHN1Y2Nlc3M6 ZnVuY3Rpb24oZSl7aWYoIWUub3V0cHV0c3x8ZS5vdXRwdXRzLmxlbmd0aD0zRD0zRDA9Cil0LnN0 YXRlKCJmYWlsZWQiLCJKb2Igc3VibWlzc2lvbiBmYWlsZWQuIE5vIHJlc3BvbnNlLiIpLHMmJnMo KTtlbHNle28uX3JlZj0KcmVzaEhkYXMoKTt2YXIgbj0zRGUub3V0cHV0c1swXTt0LnN0YXRlKCJ3 YWl0IiwiWW91ciBqb2IgaGFzIGJlZW4gcXVldWVkLiBZPQpvdSBtYXkgY2xvc2UgdGhlIGJyb3dz ZXIgd2luZG93LiBUaGUgam9iIHdpbGwgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLiIpLHQuc2U9CnQo ImRhdGFzZXRfaWRfam9iIixuLmlkKSxvLmFwcC5zdG9yYWdlLnNhdmUoKSxvLl93YWl0KHQsaSxz KX19LGVycm9yOmZ1bmN0aT0Kb24oZSl7dmFyIG49M0QiIjtlJiZlLm1lc3NhZ2UmJmUubWVzc2Fn ZS5kYXRhJiZlLm1lc3NhZ2UuZGF0YS5pbnB1dCYmKG49M0RlPQoubWVzc2FnZS5kYXRhLmlucHV0 KyIuIiksdC5zdGF0ZSgiZmFpbGVkIiwiVGhpcyB2aXN1YWxpemF0aW9uIHJlcXVpcmVzIHRoZSA9 CidjaGFydHMnIHRvb2wuIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgaW5zdGFsbGVkLiAiK24pLHMm JnMoKX19KX0sX3dhaXQ6ZnVuYz0KdGlvbih0LG4scil7dmFyIGk9M0R0aGlzO2UucmVxdWVzdCh7 dHlwZToiR0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0PQpzLyIrdC5nZXQoImRhdGFz ZXRfaWRfam9iIiksZGF0YTp7fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe3ZhciBzPTNEITE7c3dpdGNo KGU9Ci5zdGF0ZSl7Y2FzZSJvayI6dC5zdGF0ZSgid2FpdCIsIkpvYiBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5Li4uIiksbiYmbihlKSxzPQo9M0QhMDticmVhaztjYXNlImVycm9yIjp0LnN0YXRlKCJm YWlsZWQiLCJKb2IgaGFzIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZSA9Cmhpc3RvcnkgZm9yIGRl dGFpbHMuIiksciYmcihlKSxzPTNEITA7YnJlYWs7Y2FzZSJydW5uaW5nIjp0LnN0YXRlKCJ3YWl0 IiwiWT0Kb3VyIGpvYiBpcyBydW5uaW5nLiBZb3UgbWF5IGNsb3NlIHRoZSBicm93c2VyIHdpbmRv dy4gVGhlIGpvYiB3aWxsIGNvbnRpbnVlPQogaW4gdGhlIGJhY2tncm91bmQuIil9c3x8c2V0VGlt ZW91dChmdW5jdGlvbigpe2kuX3dhaXQodCxuLHIpfSxpLmFwcC5jb25maWc9Ci5nZXQoInF1ZXJ5 X3RpbWVvdXQiKSl9fSl9LF9yZWZyZXNoSGRhczpmdW5jdGlvbigpe0dhbGF4eSYmR2FsYXh5LmN1 cnJIaXN0bz0KcnlQYW5lbCYmR2FsYXh5LmN1cnJIaXN0b3J5UGFuZWwucmVmcmVzaENvbnRlbnRz KCl9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyPQphcnkvZGF0YXNldHMiLFsidXRpbHMvdXRpbHMi XSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQ9Cih7bGlzdDp7 fSxjYWNoZTp7fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsbil7dGhpcy5hcHA9M0R0LHRoaXMub3B0 aW9ucz0zRGUubT0KZXJnZShuLHRoaXMub3B0aW9uc0RlZmF1bHQpfSxyZXF1ZXN0OmZ1bmN0aW9u KGUpe2UuZ3JvdXBzP3RoaXMuX2dldF9ibG9ja3MoPQplKTp0aGlzLl9nZXRfZGF0YXNldChlLmlk LGUuc3VjY2VzcyxlLmVycm9yKX0sX2dldF9ibG9ja3M6ZnVuY3Rpb24oZSl7ZnVuY3Q9CmlvbiBj KGkpe2wuX2dldChpLGZ1bmN0aW9uKCl7dmFyIHM9M0QhMTtmb3IodmFyIG8gaW4gZS5ncm91cHMp e2Rlc3RpbmF0aW9uXz0KZ3JvdXA9M0RlLmdyb3Vwc1tvXSxzb3VyY2VfZ3JvdXA9M0RpLmdyb3Vw c1tvXSxkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXN8fChkPQplc3RpbmF0aW9uX2dyb3VwLnZhbHVl cz0zRFtdKSxkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXM9M0RkZXN0aW5hdGlvbl9ncm91cC49CnZh bHVlcy5jb25jYXQoc291cmNlX2dyb3VwLnZhbHVlcyk7aWYoc291cmNlX2dyb3VwLnZhbHVlcy5s ZW5ndGg9M0Q9M0QwKXtzPQo9M0QhMDticmVha319aWYoKytmPHUmJiFzKXtuJiZuKHBhcnNlSW50 KGYvdSoxMDApKTt2YXIgbD0zRGkuc3RhcnQrcjtpPTNEJC49CmV4dGVuZCghMCxhLHtzdGFydDps fSksYyhpKX1lbHNlIHQoKX0pfXZhciB0PTNEZS5zdWNjZXNzLG49M0RlLnByb2dyZXNzLHI9Cj0z RHRoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0IiksaT0zRGUuc3RhcnR8fDAscz0zRGkr ZS5xdWVyeV9saW1pdHx8aT0KK3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0Iiksbz0z RE1hdGguYWJzKHMtaSk7aWYobzw9M0QwKXtjb25zb2xlLmRlPQpidWcoIkZBSUxFRCAtIERhdGFz ZXRzOjpyZXF1ZXN0KCkgLSBJbnZhbGlkIHF1ZXJ5IHJhbmdlLiIpO3JldHVybn12YXIgdT0zRE09 CmF0aC5jZWlsKG8vcil8fDEsYT0zRCQuZXh0ZW5kKCEwLHt9LGUpLGY9M0QwLGw9M0R0aGlzLGg9 M0QkLmV4dGVuZCghMCxhLHtzdD0KYXJ0Oml9KTt0aGlzLl9nZXRfZGF0YXNldChlLmlkLGZ1bmN0 aW9uKCl7YyhoKX0pfSxfZ2V0X2RhdGFzZXQ6ZnVuY3Rpb24odCxuPQoscil7dmFyIGk9M0R0aGlz Lmxpc3RbdF07aWYoaSl7bihpKTtyZXR1cm59dmFyIHM9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToi R0U9ClQiLHVybDpjb25maWcucm9vdCsiYXBpL2RhdGFzZXRzLyIrdCxzdWNjZXNzOmZ1bmN0aW9u KGUpe3N3aXRjaChlLnN0YXRlKXtjYT0Kc2UiZXJyb3IiOnImJnIoZSk7YnJlYWs7ZGVmYXVsdDpz Lmxpc3RbdF09M0RlLG4oZSl9fX0pfSxfYmxvY2tfaWQ6ZnVuY3Rpb24oPQplLHQpe3JldHVybiBl LmlkKyJfIitlLnN0YXJ0KyJfIitlLnN0YXJ0K3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xp bWl0Iik9CisiXyIrdH0sX2dldDpmdW5jdGlvbihlLHQpe2Uuc3RhcnQ9M0RlLnN0YXJ0fHwwO3Zh ciBuPTNEW10scj0zRHt9LGk9M0QwO2Zvcj0KKHZhciBzIGluIGUuZ3JvdXBzKXt2YXIgbz0zRGUu Z3JvdXBzW3NdO2Zvcih2YXIgdSBpbiBvLmNvbHVtbnMpe3ZhciBhPTNEby5jPQpvbHVtbnNbdV0u aW5kZXgsZj0zRHRoaXMuX2Jsb2NrX2lkKGUsYSk7aWYodGhpcy5jYWNoZVtmXXx8YT0zRD0zRD0z RCJhdXRvInw9CnxhPTNEPTNEPTNEInplcm8iKWNvbnRpbnVlOyFyW2FdJiZhIT0zRD0zRHVuZGVm aW5lZCYmKHJbYV09M0RpLG4ucHVzaChhKSxpKz0KKyl9fWlmKG4ubGVuZ3RoPTNEPTNEMCl7dGhp cy5fZmlsbF9mcm9tX2NhY2hlKGUpLHQoZSk7cmV0dXJufXZhciBsPTNEe2RhdGFzPQpldF9pZDpl LmlkLHN0YXJ0OmUuc3RhcnQsY29sdW1uczpufSxjPTNEdGhpczt0aGlzLl9mZXRjaChsLGZ1bmN0 aW9uKHIpe2Zvcig9CnZhciBpIGluIHIpe3ZhciBzPTNEbltpXSxvPTNEYy5fYmxvY2tfaWQoZSxz KTtjLmNhY2hlW29dPTNEcltpXX1jLl9maWxsX2Zybz0KbV9jYWNoZShlKSx0KGUpfSl9LF9maWxs X2Zyb21fY2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnN0YXJ0O2NvbnNvbGUuZGViPQp1Zygi RGF0YXNldHM6Ol9maWxsX2Zyb21fY2FjaGUoKSAtIEZpbGxpbmcgcmVxdWVzdCBmcm9tIGNhY2hl IGF0ICIrdCsiLiIpO3Y9CmFyIG49M0QwO2Zvcih2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0Rl Lmdyb3Vwc1tyXTtmb3IodmFyIHMgaW4gaS5jb2x1bW5zKT0Ke3ZhciBvPTNEaS5jb2x1bW5zW3Nd LHU9M0R0aGlzLl9ibG9ja19pZChlLG8uaW5kZXgpLGE9M0R0aGlzLmNhY2hlW3VdO2EmJihuPQo9 M0RNYXRoLm1heChuLGEubGVuZ3RoKSl9fW49M0Q9M0QwJiZjb25zb2xlLmRlYnVnKCJEYXRhc2V0 czo6X2ZpbGxfZnJvbV9jYWM9CmhlKCkgLSBSZWFjaGVkIGRhdGEgcmFuZ2UgbGltaXQuIik7Zm9y KHZhciByIGluIGUuZ3JvdXBzKXt2YXIgaT0zRGUuZ3JvdXBzWz0Kcl07aS52YWx1ZXM9M0RbXTtm b3IodmFyIGY9M0QwO2Y8bjtmKyspaS52YWx1ZXNbZl09M0R7eDpwYXJzZUludChmKSt0fX1mb3Io PQp2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmb3IodmFyIHMgaW4gaS5j b2x1bW5zKXt2YXIgbz0zRGkuY289Cmx1bW5zW3NdO3N3aXRjaChvLmluZGV4KXtjYXNlImF1dG8i OmZvcih2YXIgZj0zRDA7ZjxuO2YrKyl7dmFyIGw9M0RpLnZhbHVlcz0KW2ZdO2xbc109M0RwYXJz ZUludChmKSt0fWJyZWFrO2Nhc2UiemVybyI6Zm9yKHZhciBmPTNEMDtmPG47ZisrKXt2YXIgbD0z RGkuPQp2YWx1ZXNbZl07bFtzXT0zRDB9YnJlYWs7ZGVmYXVsdDp2YXIgdT0zRHRoaXMuX2Jsb2Nr X2lkKGUsby5pbmRleCksYT0zRHRoaXM9Ci5jYWNoZVt1XTtmb3IodmFyIGY9M0QwO2Y8bjtmKysp e3ZhciBsPTNEaS52YWx1ZXNbZl0sYz0zRGFbZl07aXNOYU4oYykmJiFvLj0KaXNfbGFiZWwmJihj PTNEMCksbFtzXT0zRGN9fX19fSxfZmV0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj0zRHQuc3RhcnQ/ dC5zdGFyPQp0OjAsaT0zRHRoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0Iikscz0zRDA7 dC5jb2x1bW5zJiYocz0zRHQuY29sdW1ucy49Cmxlbmd0aCxjb25zb2xlLmRlYnVnKCJEYXRhc2V0 czo6X2ZldGNoKCkgLSBGZXRjaGluZyAiK3MrIiBjb2x1bW4ocykgYXQgIityKz0KIi4iKSkscz0z RD0zRDAmJmNvbnNvbGUuZGVidWcoIkRhdGFzZXRzOjpfZmV0Y2goKSAtIE5vIGNvbHVtbnMgcmVx dWVzdGVkIik7PQp2YXIgbz0zRCIiO2Zvcih2YXIgdSBpbiB0LmNvbHVtbnMpbys9M0R0LmNvbHVt bnNbdV0rIiwiO289M0RvLnN1YnN0cmluZygwLG89Ci5sZW5ndGgtMSk7dmFyIGE9M0R0aGlzO2Uu cmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Y29uZmlnLnJvb3QrImFwaS9kYXRhc2V0cz0KLyIrdC5k YXRhc2V0X2lkLGRhdGE6e2RhdGFfdHlwZToicmF3X2RhdGEiLHByb3ZpZGVyOiJkYXRhc2V0LWNv bHVtbiIsbGltaXQ6PQppLG9mZnNldDpyLGluZGVjZXM6b30sc3VjY2VzczpmdW5jdGlvbihlKXt2 YXIgdD0zRG5ldyBBcnJheShzKTtmb3IodmFyIHI9M0Q9CjA7cjxzO3IrKyl0W3JdPTNEW107Zm9y KHZhciByIGluIGUuZGF0YSl7dmFyIGk9M0RlLmRhdGFbcl07Zm9yKHZhciBvIGluIGkpez0KdmFy IHU9M0RpW29dO3UhPTNEPTNEdW5kZWZpbmVkJiZ1IT0zRDIxNDc0ODM2NDcmJnRbb10ucHVzaCh1 KX19Y29uc29sZS5kZWJ1PQpnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBGZXRjaGluZyBjb21wbGV0 ZS4iKSxuKHQpfX0pfX0pfSksZGVmaW5lKCJwbHVnaW4vbW89CmRlbHMvZ3JvdXAiLFtdLGZ1bmN0 aW9uKCl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7ZGVmYXVsdHM6e2tleToiRGF0YT0K IGxhYmVsIixkYXRlOiIifSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY2xlYXIoe3NpbGVudDohMH0p LnNldCh0aGlzLmRlZmF1bHRzPQopLHRoaXMudHJpZ2dlcigicmVzZXQiLHRoaXMpfX0pfSksZGVm aW5lKCJwbHVnaW4vbW9kZWxzL2dyb3VwcyIsWyJwbHVnaW4vbW89CmRlbHMvZ3JvdXAiXSxmdW5j dGlvbihlKXtyZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoe21vZGVsOmV9KX0pLGRl Zj0KaW5lKCJwbHVnaW4vbW9kZWxzL2NoYXJ0IixbInBsdWdpbi9tb2RlbHMvZ3JvdXBzIl0sZnVu Y3Rpb24oZSl7cmV0dXJuIEJhY2tiPQpvbmUuTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7aWQ6bnVs bCx0aXRsZToiIix0eXBlOiIiLGRhdGU6bnVsbCxzdGF0ZToiIixzdGE9CnRlX2luZm86IiIsbW9k aWZpZWQ6ITEsZGF0YXNldF9pZDoiIixkYXRhc2V0X2lkX2pvYjoiIn0saW5pdGlhbGl6ZTpmdW5j dGlvbj0KKHQpe3RoaXMuZ3JvdXBzPTNEbmV3IGUsdGhpcy5zZXR0aW5ncz0zRG5ldyBCYWNrYm9u ZS5Nb2RlbH0scmVzZXQ6ZnVuY3Rpb24oPQope3RoaXMuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0 aGlzLmRlZmF1bHRzKSx0aGlzLmdyb3Vwcy5yZXNldCgpLHRoaXMuc2V0dGk9Cm5ncy5jbGVhcigp LHRoaXMudHJpZ2dlcigicmVzZXQiLHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhp czt0LmNsZT0KYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0LnNldChlLmF0dHJp YnV0ZXMpLHQuc2V0dGluZ3M9M0RlLnNldHRpPQpuZ3MuY2xvbmUoKSx0Lmdyb3Vwcy5yZXNldCgp LGUuZ3JvdXBzLmVhY2goZnVuY3Rpb24oZSl7dC5ncm91cHMuYWRkKGUuY2xvbmU9CigpKX0pLHQu dHJpZ2dlcigiY2hhbmdlIix0KX0sc3RhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldCgic3RhdGUi LGUpLHRoaXMucz0KZXQoInN0YXRlX2luZm8iLHQpLHRoaXMudHJpZ2dlcigic2V0OnN0YXRlIiks Y29uc29sZS5kZWJ1ZygiQ2hhcnQ6c3RhdGUoKSAtPQogIit0KyIgKCIrZSsiKSIpfX0pfSk7dmFy IFZpc3VhbGl6YXRpb249M0RCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOns9CmNvbmZp Zzp7fX0sdXJsUm9vdDpmdW5jdGlvbigpe3ZhciBlPTNEIi9hcGkvdmlzdWFsaXphdGlvbnMiO3Jl dHVybiB3aW5kb3cuZz0KYWxheHlfY29uZmlnJiZnYWxheHlfY29uZmlnLnJvb3Q/Z2FsYXh5X2Nv bmZpZy5yb290K2U6ZX0saW5pdGlhbGl6ZTpmdW5jdGlvPQpuKGUpe18uaXNPYmplY3QoZS5jb25m aWcpJiZfLmlzT2JqZWN0KHRoaXMuZGVmYXVsdHMuY29uZmlnKSYmXy5kZWZhdWx0cyhlLmM9Cm9u ZmlnLHRoaXMuZGVmYXVsdHMuY29uZmlnKSx0aGlzLl9zZXRVcExpc3RlbmVycygpfSxfc2V0VXBM aXN0ZW5lcnM6ZnVuY3Rpbz0Kbigpe30sc2V0OmZ1bmN0aW9uKGUsdCl7aWYoZT0zRD0zRD0zRCJj b25maWciKXt2YXIgbj0zRHRoaXMuZ2V0KCJjb25maWciKTtfPQouaXNPYmplY3QobikmJih0PTNE Xy5leHRlbmQoXy5jbG9uZShuKSx0KSl9cmV0dXJuIEJhY2tib25lLk1vZGVsLnByb3RvdHlwZS49 CnNldC5jYWxsKHRoaXMsZSx0KSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPTNEdGhp cy5nZXQoImlkIil8fCIiO3JldD0KdXJuIHRoaXMuZ2V0KCJ0aXRsZSIpJiYoZSs9M0QiOiIrdGhp cy5nZXQoInRpdGxlIikpLCJWaXN1YWxpemF0aW9uKCIrZSsiKSJ9PQp9KSxWaXN1YWxpemF0aW9u Q29sbGVjdGlvbj0zREJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHttb2RlbDpWaXN1YWxpemF0 aW89Cm4sdXJsOmZ1bmN0aW9uKCl7cmV0dXJuIGdhbGF4eV9jb25maWcucm9vdCsiYXBpL3Zpc3Vh bGl6YXRpb25zIn0saW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGUsdCl7dD0zRHR8fHt9fSxzZXQ6ZnVu Y3Rpb24oZSx0KXt2YXIgbj0zRHRoaXM7ZT0zRF8ubWFwKGUsZnVuY3RpPQpvbihlKXt2YXIgdD0z RG4uZ2V0KGUuaWQpO2lmKCF0KXJldHVybiBlO3ZhciByPTNEdC50b0pTT04oKTtyZXR1cm4gXy5l eHRlbmQ9CihyLGUpLHJ9KSxCYWNrYm9uZS5Db2xsZWN0aW9uLnByb3RvdHlwZS5zZXQuY2FsbCh0 aGlzLGUsdCl9LHRvU3RyaW5nOmZ1bmN0aT0Kb24oKXtyZXR1cm5bIlZpc3VhbGl6YXRpb25Db2xs ZWN0aW9uKCIsW3RoaXMuaGlzdG9yeUlkLHRoaXMubGVuZ3RoXS5qb2luKCksPQoiKSJdLmpvaW4o IiIpfX0pO2RlZmluZSgibXZjL3Zpc3VhbGl6YXRpb24vdmlzdWFsaXphdGlvbi1tb2RlbCIsZnVu Y3Rpb24oKXs9Cn0pLGRlZmluZSgicGx1Z2luL2xpYnJhcnkvc3RvcmFnZSIsWyJ1dGlscy91dGls cyIsInBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbD0KdWdpbi9tb2RlbHMvZ3JvdXAiLCJtdmMvdmlz dWFsaXphdGlvbi92aXN1YWxpemF0aW9uLW1vZGVsIl0sZnVuY3Rpb24oZSx0LG4pPQp7cmV0dXJu IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7dmlzOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0 aGlzLmFwcD0zRGU9Cix0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy5vcHRpb25zPTNE dGhpcy5hcHAub3B0aW9ucyx0aGlzLmlkPTNEdGhpcz0KLm9wdGlvbnMuaWQsdGhpcy52aXM9M0Ru ZXcgVmlzdWFsaXphdGlvbih7dHlwZToiY2hhcnRzIixjb25maWc6e2RhdGFzZXRfaWQ6PQp0aGlz Lm9wdGlvbnMuY29uZmlnLmRhdGFzZXRfaWQsY2hhcnRfZGljdDp7fX19KSx0aGlzLmlkJiYodGhp cy52aXMuaWQ9M0R0aGk9CnMuaWQpO3ZhciB0PTNEdGhpcy5vcHRpb25zLmNvbmZpZy5jaGFydF9k aWN0O3QmJih0aGlzLnZpcy5nZXQoImNvbmZpZyIpLmNoYT0KcnRfZGljdD0zRHQpfSxzYXZlOmZ1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmFwcC5jaGFydDt0aGlzLnZpcy5nZXQoImNvbmZpZyIpPQou Y2hhcnRfZGljdD0zRHt9O3ZhciB0PTNEZS5nZXQoInRpdGxlIik7dCE9M0QiIiYmdGhpcy52aXMu c2V0KCJ0aXRsZSIsdCk7dmE9CnIgbj0zRHthdHRyaWJ1dGVzOmUuYXR0cmlidXRlcyxzZXR0aW5n czplLnNldHRpbmdzLmF0dHJpYnV0ZXMsZ3JvdXBzOltdfTtlLj0KZ3JvdXBzLmVhY2goZnVuY3Rp b24oZSl7bi5ncm91cHMucHVzaChlLmF0dHJpYnV0ZXMpfSksdGhpcy52aXMuZ2V0KCJjb25maWci PQopLmNoYXJ0X2RpY3Q9M0RuO3ZhciByPTNEdGhpczt0aGlzLnZpcy5zYXZlKCkuZmFpbChmdW5j dGlvbihlLHQsbil7Y29uc29sZS49CmVycm9yKGUsdCxuKX0pLnRoZW4oZnVuY3Rpb24oZSl7ZSYm ZS5pZCYmKHIuaWQ9M0RlLmlkKX0pfSxsb2FkOmZ1bmN0aW9uKCl7dj0KYXIgZT0zRHRoaXMudmlz LmdldCgiY29uZmlnIikuY2hhcnRfZGljdDtpZighZS5hdHRyaWJ1dGVzKXJldHVybiExO3ZhciB0 PTNEPQplLmF0dHJpYnV0ZXMudHlwZTtpZighdClyZXR1cm4gY29uc29sZS5kZWJ1ZygiU3RvcmFn ZTo6bG9hZCgpIC0gQ2hhcnQgdHlwZSA9Cm5vdCBwcm92aWRlZC4gSW52YWxpZCBmb3JtYXQuIiks ITE7dmFyIHI9M0R0aGlzLmFwcC50eXBlcy5nZXQodCk7aWYoIXIpcmV0dT0Kcm4gY29uc29sZS5k ZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gQ2hhcnQgdHlwZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2Ug cmUtY29uPQpmaWd1cmUgdGhlIGNoYXJ0LiBSZXNldHRpbmcgY2hhcnQuIiksITE7Y29uc29sZS5k ZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gTG89CmFkaW5nIGNoYXJ0IHR5cGUgIit0KyIuIiksdGhp cy5jaGFydC5kZWZpbml0aW9uPTNEcix0aGlzLmNoYXJ0LnNldChlLmF0dHJpYj0KdXRlcyksdGhp cy5jaGFydC5zdGF0ZSgib2siLCJMb2FkaW5nIHNhdmVkIHZpc3VhbGl6YXRpb24uLi4iKSx0aGlz LmNoYXJ0LnNlPQp0dGluZ3Muc2V0KGUuc2V0dGluZ3MpO2Zvcih2YXIgaSBpbiBlLmdyb3Vwcyl0 aGlzLmNoYXJ0Lmdyb3Vwcy5hZGQobmV3IG4oZS49Cmdyb3Vwc1tpXSkpO3JldHVybiB0aGlzLmNo YXJ0LnNldCgibW9kaWZpZWQiLCExKSwhMH19KX0pLGRlZmluZSgidXRpbHMvZGVmZT0KcnJlZCIs WyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQo e3F1ZXVlOltdLHByPQpvY2Vzczp7fSxjb3VudGVyOjAsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3Ro aXMub24oInJlZnJlc2giLGZ1bmN0aW9uKCl7aWYodGg9CmlzLnF1ZXVlLmxlbmd0aD4wJiZ0aGlz LnJlYWR5KCkpe3ZhciBlPTNEdGhpcy5xdWV1ZVswXTt0aGlzLnF1ZXVlLnNwbGljZSgwLD0KMSks ZSYmZSgpfX0pfSxleGVjdXRlOmZ1bmN0aW9uKGUpe3RoaXMucXVldWUucHVzaChlKSx0aGlzLnRy aWdnZXIoInJlZnJlc2giPQopfSxyZWdpc3RlcjpmdW5jdGlvbigpe3ZhciB0PTNEZS51dWlkKCk7 cmV0dXJuIHRoaXMucHJvY2Vzc1t0XT0zRCEwLHRoaXMuY289CnVudGVyKyssY29uc29sZS5kZWJ1 ZygiRGVmZXJyZWQ6cmVnaXN0ZXIoKSAtIFJlZ2lzdGVyaW5nICIrdCksdH0sZG9uZTpmdW5jdD0K aW9uKGUpe3RoaXMucHJvY2Vzc1tlXSYmKGRlbGV0ZSB0aGlzLnByb2Nlc3NbZV0sdGhpcy5jb3Vu dGVyLS0sY29uc29sZS5kZWJ1PQpnKCJEZWZlcnJlZDpkb25lKCkgLSBVbnJlZ2lzdGVyaW5nICIr ZSksdGhpcy50cmlnZ2VyKCJyZWZyZXNoIikpfSxyZXNldDpmdW49CmN0aW9uKCl7dGhpcy5xdWV1 ZT0zRFtdfSxyZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvdW50ZXI9M0Q9M0QwfX0pfSks ZD0KZWZpbmUoInBsdWdpbi92aWV3cy92aWV3cG9ydCIsWyJtdmMvdWkvdWktcG9ydGxldCIsIm12 Yy91aS91aS1taXNjIiwidXRpbHMvPQp1dGlscyJdLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQmFj a2JvbmUuVmlldy5leHRlbmQoe2NvbnRhaW5lcl9saXN0OltdLGNhbnY9CmFzX2xpc3Q6W10saW5p dGlhbGl6ZTpmdW5jdGlvbihlLHQpe3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAu Y2hhcj0KdCx0aGlzLm9wdGlvbnM9M0RuLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhp cy5zZXRFbGVtZW50KCQodGhpcy5fdGVtPQpwbGF0ZSgpKSksdGhpcy5fZnVsbHNjcmVlbih0aGlz LiRlbCwxMDApO3ZhciByPTNEJCgiYm9keSIpLmNzcygib3ZlcmZsb3ciKTs9CnRoaXMuJGVsLm9u KCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7JCgiYm9keSIpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4i KX0pLm9uKD0KIm1vdXNlb3V0IixmdW5jdGlvbigpeyQoImJvZHkiKS5jc3MoIm92ZXJmbG93Iixy KX0pLHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigiPQpkaXYiKTt2YXIgaT0zRHRoaXM7dGhpcy5jaGFy dC5vbigicmVkcmF3IixmdW5jdGlvbigpe2kuX2RyYXcoaS5jaGFydCl9KSx0aGk9CnMuY2hhcnQu b24oInNldDpzdGF0ZSIsZnVuY3Rpb24oKXt2YXIgZT0zRGkuJGVsLmZpbmQoIiNpbmZvIiksdD0z RGkuJGVsLmZpbj0KZCgiLmNoYXJ0cy12aWV3cG9ydC1jb250YWluZXIiKSxuPTNEZS5maW5kKCIj aWNvbiIpO24ucmVtb3ZlQ2xhc3MoKSxlLnNob3coPQopLGUuZmluZCgiI3RleHQiKS5odG1sKGku Y2hhcnQuZ2V0KCJzdGF0ZV9pbmZvIikpO3ZhciByPTNEaS5jaGFydC5nZXQoInN0YXQ9CmUiKTtz d2l0Y2gocil7Y2FzZSJvayI6ZS5oaWRlKCksdC5zaG93KCk7YnJlYWs7Y2FzZSJmYWlsZWQiOm4u YWRkQ2xhc3MoImljbz0KbiBmYSBmYS13YXJuaW5nIiksdC5oaWRlKCk7YnJlYWs7ZGVmYXVsdDpu LmFkZENsYXNzKCJpY29uIGZhIGZhLXNwaW5uZXIgZmEtPQpzcGluIiksdC5zaG93KCl9fSl9LHNo b3c6ZnVuY3Rpb24oKXt0aGlzLiRlbC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiQ9CmVs LmhpZGUoKX0sX2Z1bGxzY3JlZW46ZnVuY3Rpb24oZSx0KXtlLmNzcygiaGVpZ2h0IiwkKHdpbmRv dykuaGVpZ2h0KCktdCksJD0KKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7ZS5jc3MoImhlaWdo dCIsJCh3aW5kb3cpLmhlaWdodCgpLXQpfSl9LF9jcmVhdGVDPQpvbnRhaW5lcjpmdW5jdGlvbihl LHQpe3Q9M0R0fHwxO2Zvcih2YXIgbiBpbiB0aGlzLmNvbnRhaW5lcl9saXN0KXRoaXMuY29udGE9 CmluZXJfbGlzdFtuXS5yZW1vdmUoKTt0aGlzLmNvbnRhaW5lcl9saXN0PTNEW10sdGhpcy5jYW52 YXNfbGlzdD0zRFtdO2Zvcih2YT0KciBuPTNEMDtuPHQ7bisrKXt2YXIgcj0zRCQodGhpcy5fdGVt cGxhdGVDb250YWluZXIoZSxwYXJzZUludCgxMDAvdCkpKTt0aGlzPQouJGVsLmFwcGVuZChyKSx0 aGlzLmNvbnRhaW5lcl9saXN0W25dPTNEcix0aGlzLmNhbnZhc19saXN0W25dPTNEci5maW5kKCIu Y2g9CmFydHMtdmlld3BvcnQtY2FudmFzIikuYXR0cigiaWQiKX19LF9kcmF3OmZ1bmN0aW9uKGUp e3ZhciB0PTNEdGhpcyxuPTNEdGhpcz0KLmFwcC5kZWZlcnJlZC5yZWdpc3RlcigpLHI9M0RlLmdl dCgidHlwZSIpO3RoaXMuY2hhcnRfZGVmaW5pdGlvbj0zRGUuZGVmaW5pPQp0aW9uO3ZhciBpPTNE MTtlLnNldHRpbmdzLmdldCgidXNlX3BhbmVscyIpPTNEPTNEPTNEInRydWUiJiYoaT0zRGUuZ3Jv dXBzLmw9CmVuZ3RoKSx0aGlzLl9jcmVhdGVDb250YWluZXIodGhpcy5jaGFydF9kZWZpbml0aW9u LnRhZyxpKSxlLnN0YXRlKCJ3YWl0IiwiUD0KbGVhc2Ugd2FpdC4uLiIpO2lmKCF0aGlzLmNoYXJ0 X2RlZmluaXRpb24uZXhlY3V0ZXx8dGhpcy5jaGFydF9kZWZpbml0aW9uLmV4PQplY3V0ZSYmZS5n ZXQoIm1vZGlmaWVkIikpdGhpcy5hcHAuam9icy5jbGVhbnVwKGUpLGUuc2V0KCJtb2RpZmllZCIs ITEpO3ZhciA9CnQ9M0R0aGlzO3JlcXVpcmUoWyJwbHVnaW4vY2hhcnRzLyIrdGhpcy5hcHAuY2hh cnRQYXRoKHIpKyIvd3JhcHBlciJdLGZ1bmN0aT0Kb24ocil7aWYodC5jaGFydF9kZWZpbml0aW9u LmV4ZWN1dGUpdC5hcHAuam9icy5yZXF1ZXN0KGUsdC5fZGVmYXVsdFNldHRpbmdzPQpTdHJpbmco ZSksdC5fZGVmYXVsdFJlcXVlc3RTdHJpbmcoZSksZnVuY3Rpb24oKXt2YXIgaT0zRG5ldyByKHQu YXBwLHtwcm9jZXM9CnNfaWQ6bixjaGFydDplLHJlcXVlc3RfZGljdGlvbmFyeTp0Ll9kZWZhdWx0 UmVxdWVzdERpY3Rpb25hcnkoZSksY2FudmFzX2xpcz0KdDp0LmNhbnZhc19saXN0fSl9LGZ1bmN0 aW9uKCl7dGhpcy5hcHAuZGVmZXJyZWQuZG9uZShuKX0pO2Vsc2UgdmFyIGk9M0RuZXcgPQpyKHQu YXBwLHtwcm9jZXNzX2lkOm4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpb25hcnk6dC5fZGVmYXVsdFJl cXVlc3REaWN0aW9uYXI9CnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlzdH0pfSl9LF9kZWZh dWx0UmVxdWVzdFN0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0KPTNEIiIsbj0zRDAscj0zRHRoaXM7 cmV0dXJuIGUuZ3JvdXBzLmVhY2goZnVuY3Rpb24oZSl7bisrO2Zvcih2YXIgaSBpbiByLmNoPQph cnRfZGVmaW5pdGlvbi5jb2x1bW5zKXQrPTNEaSsiXyIrbisiOiIrKHBhcnNlSW50KGUuZ2V0KGkp KSsxKSsiLCAifSksdC5zdWI9CnN0cmluZygwLHQubGVuZ3RoLTIpfSxfZGVmYXVsdFNldHRpbmdz U3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PTNEIiI7Zm9yKGtleT0KIGluIGUuc2V0dGluZ3MuYXR0 cmlidXRlcyl0Kz0zRGtleSsiOiIrZS5zZXR0aW5ncy5nZXQoa2V5KSsiLCAiO3JldHVybiB0LnN1 PQpic3RyaW5nKDAsdC5sZW5ndGgtMil9LF9kZWZhdWx0UmVxdWVzdERpY3Rpb25hcnk6ZnVuY3Rp b24oZSl7dmFyIHQ9M0R7Z3JvdXA9CnM6W119O3RoaXMuY2hhcnRfZGVmaW5pdGlvbi5leGVjdXRl P3QuaWQ9M0RlLmdldCgiZGF0YXNldF9pZF9qb2IiKTp0LmlkPTNEZT0KLmdldCgiZGF0YXNldF9p ZCIpO3ZhciByPTNEMCxpPTNEdGhpcztyZXR1cm4gZS5ncm91cHMuZWFjaChmdW5jdGlvbihlKXt2 YXIgPQpzPTNEe307Zm9yKHZhciBvIGluIGkuY2hhcnRfZGVmaW5pdGlvbi5jb2x1bW5zKXt2YXIg dT0zRGkuY2hhcnRfZGVmaW5pdGlvbi49CmNvbHVtbnNbb107c1tvXT0zRG4ubWVyZ2Uoe2luZGV4 OmUuZ2V0KG8pfSx1KX10Lmdyb3Vwcy5wdXNoKHtrZXk6KytyKyI6IitlLj0KZ2V0KCJrZXkiKSxj b2x1bW5zOnN9KX0pLHR9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybic8ZGl2IGNsYXNzPTNE ImNoYXJ0PQpzLXZpZXdwb3J0Ij48ZGl2IGlkPTNEImluZm8iIGNsYXNzPTNEImluZm8iPjxzcGFu IGlkPTNEImljb24iIGNsYXNzPTNEImljb249CiIvPjxzcGFuIGlkPTNEInRleHQiIGNsYXNzPTNE InRleHQiIC8+PC9kaXY+PC9kaXY+J30sX3RlbXBsYXRlQ29udGFpbmVyOmZ1bj0KY3Rpb24oZSx0 KXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJjaGFydHMtdmlld3BvcnQtY29udGFpbmVyIiBzdHlsZT0z RCJ3aWR0aDonPQordCsnJTsiPicrJzxkaXYgaWQ9M0QibWVudSIvPicrIjwiK2UrJyBpZD0zRCIn K24udXVpZCgpKyciIGNsYXNzPTNEImNoYXJ0cy09CnZpZXdwb3J0LWNhbnZhcyI+JysiPC9kaXY+ In19KX0pLGRlZmluZSgicGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCIsWyJsaWJzLz0KdW5kZXJz Y29yZSJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7ZS4kZWwuZmluZCgic3ZnIikubGVuZ3Ro PjA/cihlKTpuKGUpPQp9ZnVuY3Rpb24gbihlKXt0cnl7dmFyIHQ9M0RlLiRlbC5maW5kKCIuanFw bG90LXRhcmdldCIpLG49M0R0LmpxcGxvdFRvSW1hZ2U9ClN0cih7fSk7biYmKHdpbmRvdy5sb2Nh dGlvbi5ocmVmPTNEbi5yZXBsYWNlKCJpbWFnZS9wbmciLCJpbWFnZS9vY3RldC1zdHJlYT0KbSIp KX1jYXRjaChyKXtjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBTY3JlZW5zaG90OjpfZnJvbUNhbnZh cygpIC0gIityKSxlLmVyPQpyb3ImJmUuZXJyb3IoIlBsZWFzZSByZWR1Y2UgeW91ciBjaGFydCB0 byBhIHNpbmdsZSBwYW5lbCBhbmQgdHJ5IGFnYWluLiIpfX09CmZ1bmN0aW9uIHIoZSl7dmFyIHQ9 M0RlLiRlbCxuPTNEZS51cmwscj0zRGUubmFtZSxzPTNEbmV3IFhNTFNlcmlhbGl6ZXIsbz0zRD0K ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT0zRCQobyksYT0zRHQuZmluZCgic3Zn IikubGVuZ3RoLGY9M0R0LmZpPQpuZCgic3ZnIikuZmlyc3QoKSxsPTNEcGFyc2VJbnQoZi5jc3Mo ImhlaWdodCIpKSxjPTNEcGFyc2VJbnQoZi5jc3MoIndpZHRoIik9Cik7dS5hdHRyKCJ3aWR0aCIs YyphKSx1LmF0dHIoImhlaWdodCIsbCksKCFvLmdldENvbnRleHR8fCFvLmdldENvbnRleHQoIjJk Ij0KKSkmJmFsZXJ0KCJZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSwg cGxlYXNlIHVzZSBhIG1vZGVybiBiPQpyb3dzZXIiKTt2YXIgaD0zRG8uZ2V0Q29udGV4dCgiMmQi KSxwPTNEMDt0LmZpbmQoInN2ZyIpLmVhY2goZnVuY3Rpb24oKXt2YXI9CiBlPTNEJCh0aGlzKTtl LmF0dHIoe3ZlcnNpb246IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3 aWR0aD0KOmMsaGVpZ2h0Omx9KTt2YXIgdD0zRHMuc2VyaWFsaXplVG9TdHJpbmcodGhpcyk7aC5k cmF3U3ZnKHQscCwwLGMsbCkscCs9M0RjPQp9KSx3aW5kb3cubG9jYXRpb24uaHJlZj0zRGkobyxv LmdldENvbnRleHQoIjJkIiksIndoaXRlIikucmVwbGFjZSgiaW1hZ2UvcG49CmciLCJpbWFnZS9v Y3RldC1zdHJlYW0iKX1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj0zRGUud2lkdGgsaT0zRGUuaGVp Z2h0LHM7aT0KZihuKXtzPTNEdC5nZXRJbWFnZURhdGEoMCwwLHIsaSk7dmFyIG89M0R0Lmdsb2Jh bENvbXBvc2l0ZU9wZXJhdGlvbjt0Lmdsb2JhPQpsQ29tcG9zaXRlT3BlcmF0aW9uPTNEImRlc3Rp bmF0aW9uLW92ZXIiLHQuZmlsbFN0eWxlPTNEbix0LmZpbGxSZWN0KDAsMCxyLGk9Cil9dmFyIHU9 M0RlLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7cmV0dXJuIG4mJih0LmNsZWFyUmVjdCgwLDAscixp KSx0LnB1dEltYT0KZ2VEYXRhKHMsMCwwKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0zRG8p LHV9ZnVuY3Rpb24gcyhlKXt3aW5kb3cubG9jYXRpPQpvbi5ocmVmPTNEImRhdGE6bm9uZS9ub25l O2Jhc2U2NCwiK2J0b2EoYShlKS5zdHJpbmcpfWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciA9CnQgaW4g ZG9jdW1lbnQuc3R5bGVTaGVldHMpe3ZhciBuPTNEZG9jdW1lbnQuc3R5bGVTaGVldHNbdF0scj0z RG4uY3NzUnVsZXM7aT0KZihyKWZvcih2YXIgaT0zRDAscz0zRHIubGVuZ3RoO2k8cztpKyspdHJ5 e2UuZmluZChyW2ldLnNlbGVjdG9yVGV4dCkuZWFjaChmPQp1bmN0aW9uKGUsdCl7dC5zdHlsZS5j c3NUZXh0Kz0zRHJbaV0uc3R5bGUuY3NzVGV4dH0pfWNhdGNoKG8pe319fWZ1bmN0aW9uIHU9Cihl KXt2YXIgdD0zRGEoZSksbj0zRHtmaWxlbmFtZTpuYW1lfHwiY2hhcnQiLHR5cGU6ImFwcGxpY2F0 aW9uL3BkZiIsaGVpZ2h0Oj0KdC5oZWlnaHQsd2lkdGg6dC53aWR0aCxzY2FsZToyLHN2Zzp0LnN0 cmluZ30scj0zRCQoImJvZHkiKSxpPTNEci5maW5kKCIjdmllPQp3cG9ydC1mb3JtIik7aS5sZW5n dGg9M0Q9M0Q9M0QwJiYoaT0zRCQoIjxmb3JtPiIse2lkOiJ2aWV3cG9ydC1mb3JtIixtZXRob2Q9 CjoicG9zdCIsYWN0aW9uOiJodHRwOi8vZXhwb3J0LmhpZ2hjaGFydHMuY29tLyIsZGlzcGxheToi bm9uZSJ9KSxyLmFwcGVuZChpKT0KKSxpLmVtcHR5KCk7Zm9yKG5hbWUgaW4gbil7dmFyIHM9M0Qk KCI8aW5wdXQvPiIse3R5cGU6ImhpZGRlbiIsbmFtZTpuYW1lLHZhPQpsdWU6bltuYW1lXX0pO2ku YXBwZW5kKHMpfXRyeXtpLnN1Ym1pdCgpfWNhdGNoKG8pe2NvbnNvbGUubG9nKG8pfX1mdW5jdGlv biA9CmEoZSl7aWYoZS4kZWwuZmluZCgic3ZnIikubGVuZ3RoPTNEPTNEMCYmZS5lcnJvcil7ZS5l cnJvcigiTm8gU1ZHIGZvdW5kLiBUaD0KaXMgY2hhcnQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IFNW Ry9QREYgZXhwb3J0LiIpO3JldHVybn12YXIgdD0zRGUuJGVsLG49M0R0PQouZmluZCgic3ZnIiku bGVuZ3RoLHI9M0RwYXJzZUludCh0LmZpbmQoInN2ZyIpLmZpcnN0KCkuY3NzKCJoZWlnaHQiKSks aT0zRHA9CmFyc2VJbnQodC5maW5kKCJzdmciKS5maXJzdCgpLmNzcygid2lkdGgiKSkscz0zRG5l dyBYTUxTZXJpYWxpemVyLHU9M0QkKCI8cz0KdmcvPiIpO3UuYXR0cih7dmVyc2lvbjoiMS4xIix4 bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmkqbixoPQplaWdodDpyfSk7 dmFyIGE9M0QiIixmPTNEMDtyZXR1cm4gdC5maW5kKCJzdmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFy IGU9M0QkKHQ9CmhpcykuY2xvbmUoKTtvKGUpO3ZhciB0PTNEJCgnPGcgdHJhbnNmb3JtPTNEInRy YW5zbGF0ZSgnK2YrJywgMCkiPicpO3QuYXBwZT0KbmQoZS5maW5kKCJnIikuZmlyc3QoKSksdS5h cHBlbmQodCksZis9M0RpfSkse3N0cmluZzpzLnNlcmlhbGl6ZVRvU3RyaW5nKHVbPQowXSksaGVp Z2h0OnIsd2lkdGg6aX19cmV0dXJue2NyZWF0ZVBORzp0LGNyZWF0ZVNWRzpzLGNyZWF0ZVBERjp1 fX0pLGRlZmluZSg9CiJwbHVnaW4vdmlld3Mvdmlld2VyIixbInV0aWxzL3V0aWxzIiwibXZjL3Vp L3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxldCIsIj0KcGx1Z2luL3ZpZXdzL3ZpZXdwb3J0Iiwi cGx1Z2luL2xpYnJhcnkvc2NyZWVuc2hvdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0PQp1cm4g QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSxzKXt0aGlzLmFwcD0z RGUsdGhpcy5jaGFydD0KPTNEdGhpcy5hcHAuY2hhcnQsdGhpcy52aWV3cG9ydF92aWV3PTNEbmV3 IHIoZSk7dmFyIG89M0R0aGlzO3RoaXMubWVzc2FnZT0KPTNEbmV3IHQuTWVzc2FnZTt2YXIgdT0z RG5ldyB0LkJ1dHRvbk1lbnUoe2ljb246ImZhLWNhbWVyYSIsdGl0bGU6IlNjcmVlbnNoPQpvdCIs dG9vbHRpcDoiRG93bmxvYWQgYXMgUE5HLCBTVkcgb3IgUERGIGZpbGUifSk7dS5hZGRNZW51KHtp ZDoiYnV0dG9uLXBuZyI9Cix0aXRsZToiU2F2ZSBhcyBQTkciLGljb246ImZhLWZpbGUiLG9uY2xp Y2s6ZnVuY3Rpb24oKXtvLl93YWl0KG8uY2hhcnQsZnVuYz0KdGlvbigpe2kuY3JlYXRlUE5HKHsk ZWw6by52aWV3cG9ydF92aWV3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSxlcnJvPQpy OmZ1bmN0aW9uKGUpe28ubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9 KX19KX0pfX0pLHUuYWRkTWU9Cm51KHtpZDoiYnV0dG9uLXN2ZyIsdGl0bGU6IlNhdmUgYXMgU1ZH IixpY29uOiJmYS1maWxlLXRleHQtbyIsb25jbGljazpmdW5jdD0KaW9uKCl7by5fd2FpdChvLmNo YXJ0LGZ1bmN0aW9uKCl7aS5jcmVhdGVTVkcoeyRlbDpvLnZpZXdwb3J0X3ZpZXcuJGVsLHRpdGxl PQo6by5jaGFydC5nZXQoInRpdGxlIiksZXJyb3I6ZnVuY3Rpb24oZSl7by5tZXNzYWdlLnVwZGF0 ZSh7bWVzc2FnZTplLHN0YXR1czo9CiJkYW5nZXIifSl9fSl9KX19KSx1LmFkZE1lbnUoe2lkOiJi dXR0b24tcG5nIix0aXRsZToiU2F2ZSBhcyBQREYiLGljb246ImZhLT0KZmlsZS1vIixvbmNsaWNr OmZ1bmN0aW9uKCl7by5hcHAubW9kYWwuc2hvdyh7dGl0bGU6IlNlbmQgY2hhcnQgZGF0YSBmb3Ig UERGPQogY3JlYXRpb24iLGJvZHk6IkdhbGF4eSBkb2VzIG5vdCBwcm92aWRlIGludGVncmF0ZWQg UERGIGV4cG9ydCBzY3JpcHRzLiBZb3U9CiBtYXkgY2xpY2sgJ0NvbnRpbnVlJyB0byBjcmVhdGUg dGhlIFBERiBieSB1c2luZyBhIDNyZCBwYXJ0eSBzZXJ2aWNlIChodHRwcz0KOi8vZXhwb3J0Lmhp Z2hjaGFydHMuY29tKS4iLGJ1dHRvbnM6e0NhbmNlbDpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhp ZGUoKX0sPQpDb250aW51ZTpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUoKSxvLl93YWl0KG8u Y2hhcnQsZnVuY3Rpb24oKXtpLmNyZWF0ZVA9CkRGKHskZWw6by52aWV3cG9ydF92aWV3LiRlbCx0 aXRsZTpvLmNoYXJ0LmdldCgidGl0bGUiKSxlcnJvcjpmdW5jdGlvbihlKXtvLj0KbWVzc2FnZS51 cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pfX19KX19KSx0aGlzLnBvcnRs ZXQ9M0RuZXcgPQpuLlZpZXcoe2ljb246ImZhLWJhci1jaGFydC1vIix0aXRsZToiVmlld3BvcnQi LG9wZXJhdGlvbnM6e2VkaXRfYnV0dG9uOm5ldyA9CnQuQnV0dG9uSWNvbih7aWNvbjoiZmEtZWRp dCIsdG9vbHRpcDoiQ3VzdG9taXplIHRoaXMgY2hhcnQiLHRpdGxlOiJFZGl0b3IiLD0Kb25jbGlj azpmdW5jdGlvbigpe28uX3dhaXQoby5jaGFydCxmdW5jdGlvbigpe28uYXBwLmdvKCJlZGl0b3Ii KX0pfX0pLHBpY3R1PQpyZV9idXR0b25fbWVudTp1fX0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhp cy5tZXNzYWdlLiRlbCksdGhpcy5wb3J0bGV0LmFwcGU9Cm5kKHRoaXMudmlld3BvcnRfdmlldy4k ZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQuJGVsKTt2YXIgbz0zRHRoaXM7dD0KaGlz LmNoYXJ0Lm9uKCJjaGFuZ2U6dGl0bGUiLGZ1bmN0aW9uKCl7by5fcmVmcmVzaFRpdGxlKCl9KX0s c2hvdzpmdW5jdGlvbigpPQp7dGhpcy4kZWwuc2hvdygpLCQod2luZG93KS50cmlnZ2VyKCJyZXNp emUiKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhpZGU9CigpfSxfcmVmcmVzaFRpdGxlOmZ1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRsZXQudD0K aXRsZShlKX0sX3dhaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcC5kZWZlcnJlZC5yZWFkeSgpP3Qo KTp0aGlzLm1lc3NhZ2UudXBkPQphdGUoe21lc3NhZ2U6IllvdXIgY2hhcnQgaXMgY3VycmVudGx5 IGJlaW5nIHByb2Nlc3NlZC4gUGxlYXNlIHdhaXQgYW5kIHRyeSA9CmFnYWluLiJ9KX19KX0pLGRl ZmluZSgibXZjL3VpL3VpLXRhYnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXt2YXIgdD0z RD0KQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZV9uZXc6IiIsb3Bl cmF0aW9uczpudWxsLG9ubmV3Om51PQpsbCxtYXg6bnVsbCxvbmNoYW5nZTpudWxsfSxpbml0aWFs aXplOmZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT0zRCExLHRoaXMuJG49CmF2PTNEbnVsbCx0aGlz LiRjb250ZW50PTNEbnVsbCx0aGlzLmZpcnN0X3RhYj0zRG51bGwsdGhpcy5jdXJyZW50X2lkPTNE bnVsbD0KLHRoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KTt2YXIg bj0zRCQodGhpcy5fdGVtcGxhdGUodGhpPQpzLm9wdGlvbnMpKTt0aGlzLiRuYXY9M0RuLmZpbmQo Ii50YWItbmF2aWdhdGlvbiIpLHRoaXMuJGNvbnRlbnQ9M0RuLmZpbmQoIi49CnRhYi1jb250ZW50 IiksdGhpcy5zZXRFbGVtZW50KG4pLHRoaXMubGlzdD0zRHt9O3ZhciByPTNEdGhpczt0aGlzLm9w dGlvbnMubz0KcGVyYXRpb25zJiYkLmVhY2godGhpcy5vcHRpb25zLm9wZXJhdGlvbnMsZnVuY3Rp b24oZSx0KXt0LiRlbC5wcm9wKCJpZCIsZSksPQpyLiRuYXYuZmluZCgiLm9wZXJhdGlvbnMiKS5h cHBlbmQodC4kZWwpfSk7aWYodGhpcy5vcHRpb25zLm9ubmV3KXt2YXIgaT0zRCQ9Cih0aGlzLl90 ZW1wbGF0ZV90YWJfbmV3KHRoaXMub3B0aW9ucykpO3RoaXMuJG5hdi5hcHBlbmQoaSksaS50b29s dGlwKHt0aXRsZT0KOiJBZGQgYSBuZXcgdGFiIixwbGFjZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVy OnIuJGVsfSksaS5vbigiY2xpY2siLGZ1bmN0aW9uPQooZSl7aS50b29sdGlwKCJoaWRlIiksci5v cHRpb25zLm9ubmV3KCl9KX19LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zaXplKHQ9Cmhpcy5s aXN0KX0sY3VycmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maW5kKCIudGFiLXBhbmUu YWN0aXZlIikuYXR0cj0KKCJpZCIpfSxhZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0Rl LmlkLHI9M0QkKHRoaXMuX3RlbXBsYXRlX3RhYihlKSksPQppPTNEJCh0aGlzLl90ZW1wbGF0ZV90 YWJfY29udGVudChlKSk7dGhpcy5saXN0W25dPTNEZS5vbmRlbD8hMDohMSx0aGlzLm9wdGk9Cm9u cy5vbm5ldz90aGlzLiRuYXYuZmluZCgiI25ldy10YWIiKS5iZWZvcmUocik6dGhpcy4kbmF2LmFw cGVuZChyKSxpLmFwcGVuZD0KKGUuJGVsKSx0aGlzLiRjb250ZW50LmFwcGVuZChpKSx0aGlzLnNp emUoKT0zRD0zRDEmJihyLmFkZENsYXNzKCJhY3RpdmUiKSxpPQouYWRkQ2xhc3MoImFjdGl2ZSIp LHRoaXMuZmlyc3RfdGFiPTNEbiksdGhpcy5vcHRpb25zLm1heCYmdGhpcy5zaXplKCk+PTNEdGg9 CmlzLm9wdGlvbnMubWF4JiZ0aGlzLiRlbC5maW5kKCIjbmV3LXRhYiIpLmhpZGUoKTtpZihlLm9u ZGVsKXt2YXIgcz0zRHIuZmluZD0KKCIjZGVsZXRlIik7cy50b29sdGlwKHt0aXRsZToiRGVsZXRl IHRoaXMgdGFiIixwbGFjZW1lbnQ6ImJvdHRvbSIsY29udGFpbmVyPQo6dC4kZWx9KSxzLm9uKCJj bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcy50b29sdGlwKCJkZXN0cm95IiksdC4kZWwuZmluZCgi LnQ9Cm9vbHRpcCIpLnJlbW92ZSgpLGUub25kZWwoKSwhMX0pfXIub24oImNsaWNrIixmdW5jdGlv bihyKXtyLnByZXZlbnREZWZhdWx0KD0KKSxlLm9uY2xpY2s/ZS5vbmNsaWNrKCk6dC5zaG93KG4p fSksdGhpcy5jdXJyZW50X2lkfHwodGhpcy5jdXJyZW50X2lkPTNEbil9PQosZGVsOmZ1bmN0aW9u KGUpe3RoaXMuJGVsLmZpbmQoIiN0YWItIitlKS5yZW1vdmUoKSx0aGlzLiRlbC5maW5kKCIjIitl KS5yZW09Cm92ZSgpLHRoaXMuZmlyc3RfdGFiPTNEPTNEZSYmKHRoaXMuZmlyc3RfdGFiPTNEbnVs bCksdGhpcy5maXJzdF90YWIhPTNEbnVsbD0KJiZ0aGlzLnNob3codGhpcy5maXJzdF90YWIpLHRo aXMubGlzdFtlXSYmZGVsZXRlIHRoaXMubGlzdFtlXSx0aGlzLnNpemUoKTx0PQpoaXMub3B0aW9u cy5tYXgmJnRoaXMuJGVsLmZpbmQoIiNuZXctdGFiIikuc2hvdygpfSxkZWxSZW1vdmFibGU6ZnVu Y3Rpb24oKXs9CmZvcih2YXIgZSBpbiB0aGlzLmxpc3QpdGhpcy5kZWwoZSl9LHNob3c6ZnVuY3Rp b24oZSl7dGhpcy4kZWwuZmFkZUluKCJmYXN0Ij0KKSx0aGlzLnZpc2libGU9M0QhMCxlJiYodGhp cy4kZWwuZmluZCgiI3RhYi0iK3RoaXMuY3VycmVudF9pZCkucmVtb3ZlQ2xhc3MoPQoiYWN0aXZl IiksdGhpcy4kZWwuZmluZCgiIyIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVDbGFzcygiYWN0aXZl IiksdGhpcy4kZWw9Ci5maW5kKCIjdGFiLSIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVs LmZpbmQoIiMiK2UpLmFkZENsYXNzKCJhY3RpdmUiKT0KLHRoaXMuY3VycmVudF9pZD0zRGUpLHRo aXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlKGUpfSxoaWRlPQo6ZnVu Y3Rpb24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy52aXNpYmxlPTNEITF9LGhpZGVP cGVyYXRpb246ZnVuY3Q9CmlvbihlKXt0aGlzLiRuYXYuZmluZCgiIyIrZSkuaGlkZSgpfSxzaG93 T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuJG5hdi5maT0KbmQoIiMiK2UpLnNob3coKX0sc2V0 T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlzLiRuYXYuZmluZCgiIyIrZSk7PQpu Lm9mZigiY2xpY2siKSxuLm9uKCJjbGljayIsdCl9LHRpdGxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49 M0R0aGlzLiRlbC5maW5kKCI9CiN0YWItdGl0bGUtdGV4dC0iK2UpO3JldHVybiB0JiZuLmh0bWwo dCksbi5odG1sKCl9LHJldGl0bGU6ZnVuY3Rpb24oZSl7dmFyID0KdD0zRDA7Zm9yKHZhciBuIGlu IHRoaXMubGlzdCl0aGlzLnRpdGxlKG4sKyt0KyI6ICIrZSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihl PQope3JldHVybic8ZGl2IGNsYXNzPTNEInVpLXRhYnMgdGFiYmFibGUgdGFicy1sZWZ0Ij48dWwg aWQ9M0QidGFiLW5hdmlnYXRpb249CiIgY2xhc3M9M0QidGFiLW5hdmlnYXRpb24gbmF2IG5hdi10 YWJzIj48ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMiIHN0eWxlPTNEIj0KZmxvYXQ6IHJpZ2h0OyBt YXJnaW4tYm90dG9tOiA0cHg7Ij48L2Rpdj48L3VsPjxkaXYgaWQ9M0QidGFiLWNvbnRlbnQiIGNs YXNzPQo9M0QidGFiLWNvbnRlbnQiLz48L2Rpdj4nfSxfdGVtcGxhdGVfdGFiX25ldzpmdW5jdGlv bihlKXtyZXR1cm4nPGxpIGlkPTNEIm49CmV3LXRhYiI+PGEgaHJlZj0zRCJqYXZhc2NyaXB0OnZv aWQoMCk7Ij48aSBjbGFzcz0zRCJ1aS10YWJzLWFkZCBmYSBmYS1wbHVzLT0KY2lyY2xlIi8+Jytl LnRpdGxlX25ldysiPC9hPiIrIjwvbGk+In0sX3RlbXBsYXRlX3RhYjpmdW5jdGlvbihlKXt2YXIg dD0zRCc8PQpsaSBpZD0zRCJ0YWItJytlLmlkKyciIGNsYXNzPTNEInRhYi1lbGVtZW50Ij4nKyc8 YSBpZD0zRCJ0YWItdGl0bGUtbGluay0nK2U9Ci5pZCsnIiB0aXRsZT0zRCIiIGhyZWY9M0QiIycr ZS5pZCsnIiBkYXRhLW9yaWdpbmFsLXRpdGxlPTNEIiI+JysnPHNwYW4gaWQ9Cj0zRCJ0YWItdGl0 bGUtdGV4dC0nK2UuaWQrJyIgY2xhc3M9M0QidGFiLXRpdGxlLXRleHQiPicrZS50aXRsZSsiPC9z cGFuPiI7cj0KZXR1cm4gZS5vbmRlbCYmKHQrPTNEJzxpIGlkPTNEImRlbGV0ZSIgY2xhc3M9M0Qi dWktdGFicy1kZWxldGUgZmEgZmEtbWludXMtPQpjaXJjbGUiLz4nKSx0Kz0zRCI8L2E+PC9saT4i LHR9LF90ZW1wbGF0ZV90YWJfY29udGVudDpmdW5jdGlvbihlKXtyZXR1cm4nPGQ9Cml2IGlkPTNE IicrZS5pZCsnIiBjbGFzcz0zRCJ0YWItcGFuZSIvPid9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZp bmUoIm12Yy91aT0KL3VpLXRhYmxlIixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9 M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7cm93Om51PQpsbCxyb3dfY291bnQ6MCxvcHRpb25zRGVm YXVsdDp7Y29udGVudDoiTm8gY29udGVudCBhdmFpbGFibGUuIixvbmNoYW5nZTpudWw9Cmwsb25k YmxjbGljazpudWxsLG9uY29uZmlybTpudWxsLGNsczoidWktdGFibGUiLGNsc190cjoiIn0sZXZl bnRzOntjbGljazoiXz0Kb25jbGljayIsZGJsY2xpY2s6Il9vbmRibGNsaWNrIn0saW5pdGlhbGl6 ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lPQpyZ2UodCx0aGlzLm9wdGlvbnNEZWZh dWx0KTt2YXIgbj0zRCQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSk7dGhpcy4kdGg9CmVh ZD0zRG4uZmluZCgidGhlYWQiKSx0aGlzLiR0Ym9keT0zRG4uZmluZCgidGJvZHkiKSx0aGlzLiR0 bWVzc2FnZT0zRG4uZmluZD0KKCJ0bWVzc2FnZSIpLHRoaXMuc2V0RWxlbWVudChuKSx0aGlzLnJv dz0zRHRoaXMuX3JvdygpfSxhZGRIZWFkZXI6ZnVuY3Rpb24oPQplKXt2YXIgdD0zRCQoIjx0aD48 L3RoPiIpO3QuYXBwZW5kKGUpLHRoaXMucm93LmFwcGVuZCh0KX0sYXBwZW5kSGVhZGVyOmZ1bmM9 CnRpb24oKXt0aGlzLiR0aGVhZC5hcHBlbmQodGhpcy5yb3cpLHRoaXMucm93PTNEJCgiPHRyPjwv dHI+Iil9LGFkZDpmdW5jdGlvbj0KKGUsdCxuKXt2YXIgcj0zRCQoIjx0ZD48L3RkPiIpO3QmJnIu Y3NzKCJ3aWR0aCIsdCksbiYmci5jc3MoInRleHQtYWxpZ24iLG4pPQosci5hcHBlbmQoZSksdGhp cy5yb3cuYXBwZW5kKHIpfSxhcHBlbmQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb21taXQoZSx0LCEx KX09CixwcmVwZW5kOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29tbWl0KGUsdCwhMCl9LGdldDpmdW5j dGlvbihlKXtyZXR1cm4gdGhpcy4kZT0KbC5maW5kKCIjIitlKX0sZGVsOmZ1bmN0aW9uKGUpe3Zh ciB0PTNEdGhpcy4kdGJvZHkuZmluZCgiIyIrZSk7dC5sZW5ndGg+MCYmPQoodC5yZW1vdmUoKSx0 aGlzLnJvd19jb3VudC0tLHRoaXMuX3JlZnJlc2goKSl9LGRlbEFsbDpmdW5jdGlvbigpe3RoaXMu JHRib2Q9CnkuZW1wdHkoKSx0aGlzLnJvd19jb3VudD0zRDAsdGhpcy5fcmVmcmVzaCgpfSx2YWx1 ZTpmdW5jdGlvbihlKXt0aGlzLmJlZm9yZT0KPTNEdGhpcy4kdGJvZHkuZmluZCgiLmN1cnJlbnQi KS5hdHRyKCJpZCIpLGUhPTNEPTNEdW5kZWZpbmVkJiYodGhpcy4kdGJvZHkuPQpmaW5kKCJ0ciIp LnJlbW92ZUNsYXNzKCJjdXJyZW50IiksZSYmdGhpcy4kdGJvZHkuZmluZCgiIyIrZSkuYWRkQ2xh c3MoImN1cnI9CmVudCIpKTt2YXIgdD0zRHRoaXMuJHRib2R5LmZpbmQoIi5jdXJyZW50IikuYXR0 cigiaWQiKTtyZXR1cm4gdD0zRD0zRD0zRHVuZD0KZWZpbmVkP251bGw6KHQhPTNEdGhpcy5iZWZv cmUmJnRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcHRpb25zLm9uY2hhbmdlPQooZSksdCl9 LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGJvZHkuZmluZCgidHIiKS5sZW5ndGh9LF9j b21taXQ6ZnVuY3Q9CmlvbihlLHQsbil7dGhpcy5kZWwoZSksdGhpcy5yb3cuYXR0cigiaWQiLGUp LG4/dGhpcy4kdGJvZHkucHJlcGVuZCh0aGlzLnJvdz0KKTp0aGlzLiR0Ym9keS5hcHBlbmQodGhp cy5yb3cpLHQmJih0aGlzLnJvdy5oaWRlKCksdGhpcy5yb3cuZmFkZUluKCkpLHRoaXMuPQpyb3c9 M0R0aGlzLl9yb3coKSx0aGlzLnJvd19jb3VudCsrLHRoaXMuX3JlZnJlc2goKX0sX3JvdzpmdW5j dGlvbigpe3JldHVybiA9CiQoJzx0ciBjbGFzcz0zRCInK3RoaXMub3B0aW9ucy5jbHNfdHIrJyI+ PC90cj4nKX0sX29uY2xpY2s6ZnVuY3Rpb24oZSl7dmFyID0KdD0zRHRoaXMudmFsdWUoKSxuPTNE JChlLnRhcmdldCkuY2xvc2VzdCgidHIiKS5hdHRyKCJpZCIpO24hPTNEIiImJm4mJnQhPTNEPQpu JiYodGhpcy5vcHRpb25zLm9uY29uZmlybT90aGlzLm9wdGlvbnMub25jb25maXJtKG4pOnRoaXMu dmFsdWUobikpfSxfb25kYmw9CmNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy52YWx1ZSgp O3QmJnRoaXMub3B0aW9ucy5vbmRibGNsaWNrJiZ0aGlzLm9wdD0KaW9ucy5vbmRibGNsaWNrKHQp fSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMucm93X2NvdW50PTNEPTNEMD90aGlzLiR0bWVzc2Fn PQplLnNob3coKTp0aGlzLiR0bWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXty ZXR1cm4nPGRpdj48dGFibGUgY2w9CmFzcz0zRCInK2UuY2xzKyciPicrIjx0aGVhZD48L3RoZWFk PiIrIjx0Ym9keT48L3Rib2R5PiIrIjwvdGFibGU+IisiPHRtZXNzYT0KZ2U+IitlLmNvbnRlbnQr IjwvdG1lc3NhZ2U+IisiPGRpdj4ifX0pO3JldHVybntWaWV3OnR9fSksZGVmaW5lKCJwbHVnaW4v dmllPQp3cy9ncm91cCIsWyJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxz L3V0aWxzIl0sZnVuY3Rpb24oZSx0LG49Cil7cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtp bml0aWFsaXplOmZ1bmN0aW9uKHIsaSl7dGhpcy5hcHA9M0RyO3ZhciBzPQo9M0R0aGlzO3RoaXMu Y2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLmdyb3VwPTNEaS5ncm91cCx0aGlzLmdyb3VwX2tl eT0zRG49CmV3IHQuSW5wdXQoe3BsYWNlaG9sZGVyOiJEYXRhIGxhYmVsIixvbmNoYW5nZTpmdW5j dGlvbihlKXtzLmdyb3VwLnNldCgia2V5Ij0KLGUpfX0pLHRoaXMudGFibGU9M0RuZXcgZS5WaWV3 KHtjb250ZW50OiJObyBkYXRhIGNvbHVtbi4ifSk7dmFyIG89M0QkKCI8ZGl2PQovPiIpO28uYXBw ZW5kKG4ud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgbGFiZWw6In0pKS4kZWwp KSxvLmFwcGU9Cm5kKG4ud3JhcCh0aGlzLmdyb3VwX2tleS4kZWwpKSxvLmFwcGVuZChuLndyYXAo KG5ldyB0LkxhYmVsKHt0aXRsZToiU2VsZWN0ID0KY29sdW1uczoifSkpLiRlbCkpLG8uYXBwZW5k KG4ud3JhcCh0aGlzLnRhYmxlLiRlbCkpLHRoaXMuc2V0RWxlbWVudChvKTt2YXIgPQpzPTNEdGhp czt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6ZGF0YXNldF9pZCIsZnVuY3Rpb24oKXtzLl9yZWZyZXNo VGFibGUoKX0pLHQ9Cmhpcy5jaGFydC5vbigiY2hhbmdlOnR5cGUiLGZ1bmN0aW9uKCl7cy5fcmVm cmVzaFRhYmxlKCl9KSx0aGlzLmdyb3VwLm9uKCJjaD0KYW5nZTprZXkiLGZ1bmN0aW9uKCl7cy5f cmVmcmVzaEdyb3VwS2V5KCl9KSx0aGlzLmdyb3VwLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uPQooKXtz Ll9yZWZyZXNoR3JvdXAoKX0pLHRoaXMuX3JlZnJlc2hUYWJsZSgpLHRoaXMuX3JlZnJlc2hHcm91 cEtleSgpLHRoaXMuX3I9CmVmcmVzaEdyb3VwKCl9LF9yZWZyZXNoVGFibGU6ZnVuY3Rpb24oKXt2 YXIgZT0zRHRoaXMuY2hhcnQuZ2V0KCJkYXRhc2V0X2lkIj0KKSxuPTNEdGhpcy5jaGFydC5nZXQo InR5cGUiKTtpZighZXx8IW4pcmV0dXJuO3ZhciByPTNEdGhpcyxpPTNEdGhpcy5jaGFydC5kPQpl ZmluaXRpb247dGhpcy50YWJsZS5kZWxBbGwoKTt2YXIgcz0zRHt9O2Zvcih2YXIgbyBpbiBpLmNv bHVtbnMpe3ZhciB1PTNEaS49CmNvbHVtbnNbb107aWYoIXUpe2NvbnNvbGUuZGVidWcoIkdyb3Vw OjpfcmVmcmVzaFRhYmxlKCkgLSBTa2lwcGluZyBjb2x1bW4gZD0KZWZpbml0aW9uLiIpO2NvbnRp bnVlfXZhciBhPTNEbmV3IHQuU2VsZWN0LlZpZXcoe2lkOiJzZWxlY3RfIitvLHdhaXQ6ITB9KSxm PQo9M0R1LnRpdGxlO3UuaXNfdW5pcXVlJiYoZis9M0QiJm5ic3A7KGFsbCBkYXRhIGxhYmVscyki KSx0aGlzLnRhYmxlLmFkZChmLCI9CjI1JSIpLHRoaXMudGFibGUuYWRkKGEuJGVsKSx0aGlzLnRh YmxlLmFwcGVuZChvKSxzW29dPTNEYX10aGlzLmNoYXJ0LnN0YXRlKD0KIndhaXQiLCJMb2FkaW5n IG1ldGFkYXRhLi4uIik7dmFyIGw9M0R0aGlzLmFwcC5kZWZlcnJlZC5yZWdpc3RlcigpLGM9M0R7 aWQ6PQplLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHMpci5fYWRkUm93KHQsZSxz LGkuY29sdW1uc1t0XSk7ci5jaGFydC49CnN0YXRlKCJvayIsIk1ldGFkYXRhIGluaXRpYWxpemVk Li4uIiksci5hcHAuZGVmZXJyZWQuZG9uZShsKX19O3RoaXMuYXBwLmRhdD0KYXNldHMucmVxdWVz dChjKX0sX2FkZFJvdzpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0zRHRoaXMscz0zRHIuaXNfbGFi ZWwsbz0KPTNEci5pc19hdXRvLHU9M0RyLmlzX251bWVyaWMsYT0zRHIuaXNfdW5pcXVlLGY9M0Ry LmlzX3plcm8sbD0zRFtdLGM9M0RuW2VdPQo7byYmbC5wdXNoKHtsYWJlbDoiQ29sdW1uOiBSb3cg TnVtYmVyIix2YWx1ZToiYXV0byJ9KSxmJiZsLnB1c2goe2xhYmVsOiJDb2w9CnVtbjogTm9uZSIs dmFsdWU6Inplcm8ifSk7dmFyIGg9M0R0Lm1ldGFkYXRhX2NvbHVtbl90eXBlcztmb3IodmFyIHAg aW4gaCl7dj0KYXIgZD0zRCExO2hbcF09M0Q9M0QiaW50Inx8aFtwXT0zRD0zRCJmbG9hdCI/ZD0z RHU6ZD0zRHMsZCYmbC5wdXNoKHtsYWJlbDoiPQpDb2x1bW46ICIrKHBhcnNlSW50KHApKzEpKyIg WyIraFtwXSsiXSIsdmFsdWU6cH0pfWMudXBkYXRlKGwpLGEmJnRoaXMuY2hhcnQ9Ci5ncm91cHMu Zmlyc3QoKSYmdGhpcy5ncm91cC5zZXQoZSx0aGlzLmNoYXJ0Lmdyb3Vwcy5maXJzdCgpLmdldChl KSk7aWYoIWMuZT0KeGlzdHModGhpcy5ncm91cC5nZXQoZSkpKXt2YXIgdj0zRGMuZmlyc3QoKTtj b25zb2xlLmRlYnVnKCdHcm91cCgpOjpfYWRkUm93PQooKSAtIFN3aXRjaGluZyBtb2RlbCB2YWx1 ZSBmcm9tICInK3RoaXMuZ3JvdXAuZ2V0KGUpKyciIHRvICInK3YrJyIuJyksdGhpcy49Cmdyb3Vw LnNldChlLHYpfWMudmFsdWUodGhpcy5ncm91cC5nZXQoZSkpLHRoaXMuZ3JvdXAub2ZmKCJjaGFu Z2U6IitlKSx0aGlzLj0KZ3JvdXAub24oImNoYW5nZToiK2UsZnVuY3Rpb24oKXtjLnZhbHVlKGku Z3JvdXAuZ2V0KGUpKX0pLGMuc2V0T25DaGFuZ2UoZnVuPQpjdGlvbih0KXthP2kuY2hhcnQuZ3Jv dXBzLmVhY2goZnVuY3Rpb24obil7bi5zZXQoZSx0KX0pOmkuZ3JvdXAuc2V0KGUsdCksaS49CmNo YXJ0LnNldCgibW9kaWZpZWQiLCEwKX0pLGMuc2hvdygpfSxfcmVmcmVzaEdyb3VwOmZ1bmN0aW9u KCl7dGhpcy5ncm91cC5zZT0KdCgiZGF0ZSIsbi50aW1lKCkpfSxfcmVmcmVzaEdyb3VwS2V5OmZ1 bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmdyb3VwLmdldCgia2V5PQoiKTtlPTNEPTNEPTNEdW5kZWZp bmVkJiYoZT0zRCIiKSxlIT0zRHRoaXMuZ3JvdXBfa2V5LnZhbHVlKCkmJnRoaXMuZ3JvdXBfa2U9 CnkudmFsdWUoZSl9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3VpLXRhYmxlLWZvcm0iLFsi bXZjL3VpL3VpLXRhYmxlIiwibT0KdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0aWxzIl0sZnVuY3Rp b24oZSx0LG4pe3ZhciByPTNEQmFja2JvbmUuVmlldy5leHRlbmQoPQp7b3B0aW9uc0RlZmF1bHQ6 e3RpdGxlOiIiLGNvbnRlbnQ6IiIsbW9kZToiIn0sbGlzdDpbXSxpbml0aWFsaXplOmZ1bmN0aW9u KHI9CixpKXt0aGlzLmFwcD0zRHIsdGhpcy5vcHRpb25zPTNEbi5tZXJnZShpLHRoaXMub3B0aW9u c0RlZmF1bHQpLHRoaXMudGFibGVfdD0KaXRsZT0zRG5ldyB0LkxhYmVsKHt0aXRsZTp0aGlzLm9w dGlvbnMudGl0bGV9KSx0aGlzLnRhYmxlPTNEbmV3IGUuVmlldyh7Y29uPQp0ZW50OnRoaXMub3B0 aW9ucy5jb250ZW50fSk7dmFyIHM9M0QkKCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0iLz4n KTt0aGk9CnMub3B0aW9ucy50aXRsZSYmcy5hcHBlbmQobi53cmFwKHRoaXMudGFibGVfdGl0bGUu JGVsKSkscy5hcHBlbmQobi53cmFwKHRoaT0Kcy50YWJsZS4kZWwpKSx0aGlzLnNldEVsZW1lbnQo cyl9LHRpdGxlOmZ1bmN0aW9uKGUpe3RoaXMudGFibGVfdGl0bGUudGl0bGUoPQplKX0sdXBkYXRl OmZ1bmN0aW9uKGUsdCl7dGhpcy50YWJsZS5kZWxBbGwoKSx0aGlzLmxpc3Q9M0RbXTtmb3IodmFy IG4gaW4gZSk9CnRoaXMuX2FkZChlW25dLmlkfHxuLGVbbl0sdCk7Zm9yKHZhciBuIGluIHRoaXMu bGlzdCl0aGlzLmxpc3Rbbl0udHJpZ2dlcigiYz0KaGFuZ2UiKX0sX2FkZDpmdW5jdGlvbihlLG4s cil7dmFyIGk9M0R0aGlzLHM9M0RudWxsLG89M0RuLnR5cGU7c3dpdGNoKG8pe2NhPQpzZSJ0ZXh0 IjpzPTNEbmV3IHQuSW5wdXQoe2lkOiJmaWVsZC0iK2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRl cix2YWx1ZTpyLmc9CmV0KGUpLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCl9fSk7YnJl YWs7Y2FzZSJyYWRpb2J1dHRvbiI6cz0zRG5ldyB0Lj0KUmFkaW9CdXR0b24uVmlldyh7aWQ6ImZp ZWxkLSIrZSxkYXRhOm4uZGF0YSx2YWx1ZTpyLmdldChlKSxvbmNoYW5nZTpmdW5jdGlvPQpuKHQp e3Iuc2V0KGUsdCk7dmFyIHM9M0RfLmZpbmRXaGVyZShuLmRhdGEse3ZhbHVlOnR9KTtpZihzJiZz Lm9wZXJhdGlvbnMpe3Y9CmFyIG89M0RzLm9wZXJhdGlvbnM7Zm9yKHZhciB1IGluIG8uc2hvdyl7 dmFyIGE9M0RvLnNob3dbdV07aS50YWJsZS5nZXQoYSkucz0KaG93KCl9Zm9yKHZhciB1IGluIG8u aGlkZSl7dmFyIGE9M0RvLmhpZGVbdV07aS50YWJsZS5nZXQoYSkuaGlkZSgpfX19fSk7YnJlPQph aztjYXNlInNlbGVjdCI6cz0zRG5ldyB0LlNlbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLGRhdGE6 bi5kYXRhLHZhbHVlOnIuZ2U9CnQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0KTt2 YXIgcz0zRF8uZmluZFdoZXJlKG4uZGF0YSx7dmFsdWU6dH0pOz0KaWYocyYmcy5vcGVyYXRpb25z KXt2YXIgbz0zRHMub3BlcmF0aW9ucztmb3IodmFyIHUgaW4gby5zaG93KXt2YXIgYT0zRG8uc2hv PQp3W3VdO2kudGFibGUuZ2V0KGEpLnNob3coKX1mb3IodmFyIHUgaW4gby5oaWRlKXt2YXIgYT0z RG8uaGlkZVt1XTtpLnRhYmxlLmc9CmV0KGEpLmhpZGUoKX19fX0pO2JyZWFrO2Nhc2UiZGF0YXNl dCI6cz0zRG5ldyB0LlNlbGVjdC5WaWV3KHtpZDoiZmllbGQtIitlLD0Kb25jaGFuZ2U6ZnVuY3Rp b24odCl7ci5zZXQoZSx0KX19KSxpLmFwcC5kYXRhc2V0cy5vbigiYWxsIixmdW5jdGlvbigpe3Zh ciB0PQo9M0RbXTtpLmFwcC5kYXRhc2V0cy5lYWNoKGZ1bmN0aW9uKGUpe2UuZ2V0KCJkYXRhdHlw ZV9pZCIpPTNEPTNEbi5kYXRhJiZ0LnA9CnVzaCh7dmFsdWU6ZS5nZXQoImlkIiksbGFiZWw6ZS5n ZXQoIm5hbWUiKX0pfSkscy51cGRhdGUodCksci5nZXQoZSl8fHIuc2V0KD0KZSxzLmZpcnN0KCkp LHMudmFsdWUoci5nZXQoZSkpfSksaS5hcHAuZGF0YXNldHMudHJpZ2dlcigiYWxsLmRhdGFzZXRz Iik7YnJlPQphaztjYXNlInRleHRhcmVhIjpzPTNEbmV3IHQuVGV4dGFyZWEoe2lkOiJmaWVsZC0i K2Usb25jaGFuZ2U6ZnVuY3Rpb24oKXtyLnM9CmV0KGUscy52YWx1ZSgpKX19KTticmVhaztjYXNl InNlcGFyYXRvciI6cz0zRCQoIjxkaXYvPiIpO2JyZWFrO2RlZmF1bHQ6cz0zRD0KbmV3IHQuSW5w dXQoe2lkOiJmaWVsZC0iK2UscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcix0eXBlOm4udHlwZSxv bmNoYW5nZTpmPQp1bmN0aW9uKCl7ci5zZXQoZSxzLnZhbHVlKCkpfX0pfWlmKG8hPTNEInNlcGFy YXRvciIpe3IuZ2V0KGUpfHxyLnNldChlLG4uaW49Cml0KSxzLnZhbHVlKHIuZ2V0KGUpKSx0aGlz Lmxpc3RbZV09M0RzO3ZhciB1PTNEJCgiPGRpdi8+Iik7dS5hcHBlbmQocy4kZWwpLD0Kbi5pbmZv JiZ1LmFwcGVuZCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLWluZm8iPicrbi5pbmZvKyI8 L2Rpdj4iKSx0aGlzPQoub3B0aW9ucy5zdHlsZT0zRD0zRCJib2xkIj8odGhpcy50YWJsZS5hZGQo KG5ldyB0LkxhYmVsKHt0aXRsZTpuLnRpdGxlLGNsczo9CiJmb3JtLWxhYmVsIn0pKS4kZWwpLHRo aXMudGFibGUuYWRkKHUpKToodGhpcy50YWJsZS5hZGQoJzxzcGFuIGNsYXNzPTNEInVpLT0KdGFi bGUtZm9ybS10aXRsZSI+JytuLnRpdGxlKyI8L3NwYW4+IiwiMjUlIiksdGhpcy50YWJsZS5hZGQo dSkpfWVsc2UgdGhpcy50PQphYmxlLmFkZCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLXNl cGFyYXRvciI+JytuLnRpdGxlKyI6PGRpdi8+IiksdGhpcy49CnRhYmxlLmFkZCgkKCI8ZGl2Lz4i KSk7dGhpcy50YWJsZS5hcHBlbmQoZSksbi5oaWRlJiZ0aGlzLnRhYmxlLmdldChlKS5oaWRlKD0K KX19KTtyZXR1cm57VmlldzpyfX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzL3NldHRpbmdzIixbIm12 Yy91aS91aS1taXNjIiwicGx1PQpnaW4vbGlicmFyeS91aS10YWJsZS1mb3JtIiwidXRpbHMvdXRp bHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJhY2tib25lLlY9Cmlldy5leHRlbmQoe2luaXRp YWxpemU6ZnVuY3Rpb24oZSxuKXt0aGlzLmFwcD0zRGU7dmFyIHI9M0R0aGlzO3RoaXMuY2hhcnQ9 Cj0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMuZm9ybT0zRG5ldyB0LlZpZXcoZSx7dGl0bGU6IkNvbmZp Z3VyYXRpb24iLGNvbnRlbnQ6Ij0KVGhpcyBjaGFydCB0eXBlIGRvZXMgbm90IHByb3ZpZGUgYW55 IG9wdGlvbnMuIn0pLHRoaXMuc2V0RWxlbWVudCh0aGlzLmZvcm0uPQokZWwpO3ZhciByPTNEdGhp czt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7ci5fcmVmcmVzaCgpfSl9LF9yZWZy ZXM9Cmg6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZGVmaW5pdGlvbjtpZighZSlyZXR1 cm47dGhpcy5mb3JtLnRpdGxlKGUuYz0KYXRlZ29yeSsiIC0gIitlLnRpdGxlKyI6IiksdGhpcy5m b3JtLnVwZGF0ZShlLnNldHRpbmdzLHRoaXMuY2hhcnQuc2V0dGluZ3MpPQp9fSl9KSxkZWZpbmUo InBsdWdpbi92aWV3cy90eXBlcyIsWyJ1dGlscy91dGlscyIsIm12Yy91aS91aS1taXNjIl0sZnVu Y3Rpb249CihlLHQpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6 e29uY2hhbmdlOm51bGwsb25kYmxjbGljaz0KOm51bGx9LGV2ZW50czp7Y2xpY2s6Il9vbmNsaWNr IixkYmxjbGljazoiX29uZGJsY2xpY2sifSxpbml0aWFsaXplOmZ1bmN0aW9uPQoobixyKXt2YXIg aT0zRHRoaXM7dGhpcy5hcHA9M0RuLHRoaXMub3B0aW9ucz0zRGUubWVyZ2Uocix0aGlzLm9wdGlv bnNEZWZhdWw9CnQpO3ZhciBzPTNEJCgnPGRpdiBjbGFzcz0zRCJjaGFydHMtZ3JpZCIvPicpO3Mu YXBwZW5kKGUud3JhcCgobmV3IHQuTGFiZWwoez0KdGl0bGU6IkhvdyBtYW55IGRhdGEgcG9pbnRz IHdvdWxkIHlvdSBsaWtlIHRvIGFuYWx5emU/In0pKS4kZWwpKSx0aGlzLmxpYnJhPQpyeT0zRG5l dyB0LlJhZGlvQnV0dG9uLlZpZXcoe2RhdGE6W3tsYWJlbDoiRmV3ICg8NTAwKSIsdmFsdWU6InNt YWxsIn0se2xhYmU9Cmw6IlNvbWUgKDwxMGspIix2YWx1ZToibWVkaXVtIn0se2xhYmVsOiJNYW55 ICg+MTBrKSIsdmFsdWU6ImxhcmdlIn1dLG9uY2hhbj0KZ2U6ZnVuY3Rpb24oZSl7aS5fZmlsdGVy KGUpfX0pLHMuYXBwZW5kKGUud3JhcCh0aGlzLmxpYnJhcnkuJGVsKSksdGhpcy5zZXRFPQpsZW1l bnQocyksdGhpcy5fcmVuZGVyKCksdGhpcy5saWJyYXJ5LnZhbHVlKCJzbWFsbCIpLHRoaXMubGli cmFyeS50cmlnZ2VyKCI9CmNoYW5nZSIpfSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMu JGVsLmZpbmQoIi5jdXJyZW50IikuYXR0cigiaWQiKTtlIT0KPTNEPTNEdW5kZWZpbmVkJiYodGhp cy4kZWwuZmluZCgiLmN1cnJlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudCIpLHRoaXMuJGVsPQou ZmluZCgiIyIrZSkuYWRkQ2xhc3MoImN1cnJlbnQiKSk7dmFyIG49M0R0aGlzLiRlbC5maW5kKCIu Y3VycmVudCIpLmF0dHIoImk9CmQiKTtyZXR1cm4gbj0zRD0zRD0zRHVuZGVmaW5lZD9udWxsOihu IT0zRHQmJnRoaXMub3B0aW9ucy5vbmNoYW5nZSYmdGhpcy5vcD0KdGlvbnMub25jaGFuZ2UoZSks bil9LF9maWx0ZXI6ZnVuY3Rpb24oZSl7dGhpcy4kZWwuZmluZCgiLmhlYWRlciIpLmhpZGUoKTt2 PQphciB0PTNEdGhpcy5hcHAudHlwZXMuYXR0cmlidXRlcztmb3IodmFyIG4gaW4gdCl7dmFyIHI9 M0R0W25dLGk9M0R0aGlzLiRlbC49CmZpbmQoIiMiK24pLHM9M0R0aGlzLiRlbC5maW5kKCIjdHlw ZXMtaGVhZGVyLSIrdGhpcy5jYXRlZ29yaWVzX2luZGV4W3IuY2F0ZT0KZ29yeV0pLG89M0RyLmtl eXdvcmRzfHwiIjtvLmluZGV4T2YoZSk+PTNEMD8oaS5zaG93KCkscy5zaG93KCkpOmkuaGlkZSgp fX0sPQpfcmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5jYXRlZ29yaWVzPTNEe30sdGhpcy5jYXRlZ29y aWVzX2luZGV4PTNEe307dmFyIGU9M0Q9CjAsdD0zRHRoaXMuYXBwLnR5cGVzLmF0dHJpYnV0ZXM7 Zm9yKHZhciBuIGluIHQpe3ZhciByPTNEdFtuXSxpPTNEci5jYXRlZ29yeT0KO3RoaXMuY2F0ZWdv cmllc1tpXXx8KHRoaXMuY2F0ZWdvcmllc1tpXT0zRHt9LHRoaXMuY2F0ZWdvcmllc19pbmRleFtp XT0zRGUrPQorKSx0aGlzLmNhdGVnb3JpZXNbaV1bbl09M0RyfWZvcih2YXIgaSBpbiB0aGlzLmNh dGVnb3JpZXMpe3ZhciBzPTNEJCgnPGRpdiA9CnN0eWxlPTNEImNsZWFyOiBib3RoOyIvPicpO3Mu YXBwZW5kKHRoaXMuX3RlbXBsYXRlX2hlYWRlcih7aWQ6InR5cGVzLWhlYWRlcj0KLSIrdGhpcy5j YXRlZ29yaWVzX2luZGV4W2ldLHRpdGxlOml9KSk7Zm9yKHZhciBuIGluIHRoaXMuY2F0ZWdvcmll c1tpXSl7dmFyPQogcj0zRHRoaXMuY2F0ZWdvcmllc1tpXVtuXSxvPTNEci50aXRsZSsiICgiK3Iu bGlicmFyeSsiKSI7ci56b29tYWJsZSYmKG89M0Q9Cic8c3BhbiBjbGFzcz0zRCJmYSBmYS1zZWFy Y2gtcGx1cyIvPicrbykscy5hcHBlbmQodGhpcy5fdGVtcGxhdGVfaXRlbSh7aWQ6bj0KLHRpdGxl Om8sdXJsOmNvbmZpZy5hcHBfcm9vdCsiY2hhcnRzLyIrdGhpcy5hcHAuY2hhcnRQYXRoKG4pKyIv bG9nby5wbmcifSkpPQp9dGhpcy4kZWwuYXBwZW5kKHMpfX0sX29uY2xpY2s6ZnVuY3Rpb24oZSl7 dmFyIHQ9M0R0aGlzLnZhbHVlKCksbj0zRCQoZS50YXI9CmdldCkuY2xvc2VzdCgiLml0ZW0iKS5h dHRyKCJpZCIpO24hPTNEIiImJm4mJnQhPTNEbiYmdGhpcy52YWx1ZShuKX0sX29uZGJsYz0KbGlj azpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMudmFsdWUoKTt0JiZ0aGlzLm9wdGlvbnMub25kYmxj bGljayYmdGhpcy5vcHRpPQpvbnMub25kYmxjbGljayh0KX0sX3RlbXBsYXRlX2hlYWRlcjpmdW5j dGlvbihlKXtyZXR1cm4nPGRpdiBpZD0zRCInK2UuaWQrJyI9CiBjbGFzcz0zRCJoZWFkZXIiPicr IiZidWxsOyAiK2UudGl0bGUrIjxkaXY+In0sX3RlbXBsYXRlX2l0ZW06ZnVuY3Rpb24oZSl7cj0K ZXR1cm4nPGRpdiBpZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QiaXRlbSI+JysnPGltZyBjbGFzcz0z RCJpbWFnZSIgc3JjPTNEIicrPQplLnVybCsnIj4nKyc8ZGl2IGNsYXNzPTNEInRpdGxlIj4nK2Uu dGl0bGUrIjwvZGl2PiIrIjxkaXY+In19KX0pLGRlZmluZSgicGw9CnVnaW4vdmlld3MvZWRpdG9y IixbIm12Yy91aS91aS10YWJzIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxldCIs Ij0KdXRpbHMvdXRpbHMiLCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2luL21vZGVscy9ncm91 cCIsInBsdWdpbi92aWV3cy9ncm91PQpwIiwicGx1Z2luL3ZpZXdzL3NldHRpbmdzIiwicGx1Z2lu L3ZpZXdzL3R5cGVzIl0sZnVuY3Rpb24oZSx0LG4scixpLHMsbyx1LGE9Cil7cmV0dXJuIEJhY2ti b25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGkscyl7dmFyIG89M0R0aGlzO3Ro aXMuYT0KcHA9M0RpLHRoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLm1lc3NhZ2U9M0Ru ZXcgdC5NZXNzYWdlLHRoaXMucG9ydGxlPQp0PTNEbmV3IG4uVmlldyh7aWNvbjoiZmEtYmFyLWNo YXJ0LW8iLHRpdGxlOiJFZGl0b3IiLG9wZXJhdGlvbnM6e3NhdmU6bmV3IHQ9Ci5CdXR0b25JY29u KHtpY29uOiJmYS1zYXZlIix0b29sdGlwOiJEcmF3IENoYXJ0Iix0aXRsZToiRHJhdyIsb25jbGlj azpmdW5jdD0KaW9uKCl7by5fc2F2ZUNoYXJ0KCl9fSksYmFjazpuZXcgdC5CdXR0b25JY29uKHtp Y29uOiJmYS1jYXJldC1sZWZ0Iix0b29sdGlwPQo6IlJldHVybiB0byBWaWV3ZXIiLHRpdGxlOiJD YW5jZWwiLG9uY2xpY2s6ZnVuY3Rpb24oKXtvLmFwcC5nbygidmlld2VyIiksby49CmFwcC5zdG9y YWdlLmxvYWQoKX19KX19KSx0aGlzLnR5cGVzPTNEbmV3IGEoaSx7b25jaGFuZ2U6ZnVuY3Rpb24o ZSl7dmFyIHQ9Cj0zRG8uYXBwLnR5cGVzLmdldChlKTt0fHxjb25zb2xlLmRlYnVnKCJGQUlMRUQg LSBFZGl0b3I6Om9uY2hhbmdlKCkgLSBDaGFydD0KIHR5cGUgbm90IHN1cHBvcnRlZC4iKSxvLmNo YXJ0LmRlZmluaXRpb249M0R0LG8uY2hhcnQuc2V0dGluZ3MuY2xlYXIoKSxvLmNoPQphcnQuc2V0 KHt0eXBlOmV9KSxvLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKSxjb25zb2xlLmRlYnVnKCJFZGl0 b3I6Om9uY2hhbmc9CmUoKSAtIFN3aXRjaGVkIGNoYXJ0IHR5cGUuIil9LG9uZGJsY2xpY2s6ZnVu Y3Rpb24oZSl7by5fc2F2ZUNoYXJ0KCl9fSksdGhpcz0KLnRhYnM9M0RuZXcgZS5WaWV3KHt0aXRs ZV9uZXc6IkFkZCBEYXRhIixvbm5ldzpmdW5jdGlvbigpe3ZhciBlPTNEby5fYWRkR3JvPQp1cE1v ZGVsKCk7by50YWJzLnNob3coZS5pZCl9fSksdGhpcy50aXRsZT0zRG5ldyB0LklucHV0KHtwbGFj ZWhvbGRlcjoiQ2hhcnQ9CiB0aXRsZSIsb25jaGFuZ2U6ZnVuY3Rpb24oKXtvLmNoYXJ0LnNldCgi dGl0bGUiLG8udGl0bGUudmFsdWUoKSl9fSk7dmFyIGY9Cj0zRCQoIjxkaXYvPiIpO2YuYXBwZW5k KHIud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJQcm92aWRlIGEgY2hhcnQgdGl0bGU6Ij0KfSkp LiRlbCkpLGYuYXBwZW5kKHRoaXMudGl0bGUuJGVsKSxmLmFwcGVuZCgkKCI8ZGl2Lz4iKS5hZGRD bGFzcygidWktdGFibGUtPQpmb3JtLWluZm8iKS5odG1sKCJUaGlzIHRpdGxlIHdpbGwgYXBwZWFy IGluIHRoZSBsaXN0IG9mICdTYXZlZCBWaXN1YWxpemF0aW89Cm5zJy4gQ2hhcnRzIGFyZSBzYXZl ZCB1cG9uIGNyZWF0aW9uLiIpKSxmLmFwcGVuZChyLndyYXAoKSksZi5hcHBlbmQoci53cmFwKD0K dGhpcy50eXBlcy4kZWwpKSx0aGlzLnRhYnMuYWRkKHtpZDoibWFpbiIsdGl0bGU6IlN0YXJ0Iiwk ZWw6Zn0pLHRoaXMuc2V0dGluPQpncz0zRG5ldyB1KHRoaXMuYXBwKSx0aGlzLnRhYnMuYWRkKHtp ZDoic2V0dGluZ3MiLHRpdGxlOiJDb25maWd1cmF0aW9uIiwkZWw9Cjp0aGlzLnNldHRpbmdzLiRl bH0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZXNzYWdlLiRlbCksdGhpcy5wb3J0bGV0LmFw cD0KZW5kKHRoaXMudGFicy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBvcnRsZXQuJGVsKSx0 aGlzLnRhYnMuaGlkZU9wZXJhdGlvPQpuKCJiYWNrIik7dmFyIG89M0R0aGlzO3RoaXMuY2hhcnQu b24oImNoYW5nZTp0aXRsZSIsZnVuY3Rpb24oZSl7by5fcmVmcmVzaFQ9Cml0bGUoKX0pLHRoaXMu Y2hhcnQub24oImNoYW5nZTp0eXBlIixmdW5jdGlvbihlKXtvLnR5cGVzLnZhbHVlKGUuZ2V0KCJ0 eXBlIj0KKSl9KSx0aGlzLmNoYXJ0Lm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVzZXRDaGFy dCgpfSksdGhpcy5hcHAuY2hhcnQub24oPQoicmVkcmF3IixmdW5jdGlvbihlKXtvLnBvcnRsZXQu c2hvd09wZXJhdGlvbigiYmFjayIpfSksdGhpcy5hcHAuY2hhcnQuZ3JvdXA9CnMub24oImFkZCIs ZnVuY3Rpb24oZSl7by5fYWRkR3JvdXAoZSl9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub24oInJl bW92ZSIsZj0KdW5jdGlvbihlKXtvLl9yZW1vdmVHcm91cChlKX0pLHRoaXMuYXBwLmNoYXJ0Lmdy b3Vwcy5vbigicmVzZXQiLGZ1bmN0aW9uKGUpPQp7by5fcmVtb3ZlQWxsR3JvdXBzKCl9KSx0aGlz LmFwcC5jaGFydC5ncm91cHMub24oImNoYW5nZTprZXkiLGZ1bmN0aW9uKGUpe289Ci5fcmVmcmVz aEdyb3VwS2V5KCl9KSx0aGlzLl9yZXNldENoYXJ0KCl9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLiRl bC5zaG93KCl9LD0KaGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhpZGUoKX0sX3JlZnJlc2hUaXRs ZTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcy5jaGFyPQp0LmdldCgidGl0bGUiKTt0aGlzLnBvcnRs ZXQudGl0bGUoZSksdGhpcy50aXRsZS52YWx1ZSgpIT0zRGUmJnRoaXMudGl0bGUudmE9Cmx1ZShl KX0sX3JlZnJlc2hHcm91cEtleTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcyx0PTNEMDt0aGlzLmNo YXJ0Lmdyb3Vwcy5lYT0KY2goZnVuY3Rpb24obil7dmFyIHI9M0RuLmdldCgia2V5IiwiIik7cj0z RD0zRCIiJiYocj0zRCJEYXRhIGxhYmVsIiksZS50YWJzPQoudGl0bGUobi5pZCwrK3QrIjogIity KX0pfSxfYWRkR3JvdXBNb2RlbDpmdW5jdGlvbigpe3ZhciBlPTNEbmV3IHMoe2lkOnIudXU9Cmlk KCl9KTtyZXR1cm4gdGhpcy5jaGFydC5ncm91cHMuYWRkKGUpLGV9LF9hZGRHcm91cDpmdW5jdGlv bihlKXt2YXIgdD0zRHRoaT0KcyxuPTNEbmV3IG8odGhpcy5hcHAse2dyb3VwOmV9KTt0aGlzLnRh YnMuYWRkKHtpZDplLmlkLCRlbDpuLiRlbCxvbmRlbDpmdW5jPQp0aW9uKCl7dC5jaGFydC5ncm91 cHMucmVtb3ZlKGUuaWQpfX0pLHRoaXMuX3JlZnJlc2hHcm91cEtleSgpLHRoaXMuY2hhcnQuc2U9 CnQoIm1vZGlmaWVkIiwhMCl9LF9yZW1vdmVHcm91cDpmdW5jdGlvbihlKXt0aGlzLnRhYnMuZGVs KGUuaWQpLHRoaXMuX3JlZnJlcz0KaEdyb3VwS2V5KCksdGhpcy5jaGFydC5zZXQoIm1vZGlmaWVk IiwhMCl9LF9yZW1vdmVBbGxHcm91cHM6ZnVuY3Rpb24oZSl7dGhpPQpzLnRhYnMuZGVsUmVtb3Zh YmxlKCl9LF9yZXNldENoYXJ0OmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zZXQoImlkIixyLnV1aWQo KSk9Cix0aGlzLmNoYXJ0LnNldCgidHlwZSIsIm52ZDNfYmFyIiksdGhpcy5jaGFydC5zZXQoImRh dGFzZXRfaWQiLHRoaXMuYXBwLm9wdD0KaW9ucy5jb25maWcuZGF0YXNldF9pZCksdGhpcy5jaGFy dC5zZXQoInRpdGxlIiwiTmV3IENoYXJ0IiksdGhpcy5wb3J0bGV0LmhpPQpkZU9wZXJhdGlvbigi YmFjayIpfSxfc2F2ZUNoYXJ0OmZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zZXQoe3R5cGU6dGhpcy50 eXBlcy49CnZhbHVlKCksdGl0bGU6dGhpcy50aXRsZS52YWx1ZSgpLGRhdGU6ci50aW1lKCl9KTtp Zih0aGlzLmNoYXJ0Lmdyb3Vwcy5sZW5ndD0KaD0zRD0zRDApe3RoaXMubWVzc2FnZS51cGRhdGUo e21lc3NhZ2U6IlBsZWFzZSBzZWxlY3QgZGF0YSBjb2x1bW5zIGJlZm9yZSBkPQpyYXdpbmcgdGhl IGNoYXJ0LiJ9KTt2YXIgZT0zRHRoaXMuX2FkZEdyb3VwTW9kZWwoKTt0aGlzLnRhYnMuc2hvdyhl LmlkKTtyZXQ9CnVybn12YXIgdD0zRHRoaXMsbj0zRCEwLGk9M0R0aGlzLmNoYXJ0LmRlZmluaXRp b247dGhpcy5jaGFydC5ncm91cHMuZWFjaChmdT0KbmN0aW9uKGUpe2lmKCFuKXJldHVybjtmb3Io dmFyIHIgaW4gaS5jb2x1bW5zKWlmKGUuYXR0cmlidXRlc1tyXT0zRD0zRCJudWxsPQoiKXt0Lm1l c3NhZ2UudXBkYXRlKHtzdGF0dXM6ImRhbmdlciIsbWVzc2FnZToiVGhpcyBjaGFydCB0eXBlIHJl cXVpcmVzIGNvbHU9Cm1uIHR5cGVzIG5vdCBmb3VuZCBpbiB5b3VyIHRhYnVsYXIgZmlsZS4ifSks dC50YWJzLnNob3coZS5pZCksbj0zRCExO3JldHVybj0KfX0pO2lmKCFuKXJldHVybjt0aGlzLmFw cC5nbygidmlld2VyIik7dmFyIHQ9M0R0aGlzO3RoaXMuYXBwLmRlZmVycmVkLmV4ZWN1PQp0ZShm dW5jdGlvbigpe3QuYXBwLnN0b3JhZ2Uuc2F2ZSgpLHQuY2hhcnQudHJpZ2dlcigicmVkcmF3Iil9 KX19KX0pLGRlZmluZSg9CiJwbHVnaW4vbW9kZWxzL2NvbmZpZyIsW10sZnVuY3Rpb24oKXtyZXR1 cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkZWZhdWx0cz0KOntxdWVyeV9saW1pdDoxZTQscXVl cnlfdGltZW91dDoxMDB9fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvZm9ybXMvZGVmYXVsPQp0 IixbXSxmdW5jdGlvbigpe3JldHVybnt0aXRsZToiIixjYXRlZ29yeToiIixsaWJyYXJ5OiIiLHRh ZzoiIixrZXl3b3JkczoiIiw9CnNldHRpbmdzOntzZXBhcmF0b3JfeDp7dGl0bGU6IlggYXhpcyIs dHlwZToic2VwYXJhdG9yIn0seF9heGlzX2xhYmVsOnt0aXRsZT0KOiJBeGlzIGxhYmVsIixpbmZv OiJQcm92aWRlIGEgbGFiZWwgZm9yIHRoZSBheGlzLiIsdHlwZToidGV4dCIsaW5pdDoiWC1heGlz PQoiLHBsYWNlaG9sZGVyOiJBeGlzIGxhYmVsIn0seF9heGlzX3R5cGU6e3RpdGxlOiJBeGlzIHZh bHVlIHR5cGUiLGluZm86IlNlbGU9CmN0IHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBheGlzLiIsdHlw ZToic2VsZWN0Iixpbml0OiJhdXRvIixkYXRhOlt7bGFiZWw6Ii0tID0KRG8gbm90IHNob3cgdmFs dWVzIC0tIix2YWx1ZToiaGlkZSIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhpc19wcmVjaXNpb24i XX19PQose2xhYmVsOiJBdXRvIix2YWx1ZToiYXV0byIsb3BlcmF0aW9uczp7aGlkZTpbInhfYXhp c19wcmVjaXNpb24iXX19LHtsYWJlbDo9CiJGbG9hdCIsdmFsdWU6ImYiLG9wZXJhdGlvbnM6e3No b3c6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZWw6IkV4cG9uZW50Ij0KLHZhbHVlOiJlIixv cGVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJJbnRlZ2VyIix2 YWx1ZToiPQpkIixvcGVyYXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVs OiJQZXJjZW50YWdlIix2YWx1ZToicCIsb3A9CmVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNp c2lvbiJdfX0se2xhYmVsOiJTSS1wcmVmaXgiLHZhbHVlOiJzIixvcGVyYXRpbz0KbnM6e2hpZGU6 WyJ4X2F4aXNfcHJlY2lzaW9uIl19fV19LHhfYXhpc19wcmVjaXNpb246e3RpdGxlOiJBeGlzIHRp Y2sgZm9ybWF0PQoiLGluZm86IlNlbGVjdCB0aGUgdGljayBmb3JtYXQgZm9yIHRoZSBheGlzLiIs dHlwZToic2VsZWN0Iixpbml0OiIxIixkYXRhOls9CntsYWJlbDoiMC4wMDAwMSIsdmFsdWU6IjUi fSx7bGFiZWw6IjAuMDAwMSIsdmFsdWU6IjQifSx7bGFiZWw6IjAuMDAxIix2YWx1ZT0KOiIzIn0s e2xhYmVsOiIwLjAxIix2YWx1ZToiMiJ9LHtsYWJlbDoiMC4xIix2YWx1ZToiMSJ9LHtsYWJlbDoi MSIsdmFsdWU6IjAiPQp9XX0sc2VwYXJhdG9yX3k6e3RpdGxlOiJZIGF4aXMiLHR5cGU6InNlcGFy YXRvciJ9LHlfYXhpc19sYWJlbDp7dGl0bGU6IkF4aXM9CiBsYWJlbCIsaW5mbzoiUHJvdmlkZSBh IGxhYmVsIGZvciB0aGUgYXhpcy4iLHR5cGU6InRleHQiLGluaXQ6IlktYXhpcyIscGxhYz0KZWhv bGRlcjoiQXhpcyBsYWJlbCJ9LHlfYXhpc190eXBlOnt0aXRsZToiQXhpcyB2YWx1ZSB0eXBlIixp bmZvOiJTZWxlY3QgdGhlPQogdmFsdWUgdHlwZSBvZiB0aGUgYXhpcy4iLHR5cGU6InNlbGVjdCIs aW5pdDoiYXV0byIsZGF0YTpbe2xhYmVsOiItLSBEbyBub3Q9CiBzaG93IHZhbHVlcyAtLSIsdmFs dWU6ImhpZGUiLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzaW9uIl19fSx7bGFiZT0K bDoiQXV0byIsdmFsdWU6ImF1dG8iLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4aXNfcHJlY2lzaW9u Il19fSx7bGFiZWw6IkZsb2F0PQoiLHZhbHVlOiJmIixvcGVyYXRpb25zOntzaG93OlsieV9heGlz X3ByZWNpc2lvbiJdfX0se2xhYmVsOiJFeHBvbmVudCIsdmFsdWU9CjoiZSIsb3BlcmF0aW9uczp7 c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiSW50ZWdlciIsdmFsdWU6ImQiLG9w ZT0KcmF0aW9uczp7aGlkZTpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJlbDoiUGVyY2VudGFn ZSIsdmFsdWU6InAiLG9wZXJhdGlvPQpuczp7c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHts YWJlbDoiU0ktcHJlZml4Iix2YWx1ZToicyIsb3BlcmF0aW9uczp7aGk9CmRlOlsieV9heGlzX3By ZWNpc2lvbiJdfX1dfSx5X2F4aXNfcHJlY2lzaW9uOnt0aXRsZToiQXhpcyB0aWNrIGZvcm1hdCIs aW5mbz0KOiJTZWxlY3QgdGhlIHRpY2sgZm9ybWF0IGZvciB0aGUgYXhpcy4iLHR5cGU6InNlbGVj dCIsaW5pdDoiMSIsZGF0YTpbe2xhYmVsPQo6IjAuMDAwMDEiLHZhbHVlOiI1In0se2xhYmVsOiIw LjAwMDEiLHZhbHVlOiI0In0se2xhYmVsOiIwLjAwMSIsdmFsdWU6IjMifSw9CntsYWJlbDoiMC4w MSIsdmFsdWU6IjIifSx7bGFiZWw6IjAuMSIsdmFsdWU6IjEifSx7bGFiZWw6IjEiLHZhbHVlOiIw In1dfSxzZT0KcGFyYXRvcl9sZWdlbmQ6e3RpdGxlOiJPdGhlcnMiLHR5cGU6InNlcGFyYXRvciJ9 LHNob3dfbGVnZW5kOnt0aXRsZToiU2hvdyBsPQplZ2VuZCIsaW5mbzoiV291bGQgeW91IGxpa2Ug dG8gYWRkIGEgbGVnZW5kPyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6InRydWU9CiIsZGF0YTpb e2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZhbHNlIn1dfSx1 c2VfcGFuZWxzOj0Ke3RpdGxlOiJVc2UgbXVsdGktcGFuZWxzIixpbmZvOiJXb3VsZCB5b3UgbGlr ZSB0byBzZXBhcmF0ZSB5b3VyIGRhdGEgaW50byBpPQpuZGl2aWR1YWwgcGFuZWxzPyIsdHlwZToi cmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6IlllcyIsdmFsdWU9CjoidHJ1 ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX19fX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24g dChlLHQpe3JldHVybj0KKG5ldyBEYXRlKHQsZSsxLDApKS5nZXREYXRlKCl9ZnVuY3Rpb24gbihl LHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXt2YXIgPQpvPTNEZShyKSx1PTNEW107bzxyJiZ0 KG8pO2lmKHM+MSl3aGlsZShvPGkpe3ZhciBhPTNEbmV3IERhdGUoK28pO24oYSklcz0zRD0KPTNE PTNEMCYmdS5wdXNoKGEpLHQobyl9ZWxzZSB3aGlsZShvPGkpdS5wdXNoKG5ldyBEYXRlKCtvKSks dChvKTtyZXR1cm4gdX19PQp2YXIgZT0zRHdpbmRvdy5udnx8e307ZS52ZXJzaW9uPTNEIjEuMS4x NWIiLGUuZGV2PTNEITAsd2luZG93Lm52PTNEZSxlLnRvb2w9CnRpcD0zRGUudG9vbHRpcHx8e30s ZS51dGlscz0zRGUudXRpbHN8fHt9LGUubW9kZWxzPTNEZS5tb2RlbHN8fHt9LGUuY2hhcnRzPQo9 M0R7fSxlLmdyYXBocz0zRFtdLGUubG9ncz0zRHt9LGUuZGlzcGF0Y2g9M0RkMy5kaXNwYXRjaCgi cmVuZGVyX3N0YXJ0IiwicmU9Cm5kZXJfZW5kIiksZS5kZXYmJihlLmRpc3BhdGNoLm9uKCJyZW5k ZXJfc3RhcnQiLGZ1bmN0aW9uKHQpe2UubG9ncy5zdGFydFRpbT0KZT0zRCsobmV3IERhdGUpfSks ZS5kaXNwYXRjaC5vbigicmVuZGVyX2VuZCIsZnVuY3Rpb24odCl7ZS5sb2dzLmVuZFRpbWU9M0Qr PQoobmV3IERhdGUpLGUubG9ncy50b3RhbFRpbWU9M0RlLmxvZ3MuZW5kVGltZS1lLmxvZ3Muc3Rh cnRUaW1lLGUubG9nKCJ0b3RhbCI9CixlLmxvZ3MudG90YWxUaW1lKX0pKSxlLmxvZz0zRGZ1bmN0 aW9uKCl7aWYoZS5kZXYmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZz0KLmFwcGx5KWNvbnNvbGUu bG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTtlbHNlIGlmKGUuZGV2JiZ0eXBlb2YgY29uc29s ZS5sPQpvZz0zRD0zRCJmdW5jdGlvbiImJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKXt2YXIgdD0z REZ1bmN0aW9uLnByb3RvdHlwZS5iaW49CmQuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlKTt0LmFw cGx5KGNvbnNvbGUsYXJndW1lbnRzKX1yZXR1cm4gYXJndW1lbnRzW2FyZz0KdW1lbnRzLmxlbmd0 aC0xXX0sZS5yZW5kZXI9M0RmdW5jdGlvbihuKXtuPTNEbnx8MSxlLnJlbmRlci5hY3RpdmU9M0Qh MCxlLmRpPQpzcGF0Y2gucmVuZGVyX3N0YXJ0KCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0 LHI7Zm9yKHZhciBpPTNEMDtpPG4mJihyPQo9M0RlLnJlbmRlci5xdWV1ZVtpXSk7aSsrKXQ9M0Ry LmdlbmVyYXRlKCksdHlwZW9mIHIuY2FsbGJhY2s9M0Q9M0R0eXBlb2YgRnU9Cm5jdGlvbiYmci5j YWxsYmFjayh0KSxlLmdyYXBocy5wdXNoKHQpO2UucmVuZGVyLnF1ZXVlLnNwbGljZSgwLGkpLGUu cmVuZGVyLj0KcXVldWUubGVuZ3RoP3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTooZS5k aXNwYXRjaC5yZW5kZXJfZW5kKCksZS5yZW5kPQplci5hY3RpdmU9M0QhMSl9LDApfSxlLnJlbmRl ci5hY3RpdmU9M0QhMSxlLnJlbmRlci5xdWV1ZT0zRFtdLGUuYWRkR3JhcGg9M0Q9CmZ1bmN0aW9u KHQpe3R5cGVvZiBhcmd1bWVudHNbMF09M0Q9M0R0eXBlb2YgRnVuY3Rpb24mJih0PTNEe2dlbmVy YXRlOmFyZ3VtZT0KbnRzWzBdLGNhbGxiYWNrOmFyZ3VtZW50c1sxXX0pLGUucmVuZGVyLnF1ZXVl LnB1c2godCksZS5yZW5kZXIuYWN0aXZlfHxlLnJlPQpuZGVyKCl9LGUuaWRlbnRpdHk9M0RmdW5j dGlvbihlKXtyZXR1cm4gZX0sZS5zdHJpcD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnI9CmVwbGFj ZSgvKFxzfCYpL2csIiIpfSxkMy50aW1lLm1vbnRoRW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIG5l dyBEYXRlKGUuZ2V0Rj0KdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwwKX0sZDMudGltZS5tb250aEVu ZHM9M0RuKGQzLnRpbWUubW9udGhFbmQsZnVuY3Rpb24oPQplKXtlLnNldFVUQ0RhdGUoZS5nZXRV VENEYXRlKCkrMSksZS5zZXREYXRlKHQoZS5nZXRNb250aCgpKzEsZS5nZXRGdWxsWWVhcig9Cikp KX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLGUuaW50ZXJhY3RpdmVHdWlkZWxp bmU9M0RmdW5jdGlvbigpez0KZnVuY3Rpb24gYyhvKXtvLmVhY2goZnVuY3Rpb24obyl7ZnVuY3Rp b24gZygpe3ZhciBlPTNEZDMubW91c2UodGhpcyksbj0zRGVbPQowXSxyPTNEZVsxXSxvPTNEITAs YT0zRCExO2wmJihuPTNEZDMuZXZlbnQub2Zmc2V0WCxyPTNEZDMuZXZlbnQub2Zmc2V0WSxkMy49 CmV2ZW50LnRhcmdldC50YWdOYW1lIT0zRD0zRCJzdmciJiYobz0zRCExKSxkMy5ldmVudC50YXJn ZXQuY2xhc3NOYW1lLmJhc2VWYT0KbC5tYXRjaCgibnYtbGVnZW5kIikmJihhPTNEITApKSxvJiYo bi09M0RpLmxlZnQsci09M0RpLnRvcCk7aWYobjwwfHxyPDB8fG4+PQpwfHxyPmR8fGQzLmV2ZW50 LnJlbGF0ZWRUYXJnZXQmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQub3duZXJTVkdFbGVtZW50PTNE PQo9M0Q9M0R1bmRlZmluZWR8fGEpe2lmKGwmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQmJmQzLmV2 ZW50LnJlbGF0ZWRUYXJnZXQub3c9Cm5lclNWR0VsZW1lbnQ9M0Q9M0Q9M0R1bmRlZmluZWQmJmQz LmV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NOYW1lLm1hdGNoKHQubj0KdlBvaW50ZXJFdmVudHND bGFzcykpcmV0dXJuO3UuZWxlbWVudE1vdXNlb3V0KHttb3VzZVg6bixtb3VzZVk6cn0pLGMucmVu ZGVyPQpHdWlkZUxpbmUobnVsbCk7cmV0dXJufXZhciBmPTNEcy5pbnZlcnQobik7dS5lbGVtZW50 TW91c2Vtb3ZlKHttb3VzZVg6bixtb3U9CnNlWTpyLHBvaW50WFZhbHVlOmZ9KSxkMy5ldmVudC50 eXBlPTNEPTNEPTNEImRibGNsaWNrIiYmdS5lbGVtZW50RGJsY2xpY2soez0KbW91c2VYOm4sbW91 c2VZOnIscG9pbnRYVmFsdWU6Zn0pfXZhciBoPTNEZDMuc2VsZWN0KHRoaXMpLHA9M0RufHw5NjAs ZD0zRHJ8PQp8NDAwLHY9M0RoLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWludGVyYWN0aXZlTGlu ZUxheWVyIikuZGF0YShbb10pLG09M0R2LmU9Cm50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIiBudi13cmFwIG52LWludGVyYWN0aXZlTGluZUxheWVyIik7bS5hcHBlbj0KZCgiZyIpLmF0 dHIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUiKTtpZighZilyZXR1cm47Zi5vbigi bW91c2Vtb3ZlPQoiLGcsITApLm9uKCJtb3VzZW91dCIsZywhMCkub24oImRibGNsaWNrIixnKSxj LnJlbmRlckd1aWRlTGluZT0zRGZ1bmN0aW9uKHQ9Cil7aWYoIWEpcmV0dXJuO3ZhciBuPTNEdi5z ZWxlY3QoIi5udi1pbnRlcmFjdGl2ZUd1aWRlTGluZSIpLnNlbGVjdEFsbCgibGluZT0KIikuZGF0 YSh0IT0zRG51bGw/W2UudXRpbHMuTmFOdG9aZXJvKHQpXTpbXSxTdHJpbmcpO24uZW50ZXIoKS5h cHBlbmQoImxpbmUiPQopLmF0dHIoImNsYXNzIiwibnYtZ3VpZGVsaW5lIikuYXR0cigieDEiLGZ1 bmN0aW9uKGUpe3JldHVybiBlfSkuYXR0cigieDIiLGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5h dHRyKCJ5MSIsZCkuYXR0cigieTIiLDApLG4uZXhpdCgpLnJlbW92ZSgpfX0pfXZhciB0PQo9M0Rl Lm1vZGVscy50b29sdGlwKCksbj0zRG51bGwscj0zRG51bGwsaT0zRHtsZWZ0OjAsdG9wOjB9LHM9 M0RkMy5zY2FsZS5saW49CmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZDMuZGlzcGF0 Y2goImVsZW1lbnRNb3VzZW1vdmUiLCJlbGVtZW50TW91cz0KZW91dCIsImVsZW1lbnREYmxjbGlj ayIpLGE9M0QhMCxmPTNEbnVsbCxsPTNEbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNPQpT SUUiKSE9M0Q9M0QtMTtyZXR1cm4gYy5kaXNwYXRjaD0zRHUsYy50b29sdGlwPTNEdCxjLm1hcmdp bj0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGkubD0KZWZ0PTNEdHlwZW9mIGUubGVm dCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6aS5sZWZ0LGMpOml9LGMud2lkdGg9M0RmdW5jdGlvbihl PQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxjKTpufSxjLmhlaWdodD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWU9Cm50cy5sZW5ndGg/KHI9M0RlLGMpOnJ9LGMueFNjYWxlPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Cj0zRGUsYyk6c30sYy5zaG93 R3VpZGVMaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLGMp Oj0KYX0sYy5zdmdDb250YWluZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUsYyk6Zn0sY30sZS5pPQpudGVyYWN0aXZlQmlzZWN0PTNEZnVuY3Rpb24oZSx0LG4p e2lmKCFlIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIG51bGw7dHlwZW89CmYgbiE9M0QiZnVuY3Rp b24iJiYobj0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueH0pO3ZhciByPTNEZDMuYmlzZWN0b3Io bikubD0KZWZ0LGk9M0RkMy5tYXgoWzAscihlLHQpLTFdKSxzPTNEbihlW2ldLGkpO3R5cGVvZiBz PTNEPTNEInVuZGVmaW5lZCImJihzPTNEPQppKTtpZihzPTNEPTNEPTNEdClyZXR1cm4gaTt2YXIg bz0zRGQzLm1pbihbaSsxLGUubGVuZ3RoLTFdKSx1PTNEbihlW29dLG8pO3I9CmV0dXJuIHR5cGVv ZiB1PTNEPTNEInVuZGVmaW5lZCImJih1PTNEbyksTWF0aC5hYnModS10KT49M0RNYXRoLmFicyhz LXQpP2k6bz0KfSxlLm5lYXJlc3RWYWx1ZUluZGV4PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNE SW5maW5pdHksaT0zRG51bGw7cmV0dXJuIGUuPQpmb3JFYWNoKGZ1bmN0aW9uKGUscyl7dmFyIG89 M0RNYXRoLmFicyh0LWUpO288PTNEciYmbzxuJiYocj0zRG8saT0zRHMpfSksaX09CixmdW5jdGlv bigpe3dpbmRvdy5udi50b29sdGlwPTNEe30sd2luZG93Lm52Lm1vZGVscy50b29sdGlwPTNEZnVu Y3Rpb24oKXtmdT0KbmN0aW9uIHkoKXtpZihhKXt2YXIgZT0zRGQzLnNlbGVjdChhKTtlLm5vZGUo KS50YWdOYW1lIT0zRD0zRCJzdmciJiYoZT0zRGUuPQpzZWxlY3QoInN2ZyIpKTt2YXIgdD0zRGUu bm9kZSgpP2UuYXR0cigidmlld0JveCIpOm51bGw7aWYodCl7dD0zRHQuc3BsaXQoIiA9CiIpO3Zh ciBuPTNEcGFyc2VJbnQoZS5zdHlsZSgid2lkdGgiKSkvdFsyXTtsLmxlZnQ9M0RsLmxlZnQqbixs LnRvcD0zRGwudG9wKj0Kbn19fWZ1bmN0aW9uIGIoZSl7dmFyIHQ7YT90PTNEZDMuc2VsZWN0KGEp OnQ9M0RkMy5zZWxlY3QoImJvZHkiKTt2YXIgbj0zRHQuPQpzZWxlY3QoIi5udnRvb2x0aXAiKTty ZXR1cm4gbi5ub2RlKCk9M0Q9M0Q9M0RudWxsJiYobj0zRHQuYXBwZW5kKCJkaXYiKS5hdHQ9CnIo ImNsYXNzIiwibnZ0b29sdGlwICIrKHU/dToieHktdG9vbHRpcCIpKS5hdHRyKCJpZCIsaCkpLG4u bm9kZSgpLmlubmVySFRNTD0KPTNEZSxuLnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKS5z dHlsZSgib3BhY2l0eSIsMCksbi5zZWxlY3RBbGwoImRpdiwgPQp0YWJsZSwgdGQsIHRyIikuY2xh c3NlZChwLCEwKSxuLmNsYXNzZWQocCwhMCksbi5ub2RlKCl9ZnVuY3Rpb24gdygpe2lmKCFjKXI9 CmV0dXJuO2lmKCFnKG4pKXJldHVybjt5KCk7dmFyIHQ9M0RsLmxlZnQsdT0zRG8hPTNEbnVsbD9v OmwudG9wLGg9M0RiKG0obikpOz0KZj0zRGg7aWYoYSl7dmFyIHA9M0RhLmdldEVsZW1lbnRzQnlU YWdOYW1lKCJzdmciKVswXSxkPTNEcD9wLmdldEJvdW5kaW5nQ2xpPQplbnRSZWN0KCk6YS5nZXRC b3VuZGluZ0NsaWVudFJlY3QoKSx2PTNEe2xlZnQ6MCx0b3A6MH07aWYocCl7dmFyIEU9M0RwLmdl dEI9Cm91bmRpbmdDbGllbnRSZWN0KCksUz0zRGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD0z REUudG9wO2lmKHg8MCl7dmFyIFQ9Cj0zRGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7eD0zRE1h dGguYWJzKHgpPlQuaGVpZ2h0PzA6eH12LnRvcD0zRE1hdGguYWJzKD0KeC1TLnRvcCksdi5sZWZ0 PTNETWF0aC5hYnMoRS5sZWZ0LVMubGVmdCl9dCs9M0RhLm9mZnNldExlZnQrdi5sZWZ0LTIqYS5z Y3JvPQpsbExlZnQsdSs9M0RhLm9mZnNldFRvcCt2LnRvcC0yKmEuc2Nyb2xsVG9wfXJldHVybiBz JiZzPjAmJih1PTNETWF0aC5mbG9vcig9CnUvcykqcyksZS50b29sdGlwLmNhbGNUb29sdGlwUG9z aXRpb24oW3QsdV0scixpLGgpLHd9dmFyIHQ9M0RudWxsLG49M0RudWxsLD0Kcj0zRCJ3IixpPTNE NTAscz0zRDI1LG89M0RudWxsLHU9M0RudWxsLGE9M0RudWxsLGY9M0RudWxsLGw9M0R7bGVmdDpu dWxsLHRvPQpwOm51bGx9LGM9M0QhMCxoPTNEIm52dG9vbHRpcC0iK01hdGguZmxvb3IoTWF0aC5y YW5kb20oKSoxZTUpLHA9M0QibnYtcG9pbnQ9CmVyLWV2ZW50cy1ub25lIixkPTNEZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZX0sdj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlfSxtPTNEZj0KdW5jdGlvbihl KXtpZih0IT0zRG51bGwpcmV0dXJuIHQ7aWYoZT0zRD0zRG51bGwpcmV0dXJuIiI7dmFyIG49M0Rk My5zZWxlY3QoPQpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpKSxyPTNEbi5zZWxlY3RB bGwoInRoZWFkIikuZGF0YShbZV0pLmVudGVyKCk9Ci5hcHBlbmQoInRoZWFkIik7ci5hcHBlbmQo InRyIikuYXBwZW5kKCJ0ZCIpLmF0dHIoImNvbHNwYW4iLDMpLmFwcGVuZCgic3Rybz0KbmciKS5j bGFzc2VkKCJ4LXZhbHVlIiwhMCkuaHRtbCh2KGUudmFsdWUpKTt2YXIgaT0zRG4uc2VsZWN0QWxs KCJ0Ym9keSIpLmRhPQp0YShbZV0pLmVudGVyKCkuYXBwZW5kKCJ0Ym9keSIpLHM9M0RpLnNlbGVj dEFsbCgidHIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUuc2VyaWVzfSkuZW50ZXIoKS5h cHBlbmQoInRyIikuY2xhc3NlZCgiaGlnaGxpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4gZT0KLmhp Z2hsaWdodH0pO3MuYXBwZW5kKCJ0ZCIpLmNsYXNzZWQoImxlZ2VuZC1jb2xvci1ndWlkZSIsITAp LmFwcGVuZCgiZGl2IikuPQpzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsZnVuY3Rpb24oZSl7cmV0 dXJuIGUuY29sb3J9KSxzLmFwcGVuZCgidGQiKS5jbGFzc2U9CmQoImtleSIsITApLmh0bWwoZnVu Y3Rpb24oZSl7cmV0dXJuIGUua2V5fSkscy5hcHBlbmQoInRkIikuY2xhc3NlZCgidmFsdWUiLD0K ITApLmh0bWwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlLnZhbHVlLHQpfSkscy5zZWxlY3RBbGwo InRkIikuZWFjaChmdW5jdGlvPQpuKGUpe2lmKGUuaGlnaGxpZ2h0KXt2YXIgdD0zRGQzLnNjYWxl LmxpbmVhcigpLmRvbWFpbihbMCwxXSkucmFuZ2UoWyIjZmZmIiw9CmUuY29sb3JdKSxuPTNELjY7 ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJib3JkZXItYm90dG9tLWNvbG9yIix0KG4pKS5zdHlsZSgi Yj0Kb3JkZXItdG9wLWNvbG9yIix0KG4pKX19KTt2YXIgbz0zRG4ubm9kZSgpLm91dGVySFRNTDty ZXR1cm4gZS5mb290ZXIhPTNEPTNEPQp1bmRlZmluZWQmJihvKz0zRCI8ZGl2IGNsYXNzPTNEJ2Zv b3Rlcic+IitlLmZvb3RlcisiPC9kaXY+Iiksb30sZz0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGUm JmUuc2VyaWVzJiZlLnNlcmllcy5sZW5ndGg+MD8hMDohMX07cmV0dXJuIHcubnZQb2ludGVyRXZl bnRzQz0KbGFzcz0zRHAsdy5jb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHQ9M0RlLHcpOnR9LHcudG9vPQpsdGlwRWxlbT0zRGZ1bmN0aW9uKCl7cmV0dXJuIGZ9 LHcuY29udGVudEdlbmVyYXRvcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5n dGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKG09M0RlKSx3KTptfSx3LmRhdGE9M0RmdW5j dGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSx3KTpufSx3LmdyYXZpdHk9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3LmRp c3RhbmNlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Cj0zRGUsdyk6 aX0sdy5zbmFwRGlzdGFuY2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cz0zRGUsdyk6cz0KfSx3LmNsYXNzZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odT0zRGUsdyk6dX0sdy5jaGFydENvbnRhPQppbmVyPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9LHcucG9zaXRpb249M0RmdW5jdGk9Cm9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRl ZmluZWQiP2UubGVmdD0KOmwubGVmdCxsLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVk Ij9lLnRvcDpsLnRvcCx3KTpsfSx3LmZpeGVkVG9wPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obz0zRGUsdyk6b30sdy5lbmFibGVkPTNEZnVuY3Rpb24oZSl7cmU9CnR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsdyk6Y30sdy52YWx1ZUZvcm1hdHRlcj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9u IiYmKGQ9M0RlKSx3KTpkfSx3LmhlYWRlckZvcm1hdHRlcj0KPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKHY9M0RlKSx3PQop OnZ9LHcuaWQ9M0RmdW5jdGlvbigpe3JldHVybiBofSx3fSxlLnRvb2x0aXAuc2hvdz0zRGZ1bmN0 aW9uKHQsbixyLGkscyxvKXs9CnZhciB1PTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7 dS5jbGFzc05hbWU9M0QibnZ0b29sdGlwICIrKG8/bzoieHktdD0Kb29sdGlwIik7dmFyIGE9M0Rz O2lmKCFzfHxzLnRhZ05hbWUubWF0Y2goL2d8c3ZnL2kpKWE9M0Rkb2N1bWVudC5nZXRFbGVtZW50 PQpzQnlUYWdOYW1lKCJib2R5IilbMF07dS5zdHlsZS5sZWZ0PTNEMCx1LnN0eWxlLnRvcD0zRDAs dS5zdHlsZS5vcGFjaXR5PTNEMCw9CnUuaW5uZXJIVE1MPTNEbixhLmFwcGVuZENoaWxkKHUpLHMm Jih0WzBdPTNEdFswXS1zLnNjcm9sbExlZnQsdFsxXT0zRHRbMV0tcz0KLnNjcm9sbFRvcCksZS50 b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb24odCxyLGksdSl9LGUudG9vbHRpcC5maW5kRmlyc3RO b25TPQpWR1BhcmVudD0zRGZ1bmN0aW9uKGUpe3doaWxlKGUudGFnTmFtZS5tYXRjaCgvXmd8c3Zn JC9pKSE9M0Q9M0RudWxsKWU9M0RlLnA9CmFyZW50Tm9kZTtyZXR1cm4gZX0sZS50b29sdGlwLmZp bmRUb3RhbE9mZnNldFRvcD0zRGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0Oz0KZG8gaXNOYU4oZS5v ZmZzZXRUb3ApfHwobis9M0RlLm9mZnNldFRvcCk7d2hpbGUoZT0zRGUub2Zmc2V0UGFyZW50KTty ZXR1cm4gPQpufSxlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0TGVmdD0zRGZ1bmN0aW9uKGUsdCl7 dmFyIG49M0R0O2RvIGlzTmFOKGUub2Zmc2U9CnRMZWZ0KXx8KG4rPTNEZS5vZmZzZXRMZWZ0KTt3 aGlsZShlPTNEZS5vZmZzZXRQYXJlbnQpO3JldHVybiBufSxlLnRvb2x0aXAuYz0KYWxjVG9vbHRp cFBvc2l0aW9uPTNEZnVuY3Rpb24odCxuLHIsaSl7dmFyIHM9M0RwYXJzZUludChpLm9mZnNldEhl aWdodCksbz0KPTNEcGFyc2VJbnQoaS5vZmZzZXRXaWR0aCksdT0zRGUudXRpbHMud2luZG93U2l6 ZSgpLndpZHRoLGE9M0RlLnV0aWxzLndpbmRvPQp3U2l6ZSgpLmhlaWdodCxmPTNEd2luZG93LnBh Z2VZT2Zmc2V0LGw9M0R3aW5kb3cucGFnZVhPZmZzZXQsYyxoO2E9M0R3aW5kb3c9Ci5pbm5lcldp ZHRoPj0zRGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg/YTphLTE2LHU9M0R3aW5kb3cuaW5uZXJI ZWlnaHQ+PTNEZD0Kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodD91OnUtMTYsbj0zRG58fCJzIixy PTNEcnx8MjA7dmFyIHA9M0RmdW5jdGlvbih0KXtyPQpldHVybiBlLnRvb2x0aXAuZmluZFRvdGFs T2Zmc2V0VG9wKHQsaCl9LGQ9M0RmdW5jdGlvbih0KXtyZXR1cm4gZS50b29sdGlwLmY9CmluZFRv dGFsT2Zmc2V0TGVmdCh0LGMpfTtzd2l0Y2gobil7Y2FzZSJlIjpjPTNEdFswXS1vLXIsaD0zRHRb MV0tcy8yO3ZhciB2PQo9M0RkKGkpLG09M0RwKGkpO3Y8bCYmKGM9M0R0WzBdK3I+bD90WzBdK3I6 bC12K2MpLG08ZiYmKGg9M0RmLW0raCksbStzPmYrYSY9CiYoaD0zRGYrYS1tK2gtcyk7YnJlYWs7 Y2FzZSJ3IjpjPTNEdFswXStyLGg9M0R0WzFdLXMvMjt2YXIgdj0zRGQoaSksbT0zRHAoaT0KKTt2 K28+dSYmKGM9M0R0WzBdLW8tciksbTxmJiYoaD0zRGYrNSksbStzPmYrYSYmKGg9M0RmK2EtbSto LXMpO2JyZWFrO2Nhc2UiPQpuIjpjPTNEdFswXS1vLzItNSxoPTNEdFsxXStyO3ZhciB2PTNEZChp KSxtPTNEcChpKTt2PGwmJihjPTNEbCs1KSx2K28+dSYmKGM9Cj0zRGMtby8yKzUpLG0rcz5mK2Em JihoPTNEZithLW0raC1zKTticmVhaztjYXNlInMiOmM9M0R0WzBdLW8vMixoPTNEdFsxXS1zLT0K cjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7djxsJiYoYz0zRGwrNSksditvPnUmJihjPTNEYy1vLzIr NSksZj5tJiYoaD0zRGYpO2JyPQplYWs7Y2FzZSJub25lIjpjPTNEdFswXSxoPTNEdFsxXS1yO3Zh ciB2PTNEZChpKSxtPTNEcChpKX1yZXR1cm4gaS5zdHlsZS5sZWY9CnQ9M0RjKyJweCIsaS5zdHls ZS50b3A9M0RoKyJweCIsaS5zdHlsZS5vcGFjaXR5PTNEMSxpLnN0eWxlLnBvc2l0aW9uPTNEImFi cz0Kb2x1dGUiLGl9LGUudG9vbHRpcC5jbGVhbnVwPTNEZnVuY3Rpb24oKXt2YXIgZT0zRGRvY3Vt ZW50LmdldEVsZW1lbnRzQnlDbGFzPQpzTmFtZSgibnZ0b29sdGlwIiksdD0zRFtdO3doaWxlKGUu bGVuZ3RoKXQucHVzaChlWzBdKSxlWzBdLnN0eWxlLnRyYW5zaXRpb249CkRlbGF5PTNEIjAgIWlt cG9ydGFudCIsZVswXS5zdHlsZS5vcGFjaXR5PTNEMCxlWzBdLmNsYXNzTmFtZT0zRCJudnRvb2x0 aXAtcD0KZW5kaW5nLXJlbW92YWwiO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aGlsZSh0Lmxlbmd0 aCl7dmFyIGU9M0R0LnBvcCgpO2UucGFyPQplbnROb2RlLnJlbW92ZUNoaWxkKGUpfX0sNTAwKX19 KCksZS51dGlscy53aW5kb3dTaXplPTNEZnVuY3Rpb24oKXt2YXIgZT0zRHs9CndpZHRoOjY0MCxo ZWlnaHQ6NDgwfTtyZXR1cm4gZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0 aCYmKGUudz0KaWR0aD0zRGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsZS5oZWlnaHQ9M0Rkb2N1 bWVudC5ib2R5Lm9mZnNldEhlaWdodCksZG9jPQp1bWVudC5jb21wYXRNb2RlPTNEPTNEIkNTUzFD b21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3U9Cm1lbnRFbGVt ZW50Lm9mZnNldFdpZHRoJiYoZS53aWR0aD0zRGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZz ZXRXaWR0aCxlLj0KaGVpZ2h0PTNEZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdo dCksd2luZG93LmlubmVyV2lkdGgmJndpbmRvdy5pPQpubmVySGVpZ2h0JiYoZS53aWR0aD0zRHdp bmRvdy5pbm5lcldpZHRoLGUuaGVpZ2h0PTNEd2luZG93LmlubmVySGVpZ2h0KSxlfSw9CmUudXRp bHMud2luZG93UmVzaXplPTNEZnVuY3Rpb24oZSl7aWYoZT0zRD0zRD0zRHVuZGVmaW5lZClyZXR1 cm47dmFyIHQ9M0R3aT0KbmRvdy5vbnJlc2l6ZTt3aW5kb3cub25yZXNpemU9M0RmdW5jdGlvbihu KXt0eXBlb2YgdD0zRD0zRCJmdW5jdGlvbiImJnQobiksPQplKG4pfX0sZS51dGlscy5nZXRDb2xv cj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP09iamVjdC5wcm90b3Q9Cnlw ZS50b1N0cmluZy5jYWxsKHQpPTNEPTNEPTNEIltvYmplY3QgQXJyYXldIj9mdW5jdGlvbihlLG4p e3JldHVybiBlLmNvbG9yfD0KfHRbbiV0Lmxlbmd0aF19OnQ6ZS51dGlscy5kZWZhdWx0Q29sb3Io KX0sZS51dGlscy5kZWZhdWx0Q29sb3I9M0RmdW5jdGlvbigpPQp7dmFyIGU9M0RkMy5zY2FsZS5j YXRlZ29yeTIwKCkucmFuZ2UoKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5jb2xvcnw9 CnxlW24lZS5sZW5ndGhdfX0sZS51dGlscy5jdXN0b21UaGVtZT0zRGZ1bmN0aW9uKGUsdCxuKXt0 PTNEdHx8ZnVuY3Rpb24oZSl7cj0KZXR1cm4gZS5rZXl9LG49M0RufHxkMy5zY2FsZS5jYXRlZ29y eTIwKCkucmFuZ2UoKTt2YXIgcj0zRG4ubGVuZ3RoO3JldHVybiBmPQp1bmN0aW9uKGkscyl7dmFy IG89M0R0KGkpO3JldHVybiByfHwocj0zRG4ubGVuZ3RoKSx0eXBlb2YgZVtvXSE9M0QidW5kZWZp bmU9CmQiP3R5cGVvZiBlW29dPTNEPTNEImZ1bmN0aW9uIj9lW29dKCk6ZVtvXTpuWy0tcl19fSxl LnV0aWxzLnBqYXg9M0RmdW5jdGlvbj0KKHQsbil7ZnVuY3Rpb24gcihyKXtkMy5odG1sKHIsZnVu Y3Rpb24ocil7dmFyIGk9M0RkMy5zZWxlY3Qobikubm9kZSgpO2kucGFyPQplbnROb2RlLnJlcGxh Y2VDaGlsZChkMy5zZWxlY3Qocikuc2VsZWN0KG4pLm5vZGUoKSxpKSxlLnV0aWxzLnBqYXgodCxu KX0pfWQ9CjMuc2VsZWN0QWxsKHQpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoaXN0b3J5LnB1c2hT dGF0ZSh0aGlzLmhyZWYsdGhpcy50ZXh0Qz0Kb250ZW50LHRoaXMuaHJlZikscih0aGlzLmhyZWYp LGQzLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSxkMy5zZWxlY3Qod2luZG93PQopLm9uKCJwb3Bz dGF0ZSIsZnVuY3Rpb24oKXtkMy5ldmVudC5zdGF0ZSYmcihkMy5ldmVudC5zdGF0ZSl9KX0sZS51 dGlscy5jYWw9CmNBcHByb3hUZXh0V2lkdGg9M0RmdW5jdGlvbihlKXtpZih0eXBlb2YgZS5zdHls ZT0zRD0zRCJmdW5jdGlvbiImJnR5cGVvZiBlLj0KdGV4dD0zRD0zRCJmdW5jdGlvbiIpe3ZhciB0 PTNEcGFyc2VJbnQoZS5zdHlsZSgiZm9udC1zaXplIikucmVwbGFjZSgicHgiLCIiPQopKSxuPTNE ZS50ZXh0KCkubGVuZ3RoO3JldHVybiBuKnQqLjV9cmV0dXJuIDB9LGUudXRpbHMuTmFOdG9aZXJv PTNEZnVuY3Rpb249CihlKXtyZXR1cm4gdHlwZW9mIGUhPTNEIm51bWJlciJ8fGlzTmFOKGUpfHxl PTNEPTNEPTNEbnVsbHx8ZT0zRD0zRD0zREluZmluaT0KdHk/MDplfSxlLnV0aWxzLm9wdGlvbnNG dW5jPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmQzLm1hcChlKS5mb3JFYWNoKGZ1bmN0PQppb24o ZSx0KXt0eXBlb2YgdGhpc1tlXT0zRD0zRCJmdW5jdGlvbiImJnRoaXNbZV0odCl9LmJpbmQodGhp cykpLHRoaXN9LGUubW89CmRlbHMuYXhpcz0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXtyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNEZDMucz0KZWxlY3QodGhpcyksbT0zRGkuc2Vs ZWN0QWxsKCJnLm52LXdyYXAubnYtYXhpcyIpLmRhdGEoW2VdKSxnPTNEbS5lbnRlcigpLmFwPQpw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYXhpcyIpLHk9M0RnLmFwcGVu ZCgiZyIpLGI9M0RtLnNlbGU9CmN0KCJnIik7cCE9M0Q9M0RudWxsP3QudGlja3MocCk6KHQub3Jp ZW50KCk9M0Q9M0QidG9wInx8dC5vcmllbnQoKT0zRD0zRCJibz0KdHRvbSIpJiZ0LnRpY2tzKE1h dGguYWJzKHMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pLzEwMCksYi5jYWxsKHQpLHY9M0R2fHx0 PQouc2NhbGUoKTt2YXIgdz0zRHQudGlja0Zvcm1hdCgpO3c9M0Q9M0RudWxsJiYodz0zRHYudGlj a0Zvcm1hdCgpKTt2YXIgRT0zRGI9Ci5zZWxlY3RBbGwoInRleHQubnYtYXhpc2xhYmVsIikuZGF0 YShbb3x8bnVsbF0pO0UuZXhpdCgpLnJlbW92ZSgpO3N3aXRjaCh0Lj0Kb3JpZW50KCkpe2Nhc2Ui dG9wIjpFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFiZWwi KTt2PQphciBTPTNEcy5yYW5nZSgpLmxlbmd0aD0zRD0zRDI/cy5yYW5nZSgpWzFdOnMucmFuZ2Uo KVtzLnJhbmdlKCkubGVuZ3RoLTFdKyg9CnMucmFuZ2UoKVsxXS1zLnJhbmdlKClbMF0pO0UuYXR0 cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IiwwKS5hdHRyKD0KIngiLFMvMik7aWYo dSl7dmFyIHg9M0RtLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmRvbWFpbigp KTt4LmVuPQp0ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5h cHBlbmQoInRleHQiKSx4LmV4aXQoKS5yZW09Cm92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitzKGUpKyIsMCkifSkuc2VsZT0KY3QoInRleHQi KS5hdHRyKCJkeSIsIi0wLjVlbSIpLmF0dHIoInkiLC10LnRpY2tQYWRkaW5nKCkpLmF0dHIoInRl eHQtYW5jaG9yPQoiLCJtaWRkbGUiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUpO3Jl dHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn09CikseC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3MucmFuZ2UoKVt0XSsiLDApIn0pfT0KYnJlYWs7 Y2FzZSJib3R0b20iOnZhciBUPTNEMzYsTj0zRDMwLEM9M0RiLnNlbGVjdEFsbCgiZyIpLnNlbGVj dCgidGV4dCIpO2lmPQooZiUzNjApe0MuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEdGhpcy5n ZXRCQm94KCkud2lkdGg7bj5OJiYoTj0zRG4pfSk7dmE9CnIgaz0zRE1hdGguYWJzKE1hdGguc2lu KGYqTWF0aC5QSS8xODApKSxUPTNEKGs/aypOOk4pKzMwO0MuYXR0cigidHJhbnNmb3JtIj0KLGZ1 bmN0aW9uKGUsdCxuKXtyZXR1cm4icm90YXRlKCIrZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5j aG9yIixmJTM2MD4wPyJzPQp0YXJ0IjoiZW5kIil9RS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0 dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIik7dmFyIFM9M0Q9CnMucmFuZ2UoKS5sZW5ndGg9M0Q9 M0QyP3MucmFuZ2UoKVsxXTpzLnJhbmdlKClbcy5yYW5nZSgpLmxlbmd0aC0xXSsocy5yYW5nZT0K KClbMV0tcy5yYW5nZSgpWzBdKTtFLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigi eSIsVCkuYXR0cigieCIsUy8yPQopO2lmKHUpe3ZhciB4PTNEbS5zZWxlY3RBbGwoImcubnYtYXhp c01heE1pbiIpLmRhdGEoW3MuZG9tYWluKClbMF0scy5kb21haW49CigpW3MuZG9tYWluKCkubGVu Z3RoLTFdXSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXhpc01heE1p bj0KIikuYXBwZW5kKCJ0ZXh0IikseC5leGl0KCkucmVtb3ZlKCkseC5hdHRyKCJ0cmFuc2Zvcm0i LGZ1bmN0aW9uKGUsdCl7cmV0dXJuPQoidHJhbnNsYXRlKCIrKHMoZSkrKGg/cy5yYW5nZUJhbmQo KS8yOjApKSsiLDApIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5Iiw9CiIuNzFlbSIpLmF0dHIo InkiLHQudGlja1BhZGRpbmcoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0 dXJuIj0Kcm90YXRlKCIrZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5jaG9yIixmP2YlMzYwPjA/ InN0YXJ0IjoiZW5kIjoibWlkZGxlIikuPQp0ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0R3KGUp O3JldHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLHguYXR0cigidHI9CmFuc2Zvcm0iLGZ1 bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhzKGUpKyhoP3MucmFuZ2VCYW5kKCkvMjow KSkrIiwwKT0KIn0pfWMmJkMuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0 cmFuc2xhdGUoMCwiKyh0JTI9M0Q9M0QwPyIwPQoiOiIxMiIpKyIpIn0pO2JyZWFrO2Nhc2Uicmln aHQiOkUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWE9Cnhpc2xhYmVs IiksRS5zdHlsZSgidGV4dC1hbmNob3IiLGw/Im1pZGRsZSI6ImJlZ2luIikuYXR0cigidHJhbnNm b3JtIixsPyJybz0KdGF0ZSg5MCkiOiIiKS5hdHRyKCJ5IixsPy1NYXRoLm1heChuLnJpZ2h0LHIp KzEyOi0xMCkuYXR0cigieCIsbD9zLnJhbmdlKClbPQowXS8yOnQudGlja1BhZGRpbmcoKSk7aWYo dSl7dmFyIHg9M0RtLnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmQ9Cm9tYWlu KCkpO3guZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5h cHBlbmQoInRleHQiKT0KLnN0eWxlKCJvcGFjaXR5IiwwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmF0 dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1PQpybiJ0cmFuc2xhdGUoMCwiK3MoZSkr IikifSkuc2VsZWN0KCJ0ZXh0IikuYXR0cigiZHkiLCIuMzJlbSIpLmF0dHIoInkiLDApLmE9CnR0 cigieCIsdC50aWNrUGFkZGluZygpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQo ZnVuY3Rpb24oZSx0KXt2YT0KciBuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIi Om59KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0PQope3JldHVybiJ0cmFuc2xhdGUo MCwiK3MucmFuZ2UoKVt0XSsiKSJ9KS5zZWxlY3QoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSk9 Cn1icmVhaztjYXNlImxlZnQiOkUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIs Im52LWF4aXNsYWJlbCIpLEUucz0KdHlsZSgidGV4dC1hbmNob3IiLGw/Im1pZGRsZSI6ImVuZCIp LmF0dHIoInRyYW5zZm9ybSIsbD8icm90YXRlKC05MCkiOiIiKS5hPQp0dHIoInkiLGw/LU1hdGgu bWF4KG4ubGVmdCxyKStkOi0xMCkuYXR0cigieCIsbD8tcy5yYW5nZSgpWzBdLzI6LXQudGlja1Bh ZGQ9CmluZygpKTtpZih1KXt2YXIgeD0zRG0uc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5k YXRhKHMuZG9tYWluKCkpO3guZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt YXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5PQoiLDApLHguZXhpdCgp LnJlbW92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xh dGUoMCw9CiIrdihlKSsiKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0 cigieSIsMCkuYXR0cigieCIsLXQudGljaz0KUGFkZGluZygpKS5hdHRyKCJ0ZXh0LWFuY2hvciIs ImVuZCIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHcoZSk7cmV0dXJuPQooIiIrbikubWF0 Y2goIk5hTiIpPyIiOm59KSx4LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4i dHJhbnNsYXQ9CmUoMCwiK3MucmFuZ2UoKVt0XSsiKSJ9KS5zZWxlY3QoInRleHQiKS5zdHlsZSgi b3BhY2l0eSIsMSl9fUUudGV4dChmdW5jdGlvbj0KKGUpe3JldHVybiBlfSksdSYmKHQub3JpZW50 KCk9M0Q9M0Q9M0QibGVmdCJ8fHQub3JpZW50KCk9M0Q9M0Q9M0QicmlnaHQiKSYmPQooYi5zZWxl Y3RBbGwoImciKS5lYWNoKGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4 dCIpLmF0dHIoIm89CnBhY2l0eSIsMSk7aWYocyhlKTxzLnJhbmdlKClbMV0rMTB8fHMoZSk+cy5y YW5nZSgpWzBdLTEwKShlPjFlLTEwfHxlPC0xZS0xMD0KKSYmZDMuc2VsZWN0KHRoaXMpLmF0dHIo Im9wYWNpdHkiLDApLGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJvPQpwYWNp dHkiLDApfSkscy5kb21haW4oKVswXT0zRD0zRHMuZG9tYWluKClbMV0mJnMuZG9tYWluKClbMF09 M0Q9M0QwJiZtLnNlbGU9CmN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5zdHlsZSgib3BhY2l0eSIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8wOjF9KSk7aWYodT0KJiYodC5vcmllbnQoKT0zRD0zRD0z RCJ0b3AifHx0Lm9yaWVudCgpPTNEPTNEPTNEImJvdHRvbSIpKXt2YXIgTD0zRFtdO20uc2VsPQpl Y3RBbGwoImcubnYtYXhpc01heE1pbiIpLmVhY2goZnVuY3Rpb24oZSx0KXt0cnl7dD9MLnB1c2go cyhlKS10aGlzLmdldEJCb3g9CigpLndpZHRoLTQpOkwucHVzaChzKGUpK3RoaXMuZ2V0QkJveCgp LndpZHRoKzQpfWNhdGNoKG4pe3Q/TC5wdXNoKHMoZSktNCk6TD0KLnB1c2gocyhlKSs0KX19KSxi LnNlbGVjdEFsbCgiZyIpLmVhY2goZnVuY3Rpb24oZSx0KXtpZihzKGUpPExbMF18fHMoZSk+TFsx PQpdKWU+MWUtMTB8fGU8LTFlLTEwP2QzLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTpkMy5zZWxlY3Qo dGhpcykuc2VsZWN0KCJ0ZXh0Iik9Ci5yZW1vdmUoKX0pfWEmJmIuc2VsZWN0QWxsKCIudGljayIp LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hcGFyc2VGbG9hdChNYT0KdGgucm91bmQoZS5fX2Rh dGFfXyoxZTUpLzFlNikmJmUuX19kYXRhX18hPTNEPTNEdW5kZWZpbmVkfSkuY2xhc3NlZCgiemVy byIsPQohMCksdj0zRHMuY29weSgpfSksbX12YXIgdD0zRGQzLnN2Zy5heGlzKCksbj0zRHt0b3A6 MCxyaWdodDowLGJvdHRvbTowLGxlZnQ9CjowfSxyPTNENzUsaT0zRDYwLHM9M0RkMy5zY2FsZS5s aW5lYXIoKSxvPTNEbnVsbCx1PTNEITAsYT0zRCEwLGY9M0QwLGw9M0QhMD0KLGM9M0QhMSxoPTNE ITEscD0zRG51bGwsZD0zRDEyO3Quc2NhbGUocykub3JpZW50KCJib3R0b20iKS50aWNrRm9ybWF0 KGZ1bmN0PQppb24oZSl7cmV0dXJuIGV9KTt2YXIgdjtyZXR1cm4gbS5heGlzPTNEdCxkMy5yZWJp bmQobSx0LCJvcmllbnQiLCJ0aWNrVmFsdWU9CnMiLCJ0aWNrU3ViZGl2aWRlIiwidGlja1NpemUi LCJ0aWNrUGFkZGluZyIsInRpY2tGb3JtYXQiKSxkMy5yZWJpbmQobSxzLCJkbz0KbWFpbiIsInJh bmdlIiwicmFuZ2VCYW5kIiwicmFuZ2VCYW5kcyIpLG0ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYmluPQpkKG0pLG0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wIT0KPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3As bi5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6PQpuLnJpZ2h0 LG4uYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm4uYm90 dG9tLG4ubGVmdD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bi5sZWZ0 LG0pOm59LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhy PTNEZSxtKTpyfSxtLnRpY2tzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxlbmd0 aD8ocD0zRGUsbSk6cH0sbS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaT0zRGUsbT0KKTppfSxtLmF4aXNMYWJlbD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZSxtKTpvfSxtLnNob3dNPQpheE1pbj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxtKTp1fSxtLmhpZ2hsaWdodFplcm89M0Q9CmZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxtKTphfSxtLnNjYWxlPTNE ZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsdC5zY2FsZShzKSxo PTNEdHlwZW9mIHMucmFuZ2VCYW5kcz0zRD0zRCJmdW5jdGlvPQpuIixkMy5yZWJpbmQobSxzLCJk b21haW4iLCJyYW5nZSIsInJhbmdlQmFuZCIsInJhbmdlQmFuZHMiKSxtKTpzfSxtLnJvdGF0ZVk9 CkxhYmVsPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLG0pOmx9 LG0ucm90YXRlTGFiZWxzPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Zj0zRGUsbSk6Zn0sbS5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYz0zRGUsbSk6Y30sbS5heGlzTGFiZWxEaXN0YW5jZT0zRGZ1bmN0aW9uKGUp e3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLG0pOmR9LG19LGUubW9kZWxzLmhpc3Rv cmljYWxCYXI9M0RmdW5jdGlvbigpez0KZnVuY3Rpb24gdyhFKXtyZXR1cm4gRS5lYWNoKGZ1bmN0 aW9uKHcpe3ZhciBFPTNEbi10LmxlZnQtdC5yaWdodCxTPTNEci10LnRvPQpwLXQuYm90dG9tLFQ9 M0RkMy5zZWxlY3QodGhpcyk7cy5kb21haW4oZHx8ZDMuZXh0ZW50KHdbMF0udmFsdWVzLm1hcCh1 KS5jb249CmNhdChmKSkpLGM/cy5yYW5nZShtfHxbRSouNS93WzBdLnZhbHVlcy5sZW5ndGgsRSoo d1swXS52YWx1ZXMubGVuZ3RoLS41KS93Wz0KMF0udmFsdWVzLmxlbmd0aF0pOnMucmFuZ2UobXx8 WzAsRV0pLG8uZG9tYWluKHZ8fGQzLmV4dGVudCh3WzBdLnZhbHVlcy5tYXAoPQphKS5jb25jYXQo bCkpKS5yYW5nZShnfHxbUywwXSkscy5kb21haW4oKVswXT0zRD0zRD0zRHMuZG9tYWluKClbMV0m JihzLmRvbWE9CmluKClbMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0tcy5kb21haW4oKVswXSou MDEscy5kb21haW4oKVsxXStzLmRvbWFpbigpWz0KMV0qLjAxXSk6cy5kb21haW4oWy0xLDFdKSks by5kb21haW4oKVswXT0zRD0zRD0zRG8uZG9tYWluKClbMV0mJihvLmRvbWFpbigpPQpbMF0/by5k b21haW4oW28uZG9tYWluKClbMF0rby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsxXS1vLmRv bWFpbigpWzFdKi49CjAxXSk6by5kb21haW4oWy0xLDFdKSk7dmFyIE49M0RULnNlbGVjdEFsbCgi Zy5udi13cmFwLm52LWhpc3RvcmljYWxCYXItIitpKT0KLmRhdGEoW3dbMF0udmFsdWVzXSksQz0z RE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBuPQp2LWhp c3RvcmljYWxCYXItIitpKSxrPTNEQy5hcHBlbmQoImRlZnMiKSxMPTNEQy5hcHBlbmQoImciKSxB PTNETi5zZWxlY3QoImc9CiIpO0wuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzIiks Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0Lj0KbGVmdCsiLCIrdC50b3ArIikiKSxU Lm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXt5LmNoYXJ0Q2xpY2soe2RhdGE6ZSxpbmRleDp0PQos cG9zOmQzLmV2ZW50LGlkOml9KX0pLGsuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYt Y2hhcnQtY2xpcC1wYXRoLSI9CitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbGVjdCgiI252LWNoYXJ0 LWNsaXAtcGF0aC0iK2krIiByZWN0IikuYXR0cigid2lkdGgiLD0KRSkuYXR0cigiaGVpZ2h0IixT KSxBLmF0dHIoImNsaXAtcGF0aCIsaD8idXJsKCNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIpIjoi PQoiKTt2YXIgTz0zRE4uc2VsZWN0KCIubnYtYmFycyIpLnNlbGVjdEFsbCgiLm52LWJhciIpLmRh dGEoZnVuY3Rpb24oZSl7cmV0dXI9Cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQpfSk7 Ty5leGl0KCkucmVtb3ZlKCk7dmFyIE09M0RPLmVudGVyKCkuYXBwZT0KbmQoInJlY3QiKS5hdHRy KCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhv KE1hPQp0aC5tYXgoMCxhKHQsbikpKSl9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQsbil7cmV0 dXJuIGUudXRpbHMuTmFOdG9aZXJvKE09CmF0aC5hYnMobyhhKHQsbikpLW8oMCkpKX0pLmF0dHIo InRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKD0KIisocyh1KGUsdCkp LUUvd1swXS52YWx1ZXMubGVuZ3RoKi40NSkrIiwwKSJ9KS5vbigibW91c2VvdmVyIixmdW5jdGlv bihlLHQpPQp7aWYoIWIpcmV0dXJuO2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITAp LHkuZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ9CjplLHNlcmllczp3WzBdLHBvczpbcyh1KGUsdCkp LG8oYShlLHQpKV0scG9pbnRJbmRleDp0LHNlcmllc0luZGV4OjAsZTpkMy5ldj0KZW50fSl9KS5v bigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO2QzLnNlbGVjdCh0aGlzKS5j bGFzc2VkKCJoPQpvdmVyIiwhMSkseS5lbGVtZW50TW91c2VvdXQoe3BvaW50OmUsc2VyaWVzOndb MF0scG9pbnRJbmRleDp0LHNlcmllc0luZGV4OjA9CixlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2si LGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO3kuZWxlbWVudENsaWNrKHt2YWx1ZT0KOmEoZSx0 KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShlLHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6 aX0pLGQzLmV2ZW50PQouc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9u KGUsdCl7aWYoIWIpcmV0dXJuO3kuZWxlbWVudERibEM9CmxpY2soe3ZhbHVlOmEoZSx0KSxkYXRh OmUsaW5kZXg6dCxwb3M6W3ModShlLHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aT0KfSks ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KTtPLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHAoZSx0KX0pPQouYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oYShl LHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3M9Cml0aXZlIikrIiBudi1iYXItIitu KyItIit0fSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdD0K ZSgiKyhzKHUoZSx0KSktRS93WzBdLnZhbHVlcy5sZW5ndGgqLjQ1KSsiLDApIn0pLmF0dHIoIndp ZHRoIixFL3dbMF0udmFsdWVzPQoubGVuZ3RoKi45KSxPLmF0dHIoInkiLGZ1bmN0aW9uKHQsbil7 dmFyIHI9M0RhKHQsbik8MD9vKDApOm8oMCktbyhhKHQsbikpPDE9Cj9vKDApLTE6byhhKHQsbikp O3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhyKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCxu KT0Ke3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhNYXRoLm1heChNYXRoLmFicyhvKGEodCxuKSkt bygwKSksMSkpfSl9KSx3fXZhciB0PQo9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9 LG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmQ9Cm9tKCkqMWU0KSxzPTNE ZDMuc2NhbGUubGluZWFyKCksbz0zRGQzLnNjYWxlLmxpbmVhcigpLHU9M0RmdW5jdGlvbihlKXty ZXR1cj0KbiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEW10sbD0zRFswXSxj PTNEITEsaD0zRCEwLHA9M0RlLnV0aWxzPQouZGVmYXVsdENvbG9yKCksZCx2LG0sZyx5PTNEZDMu ZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW49CnREYmxDbGljayIs ImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxiPTNEITA7cmV0dXJuIHcuaGln aGxpZ2h0UD0Kb2ludD0zRGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KCIubnYtaGlzdG9yaWNhbEJh ci0iK2kpLnNlbGVjdCgiLm52LWJhcnMgLm52PQotYmFyLTAtIitlKS5jbGFzc2VkKCJob3ZlciIs dCl9LHcuY2xlYXJIaWdobGlnaHRzPTNEZnVuY3Rpb24oKXtkMy5zZWxlY3QoIi49Cm52LWhpc3Rv cmljYWxCYXItIitpKS5zZWxlY3QoIi5udi1iYXJzIC5udi1iYXIuaG92ZXIiKS5jbGFzc2VkKCJo b3ZlciIsITEpfT0KLHcuZGlzcGF0Y2g9M0R5LHcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1 bmMuYmluZCh3KSx3Lng9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1 PTNEZSx3KTp1fSx3Lnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhh PTNEZSx3KTphfSx3Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh0LnRvcD0zRHR5cD0KZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmln aHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkPQoiP2UucmlnaHQ6dC5yaWdodCx0LmJv dHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHQ9Cm9t LHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCx3KTp0 fSx3LndpZHRoPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUs dyk6bn0sdy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhy PTNEZSx3KTpyfSx3LnhTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9 Cmg/KHM9M0RlLHcpOnN9LHcueVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KG89M0RlLHcpOm99LD0Kdy54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGQ9M0RlLHcpOmR9LHcueURvbWFpbj0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLHcpOnZ9LHcueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0 dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsdyk6bX0sdy55UmFuZ2U9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhnPTNEZSx3KTpnfSx3LmZvcmNlWD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSx3KTpmPQp9LHcuZm9yY2VZPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLHcpOmx9LHcucGFkRGF0 YT0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLHcpOmN9LHcu Y2xpcEVkZ2U9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx3 KTpofSx3LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8ocD0z RGUudXRpbHMuZ2V0Q29sb3IodCksdyk6cH0sdy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGU9Cm5ndGg/KGk9M0RlLHcpOml9LHcuaW50ZXJhY3RpdmU9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRD0KITEsdyk6Yn0sd30sZS5tb2RlbHMuYnVsbGV0 PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBtKGUpe3JldHVybiBlLmVhY2goZnVuY3RpPQpvbihlLG4p e3ZhciBwPTNEYy10LmxlZnQtdC5yaWdodCxtPTNEaC10LnRvcC10LmJvdHRvbSxnPTNEZDMuc2Vs ZWN0KHRoaXMpLHk9Cj0zRGkuY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRp bmcpLGI9M0RzLmNhbGwodGhpcyxlLG4pLnNsaWNlKD0KKS5zb3J0KGQzLmRlc2NlbmRpbmcpLHc9 M0RvLmNhbGwodGhpcyxlLG4pLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxFPTNEPQp1LmNh bGwodGhpcyxlLG4pLnNsaWNlKCksUz0zRGEuY2FsbCh0aGlzLGUsbikuc2xpY2UoKSx4PTNEZi5j YWxsKHRoaXMsZSxuKS49CnNsaWNlKCksVD0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihkMy5l eHRlbnQoZDMubWVyZ2UoW2wseV0pKSkucmFuZ2Uocj9bcD0KLDBdOlswLHBdKSxOPTNEdGhpcy5f X2NoYXJ0X198fGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxJbmZpbml0eV0pLnJhbmdlPQoo VC5yYW5nZSgpKTt0aGlzLl9fY2hhcnRfXz0zRFQ7dmFyIEM9M0RkMy5taW4oeSksaz0zRGQzLm1h eCh5KSxMPTNEeVsxXSxBPQo9M0RnLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWJ1bGxldCIpLmRh dGEoW2VdKSxPPTNEQS5lbnRlcigpLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudmQzIG52 LXdyYXAgbnYtYnVsbGV0IiksTT0zRE8uYXBwZW5kKCJnIiksXz0zREEuc2VsZWN0KCJnIik7TT0K LmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VNYXgiKSxNLmFw cGVuZCgicmVjdCIpLmF0dHIoPQoiY2xhc3MiLCJudi1yYW5nZSBudi1yYW5nZUF2ZyIpLE0uYXBw ZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudi1yYW5nZSBudi09CnJhbmdlTWluIiksTS5hcHBl bmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LW1lYXN1cmUiKSxNLmFwcGVuZCgicGF0aCIpLmF0 dD0KcigiY2xhc3MiLCJudi1tYXJrZXJUcmlhbmdsZSIpLEEuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrdC5sZWZ0KyIsIit0PQoudG9wKyIpIik7dmFyIEQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gTWF0aC5hYnMoTihlKS1OKDApKX0sUD0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIE1hdGguYWJz KFQoZSktVCgwKSl9LEg9M0RmdW5jdGlvbihlKXtyZXR1cm4gZTwwP04oZSk6TigwKX0sQj0zRGZ1 bmN0aT0Kb24oZSl7cmV0dXJuIGU8MD9UKGUpOlQoMCl9O18uc2VsZWN0KCJyZWN0Lm52LXJhbmdl TWF4IikuYXR0cigiaGVpZ2h0IixtKS5hPQp0dHIoIndpZHRoIixQKGs+MD9rOkMpKS5hdHRyKCJ4 IixCKGs+MD9rOkMpKS5kYXR1bShrPjA/azpDKSxfLnNlbGVjdCgicmVjdC49Cm52LXJhbmdlQXZn IikuYXR0cigiaGVpZ2h0IixtKS5hdHRyKCJ3aWR0aCIsUChMKSkuYXR0cigieCIsQihMKSkuZGF0 dW0oTCksXz0KLnNlbGVjdCgicmVjdC5udi1yYW5nZU1pbiIpLmF0dHIoImhlaWdodCIsbSkuYXR0 cigid2lkdGgiLFAoaykpLmF0dHIoIngiLEIoPQprKSkuYXR0cigid2lkdGgiLFAoaz4wP0M6aykp LmF0dHIoIngiLEIoaz4wP0M6aykpLmRhdHVtKGs+MD9DOmspLF8uc2VsZWN0KCI9CnJlY3QubnYt bWVhc3VyZSIpLnN0eWxlKCJmaWxsIixkKS5hdHRyKCJoZWlnaHQiLG0vMykuYXR0cigieSIsbS8z KS5hdHRyKCJ3aT0KZHRoIix3PDA/VCgwKS1UKHdbMF0pOlQod1swXSktVCgwKSkuYXR0cigieCIs Qih3KSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oPQope3YuZWxlbWVudE1vdXNlb3Zlcih7dmFs dWU6d1swXSxsYWJlbDp4WzBdfHwiQ3VycmVudCIscG9zOltUKHdbMF0pLG0vMl19KX09Cikub24o Im1vdXNlb3V0IixmdW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTp3WzBdLGxhYmVs OnhbMF18fCJDdXJyZT0KbnQifSl9KTt2YXIgaj0zRG0vNjtiWzBdP18uc2VsZWN0QWxsKCJwYXRo Lm52LW1hcmtlclRyaWFuZ2xlIikuYXR0cigidHJhbnNmPQpvcm0iLGZ1bmN0aW9uKGUpe3JldHVy biJ0cmFuc2xhdGUoIitUKGJbMF0pKyIsIittLzIrIikifSkuYXR0cigiZCIsIk0wLCIrais9CiJM IitqKyIsIisgLWorIiAiKyAtaisiLCIrIC1qKyJaIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24o KXt2LmVsZW1lbnRNb3VzZT0Kb3Zlcih7dmFsdWU6YlswXSxsYWJlbDpTWzBdfHwiUHJldmlvdXMi LHBvczpbVChiWzBdKSxtLzJdfSl9KS5vbigibW91c2VvdXQiPQosZnVuY3Rpb24oKXt2LmVsZW1l bnRNb3VzZW91dCh7dmFsdWU6YlswXSxsYWJlbDpTWzBdfHwiUHJldmlvdXMifSl9KTpfLnNlbGU9 CmN0QWxsKCJwYXRoLm52LW1hcmtlclRyaWFuZ2xlIikucmVtb3ZlKCksQS5zZWxlY3RBbGwoIi5u di1yYW5nZSIpLm9uKCJtb3VzZT0Kb3ZlciIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zREVbdF18fCh0 P3Q9M0Q9M0QxPyJNZWFuIjoiTWluaW11bSI6Ik1heGltdW0iKTt2PQouZWxlbWVudE1vdXNlb3Zl cih7dmFsdWU6ZSxsYWJlbDpuLHBvczpbVChlKSxtLzJdfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0 aW89Cm4oZSx0KXt2YXIgbj0zREVbdF18fCh0P3Q9M0Q9M0QxPyJNZWFuIjoiTWluaW11bSI6Ik1h eGltdW0iKTt2LmVsZW1lbnRNb3VzZT0Kb3V0KHt2YWx1ZTplLGxhYmVsOm59KX0pfSksbX12YXIg dD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRCJsPQplZnQiLHI9M0QhMSxp PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucmFuZ2VzfSxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUu bWFya2U9CnJzfSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3VyZXN9LHU9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS5yYW5nZUxhYmVscz0KP2UucmFuZ2VMYWJlbHM6W119LGE9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS5tYXJrZXJMYWJlbHM/ZS5tYXJrZXJMYWJlbHM6W119PQosZj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBlLm1lYXN1cmVMYWJlbHM/ZS5tZWFzdXJlTGFiZWxzOltdfSxsPTNEWzBd LGM9M0QzODA9CixoPTNEMzAscD0zRG51bGwsZD0zRGUudXRpbHMuZ2V0Q29sb3IoWyIjMWY3N2I0 Il0pLHY9M0RkMy5kaXNwYXRjaCgiZWxlbWVudD0KTW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0 Iik7cmV0dXJuIG0uZGlzcGF0Y2g9M0R2LG0ub3B0aW9ucz0zRGUudXRpbHMub3B0PQppb25zRnVu Yy5iaW5kKG0pLG0ub3JpZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KG49M0RlLHI9M0Q9Cm49M0Q9M0QicmlnaHQifHxuPTNEPTNEImJvdHRvbSIsbSk6bn0sbS5yYW5n ZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhpPTNEZSxtKTppfSxt Lm1hcmtlcnM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0KPTNEZSxt KTpzfSxtLm1lYXN1cmVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89 M0RlLG0pOm99LG0uPQpmb3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obD0zRGUsbSk6bH0sbS53aWR0aD0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGM9M0RlLG0pOmN9LG0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZz0KdW1l bnRzLmxlbmd0aD8oaD0zRGUsbSk6aH0sbS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oPQp0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRv cDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPQo9M0QidW5kZWZpbmVkIj9lLnJpZ2h0 OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS49CmJv dHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVm dDp0LmxlZnQsbSk6dH0sbT0KLnRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5jb2xvcj0zRGZ1PQpuY3Rpb24odCl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGQ9M0RlLnV0aWxzLmdldENvbG9yKHQpLG0pOmR9LG19LGUubW9kZWw9 CnMuYnVsbGV0Q2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGUuZWFjaChm dW5jdGlvbihuLGgpe3ZhciBnPQo9M0RkMy5zZWxlY3QodGhpcykseT0zRChhfHxwYXJzZUludChn LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmxlZnQtaS5yaWdodCw9CmI9M0RmLWkudG9wLWkuYm90 dG9tLHc9M0R0aGlzO20udXBkYXRlPTNEZnVuY3Rpb24oKXttKGUpfSxtLmNvbnRhaW5lcj0zRHRo aT0KcztpZighbnx8IXMuY2FsbCh0aGlzLG4saCkpe3ZhciBFPTNEZy5zZWxlY3RBbGwoIi5udi1u b0RhdGEiKS5kYXRhKFtwXSk7cmV0PQp1cm4gRS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIo ImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2U9Cm0iKS5zdHlsZSgidGV4 dC1hbmNob3IiLCJtaWRkbGUiKSxFLmF0dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLDE4K2ku dG9wKz0KYi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksbX1nLnNlbGVjdEFsbCgiLm52 LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciBTPQo9M0RzLmNhbGwodGhpcyxuLGgpLnNsaWNlKCkuc29y dChkMy5kZXNjZW5kaW5nKSx4PTNEby5jYWxsKHRoaXMsbixoKS5zbGljZSg9Cikuc29ydChkMy5k ZXNjZW5kaW5nKSxUPTNEdS5jYWxsKHRoaXMsbixoKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGlu ZyksTj0zRD0KZy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1idWxsZXRDaGFydCIpLmRhdGEoW25d KSxDPTNETi5lbnRlcigpLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtYnVsbGV0Q2hhcnQiKSxrPTNEQy5hcHBlbmQoImciKSxMPTNETi5zZWxlY3Q9CigiZyIpO2su YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1idWxsZXRXcmFwIiksay5hcHBlbmQoImciKS5h dHRyKCJjbGFzcz0KIiwibnYtdGl0bGVzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo IitpLmxlZnQrIiwiK2kudG9wKyIpIik7dmFyIEE9Cj0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFp bihbMCxNYXRoLm1heChTWzBdLHhbMF0sVFswXSldKS5yYW5nZShyP1t5LDBdOlswLD0KeV0pLE89 M0R0aGlzLl9fY2hhcnRfX3x8ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLEluZmluaXR5XSku cmFuZ2UoQS5yYW5nPQplKCkpO3RoaXMuX19jaGFydF9fPTNEQTt2YXIgTT0zRGZ1bmN0aW9uKGUp e3JldHVybiBNYXRoLmFicyhPKGUpLU8oMCkpfSxfPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gTWF0 aC5hYnMoQShlKS1BKDApKX0sRD0zRGsuc2VsZWN0KCIubnYtdGl0bGVzIikuYXBwZW49CmQoImci KS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgt NiwiKyhmLWkudG9wLT0KaS5ib3R0b20pLzIrIikiKTtELmFwcGVuZCgidGV4dCIpLmF0dHIoImNs YXNzIiwibnYtdGl0bGUiKS50ZXh0KGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUudGl0bGV9KSxELmFw cGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtc3VidGl0bGUiKS5hdHRyKCJkeSIsIjE9CmVt IikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJ0aXRsZX0pLHQud2lkdGgoeSkuaGVpZ2h0 KGIpO3ZhciBQPTNETC5zZT0KbGVjdCgiLm52LWJ1bGxldFdyYXAiKTtkMy50cmFuc2l0aW9uKFAp LmNhbGwodCk7dmFyIEg9M0RsfHxBLnRpY2tGb3JtYXQoeS8xPQowMCksQj0zREwuc2VsZWN0QWxs KCJnLm52LXRpY2siKS5kYXRhKEEudGlja3MoeS81MCksZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9 Ci50ZXh0Q29udGVudHx8SChlKX0pLGo9M0RCLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi10aWNrIikuYXR0cj0KKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFu c2xhdGUoIitPKGUpKyIsMCkifSkuc3R5bGUoIm9wYWNpdHkiLDFlPQotNik7ai5hcHBlbmQoImxp bmUiKS5hdHRyKCJ5MSIsYikuYXR0cigieTIiLGIqNy82KSxqLmFwcGVuZCgidGV4dCIpLmF0dHIo InQ9CmV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoInkiLGIqNy82 KS50ZXh0KEgpO3ZhciBGPTNEZDMudD0KcmFuc2l0aW9uKEIpLmF0dHIoInRyYW5zZm9ybSIsZnVu Y3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK0EoZSkrIiwwKSJ9KS5zPQp0eWxlKCJvcGFjaXR5 IiwxKTtGLnNlbGVjdCgibGluZSIpLmF0dHIoInkxIixiKS5hdHRyKCJ5MiIsYio3LzYpLEYuc2Vs ZWN0KCI9CnRleHQiKS5hdHRyKCJ5IixiKjcvNiksZDMudHJhbnNpdGlvbihCLmV4aXQoKSkuYXR0 cigidHJhbnNmb3JtIixmdW5jdGlvbihlKT0Ke3JldHVybiJ0cmFuc2xhdGUoIitBKGUpKyIsMCki fSkuc3R5bGUoIm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLGQub24oInRvb2x0PQppcFNob3ciLGZ1 bmN0aW9uKGUpe2Uua2V5PTNEbi50aXRsZSxjJiZ2KGUsdy5wYXJlbnROb2RlKX0pfSksZDMudGlt ZXIuZmx1c2g9CigpLG19dmFyIHQ9M0RlLm1vZGVscy5idWxsZXQoKSxuPTNEImxlZnQiLHI9M0Qh MSxpPTNEe3RvcDo1LHJpZ2h0OjQwLGJvdHRvbT0KOjIwLGxlZnQ6MTIwfSxzPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUucmFuZ2VzfSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFyPQprZXJzfSx1 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3VyZXN9LGE9M0RudWxsLGY9M0Q1NSxsPTNEbnVs bCxjPTNEITAsaD0KPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrdCsiPC9oMz4i KyI8cD4iK24rIjwvcD4ifSxwPTNEIk5vIERhdGEgPQpBdmFpbGFibGUuIixkPTNEZDMuZGlzcGF0 Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiKSx2PTNEZnVuY3Rpb24odCxuKXs9CnZhciBy PTNEdC5wb3NbMF0rKG4ub2Zmc2V0TGVmdHx8MCkraS5sZWZ0LHM9M0R0LnBvc1sxXSsobi5vZmZz ZXRUb3B8fDApK2kudD0Kb3Asbz0zRGgodC5rZXksdC5sYWJlbCx0LnZhbHVlLHQsbSk7ZS50b29s dGlwLnNob3coW3Isc10sbyx0LnZhbHVlPDA/ImUiOiJ3PQoiLG51bGwsbil9O3JldHVybiB0LmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QudG89Cm9s dGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5j dGlvbihlKXtkLnRvb2x0aT0KcEhpZGUoZSl9KSxkLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24o KXtjJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksbS5kaXNwYXRjPQpoPTNEZCxtLmJ1bGxldD0zRHQs ZDMucmViaW5kKG0sdCwiY29sb3IiKSxtLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmI9 CmluZChtKSxtLm9yaWVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu PTNEZSxyPTNEbj0zRD0zRCJyaT0KZ2h0Inx8bj0zRD0zRCJib3R0b20iLG0pOm59LG0ucmFuZ2Vz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocz0zRGUsbSk6c30sbS5t YXJrZXJzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOm99 LG09Ci5tZWFzdXJlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNE ZSxtKTp1fSxtLndpZHRoPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o YT0zRGUsbSk6YX0sbS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVu Z3RoPyhmPTNEZSxtKTpmfSxtLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3Q9Cmg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9w LGkucmlnaHQ9M0R0eXBlb2YgZS5yaWdodD0KIT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdo dCxpLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lPQouYm90dG9tOmku Ym90dG9tLGkubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVm dCxtKTppfSw9Cm0udGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSxtKTpsfSxtLnRvb2x0aXBzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYz0zRGUsbSk6Y30sbS50b29sdGlwQ29udGVudD0zRGZ1bmM9CnRpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLG0pOmh9LG0ubm9EYXRhPTNEZnVuY3Rpb24o ZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbX0sZS5tb2RlbHMuY3Vt dWxhdGl2ZUxpbmVDaGFydD0zRGZ1bmN0aW9uKCl7PQpmdW5jdGlvbiBEKGIpe3JldHVybiBiLmVh Y2goZnVuY3Rpb24oYil7ZnVuY3Rpb24gSShlLHQpe2QzLnNlbGVjdChELmNvbnRhaW49CmVyKS5z dHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIil9ZnVuY3Rpb24gcShlLHQpe00ueD0zRGQzLmV2ZW50 LngsTS5pPTNETWF0aD0KLnJvdW5kKE8uaW52ZXJ0KE0ueCkpLG50KCl9ZnVuY3Rpb24gUihlLHQp e2QzLnNlbGVjdChELmNvbnRhaW5lcikuc3R5bGUoImN1PQpyc29yIiwiYXV0byIpLHguaW5kZXg9 M0RNLmksay5zdGF0ZUNoYW5nZSh4KX1mdW5jdGlvbiBudCgpe3R0LmRhdGEoW01dKTt2YXI9CiBl PTNERC50cmFuc2l0aW9uRHVyYXRpb24oKTtELnRyYW5zaXRpb25EdXJhdGlvbigwKSxELnVwZGF0 ZSgpLEQudHJhbnNpdGlvbj0KRHVyYXRpb24oZSl9dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuY2xh c3NlZCgibnYtY2hhcnQtIitTLCEwKSxBPTNEdGhpcyxIPTNEPQooZnx8cGFyc2VJbnQoTC5zdHls ZSgid2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQsQj0zRChsfHxwYXJzZUludChMLnN0eWw9 CmUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbTtELnVwZGF0ZT0zRGZ1bmN0aW9uKCl7 TC5jYWxsKEQpfSxELmNvbnRhaT0KbmVyPTNEdGhpcyx4LmRpc2FibGVkPTNEYi5tYXAoZnVuY3Rp b24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIVQpe3ZhciBqPQo7VD0zRHt9O2ZvcihqIGlu IHgpeFtqXWluc3RhbmNlb2YgQXJyYXk/VFtqXT0zRHhbal0uc2xpY2UoMCk6VFtqXT0zRHhbal19 dmE9CnIgRj0zRGQzLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixJKS5vbigiZHJhZyIs cSkub24oImRyYWdlbmQiLFIpO2lmKD0KIWJ8fCFiLmxlbmd0aHx8IWIuZmlsdGVyKGZ1bmN0aW9u KGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBVPQo9M0RMLnNlbGVjdEFs bCgiLm52LW5vRGF0YSIpLmRhdGEoW05dKTtyZXR1cm4gVS5lbnRlcigpLmFwcGVuZCgidGV4dCIp LmF0dHI9CigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHls ZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKT0KLFUuYXR0cigieCIsdS5sZWZ0K0gvMikuYXR0cigi eSIsdS50b3ArQi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksRH1MPQouc2VsZWN0QWxs KCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz0zRHQueFNjYWxlKCksRT0zRHQueVNjYWxlKCk7aWYo IXkpe3ZhciA9Cno9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLm1h cChmdW5jdGlvbihlLG4pe3ZhciByPTNEZDMuZT0KeHRlbnQoZS52YWx1ZXMsdC55KCkpO3JldHVy biByWzBdPC0wLjk1JiYoclswXT0zRC0wLjk1KSxbKHJbMF0tclsxXSkvKDErclsxPQpdKSwoclsx XS1yWzBdKS8oMStyWzBdKV19KSxXPTNEW2QzLm1pbih6LGZ1bmN0aW9uKGUpe3JldHVybiBlWzBd fSksZDMubWF4KHo9CixmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pXTt0LnlEb21haW4oVyl9ZWxz ZSB0LnlEb21haW4obnVsbCk7Ty5kb21haW4oWzAsYj0KWzBdLnZhbHVlcy5sZW5ndGgtMV0pLnJh bmdlKFswLEhdKS5jbGFtcCghMCk7dmFyIGI9M0RQKE0uaSxiKSxYPTNEZz8ibm9uZSI6PQoiYWxs IixWPTNETC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1jdW11bGF0aXZlTGluZSIpLmRhdGEoW2Jd KSwkPTNEVi5lbnRlcig9CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtY3VtdWxhdGl2ZUxpbmUiKS5hcHBlbmQoImciKSxKPQo9M0RWLnNlbGVjdCgiZyIpOyQuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZSIpLCQuYXBwZW5kKCJnIik9Ci5h dHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUi KSwkLmFwcGVuZCgiZyIpLj0KYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSwkLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtYmFja2dyb3VuZCIpLCQuPQphcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWxpbmVzV3JhcCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsWCksJC5hcHBlbmQ9 CigiZyIpLmF0dHIoImNsYXNzIiwibnYtYXZnTGluZXNXcmFwIikuc3R5bGUoInBvaW50ZXItZXZl bnRzIiwibm9uZSIpLCQuYXBwZT0KbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAi KSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvPQpsc1dyYXAiKSxjJiYoaS53 aWR0aChIKSxKLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShiKS5jYWxsKGkpLHUudG9w IT0KPTNEaS5oZWlnaHQoKSYmKHUudG9wPTNEaS5oZWlnaHQoKSxCPTNEKGx8fHBhcnNlSW50KEwu c3R5bGUoImhlaWdodCIpKXx8NDAwPQopLXUudG9wLXUuYm90dG9tKSxKLnNlbGVjdCgiLm52LWxl Z2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCw9CiIrIC11LnRvcCsiKSIp KTtpZihtKXt2YXIgSz0zRFt7a2V5OiJSZS1zY2FsZSB5LWF4aXMiLGRpc2FibGVkOiF5fV07cy53 aWR0aD0KKDE0MCkuY29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSkucmlnaHRBbGlnbighMSku bWFyZ2luKHt0b3A6NSxyaWdodDowLGJvPQp0dG9tOjUsbGVmdDoyMH0pLEouc2VsZWN0KCIubnYt Y29udHJvbHNXcmFwIikuZGF0dW0oSykuYXR0cigidHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoMCwi KyAtdS50b3ArIikiKS5jYWxsKHMpfVYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5s ZWZ0KyIsIj0KK3UudG9wKyIpIiksZCYmSi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitIKyIsPQowKSIpO3ZhciBRPTNEYi5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIGUudGVtcERpc2FibGVkfSk7Vi5zZWxlY3QoIi50ZW1wRGk9CnNhYmxlZCIp LnJlbW92ZSgpLFEubGVuZ3RoJiZWLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidGVtcERp c2FibGVkIikuYT0KdHRyKCJ4IixILzIpLmF0dHIoInkiLCItLjcxZW0iKS5zdHlsZSgidGV4dC1h bmNob3IiLCJlbmQiKS50ZXh0KFEubWFwKGZ1bmN0PQppb24oZSl7cmV0dXJuIGUua2V5fSkuam9p bigiLCAiKSsiIHZhbHVlcyBjYW5ub3QgYmUgY2FsY3VsYXRlZCBmb3IgdGhpcyB0aW09CmUgcGVy aW9kLiIpLGcmJihvLndpZHRoKEgpLmhlaWdodChCKS5tYXJnaW4oe2xlZnQ6dS5sZWZ0LHRvcDp1 LnRvcH0pLnN2Z0Nvbj0KdGFpbmVyKEwpLnhTY2FsZSh3KSxWLnNlbGVjdCgiLm52LWludGVyYWN0 aXZlIikuY2FsbChvKSksJC5zZWxlY3QoIi5udi1iYWNrPQpncm91bmQiKS5hcHBlbmQoInJlY3Qi KSxKLnNlbGVjdCgiLm52LWJhY2tncm91bmQgcmVjdCIpLmF0dHIoIndpZHRoIixIKS5hdHQ9CnIo ImhlaWdodCIsQiksdC55KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3BsYXkueX0pLndpZHRoKEgp LmhlaWdodChCKS5jb2xvcj0KKGIubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGEo ZSx0KX0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFiPQpbdF0uZGlzYWJsZWQmJiFiW3Rd LnRlbXBEaXNhYmxlZH0pKTt2YXIgRz0zREouc2VsZWN0KCIubnYtbGluZXNXcmFwIikuZGF0dW09 CihiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmIWUudGVtcERpc2FibGVk fSkpO0cuY2FsbCh0KSxiLmZvcj0KRWFjaChmdW5jdGlvbihlLHQpe2Uuc2VyaWVzSW5kZXg9M0R0 fSk7dmFyIFk9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hPQplLmRpc2FibGVkJiYhIUMo ZSl9KSxaPTNESi5zZWxlY3QoIi5udi1hdmdMaW5lc1dyYXAiKS5zZWxlY3RBbGwoImxpbmUiKS5k YXQ9CmEoWSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KSxldD0zRGZ1bmN0aW9uKGUpe3ZhciB0 PTNERShDKGUpKTtyZXR1cm4gdDwwPz0KMDp0PkI/Qjp0fTtaLmVudGVyKCkuYXBwZW5kKCJsaW5l Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kPQphc2hhcnJheSIsIjEw LDEwIikuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jb2xvcigpKGUsZS5z ZXJpZXM9CkluZGV4KX0pLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsSCkuYXR0cigieTEiLGV0KS5h dHRyKCJ5MiIsZXQpLFouc3R5bGUoInN0cj0Kb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKGUpe3ZhciB0 PTNERShDKGUpKTtyZXR1cm4gdDwwfHx0PkI/MDoxfSkuYXR0cigieDEiLDApPQouYXR0cigieDIi LEgpLmF0dHIoInkxIixldCkuYXR0cigieTIiLGV0KSxaLmV4aXQoKS5yZW1vdmUoKTt2YXIgdHQ9 M0RHLnNlbGU9CmN0QWxsKCIubnYtaW5kZXhMaW5lIikuZGF0YShbTV0pO3R0LmVudGVyKCkuYXBw ZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudj0KLWluZGV4TGluZSIpLmF0dHIoIndpZHRoIiwz KS5hdHRyKCJ4IiwtMikuYXR0cigiZmlsbCIsInJlZCIpLmF0dHIoImZpbGwtb3BhPQpjaXR5Iiwu NSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuY2FsbChGKSx0dC5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW89Cm4oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK08oZS5pKSsiLDApIn0pLmF0dHIo ImhlaWdodCIsQiksaCYmKG4uc2NhbGUodykudGljaz0KcyhNYXRoLm1pbihiWzBdLnZhbHVlcy5s ZW5ndGgsSC83MCkpLnRpY2tTaXplKC1CLDApLEouc2VsZWN0KCIubnYteC5udi1heGlzPQoiKS5h dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0UucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5z aXRpb24oSi5zZWxlY3Q9CigiLm52LXgubnYtYXhpcyIpKS5jYWxsKG4pKSxwJiYoci5zY2FsZShF KS50aWNrcyhCLzM2KS50aWNrU2l6ZSgtSCwwKSxkMy50cj0KYW5zaXRpb24oSi5zZWxlY3QoIi5u di15Lm52LWF4aXMiKSkuY2FsbChyKSksSi5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIHJlY3QiPQop Lm9uKCJjbGljayIsZnVuY3Rpb24oKXtNLng9M0RkMy5tb3VzZSh0aGlzKVswXSxNLmk9M0RNYXRo LnJvdW5kKE8uaW52ZXJ0KE09Ci54KSkseC5pbmRleD0zRE0uaSxrLnN0YXRlQ2hhbmdlKHgpLG50 KCl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50Q2xpY2siLGZ1bj0KY3Rpb24oZSl7TS5pPTNEZS5w b2ludEluZGV4LE0ueD0zRE8oTS5pKSx4LmluZGV4PTNETS5pLGsuc3RhdGVDaGFuZ2UoeCksbnQo PQopfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxl ZD0zRCFlLmRpc2FibGVkLHk9M0Q9CiFlLmRpc2FibGVkLHgucmVzY2FsZVk9M0R5LGsuc3RhdGVD aGFuZ2UoeCksRC51cGRhdGUoKX0pLGkuZGlzcGF0Y2gub24oInN0YT0KdGVDaGFuZ2UiLGZ1bmN0 aW9uKGUpe3guZGlzYWJsZWQ9M0RlLmRpc2FibGVkLGsuc3RhdGVDaGFuZ2UoeCksRC51cGRhdGUo KX0pPQosby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVh ckhpZ2hsaWdodHMoKTt2YXIgcyxmLGw9CixjPTNEW107Yi5maWx0ZXIoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWUuZGlzYWJsZWR9KS5mb3JFYT0KY2goZnVuY3Rpb24o bixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WFZhbHVlLEQueCgp KSx0LmhpPQpnaGxpZ2h0UG9pbnQocixmLCEwKTt2YXIgbz0zRG4udmFsdWVzW2ZdO2lmKHR5cGVv ZiBvPTNEPTNEInVuZGVmaW5lZCIpcmV0dXI9Cm47dHlwZW9mIHM9M0Q9M0QidW5kZWZpbmVkIiYm KHM9M0RvKSx0eXBlb2YgbD0zRD0zRCJ1bmRlZmluZWQiJiYobD0zREQueFNjYT0KbGUoKShELngo KShvLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6RC55KCkobyxmKSxjb2xvcjphKG4sbi5z ZXJpZXNJbmRlPQp4KX0pfSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RELnlTY2FsZSgpLmludmVy dChpLm1vdXNlWSkscD0zRE1hdGguYWJzKEQueVM9CmNhbGUoKS5kb21haW4oKVswXS1ELnlTY2Fs ZSgpLmRvbWFpbigpWzFdKSxkPTNELjAzKnAsbT0zRGUubmVhcmVzdFZhbHVlSW5kZT0KeChjLm1h cChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLGgsZCk7bSE9M0Q9M0RudWxsJiYoY1ttXS5o aWdobGlnaHQ9M0QhPQowKX12YXIgZz0zRG4udGlja0Zvcm1hdCgpKEQueCgpKHMsZiksZik7by50 b29sdGlwLnBvc2l0aW9uKHtsZWZ0OmwrdS5sZWZ0LHQ9Cm9wOmkubW91c2VZK3UudG9wfSkuY2hh cnRDb250YWluZXIoQS5wYXJlbnROb2RlKS5lbmFibGVkKHYpLnZhbHVlRm9ybWF0dGVyKD0KZnVu Y3Rpb24oZSx0KXtyZXR1cm4gci50aWNrRm9ybWF0KCkoZSl9KS5kYXRhKHt2YWx1ZTpnLHNlcmll czpjfSkoKSxvLnJlbmRlPQpyR3VpZGVMaW5lKGwpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3V0IixmdW5jdGlvbihlKXtrLnRvb2x0aXBIaWRlKCk9Cix0LmNsZWFySGlnaGxpZ2h0cygp fSksay5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3YmJl8oZSxBLnBhcmVudE5vZGUpfT0K KSxrLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPTNEInVu ZGVmaW5lZCImJihiLmZvckVhPQpjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9M0RlLmRpc2Fi bGVkW25dfSkseC5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpLHR5cGU9Cm9mIGUuaW5kZXghPTNEInVu ZGVmaW5lZCImJihNLmk9M0RlLmluZGV4LE0ueD0zRE8oTS5pKSx4LmluZGV4PTNEZS5pbmRleCx0 dD0KLmRhdGEoW01dKSksdHlwZW9mIGUucmVzY2FsZVkhPTNEInVuZGVmaW5lZCImJih5PTNEZS5y ZXNjYWxlWSksRC51cGRhdGUoKX0pPQp9KSxEfWZ1bmN0aW9uIFAoZSxuKXtyZXR1cm4gbi5tYXAo ZnVuY3Rpb24obixyKXtpZighbi52YWx1ZXMpcmV0dXJuIG47dmFyIGk9Cj0zRG4udmFsdWVzW2Vd O2lmKGk9M0Q9M0RudWxsKXJldHVybiBuO3ZhciBzPTNEdC55KCkoaSxlKTtyZXR1cm4gczwtMC45 NSYmIT0KQT8obi50ZW1wRGlzYWJsZWQ9M0QhMCxuKToobi50ZW1wRGlzYWJsZWQ9M0QhMSxuLnZh bHVlcz0zRG4udmFsdWVzLm1hcChmdW5jPQp0aW9uKGUsbil7cmV0dXJuIGUuZGlzcGxheT0zRHt5 Oih0LnkoKShlLG4pLXMpLygxK3MpfSxlfSksbil9KX12YXIgdD0zRGUubW89CmRlbHMubGluZSgp LG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVn ZW5kKCkscz0KPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRGUuaW50ZXJhY3RpdmVHdWlkZWxpbmUo KSx1PTNEe3RvcDozMCxyaWdodDozMCxib3R0PQpvbTo1MCxsZWZ0OjYwfSxhPTNEZS51dGlscy5k ZWZhdWx0Q29sb3IoKSxmPTNEbnVsbCxsPTNEbnVsbCxjPTNEITAsaD0zRCEwLHA9Cj0zRCEwLGQ9 M0QhMSx2PTNEITAsbT0zRCEwLGc9M0QhMSx5PTNEITAsYj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7 cmV0dXJuIjxoMz0KPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSx3LEUsUz0z RHQuaWQoKSx4PTNEe2luZGV4OjAscmVzY2FsZVk6PQp5fSxUPTNEbnVsbCxOPTNEIk5vIERhdGEg QXZhaWxhYmxlLiIsQz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmF2ZXJhZ2V9LGs9M0Q9CmQzLmRp c3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VT dGF0ZSIpLEw9M0QwLD0KQT0zRCExO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxy Lm9yaWVudChkPyJyaWdodCI6ImxlZnQiKSxzLnVwZGF0PQplU3RhdGUoITEpO3ZhciBPPTNEZDMu c2NhbGUubGluZWFyKCksTT0zRHtpOjAseDowfSxfPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0KPTNE aS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCks YT0zRG4udGlja0Zvcm1hPQp0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPTNEci50 aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW49CmRleCkpLGw9M0RiKGkuc2VyaWVz LmtleSxhLGYsaSxEKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51bGwsbnVsbCxzKX07cmV0dT0K cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtl LnBvcz0zRFtlLnBvc1swXSt1PQoubGVmdCxlLnBvc1sxXSt1LnRvcF0say50b29sdGlwU2hvdyhl KX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b289Cmx0aXAiLGZ1bmN0aW9uKGUp e2sudG9vbHRpcEhpZGUoZSl9KSxrLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXt2JiZlLnRv bz0KbHRpcC5jbGVhbnVwKCl9KSxELmRpc3BhdGNoPTNEayxELmxpbmVzPTNEdCxELmxlZ2VuZD0z RGksRC54QXhpcz0zRG4sRC55QXhpPQpzPTNEcixELmludGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJl YmluZChELHQsImRlZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIsInhTY2E9CmxlIiwieVNjYWxlIiwi c2l6ZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9y Y2VZIj0KLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9p IiwiaWQiKSxELm9wdGlvbnM9M0RlLnV0PQppbHMub3B0aW9uc0Z1bmMuYmluZChEKSxELm1hcmdp bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnQ9Cm9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnUudG9wLHUucmlnaHQ9M0R0eXBlb2YgZS5yaWdo dCE9M0QidT0KbmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmJv dHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvPQptOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnUubGVmdCxEKTp1fSxELndpZHQ9Cmg9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsRCk6Zn0sRC5oZWlnaHQ9M0Rm dW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxEKTpsfSxELmNvbG9y PTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oYT0zRGUudXRpbHMuZ2V0 Q29sb3IodCksaS5jb2xvcihhKSxEKTphfSxELnJlc2NhbGVZPTNEZnVuY3Rpb24oZSk9CntyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsRCk6eX0sRC5zaG93Q29udHJvbHM9M0RmdW5jdGlv bihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxEKTptfSxELnVzZUludGVyYWN0 aXZlR3VpZGVsaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oZz0z RGUsZT0zRD0zRD0zRCEwJiYoRC5pbnRlcmFjdGl2ZSghMSksRC51c2VWb3Jvbm9pKCExKSk9CixE KTpnfSxELnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Yz0zRGUsRCk6Y30sRC5zaD0Kb3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhoPTNEZSxEKTpofSxELnNob3dZQXhpcz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLEQpOnB9LEQucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rpb249 CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsci5vcmllbnQoZT8icmlnaHQiOiJs ZWZ0IiksRCk6ZH0sRC50b29sdD0KaXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHY9M0RlLEQpOnZ9LEQudG9vbHRpcENvbnRlbnQ9M0RmPQp1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxEKTpifSxELnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0 dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsRCk6eH0sRC5kZWZhdWx0U3RhdGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhUPTNEZSxEKTpUfSxELm5vRGF0YT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPTNEPQplLEQpOk59LEQuYXZl cmFnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPTNEZSxEKTpDfSxE LnRyYW49CnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KEw9M0RlLEQpOkx9LEQubm9FcnJvcj0KQ2hlY2s9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oQT0zRGUsRCk6QX0sRH0sZS5tb2RlbHMuZGlzY3JlPQp0ZUJhcj0zRGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPTNE bi10LmxlZnQ9Ci10LnJpZ2h0LEU9M0RyLXQudG9wLXQuYm90dG9tLFM9M0RkMy5zZWxlY3QodGhp cyk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZT0KLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUp e2Uuc2VyaWVzPTNEdH0pfSk7dmFyIFQ9M0RwJiZkP1tdOmUubWFwKGZ1bmN0aW9uPQooZSl7cmV0 dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5 MDplLnkwfX0pfSk9CjtzLmRvbWFpbihwfHxkMy5tZXJnZShUKS5tYXAoZnVuY3Rpb24oZSl7cmV0 dXJuIGUueH0pKS5yYW5nZUJhbmRzKHZ8fFswLGldLD0KLjEpLG8uZG9tYWluKGR8fGQzLmV4dGVu dChkMy5tZXJnZShUKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdChmPQopKSks Yz9vLnJhbmdlKG18fFtFLShvLmRvbWFpbigpWzBdPDA/MTI6MCksby5kb21haW4oKVsxXT4wPzEy OjBdKTpvLnJhbmdlKG09Cnx8W0UsMF0pLGI9M0RifHxzLHc9M0R3fHxvLmNvcHkoKS5yYW5nZShb bygwKSxvKDApXSk7dmFyIE49M0RTLnNlbGVjdEFsbCgiZz0KLm52LXdyYXAubnYtZGlzY3JldGVi YXIiKS5kYXRhKFtlXSksQz0zRE4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoi bnZkMyBudi13cmFwIG52LWRpc2NyZXRlYmFyIiksaz0zREMuYXBwZW5kKCJnIiksTD0zRE4uc2Vs ZWN0KCJnIik7ay5hcHBlbmQ9CigiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksTi5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiKz0KdC50b3ArIikiKTt2YXIgQT0z RE4uc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0 PQppb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO0EuZW50ZXIoKS5h cHBlbmQoImciKS5zdHlsZSgic3Q9CnJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3Bh Y2l0eSIsMWUtNiksQS5leGl0KCkuc3R5bGUoInN0cm9rZS1vcGFjaT0KdHkiLDFlLTYpLnN0eWxl KCJmaWxsLW9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLEEuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUs dCl7PQpyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5j dGlvbihlKXtyZXR1cm4gZS5ob3Zlcn09CiksQS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0 eWxlKCJmaWxsLW9wYWNpdHkiLC43NSk7dmFyIE89M0RBLnNlbGVjdEFsbD0KKCJnLm52LWJhciIp LmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSk7Ty5leGl0KCkucmVtb3ZlKCk7dmFy IE09M0RPPQouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUs dCxuKXtyZXR1cm4idHJhbnNsYXRlKCIrKHM9Cih1KGUsdCkpK3MucmFuZ2VCYW5kKCkqLjA1KSsi LCAiK28oMCkrIikifSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtkMz0KLnNlbGVjdCh0 aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLGcuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4p LHBvaW50OnQsPQpzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQo KSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSg9CnQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVz SW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdD0KaW9uKHQs bil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksZy5lbGVtZW50TW91c2VvdXQo e3ZhbHVlOmEodCxuPQopLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixz ZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSk9Cn0pLm9uKCJjbGljayIsZnVuY3Rpb24o dCxuKXtnLmVsZW1lbnRDbGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdD0KLnNl cmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3Ro LG8oYSh0LG4pKV0scG9pPQpudEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVu dH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub249CigiZGJsY2xpY2siLGZ1bmN0aW9u KHQsbil7Zy5lbGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplWz0K dC5zZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHQuc2VyaWVzKy41KS9lLmxl bmd0aCxvKGEodCxuKSldLHBvPQppbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMu ZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pO009Ci5hcHBlbmQoInJlY3QiKS5h dHRyKCJoZWlnaHQiLDApLmF0dHIoIndpZHRoIixzLnJhbmdlQmFuZCgpKi45L2UubGVuZ3RoKSxj Pz0KKE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxPLnNlbGVj dCgidGV4dCIpLnRleHQoZnVuY3RpPQpvbihlLHQpe3JldHVybiBoKGEoZSx0KSl9KS5hdHRyKCJ4 IixzLnJhbmdlQmFuZCgpKi45LzIpLmF0dHIoInkiLGZ1bmN0aW9uKGU9Cix0KXtyZXR1cm4gYShl LHQpPDA/byhhKGUsdCkpLW8oMCkrMTI6LTR9KSk6Ty5zZWxlY3RBbGwoInRleHQiKS5yZW1vdmUo KSxPLj0KYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIg bmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpPQp2ZSJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8bChlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnU9Cm5jdGlvbihlLHQp e3JldHVybiBlLmNvbG9yfHxsKGUsdCl9KS5zZWxlY3QoInJlY3QiKS5hdHRyKCJjbGFzcyIseSku YXR0cigidz0KaWR0aCIscy5yYW5nZUJhbmQoKSouOS9lLmxlbmd0aCksTy5hdHRyKCJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RzPQoodShlLHQpKStzLnJhbmdlQmFuZCgpKi4wNSxy PTNEYShlLHQpPDA/bygwKTpvKDApLW8oYShlLHQpKTwxP28oMCktMTpvKGEoZSw9CnQpKTtyZXR1 cm4idHJhbnNsYXRlKCIrbisiLCAiK3IrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0 IixmdW5jdGlvbj0KKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKG8oYShlLHQpKS1vKGQm JmRbMF18fDApKXx8MSl9KSxiPTNEcy5jb3B5KCksPQp3PTNEby5jb3B5KCl9KSxFfXZhciB0PTNE e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0KPTNETWF0 aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz0zRGQzLnNjYWxlLm9yZGluYWwoKSxvPTNEZDMu c2NhbGUubGluZWFyPQooKSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnl9LGY9M0RbMF0sbD0zRGUudXQ9Cmlscy5kZWZhdWx0Q29sb3IoKSxjPTNE ITEsaD0zRGQzLmZvcm1hdCgiLC4yZiIpLHAsZCx2LG0sZz0zRGQzLmRpc3BhdGNoKCJjaD0KYXJ0 Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVy IiwiZWxlbWVudE1vdXNlPQpvdXQiKSx5PTNEImRpc2NyZXRlQmFyIixiLHc7cmV0dXJuIEUuZGlz cGF0Y2g9M0RnLEUub3B0aW9ucz0zRGUudXRpbHMub3B0aW89Cm5zRnVuYy5iaW5kKEUpLEUueD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxFKTp1fSxFLnk9Cj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxFKTphfSxFLm1hcmdp bj0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQuPQpyaWdodD0zRHR5cGVvZiBlLnJp Z2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmI9 Cm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lZD0KIj9lLmxlZnQ6dC5sZWZ0LEUpOnR9LEUud2lkdGg9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsPQpFKTpufSxFLmhlaWdodD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxFKTpyfSxFLnhTY2Fs ZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEUpOnN9LEUu eVNjYWxlPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsRSk6 b30sRS54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8ocD0z RGUsRSk6cH0sRS55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGQ9Cj0zRGUsRSk6ZH0sRS54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odj0zRGUsRSk6dn0sRS55Uj0KYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhtPTNEZSxFKTptfSxFLmZvcmNlWT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGY9M0RlLEUpOmZ9LEUuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndW09CmVudHMubGVuZ3RoPyhsPTNEZS51dGlscy5nZXRDb2xvcih0KSxFKTpsfSxFLmlkPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oaT0zRGUsRSk6aX0sRS5zaG93 VmFsdWVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYz0zRGUsRSk6 Y30sRS52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho PTNEZSxFKTo9Cmh9LEUucmVjdENsYXNzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHk9M0RlLEUpOnl9LEV9LGUubW9kZT0KbHMuZGlzY3JldGVCYXJDaGFydD0zRGZ1bmN0 aW9uKCl7ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhPQpyIHU9M0Rk My5zZWxlY3QodGhpcykscD0zRHRoaXMseT0zRChzfHxwYXJzZUludCh1LnN0eWxlKCJ3aWR0aCIp KXx8OTYwKS1pLmw9CmVmdC1pLnJpZ2h0LEU9M0Qob3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0 IikpfHw0MDApLWkudG9wLWkuYm90dG9tO3cudXBkYT0KdGU9M0RmdW5jdGlvbigpe2cuYmVmb3Jl VXBkYXRlKCksdS5jYWxsKHcpfSx3LmNvbnRhaW5lcj0zRHRoaXM7aWYoIWV8fCFlLmxlPQpuZ3Ro fHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7 dmFyIFM9M0R1LnNlbGU9CmN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbbV0pO3JldHVybiBTLmVu dGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLD0KIm52ZDMgbnYtbm9EYXRhIikuYXR0 cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLFMuYXR0cigiPQp4 IixpLmxlZnQreS8yKS5hdHRyKCJ5IixpLnRvcCtFLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJu IGV9KSx3fXUuc2VsZWN0QWw9CmwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxkPTNEdC54U2NhbGUo KSx2PTNEdC55U2NhbGUoKS5jbGFtcCghMCk7dmFyIFQ9M0R1Lj0Kc2VsZWN0QWxsKCJnLm52LXdy YXAubnYtZGlzY3JldGVCYXJXaXRoQXhlcyIpLmRhdGEoW2VdKSxOPTNEVC5lbnRlcigpLmFwcGVu PQpkKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGVCYXJXaXRoQXhl cyIpLmFwcGVuZCgiZyIpLEM9M0Q9Ck4uYXBwZW5kKCJkZWZzIiksaz0zRFQuc2VsZWN0KCJnIik7 Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcz0KIiksTi5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtPQp6ZXJvTGluZSIpLmFwcGVuZCgibGluZSIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1iYXJzV3JhcCIpLGsuYXR0cig9CiJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmxlZnQr IiwiK2kudG9wKyIpIiksbCYmay5zZWxlY3QoIi5udi15Lm52LWF4aXMiKT0KLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK3krIiwwKSIpLHQud2lkdGgoeSkuaGVpZ2h0KEUpO3ZhciBMPTNE ay5zZWxlPQpjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIWUuZGlzYWJsZWR9KSk7TC5jYWxsKHQ9CiksQy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigi aWQiLCJudi14LWxhYmVsLWNsaXAtIit0LmlkKCkpLmFwcGVuZCgicmVjdCIpLD0Kay5zZWxlY3Qo IiNudi14LWxhYmVsLWNsaXAtIit0LmlkKCkrIiByZWN0IikuYXR0cigid2lkdGgiLGQucmFuZ2VC YW5kKCkqKGM/PQoyOjEpKS5hdHRyKCJoZWlnaHQiLDE2KS5hdHRyKCJ4IiwtZC5yYW5nZUJhbmQo KS8oYz8xOjIpKTtpZihhKXtuLnNjYWxlKGQpLnQ9Cmlja3MoeS8xMDApLnRpY2tTaXplKC1FLDAp LGsuc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbj0Kc2xhdGUo MCwiKyh2LnJhbmdlKClbMF0rKHQuc2hvd1ZhbHVlcygpJiZ2LmRvbWFpbigpWzBdPDA/MTY6MCkp KyIpIiksay5zZWxlPQpjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobik7dmFyIEE9M0RrLnNlbGVj dCgiLm52LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZyI9Cik7YyYmQS5zZWxlY3RBbGwoInRleHQi KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idHJhbnNsYXRlKD0KMCwi KyhuJTI9M0Q9M0QwPyI1IjoiMTciKSsiKSJ9KX1mJiYoci5zY2FsZSh2KS50aWNrcyhFLzM2KS50 aWNrU2l6ZSgteSwwKSxrPQouc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksay5zZWxl Y3QoIi5udi16ZXJvTGluZSBsaW5lIikuYXR0cigieDEiLDA9CikuYXR0cigieDIiLHkpLmF0dHIo InkxIix2KDApKS5hdHRyKCJ5MiIsdigwKSksZy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKD0K ZSl7aCYmYihlLHAucGFyZW50Tm9kZSl9KX0pLHd9dmFyIHQ9M0RlLm1vZGVscy5kaXNjcmV0ZUJh cigpLG49M0RlLm1vZGVscy5hPQp4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0R7dG9wOjE1 LHJpZ2h0OjEwLGJvdHRvbTo1MCxsZWZ0OjYwfSxzPTNEbnVsbCw9Cm89M0RudWxsLHU9M0RlLnV0 aWxzLmdldENvbG9yKCksYT0zRCEwLGY9M0QhMCxsPTNEITEsYz0zRCExLGg9M0QhMCxwPTNEZnVu Yz0KdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+Iit0KyI8L2gzPiIrIjxwPiIrbisiPC9wPiJ9 LGQsdixtPTNEIk5vIERhdGEgQXZhPQppbGFibGUuIixnPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBT aG93IiwidG9vbHRpcEhpZGUiLCJiZWZvcmVVcGRhdGUiKSx5PTNEMDs9Cm4ub3JpZW50KCJib3R0 b20iKS5oaWdobGlnaHRaZXJvKCExKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0KGZ1bmN0aW9u KGUpez0KcmV0dXJuIGV9KSxyLm9yaWVudChsPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWF0KGQz LmZvcm1hdCgiLC4xZiIpKTt2YXIgYj0KPTNEZnVuY3Rpb24oaSxzKXt2YXIgbz0zRGkucG9zWzBd KyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUPQpvcHx8MCksYT0zRG4u dGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1h dCgpKHQ9Ci55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPTNEcChpLnNlcmllcy5rZXksYSxm LGksdyk7ZS50b29sdGlwLnNob3coW28sdT0KXSxsLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9 O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0PQppcCIsZnVuY3Rp b24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0raS5sZWZ0LGUucG9zWzFdK2kudG9wXSxnLnRvb2x0aXBT aG93KGUpfSk9Cix0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rp b24oZSl7Zy50b29sdGlwSGlkZShlKX0pLGcubz0KbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7 aCYmZS50b29sdGlwLmNsZWFudXAoKX0pLHcuZGlzcGF0Y2g9M0RnLHcuZGlzY3JlPQp0ZWJhcj0z RHQsdy54QXhpcz0zRG4sdy55QXhpcz0zRHIsZDMucmViaW5kKHcsdCwieCIsInkiLCJ4RG9tYWlu IiwieURvbWFpbiI9CiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiaWQiLCJz aG93VmFsdWVzIiwidmFsdWVGb3JtYXQiKSx3Lm9wdD0KaW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1 bmMuYmluZCh3KSx3Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5n dGg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGkucmln aHQ9M0R0eXBlb2YgZS49CnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6aS5yaWdodCxpLmJv dHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbj0KZWQiP2UuYm90dG9tOmkuYm90dG9t LGkubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmkubGVmdCx3PQop Oml9LHcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUs dyk6c30sdy5oZWlnaHQ9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhv PTNEZSx3KTpvfSx3LmNvbG9yPTNEZnVuY3Rpb24obil7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0 aD8odT0zRGUudXRpbHMuZ2V0Q29sb3IobiksdC5jb2xvcih1KSx3KTp1fSx3LnNob3dYQXhpcz0K PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpOmF9LHcuc2hv d1lBeGlzPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsdyk6 Zn0sdy5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSx3KTpsfSx3LnN0YWdnZXJMYWJl bD0Kcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx3KTpjfSx3 LnRvb2x0aXBzPTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUs dyk6aH0sdy50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5s ZW5ndGg/KHA9M0RlLHcpOnB9LHcubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZT0Kbmd0aD8obT0zRGUsdyk6bX0sdy50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyh5PTNEZSx3KTp5fSx3fSxlLm1vZGVscy5kaXN0 cmlidXRpb249M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGU9Ci5lYWNoKGZ1bmN0 aW9uKGUpe3ZhciBhPTNEbi0oaT0zRD0zRD0zRCJ4Ij90LmxlZnQrdC5yaWdodDp0LnRvcCt0LmJv dHRvbSksbD0KPTNEaT0zRD0zRCJ4Ij8ieSI6IngiLGM9M0RkMy5zZWxlY3QodGhpcyk7Zj0zRGZ8 fHU7dmFyIGg9M0RjLnNlbGVjdEFsbCgiZy5uPQp2LWRpc3RyaWJ1dGlvbiIpLmRhdGEoW2VdKSxw PTNEaC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi09CmRpc3RyaWJ1 dGlvbiIpLGQ9M0RwLmFwcGVuZCgiZyIpLHY9M0RoLnNlbGVjdCgiZyIpO2guYXR0cigidHJhbnNm b3JtIiwidHJhbj0Kc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIG09M0R2LnNlbGVj dEFsbCgiZy5udi1kaXN0IikuZGF0YShmdW5jdGlvPQpuKGUpe3JldHVybiBlfSxmdW5jdGlvbihl KXtyZXR1cm4gZS5rZXl9KTttLmVudGVyKCkuYXBwZW5kKCJnIiksbS5hdHRyKCJjbGE9CnNzIixm dW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0IG52LXNlcmllcy0iK3R9KS5zdHlsZSgic3Ryb2tl IixmdW5jdGlvbihlLD0KdCl7cmV0dXJuIG8oZSx0KX0pO3ZhciBnPTNEbS5zZWxlY3RBbGwoImxp bmUubnYtZGlzdCIraSkuZGF0YShmdW5jdGlvbihlKXtyPQpldHVybiBlLnZhbHVlc30pO2cuZW50 ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGY9Cihz KGUsdCkpfSkuYXR0cihpKyIyIixmdW5jdGlvbihlLHQpe3JldHVybiBmKHMoZSx0KSl9KSxtLmV4 aXQoKS5zZWxlY3RBbGwoIj0KbGluZS5udi1kaXN0IitpKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHUocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuPQpjdGlvbihlLHQpe3JldHVybiB1 KHMoZSx0KSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDApLnJlbW92ZSgpLGcuYXR0cigiY2w9 CmFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZGlzdCIraSsiIG52LWRpc3QiK2krIi0iK3R9 KS5hdHRyKGwrIjEiLDApLmF0dD0KcihsKyIyIixyKSxnLmF0dHIoaSsiMSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gdShzKGUsdCkpfSkuYXR0cihpKyIyIixmdW5jdGlvPQpuKGUsdCl7cmV0dXJuIHUo cyhlLHQpKX0pLGY9M0R1LmNvcHkoKX0pLGx9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206 MCw9CmxlZnQ6MH0sbj0zRDQwMCxyPTNEOCxpPTNEIngiLHM9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZVtpXX0sbz0zRGUudXRpbHMuZGVmYT0KdWx0Q29sb3IoKSx1PTNEZDMuc2NhbGUubGluZWFyKCks YSxmO3JldHVybiBsLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jPQouYmluZChsKSxsLm1h cmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVv ZiBlLnQ9Cm9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5y aWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZz0KaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlPQpmdD0zRHR5cGVv ZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxsKTp0fSxsLndpZHRoPTNEZnVu Y3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsbCk6bn0sbC5heGlzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0aD8oaT0zRGUsbCk6aX0sbC5zaXpl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGwpPQo6cn0sbC5n ZXREYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RkMy5mdW5j dG9yKGUpLGwpOnM9Cn0sbC5zY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh1PTNEZSxsKTp1fSxsLmNvbG9yPTNEZnVuYz0KdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obz0zRGUudXRpbHMuZ2V0Q29sb3IodCksbCk6b30sbH0sZS5tb2RlbHMuPQpoaXN0 b3JpY2FsQmFyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZWFjaChm dW5jdGlvbihkKXt2YXI9CiBFPTNEZDMuc2VsZWN0KHRoaXMpLFQ9M0R0aGlzLE49M0QodXx8cGFy c2VJbnQoRS5zdHlsZSgid2lkdGgiKSl8fDk2MCktcy5sZT0KZnQtcy5yaWdodCxDPTNEKGF8fHBh cnNlSW50KEUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1zLnRvcC1zLmJvdHRvbTt4LnVwZGF0PQpl PTNEZnVuY3Rpb24oKXtFLmNhbGwoeCl9LHguY29udGFpbmVyPTNEdGhpcyxnLmRpc2FibGVkPTNE ZC5tYXAoZnVuY3Rpb24oZSk9CntyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheSl7dmFyIGs7eT0z RHt9O2ZvcihrIGluIGcpZ1trXWluc3RhbmNlb2YgQXJyYXk/eT0KW2tdPTNEZ1trXS5zbGljZSgw KTp5W2tdPTNEZ1trXX1pZighZHx8IWQubGVuZ3RofHwhZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 PQp1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgTD0zREUuc2VsZWN0QWxsKCIubnYt bm9EYXRhIikuZGF0YShbYl0pO3I9CmV0dXJuIEwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLj0KN2VtIikuc3R5bGUoInRl eHQtYW5jaG9yIiwibWlkZGxlIiksTC5hdHRyKCJ4IixzLmxlZnQrTi8yKS5hdHRyKCJ5IixzLnRv cCtDPQovMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHh9RS5zZWxlY3RBbGwoIi5udi1u b0RhdGEiKS5yZW1vdmUoKSx2PTNEdC49CnhTY2FsZSgpLG09M0R0LnlTY2FsZSgpO3ZhciBBPTNE RS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1oaXN0b3JpY2FsQmFyQ2hhcj0KdCIpLmRhdGEoW2Rd KSxPPTNEQS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52 LWhpc3RvPQpyaWNhbEJhckNoYXJ0IikuYXBwZW5kKCJnIiksTT0zREEuc2VsZWN0KCJnIik7Ty5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm49CnYteCBudi1heGlzIiksTy5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLE8uYXBwZW5kKCJnIikuYXR0cj0KKCJjbGFzcyIs Im52LWJhcnNXcmFwIiksTy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAi KSxmJiYoaS53PQppZHRoKE4pLE0uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGQpLmNh bGwoaSkscy50b3AhPTNEaS5oZWlnaHQoKSYmKHM9Ci50b3A9M0RpLmhlaWdodCgpLEM9M0QoYXx8 cGFyc2VJbnQoRS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXMudG9wLXMuYm90dG9tKT0KLEEuc2Vs ZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1z LnRvcCsiKSIpKSxBPQouYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5sZWZ0KyIsIitz LnRvcCsiKSIpLGgmJk0uc2VsZWN0KCIubnYteS5udi09CmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitOKyIsMCkiKSx0LndpZHRoKE4pLmhlaWdodChDKS5jb2xvcihkLj0KbWFw KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG8oZSx0KX0pLmZpbHRlcihmdW5jdGlvbihl LHQpe3JldHVybiFkW3RdPQouZGlzYWJsZWR9KSk7dmFyIF89M0RNLnNlbGVjdCgiLm52LWJhcnNX cmFwIikuZGF0dW0oZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmU9CnR1cm4hZS5kaXNhYmxlZH0pKTtf LmNhbGwodCksbCYmKG4uc2NhbGUodikudGlja1NpemUoLUMsMCksTS5zZWxlY3QoIi5udi14Lj0K bnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrbS5yYW5nZSgpWzBdKyIp IiksTS5zZWxlY3QoIi5udi14PQoubnYtYXhpcyIpLmNhbGwobikpLGMmJihyLnNjYWxlKG0pLnRp Y2tzKEMvMzYpLnRpY2tTaXplKC1OLDApLE0uc2VsZWN0KCIubnY9Ci15Lm52LWF4aXMiKS5jYWxs KHIpKSxpLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24odCxuKXt0LmRpc2FibGVk PQo9M0QhdC5kaXNhYmxlZCxkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0p Lmxlbmd0aHx8ZC5tYXAoZnVuY3Q9CmlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0zRCExLEEuc2Vs ZWN0QWxsKCIubnYtc2VyaWVzIikuY2xhc3NlZCgiZGlzYWJsZWQiLD0KITEpLGV9KSxnLmRpc2Fi bGVkPTNEZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksdy5zdGF0ZUNoYW5n ZShnPQopLGUuY2FsbCh4KX0pLGkuZGlzcGF0Y2gub24oImxlZ2VuZERibGNsaWNrIixmdW5jdGlv bihlKXtkLmZvckVhY2goZnVuY3Rpb249CihlKXtlLmRpc2FibGVkPTNEITB9KSxlLmRpc2FibGVk PTNEITEsZy5kaXNhYmxlZD0zRGQubWFwKGZ1bmN0aW9uKGUpe3JldHVybj0KISFlLmRpc2FibGVk fSksdy5zdGF0ZUNoYW5nZShnKSx4LnVwZGF0ZSgpfSksdy5vbigidG9vbHRpcFNob3ciLGZ1bmN0 aW9uKGUpPQp7cCYmUyhlLFQucGFyZW50Tm9kZSl9KSx3Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rp b24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPQo9M0QidW5kZWZpbmVkIiYmKGQuZm9yRWFjaChmdW5j dGlvbih0LG4pe3QuZGlzYWJsZWQ9M0RlLmRpc2FibGVkW25dfSksZy5kaXM9CmFibGVkPTNEZS5k aXNhYmxlZCkseC51cGRhdGUoKX0pfSkseH12YXIgdD0zRGUubW9kZWxzLmhpc3RvcmljYWxCYXIo KSxuPTNEZT0KLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMu bGVnZW5kKCkscz0zRHt0b3A6MzAscmlnaHQ6PQo5MCxib3R0b206NTAsbGVmdDo5MH0sbz0zRGUu dXRpbHMuZGVmYXVsdENvbG9yKCksdT0zRG51bGwsYT0zRG51bGwsZj0zRCExLGw9Cj0zRCEwLGM9 M0QhMCxoPTNEITEscD0zRCEwLGQ9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+Iitl KyI8L2gzPiIrIj0KPHA+IituKyIgYXQgIit0KyI8L3A+In0sdixtLGc9M0R7fSx5PTNEbnVsbCxi PTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsdz0zRGQzPQouZGlzcGF0Y2goInRvb2x0aXBTaG93Iiwi dG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksRT0zRDA7bi49Cm9yaWVu dCgiYm90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllbnQoaD8icmlnaHQiOiJsZWZ0Iik7dmFy IFM9M0RmdW5jdGlvbj0KKGkscyl7aWYocyl7dmFyIG89M0RkMy5zZWxlY3Qocykuc2VsZWN0KCJz dmciKSx1PTNEby5ub2RlKCk/by5hdHRyKCJ2aWV3Qm94PQoiKTpudWxsO2lmKHUpe3U9M0R1LnNw bGl0KCIgIik7dmFyIGE9M0RwYXJzZUludChvLnN0eWxlKCJ3aWR0aCIpKS91WzJdO2kucG89CnNb MF09M0RpLnBvc1swXSphLGkucG9zWzFdPTNEaS5wb3NbMV0qYX19dmFyIGY9M0RpLnBvc1swXSso cy5vZmZzZXRMZWZ0fHwwKT0KLGw9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGM9M0RuLnRp Y2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRlPQp4KSksaD0zRHIudGlja0Zvcm1h dCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSkscD0zRGQoaS5zZXJpZXMua2V5LGMsaCw9 CmkseCk7ZS50b29sdGlwLnNob3coW2YsbF0scCxudWxsLG51bGwscyl9O3JldHVybiB0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91cz0KZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0Rb ZS5wb3NbMF0rcy5sZWZ0LGUucG9zWzFdK3MudG9wXSx3LnRvb2x0PQppcFNob3coZSl9KSx0LmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7dy50b29sdGlw SGk9CmRlKGUpfSksdy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7cCYmZS50b29sdGlwLmNs ZWFudXAoKX0pLHguZGlzcGF0Y2g9Cj0zRHcseC5iYXJzPTNEdCx4LmxlZ2VuZD0zRGkseC54QXhp cz0zRG4seC55QXhpcz0zRHIsZDMucmViaW5kKHgsdCwiZGVmaW5lZD0KIiwiaXNBcmVhIiwieCIs InkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2Ui LCJ5PQpSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJj bGlwVm9yb25vaSIsImlkIiwiaW50ZXI9CnBvbGF0ZSIsImhpZ2hsaWdodFBvaW50IiwiY2xlYXJI aWdobGlnaHRzIiwiaW50ZXJhY3RpdmUiKSx4Lm9wdGlvbnM9M0RlLnV0aT0KbHMub3B0aW9uc0Z1 bmMuYmluZCh4KSx4Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhzLnRvPQpwPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnMudG9wLHMucmln aHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW49CmRlZmluZWQiP2UucmlnaHQ6cy5yaWdodCxzLmJv dHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbT0KOnMuYm90dG9t LHMubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnMubGVmdCx4KTpz fSx4LndpZHRoPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUs eCk6dX0seC5oZWlnaHQ9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh PTNEZSx4KTphfSx4LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cz0KLmxlbmd0 aD8obz0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihvKSx4KTpvfSx4LnNob3dMZWdlbmQ9 M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSx4KTpmfSx4LnNo b3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KGw9M0RlLHgp Omx9LHguc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8o Yz0zRGUseCk6Y30seC5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0KPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSx4KTpofSx4LnRv b2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8ocD0zRGUseCk6 cH0seC50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5n dGg/KGQ9M0RlLHgpOmR9LHguc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oZz0zRGUseCk6Zz0KfSx4LmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh5PTNEZSx4KTp5fSx4Lm5vRGF0PQphPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLHgpOmJ9LHgudHJhbnNpdGlvbkR1cmF0aW9uPQo9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUseCk6RX0seH0sZS5t b2RlbHMuaW5kZW50ZWRUcmU9CmU9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUu ZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBrKGUsdCxuKXtkMz0KLmV2ZW50LnN0b3BQcm9wYWdh dGlvbigpO2lmKGQzLmV2ZW50LnNoaWZ0S2V5JiYhbilyZXR1cm4gZDMuZXZlbnQuc2hpZnRLZXk9 Cj0zRCExLGUudmFsdWVzJiZlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhlLnZhbHVlc3x8 ZS5fdmFsdWVzKSYmayhlLDAsIT0KMCl9KSwhMDtpZighTyhlKSlyZXR1cm4hMDtlLnZhbHVlcz8o ZS5fdmFsdWVzPTNEZS52YWx1ZXMsZS52YWx1ZXM9M0RudWxsKTooPQplLnZhbHVlcz0zRGUuX3Zh bHVlcyxlLl92YWx1ZXM9M0RudWxsKSxnLnVwZGF0ZSgpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUu X3Y9CmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RoP2g6ZS52YWx1ZXMmJmUudmFsdWVzLmxlbmd0aD9w OiIifWZ1bmN0aW9uIEEoZSl7cmV0dT0Kcm4gZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RofWZ1 bmN0aW9uIE8oZSl7dmFyIHQ9M0RlLnZhbHVlc3x8ZS5fdmFsdWVzO3JlPQp0dXJuIHQmJnQubGVu Z3RofXZhciB0PTNEMSxuPTNEZDMuc2VsZWN0KHRoaXMpLGk9M0RkMy5sYXlvdXQudHJlZSgpLmNo aWxkcmU9Cm4oZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkuc2l6ZShbcixmXSk7Zy51cGRh dGU9M0RmdW5jdGlvbigpe24uY2FsbChnKT0KfSxlWzBdfHwoZVswXT0zRHtrZXk6YX0pO3ZhciBz PTNEaS5ub2RlcyhlWzBdKSx5PTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsPQpsKCJkaXYiKS5k YXRhKFtbc11dKSxiPTNEeS5lbnRlcigpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJudmQz IG52LXdyYXA9CiBudi1pbmRlbnRlZHRyZWUiKSx3PTNEYi5hcHBlbmQoInRhYmxlIiksRT0zRHku c2VsZWN0KCJ0YWJsZSIpLmF0dHIoIndpZHRoIj0KLCIxMDAlIikuYXR0cigiY2xhc3MiLGMpO2lm KG8pe3ZhciBTPTNEdy5hcHBlbmQoInRoZWFkIikseD0zRFMuYXBwZW5kKCJ0ciIpPQo7bC5mb3JF YWNoKGZ1bmN0aW9uKGUpe3guYXBwZW5kKCJ0aCIpLmF0dHIoIndpZHRoIixlLndpZHRoP2Uud2lk dGg6IjEwJSIpLnM9CnR5bGUoInRleHQtYWxpZ24iLGUudHlwZT0zRD0zRCJudW1lcmljIj8icmln aHQiOiJsZWZ0IikuYXBwZW5kKCJzcGFuIikudGV4dD0KKGUubGFiZWwpfSl9dmFyIFQ9M0RFLnNl bGVjdEFsbCgidGJvZHkiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7VC5lbnRlPQpyKCku YXBwZW5kKCJ0Ym9keSIpLHQ9M0RkMy5tYXgocyxmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXB0aH0p LGkuc2l6ZShbcix0KmY9Cl0pO3ZhciBOPTNEVC5zZWxlY3RBbGwoInRyIikuZGF0YShmdW5jdGlv bihlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cj0KZXR1cm4gdSYmIWUuY2hpbGRyZW4/ dShlKTohMH0pfSxmdW5jdGlvbihlLHQpe3JldHVybiBlLmlkfHxlLmlkfHwrK219KTtOLmV4PQpp dCgpLnJlbW92ZSgpLE4uc2VsZWN0KCJpbWcubnYtdHJlZWljb24iKS5hdHRyKCJzcmMiLEwpLmNs YXNzZWQoImZvbGRlZCIsQSk9Cjt2YXIgQz0zRE4uZW50ZXIoKS5hcHBlbmQoInRyIik7bC5mb3JF YWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RDLmFwcGVuZCgidD0KZCIpLnN0eWxlKCJwYWRkaW5n LWxlZnQiLGZ1bmN0aW9uKGUpe3JldHVybih0PzA6ZS5kZXB0aCpmKzEyKyhMKGUpPzA6MTYpKSsi PQpweCJ9LCJpbXBvcnRhbnQiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50eXBlPTNEPTNEIm51bWVy aWMiPyJyaWdodCI6ImxlZnQiKTs9CnQ9M0Q9M0QwJiZuLmFwcGVuZCgiaW1nIikuY2xhc3NlZCgi bnYtdHJlZWljb24iLCEwKS5jbGFzc2VkKCJudi1mb2xkZWQiLEEpLj0KYXR0cigic3JjIixMKS5z dHlsZSgid2lkdGgiLCIxNHB4Iikuc3R5bGUoImhlaWdodCIsIjE0cHgiKS5zdHlsZSgicGFkZGlu ZyIsPQoiMCAxcHgiKS5zdHlsZSgiZGlzcGxheSIsZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSk/Imlu bGluZS1ibG9jayI6Im5vbmUifSkub249CigiY2xpY2siLGspLG4uZWFjaChmdW5jdGlvbihuKXsh dCYmdihuKT9kMy5zZWxlY3QodGhpcykuYXBwZW5kKCJhIikuYXR0cigiaD0KcmVmIix2KS5hdHRy KCJjbGFzcyIsZDMuZnVuY3RvcihlLmNsYXNzZXMpKS5hcHBlbmQoInNwYW4iKTpkMy5zZWxlY3Qo dGhpcykuPQphcHBlbmQoInNwYW4iKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJzcGFuIikuYXR0 cigiY2xhc3MiLGQzLmZ1bmN0b3IoZS5jbGE9CnNzZXMpKS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVy biBlLmZvcm1hdD90W2Uua2V5XT9lLmZvcm1hdCh0W2Uua2V5XSk6Ii0iOnRbZT0KLmtleV18fCIt In0pfSksZS5zaG93Q291bnQmJihuLmFwcGVuZCgic3BhbiIpLmF0dHIoImNsYXNzIiwibnYtY2hp bGRyZW5Db3VuPQp0IiksTi5zZWxlY3RBbGwoInNwYW4ubnYtY2hpbGRyZW5Db3VudCIpLnRleHQo ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzJiY9CmUudmFsdWVzLmxlbmd0aHx8ZS5fdmFsdWVz JiZlLl92YWx1ZXMubGVuZ3RoPyIoIisoZS52YWx1ZXMmJmUudmFsdWVzLmZpbHRlcj0KKGZ1bmN0 aW9uKGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8fGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmZp bHRlcihmdW5jdGlvPQpuKGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8fDApKyIpIjoiIn0p KX0pLE4ub3JkZXIoKS5vbigiY2xpY2siLGZ1bmN0aW89Cm4oZSl7ZC5lbGVtZW50Q2xpY2soe3Jv dzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aT0Kb24o ZSl7ZC5lbGVtZW50RGJsY2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5v bigibW91c2VvdmVyIixmPQp1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3Zlcih7cm93OnRoaXMs ZGF0YTplLHBvczpbZS54LGUueV19KX0pLm9uKCJtb3VzZW89CnV0IixmdW5jdGlvbihlKXtkLmVs ZW1lbnRNb3VzZW91dCh7cm93OnRoaXMsZGF0YTplLHBvczpbZS54LGUueV19KX0pfSksZ312YT0K ciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0z RGUudXRpbHMuZGVmYXVsdENvPQpsb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFl NCksbz0zRCEwLHU9M0QhMSxhPTNEIk5vIERhdGEgQXZhaWxhYmw9CmUuIixmPTNEMjAsbD0zRFt7 a2V5OiJrZXkiLGxhYmVsOiJOYW1lIix0eXBlOiJ0ZXh0In1dLGM9M0RudWxsLGg9M0QiaW1hZ2Vz Lz0KZ3JleS1wbHVzLnBuZyIscD0zRCJpbWFnZXMvZ3JleS1taW51cy5wbmciLGQ9M0RkMy5kaXNw YXRjaCgiZWxlbWVudENsaWNrIiwiPQplbGVtZW50RGJsY2xpY2siLCJlbGVtZW50TW91c2VvdmVy IiwiZWxlbWVudE1vdXNlb3V0Iiksdj0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUudXJsfSxtPTNE MDtyZXR1cm4gZy5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGcpLGcubWFyZ2lu PTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50PQpvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmln aHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPQo9M0R0eXBlb2YgZS5i b3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUu bGVmdCE9Cj0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53aWR0aD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KG49M0RlLGcpOm59LGcuaGVpZ2h0PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGcpPQo6cn0sZy5jb2xv cj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZS51dGlscy5nZXRD b2xvcih0KSw9CnNjYXR0ZXIuY29sb3IoaSksZyk6aX0sZy5pZD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhzPTNEZSxnKT0KOnN9LGcuaGVhZGVyPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLGcpOm99LGcubm9EYXRhPTNEPQpmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsZyk6YX0sZy5maWx0ZXJaZXJvPTNE ZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsZyk6dX0sZy5jb2x1 bW5zPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8obD0zRGUsZyk6bH0s Zy50YWJsZUNsYXNzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQooYz0z RGUsZyk6Y30sZy5pY29uT3Blbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhoPTNEZSxnKTpofSw9CmcuaWNvbkNsb3NlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHA9M0RlLGcpOnB9LGcuZ2V0VXJsPTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odj0zRGUsZyk6dn0sZ30sZS5tb2RlbHMubGVnZW5kPTNEZnVuY3RpPQpv bigpe2Z1bmN0aW9uIGMoaCl7cmV0dXJuIGguZWFjaChmdW5jdGlvbihjKXt2YXIgaD0zRG4tdC5s ZWZ0LXQucmlnaHQscD0zRGQ9CjMuc2VsZWN0KHRoaXMpLGQ9M0RwLnNlbGVjdEFsbCgiZy5udi1s ZWdlbmQiKS5kYXRhKFtjXSksdj0zRGQuZW50ZXIoKS5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNz IiwibnZkMyBudi1sZWdlbmQiKS5hcHBlbmQoImciKSxtPTNEZC5zZWxlY3QoImciKTtkLmF0dHIo PQoidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBnPTNE bS5zZWxlY3RBbGwoIi5udi1zZXI9CmllcyIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx5 PTNEZy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibj0Kdi1zZXJpZXMiKS5vbigi bW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2wubGVnZW5kTW91c2VvdmVyKGUsdCl9KS5vbigibW91 c2VvPQp1dCIsZnVuY3Rpb24oZSx0KXtsLmxlZ2VuZE1vdXNlb3V0KGUsdCl9KS5vbigiY2xpY2si LGZ1bmN0aW9uKGUsdCl7bC5sZWdlbmQ9CkNsaWNrKGUsdCksYSYmKGY/KGMuZm9yRWFjaChmdW5j dGlvbihlKXtlLmRpc2FibGVkPTNEITB9KSxlLmRpc2FibGVkPTNEITEpOj0KKGUuZGlzYWJsZWQ9 M0QhZS5kaXNhYmxlZCxjLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkmJmMu Zm9yRWFjPQpoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMX0pKSxsLnN0YXRlQ2hhbmdlKHtk aXNhYmxlZDpjLm1hcChmdW5jdGlvbihlKXs9CnJldHVybiEhZS5kaXNhYmxlZH0pfSkpfSkub24o ImRibGNsaWNrIixmdW5jdGlvbihlLHQpe2wubGVnZW5kRGJsY2xpY2soZSx0KT0KLGEmJihjLmZv ckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0zRCEwfSksZS5kaXNhYmxlZD0zRCExLGwuc3Rh dGVDaGFuZ2UoPQp7ZGlzYWJsZWQ6Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVk fSl9KSl9KTt5LmFwcGVuZCgiY2lyY2xlIikuc3Q9CnlsZSgic3Ryb2tlLXdpZHRoIiwyKS5hdHRy KCJjbGFzcyIsIm52LWxlZ2VuZC1zeW1ib2wiKS5hdHRyKCJyIiw1KSx5LmFwcGVuZD0KKCJ0ZXh0 IikuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kLXRl eHQiKS5hdHRyKCJkPQp5IiwiLjMyZW0iKS5hdHRyKCJkeCIsIjgiKSxnLmNsYXNzZWQoImRpc2Fi bGVkIixmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmw9CmVkfSksZy5leGl0KCkucmVtb3ZlKCks Zy5zZWxlY3QoImNpcmNsZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybj0KIGUu Y29sb3J8fHMoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29s b3J8fHMoZSx0KX0pLGcuPQpzZWxlY3QoInRleHQiKS50ZXh0KGkpO2lmKG8pe3ZhciBiPTNEW107 Zy5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIHI9M0RkMy5zZWw9CmVjdCh0aGlzKS5zZWxlY3QoInRl eHQiKSxpO3RyeXtpPTNEci5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtpZihpPD0zRDApdGhybz0K dyBFcnJvcigpfWNhdGNoKHMpe2k9M0RlLnV0aWxzLmNhbGNBcHByb3hUZXh0V2lkdGgocil9Yi5w dXNoKGkrMjgpfSk7dmFyIHc9Cj0zRDAsRT0zRDAsUz0zRFtdO3doaWxlKEU8aCYmdzxiLmxlbmd0 aClTW3ddPTNEYlt3XSxFKz0zRGJbdysrXTt3PTNEPTNEPTNEMD0KJiYodz0zRDEpO3doaWxlKEU+ aCYmdz4xKXtTPTNEW10sdy0tO2Zvcih2YXIgeD0zRDA7eDxiLmxlbmd0aDt4KyspYlt4XT4oU1t4 PQold118fDApJiYoU1t4JXddPTNEYlt4XSk7RT0zRFMucmVkdWNlKGZ1bmN0aW9uKGUsdCxuLHIp e3JldHVybiBlK3R9KX12YXIgVD0KPTNEW107Zm9yKHZhciBOPTNEMCxDPTNEMDtOPHc7TisrKVRb Tl09M0RDLEMrPTNEU1tOXTtnLmF0dHIoInRyYW5zZm9ybSIsZnVuPQpjdGlvbihlLHQpe3JldHVy biJ0cmFuc2xhdGUoIitUW3Qld10rIiwiKyg1K01hdGguZmxvb3IodC93KSoyMCkrIikifSksdT9t LmE9CnR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG4tdC5yaWdodC1FKSsiLCIrdC50b3Ar IikiKTptLmF0dHIoInRyYW5zZm9ybT0KIiwidHJhbnNsYXRlKDAsIit0LnRvcCsiKSIpLHI9M0R0 LnRvcCt0LmJvdHRvbStNYXRoLmNlaWwoYi5sZW5ndGgvdykqMjB9ZWxzPQple3ZhciBrPTNENSxM PTNENSxBPTNEMCxPO2cuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHIpe3ZhciBpPTNEZDMu c2VsZWM9CnQodGhpcykuc2VsZWN0KCJ0ZXh0Iikubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0 aCgpKzI4O3JldHVybiBPPTNETCxuPHQubD0KZWZ0K3QucmlnaHQrTytpJiYoTD0zRE89M0Q1LGsr PTNEMjApLEwrPTNEaSxMPkEmJihBPTNETCksInRyYW5zbGF0ZSgiK08rIiwiPQoraysiKSJ9KSxt LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLXQucmlnaHQtQSkrIiwiK3QudG9wKyIp Iikscj0zRHQ9Ci50b3ArdC5ib3R0b20raysxNX19KSxjfXZhciB0PTNEe3RvcDo1LHJpZ2h0OjAs Ym90dG9tOjUsbGVmdDowfSxuPTNENDAwLHI9Cj0zRDIwLGk9M0RmdW5jdGlvbihlKXtyZXR1cm4g ZS5rZXl9LHM9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLG89M0QhMCx1PTNEIT0KMCxhPTNEITAs Zj0zRCExLGw9M0RkMy5kaXNwYXRjaCgibGVnZW5kQ2xpY2siLCJsZWdlbmREYmxjbGljayIsImxl Z2VuZE1vdXNlPQpvdmVyIiwibGVnZW5kTW91c2VvdXQiLCJzdGF0ZUNoYW5nZSIpO3JldHVybiBj LmRpc3BhdGNoPTNEbCxjLm9wdGlvbnM9M0RlLnU9CnRpbHMub3B0aW9uc0Z1bmMuYmluZChjKSxj Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0Lj0KdG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2Yg ZS5yaWdodCE9M0QiPQp1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVv ZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHQ9Cm9tOnQuYm90dG9tLHQubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxjKTp0fSxjLndpZD0KdGg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsYyk6bn0sYy5oZWln aHQ9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxjKTpyfSxj LmtleT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGk9M0RlLGMpOml9 LGMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUudT0K dGlscy5nZXRDb2xvcih0KSxjKTpzfSxjLmFsaWduPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KG89M0RlPQosYyk6b30sYy5yaWdodEFsaWduPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLGMpOnV9LGMudXA9CmRhdGVTdGF0ZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZSxjKTphfSxjLnJhZGlvQnV0dG9u TT0Kb2RlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLGMpOmZ9 LGN9LGUubW9kZWxzLmxpbmU9M0RmPQp1bmN0aW9uKCl7ZnVuY3Rpb24gbShnKXtyZXR1cm4gZy5l YWNoKGZ1bmN0aW9uKG0pe3ZhciBnPTNEci1uLmxlZnQtbi5yaWdodCw9CmI9M0RpLW4udG9wLW4u Ym90dG9tLHc9M0RkMy5zZWxlY3QodGhpcyk7Yz0zRHQueFNjYWxlKCksaD0zRHQueVNjYWxlKCks ZD0zRD0KZHx8Yyx2PTNEdnx8aDt2YXIgRT0zRHcuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGlu ZSIpLmRhdGEoW21dKSxTPTNERS5lbnRlPQpyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dmQzIG52LXdyYXAgbnYtbGluZSIpLFQ9M0RTLmFwcGVuZCgiZGVmcyIpLE49Cj0zRFMuYXBwZW5k KCJnIiksQz0zREUuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdy b3VwcyIpLD0KTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksRS5h dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoPQoiK24ubGVmdCsiLCIrbi50b3ArIikiKSx0Lndp ZHRoKGcpLmhlaWdodChiKTt2YXIgaz0zREUuc2VsZWN0KCIubnYtc2NhdHRlclc9CnJhcCIpO2su Y2FsbCh0KSxULmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK3Qu aWQoKSkuYXBwZT0KbmQoInJlY3QiKSxFLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsi IHJlY3QiKS5hdHRyKCJ3aWR0aCIsZykuYXR0cigiPQpoZWlnaHQiLGI+MD9iOjApLEMuYXR0cigi Y2xpcC1wYXRoIixsPyJ1cmwoI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiKSI6IiIpLGs9Ci5hdHRy KCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlwLSIrdC5pZCgpKyIpIjoiIik7dmFyIEw9 M0RFLnNlbGVjdCgiLj0KbnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1 bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlKXtyPQpldHVybiBlLmtleX0pO0wuZW50ZXIo KS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWw9Cmwt b3BhY2l0eSIsMWUtNiksTC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24o ZSx0KXtyZXR1cm4ibnYtZz0Kcm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1 bmN0aW9uKGUpe3JldHVybiBlLmhvdmVyfSkuc3R5bGUoImZpPQpsbCIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gcyhlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQ9 Cil9KSxMLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjUp O3ZhciBBPTNETC5zZWxlY3RBbD0KbCgicGF0aC5udi1hcmVhIikuZGF0YShmdW5jdGlvbihlKXty ZXR1cm4gZihlKT9bZV06W119KTtBLmVudGVyKCkuYXBwZW5kKCJwPQphdGgiKS5hdHRyKCJjbGFz cyIsIm52LWFyZWEiKS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gZDMuc3ZnLmFyZWEoKS5p bnQ9CmVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxz Lk5hTnRvWmVybyhkKG8odCxuKSkpfT0KKS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxz Lk5hTnRvWmVybyh2KHUodCxuKSkpfSkueTEoZnVuY3Rpb24oZSx0KXtyPQpldHVybiB2KGguZG9t YWluKClbMF08PTNEMD9oLmRvbWFpbigpWzFdPj0zRDA/MDpoLmRvbWFpbigpWzFdOmguZG9tYWlu KClbMF09Cil9KS5hcHBseSh0aGlzLFt0LnZhbHVlc10pfSksTC5leGl0KCkuc2VsZWN0QWxsKCJw YXRoLm52LWFyZWEiKS5yZW1vdmUoKSxBLj0KYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQz LnN2Zy5hcmVhKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0PQppb24odCxuKXty ZXR1cm4gZS51dGlscy5OYU50b1plcm8oYyhvKHQsbikpKX0pLnkwKGZ1bmN0aW9uKHQsbil7cmV0 dXJuIGUudXQ9Cmlscy5OYU50b1plcm8oaCh1KHQsbikpKX0pLnkxKGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIGgoaC5kb21haW4oKVswXTw9M0QwP2guZD0Kb21haW4oKVsxXT49M0QwPzA6aC5kb21haW4o KVsxXTpoLmRvbWFpbigpWzBdKX0pLmFwcGx5KHRoaXMsW3QudmFsdWVzXSl9KTt2PQphciBPPTNE TC5zZWxlY3RBbGwoInBhdGgubnYtbGluZSIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuW2UudmFs dWVzXX0pO08uZW49CnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibnYtbGluZSIp LmF0dHIoImQiLGQzLnN2Zy5saW5lKCkuaW50ZXJwbz0KbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVu Y3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oZChvKHQsbikpKX0pLnkoPQpmdW5j dGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHUodCxuKSkpfSkpLE8uYXR0cigi ZCIsZDMuc3ZnLmxpbmU9CigpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0 LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhjKG8odD0KLG4pKSl9KS55KGZ1bmN0aW9uKHQs bil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGgodSh0LG4pKSl9KSksZD0zRGMuY29weSgpPQos dj0zRGguY29weSgpfSksbX12YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKSxuPTNEe3RvcDowLHJp Z2h0OjAsYm90dG9tOjAsbGU9CmZ0OjB9LHI9M0Q5NjAsaT0zRDUwMCxzPTNEZS51dGlscy5kZWZh dWx0Q29sb3IoKSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueD0KfSx1PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUueX0sYT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWlzTmFOKHUoZSx0KSkmJnUoZSx0 PQopIT0zRD0zRG51bGx9LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmVhfSxsPTNEITEsYyxo LHA9M0QibGluZWFyIjt0LnNpemU9CigxNikuc2l6ZURvbWFpbihbMTYsMjU2XSk7dmFyIGQsdjty ZXR1cm4gbS5kaXNwYXRjaD0zRHQuZGlzcGF0Y2gsbS5zY2F0dGVyPQo9M0R0LGQzLnJlYmluZCht LHQsImlkIiwiaW50ZXJhY3RpdmUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwi eEQ9Cm9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJmb3Jj ZVgiLCJmb3JjZVkiLCJmb3JjZVNpej0KZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImNs aXBSYWRpdXMiLCJwYWREYXRhIiwiaGlnaGxpZ2h0UG9pbnQiLCJjbGVhPQpySGlnaGxpZ2h0cyIp LG0ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm1hcmdpbj0zRGZ1bmN0 aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPTNEdHlwZW9mIGUudG9wIT0z RCJ1bmRlZmluZWQiP2UudG9wOm4udG9wLD0Kbi5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1 bmRlZmluZWQiP2UucmlnaHQ6bi5yaWdodCxuLmJvdHRvbT0zRHR5cGVvZiBlPQouYm90dG9tIT0z RCJ1bmRlZmluZWQiP2UuYm90dG9tOm4uYm90dG9tLG4ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNE InVuZGVmaW49CmVkIj9lLmxlZnQ6bi5sZWZ0LG0pOm59LG0ud2lkdGg9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRD0KZSxtKTpyfSxtLmhlaWdodD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLng9M0RmPQp1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx0LngoZSksbSk6b30sbS55PTNEZnVu Y3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsdC55KGUpLG0pOnV9LG0u Y2xpcEVkZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxt KTpsfSxtLmNvbG9yPTNEZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoocz0z RGUudXRpbHMuZ2V0Q29sb3IobiksdC5jb2xvcihzKSxtKTpzfSxtLmludGVycG9sYXRlPTNEZnVu Y3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5kZWZpbmVk PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8oYT0zRGUsbSk6YX0sbS5p c0FyZWE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGQzLmZ1PQpu Y3RvcihlKSxtKTpmfSxtfSxlLm1vZGVscy5saW5lQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9u IE4obSl7cmV0dXJuIG0uZWE9CmNoKGZ1bmN0aW9uKG0pe3ZhciB4PTNEZDMuc2VsZWN0KHRoaXMp LEM9M0R0aGlzLGs9M0QoYXx8cGFyc2VJbnQoeC5zdHlsZSgidz0KaWR0aCIpKXx8OTYwKS1vLmxl ZnQtby5yaWdodCxMPTNEKGZ8fHBhcnNlSW50KHguc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRv PQpwLW8uYm90dG9tO04udXBkYXRlPTNEZnVuY3Rpb24oKXt4LmNhbGwoTil9LE4uY29udGFpbmVy PTNEdGhpcyxiLmRpc2FibGVkPQo9M0RtLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJs ZWR9KTtpZighdyl7dmFyIEE7dz0zRHt9O2ZvcihBIGluIGIpYls9CkFdaW5zdGFuY2VvZiBBcnJh eT93W0FdPTNEYltBXS5zbGljZSgwKTp3W0FdPTNEYltBXX1pZighbXx8IW0ubGVuZ3RofHwhbS5m aT0KbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIg Tz0zRHguc2VsZWN0QWxsKCIubnYtPQpub0RhdGEiKS5kYXRhKFtFXSk7cmV0dXJuIE8uZW50ZXIo KS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm89CkRhdGEiKS5hdHRyKCJk eSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTy5hdHRyKCJ4IixvLmxl ZnQraz0KLzIpLmF0dHIoInkiLG8udG9wK0wvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0p LE59eC5zZWxlY3RBbGwoIi5udi1ub0RhPQp0YSIpLnJlbW92ZSgpLGc9M0R0LnhTY2FsZSgpLHk9 M0R0LnlTY2FsZSgpO3ZhciBNPTNEeC5zZWxlY3RBbGwoImcubnYtd3JhcC49Cm52LWxpbmVDaGFy dCIpLmRhdGEoW21dKSxfPTNETS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZk MyBudi13cj0KYXAgbnYtbGluZUNoYXJ0IikuYXBwZW5kKCJnIiksRD0zRE0uc2VsZWN0KCJnIik7 Xy5hcHBlbmQoInJlY3QiKS5zdHlsZSgib3BhPQpjaXR5IiwwKSxfLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYteCBudi1heGlzIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGE9CnNzIiwibnYt eSBudi1heGlzIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLF8u YXBwZW5kKCJnIj0KKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxfLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmUiPQopLEQuc2VsZWN0KCJyZWN0IikuYXR0cigi d2lkdGgiLGspLmF0dHIoImhlaWdodCIsTD4wP0w6MCksbCYmKGkud2lkdGgoayksRC49CnNlbGVj dCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShtKS5jYWxsKGkpLG8udG9wIT0zRGkuaGVpZ2h0KCkm JihvLnRvcD0zRGkuaD0KZWlnaHQoKSxMPTNEKGZ8fHBhcnNlSW50KHguc3R5bGUoImhlaWdodCIp KXx8NDAwKS1vLnRvcC1vLmJvdHRvbSksTS5zZWxlY3QoPQoiLm52LWxlZ2VuZFdyYXAiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtby50b3ArIikiKSksTS5hdHRyKCJ0cmE9Cm5z Zm9ybSIsInRyYW5zbGF0ZSgiK28ubGVmdCsiLCIrby50b3ArIikiKSxwJiZELnNlbGVjdCgiLm52 LXkubnYtYXhpcyIpLmF0dD0KcigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraysiLDApIiksZCYm KHMud2lkdGgoaykuaGVpZ2h0KEwpLm1hcmdpbih7bGVmdDpvPQoubGVmdCx0b3A6by50b3B9KS5z dmdDb250YWluZXIoeCkueFNjYWxlKGcpLE0uc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWw9 CmwocykpLHQud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKG0ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0 dXJuIGUuY29sb3J8fHUoZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIW1bdF0u ZGlzYWJsZWR9KSk7dmFyIFA9M0RELnNlbGVjdCgiLm52LWxpbmVzPQpXcmFwIikuZGF0dW0obS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7UC5jYWxsKHQpLGMmJihuLnNj YWw9CmUoZykudGlja3Moay8xMDApLnRpY2tTaXplKC1MLDApLEQuc2VsZWN0KCIubnYteC5udi1h eGlzIikuYXR0cigidHJhbnNmb3JtIj0KLCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIp LEQuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKSksaCYmKHIuPQpzY2FsZSh5KS50aWNr cyhMLzM2KS50aWNrU2l6ZSgtaywwKSxELnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikp LGkuZGk9CnNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2I9M0RlLFMuc3RhdGVD aGFuZ2UoYiksTi51cGRhdGUoKX0pLHMuZD0KaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIs ZnVuY3Rpb24oaSl7dC5jbGVhckhpZ2hsaWdodHMoKTt2YXIgYSxmLGwsYz0KPTNEW107bS5maWx0 ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0zRHQsIWUuZGlzYWJsZWR9KS5m b3JFYWNoPQooZnVuY3Rpb24obixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxp LnBvaW50WFZhbHVlLE4ueCgpKSx0LmhpZ2g9CmxpZ2h0UG9pbnQocixmLCEwKTt2YXIgcz0zRG4u dmFsdWVzW2ZdO2lmKHR5cGVvZiBzPTNEPTNEInVuZGVmaW5lZCIpcmV0dXJuOz0KdHlwZW9mIGE9 M0Q9M0QidW5kZWZpbmVkIiYmKGE9M0RzKSx0eXBlb2YgbD0zRD0zRCJ1bmRlZmluZWQiJiYobD0z RE4ueFNjYWxlPQooKShOLngoKShzLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6Ti55KCko cyxmKSxjb2xvcjp1KG4sbi5zZXJpZXNJbmRleCk9Cn0pfSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9 M0ROLnlTY2FsZSgpLmludmVydChpLm1vdXNlWSkscD0zRE1hdGguYWJzKE4ueVNjYT0KbGUoKS5k b21haW4oKVswXS1OLnlTY2FsZSgpLmRvbWFpbigpWzFdKSxkPTNELjAzKnAsZz0zRGUubmVhcmVz dFZhbHVlSW5kZXgoPQpjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLGgsZCk7ZyE9 M0Q9M0RudWxsJiYoY1tnXS5oaWdobGlnaHQ9M0QhMCk9Cn12YXIgeT0zRG4udGlja0Zvcm1hdCgp KE4ueCgpKGEsZikpO3MudG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK28ubGVmdCx0b3A6aT0KLm1v dXNlWStvLnRvcH0pLmNoYXJ0Q29udGFpbmVyKEMucGFyZW50Tm9kZSkuZW5hYmxlZCh2KS52YWx1 ZUZvcm1hdHRlcihmdW5jPQp0aW9uKGUsdCl7cmV0dXJuIHIudGlja0Zvcm1hdCgpKGUpfSkuZGF0 YSh7dmFsdWU6eSxzZXJpZXM6Y30pKCkscy5yZW5kZXJHdWk9CmRlTGluZShsKX0pLHMuZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZSgpLHQuYz0K bGVhckhpZ2hsaWdodHMoKX0pLFMub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXt2JiZUKGUs Qy5wYXJlbnROb2RlKX0pLFMuPQpvbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKGUpe3R5cGVvZiBl LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiZtLmxlbmd0aD0zRD0KPTNEPTNEZS5kaXNhYmxlZC5s ZW5ndGgmJihtLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtu PQpdfSksYi5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpLE4udXBkYXRlKCl9KX0pLE59dmFyIHQ9M0Rl Lm1vZGVscy5saW5lKCksbj0zRGU9Ci5tb2RlbHMuYXhpcygpLHI9M0RlLm1vZGVscy5heGlzKCks aT0zRGUubW9kZWxzLmxlZ2VuZCgpLHM9M0RlLmludGVyYWN0aXZlRz0KdWlkZWxpbmUoKSxvPTNE e3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo2MH0sdT0zRGUudXRpbHMuZGVmYXVsdENv bG9yPQooKSxhPTNEbnVsbCxmPTNEbnVsbCxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPTNEITEsZD0z RCExLHY9M0QhMCxtPTNEZnVuY3Rpb249CihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gz PiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LGcseSxiPTNEe30sdz0zRD0KbnVsbCxFPTNEIk5v IERhdGEgQXZhaWxhYmxlLiIsUz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBI aWRlIiwiPQpzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIikseD0zRDA7bi5vcmllbnQoImJvdHRv bSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW49CnQocD8icmlnaHQiOiJsZWZ0Iik7dmFyIFQ9M0Rm dW5jdGlvbihpLHMpe3ZhciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MD0KKSx1PTNEaS5w b3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxp LnBvaW50SW5kPQpleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJ bmRleCkpLGw9M0RtKGkuc2VyaWVzLmtleSxhLGY9CixpLE4pO2UudG9vbHRpcC5zaG93KFtvLHVd LGwsbnVsbCxudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdT0Kc2VvdmVy LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStv LnRvcF0sUy50b29sPQp0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0 LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEg9CmlkZShlKX0pLFMub24oInRvb2x0aXBI aWRlIixmdW5jdGlvbigpe3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxOLmRpc3BhdGNoPQo9M0RT LE4ubGluZXM9M0R0LE4ubGVnZW5kPTNEaSxOLnhBeGlzPTNEbixOLnlBeGlzPTNEcixOLmludGVy YWN0aXZlTGF5ZXI9M0Q9CnMsZDMucmViaW5kKE4sdCwiZGVmaW5lZCIsImlzQXJlYSIsIngiLCJ5 Iiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInhEb21haT0KbiIsInlEb21haW4iLCJ4UmFuZ2Ui LCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiPQpj bGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiksTi5vcHRpb25zPTNE ZS51dGlscy5vcHRpb25zRnU9Cm5jLmJpbmQoTiksTi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oby50b3A9M0R0eXBlb2YgZT0KLnRvcCE9M0QidW5kZWZpbmVk Ij9lLnRvcDpvLnRvcCxvLnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5y PQppZ2h0Om8ucmlnaHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ ZS5ib3R0b206by5ib3R0b20sby49CmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQi P2UubGVmdDpvLmxlZnQsTik6b30sTi53aWR0aD0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGE9M0RlLE4pOmF9LE4uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtPQplbnRzLmxlbmd0aD8oZj0zRGUsTik6Zn0sTi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh1PQo9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IodSks Tik6dX0sTi5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxlbmd0 aD8obD0zRGUsTik6bH0sTi5zaG93WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbj0KZ3RoPyhjPTNEZSxOKTpjfSxOLnNob3dZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhoPTNEZSxOPQopOmh9LE4ucmlnaHRBbGlnbllBeGlzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHIub3JpZW49CnQoZT8icmlnaHQi OiJsZWZ0IiksTik6cH0sTi51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLGU9M0Q9M0Q9M0QhMCYmKE4uaW50ZXJhY3Rp dmUoITEpLE4udXNlVm9yb25vaSghMSkpLE4pPQo6ZH0sTi50b29sdGlwcz0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxOKTp2fSxOLnRvb2x0aXA9CkNvbnRlbnQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsTik6bX0sTi5zdGF0 ZT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLE4pOmJ9LE4u ZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0z RGUsTik6d30sTi5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3Ro PyhFPTNEZSxOKTpFfSxOLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZz0KdGg/KHg9M0RlLE4pOnh9LE59LGUubW9kZWxzLmxpbmVQbHVzQmFyQ2hh cnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIFQoZSl7cmV0PQp1cm4gZS5lYWNoKGZ1bmN0aW9uKGUp e3ZhciBsPTNEZDMuc2VsZWN0KHRoaXMpLGM9M0R0aGlzLHY9M0QoYXx8cGFyc2VJbnQobC49CnN0 eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdodCxOPTNEKGZ8fHBhcnNlSW50KGwuc3R5 bGUoImhlaWdodCIpKXx8ND0KMDApLXUudG9wLXUuYm90dG9tO1QudXBkYXRlPTNEZnVuY3Rpb24o KXtsLmNhbGwoVCl9LGIuZGlzYWJsZWQ9M0RlLm1hcChmdW5jPQp0aW9uKGUpe3JldHVybiEhZS5k aXNhYmxlZH0pO2lmKCF3KXt2YXIgQzt3PTNEe307Zm9yKEMgaW4gYiliW0NdaW5zdGFuY2VvZiA9 CkFycmF5P3dbQ109M0RiW0NdLnNsaWNlKDApOndbQ109M0RiW0NdfWlmKCFlfHwhZS5sZW5ndGh8 fCFlLmZpbHRlcihmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgp e3ZhciBrPTNEbC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhPQooW0VdKTtyZXR1cm4gay5l bnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRy KCI9CmR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxrLmF0dHIoIngi LHUubGVmdCt2LzIpLmF0dHIoInkiLD0KdS50b3ArTi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVy biBlfSksVH1sLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpPQo7dmFyIEw9M0RlLmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS5iYXJ9KSxBPTNEZS5maWx0ZXIo ZnVuY3Q9CmlvbihlKXtyZXR1cm4hZS5iYXJ9KTttPTNEQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIWUuZGlzYWJsZWR9KS5sZW5ndGgmJj0KQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUu ZGlzYWJsZWR9KVswXS52YWx1ZXMubGVuZ3RoP3QueFNjYWxlKCk6bi54U2NhPQpsZSgpLGc9M0Ru LnlTY2FsZSgpLHk9M0R0LnlTY2FsZSgpO3ZhciBPPTNEZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFs bCgiZy5udi09CndyYXAubnYtbGluZVBsdXNCYXIiKS5kYXRhKFtlXSksTT0zRE8uZW50ZXIoKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZD0KMyBudi13cmFwIG52LWxpbmVQbHVzQmFyIiku YXBwZW5kKCJnIiksXz0zRE8uc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyPQooImNsYXNz IiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4 aXMiKSxNLmFwcGU9Cm5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1heGlzIiksTS5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcj0KYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtbGluZXNXcmFwIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsPQoibnYt bGVnZW5kV3JhcCIpLHAmJihvLndpZHRoKHYvMiksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIiku ZGF0dW0oZS5tYXAoZnU9Cm5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2lu YWxLZXk9M0Q9M0Q9M0R1bmRlZmluZWQ/ZS5rZXk6ZS5vcj0KaWdpbmFsS2V5LGUua2V5PTNEZS5v cmlnaW5hbEtleSsoZS5iYXI/IiAobGVmdCBheGlzKSI6IiAocmlnaHQgYXhpcykiKSxlfSkpPQou Y2FsbChvKSx1LnRvcCE9M0RvLmhlaWdodCgpJiYodS50b3A9M0RvLmhlaWdodCgpLE49M0QoZnx8 cGFyc2VJbnQobC5zdHlsZSg9CiJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLF8uc2Vs ZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybT0KIiwidHJhbnNsYXRlKCIrdi8y KyIsIisgLXUudG9wKyIpIikpLE8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5sZWZ0 PQorIiwiK3UudG9wKyIpIiksdC53aWR0aCh2KS5oZWlnaHQoTikuY29sb3IoZS5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm4gZS5jb2w9Cm9yfHxoKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXty ZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpLG4ud2lkdD0KaCh2KS5oZWlnaHQoTiku Y29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aChlLHQpfSkuZmlsdGVy KGZ1PQpuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSk7dmFyIEQ9 M0RfLnNlbGVjdCgiLm52LWJhcnNXcmE9CnAiKS5kYXR1bShMLmxlbmd0aD9MOlt7dmFsdWVzOltd fV0pLFA9M0RfLnNlbGVjdCgiLm52LWxpbmVzV3JhcCIpLmRhdHVtKEFbMD0KXSYmIUFbMF0uZGlz YWJsZWQ/QTpbe3ZhbHVlczpbXX1dKTtkMy50cmFuc2l0aW9uKEQpLmNhbGwobiksZDMudHJhbnNp dGlvbihQPQopLmNhbGwodCksci5zY2FsZShtKS50aWNrcyh2LzEwMCkudGlja1NpemUoLU4sMCks Xy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgw LCIrZy5yYW5nZSgpWzBdKyIpIiksZDMudHJhbnNpdGlvbihfLnNlbGVjdCgiLj0KbnYteC5udi1h eGlzIikpLmNhbGwociksaS5zY2FsZShnKS50aWNrcyhOLzM2KS50aWNrU2l6ZSgtdiwwKSxkMy50 cmFuc2l0aW9uPQooXy5zZWxlY3QoIi5udi15MS5udi1heGlzIikpLnN0eWxlKCJvcGFjaXR5IixM Lmxlbmd0aD8xOjApLmNhbGwoaSkscy5zY2FsZSg9CnkpLnRpY2tzKE4vMzYpLnRpY2tTaXplKEwu bGVuZ3RoPzA6LXYsMCksXy5zZWxlY3QoIi5udi15Mi5udi1heGlzIikuc3R5bGUoIj0Kb3BhY2l0 eSIsQS5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsMCkiKSxk My50cmFuc2l0aW9uPQooXy5zZWxlY3QoIi5udi15Mi5udi1heGlzIikpLmNhbGwocyksby5kaXNw YXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGU9Cil7Yj0zRGUsUy5zdGF0ZUNoYW5nZShi KSxULnVwZGF0ZSgpfSksUy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2QmJngoZT0KLGMu cGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlz YWJsZWQhPTNEInVuZGVmPQppbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJs ZWQ9M0R0LmRpc2FibGVkW25dfSksYi5kaXNhYmxlZD0zRHQ9Ci5kaXNhYmxlZCksVC51cGRhdGUo KX0pfSksVH12YXIgdD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMuaGlzdG9yaWNhbD0K QmFyKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMuYXhpcygpLHM9M0RlLm1vZGVs cy5heGlzKCksbz0zRGUubW9kPQplbHMubGVnZW5kKCksdT0zRHt0b3A6MzAscmlnaHQ6NjAsYm90 dG9tOjUwLGxlZnQ6NjB9LGE9M0RudWxsLGY9M0RudWxsLGw9M0Q9CmZ1bmN0aW9uKGUpe3JldHVy biBlLnh9LGM9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxoPTNEZS51dGlscy5kZWZhdWx0Q29s bz0KcigpLHA9M0QhMCxkPTNEITAsdj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4i K2UrIjwvaDM+IisiPHA+IituKyIgPQphdCAiK3QrIjwvcD4ifSxtLGcseSxiPTNEe30sdz0zRG51 bGwsRT0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLFM9M0RkMy5kaXNwYXQ9CmNoKCJ0b29sdGlwU2hv dyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpO24ucGFkRGF0YSgh MCksdD0KLmNsaXBFZGdlKCExKS5wYWREYXRhKCEwKSxyLm9yaWVudCgiYm90dG9tIikudGlja1Bh ZGRpbmcoNykuaGlnaGxpZ2h0WmVybyghPQoxKSxpLm9yaWVudCgibGVmdCIpLHMub3JpZW50KCJy aWdodCIpO3ZhciB4PTNEZnVuY3Rpb24obixvKXt2YXIgdT0zRG4ucG9zWzA9Cl0rKG8ub2Zmc2V0 TGVmdHx8MCksYT0zRG4ucG9zWzFdKyhvLm9mZnNldFRvcHx8MCksZj0zRHIudGlja0Zvcm1hdCgp KHQueCgpKD0Kbi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPTNEKG4uc2VyaWVzLmJhcj9pOnMpLnRp Y2tGb3JtYXQoKSh0LnkoKShuLnBvaW50LG4uPQpwb2ludEluZGV4KSksYz0zRHYobi5zZXJpZXMu a2V5LGYsbCxuLFQpO2UudG9vbHRpcC5zaG93KFt1LGFdLGMsbi52YWx1ZTwwPyI9Cm4iOiJzIixu dWxsLG8pfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixm dW5jdGlvbihlKT0Ke2UucG9zPTNEW2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50 b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oPQoiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAi LGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUoZSl9KSxuLmRpc3BhdGNoLm9uKCJlbGU9Cm1lbnRN b3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGUu cG9zWzFdK3UudG9wXT0KLFMudG9vbHRpcFNob3coZSl9KSxuLmRpc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7Uy50PQpvb2x0aXBIaWRlKGUpfSksUy5vbigi dG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7ZCYmZS50b29sdGlwLmNsZWFudXAoKX0pLFQuZGk9CnNw YXRjaD0zRFMsVC5sZWdlbmQ9M0RvLFQubGluZXM9M0R0LFQuYmFycz0zRG4sVC54QXhpcz0zRHIs VC55MUF4aXM9M0RpLFQueT0KMkF4aXM9M0RzLGQzLnJlYmluZChULHQsImRlZmluZWQiLCJzaXpl IiwiY2xpcFZvcm9ub2kiLCJpbnRlcnBvbGF0ZSIpLFQub3B0PQppb25zPTNEZS51dGlscy5vcHRp b25zRnVuYy5iaW5kKFQpLFQueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9 Cmg/KGw9M0RlLHQueChlKSxuLngoZSksVCk6bH0sVC55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGM9Cj0zRGUsdC55KGUpLG4ueShlKSxUKTpjfSxULm1hcmdpbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1Lj0KdG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wOnUudG9wLHUucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0Qi PQp1bmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9 M0QidW5kZWZpbmVkIj9lLmJvdHQ9Cm9tOnUuYm90dG9tLHUubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnUubGVmdCxUKTp1fSxULndpZD0KdGg9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsVCk6YX0sVC5oZWlnaHQ9M0RmdW5jdGlv bihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxUKTpmfSxULmNvbG9yPTNEZnVu Y3Rpb24odCl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0aD8oaD0zRGUudXRpbHMuZ2V0Q29sb3Io dCksby5jb2xvcihoKSxUKTpofSxULnNob3dMZWdlbmQ9M0RmdW5jdGlvbj0KKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhwPTNEZSxUKTpwfSxULnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oZD0zRGUsVCk6ZH0sVC50b29sdGlwQ29udGVudD0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KHY9M0RlLFQpOnZ9LFQuc3RhdGU9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsVD0KKTpifSxULmRl ZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxU KTp3fSxULm5vPQpEYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9 M0RlLFQpOkV9LFR9LGUubW9kZWxzLmxpbmVXaXQ9CmhGb2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtm dW5jdGlvbiBrKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gUj0KKGUpe3Zh ciB0PTNEKyhlPTNEPTNEImUiKSxuPTNEdD8xOi0xLHI9M0RPLzM7cmV0dXJuIk0iKy41Km4rIiwi K3IrIkE2LDYgMCAwPQogIit0KyIgIis2LjUqbisiLCIrKHIrNikrIlYiKygyKnItNikrIkE2LDYg MCAwICIrdCsiICIrLjUqbisiLCIrMipyKyJaIisiTSI9CisyLjUqbisiLCIrKHIrOCkrIlYiKygy KnItOCkrIk0iKzQuNSpuKyIsIisocis4KSsiViIrKDIqci04KX1mdW5jdGlvbiBVKCl7YT0KLmVt cHR5KCl8fGEuZXh0ZW50KHcpLEYuZGF0YShbYS5lbXB0eSgpP2cuZG9tYWluKCk6d10pLmVhY2go ZnVuY3Rpb24oZSx0KXt2PQphciBuPTNEZyhlWzBdKS12LnJhbmdlKClbMF0scj0zRHYucmFuZ2Uo KVsxXS1nKGVbMV0pO2QzLnNlbGVjdCh0aGlzKS5zZWxlY3Q9CigiLmxlZnQiKS5hdHRyKCJ3aWR0 aCIsbjwwPzA6biksZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnJpZ2h0IikuYXR0cigieCIsZz0K KGVbMV0pKS5hdHRyKCJ3aWR0aCIscjwwPzA6cil9KX1mdW5jdGlvbiB6KCl7dz0zRGEuZW1wdHko KT9udWxsOmEuZXh0ZW50KCk7PQp2YXIgbj0zRGEuZW1wdHkoKT9nLmRvbWFpbigpOmEuZXh0ZW50 KCk7aWYoTWF0aC5hYnMoblswXS1uWzFdKTw9M0QxKXJldHVybjs9ClQuYnJ1c2goe2V4dGVudDpu LGJydXNoOmF9KSxVKCk7dmFyIHM9M0RQLnNlbGVjdCgiLm52LWZvY3VzIC5udi1saW5lc1dyYXAi KT0KLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubWFwKGZ1 bmN0aW9uKGUscil7cmV0dXJue2tlPQp5OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVu Y3Rpb24oZSxyKXtyZXR1cm4gdC54KCkoZSxyKT49M0RuWzBdJiZ0Lng9CigpKGUscik8PTNEblsx XX0pfX0pKTtzLmNhbGwodCksUC5zZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heGlzIikuY2Fs bChyKT0KLFAuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkubnYtYXhpcyIpLmNhbGwoaSl9dmFyIFM9 M0RkMy5zZWxlY3QodGhpcyksTj0zRHRoPQppcyxMPTNEKGh8fHBhcnNlSW50KFMuc3R5bGUoIndp ZHRoIikpfHw5NjApLWYubGVmdC1mLnJpZ2h0LEE9M0QocHx8cGFyc2VJbnQ9CihTLnN0eWxlKCJo ZWlnaHQiKSl8fDQwMCktZi50b3AtZi5ib3R0b20tZCxPPTNEZC1sLnRvcC1sLmJvdHRvbTtrLnVw ZGF0ZT0zRD0KZnVuY3Rpb24oKXtTLmNhbGwoayl9LGsuY29udGFpbmVyPTNEdGhpcztpZighZXx8 IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3RpPQpvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3Ro fSkubGVuZ3RoKXt2YXIgTT0zRFMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGE9CnRhKFt4XSk7 cmV0dXJuIE0uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9E YXRhIikuYXR0cj0KKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiks TS5hdHRyKCJ4IixmLmxlZnQrTC8yKS5hdHRyKCJ5PQoiLGYudG9wK0EvMikudGV4dChmdW5jdGlv bihlKXtyZXR1cm4gZX0pLGt9Uy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmU9CigpLHY9 M0R0LnhTY2FsZSgpLG09M0R0LnlTY2FsZSgpLGc9M0RuLnhTY2FsZSgpLHk9M0RuLnlTY2FsZSgp O3ZhciBfPTNEUy5zZT0KbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVXaXRoRm9jdXNDaGFydCIp LmRhdGEoW2VdKSxEPTNEXy5lbnRlcigpLmFwcGVuZCgiPQpnIikuYXR0cigiY2xhc3MiLCJudmQz IG52LXdyYXAgbnYtbGluZVdpdGhGb2N1c0NoYXJ0IikuYXBwZW5kKCJnIiksUD0zRF8uc2U9Cmxl Y3QoImciKTtELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpO3ZhciBI PTNERC5hcHBlbmQoImciKT0KLmF0dHIoImNsYXNzIiwibnYtZm9jdXMiKTtILmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksSC5hcHBlPQpuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYteSBudi1heGlzIiksSC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3I9 CmFwIik7dmFyIEI9M0RELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udGV4dCIpO0Iu YXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52LXggbnYtYXhpcyIpLEIuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxCLmFwcGVuZCgiPQpnIikuYXR0cigiY2xhc3Mi LCJudi1saW5lc1dyYXAiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnJ1c2hCYWNr Z3I9Cm91bmQiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1icnVzaCIpLGIm Jih1LndpZHRoKEwpLFAuc2VsZWN0KD0KIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbCh1 KSxmLnRvcCE9M0R1LmhlaWdodCgpJiYoZi50b3A9M0R1LmhlaWdodCgpPQosQT0zRChwfHxwYXJz ZUludChTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktZi50b3AtZi5ib3R0b20tZCksUC5zZWxlY3Qo Ii5udi09CmxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtZi50 b3ArIikiKSksXy5hdHRyKCJ0cmFuc2Zvcj0KbSIsInRyYW5zbGF0ZSgiK2YubGVmdCsiLCIrZi50 b3ArIikiKSx0LndpZHRoKEwpLmhlaWdodChBKS5jb2xvcihlLm1hcChmdW5jPQp0aW9uKGUsdCl7 cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25d LmRpc2FibGU9CmR9KSksbi5kZWZpbmVkKHQuZGVmaW5lZCgpKS53aWR0aChMKS5oZWlnaHQoTyku Y29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZT0KdHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0 ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxQLnNlbGVjPQp0KCIubnYt Y29udGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKEErZi5ib3R0b20rbC50 b3ApKyIpIik7dmE9CnIgaj0zRFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIiku ZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dT0Kcm4hZS5kaXNhYmxlZH0pKTtkMy50cmFu c2l0aW9uKGopLmNhbGwobiksci5zY2FsZSh2KS50aWNrcyhMLzEwMCkudGlja1NpemUoPQotQSww KSxpLnNjYWxlKG0pLnRpY2tzKEEvMzYpLnRpY2tTaXplKC1MLDApLFAuc2VsZWN0KCIubnYtZm9j dXMgLm52LXgubnYtYXg9CmlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitBKyIp IiksYS54KGcpLm9uKCJicnVzaCIsZnVuY3Rpb24oKXt2YT0KciBlPTNEay50cmFuc2l0aW9uRHVy YXRpb24oKTtrLnRyYW5zaXRpb25EdXJhdGlvbigwKSx6KCksay50cmFuc2l0aW9uRHVyYXRpPQpv bihlKX0pLHcmJmEuZXh0ZW50KHcpO3ZhciBGPTNEUC5zZWxlY3QoIi5udi1icnVzaEJhY2tncm91 bmQiKS5zZWxlY3RBbGwoImc9CiIpLmRhdGEoW3d8fGEuZXh0ZW50KCldKSxJPTNERi5lbnRlcigp LmFwcGVuZCgiZyIpO0kuYXBwZW5kKCJyZWN0IikuYXR0cigiYz0KbGFzcyIsImxlZnQiKS5hdHRy KCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJoZWlnaHQiLE8pLEkuYXBwZW5kKCJyZWN0IikuYXR0 PQpyKCJjbGFzcyIsInJpZ2h0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0 IixPKTt2YXIgcT0zRFAuc2VsZWM9CnQoIi5udi14Lm52LWJydXNoIikuY2FsbChhKTtxLnNlbGVj dEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsTykscS5zZWxlY3RBbD0KbCgiLnJlc2l6ZSIpLmFw cGVuZCgicGF0aCIpLmF0dHIoImQiLFIpLHooKSxzLnNjYWxlKGcpLnRpY2tzKEwvMTAwKS50aWNr U2l6PQplKC1PLDApLFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1heGlzIikuYXR0cigi dHJhbnNmb3JtIiwidHJhbnNsYXRlKDA9CiwiK3kucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRp b24oUC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4aXMiKSkuYz0KYWxsKHMpLG8uc2Nh bGUoeSkudGlja3MoTy8zNikudGlja1NpemUoLUwsMCksZDMudHJhbnNpdGlvbihQLnNlbGVjdCgi Lm52LWNvPQpudGV4dCAubnYteS5udi1heGlzIikpLmNhbGwobyksUC5zZWxlY3QoIi5udi1jb250 ZXh0IC5udi14Lm52LWF4aXMiKS5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5y YW5nZSgpWzBdKyIpIiksdS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bj0KY3Rpb24oZSl7 ay51cGRhdGUoKX0pLFQub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtFJiZDKGUsTi5wYXJl bnROb2RlKX0pPQp9KSxrfXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5saW5l KCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS49Cm1vZGVscy5heGlzKCkscz0zRGUubW9kZWxz LmF4aXMoKSxvPTNEZS5tb2RlbHMuYXhpcygpLHU9M0RlLm1vZGVscy5sZWdlbmQoKT0KLGE9M0Rk My5zdmcuYnJ1c2goKSxmPTNEe3RvcDozMCxyaWdodDozMCxib3R0b206MzAsbGVmdDo2MH0sbD0z RHt0b3A6MCxyaWdoPQp0OjMwLGJvdHRvbToyMCxsZWZ0OjYwfSxjPTNEZS51dGlscy5kZWZhdWx0 Q29sb3IoKSxoPTNEbnVsbCxwPTNEbnVsbCxkPTNEMTA9CjAsdixtLGcseSxiPTNEITAsdz0zRG51 bGwsRT0zRCEwLFM9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8Lz0KaDM+ IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0seD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLFQ9M0Rk My5kaXNwYXRjaCgidG9vPQpsdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYnJ1c2giKSxOPTNEMDt0 LmNsaXBFZGdlKCEwKSxuLmludGVyYWN0aXZlKCExKSxyLm89CnJpZW50KCJib3R0b20iKS50aWNr UGFkZGluZyg1KSxpLm9yaWVudCgibGVmdCIpLHMub3JpZW50KCJib3R0b20iKS50aWNrUGFkZD0K aW5nKDUpLG8ub3JpZW50KCJsZWZ0Iik7dmFyIEM9M0RmdW5jdGlvbihuLHMpe3ZhciBvPTNEbi5w b3NbMF0rKHMub2Zmc2V0TGVmPQp0fHwwKSx1PTNEbi5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxh PTNEci50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW49CnRJbmRleCkpLGY9M0RpLnRp Y2tGb3JtYXQoKSh0LnkoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9M0RTKG4uc2VyaWVzLmtl eT0KLGEsZixuLGspO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1cm4g dC5kaXNwYXRjaC5vbigiZWxlbWVuPQp0TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2Uu cG9zPTNEW2UucG9zWzBdK2YubGVmdCxlLnBvc1sxXStmLnRvcF0sVC49CnRvb2x0aXBTaG93KGUp fSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1Qu dG9vbD0KdGlwSGlkZShlKX0pLFQub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe0UmJmUudG9v bHRpcC5jbGVhbnVwKCl9KSxrLmRpc3BhPQp0Y2g9M0RULGsubGVnZW5kPTNEdSxrLmxpbmVzPTNE dCxrLmxpbmVzMj0zRG4say54QXhpcz0zRHIsay55QXhpcz0zRGksay54MkE9Cnhpcz0zRHMsay55 MkF4aXM9M0RvLGQzLnJlYmluZChrLHQsImRlZmluZWQiLCJpc0FyZWEiLCJzaXplIiwieERvbWFp biIsInlEbz0KbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVy YWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yPQpvbm9pIiwiaWQiKSxrLm9wdGlvbnM9M0RlLnV0 aWxzLm9wdGlvbnNGdW5jLmJpbmQoayksay54PTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJndW1l bnRzLmxlbmd0aD8odC54KGUpLG4ueChlKSxrKTp0Lnh9LGsueT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudD0Kcy5sZW5ndGg/KHQueShlKSxuLnkoZSksayk6dC55fSxrLm1hcmdpbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGYudG9wPTNEdHlwZW9mIGUudG9w IT0zRCJ1bmRlZmluZWQiP2UudG9wOmYudG9wLGYucmlnaHQ9M0R0eXBlb2YgZS5yaWc9Cmh0IT0z RCJ1bmRlZmluZWQiP2UucmlnaHQ6Zi5yaWdodCxmLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9 M0QidW5kZWZpbmVkIj0KP2UuYm90dG9tOmYuYm90dG9tLGYubGVmdD0zRHR5cGVvZiBlLmxlZnQh PTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmYubGVmdCxrKTpmPQp9LGsubWFyZ2luMj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxrKTpsfSxrLndpZHRoPTNEZnU9Cm5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsayk6aH0say5oZWlnaHQ9M0Rm dW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxrKTpwfSxrLmhlaWdo dDI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyhkPTNEZSxrKTpkfSxr LmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWw9 CnMuZ2V0Q29sb3IodCksdS5jb2xvcihjKSxrKTpjfSxrLnNob3dMZWdlbmQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhiPTNEZSxrKTpifSxrLnRvb2x0aXBzPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlPQosayk6RX0say50b29sdGlw Q29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPTNEZSxrKTpT fSw9CmsuaW50ZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o dC5pbnRlcnBvbGF0ZShlKSxuLmludD0KZXJwb2xhdGUoZSksayk6dC5pbnRlcnBvbGF0ZSgpfSxr Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KHg9M0RlLGsp Onh9LGsueFRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o ci50aWM9CmtGb3JtYXQoZSkscy50aWNrRm9ybWF0KGUpLGspOnIudGlja0Zvcm1hdCgpfSxrLnlU aWNrRm9ybWF0PTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50aWNr Rm9ybWF0KGUpLG8udGlja0Zvcm1hdChlKSxrKTppLnRpY2tGb3JtYXQoKX0sPQprLmJydXNoRXh0 ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLGspOnd9LGsu dHJhbnNpdGk9Cm9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oTj0zRGUsayk6Tn0sa30sZS5tb2RlbHMubD0KaW5lUGx1c0JhcldpdGhGb2N1c0NoYXJ0PTNE ZnVuY3Rpb24oKXtmdW5jdGlvbiBCKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oPQplKXtmdW5j dGlvbiB0dChlKXt2YXIgdD0zRCsoZT0zRD0zRCJlIiksbj0zRHQ/MTotMSxyPTNESS8zO3JldHVy biJNIisuNSpuKyI9CiwiK3IrIkE2LDYgMCAwICIrdCsiICIrNi41Km4rIiwiKyhyKzYpKyJWIiso MipyLTYpKyJBNiw2IDAgMCAiK3QrIiAiKy41Km4rIj0KLCIrMipyKyJaIisiTSIrMi41Km4rIiwi KyhyKzgpKyJWIisoMipyLTgpKyJNIis0LjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCl9PQpmdW5j dGlvbiBudCgpe2guZW1wdHkoKXx8aC5leHRlbnQoeCksWS5kYXRhKFtoLmVtcHR5KCk/ay5kb21h aW4oKTp4XSkuZWFjaCg9CmZ1bmN0aW9uKGUsdCl7dmFyIG49M0RrKGVbMF0pLWsucmFuZ2UoKVsw XSxyPTNEay5yYW5nZSgpWzFdLWsoZVsxXSk7ZDMuc2VsZT0KY3QodGhpcykuc2VsZWN0KCIubGVm dCIpLmF0dHIoIndpZHRoIixuPDA/MDpuKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCIucmlnPQpo dCIpLmF0dHIoIngiLGsoZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0pfWZ1bmN0aW9uIHJ0 KCl7eD0zRGguZW1wdHkoKT89Cm51bGw6aC5leHRlbnQoKSxTPTNEaC5lbXB0eSgpP2suZG9tYWlu KCk6aC5leHRlbnQoKSxELmJydXNoKHtleHRlbnQ6UyxicnVzaD0KOmh9KSxudCgpLHIud2lkdGgo aikuaGVpZ2h0KEYpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHco PQplLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0u YmFyfSkpLHQud2lkdGgoaikuaGU9CmlnaHQoRikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKD0KdCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpO3ZhciBuPTNEJC5zZWxlY3QoIi5udi1mb2N1cyAubnYt YmFyPQpzV3JhcCIpLmRhdHVtKFIubGVuZ3RoP1IubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2tl eTplLmtleSx2YWx1ZXM6ZS52YWx1ZXM9Ci5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci54 KCkoZSx0KT49M0RTWzBdJiZyLngoKShlLHQpPD0zRFNbMV19KX19KTpbez0KdmFsdWVzOltdfV0p LGk9M0QkLnNlbGVjdCgiLm52LWZvY3VzIC5udi1saW5lc1dyYXAiKS5kYXR1bShVWzBdLmRpc2Fi bGVkP1t7PQp2YWx1ZXM6W119XTpVLm1hcChmdW5jdGlvbihlLG4pe3JldHVybntrZXk6ZS5rZXks dmFsdWVzOmUudmFsdWVzLmZpbHRlcihmdW49CmN0aW9uKGUsbil7cmV0dXJuIHQueCgpKGUsbik+ PTNEU1swXSYmdC54KCkoZSxuKTw9M0RTWzFdfSl9fSkpO1IubGVuZ3RoP0M9Cj0zRHIueFNjYWxl KCk6Qz0zRHQueFNjYWxlKCkscy5zY2FsZShDKS50aWNrcyhqLzEwMCkudGlja1NpemUoLUYsMCks cy5kb21haT0KbihbTWF0aC5jZWlsKFNbMF0pLE1hdGguZmxvb3IoU1sxXSldKSwkLnNlbGVjdCgi Lm52LXgubnYtYXhpcyIpLmNhbGwocyksbi5jPQphbGwociksaS5jYWxsKHQpLCQuc2VsZWN0KCIu bnYtZm9jdXMgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW49CnNsYXRlKDAs IitMLnJhbmdlKClbMF0rIikiKSx1LnNjYWxlKEwpLnRpY2tzKEYvMzYpLnRpY2tTaXplKC1qLDAp LCQuc2VsZWN0KD0KIi5udi1mb2N1cyAubnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixS Lmxlbmd0aD8xOjApLGEuc2NhbGUoQSkudGlja3MoPQpGLzM2KS50aWNrU2l6ZShSLmxlbmd0aD8w Oi1qLDApLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkyLm52LWF4aXMiKS5zdHlsZSg9CiJvcGFj aXR5IixVLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MucmFuZ2Uo KVsxXSsiLDApIiksJD0KLnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1heGlzIikuY2FsbCh1 KSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi15Mi5udi1hPQp4aXMiKS5jYWxsKGEpfXZhciBOPTNE ZDMuc2VsZWN0KHRoaXMpLFA9M0R0aGlzLGo9M0Qodnx8cGFyc2VJbnQoTi5zdHlsZSgid2k9CmR0 aCIpKXx8OTYwKS1wLmxlZnQtcC5yaWdodCxGPTNEKG18fHBhcnNlSW50KE4uc3R5bGUoImhlaWdo dCIpKXx8NDAwKS1wLnRvcD0KLXAuYm90dG9tLWcsST0zRGctZC50b3AtZC5ib3R0b207Qi51cGRh dGU9M0RmdW5jdGlvbigpe04uY2FsbChCKX0sQi5jb250YWluPQplcj0zRHRoaXM7aWYoIWV8fCFl Lmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS49 Cmxlbmd0aCl7dmFyIHE9M0ROLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW19dKTtyZXR1 cm4gcS5lbnRlcigpLmFwcGVuZD0KKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0 YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNoPQpvciIsIm1pZGRsZSIpLHEu YXR0cigieCIscC5sZWZ0K2ovMikuYXR0cigieSIscC50b3ArRi8yKS50ZXh0KGZ1bmN0aW9uKGUp e3I9CmV0dXJuIGV9KSxCfU4uc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIFI9 M0RlLmZpbHRlcihmdW5jdGlvbihlKT0Ke3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLFU9M0Rl LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5iYXJ9KTtDPTNEci54PQpTY2FsZSgpLGs9M0Rv LnNjYWxlKCksTD0zRHIueVNjYWxlKCksQT0zRHQueVNjYWxlKCksTz0zRGkueVNjYWxlKCksTT0z RG4ueVM9CmNhbGUoKTt2YXIgej0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGVkJiZlLmJhcn0pLm1hcChmdW5jdGlvbj0KKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm57eDp5KGUsdCkseTpiKGUsdCl9fSl9KSxXPTNEZS5mPQppbHRlcihmdW5j dGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmIWUuYmFyfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHU9CmVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnkoZSx0KSx5OmIoZSx0KX19 KX0pO0MucmFuZ2UoWzAsal0pLGsuZG9tYWluKD0KZDMuZXh0ZW50KGQzLm1lcmdlKHouY29uY2F0 KFcpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlKFswLGpdKTt2YXIgPQpYPTNETi5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lUGx1c0JhciIpLmRhdGEoW2VdKSxWPTNEWC5lbnRl cigpLmFwcGVuZCg9CiJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVBsdXNC YXIiKS5hcHBlbmQoImciKSwkPTNEWC5zZWxlY3QoIj0KZyIpO1YuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1sZWdlbmRXcmFwIik7dmFyIEo9M0RWLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xh c3MiLCJudi1mb2N1cyIpO0ouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMi KSxKLmFwcGVuZCgiZyI9CikuYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlzIiksSi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKT0KLEouYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1iYXJzV3JhcCIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sPQpp bmVzV3JhcCIpO3ZhciBLPTNEVi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRleHQi KTtLLmFwcGVuZCgiZyIpLmE9CnR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxLLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYteTEgbnYtYXhpcyIpLEsuYT0KcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXkyIG52LWF4aXMiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFy PQpzV3JhcCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxLLmFw cGVuZCgiZyIpLmF0dHIoImNsYXM9CnMiLCJudi1icnVzaEJhY2tncm91bmQiKSxLLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1icnVzaCIpLEUmJihjLj0Kd2lkdGgoai8yKSwkLnNl bGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5v cmlnPQppbmFsS2V5PTNEZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuZGVmaW5lZD9lLmtleTplLm9y aWdpbmFsS2V5LGUua2V5PTNEZS5vcmk9CmdpbmFsS2V5KyhlLmJhcj8iIChsZWZ0IGF4aXMpIjoi IChyaWdodCBheGlzKSIpLGV9KSkuY2FsbChjKSxwLnRvcCE9M0RjLmhlaT0KZ2h0KCkmJihwLnRv cD0zRGMuaGVpZ2h0KCksRj0zRChtfHxwYXJzZUludChOLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCkt cC50b3AtPQpwLmJvdHRvbS1nKSwkLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoIitqLzIrIiw9CiIrIC1wLnRvcCsiKSIpKSxYLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgiK3AubGVmdCsiLCIrcC50b3ArIikiKSxpLndpZD0KdGgoaikuaGVp Z2h0KEkpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0p LmZpbHRlcihmPQp1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0uYmFyfSkp LG4ud2lkdGgoaikuaGVpZ2h0KEkpLmNvbG9yKGU9Ci5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbj0KXS5kaXNh YmxlZCYmIWVbbl0uYmFyfSkpO3ZhciBRPTNEJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi1iYXJz V3JhcCIpLmRhdHVtPQooUi5sZW5ndGg/Ujpbe3ZhbHVlczpbXX1dKSxHPTNEJC5zZWxlY3QoIi5u di1jb250ZXh0IC5udi1saW5lc1dyYXAiKS5kYXR1bSg9ClVbMF0uZGlzYWJsZWQ/W3t2YWx1ZXM6 W119XTpVKTskLnNlbGVjdCgiLm52LWNvbnRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cj0KYW5z bGF0ZSgwLCIrKEYrcC5ib3R0b20rZC50b3ApKyIpIiksUS5jYWxsKGkpLEcuY2FsbChuKSxoLngo aykub24oImJydXNoIixyPQp0KSx4JiZoLmV4dGVudCh4KTt2YXIgWT0zRCQuc2VsZWN0KCIubnYt YnJ1c2hCYWNrZ3JvdW5kIikuc2VsZWN0QWxsKCJnIikuZGE9CnRhKFt4fHxoLmV4dGVudCgpXSks Wj0zRFkuZW50ZXIoKS5hcHBlbmQoImciKTtaLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIj0K LCJsZWZ0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixJKSxaLmFwcGVu ZCgicmVjdCIpLmF0dHIoImNsPQphc3MiLCJyaWdodCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDAp LmF0dHIoImhlaWdodCIsSSk7dmFyIGV0PTNEJC5zZWxlY3QoIi49Cm52LXgubnYtYnJ1c2giKS5j YWxsKGgpO2V0LnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsSSksZXQuc2VsZWN0QWxs KD0KIi5yZXNpemUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix0dCksby50aWNrcyhqLzEwMCku dGlja1NpemUoLUksMCksJC5zZWxlPQpjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0 dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTy5yYW5nZSgpWzA9Cl0rIikiKSwkLnNlbGVj dCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmNhbGwobyksZi5zY2FsZShPKS50aWNrcyhJ LzM2KT0KLnRpY2tTaXplKC1qLDApLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnYteTEubnYtYXhp cyIpLnN0eWxlKCJvcGFjaXR5IixSLmxlPQpuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKDAsIitrLnJhbmdlKClbMF0rIikiKSwkLnNlbGVjdCgiLm52LWM9Cm9udGV4dCAubnYt eTEubnYtYXhpcyIpLmNhbGwoZiksbC5zY2FsZShNKS50aWNrcyhJLzM2KS50aWNrU2l6ZShSLmxl bmd0aD8wOj0KLWosMCksJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Mi5udi1heGlzIikuc3R5 bGUoIm9wYWNpdHkiLFUubGVuZ3RoPzE6MCkuPQphdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUo IitrLnJhbmdlKClbMV0rIiwwKSIpLCQuc2VsZWN0KCIubnYtY29udGV4dCAubnY9Ci15Mi5udi1h eGlzIikuY2FsbChsKSxjLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Qi51 cGRhdGUoKX0pLD0KRC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe1QmJkgoZSxQLnBhcmVu dE5vZGUpfSkscnQoKX0pLEJ9dmFyIHQ9M0RlLm1vPQpkZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMu bGluZSgpLHI9M0RlLm1vZGVscy5oaXN0b3JpY2FsQmFyKCksaT0zRGUubW9kZWxzLmg9CmlzdG9y aWNhbEJhcigpLHM9M0RlLm1vZGVscy5heGlzKCksbz0zRGUubW9kZWxzLmF4aXMoKSx1PTNEZS5t b2RlbHMuYXhpcygpLD0KYT0zRGUubW9kZWxzLmF4aXMoKSxmPTNEZS5tb2RlbHMuYXhpcygpLGw9 M0RlLm1vZGVscy5heGlzKCksYz0zRGUubW9kZWxzLmxlPQpnZW5kKCksaD0zRGQzLnN2Zy5icnVz aCgpLHA9M0R7dG9wOjMwLHJpZ2h0OjMwLGJvdHRvbTozMCxsZWZ0OjYwfSxkPTNEe3RvcDo9CjAs cmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6NjB9LHY9M0RudWxsLG09M0RudWxsLGc9M0QxMDAseT0z RGZ1bmN0aW9uKGUpe3JldD0KdXJuIGUueH0sYj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LHc9 M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLEU9M0QhMCxTLHg9Cj0zRG51bGwsVD0zRCEwLE49M0Rm dW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ID0K Iit0KyI8L3A+In0sQyxrLEwsQSxPLE0sXz0zRCJObyBEYXRhIEF2YWlsYWJsZS4iLEQ9M0RkMy5k aXNwYXRjaCgidG9vbHRpcFNoPQpvdyIsInRvb2x0aXBIaWRlIiwiYnJ1c2giKSxQPTNEMDt0LmNs aXBFZGdlKCEwKSxuLmludGVyYWN0aXZlKCExKSxzLm9yaWVudCg9CiJib3R0b20iKS50aWNrUGFk ZGluZyg1KSx1Lm9yaWVudCgibGVmdCIpLGEub3JpZW50KCJyaWdodCIpLG8ub3JpZW50KCJib3R0 bz0KbSIpLnRpY2tQYWRkaW5nKDUpLGYub3JpZW50KCJsZWZ0IiksbC5vcmllbnQoInJpZ2h0Iik7 dmFyIEg9M0RmdW5jdGlvbihuLHIpPQp7UyYmKG4ucG9pbnRJbmRleCs9M0RNYXRoLmNlaWwoU1sw XSkpO3ZhciBpPTNEbi5wb3NbMF0rKHIub2Zmc2V0TGVmdHx8MCksbz0KPTNEbi5wb3NbMV0rKHIu b2Zmc2V0VG9wfHwwKSxmPTNEcy50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW50SW5k ZXgpPQopLGw9M0Qobi5zZXJpZXMuYmFyP3U6YSkudGlja0Zvcm1hdCgpKHQueSgpKG4ucG9pbnQs bi5wb2ludEluZGV4KSksYz0zRE4obi49CnNlcmllcy5rZXksZixsLG4sQik7ZS50b29sdGlwLnNo b3coW2ksb10sYyxuLnZhbHVlPDA/Im4iOiJzIixudWxsLHIpfTtyZXR1cj0KbiB0LmRpc3BhdGNo Lm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9z WzBdK3AuPQpsZWZ0LGUucG9zWzFdK3AudG9wXSxELnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2w9CnRpcCIsZnVuY3Rpb24oZSl7RC50b29sdGlwSGlk ZShlKX0pLHIuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcD0KIixmdW5jdGlv bihlKXtlLnBvcz0zRFtlLnBvc1swXStwLmxlZnQsZS5wb3NbMV0rcC50b3BdLEQudG9vbHRpcFNo b3coZSl9KSxyPQouZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlv bihlKXtELnRvb2x0aXBIaWRlKGUpfSksRC5vbig9CiJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtU JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQi5kaXNwYXRjaD0zREQsQi5sZWdlbmQ9Cj0zRGMsQi5s aW5lcz0zRHQsQi5saW5lczI9M0RuLEIuYmFycz0zRHIsQi5iYXJzMj0zRGksQi54QXhpcz0zRHMs Qi54MkF4aXM9Cj0zRG8sQi55MUF4aXM9M0R1LEIueTJBeGlzPTNEYSxCLnkzQXhpcz0zRGYsQi55 NEF4aXM9M0RsLGQzLnJlYmluZChCLHQsImRlZj0KaW5lZCIsInNpemUiLCJjbGlwVm9yb25vaSIs ImludGVycG9sYXRlIiksQi5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iPQppbmQoQiks Qi54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLHQueChlKSxy LngoZSksQik6eX09CixCLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Yj0zRGUsdC55KGUpLHIueShlKSxCKTpifSxCLm1hcj0KZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHAudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluPQplZCI/ ZS50b3A6cC50b3AscC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uucmln aHQ6cC5yaWdodCxwLmI9Cm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2Uu Ym90dG9tOnAuYm90dG9tLHAubGVmdD0zRHR5cGVvZiBlLj0KbGVmdCE9M0QidW5kZWZpbmVkIj9l LmxlZnQ6cC5sZWZ0LEIpOnB9LEIud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpu dHMubGVuZ3RoPyh2PTNEZSxCKTp2fSxCLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhtPQo9M0RlLEIpOm19LEIuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odz0zRGUudXRpbHMuZ2V0Q289Cmxvcih0KSxjLmNvbG9yKHcpLEIp Ond9LEIuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0K KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oVD0zRGUsQik6VH0sPQpCLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEIpOk59LEIubm9EYXQ9CmE9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0zRGUsQik6X30sQi5icnVzaEV4dGVudD0zRGZ1bmN0 aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEIpOnh9LEJ9LGUubW9kZWxz Lm11bHRpQmFyPTNEZnVuY3Rpb24oPQope2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXt2YXIgZz0zRG4tdC5sZWZ0LXQucmlnaHQsQz0zRHItdC49CnRvcC10LmJvdHRvbSxr PTNEZDMuc2VsZWN0KHRoaXMpO2QmJmUubGVuZ3RoJiYoZD0zRFt7dmFsdWVzOmVbMF0udmFsdWVz Lm1hcD0KKGZ1bmN0aW9uKGUpe3JldHVybnt4OmUueCx5OjAsc2VyaWVzOmUuc2VyaWVzLHNpemU6 LjAxfX0pfV0pLGMmJihlPTNEZDMubGF5PQpvdXQuc3RhY2soKS5vZmZzZXQoaCkudmFsdWVzKGZ1 bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLnkoYSkoIWUubGVuZ3RoJiY9CmQ/ZDplKSksZS5m b3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNlcmll cz0zRHR9KT0KfSksYyYmZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsbil7dmFyIHI9M0QwLGk9 M0QwO2UubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PQo9M0RlLnZhbHVlc1tuXTt0LnNpemU9M0RNYXRo LmFicyh0LnkpLHQueTwwPyh0LnkxPTNEaSxpLT0zRHQuc2l6ZSk6KHQueTE9M0Q9CnQuc2l6ZSty LHIrPTNEdC5zaXplKX0pfSk7dmFyIEw9M0R5JiZiP1tdOmUubWFwKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHVlcz0KLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0KSx5OmEoZSx0KSx5 MDplLnkwLHkxOmUueTF9fSl9KTtpLmRvbWFpbih5PQp8fGQzLm1lcmdlKEwpLm1hcChmdW5jdGlv bihlKXtyZXR1cm4gZS54fSkpLnJhbmdlQmFuZHMod3x8WzAsZ10sUykscy5kb21haW49CihifHxk My5leHRlbnQoZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjP2UueT4wP2UueTE6 ZS55MStlLnk6ZS55fT0KKS5jb25jYXQoZikpKS5yYW5nZShFfHxbQywwXSksaS5kb21haW4oKVsw XT0zRD0zRD0zRGkuZG9tYWluKClbMV0mJihpLmRvbWFpPQpuKClbMF0/aS5kb21haW4oW2kuZG9t YWluKClbMF0taS5kb21haW4oKVswXSouMDEsaS5kb21haW4oKVsxXStpLmRvbWFpbigpWzE9Cl0q LjAxXSk6aS5kb21haW4oWy0xLDFdKSkscy5kb21haW4oKVswXT0zRD0zRD0zRHMuZG9tYWluKClb MV0mJihzLmRvbWFpbigpWz0KMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0rcy5kb21haW4oKVsw XSouMDEscy5kb21haW4oKVsxXS1zLmRvbWFpbigpWzFdKi4wPQoxXSk6cy5kb21haW4oWy0xLDFd KSksVD0zRFR8fGksTj0zRE58fHM7dmFyIEE9M0RrLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW09 CnVsdGliYXIiKS5kYXRhKFtlXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52ZDMgbnYtd3JhcCBudj0KLW11bHRpYmFyIiksTT0zRE8uYXBwZW5kKCJkZWZzIiksXz0z RE8uYXBwZW5kKCJnIiksRD0zREEuc2VsZWN0KCJnIik7Xy5hcHBlPQpuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtZ3JvdXBzIiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQr Iiw9CiIrdC50b3ArIikiKSxNLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2Ut Y2xpcC0iK28pLmFwcGVuZCgicmVjdD0KIiksQS5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitvKyIg cmVjdCIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCJoZWlnaHQiLEMpLEQuPQphdHRyKCJjbGlwLXBh dGgiLGw/InVybCgjbnYtZWRnZS1jbGlwLSIrbysiKSI6IiIpO3ZhciBQPTNEQS5zZWxlY3QoIi5u di1ncm89CnVwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1 cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1cj0KbiB0fSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0 eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0PQp5IiwxZS02KSxQ LmV4aXQoKS5zZWxlY3RBbGwoInJlY3QubnYtYmFyIikuYXR0cigieSIsZnVuY3Rpb24oZSl7cmV0 dXJuIGM/Tig9CmUueTApOk4oMCl9KS5hdHRyKCJoZWlnaHQiLDApLnJlbW92ZSgpLFAuYXR0cigi Y2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIj0KbnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNs YXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlPQooImZpbGwi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHA9CihlLHQpfSksUC5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJm aWxsLW9wYWNpdHkiLC43NSk7dmFyIEg9M0RQLnNlbD0KZWN0QWxsKCJyZWN0Lm52LWJhciIpLmRh dGEoZnVuY3Rpb24odCl7cmV0dXJuIGQmJiFlLmxlbmd0aD9kLnZhbHVlczp0LnZhbHVlPQpzfSk7 SC5leGl0KCkucmVtb3ZlKCk7dmFyIEI9M0RILmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigi Y2xhc3MiLGZ1bmN0aW89Cm4oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6 Im52LWJhciBwb3NpdGl2ZSJ9KS5hdHRyKCJ4IixmdW5jdD0KaW9uKHQsbixyKXtyZXR1cm4gYz8w OnIqaS5yYW5nZUJhbmQoKS9lLmxlbmd0aH0pLmF0dHIoInkiLGZ1bmN0aW9uKGUpe3JldHVyPQpu IE4oYz9lLnkwOjApfSkuYXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQo KS8oYz8xOmUubGVuZ3RoKSk9Ci5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJu InRyYW5zbGF0ZSgiK2kodShlLHQpKSsiLDApIn0pO0guc3R5bD0KZSgiZmlsbCIsZnVuY3Rpb24o ZSx0LG4pe3JldHVybiBwKGUsbix0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXty PQpldHVybiBwKGUsbix0KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0 KHRoaXMpLmNsYXNzZWQoImhvdmU9CnIiLCEwKSx4LmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmEo dCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W2kodT0KKHQsbikpK2kucmFuZ2VC YW5kKCkqKGM/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKHQsbikrKGM/dC55 MDowPQopKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0p Lm9uKCJtb3VzZW91dCIsZnVuY3Rpb249Cih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJo b3ZlciIsITEpLHguZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTphKHQsbikscD0Kb2ludDp0LHNlcmll czplW3Quc2VyaWVzXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVu dH0pfSkuPQpvbigiY2xpY2siLGZ1bmN0aW9uKHQsbil7eC5lbGVtZW50Q2xpY2soe3ZhbHVlOmEo dCxuKSxwb2ludDp0LHNlcmllczplW3Quc2U9CnJpZXNdLHBvczpbaSh1KHQsbikpK2kucmFuZ2VC YW5kKCkqKGM/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKD0KdCxuKSsoYz90 LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxk My5ldmVudC5zPQp0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG4p e3guZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQ9CixuKSxwb2ludDp0LHNlcmllczplW3Quc2Vy aWVzXSxwb3M6W2kodSh0LG4pKStpLnJhbmdlQmFuZCgpKihjP2UubGVuZ3RoLzI6dD0KLnNlcmll cysuNSkvZS5sZW5ndGgscyhhKHQsbikrKGM/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJ bmRleDp0LnNlcmllPQpzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p LEguYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmU9CnR1cm4gYShlLHQpPDA/Im52LWJhciBu ZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2ZSJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aT0Kb24o ZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIraSh1KGUsdCkpKyIsMCkifSksdiYmKG18fChtPTNEZS5t YXAoZnVuY3Rpb24oKXtyPQpldHVybiEwfSkpLEguc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCxu KXtyZXR1cm4gZDMucmdiKHYoZSx0KSkuZGFya2VyKG0ubWE9CnAoZnVuY3Rpb24oZSx0KXtyZXR1 cm4gdH0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiFtW3RdfSlbbl0pLnRvU3RyaW5nKD0K KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKHYoZSx0KSku ZGFya2VyKG0ubWFwKGZ1bmN0PQppb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihl LHQpe3JldHVybiFtW3RdfSlbbl0pLnRvU3RyaW5nKCl9KSksYz89CkguYXR0cigieSIsZnVuY3Rp b24oZSx0KXtyZXR1cm4gcyhjP2UueTE6MCl9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKGUsdCl7 cj0KZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocyhlLnkrKGM/ZS55MDowKSktcyhjP2UueTA6MCkp LDEpfSkuYXR0cigieCIsZnVuY3RpPQpvbih0LG4pe3JldHVybiBjPzA6dC5zZXJpZXMqaS5yYW5n ZUJhbmQoKS9lLmxlbmd0aH0pLmF0dHIoIndpZHRoIixpLnJhbmdlQmE9Cm5kKCkvKGM/MTplLmxl bmd0aCkpOkguYXR0cigieCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXJpZXMqaS5yYW5nZUJh bmQoKT0KL2UubGVuZ3RofSkuYXR0cigid2lkdGgiLGkucmFuZ2VCYW5kKCkvZS5sZW5ndGgpLmF0 dHIoInkiLGZ1bmN0aW9uKGUsdCl7cmV0PQp1cm4gYShlLHQpPDA/cygwKTpzKDApLXMoYShlLHQp KTwxP3MoMCktMTpzKGEoZSx0KSl8fDB9KS5hdHRyKCJoZWlnaHQiLGZ1bmM9CnRpb24oZSx0KXty ZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocyhhKGUsdCkpLXMoMCkpLDEpfHwwfSksVD0zRGkuY29w eSgpLE49Cj0zRHMuY29weSgpfSksQ312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxl ZnQ6MH0sbj0zRDk2MCxyPTNENTAwLGk9Cj0zRGQzLnNjYWxlLm9yZGluYWwoKSxzPTNEZDMuc2Nh bGUubGluZWFyKCksbz0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZT0KNCksdT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPTNEWzBdLGw9 M0QhMCxjPQo9M0QhMSxoPTNEInplcm8iLHA9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGQ9M0Qh MSx2PTNEbnVsbCxtLGc9M0QxMjAwLHksYiw9CncsRSxTPTNELjEseD0zRGQzLmRpc3BhdGNoKCJj aGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZT0KbGVtZW50TW91 c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IiksVCxOO3JldHVybiBDLmRpc3BhdGNoPTNEeCxDLm9w dGlvbnM9M0RlPQoudXRpbHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGU9CixDKTp1fSxDLnk9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsQyk6YX0sQy5tYXJnaW49M0RmdT0KbmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkIj9lLnRvPQpwOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0Q9CnR5cGVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRD0KInVu ZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxDKTp0fSxDLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5nPQp0aD8obj0zRGUsQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn09CixDLnhTY2FsZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxDKTppfSxDLnlTY2FsZT0zRGZ1bj0K Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9LEMueERvbWFpbj0z RGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLEMpOnl9LEMueURv bWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KGI9M0RlLEMpOmJ9 LEMueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEMp Oj0Kd30sQy55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0z RGUsQyk6RX0sQy5mb3JjZVk9M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhmPTNEZSxDKTpmfSxDLnN0YWNrZWQ9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMu bGVuZ3RoPyhjPTNEZSxDKTpjfSxDLnN0YWNrT2Zmc2V0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZT0KbnRzLmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPQo9M0RlLEMpOmx9LEMuY29sb3I9M0RmdW5jdGlvbih0 KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUudXRpbHMuZ2V0Q289Cmxvcih0KSxDKTpw fSxDLmJhckNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0Rl LnV0aWxzLj0KZ2V0Q29sb3IodCksQyk6dn0sQy5kaXNhYmxlZD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDPQopOm19LEMuaWQ9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsQyk6b30sQy5oaWRlYWJsZT0zRGY9CnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEMpOmR9LEMuZGVsYXk9M0RmdW5jdGlv bihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxDKTpnfSxDLmdyb3VwU3BhY2lu Zz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVuPQp0cy5sZW5ndGg/KFM9M0RlLEMpOlN9LEN9 LGUubW9kZWxzLm11bHRpQmFyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEEoZSk9CntyZXR1 cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBiPTNEZDMuc2VsZWN0KHRoaXMpLGs9M0R0aGlzLE89 M0QodXx8cGFyc2VJbj0KdChiLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1vLmxlZnQtby5yaWdodCxN PTNEKGF8fHBhcnNlSW50KGIuc3R5bGUoImhlaWdodCIpPQopfHw0MDApLW8udG9wLW8uYm90dG9t O0EudXBkYXRlPTNEZnVuY3Rpb24oKXtiLmNhbGwoQSl9LEEuY29udGFpbmVyPTNEdGhpcyw9ClMu ZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheCl7 dmFyIF87eD0zRHt9O2Zvcj0KKF8gaW4gUylTW19daW5zdGFuY2VvZiBBcnJheT94W19dPTNEU1tf XS5zbGljZSgwKTp4W19dPTNEU1tfXX1pZighZXx8IWUubGVuPQpndGh8fCFlLmZpbHRlcihmdW5j dGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgRD0zRGIuc2VsZWM9 CnRBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEQuZW50ZXIoKS5hcHBlbmQoInRl eHQiKS5hdHRyKCJjbGFzcyIsIj0KbnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIiku c3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksRC5hdHRyKCJ4PQoiLG8ubGVmdCtPLzIpLmF0 dHIoInkiLG8udG9wK00vMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLEF9Yi5zZWxlY3RB bGw9CigiLm52LW5vRGF0YSIpLnJlbW92ZSgpLHc9M0R0LnhTY2FsZSgpLEU9M0R0LnlTY2FsZSgp O3ZhciBQPTNEYi5zZWxlY3RBbGwoIj0KZy5udi13cmFwLm52LW11bHRpQmFyV2l0aExlZ2VuZCIp LmRhdGEoW2VdKSxIPTNEUC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoPQoiY2xhc3MiLCJudmQz IG52LXdyYXAgbnYtbXVsdGlCYXJXaXRoTGVnZW5kIikuYXBwZW5kKCJnIiksQj0zRFAuc2VsZWN0 KCJnIik9CjtILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksSC5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LT0KeSBudi1heGlzIiksSC5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWJhcnNXcmFwIiksSC5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnYt bGVnZW5kV3JhcCIpLEguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAi KSxjJiYoaS49CndpZHRoKE8tQygpKSx0LmJhckNvbG9yKCkmJmUuZm9yRWFjaChmdW5jdGlvbihl LHQpe2UuY29sb3I9M0RkMy5yZ2IoIiNjY2MiKT0KLmRhcmtlcih0KjEuNSkudG9TdHJpbmcoKX0p LEIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksby50PQpvcCE9M0Rp LmhlaWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLE09M0QoYXx8cGFyc2VJbnQoYi5zdHlsZSgi aGVpZ2h0IikpfHw9CjQwMCktby50b3Atby5ib3R0b20pLEIuc2VsZWN0KCIubnYtbGVnZW5kV3Jh cCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZT0KKCIrQygpKyIsIisgLW8udG9wKyIpIikp O2lmKGwpe3ZhciBqPTNEW3trZXk6Ikdyb3VwZWQiLGRpc2FibGVkOnQuc3RhY2tlZCgpPQp9LHtr ZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0LnN0YWNrZWQoKX1dO3Mud2lkdGgoQygpKS5jb2xvcihb IiM0NDQiLCIjNDQ0Iiw9CiIjNDQ0Il0pLEIuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0 dW0oaikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKD0KMCwiKyAtby50b3ArIikiKS5jYWxs KHMpfVAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRvcCsiPQop IiksZCYmQi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIitPKyIsMCkiKSx0LmQ9CmlzYWJsZWQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlz YWJsZWR9KSkud2lkdGgoTykuaGVpZ2h0KE0pLmNvbG9yKGUubT0KYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS5jb2xvcnx8ZihlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0u PQpkaXNhYmxlZH0pKTt2YXIgRj0zREIuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShlLmZp bHRlcihmdW5jdGlvbihlKXtyZXQ9CnVybiFlLmRpc2FibGVkfSkpO0YuY2FsbCh0KTtpZihoKXtu LnNjYWxlKHcpLnRpY2tzKE8vMTAwKS50aWNrU2l6ZSgtTSwwKSxCLj0Kc2VsZWN0KCIubnYteC5u di1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitFLnJhbmdlKClbMF0rIiki KSxCPQouc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKTt2YXIgST0zREIuc2VsZWN0KCIu bnYteC5udi1heGlzID4gZyIpLnNlbGU9CmN0QWxsKCJnIik7SS5zZWxlY3RBbGwoImxpbmUsIHRl eHQiKS5zdHlsZSgib3BhY2l0eSIsMSk7aWYobSl7dmFyIHE9M0RmdW5jdD0KaW9uKGUsdCl7cmV0 dXJuInRyYW5zbGF0ZSgiK2UrIiwiK3QrIikifSxSPTNENSxVPTNEMTc7SS5zZWxlY3RBbGwoInRl eHQiKS5hPQp0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxKDAsbiUyPTNE PTNEMD9SOlUpfSk7dmFyIHo9M0RkMy5zZWw9CmVjdEFsbCgiLm52LXgubnYtYXhpcyAubnYtd3Jh cCBnIGcgdGV4dCIpWzBdLmxlbmd0aDtCLnNlbGVjdEFsbCgiLm52LXgubnYtYT0KeGlzIC5udi1h eGlzTWF4TWluIHRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEo MCx0PTNEPTNEPQo9M0QwfHx6JTIhPTNEPTNEMD9VOlIpfSl9diYmSS5maWx0ZXIoZnVuY3Rpb24o dCxuKXtyZXR1cm4gbiVNYXRoLmNlaWwoZVswXS49CnZhbHVlcy5sZW5ndGgvKE8vMTAwKSkhPTNE PTNEMH0pLnNlbGVjdEFsbCgidGV4dCwgbGluZSIpLnN0eWxlKCJvcGFjaXR5IiwwKT0KLGcmJkku c2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKCIrZysiIDAs MCkiKS5zdHlsZSgiPQp0ZXh0LWFuY2hvciIsZz4wPyJzdGFydCI6ImVuZCIpLEIuc2VsZWN0KCIu bnYteC5udi1heGlzIikuc2VsZWN0QWxsKCJnLm52LWE9Cnhpc01heE1pbiB0ZXh0Iikuc3R5bGUo Im9wYWNpdHkiLDEpfXAmJihyLnNjYWxlKEUpLnRpY2tzKE0vMzYpLnRpY2tTaXplKC1PLD0KMCks Qi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNo YW5nZSIsZnVuY3Rpb24oPQplKXtTPTNEZSxOLnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRlKCl9KSxz LmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb249CihlLG4pe2lmKCFlLmRpc2FibGVk KXJldHVybjtqPTNEai5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9M0QhMCxlfT0K KSxlLmRpc2FibGVkPTNEITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQiOnQuc3RhY2tlZCgh MSk7YnJlYWs7Y2FzZSJTdGFjPQprZWQiOnQuc3RhY2tlZCghMCl9Uy5zdGFja2VkPTNEdC5zdGFj a2VkKCksTi5zdGF0ZUNoYW5nZShTKSxBLnVwZGF0ZSgpfSksTi49Cm9uKCJ0b29sdGlwU2hvdyIs ZnVuY3Rpb24oZSl7eSYmTChlLGsucGFyZW50Tm9kZSl9KSxOLm9uKCJjaGFuZ2VTdGF0ZSIsZnVu Yz0KdGlvbihuKXt0eXBlb2Ygbi5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChm dW5jdGlvbihlLHQpe2UuZGlzYWJsPQplZD0zRG4uZGlzYWJsZWRbdF19KSxTLmRpc2FibGVkPTNE bi5kaXNhYmxlZCksdHlwZW9mIG4uc3RhY2tlZCE9M0QidW5kZWZpbmU9CmQiJiYodC5zdGFja2Vk KG4uc3RhY2tlZCksUy5zdGFja2VkPTNEbi5zdGFja2VkKSxBLnVwZGF0ZSgpfSl9KSxBfXZhciB0 PTNEZT0KLm1vZGVscy5tdWx0aUJhcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxz LmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnPQplbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0z RHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NjB9LHU9M0RudWw9CmwsYT0zRG51bGws Zj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksbD0zRCEwLGM9M0QhMCxoPTNEITAscD0zRCEwLGQ9 M0QhMSx2PQo9M0QhMCxtPTNEITEsZz0zRDAseT0zRCEwLGI9M0RmdW5jdGlvbihlLHQsbixyLGkp e3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjw9CnA+IituKyIgb24gIit0KyI8L3A+In0sdyxFLFM9 M0R7c3RhY2tlZDohMX0seD0zRG51bGwsVD0zRCJObyBEYXRhIEF2YWlsYWJsZT0KLiIsTj0zRGQz LmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFu Z2VTdGF0ZSIpPQosQz0zRGZ1bmN0aW9uKCl7cmV0dXJuIGw/MTgwOjB9LGs9M0QwO3Quc3RhY2tl ZCghMSksbi5vcmllbnQoImJvdHRvbSIpLnRpY2s9ClBhZGRpbmcoNykuaGlnaGxpZ2h0WmVybygh MCkuc2hvd01heE1pbighMSkudGlja0Zvcm1hdChmdW5jdGlvbihlKXtyZXR1cm4gZT0KfSksci5v cmllbnQoZD8icmlnaHQiOiJsZWZ0IikudGlja0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSkscy51 cGRhdGVTdGF0ZSghPQoxKTt2YXIgTD0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSso cy5vZmZzZXRMZWZ0fHwwKSx1PTNEaS5wb3NbMV0rKHM9Ci5vZmZzZXRUb3B8fDApLGE9M0RuLnRp Y2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGbz0Kcm1h dCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRGIoaS5zZXJpZXMua2V5LGEsZixp LEEpO2UudG9vbHRpcC5zPQpob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTty ZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Y9CmVyLnRvb2x0aXAiLGZ1bmN0aW9u KGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnRvcF0sTi50b29sdGlwUz0K aG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9u KGUpe04udG9vbHRpcEhpZGUoPQplKX0pLE4ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3km JmUudG9vbHRpcC5jbGVhbnVwKCl9KSxBLmRpc3BhdGNoPTNETiw9CkEubXVsdGliYXI9M0R0LEEu bGVnZW5kPTNEaSxBLnhBeGlzPTNEbixBLnlBeGlzPTNEcixkMy5yZWJpbmQoQSx0LCJ4IiwieSIs Ij0KeERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVki LCJjbGlwRWRnZSIsImlkIiwic3RhPQpja2VkIiwic3RhY2tPZmZzZXQiLCJkZWxheSIsImJhckNv bG9yIiwiZ3JvdXBTcGFjaW5nIiksQS5vcHRpb25zPTNEZS51dGlscy49Cm9wdGlvbnNGdW5jLmJp bmQoQSksQS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby50 b3A9Cj0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZD0KZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206PQpvLmJvdHRvbSxvLmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZnQsQSk6b30sQS53 aWR0aD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEEpOnV9 LEEuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUs QSk6YX0sQS5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGY9 M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoZiksQSk6Zn0sQS5zaG93Q29udHJvbHM9M0Rm dW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxBKTpsfSxBLnNob3dM ZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gPQphcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxBKTpj fSxBLnNob3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KGg9 M0RlLEEpOmh9LEEuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHA9M0RlLD0KQSk6cH0sQS5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsci5vcmllPQpudChlPyJyaWdodCI6ImxlZnQiKSxBKTpk fSxBLnJlZHVjZVhUaWNrcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/ KHY9M0RlLEEpOnZ9LEEucm90YXRlTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGc9Cj0zRGUsQSk6Z30sQS5zdGFnZ2VyTGFiZWxzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEEpOj0KbX0sQS50b29sdGlwPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLEEpOmJ9LEEudG9vbHRpcHM9Cj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxBKTp5fSxBLnRvb2x0aXBD b250ZW50PTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsQSk6 Yn0sQS5zdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KFM9M0Rl LEEpOlN9LEEuZGVmYXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy49Cmxl bmd0aD8oeD0zRGUsQSk6eH0sQS5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oVD0zRGUsQT0KKTpUfSxBLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPTNEZSxBKTprPQp9LEF9LGUubW9kZWxzLm11bHRp QmFySG9yaXpvbnRhbD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKGY9 CnVuY3Rpb24oZSl7dmFyIGk9M0RuLXQubGVmdC10LnJpZ2h0LHk9M0RyLXQudG9wLXQuYm90dG9t LEM9M0RkMy5zZWxlY3QodGhpcz0KKTtwJiYoZT0zRGQzLmxheW91dC5zdGFjaygpLm9mZnNldCgi emVybyIpLnZhbHVlcyhmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1PQplc30pLnkoYSkoZSkpLGUu Zm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXJp ZXM9Cj0zRHR9KX0pLHAmJmVbMF0udmFsdWVzLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPTNEMCxp PTNEMDtlLm1hcChmdW5jdGlvbihlKT0Ke3ZhciB0PTNEZS52YWx1ZXNbbl07dC5zaXplPTNETWF0 aC5hYnModC55KSx0Lnk8MD8odC55MT0zRGktdC5zaXplLGktPTNEdC5zPQppemUpOih0LnkxPTNE cixyKz0zRHQuc2l6ZSl9KX0pO3ZhciBrPTNEYiYmdz9bXTplLm1hcChmdW5jdGlvbihlKXtyZXR1 cm4gZS49CnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTphKGUsdCks eTA6ZS55MCx5MTplLnkxfX0pfSk7cy5kbz0KbWFpbihifHxkMy5tZXJnZShrKS5tYXAoZnVuY3Rp b24oZSl7cmV0dXJuIGUueH0pKS5yYW5nZUJhbmRzKEV8fFswLHldLC4xKSxvPQouZG9tYWluKHd8 fGQzLmV4dGVudChkMy5tZXJnZShrKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHA/ZS55PjA/ZS55 MStlLnk6ZS49CnkxOmUueX0pLmNvbmNhdChmKSkpLGQmJiFwP28ucmFuZ2UoU3x8W28uZG9tYWlu KClbMF08MD9tOjAsaS0oby5kb21haW4oKVsxXT0KPjA/bTowKV0pOm8ucmFuZ2UoU3x8WzAsaV0p LFQ9M0RUfHxzLE49M0ROfHxkMy5zY2FsZS5saW5lYXIoKS5kb21haW4oby5kb21hPQppbigpKS5y YW5nZShbbygwKSxvKDApXSk7dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52 LXdyYXAubnYtbXU9Cmx0aWJhckhvcml6b250YWwiKS5kYXRhKFtlXSksQT0zREwuZW50ZXIoKS5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbj0Kdi13cmFwIG52LW11bHRpYmFySG9yaXpv bnRhbCIpLE89M0RBLmFwcGVuZCgiZGVmcyIpLE09M0RBLmFwcGVuZCgiZyIpLF89M0RMPQouc2Vs ZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLEwuYXR0cigi dHJhbnNmb3JtIiwidHI9CmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEQ9M0RM LnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLj0KbnYtZ3JvdXAiKS5kYXRhKGZ1bmN0 aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVybiB0fSk7RC5lbnRlcigpLmFwPQpw ZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFjaXR5 IiwxZS02KSxELmV4aXQoKS49CnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZp bGwtb3BhY2l0eSIsMWUtNikucmVtb3ZlKCksRC5hdHRyKCJjbD0KYXNzIixmdW5jdGlvbihlLHQp e3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9u PQooZSl7cmV0dXJuIGUuaG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4g bChlLHQpfSkuc3R5bGUoInN0cm89CmtlIixmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCl9KSxE LnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtbz0KcGFjaXR5IiwuNzUpO3Zh ciBQPTNERC5zZWxlY3RBbGwoImcubnYtYmFyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1PQplc30pO1AuZXhpdCgpLnJlbW92ZSgpO3ZhciBIPTNEUC5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Q9Cmlvbih0LG4scil7cmV0dXJuInRyYW5zbGF0ZSgiK04o cD90LnkwOjApKyIsIisocD8wOnIqcy5yYW5nZUJhbmQoKS9lLmxlbmd0aD0KK3ModSh0LG4pKSkr IikifSk7SC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsMCkuYXR0cigiaGVpZ2h0IixzLnJh bmdlQmFuPQpkKCkvKHA/MTplLmxlbmd0aCkpLFAub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxu KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCg9CiJob3ZlciIsITApLHguZWxlbWVudE1vdXNlb3Zl cih7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvcz0KOltvKGEodCxu KSsocD90LnkwOjApKSxzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0aC8yOnQuc2Vy aWVzKy41KS9lPQoubGVuZ3RoXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpk My5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW49CmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMp LmNsYXNzZWQoImhvdmVyIiwhMSkseC5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmEodD0KLG4pLHBv aW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmll cyxlOmQzLmV2ZW50PQp9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXt4LmVsZW1lbnRDbGlj ayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmU9Clt0LnNlcmllc10scG9zOltzKHUodCxu KSkrcy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aD0KLG8o YSh0LG4pKyhwP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpk My5ldmVudH0pLGQzLmV2PQplbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1 bmN0aW9uKHQsbil7eC5lbGVtZW50RGJsQ2xpY2soe3ZhbHU9CmU6YSh0LG4pLHBvaW50OnQsc2Vy aWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHA/ZS5sZW5ndD0K aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSsocD90LnkwOjApKV0scG9pbnRJbmRl eDpuLHNlcmllc0luZGV4OnQuPQpzZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9w YWdhdGlvbigpfSksSC5hcHBlbmQoInRleHQiKSxkJiYhcD8oUC49CnNlbGVjdCgidGV4dCIpLmF0 dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8iZW5kIjoic3Rh cj0KdCJ9KS5hdHRyKCJ5IixzLnJhbmdlQmFuZCgpLyhlLmxlbmd0aCoyKSkuYXR0cigiZHkiLCIu MzJlbSIpLnRleHQoZnVuY3Rpb24oPQplLHQpe3JldHVybiBnKGEoZSx0KSl9KSxQLnNlbGVjdCgi dGV4dCIpLmF0dHIoIngiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSw9CnQpPDA/LTQ6byhhKGUs dCkpLW8oMCkrNH0pKTpQLnNlbGVjdEFsbCgidGV4dCIpLnRleHQoIiIpLHYmJiFwPyhILmFwcGVu ZCgidD0KZXh0IikuY2xhc3NlZCgibnYtYmFyLWxhYmVsIiwhMCksUC5zZWxlY3QoInRleHQubnYt YmFyLWxhYmVsIikuYXR0cigidGV4dC1hPQpuY2hvciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShl LHQpPDA/InN0YXJ0IjoiZW5kIn0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCk9Ci8oZS5sZW5ndGgq MikpLmF0dHIoImR5IiwiLjMyZW0iKS50ZXh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0KX0p LFAuc2VsZT0KY3QoInRleHQubnYtYmFyLWxhYmVsIikuYXR0cigieCIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gYShlLHQpPDA/bygwKS1vKGEoZSx0PQopKSs0Oi00fSkpOlAuc2VsZWN0QWxsKCJ0ZXh0 Lm52LWJhci1sYWJlbCIpLnRleHQoIiIpLFAuYXR0cigiY2xhc3MiLGZ1bmN0aW89Cm4oZSx0KXty ZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2ZSJ9KSxjJiYo aHx8KGg9M0RlLj0KbWFwKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksUC5zdHlsZSgiZmlsbCIsZnVu Y3Rpb24oZSx0LG4pe3JldHVybiBkMy5yZ2IoYyhlPQosdCkpLmRhcmtlcihoLm1hcChmdW5jdGlv bihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWhbdF09Cn0pW25d KS50b1N0cmluZygpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkMy5y Z2IoYyhlLHQpKS5kYT0KcmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVy KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWhbdF19KVtuXSkuPQp0b1N0cmluZygpfSkpLHA/UC5hdHRy KCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK28oZS55MSk9Cisi LCIrcyh1KGUsdCkpKyIpIn0pLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixmdW5jdGlvbihl LHQpe3JldHVybiBNYXRoLj0KYWJzKG8oYShlLHQpK2UueTApLW8oZS55MCkpfSkuYXR0cigiaGVp Z2h0IixzLnJhbmdlQmFuZCgpKTpQLmF0dHIoInRyYW5zZm9yPQptIixmdW5jdGlvbih0LG4pe3Jl dHVybiJ0cmFuc2xhdGUoIisoYSh0LG4pPDA/byhhKHQsbikpOm8oMCkpKyIsIisodC5zZXJpZXM9 CipzLnJhbmdlQmFuZCgpL2UubGVuZ3RoK3ModSh0LG4pKSkrIikifSkuc2VsZWN0KCJyZWN0Iiku YXR0cigiaGVpZ2h0IixzLnJhbj0KZ2VCYW5kKCkvZS5sZW5ndGgpLmF0dHIoIndpZHRoIixmdW5j dGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhvKGEoPQplLHQpKS1vKDApKSwxKX0p LFQ9M0RzLmNvcHkoKSxOPTNEby5jb3B5KCl9KSxDfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90 dG89Cm06MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRv bSgpKjFlNCkscz0zRGQzLnNjYWxlLj0Kb3JkaW5hbCgpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1 PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGUueX0s Zj0zRFswXSxsPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxjPTNEbnVsbCxoLHA9M0QhMSxkPTNE ITEsdj0KPTNEITEsbT0zRDYwLGc9M0RkMy5mb3JtYXQoIiwuMmYiKSx5PTNEMTIwMCxiLHcsRSxT LHg9M0RkMy5kaXNwYXRjaCgiY2hhcnRDPQpsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERi bENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCI9CiksVCxOO3JldHVy biBDLmRpc3BhdGNoPTNEeCxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQyks Qy54PTNEZj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6dX0s Qy55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8oYT0zRGUsQyk6YX0s Qy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89Cih0LnRvcD0z RHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9m IGUucmlnaHQhPQo9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBl b2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS49CmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0 eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsQyk6dH0sQz0KLndpZHRo PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLEMpOm59LEMuaGVp Z2h0PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsQyk6cn0s Qy54U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyhzPTNEZSxD KTpzfSxDLnlTY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPz0KKG89 M0RlLEMpOm99LEMueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhiPTNEZSxDKTpifSxDPQoueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh3PTNEZSxDKTp3fSxDLnhSYW5nZT0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KEU9M0RlLEMpOkV9LEMueVJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0K YXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsQyk6U30sQy5mb3JjZVk9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhmPTNEZSxDKTpmfSxDLnN0YWNrZWQ9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsQyk6cH09CixDLmNvbG9yPTNEZnVuY3Rp b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLnV0aWxzLmdldENvbG9yKHQpLEMp Oj0KbH0sQy5iYXJDb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhj PTNEZS51dGlscy5nZXRDb2xvcih0PQopLEMpOmN9LEMuZGlzYWJsZWQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5pZD0KPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLEMpOml9LEMuZGVsYXk9M0RmdW5jdGlvbihl KXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxDKTp5fSxDLnNob3dWYWx1ZXM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhkPTNEZSxDKTpkfSxDLnNob3dC YXJMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyh2PTNEZSxD KTp2fSxDLnZhbHVlRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGc9M0RlPQosQyk6Z30sQy52YWx1ZVBhZGRpbmc9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obT0zRGUsQyk6bX0sQ309CixlLm1vZGVscy5tdWx0aUJhckhvcml6b250YWxD aGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKD0KZnVuY3Rpb24o ZSl7dmFyIGQ9M0RkMy5zZWxlY3QodGhpcyksbT0zRHRoaXMsVD0zRCh1fHxwYXJzZUludChkLnN0 eWxlKCJ3aWR0PQpoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LGs9M0QoYXx8cGFyc2VJbnQoZC5z dHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW89Ci5ib3R0b207Qy51cGRhdGU9M0RmdW5jdGlv bigpe2QuY2FsbChDKX0sQy5jb250YWluZXI9M0R0aGlzLGIuZGlzYWJsZWQ9M0RlLj0KbWFwKGZ1 bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgTDt3PTNEe307Zm9yKEwg aW4gYiliW0xdaW5zPQp0YW5jZW9mIEFycmF5P3dbTF09M0RiW0xdLnNsaWNlKDApOndbTF09M0Ri W0xdfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcig9CmZ1bmN0aW9uKGUpe3JldHVybiBlLnZh bHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBBPTNEZC5zZWxlY3RBbGwoIi5udi1ub0RhdD0KYSIp LmRhdGEoW0VdKTtyZXR1cm4gQS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwi bnZkMyBudi1ub0RhdGEiPQopLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3Ii LCJtaWRkbGUiKSxBLmF0dHIoIngiLG8ubGVmdCtULzIpLmE9CnR0cigieSIsby50b3Aray8yKS50 ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQ31kLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLj0K cmVtb3ZlKCksZz0zRHQueFNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyIE89M0RkLnNlbGVjdEFs bCgiZy5udi13cmFwLm52LW11PQpsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5kYXRhKFtlXSksTT0z RE8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm49CnZkMyBudi13cmFwIG52LW11 bHRpQmFySG9yaXpvbnRhbENoYXJ0IikuYXBwZW5kKCJnIiksXz0zRE8uc2VsZWN0KCJnIik7TS5h cD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LXkgbnYtPQpheGlzIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di16ZXJvTGluZSIpLmFwcGVuZCgibGluZSIpLE0uYXBwZW5kKCJnIik9Ci5hdHRyKCJjbGFzcyIs Im52LWJhcnNXcmFwIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAi KSxNLj0KYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS53 aWR0aChULXgoKSksdC5iYXJDb2xvcigpPQomJmUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuY29s b3I9M0RkMy5yZ2IoIiNjY2MiKS5kYXJrZXIodCoxLjUpLnRvU3RyaW5nKCk9Cn0pLF8uc2VsZWN0 KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksby50b3AhPTNEaS5oZWlnaHQoKSYm KG8udG9wPQo9M0RpLmhlaWdodCgpLGs9M0QoYXx8cGFyc2VJbnQoZC5zdHlsZSgiaGVpZ2h0Iikp fHw0MDApLW8udG9wLW8uYm90dG9tKSxfLnM9CmVsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIo InRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3goKSsiLCIrIC1vLnRvcCsiKSIpKT0KO2lmKGwpe3Zh ciBEPTNEW3trZXk6Ikdyb3VwZWQiLGRpc2FibGVkOnQuc3RhY2tlZCgpfSx7a2V5OiJTdGFja2Vk IixkaXNhYmxlPQpkOiF0LnN0YWNrZWQoKX1dO3Mud2lkdGgoeCgpKS5jb2xvcihbIiM0NDQiLCIj NDQ0IiwiIzQ0NCJdKSxfLnNlbGVjdCgiLm52LWM9Cm9udHJvbHNXcmFwIikuZGF0dW0oRCkuYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLW8udG9wKyIpIikuY2FsbChzKT0KfU8uYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvLnRvcCsiKSIpLHQuZGlzYWJs ZWQoZS5tYXAoZnVuPQpjdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZH0pKS53aWR0aChUKS5oZWln aHQoaykuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXs9CnJldHVybiBlLmNvbG9yfHxmKGUsdCl9 KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKTt2YXIgUD0KPTNE Xy5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkfSkpPQo7UC5jYWxsKHQpO2lmKGgpe24uc2NhbGUoZykudGlja3Moay8yNCku dGlja1NpemUoLVQsMCksXy5zZWxlY3QoIi5udi14Lm52LWE9CnhpcyIpLmNhbGwobik7dmFyIEg9 M0RfLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLnNlbGVjdEFsbCgiZyIpO0guc2VsZWN0QWxsKD0K ImxpbmUsIHRleHQiKX1wJiYoci5zY2FsZSh5KS50aWNrcyhULzEwMCkudGlja1NpemUoLWssMCks Xy5zZWxlY3QoIi5udi15Lm52PQotYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgw LCIraysiKSIpLF8uc2VsZWN0KCIubnYteS5udi1heGlzIikuY2E9CmxsKHIpKSxfLnNlbGVjdCgi Lm52LXplcm9MaW5lIGxpbmUiKS5hdHRyKCJ4MSIseSgwKSkuYXR0cigieDIiLHkoMCkpLmF0dHIo Ij0KeTEiLDApLmF0dHIoInkyIiwtayksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0 aW9uKGUpe2I9M0RlLFMuc3RhdGVDPQpoYW5nZShiKSxDLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5v bigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsbil7aWYoIWUuZGlzYWI9CmxlZClyZXR1cm47RD0z REQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPTNEITAsZX0pLGUuZGlzYWJsZWQ9 M0QhMT0KO3N3aXRjaChlLmtleSl7Y2FzZSJHcm91cGVkIjp0LnN0YWNrZWQoITEpO2JyZWFrO2Nh c2UiU3RhY2tlZCI6dC5zdGFja2VkKCEwPQopfWIuc3RhY2tlZD0zRHQuc3RhY2tlZCgpLFMuc3Rh dGVDaGFuZ2UoYiksQy51cGRhdGUoKX0pLFMub24oInRvb2x0aXBTaG93Iiw9CmZ1bmN0aW9uKGUp e3YmJk4oZSxtLnBhcmVudE5vZGUpfSksUy5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKG4pe3R5 cGVvZiBuLj0KZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSx0 KXtlLmRpc2FibGVkPTNEbi5kaXNhYmxlZFt0PQpdfSksYi5kaXNhYmxlZD0zRG4uZGlzYWJsZWQp LHR5cGVvZiBuLnN0YWNrZWQhPTNEInVuZGVmaW5lZCImJih0LnN0YWNrZWQobi49CnN0YWNrZWQp LGIuc3RhY2tlZD0zRG4uc3RhY2tlZCksQy51cGRhdGUoKX0pfSksQ312YXIgdD0zRGUubW9kZWxz Lm11bHRpQmFySD0Kb3Jpem9udGFsKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMu YXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKS5oPQplaWdodCgzMCkscz0zRGUubW9kZWxzLmxl Z2VuZCgpLmhlaWdodCgzMCksbz0zRHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjUwLGw9CmVmdDo2 MH0sdT0zRG51bGwsYT0zRG51bGwsZj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksbD0zRCEwLGM9 M0QhMCxoPTNEITAscD0KPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEZnVuY3Rpb24oZSx0LG4scixp KXtyZXR1cm4iPGgzPiIrZSsiIC0gIit0KyI8L2gzPiIrPQoiPHA+IituKyI8L3A+In0sZyx5LGI9 M0R7c3RhY2tlZDpkfSx3PTNEbnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsUz0zRGQ9CjMu ZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5n ZVN0YXRlIikseD0zRGZ1bj0KY3Rpb24oKXtyZXR1cm4gbD8xODA6MH0sVD0zRDA7dC5zdGFja2Vk KGQpLG4ub3JpZW50KCJsZWZ0IikudGlja1BhZGRpbmcoNSkuPQpoaWdobGlnaHRaZXJvKCExKS5z aG93TWF4TWluKCExKS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksci5vcmllbnQ9 CigiYm90dG9tIikudGlja0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSkscy51cGRhdGVTdGF0ZSgh MSk7dmFyIE49M0RmdW5jdGlvbj0KKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0 fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEPQpuLnRpY2tGb3JtYXQoKSh0 LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBv aW49CnQsaS5wb2ludEluZGV4KSksbD0zRG0oaS5zZXJpZXMua2V5LGEsZixpLEMpO2UudG9vbHRp cC5zaG93KFtvLHVdLGwsaS52YWx1ZT0KPDA/ImUiOiJ3IixudWxsLHMpfTtyZXR1cm4gdC5kaXNw YXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvPQpuKGUpe2UucG9zPTNE W2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLHQuZGlz cGF0Y2g9Ci5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRp cEhpZGUoZSl9KSxTLm9uKCJ0b29sdGlwSD0KaWRlIixmdW5jdGlvbigpe3YmJmUudG9vbHRpcC5j bGVhbnVwKCl9KSxDLmRpc3BhdGNoPTNEUyxDLm11bHRpYmFyPTNEdCxDLmxlPQpnZW5kPTNEaSxD LnhBeGlzPTNEbixDLnlBeGlzPTNEcixkMy5yZWJpbmQoQyx0LCJ4IiwieSIsInhEb21haW4iLCJ5 RG9tYWluIiw9CiJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJjbGlwRWRnZSIs ImlkIiwiZGVsYXkiLCJzaG93VmFsdWVzIiwicz0KaG93QmFyTGFiZWxzIiwidmFsdWVGb3JtYXQi LCJzdGFja2VkIiwiYmFyQ29sb3IiKSxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvPQpuc0Z1bmMu YmluZChDKSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhv LnRvcD0zRHR5cGU9Cm9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm8udG9wLG8ucmlnaHQ9 M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj0KP2UucmlnaHQ6by5yaWdodCxvLmJvdHRv bT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvPQptLG8u bGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0Om8ubGVmdCxDKTpvfSxD LndpZHRoPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsQyk6 dX0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhhPTNE ZSxDKTphfSxDLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoo Zj0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihmKSxDKTpmfSxDLnNob3dDb250cm9scz0z RGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEMpOmx9LEMuc2hv d0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KGM9M0RlLEMp OmN9LEMuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9 Cj0zRGUsQyk6aH0sQy5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocD0zRGUsQyk6cH0sQz0KLnRvb2x0aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obT0zRGUsQyk6bX0sQy50b29sdGlwcz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEMpOnZ9LEMudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlv big9CmUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDLnN0YXRlPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oYj0zRGUsQyk6Yn0sQy5kZWZhdWx0 U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyh3PTNEZSxDKTp3 fSxDLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxD KTpFfSw9CkMudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KFQ9M0RlLEMpOlR9LEN9LD0KZS5tb2RlbHMubXVsdGlDaGFydD0zRGZ1bmN0aW9u KCl7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhPQpyIHU9M0RkMy5z ZWxlY3QodGhpcyksZj0zRHRoaXM7Qy51cGRhdGU9M0RmdW5jdGlvbigpe3UuY2FsbChDKX0sQy5j b250YWluZXI9Cj0zRHRoaXM7dmFyIGs9M0Qocnx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8 fDk2MCktdC5sZWZ0LXQucmlnaHQsTD0zRChpfD0KfHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIp KXx8NDAwKS10LnRvcC10LmJvdHRvbSxBPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7PQpyZXR1cm4h ZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEImxpbmUiJiZlLnlBeGlzPTNEPTNEMX0pLE89M0RlLmZp bHRlcihmdW5jdGk9Cm9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QibGluZSIm JmUueUF4aXM9M0Q9M0QyfSksTT0zRGUuZmlsdGVyKD0KZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlz YWJsZWQmJmUudHlwZT0zRD0zRCJiYXIiJiZlLnlBeGlzPTNEPTNEMX0pLF89M0RlLmZpPQpsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QiYmFyIiYmZS55QXhp cz0zRD0zRDJ9KSxEPQo9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYm ZS50eXBlPTNEPTNEImFyZWEiJiZlLnlBeGlzPTNEPQo9M0QxfSksUD0zRGUuZmlsdGVyKGZ1bmN0 aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9M0Q9M0QiYXJlYSImJmUueUE9Cnhpcz0z RD0zRDJ9KSxIPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUF4 aXM9M0Q9M0QxfSkubT0KYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlv bihlLHQpe3JldHVybnt4OmUueCx5OmUueX19KX0pLEI9Cj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiFlLmRpc2FibGVkJiZlLnlBeGlzPTNEPTNEMn0pLm1hcChmdW5jdGlvbihlKT0Ke3Jl dHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDplLngseTplLnl9fSl9KTth LmRvbWFpbihkMy5leHRlPQpudChkMy5tZXJnZShILmNvbmNhdChCKSksZnVuY3Rpb24oZSl7cmV0 dXJuIGUueH0pKS5yYW5nZShbMCxrXSk7dmFyIGo9M0R1LnM9CmVsZWN0QWxsKCJnLndyYXAubXVs dGlDaGFydCIpLmRhdGEoW2VdKSxGPTNEai5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYT0K c3MiLCJ3cmFwIG52ZDMgbXVsdGlDaGFydCIpLmFwcGVuZCgiZyIpO0YuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJ4IGF4aXMiPQopLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ5MSBheGlz IiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInkyIGF4aXM9CiIpLEYuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJsaW5lczFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxp bj0KZXMyV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXJzMVdyYXAiKSxGLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzPQoiLCJiYXJzMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwic3RhY2sxV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cig9CiJjbGFzcyIsInN0YWNr MldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kV3JhcCIpO3ZhciBJPTNE ai5zZT0KbGVjdCgiZyIpO3MmJih4LndpZHRoKGsvMiksSS5zZWxlY3QoIi5sZWdlbmRXcmFwIiku ZGF0dW0oZS5tYXAoZnVuY3Rpb24oZSl7PQpyZXR1cm4gZS5vcmlnaW5hbEtleT0zRGUub3JpZ2lu YWxLZXk9M0Q9M0Q9M0R1bmRlZmluZWQ/ZS5rZXk6ZS5vcmlnaW5hbEtleSw9CmUua2V5PTNEZS5v cmlnaW5hbEtleSsoZS55QXhpcz0zRD0zRDE/IiI6IiAocmlnaHQgYXhpcykiKSxlfSkpLmNhbGwo eCksdC50bz0KcCE9M0R4LmhlaWdodCgpJiYodC50b3A9M0R4LmhlaWdodCgpLEw9M0QoaXx8cGFy c2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0PQowMCktdC50b3AtdC5ib3R0b20pLEkuc2VsZWN0 KCIubGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2s9Ci8yKyIsIisg LXQudG9wKyIpIikpLGQud2lkdGgoaykuaGVpZ2h0KEwpLmludGVycG9sYXRlKCJtb25vdG9uZSIp LmNvbG9yKGUubT0KYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3Ro XX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVyPQpuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4 aXM9M0Q9M0QxJiZlW25dLnR5cGU9M0Q9M0QibGluZSJ9KSksdi53aWR0aChrKS5oZWk9CmdodChM KS5pbnRlcnBvbGF0ZSgibW9ub3RvbmUiKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biBlLmNvbG9yfHxuWz0KdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4h ZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDImPQomZVtuXS50eXBlPTNEPTNEImxpbmUi fSkpLG0ud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmU9CnR1 cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFl W25dLmRpc2FibGVkJiZlWz0Kbl0ueUF4aXM9M0Q9M0QxJiZlW25dLnR5cGU9M0Q9M0QiYmFyIn0p KSxnLndpZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChmPQp1bmN0aW9uKGUsdCl7cmV0dXJu IGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVs9 Cm5dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMiYmZVtuXS50eXBlPTNEPTNEImJhciJ9KSks eS53aWR0aChrKS5oZWlnaHQoTD0KKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBl LmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uPQoodCxuKXtyZXR1cm4hZVtu XS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRDEmJmVbbl0udHlwZT0zRD0zRCJhcmVhIn0pKSxi Lnc9CmlkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu Y29sb3J8fG5bdCVuLmxlbmd0aF19KT0KLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25d LmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMiYmZVtuXS50eXBlPTNEPQo9M0QiYXJlYSJ9KSks SS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFy IHE9M0Q9Ckkuc2VsZWN0KCIubGluZXMxV3JhcCIpLmRhdHVtKEEpLFI9M0RJLnNlbGVjdCgiLmJh cnMxV3JhcCIpLmRhdHVtKE0pLFU9M0RJLj0Kc2VsZWN0KCIuc3RhY2sxV3JhcCIpLmRhdHVtKEQp LHo9M0RJLnNlbGVjdCgiLmxpbmVzMldyYXAiKS5kYXR1bShPKSxXPTNESS5zPQplbGVjdCgiLmJh cnMyV3JhcCIpLmRhdHVtKF8pLFg9M0RJLnNlbGVjdCgiLnN0YWNrMldyYXAiKS5kYXR1bShQKSxW PTNERC5sZW49Cmd0aD9ELm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5yZWR1Y2Uo ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZj0KdW5jdGlvbihlLG4pe3JldHVybnt4OmUueCx5 OmUueSt0W25dLnl9fSl9KS5jb25jYXQoW3t4OjAseTowfV0pOltdLCQ9M0RQLmxlPQpuZ3RoP1Au bWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLnJlZHVjZShmdW5jdGlvbihlLHQpe3Jl dHVybiBlLm1hcCg9CmZ1bmN0aW9uKGUsbil7cmV0dXJue3g6ZS54LHk6ZS55K3Rbbl0ueX19KX0p LmNvbmNhdChbe3g6MCx5OjB9XSk6W107aC5kb21haT0KbihsfHxkMy5leHRlbnQoZDMubWVyZ2Uo SCkuY29uY2F0KFYpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9KSkucmFuZ2UoWzAsTF0pPQoscC5k b21haW4oY3x8ZDMuZXh0ZW50KGQzLm1lcmdlKEIpLmNvbmNhdCgkKSxmdW5jdGlvbihlKXtyZXR1 cm4gZS55fSkpLnJhbmc9CmUoWzAsTF0pLGQueURvbWFpbihoLmRvbWFpbigpKSxtLnlEb21haW4o aC5kb21haW4oKSkseS55RG9tYWluKGguZG9tYWluKCkpLD0Kdi55RG9tYWluKHAuZG9tYWluKCkp LGcueURvbWFpbihwLmRvbWFpbigpKSxiLnlEb21haW4ocC5kb21haW4oKSksRC5sZW5ndGgmPQom ZDMudHJhbnNpdGlvbihVKS5jYWxsKHkpLFAubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFgpLmNhbGwo YiksTS5sZW5ndGgmJmQzLnQ9CnJhbnNpdGlvbihSKS5jYWxsKG0pLF8ubGVuZ3RoJiZkMy50cmFu c2l0aW9uKFcpLmNhbGwoZyksQS5sZW5ndGgmJmQzLnRyYW5zaT0KdGlvbihxKS5jYWxsKGQpLE8u bGVuZ3RoJiZkMy50cmFuc2l0aW9uKHopLmNhbGwodiksdy50aWNrcyhrLzEwMCkudGlja1NpemUo PQotTCwwKSxJLnNlbGVjdCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgw LCIrTCsiKSIpLGQzLnRyYW5zaXQ9CmlvbihJLnNlbGVjdCgiLnguYXhpcyIpKS5jYWxsKHcpLEUu dGlja3MoTC8zNikudGlja1NpemUoLWssMCksZDMudHJhbnNpdGlvbj0KKEkuc2VsZWN0KCIueTEu YXhpcyIpKS5jYWxsKEUpLFMudGlja3MoTC8zNikudGlja1NpemUoLWssMCksZDMudHJhbnNpdGlv bihJPQouc2VsZWN0KCIueTIuYXhpcyIpKS5jYWxsKFMpLEkuc2VsZWN0KCIueTIuYXhpcyIpLnN0 eWxlKCJvcGFjaXR5IixCLmxlbmd0aD89CjE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIrYS5yYW5nZSgpWzFdKyIsMCkiKSx4LmRpc3BhdGNoLm9uKCJzdGF0ZT0KQ2hhbmdlIixmdW5j dGlvbihlKXtDLnVwZGF0ZSgpfSksVC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe28mJk4o ZSxmLnBhPQpyZW50Tm9kZSl9KX0pLEN9dmFyIHQ9M0R7dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1 MCxsZWZ0OjYwfSxuPTNEZDMuc2NhbGUuY2E9CnRlZ29yeTIwKCkucmFuZ2UoKSxyPTNEbnVsbCxp PTNEbnVsbCxzPTNEITAsbz0zRCEwLHU9M0RmdW5jdGlvbihlLHQsbixyLGkpez0KcmV0dXJuIjxo Mz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sYSxmLGwsYyxhPTNEZDMuc2Nh bGUubGluZWFyPQooKSxoPTNEZDMuc2NhbGUubGluZWFyKCkscD0zRGQzLnNjYWxlLmxpbmVhcigp LGQ9M0RlLm1vZGVscy5saW5lKCkueVNjYWxlKGg9Ciksdj0zRGUubW9kZWxzLmxpbmUoKS55U2Nh bGUocCksbT0zRGUubW9kZWxzLm11bHRpQmFyKCkuc3RhY2tlZCghMSkueVNjYWxlKD0KaCksZz0z RGUubW9kZWxzLm11bHRpQmFyKCkuc3RhY2tlZCghMSkueVNjYWxlKHApLHk9M0RlLm1vZGVscy5z dGFja2VkQXJlYSgpPQoueVNjYWxlKGgpLGI9M0RlLm1vZGVscy5zdGFja2VkQXJlYSgpLnlTY2Fs ZShwKSx3PTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKGE9Cikub3JpZW50KCJib3R0b20iKS50aWNr UGFkZGluZyg1KSxFPTNEZS5tb2RlbHMuYXhpcygpLnNjYWxlKGgpLm9yaWVudCgibGVmdD0KIiks Uz0zRGUubW9kZWxzLmF4aXMoKS5zY2FsZShwKS5vcmllbnQoInJpZ2h0IikseD0zRGUubW9kZWxz LmxlZ2VuZCgpLmhlaWdoPQp0KDMwKSxUPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9v bHRpcEhpZGUiKSxOPTNEZnVuY3Rpb24odCxuKXt2YXIgcj0KPTNEdC5wb3NbMF0rKG4ub2Zmc2V0 TGVmdHx8MCksaT0zRHQucG9zWzFdKyhuLm9mZnNldFRvcHx8MCkscz0zRHcudGlja0Zvcm1hPQp0 KCkoZC54KCkodC5wb2ludCx0LnBvaW50SW5kZXgpKSxvPTNEKHQuc2VyaWVzLnlBeGlzPTNEPTNE Mj9TOkUpLnRpY2tGb3JtYXQ9CigpKGQueSgpKHQucG9pbnQsdC5wb2ludEluZGV4KSksYT0zRHUo dC5zZXJpZXMua2V5LHMsbyx0LEMpO2UudG9vbHRpcC5zaG93KD0KW3IsaV0sYSx1bmRlZmluZWQs dW5kZWZpbmVkLG4ub2Zmc2V0UGFyZW50KX07cmV0dXJuIGQuZGlzcGF0Y2gub24oImVsZW1lbnRN PQpvdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQs ZS5wb3NbMV0rdC50b3BdLFQudG89Cm9sdGlwU2hvdyhlKX0pLGQuZGlzcGF0Y2gub24oImVsZW1l bnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aT0KcEhpZGUoZSl9KSx2LmRp c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNE W2UuPQpwb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksdi5k aXNwYXRjaC5vbigiZWxlbWVudE1vdXM9CmVvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29s dGlwSGlkZShlKX0pLG0uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZT0Kci50b29sdGlwIixm dW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9v bHRpcFNoPQpvdyhlKX0pLG0uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixm dW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGU9Cil9KSxnLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91 c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdKz0KdC5sZWZ0LGUu cG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZy5kaXNwYXRjaC5vbigiZWxlbWVudE1v dXNlb3V0LnRvPQpvbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLHkuZGlzcGF0 Y2gub24oInRvb2x0aXBTaG93IixmdW5jdGlvbig9CmUpe2lmKCFNYXRoLnJvdW5kKHkueSgpKGUu cG9pbnQpKjEwMCkpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkMy5zZWxlYz0KdEFsbCgi LnBvaW50LmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0sMCksITE7ZS5wb3M9M0RbZS5wb3Nb MF0rdC5sZWZ0LGUuPQpwb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSx5LmRpc3BhdGNo Lm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oZSl7VC49CnRvb2x0aXBIaWRlKGUpfSksYi5kaXNw YXRjaC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2lmKCFNYXRoLnJvdW5kKGIueT0KKCko ZS5wb2ludCkqMTAwKSlyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2QzLnNlbGVjdEFsbCgi LnBvaW50LmhvdmVyIikuPQpjbGFzc2VkKCJob3ZlciIsITEpfSwwKSwhMTtlLnBvcz0zRFtlLnBv c1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHQ9CmlwU2hvdyhlKX0pLGIuZGlzcGF0 Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksZC5kaT0K c3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNE W2UucG9zWzBdK3QubGVmdCxlPQoucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZC5k aXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGY9CnVuY3Rpb24oZSl7VC50b29s dGlwSGlkZShlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVu Yz0KdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9v bHRpcFNob3coZSl9KSx2LmRpc3BhPQp0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixm dW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksVC5vbigidG9vbHQ9CmlwSGlkZSIsZnVuY3Rp b24oKXtvJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQy5kaXNwYXRjaD0zRFQsQy5saW5lczE9M0Rk LEMubD0KaW5lczI9M0R2LEMuYmFyczE9M0RtLEMuYmFyczI9M0RnLEMuc3RhY2sxPTNEeSxDLnN0 YWNrMj0zRGIsQy54QXhpcz0zRHcsQy55PQpBeGlzMT0zREUsQy55QXhpczI9M0RTLEMub3B0aW9u cz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGk9Cm9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhnZXRYPTNEZSxkLngoZSksbS54KGUpLEMpOmdldFh9LEMueT0z RGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFk9M0RlLGQueShlKSxt LnkoZSksQyk6Z2V0WX0sQy55RG9tYWluMT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGw9M0RlLEMpOmx9LEMueURvbWFpbjI9M0RmdW5jdGlvbihlPQope3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhjPTNEZSxDKTpjfSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWU9Cm50cy5sZW5ndGg/KHQ9M0RlLEMpOnR9LEMud2lkdGg9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRD0KZSxDKTpyfSxDLmhlaWdodD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxDKTppfSxDLmNvbG9yPQo9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUseC5jb2xvcihlKSxDKTpufSxD LnNob3dMZWdlbmQ9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPTNE ZSxDKTpzfSxDLnRvb2x0aXBzPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obz0zRGUsQyk6b30sQy50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFy Z3VtZW50cy5sZW5ndGg/KHU9M0RlLEMpOnV9LEN9LGUubW9kZWxzLm9obGNCYXI9M0RmdW5jdGlv bigpe2Z1bmN0aW9uIHg9CihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPTNEbi10 LmxlZnQtdC5yaWdodCx4PTNEci10LnRvcC10LmJvdHRvbT0KLFQ9M0RkMy5zZWxlY3QodGhpcyk7 cy5kb21haW4oeXx8ZDMuZXh0ZW50KGVbMF0udmFsdWVzLm1hcCh1KS5jb25jYXQocCkpKSx2PQo/ cy5yYW5nZSh3fHxbZyouNS9lWzBdLnZhbHVlcy5sZW5ndGgsZyooZVswXS52YWx1ZXMubGVuZ3Ro LS41KS9lWzBdLnZhbHVlcy49Cmxlbmd0aF0pOnMucmFuZ2Uod3x8WzAsZ10pLG8uZG9tYWluKGJ8 fFtkMy5taW4oZVswXS52YWx1ZXMubWFwKGgpLmNvbmNhdChkKT0KKSxkMy5tYXgoZVswXS52YWx1 ZXMubWFwKGMpLmNvbmNhdChkKSldKS5yYW5nZShFfHxbeCwwXSkscy5kb21haW4oKVswXT0zRD0K PTNEPTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21haW4oW3MuZG9tYWluKClb MF0tcy5kb21haW4oKVswXSouPQowMSxzLmRvbWFpbigpWzFdK3MuZG9tYWluKClbMV0qLjAxXSk6 cy5kb21haW4oWy0xLDFdKSksby5kb21haW4oKVswXT0zRD0zRD0KPTNEby5kb21haW4oKVsxXSYm KG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0rby5kb21haW4oKVswXSouMDEs PQpvLmRvbWFpbigpWzFdLW8uZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFdKSk7dmFy IE49M0RkMy5zZWxlY3QodGhpcyk9Ci5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1vaGxjQmFyIiku ZGF0YShbZVswXS52YWx1ZXNdKSxDPTNETi5lbnRlcigpLmFwcGVuZD0KKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52LXdyYXAgbnYtb2hsY0JhciIpLGs9M0RDLmFwcGVuZCgiZGVmcyIpLEw9M0RD LmFwPQpwZW5kKCJnIiksQT0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LXRpY2tzIiksTi5hdHRyKCI9CnRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsi LCIrdC50b3ArIikiKSxULm9uKCJjbGljayIsZnVuY3Rpb24oZSx0KXtTLj0KY2hhcnRDbGljayh7 ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOml9KX0pLGsuYXBwZW5kKCJjbGlwUGF0aCIp LmF0dHIoPQoiaWQiLCJudi1jaGFydC1jbGlwLXBhdGgtIitpKS5hcHBlbmQoInJlY3QiKSxOLnNl bGVjdCgiI252LWNoYXJ0LWNsaXAtcGF0aC09CiIraSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsZyku YXR0cigiaGVpZ2h0Iix4KSxBLmF0dHIoImNsaXAtcGF0aCIsbT8idXJsKCNudj0KLWNoYXJ0LWNs aXAtcGF0aC0iK2krIikiOiIiKTt2YXIgTz0zRE4uc2VsZWN0KCIubnYtdGlja3MiKS5zZWxlY3RB bGwoIi5udi10PQppY2siKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7Ty5leGl0KCkucmVt b3ZlKCk7dmFyIE09M0RPLmVudGVyKCkuYXBwZW49CmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVu Y3Rpb24oZSx0LG4pe3JldHVybihmKGUsdCk+bChlLHQpPyJudi10aWNrIG5lZ2F0aT0KdmUiOiJu di10aWNrIHBvc2l0aXZlIikrIiBudi10aWNrLSIrbisiLSIrdH0pLmF0dHIoImQiLGZ1bmN0aW9u KHQsbil7dmFyIHI9Cj0zRGcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCwwbDAsIiso byhmKHQsbikpLW8oYyh0LG4pKSkrImwiKyAtci8yKz0KIiwwbCIrci8yKyIsMGwwLCIrKG8oaCh0 LG4pKS1vKGYodCxuKSkpKyJsMCwiKyhvKGwodCxuKSktbyhoKHQsbikpKSsibCIrci8yPQorIiww bCIrIC1yLzIrIiwweiJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRy YW5zbGF0ZSgiK3ModSg9CmUsdCkpKyIsIitvKGMoZSx0KSkrIikifSkub24oIm1vdXNlb3ZlciIs ZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhcz0Kc2VkKCJob3ZlciIsITApLFMuZWxl bWVudE1vdXNlb3Zlcih7cG9pbnQ6dCxzZXJpZXM6ZVswXSxwb3M6W3ModSh0LG4pKSxvKGEoPQp0 LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0pfSkub24oIm1vdXNl b3V0IixmdW5jdGlvbih0LG49Cil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSks Uy5lbGVtZW50TW91c2VvdXQoe3BvaW50OnQsc2VyaWVzOmVbMD0KXSxwb2ludEluZGV4Om4sc2Vy aWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7Uy5lbGVt PQplbnRDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkpLG8o YShlLHQpKV0sZTpkMy5ldmVudCw9CmlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0p Lm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSx0KXtTLmVsZW1lbnREYj0KbENsaWNrKHt2YWx1ZTph KGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50 LGlkPQo6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7Ty5hdHRyKCJjbGFzcyIsZnVu Y3Rpb24oZSx0LG4pe3JldHVybihmKGU9Cix0KT5sKGUsdCk/Im52LXRpY2sgbmVnYXRpdmUiOiJu di10aWNrIHBvc2l0aXZlIikrIiBudi10aWNrLSIrbisiLSIrdH0pLGQzLj0KdHJhbnNpdGlvbihP KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3ModShl LHQpKSsiPQosIitvKGMoZSx0KSkrIikifSkuYXR0cigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0z RGcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3I9CmV0dXJuIm0wLDBsMCwiKyhvKGYodCxuKSktbyhj KHQsbikpKSsibCIrIC1yLzIrIiwwbCIrci8yKyIsMGwwLCIrKG8oaCh0LG4pKT0KLW8oZih0LG4p KSkrImwwLCIrKG8obCh0LG4pKS1vKGgodCxuKSkpKyJsIityLzIrIiwwbCIrIC1yLzIrIiwweiJ9 KX0pLHh9dmFyPQogdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDk2MCxy PTNENTAwLGk9M0RNYXRoLmZsb29yKE1hdGgucmE9Cm5kb20oKSoxZTQpLHM9M0RkMy5zY2FsZS5s aW5lYXIoKSxvPTNEZDMuc2NhbGUubGluZWFyKCksdT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGUu eH0sYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5v cGVufSxsPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gZS5jbG9zZX0sYz0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLmhpZ2h9LGg9M0RmdW5jdGlvbihlKXtyZXQ9CnVybiBlLmxvd30scD0zRFtdLGQ9M0Rb XSx2PTNEITEsbT0zRCEwLGc9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLHksYix3LEUsUz0KPTNE ZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2si LCJlbGVtZW50TW91c2VvPQp2ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1cm4geC5kaXNwYXRj aD0zRFMseC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnU9Cm5jLmJpbmQoeCkseC54PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLHgpOnV9LHgueT0zRGZ1bj0K Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHgpOmF9LHgub3Blbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHgpOmZ9LHguY2xvc2U9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihsPTNEZSx4KTpsfSx4Lmhp Z2g9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUseCk6Y30seC5s bz0Kdz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSx4KTpofSx4 Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQ9Ci5yaWdodD0zRHR5cGVv ZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVv ZiBlLj0KYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lPQpkIj9lLmxlZnQ6dC5sZWZ0LHgpOnR9LHgud2lkdGg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGU9Cix4KTpufSx4Lmhl aWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSx4KTpyfSx4 LnhTY2FsZT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHgp OnN9LHgueVNjYWxlPTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0z RGUseCk6b30seC54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxlbmd0 aD8oeT0zRGUseCk6eX0seC55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGI9Cj0zRGUseCk6Yn0seC54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odz0zRGUseCk6d30seC55Uj0KYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhFPTNEZSx4KTpFfSx4LmZvcmNlWD0zRGZ1bmN0aW9uPQooZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHgpOnB9LHguZm9yY2VZPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3U9Cm1lbnRzLmxlbmd0aD8oZD0zRGUseCk6ZH0seC5wYWREYXRhPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kdj0zRGUseCk6dn0seC5jbGlwRWRnZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSx4KTptfSx4PQouY29s b3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUudXRpbHMuZ2V0 Q29sb3IodCkseCk6Z309Cix4LmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGk9M0RlLHgpOml9LHh9LGUubW9kZWxzLnBpZT0zRD0KZnVuY3Rpb24oKXtmdW5jdGlvbiBT KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcShlKXt2YXIgdD0zRChlPQou c3RhcnRBbmdsZStlLmVuZEFuZ2xlKSo5MC9NYXRoLlBJLTkwO3JldHVybiB0PjkwP3QtMTgwOnR9 ZnVuY3Rpb24gUihlKXtlLmU9Cm5kQW5nbGU9M0Rpc05hTihlLmVuZEFuZ2xlKT8wOmUuZW5kQW5n bGUsZS5zdGFydEFuZ2xlPTNEaXNOYU4oZS5zdGFydEFuZ2xlKT0KPzA6ZS5zdGFydEFuZ2xlLG18 fChlLmlubmVyUmFkaXVzPTNEMCk7dmFyIHQ9M0RkMy5pbnRlcnBvbGF0ZSh0aGlzLl9jdXJyZW50 PQosZSk7cmV0dXJuIHRoaXMuX2N1cnJlbnQ9M0R0KDApLGZ1bmN0aW9uKGUpe3JldHVybiBBKHQo ZSkpfX1mdW5jdGlvbiBVKGUpe2U9Ci5pbm5lclJhZGl1cz0zRDA7dmFyIHQ9M0RkMy5pbnRlcnBv bGF0ZSh7c3RhcnRBbmdsZTowLGVuZEFuZ2xlOjB9LGUpO3JldHVybj0KIGZ1bmN0aW9uKGUpe3Jl dHVybiBBKHQoZSkpfX12YXIgbz0zRG4tdC5sZWZ0LXQucmlnaHQsZj0zRHItdC50b3AtdC5ib3R0 b20sPQpTPTNETWF0aC5taW4obyxmKS8yLHg9M0RTLVMvNSxUPTNEZDMuc2VsZWN0KHRoaXMpLE49 M0RULnNlbGVjdEFsbCgiLm52LXdyYXA9Ci5udi1waWUiKS5kYXRhKGUpLEM9M0ROLmVudGVyKCku YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtcD0KaWUgbnYtY2hhcnQt Iit1KSxrPTNEQy5hcHBlbmQoImciKSxMPTNETi5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0 dHIoImNsPQphc3MiLCJudi1waWUiKSxrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcGll TGFiZWxzIiksTi5hdHRyKCJ0cmFuc2Zvcm09CiIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50 b3ArIikiKSxMLnNlbGVjdCgiLm52LXBpZSIpLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNsYXRl KCIrby8yKyIsIitmLzIrIikiKSxMLnNlbGVjdCgiLm52LXBpZUxhYmVscyIpLmF0dHIoInRyYW5z Zm9ybSIsInRyPQphbnNsYXRlKCIrby8yKyIsIitmLzIrIikiKSxULm9uKCJjbGljayIsZnVuY3Rp b24oZSx0KXtFLmNoYXJ0Q2xpY2soe2RhdGE6ZSw9CmluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9 KX0pO3ZhciBBPTNEZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKHgpO3kmJkEuc3Rhcj0KdEFuZ2xl KHkpLGImJkEuZW5kQW5nbGUoYiksbSYmQS5pbm5lclJhZGl1cyhTKncpO3ZhciBPPTNEZDMubGF5 b3V0LnBpZSgpLnNvPQpydChudWxsKS52YWx1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxl ZD8wOnMoZSl9KSxNPTNETi5zZWxlY3QoIi5udi1waWU9CiIpLnNlbGVjdEFsbCgiLm52LXNsaWNl IikuZGF0YShPKSxfPTNETi5zZWxlY3QoIi5udi1waWVMYWJlbHMiKS5zZWxlY3RBbGwoIj0KLm52 LWxhYmVsIikuZGF0YShPKTtNLmV4aXQoKS5yZW1vdmUoKSxfLmV4aXQoKS5yZW1vdmUoKTt2YXIg RD0zRE0uZW50ZXIoKS5hPQpwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2xpY2UiKS5vbigi bW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCg9CnRoaXMpLmNsYXNzZWQoImhvdmVy IiwhMCksRS5lbGVtZW50TW91c2VvdmVyKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdD0K YSkscG9pbnQ6ZS5kYXRhLHBvaW50SW5kZXg6dCxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50 LnBhZ2VZXSxpZDp1fSl9KS5vPQpuKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3Qo dGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxFLmVsZW1lbnRNb3U9CnNlb3V0KHtsYWJlbDppKGUu ZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YSxpbmRleDp0LGlkOnV9KX0pLm9uKCJj bD0KaWNrIixmdW5jdGlvbihlLHQpe0UuZWxlbWVudENsaWNrKHtsYWJlbDppKGUuZGF0YSksdmFs dWU6cyhlLmRhdGEpLHBvaW50OmUuPQpkYXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxk My5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayI9CixmdW5jdGlvbihlLHQp e0UuZWxlbWVudERibENsaWNrKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50 OmUuZD0KYXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGFn YXRpb24oKX0pO00uYXR0cigiZmlsbCIsPQpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCl9KS5h dHRyKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pO3Y9CmFyIFA9M0RELmFw cGVuZCgicGF0aCIpLmVhY2goZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudD0zRGV9KTtNLnNlbGVj dCgicGF0aD0KIikuYXR0cigiZCIsQSk7aWYobCl7dmFyIEg9M0RkMy5zdmcuYXJjKCkuaW5uZXJS YWRpdXMoMCk7YyYmKEg9M0RBKSxoJiYoSD0KPTNEZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKEEu b3V0ZXJSYWRpdXMoKSkpLF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkPQooIm52LWxhYmVs IiwhMCkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEZDMuc2VsZWN0KHRoaXMpO24uYXR0cigi dHJhbnNmb3I9Cm0iLGZ1bmN0aW9uKGUpe2lmKGcpe2Uub3V0ZXJSYWRpdXM9M0R4KzEwLGUuaW5u ZXJSYWRpdXM9M0R4KzE1O3ZhciB0PTNEKGUucz0KdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzIqKDE4 MC9NYXRoLlBJKTtyZXR1cm4oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0PQpoLlBJP3Qt PTNEOTA6dCs9M0Q5MCwidHJhbnNsYXRlKCIrSC5jZW50cm9pZChlKSsiKSByb3RhdGUoIit0KyIp In1yZXR1cm4gZS49Cm91dGVyUmFkaXVzPTNEUysxMCxlLmlubmVyUmFkaXVzPTNEUysxNSwidHJh bnNsYXRlKCIrSC5jZW50cm9pZChlKSsiKSJ9KSxuLj0KYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0 cm9rZSIsIiNmZmYiKS5zdHlsZSgiZmlsbCIsIiNmZmYiKS5hdHRyKCJyeCIsMykuYXR0PQpyKCJy eSIsMyksbi5hcHBlbmQoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLGc/KGUuc3RhcnRBbmds ZStlLmVuZEFuZ2xlKS89CjI8TWF0aC5QST8ic3RhcnQiOiJlbmQiOiJtaWRkbGUiKS5zdHlsZSgi ZmlsbCIsIiMwMDAiKX0pO3ZhciBCPTNEe30saj0zRDE0LD0KRj0zRDE0MCxJPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIE1hdGguZmxvb3IoZVswXS9GKSpGKyIsIitNYXRoLmZsb29yKGVbMV0vaikqPQpq fTtfLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7aWYoZyl7ZS5vdXRlclJhZGl1cz0zRHgr MTAsZS5pbm5lclJhZGl1cz0KPTNEeCsxNTt2YXIgdD0zRChlLnN0YXJ0QW5nbGUrZS5lbmRBbmds ZSkvMiooMTgwL01hdGguUEkpO3JldHVybihlLnN0YXJ0QW5nPQpsZStlLmVuZEFuZ2xlKS8yPE1h dGguUEk/dC09M0Q5MDp0Kz0zRDkwLCJ0cmFuc2xhdGUoIitILmNlbnRyb2lkKGUpKyIpIHJvdGE9 CnRlKCIrdCsiKSJ9ZS5vdXRlclJhZGl1cz0zRFMrMTAsZS5pbm5lclJhZGl1cz0zRFMrMTU7dmFy IG49M0RILmNlbnRyb2lkKGUpLD0Kcj0zREkobik7cmV0dXJuIEJbcl0mJihuWzFdLT0zRGopLEJb SShuKV09M0QhMCwidHJhbnNsYXRlKCIrbisiKSJ9KSxfLnNlbGVjPQp0KCIubnYtbGFiZWwgdGV4 dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZz8oZC5zdGFydEFuZ2xlK2QuZW5kQW5nbGUpLzI8TWF0 aC49ClBJPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0z RChlLmVuZEFuZ2xlLWUuc3RhcnRBbj0KZ2xlKS8oMipNYXRoLlBJKSxyPTNEe2tleTppKGUuZGF0 YSksdmFsdWU6cyhlLmRhdGEpLHBlcmNlbnQ6ZDMuZm9ybWF0KCIlIikoPQpuKX07cmV0dXJuIGUu dmFsdWUmJm4+dj9yW3BdOiIifSl9fSksU312YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTow LGxlZnQ9CjowfSxuPTNENTAwLHI9M0Q1MDAsaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fT0KLG89M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXNj cmlwdGlvbn0sdT0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLGE9Cj0zRGUudXRpbHMu ZGVmYXVsdENvbG9yKCksZj0zRGQzLmZvcm1hdCgiLC4yZiIpLGw9M0QhMCxjPTNEITAsaD0zRCEx LHA9M0Qiaz0KZXkiLHY9M0QuMDIsbT0zRCExLGc9M0QhMSx5PTNEITEsYj0zRCExLHc9M0QuNSxF PTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siPQosImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxD bGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXQ9CnVybiBTLmRp c3BhdGNoPTNERSxTLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoUyksUy5tYXJn aW49M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVv ZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0PQoudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5y aWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXA9CmVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2Yg ZS5sZWZ0IT0zRCJ1bj0KZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxTKTp0fSxTLndpZHRoPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoobj0zRGUsUyk6bn0sUy5oZWlnaHQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsUyk6cn0sUy49CnZh bHVlcz0zRGZ1bmN0aW9uKHQpe3JldHVybiBlLmxvZygicGllLnZhbHVlcygpIGlzIG5vIGxvbmdl ciBzdXBwb3J0ZWQuIiksUz0KfSxTLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaT0zRGUsUyk6aX0sUy55PTNEZnVuY3Rpb24oZSl7PQpyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8ocz0zRGQzLmZ1bmN0b3IoZSksUyk6c30sUy5kZXNjcmlwdGlvbj0zRGZ1bmN0aW9uKGU9 Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLFMpOm99LFMuc2hvd0xhYmVscz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcj0KZ3VtZW50cy5sZW5ndGg/KGw9M0RlLFMpOmx9LFMubGFiZWxT dW5iZWFtTGF5b3V0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8oZz0z RGUsUyk6Z30sUy5kb251dExhYmVsc091dHNpZGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnQ9CnMubGVuZ3RoPyhoPTNEZSxTKTpofSxTLnBpZUxhYmVsc091dHNpZGU9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhjPTNEZSxTKTpjfSxTLmxhYmVsVHlwZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxwPQo9M0RwfHwia2V5IixT KTpwfSxTLmRvbnV0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0Rl LFMpOm09Cn0sUy5kb251dFJhdGlvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHc9M0RlLFMpOnd9LFMuc3RhcnRBbj0KZ2xlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHk9M0RlLFMpOnl9LFMuZW5kQW5nbGU9M0RmdW5jdGlvPQpuKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxTKTpifSxTLmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW49CnRzLmxlbmd0aD8odT0zRGUsUyk6dX0sUy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZT0KLnV0aWxzLmdldENvbG9yKHQpLFMpOmF9LFMu dmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhmPTNE ZSxTKTpmfSxTLmxhYmVsVGhyZXNob2xkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KHY9M0Q9CmUsUyk6dn0sU30sZS5tb2RlbHMucGllQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1 bmN0aW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdD0KaW9uKGUpe3ZhciB1PTNEZDMuc2VsZWN0 KHRoaXMpLGE9M0R0aGlzLGY9M0QoaXx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8PQp8OTYw KS1yLmxlZnQtci5yaWdodCxkPTNEKHN8fHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAw KS1yLnRvcC1yLmJvdHQ9Cm9tO3YudXBkYXRlPTNEZnVuY3Rpb24oKXt1LmNhbGwodil9LHYuY29u dGFpbmVyPTNEdGhpcyxsLmRpc2FibGVkPTNEZS5tYXAoZj0KdW5jdGlvbihlKXtyZXR1cm4hIWUu ZGlzYWJsZWR9KTtpZighYyl7dmFyIG07Yz0zRHt9O2ZvcihtIGluIGwpbFttXWluc3RhbmNlPQpv ZiBBcnJheT9jW21dPTNEbFttXS5zbGljZSgwKTpjW21dPTNEbFttXX1pZighZXx8IWUubGVuZ3Ro KXt2YXIgZz0zRHUuc2VsZWM9CnRBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtoXSk7cmV0dXJuIGcu ZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIj0KbnZkMyBudi1ub0RhdGEiKS5h dHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksZy5hdHRyKCJ4 PQoiLHIubGVmdCtmLzIpLmF0dHIoInkiLHIudG9wK2QvMikudGV4dChmdW5jdGlvbihlKXtyZXR1 cm4gZX0pLHZ9dS5zZWxlY3RBbGw9CigiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciB5PTNEdS5z ZWxlY3RBbGwoImcubnYtd3JhcC5udi1waWVDaGFydCIpLmRhdGEoWz0KZV0pLGI9M0R5LmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtcGllQ2hhcnQiKS5h cHBlPQpuZCgiZyIpLHc9M0R5LnNlbGVjdCgiZyIpO2IuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1waWVXcmFwIiksYi5hcHBlbmQ9CigiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3Jh cCIpLG8mJihuLndpZHRoKGYpLmtleSh0LngoKSkseS5zZWxlY3QoIi5udj0KLWxlZ2VuZFdyYXAi KS5kYXR1bShlKS5jYWxsKG4pLHIudG9wIT0zRG4uaGVpZ2h0KCkmJihyLnRvcD0zRG4uaGVpZ2h0 KCksZD0KPTNEKHN8fHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1yLnRvcC1yLmJv dHRvbSkseS5zZWxlY3QoIi5udi1sZWdlPQpuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFu c2xhdGUoMCwiKyAtci50b3ArIikiKSkseS5hdHRyKCJ0cmFuc2Zvcm0iLCI9CnRyYW5zbGF0ZSgi K3IubGVmdCsiLCIrci50b3ArIikiKSx0LndpZHRoKGYpLmhlaWdodChkKTt2YXIgRT0zRHcuc2Vs ZWN0KCIubj0Kdi1waWVXcmFwIikuZGF0dW0oW2VdKTtkMy50cmFuc2l0aW9uKEUpLmNhbGwodCks bi5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiPQosZnVuY3Rpb24oZSl7bD0zRGUscC5zdGF0ZUNo YW5nZShsKSx2LnVwZGF0ZSgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXM9CmVvdXQudG9v bHRpcCIsZnVuY3Rpb24oZSl7cC50b29sdGlwSGlkZShlKX0pLHAub24oImNoYW5nZVN0YXRlIixm dW5jdGlvbih0KT0Ke3R5cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiYoZS5mb3JFYWNo KGZ1bmN0aW9uKGUsbil7ZS5kaXNhYmxlZD0zRHQuPQpkaXNhYmxlZFtuXX0pLGwuZGlzYWJsZWQ9 M0R0LmRpc2FibGVkKSx2LnVwZGF0ZSgpfSl9KSx2fXZhciB0PTNEZS5tb2RlbHMucGk9CmUoKSxu PTNEZS5tb2RlbHMubGVnZW5kKCkscj0zRHt0b3A6MzAscmlnaHQ6MjAsYm90dG9tOjIwLGxlZnQ6 MjB9LGk9M0RudWxsLD0Kcz0zRG51bGwsbz0zRCEwLHU9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigp LGE9M0QhMCxmPTNEZnVuY3Rpb24oZSx0LG4scil7cmV0PQp1cm4iPGgzPiIrZSsiPC9oMz4iKyI8 cD4iK3QrIjwvcD4ifSxsPTNEe30sYz0zRG51bGwsaD0zRCJObyBEYXRhIEF2YWlsYWJsZS49CiIs cD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2Ui LCJjaGFuZ2VTdGF0ZSIpLD0KZD0zRGZ1bmN0aW9uKG4scil7dmFyIGk9M0R0LmRlc2NyaXB0aW9u KCkobi5wb2ludCl8fHQueCgpKG4ucG9pbnQpLHM9M0RuLnBvPQpzWzBdKyhyJiZyLm9mZnNldExl ZnR8fDApLG89M0RuLnBvc1sxXSsociYmci5vZmZzZXRUb3B8fDApLHU9M0R0LnZhbHVlRm9ybWE9 CnQoKSh0LnkoKShuLnBvaW50KSksYT0zRGYoaSx1LG4sdik7ZS50b29sdGlwLnNob3coW3Msb10s YSxuLnZhbHVlPDA/Im4iOiJzIj0KLG51bGwscil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPQo9M0RbZS5wb3NbMF0rci5s ZWZ0LGUucG9zWzFdK3IudG9wXSxwLnRvb2x0aXBTaG93KGUpfSkscC5vbigidG9vbHRpcFNob3ci LGY9CnVuY3Rpb24oZSl7YSYmZChlKX0pLHAub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe2Em JmUudG9vbHRpcC5jbGVhbnVwKCl9KT0KLHYubGVnZW5kPTNEbix2LmRpc3BhdGNoPTNEcCx2LnBp ZT0zRHQsZDMucmViaW5kKHYsdCwidmFsdWVGb3JtYXQiLCJ2YWx1ZXMiPQosIngiLCJ5IiwiZGVz Y3JpcHRpb24iLCJpZCIsInNob3dMYWJlbHMiLCJkb251dExhYmVsc091dHNpZGUiLCJwaWVMYWJl bHNPdXQ9CnNpZGUiLCJsYWJlbFR5cGUiLCJkb251dCIsImRvbnV0UmF0aW8iLCJsYWJlbFRocmVz aG9sZCIpLHYub3B0aW9ucz0zRGUudXRpbD0Kcy5vcHRpb25zRnVuYy5iaW5kKHYpLHYubWFyZ2lu PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIudG9wPQo9M0R0eXBlb2Yg ZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6ci50b3Asci5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0 IT0zRCJ1bmQ9CmVmaW5lZCI/ZS5yaWdodDpyLnJpZ2h0LHIuYm90dG9tPTNEdHlwZW9mIGUuYm90 dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOj0Kci5ib3R0b20sci5sZWZ0PTNEdHlwZW9mIGUu bGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6ci5sZWZ0LHYpOnJ9LHYud2lkdGg9Cj0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSx2KTppfSx2LmhlaWdodD0zRGZ1 bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHYpOnN9LHYuY29sb3I9 M0RmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyh1PTNEZS51dGlscy5nZXRD b2xvcihyKSxuLmNvbG9yKHUpLHQuY29sb3IodSksdik6dX0sdi5zaG93TGVnZW5kPQo9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdik6b30sdi50b29sdGlwcz0z RGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHYpOmF9LHYudG9v bHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cj0KbiBhcmd1bWVudHMubGVuZ3RoPyhmPTNE ZSx2KTpmfSx2LnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0aD8o bD0zRGUsdik6bH0sdi5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYz0zRGU9Cix2KTpjfSx2Lm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhoPTNEZSx2KTpofSx2fSxlLm1vZD0KZWxzLnNjYXR0ZXI9M0RmdW5jdGlv bigpe2Z1bmN0aW9uIEkocSl7cmV0dXJuIHEuZWFjaChmdW5jdGlvbihJKXtmdW5jdGlvbiBRPQoo KXtpZighZylyZXR1cm4hMTt2YXIgZSxpPTNEZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24oZSx0KXty ZXR1cm4gZS52YWx1ZXMubWE9CnAoZnVuY3Rpb24oZSxuKXt2YXIgcj0zRGYoZSxuKSxpPTNEbChl LG4pO3JldHVybltvKHIpLHUoaSksdCxuLGVdfSkuZmlsdGVyKD0KZnVuY3Rpb24oZSx0KXtyZXR1 cm4gYihlWzRdLHQpfSl9KSk7aWYoRD0zRD0zRD0zRCEwKXtpZih4KXt2YXIgYT0zRFguc2VsZWN0 PQooImRlZnMiKS5zZWxlY3RBbGwoIi5udi1wb2ludC1jbGlwcyIpLmRhdGEoW3NdKS5lbnRlcigp O2EuYXBwZW5kKCJjbGlwUGF0aCI9CikuYXR0cigiY2xhc3MiLCJudi1wb2ludC1jbGlwcyIpLmF0 dHIoImlkIiwibnYtcG9pbnRzLWNsaXAtIitzKTt2YXIgYz0zRFgucz0KZWxlY3QoIiNudi1wb2lu dHMtY2xpcC0iK3MpLnNlbGVjdEFsbCgiY2lyY2xlIikuZGF0YShpKTtjLmVudGVyKCkuYXBwZW5k KCJjPQppcmNsZSIpLmF0dHIoInIiLFQpLGMuZXhpdCgpLnJlbW92ZSgpLGMuYXR0cigiY3giLGZ1 bmN0aW9uKGUpe3JldHVybiBlWzBdfSk9Ci5hdHRyKCJjeSIsZnVuY3Rpb24oZSl7cmV0dXJuIGVb MV19KSxYLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuYXR0cigiY2xpcD0KLXBhdGgiLCJ1cmwo I252LXBvaW50cy1jbGlwLSIrcysiKSIpfWkubGVuZ3RoJiYoaS5wdXNoKFtvLnJhbmdlKClbMF0t MjAsdS5yPQphbmdlKClbMF0tMjAsbnVsbCxudWxsXSksaS5wdXNoKFtvLnJhbmdlKClbMV0rMjAs dS5yYW5nZSgpWzFdKzIwLG51bGwsbnVsbF09CiksaS5wdXNoKFtvLnJhbmdlKClbMF0tMjAsdS5y YW5nZSgpWzBdKzIwLG51bGwsbnVsbF0pLGkucHVzaChbby5yYW5nZSgpWzFdKz0KMjAsdS5yYW5n ZSgpWzFdLTIwLG51bGwsbnVsbF0pKTt2YXIgaD0zRGQzLmdlb20ucG9seWdvbihbWy0xMCwtMTBd LFstMTAscisxPQowXSxbbisxMCxyKzEwXSxbbisxMCwtMTBdXSkscD0zRDFlLTY7aT0zRGkuc29y dChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLXQ9ClswXXx8ZVsxXS10WzFdfSk7Zm9yKHZhciBk PTNEMDtkPGkubGVuZ3RoLTE7KU1hdGguYWJzKGlbZF1bMF0taVtkKzFdWzBdKTxwJj0KJk1hdGgu YWJzKGlbZF1bMV0taVtkKzFdWzFdKTxwP2kuc3BsaWNlKGQrMSwxKTpkKys7dmFyIHY9M0RkMy5n ZW9tLnZvcm9ub2koPQppKS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57ZGF0YTpoLmNsaXAoZSks c2VyaWVzOmlbdF1bMl0scG9pbnQ6aVt0XVszXX19KSw9Cm09M0RYLnNlbGVjdCgiLm52LXBvaW50 LXBhdGhzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSh2KTttLmVudGVyKCkuYXBwZW5kKD0KInBh dGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtcGF0aC0iK3R9KSxtLmV4 aXQoKS5yZW1vdmUoKSxtPQouYXR0cigiZCIsZnVuY3Rpb24oZSl7cmV0dXJuIWV8fCFlLmRhdGF8 fGUuZGF0YS5sZW5ndGg9M0Q9M0Q9M0QwPyJNIDAgMCI6Ik09CiIrZS5kYXRhLmpvaW4oIkwiKSsi WiJ9KTt2YXIgeT0zRGZ1bmN0aW9uKGUsbil7aWYoRilyZXR1cm4gMDt2YXIgcj0zRElbZS5zZT0K cmllc107aWYodHlwZW9mIHI9M0Q9M0QidW5kZWZpbmVkIilyZXR1cm47dmFyIGk9M0RyLnZhbHVl c1tlLnBvaW50XTtuKHtwb2luPQp0Omksc2VyaWVzOnIscG9zOltvKGYoaSxlLnBvaW50KSkrdC5s ZWZ0LHUobChpLGUucG9pbnQpKSt0LnRvcF0sc2VyaWVzSW5kZXg9CjplLnNlcmllcyxwb2ludElu ZGV4OmUucG9pbnR9KX07bS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe3koZSxfLmVsZW1lbnRDbGlj az0KKX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe3koZSxfLmVsZW1lbnRNb3VzZW92ZXIp fSkub24oIm1vdXNlb3V0IixmdW5jPQp0aW9uKGUsdCl7eShlLF8uZWxlbWVudE1vdXNlb3V0KX0p fWVsc2UgWC5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi49Cm52LWdyb3VwIikuc2Vs ZWN0QWxsKCIubnYtcG9pbnQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsbil7aWYoRnx8IUlbZS5z ZXJpZT0Kc10pcmV0dXJuIDA7dmFyIHI9M0RJW2Uuc2VyaWVzXSxpPTNEci52YWx1ZXNbbl07Xy5l bGVtZW50Q2xpY2soe3BvaW50Omksc2VyPQppZXM6cixwb3M6W28oZihpLG4pKSt0LmxlZnQsdShs KGksbikpK3QudG9wXSxzZXJpZXNJbmRleDplLnNlcmllcyxwb2ludEluZGU9Cng6bn0pfSkub24o Im1vdXNlb3ZlciIsZnVuY3Rpb24oZSxuKXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7dmFy IHI9M0RJWz0KZS5zZXJpZXNdLGk9M0RyLnZhbHVlc1tuXTtfLmVsZW1lbnRNb3VzZW92ZXIoe3Bv aW50Omksc2VyaWVzOnIscG9zOltvKGYoaSxuPQopKSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxz ZXJpZXNJbmRleDplLnNlcmllcyxwb2ludEluZGV4Om59KX0pLm9uKCJtb3VzZW89CnV0IixmdW5j dGlvbihlLHQpe2lmKEZ8fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgbj0zRElbZS5zZXJpZXNd LHI9M0RuLnZhbD0KdWVzW3RdO18uZWxlbWVudE1vdXNlb3V0KHtwb2ludDpyLHNlcmllczpuLHNl cmllc0luZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6PQp0fSl9KTtGPTNEITF9dmFyIHE9M0RuLXQu bGVmdC10LnJpZ2h0LFI9M0RyLXQudG9wLXQuYm90dG9tLFU9M0RkMy5zZWxlY3QodGg9CmlzKTtJ LmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2Vy aWVzPTNEdH0pfSk7dj0KYXIgVz0zRE4mJkMmJkE/W106ZDMubWVyZ2UoSS5tYXAoZnVuY3Rpb24o ZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlPQosdCl7cmV0dXJue3g6ZihlLHQpLHk6 bChlLHQpLHNpemU6YyhlLHQpfX0pfSkpO28uZG9tYWluKE58fGQzLmV4dGVudChXLm1hcCg9CmZ1 bmN0aW9uKGUpe3JldHVybiBlLnh9KS5jb25jYXQoZCkpKSx3JiZJWzBdP28ucmFuZ2Uoa3x8Wyhx KkUrcSkvKDIqSVswXS52YT0KbHVlcy5sZW5ndGgpLHEtcSooMStFKS8oMipJWzBdLnZhbHVlcy5s ZW5ndGgpXSk6by5yYW5nZShrfHxbMCxxXSksdS5kb21haW4oPQpDfHxkMy5leHRlbnQoVy5tYXAo ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdCh2KSkpLnJhbmdlKEx8fFtSLDBdKSxhLmQ9 Cm9tYWluKEF8fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfSkuY29u Y2F0KG0pKSkucmFuZ2UoT3x8Wz0KMTYsMjU2XSk7aWYoby5kb21haW4oKVswXT0zRD0zRD0zRG8u ZG9tYWluKClbMV18fHUuZG9tYWluKClbMF09M0Q9M0Q9M0R1LmRvPQptYWluKClbMV0pTT0zRCEw O28uZG9tYWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigpWzFdJiYoby5kb21haW4oKVswXT9vLmRv bWE9CmluKFtvLmRvbWFpbigpWzBdLW8uZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClbMV0rby5k b21haW4oKVsxXSouMDFdKTpvLmRvbT0KYWluKFstMSwxXSkpLHUuZG9tYWluKClbMF09M0Q9M0Q9 M0R1LmRvbWFpbigpWzFdJiYodS5kb21haW4oKVswXT91LmRvbWFpbihbPQp1LmRvbWFpbigpWzBd LXUuZG9tYWluKClbMF0qLjAxLHUuZG9tYWluKClbMV0rdS5kb21haW4oKVsxXSouMDFdKTp1LmRv bWFpbig9ClstMSwxXSkpLGlzTmFOKG8uZG9tYWluKClbMF0pJiZvLmRvbWFpbihbLTEsMV0pLGlz TmFOKHUuZG9tYWluKClbMF0pJiZ1LmRvbT0KYWluKFstMSwxXSksUD0zRFB8fG8sSD0zREh8fHUs Qj0zREJ8fGE7dmFyIFg9M0RVLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXNjPQphdHRlciIpLmRh dGEoW0ldKSxWPTNEWC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13 cmFwIG52LXM9CmNhdHRlciBudi1jaGFydC0iK3MrKE0/IiBudi1zaW5nbGUtcG9pbnQiOiIiKSks JD0zRFYuYXBwZW5kKCJkZWZzIiksSj0zRFYuYT0KcHBlbmQoImciKSxLPTNEWC5zZWxlY3QoImci KTtKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksSi5hcHBlPQpuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYtcG9pbnQtcGF0aHMiKSxYLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgiK3QubGU9CmZ0KyIsIit0LnRvcCsiKSIpLCQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIo ImlkIiwibnYtZWRnZS1jbGlwLSIrcykuYXBwZW5kKD0KInJlY3QiKSxYLnNlbGVjdCgiI252LWVk Z2UtY2xpcC0iK3MrIiByZWN0IikuYXR0cigid2lkdGgiLHEpLmF0dHIoImhlaWdodCIsPQpSPjA/ UjowKSxLLmF0dHIoImNsaXAtcGF0aCIsUz8idXJsKCNudi1lZGdlLWNsaXAtIitzKyIpIjoiIiks Rj0zRCEwO3ZhciBHPQo9M0RYLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdy b3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX09CixmdW5jdGlvbihlKXtyZXR1cm4gZS5r ZXl9KTtHLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZT0KLTYp LnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLEcuZXhpdCgpLnJlbW92ZSgpLEcuYXR0cigiY2xh c3MiLGZ1bmN0aW9uKGUsPQp0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNz ZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Y9CmVyfSksRy5zdHlsZSgiZmlsbCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZT0K LHQpe3JldHVybiBpKGUsdCl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxs LW9wYWNpdHkiLC41KTtpZihwPQope3ZhciBZPTNERy5zZWxlY3RBbGwoImNpcmNsZS5udi1wb2lu dCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSw9CnkpO1kuZW50ZXIoKS5hcHBl bmQoImNpcmNsZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSku cz0KdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuYXR0cigiY3gi LGZ1bmN0aW9uKHQsbil7cmV0dXJuPQogZS51dGlscy5OYU50b1plcm8oUChmKHQsbikpKX0pLmF0 dHIoImN5IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnQ9Cm9aZXJvKEgobCh0LG4p KSl9KS5hdHRyKCJyIixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnNxcnQoYShjKGUsdCkpL01h dGguUD0KSSl9KSxZLmV4aXQoKS5yZW1vdmUoKSxHLmV4aXQoKS5zZWxlY3RBbGwoInBhdGgubnYt cG9pbnQiKS5hdHRyKCJjeCIsZnVuY3RpPQpvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVy byhvKGYodCxuKSkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXI9Cm4gZS51dGlscy5O YU50b1plcm8odShsKHQsbikpKX0pLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbihlLHQpe2QzLnNl bGVjdCh0aD0KaXMpLmNsYXNzZWQoIm52LXBvaW50IiwhMCkuY2xhc3NlZCgibnYtcG9pbnQtIit0 LCEwKS5jbGFzc2VkKCJob3ZlciIsITEpfSksPQpZLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3Jl dHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKGYodCxuKSkpfSkuYXR0cigiY3kiLGY9CnVuY3Rpb24o dCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odShsKHQsbikpKX0pLmF0dHIoInIiLGZ1bmN0 aW9uKGUsdCl7cj0KZXR1cm4gTWF0aC5zcXJ0KGEoYyhlLHQpKS9NYXRoLlBJKX0pfWVsc2V7dmFy IFk9M0RHLnNlbGVjdEFsbCgicGF0aC5udi1wb2luPQp0IikuZGF0YShmdW5jdGlvbihlKXtyZXR1 cm4gZS52YWx1ZXN9KTtZLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGw9CiIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuY29sbz0Kcn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4i dHJhbnNsYXRlKCIrUChmKGUsdCkpKyIsIitIKGwoZSx0PQopKSsiKSJ9KS5hdHRyKCJkIixkMy5z dmcuc3ltYm9sKCkudHlwZShoKS5zaXplKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoYyhlLHQ9Cikp fSkpLFkuZXhpdCgpLnJlbW92ZSgpLEcuZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1wb2ludCIp LmF0dHIoInRyYW5zZm9ybT0KIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGYo ZSx0KSkrIiwiK3UobChlLHQpKSsiKSJ9KS5yZW1vdmUoKSxZPQouZWFjaChmdW5jdGlvbihlLHQp e2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1wb2ludCIsITApLmNsYXNzZWQoIm52LXBvaW49 CnQtIit0LCEwKS5jbGFzc2VkKCJob3ZlciIsITEpfSksWS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUsdCl7cmV0dXJuInRyYT0KbnNsYXRlKCIrbyhmKGUsdCkpKyIsIit1KGwoZSx0KSkrIiki fSkuYXR0cigiZCIsZDMuc3ZnLnN5bWJvbCgpLnR5cGUoaCkuc2l6PQplKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGEoYyhlLHQpKX0pKX1jbGVhclRpbWVvdXQoaiksaj0zRHNldFRpbWVvdXQoUSwzMDAp LFA9Cj0zRG8uY29weSgpLEg9M0R1LmNvcHkoKSxCPTNEYS5jb3B5KCl9KSxJfXZhciB0PTNEe3Rv cDowLHJpZ2h0OjAsYm90dG9tOjAsbD0KZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNEZS51dGls cy5kZWZhdWx0Q29sb3IoKSxzPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvPQptKCkqMWU1KSxvPTNE ZDMuc2NhbGUubGluZWFyKCksdT0zRGQzLnNjYWxlLmxpbmVhcigpLGE9M0RkMy5zY2FsZS5saW5l YXIoKSw9CmY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxsPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGUueX0sYz0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGUuc2l6ZXx8MX0saD0zRGZ1bmN0aW9uKGUp e3JldHVybiBlLnNoYXBlfHwiY2lyY2xlIn0scD0zRCEwLGQ9M0RbXSx2PTNEPQpbXSxtPTNEW10s Zz0zRCEwLHk9M0RudWxsLGI9M0RmdW5jdGlvbihlKXtyZXR1cm4hZS5ub3RBY3RpdmV9LHc9M0Qh MSxFPTNELjE9CixTPTNEITEseD0zRCEwLFQ9M0RmdW5jdGlvbigpe3JldHVybiAyNX0sTj0zRG51 bGwsQz0zRG51bGwsaz0zRG51bGwsTD0zRG51bD0KbCxBPTNEbnVsbCxPPTNEbnVsbCxNPTNEITEs Xz0zRGQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLCJlbGVtZW50TW91c2VvdmVyPQoiLCJlbGVt ZW50TW91c2VvdXQiKSxEPTNEITAsUCxILEIsaixGPTNEITE7cmV0dXJuIEkuY2xlYXJIaWdobGln aHRzPTNEZnVuY3Q9Cmlvbigpe2QzLnNlbGVjdEFsbCgiLm52LWNoYXJ0LSIrcysiIC5udi1wb2lu dC5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LD0KSS5oaWdobGlnaHRQb2ludD0zRGZ1bmN0 aW9uKGUsdCxuKXtkMy5zZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYtc2VyaWVzLSIrPQplKyIg Lm52LXBvaW50LSIrdCkuY2xhc3NlZCgiaG92ZXIiLG4pfSxfLm9uKCJlbGVtZW50TW91c2VvdmVy LnBvaW50IixmdW5jdGk9Cm9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpZXNJbmRleCxl LnBvaW50SW5kZXgsITApfSksXy5vbigiZWxlbWVudE1vdT0Kc2VvdXQucG9pbnQiLGZ1bmN0aW9u KGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpZXNJbmRleCxlLnBvaW50SW5kZXgsITEpPQp9 KSxJLmRpc3BhdGNoPTNEXyxJLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoSSks SS54PTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGQzLmZ1bmN0 b3IoZSksSSk6Zn0sSS55PTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8o bD0zRGQzLmZ1bmN0b3IoZSksSSk6bH0sSS5zaXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt PQplbnRzLmxlbmd0aD8oYz0zRGQzLmZ1bmN0b3IoZSksSSk6Y30sSS5tYXJnaW49M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0Qi dW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mID0KZS5yaWdodCE9M0QidW5k ZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVu ZGVmPQppbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1 bmRlZmluZWQiP2UubGVmdDp0LmxlZnQ9CixJKTp0fSxJLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLEkpOm59LEkuaGVpZ2h0PQo9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsSSk6cn0sSS54U2NhbGU9M0RmdW5jdGlv bihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxJKTpvfSxJLnlTY2FsZT0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KHU9M0RlLEkpOnV9LEkuelNjYWxl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlPQosSSk6YX0sSS54 RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0RlLEkpOk59 LEkueURvbWE9CmluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0Rl LEkpOkN9LEkuc2l6ZURvbWFpbj0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KEE9M0RlLEkpOkF9LEkueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRz Lmxlbmd0aD8oaz0zRGUsSSk6a30sSS55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD89CihMPTNEZSxJKTpMfSxJLnNpemVSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhPPTNEZSxJKTpPfT0KLEkuZm9yY2VYPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEkpOmR9LEkuZm9yY2VZPTNEZnVuPQpjdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsSSk6dn0sSS5mb3JjZVNpemU9M0Rm dW5jdGlvbihlKXtyZXQ9CnVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxJKTptfSxJLmludGVy YWN0aXZlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oZz0zRGUsSSk6 Z30sSS5wb2ludEtleT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PQo9 M0RlLEkpOnl9LEkucG9pbnRBY3RpdmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYj0zRGUsSSk6Yn09CixJLnBhZERhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8odz0zRGUsSSk6d30sSS5wYWREYXRhT3V0ZT0Kcj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxJKTpFfSxJLmNsaXBFZGdlPTNEZnVuY3Rpb24o PQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsSSk6U30sSS5jbGlwVm9yb25vaT0z RGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEkpOnh9LEkudXNl Vm9yb25vaT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KEQ9M0RlLEQ9 M0Q9M0Q9M0QhMSYmKHg9M0QhMSksSSk6RH0sSS5jbGlwUmFkaXVzPTNEZnVuY3Rpb24oZSl7cmV0 dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsSSk6VH0sSS5jb2xvcj0zRGZ1bmN0aW9uKHQp e3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGk9M0RlLnV0aWxzLmdldENvbG9yKHQpLEkpOml9 LEkuc2hhcGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhoPTNEZSxJ KTpofSxJLm9ubHlDaXJjbGVzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHA9M0RlPQosSSk6cH0sSS5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhzPTNEZSxJKTpzfSxJLnNpbmdsZVBvaW49CnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oTT0zRGUsSSk6TX0sSX0sZS5tb2RlbHMuc2NhdHRlckNoYT0KcnQ9M0RmdW5j dGlvbigpe2Z1bmN0aW9uIEYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBK KCl7aWYoVClyPQpldHVybiBXLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50 ZXItZXZlbnRzIiwiYWxsIiksITE7Vy5zZWxlY3Q9CigiLm52LXBvaW50LXBhdGhzIikuc3R5bGUo InBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBpPTNEZDMubW91c2UodGhpcyk7aD0KLmRpc3Rv cnRpb24oeCkuZm9jdXMoaVswXSkscC5kaXN0b3J0aW9uKHgpLmZvY3VzKGlbMV0pLFcuc2VsZWN0 KCIubnYtc2NhdHRlPQpyV3JhcCIpLmNhbGwodCksYiYmVy5zZWxlY3QoIi5udi14Lm52LWF4aXMi KS5jYWxsKG4pLHcmJlcuc2VsZWN0KCIubnYteS5udi09CmF4aXMiKS5jYWxsKHIpLFcuc2VsZWN0 KCIubnYtZGlzdHJpYnV0aW9uWCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldD0KdXJu IWUuZGlzYWJsZWR9KSkuY2FsbChvKSxXLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5kYXR1 bShlLmZpbHRlcihmdW5jPQp0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodSl9dmFy IEM9M0RkMy5zZWxlY3QodGhpcyksaz0zRHRoaXMsTD0zRCg9CmZ8fHBhcnNlSW50KEMuc3R5bGUo IndpZHRoIikpfHw5NjApLWEubGVmdC1hLnJpZ2h0LEQ9M0QobHx8cGFyc2VJbnQoQy5zdHlsZT0K KCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b207Ri51cGRhdGU9M0RmdW5jdGlvbigpe0Mu Y2FsbChGKX0sRi5jb250YWluPQplcj0zRHRoaXMsQS5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9u KGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFPKXt2YXIgSTs9Ck89M0R7fTtmb3IoSSBpbiBB KUFbSV1pbnN0YW5jZW9mIEFycmF5P09bSV09M0RBW0ldLnNsaWNlKDApOk9bSV09M0RBW0ldfWlm KD0KIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5s ZW5ndGh9KS5sZW5ndGgpe3ZhciBxPQo9M0RDLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEo W19dKTtyZXR1cm4gcS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHI9CigiY2xhc3MiLCJudmQz IG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRk bGUiKT0KLHEuYXR0cigieCIsYS5sZWZ0K0wvMikuYXR0cigieSIsYS50b3ArRC8yKS50ZXh0KGZ1 bmN0aW9uKGUpe3JldHVybiBlfSksRn1DPQouc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3Zl KCksUD0zRFB8fGgsSD0zREh8fHA7dmFyIFI9M0RDLnNlbGVjdEFsbCgiZy49Cm52LXdyYXAubnYt c2NhdHRlckNoYXJ0IikuZGF0YShbZV0pLFU9M0RSLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLD0KIm52ZDMgbnYtd3JhcCBudi1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkp LHo9M0RVLmFwcGVuZCgiZyIpLFc9M0RSLnNlPQpsZWN0KCJnIik7ei5hcHBlbmQoInJlY3QiKS5h dHRyKCJjbGFzcyIsIm52ZDMgbnYtYmFja2dyb3VuZCIpLHouYXBwZW5kKCJnIik9Ci5hdHRyKCJj bGFzcyIsIm52LXggbnYtYXhpcyIpLHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52 LWF4aXMiKSx6Lj0KYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpLHou YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kPQppc3RXcmFwIiksei5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSx6LmFwcGVuZCgiZyIpLmF0dHIoImM9Cmxhc3Mi LCJudi1jb250cm9sc1dyYXAiKTtpZih5KXt2YXIgWD0zRFM/TC8yOkw7aS53aWR0aChYKSxSLnNl bGVjdCgiLm52LWxlZz0KZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksYS50b3AhPTNEaS5oZWln aHQoKSYmKGEudG9wPTNEaS5oZWlnaHQoKSxEPTNEKGx8PQp8cGFyc2VJbnQoQy5zdHlsZSgiaGVp Z2h0IikpfHw0MDApLWEudG9wLWEuYm90dG9tKSxSLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXA9CiIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhMLVgpKyIsIisgLWEudG9wKyIpIil9UyYm KHMud2lkdGgoMTgwKS5jbz0KbG9yKFsiIzQ0NCJdKSxXLnNlbGVjdCgiLm52LWNvbnRyb2xzV3Jh cCIpLmRhdHVtKGopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zPQpsYXRlKDAsIisgLWEudG9wKyIp IikuY2FsbChzKSksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmxlZnQrIiwiK2E9 Ci50b3ArIikiKSxFJiZXLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgiK0wrIiwwKT0KIiksdC53aWR0aChMKS5oZWlnaHQoRCkuY29sb3IoZS5tYXAo ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuPQpmaWx0ZXIoZnVuY3Rpb24o dCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxkIT0zRD0zRDAmJnQueERvbWFpbihudWxsKSx2 IT0KPTNEPTNEMCYmdC55RG9tYWluKG51bGwpLFIuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5k YXR1bShlLmZpbHRlcihmdW5jdGlvPQpuKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodCk7 aWYoZCE9M0Q9M0QwKXt2YXIgVj0zRGguZG9tYWluKClbMV0taC5kb209CmFpbigpWzBdO3QueERv bWFpbihbaC5kb21haW4oKVswXS1kKlYsaC5kb21haW4oKVsxXStkKlZdKX1pZih2IT0zRD0zRDAp e3Zhcj0KICQ9M0RwLmRvbWFpbigpWzFdLXAuZG9tYWluKClbMF07dC55RG9tYWluKFtwLmRvbWFp bigpWzBdLXYqJCxwLmRvbWFpbigpWzFdPQordiokXSl9KHYhPTNEPTNEMHx8ZCE9M0Q9M0QwKSYm Ui5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGY9CnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxiJiYobi5zY2FsZShoKS50aWNrcyhuLnRpY2tz KCkmJm4udD0KaWNrcygpLmxlbmd0aD9uLnRpY2tzKCk6TC8xMDApLnRpY2tTaXplKC1ELDApLFcu c2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0PQpyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwi K3AucmFuZ2UoKVswXSsiKSIpLmNhbGwobikpLHcmJihyLnNjYWxlKHApLnRpY2s9CnMoci50aWNr cygpJiZyLnRpY2tzKCkubGVuZ3RoP3IudGlja3MoKTpELzM2KS50aWNrU2l6ZSgtTCwwKSxXLnNl bGVjdCgiLm52LT0KeS5udi1heGlzIikuY2FsbChyKSksbSYmKG8uZ2V0RGF0YSh0LngoKSkuc2Nh bGUoaCkud2lkdGgoTCkuY29sb3IoZS5tYXAoZnVuPQpjdGlvbihlLHQpe3JldHVybiBlLmNvbG9y fHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmw9CmVkfSkp LHouc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRp c3RyaWJ1dGlvblgiKT0KLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdPQorIikiKS5kYXR1bShlLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pKSxnJiYodS5nZXREYXQ9CmEo dC55KCkpLnNjYWxlKHApLndpZHRoKEQpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGUuY29sb3J8fGMoZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlz YWJsZWR9KSksei5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwPQpwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudi1kaXN0cmlidXRpb25ZIiksVy5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25ZIikuYXQ9 CnRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRT9MOi11LnNpemUoKSkrIiwwKSIpLmRhdHVt KGUuZmlsdGVyKGZ1bmN0aW9uKD0KZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMu ZmlzaGV5ZSYmKFcuc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLmF0PQp0cigid2lkdGgiLEwpLmF0 dHIoImhlaWdodCIsRCksVy5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikub24oIm1vdXNlbW92ZSIs Sik9CixXLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7VD0z RCFUfSksdC5kaXNwYXRjaC5vbigiZT0KbGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuY3Rp b24oKXtUPTNEIVR9KSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siPQosZnVuY3Rpb24oZSxp KXtlLmRpc2FibGVkPTNEIWUuZGlzYWJsZWQseD0zRGUuZGlzYWJsZWQ/MDoyLjUsVy5zZWxlY3Qo Ii5udi09CmJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/Im5v bmUiOiJhbGwiKSxXLnNlbGVjdCgiLm52LT0KcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1l dmVudHMiLGUuZGlzYWJsZWQ/ImFsbCI6Im5vbmUiKSxlLmRpc2FibGVkPyhoPQouZGlzdG9ydGlv bih4KS5mb2N1cygwKSxwLmRpc3RvcnRpb24oeCkuZm9jdXMoMCksVy5zZWxlY3QoIi5udi1zY2F0 dGVyV3JhcCI9CikuY2FsbCh0KSxXLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksVy5z ZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKD0KcikpOlQ9M0QhMSxGLnVwZGF0ZSgpfSksaS5k aXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0EuZGlzYWJsZWQ9Cj0zRGUuZGlz YWJsZWQsTS5zdGF0ZUNoYW5nZShBKSxGLnVwZGF0ZSgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlb3Zlcj0KLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIr dC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzPQpJbmRleCsiIC5udi1kaXN0eC0iK2UucG9p bnRJbmRleCkuYXR0cigieTEiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUucG9zWzFdLUQ9Cn0pLGQz LnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgr IiAubnYtZGlzdHktIj0KK2UucG9pbnRJbmRleCkuYXR0cigieDIiLGUucG9zWzBdK28uc2l6ZSgp KSxlLnBvcz0zRFtlLnBvc1swXSthLmxlZnQsZS5wb3NbPQoxXSthLnRvcF0sTS50b29sdGlwU2hv dyhlKX0pLE0ub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtOJiZCKGUsay5wYXJlbnQ9Ck5v ZGUpfSksTS5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0z RCJ1bmRlZmluZWQiJiYoZT0KLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPTNEdC5k aXNhYmxlZFtuXX0pLEEuZGlzYWJsZWQ9M0R0LmRpc2FibGVkPQopLEYudXBkYXRlKCl9KSxQPTNE aC5jb3B5KCksSD0zRHAuY29weSgpfSksRn12YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKSxuPQo9 M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMubGVnZW5k KCkscz0zRGUubW9kZWxzLmw9CmVnZW5kKCksbz0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLHU9 M0RlLm1vZGVscy5kaXN0cmlidXRpb24oKSxhPTNEe3RvcDozMD0KLHJpZ2h0OjIwLGJvdHRvbTo1 MCxsZWZ0Ojc1fSxmPTNEbnVsbCxsPTNEbnVsbCxjPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxo PQo9M0RkMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0 aW9uKDApOnQueFNjYWxlKCkscD0KPTNEZDMuZmlzaGV5ZT9kMy5maXNoZXllLnNjYWxlKGQzLnNj YWxlLmxpbmVhcikuZGlzdG9ydGlvbigwKTp0LnlTY2FsZSgpLGQ9Cj0zRDAsdj0zRDAsbT0zRCEx LGc9M0QhMSx5PTNEITAsYj0zRCEwLHc9M0QhMCxFPTNEITEsUz0zRCEhZDMuZmlzaGV5ZSx4PTNE MD0KLFQ9M0QhMSxOPTNEITAsQz0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK3Qr Ijwvc3Ryb25nPiJ9LGs9M0RmdW5jPQp0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK24rIjwv c3Ryb25nPiJ9LEw9M0RudWxsLEE9M0R7fSxPPTNEbnVsbCxNPTNEZDM9Ci5kaXNwYXRjaCgidG9v bHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxfPTNE Ik5vID0KRGF0YSBBdmFpbGFibGUuIixEPTNEMDt0LnhTY2FsZShoKS55U2NhbGUocCksbi5vcmll bnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nPQooMTApLHIub3JpZW50KEU/InJpZ2h0IjoibGVmdCIp LnRpY2tQYWRkaW5nKDEwKSxvLmF4aXMoIngiKSx1LmF4aXMoInkiKSxzLnU9CnBkYXRlU3RhdGUo ITEpO3ZhciBQLEgsQj0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5vZmZzZXRM ZWZ0fHwwKT0KLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGY9M0RpLnBvc1swXSsocy5v ZmZzZXRMZWZ0fHwwKSxsPTNEcC5yYW5nZSgpPQpbMF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxj PTNEaC5yYW5nZSgpWzBdK2EubGVmdCsocy5vZmZzZXRMZWZ0fHwwKSxkPTNEaS49CnBvc1sxXSso cy5vZmZzZXRUb3B8fDApLHY9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJ bmRleCkpLG09Cj0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSk7 QyE9M0RudWxsJiZlLnRvb2x0aXAuc2hvdyhbZj0KLGxdLEMoaS5zZXJpZXMua2V5LHYsbSxpLEYp LCJuIiwxLHMsIngtbnZ0b29sdGlwIiksayE9M0RudWxsJiZlLnRvb2x0aXAuc2hvPQp3KFtjLGRd LGsoaS5zZXJpZXMua2V5LHYsbSxpLEYpLCJlIiwxLHMsInktbnZ0b29sdGlwIiksTCE9M0RudWxs JiZlLnRvb2x0aXA9Ci5zaG93KFtvLHVdLEwoaS5zZXJpZXMua2V5LHYsbSxpLEYpLGkudmFsdWU8 MD8ibiI6InMiLG51bGwscyl9LGo9M0Rbe2tleToiTT0KYWduaWZ5IixkaXNhYmxlZDohMH1dO3Jl dHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3RpPQpvbihl KXtNLnRvb2x0aXBIaWRlKGUpLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNl cmllcy0iK2Uuc2VyaWU9CnNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigi eTEiLDApLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZD0KKCkrIiAubnYtc2VyaWVzLSIrZS5z ZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLHUuc2l6PQpl KCkpfSksTS5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7TiYmZS50b29sdGlwLmNsZWFudXAo KX0pLEYuZGlzcGF0Y2g9M0Q9Ck0sRi5zY2F0dGVyPTNEdCxGLmxlZ2VuZD0zRGksRi5jb250cm9s cz0zRHMsRi54QXhpcz0zRG4sRi55QXhpcz0zRHIsRi5kaXN0WD0KPTNEbyxGLmRpc3RZPTNEdSxk My5yZWJpbmQoRix0LCJpZCIsImludGVyYWN0aXZlIiwicG9pbnRBY3RpdmUiLCJ4IiwieSIsInNo PQphcGUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21h aW4iLCJ4UmFuZ2UiLCJ5UmFuZ2U9CiIsInNpemVEb21haW4iLCJzaXplUmFuZ2UiLCJmb3JjZVgi LCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaT0KcFJhZGl1cyIsInVzZVZv cm9ub2kiKSxGLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoRiksRi5tYXJnaW49 M0RmPQp1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnRvcD0zRHR5cGVvZiBl LnRvcCE9M0QidW5kZWZpbmVkIj9lLnQ9Cm9wOmEudG9wLGEucmlnaHQ9M0R0eXBlb2YgZS5yaWdo dCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209Cj0zRHR5cGVvZiBlLmJv dHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9M0R0eXBlb2YgZS5s ZWZ0IT0KPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmEubGVmdCxGKTphfSxGLndpZHRoPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8oZj0zRGUsRik6Zn0sRi5oZWlnaHQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsRik9CjpsfSxGLmNvbG9y PTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0RlLnV0aWxzLmdldENv bG9yKHQpLD0KaS5jb2xvcihjKSxvLmNvbG9yKGMpLHUuY29sb3IoYyksRik6Y30sRi5zaG93RGlz dFg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhtPTNEZSxGKTptfSxG LnNob3dEaXN0WT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Q9Cmg/KGc9M0Rl LEYpOmd9LEYuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KFM9M0RlLD0KRik6U30sRi5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHk9M0RlLEYpOnl9LEYuc2hvPQp3WEF4aXM9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsRik6Yn0sRi5zaG93WUF4aXM9M0RmdW49CmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxGKTp3fSxGLnJpZ2h0QWxpZ25ZQXhp cz0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLHIub3JpZW50 KGU/InJpZ2h0IjoibGVmdCIpLEYpOkV9LEYuZmlzaGV5PQplPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEYpOnh9LEYueFBhZGRpbmc9M0RmdW5jdGlvbig9CmUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxGKTpkfSxGLnlQYWRkaW5nPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8odj0zRGUsRik6dn0sRi50b29sdGlwcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KE49M0RlLEYpOk59LEYudG9v bHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0zRGU9 CixGKTpMfSxGLnRvb2x0aXBYQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhDPTNEZSxGKTpDfT0KLEYudG9vbHRpcFlDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9M0RlLEYpOmt9LEYuc3RhPQp0ZT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNEZSxGKTpBfSxGLmRlZmF1bHRTdGF0ZT0zRGZ1 bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89M0RlLEYpOk99LEYubm9EYXRh PTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8oXz0zRGUsRik6X30sRi50 cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3Ro PyhEPTNEZSxGKTpEfSxGfSxlLm1vZGVscy5zY2F0dGVyUGx1c0xpbmVDaGFydD0zRGZ1bmN0aW9u KCl7ZnU9Cm5jdGlvbiBCKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gVigp e2lmKFMpcmV0dXJuIFUuc2VsZWN0KCIubj0Kdi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVy LWV2ZW50cyIsImFsbCIpLCExO1Uuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiPQopLnN0eWxlKCJw b2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgaT0zRGQzLm1vdXNlKHRoaXMpO2guZGlzdG9ydGlv bihFKS5mb2M9CnVzKGlbMF0pLHAuZGlzdG9ydGlvbihFKS5mb2N1cyhpWzFdKSxVLnNlbGVjdCgi Lm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS5maT0KbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKS5jYWxsKHQpLGcmJlUuc2VsZWN0KCIubnYteC5udi1heGlzIikuPQpjYWxsKG4p LHkmJlUuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSxVLnNlbGVjdCgiLm52LWRpc3Ry aWJ1dGlvblgiKS49CmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVk fSkpLmNhbGwobyksVS5zZWxlY3QoIi5udi1kaXN0cj0KaWJ1dGlvblkiKS5kYXR1bShlLmZpbHRl cihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHUpfXZhciBUPTNEPQpkMy5z ZWxlY3QodGhpcyksTj0zRHRoaXMsQz0zRChmfHxwYXJzZUludChULnN0eWxlKCJ3aWR0aCIpKXx8 OTYwKS1hLmxlZnQtYS49CnJpZ2h0LE09M0QobHx8cGFyc2VJbnQoVC5zdHlsZSgiaGVpZ2h0Iikp fHw0MDApLWEudG9wLWEuYm90dG9tO0IudXBkYXRlPTNEZj0KdW5jdGlvbigpe1QuY2FsbChCKX0s Qi5jb250YWluZXI9M0R0aGlzLGsuZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1PQpy biEhZS5kaXNhYmxlZH0pO2lmKCFMKXt2YXIgajtMPTNEe307Zm9yKGogaW4gaylrW2pdaW5zdGFu Y2VvZiBBcnJheT9MW2pdPQo9M0RrW2pdLnNsaWNlKDApOkxbal09M0RrW2pdfWlmKCFlfHwhZS5s ZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm49CiBlLnZhbHVlcy5sZW5ndGh9KS5s ZW5ndGgpe3ZhciBGPTNEVC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtPXSk7cmV0dT0K cm4gRi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEi KS5hdHRyKCJkeSIsIi0uN2VtPQoiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxGLmF0 dHIoIngiLGEubGVmdCtDLzIpLmF0dHIoInkiLGEudG9wK00vMik9Ci50ZXh0KGZ1bmN0aW9uKGUp e3JldHVybiBlfSksQn1ULnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGg9M0R0LnhT Yz0KYWxlKCkscD0zRHQueVNjYWxlKCksXz0zRF98fGgsRD0zRER8fHA7dmFyIEk9M0RULnNlbGVj dEFsbCgiZy5udi13cmFwLm52LXNjPQphdHRlckNoYXJ0IikuZGF0YShbZV0pLHE9M0RJLmVudGVy KCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXA9CiBudi1zY2F0dGVyQ2hh cnQgbnYtY2hhcnQtIit0LmlkKCkpLFI9M0RxLmFwcGVuZCgiZyIpLFU9M0RJLnNlbGVjdCgiZyIp O1IuYT0KcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYmFja2dyb3VuZCIpLnN0 eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vPQpuZSIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi14IG52LWF4aXMiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiw9CiJudi15IG52LWF4 aXMiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdHRlcldyYXAiKSxSLmFwcGVu ZCgiZyIpLj0KYXR0cigiY2xhc3MiLCJudi1yZWdyZXNzaW9uTGluZXNXcmFwIiksUi5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RXPQpyYXAiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtbGVnZW5kV3JhcCIpLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsIm52LWNv bnRyb2xzV3JhcCIpLEkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5sZWZ0KyIsIith LnRvcCsiKSIpLD0KYiYmVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitDKyIsMCkiKSxtJiYoaS53PQppZHRoKEMvMiksSS5zZWxlY3QoIi5udi1s ZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbChpKSxhLnRvcCE9M0RpLmhlaWdodCgpJiY9CihhLnRv cD0zRGkuaGVpZ2h0KCksTT0zRChsfHxwYXJzZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMCkt YS50b3AtYS5ib3R0bz0KbSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNm b3JtIiwidHJhbnNsYXRlKCIrQy8yKyIsIisgLWEudG9wPQorIikiKSksdyYmKHMud2lkdGgoMTgw KS5jb2xvcihbIiM0NDQiXSksVS5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bSg9Ckgp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLHQu d2lkdGgoQykuaGVpZ2h0KD0KTSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5j b2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7PQpyZXR1cm4hZVtuXS5kaXNhYmxl ZH0pKSxJLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb249 CihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLEkuc2VsZWN0KCIubnYtcmVncmVzc2lv bkxpbmVzV3JhcCIpLmF0dHIoIj0KY2xpcC1wYXRoIiwidXJsKCNudi1lZGdlLWNsaXAtIit0Lmlk KCkrIikiKTt2YXIgej0zREkuc2VsZWN0KCIubnYtcmVncmVzc2lvPQpuTGluZXNXcmFwIikuc2Vs ZWN0QWxsKCIubnYtcmVnTGluZXMiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7ei5lbnRl cig9CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1yZWdMaW5lcyIpO3ZhciBXPTNEei5z ZWxlY3RBbGwoIi5udi1yZWdMaW5lIj0KKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pLFg9 M0RXLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJuPQp2LXJlZ0xpbmUiKS5z dHlsZSgic3Ryb2tlLW9wYWNpdHkiLDApO1cuYXR0cigieDEiLGgucmFuZ2UoKVswXSkuYXR0cigi eDIiLGg9Ci5yYW5nZSgpWzFdKS5hdHRyKCJ5MSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRv bWFpbigpWzBdKmUuc2xvcGUrZS5pbnRlcj0KY2VwdCl9KS5hdHRyKCJ5MiIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gcChoLmRvbWFpbigpWzFdKmUuc2xvcGUrZS5pbnRlcmNlcHQpPQp9KS5zdHlsZSgi c3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGMoZSxuKX0pLnN0eWxlKCJzdHJva2Utb3Bh Y2l0eSIsZnU9Cm5jdGlvbihlLHQpe3JldHVybiBlLmRpc2FibGVkfHx0eXBlb2YgZS5zbG9wZT0z RD0zRCJ1bmRlZmluZWQifHx0eXBlb2YgZS5pbj0KdGVyY2VwdD0zRD0zRCJ1bmRlZmluZWQiPzA6 MX0pLGcmJihuLnNjYWxlKGgpLnRpY2tzKG4udGlja3MoKT9uLnRpY2tzKCk6Qy8xPQowMCkudGlj a1NpemUoLU0sMCksVS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoMCw9CiIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbChuKSkseSYmKHIuc2NhbGUocCku dGlja3Moci50aWNrcygpP3IudGlja3MoKTpNLzM2KT0KLnRpY2tTaXplKC1DLDApLFUuc2VsZWN0 KCIubnYteS5udi1heGlzIikuY2FsbChyKSksZCYmKG8uZ2V0RGF0YSh0LngoKSkuc2NhPQpsZSho KS53aWR0aChDKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxjKGUs dCl9KS5maWx0ZXIoZnU9Cm5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLFIuc2Vs ZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdD0KdHIoImNsYXNzIiwibnYtZGlzdHJp YnV0aW9uWCIpLFUuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5zZm9yPQpt IiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hZS5kaXM9CmFibGVkfSkpLmNhbGwobykpLHYmJih1LmdldERhdGEodC55KCkp LnNjYWxlKHApLndpZHRoKE0pLmNvbG9yKGUubWFwKGZ1bmN0aT0Kb24oZSx0KXtyZXR1cm4gZS5j b2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9 PQopKSxSLnNlbGVjdCgiLm52LWRpc3RXcmFwIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di1kaXN0cmlidXRpb25ZIiksVS49CnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5hdHRyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYj9DOi11LnNpemUoKSkrIj0KLDApIikuZGF0dW0oZS5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMuZmlzaGV5 ZSYmPQooVS5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikuYXR0cigid2lkdGgiLEMpLmF0dHIoImhl aWdodCIsTSksVS5zZWxlY3QoIi5udi09CmJhY2tncm91bmQiKS5vbigibW91c2Vtb3ZlIixWKSxV LnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aT0Kb24oKXtTPTNEIVN9 KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIsZnVuY3Rpb24oKXtT PTNEIVN9PQopKSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxpKXtlLmRp c2FibGVkPTNEIWUuZGlzYWJsZWQsRT0zRGU9Ci5kaXNhYmxlZD8wOjIuNSxVLnNlbGVjdCgiLm52 LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZT0KZD8ibm9uZSI6 ImFsbCIpLFUuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMi LGUuZGlzYWJsPQplZD8iYWxsIjoibm9uZSIpLGUuZGlzYWJsZWQ/KGguZGlzdG9ydGlvbihFKS5m b2N1cygwKSxwLmRpc3RvcnRpb24oRSkuZm9jdXM9CigwKSxVLnNlbGVjdCgiLm52LXNjYXR0ZXJX cmFwIikuY2FsbCh0KSxVLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksVT0KLnNlbGVj dCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpOlM9M0QhMSxCLnVwZGF0ZSgpfSksaS5kaXNwYXRj aC5vbigic3RhdGVDPQpoYW5nZSIsZnVuY3Rpb24oZSl7az0zRGUsQS5zdGF0ZUNoYW5nZShrKSxC LnVwZGF0ZSgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWU9Cm50TW91c2VvdmVyLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcz0KLSIr ZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGUucG9z WzFdLU0pLGQzLnNlbGVjPQp0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5z ZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmQ9CmV4KS5hdHRyKCJ4MiIsZS5wb3Nb MF0rby5zaXplKCkpLGUucG9zPTNEW2UucG9zWzBdK2EubGVmdCxlLnBvc1sxXSthLnRvcF0sQT0K LnRvb2x0aXBTaG93KGUpfSksQS5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe3gmJlAoZSxO LnBhcmVudE5vZGUpfSksQS5vPQpuKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQu ZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnU9Cm5jdGlvbihlLG4pe2UuZGlz YWJsZWQ9M0R0LmRpc2FibGVkW25dfSksay5kaXNhYmxlZD0zRHQuZGlzYWJsZWQpLEIudXBkYXRl KD0KKX0pLF89M0RoLmNvcHkoKSxEPTNEcC5jb3B5KCl9KSxCfXZhciB0PTNEZS5tb2RlbHMuc2Nh dHRlcigpLG49M0RlLm1vZGVscy5hPQp4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1v ZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRGU9Ci5tb2RlbHMuZGlzdHJp YnV0aW9uKCksdT0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLGE9M0R7dG9wOjMwLHJpZ2h0OjIw LGJvdD0KdG9tOjUwLGxlZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9M0RlLnV0aWxzLmRlZmF1 bHRDb2xvcigpLGg9M0RkMy5maXNoZXllPQo/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5l YXIpLmRpc3RvcnRpb24oMCk6dC54U2NhbGUoKSxwPTNEZDMuZmlzaGV5ZT89CmQzLmZpc2hleWUu c2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueVNjYWxlKCksZD0zRCExLHY9 M0QhMSxtPQo9M0QhMCxnPTNEITAseT0zRCEwLGI9M0QhMSx3PTNEISFkMy5maXNoZXllLEU9M0Qw LFM9M0QhMSx4PTNEITAsVD0zRGZ1bmN0aW89Cm4oZSx0LG4pe3JldHVybiI8c3Ryb25nPiIrdCsi PC9zdHJvbmc+In0sTj0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz0KPiIrbisiPC9z dHJvbmc+In0sQz0zRGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxw PiIrcisiPC9wPQo+In0saz0zRHt9LEw9M0RudWxsLEE9M0RkMy5kaXNwYXRjaCgidG9vbHRpcFNo b3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmc9CmUiLCJjaGFuZ2VTdGF0ZSIpLE89M0QiTm8g RGF0YSBBdmFpbGFibGUuIixNPTNEMDt0LnhTY2FsZShoKS55U2NhbGUocCksbi5vcj0KaWVudCgi Ym90dG9tIikudGlja1BhZGRpbmcoMTApLHIub3JpZW50KGI/InJpZ2h0IjoibGVmdCIpLnRpY2tQ YWRkaW5nKDEwKSxvPQouYXhpcygieCIpLHUuYXhpcygieSIpLHMudXBkYXRlU3RhdGUoITEpO3Zh ciBfLEQsUD0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0Q9CmkucG9zWzBdKyhzLm9mZnNldExlZnR8 fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGY9M0RpLnBvc1swXSsocy5vZj0KZnNl dExlZnR8fDApLGw9M0RwLnJhbmdlKClbMF0rYS50b3ArKHMub2Zmc2V0VG9wfHwwKSxjPTNEaC5y YW5nZSgpWzBdK2EubGVmPQp0KyhzLm9mZnNldExlZnR8fDApLGQ9M0RpLnBvc1sxXSsocy5vZmZz ZXRUb3B8fDApLHY9M0RuLnRpY2tGb3JtYXQoKSh0LngoKSg9CmkucG9pbnQsaS5wb2ludEluZGV4 KSksbT0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSk7VCE9Cj0z RG51bGwmJmUudG9vbHRpcC5zaG93KFtmLGxdLFQoaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJuIiwx LHMsIngtbnZ0b29sdGlwIj0KKSxOIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtjLGRdLE4oaS5z ZXJpZXMua2V5LHYsbSxpLEIpLCJlIiwxLHMsInktbnZ0b29sPQp0aXAiKSxDIT0zRG51bGwmJmUu dG9vbHRpcC5zaG93KFtvLHVdLEMoaS5zZXJpZXMua2V5LHYsbSxpLnBvaW50LnRvb2x0aXAsaSw9 CkIpLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9LEg9M0Rbe2tleToiTWFnbmlmeSIsZGlzYWJs ZWQ6ITB9XTtyZXR1cm4gdC5kaT0Kc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIs ZnVuY3Rpb24oZSl7QS50b29sdGlwSGlkZShlKSxkMy5zZWxlY3QoPQoiLm52LWNoYXJ0LSIrdC5p ZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitlLnBvaW50SW5k ZXg9CikuYXR0cigieTEiLDApLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNl cmllcy0iK2Uuc2VyaWVzSW5kZXgrIj0KIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigi eDIiLHUuc2l6ZSgpKX0pLEEub24oInRvb2x0aXBIaWRlIixmdW5jdGlvPQpuKCl7eCYmZS50b29s dGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0Y2g9M0RBLEIuc2NhdHRlcj0zRHQsQi5sZWdlbmQ9M0Rp LEIuY289Cm50cm9scz0zRHMsQi54QXhpcz0zRG4sQi55QXhpcz0zRHIsQi5kaXN0WD0zRG8sQi5k aXN0WT0zRHUsZDMucmViaW5kKEIsdCwiaT0KZCIsImludGVyYWN0aXZlIiwicG9pbnRBY3RpdmUi LCJ4IiwieSIsInNoYXBlIiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInpTPQpjYWxlIiwieERv bWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwic2l6ZVJhbmdl IiwiZm9yY2U9ClgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaXBSYWRp dXMiLCJ1c2VWb3Jvbm9pIiksQi5vcHRpb25zPQo9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQo QiksQi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmc9CnRoPyhhLnRv cD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDphLnRvcCxhLnJpZ2h0PTNEdHlw ZW9mIGUucmlnaD0KdCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209M0R0 eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/PQplLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9 M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDphLmxlZnQsQik6YX09CixCLndp ZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEIpOmZ9LEIu aGVpZ2h0PTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0zRGUsQik6 bH0sQi5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGM9M0Rl LnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoYyksby5jb2xvcihjKSx1LmNvbG9yKGMpLEI9Cik6 Y30sQi5zaG93RGlzdFg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0z RGUsQik6ZH0sQi5zaG93RD0KaXN0WT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh2PTNEZSxCKTp2fSxCLnNob3dDb250cm9scz0zRGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHc9M0RlLEIpOnd9LEIuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3I9 CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEIpOm19LEIuc2hvd1hBeGlzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8oZz0zRGUsQik6Z30sQi5zaG93WUF4aXM9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQp5PTNEZSxCKTp5fSxCLnJp Z2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNE ZSw9CnIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLEIpOmJ9LEIuZmlzaGV5ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubD0KZW5ndGg/KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsPQpCKTp4fSxCLnRvb2x0 aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9M0RlLEIp OkN9LEI9Ci50b29sdGlwWENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oVD0zRGUsQik6VH0sQi50b29sdD0KaXBZQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhOPTNEZSxCKTpOfSxCLnN0YXRlPTNEZnVuPQpjdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsQik6a30sQi5kZWZhdWx0U3RhdGU9M0RmdW5j dGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxCKTpMfSxCLm5vRGF0YT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0Kcy5sZW5ndGg/KE89M0RlLEIpOk99LEIudHJh bnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0aD8o TT0zRGUsQik6TX0sQn0sZS5tb2RlbHMuc3BhcmtsaW5lPTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBk KGUpe3JldHVybiA9CmUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5sZWZ0LXQucmlnaHQs ZD0zRHItdC50b3AtdC5ib3R0b20sdj0zRGQzLnNlbD0KZWN0KHRoaXMpO3MuZG9tYWluKGx8fGQz LmV4dGVudChlLHUpKS5yYW5nZShofHxbMCxpXSksby5kb21haW4oY3x8ZDMuZXh0ZW50PQooZSxh KSkucmFuZ2UocHx8W2QsMF0pO3ZhciBtPTNEdi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFy a2xpbmUiKS5kYXRhKFs9CmVdKSxnPTNEbS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnZkMyBudi13cmFwIG52LXNwYXJrbGluZSIpLGI9Cj0zRGcuYXBwZW5kKCJnIiksdz0zRG0u c2VsZWN0KCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIj0KLCIr dC50b3ArIikiKTt2YXIgRT0zRG0uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbihlKXty ZXR1cm5bZV19KTtFLmVuPQp0ZXIoKS5hcHBlbmQoInBhdGgiKSxFLmV4aXQoKS5yZW1vdmUoKSxF LnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXI9Cm4gZS5jb2xvcnx8ZihlLHQpfSku YXR0cigiZCIsZDMuc3ZnLmxpbmUoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModShlLHQpKT0K fSkueShmdW5jdGlvbihlLHQpe3JldHVybiBvKGEoZSx0KSl9KSk7dmFyIFM9M0RtLnNlbGVjdEFs bCgiY2lyY2xlLm52LXBvaW50PQoiKS5kYXRhKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aWYo dCE9M0QtMSl7dmFyIG49M0RlW3RdO3JldHVybiBuLnBvaW50SW49CmRleD0zRHQsbn1yZXR1cm4g bnVsbH12YXIgdD0zRGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pLHI9M0RuKHQu bD0KYXN0SW5kZXhPZihvLmRvbWFpbigpWzFdKSksaT0zRG4odC5pbmRleE9mKG8uZG9tYWluKClb MF0pKSxzPTNEbih0Lmxlbmd0aC0xPQopO3JldHVybltpLHIsc10uZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiBlIT0zRG51bGx9KX0pO1MuZW50ZXIoKS5hcHBlbmQoImM9CmlyY2xlIiksUy5leGl0 KCkucmVtb3ZlKCksUy5hdHRyKCJjeCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh1KGUsZS5wb2lu dEluZD0KZXgpKX0pLmF0dHIoImN5IixmdW5jdGlvbihlLHQpe3JldHVybiBvKGEoZSxlLnBvaW50 SW5kZXgpKX0pLmF0dHIoInIiLDIpLmF0PQp0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJu IHUoZSxlLnBvaW50SW5kZXgpPTNEPTNEcy5kb21haW4oKVsxXT8ibnYtcG89CmludCBudi1jdXJy ZW50VmFsdWUiOmEoZSxlLnBvaW50SW5kZXgpPTNEPTNEby5kb21haW4oKVswXT8ibnYtcG9pbnQg bnYtbWluVj0KYWx1ZSI6Im52LXBvaW50IG52LW1heFZhbHVlIn0pfSksZH12YXIgdD0zRHt0b3A6 MixyaWdodDowLGJvdHRvbToyLGxlZnQ6MH0sPQpuPTNENDAwLHI9M0QzMixpPTNEITAscz0zRGQz LnNjYWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Q9CmlvbihlKXty ZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRGUudXRpbHMuZ2V0Q29s b3IoWyIjMDAwIj0KXSksbCxjLGgscDtyZXR1cm4gZC5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kKGQpLGQubWFyZ2luPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dC49CnRvcCx0 LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQu Ym90dG9tPTNEdHlwZT0Kb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0 b20sdC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kPQplZmluZWQiP2UubGVmdDp0LmxlZnQs ZCk6dH0sZC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cm49 M0RlLGQpOm59LGQuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHI9M0RlLGQpOnJ9LGQueD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHU9M0RkMy5mdW5jdG9yKGUpLGQpOnV9LGQueT0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGE9M0RkMy5mdW5jdG9yKGUpLGQpOmF9LGQueFNjYWxlPTNEZnVuY3Rpb249 CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsZCk6c30sZC55U2NhbGU9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndT0KbWVudHMubGVuZ3RoPyhvPTNEZSxkKTpvfSxkLnhEb21haW49 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQpsPTNEZSxkKTpsfSxkLnlE b21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsZCk6Y30s ZC49CnhSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxk KTpofSxkLnlSYW5nZT0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9 M0RlLGQpOnB9LGQuYW5pbWF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5n dGg/KGk9M0RlLGQpOml9LGQuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD89CihmPTNEZS51dGlscy5nZXRDb2xvcih0KSxkKTpmfSxkfSxlLm1vZGVscy5zcGFya2xp bmVQbHVzPTNEZnVuY3Rpb24oKXtmdW5jdD0KaW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlv bihjKXtmdW5jdGlvbiBPKCl7aWYoYSlyZXR1cm47dmFyIGU9M0RDLnNlbGVjPQp0QWxsKCIubnYt aG92ZXJWYWx1ZSIpLmRhdGEodSkscj0zRGUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFz cyIsIm52LWg9Cm92ZXJWYWx1ZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZp bGwtb3BhY2l0eSIsMCk7ZS5leGl0KCkuc3R5bD0KZSgic3Ryb2tlLW9wYWNpdHkiLDApLnN0eWxl KCJmaWxsLW9wYWNpdHkiLDApLnJlbW92ZSgpLGUuYXR0cigidHJhbnNmb3JtIixmPQp1bmN0aW9u KGUpe3JldHVybiJ0cmFuc2xhdGUoIitzKHQueCgpKGNbZV0sZSkpKyIsMCkifSkuc3R5bGUoInN0 cm9rZS1vcGFjaXQ9CnkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDEpO2lmKCF1Lmxlbmd0aCly ZXR1cm47ci5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MT0KIiwwKS5hdHRyKCJ5MSIsLW4udG9wKS5h dHRyKCJ4MiIsMCkuYXR0cigieTIiLGIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhPQpzcyIs Im52LXhWYWx1ZSIpLmF0dHIoIngiLC02KS5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5j aG9yIiwiZW5kIikuYXQ9CnRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLm52LWhvdmVyVmFsdWUg Lm52LXhWYWx1ZSIpLnRleHQoZih0LngoKShjW3VbMF1dLD0KdVswXSkpKSxyLmFwcGVuZCgidGV4 dCIpLmF0dHIoImNsYXNzIiwibnYteVZhbHVlIikuYXR0cigieCIsNikuYXR0cigieSIsLW4uPQp0 b3ApLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5hdHRyKCJkeSIsIi45ZW0iKSxDLnNlbGVj dCgiLm52LWhvdmVyVmFsdWU9CiAubnYteVZhbHVlIikudGV4dChsKHQueSgpKGNbdVswXV0sdVsw XSkpKX1mdW5jdGlvbiBNKCl7ZnVuY3Rpb24gcihlLG4pe3Zhcj0KIHI9M0RNYXRoLmFicyh0Lngo KShlWzBdLDApLW4pLGk9M0QwO2Zvcih2YXIgcz0zRDA7czxlLmxlbmd0aDtzKyspTWF0aC5hYnMo PQp0LngoKShlW3NdLHMpLW4pPHImJihyPTNETWF0aC5hYnModC54KCkoZVtzXSxzKS1uKSxpPTNE cyk7cmV0dXJuIGl9aWYoYSlyZXQ9CnVybjt2YXIgZT0zRGQzLm1vdXNlKHRoaXMpWzBdLW4ubGVm dDt1PTNEW3IoYyxNYXRoLnJvdW5kKHMuaW52ZXJ0KGUpKSldLE8oKT0KfXZhciBtPTNEZDMuc2Vs ZWN0KHRoaXMpLGc9M0Qocnx8cGFyc2VJbnQobS5zdHlsZSgid2lkdGgiKSl8fDk2MCktbi5sZWZ0 LW4uPQpyaWdodCxiPTNEKGl8fHBhcnNlSW50KG0uc3R5bGUoImhlaWdodCIpKXx8NDAwKS1uLnRv cC1uLmJvdHRvbTt2LnVwZGF0ZT0zRGY9CnVuY3Rpb24oKXt2KGUpfSx2LmNvbnRhaW5lcj0zRHRo aXM7aWYoIWN8fCFjLmxlbmd0aCl7dmFyIHc9M0RtLnNlbGVjdEFsbCgiLj0KbnYtbm9EYXRhIiku ZGF0YShbZF0pO3JldHVybiB3LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJu dmQzIG52PQotbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIs Im1pZGRsZSIpLHcuYXR0cigieCIsbi5sZWY9CnQrZy8yKS5hdHRyKCJ5IixuLnRvcCtiLzIpLnRl eHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx2fW0uc2VsZWN0QWxsKCIubnYtbj0Kb0RhdGEiKS5y ZW1vdmUoKTt2YXIgRT0zRHQueSgpKGNbYy5sZW5ndGgtMV0sYy5sZW5ndGgtMSk7cz0zRHQueFNj YWxlKCksbz0KPTNEdC55U2NhbGUoKTt2YXIgUz0zRG0uc2VsZWN0QWxsKCJnLm52LXdyYXAubnYt c3BhcmtsaW5lcGx1cyIpLmRhdGEoW2NdKSxUPQo9M0RTLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3BhcmtsaW5lcGx1cyIpLE49M0Q9ClQuYXBwZW5k KCJnIiksQz0zRFMuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNw YXJrbGluZVdyYT0KcCIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi12YWx1ZVdyYXAi KSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiPQpudi1ob3ZlckFyZWEiKSxTLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ubGVmdCsiLCIrbi50b3ArIikiKTt2YXIgaz0KPTNEQy5z ZWxlY3QoIi5udi1zcGFya2xpbmVXcmFwIik7dC53aWR0aChnKS5oZWlnaHQoYiksay5jYWxsKHQp O3ZhciBMPTNEQy5zPQplbGVjdCgiLm52LXZhbHVlV3JhcCIpLEE9M0RMLnNlbGVjdEFsbCgiLm52 LWN1cnJlbnRWYWx1ZSIpLmRhdGEoW0VdKTtBLmVudGU9CnIoKS5hcHBlbmQoInRleHQiKS5hdHRy KCJjbGFzcyIsIm52LWN1cnJlbnRWYWx1ZSIpLmF0dHIoImR4IixwPy04OjgpLmF0dHIoIj0KZHki LCIuOWVtIikuc3R5bGUoInRleHQtYW5jaG9yIixwPyJlbmQiOiJzdGFydCIpLEEuYXR0cigieCIs ZysocD9uLnJpZ2h0OjApPQopLmF0dHIoInkiLGg/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9OjAp LnN0eWxlKCJmaWxsIix0LmNvbG9yKCkoY1tjLmxlbmd0aC09CjFdLGMubGVuZ3RoLTEpKS50ZXh0 KGwoRSkpLE4uc2VsZWN0KCIubnYtaG92ZXJBcmVhIikuYXBwZW5kKCJyZWN0Iikub24oIm1vdT0K c2Vtb3ZlIixNKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7YT0zRCFhfSkub24oIm1vdXNlb3V0Iixm dW5jdGlvbigpe3U9M0RbXSxPPQooKX0pLEMuc2VsZWN0KCIubnYtaG92ZXJBcmVhIHJlY3QiKS5h dHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmE9Cm5zbGF0ZSgiKyAtbi5sZWZ0 KyIsIisgLW4udG9wKyIpIn0pLmF0dHIoIndpZHRoIixnK24ubGVmdCtuLnJpZ2h0KS5hdHRyKCJo ZT0KaWdodCIsYituLnRvcCl9KSx2fXZhciB0PTNEZS5tb2RlbHMuc3BhcmtsaW5lKCksbj0zRHt0 b3A6MTUscmlnaHQ6MTAwLGJvdHRvPQptOjEwLGxlZnQ6NTB9LHI9M0RudWxsLGk9M0RudWxsLHMs byx1PTNEW10sYT0zRCExLGY9M0RkMy5mb3JtYXQoIixyIiksbD0zRGQ9CjMuZm9ybWF0KCIsLjJm IiksYz0zRCEwLGg9M0QhMCxwPTNEITEsZD0zRCJObyBEYXRhIEF2YWlsYWJsZS4iO3JldHVybiB2 LnNwYT0KcmtsaW5lPTNEdCxkMy5yZWJpbmQodix0LCJ4IiwieSIsInhTY2FsZSIsInlTY2FsZSIs ImNvbG9yIiksdi5vcHRpb25zPTNEZS51PQp0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5tYXJn aW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi49CnRvcD0zRHR5cGVv ZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0PTNEdHlwZW9mIGUucmln aHQhPTNEIj0KdW5kZWZpbmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209M0R0eXBlb2YgZS5i b3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0PQpvbTpuLmJvdHRvbSxuLmxlZnQ9M0R0eXBlb2Yg ZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsdik6bn0sdi53aWQ9CnRoPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLHYpOnJ9LHYuaGVpZ2h0PTNE ZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsdik6aX0sdi54VGlj a0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHYp OmZ9LHYueVRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3Ro PyhsPTNEZSx2KTpsfSx2LnNob3dWYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhjPTNEZT0KLHYpOmN9LHYuYWxpZ25WYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhoPTNEZSx2KTpofSx2LnJpPQpnaHRBbGlnblZhbHVlPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHYpOnB9LHYubm9EYXRhPQo9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsdik6ZH0sdn0sZS5tb2Rl bHMuc3RhY2tlZEFyZWE9Cj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS5lYWNo KGZ1bmN0aW9uKGUpe3ZhciBhPTNEbi10LmxlZnQtdC5yaT0KZ2h0LGI9M0RyLXQudG9wLXQuYm90 dG9tLHc9M0RkMy5zZWxlY3QodGhpcyk7cD0zRHYueFNjYWxlKCksZD0zRHYueVNjYWxlKCk7PQp2 YXIgRT0zRGU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5zZXJpZXNJbmRleD0zRHQsZS52YWx1 ZXM9M0RlLnZhbHVlcy5tYXA9CihmdW5jdGlvbihlLG4pe3JldHVybiBlLmluZGV4PTNEbixlLnNl cmllc0luZGV4PTNEdCxlfSl9KTt2YXIgUz0zRGUuZmlsdGVyKD0KZnVuY3Rpb24oZSl7cmV0dXJu IWUuZGlzYWJsZWR9KTtlPTNEZDMubGF5b3V0LnN0YWNrKCkub3JkZXIobCkub2Zmc2V0KGYpLnZh PQpsdWVzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLngobykueSh1KS5vdXQoZnVuY3Rp b24oZSx0LG4pe3ZhciByPTNEdSg9CmUpPTNEPTNEPTNEMD8wOm47ZS5kaXNwbGF5PTNEe3k6cix5 MDp0fX0pKFMpO3ZhciBUPTNEdy5zZWxlY3RBbGwoImcubnYtd3JhcD0KLm52LXN0YWNrZWRhcmVh IikuZGF0YShbZV0pLE49M0RULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQz IG52PQotd3JhcCBudi1zdGFja2VkYXJlYSIpLEM9M0ROLmFwcGVuZCgiZGVmcyIpLGs9M0ROLmFw cGVuZCgiZyIpLEw9M0RULnNlbGVjdCg9CiJnIik7ay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIs Im52LWFyZWFXcmFwIiksay5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIj0KbnYtc2NhdHRlcldy YXAiKSxULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIiki KSx2LndpPQpkdGgoYSkuaGVpZ2h0KGIpLngobykueShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNw bGF5LnkrZS5kaXNwbGF5LnkwfSkuZm9yY2U9ClkoWzBdKS5jb2xvcihlLm1hcChmdW5jdGlvbihl LHQpe3JldHVybiBlLmNvbG9yfHxpKGUsZS5zZXJpZXNJbmRleCl9KSk7dmFyID0KQT0zREwuc2Vs ZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlKTtBLmNhbGwodiksQy5hcHBlbmQoImNsaXBQ YXRoIikuYXR0PQpyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgicmVjdCIpLFQuc2Vs ZWN0KCIjbnYtZWRnZS1jbGlwLSIrcysiIHJlY3Q9CiIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJo ZWlnaHQiLGIpLEwuYXR0cigiY2xpcC1wYXRoIixoPyJ1cmwoI252LWVkZ2UtY2xpcD0KLSIrcysi KSI6IiIpO3ZhciBPPTNEZDMuc3ZnLmFyZWEoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAobyhl LHQpKX0pLnkwKGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5LnkwKX0pLnkxKGZ1bmN0 aW9uKGUpe3JldHVybiBkKGUuZGlzcGxheS55K2UuZGk9CnNwbGF5LnkwKX0pLmludGVycG9sYXRl KGMpLE09M0RkMy5zdmcuYXJlYSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChvKGUsdD0KKSl9 KS55MChmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7 cmV0dXJuIGQoZS5kaXNwPQpsYXkueTApfSksXz0zREwuc2VsZWN0KCIubnYtYXJlYVdyYXAiKS5z ZWxlY3RBbGwoInBhdGgubnYtYXJlYSIpLmRhdGEoZnVuY3Q9CmlvbihlKXtyZXR1cm4gZX0pO18u ZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cj0K biJudi1hcmVhIG52LWFyZWEtIit0fSkuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTShl LnZhbHVlcyxlLnNlcmllc0luPQpkZXgpfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtk My5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxtLmE9CnJlYU1vdXNlb3Zlcih7cG9p bnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy5ldmVudC5wYWdlWV0sc2Vy aT0KZXNJbmRleDplLnNlcmllc0luZGV4fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7 ZDMuc2VsZWN0KHRoaXMpLmNsYXNzPQplZCgiaG92ZXIiLCExKSxtLmFyZWFNb3VzZW91dCh7cG9p bnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy49CmV2ZW50LnBhZ2VZXSxz ZXJpZXNJbmRleDplLnNlcmllc0luZGV4fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7ZDMu c2VsZT0KY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxtLmFyZWFDbGljayh7cG9pbnQ6ZSxz ZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVuPQp0LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpZXNJ bmRleDplLnNlcmllc0luZGV4fSl9KSxfLmV4aXQoKS5yZW1vdmUoKSxfLnM9CnR5bGUoImZpbGwi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0luZGV4KX0pLnN0eWxl KCJzdHJvaz0KZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5k ZXgpfSksXy5hdHRyKCJkIixmdW5jdGlvbihlPQosdCl7cmV0dXJuIE8oZS52YWx1ZXMsdCl9KSx2 LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLmFyZWEiLGZ1bmN0aW9uKGU9Cil7TC5zZWxl Y3QoIi5udi1jaGFydC0iK3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhv dmVyIiwhMCl9KT0KLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC5hcmVhIixmdW5jdGlv bihlKXtMLnNlbGVjdCgiLm52LWNoYXJ0LSIrcysiPQogLm52LWFyZWEtIitlLnNlcmllc0luZGV4 KS5jbGFzc2VkKCJob3ZlciIsITEpfSksZy5kM19zdGFja2VkT2Zmc2V0X3N0YWNrUGU9CnJjZW50 PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLmxlbmd0aCxuPTNEZVswXS5sZW5ndGgscj0zRDEvdCxp LHMsbyxhPTNEW107Zj0Kb3Iocz0zRDA7czxuOysrcyl7Zm9yKGk9M0QwLG89M0QwO2k8RS5sZW5n dGg7aSsrKW8rPTNEdShFW2ldLnZhbHVlc1tzXSk7aWYoPQpvKWZvcihpPTNEMDtpPHQ7aSsrKWVb aV1bc11bMV0vPTNEbztlbHNlIGZvcihpPTNEMDtpPHQ7aSsrKWVbaV1bc11bMV09M0RyfWY9Cm9y KHM9M0QwO3M8bjsrK3MpYVtzXT0zRDA7cmV0dXJuIGF9fSksZ312YXIgdD0zRHt0b3A6MCxyaWdo dDowLGJvdHRvbTowLGxlZj0KdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRGUudXRpbHMuZGVmYXVs dENvbG9yKCkscz0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oPQopKjFlNSksbz0zRGZ1bmN0aW9u KGUpe3JldHVybiBlLnh9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxhPTNEInN0YWNrIiw9 CmY9M0QiemVybyIsbD0zRCJkZWZhdWx0IixjPTNEImxpbmVhciIsaD0zRCExLHAsZCx2PTNEZS5t b2RlbHMuc2NhdHRlcigpLG09Cj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBI aWRlIiwiYXJlYUNsaWNrIiwiYXJlYU1vdXNlb3ZlciIsImFyZT0KYU1vdXNlb3V0Iik7cmV0dXJu IHYuc2l6ZSgyLjIpLnNpemVEb21haW4oWzIuMiwyLjJdKSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50 PQpDbGljay5hcmVhIixmdW5jdGlvbihlKXttLmFyZWFDbGljayhlKX0pLHYuZGlzcGF0Y2gub24o ImVsZW1lbnRNb3VzZW92ZXIudG89Cm9sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1sw XSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLG0udG9vbHRpcFNob3coZT0KKX0pLHYuZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXttLnRvb2x0aXBIaWRlKGUp fSksPQpnLmRpc3BhdGNoPTNEbSxnLnNjYXR0ZXI9M0R2LGQzLnJlYmluZChnLHYsImludGVyYWN0 aXZlIiwic2l6ZSIsInhTY2FsZSIsInk9ClNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21h aW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiZm9yY2VYIj0KLCJmb3JjZVkiLCJm b3JjZVNpemUiLCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJjbGlwUmFkaXVzIiwiaGlnaGxp Z2h0UG9pPQpudCIsImNsZWFySGlnaGxpZ2h0cyIpLGcub3B0aW9ucz0zRGUudXRpbHMub3B0aW9u c0Z1bmMuYmluZChnKSxnLng9M0RmdW5jdGk9Cm9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhvPTNEZDMuZnVuY3RvcihlKSxnKTpvfSxnLnk9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1 bWVudHMubGVuZ3RoPyh1PTNEZDMuZnVuY3RvcihlKSxnKTp1fSxnLm1hcmdpbj0zRGZ1bmN0aW9u KGUpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1 bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9Cj0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRl ZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvbT0KIT0zRCJ1 bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVu ZGVmaW5lZCI/ZS5sPQplZnQ6dC5sZWZ0LGcpOnR9LGcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsZyk6bn09CixnLmhlaWdodD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxnKTpyfSxnLmNsaXBFZGdlPTNEZj0KdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsZyk6aH0sZy5jb2xvcj0zRGZ1 bmN0aW9uKHQpe3JldHVyPQpuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLnV0aWxzLmdldENvbG9y KHQpLGcpOml9LGcub2Zmc2V0PTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUsZyk6Zn0sZy5vcmRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubD0K ZW5ndGg/KGw9M0RlLGcpOmx9LGcuc3R5bGU9M0RmdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxl bmd0aClyZXR1cm4gYTthPTNEPQplO3N3aXRjaChhKXtjYXNlInN0YWNrIjpnLm9mZnNldCgiemVy byIpLGcub3JkZXIoImRlZmF1bHQiKTticmVhaztjYXNlInN0cmU9CmFtIjpnLm9mZnNldCgid2ln Z2xlIiksZy5vcmRlcigiaW5zaWRlLW91dCIpO2JyZWFrO2Nhc2Uic3RyZWFtLWNlbnRlciI6Zy5v Zj0KZnNldCgic2lsaG91ZXR0ZSIpLGcub3JkZXIoImluc2lkZS1vdXQiKTticmVhaztjYXNlImV4 cGFuZCI6Zy5vZmZzZXQoImV4cGFuPQpkIiksZy5vcmRlcigiZGVmYXVsdCIpO2JyZWFrO2Nhc2Ui c3RhY2tfcGVyY2VudCI6Zy5vZmZzZXQoZy5kM19zdGFja2VkT2Zmc2U9CnRfc3RhY2tQZXJjZW50 KSxnLm9yZGVyKCJkZWZhdWx0Iil9cmV0dXJuIGd9LGcuaW50ZXJwb2xhdGU9M0RmdW5jdGlvbihl KXtyZT0KdHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxnKTpjfSxnfSxlLm1vZGVscy5zdGFj a2VkQXJlYUNoYXJ0PTNEZnVuY3Rpb24oPQope2Z1bmN0aW9uIE0oeSl7cmV0dXJuIHkuZWFjaChm dW5jdGlvbih5KXt2YXIgQT0zRGQzLnNlbGVjdCh0aGlzKSxfPTNEdGhpcyw9CkQ9M0QoYXx8cGFy c2VJbnQoQS5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQsUD0zRChmfHxwYXJz ZUludChBLj0Kc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbTtNLnVwZGF0ZT0z RGZ1bmN0aW9uKCl7QS5jYWxsKE0pfSxNLmNvPQpudGFpbmVyPTNEdGhpcyxTLmRpc2FibGVkPTNE eS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIXgpe3Y9CmFyIEg7eD0z RHt9O2ZvcihIIGluIFMpU1tIXWluc3RhbmNlb2YgQXJyYXk/eFtIXT0zRFNbSF0uc2xpY2UoMCk6 eFtIXT0zRFNbSD0KXX1pZigheXx8IXkubGVuZ3RofHwheS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0 dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7PQp2YXIgQj0zREEuc2VsZWN0QWxsKCIubnYt bm9EYXRhIikuZGF0YShbVF0pO3JldHVybiBCLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Iik9Ci5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0 LWFuY2hvciIsIm1pZD0KZGxlIiksQi5hdHRyKCJ4Iix1LmxlZnQrRC8yKS5hdHRyKCJ5Iix1LnRv cCtQLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9PQopLE19QS5zZWxlY3RBbGwoIi5udi1u b0RhdGEiKS5yZW1vdmUoKSxiPTNEdC54U2NhbGUoKSx3PTNEdC55U2NhbGUoKTt2YXIgaj0KPTNE QS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zdGFja2VkQXJlYUNoYXJ0IikuZGF0YShbeV0pLEY9 M0RqLmVudGVyKCkuYXBwPQplbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1z dGFja2VkQXJlYUNoYXJ0IikuYXBwZW5kKCJnIiksST0zRGo9Ci5zZWxlY3QoImciKTtGLmFwcGVu ZCgicmVjdCIpLnN0eWxlKCJvcGFjaXR5IiwwKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIj0K LCJudi14IG52LWF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlz IiksRi5hcHBlbmQoImciKS5hPQp0dHIoImNsYXNzIiwibnYtc3RhY2tlZFdyYXAiKSxGLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEY9Ci5hcHBlbmQoImciKS5hdHRy KCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dj0KLWludGVyYWN0aXZlIiksSS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsRCkuYXR0cigi aGVpZ2h0IixQKTtpZihoKXt2YXIgPQpxPTNEYz9ELUM6RDtpLndpZHRoKHEpLEkuc2VsZWN0KCIu bnYtbGVnZW5kV3JhcCIpLmRhdHVtKHkpLmNhbGwoaSksdS50b3AhPQo9M0RpLmhlaWdodCgpJiYo dS50b3A9M0RpLmhlaWdodCgpLFA9M0QoZnx8cGFyc2VJbnQoQS5zdHlsZSgiaGVpZ2h0IikpfHw0 MDA9CiktdS50b3AtdS5ib3R0b20pLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRy YW5zZm9ybSIsInRyYW5zbGF0ZSgiKz0KKEQtcSkrIiwiKyAtdS50b3ArIikiKX1pZihjKXt2YXIg Uj0zRFt7a2V5Okwuc3RhY2tlZHx8IlN0YWNrZWQiLG1ldGFLZXk6IlN0PQphY2tlZCIsZGlzYWJs ZWQ6dC5zdHlsZSgpIT0zRCJzdGFjayIsc3R5bGU6InN0YWNrIn0se2tleTpMLnN0cmVhbXx8IlN0 cmVhbSI9CixtZXRhS2V5OiJTdHJlYW0iLGRpc2FibGVkOnQuc3R5bGUoKSE9M0Qic3RyZWFtIixz dHlsZToic3RyZWFtIn0se2tleTpMLmV4cD0KYW5kZWR8fCJFeHBhbmRlZCIsbWV0YUtleToiRXhw YW5kZWQiLGRpc2FibGVkOnQuc3R5bGUoKSE9M0QiZXhwYW5kIixzdHlsZToiPQpleHBhbmQifSx7 a2V5Okwuc3RhY2tfcGVyY2VudHx8IlN0YWNrICUiLG1ldGFLZXk6IlN0YWNrX1BlcmNlbnQiLGRp c2FibGVkOnQ9Ci5zdHlsZSgpIT0zRCJzdGFja19wZXJjZW50IixzdHlsZToic3RhY2tfcGVyY2Vu dCJ9XTtDPTNEay5sZW5ndGgvMyoyNjAsUj0zRD0KUi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJu IGsuaW5kZXhPZihlLm1ldGFLZXkpIT0zRD0zRC0xfSkscy53aWR0aChDKS5jb2xvPQpyKFsiIzQ0 NCIsIiM0NDQiLCIjNDQ0Il0pLEkuc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oUiku Y2FsbChzKSx1LnQ9Cm9wIT0zRE1hdGgubWF4KHMuaGVpZ2h0KCksaS5oZWlnaHQoKSkmJih1LnRv cD0zRE1hdGgubWF4KHMuaGVpZ2h0KCksaS5oZWlnaD0KdCgpKSxQPTNEKGZ8fHBhcnNlSW50KEEu c3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3QoIi5uPQp2LWNv bnRyb2xzV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC11LnRvcCsiKSIp fWouYXR0cigidHJhbnM9CmZvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiks diYmSS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKD0KInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK0QrIiwwKSIpLG0mJihvLndpZHRoKEQpLmhlaWdodChQKS5tYXJnaW4oe2xlZnQ6dS5sPQpl ZnQsdG9wOnUudG9wfSkuc3ZnQ29udGFpbmVyKEEpLnhTY2FsZShiKSxqLnNlbGVjdCgiLm52LWlu dGVyYWN0aXZlIikuY2FsbCg9Cm8pKSx0LndpZHRoKEQpLmhlaWdodChQKTt2YXIgVT0zREkuc2Vs ZWN0KCIubnYtc3RhY2tlZFdyYXAiKS5kYXR1bSh5KTtVLmNhbD0KbCh0KSxwJiYobi5zY2FsZShi KS50aWNrcyhELzEwMCkudGlja1NpemUoLVAsMCksSS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5h PQp0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrUCsiKSIpLEkuc2VsZWN0KCIubnYteC5u di1heGlzIikuY2FsbChuKSksZCY9CiYoci5zY2FsZSh3KS50aWNrcyh0Lm9mZnNldCgpPTNEPTNE IndpZ2dsZSI/MDpQLzM2KS50aWNrU2l6ZSgtRCwwKS5zZXRUaWNrRj0Kb3JtYXQodC5zdHlsZSgp PTNEPTNEImV4cGFuZCJ8fHQuc3R5bGUoKT0zRD0zRCJzdGFja19wZXJjZW50Ij9kMy5mb3JtYXQo IiUiPQopOkUpLEkuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksdC5kaXNwYXRjaC5v bigiYXJlYUNsaWNrLnRvZ2dsZSIsZnU9Cm5jdGlvbihlKXt5LmZpbHRlcihmdW5jdGlvbihlKXty ZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aD0zRD0zRD0zRDE/eS5mb3JFYT0KY2goZnVuY3Rpb24o ZSl7ZS5kaXNhYmxlZD0zRCExfSk6eS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0z RG4hPTNEPQplLnNlcmllc0luZGV4fSksUy5kaXNhYmxlZD0zRHkubWFwKGZ1bmN0aW9uKGUpe3Jl dHVybiEhZS5kaXNhYmxlZH0pLE4uc3RhdGU9CkNoYW5nZShTKSxNLnVwZGF0ZSgpfSksaS5kaXNw YXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe1MuZGlzYWJsZWQ9Cj0zRGUuZGlzYWJs ZWQsTi5zdGF0ZUNoYW5nZShTKSxNLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xp Y2siLGZ1bj0KY3Rpb24oZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47Uj0zRFIubWFwKGZ1bmN0 aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPTNEPQohMCxlfSksZS5kaXNhYmxlZD0zRCExLHQuc3R5 bGUoZS5zdHlsZSksUy5zdHlsZT0zRHQuc3R5bGUoKSxOLnN0YXRlQ2hhbmdlKFM9CiksTS51cGRh dGUoKX0pLG8uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xl YXJIaWdobGlnaD0KdHMoKTt2YXIgcyxhLGYsYz0zRFtdO3kuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUuc2VyaWVzSW5kZXg9M0R0LCFlLmRpPQpzYWJsZWR9KS5mb3JFYWNoKGZ1bmN0aW9u KG4scil7YT0zRGUuaW50ZXJhY3RpdmVCaXNlY3Qobi52YWx1ZXMsaS5wb2ludFhWYWw9CnVlLE0u eCgpKSx0LmhpZ2hsaWdodFBvaW50KHIsYSwhMCk7dmFyIG89M0RuLnZhbHVlc1thXTtpZih0eXBl b2Ygbz0zRD0zRCJ1bj0KZGVmaW5lZCIpcmV0dXJuO3R5cGVvZiBzPTNEPTNEInVuZGVmaW5lZCIm JihzPTNEbyksdHlwZW9mIGY9M0Q9M0QidW5kZWZpbmVkPQoiJiYoZj0zRE0ueFNjYWxlKCkoTS54 KCkobyxhKSkpO3ZhciB1PTNEdC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/by5kaXNwbGF5Lnk9CjpN LnkoKShvLGEpO2MucHVzaCh7a2V5Om4ua2V5LHZhbHVlOnUsY29sb3I6bChuLG4uc2VyaWVzSW5k ZXgpLHN0YWNrZWRWYWx1ZT0KOm8uZGlzcGxheX0pfSksYy5yZXZlcnNlKCk7aWYoYy5sZW5ndGg+ Mil7dmFyIGg9M0RNLnlTY2FsZSgpLmludmVydChpLm1vdXNlPQpZKSxwPTNESW5maW5pdHksZD0z RG51bGw7Yy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aD0zRE1hdGguYWJzKGgpO3ZhciBuPTNETWE9 CnRoLmFicyhlLnN0YWNrZWRWYWx1ZS55MCkscj0zRE1hdGguYWJzKGUuc3RhY2tlZFZhbHVlLnkp O2lmKGg+PTNEbiYmaDw9M0RyKz0Kbil7ZD0zRHQ7cmV0dXJufX0pLGQhPTNEbnVsbCYmKGNbZF0u aGlnaGxpZ2h0PTNEITApfXZhciB2PTNEbi50aWNrRm9ybWF0KCkoPQpNLngoKShzLGEpKSxtPTNE dC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZDMuZm9ybWF0KCIu MSU9CiIpKGUpfTpmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtYXQoKShlKX07by50b29s dGlwLnBvc2l0aW9uKHtsZWZ0OmYrdT0KLmxlZnQsdG9wOmkubW91c2VZK3UudG9wfSkuY2hhcnRD b250YWluZXIoXy5wYXJlbnROb2RlKS5lbmFibGVkKGcpLnZhbHVlRm9yPQptYXR0ZXIobSkuZGF0 YSh7dmFsdWU6dixzZXJpZXM6Y30pKCksby5yZW5kZXJHdWlkZUxpbmUoZil9KSxvLmRpc3BhdGNo Lm9uKCI9CmVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZSgpLHQuY2xl YXJIaWdobGlnaHRzKCl9KSxOLm9uKCJ0bz0Kb2x0aXBTaG93IixmdW5jdGlvbihlKXtnJiZPKGUs Xy5wYXJlbnROb2RlKX0pLE4ub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlPQope3R5cGVvZiBl LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiZ5Lmxlbmd0aD0zRD0zRD0zRGUuZGlzYWJsZWQubGVu Z3RoJiYoeS49CmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNEZS5kaXNhYmxlZFtu XX0pLFMuZGlzYWJsZWQ9M0RlLmRpc2FibGVkKT0KLHR5cGVvZiBlLnN0eWxlIT0zRCJ1bmRlZmlu ZWQiJiZ0LnN0eWxlKGUuc3R5bGUpLE0udXBkYXRlKCl9KX0pLE19dmFyIHQ9M0RlPQoubW9kZWxz LnN0YWNrZWRBcmVhKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9 M0RlLm1vZGVscy49CmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxvPTNEZS5pbnRlcmFj dGl2ZUd1aWRlbGluZSgpLHU9M0R7dG9wOjMwLHJpZz0KaHQ6MjUsYm90dG9tOjUwLGxlZnQ6NjB9 LGE9M0RudWxsLGY9M0RudWxsLGw9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigpLGM9M0QhPQowLGg9 M0QhMCxwPTNEITAsZD0zRCEwLHY9M0QhMSxtPTNEITEsZz0zRCEwLHk9M0RmdW5jdGlvbihlLHQs bixyLGkpe3JldHVybiI9CjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgb24gIit0KyI8L3A+In0s Yix3LEU9M0RkMy5mb3JtYXQoIiwuMmYiKSxTPTNEe3N0eT0KbGU6dC5zdHlsZSgpfSx4PTNEbnVs bCxUPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsTj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvPQp3 IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksQz0zRDI1MCxrPTNE WyJTdGFja2VkIiwiU3RyZWE9Cm0iLCJFeHBhbmRlZCJdLEw9M0R7fSxBPTNEMDtuLm9yaWVudCgi Ym90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllbnQodj8icj0KaWdodCI6ImxlZnQiKSxzLnVw ZGF0ZVN0YXRlKCExKTt2YXIgTz0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSsocy5v PQpmZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRpY2tG b3JtYXQoKSh0LngoKShpLnBvaW49CnQsaS5wb2ludEluZGV4KSksZj0zRHIudGlja0Zvcm1hdCgp KHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRHkoaS5zZT0Kcmllcy5rZXksYSxmLGks TSk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1 cm4gPQp0LmRpc3BhdGNoLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5w b3NbMF0rdS5sZWZ0LGUucG9zWzFdK3U9Ci50b3BdLE4udG9vbHRpcFNob3coZSl9KSx0LmRpc3Bh dGNoLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSD0KaWRlKGUpfSksTi5v bigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7ZyYmZS50b29sdGlwLmNsZWFudXAoKX0pLE0uZGlz cGF0Y2g9Cj0zRE4sTS5zdGFja2VkPTNEdCxNLmxlZ2VuZD0zRGksTS5jb250cm9scz0zRHMsTS54 QXhpcz0zRG4sTS55QXhpcz0zRHIsTS5pbj0KdGVyYWN0aXZlTGF5ZXI9M0RvLGQzLnJlYmluZChN LHQsIngiLCJ5Iiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInhEb21haW4iPQosInlEb21haW4i LCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiaW50ZXJhY3RpdmUiLCJ1c2VWb3Jvbm9p Iiwib2Zmc2U9CnQiLCJvcmRlciIsInN0eWxlIiwiY2xpcEVkZ2UiLCJmb3JjZVgiLCJmb3JjZVki LCJmb3JjZVNpemUiLCJpbnRlcnBvbGF0ZSIpLD0KTS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25z RnVuYy5iaW5kKE0pLE0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxl bmd0aD8odS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6dS50b3AsdS5y aWdodD0zRHR5cGU9Cm9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUu Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bj0KZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0 b20sdS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dS5sPQplZnQs TSk6dX0sTS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNE ZSxNKTphfSxNLmhlaWc9Cmh0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0RlLE0pOmZ9LE0uY29sb3I9M0RmdW5jdGlvbihuKT0Ke3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZS51dGlscy5nZXRDb2xvcihuKSxpLmNvbG9yKGwpLHQuY29sb3IobCksTSk6PQps fSxNLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhj PTNEZSxNKTpjfSxNLnNob3c9CkxlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhoPTNEZSxNKTpofSxNLnNob3dYQXhpcz0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHA9M0RlLE0pOnB9LE0uc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0 PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsTSk6ZH0sTS5yaWdodEFsaWduWUF4aXM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyh2PTNEZSxyLm9yaWVudChlPyJy aWdodCI6ImxlZnQiKSxNKTp2fSxNLnVzZUludGVyYWN0aXZlR3VpZD0KZWxpbmU9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsZT0zRD0zRD0zRCEwJiYoTS5pbnRl cmFjPQp0aXZlKCExKSxNLnVzZVZvcm9ub2koITEpKSxNKTptfSxNLnRvb2x0aXA9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmw9CmVuZ3RoPyh5PTNEZSxNKTp5fSxNLnRvb2x0aXBzPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9M0RlLD0KTSk6Z30sTS50b29s dGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxN KTp5fSxNPQouc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0z RGUsTSk6U30sTS5kZWZhdWx0U3RhdGU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyh4PTNEZSxNKTp4fSxNLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KFQ9M0RlLE0pOlR9LE0udHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24o ZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oQT0zRGUsTSk6QX0sTS5jb250cm9sc0RhdGE9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnQ9CnMubGVuZ3RoPyhrPTNEZSxNKTprfSxNLmNv bnRyb2xMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KP3R5cGVv ZiBlIT0zRCJvYmplY3QiP0w6KEw9M0RlLE0pOkx9LHIuc2V0VGlja0Zvcm1hdD0zRHIudGlja0Zv cm1hdCxyLnRpY2tGPQpvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhFPTNEZSxyKTpFfSxNfX0oKSxkZWZpbmUoInBsdWc9CmluL3BsdWdpbnMvbnZkMy9udi5kMyIs ZnVuY3Rpb24oKXt9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZj0KaWci LFsicGx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhdWx0IiwicGx1Z2luL3BsdWdpbnMvbnZkMy9udi5k MyJdLGZ1bmN0aW9uKGUpPQp7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLGNhdGVn b3J5OiIiLGxpYnJhcnk6Ik5WRDMiLHRhZzoic3ZnIixrZXk9CndvcmRzOiJzbWFsbCJ9KX0pLGRl ZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2Jhci9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udj0K ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0 aXRsZToiUmVndWxhciIsY2F0PQplZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRs ZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2E9CnV0bzohMCxpc191bmlxdWU6 ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWZp bj0KZSgicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIsWyJwbHVnaW4vY2hh cnRzL252ZDMvY29tbW9uL2NvbmZpPQpnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEw LHt9LGUse3RpdGxlOiJTdGFja2VkIixjYXRlZ29yeToiQmFyIGRpYWc9CnJhbXMiLGNvbHVtbnM6 e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191 bmlxdT0KZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19 KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0PQpzL252ZDMvYmFyX2hvcml6b250YWwvY29uZmlnIixb InBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb249CihlKXtyZXR1cm4g JC5leHRlbmQoITAse30sZSx7dGl0bGU6Ikhvcml6b250YWwiLGNhdGVnb3J5OiJCYXIgZGlhZ3Jh bXMiLHNldD0KdGluZ3M6e3hfYXhpc190eXBlOntpbml0OiJoaWRlIn19LGNvbHVtbnM6e3g6e3Rp dGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfPQpsYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1 ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiE9CjB9fX0pfSks ZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX2hvcml6b250YWxfc3RhY2tlZC9jb25maWci LFsicGx1Z2luLz0KY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVy biAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiU3RhPQpja2VkIGhvcml6b250YWwiLGNhdGVnb3J5 OiJCYXIgZGlhZ3JhbXMiLHNldHRpbmdzOnt4X2F4aXNfdHlwZTp7aW5pdDoiaGlkZSI9Cn19LGNv bHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzoh MCxpc191bmlxdWU6IT0KMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmlj OiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9uPQp2ZDMvbGluZV9mb2N1cy9jb25maWci LFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXQ9CnVy biAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiTGluZSB3aXRoIGZvY3VzIixjYXRlZ29yeToiT3Ro ZXJzIix6b29tYWJsZToibj0KYXRpdmUiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgt YXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxPQp1ZTohMH0seTp7dGl0bGU6IlZh bHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXI9 CnRzL252ZDMvcGllL2NvbmZpZyIsWyJwbHVnaW4vcGx1Z2lucy9udmQzL252LmQzIl0sZnVuY3Rp b24oKXtyZXR1cm4gJC5leHRlbj0KZCghMCx7fSx7dGl0bGU6IlBpZSBjaGFydCIsY2F0ZWdvcnk6 IkFyZWEgY2hhcnRzIixsaWJyYXJ5OiJOVkQzIix0YWc6InN2ZyIsPQprZXl3b3Jkczoic21hbGwi LGNvbHVtbnM6e2xhYmVsOnt0aXRsZToiTGFiZWxzIixpc19sYWJlbDohMCxpc19hdXRvOiEwfSx5 Ons9CnRpdGxlOiJWYWx1ZXMiLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7bWFpbl9zZXBhcmF0 b3I6e3R5cGU6InNlcGFyYXRvciIsdD0KaXRsZToiUGllIGNoYXJ0IHNldHRpbmdzIn0sZG9udXRf cmF0aW86e3RpdGxlOiJEb251dCByYXRpbyIsaW5mbzoiRGV0ZXJtaW5lPQogaG93IGxhcmdlIHRo ZSBkb251dCBob2xlIHdpbGwgYmUuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjAuNSIsZGF0YTpbe2xh YmVsOiI9CjUwJSIsdmFsdWU6IjAuNSJ9LHtsYWJlbDoiMjUlIix2YWx1ZToiMC4yNSJ9LHtsYWJl bDoiMTAlIix2YWx1ZToiMC4xMCJ9LHtsYT0KYmVsOiIwJSIsdmFsdWU6IjAifV19LHNob3dfbGVn ZW5kOnt0aXRsZToiU2hvdyBsZWdlbmQiLGluZm86IldvdWxkIHlvdSBsaWtlPQogdG8gYWRkIGEg bGVnZW5kPyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRhOlt7bGFiZWw6Illl cyIsdmFsdWU9CjoidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX0sbGFiZWxfc2Vw YXJhdG9yOnt0eXBlOiJzZXBhcmF0b3IiLHRpdD0KbGU6IkxhYmVsIHNldHRpbmdzIn0sbGFiZWxf dHlwZTp7dGl0bGU6IkRvbnV0IGxhYmVsIixpbmZvOiJXaGF0IHdvdWxkIHlvdSBsPQppa2UgdG8g c2hvdyBmb3IgZWFjaCBzbGljZT8iLHR5cGU6InNlbGVjdCIsaW5pdDoicGVyY2VudCIsZGF0YTpb e2xhYmVsOiItLSA9Ck5vdGhpbmcgLS0iLHZhbHVlOiJoaWRlIixoaWRlOiJsYWJlbF9vdXRzaWRl In0se2xhYmVsOiJMYWJlbCBjb2x1bW4iLHZhbHVlOj0KImtleSIsc2hvdzoibGFiZWxfb3V0c2lk ZSJ9LHtsYWJlbDoiVmFsdWUgY29sdW1uIix2YWx1ZToidmFsdWUiLHNob3c6ImxhYmVsPQpfb3V0 c2lkZSJ9LHtsYWJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InBlcmNlbnQiLHNob3c6ImxhYmVsX291 dHNpZGUifV19LGxhYmU9Cmxfb3V0c2lkZTp7dGl0bGU6IlNob3cgb3V0c2lkZSIsaW5mbzoiV291 bGQgeW91IGxpa2UgdG8gc2hvdyBsYWJlbHMgb3V0c2lkZT0KIHRoZSBkb251dD8iLHR5cGU6InJh ZGlvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlPQoi fSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFsc2UifV19LHVzZV9wYW5lbHM6e2luaXQ6InRydWUiLGhp ZGU6ITB9fX0pfSksZGVmaW49CmUoInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mdWxs L2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uLz0KY29uZmlnIl0sZnVuY3Rpb24o ZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJFeHBhbmRlZCIsem9vbWFibGU6ITAs PQpjYXRlZ29yeToiQXJlYSBjaGFydHMiLGtleXdvcmRzOiJkZWZhdWx0IHNtYWxsIixjb2x1bW5z Ont4Ont0aXRsZToiVmFsdWVzIGY9Cm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxp c191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcz0KIixpc19udW1lcmljOiEw fX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhX3N0cmVhbS9jb25m aWciPQosWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHs9CnRpdGxlOiJTdHJlYW0iLGNhdGVnb3J5OiJBcmVhIGNo YXJ0cyIsem9vbWFibGU6ITAsa2V5d29yZHM6ImRlZmF1bHQgc21hbGwiLD0Kc2hvd21heG1pbjoh MCxjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1 dG86ITAsPQppc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVt ZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWc9CmluL2NoYXJ0cy9udmQzL2hpc3RvZ3JhbS9jb25m aWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdD0KaW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSGlzdG9ncmFtIixjYXRlZ29yeToiRGF0YSBw cm9jZXNzaW5nPQogKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1 dGU6Imhpc3RvZ3JhbSIsa2V5d29yZHM6InNtYWw9CmwgbWVkaXVtIGxhcmdlIixjb2x1bW5zOnt5 Ont0aXRsZToiT2JzZXJ2YXRpb25zIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6ez0KeF9heGlz X2xhYmVsOntpbml0OiJWYWx1ZXMifSx5X2F4aXNfbGFiZWw6e2luaXQ6IkRlbnNpdHkifSx5X2F4 aXNfdHlwZTp7aW5pPQp0OiJmIn0seV9heGlzX3ByZWNpc2lvbjp7aW5pdDoiLjIifX19KX0pLGRl ZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2xpbmUvY289Cm5maWciLFsicGx1Z2luL2NoYXJ0cy9u dmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAsez0KfSxl LHt0aXRsZToiTGluZSBjaGFydCIsY2F0ZWdvcnk6Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1u czp7eDp7dGl0bGU6IlZhPQpsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEwLGlzX2F1dG86ITAs aXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmFsdWVzIGZvciA9CnktYXhpcyIsaXNfbnVtZXJpYzoh MH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9zY2F0dGVyL2NvbmZpZyIsWyJwbD0K dWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0 ZW5kKCEwLHt9LGUse3RpdGxlPQo6IlNjYXR0ZXIgcGxvdCIsY2F0ZWdvcnk6Ik90aGVycyIsem9v bWFibGU6ITAsY29sdW1uczp7eDp7dGl0bGU6IlZhbHVlcyBmb3I9CiB4LWF4aXMiLGlzX251bWVy aWM6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxk ZT0KZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhL2NvbmZpZyIsWyJwbHVnaW4v Y2hhcnRzL252ZDMvY29tbW9uL2NvPQpuZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5k KCEwLHt9LGUse3RpdGxlOiJSZWd1bGFyIix6b29tYWJsZTohMCxjYXQ9CmVnb3J5OiJBcmVhIGNo YXJ0cyIsa2V5d29yZHM6ImRlZmF1bHQgc21hbGwiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMg Zm9yID0KeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0 bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpPQpzX251bWVyaWM6ITB9fX0pfSksZGVmaW5lKCJwbHVn aW4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIixbInBsdWdpbi9jaGE9CnJ0cy9mb3Jtcy9k ZWZhdWx0Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiIiLGNh dGVnb3J5Oj0KIiIsbGlicmFyeToianFQbG90Iix0YWc6ImRpdiIsem9vbWFibGU6ITAsa2V5d29y ZHM6Im1lZGl1bSIsc2V0dGluZ3M6e3NlcGFyPQphdG9yX2dyaWQ6e3RpdGxlOiJHcmlkcyIsdHlw ZToic2VwYXJhdG9yIn0seF9heGlzX2dyaWQ6e3RpdGxlOiJBeGlzIGdyaWQiLGk9Cm5mbzoiV291 bGQgeW91IGxpa2UgdG8gc2hvdyBncmlkIGxpbmVzIGZvciB0aGUgWCBheGlzPyIsdHlwZToicmFk aW9idXR0b24iLD0KaW5pdDoiZmFsc2UiLGRhdGE6W3tsYWJlbDoiT24iLHZhbHVlOiJ0cnVlIn0s e2xhYmVsOiJPZmYiLHZhbHVlOiJmYWxzZSJ9XX0sPQp5X2F4aXNfZ3JpZDp7dGl0bGU6IkF4aXMg Z3JpZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBncmlkIGxpbmVzIGZvciA9CnRoZSBZ IGF4aXM/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoidHJ1ZSIsZGF0YTpbe2xhYmVsOiJPbiIs dmFsdWU6InRydWUifT0KLHtsYWJlbDoiT2ZmIix2YWx1ZToiZmFsc2UifV19fX0pfSksZGVmaW5l KCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9iYXIvY29uZmlnPQoiLFsicGx1Z2luL2NoYXJ0cy9qcXBs b3QvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSw9CmUs e3RpdGxlOiJSZWd1bGFyIixjYXRlZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1bW5zOnt4Ont0aXRs ZToiVmFsdWVzIGZvciB4LT0KYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohMCxpc191bmlxdWU6 ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfPQpudW1lcmljOiEwfX19KX0pLGRl ZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvbGluZS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy89 CmpxcGxvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9 LGUse3RpdGxlOiJMaW5lIGNoYT0KcnQiLGNhdGVnb3J5OiJPdGhlcnMiLGNvbHVtbnM6e3g6e3Rp dGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfPQphdXRvOiEwLGlzX3VuaXF1 ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRl Zmk9Cm5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9zY2F0dGVyL2NvbmZpZyIsWyJwbHVnaW4vY2hh cnRzL2pxcGxvdC9jb21tb24vY29uZj0KaWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQo ITAse30sZSx7dGl0bGU6IlNjYXR0ZXIgcGxvdCIsY2F0ZWdvcnk6Ik90PQpoZXJzIixjb2x1bW5z Ont4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGxlOiJW YWx1ZXM9CiBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6e3hfYXhpc19ncmlk Ontpbml0OiJ0cnVlIn19fSl9KSxkZWZpbj0KZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvYm94cGxv dC9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpPQpnIl0sZnVuY3Rp b24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJCb3ggcGxvdCIsY2F0ZWdvcnk6 IkRhdGEgcHI9Cm9jZXNzaW5nIChyZXF1aXJlcyAnY2hhcnRzJyB0b29sIGZyb20gVG9vbHNoZWQp IixsaWJyYXJ5OiJqcVBsb3QiLHRhZzoiZGl2Ij0KLGV4ZWN1dGU6ImJveHBsb3QiLGtleXdvcmRz OiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3k6e3RpdGxlOiJPYnNlcnZhPQp0aW9ucyIs aXNfbnVtZXJpYzohMH19LHNldHRpbmdzOntzaG93X2xlZ2VuZDp7aW5pdDoiZmFsc2UifX19KX0p LGRlZmluZSgicGw9CnVnaW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlzY3JldGUvY29uZmln IixbInBsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbj0KL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3Jl dHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiRGlzY3JldGUgSGlzdG9ncmFtIixjPQphdGVn b3J5OiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hl ZCkiLGV4ZWN1dGU6Img9CmlzdG9ncmFtZGlzY3JldGUiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0g bGFyZ2UiLGNvbHVtbnM6e3g6e3RpdGxlOiJPYnNlcnZhdD0KaW9ucyIsaXNfbGFiZWw6ITB9fSxz ZXR0aW5nczp7eF9heGlzX2xhYmVsOntpbml0OiJCcmVha3MifSx5X2F4aXNfbGFiZWw6e2luPQpp dDoiRGVuc2l0eSJ9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwL2Nv bmZpZyIsWyJwbHVnaW4vY2g9CmFydHMvZm9ybXMvZGVmYXVsdCJdLGZ1bmN0aW9uKGUpe3JldHVy biAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSGVhdG1hcCIsYz0KYXRlZ29yeToiT3RoZXJzIixs aWJyYXJ5OiJDdXN0b20iLHRhZzoic3ZnIixrZXl3b3Jkczoic21hbGwiLHpvb21hYmxlOiEwLGNv PQpsdW1uczp7eDp7dGl0bGU6IkNvbHVtbiBsYWJlbHMiLGlzX2xhYmVsOiEwLGlzX251bWVyaWM6 ITAsaXNfdW5pcXVlOiEwfSx5Ons9CnRpdGxlOiJSb3cgbGFiZWxzIixpc19sYWJlbDohMCxpc19u dW1lcmljOiEwLGlzX3VuaXF1ZTohMH0sejp7dGl0bGU6Ik9ic2Vydj0KYXRpb24iLGlzX251bWVy aWM6ITB9fSxzZXR0aW5nczp7dXNlX3BhbmVsczp7aW5pdDoidHJ1ZSIsaGlkZTohMH0sY29sb3Jf c2V0PQo6e3RpdGxlOiJDb2xvciBzY2hlbWUiLGluZm86IlNlbGVjdCBhIGNvbG9yIHNjaGVtZSBm b3IgeW91ciBoZWF0bWFwIix0eXBlOiI9CnNlbGVjdCIsaW5pdDoiamV0IixkYXRhOlt7bGFiZWw6 IkNvbGQtdG8tSG90Iix2YWx1ZToiaG90In0se2xhYmVsOiJDb29sIix2YT0KbHVlOiJjb29sIn0s e2xhYmVsOiJDb3BwZXIiLHZhbHVlOiJjb3BwZXIifSx7bGFiZWw6IkdyYXkgc2NhbGUiLHZhbHVl OiJncmF5PQoifSx7bGFiZWw6IkpldCIsdmFsdWU6ImpldCJ9LHtsYWJlbDoiTm8tR3JlZW4iLHZh bHVlOiJub19ncmVlbiJ9LHtsYWJlbDoiT2M9CmVhbiIsdmFsdWU6Im9jZWFuIn0se2xhYmVsOiJQ b2xhciIsdmFsdWU6InBvbGFyIn0se2xhYmVsOiJSZWQtdG8tR3JlZW4iLHZhbD0KdWU6InJlZGdy ZWVuIn0se2xhYmVsOiJSZWQtdG8tZ3JlZW4gKHNhdHVyYXRlZCkiLHZhbHVlOiJyZWQyZ3JlZW4i fSx7bGFiZWw6PQoiUmVsaWVmIix2YWx1ZToicmVsaWVmIn0se2xhYmVsOiJTZWlzbW9ncmFwaCIs dmFsdWU6InNlaXMifSx7bGFiZWw6IlNlYWxhbmQ9CiIsdmFsdWU6InNlYWxhbmQifSx7bGFiZWw6 IlNwbGl0Iix2YWx1ZToic3BsaXQifSx7bGFiZWw6Ild5c2l3eWciLHZhbHVlOiJ3eT0Kc2l3eWci fV19LHVybF90ZW1wbGF0ZTp7dGl0bGU6IlVybCB0ZW1wbGF0ZSIsaW5mbzoiRW50ZXIgYSB1cmwg dG8gbGluayB0aGUgPQpsYWJlbHMgd2l0aCBleHRlcm5hbCBzb3VyY2VzLiBVc2UgX19MQUJFTF9f IGFzIHBsYWNlaG9sZGVyLiIsdHlwZToidGV4dCIsaW49Cml0OiIiLHBsYWNlaG9sZGVyOiJodHRw Oi8vc29tZXVybC5jb20/aWQ9M0RfX0xBQkVMX18ifX19KX0pLGRlZmluZSgicGx1Z2luLz0KY2hh cnRzL290aGVycy9oZWF0bWFwX2NsdXN0ZXIvY29uZmlnIixbInBsdWdpbi9jaGFydHMvb3RoZXJz L2hlYXRtYXAvY29uZmlnPQoiXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7 dGl0bGU6IkNsdXN0ZXJlZCBIZWF0bWFwIixjYXRlZ29yeTo9CiJEYXRhIHByb2Nlc3NpbmcgKHJl cXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6ImhlYXRtYXAiLD0K a2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSJ9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy90 eXBlcyIsWyJwbHVnaW4vY2hhPQpydHMvbnZkMy9iYXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9u dmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIsInBsdWdpbi9jaGFydHM9Ci9udmQzL2Jhcl9ob3Jpem9u dGFsL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRhbF9zdGFja2VkL2Nv bj0KZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2xpbmVfZm9jdXMvY29uZmlnIiwicGx1Z2luL2No YXJ0cy9udmQzL3BpZS9jb25maWciPQosInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9m dWxsL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9zdGFja2VkYXI9CmVhX3N0cmVhbS9jb25m aWciLCJwbHVnaW4vY2hhcnRzL252ZDMvaGlzdG9ncmFtL2NvbmZpZyIsInBsdWdpbi9jaGFydHMv bnZkMz0KL2xpbmUvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3NjYXR0ZXIvY29uZmlnIiwi cGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrPQplZGFyZWEvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9q cXBsb3QvYmFyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90L2xpbmU9Ci9jb25maWciLCJw bHVnaW4vY2hhcnRzL2pxcGxvdC9zY2F0dGVyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanFwbG90 L2JveHBsbz0KdC9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlzY3Jl dGUvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9vPQp0aGVycy9oZWF0bWFwL2NvbmZpZyIsInBsdWdp bi9jaGFydHMvb3RoZXJzL2hlYXRtYXBfY2x1c3Rlci9jb25maWciXSxmdW5jdGk9Cm9uKGUsdCxu LHIsaSxzLG8sdSxhLGYsbCxjLGgscCxkLHYsbSxnLHkpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5l eHRlbmQoe2RlZj0KYXVsdHM6e252ZDNfYmFyOmUsbnZkM19iYXJfc3RhY2tlZDp0LG52ZDNfYmFy X2hvcml6b250YWw6bixudmQzX2Jhcl9ob3Jpem9uPQp0YWxfc3RhY2tlZDpyLG52ZDNfbGluZV9m b2N1czppLG52ZDNfc3RhY2tlZGFyZWE6YyxudmQzX3N0YWNrZWRhcmVhX2Z1bGw6byw9Cm52ZDNf c3RhY2tlZGFyZWFfc3RyZWFtOnUsbnZkM19waWU6cyxudmQzX2xpbmU6ZixudmQzX3NjYXR0ZXI6 bCxudmQzX2hpc3RvZz0KcmFtOmEsanFwbG90X2JhcjpoLGpxcGxvdF9oaXN0b2dyYW1fZGlzY3Jl dGU6bSxqcXBsb3RfbGluZTpwLGpxcGxvdF9zY2F0dGVyPQo6ZCxqcXBsb3RfYm94cGxvdDp2LG90 aGVyc19oZWF0bWFwOmcsb3RoZXJzX2hlYXRtYXBfY2x1c3Rlcjp5fX0pfSksZGVmaW5lKCI9CnBs dWdpbi9hcHAiLFsibXZjL3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLXBvcnRsZXQiLCJtdmMvdWkv dWktbWlzYyIsInV0aWxzLz0KdXRpbHMiLCJwbHVnaW4vbGlicmFyeS9qb2JzIiwicGx1Z2luL2xp YnJhcnkvZGF0YXNldHMiLCJwbHVnaW4vbGlicmFyeS9zdG9yPQphZ2UiLCJ1dGlscy9kZWZlcnJl ZCIsInBsdWdpbi92aWV3cy92aWV3ZXIiLCJwbHVnaW4vdmlld3MvZWRpdG9yIiwicGx1Z2luL209 Cm9kZWxzL2NvbmZpZyIsInBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbHVnaW4vY2hhcnRzL3R5cGVz Il0sZnVuY3Rpb24oZSx0LG4scj0KLGkscyxvLHUsYSxmLGwsYyxoKXtyZXR1cm4gQmFja2JvbmUu Vmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpPQpzLm9wdGlvbnM9M0R0LEdh bGF4eSYmR2FsYXh5Lm1vZGFsP3RoaXMubW9kYWw9M0RHYWxheHkubW9kYWw6dGhpcy5tb2RhbD0z RG49CmV3IGUuVmlldyx0aGlzLmNvbmZpZz0zRG5ldyBsLHRoaXMudHlwZXM9M0RuZXcgaCx0aGlz LmNoYXJ0PTNEbmV3IGMsdGhpcy5qbz0KYnM9M0RuZXcgaSh0aGlzKSx0aGlzLmRhdGFzZXRzPTNE bmV3IHModGhpcyksdGhpcy5zdG9yYWdlPTNEbmV3IG8odGhpcyksdGhpPQpzLmRlZmVycmVkPTNE bmV3IHUsdGhpcy52aWV3ZXJfdmlldz0zRG5ldyBhKHRoaXMpLHRoaXMuZWRpdG9yX3ZpZXc9M0Ru ZXcgZig9CnRoaXMpLHRoaXMuJGVsLmFwcGVuZCh0aGlzLnZpZXdlcl92aWV3LiRlbCksdGhpcy4k ZWwuYXBwZW5kKHRoaXMuZWRpdG9yX3ZpZT0Kdy4kZWwpO2lmKCF0aGlzLnN0b3JhZ2UubG9hZCgp KXRoaXMuZ28oImVkaXRvciIpO2Vsc2V7dGhpcy5nbygidmlld2VyIik7dmFyPQogbj0zRHRoaXM7 dGhpcy5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7bi5jaGFydC50cmlnZ2VyKCJyZWRyYXci KX0pfX0sZ289CjpmdW5jdGlvbihlKXskKCIudG9vbHRpcCIpLmhpZGUoKTtzd2l0Y2goZSl7Y2Fz ZSJlZGl0b3IiOnRoaXMuZWRpdG9yX3ZpZXcucz0KaG93KCksdGhpcy52aWV3ZXJfdmlldy5oaWRl KCk7YnJlYWs7Y2FzZSJ2aWV3ZXIiOnRoaXMuZWRpdG9yX3ZpZXcuaGlkZSgpLHRoPQppcy52aWV3 ZXJfdmlldy5zaG93KCl9fSxjaGFydFBhdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnNwbGl0KC9f KC4rKS8pO3JldHU9CnJuIHQubGVuZ3RoPj0zRDI/dFswXSsiLyIrdFsxXTooY29uc29sZS5kZWJ1 ZygiRkFJTEVEIEFwcDpjaGFydFBhdGgoKSAtIEludj0KYWxpZCBmb3JtYXQ6ICIrZSksdW5kZWZp bmVkKX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZSgibXZjL3VpL3Vp LW1vZGFsIixbXSxmdW5jdGlvbigpe3ZhciBlPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2VsTWFp PQpuOiJib2R5IixvcHRpb25zRGVmYXVsdDp7dGl0bGU6InVpLW1vZGFsIixib2R5OiIiLGJhY2tk cm9wOiEwLGhlaWdodDpudWxsLHc9CmlkdGg6bnVsbCxjbG9zaW5nX2V2ZW50czohMSxjbG9zaW5n X2NhbGxiYWNrOm51bGx9LGJ1dHRvbkxpc3Q6e30saW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGUpe2Um JnRoaXMuX2NyZWF0ZShlKX0sc2hvdzpmdW5jdGlvbihlKXt0aGlzLmluaXRpYWxpemUoZSksdGhp cy5vPQpwdGlvbnMuaGVpZ2h0Pyh0aGlzLiRib2R5LmNzcygiaGVpZ2h0Iix0aGlzLm9wdGlvbnMu aGVpZ2h0KSx0aGlzLiRib2R5LmNzcyg9CiJvdmVyZmxvdyIsImhpZGRlbiIpKTp0aGlzLiRib2R5 LmNzcygibWF4LWhlaWdodCIsJCh3aW5kb3cpLmhlaWdodCgpLzIpLHRoaT0Kcy5vcHRpb25zLndp ZHRoJiZ0aGlzLiRkaWFsb2cuY3NzKCJ3aWR0aCIsdGhpcy5vcHRpb25zLndpZHRoKSx0aGlzLnZp c2libGU/PQp0aGlzLiRlbC5zaG93KCk6dGhpcy4kZWwuZmFkZUluKCJmYXN0IiksdGhpcy52aXNp YmxlPTNEITB9LGhpZGU6ZnVuY3Rpb24oKXs9CnRoaXMudmlzaWJsZT0zRCExLHRoaXMuJGVsLmZh ZGVPdXQoImZhc3QiKSx0aGlzLm9wdGlvbnMuY2xvc2luZ19jYWxsYmFjayYmdD0KaGlzLm9wdGlv bnMuY2xvc2luZ19jYWxsYmFjaygpfSxlbmFibGVCdXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0 aGlzLmJ1dHRvPQpuTGlzdFtlXTt0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2Fi bGVkIiwhMSl9LGRpc2FibGVCdXR0b246ZnVuY3Q9CmlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9u TGlzdFtlXTt0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpLnByb3AoImRpc2FibGVkIj0KLCEwKX0s c2hvd0J1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTt0aGlzLiRi dXR0b25zLmZpbmQoPQoiIyIrdCkuc2hvdygpfSxoaWRlQnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0 PTNEdGhpcy5idXR0b25MaXN0W2VdO3RoaXMuJGJ1dHQ9Cm9ucy5maW5kKCIjIit0KS5oaWRlKCl9 LGdldEJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMuYnV0dG9uTGlzdFtlXTtyZT0KdHVy biB0aGlzLiRidXR0b25zLmZpbmQoIiMiK3QpfSxzY3JvbGxUb3A6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy4kYm9keS5zY3JvPQpsbFRvcCgpfSxfY3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhp czt0aGlzLm9wdGlvbnM9M0RfLmRlZmF1bHRzKGUsdGhpcy49Cm9wdGlvbnNEZWZhdWx0KSx0aGlz Lm9wdGlvbnMuYm9keT0zRD0zRCJwcm9ncmVzcyImJih0aGlzLm9wdGlvbnMuYm9keT0zRCQoJz0K PGRpdiBjbGFzcz0zRCJwcm9ncmVzcyBwcm9ncmVzcy1zdHJpcGVkIGFjdGl2ZSI+PGRpdiBjbGFz cz0zRCJwcm9ncmVzcy1iYXIgPQpwcm9ncmVzcy1iYXItaW5mbyIgc3R5bGU9M0Qid2lkdGg6MTAw JSI+PC9kaXY+PC9kaXY+JykpLHRoaXMuJGVsJiYodGhpcy4kZWw9Ci5yZW1vdmUoKSwkKGRvY3Vt ZW50KS5vZmYoImtleXVwLnVpLW1vZGFsIikpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0 ZT0KKHRoaXMub3B0aW9ucy50aXRsZSkpLHRoaXMuJGRpYWxvZz0zRHRoaXMuJGVsLmZpbmQoIi5t b2RhbC1kaWFsb2ciKSx0aGlzLiRiPQpvZHk9M0R0aGlzLiRlbC5maW5kKCIubW9kYWwtYm9keSIp LHRoaXMuJGZvb3Rlcj0zRHRoaXMuJGVsLmZpbmQoIi5tb2RhbC1mb289CnRlciIpLHRoaXMuJGJ1 dHRvbnM9M0R0aGlzLiRlbC5maW5kKCIuYnV0dG9ucyIpLHRoaXMuJGJhY2tkcm9wPTNEdGhpcy4k ZWwuZj0KaW5kKCIubW9kYWwtYmFja2Ryb3AiKSx0aGlzLiRib2R5Lmh0bWwodGhpcy5vcHRpb25z LmJvZHkpLHRoaXMub3B0aW9ucy5iYWNrPQpkcm9wfHx0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFz cygiaW4iKTtpZih0aGlzLm9wdGlvbnMuYnV0dG9ucyl7dGhpcy5idXR0b249Ckxpc3Q9M0R7fTt2 YXIgbj0zRDA7JC5lYWNoKHRoaXMub3B0aW9ucy5idXR0b25zLGZ1bmN0aW9uKGUscil7dmFyIGk9 M0QiYnV0dD0Kb24tIituKys7dC4kYnV0dG9ucy5hcHBlbmQoJCgnPGJ1dHRvbiBpZD0zRCInK2kr JyI+PC9idXR0b24+JykudGV4dChlKS5jbGljPQprKHIpKS5hcHBlbmQoIiAiKSx0LmJ1dHRvbkxp c3RbZV09M0RpfSl9ZWxzZSB0aGlzLiRmb290ZXIuaGlkZSgpOyQodGhpcy5lbE09CmFpbikuYXBw ZW5kKCQodGhpcy5lbCkpLHRoaXMub3B0aW9ucy5jbG9zaW5nX2V2ZW50cyYmKCQoZG9jdW1lbnQp Lm9uKCJrZXl1cD0KLnVpLW1vZGFsIixmdW5jdGlvbihlKXtlLmtleUNvZGU9M0Q9M0QyNyYmdC5o aWRlKCl9KSx0aGlzLiRlbC5maW5kKCIubW9kYWwtPQpiYWNrZHJvcCIpLm9uKCJjbGljayIsZnVu Y3Rpb24oKXt0LmhpZGUoKX0pKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic9CjxkaXYg Y2xhc3M9M0QidWktbW9kYWwgbW9kYWwiPjxkaXYgY2xhc3M9M0QibW9kYWwtYmFja2Ryb3AgZmFk ZSBpbiIgc3R5bGU9Cj0zRCJ6LWluZGV4OiAtMTsiPjwvZGl2PjxkaXYgY2xhc3M9M0QibW9kYWwt ZGlhbG9nIj48ZGl2IGNsYXNzPTNEIm1vZGFsLWNvbj0KdGVudCI+PGRpdiBjbGFzcz0zRCJtb2Rh bC1oZWFkZXIiPjxidXR0b24gdHlwZT0zRCJidXR0b24iIGNsYXNzPTNEImNsb3NlIiBzPQp0eWxl PTNEImRpc3BsYXk6IG5vbmU7Ij4mdGltZXM7PC9idXR0b24+PGg0IGNsYXNzPTNEInRpdGxlIj4n K2UrIjwvaDQ+IisiPC89CmRpdj4iKyc8ZGl2IGNsYXNzPTNEIm1vZGFsLWJvZHkiIHN0eWxlPTNE InBvc2l0aW9uOiBzdGF0aWM7Ij48L2Rpdj4nKyc8ZGl2ID0KY2xhc3M9M0QibW9kYWwtZm9vdGVy Ij4nKyc8ZGl2IGNsYXNzPTNEImJ1dHRvbnMiIHN0eWxlPTNEImZsb2F0OiByaWdodDsiPjwvPQpk aXY+JysiPC9kaXY+IisiPC9kaXYiKyI8L2Rpdj4iKyI8L2Rpdj4ifX0pO3JldHVybntWaWV3OmV9 fSksZnVuY3Rpb24oKXt2YXI9CiBlPTNEdGhpcyx0PTNEZS5fLG49M0RBcnJheS5wcm90b3R5cGUs cj0zRE9iamVjdC5wcm90b3R5cGUsaT0zREZ1bmN0aW9uLnBybz0KdG90eXBlLHM9M0RuLnB1c2gs bz0zRG4uc2xpY2UsdT0zRG4uY29uY2F0LGE9M0RyLnRvU3RyaW5nLGY9M0RyLmhhc093blByb3Bl PQpydHksbD0zREFycmF5LmlzQXJyYXksYz0zRE9iamVjdC5rZXlzLGg9M0RpLmJpbmQscD0zRGZ1 bmN0aW9uKGUpe2lmKGUgaW5zdGE9Cm5jZW9mIHApcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNl b2YgcCkpcmV0dXJuIG5ldyBwKGUpO3RoaXMuX3dyYXBwZWQ9M0RlfT0KO3R5cGVvZiBleHBvcnRz IT0zRCJ1bmRlZmluZWQiPyh0eXBlb2YgbW9kdWxlIT0zRCJ1bmRlZmluZWQiJiZtb2R1bGUuZXhw b3J0PQpzJiYoZXhwb3J0cz0zRG1vZHVsZS5leHBvcnRzPTNEcCksZXhwb3J0cy5fPTNEcCk6ZS5f PTNEcCxwLlZFUlNJT049M0QiMS43LjA9CiI7dmFyIGQ9M0RmdW5jdGlvbihlLHQsbil7aWYodD0z RD0zRD0zRHZvaWQgMClyZXR1cm4gZTtzd2l0Y2gobj0zRD0zRG51bGw/Mz0KOm4pe2Nhc2UgMTpy ZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0 aW9uKG4sPQpyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihu LHIsaSl7cmV0dXJuIGUuY2FsbCh0LG4sciw9CmkpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKG4s cixpLHMpe3JldHVybiBlLmNhbGwodCxuLHIsaSxzKX19cmV0dXJuIGZ1bmN0aT0Kb24oKXtyZXR1 cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtwLml0ZXJhdGVlPTNEZnVuY3Rpb24oZSx0LG4pe3Jl dHVybiBlPTNEPQo9M0RudWxsP3AuaWRlbnRpdHk6cC5pc0Z1bmN0aW9uKGUpP2QoZSx0LG4pOnAu aXNPYmplY3QoZSk/cC5tYXRjaGVzKGUpOnAucHI9Cm9wZXJ0eShlKX0scC5lYWNoPTNEcC5mb3JF YWNoPTNEZnVuY3Rpb24oZSx0LG4pe2lmKGU9M0Q9M0RudWxsKXJldHVybiBlO3Q9Cj0zRGQodCxu KTt2YXIgcixpPTNEZS5sZW5ndGg7aWYoaT0zRD0zRD0zRCtpKWZvcihyPTNEMDtyPGk7cisrKXQo ZVtyXSxyLGUpOz0KZWxzZXt2YXIgcz0zRHAua2V5cyhlKTtmb3Iocj0zRDAsaT0zRHMubGVuZ3Ro O3I8aTtyKyspdChlW3Nbcl1dLHNbcl0sZSl9cmV0PQp1cm4gZX0scC5tYXA9M0RwLmNvbGxlY3Q9 M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuW107dD0zRHAuaXQ9CmVyYXRl ZSh0LG4pO3ZhciByPTNEZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSksaT0zRChy fHxlKS5sZW5ndGgscz0KPTNEQXJyYXkoaSksbztmb3IodmFyIHU9M0QwO3U8aTt1Kyspbz0zRHI/ clt1XTp1LHNbdV09M0R0KGVbb10sbyxlKTtyZXR1cm4gPQpzfTt2YXIgdj0zRCJSZWR1Y2Ugb2Yg ZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIjtwLnJlZHVjZT0zRHAuZm9sZGw9Cj0z RHAuaW5qZWN0PTNEZnVuY3Rpb24oZSx0LG4scil7ZT0zRD0zRG51bGwmJihlPTNEW10pLHQ9M0Rk KHQsciw0KTt2YXIgaT0zRD0KZS5sZW5ndGghPTNEPTNEK2UubGVuZ3RoJiZwLmtleXMoZSkscz0z RChpfHxlKS5sZW5ndGgsbz0zRDAsdTtpZihhcmd1bWVudHMuPQpsZW5ndGg8Myl7aWYoIXMpdGhy b3cgbmV3IFR5cGVFcnJvcih2KTtuPTNEZVtpP2lbbysrXTpvKytdfWZvcig7bzxzO28rKyl1PQo9 M0RpP2lbb106byxuPTNEdChuLGVbdV0sdSxlKTtyZXR1cm4gbn0scC5yZWR1Y2VSaWdodD0zRHAu Zm9sZHI9M0RmdW5jdGlvbig9CmUsdCxuLHIpe2U9M0Q9M0RudWxsJiYoZT0zRFtdKSx0PTNEZCh0 LHIsNCk7dmFyIGk9M0RlLmxlbmd0aCE9M0Q9M0QrZS5sZW5ndD0KaCYmcC5rZXlzKGUpLHM9M0Qo aXx8ZSkubGVuZ3RoLG87aWYoYXJndW1lbnRzLmxlbmd0aDwzKXtpZighcyl0aHJvdyBuZXcgVHlw PQplRXJyb3Iodik7bj0zRGVbaT9pWy0tc106LS1zXX13aGlsZShzLS0pbz0zRGk/aVtzXTpzLG49 M0R0KG4sZVtvXSxvLGUpO3JldHU9CnJuIG59LHAuZmluZD0zRHAuZGV0ZWN0PTNEZnVuY3Rpb24o ZSx0LG4pe3ZhciByO3JldHVybiB0PTNEcC5pdGVyYXRlZSh0LG4pLD0KcC5zb21lKGUsZnVuY3Rp b24oZSxuLGkpe2lmKHQoZSxuLGkpKXJldHVybiByPTNEZSwhMH0pLHJ9LHAuZmlsdGVyPTNEcC5z ZWxlPQpjdD0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRFtdO3JldHVybiBlPTNEPTNEbnVsbD9y Oih0PTNEcC5pdGVyYXRlZSh0LG4pLHA9Ci5lYWNoKGUsZnVuY3Rpb24oZSxuLGkpe3QoZSxuLGkp JiZyLnB1c2goZSl9KSxyKX0scC5yZWplY3Q9M0RmdW5jdGlvbihlLHQsbj0KKXtyZXR1cm4gcC5m aWx0ZXIoZSxwLm5lZ2F0ZShwLml0ZXJhdGVlKHQpKSxuKX0scC5ldmVyeT0zRHAuYWxsPTNEZnVu Y3Rpb24oPQplLHQsbil7aWYoZT0zRD0zRG51bGwpcmV0dXJuITA7dD0zRHAuaXRlcmF0ZWUodCxu KTt2YXIgcj0zRGUubGVuZ3RoIT0zRD0zRCs9CmUubGVuZ3RoJiZwLmtleXMoZSksaT0zRChyfHxl KS5sZW5ndGgscyxvO2ZvcihzPTNEMDtzPGk7cysrKXtvPTNEcj9yW3NdOnM7aT0KZighdChlW29d LG8sZSkpcmV0dXJuITF9cmV0dXJuITB9LHAuc29tZT0zRHAuYW55PTNEZnVuY3Rpb24oZSx0LG4p e2lmKGU9M0Q9Cj0zRG51bGwpcmV0dXJuITE7dD0zRHAuaXRlcmF0ZWUodCxuKTt2YXIgcj0zRGUu bGVuZ3RoIT0zRD0zRCtlLmxlbmd0aCYmcC5rZT0KeXMoZSksaT0zRChyfHxlKS5sZW5ndGgscyxv O2ZvcihzPTNEMDtzPGk7cysrKXtvPTNEcj9yW3NdOnM7aWYodChlW29dLG8sZSkpPQpyZXR1cm4h MH1yZXR1cm4hMX0scC5jb250YWlucz0zRHAuaW5jbHVkZT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGU9M0Q9M0RudWw9Cmw/ITE6KGUubGVuZ3RoIT0zRD0zRCtlLmxlbmd0aCYmKGU9M0RwLnZhbHVl cyhlKSkscC5pbmRleE9mKGUsdCk+PTNEMCl9LHAuaT0KbnZva2U9M0RmdW5jdGlvbihlLHQpe3Zh ciBuPTNEby5jYWxsKGFyZ3VtZW50cywyKSxyPTNEcC5pc0Z1bmN0aW9uKHQpO3JldHVyPQpuIHAu bWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuKHI/dDplW3RdKS5hcHBseShlLG4pfSl9LHAucGx1Y2s9 M0RmdW5jdGlvbihlLHQ9Cil7cmV0dXJuIHAubWFwKGUscC5wcm9wZXJ0eSh0KSl9LHAud2hlcmU9 M0RmdW5jdGlvbihlLHQpe3JldHVybiBwLmZpbHRlcihlLD0KcC5tYXRjaGVzKHQpKX0scC5maW5k V2hlcmU9M0RmdW5jdGlvbihlLHQpe3JldHVybiBwLmZpbmQoZSxwLm1hdGNoZXModCkpfSxwPQou bWF4PTNEZnVuY3Rpb24oZSx0LG4pe3ZhciByPTNELUluZmluaXR5LGk9M0QtSW5maW5pdHkscyxv O2lmKHQ9M0Q9M0RudWxsJiY9CmUhPTNEbnVsbCl7ZT0zRGUubGVuZ3RoPTNEPTNEPTNEK2UubGVu Z3RoP2U6cC52YWx1ZXMoZSk7Zm9yKHZhciB1PTNEMCxhPTNEZT0KLmxlbmd0aDt1PGE7dSsrKXM9 M0RlW3VdLHM+ciYmKHI9M0RzKX1lbHNlIHQ9M0RwLml0ZXJhdGVlKHQsbikscC5lYWNoKGUsZnVu PQpjdGlvbihlLG4scyl7bz0zRHQoZSxuLHMpO2lmKG8+aXx8bz0zRD0zRD0zRC1JbmZpbml0eSYm cj0zRD0zRD0zRC1JbmZpbml0eSk9CnI9M0RlLGk9M0RvfSk7cmV0dXJuIHJ9LHAubWluPTNEZnVu Y3Rpb24oZSx0LG4pe3ZhciByPTNESW5maW5pdHksaT0zREluZmluaT0KdHkscyxvO2lmKHQ9M0Q9 M0RudWxsJiZlIT0zRG51bGwpe2U9M0RlLmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9lOnAudmFs dWVzPQooZSk7Zm9yKHZhciB1PTNEMCxhPTNEZS5sZW5ndGg7dTxhO3UrKylzPTNEZVt1XSxzPHIm JihyPTNEcyl9ZWxzZSB0PTNEcC5pdGU9CnJhdGVlKHQsbikscC5lYWNoKGUsZnVuY3Rpb24oZSxu LHMpe289M0R0KGUsbixzKTtpZihvPGl8fG89M0Q9M0Q9M0RJbmZpbml0eT0KJiZyPTNEPTNEPTNE SW5maW5pdHkpcj0zRGUsaT0zRG99KTtyZXR1cm4gcn0scC5zaHVmZmxlPTNEZnVuY3Rpb24oZSl7 dmFyIHQ9Cj0zRGUmJmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2U6cC52YWx1ZXMoZSksbj0z RHQubGVuZ3RoLHI9M0RBcnJheShuKTtmbz0Kcih2YXIgaT0zRDAscztpPG47aSsrKXM9M0RwLnJh bmRvbSgwLGkpLHMhPTNEPTNEaSYmKHJbaV09M0RyW3NdKSxyW3NdPTNEdFtpPQpdO3JldHVybiBy fSxwLnNhbXBsZT0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD0zRD0zRG51bGx8fG4/KGUubGVu Z3RoIT0zRD0KPTNEK2UubGVuZ3RoJiYoZT0zRHAudmFsdWVzKGUpKSxlW3AucmFuZG9tKGUubGVu Z3RoLTEpXSk6cC5zaHVmZmxlKGUpLnNsaWNlPQooMCxNYXRoLm1heCgwLHQpKX0scC5zb3J0Qnk9 M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9M0RwLml0ZXJhdGVlKHQsbikscC49CnBsdWNrKHAu bWFwKGUsZnVuY3Rpb24oZSxuLHIpe3JldHVybnt2YWx1ZTplLGluZGV4Om4sY3JpdGVyaWE6dChl LG4scil9fSkucz0Kb3J0KGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RlLmNyaXRlcmlhLHI9M0R0LmNy aXRlcmlhO2lmKG4hPTNEPTNEcil7aWYobj5yfHxuPQo9M0Q9M0Q9M0R2b2lkIDApcmV0dXJuIDE7 aWYobjxyfHxyPTNEPTNEPTNEdm9pZCAwKXJldHVybi0xfXJldHVybiBlLmluZGV4LXQ9Ci5pbmRl eH0pLCJ2YWx1ZSIpfTt2YXIgbT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7 dmFyIGk9M0R7fTtyZT0KdHVybiBuPTNEcC5pdGVyYXRlZShuLHIpLHAuZWFjaCh0LGZ1bmN0aW9u KHIscyl7dmFyIG89M0RuKHIscyx0KTtlKGkscixvKX0pPQosaX19O3AuZ3JvdXBCeT0zRG0oZnVu Y3Rpb24oZSx0LG4pe3AuaGFzKGUsbik/ZVtuXS5wdXNoKHQpOmVbbl09M0RbdF19KSxwLmk9Cm5k ZXhCeT0zRG0oZnVuY3Rpb24oZSx0LG4pe2Vbbl09M0R0fSkscC5jb3VudEJ5PTNEbShmdW5jdGlv bihlLHQsbil7cC5oYXMoZT0KLG4pP2Vbbl0rKzplW25dPTNEMX0pLHAuc29ydGVkSW5kZXg9M0Rm dW5jdGlvbihlLHQsbixyKXtuPTNEcC5pdGVyYXRlZShuLHIsPQoxKTt2YXIgaT0zRG4odCkscz0z RDAsbz0zRGUubGVuZ3RoO3doaWxlKHM8byl7dmFyIHU9M0RzK28+Pj4xO24oZVt1XSk8aT9zPQo9 M0R1KzE6bz0zRHV9cmV0dXJuIHN9LHAudG9BcnJheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlP3Au aXNBcnJheShlKT9vLmNhbGw9CihlKTplLmxlbmd0aD0zRD0zRD0zRCtlLmxlbmd0aD9wLm1hcChl LHAuaWRlbnRpdHkpOnAudmFsdWVzKGUpOltdfSxwLnNpemU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVy biBlPTNEPTNEbnVsbD8wOmUubGVuZ3RoPTNEPTNEPTNEK2UubGVuZ3RoP2UubGVuZ3RoOnAuaz0K ZXlzKGUpLmxlbmd0aH0scC5wYXJ0aXRpb249M0RmdW5jdGlvbihlLHQsbil7dD0zRHAuaXRlcmF0 ZWUodCxuKTt2YXIgcj0zRFtdPQosaT0zRFtdO3JldHVybiBwLmVhY2goZSxmdW5jdGlvbihlLG4s cyl7KHQoZSxuLHMpP3I6aSkucHVzaChlKX0pLFtyLGldfSxwLmY9Cmlyc3Q9M0RwLmhlYWQ9M0Rw LnRha2U9M0RmdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9M0Q9M0RudWxsP3ZvaWQgMDp0PTNEPTNE bj0KdWxsfHxuP2VbMF06dDwwP1tdOm8uY2FsbChlLDAsdCl9LHAuaW5pdGlhbD0zRGZ1bmN0aW9u KGUsdCxuKXtyZXR1cm4gby5jYWxsPQooZSwwLE1hdGgubWF4KDAsZS5sZW5ndGgtKHQ9M0Q9M0Ru dWxsfHxuPzE6dCkpKX0scC5sYXN0PTNEZnVuY3Rpb24oZSx0LG4pe3I9CmV0dXJuIGU9M0Q9M0Ru dWxsP3ZvaWQgMDp0PTNEPTNEbnVsbHx8bj9lW2UubGVuZ3RoLTFdOm8uY2FsbChlLE1hdGgubWF4 KGUubD0KZW5ndGgtdCwwKSl9LHAucmVzdD0zRHAudGFpbD0zRHAuZHJvcD0zRGZ1bmN0aW9uKGUs dCxuKXtyZXR1cm4gby5jYWxsKGUsdD0KPTNEPTNEbnVsbHx8bj8xOnQpfSxwLmNvbXBhY3Q9M0Rm dW5jdGlvbihlKXtyZXR1cm4gcC5maWx0ZXIoZSxwLmlkZW50aXR5KX07PQp2YXIgZz0zRGZ1bmN0 aW9uKGUsdCxuLHIpe2lmKHQmJnAuZXZlcnkoZSxwLmlzQXJyYXkpKXJldHVybiB1LmFwcGx5KHIs ZSk7Zm89CnIodmFyIGk9M0QwLG89M0RlLmxlbmd0aDtpPG87aSsrKXt2YXIgYT0zRGVbaV07IXAu aXNBcnJheShhKSYmIXAuaXNBcmd1bWVudD0KcyhhKT9ufHxyLnB1c2goYSk6dD9zLmFwcGx5KHIs YSk6ZyhhLHQsbixyKX1yZXR1cm4gcn07cC5mbGF0dGVuPTNEZnVuY3Rpb24oPQplLHQpe3JldHVy biBnKGUsdCwhMSxbXSl9LHAud2l0aG91dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBwLmRpZmZlcmVu Y2UoZSxvLmM9CmFsbChhcmd1bWVudHMsMSkpfSxwLnVuaXE9M0RwLnVuaXF1ZT0zRGZ1bmN0aW9u KGUsdCxuLHIpe2lmKGU9M0Q9M0RudWxsKXJldD0KdXJuW107cC5pc0Jvb2xlYW4odCl8fChyPTNE bixuPTNEdCx0PTNEITEpLG4hPTNEbnVsbCYmKG49M0RwLml0ZXJhdGVlKG4scikpPQo7dmFyIGk9 M0RbXSxzPTNEW107Zm9yKHZhciBvPTNEMCx1PTNEZS5sZW5ndGg7bzx1O28rKyl7dmFyIGE9M0Rl W29dO2lmKHQpKCE9Cm98fHMhPTNEPTNEYSkmJmkucHVzaChhKSxzPTNEYTtlbHNlIGlmKG4pe3Zh ciBmPTNEbihhLG8sZSk7cC5pbmRleE9mKHMsZik8MD0KJiYocy5wdXNoKGYpLGkucHVzaChhKSl9 ZWxzZSBwLmluZGV4T2YoaSxhKTwwJiZpLnB1c2goYSl9cmV0dXJuIGl9LHAudW5pb249Cj0zRGZ1 bmN0aW9uKCl7cmV0dXJuIHAudW5pcShnKGFyZ3VtZW50cywhMCwhMCxbXSkpfSxwLmludGVyc2Vj dGlvbj0zRGZ1bmN0aT0Kb24oZSl7aWYoZT0zRD0zRG51bGwpcmV0dXJuW107dmFyIHQ9M0RbXSxu PTNEYXJndW1lbnRzLmxlbmd0aDtmb3IodmFyIHI9M0QwPQosaT0zRGUubGVuZ3RoO3I8aTtyKysp e3ZhciBzPTNEZVtyXTtpZihwLmNvbnRhaW5zKHQscykpY29udGludWU7Zm9yKHZhciBvPQo9M0Qx O288bjtvKyspaWYoIXAuY29udGFpbnMoYXJndW1lbnRzW29dLHMpKWJyZWFrO289M0Q9M0Q9M0Ru JiZ0LnB1c2gocyl9cmU9CnR1cm4gdH0scC5kaWZmZXJlbmNlPTNEZnVuY3Rpb24oZSl7dmFyIHQ9 M0RnKG8uY2FsbChhcmd1bWVudHMsMSksITAsITAsW10pOz0KcmV0dXJuIHAuZmlsdGVyKGUsZnVu Y3Rpb24oZSl7cmV0dXJuIXAuY29udGFpbnModCxlKX0pfSxwLnppcD0zRGZ1bmN0aW9uKGUpPQp7 aWYoZT0zRD0zRG51bGwpcmV0dXJuW107dmFyIHQ9M0RwLm1heChhcmd1bWVudHMsImxlbmd0aCIp Lmxlbmd0aCxuPTNEQXJyYXk9Cih0KTtmb3IodmFyIHI9M0QwO3I8dDtyKyspbltyXT0zRHAucGx1 Y2soYXJndW1lbnRzLHIpO3JldHVybiBufSxwLm9iamVjdD0zRD0KZnVuY3Rpb24oZSx0KXtpZihl PTNEPTNEbnVsbClyZXR1cm57fTt2YXIgbj0zRHt9O2Zvcih2YXIgcj0zRDAsaT0zRGUubGVuZ3Ro PQo7cjxpO3IrKyl0P25bZVtyXV09M0R0W3JdOm5bZVtyXVswXV09M0RlW3JdWzFdO3JldHVybiBu fSxwLmluZGV4T2Y9M0RmdW5jdGk9Cm9uKGUsdCxuKXtpZihlPTNEPTNEbnVsbClyZXR1cm4tMTt2 YXIgcj0zRDAsaT0zRGUubGVuZ3RoO2lmKG4pe2lmKHR5cGVvZiBuIT0KPTNEIm51bWJlciIpcmV0 dXJuIHI9M0RwLnNvcnRlZEluZGV4KGUsdCksZVtyXT0zRD0zRD0zRHQ/cjotMTtyPTNEbjwwP01h dGguPQptYXgoMCxpK24pOm59Zm9yKDtyPGk7cisrKWlmKGVbcl09M0Q9M0Q9M0R0KXJldHVybiBy O3JldHVybi0xfSxwLmxhc3RJbmRleE89CmY9M0RmdW5jdGlvbihlLHQsbil7aWYoZT0zRD0zRG51 bGwpcmV0dXJuLTE7dmFyIHI9M0RlLmxlbmd0aDt0eXBlb2Ygbj0zRD0zRD0KIm51bWJlciImJihy PTNEbjwwP3IrbisxOk1hdGgubWluKHIsbisxKSk7d2hpbGUoLS1yPj0zRDApaWYoZVtyXT0zRD0z RD0zRHQpPQpyZXR1cm4gcjtyZXR1cm4tMX0scC5yYW5nZT0zRGZ1bmN0aW9uKGUsdCxuKXthcmd1 bWVudHMubGVuZ3RoPD0zRDEmJih0PTNEZXw9CnwwLGU9M0QwKSxuPTNEbnx8MTt2YXIgcj0zRE1h dGgubWF4KE1hdGguY2VpbCgodC1lKS9uKSwwKSxpPTNEQXJyYXkocik7Zm9yKD0KdmFyIHM9M0Qw O3M8cjtzKyssZSs9M0RuKWlbc109M0RlO3JldHVybiBpfTt2YXIgeT0zRGZ1bmN0aW9uKCl7fTtw LmJpbmQ9M0RmPQp1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihoJiZlLmJpbmQ9M0Q9M0Q9M0RoKXJl dHVybiBoLmFwcGx5KGUsby5jYWxsKGFyZ3VtZW49CnRzLDEpKTtpZighcC5pc0Z1bmN0aW9uKGUp KXRocm93IG5ldyBUeXBlRXJyb3IoIkJpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdT0KbmN0aW9u Iik7cmV0dXJuIG49M0RvLmNhbGwoYXJndW1lbnRzLDIpLHI9M0RmdW5jdGlvbigpe2lmKHRoaXMg aW5zdGFuY2VvZiByPQope3kucHJvdG90eXBlPTNEZS5wcm90b3R5cGU7dmFyIGk9M0RuZXcgeTt5 LnByb3RvdHlwZT0zRG51bGw7dmFyIHM9M0RlLmFwcGw9CnkoaSxuLmNvbmNhdChvLmNhbGwoYXJn dW1lbnRzKSkpO3JldHVybiBwLmlzT2JqZWN0KHMpP3M6aX1yZXR1cm4gZS5hcHBseSh0LD0Kbi5j b25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0scn0scC5wYXJ0aWFsPTNEZnVuY3Rpb24oZSl7dmFy IHQ9M0RvLmNhbGwoYXJnPQp1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49M0QwLHI9 M0R0LnNsaWNlKCk7Zm9yKHZhciBpPTNEMCxzPTNEci5sZW49Cmd0aDtpPHM7aSsrKXJbaV09M0Q9 M0Q9M0RwJiYocltpXT0zRGFyZ3VtZW50c1tuKytdKTt3aGlsZShuPGFyZ3VtZW50cy5sZW5ndD0K aClyLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBlLmFwcGx5KHRoaXMscil9fSxwLmJpbmRB bGw9M0RmdW5jdGlvbihlKXt2PQphciB0LG49M0Rhcmd1bWVudHMubGVuZ3RoLHI7aWYobjw9M0Qx KXRocm93IG5ldyBFcnJvcigiYmluZEFsbCBtdXN0IGJlIHBhc3M9CmVkIGZ1bmN0aW9uIG5hbWVz Iik7Zm9yKHQ9M0QxO3Q8bjt0Kyspcj0zRGFyZ3VtZW50c1t0XSxlW3JdPTNEcC5iaW5kKGVbcl0s ZT0KKTtyZXR1cm4gZX0scC5tZW1vaXplPTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRGZ1bmN0aW9u KHIpe3ZhciBpPTNEbi5jYWNoZSxzPQo9M0R0P3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnI7cmV0 dXJuIHAuaGFzKGkscyl8fChpW3NdPTNEZS5hcHBseSh0aGlzLGFyZ3U9Cm1lbnRzKSksaVtzXX07 cmV0dXJuIG4uY2FjaGU9M0R7fSxufSxwLmRlbGF5PTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRG8u Y2FsbD0KKGFyZ3VtZW50cywyKTtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBl LmFwcGx5KG51bGwsbil9LHQpfSxwLmRlPQpmZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5kZWxh eS5hcHBseShwLFtlLDFdLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzLDEpKSk9Cn0scC50aHJvdHRs ZT0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHMsbz0zRG51bGwsdT0zRDA7bnx8KG49M0R7fSk7 dmFyIGE9Cj0zRGZ1bmN0aW9uKCl7dT0zRG4ubGVhZGluZz0zRD0zRD0zRCExPzA6cC5ub3coKSxv PTNEbnVsbCxzPTNEZS5hcHBseShyLGkpLD0Kb3x8KHI9M0RpPTNEbnVsbCl9O3JldHVybiBmdW5j dGlvbigpe3ZhciBmPTNEcC5ub3coKTshdSYmbi5sZWFkaW5nPTNEPTNEPTNEPQohMSYmKHU9M0Rm KTt2YXIgbD0zRHQtKGYtdSk7cmV0dXJuIHI9M0R0aGlzLGk9M0Rhcmd1bWVudHMsbDw9M0QwfHxs PnQ/KGNsZWE9CnJUaW1lb3V0KG8pLG89M0RudWxsLHU9M0RmLHM9M0RlLmFwcGx5KHIsaSksb3x8 KHI9M0RpPTNEbnVsbCkpOiFvJiZuLnRyYWlsaT0KbmchPTNEPTNEITEmJihvPTNEc2V0VGltZW91 dChhLGwpKSxzfX0scC5kZWJvdW5jZT0zRGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPQoscyxvLHUs YT0zRGZ1bmN0aW9uKCl7dmFyIGY9M0RwLm5vdygpLW87Zjx0JiZmPjA/cj0zRHNldFRpbWVvdXQo YSx0LWYpOihyPQo9M0RudWxsLG58fCh1PTNEZS5hcHBseShzLGkpLHJ8fChzPTNEaT0zRG51bGwp KSl9O3JldHVybiBmdW5jdGlvbigpe3M9M0R0aGk9CnMsaT0zRGFyZ3VtZW50cyxvPTNEcC5ub3co KTt2YXIgZj0zRG4mJiFyO3JldHVybiByfHwocj0zRHNldFRpbWVvdXQoYSx0KSksZj0KJiYodT0z RGUuYXBwbHkocyxpKSxzPTNEaT0zRG51bGwpLHV9fSxwLndyYXA9M0RmdW5jdGlvbihlLHQpe3Jl dHVybiBwLnBhcnRpPQphbCh0LGUpfSxwLm5lZ2F0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5j dGlvbigpe3JldHVybiFlLmFwcGx5KHRoaXMsYXJndW09CmVudHMpfX0scC5jb21wb3NlPTNEZnVu Y3Rpb24oKXt2YXIgZT0zRGFyZ3VtZW50cyx0PTNEZS5sZW5ndGgtMTtyZXR1cm4gZnVuYz0KdGlv bigpe3ZhciBuPTNEdCxyPTNEZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7d2hpbGUobi0tKXI9 M0RlW25dLmNhbGwodGhpPQpzLHIpO3JldHVybiByfX0scC5hZnRlcj0zRGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQ9Ci5hcHBseSh0aGlzLGFyZ3VtZW50 cyl9fSxwLmJlZm9yZT0zRGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIGZ1bmN0aW9uKCl7cj0K ZXR1cm4tLWU+MD9uPTNEdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dD0zRG51bGwsbn19LHAub25j ZT0zRHAucGFydGlhbChwLmJlPQpmb3JlLDIpLHAua2V5cz0zRGZ1bmN0aW9uKGUpe2lmKCFwLmlz T2JqZWN0KGUpKXJldHVybltdO2lmKGMpcmV0dXJuIGMoZSk7dmE9CnIgdD0zRFtdO2Zvcih2YXIg biBpbiBlKXAuaGFzKGUsbikmJnQucHVzaChuKTtyZXR1cm4gdH0scC52YWx1ZXM9M0RmdW5jdGlv bj0KKGUpe3ZhciB0PTNEcC5rZXlzKGUpLG49M0R0Lmxlbmd0aCxyPTNEQXJyYXkobik7Zm9yKHZh ciBpPTNEMDtpPG47aSsrKXJbaV09Cj0zRGVbdFtpXV07cmV0dXJuIHJ9LHAucGFpcnM9M0RmdW5j dGlvbihlKXt2YXIgdD0zRHAua2V5cyhlKSxuPTNEdC5sZW5ndGgscj0KPTNEQXJyYXkobik7Zm9y KHZhciBpPTNEMDtpPG47aSsrKXJbaV09M0RbdFtpXSxlW3RbaV1dXTtyZXR1cm4gcn0scC5pbnZl cnQ9Cj0zRGZ1bmN0aW9uKGUpe3ZhciB0PTNEe30sbj0zRHAua2V5cyhlKTtmb3IodmFyIHI9M0Qw LGk9M0RuLmxlbmd0aDtyPGk7cisrKT0KdFtlW25bcl1dXT0zRG5bcl07cmV0dXJuIHR9LHAuZnVu Y3Rpb25zPTNEcC5tZXRob2RzPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RbPQpdO2Zvcih2YXIgbiBp biBlKXAuaXNGdW5jdGlvbihlW25dKSYmdC5wdXNoKG4pO3JldHVybiB0LnNvcnQoKX0scC5leHRl bmQ9M0Q9CmZ1bmN0aW9uKGUpe2lmKCFwLmlzT2JqZWN0KGUpKXJldHVybiBlO3ZhciB0LG47Zm9y KHZhciByPTNEMSxpPTNEYXJndW1lbnRzLj0KbGVuZ3RoO3I8aTtyKyspe3Q9M0Rhcmd1bWVudHNb cl07Zm9yKG4gaW4gdClmLmNhbGwodCxuKSYmKGVbbl09M0R0W25dKX1yZXR1PQpybiBlfSxwLnBp Y2s9M0RmdW5jdGlvbihlLHQsbil7dmFyIHI9M0R7fSxpO2lmKGU9M0Q9M0RudWxsKXJldHVybiBy O2lmKHAuaXM9CkZ1bmN0aW9uKHQpKXt0PTNEZCh0LG4pO2ZvcihpIGluIGUpe3ZhciBzPTNEZVtp XTt0KHMsaSxlKSYmKHJbaV09M0RzKX19ZWxzZT0Ke3ZhciBhPTNEdS5hcHBseShbXSxvLmNhbGwo YXJndW1lbnRzLDEpKTtlPTNEbmV3IE9iamVjdChlKTtmb3IodmFyIGY9M0QwLGw9Cj0zRGEubGVu Z3RoO2Y8bDtmKyspaT0zRGFbZl0saSBpbiBlJiYocltpXT0zRGVbaV0pfXJldHVybiByfSxwLm9t aXQ9M0RmdW5jdD0KaW9uKGUsdCxuKXtpZihwLmlzRnVuY3Rpb24odCkpdD0zRHAubmVnYXRlKHQp O2Vsc2V7dmFyIHI9M0RwLm1hcCh1LmFwcGx5KFtdPQosby5jYWxsKGFyZ3VtZW50cywxKSksU3Ry aW5nKTt0PTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4hcC5jb250YWlucyhyLHQpfX1yZXQ9CnVybiBw LnBpY2soZSx0LG4pfSxwLmRlZmF1bHRzPTNEZnVuY3Rpb24oZSl7aWYoIXAuaXNPYmplY3QoZSkp cmV0dXJuIGU7Zm9yKD0KdmFyIHQ9M0QxLG49M0Rhcmd1bWVudHMubGVuZ3RoO3Q8bjt0Kyspe3Zh ciByPTNEYXJndW1lbnRzW3RdO2Zvcih2YXIgaSBpbiByPQopZVtpXT0zRD0zRD0zRHZvaWQgMCYm KGVbaV09M0RyW2ldKX1yZXR1cm4gZX0scC5jbG9uZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CnAu aXNPYmplY3QoZSk/cC5pc0FycmF5KGUpP2Uuc2xpY2UoKTpwLmV4dGVuZCh7fSxlKTplfSxwLnRh cD0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4gdChlKSxlfTt2YXIgYj0zRGZ1bmN0aW9uKGUsdCxu LHIpe2lmKGU9M0Q9M0Q9M0R0KXJldHVybiBlIT0zRD0zRDB8PQp8MS9lPTNEPTNEPTNEMS90O2lm KGU9M0Q9M0RudWxsfHx0PTNEPTNEbnVsbClyZXR1cm4gZT0zRD0zRD0zRHQ7ZSBpbnN0YW5jZW89 CmYgcCYmKGU9M0RlLl93cmFwcGVkKSx0IGluc3RhbmNlb2YgcCYmKHQ9M0R0Ll93cmFwcGVkKTt2 YXIgaT0zRGEuY2FsbChlKTtpZj0KKGkhPTNEPTNEYS5jYWxsKHQpKXJldHVybiExO3N3aXRjaChp KXtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0PQpyaW5nXSI6cmV0dXJuIiIr ZT0zRD0zRCIiK3Q7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmlmKCtlIT0zRD0zRCtlKXJldHVybit0 IT0KPTNEPTNEK3Q7cmV0dXJuK2U9M0Q9M0Q9M0QwPzEvK2U9M0Q9M0Q9M0QxL3Q6K2U9M0Q9M0Q9 M0QrdDtjYXNlIltvYmplY3QgRGF0PQplXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4r ZT0zRD0zRD0zRCt0fWlmKHR5cGVvZiBlIT0zRCJvYmplY3QifHx0eXA9CmVvZiB0IT0zRCJvYmpl Y3QiKXJldHVybiExO3ZhciBzPTNEbi5sZW5ndGg7d2hpbGUocy0tKWlmKG5bc109M0Q9M0Q9M0Rl KXJldD0KdXJuIHJbc109M0Q9M0Q9M0R0O3ZhciBvPTNEZS5jb25zdHJ1Y3Rvcix1PTNEdC5jb25z dHJ1Y3RvcjtpZihvIT0zRD0zRHUmJiJjPQpvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJp biB0JiYhKHAuaXNGdW5jdGlvbihvKSYmbyBpbnN0YW5jZW9mIG8mJnAuaXM9CkZ1bmN0aW9uKHUp JiZ1IGluc3RhbmNlb2YgdSkpcmV0dXJuITE7bi5wdXNoKGUpLHIucHVzaCh0KTt2YXIgZixsO2lm KGk9M0Q9Cj0zRD0zRCJbb2JqZWN0IEFycmF5XSIpe2Y9M0RlLmxlbmd0aCxsPTNEZj0zRD0zRD0z RHQubGVuZ3RoO2lmKGwpd2hpbGUoZi0tKT0KaWYoIShsPTNEYihlW2ZdLHRbZl0sbixyKSkpYnJl YWt9ZWxzZXt2YXIgYz0zRHAua2V5cyhlKSxoO2Y9M0RjLmxlbmd0aCxsPTNEPQpwLmtleXModCku bGVuZ3RoPTNEPTNEPTNEZjtpZihsKXdoaWxlKGYtLSl7aD0zRGNbZl07aWYoIShsPTNEcC5oYXMo dCxoKSYmYig9CmVbaF0sdFtoXSxuLHIpKSlicmVha319cmV0dXJuIG4ucG9wKCksci5wb3AoKSxs fTtwLmlzRXF1YWw9M0RmdW5jdGlvbihlLHQpez0KcmV0dXJuIGIoZSx0LFtdLFtdKX0scC5pc0Vt cHR5PTNEZnVuY3Rpb24oZSl7aWYoZT0zRD0zRG51bGwpcmV0dXJuITA7aWYocC5pPQpzQXJyYXko ZSl8fHAuaXNTdHJpbmcoZSl8fHAuaXNBcmd1bWVudHMoZSkpcmV0dXJuIGUubGVuZ3RoPTNEPTNE PTNEMDtmb3IodmE9CnIgdCBpbiBlKWlmKHAuaGFzKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9LHAu aXNFbGVtZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIT0KIWUmJmUubm9kZVR5cGU9M0Q9M0Q9M0Qx fSxwLmlzQXJyYXk9M0RsfHxmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKGUpPTNEPTNEPQo9M0Qi W29iamVjdCBBcnJheV0ifSxwLmlzT2JqZWN0PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0R0eXBlb2Yg ZTtyZXR1cm4gdD0zRD0KPTNEPTNEImZ1bmN0aW9uInx8dD0zRD0zRD0zRCJvYmplY3QiJiYhIWV9 LHAuZWFjaChbIkFyZ3VtZW50cyIsIkZ1bmN0aW9uIiwiPQpTdHJpbmciLCJOdW1iZXIiLCJEYXRl IiwiUmVnRXhwIl0sZnVuY3Rpb24oZSl7cFsiaXMiK2VdPTNEZnVuY3Rpb24odCl7cmV0dXI9Cm4g YS5jYWxsKHQpPTNEPTNEPTNEIltvYmplY3QgIitlKyJdIn19KSxwLmlzQXJndW1lbnRzKGFyZ3Vt ZW50cyl8fChwLmlzQXJndT0KbWVudHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gcC5oYXMoZSwiY2Fs bGVlIil9KSx0eXBlb2YgLy4vIT0zRCJmdW5jdGlvbiImJihwPQouaXNGdW5jdGlvbj0zRGZ1bmN0 aW9uKGUpe3JldHVybiB0eXBlb2YgZT0zRD0zRCJmdW5jdGlvbiJ8fCExfSkscC5pc0Zpbml0ZT0K PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGUpJiYhaXNOYU4ocGFyc2VGbG9hdChlKSl9 LHAuaXNOYU49M0RmdW5jdGlvPQpuKGUpe3JldHVybiBwLmlzTnVtYmVyKGUpJiZlIT0zRD0zRCtl fSxwLmlzQm9vbGVhbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlPQo9M0Q9M0Q9M0QhMHx8ZT0zRD0z RD0zRCExfHxhLmNhbGwoZSk9M0Q9M0Q9M0QiW29iamVjdCBCb29sZWFuXSJ9LHAuaXNOdWxsPQo9 M0RmdW5jdGlvbihlKXtyZXR1cm4gZT0zRD0zRD0zRG51bGx9LHAuaXNVbmRlZmluZWQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gZT0KPTNEPTNEPTNEdm9pZCAwfSxwLmhhcz0zRGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIGUhPTNEbnVsbCYmZi5jYWxsKGUsdCl9LHAubm9DPQpvbmZsaWN0PTNEZnVuY3Rpb24o KXtyZXR1cm4gZS5fPTNEdCx0aGlzfSxwLmlkZW50aXR5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU9 Cn0scC5jb25zdGFudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX0s cC5ub29wPTNEZnVuY3Rpb24oKT0Ke30scC5wcm9wZXJ0eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBm dW5jdGlvbih0KXtyZXR1cm4gdFtlXX19LHAubWF0Y2hlcz0zRGZ1PQpuY3Rpb24oZSl7dmFyIHQ9 M0RwLnBhaXJzKGUpLG49M0R0Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZT0zRD0zRG51 bGw9CilyZXR1cm4hbjtlPTNEbmV3IE9iamVjdChlKTtmb3IodmFyIHI9M0QwO3I8bjtyKyspe3Zh ciBpPTNEdFtyXSxzPTNEaVswXTtpZj0KKGlbMV0hPTNEPTNEZVtzXXx8IShzIGluIGUpKXJldHVy biExfXJldHVybiEwfX0scC50aW1lcz0zRGZ1bmN0aW9uKGUsdCxuKXt2PQphciByPTNEQXJyYXko TWF0aC5tYXgoMCxlKSk7dD0zRGQodCxuLDEpO2Zvcih2YXIgaT0zRDA7aTxlO2krKylyW2ldPTNE dChpKTs9CnJldHVybiByfSxwLnJhbmRvbT0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9M0Q9M0Ru dWxsJiYodD0zRGUsZT0zRDApLGUrTWF0aD0KLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9 LHAubm93PTNERGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlPQopLmdldFRpbWUo KX07dmFyIHc9M0R7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7 IiwiJyI6IiY9CiN4Mjc7IiwiYCI6IiYjeDYwOyJ9LEU9M0RwLmludmVydCh3KSxTPTNEZnVuY3Rp b24oZSl7dmFyIHQ9M0RmdW5jdGlvbih0KXtyZT0KdHVybiBlW3RdfSxuPTNEIig/OiIrcC5rZXlz KGUpLmpvaW4oInwiKSsiKSIscj0zRFJlZ0V4cChuKSxpPTNEUmVnRXhwKG4sImciPQopO3JldHVy biBmdW5jdGlvbihlKXtyZXR1cm4gZT0zRGU9M0Q9M0RudWxsPyIiOiIiK2Usci50ZXN0KGUpP2Uu cmVwbGFjZShpLHQ9Cik6ZX19O3AuZXNjYXBlPTNEUyh3KSxwLnVuZXNjYXBlPTNEUyhFKSxwLnJl c3VsdD0zRGZ1bmN0aW9uKGUsdCl7aWYoZT0zRD0zRD0KbnVsbClyZXR1cm4gdm9pZCAwO3ZhciBu PTNEZVt0XTtyZXR1cm4gcC5pc0Z1bmN0aW9uKG4pP2VbdF0oKTpufTt2YXIgeD0zRDA7PQpwLnVu aXF1ZUlkPTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0QrK3grIiI7cmV0dXJuIGU/ZSt0OnR9LHAudGVt cGxhdGVTZXR0aW5ncz0KPTNEe2V2YWx1YXRlOi88JShbXHNcU10rPyklPi9nLGludGVycG9sYXRl Oi88JT0zRChbXHNcU10rPyklPi9nLGVzY2FwZTovPCUtPQooW1xzXFNdKz8pJT4vZ307dmFyIFQ9 M0QvKC4pXi8sTj0zRHsiJyI6IiciLCJcXCI6IlxcIiwiXHIiOiJyIiwiXG4iOiJuIiwiXHU9CjIw MjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUyMDI5In0sQz0zRC9cXHwnfFxyfFxufFx1MjAyOHxcdTIw MjkvZyxrPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4iXFwiK05bZV19O3AudGVtcGxhdGU9M0RmdW5j dGlvbihlLHQsbil7IXQmJm4mJih0PTNEbiksdD0zRHAuZGVmPQphdWx0cyh7fSx0LHAudGVtcGxh dGVTZXR0aW5ncyk7dmFyIHI9M0RSZWdFeHAoWyh0LmVzY2FwZXx8VCkuc291cmNlLCh0LmludGU9 CnJwb2xhdGV8fFQpLnNvdXJjZSwodC5ldmFsdWF0ZXx8VCkuc291cmNlXS5qb2luKCJ8IikrInwk IiwiZyIpLGk9M0QwLHM9M0QiXz0KX3ArPTNEJyI7ZS5yZXBsYWNlKHIsZnVuY3Rpb24odCxuLHIs byx1KXtyZXR1cm4gcys9M0RlLnNsaWNlKGksdSkucmVwbGFjZShDPQosayksaT0zRHUrdC5sZW5n dGgsbj9zKz0zRCInK1xuKChfX3Q9M0QoIituKyIpKT0zRD0zRG51bGw/Jyc6Xy5lc2NhcGUoX190 KSk9CitcbiciOnI/cys9M0QiJytcbigoX190PTNEKCIrcisiKSk9M0Q9M0RudWxsPycnOl9fdCkr XG4nIjpvJiYocys9M0QiJztcbiIrbz0KKyJcbl9fcCs9M0QnIiksdH0pLHMrPTNEIic7XG4iLHQu dmFyaWFibGV8fChzPTNEIndpdGgob2JqfHx7fSl7XG4iK3MrIn1cbiIpPQoscz0zRCJ2YXIgX190 LF9fcD0zRCcnLF9faj0zREFycmF5LnByb3RvdHlwZS5qb2luLHByaW50PTNEZnVuY3Rpb24oKXtf X3ArPQo9M0RfX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iK3MrInJldHVybiBfX3A7XG4iO3Ry eXt2YXIgbz0zRG5ldyBGdW5jdGlvbig9CnQudmFyaWFibGV8fCJvYmoiLCJfIixzKX1jYXRjaCh1 KXt0aHJvdyB1LnNvdXJjZT0zRHMsdX12YXIgYT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIG8uY2Fs bCh0aGlzLGUscCl9LGY9M0R0LnZhcmlhYmxlfHwib2JqIjtyZXR1cm4gYS5zb3VyY2U9M0QiZnVu Y3Rpb24oPQoiK2YrIil7XG4iK3MrIn0iLGF9LHAuY2hhaW49M0RmdW5jdGlvbihlKXt2YXIgdD0z RHAoZSk7cmV0dXJuIHQuX2NoYWluPTNEITA9Cix0fTt2YXIgTD0zRGZ1bmN0aW9uKGUpe3JldHVy biB0aGlzLl9jaGFpbj9wKGUpLmNoYWluKCk6ZX07cC5taXhpbj0zRGZ1bmN0aT0Kb24oZSl7cC5l YWNoKHAuZnVuY3Rpb25zKGUpLGZ1bmN0aW9uKHQpe3ZhciBuPTNEcFt0XT0zRGVbdF07cC5wcm90 b3R5cGVbdF09Cj0zRGZ1bmN0aW9uKCl7dmFyIGU9M0RbdGhpcy5fd3JhcHBlZF07cmV0dXJuIHMu YXBwbHkoZSxhcmd1bWVudHMpLEwuY2FsbCh0aD0KaXMsbi5hcHBseShwLGUpKX19KX0scC5taXhp bihwKSxwLmVhY2goWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0Iiwic29yPQp0Iiwic3Bs aWNlIiwidW5zaGlmdCJdLGZ1bmN0aW9uKGUpe3ZhciB0PTNEbltlXTtwLnByb3RvdHlwZVtlXT0z RGZ1bmN0aW9uKCk9Cnt2YXIgbj0zRHRoaXMuX3dyYXBwZWQ7cmV0dXJuIHQuYXBwbHkobixhcmd1 bWVudHMpLChlPTNEPTNEPTNEInNoaWZ0Inx8ZT0zRD0KPTNEPTNEInNwbGljZSIpJiZuLmxlbmd0 aD0zRD0zRD0zRDAmJmRlbGV0ZSBuWzBdLEwuY2FsbCh0aGlzLG4pfX0pLHAuZWFjaChbPQoiY29u Y2F0Iiwiam9pbiIsInNsaWNlIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RuW2VdO3AucHJvdG90eXBl W2VdPTNEZnVuY3Rpb249Cigpe3JldHVybiBMLmNhbGwodGhpcyx0LmFwcGx5KHRoaXMuX3dyYXBw ZWQsYXJndW1lbnRzKSl9fSkscC5wcm90b3R5cGUudmFsdT0KZT0zRGZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuX3dyYXBwZWR9LHR5cGVvZiBkZWZpbmU9M0Q9M0QiZnVuY3Rpb24iJiZkZWZpbmUuPQph bWQmJmRlZmluZSgidW5kZXJzY29yZSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gcH0pfS5jYWxsKHRo aXMpLGRlZmluZSgibGlicy89CnVuZGVyc2NvcmUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlv bigpe3ZhciB0LG47cmV0dXJuIHR8fGUuX319KHRoaXMpKSxkZT0KZmluZSgidXRpbHMvdXRpbHMi LFsibGlicy91bmRlcnNjb3JlIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIg PQpyIGluIGUpe3ZhciBpPTNEZVtyXTtpJiZ0eXBlb2YgaT0zRD0zRCJvYmplY3QiJiYobihpKSx0 KGksbikpfX1mdW5jdGlvbiBuKGU9Cil7cmV0dXJuICQoIjxkaXYvPiIpLnRleHQoZSkuaHRtbCgp fWZ1bmN0aW9uIHIoZSl7ZSBpbnN0YW5jZW9mIEFycmF5fHwoZT0zRD0KW2VdKTtmb3IodmFyIHQg aW4gZSlpZihbIk5vbmUiLG51bGwsIm51bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhP ZihlPQpbdF0pPi0xKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkoZSl7dmFyIGU9M0RlLnRv U3RyaW5nKCk7aWYoZSl7ZT0zRGUucmU9CnBsYWNlKC8sL2csIiwgIik7dmFyIHQ9M0RlLmxhc3RJ bmRleE9mKCIsICIpO3JldHVybiB0IT0zRC0xJiYoZT0zRGUuc3Vic3RyKD0KMCx0KSsiIG9yICIr ZS5zdWJzdHIodCsxKSksZX1yZXR1cm4iIn1mdW5jdGlvbiBzKGUpe3RvcC5fX3V0aWxzX19nZXRf Xz0zRHRvPQpwLl9fdXRpbHNfX2dldF9ffHx7fSxlLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19b ZS51cmxdPyhlLnN1Y2Nlc3MmJmUuc3VjY2U9CnNzKHRvcC5fX3V0aWxzX19nZXRfX1tlLnVybF0p LGNvbnNvbGUuZGVidWcoInV0aWxzLmpzOjpnZXQoKSAtIEZldGNoaW5nIGZybz0KbSBjYWNoZSBb IitlLnVybCsiXS4iKSk6byh7dXJsOmUudXJsLGRhdGE6ZS5kYXRhLHN1Y2Nlc3M6ZnVuY3Rpb24o dCl7dG9wLl9fPQp1dGlsc19fZ2V0X19bZS51cmxdPTNEdCxlLnN1Y2Nlc3MmJmUuc3VjY2Vzcyh0 KX0sZXJyb3I6ZnVuY3Rpb24odCl7ZS5lcnJvciY9CiZlLmVycm9yKHQpfX0pfWZ1bmN0aW9uIG8o ZSl7dmFyIHQ9M0R7Y29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLHR5cGU6ZT0KLnR5cGV8 fCJHRVQiLGRhdGE6ZS5kYXRhfHx7fSx1cmw6ZS51cmx9O3QudHlwZT0zRD0zRCJHRVQifHx0LnR5 cGU9M0Q9M0QiREVMPQpFVEUiPyh0LnVybC5pbmRleE9mKCI/Iik9M0Q9M0QtMT90LnVybCs9M0Qi PyI6dC51cmwrPTNEIiYiLHQudXJsPTNEdC51cmwrJC49CnBhcmFtKHQuZGF0YSwhMCksdC5kYXRh PTNEbnVsbCk6KHQuZGF0YVR5cGU9M0QianNvbiIsdC51cmw9M0R0LnVybCx0LmRhdGE9Cj0zREpT T04uc3RyaW5naWZ5KHQuZGF0YSkpLCQuYWpheCh0KS5kb25lKGZ1bmN0aW9uKHQpe2lmKHR5cGVv ZiB0PTNEPTNEInN0cj0KaW5nIil0cnl7dD0zRHQucmVwbGFjZSgiSW5maW5pdHksIiwnIkluZmlu aXR5IiwnKSx0PTNEalF1ZXJ5LnBhcnNlSlNPTih0KX1jPQphdGNoKG4pe2NvbnNvbGUuZGVidWco bil9ZS5zdWNjZXNzJiZlLnN1Y2Nlc3ModCl9KS5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBuPQo9M0Ru dWxsO3RyeXtuPTNEalF1ZXJ5LnBhcnNlSlNPTih0LnJlc3BvbnNlVGV4dCl9Y2F0Y2gocil7bj0z RHQucmVzcG9uc2VUZXg9CnR9ZS5lcnJvciYmZS5lcnJvcihuLHQpfSl9ZnVuY3Rpb24gdShlLHQp e3ZhciBuPTNEJCgnPGRpdiBjbGFzcz0zRCInK2UrJyI+PD0KL2Rpdj4nKTtuLmFwcGVuZFRvKCI6 ZXEoMCkiKTt2YXIgcj0zRG4uY3NzKHQpO3JldHVybiBuLnJlbW92ZSgpLHJ9ZnVuY3Rpb24gPQph KGUpeyQoJ2xpbmtbaHJlZl49M0QiJytlKyciXScpLmxlbmd0aHx8JCgnPGxpbmsgaHJlZj0zRCIn K2dhbGF4eV9jb25maWcucm89Cm90K2UrJyIgcmVsPTNEInN0eWxlc2hlZXQiPicpLmFwcGVuZFRv KCJoZWFkIil9ZnVuY3Rpb24gZih0LG4pe3JldHVybiB0P2UuZD0KZWZhdWx0cyh0LG4pOm59ZnVu Y3Rpb24gbChlLHQpe3ZhciBuPTNEIiI7aWYoZT49M0QxZTExKWUvPTNEMWUxMSxuPTNEIlRCIjtl PQpsc2UgaWYoZT49M0QxZTgpZS89M0QxZTgsbj0zRCJHQiI7ZWxzZSBpZihlPj0zRDFlNSllLz0z RDFlNSxuPTNEIk1CIjtlbHNlIGk9CmYoZT49M0QxMDApZS89M0QxMDAsbj0zRCJLQiI7ZWxzZXtp ZighKGU+MCkpcmV0dXJuIjxzdHJvbmc+LTwvc3Ryb25nPiI7ZSo9Cj0zRDEwLG49M0QiYiJ9dmFy IHI9M0RNYXRoLnJvdW5kKGUpLzEwO3JldHVybiB0P3IrIiAiK246IjxzdHJvbmc+IityKyI8L3N0 cj0Kb25nPiAiK259ZnVuY3Rpb24gYygpe3JldHVybiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5n KDM2KS5zdWJzdHJpbmcoMiw5KX1mPQp1bmN0aW9uIGgoZSl7dmFyIHQ9M0QkKCI8cD48L3A+Iik7 cmV0dXJuIHQuYXBwZW5kKGUpLHR9ZnVuY3Rpb24gcCgpe3ZhciBlPQo9M0RuZXcgRGF0ZSx0PTNE KGUuZ2V0SG91cnMoKTwxMD8iMCI6IiIpK2UuZ2V0SG91cnMoKSxuPTNEKGUuZ2V0TWludXRlcygp PDE9CjA/IjAiOiIiKStlLmdldE1pbnV0ZXMoKSxyPTNEZS5nZXREYXRlKCkrIi8iKyhlLmdldE1v bnRoKCkrMSkrIi8iK2UuZ2V0RnVsbD0KWWVhcigpKyIsICIrdCsiOiIrbjtyZXR1cm4gcn1yZXR1 cm57Y3NzTG9hZEZpbGU6YSxjc3NHZXRBdHRyaWJ1dGU6dSxnZXQ6cyxtPQplcmdlOmYsYnl0ZXNU b1N0cmluZzpsLHV1aWQ6Yyx0aW1lOnAsd3JhcDpoLHJlcXVlc3Q6byxzYW5pdGl6ZTpuLHRleHRp Znk6aSw9CnZhbGlkYXRlOnIsZGVlcGVhY2g6dH19KSxkZWZpbmUoIm12Yy91aS91aS1wb3J0bGV0 IixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpbz0KbihlKXt2YXIgdD0zREJhY2tib25lLlZpZXcuZXh0 ZW5kKHt2aXNpYmxlOiExLG9wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixpY29uPQo6IiIsYnV0dG9u czpudWxsLGJvZHk6bnVsbCxzY3JvbGxhYmxlOiEwLG5vcGFkZGluZzohMSxvcGVyYXRpb25zOm51 bGwscGxhY2U9Cm1lbnQ6ImJvdHRvbSIsY2xzOiJ1aS1wb3J0bGV0IixvcGVyYXRpb25zX2ZsdDoi cmlnaHQifSwkdGl0bGU6bnVsbCwkY29udGVudD0KOm51bGwsJGJ1dHRvbnM6bnVsbCwkb3BlcmF0 aW9uczpudWxsLCRoZWFkZXI6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoPQppcy5vcHRp b25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlz Ll90ZW1wbGF0ZSg9CnRoaXMub3B0aW9ucykpLHRoaXMuJGNvbnRlbnQ9M0R0aGlzLiRlbC5maW5k KCIuY29udGVudCIpLHRoaXMuJHRpdGxlPTNEdGhpcz0KLiRlbC5maW5kKCIucG9ydGxldC10aXRs ZS10ZXh0IiksdGhpcy4kaGVhZGVyPTNEdGhpcy4kZWwuZmluZCgiLnBvcnRsZXQtaGVhPQpkZXIi KTt2YXIgbj0zRHRoaXMuJGVsLmZpbmQoIi5wb3J0bGV0LWNvbnRlbnQiKTt0aGlzLm9wdGlvbnMu bm9wYWRkaW5nJiYobi49CmNzcygicGFkZGluZyIsIjBweCIpLHRoaXMuJGNvbnRlbnQuY3NzKCJw YWRkaW5nIiwiMHB4IikpLHRoaXMuJGJ1dHRvbnM9M0QkKD0KdGhpcy5lbCkuZmluZCgiLmJ1dHRv bnMiKTtpZih0aGlzLm9wdGlvbnMuYnV0dG9ucyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzPQou b3B0aW9ucy5idXR0b25zLGZ1bmN0aW9uKGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJGJ1dHRv bnMuYXBwZW5kKHQuJGVsKX09Cil9ZWxzZSB0aGlzLiRidXR0b25zLnJlbW92ZSgpO3RoaXMuJG9w ZXJhdGlvbnM9M0QkKHRoaXMuZWwpLmZpbmQoIi5vcGVyYXRpbz0KbnMiKTtpZih0aGlzLm9wdGlv bnMub3BlcmF0aW9ucyl7dmFyIHI9M0R0aGlzOyQuZWFjaCh0aGlzLm9wdGlvbnMub3BlcmF0aW9u PQpzLGZ1bmN0aW9uKGUsdCl7dC4kZWwucHJvcCgiaWQiLGUpLHIuJG9wZXJhdGlvbnMuYXBwZW5k KHQuJGVsKX0pfXRoaXMub3B0aW89Cm5zLmJvZHkmJnRoaXMuYXBwZW5kKHRoaXMub3B0aW9ucy5i b2R5KX0sYXBwZW5kOmZ1bmN0aW9uKHQsbil7bj90aGlzLiRjb250ZT0KbnQuYXBwZW5kKHQpOnRo aXMuJGNvbnRlbnQuYXBwZW5kKGUud3JhcCh0KSl9LGNvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpPQpzLiRjb250ZW50fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZmFkZUluKCJmYXN0Iiks dGhpcy52aXNpYmxlPTNEITB9LGhpZGU9CjpmdW5jdGlvbigpe3RoaXMuJGVsLmZhZGVPdXQoImZh c3QiKSx0aGlzLnZpc2libGU9M0QhMX0sZW5hYmxlQnV0dG9uOmZ1bmN0aT0Kb24oZSl7dGhpcy4k YnV0dG9ucy5maW5kKCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlQnV0dG9uOmZ1 bmN0aW9uPQooZSl7dGhpcy4kYnV0dG9ucy5maW5kKCIjIitlKS5wcm9wKCJkaXNhYmxlZCIsITAp fSxoaWRlT3BlcmF0aW9uOmZ1bmN0aW9uKGU9Cil7dGhpcy4kb3BlcmF0aW9ucy5maW5kKCIjIitl KS5oaWRlKCl9LHNob3dPcGVyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kb3Blcj0KYXRpb25zLmZp bmQoIiMiK2UpLnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49M0R0aGlz LiRvcGVyYXRpPQpvbnMuZmluZCgiIyIrZSk7bi5vZmYoImNsaWNrIiksbi5vbigiY2xpY2siLHQp fSx0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0zRHQ9Cmhpcy4kdGl0bGU7cmV0dXJuIGUmJnQuaHRt bChlKSx0Lmh0bWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxkaT0KdiBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0QiJytlLmNscysnIj4nO3JldHVybiBlLnRpdGxlJiYodCs9M0Qn PGRpdiBjbGFzcz0KPTNEInBvcnRsZXQtaGVhZGVyIj48ZGl2IGNsYXNzPTNEIm9wZXJhdGlvbnMi IHN0eWxlPTNEImZsb2F0OiAnK2Uub3BlcmF0aW9uPQpzX2ZsdCsnOyI+PC9kaXY+JysnPGRpdiBj bGFzcz0zRCJwb3J0bGV0LXRpdGxlIj4nLGUuaWNvbiYmKHQrPTNEJzxpIGNsYXNzPQo9M0QiaWNv biBmYSAnK2UuaWNvbisnIj4mbmJzcDs8L2k+JyksdCs9M0QnPHNwYW4gY2xhc3M9M0QicG9ydGxl dC10aXRsZS10ZXg9CnQiPicrZS50aXRsZSsiPC9zcGFuPiIrIjwvZGl2PiIrIjwvZGl2PiIpLHQr PTNEJzxkaXYgY2xhc3M9M0QicG9ydGxldC1jb250ZT0KbnQiPicsZS5wbGFjZW1lbnQ9M0Q9M0Qi dG9wIiYmKHQrPTNEJzxkaXYgY2xhc3M9M0QiYnV0dG9ucyI+PC9kaXY+JyksdCs9M0QnPQo8ZGl2 IGNsYXNzPTNEImNvbnRlbnQiPjwvZGl2PicsZS5wbGFjZW1lbnQ9M0Q9M0QiYm90dG9tIiYmKHQr PTNEJzxkaXYgY2xhc3M9Cj0zRCJidXR0b25zIj48L2Rpdj4nKSx0Kz0zRCI8L2Rpdj48L2Rpdj4i LHR9fSk7cmV0dXJue1ZpZXc6dH19KSxkZWZpbmUoIm12Yz0KL3VpL3VpLXNlbGVjdC1kZWZhdWx0 IixbInV0aWxzL3V0aWxzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9M0RCYWNrYm9uZS5WaWV3LmV4PQp0 ZW5kKHtvcHRpb25zRGVmYXVsdDp7aWQ6IiIsY2xzOiIiLGVycm9yX3RleHQ6Ik5vIGRhdGEgYXZh aWxhYmxlIix2aXNpYmxlOiE9CjAsd2FpdDohMSxtdWx0aXBsZTohMSxzZWFyY2hhYmxlOiExfSxp bml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRD0KZS5tZXJnZSh0LHRoaXMub3B0 aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMp PQopLHRoaXMuJHNlbGVjdD0zRHRoaXMuJGVsLmZpbmQoIi5zZWxlY3QiKSx0aGlzLiRpY29uPTNE dGhpcy4kZWwuZmluZCgiLmljb249CiIpLHRoaXMuJGJ1dHRvbj0zRHRoaXMuJGVsLmZpbmQoIi5i dXR0b24iKSx0aGlzLm9wdGlvbnMubXVsdGlwbGU/KHRoaXMuJHNlbD0KZWN0LnByb3AoIm11bHRp cGxlIiwhMCksdGhpcy4kc2VsZWN0LmFkZENsYXNzKCJ1aS1zZWxlY3QtbXVsdGlwbGUiKSx0aGlz LiRpPQpjb24ucmVtb3ZlKCkpOnRoaXMuJGVsLmFkZENsYXNzKCJ1aS1zZWxlY3QiKSx0aGlzLnVw ZGF0ZSh0aGlzLm9wdGlvbnMuZGF0YSk9Cix0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNEdW5kZWZp bmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcD0KdGlvbnMudmlzaWJs ZXx8dGhpcy5oaWRlKCksdGhpcy5vcHRpb25zLndhaXQ/dGhpcy53YWl0KCk6dGhpcy5zaG93KCk7 dmFyIG49Cj0zRHRoaXM7dGhpcy4kc2VsZWN0Lm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hh bmdlKCl9KSx0aGlzLm9uKCJjaGFuZ2UiLD0KZnVuY3Rpb24oKXtuLl9jaGFuZ2UoKX0pfSx2YWx1 ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJih0aGlzPQouJHNlbGVjdC52 YWwoZSksdGhpcy4kc2VsZWN0LnNlbGVjdDImJnRoaXMuJHNlbGVjdC5zZWxlY3QyKCJ2YWwiLGUp KSx0aGlzLiQ9CnNlbGVjdC52YWwoKX0sZmlyc3Q6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJHNl bGVjdC5maW5kKCJvcHRpb24iKTtyZXR1cm4gZT0KLmxlbmd0aD4wP2UudmFsKCk6dW5kZWZpbmVk fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiBlLnZhbGlkYXRlKHRoaXMudmFsPQp1ZSgpKX0s dGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzZWxlY3QuZmluZCgib3B0aW9uOnNlbGVjdGVk IikudGV4dCgpfSw9CnNob3c6ZnVuY3Rpb24oKXt0aGlzLnVud2FpdCgpLHRoaXMuJHNlbGVjdC5z aG93KCksdGhpcy4kZWwuc2hvdygpfSxoaWRlOmZ1bj0KY3Rpb24oKXt0aGlzLiRlbC5oaWRlKCl9 LHdhaXQ6ZnVuY3Rpb24oKXt0aGlzLiRpY29uLnJlbW92ZUNsYXNzKCksdGhpcy4kaWNvPQpuLmFk ZENsYXNzKCJmYSBmYS1zcGlubmVyIGZhLXNwaW4iKX0sdW53YWl0OmZ1bmN0aW9uKCl7dGhpcy4k aWNvbi5yZW1vdmVDbGE9CnNzKCksdGhpcy4kaWNvbi5hZGRDbGFzcygiZmEgZmEtY2FyZXQtZG93 biIpfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aD0KaXMuJHNlbGVjdC5pcygiOmRpc2Fi bGVkIil9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuJHNlbGVjdC5wcm9wKCJkaXNhYmxlZCIsPQoh MSl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLiRzZWxlY3QucHJvcCgiZGlzYWJsZWQiLCEwKX0s YWRkOmZ1bmN0aW9uKGUpe3Q9Cmhpcy4kc2VsZWN0LmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU9wdGlv bihlKSksdGhpcy5fcmVmcmVzaCgpfSxkZWw6ZnVuY3Rpb24oZT0KKXt0aGlzLiRzZWxlY3QuZmlu ZCgib3B0aW9uW3ZhbHVlPTNEIitlKyJdIikucmVtb3ZlKCksdGhpcy4kc2VsZWN0LnRyaWdnZXIo PQoiY2hhbmdlIiksdGhpcy5fcmVmcmVzaCgpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0R0 aGlzLiRzZWxlY3QudmFsKCk7dGg9CmlzLiRzZWxlY3QuZmluZCgib3B0aW9uIikucmVtb3ZlKCk7 Zm9yKHZhciBuIGluIGUpdGhpcy4kc2VsZWN0LmFwcGVuZCh0aGlzLj0KX3RlbXBsYXRlT3B0aW9u KGVbbl0pKTt0aGlzLl9yZWZyZXNoKCksdGhpcy4kc2VsZWN0LnZhbCh0KSx0aGlzLiRzZWxlY3Qu dmFsPQooKXx8dGhpcy4kc2VsZWN0LnZhbCh0aGlzLmZpcnN0KCkpLHRoaXMub3B0aW9ucy5zZWFy Y2hhYmxlJiYodGhpcy4kYnV0dG9uLmg9CmlkZSgpLHRoaXMuJHNlbGVjdC5zZWxlY3QyKCJkZXN0 cm95IiksdGhpcy4kc2VsZWN0LnNlbGVjdDIoKSl9LHNldE9uQ2hhbmdlOj0KZnVuY3Rpb24oZSl7 dGhpcy5vcHRpb25zLm9uY2hhbmdlPTNEZX0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz LiRzZWxlPQpjdC5maW5kKCdvcHRpb25bdmFsdWU9M0QiJytlKyciXScpLmxlbmd0aD4wfSxfY2hh bmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb249CnMub25jaGFuZ2UmJnRoaXMub3B0aW9ucy5vbmNo YW5nZSh0aGlzLiRzZWxlY3QudmFsKCkpfSxfcmVmcmVzaDpmdW5jdGlvbigpez0KdGhpcy4kc2Vs ZWN0LmZpbmQoIm9wdGlvblt2YWx1ZT0zRG51bGxdIikucmVtb3ZlKCk7dmFyIGU9M0R0aGlzLiRz ZWxlY3QuZmluPQpkKCJvcHRpb24iKS5sZW5ndGg7ZT0zRD0zRDA/KHRoaXMuZGlzYWJsZSgpLHRo aXMuJHNlbGVjdC5hcHBlbmQodGhpcy5fdGVtcGw9CmF0ZU9wdGlvbih7dmFsdWU6Im51bGwiLGxh YmVsOnRoaXMub3B0aW9ucy5lcnJvcl90ZXh0fSkpKTp0aGlzLmVuYWJsZSgpfSxfdD0KZW1wbGF0 ZU9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4nPG9wdGlvbiB2YWx1ZT0zRCInK2UudmFsdWUrJyI+ JytlLmxhYmVsKyI8PQovb3B0aW9uPiJ9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRp diBpZD0zRCInK2UuaWQrJyI+JysnPHNlbGVjdCBpZD0KPTNEInNlbGVjdCIgY2xhc3M9M0Qic2Vs ZWN0ICcrZS5jbHMrIiAiK2UuaWQrJyI+PC9zZWxlY3Q+JysnPGRpdiBjbGFzcz0zRCJiPQp1dHRv biI+JysnPGkgY2xhc3M9M0QiaWNvbiIvPicrIjwvZGl2PiIrIjwvZGl2PiJ9fSk7cmV0dXJue1Zp ZXc6dH19KSxkZWZpbmU9CigibXZjL3VpL3VpLXNsaWRlciIsWyJ1dGlscy91dGlscyJdLGZ1bmN0 aW9uKGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5leHRlbj0KZCh7b3B0aW9uc0RlZmF1bHQ6e21p bjpudWxsLG1heDpudWxsLHN0ZXA6bnVsbCxwcmVjaXNlOiExLHNwbGl0OjFlNH0saW5pdGlhPQps aXplOmZ1bmN0aW9uKHQpe3ZhciBuPTNEdGhpczt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhp cy5vcHRpb25zRGVmYXVsdCk9Cix0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5v cHRpb25zKSksdGhpcy51c2VzbGlkZXI9M0R0aGlzLm9wdGlvbj0Kcy5tYXghPTNEPTNEbnVsbCYm dGhpcy5vcHRpb25zLm1pbiE9M0Q9M0RudWxsJiZ0aGlzLm9wdGlvbnMubWF4PnRoaXMub3B0aW9u PQpzLm1pbix0aGlzLm9wdGlvbnMuc3RlcD0zRD0zRD0zRG51bGwmJih0aGlzLm9wdGlvbnMuc3Rl cD0zRDEsdGhpcy5vcHRpb25zLnA9CnJlY2lzZSYmdGhpcy51c2VzbGlkZXImJih0aGlzLm9wdGlv bnMuc3RlcD0zRCh0aGlzLm9wdGlvbnMubWF4LXRoaXMub3B0aW9ucz0KLm1pbikvdGhpcy5vcHRp b25zLnNwbGl0KSksdGhpcy51c2VzbGlkZXI/KHRoaXMuJHNsaWRlcj0zRHRoaXMuJGVsLmZpbmQo IiNzPQpsaWRlciIpLHRoaXMuJHNsaWRlci5zbGlkZXIodGhpcy5vcHRpb25zKSx0aGlzLiRzbGlk ZXIub24oInNsaWRlIixmdW5jdGlvbig9CmUsdCl7bi52YWx1ZSh0LnZhbHVlKX0pKTp0aGlzLiRl bC5maW5kKCIudWktZm9ybS1zbGlkZXItdGV4dCIpLmNzcygid2lkdGgiLD0KIjEwMCUiKSx0aGlz LiR0ZXh0PTNEdGhpcy4kZWwuZmluZCgiI3RleHQiKSx0aGlzLm9wdGlvbnMudmFsdWUhPTNEPTNE dW5kZWZpPQpuZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLiR0ZXh0Lm9u KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi52YWw9CnVlKCQodGhpcykudmFsKCkpfSk7dmFyIHI9M0Rb XTt0aGlzLiR0ZXh0Lm9uKCJrZXl1cCIsZnVuY3Rpb24oZSl7cltlLndoaWNoXT0KPTNEITF9KSx0 aGlzLiR0ZXh0Lm9uKCJrZXlkb3duIixmdW5jdGlvbihlKXt2YXIgdD0zRGUud2hpY2g7clt0XT0z RCEwLHQ9M0Q9Cj0zRDh8fHQ9M0Q9M0Q5fHx0PTNEPTNEMTN8fHQ9M0Q9M0QzN3x8dD0zRD0zRDM5 fHx0Pj0zRDQ4JiZ0PD0zRDU3fHx0PTNEPTNEMT0KOTAmJiQodGhpcykudmFsKCkuaW5kZXhPZigi LiIpPTNEPTNELTEmJm4ub3B0aW9ucy5wcmVjaXNlfHx0PTNEPTNEMTg5JiYkKHRoPQppcykudmFs KCkuaW5kZXhPZigiLSIpPTNEPTNELTF8fHJbOTFdfHxyWzE3XXx8ZXZlbnQucHJldmVudERlZmF1 bHQoKX0pfSx2YWw9CnVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRD0zRHVuZGVmaW5lZCYmKGlz TmFOKGUpJiYoZT0zRDApLHRoaXMub3B0aW9ucy5tYT0KeCE9M0Q9M0RudWxsJiYoZT0zRE1hdGgu bWluKGUsdGhpcy5vcHRpb25zLm1heCkpLHRoaXMub3B0aW9ucy5taW4hPTNEPTNEbnVsPQpsJiYo ZT0zRE1hdGgubWF4KGUsdGhpcy5vcHRpb25zLm1pbikpLHRoaXMub3B0aW9ucy5vbmNoYW5nZSYm dGhpcy5vcHRpb25zLm89Cm5jaGFuZ2UoZSksdGhpcy4kc2xpZGVyJiZ0aGlzLiRzbGlkZXIuc2xp ZGVyKCJ2YWx1ZSIsZSksdGhpcy4kdGV4dC52YWwoZSkpLD0KdGhpcy4kdGV4dC52YWwoKX0sX3Rl bXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0KPTNE InVpLWZvcm0tc2xpZGVyIj4nKyc8aW5wdXQgaWQ9M0QidGV4dCIgdHlwZT0zRCJ0ZXh0IiBjbGFz cz0zRCJ1aS1mb3JtLXNsPQppZGVyLXRleHQiLz4nKyc8ZGl2IGlkPTNEInNsaWRlciIgY2xhc3M9 M0QidWktZm9ybS1zbGlkZXItZWxlbWVudCIvPicrIjwvZGk9CnY+In19KTtyZXR1cm57Vmlldzp0 fX0pLGRlZmluZSgibXZjL3VpL3VpLW9wdGlvbnMiLFsidXRpbHMvdXRpbHMiXSxmdW5jdGlvbj0K KGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7 dGhpcy5vcHRpb25zRGVmYXVsPQp0PTNEe3Zpc2libGU6ITAsZGF0YTpbXSxpZDplLnV1aWQoKSxl cnJvcl90ZXh0OiJObyBkYXRhIGF2YWlsYWJsZS4iLHdhaXRfdGU9Cnh0OiJQbGVhc2Ugd2FpdC4u LiJ9LHRoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNl dD0KRWxlbWVudCgiPGRpdi8+IiksdGhpcy4kbWVzc2FnZT0zRCQoIjxkaXYvPiIpLHRoaXMuJG9w dGlvbnM9M0QkKHRoaXMuX3RlbXBsPQphdGUodCkpLHRoaXMuJGVsLmFwcGVuZCh0aGlzLiRtZXNz YWdlKSx0aGlzLiRlbC5hcHBlbmQodGhpcy4kb3B0aW9ucyksdGhpcy49Cm9wdGlvbnMudmlzaWJs ZXx8dGhpcy4kZWwuaGlkZSgpLHRoaXMudXBkYXRlKHRoaXMub3B0aW9ucy5kYXRhKSx0aGlzLm9w dGlvbj0Kcy52YWx1ZSE9M0Q9M0R1bmRlZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25zLnZh bHVlKTt2YXIgbj0zRHRoaXM7dGhpcy5vPQpuKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bi5fY2hhbmdl KCl9KX0sdXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy5fZ2V0VmE9Cmx1ZSgpO3RoaXMu JG9wdGlvbnMuZW1wdHkoKTtpZih0aGlzLl90ZW1wbGF0ZU9wdGlvbnMpdGhpcy4kb3B0aW9ucy5h cHBlbmQodD0KaGlzLl90ZW1wbGF0ZU9wdGlvbnMoZSkpO2Vsc2UgZm9yKHZhciBuIGluIGUpe3Zh ciByPTNEJCh0aGlzLl90ZW1wbGF0ZU9wdGlvPQpuKGVbbl0pKTtyLmFkZENsYXNzKCJ1aS1vcHRp b24iKSx0aGlzLiRvcHRpb25zLmFwcGVuZChyKX12YXIgaT0zRHRoaXM7dGhpcy49CiRlbC5maW5k KCJpbnB1dCIpLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aS52YWx1ZShpLl9nZXRWYWx1ZSgpKSxp Ll9jaGFuZ2UoKT0KfSksdGhpcy5fcmVmcmVzaCgpLHRoaXMudmFsdWUodCl9LHZhbHVlOmZ1bmN0 aW9uKGUpe2lmKGUhPTNEPTNEdW5kZWZpbmVkKXtlPQogaW5zdGFuY2VvZiBBcnJheXx8KGU9M0Rb ZV0pLHRoaXMuJGVsLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIsITEpO2Zvcig9CnZhciB0 IGluIGUpdGhpcy4kZWwuZmluZCgnaW5wdXRbdmFsdWU9M0QiJytlW3RdKyciXScpLmZpcnN0KCku cHJvcCgiY2hlY2tlZD0KIiwhMCl9cmV0dXJuIHRoaXMuX2dldFZhbHVlKCl9LGV4aXN0czpmdW5j dGlvbihlKXtpZihlIT0zRD0zRHVuZGVmaW5lZCl7ZSBpPQpuc3RhbmNlb2YgQXJyYXl8fChlPTNE W2VdKTtmb3IodmFyIHQgaW4gZSlpZih0aGlzLiRlbC5maW5kKCdpbnB1dFt2YWx1ZT0zRCI9Cicr ZVt0XSsnIl0nKS5sZW5ndGg+MClyZXR1cm4hMH1yZXR1cm4hMX0sZmlyc3Q6ZnVuY3Rpb24oKXt2 YXIgZT0zRHRoaXMuJGVsLj0KZmluZCgiaW5wdXQiKTtyZXR1cm4gZS5sZW5ndGg+MD9lLnZhbCgp OnVuZGVmaW5lZH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1PQpybiBlLnZhbGlkYXRlKHRoaXMu dmFsdWUoKSl9LHdhaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zaXplKCk9M0Q9M0QwJiYodGhpcy5fbWU9 CnNzYWdlU2hvdyh0aGlzLm9wdGlvbnMud2FpdF90ZXh0LCJpbmZvIiksdGhpcy4kb3B0aW9ucy5o aWRlKCkpfSx1bndhaXQ6ZnVuYz0KdGlvbigpe3RoaXMuX21lc3NhZ2VIaWRlKCksdGhpcy5fcmVm cmVzaCgpfSxfY2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zPQoub25jaGFuZ2UmJnRoaXMu b3B0aW9ucy5vbmNoYW5nZSh0aGlzLl9nZXRWYWx1ZSgpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0 aGk9CnMuX3NpemUoKT0zRD0zRDA/KHRoaXMuX21lc3NhZ2VTaG93KHRoaXMub3B0aW9ucy5lcnJv cl90ZXh0LCJkYW5nZXIiKSx0aGlzLj0KJG9wdGlvbnMuaGlkZSgpKToodGhpcy5fbWVzc2FnZUhp ZGUoKSx0aGlzLiRvcHRpb25zLmNzcygiZGlzcGxheSIsImlubGluZS1iPQpsb2NrIikpfSxfZ2V0 VmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuJGVsLmZpbmQoIjpjaGVja2VkIik7aWYoZS5s ZW5ndGg9Cj0zRD0zRDApcmV0dXJuIm51bGwiO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFy IHQ9M0RbXTtyZXR1cm4gZS5lYWNoKGZ1bj0KY3Rpb24oKXt0LnB1c2goJCh0aGlzKS52YWwoKSl9 KSx0fXJldHVybiBlLnZhbCgpfSxfc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0PQpoaXMuJGVsLmZp bmQoIi51aS1vcHRpb24iKS5sZW5ndGh9LF9tZXNzYWdlU2hvdzpmdW5jdGlvbihlLHQpe3RoaXMu JG1lc3NhZ2U9Ci5zaG93KCksdGhpcy4kbWVzc2FnZS5yZW1vdmVDbGFzcygpLHRoaXMuJG1lc3Nh Z2UuYWRkQ2xhc3MoInVpLW1lc3NhZ2UgYWxlcj0KdCBhbGVydC0iK3QpLHRoaXMuJG1lc3NhZ2Uu aHRtbChlKX0sX21lc3NhZ2VIaWRlOmZ1bmN0aW9uKCl7dGhpcy4kbWVzc2FnZS5oPQppZGUoKX0s X3RlbXBsYXRlOmZ1bmN0aW9uKCl7cmV0dXJuJzxkaXYgY2xhc3M9M0QidWktb3B0aW9ucyIvPid9 fSksbj0zRHt9O249Ci5WaWV3PTNEdC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dC5w cm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZT0KKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2PjxpbnB1dCB0eXBlPTNEInJhZGlvIiBuYW1lPTNEIicrPQp0aGlz Lm9wdGlvbnMuaWQrJyIgdmFsdWU9M0QiJytlLnZhbHVlKyciLz4nK2UubGFiZWwrIjxicj4iKyI8 L2Rpdj4ifX0pO3ZhciA9CnI9M0R7fTtyLlZpZXc9M0R0LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5j dGlvbihlKXtlLm11bHRpcGxlPTNEITAsdC5wcm90b3R5cD0KZS5pbml0aWFsaXplLmNhbGwodGhp cyxlKX0sX3RlbXBsYXRlT3B0aW9uOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2PjxpbnB1dCB0PQp5 cGU9M0QiY2hlY2tib3giIG5hbWU9M0QiJyt0aGlzLm9wdGlvbnMuaWQrJyIgdmFsdWU9M0QiJytl LnZhbHVlKyciLz4nK2UubGE9CmJlbCsiPGJyPiIrIjwvZGl2PiJ9fSk7dmFyIGk9M0R7fTtyZXR1 cm4gaS5WaWV3PTNEdC5leHRlbmQoe2luaXRpYWxpemU6ZnVuYz0KdGlvbihlKXt0LnByb3RvdHlw ZS5pbml0aWFsaXplLmNhbGwodGhpcyxlKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNE PQo9M0R1bmRlZmluZWQmJih0aGlzLiRlbC5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiLCEx KSx0aGlzLiRlbC5maW5kKCJsYWI9CmVsIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJGVs LmZpbmQoJ1t2YWx1ZT0zRCInK2UrJyJdJykucHJvcCgiY2hlY2tlZD0KIiwhMCkuY2xvc2VzdCgi bGFiZWwiKS5hZGRDbGFzcygiYWN0aXZlIikpLHRoaXMuX2dldFZhbHVlKCl9LF90ZW1wbGF0ZU9w dGlvPQpuOmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxsYWJlbCBjbGFzcz0zRCJidG4gYnRuLWRlZmF1 bHQiPic7cmV0dXJuIGUuaWNvbiYmKHQ9Cis9M0QnPGkgY2xhc3M9M0QiZmEgJytlLmljb24rJyIv PicpLHQrPTNEJzxpbnB1dCB0eXBlPTNEInJhZGlvIiBuYW1lPTNEIicrdD0KaGlzLm9wdGlvbnMu aWQrJyIgdmFsdWU9M0QiJytlLnZhbHVlKyciPicrZS5sYWJlbCsiPC9sYWJlbD4iLHR9LF90ZW1w bGF0ZTpmPQp1bmN0aW9uKCl7cmV0dXJuJzxkaXYgY2xhc3M9M0QiYnRuLWdyb3VwIHVpLXJhZGlv YnV0dG9uIiBkYXRhLXRvZ2dsZT0zRCJidXQ9CnRvbnMiLz4nfX0pLHtCYXNlOnQsUmFkaW86bixS YWRpb0J1dHRvbjppLENoZWNrYm94OnJ9fSksZGVmaW5lKCJtdmMvdWkvdWktZD0KcmlsbGRvd24i LFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktb3B0aW9ucyJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49 M0R0LkJhc2UuPQpleHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwbGF5PTNE ZS5kaXNwbGF5fHwiY2hlY2tib3giLGUubXVsdGk9CnBsZT0zRHRoaXMuZGlzcGxheT0zRD0zRCJj aGVja2JveCIsdC5CYXNlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxlKT0KfSxfdGVt cGxhdGVPcHRpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybic8ZGl2PjxpbnB1dCBuYW1lPTNEIicr dGhpcy5vcHRpb25zPQouaWQrJyIgY2xhc3M9M0QidWktb3B0aW9uIiB0eXBlPTNEIicrdGhpcy5k aXNwbGF5KyciIHZhbHVlPTNEIicrdCsnIj4nK2UrIjw9CmRpdi8+In0sX3RlbXBsYXRlT3B0aW9u czpmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUsdCl7ZnVuY3Rpb24gbihuKXtuPyh0LmZhZD0KZUlu KCJmYXN0IiksZS5yZW1vdmVDbGFzcygidG9nZ2xlLWV4cGFuZCIpLGUuYWRkQ2xhc3MoInRvZ2ds ZSIpLGUuaXNfZXhwYW5kPQplZD0zRCEwKToodC5oaWRlKCksZS5yZW1vdmVDbGFzcygidG9nZ2xl IiksZS5hZGRDbGFzcygidG9nZ2xlLWV4cGFuZCIpLGUuaXM9Cl9leHBhbmRlZD0zRCExKX1lLm9u KCJjbGljayIsZnVuY3Rpb24oKXtuKCFlLmlzX2V4cGFuZGVkKX0pfWZ1bmN0aW9uIHIoZSxzKT0K e2ZvcihpIGluIHMpe3ZhciBvPTNEc1tpXSx1PTNEby5vcHRpb25zLmxlbmd0aD4wLGE9M0QkKCI8 ZGl2Lz4iKTtpZih1KXt2YXIgPQpmPTNEJCgnPHNwYW4gY2xhc3M9M0QidWktZHJpbGxkb3duLWJ1 dHRvbiBmb3JtLXRvZ2dsZSBpY29uLWJ1dHRvbiB0b2dnbGUtZXg9CnBhbmQiIHN0eWxlPTNEInBv c2l0aW9uOiByZWxhdGl2ZTsgdG9wOiAycHg7Ii8+JyksbD0zRCQoIjxkaXYvPiIpO2wuYXBwZW5k KD0KZiksbC5hcHBlbmQodC5fdGVtcGxhdGVPcHRpb24oby5uYW1lLG8udmFsdWUpKSxhLmFwcGVu ZChsKTt2YXIgYz0zRCQoJzxkaXYgPQpzdHlsZT0zRCJkaXNwbGF5OiBub25lOyBtYXJnaW4tbGVm dDogMjVweDsiLz4nKTtyKGMsby5vcHRpb25zKSxhLmFwcGVuZChjKSw9Cm4oZixjKX1lbHNlIGEu YXBwZW5kKHQuX3RlbXBsYXRlT3B0aW9uKG8ubmFtZSxvLnZhbHVlKSk7ZS5hcHBlbmQoYSl9fXZh ciB0PQo9M0R0aGlzLHM9M0QkKCI8ZGl2Lz4iKTtyZXR1cm4gcihzLGUpLHN9LF90ZW1wbGF0ZTpm dW5jdGlvbihlKXtyZXR1cm4nPGRpdiA9CmNsYXNzPTNEInVpLW9wdGlvbnMgZHJpbGxkb3duLWNv bnRhaW5lciIgaWQ9M0QiJytlLmlkKyciLz4nfX0pO3JldHVybntWaWV3Oj0Kbn19KSxkZWZpbmUo Im12Yy91aS91aS1idXR0b24tbWVudSIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVy biBCYWNrPQpib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7aWQ6IiIsdGl0bGU6IiIs ZmxvYXRpbmc6InJpZ2h0IixpY29uOm51bGw9CixvbmNsaWNrOm51bGwsY2xzOiJ1aS1idXR0b24t aWNvbiB1aS1idXR0b24tbWVudSIsdG9vbHRpcDoiIix0YXJnZXQ6IiIsaHJlZj0KOiIiLG9udW5s b2FkOm51bGwsdmlzaWJsZTohMCx0YWc6IiJ9LCRtZW51Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlv bih0KXt0aGlzPQoub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlz LnNldEVsZW1lbnQoJCh0aGlzLl90ZW1wbGF0ZSg9CnRoaXMub3B0aW9ucykpKTt2YXIgbj0zRCQo dGhpcy5lbCkuZmluZCgiLnJvb3QiKSxyPTNEdGhpcztuLm9uKCJjbGljayIsZnVuYz0KdGlvbihl KXskKCIudG9vbHRpcCIpLmhpZGUoKSxlLnByZXZlbnREZWZhdWx0KCksci5vcHRpb25zLm9uY2xp Y2smJnIub3B0aW9uPQpzLm9uY2xpY2soKX0pLHRoaXMub3B0aW9ucy52aXNpYmxlfHx0aGlzLmhp ZGUoKSxuLnRvb2x0aXAoe3RpdGxlOnQudG9vbHRpcCw9CnBsYWNlbWVudDoiYm90dG9tIn0pfSxz aG93OmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXskKD0KdGhp cy5lbCkuaGlkZSgpfSxhZGRNZW51OmZ1bmN0aW9uKHQpe3ZhciBuPTNEe3RpdGxlOiIiLHRhcmdl dDoiIixocmVmOiIiLG9uPQpjbGljazpudWxsLGRpdmlkZXI6ITEsaWNvbjpudWxsLGNsczoiYnV0 dG9uLW1lbnUgYnRuLWdyb3VwIn07bj0zRGUubWVyZ2UodCw9Cm4pLHRoaXMuJG1lbnV8fCgkKHRo aXMuZWwpLmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU1lbnUoKSksdGhpcy4kbWVudT0zRCQodGhpcz0K LmVsKS5maW5kKCIubWVudSIpKTt2YXIgcj0zRCQodGhpcy5fdGVtcGxhdGVNZW51SXRlbShuKSk7 ci5vbigiY2xpY2siLGZ1bmN0PQppb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLG4ub25jbGljayYm bi5vbmNsaWNrKCl9KSx0aGlzLiRtZW51LmFwcGVuZChyKSxuLmQ9Cml2aWRlciYmdGhpcy4kbWVu dS5hcHBlbmQoJCh0aGlzLl90ZW1wbGF0ZURpdmlkZXIoKSkpfSxfdGVtcGxhdGVNZW51SXRlbTpm dT0KbmN0aW9uKGUpe3ZhciB0PTNEJzxsaT48YSBjbGFzcz0zRCJkcm9wZG93bi1pdGVtIiBocmVm PTNEIicrZS5ocmVmKyciIHRhcmdlPQp0PTNEIicrZS50YXJnZXQrJyI+JztyZXR1cm4gZS5pY29u JiYodCs9M0QnPGkgY2xhc3M9M0QiZmEgJytlLmljb24rJyI+PC9pPic9CiksdCs9M0QiICIrZS50 aXRsZSsiPC9hPiIrIjwvbGk+Iix0fSxfdGVtcGxhdGVNZW51OmZ1bmN0aW9uKCl7cmV0dXJuJzx1 bCBjbD0KYXNzPTNEIm1lbnUgZHJvcGRvd24tbWVudSBwdWxsLXJpZ2h0IiByb2xlPTNEIm1lbnUi PjwvdWw+J30sX3RlbXBsYXRlRGl2aWRlPQpyOmZ1bmN0aW9uKCl7cmV0dXJuJzxsaSBjbGFzcz0z RCJkaXZpZGVyIj48L2xpPid9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXI9CiB0PTNEIiIsbj0z RCIiO2UudGl0bGU/dD0zRCJ3aWR0aDogYXV0bzsiOm49M0QibWFyZ2luOiAwcHg7Ijt2YXIgcj0z RCc8ZGl2ID0KaWQ9M0QiJytlLmlkKyciIHN0eWxlPTNEImZsb2F0OiAnK2UuZmxvYXRpbmcrIjsg Iit0KyciIGNsYXNzPTNEImRyb3Bkb3duICcrPQplLmNscysnIj4nKyc8ZGl2IGNsYXNzPTNEInJv b3QgYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9M0QiZHJvcGQ9Cm93biIgc3R5 bGU9M0QiJytuKyciPicrJzxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyIvPic7cmV0dXJu IGUudGl0bGUmJj0KKHIrPTNEJyZuYnNwOzxzcGFuIGNsYXNzPTNEInRpdGxlIj4nK2UudGl0bGUr Ijwvc3Bhbj4iKSxyKz0zRCI8L2Rpdj48L2Rpdj4iPQoscn19KX0pLGRlZmluZSgibXZjL3VpL3Vp LW1pc2MiLFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktc2VsZWN0LWRlZmF1bHQiLCI9Cm12Yy91 aS91aS1zbGlkZXIiLCJtdmMvdWkvdWktb3B0aW9ucyIsIm12Yy91aS91aS1kcmlsbGRvd24iLCJt dmMvdWkvdWktYnV0dD0Kb24tbWVudSIsIm12Yy91aS91aS1tb2RhbCJdLGZ1bmN0aW9uKGUsdCxu LHIsaSxzLG8pe3ZhciB1PTNEQmFja2JvbmUuVmlldy5lPQp4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6 e3VybDoiIixjbHM6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPQo9M0Rl Lm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50KHRoaXMuX3RlbXBs YXRlKHRoaXMub3B0aW89Cm5zKSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGltZyBj bGFzcz0zRCJ1aS1pbWFnZSAnK2UuY2xzKyciIHNyYz0zRD0KIicrZS51cmwrJyIvPid9fSksYT0z REJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsdDp7dGl0bGU6IiIsY2xzOiIiPQp9 LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0 aW9uc0RlZmF1bHQpLHRoaXM9Ci5zZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9u cykpfSx0aXRsZTpmdW5jdGlvbihlKXt0aGlzLiRlbC5odG1sKD0KZSl9LF90ZW1wbGF0ZTpmdW5j dGlvbihlKXtyZXR1cm4nPGxhYmVsIGNsYXNzPTNEInVpLWxhYmVsICcrZS5jbHMrJyI+JytlLnRp PQp0bGUrIjwvbGFiZWw+In0sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gb3B0aW9ucy50aXRsZX19 KSxmPTNEQmFja2JvbmUuVmlldy49CmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2Zsb2F0aW5nOiJy aWdodCIsaWNvbjoiIix0b29sdGlwOiIiLHBsYWNlbWVudDoiYm90dD0Kb20iLHRpdGxlOiIiLGNs czoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhp cy5vPQpwdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVtcGxhdGUodGhpcy5v cHRpb25zKSksJCh0aGlzLmVsKS50b289Cmx0aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6 ImJvdHRvbSJ9KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZD0KaXY+PHNwYW4gY2xh c3M9M0QiZmEgJytlLmljb24rJyIgY2xhc3M9M0QidWktaWNvbiIvPiZuYnNwOycrZS50aXRsZSsi PC9kaXY+PQoifX0pLGw9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lk Om51bGwsdGl0bGU6IiIsZmxvYXRpbmc6InI9CmlnaHQiLGNsczoidWktYnV0dG9uIGJ0biBidG4t ZGVmYXVsdCIsaWNvbjoiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLj0Kb3B0aW9ucz0z RGUubWVyZ2UodCx0aGlzLm9wdGlvbnNEZWZhdWx0KSx0aGlzLnNldEVsZW1lbnQodGhpcy5fdGVt cGxhdGUodGhpPQpzLm9wdGlvbnMpKSwkKHRoaXMuZWwpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsk KCIudG9vbHRpcCIpLmhpZGUoKSx0Lm9uY2xpY2s9CiYmdC5vbmNsaWNrKCl9KSwkKHRoaXMuZWwp LnRvb2x0aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6ImJvdHRvbSJ9KX0sXz0KdGVtcGxh dGU6ZnVuY3Rpb24oZSl7dmFyIHQ9M0QnPGJ1dHRvbiBpZD0zRCInK2UuaWQrJyIgdHlwZT0zRCJz dWJtaXQiIHN0eWxlPQo9M0QiZmxvYXQ6ICcrZS5mbG9hdGluZysnOyIgdHlwZT0zRCJidXR0b24i IGNsYXNzPTNEIicrZS5jbHMrJyI+JztyZXR1cm4gZS49Cmljb24mJih0Kz0zRCc8aSBjbGFzcz0z RCJpY29uIGZhICcrZS5pY29uKyciPjwvaT4mbmJzcDsnKSx0Kz0zRGUudGl0bGUrIjwvYj0KdXR0 b24+Iix0fX0pLGM9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e2lkOm51 bGwsdGl0bGU6IiIsZmxvPQphdGluZzoicmlnaHQiLGNsczoidWktYnV0dG9uLWljb24iLGljb246 IiIsdG9vbHRpcDoiIixvbmNsaWNrOm51bGx9LGluaXRpYWw9Cml6ZTpmdW5jdGlvbih0KXt0aGlz Lm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZT0K bnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy4kYnV0dG9uPTNEdGhpcy4kZWwu ZmluZCgiLmJ1dHRvbiIpO3ZhPQpyIG49M0R0aGlzOyQodGhpcy5lbCkub24oImNsaWNrIixmdW5j dGlvbigpeyQoIi50b29sdGlwIikuaGlkZSgpLHQub25jbGljayY9CiYhbi5kaXNhYmxlZCYmdC5v bmNsaWNrKCl9KSwkKHRoaXMuZWwpLnRvb2x0aXAoe3RpdGxlOnQudG9vbHRpcCxwbGFjZW1lbnQ6 Ij0KYm90dG9tIn0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy4kYnV0dG9uLmFkZENsYXNzKCJk aXNhYmxlZCIpLHRoaXMuZGlzYWJsPQplZD0zRCEwfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLiRi dXR0b24ucmVtb3ZlQ2xhc3MoImRpc2FibGVkIiksdGhpcy5kaXNhYmw9CmVkPTNEITF9LHNldElj b246ZnVuY3Rpb24oZSl7dGhpcy4kKCJpIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb24p LmFkZD0KQ2xhc3MoZSksdGhpcy5vcHRpb25zLmljb249M0RlfSxfdGVtcGxhdGU6ZnVuY3Rpb24o ZSl7dmFyIHQ9M0QiIjtlLnRpdGxlJiYoPQp0PTNEIndpZHRoOiBhdXRvOyIpO3ZhciBuPTNEJzxk aXYgaWQ9M0QiJytlLmlkKyciIHN0eWxlPTNEImZsb2F0OiAnK2UuZmxvYXQ9CmluZysiOyAiK3Qr JyIgY2xhc3M9M0QiJytlLmNscysnIj4nO3JldHVybiBlLnRpdGxlP24rPTNEJzxkaXYgY2xhc3M9 M0QiYnV0dD0Kb24iPjxpIGNsYXNzPTNEImljb24gZmEgJytlLmljb24rJyIvPiZuYnNwOycrJzxz cGFuIGNsYXNzPTNEInRpdGxlIj4nK2UudGl0PQpsZSsiPC9zcGFuPiIrIjwvZGl2PiI6bis9M0Qn PGkgY2xhc3M9M0QiaWNvbiBmYSAnK2UuaWNvbisnIi8+JyxuKz0zRCI8L2Rpdj49CiIsbn19KSxo PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRsZToiIixjbHM6IiJ9 LGluaXRpYWxpej0KZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCksdGhpcy5zZXRFbGVtZW50PQoodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRp b25zKSksJCh0aGlzLmVsKS5vbigiY2xpY2siLHQub25jbGljayl9LF90ZW1wbGF0ZTo9CmZ1bmN0 aW9uKGUpe3JldHVybic8ZGl2PjxhIGhyZWY9M0QiamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0z RCJ1aS1hbmNob3IgJz0KK2UuY2xzKyciPicrZS50aXRsZSsiPC9hPjwvZGl2PiJ9fSkscD0zREJh Y2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zRGVmYXVsPQp0OnttZXNzYWdlOm51bGwsc3RhdHVz OiJpbmZvIixwZXJzaXN0ZW50OiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMub3A9CnRp b25zPTNEZS5tZXJnZSh0LHRoaXMub3B0aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbWVudCgiPGRp dj48L2Rpdj4iKSx0aGlzLj0Kb3B0aW9ucy5tZXNzYWdlJiZ0aGlzLnVwZGF0ZSh0aGlzLm9wdGlv bnMpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPQo9M0RlLm1lcmdlKHQsdGhpcy5v cHRpb25zRGVmYXVsdCk7aWYodC5tZXNzYWdlIT0zRCIiKXt0aGlzLiRlbC5odG1sKHRoaXMuX3Q9 CmVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy4kZWwuZmluZCgiLmFsZXJ0IikuYXBwZW5kKHQu bWVzc2FnZSksdGhpcy4kZWwuZj0KYWRlSW4oKSx0aGlzLnRpbWVvdXQmJndpbmRvdy5jbGVhclRp bWVvdXQodGhpcy50aW1lb3V0KTtpZighdC5wZXJzaXN0ZW50KXt2PQphciBuPTNEdGhpczt0aGlz LnRpbWVvdXQ9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uJGVsLmlzKCI6dmlzaWJs ZSI9Cik/bi4kZWwuZmFkZU91dCgpOm4uJGVsLmhpZGUoKX0sM2UzKX19ZWxzZSB0aGlzLiRlbC5m YWRlT3V0KCl9LF90ZW1wbGF0ZTpmdT0KbmN0aW9uKGUpe3JldHVybic8ZGl2IGNsYXNzPTNEInVp LW1lc3NhZ2UgYWxlcnQgYWxlcnQtJytlLnN0YXR1cysnIi8+J319KSxkPQo9M0RCYWNrYm9uZS5W aWV3LmV4dGVuZCh7b3B0aW9uc0RlZmF1bHQ6e29uY2xpY2s6bnVsbCxzZWFyY2h3b3JkOiIifSxp bml0aWE9CmxpemU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPTNEZS5tZXJnZSh0LHRoaXMub3B0 aW9uc0RlZmF1bHQpLHRoaXMuc2V0RWxlbT0KZW50KHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9u cykpO3ZhciBuPTNEdGhpczt0aGlzLm9wdGlvbnMub25jbGljayYmdGhpcy4kPQplbC5vbigic3Vi bWl0IixmdW5jdGlvbihlKXt2YXIgdD0zRG4uJGVsLmZpbmQoIiNzZWFyY2giKTtuLm9wdGlvbnMu b25jbGljayg9CnQudmFsKCkpfSl9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4nPGRpdiBj bGFzcz0zRCJ1aS1zZWFyY2giPjxmb3JtIG9ucz0KdWJtaXQ9M0QicmV0dXJuIGZhbHNlOyI+PGlu cHV0IGlkPTNEInNlYXJjaCIgY2xhc3M9M0QiZm9ybS1jb250cm9sIGlucHV0LXNtPQoiIHR5cGU9 M0QidGV4dCIgbmFtZT0zRCJzZWFyY2giIHBsYWNlaG9sZGVyPTNEIlNlYXJjaC4uLiIgdmFsdWU9 M0QiJytlLnNlYXI9CmNod29yZCsnIj4nKyc8YnV0dG9uIHR5cGU9M0Qic3VibWl0IiBjbGFzcz0z RCJidG4gc2VhcmNoLWJ0biI+JysnPGkgY2xhc3M9Cj0zRCJmYSBmYS1zZWFyY2giPjwvaT4nKyI8 L2J1dHRvbj4iKyI8L2Zvcm0+IisiPC9kaXY+In19KSx2PTNEQmFja2JvbmUuVmlldz0KLmV4dGVu ZCh7b3B0aW9uc0RlZmF1bHQ6e3R5cGU6InRleHQiLHBsYWNlaG9sZGVyOiIiLGRpc2FibGVkOiEx LHZpc2libGU6ITAsPQpjbHM6IiIsYXJlYTohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlz Lm9wdGlvbnM9M0RlLm1lcmdlKHQsdGhpcy5vcHRpb249CnNEZWZhdWx0KSx0aGlzLnNldEVsZW1l bnQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSksdGhpcy5vcHRpb25zLnZhbHVlIT0KPTNE PTNEdW5kZWZpbmVkJiZ0aGlzLnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5vcHRpb25z LmRpc2FibGVkJiZ0aGlzPQouJGVsLnByb3AoImRpc2FibGVkIiwhMCksdGhpcy5vcHRpb25zLnZp c2libGV8fHRoaXMuJGVsLmhpZGUoKTt2YXIgbj0zRHRoaXM9Cjt0aGlzLiRlbC5vbigiaW5wdXQi LGZ1bmN0aW9uKCl7bi5vcHRpb25zLm9uY2hhbmdlJiZuLm9wdGlvbnMub25jaGFuZ2Uobi4kZT0K bC52YWwoKSl9KX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPTNEPTNEdW5kZWZpbmVkJiZ0 aGlzLiRlbC52YWwoZSksdGhpPQpzLiRlbC52YWwoKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3Jl dHVybiBlLmFyZWE/Jzx0ZXh0YXJlYSBpZD0zRCInK2UuaWQrJyI9CiBjbGFzcz0zRCJ1aS10ZXh0 YXJlYSAnK2UuY2xzKyciPjwvdGV4dGFyZWE+JzonPGlucHV0IGlkPTNEIicrZS5pZCsnIiB0eXBl PQo9M0QiJytlLnR5cGUrJyIgdmFsdWU9M0QiJytlLnZhbHVlKyciIHBsYWNlaG9sZGVyPTNEIicr ZS5wbGFjZWhvbGRlcisnIiBjbGE9CnNzPTNEInVpLWlucHV0ICcrZS5jbHMrJyI+J319KSxtPTNE QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpbz0KbihlKXt0aGlzLm9wdGlv bnM9M0RlLHRoaXMuc2V0RWxlbWVudCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSx0aGlz Lm9wPQp0aW9ucy52YWx1ZSE9M0Q9M0R1bmRlZmluZWQmJnRoaXMudmFsdWUodGhpcy5vcHRpb25z LnZhbHVlKX0sdmFsdWU6ZnVuY3Rpb249CihlKXtyZXR1cm4gZSE9M0Q9M0R1bmRlZmluZWQmJnRo aXMuJCgiaGlkZGVuIikudmFsKGUpLHRoaXMuJCgiaGlkZGVuIikudmFsKD0KKX0sX3RlbXBsYXRl OmZ1bmN0aW9uKGUpe3ZhciB0PTNEJzxkaXYgaWQ9M0QiJytlLmlkKyciID4nO3JldHVybiBlLmlu Zm8mJih0PQorPTNEIjxsYWJlbD4iK2UuaW5mbysiPC9sYWJlbD4iKSx0Kz0zRCc8aGlkZGVuIHZh bHVlPTNEIicrZS52YWx1ZSsnIi8+JysiPC89CmRpdj4iLHR9fSk7cmV0dXJue0FuY2hvcjpoLEJ1 dHRvbjpsLEJ1dHRvbkljb246YyxCdXR0b25NZW51OnMsSWNvbjpmLEltYWdlOj0KdSxJbnB1dDp2 LExhYmVsOmEsTWVzc2FnZTpwLE1vZGFsOm8sUmFkaW9CdXR0b246ci5SYWRpb0J1dHRvbixDaGVj a2JveDpyLkNoPQplY2tib3gsUmFkaW86ci5SYWRpbyxTZWFyY2hib3g6ZCxTZWxlY3Q6dCxIaWRk ZW46bSxTbGlkZXI6bixEcmlsbGRvd246aX19KSw9CmRlZmluZSgicGx1Z2luL2xpYnJhcnkvam9i cyIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm9uZS5Nbz0KZGVsLmV4 dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LG4pe3RoaXMuYXBwPTNEdCx0aGlzLm9wdGlvbnM9 M0RlLm1lcmdlKG4sPQp0aGlzLm9wdGlvbnNEZWZhdWx0KX0scmVxdWVzdDpmdW5jdGlvbihlLHQs bixyLGkpe3ZhciBzPTNEdGhpcztlLnN0YXRlKCJ3YWk9CnQiLCJSZXF1ZXN0aW5nIGpvYiByZXN1 bHRzLi4uIik7dmFyIG89M0RlLmdldCgiZGF0YXNldF9pZF9qb2IiKTtvIT0zRCIiP3MuXz0Kd2Fp dChlLHIsaSk6cy5fc3VibWl0KGUsdCxuLHIsaSl9LGNsZWFudXA6ZnVuY3Rpb24odCl7dmFyIG49 M0R0aGlzLHI9M0R0LmdlPQp0KCJkYXRhc2V0X2lkX2pvYiIpO3IhPTNEIiImJihlLnJlcXVlc3Qo e3R5cGU6IlBVVCIsdXJsOmNvbmZpZy5yb290KyJhcGkvaGk9CnN0b3JpZXMvbm9uZS9jb250ZW50 cy8iK3IsZGF0YTp7ZGVsZXRlZDohMH0sc3VjY2VzczpmdW5jdGlvbigpe24uX3JlZnJlc2hIZD0K YXMoKX19KSx0LnNldCgiZGF0YXNldF9pZF9qb2IiLCIiKSl9LF9zdWJtaXQ6ZnVuY3Rpb24odCxu LHIsaSxzKXt2YXIgbz0zRHRoPQppcyx1PTNEdC5pZCxhPTNEdC5nZXQoInR5cGUiKSxmPTNEdC5k ZWZpbml0aW9uO2RhdGE9M0R7dG9vbF9pZDoiY2hhcnRzIixpbnA9CnV0czp7aW5wdXQ6e2lkOnQu Z2V0KCJkYXRhc2V0X2lkIiksc3JjOiJoZGEifSxtb2R1bGU6Zi5leGVjdXRlLGNvbHVtbnM6cixz ZT0KdHRpbmdzOm59fSx0LnN0YXRlKCJ3YWl0IiwiU2VuZGluZyBqb2IgcmVxdWVzdC4uLiIpLGUu cmVxdWVzdCh7dHlwZToiUE9TVCIsPQp1cmw6Y29uZmlnLnJvb3QrImFwaS90b29scyIsZGF0YTpk YXRhLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7aWYoIWUub3V0cHV0c3x8ZS49Cm91dHB1dHMubGVuZ3Ro PTNEPTNEMCl0LnN0YXRlKCJmYWlsZWQiLCJKb2Igc3VibWlzc2lvbiBmYWlsZWQuIE5vIHJlc3Bv bnNlLj0KIikscyYmcygpO2Vsc2V7by5fcmVmcmVzaEhkYXMoKTt2YXIgbj0zRGUub3V0cHV0c1sw XTt0LnN0YXRlKCJ3YWl0IiwiWW91ciBqPQpvYiBoYXMgYmVlbiBxdWV1ZWQuIFlvdSBtYXkgY2xv c2UgdGhlIGJyb3dzZXIgd2luZG93LiBUaGUgam9iIHdpbGwgcnVuIGluIHQ9CmhlIGJhY2tncm91 bmQuIiksdC5zZXQoImRhdGFzZXRfaWRfam9iIixuLmlkKSxvLmFwcC5zdG9yYWdlLnNhdmUoKSxv Ll93YWl0KD0KdCxpLHMpfX0sZXJyb3I6ZnVuY3Rpb24oZSl7dmFyIG49M0QiIjtlJiZlLm1lc3Nh Z2UmJmUubWVzc2FnZS5kYXRhJiZlLm1lc3NhPQpnZS5kYXRhLmlucHV0JiYobj0zRGUubWVzc2Fn ZS5kYXRhLmlucHV0KyIuIiksdC5zdGF0ZSgiZmFpbGVkIiwiVGhpcyB2aXN1YWw9Cml6YXRpb24g cmVxdWlyZXMgdGhlICdjaGFydHMnIHRvb2wuIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgaW5zdGFs bGVkLiAiK24pLD0KcyYmcygpfX0pfSxfd2FpdDpmdW5jdGlvbih0LG4scil7dmFyIGk9M0R0aGlz O2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Y29uPQpmaWcucm9vdCsiYXBpL2RhdGFzZXRzLyIr dC5nZXQoImRhdGFzZXRfaWRfam9iIiksZGF0YTp7fSxzdWNjZXNzOmZ1bmN0aW9uKGU9Cil7dmFy IHM9M0QhMTtzd2l0Y2goZS5zdGF0ZSl7Y2FzZSJvayI6dC5zdGF0ZSgid2FpdCIsIkpvYiBjb21w bGV0ZWQgc3VjY2Vzcz0KZnVsbHkuLi4iKSxuJiZuKGUpLHM9M0QhMDticmVhaztjYXNlImVycm9y Ijp0LnN0YXRlKCJmYWlsZWQiLCJKb2IgaGFzIGZhaWxlPQpkLiBQbGVhc2UgY2hlY2sgdGhlIGhp c3RvcnkgZm9yIGRldGFpbHMuIiksciYmcihlKSxzPTNEITA7YnJlYWs7Y2FzZSJydW5uaW49Cmci OnQuc3RhdGUoIndhaXQiLCJZb3VyIGpvYiBpcyBydW5uaW5nLiBZb3UgbWF5IGNsb3NlIHRoZSBi cm93c2VyIHdpbmRvdy4gVD0KaGUgam9iIHdpbGwgY29udGludWUgaW4gdGhlIGJhY2tncm91bmQu Iil9c3x8c2V0VGltZW91dChmdW5jdGlvbigpe2kuX3dhaXQoPQp0LG4scil9LGkuYXBwLmNvbmZp Zy5nZXQoInF1ZXJ5X3RpbWVvdXQiKSl9fSl9LF9yZWZyZXNoSGRhczpmdW5jdGlvbigpe0dhbGE9 Cnh5JiZHYWxheHkuY3Vyckhpc3RvcnlQYW5lbCYmR2FsYXh5LmN1cnJIaXN0b3J5UGFuZWwucmVm cmVzaENvbnRlbnRzKCl9fSl9KT0KLGRlZmluZSgicGx1Z2luL2xpYnJhcnkvZGF0YXNldHMiLFsi dXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvPQpuZS5Db2xsZWN0aW9uLmV4 dGVuZCh7bGlzdDp7fSxjYWNoZTp7fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsbil7dGhpcy5hcHA9 M0Q9CnQsdGhpcy5vcHRpb25zPTNEZS5tZXJnZShuLHRoaXMub3B0aW9uc0RlZmF1bHQpfSxyZXF1 ZXN0OmZ1bmN0aW9uKGUpe2UuZ3JvdT0KcHM/dGhpcy5fZ2V0X2Jsb2NrcyhlKTp0aGlzLl9nZXRf ZGF0YXNldChlLmlkLGUuc3VjY2VzcyxlLmVycm9yKX0sX2dldF9ibG9jPQprczpmdW5jdGlvbihl KXtmdW5jdGlvbiBjKGkpe2wuX2dldChpLGZ1bmN0aW9uKCl7dmFyIHM9M0QhMTtmb3IodmFyIG8g aW4gZS49Cmdyb3Vwcyl7ZGVzdGluYXRpb25fZ3JvdXA9M0RlLmdyb3Vwc1tvXSxzb3VyY2VfZ3Jv dXA9M0RpLmdyb3Vwc1tvXSxkZXN0aW5hdD0KaW9uX2dyb3VwLnZhbHVlc3x8KGRlc3RpbmF0aW9u X2dyb3VwLnZhbHVlcz0zRFtdKSxkZXN0aW5hdGlvbl9ncm91cC52YWx1ZXM9Cj0zRGRlc3RpbmF0 aW9uX2dyb3VwLnZhbHVlcy5jb25jYXQoc291cmNlX2dyb3VwLnZhbHVlcyk7aWYoc291cmNlX2dy b3VwLnZhbD0KdWVzLmxlbmd0aD0zRD0zRDApe3M9M0QhMDticmVha319aWYoKytmPHUmJiFzKXtu JiZuKHBhcnNlSW50KGYvdSoxMDApKTt2YXIgPQpsPTNEaS5zdGFydCtyO2k9M0QkLmV4dGVuZCgh MCxhLHtzdGFydDpsfSksYyhpKX1lbHNlIHQoKX0pfXZhciB0PTNEZS5zdWNjZXM9CnMsbj0zRGUu cHJvZ3Jlc3Mscj0zRHRoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xpbWl0IiksaT0zRGUuc3Rh cnR8fDAscz0zRD0KaStlLnF1ZXJ5X2xpbWl0fHxpK3RoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5 X2xpbWl0Iiksbz0zRE1hdGguYWJzKHMtaSk7aWYoPQpvPD0zRDApe2NvbnNvbGUuZGVidWcoIkZB SUxFRCAtIERhdGFzZXRzOjpyZXF1ZXN0KCkgLSBJbnZhbGlkIHF1ZXJ5IHJhbmdlLiI9Cik7cmV0 dXJufXZhciB1PTNETWF0aC5jZWlsKG8vcil8fDEsYT0zRCQuZXh0ZW5kKCEwLHt9LGUpLGY9M0Qw LGw9M0R0aGlzLGg9Cj0zRCQuZXh0ZW5kKCEwLGEse3N0YXJ0Oml9KTt0aGlzLl9nZXRfZGF0YXNl dChlLmlkLGZ1bmN0aW9uKCl7YyhoKX0pfSxfZ2V0Xz0KZGF0YXNldDpmdW5jdGlvbih0LG4scil7 dmFyIGk9M0R0aGlzLmxpc3RbdF07aWYoaSl7bihpKTtyZXR1cm59dmFyIHM9M0R0aGlzPQo7ZS5y ZXF1ZXN0KHt0eXBlOiJHRVQiLHVybDpjb25maWcucm9vdCsiYXBpL2RhdGFzZXRzLyIrdCxzdWNj ZXNzOmZ1bmN0aW9uKGU9Cil7c3dpdGNoKGUuc3RhdGUpe2Nhc2UiZXJyb3IiOnImJnIoZSk7YnJl YWs7ZGVmYXVsdDpzLmxpc3RbdF09M0RlLG4oZSl9fX0pfT0KLF9ibG9ja19pZDpmdW5jdGlvbihl LHQpe3JldHVybiBlLmlkKyJfIitlLnN0YXJ0KyJfIitlLnN0YXJ0K3RoaXMuYXBwLmNvbmZpPQpn LmdldCgicXVlcnlfbGltaXQiKSsiXyIrdH0sX2dldDpmdW5jdGlvbihlLHQpe2Uuc3RhcnQ9M0Rl LnN0YXJ0fHwwO3ZhciBuPQo9M0RbXSxyPTNEe30saT0zRDA7Zm9yKHZhciBzIGluIGUuZ3JvdXBz KXt2YXIgbz0zRGUuZ3JvdXBzW3NdO2Zvcih2YXIgdSBpbiA9Cm8uY29sdW1ucyl7dmFyIGE9M0Rv LmNvbHVtbnNbdV0uaW5kZXgsZj0zRHRoaXMuX2Jsb2NrX2lkKGUsYSk7aWYodGhpcy5jYWNoZT0K W2ZdfHxhPTNEPTNEPTNEImF1dG8ifHxhPTNEPTNEPTNEInplcm8iKWNvbnRpbnVlOyFyW2FdJiZh IT0zRD0zRHVuZGVmaW5lZCYmPQooclthXT0zRGksbi5wdXNoKGEpLGkrKyl9fWlmKG4ubGVuZ3Ro PTNEPTNEMCl7dGhpcy5fZmlsbF9mcm9tX2NhY2hlKGUpLHQoZSk9CjtyZXR1cm59dmFyIGw9M0R7 ZGF0YXNldF9pZDplLmlkLHN0YXJ0OmUuc3RhcnQsY29sdW1uczpufSxjPTNEdGhpczt0aGlzLl9m ZT0KdGNoKGwsZnVuY3Rpb24ocil7Zm9yKHZhciBpIGluIHIpe3ZhciBzPTNEbltpXSxvPTNEYy5f YmxvY2tfaWQoZSxzKTtjLmNhY2hlPQpbb109M0RyW2ldfWMuX2ZpbGxfZnJvbV9jYWNoZShlKSx0 KGUpfSl9LF9maWxsX2Zyb21fY2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9Cj0zRGUuc3RhcnQ7Y29u c29sZS5kZWJ1ZygiRGF0YXNldHM6Ol9maWxsX2Zyb21fY2FjaGUoKSAtIEZpbGxpbmcgcmVxdWVz dCBmcj0Kb20gY2FjaGUgYXQgIit0KyIuIik7dmFyIG49M0QwO2Zvcih2YXIgciBpbiBlLmdyb3Vw cyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmPQpvcih2YXIgcyBpbiBpLmNvbHVtbnMpe3ZhciBvPTNE aS5jb2x1bW5zW3NdLHU9M0R0aGlzLl9ibG9ja19pZChlLG8uaW5kZXgpLGE9Cj0zRHRoaXMuY2Fj aGVbdV07YSYmKG49M0RNYXRoLm1heChuLGEubGVuZ3RoKSl9fW49M0Q9M0QwJiZjb25zb2xlLmRl YnVnKCJEYT0KdGFzZXRzOjpfZmlsbF9mcm9tX2NhY2hlKCkgLSBSZWFjaGVkIGRhdGEgcmFuZ2Ug bGltaXQuIik7Zm9yKHZhciByIGluIGUuZ3JvPQp1cHMpe3ZhciBpPTNEZS5ncm91cHNbcl07aS52 YWx1ZXM9M0RbXTtmb3IodmFyIGY9M0QwO2Y8bjtmKyspaS52YWx1ZXNbZl09M0Q9Cnt4OnBhcnNl SW50KGYpK3R9fWZvcih2YXIgciBpbiBlLmdyb3Vwcyl7dmFyIGk9M0RlLmdyb3Vwc1tyXTtmb3Io dmFyIHMgaW4gaT0KLmNvbHVtbnMpe3ZhciBvPTNEaS5jb2x1bW5zW3NdO3N3aXRjaChvLmluZGV4 KXtjYXNlImF1dG8iOmZvcih2YXIgZj0zRDA7ZjxuPQo7ZisrKXt2YXIgbD0zRGkudmFsdWVzW2Zd O2xbc109M0RwYXJzZUludChmKSt0fWJyZWFrO2Nhc2UiemVybyI6Zm9yKHZhciBmPQo9M0QwO2Y8 bjtmKyspe3ZhciBsPTNEaS52YWx1ZXNbZl07bFtzXT0zRDB9YnJlYWs7ZGVmYXVsdDp2YXIgdT0z RHRoaXMuX2Jsb2M9CmtfaWQoZSxvLmluZGV4KSxhPTNEdGhpcy5jYWNoZVt1XTtmb3IodmFyIGY9 M0QwO2Y8bjtmKyspe3ZhciBsPTNEaS52YWx1ZXNbZj0KXSxjPTNEYVtmXTtpc05hTihjKSYmIW8u aXNfbGFiZWwmJihjPTNEMCksbFtzXT0zRGN9fX19fSxfZmV0Y2g6ZnVuY3Rpb24odCxuPQope3Zh ciByPTNEdC5zdGFydD90LnN0YXJ0OjAsaT0zRHRoaXMuYXBwLmNvbmZpZy5nZXQoInF1ZXJ5X2xp bWl0Iikscz0zRDA7dC49CmNvbHVtbnMmJihzPTNEdC5jb2x1bW5zLmxlbmd0aCxjb25zb2xlLmRl YnVnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBGZXRjaGluZz0KICIrcysiIGNvbHVtbihzKSBhdCAi K3IrIi4iKSkscz0zRD0zRDAmJmNvbnNvbGUuZGVidWcoIkRhdGFzZXRzOjpfZmV0Y2goKSAtPQog Tm8gY29sdW1ucyByZXF1ZXN0ZWQiKTt2YXIgbz0zRCIiO2Zvcih2YXIgdSBpbiB0LmNvbHVtbnMp bys9M0R0LmNvbHVtbnNbdV09CisiLCI7bz0zRG8uc3Vic3RyaW5nKDAsby5sZW5ndGgtMSk7dmFy IGE9M0R0aGlzO2UucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6Yz0Kb25maWcucm9vdCsiYXBpL2Rh dGFzZXRzLyIrdC5kYXRhc2V0X2lkLGRhdGE6e2RhdGFfdHlwZToicmF3X2RhdGEiLHByb3ZpZGVy PQo6ImRhdGFzZXQtY29sdW1uIixsaW1pdDppLG9mZnNldDpyLGluZGVjZXM6b30sc3VjY2Vzczpm dW5jdGlvbihlKXt2YXIgdD0zRG49CmV3IEFycmF5KHMpO2Zvcih2YXIgcj0zRDA7cjxzO3IrKyl0 W3JdPTNEW107Zm9yKHZhciByIGluIGUuZGF0YSl7dmFyIGk9M0RlLj0KZGF0YVtyXTtmb3IodmFy IG8gaW4gaSl7dmFyIHU9M0RpW29dO3UhPTNEPTNEdW5kZWZpbmVkJiZ1IT0zRDIxNDc0ODM2NDcm JnRbPQpvXS5wdXNoKHUpfX1jb25zb2xlLmRlYnVnKCJEYXRhc2V0czo6X2ZldGNoKCkgLSBGZXRj aGluZyBjb21wbGV0ZS4iKSxuKHQpfX09Cil9fSl9KSxkZWZpbmUoInBsdWdpbi9tb2RlbHMvZ3Jv dXAiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dD0KZW5kKHtkZWZhdWx0 czp7a2V5OiJEYXRhIGxhYmVsIixkYXRlOiIifSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY2xlYXIo e3NpbGVuPQp0OiEwfSkuc2V0KHRoaXMuZGVmYXVsdHMpLHRoaXMudHJpZ2dlcigicmVzZXQiLHRo aXMpfX0pfSksZGVmaW5lKCJwbHVnaW4vbW89CmRlbHMvZ3JvdXBzIixbInBsdWdpbi9tb2RlbHMv Z3JvdXAiXSxmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuQ29sbGVjdGlvbj0KLmV4dGVuZCh7 bW9kZWw6ZX0pfSksZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2NoYXJ0IixbInBsdWdpbi9tb2RlbHMv Z3JvdXBzIl0sPQpmdW5jdGlvbihlKXtyZXR1cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtkZWZh dWx0czp7aWQ6bnVsbCx0aXRsZToiIix0eXBlOiI9CiIsZGF0ZTpudWxsLHN0YXRlOiIiLHN0YXRl X2luZm86IiIsbW9kaWZpZWQ6ITEsZGF0YXNldF9pZDoiIixkYXRhc2V0X2lkX2pvYj0KOiIifSxp bml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuZ3JvdXBzPTNEbmV3IGUsdGhpcy5zZXR0aW5ncz0z RG5ldyBCYWNrYm9uPQplLk1vZGVsfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY2xlYXIoe3NpbGVu dDohMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0aGlzLmc9CnJvdXBzLnJlc2V0KCksdGhpcy5zZXR0 aW5ncy5jbGVhcigpLHRoaXMudHJpZ2dlcigicmVzZXQiLHRoaXMpfSxjb3B5OmZ1bmN0aT0Kb24o ZSl7dmFyIHQ9M0R0aGlzO3QuY2xlYXIoe3NpbGVudDohMH0pLnNldCh0aGlzLmRlZmF1bHRzKSx0 LnNldChlLmF0dHJpYnV0PQplcyksdC5zZXR0aW5ncz0zRGUuc2V0dGluZ3MuY2xvbmUoKSx0Lmdy b3Vwcy5yZXNldCgpLGUuZ3JvdXBzLmVhY2goZnVuY3Rpb249CihlKXt0Lmdyb3Vwcy5hZGQoZS5j bG9uZSgpKX0pLHQudHJpZ2dlcigiY2hhbmdlIix0KX0sc3RhdGU6ZnVuY3Rpb24oZSx0KXt0aD0K aXMuc2V0KCJzdGF0ZSIsZSksdGhpcy5zZXQoInN0YXRlX2luZm8iLHQpLHRoaXMudHJpZ2dlcigi c2V0OnN0YXRlIiksY29uc29sPQplLmRlYnVnKCJDaGFydDpzdGF0ZSgpIC0gIit0KyIgKCIrZSsi KSIpfX0pfSk7dmFyIFZpc3VhbGl6YXRpb249M0RCYWNrYm9uZS49Ck1vZGVsLmV4dGVuZCh7ZGVm YXVsdHM6e2NvbmZpZzp7fX0sdXJsUm9vdDpmdW5jdGlvbigpe3ZhciBlPTNEIi9hcGkvdmlzdWFs aT0KemF0aW9ucyI7cmV0dXJuIHdpbmRvdy5nYWxheHlfY29uZmlnJiZnYWxheHlfY29uZmlnLnJv b3Q/Z2FsYXh5X2NvbmZpZy5yb290PQorZTplfSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe18uaXNP YmplY3QoZS5jb25maWcpJiZfLmlzT2JqZWN0KHRoaXMuZGVmYXVsdHM9Ci5jb25maWcpJiZfLmRl ZmF1bHRzKGUuY29uZmlnLHRoaXMuZGVmYXVsdHMuY29uZmlnKSx0aGlzLl9zZXRVcExpc3RlbmVy cygpfT0KLF9zZXRVcExpc3RlbmVyczpmdW5jdGlvbigpe30sc2V0OmZ1bmN0aW9uKGUsdCl7aWYo ZT0zRD0zRD0zRCJjb25maWciKXt2YXIgPQpuPTNEdGhpcy5nZXQoImNvbmZpZyIpO18uaXNPYmpl Y3QobikmJih0PTNEXy5leHRlbmQoXy5jbG9uZShuKSx0KSl9cmV0dXJuIEI9CmFja2JvbmUuTW9k ZWwucHJvdG90eXBlLnNldC5jYWxsKHRoaXMsZSx0KSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigp e3ZhciBlPQo9M0R0aGlzLmdldCgiaWQiKXx8IiI7cmV0dXJuIHRoaXMuZ2V0KCJ0aXRsZSIpJiYo ZSs9M0QiOiIrdGhpcy5nZXQoInRpdGxlIik9CiksIlZpc3VhbGl6YXRpb24oIitlKyIpIn19KSxW aXN1YWxpemF0aW9uQ29sbGVjdGlvbj0zREJhY2tib25lLkNvbGxlY3Rpb24uZT0KeHRlbmQoe21v ZGVsOlZpc3VhbGl6YXRpb24sdXJsOmZ1bmN0aW9uKCl7cmV0dXJuIGdhbGF4eV9jb25maWcucm9v dCsiYXBpL3ZpPQpzdWFsaXphdGlvbnMifSxpbml0aWFsaXplOmZ1bmN0aW9uKGUsdCl7dD0zRHR8 fHt9fSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0KPTNEdGhpcztlPTNEXy5tYXAoZSxmdW5jdGlv bihlKXt2YXIgdD0zRG4uZ2V0KGUuaWQpO2lmKCF0KXJldHVybiBlO3ZhciByPTNEPQp0LnRvSlNP TigpO3JldHVybiBfLmV4dGVuZChyLGUpLHJ9KSxCYWNrYm9uZS5Db2xsZWN0aW9uLnByb3RvdHlw ZS5zZXQuY2FsbCg9CnRoaXMsZSx0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bIlZpc3Vh bGl6YXRpb25Db2xsZWN0aW9uKCIsW3RoaXMuaGlzdD0Kb3J5SWQsdGhpcy5sZW5ndGhdLmpvaW4o KSwiKSJdLmpvaW4oIiIpfX0pO2RlZmluZSgibXZjL3Zpc3VhbGl6YXRpb24vdmlzdWFsPQppemF0 aW9uLW1vZGVsIixmdW5jdGlvbigpe30pLGRlZmluZSgicGx1Z2luL2xpYnJhcnkvc3RvcmFnZSIs WyJ1dGlscy91dGlscyI9CiwicGx1Z2luL21vZGVscy9jaGFydCIsInBsdWdpbi9tb2RlbHMvZ3Jv dXAiLCJtdmMvdmlzdWFsaXphdGlvbi92aXN1YWxpemF0aT0Kb24tbW9kZWwiXSxmdW5jdGlvbihl LHQsbil7cmV0dXJuIEJhY2tib25lLk1vZGVsLmV4dGVuZCh7dmlzOm51bGwsaW5pdGlhbGl6PQpl OmZ1bmN0aW9uKGUpe3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhp cy5vcHRpb25zPTNEdGhpcy49CmFwcC5vcHRpb25zLHRoaXMuaWQ9M0R0aGlzLm9wdGlvbnMuaWQs dGhpcy52aXM9M0RuZXcgVmlzdWFsaXphdGlvbih7dHlwZToiYz0KaGFydHMiLGNvbmZpZzp7ZGF0 YXNldF9pZDp0aGlzLm9wdGlvbnMuY29uZmlnLmRhdGFzZXRfaWQsY2hhcnRfZGljdDp7fX19KSx0 PQpoaXMuaWQmJih0aGlzLnZpcy5pZD0zRHRoaXMuaWQpO3ZhciB0PTNEdGhpcy5vcHRpb25zLmNv bmZpZy5jaGFydF9kaWN0O3QmJig9CnRoaXMudmlzLmdldCgiY29uZmlnIikuY2hhcnRfZGljdD0z RHQpfSxzYXZlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmFwcC5jaD0KYXJ0O3RoaXMudmlzLmdl dCgiY29uZmlnIikuY2hhcnRfZGljdD0zRHt9O3ZhciB0PTNEZS5nZXQoInRpdGxlIik7dCE9M0Qi IiYmPQp0aGlzLnZpcy5zZXQoInRpdGxlIix0KTt2YXIgbj0zRHthdHRyaWJ1dGVzOmUuYXR0cmli dXRlcyxzZXR0aW5nczplLnNldHRpbmc9CnMuYXR0cmlidXRlcyxncm91cHM6W119O2UuZ3JvdXBz LmVhY2goZnVuY3Rpb24oZSl7bi5ncm91cHMucHVzaChlLmF0dHJpYnV0ZT0Kcyl9KSx0aGlzLnZp cy5nZXQoImNvbmZpZyIpLmNoYXJ0X2RpY3Q9M0RuO3ZhciByPTNEdGhpczt0aGlzLnZpcy5zYXZl KCkuZmFpPQpsKGZ1bmN0aW9uKGUsdCxuKXtjb25zb2xlLmVycm9yKGUsdCxuKX0pLnRoZW4oZnVu Y3Rpb24oZSl7ZSYmZS5pZCYmKHIuaWQ9M0Q9CmUuaWQpfSl9LGxvYWQ6ZnVuY3Rpb24oKXt2YXIg ZT0zRHRoaXMudmlzLmdldCgiY29uZmlnIikuY2hhcnRfZGljdDtpZighZS5hdD0KdHJpYnV0ZXMp cmV0dXJuITE7dmFyIHQ9M0RlLmF0dHJpYnV0ZXMudHlwZTtpZighdClyZXR1cm4gY29uc29sZS5k ZWJ1ZygiU3RvPQpyYWdlOjpsb2FkKCkgLSBDaGFydCB0eXBlIG5vdCBwcm92aWRlZC4gSW52YWxp ZCBmb3JtYXQuIiksITE7dmFyIHI9M0R0aGlzLmE9CnBwLnR5cGVzLmdldCh0KTtpZighcilyZXR1 cm4gY29uc29sZS5kZWJ1ZygiU3RvcmFnZTo6bG9hZCgpIC0gQ2hhcnQgdHlwZSBubz0KdCBzdXBw b3J0ZWQuIFBsZWFzZSByZS1jb25maWd1cmUgdGhlIGNoYXJ0LiBSZXNldHRpbmcgY2hhcnQuIiks ITE7Y29uc29sZS5kPQplYnVnKCJTdG9yYWdlOjpsb2FkKCkgLSBMb2FkaW5nIGNoYXJ0IHR5cGUg Iit0KyIuIiksdGhpcy5jaGFydC5kZWZpbml0aW9uPQo9M0RyLHRoaXMuY2hhcnQuc2V0KGUuYXR0 cmlidXRlcyksdGhpcy5jaGFydC5zdGF0ZSgib2siLCJMb2FkaW5nIHNhdmVkIHZpc3U9CmFsaXph dGlvbi4uLiIpLHRoaXMuY2hhcnQuc2V0dGluZ3Muc2V0KGUuc2V0dGluZ3MpO2Zvcih2YXIgaSBp biBlLmdyb3Vwcyl0aD0KaXMuY2hhcnQuZ3JvdXBzLmFkZChuZXcgbihlLmdyb3Vwc1tpXSkpO3Jl dHVybiB0aGlzLmNoYXJ0LnNldCgibW9kaWZpZWQiLCExPQopLCEwfX0pfSksZGVmaW5lKCJ1dGls cy9kZWZlcnJlZCIsWyJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUpe3JldHVybiBCYWNrYm89Cm5l Lk1vZGVsLmV4dGVuZCh7cXVldWU6W10scHJvY2Vzczp7fSxjb3VudGVyOjAsaW5pdGlhbGl6ZTpm dW5jdGlvbigpe3RoaXMubz0KbigicmVmcmVzaCIsZnVuY3Rpb24oKXtpZih0aGlzLnF1ZXVlLmxl bmd0aD4wJiZ0aGlzLnJlYWR5KCkpe3ZhciBlPTNEdGhpcy5xPQp1ZXVlWzBdO3RoaXMucXVldWUu c3BsaWNlKDAsMSksZSYmZSgpfX0pfSxleGVjdXRlOmZ1bmN0aW9uKGUpe3RoaXMucXVldWUucHU9 CnNoKGUpLHRoaXMudHJpZ2dlcigicmVmcmVzaCIpfSxyZWdpc3RlcjpmdW5jdGlvbigpe3ZhciB0 PTNEZS51dWlkKCk7cmV0dXJuID0KdGhpcy5wcm9jZXNzW3RdPTNEITAsdGhpcy5jb3VudGVyKyss Y29uc29sZS5kZWJ1ZygiRGVmZXJyZWQ6cmVnaXN0ZXIoKSAtIFJlPQpnaXN0ZXJpbmcgIit0KSx0 fSxkb25lOmZ1bmN0aW9uKGUpe3RoaXMucHJvY2Vzc1tlXSYmKGRlbGV0ZSB0aGlzLnByb2Nlc3Nb ZV09Cix0aGlzLmNvdW50ZXItLSxjb25zb2xlLmRlYnVnKCJEZWZlcnJlZDpkb25lKCkgLSBVbnJl Z2lzdGVyaW5nICIrZSksdGhpcy50cj0KaWdnZXIoInJlZnJlc2giKSl9LHJlc2V0OmZ1bmN0aW9u KCl7dGhpcy5xdWV1ZT0zRFtdfSxyZWFkeTpmdW5jdGlvbigpe3JldHVyPQpuIHRoaXMuY291bnRl cj0zRD0zRDB9fSl9KSxkZWZpbmUoInBsdWdpbi92aWV3cy92aWV3cG9ydCIsWyJtdmMvdWkvdWkt cG9ydGw9CmV0IiwibXZjL3VpL3VpLW1pc2MiLCJ1dGlscy91dGlscyJdLGZ1bmN0aW9uKGUsdCxu KXtyZXR1cm4gQmFja2JvbmUuVmlldy5leD0KdGVuZCh7Y29udGFpbmVyX2xpc3Q6W10sY2FudmFz X2xpc3Q6W10saW5pdGlhbGl6ZTpmdW5jdGlvbihlLHQpe3RoaXMuYXBwPTNEPQplLHRoaXMuY2hh cnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLm9wdGlvbnM9M0RuLm1lcmdlKHQsdGhpcy5vcHRpb25z RGVmYXVsdCk9Cix0aGlzLnNldEVsZW1lbnQoJCh0aGlzLl90ZW1wbGF0ZSgpKSksdGhpcy5fZnVs bHNjcmVlbih0aGlzLiRlbCwxMDApO3ZhciByPQo9M0QkKCJib2R5IikuY3NzKCJvdmVyZmxvdyIp O3RoaXMuJGVsLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7JCgiYm9keSIpLmM9CnNzKCJvdmVy ZmxvdyIsImhpZGRlbiIpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpeyQoImJvZHkiKS5jc3Mo Im92ZXJmbG93Ij0KLHIpfSksdGhpcy5fY3JlYXRlQ29udGFpbmVyKCJkaXYiKTt2YXIgaT0zRHRo aXM7dGhpcy5jaGFydC5vbigicmVkcmF3IixmdW5jPQp0aW9uKCl7aS5fZHJhdyhpLmNoYXJ0KX0p LHRoaXMuY2hhcnQub24oInNldDpzdGF0ZSIsZnVuY3Rpb24oKXt2YXIgZT0zRGkuJGU9CmwuZmlu ZCgiI2luZm8iKSx0PTNEaS4kZWwuZmluZCgiLmNoYXJ0cy12aWV3cG9ydC1jb250YWluZXIiKSxu PTNEZS5maW5kKCIjaT0KY29uIik7bi5yZW1vdmVDbGFzcygpLGUuc2hvdygpLGUuZmluZCgiI3Rl eHQiKS5odG1sKGkuY2hhcnQuZ2V0KCJzdGF0ZV9pbmZvPQoiKSk7dmFyIHI9M0RpLmNoYXJ0Lmdl dCgic3RhdGUiKTtzd2l0Y2gocil7Y2FzZSJvayI6ZS5oaWRlKCksdC5zaG93KCk7YnJlYWs9Cjtj YXNlImZhaWxlZCI6bi5hZGRDbGFzcygiaWNvbiBmYSBmYS13YXJuaW5nIiksdC5oaWRlKCk7YnJl YWs7ZGVmYXVsdDpuLmFkZD0KQ2xhc3MoImljb24gZmEgZmEtc3Bpbm5lciBmYS1zcGluIiksdC5z aG93KCl9fSl9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLiRlbC5zPQpob3coKX0saGlkZTpmdW5jdGlv bigpe3RoaXMuJGVsLmhpZGUoKX0sX2Z1bGxzY3JlZW46ZnVuY3Rpb24oZSx0KXtlLmNzcygiaGU9 CmlnaHQiLCQod2luZG93KS5oZWlnaHQoKS10KSwkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCl7 ZS5jc3MoImhlaWdodCIsJCh3aT0KbmRvdykuaGVpZ2h0KCktdCl9KX0sX2NyZWF0ZUNvbnRhaW5l cjpmdW5jdGlvbihlLHQpe3Q9M0R0fHwxO2Zvcih2YXIgbiBpbiB0PQpoaXMuY29udGFpbmVyX2xp c3QpdGhpcy5jb250YWluZXJfbGlzdFtuXS5yZW1vdmUoKTt0aGlzLmNvbnRhaW5lcl9saXN0PTNE W109Cix0aGlzLmNhbnZhc19saXN0PTNEW107Zm9yKHZhciBuPTNEMDtuPHQ7bisrKXt2YXIgcj0z RCQodGhpcy5fdGVtcGxhdGVDb250YT0KaW5lcihlLHBhcnNlSW50KDEwMC90KSkpO3RoaXMuJGVs LmFwcGVuZChyKSx0aGlzLmNvbnRhaW5lcl9saXN0W25dPTNEcix0aGlzPQouY2FudmFzX2xpc3Rb bl09M0RyLmZpbmQoIi5jaGFydHMtdmlld3BvcnQtY2FudmFzIikuYXR0cigiaWQiKX19LF9kcmF3 OmZ1bmM9CnRpb24oZSl7dmFyIHQ9M0R0aGlzLG49M0R0aGlzLmFwcC5kZWZlcnJlZC5yZWdpc3Rl cigpLHI9M0RlLmdldCgidHlwZSIpO3RoaT0Kcy5jaGFydF9kZWZpbml0aW9uPTNEZS5kZWZpbml0 aW9uO3ZhciBpPTNEMTtlLnNldHRpbmdzLmdldCgidXNlX3BhbmVscyIpPTNEPQo9M0Q9M0QidHJ1 ZSImJihpPTNEZS5ncm91cHMubGVuZ3RoKSx0aGlzLl9jcmVhdGVDb250YWluZXIodGhpcy5jaGFy dF9kZWZpbmk9CnRpb24udGFnLGkpLGUuc3RhdGUoIndhaXQiLCJQbGVhc2Ugd2FpdC4uLiIpO2lm KCF0aGlzLmNoYXJ0X2RlZmluaXRpb24uZXhlYz0KdXRlfHx0aGlzLmNoYXJ0X2RlZmluaXRpb24u ZXhlY3V0ZSYmZS5nZXQoIm1vZGlmaWVkIikpdGhpcy5hcHAuam9icy5jbGVhbnVwPQooZSksZS5z ZXQoIm1vZGlmaWVkIiwhMSk7dmFyIHQ9M0R0aGlzO3JlcXVpcmUoWyJwbHVnaW4vY2hhcnRzLyIr dGhpcy5hcHAuY2g9CmFydFBhdGgocikrIi93cmFwcGVyIl0sZnVuY3Rpb24ocil7aWYodC5jaGFy dF9kZWZpbml0aW9uLmV4ZWN1dGUpdC5hcHAuam9icz0KLnJlcXVlc3QoZSx0Ll9kZWZhdWx0U2V0 dGluZ3NTdHJpbmcoZSksdC5fZGVmYXVsdFJlcXVlc3RTdHJpbmcoZSksZnVuY3Rpb24oPQope3Zh ciBpPTNEbmV3IHIodC5hcHAse3Byb2Nlc3NfaWQ6bixjaGFydDplLHJlcXVlc3RfZGljdGlvbmFy eTp0Ll9kZWZhdWx0UmU9CnF1ZXN0RGljdGlvbmFyeShlKSxjYW52YXNfbGlzdDp0LmNhbnZhc19s aXN0fSl9LGZ1bmN0aW9uKCl7dGhpcy5hcHAuZGVmZXJyZT0KZC5kb25lKG4pfSk7ZWxzZSB2YXIg aT0zRG5ldyByKHQuYXBwLHtwcm9jZXNzX2lkOm4sY2hhcnQ6ZSxyZXF1ZXN0X2RpY3Rpb25hPQpy eTp0Ll9kZWZhdWx0UmVxdWVzdERpY3Rpb25hcnkoZSksY2FudmFzX2xpc3Q6dC5jYW52YXNfbGlz dH0pfSl9LF9kZWZhdWx0UmU9CnF1ZXN0U3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PTNEIiIsbj0z RDAscj0zRHRoaXM7cmV0dXJuIGUuZ3JvdXBzLmVhY2goZnVuYz0KdGlvbihlKXtuKys7Zm9yKHZh ciBpIGluIHIuY2hhcnRfZGVmaW5pdGlvbi5jb2x1bW5zKXQrPTNEaSsiXyIrbisiOiIrKHBhcnNl PQpJbnQoZS5nZXQoaSkpKzEpKyIsICJ9KSx0LnN1YnN0cmluZygwLHQubGVuZ3RoLTIpfSxfZGVm YXVsdFNldHRpbmdzU3RyaW5nOmY9CnVuY3Rpb24oZSl7dmFyIHQ9M0QiIjtmb3Ioa2V5IGluIGUu c2V0dGluZ3MuYXR0cmlidXRlcyl0Kz0zRGtleSsiOiIrZS5zZXR0aT0KbmdzLmdldChrZXkpKyIs ICI7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMil9LF9kZWZhdWx0UmVxdWVzdERpY3Rp b25hPQpyeTpmdW5jdGlvbihlKXt2YXIgdD0zRHtncm91cHM6W119O3RoaXMuY2hhcnRfZGVmaW5p dGlvbi5leGVjdXRlP3QuaWQ9M0RlLmc9CmV0KCJkYXRhc2V0X2lkX2pvYiIpOnQuaWQ9M0RlLmdl dCgiZGF0YXNldF9pZCIpO3ZhciByPTNEMCxpPTNEdGhpcztyZXR1cm4gZT0KLmdyb3Vwcy5lYWNo KGZ1bmN0aW9uKGUpe3ZhciBzPTNEe307Zm9yKHZhciBvIGluIGkuY2hhcnRfZGVmaW5pdGlvbi5j b2x1bW5zPQope3ZhciB1PTNEaS5jaGFydF9kZWZpbml0aW9uLmNvbHVtbnNbb107c1tvXT0zRG4u bWVyZ2Uoe2luZGV4OmUuZ2V0KG8pfSx1KX09CnQuZ3JvdXBzLnB1c2goe2tleTorK3IrIjoiK2Uu Z2V0KCJrZXkiKSxjb2x1bW5zOnN9KX0pLHR9LF90ZW1wbGF0ZTpmdW5jdGlvbj0KKCl7cmV0dXJu JzxkaXYgY2xhc3M9M0QiY2hhcnRzLXZpZXdwb3J0Ij48ZGl2IGlkPTNEImluZm8iIGNsYXNzPTNE ImluZm8iPjxzPQpwYW4gaWQ9M0QiaWNvbiIgY2xhc3M9M0QiaWNvbiIvPjxzcGFuIGlkPTNEInRl eHQiIGNsYXNzPTNEInRleHQiIC8+PC9kaXY+PC89CmRpdj4nfSxfdGVtcGxhdGVDb250YWluZXI6 ZnVuY3Rpb24oZSx0KXtyZXR1cm4nPGRpdiBjbGFzcz0zRCJjaGFydHMtdmlld3Bvcj0KdC1jb250 YWluZXIiIHN0eWxlPTNEIndpZHRoOicrdCsnJTsiPicrJzxkaXYgaWQ9M0QibWVudSIvPicrIjwi K2UrJyBpZD0zRCInPQorbi51dWlkKCkrJyIgY2xhc3M9M0QiY2hhcnRzLXZpZXdwb3J0LWNhbnZh cyI+JysiPC9kaXY+In19KX0pLGRlZmluZSgicGx1Z2k9Cm4vbGlicmFyeS9zY3JlZW5zaG90Iixb ImxpYnMvdW5kZXJzY29yZSJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7ZS4kZWwuZj0KaW5k KCJzdmciKS5sZW5ndGg+MD9yKGUpOm4oZSl9ZnVuY3Rpb24gbihlKXt0cnl7dmFyIHQ9M0RlLiRl bC5maW5kKCIuanFwbG90PQotdGFyZ2V0Iiksbj0zRHQuanFwbG90VG9JbWFnZVN0cih7fSk7biYm KHdpbmRvdy5sb2NhdGlvbi5ocmVmPTNEbi5yZXBsYWNlKCI9CmltYWdlL3BuZyIsImltYWdlL29j dGV0LXN0cmVhbSIpKX1jYXRjaChyKXtjb25zb2xlLmRlYnVnKCJGQUlMRUQgLSBTY3JlZW5zaD0K b3Q6Ol9mcm9tQ2FudmFzKCkgLSAiK3IpLGUuZXJyb3ImJmUuZXJyb3IoIlBsZWFzZSByZWR1Y2Ug eW91ciBjaGFydCB0byBhIHNpPQpuZ2xlIHBhbmVsIGFuZCB0cnkgYWdhaW4uIil9fWZ1bmN0aW9u IHIoZSl7dmFyIHQ9M0RlLiRlbCxuPTNEZS51cmwscj0zRGUubmE9Cm1lLHM9M0RuZXcgWE1MU2Vy aWFsaXplcixvPTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT0zRCQobyksYT0z RD0KdC5maW5kKCJzdmciKS5sZW5ndGgsZj0zRHQuZmluZCgic3ZnIikuZmlyc3QoKSxsPTNEcGFy c2VJbnQoZi5jc3MoImhlaWdodCIpPQopLGM9M0RwYXJzZUludChmLmNzcygid2lkdGgiKSk7dS5h dHRyKCJ3aWR0aCIsYyphKSx1LmF0dHIoImhlaWdodCIsbCksKCFvLmc9CmV0Q29udGV4dHx8IW8u Z2V0Q29udGV4dCgiMmQiKSkmJmFsZXJ0KCJZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRo aXMgZj0KZWF0dXJlLCBwbGVhc2UgdXNlIGEgbW9kZXJuIGJyb3dzZXIiKTt2YXIgaD0zRG8uZ2V0 Q29udGV4dCgiMmQiKSxwPTNEMDt0LmZpPQpuZCgic3ZnIikuZWFjaChmdW5jdGlvbigpe3ZhciBl PTNEJCh0aGlzKTtlLmF0dHIoe3ZlcnNpb246IjEuMSIseG1sbnM6Imh0dHA9CjovL3d3dy53My5v cmcvMjAwMC9zdmciLHdpZHRoOmMsaGVpZ2h0Omx9KTt2YXIgdD0zRHMuc2VyaWFsaXplVG9TdHJp bmcodGhpcz0KKTtoLmRyYXdTdmcodCxwLDAsYyxsKSxwKz0zRGN9KSx3aW5kb3cubG9jYXRpb24u aHJlZj0zRGkobyxvLmdldENvbnRleHQoIjJkPQoiKSwid2hpdGUiKS5yZXBsYWNlKCJpbWFnZS9w bmciLCJpbWFnZS9vY3RldC1zdHJlYW0iKX1mdW5jdGlvbiBpKGUsdCxuKXt2YXI9CiByPTNEZS53 aWR0aCxpPTNEZS5oZWlnaHQscztpZihuKXtzPTNEdC5nZXRJbWFnZURhdGEoMCwwLHIsaSk7dmFy IG89M0R0Lmdsbz0KYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0 aW9uPTNEImRlc3RpbmF0aW9uLW92ZXIiLHQuZmlsPQpsU3R5bGU9M0RuLHQuZmlsbFJlY3QoMCww LHIsaSl9dmFyIHU9M0RlLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7cmV0dXJuIG4mJig9CnQuY2xl YXJSZWN0KDAsMCxyLGkpLHQucHV0SW1hZ2VEYXRhKHMsMCwwKSx0Lmdsb2JhbENvbXBvc2l0ZU9w ZXJhdGlvbj0zRG8pLD0KdX1mdW5jdGlvbiBzKGUpe3dpbmRvdy5sb2NhdGlvbi5ocmVmPTNEImRh dGE6bm9uZS9ub25lO2Jhc2U2NCwiK2J0b2EoYShlKS5zPQp0cmluZyl9ZnVuY3Rpb24gbyhlKXtm b3IodmFyIHQgaW4gZG9jdW1lbnQuc3R5bGVTaGVldHMpe3ZhciBuPTNEZG9jdW1lbnQuc3Q9Cnls ZVNoZWV0c1t0XSxyPTNEbi5jc3NSdWxlcztpZihyKWZvcih2YXIgaT0zRDAscz0zRHIubGVuZ3Ro O2k8cztpKyspdHJ5e2UuZj0KaW5kKHJbaV0uc2VsZWN0b3JUZXh0KS5lYWNoKGZ1bmN0aW9uKGUs dCl7dC5zdHlsZS5jc3NUZXh0Kz0zRHJbaV0uc3R5bGUuY3NzPQpUZXh0fSl9Y2F0Y2gobyl7fX19 ZnVuY3Rpb24gdShlKXt2YXIgdD0zRGEoZSksbj0zRHtmaWxlbmFtZTpuYW1lfHwiY2hhcnQiLHQ9 CnlwZToiYXBwbGljYXRpb24vcGRmIixoZWlnaHQ6dC5oZWlnaHQsd2lkdGg6dC53aWR0aCxzY2Fs ZToyLHN2Zzp0LnN0cmluZ30scj0KPTNEJCgiYm9keSIpLGk9M0RyLmZpbmQoIiN2aWV3cG9ydC1m b3JtIik7aS5sZW5ndGg9M0Q9M0Q9M0QwJiYoaT0zRCQoIjxmb3JtPQo+Iix7aWQ6InZpZXdwb3J0 LWZvcm0iLG1ldGhvZDoicG9zdCIsYWN0aW9uOiJodHRwOi8vZXhwb3J0LmhpZ2hjaGFydHMuY29t LyI9CixkaXNwbGF5OiJub25lIn0pLHIuYXBwZW5kKGkpKSxpLmVtcHR5KCk7Zm9yKG5hbWUgaW4g bil7dmFyIHM9M0QkKCI8aW5wdXQvPj0KIix7dHlwZToiaGlkZGVuIixuYW1lOm5hbWUsdmFsdWU6 bltuYW1lXX0pO2kuYXBwZW5kKHMpfXRyeXtpLnN1Ym1pdCgpfWNhdGNoPQoobyl7Y29uc29sZS5s b2cobyl9fWZ1bmN0aW9uIGEoZSl7aWYoZS4kZWwuZmluZCgic3ZnIikubGVuZ3RoPTNEPTNEMCYm ZS5lcnI9Cm9yKXtlLmVycm9yKCJObyBTVkcgZm91bmQuIFRoaXMgY2hhcnQgdHlwZSBkb2VzIG5v dCBzdXBwb3J0IFNWRy9QREYgZXhwb3J0Lj0KIik7cmV0dXJufXZhciB0PTNEZS4kZWwsbj0zRHQu ZmluZCgic3ZnIikubGVuZ3RoLHI9M0RwYXJzZUludCh0LmZpbmQoInN2ZyIpPQouZmlyc3QoKS5j c3MoImhlaWdodCIpKSxpPTNEcGFyc2VJbnQodC5maW5kKCJzdmciKS5maXJzdCgpLmNzcygid2lk dGgiKSkscz0KPTNEbmV3IFhNTFNlcmlhbGl6ZXIsdT0zRCQoIjxzdmcvPiIpO3UuYXR0cih7dmVy c2lvbjoiMS4xIix4bWxuczoiaHR0cDovL3d3PQp3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6aSpu LGhlaWdodDpyfSk7dmFyIGE9M0QiIixmPTNEMDtyZXR1cm4gdC5maW5kKCJzdmc9CiIpLmVhY2go ZnVuY3Rpb24oKXt2YXIgZT0zRCQodGhpcykuY2xvbmUoKTtvKGUpO3ZhciB0PTNEJCgnPGcgdHJh bnNmb3JtPTNEIj0KdHJhbnNsYXRlKCcrZisnLCAwKSI+Jyk7dC5hcHBlbmQoZS5maW5kKCJnIiku Zmlyc3QoKSksdS5hcHBlbmQodCksZis9M0RpfSksPQp7c3RyaW5nOnMuc2VyaWFsaXplVG9TdHJp bmcodVswXSksaGVpZ2h0OnIsd2lkdGg6aX19cmV0dXJue2NyZWF0ZVBORzp0LGNyZWE9CnRlU1ZH OnMsY3JlYXRlUERGOnV9fSksZGVmaW5lKCJwbHVnaW4vdmlld3Mvdmlld2VyIixbInV0aWxzL3V0 aWxzIiwibXZjL3VpLz0KdWktbWlzYyIsIm12Yy91aS91aS1wb3J0bGV0IiwicGx1Z2luL3ZpZXdz L3ZpZXdwb3J0IiwicGx1Z2luL2xpYnJhcnkvc2NyZWVuPQpzaG90Il0sZnVuY3Rpb24oZSx0LG4s cixpKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb249Cihl LHMpe3RoaXMuYXBwPTNEZSx0aGlzLmNoYXJ0PTNEdGhpcy5hcHAuY2hhcnQsdGhpcy52aWV3cG9y dF92aWV3PTNEbmV3IHIoZT0KKTt2YXIgbz0zRHRoaXM7dGhpcy5tZXNzYWdlPTNEbmV3IHQuTWVz c2FnZTt2YXIgdT0zRG5ldyB0LkJ1dHRvbk1lbnUoe2ljb246PQoiZmEtY2FtZXJhIix0aXRsZToi U2NyZWVuc2hvdCIsdG9vbHRpcDoiRG93bmxvYWQgYXMgUE5HLCBTVkcgb3IgUERGIGZpbGUifSk9 Cjt1LmFkZE1lbnUoe2lkOiJidXR0b24tcG5nIix0aXRsZToiU2F2ZSBhcyBQTkciLGljb246ImZh LWZpbGUiLG9uY2xpY2s6ZnVuYz0KdGlvbigpe28uX3dhaXQoby5jaGFydCxmdW5jdGlvbigpe2ku Y3JlYXRlUE5HKHskZWw6by52aWV3cG9ydF92aWV3LiRlbCx0aXRsPQplOm8uY2hhcnQuZ2V0KCJ0 aXRsZSIpLGVycm9yOmZ1bmN0aW9uKGUpe28ubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0 dXM9CjoiZGFuZ2VyIn0pfX0pfSl9fSksdS5hZGRNZW51KHtpZDoiYnV0dG9uLXN2ZyIsdGl0bGU6 IlNhdmUgYXMgU1ZHIixpY29uOiJmYT0KLWZpbGUtdGV4dC1vIixvbmNsaWNrOmZ1bmN0aW9uKCl7 by5fd2FpdChvLmNoYXJ0LGZ1bmN0aW9uKCl7aS5jcmVhdGVTVkcoeyRlPQpsOm8udmlld3BvcnRf dmlldy4kZWwsdGl0bGU6by5jaGFydC5nZXQoInRpdGxlIiksZXJyb3I6ZnVuY3Rpb24oZSl7by5t ZXNzYWc9CmUudXBkYXRlKHttZXNzYWdlOmUsc3RhdHVzOiJkYW5nZXIifSl9fSl9KX19KSx1LmFk ZE1lbnUoe2lkOiJidXR0b24tcG5nIix0aT0KdGxlOiJTYXZlIGFzIFBERiIsaWNvbjoiZmEtZmls ZS1vIixvbmNsaWNrOmZ1bmN0aW9uKCl7by5hcHAubW9kYWwuc2hvdyh7dGl0PQpsZToiU2VuZCBj aGFydCBkYXRhIGZvciBQREYgY3JlYXRpb24iLGJvZHk6IkdhbGF4eSBkb2VzIG5vdCBwcm92aWRl IGludGVncmE9CnRlZCBQREYgZXhwb3J0IHNjcmlwdHMuIFlvdSBtYXkgY2xpY2sgJ0NvbnRpbnVl JyB0byBjcmVhdGUgdGhlIFBERiBieSB1c2luZz0KIGEgM3JkIHBhcnR5IHNlcnZpY2UgKGh0dHBz Oi8vZXhwb3J0LmhpZ2hjaGFydHMuY29tKS4iLGJ1dHRvbnM6e0NhbmNlbDpmdW5jPQp0aW9uKCl7 by5hcHAubW9kYWwuaGlkZSgpfSxDb250aW51ZTpmdW5jdGlvbigpe28uYXBwLm1vZGFsLmhpZGUo KSxvLl93YWl0KG89Ci5jaGFydCxmdW5jdGlvbigpe2kuY3JlYXRlUERGKHskZWw6by52aWV3cG9y dF92aWV3LiRlbCx0aXRsZTpvLmNoYXJ0LmdldCgidD0KaXRsZSIpLGVycm9yOmZ1bmN0aW9uKGUp e28ubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6ZSxzdGF0dXM6ImRhbmdlciJ9KX19KX0pPQp9fX0p fX0pLHRoaXMucG9ydGxldD0zRG5ldyBuLlZpZXcoe2ljb246ImZhLWJhci1jaGFydC1vIix0aXRs ZToiVmlld3BvcnQiLG89CnBlcmF0aW9uczp7ZWRpdF9idXR0b246bmV3IHQuQnV0dG9uSWNvbih7 aWNvbjoiZmEtZWRpdCIsdG9vbHRpcDoiQ3VzdG9taXplID0KdGhpcyBjaGFydCIsdGl0bGU6IkVk aXRvciIsb25jbGljazpmdW5jdGlvbigpe28uX3dhaXQoby5jaGFydCxmdW5jdGlvbigpe28uPQph cHAuZ28oImVkaXRvciIpfSl9fSkscGljdHVyZV9idXR0b25fbWVudTp1fX0pLHRoaXMucG9ydGxl dC5hcHBlbmQodGhpcy5tZXM9CnNhZ2UuJGVsKSx0aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMudmll d3BvcnRfdmlldy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLj0KcG9ydGxldC4kZWwpO3ZhciBv PTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6dGl0bGUiLGZ1bmN0aW9uKCl7by5fcmVmcmVz PQpoVGl0bGUoKX0pfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWwuc2hvdygpLCQod2luZG93KS50 cmlnZ2VyKCJyZXNpemUiKX0saGk9CmRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwuaGlkZSgpfSxfcmVm cmVzaFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0Lj0KZ2V0KCJ0aXRsZSIpO3Ro aXMucG9ydGxldC50aXRsZShlKX0sX3dhaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwcC5kZWZlcnJl ZC5yPQplYWR5KCk/dCgpOnRoaXMubWVzc2FnZS51cGRhdGUoe21lc3NhZ2U6IllvdXIgY2hhcnQg aXMgY3VycmVudGx5IGJlaW5nIHByb2M9CmVzc2VkLiBQbGVhc2Ugd2FpdCBhbmQgdHJ5IGFnYWlu LiJ9KX19KX0pLGRlZmluZSgibXZjL3VpL3VpLXRhYnMiLFsidXRpbHMvdT0KdGlscyJdLGZ1bmN0 aW9uKGUpe3ZhciB0PTNEQmFja2JvbmUuVmlldy5leHRlbmQoe29wdGlvbnNEZWZhdWx0Ont0aXRs ZV9uZXc6PQoiIixvcGVyYXRpb25zOm51bGwsb25uZXc6bnVsbCxtYXg6bnVsbCxvbmNoYW5nZTpu dWxsfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQ9Cil7dGhpcy52aXNpYmxlPTNEITEsdGhpcy4kbmF2 PTNEbnVsbCx0aGlzLiRjb250ZW50PTNEbnVsbCx0aGlzLmZpcnN0X3RhYj0zRD0KbnVsbCx0aGlz LmN1cnJlbnRfaWQ9M0RudWxsLHRoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlzLm9wdGlvbnNE ZWZhdWx0KTt2PQphciBuPTNEJCh0aGlzLl90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKTt0aGlzLiRu YXY9M0RuLmZpbmQoIi50YWItbmF2aWdhdGlvbiI9CiksdGhpcy4kY29udGVudD0zRG4uZmluZCgi LnRhYi1jb250ZW50IiksdGhpcy5zZXRFbGVtZW50KG4pLHRoaXMubGlzdD0zRHt9Oz0KdmFyIHI9 M0R0aGlzO3RoaXMub3B0aW9ucy5vcGVyYXRpb25zJiYkLmVhY2godGhpcy5vcHRpb25zLm9wZXJh dGlvbnMsZnVuY3RpPQpvbihlLHQpe3QuJGVsLnByb3AoImlkIixlKSxyLiRuYXYuZmluZCgiLm9w ZXJhdGlvbnMiKS5hcHBlbmQodC4kZWwpfSk7aWYodGg9CmlzLm9wdGlvbnMub25uZXcpe3ZhciBp PTNEJCh0aGlzLl90ZW1wbGF0ZV90YWJfbmV3KHRoaXMub3B0aW9ucykpO3RoaXMuJG5hdj0KLmFw cGVuZChpKSxpLnRvb2x0aXAoe3RpdGxlOiJBZGQgYSBuZXcgdGFiIixwbGFjZW1lbnQ6ImJvdHRv bSIsY29udGFpbmVyOnIuPQokZWx9KSxpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7aS50b29sdGlw KCJoaWRlIiksci5vcHRpb25zLm9ubmV3KCl9KX19LHNpemU9CjpmdW5jdGlvbigpe3JldHVybiBf LnNpemUodGhpcy5saXN0KX0sY3VycmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbC5maT0K bmQoIi50YWItcGFuZS5hY3RpdmUiKS5hdHRyKCJpZCIpfSxhZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9 M0R0aGlzLG49M0RlLmlkLHI9Cj0zRCQodGhpcy5fdGVtcGxhdGVfdGFiKGUpKSxpPTNEJCh0aGlz Ll90ZW1wbGF0ZV90YWJfY29udGVudChlKSk7dGhpcy5saXN0Wz0Kbl09M0RlLm9uZGVsPyEwOiEx LHRoaXMub3B0aW9ucy5vbm5ldz90aGlzLiRuYXYuZmluZCgiI25ldy10YWIiKS5iZWZvcmUocik6 PQp0aGlzLiRuYXYuYXBwZW5kKHIpLGkuYXBwZW5kKGUuJGVsKSx0aGlzLiRjb250ZW50LmFwcGVu ZChpKSx0aGlzLnNpemUoKT0zRD0KPTNEMSYmKHIuYWRkQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xh c3MoImFjdGl2ZSIpLHRoaXMuZmlyc3RfdGFiPTNEbiksdGhpcy5vPQpwdGlvbnMubWF4JiZ0aGlz LnNpemUoKT49M0R0aGlzLm9wdGlvbnMubWF4JiZ0aGlzLiRlbC5maW5kKCIjbmV3LXRhYiIpLmhp ZGU9CigpO2lmKGUub25kZWwpe3ZhciBzPTNEci5maW5kKCIjZGVsZXRlIik7cy50b29sdGlwKHt0 aXRsZToiRGVsZXRlIHRoaXMgdGFiIj0KLHBsYWNlbWVudDoiYm90dG9tIixjb250YWluZXI6dC4k ZWx9KSxzLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcy50b29sPQp0aXAoImRlc3Ryb3ki KSx0LiRlbC5maW5kKCIudG9vbHRpcCIpLnJlbW92ZSgpLGUub25kZWwoKSwhMX0pfXIub24oImNs aWNrIiw9CmZ1bmN0aW9uKHIpe3IucHJldmVudERlZmF1bHQoKSxlLm9uY2xpY2s/ZS5vbmNsaWNr KCk6dC5zaG93KG4pfSksdGhpcy5jdXJyZT0KbnRfaWR8fCh0aGlzLmN1cnJlbnRfaWQ9M0RuKX0s ZGVsOmZ1bmN0aW9uKGUpe3RoaXMuJGVsLmZpbmQoIiN0YWItIitlKS5yZW1vPQp2ZSgpLHRoaXMu JGVsLmZpbmQoIiMiK2UpLnJlbW92ZSgpLHRoaXMuZmlyc3RfdGFiPTNEPTNEZSYmKHRoaXMuZmly c3RfdGFiPQo9M0RudWxsKSx0aGlzLmZpcnN0X3RhYiE9M0RudWxsJiZ0aGlzLnNob3codGhpcy5m aXJzdF90YWIpLHRoaXMubGlzdFtlXSYmZGU9CmxldGUgdGhpcy5saXN0W2VdLHRoaXMuc2l6ZSgp PHRoaXMub3B0aW9ucy5tYXgmJnRoaXMuJGVsLmZpbmQoIiNuZXctdGFiIikucz0KaG93KCl9LGRl bFJlbW92YWJsZTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmxpc3QpdGhpcy5kZWwoZSl9 LHNob3c6ZnVuPQpjdGlvbihlKXt0aGlzLiRlbC5mYWRlSW4oImZhc3QiKSx0aGlzLnZpc2libGU9 M0QhMCxlJiYodGhpcy4kZWwuZmluZCgiI3RhYi09CiIrdGhpcy5jdXJyZW50X2lkKS5yZW1vdmVD bGFzcygiYWN0aXZlIiksdGhpcy4kZWwuZmluZCgiIyIrdGhpcy5jdXJyZW50X2lkKT0KLnJlbW92 ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLiRlbC5maW5kKCIjdGFiLSIrZSkuYWRkQ2xhc3MoImFjdGl2 ZSIpLHRoaXMuJGVsPQouZmluZCgiIyIrZSkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuY3VycmVu dF9pZD0zRGUpLHRoaXMub3B0aW9ucy5vbmNoYW5nZSY9CiZ0aGlzLm9wdGlvbnMub25jaGFuZ2Uo ZSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC5mYWRlT3V0KCJmYXN0IiksdGhpcy52aT0Kc2li bGU9M0QhMX0saGlkZU9wZXJhdGlvbjpmdW5jdGlvbihlKXt0aGlzLiRuYXYuZmluZCgiIyIrZSku aGlkZSgpfSxzaG93T3BlPQpyYXRpb246ZnVuY3Rpb24oZSl7dGhpcy4kbmF2LmZpbmQoIiMiK2Up LnNob3coKX0sc2V0T3BlcmF0aW9uOmZ1bmN0aW9uKGUsdCk9Cnt2YXIgbj0zRHRoaXMuJG5hdi5m aW5kKCIjIitlKTtuLm9mZigiY2xpY2siKSxuLm9uKCJjbGljayIsdCl9LHRpdGxlOmZ1bmN0aT0K b24oZSx0KXt2YXIgbj0zRHRoaXMuJGVsLmZpbmQoIiN0YWItdGl0bGUtdGV4dC0iK2UpO3JldHVy biB0JiZuLmh0bWwodCksbi5oPQp0bWwoKX0scmV0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0zRDA7 Zm9yKHZhciBuIGluIHRoaXMubGlzdCl0aGlzLnRpdGxlKG4sKys9CnQrIjogIitlKX0sX3RlbXBs YXRlOmZ1bmN0aW9uKGUpe3JldHVybic8ZGl2IGNsYXNzPTNEInVpLXRhYnMgdGFiYmFibGUgdGFi cz0KLWxlZnQiPjx1bCBpZD0zRCJ0YWItbmF2aWdhdGlvbiIgY2xhc3M9M0QidGFiLW5hdmlnYXRp b24gbmF2IG5hdi10YWJzIj48ZGl2PQogY2xhc3M9M0Qib3BlcmF0aW9ucyIgc3R5bGU9M0QiZmxv YXQ6IHJpZ2h0OyBtYXJnaW4tYm90dG9tOiA0cHg7Ij48L2Rpdj48L3U9Cmw+PGRpdiBpZD0zRCJ0 YWItY29udGVudCIgY2xhc3M9M0QidGFiLWNvbnRlbnQiLz48L2Rpdj4nfSxfdGVtcGxhdGVfdGFi X25ldz0KOmZ1bmN0aW9uKGUpe3JldHVybic8bGkgaWQ9M0QibmV3LXRhYiI+PGEgaHJlZj0zRCJq YXZhc2NyaXB0OnZvaWQoMCk7Ij48aSBjPQpsYXNzPTNEInVpLXRhYnMtYWRkIGZhIGZhLXBsdXMt Y2lyY2xlIi8+JytlLnRpdGxlX25ldysiPC9hPiIrIjwvbGk+In0sX3RlbXA9CmxhdGVfdGFiOmZ1 bmN0aW9uKGUpe3ZhciB0PTNEJzxsaSBpZD0zRCJ0YWItJytlLmlkKyciIGNsYXNzPTNEInRhYi1l bGVtZW50Ij0KPicrJzxhIGlkPTNEInRhYi10aXRsZS1saW5rLScrZS5pZCsnIiB0aXRsZT0zRCIi IGhyZWY9M0QiIycrZS5pZCsnIiBkYXRhLW9yPQppZ2luYWwtdGl0bGU9M0QiIj4nKyc8c3BhbiBp ZD0zRCJ0YWItdGl0bGUtdGV4dC0nK2UuaWQrJyIgY2xhc3M9M0QidGFiLXRpdGw9CmUtdGV4dCI+ JytlLnRpdGxlKyI8L3NwYW4+IjtyZXR1cm4gZS5vbmRlbCYmKHQrPTNEJzxpIGlkPTNEImRlbGV0 ZSIgY2xhc3M9Cj0zRCJ1aS10YWJzLWRlbGV0ZSBmYSBmYS1taW51cy1jaXJjbGUiLz4nKSx0Kz0z RCI8L2E+PC9saT4iLHR9LF90ZW1wbGF0ZV90YT0KYl9jb250ZW50OmZ1bmN0aW9uKGUpe3JldHVy bic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0zRCJ0YWItcGFuZSIvPid9fSk7PQpyZXR1cm57 Vmlldzp0fX0pLGRlZmluZSgibXZjL3VpL3VpLXRhYmxlIixbInV0aWxzL3V0aWxzIl0sZnVuY3Rp b24oZSl7dmFyIHQ9Cj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtyb3c6bnVsbCxyb3dfY291bnQ6 MCxvcHRpb25zRGVmYXVsdDp7Y29udGVudDoiTm8gYz0Kb250ZW50IGF2YWlsYWJsZS4iLG9uY2hh bmdlOm51bGwsb25kYmxjbGljazpudWxsLG9uY29uZmlybTpudWxsLGNsczoidWktdGFiPQpsZSIs Y2xzX3RyOiIifSxldmVudHM6e2NsaWNrOiJfb25jbGljayIsZGJsY2xpY2s6Il9vbmRibGNsaWNr In0saW5pdGlhbGl6ZTo9CmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz0zRGUubWVyZ2UodCx0aGlz Lm9wdGlvbnNEZWZhdWx0KTt2YXIgbj0zRCQodGhpcy5fdD0KZW1wbGF0ZSh0aGlzLm9wdGlvbnMp KTt0aGlzLiR0aGVhZD0zRG4uZmluZCgidGhlYWQiKSx0aGlzLiR0Ym9keT0zRG4uZmluZCgiPQp0 Ym9keSIpLHRoaXMuJHRtZXNzYWdlPTNEbi5maW5kKCJ0bWVzc2FnZSIpLHRoaXMuc2V0RWxlbWVu dChuKSx0aGlzLnJvdz0zRHQ9Cmhpcy5fcm93KCl9LGFkZEhlYWRlcjpmdW5jdGlvbihlKXt2YXIg dD0zRCQoIjx0aD48L3RoPiIpO3QuYXBwZW5kKGUpLHRoaXMucj0Kb3cuYXBwZW5kKHQpfSxhcHBl bmRIZWFkZXI6ZnVuY3Rpb24oKXt0aGlzLiR0aGVhZC5hcHBlbmQodGhpcy5yb3cpLHRoaXMucm93 PQo9M0QkKCI8dHI+PC90cj4iKX0sYWRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0zRCQoIjx0ZD48 L3RkPiIpO3QmJnIuY3NzKCJ3aWQ9CnRoIix0KSxuJiZyLmNzcygidGV4dC1hbGlnbiIsbiksci5h cHBlbmQoZSksdGhpcy5yb3cuYXBwZW5kKHIpfSxhcHBlbmQ6ZnVuYz0KdGlvbihlLHQpe3RoaXMu X2NvbW1pdChlLHQsITEpfSxwcmVwZW5kOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29tbWl0KGUsdCwh MCl9PQosZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRlbC5maW5kKCIjIitlKX0sZGVsOmZ1 bmN0aW9uKGUpe3ZhciB0PTNEdGhpcy49CiR0Ym9keS5maW5kKCIjIitlKTt0Lmxlbmd0aD4wJiYo dC5yZW1vdmUoKSx0aGlzLnJvd19jb3VudC0tLHRoaXMuX3JlZnJlc2goKT0KKX0sZGVsQWxsOmZ1 bmN0aW9uKCl7dGhpcy4kdGJvZHkuZW1wdHkoKSx0aGlzLnJvd19jb3VudD0zRDAsdGhpcy5fcmVm cmVzaCgpPQp9LHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYmVmb3JlPTNEdGhpcy4kdGJvZHkuZmlu ZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpLGU9CiE9M0Q9M0R1bmRlZmluZWQmJih0aGlzLiR0Ym9k eS5maW5kKCJ0ciIpLnJlbW92ZUNsYXNzKCJjdXJyZW50IiksZSYmdGhpcy4kdD0KYm9keS5maW5k KCIjIitlKS5hZGRDbGFzcygiY3VycmVudCIpKTt2YXIgdD0zRHRoaXMuJHRib2R5LmZpbmQoIi5j dXJyZW50IikuPQphdHRyKCJpZCIpO3JldHVybiB0PTNEPTNEPTNEdW5kZWZpbmVkP251bGw6KHQh PTNEdGhpcy5iZWZvcmUmJnRoaXMub3B0aW9ucy49Cm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMub25j aGFuZ2UoZSksdCl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGJvZHkuZj0KaW5kKCJ0 ciIpLmxlbmd0aH0sX2NvbW1pdDpmdW5jdGlvbihlLHQsbil7dGhpcy5kZWwoZSksdGhpcy5yb3cu YXR0cigiaWQiLGUpPQosbj90aGlzLiR0Ym9keS5wcmVwZW5kKHRoaXMucm93KTp0aGlzLiR0Ym9k eS5hcHBlbmQodGhpcy5yb3cpLHQmJih0aGlzLnJvdy49CmhpZGUoKSx0aGlzLnJvdy5mYWRlSW4o KSksdGhpcy5yb3c9M0R0aGlzLl9yb3coKSx0aGlzLnJvd19jb3VudCsrLHRoaXMuX3JlZj0KcmVz aCgpfSxfcm93OmZ1bmN0aW9uKCl7cmV0dXJuICQoJzx0ciBjbGFzcz0zRCInK3RoaXMub3B0aW9u cy5jbHNfdHIrJyI+PC90PQpyPicpfSxfb25jbGljazpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMu dmFsdWUoKSxuPTNEJChlLnRhcmdldCkuY2xvc2VzdCgidHI9CiIpLmF0dHIoImlkIik7biE9M0Qi IiYmbiYmdCE9M0RuJiYodGhpcy5vcHRpb25zLm9uY29uZmlybT90aGlzLm9wdGlvbnMub25jbz0K bmZpcm0obik6dGhpcy52YWx1ZShuKSl9LF9vbmRibGNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PTNE dGhpcy52YWx1ZSgpO3QmJnRoPQppcy5vcHRpb25zLm9uZGJsY2xpY2smJnRoaXMub3B0aW9ucy5v bmRibGNsaWNrKHQpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXM9Ci5yb3dfY291bnQ9M0Q9M0Qw P3RoaXMuJHRtZXNzYWdlLnNob3coKTp0aGlzLiR0bWVzc2FnZS5oaWRlKCl9LF90ZW1wbGF0ZTpm dT0KbmN0aW9uKGUpe3JldHVybic8ZGl2Pjx0YWJsZSBjbGFzcz0zRCInK2UuY2xzKyciPicrIjx0 aGVhZD48L3RoZWFkPiIrIjx0Ym9kPQp5PjwvdGJvZHk+IisiPC90YWJsZT4iKyI8dG1lc3NhZ2U+ IitlLmNvbnRlbnQrIjwvdG1lc3NhZ2U+IisiPGRpdj4ifX0pO3JldHU9CnJue1ZpZXc6dH19KSxk ZWZpbmUoInBsdWdpbi92aWV3cy9ncm91cCIsWyJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWkt bWlzYz0KIiwidXRpbHMvdXRpbHMiXSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIEJhY2tib25lLlZp ZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1PQpuY3Rpb24ocixpKXt0aGlzLmFwcD0zRHI7dmFyIHM9 M0R0aGlzO3RoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlzLmdyb3U9CnA9M0RpLmdyb3Vw LHRoaXMuZ3JvdXBfa2V5PTNEbmV3IHQuSW5wdXQoe3BsYWNlaG9sZGVyOiJEYXRhIGxhYmVsIixv bmNoYW5nZT0KOmZ1bmN0aW9uKGUpe3MuZ3JvdXAuc2V0KCJrZXkiLGUpfX0pLHRoaXMudGFibGU9 M0RuZXcgZS5WaWV3KHtjb250ZW50OiJObyBkPQphdGEgY29sdW1uLiJ9KTt2YXIgbz0zRCQoIjxk aXYvPiIpO28uYXBwZW5kKG4ud3JhcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJQcm89CnZpZGUgYSBs YWJlbDoifSkpLiRlbCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLmdyb3VwX2tleS4kZWwpKSxvLmFw cGVuZChuLndyYT0KcCgobmV3IHQuTGFiZWwoe3RpdGxlOiJTZWxlY3QgY29sdW1uczoifSkpLiRl bCkpLG8uYXBwZW5kKG4ud3JhcCh0aGlzLnRhYmxlPQouJGVsKSksdGhpcy5zZXRFbGVtZW50KG8p O3ZhciBzPTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2U6ZGF0YXNldF9pZCIsZnU9Cm5jdGlv bigpe3MuX3JlZnJlc2hUYWJsZSgpfSksdGhpcy5jaGFydC5vbigiY2hhbmdlOnR5cGUiLGZ1bmN0 aW9uKCl7cy5fcmVmcj0KZXNoVGFibGUoKX0pLHRoaXMuZ3JvdXAub24oImNoYW5nZTprZXkiLGZ1 bmN0aW9uKCl7cy5fcmVmcmVzaEdyb3VwS2V5KCl9KSx0PQpoaXMuZ3JvdXAub24oImNoYW5nZSIs ZnVuY3Rpb24oKXtzLl9yZWZyZXNoR3JvdXAoKX0pLHRoaXMuX3JlZnJlc2hUYWJsZSgpLHQ9Cmhp cy5fcmVmcmVzaEdyb3VwS2V5KCksdGhpcy5fcmVmcmVzaEdyb3VwKCl9LF9yZWZyZXNoVGFibGU6 ZnVuY3Rpb24oKXt2YXIgZT0KPTNEdGhpcy5jaGFydC5nZXQoImRhdGFzZXRfaWQiKSxuPTNEdGhp cy5jaGFydC5nZXQoInR5cGUiKTtpZighZXx8IW4pcmV0dXJuPQo7dmFyIHI9M0R0aGlzLGk9M0R0 aGlzLmNoYXJ0LmRlZmluaXRpb247dGhpcy50YWJsZS5kZWxBbGwoKTt2YXIgcz0zRHt9O2Zvcig9 CnZhciBvIGluIGkuY29sdW1ucyl7dmFyIHU9M0RpLmNvbHVtbnNbb107aWYoIXUpe2NvbnNvbGUu ZGVidWcoIkdyb3VwOjpfcmVmcj0KZXNoVGFibGUoKSAtIFNraXBwaW5nIGNvbHVtbiBkZWZpbml0 aW9uLiIpO2NvbnRpbnVlfXZhciBhPTNEbmV3IHQuU2VsZWN0LlZpPQpldyh7aWQ6InNlbGVjdF8i K28sd2FpdDohMH0pLGY9M0R1LnRpdGxlO3UuaXNfdW5pcXVlJiYoZis9M0QiJm5ic3A7KGFsbCBk YXQ9CmEgbGFiZWxzKSIpLHRoaXMudGFibGUuYWRkKGYsIjI1JSIpLHRoaXMudGFibGUuYWRkKGEu JGVsKSx0aGlzLnRhYmxlLmFwcGVuZD0KKG8pLHNbb109M0RhfXRoaXMuY2hhcnQuc3RhdGUoIndh aXQiLCJMb2FkaW5nIG1ldGFkYXRhLi4uIik7dmFyIGw9M0R0aGlzLmFwPQpwLmRlZmVycmVkLnJl Z2lzdGVyKCksYz0zRHtpZDplLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHMpci5f YWRkUm89CncodCxlLHMsaS5jb2x1bW5zW3RdKTtyLmNoYXJ0LnN0YXRlKCJvayIsIk1ldGFkYXRh IGluaXRpYWxpemVkLi4uIiksci5hcHAuZD0KZWZlcnJlZC5kb25lKGwpfX07dGhpcy5hcHAuZGF0 YXNldHMucmVxdWVzdChjKX0sX2FkZFJvdzpmdW5jdGlvbihlLHQsbixyKXt2PQphciBpPTNEdGhp cyxzPTNEci5pc19sYWJlbCxvPTNEci5pc19hdXRvLHU9M0RyLmlzX251bWVyaWMsYT0zRHIuaXNf dW5pcXVlLGY9Cj0zRHIuaXNfemVybyxsPTNEW10sYz0zRG5bZV07byYmbC5wdXNoKHtsYWJlbDoi Q29sdW1uOiBSb3cgTnVtYmVyIix2YWx1ZToiYT0KdXRvIn0pLGYmJmwucHVzaCh7bGFiZWw6IkNv bHVtbjogTm9uZSIsdmFsdWU6Inplcm8ifSk7dmFyIGg9M0R0Lm1ldGFkYXRhX2NvPQpsdW1uX3R5 cGVzO2Zvcih2YXIgcCBpbiBoKXt2YXIgZD0zRCExO2hbcF09M0Q9M0QiaW50Inx8aFtwXT0zRD0z RCJmbG9hdCI/ZD0KPTNEdTpkPTNEcyxkJiZsLnB1c2goe2xhYmVsOiJDb2x1bW46ICIrKHBhcnNl SW50KHApKzEpKyIgWyIraFtwXSsiXSIsdmFsdWU6PQpwfSl9Yy51cGRhdGUobCksYSYmdGhpcy5j aGFydC5ncm91cHMuZmlyc3QoKSYmdGhpcy5ncm91cC5zZXQoZSx0aGlzLmNoYXJ0Lmc9CnJvdXBz LmZpcnN0KCkuZ2V0KGUpKTtpZighYy5leGlzdHModGhpcy5ncm91cC5nZXQoZSkpKXt2YXIgdj0z RGMuZmlyc3QoKTtjbz0KbnNvbGUuZGVidWcoJ0dyb3VwKCk6Ol9hZGRSb3coKSAtIFN3aXRjaGlu ZyBtb2RlbCB2YWx1ZSBmcm9tICInK3RoaXMuZ3JvdXAuPQpnZXQoZSkrJyIgdG8gIicrdisnIi4n KSx0aGlzLmdyb3VwLnNldChlLHYpfWMudmFsdWUodGhpcy5ncm91cC5nZXQoZSkpLHRoaXM9Ci5n cm91cC5vZmYoImNoYW5nZToiK2UpLHRoaXMuZ3JvdXAub24oImNoYW5nZToiK2UsZnVuY3Rpb24o KXtjLnZhbHVlKGkuZ3JvdT0KcC5nZXQoZSkpfSksYy5zZXRPbkNoYW5nZShmdW5jdGlvbih0KXth P2kuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rpb24obil7bi5zPQpldChlLHQpfSk6aS5ncm91cC5z ZXQoZSx0KSxpLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKX0pLGMuc2hvdygpfSxfcmVmcmVzaEc9 CnJvdXA6ZnVuY3Rpb24oKXt0aGlzLmdyb3VwLnNldCgiZGF0ZSIsbi50aW1lKCkpfSxfcmVmcmVz aEdyb3VwS2V5OmZ1bmN0aW9uKD0KKXt2YXIgZT0zRHRoaXMuZ3JvdXAuZ2V0KCJrZXkiKTtlPTNE PTNEPTNEdW5kZWZpbmVkJiYoZT0zRCIiKSxlIT0zRHRoaXMuZ3JvPQp1cF9rZXkudmFsdWUoKSYm dGhpcy5ncm91cF9rZXkudmFsdWUoZSl9fSl9KSxkZWZpbmUoInBsdWdpbi9saWJyYXJ5L3VpLXRh Ymw9CmUtZm9ybSIsWyJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWktbWlzYyIsInV0aWxzL3V0 aWxzIl0sZnVuY3Rpb24oZSx0LG4pez0KdmFyIHI9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0 aW9uc0RlZmF1bHQ6e3RpdGxlOiIiLGNvbnRlbnQ6IiIsbW9kZToiIn0sPQpsaXN0OltdLGluaXRp YWxpemU6ZnVuY3Rpb24ocixpKXt0aGlzLmFwcD0zRHIsdGhpcy5vcHRpb25zPTNEbi5tZXJnZShp LHRoaXM9Ci5vcHRpb25zRGVmYXVsdCksdGhpcy50YWJsZV90aXRsZT0zRG5ldyB0LkxhYmVsKHt0 aXRsZTp0aGlzLm9wdGlvbnMudGl0bGV9KT0KLHRoaXMudGFibGU9M0RuZXcgZS5WaWV3KHtjb250 ZW50OnRoaXMub3B0aW9ucy5jb250ZW50fSk7dmFyIHM9M0QkKCc8ZGl2IGNsPQphc3M9M0QidWkt dGFibGUtZm9ybSIvPicpO3RoaXMub3B0aW9ucy50aXRsZSYmcy5hcHBlbmQobi53cmFwKHRoaXMu dGFibGVfdGk9CnRsZS4kZWwpKSxzLmFwcGVuZChuLndyYXAodGhpcy50YWJsZS4kZWwpKSx0aGlz LnNldEVsZW1lbnQocyl9LHRpdGxlOmZ1bmN0aT0Kb24oZSl7dGhpcy50YWJsZV90aXRsZS50aXRs ZShlKX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7dGhpcy50YWJsZS5kZWxBbGwoKSx0PQpoaXMubGlz dD0zRFtdO2Zvcih2YXIgbiBpbiBlKXRoaXMuX2FkZChlW25dLmlkfHxuLGVbbl0sdCk7Zm9yKHZh ciBuIGluIHRoaXM9Ci5saXN0KXRoaXMubGlzdFtuXS50cmlnZ2VyKCJjaGFuZ2UiKX0sX2FkZDpm dW5jdGlvbihlLG4scil7dmFyIGk9M0R0aGlzLHM9Cj0zRG51bGwsbz0zRG4udHlwZTtzd2l0Y2go byl7Y2FzZSJ0ZXh0IjpzPTNEbmV3IHQuSW5wdXQoe2lkOiJmaWVsZC0iK2UscGxhYz0KZWhvbGRl cjpuLnBsYWNlaG9sZGVyLHZhbHVlOnIuZ2V0KGUpLG9uY2hhbmdlOmZ1bmN0aW9uKHQpe3Iuc2V0 KGUsdCl9fSk7YnJlPQphaztjYXNlInJhZGlvYnV0dG9uIjpzPTNEbmV3IHQuUmFkaW9CdXR0b24u Vmlldyh7aWQ6ImZpZWxkLSIrZSxkYXRhOm4uZGF0YSw9CnZhbHVlOnIuZ2V0KGUpLG9uY2hhbmdl OmZ1bmN0aW9uKHQpe3Iuc2V0KGUsdCk7dmFyIHM9M0RfLmZpbmRXaGVyZShuLmRhdGEsez0KdmFs dWU6dH0pO2lmKHMmJnMub3BlcmF0aW9ucyl7dmFyIG89M0RzLm9wZXJhdGlvbnM7Zm9yKHZhciB1 IGluIG8uc2hvdyl7dmFyPQogYT0zRG8uc2hvd1t1XTtpLnRhYmxlLmdldChhKS5zaG93KCl9Zm9y KHZhciB1IGluIG8uaGlkZSl7dmFyIGE9M0RvLmhpZGVbdV09CjtpLnRhYmxlLmdldChhKS5oaWRl KCl9fX19KTticmVhaztjYXNlInNlbGVjdCI6cz0zRG5ldyB0LlNlbGVjdC5WaWV3KHtpZDoiZj0K aWVsZC0iK2UsZGF0YTpuLmRhdGEsdmFsdWU6ci5nZXQoZSksb25jaGFuZ2U6ZnVuY3Rpb24odCl7 ci5zZXQoZSx0KTt2YXIgcz0KPTNEXy5maW5kV2hlcmUobi5kYXRhLHt2YWx1ZTp0fSk7aWYocyYm cy5vcGVyYXRpb25zKXt2YXIgbz0zRHMub3BlcmF0aW9ucztmPQpvcih2YXIgdSBpbiBvLnNob3cp e3ZhciBhPTNEby5zaG93W3VdO2kudGFibGUuZ2V0KGEpLnNob3coKX1mb3IodmFyIHUgaW4gby49 CmhpZGUpe3ZhciBhPTNEby5oaWRlW3VdO2kudGFibGUuZ2V0KGEpLmhpZGUoKX19fX0pO2JyZWFr O2Nhc2UiZGF0YXNldCI6cz0zRD0KbmV3IHQuU2VsZWN0LlZpZXcoe2lkOiJmaWVsZC0iK2Usb25j aGFuZ2U6ZnVuY3Rpb24odCl7ci5zZXQoZSx0KX19KSxpLmFwcC5kPQphdGFzZXRzLm9uKCJhbGwi LGZ1bmN0aW9uKCl7dmFyIHQ9M0RbXTtpLmFwcC5kYXRhc2V0cy5lYWNoKGZ1bmN0aW9uKGUpe2Uu Z2U9CnQoImRhdGF0eXBlX2lkIik9M0Q9M0RuLmRhdGEmJnQucHVzaCh7dmFsdWU6ZS5nZXQoImlk IiksbGFiZWw6ZS5nZXQoIm5hbWUiKT0KfSl9KSxzLnVwZGF0ZSh0KSxyLmdldChlKXx8ci5zZXQo ZSxzLmZpcnN0KCkpLHMudmFsdWUoci5nZXQoZSkpfSksaS5hcHAuZGF0PQphc2V0cy50cmlnZ2Vy KCJhbGwuZGF0YXNldHMiKTticmVhaztjYXNlInRleHRhcmVhIjpzPTNEbmV3IHQuVGV4dGFyZWEo e2lkOiI9CmZpZWxkLSIrZSxvbmNoYW5nZTpmdW5jdGlvbigpe3Iuc2V0KGUscy52YWx1ZSgpKX19 KTticmVhaztjYXNlInNlcGFyYXRvciI6cz0KPTNEJCgiPGRpdi8+Iik7YnJlYWs7ZGVmYXVsdDpz PTNEbmV3IHQuSW5wdXQoe2lkOiJmaWVsZC0iK2UscGxhY2Vob2xkZXI6bi5wPQpsYWNlaG9sZGVy LHR5cGU6bi50eXBlLG9uY2hhbmdlOmZ1bmN0aW9uKCl7ci5zZXQoZSxzLnZhbHVlKCkpfX0pfWlm KG8hPTNEInM9CmVwYXJhdG9yIil7ci5nZXQoZSl8fHIuc2V0KGUsbi5pbml0KSxzLnZhbHVlKHIu Z2V0KGUpKSx0aGlzLmxpc3RbZV09M0RzO3Zhcj0KIHU9M0QkKCI8ZGl2Lz4iKTt1LmFwcGVuZChz LiRlbCksbi5pbmZvJiZ1LmFwcGVuZCgnPGRpdiBjbGFzcz0zRCJ1aS10YWJsZS1mPQpvcm0taW5m byI+JytuLmluZm8rIjwvZGl2PiIpLHRoaXMub3B0aW9ucy5zdHlsZT0zRD0zRCJib2xkIj8odGhp cy50YWJsZS5hZGQ9CigobmV3IHQuTGFiZWwoe3RpdGxlOm4udGl0bGUsY2xzOiJmb3JtLWxhYmVs In0pKS4kZWwpLHRoaXMudGFibGUuYWRkKHUpKToodD0KaGlzLnRhYmxlLmFkZCgnPHNwYW4gY2xh c3M9M0QidWktdGFibGUtZm9ybS10aXRsZSI+JytuLnRpdGxlKyI8L3NwYW4+IiwiMjUlPQoiKSx0 aGlzLnRhYmxlLmFkZCh1KSl9ZWxzZSB0aGlzLnRhYmxlLmFkZCgnPGRpdiBjbGFzcz0zRCJ1aS10 YWJsZS1mb3JtLXNlcGE9CnJhdG9yIj4nK24udGl0bGUrIjo8ZGl2Lz4iKSx0aGlzLnRhYmxlLmFk ZCgkKCI8ZGl2Lz4iKSk7dGhpcy50YWJsZS5hcHBlbmQoZT0KKSxuLmhpZGUmJnRoaXMudGFibGUu Z2V0KGUpLmhpZGUoKX19KTtyZXR1cm57VmlldzpyfX0pLGRlZmluZSgicGx1Z2luL3ZpZXdzPQov c2V0dGluZ3MiLFsibXZjL3VpL3VpLW1pc2MiLCJwbHVnaW4vbGlicmFyeS91aS10YWJsZS1mb3Jt IiwidXRpbHMvdXRpbHMiXSw9CmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gQmFja2JvbmUuVmlldy5l eHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSxuKXt0aGlzLj0KYXBwPTNEZTt2YXIgcj0zRHRo aXM7dGhpcy5jaGFydD0zRHRoaXMuYXBwLmNoYXJ0LHRoaXMuZm9ybT0zRG5ldyB0LlZpZXcoZSx7 PQp0aXRsZToiQ29uZmlndXJhdGlvbiIsY29udGVudDoiVGhpcyBjaGFydCB0eXBlIGRvZXMgbm90 IHByb3ZpZGUgYW55IG9wdGlvbnM9Ci4ifSksdGhpcy5zZXRFbGVtZW50KHRoaXMuZm9ybS4kZWwp O3ZhciByPTNEdGhpczt0aGlzLmNoYXJ0Lm9uKCJjaGFuZ2UiLGZ1bj0KY3Rpb24oKXtyLl9yZWZy ZXNoKCl9KX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXMuY2hhcnQuZGVmaW5pdGlv bjtpPQpmKCFlKXJldHVybjt0aGlzLmZvcm0udGl0bGUoZS5jYXRlZ29yeSsiIC0gIitlLnRpdGxl KyI6IiksdGhpcy5mb3JtLnVwZGF0ZSg9CmUuc2V0dGluZ3MsdGhpcy5jaGFydC5zZXR0aW5ncyl9 fSl9KSxkZWZpbmUoInBsdWdpbi92aWV3cy90eXBlcyIsWyJ1dGlscy91dD0KaWxzIiwibXZjL3Vp L3VpLW1pc2MiXSxmdW5jdGlvbihlLHQpe3JldHVybiBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0 aW9uc0RlPQpmYXVsdDp7b25jaGFuZ2U6bnVsbCxvbmRibGNsaWNrOm51bGx9LGV2ZW50czp7Y2xp Y2s6Il9vbmNsaWNrIixkYmxjbGljazoiX289Cm5kYmxjbGljayJ9LGluaXRpYWxpemU6ZnVuY3Rp b24obixyKXt2YXIgaT0zRHRoaXM7dGhpcy5hcHA9M0RuLHRoaXMub3B0aW9ucz0KPTNEZS5tZXJn ZShyLHRoaXMub3B0aW9uc0RlZmF1bHQpO3ZhciBzPTNEJCgnPGRpdiBjbGFzcz0zRCJjaGFydHMt Z3JpZCIvPicpPQo7cy5hcHBlbmQoZS53cmFwKChuZXcgdC5MYWJlbCh7dGl0bGU6IkhvdyBtYW55 IGRhdGEgcG9pbnRzIHdvdWxkIHlvdSBsaWtlIHQ9Cm8gYW5hbHl6ZT8ifSkpLiRlbCkpLHRoaXMu bGlicmFyeT0zRG5ldyB0LlJhZGlvQnV0dG9uLlZpZXcoe2RhdGE6W3tsYWJlbDoiRj0KZXcgKDw1 MDApIix2YWx1ZToic21hbGwifSx7bGFiZWw6IlNvbWUgKDwxMGspIix2YWx1ZToibWVkaXVtIn0s e2xhYmVsOiJNYW55PQogKD4xMGspIix2YWx1ZToibGFyZ2UifV0sb25jaGFuZ2U6ZnVuY3Rpb24o ZSl7aS5fZmlsdGVyKGUpfX0pLHMuYXBwZW5kKGUud3I9CmFwKHRoaXMubGlicmFyeS4kZWwpKSx0 aGlzLnNldEVsZW1lbnQocyksdGhpcy5fcmVuZGVyKCksdGhpcy5saWJyYXJ5LnZhbHVlKD0KInNt YWxsIiksdGhpcy5saWJyYXJ5LnRyaWdnZXIoImNoYW5nZSIpfSx2YWx1ZTpmdW5jdGlvbihlKXt2 YXIgdD0zRHRoaXMuJGVsPQouZmluZCgiLmN1cnJlbnQiKS5hdHRyKCJpZCIpO2UhPTNEPTNEdW5k ZWZpbmVkJiYodGhpcy4kZWwuZmluZCgiLmN1cnJlbnQiKS49CnJlbW92ZUNsYXNzKCJjdXJyZW50 IiksdGhpcy4kZWwuZmluZCgiIyIrZSkuYWRkQ2xhc3MoImN1cnJlbnQiKSk7dmFyIG49M0R0aD0K aXMuJGVsLmZpbmQoIi5jdXJyZW50IikuYXR0cigiaWQiKTtyZXR1cm4gbj0zRD0zRD0zRHVuZGVm aW5lZD9udWxsOihuIT0zRHQmPQomdGhpcy5vcHRpb25zLm9uY2hhbmdlJiZ0aGlzLm9wdGlvbnMu b25jaGFuZ2UoZSksbil9LF9maWx0ZXI6ZnVuY3Rpb24oZSl7dGg9CmlzLiRlbC5maW5kKCIuaGVh ZGVyIikuaGlkZSgpO3ZhciB0PTNEdGhpcy5hcHAudHlwZXMuYXR0cmlidXRlcztmb3IodmFyIG4g aT0KbiB0KXt2YXIgcj0zRHRbbl0saT0zRHRoaXMuJGVsLmZpbmQoIiMiK24pLHM9M0R0aGlzLiRl bC5maW5kKCIjdHlwZXMtaGVhZGVyPQotIit0aGlzLmNhdGVnb3JpZXNfaW5kZXhbci5jYXRlZ29y eV0pLG89M0RyLmtleXdvcmRzfHwiIjtvLmluZGV4T2YoZSk+PTNEMD89CihpLnNob3coKSxzLnNo b3coKSk6aS5oaWRlKCl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5jYXRlZ29yaWVzPTNEe30s dGhpcz0KLmNhdGVnb3JpZXNfaW5kZXg9M0R7fTt2YXIgZT0zRDAsdD0zRHRoaXMuYXBwLnR5cGVz LmF0dHJpYnV0ZXM7Zm9yKHZhciBuIGluPQogdCl7dmFyIHI9M0R0W25dLGk9M0RyLmNhdGVnb3J5 O3RoaXMuY2F0ZWdvcmllc1tpXXx8KHRoaXMuY2F0ZWdvcmllc1tpXT0zRHs9Cn0sdGhpcy5jYXRl Z29yaWVzX2luZGV4W2ldPTNEZSsrKSx0aGlzLmNhdGVnb3JpZXNbaV1bbl09M0RyfWZvcih2YXIg aSBpbiB0aD0KaXMuY2F0ZWdvcmllcyl7dmFyIHM9M0QkKCc8ZGl2IHN0eWxlPTNEImNsZWFyOiBi b3RoOyIvPicpO3MuYXBwZW5kKHRoaXMuX3RlPQptcGxhdGVfaGVhZGVyKHtpZDoidHlwZXMtaGVh ZGVyLSIrdGhpcy5jYXRlZ29yaWVzX2luZGV4W2ldLHRpdGxlOml9KSk7Zm9yKHY9CmFyIG4gaW4g dGhpcy5jYXRlZ29yaWVzW2ldKXt2YXIgcj0zRHRoaXMuY2F0ZWdvcmllc1tpXVtuXSxvPTNEci50 aXRsZSsiICgiKz0Kci5saWJyYXJ5KyIpIjtyLnpvb21hYmxlJiYobz0zRCc8c3BhbiBjbGFzcz0z RCJmYSBmYS1zZWFyY2gtcGx1cyIvPicrbykscy5hPQpwcGVuZCh0aGlzLl90ZW1wbGF0ZV9pdGVt KHtpZDpuLHRpdGxlOm8sdXJsOmNvbmZpZy5hcHBfcm9vdCsiY2hhcnRzLyIrdGhpcy49CmFwcC5j aGFydFBhdGgobikrIi9sb2dvLnBuZyJ9KSl9dGhpcy4kZWwuYXBwZW5kKHMpfX0sX29uY2xpY2s6 ZnVuY3Rpb24oZSl7dj0KYXIgdD0zRHRoaXMudmFsdWUoKSxuPTNEJChlLnRhcmdldCkuY2xvc2Vz dCgiLml0ZW0iKS5hdHRyKCJpZCIpO24hPTNEIiImJm4mPQomdCE9M0RuJiZ0aGlzLnZhbHVlKG4p fSxfb25kYmxjbGljazpmdW5jdGlvbihlKXt2YXIgdD0zRHRoaXMudmFsdWUoKTt0JiZ0aGk9CnMu b3B0aW9ucy5vbmRibGNsaWNrJiZ0aGlzLm9wdGlvbnMub25kYmxjbGljayh0KX0sX3RlbXBsYXRl X2hlYWRlcjpmdW5jdGlvbj0KKGUpe3JldHVybic8ZGl2IGlkPTNEIicrZS5pZCsnIiBjbGFzcz0z RCJoZWFkZXIiPicrIiZidWxsOyAiK2UudGl0bGUrIjxkaXY+PQoifSxfdGVtcGxhdGVfaXRlbTpm dW5jdGlvbihlKXtyZXR1cm4nPGRpdiBpZD0zRCInK2UuaWQrJyIgY2xhc3M9M0QiaXRlbSI+Jys9 Cic8aW1nIGNsYXNzPTNEImltYWdlIiBzcmM9M0QiJytlLnVybCsnIj4nKyc8ZGl2IGNsYXNzPTNE InRpdGxlIj4nK2UudGl0bGUrIj0KPC9kaXY+IisiPGRpdj4ifX0pfSksZGVmaW5lKCJwbHVnaW4v dmlld3MvZWRpdG9yIixbIm12Yy91aS91aS10YWJzIiwibXZjL3VpPQovdWktbWlzYyIsIm12Yy91 aS91aS1wb3J0bGV0IiwidXRpbHMvdXRpbHMiLCJwbHVnaW4vbW9kZWxzL2NoYXJ0IiwicGx1Z2lu L209Cm9kZWxzL2dyb3VwIiwicGx1Z2luL3ZpZXdzL2dyb3VwIiwicGx1Z2luL3ZpZXdzL3NldHRp bmdzIiwicGx1Z2luL3ZpZXdzL3R5cD0KZXMiXSxmdW5jdGlvbihlLHQsbixyLGkscyxvLHUsYSl7 cmV0dXJuIEJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1PQpuY3Rpb24oaSxzKXt2 YXIgbz0zRHRoaXM7dGhpcy5hcHA9M0RpLHRoaXMuY2hhcnQ9M0R0aGlzLmFwcC5jaGFydCx0aGlz Lm1lc3M9CmFnZT0zRG5ldyB0Lk1lc3NhZ2UsdGhpcy5wb3J0bGV0PTNEbmV3IG4uVmlldyh7aWNv bjoiZmEtYmFyLWNoYXJ0LW8iLHRpdGxlOj0KIkVkaXRvciIsb3BlcmF0aW9uczp7c2F2ZTpuZXcg dC5CdXR0b25JY29uKHtpY29uOiJmYS1zYXZlIix0b29sdGlwOiJEcmF3IENoPQphcnQiLHRpdGxl OiJEcmF3IixvbmNsaWNrOmZ1bmN0aW9uKCl7by5fc2F2ZUNoYXJ0KCl9fSksYmFjazpuZXcgdC5C dXR0b25JY289Cm4oe2ljb246ImZhLWNhcmV0LWxlZnQiLHRvb2x0aXA6IlJldHVybiB0byBWaWV3 ZXIiLHRpdGxlOiJDYW5jZWwiLG9uY2xpY2s6Zj0KdW5jdGlvbigpe28uYXBwLmdvKCJ2aWV3ZXIi KSxvLmFwcC5zdG9yYWdlLmxvYWQoKX19KX19KSx0aGlzLnR5cGVzPTNEbmV3IGEoPQppLHtvbmNo YW5nZTpmdW5jdGlvbihlKXt2YXIgdD0zRG8uYXBwLnR5cGVzLmdldChlKTt0fHxjb25zb2xlLmRl YnVnKCJGQUlMRUQ9CiAtIEVkaXRvcjo6b25jaGFuZ2UoKSAtIENoYXJ0IHR5cGUgbm90IHN1cHBv cnRlZC4iKSxvLmNoYXJ0LmRlZmluaXRpb249M0R0LD0Kby5jaGFydC5zZXR0aW5ncy5jbGVhcigp LG8uY2hhcnQuc2V0KHt0eXBlOmV9KSxvLmNoYXJ0LnNldCgibW9kaWZpZWQiLCEwKSxjPQpvbnNv bGUuZGVidWcoIkVkaXRvcjo6b25jaGFuZ2UoKSAtIFN3aXRjaGVkIGNoYXJ0IHR5cGUuIil9LG9u ZGJsY2xpY2s6ZnVuY3Q9CmlvbihlKXtvLl9zYXZlQ2hhcnQoKX19KSx0aGlzLnRhYnM9M0RuZXcg ZS5WaWV3KHt0aXRsZV9uZXc6IkFkZCBEYXRhIixvbm5ldz0KOmZ1bmN0aW9uKCl7dmFyIGU9M0Rv Ll9hZGRHcm91cE1vZGVsKCk7by50YWJzLnNob3coZS5pZCl9fSksdGhpcy50aXRsZT0zRG5lPQp3 IHQuSW5wdXQoe3BsYWNlaG9sZGVyOiJDaGFydCB0aXRsZSIsb25jaGFuZ2U6ZnVuY3Rpb24oKXtv LmNoYXJ0LnNldCgidGl0bGU9CiIsby50aXRsZS52YWx1ZSgpKX19KTt2YXIgZj0zRCQoIjxkaXYv PiIpO2YuYXBwZW5kKHIud3JhcCgobmV3IHQuTGFiZWwoe3RpdD0KbGU6IlByb3ZpZGUgYSBjaGFy dCB0aXRsZToifSkpLiRlbCkpLGYuYXBwZW5kKHRoaXMudGl0bGUuJGVsKSxmLmFwcGVuZCgkKCI8 PQpkaXYvPiIpLmFkZENsYXNzKCJ1aS10YWJsZS1mb3JtLWluZm8iKS5odG1sKCJUaGlzIHRpdGxl IHdpbGwgYXBwZWFyIGluIHRoZSA9Cmxpc3Qgb2YgJ1NhdmVkIFZpc3VhbGl6YXRpb25zJy4gQ2hh cnRzIGFyZSBzYXZlZCB1cG9uIGNyZWF0aW9uLiIpKSxmLmFwcGVuZD0KKHIud3JhcCgpKSxmLmFw cGVuZChyLndyYXAodGhpcy50eXBlcy4kZWwpKSx0aGlzLnRhYnMuYWRkKHtpZDoibWFpbiIsdGl0 bGU6PQoiU3RhcnQiLCRlbDpmfSksdGhpcy5zZXR0aW5ncz0zRG5ldyB1KHRoaXMuYXBwKSx0aGlz LnRhYnMuYWRkKHtpZDoic2V0dGluZ3M9CiIsdGl0bGU6IkNvbmZpZ3VyYXRpb24iLCRlbDp0aGlz LnNldHRpbmdzLiRlbH0pLHRoaXMucG9ydGxldC5hcHBlbmQodGhpcy5tZT0Kc3NhZ2UuJGVsKSx0 aGlzLnBvcnRsZXQuYXBwZW5kKHRoaXMudGFicy4kZWwpLHRoaXMuc2V0RWxlbWVudCh0aGlzLnBv cnRsZXQuPQokZWwpLHRoaXMudGFicy5oaWRlT3BlcmF0aW9uKCJiYWNrIik7dmFyIG89M0R0aGlz O3RoaXMuY2hhcnQub24oImNoYW5nZTp0aXQ9CmxlIixmdW5jdGlvbihlKXtvLl9yZWZyZXNoVGl0 bGUoKX0pLHRoaXMuY2hhcnQub24oImNoYW5nZTp0eXBlIixmdW5jdGlvbihlKT0Ke28udHlwZXMu dmFsdWUoZS5nZXQoInR5cGUiKSl9KSx0aGlzLmNoYXJ0Lm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7 by5fcmVzZXRDPQpoYXJ0KCl9KSx0aGlzLmFwcC5jaGFydC5vbigicmVkcmF3IixmdW5jdGlvbihl KXtvLnBvcnRsZXQuc2hvd09wZXJhdGlvbigiYmE9CmNrIil9KSx0aGlzLmFwcC5jaGFydC5ncm91 cHMub24oImFkZCIsZnVuY3Rpb24oZSl7by5fYWRkR3JvdXAoZSl9KSx0aGlzLmFwcD0KLmNoYXJ0 Lmdyb3Vwcy5vbigicmVtb3ZlIixmdW5jdGlvbihlKXtvLl9yZW1vdmVHcm91cChlKX0pLHRoaXMu YXBwLmNoYXJ0LmdyPQpvdXBzLm9uKCJyZXNldCIsZnVuY3Rpb24oZSl7by5fcmVtb3ZlQWxsR3Jv dXBzKCl9KSx0aGlzLmFwcC5jaGFydC5ncm91cHMub249CigiY2hhbmdlOmtleSIsZnVuY3Rpb24o ZSl7by5fcmVmcmVzaEdyb3VwS2V5KCl9KSx0aGlzLl9yZXNldENoYXJ0KCl9LHNob3c6Zj0KdW5j dGlvbigpe3RoaXMuJGVsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJGVsLmhpZGUoKX0s X3JlZnJlc2hUaXRsZTpmPQp1bmN0aW9uKCl7dmFyIGU9M0R0aGlzLmNoYXJ0LmdldCgidGl0bGUi KTt0aGlzLnBvcnRsZXQudGl0bGUoZSksdGhpcy50aXRsZS49CnZhbHVlKCkhPTNEZSYmdGhpcy50 aXRsZS52YWx1ZShlKX0sX3JlZnJlc2hHcm91cEtleTpmdW5jdGlvbigpe3ZhciBlPTNEdGhpcz0K LHQ9M0QwO3RoaXMuY2hhcnQuZ3JvdXBzLmVhY2goZnVuY3Rpb24obil7dmFyIHI9M0RuLmdldCgi a2V5IiwiIik7cj0zRD0zRCIiPQomJihyPTNEIkRhdGEgbGFiZWwiKSxlLnRhYnMudGl0bGUobi5p ZCwrK3QrIjogIityKX0pfSxfYWRkR3JvdXBNb2RlbDpmdW5jdGk9Cm9uKCl7dmFyIGU9M0RuZXcg cyh7aWQ6ci51dWlkKCl9KTtyZXR1cm4gdGhpcy5jaGFydC5ncm91cHMuYWRkKGUpLGV9LF9hZGRH cj0Kb3VwOmZ1bmN0aW9uKGUpe3ZhciB0PTNEdGhpcyxuPTNEbmV3IG8odGhpcy5hcHAse2dyb3Vw OmV9KTt0aGlzLnRhYnMuYWRkKHtpPQpkOmUuaWQsJGVsOm4uJGVsLG9uZGVsOmZ1bmN0aW9uKCl7 dC5jaGFydC5ncm91cHMucmVtb3ZlKGUuaWQpfX0pLHRoaXMuX3JlZnI9CmVzaEdyb3VwS2V5KCks dGhpcy5jaGFydC5zZXQoIm1vZGlmaWVkIiwhMCl9LF9yZW1vdmVHcm91cDpmdW5jdGlvbihlKXt0 aGlzLj0KdGFicy5kZWwoZS5pZCksdGhpcy5fcmVmcmVzaEdyb3VwS2V5KCksdGhpcy5jaGFydC5z ZXQoIm1vZGlmaWVkIiwhMCl9LF9yZW1vPQp2ZUFsbEdyb3VwczpmdW5jdGlvbihlKXt0aGlzLnRh YnMuZGVsUmVtb3ZhYmxlKCl9LF9yZXNldENoYXJ0OmZ1bmN0aW9uKCl7dGg9CmlzLmNoYXJ0LnNl dCgiaWQiLHIudXVpZCgpKSx0aGlzLmNoYXJ0LnNldCgidHlwZSIsIm52ZDNfYmFyIiksdGhpcy5j aGFydC5zZT0KdCgiZGF0YXNldF9pZCIsdGhpcy5hcHAub3B0aW9ucy5jb25maWcuZGF0YXNldF9p ZCksdGhpcy5jaGFydC5zZXQoInRpdGxlIiwiPQpOZXcgQ2hhcnQiKSx0aGlzLnBvcnRsZXQuaGlk ZU9wZXJhdGlvbigiYmFjayIpfSxfc2F2ZUNoYXJ0OmZ1bmN0aW9uKCl7dGhpcy49CmNoYXJ0LnNl dCh7dHlwZTp0aGlzLnR5cGVzLnZhbHVlKCksdGl0bGU6dGhpcy50aXRsZS52YWx1ZSgpLGRhdGU6 ci50aW1lKCl9KT0KO2lmKHRoaXMuY2hhcnQuZ3JvdXBzLmxlbmd0aD0zRD0zRDApe3RoaXMubWVz c2FnZS51cGRhdGUoe21lc3NhZ2U6IlBsZWFzZSBzPQplbGVjdCBkYXRhIGNvbHVtbnMgYmVmb3Jl IGRyYXdpbmcgdGhlIGNoYXJ0LiJ9KTt2YXIgZT0zRHRoaXMuX2FkZEdyb3VwTW9kZWw9CigpO3Ro aXMudGFicy5zaG93KGUuaWQpO3JldHVybn12YXIgdD0zRHRoaXMsbj0zRCEwLGk9M0R0aGlzLmNo YXJ0LmRlZmluaXRpbz0Kbjt0aGlzLmNoYXJ0Lmdyb3Vwcy5lYWNoKGZ1bmN0aW9uKGUpe2lmKCFu KXJldHVybjtmb3IodmFyIHIgaW4gaS5jb2x1bW5zKWlmPQooZS5hdHRyaWJ1dGVzW3JdPTNEPTNE Im51bGwiKXt0Lm1lc3NhZ2UudXBkYXRlKHtzdGF0dXM6ImRhbmdlciIsbWVzc2FnZToiVGg9Cmlz IGNoYXJ0IHR5cGUgcmVxdWlyZXMgY29sdW1uIHR5cGVzIG5vdCBmb3VuZCBpbiB5b3VyIHRhYnVs YXIgZmlsZS4ifSksdC50YT0KYnMuc2hvdyhlLmlkKSxuPTNEITE7cmV0dXJufX0pO2lmKCFuKXJl dHVybjt0aGlzLmFwcC5nbygidmlld2VyIik7dmFyIHQ9M0R0PQpoaXM7dGhpcy5hcHAuZGVmZXJy ZWQuZXhlY3V0ZShmdW5jdGlvbigpe3QuYXBwLnN0b3JhZ2Uuc2F2ZSgpLHQuY2hhcnQudHJpZ2c9 CmVyKCJyZWRyYXciKX0pfX0pfSksZGVmaW5lKCJwbHVnaW4vbW9kZWxzL2NvbmZpZyIsW10sZnVu Y3Rpb24oKXtyZXR1cm4gQmFjaz0KYm9uZS5Nb2RlbC5leHRlbmQoe2RlZmF1bHRzOntxdWVyeV9s aW1pdDoxZTQscXVlcnlfdGltZW91dDoxMDB9fSl9KSxkZWZpbmUoPQoicGx1Z2luL2NoYXJ0cy9m b3Jtcy9kZWZhdWx0IixbXSxmdW5jdGlvbigpe3JldHVybnt0aXRsZToiIixjYXRlZ29yeToiIixs aWI9CnJhcnk6IiIsdGFnOiIiLGtleXdvcmRzOiIiLHNldHRpbmdzOntzZXBhcmF0b3JfeDp7dGl0 bGU6IlggYXhpcyIsdHlwZToic2VwYT0KcmF0b3IifSx4X2F4aXNfbGFiZWw6e3RpdGxlOiJBeGlz IGxhYmVsIixpbmZvOiJQcm92aWRlIGEgbGFiZWwgZm9yIHRoZSBheGlzPQouIix0eXBlOiJ0ZXh0 Iixpbml0OiJYLWF4aXMiLHBsYWNlaG9sZGVyOiJBeGlzIGxhYmVsIn0seF9heGlzX3R5cGU6e3Rp dGxlOiI9CkF4aXMgdmFsdWUgdHlwZSIsaW5mbzoiU2VsZWN0IHRoZSB2YWx1ZSB0eXBlIG9mIHRo ZSBheGlzLiIsdHlwZToic2VsZWN0Iixpbj0KaXQ6ImF1dG8iLGRhdGE6W3tsYWJlbDoiLS0gRG8g bm90IHNob3cgdmFsdWVzIC0tIix2YWx1ZToiaGlkZSIsb3BlcmF0aW9uczp7PQpoaWRlOlsieF9h eGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJBdXRvIix2YWx1ZToiYXV0byIsb3BlcmF0aW9uczp7 aGlkZTpbIng9Cl9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJGbG9hdCIsdmFsdWU6ImYiLG9w ZXJhdGlvbnM6e3Nob3c6WyJ4X2F4aXNfcHJlYz0KaXNpb24iXX19LHtsYWJlbDoiRXhwb25lbnQi LHZhbHVlOiJlIixvcGVyYXRpb25zOntzaG93OlsieF9heGlzX3ByZWNpc2lvbiJdPQp9fSx7bGFi ZWw6IkludGVnZXIiLHZhbHVlOiJkIixvcGVyYXRpb25zOntoaWRlOlsieF9heGlzX3ByZWNpc2lv biJdfX0se2xhYmU9Cmw6IlBlcmNlbnRhZ2UiLHZhbHVlOiJwIixvcGVyYXRpb25zOntzaG93Olsi eF9heGlzX3ByZWNpc2lvbiJdfX0se2xhYmVsOiJTST0KLXByZWZpeCIsdmFsdWU6InMiLG9wZXJh dGlvbnM6e2hpZGU6WyJ4X2F4aXNfcHJlY2lzaW9uIl19fV19LHhfYXhpc19wcmVjaXNpPQpvbjp7 dGl0bGU6IkF4aXMgdGljayBmb3JtYXQiLGluZm86IlNlbGVjdCB0aGUgdGljayBmb3JtYXQgZm9y IHRoZSBheGlzLiIsdHk9CnBlOiJzZWxlY3QiLGluaXQ6IjEiLGRhdGE6W3tsYWJlbDoiMC4wMDAw MSIsdmFsdWU6IjUifSx7bGFiZWw6IjAuMDAwMSIsdmFsdT0KZToiNCJ9LHtsYWJlbDoiMC4wMDEi LHZhbHVlOiIzIn0se2xhYmVsOiIwLjAxIix2YWx1ZToiMiJ9LHtsYWJlbDoiMC4xIix2YWx1PQpl OiIxIn0se2xhYmVsOiIxIix2YWx1ZToiMCJ9XX0sc2VwYXJhdG9yX3k6e3RpdGxlOiJZIGF4aXMi LHR5cGU6InNlcGFyYXRvciI9Cn0seV9heGlzX2xhYmVsOnt0aXRsZToiQXhpcyBsYWJlbCIsaW5m bzoiUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUgYXhpcy4iLHR5cD0KZToidGV4dCIsaW5pdDoiWS1h eGlzIixwbGFjZWhvbGRlcjoiQXhpcyBsYWJlbCJ9LHlfYXhpc190eXBlOnt0aXRsZToiQXhpcyB2 PQphbHVlIHR5cGUiLGluZm86IlNlbGVjdCB0aGUgdmFsdWUgdHlwZSBvZiB0aGUgYXhpcy4iLHR5 cGU6InNlbGVjdCIsaW5pdDoiYXU9CnRvIixkYXRhOlt7bGFiZWw6Ii0tIERvIG5vdCBzaG93IHZh bHVlcyAtLSIsdmFsdWU6ImhpZGUiLG9wZXJhdGlvbnM6e2hpZGU6Wz0KInlfYXhpc19wcmVjaXNp b24iXX19LHtsYWJlbDoiQXV0byIsdmFsdWU6ImF1dG8iLG9wZXJhdGlvbnM6e2hpZGU6WyJ5X2F4 aXNfPQpwcmVjaXNpb24iXX19LHtsYWJlbDoiRmxvYXQiLHZhbHVlOiJmIixvcGVyYXRpb25zOntz aG93OlsieV9heGlzX3ByZWNpc2lvbiI9Cl19fSx7bGFiZWw6IkV4cG9uZW50Iix2YWx1ZToiZSIs b3BlcmF0aW9uczp7c2hvdzpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYT0KYmVsOiJJbnRlZ2Vy Iix2YWx1ZToiZCIsb3BlcmF0aW9uczp7aGlkZTpbInlfYXhpc19wcmVjaXNpb24iXX19LHtsYWJl bDoiUGVyPQpjZW50YWdlIix2YWx1ZToicCIsb3BlcmF0aW9uczp7c2hvdzpbInlfYXhpc19wcmVj aXNpb24iXX19LHtsYWJlbDoiU0ktcHJlZmk9CngiLHZhbHVlOiJzIixvcGVyYXRpb25zOntoaWRl OlsieV9heGlzX3ByZWNpc2lvbiJdfX1dfSx5X2F4aXNfcHJlY2lzaW9uOnt0aT0KdGxlOiJBeGlz IHRpY2sgZm9ybWF0IixpbmZvOiJTZWxlY3QgdGhlIHRpY2sgZm9ybWF0IGZvciB0aGUgYXhpcy4i LHR5cGU6InNlPQpsZWN0Iixpbml0OiIxIixkYXRhOlt7bGFiZWw6IjAuMDAwMDEiLHZhbHVlOiI1 In0se2xhYmVsOiIwLjAwMDEiLHZhbHVlOiI0In09Cix7bGFiZWw6IjAuMDAxIix2YWx1ZToiMyJ9 LHtsYWJlbDoiMC4wMSIsdmFsdWU6IjIifSx7bGFiZWw6IjAuMSIsdmFsdWU6IjEifT0KLHtsYWJl bDoiMSIsdmFsdWU6IjAifV19LHNlcGFyYXRvcl9sZWdlbmQ6e3RpdGxlOiJPdGhlcnMiLHR5cGU6 InNlcGFyYXRvciJ9PQosc2hvd19sZWdlbmQ6e3RpdGxlOiJTaG93IGxlZ2VuZCIsaW5mbzoiV291 bGQgeW91IGxpa2UgdG8gYWRkIGEgbGVnZW5kPyIsdHk9CnBlOiJyYWRpb2J1dHRvbiIsaW5pdDoi dHJ1ZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdj0KYWx1 ZToiZmFsc2UifV19LHVzZV9wYW5lbHM6e3RpdGxlOiJVc2UgbXVsdGktcGFuZWxzIixpbmZvOiJX b3VsZCB5b3UgbGlrZSB0PQpvIHNlcGFyYXRlIHlvdXIgZGF0YSBpbnRvIGluZGl2aWR1YWwgcGFu ZWxzPyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHM9CmUiLGRhdGE6W3tsYWJlbDoiWWVz Iix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9XX19fX0pLGZ1bmN0aT0K b24oKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuKG5ldyBEYXRlKHQsZSsxLDApKS5nZXREYXRlKCl9 ZnVuY3Rpb24gbihlLHQsbil7PQpyZXR1cm4gZnVuY3Rpb24ocixpLHMpe3ZhciBvPTNEZShyKSx1 PTNEW107bzxyJiZ0KG8pO2lmKHM+MSl3aGlsZShvPGkpe3ZhciA9CmE9M0RuZXcgRGF0ZSgrbyk7 bihhKSVzPTNEPTNEPTNEMCYmdS5wdXNoKGEpLHQobyl9ZWxzZSB3aGlsZShvPGkpdS5wdXNoKG5l dz0KIERhdGUoK28pKSx0KG8pO3JldHVybiB1fX12YXIgZT0zRHdpbmRvdy5udnx8e307ZS52ZXJz aW9uPTNEIjEuMS4xNWIiLGUuZGV2PQo9M0QhMCx3aW5kb3cubnY9M0RlLGUudG9vbHRpcD0zRGUu dG9vbHRpcHx8e30sZS51dGlscz0zRGUudXRpbHN8fHt9LGUubW9kZWw9CnM9M0RlLm1vZGVsc3x8 e30sZS5jaGFydHM9M0R7fSxlLmdyYXBocz0zRFtdLGUubG9ncz0zRHt9LGUuZGlzcGF0Y2g9M0Rk My5kaT0Kc3BhdGNoKCJyZW5kZXJfc3RhcnQiLCJyZW5kZXJfZW5kIiksZS5kZXYmJihlLmRpc3Bh dGNoLm9uKCJyZW5kZXJfc3RhcnQiLGZ1PQpuY3Rpb24odCl7ZS5sb2dzLnN0YXJ0VGltZT0zRCso bmV3IERhdGUpfSksZS5kaXNwYXRjaC5vbigicmVuZGVyX2VuZCIsZnVuY3Q9Cmlvbih0KXtlLmxv Z3MuZW5kVGltZT0zRCsobmV3IERhdGUpLGUubG9ncy50b3RhbFRpbWU9M0RlLmxvZ3MuZW5kVGlt ZS1lLmxvZz0Kcy5zdGFydFRpbWUsZS5sb2coInRvdGFsIixlLmxvZ3MudG90YWxUaW1lKX0pKSxl LmxvZz0zRGZ1bmN0aW9uKCl7aWYoZS5kZXYmPQomY29uc29sZS5sb2cmJmNvbnNvbGUubG9nLmFw cGx5KWNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTtlbHNlIGk9CmYoZS5kZXYm JnR5cGVvZiBjb25zb2xlLmxvZz0zRD0zRCJmdW5jdGlvbiImJkZ1bmN0aW9uLnByb3RvdHlwZS5i aW5kKXt2YXIgdD0KPTNERnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChjb25zb2xlLmxvZyxj b25zb2xlKTt0LmFwcGx5KGNvbnNvbGUsYXJndW1lPQpudHMpfXJldHVybiBhcmd1bWVudHNbYXJn dW1lbnRzLmxlbmd0aC0xXX0sZS5yZW5kZXI9M0RmdW5jdGlvbihuKXtuPTNEbnx8MSw9CmUucmVu ZGVyLmFjdGl2ZT0zRCEwLGUuZGlzcGF0Y2gucmVuZGVyX3N0YXJ0KCksc2V0VGltZW91dChmdW5j dGlvbigpe3ZhciB0LD0Kcjtmb3IodmFyIGk9M0QwO2k8biYmKHI9M0RlLnJlbmRlci5xdWV1ZVtp XSk7aSsrKXQ9M0RyLmdlbmVyYXRlKCksdHlwZW9mIHIuPQpjYWxsYmFjaz0zRD0zRHR5cGVvZiBG dW5jdGlvbiYmci5jYWxsYmFjayh0KSxlLmdyYXBocy5wdXNoKHQpO2UucmVuZGVyLnF1ZXU9CmUu c3BsaWNlKDAsaSksZS5yZW5kZXIucXVldWUubGVuZ3RoP3NldFRpbWVvdXQoYXJndW1lbnRzLmNh bGxlZSwwKTooZS5kaXNwYT0KdGNoLnJlbmRlcl9lbmQoKSxlLnJlbmRlci5hY3RpdmU9M0QhMSl9 LDApfSxlLnJlbmRlci5hY3RpdmU9M0QhMSxlLnJlbmRlci5xPQp1ZXVlPTNEW10sZS5hZGRHcmFw aD0zRGZ1bmN0aW9uKHQpe3R5cGVvZiBhcmd1bWVudHNbMF09M0Q9M0R0eXBlb2YgRnVuY3Rpb249 CiYmKHQ9M0R7Z2VuZXJhdGU6YXJndW1lbnRzWzBdLGNhbGxiYWNrOmFyZ3VtZW50c1sxXX0pLGUu cmVuZGVyLnF1ZXVlLnB1c2godD0KKSxlLnJlbmRlci5hY3RpdmV8fGUucmVuZGVyKCl9LGUuaWRl bnRpdHk9M0RmdW5jdGlvbihlKXtyZXR1cm4gZX0sZS5zdHJpcD0KPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGUucmVwbGFjZSgvKFxzfCYpL2csIiIpfSxkMy50aW1lLm1vbnRoRW5kPTNEZnVuY3Rpb24o PQplKXtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwwKX0sZDMu dGltZS5tb250aEVuZHM9M0RuKGQ9CjMudGltZS5tb250aEVuZCxmdW5jdGlvbihlKXtlLnNldFVU Q0RhdGUoZS5nZXRVVENEYXRlKCkrMSksZS5zZXREYXRlKHQoZS5nZT0KdE1vbnRoKCkrMSxlLmdl dEZ1bGxZZWFyKCkpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLGUuaW50ZXJh Y3RpPQp2ZUd1aWRlbGluZT0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhvKXtvLmVhY2goZnVuY3Rp b24obyl7ZnVuY3Rpb24gZygpe3ZhciA9CmU9M0RkMy5tb3VzZSh0aGlzKSxuPTNEZVswXSxyPTNE ZVsxXSxvPTNEITAsYT0zRCExO2wmJihuPTNEZDMuZXZlbnQub2Zmc2V0WD0KLHI9M0RkMy5ldmVu dC5vZmZzZXRZLGQzLmV2ZW50LnRhcmdldC50YWdOYW1lIT0zRD0zRCJzdmciJiYobz0zRCExKSxk My5ldmVuPQp0LnRhcmdldC5jbGFzc05hbWUuYmFzZVZhbC5tYXRjaCgibnYtbGVnZW5kIikmJihh PTNEITApKSxvJiYobi09M0RpLmxlZnQsci09Cj0zRGkudG9wKTtpZihuPDB8fHI8MHx8bj5wfHxy PmR8fGQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQmJmQzLmV2ZW50LnJlbGF0ZWRUYT0KcmdldC5vd25l clNWR0VsZW1lbnQ9M0Q9M0Q9M0R1bmRlZmluZWR8fGEpe2lmKGwmJmQzLmV2ZW50LnJlbGF0ZWRU YXJnZXQmJmQzPQouZXZlbnQucmVsYXRlZFRhcmdldC5vd25lclNWR0VsZW1lbnQ9M0Q9M0Q9M0R1 bmRlZmluZWQmJmQzLmV2ZW50LnJlbGF0ZWRUYXI9CmdldC5jbGFzc05hbWUubWF0Y2godC5udlBv aW50ZXJFdmVudHNDbGFzcykpcmV0dXJuO3UuZWxlbWVudE1vdXNlb3V0KHttb3VzZT0KWDpuLG1v dXNlWTpyfSksYy5yZW5kZXJHdWlkZUxpbmUobnVsbCk7cmV0dXJufXZhciBmPTNEcy5pbnZlcnQo bik7dS5lbGVtZW50PQpNb3VzZW1vdmUoe21vdXNlWDpuLG1vdXNlWTpyLHBvaW50WFZhbHVlOmZ9 KSxkMy5ldmVudC50eXBlPTNEPTNEPTNEImRibGNsaWM9CmsiJiZ1LmVsZW1lbnREYmxjbGljayh7 bW91c2VYOm4sbW91c2VZOnIscG9pbnRYVmFsdWU6Zn0pfXZhciBoPTNEZDMuc2VsZWN0KD0KdGhp cykscD0zRG58fDk2MCxkPTNEcnx8NDAwLHY9M0RoLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWlu dGVyYWN0aXZlTGluZUxhPQp5ZXIiKS5kYXRhKFtvXSksbT0zRHYuZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKCJjbGFzcyIsIiBudi13cmFwIG52LWludGVyYWM9CnRpdmVMaW5lTGF5ZXIiKTttLmFw cGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUiKTtpZighZj0K KXJldHVybjtmLm9uKCJtb3VzZW1vdmUiLGcsITApLm9uKCJtb3VzZW91dCIsZywhMCkub24oImRi bGNsaWNrIixnKSxjLnJlbmRlPQpyR3VpZGVMaW5lPTNEZnVuY3Rpb24odCl7aWYoIWEpcmV0dXJu O3ZhciBuPTNEdi5zZWxlY3QoIi5udi1pbnRlcmFjdGl2ZUd1aWQ9CmVMaW5lIikuc2VsZWN0QWxs KCJsaW5lIikuZGF0YSh0IT0zRG51bGw/W2UudXRpbHMuTmFOdG9aZXJvKHQpXTpbXSxTdHJpbmcp Oz0Kbi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibnYtZ3VpZGVsaW5lIiku YXR0cigieDEiLGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGV9KS5hdHRyKCJ4MiIsZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KS5hdHRyKCJ5MSIsZCkuYXR0cigieTIiLDApLG4uZXg9Cml0KCkucmVtb3ZlKCl9 fSl9dmFyIHQ9M0RlLm1vZGVscy50b29sdGlwKCksbj0zRG51bGwscj0zRG51bGwsaT0zRHtsZWZ0 OjAsdD0Kb3A6MH0scz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1 PTNEZDMuZGlzcGF0Y2goImVsZW1lbnRNPQpvdXNlbW92ZSIsImVsZW1lbnRNb3VzZW91dCIsImVs ZW1lbnREYmxjbGljayIpLGE9M0QhMCxmPTNEbnVsbCxsPTNEbmF2aWdhdG89CnIudXNlckFnZW50 LmluZGV4T2YoIk1TSUUiKSE9M0Q9M0QtMTtyZXR1cm4gYy5kaXNwYXRjaD0zRHUsYy50b29sdGlw PTNEdCxjLj0KbWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGku dG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlPQpmaW5lZCI/ZS50b3A6aS50b3AsaS5sZWZ0PTNE dHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6aS5sZWZ0LGMpOmk9Cn0sYy53aWR0 aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxjKTpufSxjLmhl aWdodD0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLGMpOnJ9 LGMueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUs Yyk6c30sYy5zaG93R3VpZGVMaW5lPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW49CnRzLmxl bmd0aD8oYT0zRGUsYyk6YX0sYy5zdmdDb250YWluZXI9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD0KPyhmPTNEZSxjKTpmfSxjfSxlLmludGVyYWN0aXZlQmlzZWN0PTNEZnVu Y3Rpb24oZSx0LG4pe2lmKCFlIGluc3RhbmNlb2YgQXJyPQpheSlyZXR1cm4gbnVsbDt0eXBlb2Yg biE9M0QiZnVuY3Rpb24iJiYobj0zRGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueH0pO3ZhciA9CnI9 M0RkMy5iaXNlY3RvcihuKS5sZWZ0LGk9M0RkMy5tYXgoWzAscihlLHQpLTFdKSxzPTNEbihlW2ld LGkpO3R5cGVvZiBzPTNEPQo9M0QidW5kZWZpbmVkIiYmKHM9M0RpKTtpZihzPTNEPTNEPTNEdCly ZXR1cm4gaTt2YXIgbz0zRGQzLm1pbihbaSsxLGUubGVuZ3Q9CmgtMV0pLHU9M0RuKGVbb10sbyk7 cmV0dXJuIHR5cGVvZiB1PTNEPTNEInVuZGVmaW5lZCImJih1PTNEbyksTWF0aC5hYnModS10KT0K Pj0zRE1hdGguYWJzKHMtdCk/aTpvfSxlLm5lYXJlc3RWYWx1ZUluZGV4PTNEZnVuY3Rpb24oZSx0 LG4pe3ZhciByPTNESW5maW5pPQp0eSxpPTNEbnVsbDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9u KGUscyl7dmFyIG89M0RNYXRoLmFicyh0LWUpO288PTNEciYmbzw9Cm4mJihyPTNEbyxpPTNEcyl9 KSxpfSxmdW5jdGlvbigpe3dpbmRvdy5udi50b29sdGlwPTNEe30sd2luZG93Lm52Lm1vZGVscy50 bz0Kb2x0aXA9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHkoKXtpZihhKXt2YXIgZT0zRGQzLnNlbGVj dChhKTtlLm5vZGUoKS50YWdOYW1lPQohPTNEPTNEInN2ZyImJihlPTNEZS5zZWxlY3QoInN2ZyIp KTt2YXIgdD0zRGUubm9kZSgpP2UuYXR0cigidmlld0JveCIpOm51bGw9CjtpZih0KXt0PTNEdC5z cGxpdCgiICIpO3ZhciBuPTNEcGFyc2VJbnQoZS5zdHlsZSgid2lkdGgiKSkvdFsyXTtsLmxlZnQ9 M0RsLj0KbGVmdCpuLGwudG9wPTNEbC50b3Aqbn19fWZ1bmN0aW9uIGIoZSl7dmFyIHQ7YT90PTNE ZDMuc2VsZWN0KGEpOnQ9M0RkMy5zZWxlPQpjdCgiYm9keSIpO3ZhciBuPTNEdC5zZWxlY3QoIi5u dnRvb2x0aXAiKTtyZXR1cm4gbi5ub2RlKCk9M0Q9M0Q9M0RudWxsJiYobj0KPTNEdC5hcHBlbmQo ImRpdiIpLmF0dHIoImNsYXNzIiwibnZ0b29sdGlwICIrKHU/dToieHktdG9vbHRpcCIpKS5hdHRy KCJpZCIsPQpoKSksbi5ub2RlKCkuaW5uZXJIVE1MPTNEZSxuLnN0eWxlKCJ0b3AiLDApLnN0eWxl KCJsZWZ0IiwwKS5zdHlsZSgib3BhY2l0eSI9CiwwKSxuLnNlbGVjdEFsbCgiZGl2LCB0YWJsZSwg dGQsIHRyIikuY2xhc3NlZChwLCEwKSxuLmNsYXNzZWQocCwhMCksbi5ub2RlKD0KKX1mdW5jdGlv biB3KCl7aWYoIWMpcmV0dXJuO2lmKCFnKG4pKXJldHVybjt5KCk7dmFyIHQ9M0RsLmxlZnQsdT0z RG8hPTNEbnVsPQpsP286bC50b3AsaD0zRGIobShuKSk7Zj0zRGg7aWYoYSl7dmFyIHA9M0RhLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXSw9CmQ9M0RwP3AuZ2V0Qm91bmRpbmdDbGllbnRS ZWN0KCk6YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PTNEe2xlZnQ6MCx0b3A6MD0KfTtpZihw KXt2YXIgRT0zRHAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUz0zRGEuZ2V0Qm91bmRpbmdDbGll bnRSZWN0KCkseD0KPTNERS50b3A7aWYoeDwwKXt2YXIgVD0zRGEuZ2V0Qm91bmRpbmdDbGllbnRS ZWN0KCk7eD0zRE1hdGguYWJzKHgpPlQuaGVpZ2h0PQo/MDp4fXYudG9wPTNETWF0aC5hYnMoeC1T LnRvcCksdi5sZWZ0PTNETWF0aC5hYnMoRS5sZWZ0LVMubGVmdCl9dCs9M0RhLm9mZnM9CmV0TGVm dCt2LmxlZnQtMiphLnNjcm9sbExlZnQsdSs9M0RhLm9mZnNldFRvcCt2LnRvcC0yKmEuc2Nyb2xs VG9wfXJldHVybiBzJj0KJnM+MCYmKHU9M0RNYXRoLmZsb29yKHUvcykqcyksZS50b29sdGlwLmNh bGNUb29sdGlwUG9zaXRpb24oW3QsdV0scixpLGgpLHd9PQp2YXIgdD0zRG51bGwsbj0zRG51bGws cj0zRCJ3IixpPTNENTAscz0zRDI1LG89M0RudWxsLHU9M0RudWxsLGE9M0RudWxsLGY9M0Q9Cm51 bGwsbD0zRHtsZWZ0Om51bGwsdG9wOm51bGx9LGM9M0QhMCxoPTNEIm52dG9vbHRpcC0iK01hdGgu Zmxvb3IoTWF0aC5yYW5kbz0KbSgpKjFlNSkscD0zRCJudi1wb2ludGVyLWV2ZW50cy1ub25lIixk PTNEZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sdj0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGV9LG09 M0RmdW5jdGlvbihlKXtpZih0IT0zRG51bGwpcmV0dXJuIHQ7aWYoZT0zRD0zRG51bGwpcmV0dXI9 Cm4iIjt2YXIgbj0zRGQzLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpKSxy PTNEbi5zZWxlY3RBbGwoInRoZT0KYWQiKS5kYXRhKFtlXSkuZW50ZXIoKS5hcHBlbmQoInRoZWFk Iik7ci5hcHBlbmQoInRyIikuYXBwZW5kKCJ0ZCIpLmF0dHIoImNvPQpsc3BhbiIsMykuYXBwZW5k KCJzdHJvbmciKS5jbGFzc2VkKCJ4LXZhbHVlIiwhMCkuaHRtbCh2KGUudmFsdWUpKTt2YXIgaT0z RG49Ci5zZWxlY3RBbGwoInRib2R5IikuZGF0YShbZV0pLmVudGVyKCkuYXBwZW5kKCJ0Ym9keSIp LHM9M0RpLnNlbGVjdEFsbCgidHIiKT0KLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWVz fSkuZW50ZXIoKS5hcHBlbmQoInRyIikuY2xhc3NlZCgiaGlnaGxpZ2h0PQoiLGZ1bmN0aW9uKGUp e3JldHVybiBlLmhpZ2hsaWdodH0pO3MuYXBwZW5kKCJ0ZCIpLmNsYXNzZWQoImxlZ2VuZC1jb2xv ci1ndWk9CmRlIiwhMCkuYXBwZW5kKCJkaXYiKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsZnVu Y3Rpb24oZSl7cmV0dXJuIGUuY29sb3J9KT0KLHMuYXBwZW5kKCJ0ZCIpLmNsYXNzZWQoImtleSIs ITApLmh0bWwoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSkscy5hcHBlbmQoPQoidGQiKS5jbGFz c2VkKCJ2YWx1ZSIsITApLmh0bWwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlLnZhbHVlLHQpfSks cy5zZWxlY3Q9CkFsbCgidGQiKS5lYWNoKGZ1bmN0aW9uKGUpe2lmKGUuaGlnaGxpZ2h0KXt2YXIg dD0zRGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbj0KKFswLDFdKS5yYW5nZShbIiNmZmYiLGUuY29s b3JdKSxuPTNELjY7ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJib3JkZXItYm90dG9tPQotY29sb3Ii LHQobikpLnN0eWxlKCJib3JkZXItdG9wLWNvbG9yIix0KG4pKX19KTt2YXIgbz0zRG4ubm9kZSgp Lm91dGVySFRNTDs9CnJldHVybiBlLmZvb3RlciE9M0Q9M0R1bmRlZmluZWQmJihvKz0zRCI8ZGl2 IGNsYXNzPTNEJ2Zvb3Rlcic+IitlLmZvb3RlcisiPD0KL2Rpdj4iKSxvfSxnPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUmJmUuc2VyaWVzJiZlLnNlcmllcy5sZW5ndGg+MD8hMDohMX07cmV0PQp1cm4g dy5udlBvaW50ZXJFdmVudHNDbGFzcz0zRHAsdy5jb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW49Cmd0aD8odD0zRGUsdyk6dH0sdy50b29sdGlwRWxlbT0zRGZ1bmN0aW9u KCl7cmV0dXJuIGZ9LHcuY29udGVudEdlbmVyYXRvcj0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPTNEImZ1bmN0aW9uIiYmKG09M0RlKSx3KTptPQp9 LHcuZGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSx3KTpu fSx3LmdyYXZpdHk9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNE ZSx3KTpyfSx3LmRpc3RhbmNlPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0 aD8oaT0zRGUsdyk6aX0sdy5zbmFwRGlzdGFuY2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l PQpudHMubGVuZ3RoPyhzPTNEZSx3KTpzfSx3LmNsYXNzZXM9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odT0KPTNEZSx3KTp1fSx3LmNoYXJ0Q29udGFpbmVyPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHcpPQo6YX0sdy5wb3NpdGlvbj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsLmxlZnQ9M0R0eXBlb2YgZS5s ZWY9CnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmwubGVmdCxsLnRvcD0zRHR5cGVvZiBlLnRvcCE9 M0QidW5kZWZpbmVkIj9lLnRvcDpsLj0KdG9wLHcpOmx9LHcuZml4ZWRUb3A9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdyk6b30sdy5lPQpuYWJsZWQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsdyk6Y30sdy52YWx1ZUZvcm1h dHRlcj0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNE PTNEImZ1bmN0aW9uIiYmKGQ9M0RlKSx3PQopOmR9LHcuaGVhZGVyRm9ybWF0dGVyPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPTNEPQo9M0QiZnVuY3Rpb24i JiYodj0zRGUpLHcpOnZ9LHcuaWQ9M0RmdW5jdGlvbigpe3JldHVybiBofSx3fSxlLnRvb2x0aXAu c2hvdz0KPTNEZnVuY3Rpb24odCxuLHIsaSxzLG8pe3ZhciB1PTNEZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgiZGl2Iik7dS5jbGFzc05hbWU9Cj0zRCJudnRvb2x0aXAgIisobz9vOiJ4eS10b29sdGlw Iik7dmFyIGE9M0RzO2lmKCFzfHxzLnRhZ05hbWUubWF0Y2goL2d8c3ZnLz0KaSkpYT0zRGRvY3Vt ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07dS5zdHlsZS5sZWZ0PTNEMCx1LnN0 eWxlLnRvPQpwPTNEMCx1LnN0eWxlLm9wYWNpdHk9M0QwLHUuaW5uZXJIVE1MPTNEbixhLmFwcGVu ZENoaWxkKHUpLHMmJih0WzBdPTNEdFswXS09CnMuc2Nyb2xsTGVmdCx0WzFdPTNEdFsxXS1zLnNj cm9sbFRvcCksZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb24odCxyLGksdT0KKX0sZS50b29s dGlwLmZpbmRGaXJzdE5vblNWR1BhcmVudD0zRGZ1bmN0aW9uKGUpe3doaWxlKGUudGFnTmFtZS5t YXRjaCgvXmd8PQpzdmckL2kpIT0zRD0zRG51bGwpZT0zRGUucGFyZW50Tm9kZTtyZXR1cm4gZX0s ZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldFRvcD0KPTNEZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHQ7 ZG8gaXNOYU4oZS5vZmZzZXRUb3ApfHwobis9M0RlLm9mZnNldFRvcCk7d2hpbGUoPQplPTNEZS5v ZmZzZXRQYXJlbnQpO3JldHVybiBufSxlLnRvb2x0aXAuZmluZFRvdGFsT2Zmc2V0TGVmdD0zRGZ1 bmN0aW9uKGUsdCk9Cnt2YXIgbj0zRHQ7ZG8gaXNOYU4oZS5vZmZzZXRMZWZ0KXx8KG4rPTNEZS5v ZmZzZXRMZWZ0KTt3aGlsZShlPTNEZS5vZmZzZXRQYT0KcmVudCk7cmV0dXJuIG59LGUudG9vbHRp cC5jYWxjVG9vbHRpcFBvc2l0aW9uPTNEZnVuY3Rpb24odCxuLHIsaSl7dmFyIHM9M0RwPQphcnNl SW50KGkub2Zmc2V0SGVpZ2h0KSxvPTNEcGFyc2VJbnQoaS5vZmZzZXRXaWR0aCksdT0zRGUudXRp bHMud2luZG93U2l6ZSg9Cikud2lkdGgsYT0zRGUudXRpbHMud2luZG93U2l6ZSgpLmhlaWdodCxm PTNEd2luZG93LnBhZ2VZT2Zmc2V0LGw9M0R3aW5kb3cucD0KYWdlWE9mZnNldCxjLGg7YT0zRHdp bmRvdy5pbm5lcldpZHRoPj0zRGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg/YTphLTE2LHU9Cj0z RHdpbmRvdy5pbm5lckhlaWdodD49M0Rkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodD91OnUtMTYs bj0zRG58fCJzIixyPTNEcj0KfHwyMDt2YXIgcD0zRGZ1bmN0aW9uKHQpe3JldHVybiBlLnRvb2x0 aXAuZmluZFRvdGFsT2Zmc2V0VG9wKHQsaCl9LGQ9M0RmdW5jPQp0aW9uKHQpe3JldHVybiBlLnRv b2x0aXAuZmluZFRvdGFsT2Zmc2V0TGVmdCh0LGMpfTtzd2l0Y2gobil7Y2FzZSJlIjpjPTNEdFs9 CjBdLW8tcixoPTNEdFsxXS1zLzI7dmFyIHY9M0RkKGkpLG09M0RwKGkpO3Y8bCYmKGM9M0R0WzBd K3I+bD90WzBdK3I6bC12K2MpLD0KbTxmJiYoaD0zRGYtbStoKSxtK3M+ZithJiYoaD0zRGYrYS1t K2gtcyk7YnJlYWs7Y2FzZSJ3IjpjPTNEdFswXStyLGg9M0R0WzFdPQotcy8yO3ZhciB2PTNEZChp KSxtPTNEcChpKTt2K28+dSYmKGM9M0R0WzBdLW8tciksbTxmJiYoaD0zRGYrNSksbStzPmYrYSYm KGg9Cj0zRGYrYS1tK2gtcyk7YnJlYWs7Y2FzZSJuIjpjPTNEdFswXS1vLzItNSxoPTNEdFsxXSty O3ZhciB2PTNEZChpKSxtPTNEcChpKT0KO3Y8bCYmKGM9M0RsKzUpLHYrbz51JiYoYz0zRGMtby8y KzUpLG0rcz5mK2EmJihoPTNEZithLW0raC1zKTticmVhaztjYXNlInMiPQo6Yz0zRHRbMF0tby8y LGg9M0R0WzFdLXMtcjt2YXIgdj0zRGQoaSksbT0zRHAoaSk7djxsJiYoYz0zRGwrNSksditvPnUm JihjPQo9M0RjLW8vMis1KSxmPm0mJihoPTNEZik7YnJlYWs7Y2FzZSJub25lIjpjPTNEdFswXSxo PTNEdFsxXS1yO3ZhciB2PTNEZChpKSw9Cm09M0RwKGkpfXJldHVybiBpLnN0eWxlLmxlZnQ9M0Rj KyJweCIsaS5zdHlsZS50b3A9M0RoKyJweCIsaS5zdHlsZS5vcGFjaXR5PQo9M0QxLGkuc3R5bGUu cG9zaXRpb249M0QiYWJzb2x1dGUiLGl9LGUudG9vbHRpcC5jbGVhbnVwPTNEZnVuY3Rpb24oKXt2 YXIgZT0KPTNEZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibnZ0b29sdGlwIiksdD0z RFtdO3doaWxlKGUubGVuZ3RoKXQucHVzPQpoKGVbMF0pLGVbMF0uc3R5bGUudHJhbnNpdGlvbkRl bGF5PTNEIjAgIWltcG9ydGFudCIsZVswXS5zdHlsZS5vcGFjaXR5PTNEMCw9CmVbMF0uY2xhc3NO YW1lPTNEIm52dG9vbHRpcC1wZW5kaW5nLXJlbW92YWwiO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3 aGlsZSh0Lj0KbGVuZ3RoKXt2YXIgZT0zRHQucG9wKCk7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KGUpfX0sNTAwKX19KCksZS51dGlscy53aW5kPQpvd1NpemU9M0RmdW5jdGlvbigpe3ZhciBlPTNE e3dpZHRoOjY0MCxoZWlnaHQ6NDgwfTtyZXR1cm4gZG9jdW1lbnQuYm9keSYmZG89CmN1bWVudC5i b2R5Lm9mZnNldFdpZHRoJiYoZS53aWR0aD0zRGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsZS5o ZWlnaHQ9M0Rkbz0KY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KSxkb2N1bWVudC5jb21wYXRNb2Rl PTNEPTNEIkNTUzFDb21wYXQiJiZkb2N1bWVudC5kPQpvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoJiYoZS53aWR0aD0zRGRvY3VtZW50LmQ9Cm9jdW1l bnRFbGVtZW50Lm9mZnNldFdpZHRoLGUuaGVpZ2h0PTNEZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50 Lm9mZnNldEhlaWdodD0KKSx3aW5kb3cuaW5uZXJXaWR0aCYmd2luZG93LmlubmVySGVpZ2h0JiYo ZS53aWR0aD0zRHdpbmRvdy5pbm5lcldpZHRoLGUuaGVpPQpnaHQ9M0R3aW5kb3cuaW5uZXJIZWln aHQpLGV9LGUudXRpbHMud2luZG93UmVzaXplPTNEZnVuY3Rpb24oZSl7aWYoZT0zRD0zRD0KPTNE dW5kZWZpbmVkKXJldHVybjt2YXIgdD0zRHdpbmRvdy5vbnJlc2l6ZTt3aW5kb3cub25yZXNpemU9 M0RmdW5jdGlvbihuKXt0PQp5cGVvZiB0PTNEPTNEImZ1bmN0aW9uIiYmdChuKSxlKG4pfX0sZS51 dGlscy5nZXRDb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/T2Jq ZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPTNEPTNEPTNEIltvYmplY3QgQXJyYXldIj0K P2Z1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29sb3J8fHRbbiV0Lmxlbmd0aF19OnQ6ZS51dGlscy5k ZWZhdWx0Q29sb3IoKX0sZS51PQp0aWxzLmRlZmF1bHRDb2xvcj0zRGZ1bmN0aW9uKCl7dmFyIGU9 M0RkMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2UoKTtyZXR1cm49CiBmdW5jdGlvbih0LG4pe3Jl dHVybiB0LmNvbG9yfHxlW24lZS5sZW5ndGhdfX0sZS51dGlscy5jdXN0b21UaGVtZT0zRGZ1bmN0 aT0Kb24oZSx0LG4pe3Q9M0R0fHxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9LG49M0RufHxkMy5z Y2FsZS5jYXRlZ29yeTIwKCkucmFuPQpnZSgpO3ZhciByPTNEbi5sZW5ndGg7cmV0dXJuIGZ1bmN0 aW9uKGkscyl7dmFyIG89M0R0KGkpO3JldHVybiByfHwocj0zRG4ubGU9Cm5ndGgpLHR5cGVvZiBl W29dIT0zRCJ1bmRlZmluZWQiP3R5cGVvZiBlW29dPTNEPTNEImZ1bmN0aW9uIj9lW29dKCk6ZVtv XTpuWz0KLS1yXX19LGUudXRpbHMucGpheD0zRGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcihyKXtk My5odG1sKHIsZnVuY3Rpb24ocil7dmFyPQogaT0zRGQzLnNlbGVjdChuKS5ub2RlKCk7aS5wYXJl bnROb2RlLnJlcGxhY2VDaGlsZChkMy5zZWxlY3Qocikuc2VsZWN0KG4pLm49Cm9kZSgpLGkpLGUu dXRpbHMucGpheCh0LG4pfSl9ZDMuc2VsZWN0QWxsKHQpLm9uKCJjbGljayIsZnVuY3Rpb24oKXto aXN0b3J5Lj0KcHVzaFN0YXRlKHRoaXMuaHJlZix0aGlzLnRleHRDb250ZW50LHRoaXMuaHJlZiks cih0aGlzLmhyZWYpLGQzLmV2ZW50LnByZXZlPQpudERlZmF1bHQoKX0pLGQzLnNlbGVjdCh3aW5k b3cpLm9uKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtkMy5ldmVudC5zdGF0ZSYmcig9CmQzLmV2ZW50 LnN0YXRlKX0pfSxlLnV0aWxzLmNhbGNBcHByb3hUZXh0V2lkdGg9M0RmdW5jdGlvbihlKXtpZih0 eXBlb2YgZS5zdD0KeWxlPTNEPTNEImZ1bmN0aW9uIiYmdHlwZW9mIGUudGV4dD0zRD0zRCJmdW5j dGlvbiIpe3ZhciB0PTNEcGFyc2VJbnQoZS5zdHlsPQplKCJmb250LXNpemUiKS5yZXBsYWNlKCJw eCIsIiIpKSxuPTNEZS50ZXh0KCkubGVuZ3RoO3JldHVybiBuKnQqLjV9cmV0dXJuIDA9Cn0sZS51 dGlscy5OYU50b1plcm89M0RmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGUhPTNEIm51bWJlciJ8 fGlzTmFOKGUpfHxlPQo9M0Q9M0Q9M0RudWxsfHxlPTNEPTNEPTNESW5maW5pdHk/MDplfSxlLnV0 aWxzLm9wdGlvbnNGdW5jPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gZSYmZDMubWFwKGUpLmZvckVh Y2goZnVuY3Rpb24oZSx0KXt0eXBlb2YgdGhpc1tlXT0zRD0zRCJmdW5jdGlvbiImJnRoaT0Kc1tl XSh0KX0uYmluZCh0aGlzKSksdGhpc30sZS5tb2RlbHMuYXhpcz0zRGZ1bmN0aW9uKCl7ZnVuY3Rp b24gbShlKXtyZXR1cm4gPQplLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9M0RkMy5zZWxlY3QodGhp cyksbT0zRGkuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtYXg9CmlzIikuZGF0YShbZV0pLGc9M0Rt LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYXhpcz0K IikseT0zRGcuYXBwZW5kKCJnIiksYj0zRG0uc2VsZWN0KCJnIik7cCE9M0Q9M0RudWxsP3QudGlj a3MocCk6KHQub3JpZW50KCk9Cj0zRD0zRCJ0b3AifHx0Lm9yaWVudCgpPTNEPTNEImJvdHRvbSIp JiZ0LnRpY2tzKE1hdGguYWJzKHMucmFuZ2UoKVsxXS1zLnJhbj0KZ2UoKVswXSkvMTAwKSxiLmNh bGwodCksdj0zRHZ8fHQuc2NhbGUoKTt2YXIgdz0zRHQudGlja0Zvcm1hdCgpO3c9M0Q9M0RudWxs PQomJih3PTNEdi50aWNrRm9ybWF0KCkpO3ZhciBFPTNEYi5zZWxlY3RBbGwoInRleHQubnYtYXhp c2xhYmVsIikuZGF0YShbb3x8bnU9CmxsXSk7RS5leGl0KCkucmVtb3ZlKCk7c3dpdGNoKHQub3Jp ZW50KCkpe2Nhc2UidG9wIjpFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0Ij0KKS5hdHRyKCJjbGFzcyIs Im52LWF4aXNsYWJlbCIpO3ZhciBTPTNEcy5yYW5nZSgpLmxlbmd0aD0zRD0zRDI/cy5yYW5nZSgp WzFdPQo6cy5yYW5nZSgpW3MucmFuZ2UoKS5sZW5ndGgtMV0rKHMucmFuZ2UoKVsxXS1zLnJhbmdl KClbMF0pO0UuYXR0cigidGV4dC1hbmM9CmhvciIsIm1pZGRsZSIpLmF0dHIoInkiLDApLmF0dHIo IngiLFMvMik7aWYodSl7dmFyIHg9M0RtLnNlbGVjdEFsbCgiZy5udi1heD0KaXNNYXhNaW4iKS5k YXRhKHMuZG9tYWluKCkpO3guZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4 aXNNYXhNPQppbiIpLmFwcGVuZCgidGV4dCIpLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0cigidHJh bnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHU9CnJuInRyYW5zbGF0ZSgiK3MoZSkrIiwwKSJ9KS5z ZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi0wLjVlbSIpLmF0dHIoInkiLC10Lj0KdGlja1BhZGRp bmcoKSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFy IG49M0R3KGUpPQo7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4iKT8iIjpufSkseC5hdHRyKCJ0cmFu c2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInQ9CnJhbnNsYXRlKCIrcy5yYW5nZSgpW3RdKyIs MCkifSl9YnJlYWs7Y2FzZSJib3R0b20iOnZhciBUPTNEMzYsTj0zRDMwLEM9M0RiLj0Kc2VsZWN0 QWxsKCJnIikuc2VsZWN0KCJ0ZXh0Iik7aWYoZiUzNjApe0MuZWFjaChmdW5jdGlvbihlLHQpe3Zh ciBuPTNEdGhpcy5nPQpldEJCb3goKS53aWR0aDtuPk4mJihOPTNEbil9KTt2YXIgaz0zRE1hdGgu YWJzKE1hdGguc2luKGYqTWF0aC5QSS8xODApKSxUPQo9M0Qoaz9rKk46TikrMzA7Qy5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4icm90YXRlKCIrZisiIDAsMCk9CiJ9KS5z dHlsZSgidGV4dC1hbmNob3IiLGYlMzYwPjA/InN0YXJ0IjoiZW5kIil9RS5lbnRlcigpLmFwcGVu ZCgidGV4dCIpLmF0dD0KcigiY2xhc3MiLCJudi1heGlzbGFiZWwiKTt2YXIgUz0zRHMucmFuZ2Uo KS5sZW5ndGg9M0Q9M0QyP3MucmFuZ2UoKVsxXTpzLnJhPQpuZ2UoKVtzLnJhbmdlKCkubGVuZ3Ro LTFdKyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKTtFLmF0dHIoInRleHQtYW5jaG9yIiw9CiJt aWRkbGUiKS5hdHRyKCJ5IixUKS5hdHRyKCJ4IixTLzIpO2lmKHUpe3ZhciB4PTNEbS5zZWxlY3RB bGwoImcubnYtYXhpc01heD0KTWluIikuZGF0YShbcy5kb21haW4oKVswXSxzLmRvbWFpbigpW3Mu ZG9tYWluKCkubGVuZ3RoLTFdXSk7eC5lbnRlcigpLmFwcGVuPQpkKCJnIikuYXR0cigiY2xhc3Mi LCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0IikseC5leGl0KCkucmVtb3ZlKCkseC5hdHQ9 CnIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHMoZSkrKGg/ cy5yYW5nZUJhbmQoKS8yOjApKT0KKyIsMCkifSkuc2VsZWN0KCJ0ZXh0IikuYXR0cigiZHkiLCIu NzFlbSIpLmF0dHIoInkiLHQudGlja1BhZGRpbmcoKSkuYXR0cigiPQp0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUsdCxuKXtyZXR1cm4icm90YXRlKCIrZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5jaG9y Iiw9CmY/ZiUzNjA+MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7 dmFyIG49M0R3KGUpO3JldHVybigiIj0KK24pLm1hdGNoKCJOYU4iKT8iIjpufSkseC5hdHRyKCJ0 cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiPQorKHMoZSkrKGg/cy5y YW5nZUJhbmQoKS8yOjApKSsiLDApIn0pfWMmJkMuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihl LHQpe3I9CmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQlMj0zRD0zRDA/IjAiOiIxMiIpKyIpIn0pO2Jy ZWFrO2Nhc2UicmlnaHQiOkUuZW50ZXIoKT0KLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwi bnYtYXhpc2xhYmVsIiksRS5zdHlsZSgidGV4dC1hbmNob3IiLGw/Im1pZGRsPQplIjoiYmVnaW4i KS5hdHRyKCJ0cmFuc2Zvcm0iLGw/InJvdGF0ZSg5MCkiOiIiKS5hdHRyKCJ5IixsPy1NYXRoLm1h eChuLnJpZ2g9CnQscikrMTI6LTEwKS5hdHRyKCJ4IixsP3MucmFuZ2UoKVswXS8yOnQudGlja1Bh ZGRpbmcoKSk7aWYodSl7dmFyIHg9M0RtLnNlbD0KZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5k YXRhKHMuZG9tYWluKCkpO3guZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzPQpzIiwibnYt YXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwwKSx4LmV4aXQoKS5y ZW1vdmUoKSx4LmE9CnR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xh dGUoMCwiK3MoZSkrIikifSkuc2VsZWN0KCJ0ZXh0Ij0KKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0 cigieSIsMCkuYXR0cigieCIsdC50aWNrUGFkZGluZygpKS5zdHlsZSgidGV4dC1hbmNoPQpvciIs InN0YXJ0IikudGV4dChmdW5jdGlvbihlLHQpe3ZhciBuPTNEdyhlKTtyZXR1cm4oIiIrbikubWF0 Y2goIk5hTiIpPyIiOm49Cn0pLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVy biJ0cmFuc2xhdGUoMCwiK3MucmFuZ2UoKVt0XSsiKSJ9KT0KLnNlbGVjdCgidGV4dCIpLnN0eWxl KCJvcGFjaXR5IiwxKX1icmVhaztjYXNlImxlZnQiOkUuZW50ZXIoKS5hcHBlbmQoInRleHQiPQop LmF0dHIoImNsYXNzIiwibnYtYXhpc2xhYmVsIiksRS5zdHlsZSgidGV4dC1hbmNob3IiLGw/Im1p ZGRsZSI6ImVuZCIpLmF0dHI9CigidHJhbnNmb3JtIixsPyJyb3RhdGUoLTkwKSI6IiIpLmF0dHIo InkiLGw/LU1hdGgubWF4KG4ubGVmdCxyKStkOi0xMCkuYXR0cj0KKCJ4IixsPy1zLnJhbmdlKClb MF0vMjotdC50aWNrUGFkZGluZygpKTtpZih1KXt2YXIgeD0zRG0uc2VsZWN0QWxsKCJnLm52LWF4 PQppc01heE1pbiIpLmRhdGEocy5kb21haW4oKSk7eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtYXhpc01heE09CmluIikuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHki LDApLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0cigidHJhbnNmb3JtIj0KLGZ1bmN0aW9uKGUsdCl7 cmV0dXJuInRyYW5zbGF0ZSgwLCIrdihlKSsiKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIs Ii4zPQoyZW0iKS5hdHRyKCJ5IiwwKS5hdHRyKCJ4IiwtdC50aWNrUGFkZGluZygpKS5hdHRyKCJ0 ZXh0LWFuY2hvciIsImVuZCIpLnRleHQ9CihmdW5jdGlvbihlLHQpe3ZhciBuPTNEdyhlKTtyZXR1 cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSx4LmF0dHIoInRyYW5zZj0Kb3JtIixmdW5jdGlv bihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3MucmFuZ2UoKVt0XSsiKSJ9KS5zZWxlY3QoInRl eHQiKS5zPQp0eWxlKCJvcGFjaXR5IiwxKX19RS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSks dSYmKHQub3JpZW50KCk9M0Q9M0Q9M0QibGU9CmZ0Inx8dC5vcmllbnQoKT0zRD0zRD0zRCJyaWdo dCIpJiYoYi5zZWxlY3RBbGwoImciKS5lYWNoKGZ1bmN0aW9uKGUsdCl7ZDMucz0KZWxlY3QodGhp cykuc2VsZWN0KCJ0ZXh0IikuYXR0cigib3BhY2l0eSIsMSk7aWYocyhlKTxzLnJhbmdlKClbMV0r MTB8fHMoZSk+PQpzLnJhbmdlKClbMF0tMTApKGU+MWUtMTB8fGU8LTFlLTEwKSYmZDMuc2VsZWN0 KHRoaXMpLmF0dHIoIm9wYWNpdHkiLDApLGQzLnM9CmVsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIp LmF0dHIoIm9wYWNpdHkiLDApfSkscy5kb21haW4oKVswXT0zRD0zRHMuZG9tYWluKD0KKVsxXSYm cy5kb21haW4oKVswXT0zRD0zRDAmJm0uc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5zdHls ZSgib3BhY2l0eSIsPQpmdW5jdGlvbihlLHQpe3JldHVybiB0PzA6MX0pKTtpZih1JiYodC5vcmll bnQoKT0zRD0zRD0zRCJ0b3AifHx0Lm9yaWVudCgpPQo9M0Q9M0Q9M0QiYm90dG9tIikpe3ZhciBM PTNEW107bS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmVhY2goZnVuY3Rpb249CihlLHQp e3RyeXt0P0wucHVzaChzKGUpLXRoaXMuZ2V0QkJveCgpLndpZHRoLTQpOkwucHVzaChzKGUpK3Ro aXMuZ2V0QkJveCgpLj0Kd2lkdGgrNCl9Y2F0Y2gobil7dD9MLnB1c2gocyhlKS00KTpMLnB1c2go cyhlKSs0KX19KSxiLnNlbGVjdEFsbCgiZyIpLmVhY2goPQpmdW5jdGlvbihlLHQpe2lmKHMoZSk8 TFswXXx8cyhlKT5MWzFdKWU+MWUtMTB8fGU8LTFlLTEwP2QzLnNlbGVjdCh0aGlzKS5yZW09Cm92 ZSgpOmQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5yZW1vdmUoKX0pfWEmJmIuc2VsZWN0 QWxsKCIudGljayIpLmZpbD0KdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFwYXJzZUZsb2F0KE1hdGgu cm91bmQoZS5fX2RhdGFfXyoxZTUpLzFlNikmJmUuX19kYXRhPQpfXyE9M0Q9M0R1bmRlZmluZWR9 KS5jbGFzc2VkKCJ6ZXJvIiwhMCksdj0zRHMuY29weSgpfSksbX12YXIgdD0zRGQzLnN2Zy5heGk9 CnMoKSxuPTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxyPTNENzUsaT0zRDYwLHM9 M0RkMy5zY2FsZS5saW5lYXIoKT0KLG89M0RudWxsLHU9M0QhMCxhPTNEITAsZj0zRDAsbD0zRCEw LGM9M0QhMSxoPTNEITEscD0zRG51bGwsZD0zRDEyO3Quc2NhbGUoPQpzKS5vcmllbnQoImJvdHRv bSIpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTt2YXIgdjtyZXR1cm4gbS5heGlz PQo9M0R0LGQzLnJlYmluZChtLHQsIm9yaWVudCIsInRpY2tWYWx1ZXMiLCJ0aWNrU3ViZGl2aWRl IiwidGlja1NpemUiLCJ0aWNrUGE9CmRkaW5nIiwidGlja0Zvcm1hdCIpLGQzLnJlYmluZChtLHMs ImRvbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5kIiwicmFuZ2VCYW5kcz0KIiksbS5vcHRpb25zPTNE ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKG0pLG0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyPQpndW1lbnRzLmxlbmd0aD8obi50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ ZS50b3A6bi50b3Asbi5yaWdodD0zRHQ9CnlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5y aWdodDpuLnJpZ2h0LG4uYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRD0KInVuZGVmaW5lZCI/ ZS5ib3R0b206bi5ib3R0b20sbi5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9l LmxlZnQ6PQpuLmxlZnQsbSk6bn0sbS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhyPTNEZSxtKTpyfSxtLnQ9Cmlja3M9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbS5oZWlnaHQ9M0RmdW5jdGlvbj0KKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSxtKTppfSxtLmF4aXNMYWJlbD0zRGZ1bmN0aW9uKGUp e3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KG89M0RlLG0pOm99LG0uc2hvd01heE1pbj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/KHU9M0RlLG0pOnV9LG0uaGlnaGxp Z2h0WmVybz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPQo9M0RlLG0p OmF9LG0uc2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUs dC5zY2FsZShzKSw9Cmg9M0R0eXBlb2Ygcy5yYW5nZUJhbmRzPTNEPTNEImZ1bmN0aW9uIixkMy5y ZWJpbmQobSxzLCJkb21haW4iLCJyYW5nZSIsInJhbj0KZ2VCYW5kIiwicmFuZ2VCYW5kcyIpLG0p OnN9LG0ucm90YXRlWUxhYmVsPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sPQplbmd0 aD8obD0zRGUsbSk6bH0sbS5yb3RhdGVMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oZj0KPTNEZSxtKTpmfSxtLnN0YWdnZXJMYWJlbHM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsbSk6PQpjfSxtLmF4aXNMYWJlbERpc3RhbmNl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLG0pOmR9LG09Cn0s ZS5tb2RlbHMuaGlzdG9yaWNhbEJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdyhFKXtyZXR1cm4g RS5lYWNoKGZ1bmN0aW9uKD0Kdyl7dmFyIEU9M0RuLXQubGVmdC10LnJpZ2h0LFM9M0RyLXQudG9w LXQuYm90dG9tLFQ9M0RkMy5zZWxlY3QodGhpcyk7cy5kb21hPQppbihkfHxkMy5leHRlbnQod1sw XS52YWx1ZXMubWFwKHUpLmNvbmNhdChmKSkpLGM/cy5yYW5nZShtfHxbRSouNS93WzBdLnZhbHU9 CmVzLmxlbmd0aCxFKih3WzBdLnZhbHVlcy5sZW5ndGgtLjUpL3dbMF0udmFsdWVzLmxlbmd0aF0p OnMucmFuZ2UobXx8WzAsRV0pLD0Kby5kb21haW4odnx8ZDMuZXh0ZW50KHdbMF0udmFsdWVzLm1h cChhKS5jb25jYXQobCkpKS5yYW5nZShnfHxbUywwXSkscy5kb21hPQppbigpWzBdPTNEPTNEPTNE cy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0tcy5k b209CmFpbigpWzBdKi4wMSxzLmRvbWFpbigpWzFdK3MuZG9tYWluKClbMV0qLjAxXSk6cy5kb21h aW4oWy0xLDFdKSksby5kb21haW4oKT0KWzBdPTNEPTNEPTNEby5kb21haW4oKVsxXSYmKG8uZG9t YWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0rby5kb21haW4oPQopWzBdKi4wMSxvLmRv bWFpbigpWzFdLW8uZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4oWy0xLDFdKSk7dmFyIE49M0RU LnNlbGU9CmN0QWxsKCJnLm52LXdyYXAubnYtaGlzdG9yaWNhbEJhci0iK2kpLmRhdGEoW3dbMF0u dmFsdWVzXSksQz0zRE4uZW50ZXIoKS5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBu di13cmFwIG52LWhpc3RvcmljYWxCYXItIitpKSxrPTNEQy5hcHBlbmQoImRlPQpmcyIpLEw9M0RD LmFwcGVuZCgiZyIpLEE9M0ROLnNlbGVjdCgiZyIpO0wuYXBwZW5kKCJnIikuYXR0cigiY2xhc3Mi LCJudi1iYXI9CnMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIr dC50b3ArIikiKSxULm9uKCJjbGljayIsZnVuYz0KdGlvbihlLHQpe3kuY2hhcnRDbGljayh7ZGF0 YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOml9KX0pLGsuYXBwZW5kKCJjbGlwPQpQYXRoIiku YXR0cigiaWQiLCJudi1jaGFydC1jbGlwLXBhdGgtIitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbGVj dCgiI252LWNoYXI9CnQtY2xpcC1wYXRoLSIraSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsRSkuYXR0 cigiaGVpZ2h0IixTKSxBLmF0dHIoImNsaXAtcGF0aD0KIixoPyJ1cmwoI252LWNoYXJ0LWNsaXAt cGF0aC0iK2krIikiOiIiKTt2YXIgTz0zRE4uc2VsZWN0KCIubnYtYmFycyIpLnNlbGVjPQp0QWxs KCIubnYtYmFyIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1 cm4gdShlLHQpfSk7Ty49CmV4aXQoKS5yZW1vdmUoKTt2YXIgTT0zRE8uZW50ZXIoKS5hcHBlbmQo InJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdD0KaW9uKHQsbil7cmV0dXJuIGUudXRp bHMuTmFOdG9aZXJvKG8oTWF0aC5tYXgoMCxhKHQsbikpKSl9KS5hdHRyKCJoZWlnaHQiLGZ1PQpu Y3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oTWF0aC5hYnMobyhhKHQsbikpLW8o MCkpKX0pLmF0dHIoInRyYW49CnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUo Iisocyh1KGUsdCkpLUUvd1swXS52YWx1ZXMubGVuZ3RoKi40NT0KKSsiLDApIn0pLm9uKCJtb3Vz ZW92ZXIiLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO2QzLnNlbGVjdCh0aGlzKS5jbGFzc2Vk PQooImhvdmVyIiwhMCkseS5lbGVtZW50TW91c2VvdmVyKHtwb2ludDplLHNlcmllczp3WzBdLHBv czpbcyh1KGUsdCkpLG8oYShlLHQ9CikpXSxwb2ludEluZGV4OnQsc2VyaWVzSW5kZXg6MCxlOmQz LmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7aT0KZighYilyZXR1cm47ZDMu c2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSkseS5lbGVtZW50TW91c2VvdXQoe3BvaW50 OmUsPQpzZXJpZXM6d1swXSxwb2ludEluZGV4OnQsc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9 KS5vbigiY2xpY2siLGZ1bmN0aW9uKGU9Cix0KXtpZighYilyZXR1cm47eS5lbGVtZW50Q2xpY2so e3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShlLHQpKT0KLG8oYShlLHQpKV0s ZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xp Y2siLGZ1PQpuY3Rpb24oZSx0KXtpZighYilyZXR1cm47eS5lbGVtZW50RGJsQ2xpY2soe3ZhbHVl OmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M9Cjpbcyh1KGUsdCkpLG8oYShlLHQpKV0sZTpkMy5l dmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KTtPLmF0dD0KcigiZmlsbCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCxu KXtyZXR1cm4oPQphKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIikr IiBudi1iYXItIituKyItIit0fSkuYXR0cigidHI9CmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0 dXJuInRyYW5zbGF0ZSgiKyhzKHUoZSx0KSktRS93WzBdLnZhbHVlcy5sZW5ndGgqLj0KNDUpKyIs MCkifSkuYXR0cigid2lkdGgiLEUvd1swXS52YWx1ZXMubGVuZ3RoKi45KSxPLmF0dHIoInkiLGZ1 bmN0aW9uKHQsbil7PQp2YXIgcj0zRGEodCxuKTwwP28oMCk6bygwKS1vKGEodCxuKSk8MT9vKDAp LTE6byhhKHQsbikpO3JldHVybiBlLnV0aWxzLk5hTnQ9Cm9aZXJvKHIpfSkuYXR0cigiaGVpZ2h0 IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhNYXRoLm1heChNYT0KdGgu YWJzKG8oYSh0LG4pKS1vKDApKSwxKSl9KX0pLHd9dmFyIHQ9M0R7dG9wOjAscmlnaHQ6MCxib3R0 b206MCxsZWZ0OjB9LG49Cj0zRDk2MCxyPTNENTAwLGk9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9t KCkqMWU0KSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRD0KZDMuc2NhbGUubGluZWFyKCksdT0z RGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPQo9 M0RbXSxsPTNEWzBdLGM9M0QhMSxoPTNEITAscD0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksZCx2 LG0sZyx5PTNEZDMuZGlzcGE9CnRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImVsZW1l bnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZT0KbnRNb3VzZW91dCIpLGI9M0Qh MDtyZXR1cm4gdy5oaWdobGlnaHRQb2ludD0zRGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KCIubnYt PQpoaXN0b3JpY2FsQmFyLSIraSkuc2VsZWN0KCIubnYtYmFycyAubnYtYmFyLTAtIitlKS5jbGFz c2VkKCJob3ZlciIsdCl9LHcuY2w9CmVhckhpZ2hsaWdodHM9M0RmdW5jdGlvbigpe2QzLnNlbGVj dCgiLm52LWhpc3RvcmljYWxCYXItIitpKS5zZWxlY3QoIi5udi1iYT0KcnMgLm52LWJhci5ob3Zl ciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LHcuZGlzcGF0Y2g9M0R5LHcub3B0aW9ucz0zRGUudXRp bHMuPQpvcHRpb25zRnVuYy5iaW5kKHcpLHcueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyh1PTNEZSx3KTp1fSw9CncueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhhPTNEZSx3KTphfSx3Lm1hcmdpbj0zRGZ1bmN0aW9uKD0KZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9w OnQudG9wPQosdC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6 dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiA9CmUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90 dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaT0KbmVkIj9lLmxl ZnQ6dC5sZWZ0LHcpOnR9LHcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8obj0KPTNEZSx3KTpufSx3LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhyPTNEZSx3KTpyfSx3LnhTPQpjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHM9M0RlLHcpOnN9LHcueVNjYWxlPTNEZnVuY3Rpb249CihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdyk6b30sdy54RG9tYWluPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZz0KdW1lbnRzLmxlbmd0aD8oZD0zRGUsdyk6ZH0sdy55RG9tYWluPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/PQoodj0zRGUsdyk6dn0sdy54UmFuZ2U9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsdyk6bX0sdy49CnlSYW5n ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSx3KTpnfSx3LmZv cmNlWD0zRGZ1bmN0aT0Kb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHcpOmZ9 LHcuZm9yY2VZPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8obD0zRGUs dyk6bH0sdy5wYWREYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8o Yz0zRGUsdyk6Y30sdy5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhoPTNEZSx3KTpofT0KLHcuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocD0zRGUudXRpbHMuZ2V0Q29sb3IodCksdyk6PQpwfSx3LmlkPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLHcpOml9LHcuaW50ZXJhY3RpdmU9M0Q9 CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEITEsdyk6Yn0sd30sZS5t b2RlbHMuYnVsbGV0PTNEZnVuYz0KdGlvbigpe2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGUuZWFjaChm dW5jdGlvbihlLG4pe3ZhciBwPTNEYy10LmxlZnQtdC5yaWdodCxtPQo9M0RoLXQudG9wLXQuYm90 dG9tLGc9M0RkMy5zZWxlY3QodGhpcykseT0zRGkuY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0 KGQ9CjMuZGVzY2VuZGluZyksYj0zRHMuY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0KGQzLmRl c2NlbmRpbmcpLHc9M0RvLmNhbGwodD0KaGlzLGUsbikuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRp bmcpLEU9M0R1LmNhbGwodGhpcyxlLG4pLnNsaWNlKCksUz0zRGEuY2FsPQpsKHRoaXMsZSxuKS5z bGljZSgpLHg9M0RmLmNhbGwodGhpcyxlLG4pLnNsaWNlKCksVD0zRGQzLnNjYWxlLmxpbmVhcigp LmRvbWE9CmluKGQzLmV4dGVudChkMy5tZXJnZShbbCx5XSkpKS5yYW5nZShyP1twLDBdOlswLHBd KSxOPTNEdGhpcy5fX2NoYXJ0X198fGQzLj0Kc2NhbGUubGluZWFyKCkuZG9tYWluKFswLEluZmlu aXR5XSkucmFuZ2UoVC5yYW5nZSgpKTt0aGlzLl9fY2hhcnRfXz0zRFQ7dmFyPQogQz0zRGQzLm1p bih5KSxrPTNEZDMubWF4KHkpLEw9M0R5WzFdLEE9M0RnLnNlbGVjdEFsbCgiZy5udi13cmFwLm52 LWJ1bGxldCI9CikuZGF0YShbZV0pLE89M0RBLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbGV0Ij0KKSxNPTNETy5hcHBlbmQoImciKSxfPTNEQS5z ZWxlY3QoImciKTtNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuPQpnZSBudi1y YW5nZU1heCIpLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudi1yYW5nZSBudi1yYW5n ZUF2ZyIpLE0uYXA9CnBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LXJhbmdlIG52LXJhbmdl TWluIiksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbD0KYXNzIiwibnYtbWVhc3VyZSIpLE0uYXBw ZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1tYXJrZXJUcmlhbmdsZSIpLEEuYXR0PQpyKCJ0 cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEQ9M0RmdW5j dGlvbihlKXtyZXR1cm49CiBNYXRoLmFicyhOKGUpLU4oMCkpfSxQPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIE1hdGguYWJzKFQoZSktVCgwKSl9LEg9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBlPDA/Tihl KTpOKDApfSxCPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9UKGUpOlQoMCl9O18uc2VsZWN0PQoo InJlY3QubnYtcmFuZ2VNYXgiKS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoIndpZHRoIixQKGs+MD9r OkMpKS5hdHRyKCJ4IixCKGs9Cj4wP2s6QykpLmRhdHVtKGs+MD9rOkMpLF8uc2VsZWN0KCJyZWN0 Lm52LXJhbmdlQXZnIikuYXR0cigiaGVpZ2h0IixtKS5hdHRyKD0KIndpZHRoIixQKEwpKS5hdHRy KCJ4IixCKEwpKS5kYXR1bShMKSxfLnNlbGVjdCgicmVjdC5udi1yYW5nZU1pbiIpLmF0dHIoImhl PQppZ2h0IixtKS5hdHRyKCJ3aWR0aCIsUChrKSkuYXR0cigieCIsQihrKSkuYXR0cigid2lkdGgi LFAoaz4wP0M6aykpLmF0dHIoIng9CiIsQihrPjA/QzprKSkuZGF0dW0oaz4wP0M6ayksXy5zZWxl Y3QoInJlY3QubnYtbWVhc3VyZSIpLnN0eWxlKCJmaWxsIixkKS5hdD0KdHIoImhlaWdodCIsbS8z KS5hdHRyKCJ5IixtLzMpLmF0dHIoIndpZHRoIix3PDA/VCgwKS1UKHdbMF0pOlQod1swXSktVCgw KSkuPQphdHRyKCJ4IixCKHcpKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3YuZWxlbWVudE1v dXNlb3Zlcih7dmFsdWU6d1swXSxsYWI9CmVsOnhbMF18fCJDdXJyZW50Iixwb3M6W1Qod1swXSks bS8yXX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3YuZWxlbWVudD0KTW91c2VvdXQoe3Zh bHVlOndbMF0sbGFiZWw6eFswXXx8IkN1cnJlbnQifSl9KTt2YXIgaj0zRG0vNjtiWzBdP18uc2Vs ZWN0QWxsPQooInBhdGgubnYtbWFya2VyVHJpYW5nbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0 aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIis9ClQoYlswXSkrIiwiK20vMisiKSJ9KS5hdHRyKCJk IiwiTTAsIitqKyJMIitqKyIsIisgLWorIiAiKyAtaisiLCIrIC1qKyJaIikubz0KbigibW91c2Vv dmVyIixmdW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6YlswXSxsYWJlbDpTWzBd fHwiUHJldmlvPQp1cyIscG9zOltUKGJbMF0pLG0vMl19KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rp b24oKXt2LmVsZW1lbnRNb3VzZW91dCh7dmFsdWU9CjpiWzBdLGxhYmVsOlNbMF18fCJQcmV2aW91 cyJ9KX0pOl8uc2VsZWN0QWxsKCJwYXRoLm52LW1hcmtlclRyaWFuZ2xlIikucmVtbz0KdmUoKSxB LnNlbGVjdEFsbCgiLm52LXJhbmdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXt2YXIg bj0zREVbdF18fCh0PQo/dD0zRD0zRDE/Ik1lYW4iOiJNaW5pbXVtIjoiTWF4aW11bSIpO3YuZWxl bWVudE1vdXNlb3Zlcih7dmFsdWU6ZSxsYWJlbDpuLHA9Cm9zOltUKGUpLG0vMl19KX0pLm9uKCJt b3VzZW91dCIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zREVbdF18fCh0P3Q9M0Q9M0QxPyJNZT0KYW4i OiJNaW5pbXVtIjoiTWF4aW11bSIpO3YuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTplLGxhYmVsOm59 KX0pfSksbX12YXIgdD0KPTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEImxl ZnQiLHI9M0QhMSxpPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogZS5yYW5nZXN9LHM9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS5tYXJrZXJzfSxvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3U9CnJl c30sdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhbmdlTGFiZWxzP2UucmFuZ2VMYWJlbHM6W119 LGE9M0RmdW5jdGlvbihlKT0Ke3JldHVybiBlLm1hcmtlckxhYmVscz9lLm1hcmtlckxhYmVsczpb XX0sZj0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmVMPQphYmVscz9lLm1lYXN1cmVMYWJl bHM6W119LGw9M0RbMF0sYz0zRDM4MCxoPTNEMzAscD0zRG51bGwsZD0zRGUudXRpbHMuZ2V0Q289 CmxvcihbIiMxZjc3YjQiXSksdj0zRGQzLmRpc3BhdGNoKCJlbGVtZW50TW91c2VvdmVyIiwiZWxl bWVudE1vdXNlb3V0Iik7cmV0dT0Kcm4gbS5kaXNwYXRjaD0zRHYsbS5vcHRpb25zPTNEZS51dGls cy5vcHRpb25zRnVuYy5iaW5kKG0pLG0ub3JpZW50PTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obj0zRGUscj0zRG49M0Q9M0QicmlnaHQifHxuPTNEPTNEImJvdHRvbSIs bSk9CjpufSxtLnJhbmdlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhp PTNEZSxtKTppfSxtLm1hcmtlcnM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZSxtKTpzfSxtLm1lYXN1cmVzPTNEZnVuY3Rpb24oZT0KKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obz0zRGUsbSk6b30sbS5mb3JjZVg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lPQpudHMubGVuZ3RoPyhsPTNEZSxtKTpsfSxtLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Q9CmUsbSk6Y30sbS5oZWlnaHQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsbSk6aH0sbS5tYXJnaT0Kbj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5k ZWZpbmVkPQoiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZp bmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3Q9CnRvbT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5k ZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2YgZS5sZT0KZnQhPTNEInVu ZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxtKTp0fSxtLnRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhwPTNEZSxtKTpwfSxtLmNvbG9yPTNEZnVuY3Rpb24o dCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Cj0zRGUudXRpbHMuZ2V0Q29sb3IodCksbSk6 ZH0sbX0sZS5tb2RlbHMuYnVsbGV0Q2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uID0KbShlKXty ZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG4saCl7dmFyIGc9M0RkMy5zZWxlY3QodGhpcykseT0zRChh fHxwYXJzZUludChnPQouc3R5bGUoIndpZHRoIikpfHw5NjApLWkubGVmdC1pLnJpZ2h0LGI9M0Rm LWkudG9wLWkuYm90dG9tLHc9M0R0aGlzO20udXBkYXQ9CmU9M0RmdW5jdGlvbigpe20oZSl9LG0u Y29udGFpbmVyPTNEdGhpcztpZighbnx8IXMuY2FsbCh0aGlzLG4saCkpe3ZhciBFPTNEZz0KLnNl bGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW3BdKTtyZXR1cm4gRS5lbnRlcigpLmFwcGVuZCgi dGV4dCIpLmF0dHIoImNsPQphc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0i KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxFLmE9CnR0cigieCIsaS5sZWZ0K3kvMiku YXR0cigieSIsMTgraS50b3ArYi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksbX1nLj0K c2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIFM9M0RzLmNhbGwodGhpcyxuLGgp LnNsaWNlKCkuc29ydChkMy5kPQplc2NlbmRpbmcpLHg9M0RvLmNhbGwodGhpcyxuLGgpLnNsaWNl KCkuc29ydChkMy5kZXNjZW5kaW5nKSxUPTNEdS5jYWxsKHRoaXM9CixuLGgpLnNsaWNlKCkuc29y dChkMy5kZXNjZW5kaW5nKSxOPTNEZy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1idWxsZXRDaGFy dD0KIikuZGF0YShbbl0pLEM9M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dmQzIG52LXdyYXAgbnYtYnVsbGV0PQpDaGFydCIpLGs9M0RDLmFwcGVuZCgiZyIpLEw9M0ROLnNl bGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi09CmJ1bGxldFdyYXAiKSxr LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtdGl0bGVzIiksTi5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cj0KYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArIikiKTt2YXIgQT0zRGQzLnNjYWxlLmxp bmVhcigpLmRvbWFpbihbMCxNYXRoLm1hPQp4KFNbMF0seFswXSxUWzBdKV0pLnJhbmdlKHI/W3ks MF06WzAseV0pLE89M0R0aGlzLl9fY2hhcnRfX3x8ZDMuc2NhbGUubGluZWE9CnIoKS5kb21haW4o WzAsSW5maW5pdHldKS5yYW5nZShBLnJhbmdlKCkpO3RoaXMuX19jaGFydF9fPTNEQTt2YXIgTT0z RGZ1bmN0aT0Kb24oZSl7cmV0dXJuIE1hdGguYWJzKE8oZSktTygwKSl9LF89M0RmdW5jdGlvbihl KXtyZXR1cm4gTWF0aC5hYnMoQShlKS1BKDApPQopfSxEPTNEay5zZWxlY3QoIi5udi10aXRsZXMi KS5hcHBlbmQoImciKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoInQ9CnJhbnNmb3Jt IiwidHJhbnNsYXRlKC02LCIrKGYtaS50b3AtaS5ib3R0b20pLzIrIikiKTtELmFwcGVuZCgidGV4 dCIpLmF0dHIoIj0KY2xhc3MiLCJudi10aXRsZSIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUu dGl0bGV9KSxELmFwcGVuZCgidGV4dCIpLmF0dHIoPQoiY2xhc3MiLCJudi1zdWJ0aXRsZSIpLmF0 dHIoImR5IiwiMWVtIikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJ0aXRsZX09CiksdC53 aWR0aCh5KS5oZWlnaHQoYik7dmFyIFA9M0RMLnNlbGVjdCgiLm52LWJ1bGxldFdyYXAiKTtkMy50 cmFuc2l0aW9uKFApLj0KY2FsbCh0KTt2YXIgSD0zRGx8fEEudGlja0Zvcm1hdCh5LzEwMCksQj0z REwuc2VsZWN0QWxsKCJnLm52LXRpY2siKS5kYXRhKEEuPQp0aWNrcyh5LzUwKSxmdW5jdGlvbihl KXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudHx8SChlKX0pLGo9M0RCLmVudGVyKCkuYXBwZW49CmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXRpY2siKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUp e3JldHVybiJ0cmFuc2xhdD0KZSgiK08oZSkrIiwwKSJ9KS5zdHlsZSgib3BhY2l0eSIsMWUtNik7 ai5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsYikuYXR0cigiPQp5MiIsYio3LzYpLGouYXBwZW5k KCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkeSIsIjFlbSIpLmE9 CnR0cigieSIsYio3LzYpLnRleHQoSCk7dmFyIEY9M0RkMy50cmFuc2l0aW9uKEIpLmF0dHIoInRy YW5zZm9ybSIsZnVuY3Rpb24oZT0KKXtyZXR1cm4idHJhbnNsYXRlKCIrQShlKSsiLDApIn0pLnN0 eWxlKCJvcGFjaXR5IiwxKTtGLnNlbGVjdCgibGluZSIpLmF0dHIoPQoieTEiLGIpLmF0dHIoInky IixiKjcvNiksRi5zZWxlY3QoInRleHQiKS5hdHRyKCJ5IixiKjcvNiksZDMudHJhbnNpdGlvbihC LmU9CnhpdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUo IitBKGUpKyIsMCkifSkuc3R5bGUoIj0Kb3BhY2l0eSIsMWUtNikucmVtb3ZlKCksZC5vbigidG9v bHRpcFNob3ciLGZ1bmN0aW9uKGUpe2Uua2V5PTNEbi50aXRsZSxjJiZ2PQooZSx3LnBhcmVudE5v ZGUpfSl9KSxkMy50aW1lci5mbHVzaCgpLG19dmFyIHQ9M0RlLm1vZGVscy5idWxsZXQoKSxuPTNE ImxlZnQ9CiIscj0zRCExLGk9M0R7dG9wOjUscmlnaHQ6NDAsYm90dG9tOjIwLGxlZnQ6MTIwfSxz PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUucj0KYW5nZXN9LG89M0RmdW5jdGlvbihlKXtyZXR1cm4g ZS5tYXJrZXJzfSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVhc3VyZXN9PQosYT0zRG51bGws Zj0zRDU1LGw9M0RudWxsLGM9M0QhMCxoPTNEZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgz PiIrdCsiPC89CmgzPiIrIjxwPiIrbisiPC9wPiJ9LHA9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixk PTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93Ij0KLCJ0b29sdGlwSGlkZSIpLHY9M0RmdW5jdGlv bih0LG4pe3ZhciByPTNEdC5wb3NbMF0rKG4ub2Zmc2V0TGVmdHx8MCkraS5sZWZ0PQoscz0zRHQu cG9zWzFdKyhuLm9mZnNldFRvcHx8MCkraS50b3Asbz0zRGgodC5rZXksdC5sYWJlbCx0LnZhbHVl LHQsbSk7ZS50b289Cmx0aXAuc2hvdyhbcixzXSxvLHQudmFsdWU8MD8iZSI6InciLG51bGwsbil9 O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TT0Kb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rp b24oZSl7ZC50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzPQplb3V0 LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QudG9vbHRpcEhpZGUoZSl9KSxkLm9uKCJ0b29sdGlwSGlk ZSIsZnVuY3Rpb24oKXs9CmMmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxtLmRpc3BhdGNoPTNEZCxt LmJ1bGxldD0zRHQsZDMucmViaW5kKG0sdCwiY29sb3IiKT0KLG0ub3B0aW9ucz0zRGUudXRpbHMu b3B0aW9uc0Z1bmMuYmluZChtKSxtLm9yaWVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQpt ZW50cy5sZW5ndGg/KG49M0RlLHI9M0RuPTNEPTNEInJpZ2h0Inx8bj0zRD0zRCJib3R0b20iLG0p Om59LG0ucmFuZ2VzPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0z RGUsbSk6c30sbS5tYXJrZXJzPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0 aD8obz0zRGUsbSk6b30sbS5tZWFzdXJlcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu PQpsZW5ndGg/KHU9M0RlLG0pOnV9LG0ud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYT0zRGUsbSk9CjphfSxtLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhmPTNEZSxtKTpmfSxtLm1hcmdpbj0zRD0KZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQi P2UuPQp0b3A6aS50b3AsaS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2Uu cmlnaHQ6aS5yaWdodCxpLmJvdHRvbT0KPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQi P2UuYm90dG9tOmkuYm90dG9tLGkubGVmdD0zRHR5cGVvZiBlLmxlZnQhPQo9M0QidW5kZWZpbmVk Ij9lLmxlZnQ6aS5sZWZ0LG0pOml9LG0udGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWU9Cm50cy5sZW5ndGg/KGw9M0RlLG0pOmx9LG0udG9vbHRpcHM9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0KPTNEZSxtKTpjfSxtLnRvb2x0aXBDb250ZW50PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLG0pPQo6aH0sbS5ub0Rh dGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6cH0sbX0s ZS5tb2RlbHM9Ci5jdW11bGF0aXZlTGluZUNoYXJ0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBEKGIp e3JldHVybiBiLmVhY2goZnVuY3Rpb24oYil7Zj0KdW5jdGlvbiBJKGUsdCl7ZDMuc2VsZWN0KEQu Y29udGFpbmVyKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIil9ZnVuY3Rpb24gPQpxKGUsdCl7 TS54PTNEZDMuZXZlbnQueCxNLmk9M0RNYXRoLnJvdW5kKE8uaW52ZXJ0KE0ueCkpLG50KCl9ZnVu Y3Rpb24gUihlLHQ9Cil7ZDMuc2VsZWN0KEQuY29udGFpbmVyKS5zdHlsZSgiY3Vyc29yIiwiYXV0 byIpLHguaW5kZXg9M0RNLmksay5zdGF0ZUNoYW5nZT0KKHgpfWZ1bmN0aW9uIG50KCl7dHQuZGF0 YShbTV0pO3ZhciBlPTNERC50cmFuc2l0aW9uRHVyYXRpb24oKTtELnRyYW5zaXRpb25EPQp1cmF0 aW9uKDApLEQudXBkYXRlKCksRC50cmFuc2l0aW9uRHVyYXRpb24oZSl9dmFyIEw9M0RkMy5zZWxl Y3QodGhpcykuY2xhc3M9CmVkKCJudi1jaGFydC0iK1MsITApLEE9M0R0aGlzLEg9M0QoZnx8cGFy c2VJbnQoTC5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZT0KZnQtdS5yaWdodCxCPTNEKGx8fHBh cnNlSW50KEwuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbTtELnVwZGF0PQpl PTNEZnVuY3Rpb24oKXtMLmNhbGwoRCl9LEQuY29udGFpbmVyPTNEdGhpcyx4LmRpc2FibGVkPTNE Yi5tYXAoZnVuY3Rpb24oZSk9CntyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighVCl7dmFyIGo7VD0z RHt9O2ZvcihqIGluIHgpeFtqXWluc3RhbmNlb2YgQXJyYXk/VD0KW2pdPTNEeFtqXS5zbGljZSgw KTpUW2pdPTNEeFtqXX12YXIgRj0zRGQzLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixJ PQopLm9uKCJkcmFnIixxKS5vbigiZHJhZ2VuZCIsUik7aWYoIWJ8fCFiLmxlbmd0aHx8IWIuZmls dGVyKGZ1bmN0aW9uKGUpe3JldHU9CnJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIFU9 M0RMLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW05dKTtyZT0KdHVybiBVLmVudGVyKCku YXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5Iiwi LS43PQplbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLFUuYXR0cigieCIsdS5sZWZ0 K0gvMikuYXR0cigieSIsdS50b3ArQi89CjIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxE fUwuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz0zRHQueD0KU2NhbGUoKSxFPTNE dC55U2NhbGUoKTtpZigheSl7dmFyIHo9M0RiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlPQpkfSkubWFwKGZ1bmN0aW9uKGUsbil7dmFyIHI9M0RkMy5leHRlbnQoZS52YWx1ZXMs dC55KCkpO3JldHVybiByWzBdPC0wLjk1JiY9CihyWzBdPTNELTAuOTUpLFsoclswXS1yWzFdKS8o MStyWzFdKSwoclsxXS1yWzBdKS8oMStyWzBdKV19KSxXPTNEW2QzLm1pbih6LD0KZnVuY3Rpb24o ZSl7cmV0dXJuIGVbMF19KSxkMy5tYXgoeixmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pXTt0LnlE b21haW4oVyl9PQplbHNlIHQueURvbWFpbihudWxsKTtPLmRvbWFpbihbMCxiWzBdLnZhbHVlcy5s ZW5ndGgtMV0pLnJhbmdlKFswLEhdKS5jbGFtcCg9CiEwKTt2YXIgYj0zRFAoTS5pLGIpLFg9M0Rn PyJub25lIjoiYWxsIixWPTNETC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1jdW11bD0KYXRpdmVM aW5lIikuZGF0YShbYl0pLCQ9M0RWLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu dmQzIG52LXdyYXAgPQpudi1jdW11bGF0aXZlTGluZSIpLmFwcGVuZCgiZyIpLEo9M0RWLnNlbGVj dCgiZyIpOyQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsIm52LWludGVyYWN0aXZlIiksJC5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLnN0eWxlKCJwb2ludD0KZXIt ZXZlbnRzIiwibm9uZSIpLCQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMi KSwkLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudi1iYWNrZ3JvdW5kIiksJC5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LWxpbmVzV3JhcCIpLnM9CnR5bGUoInBvaW50ZXItZXZlbnRz IixYKSwkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXZnTGluZXNXcmFwIikuc3R5bD0K ZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksJC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52 LWxlZ2VuZFdyYXAiKSwkLmFwPQpwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dy YXAiKSxjJiYoaS53aWR0aChIKSxKLnNlbGVjdCgiLm52LWxlZ2U9Cm5kV3JhcCIpLmRhdHVtKGIp LmNhbGwoaSksdS50b3AhPTNEaS5oZWlnaHQoKSYmKHUudG9wPTNEaS5oZWlnaHQoKSxCPTNEKGx8 fD0KcGFyc2VJbnQoTC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tKSxKLnNl bGVjdCgiLm52LWxlZ2VuZFdyYXAiPQopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIr IC11LnRvcCsiKSIpKTtpZihtKXt2YXIgSz0zRFt7a2V5OiJSZS1zY2E9CmxlIHktYXhpcyIsZGlz YWJsZWQ6IXl9XTtzLndpZHRoKDE0MCkuY29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSkucmln aHRBbD0KaWduKCExKS5tYXJnaW4oe3RvcDo1LHJpZ2h0OjAsYm90dG9tOjUsbGVmdDoyMH0pLEou c2VsZWN0KCIubnYtY29udHJvbHNXcmFwPQoiKS5kYXR1bShLKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKS5jYWxsKHMpfVYuYXR0cigidHI9CmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksZCYmSi5zZWxlY3QoIi5udi15Lm52LWF4 aXMiKS5hdD0KdHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0grIiwwKSIpO3ZhciBRPTNEYi5m aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuPQp0ZW1wRGlzYWJsZWR9KTtWLnNlbGVjdCgiLnRl bXBEaXNhYmxlZCIpLnJlbW92ZSgpLFEubGVuZ3RoJiZWLmFwcGVuZCgidGV4dCI9CikuYXR0cigi Y2xhc3MiLCJ0ZW1wRGlzYWJsZWQiKS5hdHRyKCJ4IixILzIpLmF0dHIoInkiLCItLjcxZW0iKS5z dHlsZSgidGV4dD0KLWFuY2hvciIsImVuZCIpLnRleHQoUS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu IGUua2V5fSkuam9pbigiLCAiKSsiIHZhbHVlcyBjPQphbm5vdCBiZSBjYWxjdWxhdGVkIGZvciB0 aGlzIHRpbWUgcGVyaW9kLiIpLGcmJihvLndpZHRoKEgpLmhlaWdodChCKS5tYXJnaW49Cih7bGVm dDp1LmxlZnQsdG9wOnUudG9wfSkuc3ZnQ29udGFpbmVyKEwpLnhTY2FsZSh3KSxWLnNlbGVjdCgi Lm52LWludGVyYWN0aT0KdmUiKS5jYWxsKG8pKSwkLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5h cHBlbmQoInJlY3QiKSxKLnNlbGVjdCgiLm52LWJhY2tnPQpyb3VuZCByZWN0IikuYXR0cigid2lk dGgiLEgpLmF0dHIoImhlaWdodCIsQiksdC55KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3A9Cmxh eS55fSkud2lkdGgoSCkuaGVpZ2h0KEIpLmNvbG9yKGIubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu IGUuY29sb3J8fGEoZSx0KT0KfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWJbdF0uZGlz YWJsZWQmJiFiW3RdLnRlbXBEaXNhYmxlZH0pKTt2YXIgRz0KPTNESi5zZWxlY3QoIi5udi1saW5l c1dyYXAiKS5kYXR1bShiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmPQoh ZS50ZW1wRGlzYWJsZWR9KSk7Ry5jYWxsKHQpLGIuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uuc2Vy aWVzSW5kZXg9M0R0fSk7dmE9CnIgWT0zRGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRp c2FibGVkJiYhIUMoZSl9KSxaPTNESi5zZWxlY3QoIi5udi1hdj0KZ0xpbmVzV3JhcCIpLnNlbGVj dEFsbCgibGluZSIpLmRhdGEoWSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KSxldD0zRGZ1bmN0 PQppb24oZSl7dmFyIHQ9M0RFKEMoZSkpO3JldHVybiB0PDA/MDp0PkI/Qjp0fTtaLmVudGVyKCku YXBwZW5kKCJsaW5lIikuc3R5bGU9Cigic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRh c2hhcnJheSIsIjEwLDEwIikuc3R5bGUoInN0cm9rZSIsZnVuY3Rpbz0KbihlLG4pe3JldHVybiB0 LmNvbG9yKCkoZSxlLnNlcmllc0luZGV4KX0pLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsSCkuYXR0 cigiPQp5MSIsZXQpLmF0dHIoInkyIixldCksWi5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0 aW9uKGUpe3ZhciB0PTNERShDKGUpKTs9CnJldHVybiB0PDB8fHQ+Qj8wOjF9KS5hdHRyKCJ4MSIs MCkuYXR0cigieDIiLEgpLmF0dHIoInkxIixldCkuYXR0cigieTIiLGV0KT0KLFouZXhpdCgpLnJl bW92ZSgpO3ZhciB0dD0zREcuc2VsZWN0QWxsKCIubnYtaW5kZXhMaW5lIikuZGF0YShbTV0pO3R0 LmVudGVyPQooKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52LWluZGV4TGluZSIpLmF0 dHIoIndpZHRoIiwzKS5hdHRyKCJ4IiwtMik9Ci5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigiZmls bC1vcGFjaXR5IiwuNSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYz0KYWxsKEYpLHR0 LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiK08oZS5pKSsi LDApIn0pLmF0PQp0cigiaGVpZ2h0IixCKSxoJiYobi5zY2FsZSh3KS50aWNrcyhNYXRoLm1pbihi WzBdLnZhbHVlcy5sZW5ndGgsSC83MCkpLnRpY2s9ClNpemUoLUIsMCksSi5zZWxlY3QoIi5udi14 Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0UucmFuZz0KZSgpWzBd KyIpIiksZDMudHJhbnNpdGlvbihKLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpKS5jYWxsKG4pKSxw JiYoci5zY2FsZShFPQopLnRpY2tzKEIvMzYpLnRpY2tTaXplKC1ILDApLGQzLnRyYW5zaXRpb24o Si5zZWxlY3QoIi5udi15Lm52LWF4aXMiKSkuY2FsbCg9CnIpKSxKLnNlbGVjdCgiLm52LWJhY2tn cm91bmQgcmVjdCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtNLng9M0RkMy5tb3VzZSh0aD0KaXMp WzBdLE0uaT0zRE1hdGgucm91bmQoTy5pbnZlcnQoTS54KSkseC5pbmRleD0zRE0uaSxrLnN0YXRl Q2hhbmdlKHgpLG50KCl9PQopLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljayIsZnVuY3Rpb24o ZSl7TS5pPTNEZS5wb2ludEluZGV4LE0ueD0zRE8oTS5pKSw9CnguaW5kZXg9M0RNLmksay5zdGF0 ZUNoYW5nZSh4KSxudCgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKD0K ZSx0KXtlLmRpc2FibGVkPTNEIWUuZGlzYWJsZWQseT0zRCFlLmRpc2FibGVkLHgucmVzY2FsZVk9 M0R5LGsuc3RhdGVDaGFuZ2UoPQp4KSxELnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVD aGFuZ2UiLGZ1bmN0aW9uKGUpe3guZGlzYWJsZWQ9M0RlLmRpc2E9CmJsZWQsay5zdGF0ZUNoYW5n ZSh4KSxELnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rp bz0KbihpKXt0LmNsZWFySGlnaGxpZ2h0cygpO3ZhciBzLGYsbCxjPTNEW107Yi5maWx0ZXIoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5zPQplcmllc0luZGV4PTNEdCwhZS5kaXNhYmxlZH0pLmZvckVh Y2goZnVuY3Rpb24obixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJpc2VjdCg9Cm4udmFsdWVzLGkucG9p bnRYVmFsdWUsRC54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixmLCEwKTt2YXIgbz0zRG4udmFsdWVz W2ZdOz0KaWYodHlwZW9mIG89M0Q9M0QidW5kZWZpbmVkIilyZXR1cm47dHlwZW9mIHM9M0Q9M0Qi dW5kZWZpbmVkIiYmKHM9M0RvKSx0eXBlPQpvZiBsPTNEPTNEInVuZGVmaW5lZCImJihsPTNERC54 U2NhbGUoKShELngoKShvLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU9CjpELnkoKShvLGYp LGNvbG9yOmEobixuLnNlcmllc0luZGV4KX0pfSk7aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RELnlT Y2FsZSgpLj0KaW52ZXJ0KGkubW91c2VZKSxwPTNETWF0aC5hYnMoRC55U2NhbGUoKS5kb21haW4o KVswXS1ELnlTY2FsZSgpLmRvbWFpbigpWzFdPQopLGQ9M0QuMDMqcCxtPTNEZS5uZWFyZXN0VmFs dWVJbmRleChjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pLGgsZCk9CjttIT0zRD0z RG51bGwmJihjW21dLmhpZ2hsaWdodD0zRCEwKX12YXIgZz0zRG4udGlja0Zvcm1hdCgpKEQueCgp KHMsZiksZik7bz0KLnRvb2x0aXAucG9zaXRpb24oe2xlZnQ6bCt1LmxlZnQsdG9wOmkubW91c2VZ K3UudG9wfSkuY2hhcnRDb250YWluZXIoQS5wYXJlPQpudE5vZGUpLmVuYWJsZWQodikudmFsdWVG b3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNrRm9ybWF0KCkoZSl9KS49CmRhdGEo e3ZhbHVlOmcsc2VyaWVzOmN9KSgpLG8ucmVuZGVyR3VpZGVMaW5lKGwpfSksby5kaXNwYXRjaC5v bigiZWxlbWVudE1vdT0Kc2VvdXQiLGZ1bmN0aW9uKGUpe2sudG9vbHRpcEhpZGUoKSx0LmNsZWFy SGlnaGxpZ2h0cygpfSksay5vbigidG9vbHRpcFNob3ciPQosZnVuY3Rpb24oZSl7diYmXyhlLEEu cGFyZW50Tm9kZSl9KSxrLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGU9Ci5k aXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGIuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJs ZWQ9M0RlLmRpc2FibGVkWz0Kbl19KSx4LmRpc2FibGVkPTNEZS5kaXNhYmxlZCksdHlwZW9mIGUu aW5kZXghPTNEInVuZGVmaW5lZCImJihNLmk9M0RlLmluZGV4PQosTS54PTNETyhNLmkpLHguaW5k ZXg9M0RlLmluZGV4LHR0LmRhdGEoW01dKSksdHlwZW9mIGUucmVzY2FsZVkhPTNEInVuZGVmaW49 CmVkIiYmKHk9M0RlLnJlc2NhbGVZKSxELnVwZGF0ZSgpfSl9KSxEfWZ1bmN0aW9uIFAoZSxuKXty ZXR1cm4gbi5tYXAoZnVuY3Rpbz0KbihuLHIpe2lmKCFuLnZhbHVlcylyZXR1cm4gbjt2YXIgaT0z RG4udmFsdWVzW2VdO2lmKGk9M0Q9M0RudWxsKXJldHVybiBuO3ZhPQpyIHM9M0R0LnkoKShpLGUp O3JldHVybiBzPC0wLjk1JiYhQT8obi50ZW1wRGlzYWJsZWQ9M0QhMCxuKToobi50ZW1wRGlzYWJs ZWQ9Cj0zRCExLG4udmFsdWVzPTNEbi52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUu ZGlzcGxheT0zRHt5Oih0LnkoKShlLD0KbiktcykvKDErcyl9LGV9KSxuKX0pfXZhciB0PTNEZS5t b2RlbHMubGluZSgpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kPQplbHMuYXhpcygpLGk9 M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRGUuaW50ZXJhY3Rp dmVHdWk9CmRlbGluZSgpLHU9M0R7dG9wOjMwLHJpZ2h0OjMwLGJvdHRvbTo1MCxsZWZ0OjYwfSxh PTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKT0KLGY9M0RudWxsLGw9M0RudWxsLGM9M0QhMCxoPTNE ITAscD0zRCEwLGQ9M0QhMSx2PTNEITAsbT0zRCEwLGc9M0QhMSx5PTNEITAsPQpiPTNEZnVuY3Rp b24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwv cD4ifSx3LEU9CixTPTNEdC5pZCgpLHg9M0R7aW5kZXg6MCxyZXNjYWxlWTp5fSxUPTNEbnVsbCxO PTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsQz0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXZlcmFn ZX0saz0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiPQpzdGF0ZUNo YW5nZSIsImNoYW5nZVN0YXRlIiksTD0zRDAsQT0zRCExO24ub3JpZW50KCJib3R0b20iKS50aWNr UGFkZGluZyg3KSw9CnIub3JpZW50KGQ/InJpZ2h0IjoibGVmdCIpLHMudXBkYXRlU3RhdGUoITEp O3ZhciBPPTNEZDMuc2NhbGUubGluZWFyKCksTT0zRD0Ke2k6MCx4OjB9LF89M0RmdW5jdGlvbihp LHMpe3ZhciBvPTNEaS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT0zRGkucG9zWzFdPQorKHMu b2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5k ZXgpKSxmPTNEci50aWM9CmtGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9 M0RiKGkuc2VyaWVzLmtleSxhLGYsaSxEKTtlLnRvb2x0aT0KcC5zaG93KFtvLHVdLGwsbnVsbCxu dWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwPQoi LGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0say50 b29sdGlwU2hvdyhlKX0pLHQ9Ci5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAi LGZ1bmN0aW9uKGUpe2sudG9vbHRpcEhpZGUoZSl9KSxrLm9uKD0KInRvb2x0aXBIaWRlIixmdW5j dGlvbigpe3YmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxELmRpc3BhdGNoPTNEayxELmxpbmVzPTNE PQp0LEQubGVnZW5kPTNEaSxELnhBeGlzPTNEbixELnlBeGlzPTNEcixELmludGVyYWN0aXZlTGF5 ZXI9M0RvLGQzLnJlYmluZChELHQ9CiwiZGVmaW5lZCIsImlzQXJlYSIsIngiLCJ5IiwieFNjYWxl IiwieVNjYWxlIiwic2l6ZSIsInhEb21haW4iLCJ5RG9tYWluIiwieD0KUmFuZ2UiLCJ5UmFuZ2Ui LCJmb3JjZVgiLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2ki LCJ1PQpzZVZvcm9ub2kiLCJpZCIpLEQub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmlu ZChEKSxELm1hcmdpbj0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUu dG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnUudD0Kb3AsdS5yaWdodD0z RHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0z RHR5cGVvPQpmIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnUuYm90dG9tLHUubGVm dD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGU9CmZpbmVkIj9lLmxlZnQ6dS5sZWZ0LEQpOnV9LEQu d2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0KPTNEZSxEKTpm fSxELmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxE KTpsfSxELmNvPQpsb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0z RGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcig9CmEpLEQpOmF9LEQucmVzY2FsZVk9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0zRGUsRCk6eX0sRC5zaD0Kb3dDb250 cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxEKTptfSxE LnVzZUludGVyYWN0PQppdmVHdWlkZWxpbmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZz0zRGUsZT0zRD0zRD0zRCEwJiYoRC49CmludGVyYWN0aXZlKCExKSxELnVzZVZv cm9ub2koITEpKSxEKTpnfSxELnNob3dMZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1 bWVudHMubGVuZ3RoPyhjPTNEZSxEKTpjfSxELnNob3dYQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuPQpndGg/KGg9M0RlLEQpOmh9LEQuc2hvd1lBeGlzPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLEQ9Cik6cH0sRC5yaWdodEFsaWduWUF4 aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsci5vcmllbj0K dChlPyJyaWdodCI6ImxlZnQiKSxEKTpkfSxELnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/PQoodj0zRGUsRCk6dn0sRC50b29sdGlwQ29udGVudD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSw9CkQpOmJ9LEQuc3RhdGU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsRCk6eH0sRC5kZWZhdWx0 Uz0KdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxEKTpU fSxELm5vRGF0YT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49M0Rl LEQpOk59LEQuYXZlcmFnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/ KEM9M0RlLEQpOkN9LEQudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZT0KbnRzLmxlbmd0aD8oTD0zRGUsRCk6TH0sRC5ub0Vycm9yQ2hlY2s9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0PQpoPyhBPTNEZSxEKTpBfSxEfSxlLm1vZGVscy5kaXNj cmV0ZUJhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS49CmVhY2goZnVuY3Rp b24oZSl7dmFyIGk9M0RuLXQubGVmdC10LnJpZ2h0LEU9M0RyLXQudG9wLXQuYm90dG9tLFM9M0Rk My5zZWxlYz0KdCh0aGlzKTtlLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlcy5mb3JFYWNo KGZ1bmN0aW9uKGUpe2Uuc2VyaWVzPTNEdH0pPQp9KTt2YXIgVD0zRHAmJmQ/W106ZS5tYXAoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHU9CnJue3g6dShl LHQpLHk6YShlLHQpLHkwOmUueTB9fSl9KTtzLmRvbWFpbihwfHxkMy5tZXJnZShUKS5tYXAoZnVu Y3Rpb24oZSl7cj0KZXR1cm4gZS54fSkpLnJhbmdlQmFuZHModnx8WzAsaV0sLjEpLG8uZG9tYWlu KGR8fGQzLmV4dGVudChkMy5tZXJnZShUKS5tYXAoPQpmdW5jdGlvbihlKXtyZXR1cm4gZS55fSku Y29uY2F0KGYpKSksYz9vLnJhbmdlKG18fFtFLShvLmRvbWFpbigpWzBdPDA/MTI6MCk9CixvLmRv bWFpbigpWzFdPjA/MTI6MF0pOm8ucmFuZ2UobXx8W0UsMF0pLGI9M0RifHxzLHc9M0R3fHxvLmNv cHkoKS5yYW5nZShbbz0KKDApLG8oMCldKTt2YXIgTj0zRFMuc2VsZWN0QWxsKCJnLm52LXdyYXAu bnYtZGlzY3JldGViYXIiKS5kYXRhKFtlXSksQz0zRE4uPQplbnRlcigpLmFwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWRpc2NyZXRlYmFyIiksaz0zREMuYXBwZW49CmQo ImciKSxMPTNETi5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3Jv dXBzIiksTi5hdHRyKCJ0cj0KYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3Ar IikiKTt2YXIgQT0zRE4uc2VsZWN0KCIubnYtZ3JvdXBzIikuPQpzZWxlY3RBbGwoIi5udi1ncm91 cCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX09 Cik7QS5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5 bGUoImZpbGwtb3BhY2l0eSIsMT0KZS02KSxBLmV4aXQoKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHki LDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLnJlbW92PQplKCksQS5hdHRyKCJjbGFz cyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQo Img9Cm92ZXIiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhvdmVyfSksQS5zdHlsZSgic3Ryb2tlLW9w YWNpdHkiLDEpLnN0eWxlKCJmaWxsLT0Kb3BhY2l0eSIsLjc1KTt2YXIgTz0zREEuc2VsZWN0QWxs KCJnLm52LWJhciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsPQp1ZXN9KTtPLmV4aXQo KS5yZW1vdmUoKTt2YXIgTT0zRE8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0i LGZ1bmM9CnRpb24oZSx0LG4pe3JldHVybiJ0cmFuc2xhdGUoIisocyh1KGUsdCkpK3MucmFuZ2VC YW5kKCkqLjA1KSsiLCAiK28oMCkrIikifT0KKS5vbigibW91c2VvdmVyIixmdW5jdGlvbih0LG4p e2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLGcuZWxlbWVuPQp0TW91c2VvdmVy KHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkr cy5yYW5nZUI9CmFuZCgpKih0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludElu ZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZT0KOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQi LGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhPQoxKSxnLmVs ZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBv aW50SW5kZXg6biw9CnNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGlj ayIsZnVuY3Rpb24odCxuKXtnLmVsZW1lbnRDbGljaz0KKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxz ZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zPQplcmll cysuNSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJp ZXMsZTpkMy5ldmVudH09CiksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xp Y2siLGZ1bmN0aW9uKHQsbil7Zy5lbGVtZW50RGJsQ2xpYz0Kayh7dmFsdWU6YSh0LG4pLHBvaW50 OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHQuPQpz ZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQu c2VyaWVzLGU6ZDMuZXZlbnQ9Cn0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7TS5hcHBl bmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLDApLmF0dHIoIndpZD0KdGgiLHMucmFuZ2VCYW5kKCkq LjkvZS5sZW5ndGgpLGM/KE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRk PQpsZSIpLE8uc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihlLHQpe3JldHVybiBoKGEoZSx0 KSl9KS5hdHRyKCJ4IixzLnJhbmc9CmVCYW5kKCkqLjkvMikuYXR0cigieSIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gYShlLHQpPDA/byhhKGUsdCkpLW8oMCkrMTI6LTR9KT0KKTpPLnNlbGVjdEFsbCgi dGV4dCIpLnJlbW92ZSgpLE8uYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0 KTwwPQo/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2ZSJ9KS5zdHlsZSgiZmlsbCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS49CmNvbG9yfHxsKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixm dW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxsKGUsdCl9KS5zZWxlYz0KdCgicmVjdCIpLmF0 dHIoImNsYXNzIix5KS5hdHRyKCJ3aWR0aCIscy5yYW5nZUJhbmQoKSouOS9lLmxlbmd0aCksTy5h dHRyKCJ0PQpyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXt2YXIgbj0zRHModShlLHQpKStzLnJhbmdl QmFuZCgpKi4wNSxyPTNEYShlLHQpPDA/byg9CjApOm8oMCktbyhhKGUsdCkpPDE/bygwKS0xOm8o YShlLHQpKTtyZXR1cm4idHJhbnNsYXRlKCIrbisiLCAiK3IrIikifSkuc2VsZT0KY3QoInJlY3Qi KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKG8o YShlLHQpKS1vPQooZCYmZFswXXx8MCkpfHwxKX0pLGI9M0RzLmNvcHkoKSx3PTNEby5jb3B5KCl9 KSxFfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm89CnR0b206MCxsZWZ0OjB9LG49M0Q5NjAscj0z RDUwMCxpPTNETWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz0zRGQzLnNjYT0KbGUub3Jk aW5hbCgpLG89M0RkMy5zY2FsZS5saW5lYXIoKSx1PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0s YT0zRGZ1bmN0aW9uPQooZSl7cmV0dXJuIGUueX0sZj0zRFswXSxsPTNEZS51dGlscy5kZWZhdWx0 Q29sb3IoKSxjPTNEITEsaD0zRGQzLmZvcm1hdCgiLC49CjJmIikscCxkLHYsbSxnPTNEZDMuZGlz cGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLD0KImVs ZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSx5PTNEImRpc2NyZXRlQmFyIixiLHc7 cmV0dXJuIEUuZGlzcGF0PQpjaD0zRGcsRS5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5i aW5kKEUpLEUueD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5sZW5ndGg/KHU9M0Rl LEUpOnV9LEUueT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTNEZT0K LEUpOmF9LEUubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQu dG9wPTNEdHlwZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD0z RHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ9Cjp0LnJpZ2h0LHQuYm90dG9t PTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVm dD0KPTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEUpOnR9LEUu d2lkdGg9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPTNEZSxFKTpu fSxFLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KHI9M0Rl LEUpOnJ9LEUueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9 M0RlLD0KRSk6c30sRS55U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obz0zRGUsRSk6b30sRS54RG9tYWluPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocD0zRGUsRSk6cH0sRS55RG9tYWluPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZD0zRGUsRSk6ZH0sRS54UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbj0KdHMubGVuZ3RoPyh2PTNEZSxFKTp2fSxFLnlSYW5nZT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEPQplLEUpOm19LEUuZm9yY2VZPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLEUpOmZ9LEUuY29sb3I9Cj0zRGZ1bmN0 aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZS51dGlscy5nZXRDb2xvcih0KSxF KTpsfSxFLmlkPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs RSk6aX0sRS5zaG93VmFsdWVzPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYz0zRGUsRSk6Y30sRS52YWx1ZUZvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3Vt ZW50cy5sZW5ndGg/KGg9M0RlLEUpOmh9LEUucmVjdENsYXNzPTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sPQplbmd0aD8oeT0zRGUsRSk6eX0sRX0sZS5tb2RlbHMuZGlzY3JldGVCYXJD aGFydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdyhlKXs9CnJldHVybiBlLmVhY2goZnVuY3Rpb24o ZSl7dmFyIHU9M0RkMy5zZWxlY3QodGhpcykscD0zRHRoaXMseT0zRChzfHxwYXJzZUludD0KKHUu c3R5bGUoIndpZHRoIikpfHw5NjApLWkubGVmdC1pLnJpZ2h0LEU9M0Qob3x8cGFyc2VJbnQodS5z dHlsZSgiaGVpZ2h0IikpPQp8fDQwMCktaS50b3AtaS5ib3R0b207dy51cGRhdGU9M0RmdW5jdGlv bigpe2cuYmVmb3JlVXBkYXRlKCksdS5jYWxsKHcpfSx3LmM9Cm9udGFpbmVyPTNEdGhpcztpZigh ZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbj0K Z3RofSkubGVuZ3RoKXt2YXIgUz0zRHUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbbV0p O3JldHVybiBTLmVudGVyKCkuPQphcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYt bm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXg9CnQtYW5jaG9yIiwibWlkZGxl IiksUy5hdHRyKCJ4IixpLmxlZnQreS8yKS5hdHRyKCJ5IixpLnRvcCtFLzIpLnRleHQoZnVuY3Rp bz0KbihlKXtyZXR1cm4gZX0pLHd9dS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxk PTNEdC54U2NhbGUoKSx2PTNEdC55PQpTY2FsZSgpLmNsYW1wKCEwKTt2YXIgVD0zRHUuc2VsZWN0 QWxsKCJnLm52LXdyYXAubnYtZGlzY3JldGVCYXJXaXRoQXhlcyIpLmQ9CmF0YShbZV0pLE49M0RU LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3Jl dGVCYT0KcldpdGhBeGVzIikuYXBwZW5kKCJnIiksQz0zRE4uYXBwZW5kKCJkZWZzIiksaz0zRFQu c2VsZWN0KCJnIik7Ti5hcHBlbmQoImciPQopLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiks Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLmE9CnBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi16ZXJvTGluZSIpLmFwcGVuZCgibGluZSIpLE4uYXBwZW5kKCJnIiku YXR0cigiYz0KbGFzcyIsIm52LWJhcnNXcmFwIiksay5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoIitpLmxlZnQrIiwiK2kudG9wKyIpIiksPQpsJiZrLnNlbGVjdCgiLm52LXkubnYtYXhpcyIp LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiwwKSIpLHQud2lkdGg9Cih5KS5oZWln aHQoRSk7dmFyIEw9M0RrLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVu Y3Rpb24oZSl7cj0KZXR1cm4hZS5kaXNhYmxlZH0pKTtMLmNhbGwodCksQy5hcHBlbmQoImNsaXBQ YXRoIikuYXR0cigiaWQiLCJudi14LWxhYmVsLWNsPQppcC0iK3QuaWQoKSkuYXBwZW5kKCJyZWN0 Iiksay5zZWxlY3QoIiNudi14LWxhYmVsLWNsaXAtIit0LmlkKCkrIiByZWN0IikuYXQ9CnRyKCJ3 aWR0aCIsZC5yYW5nZUJhbmQoKSooYz8yOjEpKS5hdHRyKCJoZWlnaHQiLDE2KS5hdHRyKCJ4Iiwt ZC5yYW5nZUJhbmQoKT0KLyhjPzE6MikpO2lmKGEpe24uc2NhbGUoZCkudGlja3MoeS8xMDApLnRp Y2tTaXplKC1FLDApLGsuc2VsZWN0KCIubnYteC5udi1hPQp4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoMCwiKyh2LnJhbmdlKClbMF0rKHQuc2hvd1ZhbHVlcygpJiZ2LmRvbWE9Cmlu KClbMF08MD8xNjowKSkrIikiKSxrLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobik7dmFy IEE9M0RrLnNlbGVjdCgiLj0KbnYteC5udi1heGlzIikuc2VsZWN0QWxsKCJnIik7YyYmQS5zZWxl Y3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0PQppb24oZSx0LG4pe3JldHVybiJ0 cmFuc2xhdGUoMCwiKyhuJTI9M0Q9M0QwPyI1IjoiMTciKSsiKSJ9KX1mJiYoci5zY2FsZSh2KS49 CnRpY2tzKEUvMzYpLnRpY2tTaXplKC15LDApLGsuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2Fs bChyKSksay5zZWxlY3QoIi5udj0KLXplcm9MaW5lIGxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigi eDIiLHkpLmF0dHIoInkxIix2KDApKS5hdHRyKCJ5MiIsdigwKSksPQpnLm9uKCJ0b29sdGlwU2hv dyIsZnVuY3Rpb24oZSl7aCYmYihlLHAucGFyZW50Tm9kZSl9KX0pLHd9dmFyIHQ9M0RlLm1vZGVs cy49CmRpc2NyZXRlQmFyKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhpcygp LGk9M0R7dG9wOjE1LHJpZ2h0OjEwLD0KYm90dG9tOjUwLGxlZnQ6NjB9LHM9M0RudWxsLG89M0Ru dWxsLHU9M0RlLnV0aWxzLmdldENvbG9yKCksYT0zRCEwLGY9M0QhMCxsPQo9M0QhMSxjPTNEITEs aD0zRCEwLHA9M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+Iit0KyI8L2gzPiIrIjxw PiIrbis9CiI8L3A+In0sZCx2LG09M0QiTm8gRGF0YSBBdmFpbGFibGUuIixnPTNEZDMuZGlzcGF0 Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcD0KSGlkZSIsImJlZm9yZVVwZGF0ZSIpLHk9M0QwO24u b3JpZW50KCJib3R0b20iKS5oaWdobGlnaHRaZXJvKCExKS5zaG93TWF4TWluPQooITEpLnRpY2tG b3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudChsPyJyaWdodCI6ImxlZnQiKS50 aWNrRm9ybWE9CnQoZDMuZm9ybWF0KCIsLjFmIikpO3ZhciBiPTNEZnVuY3Rpb24oaSxzKXt2YXIg bz0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fD0KMCksdT0zRGkucG9zWzFdKyhzLm9mZnNldFRv cHx8MCksYT0zRG4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluPQpkZXgpKSxm PTNEci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPTNEcChpLnNl cmllcy5rZXksYSw9CmYsaSx3KTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8ibiI6 InMiLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLj0Kb24oImVsZW1lbnRNb3VzZW92ZXIudG9v bHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0raS5sZWZ0LGUucG9zWzFdPQoraS50 b3BdLGcudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9v bHRpcCIsZnVuY3Rpb249CihlKXtnLnRvb2x0aXBIaWRlKGUpfSksZy5vbigidG9vbHRpcEhpZGUi LGZ1bmN0aW9uKCl7aCYmZS50b29sdGlwLmNsZWFudXAoKT0KfSksdy5kaXNwYXRjaD0zRGcsdy5k aXNjcmV0ZWJhcj0zRHQsdy54QXhpcz0zRG4sdy55QXhpcz0zRHIsZDMucmViaW5kKHcsdCwiPQp4 IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9y Y2VZIiwiaWQiLCJzaG93VmE9Cmx1ZXMiLCJ2YWx1ZUZvcm1hdCIpLHcub3B0aW9ucz0zRGUudXRp bHMub3B0aW9uc0Z1bmMuYmluZCh3KSx3Lm1hcmdpbj0zRGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGkudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9w PQo6aS50b3AsaS5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6 aS5yaWdodCxpLmJvdHRvbT0zRHQ9CnlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90 dG9tOmkuYm90dG9tLGkubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEIj0KdW5kZWZpbmVkIj9lLmxl ZnQ6aS5sZWZ0LHcpOml9LHcud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0PQpoPyhzPTNEZSx3KTpzfSx3LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhvPTNEZSx3KTpvfSw9CncuY29sb3I9M0RmdW5jdGlvbihuKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8odT0zRGUudXRpbHMuZ2V0Q29sb3IobiksdC5jbz0KbG9yKHUpLHcpOnV9 LHcuc2hvd1hBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0Rl LHcpOmF9PQosdy5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZj0zRGUsdyk6Zn0sdy5yaWdodEFsaWc9Cm5ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhsPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZj0KdCIpLHcpOmx9 LHcuc3RhZ2dlckxhYmVscz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhj PTNEZSx3KTpjPQp9LHcudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaD0zRGUsdyk6aH0sdy50b29sdGlwQ289Cm50ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHcpOnB9LHcubm9EYXRhPTNEZnVuY3Rpbz0KbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsdyk6bX0sdy50cmFuc2l0aW9uRHVyYXRpb249 M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSx3KTp5fSx3fSxl Lm1vZGVscy5kaXN0cmlidXRpb249M0RmdW5jdGlvbig9Cil7ZnVuY3Rpb24gbChlKXtyZXR1cm4g ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPTNEbi0oaT0zRD0zRD0zRCJ4Ij90LmxlZnQrdD0KLnJp Z2h0OnQudG9wK3QuYm90dG9tKSxsPTNEaT0zRD0zRCJ4Ij8ieSI6IngiLGM9M0RkMy5zZWxlY3Qo dGhpcyk7Zj0zRGZ8fHU7PQp2YXIgaD0zRGMuc2VsZWN0QWxsKCJnLm52LWRpc3RyaWJ1dGlvbiIp LmRhdGEoW2VdKSxwPTNEaC5lbnRlcigpLmFwcGVuZCgiZyI9CikuYXR0cigiY2xhc3MiLCJudmQz IG52LWRpc3RyaWJ1dGlvbiIpLGQ9M0RwLmFwcGVuZCgiZyIpLHY9M0RoLnNlbGVjdCgiZyIpOz0K aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFy IG09M0R2LnNlbGVjdEFsbCgiPQpnLm52LWRpc3QiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBl fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KTttLmVudGVyKCk9Ci5hcHBlbmQoImciKSxtLmF0 dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0IG52LXNlcmllcy0iK3R9KS5z dD0KeWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0KX0pO3ZhciBnPTNEbS5z ZWxlY3RBbGwoImxpbmUubnYtZGlzPQp0IitpKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZh bHVlc30pO2cuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRyKGkrIjE9CiIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZihzKGUsdCkpfSkuYXR0cihpKyIyIixmdW5jdGlvbihlLHQpe3JldHVybiBmKHMo ZSx0KT0KKX0pLG0uZXhpdCgpLnNlbGVjdEFsbCgibGluZS5udi1kaXN0IitpKS5hdHRyKGkrIjEi LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoPQpzKGUsdCkpfSkuYXR0cihpKyIyIixmdW5jdGlvbihl LHQpe3JldHVybiB1KHMoZSx0KSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHk9CiIsMCkucmVtb3Zl KCksZy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZGlzdCIraSsiIG52LWRp c3QiK2krIj0KLSIrdH0pLmF0dHIobCsiMSIsMCkuYXR0cihsKyIyIixyKSxnLmF0dHIoaSsiMSIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsPQp0KSl9KS5hdHRyKGkrIjIiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIHUocyhlLHQpKX0pLGY9M0R1LmNvcHkoKX0pLGx9dmFyIHQ9M0Q9Cnt0b3A6MCxy aWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0zRDQwMCxyPTNEOCxpPTNEIngiLHM9M0RmdW5jdGlv bihlKXtyZXR1cj0KbiBlW2ldfSxvPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSx1PTNEZDMuc2Nh bGUubGluZWFyKCksYSxmO3JldHVybiBsLm9wdGlvPQpucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMu YmluZChsKSxsLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGU9Cm5ndGg/ KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9 M0R0eXBlb2YgZS5yaT0KZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRv bT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkPQoiP2UuYm90dG9tOnQuYm90dG9tLHQu bGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxsKTo9CnR9 LGwud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsbCk6 bn0sbC5heGlzPTNEZnVuYz0KdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs bCk6aX0sbC5zaXplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8ocj0z RGUsbCk6cn0sbC5nZXREYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9 Cj8ocz0zRGQzLmZ1bmN0b3IoZSksbCk6c30sbC5zY2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh1PQo9M0RlLGwpOnV9LGwuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUudXRpbHMuZ2V0Q289Cmxvcih0KSxsKTpvfSxsfSxl Lm1vZGVscy5oaXN0b3JpY2FsQmFyQ2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIHgoZSl7cmV0 dT0Kcm4gZS5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBFPTNEZDMuc2VsZWN0KHRoaXMpLFQ9M0R0aGlz LE49M0QodXx8cGFyc2VJbnQoRS5zPQp0eWxlKCJ3aWR0aCIpKXx8OTYwKS1zLmxlZnQtcy5yaWdo dCxDPTNEKGF8fHBhcnNlSW50KEUuc3R5bGUoImhlaWdodCIpKXx8NDA9CjApLXMudG9wLXMuYm90 dG9tO3gudXBkYXRlPTNEZnVuY3Rpb24oKXtFLmNhbGwoeCl9LHguY29udGFpbmVyPTNEdGhpcyxn LmRpcz0KYWJsZWQ9M0RkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigh eSl7dmFyIGs7eT0zRHt9O2ZvcihrIGluPQogZylnW2tdaW5zdGFuY2VvZiBBcnJheT95W2tdPTNE Z1trXS5zbGljZSgwKTp5W2tdPTNEZ1trXX1pZighZHx8IWQubGVuZ3RofHw9CiFkLmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgTD0zREUuc2Vs ZWN0QWxsKD0KIi5udi1ub0RhdGEiKS5kYXRhKFtiXSk7cmV0dXJuIEwuZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgPQpudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2Vt Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTC5hdHRyKCJ4IixzLmw9CmVmdCtOLzIp LmF0dHIoInkiLHMudG9wK0MvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHh9RS5zZWxl Y3RBbGwoIi5udj0KLW5vRGF0YSIpLnJlbW92ZSgpLHY9M0R0LnhTY2FsZSgpLG09M0R0LnlTY2Fs ZSgpO3ZhciBBPTNERS5zZWxlY3RBbGwoImcubnYtPQp3cmFwLm52LWhpc3RvcmljYWxCYXJDaGFy dCIpLmRhdGEoW2RdKSxPPTNEQS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXM9CnMiLCJu dmQzIG52LXdyYXAgbnYtaGlzdG9yaWNhbEJhckNoYXJ0IikuYXBwZW5kKCJnIiksTT0zREEuc2Vs ZWN0KCJnIik7Ty5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTy5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtPQpheGlzIiksTy5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksTy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyI9Ciwi bnYtbGVnZW5kV3JhcCIpLGYmJihpLndpZHRoKE4pLE0uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIp LmRhdHVtKGQpLmNhbGwoaT0KKSxzLnRvcCE9M0RpLmhlaWdodCgpJiYocy50b3A9M0RpLmhlaWdo dCgpLEM9M0QoYXx8cGFyc2VJbnQoRS5zdHlsZSgiaGVpZ2h0PQoiKSl8fDQwMCktcy50b3Atcy5i b3R0b20pLEEuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW49 CnNsYXRlKDAsIisgLXMudG9wKyIpIikpLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr cy5sZWZ0KyIsIitzLnRvcCsiKT0KIiksaCYmTS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitOKyIsMCkiKSx0LndpPQpkdGgoTikuaGVpZ2h0KEMp LmNvbG9yKGQubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG8oZSx0KX0pLmZpbHRl cig9CmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWRbdF0uZGlzYWJsZWR9KSk7dmFyIF89M0RNLnNlbGVj dCgiLm52LWJhcnNXcmFwIikuZGF0dT0KbShkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5k aXNhYmxlZH0pKTtfLmNhbGwodCksbCYmKG4uc2NhbGUodikudGlja1NpPQp6ZSgtQywwKSxNLnNl bGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrbS5y YW5nZSg9CilbMF0rIikiKSxNLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobikpLGMmJihy LnNjYWxlKG0pLnRpY2tzKEMvMzYpLnRpYz0Ka1NpemUoLU4sMCksTS5zZWxlY3QoIi5udi15Lm52 LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsPQpmdW5jdGlvbih0 LG4pe3QuZGlzYWJsZWQ9M0QhdC5kaXNhYmxlZCxkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmw9CmVkfSkubGVuZ3RofHxkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxl ZD0zRCExLEEuc2VsZWN0QWxsKCIubnYtc2VyaT0KZXMiKS5jbGFzc2VkKCJkaXNhYmxlZCIsITEp LGV9KSxnLmRpc2FibGVkPTNEZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpPQpzYWJsZWR9 KSx3LnN0YXRlQ2hhbmdlKGcpLGUuY2FsbCh4KX0pLGkuZGlzcGF0Y2gub24oImxlZ2VuZERibGNs aWNrIixmdW5jdGk9Cm9uKGUpe2QuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPTNEITB9 KSxlLmRpc2FibGVkPTNEITEsZy5kaXNhYmxlZD0zRD0KZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu ISFlLmRpc2FibGVkfSksdy5zdGF0ZUNoYW5nZShnKSx4LnVwZGF0ZSgpfSksdy5vbigiPQp0b29s dGlwU2hvdyIsZnVuY3Rpb24oZSl7cCYmUyhlLFQucGFyZW50Tm9kZSl9KSx3Lm9uKCJjaGFuZ2VT dGF0ZSIsZnVuY3Rpb249CihlKXt0eXBlb2YgZS5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGQu Zm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGlzYWJsZWQ9Cj0zRGUuZGlzYWJsZWRbbl19KSxnLmRp c2FibGVkPTNEZS5kaXNhYmxlZCkseC51cGRhdGUoKX0pfSkseH12YXIgdD0zRGUubW9kZT0KbHMu aGlzdG9yaWNhbEJhcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxp PTNEZS5tb2RlbHMubGVnPQplbmQoKSxzPTNEe3RvcDozMCxyaWdodDo5MCxib3R0b206NTAsbGVm dDo5MH0sbz0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksdT0KPTNEbnVsbCxhPTNEbnVsbCxmPTNE ITEsbD0zRCEwLGM9M0QhMCxoPTNEITEscD0zRCEwLGQ9M0RmdW5jdGlvbihlLHQsbixyLGkpPQp7 cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sdixtLGc9M0R7 fSx5PTNEbnVsbCxiPTNEIk49Cm8gRGF0YSBBdmFpbGFibGUuIix3PTNEZDMuZGlzcGF0Y2goInRv b2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZT0KIiwiY2hhbmdlU3RhdGUiKSxF PTNEMDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllbnQoaD8icmlnaHQi PQo6ImxlZnQiKTt2YXIgUz0zRGZ1bmN0aW9uKGkscyl7aWYocyl7dmFyIG89M0RkMy5zZWxlY3Qo cykuc2VsZWN0KCJzdmciKSx1PQo9M0RvLm5vZGUoKT9vLmF0dHIoInZpZXdCb3giKTpudWxsO2lm KHUpe3U9M0R1LnNwbGl0KCIgIik7dmFyIGE9M0RwYXJzZUludCg9Cm8uc3R5bGUoIndpZHRoIikp L3VbMl07aS5wb3NbMF09M0RpLnBvc1swXSphLGkucG9zWzFdPTNEaS5wb3NbMV0qYX19dmFyIGY9 Cj0zRGkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLGw9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8 fDApLGM9M0RuLnRpY2tGb3JtYT0KdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksaD0z RHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluPQpkZXgpKSxwPTNEZChpLnNl cmllcy5rZXksYyxoLGkseCk7ZS50b29sdGlwLnNob3coW2YsbF0scCxudWxsLG51bGwscyl9O3Jl dHU9CnJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24o ZSl7ZS5wb3M9M0RbZS5wb3NbMF0rcz0KLmxlZnQsZS5wb3NbMV0rcy50b3BdLHcudG9vbHRpcFNo b3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vPQpsdGlwIixmdW5jdGlv bihlKXt3LnRvb2x0aXBIaWRlKGUpfSksdy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7cCYm ZS50b289Cmx0aXAuY2xlYW51cCgpfSkseC5kaXNwYXRjaD0zRHcseC5iYXJzPTNEdCx4LmxlZ2Vu ZD0zRGkseC54QXhpcz0zRG4seC55QXhpcz0KPTNEcixkMy5yZWJpbmQoeCx0LCJkZWZpbmVkIiwi aXNBcmVhIiwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwieERvPQptYWluIiwieURv bWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwi Y2xpcEVkZ2U9CiIsImNsaXBWb3Jvbm9pIiwiaWQiLCJpbnRlcnBvbGF0ZSIsImhpZ2hsaWdodFBv aW50IiwiY2xlYXJIaWdobGlnaHRzIiwiaW50ZT0KcmFjdGl2ZSIpLHgub3B0aW9ucz0zRGUudXRp bHMub3B0aW9uc0Z1bmMuYmluZCh4KSx4Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JlPQp0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KHMudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9w OnMudG9wLHMucmk9CmdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6 cy5yaWdodCxzLmJvdHRvbT0zRHR5cGVvZiBlLmJvdD0KdG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90 dG9tOnMuYm90dG9tLHMubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/PQplLmxl ZnQ6cy5sZWZ0LHgpOnN9LHgud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8odT0zRGUseCk9Cjp1fSx4LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhhPTNEZSx4KTphfSx4LmNvbG9yPTNEZj0KdW5jdGlvbih0KXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obz0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihvKSx4KTpvPQp9 LHguc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNE ZSx4KTpmfSx4LnNob3dYQXg9CmlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGw9M0RlLHgpOmx9LHguc2hvd1lBeGlzPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oYz0zRGUseCk6Y30seC5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlvbihlKXty PQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQi KSx4KTpofSx4LnRvb2x0aXBzPQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8ocD0zRGUseCk6cH0seC50b29sdGlwQ29udGVudD0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGQ9M0RlLHgpOmR9LHguc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YT0Kcmd1bWVudHMubGVuZ3RoPyhnPTNEZSx4KTpnfSx4LmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMuPQpsZW5ndGg/KHk9M0RlLHgpOnl9LHgubm9EYXRhPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9M0RlLHg9Cik6Yn0seC50cmFuc2l0 aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUs eCk6RT0KfSx4fSxlLm1vZGVscy5pbmRlbnRlZFRyZWU9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGco ZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvPQpuKGUpe2Z1bmN0aW9uIGsoZSx0LG4pe2QzLmV2ZW50 LnN0b3BQcm9wYWdhdGlvbigpO2lmKGQzLmV2ZW50LnNoaWZ0S2V5JiYhbik9CnJldHVybiBkMy5l dmVudC5zaGlmdEtleT0zRCExLGUudmFsdWVzJiZlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUp eyhlLnZhbD0KdWVzfHxlLl92YWx1ZXMpJiZrKGUsMCwhMCl9KSwhMDtpZighTyhlKSlyZXR1cm4h MDtlLnZhbHVlcz8oZS5fdmFsdWVzPTNEZS52PQphbHVlcyxlLnZhbHVlcz0zRG51bGwpOihlLnZh bHVlcz0zRGUuX3ZhbHVlcyxlLl92YWx1ZXM9M0RudWxsKSxnLnVwZGF0ZSgpfWY9CnVuY3Rpb24g TChlKXtyZXR1cm4gZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RoP2g6ZS52YWx1ZXMmJmUudmFs dWVzLmxlbmd0aD0KP3A6IiJ9ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS5fdmFsdWVzJiZlLl92YWx1 ZXMubGVuZ3RofWZ1bmN0aW9uIE8oZSl7dmFyIHQ9Cj0zRGUudmFsdWVzfHxlLl92YWx1ZXM7cmV0 dXJuIHQmJnQubGVuZ3RofXZhciB0PTNEMSxuPTNEZDMuc2VsZWN0KHRoaXMpLGk9Cj0zRGQzLmxh eW91dC50cmVlKCkuY2hpbGRyZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkuc2l6ZShb cixmXSk7Zy51cD0KZGF0ZT0zRGZ1bmN0aW9uKCl7bi5jYWxsKGcpfSxlWzBdfHwoZVswXT0zRHtr ZXk6YX0pO3ZhciBzPTNEaS5ub2RlcyhlWzBdKSx5PQo9M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0 QWxsKCJkaXYiKS5kYXRhKFtbc11dKSxiPTNEeS5lbnRlcigpLmFwcGVuZCgiZGl2Iik9Ci5hdHRy KCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1pbmRlbnRlZHRyZWUiKSx3PTNEYi5hcHBlbmQoInRh YmxlIiksRT0zRHkucz0KZWxlY3QoInRhYmxlIikuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigi Y2xhc3MiLGMpO2lmKG8pe3ZhciBTPTNEdy5hcHBlbmQoPQoidGhlYWQiKSx4PTNEUy5hcHBlbmQo InRyIik7bC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3guYXBwZW5kKCJ0aCIpLmF0dHIoIndpZHQ9Cmgi LGUud2lkdGg/ZS53aWR0aDoiMTAlIikuc3R5bGUoInRleHQtYWxpZ24iLGUudHlwZT0zRD0zRCJu dW1lcmljIj8icmlnaHQiOj0KImxlZnQiKS5hcHBlbmQoInNwYW4iKS50ZXh0KGUubGFiZWwpfSl9 dmFyIFQ9M0RFLnNlbGVjdEFsbCgidGJvZHkiKS5kYXRhKGZ1PQpuY3Rpb24oZSl7cmV0dXJuIGV9 KTtULmVudGVyKCkuYXBwZW5kKCJ0Ym9keSIpLHQ9M0RkMy5tYXgocyxmdW5jdGlvbihlKXtyZXQ9 CnVybiBlLmRlcHRofSksaS5zaXplKFtyLHQqZl0pO3ZhciBOPTNEVC5zZWxlY3RBbGwoInRyIiku ZGF0YShmdW5jdGlvbihlKXtyZT0KdHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdSYm IWUuY2hpbGRyZW4/dShlKTohMH0pfSxmdW5jdGlvbihlLHQpe3JlPQp0dXJuIGUuaWR8fGUuaWR8 fCsrbX0pO04uZXhpdCgpLnJlbW92ZSgpLE4uc2VsZWN0KCJpbWcubnYtdHJlZWljb24iKS5hdHRy KCI9CnNyYyIsTCkuY2xhc3NlZCgiZm9sZGVkIixBKTt2YXIgQz0zRE4uZW50ZXIoKS5hcHBlbmQo InRyIik7bC5mb3JFYWNoKGZ1bmN0aT0Kb24oZSx0KXt2YXIgbj0zREMuYXBwZW5kKCJ0ZCIpLnN0 eWxlKCJwYWRkaW5nLWxlZnQiLGZ1bmN0aW9uKGUpe3JldHVybih0PzA6PQplLmRlcHRoKmYrMTIr KEwoZSk/MDoxNikpKyJweCJ9LCJpbXBvcnRhbnQiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50eXBl PTNEPQo9M0QibnVtZXJpYyI/InJpZ2h0IjoibGVmdCIpO3Q9M0Q9M0QwJiZuLmFwcGVuZCgiaW1n IikuY2xhc3NlZCgibnYtdHJlZWljb249CiIsITApLmNsYXNzZWQoIm52LWZvbGRlZCIsQSkuYXR0 cigic3JjIixMKS5zdHlsZSgid2lkdGgiLCIxNHB4Iikuc3R5bGUoImhlaT0KZ2h0IiwiMTRweCIp LnN0eWxlKCJwYWRkaW5nIiwiMCAxcHgiKS5zdHlsZSgiZGlzcGxheSIsZnVuY3Rpb24oZSl7cmV0 dXJuIEwoPQplKT8iaW5saW5lLWJsb2NrIjoibm9uZSJ9KS5vbigiY2xpY2siLGspLG4uZWFjaChm dW5jdGlvbihuKXshdCYmdihuKT9kMy5zZWw9CmVjdCh0aGlzKS5hcHBlbmQoImEiKS5hdHRyKCJo cmVmIix2KS5hdHRyKCJjbGFzcyIsZDMuZnVuY3RvcihlLmNsYXNzZXMpKS5hcD0KcGVuZCgic3Bh biIpOmQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoInNwYW4iKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0 KCJzcGFuIikuPQphdHRyKCJjbGFzcyIsZDMuZnVuY3RvcihlLmNsYXNzZXMpKS50ZXh0KGZ1bmN0 aW9uKHQpe3JldHVybiBlLmZvcm1hdD90W2Uua2U9CnldP2UuZm9ybWF0KHRbZS5rZXldKToiLSI6 dFtlLmtleV18fCItIn0pfSksZS5zaG93Q291bnQmJihuLmFwcGVuZCgic3BhbiIpLj0KYXR0cigi Y2xhc3MiLCJudi1jaGlsZHJlbkNvdW50IiksTi5zZWxlY3RBbGwoInNwYW4ubnYtY2hpbGRyZW5D b3VudCIpLnRleHQoPQpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMmJmUudmFsdWVzLmxlbmd0 aHx8ZS5fdmFsdWVzJiZlLl92YWx1ZXMubGVuZ3RoPyI9CigiKyhlLnZhbHVlcyYmZS52YWx1ZXMu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8fGUuX3ZhbD0KdWVz JiZlLl92YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8 fDApKyIpIjoiIn0pKX0pPQosTi5vcmRlcigpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7ZC5lbGVt ZW50Q2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCw9CmUueV19KX0pLm9uKCJkYmxjbGlj ayIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50RGJsY2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6Wz0K ZS54LGUueV19KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3Zl cih7cm93OnRoaXMsZGF0YTplPQoscG9zOltlLngsZS55XX0pfSkub24oIm1vdXNlb3V0IixmdW5j dGlvbihlKXtkLmVsZW1lbnRNb3VzZW91dCh7cm93OnRoaXMsZGE9CnRhOmUscG9zOltlLngsZS55 XX0pfSl9KSxnfXZhciB0PTNEe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNEOTYw LD0Kcj0zRDUwMCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxzPTNETWF0aC5mbG9vcihNYXRo LnJhbmRvbSgpKjFlNCksbz0zRCEwPQosdT0zRCExLGE9M0QiTm8gRGF0YSBBdmFpbGFibGUuIixm PTNEMjAsbD0zRFt7a2V5OiJrZXkiLGxhYmVsOiJOYW1lIix0eXBlOiI9CnRleHQifV0sYz0zRG51 bGwsaD0zRCJpbWFnZXMvZ3JleS1wbHVzLnBuZyIscD0zRCJpbWFnZXMvZ3JleS1taW51cy5wbmci LGQ9Cj0zRGQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsY2xpY2siLCJlbGVt ZW50TW91c2VvdmVyIiwiZWxlbWVudD0KTW91c2VvdXQiKSx2PTNEZnVuY3Rpb24oZSl7cmV0dXJu IGUudXJsfSxtPTNEMDtyZXR1cm4gZy5vcHRpb25zPTNEZS51dGlscy5vPQpwdGlvbnNGdW5jLmJp bmQoZyksZy5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50 b3A9M0Q9CnR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaT0KbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206dC5iPQpvdHRvbSx0Lmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53 aWR0aD0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0RlLGcpOm59 LGcuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUs Zyk6cn0sZy5jb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuPQpndGg/KGk9 M0RlLnV0aWxzLmdldENvbG9yKHQpLHNjYXR0ZXIuY29sb3IoaSksZyk6aX0sZy5pZD0zRGZ1bmN0 aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLGcpOnN9LGcuaGVhZGVyPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8obz0zRGUsZyk6b30sZy5ub0Rh dGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsZyk6PQphfSxn LmZpbHRlclplcm89M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUs Zyk6dX0sZy5jb2x1bW49CnM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o bD0zRGUsZyk6bH0sZy50YWJsZUNsYXNzPTNEZnVuY3Rpbz0KbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oYz0zRGUsZyk6Y30sZy5pY29uT3Blbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpy Z3VtZW50cy5sZW5ndGg/KGg9M0RlLGcpOmh9LGcuaWNvbkNsb3NlPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW49Cmd0aD8ocD0zRGUsZyk6cH0sZy5nZXRVcmw9M0RmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsZyk6dj0KfSxnfSxlLm1vZGVscy5sZWdl bmQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIGMoaCl7cmV0dXJuIGguZWFjaChmdW5jdGlvbihjKXt2 PQphciBoPTNEbi10LmxlZnQtdC5yaWdodCxwPTNEZDMuc2VsZWN0KHRoaXMpLGQ9M0RwLnNlbGVj dEFsbCgiZy5udi1sZWdlbmQiKS49CmRhdGEoW2NdKSx2PTNEZC5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi1sZWdlbmQiKS5hcHBlbmQoIj0KZyIpLG09M0RkLnNlbGVj dCgiZyIpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsi KSIpPQo7dmFyIGc9M0RtLnNlbGVjdEFsbCgiLm52LXNlcmllcyIpLmRhdGEoZnVuY3Rpb24oZSl7 cmV0dXJuIGV9KSx5PTNEZy5lbnRlcig9CikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1z ZXJpZXMiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2wubGVnZT0KbmRNb3VzZW92ZXIo ZSx0KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0KXtsLmxlZ2VuZE1vdXNlb3V0KGUsdCl9 KS5vbigiPQpjbGljayIsZnVuY3Rpb24oZSx0KXtsLmxlZ2VuZENsaWNrKGUsdCksYSYmKGY/KGMu Zm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2E9CmJsZWQ9M0QhMH0pLGUuZGlzYWJsZWQ9M0QhMSk6 KGUuZGlzYWJsZWQ9M0QhZS5kaXNhYmxlZCxjLmV2ZXJ5KGZ1bmN0aW9uKGUpez0KcmV0dXJuIGUu ZGlzYWJsZWR9KSYmYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9M0QhMX0pKSxsLnN0 YXRlQ2hhbmdlPQooe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxl ZH0pfSkpfSkub24oImRibGNsaWNrIixmdW5jdGk9Cm9uKGUsdCl7bC5sZWdlbmREYmxjbGljayhl LHQpLGEmJihjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0zRCEwfSksZT0KLmRpc2Fi bGVkPTNEITEsbC5zdGF0ZUNoYW5nZSh7ZGlzYWJsZWQ6Yy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu ISFlLmRpc2FibGVkPQp9KX0pKX0pO3kuYXBwZW5kKCJjaXJjbGUiKS5zdHlsZSgic3Ryb2tlLXdp ZHRoIiwyKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZC09CnN5bWJvbCIpLmF0dHIoInIiLDUpLHku YXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmF0dHIoImNsYT0Kc3Mi LCJudi1sZWdlbmQtdGV4dCIpLmF0dHIoImR5IiwiLjMyZW0iKS5hdHRyKCJkeCIsIjgiKSxnLmNs YXNzZWQoImRpc2FibGVkPQoiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSksZy5leGl0 KCkucmVtb3ZlKCksZy5zZWxlY3QoImNpcmNsZSIpLnN0eWw9CmUoImZpbGwiLGZ1bmN0aW9uKGUs dCl7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdD0K KXtyZXR1cm4gZS5jb2xvcnx8cyhlLHQpfSksZy5zZWxlY3QoInRleHQiKS50ZXh0KGkpO2lmKG8p e3ZhciBiPTNEW107Zy5lYWNoPQooZnVuY3Rpb24odCxuKXt2YXIgcj0zRGQzLnNlbGVjdCh0aGlz KS5zZWxlY3QoInRleHQiKSxpO3RyeXtpPTNEci5nZXRDb21wdXQ9CmVkVGV4dExlbmd0aCgpO2lm KGk8PTNEMCl0aHJvdyBFcnJvcigpfWNhdGNoKHMpe2k9M0RlLnV0aWxzLmNhbGNBcHByb3hUZXh0 Vz0KaWR0aChyKX1iLnB1c2goaSsyOCl9KTt2YXIgdz0zRDAsRT0zRDAsUz0zRFtdO3doaWxlKEU8 aCYmdzxiLmxlbmd0aClTW3ddPTNEPQpiW3ddLEUrPTNEYlt3KytdO3c9M0Q9M0Q9M0QwJiYodz0z RDEpO3doaWxlKEU+aCYmdz4xKXtTPTNEW10sdy0tO2Zvcih2YXIgeD0KPTNEMDt4PGIubGVuZ3Ro O3grKyliW3hdPihTW3gld118fDApJiYoU1t4JXddPTNEYlt4XSk7RT0zRFMucmVkdWNlKGZ1bmN0 aW9uPQooZSx0LG4scil7cmV0dXJuIGUrdH0pfXZhciBUPTNEW107Zm9yKHZhciBOPTNEMCxDPTNE MDtOPHc7TisrKVRbTl09M0RDLEMrPQo9M0RTW05dO2cuYXR0cigidHJhbnNmb3JtIixmdW5jdGlv bihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitUW3Qld10rIiwiKyg1K009CmF0aC5mbG9vcih0L3cp KjIwKSsiKSJ9KSx1P20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG4tdC5yaWdodC1F KSsiLD0KIit0LnRvcCsiKSIpOm0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIit0LnRv cCsiKSIpLHI9M0R0LnRvcCt0LmJvdHRvPQptK01hdGguY2VpbChiLmxlbmd0aC93KSoyMH1lbHNl e3ZhciBrPTNENSxMPTNENSxBPTNEMCxPO2cuYXR0cigidHJhbnNmb3JtIiw9CmZ1bmN0aW9uKGUs cil7dmFyIGk9M0RkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0Iikubm9kZSgpLmdldENvbXB1 dGVkVGV4dD0KTGVuZ3RoKCkrMjg7cmV0dXJuIE89M0RMLG48dC5sZWZ0K3QucmlnaHQrTytpJiYo TD0zRE89M0Q1LGsrPTNEMjApLEwrPTNEaSxMPQo+QSYmKEE9M0RMKSwidHJhbnNsYXRlKCIrTysi LCIraysiKSJ9KSxtLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLXQ9Ci5yaWdodC1B KSsiLCIrdC50b3ArIikiKSxyPTNEdC50b3ArdC5ib3R0b20raysxNX19KSxjfXZhciB0PTNEe3Rv cDo1LHJpZ2h0Oj0KMCxib3R0b206NSxsZWZ0OjB9LG49M0Q0MDAscj0zRDIwLGk9M0RmdW5jdGlv bihlKXtyZXR1cm4gZS5rZXl9LHM9M0RlLnV0aWxzPQouZGVmYXVsdENvbG9yKCksbz0zRCEwLHU9 M0QhMCxhPTNEITAsZj0zRCExLGw9M0RkMy5kaXNwYXRjaCgibGVnZW5kQ2xpY2siLCI9CmxlZ2Vu ZERibGNsaWNrIiwibGVnZW5kTW91c2VvdmVyIiwibGVnZW5kTW91c2VvdXQiLCJzdGF0ZUNoYW5n ZSIpO3JldHVybiBjLj0KZGlzcGF0Y2g9M0RsLGMub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1 bmMuYmluZChjKSxjLm1hcmdpbj0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQ9Ci5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJv dHRvbT0zRHR5cGVvZiBlLj0KYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9t LHQubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lPQpkIj9lLmxlZnQ6dC5sZWZ0LGMp OnR9LGMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGU9 CixjKTpufSxjLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhy PTNEZSxjKTpyfSxjLmtleT0zRD0KZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGk9M0RlLGMpOml9LGMuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1PQpybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZS51dGlscy5nZXRDb2xvcih0KSxjKTpzfSxjLmFsaWduPTNEZnVuY3Rpb24oZSl7 cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsYyk6b30sYy5yaWdodEFsaWduPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8odT0zRGUsYyk6dX0sYy51cGRhdGVT dGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KGE9M0RlLGMpOmF9 LGMucmFkaW9CdXR0b25Nb2RlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGY9M0Q9CmUsYyk6Zn0sY30sZS5tb2RlbHMubGluZT0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShn KXtyZXR1cm4gZy5lYWNoKGZ1bmN0aW9uKD0KbSl7dmFyIGc9M0RyLW4ubGVmdC1uLnJpZ2h0LGI9 M0RpLW4udG9wLW4uYm90dG9tLHc9M0RkMy5zZWxlY3QodGhpcyk7Yz0zRHQuPQp4U2NhbGUoKSxo PTNEdC55U2NhbGUoKSxkPTNEZHx8Yyx2PTNEdnx8aDt2YXIgRT0zRHcuc2VsZWN0QWxsKCJnLm52 LXdyYXAubnY9Ci1saW5lIikuZGF0YShbbV0pLFM9M0RFLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbD0KaW5lIiksVD0zRFMuYXBwZW5kKCJkZWZzIiks Tj0zRFMuYXBwZW5kKCJnIiksQz0zREUuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciPQopLmF0dHIo ImNsYXNzIiwibnYtZ3JvdXBzIiksTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNjYXR0 ZXJXcmFwIiksRS49CmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ubGVmdCsiLCIrbi50 b3ArIikiKSx0LndpZHRoKGcpLmhlaWdodChiKTt2YT0KciBrPTNERS5zZWxlY3QoIi5udi1zY2F0 dGVyV3JhcCIpO2suY2FsbCh0KSxULmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsPQoibnYt ZWRnZS1jbGlwLSIrdC5pZCgpKS5hcHBlbmQoInJlY3QiKSxFLnNlbGVjdCgiI252LWVkZ2UtY2xp cC0iK3QuaWQoKSsiIHI9CmVjdCIpLmF0dHIoIndpZHRoIixnKS5hdHRyKCJoZWlnaHQiLGI+MD9i OjApLEMuYXR0cigiY2xpcC1wYXRoIixsPyJ1cmwoI252LT0KZWRnZS1jbGlwLSIrdC5pZCgpKyIp IjoiIiksay5hdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlwLSIrdC5pZCgpPQor IikiOiIiKTt2YXIgTD0zREUuc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3Jv dXAiKS5kYXRhKGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtl eX0pO0wuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Rybz0Ka2Utb3BhY2l0eSIsMWUtNiku c3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksTC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJjbGFz PQpzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3Nl ZCgiaG92ZXIiLGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGUuaG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQpfSkuc3R5bGUoInN0cm9rZT0KIixmdW5jdGlvbihlLHQp e3JldHVybiBzKGUsdCl9KSxMLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwt b3BhPQpjaXR5IiwuNSk7dmFyIEE9M0RMLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGF0YShm dW5jdGlvbihlKXtyZXR1cm4gZihlKT89CltlXTpbXX0pO0EuZW50ZXIoKS5hcHBlbmQoInBhdGgi KS5hdHRyKCJjbGFzcyIsIm52LWFyZWEiKS5hdHRyKCJkIixmdW5jdGlvbj0KKHQpe3JldHVybiBk My5zdmcuYXJlYSgpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3Jl dHVybiBlPQoudXRpbHMuTmFOdG9aZXJvKGQobyh0LG4pKSl9KS55MChmdW5jdGlvbih0LG4pe3Jl dHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHU9Cih0LG4pKSl9KS55MShmdW5jdGlvbihlLHQpe3Jl dHVybiB2KGguZG9tYWluKClbMF08PTNEMD9oLmRvbWFpbigpWzFdPj0zRDA/MD0KOmguZG9tYWlu KClbMV06aC5kb21haW4oKVswXSl9KS5hcHBseSh0aGlzLFt0LnZhbHVlc10pfSksTC5leGl0KCku c2VsZWN0QWxsPQooInBhdGgubnYtYXJlYSIpLnJlbW92ZSgpLEEuYXR0cigiZCIsZnVuY3Rpb24o dCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50ZXI9CnBvbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVu Y3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oYyhvKHQsbikpKX0pLj0KeTAoZnVu Y3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oaCh1KHQsbikpKX0pLnkxKGZ1bmN0 aW9uKGUsdCl7cmV0PQp1cm4gaChoLmRvbWFpbigpWzBdPD0zRDA/aC5kb21haW4oKVsxXT49M0Qw PzA6aC5kb21haW4oKVsxXTpoLmRvbWFpbigpWzBdKX09CikuYXBwbHkodGhpcyxbdC52YWx1ZXNd KX0pO3ZhciBPPTNETC5zZWxlY3RBbGwoInBhdGgubnYtbGluZSIpLmRhdGEoZnVuY3Rpbz0Kbihl KXtyZXR1cm5bZS52YWx1ZXNdfSk7Ty5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNz IiwibnYtbGluZSIpLmF0PQp0cigiZCIsZDMuc3ZnLmxpbmUoKS5pbnRlcnBvbGF0ZShwKS5kZWZp bmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGk9CmxzLk5hTnRvWmVybyhkKG8odCxu KSkpfSkueShmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHUodCxuKT0K KSl9KSksTy5hdHRyKCJkIixkMy5zdmcubGluZSgpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSku eChmdW5jdGlvbih0LG4pe3JlPQp0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGMobyh0LG4pKSl9KS55 KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXI9Cm8oaCh1KHQsbikpKX0pKSxk PTNEYy5jb3B5KCksdj0zRGguY29weSgpfSksbX12YXIgdD0zRGUubW9kZWxzLnNjYXR0ZXIoKSxu PQo9M0R7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHI9M0Q5NjAsaT0zRDUwMCxzPTNE ZS51dGlscy5kZWZhdWx0Q29sb3I9CigpLG89M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSx1PTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYT0zRGZ1bmN0aW9uKGUsdD0KKXtyZXR1cm4haXNOYU4o dShlLHQpKSYmdShlLHQpIT0zRD0zRG51bGx9LGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmVh fSxsPQo9M0QhMSxjLGgscD0zRCJsaW5lYXIiO3Quc2l6ZSgxNikuc2l6ZURvbWFpbihbMTYsMjU2 XSk7dmFyIGQsdjtyZXR1cm4gbS5kaXM9CnBhdGNoPTNEdC5kaXNwYXRjaCxtLnNjYXR0ZXI9M0R0 LGQzLnJlYmluZChtLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJzaXplIiwieD0KU2NhbGUiLCJ5U2Nh bGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVE b21haW4iPQosImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwidXNl Vm9yb25vaSIsImNsaXBSYWRpdXMiLCJwYWQ9CkRhdGEiLCJoaWdobGlnaHRQb2ludCIsImNsZWFy SGlnaGxpZ2h0cyIpLG0ub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYj0KaW5kKG0pLG0u bWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPTNEdHlw ZW9mIGUudG9wPQohPTNEInVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdodD0zRHR5cGVvZiBl LnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ9CjpuLnJpZ2h0LG4uYm90dG9tPTNEdHlwZW9m IGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOm4uYm90dG9tLG4ubGVmdD0KPTNEdHlw ZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6bi5sZWZ0LG0pOm59LG0ud2lkdGg9M0Rm dW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxtKTpyfSxtLmhlaWdo dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGk9M0RlLG0pOml9LG0u eD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSx0LngoZT0KKSxt KTpvfSxtLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsdC55 KGUpLG0pOnV9LG0uY2xpPQpwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhsPTNEZSxtKTpsfSxtLmNvbG9yPTNEZnVuY3Rpb249CihuKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8ocz0zRGUudXRpbHMuZ2V0Q29sb3IobiksdC5jb2xvcihzKSxtKTpzfSxtLmludD0K ZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsbSk6 cH0sbS5kZWZpbmVkPTNEZnVuPQpjdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0z RGUsbSk6YX0sbS5pc0FyZWE9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3Ro PyhmPTNEZDMuZnVuY3RvcihlKSxtKTpmfSxtfSxlLm1vZGVscy5saW5lQ2hhcnQ9M0RmdW5jdGlv bj0KKCl7ZnVuY3Rpb24gTihtKXtyZXR1cm4gbS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciB4PTNEZDMu c2VsZWN0KHRoaXMpLEM9M0R0aGlzPQosaz0zRChhfHxwYXJzZUludCh4LnN0eWxlKCJ3aWR0aCIp KXx8OTYwKS1vLmxlZnQtby5yaWdodCxMPTNEKGZ8fHBhcnNlSW50KHg9Ci5zdHlsZSgiaGVpZ2h0 IikpfHw0MDApLW8udG9wLW8uYm90dG9tO04udXBkYXRlPTNEZnVuY3Rpb24oKXt4LmNhbGwoTil9 LE4uYz0Kb250YWluZXI9M0R0aGlzLGIuZGlzYWJsZWQ9M0RtLm1hcChmdW5jdGlvbihlKXtyZXR1 cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7PQp2YXIgQTt3PTNEe307Zm9yKEEgaW4gYiliW0FdaW5z dGFuY2VvZiBBcnJheT93W0FdPTNEYltBXS5zbGljZSgwKTp3W0FdPTNEYls9CkFdfWlmKCFtfHwh bS5sZW5ndGh8fCFtLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSku bGVuZ3RoKT0Ke3ZhciBPPTNEeC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtFXSk7cmV0 dXJuIE8uZW50ZXIoKS5hcHBlbmQoInRleHQiPQopLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0Rh dGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWk9CmRkbGUiKSxP LmF0dHIoIngiLG8ubGVmdCtrLzIpLmF0dHIoInkiLG8udG9wK0wvMikudGV4dChmdW5jdGlvbihl KXtyZXR1cm4gZT0KfSksTn14LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGc9M0R0 LnhTY2FsZSgpLHk9M0R0LnlTY2FsZSgpO3ZhciBNPQo9M0R4LnNlbGVjdEFsbCgiZy5udi13cmFw Lm52LWxpbmVDaGFydCIpLmRhdGEoW21dKSxfPTNETS5lbnRlcigpLmFwcGVuZCgiZyI9CikuYXR0 cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZUNoYXJ0IikuYXBwZW5kKCJnIiksRD0zRE0u c2VsZWN0KCJnIik7Xz0KLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJvcGFjaXR5IiwwKSxfLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzPQoiKSxfLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYteSBudi1heGlzIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm49CnYt bGluZXNXcmFwIiksXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxf LmFwcGVuZCgiZyIpLmF0dD0KcigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZSIpLEQuc2VsZWN0KCJy ZWN0IikuYXR0cigid2lkdGgiLGspLmF0dHIoImhlaWdodCIsPQpMPjA/TDowKSxsJiYoaS53aWR0 aChrKSxELnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShtKS5jYWxsKGkpLG8udG9wIT0K PTNEaS5oZWlnaHQoKSYmKG8udG9wPTNEaS5oZWlnaHQoKSxMPTNEKGZ8fHBhcnNlSW50KHguc3R5 bGUoImhlaWdodCIpKXx8NDAwPQopLW8udG9wLW8uYm90dG9tKSxNLnNlbGVjdCgiLm52LWxlZ2Vu ZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCw9CiIrIC1vLnRvcCsiKSIpKSxN LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ubGVmdCsiLCIrby50b3ArIikiKSxwJiZE Lj0Kc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr aysiLDApIiksZCYmKHMud2lkdGgoPQprKS5oZWlnaHQoTCkubWFyZ2luKHtsZWZ0Om8ubGVmdCx0 b3A6by50b3B9KS5zdmdDb250YWluZXIoeCkueFNjYWxlKGcpLE0uc2U9CmxlY3QoIi5udi1pbnRl cmFjdGl2ZSIpLmNhbGwocykpLHQud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKG0ubWFwKGZ1bmN0 aW9uKD0KZSx0KXtyZXR1cm4gZS5jb2xvcnx8dShlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIW1bdF0uZGlzYWJsZWR9KSk7PQp2YXIgUD0zREQuc2VsZWN0KCIubnYtbGluZXNXcmFw IikuZGF0dW0obS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWI9CmxlZH0pKTtQLmNh bGwodCksYyYmKG4uc2NhbGUoZykudGlja3Moay8xMDApLnRpY2tTaXplKC1MLDApLEQuc2VsZWN0 KCIubnYteD0KLm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3kucmFu Z2UoKVswXSsiKSIpLEQuc2VsZWN0KCIubnYtPQp4Lm52LWF4aXMiKS5jYWxsKG4pKSxoJiYoci5z Y2FsZSh5KS50aWNrcyhMLzM2KS50aWNrU2l6ZSgtaywwKSxELnNlbGVjdCgiLm49CnYteS5udi1h eGlzIikuY2FsbChyKSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2I9 M0RlLFMuc3RhdD0KZUNoYW5nZShiKSxOLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigiZWxlbWVu dE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhPQpySGlnaGxpZ2h0cygpO3ZhciBhLGYsbCxj PTNEW107bS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD0KPTNEdCwh ZS5kaXNhYmxlZH0pLmZvckVhY2goZnVuY3Rpb24obixyKXtmPTNEZS5pbnRlcmFjdGl2ZUJpc2Vj dChuLnZhbHVlcyxpPQoucG9pbnRYVmFsdWUsTi54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixmLCEw KTt2YXIgcz0zRG4udmFsdWVzW2ZdO2lmKHR5cGVvZiA9CnM9M0Q9M0QidW5kZWZpbmVkIilyZXR1 cm47dHlwZW9mIGE9M0Q9M0QidW5kZWZpbmVkIiYmKGE9M0RzKSx0eXBlb2YgbD0zRD0zRD0KInVu ZGVmaW5lZCImJihsPTNETi54U2NhbGUoKShOLngoKShzLGYpKSksYy5wdXNoKHtrZXk6bi5rZXks dmFsdWU6Ti55KCkocyxmPQopLGNvbG9yOnUobixuLnNlcmllc0luZGV4KX0pfSk7aWYoYy5sZW5n dGg+Mil7dmFyIGg9M0ROLnlTY2FsZSgpLmludmVydChpLm09Cm91c2VZKSxwPTNETWF0aC5hYnMo Ti55U2NhbGUoKS5kb21haW4oKVswXS1OLnlTY2FsZSgpLmRvbWFpbigpWzFdKSxkPTNELjAzKj0K cCxnPTNEZS5uZWFyZXN0VmFsdWVJbmRleChjLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1 ZX0pLGgsZCk7ZyE9M0Q9M0RuPQp1bGwmJihjW2ddLmhpZ2hsaWdodD0zRCEwKX12YXIgeT0zRG4u dGlja0Zvcm1hdCgpKE4ueCgpKGEsZikpO3MudG9vbHRpcC5wb3M9Cml0aW9uKHtsZWZ0Omwrby5s ZWZ0LHRvcDppLm1vdXNlWStvLnRvcH0pLmNoYXJ0Q29udGFpbmVyKEMucGFyZW50Tm9kZSkuZW5h Yj0KbGVkKHYpLnZhbHVlRm9ybWF0dGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIudGlja0Zvcm1h dCgpKGUpfSkuZGF0YSh7dmFsdWU6PQp5LHNlcmllczpjfSkoKSxzLnJlbmRlckd1aWRlTGluZShs KX0pLHMuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dCIsZnVuY3Q9CmlvbihlKXtTLnRvb2x0 aXBIaWRlKCksdC5jbGVhckhpZ2hsaWdodHMoKX0pLFMub24oInRvb2x0aXBTaG93IixmdW5jdGlv bihlKT0Ke3YmJlQoZSxDLnBhcmVudE5vZGUpfSksUy5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9u KGUpe3R5cGVvZiBlLmRpc2FibGVkIT0KPTNEInVuZGVmaW5lZCImJm0ubGVuZ3RoPTNEPTNEPTNE ZS5kaXNhYmxlZC5sZW5ndGgmJihtLmZvckVhY2goZnVuY3Rpb24odCxuPQope3QuZGlzYWJsZWQ9 M0RlLmRpc2FibGVkW25dfSksYi5kaXNhYmxlZD0zRGUuZGlzYWJsZWQpLE4udXBkYXRlKCl9KX0p LE59dmE9CnIgdD0zRGUubW9kZWxzLmxpbmUoKSxuPTNEZS5tb2RlbHMuYXhpcygpLHI9M0RlLm1v ZGVscy5heGlzKCksaT0zRGUubW9kZWxzLj0KbGVnZW5kKCkscz0zRGUuaW50ZXJhY3RpdmVHdWlk ZWxpbmUoKSxvPTNEe3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo2PQowfSx1PTNEZS51 dGlscy5kZWZhdWx0Q29sb3IoKSxhPTNEbnVsbCxmPTNEbnVsbCxsPTNEITAsYz0zRCEwLGg9M0Qh MCxwPTNEITE9CixkPTNEITEsdj0zRCEwLG09M0RmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8 aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ID0KIit0KyI8L3A+In0sZyx5LGI9M0R7fSx3PTNE bnVsbCxFPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsUz0zRGQzLmRpc3BhdGNoKCJ0PQpvb2x0aXBT aG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIikseD0zRDA7bi5v cmllbnQoImJvdHQ9Cm9tIikudGlja1BhZGRpbmcoNyksci5vcmllbnQocD8icmlnaHQiOiJsZWZ0 Iik7dmFyIFQ9M0RmdW5jdGlvbihpLHMpe3ZhciBvPQo9M0RpLnBvc1swXSsocy5vZmZzZXRMZWZ0 fHwwKSx1PTNEaS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPTNEbi50aWNrRm9ybWE9CnQoKSh0 LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9M0RyLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBv aW50LGkucG9pbnRJbj0KZGV4KSksbD0zRG0oaS5zZXJpZXMua2V5LGEsZixpLE4pO2UudG9vbHRp cC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1PQpybiB0LmRpc3BhdGNoLm9uKCJlbGVt ZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK289Ci5s ZWZ0LGUucG9zWzFdK28udG9wXSxTLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxl bWVudE1vdXNlb3V0LnRvbz0KbHRpcCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZShlKX0pLFMu b24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3YmJmUudG9vPQpsdGlwLmNsZWFudXAoKX0pLE4u ZGlzcGF0Y2g9M0RTLE4ubGluZXM9M0R0LE4ubGVnZW5kPTNEaSxOLnhBeGlzPTNEbixOLnlBeGk9 CnM9M0RyLE4uaW50ZXJhY3RpdmVMYXllcj0zRHMsZDMucmViaW5kKE4sdCwiZGVmaW5lZCIsImlz QXJlYSIsIngiLCJ5Iiwic2l6ZT0KIiwieFNjYWxlIiwieVNjYWxlIiwieERvbWFpbiIsInlEb21h aW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiPQosImludGVyYWN0aXZlIiwi Y2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiks Ti49Cm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoTiksTi5tYXJnaW49M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhvLnRvcD0zRHR5cGVvZiBlLnRvcCE9 M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PTNEdHlwZW9mPQogZS5yaWdodCE9M0Qi dW5kZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNE InVuZGU9CmZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0z RCJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZj0KdCxOKTpvfSxOLndpZHRoPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLE4pOmF9LE4uaGVpZ2h0PQo9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsTik6Zn0sTi5jb2xvcj0zRGZ1bmN0 aW9uKHQpe3I9CmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLnV0aWxzLmdldENvbG9yKHQp LGkuY29sb3IodSksTik6dX0sTi5zaG93TGVnZT0KbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obD0zRGUsTik6bH0sTi5zaG93WEF4aXM9M0RmdW5jdGlvPQpuKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxOKTpjfSxOLnNob3dZQXhpcz0zRGZ1bmN0aW9u KGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KGg9M0RlLE4pOmh9LE4ucmlnaHRBbGlnbllB eGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZT0KbnRzLmxlbmd0aD8ocD0zRGUsci5vcmll bnQoZT8icmlnaHQiOiJsZWZ0IiksTik6cH0sTi51c2VJbnRlcmFjdGl2ZUd1aWRlbGluPQplPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLGU9M0Q9M0Q9M0QhMCYm KE4uaW50ZXJhY3RpdmU9CighMSksTi51c2VWb3Jvbm9pKCExKSksTik6ZH0sTi50b29sdGlwcz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/KHY9M0RlLE4pOnZ9LE4udG9v bHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0KPTNE ZSxOKTptfSxOLnN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9 M0RlLE4pOmJ9LE4uZGVmPQphdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8odz0zRGUsTik6d30sTi5ub0RhdGE9M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhFPTNEZSxOKTpFfSxOLnRyYW5zaXRpb25EdXJhdGlvbj0zRGZ1bmN0aT0K b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLE4pOnh9LE59LGUubW9kZWxzLmxp bmVQbHVzQmFyQ2hhcnQ9M0RmPQp1bmN0aW9uKCl7ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5lYWNo KGZ1bmN0aW9uKGUpe3ZhciBsPTNEZDMuc2VsZWN0KHRoaXMpLGM9Cj0zRHRoaXMsdj0zRChhfHxw YXJzZUludChsLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdodCxOPTNEKGZ8fHBh cj0Kc2VJbnQobC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tO1QudXBkYXRl PTNEZnVuY3Rpb24oKXtsLmNhbGwoPQpUKX0sYi5kaXNhYmxlZD0zRGUubWFwKGZ1bmN0aW9uKGUp e3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgQzt3PTNEe309Cjtmb3IoQyBpbiBiKWJb Q11pbnN0YW5jZW9mIEFycmF5P3dbQ109M0RiW0NdLnNsaWNlKDApOndbQ109M0RiW0NdfWlmKCFl fHwhZT0KLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5n dGh9KS5sZW5ndGgpe3ZhciBrPTNEbC5zPQplbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW0Vd KTtyZXR1cm4gay5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXM9CnMiLCJudmQzIG52 LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUi KSxrLmF0dD0KcigieCIsdS5sZWZ0K3YvMikuYXR0cigieSIsdS50b3ArTi8yKS50ZXh0KGZ1bmN0 aW9uKGUpe3JldHVybiBlfSksVH1sLnNlbGVjPQp0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7 dmFyIEw9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCY9CiZlLmJhcn0p LEE9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5iYXJ9KTttPTNEQS5maWx0ZXIoZnVu Y3Rpb24oZSl7cj0KZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aCYmQS5maWx0ZXIoZnVuY3Rpb24o ZSl7cmV0dXJuIWUuZGlzYWJsZWR9KVswXS52YWx1PQplcy5sZW5ndGg/dC54U2NhbGUoKTpuLnhT Y2FsZSgpLGc9M0RuLnlTY2FsZSgpLHk9M0R0LnlTY2FsZSgpO3ZhciBPPTNEZDMuc2U9CmxlY3Qo dGhpcykuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZVBsdXNCYXIiKS5kYXRhKFtlXSksTT0z RE8uZW50ZXIoKS5hcD0KcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWxp bmVQbHVzQmFyIikuYXBwZW5kKCJnIiksXz0zRE8uc2VsPQplY3QoImciKTtNLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGE9CnNz IiwibnYteTEgbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MiBudi1h eGlzIiksTS5hcHBlbmQoIj0KZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxNLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIiksPQpNLmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLHAmJihvLndpZHRoKHYvMiksXy5zZWxlY3QoIi5udi09 CmxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtl eT0zRGUub3JpZ2luYWxLZXk9Cj0zRD0zRD0zRHVuZGVmaW5lZD9lLmtleTplLm9yaWdpbmFsS2V5 LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS5iYXI/IiAobGVmdD0KIGF4aXMpIjoiIChyaWdodCBh eGlzKSIpLGV9KSkuY2FsbChvKSx1LnRvcCE9M0RvLmhlaWdodCgpJiYodS50b3A9M0RvLmhlaWdo PQp0KCksTj0zRChmfHxwYXJzZUludChsLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5i b3R0b20pLF8uc2VsZWN0KCIubnY9Ci1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJh bnNsYXRlKCIrdi8yKyIsIisgLXUudG9wKyIpIikpLE8uYXR0cigidD0KcmFuc2Zvcm0iLCJ0cmFu c2xhdGUoIit1LmxlZnQrIiwiK3UudG9wKyIpIiksdC53aWR0aCh2KS5oZWlnaHQoTikuY29sb3Io ZS5tPQphcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxoKGUsdCl9KS5maWx0ZXIoZnVu Y3Rpb24odCxuKXtyZXR1cm4hZVtuXS49CmRpc2FibGVkJiYhZVtuXS5iYXJ9KSksbi53aWR0aCh2 KS5oZWlnaHQoTikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cj0KbiBlLmNvbG9yfHxo KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS5i YXJ9KSk7PQp2YXIgRD0zRF8uc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShMLmxlbmd0aD9M Olt7dmFsdWVzOltdfV0pLFA9M0RfLnNlbGU9CmN0KCIubnYtbGluZXNXcmFwIikuZGF0dW0oQVsw XSYmIUFbMF0uZGlzYWJsZWQ/QTpbe3ZhbHVlczpbXX1dKTtkMy50cmFuc2l0aT0Kb24oRCkuY2Fs bChuKSxkMy50cmFuc2l0aW9uKFApLmNhbGwodCksci5zY2FsZShtKS50aWNrcyh2LzEwMCkudGlj a1NpemUoLU4sPQowKSxfLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgwLCIrZy5yYW5nZSgpWzBdKyI9CikiKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0 KCIubnYteC5udi1heGlzIikpLmNhbGwociksaS5zY2FsZShnKS50aWNrcyhOLzM2KT0KLnRpY2tT aXplKC12LDApLGQzLnRyYW5zaXRpb24oXy5zZWxlY3QoIi5udi15MS5udi1heGlzIikpLnN0eWxl KCJvcGFjaXR5IixMPQoubGVuZ3RoPzE6MCkuY2FsbChpKSxzLnNjYWxlKHkpLnRpY2tzKE4vMzYp LnRpY2tTaXplKEwubGVuZ3RoPzA6LXYsMCksXy5zZWw9CmVjdCgiLm52LXkyLm52LWF4aXMiKS5z dHlsZSgib3BhY2l0eSIsQS5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFucz0KbGF0 ZSgiK3YrIiwwKSIpLGQzLnRyYW5zaXRpb24oXy5zZWxlY3QoIi5udi15Mi5udi1heGlzIikpLmNh bGwocyksby5kaXNwYXRjPQpoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Yj0zRGUsUy5z dGF0ZUNoYW5nZShiKSxULnVwZGF0ZSgpfSksUy5vbigidG89Cm9sdGlwU2hvdyIsZnVuY3Rpb24o ZSl7ZCYmeChlLGMucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odD0K KXt0eXBlb2YgdC5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihl LG4pe2UuZGlzYWJsZWQ9M0R0PQouZGlzYWJsZWRbbl19KSxiLmRpc2FibGVkPTNEdC5kaXNhYmxl ZCksVC51cGRhdGUoKX0pfSksVH12YXIgdD0zRGUubW9kZWxzLmw9CmluZSgpLG49M0RlLm1vZGVs cy5oaXN0b3JpY2FsQmFyKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5tb2RlbHMuYXhpcygp LD0Kcz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5tb2RlbHMubGVnZW5kKCksdT0zRHt0b3A6MzAs cmlnaHQ6NjAsYm90dG9tOjUwLGxlPQpmdDo2MH0sYT0zRG51bGwsZj0zRG51bGwsbD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBlLnh9LGM9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBlLnl9LGg9M0RlLnV0 aWxzLmRlZmF1bHRDb2xvcigpLHA9M0QhMCxkPTNEITAsdj0zRGZ1bmN0aW9uKGUsdCxuLHIsaSl7 cmV0dT0Kcm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBhdCAiK3QrIjwvcD4ifSxtLGcseSxi PTNEe30sdz0zRG51bGwsRT0zRCJObyBEPQphdGEgQXZhaWxhYmxlLiIsUz0zRGQzLmRpc3BhdGNo KCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCI9CmNoYW5nZVN0YXRl Iik7bi5wYWREYXRhKCEwKSx0LmNsaXBFZGdlKCExKS5wYWREYXRhKCEwKSxyLm9yaWVudCgiYm90 dG9tIikudD0KaWNrUGFkZGluZyg3KS5oaWdobGlnaHRaZXJvKCExKSxpLm9yaWVudCgibGVmdCIp LHMub3JpZW50KCJyaWdodCIpO3ZhciB4PTNEPQpmdW5jdGlvbihuLG8pe3ZhciB1PTNEbi5wb3Nb MF0rKG8ub2Zmc2V0TGVmdHx8MCksYT0zRG4ucG9zWzFdKyhvLm9mZnNldFRvcHw9CnwwKSxmPTNE ci50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPTNEKG4uc2VyaWVz LmJhcj9pOnMpLj0KdGlja0Zvcm1hdCgpKHQueSgpKG4ucG9pbnQsbi5wb2ludEluZGV4KSksYz0z RHYobi5zZXJpZXMua2V5LGYsbCxuLFQpO2UudG9vPQpsdGlwLnNob3coW3UsYV0sYyxuLnZhbHVl PDA/Im4iOiJzIixudWxsLG8pfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE09Cm91c2Vv dmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK3UubGVmdCxlLnBvc1sx XSt1LnRvcF0sUy50bz0Kb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNl b3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpPQpwSGlkZShlKX0pLG4uZGlzcGF0Y2gu b24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS49CnBv c1swXSt1LmxlZnQsZS5wb3NbMV0rdS50b3BdLFMudG9vbHRpcFNob3coZSl9KSxuLmRpc3BhdGNo Lm9uKCJlbGVtZW50TW91cz0KZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aXBIaWRl KGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7PQpkJiZlLnRvb2x0aXAuY2xlYW51 cCgpfSksVC5kaXNwYXRjaD0zRFMsVC5sZWdlbmQ9M0RvLFQubGluZXM9M0R0LFQuYmFycz0zRG49 CixULnhBeGlzPTNEcixULnkxQXhpcz0zRGksVC55MkF4aXM9M0RzLGQzLnJlYmluZChULHQsImRl ZmluZWQiLCJzaXplIiwiY2xpcD0KVm9yb25vaSIsImludGVycG9sYXRlIiksVC5vcHRpb25zPTNE ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKFQpLFQueD0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGw9M0RlLHQueChlKSxuLngoZSksVCk6bH0sVC55PTNEZnVuY3Rpb24o ZSk9CntyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGUsdC55KGUpLG4ueShlKSxUKTpjfSxU Lm1hcmdpbj0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUudG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnUudG9wLHUuPQpyaWdodD0zRHR5cGVv ZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT0zRHR5cGVv ZiBlLmI9Cm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnUuYm90dG9tLHUubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZD0KIj9lLmxlZnQ6dS5sZWZ0LFQpOnV9LFQud2lkdGg9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0zRGUsPQpUKTphfSxULmhl aWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxUKTpmfSxU LmNvbG9yPQo9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUudXRp bHMuZ2V0Q29sb3IodCksby5jb2xvcihoKSw9ClQpOmh9LFQuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxUKTpwfSxULnRvbz0KbHRpcHM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsVCk6ZH0sVC50b29sdGlw Q29udGVudD0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLFQp OnZ9LFQuc3RhdGU9M0RmdW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNE ZSxUKTpifSxULmRlZmF1bHRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmc9CnVtZW50cy5s ZW5ndGg/KHc9M0RlLFQpOnd9LFQubm9EYXRhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KD0KRT0zRGUsVCk6RX0sVH0sZS5tb2RlbHMubGluZVdpdGhGb2N1c0NoYXJ0PTNE ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKGUpe3JldHVyPQpuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5j dGlvbiBSKGUpe3ZhciB0PTNEKyhlPTNEPTNEImUiKSxuPTNEdD8xOi0xLHI9M0RPLzM9CjtyZXR1 cm4iTSIrLjUqbisiLCIrcisiQTYsNiAwIDAgIit0KyIgIis2LjUqbisiLCIrKHIrNikrIlYiKygy KnItNikrIkE2LDYgMD0KIDAgIit0KyIgIisuNSpuKyIsIisyKnIrIloiKyJNIisyLjUqbisiLCIr KHIrOCkrIlYiKygyKnItOCkrIk0iKzQuNSpuKyIsIisoPQpyKzgpKyJWIisoMipyLTgpfWZ1bmN0 aW9uIFUoKXthLmVtcHR5KCl8fGEuZXh0ZW50KHcpLEYuZGF0YShbYS5lbXB0eSgpP2cuZG89Cm1h aW4oKTp3XSkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEZyhlWzBdKS12LnJhbmdlKClbMF0s cj0zRHYucmFuZ2UoKVsxXT0KLWcoZVsxXSk7ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZnQi KS5hdHRyKCJ3aWR0aCIsbjwwPzA6biksZDMuc2VsZWN0KHRoPQppcykuc2VsZWN0KCIucmlnaHQi KS5hdHRyKCJ4IixnKGVbMV0pKS5hdHRyKCJ3aWR0aCIscjwwPzA6cil9KX1mdW5jdGlvbiB6KCk9 Cnt3PTNEYS5lbXB0eSgpP251bGw6YS5leHRlbnQoKTt2YXIgbj0zRGEuZW1wdHkoKT9nLmRvbWFp bigpOmEuZXh0ZW50KCk7aWYoTT0KYXRoLmFicyhuWzBdLW5bMV0pPD0zRDEpcmV0dXJuO1QuYnJ1 c2goe2V4dGVudDpuLGJydXNoOmF9KSxVKCk7dmFyIHM9M0RQLnNlPQpsZWN0KCIubnYtZm9jdXMg Lm52LWxpbmVzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2Fi bGU9CmR9KS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVl cy5maWx0ZXIoZnVuY3Rpb24oZSxyKT0Ke3JldHVybiB0LngoKShlLHIpPj0zRG5bMF0mJnQueCgp KGUscik8PTNEblsxXX0pfX0pKTtzLmNhbGwodCksUC5zZWxlY3QoIi5uPQp2LWZvY3VzIC5udi14 Lm52LWF4aXMiKS5jYWxsKHIpLFAuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkubnYtYXhpcyIpLmNh bGwoaSk9Cn12YXIgUz0zRGQzLnNlbGVjdCh0aGlzKSxOPTNEdGhpcyxMPTNEKGh8fHBhcnNlSW50 KFMuc3R5bGUoIndpZHRoIikpfHw5NjApLT0KZi5sZWZ0LWYucmlnaHQsQT0zRChwfHxwYXJzZUlu dChTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktZi50b3AtZi5ib3R0b20tZCxPPQo9M0RkLWwudG9w LWwuYm90dG9tO2sudXBkYXRlPTNEZnVuY3Rpb24oKXtTLmNhbGwoayl9LGsuY29udGFpbmVyPTNE dGhpcztpZig9CiFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52 YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgTT0KPTNEUy5zZWxlY3RBbGwoIi5udi1ub0RhdGEi KS5kYXRhKFt4XSk7cmV0dXJuIE0uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyPQooImNsYXNz IiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9y IiwibWlkZGxlIik9CixNLmF0dHIoIngiLGYubGVmdCtMLzIpLmF0dHIoInkiLGYudG9wK0EvMiku dGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLGt9Uz0KLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIp LnJlbW92ZSgpLHY9M0R0LnhTY2FsZSgpLG09M0R0LnlTY2FsZSgpLGc9M0RuLnhTY2FsPQplKCks eT0zRG4ueVNjYWxlKCk7dmFyIF89M0RTLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVXaXRo Rm9jdXNDaGFydCIpLmQ9CmF0YShbZV0pLEQ9M0RfLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVdpdGhGbz0KY3VzQ2hhcnQiKS5hcHBlbmQoImci KSxQPTNEXy5zZWxlY3QoImciKTtELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnPQpl bmRXcmFwIik7dmFyIEg9M0RELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZm9jdXMiKTtI LmFwcGVuZCgiZyIpLmF0dHI9CigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxILmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksSC5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNz IiwibnYtbGluZXNXcmFwIik7dmFyIEI9M0RELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt PQpjb250ZXh0Iik7Qi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEIu YXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52LXkgbnYtYXhpcyIpLEIuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxCLmFwcGVuZCgiZz0KIikuYXR0cigiY2xhc3Mi LCJudi1icnVzaEJhY2tncm91bmQiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBu di1iPQpydXNoIiksYiYmKHUud2lkdGgoTCksUC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0 dW0oZSkuY2FsbCh1KSxmLnRvcCE9M0Q9CnUuaGVpZ2h0KCkmJihmLnRvcD0zRHUuaGVpZ2h0KCks QT0zRChwfHxwYXJzZUludChTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktZj0KLnRvcC1mLmJvdHRv bS1kKSxQLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xh dGUoMCwiPQorIC1mLnRvcCsiKSIpKSxfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Yu bGVmdCsiLCIrZi50b3ArIikiKSx0LndpZHQ9CmgoTCkuaGVpZ2h0KEEpLmNvbG9yKGUubWFwKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdT0KbmN0aW9uKHQs bil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksbi5kZWZpbmVkKHQuZGVmaW5lZCgpKS53aWR0aChM KS5oZWlnaHQoPQpPKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxj KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXs9CnJldHVybiFlW25dLmRpc2FibGVkfSkpLFAu c2VsZWN0KCIubnYtY29udGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZT0KKDAsIiso QStmLmJvdHRvbStsLnRvcCkrIikiKTt2YXIgaj0zRFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYt bGluZXNXcmFwIikuPQpkYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxl ZH0pKTtkMy50cmFuc2l0aW9uKGopLmNhbGwobiksci49CnNjYWxlKHYpLnRpY2tzKEwvMTAwKS50 aWNrU2l6ZSgtQSwwKSxpLnNjYWxlKG0pLnRpY2tzKEEvMzYpLnRpY2tTaXplKC1MLDApLD0KUC5z ZWxlY3QoIi5udi1mb2N1cyAubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNs YXRlKDAsIitBKyIpIiksPQphLngoZykub24oImJydXNoIixmdW5jdGlvbigpe3ZhciBlPTNEay50 cmFuc2l0aW9uRHVyYXRpb24oKTtrLnRyYW5zaXRpb25EdXI9CmF0aW9uKDApLHooKSxrLnRyYW5z aXRpb25EdXJhdGlvbihlKX0pLHcmJmEuZXh0ZW50KHcpO3ZhciBGPTNEUC5zZWxlY3QoIi5udj0K LWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoW3d8fGEuZXh0ZW50KCldKSxJ PTNERi5lbnRlcigpLmFwcGVuPQpkKCJnIik7SS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIs ImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCI9CmhlaWdodCIsTyksSS5hcHBl bmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInJpZ2h0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCku YT0KdHRyKCJoZWlnaHQiLE8pO3ZhciBxPTNEUC5zZWxlY3QoIi5udi14Lm52LWJydXNoIikuY2Fs bChhKTtxLnNlbGVjdEFsbCgicmVjPQp0IikuYXR0cigiaGVpZ2h0IixPKSxxLnNlbGVjdEFsbCgi LnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFIpLHooKSw9CnMuc2NhbGUoZykudGlj a3MoTC8xMDApLnRpY2tTaXplKC1PLDApLFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYteC5udi1h eGlzIj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIp LGQzLnRyYW5zaXRpb24oUC5zZWxlY3QoPQoiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpKS5j YWxsKHMpLG8uc2NhbGUoeSkudGlja3MoTy8zNikudGlja1NpemUoLUwsMCk9CixkMy50cmFuc2l0 aW9uKFAuc2VsZWN0KCIubnYtY29udGV4dCAubnYteS5udi1heGlzIikpLmNhbGwobyksUC5zZWxl Y3QoIi5udj0KLWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5z bGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksPQp1LmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIs ZnVuY3Rpb24oZSl7ay51cGRhdGUoKX0pLFQub24oInRvb2x0aXBTaG93IixmdW49CmN0aW9uKGUp e0UmJkMoZSxOLnBhcmVudE5vZGUpfSl9KSxrfXZhciB0PTNEZS5tb2RlbHMubGluZSgpLG49M0Rl Lm1vZGVscy5saT0KbmUoKSxyPTNEZS5tb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5heGlzKCks cz0zRGUubW9kZWxzLmF4aXMoKSxvPTNEZS5tb2RlPQpscy5heGlzKCksdT0zRGUubW9kZWxzLmxl Z2VuZCgpLGE9M0RkMy5zdmcuYnJ1c2goKSxmPTNEe3RvcDozMCxyaWdodDozMCxib3Q9CnRvbToz MCxsZWZ0OjYwfSxsPTNEe3RvcDowLHJpZ2h0OjMwLGJvdHRvbToyMCxsZWZ0OjYwfSxjPTNEZS51 dGlscy5kZWZhdWx0Qz0Kb2xvcigpLGg9M0RudWxsLHA9M0RudWxsLGQ9M0QxMDAsdixtLGcseSxi PTNEITAsdz0zRG51bGwsRT0zRCEwLFM9M0RmdW5jdGlvPQpuKGUsdCxuLHIsaSl7cmV0dXJuIjxo Mz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0seD0zRCJObyBEYXRhIEE9CnZh aWxhYmxlLiIsVD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYnJ1 c2giKSxOPTNEMDt0LmNsaT0KcEVkZ2UoITApLG4uaW50ZXJhY3RpdmUoITEpLHIub3JpZW50KCJi b3R0b20iKS50aWNrUGFkZGluZyg1KSxpLm9yaWVudCgibGVmPQp0Iikscy5vcmllbnQoImJvdHRv bSIpLnRpY2tQYWRkaW5nKDUpLG8ub3JpZW50KCJsZWZ0Iik7dmFyIEM9M0RmdW5jdGlvbihuLHM9 Cil7dmFyIG89M0RuLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PTNEbi5wb3NbMV0rKHMub2Zm c2V0VG9wfHwwKSxhPTNEci50aT0KY2tGb3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRl eCkpLGY9M0RpLnRpY2tGb3JtYXQoKSh0LnkoKShuLnBvaW50LG4uPQpwb2ludEluZGV4KSksbD0z RFMobi5zZXJpZXMua2V5LGEsZixuLGspO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxs LHM9Cil9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1 bmN0aW9uKGUpe2UucG9zPTNEW2UucD0Kb3NbMF0rZi5sZWZ0LGUucG9zWzFdK2YudG9wXSxULnRv b2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlPQpvdXQudG9vbHRpcCIs ZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLFQub24oInRvb2x0aXBIaWRlIixmdW5jdGlv bigpe0U9CiYmZS50b29sdGlwLmNsZWFudXAoKX0pLGsuZGlzcGF0Y2g9M0RULGsubGVnZW5kPTNE dSxrLmxpbmVzPTNEdCxrLmxpbmVzMj0zRD0KbixrLnhBeGlzPTNEcixrLnlBeGlzPTNEaSxrLngy QXhpcz0zRHMsay55MkF4aXM9M0RvLGQzLnJlYmluZChrLHQsImRlZmluZWQiPQosImlzQXJlYSIs InNpemUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZv cmNlWSIsImk9Cm50ZXJhY3RpdmUiLCJjbGlwRWRnZSIsImNsaXBWb3Jvbm9pIiwiaWQiKSxrLm9w dGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLj0KYmluZChrKSxrLng9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC54KGUpLG4ueChlKSxrKTp0Lnh9LGsuPQp5PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQueShlKSxuLnkoZSksayk6dC55fSxr Lm1hcmdpbj0zRGY9CnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGYudG9wPTNE dHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudD0Kb3A6Zi50b3AsZi5yaWdodD0zRHR5cGVv ZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6Zi5yaWdodCxmLmJvdHRvbT0KPTNEdHlw ZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOmYuYm90dG9tLGYubGVmdD0zRHR5 cGVvZiBlLmxlZnQhPQo9M0QidW5kZWZpbmVkIj9lLmxlZnQ6Zi5sZWZ0LGspOmZ9LGsubWFyZ2lu Mj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGw9M0RlLGspOmx9LGsu d2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsaz0KKTpo fSxrLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxr KTpwfSxrLmhlaWdodDI9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhk PTNEZSxrKTpkfSxrLmNvbG9yPTNEZnVuY3Rpb24odCl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYz0zRGUudXRpbHMuZ2V0Q29sb3IodCksdS5jb2xvcihjKSxrKTpjfSxrLnNob3dMZWdlPQpu ZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxrKTpifSxrLnRv b2x0aXBzPTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0zRGUsayk6 RX0say50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5n dGg/KFM9M0RlLGspOlN9LGsuaW50ZXJwb2xhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l PQpudHMubGVuZ3RoPyh0LmludGVycG9sYXRlKGUpLG4uaW50ZXJwb2xhdGUoZSksayk6dC5pbnRl cnBvbGF0ZSgpfSxrLm5vRGF0YT0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHg9M0RlLGspOnh9LGsueFRpY2tGb3JtYXQ9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhyLnRpY2tGb3JtYXQoZSkscy50aWNrRm9ybWF0KGUpLGspOnIudGlja0Zv cm09CmF0KCl9LGsueVRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oaS50aWNrRm9ybWF0KGUpLD0Kby50aWNrRm9ybWF0KGUpLGspOmkudGlja0Zvcm1hdCgp fSxrLmJydXNoRXh0ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtPQplbnRzLmxlbmd0aD8o dz0zRGUsayk6d30say50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnQ9CnMubGVuZ3RoPyhOPTNEZSxrKTpOfSxrfSxlLm1vZGVscy5saW5lUGx1c0JhcldpdGhG b2N1c0NoYXJ0PTNEZnVuY3Rpb24oKXtmdT0KbmN0aW9uIEIoZSl7cmV0dXJuIGUuZWFjaChmdW5j dGlvbihlKXtmdW5jdGlvbiB0dChlKXt2YXIgdD0zRCsoZT0zRD0zRCJlIiksPQpuPTNEdD8xOi0x LHI9M0RJLzM7cmV0dXJuIk0iKy41Km4rIiwiK3IrIkE2LDYgMCAwICIrdCsiICIrNi41Km4rIiwi KyhyKzYpKyI9ClYiKygyKnItNikrIkE2LDYgMCAwICIrdCsiICIrLjUqbisiLCIrMipyKyJaIisi TSIrMi41Km4rIiwiKyhyKzgpKyJWIisoMipyLT0KOCkrIk0iKzQuNSpuKyIsIisocis4KSsiViIr KDIqci04KX1mdW5jdGlvbiBudCgpe2guZW1wdHkoKXx8aC5leHRlbnQoeCksWS5kPQphdGEoW2gu ZW1wdHkoKT9rLmRvbWFpbigpOnhdKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIG49M0RrKGVbMF0p LWsucmFuZ2UoKVs9CjBdLHI9M0RrLnJhbmdlKClbMV0tayhlWzFdKTtkMy5zZWxlY3QodGhpcyku c2VsZWN0KCIubGVmdCIpLmF0dHIoIndpZHRoIixuPD0KMD8wOm4pLGQzLnNlbGVjdCh0aGlzKS5z ZWxlY3QoIi5yaWdodCIpLmF0dHIoIngiLGsoZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/PQowOnIp fSl9ZnVuY3Rpb24gcnQoKXt4PTNEaC5lbXB0eSgpP251bGw6aC5leHRlbnQoKSxTPTNEaC5lbXB0 eSgpP2suZG9tYWluKCk9CjpoLmV4dGVudCgpLEQuYnJ1c2goe2V4dGVudDpTLGJydXNoOmh9KSxu dCgpLHIud2lkdGgoaikuaGVpZ2h0KEYpLmNvbG9yKGUubT0KYXAoZnVuY3Rpb24oZSx0KXtyZXR1 cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uPQpk aXNhYmxlZCYmZVtuXS5iYXJ9KSksdC53aWR0aChqKS5oZWlnaHQoRikuY29sb3IoZS5tYXAoZnVu Y3Rpb24oZSx0KXtyZXR1cm49CiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxu KXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpOz0KdmFyIG49M0QkLnNlbGVjdCgi Lm52LWZvY3VzIC5udi1iYXJzV3JhcCIpLmRhdHVtKFIubGVuZ3RoP1IubWFwKGZ1bmN0aW9uKGUs PQp0KXtyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gci54KCkoZSx0KT49Cj0zRFNbMF0mJnIueCgpKGUsdCk8PTNEU1sxXX0pfX0pOlt7 dmFsdWVzOltdfV0pLGk9M0QkLnNlbGVjdCgiLm52LWZvY3VzIC5udj0KLWxpbmVzV3JhcCIpLmRh dHVtKFVbMF0uZGlzYWJsZWQ/W3t2YWx1ZXM6W119XTpVLm1hcChmdW5jdGlvbihlLG4pe3JldHVy bntrPQpleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUsbil7cmV0dXJu IHQueCgpKGUsbik+PTNEU1swXSYmdC49CngoKShlLG4pPD0zRFNbMV19KX19KSk7Ui5sZW5ndGg/ Qz0zRHIueFNjYWxlKCk6Qz0zRHQueFNjYWxlKCkscy5zY2FsZShDKS50aT0KY2tzKGovMTAwKS50 aWNrU2l6ZSgtRiwwKSxzLmRvbWFpbihbTWF0aC5jZWlsKFNbMF0pLE1hdGguZmxvb3IoU1sxXSld KSwkLnNlPQpsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChzKSxuLmNhbGwociksaS5jYWxsKHQp LCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXg9Ci5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwi dHJhbnNsYXRlKDAsIitMLnJhbmdlKClbMF0rIikiKSx1LnNjYWxlKEwpLnRpYz0Ka3MoRi8zNiku dGlja1NpemUoLWosMCksJC5zZWxlY3QoIi5udi1mb2N1cyAubnYteTEubnYtYXhpcyIpLnN0eWxl KCJvcGFjaXR5PQoiLFIubGVuZ3RoPzE6MCksYS5zY2FsZShBKS50aWNrcyhGLzM2KS50aWNrU2l6 ZShSLmxlbmd0aD8wOi1qLDApLCQuc2VsZWN0KCI9Ci5udi1mb2N1cyAubnYteTIubnYtYXhpcyIp LnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsIj0KdHJhbnNs YXRlKCIrQy5yYW5nZSgpWzFdKyIsMCkiKSwkLnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1h eGlzIikuY2FsbCh1PQopLCQuc2VsZWN0KCIubnYtZm9jdXMgLm52LXkyLm52LWF4aXMiKS5jYWxs KGEpfXZhciBOPTNEZDMuc2VsZWN0KHRoaXMpLFA9M0Q9CnRoaXMsaj0zRCh2fHxwYXJzZUludChO LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1wLmxlZnQtcC5yaWdodCxGPTNEKG18fHBhcnNlST0KbnQo Ti5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wLXAuYm90dG9tLWcsST0zRGctZC50b3AtZC5i b3R0b207Qi51cGRhdGU9Cj0zRGZ1bmN0aW9uKCl7Ti5jYWxsKEIpfSxCLmNvbnRhaW5lcj0zRHRo aXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGUudmFs dWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIHE9M0ROLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpPQou ZGF0YShbX10pO3JldHVybiBxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJu dmQzIG52LW5vRGF0YSIpLmE9CnR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIs Im1pZGRsZSIpLHEuYXR0cigieCIscC5sZWZ0K2ovMikuYXR0cj0KKCJ5IixwLnRvcCtGLzIpLnRl eHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxCfU4uc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVt PQpvdmUoKTt2YXIgUj0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZl LmJhcn0pLFU9M0RlLmZpbHRlcig9CmZ1bmN0aW9uKGUpe3JldHVybiFlLmJhcn0pO0M9M0RyLnhT Y2FsZSgpLGs9M0RvLnNjYWxlKCksTD0zRHIueVNjYWxlKCksQT0zRD0KdC55U2NhbGUoKSxPPTNE aS55U2NhbGUoKSxNPTNEbi55U2NhbGUoKTt2YXIgej0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3Jl dHVyPQpuIWUuZGlzYWJsZWQmJmUuYmFyfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVl cy5tYXAoZnVuY3Rpb24oZSx0KXtyZXQ9CnVybnt4OnkoZSx0KSx5OmIoZSx0KX19KX0pLFc9M0Rl LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmIWUuYj0KYXJ9KS5tYXAoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnkoZSx0 KSx5OmIoPQplLHQpfX0pfSk7Qy5yYW5nZShbMCxqXSksay5kb21haW4oZDMuZXh0ZW50KGQzLm1l cmdlKHouY29uY2F0KFcpKSxmdW5jdGlvbig9CmUpe3JldHVybiBlLnh9KSkucmFuZ2UoWzAsal0p O3ZhciBYPTNETi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lUGx1c0Jhcj0KIikuZGF0YShb ZV0pLFY9M0RYLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAg bnYtbGluZVBsPQp1c0JhciIpLmFwcGVuZCgiZyIpLCQ9M0RYLnNlbGVjdCgiZyIpO1YuYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmQ9CldyYXAiKTt2YXIgSj0zRFYuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1mb2N1cyIpO0ouYXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIs Im52LXggbnYtYXhpcyIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlz IiksSi5hcHBlbmQoPQoiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtYXhpcyIpLEouYXBwZW5k KCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCI9CiksSi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LWxpbmVzV3JhcCIpO3ZhciBLPTNEVi5hcHBlbmQoImciKS5hdHRyKCJjbD0KYXNz IiwibnYtY29udGV4dCIpO0suYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMi KSxLLmFwcGVuZCgiZyIpPQouYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlzIiksSy5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKSw9CksuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudi1iYXJzV3JhcCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saT0K bmVzV3JhcCIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1icnVzaEJhY2tncm91bmQi KSxLLmFwcGVuZCgiZyIpLmF0PQp0cigiY2xhc3MiLCJudi14IG52LWJydXNoIiksRSYmKGMud2lk dGgoai8yKSwkLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXQ9CnVtKGUubWFwKGZ1bmN0aW9u KGUpe3JldHVybiBlLm9yaWdpbmFsS2V5PTNEZS5vcmlnaW5hbEtleT0zRD0zRD0zRHVuZGVmaW5l ZD0KP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9M0RlLm9yaWdpbmFsS2V5KyhlLmJhcj8iIChs ZWZ0IGF4aXMpIjoiIChyaWdodCBhPQp4aXMpIiksZX0pKS5jYWxsKGMpLHAudG9wIT0zRGMuaGVp Z2h0KCkmJihwLnRvcD0zRGMuaGVpZ2h0KCksRj0zRChtfHxwYXJzZUk9Cm50KE4uc3R5bGUoImhl aWdodCIpKXx8NDAwKS1wLnRvcC1wLmJvdHRvbS1nKSwkLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAi KS5hdD0KdHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ovMisiLCIrIC1wLnRvcCsiKSIpKSxY LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zPQpsYXRlKCIrcC5sZWZ0KyIsIitwLnRvcCsiKSIpLGku d2lkdGgoaikuaGVpZ2h0KEkpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCk9CntyZXR1cm4gZS5j b2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQm JmVbbl0uYj0KYXJ9KSksbi53aWR0aChqKS5oZWlnaHQoSSkuY29sb3IoZS5tYXAoZnVuY3Rpb24o ZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQpPQp9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1 cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpO3ZhciBRPTNEJC5zZWxlY3Q9CigiLm52LWNv bnRleHQgLm52LWJhcnNXcmFwIikuZGF0dW0oUi5sZW5ndGg/Ujpbe3ZhbHVlczpbXX1dKSxHPTNE JC5zZWxlY3QoIj0KLm52LWNvbnRleHQgLm52LWxpbmVzV3JhcCIpLmRhdHVtKFVbMF0uZGlzYWJs ZWQ/W3t2YWx1ZXM6W119XTpVKTskLnNlbGVjdCgiPQoubnYtY29udGV4dCIpLmF0dHIoInRyYW5z Zm9ybSIsInRyYW5zbGF0ZSgwLCIrKEYrcC5ib3R0b20rZC50b3ApKyIpIiksUS5jYWw9CmwoaSks Ry5jYWxsKG4pLGgueChrKS5vbigiYnJ1c2giLHJ0KSx4JiZoLmV4dGVudCh4KTt2YXIgWT0zRCQu c2VsZWN0KCIubnYtYj0KcnVzaEJhY2tncm91bmQiKS5zZWxlY3RBbGwoImciKS5kYXRhKFt4fHxo LmV4dGVudCgpXSksWj0zRFkuZW50ZXIoKS5hcHBlbmQoPQoiZyIpO1ouYXBwZW5kKCJyZWN0Iiku YXR0cigiY2xhc3MiLCJsZWZ0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGU9Cmln aHQiLEkpLFouYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJyaWdodCIpLmF0dHIoIngiLDAp LmF0dHIoInkiLDApLmF0dD0KcigiaGVpZ2h0IixJKTt2YXIgZXQ9M0QkLnNlbGVjdCgiLm52LXgu bnYtYnJ1c2giKS5jYWxsKGgpO2V0LnNlbGVjdEFsbCgicmVjPQp0IikuYXR0cigiaGVpZ2h0IixJ KSxldC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix0dCksby49 CnRpY2tzKGovMTAwKS50aWNrU2l6ZSgtSSwwKSwkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgu bnYtYXhpcyIpLmF0dHIoInRyYT0KbnNmb3JtIiwidHJhbnNsYXRlKDAsIitPLnJhbmdlKClbMF0r IikiKSwkLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpPQpzIikuY2FsbChvKSxmLnNj YWxlKE8pLnRpY2tzKEkvMzYpLnRpY2tTaXplKC1qLDApLCQuc2VsZWN0KCIubnYtY29udGV4dCAu bnY9Ci15MS5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLFIubGVuZ3RoPzE6MCkuYXR0cigidHJh bnNmb3JtIiwidHJhbnNsYXRlKDAsIj0KK2sucmFuZ2UoKVswXSsiKSIpLCQuc2VsZWN0KCIubnYt Y29udGV4dCAubnYteTEubnYtYXhpcyIpLmNhbGwoZiksbC5zY2FsZShNPQopLnRpY2tzKEkvMzYp LnRpY2tTaXplKFIubGVuZ3RoPzA6LWosMCksJC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Mi5u di1heGk9CnMiKS5zdHlsZSgib3BhY2l0eSIsVS5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0i LCJ0cmFuc2xhdGUoIitrLnJhbmdlKClbMT0KXSsiLDApIiksJC5zZWxlY3QoIi5udi1jb250ZXh0 IC5udi15Mi5udi1heGlzIikuY2FsbChsKSxjLmRpc3BhdGNoLm9uKCJzdGF0PQplQ2hhbmdlIixm dW5jdGlvbihlKXtCLnVwZGF0ZSgpfSksRC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe1Qm JkgoZSxQLnA9CmFyZW50Tm9kZSl9KSxydCgpfSksQn12YXIgdD0zRGUubW9kZWxzLmxpbmUoKSxu PTNEZS5tb2RlbHMubGluZSgpLHI9M0RlLm1vZD0KZWxzLmhpc3RvcmljYWxCYXIoKSxpPTNEZS5t b2RlbHMuaGlzdG9yaWNhbEJhcigpLHM9M0RlLm1vZGVscy5heGlzKCksbz0zRGUuPQptb2RlbHMu YXhpcygpLHU9M0RlLm1vZGVscy5heGlzKCksYT0zRGUubW9kZWxzLmF4aXMoKSxmPTNEZS5tb2Rl bHMuYXhpcygpLGw9Cj0zRGUubW9kZWxzLmF4aXMoKSxjPTNEZS5tb2RlbHMubGVnZW5kKCksaD0z RGQzLnN2Zy5icnVzaCgpLHA9M0R7dG9wOjMwLHJpZz0KaHQ6MzAsYm90dG9tOjMwLGxlZnQ6NjB9 LGQ9M0R7dG9wOjAscmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6NjB9LHY9M0RudWxsLG09Cj0zRG51 bGwsZz0zRDEwMCx5PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYj0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnl9LHc9Cj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksRT0zRCEwLFMseD0zRG51bGws VD0zRCEwLE49M0RmdW5jdGlvbihlLHQsbixyLGkpez0KcmV0dXJuIjxoMz4iK2UrIjwvaDM+Iisi PHA+IituKyIgYXQgIit0KyI8L3A+In0sQyxrLEwsQSxPLE0sXz0zRCJObyBEYXRhIEF2PQphaWxh YmxlLiIsRD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYnJ1c2gi KSxQPTNEMDt0LmNsaXA9CkVkZ2UoITApLG4uaW50ZXJhY3RpdmUoITEpLHMub3JpZW50KCJib3R0 b20iKS50aWNrUGFkZGluZyg1KSx1Lm9yaWVudCgibGVmdD0KIiksYS5vcmllbnQoInJpZ2h0Iiks by5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLGYub3JpZW50KCJsZWZ0IiksbC5vPQpy aWVudCgicmlnaHQiKTt2YXIgSD0zRGZ1bmN0aW9uKG4scil7UyYmKG4ucG9pbnRJbmRleCs9M0RN YXRoLmNlaWwoU1swXSkpO3Y9CmFyIGk9M0RuLnBvc1swXSsoci5vZmZzZXRMZWZ0fHwwKSxvPTNE bi5wb3NbMV0rKHIub2Zmc2V0VG9wfHwwKSxmPTNEcy50aWNrRj0Kb3JtYXQoKSh0LngoKShuLnBv aW50LG4ucG9pbnRJbmRleCkpLGw9M0Qobi5zZXJpZXMuYmFyP3U6YSkudGlja0Zvcm1hdCgpKHQu PQp5KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxjPTNETihuLnNlcmllcy5rZXksZixsLG4sQik7 ZS50b29sdGlwLnNob3coW2ksb109CixjLG4udmFsdWU8MD8ibiI6InMiLG51bGwscil9O3JldHVy biB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aT0KcCIsZnVuY3Rpb24oZSl7 ZS5wb3M9M0RbZS5wb3NbMF0rcC5sZWZ0LGUucG9zWzFdK3AudG9wXSxELnRvb2x0aXBTaG93KGUp fSksPQp0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7 RC50b29sdGlwSGlkZShlKX0pLHIuZGk9CnNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29s dGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXStwLmxlZnQsZT0KLnBvc1sxXStwLnRv cF0sRC50b29sdGlwU2hvdyhlKX0pLHIuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29s dGlwIixmPQp1bmN0aW9uKGUpe0QudG9vbHRpcEhpZGUoZSl9KSxELm9uKCJ0b29sdGlwSGlkZSIs ZnVuY3Rpb24oKXtUJiZlLnRvb2x0aXAuY2w9CmVhbnVwKCl9KSxCLmRpc3BhdGNoPTNERCxCLmxl Z2VuZD0zRGMsQi5saW5lcz0zRHQsQi5saW5lczI9M0RuLEIuYmFycz0zRHIsQj0KLmJhcnMyPTNE aSxCLnhBeGlzPTNEcyxCLngyQXhpcz0zRG8sQi55MUF4aXM9M0R1LEIueTJBeGlzPTNEYSxCLnkz QXhpcz0zRGYsPQpCLnk0QXhpcz0zRGwsZDMucmViaW5kKEIsdCwiZGVmaW5lZCIsInNpemUiLCJj bGlwVm9yb25vaSIsImludGVycG9sYXRlIiksQi49Cm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNG dW5jLmJpbmQoQiksQi54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZT0Kbmd0aD8o eT0zRGUsdC54KGUpLHIueChlKSxCKTp5fSxCLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oPQpiPTNEZSx0LnkoZSksci55KGUpLEIpOmJ9LEIubWFyZ2luPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9Ci50b3A9M0R0eXBlb2YgZS50b3AhPTNE InVuZGVmaW5lZCI/ZS50b3A6cC50b3AscC5yaWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRD0KInVu ZGVmaW5lZCI/ZS5yaWdodDpwLnJpZ2h0LHAuYm90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1 bmRlZmluZWQiP2UuYm90PQp0b206cC5ib3R0b20scC5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0Qi dW5kZWZpbmVkIj9lLmxlZnQ6cC5sZWZ0LEIpOnB9LEIud2k9CmR0aD0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxCKTp2fSxCLmhlaWdodD0zRGZ1bmN0aW9uKD0K ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEIpOm19LEIuY29sb3I9M0RmdW5jdGlv bih0KXtyZXR1cm4gYXJndW1lPQpudHMubGVuZ3RoPyh3PTNEZS51dGlscy5nZXRDb2xvcih0KSxj LmNvbG9yKHcpLEIpOnd9LEIuc2hvd0xlZ2VuZD0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KEU9M0RlLEIpOkV9LEIudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4g YT0Kcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxCKTpUfSxCLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50PQpzLmxlbmd0aD8oTj0zRGUsQik6Tn0sQi5ub0RhdGE9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0zRGU9CixCKTpffSxCLmJydXNo RXh0ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEIpOnh9 LEJ9LD0KZS5tb2RlbHMubXVsdGlCYXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEMoZSl7cmV0dXJu IGUuZWFjaChmdW5jdGlvbihlKXt2YXIgPQpnPTNEbi10LmxlZnQtdC5yaWdodCxDPTNEci10LnRv cC10LmJvdHRvbSxrPTNEZDMuc2VsZWN0KHRoaXMpO2QmJmUubGVuZ3RoJiY9CihkPTNEW3t2YWx1 ZXM6ZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt4OmUueCx5OjAsc2VyaWVzOmUu c2VyaWVzLD0Kc2l6ZTouMDF9fSl9XSksYyYmKGU9M0RkMy5sYXlvdXQuc3RhY2soKS5vZmZzZXQo aCkudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVyPQpuIGUudmFsdWVzfSkueShhKSghZS5sZW5ndGgm JmQ/ZDplKSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS52YWx1ZXMuZm9yRWE9CmNoKGZ1bmN0 aW9uKGUpe2Uuc2VyaWVzPTNEdH0pfSksYyYmZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsbil7 dmFyIHI9M0QwLD0KaT0zRDA7ZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLnZhbHVlc1tuXTt0 LnNpemU9M0RNYXRoLmFicyh0LnkpLHQueTwwPyh0PQoueTE9M0RpLGktPTNEdC5zaXplKToodC55 MT0zRHQuc2l6ZStyLHIrPTNEdC5zaXplKX0pfSk7dmFyIEw9M0R5JiZiP1tdOmUubWE9CnAoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnUoZSx0 KSx5OmEoZSx0KSx5MD0KOmUueTAseTE6ZS55MX19KX0pO2kuZG9tYWluKHl8fGQzLm1lcmdlKEwp Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhPQpuZ2VCYW5kcyh3fHxbMCxnXSxTKSxz LmRvbWFpbihifHxkMy5leHRlbnQoZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHU9CnJu IGM/ZS55PjA/ZS55MTplLnkxK2UueTplLnl9KS5jb25jYXQoZikpKS5yYW5nZShFfHxbQywwXSks aS5kb21haW4oKVswXT0zRD0KPTNEPTNEaS5kb21haW4oKVsxXSYmKGkuZG9tYWluKClbMF0/aS5k b21haW4oW2kuZG9tYWluKClbMF0taS5kb21haW4oKVswXSouPQowMSxpLmRvbWFpbigpWzFdK2ku ZG9tYWluKClbMV0qLjAxXSk6aS5kb21haW4oWy0xLDFdKSkscy5kb21haW4oKVswXT0zRD0zRD0K PTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21haW4oW3MuZG9tYWluKClbMF0r cy5kb21haW4oKVswXSouMDEsPQpzLmRvbWFpbigpWzFdLXMuZG9tYWluKClbMV0qLjAxXSk6cy5k b21haW4oWy0xLDFdKSksVD0zRFR8fGksTj0zRE58fHM7dmFyIEE9Cj0zRGsuc2VsZWN0QWxsKCJn Lm52LXdyYXAubnYtbXVsdGliYXIiKS5kYXRhKFtlXSksTz0zREEuZW50ZXIoKS5hcHBlbmQoImci KT0KLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11bHRpYmFyIiksTT0zRE8uYXBwZW5k KCJkZWZzIiksXz0zRE8uYXBwZW5kPQooImciKSxEPTNEQS5zZWxlY3QoImciKTtfLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksQS5hdHRyKCJ0cmE9Cm5zZm9ybSIsInRyYW5z bGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxNLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJp ZCIsIj0KbnYtZWRnZS1jbGlwLSIrbykuYXBwZW5kKCJyZWN0IiksQS5zZWxlY3QoIiNudi1lZGdl LWNsaXAtIitvKyIgcmVjdCIpLmF0dHIoPQoid2lkdGgiLGcpLmF0dHIoImhlaWdodCIsQyksRC5h dHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlwLSIrbysiKSI9CjoiIik7dmFyIFA9 M0RBLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5j dGlvbihlKT0Ke3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVybiB0fSk7UC5lbnRlcigpLmFw cGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhPQpjaXR5IiwxZS02KS5zdHlsZSgiZmlsbC1vcGFj aXR5IiwxZS02KSxQLmV4aXQoKS5zZWxlY3RBbGwoInJlY3QubnYtYmFyIikuYXQ9CnRyKCJ5Iixm dW5jdGlvbihlKXtyZXR1cm4gYz9OKGUueTApOk4oMCl9KS5hdHRyKCJoZWlnaHQiLDApLnJlbW92 ZSgpLFAuYXR0cj0KKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2Vy aWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jPQp0aW9uKGUpe3JldHVybiBlLmhvdmVyfSku c3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0KX0pLnN0eWxlKCI9CnN0cm9r ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHQpfSksUC5zdHlsZSgic3Ryb2tlLW9wYWNpdHki LDEpLnN0eWxlKCJmaT0KbGwtb3BhY2l0eSIsLjc1KTt2YXIgSD0zRFAuc2VsZWN0QWxsKCJyZWN0 Lm52LWJhciIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuPQogZCYmIWUubGVuZ3RoP2QudmFsdWVz OnQudmFsdWVzfSk7SC5leGl0KCkucmVtb3ZlKCk7dmFyIEI9M0RILmVudGVyKCkuYXBwZW49CmQo InJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJh ciBuZWdhdGl2ZSI6Im52LT0KYmFyIHBvc2l0aXZlIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQsbixy KXtyZXR1cm4gYz8wOnIqaS5yYW5nZUJhbmQoKS9lLmxlbmd0PQpofSkuYXR0cigieSIsZnVuY3Rp b24oZSl7cmV0dXJuIE4oYz9lLnkwOjApfSkuYXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWR0aCI9 CixpLnJhbmdlQmFuZCgpLyhjPzE6ZS5sZW5ndGgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9u KGUsdCl7cmV0dXJuInRyYW5zbD0KYXRlKCIraSh1KGUsdCkpKyIsMCkifSk7SC5zdHlsZSgiZmls bCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsbix0KX0pLnN0PQp5bGUoInN0cm9rZSIsZnVu Y3Rpb24oZSx0LG4pe3JldHVybiBwKGUsbix0KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQs bik9CntkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSx4LmVsZW1lbnRNb3VzZW92 ZXIoe3ZhbHVlOmEodCxuKSxwb2ludD0KOnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbaSh1KHQs bikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5ndGgvMjp0LnNlcmllcysuPQo1KS9lLmxlbmd0aCxz KGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6 ZDMuZXY9CmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlz KS5jbGFzc2VkKCJob3ZlciIsITEpLHguZT0KbGVtZW50TW91c2VvdXQoe3ZhbHVlOmEodCxuKSxw b2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb2ludEluZGV4Om4sc2VyaWVzPQpJbmRleDp0LnNl cmllcyxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKHQsbil7eC5lbGVtZW50Q2xp Y2soe3ZhbHU9CmU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbaSh1KHQs bikpK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5ndD0KaC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxz KGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuPQpzZXJpZXMs ZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixm dW5jdGlvbih0LG49Cil7eC5lbGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNl cmllczplW3Quc2VyaWVzXSxwb3M6W2kodSh0LG4pKT0KK2kucmFuZ2VCYW5kKCkqKGM/ZS5sZW5n dGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgscyhhKHQsbikrKGM/dC55MDowKSldLHBvPQppbnRJ bmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJv cGFnYXRpb24oKX0pLEg9Ci5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQp PDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdD0KaXZlIn0pLmF0dHIoInRyYW5zZm9y bSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIraSh1KGUsdCkpKyIsMCkifSksPQp2 JiYobXx8KG09M0RlLm1hcChmdW5jdGlvbigpe3JldHVybiEwfSkpLEguc3R5bGUoImZpbGwiLGZ1 bmN0aW9uKGUsdCxuKXtyZXQ9CnVybiBkMy5yZ2IodihlLHQpKS5kYXJrZXIobS5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihlLD0KdCl7cmV0dXJuIW1bdF19KVtu XSkudG9TdHJpbmcoKX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMu PQpyZ2IodihlLHQpKS5kYXJrZXIobS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRl cihmdW5jdGlvbihlLHQpe3JldHU9CnJuIW1bdF19KVtuXSkudG9TdHJpbmcoKX0pKSxjP0guYXR0 cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhjP2UueTE6MCl9KT0KLmF0dHIoImhlaWdodCIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocyhlLnkrKGM/ZS55MDowKSkt cyhjPQo/ZS55MDowKSksMSl9KS5hdHRyKCJ4IixmdW5jdGlvbih0LG4pe3JldHVybiBjPzA6dC5z ZXJpZXMqaS5yYW5nZUJhbmQoKS9lLmw9CmVuZ3RofSkuYXR0cigid2lkdGgiLGkucmFuZ2VCYW5k KCkvKGM/MTplLmxlbmd0aCkpOkguYXR0cigieCIsZnVuY3Rpb24odCxuKT0Ke3JldHVybiB0LnNl cmllcyppLnJhbmdlQmFuZCgpL2UubGVuZ3RofSkuYXR0cigid2lkdGgiLGkucmFuZ2VCYW5kKCkv ZS5sZW5nPQp0aCkuYXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/cygwKTpz KDApLXMoYShlLHQpKTwxP3MoMCktMTpzKGE9CihlLHQpKXx8MH0pLmF0dHIoImhlaWdodCIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocyhhKGUsdCkpLT0KcygwKSksMSl8 fDB9KSxUPTNEaS5jb3B5KCksTj0zRHMuY29weSgpfSksQ312YXIgdD0zRHt0b3A6MCxyaWdodDow LGJvdHRvbTowPQosbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRGQzLnNjYWxlLm9yZGluYWwo KSxzPTNEZDMuc2NhbGUubGluZWFyKCksbz0zRE09CmF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFl NCksdT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9M0RmdW5jdGlvbihlKXtyZT0KdHVybiBl Lnl9LGY9M0RbMF0sbD0zRCEwLGM9M0QhMSxoPTNEInplcm8iLHA9M0RlLnV0aWxzLmRlZmF1bHRD b2xvcigpLGQ9M0QhPQoxLHY9M0RudWxsLG0sZz0zRDEyMDAseSxiLHcsRSxTPTNELjEseD0zRGQz LmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudEM9CmxpY2siLCJlbGVtZW50RGJsQ2xpY2si LCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IiksVCxOO3JldHVybiBDLj0KZGlz cGF0Y2g9M0R4LEMub3B0aW9ucz0zRGUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChDKSxDLng9M0Rm dW5jdGlvbihlKXtyZXR1PQpybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZSxDKTp1fSxDLnk9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD89CihhPTNEZSxDKTphfSxDLm1hcmdp bj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVvZj0K IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5yaWdo dCE9M0QidW5kZWZpbmVkIj9lPQoucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLmJv dHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSw9CnQubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxDKTp0fSxDLndpZHRoPTNEZnVuY3Rp bz0KbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsQyk6bn0sQy5oZWlnaHQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhyPTNEZSxDKTpyfSxDLnhTY2Fs ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyg9Cmk9M0RlLEMpOml9LEMu eVNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLEMpOnN9 LEMueD0KRG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0Rl LEMpOnl9LEMueURvbWFpbj0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KGI9M0RlLEMpOmJ9LEMueFJhbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGE9CnJndW1lbnRzLmxl bmd0aD8odz0zRGUsQyk6d30sQy55UmFuZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD0KPyhFPTNEZSxDKTpFfSxDLmZvcmNlWT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhmPTNEZSxDKTpmfSxDPQouc3RhY2tlZD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxDKTpjfSxDLnN0YWNrT2Zmc2V0PQo9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5jbGlwRWRnZT0zRGZ1 bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEMpOmx9LEMuY29sb3I9 M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhwPTNEZS51dGlscy5nZXRD b2xvcih0KSxDKTpwfSxDLmJhckNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyPQpndW1lbnRz Lmxlbmd0aD8odj0zRGUudXRpbHMuZ2V0Q29sb3IodCksQyk6dn0sQy5kaXNhYmxlZD0zRGZ1bmN0 aW9uKGUpe3JldHU9CnJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEMpOm19LEMuaWQ9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD0KPyhvPTNEZSxDKTpvfSxDLmhpZGVhYmxl PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9M0RlLEMpOmR9PQosQy5k ZWxheT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPTNEZSxDKTpnfSxD Lmdyb3VwU3BhY2luZz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9 M0RlLEMpOlN9LEN9LGUubW9kZWxzLm11bHRpQmFyQ2hhPQpydD0zRGZ1bmN0aW9uKCl7ZnVuY3Rp b24gQShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBiPTNEZDMuc2VsZWN0KHQ9Cmhp cyksaz0zRHRoaXMsTz0zRCh1fHxwYXJzZUludChiLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1vLmxl ZnQtby5yaWdodCxNPTNEKD0KYXx8cGFyc2VJbnQoYi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8u dG9wLW8uYm90dG9tO0EudXBkYXRlPTNEZnVuY3Rpb24oKXtiPQouY2FsbChBKX0sQS5jb250YWlu ZXI9M0R0aGlzLFMuZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWI9 CmxlZH0pO2lmKCF4KXt2YXIgXzt4PTNEe307Zm9yKF8gaW4gUylTW19daW5zdGFuY2VvZiBBcnJh eT94W19dPTNEU1tfXS5zbGljZT0KKDApOnhbX109M0RTW19dfWlmKCFlfHwhZS5sZW5ndGh8fCFl LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuPQpndGh9KS5sZW5ndGgpe3Zh ciBEPTNEYi5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEQuZW50ZXIo KS49CmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJk eSIsIi0uN2VtIikuc3R5bGUoInRleD0KdC1hbmNob3IiLCJtaWRkbGUiKSxELmF0dHIoIngiLG8u bGVmdCtPLzIpLmF0dHIoInkiLG8udG9wK00vMikudGV4dChmdW5jdGlvPQpuKGUpe3JldHVybiBl fSksQX1iLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLHc9M0R0LnhTY2FsZSgpLEU9 M0R0Lnk9ClNjYWxlKCk7dmFyIFA9M0RiLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LW11bHRpQmFy V2l0aExlZ2VuZCIpLmRhdGEoW2VdKSxIPQo9M0RQLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGlCYXJXaXRoTGVnZW5kIik9Ci5hcHBlbmQoImci KSxCPTNEUC5zZWxlY3QoImciKTtILmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1h eGlzIiksSD0KLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksSC5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhPQpyc1dyYXAiKSxILmFwcGVuZCgiZyIpLmF0dHIo ImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEguYXBwZW5kKCJnIikuYXR0cigiY2w9CmFzcyIsIm52 LWNvbnRyb2xzV3JhcCIpLGMmJihpLndpZHRoKE8tQygpKSx0LmJhckNvbG9yKCkmJmUuZm9yRWFj aChmdW5jdGlvbj0KKGUsdCl7ZS5jb2xvcj0zRGQzLnJnYigiI2NjYyIpLmRhcmtlcih0KjEuNSku dG9TdHJpbmcoKX0pLEIuc2VsZWN0KCIubnYtbGVnPQplbmRXcmFwIikuZGF0dW0oZSkuY2FsbChp KSxvLnRvcCE9M0RpLmhlaWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLE09M0QoYXw9CnxwYXJz ZUludChiLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLEIuc2VsZWN0KCIu bnYtbGVnZW5kV3JhcD0KIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQygpKyIsIisg LW8udG9wKyIpIikpO2lmKGwpe3ZhciBqPTNEW3trZXk6PQoiR3JvdXBlZCIsZGlzYWJsZWQ6dC5z dGFja2VkKCl9LHtrZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0LnN0YWNrZWQoKX1dO3Mud2k9CmR0 aChDKCkpLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0pLEIuc2VsZWN0KCIubnYtY29udHJv bHNXcmFwIikuZGF0dW0oaj0KKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtby50 b3ArIikiKS5jYWxsKHMpfVAuYXR0cigidHJhbnNmb3JtIiwiPQp0cmFuc2xhdGUoIitvLmxlZnQr IiwiK28udG9wKyIpIiksZCYmQi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Y9 Cm9ybSIsInRyYW5zbGF0ZSgiK08rIiwwKSIpLHQuZGlzYWJsZWQoZS5tYXAoZnVuY3Rpb24oZSl7 cmV0dXJuIGUuZGlzYWJsZWR9KT0KKS53aWR0aChPKS5oZWlnaHQoTSkuY29sb3IoZS5tYXAoZnVu Y3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8ZihlLHQpfSkuZmlsPQp0ZXIoZnVuY3Rpb24odCxu KXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKTt2YXIgRj0zREIuc2VsZWN0KCIubnYtYmFyc1dyYXAi KS49CmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpO0YuY2Fs bCh0KTtpZihoKXtuLnNjYWxlKHcpLj0KdGlja3MoTy8xMDApLnRpY2tTaXplKC1NLDApLEIuc2Vs ZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhPQpuc2xhdGUoMCwiK0Uu cmFuZ2UoKVswXSsiKSIpLEIuc2VsZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuKTt2YXIgST0z REIuc2U9CmxlY3QoIi5udi14Lm52LWF4aXMgPiBnIikuc2VsZWN0QWxsKCJnIik7SS5zZWxlY3RB bGwoImxpbmUsIHRleHQiKS5zdHlsZSgibz0KcGFjaXR5IiwxKTtpZihtKXt2YXIgcT0zRGZ1bmN0 aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK2UrIiwiK3QrIikifSxSPTNEPQo1LFU9M0QxNztJ LnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0LG4pe3JldHVy biBxKDAsbiU9CjI9M0Q9M0QwP1I6VSl9KTt2YXIgej0zRGQzLnNlbGVjdEFsbCgiLm52LXgubnYt YXhpcyAubnYtd3JhcCBnIGcgdGV4dCIpWzBdLj0KbGVuZ3RoO0Iuc2VsZWN0QWxsKCIubnYteC5u di1heGlzIC5udi1heGlzTWF4TWluIHRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1PQpuY3Rpb24o ZSx0KXtyZXR1cm4gcSgwLHQ9M0Q9M0Q9M0QwfHx6JTIhPTNEPTNEMD9VOlIpfSl9diYmSS5maWx0 ZXIoZnVuY3Rpb249Cih0LG4pe3JldHVybiBuJU1hdGguY2VpbChlWzBdLnZhbHVlcy5sZW5ndGgv KE8vMTAwKSkhPTNEPTNEMH0pLnNlbGVjdEFsbCgidD0KZXh0LCBsaW5lIikuc3R5bGUoIm9wYWNp dHkiLDApLGcmJkkuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigidHJhbnNmb3JtPQoiLCJy b3RhdGUoIitnKyIgMCwwKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZz4wPyJzdGFydCI6ImVuZCIp LEIuc2VsZWN0KCIubnY9Ci14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiB0 ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfXAmJihyLnNjYT0KbGUoRSkudGlja3MoTS8zNikudGlj a1NpemUoLU8sMCksQi5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKSxpLmRpc3BhPQp0 Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtTPTNEZSxOLnN0YXRlQ2hhbmdlKFMpLEEu dXBkYXRlKCl9KSxzLmRpc3A9CmF0Y2gub24oImxlZ2VuZENsaWNrIixmdW5jdGlvbihlLG4pe2lm KCFlLmRpc2FibGVkKXJldHVybjtqPTNEai5tYXAoZnVuY3Rpbz0KbihlKXtyZXR1cm4gZS5kaXNh YmxlZD0zRCEwLGV9KSxlLmRpc2FibGVkPTNEITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQi PQo6dC5zdGFja2VkKCExKTticmVhaztjYXNlIlN0YWNrZWQiOnQuc3RhY2tlZCghMCl9Uy5zdGFj a2VkPTNEdC5zdGFja2VkKCksTi49CnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRlKCl9KSxOLm9uKCJ0 b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7eSYmTChlLGsucGFyZW50Tj0Kb2RlKX0pLE4ub24oImNo YW5nZVN0YXRlIixmdW5jdGlvbihuKXt0eXBlb2Ygbi5kaXNhYmxlZCE9M0QidW5kZWZpbmVkIiYm KGUuPQpmb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxlZD0zRG4uZGlzYWJsZWRbdF19KSxT LmRpc2FibGVkPTNEbi5kaXNhYmxlZCk9Cix0eXBlb2Ygbi5zdGFja2VkIT0zRCJ1bmRlZmluZWQi JiYodC5zdGFja2VkKG4uc3RhY2tlZCksUy5zdGFja2VkPTNEbi5zdGFjaz0KZWQpLEEudXBkYXRl KCl9KX0pLEF9dmFyIHQ9M0RlLm1vZGVscy5tdWx0aUJhcigpLG49M0RlLm1vZGVscy5heGlzKCks cj0zRGUuPQptb2RlbHMuYXhpcygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHMu bGVnZW5kKCksbz0zRHt0b3A6MzAscmlnaHQ9CjoyMCxib3R0b206NTAsbGVmdDo2MH0sdT0zRG51 bGwsYT0zRG51bGwsZj0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksbD0zRCEwLD0KYz0zRCEwLGg9 M0QhMCxwPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEITEsZz0zRDAseT0zRCEwLGI9M0RmdW5jdGlv bihlLHQsbixyPQosaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgb24gIit0KyI8 L3A+In0sdyxFLFM9M0R7c3RhY2tlZDohMX0seD0KPTNEbnVsbCxUPTNEIk5vIERhdGEgQXZhaWxh YmxlLiIsTj0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlPQoiLCJzdGF0 ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksQz0zRGZ1bmN0aW9uKCl7cmV0dXJuIGw/MTgwOjB9LGs9 M0QwO3Quc3RhY2s9CmVkKCExKSxuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNykuaGln aGxpZ2h0WmVybyghMCkuc2hvd01heE1pbighMSkudD0KaWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3Jl dHVybiBlfSksci5vcmllbnQoZD8icmlnaHQiOiJsZWZ0IikudGlja0Zvcm1hdChkMy5mPQpvcm1h dCgiLC4xZiIpKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTD0zRGZ1bmN0aW9uKGkscyl7dmFyIG89 M0RpLnBvc1swXSsocy49Cm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8 fDApLGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaT0KbnQsaS5wb2ludEluZGV4KSksZj0z RHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRGIoaS5zPQpl cmllcy5rZXksYSxmLGksQSk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJz IixudWxsLHMpfTtyZXR1cm49CiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0 aXAiLGZ1bmN0aW9uKGUpe2UucG9zPTNEW2UucG9zWzBdK28ubD0KZWZ0LGUucG9zWzFdK28udG9w XSxOLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0 PQppcCIsZnVuY3Rpb24oZSl7Ti50b29sdGlwSGlkZShlKX0pLE4ub24oInRvb2x0aXBIaWRlIixm dW5jdGlvbigpe3kmJmUudG9vbHQ9CmlwLmNsZWFudXAoKX0pLEEuZGlzcGF0Y2g9M0ROLEEubXVs dGliYXI9M0R0LEEubGVnZW5kPTNEaSxBLnhBeGlzPTNEbixBLnlBeD0KaXM9M0RyLGQzLnJlYmlu ZChBLHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3Jj ZVgiPQosImZvcmNlWSIsImNsaXBFZGdlIiwiaWQiLCJzdGFja2VkIiwic3RhY2tPZmZzZXQiLCJk ZWxheSIsImJhckNvbG9yIiwiZ3JvdXA9ClNwYWNpbmciKSxBLm9wdGlvbnM9M0RlLnV0aWxzLm9w dGlvbnNGdW5jLmJpbmQoQSksQS5tYXJnaW49M0RmdW5jdGlvbihlKXtyZT0KdHVybiBhcmd1bWVu dHMubGVuZ3RoPyhvLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpvLnRv cCxvLnJpPQpnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0Om8ucmln aHQsby5ib3R0b209M0R0eXBlb2YgZS5ib3Q9CnRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTpv LmJvdHRvbSxvLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiPz0KZS5sZWZ0Om8u bGVmdCxBKTpvfSxBLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ KHU9M0RlLEEpPQo6dX0sQS5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD8oYT0zRGUsQSk6YX0sQS5jb2xvcj0zRGY9CnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGY9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoZiksQSk6Zj0KfSxBLnNo b3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNEZSxB KTpsfSxBLnNob3dMPQplZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro PyhjPTNEZSxBKTpjfSxBLnNob3dYQXhpcz0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KGg9M0RlLEEpOmh9LEEuc2hvd1lBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dT0Kcm4g YXJndW1lbnRzLmxlbmd0aD8ocD0zRGUsQSk6cH0sQS5yaWdodEFsaWduWUF4aXM9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhkPTNEZSxyLm9yaWVudChlPyJyaWdodCI6 ImxlZnQiKSxBKTpkfSxBLnJlZHVjZVhUaWNrcz0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHY9M0RlLEEpOnZ9LEEucm90YXRlTGFiZWxzPTNEZnVuY3Rpb24oZSl7cj0K ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsQSk6Z30sQS5zdGFnZ2VyTGFiZWxzPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyPQpndW1lbnRzLmxlbmd0aD8obT0zRGUsQSk6bX0sQS50b29sdGlw PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9Cj8oYj0zRGUsQSk6Yn0sQS50 b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxBKTp5 fT0KLEEudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oYj0zRGUsQSk6Yn0sQS5zdGF0PQplPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KFM9M0RlLEEpOlN9LEEuZGVmYXVsdFN0YXRlPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oeD0zRGUsQSk6eH0sQS5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhUPTNEZSxBKTpUfSxBLnRyYW5zaXRpb25EdXJhdGlvbj0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1PQptZW50cy5sZW5ndGg/KGs9M0RlLEEpOmt9LEF9LGUu bW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbD0zRGZ1bmN0aW9uKCl7ZnVuY3Q9CmlvbiBDKGUpe3Jl dHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9M0RuLXQubGVmdC10LnJpZ2h0LHk9M0RyLXQu dG9wLXQuYj0Kb3R0b20sQz0zRGQzLnNlbGVjdCh0aGlzKTtwJiYoZT0zRGQzLmxheW91dC5zdGFj aygpLm9mZnNldCgiemVybyIpLnZhbHVlcyhmPQp1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30p LnkoYSkoZSkpLGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2UudmFsdWVzLmZvckU9CmFjaChmdW5j dGlvbihlKXtlLnNlcmllcz0zRHR9KX0pLHAmJmVbMF0udmFsdWVzLm1hcChmdW5jdGlvbih0LG4p e3ZhciByPTNEMD0KLGk9M0QwO2UubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PTNEZS52YWx1ZXNbbl07 dC5zaXplPTNETWF0aC5hYnModC55KSx0Lnk8MD8oPQp0LnkxPTNEaS10LnNpemUsaS09M0R0LnNp emUpOih0LnkxPTNEcixyKz0zRHQuc2l6ZSl9KX0pO3ZhciBrPTNEYiYmdz9bXTplLm09CmFwKGZ1 bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUs dCkseTphKGUsdCkseT0KMDplLnkwLHkxOmUueTF9fSl9KTtzLmRvbWFpbihifHxkMy5tZXJnZShr KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yPQphbmdlQmFuZHMoRXx8WzAseV0sLjEp LG8uZG9tYWluKHd8fGQzLmV4dGVudChkMy5tZXJnZShrKS5tYXAoZnVuY3Rpb24oZSl7cmU9CnR1 cm4gcD9lLnk+MD9lLnkxK2UueTplLnkxOmUueX0pLmNvbmNhdChmKSkpLGQmJiFwP28ucmFuZ2Uo U3x8W28uZG9tYWluKClbMD0KXTwwP206MCxpLShvLmRvbWFpbigpWzFdPjA/bTowKV0pOm8ucmFu Z2UoU3x8WzAsaV0pLFQ9M0RUfHxzLE49M0ROfHxkMy5zY2FsPQplLmxpbmVhcigpLmRvbWFpbihv LmRvbWFpbigpKS5yYW5nZShbbygwKSxvKDApXSk7dmFyIEw9M0RkMy5zZWxlY3QodGhpcykuc2U9 CmxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aWJhckhvcml6b250YWwiKS5kYXRhKFtlXSksQT0z REwuZW50ZXIoKS5hcHBlbmQoIj0KZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11 bHRpYmFySG9yaXpvbnRhbCIpLE89M0RBLmFwcGVuZCgiZGVmcyIpPQosTT0zREEuYXBwZW5kKCJn IiksXz0zREwuc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3Vw cyI9CiksTC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIp Iik7dmFyIEQ9M0RMLnNlbGVjdCgiLj0KbnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAi KS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpPQp7cmV0dXJuIHR9KTtE LmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxZS02KS5zdHlsZSgi ZmlsbC09Cm9wYWNpdHkiLDFlLTYpLEQuZXhpdCgpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUt Nikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMT0KZS02KS5yZW1vdmUoKSxELmF0dHIoImNsYXNzIixm dW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0fSkuPQpjbGFzc2VkKCJo b3ZlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24o ZSx0KXtyZXQ9CnVybiBsKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVy biBsKGUsdCl9KSxELnN0eWxlKCJzdHJva2Utbz0KcGFjaXR5IiwxKS5zdHlsZSgiZmlsbC1vcGFj aXR5IiwuNzUpO3ZhciBQPTNERC5zZWxlY3RBbGwoImcubnYtYmFyIikuZGF0YShmPQp1bmN0aW9u KGUpe3JldHVybiBlLnZhbHVlc30pO1AuZXhpdCgpLnJlbW92ZSgpO3ZhciBIPTNEUC5lbnRlcigp LmFwcGVuZCgiZyI9CikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0LG4scil7cmV0dXJuInRy YW5zbGF0ZSgiK04ocD90LnkwOjApKyIsIisocD8wOj0KcipzLnJhbmdlQmFuZCgpL2UubGVuZ3Ro K3ModSh0LG4pKSkrIikifSk7SC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsMCkuPQphdHRy KCJoZWlnaHQiLHMucmFuZ2VCYW5kKCkvKHA/MTplLmxlbmd0aCkpLFAub24oIm1vdXNlb3ZlciIs ZnVuY3Rpb24odCxuKXs9CmQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLHguZWxl bWVudE1vdXNlb3Zlcih7dmFsdWU6YSh0LG4pLHBvaW50Oj0KdCxzZXJpZXM6ZVt0LnNlcmllc10s cG9zOltvKGEodCxuKSsocD90LnkwOjApKSxzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoocD9lPQou bGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6 dC5zZXJpZXMsZTpkMy5ldmU9Cm50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMu c2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSkseC5lbD0KZW1lbnRNb3VzZW91dCh7dmFs dWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJ PQpuZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXt4 LmVsZW1lbnRDbGljayh7dmFsdWU9CjphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10s cG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoocD9lLmxlbmd0aD0KLzI6dC5zZXJpZXMrLjUp L2UubGVuZ3RoLG8oYSh0LG4pKyhwP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6 dC5zPQplcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigi ZGJsY2xpY2siLGZ1bmN0aW9uKHQsbik9Cnt4LmVsZW1lbnREYmxDbGljayh7dmFsdWU6YSh0LG4p LHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikpKz0Kcy5yYW5nZUJhbmQo KSoocD9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxvKGEodCxuKSsocD90LnkwOjAp KV0scG9pPQpudEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2 ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksSC49CmFwcGVuZCgidGV4dCIpLGQmJiFwPyhQLnNlbGVj dCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbihlLHQpe3JldD0KdXJuIGEoZSx0 KTwwPyJlbmQiOiJzdGFydCJ9KS5hdHRyKCJ5IixzLnJhbmdlQmFuZCgpLyhlLmxlbmd0aCoyKSku YXR0cigiZHkiPQosIi4zMmVtIikudGV4dChmdW5jdGlvbihlLHQpe3JldHVybiBnKGEoZSx0KSl9 KSxQLnNlbGVjdCgidGV4dCIpLmF0dHIoIngiLGY9CnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQp PDA/LTQ6byhhKGUsdCkpLW8oMCkrNH0pKTpQLnNlbGVjdEFsbCgidGV4dCIpLnRleD0KdCgiIiks diYmIXA/KEguYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibnYtYmFyLWxhYmVsIiwhMCksUC5zZWxl Y3QoInRleHQubnYtPQpiYXItbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gYShlLHQpPDA/InN0YXJ0IjoiZW5kIn09CikuYXR0cigieSIscy5yYW5nZUJhbmQo KS8oZS5sZW5ndGgqMikpLmF0dHIoImR5IiwiLjMyZW0iKS50ZXh0KGZ1bmN0aW9uKGUsdD0KKXty ZXR1cm4gdShlLHQpfSksUC5zZWxlY3QoInRleHQubnYtYmFyLWxhYmVsIikuYXR0cigieCIsZnVu Y3Rpb24oZSx0KXtyZXR1PQpybiBhKGUsdCk8MD9vKDApLW8oYShlLHQpKSs0Oi00fSkpOlAuc2Vs ZWN0QWxsKCJ0ZXh0Lm52LWJhci1sYWJlbCIpLnRleHQoIiI9CiksUC5hdHRyKCJjbGFzcyIsZnVu Y3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwbz0K c2l0aXZlIn0pLGMmJihofHwoaD0zRGUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksUC5zdHls ZSgiZmlsbCIsZnVuY3Rpb24oPQplLHQsbil7cmV0dXJuIGQzLnJnYihjKGUsdCkpLmRhcmtlciho Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGY9CnVuY3Rpb24oZSx0KXtyZXR1 cm4haFt0XX0pW25dKS50b1N0cmluZygpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4p ez0KcmV0dXJuIGQzLnJnYihjKGUsdCkpLmRhcmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVy biB0fSkuZmlsdGVyKGZ1bmN0aW9uPQooZSx0KXtyZXR1cm4haFt0XX0pW25dKS50b1N0cmluZygp fSkpLHA/UC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmU9CnR1cm4idHJhbnNsYXRl KCIrbyhlLnkxKSsiLCIrcyh1KGUsdCkpKyIpIn0pLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRo IixmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKG8oYShlLHQpK2UueTApLW8oZS55MCkp fSkuYXR0cigiaGVpZ2h0IixzLnJhbmdlPQpCYW5kKCkpOlAuYXR0cigidHJhbnNmb3JtIixmdW5j dGlvbih0LG4pe3JldHVybiJ0cmFuc2xhdGUoIisoYSh0LG4pPDA/byhhKHQ9CixuKSk6bygwKSkr IiwiKyh0LnNlcmllcypzLnJhbmdlQmFuZCgpL2UubGVuZ3RoK3ModSh0LG4pKSkrIikifSkuc2Vs ZWN0KCJyZT0KY3QiKS5hdHRyKCJoZWlnaHQiLHMucmFuZ2VCYW5kKCkvZS5sZW5ndGgpLmF0dHIo IndpZHRoIixmdW5jdGlvbihlLHQpe3JldHVyPQpuIE1hdGgubWF4KE1hdGguYWJzKG8oYShlLHQp KS1vKDApKSwxKX0pLFQ9M0RzLmNvcHkoKSxOPTNEby5jb3B5KCl9KSxDfXZhciA9CnQ9M0R7dG9w OjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUwMCxpPTNETWF0aC5mbG9v cihNYXRoLnJhbj0KZG9tKCkqMWU0KSxzPTNEZDMuc2NhbGUub3JkaW5hbCgpLG89M0RkMy5zY2Fs ZS5saW5lYXIoKSx1PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGUueX0sZj0zRFswXSxsPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxjPQo9M0RudWxs LGgscD0zRCExLGQ9M0QhMSx2PTNEITEsbT0zRDYwLGc9M0RkMy5mb3JtYXQoIiwuMmYiKSx5PTNE MTIwMCxiLHcsRSw9ClMseD0zRGQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNr IiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdT0Kc2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0 IiksVCxOO3JldHVybiBDLmRpc3BhdGNoPTNEeCxDLm9wdGlvbnM9M0RlLnV0aWxzLm9wPQp0aW9u c0Z1bmMuYmluZChDKSxDLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o dT0zRGUsQyk6dX0sQy49Cnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o YT0zRGUsQyk6YX0sQy5tYXJnaW49M0RmdW5jdGlvbihlKT0Ke3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh0LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0PQou cmlnaHQ9M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5i b3R0b209M0R0eXBlb2YgZS49CmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRv bSx0LmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZT0KZCI/ZS5sZWZ0OnQubGVmdCxD KTp0fSxDLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49M0Rl PQosQyk6bn0sQy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o cj0zRGUsQyk6cn0sQy54U2NhbGU9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhzPTNEZSxDKTpzfSxDLnlTY2FsZT0zRGZ1bmN0aW9uKGUpez0KcmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KG89M0RlLEMpOm99LEMueERvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVuPQp0cy5sZW5ndGg/KGI9M0RlLEMpOmJ9LEMueURvbWFpbj0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh3PQo9M0RlLEMpOnd9LEMueFJhbmdlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEMpOkV9LEMueVI9CmFuZ2U9M0RmdW5jdGlv bihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsQyk6U30sQy5mb3JjZVk9M0RmdW5j dGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPTNEZSxDKTpmfSxDLnN0YWNrZWQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMubGVuZ3RoPyhwPTNEZSxDKTpwfSxDLmNv bG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Cj0zRGUudXRpbHMu Z2V0Q29sb3IodCksQyk6bH0sQy5iYXJDb2xvcj0zRGZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu dHMubGVuZz0KdGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQpLEMpOmN9LEMuZGlzYWJsZWQ9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhoPTNEZSxDKTpofSxDLmlkPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLEMpOmk9Cn0sQy5kZWxh eT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PTNEZSxDKTp5fSxDLnNo b3dWYWx1ZXM9Cj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxD KTpkfSxDLnNob3dCYXJMYWJlbHM9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh2PTNEZSxDKTp2fSxDLnZhbHVlRm9ybWF0PTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZz0zRGUsQyk6Z30sQy52YWx1ZVBhZGRpbmc9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW09CmVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxDfSxlLm1vZGVscy5tdWx0aUJh ckhvcml6b250YWxDaGFydD0zRGZ1bmN0aW9uKCl7Zj0KdW5jdGlvbiBDKGUpe3JldHVybiBlLmVh Y2goZnVuY3Rpb24oZSl7dmFyIGQ9M0RkMy5zZWxlY3QodGhpcyksbT0zRHRoaXMsVD0KPTNEKHV8 fHBhcnNlSW50KGQuc3R5bGUoIndpZHRoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LGs9M0QoYXx8 cGFyc2VJbnQoZC5zPQp0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5ib3R0b207Qy51cGRh dGU9M0RmdW5jdGlvbigpe2QuY2FsbChDKX0sQy5jb249CnRhaW5lcj0zRHRoaXMsYi5kaXNhYmxl ZD0zRGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YT0KciBM O3c9M0R7fTtmb3IoTCBpbiBiKWJbTF1pbnN0YW5jZW9mIEFycmF5P3dbTF09M0RiW0xdLnNsaWNl KDApOndbTF09M0RiW0xdPQp9aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUp e3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3Y9CmFyIEE9M0RkLnNlbGVjdEFsbCgi Lm52LW5vRGF0YSIpLmRhdGEoW0VdKTtyZXR1cm4gQS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLj0K YXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgi dGV4dC1hbmNob3IiLCJtaWRkPQpsZSIpLEEuYXR0cigieCIsby5sZWZ0K1QvMikuYXR0cigieSIs by50b3Aray8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSk9CixDfWQuc2VsZWN0QWxsKCIu bnYtbm9EYXRhIikucmVtb3ZlKCksZz0zRHQueFNjYWxlKCkseT0zRHQueVNjYWxlKCk7dmFyIE89 Cj0zRGQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5k YXRhKFtlXSksTT0zRE8uZW50ZT0KcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBu di13cmFwIG52LW11bHRpQmFySG9yaXpvbnRhbENoYXJ0IikuYXBwPQplbmQoImciKSxfPTNETy5z ZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5h cHA9CmVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIikuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi16ZXJvTGluZT0KIikuYXBwZW5kKCJsaW5lIiksTS5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksTS5hcHBlbmQoImciKS5hPQp0dHIoImNsYXNzIiwi bnYtbGVnZW5kV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dy YXAiKSw9CmMmJihpLndpZHRoKFQteCgpKSx0LmJhckNvbG9yKCkmJmUuZm9yRWFjaChmdW5jdGlv bihlLHQpe2UuY29sb3I9M0RkMy5yZ2IoIj0KI2NjYyIpLmRhcmtlcih0KjEuNSkudG9TdHJpbmco KX0pLF8uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoPQppKSxvLnRvcCE9 M0RpLmhlaWdodCgpJiYoby50b3A9M0RpLmhlaWdodCgpLGs9M0QoYXx8cGFyc2VJbnQoZC5zdHls ZSgiaGVpZ2g9CnQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLF8uc2VsZWN0KCIubnYtbGVnZW5k V3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYT0KbnNsYXRlKCIreCgpKyIsIisgLW8udG9wKyIp IikpO2lmKGwpe3ZhciBEPTNEW3trZXk6Ikdyb3VwZWQiLGRpc2FibGVkOnQuc3RhPQpja2VkKCl9 LHtrZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0LnN0YWNrZWQoKX1dO3Mud2lkdGgoeCgpKS5jb2xv cihbIiM0NDQiLCI9CiM0NDQiLCIjNDQ0Il0pLF8uc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIiku ZGF0dW0oRCkuYXR0cigidHJhbnNmb3JtIiwidHJhbj0Kc2xhdGUoMCwiKyAtby50b3ArIikiKS5j YWxsKHMpfU8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5sZWZ0KyIsIitvPQoudG9w KyIpIiksdC5kaXNhYmxlZChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZH0pKS53 aWR0aChUKS5oZWlnaHQ9CihrKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNv bG9yfHxmKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKT0Ke3JldHVybiFlW25dLmRpc2FibGVk fSkpO3ZhciBQPTNEXy5zZWxlY3QoIi5udi1iYXJzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1PQpu Y3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7UC5jYWxsKHQpO2lmKGgpe24uc2NhbGUoZyku dGlja3Moay8yNCkudGlja1M9Cml6ZSgtVCwwKSxfLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNh bGwobik7dmFyIEg9M0RfLnNlbGVjdCgiLm52LXgubnYtYXhpcz0KIikuc2VsZWN0QWxsKCJnIik7 SC5zZWxlY3RBbGwoImxpbmUsIHRleHQiKX1wJiYoci5zY2FsZSh5KS50aWNrcyhULzEwMCkudGlj PQprU2l6ZSgtaywwKSxfLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgwLCIraysiKSI9CiksXy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIp KSxfLnNlbGVjdCgiLm52LXplcm9MaW5lIGxpbmUiKS5hdHRyKCJ4MT0KIix5KDApKS5hdHRyKCJ4 MiIseSgwKSkuYXR0cigieTEiLDApLmF0dHIoInkyIiwtayksaS5kaXNwYXRjaC5vbigic3RhdGVD aGFuPQpnZSIsZnVuY3Rpb24oZSl7Yj0zRGUsUy5zdGF0ZUNoYW5nZShiKSxDLnVwZGF0ZSgpfSks cy5kaXNwYXRjaC5vbigibGVnZW5kQ2w9CmljayIsZnVuY3Rpb24oZSxuKXtpZighZS5kaXNhYmxl ZClyZXR1cm47RD0zREQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpcz0KYWJsZWQ9M0QhMCxl fSksZS5kaXNhYmxlZD0zRCExO3N3aXRjaChlLmtleSl7Y2FzZSJHcm91cGVkIjp0LnN0YWNrZWQo ITEpO2JyPQplYWs7Y2FzZSJTdGFja2VkIjp0LnN0YWNrZWQoITApfWIuc3RhY2tlZD0zRHQuc3Rh Y2tlZCgpLFMuc3RhdGVDaGFuZ2UoYiksQy49CnVwZGF0ZSgpfSksUy5vbigidG9vbHRpcFNob3ci LGZ1bmN0aW9uKGUpe3YmJk4oZSxtLnBhcmVudE5vZGUpfSksUy5vbigiY2hhbj0KZ2VTdGF0ZSIs ZnVuY3Rpb24obil7dHlwZW9mIG4uZGlzYWJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2go ZnVuY3Rpb24oPQplLHQpe2UuZGlzYWJsZWQ9M0RuLmRpc2FibGVkW3RdfSksYi5kaXNhYmxlZD0z RG4uZGlzYWJsZWQpLHR5cGVvZiBuLnN0YWNrZWQ9CiE9M0QidW5kZWZpbmVkIiYmKHQuc3RhY2tl ZChuLnN0YWNrZWQpLGIuc3RhY2tlZD0zRG4uc3RhY2tlZCksQy51cGRhdGUoKX0pfT0KKSxDfXZh ciB0PTNEZS5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsKCksbj0zRGUubW9kZWxzLmF4aXMoKSxy PTNEZS5tb2RlbHMuPQpheGlzKCksaT0zRGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgzMCkscz0z RGUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgzMCksbz0KPTNEe3RvcDozMCxyaWdodDoyMCxib3R0 b206NTAsbGVmdDo2MH0sdT0zRG51bGwsYT0zRG51bGwsZj0zRGUudXRpbHMuZGVmYXVsPQp0Q29s b3IoKSxsPTNEITAsYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCExLHY9M0QhMCxtPTNEZnVuY3Rp b24oZSx0LG4scixpKXs9CnJldHVybiI8aDM+IitlKyIgLSAiK3QrIjwvaDM+IisiPHA+IituKyI8 L3A+In0sZyx5LGI9M0R7c3RhY2tlZDpkfSx3PTNEbnVsbD0KLEU9M0QiTm8gRGF0YSBBdmFpbGFi bGUuIixTPTNEZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0PQpl Q2hhbmdlIiwiY2hhbmdlU3RhdGUiKSx4PTNEZnVuY3Rpb24oKXtyZXR1cm4gbD8xODA6MH0sVD0z RDA7dC5zdGFja2VkKGQpLG49Ci5vcmllbnQoImxlZnQiKS50aWNrUGFkZGluZyg1KS5oaWdobGln aHRaZXJvKCExKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0KD0KZnVuY3Rpb24oZSl7cmV0dXJu IGV9KSxyLm9yaWVudCgiYm90dG9tIikudGlja0Zvcm1hdChkMy5mb3JtYXQoIiwuMWYiKSkscy51 PQpwZGF0ZVN0YXRlKCExKTt2YXIgTj0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvc1swXSso cy5vZmZzZXRMZWZ0fHwwKSx1PQo9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9M0RuLnRp Y2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCk9CiksZj0zRHIudGlja0Zvcm1h dCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0zRG0oaS5zZXJpZXMua2V5LGEsZixp LD0KQyk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/ImUiOiJ3IixudWxsLHMpfTty ZXR1cm4gdC5kaXNwYXRjaC5vbigiPQplbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9u KGUpe2UucG9zPTNEW2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnQ9Cm9wXSxTLnRvb2x0aXBT aG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9u KGUpez0KUy50b29sdGlwSGlkZShlKX0pLFMub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3Ym JmUudG9vbHRpcC5jbGVhbnVwKCl9KSxDPQouZGlzcGF0Y2g9M0RTLEMubXVsdGliYXI9M0R0LEMu bGVnZW5kPTNEaSxDLnhBeGlzPTNEbixDLnlBeGlzPTNEcixkMy5yZWJpbmQ9CihDLHQsIngiLCJ5 IiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVki LCJjbGlwRT0KZGdlIiwiaWQiLCJkZWxheSIsInNob3dWYWx1ZXMiLCJzaG93QmFyTGFiZWxzIiwi dmFsdWVGb3JtYXQiLCJzdGFja2VkIiwiYmFyPQpDb2xvciIpLEMub3B0aW9ucz0zRGUudXRpbHMu b3B0aW9uc0Z1bmMuYmluZChDKSxDLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHU9CnJuIGFyZ3Vt ZW50cy5sZW5ndGg/KG8udG9wPTNEdHlwZW9mIGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOm8u dG9wLG8ucmlnaD0KdD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6by5y aWdodCxvLmJvdHRvbT0zRHR5cGVvZiBlLmJvdHRvPQptIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9t Om8uYm90dG9tLG8ubGVmdD0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS49CmxlZnQ6 by5sZWZ0LEMpOm99LEMud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8odT0zRGUsQyk6dT0KfSxDLmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhhPTNEZSxDKTphfSxDLmNvbG9yPTNEZnVuPQpjdGlvbih0KXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oZj0zRGUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihmKSxDKTpmfSw9CkMu c2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0Rl LEMpOmx9LEMuc2hvd0xlZz0KZW5kPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGM9M0RlLEMpOmN9LEMuc2hvd1hBeGlzPTNEZnVuY3RpPQpvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8oaD0zRGUsQyk6aH0sQy5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm49 CiBhcmd1bWVudHMubGVuZ3RoPyhwPTNEZSxDKTpwfSxDLnRvb2x0aXA9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyhtPTNEZSxDKTptfSxDLnRvb2x0aXBzPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9M0RlLEMpPQo6dn0sQy50b29sdGlwQ29u dGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxDKTptfSxD LnM9CnRhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsQyk6 Yn0sQy5kZWZhdWx0U3RhdGU9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro Pyh3PTNEZSxDKTp3fSxDLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5s ZW5ndGg/KEU9M0RlLEMpOkV9LEMudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGE9CnJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQyk6VH0sQ30sZS5tb2RlbHMubXVsdGlDaGFy dD0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQz0KKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7 dmFyIHU9M0RkMy5zZWxlY3QodGhpcyksZj0zRHRoaXM7Qy51cGRhdGU9M0RmPQp1bmN0aW9uKCl7 dS5jYWxsKEMpfSxDLmNvbnRhaW5lcj0zRHRoaXM7dmFyIGs9M0Qocnx8cGFyc2VJbnQodS5zdHls ZSgid2lkdGg9CiIpKXx8OTYwKS10LmxlZnQtdC5yaWdodCxMPTNEKGl8fHBhcnNlSW50KHUuc3R5 bGUoImhlaWdodCIpKXx8NDAwKS10LnRvcC10Lj0KYm90dG9tLEE9M0RlLmZpbHRlcihmdW5jdGlv bihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPTNEPTNEImxpbmUiJiZlLnlBPQp4aXM9M0Q9 M0QxfSksTz0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9 M0Q9M0QibGluZSI9CiYmZS55QXhpcz0zRD0zRDJ9KSxNPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7 cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT0zRD0zRD0KImJhciImJmUueUF4aXM9M0Q9M0QxfSks Xz0zRGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9Cj0zRD0z RCJiYXIiJiZlLnlBeGlzPTNEPTNEMn0pLEQ9M0RlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4h ZS5kaXNhYmxlZCYmZT0KLnR5cGU9M0Q9M0QiYXJlYSImJmUueUF4aXM9M0Q9M0QxfSksUD0zRGUu ZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FiPQpsZWQmJmUudHlwZT0zRD0zRCJhcmVh IiYmZS55QXhpcz0zRD0zRDJ9KSxIPTNEZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWU9Ci5k aXNhYmxlZCYmZS55QXhpcz0zRD0zRDF9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVz Lm1hcChmdW5jdGlvbihlLD0KdCl7cmV0dXJue3g6ZS54LHk6ZS55fX0pfSksQj0zRGUuZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnlBPQp4aXM9M0Q9M0QyfSkubWFwKGZ1 bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDplLng9 Cix5OmUueX19KX0pO2EuZG9tYWluKGQzLmV4dGVudChkMy5tZXJnZShILmNvbmNhdChCKSksZnVu Y3Rpb24oZSl7cmV0dXJuIGUueD0KfSkpLnJhbmdlKFswLGtdKTt2YXIgaj0zRHUuc2VsZWN0QWxs KCJnLndyYXAubXVsdGlDaGFydCIpLmRhdGEoW2VdKSxGPTNEai5lPQpudGVyKCkuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJ3cmFwIG52ZDMgbXVsdGlDaGFydCIpLmFwcGVuZCgiZyIpO0YuYXBw ZW49CmQoImciKS5hdHRyKCJjbGFzcyIsInggYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xh c3MiLCJ5MSBheGlzIiksRi5hcHBlbj0KZCgiZyIpLmF0dHIoImNsYXNzIiwieTIgYXhpcyIpLEYu YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lczFXcmFwIiksRi5hPQpwcGVuZCgiZyIpLmF0 dHIoImNsYXNzIiwibGluZXMyV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXJz MVdyYXA9CiIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXJzMldyYXAiKSxGLmFwcGVu ZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhYz0KazFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsInN0YWNrMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzPQoiLCJsZWdlbmRX cmFwIik7dmFyIEk9M0RqLnNlbGVjdCgiZyIpO3MmJih4LndpZHRoKGsvMiksSS5zZWxlY3QoIi5s ZWdlbmRXcmE9CnAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtl eT0zRGUub3JpZ2luYWxLZXk9M0Q9M0Q9M0R1bj0KZGVmaW5lZD9lLmtleTplLm9yaWdpbmFsS2V5 LGUua2V5PTNEZS5vcmlnaW5hbEtleSsoZS55QXhpcz0zRD0zRDE/IiI6IiAocmlnPQpodCBheGlz KSIpLGV9KSkuY2FsbCh4KSx0LnRvcCE9M0R4LmhlaWdodCgpJiYodC50b3A9M0R4LmhlaWdodCgp LEw9M0QoaXx8cGE9CnJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdC50b3AtdC5ib3R0 b20pLEkuc2VsZWN0KCIubGVnZW5kV3JhcCIpLmF0dD0KcigidHJhbnNmb3JtIiwidHJhbnNsYXRl KCIray8yKyIsIisgLXQudG9wKyIpIikpLGQud2lkdGgoaykuaGVpZ2h0KEwpLmludGVyPQpwb2xh dGUoIm1vbm90b25lIikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8 blt0JW4ubGVuZ3RoXX09CikuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJs ZWQmJmVbbl0ueUF4aXM9M0Q9M0QxJiZlW25dLnR5cGU9Cj0zRD0zRCJsaW5lIn0pKSx2LndpZHRo KGspLmhlaWdodChMKS5pbnRlcnBvbGF0ZSgibW9ub3RvbmUiKS5jb2xvcihlLm1hcChmdT0KbmN0 aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24o dCxuKXtyZXR1cm4hZVtuPQpdLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMiYmZVtuXS50eXBl PTNEPTNEImxpbmUifSkpLG0ud2lkdGgoaykuaGVpZ2h0KEw9CikuY29sb3IoZS5tYXAoZnVuY3Rp b24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbj0K KHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9M0Q9M0QxJiZlW25dLnR5cGU9 M0Q9M0QiYmFyIn0pKSxnLndpPQpkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9u KGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS49CmZpbHRlcihmdW5jdGlvbih0 LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPTNEPTNEMiYmZVtuXS50eXBlPTNE PQo9M0QiYmFyIn0pKSx5LndpZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChmdW5jdGlvbihl LHQpe3JldHVybiBlLmNvbG9yfHw9Cm5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxu KXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz0zRD0zRD0KMSYmZVtuXS50eXBlPTNE PTNEImFyZWEifSkpLGIud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUs dCl7PQpyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4p e3JldHVybiFlW25dLmRpc2FibGVkJiY9CmVbbl0ueUF4aXM9M0Q9M0QyJiZlW25dLnR5cGU9M0Q9 M0QiYXJlYSJ9KSksSS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIj0KK3QubGVmdCsiLCIr dC50b3ArIikiKTt2YXIgcT0zREkuc2VsZWN0KCIubGluZXMxV3JhcCIpLmRhdHVtKEEpLFI9M0RJ LnNlbGVjPQp0KCIuYmFyczFXcmFwIikuZGF0dW0oTSksVT0zREkuc2VsZWN0KCIuc3RhY2sxV3Jh cCIpLmRhdHVtKEQpLHo9M0RJLnNlbGVjdCg9CiIubGluZXMyV3JhcCIpLmRhdHVtKE8pLFc9M0RJ LnNlbGVjdCgiLmJhcnMyV3JhcCIpLmRhdHVtKF8pLFg9M0RJLnNlbGVjdCgiLj0Kc3RhY2syV3Jh cCIpLmRhdHVtKFApLFY9M0RELmxlbmd0aD9ELm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1 ZXN9KS5yZWR1PQpjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLG4pe3Jl dHVybnt4OmUueCx5OmUueSt0W25dLnl9fSl9KS49CmNvbmNhdChbe3g6MCx5OjB9XSk6W10sJD0z RFAubGVuZ3RoP1AubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLnJlZD0KdWNlKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJue3g6ZS54LHk6ZS55 K3Rbbl0ueX19KX0pPQouY29uY2F0KFt7eDowLHk6MH1dKTpbXTtoLmRvbWFpbihsfHxkMy5leHRl bnQoZDMubWVyZ2UoSCkuY29uY2F0KFYpLGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGUueX0pKS5yYW5n ZShbMCxMXSkscC5kb21haW4oY3x8ZDMuZXh0ZW50KGQzLm1lcmdlKEIpLmNvbmNhdCgkKT0KLGZ1 bmN0aW9uKGUpe3JldHVybiBlLnl9KSkucmFuZ2UoWzAsTF0pLGQueURvbWFpbihoLmRvbWFpbigp KSxtLnlEb21haW4oaC5kPQpvbWFpbigpKSx5LnlEb21haW4oaC5kb21haW4oKSksdi55RG9tYWlu KHAuZG9tYWluKCkpLGcueURvbWFpbihwLmRvbWFpbigpKSw9CmIueURvbWFpbihwLmRvbWFpbigp KSxELmxlbmd0aCYmZDMudHJhbnNpdGlvbihVKS5jYWxsKHkpLFAubGVuZ3RoJiZkMy50cmFucz0K aXRpb24oWCkuY2FsbChiKSxNLmxlbmd0aCYmZDMudHJhbnNpdGlvbihSKS5jYWxsKG0pLF8ubGVu Z3RoJiZkMy50cmFuc2l0aW9uPQooVykuY2FsbChnKSxBLmxlbmd0aCYmZDMudHJhbnNpdGlvbihx KS5jYWxsKGQpLE8ubGVuZ3RoJiZkMy50cmFuc2l0aW9uKHopLmM9CmFsbCh2KSx3LnRpY2tzKGsv MTAwKS50aWNrU2l6ZSgtTCwwKSxJLnNlbGVjdCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIs Ij0KdHJhbnNsYXRlKDAsIitMKyIpIiksZDMudHJhbnNpdGlvbihJLnNlbGVjdCgiLnguYXhpcyIp KS5jYWxsKHcpLEUudGlja3MoTC8zPQo2KS50aWNrU2l6ZSgtaywwKSxkMy50cmFuc2l0aW9uKEku c2VsZWN0KCIueTEuYXhpcyIpKS5jYWxsKEUpLFMudGlja3MoTC8zNik9Ci50aWNrU2l6ZSgtayww KSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0KCIueTIuYXhpcyIpKS5jYWxsKFMpLEkuc2VsZWN0KCIu eTIuYT0KeGlzIikuc3R5bGUoIm9wYWNpdHkiLEIubGVuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3Jt IiwidHJhbnNsYXRlKCIrYS5yYW5nZSgpPQpbMV0rIiwwKSIpLHguZGlzcGF0Y2gub24oInN0YXRl Q2hhbmdlIixmdW5jdGlvbihlKXtDLnVwZGF0ZSgpfSksVC5vbigidG9vbHQ9CmlwU2hvdyIsZnVu Y3Rpb24oZSl7byYmTihlLGYucGFyZW50Tm9kZSl9KX0pLEN9dmFyIHQ9M0R7dG9wOjMwLHJpZ2h0 OjIwLGJvdD0KdG9tOjUwLGxlZnQ6NjB9LG49M0RkMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2Uo KSxyPTNEbnVsbCxpPTNEbnVsbCxzPTNEITAsPQpvPTNEITAsdT0zRGZ1bmN0aW9uKGUsdCxuLHIs aSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A9Cj4ifSxhLGYs bCxjLGE9M0RkMy5zY2FsZS5saW5lYXIoKSxoPTNEZDMuc2NhbGUubGluZWFyKCkscD0zRGQzLnNj YWxlLmxpbmVhcj0KKCksZD0zRGUubW9kZWxzLmxpbmUoKS55U2NhbGUoaCksdj0zRGUubW9kZWxz LmxpbmUoKS55U2NhbGUocCksbT0zRGUubW9kZWxzPQoubXVsdGlCYXIoKS5zdGFja2VkKCExKS55 U2NhbGUoaCksZz0zRGUubW9kZWxzLm11bHRpQmFyKCkuc3RhY2tlZCghMSkueVNjYWw9CmUocCks eT0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCkueVNjYWxlKGgpLGI9M0RlLm1vZGVscy5zdGFja2Vk QXJlYSgpLnlTY2FsZT0KKHApLHc9M0RlLm1vZGVscy5heGlzKCkuc2NhbGUoYSkub3JpZW50KCJi b3R0b20iKS50aWNrUGFkZGluZyg1KSxFPTNEZS5tb2RlPQpscy5heGlzKCkuc2NhbGUoaCkub3Jp ZW50KCJsZWZ0IiksUz0zRGUubW9kZWxzLmF4aXMoKS5zY2FsZShwKS5vcmllbnQoInJpZ2g9CnQi KSx4PTNEZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxUPTNEZDMuZGlzcGF0Y2goInRvb2x0 aXBTaG93IiwidG9vbHRpcD0KSGlkZSIpLE49M0RmdW5jdGlvbih0LG4pe3ZhciByPTNEdC5wb3Nb MF0rKG4ub2Zmc2V0TGVmdHx8MCksaT0zRHQucG9zWzFdKyhuPQoub2Zmc2V0VG9wfHwwKSxzPTNE dy50aWNrRm9ybWF0KCkoZC54KCkodC5wb2ludCx0LnBvaW50SW5kZXgpKSxvPTNEKHQuc2VyaWU9 CnMueUF4aXM9M0Q9M0QyP1M6RSkudGlja0Zvcm1hdCgpKGQueSgpKHQucG9pbnQsdC5wb2ludElu ZGV4KSksYT0zRHUodC5zZXJpZT0Kcy5rZXkscyxvLHQsQyk7ZS50b29sdGlwLnNob3coW3IsaV0s YSx1bmRlZmluZWQsdW5kZWZpbmVkLG4ub2Zmc2V0UGFyZW50KX07PQpyZXR1cm4gZC5kaXNwYXRj aC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBv c1s9CjBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLGQuZGlzcGF0 Y2gub24oImVsZW1lbnRNb3VzZW91dD0KLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhp ZGUoZSl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvPQpvbHRpcCIsZnVuY3Rp b24oZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBT aG93KGU9Cil9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rp b24oZSl7VC50b29sdGlwSGlkZShlKX0pLD0KbS5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zl ci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlPQpmdCxlLnBvc1sx XSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLG0uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91 dC50b29sdGk9CnAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxnLmRpc3BhdGNoLm9u KCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLD0KZnVuY3Rpb24oZSl7ZS5wb3M9M0RbZS5wb3Nb MF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksZy5kPQppc3BhdGNo Lm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShl KX0pLHkuZGlzcGE9CnRjaC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2lmKCFNYXRoLnJv dW5kKHkueSgpKGUucG9pbnQpKjEwMCkpcmV0dXJuID0Kc2V0VGltZW91dChmdW5jdGlvbigpe2Qz LnNlbGVjdEFsbCgiLnBvaW50LmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0sMCksPQohMTtl LnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9 KSx5LmRpc3BhdGNoLm89Cm4oInRvb2x0aXBIaWRlIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRl KGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRpcFNob3ciLD0KZnVuY3Rpb24oZSl7aWYoIU1hdGgu cm91bmQoYi55KCkoZS5wb2ludCkqMTAwKSlyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpPQp7 ZDMuc2VsZWN0QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEpfSwwKSwhMTtl LnBvcz0zRFtlLnBvc1swXSs9CnQubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhl KX0pLGIuZGlzcGF0Y2gub24oInRvb2x0aXBIaWRlIixmdW5jdD0KaW9uKGUpe1QudG9vbHRpcEhp ZGUoZSl9KSxkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9u PQooZSl7ZS5wb3M9M0RbZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBT aG93KGUpfSksZC5kaXNwYXRjaC49Cm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rp b24oZSl7VC50b29sdGlwSGlkZShlKX0pLHYuZGlzcGF0Y2gub24oIj0KZWxlbWVudE1vdXNlb3Zl ci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0r dC50PQpvcF0sVC50b29sdGlwU2hvdyhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91 dC50b29sdGlwIixmdW5jdGlvbihlKXs9ClQudG9vbHRpcEhpZGUoZSl9KSxULm9uKCJ0b29sdGlw SGlkZSIsZnVuY3Rpb24oKXtvJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQz0KLmRpc3BhdGNoPTNE VCxDLmxpbmVzMT0zRGQsQy5saW5lczI9M0R2LEMuYmFyczE9M0RtLEMuYmFyczI9M0RnLEMuc3Rh Y2sxPTNEPQp5LEMuc3RhY2syPTNEYixDLnhBeGlzPTNEdyxDLnlBeGlzMT0zREUsQy55QXhpczI9 M0RTLEMub3B0aW9ucz0zRGUudXRpbHMub3A9CnRpb25zRnVuYy5iaW5kKEMpLEMueD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnZXRYPTNEZSxkLngoZT0KKSxtLngoZSks Qyk6Z2V0WH0sQy55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdldFk9 M0RlLGQueShlPQopLG0ueShlKSxDKTpnZXRZfSxDLnlEb21haW4xPTNEZnVuY3Rpb24oZSl7cmV0 dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLEM9Cik6bH0sQy55RG9tYWluMj0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxDKTpjfSxDLm1hcmdpbj0KPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9M0RlLEMpOnR9LEMud2lkdGg9M0Rm dW5jdGlvbihlKXtyPQpldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxDKTpyfSxDLmhlaWdo dD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KGk9M0RlLEMpOml9LEMu Y29sb3I9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUseD0KLmNv bG9yKGUpLEMpOm59LEMuc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhzPTNEZSxDPQopOnN9LEMudG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8obz0zRGUsQyk6b30sQy50b29sdGk9CnBDb250ZW50PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEMpOnV9LEN9LGUubW9kZWxzLm9obD0K Y0Jhcj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUp e3ZhciBnPTNEbi10LmxlZnQtPQp0LnJpZ2h0LHg9M0RyLXQudG9wLXQuYm90dG9tLFQ9M0RkMy5z ZWxlY3QodGhpcyk7cy5kb21haW4oeXx8ZDMuZXh0ZW50KGVbMF09Ci52YWx1ZXMubWFwKHUpLmNv bmNhdChwKSkpLHY/cy5yYW5nZSh3fHxbZyouNS9lWzBdLnZhbHVlcy5sZW5ndGgsZyooZVswXS52 YT0KbHVlcy5sZW5ndGgtLjUpL2VbMF0udmFsdWVzLmxlbmd0aF0pOnMucmFuZ2Uod3x8WzAsZ10p LG8uZG9tYWluKGJ8fFtkMy5taW4oPQplWzBdLnZhbHVlcy5tYXAoaCkuY29uY2F0KGQpKSxkMy5t YXgoZVswXS52YWx1ZXMubWFwKGMpLmNvbmNhdChkKSldKS5yYW5nZSg9CkV8fFt4LDBdKSxzLmRv bWFpbigpWzBdPTNEPTNEPTNEcy5kb21haW4oKVsxXSYmKHMuZG9tYWluKClbMF0/cy5kb21haW4o W3MuZD0Kb21haW4oKVswXS1zLmRvbWFpbigpWzBdKi4wMSxzLmRvbWFpbigpWzFdK3MuZG9tYWlu KClbMV0qLjAxXSk6cy5kb21haW4oWy0xPQosMV0pKSxvLmRvbWFpbigpWzBdPTNEPTNEPTNEby5k b21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWk9Cm4oKVswXStvLmRv bWFpbigpWzBdKi4wMSxvLmRvbWFpbigpWzFdLW8uZG9tYWluKClbMV0qLjAxXSk6by5kb21haW4o Wy0xLDFdKT0KKTt2YXIgTj0zRGQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubnYtd3JhcC5u di1vaGxjQmFyIikuZGF0YShbZVswXS52YWx1PQplc10pLEM9M0ROLmVudGVyKCkuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtb2hsY0JhciIpLGs9M0Q9CkMuYXBwZW5k KCJkZWZzIiksTD0zREMuYXBwZW5kKCJnIiksQT0zRE4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImci KS5hdHRyKCJjbD0KYXNzIiwibnYtdGlja3MiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0 ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxULm9uPQooImNsaWNrIixmdW5jdGlvbihlLHQpe1Mu Y2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOml9KX0pLGs9Ci5hcHBl bmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1jaGFydC1jbGlwLXBhdGgtIitpKS5hcHBlbmQo InJlY3QiKSxOLnNlbD0KZWN0KCIjbnYtY2hhcnQtY2xpcC1wYXRoLSIraSsiIHJlY3QiKS5hdHRy KCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0Iix4KSxBLmF0PQp0cigiY2xpcC1wYXRoIixtPyJ1cmwo I252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIikiOiIiKTt2YXIgTz0zRE4uc2VsZWN0KCIubnY9Ci10 aWNrcyIpLnNlbGVjdEFsbCgiLm52LXRpY2siKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7 Ty5leGl0KCkucmVtb3ZlKD0KKTt2YXIgTT0zRE8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRy KCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3JldHVybihmKGUsPQp0KT5sKGUsdCk/Im52LXRpY2sg bmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZlIikrIiBudi10aWNrLSIrbisiLSIrdH0pLmF0dHI9 CigiZCIsZnVuY3Rpb24odCxuKXt2YXIgcj0zRGcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVy biJtMCwwbDAsIisobyhmKHQsbj0KKSktbyhjKHQsbikpKSsibCIrIC1yLzIrIiwwbCIrci8yKyIs MGwwLCIrKG8oaCh0LG4pKS1vKGYodCxuKSkpKyJsMCwiKyhvKGwoPQp0LG4pKS1vKGgodCxuKSkp KyJsIityLzIrIiwwbCIrIC1yLzIrIiwweiJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUs dCk9CntyZXR1cm4idHJhbnNsYXRlKCIrcyh1KGUsdCkpKyIsIitvKGMoZSx0KSkrIikifSkub24o Im1vdXNlb3ZlciIsZnVuY3Rpb24odD0KLG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3Zl ciIsITApLFMuZWxlbWVudE1vdXNlb3Zlcih7cG9pbnQ6dCxzZXJpZXM6PQplWzBdLHBvczpbcyh1 KHQsbikpLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0p fSkub249CigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQo ImhvdmVyIiwhMSksUy5lbGVtZW50TW91cz0KZW91dCh7cG9pbnQ6dCxzZXJpZXM6ZVswXSxwb2lu dEluZGV4Om4sc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigiY2xpPQpjayIsZnVuY3Rp b24oZSx0KXtTLmVsZW1lbnRDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpb cyh1KGUsdCk9CiksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJv cGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIsZj0KdW5jdGlvbihlLHQpe1MuZWxlbWVudERibENs aWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSx0KSksPQpvKGEoZSx0 KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7Ty5hdHRy KCJjbGFzcyIsZnU9Cm5jdGlvbihlLHQsbil7cmV0dXJuKGYoZSx0KT5sKGUsdCk/Im52LXRpY2sg bmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZlIikrIj0KIG52LXRpY2stIituKyItIit0fSksZDMu dHJhbnNpdGlvbihPKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuPQoidHJh bnNsYXRlKCIrcyh1KGUsdCkpKyIsIitvKGMoZSx0KSkrIikifSkuYXR0cigiZCIsZnVuY3Rpb24o dCxuKXt2YXIgcj0zRGc9Ci9lWzBdLnZhbHVlcy5sZW5ndGgqLjk7cmV0dXJuIm0wLDBsMCwiKyhv KGYodCxuKSktbyhjKHQsbikpKSsibCIrIC1yLzIrIiwwbD0KIityLzIrIiwwbDAsIisobyhoKHQs bikpLW8oZih0LG4pKSkrImwwLCIrKG8obCh0LG4pKS1vKGgodCxuKSkpKyJsIityLzIrIiwwPQps IisgLXIvMisiLDB6In0pfSkseH12YXIgdD0zRHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6 MH0sbj0zRDk2MCxyPTNENTA9CjAsaT0zRE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLHM9 M0RkMy5zY2FsZS5saW5lYXIoKSxvPTNEZDMuc2NhbGUubGluZT0KYXIoKSx1PTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGUueH0sYT0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGY9M0RmdW5jdGlvbihl PQope3JldHVybiBlLm9wZW59LGw9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS5jbG9zZX0sYz0zRGZ1 bmN0aW9uKGUpe3JldHVybiBlLmg9CmlnaH0saD0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvd30s cD0zRFtdLGQ9M0RbXSx2PTNEITEsbT0zRCEwLGc9M0RlLnV0aWxzLj0KZGVmYXVsdENvbG9yKCks eSxiLHcsRSxTPTNEZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVt ZW50PQpEYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1 cm4geC5kaXNwYXRjaD0zRFMseC5vcHQ9CmlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQo eCkseC54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8odT0zRGUseCk6 dX0seC55PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLHgpOmF9 LHgub3BlPQpuPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9M0RlLHgp OmZ9LHguY2xvc2U9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTNE ZSx4KTpsfSx4LmhpZ2g9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhj PTNEZSx4KTpjfSx4Lmxvdz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho PTNEZSx4KTpoPQp9LHgubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHQudG9wPTNEdHlwZW9mIGUudG9wIT0zRCI9CnVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5y aWdodD0zRHR5cGVvZiBlLnJpZ2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaT0KZ2h0LHQu Ym90dG9tPTNEdHlwZW9mIGUuYm90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9t LHQubGVmdD0zRHR5PQpwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LHgp OnR9LHgud2lkdGg9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhuPTNE ZSx4KTpufSx4LmhlaWdodD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZz0KdGg/ KHI9M0RlLHgpOnJ9LHgueFNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KHM9M0RlLHgpOnN9PQoseC55U2NhbGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8obz0zRGUseCk6b30seC54RG9tYWluPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oeT0zRGUseCk6eX0seC55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dT0K cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUseCk6Yn0seC54UmFuZ2U9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlPQpuZ3RoPyh3PTNEZSx4KTp3fSx4LnlSYW5nZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSx4KTo9CkV9LHguZm9yY2VYPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHgpOnB9LHguZm9yY2VZPTNE Zj0KdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUseCk6ZH0seC5wYWRE YXRhPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUseCk6dn0s eC5jbGlwRWRnZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHM9Ci5sZW5ndGg/KG09M0Rl LHgpOm19LHguY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0z RGUudT0KdGlscy5nZXRDb2xvcih0KSx4KTpnfSx4LmlkPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGk9M0RlLHgpPQo6aX0seH0sZS5tb2RlbHMucGllPTNEZnVuY3Rpb24o KXtmdW5jdGlvbiBTKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnU9Cm5jdGlvbiBxKGUp e3ZhciB0PTNEKGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKSo5MC9NYXRoLlBJLTkwO3JldHVybiB0 PjkwP3QtMT0KODA6dH1mdW5jdGlvbiBSKGUpe2UuZW5kQW5nbGU9M0Rpc05hTihlLmVuZEFuZ2xl KT8wOmUuZW5kQW5nbGUsZS5zdGFydEFuZ2xlPQo9M0Rpc05hTihlLnN0YXJ0QW5nbGUpPzA6ZS5z dGFydEFuZ2xlLG18fChlLmlubmVyUmFkaXVzPTNEMCk7dmFyIHQ9M0RkMy5pbnQ9CmVycG9sYXRl KHRoaXMuX2N1cnJlbnQsZSk7cmV0dXJuIHRoaXMuX2N1cnJlbnQ9M0R0KDApLGZ1bmN0aW9uKGUp e3JldHVybiBBKD0KdChlKSl9fWZ1bmN0aW9uIFUoZSl7ZS5pbm5lclJhZGl1cz0zRDA7dmFyIHQ9 M0RkMy5pbnRlcnBvbGF0ZSh7c3RhcnRBbmdsZTowPQosZW5kQW5nbGU6MH0sZSk7cmV0dXJuIGZ1 bmN0aW9uKGUpe3JldHVybiBBKHQoZSkpfX12YXIgbz0zRG4tdC5sZWZ0LXQucmlnaHQ9CixmPTNE ci10LnRvcC10LmJvdHRvbSxTPTNETWF0aC5taW4obyxmKS8yLHg9M0RTLVMvNSxUPTNEZDMuc2Vs ZWN0KHRoaXMpLE49Cj0zRFQuc2VsZWN0QWxsKCIubnYtd3JhcC5udi1waWUiKS5kYXRhKGUpLEM9 M0ROLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiYz0KbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1w aWUgbnYtY2hhcnQtIit1KSxrPTNEQy5hcHBlbmQoImciKSxMPTNETi5zZWxlY3QoImciPQopO2su YXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1waWUiKSxrLmFwcGVuZCgiZyIpLmF0dHIoImNs YXNzIiwibnYtcGllTGE9CmJlbHMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Qu bGVmdCsiLCIrdC50b3ArIikiKSxMLnNlbGVjdCgiLm52LT0KcGllIikuYXR0cigidHJhbnNmb3Jt IiwidHJhbnNsYXRlKCIrby8yKyIsIitmLzIrIikiKSxMLnNlbGVjdCgiLm52LXBpZUxhYmVsPQpz IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby8yKyIsIitmLzIrIikiKSxULm9uKCJj bGljayIsZnVuY3Rpb24oZSw9CnQpe0UuY2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQscG9zOmQz LmV2ZW50LGlkOnV9KX0pO3ZhciBBPTNEZDMuc3ZnLmFyYygpLj0Kb3V0ZXJSYWRpdXMoeCk7eSYm QS5zdGFydEFuZ2xlKHkpLGImJkEuZW5kQW5nbGUoYiksbSYmQS5pbm5lclJhZGl1cyhTKncpO3Zh PQpyIE89M0RkMy5sYXlvdXQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihlKXtyZXR1 cm4gZS5kaXNhYmxlZD8wOnMoZSk9Cn0pLE09M0ROLnNlbGVjdCgiLm52LXBpZSIpLnNlbGVjdEFs bCgiLm52LXNsaWNlIikuZGF0YShPKSxfPTNETi5zZWxlY3QoIi5udj0KLXBpZUxhYmVscyIpLnNl bGVjdEFsbCgiLm52LWxhYmVsIikuZGF0YShPKTtNLmV4aXQoKS5yZW1vdmUoKSxfLmV4aXQoKS5y ZW1vPQp2ZSgpO3ZhciBEPTNETS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYt c2xpY2UiKS5vbigibW91c2VvdmVyIiw9CmZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNs YXNzZWQoImhvdmVyIiwhMCksRS5lbGVtZW50TW91c2VvdmVyKHtsYWJlbD0KOmkoZS5kYXRhKSx2 YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLHBvaW50SW5kZXg6dCxwb3M6W2QzLmV2ZW50LnBh Z2VYLGQzPQouZXZlbnQucGFnZVldLGlkOnV9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oZSx0 KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCg9CiJob3ZlciIsITEpLEUuZWxlbWVudE1vdXNlb3V0 KHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YT0KLGluZGV4OnQs aWQ6dX0pfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe0UuZWxlbWVudENsaWNrKHtsYWJlbDpp KGUuZGF0YSksPQp2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLGluZGV4OnQscG9zOmQzLmV2 ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGE9CmdhdGlvbigpfSkub24oImRibGNsaWNrIixm dW5jdGlvbihlLHQpe0UuZWxlbWVudERibENsaWNrKHtsYWJlbDppKGUuZGF0YSksdj0KYWx1ZTpz KGUuZGF0YSkscG9pbnQ6ZS5kYXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVu dC5zdG9wUHJvcGFnPQphdGlvbigpfSk7TS5hdHRyKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVy biBhKGUsdCl9KS5hdHRyKCJzdHJva2UiLGZ1bmN0aW89Cm4oZSx0KXtyZXR1cm4gYShlLHQpfSk7 dmFyIFA9M0RELmFwcGVuZCgicGF0aCIpLmVhY2goZnVuY3Rpb24oZSl7dGhpcy5fY3Vycj0KZW50 PTNEZX0pO00uc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQSk7aWYobCl7dmFyIEg9M0RkMy5zdmcu YXJjKCkuaW5uZXJSYWRpPQp1cygwKTtjJiYoSD0zREEpLGgmJihIPTNEZDMuc3ZnLmFyYygpLm91 dGVyUmFkaXVzKEEub3V0ZXJSYWRpdXMoKSkpLF8uZW50ZXI9CigpLmFwcGVuZCgiZyIpLmNsYXNz ZWQoIm52LWxhYmVsIiwhMCkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPTNEZDMuc2VsZWN0KD0K dGhpcyk7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe2lmKGcpe2Uub3V0ZXJSYWRpdXM9 M0R4KzEwLGUuaW5uZXJSYWRpPQp1cz0zRHgrMTU7dmFyIHQ9M0QoZS5zdGFydEFuZ2xlK2UuZW5k QW5nbGUpLzIqKDE4MC9NYXRoLlBJKTtyZXR1cm4oZS5zdGFydEE9Cm5nbGUrZS5lbmRBbmdsZSkv MjxNYXRoLlBJP3QtPTNEOTA6dCs9M0Q5MCwidHJhbnNsYXRlKCIrSC5jZW50cm9pZChlKSsiKSBy bz0KdGF0ZSgiK3QrIikifXJldHVybiBlLm91dGVyUmFkaXVzPTNEUysxMCxlLmlubmVyUmFkaXVz PTNEUysxNSwidHJhbnNsYXRlKCIrPQpILmNlbnRyb2lkKGUpKyIpIn0pLG4uYXBwZW5kKCJyZWN0 Iikuc3R5bGUoInN0cm9rZSIsIiNmZmYiKS5zdHlsZSgiZmlsbCIsIiM9CmZmZiIpLmF0dHIoInJ4 IiwzKS5hdHRyKCJyeSIsMyksbi5hcHBlbmQoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLGc/ KGUucz0KdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0aC5QST8ic3RhcnQiOiJlbmQiOiJtaWRk bGUiKS5zdHlsZSgiZmlsbCIsIiMwMDAiPQopfSk7dmFyIEI9M0R7fSxqPTNEMTQsRj0zRDE0MCxJ PTNEZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZVswXS9GKSpGKyI9CiwiK01hdGguZmxv b3IoZVsxXS9qKSpqfTtfLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7aWYoZyl7ZS5vdXRl clJhZGl1cz0KPTNEeCsxMCxlLmlubmVyUmFkaXVzPTNEeCsxNTt2YXIgdD0zRChlLnN0YXJ0QW5n bGUrZS5lbmRBbmdsZSkvMiooMTgwL01hdGguPQpQSSk7cmV0dXJuKGUuc3RhcnRBbmdsZStlLmVu ZEFuZ2xlKS8yPE1hdGguUEk/dC09M0Q5MDp0Kz0zRDkwLCJ0cmFuc2xhdGUoIis9CkguY2VudHJv aWQoZSkrIikgcm90YXRlKCIrdCsiKSJ9ZS5vdXRlclJhZGl1cz0zRFMrMTAsZS5pbm5lclJhZGl1 cz0zRFMrMTU7dj0KYXIgbj0zREguY2VudHJvaWQoZSkscj0zREkobik7cmV0dXJuIEJbcl0mJihu WzFdLT0zRGopLEJbSShuKV09M0QhMCwidHJhbnNsPQphdGUoIituKyIpIn0pLF8uc2VsZWN0KCIu bnYtbGFiZWwgdGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZz8oZC5zdGFydEFuZ2w9CmUrZC5l bmRBbmdsZSkvMjxNYXRoLlBJPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24o ZSx0KXt2YXIgbj0zRD0KKGUuZW5kQW5nbGUtZS5zdGFydEFuZ2xlKS8oMipNYXRoLlBJKSxyPTNE e2tleTppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBlPQpyY2VudDpkMy5mb3JtYXQoIiUiKShu KX07cmV0dXJuIGUudmFsdWUmJm4+dj9yW3BdOiIifSl9fSksU312YXIgdD0zRHt0b3A6MCw9CnJp Z2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTNENTAwLHI9M0Q1MDAsaT0zRGZ1bmN0aW9uKGUpe3Jl dHVybiBlLnh9LHM9M0RmdT0KbmN0aW9uKGUpe3JldHVybiBlLnl9LG89M0RmdW5jdGlvbihlKXty ZXR1cm4gZS5kZXNjcmlwdGlvbn0sdT0zRE1hdGguZmxvb3IoPQpNYXRoLnJhbmRvbSgpKjFlNCks YT0zRGUudXRpbHMuZGVmYXVsdENvbG9yKCksZj0zRGQzLmZvcm1hdCgiLC4yZiIpLGw9M0QhMCw9 CmM9M0QhMCxoPTNEITEscD0zRCJrZXkiLHY9M0QuMDIsbT0zRCExLGc9M0QhMSx5PTNEITEsYj0z RCExLHc9M0QuNSxFPTNEZDMuZD0KaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIs ImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlPQpsZW1lbnRNb3VzZW91dCIp O3JldHVybiBTLmRpc3BhdGNoPTNERSxTLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJp bmQ9CihTKSxTLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0 LnRvcD0zRHR5cGVvZiBlLnRvcCE9Cj0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9 M0R0eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0Oj0KdC5yaWdodCx0LmJvdHRv bT0zRHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0Lmxl ZnQ9Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxTKTp0fSxT LndpZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGUsUyk6 bn0sUy5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhyPTNE ZSxTKTpyfSxTLnZhbHVlcz0zRGZ1bmN0aW9uKHQpe3JldHVybiBlLmxvZygicGllLnZhbHVlcygp IGlzIG49Cm8gbG9uZ2VyIHN1cHBvcnRlZC4iKSxTfSxTLng9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oaT0zRGUsUz0KKTppfSxTLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8ocz0zRGQzLmZ1bmN0b3IoZSksUyk6c30sUy5kPQplc2NyaXB0aW9u PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89M0RlLFMpOm99LFMuc2hv d0xhYmVscz0KPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9M0RlLFMp Omx9LFMubGFiZWxTdW5iZWFtTGF5b3V0PTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZz0zRGUsUyk6Z30sUy5kb251dExhYmVsc091dHNpZGU9M0RmdW49CmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxTKTpofSxTLnBpZUxhYmVsc091dHNpZGU9 M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxTKTpjfSxTLmxh YmVsVHlwZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhPQpyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHA9 M0RwfHwia2V5IixTKTpwfSxTLmRvbnV0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3U9Cm1lbnRz Lmxlbmd0aD8obT0zRGUsUyk6bX0sUy5kb251dFJhdGlvPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndD0KaD8odz0zRGUsUyk6d30sUy5zdGFydEFuZ2xlPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9M0RlLFMpPQo6eX0sUy5lbmRBbmdsZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPTNEZSxTKTpifSxTLmlkPTNEZnU9Cm5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0zRGUsUyk6dX0sUy5jb2xvcj0zRGZ1 bmN0aW9uKHQpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RlLnV0aWxzLmdldENvbG9y KHQpLFMpOmF9LFMudmFsdWVGb3JtYXQ9M0RmdW5jdGlvbihlPQope3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhmPTNEZSxTKTpmfSxTLmxhYmVsVGhyZXNob2xkPTNEZnVuY3Rpb24oZSl7cmV0dXI9 Cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsUyk6dn0sU30sZS5tb2RlbHMucGllQ2hhcnQ9M0Rm dW5jdGlvbigpe2Z1bmN0aW9uID0KdihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB1 PTNEZDMuc2VsZWN0KHRoaXMpLGE9M0R0aGlzLGY9M0QoaXx8cGFyPQpzZUludCh1LnN0eWxlKCJ3 aWR0aCIpKXx8OTYwKS1yLmxlZnQtci5yaWdodCxkPTNEKHN8fHBhcnNlSW50KHUuc3R5bGUoImhl aWc9Cmh0IikpfHw0MDApLXIudG9wLXIuYm90dG9tO3YudXBkYXRlPTNEZnVuY3Rpb24oKXt1LmNh bGwodil9LHYuY29udGFpbmVyPTNEdD0KaGlzLGwuZGlzYWJsZWQ9M0RlLm1hcChmdW5jdGlvbihl KXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighYyl7dmFyIG07Yz0zRHt9PQo7Zm9yKG0gaW4gbCls W21daW5zdGFuY2VvZiBBcnJheT9jW21dPTNEbFttXS5zbGljZSgwKTpjW21dPTNEbFttXX1pZigh ZXx8IWU9Ci5sZW5ndGgpe3ZhciBnPTNEdS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFto XSk7cmV0dXJuIGcuZW50ZXIoKS5hcHBlbj0KZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBu di1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jPQpob3IiLCJtaWRk bGUiKSxnLmF0dHIoIngiLHIubGVmdCtmLzIpLmF0dHIoInkiLHIudG9wK2QvMikudGV4dChmdW5j dGlvbihlKXs9CnJldHVybiBlfSksdn11LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgp O3ZhciB5PTNEdS5zZWxlY3RBbGwoImcubnYtdz0KcmFwLm52LXBpZUNoYXJ0IikuZGF0YShbZV0p LGI9M0R5LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52PQotd3JhcCBu di1waWVDaGFydCIpLmFwcGVuZCgiZyIpLHc9M0R5LnNlbGVjdCgiZyIpO2IuYXBwZW5kKCJnIiku YXR0cigiY2xhc3M9CiIsIm52LXBpZVdyYXAiKSxiLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYtbGVnZW5kV3JhcCIpLG8mJihuLndpZHRoKGYpLj0Ka2V5KHQueCgpKSx5LnNlbGVjdCgiLm52 LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKG4pLHIudG9wIT0zRG4uaGVpZ2h0KCkmPQomKHIu dG9wPTNEbi5oZWlnaHQoKSxkPTNEKHN8fHBhcnNlSW50KHUuc3R5bGUoImhlaWdodCIpKXx8NDAw KS1yLnRvcC1yLmJvdHQ9Cm9tKSx5LnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFu c2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtci50b3ArIikiKT0KKSx5LmF0dHIoInRyYW5zZm9ybSIs InRyYW5zbGF0ZSgiK3IubGVmdCsiLCIrci50b3ArIikiKSx0LndpZHRoKGYpLmhlaWdodChkPQop O3ZhciBFPTNEdy5zZWxlY3QoIi5udi1waWVXcmFwIikuZGF0dW0oW2VdKTtkMy50cmFuc2l0aW9u KEUpLmNhbGwodCksbi5kaXM9CnBhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7bD0z RGUscC5zdGF0ZUNoYW5nZShsKSx2LnVwZGF0ZSgpfSksdC5kaT0Kc3BhdGNoLm9uKCJlbGVtZW50 TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7cC50b29sdGlwSGlkZShlKX0pLHAub24oImNo PQphbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0zRCJ1bmRlZmluZWQi JiYoZS5mb3JFYWNoKGZ1bmN0aW89Cm4oZSxuKXtlLmRpc2FibGVkPTNEdC5kaXNhYmxlZFtuXX0p LGwuZGlzYWJsZWQ9M0R0LmRpc2FibGVkKSx2LnVwZGF0ZSgpfSl9KT0KLHZ9dmFyIHQ9M0RlLm1v ZGVscy5waWUoKSxuPTNEZS5tb2RlbHMubGVnZW5kKCkscj0zRHt0b3A6MzAscmlnaHQ6MjAsYm90 dG9tPQo6MjAsbGVmdDoyMH0saT0zRG51bGwscz0zRG51bGwsbz0zRCEwLHU9M0RlLnV0aWxzLmRl ZmF1bHRDb2xvcigpLGE9M0QhMCxmPQo9M0RmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iPGgzPiIr ZSsiPC9oMz4iKyI8cD4iK3QrIjwvcD4ifSxsPTNEe30sYz0zRG51bGw9CixoPTNEIk5vIERhdGEg QXZhaWxhYmxlLiIscD0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwi c3RhdD0KZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksZD0zRGZ1bmN0aW9uKG4scil7dmFyIGk9M0R0 LmRlc2NyaXB0aW9uKCkobi5wb2ludCl8PQp8dC54KCkobi5wb2ludCkscz0zRG4ucG9zWzBdKyhy JiZyLm9mZnNldExlZnR8fDApLG89M0RuLnBvc1sxXSsociYmci5vZmZzZXQ9ClRvcHx8MCksdT0z RHQudmFsdWVGb3JtYXQoKSh0LnkoKShuLnBvaW50KSksYT0zRGYoaSx1LG4sdik7ZS50b29sdGlw LnNob3coWz0KcyxvXSxhLG4udmFsdWU8MD8ibiI6InMiLG51bGwscil9O3JldHVybiB0LmRpc3Bh dGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvPQpvbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9M0Rb ZS5wb3NbMF0rci5sZWZ0LGUucG9zWzFdK3IudG9wXSxwLnRvb2x0aXBTaG93KGU9Cil9KSxwLm9u KCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7YSYmZChlKX0pLHAub24oInRvb2x0aXBIaWRlIixm dW5jdGlvbigpez0KYSYmZS50b29sdGlwLmNsZWFudXAoKX0pLHYubGVnZW5kPTNEbix2LmRpc3Bh dGNoPTNEcCx2LnBpZT0zRHQsZDMucmViaW5kKHYsPQp0LCJ2YWx1ZUZvcm1hdCIsInZhbHVlcyIs IngiLCJ5IiwiZGVzY3JpcHRpb24iLCJpZCIsInNob3dMYWJlbHMiLCJkb251dExhYmU9CmxzT3V0 c2lkZSIsInBpZUxhYmVsc091dHNpZGUiLCJsYWJlbFR5cGUiLCJkb251dCIsImRvbnV0UmF0aW8i LCJsYWJlbFRocmVzaD0Kb2xkIiksdi5vcHRpb25zPTNEZS51dGlscy5vcHRpb25zRnVuYy5iaW5k KHYpLHYubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1lbnRzLmxlbmd0aD8oci50 b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50b3A6ci50b3Asci5yaWdodD0KPTNE dHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdodDpyLnJpZ2h0LHIuYm90dG9tPTNE dHlwZW9mIGUuYm90dG9tPQohPTNEInVuZGVmaW5lZCI/ZS5ib3R0b206ci5ib3R0b20sci5sZWZ0 PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lLmw9CmVmdDpyLmxlZnQsdik6cn0sdi53 aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPTNEZSx2KTppfT0K LHYuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9M0RlLHYp OnN9LHYuY29sb3I9M0RmdW5jPQp0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNE ZS51dGlscy5nZXRDb2xvcihyKSxuLmNvbG9yKHUpLHQuY29sb3I9Cih1KSx2KTp1fSx2LnNob3dM ZWdlbmQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0zRGUsdik6b30s dj0KLnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0Rl LHYpOmF9LHYudG9vbHRpcENvbnRlPQpudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhmPTNEZSx2KTpmfSx2LnN0YXRlPTNEZnVuY3Rpb24oZSk9CntyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obD0zRGUsdik6bH0sdi5kZWZhdWx0U3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYT0Kcmd1bWVudHMubGVuZ3RoPyhjPTNEZSx2KTpjfSx2Lm5vRGF0YT0zRGZ1bmN0aW9uKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPQo/KGg9M0RlLHYpOmh9LHZ9LGUubW9kZWxzLnNjYXR0 ZXI9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEkocSl7cmV0dXJuIHEuZWFjaCg9CmZ1bmN0aW9uKEkp e2Z1bmN0aW9uIFEoKXtpZighZylyZXR1cm4hMTt2YXIgZSxpPTNEZDMubWVyZ2UoSS5tYXAoZnVu Y3Rpb24oZT0KLHQpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgcj0zRGYo ZSxuKSxpPTNEbChlLG4pO3JldHVybltvKHIpPQosdShpKSx0LG4sZV19KS5maWx0ZXIoZnVuY3Rp b24oZSx0KXtyZXR1cm4gYihlWzRdLHQpfSl9KSk7aWYoRD0zRD0zRD0zRCEwKXs9CmlmKHgpe3Zh ciBhPTNEWC5zZWxlY3QoImRlZnMiKS5zZWxlY3RBbGwoIi5udi1wb2ludC1jbGlwcyIpLmRhdGEo W3NdKS5lbnRlcj0KKCk7YS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiY2xhc3MiLCJudi1wb2lu dC1jbGlwcyIpLmF0dHIoImlkIiwibnYtcG9pbnRzPQotY2xpcC0iK3MpO3ZhciBjPTNEWC5zZWxl Y3QoIiNudi1wb2ludHMtY2xpcC0iK3MpLnNlbGVjdEFsbCgiY2lyY2xlIikuZGF0YSg9CmkpO2Mu ZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLFQpLGMuZXhpdCgpLnJlbW92ZSgpLGMu YXR0cigiY3giLGZ1bj0KY3Rpb24oZSl7cmV0dXJuIGVbMF19KS5hdHRyKCJjeSIsZnVuY3Rpb24o ZSl7cmV0dXJuIGVbMV19KSxYLnNlbGVjdCgiLm52LXBvPQppbnQtcGF0aHMiKS5hdHRyKCJjbGlw LXBhdGgiLCJ1cmwoI252LXBvaW50cy1jbGlwLSIrcysiKSIpfWkubGVuZ3RoJiYoaS5wdXM9Cmgo W28ucmFuZ2UoKVswXS0yMCx1LnJhbmdlKClbMF0tMjAsbnVsbCxudWxsXSksaS5wdXNoKFtvLnJh bmdlKClbMV0rMjAsdS5yYT0KbmdlKClbMV0rMjAsbnVsbCxudWxsXSksaS5wdXNoKFtvLnJhbmdl KClbMF0tMjAsdS5yYW5nZSgpWzBdKzIwLG51bGwsbnVsbF0pPQosaS5wdXNoKFtvLnJhbmdlKClb MV0rMjAsdS5yYW5nZSgpWzFdLTIwLG51bGwsbnVsbF0pKTt2YXIgaD0zRGQzLmdlb20ucG9seWc9 Cm9uKFtbLTEwLC0xMF0sWy0xMCxyKzEwXSxbbisxMCxyKzEwXSxbbisxMCwtMTBdXSkscD0zRDFl LTY7aT0zRGkuc29ydChmdW5jdD0KaW9uKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFd fSk7Zm9yKHZhciBkPTNEMDtkPGkubGVuZ3RoLTE7KU1hdGguYWJzPQooaVtkXVswXS1pW2QrMV1b MF0pPHAmJk1hdGguYWJzKGlbZF1bMV0taVtkKzFdWzFdKTxwP2kuc3BsaWNlKGQrMSwxKTpkKys7 dmE9CnIgdj0zRGQzLmdlb20udm9yb25vaShpKS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57ZGF0 YTpoLmNsaXAoZSksc2VyaWVzOmlbdD0KXVsyXSxwb2ludDppW3RdWzNdfX0pLG09M0RYLnNlbGVj dCgiLm52LXBvaW50LXBhdGhzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0PQphKHYpO20uZW50ZXIo KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtcGF0 aC0iK3Q9Cn0pLG0uZXhpdCgpLnJlbW92ZSgpLG0uYXR0cigiZCIsZnVuY3Rpb24oZSl7cmV0dXJu IWV8fCFlLmRhdGF8fGUuZGF0YS5sZW5ndD0KaD0zRD0zRD0zRDA/Ik0gMCAwIjoiTSIrZS5kYXRh LmpvaW4oIkwiKSsiWiJ9KTt2YXIgeT0zRGZ1bmN0aW9uKGUsbil7aWYoRilyPQpldHVybiAwO3Zh ciByPTNESVtlLnNlcmllc107aWYodHlwZW9mIHI9M0Q9M0QidW5kZWZpbmVkIilyZXR1cm47dmFy IGk9M0RyLnY9CmFsdWVzW2UucG9pbnRdO24oe3BvaW50Omksc2VyaWVzOnIscG9zOltvKGYoaSxl LnBvaW50KSkrdC5sZWZ0LHUobChpLGUucG9pbj0KdCkpK3QudG9wXSxzZXJpZXNJbmRleDplLnNl cmllcyxwb2ludEluZGV4OmUucG9pbnR9KX07bS5vbigiY2xpY2siLGZ1bmN0aW9uPQooZSl7eShl LF8uZWxlbWVudENsaWNrKX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe3koZSxfLmVsZW1l bnRNb3VzZW92ZXI9Cil9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7eShlLF8uZWxlbWVu dE1vdXNlb3V0KX0pfWVsc2UgWC5zZWxlY3QoIi5udj0KLWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52 LWdyb3VwIikuc2VsZWN0QWxsKCIubnYtcG9pbnQiKS5vbigiY2xpY2siLGZ1bmN0aW9uPQooZSxu KXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7dmFyIHI9M0RJW2Uuc2VyaWVzXSxpPTNEci52 YWx1ZXNbbl07Xy5lbGU9Cm1lbnRDbGljayh7cG9pbnQ6aSxzZXJpZXM6cixwb3M6W28oZihpLG4p KSt0LmxlZnQsdShsKGksbikpK3QudG9wXSxzZXJpZXNJbj0KZGV4OmUuc2VyaWVzLHBvaW50SW5k ZXg6bn0pfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSxuKXtpZihGfHwhSVtlLnNlcmllPQpz XSlyZXR1cm4gMDt2YXIgcj0zRElbZS5zZXJpZXNdLGk9M0RyLnZhbHVlc1tuXTtfLmVsZW1lbnRN b3VzZW92ZXIoe3BvaW50Omk9CixzZXJpZXM6cixwb3M6W28oZihpLG4pKSt0LmxlZnQsdShsKGks bikpK3QudG9wXSxzZXJpZXNJbmRleDplLnNlcmllcyxwb2ludD0KSW5kZXg6bn0pfSkub24oIm1v dXNlb3V0IixmdW5jdGlvbihlLHQpe2lmKEZ8fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgbj0K PTNESVtlLnNlcmllc10scj0zRG4udmFsdWVzW3RdO18uZWxlbWVudE1vdXNlb3V0KHtwb2ludDpy LHNlcmllczpuLHNlcmllc0luPQpkZXg6ZS5zZXJpZXMscG9pbnRJbmRleDp0fSl9KTtGPTNEITF9 dmFyIHE9M0RuLXQubGVmdC10LnJpZ2h0LFI9M0RyLXQudG9wLXQ9Ci5ib3R0b20sVT0zRGQzLnNl bGVjdCh0aGlzKTtJLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0 aT0Kb24oZSl7ZS5zZXJpZXM9M0R0fSl9KTt2YXIgVz0zRE4mJkMmJkE/W106ZDMubWVyZ2UoSS5t YXAoZnVuY3Rpb24oZSl7cmV0dXJuPQogZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJu e3g6ZihlLHQpLHk6bChlLHQpLHNpemU6YyhlLHQpfX0pfSkpO28uZG89Cm1haW4oTnx8ZDMuZXh0 ZW50KFcubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KS5jb25jYXQoZCkpKSx3JiZJWzBdP28u cmFuZz0KZShrfHxbKHEqRStxKS8oMipJWzBdLnZhbHVlcy5sZW5ndGgpLHEtcSooMStFKS8oMipJ WzBdLnZhbHVlcy5sZW5ndGgpXSk6by5yPQphbmdlKGt8fFswLHFdKSx1LmRvbWFpbihDfHxkMy5l eHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdCg9CnYpKSkucmFuZ2Uo THx8W1IsMF0pLGEuZG9tYWluKEF8fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4g ZS5zaXplfT0KKS5jb25jYXQobSkpKS5yYW5nZShPfHxbMTYsMjU2XSk7aWYoby5kb21haW4oKVsw XT0zRD0zRD0zRG8uZG9tYWluKClbMV18fHUuPQpkb21haW4oKVswXT0zRD0zRD0zRHUuZG9tYWlu KClbMV0pTT0zRCEwO28uZG9tYWluKClbMF09M0Q9M0Q9M0RvLmRvbWFpbigpWzE9Cl0mJihvLmRv bWFpbigpWzBdP28uZG9tYWluKFtvLmRvbWFpbigpWzBdLW8uZG9tYWluKClbMF0qLjAxLG8uZG9t YWluKClbMV0rbz0KLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9tYWluKFstMSwxXSkpLHUuZG9tYWlu KClbMF09M0Q9M0Q9M0R1LmRvbWFpbigpWzFdJiYoPQp1LmRvbWFpbigpWzBdP3UuZG9tYWluKFt1 LmRvbWFpbigpWzBdLXUuZG9tYWluKClbMF0qLjAxLHUuZG9tYWluKClbMV0rdS5kb209CmFpbigp WzFdKi4wMV0pOnUuZG9tYWluKFstMSwxXSkpLGlzTmFOKG8uZG9tYWluKClbMF0pJiZvLmRvbWFp bihbLTEsMV0pLGlzTj0KYU4odS5kb21haW4oKVswXSkmJnUuZG9tYWluKFstMSwxXSksUD0zRFB8 fG8sSD0zREh8fHUsQj0zREJ8fGE7dmFyIFg9M0RVLnNlPQpsZWN0QWxsKCJnLm52LXdyYXAubnYt c2NhdHRlciIpLmRhdGEoW0ldKSxWPTNEWC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImM9Cmxh c3MiLCJudmQzIG52LXdyYXAgbnYtc2NhdHRlciBudi1jaGFydC0iK3MrKE0/IiBudi1zaW5nbGUt cG9pbnQiOiIiKSksJD0zRD0KVi5hcHBlbmQoImRlZnMiKSxKPTNEVi5hcHBlbmQoImciKSxLPTNE WC5zZWxlY3QoImciKTtKLmFwcGVuZCgiZyIpLmF0dHIoImNsPQphc3MiLCJudi1ncm91cHMiKSxK LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcG9pbnQtcGF0aHMiKSxYLmF0dHIoInRyYW49 CnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLCQuYXBwZW5kKCJjbGlw UGF0aCIpLmF0dHIoImlkIiwibj0Kdi1lZGdlLWNsaXAtIitzKS5hcHBlbmQoInJlY3QiKSxYLnNl bGVjdCgiI252LWVkZ2UtY2xpcC0iK3MrIiByZWN0IikuYXR0cigiPQp3aWR0aCIscSkuYXR0cigi aGVpZ2h0IixSPjA/UjowKSxLLmF0dHIoImNsaXAtcGF0aCIsUz8idXJsKCNudi1lZGdlLWNsaXAt Iis9CnMrIikiOiIiKSxGPTNEITA7dmFyIEc9M0RYLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVj dEFsbCgiLm52LWdyb3VwIikuZGF0YT0KKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihl KXtyZXR1cm4gZS5rZXl9KTtHLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5PQpsZSgic3Ryb2tlLW9w YWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLEcuZXhpdCgpLnJlbW92ZSgp LEcuYXQ9CnRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVz LSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdT0KbmN0aW9uKGUpe3JldHVybiBlLmhvdmVyfSksRy5z dHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQpfSkuc3R5PQpsZSgic3Ryb2tl IixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEp LnN0eWxlKCI9CmZpbGwtb3BhY2l0eSIsLjUpO2lmKHApe3ZhciBZPTNERy5zZWxlY3RBbGwoImNp cmNsZS5udi1wb2ludCIpLmRhdGEoZnVuY3Rpbz0KbihlKXtyZXR1cm4gZS52YWx1ZXN9LHkpO1ku ZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlPQosdCl7cmV0 dXJuIGUuY29sb3J9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9y fSkuYXR0cigiY3g9CiIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oUChm KHQsbikpKX0pLmF0dHIoImN5IixmdW5jdGlvbih0LD0Kbil7cmV0dXJuIGUudXRpbHMuTmFOdG9a ZXJvKEgobCh0LG4pKSl9KS5hdHRyKCJyIixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoPQouc3Fy dChhKGMoZSx0KSkvTWF0aC5QSSl9KSxZLmV4aXQoKS5yZW1vdmUoKSxHLmV4aXQoKS5zZWxlY3RB bGwoInBhdGgubnYtcG89CmludCIpLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0 aWxzLk5hTnRvWmVybyhvKGYodCxuKSkpfSkuYXR0cigiYz0KeSIsZnVuY3Rpb24odCxuKXtyZXR1 cm4gZS51dGlscy5OYU50b1plcm8odShsKHQsbikpKX0pLnJlbW92ZSgpLFkuZWFjaChmdW5jPQp0 aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoIm52LXBvaW50IiwhMCkuY2xhc3NlZCgi bnYtcG9pbnQtIit0LCEwKS49CmNsYXNzZWQoImhvdmVyIiwhMSl9KSxZLmF0dHIoImN4IixmdW5j dGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKD0KZih0LG4pKSl9KS5hdHRyKCJj eSIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odShsKHQsbikpKX0pLmF0 PQp0cigiciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KGEoYyhlLHQpKS9NYXRoLlBJ KX0pfWVsc2V7dmFyIFk9M0RHLnM9CmVsZWN0QWxsKCJwYXRoLm52LXBvaW50IikuZGF0YShmdW5j dGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KTtZLmVudGVyKCkuYXBwZT0KbmQoInBhdGgiKS5zdHls ZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1 bmN0PQppb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24o ZSx0KXtyZXR1cm4idHJhbnNsYXRlKCI9CitQKGYoZSx0KSkrIiwiK0gobChlLHQpKSsiKSJ9KS5h dHRyKCJkIixkMy5zdmcuc3ltYm9sKCkudHlwZShoKS5zaXplKGZ1bmN0aT0Kb24oZSx0KXtyZXR1 cm4gYShjKGUsdCkpfSkpLFkuZXhpdCgpLnJlbW92ZSgpLEcuZXhpdCgpLnNlbGVjdEFsbCgicGF0 aC5udi1wPQpvaW50IikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFu c2xhdGUoIitvKGYoZSx0KSkrIiwiK3UobCg9CmUsdCkpKyIpIn0pLnJlbW92ZSgpLFkuZWFjaChm dW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1wb2ludD0KIiwhMCkuY2xh c3NlZCgibnYtcG9pbnQtIit0LCEwKS5jbGFzc2VkKCJob3ZlciIsITEpfSksWS5hdHRyKCJ0cmFu c2Zvcm0iLGZ1PQpuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrbyhmKGUsdCkpKyIsIit1 KGwoZSx0KSkrIikifSkuYXR0cigiZCIsZDMuc3Y9Cmcuc3ltYm9sKCkudHlwZShoKS5zaXplKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGEoYyhlLHQpKX0pKX1jbGVhclRpbWVvdXQoaiksaj0KPTNEc2V0 VGltZW91dChRLDMwMCksUD0zRG8uY29weSgpLEg9M0R1LmNvcHkoKSxCPTNEYS5jb3B5KCl9KSxJ fXZhciB0PTNEe3RvPQpwOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49M0Q5NjAscj0zRDUw MCxpPTNEZS51dGlscy5kZWZhdWx0Q29sb3IoKSxzPQo9M0RNYXRoLmZsb29yKE1hdGgucmFuZG9t KCkqMWU1KSxvPTNEZDMuc2NhbGUubGluZWFyKCksdT0zRGQzLnNjYWxlLmxpbmVhcig9CiksYT0z RGQzLnNjYWxlLmxpbmVhcigpLGY9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS54fSxsPTNEZnVuY3Rp b24oZSl7cmV0dXJuID0KZS55fSxjPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2l6ZXx8MX0saD0z RGZ1bmN0aW9uKGUpe3JldHVybiBlLnNoYXBlfHwiY2lyPQpjbGUifSxwPTNEITAsZD0zRFtdLHY9 M0RbXSxtPTNEW10sZz0zRCEwLHk9M0RudWxsLGI9M0RmdW5jdGlvbihlKXtyZXR1cm4hZS49Cm5v dEFjdGl2ZX0sdz0zRCExLEU9M0QuMSxTPTNEITEseD0zRCEwLFQ9M0RmdW5jdGlvbigpe3JldHVy biAyNX0sTj0zRG51bGwsQz0KPTNEbnVsbCxrPTNEbnVsbCxMPTNEbnVsbCxBPTNEbnVsbCxPPTNE bnVsbCxNPTNEITEsXz0zRGQzLmRpc3BhdGNoKCJlbGVtZW50PQpDbGljayIsImVsZW1lbnRNb3Vz ZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSxEPTNEITAsUCxILEIsaixGPTNEITE7cmV0dXJuIEk9 Ci5jbGVhckhpZ2hsaWdodHM9M0RmdW5jdGlvbigpe2QzLnNlbGVjdEFsbCgiLm52LWNoYXJ0LSIr cysiIC5udi1wb2ludC5ob3Zlcj0KIikuY2xhc3NlZCgiaG92ZXIiLCExKX0sSS5oaWdobGlnaHRQ b2ludD0zRGZ1bmN0aW9uKGUsdCxuKXtkMy5zZWxlY3QoIi5udi1jPQpoYXJ0LSIrcysiIC5udi1z ZXJpZXMtIitlKyIgLm52LXBvaW50LSIrdCkuY2xhc3NlZCgiaG92ZXIiLG4pfSxfLm9uKCJlbGVt ZW49CnRNb3VzZW92ZXIucG9pbnQiLGZ1bmN0aW9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5z ZXJpZXNJbmRleCxlLnBvaW50SW5kZT0KeCwhMCl9KSxfLm9uKCJlbGVtZW50TW91c2VvdXQucG9p bnQiLGZ1bmN0aW9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpPQplc0luZGV4LGUucG9p bnRJbmRleCwhMSl9KSxJLmRpc3BhdGNoPTNEXyxJLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNG dW5jLmI9CmluZChJKSxJLng9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Zj0zRGQzLmZ1bmN0b3IoZSksSSk6Zn0sST0KLnk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1l bnRzLmxlbmd0aD8obD0zRGQzLmZ1bmN0b3IoZSksSSk6bH0sSS5zaXplPTNEPQpmdW5jdGlvbihl KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0zRGQzLmZ1bmN0b3IoZSksSSk6Y30sSS5tYXJn aW49M0RmdW49CmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD0zRHR5cGVv ZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcD0KOnQudG9wLHQucmlnaHQ9M0R0eXBlb2YgZS5y aWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209M0R0PQp5cGVvZiBl LmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9M0R0eXBlb2Yg ZS5sZWZ0IT0zRCI9CnVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxJKTp0fSxJLndpZHRoPTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8obj0zRGUsSSk6bn0sSS5oZWlnaHQ9 M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0zRGUsSSk6cn0sPQpJLnhT Y2FsZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxJKTpvfSxJ LnlTY2FsZT0zRGZ1bmM9CnRpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9M0RlLEkp OnV9LEkuelNjYWxlPTNEZnVuY3Rpb24oZSl7cmV0dXJuID0KYXJndW1lbnRzLmxlbmd0aD8oYT0z RGUsSSk6YX0sSS54RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5nPQp0 aD8oTj0zRGUsSSk6Tn0sSS55RG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KEM9M0RlLEkpOkM9Cn0sSS5zaXplRG9tYWluPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KEE9M0RlLEkpOkF9LEkueFJhbmdlPQo9M0RmdW5jdGlvbihlKXtyZXR1 cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsSSk6a30sSS55UmFuZ2U9M0RmdW5jdGlvbihlKXs9 CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxJKTpMfSxJLnNpemVSYW5nZT0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bT0KZW50cy5sZW5ndGg/KE89M0RlLEkpOk99LEkuZm9yY2VYPTNE ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Cj0zRGUsSSk6ZH0sSS5mb3Jj ZVk9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsSSk6dn0sSS5m bz0KcmNlU2l6ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPTNEZSxJ KTptfSxJLmludGVyYWN0aXZlPTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8oZz0zRGUsSSk6Z30sSS5wb2ludEtleT0zRGZ1bmN0aW9uKGUpe3I9CmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHk9M0RlLEkpOnl9LEkucG9pbnRBY3RpdmU9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndT0KbWVudHMubGVuZ3RoPyhiPTNEZSxJKTpifSxJLnBhZERhdGE9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oPQp3PTNEZSxJKTp3fSxJLnBhZERhdGFPdXRlcj0zRGZ1 bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPTNEZSxJKTo9CkV9LEkuY2xpcEVk Z2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz0zRGUsSSk6U30sSS5j bGlwVm9ybz0Kbm9pPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0Rl LEkpOnh9LEkudXNlVm9yb25vaT0zRGZ1bmN0PQppb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KEQ9M0RlLEQ9M0Q9M0Q9M0QhMSYmKHg9M0QhMSksSSk6RH0sSS5jbGlwUmE9CmRpdXM9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsSSk6VH0sSS5jb2xvcj0z RGZ1bmN0aW9uKD0KdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLnV0aWxzLmdldENv bG9yKHQpLEkpOml9LEkuc2hhcGU9M0RmdW5jdGlvPQpuKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhoPTNEZSxJKTpofSxJLm9ubHlDaXJjbGVzPTNEZnVuY3Rpb24oZSl7cmV0dXI9Cm4gYXJn dW1lbnRzLmxlbmd0aD8ocD0zRGUsSSk6cH0sSS5pZD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPz0KKHM9M0RlLEkpOnN9LEkuc2luZ2xlUG9pbnQ9M0RmdW5jdGlvbihlKXty ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0zRGUsSSk6PQpNfSxJfSxlLm1vZGVscy5zY2F0dGVy Q2hhcnQ9M0RmdW5jdGlvbigpe2Z1bmN0aW9uIEYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGk9Cm9u KGUpe2Z1bmN0aW9uIEooKXtpZihUKXJldHVybiBXLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIiku c3R5bGUoInBvaW50ZXItZT0KdmVudHMiLCJhbGwiKSwhMTtXLnNlbGVjdCgiLm52LXBvaW50LXBh dGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpPQo7dmFyIGk9M0RkMy5tb3VzZSh0 aGlzKTtoLmRpc3RvcnRpb24oeCkuZm9jdXMoaVswXSkscC5kaXN0b3J0aW9uKHgpLmZvY3VzKGk9 ClsxXSksVy5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNhbGwodCksYiYmVy5zZWxlY3QoIi5u di14Lm52LWF4aXMiKS5jYWxsKD0KbiksdyYmVy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxs KHIpLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmRhdHVtPQooZS5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSxXLnNlbGVjdCgiLm52LWRpc3RyaWJ1 dGk9Cm9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkp LmNhbGwodSl9dmFyIEM9M0RkMy5zZT0KbGVjdCh0aGlzKSxrPTNEdGhpcyxMPTNEKGZ8fHBhcnNl SW50KEMuc3R5bGUoIndpZHRoIikpfHw5NjApLWEubGVmdC1hLnJpZ2h0PQosRD0zRChsfHxwYXJz ZUludChDLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b207Ri51cGRhdGU9M0Rm dW5jdGk9Cm9uKCl7Qy5jYWxsKEYpfSxGLmNvbnRhaW5lcj0zRHRoaXMsQS5kaXNhYmxlZD0zRGUu bWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZT0KLmRpc2FibGVkfSk7aWYoIU8pe3ZhciBJO089M0R7 fTtmb3IoSSBpbiBBKUFbSV1pbnN0YW5jZW9mIEFycmF5P09bSV09M0RBW0ldPQouc2xpY2UoMCk6 T1tJXT0zREFbSV19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biBlLnZhbHU9CmVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIHE9M0RDLnNlbGVjdEFsbCgiLm52LW5v RGF0YSIpLmRhdGEoW19dKTtyZXR1cm4gcS5lbj0KdGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigi Y2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsPQplKCJ0ZXh0 LWFuY2hvciIsIm1pZGRsZSIpLHEuYXR0cigieCIsYS5sZWZ0K0wvMikuYXR0cigieSIsYS50b3Ar RC8yKS50ZXh0KGY9CnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxGfUMuc2VsZWN0QWxsKCIubnYtbm9E YXRhIikucmVtb3ZlKCksUD0zRFB8fGgsSD0zREh8fD0KcDt2YXIgUj0zREMuc2VsZWN0QWxsKCJn Lm52LXdyYXAubnYtc2NhdHRlckNoYXJ0IikuZGF0YShbZV0pLFU9M0RSLmVudGVyKCkuPQphcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zY2F0dGVyQ2hhcnQgbnYtY2hh cnQtIit0LmlkKCkpLHo9Cj0zRFUuYXBwZW5kKCJnIiksVz0zRFIuc2VsZWN0KCJnIik7ei5hcHBl bmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYj0KYWNrZ3JvdW5kIiksei5hcHBlbmQo ImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLHouYXBwZW5kKCJnIikuYXR0cigiPQpj bGFzcyIsIm52LXkgbnYtYXhpcyIpLHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zY2F0 dGVyV3JhcCIpLHouYXBwZW49CmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RXcmFwIiksei5h cHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYT0KcCIpLHouYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKTtpZih5KXt2YXIgWD0zRFM/TC8yOkw7aS53 PQppZHRoKFgpLFIuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksYS50 b3AhPTNEaS5oZWlnaHQoKSYmKGE9Ci50b3A9M0RpLmhlaWdodCgpLEQ9M0QobHx8cGFyc2VJbnQo Qy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEuYm90dG9tKT0KLFIuc2VsZWN0KCIubnYt bGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhMLVgpKyIsIisgLWEu dG9wPQorIikiKX1TJiYocy53aWR0aCgxODApLmNvbG9yKFsiIzQ0NCJdKSxXLnNlbGVjdCgiLm52 LWNvbnRyb2xzV3JhcCIpLmRhdHVtKGo9CikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAs IisgLWEudG9wKyIpIikuY2FsbChzKSksUi5hdHRyKCJ0cmFuc2Zvcm0iLD0KInRyYW5zbGF0ZSgi K2EubGVmdCsiLCIrYS50b3ArIikiKSxFJiZXLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIo InRyYW5zPQpmb3JtIiwidHJhbnNsYXRlKCIrTCsiLDApIiksdC53aWR0aChMKS5oZWlnaHQoRCku Y29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXs9CnJldHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0 ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKSxkIT0zRD0KPTNEMCYmdC54 RG9tYWluKG51bGwpLHYhPTNEPTNEMCYmdC55RG9tYWluKG51bGwpLFIuc2VsZWN0KCIubnYtc2Nh dHRlcldyYXAiPQopLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVk fSkpLmNhbGwodCk7aWYoZCE9M0Q9M0QwKXt2YXI9CiBWPTNEaC5kb21haW4oKVsxXS1oLmRvbWFp bigpWzBdO3QueERvbWFpbihbaC5kb21haW4oKVswXS1kKlYsaC5kb21haW4oKVsxXT0KK2QqVl0p fWlmKHYhPTNEPTNEMCl7dmFyICQ9M0RwLmRvbWFpbigpWzFdLXAuZG9tYWluKClbMF07dC55RG9t YWluKFtwLmRvbWFpPQpuKClbMF0tdiokLHAuZG9tYWluKClbMV0rdiokXSl9KHYhPTNEPTNEMHx8 ZCE9M0Q9M0QwKSYmUi5zZWxlY3QoIi5udi1zY2F0dGU9CnJXcmFwIikuZGF0dW0oZS5maWx0ZXIo ZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxiJiYobi5zY2FsZT0KKGgp LnRpY2tzKG4udGlja3MoKSYmbi50aWNrcygpLmxlbmd0aD9uLnRpY2tzKCk6TC8xMDApLnRpY2tT aXplKC1ELDApLFcuc2VsPQplY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0 cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmNhbGw9CihuKSksdyYmKHIuc2NhbGUocCku dGlja3Moci50aWNrcygpJiZyLnRpY2tzKCkubGVuZ3RoP3IudGlja3MoKTpELzM2KS50aWNrUz0K aXplKC1MLDApLFcuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksbSYmKG8uZ2V0RGF0 YSh0LngoKSkuc2NhbGUoaCkuPQp3aWR0aChMKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3Jl dHVybiBlLmNvbG9yfHxjKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb249Cih0LG4pe3JldHVybiFlW25d LmRpc2FibGVkfSkpLHouc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJj bD0KYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpLFcuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIp LmF0dHIoInRyYW5zZm9ybSIsInRyPQphbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5kYXR1 bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH09CikpLmNhbGwobykpLGcm Jih1LmdldERhdGEodC55KCkpLnNjYWxlKHApLndpZHRoKEQpLmNvbG9yKGUubWFwKGZ1bmN0aW9u KGUsdD0KKXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0 dXJuIWVbbl0uZGlzYWJsZWR9KSksei5zPQplbGVjdCgiLm52LWRpc3RXcmFwIikuYXBwZW5kKCJn IikuYXR0cigiY2xhc3MiLCJudi1kaXN0cmlidXRpb25ZIiksVy5zZWxlY3Q9CigiLm52LWRpc3Ry aWJ1dGlvblkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRT9MOi11LnNpemUoKSkr IiwwKSIpLj0KZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSku Y2FsbCh1KSksZDMuZmlzaGV5ZSYmKFcuc2VsPQplY3QoIi5udi1iYWNrZ3JvdW5kIikuYXR0cigi d2lkdGgiLEwpLmF0dHIoImhlaWdodCIsRCksVy5zZWxlY3QoIi5udi1iYWNrZ3I9Cm91bmQiKS5v bigibW91c2Vtb3ZlIixKKSxXLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigiY2xpY2siLGZ1 bmN0aW9uKCl7VD0KPTNEIVR9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50Q2xpY2suZnJlZXplRmlz aGV5ZSIsZnVuY3Rpb24oKXtUPTNEIVR9KSkscy5kPQppc3BhdGNoLm9uKCJsZWdlbmRDbGljayIs ZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPTNEIWUuZGlzYWJsZWQseD0zRGUuZGlzYWI9CmxlZD8w OjIuNSxXLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUu ZGlzYWJsZWQ/Im5vbj0KZSI6ImFsbCIpLFcuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHls ZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/ImFsPQpsIjoibm9uZSIpLGUuZGlzYWJsZWQ/ KGguZGlzdG9ydGlvbih4KS5mb2N1cygwKSxwLmRpc3RvcnRpb24oeCkuZm9jdXMoMCksVy49CnNl bGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxXLnNlbGVjdCgiLm52LXgubnYtYXhpcyIp LmNhbGwobiksVy5zZWxlYz0KdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpOlQ9M0QhMSxGLnVw ZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiPQosZnVuY3Rpb24oZSl7QS5kaXNh YmxlZD0zRGUuZGlzYWJsZWQsTS5zdGF0ZUNoYW5nZShBKSxGLnVwZGF0ZSgpfSksdC5kaXNwYXQ9 CmNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgi Lm52LWNoYXJ0LSIrdC5pZCgpKz0KIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1k aXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGZ1bmN0aW9uPQoodCxuKXtyZXR1cm4gZS5w b3NbMV0tRH0pLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uu c2U9CnJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLGUucG9z WzBdK28uc2l6ZSgpKSxlLnBvcz0zRD0KW2UucG9zWzBdK2EubGVmdCxlLnBvc1sxXSthLnRvcF0s TS50b29sdGlwU2hvdyhlKX0pLE0ub24oInRvb2x0aXBTaG93IixmdW5jPQp0aW9uKGUpe04mJkIo ZSxrLnBhcmVudE5vZGUpfSksTS5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0 LmRpc2E9CmJsZWQhPTNEInVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmRp c2FibGVkPTNEdC5kaXNhYmxlZFtuXX0pLD0KQS5kaXNhYmxlZD0zRHQuZGlzYWJsZWQpLEYudXBk YXRlKCl9KSxQPTNEaC5jb3B5KCksSD0zRHAuY29weSgpfSksRn12YXIgdD0KPTNEZS5tb2RlbHMu c2NhdHRlcigpLG49M0RlLm1vZGVscy5heGlzKCkscj0zRGUubW9kZWxzLmF4aXMoKSxpPTNEZS5t b2RlbHMuPQpsZWdlbmQoKSxzPTNEZS5tb2RlbHMubGVnZW5kKCksbz0zRGUubW9kZWxzLmRpc3Ry aWJ1dGlvbigpLHU9M0RlLm1vZGVscy5kaXM9CnRyaWJ1dGlvbigpLGE9M0R7dG9wOjMwLHJpZ2h0 OjIwLGJvdHRvbTo1MCxsZWZ0Ojc1fSxmPTNEbnVsbCxsPTNEbnVsbCxjPTNEZT0KLnV0aWxzLmRl ZmF1bHRDb2xvcigpLGg9M0RkMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGlu ZWFyKS5kaXN0PQpvcnRpb24oMCk6dC54U2NhbGUoKSxwPTNEZDMuZmlzaGV5ZT9kMy5maXNoZXll LnNjYWxlKGQzLnNjYWxlLmxpbmVhcikuZGlzdG89CnJ0aW9uKDApOnQueVNjYWxlKCksZD0zRDAs dj0zRDAsbT0zRCExLGc9M0QhMSx5PTNEITAsYj0zRCEwLHc9M0QhMCxFPTNEITEsUz0KPTNEISFk My5maXNoZXllLHg9M0QwLFQ9M0QhMSxOPTNEITAsQz0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4i PHN0cm9uZz4iK3QrPQoiPC9zdHJvbmc+In0saz0zRGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0 cm9uZz4iK24rIjwvc3Ryb25nPiJ9LEw9M0RudWxsLEE9Cj0zRHt9LE89M0RudWxsLE09M0RkMy5k aXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiYz0KaGFu Z2VTdGF0ZSIpLF89M0QiTm8gRGF0YSBBdmFpbGFibGUuIixEPTNEMDt0LnhTY2FsZShoKS55U2Nh bGUocCksbi5vcmllbnQoPQoiYm90dG9tIikudGlja1BhZGRpbmcoMTApLHIub3JpZW50KEU/InJp Z2h0IjoibGVmdCIpLnRpY2tQYWRkaW5nKDEwKSxvLmF4aXM9CigieCIpLHUuYXhpcygieSIpLHMu dXBkYXRlU3RhdGUoITEpO3ZhciBQLEgsQj0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0RpLnBvcz0K WzBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGY9M0Rp LnBvc1swXSsocy5vZmZzZXRMPQplZnR8fDApLGw9M0RwLnJhbmdlKClbMF0rYS50b3ArKHMub2Zm c2V0VG9wfHwwKSxjPTNEaC5yYW5nZSgpWzBdK2EubGVmdCsocy49Cm9mZnNldExlZnR8fDApLGQ9 M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLHY9M0RuLnRpY2tGb3JtYXQoKSh0LngoKShpLnBv aT0KbnQsaS5wb2ludEluZGV4KSksbT0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5w b2ludEluZGV4KSk7QyE9M0RudWxsPQomJmUudG9vbHRpcC5zaG93KFtmLGxdLEMoaS5zZXJpZXMu a2V5LHYsbSxpLEYpLCJuIiwxLHMsIngtbnZ0b29sdGlwIiksayE9M0Q9Cm51bGwmJmUudG9vbHRp cC5zaG93KFtjLGRdLGsoaS5zZXJpZXMua2V5LHYsbSxpLEYpLCJlIiwxLHMsInktbnZ0b29sdGlw IiksTD0KIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtvLHVdLEwoaS5zZXJpZXMua2V5LHYsbSxp LEYpLGkudmFsdWU8MD8ibiI6InMiLG51PQpsbCxzKX0saj0zRFt7a2V5OiJNYWduaWZ5IixkaXNh YmxlZDohMH1dO3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2U9Cm91dC50b29sdGlw IixmdW5jdGlvbihlKXtNLnRvb2x0aXBIaWRlKGUpLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5p ZCgpKyIgLj0KbnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJ bmRleCkuYXR0cigieTEiLDApLGQzLnNlbGVjPQp0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYt c2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmQ9CmV4KS5hdHRy KCJ4MiIsdS5zaXplKCkpfSksTS5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7TiYmZS50b29s dGlwLmNsZWFudT0KcCgpfSksRi5kaXNwYXRjaD0zRE0sRi5zY2F0dGVyPTNEdCxGLmxlZ2VuZD0z RGksRi5jb250cm9scz0zRHMsRi54QXhpcz0zRG4sPQpGLnlBeGlzPTNEcixGLmRpc3RYPTNEbyxG LmRpc3RZPTNEdSxkMy5yZWJpbmQoRix0LCJpZCIsImludGVyYWN0aXZlIiwicG9pbnQ9CkFjdGl2 ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieERv bWFpbiIsInlEb21haT0KbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJzaXplUmFu Z2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiPQosImNsaXBWb3Jvbm9pIiwiY2xpcFJh ZGl1cyIsInVzZVZvcm9ub2kiKSxGLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmI9Cmlu ZChGKSxGLm1hcmdpbj0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnRv cD0zRHR5cGVvZiBlLnRvcD0KIT0zRCJ1bmRlZmluZWQiP2UudG9wOmEudG9wLGEucmlnaHQ9M0R0 eXBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0PQo6YS5yaWdodCxhLmJvdHRvbT0z RHR5cGVvZiBlLmJvdHRvbSE9M0QidW5kZWZpbmVkIj9lLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9 Cj0zRHR5cGVvZiBlLmxlZnQhPTNEInVuZGVmaW5lZCI/ZS5sZWZ0OmEubGVmdCxGKTphfSxGLndp ZHRoPTNEZnVuY3Rpb24oZSl7cj0KZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0zRGUsRik6Zn0s Ri5oZWlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzPQoubGVuZ3RoPyhsPTNEZSxG KTpsfSxGLmNvbG9yPTNEZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9M0Rl LnU9CnRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxvLmNvbG9yKGMpLHUuY29sb3IoYyksRik6 Y30sRi5zaG93RGlzdFg9M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyht PTNEZSxGKTptfSxGLnNob3dEaXN0WT0zRGZ1bmN0aW9uKGUpe3JldHVyPQpuIGFyZ3VtZW50cy5s ZW5ndGg/KGc9M0RlLEYpOmd9LEYuc2hvd0NvbnRyb2xzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFy Z3VtZW49CnRzLmxlbmd0aD8oUz0zRGUsRik6U30sRi5zaG93TGVnZW5kPTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0KeT0zRGUsRik6eX0sRi5zaG93WEF4aXM9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0zRGUsRik6Yn0sPQpGLnNob3dZQXhp cz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PTNEZSxGKTp3fSxGLnJp Z2h0QWxpZ249CllBeGlzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9 M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdD0KIiksRik6RX0sRi5maXNoZXllPTNEZnVuY3Rp b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9M0RlLEYpOnh9LEYueFBhPQpkZGluZz0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPTNEZSxGKTpkfSxGLnlQYWRk aW5nPTNEZnVuY3Q9CmlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0zRGUsRik6dn0s Ri50b29sdGlwcz0zRGZ1bmN0aW9uKGUpe3JldHVybj0KIGFyZ3VtZW50cy5sZW5ndGg/KE49M0Rl LEYpOk59LEYudG9vbHRpcENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lPQpudHMu bGVuZ3RoPyhMPTNEZSxGKTpMfSxGLnRvb2x0aXBYQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGU9Cm5ndGg/KEM9M0RlLEYpOkN9LEYudG9vbHRpcFlDb250ZW50PTNEZnVu Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KD0Kaz0zRGUsRik6a30sRi5zdGF0ZT0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPTNEZSxGKTpBfSxGLmRlPQpm YXVsdFN0YXRlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89M0RlLEYp Ok99LEYubm9EYXRhPTNEZnU9Cm5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0z RGUsRik6X30sRi50cmFuc2l0aW9uRHVyYXRpb249M0RmdW5jdD0KaW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhEPTNEZSxGKTpEfSxGfSxlLm1vZGVscy5zY2F0dGVyUGx1c0xpbmVDaGFy PQp0PTNEZnVuY3Rpb24oKXtmdW5jdGlvbiBCKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7 ZnVuY3Rpb24gVigpe2lmKFMpcmU9CnR1cm4gVS5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnN0 eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLCExO1Uuc2VsZWN0KD0KIi5udi1wb2ludC1wYXRo cyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgaT0zRGQzLm1vdXNlKHRoaXMp O2guPQpkaXN0b3J0aW9uKEUpLmZvY3VzKGlbMF0pLHAuZGlzdG9ydGlvbihFKS5mb2N1cyhpWzFd KSxVLnNlbGVjdCgiLm52LXNjYXR0ZXI9CldyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihl KXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLGcmJlUuc2VsZWN0KD0KIi5udi14Lm52LWF4 aXMiKS5jYWxsKG4pLHkmJlUuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSxVLnNlbGVj dCgiLm52PQotZGlzdHJpYnV0aW9uWCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVy biFlLmRpc2FibGVkfSkpLmNhbGwobyksVS49CnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5k YXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKT0KLmNhbGwodSl9 dmFyIFQ9M0RkMy5zZWxlY3QodGhpcyksTj0zRHRoaXMsQz0zRChmfHxwYXJzZUludChULnN0eWxl KCJ3aWR0aCIpPQopfHw5NjApLWEubGVmdC1hLnJpZ2h0LE09M0QobHx8cGFyc2VJbnQoVC5zdHls ZSgiaGVpZ2h0IikpfHw0MDApLWEudG9wLWEuYm89CnR0b207Qi51cGRhdGU9M0RmdW5jdGlvbigp e1QuY2FsbChCKX0sQi5jb250YWluZXI9M0R0aGlzLGsuZGlzYWJsZWQ9M0RlLm1hcD0KKGZ1bmN0 aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFMKXt2YXIgajtMPTNEe307Zm9yKGogaW4g aylrW2pdaW5zdGFuPQpjZW9mIEFycmF5P0xbal09M0RrW2pdLnNsaWNlKDApOkxbal09M0RrW2pd fWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW49CmN0aW9uKGUpe3JldHVybiBlLnZhbHVl cy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBGPTNEVC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKT0KLmRh dGEoW09dKTtyZXR1cm4gRi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZk MyBudi1ub0RhdGEiKS5hPQp0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJt aWRkbGUiKSxGLmF0dHIoIngiLGEubGVmdCtDLzIpLmF0dHI9CigieSIsYS50b3ArTS8yKS50ZXh0 KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQn1ULnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbT0K b3ZlKCksaD0zRHQueFNjYWxlKCkscD0zRHQueVNjYWxlKCksXz0zRF98fGgsRD0zRER8fHA7dmFy IEk9M0RULnNlbGVjdEFsbCgiPQpnLm52LXdyYXAubnYtc2NhdHRlckNoYXJ0IikuZGF0YShbZV0p LHE9M0RJLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3M9CiIsIm52ZDMgbnYtd3JhcCBu di1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkpLFI9M0RxLmFwcGVuZCgiZyIpLFU9M0RJ Lj0Kc2VsZWN0KCJnIik7Ui5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYmFj a2dyb3VuZCIpLnN0eWxlKCJwb2luPQp0ZXItZXZlbnRzIiwibm9uZSIpLFIuYXBwZW5kKCJnIiku YXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxSLmFwcGVuZCgiZyI9CikuYXR0cigiY2xhc3Mi LCJudi15IG52LWF4aXMiKSxSLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdHRlcldy YXAiKT0KLFIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1yZWdyZXNzaW9uTGluZXNXcmFw IiksUi5hcHBlbmQoImciKS5hdHRyKCJjPQpsYXNzIiwibnYtZGlzdFdyYXAiKSxSLmFwcGVuZCgi ZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLFIuYXBwZW5kKCI9CmciKS5hdHRyKCJj bGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLEkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIr YS5sZWZ0Kz0KIiwiK2EudG9wKyIpIiksYiYmVS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRy KCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDPQorIiwwKSIpLG0mJihpLndpZHRoKEMvMiksSS5z ZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZSkuY2FsbChpKSxhLnRvcCE9Cj0zRGkuaGVp Z2h0KCkmJihhLnRvcD0zRGkuaGVpZ2h0KCksTT0zRChsfHxwYXJzZUludChULnN0eWxlKCJoZWln aHQiKSl8fDQwMD0KKS1hLnRvcC1hLmJvdHRvbSksSS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIiku YXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrPQpDLzIrIiwiKyAtYS50b3ArIikiKSksdyYm KHMud2lkdGgoMTgwKS5jb2xvcihbIiM0NDQiXSksVS5zZWxlY3QoIi5udi1jb250cm89CmxzV3Jh cCIpLmRhdHVtKEgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1hLnRvcCsiKSIp LmNhbGwocykpLHQudz0KaWR0aChDKS5oZWlnaHQoTSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyPQooZnVuY3Rpb24odCxuKXtyZXR1cm4h ZVtuXS5kaXNhYmxlZH0pKSxJLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS49CmZp bHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLEkuc2VsZWN0KCIu bnYtcmVncmVzc2lvbkxpbj0KZXNXcmFwIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNudi1lZGdl LWNsaXAtIit0LmlkKCkrIikiKTt2YXIgej0zREkuc2VsZWN0PQooIi5udi1yZWdyZXNzaW9uTGlu ZXNXcmFwIikuc2VsZWN0QWxsKCIubnYtcmVnTGluZXMiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHU9 CnJuIGV9KTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1yZWdMaW5lcyIp O3ZhciBXPTNEei5zZWxlY3RBbD0KbCgiLm52LXJlZ0xpbmUiKS5kYXRhKGZ1bmN0aW9uKGUpe3Jl dHVybltlXX0pLFg9M0RXLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuPQphdHRyKCJjbGFzcyIsIm52 LXJlZ0xpbmUiKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDApO1cuYXR0cigieDEiLGgucmFuZ2Uo KVs9CjBdKS5hdHRyKCJ4MiIsaC5yYW5nZSgpWzFdKS5hdHRyKCJ5MSIsZnVuY3Rpb24oZSx0KXty ZXR1cm4gcChoLmRvbWFpbigpWzBdKj0KZS5zbG9wZStlLmludGVyY2VwdCl9KS5hdHRyKCJ5MiIs ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChoLmRvbWFpbigpWzFdKmUuc2xvPQpwZStlLmludGVyY2Vw dCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGMoZSxuKX0pLnN0eWxl KCJzdHI9Cm9rZS1vcGFjaXR5IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmRpc2FibGVkfHx0eXBl b2YgZS5zbG9wZT0zRD0zRCJ1bmRlZmluZT0KZCJ8fHR5cGVvZiBlLmludGVyY2VwdD0zRD0zRCJ1 bmRlZmluZWQiPzA6MX0pLGcmJihuLnNjYWxlKGgpLnRpY2tzKG4udGlja3MoPQopP24udGlja3Mo KTpDLzEwMCkudGlja1NpemUoLU0sMCksVS5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0 cmFuc2Zvcm09CiIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbChuKSkseSYm KHIuc2NhbGUocCkudGlja3Moci50aWNrcygpPz0Kci50aWNrcygpOk0vMzYpLnRpY2tTaXplKC1D LDApLFUuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksZCYmKG8uZ2V0PQpEYXRhKHQu eCgpKS5zY2FsZShoKS53aWR0aChDKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBl LmNvbG9yfHxjKGU9Cix0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2Fi bGVkfSkpLFIuc2VsZWN0KCIubnYtZGlzdFdyYXAiKT0KLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz IiwibnYtZGlzdHJpYnV0aW9uWCIpLFUuc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpPQouYXR0 cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5kYXR1bShlLmZp bHRlcihmdW5jdGlvbig9CmUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobykpLHYmJih1Lmdl dERhdGEodC55KCkpLnNjYWxlKHApLndpZHRoKE0pLmNvbD0Kb3IoZS5tYXAoZnVuY3Rpb24oZSx0 KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuPQoh ZVtuXS5kaXNhYmxlZH0pKSxSLnNlbGVjdCgiLm52LWRpc3RXcmFwIikuYXBwZW5kKCJnIikuYXR0 cigiY2xhc3MiLCJudi1kaXM9CnRyaWJ1dGlvblkiKSxVLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlv blkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYj0KP0M6LXUuc2l6ZSgpKSsiLDAp IikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1 PQopKSxkMy5maXNoZXllJiYoVS5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikuYXR0cigid2lkdGgi LEMpLmF0dHIoImhlaWdodCIsTSk9CixVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigibW91 c2Vtb3ZlIixWKSxVLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbj0KKCJjbGljayIsZnVuY3Rp b24oKXtTPTNEIVN9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50Q2xpY2suZnJlZXplRmlzaGV5ZSIs ZnVuPQpjdGlvbigpe1M9M0QhU30pKSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rp b24oZSxpKXtlLmRpc2FibGVkPTNEIWU9Ci5kaXNhYmxlZCxFPTNEZS5kaXNhYmxlZD8wOjIuNSxV LnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldj0KZW50cyIsZS5kaXNh YmxlZD8ibm9uZSI6ImFsbCIpLFUuc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9p bnRlci1lPQp2ZW50cyIsZS5kaXNhYmxlZD8iYWxsIjoibm9uZSIpLGUuZGlzYWJsZWQ/KGguZGlz dG9ydGlvbihFKS5mb2N1cygwKSxwLmRpc3Q9Cm9ydGlvbihFKS5mb2N1cygwKSxVLnNlbGVjdCgi Lm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSxVLnNlbGVjdCgiLm52LXgubnYtYT0KeGlzIikuY2Fs bChuKSxVLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpOlM9M0QhMSxCLnVwZGF0ZSgp fSksaS5kaXNwPQphdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7az0zRGUsQS5zdGF0 ZUNoYW5nZShrKSxCLnVwZGF0ZSgpfSksdC5kaXM9CnBhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVy LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZD0KKCkrIiAu bnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0 cigieTEiLGUucG9zPQpbMV0tTSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYt c2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXM9CnR5LSIrZS5wb2ludEluZGV4KS5hdHRy KCJ4MiIsZS5wb3NbMF0rby5zaXplKCkpLGUucG9zPTNEW2UucG9zWzBdK2EubGVmdCxlLj0KcG9z WzFdK2EudG9wXSxBLnRvb2x0aXBTaG93KGUpfSksQS5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9u KGUpe3gmJlAoZSxOLnBhPQpyZW50Tm9kZSl9KSxBLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24o dCl7dHlwZW9mIHQuZGlzYWJsZWQhPTNEInVuZGVmaW5lZCI9CiYmKGUuZm9yRWFjaChmdW5jdGlv bihlLG4pe2UuZGlzYWJsZWQ9M0R0LmRpc2FibGVkW25dfSksay5kaXNhYmxlZD0zRHQuZGlzYT0K YmxlZCksQi51cGRhdGUoKX0pLF89M0RoLmNvcHkoKSxEPTNEcC5jb3B5KCl9KSxCfXZhciB0PTNE ZS5tb2RlbHMuc2NhdHRlcigpPQosbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2RlbHMuYXhp cygpLGk9M0RlLm1vZGVscy5sZWdlbmQoKSxzPTNEZS5tb2RlbHM9Ci5sZWdlbmQoKSxvPTNEZS5t b2RlbHMuZGlzdHJpYnV0aW9uKCksdT0zRGUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLGE9M0R7dG9w Oj0KMzAscmlnaHQ6MjAsYm90dG9tOjUwLGxlZnQ6NzV9LGY9M0RudWxsLGw9M0RudWxsLGM9M0Rl LnV0aWxzLmRlZmF1bHRDb2xvcigpPQosaD0zRGQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShk My5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC54U2NhbGUoKSw9CnA9M0RkMy5maXNoZXll P2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueVNjYWxl KCksZD0KPTNEITEsdj0zRCExLG09M0QhMCxnPTNEITAseT0zRCEwLGI9M0QhMSx3PTNEISFkMy5m aXNoZXllLEU9M0QwLFM9M0QhMSx4PTNEPQohMCxUPTNEZnVuY3Rpb24oZSx0LG4pe3JldHVybiI8 c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0sTj0zRGZ1bmN0aW9uKGUsdCxuKXs9CnJldHVybiI8c3Ry b25nPiIrbisiPC9zdHJvbmc+In0sQz0zRGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aDM+Iitl KyI8L2gzPj0KIisiPHA+IityKyI8L3A+In0saz0zRHt9LEw9M0RudWxsLEE9M0RkMy5kaXNwYXRj aCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkPQplIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0 ZSIpLE89M0QiTm8gRGF0YSBBdmFpbGFibGUuIixNPTNEMDt0LnhTY2FsZShoKS49CnlTY2FsZShw KSxuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoMTApLHIub3JpZW50KGI/InJpZ2h0Ijoi bGVmdCIpLnRpYz0Ka1BhZGRpbmcoMTApLG8uYXhpcygieCIpLHUuYXhpcygieSIpLHMudXBkYXRl U3RhdGUoITEpO3ZhciBfLEQsUD0zRGZ1bmN0aW9uPQooaSxzKXt2YXIgbz0zRGkucG9zWzBdKyhz Lm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGY9M0Q9CmkucG9z WzBdKyhzLm9mZnNldExlZnR8fDApLGw9M0RwLnJhbmdlKClbMF0rYS50b3ArKHMub2Zmc2V0VG9w fHwwKSxjPTNEaC5yYT0KbmdlKClbMF0rYS5sZWZ0KyhzLm9mZnNldExlZnR8fDApLGQ9M0RpLnBv c1sxXSsocy5vZmZzZXRUb3B8fDApLHY9M0RuLnRpY2tGPQpvcm1hdCgpKHQueCgpKGkucG9pbnQs aS5wb2ludEluZGV4KSksbT0zRHIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2k9Cm50 SW5kZXgpKTtUIT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtmLGxdLFQoaS5zZXJpZXMua2V5LHYs bSxpLEIpLCJuIiwxLHMsIj0KeC1udnRvb2x0aXAiKSxOIT0zRG51bGwmJmUudG9vbHRpcC5zaG93 KFtjLGRdLE4oaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJlIiwxPQoscywieS1udnRvb2x0aXAiKSxD IT0zRG51bGwmJmUudG9vbHRpcC5zaG93KFtvLHVdLEMoaS5zZXJpZXMua2V5LHYsbSxpLnBvaW49 CnQudG9vbHRpcCxpLEIpLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9LEg9M0Rbe2tleToiTWFn bmlmeSIsZGlzYWJsZWQ6ITB9XT0KO3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2Vv dXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7QS50b29sdGlwSGlkZShlPQopLGQzLnNlbGVjdCgiLm52 LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgt Iis9CmUucG9pbnRJbmRleCkuYXR0cigieTEiLDApLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5p ZCgpKyIgLm52LXNlcmllcy0iK2Uucz0KZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJ bmRleCkuYXR0cigieDIiLHUuc2l6ZSgpKX0pLEEub24oInRvb2x0aXBIPQppZGUiLGZ1bmN0aW9u KCl7eCYmZS50b29sdGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0Y2g9M0RBLEIuc2NhdHRlcj0zRHQs Qi5sZWc9CmVuZD0zRGksQi5jb250cm9scz0zRHMsQi54QXhpcz0zRG4sQi55QXhpcz0zRHIsQi5k aXN0WD0zRG8sQi5kaXN0WT0zRHUsZDMucj0KZWJpbmQoQix0LCJpZCIsImludGVyYWN0aXZlIiwi cG9pbnRBY3RpdmUiLCJ4IiwieSIsInNoYXBlIiwic2l6ZSIsInhTY2FsZSIsPQoieVNjYWxlIiwi elNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWlu Iiwic2l6ZVI9CmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25v aSIsImNsaXBSYWRpdXMiLCJ1c2VWb3Jvbm9pIj0KKSxCLm9wdGlvbnM9M0RlLnV0aWxzLm9wdGlv bnNGdW5jLmJpbmQoQiksQi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJnPQp1bWVudHMu bGVuZ3RoPyhhLnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDphLnRvcCxh LnJpZ2h0PTNEdHk9CnBlb2YgZS5yaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0OmEucmlnaHQs YS5ib3R0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEIj0KdW5kZWZpbmVkIj9lLmJvdHRvbTphLmJv dHRvbSxhLmxlZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDphPQoubGVm dCxCKTphfSxCLndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9 M0RlLEIpOmZ9LEIuaGU9CmlnaHQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0 aD8obD0zRGUsQik6bH0sQi5jb2xvcj0zRGZ1bmN0aW9uKD0KdCl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg/KGM9M0RlLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoYyksby5jb2xvcihjKSx1PQou Y29sb3IoYyksQik6Y30sQi5zaG93RGlzdFg9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oZD0zRGUsQik9CjpkfSxCLnNob3dEaXN0WT0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyh2PTNEZSxCKTp2fSxCLnNob3dDbz0KbnRyb2xzPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9M0RlLEIpOnd9LEIuc2hvd0xlZ2VuZD0zRGZ1 PQpuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09M0RlLEIpOm19LEIuc2hvd1hB eGlzPTNEZnVuY3Rpb24oZSl7cmU9CnR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0zRGUsQik6Z30s Qi5zaG93WUF4aXM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyh5PTNE ZSxCKTp5fSxCLnJpZ2h0QWxpZ25ZQXhpcz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuPQpndGg/KGI9M0RlLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLEIpOmJ9LEIuZmlzaGV5 ZT0zRGZ1bmN0aW9uKGUpe3JldHVybiA9CmFyZ3VtZW50cy5sZW5ndGg/KEU9M0RlLEIpOkV9LEIu dG9vbHRpcHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbj0KZ3RoPyh4PTNEZSxC KTp4fSxCLnRvb2x0aXBDb250ZW50PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KEM9Cj0zRGUsQik6Q30sQi50b29sdGlwWENvbnRlbnQ9M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8oVD0zRGUsQj0KKTpUfSxCLnRvb2x0aXBZQ29udGVudD0zRGZ1bmN0 aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPTNEZSxCKTpOfSxCPQouc3RhdGU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0zRGUsQik6a30sQi5kZWZhdWx0 U3RhdGU9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPTNEZSxCKTpM fSxCLm5vRGF0YT0zRGZ1bmN0aW9uKGUpe3JldD0KdXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89M0Rl LEIpOk99LEIudHJhbnNpdGlvbkR1cmF0aW9uPTNEZnVuY3Rpb24oZSl7cmV0dXJuPQogYXJndW1l bnRzLmxlbmd0aD8oTT0zRGUsQik6TX0sQn0sZS5tb2RlbHMuc3BhcmtsaW5lPTNEZnVuY3Rpb24o KXtmdW5jdGlvbiA9CmQoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT0zRG4tdC5s ZWZ0LXQucmlnaHQsZD0zRHItdC50b3AtdC5ib3R0bz0KbSx2PTNEZDMuc2VsZWN0KHRoaXMpO3Mu ZG9tYWluKGx8fGQzLmV4dGVudChlLHUpKS5yYW5nZShofHxbMCxpXSksby5kb21haW4oPQpjfHxk My5leHRlbnQoZSxhKSkucmFuZ2UocHx8W2QsMF0pO3ZhciBtPTNEdi5zZWxlY3RBbGwoImcubnYt d3JhcC5udi1zcGFya2w9CmluZSIpLmRhdGEoW2VdKSxnPTNEbS5lbnRlcigpLmFwcGVuZCgiZyIp LmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNwYT0KcmtsaW5lIiksYj0zRGcuYXBwZW5k KCJnIiksdz0zRG0uc2VsZWN0KCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoPQoi K3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgRT0zRG0uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShm dW5jdGlvbihlKXtyZXR1cm49CltlXX0pO0UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxFLmV4aXQo KS5yZW1vdmUoKSxFLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKD0KZSx0KXtyZXR1cm4gZS5jb2xv cnx8ZihlLHQpfSkuYXR0cigiZCIsZDMuc3ZnLmxpbmUoKS54KGZ1bmN0aW9uKGUsdCl7cmV0dXJu PQogcyh1KGUsdCkpfSkueShmdW5jdGlvbihlLHQpe3JldHVybiBvKGEoZSx0KSl9KSk7dmFyIFM9 M0RtLnNlbGVjdEFsbCgiY2lyY2w9CmUubnYtcG9pbnQiKS5kYXRhKGZ1bmN0aW9uKGUpe2Z1bmN0 aW9uIG4odCl7aWYodCE9M0QtMSl7dmFyIG49M0RlW3RdO3JldHVybj0KIG4ucG9pbnRJbmRleD0z RHQsbn1yZXR1cm4gbnVsbH12YXIgdD0zRGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0 KX0pPQoscj0zRG4odC5sYXN0SW5kZXhPZihvLmRvbWFpbigpWzFdKSksaT0zRG4odC5pbmRleE9m KG8uZG9tYWluKClbMF0pKSxzPTNEbig9CnQubGVuZ3RoLTEpO3JldHVybltpLHIsc10uZmlsdGVy KGZ1bmN0aW9uKGUpe3JldHVybiBlIT0zRG51bGx9KX0pO1MuZW50ZXIoKT0KLmFwcGVuZCgiY2ly Y2xlIiksUy5leGl0KCkucmVtb3ZlKCksUy5hdHRyKCJjeCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4g cyh1KGUsPQplLnBvaW50SW5kZXgpKX0pLmF0dHIoImN5IixmdW5jdGlvbihlLHQpe3JldHVybiBv KGEoZSxlLnBvaW50SW5kZXgpKX0pLmF0dHI9CigiciIsMikuYXR0cigiY2xhc3MiLGZ1bmN0aW9u KGUsdCl7cmV0dXJuIHUoZSxlLnBvaW50SW5kZXgpPTNEPTNEcy5kb21haW4oKT0KWzFdPyJudi1w b2ludCBudi1jdXJyZW50VmFsdWUiOmEoZSxlLnBvaW50SW5kZXgpPTNEPTNEby5kb21haW4oKVsw XT8ibnYtcG9pPQpudCBudi1taW5WYWx1ZSI6Im52LXBvaW50IG52LW1heFZhbHVlIn0pfSksZH12 YXIgdD0zRHt0b3A6MixyaWdodDowLGJvdHRvbTo9CjIsbGVmdDowfSxuPTNENDAwLHI9M0QzMixp PTNEITAscz0zRGQzLnNjYWxlLmxpbmVhcigpLG89M0RkMy5zY2FsZS5saW5lYXIoKT0KLHU9M0Rm dW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj0zRGUu dXRpbHMuZ2V0Q29sPQpvcihbIiMwMDAiXSksbCxjLGgscDtyZXR1cm4gZC5vcHRpb25zPTNEZS51 dGlscy5vcHRpb25zRnVuYy5iaW5kKGQpLGQubWFyZ2k9Cm49M0RmdW5jdGlvbihlKXtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aD8odC50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZD0KIj9l LnRvcDp0LnRvcCx0LnJpZ2h0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdo dDp0LnJpZ2h0LHQuYm90PQp0b209M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206dC5ib3R0b20sdC5sZWZ0PTNEdHlwZW9mIGUubGU9CmZ0IT0zRCJ1bmRlZmluZWQiP2Uu bGVmdDp0LmxlZnQsZCk6dH0sZC53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudD0K cy5sZW5ndGg/KG49M0RlLGQpOm59LGQuaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHI9M0RlPQosZCk6cn0sZC54PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KHU9M0RkMy5mdW5jdG9yKGUpLGQpOnV9LGQ9Ci55PTNEZnVuY3Rpb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9M0RkMy5mdW5jdG9yKGUpLGQpOmF9LGQueFNjYWxl PQo9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0zRGUsZCk6c30sZC55 U2NhbGU9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTNEZSxkKTpv fSxkLnhEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMubGVuZ3RoPyhsPTNE ZSxkKTpsfSxkLnlEb21haW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o Yz0KPTNEZSxkKTpjfSxkLnhSYW5nZT0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyhoPTNEZSxkKTpofSxkLnlSPQphbmdlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50 cy5sZW5ndGg/KHA9M0RlLGQpOnB9LGQuYW5pbWF0ZT0zRGZ1bmN0aW89Cm4oZSl7cmV0dXJuIGFy Z3VtZW50cy5sZW5ndGg/KGk9M0RlLGQpOml9LGQuY29sb3I9M0RmdW5jdGlvbih0KXtyZXR1cm4g YXJndT0KbWVudHMubGVuZ3RoPyhmPTNEZS51dGlscy5nZXRDb2xvcih0KSxkKTpmfSxkfSxlLm1v ZGVscy5zcGFya2xpbmVQbHVzPTNEZnVuPQpjdGlvbigpe2Z1bmN0aW9uIHYoZSl7cmV0dXJuIGUu ZWFjaChmdW5jdGlvbihjKXtmdW5jdGlvbiBPKCl7aWYoYSlyZXR1cm47dmE9CnIgZT0zREMuc2Vs ZWN0QWxsKCIubnYtaG92ZXJWYWx1ZSIpLmRhdGEodSkscj0zRGUuZW50ZXIoKS5hcHBlbmQoImci KS5hdHRyKD0KImNsYXNzIiwibnYtaG92ZXJWYWx1ZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIs MCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCk7PQplLmV4aXQoKS5zdHlsZSgic3Ryb2tlLW9wYWNp dHkiLDApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLnJlbW92ZSgpLGUuYXR0cig9CiJ0cmFuc2Zv cm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitzKHQueCgpKGNbZV0sZSkpKyIsMCki fSkuc3R5bGUoIj0Kc3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDEpO2lm KCF1Lmxlbmd0aClyZXR1cm47ci5hcHBlbmQoImxpPQpuZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5 MSIsLW4udG9wKS5hdHRyKCJ4MiIsMCkuYXR0cigieTIiLGIpLHIuYXBwZW5kKCJ0ZXg9CnQiKS5h dHRyKCJjbGFzcyIsIm52LXhWYWx1ZSIpLmF0dHIoIngiLC02KS5hdHRyKCJ5Iiwtbi50b3ApLmF0 dHIoInRleHQtYW5jaD0Kb3IiLCJlbmQiKS5hdHRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLm52 LWhvdmVyVmFsdWUgLm52LXhWYWx1ZSIpLnRleHQoZih0PQoueCgpKGNbdVswXV0sdVswXSkpKSxy LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYteVZhbHVlIikuYXR0cigieCIsNik9Ci5h dHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5hdHRyKCJkeSIsIi45 ZW0iKSxDLnNlbGVjdCgiLj0KbnYtaG92ZXJWYWx1ZSAubnYteVZhbHVlIikudGV4dChsKHQueSgp KGNbdVswXV0sdVswXSkpKX1mdW5jdGlvbiBNKCl7ZnVuY3RpPQpvbiByKGUsbil7dmFyIHI9M0RN YXRoLmFicyh0LngoKShlWzBdLDApLW4pLGk9M0QwO2Zvcih2YXIgcz0zRDA7czxlLmxlbmd0aDs9 CnMrKylNYXRoLmFicyh0LngoKShlW3NdLHMpLW4pPHImJihyPTNETWF0aC5hYnModC54KCkoZVtz XSxzKS1uKSxpPTNEcyk7cmV0dT0Kcm4gaX1pZihhKXJldHVybjt2YXIgZT0zRGQzLm1vdXNlKHRo aXMpWzBdLW4ubGVmdDt1PTNEW3IoYyxNYXRoLnJvdW5kKHMuaW52PQplcnQoZSkpKV0sTygpfXZh ciBtPTNEZDMuc2VsZWN0KHRoaXMpLGc9M0Qocnx8cGFyc2VJbnQobS5zdHlsZSgid2lkdGgiKSl8 fDk9CjYwKS1uLmxlZnQtbi5yaWdodCxiPTNEKGl8fHBhcnNlSW50KG0uc3R5bGUoImhlaWdodCIp KXx8NDAwKS1uLnRvcC1uLmJvdHRvbT0KO3YudXBkYXRlPTNEZnVuY3Rpb24oKXt2KGUpfSx2LmNv bnRhaW5lcj0zRHRoaXM7aWYoIWN8fCFjLmxlbmd0aCl7dmFyIHc9M0RtPQouc2VsZWN0QWxsKCIu bnYtbm9EYXRhIikuZGF0YShbZF0pO3JldHVybiB3LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0 cigiY2w9CmFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0 ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYT0KdHRyKCJ4IixuLmxlZnQrZy8yKS5hdHRyKCJ5Iixu LnRvcCtiLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx2fW0uc2VsPQplY3RBbGwoIi5u di1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgRT0zRHQueSgpKGNbYy5sZW5ndGgtMV0sYy5sZW5ndGgt MSk7cz0zRHQ9Ci54U2NhbGUoKSxvPTNEdC55U2NhbGUoKTt2YXIgUz0zRG0uc2VsZWN0QWxsKCJn Lm52LXdyYXAubnYtc3BhcmtsaW5lcGx1cyIpLj0KZGF0YShbY10pLFQ9M0RTLmVudGVyKCkuYXBw ZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3BhcmtsaW5lPQpwbHVzIiks Tj0zRFQuYXBwZW5kKCJnIiksQz0zRFMuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJj bGFzcyIsIm52LXM9CnBhcmtsaW5lV3JhcCIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJu di12YWx1ZVdyYXAiKSxOLmFwcGVuZCgiZyIpLmF0dD0KcigiY2xhc3MiLCJudi1ob3ZlckFyZWEi KSxTLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ubGVmdCsiLCIrbi50b3ArPQoiKSIp O3ZhciBrPTNEQy5zZWxlY3QoIi5udi1zcGFya2xpbmVXcmFwIik7dC53aWR0aChnKS5oZWlnaHQo Yiksay5jYWxsKHQpO3Y9CmFyIEw9M0RDLnNlbGVjdCgiLm52LXZhbHVlV3JhcCIpLEE9M0RMLnNl bGVjdEFsbCgiLm52LWN1cnJlbnRWYWx1ZSIpLmRhdGEoWz0KRV0pO0EuZW50ZXIoKS5hcHBlbmQo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWN1cnJlbnRWYWx1ZSIpLmF0dHIoImR4IixwPy04PQo6 OCkuYXR0cigiZHkiLCIuOWVtIikuc3R5bGUoInRleHQtYW5jaG9yIixwPyJlbmQiOiJzdGFydCIp LEEuYXR0cigieCIsZysocD89Cm4ucmlnaHQ6MCkpLmF0dHIoInkiLGg/ZnVuY3Rpb24oZSl7cmV0 dXJuIG8oZSl9OjApLnN0eWxlKCJmaWxsIix0LmNvbG9yKCkoYz0KW2MubGVuZ3RoLTFdLGMubGVu Z3RoLTEpKS50ZXh0KGwoRSkpLE4uc2VsZWN0KCIubnYtaG92ZXJBcmVhIikuYXBwZW5kKCJyZWN0 PQoiKS5vbigibW91c2Vtb3ZlIixNKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7YT0zRCFhfSkub24o Im1vdXNlb3V0IixmdW5jdGlvbig9Cil7dT0zRFtdLE8oKX0pLEMuc2VsZWN0KCIubnYtaG92ZXJB cmVhIHJlY3QiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpez0KcmV0dXJuInRyYW5zbGF0 ZSgiKyAtbi5sZWZ0KyIsIisgLW4udG9wKyIpIn0pLmF0dHIoIndpZHRoIixnK24ubGVmdCtuLnJp Z2h0PQopLmF0dHIoImhlaWdodCIsYituLnRvcCl9KSx2fXZhciB0PTNEZS5tb2RlbHMuc3Bhcmts aW5lKCksbj0zRHt0b3A6MTUscmlnaHQ9CjoxMDAsYm90dG9tOjEwLGxlZnQ6NTB9LHI9M0RudWxs LGk9M0RudWxsLHMsbyx1PTNEW10sYT0zRCExLGY9M0RkMy5mb3JtYXQoIj0KLHIiKSxsPTNEZDMu Zm9ybWF0KCIsLjJmIiksYz0zRCEwLGg9M0QhMCxwPTNEITEsZD0zRCJObyBEYXRhIEF2YWlsYWJs ZS4iO3JlPQp0dXJuIHYuc3BhcmtsaW5lPTNEdCxkMy5yZWJpbmQodix0LCJ4IiwieSIsInhTY2Fs ZSIsInlTY2FsZSIsImNvbG9yIiksdi5vcHQ9CmlvbnM9M0RlLnV0aWxzLm9wdGlvbnNGdW5jLmJp bmQodiksdi5tYXJnaW49M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLj0KbGVuZ3RoPyhu LnRvcD0zRHR5cGVvZiBlLnRvcCE9M0QidW5kZWZpbmVkIj9lLnRvcDpuLnRvcCxuLnJpZ2h0PTNE dHlwZW9mIGUuPQpyaWdodCE9M0QidW5kZWZpbmVkIj9lLnJpZ2h0Om4ucmlnaHQsbi5ib3R0b209 M0R0eXBlb2YgZS5ib3R0b20hPTNEInVuZGVmaW49CmVkIj9lLmJvdHRvbTpuLmJvdHRvbSxuLmxl ZnQ9M0R0eXBlb2YgZS5sZWZ0IT0zRCJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsdj0KKTpufSx2 LndpZHRoPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9M0RlLHYpOnJ9 LHYuaGVpZ2h0PTNEPQpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0zRGUs dik6aX0sdi54VGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGU9Cil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n dGg/KGY9M0RlLHYpOmZ9LHYueVRpY2tGb3JtYXQ9M0RmdW5jdGlvbihlKXtyZXR1cm4gYT0Kcmd1 bWVudHMubGVuZ3RoPyhsPTNEZSx2KTpsfSx2LnNob3dWYWx1ZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuPQpndGg/KGM9M0RlLHYpOmN9LHYuYWxpZ25WYWx1ZT0zRGZ1bmN0aW9u KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSw9CnYpOmh9LHYucmlnaHRBbGlnblZh bHVlPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLHYpOnB9LD0K di5ub0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsdik6 ZH0sdn0sZS5tb2RlbHMuc3RhPQpja2VkQXJlYT0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhlKXty ZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPTNEbi10Lmw9CmVmdC10LnJpZ2h0LGI9M0Ry LXQudG9wLXQuYm90dG9tLHc9M0RkMy5zZWxlY3QodGhpcyk7cD0zRHYueFNjYWxlKCksZD0zRHYu eT0KU2NhbGUoKTt2YXIgRT0zRGU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5zZXJpZXNJbmRl eD0zRHQsZS52YWx1ZXM9M0RlLnZhPQpsdWVzLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBlLmlu ZGV4PTNEbixlLnNlcmllc0luZGV4PTNEdCxlfSl9KTt2YXIgUz0zRGU9Ci5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KTtlPTNEZDMubGF5b3V0LnN0YWNrKCkub3JkZXIobCku b2Zmcz0KZXQoZikudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLngobykueSh1 KS5vdXQoZnVuY3Rpb24oZSx0LG4pe3ZhPQpyIHI9M0R1KGUpPTNEPTNEPTNEMD8wOm47ZS5kaXNw bGF5PTNEe3k6cix5MDp0fX0pKFMpO3ZhciBUPTNEdy5zZWxlY3RBbGwoImc9Ci5udi13cmFwLm52 LXN0YWNrZWRhcmVhIikuZGF0YShbZV0pLE49M0RULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigi Y2xhc3MiLD0KIm52ZDMgbnYtd3JhcCBudi1zdGFja2VkYXJlYSIpLEM9M0ROLmFwcGVuZCgiZGVm cyIpLGs9M0ROLmFwcGVuZCgiZyIpLEw9M0RUPQouc2VsZWN0KCJnIik7ay5hcHBlbmQoImciKS5h dHRyKCJjbGFzcyIsIm52LWFyZWFXcmFwIiksay5hcHBlbmQoImciKS5hdHRyKCI9CmNsYXNzIiwi bnYtc2NhdHRlcldyYXAiKSxULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsi LCIrdC50b3ArIj0KKSIpLHYud2lkdGgoYSkuaGVpZ2h0KGIpLngobykueShmdW5jdGlvbihlKXty ZXR1cm4gZS5kaXNwbGF5LnkrZS5kaXNwbGF5LnkwPQp9KS5mb3JjZVkoWzBdKS5jb2xvcihlLm1h cChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxpKGUsZS5zZXJpZXNJbmRleCk9Cn0pKTt2 YXIgQT0zREwuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlKTtBLmNhbGwodiksQy5h cHBlbmQoImNsaXBQYT0KdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgi cmVjdCIpLFQuc2VsZWN0KCIjbnYtZWRnZS1jbGlwLSIrPQpzKyIgcmVjdCIpLmF0dHIoIndpZHRo IixhKS5hdHRyKCJoZWlnaHQiLGIpLEwuYXR0cigiY2xpcC1wYXRoIixoPyJ1cmwoI252LWU9CmRn ZS1jbGlwLSIrcysiKSI6IiIpO3ZhciBPPTNEZDMuc3ZnLmFyZWEoKS54KGZ1bmN0aW9uKGUsdCl7 cmV0dXJuIHAobyhlLHQpKT0KfSkueTAoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5Lnkw KX0pLnkxKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlzcGxhPQp5LnkrZS5kaXNwbGF5LnkwKX0p LmludGVycG9sYXRlKGMpLE09M0RkMy5zdmcuYXJlYSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm49 CiBwKG8oZSx0KSl9KS55MChmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3BsYXkueTApfSkueTEo ZnVuY3Rpb24oZSl7cmV0dXJuID0KZChlLmRpc3BsYXkueTApfSksXz0zREwuc2VsZWN0KCIubnYt YXJlYVdyYXAiKS5zZWxlY3RBbGwoInBhdGgubnYtYXJlYSIpLmRhPQp0YShmdW5jdGlvbihlKXty ZXR1cm4gZX0pO18uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24o ZSw9CnQpe3JldHVybiJudi1hcmVhIG52LWFyZWEtIit0fSkuYXR0cigiZCIsZnVuY3Rpb24oZSx0 KXtyZXR1cm4gTShlLnZhbHVlcyxlLj0Kc2VyaWVzSW5kZXgpfSkub24oIm1vdXNlb3ZlciIsZnVu Y3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiPQosITApLG0uYXJlYU1v dXNlb3Zlcih7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy5ldmVu dC5wYWc9CmVZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4fSl9KS5vbigibW91c2VvdXQiLGZ1 bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaT0KcykuY2xhc3NlZCgiaG92ZXIiLCExKSxtLmFyZWFN b3VzZW91dCh7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVudC5wPQphZ2VYLGQzLmV2 ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4fSl9KS5vbigiY2xpY2siLGZ1bmN0 aW9uKGUsdCk9CntkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxtLmFyZWFDbGlj ayh7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOj0KW2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50LnBh Z2VZXSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4fSl9KSxfLmV4aXQoKS5yZW1vPQp2ZSgpLF8u c3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0lu ZGV4KX0pLnN0eWw9CmUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShl LGUuc2VyaWVzSW5kZXgpfSksXy5hdHRyKCJkIixmdT0KbmN0aW9uKGUsdCl7cmV0dXJuIE8oZS52 YWx1ZXMsdCl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLmFyZWEiLGZ1PQpuY3Rp b24oZSl7TC5zZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgp LmNsYXNzZWQoImhvdmU9CnIiLCEwKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC5h cmVhIixmdW5jdGlvbihlKXtMLnNlbGVjdCgiLm52LWNoYT0KcnQtIitzKyIgLm52LWFyZWEtIitl LnNlcmllc0luZGV4KS5jbGFzc2VkKCJob3ZlciIsITEpfSksZy5kM19zdGFja2VkT2Zmc2V0PQpf c3RhY2tQZXJjZW50PTNEZnVuY3Rpb24oZSl7dmFyIHQ9M0RlLmxlbmd0aCxuPTNEZVswXS5sZW5n dGgscj0zRDEvdCxpLHMsbyw9CmE9M0RbXTtmb3Iocz0zRDA7czxuOysrcyl7Zm9yKGk9M0QwLG89 M0QwO2k8RS5sZW5ndGg7aSsrKW8rPTNEdShFW2ldLnZhbHVlcz0KW3NdKTtpZihvKWZvcihpPTNE MDtpPHQ7aSsrKWVbaV1bc11bMV0vPTNEbztlbHNlIGZvcihpPTNEMDtpPHQ7aSsrKWVbaV1bc11b PQoxXT0zRHJ9Zm9yKHM9M0QwO3M8bjsrK3MpYVtzXT0zRDA7cmV0dXJuIGF9fSksZ312YXIgdD0z RHt0b3A6MCxyaWdodDowLGJvdHQ9Cm9tOjAsbGVmdDowfSxuPTNEOTYwLHI9M0Q1MDAsaT0zRGUu dXRpbHMuZGVmYXVsdENvbG9yKCkscz0zRE1hdGguZmxvb3IoTWF0aD0KLnJhbmRvbSgpKjFlNSks bz0zRGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHU9M0RmdW5jdGlvbihlKXtyZXR1cm4gZS55fSxh PTNEPQoic3RhY2siLGY9M0QiemVybyIsbD0zRCJkZWZhdWx0IixjPTNEImxpbmVhciIsaD0zRCEx LHAsZCx2PTNEZS5tb2RlbHMuc2NhdHQ9CmVyKCksbT0zRGQzLmRpc3BhdGNoKCJ0b29sdGlwU2hv dyIsInRvb2x0aXBIaWRlIiwiYXJlYUNsaWNrIiwiYXJlYU1vdXNlb3Zlcj0KIiwiYXJlYU1vdXNl b3V0Iik7cmV0dXJuIHYuc2l6ZSgyLjIpLnNpemVEb21haW4oWzIuMiwyLjJdKSx2LmRpc3BhdGNo Lm9uKCJlPQpsZW1lbnRDbGljay5hcmVhIixmdW5jdGlvbihlKXttLmFyZWFDbGljayhlKX0pLHYu ZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW89CnZlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBv cz0zRFtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLG0udG9vbHRpcD0KU2hvdyhlKX0p LHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXttLnRv b2x0aXBIaWRlPQooZSl9KSxnLmRpc3BhdGNoPTNEbSxnLnNjYXR0ZXI9M0R2LGQzLnJlYmluZChn LHYsImludGVyYWN0aXZlIiwic2l6ZSIsInhTY2E9CmxlIiwieVNjYWxlIiwielNjYWxlIiwieERv bWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiZj0Kb3JjZVgi LCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJjbGlwUmFk aXVzIiwiaGlnaGxpPQpnaHRQb2ludCIsImNsZWFySGlnaGxpZ2h0cyIpLGcub3B0aW9ucz0zRGUu dXRpbHMub3B0aW9uc0Z1bmMuYmluZChnKSxnLng9M0Q9CmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhvPTNEZDMuZnVuY3RvcihlKSxnKTpvfSxnLnk9M0RmdW5jdGlvbj0KKGUp e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PTNEZDMuZnVuY3RvcihlKSxnKTp1fSxnLm1hcmdp bj0zRGZ1bmN0aW9uKGUpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPTNEdHlwZW9m IGUudG9wIT0zRCJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQ9Ci5yaWdodD0zRHR5cGVvZiBlLnJp Z2h0IT0zRCJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT0zRHR5cGVvZiBlLj0K Ym90dG9tIT0zRCJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD0zRHR5cGVvZiBl LmxlZnQhPTNEInVuZGVmaW5lPQpkIj9lLmxlZnQ6dC5sZWZ0LGcpOnR9LGcud2lkdGg9M0RmdW5j dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0zRGU9CixnKTpufSxnLmhlaWdodD0z RGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPTNEZSxnKTpyfSxnLmNsaXBF ZD0KZ2U9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0zRGUsZyk6aH0s Zy5jb2xvcj0zRGZ1bmN0aW9uKHQpPQp7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9M0RlLnV0 aWxzLmdldENvbG9yKHQpLGcpOml9LGcub2Zmc2V0PTNEZnVuY3Rpb249CihlKXtyZXR1cm4gYXJn dW1lbnRzLmxlbmd0aD8oZj0zRGUsZyk6Zn0sZy5vcmRlcj0zRGZ1bmN0aW9uKGUpe3JldHVybiBh cmd1bT0KZW50cy5sZW5ndGg/KGw9M0RlLGcpOmx9LGcuc3R5bGU9M0RmdW5jdGlvbihlKXtpZigh YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gPQphO2E9M0RlO3N3aXRjaChhKXtjYXNlInN0YWNrIjpn Lm9mZnNldCgiemVybyIpLGcub3JkZXIoImRlZmF1bHQiKTticmVhaztjYXM9CmUic3RyZWFtIjpn Lm9mZnNldCgid2lnZ2xlIiksZy5vcmRlcigiaW5zaWRlLW91dCIpO2JyZWFrO2Nhc2Uic3RyZWFt LWNlbnRlcj0KIjpnLm9mZnNldCgic2lsaG91ZXR0ZSIpLGcub3JkZXIoImluc2lkZS1vdXQiKTti cmVhaztjYXNlImV4cGFuZCI6Zy5vZmZzZXQoPQoiZXhwYW5kIiksZy5vcmRlcigiZGVmYXVsdCIp O2JyZWFrO2Nhc2Uic3RhY2tfcGVyY2VudCI6Zy5vZmZzZXQoZy5kM19zdGFja2U9CmRPZmZzZXRf c3RhY2tQZXJjZW50KSxnLm9yZGVyKCJkZWZhdWx0Iil9cmV0dXJuIGd9LGcuaW50ZXJwb2xhdGU9 M0RmdW5jdGlvbj0KKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTNEZSxnKTpjfSxnfSxl Lm1vZGVscy5zdGFja2VkQXJlYUNoYXJ0PTNEZnVuPQpjdGlvbigpe2Z1bmN0aW9uIE0oeSl7cmV0 dXJuIHkuZWFjaChmdW5jdGlvbih5KXt2YXIgQT0zRGQzLnNlbGVjdCh0aGlzKSxfPQo9M0R0aGlz LEQ9M0QoYXx8cGFyc2VJbnQoQS5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQs UD0zRChmfHxwYXI9CnNlSW50KEEuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRv bTtNLnVwZGF0ZT0zRGZ1bmN0aW9uKCl7QS5jYWxsKD0KTSl9LE0uY29udGFpbmVyPTNEdGhpcyxT LmRpc2FibGVkPTNEeS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7PQppZigh eCl7dmFyIEg7eD0zRHt9O2ZvcihIIGluIFMpU1tIXWluc3RhbmNlb2YgQXJyYXk/eFtIXT0zRFNb SF0uc2xpY2UoMCk6eFs9CkhdPTNEU1tIXX1pZigheXx8IXkubGVuZ3RofHwheS5maWx0ZXIoZnVu Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLj0KbGVuZ3RoKXt2YXIgQj0zREEuc2Vs ZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbVF0pO3JldHVybiBCLmVudGVyKCkuYXBwZW5kPQoo InRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIp LnN0eWxlKCJ0ZXh0LWFuY2g9Cm9yIiwibWlkZGxlIiksQi5hdHRyKCJ4Iix1LmxlZnQrRC8yKS5h dHRyKCJ5Iix1LnRvcCtQLzIpLnRleHQoZnVuY3Rpb24oZSl7cj0KZXR1cm4gZX0pLE19QS5zZWxl Y3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxiPTNEdC54U2NhbGUoKSx3PTNEdC55U2NhbGUo PQopO3ZhciBqPTNEQS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zdGFja2VkQXJlYUNoYXJ0Iiku ZGF0YShbeV0pLEY9M0RqLmVudGU9CnIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMg bnYtd3JhcCBudi1zdGFja2VkQXJlYUNoYXJ0IikuYXBwZW5kKCJnIj0KKSxJPTNEai5zZWxlY3Qo ImciKTtGLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJvcGFjaXR5IiwwKSxGLmFwcGVuZCgiZyIpLmF0 dHIoPQoiY2xhc3MiLCJudi14IG52LWF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwi bnYteSBudi1heGlzIiksRi5hcHBlbmQ9CigiZyIpLmF0dHIoImNsYXNzIiwibnYtc3RhY2tlZFdy YXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kVz0KcmFwIiksRi5hcHBl bmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0 cigiY2xhPQpzcyIsIm52LWludGVyYWN0aXZlIiksSS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0 aCIsRCkuYXR0cigiaGVpZ2h0IixQKTtpZig9Cmgpe3ZhciBxPTNEYz9ELUM6RDtpLndpZHRoKHEp LEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKHkpLmNhbGwoaSksdT0KLnRvcCE9M0Rp LmhlaWdodCgpJiYodS50b3A9M0RpLmhlaWdodCgpLFA9M0QoZnx8cGFyc2VJbnQoQS5zdHlsZSgi aGVpZ2h0IikpPQp8fDQwMCktdS50b3AtdS5ib3R0b20pLEkuc2VsZWN0KCIubnYtbGVnZW5kV3Jh cCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGE9CnRlKCIrKEQtcSkrIiwiKyAtdS50b3ArIiki KX1pZihjKXt2YXIgUj0zRFt7a2V5Okwuc3RhY2tlZHx8IlN0YWNrZWQiLG1ldGFLZT0KeToiU3Rh Y2tlZCIsZGlzYWJsZWQ6dC5zdHlsZSgpIT0zRCJzdGFjayIsc3R5bGU6InN0YWNrIn0se2tleTpM LnN0cmVhbXx8IlN0PQpyZWFtIixtZXRhS2V5OiJTdHJlYW0iLGRpc2FibGVkOnQuc3R5bGUoKSE9 M0Qic3RyZWFtIixzdHlsZToic3RyZWFtIn0se2tleTo9CkwuZXhwYW5kZWR8fCJFeHBhbmRlZCIs bWV0YUtleToiRXhwYW5kZWQiLGRpc2FibGVkOnQuc3R5bGUoKSE9M0QiZXhwYW5kIixzdD0KeWxl OiJleHBhbmQifSx7a2V5Okwuc3RhY2tfcGVyY2VudHx8IlN0YWNrICUiLG1ldGFLZXk6IlN0YWNr X1BlcmNlbnQiLGRpc2FiPQpsZWQ6dC5zdHlsZSgpIT0zRCJzdGFja19wZXJjZW50IixzdHlsZToi c3RhY2tfcGVyY2VudCJ9XTtDPTNEay5sZW5ndGgvMyoyNjA9CixSPTNEUi5maWx0ZXIoZnVuY3Rp b24oZSl7cmV0dXJuIGsuaW5kZXhPZihlLm1ldGFLZXkpIT0zRD0zRC0xfSkscy53aWR0aChDKT0K LmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0pLEkuc2VsZWN0KCIubnYtY29udHJvbHNXcmFw IikuZGF0dW0oUikuY2FsbChzPQopLHUudG9wIT0zRE1hdGgubWF4KHMuaGVpZ2h0KCksaS5oZWln aHQoKSkmJih1LnRvcD0zRE1hdGgubWF4KHMuaGVpZ2h0KCksaS49CmhlaWdodCgpKSxQPTNEKGZ8 fHBhcnNlSW50KEEuc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxl Yz0KdCgiLm52LWNvbnRyb2xzV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIr IC11LnRvcCsiKSIpfWouYXR0cigiPQp0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1LmxlZnQrIiwi K3UudG9wKyIpIiksdiYmSS5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS49CmF0dHIoInRyYW5zZm9y bSIsInRyYW5zbGF0ZSgiK0QrIiwwKSIpLG0mJihvLndpZHRoKEQpLmhlaWdodChQKS5tYXJnaW4o e2xlZj0KdDp1LmxlZnQsdG9wOnUudG9wfSkuc3ZnQ29udGFpbmVyKEEpLnhTY2FsZShiKSxqLnNl bGVjdCgiLm52LWludGVyYWN0aXZlIikuPQpjYWxsKG8pKSx0LndpZHRoKEQpLmhlaWdodChQKTt2 YXIgVT0zREkuc2VsZWN0KCIubnYtc3RhY2tlZFdyYXAiKS5kYXR1bSh5KTs9ClUuY2FsbCh0KSxw JiYobi5zY2FsZShiKS50aWNrcyhELzEwMCkudGlja1NpemUoLVAsMCksSS5zZWxlY3QoIi5udi14 Lm52LWF4aT0KcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrUCsiKSIpLEkuc2Vs ZWN0KCIubnYteC5udi1heGlzIikuY2FsbChuPQopKSxkJiYoci5zY2FsZSh3KS50aWNrcyh0Lm9m ZnNldCgpPTNEPTNEIndpZ2dsZSI/MDpQLzM2KS50aWNrU2l6ZSgtRCwwKS5zZXQ9ClRpY2tGb3Jt YXQodC5zdHlsZSgpPTNEPTNEImV4cGFuZCJ8fHQuc3R5bGUoKT0zRD0zRCJzdGFja19wZXJjZW50 Ij9kMy5mb3JtYT0KdCgiJSIpOkUpLEkuc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSks dC5kaXNwYXRjaC5vbigiYXJlYUNsaWNrLnRvZ2dsPQplIixmdW5jdGlvbihlKXt5LmZpbHRlcihm dW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aD0zRD0zRD0zRDE/eS49CmZvckVh Y2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0zRCExfSk6eS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7 dC5kaXNhYmxlZD0zRD0KbiE9M0RlLnNlcmllc0luZGV4fSksUy5kaXNhYmxlZD0zRHkubWFwKGZ1 bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pLE4uPQpzdGF0ZUNoYW5nZShTKSxNLnVwZGF0 ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe1MuZGlzYWI9Cmxl ZD0zRGUuZGlzYWJsZWQsTi5zdGF0ZUNoYW5nZShTKSxNLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5v bigibGVnZW5kQ2xpY2siLD0KZnVuY3Rpb24oZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47Uj0z RFIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPQo9M0QhMCxlfSksZS5kaXNhYmxl ZD0zRCExLHQuc3R5bGUoZS5zdHlsZSksUy5zdHlsZT0zRHQuc3R5bGUoKSxOLnN0YXRlQ2hhbmc9 CmUoUyksTS51cGRhdGUoKX0pLG8uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0 aW9uKGkpe3QuY2xlYXJIaWdobD0KaWdodHMoKTt2YXIgcyxhLGYsYz0zRFtdO3kuZmlsdGVyKGZ1 bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2VyaWVzSW5kZXg9M0R0LCFlPQouZGlzYWJsZWR9KS5mb3JF YWNoKGZ1bmN0aW9uKG4scil7YT0zRGUuaW50ZXJhY3RpdmVCaXNlY3Qobi52YWx1ZXMsaS5wb2lu dFg9ClZhbHVlLE0ueCgpKSx0LmhpZ2hsaWdodFBvaW50KHIsYSwhMCk7dmFyIG89M0RuLnZhbHVl c1thXTtpZih0eXBlb2Ygbz0zRD0zRD0KInVuZGVmaW5lZCIpcmV0dXJuO3R5cGVvZiBzPTNEPTNE InVuZGVmaW5lZCImJihzPTNEbyksdHlwZW9mIGY9M0Q9M0QidW5kZWZpPQpuZWQiJiYoZj0zRE0u eFNjYWxlKCkoTS54KCkobyxhKSkpO3ZhciB1PTNEdC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/by5k aXNwbGE9CnkueTpNLnkoKShvLGEpO2MucHVzaCh7a2V5Om4ua2V5LHZhbHVlOnUsY29sb3I6bChu LG4uc2VyaWVzSW5kZXgpLHN0YWNrZWRWYT0KbHVlOm8uZGlzcGxheX0pfSksYy5yZXZlcnNlKCk7 aWYoYy5sZW5ndGg+Mil7dmFyIGg9M0RNLnlTY2FsZSgpLmludmVydChpLm1vPQp1c2VZKSxwPTNE SW5maW5pdHksZD0zRG51bGw7Yy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aD0zRE1hdGguYWJzKGgp O3ZhciBuPQo9M0RNYXRoLmFicyhlLnN0YWNrZWRWYWx1ZS55MCkscj0zRE1hdGguYWJzKGUuc3Rh Y2tlZFZhbHVlLnkpO2lmKGg+PTNEbiYmaDw9Cj0zRHIrbil7ZD0zRHQ7cmV0dXJufX0pLGQhPTNE bnVsbCYmKGNbZF0uaGlnaGxpZ2h0PTNEITApfXZhciB2PTNEbi50aWNrRm9ybT0KYXQoKShNLngo KShzLGEpKSxtPTNEdC5zdHlsZSgpPTNEPTNEImV4cGFuZCI/ZnVuY3Rpb24oZSx0KXtyZXR1cm4g ZDMuZm9ybWF0PQooIi4xJSIpKGUpfTpmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtYXQo KShlKX07by50b29sdGlwLnBvc2l0aW9uKHtsZWY9CnQ6Zit1LmxlZnQsdG9wOmkubW91c2VZK3Uu dG9wfSkuY2hhcnRDb250YWluZXIoXy5wYXJlbnROb2RlKS5lbmFibGVkKGcpLnZhbD0KdWVGb3Jt YXR0ZXIobSkuZGF0YSh7dmFsdWU6dixzZXJpZXM6Y30pKCksby5yZW5kZXJHdWlkZUxpbmUoZil9 KSxvLmRpc3BhdGNoPQoub24oImVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7Ti50b29sdGlw SGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxOLm89Cm4oInRvb2x0aXBTaG93IixmdW5jdGlv bihlKXtnJiZPKGUsXy5wYXJlbnROb2RlKX0pLE4ub24oImNoYW5nZVN0YXRlIixmdW5jdD0KaW9u KGUpe3R5cGVvZiBlLmRpc2FibGVkIT0zRCJ1bmRlZmluZWQiJiZ5Lmxlbmd0aD0zRD0zRD0zRGUu ZGlzYWJsZWQubGVuZ3RoPQomJih5LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPTNE ZS5kaXNhYmxlZFtuXX0pLFMuZGlzYWJsZWQ9M0RlLmRpc2E9CmJsZWQpLHR5cGVvZiBlLnN0eWxl IT0zRCJ1bmRlZmluZWQiJiZ0LnN0eWxlKGUuc3R5bGUpLE0udXBkYXRlKCl9KX0pLE19dmFyID0K dD0zRGUubW9kZWxzLnN0YWNrZWRBcmVhKCksbj0zRGUubW9kZWxzLmF4aXMoKSxyPTNEZS5tb2Rl bHMuYXhpcygpLGk9M0RlLm1vPQpkZWxzLmxlZ2VuZCgpLHM9M0RlLm1vZGVscy5sZWdlbmQoKSxv PTNEZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgpLHU9M0R7dG9wOjM9CjAscmlnaHQ6MjUsYm90dG9t OjUwLGxlZnQ6NjB9LGE9M0RudWxsLGY9M0RudWxsLGw9M0RlLnV0aWxzLmRlZmF1bHRDb2xvcigp LD0KYz0zRCEwLGg9M0QhMCxwPTNEITAsZD0zRCEwLHY9M0QhMSxtPTNEITEsZz0zRCEwLHk9M0Rm dW5jdGlvbihlLHQsbixyLGkpe3JlPQp0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgb24g Iit0KyI8L3A+In0sYix3LEU9M0RkMy5mb3JtYXQoIiwuMmYiKSxTPQo9M0R7c3R5bGU6dC5zdHls ZSgpfSx4PTNEbnVsbCxUPTNEIk5vIERhdGEgQXZhaWxhYmxlLiIsTj0zRGQzLmRpc3BhdGNoKCJ0 b289Cmx0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiks Qz0zRDI1MCxrPTNEWyJTdGFja2VkIj0KLCJTdHJlYW0iLCJFeHBhbmRlZCJdLEw9M0R7fSxBPTNE MDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllPQpudCh2PyJyaWdodCI6 ImxlZnQiKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTz0zRGZ1bmN0aW9uKGkscyl7dmFyIG89M0Rp LnBvc1s9CjBdKyhzLm9mZnNldExlZnR8fDApLHU9M0RpLnBvc1sxXSsocy5vZmZzZXRUb3B8fDAp LGE9M0RuLnRpY2tGb3JtYXQoKSh0LngoKT0KKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj0zRHIu dGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD0KPTNEeShpLnNlcmll cy5rZXksYSxmLGksTSk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixu dWxsLHMpPQp9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7 ZS5wb3M9M0RbZS5wb3NbMF0rdS5sZWZ0LGU9Ci5wb3NbMV0rdS50b3BdLE4udG9vbHRpcFNob3co ZSl9KSx0LmRpc3BhdGNoLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oZSl7Tj0KLnRvb2x0aXBI aWRlKGUpfSksTi5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7ZyYmZS50b29sdGlwLmNsZWFu dXAoKX0pLE0uPQpkaXNwYXRjaD0zRE4sTS5zdGFja2VkPTNEdCxNLmxlZ2VuZD0zRGksTS5jb250 cm9scz0zRHMsTS54QXhpcz0zRG4sTS55QXhpcz0KPTNEcixNLmludGVyYWN0aXZlTGF5ZXI9M0Rv LGQzLnJlYmluZChNLHQsIngiLCJ5Iiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsPQoieERvbWFp biIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiaW50ZXJhY3RpdmUi LCJ1c2VWb3Jvbm89CmkiLCJvZmZzZXQiLCJvcmRlciIsInN0eWxlIiwiY2xpcEVkZ2UiLCJmb3Jj ZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJpbnRlcj0KcG9sYXRlIiksTS5vcHRpb25zPTNEZS51 dGlscy5vcHRpb25zRnVuYy5iaW5kKE0pLE0ubWFyZ2luPTNEZnVuY3Rpb24oZSl7cmV0PQp1cm4g YXJndW1lbnRzLmxlbmd0aD8odS50b3A9M0R0eXBlb2YgZS50b3AhPTNEInVuZGVmaW5lZCI/ZS50 b3A6dS50b3AsdS5yaWc9Cmh0PTNEdHlwZW9mIGUucmlnaHQhPTNEInVuZGVmaW5lZCI/ZS5yaWdo dDp1LnJpZ2h0LHUuYm90dG9tPTNEdHlwZW9mIGUuYm90dD0Kb20hPTNEInVuZGVmaW5lZCI/ZS5i b3R0b206dS5ib3R0b20sdS5sZWZ0PTNEdHlwZW9mIGUubGVmdCE9M0QidW5kZWZpbmVkIj9lPQou bGVmdDp1LmxlZnQsTSk6dX0sTS53aWR0aD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPyhhPTNEZSxNKTo9CmF9LE0uaGVpZ2h0PTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt ZW50cy5sZW5ndGg/KGY9M0RlLE0pOmZ9LE0uY29sb3I9M0RmdT0KbmN0aW9uKG4pe3JldHVybiBh cmd1bWVudHMubGVuZ3RoPyhsPTNEZS51dGlscy5nZXRDb2xvcihuKSxpLmNvbG9yKGwpLHQuY29s PQpvcihsKSxNKTpsfSxNLnNob3dDb250cm9scz0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu dHMubGVuZ3RoPyhjPTNEZSxNKTo9CmN9LE0uc2hvd0xlZ2VuZD0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyhoPTNEZSxNKTpofSxNLnNob3dYQT0KeGlzPTNEZnVuY3Rpb24o ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9M0RlLE0pOnB9LE0uc2hvd1lBeGlzPTNEZnVu Y3RpPQpvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0zRGUsTSk6ZH0sTS5yaWdodEFs aWduWUF4aXM9M0RmdW5jdGlvbihlKXs9CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PTNEZSxy Lm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxNKTp2fSxNLnVzZUludGVyYT0KY3RpdmVHdWlkZWxp bmU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0zRGUsZT0zRD0zRD0z RCEwJiYoPQpNLmludGVyYWN0aXZlKCExKSxNLnVzZVZvcm9ub2koITEpKSxNKTptfSxNLnRvb2x0 aXA9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXI9Cmd1bWVudHMubGVuZ3RoPyh5PTNEZSxNKTp5fSxN LnRvb2x0aXBzPTNEZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndD0KaD8oZz0zRGUs TSk6Z30sTS50b29sdGlwQ29udGVudD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu Z3RoPyh5PTNEPQplLE0pOnl9LE0uc3RhdGU9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz Lmxlbmd0aD8oUz0zRGUsTSk6U30sTS5kZWZhdWw9CnRTdGF0ZT0zRGZ1bmN0aW9uKGUpe3JldHVy biBhcmd1bWVudHMubGVuZ3RoPyh4PTNEZSxNKTp4fSxNLm5vRGF0YT0zRGZ1bmN0aT0Kb24oZSl7 cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9M0RlLE0pOlR9LE0udHJhbnNpdGlvbkR1cmF0aW9u PTNEZnVuY3Rpb24oPQplKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0zRGUsTSk6QX0sTS5j b250cm9sc0RhdGE9M0RmdW5jdGlvbihlKXtyZXR1cm49CiBhcmd1bWVudHMubGVuZ3RoPyhrPTNE ZSxNKTprfSxNLmNvbnRyb2xMYWJlbHM9M0RmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbj0KdHMu bGVuZ3RoP3R5cGVvZiBlIT0zRCJvYmplY3QiP0w6KEw9M0RlLE0pOkx9LHIuc2V0VGlja0Zvcm1h dD0zRHIudGlja0Zvcm1hPQp0LHIudGlja0Zvcm1hdD0zRGZ1bmN0aW9uKGUpe3JldHVybiBhcmd1 bWVudHMubGVuZ3RoPyhFPTNEZSxyKTpFfSxNfX0oKSxkZWY9CmluZSgicGx1Z2luL3BsdWdpbnMv bnZkMy9udi5kMyIsZnVuY3Rpb24oKXt9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9jbz0K bW1vbi9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9mb3Jtcy9kZWZhdWx0IiwicGx1Z2luL3BsdWdp bnMvbnZkMy9udi5kMyJdLGZ1PQpuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3Rp dGxlOiIiLGNhdGVnb3J5OiIiLGxpYnJhcnk6Ik5WRDMiLHRhZzo9CiJzdmciLGtleXdvcmRzOiJz bWFsbCJ9KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2Jhci9jb25maWciLFsicGx1Z2lu Lz0KY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGVu ZCghMCx7fSxlLHt0aXRsZToiUmVnPQp1bGFyIixjYXRlZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1 bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmU9Cmw6ITAsaXNfYXV0bzoh MCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJpYzoh MH19fT0KKX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIs WyJwbHVnaW4vY2hhcnRzL252ZDMvY29tPQptb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJu ICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJTdGFja2VkIixjYXRlZ29yeTo9CiJCYXIgZGlhZ3Jh bXMiLGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNf YXV0bzohMD0KLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19u dW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1PQpnaW4vY2hhcnRzL252ZDMvYmFyX2hvcml6b250 YWwvY29uZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl09CixmdW5jdGlv bihlKXtyZXR1cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6Ikhvcml6b250YWwiLGNhdGVnb3J5 OiJCYXIgZGlhZz0KcmFtcyIsc2V0dGluZ3M6e3hfYXhpc190eXBlOntpbml0OiJoaWRlIn19LGNv bHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtPQpheGlzIixpc19sYWJlbDohMCxpc19hdXRv OiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc189Cm51bWVy aWM6ITB9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL252ZDMvYmFyX2hvcml6b250YWxfc3Rh Y2tlZC9jb25maWciLD0KWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0PQppdGxlOiJTdGFja2VkIGhvcml6b250 YWwiLGNhdGVnb3J5OiJCYXIgZGlhZ3JhbXMiLHNldHRpbmdzOnt4X2F4aXNfdHlwZTp7aW49Cml0 OiJoaWRlIn19LGNvbHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6 ITAsaXNfYXV0bzohMCxpcz0KX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlz Iixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luPQovY2hhcnRzL252ZDMvbGluZV9m b2N1cy9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGk9 Cm9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiTGluZSB3aXRoIGZvY3VzIixj YXRlZ29yeToiT3RoZXJzIix6bz0Kb21hYmxlOiJuYXRpdmUiLGNvbHVtbnM6e3g6e3RpdGxlOiJW YWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzohPQowLGlzX3VuaXF1ZTohMH0s eTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX19KX0pLGRlZmluZSgi cGw9CnVnaW4vY2hhcnRzL252ZDMvcGllL2NvbmZpZyIsWyJwbHVnaW4vcGx1Z2lucy9udmQzL252 LmQzIl0sZnVuY3Rpb24oKXtyZXR1cj0KbiAkLmV4dGVuZCghMCx7fSx7dGl0bGU6IlBpZSBjaGFy dCIsY2F0ZWdvcnk6IkFyZWEgY2hhcnRzIixsaWJyYXJ5OiJOVkQzIix0PQphZzoic3ZnIixrZXl3 b3Jkczoic21hbGwiLGNvbHVtbnM6e2xhYmVsOnt0aXRsZToiTGFiZWxzIixpc19sYWJlbDohMCxp c19hdXQ9Cm86ITB9LHk6e3RpdGxlOiJWYWx1ZXMiLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7 bWFpbl9zZXBhcmF0b3I6e3R5cGU6InNlcD0KYXJhdG9yIix0aXRsZToiUGllIGNoYXJ0IHNldHRp bmdzIn0sZG9udXRfcmF0aW86e3RpdGxlOiJEb251dCByYXRpbyIsaW5mbzoiPQpEZXRlcm1pbmUg aG93IGxhcmdlIHRoZSBkb251dCBob2xlIHdpbGwgYmUuIix0eXBlOiJzZWxlY3QiLGluaXQ6IjAu NSIsZGF0YTo9Clt7bGFiZWw6IjUwJSIsdmFsdWU6IjAuNSJ9LHtsYWJlbDoiMjUlIix2YWx1ZToi MC4yNSJ9LHtsYWJlbDoiMTAlIix2YWx1ZToiMD0KLjEwIn0se2xhYmVsOiIwJSIsdmFsdWU6IjAi fV19LHNob3dfbGVnZW5kOnt0aXRsZToiU2hvdyBsZWdlbmQiLGluZm86IldvdWxkPQogeW91IGxp a2UgdG8gYWRkIGEgbGVnZW5kPyIsdHlwZToicmFkaW9idXR0b24iLGluaXQ6ImZhbHNlIixkYXRh Olt7bGFiZWw6Ilk9CmVzIix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJmYWxzZSJ9 XX0sbGFiZWxfc2VwYXJhdG9yOnt0eXBlOiJzZXBhcj0KYXRvciIsdGl0bGU6IkxhYmVsIHNldHRp bmdzIn0sbGFiZWxfdHlwZTp7dGl0bGU6IkRvbnV0IGxhYmVsIixpbmZvOiJXaGF0IHdvPQp1bGQg eW91IGxpa2UgdG8gc2hvdyBmb3IgZWFjaCBzbGljZT8iLHR5cGU6InNlbGVjdCIsaW5pdDoicGVy Y2VudCIsZGF0YTpbe2w9CmFiZWw6Ii0tIE5vdGhpbmcgLS0iLHZhbHVlOiJoaWRlIixoaWRlOiJs YWJlbF9vdXRzaWRlIn0se2xhYmVsOiJMYWJlbCBjb2x1bT0KbiIsdmFsdWU6ImtleSIsc2hvdzoi bGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiVmFsdWUgY29sdW1uIix2YWx1ZToidmFsdWUiLHNoPQpv dzoibGFiZWxfb3V0c2lkZSJ9LHtsYWJlbDoiUGVyY2VudGFnZSIsdmFsdWU6InBlcmNlbnQiLHNo b3c6ImxhYmVsX291dHNpZGU9CiJ9XX0sbGFiZWxfb3V0c2lkZTp7dGl0bGU6IlNob3cgb3V0c2lk ZSIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBsYWJlbD0KcyBvdXRzaWRlIHRoZSBkb251 dD8iLHR5cGU6InJhZGlvYnV0dG9uIixpbml0OiJmYWxzZSIsZGF0YTpbe2xhYmVsOiJZZXMiLHZh PQpsdWU6InRydWUifSx7bGFiZWw6Ik5vIix2YWx1ZToiZmFsc2UifV19LHVzZV9wYW5lbHM6e2lu aXQ6InRydWUiLGhpZGU6ITB9fX09Cil9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9zdGFj a2VkYXJlYV9mdWxsL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZD0KMy9jb21tb24vY29uZmln Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJFeHBhbmRlZCIs em9vPQptYWJsZTohMCxjYXRlZ29yeToiQXJlYSBjaGFydHMiLGtleXdvcmRzOiJkZWZhdWx0IHNt YWxsIixjb2x1bW5zOnt4Ont0aXRsZTo9CiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAs aXNfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZj0Kb3IgeS1heGlzIixp c19udW1lcmljOiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVh X3N0cmVhPQptL2NvbmZpZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvY29tbW9uL2NvbmZpZyJdLGZ1 bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCg9CiEwLHt9LGUse3RpdGxlOiJTdHJlYW0iLGNhdGVn b3J5OiJBcmVhIGNoYXJ0cyIsem9vbWFibGU6ITAsa2V5d29yZHM6ImRlZmF1bD0KdCBzbWFsbCIs c2hvd21heG1pbjohMCxjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xh YmVsOiEwLGlzPQpfYXV0bzohMCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHkt YXhpcyIsaXNfbnVtZXJpYzohMH19fSl9KSxkZWY9CmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL2hp c3RvZ3JhbS9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maT0KZyJdLGZ1 bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSGlzdG9ncmFtIixjYXRl Z29yeToiRGF0YSBwPQpyb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29s c2hlZCkiLGV4ZWN1dGU6Imhpc3RvZ3JhbSIsa2V5d289CnJkczoic21hbGwgbWVkaXVtIGxhcmdl Iixjb2x1bW5zOnt5Ont0aXRsZToiT2JzZXJ2YXRpb25zIixpc19udW1lcmljOiEwfX0scz0KZXR0 aW5nczp7eF9heGlzX2xhYmVsOntpbml0OiJWYWx1ZXMifSx5X2F4aXNfbGFiZWw6e2luaXQ6IkRl bnNpdHkifSx5X2F4aXNfPQp0eXBlOntpbml0OiJmIn0seV9heGlzX3ByZWNpc2lvbjp7aW5pdDoi LjIifX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQ9CjMvbGluZS9jb25maWciLFsicGx1 Z2luL2NoYXJ0cy9udmQzL2NvbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leD0K dGVuZCghMCx7fSxlLHt0aXRsZToiTGluZSBjaGFydCIsY2F0ZWdvcnk6Ik90aGVycyIsem9vbWFi bGU6ITAsY29sdW1uczp7eDp7PQp0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX2xhYmVsOiEw LGlzX2F1dG86ITAsaXNfdW5pcXVlOiEwfSx5Ont0aXRsZToiVmE9Cmx1ZXMgZm9yIHktYXhpcyIs aXNfbnVtZXJpYzohMH19fSl9KSxkZWZpbmUoInBsdWdpbi9jaGFydHMvbnZkMy9zY2F0dGVyL2Nv bj0KZmlnIixbInBsdWdpbi9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7 cmV0dXJuICQuZXh0ZW5kKCEwLHt9PQosZSx7dGl0bGU6IlNjYXR0ZXIgcGxvdCIsY2F0ZWdvcnk6 Ik90aGVycyIsem9vbWFibGU6ITAsY29sdW1uczp7eDp7dGl0bGU6IlY9CmFsdWVzIGZvciB4LWF4 aXMiLGlzX251bWVyaWM6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktYXhpcyIsaXNfbnVtZXJp YzohMD0KfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVhL2NvbmZp ZyIsWyJwbHVnaW4vY2hhcnRzL252ZDMvPQpjb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0 dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJSZWd1bGFyIix6b29tYWI9CmxlOiEwLGNhdGVn b3J5OiJBcmVhIGNoYXJ0cyIsa2V5d29yZHM6ImRlZmF1bHQgc21hbGwiLGNvbHVtbnM6e3g6e3Rp dGxlOiJWYT0KbHVlcyBmb3IgeC1heGlzIixpc19sYWJlbDohMCxpc19hdXRvOiEwLGlzX3VuaXF1 ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgPQp5LWF4aXMiLGlzX251bWVyaWM6ITB9fX0pfSks ZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIixbInA9Cmx1Z2luL2No YXJ0cy9mb3Jtcy9kZWZhdWx0Il0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUs e3RpdGxlOiIiLD0KY2F0ZWdvcnk6IiIsbGlicmFyeToianFQbG90Iix0YWc6ImRpdiIsem9vbWFi bGU6ITAsa2V5d29yZHM6Im1lZGl1bSIsc2V0dGluPQpnczp7c2VwYXJhdG9yX2dyaWQ6e3RpdGxl OiJHcmlkcyIsdHlwZToic2VwYXJhdG9yIn0seF9heGlzX2dyaWQ6e3RpdGxlOiJBeGk9CnMgZ3Jp ZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBncmlkIGxpbmVzIGZvciB0aGUgWCBheGlz PyIsdHlwZToicmFkaT0Kb2J1dHRvbiIsaW5pdDoiZmFsc2UiLGRhdGE6W3tsYWJlbDoiT24iLHZh bHVlOiJ0cnVlIn0se2xhYmVsOiJPZmYiLHZhbHVlOiJmPQphbHNlIn1dfSx5X2F4aXNfZ3JpZDp7 dGl0bGU6IkF4aXMgZ3JpZCIsaW5mbzoiV291bGQgeW91IGxpa2UgdG8gc2hvdyBncmlkIGw9Cmlu ZXMgZm9yIHRoZSBZIGF4aXM/Iix0eXBlOiJyYWRpb2J1dHRvbiIsaW5pdDoidHJ1ZSIsZGF0YTpb e2xhYmVsOiJPbiIsdmFsdT0KZToidHJ1ZSJ9LHtsYWJlbDoiT2ZmIix2YWx1ZToiZmFsc2UifV19 fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9iPQphci9jb25maWciLFsicGx1Z2lu L2NoYXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpZyJdLGZ1bmN0aW9uKGUpe3JldHVybiAkLmV4dGU9 Cm5kKCEwLHt9LGUse3RpdGxlOiJSZWd1bGFyIixjYXRlZ29yeToiQmFyIGRpYWdyYW1zIixjb2x1 bW5zOnt4Ont0aXRsZToiVmFsdT0KZXMgZm9yIHgtYXhpcyIsaXNfbGFiZWw6ITAsaXNfYXV0bzoh MCxpc191bmlxdWU6ITB9LHk6e3RpdGxlOiJWYWx1ZXMgZm9yIHktPQpheGlzIixpc19udW1lcmlj OiEwfX19KX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9qcXBsb3QvbGluZS9jb25maWciLFsicGx1 Z2k9Cm4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQu ZXh0ZW5kKCEwLHt9LGUse3RpdGxlOj0KIkxpbmUgY2hhcnQiLGNhdGVnb3J5OiJPdGhlcnMiLGNv bHVtbnM6e3g6e3RpdGxlOiJWYWx1ZXMgZm9yIHgtYXhpcyIsaXNfbGFiPQplbDohMCxpc19hdXRv OiEwLGlzX3VuaXF1ZTohMH0seTp7dGl0bGU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmlj OiEwfX09Cn0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9zY2F0dGVyL2NvbmZpZyIs WyJwbHVnaW4vY2hhcnRzL2pxcGxvdC9jbz0KbW1vbi9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1 cm4gJC5leHRlbmQoITAse30sZSx7dGl0bGU6IlNjYXR0ZXIgcGxvdCIsY2F0PQplZ29yeToiT3Ro ZXJzIixjb2x1bW5zOnt4Ont0aXRsZToiVmFsdWVzIGZvciB4LWF4aXMiLGlzX251bWVyaWM6ITB9 LHk6e3RpdGw9CmU6IlZhbHVlcyBmb3IgeS1heGlzIixpc19udW1lcmljOiEwfX0sc2V0dGluZ3M6 e3hfYXhpc19ncmlkOntpbml0OiJ0cnVlIn19fT0KKX0pLGRlZmluZSgicGx1Z2luL2NoYXJ0cy9q cXBsb3QvYm94cGxvdC9jb25maWciLFsicGx1Z2luL2NoYXJ0cy9qcXBsb3QvY29tPQptb24vY29u ZmlnIl0sZnVuY3Rpb24oZSl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGUse3RpdGxlOiJCb3ggcGxv dCIsY2F0ZWdvcnk9CjoiRGF0YSBwcm9jZXNzaW5nIChyZXF1aXJlcyAnY2hhcnRzJyB0b29sIGZy b20gVG9vbHNoZWQpIixsaWJyYXJ5OiJqcVBsb3QiLD0KdGFnOiJkaXYiLGV4ZWN1dGU6ImJveHBs b3QiLGtleXdvcmRzOiJzbWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3k6e3RpdGxlPQo6Ik9i c2VydmF0aW9ucyIsaXNfbnVtZXJpYzohMH19LHNldHRpbmdzOntzaG93X2xlZ2VuZDp7aW5pdDoi ZmFsc2UifX19KX0pLGQ9CmVmaW5lKCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9oaXN0b2dyYW1fZGlz Y3JldGUvY29uZmlnIixbInBsdWdpbi9jaGFydHMvanFwbD0Kb3QvY29tbW9uL2NvbmZpZyJdLGZ1 bmN0aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiRGlzY3JldGUgSGlzPQp0 b2dyYW0iLGNhdGVnb3J5OiJEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wg ZnJvbSBUb29sc2hlZCkiLGU9CnhlY3V0ZToiaGlzdG9ncmFtZGlzY3JldGUiLGtleXdvcmRzOiJz bWFsbCBtZWRpdW0gbGFyZ2UiLGNvbHVtbnM6e3g6e3RpdGxlOj0KIk9ic2VydmF0aW9ucyIsaXNf bGFiZWw6ITB9fSxzZXR0aW5nczp7eF9heGlzX2xhYmVsOntpbml0OiJCcmVha3MifSx5X2F4aXNf PQpsYWJlbDp7aW5pdDoiRGVuc2l0eSJ9fX0pfSksZGVmaW5lKCJwbHVnaW4vY2hhcnRzL290aGVy cy9oZWF0bWFwL2NvbmZpZyIsWyI9CnBsdWdpbi9jaGFydHMvZm9ybXMvZGVmYXVsdCJdLGZ1bmN0 aW9uKGUpe3JldHVybiAkLmV4dGVuZCghMCx7fSxlLHt0aXRsZToiSD0KZWF0bWFwIixjYXRlZ29y eToiT3RoZXJzIixsaWJyYXJ5OiJDdXN0b20iLHRhZzoic3ZnIixrZXl3b3Jkczoic21hbGwiLHpv b21hPQpibGU6ITAsY29sdW1uczp7eDp7dGl0bGU6IkNvbHVtbiBsYWJlbHMiLGlzX2xhYmVsOiEw LGlzX251bWVyaWM6ITAsaXNfdW5pcXU9CmU6ITB9LHk6e3RpdGxlOiJSb3cgbGFiZWxzIixpc19s YWJlbDohMCxpc19udW1lcmljOiEwLGlzX3VuaXF1ZTohMH0sejp7dGl0bD0KZToiT2JzZXJ2YXRp b24iLGlzX251bWVyaWM6ITB9fSxzZXR0aW5nczp7dXNlX3BhbmVsczp7aW5pdDoidHJ1ZSIsaGlk ZTohMH0sPQpjb2xvcl9zZXQ6e3RpdGxlOiJDb2xvciBzY2hlbWUiLGluZm86IlNlbGVjdCBhIGNv bG9yIHNjaGVtZSBmb3IgeW91ciBoZWF0bWE9CnAiLHR5cGU6InNlbGVjdCIsaW5pdDoiamV0Iixk YXRhOlt7bGFiZWw6IkNvbGQtdG8tSG90Iix2YWx1ZToiaG90In0se2xhYmVsOj0KIkNvb2wiLHZh bHVlOiJjb29sIn0se2xhYmVsOiJDb3BwZXIiLHZhbHVlOiJjb3BwZXIifSx7bGFiZWw6IkdyYXkg c2NhbGUiLHZhPQpsdWU6ImdyYXkifSx7bGFiZWw6IkpldCIsdmFsdWU6ImpldCJ9LHtsYWJlbDoi Tm8tR3JlZW4iLHZhbHVlOiJub19ncmVlbiJ9LHs9CmxhYmVsOiJPY2VhbiIsdmFsdWU6Im9jZWFu In0se2xhYmVsOiJQb2xhciIsdmFsdWU6InBvbGFyIn0se2xhYmVsOiJSZWQtdG8tRz0KcmVlbiIs dmFsdWU6InJlZGdyZWVuIn0se2xhYmVsOiJSZWQtdG8tZ3JlZW4gKHNhdHVyYXRlZCkiLHZhbHVl OiJyZWQyZ3JlZW4iPQp9LHtsYWJlbDoiUmVsaWVmIix2YWx1ZToicmVsaWVmIn0se2xhYmVsOiJT ZWlzbW9ncmFwaCIsdmFsdWU6InNlaXMifSx7bGFiZWw9CjoiU2VhbGFuZCIsdmFsdWU6InNlYWxh bmQifSx7bGFiZWw6IlNwbGl0Iix2YWx1ZToic3BsaXQifSx7bGFiZWw6Ild5c2l3eWciLD0KdmFs dWU6Ind5c2l3eWcifV19LHVybF90ZW1wbGF0ZTp7dGl0bGU6IlVybCB0ZW1wbGF0ZSIsaW5mbzoi RW50ZXIgYSB1cmwgdG8gPQpsaW5rIHRoZSBsYWJlbHMgd2l0aCBleHRlcm5hbCBzb3VyY2VzLiBV c2UgX19MQUJFTF9fIGFzIHBsYWNlaG9sZGVyLiIsdHlwZTo9CiJ0ZXh0Iixpbml0OiIiLHBsYWNl aG9sZGVyOiJodHRwOi8vc29tZXVybC5jb20/aWQ9M0RfX0xBQkVMX18ifX19KX0pLGRlZmluZT0K KCJwbHVnaW4vY2hhcnRzL290aGVycy9oZWF0bWFwX2NsdXN0ZXIvY29uZmlnIixbInBsdWdpbi9j aGFydHMvb3RoZXJzL2hlYXRtPQphcC9jb25maWciXSxmdW5jdGlvbihlKXtyZXR1cm4gJC5leHRl bmQoITAse30sZSx7dGl0bGU6IkNsdXN0ZXJlZCBIZWF0bWFwIiw9CmNhdGVnb3J5OiJEYXRhIHBy b2Nlc3NpbmcgKHJlcXVpcmVzICdjaGFydHMnIHRvb2wgZnJvbSBUb29sc2hlZCkiLGV4ZWN1dGU6 Ij0KaGVhdG1hcCIsa2V5d29yZHM6InNtYWxsIG1lZGl1bSBsYXJnZSJ9KX0pLGRlZmluZSgicGx1 Z2luL2NoYXJ0cy90eXBlcyIsWyJwPQpsdWdpbi9jaGFydHMvbnZkMy9iYXIvY29uZmlnIiwicGx1 Z2luL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2VkL2NvbmZpZyIsInBsdWc9CmluL2NoYXJ0cy9udmQz L2Jhcl9ob3Jpem9udGFsL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRh bF9zdD0KYWNrZWQvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL2xpbmVfZm9jdXMvY29uZmln IiwicGx1Z2luL2NoYXJ0cy9udmQzL3BpPQplL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy9z dGFja2VkYXJlYV9mdWxsL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvbnZkMy89CnN0YWNrZWRhcmVh X3N0cmVhbS9jb25maWciLCJwbHVnaW4vY2hhcnRzL252ZDMvaGlzdG9ncmFtL2NvbmZpZyIsInBs dWdpbi9jaD0KYXJ0cy9udmQzL2xpbmUvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9udmQzL3NjYXR0 ZXIvY29uZmlnIiwicGx1Z2luL2NoYXJ0cy9uPQp2ZDMvc3RhY2tlZGFyZWEvY29uZmlnIiwicGx1 Z2luL2NoYXJ0cy9qcXBsb3QvYmFyL2NvbmZpZyIsInBsdWdpbi9jaGFydHMvanE9CnBsb3QvbGlu ZS9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9zY2F0dGVyL2NvbmZpZyIsInBsdWdpbi9j aGFydHMvanFwbD0Kb3QvYm94cGxvdC9jb25maWciLCJwbHVnaW4vY2hhcnRzL2pxcGxvdC9oaXN0 b2dyYW1fZGlzY3JldGUvY29uZmlnIiwicGx1Z2luPQovY2hhcnRzL290aGVycy9oZWF0bWFwL2Nv bmZpZyIsInBsdWdpbi9jaGFydHMvb3RoZXJzL2hlYXRtYXBfY2x1c3Rlci9jb25maWc9CiJdLGZ1 bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSxhLGYsbCxjLGgscCxkLHYsbSxnLHkpe3JldHVybiBCYWNr Ym9uZS5Nb2RlbC5leD0KdGVuZCh7ZGVmYXVsdHM6e252ZDNfYmFyOmUsbnZkM19iYXJfc3RhY2tl ZDp0LG52ZDNfYmFyX2hvcml6b250YWw6bixudmQzX2JhPQpyX2hvcml6b250YWxfc3RhY2tlZDpy LG52ZDNfbGluZV9mb2N1czppLG52ZDNfc3RhY2tlZGFyZWE6YyxudmQzX3N0YWNrZWRhcmU9CmFf ZnVsbDpvLG52ZDNfc3RhY2tlZGFyZWFfc3RyZWFtOnUsbnZkM19waWU6cyxudmQzX2xpbmU6Zixu dmQzX3NjYXR0ZXI6bCxudj0KZDNfaGlzdG9ncmFtOmEsanFwbG90X2JhcjpoLGpxcGxvdF9oaXN0 b2dyYW1fZGlzY3JldGU6bSxqcXBsb3RfbGluZTpwLGpxcGxvPQp0X3NjYXR0ZXI6ZCxqcXBsb3Rf Ym94cGxvdDp2LG90aGVyc19oZWF0bWFwOmcsb3RoZXJzX2hlYXRtYXBfY2x1c3Rlcjp5fX0pfSk9 CixkZWZpbmUoInBsdWdpbi9hcHAiLFsibXZjL3VpL3VpLW1vZGFsIiwibXZjL3VpL3VpLXBvcnRs ZXQiLCJtdmMvdWkvdWktbWlzYz0KIiwidXRpbHMvdXRpbHMiLCJwbHVnaW4vbGlicmFyeS9qb2Jz IiwicGx1Z2luL2xpYnJhcnkvZGF0YXNldHMiLCJwbHVnaW4vbGliPQpyYXJ5L3N0b3JhZ2UiLCJ1 dGlscy9kZWZlcnJlZCIsInBsdWdpbi92aWV3cy92aWV3ZXIiLCJwbHVnaW4vdmlld3MvZWRpdG9y Iiw9CiJwbHVnaW4vbW9kZWxzL2NvbmZpZyIsInBsdWdpbi9tb2RlbHMvY2hhcnQiLCJwbHVnaW4v Y2hhcnRzL3R5cGVzIl0sZnVuY3Rpbz0KbihlLHQsbixyLGkscyxvLHUsYSxmLGwsYyxoKXtyZXR1 cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3RpPQpvbih0KXt0aGlzLm9w dGlvbnM9M0R0LEdhbGF4eSYmR2FsYXh5Lm1vZGFsP3RoaXMubW9kYWw9M0RHYWxheHkubW9kYWw6 dGhpcy49Cm1vZGFsPTNEbmV3IGUuVmlldyx0aGlzLmNvbmZpZz0zRG5ldyBsLHRoaXMudHlwZXM9 M0RuZXcgaCx0aGlzLmNoYXJ0PTNEbmV3ID0KYyx0aGlzLmpvYnM9M0RuZXcgaSh0aGlzKSx0aGlz LmRhdGFzZXRzPTNEbmV3IHModGhpcyksdGhpcy5zdG9yYWdlPTNEbmV3IG8oPQp0aGlzKSx0aGlz LmRlZmVycmVkPTNEbmV3IHUsdGhpcy52aWV3ZXJfdmlldz0zRG5ldyBhKHRoaXMpLHRoaXMuZWRp dG9yX3ZpZXc9Cj0zRG5ldyBmKHRoaXMpLHRoaXMuJGVsLmFwcGVuZCh0aGlzLnZpZXdlcl92aWV3 LiRlbCksdGhpcy4kZWwuYXBwZW5kKHRoaXMuZT0KZGl0b3Jfdmlldy4kZWwpO2lmKCF0aGlzLnN0 b3JhZ2UubG9hZCgpKXRoaXMuZ28oImVkaXRvciIpO2Vsc2V7dGhpcy5nbygidmllPQp3ZXIiKTt2 YXIgbj0zRHRoaXM7dGhpcy5kZWZlcnJlZC5leGVjdXRlKGZ1bmN0aW9uKCl7bi5jaGFydC50cmln Z2VyKCJyZWRyYXc9CiIpfSl9fSxnbzpmdW5jdGlvbihlKXskKCIudG9vbHRpcCIpLmhpZGUoKTtz d2l0Y2goZSl7Y2FzZSJlZGl0b3IiOnRoaXMuZWRpdD0Kb3Jfdmlldy5zaG93KCksdGhpcy52aWV3 ZXJfdmlldy5oaWRlKCk7YnJlYWs7Y2FzZSJ2aWV3ZXIiOnRoaXMuZWRpdG9yX3ZpZXcuPQpoaWRl KCksdGhpcy52aWV3ZXJfdmlldy5zaG93KCl9fSxjaGFydFBhdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9 M0RlLnNwbGl0KC9fKC49CispLyk7cmV0dXJuIHQubGVuZ3RoPj0zRDI/dFswXSsiLyIrdFsxXToo Y29uc29sZS5kZWJ1ZygiRkFJTEVEIEFwcDpjaGFydFBhdD0KaCgpIC0gSW52YWxpZCBmb3JtYXQ6 ICIrZSksdW5kZWZpbmVkKX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYg LXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNi N2Y1ZDc1NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgZWdncy5pbmkKLS0tIGEvZWdncy5pbmkK KysrIGIvZWdncy5pbmkKQEAgLTYwLDggKzYwLDkgQEAKIHB5dGhvbl9vcGVuaWQgPTNEIDIuMi41 CiBweXRob25fZGFlbW9uID0zRCAxLjUuNQogcHl0eiA9M0QgMjAxMy45CityZXBvemUubHJ1ID0z RCAwLjYKIHJlcXVlc3RzID0zRCAyLjIuMQotUm91dGVzID0zRCAxLjEyLjMKK1JvdXRlcyA9M0Qg Mi4xCiBzaW1wbGVqc29uID0zRCAyLjEuMQogc2l4ID0zRCAxLjkuMAogc3FsYWxjaGVteV9taWdy YXRlID0zRCAwLjcuMgpAQCAtNzUsNyArNzYsNyBAQAogd3NnaXJlZiA9M0QgMC4xLjIKIEJhYmVs ID0zRCAxLjMKIHdjaGFydHlwZSA9M0QgMC4xCi1XaG9vc2ggPTNEIDAuMy4xOAorV2hvb3NoID0z RCAyLjUuNwogOyBmbHVlbnRfbG9nZ2VyID0zRCAwLjMuMwogcmF2ZW4gPTNEIDMuMS44Cj0yMAoK ZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3 NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2ZiBsaWIvZ2FsYXh5L3Rvb2xzL19f aW5pdF9fLnB5Ci0tLSBhL2xpYi9nYWxheHkvdG9vbHMvX19pbml0X18ucHkKKysrIGIvbGliL2dh bGF4eS90b29scy9fX2luaXRfXy5weQpAQCAtMjI1MSw3ICsyMjUxLDggQEAKICAgICAgICAgIiIi CiAgICAgICAgIGpvYl9pZCA9M0Qga3dkLmdldCgnam9iX2lkJywgTm9uZSkKICAgICAgICAgZGF0 YXNldF9pZCA9M0Qga3dkLmdldCgnZGF0YXNldF9pZCcsIE5vbmUpCi0gICAgICAgPTIwCisgICAg ICAgIGlzX2R5bmFtaWMgPTNEIHN0cmluZ19hc19ib29sKGt3ZC5nZXQoJ19faXNfZHluYW1pY19f JywgVHJ1ZSkpCisKICAgICAgICAgIyBsb2FkIGpvYiBkZXRhaWxzIGlmIHByb3ZpZGVkCiAgICAg ICAgIGpvYiA9M0QgTm9uZQogICAgICAgICBpZiBqb2JfaWQ6CkBAIC0yMzQ1LDEwICsyMzQ2LDE2 IEBACiAgICAgICAgIGRlZiBjaGVja19zdGF0ZSh0cmFucywgaW5wdXQsIGRlZmF1bHRfdmFsdWUs IGNvbnRleHQpOgogICAgICAgICAgICAgdmFsdWUgPTNEIGRlZmF1bHRfdmFsdWUKICAgICAgICAg ICAgIGVycm9yID0zRCAnU3RhdGUgdmFsaWRhdGlvbiBmYWlsZWQuJworICAgICAgICAgICA9MjAK KyAgICAgICAgICAgICMgc2tpcCBkeW5hbWljIGZpZWxkcyBpZiBkZWFjdGl2YXRlZAorICAgICAg ICAgICAgaWYgbm90IGlzX2R5bmFtaWMgYW5kIGlucHV0LmlzX2R5bmFtaWM6CisgICAgICAgICAg ICAgICAgcmV0dXJuIFt2YWx1ZSwgTm9uZV0KKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAj IHZhbGlkYXRlIHZhbHVlIGNvbnRlbnQKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAg ICAjIHJlc29sdmVzIHRoZSBpbmNvbnNpc3RlbnQgZGVmaW5pdGlvbiBvZiBib29sZWFuIHBhcmFt ZXRlPQpycyAoc2VlIGJhc2UucHkpIHdpdGhvdXQgbW9kaWZ5aW5nIHNoYXJlZCBjb2RlCiAgICAg ICAgICAgICAgICAgaWYgaW5wdXQudHlwZSA9M0Q9M0QgJ2Jvb2xlYW4nIGFuZCBpc2luc3RhbmNl KGRlZmF1bHRfdmFsdT0KZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl LCBlcnJvciA9M0QgW3V0aWwuc3RyaW5nX2FzX2Jvb2woZGVmYXVsdF92YWx1ZSksID0KTm9uZV0K KyAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGVycm9yID0zRCBbc3RyaW5nX2FzX2Jvb2woZGVm YXVsdF92YWx1ZSksIE5vbmVdCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg ICAgICAgdmFsdWUsIGVycm9yID0zRCBjaGVja19wYXJhbSh0cmFucywgaW5wdXQsIGRlZmF1bHRf dmFsPQp1ZSwgY29udGV4dCkKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKQEAg LTI0NjMsNyArMjQ3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZV9zdGF0 ZShzdGF0ZVtrXSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRlW2tdID0zRCBqc29uaWZ5KHN0YXRlW2tdKQotICAgICAgICAgICA9MjAKKwog ICAgICAgICAjIGRvIHBhcmFtIHRyYW5zbGF0aW9uIGhlcmUsIHVzZWQgYnkgZGF0YXNvdXJjZSB0 b29scwogICAgICAgICBpZiBzZWxmLmlucHV0X3RyYW5zbGF0b3I6CiAgICAgICAgICAgICBzZWxm LmlucHV0X3RyYW5zbGF0b3IudHJhbnNsYXRlKCBwYXJhbXMgKQoKZGlmZiAtciA4YTcwNDU3OTJj N2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThh PQpiOGY4ZGMwMmJhMzY5OTc2ZiBsaWIvZ2FsYXh5L3Rvb2xzL3BhcmFtZXRlcnMvYmFzaWMucHkK LS0tIGEvbGliL2dhbGF4eS90b29scy9wYXJhbWV0ZXJzL2Jhc2ljLnB5CisrKyBiL2xpYi9nYWxh eHkvdG9vbHMvcGFyYW1ldGVycy9iYXNpYy5weQpAQCAtNDcsNiArNDcsNyBAQAogICAgICAgICBz ZWxmLm5hbWUgPTNEIGlucHV0X3NvdXJjZS5nZXQoIm5hbWUiKQogICAgICAgICBzZWxmLnR5cGUg PTNEIGlucHV0X3NvdXJjZS5nZXQoInR5cGUiKQogICAgICAgICBzZWxmLmhpZGRlbiA9M0QgaW5w dXRfc291cmNlLmdldCgiaGlkZGVuIiwgRmFsc2UpCisgICAgICAgIHNlbGYuaXNfZHluYW1pYyA9 M0QgRmFsc2UKICAgICAgICAgc2VsZi5sYWJlbCA9M0QgaW5wdXRfc291cmNlLnBhcnNlX2xhYmVs KCkKICAgICAgICAgc2VsZi5oZWxwID0zRCBpbnB1dF9zb3VyY2UucGFyc2VfaGVscCgpCiAgICAg ICAgIHNhbml0aXplcl9lbGVtID0zRCBpbnB1dF9zb3VyY2UucGFyc2Vfc2FuaXRpemVyX2VsZW0o KQpAQCAtMjE1LDYgKzIxNiw3IEBACiAgICAgICAgIHRvb2xfZGljdFsgJ21vZGVsX2NsYXNzJyBd ID0zRCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgICB0b29sX2RpY3RbICdvcHRpb25h bCcgXSA9M0Qgc2VsZi5vcHRpb25hbAogICAgICAgICB0b29sX2RpY3RbICdoaWRkZW4nIF0gPTNE IHNlbGYuaGlkZGVuCisgICAgICAgIHRvb2xfZGljdFsgJ2lzX2R5bmFtaWMnIF0gPTNEIHNlbGYu aXNfZHluYW1pYwogICAgICAgICBpZiBoYXNhdHRyKCBzZWxmLCAndmFsdWUnICk6CiAgICAgICAg ICAgICB0b29sX2RpY3RbICd2YWx1ZScgXSA9M0Qgc2VsZi52YWx1ZQogICAgICAgICByZXR1cm4g dG9vbF9kaWN0CkBAIC0yNjEsNiArMjYzLDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg ICByZXR1cm4gZm9ybV9idWlsZGVyLlRleHRGaWVsZCggc2VsZi5uYW1lLCBzZWxmLnNpemUsIHZh bHVlICkKPTIwCisgICAgZGVmIHRvX2h0bWxfdmFsdWUoIHNlbGYsIHZhbHVlLCBhcHAgKToKKyAg ICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICByZXR1cm4gc2VsZi50b19zdHJpbmcoIHZhbHVlLCBhcHAgKQorCiAgICAg ZGVmIGdldF9pbml0aWFsX3ZhbHVlKCBzZWxmLCB0cmFucywgY29udGV4dCwgaGlzdG9yeT0zRE5v bmUgKToKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKPTIwCkBAIC0xMDQyLDcgKzEwNTAsNiBA QAo9MjAKICAgICAgICAgZFsnZGlzcGxheSddID0zRCBzZWxmLmRpc3BsYXkKICAgICAgICAgZFsn bXVsdGlwbGUnXSA9M0Qgc2VsZi5tdWx0aXBsZQotICAgICAgICBkWydpc19keW5hbWljJ10gPTNE IHNlbGYuaXNfZHluYW1pYwo9MjAKICAgICAgICAgcmV0dXJuIGQKPTIwCkBAIC0xNDUxLDcgKzE0 NTgsNiBAQAogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoIGZyb21fZmlsZSApOgog ICAgICAgICAgICAgICAgIGZyb21fZmlsZSA9M0Qgb3MucGF0aC5qb2luKCB0b29sLmFwcC5jb25m aWcudG9vbF9kYXRhX3BhdGg9CiwgZnJvbV9maWxlICkKICAgICAgICAgICAgIGVsZW0gPTNEIFhN TCggIjxyb290PiVzPC9yb290PiIgJSBvcGVuKCBmcm9tX2ZpbGUgKS5yZWFkKCkgKQotICAgICAg ICBzZWxmLmlzX2R5bmFtaWMgPTNEIEZhbHNlCiAgICAgICAgIHNlbGYuZHluYW1pY19vcHRpb25z ID0zRCBlbGVtLmdldCggJ2R5bmFtaWNfb3B0aW9ucycsIE5vbmUgKQogICAgICAgICBpZiBzZWxm LmR5bmFtaWNfb3B0aW9uczoKICAgICAgICAgICAgIHNlbGYuaXNfZHluYW1pYyA9M0QgVHJ1ZQpA QCAtMTU0MSw2ICsxNTQ3LDggQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg ICAgICAgICB2YWx1ZSA9M0QgdmFsdWUuc3BsaXQoICJcbiIgKQogICAgICAgICAgICAgcmV0dXJu IFVudmFsaWRhdGVkVmFsdWUoIHZhbHVlICkKKyAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBub3Qg c2VsZi5vcHRpb25hbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoICJBbiBpbnZhbGlk IG9wdGlvbiB3YXMgc2VsZWN0ZWQgZm9yICVzLCAnTm9uPQplJywgcGxlYXNlIHZlcmlmeSIgJSAo c2VsZi5uYW1lKSApCiAgICAgICAgIGlmIG5vdCB2YWx1ZToKICAgICAgICAgICAgIHJldHVybiBO b25lCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKCB2YWx1ZSwgbGlzdCApOgpAQCAtMTY2Myw5 ICsxNjcxLDggQEAKICAgICAgICAgICAgICMgd2lsbCBzb21ldGltZXMgZXJyb3IgaWYgc2VsZi5p c19keW5hbWljIGFuZCBzZWxmLmZpbHRlcmVkCiAgICAgICAgICAgICAjICAgYmMgd2UgZG9udC9j YW50IGZpbGwgb3V0IG90aGVyX3ZhbHVlcyBhYm92ZSAoe30pCiAgICAgICAgICAgICBwYXNzCi0g ICAgICAgIGRbICdvcHRpb25zJyBdID0zRCBvcHRpb25zCi0gICAgICAgIGRbICdkaXNwbGF5JyBd ID0zRCBzZWxmLmRpc3BsYXkKLSAgICAgICAgZFsgJ2lzX2R5bmFtaWMnIF0gPTNEIHNlbGYuaXNf ZHluYW1pYworICAgICAgICBkWydvcHRpb25zJ10gPTNEIG9wdGlvbnMKKyAgICAgICAgZFsnZGlz cGxheSddID0zRCBzZWxmLmRpc3BsYXkKICAgICAgICAgcmV0dXJuIGQKPTIwCj0yMApAQCAtMTc2 OCw2ICsxNzc1LDcgQEAKICAgICAgICAgICAgIHNlbGYudmFsaWRhdG9ycy5hcHBlbmQoIHZhbGlk YXRpb24uTWV0YWRhdGFWYWxpZGF0b3IoKSApCiAgICAgICAgIHNlbGYuX3BhcnNlX2Zvcm1hdHMo IHRyYW5zLCB0b29sLCBpbnB1dF9zb3VyY2UgKQogICAgICAgICBzZWxmLm11bHRpcGxlID0zRCBp bnB1dF9zb3VyY2UuZ2V0X2Jvb2woJ211bHRpcGxlJywgRmFsc2UpCisgICAgICAgIHNlbGYuaXNf ZHluYW1pYyA9M0QgVHJ1ZQogICAgICAgICBzZWxmLl9wYXJzZV9vcHRpb25zKCBpbnB1dF9zb3Vy Y2UgKQogICAgICAgICAjIExvYWQgY29udmVyc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBkYXRhc2V0 IGlucHV0CiAgICAgICAgIHNlbGYuY29udmVyc2lvbnMgPTNEIFtdCkBAIC0yMTE0LDcgKzIxMjIs NiBAQAogICAgICAgICBkID0zRCBzdXBlciggRGF0YVRvb2xQYXJhbWV0ZXIsIHNlbGYgKS50b19k aWN0KCB0cmFucyApCiAgICAgICAgIGRbJ2V4dGVuc2lvbnMnXSA9M0Qgc2VsZi5leHRlbnNpb25z CiAgICAgICAgIGRbJ211bHRpcGxlJ10gPTNEIHNlbGYubXVsdGlwbGUKLSAgICAgICAgZFsnaXNf ZHluYW1pYyddID0zRCBUcnVlCiAgICAgICAgIGRbJ29wdGlvbnMnXSA9M0QgeydoZGEnOiBbXSwg J2hkY2EnOiBbXX0KPTIwCiAgICAgICAgICMgcmV0dXJuIGRlZmF1bHQgY29udGVudCBpZiBjb250 ZXh0IGlzIG5vdCBhdmFpbGFibGUKQEAgLTIxNjksNiArMjE3Niw3IEBACiAgICAgICAgIHNlbGYu X3BhcnNlX2Zvcm1hdHMoIHRyYW5zLCB0b29sLCBpbnB1dF9zb3VyY2UgKQogICAgICAgICBzZWxm Ll9jb2xsZWN0aW9uX3R5cGUgPTNEIGlucHV0X3NvdXJjZS5nZXQoImNvbGxlY3Rpb25fdHlwZSIs IE5vbmUpCiAgICAgICAgIHNlbGYubXVsdGlwbGUgPTNEIEZhbHNlICAjIEFjY2Vzc2VkIG9uIERh dGFUb29sUGFyYW1ldGVyIGEgbG90LCBtYT0KeSB3YW50IGluIGZ1dHVyZQorICAgICAgICBzZWxm LmlzX2R5bmFtaWMgPTNEIFRydWUKICAgICAgICAgc2VsZi5fcGFyc2Vfb3B0aW9ucyggaW5wdXRf c291cmNlICkgICMgVE9ETzogUmV2aWV3IGFuZCB0ZXN0Lgo9MjAKICAgICBAcHJvcGVydHkKQEAg LTIzNTUsNyArMjM2Myw2IEBACiAgICAgICAgIGQgPTNEIHN1cGVyKCBEYXRhQ29sbGVjdGlvblRv b2xQYXJhbWV0ZXIsIHNlbGYgKS50b19kaWN0KCB0cmFucyApCiAgICAgICAgIGRbJ2V4dGVuc2lv bnMnXSA9M0Qgc2VsZi5leHRlbnNpb25zCiAgICAgICAgIGRbJ211bHRpcGxlJ10gPTNEIHNlbGYu bXVsdGlwbGUKLSAgICAgICAgZFsnaXNfZHluYW1pYyddID0zRCBGYWxzZQogICAgICAgICBkWydv cHRpb25zJ10gPTNEIHsnaGRhJzogW10sICdoZGNhJzogW119Cj0yMAogICAgICAgICAjIHJldHVy biBkZWZhdWx0IGNvbnRlbnQgaWYgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlCkBAIC0yNDIyLDcg KzI0MjksNyBAQAogICAgIGRlZiBnZXRfaHRtbF9maWVsZCggc2VsZiwgdHJhbnM9M0ROb25lLCB2 YWx1ZT0zRE5vbmUsIG90aGVyX3ZhbHVlcz0zRHs9Cn0gKToKICAgICAgICAgcmV0dXJuIGZvcm1f YnVpbGRlci5MaWJyYXJ5RmllbGQoIHNlbGYubmFtZSwgdmFsdWU9M0R2YWx1ZSwgdHJhbnM9Cj0z RHRyYW5zICkKPTIwCi0gICAgZGVmIGdldF9pbml0aWFsX3ZhbHVlKCBzZWxmLCB0cmFucywgY29u dGV4dCApOgorICAgIGRlZiBnZXRfaW5pdGlhbF92YWx1ZSggc2VsZiwgdHJhbnMsIGNvbnRleHQs IGhpc3Rvcnk9M0ROb25lICk6CiAgICAgICAgIHJldHVybiBOb25lCj0yMAogICAgIGRlZiBmcm9t X2h0bWwoIHNlbGYsIHZhbHVlLCB0cmFucywgb3RoZXJfdmFsdWVzPTNEe30gKToKCmRpZmYgLXIg OGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1 ZDc1NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9h cGkvam9icy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2FwaS9qb2JzLnB5Cisr KyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvYXBpL2pvYnMucHkKQEAgLTIxOSw3ICsyMTks OCBAQAo9MjAKICAgICBAZXhwb3NlX2FwaQogICAgIGRlZiBjcmVhdGUoIHNlbGYsIHRyYW5zLCBw YXlsb2FkLCAqKmt3ZCApOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAg ICAgICAgIiIiIFNlZSB0aGUgY3JlYXRlIG1ldGhvZCBpbiB0b29scy5weSBpbiBvcmRlciB0byBz dWJtaXQgYSBqb2IuICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCAnUGxl YXNlIFBPU1QgdG8gL2FwaS90b29scyBpbnN0ZWFkLicgKQo9MjAKICAgICBAZXhwb3NlX2FwaQog ICAgIGRlZiBzZWFyY2goIHNlbGYsIHRyYW5zLCBwYXlsb2FkLCAqKmt3ZCApOgoKZGlmZiAtciA4 YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVk NzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2ZiBsaWIvZ2FsYXh5L3dlYmFwcHMvZ2FsYXh5L2Nv bnRyb2xsZXJzL3BhZ2UucHkKLS0tIGEvbGliL2dhbGF4eS93ZWJhcHBzL2dhbGF4eS9jb250cm9s bGVycy9wYWdlLnB5CisrKyBiL2xpYi9nYWxheHkvd2ViYXBwcy9nYWxheHkvY29udHJvbGxlcnMv cGFnZS5weQpAQCAtNzI5LDkgKzcyOSw4IEBACiAgICAgICAgICIiIgogICAgICAgICAjVE9ETzog c2hvdWxkIGJlIG1vdmVkIHRvIGhpc3RvcnkgY29udHJvbGxlciBhbmQvb3IgY2FsbGVkIHZpYSBh amE9CnggZnJvbSB0aGUgdGVtcGxhdGUKICAgICAgICAgZGVjb2RlZF9pZCA9M0Qgc2VsZi5kZWNv ZGVfaWQoIGlkICkKKyAgICAgICAgIyBoaXN0b3JpZXMgZW1iZWRkZWQgaW4gcGFnZXMgYXJlIHNl dCB0byBpbXBvcnRhYmxlIHdoZW4gZW1iZWRkZWQsPQogY2hlY2sgZm9yIGFjY2VzcyBoZXJlCiAg ICAgICAgIGhpc3RvcnkgPTNEIHNlbGYuaGlzdG9yeV9tYW5hZ2VyLmdldF9hY2Nlc3NpYmxlKCB0 cmFucywgZGVjb2RlZF9pZD0KLCB0cmFucy51c2VyICkKLSAgICAgICAgaWYgbm90IGhpc3Rvcnk6 Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQo9MjAKICAgICAgICAgIyBjcmVhdGUgb3duZXJzaGlw IGZsYWcgZm9yIHRlbXBsYXRlLCBkaWN0aWZ5IG1vZGVscwogICAgICAgICAjIG5vdGU6IGFkZGlu ZyBvcmlnaW5hbCBhbm5vdGF0aW9uIHNpbmNlIHRoaXMgaXMgcHVibGlzaGVkIC0gZ2V0X2Q9Cmlj dCByZXR1cm5zIHVzZXItYmFzZWQgYW5ub3MKCmRpZmYgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1 NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4YT0KYjhmOGRjMDJi YTM2OTk3NmYgc3RhdGljL3NjcmlwdHMvZ2FsYXh5Lm1hc3RoZWFkLmpzCi0tLSBhL3N0YXRpYy9z Y3JpcHRzL2dhbGF4eS5tYXN0aGVhZC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9nYWxheHkubWFz dGhlYWQuanMKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICB2YXIgJHBvcG92ZXJfZWxlbWVu dCA9M0QgJCh0aGlzLmVsKS5maW5kKCcuaGVhZCcpOwogICAgICAgICAkcG9wb3Zlcl9lbGVtZW50 LnBvcG92ZXIoewogICAgICAgICAgICAgaHRtbDogdHJ1ZSwKLSAgICAgICAgICAgIGNvbnRlbnQ6 ICdQbGVhc2UgPGEgaHJlZj0zRCInICsgZ2FsYXh5X2NvbmZpZy5yb290ICsgJy91c2VyL2xvPQpn aW4iPmxvZyBpbjwvYT4gb3IgPGEgaHJlZj0zRCInICsgZ2FsYXh5X2NvbmZpZy5yb290ICsgJy91 c2VyL2NyZWF0ZSI+cmVnaXM9CnRlcjwvYT4gdG8gdXNlIHRoaXMgZmVhdHVyZS4nLAorICAgICAg ICAgICAgY29udGVudDogJ1BsZWFzZSA8YSBocmVmPTNEIicgKyBnYWxheHlfY29uZmlnLnJvb3Qg KyAndXNlci9sb2c9CmluP3VzZV9wYW5lbHM9M0RUcnVlIj5sb2cgaW48L2E+IG9yIDxhIGhyZWY9 M0QiJyArIGdhbGF4eV9jb25maWcucm9vdCArICd1cz0KZXIvY3JlYXRlP3VzZV9wYW5lbHM9M0RU cnVlIj5yZWdpc3RlcjwvYT4gdG8gdXNlIHRoaXMgZmVhdHVyZS4nLAogICAgICAgICAgICAgcGxh Y2VtZW50OiAnYm90dG9tJwogICAgICAgICB9KS5vbignc2hvd24uYnMucG9wb3ZlcicsIGZ1bmN0 aW9uKCkgeyAvLyBob29raW5nIG9uIGJvb3RzdHJhcCBldmU9Cm50IHRvIGF1dG9tYXRpY2FsbHkg aGlkZSBwb3BvdmVycyBhZnRlciBkZWxheQogICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv bigpIHsKCmRpZmYgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAt ciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgc3RhdGljL3Njcmlw dHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMv dG9vbHMvdG9vbHMtZm9ybS1iYXNlLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL212Yy90b29scy90 b29scy1mb3JtLWJhc2UuanMKQEAgLTExLDggKzExLDIzIEBACiAgICAgcmV0dXJuIEJhY2tib25l LlZpZXcuZXh0ZW5kKHsKICAgICAgICAgLy8gaW5pdGlhbGl6ZQogICAgICAgICBpbml0aWFsaXpl OiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgICAgICAvLyBvcHRpb25zCisgICAgICAgICAg ICB0aGlzLm9wdGlvbnNEZWZhdWx0ID0zRCB7CisgICAgICAgICAgICAgICAgLy8gdXNlcyBkeW5h bWljIGZpZWxkcyBpbnN0ZWFkIG9mIHRleHQgZmllbGRzCisgICAgICAgICAgICAgICAgaXNfZHlu YW1pYyAgICAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAvLyBzaG93cyBmb3JtIGluIGNvbXBh Y3QgdmlldyBtb2RlCisgICAgICAgICAgICAgICAgY29tcGFjdCAgICAgICAgIDogZmFsc2UsCisg ICAgICAgICAgICAgICAgLy8gc2hvd3MgZXJyb3JzIG9uIHN0YXJ0CisgICAgICAgICAgICAgICAg aW5pdGlhbF9lcnJvcnMgIDogZmFsc2UsCisgICAgICAgICAgICAgICAgLy8gZW5zdXJlcyB0aGF0 IGFsbCBkYXRhIGluY2x1ZGluZyBkaXNhYmxlZCBvcHRpb25hbCBmaWVsZD0KcyBhcmUgc3VibWl0 dGVkIHRvIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICBzZW5kX2FsbCAgICAgICAgOiBmYWxz ZQorICAgICAgICAgICAgfTsKKyAgID0yMAorICAgICAgICAgICAgLy8gY29uZmlndXJlIG9wdGlv bnMKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9M0QgVXRpbHMubWVyZ2Uob3B0aW9ucywgdGhp cy5vcHRpb25zRGVmYXVsdCk7CisgICA9MjAKICAgICAgICAgICAgIC8vIGxvZyBvcHRpb25zCi0g ICAgICAgICAgICBjb25zb2xlLmRlYnVnKG9wdGlvbnMpOworICAgICAgICAgICAgY29uc29sZS5k ZWJ1Zyh0aGlzLm9wdGlvbnMpOwogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIGxpbmsg Z2FsYXh5IG1vZGFsIG9yIGNyZWF0ZSBvbmUKICAgICAgICAgICAgIHZhciBnYWxheHkgPTNEIHBh cmVudC5HYWxheHk7CkBAIC0yOSw5ICs0NCw2IEBACiAgICAgICAgICAgICAgICAgdGhpcy5pc19h ZG1pbiA9M0QgZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgID0yMAotICAgICAgICAg ICAgLy8gbGluayBvcHRpb25zCi0gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPTNEIG9wdGlvbnM7 Ci0gICAgICAgICAgID0yMAogICAgICAgICAgICAgLy8gbGluayBjb250YWluZXIKICAgICAgICAg ICAgIHRoaXMuY29udGFpbmVyID0zRCB0aGlzLm9wdGlvbnMuY29udGFpbmVyIHx8ICdib2R5JzsK ICAgICAgICAgICAgPTIwCkBAIC03Niw2ICs4OCwyNCBAQAogICAgICAgICAgICAgfQogICAgICAg ICB9LAogICAgICAgID0yMAorICAgICAgICAvKiogSGlnaGxpZ2h0cyBlcnJvcnMKKyAgICAgICAg Ki8KKyAgICAgICAgX2Vycm9yczogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgICAgICAgLy8g aGlkZSBwcmV2aW91cyBlcnJvciBzdGF0ZW1lbnRzCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIo J3Jlc2V0Jyk7CisgICAgICAgPTIwCisgICAgICAgICAgICAvLyBoaWdobGlnaHQgYWxsIGVycm9y cworICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvcnMpIHsKKyAgICAgICAg ICAgICAgICB2YXIgZXJyb3JfbWVzc2FnZXMgPTNEIHRoaXMudHJlZS5tYXRjaFJlc3BvbnNlKG9w dGlvbnMuZXJyPQpvcnMpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGlucHV0X2lkIGluIHRo aXMuZWxlbWVudF9saXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9M0QgdGhp cy5lbGVtZW50X2xpc3RbaW5wdXRfaWRdOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jf bWVzc2FnZXNbaW5wdXRfaWRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hs aWdodChpbnB1dF9pZCwgZXJyb3JfbWVzc2FnZXNbaW5wdXRfaWRdLD0KIHRydWUpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9LAorICAgICAgID0yMAogICAgICAgICAvKiogTWFpbiB0b29sIGZvcm0gYnVpbGQgZnVuY3Rp b24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgYSA9Cm5ldyBtb2RlbCBpcyBhdmFpbGFi bGUuCiAgICAgICAgICovCiAgICAgICAgIF9idWlsZEZvcm06IGZ1bmN0aW9uKCkgewpAQCAtMTEw LDE3ICsxNDAsMTQgQEAKICAgICAgICAgICAgIC8vIHJlYnVpbGQgdGhlIHVuZGVybHlpbmcgZGF0 YSBzdHJ1Y3R1cmUKICAgICAgICAgICAgIHRoaXMudHJlZS5maW5hbGl6ZSgpOwogICAgICAgICAg ICA9MjAKLSAgICAgICAgICAgIC8vIHNob3cgZXJyb3JzCi0gICAgICAgICAgICBpZiAob3B0aW9u cy5lcnJvcnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXJyb3JfbWVzc2FnZXMgPTNEIHRoaXMu dHJlZS5tYXRjaFJlc3BvbnNlKG9wdGlvbnMuZXJyPQpvcnMpOwotICAgICAgICAgICAgICAgIGZv ciAodmFyIGlucHV0X2lkIGluIGVycm9yX21lc3NhZ2VzKSB7Ci0gICAgICAgICAgICAgICAgICAg IHRoaXMuaGlnaGxpZ2h0KGlucHV0X2lkLCBlcnJvcl9tZXNzYWdlc1tpbnB1dF9pZF0sIHRydT0K ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2hvdyBlcnJvcnMgb24gc3Rh cnR1cAorICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbF9lcnJvcnMpIHsKKyAgICAgICAg ICAgICAgICB0aGlzLl9lcnJvcnMob3B0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg ID0yMAogICAgICAgICAgICAgLy8gYWRkIHJlZnJlc2ggbGlzdGVuZXIKICAgICAgICAgICAgIHRo aXMub24oJ3JlZnJlc2gnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBieSB1c2lu Zy9yZXNldGluZyB0aGUgZGVmZXJyZWQgYWpheCBxdWV1ZSB0aGUgbnVtYmVyIG9mPQogcmVkdW5k YW50IGNhbGxzIGlzIHJlZHVjZWQKKyAgICAgICAgICAgICAgICAvLyBieSB1c2luZy9yZXNldHRp bmcgdGhlIGRlZmVycmVkIGFqYXggcXVldWUgdGhlIG51bWJlciBvPQpmIHJlZHVuZGFudCBjYWxs cyBpcyByZWR1Y2VkCiAgICAgICAgICAgICAgICAgc2VsZi5kZWZlcnJlZC5yZXNldCgpOwogICAg ICAgICAgICAgICAgIHNlbGYuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpe3NlbGYuX3VwZGF0 ZU1vZGVsKCl9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTQ4LDcgKzE3NSw3IEBACiAgICAgICAg ICAgICAvLyBidXR0b24gZm9yIHZlcnNpb24gc2VsZWN0aW9uCiAgICAgICAgICAgICB2YXIgcmVx dWlyZW1lbnRzX2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbkljb24oewogICAgICAgICAgICAgICAg IGljb24gICAgOiAnZmEtaW5mby1jaXJjbGUnLAotICAgICAgICAgICAgICAgIHRpdGxlICAgOiAo IXRoaXMud29ya2Zsb3cgJiYgJ1JlcXVpcmVtZW50cycpIHx8IG51bGwsCisgICAgICAgICAgICAg ICAgdGl0bGUgICA6ICghb3B0aW9ucy5jb21wYWN0ICYmICdSZXF1aXJlbWVudHMnKSB8fCBudWxs LAogICAgICAgICAgICAgICAgIHRvb2x0aXAgOiAnRGlzcGxheSB0b29sIHJlcXVpcmVtZW50cycs CiAgICAgICAgICAgICAgICAgb25jbGljayA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg ICAgICBpZiAoIXRoaXMudmlzaWJsZSkgewpAQCAtMTczLDcgKzIwMCw3IEBACiAgICAgICAgICAg ICAvLyBidXR0b24gZm9yIHZlcnNpb24gc2VsZWN0aW9uCiAgICAgICAgICAgICB2YXIgdmVyc2lv bnNfYnV0dG9uID0zRCBuZXcgVWkuQnV0dG9uTWVudSh7CiAgICAgICAgICAgICAgICAgaWNvbiAg ICA6ICdmYS1jdWJlcycsCi0gICAgICAgICAgICAgICAgdGl0bGUgICA6ICghdGhpcy53b3JrZmxv dyAmJiAnVmVyc2lvbnMnKSB8fCBudWxsLAorICAgICAgICAgICAgICAgIHRpdGxlICAgOiAoIW9w dGlvbnMuY29tcGFjdCAmJiAnVmVyc2lvbnMnKSB8fCBudWxsLAogICAgICAgICAgICAgICAgIHRv b2x0aXAgOiAnU2VsZWN0IGFub3RoZXIgdG9vbCB2ZXJzaW9uJwogICAgICAgICAgICAgfSk7CiAg ICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9ucyAmJiBvcHRpb25zLnZlcnNpb25zLmxlbmd0 aCA+IDEpIHsKQEAgLTIwMyw3ICsyMzAsNyBAQAogICAgICAgICAgICAgLy8gYnV0dG9uIG1lbnUK ICAgICAgICAgICAgIHZhciBtZW51X2J1dHRvbiA9M0QgbmV3IFVpLkJ1dHRvbk1lbnUoewogICAg ICAgICAgICAgICAgIGljb24gICAgOiAnZmEtY2FyZXQtZG93bicsCi0gICAgICAgICAgICAgICAg dGl0bGUgICA6ICghdGhpcy53b3JrZmxvdyAmJiAnT3B0aW9ucycpIHx8IG51bGwsCisgICAgICAg ICAgICAgICAgdGl0bGUgICA6ICghb3B0aW9ucy5jb21wYWN0ICYmICdPcHRpb25zJykgfHwgbnVs bCwKICAgICAgICAgICAgICAgICB0b29sdGlwIDogJ1ZpZXcgYXZhaWxhYmxlIG9wdGlvbnMnCiAg ICAgICAgICAgICB9KTsKICAgICAgICAgICAgPTIwCkBAIC0yODAsNyArMzA3LDcgQEAKICAgICAg ICAgICAgIH0pOwogICAgICAgICAgICA9MjAKICAgICAgICAgICAgIC8vIHJlbW92ZSBwYWRkaW5n Ci0gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLndvcmtmbG93KSB7CisgICAgICAgICAgICBp ZiAob3B0aW9ucy5jb21wYWN0KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5wb3J0bGV0LiRjb250 ZW50LmNzcygncGFkZGluZycsICcwcHgnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgPTIw CgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFlMzEzZDMyZTZjZGQgLXIgMGY3 Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZmIHN0YXRpYy9zY3JpcHRzL212 Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL212Yy90 b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL212Yy90b29s cy90b29scy1mb3JtLXdvcmtmbG93LmpzCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICAgICAgICAg IHZhciBwcm9jZXNzX2lkID0zRCB0aGlzLmRlZmVycmVkLnJlZ2lzdGVyKCk7Cj0yMAogICAgICAg ICAgICAgLy8gYnVpbGQgbW9kZWwgdXJsIGZvciByZXF1ZXN0Ci0gICAgICAgICAgICB2YXIgbW9k ZWxfdXJsID0zRCBnYWxheHlfY29uZmlnLnJvb3QgKyAnd29ya2Zsb3cvZWRpdG9yX2Zvcm1fcD0K b3N0P3Rvb2xfaWQ9M0QnICsgdGhpcy5vcHRpb25zLmlkOworICAgICAgICAgICAgdmFyIG1vZGVs X3VybCA9M0QgZ2FsYXh5X2NvbmZpZy5yb290ICsgJ3dvcmtmbG93L2VkaXRvcl9mb3JtX3A9Cm9z dD90b29sX2lkPTNEJyArIHRoaXMub3B0aW9ucy5pZCArICcmX19pc19keW5hbWljX189M0RGYWxz ZSc7CiAgICAgICAgICAgID0yMAogICAgICAgICAgICAgLy8gcG9zdCBqb2IKICAgICAgICAgICAg IFV0aWxzLnJlcXVlc3QoewpAQCAtMjgyLDcgKzI4MiwxMCBAQAogICAgICAgICAgICAgICAgIHN1 Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBu b2RlIGluIHdvcmtmbG93IG1vZHVsZQogICAgICAgICAgICAgICAgICAgICBzZWxmLm5vZGUudXBk YXRlX2ZpZWxkX2RhdGEoZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgPTIwCisKKyAgICAgICAg ICAgICAgICAgICAgLy8gaGlnaGxpZ2h0IGVycm9ycworICAgICAgICAgICAgICAgICAgICBzZWxm Ll9lcnJvcnMoZGF0YSAmJiBkYXRhLnRvb2xfbW9kZWwpOworCiAgICAgICAgICAgICAgICAgICAg IC8vIHByb2Nlc3MgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVmZXJyZWQu ZG9uZShwcm9jZXNzX2lkKTsKICAgICAgICAgICAgPTIwCgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0 OGE5OTI5NTc3MDRlNTFlMzEzZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4 ZjhkYzAyYmEzNjk5NzZmIHN0YXRpYy9zY3JpcHRzL212Yy90b29scy90b29scy1pbnB1dC5qcwot LS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtaW5wdXQuanMKKysrIGIvc3RhdGlj L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWlucHV0LmpzCkBAIC01MSw5ICs1MSwxMSBAQAogICAg ICAgICAvKiogU2V0IGVycm9yIHRleHQKICAgICAgICAgKi8KICAgICAgICAgZXJyb3I6IGZ1bmN0 aW9uKHRleHQpIHsKLSAgICAgICAgICAgIHRoaXMuJGVycm9yX3RleHQuaHRtbCh0ZXh0KTsKLSAg ICAgICAgICAgIHRoaXMuJGVycm9yLmZhZGVJbigpOwotICAgICAgICAgICAgdGhpcy4kZWwuYWRk Q2xhc3MoJ3VpLWVycm9yJyk7CisgICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQuc2tpcCkgewor ICAgICAgICAgICAgICAgIHRoaXMuJGVycm9yX3RleHQuaHRtbCh0ZXh0KTsKKyAgICAgICAgICAg ICAgICB0aGlzLiRlcnJvci5mYWRlSW4oJ2Zhc3QnKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRl bC5hZGRDbGFzcygndWktZXJyb3InKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAg ICA9MjAKICAgICAgICAgLyoqIFJlc2V0IHRoaXMgdmlldwpAQCAtNzAsNiArNzIsNyBAQAogICAg ICAgICAgICAgICAgIHRoaXMuJGZpZWxkLmZhZGVJbignZmFzdCcpOwogICAgICAgICAgICAgICAg IHRoaXMuJHRpdGxlX29wdGlvbmFsLmh0bWwoJ0Rpc2FibGUnKTsKICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgICAgICAgIHRoaXMu JGZpZWxkLmhpZGUoKTsKICAgICAgICAgICAgICAgICB0aGlzLiR0aXRsZV9vcHRpb25hbC5odG1s KCdFbmFibGUnKTsKICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnZhbHVlICYmIHRoaXMuZmll bGQudmFsdWUodGhpcy5kZWZhdWx0dmFsdWUpOwoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTky OTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMw MmJhMzY5OTc2ZiBzdGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcwotLS0g YS9zdGF0aWMvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcworKysgYi9zdGF0aWMv c2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VjdGlvbi5qcwpAQCAtMTAsNTEgKzEwLDUxIEBACiAg ICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGFwcCwgb3B0aW9ucykgewogICAgICAgICAgICAg Ly8gbGluayBhcHAKICAgICAgICAgICAgIHRoaXMuYXBwID0zRCBhcHA7Ci0gICAgICAgICAgID0y MAorCiAgICAgICAgICAgICAvLyBsaW5rIGlucHV0cwogICAgICAgICAgICAgdGhpcy5pbnB1dHMg PTNEIG9wdGlvbnMuaW5wdXRzOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gYWRk IHRhYmxlIGNsYXNzIGZvciB0ciB0YWcKICAgICAgICAgICAgIC8vIHRoaXMgYXNzaXN0IGluIHRy YW5zZm9ybWluZyB0aGUgZm9ybSBpbnRvIGEganNvbiBzdHJ1Y3R1cmUKICAgICAgICAgICAgIG9w dGlvbnMuY2xzX3RyID0zRCAnc2VjdGlvbi1yb3cnOwotICAgICAgICAgICA9MjAKKwogICAgICAg ICAgICAgLy8gY3JlYXRlIHRhYmxlCiAgICAgICAgICAgICB0aGlzLnRhYmxlID0zRCBuZXcgVGFi bGUuVmlldyhvcHRpb25zKTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGNvbmZp Z3VyZSBwb3J0bGV0IGFuZCBmb3JtIHRhYmxlCiAgICAgICAgICAgICB0aGlzLnNldEVsZW1lbnQo dGhpcy50YWJsZS4kZWwpOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gcmVuZGVy IHRvb2wgc2VjdGlvbgogICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgICAgfSwKLSAg ICAgICA9MjAKKwogICAgICAgICAvKiogUmVuZGVyIHNlY3Rpb24gdmlldwogICAgICAgICAqLwog ICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgLy8gcmVzZXQgdGFibGUK ICAgICAgICAgICAgIHRoaXMudGFibGUuZGVsQWxsKCk7Ci0gICAgICAgICAgID0yMAorCiAgICAg ICAgICAgICAvLyBsb2FkIHNldHRpbmdzIGVsZW1lbnRzIGludG8gdGFibGUKICAgICAgICAgICAg IGZvciAodmFyIGkgaW4gdGhpcy5pbnB1dHMpIHsKICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0 aGlzLmlucHV0c1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCi0gICAgICAgPTIwCisK ICAgICAgICAgLyoqIEFkZCBhIG5ldyBpbnB1dCBlbGVtZW50CiAgICAgICAgICovCiAgICAgICAg IGFkZDogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgIC8vIGxpbmsgdGhpcwogICAgICAg ICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAv LyBjbG9uZSBkZWZpbml0aW9uCiAgICAgICAgICAgICB2YXIgaW5wdXRfZGVmID0zRCBqUXVlcnku ZXh0ZW5kKHRydWUsIHt9LCBpbnB1dCk7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAv LyBjcmVhdGUgdW5pcXVlIGlkCiAgICAgICAgICAgICBpbnB1dF9kZWYuaWQgPTNEIGlucHV0Lmlk ID0zRCBVdGlscy51dWlkKCk7Ci0gICA9MjAKKwogICAgICAgICAgICAgLy8gYWRkIHRvIHNlcXVl bnRpYWwgbGlzdCBvZiBpbnB1dHMKICAgICAgICAgICAgIHRoaXMuYXBwLmlucHV0X2xpc3RbaW5w dXRfZGVmLmlkXSA9M0QgaW5wdXRfZGVmOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAg Ly8gaWRlbnRpZnkgZmllbGQgdHlwZQogICAgICAgICAgICAgdmFyIHR5cGUgPTNEIGlucHV0X2Rl Zi50eXBlOwogICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKQEAgLTc1LDM1ICs3NSwzNSBAQAog ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRSb3coaW5wdXRfZGVmKTsKICAgICAgICAgICAg IH0KICAgICAgICAgfSwKLSAgICAgICA9MjAKKwogICAgICAgICAvKiogQWRkIGEgY29uZGl0aW9u YWwgYmxvY2sKICAgICAgICAgKi8KICAgICAgICAgX2FkZENvbmRpdGlvbmFsOiBmdW5jdGlvbihp bnB1dF9kZWYpIHsKICAgICAgICAgICAgIC8vIGxpbmsgdGhpcwogICAgICAgICAgICAgdmFyIHNl bGYgPTNEIHRoaXM7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBjb3B5IGlkZW50 aWZpZXIKICAgICAgICAgICAgIGlucHV0X2RlZi50ZXN0X3BhcmFtLmlkID0zRCBpbnB1dF9kZWYu aWQ7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBidWlsZCB0ZXN0IHBhcmFtZXRl cgogICAgICAgICAgICAgdmFyIGZpZWxkID0zRCB0aGlzLl9hZGRSb3coaW5wdXRfZGVmLnRlc3Rf cGFyYW0pOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gc2V0IG9uY2hhbmdlIGV2 ZW50IGZvciB0ZXN0IHBhcmFtZXRlcgogICAgICAgICAgICAgZmllbGQub3B0aW9ucy5vbmNoYW5n ZSA9M0QgZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgICAvLyBpZGVudGlmeSB0aGUg c2VsZWN0ZWQgY2FzZQogICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZENhc2UgPTNEIHNlbGYu YXBwLnRyZWUubWF0Y2hDYXNlKGlucHV0X2RlZiwgdmE9Cmx1ZSk7Ci0gICAgICAgICAgICAgICA9 MjAKKwogICAgICAgICAgICAgICAgIC8vIGNoZWNrIHZhbHVlIGluIG9yZGVyIHRvIGhpZGUvc2hv dyBvcHRpb25zCiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBpbnB1dF9kZWYuY2FzZXMp IHsKICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNhc2UKICAgICAgICAgICAgICAgICAgICAg dmFyIGNhc2VfZGVmID0zRCBpbnB1dF9kZWYuY2FzZXNbaV07Ci0gICAgICAgICAgICAgICAgICAg PTIwCisKICAgICAgICAgICAgICAgICAgICAgLy8gaWRlbnRpZnkgc3Vic2VjdGlvbiBuYW1lCiAg ICAgICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uX2lkID0zRCBpbnB1dF9kZWYuaWQgKyAnLXNl Y3Rpb24tJyArIGk7Ci0gICAgICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAg ICAgLy8gaWRlbnRpZnkgcm93CiAgICAgICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uX3JvdyA9 M0Qgc2VsZi50YWJsZS5nZXQoc2VjdGlvbl9pZCk7Ci0gICAgICAgICAgICAgICAgICAgPTIwCisK ICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgbm9uLWhpZGRlbiBlbGVtZW50cyBleGlz dAogICAgICAgICAgICAgICAgICAgICB2YXIgbm9uaGlkZGVuID0zRCBmYWxzZTsKICAgICAgICAg ICAgICAgICAgICAgZm9yICh2YXIgaiBpbiBjYXNlX2RlZi5pbnB1dHMpIHsKQEAgLTExMiw3ICsx MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg PTIwCisKICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdy9oaWRlIHN1YiBmb3JtCiAgICAgICAg ICAgICAgICAgICAgIGlmIChpID0zRD0zRCBzZWxlY3RlZENhc2UgJiYgbm9uaGlkZGVuKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX3Jvdy5mYWRlSW4oJ2Zhc3QnKTsKQEAgLTEy MCw3MSArMTIwLDcxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX3Jvdy5oaWRl KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIHJlZnJlc2ggZm9ybSBpbnB1dHMKICAgICAg ICAgICAgICAgICBzZWxmLmFwcC50cmlnZ2VyKCdyZWZyZXNoJyk7CiAgICAgICAgICAgICB9Owot ICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gYWRkIGNvbmRpdGlvbmFsIHN1YiBzZWN0 aW9ucwogICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBpbnB1dF9kZWYuY2FzZXMpIHsKICAgICAg ICAgICAgICAgICAvLyBjcmVhdGUgaWQgdGFnCiAgICAgICAgICAgICAgICAgdmFyIHN1Yl9zZWN0 aW9uX2lkID0zRCBpbnB1dF9kZWYuaWQgKyAnLXNlY3Rpb24tJyArIGk7Ci0gICAgICAgICAgICAg ICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBzdWIgc2VjdGlvbgogICAgICAgICAg ICAgICAgIHZhciBzdWJfc2VjdGlvbiA9M0QgbmV3IFZpZXcodGhpcy5hcHAsIHsKICAgICAgICAg ICAgICAgICAgICAgaW5wdXRzICA6IGlucHV0X2RlZi5jYXNlc1tpXS5pbnB1dHMsCiAgICAgICAg ICAgICAgICAgICAgIGNscyAgICAgOiAndWktdGFibGUtcGxhaW4nCiAgICAgICAgICAgICAgICAg fSk7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGRpc3BsYXlzIGFz IGdyb3VwZWQgc3Vic2VjdGlvbgogICAgICAgICAgICAgICAgIHN1Yl9zZWN0aW9uLiRlbC5hZGRD bGFzcygndWktdGFibGUtZm9ybS1zZWN0aW9uJyk7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAg ICAgICAgICAgICAgIC8vIGNyZWF0ZSB0YWJsZSByb3cKICAgICAgICAgICAgICAgICB0aGlzLnRh YmxlLmFkZChzdWJfc2VjdGlvbi4kZWwpOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAg ICAgICAgICAvLyBhcHBlbmQgdG8gdGFibGUKICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmFw cGVuZChzdWJfc2VjdGlvbl9pZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAorCiAg ICAgICAgICAgICAvLyB0cmlnZ2VyIHJlZnJlc2ggb24gY29uZGl0aW9uYWwgaW5wdXQgZmllbGQg YWZ0ZXIgYWxsIGlucHV0ID0KZWxlbWVudHMgaGF2ZSBiZWVuIGNyZWF0ZWQKICAgICAgICAgICAg IGZpZWxkLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAg ICAgIC8qKiBBZGQgYSByZXBlYXQgYmxvY2sKICAgICAgICAgKi8KICAgICAgICAgX2FkZFJlcGVh dDogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CiAgICAgICAgICAgICAvLyBsaW5rIHRoaXMKICAgICAg ICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAg Ly8gYmxvY2sgaW5kZXgKICAgICAgICAgICAgIHZhciBibG9ja19pbmRleCA9M0QgMDsKLSAgICAg ICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgbmV3 IHJlcGVhdCBibG9ja3MKICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZSAoaW5wdXRzLCBkZWxl dGVhYmxlKSB7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGlkIHRhZwogICAgICAgICAgICAg ICAgIHZhciBzdWJfc2VjdGlvbl9pZCA9M0QgaW5wdXRfZGVmLmlkICsgJy1zZWN0aW9uLScgKyAo YmxvY2s9Cl9pbmRleCsrKTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBl bmFibGUvZGlzYWJsZSByZXBlYXQgZGVsZXRlIGJ1dHRvbgogICAgICAgICAgICAgICAgIHZhciBv bmRlbCA9M0QgbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlYWJsZSkgewogICAgICAg ICAgICAgICAgICAgICBvbmRlbCA9M0QgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBkZWxldGUgcmVwZWF0IGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBl YXQuZGVsKHN1Yl9zZWN0aW9uX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgPTIwCisKICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGl0bGUgcmVwZWF0IGJsb2NrCiAgICAgICAgICAg ICAgICAgICAgICAgICByZXBlYXQucmV0aXRsZShpbnB1dF9kZWYudGl0bGUpOwotICAgICAgICAg ICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBy ZWZyZXNoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcC50cmlnZ2VyKCdyZWZyZXNo Jyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgc3ViIHNlY3Rpb24KICAg ICAgICAgICAgICAgICB2YXIgc3ViX3NlY3Rpb24gPTNEIG5ldyBWaWV3KHNlbGYuYXBwLCB7CiAg ICAgICAgICAgICAgICAgICAgIGlucHV0cyAgOiBpbnB1dHMsCiAgICAgICAgICAgICAgICAgICAg IGNscyAgICAgOiAndWktdGFibGUtcGxhaW4nCiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg ICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGFkZCB0YWIKICAgICAgICAgICAgICAg ICByZXBlYXQuYWRkKHsKICAgICAgICAgICAgICAgICAgICAgaWQgICAgICA6IHN1Yl9zZWN0aW9u X2lkLApAQCAtMTkyLDExICsxOTIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgJGVsICAgICA6 IHN1Yl9zZWN0aW9uLiRlbCwKICAgICAgICAgICAgICAgICAgICAgb25kZWwgICA6IG9uZGVsCiAg ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAg IC8vIHJldGl0bGUgcmVwZWF0IGJsb2NrCiAgICAgICAgICAgICAgICAgcmVwZWF0LnJldGl0bGUo aW5wdXRfZGVmLnRpdGxlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgPTIwCisKICAgICAg ICAgICAgIC8vCiAgICAgICAgICAgICAvLyBjcmVhdGUgcmVwZWF0IGJsb2NrIGVsZW1lbnQKICAg ICAgICAgICAgIC8vCkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5hcHAudHJpZ2dlcigncmVmcmVzaCcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg IH0pOwotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIGFk ZCBwYXJzZWQvbWluaW11bSBudW1iZXIgb2YgcmVwZWF0IGJsb2NrcwogICAgICAgICAgICAgLy8K QEAgLTIyNSwyOCArMjI1LDI4IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgaW5wdXRzID0zRCBpbnB1dF9kZWYuaW5wdXRzOwogICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHJlcGVh dCBibG9jawogICAgICAgICAgICAgICAgIGNyZWF0ZShpbnB1dHMsIGkgPj0zRCBuX21pbik7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBjcmVhdGUgaW5w dXQgZmllbGQgd3JhcHBlcgogICAgICAgICAgICAgdmFyIGlucHV0X2VsZW1lbnQgPTNEIG5ldyBJ bnB1dEVsZW1lbnQodGhpcy5hcHAsIHsKICAgICAgICAgICAgICAgICBsYWJlbCAgIDogaW5wdXRf ZGVmLnRpdGxlLAogICAgICAgICAgICAgICAgIGhlbHAgICAgOiBpbnB1dF9kZWYuaGVscCwKICAg ICAgICAgICAgICAgICBmaWVsZCAgIDogcmVwZWF0CiAgICAgICAgICAgICB9KTsKLSAgICAgICAg ICAgPTIwCisKICAgICAgICAgICAgIC8vIGRpc3BsYXlzIGFzIGdyb3VwZWQgc3Vic2VjdGlvbgog ICAgICAgICAgICAgaW5wdXRfZWxlbWVudC4kZWwuYWRkQ2xhc3MoJ3VpLXRhYmxlLWZvcm0tc2Vj dGlvbicpOwotICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGNyZWF0ZSB0YWJs ZSByb3cKICAgICAgICAgICAgIHRoaXMudGFibGUuYWRkKGlucHV0X2VsZW1lbnQuJGVsKTsKLSAg ICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGFwcGVuZCByb3cgdG8gdGFibGUKICAgICAg ICAgICAgIHRoaXMudGFibGUuYXBwZW5kKGlucHV0X2RlZi5pZCk7CiAgICAgICAgIH0sCi0gICAg ICAgPTIwCisKICAgICAgICAgLyoqIEFkZCBhIGN1c3RvbWl6ZWQgc2VjdGlvbgogICAgICAgICAq LwogICAgICAgICBfYWRkU2VjdGlvbjogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CkBAIC0yNTgsMTQg KzI1OCwxNCBAQAogICAgICAgICAgICAgICAgIGlucHV0cyAgOiBpbnB1dF9kZWYuaW5wdXRzLAog ICAgICAgICAgICAgICAgIGNscyAgICAgOiAndWktdGFibGUtcGxhaW4nCiAgICAgICAgICAgICB9 KTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGRlbGV0ZSBidXR0b24KICAgICAg ICAgICAgIHZhciBidXR0b25fdmlzaWJsZSA9M0QgbmV3IFVpLkJ1dHRvbkljb24oewogICAgICAg ICAgICAgICAgIGljb24gICAgOiAnZmEtZXllLXNsYXNoJywKICAgICAgICAgICAgICAgICB0b29s dGlwIDogJ1Nob3cvaGlkZSBzZWN0aW9uJywKICAgICAgICAgICAgICAgICBjbHMgICAgIDogJ3Vp LWJ1dHRvbi1pY29uLXBsYWluJwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgID0yMAorCiAg ICAgICAgICAgICAvLyBjcmVhdGUgcG9ydGxldCBmb3Igc3ViIHNlY3Rpb24KICAgICAgICAgICAg IHZhciBwb3J0bGV0ID0zRCBuZXcgUG9ydGxldC5WaWV3KHsKICAgICAgICAgICAgICAgICB0aXRs ZSAgICAgICA6IGlucHV0X2RlZi5sYWJlbCwKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcG9ydGxldC5hcHBlbmQoc3Vi X3NlY3Rpb24uJGVsKTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGFkZCBldmVu dCBoYW5kbGVyIHZpc2liaWxpdHkgYnV0dG9uCiAgICAgICAgICAgICB2YXIgdmlzaWJsZSA9M0Qg ZmFsc2U7CiAgICAgICAgICAgICBwb3J0bGV0LiRjb250ZW50LmhpZGUoKTsKQEAgLTI5MSwxMiAr MjkxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbl92aXNpYmxlLnNldEljb24oJ2Zh LWV5ZScpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwotICAgICAgICAgICA9 MjAKKwogICAgICAgICAgICAgLy8gc2hvdyBzdWIgc2VjdGlvbiBpZiByZXF1ZXN0ZWQKICAgICAg ICAgICAgIGlmIChpbnB1dF9kZWYuZXhwYW5kKSB7CiAgICAgICAgICAgICAgICAgcG9ydGxldC4k aGVhZGVyLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgID0yMAor CiAgICAgICAgICAgICAvLyBjcmVhdGUgdGFibGUgcm93CiAgICAgICAgICAgICB0aGlzLnRhYmxl LmFkZChwb3J0bGV0LiRlbCk7Cj0yMApAQCAtMzEyLDEwICszMTIsMTAgQEAKPTIwCiAgICAgICAg ICAgICAvLyBjcmVhdGUgaW5wdXQgZmllbGQKICAgICAgICAgICAgIHZhciBmaWVsZCA9M0QgdGhp cy5fY3JlYXRlRmllbGQoaW5wdXRfZGVmKTsKLSAgICAgICAgICAgPTIwCisKICAgICAgICAgICAg IC8vIGFkZCB0byBmaWVsZCBsaXN0CiAgICAgICAgICAgICB0aGlzLmFwcC5maWVsZF9saXN0W2lk XSA9M0QgZmllbGQ7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBjcmVhdGUgaW5w dXQgZmllbGQgd3JhcHBlcgogICAgICAgICAgICAgdmFyIGlucHV0X2VsZW1lbnQgPTNEIG5ldyBJ bnB1dEVsZW1lbnQodGhpcy5hcHAsIHsKICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICAgICAg OiBpbnB1dF9kZWYubGFiZWwsCkBAIC0zMjQsNjkgKzMyNCw2OSBAQAogICAgICAgICAgICAgICAg IGhlbHAgICAgICAgICAgICA6IGlucHV0X2RlZi5oZWxwLAogICAgICAgICAgICAgICAgIGZpZWxk ICAgICAgICAgICA6IGZpZWxkCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgPTIwCisKICAg ICAgICAgICAgIC8vIGFkZCB0byBlbGVtZW50IGxpc3QKICAgICAgICAgICAgIHRoaXMuYXBwLmVs ZW1lbnRfbGlzdFtpZF0gPTNEIGlucHV0X2VsZW1lbnQ7Ci0gICAgICAgICAgICAgID0yMAorCiAg ICAgICAgICAgICAvLyBjcmVhdGUgdGFibGUgcm93CiAgICAgICAgICAgICB0aGlzLnRhYmxlLmFk ZChpbnB1dF9lbGVtZW50LiRlbCk7Ci0gICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBh cHBlbmQgdG8gdGFibGUKICAgICAgICAgICAgIHRoaXMudGFibGUuYXBwZW5kKGlkKTsKLSAgICAg ICAgICAgPTIwCisKICAgICAgICAgICAgIC8vIGhpZGUgcm93IGlmIG5lY2Nlc3NhcnkKICAgICAg ICAgICAgIGlmIChpbnB1dF9kZWYuaGlkZGVuKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50YWJs ZS5nZXQoaWQpLmhpZGUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgPTIwCisKICAgICAg ICAgICAgIC8vIHJldHVybiBjcmVhdGVkIGZpZWxkCiAgICAgICAgICAgICByZXR1cm4gZmllbGQ7 CiAgICAgICAgIH0sCi0gICAgICAgPTIwCisKICAgICAgICAgLyoqIFJldHVybnMgYW4gaW5wdXQg ZmllbGQgZm9yIGEgZ2l2ZW4gZmllbGQgdHlwZQogICAgICAgICAqLwogICAgICAgICBfY3JlYXRl RmllbGQ6IGZ1bmN0aW9uKGlucHV0X2RlZikgewogICAgICAgICAgICAgLy8gZmllbGQgd3JhcHBl cgogICAgICAgICAgICAgdmFyIGZpZWxkID0zRCBudWxsOwotICAgICAgICAgICA9MjAKKwogICAg ICAgICAgICAgLy8gaWRlbnRpZnkgZmllbGQgdHlwZQogICAgICAgICAgICAgc3dpdGNoKGlucHV0 X2RlZi50eXBlKSB7CiAgICAgICAgICAgICAgICAgLy8gdGV4dCBpbnB1dCBmaWVsZAogICAgICAg ICAgICAgICAgIGNhc2UgJ3RleHQnIDoKICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRo aXMuX2ZpZWxkVGV4dChpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBmaWVsZAog ICAgICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCcgOgogICAgICAgICAgICAgICAgICAgICBmaWVs ZCA9M0QgdGhpcy5fZmllbGRTZWxlY3QoaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgPTIwCisKICAgICAgICAgICAgICAgICAvLyBkYXRh IHNlbGVjdG9yCiAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YSc6CiAgICAgICAgICAgICAgICAg ICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZERhdGEoaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGNv bGxlY3Rpb24gc2VsZWN0b3IKICAgICAgICAgICAgICAgICBjYXNlICdkYXRhX2NvbGxlY3Rpb24n OgogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmllbGREYXRhKGlucHV0X2Rl Zik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgID0yMAor CiAgICAgICAgICAgICAgICAgLy8gZGF0YSBjb2x1bW4KICAgICAgICAgICAgICAgICBjYXNlICdk YXRhX2NvbHVtbic6CiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RlZi5lcnJvcl90ZXh0ID0z RCAnTWlzc2luZyBjb2x1bW5zIGluIHJlZmVyZW5jZT0KZCBkYXRhc2V0Lic7CiAgICAgICAgICAg ICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZFNlbGVjdChpbnB1dF9kZWYpOwogICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAg ICAgICAgIC8vIGhpZGRlbiBmaWVsZAogICAgICAgICAgICAgICAgIGNhc2UgJ2hpZGRlbic6CiAg ICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZEhpZGRlbihpbnB1dF9kZWYp OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgID0yMAorCiAgICAg ICAgICAgICAgICAgLy8gaGlkZGVuIGRhdGEgZmllbGQKICAgICAgICAgICAgICAgICBjYXNlICdo aWRkZW5fZGF0YSc6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZEhp ZGRlbihpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBmaWVsZAogICAgICAgICAgICAg ICAgIGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5f ZmllbGRTbGlkZXIoaW5wdXRfZGVmKTsKQEAgLTM5NiwzMyArMzk2LDMzIEBACiAgICAgICAgICAg ICAgICAgY2FzZSAnZmxvYXQnOgogICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5f ZmllbGRTbGlkZXIoaW5wdXRfZGVmKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8g Ym9vbGVhbiBmaWVsZAogICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAg ICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmllbGRCb29sZWFuKGlucHV0X2RlZik7CiAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAg ICAgICAgICAgLy8gZ2Vub21lIGZpZWxkCiAgICAgICAgICAgICAgICAgY2FzZSAnZ2Vub21lYnVp bGQnOgogICAgICAgICAgICAgICAgICAgICBpbnB1dF9kZWYuc2VhcmNoYWJsZSA9M0QgdHJ1ZTsK ICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRoaXMuX2ZpZWxkU2VsZWN0KGlucHV0X2Rl Zik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgPTIwCisKICAg ICAgICAgICAgICAgICAvLyBkcmlsbCBkb3duIGZpZWxkCiAgICAgICAgICAgICAgICAgY2FzZSAn ZHJpbGxfZG93bic6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0zRCB0aGlzLl9maWVsZERy aWxsZG93bihpbnB1dF9kZWYpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgLy8gYmFzZSB1cmwgZmllbGQKICAgICAgICAg ICAgICAgICBjYXNlICdiYXNldXJsJzoKICAgICAgICAgICAgICAgICAgICAgZmllbGQgPTNEIHRo aXMuX2ZpZWxkSGlkZGVuKGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgICAgIC8vIGZpZWxkIG5v dCBmb3VuZAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIC8v IGZsYWcKICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuaW5jb21wYXRpYmxlID0zRCB0cnVl OwotICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGgg b3Igd2l0aG91dCBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dF9kZWYub3B0 aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIHNlbGVjdCBmaWVsZApA QCAtNDMxLDI2ICs0MzEsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbiB0 ZXh0IGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9M0QgdGhpcy5fZmllbGRU ZXh0KGlucHV0X2RlZik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICA9MjAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb2cKICAgICAgICAgICAgICAgICAgICAg Y29uc29sZS5kZWJ1ZygndG9vbHMtZm9ybTo6X2FkZFJvdygpIDogQXV0byBtYXRjaGVkIGZpPQpl bGQgdHlwZSAoJyArIGlucHV0X2RlZi50eXBlICsgJykuJyk7CiAgICAgICAgICAgICB9Ci0gICAg ICAgICAgID0yMAorCiAgICAgICAgICAgICAvLyBzZXQgZmllbGQgdmFsdWUKICAgICAgICAgICAg IGlmIChpbnB1dF9kZWYudmFsdWUgIT0zRD0zRCB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAg ICBmaWVsZC52YWx1ZShpbnB1dF9kZWYudmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAg ICA9MjAKKwogICAgICAgICAgICAgLy8gcmV0dXJuIGZpZWxkIGVsZW1lbnQKICAgICAgICAgICAg IHJldHVybiBmaWVsZDsKICAgICAgICAgfSwKLSAgICAgICA9MjAKKwogICAgICAgICAvKiogRGF0 YSBpbnB1dCBmaWVsZAogICAgICAgICAqLwogICAgICAgICBfZmllbGREYXRhIDogZnVuY3Rpb24o aW5wdXRfZGVmKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5hcHAud29ya2Zsb3cpIHsKLSAgICAg ICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9M0QgVXRpbHMudGV4dGlmeShpbnB1dF9kZWYuZXh0 ZW5zaW9ucy50b1N0PQpyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlucHV0X2RlZi5pbmZvID0z RCAnRGF0YSBpbnB1dCBcJycgKyBpbnB1dF9kZWYubmFtZSArICdcJyA9CignICsgZXh0ZW5zaW9u cyArICcpJzsKKyAgICAgICAgICAgIGlmICghdGhpcy5hcHAub3B0aW9ucy5pc19keW5hbWljKSB7 CisgICAgICAgICAgICAgICAgaW5wdXRfZGVmLmluZm8gPTNEICdEYXRhIGlucHV0IFwnJyArIGlu cHV0X2RlZi5uYW1lICsgJ1wnID0KKCcgKyBVdGlscy50ZXh0aWZ5KGlucHV0X2RlZi5leHRlbnNp b25zLnRvU3RyaW5nKCkpICsgJyknOworICAgICAgICAgICAgICAgIGlucHV0X2RlZi52YWx1ZSA9 M0QgbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRIaWRkZW4oaW5wdXRf ZGVmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciBzZWxmID0zRCB0aGlzOwpAQCAt NDY1LDE4ICs0NjUsMTUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAg ICAgICAgfSwKLSAgICAgICA9MjAKKwogICAgICAgICAvKiogU2VsZWN0L0NoZWNrYm94L1JhZGlv IG9wdGlvbnMgZmllbGQKICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkU2VsZWN0IDogZnVuY3Rp b24gKGlucHV0X2RlZikgewotICAgICAgICAgICAgLy8gc2hvdyB0ZXh0IGZpZWxkIGluIHdvcmtm bG93Ci0gICAgICAgICAgICBpZiAodGhpcy5hcHAud29ya2Zsb3cgJiYgaW5wdXRfZGVmLmlzX2R5 bmFtaWMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLnZhbGlkYXRlKGlucHV0X2RlZi52 YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGVmLnZhbHVlID0zRCAnJzsKLSAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBzaG93IHRleHQgZmllbGQgaW4gaWYgZHlu YW1pYyBmaWVsZHMgYXJlIGRpc2FibGVkIGUuZy4gaW4gdz0Kb3JrZmxvdyBlZGl0b3IKKyAgICAg ICAgICAgIGlmICghdGhpcy5hcHAub3B0aW9ucy5pc19keW5hbWljICYmIGlucHV0X2RlZi5pc19k eW5hbWljKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVGV4dChpbnB1dF9k ZWYpOwogICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAgLy8gY29u ZmlndXJlIG9wdGlvbnMgZmllbGRzCiAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9M0QgW107CiAg ICAgICAgICAgICBmb3IgKHZhciBpIGluIGlucHV0X2RlZi5vcHRpb25zKSB7CkBAIC00ODYsNyAr NDgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvblsxXQogICAgICAgICAg ICAgICAgIH0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICA9MjAKKwogICAgICAgICAgICAg Ly8gaWRlbnRpZnkgZGlzcGxheSB0eXBlCiAgICAgICAgICAgICB2YXIgU2VsZWN0Q2xhc3MgPTNE IFVpLlNlbGVjdDsKICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRfZGVmLmRpc3BsYXkpIHsKQEAg LTQ5Nyw3ICs0OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBTZWxlY3RDbGFzcyA9M0QgVWku UmFkaW87CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg ICAgICA9MjAKKwogICAgICAgICAgICAgLy8gc2VsZWN0IGZpZWxkCiAgICAgICAgICAgICB2YXIg c2VsZiA9M0QgdGhpczsKICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0Q2xhc3MuVmlldyh7 CkBAIC01MTEsMTAgKzUwOCwxNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0p OwogICAgICAgICB9LAotICAgICAgID0yMAorCiAgICAgICAgIC8qKiBEcmlsbCBkb3duIG9wdGlv bnMgZmllbGQKICAgICAgICAgKi8KICAgICAgICAgX2ZpZWxkRHJpbGxkb3duIDogZnVuY3Rpb24g KGlucHV0X2RlZikgeworICAgICAgICAgICAgLy8gc2hvdyB0ZXh0IGZpZWxkIGluIGlmIGR5bmFt aWMgZmllbGRzIGFyZSBkaXNhYmxlZCBlLmcuIGluIHc9Cm9ya2Zsb3cgZWRpdG9yCisgICAgICAg ICAgICBpZiAoIXRoaXMuYXBwLm9wdGlvbnMuaXNfZHluYW1pYyAmJiBpbnB1dF9kZWYuaXNfZHlu YW1pYykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWVsZFRleHQoaW5wdXRfZGVm KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBjcmVhdGUg ZHJpbGwgZG93biBmaWVsZAogICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAgICAg ICAgICByZXR1cm4gbmV3IFVpLkRyaWxsZG93bi5WaWV3KHsKICAgICAgICAgICAgICAgICBpZCAg ICAgICAgICA6ICdmaWVsZC0nICsgaW5wdXRfZGVmLmlkLApAQCAtNTI5LDYgKzUzMiwyNyBAQAog ICAgICAgICAvKiogVGV4dCBpbnB1dCBmaWVsZAogICAgICAgICAqLwogICAgICAgICBfZmllbGRU ZXh0IDogZnVuY3Rpb24oaW5wdXRfZGVmKSB7CisgICAgICAgICAgICAvLyBmaWVsZCByZXBsYWNl cyBlLmcuIGEgc2VsZWN0IGZpZWxkCisgICAgICAgICAgICBpZiAoaW5wdXRfZGVmLm9wdGlvbnMp IHsKKyAgICAgICAgICAgICAgICAvLyBzaG93IHRleHQgYXJlYSBpZiBzZWxlY3RpbmcgbXVsdGlw bGUgZW50cmllcyBpcyBhbGxvd2VkCisgICAgICAgICAgICAgICAgaW5wdXRfZGVmLmFyZWEgPTNE IGlucHV0X2RlZi5tdWx0aXBsZTsKKworICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIHZhbHVl CisgICAgICAgICAgICAgICAgaWYgKCFVdGlscy52YWxpZGF0ZShpbnB1dF9kZWYudmFsdWUpKSB7 CisgICAgICAgICAgICAgICAgICAgIGlucHV0X2RlZi52YWx1ZSA9M0QgJyc7CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0X2RlZi52YWx1ZSBp bnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kZWYudmFs dWUgPTNEIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kZWYudmFsdWUgPTNEIFN0cmluZyhpbnB1dF9k ZWYudmFsdWUpLnJlcGxhYz0KZSgvW1xbXF0nIlxzXS9nLCAnJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoaW5wdXRfZGVmLm11bHRpcGxlKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfZGVmLnZhbHVlID0zRCBpbnB1dF9kZWYudmFsdWUucmVwbGFjZSgvLD0KL2cs ICdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjcmVh dGUgaW5wdXQgZWxlbWVudAogICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CiAgICAgICAg ICAgICByZXR1cm4gbmV3IFVpLklucHV0KHsKICAgICAgICAgICAgICAgICBpZCAgICAgICAgICA6 ICdmaWVsZC0nICsgaW5wdXRfZGVmLmlkLApAQCAtNTM4LDcgKzU2Miw3IEBACiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgPTIwCisKICAgICAg ICAgLyoqIFNsaWRlciBmaWVsZAogICAgICAgICAqLwogICAgICAgICBfZmllbGRTbGlkZXI6IGZ1 bmN0aW9uKGlucHV0X2RlZikgewpAQCAtNTUzLDcgKzU3Nyw3IEBACiAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCi0gICAgICAgPTIwCisKICAgICAgICAgLyoq IEhpZGRlbiBmaWVsZAogICAgICAgICAqLwogICAgICAgICBfZmllbGRIaWRkZW4gOiBmdW5jdGlv bihpbnB1dF9kZWYpIHsKQEAgLTU2Miw3ICs1ODYsNyBAQAogICAgICAgICAgICAgICAgIGluZm8g ICAgICAgIDogaW5wdXRfZGVmLmluZm8KICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAotICAg ICAgID0yMAorCiAgICAgICAgIC8qKiBCb29sZWFuIGZpZWxkCiAgICAgICAgICovCiAgICAgICAg IF9maWVsZEJvb2xlYW4gOiBmdW5jdGlvbihpbnB1dF9kZWYpIHsKCmRpZmYgLXIgOGE3MDQ1Nzky YzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4 YT0KYjhmOGRjMDJiYTM2OTk3NmYgc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUu anMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKKysrIGIvc3Rh dGljL3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXRyZWUuanMKQEAgLTEyMywxNCArMTIzLDE0IEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9MjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxl IHNpbXBsZSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxk LnNraXAgfHwgc2VsZi5hcHAud29ya2Zsb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFmaWVsZC5za2lwIHx8IHNlbGYuYXBwLm9wdGlvbnMuc2VuZF9hPQpsbCkgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRlICYm ICFmaWVsZC52YWxpZGF0ZSg9CikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZSA9M0QgbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pZ25v cmUgPTNEPTNEPTNEIHVuZGVmaW5lZCB8PQp8ICh2YWx1ZSAhPTNEPTNEIG51bGwgJiYgaW5wdXQu aWdub3JlICE9M0QgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gYWRkIHZhbHVlIHRvIHN1Ym1pc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhZGQgKGpvYl9pbnB1dF9pZCwgaW5wdXQuaWQsIHZhbHVlPQopOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0yMAorCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gYWRkIHBheWxvYWQgdG8gc3VibWlzc2lvbgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5wYXlsb2FkKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBfaWQgaW4g aW5wdXQucGF5bG9hZD0KKSB7CgpkaWZmIC1yIDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFl MzEzZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdmNWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZm IHN0YXRpYy9zY3JpcHRzL212Yy91cGxvYWQvdXBsb2FkLXZpZXcuanMKLS0tIGEvc3RhdGljL3Nj cmlwdHMvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMv dXBsb2FkL3VwbG9hZC12aWV3LmpzCkBAIC0zMzUsOCArMzM1LDggQEAKICAgICAgICAgdG9vbF9p bnB1dFsnZGJrZXknXSA9M0QgZ2Vub21lOwogICAgICAgICB0b29sX2lucHV0WydmaWxlX3R5cGUn XSA9M0QgZXh0ZW5zaW9uOwogICAgICAgICB0b29sX2lucHV0WydmaWxlc18wfHR5cGUnXSA9M0Qg J3VwbG9hZF9kYXRhc2V0JzsKLSAgICAgICAgdG9vbF9pbnB1dFsnc3BhY2VfdG9fdGFicyddID0z RCBzcGFjZV90b190YWJzOwotICAgICAgICB0b29sX2lucHV0Wyd0b19wb3NpeF9saW5lcyddID0z RCB0b19wb3NpeF9saW5lczsKKyAgICAgICAgdG9vbF9pbnB1dFsnZmlsZXNfMHxzcGFjZV90b190 YWInXSA9M0Qgc3BhY2VfdG9fdGFicyAmJiAnWWVzJyB8fCBuPQp1bGw7CisgICAgICAgIHRvb2xf aW5wdXRbJ2ZpbGVzXzB8dG9fcG9zaXhfbGluZXMnXSA9M0QgdG9fcG9zaXhfbGluZXMgJiYgJ1ll cycgfD0KfCBudWxsOwogICAgICAgID0yMAogICAgICAgICAvLyBzZXR1cCBkYXRhCiAgICAgICAg IGRhdGEgPTNEIHt9OwoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2Qz MmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2ZiBzdGF0 aWMvc2NyaXB0cy9wYWNrZWQvZ2FsYXh5Lm1hc3RoZWFkLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRz L3BhY2tlZC9nYWxheHkubWFzdGhlYWQuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL2dh bGF4eS5tYXN0aGVhZC5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbXSxmdW5jdGlvbigpe3Zh ciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2VsX21hc3RoZWFkOiIjZXZlcnl0aGluPQpnIixv cHRpb25zOm51bGwsJGJhY2tncm91bmQ6bnVsbCxsaXN0OltdLGluaXRpYWxpemU6ZnVuY3Rpb24o ZSl7dGhpcy5vcHRpb249CnM9M0RlOyQoImJvZHkiKS5vZmYoKTt0aGlzLnNldEVsZW1lbnQoJCh0 aGlzLl90ZW1wbGF0ZShlKSkpOyQodGhpcy5lbF9tYXN0aD0KZWFkKS5hcHBlbmQoJCh0aGlzLmVs KSk7dGhpcy4kYmFja2dyb3VuZD0zRCQodGhpcy5lbCkuZmluZCgiI21hc3RoZWFkLWJhY2tnPQpy b3VuZCIpO3ZhciBkPTNEdGhpczskKHdpbmRvdykub24oImJlZm9yZXVubG9hZCIsZnVuY3Rpb24o KXt2YXIgZz0zRCIiO2Zvcig9CmtleSBpbiBkLmxpc3Qpe2lmKGQubGlzdFtrZXldLm9wdGlvbnMu b251bmxvYWQpe3ZhciBmPTNEZC5saXN0W2tleV0ub3B0aW9ucz0KLm9udW5sb2FkKCk7aWYoZil7 Zys9M0RmKyIgIn19fWlmKGchPTNEIiIpe3JldHVybiBnfX0pfSxldmVudHM6e2NsaWNrOiJfY2xp PQpjayIsbW91c2Vkb3duOmZ1bmN0aW9uKGQpe2QucHJldmVudERlZmF1bHQoKX19LGFwcGVuZDpm dW5jdGlvbihkKXtyZXR1cm4gdGg9CmlzLl9hZGQoZCx0cnVlKX0scHJlcGVuZDpmdW5jdGlvbihk KXtyZXR1cm4gdGhpcy5fYWRkKGQsZmFsc2UpfSxoaWdobGlnaHQ6Zj0KdW5jdGlvbihlKXt2YXIg ZD0zRCQodGhpcy5lbCkuZmluZCgiIyIrZSsiPiBsaSIpO2lmKGQpe2QuYWRkQ2xhc3MoImFjdGl2 ZSIpPQp9fSxfYWRkOmZ1bmN0aW9uKGcsZSl7dmFyIGQ9M0QkKHRoaXMuZWwpLmZpbmQoIiMiK2cu bG9jYXRpb24pO2lmKGQpe3ZhciBmPQo9M0QkKGcuZWwpO2YuYWRkQ2xhc3MoIm1hc3RoZWFkLWl0 ZW0iKTtpZihlKXtkLmFwcGVuZChmKX1lbHNle2QucHJlcGVuZChmKX09CnRoaXMubGlzdC5wdXNo KGcpfXJldHVybiBudWxsfSxfY2xpY2s6ZnVuY3Rpb24oZyl7dmFyIGY9M0QkKHRoaXMuZWwpLmZp bmQoIj0KLnBvcHVwIik7aWYoZil7Zi5oaWRlKCl9dmFyIGQ9M0QkKGcudGFyZ2V0KS5jbG9zZXN0 KCIubWFzdGhlYWQtaXRlbSIpLmZpbmQoPQoiLnBvcHVwIik7aWYoJChnLnRhcmdldCkuaGFzQ2xh c3MoImhlYWQiKSl7ZC5zaG93KCk7dGhpcy4kYmFja2dyb3VuZC5zaG93KCk9Cn1lbHNle3RoaXMu JGJhY2tncm91bmQuaGlkZSgpfX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGQpe3ZhciBlPTNEZC5icmFu ZD8oIi8gIj0KK2QuYnJhbmQpOiIiO3JldHVybic8ZGl2PjxkaXYgaWQ9M0QibWFzdGhlYWQiIGNs YXNzPTNEIm5hdmJhciBuYXZiYXItZml4ZWQtPQp0b3AgbmF2YmFyLWludmVyc2UiPjxkaXYgc3R5 bGU9M0QicG9zaXRpb246IHJlbGF0aXZlOyByaWdodDogLTUwJTsgZmxvYXQ6IGw9CmVmdDsiPjxk aXYgaWQ9M0QibmF2YmFyIiBzdHlsZT0zRCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IHJlbGF0 aXZlOyByaWdodD0KOiA1MCU7Ij48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPTNEIm5hdmJhci1icmFu ZCI+PGEgaHJlZj0zRCInK2QubG9nb191cmwrJyI+PQo8aW1nIGJvcmRlcj0zRCIwIiBzcmM9M0Qi JytnYWxheHlfY29uZmlnLnJvb3QrJ3N0YXRpYy9pbWFnZXMvZ2FsYXh5SWNvbl9ub1Q9CmV4dC5w bmciPjxzcGFuIGlkPTNEImJyYW5kIj4gR2FsYXh5ICcrZSsnPC9zcGFuPjwvYT48L2Rpdj48ZGl2 IGNsYXNzPTNEInF1bz0KdGEtbWV0ZXItY29udGFpbmVyIj48L2Rpdj48ZGl2IGlkPTNEImljb25i YXIiIGNsYXNzPTNEImljb25iYXIiPjwvZGl2PjwvZGl2PQo+PGRpdiBpZD0zRCJtYXN0aGVhZC1i YWNrZ3JvdW5kIiBzdHlsZT0zRCJkaXNwbGF5OiBub25lOyBwb3NpdGlvbjogYWJzb2x1dGU9Cjsg dG9wOiAzM3B4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB6LWluZGV4OiAxMDEwIj48L2Rp dj48L2Rpdj4nfX0pO3Zhcj0KIGI9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7b3B0aW9uczp7aWQ6 IiIsaWNvbjoiZmEtY29nIix0b29sdGlwOiIiLHdpdGhfbnVtPQpiZXI6ZmFsc2Usb25jbGljazpm dW5jdGlvbigpe2FsZXJ0KCJjbGlja2VkIil9LG9udW5sb2FkOm51bGwsdmlzaWJsZTp0cnVlfSw9 CmxvY2F0aW9uOiJpY29uYmFyIixpbml0aWFsaXplOmZ1bmN0aW9uKGUpe2lmKGUpe3RoaXMub3B0 aW9ucz0zRF8uZGVmYXVsdHMoZT0KLHRoaXMub3B0aW9ucyl9dGhpcy5zZXRFbGVtZW50KCQodGhp cy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSkpO3ZhciBkPTNEdGhpPQpzOyQodGhpcy5lbCkuZmlu ZCgiLmljb24iKS50b29sdGlwKHt0aXRsZTp0aGlzLm9wdGlvbnMudG9vbHRpcCxwbGFjZW1lbnQ6 ImI9Cm90dG9tIn0pLm9uKCJtb3VzZXVwIixkLm9wdGlvbnMub25jbGljayk7aWYoIXRoaXMub3B0 aW9ucy52aXNpYmxlKXt0aGlzLmhpZD0KZSgpfX0sc2hvdzpmdW5jdGlvbigpeyQodGhpcy5lbCku Y3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pfSxoaWRlOmZ1bmN0aW9uPQooKXskKHRoaXMuZWwp LmNzcyh7dmlzaWJpbGl0eToiaGlkZGVuIn0pfSxpY29uOmZ1bmN0aW9uKGQpeyQodGhpcy5lbCku ZmluZCg9CiIuaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29uKS5hZGRDbGFzcyhk KTt0aGlzLm9wdGlvbnMuaWNvbj0zRGR9LD0KdG9nZ2xlOmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5h ZGRDbGFzcygidG9nZ2xlIil9LHVudG9nZ2xlOmZ1bmN0aW9uKCl7JCh0aGlzPQouZWwpLnJlbW92 ZUNsYXNzKCJ0b2dnbGUiKX0sbnVtYmVyOmZ1bmN0aW9uKGQpeyQodGhpcy5lbCkuZmluZCgiLm51 bWJlciIpLnQ9CmV4dChkKX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGUpe3ZhciBkPTNEJzxkaXYgaWQ9 M0QiJytlLmlkKyciIGNsYXNzPTNEInN5bWJvbD0KIj48ZGl2IGNsYXNzPTNEImljb24gZmEgZmEt MnggJytlLmljb24rJyI+PC9kaXY+JztpZihlLndpdGhfbnVtYmVyKXtkKz0zRCc8PQpkaXYgY2xh c3M9M0QibnVtYmVyIj48L2Rpdj4nfWQrPTNEIjwvZGl2PiI7cmV0dXJuIGR9fSk7dmFyIGM9M0RC YWNrYm9uZS5WaWU9CncuZXh0ZW5kKHtvcHRpb25zOntpZDoiIix0aXRsZToiIix0YXJnZXQ6Il9w YXJlbnQiLGNvbnRlbnQ6IiIsdHlwZToidXJsIixzYz0KcmF0Y2hib29rOmZhbHNlLG9udW5sb2Fk Om51bGwsdmlzaWJsZTp0cnVlLGRpc2FibGVkOmZhbHNlLHRpdGxlX2F0dHJpYnV0ZToiPQoifSxs b2NhdGlvbjoibmF2YmFyIiwkbWVudTpudWxsLGV2ZW50czp7ImNsaWNrIC5oZWFkIjoiX2hlYWQi fSxpbml0aWFsaXplOmY9CnVuY3Rpb24oZCl7aWYoZCl7dGhpcy5vcHRpb25zPTNEXy5kZWZhdWx0 cyhkLHRoaXMub3B0aW9ucyl9aWYodGhpcy5vcHRpb25zLj0KY29udGVudCE9M0Q9M0R1bmRlZmlu ZWQmJnRoaXMub3B0aW9ucy5jb250ZW50LmluZGV4T2YoIi8vIik9M0Q9M0Q9M0QtMSl7dGhpPQpz Lm9wdGlvbnMuY29udGVudD0zRGdhbGF4eV9jb25maWcucm9vdCt0aGlzLm9wdGlvbnMuY29udGVu dH10aGlzLnNldEVsZW1lbnQ9CigkKHRoaXMuX3RlbXBsYXRlKHRoaXMub3B0aW9ucykpKTtpZih0 aGlzLm9wdGlvbnMuZGlzYWJsZWQpeyQodGhpcy5lbCkuZmluZD0KKCIucm9vdCIpLmFkZENsYXNz KCJkaXNhYmxlZCIpO3RoaXMuX2F0dGFjaFBvcG92ZXIoKX1pZighdGhpcy5vcHRpb25zLnZpc2li PQpsZSl7dGhpcy5oaWRlKCl9fSxzaG93OmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5jc3Moe3Zpc2li aWxpdHk6InZpc2libGUifSl9LGg9CmlkZTpmdW5jdGlvbigpeyQodGhpcy5lbCkuY3NzKHt2aXNp YmlsaXR5OiJoaWRkZW4ifSl9LGFkZDpmdW5jdGlvbihmKXt2YXIgZz0KPTNEe3RpdGxlOiJUaXRs ZSIsY29udGVudDoiIix0eXBlOiJ1cmwiLHRhcmdldDoiX3BhcmVudCIsc2NyYXRjaGJvb2s6ZmFs c2UsPQpkaXZpZGVyOmZhbHNlfTtpZihmKXtnPTNEXy5kZWZhdWx0cyhmLGcpfWlmKGcuY29udGVu dCYmZy5jb250ZW50LmluZGV4T2YoIi89Ci8iKT0zRD0zRD0zRC0xKXtnLmNvbnRlbnQ9M0RnYWxh eHlfY29uZmlnLnJvb3QrZy5jb250ZW50fWlmKCF0aGlzLiRtZW51KXskKD0KdGhpcy5lbCkuZmlu ZCgiLnJvb3QiKS5hcHBlbmQodGhpcy5fdGVtcGxhdGVNZW51KCkpOyQodGhpcy5lbCkuZmluZCgi LnN5bWJvPQpsIikuYWRkQ2xhc3MoImNhcmV0Iik7dGhpcy4kbWVudT0zRCQodGhpcy5lbCkuZmlu ZCgiLnBvcHVwIil9dmFyIGU9M0QkKHRoaXM9Ci5fdGVtcGxhdGVNZW51SXRlbShnKSk7dGhpcy4k bWVudS5hcHBlbmQoZSk7dmFyIGQ9M0R0aGlzO2Uub24oImNsaWNrIixmdW5jdD0KaW9uKGgpe2gu cHJldmVudERlZmF1bHQoKTtpZihkLm9wdGlvbnMudGFyZ2V0PTNEPTNEPTNEIl9ibGFuayIpe3Jl dHVybiB0cnVlPQp9R2FsYXh5LmZyYW1lLmFkZChmKX0pO2lmKGcuZGl2aWRlcil7dGhpcy4kbWVu dS5hcHBlbmQoJCh0aGlzLl90ZW1wbGF0ZURpdmk9CmRlcigpKSl9fSxfaGVhZDpmdW5jdGlvbihk KXtkLnByZXZlbnREZWZhdWx0KCk7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXtyZT0KdHVybn1p ZighdGhpcy4kbWVudSl7R2FsYXh5LmZyYW1lLmFkZCh0aGlzLm9wdGlvbnMpfX0sX2F0dGFjaFBv cG92ZXI6ZnVuY3RpPQpvbigpe3ZhciBkPTNEJCh0aGlzLmVsKS5maW5kKCIuaGVhZCIpO2QucG9w b3Zlcih7aHRtbDp0cnVlLGNvbnRlbnQ6J1BsZWFzZSA9CjxhIGhyZWY9M0QiJytnYWxheHlfY29u ZmlnLnJvb3QrJy91c2VyL2xvZ2luIj5sb2cgaW48L2E+IG9yIDxhIGhyZWY9M0QiJytnYT0KbGF4 eV9jb25maWcucm9vdCsnL3VzZXIvY3JlYXRlIj5yZWdpc3RlcjwvYT4gdG8gdXNlIHRoaXMgZmVh dHVyZS4nLHBsYWNlbWVuPQp0OiJib3R0b20ifSkub24oInNob3duLmJzLnBvcG92ZXIiLGZ1bmN0 aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2QucG9wb3Y9CmVyKCJoaWRlIil9LDUwMDApfSl9 LF90ZW1wbGF0ZU1lbnVJdGVtOmZ1bmN0aW9uKGQpe3JldHVybic8bGk+PGEgaHJlZj0zRCInKz0K ZC5jb250ZW50KyciIHRhcmdldD0zRCInK2QudGFyZ2V0KyciPicrZC50aXRsZSsiPC9hPjwvbGk+ In0sX3RlbXBsYXRlTWVudTpmPQp1bmN0aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJwb3B1cCBk cm9wZG93bi1tZW51Ij48L3VsPid9LF90ZW1wbGF0ZURpdmlkZXI9CjpmdW5jdGlvbigpe3JldHVy bic8bGkgY2xhc3M9M0QiZGl2aWRlciI+PC9saT4nfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFy ID0KZD0zRCc8dWwgaWQ9M0QiJytlLmlkKyciIGNsYXNzPTNEIm5hdiBuYXZiYXItbmF2IiBib3Jk ZXI9M0QiMCIgY2VsbHNwYWNpbmc9Cj0zRCIwIj48bGkgY2xhc3M9M0Qicm9vdCBkcm9wZG93biIg c3R5bGU9M0QiIj48YSBjbGFzcz0zRCJoZWFkIGRyb3Bkb3duLXRvZz0KZ2xlIiBkYXRhLXRvZ2ds ZT0zRCJkcm9wZG93biIgdGFyZ2V0PTNEIicrZS50YXJnZXQrJyIgaHJlZj0zRCInK2UuY29udGVu dCsnPQoiIHRpdGxlPTNEIicrZS50aXRsZV9hdHRyaWJ1dGUrJyI+JytlLnRpdGxlKyc8YiBjbGFz cz0zRCJzeW1ib2wiPjwvYj48L2E+PC89CmxpPjwvdWw+JztyZXR1cm4gZH19KTtyZXR1cm57R2Fs YXh5TWFzdGhlYWQ6YSxHYWxheHlNYXN0aGVhZFRhYjpjLEdhbGF4eU1hcz0KdGhlYWRJY29uOmJ9 fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFtdLGZ1bmN0aW9uKCl7dmFy IGE9M0RCYWNrYm9uZS5WaWV3LmV4dGVuZCh7ZWxfbWFzdGhlYWQ6IiNldmVyeXRoaW49CmciLG9w dGlvbnM6bnVsbCwkYmFja2dyb3VuZDpudWxsLGxpc3Q6W10saW5pdGlhbGl6ZTpmdW5jdGlvbihl KXt0aGlzLm9wdGlvbj0Kcz0zRGU7JCgiYm9keSIpLm9mZigpO3RoaXMuc2V0RWxlbWVudCgkKHRo aXMuX3RlbXBsYXRlKGUpKSk7JCh0aGlzLmVsX21hc3RoPQplYWQpLmFwcGVuZCgkKHRoaXMuZWwp KTt0aGlzLiRiYWNrZ3JvdW5kPTNEJCh0aGlzLmVsKS5maW5kKCIjbWFzdGhlYWQtYmFja2c9CnJv dW5kIik7dmFyIGQ9M0R0aGlzOyQod2luZG93KS5vbigiYmVmb3JldW5sb2FkIixmdW5jdGlvbigp e3ZhciBnPTNEIiI7Zm9yKD0Ka2V5IGluIGQubGlzdCl7aWYoZC5saXN0W2tleV0ub3B0aW9ucy5v bnVubG9hZCl7dmFyIGY9M0RkLmxpc3Rba2V5XS5vcHRpb25zPQoub251bmxvYWQoKTtpZihmKXtn Kz0zRGYrIiAifX19aWYoZyE9M0QiIil7cmV0dXJuIGd9fSl9LGV2ZW50czp7Y2xpY2s6Il9jbGk9 CmNrIixtb3VzZWRvd246ZnVuY3Rpb24oZCl7ZC5wcmV2ZW50RGVmYXVsdCgpfX0sYXBwZW5kOmZ1 bmN0aW9uKGQpe3JldHVybiB0aD0KaXMuX2FkZChkLHRydWUpfSxwcmVwZW5kOmZ1bmN0aW9uKGQp e3JldHVybiB0aGlzLl9hZGQoZCxmYWxzZSl9LGhpZ2hsaWdodDpmPQp1bmN0aW9uKGUpe3ZhciBk PTNEJCh0aGlzLmVsKS5maW5kKCIjIitlKyI+IGxpIik7aWYoZCl7ZC5hZGRDbGFzcygiYWN0aXZl Iik9Cn19LF9hZGQ6ZnVuY3Rpb24oZyxlKXt2YXIgZD0zRCQodGhpcy5lbCkuZmluZCgiIyIrZy5s b2NhdGlvbik7aWYoZCl7dmFyIGY9Cj0zRCQoZy5lbCk7Zi5hZGRDbGFzcygibWFzdGhlYWQtaXRl bSIpO2lmKGUpe2QuYXBwZW5kKGYpfWVsc2V7ZC5wcmVwZW5kKGYpfT0KdGhpcy5saXN0LnB1c2go Zyl9cmV0dXJuIG51bGx9LF9jbGljazpmdW5jdGlvbihnKXt2YXIgZj0zRCQodGhpcy5lbCkuZmlu ZCgiPQoucG9wdXAiKTtpZihmKXtmLmhpZGUoKX12YXIgZD0zRCQoZy50YXJnZXQpLmNsb3Nlc3Qo Ii5tYXN0aGVhZC1pdGVtIikuZmluZCg9CiIucG9wdXAiKTtpZigkKGcudGFyZ2V0KS5oYXNDbGFz cygiaGVhZCIpKXtkLnNob3coKTt0aGlzLiRiYWNrZ3JvdW5kLnNob3coKT0KfWVsc2V7dGhpcy4k YmFja2dyb3VuZC5oaWRlKCl9fSxfdGVtcGxhdGU6ZnVuY3Rpb24oZCl7dmFyIGU9M0RkLmJyYW5k PygiLyAiPQorZC5icmFuZCk6IiI7cmV0dXJuJzxkaXY+PGRpdiBpZD0zRCJtYXN0aGVhZCIgY2xh c3M9M0QibmF2YmFyIG5hdmJhci1maXhlZC09CnRvcCBuYXZiYXItaW52ZXJzZSI+PGRpdiBzdHls ZT0zRCJwb3NpdGlvbjogcmVsYXRpdmU7IHJpZ2h0OiAtNTAlOyBmbG9hdDogbD0KZWZ0OyI+PGRp diBpZD0zRCJuYXZiYXIiIHN0eWxlPTNEImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogcmVsYXRp dmU7IHJpZ2h0PQo6IDUwJTsiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9M0QibmF2YmFyLWJyYW5k Ij48YSBocmVmPTNEIicrZC5sb2dvX3VybCsnIj49CjxpbWcgYm9yZGVyPTNEIjAiIHNyYz0zRCIn K2dhbGF4eV9jb25maWcucm9vdCsnc3RhdGljL2ltYWdlcy9nYWxheHlJY29uX25vVD0KZXh0LnBu ZyI+PHNwYW4gaWQ9M0QiYnJhbmQiPiBHYWxheHkgJytlKyc8L3NwYW4+PC9hPjwvZGl2PjxkaXYg Y2xhc3M9M0QicXVvPQp0YS1tZXRlci1jb250YWluZXIiPjwvZGl2PjxkaXYgaWQ9M0QiaWNvbmJh ciIgY2xhc3M9M0QiaWNvbmJhciI+PC9kaXY+PC9kaXY9Cj48ZGl2IGlkPTNEIm1hc3RoZWFkLWJh Y2tncm91bmQiIHN0eWxlPTNEImRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNvbHV0ZT0KOyB0 b3A6IDMzcHg7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHotaW5kZXg6IDEwMTAiPjwvZGl2 PjwvZGl2Pid9fSk7dmFyPQogYj0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtvcHRpb25zOntpZDoi IixpY29uOiJmYS1jb2ciLHRvb2x0aXA6IiIsd2l0aF9udW09CmJlcjpmYWxzZSxvbmNsaWNrOmZ1 bmN0aW9uKCl7YWxlcnQoImNsaWNrZWQiKX0sb251bmxvYWQ6bnVsbCx2aXNpYmxlOnRydWV9LD0K bG9jYXRpb246Imljb25iYXIiLGluaXRpYWxpemU6ZnVuY3Rpb24oZSl7aWYoZSl7dGhpcy5vcHRp b25zPTNEXy5kZWZhdWx0cyhlPQosdGhpcy5vcHRpb25zKX10aGlzLnNldEVsZW1lbnQoJCh0aGlz Ll90ZW1wbGF0ZSh0aGlzLm9wdGlvbnMpKSk7dmFyIGQ9M0R0aGk9CnM7JCh0aGlzLmVsKS5maW5k KCIuaWNvbiIpLnRvb2x0aXAoe3RpdGxlOnRoaXMub3B0aW9ucy50b29sdGlwLHBsYWNlbWVudDoi Yj0Kb3R0b20ifSkub24oIm1vdXNldXAiLGQub3B0aW9ucy5vbmNsaWNrKTtpZighdGhpcy5vcHRp b25zLnZpc2libGUpe3RoaXMuaGlkPQplKCl9fSxzaG93OmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5j c3Moe3Zpc2liaWxpdHk6InZpc2libGUifSl9LGhpZGU6ZnVuY3Rpb249CigpeyQodGhpcy5lbCku Y3NzKHt2aXNpYmlsaXR5OiJoaWRkZW4ifSl9LGljb246ZnVuY3Rpb24oZCl7JCh0aGlzLmVsKS5m aW5kKD0KIi5pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb24pLmFkZENsYXNzKGQp O3RoaXMub3B0aW9ucy5pY29uPTNEZH0sPQp0b2dnbGU6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmFk ZENsYXNzKCJ0b2dnbGUiKX0sdW50b2dnbGU6ZnVuY3Rpb24oKXskKHRoaXM9Ci5lbCkucmVtb3Zl Q2xhc3MoInRvZ2dsZSIpfSxudW1iZXI6ZnVuY3Rpb24oZCl7JCh0aGlzLmVsKS5maW5kKCIubnVt YmVyIikudD0KZXh0KGQpfSxfdGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIGQ9M0QnPGRpdiBpZD0z RCInK2UuaWQrJyIgY2xhc3M9M0Qic3ltYm9sPQoiPjxkaXYgY2xhc3M9M0QiaWNvbiBmYSBmYS0y eCAnK2UuaWNvbisnIj48L2Rpdj4nO2lmKGUud2l0aF9udW1iZXIpe2QrPTNEJzw9CmRpdiBjbGFz cz0zRCJudW1iZXIiPjwvZGl2Pid9ZCs9M0QiPC9kaXY+IjtyZXR1cm4gZH19KTt2YXIgYz0zREJh Y2tib25lLlZpZT0Kdy5leHRlbmQoe29wdGlvbnM6e2lkOiIiLHRpdGxlOiIiLHRhcmdldDoiX3Bh cmVudCIsY29udGVudDoiIix0eXBlOiJ1cmwiLHNjPQpyYXRjaGJvb2s6ZmFsc2Usb251bmxvYWQ6 bnVsbCx2aXNpYmxlOnRydWUsZGlzYWJsZWQ6ZmFsc2UsdGl0bGVfYXR0cmlidXRlOiI9CiJ9LGxv Y2F0aW9uOiJuYXZiYXIiLCRtZW51Om51bGwsZXZlbnRzOnsiY2xpY2sgLmhlYWQiOiJfaGVhZCJ9 LGluaXRpYWxpemU6Zj0KdW5jdGlvbihkKXtpZihkKXt0aGlzLm9wdGlvbnM9M0RfLmRlZmF1bHRz KGQsdGhpcy5vcHRpb25zKX1pZih0aGlzLm9wdGlvbnMuPQpjb250ZW50IT0zRD0zRHVuZGVmaW5l ZCYmdGhpcy5vcHRpb25zLmNvbnRlbnQuaW5kZXhPZigiLy8iKT0zRD0zRD0zRC0xKXt0aGk9CnMu b3B0aW9ucy5jb250ZW50PTNEZ2FsYXh5X2NvbmZpZy5yb290K3RoaXMub3B0aW9ucy5jb250ZW50 fXRoaXMuc2V0RWxlbWVudD0KKCQodGhpcy5fdGVtcGxhdGUodGhpcy5vcHRpb25zKSkpO2lmKHRo aXMub3B0aW9ucy5kaXNhYmxlZCl7JCh0aGlzLmVsKS5maW5kPQooIi5yb290IikuYWRkQ2xhc3Mo ImRpc2FibGVkIik7dGhpcy5fYXR0YWNoUG9wb3ZlcigpfWlmKCF0aGlzLm9wdGlvbnMudmlzaWI9 CmxlKXt0aGlzLmhpZGUoKX19LHNob3c6ZnVuY3Rpb24oKXskKHRoaXMuZWwpLmNzcyh7dmlzaWJp bGl0eToidmlzaWJsZSJ9KX0saD0KaWRlOmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5jc3Moe3Zpc2li aWxpdHk6ImhpZGRlbiJ9KX0sYWRkOmZ1bmN0aW9uKGYpe3ZhciBnPQo9M0R7dGl0bGU6IlRpdGxl Iixjb250ZW50OiIiLHR5cGU6InVybCIsdGFyZ2V0OiJfcGFyZW50IixzY3JhdGNoYm9vazpmYWxz ZSw9CmRpdmlkZXI6ZmFsc2V9O2lmKGYpe2c9M0RfLmRlZmF1bHRzKGYsZyl9aWYoZy5jb250ZW50 JiZnLmNvbnRlbnQuaW5kZXhPZigiLz0KLyIpPTNEPTNEPTNELTEpe2cuY29udGVudD0zRGdhbGF4 eV9jb25maWcucm9vdCtnLmNvbnRlbnR9aWYoIXRoaXMuJG1lbnUpeyQoPQp0aGlzLmVsKS5maW5k KCIucm9vdCIpLmFwcGVuZCh0aGlzLl90ZW1wbGF0ZU1lbnUoKSk7JCh0aGlzLmVsKS5maW5kKCIu c3ltYm89CmwiKS5hZGRDbGFzcygiY2FyZXQiKTt0aGlzLiRtZW51PTNEJCh0aGlzLmVsKS5maW5k KCIucG9wdXAiKX12YXIgZT0zRCQodGhpcz0KLl90ZW1wbGF0ZU1lbnVJdGVtKGcpKTt0aGlzLiRt ZW51LmFwcGVuZChlKTt2YXIgZD0zRHRoaXM7ZS5vbigiY2xpY2siLGZ1bmN0PQppb24oaCl7aC5w cmV2ZW50RGVmYXVsdCgpO2lmKGQub3B0aW9ucy50YXJnZXQ9M0Q9M0Q9M0QiX2JsYW5rIil7cmV0 dXJuIHRydWU9Cn1HYWxheHkuZnJhbWUuYWRkKGYpfSk7aWYoZy5kaXZpZGVyKXt0aGlzLiRtZW51 LmFwcGVuZCgkKHRoaXMuX3RlbXBsYXRlRGl2aT0KZGVyKCkpKX19LF9oZWFkOmZ1bmN0aW9uKGQp e2QucHJldmVudERlZmF1bHQoKTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3JlPQp0dXJufWlm KCF0aGlzLiRtZW51KXtHYWxheHkuZnJhbWUuYWRkKHRoaXMub3B0aW9ucyl9fSxfYXR0YWNoUG9w b3ZlcjpmdW5jdGk9Cm9uKCl7dmFyIGQ9M0QkKHRoaXMuZWwpLmZpbmQoIi5oZWFkIik7ZC5wb3Bv dmVyKHtodG1sOnRydWUsY29udGVudDonUGxlYXNlID0KPGEgaHJlZj0zRCInK2dhbGF4eV9jb25m aWcucm9vdCsndXNlci9sb2dpbj91c2VfcGFuZWxzPTNEVHJ1ZSI+bG9nIGluPC9hPiBvPQpyIDxh IGhyZWY9M0QiJytnYWxheHlfY29uZmlnLnJvb3QrJ3VzZXIvY3JlYXRlP3VzZV9wYW5lbHM9M0RU cnVlIj5yZWdpc3Rlcjw9Ci9hPiB0byB1c2UgdGhpcyBmZWF0dXJlLicscGxhY2VtZW50OiJib3R0 b20ifSkub24oInNob3duLmJzLnBvcG92ZXIiLGZ1bmN0aT0Kb24oKXtzZXRUaW1lb3V0KGZ1bmN0 aW9uKCl7ZC5wb3BvdmVyKCJoaWRlIil9LDUwMDApfSl9LF90ZW1wbGF0ZU1lbnVJdGVtOmZ1PQpu Y3Rpb24oZCl7cmV0dXJuJzxsaT48YSBocmVmPTNEIicrZC5jb250ZW50KyciIHRhcmdldD0zRCIn K2QudGFyZ2V0KyciPicrZC49CnRpdGxlKyI8L2E+PC9saT4ifSxfdGVtcGxhdGVNZW51OmZ1bmN0 aW9uKCl7cmV0dXJuJzx1bCBjbGFzcz0zRCJwb3B1cCBkcm9wZD0Kb3duLW1lbnUiPjwvdWw+J30s X3RlbXBsYXRlRGl2aWRlcjpmdW5jdGlvbigpe3JldHVybic8bGkgY2xhc3M9M0QiZGl2aWRlciI+ PQo8L2xpPid9LF90ZW1wbGF0ZTpmdW5jdGlvbihlKXt2YXIgZD0zRCc8dWwgaWQ9M0QiJytlLmlk KyciIGNsYXNzPTNEIm5hdiBuYXY9CmJhci1uYXYiIGJvcmRlcj0zRCIwIiBjZWxsc3BhY2luZz0z RCIwIj48bGkgY2xhc3M9M0Qicm9vdCBkcm9wZG93biIgc3R5bGU9Cj0zRCIiPjxhIGNsYXNzPTNE ImhlYWQgZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0zRCJkcm9wZG93biIgdGFyZ2V0PTNE Ij0KJytlLnRhcmdldCsnIiBocmVmPTNEIicrZS5jb250ZW50KyciIHRpdGxlPTNEIicrZS50aXRs ZV9hdHRyaWJ1dGUrJyI+JytlLnRpPQp0bGUrJzxiIGNsYXNzPTNEInN5bWJvbCI+PC9iPjwvYT48 L2xpPjwvdWw+JztyZXR1cm4gZH19KTtyZXR1cm57R2FsYXh5TWFzdGg9CmVhZDphLEdhbGF4eU1h c3RoZWFkVGFiOmMsR2FsYXh5TWFzdGhlYWRJY29uOmJ9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2Rk IC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2ZiBzdGF0aWMvc2Ny aXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcwotLS0gYS9zdGF0aWMvc2Ny aXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcworKysgYi9zdGF0aWMvc2Ny aXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZS5qcwpAQCAtMSwxICsxLDEgQEAK LWRlZmluZShbInV0aWxzL3V0aWxzIiwidXRpbHMvZGVmZXJyZWQiLCJtdmMvdWkvdWktcG9ydGxl dCIsIm12Yy91aS91aS1taXNjPQoiLCJtdmMvY2l0YXRpb24vY2l0YXRpb24tbW9kZWwiLCJtdmMv Y2l0YXRpb24vY2l0YXRpb24tdmlldyIsIm12Yy90b29scyIsIm09CnZjL3Rvb2xzL3Rvb2xzLXRl bXBsYXRlIiwibXZjL3Rvb2xzL3Rvb2xzLWNvbnRlbnQiLCJtdmMvdG9vbHMvdG9vbHMtc2VjdGlv bj0KIiwibXZjL3Rvb2xzL3Rvb2xzLXRyZWUiXSxmdW5jdGlvbihnLGgsZixrLGksYSxkLGMsZSxq LGIpe3JldHVybiBCYWNrYm9uZS5WPQppZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGwp e2NvbnNvbGUuZGVidWcobCk7dmFyIG09M0RwYXJlbnQuR2FsYXh5O2k9CmYobSYmbS5tb2RhbCl7 dGhpcy5tb2RhbD0zRG0ubW9kYWx9ZWxzZXt0aGlzLm1vZGFsPTNEbmV3IGsuTW9kYWwuVmlldygp fWlmKD0KbSYmbS5jdXJyVXNlcil7dGhpcy5pc19hZG1pbj0zRG0uY3VyclVzZXIuZ2V0KCJpc19h ZG1pbiIpfWVsc2V7dGhpcy5pc19hZG1pPQpuPTNEZmFsc2V9dGhpcy5vcHRpb25zPTNEbDt0aGlz LmNvbnRhaW5lcj0zRHRoaXMub3B0aW9ucy5jb250YWluZXJ8fCJib2R5Ijs9CnRoaXMuZGVmZXJy ZWQ9M0RuZXcgaCgpO3RoaXMuc2V0RWxlbWVudCgiPGRpdi8+Iik7JCh0aGlzLmNvbnRhaW5lciku YXBwZW5kKD0KdGhpcy4kZWwpO3RoaXMuX2J1aWxkRm9ybSgpfSxyZWNpZXB0OmZ1bmN0aW9uKGwp eyQodGhpcy5jb250YWluZXIpLmVtcHR5KCk7PQokKHRoaXMuY29udGFpbmVyKS5hcHBlbmQobCl9 LGhpZ2hsaWdodDpmdW5jdGlvbihtLG4sbCl7dmFyIG89M0R0aGlzLmVsZW1lbnQ9Cl9saXN0W21d O2lmKG8pe28uZXJyb3Iobnx8IlBsZWFzZSB2ZXJpZnkgdGhpcyBwYXJhbWV0ZXIuIik7aWYoIWwp eyQodGhpcy5jbz0KbnRhaW5lcikuYW5pbWF0ZSh7c2Nyb2xsVG9wOm8uJGVsLm9mZnNldCgpLnRv cC0yMH0sNTAwKX19fSxfYnVpbGRGb3JtOmZ1bmN0PQppb24oKXt2YXIgbD0zRHRoaXM7dGhpcy5v ZmYoInJlZnJlc2giKTt0aGlzLm9mZigicmVzZXQiKTt0aGlzLmZpZWxkX2xpc3Q9M0Q9Cnt9O3Ro aXMuaW5wdXRfbGlzdD0zRHt9O3RoaXMuZWxlbWVudF9saXN0PTNEe307dGhpcy50cmVlPTNEbmV3 IGIodGhpcyk7dGhpcz0KLmNvbnRlbnQ9M0RuZXcgZSh0aGlzKTt2YXIgbj0zRHRoaXMub3B0aW9u czt0aGlzLl9yZW5kZXJGb3JtKG4pO3RoaXMudHJlZS5mPQppbmFsaXplKCk7aWYobi5lcnJvcnMp e3ZhciBvPTNEdGhpcy50cmVlLm1hdGNoUmVzcG9uc2Uobi5lcnJvcnMpO2Zvcih2YXIgbSA9Cmlu IG8pe3RoaXMuaGlnaGxpZ2h0KG0sb1ttXSx0cnVlKX19dGhpcy5vbigicmVmcmVzaCIsZnVuY3Rp b24oKXtsLmRlZmVycmVkLj0KcmVzZXQoKTtsLmRlZmVycmVkLmV4ZWN1dGUoZnVuY3Rpb24oKXts Ll91cGRhdGVNb2RlbCgpfSl9KTt0aGlzLm9uKCJyZXNldCIsPQpmdW5jdGlvbigpe2Zvcih2YXIg cCBpbiB0aGlzLmVsZW1lbnRfbGlzdCl7dGhpcy5lbGVtZW50X2xpc3RbcF0ucmVzZXQoKX19KTs9 CnRoaXMudHJpZ2dlcigicmVmcmVzaCIpfSxfcmVuZGVyRm9ybTpmdW5jdGlvbih1KXt2YXIgdD0z RHRoaXM7dGhpcy5tZXNzYWdlPQo9M0RuZXcgay5NZXNzYWdlKCk7dmFyIHE9M0RuZXcgay5CdXR0 b25JY29uKHtpY29uOiJmYS1pbmZvLWNpcmNsZSIsdGl0bGU6KCE9CnRoaXMud29ya2Zsb3cmJiJS ZXF1aXJlbWVudHMiKXx8bnVsbCx0b29sdGlwOiJEaXNwbGF5IHRvb2wgcmVxdWlyZW1lbnRzIixv bj0KY2xpY2s6ZnVuY3Rpb24oKXtpZighdGhpcy52aXNpYmxlKXt0aGlzLnZpc2libGU9M0R0cnVl O3QubWVzc2FnZS51cGRhdGUoe3BlPQpyc2lzdGVudDp0cnVlLG1lc3NhZ2U6Yy5yZXF1aXJlbWVu dHModSksc3RhdHVzOiJpbmZvIn0pfWVsc2V7dGhpcy52aXNpYmxlPQo9M0RmYWxzZTt0Lm1lc3Nh Z2UudXBkYXRlKHttZXNzYWdlOiIifSl9fX0pO2lmKCF1LnJlcXVpcmVtZW50c3x8dS5yZXF1aXJl bWU9Cm50cy5sZW5ndGg9M0Q9M0QwKXtxLiRlbC5oaWRlKCl9dmFyIG09M0RuZXcgay5CdXR0b25N ZW51KHtpY29uOiJmYS1jdWJlcyIsdD0KaXRsZTooIXRoaXMud29ya2Zsb3cmJiJWZXJzaW9ucyIp fHxudWxsLHRvb2x0aXA6IlNlbGVjdCBhbm90aGVyIHRvb2wgdmVyc2lvPQpuIn0pO2lmKHUudmVy c2lvbnMmJnUudmVyc2lvbnMubGVuZ3RoPjEpe2Zvcih2YXIgbyBpbiB1LnZlcnNpb25zKXt2YXIg cj0zRHU9Ci52ZXJzaW9uc1tvXTtpZihyIT0zRHUudmVyc2lvbil7bS5hZGRNZW51KHt0aXRsZToi U3dpdGNoIHRvICIrcix2ZXJzaW9uOnIsaT0KY29uOiJmYS1jdWJlIixvbmNsaWNrOmZ1bmN0aW9u KCl7dS5pZD0zRHUuaWQucmVwbGFjZSh1LnZlcnNpb24sdGhpcy52ZXJzaW9uPQopO3UudmVyc2lv bj0zRHRoaXMudmVyc2lvbjt0LmRlZmVycmVkLnJlc2V0KCk7dC5kZWZlcnJlZC5leGVjdXRlKGZ1 bmN0aW9uKCk9Cnt0Ll9idWlsZE1vZGVsKCl9KX19KX19fWVsc2V7bS4kZWwuaGlkZSgpfXZhciBw PTNEbmV3IGsuQnV0dG9uTWVudSh7aWNvbjoiZj0KYS1jYXJldC1kb3duIix0aXRsZTooIXRoaXMu d29ya2Zsb3cmJiJPcHRpb25zIil8fG51bGwsdG9vbHRpcDoiVmlldyBhdmFpbGFiPQpsZSBvcHRp b25zIn0pO2lmKHUuYmlvc3Rhcl91cmwpe3AuYWRkTWVudSh7aWNvbjoiZmEtcXVlc3Rpb24tY2ly Y2xlIix0aXRsZTo9CiJRdWVzdGlvbj8iLHRvb2x0aXA6IkFzayBhIHF1ZXN0aW9uIGFib3V0IHRo aXMgdG9vbCAoQmlvc3RhcikiLG9uY2xpY2s6ZnVuYz0KdGlvbigpe3dpbmRvdy5vcGVuKHUuYmlv c3Rhcl91cmwrIi9wL25ldy9wb3N0LyIpfX0pO3AuYWRkTWVudSh7aWNvbjoiZmEtc2VhPQpyY2gi LHRpdGxlOiJTZWFyY2giLHRvb2x0aXA6IlNlYXJjaCBoZWxwIGZvciB0aGlzIHRvb2wgKEJpb3N0 YXIpIixvbmNsaWNrOmY9CnVuY3Rpb24oKXt3aW5kb3cub3Blbih1LmJpb3N0YXJfdXJsKyIvdC8i K3UuaWQrIi8iKX19KX1wLmFkZE1lbnUoe2ljb246ImZhLT0Kc2hhcmUiLHRpdGxlOiJTaGFyZSIs dG9vbHRpcDoiU2hhcmUgdGhpcyB0b29sIixvbmNsaWNrOmZ1bmN0aW9uKCl7cHJvbXB0KCJDPQpv cHkgdG8gY2xpcGJvYXJkOiBDdHJsK0MsIEVudGVyIix3aW5kb3cubG9jYXRpb24ub3JpZ2luK2dh bGF4eV9jb25maWcucm9vdCs9CiJyb290P3Rvb2xfaWQ9M0QiK3UuaWQpfX0pO2lmKHRoaXMuaXNf YWRtaW4pe3AuYWRkTWVudSh7aWNvbjoiZmEtZG93bmxvYWQiLD0KdGl0bGU6IkRvd25sb2FkIix0 b29sdGlwOiJEb3dubG9hZCB0aGlzIHRvb2wiLG9uY2xpY2s6ZnVuY3Rpb24oKXt3aW5kb3cubG9j PQphdGlvbi5ocmVmPTNEZ2FsYXh5X2NvbmZpZy5yb290KyJhcGkvdG9vbHMvIit1LmlkKyIvZG93 bmxvYWQifX0pfXRoaXMuc2VjdGk9Cm9uPTNEbmV3IGouVmlldyh0LHtpbnB1dHM6dS5pbnB1dHMs Y2xzOiJ1aS10YWJsZS1wbGFpbiJ9KTtpZih0aGlzLmluY29tcGF0aT0KYmxlKXt0aGlzLiRlbC5o aWRlKCk7JCgiI3Rvb2wtZm9ybS1jbGFzc2ljIikuc2hvdygpO3JldHVybn10aGlzLnBvcnRsZXQ9 M0RuPQpldyBmLlZpZXcoe2ljb246ImZhLXdyZW5jaCIsdGl0bGU6IjxiPiIrdS5uYW1lKyI8L2I+ ICIrdS5kZXNjcmlwdGlvbisiIChHYWw9CmF4eSBUb29sIFZlcnNpb24gIit1LnZlcnNpb24rIiki LGNsczoidWktcG9ydGxldC1zbGltIixvcGVyYXRpb25zOntyZXF1aXJlbT0KZW50czpxLG1lbnU6 cCx2ZXJzaW9uczptfSxidXR0b25zOnRoaXMuYnV0dG9uc30pO2lmKHRoaXMub3B0aW9ucy53b3Jr Zmxvdyl7PQp0aGlzLnBvcnRsZXQuJGNvbnRlbnQuY3NzKCJwYWRkaW5nIiwiMHB4Iil9dGhpcy5w b3J0bGV0LmFwcGVuZCh0aGlzLm1lc3NhZ2U9Ci4kZWwsdHJ1ZSk7dGhpcy5wb3J0bGV0LmFwcGVu ZCh0aGlzLnNlY3Rpb24uJGVsKTt0aGlzLiRlbC5lbXB0eSgpO3RoaXMuJGVsLj0KYXBwZW5kKHRo aXMucG9ydGxldC4kZWwpO2lmKHUuaGVscCE9M0QiIil7dGhpcy4kZWwuYXBwZW5kKGMuaGVscCh1 LmhlbHApKX1pPQpmKHUuY2l0YXRpb25zKXt2YXIgcz0zRCQoIjxkaXYvPiIpO3ZhciBsPTNEbmV3 IGkuVG9vbENpdGF0aW9uQ29sbGVjdGlvbigpO2w9Ci50b29sX2lkPTNEdS5pZDt2YXIgbj0zRG5l dyBhLkNpdGF0aW9uTGlzdFZpZXcoe2VsOnMsY29sbGVjdGlvbjpsfSk7bi5yZW5kZT0KcigpO2wu ZmV0Y2goKTt0aGlzLiRlbC5hcHBlbmQocyl9aWYodS5tZXNzYWdlKXt0aGlzLm1lc3NhZ2UudXBk YXRlKHtwZXJzaXN0PQplbnQ6dHJ1ZSxzdGF0dXM6Indhcm5pbmciLG1lc3NhZ2U6dS5tZXNzYWdl fSl9fX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFsidXRpbHMvdXRp bHMiLCJ1dGlscy9kZWZlcnJlZCIsIm12Yy91aS91aS1wb3J0bGV0IiwibXZjL3VpL3VpLW1pc2M9 CiIsIm12Yy9jaXRhdGlvbi9jaXRhdGlvbi1tb2RlbCIsIm12Yy9jaXRhdGlvbi9jaXRhdGlvbi12 aWV3IiwibXZjL3Rvb2xzIiwibT0KdmMvdG9vbHMvdG9vbHMtdGVtcGxhdGUiLCJtdmMvdG9vbHMv dG9vbHMtY29udGVudCIsIm12Yy90b29scy90b29scy1zZWN0aW9uPQoiLCJtdmMvdG9vbHMvdG9v bHMtdHJlZSJdLGZ1bmN0aW9uKGcsaCxmLGssaSxhLGQsYyxlLGosYil7cmV0dXJuIEJhY2tib25l LlY9Cmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24obCl7dGhpcy5vcHRpb25zRGVmYXVs dD0zRHtpc19keW5hbWljOnRydWUsYz0Kb21wYWN0OmZhbHNlLGluaXRpYWxfZXJyb3JzOmZhbHNl LHNlbmRfYWxsOmZhbHNlfTt0aGlzLm9wdGlvbnM9M0RnLm1lcmdlKGwsPQp0aGlzLm9wdGlvbnNE ZWZhdWx0KTtjb25zb2xlLmRlYnVnKHRoaXMub3B0aW9ucyk7dmFyIG09M0RwYXJlbnQuR2FsYXh5 O2lmKG09CiYmbS5tb2RhbCl7dGhpcy5tb2RhbD0zRG0ubW9kYWx9ZWxzZXt0aGlzLm1vZGFsPTNE bmV3IGsuTW9kYWwuVmlldygpfWlmKG0mJj0KbS5jdXJyVXNlcil7dGhpcy5pc19hZG1pbj0zRG0u Y3VyclVzZXIuZ2V0KCJpc19hZG1pbiIpfWVsc2V7dGhpcy5pc19hZG1pbj0KPTNEZmFsc2V9dGhp cy5jb250YWluZXI9M0R0aGlzLm9wdGlvbnMuY29udGFpbmVyfHwiYm9keSI7dGhpcy5kZWZlcnJl ZD0zRG5lPQp3IGgoKTt0aGlzLnNldEVsZW1lbnQoIjxkaXYvPiIpOyQodGhpcy5jb250YWluZXIp LmFwcGVuZCh0aGlzLiRlbCk7dGhpcy5fYnU9CmlsZEZvcm0oKX0scmVjaWVwdDpmdW5jdGlvbihs KXskKHRoaXMuY29udGFpbmVyKS5lbXB0eSgpOyQodGhpcy5jb250YWluZXIpLj0KYXBwZW5kKGwp fSxoaWdobGlnaHQ6ZnVuY3Rpb24obSxuLGwpe3ZhciBvPTNEdGhpcy5lbGVtZW50X2xpc3RbbV07 aWYobyl7by5lPQpycm9yKG58fCJQbGVhc2UgdmVyaWZ5IHRoaXMgcGFyYW1ldGVyLiIpO2lmKCFs KXskKHRoaXMuY29udGFpbmVyKS5hbmltYXRlKHs9CnNjcm9sbFRvcDpvLiRlbC5vZmZzZXQoKS50 b3AtMjB9LDUwMCl9fX0sX2Vycm9yczpmdW5jdGlvbihuKXt0aGlzLnRyaWdnZXIoIj0KcmVzZXQi KTtpZihuJiZuLmVycm9ycyl7dmFyIG89M0R0aGlzLnRyZWUubWF0Y2hSZXNwb25zZShuLmVycm9y cyk7Zm9yKHZhciBtPQogaW4gdGhpcy5lbGVtZW50X2xpc3Qpe3ZhciBsPTNEdGhpcy5lbGVtZW50 X2xpc3RbbV07aWYob1ttXSl7dGhpcy5oaWdobGlnaHQ9CihtLG9bbV0sdHJ1ZSl9fX19LF9idWls ZEZvcm06ZnVuY3Rpb24oKXt2YXIgbD0zRHRoaXM7dGhpcy5vZmYoInJlZnJlc2giKTt0aD0KaXMu b2ZmKCJyZXNldCIpO3RoaXMuZmllbGRfbGlzdD0zRHt9O3RoaXMuaW5wdXRfbGlzdD0zRHt9O3Ro aXMuZWxlbWVudF9saXN0PQo9M0R7fTt0aGlzLnRyZWU9M0RuZXcgYih0aGlzKTt0aGlzLmNvbnRl bnQ9M0RuZXcgZSh0aGlzKTt2YXIgbT0zRHRoaXMub3B0aW89Cm5zO3RoaXMuX3JlbmRlckZvcm0o bSk7dGhpcy50cmVlLmZpbmFsaXplKCk7aWYobS5pbml0aWFsX2Vycm9ycyl7dGhpcy5fZXJybz0K cnMobSl9dGhpcy5vbigicmVmcmVzaCIsZnVuY3Rpb24oKXtsLmRlZmVycmVkLnJlc2V0KCk7bC5k ZWZlcnJlZC5leGVjdXRlKGZ1PQpuY3Rpb24oKXtsLl91cGRhdGVNb2RlbCgpfSl9KTt0aGlzLm9u KCJyZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcy49CmVsZW1lbnRfbGlzdCl7dGhp cy5lbGVtZW50X2xpc3Rbbl0ucmVzZXQoKX19KTt0aGlzLnRyaWdnZXIoInJlZnJlc2giKX0sX3Jl bj0KZGVyRm9ybTpmdW5jdGlvbih1KXt2YXIgdD0zRHRoaXM7dGhpcy5tZXNzYWdlPTNEbmV3IGsu TWVzc2FnZSgpO3ZhciBxPTNEbmV3PQogay5CdXR0b25JY29uKHtpY29uOiJmYS1pbmZvLWNpcmNs ZSIsdGl0bGU6KCF1LmNvbXBhY3QmJiJSZXF1aXJlbWVudHMiKXx8bnU9CmxsLHRvb2x0aXA6IkRp c3BsYXkgdG9vbCByZXF1aXJlbWVudHMiLG9uY2xpY2s6ZnVuY3Rpb24oKXtpZighdGhpcy52aXNp YmxlKT0Ke3RoaXMudmlzaWJsZT0zRHRydWU7dC5tZXNzYWdlLnVwZGF0ZSh7cGVyc2lzdGVudDp0 cnVlLG1lc3NhZ2U6Yy5yZXF1aXJlbWVuPQp0cyh1KSxzdGF0dXM6ImluZm8ifSl9ZWxzZXt0aGlz LnZpc2libGU9M0RmYWxzZTt0Lm1lc3NhZ2UudXBkYXRlKHttZXNzYWdlOiI9CiJ9KX19fSk7aWYo IXUucmVxdWlyZW1lbnRzfHx1LnJlcXVpcmVtZW50cy5sZW5ndGg9M0Q9M0QwKXtxLiRlbC5oaWRl KCl9dmFyID0KbT0zRG5ldyBrLkJ1dHRvbk1lbnUoe2ljb246ImZhLWN1YmVzIix0aXRsZTooIXUu Y29tcGFjdCYmIlZlcnNpb25zIil8fG51bGwsPQp0b29sdGlwOiJTZWxlY3QgYW5vdGhlciB0b29s IHZlcnNpb24ifSk7aWYodS52ZXJzaW9ucyYmdS52ZXJzaW9ucy5sZW5ndGg+MSk9Cntmb3IodmFy IG8gaW4gdS52ZXJzaW9ucyl7dmFyIHI9M0R1LnZlcnNpb25zW29dO2lmKHIhPTNEdS52ZXJzaW9u KXttLmFkZE1lbj0KdSh7dGl0bGU6IlN3aXRjaCB0byAiK3IsdmVyc2lvbjpyLGljb246ImZhLWN1 YmUiLG9uY2xpY2s6ZnVuY3Rpb24oKXt1LmlkPTNEPQp1LmlkLnJlcGxhY2UodS52ZXJzaW9uLHRo aXMudmVyc2lvbik7dS52ZXJzaW9uPTNEdGhpcy52ZXJzaW9uO3QuZGVmZXJyZWQucmU9CnNldCgp O3QuZGVmZXJyZWQuZXhlY3V0ZShmdW5jdGlvbigpe3QuX2J1aWxkTW9kZWwoKX0pfX0pfX19ZWxz ZXttLiRlbC5oaWRlKD0KKX12YXIgcD0zRG5ldyBrLkJ1dHRvbk1lbnUoe2ljb246ImZhLWNhcmV0 LWRvd24iLHRpdGxlOighdS5jb21wYWN0JiYiT3B0aW9uPQpzIil8fG51bGwsdG9vbHRpcDoiVmll dyBhdmFpbGFibGUgb3B0aW9ucyJ9KTtpZih1LmJpb3N0YXJfdXJsKXtwLmFkZE1lbnUoe2k9CmNv bjoiZmEtcXVlc3Rpb24tY2lyY2xlIix0aXRsZToiUXVlc3Rpb24/Iix0b29sdGlwOiJBc2sgYSBx dWVzdGlvbiBhYm91dCB0aD0KaXMgdG9vbCAoQmlvc3RhcikiLG9uY2xpY2s6ZnVuY3Rpb24oKXt3 aW5kb3cub3Blbih1LmJpb3N0YXJfdXJsKyIvcC9uZXcvcG9zPQp0LyIpfX0pO3AuYWRkTWVudSh7 aWNvbjoiZmEtc2VhcmNoIix0aXRsZToiU2VhcmNoIix0b29sdGlwOiJTZWFyY2ggaGVscCBmb3I9 CiB0aGlzIHRvb2wgKEJpb3N0YXIpIixvbmNsaWNrOmZ1bmN0aW9uKCl7d2luZG93Lm9wZW4odS5i aW9zdGFyX3VybCsiL3QvIit1Lj0KaWQrIi8iKX19KX1wLmFkZE1lbnUoe2ljb246ImZhLXNoYXJl Iix0aXRsZToiU2hhcmUiLHRvb2x0aXA6IlNoYXJlIHRoaXMgdG9vPQpsIixvbmNsaWNrOmZ1bmN0 aW9uKCl7cHJvbXB0KCJDb3B5IHRvIGNsaXBib2FyZDogQ3RybCtDLCBFbnRlciIsd2luZG93Lmxv Y2E9CnRpb24ub3JpZ2luK2dhbGF4eV9jb25maWcucm9vdCsicm9vdD90b29sX2lkPTNEIit1Lmlk KX19KTtpZih0aGlzLmlzX2FkbWluKT0Ke3AuYWRkTWVudSh7aWNvbjoiZmEtZG93bmxvYWQiLHRp dGxlOiJEb3dubG9hZCIsdG9vbHRpcDoiRG93bmxvYWQgdGhpcyB0b29sPQoiLG9uY2xpY2s6ZnVu Y3Rpb24oKXt3aW5kb3cubG9jYXRpb24uaHJlZj0zRGdhbGF4eV9jb25maWcucm9vdCsiYXBpL3Rv b2xzLyI9Cit1LmlkKyIvZG93bmxvYWQifX0pfXRoaXMuc2VjdGlvbj0zRG5ldyBqLlZpZXcodCx7 aW5wdXRzOnUuaW5wdXRzLGNsczoidWktdD0KYWJsZS1wbGFpbiJ9KTtpZih0aGlzLmluY29tcGF0 aWJsZSl7dGhpcy4kZWwuaGlkZSgpOyQoIiN0b29sLWZvcm0tY2xhc3NpYyIpPQouc2hvdygpO3Jl dHVybn10aGlzLnBvcnRsZXQ9M0RuZXcgZi5WaWV3KHtpY29uOiJmYS13cmVuY2giLHRpdGxlOiI8 Yj4iK3UubmE9Cm1lKyI8L2I+ICIrdS5kZXNjcmlwdGlvbisiIChHYWxheHkgVG9vbCBWZXJzaW9u ICIrdS52ZXJzaW9uKyIpIixjbHM6InVpLXBvcj0KdGxldC1zbGltIixvcGVyYXRpb25zOntyZXF1 aXJlbWVudHM6cSxtZW51OnAsdmVyc2lvbnM6bX0sYnV0dG9uczp0aGlzLmJ1dHRvPQpuc30pO2lm KHUuY29tcGFjdCl7dGhpcy5wb3J0bGV0LiRjb250ZW50LmNzcygicGFkZGluZyIsIjBweCIpfXRo aXMucG9ydGxldC49CmFwcGVuZCh0aGlzLm1lc3NhZ2UuJGVsLHRydWUpO3RoaXMucG9ydGxldC5h cHBlbmQodGhpcy5zZWN0aW9uLiRlbCk7dGhpcy4kZT0KbC5lbXB0eSgpO3RoaXMuJGVsLmFwcGVu ZCh0aGlzLnBvcnRsZXQuJGVsKTtpZih1LmhlbHAhPTNEIiIpe3RoaXMuJGVsLmFwcGVuPQpkKGMu aGVscCh1LmhlbHApKX1pZih1LmNpdGF0aW9ucyl7dmFyIHM9M0QkKCI8ZGl2Lz4iKTt2YXIgbD0z RG5ldyBpLlRvb2xDaXQ9CmF0aW9uQ29sbGVjdGlvbigpO2wudG9vbF9pZD0zRHUuaWQ7dmFyIG49 M0RuZXcgYS5DaXRhdGlvbkxpc3RWaWV3KHtlbDpzLGNvbD0KbGVjdGlvbjpsfSk7bi5yZW5kZXIo KTtsLmZldGNoKCk7dGhpcy4kZWwuYXBwZW5kKHMpfWlmKHUubWVzc2FnZSl7dGhpcy5tZXNzPQph Z2UudXBkYXRlKHtwZXJzaXN0ZW50OnRydWUsc3RhdHVzOiJ3YXJuaW5nIixtZXNzYWdlOnUubWVz c2FnZX0pfX19KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgOGE3MDQ1 NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJlNmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1 ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90 b29scy1mb3JtLXdvcmtmbG93LmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9v bHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZj L3Rvb2xzL3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKQEAgLTEsMSArMSwxIEBACi1kZWZpbmUoWyJ1 dGlscy91dGlscyIsIm12Yy90b29scy90b29scy1mb3JtLWJhc2UiXSxmdW5jdGlvbihiLGEpe3Zh ciBjPTNEYT0KLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLm5vZGU9M0R3b3Jr Zmxvdy5hY3RpdmVfbm9kZTtpZighdGhpcy5uPQpvZGUpe2NvbnNvbGUuZGVidWcoIkZBSUxFRCAt IHRvb2xzLWZvcm0td29ya2Zsb3c6aW5pdGlhbGl6ZSgpIC0gTm9kZSBub3QgZm89CnVuZCBpbiB3 b3JrZmxvdy4iKTtyZXR1cm59dGhpcy53b3JrZmxvdz0zRHRydWU7dGhpcy5vcHRpb25zPTNEZTti LmRlZXBlYWNoKD0KZS5pbnB1dHMsZnVuY3Rpb24oZil7aWYoZi50eXBlKXtmLm9wdGlvbmFsPTNE KFsiZGF0YSIsImRhdGFfaGlkZGVuIiwiaGlkZGVuPQoiLCJkcmlsbF9kb3duIl0pLmluZGV4T2Yo Zi50eXBlKT0zRD0zRC0xfX0pO2IuZGVlcGVhY2goZS5pbnB1dHMsZnVuY3Rpb24oZik9CntpZihm LnR5cGUpe2lmKGYudHlwZT0zRD0zRCJjb25kaXRpb25hbCIpe2YudGVzdF9wYXJhbS5vcHRpb25h bD0zRGZhbHNlfX19KT0KO3ZhciBkPTNEdGhpcztiLmdldCh7dXJsOmdhbGF4eV9jb25maWcucm9v dCsiYXBpL2RhdGF0eXBlcyIsY2FjaGU6dHJ1ZSxzdWNjPQplc3M6ZnVuY3Rpb24oZil7ZC5kYXRh dHlwZXM9M0RmO2QuX21ha2VTZWN0aW9ucyhlLmlucHV0cyk7YS5wcm90b3R5cGUuaW5pdGk9CmFs aXplLmNhbGwoZCxlKX19KX0sX21ha2VTZWN0aW9uczpmdW5jdGlvbihkKXtkW2IudXVpZCgpXT0z RHtsYWJlbDoiRWRpdCBTdD0KZXAgQXR0cmlidXRlcyIsdHlwZToic2VjdGlvbiIsZXhwYW5kOnRo aXMubm9kZS5hbm5vdGF0aW9uLGlucHV0czpbe2xhYmVsOiJBPQpubm90YXRpb24gLyBOb3RlcyIs bmFtZToiYW5ub3RhdGlvbiIsdHlwZToidGV4dCIsYXJlYTp0cnVlLGhlbHA6IkFkZCBhbiBhbm49 Cm90YXRpb24gb3Igbm90ZXMgdG8gdGhpcyBzdGVwOyBhbm5vdGF0aW9ucyBhcmUgYXZhaWxhYmxl IHdoZW4gYSB3b3JrZmxvdyBpcz0KIHZpZXdlZC4iLHZhbHVlOnRoaXMubm9kZS5hbm5vdGF0aW9u fV19O3RoaXMucG9zdF9qb2JfYWN0aW9ucz0zRHRoaXMubm9kZS5wPQpvc3Rfam9iX2FjdGlvbnM7 Zm9yKHZhciBlIGluIHRoaXMubm9kZS5vdXRwdXRfdGVybWluYWxzKXtkW2IudXVpZCgpXT0zRHRo aXM9Ci5fbWFrZVNlY3Rpb24oZSl9fSxfbWFrZVNlY3Rpb246ZnVuY3Rpb24oaCl7dmFyIGc9M0Rb XTtmb3Ioa2V5IGluIHRoaXMuZGF0YT0KdHlwZXMpe2cucHVzaCh7MDp0aGlzLmRhdGF0eXBlc1tr ZXldLDE6dGhpcy5kYXRhdHlwZXNba2V5XX0pfWcuc29ydChmdW5jdGlvPQpuKGosaSl7cmV0dXJu IGoubGFiZWw+aS5sYWJlbD8xOmoubGFiZWw8aS5sYWJlbD8tMTowfSk7Zy51bnNoaWZ0KHswOiJT ZXF1ZW49CmNlcyIsMToiU2VxdWVuY2VzIn0pO2cudW5zaGlmdCh7MDoiUm9hZG1hcHMiLDE6IlJv YWRtYXBzIn0pO2cudW5zaGlmdCh7MDoiTD0KZWF2ZSB1bmNoYW5nZWQiLDE6Ik5vbmUifSk7dmFy IGY9M0R7bGFiZWw6IkVkaXQgU3RlcCBBY3Rpb246ICciK2grIiciLHR5cGU6PQoic2VjdGlvbiIs aW5wdXRzOlt7YWN0aW9uOiJSZW5hbWVEYXRhc2V0QWN0aW9uIixhcmd1bWVudDoibmV3bmFtZSIs bGFiZWw6IlI9CmVuYW1lIGRhdGFzZXQiLHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZToiIixo ZWxwOidUaGlzIGFjdGlvbiB3aWxsIHJlbmFtZT0KIHRoZSByZXN1bHQgZGF0YXNldC4gQ2xpY2sg PGEgaHJlZj0zRCJodHRwczovL3dpa2kuZ2FsYXh5cHJvamVjdC5vcmcvTGVhcm4vPQpBZHZhbmNl ZFdvcmtmbG93L1ZhcmlhYmxlcyI+aGVyZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uJ30se2Fj dGlvbjoiQ2hhbmc9CmVEYXRhdHlwZUFjdGlvbiIsYXJndW1lbnQ6Im5ld3R5cGUiLGxhYmVsOiJD aGFuZ2UgZGF0YXR5cGUiLHR5cGU6InNlbGVjdCIsaT0KZ25vcmU6Ik5vbmUiLG9wdGlvbnM6Zyxo ZWxwOiJUaGlzIGFjdGlvbiB3aWxsIGNoYW5nZSB0aGUgZGF0YXR5cGUgb2YgdGhlIG91PQp0cHV0 IHRvIHRoZSBpbmRpY2F0ZWQgdmFsdWUuIn0se2FjdGlvbjoiVGFnRGF0YXNldEFjdGlvbiIsYXJn dW1lbnQ6InRhZ3MiLGw9CmFiZWw6IlRhZ3MiLHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZToi IixoZWxwOiJUaGlzIGFjdGlvbiB3aWxsIHNldCB0YWdzID0KZm9yIHRoZSBkYXRhc2V0LiJ9LHts YWJlbDoiQXNzaWduIGNvbHVtbnMiLHR5cGU6InNlY3Rpb24iLGlucHV0czpbe2FjdGlvbjoiPQpD b2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiJjaHJvbUNvbCIsbGFiZWw6IkNocm9tIGNvbHVtbiIs dHlwZToidGV4dCIsdmFsdWU9CjoiIixpZ25vcmU6IiJ9LHthY3Rpb246IkNvbHVtblNldEFjdGlv biIsYXJndW1lbnQ6InN0YXJ0Q29sIixsYWJlbDoiU3RhcnQgYz0Kb2x1bW4iLHR5cGU6InRleHQi LHZhbHVlOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0QWN0aW9uIixhcmd1bWVudDoi PQplbmRDb2wiLGxhYmVsOiJFbmQgY29sdW1uIix0eXBlOiJ0ZXh0Iix2YWx1ZToiIixpZ25vcmU6 IiJ9LHthY3Rpb246IkNvbHVtblM9CmV0QWN0aW9uIixhcmd1bWVudDoic3RyYW5kQ29sIixsYWJl bDoiU3RyYW5kIGNvbHVtbiIsdHlwZToidGV4dCIsdmFsdWU6IiIsaT0KZ25vcmU6IiJ9LHthY3Rp b246IkNvbHVtblNldEFjdGlvbiIsYXJndW1lbnQ6Im5hbWVDb2wiLGxhYmVsOiJOYW1lIGNvbHVt biIsPQp0eXBlOiJ0ZXh0Iix2YWx1ZToiIixpZ25vcmU6IiJ9XSxoZWxwOiJUaGlzIGFjdGlvbiB3 aWxsIHNldCBjb2x1bW4gYXNzaWdubWU9Cm50cyBpbiB0aGUgb3V0cHV0IGRhdGFzZXQuIEJsYW5r IGZpZWxkcyBhcmUgaWdub3JlZC4ifSx7YWN0aW9uOiJFbWFpbEFjdGlvbj0KIixsYWJlbDoiRW1h aWwgbm90aWZpY2F0aW9uIix0eXBlOiJib29sZWFuIix2YWx1ZToiZmFsc2UiLGlnbm9yZToiZmFs c2UiLGhlPQpscDoiVGhpcyBhY3Rpb24gd2lsbCBzZW5kIGFuIGVtYWlsIG5vdGlmeWluZyB5b3Ug d2hlbiB0aGUgam9iIGlzIGRvbmUuIixwYXk9CmxvYWQ6e2hvc3Q6d2luZG93LmxvY2F0aW9uLmhv c3R9fSx7YWN0aW9uOiJEZWxldGVJbnRlcm1lZGlhdGVzQWN0aW9uIixsYWJlbD0KOiJEZWxldGUg bm9uLW91dHB1dHMiLHR5cGU6ImJvb2xlYW4iLHZhbHVlOiJmYWxzZSIsaWdub3JlOiJmYWxzZSIs aGVscDoiQWxsPQogbm9uLW91dHB1dCBzdGVwcyBvZiB0aGlzIHdvcmtmbG93IHdpbGwgaGF2ZSBk YXRhc2V0cyBkZWxldGVkIGlmIHRoZXkgYXJlIG49Cm8gbG9uZ2VyIGJlaW5nIHVzZWQgYXMgam9i IGlucHV0cyB3aGVuIHRoZSBqb2IgdGhpcyBhY3Rpb24gaXMgYXR0YWNoZWQgdG8gaT0KcyBmaW5p c2hlZC4gWW91ICptdXN0KiBiZSB1c2luZyB3b3JrZmxvdyBvdXRwdXRzICh0aGUgc25vd2ZsYWtl KSBpbiB5b3VyIHdvPQpya2Zsb3cgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LiJ9XX07dmFy IGQ9M0R0aGlzO2Z1bmN0aW9uIGUobixvKXtvPTNEb3w9CnxbXTtvLnB1c2gobik7Zm9yKHZhciBt IGluIG4uaW5wdXRzKXt2YXIgaz0zRG4uaW5wdXRzW21dO2lmKGsuYWN0aW9uKXtrLm5hbT0KZT0z RCJwamFfXyIraCsiX18iK2suYWN0aW9uO2lmKGsuYXJndW1lbnQpe2submFtZSs9M0QiX18iK2su YXJndW1lbnR9aWYoay5wPQpheWxvYWQpe2Zvcih2YXIgcyBpbiBrLnBheWxvYWQpe3ZhciBxPTNE ay5wYXlsb2FkW3NdO2sucGF5bG9hZFtrLm5hbWUrIl9fIis9CnNdPTNEcTtkZWxldGUgcX19dmFy IHI9M0RkLnBvc3Rfam9iX2FjdGlvbnNbay5hY3Rpb24raF07aWYocil7Zm9yKHZhciBsIGluID0K byl7b1tsXS5leHBhbmQ9M0R0cnVlfWlmKGsuYXJndW1lbnQpe2sudmFsdWU9M0RyLmFjdGlvbl9h cmd1bWVudHMmJnIuYWN0aW9uPQpfYXJndW1lbnRzW2suYXJndW1lbnRdfHxrLnZhbHVlfWVsc2V7 ay52YWx1ZT0zRCJ0cnVlIn19fWlmKGsuaW5wdXRzKXtlKGssby49CnNsaWNlKDApKX19fWUoZik7 cmV0dXJuIGZ9LF9idWlsZE1vZGVsOmZ1bmN0aW9uKCl7R2FsYXh5Lm1vZGFsLnNob3coe3RpdGxl Oj0KIkNvbWluZyBzb29uLi4uIixib2R5OiJUaGlzIGZlYXR1cmUgaGFzIG5vdCBiZWVuIGltcGxl bWVudGVkIHlldC4iLGJ1dHRvbnM6PQp7Q2xvc2U6ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuaGlk ZSgpfX19KX0sX3VwZGF0ZU1vZGVsOmZ1bmN0aW9uKCl7dmFyIGQ9M0Q9CnRoaXM7dmFyIGU9M0R0 aGlzLnRyZWUuZmluYWxpemUoKTtjb25zb2xlLmRlYnVnKCJ0b29scy1mb3JtLXdvcmtmbG93Ojpf cmVmcj0KZXNoRm9ybSgpIC0gUmVmcmVzaGluZyBzdGF0ZXMuIik7Y29uc29sZS5kZWJ1ZyhlKTt2 YXIgZz0zRHRoaXMuZGVmZXJyZWQucmVnPQppc3RlcigpO3ZhciBmPTNEZ2FsYXh5X2NvbmZpZy5y b290KyJ3b3JrZmxvdy9lZGl0b3JfZm9ybV9wb3N0P3Rvb2xfaWQ9M0QiK3Q9Cmhpcy5vcHRpb25z LmlkO2IucmVxdWVzdCh7dHlwZToiR0VUIix1cmw6ZixkYXRhOmUsc3VjY2VzczpmdW5jdGlvbiho KXtkLm5vZD0KZS51cGRhdGVfZmllbGRfZGF0YShoKTtkLmRlZmVycmVkLmRvbmUoZyk7Y29uc29s ZS5kZWJ1ZygidG9vbHMtZm9ybTo6X3JlZnJlPQpzaEZvcm0oKSAtIFN0YXRlcyByZWZyZXNoZWQu Iik7Y29uc29sZS5kZWJ1ZyhoKX0sZXJyb3I6ZnVuY3Rpb24oaCl7ZC5kZWZlcnI9CmVkLmRvbmUo Zyk7Y29uc29sZS5kZWJ1ZygidG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgLSBSZWZyZXNoIHJl cXVlc3QgZmFpbD0KZWQuIik7Y29uc29sZS5kZWJ1ZyhoKX19KX19KTtyZXR1cm57VmlldzpjfX0p OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxzIiwibXZj L3Rvb2xzL3Rvb2xzLWZvcm0tYmFzZSJdLGZ1bmN0aW9uKGIsYSl7dmFyIGM9M0RhPQouZXh0ZW5k KHtpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMubm9kZT0zRHdvcmtmbG93LmFjdGl2ZV9ub2Rl O2lmKCF0aGlzLm49Cm9kZSl7Y29uc29sZS5kZWJ1ZygiRkFJTEVEIC0gdG9vbHMtZm9ybS13b3Jr Zmxvdzppbml0aWFsaXplKCkgLSBOb2RlIG5vdCBmbz0KdW5kIGluIHdvcmtmbG93LiIpO3JldHVy bn10aGlzLndvcmtmbG93PTNEdHJ1ZTt0aGlzLm9wdGlvbnM9M0RlO2IuZGVlcGVhY2goPQplLmlu cHV0cyxmdW5jdGlvbihmKXtpZihmLnR5cGUpe2Yub3B0aW9uYWw9M0QoWyJkYXRhIiwiZGF0YV9o aWRkZW4iLCJoaWRkZW49CiIsImRyaWxsX2Rvd24iXSkuaW5kZXhPZihmLnR5cGUpPTNEPTNELTF9 fSk7Yi5kZWVwZWFjaChlLmlucHV0cyxmdW5jdGlvbihmKT0Ke2lmKGYudHlwZSl7aWYoZi50eXBl PTNEPTNEImNvbmRpdGlvbmFsIil7Zi50ZXN0X3BhcmFtLm9wdGlvbmFsPTNEZmFsc2V9fX0pPQo7 dmFyIGQ9M0R0aGlzO2IuZ2V0KHt1cmw6Z2FsYXh5X2NvbmZpZy5yb290KyJhcGkvZGF0YXR5cGVz IixjYWNoZTp0cnVlLHN1Y2M9CmVzczpmdW5jdGlvbihmKXtkLmRhdGF0eXBlcz0zRGY7ZC5fbWFr ZVNlY3Rpb25zKGUuaW5wdXRzKTthLnByb3RvdHlwZS5pbml0aT0KYWxpemUuY2FsbChkLGUpfX0p fSxfbWFrZVNlY3Rpb25zOmZ1bmN0aW9uKGQpe2RbYi51dWlkKCldPTNEe2xhYmVsOiJFZGl0IFN0 PQplcCBBdHRyaWJ1dGVzIix0eXBlOiJzZWN0aW9uIixleHBhbmQ6dGhpcy5ub2RlLmFubm90YXRp b24saW5wdXRzOlt7bGFiZWw6IkE9Cm5ub3RhdGlvbiAvIE5vdGVzIixuYW1lOiJhbm5vdGF0aW9u Iix0eXBlOiJ0ZXh0IixhcmVhOnRydWUsaGVscDoiQWRkIGFuIGFubj0Kb3RhdGlvbiBvciBub3Rl cyB0byB0aGlzIHN0ZXA7IGFubm90YXRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhIHdvcmtmbG93 IGlzPQogdmlld2VkLiIsdmFsdWU6dGhpcy5ub2RlLmFubm90YXRpb259XX07dGhpcy5wb3N0X2pv Yl9hY3Rpb25zPTNEdGhpcy5ub2RlLnA9Cm9zdF9qb2JfYWN0aW9ucztmb3IodmFyIGUgaW4gdGhp cy5ub2RlLm91dHB1dF90ZXJtaW5hbHMpe2RbYi51dWlkKCldPTNEdGhpcz0KLl9tYWtlU2VjdGlv bihlKX19LF9tYWtlU2VjdGlvbjpmdW5jdGlvbihoKXt2YXIgZz0zRFtdO2ZvcihrZXkgaW4gdGhp cy5kYXRhPQp0eXBlcyl7Zy5wdXNoKHswOnRoaXMuZGF0YXR5cGVzW2tleV0sMTp0aGlzLmRhdGF0 eXBlc1trZXldfSl9Zy5zb3J0KGZ1bmN0aW89Cm4oaixpKXtyZXR1cm4gai5sYWJlbD5pLmxhYmVs PzE6ai5sYWJlbDxpLmxhYmVsPy0xOjB9KTtnLnVuc2hpZnQoezA6IlNlcXVlbj0KY2VzIiwxOiJT ZXF1ZW5jZXMifSk7Zy51bnNoaWZ0KHswOiJSb2FkbWFwcyIsMToiUm9hZG1hcHMifSk7Zy51bnNo aWZ0KHswOiJMPQplYXZlIHVuY2hhbmdlZCIsMToiTm9uZSJ9KTt2YXIgZj0zRHtsYWJlbDoiRWRp dCBTdGVwIEFjdGlvbjogJyIraCsiJyIsdHlwZTo9CiJzZWN0aW9uIixpbnB1dHM6W3thY3Rpb246 IlJlbmFtZURhdGFzZXRBY3Rpb24iLGFyZ3VtZW50OiJuZXduYW1lIixsYWJlbDoiUj0KZW5hbWUg ZGF0YXNldCIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdub3JlOiIiLGhlbHA6J1RoaXMgYWN0aW9u IHdpbGwgcmVuYW1lPQogdGhlIHJlc3VsdCBkYXRhc2V0LiBDbGljayA8YSBocmVmPTNEImh0dHBz Oi8vd2lraS5nYWxheHlwcm9qZWN0Lm9yZy9MZWFybi89CkFkdmFuY2VkV29ya2Zsb3cvVmFyaWFi bGVzIj5oZXJlPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nfSx7YWN0aW9uOiJDaGFuZz0KZURh dGF0eXBlQWN0aW9uIixhcmd1bWVudDoibmV3dHlwZSIsbGFiZWw6IkNoYW5nZSBkYXRhdHlwZSIs dHlwZToic2VsZWN0IixpPQpnbm9yZToiTm9uZSIsb3B0aW9uczpnLGhlbHA6IlRoaXMgYWN0aW9u IHdpbGwgY2hhbmdlIHRoZSBkYXRhdHlwZSBvZiB0aGUgb3U9CnRwdXQgdG8gdGhlIGluZGljYXRl ZCB2YWx1ZS4ifSx7YWN0aW9uOiJUYWdEYXRhc2V0QWN0aW9uIixhcmd1bWVudDoidGFncyIsbD0K YWJlbDoiVGFncyIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdub3JlOiIiLGhlbHA6IlRoaXMgYWN0 aW9uIHdpbGwgc2V0IHRhZ3MgPQpmb3IgdGhlIGRhdGFzZXQuIn0se2xhYmVsOiJBc3NpZ24gY29s dW1ucyIsdHlwZToic2VjdGlvbiIsaW5wdXRzOlt7YWN0aW9uOiI9CkNvbHVtblNldEFjdGlvbiIs YXJndW1lbnQ6ImNocm9tQ29sIixsYWJlbDoiQ2hyb20gY29sdW1uIix0eXBlOiJ0ZXh0Iix2YWx1 ZT0KOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0QWN0aW9uIixhcmd1bWVudDoic3Rh cnRDb2wiLGxhYmVsOiJTdGFydCBjPQpvbHVtbiIsdHlwZToidGV4dCIsdmFsdWU6IiIsaWdub3Jl OiIifSx7YWN0aW9uOiJDb2x1bW5TZXRBY3Rpb24iLGFyZ3VtZW50OiI9CmVuZENvbCIsbGFiZWw6 IkVuZCBjb2x1bW4iLHR5cGU6InRleHQiLHZhbHVlOiIiLGlnbm9yZToiIn0se2FjdGlvbjoiQ29s dW1uUz0KZXRBY3Rpb24iLGFyZ3VtZW50OiJzdHJhbmRDb2wiLGxhYmVsOiJTdHJhbmQgY29sdW1u Iix0eXBlOiJ0ZXh0Iix2YWx1ZToiIixpPQpnbm9yZToiIn0se2FjdGlvbjoiQ29sdW1uU2V0QWN0 aW9uIixhcmd1bWVudDoibmFtZUNvbCIsbGFiZWw6Ik5hbWUgY29sdW1uIiw9CnR5cGU6InRleHQi LHZhbHVlOiIiLGlnbm9yZToiIn1dLGhlbHA6IlRoaXMgYWN0aW9uIHdpbGwgc2V0IGNvbHVtbiBh c3NpZ25tZT0KbnRzIGluIHRoZSBvdXRwdXQgZGF0YXNldC4gQmxhbmsgZmllbGRzIGFyZSBpZ25v cmVkLiJ9LHthY3Rpb246IkVtYWlsQWN0aW9uPQoiLGxhYmVsOiJFbWFpbCBub3RpZmljYXRpb24i LHR5cGU6ImJvb2xlYW4iLHZhbHVlOiJmYWxzZSIsaWdub3JlOiJmYWxzZSIsaGU9CmxwOiJUaGlz IGFjdGlvbiB3aWxsIHNlbmQgYW4gZW1haWwgbm90aWZ5aW5nIHlvdSB3aGVuIHRoZSBqb2IgaXMg ZG9uZS4iLHBheT0KbG9hZDp7aG9zdDp3aW5kb3cubG9jYXRpb24uaG9zdH19LHthY3Rpb246IkRl bGV0ZUludGVybWVkaWF0ZXNBY3Rpb24iLGxhYmVsPQo6IkRlbGV0ZSBub24tb3V0cHV0cyIsdHlw ZToiYm9vbGVhbiIsdmFsdWU6ImZhbHNlIixpZ25vcmU6ImZhbHNlIixoZWxwOiJBbGw9CiBub24t b3V0cHV0IHN0ZXBzIG9mIHRoaXMgd29ya2Zsb3cgd2lsbCBoYXZlIGRhdGFzZXRzIGRlbGV0ZWQg aWYgdGhleSBhcmUgbj0KbyBsb25nZXIgYmVpbmcgdXNlZCBhcyBqb2IgaW5wdXRzIHdoZW4gdGhl IGpvYiB0aGlzIGFjdGlvbiBpcyBhdHRhY2hlZCB0byBpPQpzIGZpbmlzaGVkLiBZb3UgKm11c3Qq IGJlIHVzaW5nIHdvcmtmbG93IG91dHB1dHMgKHRoZSBzbm93Zmxha2UpIGluIHlvdXIgd289CnJr ZmxvdyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3QuIn1dfTt2YXIgZD0zRHRoaXM7ZnVuY3Rp b24gZShuLG8pe289M0RvfD0KfFtdO28ucHVzaChuKTtmb3IodmFyIG0gaW4gbi5pbnB1dHMpe3Zh ciBrPTNEbi5pbnB1dHNbbV07aWYoay5hY3Rpb24pe2submFtPQplPTNEInBqYV9fIitoKyJfXyIr ay5hY3Rpb247aWYoay5hcmd1bWVudCl7ay5uYW1lKz0zRCJfXyIray5hcmd1bWVudH1pZihrLnA9 CmF5bG9hZCl7Zm9yKHZhciBzIGluIGsucGF5bG9hZCl7dmFyIHE9M0RrLnBheWxvYWRbc107ay5w YXlsb2FkW2submFtZSsiX18iKz0Kc109M0RxO2RlbGV0ZSBxfX12YXIgcj0zRGQucG9zdF9qb2Jf YWN0aW9uc1trLmFjdGlvbitoXTtpZihyKXtmb3IodmFyIGwgaW4gPQpvKXtvW2xdLmV4cGFuZD0z RHRydWV9aWYoay5hcmd1bWVudCl7ay52YWx1ZT0zRHIuYWN0aW9uX2FyZ3VtZW50cyYmci5hY3Rp b249Cl9hcmd1bWVudHNbay5hcmd1bWVudF18fGsudmFsdWV9ZWxzZXtrLnZhbHVlPTNEInRydWUi fX19aWYoay5pbnB1dHMpe2UoayxvLj0Kc2xpY2UoMCkpfX19ZShmKTtyZXR1cm4gZn0sX2J1aWxk TW9kZWw6ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuc2hvdyh7dGl0bGU6PQoiQ29taW5nIHNvb24u Li4iLGJvZHk6IlRoaXMgZmVhdHVyZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LiIsYnV0 dG9uczo9CntDbG9zZTpmdW5jdGlvbigpe0dhbGF4eS5tb2RhbC5oaWRlKCl9fX0pfSxfdXBkYXRl TW9kZWw6ZnVuY3Rpb24oKXt2YXIgZD0zRD0KdGhpczt2YXIgZT0zRHRoaXMudHJlZS5maW5hbGl6 ZSgpO2NvbnNvbGUuZGVidWcoInRvb2xzLWZvcm0td29ya2Zsb3c6Ol9yZWZyPQplc2hGb3JtKCkg LSBSZWZyZXNoaW5nIHN0YXRlcy4iKTtjb25zb2xlLmRlYnVnKGUpO3ZhciBnPTNEdGhpcy5kZWZl cnJlZC5yZWc9CmlzdGVyKCk7dmFyIGY9M0RnYWxheHlfY29uZmlnLnJvb3QrIndvcmtmbG93L2Vk aXRvcl9mb3JtX3Bvc3Q/dG9vbF9pZD0zRCIrdD0KaGlzLm9wdGlvbnMuaWQrIiZfX2lzX2R5bmFt aWNfXz0zREZhbHNlIjtiLnJlcXVlc3Qoe3R5cGU6IkdFVCIsdXJsOmYsZGF0YTplPQosc3VjY2Vz czpmdW5jdGlvbihoKXtkLm5vZGUudXBkYXRlX2ZpZWxkX2RhdGEoaCk7ZC5fZXJyb3JzKGgmJmgu dG9vbF9tb2RlbCk9CjtkLmRlZmVycmVkLmRvbmUoZyk7Y29uc29sZS5kZWJ1ZygidG9vbHMtZm9y bTo6X3JlZnJlc2hGb3JtKCkgLSBTdGF0ZXMgcmVmcj0KZXNoZWQuIik7Y29uc29sZS5kZWJ1Zyho KX0sZXJyb3I6ZnVuY3Rpb24oaCl7ZC5kZWZlcnJlZC5kb25lKGcpO2NvbnNvbGUuZGViPQp1Zygi dG9vbHMtZm9ybTo6X3JlZnJlc2hGb3JtKCkgLSBSZWZyZXNoIHJlcXVlc3QgZmFpbGVkLiIpO2Nv bnNvbGUuZGVidWcoaCk9Cn19KX19KTtyZXR1cm57VmlldzpjfX0pOwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKCmRpZmYgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJl NmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgc3RhdGlj L3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy1pbnB1dC5qcwotLS0gYS9zdGF0aWMvc2Ny aXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xzLWlucHV0LmpzCisrKyBiL3N0YXRpYy9zY3JpcHRz L3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtaW5wdXQuanMKQEAgLTEsMSArMSwxIEBACi1kZWZpbmUo W10sZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVu Y3Rpb24oZCxjKT0Ke3RoaXMuYXBwPTNEZDt0aGlzLmZpZWxkPTNEYy5maWVsZDt0aGlzLmRlZmF1 bHR2YWx1ZT0zRGMuZGVmYXVsdHZhbHVlO3RoaXMuPQpzZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRl KGMpKTt0aGlzLiRmaWVsZD0zRHRoaXMuJGVsLmZpbmQoIi51aS10YWJsZS1mb3JtLWY9CmllbGQi KTt0aGlzLiR0aXRsZV9vcHRpb25hbD0zRHRoaXMuJGVsLmZpbmQoIi51aS10YWJsZS1mb3JtLXRp dGxlLW9wdGlvbmFsIj0KKTt0aGlzLiRlcnJvcl90ZXh0PTNEdGhpcy4kZWwuZmluZCgiLnVpLXRh YmxlLWZvcm0tZXJyb3ItdGV4dCIpO3RoaXMuJGVycm9yPQo9M0R0aGlzLiRlbC5maW5kKCIudWkt dGFibGUtZm9ybS1lcnJvciIpO3RoaXMuJGZpZWxkLnByZXBlbmQodGhpcy5maWVsZC4kZWw9Cik7 dGhpcy5maWVsZC5za2lwPTNEZmFsc2U7dmFyIGI9M0R0aGlzLmZpZWxkLnZhbHVlJiZ0aGlzLmZp ZWxkLnZhbHVlKCk7dGhpcz0KLmZpZWxkLnNraXA9M0RCb29sZWFuKGMub3B0aW9uYWwmJigodGhp cy5maWVsZC52YWxpZGF0ZSYmIXRoaXMuZmllbGQudmFsaWRhPQp0ZSgpKXx8IWJ8fChiPTNEPTNE dGhpcy5kZWZhdWx0dmFsdWUpfHwoTnVtYmVyKGIpPTNEPTNETnVtYmVyKHRoaXMuZGVmYXVsdHY9 CmFsdWUpKXx8KEpTT04uc3RyaW5naWZ5KGIpPTNEPTNESlNPTi5zdHJpbmdpZnkodGhpcy5kZWZh dWx0dmFsdWUpKSkpO3RoaXMuXz0KcmVmcmVzaCgpO3ZhciBhPTNEdGhpczt0aGlzLiR0aXRsZV9v cHRpb25hbC5vbigiY2xpY2siLGZ1bmN0aW9uKCl7YS5maWVsZC5zPQpraXA9M0QhYS5maWVsZC5z a2lwO2EuX3JlZnJlc2goKX0pfSxlcnJvcjpmdW5jdGlvbihhKXt0aGlzLiRlcnJvcl90ZXh0Lmh0 bWw9CihhKTt0aGlzLiRlcnJvci5mYWRlSW4oKTt0aGlzLiRlbC5hZGRDbGFzcygidWktZXJyb3Ii KX0scmVzZXQ6ZnVuY3Rpb24oKXt0aD0KaXMuJGVycm9yLmhpZGUoKTt0aGlzLiRlbC5yZW1vdmVD bGFzcygidWktZXJyb3IiKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXtpZighPQp0aGlzLmZpZWxkLnNr aXApe3RoaXMuJGZpZWxkLmZhZGVJbigiZmFzdCIpO3RoaXMuJHRpdGxlX29wdGlvbmFsLmh0bWwo IkRpc2E9CmJsZSIpfWVsc2V7dGhpcy4kZmllbGQuaGlkZSgpO3RoaXMuJHRpdGxlX29wdGlvbmFs Lmh0bWwoIkVuYWJsZSIpO3RoaXMuZmllbD0KZC52YWx1ZSYmdGhpcy5maWVsZC52YWx1ZSh0aGlz LmRlZmF1bHR2YWx1ZSl9dGhpcy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfSxfPQp0ZW1wbGF0ZTpm dW5jdGlvbihhKXt2YXIgYj0zRCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZvcm0tZWxlbWVudCI+ PGRpdiBjbGE9CnNzPTNEInVpLXRhYmxlLWZvcm0tZXJyb3IgdWktZXJyb3IiPjxzcGFuIGNsYXNz PTNEImZhIGZhLWFycm93LWRvd24iLz48c3Bhbj0KIGNsYXNzPTNEInVpLXRhYmxlLWZvcm0tZXJy b3ItdGV4dCIvPjwvZGl2PjxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS10aXRsPQplLXN0cm9u ZyI+JztpZihhLm9wdGlvbmFsKXtiKz0zRGEubGFiZWwrJzxzcGFuPiZuYnNwWzxzcGFuIGNsYXNz PTNEInVpLXRhYmw9CmUtZm9ybS10aXRsZS1vcHRpb25hbCIvPl08L3NwYW4+J31lbHNle2IrPTNE YS5sYWJlbH1iKz0zRCc8L2Rpdj48ZGl2IGNsYXNzPQo9M0QidWktdGFibGUtZm9ybS1maWVsZCI+ JztpZihhLmhlbHApe2IrPTNEJzxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS1pbmY9Cm8iPicr YS5oZWxwKyI8L2Rpdj4ifWIrPTNEIjwvZGl2PjwvZGl2PiI7cmV0dXJuIGJ9fSl9KTsKXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gQmFja2Jv bmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZCxjKT0Ke3RoaXMuYXBwPTNEZDt0 aGlzLmZpZWxkPTNEYy5maWVsZDt0aGlzLmRlZmF1bHR2YWx1ZT0zRGMuZGVmYXVsdHZhbHVlO3Ro aXMuPQpzZXRFbGVtZW50KHRoaXMuX3RlbXBsYXRlKGMpKTt0aGlzLiRmaWVsZD0zRHRoaXMuJGVs LmZpbmQoIi51aS10YWJsZS1mb3JtLWY9CmllbGQiKTt0aGlzLiR0aXRsZV9vcHRpb25hbD0zRHRo aXMuJGVsLmZpbmQoIi51aS10YWJsZS1mb3JtLXRpdGxlLW9wdGlvbmFsIj0KKTt0aGlzLiRlcnJv cl90ZXh0PTNEdGhpcy4kZWwuZmluZCgiLnVpLXRhYmxlLWZvcm0tZXJyb3ItdGV4dCIpO3RoaXMu JGVycm9yPQo9M0R0aGlzLiRlbC5maW5kKCIudWktdGFibGUtZm9ybS1lcnJvciIpO3RoaXMuJGZp ZWxkLnByZXBlbmQodGhpcy5maWVsZC4kZWw9Cik7dGhpcy5maWVsZC5za2lwPTNEZmFsc2U7dmFy IGI9M0R0aGlzLmZpZWxkLnZhbHVlJiZ0aGlzLmZpZWxkLnZhbHVlKCk7dGhpcz0KLmZpZWxkLnNr aXA9M0RCb29sZWFuKGMub3B0aW9uYWwmJigodGhpcy5maWVsZC52YWxpZGF0ZSYmIXRoaXMuZmll bGQudmFsaWRhPQp0ZSgpKXx8IWJ8fChiPTNEPTNEdGhpcy5kZWZhdWx0dmFsdWUpfHwoTnVtYmVy KGIpPTNEPTNETnVtYmVyKHRoaXMuZGVmYXVsdHY9CmFsdWUpKXx8KEpTT04uc3RyaW5naWZ5KGIp PTNEPTNESlNPTi5zdHJpbmdpZnkodGhpcy5kZWZhdWx0dmFsdWUpKSkpO3RoaXMuXz0KcmVmcmVz aCgpO3ZhciBhPTNEdGhpczt0aGlzLiR0aXRsZV9vcHRpb25hbC5vbigiY2xpY2siLGZ1bmN0aW9u KCl7YS5maWVsZC5zPQpraXA9M0QhYS5maWVsZC5za2lwO2EuX3JlZnJlc2goKX0pfSxlcnJvcjpm dW5jdGlvbihhKXtpZighdGhpcy5maWVsZC5za2lwKXs9CnRoaXMuJGVycm9yX3RleHQuaHRtbChh KTt0aGlzLiRlcnJvci5mYWRlSW4oImZhc3QiKTt0aGlzLiRlbC5hZGRDbGFzcygidWktZT0KcnJv ciIpfX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLiRlcnJvci5oaWRlKCk7dGhpcy4kZWwucmVtb3Zl Q2xhc3MoInVpLWVycm9yPQoiKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXtpZighdGhpcy5maWVsZC5z a2lwKXt0aGlzLiRmaWVsZC5mYWRlSW4oImZhc3QiKTt0aGk9CnMuJHRpdGxlX29wdGlvbmFsLmh0 bWwoIkRpc2FibGUiKX1lbHNle3RoaXMucmVzZXQoKTt0aGlzLiRmaWVsZC5oaWRlKCk7dGhpcz0K LiR0aXRsZV9vcHRpb25hbC5odG1sKCJFbmFibGUiKTt0aGlzLmZpZWxkLnZhbHVlJiZ0aGlzLmZp ZWxkLnZhbHVlKHRoaXMuZGVmPQphdWx0dmFsdWUpfXRoaXMuYXBwLnRyaWdnZXIoInJlZnJlc2gi KX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPTNEJzxkaXY9CiBjbGFzcz0zRCJ1aS10YWJs ZS1mb3JtLWVsZW1lbnQiPjxkaXYgY2xhc3M9M0QidWktdGFibGUtZm9ybS1lcnJvciB1aS1lcnJv cj0KIj48c3BhbiBjbGFzcz0zRCJmYSBmYS1hcnJvdy1kb3duIi8+PHNwYW4gY2xhc3M9M0QidWkt dGFibGUtZm9ybS1lcnJvci10ZXh0PQoiLz48L2Rpdj48ZGl2IGNsYXNzPTNEInVpLXRhYmxlLWZv cm0tdGl0bGUtc3Ryb25nIj4nO2lmKGEub3B0aW9uYWwpe2IrPTNEYS49CmxhYmVsKyc8c3Bhbj4m bmJzcFs8c3BhbiBjbGFzcz0zRCJ1aS10YWJsZS1mb3JtLXRpdGxlLW9wdGlvbmFsIi8+XTwvc3Bh bj4nfT0KZWxzZXtiKz0zRGEubGFiZWx9Yis9M0QnPC9kaXY+PGRpdiBjbGFzcz0zRCJ1aS10YWJs ZS1mb3JtLWZpZWxkIj4nO2lmKGEuaGVsPQpwKXtiKz0zRCc8ZGl2IGNsYXNzPTNEInVpLXRhYmxl LWZvcm0taW5mbyI+JythLmhlbHArIjwvZGl2PiJ9Yis9M0QiPC9kaXY+PC89CmRpdj4iO3JldHVy biBifX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciA4YTcwNDU3OTJj N2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThh PQpiOGY4ZGMwMmJhMzY5OTc2ZiBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xzL3Rvb2xz LXNlY3Rpb24uanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29scy1z ZWN0aW9uLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvdG9vbHMvdG9vbHMtc2Vj dGlvbi5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbInV0aWxzL3V0aWxzIiwibXZjL3VpL3Vp LXRhYmxlIiwibXZjL3VpL3VpLW1pc2MiLCJtdmMvdWkvdWktcG9ydGxlPQp0IiwibXZjL3Rvb2xz L3Rvb2xzLXJlcGVhdCIsIm12Yy90b29scy90b29scy1zZWxlY3QtY29udGVudCIsIm12Yy90b29s cy90b289CmxzLWlucHV0Il0sZnVuY3Rpb24oZSxiLGgsZCxjLGEsZil7dmFyIGc9M0RCYWNrYm9u ZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZT0KOmZ1bmN0aW9uKGosaSl7dGhpcy5hcHA9M0RqO3Ro aXMuaW5wdXRzPTNEaS5pbnB1dHM7aS5jbHNfdHI9M0Qic2VjdGlvbi1yb3ciPQo7dGhpcy50YWJs ZT0zRG5ldyBiLlZpZXcoaSk7dGhpcy5zZXRFbGVtZW50KHRoaXMudGFibGUuJGVsKTt0aGlzLnJl bmRlcigpfSw9CnJlbmRlcjpmdW5jdGlvbigpe3RoaXMudGFibGUuZGVsQWxsKCk7Zm9yKHZhciBq IGluIHRoaXMuaW5wdXRzKXt0aGlzLmFkZCh0aD0KaXMuaW5wdXRzW2pdKX19LGFkZDpmdW5jdGlv bihrKXt2YXIgaj0zRHRoaXM7dmFyIGk9M0RqUXVlcnkuZXh0ZW5kKHRydWUse30sPQprKTtpLmlk PTNEay5pZD0zRGUudXVpZCgpO3RoaXMuYXBwLmlucHV0X2xpc3RbaS5pZF09M0RpO3ZhciBsPTNE aS50eXBlO3N3aXQ9CmNoKGwpe2Nhc2UiY29uZGl0aW9uYWwiOnRoaXMuX2FkZENvbmRpdGlvbmFs KGkpO2JyZWFrO2Nhc2UicmVwZWF0Ijp0aGlzLl9hZD0KZFJlcGVhdChpKTticmVhaztjYXNlInNl Y3Rpb24iOnRoaXMuX2FkZFNlY3Rpb24oaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9hZGRSPQpvdyhp KX19LF9hZGRDb25kaXRpb25hbDpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7ai50ZXN0X3BhcmFt LmlkPTNEai5pZDt2YXI9CiBuPTNEdGhpcy5fYWRkUm93KGoudGVzdF9wYXJhbSk7bi5vcHRpb25z Lm9uY2hhbmdlPTNEZnVuY3Rpb24odyl7dmFyIHY9M0RrLj0KYXBwLnRyZWUubWF0Y2hDYXNlKGos dyk7Zm9yKHZhciB1IGluIGouY2FzZXMpe3ZhciBxPTNEai5jYXNlc1t1XTt2YXIgdD0zRGouPQpp ZCsiLXNlY3Rpb24tIit1O3ZhciBwPTNEay50YWJsZS5nZXQodCk7dmFyIHM9M0RmYWxzZTtmb3Io dmFyIHIgaW4gcS5pbnB1dHM9Cil7aWYoIXEuaW5wdXRzW3JdLmhpZGRlbil7cz0zRHRydWU7YnJl YWt9fWlmKHU9M0Q9M0R2JiZzKXtwLmZhZGVJbigiZmFzdCIpfT0KZWxzZXtwLmhpZGUoKX19ay5h cHAudHJpZ2dlcigicmVmcmVzaCIpfTtmb3IodmFyIG0gaW4gai5jYXNlcyl7dmFyIGw9M0RqLmlk PQorIi1zZWN0aW9uLSIrbTt2YXIgbz0zRG5ldyBnKHRoaXMuYXBwLHtpbnB1dHM6ai5jYXNlc1tt XS5pbnB1dHMsY2xzOiJ1aS10YWI9CmxlLXBsYWluIn0pO28uJGVsLmFkZENsYXNzKCJ1aS10YWJs ZS1mb3JtLXNlY3Rpb24iKTt0aGlzLnRhYmxlLmFkZChvLiRlbCk7dD0KaGlzLnRhYmxlLmFwcGVu ZChsKX1uLnRyaWdnZXIoImNoYW5nZSIpfSxfYWRkUmVwZWF0OmZ1bmN0aW9uKHApe3ZhciBzPTNE dGhpPQpzO3ZhciBxPTNEMDtmdW5jdGlvbiBuKGksdSl7dmFyIHQ9M0RwLmlkKyItc2VjdGlvbi0i KyhxKyspO3ZhciB2PTNEbnVsbDtpZig9CnUpe3Y9M0RmdW5jdGlvbigpe2wuZGVsKHQpO2wucmV0 aXRsZShwLnRpdGxlKTtzLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fXZhcj0KIHc9M0RuZXcgZyhz LmFwcCx7aW5wdXRzOmksY2xzOiJ1aS10YWJsZS1wbGFpbiJ9KTtsLmFkZCh7aWQ6dCx0aXRsZTpw LnRpdGxlPQosJGVsOncuJGVsLG9uZGVsOnZ9KTtsLnJldGl0bGUocC50aXRsZSl9dmFyIGw9M0Ru ZXcgYy5WaWV3KHt0aXRsZV9uZXc6cC50aXQ9CmxlLG1heDpwLm1heCxvbm5ldzpmdW5jdGlvbigp e24ocC5pbnB1dHMsdHJ1ZSk7cy5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pOz0KdmFyIGo9M0Rw Lm1pbjt2YXIgcj0zRF8uc2l6ZShwLmNhY2hlKTtmb3IodmFyIG09M0QwO208TWF0aC5tYXgocixq KTttKyspe3ZhPQpyIG89M0RudWxsO2lmKG08cil7bz0zRHAuY2FjaGVbbV19ZWxzZXtvPTNEcC5p bnB1dHN9bihvLG0+PTNEail9dmFyIGs9M0RuZXc9CiBmKHRoaXMuYXBwLHtsYWJlbDpwLnRpdGxl LGhlbHA6cC5oZWxwLGZpZWxkOmx9KTtrLiRlbC5hZGRDbGFzcygidWktdGFibGUtZj0Kb3JtLXNl Y3Rpb24iKTt0aGlzLnRhYmxlLmFkZChrLiRlbCk7dGhpcy50YWJsZS5hcHBlbmQocC5pZCl9LF9h ZGRTZWN0aW9uOmZ1PQpuY3Rpb24oaSl7dmFyIGo9M0R0aGlzO3ZhciBuPTNEbmV3IGcoai5hcHAs e2lucHV0czppLmlucHV0cyxjbHM6InVpLXRhYmxlLXA9CmxhaW4ifSk7dmFyIG09M0RuZXcgaC5C dXR0b25JY29uKHtpY29uOiJmYS1leWUtc2xhc2giLHRvb2x0aXA6IlNob3cvaGlkZSBzZT0KY3Rp b24iLGNsczoidWktYnV0dG9uLWljb24tcGxhaW4ifSk7dmFyIGw9M0RuZXcgZC5WaWV3KHt0aXRs ZTppLmxhYmVsLGNsczoiPQp1aS1wb3J0bGV0LXNlY3Rpb24iLG9wZXJhdGlvbnM6e2J1dHRvbl92 aXNpYmxlOm19fSk7bC5hcHBlbmQobi4kZWwpO3ZhciBrPQo9M0RmYWxzZTtsLiRjb250ZW50Lmhp ZGUoKTtsLiRoZWFkZXIuY3NzKCJjdXJzb3IiLCJwb2ludGVyIik7bC4kaGVhZGVyLm9uKCI9CmNs aWNrIixmdW5jdGlvbigpe2lmKGspe2s9M0RmYWxzZTtsLiRjb250ZW50LmhpZGUoKTttLnNldElj b24oImZhLWV5ZS1zbGFzaD0KIil9ZWxzZXtrPTNEdHJ1ZTtsLiRjb250ZW50LmZhZGVJbigiZmFz dCIpO20uc2V0SWNvbigiZmEtZXllIil9fSk7aWYoaS5leHBhPQpuZCl7bC4kaGVhZGVyLnRyaWdn ZXIoImNsaWNrIil9dGhpcy50YWJsZS5hZGQobC4kZWwpO3RoaXMudGFibGUuYXBwZW5kKGkuaWQ9 Cil9LF9hZGRSb3c6ZnVuY3Rpb24oaSl7dmFyIGw9M0RpLmlkO3ZhciBqPTNEdGhpcy5fY3JlYXRl RmllbGQoaSk7dGhpcy5hcHAuZj0KaWVsZF9saXN0W2xdPTNEajt2YXIgaz0zRG5ldyBmKHRoaXMu YXBwLHtsYWJlbDppLmxhYmVsLGRlZmF1bHR2YWx1ZTppLmRlZmF1PQpsdHZhbHVlLG9wdGlvbmFs Omkub3B0aW9uYWwsaGVscDppLmhlbHAsZmllbGQ6an0pO3RoaXMuYXBwLmVsZW1lbnRfbGlzdFts XT0KPTNEazt0aGlzLnRhYmxlLmFkZChrLiRlbCk7dGhpcy50YWJsZS5hcHBlbmQobCk7aWYoaS5o aWRkZW4pe3RoaXMudGFibGUuZ2V0PQoobCkuaGlkZSgpfXJldHVybiBqfSxfY3JlYXRlRmllbGQ6 ZnVuY3Rpb24oaSl7dmFyIGo9M0RudWxsO3N3aXRjaChpLnR5cGUpe2M9CmFzZSJ0ZXh0IjpqPTNE dGhpcy5fZmllbGRUZXh0KGkpO2JyZWFrO2Nhc2Uic2VsZWN0IjpqPTNEdGhpcy5fZmllbGRTZWxl Y3QoaT0KKTticmVhaztjYXNlImRhdGEiOmo9M0R0aGlzLl9maWVsZERhdGEoaSk7YnJlYWs7Y2Fz ZSJkYXRhX2NvbGxlY3Rpb24iOmo9M0R0PQpoaXMuX2ZpZWxkRGF0YShpKTticmVhaztjYXNlImRh dGFfY29sdW1uIjppLmVycm9yX3RleHQ9M0QiTWlzc2luZyBjb2x1bW5zIGk9Cm4gcmVmZXJlbmNl ZCBkYXRhc2V0LiI7aj0zRHRoaXMuX2ZpZWxkU2VsZWN0KGkpO2JyZWFrO2Nhc2UiaGlkZGVuIjpq PTNEdGhpcz0KLl9maWVsZEhpZGRlbihpKTticmVhaztjYXNlImhpZGRlbl9kYXRhIjpqPTNEdGhp cy5fZmllbGRIaWRkZW4oaSk7YnJlYWs7Y2FzPQplImludGVnZXIiOmo9M0R0aGlzLl9maWVsZFNs aWRlcihpKTticmVhaztjYXNlImZsb2F0IjpqPTNEdGhpcy5fZmllbGRTbGlkZXI9CihpKTticmVh aztjYXNlImJvb2xlYW4iOmo9M0R0aGlzLl9maWVsZEJvb2xlYW4oaSk7YnJlYWs7Y2FzZSJnZW5v bWVidWlsZCI6aT0KLnNlYXJjaGFibGU9M0R0cnVlO2o9M0R0aGlzLl9maWVsZFNlbGVjdChpKTti cmVhaztjYXNlImRyaWxsX2Rvd24iOmo9M0R0aGlzPQouX2ZpZWxkRHJpbGxkb3duKGkpO2JyZWFr O2Nhc2UiYmFzZXVybCI6aj0zRHRoaXMuX2ZpZWxkSGlkZGVuKGkpO2JyZWFrO2RlZmE9CnVsdDp0 aGlzLmFwcC5pbmNvbXBhdGlibGU9M0R0cnVlO2lmKGkub3B0aW9ucyl7aj0zRHRoaXMuX2ZpZWxk U2VsZWN0KGkpfWVscz0KZXtqPTNEdGhpcy5fZmllbGRUZXh0KGkpfWNvbnNvbGUuZGVidWcoInRv b2xzLWZvcm06Ol9hZGRSb3coKSA6IEF1dG8gbWF0Y2hlPQpkIGZpZWxkIHR5cGUgKCIraS50eXBl KyIpLiIpfWlmKGkudmFsdWUhPTNEPTNEdW5kZWZpbmVkKXtqLnZhbHVlKGkudmFsdWUpfXI9CmV0 dXJuIGp9LF9maWVsZERhdGE6ZnVuY3Rpb24oaSl7aWYodGhpcy5hcHAud29ya2Zsb3cpe3ZhciBr PTNEZS50ZXh0aWZ5KGkuZT0KeHRlbnNpb25zLnRvU3RyaW5nKCkpO2kuaW5mbz0zRCJEYXRhIGlu cHV0ICciK2kubmFtZSsiJyAoIitrKyIpIjtyZXR1cm4gdGhpPQpzLl9maWVsZEhpZGRlbihpKX12 YXIgaj0zRHRoaXM7cmV0dXJuIG5ldyBhLlZpZXcodGhpcy5hcHAse2lkOiJmaWVsZC0iK2kuaWQ9 CixleHRlbnNpb25zOmkuZXh0ZW5zaW9ucyxtdWx0aXBsZTppLm11bHRpcGxlLHR5cGU6aS50eXBl LGRhdGE6aS5vcHRpb25zLG9uYz0KaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZy ZXNoIil9fSl9LF9maWVsZFNlbGVjdDpmdW5jdGlvbihqKXtpZih0PQpoaXMuYXBwLndvcmtmbG93 JiZqLmlzX2R5bmFtaWMpe2lmKCFlLnZhbGlkYXRlKGoudmFsdWUpKXtqLnZhbHVlPTNEIiJ9cmV0 dXI9Cm4gdGhpcy5fZmllbGRUZXh0KGopfXZhciBsPTNEW107Zm9yKHZhciBtIGluIGoub3B0aW9u cyl7dmFyIG49M0RqLm9wdGlvbnNbbT0KXTtsLnB1c2goe2xhYmVsOm5bMF0sdmFsdWU6blsxXX0p fXZhciBvPTNEaC5TZWxlY3Q7c3dpdGNoKGouZGlzcGxheSl7Y2FzZSJjPQpoZWNrYm94ZXMiOm89 M0RoLkNoZWNrYm94O2JyZWFrO2Nhc2UicmFkaW8iOm89M0RoLlJhZGlvO2JyZWFrfXZhciBrPTNE dGhpczs9CnJldHVybiBuZXcgby5WaWV3KHtpZDoiZmllbGQtIitqLmlkLGRhdGE6bCxlcnJvcl90 ZXh0OmouZXJyb3JfdGV4dHx8Ik5vIG9wdD0KaW9ucyBhdmFpbGFibGUiLG11bHRpcGxlOmoubXVs dGlwbGUsc2VhcmNoYWJsZTpqLnNlYXJjaGFibGUsb25jaGFuZ2U6ZnVuY3RpPQpvbigpe2suYXBw LnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2ZpZWxkRHJpbGxkb3duOmZ1bmN0aW9uKGkpe3ZhciBq PTNEdGhpczs9CnJldHVybiBuZXcgaC5EcmlsbGRvd24uVmlldyh7aWQ6ImZpZWxkLSIraS5pZCxk YXRhOmkub3B0aW9ucyxkaXNwbGF5OmkuZGlzcD0KbGF5LG9uY2hhbmdlOmZ1bmN0aW9uKCl7ai5h cHAudHJpZ2dlcigicmVmcmVzaCIpfX0pfSxfZmllbGRUZXh0OmZ1bmN0aW9uKGkpPQp7dmFyIGo9 M0R0aGlzO3JldHVybiBuZXcgaC5JbnB1dCh7aWQ6ImZpZWxkLSIraS5pZCxhcmVhOmkuYXJlYSxv bmNoYW5nZTpmdW49CmN0aW9uKCl7ai5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0pfSxfZmllbGRT bGlkZXI6ZnVuY3Rpb24oaSl7dmFyIGo9M0R0aGlzOz0KcmV0dXJuIG5ldyBoLlNsaWRlci5WaWV3 KHtpZDoiZmllbGQtIitpLmlkLHByZWNpc2U6aS50eXBlPTNEPTNEImZsb2F0IixtaW46PQppLm1p bixtYXg6aS5tYXgsb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9 fSl9LF9maWVsZEhpZGQ9CmVuOmZ1bmN0aW9uKGkpe3JldHVybiBuZXcgaC5IaWRkZW4oe2lkOiJm aWVsZC0iK2kuaWQsaW5mbzppLmluZm99KX0sX2ZpZWxkQj0Kb29sZWFuOmZ1bmN0aW9uKGkpe3Zh ciBqPTNEdGhpcztyZXR1cm4gbmV3IGguUmFkaW9CdXR0b24uVmlldyh7aWQ6ImZpZWxkLSIrPQpp LmlkLGRhdGE6W3tsYWJlbDoiWWVzIix2YWx1ZToidHJ1ZSJ9LHtsYWJlbDoiTm8iLHZhbHVlOiJm YWxzZSJ9XSxvbmNoYW5nZTo9CmZ1bmN0aW9uKCl7ai5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0p fX0pO3JldHVybntWaWV3Omd9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5l KFsidXRpbHMvdXRpbHMiLCJtdmMvdWkvdWktdGFibGUiLCJtdmMvdWkvdWktbWlzYyIsIm12Yy91 aS91aS1wb3J0bGU9CnQiLCJtdmMvdG9vbHMvdG9vbHMtcmVwZWF0IiwibXZjL3Rvb2xzL3Rvb2xz LXNlbGVjdC1jb250ZW50IiwibXZjL3Rvb2xzL3Rvbz0KbHMtaW5wdXQiXSxmdW5jdGlvbihlLGIs aCxkLGMsYSxmKXt2YXIgZz0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplPQo6ZnVu Y3Rpb24oaixpKXt0aGlzLmFwcD0zRGo7dGhpcy5pbnB1dHM9M0RpLmlucHV0cztpLmNsc190cj0z RCJzZWN0aW9uLXJvdyI9Cjt0aGlzLnRhYmxlPTNEbmV3IGIuVmlldyhpKTt0aGlzLnNldEVsZW1l bnQodGhpcy50YWJsZS4kZWwpO3RoaXMucmVuZGVyKCl9LD0KcmVuZGVyOmZ1bmN0aW9uKCl7dGhp cy50YWJsZS5kZWxBbGwoKTtmb3IodmFyIGogaW4gdGhpcy5pbnB1dHMpe3RoaXMuYWRkKHRoPQpp cy5pbnB1dHNbal0pfX0sYWRkOmZ1bmN0aW9uKGspe3ZhciBqPTNEdGhpczt2YXIgaT0zRGpRdWVy eS5leHRlbmQodHJ1ZSx7fSw9CmspO2kuaWQ9M0RrLmlkPTNEZS51dWlkKCk7dGhpcy5hcHAuaW5w dXRfbGlzdFtpLmlkXT0zRGk7dmFyIGw9M0RpLnR5cGU7c3dpdD0KY2gobCl7Y2FzZSJjb25kaXRp b25hbCI6dGhpcy5fYWRkQ29uZGl0aW9uYWwoaSk7YnJlYWs7Y2FzZSJyZXBlYXQiOnRoaXMuX2Fk PQpkUmVwZWF0KGkpO2JyZWFrO2Nhc2Uic2VjdGlvbiI6dGhpcy5fYWRkU2VjdGlvbihpKTticmVh aztkZWZhdWx0OnRoaXMuX2FkZFI9Cm93KGkpfX0sX2FkZENvbmRpdGlvbmFsOmZ1bmN0aW9uKGop e3ZhciBrPTNEdGhpcztqLnRlc3RfcGFyYW0uaWQ9M0RqLmlkO3Zhcj0KIG49M0R0aGlzLl9hZGRS b3coai50ZXN0X3BhcmFtKTtuLm9wdGlvbnMub25jaGFuZ2U9M0RmdW5jdGlvbih3KXt2YXIgdj0z RGsuPQphcHAudHJlZS5tYXRjaENhc2Uoaix3KTtmb3IodmFyIHUgaW4gai5jYXNlcyl7dmFyIHE9 M0RqLmNhc2VzW3VdO3ZhciB0PTNEai49CmlkKyItc2VjdGlvbi0iK3U7dmFyIHA9M0RrLnRhYmxl LmdldCh0KTt2YXIgcz0zRGZhbHNlO2Zvcih2YXIgciBpbiBxLmlucHV0cz0KKXtpZighcS5pbnB1 dHNbcl0uaGlkZGVuKXtzPTNEdHJ1ZTticmVha319aWYodT0zRD0zRHYmJnMpe3AuZmFkZUluKCJm YXN0Iil9PQplbHNle3AuaGlkZSgpfX1rLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9O2Zvcih2YXIg bSBpbiBqLmNhc2VzKXt2YXIgbD0zRGouaWQ9CisiLXNlY3Rpb24tIittO3ZhciBvPTNEbmV3IGco dGhpcy5hcHAse2lucHV0czpqLmNhc2VzW21dLmlucHV0cyxjbHM6InVpLXRhYj0KbGUtcGxhaW4i fSk7by4kZWwuYWRkQ2xhc3MoInVpLXRhYmxlLWZvcm0tc2VjdGlvbiIpO3RoaXMudGFibGUuYWRk KG8uJGVsKTt0PQpoaXMudGFibGUuYXBwZW5kKGwpfW4udHJpZ2dlcigiY2hhbmdlIil9LF9hZGRS ZXBlYXQ6ZnVuY3Rpb24ocCl7dmFyIHM9M0R0aGk9CnM7dmFyIHE9M0QwO2Z1bmN0aW9uIG4oaSx1 KXt2YXIgdD0zRHAuaWQrIi1zZWN0aW9uLSIrKHErKyk7dmFyIHY9M0RudWxsO2lmKD0KdSl7dj0z RGZ1bmN0aW9uKCl7bC5kZWwodCk7bC5yZXRpdGxlKHAudGl0bGUpO3MuYXBwLnRyaWdnZXIoInJl ZnJlc2giKX19dmFyPQogdz0zRG5ldyBnKHMuYXBwLHtpbnB1dHM6aSxjbHM6InVpLXRhYmxlLXBs YWluIn0pO2wuYWRkKHtpZDp0LHRpdGxlOnAudGl0bGU9CiwkZWw6dy4kZWwsb25kZWw6dn0pO2wu cmV0aXRsZShwLnRpdGxlKX12YXIgbD0zRG5ldyBjLlZpZXcoe3RpdGxlX25ldzpwLnRpdD0KbGUs bWF4OnAubWF4LG9ubmV3OmZ1bmN0aW9uKCl7bihwLmlucHV0cyx0cnVlKTtzLmFwcC50cmlnZ2Vy KCJyZWZyZXNoIil9fSk7PQp2YXIgaj0zRHAubWluO3ZhciByPTNEXy5zaXplKHAuY2FjaGUpO2Zv cih2YXIgbT0zRDA7bTxNYXRoLm1heChyLGopO20rKyl7dmE9CnIgbz0zRG51bGw7aWYobTxyKXtv PTNEcC5jYWNoZVttXX1lbHNle289M0RwLmlucHV0c31uKG8sbT49M0RqKX12YXIgaz0zRG5ldz0K IGYodGhpcy5hcHAse2xhYmVsOnAudGl0bGUsaGVscDpwLmhlbHAsZmllbGQ6bH0pO2suJGVsLmFk ZENsYXNzKCJ1aS10YWJsZS1mPQpvcm0tc2VjdGlvbiIpO3RoaXMudGFibGUuYWRkKGsuJGVsKTt0 aGlzLnRhYmxlLmFwcGVuZChwLmlkKX0sX2FkZFNlY3Rpb246ZnU9Cm5jdGlvbihpKXt2YXIgaj0z RHRoaXM7dmFyIG49M0RuZXcgZyhqLmFwcCx7aW5wdXRzOmkuaW5wdXRzLGNsczoidWktdGFibGUt cD0KbGFpbiJ9KTt2YXIgbT0zRG5ldyBoLkJ1dHRvbkljb24oe2ljb246ImZhLWV5ZS1zbGFzaCIs dG9vbHRpcDoiU2hvdy9oaWRlIHNlPQpjdGlvbiIsY2xzOiJ1aS1idXR0b24taWNvbi1wbGFpbiJ9 KTt2YXIgbD0zRG5ldyBkLlZpZXcoe3RpdGxlOmkubGFiZWwsY2xzOiI9CnVpLXBvcnRsZXQtc2Vj dGlvbiIsb3BlcmF0aW9uczp7YnV0dG9uX3Zpc2libGU6bX19KTtsLmFwcGVuZChuLiRlbCk7dmFy IGs9Cj0zRGZhbHNlO2wuJGNvbnRlbnQuaGlkZSgpO2wuJGhlYWRlci5jc3MoImN1cnNvciIsInBv aW50ZXIiKTtsLiRoZWFkZXIub24oIj0KY2xpY2siLGZ1bmN0aW9uKCl7aWYoayl7az0zRGZhbHNl O2wuJGNvbnRlbnQuaGlkZSgpO20uc2V0SWNvbigiZmEtZXllLXNsYXNoPQoiKX1lbHNle2s9M0R0 cnVlO2wuJGNvbnRlbnQuZmFkZUluKCJmYXN0Iik7bS5zZXRJY29uKCJmYS1leWUiKX19KTtpZihp LmV4cGE9Cm5kKXtsLiRoZWFkZXIudHJpZ2dlcigiY2xpY2siKX10aGlzLnRhYmxlLmFkZChsLiRl bCk7dGhpcy50YWJsZS5hcHBlbmQoaS5pZD0KKX0sX2FkZFJvdzpmdW5jdGlvbihpKXt2YXIgbD0z RGkuaWQ7dmFyIGo9M0R0aGlzLl9jcmVhdGVGaWVsZChpKTt0aGlzLmFwcC5mPQppZWxkX2xpc3Rb bF09M0RqO3ZhciBrPTNEbmV3IGYodGhpcy5hcHAse2xhYmVsOmkubGFiZWwsZGVmYXVsdHZhbHVl OmkuZGVmYXU9Cmx0dmFsdWUsb3B0aW9uYWw6aS5vcHRpb25hbCxoZWxwOmkuaGVscCxmaWVsZDpq fSk7dGhpcy5hcHAuZWxlbWVudF9saXN0W2xdPQo9M0RrO3RoaXMudGFibGUuYWRkKGsuJGVsKTt0 aGlzLnRhYmxlLmFwcGVuZChsKTtpZihpLmhpZGRlbil7dGhpcy50YWJsZS5nZXQ9CihsKS5oaWRl KCl9cmV0dXJuIGp9LF9jcmVhdGVGaWVsZDpmdW5jdGlvbihpKXt2YXIgaj0zRG51bGw7c3dpdGNo KGkudHlwZSl7Yz0KYXNlInRleHQiOmo9M0R0aGlzLl9maWVsZFRleHQoaSk7YnJlYWs7Y2FzZSJz ZWxlY3QiOmo9M0R0aGlzLl9maWVsZFNlbGVjdChpPQopO2JyZWFrO2Nhc2UiZGF0YSI6aj0zRHRo aXMuX2ZpZWxkRGF0YShpKTticmVhaztjYXNlImRhdGFfY29sbGVjdGlvbiI6aj0zRHQ9Cmhpcy5f ZmllbGREYXRhKGkpO2JyZWFrO2Nhc2UiZGF0YV9jb2x1bW4iOmkuZXJyb3JfdGV4dD0zRCJNaXNz aW5nIGNvbHVtbnMgaT0KbiByZWZlcmVuY2VkIGRhdGFzZXQuIjtqPTNEdGhpcy5fZmllbGRTZWxl Y3QoaSk7YnJlYWs7Y2FzZSJoaWRkZW4iOmo9M0R0aGlzPQouX2ZpZWxkSGlkZGVuKGkpO2JyZWFr O2Nhc2UiaGlkZGVuX2RhdGEiOmo9M0R0aGlzLl9maWVsZEhpZGRlbihpKTticmVhaztjYXM9CmUi aW50ZWdlciI6aj0zRHRoaXMuX2ZpZWxkU2xpZGVyKGkpO2JyZWFrO2Nhc2UiZmxvYXQiOmo9M0R0 aGlzLl9maWVsZFNsaWRlcj0KKGkpO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aj0zRHRoaXMuX2ZpZWxk Qm9vbGVhbihpKTticmVhaztjYXNlImdlbm9tZWJ1aWxkIjppPQouc2VhcmNoYWJsZT0zRHRydWU7 aj0zRHRoaXMuX2ZpZWxkU2VsZWN0KGkpO2JyZWFrO2Nhc2UiZHJpbGxfZG93biI6aj0zRHRoaXM9 Ci5fZmllbGREcmlsbGRvd24oaSk7YnJlYWs7Y2FzZSJiYXNldXJsIjpqPTNEdGhpcy5fZmllbGRI aWRkZW4oaSk7YnJlYWs7ZGVmYT0KdWx0OnRoaXMuYXBwLmluY29tcGF0aWJsZT0zRHRydWU7aWYo aS5vcHRpb25zKXtqPTNEdGhpcy5fZmllbGRTZWxlY3QoaSl9ZWxzPQple2o9M0R0aGlzLl9maWVs ZFRleHQoaSl9Y29uc29sZS5kZWJ1ZygidG9vbHMtZm9ybTo6X2FkZFJvdygpIDogQXV0byBtYXRj aGU9CmQgZmllbGQgdHlwZSAoIitpLnR5cGUrIikuIil9aWYoaS52YWx1ZSE9M0Q9M0R1bmRlZmlu ZWQpe2oudmFsdWUoaS52YWx1ZSl9cj0KZXR1cm4gan0sX2ZpZWxkRGF0YTpmdW5jdGlvbihpKXtp ZighdGhpcy5hcHAub3B0aW9ucy5pc19keW5hbWljKXtpLmluZm89M0QiPQpEYXRhIGlucHV0ICci K2kubmFtZSsiJyAoIitlLnRleHRpZnkoaS5leHRlbnNpb25zLnRvU3RyaW5nKCkpKyIpIjtpLnZh bHVlPQo9M0RudWxsO3JldHVybiB0aGlzLl9maWVsZEhpZGRlbihpKX12YXIgaj0zRHRoaXM7cmV0 dXJuIG5ldyBhLlZpZXcodGhpcy5hcHA9Cix7aWQ6ImZpZWxkLSIraS5pZCxleHRlbnNpb25zOmku ZXh0ZW5zaW9ucyxtdWx0aXBsZTppLm11bHRpcGxlLHR5cGU6aS50eXBlLD0KZGF0YTppLm9wdGlv bnMsb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9LF9maWVs ZFNlbGVjPQp0OmZ1bmN0aW9uKGope2lmKCF0aGlzLmFwcC5vcHRpb25zLmlzX2R5bmFtaWMmJmou aXNfZHluYW1pYyl7cmV0dXJuIHRoaXMuX2Y9CmllbGRUZXh0KGopfXZhciBsPTNEW107Zm9yKHZh ciBtIGluIGoub3B0aW9ucyl7dmFyIG49M0RqLm9wdGlvbnNbbV07bC5wdXNoKD0Ke2xhYmVsOm5b MF0sdmFsdWU6blsxXX0pfXZhciBvPTNEaC5TZWxlY3Q7c3dpdGNoKGouZGlzcGxheSl7Y2FzZSJj aGVja2JveGVzPQoiOm89M0RoLkNoZWNrYm94O2JyZWFrO2Nhc2UicmFkaW8iOm89M0RoLlJhZGlv O2JyZWFrfXZhciBrPTNEdGhpcztyZXR1cm4gbmU9Cncgby5WaWV3KHtpZDoiZmllbGQtIitqLmlk LGRhdGE6bCxlcnJvcl90ZXh0OmouZXJyb3JfdGV4dHx8Ik5vIG9wdGlvbnMgYXZhaT0KbGFibGUi LG11bHRpcGxlOmoubXVsdGlwbGUsc2VhcmNoYWJsZTpqLnNlYXJjaGFibGUsb25jaGFuZ2U6ZnVu Y3Rpb24oKXtrLmFwPQpwLnRyaWdnZXIoInJlZnJlc2giKX19KX0sX2ZpZWxkRHJpbGxkb3duOmZ1 bmN0aW9uKGkpe2lmKCF0aGlzLmFwcC5vcHRpb25zLmk9CnNfZHluYW1pYyYmaS5pc19keW5hbWlj KXtyZXR1cm4gdGhpcy5fZmllbGRUZXh0KGkpfXZhciBqPTNEdGhpcztyZXR1cm4gbmV3ID0KaC5E cmlsbGRvd24uVmlldyh7aWQ6ImZpZWxkLSIraS5pZCxkYXRhOmkub3B0aW9ucyxkaXNwbGF5Omku ZGlzcGxheSxvbmNoYW5nPQplOmZ1bmN0aW9uKCl7ai5hcHAudHJpZ2dlcigicmVmcmVzaCIpfX0p fSxfZmllbGRUZXh0OmZ1bmN0aW9uKGkpe2lmKGkub3B0aW89Cm5zKXtpLmFyZWE9M0RpLm11bHRp cGxlO2lmKCFlLnZhbGlkYXRlKGkudmFsdWUpKXtpLnZhbHVlPTNEIiJ9ZWxzZXtpZihpLnZhbD0K dWUgaW5zdGFuY2VvZiBBcnJheSl7aS52YWx1ZT0zRHZhbHVlLnRvU3RyaW5nKCl9ZWxzZXtpLnZh bHVlPTNEU3RyaW5nKGkudmFsPQp1ZSkucmVwbGFjZSgvW1xbXF0nIlxzXS9nLCIiKTtpZihpLm11 bHRpcGxlKXtpLnZhbHVlPTNEaS52YWx1ZS5yZXBsYWNlKC8sL2c9CiwiXG4iKX19fX12YXIgaj0z RHRoaXM7cmV0dXJuIG5ldyBoLklucHV0KHtpZDoiZmllbGQtIitpLmlkLGFyZWE6aS5hcmVhLG9u Yz0KaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9LF9maWVsZFNs aWRlcjpmdW5jdGlvbihpKXt2YXIgPQpqPTNEdGhpcztyZXR1cm4gbmV3IGguU2xpZGVyLlZpZXco e2lkOiJmaWVsZC0iK2kuaWQscHJlY2lzZTppLnR5cGU9M0Q9M0QiZmw9Cm9hdCIsbWluOmkubWlu LG1heDppLm1heCxvbmNoYW5nZTpmdW5jdGlvbigpe2ouYXBwLnRyaWdnZXIoInJlZnJlc2giKX19 KX0sXz0KZmllbGRIaWRkZW46ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBoLkhpZGRlbih7aWQ6ImZp ZWxkLSIraS5pZCxpbmZvOmkuaW5mb30pPQp9LF9maWVsZEJvb2xlYW46ZnVuY3Rpb24oaSl7dmFy IGo9M0R0aGlzO3JldHVybiBuZXcgaC5SYWRpb0J1dHRvbi5WaWV3KHtpZDo9CiJmaWVsZC0iK2ku aWQsZGF0YTpbe2xhYmVsOiJZZXMiLHZhbHVlOiJ0cnVlIn0se2xhYmVsOiJObyIsdmFsdWU6ImZh bHNlIn1dLD0Kb25jaGFuZ2U6ZnVuY3Rpb24oKXtqLmFwcC50cmlnZ2VyKCJyZWZyZXNoIil9fSl9 fSk7cmV0dXJue1ZpZXc6Z319KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1y IDhhNzA0NTc5MmM3ZmU0OGE5OTI5NTc3MDRlNTFlMzEzZDMyZTZjZGQgLXIgMGY3Mzc0ODVjYjdm NWQ3NTU5NWU5OGE9CmI4ZjhkYzAyYmEzNjk5NzZmIHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMv dG9vbHMvdG9vbHMtdHJlZS5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3Rvb2xz L3Rvb2xzLXRyZWUuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy90b29scy90b29s cy10cmVlLmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFsidXRpbHMvdXRpbHMiXSxmdW5jdGlv bihhKXtyZXR1cm4gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtpbml0aWFsaXo9CmU6ZnVuY3Rpb24o Yil7dGhpcy5hcHA9M0RifSxmaW5hbGl6ZTpmdW5jdGlvbihnKXt2YXIgYj0zRHRoaXM7dGhpcy5t YXBfZGljdD0KPTNEe307aWYoIXRoaXMuYXBwLnNlY3Rpb24pe3JldHVybnt9fWc9M0RnfHx7fTt2 YXIgZj0zRHt9O3ZhciBlPTNEe307dGhpcy5fPQppdGVyYXRlKHRoaXMuYXBwLnNlY3Rpb24uJGVs LGUpO2Z1bmN0aW9uIGQoaixpLGgpe2Zbal09M0RoO2IubWFwX2RpY3Rbal09M0Q9Cml9ZnVuY3Rp b24gYyhwLHMpe2Zvcih2YXIgbiBpbiBzKXt2YXIgaz0zRHNbbl07aWYoay5pbnB1dCl7dmFyIHU9 M0RrLmlucHV0Oz0KdmFyIG89M0RwO2lmKHAhPTNEIiIpe28rPTNEInwifW8rPTNEdS5uYW1lO3N3 aXRjaCh1LnR5cGUpe2Nhc2UicmVwZWF0Ijp2YXIgPQpqPTNEInNlY3Rpb24tIjt2YXIgeD0zRFtd O3ZhciByPTNEbnVsbDtmb3IodmFyIHcgaW4gayl7dmFyIHE9M0R3LmluZGV4T2Yoaik9CjtpZihx IT0zRC0xKXtxKz0zRGoubGVuZ3RoO3gucHVzaChwYXJzZUludCh3LnN1YnN0cihxKSkpO2lmKCFy KXtyPTNEdy5zdWJzdD0KcigwLHEpfX19eC5zb3J0KGZ1bmN0aW9uKHksaSl7cmV0dXJuIHktaX0p O3ZhciBuPTNEMDtmb3IodmFyIGwgaW4geCl7YyhvKyJfPQoiK24rKyxrW3IreFtsXV0pfWJyZWFr O2Nhc2UiY29uZGl0aW9uYWwiOnZhciB2PTNEYi5hcHAuZmllbGRfbGlzdFt1LmlkXS52YWw9CnVl KCk7aWYoZ1t1LnRlc3RfcGFyYW0udHlwZV0pe3Y9M0RnW3UudGVzdF9wYXJhbS50eXBlXSh2KX1k KG8rInwiK3UudGVzdF9wYT0KcmFtLm5hbWUsdS5pZCx2KTt2YXIgaD0zRGIubWF0Y2hDYXNlKHUs dik7aWYoaCE9M0QtMSl7YyhvLHNbdS5pZCsiLXNlY3Rpb24tPQoiK2hdKX1icmVhaztjYXNlInNl Y3Rpb24iOmMoIiIsayk7YnJlYWs7ZGVmYXVsdDp2YXIgdD0zRGIuYXBwLmZpZWxkX2xpc3RbdS49 CmlkXTtpZih0JiZ0LnZhbHVlKXt2YXIgdj0zRHQudmFsdWUoKTtpZihnW3UudHlwZV0pe3Y9M0Rn W3UudHlwZV0odil9aWYoIXQucz0Ka2lwfHxiLmFwcC53b3JrZmxvdyl7aWYodC52YWxpZGF0ZSYm IXQudmFsaWRhdGUoKSl7dj0zRG51bGx9aWYodS5pZ25vcmU9M0Q9Cj0zRD0zRHVuZGVmaW5lZHx8 KHYhPTNEPTNEbnVsbCYmdS5pZ25vcmUhPTNEdikpe2Qobyx1LmlkLHYpO2lmKHUucGF5bG9hZCl7 Zj0Kb3IodmFyIG0gaW4gdS5wYXlsb2FkKXtkKG0sdS5pZCx1LnBheWxvYWRbbV0pfX19fX19fX19 YygiIixlKTtyZXR1cm4gZn0sbWF0PQpjaDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tYXBfZGlj dCYmdGhpcy5tYXBfZGljdFtiXX0sbWF0Y2hDYXNlOmZ1bmN0aW9uKGI9CixkKXtpZihiLnRlc3Rf cGFyYW0udHlwZT0zRD0zRCJib29sZWFuIil7aWYoZD0zRD0zRCJ0cnVlIil7ZD0zRGIudGVzdF9w YXJhbT0KLnRydWV2YWx1ZXx8InRydWUifWVsc2V7ZD0zRGIudGVzdF9wYXJhbS5mYWxzZXZhbHVl fHwiZmFsc2UifX1mb3IodmFyIGMgaW4gPQpiLmNhc2VzKXtpZihiLmNhc2VzW2NdLnZhbHVlPTNE PTNEZCl7cmV0dXJuIGN9fXJldHVybiAtMX0sbWF0Y2hNb2RlbDpmdW5jdGk9Cm9uKGQsZil7dmFy IGI9M0R7fTt2YXIgYz0zRHRoaXM7ZnVuY3Rpb24gZShnLHApe2Zvcih2YXIgbSBpbiBwKXt2YXIg az0zRHBbbT0KXTt2YXIgbj0zRGsubmFtZTtpZihnIT0zRCIiKXtuPTNEZysifCIrbn1zd2l0Y2go ay50eXBlKXtjYXNlInJlcGVhdCI6Zm9yKHZhPQpyIGwgaW4gay5jYWNoZSl7ZShuKyJfIitsLGsu Y2FjaGVbbF0pfWJyZWFrO2Nhc2UiY29uZGl0aW9uYWwiOnZhciBxPTNEay50ZXM9CnRfcGFyYW0m JmsudGVzdF9wYXJhbS52YWx1ZTt2YXIgaD0zRGMubWF0Y2hDYXNlKGsscSk7aWYoaCE9M0QtMSl7 ZShuLGsuY2FzZT0Kc1toXS5pbnB1dHMpfWJyZWFrO2RlZmF1bHQ6dmFyIG89M0RjLm1hcF9kaWN0 W25dO2lmKG8pe2YobyxrKX19fX1lKCIiLGQuaW5wPQp1dHMpO3JldHVybiBifSxtYXRjaFJlc3Bv bnNlOmZ1bmN0aW9uKGQpe3ZhciBiPTNEe307dmFyIGM9M0R0aGlzO2Z1bmN0aW9uIGU9CihsLGop e2lmKHR5cGVvZiBqPTNEPTNEPTNEInN0cmluZyIpe3ZhciBnPTNEYy5tYXBfZGljdFtsXTtpZihn KXtiW2ddPTNEan19ZT0KbHNle2Zvcih2YXIgaCBpbiBqKXt2YXIgZj0zRGg7aWYobCE9M0Q9M0Qi Iil7dmFyIGs9M0QifCI7aWYoaiBpbnN0YW5jZW9mIEFyPQpyYXkpe2s9M0QiXyJ9Zj0zRGwraytm fWUoZixqW2hdKX19fWUoIiIsZCk7cmV0dXJuIGJ9LF9pdGVyYXRlOmZ1bmN0aW9uKGQsZSk9Cnt2 YXIgYj0zRHRoaXM7dmFyIGM9M0QkKGQpLmNoaWxkcmVuKCk7Yy5lYWNoKGZ1bmN0aW9uKCl7dmFy IGg9M0R0aGlzO3ZhciBnPQo9M0QkKGgpLmF0dHIoImlkIik7aWYoJChoKS5oYXNDbGFzcygic2Vj dGlvbi1yb3ciKSl7ZVtnXT0zRHt9O3ZhciBmPTNEYi5hcHA9Ci5pbnB1dF9saXN0W2ddO2lmKGYp e2VbZ109M0R7aW5wdXQ6Zn19Yi5faXRlcmF0ZShoLGVbZ10pfWVsc2V7Yi5faXRlcmF0ZShoLD0K ZSl9fSl9fSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkZWZpbmUoWyJ1dGlscy91 dGlscyJdLGZ1bmN0aW9uKGEpe3JldHVybiBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe2luaXRpYWxp ej0KZTpmdW5jdGlvbihiKXt0aGlzLmFwcD0zRGJ9LGZpbmFsaXplOmZ1bmN0aW9uKGcpe3ZhciBi PTNEdGhpczt0aGlzLm1hcF9kaWN0PQo9M0R7fTtpZighdGhpcy5hcHAuc2VjdGlvbil7cmV0dXJu e319Zz0zRGd8fHt9O3ZhciBmPTNEe307dmFyIGU9M0R7fTt0aGlzLl89Cml0ZXJhdGUodGhpcy5h cHAuc2VjdGlvbi4kZWwsZSk7ZnVuY3Rpb24gZChqLGksaCl7ZltqXT0zRGg7Yi5tYXBfZGljdFtq XT0zRD0KaX1mdW5jdGlvbiBjKHAscyl7Zm9yKHZhciBuIGluIHMpe3ZhciBrPTNEc1tuXTtpZihr LmlucHV0KXt2YXIgdT0zRGsuaW5wdXQ7PQp2YXIgbz0zRHA7aWYocCE9M0QiIil7bys9M0QifCJ9 bys9M0R1Lm5hbWU7c3dpdGNoKHUudHlwZSl7Y2FzZSJyZXBlYXQiOnZhciA9Cmo9M0Qic2VjdGlv bi0iO3ZhciB4PTNEW107dmFyIHI9M0RudWxsO2Zvcih2YXIgdyBpbiBrKXt2YXIgcT0zRHcuaW5k ZXhPZihqKT0KO2lmKHEhPTNELTEpe3ErPTNEai5sZW5ndGg7eC5wdXNoKHBhcnNlSW50KHcuc3Vi c3RyKHEpKSk7aWYoIXIpe3I9M0R3LnN1YnN0PQpyKDAscSl9fX14LnNvcnQoZnVuY3Rpb24oeSxp KXtyZXR1cm4geS1pfSk7dmFyIG49M0QwO2Zvcih2YXIgbCBpbiB4KXtjKG8rIl89CiIrbisrLGtb cit4W2xdXSl9YnJlYWs7Y2FzZSJjb25kaXRpb25hbCI6dmFyIHY9M0RiLmFwcC5maWVsZF9saXN0 W3UuaWRdLnZhbD0KdWUoKTtpZihnW3UudGVzdF9wYXJhbS50eXBlXSl7dj0zRGdbdS50ZXN0X3Bh cmFtLnR5cGVdKHYpfWQobysifCIrdS50ZXN0X3BhPQpyYW0ubmFtZSx1LmlkLHYpO3ZhciBoPTNE Yi5tYXRjaENhc2UodSx2KTtpZihoIT0zRC0xKXtjKG8sc1t1LmlkKyItc2VjdGlvbi09CiIraF0p fWJyZWFrO2Nhc2Uic2VjdGlvbiI6YygiIixrKTticmVhaztkZWZhdWx0OnZhciB0PTNEYi5hcHAu ZmllbGRfbGlzdFt1Lj0KaWRdO2lmKHQmJnQudmFsdWUpe3ZhciB2PTNEdC52YWx1ZSgpO2lmKGdb dS50eXBlXSl7dj0zRGdbdS50eXBlXSh2KX1pZighdC5zPQpraXB8fGIuYXBwLm9wdGlvbnMuc2Vu ZF9hbGwpe2lmKHQudmFsaWRhdGUmJiF0LnZhbGlkYXRlKCkpe3Y9M0RudWxsfWlmKHUuaWc9Cm5v cmU9M0Q9M0Q9M0R1bmRlZmluZWR8fCh2IT0zRD0zRG51bGwmJnUuaWdub3JlIT0zRHYpKXtkKG8s dS5pZCx2KTtpZih1LnBheT0KbG9hZCl7Zm9yKHZhciBtIGluIHUucGF5bG9hZCl7ZChtLHUuaWQs dS5wYXlsb2FkW21dKX19fX19fX19fWMoIiIsZSk7cmV0dXJuPQogZn0sbWF0Y2g6ZnVuY3Rpb24o Yil7cmV0dXJuIHRoaXMubWFwX2RpY3QmJnRoaXMubWFwX2RpY3RbYl19LG1hdGNoQ2FzZTpmdW49 CmN0aW9uKGIsZCl7aWYoYi50ZXN0X3BhcmFtLnR5cGU9M0Q9M0QiYm9vbGVhbiIpe2lmKGQ9M0Q9 M0QidHJ1ZSIpe2Q9M0RiLnRlcz0KdF9wYXJhbS50cnVldmFsdWV8fCJ0cnVlIn1lbHNle2Q9M0Ri LnRlc3RfcGFyYW0uZmFsc2V2YWx1ZXx8ImZhbHNlIn19Zm9yKHZhPQpyIGMgaW4gYi5jYXNlcyl7 aWYoYi5jYXNlc1tjXS52YWx1ZT0zRD0zRGQpe3JldHVybiBjfX1yZXR1cm4gLTF9LG1hdGNoTW9k ZWw9CjpmdW5jdGlvbihkLGYpe3ZhciBiPTNEe307dmFyIGM9M0R0aGlzO2Z1bmN0aW9uIGUoZyxw KXtmb3IodmFyIG0gaW4gcCl7dmFyID0Kaz0zRHBbbV07dmFyIG49M0RrLm5hbWU7aWYoZyE9M0Qi Iil7bj0zRGcrInwiK259c3dpdGNoKGsudHlwZSl7Y2FzZSJyZXBlYXQiPQo6Zm9yKHZhciBsIGlu IGsuY2FjaGUpe2UobisiXyIrbCxrLmNhY2hlW2xdKX1icmVhaztjYXNlImNvbmRpdGlvbmFsIjp2 YXIgcT0KPTNEay50ZXN0X3BhcmFtJiZrLnRlc3RfcGFyYW0udmFsdWU7dmFyIGg9M0RjLm1hdGNo Q2FzZShrLHEpO2lmKGghPTNELTEpe2UoPQpuLGsuY2FzZXNbaF0uaW5wdXRzKX1icmVhaztkZWZh dWx0OnZhciBvPTNEYy5tYXBfZGljdFtuXTtpZihvKXtmKG8sayl9fX19ZSg9CiIiLGQuaW5wdXRz KTtyZXR1cm4gYn0sbWF0Y2hSZXNwb25zZTpmdW5jdGlvbihkKXt2YXIgYj0zRHt9O3ZhciBjPTNE dGhpcztmdT0KbmN0aW9uIGUobCxqKXtpZih0eXBlb2Ygaj0zRD0zRD0zRCJzdHJpbmciKXt2YXIg Zz0zRGMubWFwX2RpY3RbbF07aWYoZyl7YltnPQpdPTNEan19ZWxzZXtmb3IodmFyIGggaW4gail7 dmFyIGY9M0RoO2lmKGwhPTNEPTNEIiIpe3ZhciBrPTNEInwiO2lmKGogaW5zdGE9Cm5jZW9mIEFy cmF5KXtrPTNEIl8ifWY9M0RsK2srZn1lKGYsaltoXSl9fX1lKCIiLGQpO3JldHVybiBifSxfaXRl cmF0ZTpmdW5jdD0KaW9uKGQsZSl7dmFyIGI9M0R0aGlzO3ZhciBjPTNEJChkKS5jaGlsZHJlbigp O2MuZWFjaChmdW5jdGlvbigpe3ZhciBoPTNEdGhpPQpzO3ZhciBnPTNEJChoKS5hdHRyKCJpZCIp O2lmKCQoaCkuaGFzQ2xhc3MoInNlY3Rpb24tcm93Iikpe2VbZ109M0R7fTt2YXIgZj0KPTNEYi5h cHAuaW5wdXRfbGlzdFtnXTtpZihmKXtlW2ddPTNEe2lucHV0OmZ9fWIuX2l0ZXJhdGUoaCxlW2dd KX1lbHNle2IuX2l0PQplcmF0ZShoLGUpfX0pfX0pfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1y IDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2ZiBzdGF0aWMvc2NyaXB0 cy9wYWNrZWQvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9w YWNrZWQvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNr ZWQvbXZjL3VwbG9hZC91cGxvYWQtdmlldy5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbInV0 aWxzL3V0aWxzIiwibXZjL3VwbG9hZC91cGxvYWQtYnV0dG9uIiwibXZjL3VwbG9hZC91cGxvYWQt bW9kZWwiPQosIm12Yy91cGxvYWQvdXBsb2FkLXJvdyIsIm12Yy91cGxvYWQvdXBsb2FkLWZ0cCIs Im12Yy91aS91aS1wb3BvdmVyIiwibXZjL3U9CmkvdWktbW9kYWwiLCJ1dGlscy91cGxvYWRib3gi XSxmdW5jdGlvbihmLGUsYyxiLGcsZCxhKXtyZXR1cm4gQmFja2JvbmUuVmlldz0KLmV4dGVuZCh7 b3B0aW9uczp7bmdpbnhfdXBsb2FkX3BhdGg6IiJ9LG1vZGFsOm51bGwsdWlfYnV0dG9uOm51bGws dXBsb2FkYm94PQo6bnVsbCxjdXJyZW50X2hpc3Rvcnk6bnVsbCx1cGxvYWRfc2l6ZTowLGxpc3Rf ZXh0ZW5zaW9uczpbXSxsaXN0X2dlbm9tZXM6W109CixhdXRvOntpZDoiYXV0byIsdGV4dDoiQXV0 by1kZXRlY3QiLGRlc2NyaXB0aW9uOiJUaGlzIHN5c3RlbSB3aWxsIHRyeSB0byBkZT0KdGVjdCB0 aGUgZmlsZSB0eXBlIGF1dG9tYXRpY2FsbHkuIElmIHlvdXIgZmlsZSBpcyBub3QgZGV0ZWN0ZWQg cHJvcGVybHkgYXMgPQpvbmUgb2YgdGhlIGtub3duIGZvcm1hdHMsIGl0IG1vc3QgbGlrZWx5IG1l YW5zIHRoYXQgaXQgaGFzIHNvbWUgZm9ybWF0IHByb2I9CmxlbXMgKGUuZy4sIGRpZmZlcmVudCBu dW1iZXIgb2YgY29sdW1ucyBvbiBkaWZmZXJlbnQgcm93cykuIFlvdSBjYW4gc3RpbGwgYz0Kb2Vy Y2UgdGhlIHN5c3RlbSB0byBzZXQgeW91ciBkYXRhIHRvIHRoZSBmb3JtYXQgeW91IHRoaW5rIGl0 IHNob3VsZCBiZS4gIFlvPQp1IGNhbiBhbHNvIHVwbG9hZCBjb21wcmVzc2VkIGZpbGVzLCB3aGlj aCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGVjb21wcmVzc2U9CmQuIn0sY29sbGVjdGlvbjpuZXcg Yy5Db2xsZWN0aW9uKCksZnRwOm51bGwsY291bnRlcjp7YW5ub3VuY2U6MCxzdWNjZXNzOjAsZT0K cnJvcjowLHJ1bm5pbmc6MCxyZXNldDpmdW5jdGlvbigpe3RoaXMuYW5ub3VuY2U9M0R0aGlzLnN1 Y2Nlc3M9M0R0aGlzLmVycm9yPQo9M0R0aGlzLnJ1bm5pbmc9M0QwfX0saW5pdGlhbGl6ZTpmdW5j dGlvbihpKXt2YXIgaD0zRHRoaXM7aWYoaSl7dGhpcy5vcHRpb249CnM9M0RfLmRlZmF1bHRzKGks dGhpcy5vcHRpb25zKX10aGlzLnVpX2J1dHRvbj0zRG5ldyBlLk1vZGVsKHtpY29uOiJmYS11cGxv YT0KZCIsdG9vbHRpcDoiRG93bmxvYWQgZnJvbSBVUkwgb3IgdXBsb2FkIGZpbGVzIGZyb20gZGlz ayIsbGFiZWw6IkxvYWQgRGF0YSIsPQpvbmNsaWNrOmZ1bmN0aW9uKGope2lmKGope2oucHJldmVu dERlZmF1bHQoKTtoLnNob3coKX19LG9udW5sb2FkOmZ1bmN0aW9uKCk9CntpZihoLmNvdW50ZXIu cnVubmluZz4wKXtyZXR1cm4iU2V2ZXJhbCB1cGxvYWRzIGFyZSBzdGlsbCBwcm9jZXNzaW5nLiJ9 fX0pOz0KJCgiLndpdGgtdXBsb2FkLWJ1dHRvbiIpLmFwcGVuZCgobmV3IGUuVmlldyh0aGlzLnVp X2J1dHRvbikpLiRlbCk7dmFyIGg9M0R0PQpoaXM7Zi5nZXQoe3VybDpnYWxheHlfY29uZmlnLnJv b3QrImFwaS9kYXRhdHlwZXM/ZXh0ZW5zaW9uX29ubHk9M0RGYWxzZSIsc3U9CmNjZXNzOmZ1bmN0 aW9uKGope2ZvcihrZXkgaW4gail7aC5saXN0X2V4dGVuc2lvbnMucHVzaCh7aWQ6altrZXldLmV4 dGVuc2lvbj0KLHRleHQ6altrZXldLmV4dGVuc2lvbixkZXNjcmlwdGlvbjpqW2tleV0uZGVzY3Jp cHRpb24sZGVzY3JpcHRpb25fdXJsOmpba2V5PQpdLmRlc2NyaXB0aW9uX3VybH0pfWgubGlzdF9l eHRlbnNpb25zLnNvcnQoZnVuY3Rpb24obCxrKXtyZXR1cm4gbC5pZD5rLmlkPzE9CjpsLmlkPGsu aWQ/LTE6MH0pO2lmKCFoLm9wdGlvbnMuZGF0YXR5cGVzX2Rpc2FibGVfYXV0byl7aC5saXN0X2V4 dGVuc2lvbnMudT0KbnNoaWZ0KGguYXV0byl9fX0pO2YuZ2V0KHt1cmw6Z2FsYXh5X2NvbmZpZy5y b290KyJhcGkvZ2Vub21lcyIsc3VjY2VzczpmdW5jPQp0aW9uKGope2ZvcihrZXkgaW4gail7aC5s aXN0X2dlbm9tZXMucHVzaCh7aWQ6altrZXldWzFdLHRleHQ6altrZXldWzBdfSl9aC49Cmxpc3Rf Z2Vub21lcy5zb3J0KGZ1bmN0aW9uKGwsayl7cmV0dXJuIGwuaWQ+ay5pZD8xOmwuaWQ8ay5pZD8t MTowfSl9fSk7dGhpcz0KLmNvbGxlY3Rpb24ub24oInJlbW92ZSIsZnVuY3Rpb24oail7aC5fZXZl bnRSZW1vdmUoail9KTt0aGlzLmNvbGxlY3Rpb24ub24oPQoiY2hhbmdlOmdlbm9tZSIsZnVuY3Rp b24oayl7dmFyIGo9M0RrLmdldCgiZ2Vub21lIik7aC5jb2xsZWN0aW9uLmVhY2goZnVuY3Q9Cmlv bihsKXtpZihsLmdldCgic3RhdHVzIik9M0Q9M0QiaW5pdCImJmwuZ2V0KCJnZW5vbWUiKT0zRD0z RCI/Iil7bC5zZXQoImdlbj0Kb21lIixqKX19KX0pfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGg9M0R0 aGlzO2lmKCFHYWxheHkuY3Vyckhpc3RvcnlQYW5lbHx8IUdhPQpsYXh5LmN1cnJIaXN0b3J5UGFu ZWwubW9kZWwpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aC5zaG93KCl9LDUwMCk7cmU9 CnR1cm59aWYoIXRoaXMubW9kYWwpe3ZhciBoPTNEdGhpczt0aGlzLm1vZGFsPTNEbmV3IGEuVmll dyh7dGl0bGU6IkRvd25sb2FkID0KZGF0YSBkaXJlY3RseSBmcm9tIHdlYiBvciB1cGxvYWQgZmls ZXMgZnJvbSB5b3VyIGRpc2siLGJvZHk6dGhpcy5fdGVtcGxhdGUoPQoidXBsb2FkLWJveCIsInVw bG9hZC1pbmZvIiksYnV0dG9uczp7IkNob29zZSBsb2NhbCBmaWxlIjpmdW5jdGlvbigpe2gudXBs b2E9CmRib3guc2VsZWN0KCl9LCJDaG9vc2UgRlRQIGZpbGUiOmZ1bmN0aW9uKCl7aC5fZXZlbnRG dHAoKX0sIlBhc3RlL0ZldGNoIGRhdD0KYSI6ZnVuY3Rpb24oKXtoLl9ldmVudENyZWF0ZSgpfSxT dGFydDpmdW5jdGlvbigpe2guX2V2ZW50U3RhcnQoKX0sUGF1c2U6ZnVuPQpjdGlvbigpe2guX2V2 ZW50U3RvcCgpfSxSZXNldDpmdW5jdGlvbigpe2guX2V2ZW50UmVzZXQoKX0sQ2xvc2U6ZnVuY3Rp b24oKXs9CmgubW9kYWwuaGlkZSgpfSx9LGhlaWdodDoiNDAwIix3aWR0aDoiOTAwIixjbG9zaW5n X2V2ZW50czp0cnVlfSk7dGhpcy5zZXRFbD0KZW1lbnQoIiN1cGxvYWQtYm94Iik7dmFyIGg9M0R0 aGlzO3RoaXMudXBsb2FkYm94PTNEdGhpcy4kZWwudXBsb2FkYm94KHthbm5vPQp1bmNlOmZ1bmN0 aW9uKGosayxsKXtoLl9ldmVudEFubm91bmNlKGosayxsKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihq LGssbCl7cmU9CnR1cm4gaC5fZXZlbnRJbml0aWFsaXplKGosayxsKX0scHJvZ3Jlc3M6ZnVuY3Rp b24oaixrLGwpe2guX2V2ZW50UHJvZ3Jlc3Moaj0KLGssbCl9LHN1Y2Nlc3M6ZnVuY3Rpb24oaixr LGwpe2guX2V2ZW50U3VjY2VzcyhqLGssbCl9LGVycm9yOmZ1bmN0aW9uKGosayxsPQope2guX2V2 ZW50RXJyb3IoaixrLGwpfSxjb21wbGV0ZTpmdW5jdGlvbigpe2guX2V2ZW50Q29tcGxldGUoKX19 KTt2YXIgaT0zRHQ9Cmhpcy5tb2RhbC5nZXRCdXR0b24oIkNob29zZSBGVFAgZmlsZSIpO3RoaXMu ZnRwPTNEbmV3IGQuVmlldyh7dGl0bGU6IkZUUCBmaT0KbGVzIixjb250YWluZXI6aX0pfXRoaXMu bW9kYWwuc2hvdygpO3RoaXMuX3VwZGF0ZVVzZXIoKTt0aGlzLl91cGRhdGVTY3JlZW4oPQopfSxf ZXZlbnRSZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIGg9M0RpLmdldCgic3RhdHVzIik7aWYoaD0zRD0z RCJzdWNjZXNzIil7dGg9CmlzLmNvdW50ZXIuc3VjY2Vzcy0tfWVsc2V7aWYoaD0zRD0zRCJlcnJv ciIpe3RoaXMuY291bnRlci5lcnJvci0tfWVsc2V7dGhpcz0KLmNvdW50ZXIuYW5ub3VuY2UtLX19 dGhpcy5fdXBkYXRlU2NyZWVuKCk7dGhpcy51cGxvYWRib3gucmVtb3ZlKGkuaWQpfSxfZXZlPQpu dEFubm91bmNlOmZ1bmN0aW9uKGgsaSxrKXt0aGlzLmNvdW50ZXIuYW5ub3VuY2UrKzt0aGlzLl91 cGRhdGVTY3JlZW4oKTt2YXI9CiBqPTNEbmV3IGIodGhpcyx7aWQ6aCxmaWxlX25hbWU6aS5uYW1l LGZpbGVfc2l6ZTppLnNpemUsZmlsZV9tb2RlOmkubW9kZSxmaT0KbGVfcGF0aDppLnBhdGh9KTt0 aGlzLmNvbGxlY3Rpb24uYWRkKGoubW9kZWwpOyQodGhpcy5lbCkuZmluZCgidGJvZHk6Zmlyc3Qi PQopLmFwcGVuZChqLiRlbCk7ai5yZW5kZXIoKX0sX2V2ZW50SW5pdGlhbGl6ZTpmdW5jdGlvbiht LGoscyl7dmFyIGs9M0R0aGlzLmM9Cm9sbGVjdGlvbi5nZXQobSk7ay5zZXQoInN0YXR1cyIsInJ1 bm5pbmciKTt2YXIgbz0zRGsuZ2V0KCJmaWxlX25hbWUiKTt2YXIgbj0KPTNEay5nZXQoImZpbGVf cGF0aCIpO3ZhciBoPTNEay5nZXQoImZpbGVfbW9kZSIpO3ZhciBwPTNEay5nZXQoImV4dGVuc2lv biIpPQo7dmFyIHI9M0RrLmdldCgiZ2Vub21lIik7dmFyIHE9M0RrLmdldCgidXJsX3Bhc3RlIik7 dmFyIGw9M0RrLmdldCgic3BhY2VfdG89Cl90YWJzIik7dmFyIGk9M0RrLmdldCgidG9fcG9zaXhf bGluZXMiKTtpZighcSYmIShqLnNpemU+MCkpe3JldHVybiBudWxsfXRoaT0Kcy51cGxvYWRib3gu Y29uZmlndXJlKHt1cmw6dGhpcy5vcHRpb25zLm5naW54X3VwbG9hZF9wYXRofSk7aWYoaD0zRD0z RCJsb2NhPQpsIil7dGhpcy51cGxvYWRib3guY29uZmlndXJlKHtwYXJhbW5hbWU6ImZpbGVzXzB8 ZmlsZV9kYXRhIn0pfWVsc2V7dGhpcy51cGw9Cm9hZGJveC5jb25maWd1cmUoe3BhcmFtbmFtZTpu dWxsfSl9dG9vbF9pbnB1dD0zRHt9O2lmKGg9M0Q9M0QibmV3Iil7dG9vbF9pbj0KcHV0WyJmaWxl c18wfHVybF9wYXN0ZSJdPTNEcX1pZihoPTNEPTNEImZ0cCIpe3Rvb2xfaW5wdXRbImZpbGVzXzB8 ZnRwX2ZpbGVzPQoiXT0zRG59dG9vbF9pbnB1dC5kYmtleT0zRHI7dG9vbF9pbnB1dC5maWxlX3R5 cGU9M0RwO3Rvb2xfaW5wdXRbImZpbGVzXzB8dHk9CnBlIl09M0QidXBsb2FkX2RhdGFzZXQiO3Rv b2xfaW5wdXQuc3BhY2VfdG9fdGFicz0zRGw7dG9vbF9pbnB1dC50b19wb3NpeF9saT0KbmVzPTNE aTtkYXRhPTNEe307ZGF0YS5oaXN0b3J5X2lkPTNEdGhpcy5jdXJyZW50X2hpc3Rvcnk7ZGF0YS50 b29sX2lkPTNEInVwPQpsb2FkMSI7ZGF0YS5pbnB1dHM9M0RKU09OLnN0cmluZ2lmeSh0b29sX2lu cHV0KTtyZXR1cm4gZGF0YX0sX2V2ZW50UHJvZ3Jlc3M9CjpmdW5jdGlvbihpLGosaCl7dmFyIGs9 M0R0aGlzLmNvbGxlY3Rpb24uZ2V0KGkpO2suc2V0KCJwZXJjZW50YWdlIixoKTt0aGlzLj0KdWlf YnV0dG9uLnNldCgicGVyY2VudGFnZSIsdGhpcy5fdXBsb2FkX3BlcmNlbnRhZ2UoaCxqLnNpemUp KX0sX2V2ZW50U3VjY2VzPQpzOmZ1bmN0aW9uKGksaixsKXt2YXIgaz0zRHRoaXMuY29sbGVjdGlv bi5nZXQoaSk7ay5zZXQoInBlcmNlbnRhZ2UiLDEwMCk7ay49CnNldCgic3RhdHVzIiwic3VjY2Vz cyIpO3ZhciBoPTNEay5nZXQoImZpbGVfc2l6ZSIpO3RoaXMudWlfYnV0dG9uLnNldCgicGVyYz0K ZW50YWdlIix0aGlzLl91cGxvYWRfcGVyY2VudGFnZSgxMDAsaCkpO3RoaXMudXBsb2FkX2NvbXBs ZXRlZCs9M0RoKjEwMDt0aGlzPQouY291bnRlci5hbm5vdW5jZS0tO3RoaXMuY291bnRlci5zdWNj ZXNzKys7dGhpcy5fdXBkYXRlU2NyZWVuKCk7R2FsYXh5LmN1cnI9Ckhpc3RvcnlQYW5lbC5yZWZy ZXNoQ29udGVudHMoKX0sX2V2ZW50RXJyb3I6ZnVuY3Rpb24oaCxpLGspe3ZhciBqPTNEdGhpcy5j bz0KbGxlY3Rpb24uZ2V0KGgpO2ouc2V0KCJwZXJjZW50YWdlIiwxMDApO2ouc2V0KCJzdGF0dXMi LCJlcnJvciIpO2ouc2V0KCJpbmZvPQoiLGspO3RoaXMudWlfYnV0dG9uLnNldCgicGVyY2VudGFn ZSIsdGhpcy5fdXBsb2FkX3BlcmNlbnRhZ2UoMTAwLGkuc2l6ZSkpO3Q9Cmhpcy51aV9idXR0b24u c2V0KCJzdGF0dXMiLCJkYW5nZXIiKTt0aGlzLnVwbG9hZF9jb21wbGV0ZWQrPTNEaS5zaXplKjEw MDt0aD0KaXMuY291bnRlci5hbm5vdW5jZS0tO3RoaXMuY291bnRlci5lcnJvcisrO3RoaXMuX3Vw ZGF0ZVNjcmVlbigpfSxfZXZlbnRDb21wPQpsZXRlOmZ1bmN0aW9uKCl7dGhpcy5jb2xsZWN0aW9u LmVhY2goZnVuY3Rpb24oaCl7aWYoaC5nZXQoInN0YXR1cyIpPTNEPTNEInE9CnVldWVkIil7aC5z ZXQoInN0YXR1cyIsImluaXQiKX19KTt0aGlzLmNvdW50ZXIucnVubmluZz0zRDA7dGhpcy5fdXBk YXRlU2NyZT0KZW4oKX0sX2V2ZW50RnRwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZnRwLnZpc2libGUp e3RoaXMuZnRwLmVtcHR5KCk7dGhpcy5mdHAuPQphcHBlbmQoKG5ldyBnKHRoaXMpKS4kZWwpO3Ro aXMuZnRwLnNob3coKX1lbHNle3RoaXMuZnRwLmhpZGUoKX19LF9ldmVudENyZWE9CnRlOmZ1bmN0 aW9uKCl7dGhpcy51cGxvYWRib3guYWRkKFt7bmFtZToiTmV3IEZpbGUiLHNpemU6MCxtb2RlOiJu ZXcifV0pfSxfZT0KdmVudFN0YXJ0OmZ1bmN0aW9uKCl7aWYodGhpcy5jb3VudGVyLmFubm91bmNl PTNEPTNEMHx8dGhpcy5jb3VudGVyLnJ1bm5pbmc+PQowKXtyZXR1cm59dmFyIGg9M0R0aGlzO3Ro aXMudXBsb2FkX3NpemU9M0QwO3RoaXMudXBsb2FkX2NvbXBsZXRlZD0zRDA7dGhpcy49CmNvbGxl Y3Rpb24uZWFjaChmdW5jdGlvbihpKXtpZihpLmdldCgic3RhdHVzIik9M0Q9M0QiaW5pdCIpe2ku c2V0KCJzdGF0dXMiLD0KInF1ZXVlZCIpO2gudXBsb2FkX3NpemUrPTNEaS5nZXQoImZpbGVfc2l6 ZSIpfX0pO3RoaXMudWlfYnV0dG9uLnNldCgicGVyY2VuPQp0YWdlIiwwKTt0aGlzLnVpX2J1dHRv bi5zZXQoInN0YXR1cyIsInN1Y2Nlc3MiKTt0aGlzLmNvdW50ZXIucnVubmluZz0zRHRoaXM9Ci5j b3VudGVyLmFubm91bmNlO3RoaXMuX3VwZGF0ZVNjcmVlbigpO3RoaXMudXBsb2FkYm94LnN0YXJ0 KCl9LF9ldmVudFN0b3A6Zj0KdW5jdGlvbigpe2lmKHRoaXMuY291bnRlci5ydW5uaW5nPTNEPTNE MCl7cmV0dXJufXRoaXMudWlfYnV0dG9uLnNldCgic3RhdHVzPQoiLCJpbmZvIik7dGhpcy51cGxv YWRib3guc3RvcCgpOyQoIiN1cGxvYWQtaW5mbyIpLmh0bWwoIlF1ZXVlIHdpbGwgcGF1c2UgYWY9 CnRlciBjb21wbGV0aW5nIHRoZSBjdXJyZW50IGZpbGUuLi4iKX0sX2V2ZW50UmVzZXQ6ZnVuY3Rp b24oKXtpZih0aGlzLmNvdW50ZT0Kci5ydW5uaW5nPTNEPTNEMCl7dGhpcy5jb2xsZWN0aW9uLnJl c2V0KCk7dGhpcy5jb3VudGVyLnJlc2V0KCk7dGhpcy5fdXBkYXRlPQpTY3JlZW4oKTt0aGlzLnVw bG9hZGJveC5yZXNldCgpO3RoaXMudWlfYnV0dG9uLnNldCgicGVyY2VudGFnZSIsMCl9fSxfdXBk YXQ9CmVVc2VyOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50X3VzZXI9M0RHYWxheHkuY3VyclVzZXIu Z2V0KCJpZCIpO3RoaXMuY3VycmVudD0KX2hpc3Rvcnk9M0RudWxsO2lmKHRoaXMuY3VycmVudF91 c2VyKXt0aGlzLmN1cnJlbnRfaGlzdG9yeT0zREdhbGF4eS5jdXJySGlzPQp0b3J5UGFuZWwubW9k ZWwuZ2V0KCJpZCIpfX0sX3VwZGF0ZVNjcmVlbjpmdW5jdGlvbigpe2lmKHRoaXMuY291bnRlci5h bm5vdW49CmNlPTNEPTNEMCl7aWYodGhpcy51cGxvYWRib3guY29tcGF0aWJsZSgpKXttZXNzYWdl PTNEIllvdSBjYW4gRHJhZyAmIERyb3AgZj0KaWxlcyBpbnRvIHRoaXMgYm94LiJ9ZWxzZXttZXNz YWdlPTNEIlVuZm9ydHVuYXRlbHksIHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzPQp1cHBvcnQgbXVs dGlwbGUgZmlsZSB1cGxvYWRzIG9yIGRyYWcmZHJvcC48YnI+U29tZSBzdXBwb3J0ZWQgYnJvd3Nl cnMgYXJlOiA9CkZpcmVmb3ggNCssIENocm9tZSA3KywgSUUgMTArLCBPcGVyYSAxMisgb3IgU2Fm YXJpIDYrLiJ9fWVsc2V7aWYodGhpcy5jb3VudD0KZXIucnVubmluZz0zRD0zRDApe21lc3NhZ2U9 M0QiWW91IGFkZGVkICIrdGhpcy5jb3VudGVyLmFubm91bmNlKyIgZmlsZShzKSB0PQpvIHRoZSBx dWV1ZS4gQWRkIG1vcmUgZmlsZXMgb3IgY2xpY2sgJ1N0YXJ0JyB0byBwcm9jZWVkLiJ9ZWxzZXtt ZXNzYWdlPTNEIlA9CmxlYXNlIHdhaXQuLi4iK3RoaXMuY291bnRlci5hbm5vdW5jZSsiIG91dCBv ZiAiK3RoaXMuY291bnRlci5ydW5uaW5nKyIgcmVtYT0KaW5pbmcuIn19JCgiI3VwbG9hZC1pbmZv IikuaHRtbChtZXNzYWdlKTtpZih0aGlzLmNvdW50ZXIucnVubmluZz0zRD0zRDAmJnRoPQppcy5j b3VudGVyLmFubm91bmNlK3RoaXMuY291bnRlci5zdWNjZXNzK3RoaXMuY291bnRlci5lcnJvcj4w KXt0aGlzLm1vZGFsLmU9Cm5hYmxlQnV0dG9uKCJSZXNldCIpfWVsc2V7dGhpcy5tb2RhbC5kaXNh YmxlQnV0dG9uKCJSZXNldCIpfWlmKHRoaXMuY291bnRlcj0KLnJ1bm5pbmc9M0Q9M0QwJiZ0aGlz LmNvdW50ZXIuYW5ub3VuY2U+MCl7dGhpcy5tb2RhbC5lbmFibGVCdXR0b24oIlN0YXJ0Iil9PQpl bHNle3RoaXMubW9kYWwuZGlzYWJsZUJ1dHRvbigiU3RhcnQiKX1pZih0aGlzLmNvdW50ZXIucnVu bmluZz4wKXt0aGlzLm1vZGE9CmwuZW5hYmxlQnV0dG9uKCJQYXVzZSIpfWVsc2V7dGhpcy5tb2Rh bC5kaXNhYmxlQnV0dG9uKCJQYXVzZSIpfWlmKHRoaXMuY291bj0KdGVyLnJ1bm5pbmc9M0Q9M0Qw KXt0aGlzLm1vZGFsLmVuYWJsZUJ1dHRvbigiQ2hvb3NlIGxvY2FsIGZpbGUiKTt0aGlzLm1vZGFs PQouZW5hYmxlQnV0dG9uKCJDaG9vc2UgRlRQIGZpbGUiKTt0aGlzLm1vZGFsLmVuYWJsZUJ1dHRv bigiUGFzdGUvRmV0Y2ggZGF0YSI9Cil9ZWxzZXt0aGlzLm1vZGFsLmRpc2FibGVCdXR0b24oIkNo b29zZSBsb2NhbCBmaWxlIik7dGhpcy5tb2RhbC5kaXNhYmxlQnV0dD0Kb24oIkNob29zZSBGVFAg ZmlsZSIpO3RoaXMubW9kYWwuZGlzYWJsZUJ1dHRvbigiUGFzdGUvRmV0Y2ggZGF0YSIpfWlmKHRo aXMuPQpjdXJyZW50X3VzZXImJnRoaXMub3B0aW9ucy5mdHBfdXBsb2FkX2RpciYmdGhpcy5vcHRp b25zLmZ0cF91cGxvYWRfc2l0ZSl7dGg9CmlzLm1vZGFsLnNob3dCdXR0b24oIkNob29zZSBGVFAg ZmlsZSIpfWVsc2V7dGhpcy5tb2RhbC5oaWRlQnV0dG9uKCJDaG9vc2UgRj0KVFAgZmlsZSIpfWlm KHRoaXMuY291bnRlci5hbm5vdW5jZSt0aGlzLmNvdW50ZXIuc3VjY2Vzcyt0aGlzLmNvdW50ZXIu ZXJyb3I+PQowKXskKHRoaXMuZWwpLmZpbmQoIiN1cGxvYWQtdGFibGUiKS5zaG93KCl9ZWxzZXsk KHRoaXMuZWwpLmZpbmQoIiN1cGxvYWQtdGE9CmJsZSIpLmhpZGUoKX19LF91cGxvYWRfcGVyY2Vu dGFnZTpmdW5jdGlvbihoLGkpe3JldHVybih0aGlzLnVwbG9hZF9jb21wbGV0ZT0KZCsoaCppKSkv dGhpcy51cGxvYWRfc2l6ZX0sX3RlbXBsYXRlOmZ1bmN0aW9uKGksaCl7cmV0dXJuJzxkaXYgaWQ9 M0QiJytpKyciPQogY2xhc3M9M0QidXBsb2FkLWJveCI+PHRhYmxlIGlkPTNEInVwbG9hZC10YWJs ZSIgY2xhc3M9M0QidGFibGUgdGFibGUtc3RyaXA9CmVkIiBzdHlsZT0zRCJkaXNwbGF5OiBub25l OyI+PHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5UeXBlPD0KL3RoPjx0 aD5HZW5vbWU8L3RoPjx0aD5TZXR0aW5nczwvdGg+PHRoPlN0YXR1czwvdGg+PHRoPjwvdGg+PC90 cj48L3RoZWFkPjx0PQpib2R5PjwvdGJvZHk+PC90YWJsZT48L2Rpdj48aDYgaWQ9M0QiJytoKyci IGNsYXNzPTNEInVwbG9hZC1pbmZvIj48L2g2Pid9fSk9Cn0pOwpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKK2RlZmluZShbInV0aWxzL3V0aWxzIiwibXZjL3VwbG9hZC91cGxvYWQtYnV0dG9u IiwibXZjL3VwbG9hZC91cGxvYWQtbW9kZWwiPQosIm12Yy91cGxvYWQvdXBsb2FkLXJvdyIsIm12 Yy91cGxvYWQvdXBsb2FkLWZ0cCIsIm12Yy91aS91aS1wb3BvdmVyIiwibXZjL3U9CmkvdWktbW9k YWwiLCJ1dGlscy91cGxvYWRib3giXSxmdW5jdGlvbihmLGUsYyxiLGcsZCxhKXtyZXR1cm4gQmFj a2JvbmUuVmlldz0KLmV4dGVuZCh7b3B0aW9uczp7bmdpbnhfdXBsb2FkX3BhdGg6IiJ9LG1vZGFs Om51bGwsdWlfYnV0dG9uOm51bGwsdXBsb2FkYm94PQo6bnVsbCxjdXJyZW50X2hpc3Rvcnk6bnVs bCx1cGxvYWRfc2l6ZTowLGxpc3RfZXh0ZW5zaW9uczpbXSxsaXN0X2dlbm9tZXM6W109CixhdXRv OntpZDoiYXV0byIsdGV4dDoiQXV0by1kZXRlY3QiLGRlc2NyaXB0aW9uOiJUaGlzIHN5c3RlbSB3 aWxsIHRyeSB0byBkZT0KdGVjdCB0aGUgZmlsZSB0eXBlIGF1dG9tYXRpY2FsbHkuIElmIHlvdXIg ZmlsZSBpcyBub3QgZGV0ZWN0ZWQgcHJvcGVybHkgYXMgPQpvbmUgb2YgdGhlIGtub3duIGZvcm1h dHMsIGl0IG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgaXQgaGFzIHNvbWUgZm9ybWF0IHByb2I9Cmxl bXMgKGUuZy4sIGRpZmZlcmVudCBudW1iZXIgb2YgY29sdW1ucyBvbiBkaWZmZXJlbnQgcm93cyku IFlvdSBjYW4gc3RpbGwgYz0Kb2VyY2UgdGhlIHN5c3RlbSB0byBzZXQgeW91ciBkYXRhIHRvIHRo ZSBmb3JtYXQgeW91IHRoaW5rIGl0IHNob3VsZCBiZS4gIFlvPQp1IGNhbiBhbHNvIHVwbG9hZCBj b21wcmVzc2VkIGZpbGVzLCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGVjb21wcmVzc2U9 CmQuIn0sY29sbGVjdGlvbjpuZXcgYy5Db2xsZWN0aW9uKCksZnRwOm51bGwsY291bnRlcjp7YW5u b3VuY2U6MCxzdWNjZXNzOjAsZT0KcnJvcjowLHJ1bm5pbmc6MCxyZXNldDpmdW5jdGlvbigpe3Ro aXMuYW5ub3VuY2U9M0R0aGlzLnN1Y2Nlc3M9M0R0aGlzLmVycm9yPQo9M0R0aGlzLnJ1bm5pbmc9 M0QwfX0saW5pdGlhbGl6ZTpmdW5jdGlvbihpKXt2YXIgaD0zRHRoaXM7aWYoaSl7dGhpcy5vcHRp b249CnM9M0RfLmRlZmF1bHRzKGksdGhpcy5vcHRpb25zKX10aGlzLnVpX2J1dHRvbj0zRG5ldyBl Lk1vZGVsKHtpY29uOiJmYS11cGxvYT0KZCIsdG9vbHRpcDoiRG93bmxvYWQgZnJvbSBVUkwgb3Ig dXBsb2FkIGZpbGVzIGZyb20gZGlzayIsbGFiZWw6IkxvYWQgRGF0YSIsPQpvbmNsaWNrOmZ1bmN0 aW9uKGope2lmKGope2oucHJldmVudERlZmF1bHQoKTtoLnNob3coKX19LG9udW5sb2FkOmZ1bmN0 aW9uKCk9CntpZihoLmNvdW50ZXIucnVubmluZz4wKXtyZXR1cm4iU2V2ZXJhbCB1cGxvYWRzIGFy ZSBzdGlsbCBwcm9jZXNzaW5nLiJ9fX0pOz0KJCgiLndpdGgtdXBsb2FkLWJ1dHRvbiIpLmFwcGVu ZCgobmV3IGUuVmlldyh0aGlzLnVpX2J1dHRvbikpLiRlbCk7dmFyIGg9M0R0PQpoaXM7Zi5nZXQo e3VybDpnYWxheHlfY29uZmlnLnJvb3QrImFwaS9kYXRhdHlwZXM/ZXh0ZW5zaW9uX29ubHk9M0RG YWxzZSIsc3U9CmNjZXNzOmZ1bmN0aW9uKGope2ZvcihrZXkgaW4gail7aC5saXN0X2V4dGVuc2lv bnMucHVzaCh7aWQ6altrZXldLmV4dGVuc2lvbj0KLHRleHQ6altrZXldLmV4dGVuc2lvbixkZXNj cmlwdGlvbjpqW2tleV0uZGVzY3JpcHRpb24sZGVzY3JpcHRpb25fdXJsOmpba2V5PQpdLmRlc2Ny aXB0aW9uX3VybH0pfWgubGlzdF9leHRlbnNpb25zLnNvcnQoZnVuY3Rpb24obCxrKXtyZXR1cm4g bC5pZD5rLmlkPzE9CjpsLmlkPGsuaWQ/LTE6MH0pO2lmKCFoLm9wdGlvbnMuZGF0YXR5cGVzX2Rp c2FibGVfYXV0byl7aC5saXN0X2V4dGVuc2lvbnMudT0KbnNoaWZ0KGguYXV0byl9fX0pO2YuZ2V0 KHt1cmw6Z2FsYXh5X2NvbmZpZy5yb290KyJhcGkvZ2Vub21lcyIsc3VjY2VzczpmdW5jPQp0aW9u KGope2ZvcihrZXkgaW4gail7aC5saXN0X2dlbm9tZXMucHVzaCh7aWQ6altrZXldWzFdLHRleHQ6 altrZXldWzBdfSl9aC49Cmxpc3RfZ2Vub21lcy5zb3J0KGZ1bmN0aW9uKGwsayl7cmV0dXJuIGwu aWQ+ay5pZD8xOmwuaWQ8ay5pZD8tMTowfSl9fSk7dGhpcz0KLmNvbGxlY3Rpb24ub24oInJlbW92 ZSIsZnVuY3Rpb24oail7aC5fZXZlbnRSZW1vdmUoail9KTt0aGlzLmNvbGxlY3Rpb24ub24oPQoi Y2hhbmdlOmdlbm9tZSIsZnVuY3Rpb24oayl7dmFyIGo9M0RrLmdldCgiZ2Vub21lIik7aC5jb2xs ZWN0aW9uLmVhY2goZnVuY3Q9CmlvbihsKXtpZihsLmdldCgic3RhdHVzIik9M0Q9M0QiaW5pdCIm JmwuZ2V0KCJnZW5vbWUiKT0zRD0zRCI/Iil7bC5zZXQoImdlbj0Kb21lIixqKX19KX0pfSxzaG93 OmZ1bmN0aW9uKCl7dmFyIGg9M0R0aGlzO2lmKCFHYWxheHkuY3Vyckhpc3RvcnlQYW5lbHx8IUdh PQpsYXh5LmN1cnJIaXN0b3J5UGFuZWwubW9kZWwpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9u KCl7aC5zaG93KCl9LDUwMCk7cmU9CnR1cm59aWYoIXRoaXMubW9kYWwpe3ZhciBoPTNEdGhpczt0 aGlzLm1vZGFsPTNEbmV3IGEuVmlldyh7dGl0bGU6IkRvd25sb2FkID0KZGF0YSBkaXJlY3RseSBm cm9tIHdlYiBvciB1cGxvYWQgZmlsZXMgZnJvbSB5b3VyIGRpc2siLGJvZHk6dGhpcy5fdGVtcGxh dGUoPQoidXBsb2FkLWJveCIsInVwbG9hZC1pbmZvIiksYnV0dG9uczp7IkNob29zZSBsb2NhbCBm aWxlIjpmdW5jdGlvbigpe2gudXBsb2E9CmRib3guc2VsZWN0KCl9LCJDaG9vc2UgRlRQIGZpbGUi OmZ1bmN0aW9uKCl7aC5fZXZlbnRGdHAoKX0sIlBhc3RlL0ZldGNoIGRhdD0KYSI6ZnVuY3Rpb24o KXtoLl9ldmVudENyZWF0ZSgpfSxTdGFydDpmdW5jdGlvbigpe2guX2V2ZW50U3RhcnQoKX0sUGF1 c2U6ZnVuPQpjdGlvbigpe2guX2V2ZW50U3RvcCgpfSxSZXNldDpmdW5jdGlvbigpe2guX2V2ZW50 UmVzZXQoKX0sQ2xvc2U6ZnVuY3Rpb24oKXs9CmgubW9kYWwuaGlkZSgpfSx9LGhlaWdodDoiNDAw Iix3aWR0aDoiOTAwIixjbG9zaW5nX2V2ZW50czp0cnVlfSk7dGhpcy5zZXRFbD0KZW1lbnQoIiN1 cGxvYWQtYm94Iik7dmFyIGg9M0R0aGlzO3RoaXMudXBsb2FkYm94PTNEdGhpcy4kZWwudXBsb2Fk Ym94KHthbm5vPQp1bmNlOmZ1bmN0aW9uKGosayxsKXtoLl9ldmVudEFubm91bmNlKGosayxsKX0s aW5pdGlhbGl6ZTpmdW5jdGlvbihqLGssbCl7cmU9CnR1cm4gaC5fZXZlbnRJbml0aWFsaXplKGos ayxsKX0scHJvZ3Jlc3M6ZnVuY3Rpb24oaixrLGwpe2guX2V2ZW50UHJvZ3Jlc3Moaj0KLGssbCl9 LHN1Y2Nlc3M6ZnVuY3Rpb24oaixrLGwpe2guX2V2ZW50U3VjY2VzcyhqLGssbCl9LGVycm9yOmZ1 bmN0aW9uKGosayxsPQope2guX2V2ZW50RXJyb3IoaixrLGwpfSxjb21wbGV0ZTpmdW5jdGlvbigp e2guX2V2ZW50Q29tcGxldGUoKX19KTt2YXIgaT0zRHQ9Cmhpcy5tb2RhbC5nZXRCdXR0b24oIkNo b29zZSBGVFAgZmlsZSIpO3RoaXMuZnRwPTNEbmV3IGQuVmlldyh7dGl0bGU6IkZUUCBmaT0KbGVz Iixjb250YWluZXI6aX0pfXRoaXMubW9kYWwuc2hvdygpO3RoaXMuX3VwZGF0ZVVzZXIoKTt0aGlz Ll91cGRhdGVTY3JlZW4oPQopfSxfZXZlbnRSZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIGg9M0RpLmdl dCgic3RhdHVzIik7aWYoaD0zRD0zRCJzdWNjZXNzIil7dGg9CmlzLmNvdW50ZXIuc3VjY2Vzcy0t fWVsc2V7aWYoaD0zRD0zRCJlcnJvciIpe3RoaXMuY291bnRlci5lcnJvci0tfWVsc2V7dGhpcz0K LmNvdW50ZXIuYW5ub3VuY2UtLX19dGhpcy5fdXBkYXRlU2NyZWVuKCk7dGhpcy51cGxvYWRib3gu cmVtb3ZlKGkuaWQpfSxfZXZlPQpudEFubm91bmNlOmZ1bmN0aW9uKGgsaSxrKXt0aGlzLmNvdW50 ZXIuYW5ub3VuY2UrKzt0aGlzLl91cGRhdGVTY3JlZW4oKTt2YXI9CiBqPTNEbmV3IGIodGhpcyx7 aWQ6aCxmaWxlX25hbWU6aS5uYW1lLGZpbGVfc2l6ZTppLnNpemUsZmlsZV9tb2RlOmkubW9kZSxm aT0KbGVfcGF0aDppLnBhdGh9KTt0aGlzLmNvbGxlY3Rpb24uYWRkKGoubW9kZWwpOyQodGhpcy5l bCkuZmluZCgidGJvZHk6Zmlyc3QiPQopLmFwcGVuZChqLiRlbCk7ai5yZW5kZXIoKX0sX2V2ZW50 SW5pdGlhbGl6ZTpmdW5jdGlvbihtLGoscyl7dmFyIGs9M0R0aGlzLmM9Cm9sbGVjdGlvbi5nZXQo bSk7ay5zZXQoInN0YXR1cyIsInJ1bm5pbmciKTt2YXIgbz0zRGsuZ2V0KCJmaWxlX25hbWUiKTt2 YXIgbj0KPTNEay5nZXQoImZpbGVfcGF0aCIpO3ZhciBoPTNEay5nZXQoImZpbGVfbW9kZSIpO3Zh ciBwPTNEay5nZXQoImV4dGVuc2lvbiIpPQo7dmFyIHI9M0RrLmdldCgiZ2Vub21lIik7dmFyIHE9 M0RrLmdldCgidXJsX3Bhc3RlIik7dmFyIGw9M0RrLmdldCgic3BhY2VfdG89Cl90YWJzIik7dmFy IGk9M0RrLmdldCgidG9fcG9zaXhfbGluZXMiKTtpZighcSYmIShqLnNpemU+MCkpe3JldHVybiBu dWxsfXRoaT0Kcy51cGxvYWRib3guY29uZmlndXJlKHt1cmw6dGhpcy5vcHRpb25zLm5naW54X3Vw bG9hZF9wYXRofSk7aWYoaD0zRD0zRCJsb2NhPQpsIil7dGhpcy51cGxvYWRib3guY29uZmlndXJl KHtwYXJhbW5hbWU6ImZpbGVzXzB8ZmlsZV9kYXRhIn0pfWVsc2V7dGhpcy51cGw9Cm9hZGJveC5j b25maWd1cmUoe3BhcmFtbmFtZTpudWxsfSl9dG9vbF9pbnB1dD0zRHt9O2lmKGg9M0Q9M0QibmV3 Iil7dG9vbF9pbj0KcHV0WyJmaWxlc18wfHVybF9wYXN0ZSJdPTNEcX1pZihoPTNEPTNEImZ0cCIp e3Rvb2xfaW5wdXRbImZpbGVzXzB8ZnRwX2ZpbGVzPQoiXT0zRG59dG9vbF9pbnB1dC5kYmtleT0z RHI7dG9vbF9pbnB1dC5maWxlX3R5cGU9M0RwO3Rvb2xfaW5wdXRbImZpbGVzXzB8dHk9CnBlIl09 M0QidXBsb2FkX2RhdGFzZXQiO3Rvb2xfaW5wdXRbImZpbGVzXzB8c3BhY2VfdG9fdGFiIl09M0Rs JiYiWWVzInx8bnVsbD0KO3Rvb2xfaW5wdXRbImZpbGVzXzB8dG9fcG9zaXhfbGluZXMiXT0zRGkm JiJZZXMifHxudWxsO2RhdGE9M0R7fTtkYXRhLmhpc3RvPQpyeV9pZD0zRHRoaXMuY3VycmVudF9o aXN0b3J5O2RhdGEudG9vbF9pZD0zRCJ1cGxvYWQxIjtkYXRhLmlucHV0cz0zREpTT04uc3Q9CnJp bmdpZnkodG9vbF9pbnB1dCk7cmV0dXJuIGRhdGF9LF9ldmVudFByb2dyZXNzOmZ1bmN0aW9uKGks aixoKXt2YXIgaz0zRHRoaT0Kcy5jb2xsZWN0aW9uLmdldChpKTtrLnNldCgicGVyY2VudGFnZSIs aCk7dGhpcy51aV9idXR0b24uc2V0KCJwZXJjZW50YWdlIix0PQpoaXMuX3VwbG9hZF9wZXJjZW50 YWdlKGgsai5zaXplKSl9LF9ldmVudFN1Y2Nlc3M6ZnVuY3Rpb24oaSxqLGwpe3ZhciBrPTNEdGg9 CmlzLmNvbGxlY3Rpb24uZ2V0KGkpO2suc2V0KCJwZXJjZW50YWdlIiwxMDApO2suc2V0KCJzdGF0 dXMiLCJzdWNjZXNzIik7dmFyID0KaD0zRGsuZ2V0KCJmaWxlX3NpemUiKTt0aGlzLnVpX2J1dHRv bi5zZXQoInBlcmNlbnRhZ2UiLHRoaXMuX3VwbG9hZF9wZXJjZW50PQphZ2UoMTAwLGgpKTt0aGlz LnVwbG9hZF9jb21wbGV0ZWQrPTNEaCoxMDA7dGhpcy5jb3VudGVyLmFubm91bmNlLS07dGhpcy5j b3U9Cm50ZXIuc3VjY2VzcysrO3RoaXMuX3VwZGF0ZVNjcmVlbigpO0dhbGF4eS5jdXJySGlzdG9y eVBhbmVsLnJlZnJlc2hDb250ZW50cz0KKCl9LF9ldmVudEVycm9yOmZ1bmN0aW9uKGgsaSxrKXt2 YXIgaj0zRHRoaXMuY29sbGVjdGlvbi5nZXQoaCk7ai5zZXQoInBlcmNlPQpudGFnZSIsMTAwKTtq LnNldCgic3RhdHVzIiwiZXJyb3IiKTtqLnNldCgiaW5mbyIsayk7dGhpcy51aV9idXR0b24uc2V0 KCJwZXI9CmNlbnRhZ2UiLHRoaXMuX3VwbG9hZF9wZXJjZW50YWdlKDEwMCxpLnNpemUpKTt0aGlz LnVpX2J1dHRvbi5zZXQoInN0YXR1cyIsIj0KZGFuZ2VyIik7dGhpcy51cGxvYWRfY29tcGxldGVk Kz0zRGkuc2l6ZSoxMDA7dGhpcy5jb3VudGVyLmFubm91bmNlLS07dGhpcy5jPQpvdW50ZXIuZXJy b3IrKzt0aGlzLl91cGRhdGVTY3JlZW4oKX0sX2V2ZW50Q29tcGxldGU6ZnVuY3Rpb24oKXt0aGlz LmNvbGxlY3Q9Cmlvbi5lYWNoKGZ1bmN0aW9uKGgpe2lmKGguZ2V0KCJzdGF0dXMiKT0zRD0zRCJx dWV1ZWQiKXtoLnNldCgic3RhdHVzIiwiaW5pdD0KIil9fSk7dGhpcy5jb3VudGVyLnJ1bm5pbmc9 M0QwO3RoaXMuX3VwZGF0ZVNjcmVlbigpfSxfZXZlbnRGdHA6ZnVuY3Rpb24oKXtpPQpmKCF0aGlz LmZ0cC52aXNpYmxlKXt0aGlzLmZ0cC5lbXB0eSgpO3RoaXMuZnRwLmFwcGVuZCgobmV3IGcodGhp cykpLiRlbCk7dGg9CmlzLmZ0cC5zaG93KCl9ZWxzZXt0aGlzLmZ0cC5oaWRlKCl9fSxfZXZlbnRD cmVhdGU6ZnVuY3Rpb24oKXt0aGlzLnVwbG9hZGJveD0KLmFkZChbe25hbWU6Ik5ldyBGaWxlIixz aXplOjAsbW9kZToibmV3In1dKX0sX2V2ZW50U3RhcnQ6ZnVuY3Rpb24oKXtpZih0aGlzPQouY291 bnRlci5hbm5vdW5jZT0zRD0zRDB8fHRoaXMuY291bnRlci5ydW5uaW5nPjApe3JldHVybn12YXIg aD0zRHRoaXM7dGhpcy49CnVwbG9hZF9zaXplPTNEMDt0aGlzLnVwbG9hZF9jb21wbGV0ZWQ9M0Qw O3RoaXMuY29sbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGkpez0KaWYoaS5nZXQoInN0YXR1cyIpPTNE PTNEImluaXQiKXtpLnNldCgic3RhdHVzIiwicXVldWVkIik7aC51cGxvYWRfc2l6ZSs9M0RpPQou Z2V0KCJmaWxlX3NpemUiKX19KTt0aGlzLnVpX2J1dHRvbi5zZXQoInBlcmNlbnRhZ2UiLDApO3Ro aXMudWlfYnV0dG9uLnNldCg9CiJzdGF0dXMiLCJzdWNjZXNzIik7dGhpcy5jb3VudGVyLnJ1bm5p bmc9M0R0aGlzLmNvdW50ZXIuYW5ub3VuY2U7dGhpcy5fdXBkYT0KdGVTY3JlZW4oKTt0aGlzLnVw bG9hZGJveC5zdGFydCgpfSxfZXZlbnRTdG9wOmZ1bmN0aW9uKCl7aWYodGhpcy5jb3VudGVyLnJ1 PQpubmluZz0zRD0zRDApe3JldHVybn10aGlzLnVpX2J1dHRvbi5zZXQoInN0YXR1cyIsImluZm8i KTt0aGlzLnVwbG9hZGJveC5zdG89CnAoKTskKCIjdXBsb2FkLWluZm8iKS5odG1sKCJRdWV1ZSB3 aWxsIHBhdXNlIGFmdGVyIGNvbXBsZXRpbmcgdGhlIGN1cnJlbnQgZj0KaWxlLi4uIil9LF9ldmVu dFJlc2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5jb3VudGVyLnJ1bm5pbmc9M0Q9M0QwKXt0aGlzLmNv bGxlPQpjdGlvbi5yZXNldCgpO3RoaXMuY291bnRlci5yZXNldCgpO3RoaXMuX3VwZGF0ZVNjcmVl bigpO3RoaXMudXBsb2FkYm94LnJlc2U9CnQoKTt0aGlzLnVpX2J1dHRvbi5zZXQoInBlcmNlbnRh Z2UiLDApfX0sX3VwZGF0ZVVzZXI6ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbj0KdF91c2VyPTNER2Fs YXh5LmN1cnJVc2VyLmdldCgiaWQiKTt0aGlzLmN1cnJlbnRfaGlzdG9yeT0zRG51bGw7aWYodGhp cy5jdXJyPQplbnRfdXNlcil7dGhpcy5jdXJyZW50X2hpc3Rvcnk9M0RHYWxheHkuY3Vyckhpc3Rv cnlQYW5lbC5tb2RlbC5nZXQoImlkIil9fSw9Cl91cGRhdGVTY3JlZW46ZnVuY3Rpb24oKXtpZih0 aGlzLmNvdW50ZXIuYW5ub3VuY2U9M0Q9M0QwKXtpZih0aGlzLnVwbG9hZGJveD0KLmNvbXBhdGli bGUoKSl7bWVzc2FnZT0zRCJZb3UgY2FuIERyYWcgJiBEcm9wIGZpbGVzIGludG8gdGhpcyBib3gu In1lbHNle21lPQpzc2FnZT0zRCJVbmZvcnR1bmF0ZWx5LCB5b3VyIGJyb3dzZXIgZG9lcyBub3Qg c3VwcG9ydCBtdWx0aXBsZSBmaWxlIHVwbG9hZHM9CiBvciBkcmFnJmRyb3AuPGJyPlNvbWUgc3Vw cG9ydGVkIGJyb3dzZXJzIGFyZTogRmlyZWZveCA0KywgQ2hyb21lIDcrLCBJRSAxMD0KKywgT3Bl cmEgMTIrIG9yIFNhZmFyaSA2Ky4ifX1lbHNle2lmKHRoaXMuY291bnRlci5ydW5uaW5nPTNEPTNE MCl7bWVzc2FnZT0KPTNEIllvdSBhZGRlZCAiK3RoaXMuY291bnRlci5hbm5vdW5jZSsiIGZpbGUo cykgdG8gdGhlIHF1ZXVlLiBBZGQgbW9yZSBmaWxlPQpzIG9yIGNsaWNrICdTdGFydCcgdG8gcHJv Y2VlZC4ifWVsc2V7bWVzc2FnZT0zRCJQbGVhc2Ugd2FpdC4uLiIrdGhpcy5jb3VudGU9CnIuYW5u b3VuY2UrIiBvdXQgb2YgIit0aGlzLmNvdW50ZXIucnVubmluZysiIHJlbWFpbmluZy4ifX0kKCIj dXBsb2FkLWluZm8iKT0KLmh0bWwobWVzc2FnZSk7aWYodGhpcy5jb3VudGVyLnJ1bm5pbmc9M0Q9 M0QwJiZ0aGlzLmNvdW50ZXIuYW5ub3VuY2UrdGhpcy5jPQpvdW50ZXIuc3VjY2Vzcyt0aGlzLmNv dW50ZXIuZXJyb3I+MCl7dGhpcy5tb2RhbC5lbmFibGVCdXR0b24oIlJlc2V0Iil9ZWxzZXs9CnRo aXMubW9kYWwuZGlzYWJsZUJ1dHRvbigiUmVzZXQiKX1pZih0aGlzLmNvdW50ZXIucnVubmluZz0z RD0zRDAmJnRoaXMuY291bj0KdGVyLmFubm91bmNlPjApe3RoaXMubW9kYWwuZW5hYmxlQnV0dG9u KCJTdGFydCIpfWVsc2V7dGhpcy5tb2RhbC5kaXNhYmxlQnV0PQp0b24oIlN0YXJ0Iil9aWYodGhp cy5jb3VudGVyLnJ1bm5pbmc+MCl7dGhpcy5tb2RhbC5lbmFibGVCdXR0b24oIlBhdXNlIil9ZWw9 CnNle3RoaXMubW9kYWwuZGlzYWJsZUJ1dHRvbigiUGF1c2UiKX1pZih0aGlzLmNvdW50ZXIucnVu bmluZz0zRD0zRDApe3RoaXMubT0Kb2RhbC5lbmFibGVCdXR0b24oIkNob29zZSBsb2NhbCBmaWxl Iik7dGhpcy5tb2RhbC5lbmFibGVCdXR0b24oIkNob29zZSBGVFAgPQpmaWxlIik7dGhpcy5tb2Rh bC5lbmFibGVCdXR0b24oIlBhc3RlL0ZldGNoIGRhdGEiKX1lbHNle3RoaXMubW9kYWwuZGlzYWJs ZUI9CnV0dG9uKCJDaG9vc2UgbG9jYWwgZmlsZSIpO3RoaXMubW9kYWwuZGlzYWJsZUJ1dHRvbigi Q2hvb3NlIEZUUCBmaWxlIik7dGhpcz0KLm1vZGFsLmRpc2FibGVCdXR0b24oIlBhc3RlL0ZldGNo IGRhdGEiKX1pZih0aGlzLmN1cnJlbnRfdXNlciYmdGhpcy5vcHRpb25zPQouZnRwX3VwbG9hZF9k aXImJnRoaXMub3B0aW9ucy5mdHBfdXBsb2FkX3NpdGUpe3RoaXMubW9kYWwuc2hvd0J1dHRvbigi Q2hvb3M9CmUgRlRQIGZpbGUiKX1lbHNle3RoaXMubW9kYWwuaGlkZUJ1dHRvbigiQ2hvb3NlIEZU UCBmaWxlIil9aWYodGhpcy5jb3VudGVyLj0KYW5ub3VuY2UrdGhpcy5jb3VudGVyLnN1Y2Nlc3Mr dGhpcy5jb3VudGVyLmVycm9yPjApeyQodGhpcy5lbCkuZmluZCgiI3VwbG9hPQpkLXRhYmxlIiku c2hvdygpfWVsc2V7JCh0aGlzLmVsKS5maW5kKCIjdXBsb2FkLXRhYmxlIikuaGlkZSgpfX0sX3Vw bG9hZF9wZXI9CmNlbnRhZ2U6ZnVuY3Rpb24oaCxpKXtyZXR1cm4odGhpcy51cGxvYWRfY29tcGxl dGVkKyhoKmkpKS90aGlzLnVwbG9hZF9zaXplfT0KLF90ZW1wbGF0ZTpmdW5jdGlvbihpLGgpe3Jl dHVybic8ZGl2IGlkPTNEIicraSsnIiBjbGFzcz0zRCJ1cGxvYWQtYm94Ij48dGFiPQpsZSBpZD0z RCJ1cGxvYWQtdGFibGUiIGNsYXNzPTNEInRhYmxlIHRhYmxlLXN0cmlwZWQiIHN0eWxlPTNEImRp c3BsYXk6IG5vbmU9CjsiPjx0aGVhZD48dHI+PHRoPk5hbWU8L3RoPjx0aD5TaXplPC90aD48dGg+ VHlwZTwvdGg+PHRoPkdlbm9tZTwvdGg+PHRoPlNldD0KdGluZ3M8L3RoPjx0aD5TdGF0dXM8L3Ro Pjx0aD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PC90Ym9keT48L3RhYmxlPjwvZGl2PQo+PGg2 IGlkPTNEIicraCsnIiBjbGFzcz0zRCJ1cGxvYWQtaW5mbyI+PC9oNj4nfX0pfSk7ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciA4YTcwNDU3OTJjN2ZlNDhhOTkyOTU3NzA0ZTUx ZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThhPQpiOGY4ZGMwMmJhMzY5OTc2 ZiBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvdXRpbHMvdXRpbHMuanMKLS0tIGEvc3RhdGljL3Njcmlw dHMvcGFja2VkL3V0aWxzL3V0aWxzLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC91dGls cy91dGlscy5qcwpAQCAtMSwxICsxLDEgQEAKLWRlZmluZShbImxpYnMvdW5kZXJzY29yZSJdLGZ1 bmN0aW9uKG0pe2Z1bmN0aW9uIG4ocixxKXtmb3IodmFyIG8gaW4gcil7dmFyPQogcD0zRHJbb107 aWYocCYmdHlwZW9mKHApPTNEPTNEIm9iamVjdCIpe3EocCk7bihwLHEpfX19ZnVuY3Rpb24gZChv KXtyZXR1cm49CiAkKCI8ZGl2Lz4iKS50ZXh0KG8pLmh0bWwoKX1mdW5jdGlvbiBsKHApe2lmKCEo cCBpbnN0YW5jZW9mIEFycmF5KSl7cD0zRFtwXT0KfWZvcih2YXIgbyBpbiBwKXtpZihbIk5vbmUi LG51bGwsIm51bGwiLHVuZGVmaW5lZCwidW5kZWZpbmVkIl0uaW5kZXhPZihwW29dPQopPi0xKXty ZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWZ1bmN0aW9uIGgobyl7dmFyIG89M0RvLnRvU3RyaW5n KCk7aWYobyl7bz0KPTNEby5yZXBsYWNlKC8sL2csIiwgIik7dmFyIHA9M0RvLmxhc3RJbmRleE9m KCIsICIpO2lmKHAhPTNELTEpe289M0RvLnN1YnN0PQpyKDAscCkrIiBvciAiK28uc3Vic3RyKHAr MSl9cmV0dXJuIG99cmV0dXJuIiJ9ZnVuY3Rpb24gZShvKXt0b3AuX191dGlsc19fZ2U9CnRfXz0z RHRvcC5fX3V0aWxzX19nZXRfX3x8e307aWYoby5jYWNoZSYmdG9wLl9fdXRpbHNfX2dldF9fW28u dXJsXSl7by5zdWNjZT0Kc3MmJm8uc3VjY2Vzcyh0b3AuX191dGlsc19fZ2V0X19bby51cmxdKTtj b25zb2xlLmRlYnVnKCJ1dGlscy5qczo6Z2V0KCkgLSBGPQpldGNoaW5nIGZyb20gY2FjaGUgWyIr by51cmwrIl0uIil9ZWxzZXtpKHt1cmw6by51cmwsZGF0YTpvLmRhdGEsc3VjY2VzczpmdW49CmN0 aW9uKHApe3RvcC5fX3V0aWxzX19nZXRfX1tvLnVybF09M0RwO28uc3VjY2VzcyYmby5zdWNjZXNz KHApfSxlcnJvcjpmdW5jdD0KaW9uKHApe28uZXJyb3ImJm8uZXJyb3IocCl9fSl9fWZ1bmN0aW9u IGkocCl7dmFyIG89M0R7Y29udGVudFR5cGU6ImFwcGxpY2F0PQppb24vanNvbiIsdHlwZTpwLnR5 cGV8fCJHRVQiLGRhdGE6cC5kYXRhfHx7fSx1cmw6cC51cmx9O2lmKG8udHlwZT0zRD0zRCJHRVQ9 CiJ8fG8udHlwZT0zRD0zRCJERUxFVEUiKXtpZihvLnVybC5pbmRleE9mKCI/Iik9M0Q9M0QtMSl7 by51cmwrPTNEIj8ifWVsc2V7bz0KLnVybCs9M0QiJiJ9by51cmw9M0RvLnVybCskLnBhcmFtKG8u ZGF0YSk7by5kYXRhPTNEbnVsbH1lbHNle28uZGF0YVR5cGU9M0QiPQpqc29uIjtvLnVybD0zRG8u dXJsO28uZGF0YT0zREpTT04uc3RyaW5naWZ5KG8uZGF0YSl9JC5hamF4KG8pLmRvbmUoZnVuY3Rp b249CihxKXtpZih0eXBlb2YgcT0zRD0zRD0zRCJzdHJpbmciKXt0cnl7cT0zRHEucmVwbGFjZSgi SW5maW5pdHksIiwnIkluZmluaXR5Ij0KLCcpO3E9M0RqUXVlcnkucGFyc2VKU09OKHEpfWNhdGNo KHIpe2NvbnNvbGUuZGVidWcocil9fXAuc3VjY2VzcyYmcC5zdWNjZXNzPQoocSl9KS5mYWlsKGZ1 bmN0aW9uKHIpe3ZhciBxPTNEbnVsbDt0cnl7cT0zRGpRdWVyeS5wYXJzZUpTT04oci5yZXNwb25z ZVRleHQ9Cil9Y2F0Y2gocyl7cT0zRHIucmVzcG9uc2VUZXh0fXAuZXJyb3ImJnAuZXJyb3IocSxy KX0pfWZ1bmN0aW9uIGoocixvKXt2YXIgcD0KPTNEJCgnPGRpdiBjbGFzcz0zRCInK3IrJyI+PC9k aXY+Jyk7cC5hcHBlbmRUbygiOmVxKDApIik7dmFyIHE9M0RwLmNzcyhvKTtwPQoucmVtb3ZlKCk7 cmV0dXJuIHF9ZnVuY3Rpb24gZyhvKXtpZighJCgnbGlua1tocmVmXj0zRCInK28rJyJdJykubGVu Z3RoKXskKCc9CjxsaW5rIGhyZWY9M0QiJytnYWxheHlfY29uZmlnLnJvb3QrbysnIiByZWw9M0Qi c3R5bGVzaGVldCI+JykuYXBwZW5kVG8oImhlYT0KZCIpfX1mdW5jdGlvbiBrKG8scCl7aWYobyl7 cmV0dXJuIG0uZGVmYXVsdHMobyxwKX1lbHNle3JldHVybiBwfX1mdW5jdGlvbiBiPQoocCxyKXt2 YXIgcT0zRCIiO2lmKHA+PTNEMTAwMDAwMDAwMDAwKXtwPTNEcC8xMDAwMDAwMDAwMDA7cT0zRCJU QiJ9ZWxzZXtpZig9CnA+PTNEMTAwMDAwMDAwKXtwPTNEcC8xMDAwMDAwMDA7cT0zRCJHQiJ9ZWxz ZXtpZihwPj0zRDEwMDAwMCl7cD0zRHAvMTAwMDAwOz0KcT0zRCJNQiJ9ZWxzZXtpZihwPj0zRDEw MCl7cD0zRHAvMTAwO3E9M0QiS0IifWVsc2V7aWYocD4wKXtwPTNEcCoxMDtxPTNEImIiPQp9ZWxz ZXtyZXR1cm4iPHN0cm9uZz4tPC9zdHJvbmc+In19fX19dmFyIG89M0QoTWF0aC5yb3VuZChwKS8x MCk7aWYocil7cmV0dXI9Cm4gbysiICIrcX1lbHNle3JldHVybiI8c3Ryb25nPiIrbysiPC9zdHJv bmc+ICIrcX19ZnVuY3Rpb24gYSgpe3JldHVybiJ4IitNYT0KdGgucmFuZG9tKCkudG9TdHJpbmco MzYpLnN1YnN0cmluZygyLDkpfWZ1bmN0aW9uIGMobyl7dmFyIHA9M0QkKCI8cD48L3A+Iik7PQpw LmFwcGVuZChvKTtyZXR1cm4gcH1mdW5jdGlvbiBmKCl7dmFyIHE9M0RuZXcgRGF0ZSgpO3ZhciBv PTNEKHEuZ2V0SG91cnMoKTw9CjEwPyIwIjoiIikrcS5nZXRIb3VycygpO3ZhciBwPTNEKHEuZ2V0 TWludXRlcygpPDEwPyIwIjoiIikrcS5nZXRNaW51dGVzKCk7dj0KYXIgcj0zRHEuZ2V0RGF0ZSgp KyIvIisocS5nZXRNb250aCgpKzEpKyIvIitxLmdldEZ1bGxZZWFyKCkrIiwgIitvKyI6IitwO3Jl PQp0dXJuIHJ9cmV0dXJue2Nzc0xvYWRGaWxlOmcsY3NzR2V0QXR0cmlidXRlOmosZ2V0OmUsbWVy Z2U6ayxieXRlc1RvU3RyaW5nOmI9Cix1dWlkOmEsdGltZTpmLHdyYXA6YyxyZXF1ZXN0Omksc2Fu aXRpemU6ZCx0ZXh0aWZ5OmgsdmFsaWRhdGU6bCxkZWVwZWFjaDpufT0KfSk7ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorZGVmaW5lKFsibGlicy91bmRlcnNjb3JlIl0sZnVuY3Rpb24obSl7 ZnVuY3Rpb24gbihyLHEpe2Zvcih2YXIgbyBpbiByKXt2YXI9CiBwPTNEcltvXTtpZihwJiZ0eXBl b2YocCk9M0Q9M0Qib2JqZWN0Iil7cShwKTtuKHAscSl9fX1mdW5jdGlvbiBkKG8pe3JldHVybj0K ICQoIjxkaXYvPiIpLnRleHQobykuaHRtbCgpfWZ1bmN0aW9uIGwocCl7aWYoIShwIGluc3RhbmNl b2YgQXJyYXkpKXtwPTNEW3BdPQp9Zm9yKHZhciBvIGluIHApe2lmKFsiTm9uZSIsbnVsbCwibnVs bCIsdW5kZWZpbmVkLCJ1bmRlZmluZWQiXS5pbmRleE9mKHBbb109Cik+LTEpe3JldHVybiBmYWxz ZX19cmV0dXJuIHRydWV9ZnVuY3Rpb24gaChvKXt2YXIgbz0zRG8udG9TdHJpbmcoKTtpZihvKXtv PQo9M0RvLnJlcGxhY2UoLywvZywiLCAiKTt2YXIgcD0zRG8ubGFzdEluZGV4T2YoIiwgIik7aWYo cCE9M0QtMSl7bz0zRG8uc3Vic3Q9CnIoMCxwKSsiIG9yICIrby5zdWJzdHIocCsxKX1yZXR1cm4g b31yZXR1cm4iIn1mdW5jdGlvbiBlKG8pe3RvcC5fX3V0aWxzX19nZT0KdF9fPTNEdG9wLl9fdXRp bHNfX2dldF9ffHx7fTtpZihvLmNhY2hlJiZ0b3AuX191dGlsc19fZ2V0X19bby51cmxdKXtvLnN1 Y2NlPQpzcyYmby5zdWNjZXNzKHRvcC5fX3V0aWxzX19nZXRfX1tvLnVybF0pO2NvbnNvbGUuZGVi dWcoInV0aWxzLmpzOjpnZXQoKSAtIEY9CmV0Y2hpbmcgZnJvbSBjYWNoZSBbIitvLnVybCsiXS4i KX1lbHNle2koe3VybDpvLnVybCxkYXRhOm8uZGF0YSxzdWNjZXNzOmZ1bj0KY3Rpb24ocCl7dG9w Ll9fdXRpbHNfX2dldF9fW28udXJsXT0zRHA7by5zdWNjZXNzJiZvLnN1Y2Nlc3MocCl9LGVycm9y OmZ1bmN0PQppb24ocCl7by5lcnJvciYmby5lcnJvcihwKX19KX19ZnVuY3Rpb24gaShwKXt2YXIg bz0zRHtjb250ZW50VHlwZToiYXBwbGljYXQ9Cmlvbi9qc29uIix0eXBlOnAudHlwZXx8IkdFVCIs ZGF0YTpwLmRhdGF8fHt9LHVybDpwLnVybH07aWYoby50eXBlPTNEPTNEIkdFVD0KInx8by50eXBl PTNEPTNEIkRFTEVURSIpe2lmKG8udXJsLmluZGV4T2YoIj8iKT0zRD0zRC0xKXtvLnVybCs9M0Qi PyJ9ZWxzZXtvPQoudXJsKz0zRCImIn1vLnVybD0zRG8udXJsKyQucGFyYW0oby5kYXRhLHRydWUp O28uZGF0YT0zRG51bGx9ZWxzZXtvLmRhdGFUeXA9CmU9M0QianNvbiI7by51cmw9M0RvLnVybDtv LmRhdGE9M0RKU09OLnN0cmluZ2lmeShvLmRhdGEpfSQuYWpheChvKS5kb25lKGZ1bj0KY3Rpb24o cSl7aWYodHlwZW9mIHE9M0Q9M0Q9M0Qic3RyaW5nIil7dHJ5e3E9M0RxLnJlcGxhY2UoIkluZmlu aXR5LCIsJyJJbmZpPQpuaXR5IiwnKTtxPTNEalF1ZXJ5LnBhcnNlSlNPTihxKX1jYXRjaChyKXtj b25zb2xlLmRlYnVnKHIpfX1wLnN1Y2Nlc3MmJnAuc3U9CmNjZXNzKHEpfSkuZmFpbChmdW5jdGlv bihyKXt2YXIgcT0zRG51bGw7dHJ5e3E9M0RqUXVlcnkucGFyc2VKU09OKHIucmVzcG9ucz0KZVRl eHQpfWNhdGNoKHMpe3E9M0RyLnJlc3BvbnNlVGV4dH1wLmVycm9yJiZwLmVycm9yKHEscil9KX1m dW5jdGlvbiBqKHIsbyl7PQp2YXIgcD0zRCQoJzxkaXYgY2xhc3M9M0QiJytyKyciPjwvZGl2Picp O3AuYXBwZW5kVG8oIjplcSgwKSIpO3ZhciBxPTNEcC5jc3M9CihvKTtwLnJlbW92ZSgpO3JldHVy biBxfWZ1bmN0aW9uIGcobyl7aWYoISQoJ2xpbmtbaHJlZl49M0QiJytvKyciXScpLmxlbmd0aD0K KXskKCc8bGluayBocmVmPTNEIicrZ2FsYXh5X2NvbmZpZy5yb290K28rJyIgcmVsPTNEInN0eWxl c2hlZXQiPicpLmFwcGVuZFRvPQooImhlYWQiKX19ZnVuY3Rpb24gayhvLHApe2lmKG8pe3JldHVy biBtLmRlZmF1bHRzKG8scCl9ZWxzZXtyZXR1cm4gcH19ZnVuY3Q9CmlvbiBiKHAscil7dmFyIHE9 M0QiIjtpZihwPj0zRDEwMDAwMDAwMDAwMCl7cD0zRHAvMTAwMDAwMDAwMDAwO3E9M0QiVEIifWVs cz0KZXtpZihwPj0zRDEwMDAwMDAwMCl7cD0zRHAvMTAwMDAwMDAwO3E9M0QiR0IifWVsc2V7aWYo cD49M0QxMDAwMDApe3A9M0RwLzEwPQowMDAwO3E9M0QiTUIifWVsc2V7aWYocD49M0QxMDApe3A9 M0RwLzEwMDtxPTNEIktCIn1lbHNle2lmKHA+MCl7cD0zRHAqMTA7cT0KPTNEImIifWVsc2V7cmV0 dXJuIjxzdHJvbmc+LTwvc3Ryb25nPiJ9fX19fXZhciBvPTNEKE1hdGgucm91bmQocCkvMTApO2lm KHIpPQp7cmV0dXJuIG8rIiAiK3F9ZWxzZXtyZXR1cm4iPHN0cm9uZz4iK28rIjwvc3Ryb25nPiAi K3F9fWZ1bmN0aW9uIGEoKXtyZXR1cm49CiJ4IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5z dWJzdHJpbmcoMiw5KX1mdW5jdGlvbiBjKG8pe3ZhciBwPTNEJCgiPHA+PD0KL3A+Iik7cC5hcHBl bmQobyk7cmV0dXJuIHB9ZnVuY3Rpb24gZigpe3ZhciBxPTNEbmV3IERhdGUoKTt2YXIgbz0zRChx LmdldEhvPQp1cnMoKTwxMD8iMCI6IiIpK3EuZ2V0SG91cnMoKTt2YXIgcD0zRChxLmdldE1pbnV0 ZXMoKTwxMD8iMCI6IiIpK3EuZ2V0TWludXQ9CmVzKCk7dmFyIHI9M0RxLmdldERhdGUoKSsiLyIr KHEuZ2V0TW9udGgoKSsxKSsiLyIrcS5nZXRGdWxsWWVhcigpKyIsICIrbysiOj0KIitwO3JldHVy biByfXJldHVybntjc3NMb2FkRmlsZTpnLGNzc0dldEF0dHJpYnV0ZTpqLGdldDplLG1lcmdlOmss Ynl0ZXNUb1N0PQpyaW5nOmIsdXVpZDphLHRpbWU6Zix3cmFwOmMscmVxdWVzdDppLHNhbml0aXpl OmQsdGV4dGlmeTpoLHZhbGlkYXRlOmwsZGVlcGU9CmFjaDpufX0pOwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKCmRpZmYgLXIgOGE3MDQ1NzkyYzdmZTQ4YTk5Mjk1NzcwNGU1MWUzMTNkMzJl NmNkZCAtciAwZjczNzQ4NWNiN2Y1ZDc1NTk1ZTk4YT0KYjhmOGRjMDJiYTM2OTk3NmYgc3RhdGlj L3NjcmlwdHMvdXRpbHMvdXRpbHMuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvdXRpbHMvdXRpbHMu anMKKysrIGIvc3RhdGljL3NjcmlwdHMvdXRpbHMvdXRpbHMuanMKQEAgLTExMSw3ICsxMTEsNyBA QAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWpheENvbmZpZy51cmwgKz0zRCAnJic7 CiAgICAgICAgIH0KLSAgICAgICAgYWpheENvbmZpZy51cmwgICAgICA9M0QgYWpheENvbmZpZy51 cmwgKyAkLnBhcmFtKGFqYXhDb25maWcuZGF0YSk7CisgICAgICAgIGFqYXhDb25maWcudXJsICAg ICAgPTNEIGFqYXhDb25maWcudXJsICsgJC5wYXJhbShhamF4Q29uZmlnLmRhdGEsID0KdHJ1ZSk7 CiAgICAgICAgIGFqYXhDb25maWcuZGF0YSAgICAgPTNEIG51bGw7CiAgICAgfSBlbHNlIHsKICAg ICAgICAgYWpheENvbmZpZy5kYXRhVHlwZSA9M0QgJ2pzb24nOwoKZGlmZiAtciA4YTcwNDU3OTJj N2ZlNDhhOTkyOTU3NzA0ZTUxZTMxM2QzMmU2Y2RkIC1yIDBmNzM3NDg1Y2I3ZjVkNzU1OTVlOThh PQpiOGY4ZGMwMmJhMzY5OTc2ZiB0ZW1wbGF0ZXMvd2ViYXBwcy9nYWxheHkvd29ya2Zsb3cvZWRp dG9yX3Rvb2xfZm9ybS5tYWtvCi0tLSBhL3RlbXBsYXRlcy93ZWJhcHBzL2dhbGF4eS93b3JrZmxv dy9lZGl0b3JfdG9vbF9mb3JtLm1ha28KKysrIGIvdGVtcGxhdGVzL3dlYmFwcHMvZ2FsYXh5L3dv cmtmbG93L2VkaXRvcl90b29sX2Zvcm0ubWFrbwpAQCAtNiwxNCArNiwxOSBAQAogICAgICAgICAj IyBURU1QT1JBUlk6IGNyZWF0ZSB0b29sIGRpY3Rpb25hcnkgaW4gbWFrbyB3aGlsZSBib3RoIHRv b2wgZm9ybXM9CiBhcmUgaW4gdXNlLgogICAgICAgICAjIyBUaGlzIGF2b2lkcyBtYWtpbmcgdHdv IHNlcGFyYXRlIHJlcXVlc3RzIHNpbmNlIHRoZSBjbGFzc2ljIGZvcm09CiByZXF1aXJlcyB0aGUg bWFrbyBhbnl3YXkuCiAgICAgICAgIGZyb20gZ2FsYXh5LnRvb2xzLnBhcmFtZXRlcnMgaW1wb3J0 IHBhcmFtc190b19pbmNvbWluZwotICAgICAgICBpbmNvbWluZyA9M0Qge30KKyAgICAgICAgaW5j b21pbmcgPTNEIHsKKyAgICAgICAgICAgICdfX2lzX2R5bmFtaWNfXycgOiBGYWxzZQorICAgICAg ICB9CiAgICAgICAgIHBhcmFtc190b19pbmNvbWluZyggaW5jb21pbmcsIHRvb2wuaW5wdXRzLCBt b2R1bGUuc3RhdGUuaW5wdXRzLCB0cj0KYW5zLmFwcCApCiAgICAgICAgIHNlbGYuZm9ybV9jb25m aWcgPTNEIHRvb2wudG9fanNvbih0cmFucywgKippbmNvbWluZykKICAgICAgICAgc2VsZi5mb3Jt X2NvbmZpZy51cGRhdGUoewogICAgICAgICAgICAgJ2lkJyAgICAgICAgICAgICAgICA6IHRvb2wu aWQsCiAgICAgICAgICAgICAnam9iX2lkJyAgICAgICAgICAgIDogdHJhbnMuc2VjdXJpdHkuZW5j b2RlX2lkKCBqb2IuaWQgKSBpZiBqbz0KYiBlbHNlIE5vbmUsCiAgICAgICAgICAgICAnaGlzdG9y eV9pZCcgICAgICAgIDogdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5Lj0K aWQgKSwKLSAgICAgICAgICAgICd3b3JrZmxvdycgICAgICAgICAgOiBUcnVlLAorICAgICAgICAg ICAgJ2lzX2R5bmFtaWMnICAgICAgICA6IEZhbHNlLAorICAgICAgICAgICAgJ2NvbXBhY3QnICAg ICAgICAgICA6IFRydWUsCisgICAgICAgICAgICAnaW5pdGlhbF9lcnJvcnMnICAgIDogVHJ1ZSwK KyAgICAgICAgICAgICdzZW5kX2FsbCcgICAgICAgICAgOiBUcnVlLAogICAgICAgICAgICAgJ2Nv bnRhaW5lcicgICAgICAgICA6ICcjcmlnaHQtY29udGVudCcKICAgICAgICAgfSkKICAgICAlPgoK Cmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8wZmIz YjdkYzMwZDYvCkNoYW5nZXNldDogICAwZmIzYjdkYzMwZDYKVXNlcjogICAgICAgIGRhbm5vbgpE YXRlOiAgICAgICAgMjAxNS0wMS0yMSAyMTozMjoyNyswMDowMApTdW1tYXJ5OiAgICAgTWVyZ2Vk IGluIGNhcmxmZWJlcmhhcmQvZ2FsYXh5LWNlbnRyYWwtYXBpLXYyIChwdWxsIHJlcXVlc3QgIzY9 CjM3KQoKRXhwYW5kIG9uIEJhc2UsIEhpc3RvcnksIGFuZCBIREEgbWFuYWdlcnMKQWZmZWN0ZWQg IzogIDU5IGZpbGVzCgpkaWZmIC1yIGQ3MDIxZWU5NmE4MDA4NWQ3NjA1YjE2OGM3M2RmZDkyOWFk ODUxZDMgLXIgMGZiM2I3ZGMzMGQ2ZjgzN2UwYjgxNjI9Cjc3MTIwMTY5MzUzODFhYWM3IGNsaWVu dC9nYWxheHkvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL2NsaWVudC9nYWxh eHkvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2Ny aXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCkBAIC04NzIsMTAgKzg3MiwxMCBAQAogICAgICAg ICB0aGlzLmxvZyggdGhpcyArICcuX3NldFVwTW9kZWxMaXN0ZW5lcnMnLCB0aGlzLm1vZGVsICk7 CiAgICAgICAgIC8vIGJvdW5jZSBtb2RlbCBlcnJvcnMgdXAgdG8gdGhlIHBhbmVsCiAgICAgICAg IHRoaXMubW9kZWwub24oICdlcnJvcicsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAvL1RPRE86 IG5hbWVzcGFjZT8KLSAgICAgICAgICAgIC8vdmFyIGFyZ3MgPTNEIEFycmF5LnByb3RvdHlwZS5z bGljZS5jYWxsKCBhcmd1bWVudHMsIDAgKTsKLSAgICAgICAgICAgIC8vYXJnc1swXSA9M0QgJ21v ZGVsOicgKyBhcmdzWzBdOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmFwcGx5KCBwYW5lbCwg YXJndW1lbnRzICk7CisgICAgICAgICAgICB2YXIgYXJncyA9M0QgQXJyYXkucHJvdG90eXBlLnNs aWNlLmNhbGwoIGFyZ3VtZW50cywgMCApOworICAgICAgICAgICAgLy9hcmdzLnVuc2hpZnQoICdt b2RlbDplcnJvcicgKTsKKyAgICAgICAgICAgIGFyZ3MudW5zaGlmdCggJ2Vycm9yJyApOworICAg ICAgICAgICAgdGhpcy50cmlnZ2VyLmFwcGx5KCB0aGlzLCBhcmdzICk7CiAgICAgICAgIH0sIHRo aXMgKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKCmRpZmYgLXIgZDcwMjFlZTk2YTgw MDg1ZDc2MDViMTY4YzczZGZkOTI5YWQ4NTFkMyAtciAwZmIzYjdkYzMwZDZmODM3ZTBiODE2Mj0K NzcxMjAxNjkzNTM4MWFhYzcgbGliL2dhbGF4eS9tYW5hZ2Vycy9hbm5vdGF0YWJsZS5weQotLS0g L2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvYW5ub3RhdGFibGUucHkKQEAgLTAs MCArMSw1MCBAQAorIiIiCitNaXhpbnMgZm9yIEFubm90YXRhYmxlIG1vZGVsIG1hbmFnZXJzIGFu ZCBzZXJpYWxpemVycy4KKyIiIgorCitmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucworZnJv bSBnYWxheHkgaW1wb3J0IG1vZGVsCisKK2ltcG9ydCBsb2dnaW5nCitsb2cgPTNEIGxvZ2dpbmcu Z2V0TG9nZ2VyKCBfX25hbWVfXyApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIEFubm90YXRhYmxl TWFuYWdlckludGVyZmFjZSggb2JqZWN0ICk6CisgICAgYW5ub3RhdGlvbl9hc3NvYyA9M0QgTm9u ZQorCisgICAgI1RPRE86IG1vc3Qgb2YgdGhpcyBzZWVtcyB0byBiZSBjb3ZlcmVkIGJ5IGl0ZW1f YXR0cnMuVXNlc0Fubm90YXRpb25zCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIEFubm90YXRhYmxl U2VyaWFsaXplciggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6 CisgICAgICAgIHNlbGYuc2VyaWFsaXplcnNbICdhbm5vdGF0aW9uJyBdID0zRCBzZWxmLnNlcmlh bGl6ZV9hbm5vdGF0aW9uCisKKyAgICBkZWYgc2VyaWFsaXplX2Fubm90YXRpb24oIHNlbGYsIHRy YW5zLCBpdGVtLCBrZXkgKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBhbmQgc2VyaWFsaXpl IGFuIGBpdGVtYCdzIGFubm90YXRpb24uCisgICAgICAgICIiIgorI1RPRE86IHdoaWNoIGlzIGNv cnJlY3QgaGVyZT8KKyAgICAgICAgI3VzZXIgPTNEIGl0ZW0udXNlcgorICAgICAgICB1c2VyID0z RCB0cmFucy51c2VyCisgICAgICAgIHNhX3Nlc3Npb24gPTNEIHNlbGYuYXBwLm1vZGVsLmNvbnRl eHQKKyAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0X2l0ZW1fYW5ub3RhdGlvbl9zdHIoIHNhX3Nlc3Np b24sIHVzZXIsIGl0ZW0gKQorCisKKyMgPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFzcyBBbm5vdGF0YWJsZURlc2Vy aWFsaXplciggb2JqZWN0ICk6CisKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToK KyAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzWyAnYW5ub3RhdGlvbicgXSA9M0Qgc2VsZi5kZXNl cmlhbGl6ZV9hbm5vdGF0aW9uCisKKyAgICBkZWYgZGVzZXJpYWxpemVfYW5ub3RhdGlvbiggc2Vs ZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHN1 cmUgYHZhbGAgaXMgYSB2YWxpZCBhbm5vdGF0aW9uIGFuZCBhc3NpZ24gaXQuCisgICAgICAgICIi IgorI1RPRE86IG5vIHZhbGlkYXRlIGhlcmUuLi4KKyAgICAgICAgdmFsID0zRCBzZWxmLnZhbGlk YXRlLm51bGxhYmxlX2Jhc2VzdHJpbmcoIGtleSwgdmFsICkKKyAgICAgICAgI1RPRE86IGhhdmUg dG8gYXNzdW1lIHRyYW5zLnVzZXIgaGVyZS4uLgorICAgICAgICByZXR1cm4gaXRlbS5hZGRfaXRl bV9hbm5vdGF0aW9uKCB0cmFucy5zYV9zZXNzaW9uLCB0cmFucy51c2VyLCBpdGU9Cm0sIHZhbCAp CisKCmRpZmYgLXIgZDcwMjFlZTk2YTgwMDg1ZDc2MDViMTY4YzczZGZkOTI5YWQ4NTFkMyAtciAw ZmIzYjdkYzMwZDZmODM3ZTBiODE2Mj0KNzcxMjAxNjkzNTM4MWFhYzcgbGliL2dhbGF4eS9tYW5h Z2Vycy9iYXNlLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvYmFzZS5weQorKysgYi9saWIv Z2FsYXh5L21hbmFnZXJzL2Jhc2UucHkKQEAgLTEsMjMgKzEsNTAgQEAKLWZyb20gZ2FsYXh5IGlt cG9ydCBleGNlcHRpb25zCisiIiIKK0tlZXBzIHRoZSBvbGRlciBCYXNlQ29udHJvbGxlciBzZWN1 cml0eSBhbmQgZmV0Y2hpbmcgbWV0aG9kcyBhbmQgYWxzbworZGVmaW5lcyBhIGJhc2UgTW9kZWxN YW5hZ2VyLCBNb2RlbFNlcmlhbGl6ZXIsIGFuZCBNb2RlbERlc2VyaWFsaXplci4KKworTW9kZWxN YW5hZ2VycyBhcmUgdXNlZCBmb3Igb3BlcmF0aW9ucyBvbiBtb2RlbHMgdGhhdCBvY2N1ciBvdXRz aWRlIHRoZSBzY289CnBlIG9mCithIHNpbmdsZSBtb2RlbCBvYmplY3QsIHN1Y2ggYXM6CisgICAg LSBvYmplY3QgY3JlYXRpb24KKyAgICAtIG9iamVjdCBsb29rdXAKKyAgICAtIGludGVyYWN0aW9u cyBiZXR3ZWVuIDIrIG9iamVjdHMgb2YgZGlmZmVyZW50IG1vZGVsIGNsYXNzZXMKKworKFNpbmNl IHRoZXNlIHdlcmUgdG8gcmVwbGFjZSBtb2RlbCBNaXhpbnMgZnJvbQord2ViL2ZyYW1ld29yay9i YXNlL2NvbnRyb2xsZXIucHkgdGhlIHJ1bGUgb2YgdGh1bWIgdXNlZCB0aGVyZSBhbHNvIGdlbmVy YWw9Cmx5CitoYXMgYmVlbiBhcHBsaWVkIGhlcmU6IGlmIGl0IHVzZXMgdGhlIHRyYW5zIG9yIHNh X3Nlc3Npb24sIHB1dCBpdCBpbiBhIG1hbj0KYWdlcgorYW5kIG5vdCB0aGUgbW9kZWwuKQorCitN b2RlbFNlcmlhbGl6ZXJzIGFsbG93IGZsZXhpYmxlIGNvbnZlcnNpb24gb2YgbW9kZWwgb2JqZWN0 cyB0byBkaWN0aW9uYXJpZT0Kcy4KK1RoZXkgY29udHJvbCB3aGF0IGtleXMgYXJlIHNlbnQsIGhv dyB2YWx1ZXMgYXJlIHNpbXBsaWZpZWQsIGNhbiByZW1hcCBrZXlzLAorYW5kIGFsbG93IGJvdGgg cHJlZGVmaW5lZCBhbmQgdXNlciBjb250cm9sbGVkIGtleSBzZXRzLgorCitNb2RlbERlc2VyaWFs aXplcnMgY29udHJvbCBob3cgYSBtb2RlbCB2YWxpZGF0ZXMgYW5kIHByb2Nlc3MgYW4gaW5jb21p bmcKK2F0dHJpYnV0ZSBjaGFuZ2UgdG8gYSBtb2RlbCBvYmplY3QuCisiIiIKKyNUT0RPOiBpdCBt YXkgYmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gY29tYmluZSB0aGUgYWJvdmUgdGhyZWUgY2xh c3NlcworIyAgIHN1Y2ggYXM6IGEgc2luZ2xlIGZsYXQgY2xhc3MsIHNlcmlhbGl6ZXJzIGJlaW5n IHNpbmdsZXRvbnMgaW4gdGhlIG1hbmE9CmdlciwgZXRjLgorIyAgIGluc3RlYWQgb2YgdGhlIHRo cmVlIHNlcGFyYXRlIGNsYXNzZXMuIFdpdGggbm8gJ2FwcGFyZW50JyBwZXJmZWN0IHNjaGU9Cm1l CisjICAgSSdtIG9wdGluZyB0byBqdXN0IGtlZXAgdGhlbSBzZXBhcmF0ZS4KKworaW1wb3J0IHJl CisKK2ltcG9ydCBwa2dfcmVzb3VyY2VzCitwa2dfcmVzb3VyY2VzLnJlcXVpcmUoICJTUUxBbGNo ZW15ID49M0QgMC40IiApCitpbXBvcnQgc3FsYWxjaGVteQo9MjAKIGZyb20gZ2FsYXh5IGltcG9y dCBtb2RlbAorZnJvbSBnYWxheHkgaW1wb3J0IGV4Y2VwdGlvbnMKIGZyb20gZ2FsYXh5Lm1vZGVs IGltcG9ydCB0b29sX3NoZWRfaW5zdGFsbAorZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgc2FuaXRp emVfaHRtbAo9MjAKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0zRCBsb2dnaW5nLmdldExvZ2dl ciggX19uYW1lX18gKQo9MjAKPTIwCi1jbGFzcyBNb2RlbE1hbmFnZXIoIG9iamVjdCApOgotICAg IHBhc3MKLQotCi1jbGFzcyBNb2RlbFNlcmlhbGl6ZXIoIG9iamVjdCApOgotICAgIHBhc3MKLQot CisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9Cj0zRD0zRD0zRAogZGVmIHNlY3VyaXR5X2NoZWNrKCB0cmFucywgaXRlbSwgY2hlY2tfb3du ZXJzaGlwPTNERmFsc2UsIGNoZWNrX2FjY2Vzc2libGU9Cj0zREZhbHNlICk6Ci0gICAgIiIiIFNl Y3VyaXR5IGNoZWNrcyBmb3IgYW4gaXRlbTogY2hlY2tzIGlmIChhKSB1c2VyIG93bnMgaXRlbSBv ciAoYikgaT0KdGVtCisgICAgIiIiCisgICAgU2VjdXJpdHkgY2hlY2tzIGZvciBhbiBpdGVtOiBj aGVja3MgaWYgKGEpIHVzZXIgb3ducyBpdGVtIG9yIChiKSBpdGVtCiAgICAgaXMgYWNjZXNzaWJs ZSB0byB1c2VyLiBUaGlzIGlzIGEgZ2VuZXJpYyBtZXRob2QgZm9yIGRlYWxpbmcgd2l0aCBvYmpl Yz0KdHMKICAgICB1bmlmb3JtbHkgZnJvbSB0aGUgb2xkZXIgY29udHJvbGxlciBtaXhpbiBjb2Rl IC0gaG93ZXZlciB3aGVuZXZlciBwb3NzPQppYmxlCiAgICAgdGhlIG1hbmFnZXJzIGZvciBhIHBh cnRpY3VsYXIgbW9kZWwgc2hvdWxkIGJlIHVzZWQgdG8gcGVyZm9ybSBzZWN1cml0eQpAQCAtNDks NyArNzYsMTAgQEAKPTIwCj0yMAogZGVmIGdldF9jbGFzcyggY2xhc3NfbmFtZSApOgotICAgICIi IiBSZXR1cm5zIHRoZSBjbGFzcyBvYmplY3QgdGhhdCBhIHN0cmluZyBkZW5vdGVzLiBXaXRob3V0 IHRoaXMgbWV0aG89CmQsIHdlJ2QgaGF2ZSB0byBkbyBldmFsKDxjbGFzc19uYW1lPikuICIiIgor ICAgICIiIgorICAgIFJldHVybnMgdGhlIGNsYXNzIG9iamVjdCB0aGF0IGEgc3RyaW5nIGRlbm90 ZXMuIFdpdGhvdXQgdGhpcyBtZXRob2QsIHc9CmUnZCBoYXZlCisgICAgdG8gZG8gZXZhbCg8Y2xh c3NfbmFtZT4pLgorICAgICIiIgogICAgIGlmIGNsYXNzX25hbWUgPTNEPTNEICdIaXN0b3J5JzoK ICAgICAgICAgaXRlbV9jbGFzcyA9M0QgbW9kZWwuSGlzdG9yeQogICAgIGVsaWYgY2xhc3NfbmFt ZSA9M0Q9M0QgJ0hpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb24nOgpAQCAtMTE4LDMgKzE0OCw3ODIg QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKCBj bGFzc19uYW1lLCBnZXRhdHRyKCBpPQp0ZW0sICduYW1lJywgaWQgKSApLCB0eXBlPTNEIndhcm5p bmciICkKICAgICByZXR1cm4gaXRlbQo9MjAKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIE1vZGVsTWFu YWdlciggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgYWxsIG1vZGVsL3Jl c291cmNlIG1hbmFnZXJzLgorCisgICAgUHJvdmlkZXMgY29tbW9uIHF1ZXJpZXMgYW5kIENSVUQg b3BlcmF0aW9ucyBhcyBhIChob3BlZnVsbHkpIGxpZ2h0IGxheT0KZXIKKyAgICBvdmVyIHRoZSBP Uk0uCisgICAgIiIiCisgICAgbW9kZWxfY2xhc3MgPTNEIG9iamVjdAorICAgIGZvcmVpZ25fa2V5 X25hbWUgPTNEIE5vbmUKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAg IHNlbGYuYXBwID0zRCBhcHAKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyX2J5ID0zRCBOb25l CisKKyAgICBkZWYgX2RlZmF1bHRfb3JkZXJfYnkoIHNlbGYgKToKKyAgICAgICAgIiIiCisgICAg ICAgIFJldHVybnMgYSB0dXBsZSBvZiBjb2x1bW5zIGZvciB0aGUgZGVmYXVsdCBvcmRlciB3aGVu IGdldHRpbmcgbXVsdD0KaXBsZSBtb2RlbHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g KCBzZWxmLm1vZGVsX2NsYXNzLmNyZWF0ZV90aW1lLCApCisKKyAgICAjTk9URTogYXQgdGhpcyBs YXllciwgYWxsIGlkcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZGVjb2RlZCBhbmQgaW4gaW50IGZvPQpy bQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tIGdldC9yZWFkL3F1ZXJ5CisgICAgZGVmIHF1ZXJ5 KCBzZWxmLCB0cmFucywgZWFnZXJsb2Fkcz0zRFRydWUsIGZpbHRlcnM9M0ROb25lLCBvcmRlcl9i eT0zRD0KTm9uZSwgbGltaXQ9M0ROb25lLCBvZmZzZXQ9M0ROb25lLCAqKmt3YXJncyApOgorICAg ICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgYmFzaWMgcXVlcnkgZnJvbSBtb2RlbF9jbGFzcywg ZmlsdGVycywgb3JkZXJfYnksIGFuZCBsaW1pPQp0IGFuZCBvZmZzZXQuCisKKyAgICAgICAgU2V0 IGVhZ2VybG9hZHMgdG8gRmFsc2UgdG8gZGlzYWJsZSB0aGVtIGZvciB0aGlzIHF1ZXJ5LgorICAg ICAgICAiIiIKKyAgICAgICAgI3ByaW50ICdxdWVyeTonLCBlYWdlcmxvYWRzLCBmaWx0ZXJzLCBv cmRlcl9ieSwgbGltaXQsIG9mZnNldCwga3dhPQpyZ3MKKyAgICAgICAgcXVlcnkgPTNEIHRyYW5z LnNhX3Nlc3Npb24ucXVlcnkoIHNlbGYubW9kZWxfY2xhc3MgKQorCisgICAgICAgICMgam9pbmVk IHRhYmxlIGxvYWRpbmcKKyAgICAgICAgaWYgZWFnZXJsb2FkcyBpcyBGYWxzZToKKyAgICAgICAg ICAgIHF1ZXJ5ID0zRCBxdWVyeS5lbmFibGVfZWFnZXJsb2FkcyggRmFsc2UgKQorCisgICAgICAg ICNUT0RPOiBpZiBub24tb3JtIGZpbHRlcnMgYXJlIHRoZSBvbmx5IG9wdGlvbiwgaGVyZSBpcyB3 aGVyZSB0aGV5Jz0KZCBnbworICAgICAgICBxdWVyeSA9M0Qgc2VsZi5fYXBwbHlfZmlsdGVycygg cXVlcnksIGZpbHRlcnMgKQorICAgICAgICBxdWVyeSA9M0Qgc2VsZi5fYXBwbHlfb3JkZXJfYnlf bGltaXRfb2Zmc2V0KCBxdWVyeSwgb3JkZXJfYnksIGxpbWk9CnQsIG9mZnNldCApCisgICAgICAg IHJldHVybiBxdWVyeQorCisgICAgZGVmIF9hcHBseV9maWx0ZXJzKCBzZWxmLCBxdWVyeSwgZmls dGVycyApOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGFueSBmaWx0ZXJzIHRvIHRoZSBnaXZl biBxdWVyeS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZToKKyAgICAg ICAgICAgIHJldHVybiBxdWVyeQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKCBmaWx0ZXJz LCBsaXN0ICk6CisgICAgICAgICAgICBmaWx0ZXJzID0zRCBbIGZpbHRlcnMgXQorICAgICAgICAj bm90ZTogaW1wbGljaXQgQU5ECisgICAgICAgIGZvciBmaWx0ZXIgaW4gZmlsdGVyczoKKyAgICAg ICAgICAgIHF1ZXJ5ID0zRCBxdWVyeS5maWx0ZXIoIGZpbHRlciApCisgICAgICAgIHJldHVybiBx dWVyeQorCisgICAgZGVmIF9tdW5nZV9maWx0ZXJzKCBzZWxmLCBmaWx0ZXJzQSwgZmlsdGVyc0Ig KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbWJpbmUgdHdvIGxpc3RzIGludG8gYSBzaW5nbGUg bGlzdC4KKworICAgICAgICAoV2hpbGUgYWxsb3dpbmcgdGhlbSB0byBiZSBOb25lLCBub24tbGlz dHMsIG9yIGxpc3RzLikKKyAgICAgICAgIiIiCisgICAgICAgICNUT0RPOiB0aGVyZSdzIG5vdGhp bmcgc3BlY2lmaWNhbGx5IGZpbHRlciBvciBtb2RlbC1yZWxhdGVkIGhlcmUgLT0KIG1vdmUgdG8g dXRpbAorICAgICAgICBpZiBmaWx0ZXJzQSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGZp bHRlcnNCCisgICAgICAgIGlmIGZpbHRlcnNCIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4g ZmlsdGVyc0EKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoIGZpbHRlcnNBLCBsaXN0ICk6Cisg ICAgICAgICAgICBmaWx0ZXJzQSA9M0QgWyBmaWx0ZXJzQSBdCisgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKCBmaWx0ZXJzQiwgbGlzdCApOgorICAgICAgICAgICAgZmlsdGVyc0IgPTNEIFsgZmls dGVyc0IgXQorICAgICAgICByZXR1cm4gZmlsdGVyc0EgKyBmaWx0ZXJzQgorCisgICAgZGVmIF9h cHBseV9vcmRlcl9ieV9saW1pdF9vZmZzZXQoIHNlbGYsIHF1ZXJ5LCBvcmRlcl9ieSwgbGltaXQs IG9mZnNldD0KICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHF1ZXJ5IGFmdGVy IGFkZGluZyB0aGUgb3JkZXJfYnksIGxpbWl0LCBhbmQgb2Zmc2V0IGNsYXU9CnNlcy4KKyAgICAg ICAgIiIiCisgICAgICAgIHF1ZXJ5ID0zRCBzZWxmLl9hcHBseV9vcmRlcl9ieSggcXVlcnksIG9y ZGVyX2J5ICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FwcGx5X2xpbWl0X29mZnNldCggcXVlcnks IGxpbWl0LCBvZmZzZXQgKQorCisgICAgZGVmIF9hcHBseV9vcmRlcl9ieSggc2VsZiwgcXVlcnks IG9yZGVyX2J5ICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHF1ZXJ5IGFmdGVy IGFkZGluZyB0aGUgb3JkZXJfYnkgY2xhdXNlcy4KKworICAgICAgICBVc2UgdGhlIG1hbmFnZXIn cyBkZWZhdWx0X29yZGVyX2J5IGlmIG9yZGVyX2J5IGlzIE5vbmUuCisgICAgICAgICIiIgorICAg ICAgICBpZiBvcmRlcl9ieSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVy X2J5KCAqc2VsZi5kZWZhdWx0X29yZGVyX2J5KCkgKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo IG9yZGVyX2J5LCAoIGxpc3QsIHR1cGxlICkgKToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5v cmRlcl9ieSggKm9yZGVyX2J5ICkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5Lm9yZGVyX2J5KCBvcmRl cl9ieSApCisKKyAgICBkZWYgX2FwcGx5X2xpbWl0X29mZnNldCggc2VsZiwgcXVlcnksIGxpbWl0 LCBvZmZzZXQgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcXVlcnkgYWZ0ZXIg YXBwbHlpbmcgdGhlIGdpdmVuIGxpbWl0IGFuZCBvZmZzZXQgKGlmIG5vdD0KIE5vbmUpLgorICAg ICAgICAiIiIKKyAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBxdWVy eSA9M0QgcXVlcnkubGltaXQoIGxpbWl0ICkKKyAgICAgICAgaWYgb2Zmc2V0IGlzIG5vdCBOb25l OgorICAgICAgICAgICAgcXVlcnkgPTNEIHF1ZXJ5Lm9mZnNldCggb2Zmc2V0ICkKKyAgICAgICAg cmV0dXJuIHF1ZXJ5CisKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBjb21tb24gcXVlcmllcwor ICAgIGRlZiBvbmUoIHNlbGYsIHRyYW5zLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAg ICAgU2VuZHMga3dhcmdzIHRvIGJ1aWxkIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBvbmUgYW5kIG9u bHkgb25lIG1vZGVsLgorICAgICAgICAiIiIKKyAgICAgICAgcXVlcnkgPTNEIHNlbGYucXVlcnko IHRyYW5zLCAqKmt3YXJncyApCisgICAgICAgIHJldHVybiBzZWxmLl9vbmVfd2l0aF9yZWNhc3Rf ZXJyb3JzKCBxdWVyeSApCisKKyAgICBkZWYgX29uZV93aXRoX3JlY2FzdF9lcnJvcnMoIHNlbGYs IHF1ZXJ5ICk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsIHNxbGFsY2hlbXkncyBvbmUgYW5k IHJlY2FzdCBlcnJvcnMgdG8gc2VyaWFsaXphYmxlIGVycm9ycyBpZiA9CmFueS4KKworICAgICAg ICA6cmFpc2VzIGV4Y2VwdGlvbnMuT2JqZWN0Tm90Rm91bmQ6IGlmIG5vIG1vZGVsIGlzIGZvdW5k CisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5JbmNvbnNpc3RlbnREYXRhYmFzZTogaWYgbW9y ZSB0aGFuIG9uZSBtb2RlbCBpcz0KIGZvdW5kCisgICAgICAgICIiIgorICAgICAgICAjIG92ZXJy aWRkZW4gdG8gcmFpc2Ugc2VyaWFsaXphYmxlIGVycm9ycworICAgICAgICB0cnk6CisgICAgICAg ICAgICByZXR1cm4gcXVlcnkub25lKCkKKyAgICAgICAgZXhjZXB0IHNxbGFsY2hlbXkub3JtLmV4 Yy5Ob1Jlc3VsdEZvdW5kLCBub3RfZm91bmQ6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25z Lk9iamVjdE5vdEZvdW5kKCBzZWxmLm1vZGVsX2NsYXNzLl9fbmFtZV9fICsgJz0KIG5vdCBmb3Vu ZCcgKQorICAgICAgICBleGNlcHQgc3FsYWxjaGVteS5vcm0uZXhjLk11bHRpcGxlUmVzdWx0c0Zv dW5kLCBtdWx0aV9mb3VuZDoKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuSW5jb25zaXN0 ZW50RGF0YWJhc2UoICdmb3VuZCBtb3JlIHRoYW4gb25lICcgPQorIHNlbGYubW9kZWxfY2xhc3Mu X19uYW1lX18gKQorCisgICAgZGVmIF9vbmVfb3Jfbm9uZSggc2VsZiwgcXVlcnkgKToKKyAgICAg ICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgb2JqZWN0IGlmIGZvdW5kLCBOb25lIGlmIGl0J3Mg bm90LgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5JbmNvbnNpc3RlbnREYXRhYmFzZTog aWYgbW9yZSB0aGFuIG9uZSBtb2RlbCBpcz0KIGZvdW5kCisgICAgICAgICIiIgorICAgICAgICB0 cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb25lX3dpdGhfcmVjYXN0X2Vycm9ycyggcXVl cnkgKQorICAgICAgICBleGNlcHQgZXhjZXB0aW9ucy5PYmplY3ROb3RGb3VuZCwgbm90X2ZvdW5k OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICNUT0RPOiBnZXQ/CisKKyAgICBkZWYg YnlfaWQoIHNlbGYsIHRyYW5zLCBpZCwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIiCisgICAgICAg IEdldHMgYSBtb2RlbCBieSBwcmltYXJ5IGlkLgorICAgICAgICAiIiIKKyAgICAgICAgaWRfZmls dGVyID0zRCBzZWxmLm1vZGVsX2NsYXNzLmlkID0zRD0zRCBpZAorICAgICAgICByZXR1cm4gc2Vs Zi5vbmUoIHRyYW5zLCBmaWx0ZXJzPTNEaWRfZmlsdGVyLCAqKmt3YXJncyApCisKKyAgICBkZWYg bGlzdCggc2VsZiwgdHJhbnMsIHF1ZXJ5PTNETm9uZSwgKiprd2FyZ3MgKToKKyAgICAgICAgIiIi CisgICAgICAgIFNlbmRzIGt3YXJncyB0byBidWlsZCB0aGUgcXVlcnkgcmV0dXJuIGFsbCBtb2Rl bHMgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBxdWVyeSA9M0QgcXVlcnkgb3Igc2VsZi5x dWVyeSggdHJhbnMsICoqa3dhcmdzICkKKyAgICAgICAgcmV0dXJuIHF1ZXJ5LmFsbCgpCisKKyAg ICBkZWYgX3F1ZXJ5X2J5X2lkcyggc2VsZiwgdHJhbnMsIGlkcywgZmlsdGVycz0zRE5vbmUsICoq a3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZHMgYSBxdWVyeSB0byBmaW5kIGEg bGlzdCBvZiBtb2RlbHMgd2l0aCB0aGUgZ2l2ZW4gbGlzdCBvZiBgaWQ9CnNgLgorICAgICAgICAi IiIKKyAgICAgICAgaWRzX2ZpbHRlciA9M0Qgc2VsZi5tb2RlbF9jbGFzcy5pZC5pbl8oIGlkcyAp CisgICAgICAgIHJldHVybiBzZWxmLnF1ZXJ5KCB0cmFucywgZmlsdGVycz0zRHNlbGYuX211bmdl X2ZpbHRlcnMoIGlkc19maWx0ZT0KciwgZmlsdGVycyApLCAqKmt3YXJncyApCisKKyAgICBkZWYg YnlfaWRzKCBzZWxmLCB0cmFucywgaWRzLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAg ICAgUmV0dXJucyBhbiBpbi1vcmRlciBsaXN0IG9mIG1vZGVscyB3aXRoIHRoZSBtYXRjaGluZyBp ZHMgaW4gYGlkc2AuCisgICAgICAgICIiIgorICAgICAgICBmb3VuZCA9M0Qgc2VsZi5fcXVlcnlf YnlfaWRzKCB0cmFucywgaWRzLCAqKmt3YXJncyApLmFsbCgpCisgICAgICAgICNUT0RPOiB0aGlz IGRvZXMgbm90IG9yZGVyIGJ5IHRoZSBvcmlnaW5hbCAnaWRzJyBhcnJheQorCisgICAgICAgICMg Li4uY291bGQgdXNlIGdldCAoc3VwcG9zZWRseSBzaW5jZSBmb3VuZCBhcmUgaW4gdGhlIHNlc3Np b24sIHRoZT0KIGRiIHdvbid0IGJlIGhpdCB0d2ljZSkKKyAgICAgICAgI3JldHVybiBtYXAoIHRy YW5zLnNhX3Nlc3Npb24ucXVlcnkoIHNlbGYubW9kZWxfY2xhc3MgKS5nZXQsIGlkcyApCisKKyAg ICAgICAgIyAuLi5jb3VsZCBpbXBsZW1lbnQgb3duIHZlcnNpb24gaGVyZSAtIHNsb3c/CisgICAg ICAgIHJldHVybiBzZWxmLl9vcmRlcl9pdGVtc19ieV9pZCggaWRzLCBmb3VuZCApCisgICAgICAg ICNyZXR1cm4gZm91bmQKKworICAgIGRlZiBfb3JkZXJfaXRlbXNfYnlfaWQoIHNlbGYsIGlkcywg aXRlbXMgKToKKyAgICAgICAgIiIiCisgICAgICAgIEdpdmVuIGEgbGlzdCBvZiAodW5pcXVlKSBp ZHMgYW5kIGEgbGlzdCBvZiBpdGVtcyBoYXZpbmcgYW4gJ2lkJyBhdD0KdHJpYnV0ZSwKKyAgICAg ICAgcmV0dXJuIGl0ZW1zIHRoYXQgaGF2ZSB0aGUgZ2l2ZW4gaWRzIGluIHRoYXQgb3JkZXIuCisK KyAgICAgICAgSWYgYW4gaWQgaW4gaWRzIGlzIG5vdCBmb3VuZCBvciBpZiBhbiBpdGVtIGluIGl0 ZW1zIGRvZXNuJ3QgaGF2ZSBhPQogZ2l2ZW4KKyAgICAgICAgaWQsIHRoZXkgd2lsbCBub3QgYmUg aW4gdGhlIHJldHVybmVkIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBJRF9BVFRSX05BTUUg PTNEICdpZCcKKyAgICAgICAgI1RPRE86Pz8gYXNpZGUgZnJvbSBzcWxhbHguZ2V0IG1lbnRpb25l ZCBhYm92ZSwgSSBoYXZlbid0IHNlZW4gYW4gPQppbi1TUUwgd2F5CisgICAgICAgICMgICB0byBt YWtlIHRoaXMgaGFwcGVuLiBUaGlzIG1heSBub3QgYmUgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBl aT0KdGhlci4KKyAgICAgICAgI05PVEU6IHRoYXQgdGhpcyBpc24ndCBzb3J0aW5nIGJ5IGlkIC0g dGhpcyBpcyBtYXRjaGluZyB0aGUgb3JkZXIgPQppbiBpdGVtcyB0byB0aGUgb3JkZXIgaW4gaWRz CisgICAgICAgICMgbW92ZSBpdGVtcyBsaXN0IGludG8gZGljdCBieSBpZAorICAgICAgICBpdGVt X2RpY3QgPTNEIHt9CisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgaXRl bV9pZCA9M0QgZ2V0YXR0ciggaXRlbSwgSURfQVRUUl9OQU1FLCBOb25lICkKKyAgICAgICAgICAg IGlmIGl0ZW1faWQ6CisgICAgICAgICAgICAgICAgaXRlbV9kaWN0WyBpdGVtX2lkIF0gPTNEIGl0 ZW0KKyAgICAgICAgIyBwdWxsIGZyb20gbWFwIGluIG9yZGVyIG9mIGlkcworICAgICAgICBpbl9v cmRlciA9M0QgW10KKyAgICAgICAgZm9yIGlkIGluIGlkczoKKyAgICAgICAgICAgIGlmIGlkIGlu IGl0ZW1fZGljdDoKKyAgICAgICAgICAgICAgICBpbl9vcmRlci5hcHBlbmQoIGl0ZW1fZGljdFsg aWQgXSApCisgICAgICAgIHJldHVybiBpbl9vcmRlcgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0t LS0gY3JlYXRlCisgICAgZGVmIGNyZWF0ZSggc2VsZiwgdHJhbnMsIGZsdXNoPTNEVHJ1ZSwgKmFy Z3MsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmljYWxseSBjcmVhdGUg YSBuZXcgbW9kZWwuCisgICAgICAgICIiIgorICAgICAgICAjIG92ZXJyaWRlIGluIHN1YmNsYXNz ZXMKKyAgICAgICAgaXRlbSA9M0Qgc2VsZi5tb2RlbF9jbGFzcyggKmFyZ3MsICoqa3dhcmdzICkK KyAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5hZGQoIGl0ZW0gKQorICAgICAgICBpZiBmbHVzaDoK KyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICByZXR1cm4gaXRl bQorCisgICAgZGVmIGNvcHkoIHNlbGYsIHRyYW5zLCBpdGVtLCAqKmt3YXJncyApOgorICAgICAg ICAiIiIKKyAgICAgICAgQ2xvbmUgb3IgY29weSBhbiBpdGVtLgorICAgICAgICAiIiIKKyAgICAg ICAgcmFpc2UgZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZCggJ0Fic3RyYWN0IG1ldGhvZCcgKQor CisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0gdXBkYXRlCisgICAgZGVmIHVwZGF0ZSggc2VsZiwg dHJhbnMsIGl0ZW0sIG5ld192YWx1ZXMsIGZsdXNoPTNEVHJ1ZSwgKiprd2FyZ3MgKToKKyAgICAg ICAgIiIiCisgICAgICAgIEdpdmVuIGEgZGljdGlvbmFyeSBvZiBuZXcgdmFsdWVzLCB1cGRhdGUg YGl0ZW1gIGFuZCByZXR1cm4gaXQuCisKKyAgICAgICAgLi5ub3RlOiBOTyB2YWxpZGF0aW9uIG9y IGRlc2VyaWFsaXphdGlvbiBvY2N1cnMgaGVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uYWRkKCBpdGVtICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbmV3X3Zh bHVlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaGFzYXR0ciggaXRlbSwga2V5ICk6CisgICAg ICAgICAgICAgICAgc2V0YXR0ciggaXRlbSwga2V5LCB2YWx1ZSApCisgICAgICAgIGlmIGZsdXNo OgorICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAgIHJldHVybiBp dGVtCisKKyAgICAjVE9ETzogeWFnbmk/CisgICAgZGVmIGFzc29jaWF0ZSggc2VsZiwgdHJhbnMs IGFzc29jaWF0ZV93aXRoLCBpdGVtLCBmb3JlaWduX2tleV9uYW1lPTNETj0Kb25lICk6CisgICAg ICAgICIiIgorICAgICAgICBHZW5lcmljYWxseSBhc3NvY2lhdGUgYGl0ZW1gIHdpdGggYGFzc29j aWF0ZV93aXRoYCBiYXNlZCBvbiBgZm9yZWk9CmduX2tleV9uYW1lYC4KKyAgICAgICAgIiIiCisg ICAgICAgIGZvcmVpZ25fa2V5X25hbWUgPTNEIGZvcmVpZ25fa2V5X25hbWUgb3Igc2VsZi5mb3Jl aWduX2tleV9uYW1lCisgICAgICAgIHNldGF0dHIoIGFzc29jaWF0ZV93aXRoLCBmb3JlaWduX2tl eV9uYW1lLCBpdGVtICkKKyAgICAgICAgcmV0dXJuIGl0ZW0KKworICAgIGRlZiBxdWVyeV9hc3Nv Y2lhdGVkKCBzZWxmLCB0cmFucywgYXNzb2NpYXRlZF9tb2RlbF9jbGFzcywgaXRlbSwgZm9yZWk9 CmduX2tleV9uYW1lPTNETm9uZSApOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJpY2FsbHkg cXVlcnkgb3RoZXIgaXRlbXMgdGhhdCBoYXZlIGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPQpg aXRlbWAuCisgICAgICAgICIiIgorICAgICAgICBmb3JlaWduX2tleV9uYW1lID0zRCBmb3JlaWdu X2tleV9uYW1lIG9yIHNlbGYuZm9yZWlnbl9rZXlfbmFtZQorICAgICAgICBmb3JlaWduX2tleSA9 M0QgZ2V0YXR0ciggYXNzb2NpYXRlZF9tb2RlbF9jbGFzcywgZm9yZWlnbl9rZXlfbmFtZSApCisg ICAgICAgIHJldHVybiB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBhc3NvY2lhdGVkX21vZGVsX2Ns YXNzICkuZmlsdGVyKCBmbz0KcmVpZ25fa2V5ID0zRD0zRCBpdGVtICkKKworICAgICMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS09Ci0tLS0tIGRlbGV0ZQorICAgICMgYSByZW5hbWUgb2Ygc3FsIERFTEVURSB0byBkaWZm ZXJlbnRpYXRlIGZyb20gdGhlIEdhbGF4eSBub3Rpb24gb2YgbWE9CnJrX2FzX2RlbGV0ZWQKKyAg ICAjZGVmIGRlc3Ryb3koIHNlbGYsIHRyYW5zLCBpdGVtLCAqKmt3YXJncyApOgorICAgICMgICAg cmV0dXJuIGl0ZW0KKworCisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRCBTRVJJQUxJWkVSUy90b19kaWN0LGZyb21fZGlj dAorY2xhc3MgTW9kZWxTZXJpYWxpemluZ0Vycm9yKCBleGNlcHRpb25zLkludGVybmFsU2VydmVy RXJyb3IgKToKKyAgICAiIiJUaHJvd24gd2hlbiByZXF1ZXN0IG1vZGVsIHZhbHVlcyBjYW4ndCBi ZSBzZXJpYWxpemVkIiIiCisgICAgcGFzcworCisKK2NsYXNzIE1vZGVsRGVzZXJpYWxpemluZ0Vy cm9yKCBleGNlcHRpb25zLk9iamVjdEF0dHJpYnV0ZUludmFsaWRFeGNlcHRpb24gPQopOgorICAg ICIiIlRocm93biB3aGVuIGFuIGluY29taW5nIHZhbHVlIGlzbid0IHVzYWJsZSBieSB0aGUgbW9k ZWwKKyAgICAoYmFkIHR5cGUsIG91dCBvZiByYW5nZSwgZXRjLikKKyAgICAiIiIKKyAgICBwYXNz CisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBNb2RlbFNlcmlhbGl6ZXIoIG9i amVjdCApOgorICAgICIiIgorICAgIFR1cm5zIG1vZGVscyBpbnRvIEpTT05hYmxlIGRpY3RzLgor CisgICAgTWFpbnRhaW5zIGEgbWFwIG9mIHJlcXVlc3RhYmxlIGtleXMgYW5kIHRoZSBDYWxsYWJs ZSgpIHNlcmlhbGl6ZXIgZnVuYz0KdGlvbnMKKyAgICB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9y IHRob3NlIGtleXMuCisgICAgRS5nLiB7ICd4JyA6IGxhbWJkYSB0cmFucywgaXRlbSwga2V5OiBp dGVtLngsIC4uLiB9CisKKyAgICBUbyBzZXJpYWxpemUgY2FsbDoKKyAgICAgICAgbXlfc2VyaWFs aXplciA9M0QgTXlTZXJpYWxpemVyKCBhcHAgKQorICAgICAgICAuLi4KKyAgICAgICAga2V5c190 b19zZXJpYWxpemUgPTNEIFsgJ2lkJywgJ25hbWUnLCAnYXR0cjEnLCAnYXR0cjInLCAuLi4gXQor ICAgICAgICBpdGVtX2RpY3QgPTNEIE15U2VyaWFsaXplci5zZXJpYWxpemUoIHRyYW5zLCBteV9p dGVtLCBrZXlzX3RvX3Nlcmk9CmFsaXplICkKKyAgICAgICAgIyBpZiBhIGtleSB0byBzZXJpYWxp emUgaXMgbm90IGxpc3RlZCBpbiB0aGUgU2VyaWFsaXplci5zZXJpYWxpemFiPQpsZV9rZXlzIG9y IHNlcmlhbGl6ZXJzLCBpdCB3aWxsIG5vdCBiZSBhZGRlZAorICAgICIiIgorCisgICAgZGVmIF9f aW5pdF9fKCBzZWxmLCBhcHAgKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB1cCBzZXJpYWxp emVyIG1hcCwgYW55IGFkZGl0aW9uYWwgc2VyaWFsaXphYmxlIGtleXMsIGFuZCB2aWV3cz0KIGhl cmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCisgICAgICAgPTIwCisg ICAgICAgICMgYSBtYXAgb2YgZGljdGlvbmFyeSBrZXlzIHRvIHRoZSBmdW5jdGlvbnMgKG9mdGVu IGxhbWJkYXMpIHRoYXQgYz0KcmVhdGUgdGhlIHZhbHVlcyBmb3IgdGhvc2Uga2V5cworICAgICAg ICBzZWxmLnNlcmlhbGl6ZXJzID0zRCB7fQorICAgICAgICAjIGEgbGlzdCBvZiB2YWxpZCBzZXJp YWxpemFibGUga2V5cyB0aGF0IGNhbiB1c2UgdGhlIGRlZmF1bHQgKHN0cmk9Cm5nKSBzZXJpYWxp emVyCisgICAgICAgICMgICB0aGlzIGFsbG93cyB1cyB0bzogJ21lbnRpb24nIHRoZSBrZXkgd2l0 aG91dCBhZGRpbmcgdGhlIGRlZmF1bD0KdCBzZXJpYWxpemVyCisgICAgICAgICNOT1RFOiBpZiBh IGtleSBpcyByZXF1ZXN0ZWQgdGhhdCBpcyBpbiBuZWl0aGVyIHNlcmlhbGl6YWJsZV9rZXlzID0K b3Igc2VyaWFsaXplcnMsIGl0IGlzIG5vdCByZXR1cm5lZAorICAgICAgICBzZWxmLnNlcmlhbGl6 YWJsZV9rZXlzID0zRCBbXQorICAgICAgICAjIGFkZCBzdWJjbGFzcyBzZXJpYWxpemVycyBkZWZp bmVkIHRoZXJlCisgICAgICAgIHNlbGYuYWRkX3NlcmlhbGl6ZXJzKCkKKworICAgICAgICAjIHZp ZXdzIGFyZSBjb2xsZWN0aW9ucyBvZiBzZXJpYWxpemFibGUgYXR0cmlidXRlcyAoYSBuYW1lZCBh cnJheSA9Cm9mIGtleXMpCisgICAgICAgICMgICBpbnNwaXJlZCBieSBtb2RlbC5kaWN0X3t2aWV3 fV92aXNpYmxlX2tleXMKKyAgICAgICAgc2VsZi52aWV3cyA9M0Qge30KKyAgICAgICAgc2VsZi5k ZWZhdWx0X3ZpZXcgPTNEIE5vbmUKKworICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIHNlcmlhbGl6 aW5nCisgICAgZGVmIGFkZF9zZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAg ICAgUmVnaXN0ZXIgYSBtYXAgb2YgYXR0cmlidXRlIGtleXMgLT4gc2VyaWFsaXppbmcgZnVuY3Rp b25zIHRoYXQgd2lsPQpsIHNlcmlhbGl6ZQorICAgICAgICB0aGUgYXR0cmlidXRlLgorICAgICAg ICAiIiIKKyAgICAgICAgIyB0byBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMKKyAgICAgICAg cGFzcworCisgICAgZGVmIHNlcmlhbGl6ZSggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleXMgKToKKyAg ICAgICAgIiIiCisgICAgICAgIFNlcmlhbGl6ZSB0aGUgbW9kZWwgYGl0ZW1gIHRvIGEgZGljdGlv bmFyeS4KKworICAgICAgICBHaXZlbiBtb2RlbCBgaXRlbWAgYW5kIHRoZSBsaXN0IGBrZXlzYCwg Y3JlYXRlIGFuZCByZXR1cm4gYSBkaWN0aW89Cm5hcnkKKyAgICAgICAgYnVpbHQgZnJvbSBlYWNo IGtleSBpbiBga2V5c2AgdGhhdCBhbHNvIGV4aXN0cyBpbiBgc2VyaWFsaXplcnNgIGFuZAorICAg ICAgICB2YWx1ZXMgb2YgY2FsbGluZyB0aGUga2V5ZWQvbmFtZWQgc2VyaWFsaXplcnMgb24gaXRl bS4KKyAgICAgICAgIiIiCisgICAgICAgICMgbWFpbiBpbnRlcmZhY2UgZm4gZm9yIGNvbnZlcnRp bmcgYSBtb2RlbCB0byBhIGRpY3QKKyAgICAgICAgcmV0dXJuZWQgPTNEIHt9CisgICAgICAgIGZv ciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgICMgY2hlY2sgYm90aCBzZXJpYWxpemVycyBhbmQg c2VyaWFsaXphYmxlIGtleXMKKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLnNlcmlhbGl6ZXJz OgorICAgICAgICAgICAgICAgIHJldHVybmVkWyBrZXkgXSA9M0Qgc2VsZi5zZXJpYWxpemVyc1sg a2V5IF0oIHRyYW5zLCBpdGVtLCA9CmtleSApCisgICAgICAgICAgICBlbGlmIGtleSBpbiBzZWxm LnNlcmlhbGl6YWJsZV9rZXlzOgorICAgICAgICAgICAgICAgIHJldHVybmVkWyBrZXkgXSA9M0Qg c2VsZi5kZWZhdWx0X3NlcmlhbGl6ZXIoIHRyYW5zLCBpdGVtLCA9CmtleSApCisgICAgICAgICAg ICAjIGlnbm9yZSBiYWQvdW5yZWcga2V5cworICAgICAgICByZXR1cm4gcmV0dXJuZWQKKworICAg IGRlZiBkZWZhdWx0X3NlcmlhbGl6ZXIoIHNlbGYsIHRyYW5zLCBpdGVtLCBrZXkgKToKKyAgICAg ICAgIiIiCisgICAgICAgIFNlcmlhbGl6ZSB0aGUgYGl0ZW1gJ3MgYXR0cmlidXRlIG5hbWVkIGBr ZXlgLgorICAgICAgICAiIiIKKyAgICAgICAgI1RPRE86Pz8gcG9pbnQgb2YgY2hhbmdlIGJ1dCBu b3QgcmVhbGx5IG5lY2Vzc2FyeT8KKyAgICAgICAgcmV0dXJuIGdldGF0dHIoIGl0ZW0sIGtleSAp CisKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBzZXJpYWxpemVycyBmb3IgY29tbW9uIGdhbGF4 eSBvYmplY3RzCisgICAgZGVmIHNlcmlhbGl6ZV9kYXRlKCBzZWxmLCB0cmFucywgaXRlbSwga2V5 ICk6CisgICAgICAgICIiIgorICAgICAgICBTZXJpYWxpemUgYSBkYXRlIGF0dHJpYnV0ZSBvZiBg aXRlbWAuCisgICAgICAgICIiIgorICAgICAgICBkYXRlID0zRCBnZXRhdHRyKCBpdGVtLCBrZXkg KQorICAgICAgICByZXR1cm4gZGF0ZS5pc29mb3JtYXQoKSBpZiBkYXRlIGlzIG5vdCBOb25lIGVs c2UgTm9uZQorCisgICAgZGVmIHNlcmlhbGl6ZV9pZCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSAp OgorICAgICAgICAiIiIKKyAgICAgICAgU2VyaWFsaXplIGFuIGlkIGF0dHJpYnV0ZSBvZiBgaXRl bWAuCisgICAgICAgICIiIgorICAgICAgICBpZCA9M0QgZ2V0YXR0ciggaXRlbSwga2V5ICkKKyAg ICAgICAgcmV0dXJuIHNlbGYuYXBwLnNlY3VyaXR5LmVuY29kZV9pZCggaWQgKSBpZiBpZCBpcyBu b3QgTm9uZSBlbHNlIE5vPQpuZQorCisgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gc2VyaWFsaXpp bmcgdG8gYSB2aWV3CisgICAgIyB3aGVyZSBhIHZpZXcgaXMgYSBwcmVkZWZpZWQgbGlzdCBvZiBr ZXlzIHRvIHNlcmlhbGl6ZQorICAgIGRlZiBzZXJpYWxpemVfdG9fdmlldyggc2VsZiwgdHJhbnMs IGl0ZW0sIHZpZXc9M0ROb25lLCBrZXlzPTNETm9uZSwgZGU9CmZhdWx0X3ZpZXc9M0ROb25lICk6 CisgICAgICAgICIiIgorICAgICAgICBVc2UgYSBwcmVkZWZpbmVkIGxpc3Qgb2Yga2V5cyAodGhl IHN0cmluZyBgdmlld2ApIGFuZCBhbnkgYWRkaXRpb249CmFsIGtleXMKKyAgICAgICAgbGlzdGVk IGluIGBrZXlzYC4KKworICAgICAgICBUaGUgY29tYmluYXRpb25zIGNhbiBiZToKKyAgICAgICAg ICAgIGB2aWV3YCBvbmx5OiByZXR1cm4gdGhvc2Uga2V5cyBsaXN0ZWQgaW4gdGhlIG5hbWVkIHZp ZXcKKyAgICAgICAgICAgIGBrZXlzYCBvbmx5OiByZXR1cm4gdGhvc2Uga2V5cyBsaXN0ZWQKKyAg ICAgICAgICAgIG5vIGB2aWV3YCBvciBga2V5c2A6IHVzZSB0aGUgYGRlZmF1bHRfdmlld2AgaWYg YW55CisgICAgICAgICAgICBgdmlld2AgYW5kIGBrZXlzYDogY29tYmluZSBib3RoIGludG8gb25l IGxpc3Qgb2Yga2V5cworICAgICAgICAiIiIKKyAgICAgICAgYWxsX2tleXMgPTNEIFtdCisgICAg ICAgIGtleXMgPTNEIGtleXMgb3IgW10KKyAgICAgICAgIyBjaG9zZSBleHBsaWNpdCBvdmVyIGNv bmNpc2UgaGVyZQorICAgICAgICBpZiB2aWV3OgorICAgICAgICAgICAgaWYga2V5czoKKyAgICAg ICAgICAgICAgICBhbGxfa2V5cyA9M0Qgc2VsZi5fdmlld190b19rZXlzKCB2aWV3ICkgKyBrZXlz CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsbF9rZXlzID0zRCBzZWxmLl92 aWV3X3RvX2tleXMoIHZpZXcgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYga2V5czoK KyAgICAgICAgICAgICAgICBhbGxfa2V5cyA9M0Qga2V5cworICAgICAgICAgICAgZWxpZiBkZWZh dWx0X3ZpZXc6CisgICAgICAgICAgICAgICAgYWxsX2tleXMgPTNEIHNlbGYuX3ZpZXdfdG9fa2V5 cyggZGVmYXVsdF92aWV3ICkKKworICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemUoIHRyYW5z LCBpdGVtLCBhbGxfa2V5cyApCisKKyAgICBkZWYgX3ZpZXdfdG9fa2V5cyggc2VsZiwgdmlldz0z RE5vbmUgKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnRzIGEga25vd24gdmlldyBpbnRv IGEgbGlzdCBvZiBrZXlzLgorCisgICAgICAgIDpyYWlzZXMgTW9kZWxTZXJpYWxpemluZ0Vycm9y OiBpZiB0aGUgdmlldyBpcyBub3QgbGlzdGVkIGluIGBzZWxmLj0Kdmlld3NgLgorICAgICAgICAi IiIKKyAgICAgICAgaWYgdmlldyBpcyBOb25lOgorICAgICAgICAgICAgdmlldyA9M0Qgc2VsZi5k ZWZhdWx0X3ZpZXcKKyAgICAgICAgaWYgdmlldyBub3QgaW4gc2VsZi52aWV3czoKKyAgICAgICAg ICAgIHJhaXNlIE1vZGVsU2VyaWFsaXppbmdFcnJvciggJ3Vua25vd24gdmlldycsIHZpZXc9M0R2 aWV3LCBhdmFpPQpsYWJsZV92aWV3cz0zRHNlbGYudmlld3MgKQorICAgICAgICByZXR1cm4gc2Vs Zi52aWV3c1sgdmlldyBdWzpdCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBN b2RlbERlc2VyaWFsaXplciggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQW4gb2JqZWN0IHRoYXQg Y29udmVydHMgYW4gaW5jb21pbmcgc2VyaWFsaXplZCBkaWN0IGludG8gdmFsdWVzIHRoYXQgYz0K YW4gYmUKKyAgICBkaXJlY3RseSBhc3NpZ25lZCB0byBhbiBpdGVtJ3MgYXR0cmlidXRlcyBhbmQg YXNzaWducyB0aGVtLgorICAgICIiIgorICAgICM6IHRoZSBjbGFzcyB1c2VkIHRvIGNyZWF0ZSB0 aGlzIGRlc2VyaWFsaXplcidzIGdlbmVyaWNhbGx5IGFjY2Vzc2libGU9CiBtb2RlbF9tYW5hZ2Vy CisgICAgbW9kZWxfbWFuYWdlcl9jbGFzcyA9M0QgTm9uZQorCisgICAgZGVmIF9faW5pdF9fKCBz ZWxmLCBhcHAgKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB1cCBkZXNlcmlhbGl6ZXJzIGFu ZCB2YWxpZGF0b3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFwcCA9M0QgYXBwCisKKyAg ICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzID0zRCB7fQorICAgICAgICBzZWxmLmRlc2VyaWFsaXph YmxlX2tleXMgPTNEIFtdCisgICAgICAgIHNlbGYuYWRkX2Rlc2VyaWFsaXplcnMoKQorICAgICAg ICAjIGEgc3ViIG9iamVjdCB0aGF0IGNhbiB2YWxpZGF0ZSBpbmNvbWluZyB2YWx1ZXMKKyAgICAg ICAgc2VsZi52YWxpZGF0ZSA9M0QgTW9kZWxWYWxpZGF0b3IoIHNlbGYuYXBwICkKKworICAgICAg ICAjIGNyZWF0ZSBhIGdlbmVyaWNhbGx5IGFjY2Vzc2libGUgbWFuYWdlciBmb3IgdGhlIG1vZGVs IHRoaXMgZGVzZXI9CmlhbGl6ZXIgd29ya3Mgd2l0aC9mb3IKKyAgICAgICAgc2VsZi5tYW5hZ2Vy ID0zRCBOb25lCisgICAgICAgIGlmIHNlbGYubW9kZWxfbWFuYWdlcl9jbGFzczoKKyAgICAgICAg ICAgc2VsZi5tYW5hZ2VyID0zRCBzZWxmLm1vZGVsX21hbmFnZXJfY2xhc3MoIHNlbGYuYXBwICkK KworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICAiIiIKKyAgICAg ICAgUmVnaXN0ZXIgYSBtYXAgb2YgYXR0cmlidXRlIGtleXMgLT4gZnVuY3Rpb25zIHRoYXQgd2ls bCBkZXNlcmlhbGl6PQplIGRhdGEKKyAgICAgICAgaW50byBhdHRyaWJ1dGVzIHRvIGJlIGFzc2ln bmVkIHRvIHRoZSBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAgIyB0byBiZSBvdmVycmlkZGVu IGluIHN1YmNsYXNzZXMKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRlc2VyaWFsaXplKCBzZWxm LCB0cmFucywgaXRlbSwgZGF0YSwgZmx1c2g9M0RUcnVlICk6CisgICAgICAgICIiIgorICAgICAg ICBDb252ZXJ0IGFuIGluY29taW5nIHNlcmlhbGl6ZWQgZGljdCBpbnRvIHZhbHVlcyB0aGF0IGNh biBiZQorICAgICAgICBkaXJlY3RseSBhc3NpZ25lZCB0byBhbiBpdGVtJ3MgYXR0cmlidXRlcyBh bmQgYXNzaWduIHRoZW0KKyAgICAgICAgIiIiCisgICAgICAgIHNhX3Nlc3Npb24gPTNEIHNlbGYu YXBwLm1vZGVsLmNvbnRleHQKKyAgICAgICAgbmV3X2RpY3QgPTNEIHt9CisgICAgICAgIGZvciBr ZXksIHZhbCBpbiBkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5kZXNl cmlhbGl6ZXJzOgorICAgICAgICAgICAgICAgIG5ld19kaWN0WyBrZXkgXSA9M0Qgc2VsZi5kZXNl cmlhbGl6ZXJzWyBrZXkgXSggdHJhbnMsIGl0ZW09Ciwga2V5LCB2YWwgKQorICAgICAgICAgICAg IyFpbXBvcnRhbnQ6IGRvbid0IGVycm9yIG9uIHVucmVnLiBrZXlzIC0tIG1hbnkgY2xpZW50cyB3 aWxsIGE9CmRkIHdlaXJkIGFzcyBrZXlzIG9udG8gdGhlIG1vZGVsCisKKyAgICAgICAgI1RPRE86 Pz8gYWRkIGFuZCBmbHVzaCBoZXJlIG9yIGluIG1hbmFnZXI/CisgICAgICAgIGlmIGZsdXNoIGFu ZCBsZW4oIG5ld19kaWN0ICk6CisgICAgICAgICAgICBzYV9zZXNzaW9uLmFkZCggaXRlbSApCisg ICAgICAgICAgICBzYV9zZXNzaW9uLmZsdXNoKCkKKworICAgICAgICByZXR1cm4gbmV3X2RpY3QK KworICAgICMgLi4uIGNvbW1vbiBkZXNlcmlhbGl6ZXJzIGZvciBwcmltaXRpdmVzCisgICAgZGVm IGRlZmF1bHRfZGVzZXJpYWxpemVyKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAg ICAgICAgIiIiCisgICAgICAgIElmIHRoZSBpbmNvbWluZyBgdmFsYCBpcyBkaWZmZXJlbnQgdGhh biB0aGUgYGl0ZW1gIHZhbHVlIGNoYW5nZSBpdAorICAgICAgICBhbmQsIGluIGVpdGhlciBjYXNl LCByZXR1cm4gdGhlIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgI1RPRE86IHNldHMgdGhl IGl0ZW0gYXR0cmlidXRlIHRvIHZhbHVlICh0aGlzIG1heSBub3Qgd29yayBpbiBhbGwgPQppbnN0 YW5jZXMpCisKKyAgICAgICAgIyBvbmx5IGRvIHRoZSBmb2xsb3dpbmcgaWYgdmFsID0zRD0zRCBn ZXRhdHRyKCBpdGVtLCBrZXkgKQorICAgICAgICBpZiBoYXNhdHRyKCBpdGVtLCBrZXkgKSBhbmQg Z2V0YXR0ciggaXRlbSwga2V5ICkgIT0zRCB2YWw6CisgICAgICAgICAgICBzZXRhdHRyKCBpdGVt LCBrZXksIHZhbCApCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBkZXNlcmlhbGl6ZV9i YXNlc3RyaW5nKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgdmFsID0z RCBzZWxmLnZhbGlkYXRlLmJhc2VzdHJpbmcoIGtleSwgdmFsICkKKyAgICAgICAgcmV0dXJuIHNl bGYuZGVmYXVsdF9kZXNlcmlhbGl6ZXIoIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApCisKKyAgICBk ZWYgZGVzZXJpYWxpemVfYm9vbCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAg ICAgIHZhbCA9M0Qgc2VsZi52YWxpZGF0ZS5ib29sKCBrZXksIHZhbCApCisgICAgICAgIHJldHVy biBzZWxmLmRlZmF1bHRfZGVzZXJpYWxpemVyKCB0cmFucywgaXRlbSwga2V5LCB2YWwgKQorCisg ICAgZGVmIGRlc2VyaWFsaXplX2ludCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsLCBtaW49 M0ROb25lLCBtYXg9M0RObz0KbmUgKToKKyAgICAgICAgdmFsID0zRCBzZWxmLnZhbGlkYXRlLmlu dF9yYW5nZSgga2V5LCB2YWwsIG1pbiwgbWF4ICkKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVs dF9kZXNlcmlhbGl6ZXIoIHRyYW5zLCBpdGVtLCBrZXksIHZhbCApCisKKyAgICAjIC4uLiBjb21t b24gZGVzZXJpYWxpemVycyBmb3IgR2FsYXh5CisgICAgZGVmIGRlc2VyaWFsaXplX2dlbm9tZV9i dWlsZCggc2VsZiwgdHJhbnMsIGl0ZW0sIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAg ICBNYWtlIHN1cmUgYHZhbGAgaXMgYSB2YWxpZCBkYmtleSBhbmQgYXNzaWduIGl0LgorICAgICAg ICAiIiIKKyAgICAgICAgdmFsID0zRCBzZWxmLnZhbGlkYXRlLmdlbm9tZV9idWlsZCggdHJhbnMs IGtleSwgdmFsICkKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9kZXNlcmlhbGl6ZXIoIHRy YW5zLCBpdGVtLCBrZXksIHZhbCApCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCisjVE9E Tzo/PyBhIGxhcmdlciBxdWVzdGlvbiBpczogd2hpY2ggc2hvdWxkIGJlIGZpcnN0PyBEZXNlcmlh bGl6ZSB0aGVuIHZhbD0KaWRhdGUgLSBvciAtIHZhbGlkYXRlIHRoZW4gZGVzZXJpYWxpemU/Citj bGFzcyBNb2RlbFZhbGlkYXRvciggb2JqZWN0ICk6CisgICAgIiIiCisgICAgQW4gb2JqZWN0IHRo YXQgaW5zcGVjdHMgYSBkaWN0aW9uYXJ5IChnZW5lcmFsbHkgbWVhbnQgdG8gYmUgYSBzZXQgb2YK KyAgICBuZXcvdXBkYXRlZCB2YWx1ZXMgZm9yIHRoZSBtb2RlbCkgYW5kIHJhaXNlcyBhbiBlcnJv ciBpZiBhIHZhbHVlIGlzCisgICAgbm90IGFjY2VwdGFibGUuCisgICAgIiIiCisKKyAgICBkZWYg X19pbml0X18oIHNlbGYsIGFwcCwgKmFyZ3MsICoqa3dhcmdzICk6CisgICAgICAgIHNlbGYuYXBw ID0zRCBhcHAKKworICAgIGRlZiB0eXBlKCBzZWxmLCBrZXksIHZhbCwgdHlwZXMgKToKKyAgICAg ICAgIiIiCisgICAgICAgIENoZWNrIGB2YWxgIGFnYWluc3QgdGhlIHR5cGUgKG9yIHR1cGxlIG9m IHR5cGVzKSBpbiBgdHlwZXNgLgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5SZXF1ZXN0 UGFyYW1ldGVySW52YWxpZEV4Y2VwdGlvbjogaWYgbm90IGFuIGlucz0KdGFuY2UuCisgICAgICAg ICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSggdmFsLCB0eXBlcyApOgorICAgICAgICAg ICAgbXNnID0zRCAnbXVzdCBiZSBhIHR5cGU6ICVzJyAlICggc3RyKCB0eXBlcyApICkKKyAgICAg ICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24o IG1zZywga2V5PTNEPQprZXksIHZhbD0zRHZhbCApCisgICAgICAgIHJldHVybiB2YWwKKworICAg ICMgdmFsaWRhdG9ycyBmb3IgcHJpbWl0aXZlcyBhbmQgY29tcG91bmRzIG9mIHByaW1pdGl2ZXMK KyAgICBkZWYgYmFzZXN0cmluZyggc2VsZiwga2V5LCB2YWwgKToKKyAgICAgICAgcmV0dXJuIHNl bGYudHlwZSgga2V5LCB2YWwsIGJhc2VzdHJpbmcgKQorCisgICAgZGVmIGJvb2woIHNlbGYsIGtl eSwgdmFsICk6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUoIGtleSwgdmFsLCBib29sICkKKwor ICAgIGRlZiBpbnQoIHNlbGYsIGtleSwgdmFsICk6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUo IGtleSwgdmFsLCBpbnQgKQorCisgICAgZGVmIG51bGxhYmxlX2Jhc2VzdHJpbmcoIHNlbGYsIGtl eSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAgICBNdXN0IGJlIGEgYmFzZXN0cmluZyBvciBO b25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZSgga2V5LCB2YWwsICgg YmFzZXN0cmluZywgdHlwZSggTm9uZSApICkgKQorCisgICAgZGVmIGludF9yYW5nZSggc2VsZiwg a2V5LCB2YWwsIG1pbj0zRE5vbmUsIG1heD0zRE5vbmUgKToKKyAgICAgICAgIiIiCisgICAgICAg IE11c3QgYmUgYSBpbnQgYmV0d2VlbiBtaW4gYW5kIG1heC4KKyAgICAgICAgIiIiCisgICAgICAg IHZhbCA9M0Qgc2VsZi50eXBlKCBrZXksIHZhbCwgaW50ICkKKyAgICAgICAgaWYgbWluIGlzIG5v dCBOb25lIGFuZCB2YWwgPCBtaW46CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVl c3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uKCAibGVzcyB0aGFuID0KbWluaW11bSIsIGtleT0z RGtleSwgdmFsPTNEdmFsLCBtaW49M0RtaW4gKQorICAgICAgICBpZiBtYXggaXMgbm90IE5vbmUg YW5kIHZhbCA+IG1heDoKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVxdWVzdFBhcmFt ZXRlckludmFsaWRFeGNlcHRpb24oICJncmVhdGVyIHRoPQphbiBtYXhpbXVtIiwga2V5PTNEa2V5 LCB2YWw9M0R2YWwsIG1heD0zRG1heCApCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBi YXNlc3RyaW5nX2xpc3QoIHNlbGYsIGtleSwgdmFsICk6CisgICAgICAgICIiIgorICAgICAgICBN dXN0IGJlIGEgbGlzdCBvZiBiYXNlc3RyaW5ncy4KKyAgICAgICAgIiIiCisgICAgICAgICNUT0RP OiBIZXJlJ3Mgd2hlcmUgY29tcG91bmQgdHlwZXMgc3RhcnQgYmVjb21pbmcgYSBuaWdodG1hcmUu IEFueT0KIG1vcmUgb3IgbW9yZSBjb21wbGV4CisgICAgICAgICMgICBhbmQgc2hvdWxkIGZpbmQg YSBkaWZmZXJlbnQgd2F5LgorICAgICAgICB2YWwgPTNEIHNlbGYudHlwZSgga2V5LCB2YWwsIGxp c3QgKQorICAgICAgICByZXR1cm4gWyBzZWxmLmJhc2VzdHJpbmcoIGtleSwgZWxlbSApIGZvciBl bGVtIGluIHZhbCBdCisKKyAgICAjIHZhbGlkYXRvcnMgZm9yIEdhbGF4eQorICAgIGRlZiBnZW5v bWVfYnVpbGQoIHNlbGYsIHRyYW5zLCBrZXksIHZhbCApOgorICAgICAgICAiIiIKKyAgICAgICAg TXVzdCBiZSBhIHZhbGlkIGdlbm9tZV9idWlsZC9kYmtleS9yZWZlcmVuY2Uvd2hhdGV2ZXItdGhl LWhlbGwtd2VyPQplLWNhbGxpbmctdGhlbS1ub3cuCisgICAgICAgICIiIgorICAgICAgICAjVE9E TzogaXMgdGhpcyBjb3JyZWN0PworICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAg IHJldHVybiAnPycKKyAgICAgICAgZm9yIGdlbm9tZV9idWlsZF9zaG9ydG5hbWUsIGxvbmduYW1l IGluIHNlbGYuYXBwLmdlbm9tZV9idWlsZHMuZ2V0PQpfZ2Vub21lX2J1aWxkX25hbWVzKCB0cmFu cz0zRHRyYW5zICk6CisgICAgICAgICAgICBpZiB2YWwgPTNEPTNEIGdlbm9tZV9idWlsZF9zaG9y dG5hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbAorICAgICAgICByYWlzZSBleGNlcHRp b25zLlJlcXVlc3RQYXJhbWV0ZXJJbnZhbGlkRXhjZXB0aW9uKCAiaW52YWxpZCByZWZlcmU9Cm5j ZSIsIGtleT0zRGtleSwgdmFsPTNEdmFsICkKKworICAgICNkZWYgc2x1Zyggc2VsZiwgdHJhbnMs IGl0ZW0sIGtleSwgdmFsICk6CisgICAgIyAgICAiIiJ2YWxpZGF0ZSBzbHVnIiIiCisgICAgIyAg ICBwYXNzCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKKyMgTWl4aW5zIChoZXJlIGZvciBub3cpCisjID0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z RD0zRAorY2xhc3MgQWNjZXNzaWJsZU1vZGVsSW50ZXJmYWNlKCBvYmplY3QgKToKKyAgICAiIiIK KyAgICBBIHNlY3VyaXR5IGludGVyZmFjZSB0byBjaGVjayBpZiBhIFVzZXIgY2FuIHJlYWQvdmll dyBhbiBpdGVtJ3MuCisKKyAgICBUaGlzIGNhbiBhbHNvIGJlIHRob3VnaHQgb2YgYXMgJ3JlYWQg YnV0IG5vdCBtb2RpZnknIHByaXZpbGVnZXMuCisgICAgIiIiCisKKyAgICAjIGRvbid0IHdhbnQg dG8gb3ZlcnJpZGUgYnlfaWQgc2luY2UgY29uc3VtZXJzIHdpbGwgYWxzbyB3YW50IHRvIGZldGNo PQogdy9vIGFueSBzZWN1cml0eSBjaGVja3MKKyAgICBkZWYgaXNfYWNjZXNzaWJsZSggc2VsZiwg dHJhbnMsIGl0ZW0sIHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlm IHRoZSBpdGVtIGFjY2Vzc2libGUgdG8gdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgb3Zl cnJpZGUgaW4gc3ViY2xhc3NlcworICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVu dGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNlIE1ldGhvZCIgKQorCisgICAgZGVmIGdldF9hY2Nlc3Np YmxlKCBzZWxmLCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAg ICAgICBSZXR1cm4gdGhlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgaXQncyBhY2Nlc3NpYmxl IHRvIHVzZXIsCisgICAgICAgIG90aGVyd2lzZSByYWlzZSBhbiBlcnJvci4KKworICAgICAgICA6 cmFpc2VzIGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIi IgorICAgICAgICBpdGVtID0zRCBNb2RlbE1hbmFnZXIuYnlfaWQoIHNlbGYsIHRyYW5zLCBpZCAp CisgICAgICAgIHJldHVybiBzZWxmLmVycm9yX3VubGVzc19hY2Nlc3NpYmxlKCB0cmFucywgaXRl bSwgdXNlciApCisKKyAgICBkZWYgZXJyb3JfdW5sZXNzX2FjY2Vzc2libGUoIHNlbGYsIHRyYW5z LCBpdGVtLCB1c2VyICk6CisgICAgICAgICIiIgorICAgICAgICBSYWlzZSBhbiBlcnJvciBpZiB0 aGUgaXRlbSBpcyBOT1QgYWNjZXNzaWJsZSB0byB1c2VyLCBvdGhlcndpc2UgcmU9CnR1cm4gdGhl IGl0ZW0uCisKKyAgICAgICAgOnJhaXNlcyBleGNlcHRpb25zLkl0ZW1BY2Nlc3NpYmlsaXR5RXhj ZXB0aW9uOgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5pc19hY2Nlc3NpYmxlKCB0cmFu cywgaXRlbSwgdXNlciApOgorICAgICAgICAgICAgcmV0dXJuIGl0ZW0KKyAgICAgICAgcmFpc2Ug ZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbiggIiVzIGlzIG5vdCBhY2Nlc3Np YmxlPQogYnkgdXNlciIgJSAoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKSApCisKKyAgICAj VE9ETzo/PyBhcmUgdGhlc2UgZXZlbiB1c2VmdWw/CisgICAgZGVmIGxpc3RfYWNjZXNzaWJsZSgg c2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1 cm4gYSBsaXN0IG9mIGl0ZW1zIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIsIHJhaXNpbmcgYW4gZXJy b3IgaWY9CiBBTlkKKyAgICAgICAgYXJlIGluYWNjZXNzaWJsZS4KKworICAgICAgICA6cmFpc2Vz IGV4Y2VwdGlvbnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAg ICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50ZXJmYWNl IE1ldGhvZCIgKQorICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGluZWZmaWNp ZW50IGxpc3QgaWYgZmlsdGVycyBhcmUgbm90IHA9CmFzc2VkIGluIGt3YXJncworICAgICAgICAj aXRlbXMgPTNEIE1vZGVsTWFuYWdlci5saXN0KCBzZWxmLCB0cmFucywgKiprd2FyZ3MgKQorICAg ICAgICAjcmV0dXJuIFsgc2VsZi5lcnJvcl91bmxlc3NfYWNjZXNzaWJsZSggdHJhbnMsIGl0ZW0s IHVzZXIgKSBmb3IgaXQ9CmVtIGluIGl0ZW1zIF0KKworICAgIGRlZiBmaWx0ZXJfYWNjZXNzaWJs ZSggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBS ZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIuCisgICAgICAgICIi IgorICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vdEltcGxlbWVudGVkKCAiQWJzdHJhY3QgSW50 ZXJmYWNlIE1ldGhvZCIgKQorICAgICAgICAjTk9URTogdGhpcyB3aWxsIGJlIGEgbGFyZ2UsIGlu ZWZmaWNpZW50IGxpc3QgaWYgZmlsdGVycyBhcmUgbm90ICA9CnBhc3NlZCBpbiBrd2FyZ3MKKyAg ICAgICAgI2l0ZW1zID0zRCBNb2RlbE1hbmFnZXIubGlzdCggc2VsZiwgdHJhbnMsICoqa3dhcmdz ICkKKyAgICAgICAgI3JldHVybiBmaWx0ZXIoIGxhbWJkYSBpdGVtOiBzZWxmLmlzX2FjY2Vzc2li bGUoIHRyYW5zLCBpdGVtLCB1c2VyPQogKSwgaXRlbXMgKQorCisKKyMgPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PQo9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNECitjbGFz cyBPd25hYmxlTW9kZWxJbnRlcmZhY2UoIG9iamVjdCApOgorICAgICIiIgorICAgIEEgc2VjdXJp dHkgaW50ZXJmYWNlIHRvIGNoZWNrIGlmIGEgVXNlciBpcyBhbiBpdGVtJ3Mgb3duZXIuCisKKyAg ICBTb21lIHJlc291cmNlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBVc2VyIHRoYXQgY3JlYXRl ZCBvciBpbXBvcnRlZCB0PQpoZW0KKyAgICBhbmQgdGhlc2UgVXNlcnMgY2FuIGJlIGNvbnNpZGVy ZWQgdGhlIG1vZGVscycgb3duZXIuCisKKyAgICBUaGlzIGNhbiBhbHNvIGJlIHRob3VnaHQgb2Yg YXMgd3JpdGUvZWRpdCBwcml2aWxlZ2VzLgorICAgICIiIgorCisgICAgZGVmIGlzX293bmVyKCBz ZWxmLCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRy dWUgaWYgdXNlciBvd25zIHRoZSBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAgIyBvdmVycmlk ZSBpbiBzdWJjbGFzc2VzCisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWQo ICJBYnN0cmFjdCBJbnRlcmZhY2UgTWV0aG9kIiApCisKKyAgICBkZWYgZ2V0X293bmVkKCBzZWxm LCB0cmFucywgaWQsIHVzZXIsICoqa3dhcmdzICk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1 cm4gdGhlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaWQgaWYgb3duZWQgYnkgdGhlIHVzZXIsCisgICAg ICAgIG90aGVyd2lzZSByYWlzZSBhbiBlcnJvci4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlv bnMuSXRlbU93bmVyc2hpcEV4Y2VwdGlvbjoKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW0gPTNE IE1vZGVsTWFuYWdlci5ieV9pZCggc2VsZiwgdHJhbnMsIGlkICkKKyAgICAgICAgcmV0dXJuIHNl bGYuZXJyb3JfdW5sZXNzX293bmVyKCB0cmFucywgaXRlbSwgdXNlciApCisKKyAgICBkZWYgZXJy b3JfdW5sZXNzX293bmVyKCBzZWxmLCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAiIiIK KyAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIGl0ZW0gaXMgTk9UIG93bmVkIGJ5IHVzZXIs IG90aGVyd2lzZSByZXR1cm4gPQp0aGUgaXRlbS4KKworICAgICAgICA6cmFpc2VzIGV4Y2VwdGlv bnMuSXRlbUFjY2Vzc2liaWxpdHlFeGNlcHRpb246CisgICAgICAgICIiIgorICAgICAgICBpZiBz ZWxmLmlzX293bmVyKCB0cmFucywgaXRlbSwgdXNlciApOgorICAgICAgICAgICAgcmV0dXJuIGl0 ZW0KKyAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5JdGVtT3duZXJzaGlwRXhjZXB0aW9uKCAiJXMg aXMgbm90IG93bmVkIGJ5IHVzZXIiPQogJSAoIHNlbGYubW9kZWxfY2xhc3MuX19uYW1lX18gKSAp CisKKyAgICBkZWYgbGlzdF9vd25lZCggc2VsZiwgdHJhbnMsIHVzZXIsICoqa3dhcmdzICk6Cisg ICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIG93bmVkIGJ5IHRoZSB1 c2VyLCByYWlzaW5nIGFuIGVycm9yIGlmIEFOWQorICAgICAgICBhcmUgbm90LgorCisgICAgICAg IDpyYWlzZXMgZXhjZXB0aW9ucy5JdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbjoKKyAgICAgICAg IiIiCisgICAgICAgICMganVzdCBhbGlhcyB0byBieV91c2VyIChlYXNpZXIvc2FtZSB0aGluZykK KyAgICAgICAgcmV0dXJuIHNlbGYuYnlfdXNlciggdHJhbnMsIHVzZXIsICoqa3dhcmdzICkKKwor ICAgIGRlZiBmaWx0ZXJfb3duZWQoIHNlbGYsIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApOgorICAg ICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBpdGVtcyBvd25lZCBieSB0aGUgdXNl ci4KKyAgICAgICAgIiIiCisgICAgICAgICMganVzdCBhbGlhcyB0byBsaXN0X293bmVkCisgICAg ICAgIHJldHVybiBzZWxmLmxpc3Rfb3duZWQoIHRyYW5zLCB1c2VyLCAqKmt3YXJncyApCisKKwor IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitjbGFzcyBEZWxldGFibGVNb2RlbEludGVyZmFjZSgg b2JqZWN0ICk6CisgICAgIiIiCisgICAgQSBtaXhpbi9pbnRlcmZhY2UgZm9yIGEgbW9kZWwgdGhh dCBpcyBkZWxldGFibGUgKGkuZS4gaGFzIGEgJ2RlbGV0ZWQnID0KYXR0cikuCisKKyAgICBNYW55 IHJlc291cmNlcyBpbiBHYWxheHkgY2FuIGJlIG1hcmtlZCBhcyBkZWxldGVkIC0gbWVhbmluZyAo aW4gbW9zdCBjPQphc2VzKQorICAgIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZCwgc2hv dWxkIG5vdCBiZSBkaXNwbGF5ZWQsIG9yIG1heSBiZSBhY3Q9CnVhbGx5CisgICAgcmVtb3ZlZCBi eSBhbiBhZG1pbi9zY3JpcHQuCisgICAgIiIiCisKKyAgICBkZWYgZGVsZXRlKCBzZWxmLCB0cmFu cywgaXRlbSwgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAg TWFyayBhcyBkZWxldGVkIGFuZCByZXR1cm4uCisgICAgICAgICIiIgorICAgICAgICB0cmFucy5z YV9zZXNzaW9uLmFkZCggaXRlbSApCisgICAgICAgIGl0ZW0uZGVsZXRlZCA9M0QgVHJ1ZQorICAg ICAgICBpZiBmbHVzaDoKKyAgICAgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uZmx1c2goKQorICAg ICAgICByZXR1cm4gaXRlbQorCisgICAgZGVmIHVuZGVsZXRlKCBzZWxmLCB0cmFucywgaXRlbSwg Zmx1c2g9M0RUcnVlLCAqKmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhcyBu b3QgZGVsZXRlZCBhbmQgcmV0dXJuLgorICAgICAgICAiIiIKKyAgICAgICAgdHJhbnMuc2Ffc2Vz c2lvbi5hZGQoIGl0ZW0gKQorICAgICAgICBpdGVtLmRlbGV0ZWQgPTNEIEZhbHNlCisgICAgICAg IGlmIGZsdXNoOgorICAgICAgICAgICAgdHJhbnMuc2Ffc2Vzc2lvbi5mbHVzaCgpCisgICAgICAg IHJldHVybiBpdGVtCisKKworY2xhc3MgRGVsZXRhYmxlTW9kZWxTZXJpYWxpemVyKCBvYmplY3Qg KToKKworICAgIGRlZiBhZGRfc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgcGFzcworCisK KyNUT0RPOiB0aGVzZSBhcmUgb2YgcXVlc3Rpb25hYmxlIHZhbHVlIGlmIHdlIGRvbid0IHdhbnQg dG8gZW5hYmxlIHVzZXJzIHRvPQogZGVsZXRlL3B1cmdlIHZpYSB1cGRhdGUKK2NsYXNzIERlbGV0 YWJsZU1vZGVsRGVzZXJpYWxpemVyKCBvYmplY3QgKToKKworICAgIGRlZiBhZGRfZGVzZXJpYWxp emVycyggc2VsZiApOgorICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnNbICdkZWxldGVkJyBdID0z RCBzZWxmLmRlc2VyaWFsaXplX2RlbGV0ZWQKKworICAgIGRlZiBkZXNlcmlhbGl6ZV9kZWxldGVk KCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwgKToKKyAgICAgICAgIiIiCisgICAgICAgIERl bGV0ZSBvciB1bmRlbGV0ZSBgaXRlbWAgYmFzZWQgb24gYHZhbGAgdGhlbiByZXR1cm4gYGl0ZW0u ZGVsZXRlZD0KYC4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld19kZWxldGVkID0zRCBzZWxmLnZh bGlkYXRlLmJvb2woIGtleSwgdmFsICkKKyAgICAgICAgaWYgbmV3X2RlbGV0ZWQgPTNEPTNEIGl0 ZW0uZGVsZXRlZDoKKyAgICAgICAgICAgIHJldHVybiBpdGVtLmRlbGV0ZWQKKyAgICAgICAgI1RP RE86Pz8gZmx1c2g9M0RGYWxzZT8KKyAgICAgICAgaWYgbmV3X2RlbGV0ZWQ6CisgICAgICAgICAg ICBzZWxmLm1hbmFnZXIuZGVsZXRlKCB0cmFucywgaXRlbSwgZmx1c2g9M0RGYWxzZSApCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIudW5kZWxldGUoIHRyYW5zLCBpdGVt LCBmbHVzaD0zREZhbHNlICkKKyAgICAgICAgcmV0dXJuIGl0ZW0uZGVsZXRlZAorCisKKyMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPQotLS0tLQorY2xhc3MgUHVyZ2FibGVNb2RlbEludGVyZmFjZSggRGVsZXRh YmxlTW9kZWxJbnRlcmZhY2UgKToKKyAgICAiIiIKKyAgICBBIG1hbmFnZXIgaW50ZXJmYWNlL21p eGluIGZvciBhIHJlc291cmNlIHRoYXQgYWxsb3dzIGRlbGV0aW5nIGFuZCBwdXJnPQppbmcgd2hl cmUKKyAgICBwdXJnaW5nIGlzIG9mdGVuIHJlbW92YWwgb2Ygc29tZSBhZGRpdGlvbmFsLCBub24t ZGIgcmVzb3VyY2UgKGUuZy4gYSBkPQphdGFzZXQncworICAgIGZpbGUpLgorICAgICIiIgorCisg ICAgZGVmIHB1cmdlKCBzZWxmLCB0cmFucywgaXRlbSwgZmx1c2g9M0RUcnVlLCAqKmt3YXJncyAp OgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhcyBwdXJnZWQgYW5kIHJldHVybi4KKworICAg ICAgICBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gZG8gdGhlIGFkZGl0aW9uYWwgcmVz b3VyY2UgcmVtb3ZhbC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyYW5zLnNhX3Nlc3Npb24uYWRk KCBpdGVtICkKKyAgICAgICAgaXRlbS5wdXJnZWQgPTNEIFRydWUKKyAgICAgICAgaWYgZmx1c2g6 CisgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIGl0 ZW0KKworCitjbGFzcyBQdXJnYWJsZU1vZGVsU2VyaWFsaXplciggRGVsZXRhYmxlTW9kZWxTZXJp YWxpemVyICk6CisKKyAgICBkZWYgYWRkX3NlcmlhbGl6ZXJzKCBzZWxmICk6CisgICAgICAgIERl bGV0YWJsZU1vZGVsU2VyaWFsaXplci5hZGRfc2VyaWFsaXplcnMoIHNlbGYgKQorCisKK2NsYXNz IFB1cmdhYmxlTW9kZWxEZXNlcmlhbGl6ZXIoIERlbGV0YWJsZU1vZGVsRGVzZXJpYWxpemVyICk6 CisKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAgICAgICAgRGVsZXRhYmxl TW9kZWxEZXNlcmlhbGl6ZXIuYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKQorICAgICAgICBzZWxm LmRlc2VyaWFsaXplcnNbICdwdXJnZWQnIF0gPTNEIHNlbGYuZGVzZXJpYWxpemVfcHVyZ2VkCisK KyAgICBkZWYgZGVzZXJpYWxpemVfcHVyZ2VkKCBzZWxmLCB0cmFucywgaXRlbSwga2V5LCB2YWwg KToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGB2YWxgIGlzIFRydWUsIHB1cmdlIGBpdGVtYCBh bmQgcmV0dXJuIGBpdGVtLnB1cmdlZGAuCisgICAgICAgICIiIgorICAgICAgICBuZXdfcHVyZ2Vk ID0zRCBzZWxmLnZhbGlkYXRlLmJvb2woIGtleSwgdmFsICkKKyAgICAgICAgaWYgbmV3X3B1cmdl ZCA9M0Q9M0QgaXRlbS5wdXJnZWQ6CisgICAgICAgICAgICByZXR1cm4gaXRlbS5wdXJnZWQKKyAg ICAgICAgaWYgbmV3X3B1cmdlZDoKKyAgICAgICAgICAgIHNlbGYubWFuYWdlci5wdXJnZSggdHJh bnMsIGl0ZW0sIGZsdXNoPTNERmFsc2UgKQorICAgICAgICByZXR1cm4gc2VsZi5wdXJnZWQKCmRp ZmYgLXIgZDcwMjFlZTk2YTgwMDg1ZDc2MDViMTY4YzczZGZkOTI5YWQ4NTFkMyAtciAwZmIzYjdk YzMwZDZmODM3ZTBiODE2Mj0KNzcxMjAxNjkzNTM4MWFhYzcgbGliL2dhbGF4eS9tYW5hZ2Vycy9j b2xsZWN0aW9ucy5weQotLS0gYS9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zLnB5Cisr KyBiL2xpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnMucHkKQEAgLTcsNiArNyw3IEBACiBm cm9tIGdhbGF4eS5leGNlcHRpb25zIGltcG9ydCBNZXNzYWdlRXhjZXB0aW9uCiBmcm9tIGdhbGF4 eS5leGNlcHRpb25zIGltcG9ydCBJdGVtQWNjZXNzaWJpbGl0eUV4Y2VwdGlvbgogZnJvbSBnYWxh eHkuZXhjZXB0aW9ucyBpbXBvcnQgUmVxdWVzdFBhcmFtZXRlckludmFsaWRFeGNlcHRpb24KK2Zy b20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBiYXNlCiBmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBv cnQgaGRhcyAgIyBUT0RPOiBSZWZhY3RvciBhbGwgbWl4aW4gdXNlIGludG8gbWFuYT0KZ2Vycy4K IGZyb20gZ2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBoaXN0b3JpZXMKIGZyb20gZ2FsYXh5Lm1hbmFn ZXJzIGltcG9ydCBsZGRhcwpAQCAtMzUsMTAgKzM2LDExIEBACiAgICAgICAgIHNlbGYuY29sbGVj dGlvbl90eXBlX2Rlc2NyaXB0aW9ucyA9M0QgQ29sbGVjdGlvblR5cGVEZXNjcmlwdGlvbkZhYz0K dG9yeSggc2VsZi50eXBlX3JlZ2lzdHJ5ICkKICAgICAgICAgc2VsZi5tb2RlbCA9M0QgYXBwLm1v ZGVsCiAgICAgICAgIHNlbGYuc2VjdXJpdHkgPTNEIGFwcC5zZWN1cml0eQotICAgICAgICBzZWxm LmhkYV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoKQotICAgICAgICBzZWxmLmhpc3Rvcnlf bWFuYWdlciA9M0QgaGlzdG9yaWVzLkhpc3RvcnlNYW5hZ2VyKCkKKworICAgICAgICBzZWxmLmhk YV9tYW5hZ2VyID0zRCBoZGFzLkhEQU1hbmFnZXIoIGFwcCApCisgICAgICAgIHNlbGYuaGlzdG9y eV9tYW5hZ2VyID0zRCBoaXN0b3JpZXMuSGlzdG9yeU1hbmFnZXIoIGFwcCApCiAgICAgICAgIHNl bGYudGFnX21hbmFnZXIgPTNEIHRhZ3MuVGFnTWFuYWdlciggYXBwICkKLSAgICAgICAgc2VsZi5s ZGRhX21hbmFnZXIgPTNEIGxkZGFzLkxEREFNYW5hZ2VyKCApCisgICAgICAgIHNlbGYubGRkYV9t YW5hZ2VyID0zRCBsZGRhcy5MRERBTWFuYWdlciggYXBwICkKPTIwCiAgICAgZGVmIGNyZWF0ZSgK ICAgICAgICAgc2VsZiwKQEAgLTY0LDYgKzY2LDcgQEAKICAgICAgICAgICAgIGVsZW1lbnRfaWRl bnRpZmllcnM9M0RlbGVtZW50X2lkZW50aWZpZXJzLAogICAgICAgICAgICAgZWxlbWVudHM9M0Rl bGVtZW50cywKICAgICAgICAgKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoIHBhcmVudCwgbW9k ZWwuSGlzdG9yeSApOgogICAgICAgICAgICAgZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlID0z RCBzZWxmLm1vZGVsLkhpc3RvcnlEYXRhc2V0Q29sbGU9CmN0aW9uQXNzb2NpYXRpb24oCiAgICAg ICAgICAgICAgICAgY29sbGVjdGlvbj0zRGRhdGFzZXRfY29sbGVjdGlvbiwKQEAgLTgxLDE1ICs4 NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICB0cmFucy5zYV9zZXNzaW9uLmFkZCggb3V0cHV0 X2RhdGFzZXQgKQo9MjAKICAgICAgICAgICAgICAgICBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFu Y2UuaW1wbGljaXRfb3V0cHV0X25hbWUgPTNEIGltcGxpPQpjaXRfY29sbGVjdGlvbl9pbmZvWyAi aW1wbGljaXRfb3V0cHV0X25hbWUiIF0KKwogICAgICAgICAgICAgbG9nLmRlYnVnKCJDcmVhdGVk IGNvbGxlY3Rpb24gd2l0aCAlZCBlbGVtZW50cyIgJSAoIGxlbiggZGF0YXM9CmV0X2NvbGxlY3Rp b25faW5zdGFuY2UuY29sbGVjdGlvbi5lbGVtZW50cyApICkgKQogICAgICAgICAgICAgIyBIYW5k bGUgc2V0dGluZyBoaWQKICAgICAgICAgICAgIHBhcmVudC5hZGRfZGF0YXNldF9jb2xsZWN0aW9u KCBkYXRhc2V0X2NvbGxlY3Rpb25faW5zdGFuY2UgKQorCiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSggcGFyZW50LCBtb2RlbC5MaWJyYXJ5Rm9sZGVyICk6CiAgICAgICAgICAgICBkYXRhc2V0X2Nv bGxlY3Rpb25faW5zdGFuY2UgPTNEIHNlbGYubW9kZWwuTGlicmFyeURhdGFzZXRDb2xsZT0KY3Rp b25Bc3NvY2lhdGlvbigKICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uPTNEZGF0YXNldF9jb2xs ZWN0aW9uLAogICAgICAgICAgICAgICAgIGZvbGRlcj0zRHBhcmVudCwKICAgICAgICAgICAgICAg ICBuYW1lPTNEbmFtZSwKICAgICAgICAgICAgICkKKwogICAgICAgICBlbHNlOgogICAgICAgICAg ICAgbWVzc2FnZSA9M0QgIkludGVybmFsIGxvZ2ljIGVycm9yIC0gY3JlYXRlIGNhbGxlZCB3aXRo IHVua25vd249CiBwYXJlbnQgdHlwZSAlcyIgJSB0eXBlKCBwYXJlbnQgKQogICAgICAgICAgICAg bG9nLmV4Y2VwdGlvbiggbWVzc2FnZSApCkBAIC0xODYsOCArMTkyLDYgQEAKICAgICAgICAgcmV0 dXJuIHNvdXJjZV9oZGNhCj0yMAogICAgIGRlZiBfc2V0X2Zyb21fZGljdCggc2VsZiwgdHJhbnMs IGRhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSwgbmV3X2RhdGE9CiApOgotICAgICAgICAjIEJs YXRhbnRseSBzdG9sZW4gZnJvbSBVc2VzSGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbk1peGluLnNl dF9oZGE9Cl9mcm9tX2RpY3QuCi0KICAgICAgICAgIyBzZW5kIHdoYXQgd2UgY2FuIGRvd24gaW50 byB0aGUgbW9kZWwKICAgICAgICAgY2hhbmdlZCA9M0QgZGF0YXNldF9jb2xsZWN0aW9uX2luc3Rh bmNlLnNldF9mcm9tX2RpY3QoIG5ld19kYXRhICkKICAgICAgICAgIyB0aGUgcmVzdCAob2Z0ZW4g aW52b2x2aW5nIHRoZSB0cmFucykgLSBkbyBoZXJlCkBAIC0yNzYsNyArMjgwLDcgQEAKPTIwCiAg ICAgICAgIGlmIHNyY190eXBlID0zRD0zRCAnaGRhJzoKICAgICAgICAgICAgIGRlY29kZWRfaWQg PTNEIGludCggdHJhbnMuYXBwLnNlY3VyaXR5LmRlY29kZV9pZCggZW5jb2RlZF9pZCApPQogKQot ICAgICAgICAgICAgZWxlbWVudCA9M0Qgc2VsZi5oZGFfbWFuYWdlci5nZXQoIHRyYW5zLCBkZWNv ZGVkX2lkLCBjaGVja19vd249CmVyc2hpcD0zREZhbHNlICkKKyAgICAgICAgICAgIGVsZW1lbnQg PTNEIHNlbGYuaGRhX21hbmFnZXIuZ2V0X2FjY2Vzc2libGUoIHRyYW5zLCBkZWNvZGVkX2lkPQos IHRyYW5zLnVzZXIgKQogICAgICAgICBlbGlmIHNyY190eXBlID0zRD0zRCAnbGRkYSc6CiAgICAg ICAgICAgICBlbGVtZW50ID0zRCBzZWxmLmxkZGFfbWFuYWdlci5nZXQoIHRyYW5zLCBlbmNvZGVk X2lkICkKICAgICAgICAgZWxpZiBzcmNfdHlwZSA9M0Q9M0QgJ2hkY2EnOgpAQCAtMzEwLDcgKzMx NCwxMCBAQAogICAgIGRlZiBfX2dldF9oaXN0b3J5X2NvbGxlY3Rpb25faW5zdGFuY2UoIHNlbGYs IHRyYW5zLCBpZCwgY2hlY2tfb3duZXJzaGk9CnA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0z RFRydWUgKToKICAgICAgICAgaW5zdGFuY2VfaWQgPTNEIGludCggdHJhbnMuYXBwLnNlY3VyaXR5 LmRlY29kZV9pZCggaWQgKSApCiAgICAgICAgIGNvbGxlY3Rpb25faW5zdGFuY2UgPTNEIHRyYW5z LnNhX3Nlc3Npb24ucXVlcnkoIHRyYW5zLmFwcC5tb2RlbC5IaT0Kc3RvcnlEYXRhc2V0Q29sbGVj dGlvbkFzc29jaWF0aW9uICkuZ2V0KCBpbnN0YW5jZV9pZCApCi0gICAgICAgIHNlbGYuaGlzdG9y eV9tYW5hZ2VyLnNlY3VyZSggdHJhbnMsIGNvbGxlY3Rpb25faW5zdGFuY2UuaGlzdG9yeSwgYz0K aGVja19vd25lcnNoaXA9M0RjaGVja19vd25lcnNoaXAsIGNoZWNrX2FjY2Vzc2libGU9M0RjaGVj a19hY2Nlc3NpYmxlICkKKyAgICAgICAgaWYgY2hlY2tfb3duZXJzaGlwOgorICAgICAgICAgICAg c2VsZi5oaXN0b3J5X21hbmFnZXIuZXJyb3JfdW5sZXNzX293bmVyKCB0cmFucywgY29sbGVjdGlv bl9pbnM9CnRhbmNlLmhpc3RvcnksIHRyYW5zLnVzZXIgKQorICAgICAgICBpZiBjaGVja19hY2Nl c3NpYmxlOgorICAgICAgICAgICAgc2VsZi5oaXN0b3J5X21hbmFnZXIuZXJyb3JfdW5sZXNzX2Fj Y2Vzc2libGUoIHRyYW5zLCBjb2xsZWN0aW89Cm5faW5zdGFuY2UuaGlzdG9yeSwgdHJhbnMudXNl ciApCiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uX2luc3RhbmNlCj0yMAogICAgIGRlZiBfX2dl dF9saWJyYXJ5X2NvbGxlY3Rpb25faW5zdGFuY2UoIHNlbGYsIHRyYW5zLCBpZCwgY2hlY2tfb3du ZXJzaGk9CnA9M0RGYWxzZSwgY2hlY2tfYWNjZXNzaWJsZT0zRFRydWUgKToKCmRpZmYgLXIgZDcw MjFlZTk2YTgwMDg1ZDc2MDViMTY4YzczZGZkOTI5YWQ4NTFkMyAtciAwZmIzYjdkYzMwZDZmODM3 ZTBiODE2Mj0KNzcxMjAxNjkzNTM4MWFhYzcgbGliL2dhbGF4eS9tYW5hZ2Vycy9jb2xsZWN0aW9u c191dGlsLnB5Ci0tLSBhL2xpYi9nYWxheHkvbWFuYWdlcnMvY29sbGVjdGlvbnNfdXRpbC5weQor KysgYi9saWIvZ2FsYXh5L21hbmFnZXJzL2NvbGxlY3Rpb25zX3V0aWwucHkKQEAgLTI4LDcgKzI4 LDYgQEAKICAgICAgICAgZWxlbWVudF9pZGVudGlmaWVycz0zRHBheWxvYWQuZ2V0KCAiZWxlbWVu dF9pZGVudGlmaWVycyIgKSwKICAgICAgICAgbmFtZT0zRHBheWxvYWQuZ2V0KCAibmFtZSIsIE5v bmUgKSwKICAgICApCi0KICAgICByZXR1cm4gcGFyYW1zCj0yMAo9MjAKQEAgLTY1LDkgKzY0LDkg QEAKICAgICAgICAgICAgIHZhbGlkYXRlX2lucHV0X2VsZW1lbnRfaWRlbnRpZmllcnMoIGVsZW1l bnRfaWRlbnRpZmllclsgImVsZW1lPQpudF9pZGVudGlmaWVycyIgXSApCj0yMAo9MjAKLWRlZiBk aWN0aWZ5X2RhdGFzZXRfY29sbGVjdGlvbl9pbnN0YW5jZSggZGF0YXNldF9jb2xsZWNpdG9uX2lu c3RhbmNlLCBwYXJlPQpudCwgc2VjdXJpdHksIHZpZXc9M0QiZWxlbWVudCIgKToKLSAgICBkaWN0 X3ZhbHVlID0zRCBkYXRhc2V0X2NvbGxlY2l0b25faW5zdGFuY2UudG9fZGljdCggdmlldz0zRHZp ZXcgKQotICAgIGVuY29kZWRfaWQgPTNEIHNlY3VyaXR5LmVuY29kZV9pZCggZGF0YXNldF9jb2xs ZWNpdG9uX2luc3RhbmNlLmlkICkKK2RlZiBkaWN0aWZ5X2RhdGFzZXRfY29sbGVjdGlvbl9pbnN0 YW5jZSggZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLCBwYXJlPQpudCwgc2VjdXJpdHksIHZp ZXc9M0QiZWxlbWVudCIgKToKKyAgICBkaWN0X3ZhbHVlID0zRCBkYXRhc2V0X2NvbGxlY3Rpb25f aW5zdGFuY2UudG9fZGljdCggdmlldz0zRHZpZXcgKQorICAgIGVuY29kZWRfaWQgPTNEIHNlY3Vy aXR5LmVuY29kZV9pZCggZGF0YXNldF9jb2xsZWN0aW9uX2luc3RhbmNlLmlkICkKICAgICBpZiBp c2luc3RhbmNlKCBwYXJlbnQsIG1vZGVsLkhpc3RvcnkgKToKICAgICAgICAgZW5jb2RlZF9oaXN0 b3J5X2lkID0zRCBzZWN1cml0eS5lbmNvZGVfaWQoIHBhcmVudC5pZCApCiAgICAgICAgIGRpY3Rf dmFsdWVbICd1cmwnIF0gPTNEIHdlYi51cmxfZm9yKCAnaGlzdG9yeV9jb250ZW50X3R5cGVkJywg aGlzdD0Kb3J5X2lkPTNEZW5jb2RlZF9oaXN0b3J5X2lkLCBpZD0zRGVuY29kZWRfaWQsIHR5cGU9 M0QiZGF0YXNldF9jb2xsZWN0aW9uIiApCgpkaWZmIC1yIGQ3MDIxZWU5NmE4MDA4NWQ3NjA1YjE2 OGM3M2RmZDkyOWFkODUxZDMgLXIgMGZiM2I3ZGMzMGQ2ZjgzN2UwYjgxNjI9Cjc3MTIwMTY5MzUz ODFhYWM3IGxpYi9nYWxheHkvbWFuYWdlcnMvZGF0YXNldHMucHkKLS0tIC9kZXYvbnVsbAorKysg Yi9saWIvZ2FsYXh5L21hbmFnZXJzL2RhdGFzZXRzLnB5CkBAIC0wLDAgKzEsMjg1IEBACisiIiIK K01hbmFnZXIgYW5kIFNlcmlhbGl6ZXIgZm9yIERhdGFzZXRzLgorIiIiCitmcm9tIGdhbGF4eSBp bXBvcnQgbW9kZWwKK2Zyb20gZ2FsYXh5IGltcG9ydCBleGNlcHRpb25zCisKK2Zyb20gZ2FsYXh5 Lm1hbmFnZXJzIGltcG9ydCBiYXNlCitmcm9tIGdhbGF4eS5tYW5hZ2VycyBpbXBvcnQgdXNlcnMK KworaW1wb3J0IGxvZ2dpbmcKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkK KworCisjID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9Cj0zRD0zRD0zRAorY2xhc3MgRGF0YXNldE1hbmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2Vy LCBiYXNlLkFjY2Vzc2libGVNb2RlbEludGVyZmFjZSwgYmE9CnNlLlB1cmdhYmxlTW9kZWxJbnRl cmZhY2UgKToKKyAgICAiIiIKKyAgICBNYW5pcHVsYXRlIGRhdGFzZXRzOiB0aGUgY29tcG9uZW50 cyBjb250YWluZWQgaW4gRGF0YXNldEFzc29jaWF0aW9ucy9EPQphdGFzZXRJbnN0YW5jZXMvSERB cy9MRERBcworICAgICIiIgorCisgICAgbW9kZWxfY2xhc3MgPTNEIG1vZGVsLkRhdGFzZXQKKyAg ICBmb3JlaWduX2tleV9uYW1lID0zRCAnZGF0YXNldCcKKworICAgICNUT0RPOj8/IGdldCArIGVy cm9yX2lmX3VwbG9hZGluZyBpcyBjb21tb24gcGF0dGVybiwgc2hvdWxkIHVwbG9hZCBjaGU9CmNr IGJlIHdvcmtlZCBpbnRvIGFjY2Vzcy9vd2VkPworCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBh cHAgKToKKyAgICAgICAgc3VwZXIoIERhdGFzZXRNYW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFw cCApCisgICAgICAgICMgbmVlZCBmb3IgYWRtaW4gdGVzdAorICAgICAgICBzZWxmLnVzZXJfbWFu YWdlciA9M0QgdXNlcnMuVXNlck1hbmFnZXIoIGFwcCApCisKKyAgICAjIC4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQou Li4uLiBjcmVhdGUKKyAgICBkZWYgY3JlYXRlKCBzZWxmLCB0cmFucywgZmx1c2g9M0RUcnVlLCAq Kmt3YXJncyApOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcg RGF0YXNldCBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICAjIGRlZmF1bHQgdG8gTkVXIHN0 YXRlIG9uIG5ldyBkYXRhc2V0cworICAgICAgICBrd2FyZ3MudXBkYXRlKCBkaWN0KCBzdGF0ZT0z RCgga3dhcmdzLmdldCggJ3N0YXRlJywgbW9kZWwuRGF0YXNldC49CnN0YXRlcy5ORVcgKSApICkg KQorICAgICAgICBkYXRhc2V0ID0zRCBtb2RlbC5EYXRhc2V0KCAqKmt3YXJncyApCisKKyAgICAg ICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5hZGQoIGRhdGFzZXQgKQorICAgICAgICBpZiBmbHVz aDoKKyAgICAgICAgICAgIHNlbGYuYXBwLm1vZGVsLmNvbnRleHQuZmx1c2goKQorICAgICAgICBy ZXR1cm4gZGF0YXNldAorCisgICAgI2RlZiBjb3B5KCBzZWxmLCBkYXRhc2V0LCAqKmt3YXJncyAp OgorICAgICMgICAgIiIiCisgICAgIyAgICBDbG9uZSwgdXBkYXRlLCBhbmQgcmV0dXJuIHRoZSBn aXZlbiBkYXRhc2V0LgorICAgICMgICAgIiIiCisgICAgIyAgICBwYXNzCisKKyAgICAjIC4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uPQouLi4uLiBhZGQgdG8gZGF0YXNldCBhc3NvY2lhdGlvbgorICAgICNkZWYgdG9faGRh KCBzZWxmLCB0cmFucywgZGF0YXNldCwgaGlzdG9yeSwgKiprd2FyZ3MgKToKKyAgICAjICAgICIi IgorICAgICMgICAgQ3JlYXRlIGFuIGhkYSBmcm9tIHRoaXMgZGF0YXNldC4KKyAgICAjICAgICIi IgorICAgICMgICAgcGFzcworCisgICAgI2RlZiB0b19sZGRhKCBzZWxmLCB0cmFucywgZGF0YXNl dCwgbGlicmFyeV9mb2xkZXIsICoqa3dhcmdzICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgIENy ZWF0ZSBhbiBsZGRhIGZyb20gdGhpcyBkYXRhc2V0LgorICAgICMgICAgIiIiCisgICAgIyAgICBw YXNzCisKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4uLiBkZWxldGUKKyAgICAjVE9ETzogdGhpcyBt YXkgYmUgbW9yZSBjb252LiBzb21ld2hlcmUgZWxzZQorI1RPRE86IGhvdyB0byBhbGxvdyBhZG1p biBieXBhc3M/CisgICAgZGVmIGVycm9yX3VubGVzc19kYXRhc2V0X3B1cmdlX2FsbG93ZWQoIHNl bGYsIHRyYW5zLCBpdGVtLCBtc2c9M0ROb25lID0KKToKKyAgICAgICAgaWYgbm90IHNlbGYuYXBw LmNvbmZpZy5hbGxvd191c2VyX2RhdGFzZXRfcHVyZ2U6CisgICAgICAgICAgICBtc2cgPTNEIG1z ZyBvciAnVGhpcyBpbnN0YW5jZSBkb2VzIG5vdCBhbGxvdyB1c2VyIGRhdGFzZXQgcHVyZz0KaW5n JworICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5Db25maWdEb2VzTm90QWxsb3dFeGNlcHRp b24oIG1zZyApCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgcHVyZ2UoIHNlbGYsIHRy YW5zLCBkYXRhc2V0LCBmbHVzaD0zRFRydWUgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92 ZSB0aGUgb2JqZWN0X3N0b3JlL2ZpbGUgZm9yIHRoaXMgZGF0YXNldCBmcm9tIHN0b3JhZ2UgYW5k IG1hcmsKKyAgICAgICAgYXMgcHVyZ2VkLgorCisgICAgICAgIDpyYWlzZXMgZXhjZXB0aW9ucy5D b25maWdEb2VzTm90QWxsb3dFeGNlcHRpb246IGlmIHRoZSBpbnN0YW5jZSBkbz0KZXNuJ3QgYWxs b3cKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXJyb3JfdW5sZXNzX2RhdGFzZXRfcHVyZ2Vf YWxsb3dlZCggdHJhbnMsIGRhdGFzZXQgKQorCisgICAgICAgICMgdGhlIGZvbGxvd2luZyBhbHNv IG1hcmtzIGRhdGFzZXQgYXMgcHVyZ2VkIGFuZCBkZWxldGVkCisgICAgICAgIGRhdGFzZXQuZnVs bF9kZWxldGUoKQorICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LmFkZCggZGF0YXNldCAp CisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5m bHVzaCgpCisgICAgICAgIHJldHVybiBkYXRhc2V0CisKKyAgICAjIC4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uPQouLi4u LiBhY2Nlc3NpYmlsaXR5CisgICAgIyBkYXRhc2V0cyBjYW4gaW1wbGVtZW50IHRoZSBhY2Nlc3Np YmxlIGludGVyZmFjZSwgYnV0IGFjY2Vzc2liaWxpdHkgaT0KcyBjaGVja2VkIGluIGFuIGVudGly ZWx5IGRpZmZlcmVudCB3YXkKKyAgICAjICAgdGhhbiB0aG9zZSByZXNvdXJjZXMgdGhhdCBoYXZl IGEgdXNlciBhdHRyaWJ1dGUgKGhpc3RvcmllcywgcGFnZXMsPQogZXRjLikKKyAgICBkZWYgaXNf YWNjZXNzaWJsZSggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKKyAgICAgICAgIiIiCisg ICAgICAgIElzIHRoaXMgZGF0YXNldCByZWFkYWJsZS92aWV3YWJsZSB0byB1c2VyPworICAgICAg ICAiIiIKKyAgICAgICAgaWYgc2VsZi51c2VyX21hbmFnZXIuaXNfYWRtaW4oIHRyYW5zLCB1c2Vy ICk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLmhhc19hY2Nlc3Nf cGVybWlzc2lvbiggdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKKyAgICAgICAgICAgIHJldHVybiBU cnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhhc19hY2Nlc3NfcGVybWlzc2lv biggc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHVzZXIgKToKKyAgICAgICAgIiIiCisgICAgICAgIFJl dHVybiBUL0YgaWYgdGhlIHVzZXIgaGFzIHJvbGUtYmFzZWQgYWNjZXNzIHRvIHRoZSBkYXRhc2V0 LgorICAgICAgICAiIiIKKyAgICAgICAgcm9sZXMgPTNEIHVzZXIuYWxsX3JvbGVzKCkgaWYgdXNl ciBlbHNlIFtdCisgICAgICAgIHJldHVybiBzZWxmLmFwcC5zZWN1cml0eV9hZ2VudC5jYW5fYWNj ZXNzX2RhdGFzZXQoIHJvbGVzLCBkYXRhc2V0ICkKKworI1RPRE86IHRoZXNlIG5lZWQgd29yawor ICAgIGRlZiBfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyPTNE Tm9uZSwgcm9sZT0zRE5vbmU9CiApOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIG1vc3Qg cmVjZW50IERhdGFzZXRQZXJtaXNzaW9ucyBmb3IgdGhlIGRhdGFzZXQgYW5kIHVzZXIuCisgICAg ICAgICIiIgorICAgICAgICBzZWN1cml0eV9hZ2VudCA9M0Qgc2VsZi5hcHAuc2VjdXJpdHlfYWdl bnQKKyAgICAgICAgYWNjZXNzX2FjdGlvbiA9M0Qgc2VjdXJpdHlfYWdlbnQucGVybWl0dGVkX2Fj dGlvbnMuREFUQVNFVF9BQ0NFU1MuPQphY3Rpb24KKworICAgICAgICAjIGdldCBhIGxpc3Qgb2Yg cm9sZSBpZHMgdG8gY2hlY2sgYWNjZXNzIGZvciAoZGVmYXVsdGluZyB0byBhbGxfcm89CmxlcykK KyAgICAgICAgdXNlcl9yb2xlcyA9M0QgWyByb2xlIF0gaWYgcm9sZSBlbHNlIHVzZXIuYWxsX3Jv bGVzKCkKKyAgICAgICAgdXNlcl9yb2xlX2lkcyA9M0QgWyByb2xlLmlkIGZvciByb2xlIGluIHVz ZXJfcm9sZXMgXQorICAgICAgICBxdWVyeSA9M0QgKCBzZWxmLmFwcC5tb2RlbC5jb250ZXh0LnF1 ZXJ5KCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnM9CiApCisgICAgICAgICAgICAgICAgICAgIC5m aWx0ZXIoIG1vZGVsLkRhdGFzZXRQZXJtaXNzaW9ucy5hY3Rpb24gPTNEPTNEIGFjY2Vzcz0KX2Fj dGlvbiApCisgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIG1vZGVsLkRhdGFzZXRQZXJtaXNz aW9ucy5kYXRhc2V0ID0zRD0zRCBkYXRhcz0KZXQgKQorICAgICAgICAgICAgICAgICAgICAuZmls dGVyKCBtb2RlbC5EYXRhc2V0UGVybWlzc2lvbnMucm9sZV9pZC5pbl8oIHVzZXJfcm89CmxlX2lk cyApICkgKQorICAgICAgICAjVE9ETzo/PyBtb3N0IHJlY2VudD8KKyAgICAgICAgcmV0dXJuIHF1 ZXJ5LmZpcnN0KCkKKworICAgIGRlZiBfY3JlYXRlX2FjY2Vzc19wZXJtaXNzaW9uKCBzZWxmLCB0 cmFucywgZGF0YXNldCwgcm9sZSwgZmx1c2g9M0RUcnU9CmUgKToKKyAgICAgICAgIiIiCisgICAg ICAgIENyZWF0ZSBhIG5ldyBEYXRhc2V0UGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiBkYXRhc2V0 IGFuZCByb2xlLgorICAgICAgICAiIiIKKyAgICAgICAgYWNjZXNzX2FjdGlvbiA9M0Qgc2VsZi5h cHAuc2VjdXJpdHlfYWdlbnQucGVybWl0dGVkX2FjdGlvbnMuREFUQVNFPQpUX0FDQ0VTUy5hY3Rp b24KKyAgICAgICAgcGVybWlzc2lvbiA9M0QgbW9kZWwuRGF0YXNldFBlcm1pc3Npb25zKCBhY2Nl c3NfYWN0aW9uLCBkYXRhc2V0LCByPQpvbGUgKQorICAgICAgICBzZWxmLmFwcC5tb2RlbC5jb250 ZXh0LmFkZCggcGVybWlzc2lvbiApCisgICAgICAgIGlmIGZsdXNoOgorICAgICAgICAgICAgc2Vs Zi5hcHAubW9kZWwuY29udGV4dC5mbHVzaCgpCisgICAgICAgIHJldHVybiBwZXJtaXNzaW9uCisK KyAgICAjZGVmIGdpdmVfYWNjZXNzX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1 c2VyLCBmbHVzaD0zRFRydWUgPQopOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAj ICAgICMgZm9yIG5vdywgdXNlIHRoZSB1c2VyJ3MgcHJpdmF0ZSByb2xlCisgICAgIyAgICBzZWN1 cml0eV9hZ2VudCA9M0Qgc2VsZi5hcHAuc2VjdXJpdHlfYWdlbnQKKyAgICAjICAgIHVzZXJfcm9s ZSA9M0Qgc2VjdXJpdHlfYWdlbnQuZ2V0X3ByaXZhdGVfdXNlcl9yb2xlKCB1c2VyICkKKyAgICAj CisgICAgIyAgICBleGlzdGluZ19wZXJtaXNzaW9uID0zRCBzZWxmLl9hY2Nlc3NfcGVybWlzc2lv biggdHJhbnMsIGRhdGFzZXQsID0Kcm9sZT0zRHVzZXJfcm9sZSApCisgICAgIyAgICBwcmludCAn ZXhpc3RpbmcgYWNjZXNzX3Blcm06JywgZXhpc3RpbmdfcGVybWlzc2lvbgorICAgICMgICAgaWYg ZXhpc3RpbmdfcGVybWlzc2lvbjoKKyAgICAjICAgICAgICByZXR1cm4gZGF0YXNldAorICAgICMK KyAgICAjICAgIHBlcm1pc3Npb24gPTNEIHNlbGYuX2NyZWF0ZV9hY2Nlc3NfcGVybWlzc2lvbigg dHJhbnMsIGRhdGFzZXQsIHVzPQplcl9yb2xlICkKKyAgICAjICAgIHByaW50ICdhY2Nlc3Nfcm9s ZXM6JywgWyByb2xlLm5hbWUgZm9yIHJvbGUgaW4gZGF0YXNldC5nZXRfYWNjZXNzPQpfcm9sZXMo IHRyYW5zICkgXQorICAgICMKKyAgICAjICAgICNhY2Nlc3NfYWN0aW9uID0zRCBzZWN1cml0eV9h Z2VudC5wZXJtaXR0ZWRfYWN0aW9ucy5EQVRBU0VUX0FDQ0VTPQpTLmFjdGlvbgorICAgICMgICAg I2FjY2Vzc19hY3Rpb24gPTNEIHNlY3VyaXR5X2FnZW50LmdldF9hY3Rpb24oIGFjY2Vzc19hY3Rp b24gKQorICAgICMgICAgI3Blcm1pc3Npb25zID0zRCB7IGFjY2Vzc19hY3Rpb24gOiBbIHVzZXJf cm9sZSBdIH0KKyAgICAjICAgICNzZWN1cml0eV9hZ2VudC5zZXRfZGF0YXNldF9wZXJtaXNzaW9u KCBkYXRhc2V0LCBwZXJtaXNzaW9ucyApCisgICAgIworICAgICMgICAgI3NlbGYuYXBwLm1vZGVs LmNvbnRleHQuYWRkKCBkYXRhc2V0ICkKKyAgICAjICAgICNpZiBmbHVzaDoKKyAgICAjICAgICMg ICAgc2VsZi5hcHAubW9kZWwuY29udGV4dC5mbHVzaCgpCisgICAgIworICAgICMgICAgZGJsX2No ayA9M0Qgc2VsZi5fYWNjZXNzX3Blcm1pc3Npb24oIHRyYW5zLCBkYXRhc2V0LCByb2xlPTNEdXNl cl89CnJvbGUgKQorICAgICMgICAgcHJpbnQgJ2FjY2Vzc19wZXJtOicsIGRibF9jaGsKKyAgICAj CisgICAgIyAgICByZXR1cm4gZGF0YXNldAorCisgICAgI2RlZiByZW1vdmVfYWNjZXNzX3Blcm1p c3Npb24oIHNlbGYsIHRyYW5zLCBkYXRhc2V0LCB1c2VyICk6CisgICAgIyAgICAiIiIKKyAgICAj ICAgICIiIgorICAgICMgICAgcGFzcworCisgICAgIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLj0KLi4uLi4gbWFuYWdl L21vZGlmeQorICAgICNkZWYgaGFzX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0 YXNldCwgdXNlciApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAgIHBhc3MK KyAgICAjCisgICAgI2RlZiBnaXZlX21hbmFnZV9wZXJtaXNzaW9uKCBzZWxmLCB0cmFucywgZGF0 YXNldCwgdXNlciApOgorICAgICMgICAgIiIiCisgICAgIyAgICAiIiIKKyAgICAjICAgIHBhc3MK KyAgICAjCisgICAgI2RlZiByZW1vdmVfbWFuYWdlX3Blcm1pc3Npb24oIHNlbGYsIHRyYW5zLCBk YXRhc2V0LCB1c2VyICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgICIiIgorICAgICMgICAgcGFz cworCisgICAgI1RPRE86IGltcGxlbWVudCBhYm92ZSBmb3IgZ3JvdXBzCisgICAgI1RPRE86IGRh dGF0eXBlcz8KKworICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi49Ci4uLi4uIGRhdGEsIG9iamVjdF9zdG9yZQor CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLQorY2xhc3MgRGF0YXNldFNlcmlhbGl6ZXIoIGJh c2UuTW9kZWxTZXJpYWxpemVyLCBiYXNlLlB1cmdhYmxlTW9kZWxTZXJpYWxpemU9CnIgKToKKwor ICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVyKCBEYXRhc2V0U2Vy aWFsaXplciwgc2VsZiApLl9faW5pdF9fKCBhcHAgKQorCisgICAgICAgICMgbW9zdCBvZiB0aGVz ZSB2aWV3cyBidWlsZC9hZGQgdG8gdGhlIHByZXZpb3VzIHZpZXcKKyAgICAgICAgc3VtbWFyeV92 aWV3ID0zRCBbCisgICAgICAgICAgICAnaWQnLAorICAgICAgICAgICAgJ2NyZWF0ZV90aW1lJywg J3VwZGF0ZV90aW1lJywKKyAgICAgICAgICAgICdzdGF0ZScsCisgICAgICAgICAgICAnZGVsZXRl ZCcsICdwdXJnZWQnLCAncHVyZ2FibGUnLAorICAgICAgICAgICAgIydvYmplY3Rfc3RvcmVfaWQn LAorICAgICAgICAgICAgIydleHRlcm5hbF9maWxlbmFtZScsCisgICAgICAgICAgICAjJ2V4dHJh X2ZpbGVzX3BhdGgnLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZScsICd0b3RhbF9zaXplJywKKyAg ICAgICAgICAgICd1dWlkJywKKyAgICAgICAgXQorICAgICAgICAjIGNvdWxkIGRvIHZpc3VhbGl6 YXRpb25zIGFuZC9vciBkaXNwbGF5X2FwcHMKKworICAgICAgICBzZWxmLnNlcmlhbGl6YWJsZV9r ZXlzID0zRCBzdW1tYXJ5X3ZpZXcgKyBbCisgICAgICAgIF0KKyAgICAgICAgc2VsZi52aWV3cyA9 M0QgeworICAgICAgICAgICAgJ3N1bW1hcnknICAgOiBzdW1tYXJ5X3ZpZXcsCisgICAgICAgIH0K KyAgICAgICAgc2VsZi5kZWZhdWx0X3ZpZXcgPTNEICdzdW1tYXJ5JworCisgICAgZGVmIGFkZF9z ZXJpYWxpemVycyggc2VsZiApOgorICAgICAgICBiYXNlLlB1cmdhYmxlTW9kZWxTZXJpYWxpemVy LmFkZF9zZXJpYWxpemVycyggc2VsZiApCisgICAgICAgIHNlbGYuc2VyaWFsaXplcnMudXBkYXRl KHsKKyAgICAgICAgICAgICdpZCcgICAgICAgICAgICA6IHNlbGYuc2VyaWFsaXplX2lkLAorICAg ICAgICAgICAgJ2NyZWF0ZV90aW1lJyAgIDogc2VsZi5zZXJpYWxpemVfZGF0ZSwKKyAgICAgICAg ICAgICd1cGRhdGVfdGltZScgICA6IHNlbGYuc2VyaWFsaXplX2RhdGUsCisgICAgICAgICAgICAn dXVpZCcgICAgICAgICAgOiBsYW1iZGEgdCwgaSwgazogc3RyKCBpLnV1aWQgKSBpZiBpLnV1aWQg ZWxzZT0KIE5vbmUsCisgICAgICAgIH0pCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09Ci0tLS0tCitj bGFzcyBEYXRhc2V0RGVzZXJpYWxpemVyKCBiYXNlLk1vZGVsRGVzZXJpYWxpemVyLCBiYXNlLlB1 cmdhYmxlTW9kZWxEZXNlcj0KaWFsaXplciApOgorICAgIG1vZGVsX21hbmFnZXJfY2xhc3MgPTNE IERhdGFzZXRNYW5hZ2VyCisKKyAgICBkZWYgYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKToKKyAg ICAgICAgc3VwZXIoIERhdGFzZXREZXNlcmlhbGl6ZXIsIHNlbGYgKS5hZGRfZGVzZXJpYWxpemVy cygpCisgICAgICAgIGJhc2UuUHVyZ2FibGVNb2RlbERlc2VyaWFsaXplci5hZGRfZGVzZXJpYWxp emVycyggc2VsZiApCisKKworIyA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9 M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRD0zRD0zRD0zRD0zRD0z RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0K PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE PTNEPTNEPTNEPTNEPTNEPTNEPQo9M0Q9M0Q9M0QKK2NsYXNzIERhdGFzZXRBc3NvY2lhdGlvbk1h bmFnZXIoIGJhc2UuTW9kZWxNYW5hZ2VyLCBiYXNlLkFjY2Vzc2libGVNb2RlbEluPQp0ZXJmYWNl LCBiYXNlLlB1cmdhYmxlTW9kZWxJbnRlcmZhY2UgKToKKyAgICAiIiIKKyAgICAiIiIKKyAgICAj IERBJ3Mgd2VyZSBtZWFudCB0byBiZSBwcm94aWVzIC0gYnV0IHdlcmUgbmV2ZXIgZnVsbHkgaW1w bGVtZW50ZWQgYXMgPQp0aGVtCisgICAgIyBJbnN0ZWFkLCBhIGRhdGFzZXQgYXNzb2NpYXRpb24g SEFTIGEgZGF0YXNldCBidXQgY29udGFpbnMgbWV0YWRhdGEgcz0KcGVjaWZpYyB0byBhIGxpYnJh cnkgKGxkYSkgb3IgdXNlciAoaGRhKQorICAgIG1vZGVsX2NsYXNzID0zRCBtb2RlbC5EYXRhc2V0 SW5zdGFuY2UKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgYXBwICk6CisgICAgICAgIHN1cGVy KCBEYXRhc2V0QXNzb2NpYXRpb25NYW5hZ2VyLCBzZWxmICkuX19pbml0X18oIGFwcCApCisgICAg ICAgIHNlbGYuZGF0YXNldF9tYW5hZ2VyID0zRCBEYXRhc2V0TWFuYWdlciggYXBwICkKKworICAg IGRlZiBpc19hY2Nlc3NpYmxlKCBzZWxmLCB0cmFucywgZGF0YXNldF9hc3NvYywgdXNlciApOgor ICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhpcyBEQSBhY2Nlc3NpYmxlIHRvIGB1c2VyYD8KKyAg ICAgICAgIiIiCisgICAgICAgICMgZGVmZXIgdG8gdGhlIGRhdGFzZXQKKyAgICAgICAgcmV0dXJu IHNlbGYuZGF0YXNldF9tYW5hZ2VyLmlzX2FjY2Vzc2libGUoIHRyYW5zLCBkYXRhc2V0X2Fzc29j LmRhPQp0YXNldCwgdXNlciApCisKKyAgICAjZGVmIG1ldGFkYXRhKCBzZWxmLCB0cmFucywgZGF0 YXNldF9hc3NvYyApOgorICAgICMgICAgIiIiCisgICAgIyAgICBSZXR1cm4gdGhlIG1ldGFkYXRh IGNvbGxlY3Rpb24uCisgICAgIyAgICAiIiIKKyAgICAjICAgICMgZ2V0IG1ldGFkYXRhCisgICAg IyAgICBwYXNzCisKKyAgICAjZGVmIGlzX2JlaW5nX3VzZWQoIHNlbGYsIHRyYW5zLCBkYXRhc2V0 X2Fzc29jICk6CisgICAgIyAgICAiIiIKKyAgICAjICAgICIiIgorICAgICMgICAgI1RPRE86IGNo ZWNrIGhpc3RvcnlfYXNzb2NpYXRpb25zLCBsaWJyYXJ5X2Fzc29jaWF0aW9ucworICAgICMgICAg cGFzcworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPQotLS0tLQorY2xhc3MgRGF0YXNldEFzc29jaWF0 aW9uU2VyaWFsaXplciggYmFzZS5Nb2RlbFNlcmlhbGl6ZXIsIGJhc2UuUHVyZ2FibGVNb2Q9CmVs U2VyaWFsaXplciApOgorCisgICAgZGVmIGFkZF9zZXJpYWxpemVycyggc2VsZiApOgorICAgICAg ICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uU2VyaWFsaXplciwgc2VsZiApLmFkZF9zZXJpYWxp emVycygpCisgICAgICAgIGJhc2UuUHVyZ2FibGVNb2RlbFNlcmlhbGl6ZXIuYWRkX3NlcmlhbGl6 ZXJzKCBzZWxmICkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT0KLS0tLS0KK2NsYXNzIERhdGFzZXRB c3NvY2lhdGlvbkRlc2VyaWFsaXplciggYmFzZS5Nb2RlbERlc2VyaWFsaXplciwgYmFzZS5QdXJn YWJsPQplTW9kZWxEZXNlcmlhbGl6ZXIgKToKKworICAgIGRlZiBhZGRfZGVzZXJpYWxpemVycygg c2VsZiApOgorICAgICAgICBzdXBlciggRGF0YXNldEFzc29jaWF0aW9uRGVzZXJpYWxpemVyLCBz ZWxmICkuYWRkX2Rlc2VyaWFsaXplcnMoKQorICAgICAgICBiYXNlLlB1cmdhYmxlTW9kZWxEZXNl cmlhbGl6ZXIuYWRkX2Rlc2VyaWFsaXplcnMoIHNlbGYgKQoKVGhpcyBkaWZmIGlzIHNvIGJpZyB0 aGF0IHdlIG5lZWRlZCB0byB0cnVuY2F0ZSB0aGUgcmVtYWluZGVyLgoKUmVwb3NpdG9yeSBVUkw6 IGh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvCgotLQoKVGhpcyBp cyBhIGNvbW1pdCBub3RpZmljYXRpb24gZnJvbSBiaXRidWNrZXQub3JnLiBZb3UgYXJlIHJlY2Vp dmluZwp0aGlzIGJlY2F1c2UgeW91IGhhdmUgdGhlIHNlcnZpY2UgZW5hYmxlZCwgYWRkcmVzc2lu ZyB0aGUgcmVjaXBpZW50IG9mCnRoaXMgZW1haWwuCg=