-----BEGIN PGP MESSAGE----- Comment: https://keybase.io/download Version: Keybase Go 2.1.2 (darwin) xA0DAAoBQGBlx9X5dngBy+F0AOIAAAAA7S0tLQpsYXlvdXQ6IHBvc3QKdGl0bGU6 ICAiQW4gSW50cm9kdWN0aW9uIHRvIFNjdXR0bGVidXR0IERldmVsb3BtZW50OiBG bHVtZSAmIFBsdWdpbnMiCmRhdGU6ICAgMjAxOC0wNy0wOCAxMTowMDowMCAtMDQw MAp0YWdzOiBzY3V0dGxlYnV0dCBzb2Z0d2FyZQotLS0KVGhpcyB3aWxsIGFzc3Vt ZSB5b3UgaGF2ZSByZWFkIGFuZCBmb2xsb3dlZCB0aGUgcHJldmlvdXMgcG9zdDog W1lvdXIgVGVzdCBQbGF5Z3JvdW5kXSgvMjAxOC8wNy8wOC9zY3V0dGxlYnV0dC1p bnRyby10ZXN0LXBsYXlncm91bmQuaHRtbCkuIElmIHlvdSBoYXZlIG5vdCB5b3Ug c2hvdWxkIGNoZWNrIHRoYXQgb3V0IGJlZm9yZSBjb250aW51aW5nLgoKIyMgc2Jv dCBQbHVnaW5zCgpOb3cgd2UnbGwgdGFrZSBhIGxvb2sgYXQgb25lIG9mIHRoZXNl IHBsdWdpbnMgZm9yIGBzYm90YC4gV2UnbGwgdXNlIGEgZmFpcmx5IHNpbXBsZSBv bmUsIFtzc2ItYWJvdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9zc2JjL3NzYi1hYm91 dCksIHRvIGRlbW9uc3RyYXRlIHNvbWUgdGhpbmdzIHlvdSBjYW4gZG8gaW4gcGx1 Z2lucy4gUGx1Z2lucyBjYW4gYWRkIGRpZmZlcmVudCB0eXBlcyBvZiBmdW5jdGlv bmFsaXR5IHRvIHNib3Q7IHdoYXQgc3NiLWFib3V0IGFkZHMsIGFuZCB3aGF0IHdl IHdpbGwgZm9jdXMgb24gaGVyZSwgaXMgYSBkYXRhYmFzZSBpbmRleCwgYnV0IHBs dWdpbnMgY2FuIGFsc28gYmUgdXNlZCB0byBoYW5kbGUgZnVuY3Rpb25zIHN1Y2gg YXMgcmVwbGljYXRpb24gbG9naWMgYW5kIHByaXZhdGUgbWVzc2FnZXMuCgpZb3Ug d2lsbCBzZWUsIGlmIHlvdSBsb29rIGF0IHRoZSBjb2RlIGZvciBzc2ItYWJvdXQg dGhhdCBpdCBjb25zaXN0cyBvZiBhbGwgb2YgWzUyIGxpbmVzIG9mIGNvZGVdKGh0 dHBzOi8vZ2l0aHViLmNvbS9zc2JjL3NzYi1hYm91dC9ibG9iL2U3ZjliMGIyNDNl YzQ2MmZjMjYyOGMwZWI3YjliZTI5YjA2YzEwZjEvaW5kZXguanMpLiBOZWVkbGVz cyB0byBzYXkgaXRzIG5vdCB0aGUgbW9zdCBjb21wbGV4IHBpZWNlIG9mIGNvZGUs IGJ1dCB5b3Ugd2lsbCBmaW5kIHRoYXQgaXQgaXMgcXVpdGUgdXNlZnVsIQoKIyMg RGF0YWJhc2UgSW5kZXhlcwoKYHNib3RgIHVzZXMgYSBkYXRhYmFzZSBjYWxsZWQg W0ZsdW1lXShodHRwczovL2dpdGh1Yi5jb20vZmx1bWVkYi9mbHVtZWRiKSwgd2hp Y2ggY29uc2lzdHMgb2YgYW4gYXBwZW5kLW9ubHkgbG9nIGFuZCBtb2R1bGFyIHZp ZXdzIG9mIHRoYXQgbG9nLiBUaGUgbG9nIGlzIHdoZXJlIGFsbCB0aGUgZGF0YSBp cyBzdG9yZWQgYW5kIG1lc3NhZ2VzIGFyZSBhcHBlbmRlZC4gVmlld3MgYXJlIGVz c2VudGlhbGx5IGluZGV4ZXMgb2YgdGhlIGxvZyBhbmQgY2FuIGJlIGFueXRoaW5n IGFzIGxvbmcgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIHN0cmljdGx5IGZyb20gdGhl IGRhdGEsIHN1Y2ggdGhhdCB0aGUgc2FtZSBkYXRhIHdpbGwgZ2l2ZSB5b3UgdGhl IHNhbWUgdmlldyBpZiByZWJ1aWxkLgoKVGhlIHR5cGUgb2YgdmlldyB0aGF0IHNz Yi1hYm91dCBhbmQgbWFueSBvdGhlciBzc2IgbW9kdWxlcyB1c2UgaXMgY2FsbGVk IGBmbHVtZXZpZXctcmVkdWNlYCwgd2hpY2ggdXNlcyBhIG1hcC1yZWR1Y2UgZnVu Y3Rpb24gcGFpciB0byBjcmVhdGUgYSB2aWV3LiBUaGUgaWRlYSBpcyBzaW1wbGUg ZW5vdWdoLCB0byBjcmVhdGUgdGhpcyB2aWV3IHlvdSBkZWZpbmUgYSBtYXAgZnVu Y3Rpb24gYW5kIGEgcmVkdWNlIGZ1bmN0aW9uLiBXaGVuIHBhaXJlZCB3aXRoIGEg bG9nIHRoZSB2aWV3IHdpbGwgYmUgY3JlYXRlZCBieSBtYXBwaW5nIG92ZXIgZXZl cnkgbWVzc2FnZSBpbiB0aGUgbG9nIGFuZCB0aGVuIHJlZHVjaW5nIGludG8gYSBz aW5nbGUgb2JqZWN0LCB3aGljaCBpcyByZXR1cm5lZCBhcyB0aGUgdmlldy4gSWYg eW91J3ZlIG5ldmVyIGVuY291bnRlcmVkIHRoZSBtYXAtcmVkdWNlIHByb2dyYW1t aW5nIHBhdHRlcm4gSSByZWNvbW1lbmQgeW91IFtyZWFkIGEgYml0IGFib3V0IGl0 XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXBSZWR1Y2UpLgoKRWFj aCBpbmRpdmlkdWFsIG1lc3NhZ2UgaXMgbm90IGltcG9ydGFudCBoZXJlLCB3aGF0 IGlzIGltcG9ydGFudCBpcyB0aGUgZmluYWwgcmVkdWNlZCBzdGF0ZSwgdGhlIHZp ZXcuIEFmdGVyIHJlZHVjaW5nIGFsbCB0aGUgZXhpc3RpbmcgbWVzc2FnZXMgaW4g dGhlIGxvZyB0aGUgdmlldyBpcyBzdG9yZWQgc28gdGhhdCBpdCBkb2VzIG5vdCBu ZWVkIHRvIGJlIHJlY29tcHV0ZWQgZWFjaCB0aW1lIGEgbmV3IG1lc3NhZ2UgaXMg YWRkZWQgdG8gdGhlIGxvZy4gSW5zdGVhZCB0aGUgbmV3IG1lc3NhZ2UgaXMganVz dCByZWR1Y2VkIGludG8gdGhlIHN0b3JlZCB2aWV3IHRvIGNyZWF0ZSBhIG5ldyB2 aWV3LCB0aGlzIG1ha2VzIGl0IHZlcnkgZWZmaWNpZW50IGF0IGhhbmRsaW5nIGlu Y29taW5nIGRhdGEuCgojIyBzc2ItYWJvdXQKCmBzc2ItYWJvdXRgIGlzIGFuIGBz Ym90YCBwbHVnaW4gd2hpY2gga2VlcHMgdHJhY2sgb2YgYGFib3V0YCBtZXNzYWdl cy4gYGFib3V0YCBtZXNzYWdlcyBhcmUgdGhlIG1lc3NhZ2VzIHByaW1hcmlseSB1 c2VkIHRvIG5hbWUgdGhpbmdzLiBGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugc3RhcnR1 cCBQYXRjaHdvcmsgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCBpdCBhc2tzIHlvdSB0 byBpbnB1dCBhIG5hbWUgZm9yIHlvdXJzZWxmLiBUaGF0IGlzIHB1Ymxpc2hpbmcg YW4gYGFib3V0YCBtZXNzYWdlIGFib3V0IHlvdXJzZWxmLiBJdCB3b3VsZCBsb29r IHNvbWV0aGluZyBsaWtlIHRoaXM6Cgp7JSBoaWdobGlnaHQganNvbiAlfQp7CiAg ImtleSI6ICIldGNlUjRjYjNKL2FJT2QxdndtOTZPQWxqNHk2MkxxYnRMc1ZQaVMx Q2ZMcz0uc2hhMjU2IiwKICAidmFsdWUiOiB7CiAgICAicHJldmlvdXMiOiAiJVBZ SE9Qc2VhRktURmZrU1hidE1qdVFDN2ZDNUJ2ZVBmbFFhbWgxODEySzA9LnNoYTI1 NiIsCiAgICAic2VxdWVuY2UiOiAxLAogICAgImF1dGhvciI6ICJATUtFZlBwYUdG TUluRDlQMFpJVXlrb2pmd2FYbW82Q3RXT3pCMUVCQzRxZz0uZWQyNTUxOSIsCiAg ICAidGltZXN0YW1wIjogMTUyMTA4MDIzMjQyNywKICAgICJoYXNoIjogInNoYTI1 NiIsCiAgICAiY29udGVudCI6IHsKICAgICAgInR5cGUiOiAiYWJvdXQiLAogICAg ICAiYWJvdXQiOiAiJXNjcWVzNzIzMWx4OEdhazFEVHJYanNGU0x3bmhWcVh4QlNH a2tqNVVDUHM9LnNoYTI1NiIsCiAgICAgICJuYW1lIjogIkV2ZSIKICAgIH0sCiAg ICAic2lnbmF0dXJlIjogIlQ0NCtZelVvQ2ZBVGRsMFhYTks0ancwYnRxa09lUVVI b3BaUjZucSsvMGVCWmx4OHNHUnBDWGE2R3JpZkVtWHRKN2oxaTVJSzNZbXoxQXZz cG5SZEN3PT0uc2lnLmVkMjU1MTkiCiAgfSwKICAidGltZXN0YW1wIjogMTUyMTA4 MDIzMjQyOAp9CnslIGVuZGhpZ2hsaWdodCAlfQoKYHNzYi1hYm91dGAga2VlcHMg YW4gaW5kZXggb2YgdGhlc2UgYGFib3V0YCBtZXNzYWdlcyBzbyB0aGF0IGNsaWVu dHMgY2FuIGVhc2lseSBsb29rdXAgdGhpbmdzIHN1Y2ggYXMgbmlja25hbWVzLCBk ZXNjcmlwdGlvbnMsIGFuZCBkaXNwbGF5IGltYWdlcywgYW1vbmcgb3RoZXIgdGhp bmdzLiBXZSdsbCBnbyB0aHJvdWdoIGBzc2ItYWJvdXRgIHBpZWNlIGJ5IHBpZWNl IHNvIHRoYXQgeW91IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsdW1lIHZpZXdzIHdv cmsuIFRoZSBmaXJzdCB0aGluZyBpbiBzc2ItYWJvdXQgYXJlIHRoZSBkZXBlbmRl bmNpZXM6Cgp7JSBoaWdobGlnaHQgamF2YXNjcmlwdCAlfQp2YXIgRmx1bWVSZWR1 Y2UgPSByZXF1aXJlKCdmbHVtZXZpZXctcmVkdWNlJykKdmFyIHJlZiA9IHJlcXVp cmUoJ3NzYi1yZWYnKQp7JSBlbmRoaWdobGlnaHQgJX0KCmBmbHVtZXZpZXctcmVk dWNlYCwgYXMgbWVudGlvbmVkIGVhcmxpZXIgaXMgdGhlIGxpYnJhcnkgdGhhdCBp cyB1c2VkIGNyZWF0ZSB0aGUgZmx1bWUgdmlld3MgaGVyZS4gYHNzYi1yZWZgIGlz IGEgaGVscGVyIGxpYnJhcnkgd2hpY2ggcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8g Y2hlY2sgd2hldGhlciBzdHJpbmdzIGFyZSB2YWxpZCBzc2IgcmVmZXJlbmNlcyBv ciBub3QuIE5leHQsIHNvbWUgbW9kdWxlIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVk OgoKeyUgaGlnaGxpZ2h0IGphdmFzY3JpcHQgJX0KZXhwb3J0cy5uYW1lID0gJ2Fi b3V0JwpleHBvcnRzLnZlcnNpb24gPSByZXF1aXJlKCcuL3BhY2thZ2UuanNvbicp LnZlcnNpb24KZXhwb3J0cy5tYW5pZmVzdCA9IHsKICBzdHJlYW06ICdzb3VyY2Un LAogIGdldDogJ2FzeW5jJwp9CnslIGVuZGhpZ2hsaWdodCAlfQoKYG5hbWVgIGlz IGp1c3QgdGhlIG5hbWUgeW91IGdpdmUgdGhlIHBsdWdpbiwgaXQgc2hvdWxkIGJl IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG1pbnVzIHRoZSBgc3NiLWAgcHJlZml4 IChJJ3ZlIGhhZCB0cm91YmxlIHdpdGggYHNib3RgIG5vdCBmaW5kaW5nIG15IHBs dWdpbnMgd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZSkuIGB2ZXJzaW9uYCBpcyBq dXN0IHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZS4gYG1hbmlmZXN0 YCBnaXZlcyBpbmZvcm1hdGlvbiBvbiB3aGF0IG1ldGhvZHMgYXJlIGF2YWlsYWJs ZSBmcm9tIHRoZSBhYm91dCB2aWV3IGFuZCB3aGF0IHR5cGVzIG9mIGZ1bmN0aW9u cyB0aGV5IGFyZS4gYHNvdXJjZWAgaXMgYSBsaXZlIHN0cmVhbSBvZiBtZXNzYWdl cywgYGFzeW5jYCBpcyB1bnN1cnByaXNpbmdseSBhbiBhc3luY2hyb25vdXMgZnVu Y3Rpb24gd2l0aCBhIGNhbGxiYWNrLCBhbmQgdGhlcmUgaXMgYWxzbyBhIGBzeW5j YCBvcHRpb24gd2hpY2ggaXMgZm9yIHN5bmNocm9ub3VzIGZ1bmN0aW9ucy4KCkZv bGxvd2luZyB0aGUgbW9kdWxlIGluZm9ybWF0aW9uLCB0aGUgZmx1bWUgdmlldyBp cyBkZWNsYXJlZDoKCnslIGhpZ2hsaWdodCBqYXZhc2NyaXB0ICV9CmV4cG9ydHMu aW5pdCA9IGZ1bmN0aW9uIChzc2IsIGNvbmZpZykgewogIHJldHVybiBzc2IuX2Zs dW1lVXNlKCdhYm91dCcsIEZsdW1lUmVkdWNlKDEsIHJlZHVjZSwgbWFwKSkKfQp7 JSBlbmRoaWdobGlnaHQgJX0KClRoaXMgZnVuY3Rpb24gaXMgdGFraW5nIGluIGFu IGBzYm90YCB3aGljaCwgaGVyZSwgaXMgYHNzYmAgYW5kIHNvbWUgb3B0aW9uYWwg Y29uZmlndXJhdGlvbiB3aGljaCBjdXJyZW50bHkgaXMgbm90IHV0aWxpemVkLiBZ b3VyIGBzYm90YCBhbHJlYWR5IGhhcyBhbiBleGlzdGluZyBsb2cgd2l0aCBtZXNz YWdlcyBpbiBpdCwgc28gYWxsIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBpcyBhZGQg YSB2aWV3IHRvIGl0LCB0aGlzIGlzIHdoYXQgYF9mbHVtZVVzZSgpYCBkb2VzLiBU aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIHZpZXcgYW5kIGhv dyB5b3Ugd291bGQgYWNjZXNzIHRoZSBtb2R1bGUgdGhyb3VnaCBhbiBgc2JvdGAg Y2xpZW50LiBGb3IgZXhhbXBsZSBgc2JvdC5hYm91dC5zdHJlYW0oKWAgd291bGQg cmV0dXJuIHRoZSBzdHJlYW0gb2YgbWVzc2FnZXMgZmxvd2luZyB0aHJvdWdoIHRo aXMgdmlldy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgdmlldyBpdHNlbGYs IHdoaWNoIGhlcmUgaXMgYSBgRmx1bWVSZWR1Y2VgIHZpZXcuCgpGbHVtZVJlZHVj ZSBpdHNlbGYgdGFrZXMgc2V2ZXJhbCBhcmd1bWVudHMsIHRoZSBmaXJzdCBiZWlu ZyB0aGUgdmVyc2lvbiBvZiB0aGUgdmlldy4gVGhlIHZlcnNpb24gY2FuIGJlIGFu eXRoaW5nLCBidXQgYSBudW1iZXIgaXMgcmVjb21tZW5kZWQuIEV2ZXJ5IHRpbWUg dGhlIHZlcnNpb24gY2hhbmdlcyB0aGUgdmlldyB3aWxsIGJlIHJlYnVpbGQgZnJv bSBzY3JhdGNoIHRvIGFjY291bnQgZm9yIGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBi ZWVuIG1hZGUuIEl0cyB1c2VmdWwgdG8ga25vdyB0aGF0IHRoZSB2ZXJzaW9uIG51 bWJlciBkb2VzIG5vdCBhbHdheXMgbmVlZCB0byBpbmNyZW1lbnQsIHNvIHdoZW4g ZGV2ZWxvcGluZyBhbmQgdGVzdGluZyBhIHZpZXcgeW91IGNhbiBmbGlwIGJldHdl ZW4ganVzdCB0d28gdmVyc2lvbnMgYW5kIHN1Y2Nlc2Z1bGx5IHJlYnVpbGQgdGhl IHZpZXcgZWFjaCB0aW1lLgoKVGhlIHNlY29uZCwgYW5kIGxhc3QgcmVxdWlyZWQs IGFyZ3VtZW50IGlzIGEgcmVkdWNlIGZ1bmN0aW9uLiBUaGUgcmVkdWNlIGZ1bmN0 aW9uIHRha2VzIGluIGEgbWVzc2FnZSBhbmQgaW5kZXhlcyBpdCBpbiB0aGUgdmll dy4gVGhlIHRoaXJkLCBhbmQgZmlyc3Qgb3B0aW9uYWwsIGFyZ3VtZW50IGlzIHRo ZSBtYXAgZnVuY3Rpb24uIFRoZSBtYXAgZnVuY3Rpb24gaXMgY2FsbGVkIHByaW9y IHRvIHRoZSByZWR1Y2UgZnVuY3Rpb24gb24gYSBtZXNzYWdlIGFuZCBwZXJmb3Jt cyBhIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBy ZWR1Y2VkLgoKVGhlIG90aGVyIHR3byBvcHRpb25hbCBhcmd1bWVudHMsIHVudXNl ZCBoZXJlLCBhcmUgdGhlIGNvZGVjIGFuZCBhbiBpbml0aWFsIHN0YXRlLiBUaGUg Y29kZWMgY2FuIGJlIHNwZWNpZmllZCBhbmQgdXNlZCBpbiB0aGUgZXZlbnQgeW91 ciBsb2cgdXNlcyB0aGUgZmlsZXN5c3RlbSBhbmQgdGhlIGluaXRpYWwgc3RhdGUg cHJvdmlkZXMgYW4gaW5pdGlhbCByZWR1Y2Ugc3RhdGUgaW4gdGhlIGV2ZW50IHRo YXQgbm8gbWVzc2FnZXMgaGF2ZSBiZWVuIHJlZHVjZWQgeWV0LgoKVGhlIGBfZmx1 bWVVc2VgIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBgc3RyZWFt YCBmdW5jdGlvbiBhbmQgYSBgZ2V0YCBmdW5jdGlvbiBpbiBpdDsgdGhpcyBhbGln bnMgd2l0aCB3aGF0IHdhcyBzcGVjaWZpZWQgaW4gdGhlIGBtYW5pZmVzdGAgYWJv dmUuIFRoZSBgc3RyZWFtYCBmdW5jdGlvbiBnaXZlcyBhIFtwdWxsLXN0cmVhbV0o aHR0cHM6Ly9naXRodWIuY29tL3B1bGwtc3RyZWFtL3B1bGwtc3RyZWFtKSB3aG9z ZSBmaXJzdCB2YWx1ZSBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmlldyBh bmQgZm9sbG93aW5nIHZhbHVlcyBuZXcgbWVzc2FnZXMgY29taW5nIGludG8gdGhl IHZpZXcuIFRoZSBgZ2V0YCBmdW5jdGlvbiBzaW1wbHkgZ2l2ZXMgdGhlIGN1cnJl bnQgc3RhdGUgb2YgdGhlIHZpZXcuCgpGaW5hbGx5LCB3ZSB3aWxsIGxvb2sgYXQg aG93IHRoZSB2aWV3IGlzIGFjdHVhbGx5IGJ1aWx0LiBMZXQncyBza2lwIG92ZXIg dGhlIGByZWR1Y2VgIGZ1bmN0aW9uIGZvciBub3cgYW5kIGp1bXB5IHN0cmFpZ2h0 IHRvIHRoZSBgbWFwYCBmdW5jdGlvbjoKCnslIGhpZ2hsaWdodCBqYXZhc2NyaXB0 ICV9CmZ1bmN0aW9uIG1hcCAobXNnKSB7CiAgaWYgKG1zZy52YWx1ZS5jb250ZW50 ICYmIG1zZy52YWx1ZS5jb250ZW50LnR5cGUgPT09ICdhYm91dCcgJiYgcmVmLmlz TGluayhtc2cudmFsdWUuY29udGVudC5hYm91dCkpIHsKICAgIHZhciBhdXRob3Ig PSBtc2cudmFsdWUuYXV0aG9yCiAgICB2YXIgdGFyZ2V0ID0gbXNnLnZhbHVlLmNv bnRlbnQuYWJvdXQKICAgIHZhciB2YWx1ZXMgPSB7fQoKICAgIGZvciAodmFyIGtl eSBpbiBtc2cudmFsdWUuY29udGVudCkgewogICAgICBpZiAoa2V5ICE9PSAnYWJv dXQnICYmIGtleSAhPT0gJ3R5cGUnKSB7CiAgICAgICAgdmFsdWVzW2tleV0gPSB7 CiAgICAgICAgICBbYXV0aG9yXTogW21zZy52YWx1ZS5jb250ZW50W2tleV0sIG1z Zy52YWx1ZS50aW1lc3RhbXBdCiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAg cmV0dXJuIHsKICAgICAgW3RhcmdldF06IHZhbHVlcwogICAgfQogIH0KfQp7JSBl bmRoaWdobGlnaHQgJX0KClRoZSBvdXRlciBpZiBzdGF0ZW1lbnQgaXMgZmlsdGVy aW5nIG91dCBhbnkgbWVzc2FnZXMgdGhhdCBhcmUgbm90IGBhYm91dGAgbWVzc2Fn ZXMsIHdoaWNoIGlzIHdoYXQgdGhpcyB2aWV3IGlzIGZvci4gQWZ0ZXIgdGhhdCBp dCBwdWxscyBzb21lIGhlbHBmdWwgdmFyaWFibGVzIG91dCBvZiB0aGUgbWVzc2Fn ZSBzdHJ1Y3R1cmU6IG5hbWVseSB0aGUgYXV0aG9yIHJlZmVyZW5jZSBhbmQgdGhl IHJlZmVyZW5jZSB0byB0aGUgdGFyZ2V0IHRoYXQgaXMgYmVpbmcgZGVzY3JpYmVk LiBGb2xsb3dpbmcgdGhpcyB0aGUgdmFsdWVzIGRpY3Rpb25hcnkgaXMgaW5pdGlh bGl6ZWQgYW5kIHBvcHVsYXRlZCBiYXNlZCBvbiB0aGUgbWVzc2FnZS4gQW55IGtl eSB2YWx1ZXMgcGFpcnMgaW4gdGhlIG1lc3NhZ2UgY29udGVudCBvdGhlciB0aGFu IGB0eXBlYCBhbmQgYGFib3V0YCB3aWxsIGJlIHRha2VuIHRvIGJlIGRlc2NyaWJp bmcgdGhlIHRh7HJnZXQuIFRoZSBpbmRleCBrZWVwcyB0cmFjayBhbmQgd2hhdCBp cyBiZWluZyBkZXNjcmliZWQgKGBrZXlgKSwgdGhlIGRlc2NyaXB0aW9uIChgY29u dGVudFtrZXldYCksIHdobyBkZXNjcmliZWQgaXQgKGBhdXRob3JgKSwgYW5kIHdo ZW4gdGhleSBkZXNjcmliZWQgaXQgKGB0aW1lc3RhbXBgKS4KClRoZSBzYW1wbGUg YGFib3V0YCBtZXNzYWdlIGZyb20gYWJvdmUgd291bGQgYmUgbWFwcGVkIHRvOgoK eyUgaGlnaGxpZ2h0IGpzb24gJX0KewogICJATUtFZlBwYUdGTUluRDlQMFpJVXlr b2pmd2FYbW82Q3RXT3pCMUVCQzRxZz0uZWQyNTUxOSI6IHsKICAgICJuYW1lIjog ewogICAgICAiQE1LRWZQcGFHRk1JbkQ5UDBaSVV5a29qZndhWG1vNkN0V096QjFF QkM0cWc9LmVkMjU1MTkiOiBbICJFdmUiLCAxNTIxMDgwMjMyNDI3IF0KICAgIH0K ICB9Cn0KeyUgZW5kaGlnaGxpZ2h0ICV9CgpIZXJlLCB0aGUgdXNlciBgQE1LRWZQ cGFHRk1JbkQ5UDBaSVV5a29qZndhWG1vNkN0V096QjFFQkM0cWc9LmVkMjU1MTlg IGlzIG5hbWluZyB0aGVtc2VsdmVzIGAiRXZlImAgYW5kIHRoaXMgaGFwcGVuZWQg YXQgMTUyMTA4MDIzMjQyNy4KCk5vdyBkaWdnaW5nIGludG8gdGhlIGByZWR1Y2Vg IGZ1bmN0aW9uOgoKeyUgaGlnaGxpZ2h0IGphdmFzY3JpcHQgJX0KZnVuY3Rpb24g cmVkdWNlIChyZXN1bHQsIGl0ZW0pIHsKICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0g e30KICBpZiAoaXRlbSkgewogICAgZm9yICh2YXIgdGFyZ2V0IGluIGl0ZW0pIHsK ICAgICAgdmFyIHZhbHVlc0ZvcklkID0gcmVzdWx0W3RhcmdldF0gPSByZXN1bHRb dGFyZ2V0XSB8fCB7fQogICAgICBmb3IgKHZhciBrZXkgaW4gaXRlbVt0YXJnZXRd KSB7CiAgICAgICAgdmFyIHZhbHVlc0ZvcktleSA9IHZhbHVlc0ZvcklkW2tleV0g PSB2YWx1ZXNGb3JJZFtrZXldIHx8IHt9CiAgICAgICAgZm9yICh2YXIgYXV0aG9y IGluIGl0ZW1bdGFyZ2V0XVtrZXldKSB7CiAgICAgICAgICB2YXIgdmFsdWUgPSBp dGVtW3RhcmdldF1ba2V5XVthdXRob3JdCiAgICAgICAgICBpZiAoIXZhbHVlc0Zv cktleVthdXRob3JdIHx8IHZhbHVlWzFdID4gdmFsdWVzRm9yS2V5W2F1dGhvcl1b MV0pIHsKICAgICAgICAgICAgdmFsdWVzRm9yS2V5W2F1dGhvcl0gPSB2YWx1ZQog ICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4g cmVzdWx0Cn0KeyUgZW5kaGlnaGxpZ2h0ICV9CgpUaGlzIGZ1bmN0aW9uIGlzIGEg bGl0dGxlIGRlbnNlLCBidXQgaWYgeW91IGdvIHRocm91Z2ggaXQgcGllY2UgbXkg cGllY2UgaXQgYmVjb21lcyBjbGVhcmVyLiBgcmVzdWx0YCBpcyB0aGUgY3VycmVu dGx5IHJlZHVjZWQgc3RhdGUgKGlmIHRoZXJlIGlzIG5vbmUgaXQgd2lsbCBiZSBz ZXQgdG8gdGhlIGBpbml0aWFsU3RhdGVgIHBhc3NlZCB0byBgRmx1bWVSZWR1Y2Vg LCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgYHVuZGVmaW5lZGApIGFuZCBgaXRlbWAg aXMgYSBtZXNzYWdlIGZyb20gdGhlIGxvZyB3aGljaCBoYXMgYmVlbiBtYXBwZWQg YnkgdGhlIGBtYXBgIGZ1bmN0aW9uLiBTaW5jZSBubyBgaW5pdGlhbFN0YXRlYCBp cyBzcGVjaWZpZWQsIHRoZXJlIGlzIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYHJl c3VsdGAgaXMgaW5pdGlhbGl6ZWQsIGFzIHdlbGwgYXMgYSBjaGVjayB0byBtYWtl IHN1cmUgYGl0ZW1gIGV4aXN0cy4KClRoZSByZXN0IG9mIHRoZXNlIG5lc3RlZCBg Zm9yYCBsb29wcyBiYXNpY2FsbHkgYW1vdW50IHRvIG1lcmdpbmcgYGl0ZW1gIGlu dG8gYHJlc3VsdGAgd2hpbGUgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBpcyBpbml0 aWFsaXplZC4gVGhlIGlmIHN0YXRlbWVudCBhdCB0aGUgaW5uZXIgYGZvcmAgbG9v cCwgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgaW5jb21pbmcgdmFsdWUgaXMgbmV3 ZXIgdGhhbiB0aGUgZXhpc3RpbmcgdmFsdWUgYmFzZWQgb24gdGhlIHRpbWVzdGFt cHM7IHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGlz IG5ld2VyLCBvdGhlcndpc2UgdGhlIGV4aXN0aW5nIHZhbHVlIHJlbWFpbnMuCgpB bmQgdGhhdCdzIGl0LCB0aGF0J3MgaG93IHRoZSBgc3NiLWFib3V0YCBwbHVnaW4g d29ya3MgdG8gYnVpbGQgdGhlIGBhYm91dGAgbWVzc2FnZSBpbmRleCEKCiMjIEhl bGxvIFdvcmxkCgpOb3csIGl0J3MgdGltZSB0byBtYWtlIHlvdXIgb3duIGxpdHRs ZSBgc2JvdGAgcGx1Z2luLiBXZSdyZSBnb2luZyB0byBtYWtlIGEgc2ltcGxlIGxp dHRsZSB2aWV3IG9mIEhlbGxvIFdvcmxkIG1lc3NhZ2VzLiBJZiB5b3UgaGF2ZSBn b25lIHRocm91Z2ggdGhlIHByZXZpb3VzIHBvc3QgeW91IHdpbGwgYWxyZWFkeSBo YXZlIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBpbiB5b3VyIHRlc3RuZXQgbG9nLCBp ZiBub3QsIHlvdSBjYW4gYWRkIG9uZSBieSBzaW1wbHkgcnVubmluZzoKCnslIGhp Z2hsaWdodCBiYXNoICV9CnNib3QgcHVibGlzaCAtLXR5cGUgcG9zdCAtLXRleHQg IkhlbGxvIFdvcmxkISIKeyUgZW5kaGlnaGxpZ2h0ICV9CgpUaGUgdmlldyB3ZSdy ZSBnb2luZyB0byBtYWtlIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgoK eyUgaGlnaGxpZ2h0IGphdmFzY3JpcHQgJX0KewogIFthdXRob3JdOiBbewogICAg bWVzc2FnZTogW21lc3NhZ2VfaWRdLAogICAgdGltZXN0YW1wOiBbdGltZXN0YW1w XQogIH1dCn0KeyUgZW5kaGlnaGxpZ2h0ICV9CgpTbyB3ZSdsbCBzdGFydCB3aXRo IG1ha2luZyBvdXIgbmV3IHByb2plY3Q6Cgp7JSBoaWdobGlnaHQgYmFzaCAlfQpt a2RpciBzc2ItaGVsbG93b3JsZApjZCBzc2ItaGVsbG93b3JsZApucG0gaW5pdApu cG0gaW5zdGFsbCAtLXNhdmUgZmx1bWV2aWV3LXJlZHVjZSBzc2ItcmVmCnslIGVu ZGhpZ2hsaWdodCAlfQoKTmV4dCB3ZSdsbCBmaWxsIG91dCB0aGUgYm9pbGVycGxh dGUgb2Ygb3VyIHBsdWdpbiwgc2ltaWxhciB0byBgc3NiLWFib3V0YDoKCnslIGhp Z2hsaWdodCBqYXZhc2NyaXB0ICV9CnZhciBGbHVtZVJlZHVjZSA9IHJlcXVpcmUo J2ZsdW1ldmlldy1yZWR1Y2UnKQp2YXIgcmVmID0gcmVxdWlyZSgnc3NiLXJlZicp CgpleHBvcnRzLm5hbWUgPSAnaGVsbG93b3JsZCcKZXhwb3J0cy52ZXJzaW9uID0g cmVxdWlyZSgnLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uCmV4cG9ydHMubWFuaWZl c3QgPSB7CiAgc3RyZWFtOiAnc291cmNlJywKICBnZXQ6ICdhc3luYycKfQoKZXhw b3J0cy5pbml0ID0gZnVuY3Rpb24gKHNzYiwgY29uZmlnKSB7CiAgcmV0dXJuIHNz Yi5fZmx1bWVVc2UoJ2hlbGxvd29ybGQnLCBGbHVtZVJlZHVjZSgxLCByZWR1Y2Us IG1hcCkpCn0KCmZ1bmN0aW9uIHJlZHVjZSAocmVzdWx0LCBpdGVtKSB7fQoKZnVu Y3Rpb24gbWFwIChtc2cpIHt9CnslIGVuZGhpZ2hsaWdodCAlfQoKSSB0aGluayB3 ZSdsbCB0cnkgdXNpbmcgdGhlIGBpbml0aWFsU3RhdGVgIHBhcmFtZXRlciB0aGlz IHRpbWUgYXJvdW5kLCBzbyB3ZSdsbCBjaGFuZ2UgaXQgdXAgYXMgc3VjaDoKCnsl IGhpZ2hsaWdodCBqYXZhc2NyaXB0ICV9Cgp2YXIgaW5pdGlhbFN0YXRlID0ge30K CmV4cG9ydHMuaW5pdCA9IGZ1bmN0aW9uIChzc2IsIGNvbmZpZykgewogIHJldHVy biBzc2IuX2ZsdW1lVXNlKCdoZWxsb3dvcmxkJywgRmx1bWVSZWR1Y2UoMSwgcmVk dWNlLCBtYXAsIG51bGwsIGluaXRpYWxTdGF0ZSkpCn0KeyUgZW5kaGlnaGxpZ2h0 ICV9CgpOb3cgdGFraW5nIGEgbG9vayBhdCB0aGUgbWFwIGZ1bmN0aW9uLiBXZSBv bmx5IHdhbnQgdG8gaW5kZXggYHBvc3RgIG1lc3NhZ2VzIHdpdGggdGhlIHRleHQg YEhlbGxvIFdvcmxkIWAuIEZyb20gdGhhdCwgd2Ugd2FudCB0byBrZWVwIHRyYWNr IG9mIGFsbCB0aGUgbWVzc2FnZSBpZHMgYW5kIHdobyBwdWJsaXNoZWQgdGhvc2Ug bWVzc2FnZXMuIEZyb20gdGhhdCB3ZSBlbmQgdXAgd2l0aCB0aGUgZm9sbG93aW5n IGBtYXBgIGZ1bmN0aW9uOgoKeyUgaGlnaGxpZ2h0IGphdmFzY3JpcHQgJX0KZnVu Y3Rpb24gbWFwIChtc2cpIHsKICBpZiAobXNnLnZhbHVlLmNvbnRlbnQgJiYKICAg ICAgbXNnLnZhbHVlLmNvbnRlbnQudHlwZSA9PT0gJ3Bvc3QnICYmCiAgICAgIG1z Zy52YWx1ZS5jb250ZW50LnRleHQgPT09ICfrSGVsbG8gV29ybGQhJykgewogICAg dmFyIGF1dGhvciA9IG1zZy52YWx1ZS5hdXRob3IKCiAgICByZXR1cm4gewogICAg ICBbYXV0aG9yXTogW3sKICAgICAgICBtZXNzYWdlOiBtc2cua2V5LAogICAgICAg IHRpbWVzdGFtcDogbXNnLnZhbHVlLnRpbWVzdGFtcAogICAgICB9XQogICAgfQog IH0KfQp7JSBlbmRoaWdobGlnaHQgJX0KClRoaXMgd2lsbCBwcm92aWRlIHVzIHdp dGggYSBzdHJlYW0gb2YgYXV0aG9yIHRvIG1lc3NhZ2UgaWQgcGFpcnMgaW50byBv dXIgYHJlZHVjZWAgZnVuY3Rpb24uIEluIG91ciByZWR1Y2UgZnVuY3Rpb24sIGFm dGVyIG1ha2luZyBzdXJlIHRoZSBgaXRlbWAgZXhpc3RzIHdlIHdhbnQgdG8gbG9v cCB0aHJvdWdoIGFsbCB0aGUgYGF1dGhvcmBzIGluIHRoZSBgaXRlbWAgaW4gb3Jk ZXIgdG8gYWRkIHRoZSBtZXNzYWdlIGlkcyB0byB0aGUgaW5kZXguIElmIGFuIGBh dXRob3JgIGhhcyBubyBwcmV2aW91cyBtZXNzYWdlcyBpbiB0aGUgaW5kZXgsIHRo ZWlyIGluZGV4IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkOyB0aGVuIHRoZSBtZXNz YWdlIGlkcyBmcm9tIHRoZSBgaXRlbWAgY2FuIGJlIGNvbmNhdGVuYXRlZCB0byB0 aGUgZW5kLiBBZnRlciB0aGUgZW50aXJlIGl0ZW0gaGFzIGJlZW4gcHJvY2Vzc2Vk IHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuCgp7JSBoaWdobGlnaHQgamF2YXNjcmlw dCAlfQpmdW5jdGlvbiByZWR1Y2UgKHJlc3VsdCwgaXRlbSkgewogIGlmIChpdGVt KSB7CiAgICBmb3IgKHZhciBhdXRob3IgaW4gaXRlbSkgewogICAgICBpZiAoIXJl c3VsdFthdXRob3JdKSByZXN1bHRbYXV0aG9yXSA9IFtdCiAgICAgIHJlc3VsdFth dXRob3JdID0gcmVzdWx0W2F1dGhvcl0uY29uY2F0KGl0ZW1bYXV0aG9yXSkKICAg IH0KICB9CiAgcmV0dXJuIHJlc3VsdAp9CnslIGVuZGhpZ2hsaWdodCAlfQoKVG8g aW5zdGFsbCB0aGlzIGludG8gb3VyIGBzYm90YCBmb2xkZXIgd2UgbmVlZCB0byBg bnBtIGxpbmtgIGl0LiBGaXJzdCBpbiB0aGUgYHNzYi1oZWxsb3dvcmxkYCBkaXJl Y3RvcnkgcnVuOgoKeyUgaGlnaGxpZ2h0IGJhc2ggJX0KbnBtIGxpbmsKeyUgZW5k aGlnaGxpZ2h0ICV9CgpUaGVuIG5hdmlnYXRpbmcgaW50byB5b3VyIGBzYm90YCBk aXJlY3RvcnkgKGBzc2ItdGVzdGAgaWYgeW91IGFyZSBmb2xsb3dpbmcgYWxvbmcp LCBydW46Cgp7JSBoaWdobGlnaHQgYmFzaCAlfQpucG0gbGluayBzc2ItaGVsbG93 b3JsZAp7JSBlbmRoaWdobGlnaHQgJX0KCk5vdyByZXN0YXJ0IHlvdXIgYHNib3Rg IGFuZCBjaGVjayB3aGV0aGVyIHlvdXIgdmlldyB3YXMgY3JlYXRlZCBhcyBpbnRl bmRlZC4gVG8gY2hlY2sgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpZXcgeW91 IGNhbiBvcGVuIHVwIGEgYG5vZGVgIFJFUEwgd2l0aCBgc3NiLWNsaWVudGAgdG8g cXVlcnkgdGhlIHZpZXcuCgp7JSBoaWdobGlnaHQgamF2YXNjcmlwdCAlfQp2YXIg c3NiQ2xpZW50ID0gcmVxdWlyZSgnc3NiLWNsaWVudCcpCgpzc2JDbGllbnQoZnVu Y3Rpb24gKGVyciwgc2JvdCkgewogIHNib3QuaGVsbG93b3JsZC5nZXQoKGVyciwg c3RhdGUpID0+IHsKICAgIGlmIChlcnIpIGNvbnNvbGUuZXJyb3IoZXJyKQogICAg ZWxzZSBjb25zb2xlLmxvZyhzdGF0ZSkKICB9KQogIHNib3QuY2xvc2UoKQp9KQp7 JSBlbmRoaWdobGlnaHQgJX0KCklmIGFsbCB3ZW50IHdlbGwgeW91IHNob3VsZCBz ZWUgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIG91dGxpbmVkIHN0cnVjdHVyZSBh Ym92ZToKCnslIGhpZ2hsaWdodCBqc29uICV9CnsKICAiQE1LRWZQcGFHRk1JbkQ5 UDBaSVV5a29qZndhWG1vNkN0V096QjFFQkM0cWc9LmVkMjU1MTkiOiBbCiAgICB7 CiAgICAgICJtZXNzYWdlIjogIiV5YVFMOC9hbnFBclNueWJOOElzdjVDZ1F6L05r cnNraTRDcEtCTTB3TmJjPS5zaGEyNTYiLAogICAgICAidGltZXN0YW1wIjogMTUy NDI3NTM5NDc3NQogICAgfQogIF0KfQp7JSBlbmRoaWdobGlnaHQgJX0KCkhlcmUs IGAleWFRTDgvYW5xQXJTbnliTjhJc3Y1Q2dRei9Oa3Jza2k0Q3BLQk0wd05iYz0u c2hhMjU2YCBpcyDndGhlIGlkIG9mIHRoZSBgIkhlbGxvIFdvcmxkImAgbWVzc2Fn ZSBwdWJsaXNoZWQgZWFybGllci4KCiMjIFdoYXQncyBOZXh0CgpZb3Ugbm93IGhh dmUgYSB2ZXJ5IGJhc2ljIGN1c3RvbSBgc2JvdGAgcGx1Z2luIGluc3RhbGzmZWQg aW4geW91ciBsb2NhbCBgc2JvdGAuIE5leHQsIEkgd2lsbCB0YWtlIGEgY2xvc2Vy IGxvb2sgYXQgUGF0Y+VoYmF5IGFuZCBob3cgeW91IGNhbiBidWlsZCB1c2VyIORp bnRlcmZhY2VzIGZvciBT42N1dHRsZWJ14nR0LgoAwsBcBAABCgAQBQJbQmNaCRBA YGXH1fl2eAAApuYIAD/iG4gTZCcW3ujKyu4BIAcBNo8DH6/yesD/OeKHve93fJP9 0TGFZLwRPzWIdu3cnDbyW7rnGadSiKLeE59T7RI6ukWeRezqzHffF/I54/XXdj06 uTbQCEXcz8zdsbJAu57/7n4mxt8HxJ+OcpiViIv9Lof/rASBkJJy3IiXNtKJDLJ6 cdwYf/DWxlSdfQn6EjQbQpqXqWVGl8JQ69tFiWsMKaps4r6J6UcGU/5ACk4ufLx1 Y0Z3f0aFTSlZC0FhR7YtvzuPHD8c5bWyjgGLGXv50/mm50NMROSK4NdOVXq17MwC 58xO6yNVIB9yBm/gGe2eoBHe+zjVQ0NrInj0bbQ= =S2lo -----END PGP MESSAGE-----