eval %q{IyBDb3B5cmlnaHQgMjAwNywgRGlkaWVyIEJ1cgojCiMgUGVybWlzc2lvbiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0 d2FyZSBmb3IgCiMgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhl cmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQojIGNvcHly aWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiMgCiMgVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBF WFBSRVNTIE9SCiMgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJ VEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKIyBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMg TmFtZSA6IEFyYyBUb29sCiMgRGVzY3JpcHRpb24gOiAyIG5ldyB0b29scyB0 byBkcmF3IGFyY3Mgd2l0aCBjZW50ZXIgYW5kIHBvaW50LCBhbmQgMyBwb2lu dHMKIyBNZW51IEl0ZW0gOiBEcmF3IC8gQXJjOiBDZW50ZXIgYW5kIFBvaW50 CiMgRGF0ZSA6IDMxIE9jdCAyMDA3CiMgVHlwZSA6IFRvb2wKIy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnJlcXVpcmUgJ3NrZXRjaHVwLnJi JwoKbW9kdWxlIEFyYzNwdHMKCmNsYXNzICBBcmMzcHRzVG9vbAoKZGVmIGlu aXRpYWxpemUKICAgIEBpcDEgPSBuaWwKICAgIEBpcDIgPSBuaWwKICAgIEBp cDMgPSBuaWwKICAgIEB4ZG93biA9IDAKICAgIEB5ZG93biA9IDAKICAgICRh cmNfcG9pbnRzPVtdCiAgICBAc3RhdGUgPSAwCiAgICAjZGVmYXVsdCB2YWx1 ZXMKICAgICRhcmNfcHJlYyA9IDIwIGlmIG5vdCAkYXJjX3ByZWMKICAgICRh cmNfdHlwZSA9ICJBcmMiIGlmIG5vdCAkYXJjX3R5cGUKZW5kCgojIFdoZW4g dGhlIHRvb2wgaXMgZmlyc3Qgc2VsZWN0ZWQuCmRlZiBhY3RpdmF0ZQogICAg U2tldGNodXAuYWN0aXZlX21vZGVsLnN0YXJ0X29wZXJhdGlvbiAiQXJjOiBD ZW50ZXIsIFBvaW50IgogICAgQGlwMSA9IFNrZXRjaHVwOjpJbnB1dFBvaW50 Lm5ldwogICAgQGlwMiA9IFNrZXRjaHVwOjpJbnB1dFBvaW50Lm5ldwogICAg QGlwMyA9IFNrZXRjaHVwOjpJbnB1dFBvaW50Lm5ldwogICAgQGlwID0gU2tl dGNodXA6OklucHV0UG9pbnQubmV3CiAgICBAZHJhd24gPSBmYWxzZQogICAg c2VsZi5yZXNldChuaWwpCmVuZAoKIyBXaGVuIHRoZSB0b29sIGlzIGRlYWN0 aXZhdGVkIGJlY2F1c2UgYSBkaWZmZXJlbnQgdG9vbCB3YXMgc2VsZWN0ZWQK ZGVmIGRlYWN0aXZhdGUodmlldykKICAgIHZpZXcuaW52YWxpZGF0ZSBpZiBA ZHJhd24KZW5kCgojIFdoZW5ldmVyIHRoZSB1c2VyIG1vdmVzIHRoZSBtb3Vz ZS4KZGVmIG9uTW91c2VNb3ZlKGZsYWdzLCB4LCB5LCB2aWV3KQojcHV0cyAi c3RhdGUgIiArIEBzdGF0ZS50b19zCiAgICAjaWYoIEBzdGF0ZSA9PSAwICkK ICAgICAgICAjIFdlIGFyZSBnZXR0aW5nIHRoZSBmaXJzdCBwb2ludCAoc3Rh cnQgb3JpZ2luKQogICAgICAgIEBpcC5waWNrIHZpZXcsIHgsIHkKICAgICAg ICBpZiggQGlwICE9IEBpcDEgKQogICAgICAgICAgICB2aWV3LmludmFsaWRh dGUgaWYoIEBpcC5kaXNwbGF5PyBvciBAaXAxLmRpc3BsYXk/ICkKICAgICAg ICAgICAgQGlwMS5jb3B5ISBAaXAKICAgICAgICAgICAgIyBzZXQgdGhlIHRv b2x0aXAgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoaXMgcG9pbnQK ICAgICAgICAgICAgdmlldy50b29sdGlwID0gQGlwMS50b29sdGlwCiAgICAg ICAgZW5kCiAgICAjZW5kCiAgICAKICBjYXNlIEBzdGF0ZQogICAgd2hlbiAw CiAgICAgIHZpZXcudG9vbHRpcCA9ICJGaXJzdCBwb2ludCBvZiBhcmMiCiAg ICB3aGVuIDEKICAgICAgdmlldy50b29sdGlwID0gIlNlY29uZCBwb2ludCBv ZiBhcmMiCiAgICB3aGVuIDIKICAgICAgdmlldy50b29sdGlwID0gIlRoaXJk IHBvaW50IG9mIGFyYyIKICBlbmQKICAKZW5kCgojIFdoZW4gdGhlIHVzZXIg cHJlc3NlcyB0aGUgbGVmdCBtb3VzZSBidXR0b24uCmRlZiBvbkxCdXR0b25E b3duKGZsYWdzLCB4LCB5LCB2aWV3KQogICAgIyBXaGVuIHRoZSB1c2VyIGNs aWNrcyB0aGUgZmlyc3QgdGltZSwgd2Ugc3dpdGNoIHRvIGdldHRpbmcgdGhl CiAgICAjIHNlY29uZCBwb2ludC4gIFdoZW4gdGhleSBjbGljayBhIHNlY29u ZCB0aW1lIHdlIGNyZWF0ZSB0aGUgbGluZQogICAgCiAgICAjcHV0cyAiU3Rh dGU6ICIgKyBAc3RhdGUudG9fcwogICAgQGlwMS5waWNrIHZpZXcsIHgsIHkK I2lmKCBAaXAxLnZhbGlkPyApCiAgY2FzZSBAc3RhdGUKICAgIHdoZW4gMAog ICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0KCJGaXJzdCBwb2ludCBv ZiBhcmMiLCBTQl9QUk9NUFQpCiAgICAgIEB4ZG93biA9IHgKICAgICAgQHlk b3duID0geQogICAgICB2aWV3LnRvb2x0aXAgPSBAaXAxLnRvb2x0aXAgaWYo IEBpcDEudmFsaWQ/ICkKICAgICAgJGFyY19wb2ludHMucHVzaCBAaXAxLnBv c2l0aW9uCiAgICAgIEBzdGF0ZSA9IDEKICAgICAgdmlldy5pbnZhbGlkYXRl CiAgICB3aGVuIDEKICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgi U2Vjb25kIHBvaW50IG9mIGFyYyIsIFNCX1BST01QVCkKICAgICAgQHhkb3du ID0geAogICAgICBAeWRvd24gPSB5CiAgICAgIEBpcDIucGljayB2aWV3LCB4 LCB5LCBAaXAxCiAgICAgIHZpZXcudG9vbHRpcCA9IEBpcDIudG9vbHRpcCBp ZiggQGlwMi52YWxpZD8gKQogICAgICAkYXJjX3BvaW50cy5wdXNoIEBpcDIu cG9zaXRpb24KICAgICAgQHN0YXRlID0gMgogICAgICB2aWV3LmludmFsaWRh dGUgCiAgICB3aGVuIDIKICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4 dCgiVGhpcmQgUG9pbnQgb2YgYXJjIiwgU0JfUFJPTVBUKQogICAgICBAeGRv d24gPSB4CiAgICAgIEB5ZG93biA9IHkKICAgICAgQGlwMy5waWNrIHZpZXcs IHgsIHksIEBpcDEKICAgICAgdmlldy50b29sdGlwID0gQGlwMy50b29sdGlw IGlmKCBAaXAzLnZhbGlkPyApCiAgICAgICRhcmNfcG9pbnRzLnB1c2ggQGlw My5wb3NpdGlvbgogICAgICBAc3RhdGUgPSAzCiAgICAgIHZpZXcuaW52YWxp ZGF0ZQogICAgIyBDbGVhciBhbnkgaW5mZXJlbmNlIGxvY2sKICAgIHZpZXcu bG9ja19pbmZlcmVuY2UKICBlbmQgI2Nhc2UKI2VuZAplbmQKCiMgdXNlciBy ZWxlYXNlcyB0aGUgbGVmdCBtb3VzZSBidXR0b24uCmRlZiBvbkxCdXR0b25V cChmbGFncywgeCwgeSwgdmlldykKICBzZWxmLnJlc2V0KHZpZXcpCiAgI2lm IEBzdGF0ZSA9PSAzCiAgICAjY3JlYXRlIHRlbXAgY2lyY2xlCiAgICAjJGFy Y19oZWxwX2NpcmNsZT1Ta2V0Y2h1cC5hY3RpdmVfbW9kZWwuZW50aXRpZXMu YWRkX2NpcmNsZSgkYXJjX3BvaW50c1swXSwgQHZ6LCAkYXJjX3JhZCwgNTUp CiAgI2VuZAogIHNlbGYuZHJhd19nZW9tZXRyeSh2aWV3KSBpZiBAc3RhdGUg PT0gMwplbmQKCiMgVXNlciBwcmVzc2VzIGEga2V5IG9uIHRoZSBrZXlib2Fy ZC4KIyBXZSBhcmUgY2hlY2tpbmcgaXQgaGVyZSB0byBzZWUgaWYgdGhlIHVz ZXIgcHJlc3NlZCB0aGUgc2hpZnQga2V5CiMgc28gdGhhdCB3ZSBjYW4gZG8g aW5mZXJlbmNlIGxvY2tpbmcKZGVmIG9uS2V5RG93bihrZXksIHJlcGVhdCwg ZmxhZ3MsIHZpZXcpCiAgICBpZigga2V5ID09IENPTlNUUkFJTl9NT0RJRklF Ul9LRVkgJiYgcmVwZWF0ID09IDEgKQogICAgICAgIEBzaGlmdF9kb3duX3Rp bWUgPSBUaW1lLm5vdwogICAgICAgICMgaWYgd2UgYWxyZWFkeSBoYXZlIGFu IGluZmVyZW5jZSBsb2NrLCB0aGVuIHVubG9jayBpdAogICAgICAgIGlmKCB2 aWV3LmluZmVyZW5jZV9sb2NrZWQ/ICkKICAgICAgICAjIGNhbGxpbmcgbG9j a19pbmZlcmVuY2Ugd2l0aCBubyBhcmd1bWVudHMgYWN0dWFsbHkgdW5sb2Nr cwogICAgICAgICAgICB2aWV3LmxvY2tfaW5mZXJlbmNlCiAgICAgICAgZWxz aWYoIEBzdGF0ZSA9PSAwICYmIEBpcDEudmFsaWQ/ICkKICAgICAgICAgICAg dmlldy5sb2NrX2luZmVyZW5jZSBAaXAxCiAgICAgICAgZWxzaWYoIEBzdGF0 ZSA9PSAxICYmIEBpcDIudmFsaWQ/ICkKICAgICAgICAgICAgdmlldy5sb2Nr X2luZmVyZW5jZSBAaXAyCiAgICAgICAgZWxzaWYoIEBzdGF0ZSA9PSAyICYm IEBpcDMudmFsaWQ/ICkKICAgICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5j ZSBAaXAzCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgojIFVzZXIgcmVsZWFz ZXMgdGhlIGtleQojIFdlIHVzZSB0aGlzIHRvIHVubG9jayB0aGUgaW50ZXJl bmNlCiMgSWYgdGhlIHVzZXIgaG9sZHMgZG93biB0aGUgc2hpZnQga2V5IGZv ciBtb3JlIHRoYW4gMS8yIHNlY29uZCwgdGhlbiB3ZQojIHVubG9jayB0aGUg aW5mZXJlbmNlIG9uIHRoZSByZWxlYXNlLiAgT3RoZXJ3aXNlLCB0aGUgdXNl ciBwcmVzc2VzIHNoaWZ0CiMgb25jZSB0byBsb2NrIGFuZCBhIHNlY29uZCB0 aW1lIHRvIHVubG9jay4KZGVmIG9uS2V5VXAoa2V5LCByZXBlYXQsIGZsYWdz LCB2aWV3KQogIHJldHVybiBpZiBub3QgQHN0YXRlID09IDQKICAgIGlmKCBr ZXkgPT0gQ09OU1RSQUlOX01PRElGSUVSX0tFWSAmJgogICAgICAgIHZpZXcu aW5mZXJlbmNlX2xvY2tlZD8gJiYKICAgICAgICAoVGltZS5ub3cgLSBAc2hp ZnRfZG93bl90aW1lKSA+IDAuNSApCiAgICAgICAgdmlldy5sb2NrX2luZmVy ZW5jZQogICAgZW5kCmVuZAoKIyBvblVzZXJUZXh0IGlzIGNhbGxlZCB3aGVu IHRoZSB1c2VyIGVudGVycyBzb21ldGhpbmcgaW50byB0aGUgVkNCCmRlZiBv blVzZXJUZXh0KHRleHQsIHZpZXcpCiAgICByZXR1cm4gaWYgbm90IEBzdGF0 ZSA9PSA0CmVuZAoKIyBUaGUgZHJhdyBtZXRob2QgaXMgY2FsbGVkIHdoZW5l dmVyIHRoZSB2aWV3IGlzIHJlZnJlc2hlZC4gIEl0IGxldHMgdGhlCiMgdG9v bCBkcmF3IGFueSB0ZW1wb3JhcnkgZ2VvbWV0cnkgdGhhdCBpdCBuZWVkcyB0 by4KZGVmIGRyYXcodmlldykKICAgIGlmKCBAaXAxLnZhbGlkPyApCiAgICAg ICAgaWYoIEBpcDEuZGlzcGxheT8gKQogICAgICAgICAgICBAaXAxLmRyYXco dmlldykKICAgICAgICAgICAgQGRyYXduID0gdHJ1ZQogICAgICAgIGVuZAog ICAgZW5kCiAgICAKICBpZiAkYXJjX3BvaW50cy5sZW5ndGggPT0gMQogICAg dmlldy5kcmF3X3BvaW50cyAkYXJjX3BvaW50cywgOCwgMSwgImJsYWNrIgog IGVuZAogIAogIGlmICRhcmNfcG9pbnRzLmxlbmd0aCA9PSAyCiAgICB2aWV3 LmxpbmVfd2lkdGggPSAyCiAgICB2aWV3LmRyYXdfcG9pbnRzICRhcmNfcG9p bnRzWzBdLCA4LCAxLCAiYmxhY2siCiAgICB2aWV3LmRyYXdfcG9pbnRzICRh cmNfcG9pbnRzWzFdLCA4LCAxLCAiYmxhY2siCiAgICBAdjEgPSAkYXJjX3Bv aW50c1sxXS0kYXJjX3BvaW50c1swXQogIGVuZAogIAogIGlmICRhcmNfcG9p bnRzLmxlbmd0aCA9PSAzCiAgICB2aWV3LmxpbmVfd2lkdGggPSAyCiAgICB2 aWV3LmRyYXdfcG9pbnRzICRhcmNfcG9pbnRzWzBdLCA4LCAxLCAiYmxhY2si CiAgICB2aWV3LmRyYXdfcG9pbnRzICRhcmNfcG9pbnRzWzFdLCA4LCAxLCAi YmxhY2siCiAgICB2aWV3LmRyYXdfcG9pbnRzICRhcmNfcG9pbnRzWzJdLCA4 LCAxLCAiYmxhY2siCiAgICBAdjI9JGFyY19wb2ludHNbMl0tJGFyY19wb2lu dHNbMV0KICAgIEB2ej0oJGFyY19wb2ludHNbMF0gLSAkYXJjX3BvaW50c1sx XSkuY3Jvc3MoJGFyY19wb2ludHNbMF0gLSAkYXJjX3BvaW50c1syXSkKICBl bmQKICB2aWV3LmxvY2tfaW5mZXJlbmNlCmVuZAoKIyBvbkNhbmNlbCBpcyBj YWxsZWQgd2hlbiB0aGUgdXNlciBoaXRzIHRoZSBlc2NhcGUga2V5CmRlZiBv bkNhbmNlbChmbGFnLCB2aWV3KQogICAgc2VsZi5yZXNldCh2aWV3KQogICAg c2VsZi5kcmF3X2dlb21ldHJ5KHZpZXcpIGlmIEBzdGF0ZSA9PSAzCiAgICBp ZiAkYXJjX3BvaW50cy5sZW5ndGggPCAzCiAgICAgICMgV2UgZ290IGxlc3Mg dGhhbiAzIHBvaW50cwogICAgICBVSS5tZXNzYWdlYm94KCRhcmNfcG9pbnRz Lmxlbmd0aC50b19zICsgIiBwb2ludHMgYXJlIG5vdCBlbm91Z2ggdG8gZHJh dyBhbiBhcmMhIikKICAgICAgc2VsZi5yZXNldCh2aWV3KQogICAgZW5kCmVu ZAoKIyBSZXNldCB0aGUgdG9vbCBiYWNrIHRvIGl0cyBpbml0aWFsIHN0YXRl CmRlZiByZXNldCh2aWV3KQogICAgIyBUaGlzIHZhcmlhYmxlIGtlZXBzIHRy YWNrIG9mIHdoaWNoIHBvaW50IHdlIGFyZSBjdXJyZW50bHkgZ2V0dGluZwog ICAgI0BzdGF0ZSA9IDAKICAgIGNhc2UgQHN0YXRlCiAgICAgIHdoZW4gMAog ICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQoIkZpcnN0IHBvaW50 IiwgU0JfUFJPTVBUKQogICAgICB3aGVuIDEKICAgICAgICBTa2V0Y2h1cDo6 c2V0X3N0YXR1c190ZXh0KCJTZWNvbmQgcG9pbnQiLCBTQl9QUk9NUFQpCiAg ICAgIHdoZW4gMgogICAgICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQo IlRoaXJkIHBvaW50IiwgU0JfUFJPTVBUKQogICAgICAgICNTa2V0Y2h1cDo6 c2V0X3N0YXR1c190ZXh0KCIiLCBTQl9QUk9NUFQpCiAgICBlbmQKICAgIAog ICAgIyBjbGVhciB0aGUgSW5wdXRQb2ludAogICAgQGlwMS5jbGVhcgogICAg aWYoIHZpZXcgKQogICAgICAgIHZpZXcudG9vbHRpcCA9IG5pbAogICAgICAg IHZpZXcuaW52YWxpZGF0ZSBpZiBAZHJhd24KICAgIGVuZAogICAgQGRyYXdu ID0gZmFsc2UKICAgIEBkcmFnZ2luZyA9IGZhbHNlCmVuZAoKZGVmIGRyYXdf Z2VvbWV0cnkodmlldykKCiAgcHRzID0gW10KICBsaXN0ID0gW1siQXJjIiwg IkNpcmNsZSJdLmpvaW4oInwiKV0KICBwcm9tcHQgPSBbIkRyYXc6ICIsICJQ cmVjaXNpb246ICJdCiAgcGFyYW1zID0gWyRhcmNfdHlwZSwkYXJjX3ByZWNd CiAgcmVzdWx0ID0gaW5wdXRib3gocHJvbXB0LCBwYXJhbXMsbGlzdCwgIkFy YyBQYXJhbWV0ZXJzIikKICBpZiByZXN1bHQKICAgICRhcmNfdHlwZSA9IHJl c3VsdFswXQogICAgJGFyY19wcmVjID0gcmVzdWx0WzFdCiAgZWxzZQogICAg cmV0dXJuCiAgZW5kCgogIGVudGl0aWVzID0gU2tldGNodXAuYWN0aXZlX21v ZGVsLmVudGl0aWVzCgojY29tcHV0ZSBjZW50ZXIgb2YgYXJjCkB2MW09QHYx LmNsb25lCkB2MW0ubGVuZ3RoID0gQHYxLmxlbmd0aC8yLjAKdD1HZW9tOjpU cmFuc2Zvcm1hdGlvbi50cmFuc2xhdGlvbiBAdjFtCkBtaWRfdjE9ICRhcmNf cG9pbnRzWzBdLnRyYW5zZm9ybSB0CiNlbnRpdGllcy5hZGRfY3BvaW50IEBt aWRfdjEKcjEgPSBHZW9tOjpUcmFuc2Zvcm1hdGlvbi5yb3RhdGlvbihAbWlk X3YxLCBAdnosIE1hdGg6OlBJLzIuMCkKQHYxbXI9QHYxbS50cmFuc2Zvcm0g cjEKCkB2Mm09QHYyLmNsb25lCkB2Mm0ubGVuZ3RoID0gQHYyLmxlbmd0aC8y LjAKdD1HZW9tOjpUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGlvbiBAdjJtCkBt aWRfdjI9ICRhcmNfcG9pbnRzWzFdLnRyYW5zZm9ybSB0CiNlbnRpdGllcy5h ZGRfY3BvaW50IEBtaWRfdjIKI2VudGl0aWVzLmFkZF9saW5lKCRhcmNfcG9p bnRzWzBdLCAkYXJjX3BvaW50c1sxXSkKI2VudGl0aWVzLmFkZF9saW5lKCRh cmNfcG9pbnRzWzFdLCAkYXJjX3BvaW50c1syXSkKCnIyID0gR2VvbTo6VHJh bnNmb3JtYXRpb24ucm90YXRpb24oQG1pZF92MiwgQHZ6LCBNYXRoOjpQSS8y LjApCkB2Mm1yPUB2Mm0udHJhbnNmb3JtIHIyCkBjZW50ZXI9R2VvbS5pbnRl cnNlY3RfbGluZV9saW5lKFtAbWlkX3YxLCBAdjFtcl0sIFtAbWlkX3YyLCBA djJtcl0pCiNlbnRpdGllcy5hZGRfY3BvaW50IEBjZW50ZXIKCiNkcmF3IGFy YwphcmNfYW5nbGUgPSAoJGFyY19wb2ludHNbMl0gLSBAY2VudGVyKS5hbmds ZV9iZXR3ZWVuKCgkYXJjX3BvaW50c1swXSAtIEBjZW50ZXIpKQpAYXJjX3Jh ZCA9IEBjZW50ZXIuZGlzdGFuY2UgJGFyY19wb2ludHNbMF0KCmlmIGFyY19h bmdsZSA+IE1hdGg6OlBJCiAgYXJjX2FuZ2xlID0gMCAtIGFyY19hbmdsZQpl bmQKCmlmICRhcmNfdHlwZSA9PSAiQXJjIgogIGVudGl0aWVzLmFkZF9hcmMg QGNlbnRlciwgKCRhcmNfcG9pbnRzWzBdIC0gQGNlbnRlciksIEB2eiwgQGFy Y19yYWQsIDAsIGFyY19hbmdsZSwgJGFyY19wcmVjLnRvX2kKICBlbHNlCiAg ZW50aXRpZXMuYWRkX2NpcmNsZSBAY2VudGVyLCBAdnosIEBhcmNfcmFkLCAk YXJjX3ByZWMudG9faQplbmQKCiMgcmVzZXQgcG9pbnRzIGFycmF5IGFuZCBl eGl0IHRvb2wKJGFyY19wb2ludHM9W10KU2tldGNodXAuc2VuZF9hY3Rpb24g InNlbGVjdFNlbGVjdGlvblRvb2w6IgpTa2V0Y2h1cC5hY3RpdmVfbW9kZWwu Y29tbWl0X29wZXJhdGlvbgplbmQKCmVuZCAjIGNsYXNzCgojLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VsZWN0IHRoZSBB cmNjZW50ZXIgdG9vbCAgICAgICAgICAgICAgIAojLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZiBBcmMzcHRzLnRvb2wKICAg IFNrZXRjaHVwLmFjdGl2ZV9tb2RlbC5zZWxlY3RfdG9vbCBBcmMzcHRzVG9v bC5uZXcKCmVuZAoKZW5kICMgbW9kdWxlIEFyY2NlbnRlcgoKCgoKCgoKCgoK Cgptb2R1bGUgQXJjY2VudGVyCgpjbGFzcyAgQXJjY2VudGVyVG9vbAoKZGVm IGluaXRpYWxpemUKICAgIEBpcDEgPSBuaWwKICAgIEBpcDIgPSBuaWwKICAg IEBpcDMgPSBuaWwKICAgIEB4ZG93biA9IDAKICAgIEB5ZG93biA9IDAKICAg ICRhcmNfcG9pbnRzPVtdCiAgICBAc3RhdGUgPSAwCiAgICAjZGVmYXVsdCB2 YWx1ZXMKICAgICRhcmNfcHJlYyA9IDIwIGlmIG5vdCAkYXJjX3ByZWMKZW5k CgojIFdoZW4gdGhlIHRvb2wgaXMgZmlyc3Qgc2VsZWN0ZWQuCmRlZiBhY3Rp dmF0ZQogICAgU2tldGNodXAuYWN0aXZlX21vZGVsLnN0YXJ0X29wZXJhdGlv biAiQXJjOiBDZW50ZXIgJiAyIHBvaW50cyIKICAgIEBpcDEgPSBTa2V0Y2h1 cDo6SW5wdXRQb2ludC5uZXcKICAgIEBpcDIgPSBTa2V0Y2h1cDo6SW5wdXRQ b2ludC5uZXcKICAgIEBpcDMgPSBTa2V0Y2h1cDo6SW5wdXRQb2ludC5uZXcK ICAgIEBpcCA9IFNrZXRjaHVwOjpJbnB1dFBvaW50Lm5ldwogICAgQGRyYXdu ID0gZmFsc2UKICAgIHNlbGYucmVzZXQobmlsKQplbmQKCiMgV2hlbiB0aGUg dG9vbCBpcyBkZWFjdGl2YXRlZCBiZWNhdXNlIGEgZGlmZmVyZW50IHRvb2wg d2FzIHNlbGVjdGVkCmRlZiBkZWFjdGl2YXRlKHZpZXcpCiAgICB2aWV3Lmlu dmFsaWRhdGUgaWYgQGRyYXduCmVuZAoKIyBXaGVuZXZlciB0aGUgdXNlciBt b3ZlcyB0aGUgbW91c2UuCmRlZiBvbk1vdXNlTW92ZShmbGFncywgeCwgeSwg dmlldykKI3B1dHMgInN0YXRlICIgKyBAc3RhdGUudG9fcwogICAgI2lmKCBA c3RhdGUgPT0gMCApCiAgICAgICAgIyBXZSBhcmUgZ2V0dGluZyB0aGUgZmly c3QgcG9pbnQgKHN0YXJ0IG9yaWdpbikKICAgICAgICBAaXAucGljayB2aWV3 LCB4LCB5CiAgICAgICAgaWYoIEBpcCAhPSBAaXAxICkKICAgICAgICAgICAg dmlldy5pbnZhbGlkYXRlIGlmKCBAaXAuZGlzcGxheT8gb3IgQGlwMS5kaXNw bGF5PyApCiAgICAgICAgICAgIEBpcDEuY29weSEgQGlwCiAgICAgICAgICAg ICMgc2V0IHRoZSB0b29sdGlwIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCB0 byB0aGlzIHBvaW50CiAgICAgICAgICAgIHZpZXcudG9vbHRpcCA9IEBpcDEu dG9vbHRpcAogICAgICAgIGVuZAogICAgI2VuZAogICAgCiAgY2FzZSBAc3Rh dGUKICAgIHdoZW4gMAogICAgICB2aWV3LnRvb2x0aXAgPSAiQ2VudGVyIHBv aW50IgogICAgd2hlbiAxCiAgICAgIHZpZXcudG9vbHRpcCA9ICJTdGFydCBw b2ludCIKICAgIHdoZW4gMgogICAgICB2aWV3LnRvb2x0aXAgPSAiRW5kIHBv aW50IgogIGVuZAogIAplbmQKCiMgV2hlbiB0aGUgdXNlciBwcmVzc2VzIHRo ZSBsZWZ0IG1vdXNlIGJ1dHRvbi4KZGVmIG9uTEJ1dHRvbkRvd24oZmxhZ3Ms IHgsIHksIHZpZXcpCiAgICAjIFdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBm aXJzdCB0aW1lLCB3ZSBzd2l0Y2ggdG8gZ2V0dGluZyB0aGUKICAgICMgc2Vj b25kIHBvaW50LiAgV2hlbiB0aGV5IGNsaWNrIGEgc2Vjb25kIHRpbWUgd2Ug Y3JlYXRlIHRoZSBsaW5lCiAgICAKICAgICNwdXRzICJTdGF0ZTogIiArIEBz dGF0ZS50b19zCiAgICBAaXAxLnBpY2sgdmlldywgeCwgeQojaWYoIEBpcDEu dmFsaWQ/ICkKICBjYXNlIEBzdGF0ZQogICAgd2hlbiAwCiAgICAgIFNrZXRj aHVwOjpzZXRfc3RhdHVzX3RleHQoIkNlbnRlciBwb2ludCBvZiBhcmMiLCBT Ql9QUk9NUFQpCiAgICAgIEB4ZG93biA9IHgKICAgICAgQHlkb3duID0geQog ICAgICB2aWV3LnRvb2x0aXAgPSBAaXAxLnRvb2x0aXAgaWYoIEBpcDEudmFs aWQ/ICkKICAgICAgJGFyY19wb2ludHMucHVzaCBAaXAxLnBvc2l0aW9uCiAg ICAgIEBzdGF0ZSA9IDEKICAgICAgdmlldy5pbnZhbGlkYXRlCiAgICB3aGVu IDEKICAgICAgU2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgiU3RhcnQgcG9p bnQgb2YgYXJjIiwgU0JfUFJPTVBUKQogICAgICBAeGRvd24gPSB4CiAgICAg IEB5ZG93biA9IHkKICAgICAgQGlwMi5waWNrIHZpZXcsIHgsIHksIEBpcDEK ICAgICAgdmlldy50b29sdGlwID0gQGlwMi50b29sdGlwIGlmKCBAaXAyLnZh bGlkPyApCiAgICAgICRhcmNfcG9pbnRzLnB1c2ggQGlwMi5wb3NpdGlvbgog ICAgICBAc3RhdGUgPSAyCiAgICAgIHZpZXcuaW52YWxpZGF0ZSAKICAgIHdo ZW4gMgogICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0KCJFbmQgcG9p bnQgb2YgYXJjIiwgU0JfUFJPTVBUKQogICAgICBAeGRvd24gPSB4CiAgICAg IEB5ZG93biA9IHkKICAgICAgQGlwMy5waWNrIHZpZXcsIHgsIHksIEBpcDEK ICAgICAgdmlldy50b29sdGlwID0gQGlwMy50b29sdGlwIGlmKCBAaXAzLnZh bGlkPyApCiAgICAgICRhcmNfcG9pbnRzLnB1c2ggQGlwMy5wb3NpdGlvbgog ICAgICBAc3RhdGUgPSAzCiAgICAgIHZpZXcuaW52YWxpZGF0ZQogICAgIyBD bGVhciBhbnkgaW5mZXJlbmNlIGxvY2sKICAgIHZpZXcubG9ja19pbmZlcmVu Y2UKICBlbmQgI2Nhc2UKI2VuZAplbmQKCiMgdXNlciByZWxlYXNlcyB0aGUg bGVmdCBtb3VzZSBidXR0b24uCmRlZiBvbkxCdXR0b25VcChmbGFncywgeCwg eSwgdmlldykKICBzZWxmLnJlc2V0KHZpZXcpCiAgI2lmIEBzdGF0ZSA9PSAz CiAgICAjY3JlYXRlIHRlbXAgY2lyY2xlCiAgICAjJGFyY19oZWxwX2NpcmNs ZT1Ta2V0Y2h1cC5hY3RpdmVfbW9kZWwuZW50aXRpZXMuYWRkX2NpcmNsZSgk YXJjX3BvaW50c1swXSwgQHZ6LCAkYXJjX3JhZCwgNTUpCiAgI2VuZAogIHNl bGYuZHJhd19nZW9tZXRyeSh2aWV3KSBpZiBAc3RhdGUgPT0gMwplbmQKCiMg VXNlciBwcmVzc2VzIGEga2V5IG9uIHRoZSBrZXlib2FyZC4KIyBXZSBhcmUg Y2hlY2tpbmcgaXQgaGVyZSB0byBzZWUgaWYgdGhlIHVzZXIgcHJlc3NlZCB0 aGUgc2hpZnQga2V5CiMgc28gdGhhdCB3ZSBjYW4gZG8gaW5mZXJlbmNlIGxv Y2tpbmcKZGVmIG9uS2V5RG93bihrZXksIHJlcGVhdCwgZmxhZ3MsIHZpZXcp CiAgICBpZigga2V5ID09IENPTlNUUkFJTl9NT0RJRklFUl9LRVkgJiYgcmVw ZWF0ID09IDEgKQogICAgICAgIEBzaGlmdF9kb3duX3RpbWUgPSBUaW1lLm5v dwogICAgICAgICMgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGluZmVyZW5jZSBs b2NrLCB0aGVuIHVubG9jayBpdAogICAgICAgIGlmKCB2aWV3LmluZmVyZW5j ZV9sb2NrZWQ/ICkKICAgICAgICAjIGNhbGxpbmcgbG9ja19pbmZlcmVuY2Ug d2l0aCBubyBhcmd1bWVudHMgYWN0dWFsbHkgdW5sb2NrcwogICAgICAgICAg ICB2aWV3LmxvY2tfaW5mZXJlbmNlCiAgICAgICAgZWxzaWYoIEBzdGF0ZSA9 PSAwICYmIEBpcDEudmFsaWQ/ICkKICAgICAgICAgICAgdmlldy5sb2NrX2lu ZmVyZW5jZSBAaXAxCiAgICAgICAgZWxzaWYoIEBzdGF0ZSA9PSAxICYmIEBp cDIudmFsaWQ/ICkKICAgICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZSBA aXAyCiAgICAgICAgZWxzaWYoIEBzdGF0ZSA9PSAyICYmIEBpcDMudmFsaWQ/ ICkKICAgICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZSBAaXAzCiAgICAg ICAgZWxzaWYoIEBzdGF0ZSA9PSAzICYmIEBpcDQudmFsaWQ/ICkKICAgICAg ICAgICAgdmlldy5sb2NrX2luZmVyZW5jZSBAaXA0CiAgICAgICAgZW5kCiAg ICBlbmQKZW5kCgojIFVzZXIgcmVsZWFzZXMgdGhlIGtleQojIFdlIHVzZSB0 aGlzIHRvIHVubG9jayB0aGUgaW50ZXJlbmNlCiMgSWYgdGhlIHVzZXIgaG9s ZHMgZG93biB0aGUgc2hpZnQga2V5IGZvciBtb3JlIHRoYW4gMS8yIHNlY29u ZCwgdGhlbiB3ZQojIHVubG9jayB0aGUgaW5mZXJlbmNlIG9uIHRoZSByZWxl YXNlLiAgT3RoZXJ3aXNlLCB0aGUgdXNlciBwcmVzc2VzIHNoaWZ0CiMgb25j ZSB0byBsb2NrIGFuZCBhIHNlY29uZCB0aW1lIHRvIHVubG9jay4KZGVmIG9u S2V5VXAoa2V5LCByZXBlYXQsIGZsYWdzLCB2aWV3KQogIHJldHVybiBpZiBu b3QgQHN0YXRlID09IDQKICAgIGlmKCBrZXkgPT0gQ09OU1RSQUlOX01PRElG SUVSX0tFWSAmJgogICAgICAgIHZpZXcuaW5mZXJlbmNlX2xvY2tlZD8gJiYK ICAgICAgICAoVGltZS5ub3cgLSBAc2hpZnRfZG93bl90aW1lKSA+IDAuNSAp CiAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZQogICAgZW5kCmVuZAoKIyBv blVzZXJUZXh0IGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGVudGVycyBzb21l dGhpbmcgaW50byB0aGUgVkNCCmRlZiBvblVzZXJUZXh0KHRleHQsIHZpZXcp CiAgICByZXR1cm4gaWYgbm90IEBzdGF0ZSA9PSA0CmVuZAoKIyBUaGUgZHJh dyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB2aWV3IGlzIHJlZnJl c2hlZC4gIEl0IGxldHMgdGhlCiMgdG9vbCBkcmF3IGFueSB0ZW1wb3Jhcnkg Z2VvbWV0cnkgdGhhdCBpdCBuZWVkcyB0by4KZGVmIGRyYXcodmlldykKICAg IGlmKCBAaXAxLnZhbGlkPyApCiAgICAgICAgaWYoIEBpcDEuZGlzcGxheT8g KQogICAgICAgICAgICBAaXAxLmRyYXcodmlldykKICAgICAgICAgICAgQGRy YXduID0gdHJ1ZQogICAgICAgIGVuZAogICAgZW5kCiAgICAKICBpZiAkYXJj X3BvaW50cy5sZW5ndGggPT0gMQogICAgdmlldy5kcmF3X3BvaW50cyAkYXJj X3BvaW50cywgOCwgNCwgImJsYWNrIgogIGVuZAogIAogIGlmICRhcmNfcG9p bnRzLmxlbmd0aCA9PSAyCiAgICB2aWV3LmRyYXdfcG9pbnRzICRhcmNfcG9p bnRzWzBdLCA4LCA0LCAiYmxhY2siCiAgICB2aWV3LmRyYXdfcG9pbnRzICRh cmNfcG9pbnRzWzFdLCA4LCAxLCAicmVkIgogICAgJGFyY19yYWQ9JGFyY19w b2ludHNbMF0uZGlzdGFuY2UgJGFyY19wb2ludHNbMV0KICBlbmQKICAKICBp ZiAkYXJjX3BvaW50cy5sZW5ndGggPT0gMwogICAgdmlldy5kcmF3X3BvaW50 cyAkYXJjX3BvaW50c1swXSwgOCwgNCwgImJsYWNrIgogICAgdmlldy5kcmF3 X3BvaW50cyAkYXJjX3BvaW50c1sxXSwgOCwgMSwgInJlZCIKICAgIHZpZXcu ZHJhd19wb2ludHMgJGFyY19wb2ludHNbMl0sIDgsIDEsICJyZWQiCiAgICAj Y29tcHV0ZSBtaWRkbGUgcG9pbnQKICAgIHY9JGFyY19wb2ludHNbMV0tJGFy Y19wb2ludHNbMF0KICAgIHYubGVuZ3RoID0gdi5sZW5ndGgvMy4wCiAgZW5k CiAgdmlldy5sb2NrX2luZmVyZW5jZQplbmQKCiMgb25DYW5jZWwgaXMgY2Fs bGVkIHdoZW4gdGhlIHVzZXIgaGl0cyB0aGUgZXNjYXBlIGtleQpkZWYgb25D YW5jZWwoZmxhZywgdmlldykKICAgIHNlbGYucmVzZXQodmlldykKICAgIHNl bGYuZHJhd19nZW9tZXRyeSh2aWV3KSBpZiBAc3RhdGUgPT0gMwogICAgaWYg JGFyY19wb2ludHMubGVuZ3RoIDwgMwogICAgICAjIFdlIGdvdCBsZXNzIHRo YW4gMyBwb2ludHMKICAgICAgVUkubWVzc2FnZWJveCgkYXJjX3BvaW50cy5s ZW5ndGgudG9fcyArICIgcG9pbnRzIGFyZSBub3QgZW5vdWdoIHRvIGRyYXcg YW4gYXJjISIpCiAgICAgIHNlbGYucmVzZXQodmlldykKICAgIGVuZAplbmQK CiMgUmVzZXQgdGhlIHRvb2wgYmFjayB0byBpdHMgaW5pdGlhbCBzdGF0ZQpk ZWYgcmVzZXQodmlldykKICAgICMgVGhpcyB2YXJpYWJsZSBrZWVwcyB0cmFj ayBvZiB3aGljaCBwb2ludCB3ZSBhcmUgY3VycmVudGx5IGdldHRpbmcKICAg ICNAc3RhdGUgPSAwCiAgICBjYXNlIEBzdGF0ZQogICAgICB3aGVuIDAKICAg ICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0KCJDZW50ZXIgcG9pbnQi LCBTQl9QUk9NUFQpCiAgICAgIHdoZW4gMQogICAgICAgIFNrZXRjaHVwOjpz ZXRfc3RhdHVzX3RleHQoIlN0YXJ0IHBvaW50IiwgU0JfUFJPTVBUKQogICAg ICB3aGVuIDIKICAgICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0KCJF bmQgcG9pbnQiLCBTQl9QUk9NUFQpCiAgICAgICAgI1NrZXRjaHVwOjpzZXRf c3RhdHVzX3RleHQoIiIsIFNCX1BST01QVCkKICAgIGVuZAogICAgCiAgICAj IGNsZWFyIHRoZSBJbnB1dFBvaW50CiAgICBAaXAxLmNsZWFyCiAgICBpZigg dmlldyApCiAgICAgICAgdmlldy50b29sdGlwID0gbmlsCiAgICAgICAgdmll dy5pbnZhbGlkYXRlIGlmIEBkcmF3bgogICAgZW5kCiAgICBAZHJhd24gPSBm YWxzZQogICAgQGRyYWdnaW5nID0gZmFsc2UKZW5kCgpkZWYgZHJhd19nZW9t ZXRyeSh2aWV3KQogIHB0cyA9IFtdCiAgcHJvbXB0ID0gWyJBcmMgcHJlY2lz aW9uOiAiXQogIHBhcmFtcyA9IFskYXJjX3ByZWNdCiAgcmVzdWx0ID0gaW5w dXRib3gocHJvbXB0LCBwYXJhbXMsICJBcmMgUGFyYW1ldGVyIikKICBpZiBy ZXN1bHQKICAgICRhcmNfcHJlYyA9IHJlc3VsdFswXQogIGVsc2UKICAgIHJl dHVybgogIGVuZAoKICBlbnRpdGllcyA9IFNrZXRjaHVwLmFjdGl2ZV9tb2Rl bC5lbnRpdGllcwoKI2RyYXcgYXJjCmFyY19hbmdsZSA9ICgkYXJjX3BvaW50 c1sxXSAtICRhcmNfcG9pbnRzWzBdKS5hbmdsZV9iZXR3ZWVuKCgkYXJjX3Bv aW50c1syXSAtICRhcmNfcG9pbnRzWzBdKSkKCmlmIGFyY19hbmdsZSA+IE1h dGg6OlBJCiAgYXJjX2FuZ2xlID0gMCAtIGFyY19hbmdsZQplbmQKQHZ6PSgk YXJjX3BvaW50c1swXSAtICRhcmNfcG9pbnRzWzFdKS5jcm9zcygkYXJjX3Bv aW50c1swXSAtICRhcmNfcG9pbnRzWzJdKQplbnRpdGllcy5hZGRfYXJjICRh cmNfcG9pbnRzWzBdLCAoJGFyY19wb2ludHNbMV0gLSAkYXJjX3BvaW50c1sw XSksIEB2eiwgJGFyY19yYWQsIDAsIGFyY19hbmdsZSwgJGFyY19wcmVjLnRv X2kKCiMgcmVzZXQgcG9pbnRzIGFycmF5IGFuZCBleGl0IHRvb2wKJGFyY19w b2ludHM9W10KU2tldGNodXAuc2VuZF9hY3Rpb24gInNlbGVjdFNlbGVjdGlv blRvb2w6IgpTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuY29tbWl0X29wZXJhdGlv bgplbmQKCmVuZCAjIGNsYXNzCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiMgU2VsZWN0IHRoZSBBcmNjZW50ZXIgdG9vbCAg ICAgICAgICAgICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmRlZiBBcmNjZW50ZXIudG9vbAogICAgU2tldGNodXAuYWN0 aXZlX21vZGVsLnNlbGVjdF90b29sIEFyY2NlbnRlclRvb2wubmV3CmVuZAoK ZW5kICMgbW9kdWxlIEFyY2NlbnRlcgoKCiMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQojIFNob3J0Y3V0IGZvciBzZWxlY3RpbmcgdGhlIG5l dyB0b29sIHdpdGhpbiB0aGUgVUkgICAgICAgICAgICAgICAgICAgICAgICAg ICAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiBub3Qg JGFyYzNwdHNfbG9hZGVkCiAgbWFpbl9tZW51ID0gVUkubWVudSgiRHJhdyIp LmFkZF9pdGVtKCJBcmM6IDMgUG9pbnRzIikgeyBBcmMzcHRzLnRvb2wgfQog IG1haW5fbWVudSA9IFVJLm1lbnUoIkRyYXciKS5hZGRfaXRlbSgiQXJjOiBD ZW50ZXIgYW5kIDIgcG9pbnRzIikgeyBBcmNjZW50ZXIudG9vbCB9CmVuZAok YXJjM3B0c19sb2FkZWQgPSB0cnVlCg==}.unpack("m").to_s