[1] "no hay suficientes observaciones para hacer el análisis"
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlcnJvcj1UUlVFLCBpbmNsdWRlID0gVFJVRSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSkNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gRkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCiNBcXXDrSBlc2NyaWJvIGVsIG5vbWJyZSBkZWwgdXN1YXJpbyBkZWwgcXVlIHF1aWVybyBvYnRlbmVyIGxvcyBkYXRvcy4NCiNFbCBub21icmUgZGUgdXN1YXJpbyB0aWVuZW4gcXVlIGVzdGFyIGVzY3JpdG8gZW50cmUgY29taWxsYXMgIiINCg0KdXN1YXJpbzwtIkBYdHJlYW1jZSINCg0KI1NpIHRpcGVvIGNydGwgYWx0IHIgc2UgdmEgY29ycmVyIHRvZG8gZWwgY8OzZGlnbw0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI0VuIGVzdGEgcGFydGUgZGUgY8OzZGlnbyBwdWVkbyBlc3BlY2lmaWNhciBhbGfDum4gZ3J1cG8gZGUgcGFsYWJyYXMgcXVlIHF1aWVybyBxdWUgc2VhIGFuYWxpemFkYQ0KDQojQXF1w60gZXNjcmlibyBlbCBtYXRjaCBlbiByZWdleCwgdG9kYXMgbGFzIHBhbGFicmFzIHRpZW5lbiBxdWUgc2VyIGVzY3JpdGFzIGVudHJlIGNvbWlsbGFzICIiDQoNCmtleTwtYygiW0lpXW5mbGFjaVvDs29dbiIsIltVdV1jcmFjaWEiLCJbUHBdYW5kZW1pYXxDb3ZpZHxDT1ZJRCIsIltCYl1vbHNvbmFybyIpDQoNCiNDb21vIHF1aWVybyBxdWUgbG9zIHRlcm1pbm9zIGFwYXJlemNhbiBlbiBsYXMgdGFibGFzDQoNCmtleV9jbGVhbjwtYygiSW5mbGFjacOzbiIsIlVjcmFuaWEiLCJDT1ZJRCIsIkJvbHNvbmFybyIpDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQojVmVyaWZpY28gc2kgbG9zIHBhcXVldGVzIHF1ZSBuZWNlc2l0byBlc3TDoW4gaW5zdGFsYWRvcywgZW4gY2FzbyBkZSBxdWUgbm8gbG8gZXN0w6luLCBsb3Mgdm95IGEgI2Rlc2NhcmdhciB5IGx1ZWdvIGxvcyB2b3kgYSBjYXJnYXIuDQoNCnBhY2thZ2VzIDwtIGMoInRpZHl0ZXh0Iiwic3RyaW5naSIsInRpZHl2ZXJzZSIsInJ0d2VldCIsImx1YnJpZGF0ZSIsInNjYWxlcyIsInN5dXpoZXQiKQ0KDQppbnN0YWxsZWRfcGFja2FnZXMgPC0gcGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkNCmlmIChhbnkoaW5zdGFsbGVkX3BhY2thZ2VzID09IEZBTFNFKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKHBhY2thZ2VzWyFpbnN0YWxsZWRfcGFja2FnZXNdKQ0KfQ0KDQppbnZpc2libGUobGFwcGx5KHBhY2thZ2VzLCBsaWJyYXJ5LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KI0FxdcOtIHNlIGRlc2NhcmdhbiBsb3MgZGF0b3MuIEN1YW5kbyBoYWdhbiBsYSBwcmltZXJhIGNvbnN1bHRhIHNlIGxlcyB2YSBhIGFicmlyIHVuYSB2ZW50YW5hIGRlICNkaWFsb2dvIGNvbiBUd2l0dGVyLiBIYXkgcXVlIHRlbmVyIGN1aWRhZG8gY29uIGxvcyBGaXJld2FsbHMNCg0KYXV0aF9zZXR1cF9kZWZhdWx0KCkNCg0KZGF0b3MgPC0gZ2V0X3RpbWVsaW5lKHVzdWFyaW8sbj0zMjAwKQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KI0V4cG9ydGFuZG8gYmFzZSBkZSBkYXRvcw0KDQphPC1wYXN0ZTAoImRhdG9zXyIsdXN1YXJpbywiLmNzdiIpDQoNCmRhdG9zPC1kYXRhLmZyYW1lKGxhcHBseShkYXRvcywgYXMuY2hhcmFjdGVyKSwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkNCg0Kd3JpdGVfYXNfY3N2KGRhdG9zLCBhKQ0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KIyBDcmVvIHF1ZSBmdW5jacOzbg0KY2hlY2tfb2JzZXJ2YXRpb25zIDwtIGZ1bmN0aW9uKGRhdG9zKSB7DQogICMgQ2hlcXVlbyBzaSBlcyBxdWUgZWwgbnVtZXJvIGRlIG9ic2VydmFjaW9uZXMgZXMgaWd1YWwgYSAwDQogIGlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogICAgIyBTaSBlcyBxdWUgZXN0YSBjb25kaWNpw7NuIHNlIGN1bXBsZSBzZSB2YSBhIGVzY3JpYmlyIHVuIG1lbnNhamUNCiAgICAgcHJpbnQoIm5vIGhheSBzdWZpY2llbnRlcyBvYnNlcnZhY2lvbmVzIHBhcmEgaGFjZXIgZWwgYW7DoWxpc2lzIikNCiAgfQ0KfQ0KDQojIGFwbGljbyBsYSBmdW5jacOzbiByZWNpZW4gY3JlYWRhDQpjaGVja19vYnNlcnZhdGlvbnMoZGF0b3MpIA0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI0xpbXBpYW5kbyBFbCBkaWNjaW9uYXJpbw0KDQpkaWN0aW9uYXJpbzwtZ2V0X3NlbnRpbWVudF9kaWN0aW9uYXJ5KCducmMnLCBsYW5ndWFnZSA9ICJzcGFuaXNoIikNCg0KeDwtZGljdGlvbmFyaW8gJT4lIA0KICBmaWx0ZXIoIXNlbnRpbWVudD09ImFuZ2VyIiB8ICF3b3JkICVpbiUgYyAoImVwaWRlbWlhIikpICU+JSANCiAgICBmaWx0ZXIoIXNlbnRpbWVudD09ImFudGljaXBhdGlvbiIgfCAhd29yZCAlaW4lIGMgKCJlcGlkZW1pYSIpKSAlPiUgDQogIGZpbHRlcighd29yZCAlaW4lIGMoImdvYmllcm5vIiwgImNvbXByb21pc28iLCAiaW5mb3JtZSIsICJtYXLDrWEiLCJncnVwbyIsICJqb3JuYWRhIiwgInRhcmRlIiwgImFsdG8iLCAiZm9uZG8iLCJtYXLDrWFzIiwibWFkcmUiLCJ2aXZpZW5kYSIsInByZXNpZGVudGUiLCAiZ2VuZXJhbCIsICJnb2Jlcm5hZG9yIiwgImd1ZXJyZXJvIiwgImp1c3RpY2lhIiwiaGFjZXIiLCJkaXJlY3RvciIsImTDrWFzIiwiYXPDrSIsImd1YXJkaWEiLCJtYXLDrWEiLCAiaGlkYWxnbyIsICJnYWJpbmV0ZSIsICJjYW5kaWRhdG8iLCAiZWxlY3RvIiwgIm9maWNpYWwiLCAibmnDsWFzIiwgInZvdG8iLCJwYWxhYnJhcyIsImFlcm9wdWVydG8iLCJjb25zZWpvIiwiZGVmZW5zYSIsImNvbnNlam8iLCJlbXByZXNhIiwidm90byIsInNlY3JldGFyw61hIiwiZXh0cmFuamVybyIsImNvbmdyZXNvIiwiaG9zcGl0YWwiLCJmb25kbyIsImFydGUiLCJtYWRyZSIsInByZW1pbyIsICJncmFuZGUiLCAicGVyacOzZGljbyIsICJkZXNmaWxlIiwgImdlbmVyYWwiLCAiZGlyZWN0b3IiLCJjZW50cm8iLCJndWFyZGlhIiwicHVlcnRvIiwiZGVmZW5zYSIsDQogImdhYmluZXRlIiwgIm1hcmluYSIsICJlbmN1ZXN0YSIsInByZXN1cHVlc3RvIiwgImVsZWN0byIsICJlbWJhamFkb3IiLCJyZWN1cnNvcyIsICJsZXkiLCAiY29uZ3Jlc28iLCAiY29tZXJjaW8iLCAic2VyaWUiLCJmaXJtYSIsICJwcmVzaWRlbnRhIiwic2lzdGVtYSIsICJpbnN0aXR1dG8iLCJiYW5jbyIpKQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQojQ2FsY3VsYW5kbyBsb3Mgc2VudGltaWVudG9zIHBvciB0d2VldHMNCg0KY2F0ZWdvcmlhczwteCAlPiUgY291bnQoc2VudGltZW50KSAlPiUgc2VsZWN0KHNlbnRpbWVudCkgJT4lIGFzX3ZlY3RvcigpDQoNCmRhdGEgPWRhdGEuZnJhbWUoKQ0KDQpmb3IoaSBpbiAxOmxlbmd0aChjYXRlZ29yaWFzKSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCg0KbWV0aG9kIDwtICJjdXN0b20iDQpjdXN0b21fbGV4aWNvbiA8LSB4ICU+JSBmaWx0ZXIoc2VudGltZW50PT1jYXRlZ29yaWFzW2ldKQ0KbXlfY3VzdG9tX3ZhbHVlcyA8LSBnZXRfc2VudGltZW50KGRhdG9zJHRleHQsIG1ldGhvZCA9IG1ldGhvZCwgbGV4aWNvbiA9IGN1c3RvbV9sZXhpY29uKSAlPiUgYXMuZGF0YS5mcmFtZSgpDQoNCm15X2N1c3RvbV92YWx1ZXMkZW1vdGlvbjwtY2F0ZWdvcmlhc1tpXQ0KDQpkYXRhID0gcmJpbmQoZGF0YSwgZGF0YS5mcmFtZSAobXlfY3VzdG9tX3ZhbHVlcywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSkNCg0KIH0sIGVycm9yPWZ1bmN0aW9uKGUpe2NhdCgiRVJST1IgOiIsY29uZGl0aW9uTWVzc2FnZShlKSwgIlxuIil9KQ0KDQp9DQoNCnk8LWRhdGEgJT4lYXNfdGliYmxlKCkgJT4lIHJlbmFtZSh2YWx1ZT0xLGVtb3Rpb25zPTIpICU+JSBtdXRhdGUocm93ID0gcm93X251bWJlcigpKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBlbW90aW9ucyAsdmFsdWVzX2Zyb20gPXZhbHVlKSAlPiUgc2VsZWN0KC1yb3cpDQoNCnk8LWFzLmRhdGEuZnJhbWUobmEub21pdChhcHBseSh5LDIsZnVuY3Rpb24gKHgpIHhbb3JkZXIoaXMubmEoeCkpXSkpKQ0KDQpzZW50aW1pZW50b3NfdXN1YXJpbzwteSAlPiUgYXNfdGliYmxlKCkgJT4lIG11dGF0ZShwb2xhcmlkYWQ9cG9zaXRpdmUgLSBuZWdhdGl2ZSkgJT4lDQogbXV0YXRlKA0KICAgIHNlbnRpbWllbnRvID0gY2FzZV93aGVuKA0KICAgICAgcG9sYXJpZGFkID4gMCB+ICJwb3NpdGl2byIsDQogICAgICAgcG9sYXJpZGFkIDwgMCB+ICJuZWdhdGl2byIsDQogICAgICBwb2xhcmlkYWQgPT0gMCB+ICJuZXV0cmFsIikpDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRSxlcnJvcj1UUlVFfQ0KDQojR3JhZmljYW5kby4NCiNFbnZ1ZWx2byBlbCBjb2RpZ28gY29uIHVuYSBjb25kaWNpw7NuIHBhcmEgcXVlIHNvbG8gc2UgZ3JhZmlxdWUgc2kgc2UgY3VtcGxlIGxhDQojQ29uZGljacOzbg0KDQp0aXR1bG88LXBhc3RlKCJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIGRlIix1c3VhcmlvLCJlbiBUd2l0dGVyIikNCg0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQpzZW50aW1pZW50b3NfdXN1YXJpbyAlPiUgY291bnQoc2VudGltaWVudG8pICU+JQ0KICBtdXRhdGUocHJvcCA9IG4gLyBzdW0obikgKjEwMCkgJT4lIGdncGxvdChhZXMoeT1wcm9wLCB4PXNlbnRpbWllbnRvLGZpbGw9c2VudGltaWVudG8pKSArDQogICAgICBnZW9tX2NvbCgpICsNCiAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUodGl0dWxvKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiVGlwb3MgZGUgcG9sYXJpZGFkIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKX0NCg0KDQoNCg0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQojRXhwb3J0YW5kbyBiYXNlIGRlIHNlbnRpbWllbnRvcyANCg0Kbm9tYnJlMjwtcGFzdGUwKCJzZW50aW1pZW50b3NfIix1c3VhcmlvLCIuY3N2IikNCg0Kc2VudGltaWVudG9zX3VzdWFyaW88LXNlbnRpbWllbnRvc191c3VhcmlvICU+JSBtdXRhdGUoaWQ9MTpucm93KHNlbnRpbWllbnRvc191c3VhcmlvKSkNCg0KZGF0b3NfZnVsbDwtZGF0b3MgJT4lIG11dGF0ZShpZD0xOm5yb3coZGF0b3MpKSAlPiUgZnVsbF9qb2luKHNlbnRpbWllbnRvc191c3VhcmlvKQ0KDQp3cml0ZV9hc19jc3YoZGF0b3NfZnVsbCwgbm9tYnJlMikNCg0KYGBgDQoNCg0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI21pcmFyICUgZGUgc2VudGltaWVudG9zIHBvciBtZXMNCg0KdGl0dWxvPC1wYXN0ZSgiQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyBkZSIsdXN1YXJpbywiZW4gVHdpdHRlciBhIGxvIGxhcmdvIGRlbCB0aWVtcG8iKQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgDQogZGF0b3NfZnVsbCAlPiUNCiAgbXV0YXRlKGNyZWF0ZWRfYXQ9eW1kX2htcyhjcmVhdGVkX2F0KSkgJT4lIA0KICBncm91cF9ieShtb250aD1mbG9vcl9kYXRlKGNyZWF0ZWRfYXQsIm1vbnRoIikpICU+JSANCiAgY291bnQoc2VudGltaWVudG8sbW9udGgpICAlPiUgDQogIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSAqMTAwKSAlPiUgIA0KICBnZ3Bsb3QoYWVzKHk9cHJvcCwgeD1tb250aCxjb2xvdXI9c2VudGltaWVudG8pKSArDQogICAgICAgIGdlb21fbGluZSgpKw0KICBnZ3RpdGxlKHRpdHVsbykgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMgTmVnYXRpdm9zIikgKyB4bGFiKCJNZXMiKSsNCiAgdGhlbWVfbGlnaHQoKQ0KfQ0KDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0aXR1bG88LXBhc3RlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIGRlIix1c3VhcmlvLCJlbiBUd2l0dGVyIikNCg0KaWYgKG5yb3coZGF0b3MpID09IDApIHsNCiAgaW52aXNpYmxlKCkNCn0gZWxzZSBpZiAobnJvdyhkYXRvcykgPiAwKSB7DQogICMgcXVlIGFwYXJlemNhIGVsIHJlc3VsdGFkbyBzaSBkYXRvcyBubyBlc3TDoSB2YWNpbw0KICBkYXRvc19mdWxsICU+JSBtdXRhdGUoYWNyb3NzKGMoYW5nZXI6dHJ1c3QpLCB+aWZlbHNlKC54Pj0xLDEsMCkpKSAlPiUgIA0KICBzdW1tYXJpemUoYWNyb3NzKGMoYW5nZXI6dHJ1c3QpLCB+c3VtKC54KSkpICU+JSANCiAgbXV0YXRlKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfigueCkvbnJvdyhkYXRvc19mdWxsKSoxMDApKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLG5hbWVzX3RvID0gImVtb3Rpb24iLCB2YWx1ZXNfdG8gPSAidmFsdWVzIikgJT4lIA0KICBmaWx0ZXIoIWVtb3Rpb24gJWluJSBjKCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIikpICU+JSANCiAgIGdncGxvdChhZXMoeT12YWx1ZXMsIHg9ZW1vdGlvbixmaWxsPWVtb3Rpb24pKSArDQpnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSwgcHJlc2VydmUgPSAic2luZ2xlIikpKyAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUodGl0dWxvKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiRW1vY2lvbmVzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQp9DQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQp0aXR1bG88LXBhc3RlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIGRlIix1c3VhcmlvLCJhIGxvIGxhcmdvIGRlbCB0aWVtcG8iKQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQogIGRhdG9zX2Z1bGwgJT4lICANCiAgbXV0YXRlKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfmlmZWxzZSgueD49MSwxLDApKSkgJT4lIG11dGF0ZShjcmVhdGVkX2F0PXltZF9obXMoY3JlYXRlZF9hdCkpICU+JSANCiAgZ3JvdXBfYnkobW9udGg9Zmxvb3JfZGF0ZShjcmVhdGVkX2F0LCJtb250aCIpKSAlPiUNCiAgc3VtbWFyaXplKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfnN1bSgueCkpLG49bigpKSAlPiUgDQogIG11dGF0ZShhY3Jvc3MoYyhhbmdlcjp0cnVzdCksIH4oLngpL24qMTAwKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoYW5nZXI6dHJ1c3QsbmFtZXNfdG8gPSAiZW1vdGlvbiIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSAlPiUgDQogIGZpbHRlcighZW1vdGlvbiAlaW4lIGMoInBvc2l0aXZlIiwibmVnYXRpdmUiKSkgJT4lICANCiAgZ2dwbG90KGFlcyh5PXZhbHVlcywgeD1tb250aCxjb2xvcj1lbW90aW9uKSkgKw0KICAgICAgICBnZW9tX2xpbmUoKSsNCiAgZ2d0aXRsZSh0aXR1bG8pICArIHlsYWIoIlBvcmNlbnRhamUgZGUgVHdlZXRzIikgKyB4bGFiKCJNZXMiKSsNCiAgdGhlbWVfbGlnaHQoKQ0KfQ0KDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0b3NfZnVsbCU+JSANCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUoUEFOID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBBTnxbUHBdYXJ0aWRvIFtBYV1jY2lbw7NvXW4gW05uXWFjaW9uYWwiKSwgMSwwKSwNCiAgICAgICAgICAgUFJJID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBSSSx8IFBSSSB8UFJJXFwufFtQcF1hcnRpZG8gW1JyXWV2b2x1Y2lvbmFyaW8gW0lpXW5zdGl0dWNpb25hbCIpLCAxLDApLA0KICAgICAgICAgICBQUkQgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiUFJEfA0KW1BwXWFydGlkbyBbZERdZSBbTGxdYSBbUnJdZXZvbHVjaVvDs09dbiBbRGRdZW1vY3JbQcOhXXRpY2EiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIFBUID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBUfFtQcF1hcnRpZG8gW2REXWVsIFtUdF1yYWJham8iKSwgMSwwKSwNCiAgICAgICAgICAgTUMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiTUN8W01tXW92aW1pZW50byBbQ2NdaXVkYWRhbm8iKSwgMSwwKSwNCiAgICAgICAgICAgUFYgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1BwXWFydGlkbyBbVnZdZXJkZSIpLCAxLDApKSU+JQ0KICAgc3VtbWFyaXplKGFjcm9zcyhjKFBBTjpQViksIH5zdW0oLngpKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgIGdncGxvdChhZXMoeT12YWx1ZXMsIHg9ZW1vdGlvbixmaWxsPWVtb3Rpb24pKSArDQpnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSwgcHJlc2VydmUgPSAic2luZ2xlIikpKyAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUoIk7Dum1lcm8gZGUgTWVuY2lvbmVzIHBvciBQYXJ0aWRvIFBvbMOtdGljbyIpICArIHlsYWIoIk7Dum1lcm8gZGUgVHdlZXRzIikgKyB4bGFiKCJQYXJ0aWRvcyBQb2zDrXRpY29zIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KDQp9DQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gRkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCiNFeHBvcnRhciBiYXNlIGNvbiBwYXJ0aWRvcw0KDQpiYXNlMjwtZGF0b3NfZnVsbCU+JSANCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUoUEFOID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBBTnxbUHBdYXJ0aWRvIFtBYV1jY2lbw7NvXW4gW05uXWFjaW9uYWwiKSwgMSwwKSwNCiAgICAgICAgICAgUFJJID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBSSSx8IFBSSSB8UFJJXFwufFtQcF1hcnRpZG8gW1JyXWV2b2x1Y2lvbmFyaW8gW0lpXW5zdGl0dWNpb25hbCIpLCAxLDApLA0KICAgICAgICAgICBQUkQgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiUFJEfA0KW1BwXWFydGlkbyBbZERdZSBbTGxdYSBbUnJdZXZvbHVjaVvDs09dbiBbRGRdZW1vY3JbQcOhXXRpY2EiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIFBUID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBUfFtQcF1hcnRpZG8gW2REXWVsIFtUdF1yYWJham8iKSwgMSwwKSwNCiAgICAgICAgICAgTUMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiTUN8W01tXW92aW1pZW50byBbQ2NdaXVkYWRhbm8iKSwgMSwwKSwNCiAgICAgICAgICAgUFYgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1BwXWFydGlkbyBbVnZdZXJkZSIpLCAxLDApKQ0KDQphPC1wYXN0ZTAoImRhdG9zX3BhcnRpZG9zIix1c3VhcmlvLCIuY3N2IikNCg0Kd3JpdGVfYXNfY3N2KGJhc2UyLCBhKQ0KDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gRkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCiNFbW9jaW9uZXMgcG9yIHBhcnRpZG8NCg0KcGFydGlkb3M8LWRhdG9zX2Z1bGwlPiUNCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUoUEFOID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBBTnxbUHBdYXJ0aWRvIFtBYV1jY2lbw7NvXW4gW05uXWFjaW9uYWwiKSwgMSwwKSwNCiAgICAgICAgICAgUFJJID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBSSSx8IFBSSSB8UFJJXFwufFtQcF1hcnRpZG8gW1JyXWV2b2x1Y2lvbmFyaW8gW0lpXW5zdGl0dWNpb25hbCIpLCAxLDApLA0KICAgICAgICAgICBQUkQgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiUFJEfA0KW1BwXWFydGlkbyBbZERdZSBbTGxdYSBbUnJdZXZvbHVjaVvDs09dbiBbRGRdZW1vY3JbQcOhXXRpY2EiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIFBUID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIlBUfFtQcF1hcnRpZG8gW2REXWVsIFtUdF1yYWJham8iKSwgMSwwKSwNCiAgICAgICAgICAgTUMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiTUN8W01tXW92aW1pZW50byBbQ2NdaXVkYWRhbm8iKSwgMSwwKSwNCiAgICAgICAgICAgUFYgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1BwXWFydGlkbyBbVnZdZXJkZSIpLCAxLDApKSU+JSANCiAgICAgICAgICAgZmlsdGVyKGlmX2FueShjKFBBTjpQViksIH4oLngpPT0xKSkgDQoNCg0Kbm9tYnJlczwtcGFydGlkb3MgJT4lIHNlbGVjdChQQU46UFYpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSAlPiUgY291bnQocHApICU+JSBzZWxlY3QocHApICU+JSBhc192ZWN0b3INCg0KZGF0YTIgPWRhdGEuZnJhbWUoKQ0KDQpmb3IoaSBpbiAxOmxlbmd0aChub21icmVzKSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCg0KaW5mbzwtcGFydGlkb3MgJT4lDQogIHBpdm90X2xvbmdlcihQQU46UFYsbmFtZXNfdG8gPSAicHAiLCB2YWx1ZXNfdG8gPSAidmFsdWVzIikgJT4lIA0KICBmaWx0ZXIocHA9PW5vbWJyZXNbaV0mdmFsdWVzPT0xKSAlPiUgY291bnQoc2VudGltaWVudG8pICU+JQ0KICAgICAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pICoxMDAscGFydGlkbz1ub21icmVzW2ldKQ0KDQpkYXRhMiA9IHJiaW5kKGRhdGEyLCBkYXRhLmZyYW1lIChpbmZvLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpKQ0KDQoNCiB9LCBlcnJvcj1mdW5jdGlvbihlKXtjYXQoIkVSUk9SIDoiLGNvbmRpdGlvbk1lc3NhZ2UoZSksICJcbiIpfSkNCg0KfQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IFRSVUUsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0YTIgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gc2VudGltaWVudG8pKSArDQpnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuOSwgcHJlc2VydmUgPSAic2luZ2xlIikpKyAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IlJkWWxCdSIpICsNCiAgICAgIGdndGl0bGUoIkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgcG9yIFBhcnRpZG8gUG9sw610aWNvIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlBhcnRpZG9zIFBvbMOtdGljb3MiKSt0aGVtZV9saWdodCgpICsNCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKw0KICAgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkNCn0NCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQpkYXRvc19mdWxsJT4lIA0KICBtdXRhdGUodGV4dCA9IHN0cl9yZXBsYWNlX2FsbCh0ZXh0LCAiaHR0cHM6Ly90LmNvL1tBLVphLXpcXGRdK3wmYW1wOyIsICIiKSkgJT4lIA0KICAgIG11dGF0ZShBTUxPID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIkFNTE8iKSwgMSwwKSwNCiAgICAgICAgICAgQmllbmVzdGFyID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltCYl1pZW5lc3RhciIpLCAxLDApLA0KICAgICAgICAgICBDVUFUUk9fVCA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICIjNFQiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIEZlbGlwZV9DYWxkZXJvbiA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbRmZdZWxpcGUgW0NjXWFsZGVyW2/Ds11uIiksIDEsMCksDQogICAgICAgICAgIFNhbXVlbF9HYXJjaWEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1NzXWFtdWVsIFtHZ11hcmNbacOtXWEiKSwgMSwwKSwNCiAgICAgICAgICAgVHJlbl9NYXlhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltUdF1yZW4gW01tXWF5YSIpLCAxLDApLA0KICAgICAgICAgICBEb3NfQm9jYXMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1JyXWVmaW5lclvDrWldYSBbRGRdb3MgW0JiXW9jYXN8W0RkXW9zIFtCYl1vY2FzIiksIDEsMCksDQogICAgICAgICAgICBBeW90emluYXBhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltBYV15b3R6aW5hcGEiKSwgMSwwKQ0KICAgICAgICAgICApJT4lDQogICBzdW1tYXJpemUoYWNyb3NzKGMoQU1MTzpBeW90emluYXBhKSwgfnN1bSgueCkpKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLG5hbWVzX3RvID0gImVtb3Rpb24iLCB2YWx1ZXNfdG8gPSAidmFsdWVzIikgJT4lIA0KICAgZ2dwbG90KGFlcyh5PXZhbHVlcywgeD1mY3RfcmVvcmRlcihlbW90aW9uLHZhbHVlcyksZmlsbD1lbW90aW9uKSkgKw0KZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJOw7ptZXJvIGRlIG1lbmNpb25lcyBwb3IgcGFsYWJyYSBjbGF2ZSIpICArIHlsYWIoIk7Dum1lcm8gZGUgVHdlZXRzIikgKyB4bGFiKCIiKSt0aGVtZV9saWdodCgpICsNCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpK2Nvb3JkX2ZsaXAoKX0NCg0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQojRXhwb3J0YXIgcGFsYWJyYXMgY2xhdmVzDQoNCnBhbGFicmFzX2NsYXZlczwtZGF0b3NfZnVsbCU+JSANCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUoQU1MTyA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJBTUxPIiksIDEsMCksDQogICAgICAgICAgIEJpZW5lc3RhciA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbQmJdaWVuZXN0YXIiKSwgMSwwKSwNCiAgICAgICAgICAgQ1VBVFJPX1QgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiIzRUIiksMSwwKSwNCiAgICAgICAgICAgTW9yZW5hID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltNbV1vcmVuYSIpLCAxLDApLA0KICAgICAgICAgICBGZWxpcGVfQ2FsZGVyb24gPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW0ZmXWVsaXBlIFtDY11hbGRlcltvw7NdbiIpLCAxLDApLA0KICAgICAgICAgICBTYW11ZWxfR2FyY2lhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltTc11hbXVlbCBbR2ddYXJjW2nDrV1hIiksIDEsMCksDQogICAgICAgICAgIFRyZW5fTWF5YSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbVHRdcmVuIFtNbV1heWEiKSwgMSwwKSwNCiAgICAgICAgICAgRG9zX0JvY2FzID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltScl1lZmluZXJbw61pXWEgW0RkXW9zIFtCYl1vY2FzfFtEZF1vcyBbQmJdb2NhcyIpLCAxLDApLA0KICAgICAgICAgICAgQXlvdHppbmFwYSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbQWFdeW90emluYXBhIiksIDEsMCkNCiAgICAgICAgICAgKQ0KDQphPC1wYXN0ZTAoImRhdG9zX3BhbGFicmFzX2NsYXZlcyIsdXN1YXJpbywiLmNzdiIpDQoNCndyaXRlX2FzX2NzdihwYWxhYnJhc19jbGF2ZXMsIGEpDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0Ka2V5X3dvcmRzPC1kYXRvc19mdWxsJT4lIA0KICBtdXRhdGUodGV4dCA9IHN0cl9yZXBsYWNlX2FsbCh0ZXh0LCAiaHR0cHM6Ly90LmNvL1tBLVphLXpcXGRdK3wmYW1wOyIsICIiKSkgJT4lIA0KICAgIG11dGF0ZShBTUxPID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIkFNTE8iKSwgMSwwKSwNCiAgICAgICAgICAgQmllbmVzdGFyID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltCYl1pZW5lc3RhciIpLCAxLDApLA0KICAgICAgICAgICBDVUFUUk9fVCA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICIjNFQiKSwxLDApLA0KICAgICAgICAgICBNb3JlbmEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW01tXW9yZW5hIiksIDEsMCksDQogICAgICAgICAgIEZlbGlwZV9DYWxkZXJvbiA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJbRmZdZWxpcGUgW0NjXWFsZGVyW2/Ds11uIiksIDEsMCksDQogICAgICAgICAgIFNhbXVlbF9HYXJjaWEgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1NzXWFtdWVsIFtHZ11hcmNbacOtXWEiKSwgMSwwKSwNCiAgICAgICAgICAgVHJlbl9NYXlhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltUdF1yZW4gW01tXWF5YSIpLCAxLDApLA0KICAgICAgICAgICBEb3NfQm9jYXMgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCAiW1JyXWVmaW5lclvDrWldYSBbRGRdb3MgW0JiXW9jYXN8W0RkXW9zIFtCYl1vY2FzIiksIDEsMCksDQogICAgICAgICAgICBBeW90emluYXBhID0gaWZlbHNlKHN0cl9kZXRlY3QodGV4dCwgIltBYV15b3R6aW5hcGEiKSwgMSwwKSklPiUgDQogICAgICAgICAgIGZpbHRlcihpZl9hbnkoYyhBTUxPOkF5b3R6aW5hcGEpLCB+KC54KT09MSkpIA0KICAgICAgICAgICANCg0KDQp0ZXJtaW5vczwta2V5X3dvcmRzICU+JSBzZWxlY3QoQU1MTzpBeW90emluYXBhKSAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSBldmVyeXRoaW5nKCksbmFtZXNfdG8gPSAicHAiLCB2YWx1ZXNfdG8gPSAidmFsdWVzIikgJT4lIGNvdW50KHBwKSAlPiUgc2VsZWN0KHBwKSAlPiUgYXNfdmVjdG9yDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gRkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQpkYXRhMyA9ZGF0YS5mcmFtZSgpDQoNCmZvcihpIGluIDE6bGVuZ3RoKHRlcm1pbm9zKSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCg0KaW5mbzwta2V5X3dvcmRzICU+JQ0KICBwaXZvdF9sb25nZXIoQU1MTzpBeW90emluYXBhLG5hbWVzX3RvID0gInBwIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgZmlsdGVyKHBwPT10ZXJtaW5vc1tpXSZ2YWx1ZXM9PTEpICU+JSBjb3VudChzZW50aW1pZW50bykgJT4lDQogICAgICBtdXRhdGUocHJvcCA9IG4gLyBzdW0obikgKjEwMCx0ZXJtaW5vPXRlcm1pbm9zW2ldKQ0KDQpkYXRhMyA9IHJiaW5kKGRhdGEzLCBkYXRhLmZyYW1lIChpbmZvLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpKQ0KDQoNCiB9LCBlcnJvcj1mdW5jdGlvbihlKXtjYXQoIkVSUk9SIDoiLGNvbmRpdGlvbk1lc3NhZ2UoZSksICJcbiIpfSkNCg0KfQ0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQpkYXRhMyAlPiUgDQpnZ3Bsb3QoYWVzKHRlcm1pbm8sIHByb3AsIGZpbGwgPSBzZW50aW1pZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyBwb3IgdMOpcm1pbm9zIGRlIGludGVyw6lzIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIlTDqXJtaW5vcyBkZSBJbnRlcsOpcyIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKX0NCg0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpkYXRhNSA9ZGF0YS5mcmFtZSgpDQoNCmZvcihpIGluIDE6bGVuZ3RoKHRlcm1pbm9zKSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCiAgICANCm48LWtleV93b3JkcyAlPiUNCiAgcGl2b3RfbG9uZ2VyKEFNTE86QXlvdHppbmFwYSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSU+JSANCiAgZmlsdGVyKHBwPT10ZXJtaW5vc1tpXSZ2YWx1ZXM9PTEpICAgIA0KICAgIA0KaW5mbzwtcGFsYWJyYXNfY2xhdmVzICU+JQ0KICBwaXZvdF9sb25nZXIoQU1MTzpBeW90emluYXBhLG5hbWVzX3RvID0gInBwIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpJT4lIA0KICBmaWx0ZXIocHA9PXRlcm1pbm9zW2ldJnZhbHVlcz09MSkgJT4lDQogIG11dGF0ZShhY3Jvc3MoYyhhbmdlcjp0cnVzdCksIH5pZmVsc2UoLng+PTEsMSwwKSkpICU+JSANCiAgc2VsZWN0KC1wb3NpdGl2ZSwtbmVnYXRpdmUpICU+JSANCiAgc3VtbWFyaXplKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfnN1bSgueCkpKSAlPiUgDQogIHBpdm90X2xvbmdlcihhbmdlcjp0cnVzdCxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgbXV0YXRlKHByb3AgPSB2YWx1ZXMgLyBucm93KG4pICoxMDAscGFydGlkbz10ZXJtaW5vc1tpXSkNCg0KZGF0YTUgPSByYmluZChkYXRhNSwgZGF0YS5mcmFtZSAoaW5mbywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSkNCg0KDQogfSwgZXJyb3I9ZnVuY3Rpb24oZSl7Y2F0KCJFUlJPUiA6Iixjb25kaXRpb25NZXNzYWdlKGUpLCAiXG4iKX0pDQoNCn0NCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KaWYgKG5yb3coZGF0b3MpID09IDApIHsNCiAgaW52aXNpYmxlKCkNCn0gZWxzZSBpZiAobnJvdyhkYXRvcykgPiAwKSB7DQogICMgcXVlIGFwYXJlemNhIGVsIHJlc3VsdGFkbyBzaSBkYXRvcyBubyBlc3TDoSB2YWNpbw0KICBkYXRhNSAlPiUgZmlsdGVyKGlzLm5hKHBhcnRpZG8pPT1GQUxTRSkgJT4lIG11dGF0ZShwcm9wPWlmZWxzZShpcy5uYShwcm9wKSwgMCxwcm9wKSkgJT4lIA0KICBmaWx0ZXIocHJvcCE9MCkgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gZW1vdGlvbikpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIHBvciB0w6lybWlub3MgZGUgaW50ZXLDqXMiKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiVMOpcm1pbm9zIGRlIEludGVyw6lzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQp9DQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQogIGN1c3RvbV9zdG9wX3dvcmRzIDwtIGJpbmRfcm93cyhzdG9wX3dvcmRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZnJhbWUod29yZCA9IHRtOjpzdG9wd29yZHMoInNwYW5pc2giKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGljb24gPSAiY3VzdG9tIikpICU+JSANCiAgYXNfdGliYmxlKCkgICU+JSANCiAgZmlsdGVyKGxleGljb249PSJjdXN0b20iKQ0KDQp0d2VldF93b3JkcyA8LSBkYXRvc19mdWxsICU+JQ0KICBmaWx0ZXIoIXN0cl9kZXRlY3QodGV4dCwgJ14iJykpICU+JQ0KICBtdXRhdGUodGV4dCA9IHN0cl9yZXBsYWNlX2FsbCh0ZXh0LCAiaHR0cHM6Ly90LmNvL1tBLVphLXpcXGRdK3wmYW1wOyIsICIiKSkgJT4lDQogIHVubmVzdF90b2tlbnMod29yZCwgdGV4dCkgJT4lDQogIGZpbHRlcighd29yZCAlaW4lIGN1c3RvbV9zdG9wX3dvcmRzJHdvcmQsDQogICAgICAgICBzdHJfZGV0ZWN0KHdvcmQsICJbYS16XSIpKQ0KDQp0d2VldF93b3JkcyAlPiUgY291bnQod29yZCxzb3J0PVRSVUUpJT4lIA0KbXV0YXRlKGxldHJhcz1uY2hhcih3b3JkKSkgJT4lIGZpbHRlcihsZXRyYXM+MSkgJT4lIA0KICBmaWx0ZXIoIXdvcmQgJWluJSBjKCJ0LmNvIiwiaHR0cCIsImPDs21vIiwic2kiLCJxdWnDqW4iLCJhc8OtIikgKSAlPiUgDQogIHNsaWNlX2hlYWQobj0yMCkgJT4lDQogIGdncGxvdChhZXMobixmY3RfcmVvcmRlcih3b3JkLG4pKSkrZ2VvbV9jb2woKSsNCiAgbGFicyh4ID0gImZyZWN1ZW5jaWEiLCB5ID0gInBhbGFicmFzIiwgZmlsbCA9ICIiKSsNCiAgZ2d0aXRsZSgiTGFzIDIwIHBhbGFicmFzIGNvbiBsYSBtYXlvciBmcmVjdWVuY2lhIikrDQogIHRoZW1lX2xpZ2h0KCkNCn0NCg0KDQoNCg0KDQoNCg0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpmcmVjdWVuY2lhX3BhbGFicmFzPC1kYXRvc19mdWxsICU+JQ0KICBmaWx0ZXIoIXN0cl9kZXRlY3QodGV4dCwgJ14iJykpICU+JQ0KICBtdXRhdGUodGV4dCA9IHN0cl9yZXBsYWNlX2FsbCh0ZXh0LCAiaHR0cHM6Ly90LmNvL1tBLVphLXpcXGRdK3wmYW1wOyIsICIiKSkgJT4lDQogIHVubmVzdF90b2tlbnMod29yZCwgdGV4dCkgJT4lDQogIGZpbHRlcighd29yZCAlaW4lIGN1c3RvbV9zdG9wX3dvcmRzJHdvcmQsDQogICAgICAgICBzdHJfZGV0ZWN0KHdvcmQsICJbYS16XSIpKSAlPiUgY291bnQod29yZCxzb3J0PVRSVUUpDQoNCmE8LXBhc3RlMCgiZnJlY3VlbmNpYV9wYWxhYnJhcyIsdXN1YXJpbywiLmNzdiIpDQoNCndyaXRlX2FzX2NzdihmcmVjdWVuY2lhX3BhbGFicmFzLCBhKQ0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI2xpbXBpYW5kbyBsYSBiYXNlIGRlIGRhdG9zDQoNCmRhdG9zX2Z1bGw8LWRhdG9zX2Z1bGwgJT4lIG11dGF0ZShzb3VyY2UgPSBzdHJfcmVwbGFjZV9hbGwoc291cmNlLCc8XFxzKiguKj8pXFxzKj4nLCAiIikpIA0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQojZmlsdHJvIGxvcyBkaXNwb3NpdGl2b3MgY29uIG1hcyBkZSAxMDAgcHVibGljYWNpb25lcy4gDQoNCmRldmljZXM8LWRhdG9zX2Z1bGwgJT4lIGNvdW50KHNvdXJjZSwgc29ydD1UUlVFKSAlPiUgbXV0YXRlKHBlcmMgPSBuIC8gbnJvdyhkYXRvc19mdWxsKSAqMTAwKSAlPiUNCiAgZmlsdGVyKG4+MTAwKSAlPiUgc2VsZWN0KHNvdXJjZSkgJT4lIGFzX3ZlY3RvcigpDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI01pcmVtb3MgY29tbyBzZSBjb21wb3J0YW4gZXN0YXMsIHBhcnRhbW9zIHBvciBsYXMgaG9yYXMgZW4gbGFzIHF1ZSBoYWNlbiBwdWJsaWNhY2lvbmVzDQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0b3NfZnVsbCAlPiUgDQogIGZpbHRlcihzb3VyY2UlaW4lIGMoZGV2aWNlcykpICU+JSANCiAgY291bnQoc291cmNlLCBob3VyID0gaG91cih3aXRoX3R6KGNyZWF0ZWRfYXQpKSkgJT4lDQogIG11dGF0ZShwZXJjZW50ID0gbiAvIHN1bShuKSkgJT4lDQogIGdncGxvdChhZXMoaG91ciwgcGVyY2VudCwgY29sb3IgPSBzb3VyY2UpKSArDQogIGdlb21fbGluZSgpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KCkpICtnZ3RpdGxlKCIlIGRlIHB1YmxpY2FjaW9uZXMgcG9yIGZ1ZW50ZSBhIGxvIGxhcmdvIGRlbCBkw61hIikrDQogIGxhYnMoeCA9ICJIb3JhIGRlbCBEw61hIiwNCiAgICAgICB5ID0gIiUgZGUgdHdlZXRzIiwNCiAgICAgICBjb2xvciA9ICIiKSt0aGVtZV9saWdodCgpDQp9DQoNCg0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IFRSVUUsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCiNNaXJlbW9zIGxvcyB0d2VldHMgYSBsbyBsYXJnbyBkZWwgdGllbXBvDQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0b3NfZnVsbCAlPiUgDQogICAgbXV0YXRlKGNyZWF0ZWRfYXQ9eW1kX2htcyhjcmVhdGVkX2F0KSkgJT4lIA0KZ3JvdXBfYnkobW9udGg9Zmxvb3JfZGF0ZShjcmVhdGVkX2F0LCJtb250aCIpKSAlPiUgY291bnQoc291cmNlKSAlPiUgDQogIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSoxMDApICU+JSAgDQogIGZpbHRlcihzb3VyY2UlaW4lIGMoZGV2aWNlcykpICU+JSANCiAgZ2dwbG90KGFlcyhtb250aCwgcHJvcCwgY29sb3IgPSBzb3VyY2UpKSArDQogIGdlb21fbGluZSgpICtnZ3RpdGxlKCIlIGRlIHB1YmxpY2FjaW9uZXMgcG9yIGZ1ZW50ZSBhIGxvIGxhcmdvIGRlbCB0aWVtcG8iKSsNCiAgbGFicyh4ID0gIk1lcyIsIHkgPSAiJSBkZSB0d2VldHMiLCBjb2xvciA9ICIiKSArdGhlbWVfbGlnaHQoKQ0KfQ0KDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KZGV2aWNlc1RPUDI8LWRhdG9zX2Z1bGwgJT4lIGNvdW50KHNvdXJjZSwgc29ydD1UUlVFKSAlPiUgbXV0YXRlKHBlcmMgPSBuIC8gbnJvdyhkYXRvc19mdWxsKSAqMTAwKSAlPiUNCiAgbXV0YXRlKHJhbms9ZGVuc2VfcmFuayhkZXNjKG4pKSkgJT4lICBzbGljZV9oZWFkKG49MikgJT4lIHNlbGVjdChzb3VyY2UpICU+JSBhc192ZWN0b3IoKQ0KDQpmaXJzdGRldmljZTwtZGF0b3NfZnVsbCAlPiUgY291bnQoc291cmNlLCBzb3J0PVRSVUUpICU+JSBtdXRhdGUocGVyYyA9IG4gLyBucm93KGRhdG9zX2Z1bGwpICoxMDApICU+JQ0KICBtdXRhdGUocmFuaz1kZW5zZV9yYW5rKGRlc2MobikpKSAlPiVmaWx0ZXIocmFuaz09MSkgJT4lIHNlbGVjdChzb3VyY2UpICU+JSBhc192ZWN0b3IoKQ0KICANCnNlY29uZGRldmljZTwtZGF0b3NfZnVsbCAlPiUgY291bnQoc291cmNlLCBzb3J0PVRSVUUpICU+JSBtdXRhdGUocGVyYyA9IG4gLyBucm93KGRhdG9zX2Z1bGwpICoxMDApJT4lDQogIG11dGF0ZShyYW5rPWRlbnNlX3JhbmsoZGVzYyhuKSkpICU+JWZpbHRlcihyYW5rPT0yKSAlPiUgc2VsZWN0KHNvdXJjZSkgJT4lIGFzX3ZlY3RvcigpDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KI2xpbXBpYW5kbyB0d2VldCB3b3Jkcw0KDQp0d2VldF93b3JkczwtdHdlZXRfd29yZHMgJT4lIG11dGF0ZShzb3VyY2UgPSBzdHJfcmVwbGFjZV9hbGwoc291cmNlLCc8XFxzKiguKj8pXFxzKj4nLCAiIikpIA0KDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQogIHJhdGlvczwtdHdlZXRfd29yZHMgJT4lDQogIGZpbHRlcihzb3VyY2UgJWluJSBjKGRldmljZXNUT1AyKSkgJT4lIA0KICBtdXRhdGUoc291cmNlID0gc3RyX3JlcGxhY2VfYWxsKHNvdXJjZSwiVHdpdHRlciBmb3IgfFR3aXR0ZXIgIiwgIiIpKSAlPiUgDQogIGNvdW50KHdvcmQsIHNvdXJjZSkgJT4lDQogIGZpbHRlcihzdW0obikgPj0gNSkgJT4lDQogIHNwcmVhZChzb3VyY2UsIG4sIGZpbGwgPSAwKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGVfZWFjaChmdW5zKCguICsgMSkgLyBzdW0oLiArIDEpKSwgLXdvcmQpICU+JQ0KICBtdXRhdGUobG9ncmF0aW8gPSBsb2cyKC5bWzJdXSAvIC5bWzNdXSkpICU+JQ0KICBhcnJhbmdlKGRlc2MobG9ncmF0aW8pKQ0KDQp0aXR1bG88LXBhc3RlMChzZWNvbmRkZXZpY2UsIiAvICIsZmlyc3RkZXZpY2UpDQoNCnJhdGlvcyAlPiUgZ3JvdXBfYnkoZGlyZWN0aW9uID0gbG9ncmF0aW8gPiAwKSAlPiUNCiAgbXV0YXRlKHNvdXJjZT1pZmVsc2UoZGlyZWN0aW9uPT1UUlVFLGZpcnN0ZGV2aWNlLHNlY29uZGRldmljZSkpJT4lIA0KICAgIG11dGF0ZShzb3VyY2UgPSBzdHJfcmVwbGFjZV9hbGwoc291cmNlLCJUd2l0dGVyIGZvciB8VHdpdHRlciAiLCAiIikpICU+JSANCiAgdG9wX24oMTUsIGFicyhsb2dyYXRpbykpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBsb2dyYXRpbykpICU+JQ0KICBncm91cF9ieShkaXJlY3Rpb24gPSBsb2dyYXRpbyA+IDApICU+JQ0KICBtdXRhdGUoYWJzb2x1dGU9YWJzKGxvZ3JhdGlvKSkgJT4lIA0KICAgIHVuZ3JvdXAoKSAlPiUNCiBhcnJhbmdlKGRlc2MoYWJzb2x1dGUpKSAlPiUgDQogIGdyb3VwX2J5KHNvdXJjZSkgJT4lIA0KICBzbGljZV9oZWFkKG49MTUpICU+JSANCg0KICBnZ3Bsb3QoYWVzKGxvZ3JhdGlvLCB3b3JkLGZpbGw9c291cmNlKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgbGFicyh4ID0gdGl0dWxvLCB5ID0gTlVMTCkrIA0KICBnZ3RpdGxlKCJQYWxhYnJhcyBtYXMgcHJvYmFibGVzIHBhcmEgbGFzIDIgZnVlbnRlcyBwcmluY2lwYWxlcyIpKw0KICB0aGVtZV9saWdodCgpDQp9DQoNCg0KDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRXJ9DQoNCnRpdHVsbzwtcGFzdGUoIkFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MgZGUiLHVzdWFyaW8sImVuIFR3aXR0ZXIgcG9yIGZ1ZW50ZSIpDQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0b3NfZnVsbCAlPiUgIGdyb3VwX2J5KHNvdXJjZSkgJT4lIA0KICBjb3VudChzZW50aW1pZW50bykgICU+JSANCiAgbXV0YXRlKHByb3AgPSBuIC8gc3VtKG4pICoxMDApICU+JSAgDQogIGZpbHRlcihzb3VyY2UlaW4lIGMoZGV2aWNlcykpICU+JSANCm11dGF0ZShzb3VyY2UgPSBzdHJfcmVwbGFjZV9hbGwoc291cmNlLCJUd2l0dGVyIGZvciB8VHdpdHRlciAiLCIiKSkgJT4lIA0KICAgICAgICBnZ3Bsb3QoYWVzKHk9cHJvcCwgeD1zb3VyY2UsZmlsbD1zZW50aW1pZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSh0aXR1bG8pICArIHlsYWIoIlBvcmNlbnRhamUgZGUgVHdlZXRzIikgKyB4bGFiKCJUaXBvcyBkZSBmdWVudGVzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQp9DQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0b3NfZnVsbCAlPiUNCiAgZmlsdGVyKCFzdHJfZGV0ZWN0KHRleHQsICdeIicpKSAlPiUNCiAgbXV0YXRlKA0KICAgICAgICBtZWRpYSA9IGlmZWxzZShzdHJfZGV0ZWN0KHRleHQsICJ0LmNvIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIkZvdG8vVmlkZW8iLCAiTm8gRm90by9WaWRlbyIpKSAlPiUgIGdyb3VwX2J5KG1lZGlhKSAlPiUgDQogIGNvdW50KHNlbnRpbWllbnRvKSAgJT4lIA0KICBtdXRhdGUocHJvcCA9IG4gLyBzdW0obikgKjEwMCkgJT4lICANCiAgICAgICAgZ2dwbG90KGFlcyh5PXByb3AsIHg9bWVkaWEsZmlsbD1zZW50aW1pZW50bykpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiVHdlZXRzIGNvbiBjb250ZW5pZG8gbXVsdGltZWRpYSB2cyB0d2VldHMgc2luIGNvbnRlbmlkbyBtdWx0aW1lZGlhIikgICsgeWxhYigiUG9yY2VudGFqZSBkZSBUd2VldHMiKSArIHhsYWIoIiIpK3RoZW1lX2xpZ2h0KCkgKw0KICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKQ0KfQ0KDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQogIGRhdGEzID1kYXRhLmZyYW1lKCkNCg0KZm9yKGkgaW4gMTpsZW5ndGgoa2V5KSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCg0KaW5mbzwtZGF0b3NfZnVsbCU+JSANCiAgbXV0YXRlKHRleHQgPSBzdHJfcmVwbGFjZV9hbGwodGV4dCwgImh0dHBzOi8vdC5jby9bQS1aYS16XFxkXSt8JmFtcDsiLCAiIikpICU+JSANCiAgICBtdXRhdGUodmFsdWUgPSBpZmVsc2Uoc3RyX2RldGVjdCh0ZXh0LCBrZXlbaV0pLCAxLDApLHBhbGFicmE9a2V5X2NsZWFuW2ldKQ0KDQpkYXRhMyA9IHJiaW5kKGRhdGEzLCBkYXRhLmZyYW1lIChpbmZvLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpKQ0KDQoNCiB9LCBlcnJvcj1mdW5jdGlvbihlKXtjYXQoIkVSUk9SIDoiLGNvbmRpdGlvbk1lc3NhZ2UoZSksICJcbiIpfSkNCg0KfQ0KfQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IFRSVUUsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCmlmIChucm93KGRhdG9zKSA9PSAwKSB7DQogIGludmlzaWJsZSgpDQp9IGVsc2UgaWYgKG5yb3coZGF0b3MpID4gMCkgew0KICAjIHF1ZSBhcGFyZXpjYSBlbCByZXN1bHRhZG8gc2kgZGF0b3Mgbm8gZXN0w6EgdmFjaW8NCiAgZGF0YTMgJT4lIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBwYWxhYnJhICx2YWx1ZXNfZnJvbSA9dmFsdWUpICU+JSBzdW1tYXJpemUoYWNyb3NzKGMoa2V5X2NsZWFuKSwgfnN1bSgueCkpKSAlPiUgICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSAgDQogIGdncGxvdChhZXMoeT12YWx1ZXMsIHg9ZmN0X3Jlb3JkZXIoZW1vdGlvbix2YWx1ZXMpLGZpbGw9ZW1vdGlvbikpICsNCmdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC45LCBwcmVzZXJ2ZSA9ICJzaW5nbGUiKSkrICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iUmRZbEJ1IikgKw0KICAgICAgZ2d0aXRsZSgiTsO6bWVybyBkZSBtZW5jaW9uZXMgcG9yIHBhbGFicmEgY2xhdmUiKSAgKyB5bGFiKCJOw7ptZXJvIGRlIFR3ZWV0cyIpICsgeGxhYigiIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArDQogICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpKStjb29yZF9mbGlwKCkNCn0NCg0KDQoNCg0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBGQUxTRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0Ka2V5X3dvcmRzPC1kYXRhMyAlPiUgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHBhbGFicmEgLHZhbHVlc19mcm9tID12YWx1ZSklPiUgDQogICAgICAgICAgIGZpbHRlcihpZl9hbnkoYyhrZXlfY2xlYW4pLCB+KC54KT09MSkpIA0KDQpkYXRhNCA9ZGF0YS5mcmFtZSgpDQoNCmZvcihpIGluIDE6bGVuZ3RoKGtleV9jbGVhbikpIHsgDQogIA0KICB0cnlDYXRjaCh7DQoNCmluZm88LWtleV93b3JkcyAlPiUNCiAgcGl2b3RfbG9uZ2VyKGMoa2V5X2NsZWFuKSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSAlPiUgDQogIGZpbHRlcihwcD09a2V5X2NsZWFuW2ldJnZhbHVlcz09MSkgJT4lIGNvdW50KHNlbnRpbWllbnRvKSAlPiUNCiAgICAgIG11dGF0ZShwcm9wID0gbiAvIHN1bShuKSAqMTAwLHRlcm1pbm89a2V5X2NsZWFuW2ldKQ0KDQpkYXRhNCA9IHJiaW5kKGRhdGE0LCBkYXRhLmZyYW1lIChpbmZvLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpKQ0KDQoNCiB9LCBlcnJvcj1mdW5jdGlvbihlKXtjYXQoIkVSUk9SIDoiLGNvbmRpdGlvbk1lc3NhZ2UoZSksICJcbiIpfSkNCg0KfQ0KYGBgDQoNCmBgYHtyLGluY2x1ZGUgPSBUUlVFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQppZiAobnJvdyhkYXRvcykgPT0gMCkgew0KICBpbnZpc2libGUoKQ0KfSBlbHNlIGlmIChucm93KGRhdG9zKSA+IDApIHsNCiAgIyBxdWUgYXBhcmV6Y2EgZWwgcmVzdWx0YWRvIHNpIGRhdG9zIG5vIGVzdMOhIHZhY2lvDQogIGRhdGE0ICU+JSANCmdncGxvdChhZXModGVybWlubywgcHJvcCwgZmlsbCA9IHNlbnRpbWllbnRvKSkgKw0KZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgc2VudGltaWVudG9zIHBvciB0w6lybWlub3MgZGUgaW50ZXLDqXMiKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiVMOpcm1pbm9zIGRlIEludGVyw6lzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQp9DQoNCg0KDQoNCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gRkFMU0UsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQoNCiNFeHBvcnRhciBwYWxhYnJhcyBjbGF2ZXMNCg0KcGFsYWJyYXNfY3VzdG9tPC1kYXRhMyAlPiUgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHBhbGFicmEgLHZhbHVlc19mcm9tID12YWx1ZSkNCg0KYTwtcGFzdGUwKCJkYXRvc19wYWxhYnJhc19jdXN0b20iLHVzdWFyaW8sIi5jc3YiKQ0KDQp3cml0ZV9hc19jc3YocGFsYWJyYXNfY3VzdG9tLCBhKQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpuPC1rZXlfd29yZHMgJT4lDQogIHBpdm90X2xvbmdlcihjKGtleV9jbGVhbiksbmFtZXNfdG8gPSAicHAiLCB2YWx1ZXNfdG8gPSAidmFsdWVzIiklPiUgDQogIGZpbHRlcihwcD09IkNPVklEIiZ2YWx1ZXM9PTEpDQoNCmluZm88LXBhbGFicmFzX2N1c3RvbSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGMoa2V5X2NsZWFuKSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSU+JSANCiAgZmlsdGVyKHBwPT0iQ09WSUQiJnZhbHVlcz09MSkgJT4lDQogIG11dGF0ZShhY3Jvc3MoYyhhbmdlcjp0cnVzdCksIH5pZmVsc2UoLng+PTEsMSwwKSkpICU+JSANCiAgc2VsZWN0KC1wb3NpdGl2ZSwtbmVnYXRpdmUpICU+JSANCiAgc3VtbWFyaXplKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfnN1bSgueCkpKSAlPiUgDQogIHBpdm90X2xvbmdlcihhbmdlcjp0cnVzdCxuYW1lc190byA9ICJlbW90aW9uIiwgdmFsdWVzX3RvID0gInZhbHVlcyIpICU+JSANCiAgbXV0YXRlKHByb3AgPSB2YWx1ZXMgLyBucm93KG4pICoxMDAscGFydGlkbz0iQ09WSUQiKQ0KDQpgYGANCg0KYGBge3IsaW5jbHVkZSA9IEZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpkYXRhNSA9ZGF0YS5mcmFtZSgpDQoNCmZvcihpIGluIDE6bGVuZ3RoKHRlcm1pbm9zKSkgeyANCiAgDQogIHRyeUNhdGNoKHsNCiAgICANCm48LWtleV93b3JkcyAlPiUNCiAgcGl2b3RfbG9uZ2VyKGMoa2V5X2NsZWFuKSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSU+JSANCiAgZmlsdGVyKHBwPT1rZXlfY2xlYW5baV0mdmFsdWVzPT0xKSAgICANCiAgICANCmluZm88LXBhbGFicmFzX2N1c3RvbSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGMoa2V5X2NsZWFuKSxuYW1lc190byA9ICJwcCIsIHZhbHVlc190byA9ICJ2YWx1ZXMiKSU+JSANCiAgZmlsdGVyKHBwPT1rZXlfY2xlYW5baV0mdmFsdWVzPT0xKSAlPiUNCiAgbXV0YXRlKGFjcm9zcyhjKGFuZ2VyOnRydXN0KSwgfmlmZWxzZSgueD49MSwxLDApKSkgJT4lIA0KICBzZWxlY3QoLXBvc2l0aXZlLC1uZWdhdGl2ZSkgJT4lIA0KICBzdW1tYXJpemUoYWNyb3NzKGMoYW5nZXI6dHJ1c3QpLCB+c3VtKC54KSkpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGFuZ2VyOnRydXN0LG5hbWVzX3RvID0gImVtb3Rpb24iLCB2YWx1ZXNfdG8gPSAidmFsdWVzIikgJT4lIA0KICBtdXRhdGUocHJvcCA9IHZhbHVlcyAvIG5yb3cobikgKjEwMCxwYXJ0aWRvPWtleV9jbGVhbltpXSkNCg0KZGF0YTUgPSByYmluZChkYXRhNSwgZGF0YS5mcmFtZSAoaW5mbywgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSkNCg0KDQogfSwgZXJyb3I9ZnVuY3Rpb24oZSl7Y2F0KCJFUlJPUiA6Iixjb25kaXRpb25NZXNzYWdlKGUpLCAiXG4iKX0pDQoNCn0NCmBgYA0KDQpgYGB7cixpbmNsdWRlID0gVFJVRSxlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KaWYgKG5yb3coZGF0b3MpID09IDApIHsNCiAgaW52aXNpYmxlKCkNCn0gZWxzZSBpZiAobnJvdyhkYXRvcykgPiAwKSB7DQogICMgcXVlIGFwYXJlemNhIGVsIHJlc3VsdGFkbyBzaSBkYXRvcyBubyBlc3TDoSB2YWNpbw0KICBkYXRhNSAlPiUgZmlsdGVyKGlzLm5hKHBhcnRpZG8pPT1GQUxTRSkgJT4lIG11dGF0ZShwcm9wPWlmZWxzZShpcy5uYShwcm9wKSwgMCxwcm9wKSkgJT4lIA0KICBmaWx0ZXIocHJvcCE9MCkgJT4lIA0KZ2dwbG90KGFlcyhwYXJ0aWRvLCBwcm9wLCBmaWxsID0gZW1vdGlvbikpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjksIHByZXNlcnZlID0gInNpbmdsZSIpKSsgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJSZFlsQnUiKSArDQogICAgICBnZ3RpdGxlKCJBbsOhbGlzaXMgZGUgZW1vY2lvbmVzIHBvciB0w6lybWlub3MgZGUgaW50ZXLDqXMiKSAgKyB5bGFiKCJQb3JjZW50YWplIGRlIFR3ZWV0cyIpICsgeGxhYigiVMOpcm1pbm9zIGRlIEludGVyw6lzIikrdGhlbWVfbGlnaHQoKSArDQogICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsNCiAgIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkpDQp9DQoNCg0KDQoNCmBgYA0K