Skip to content

Instantly share code, notes, and snippets.

@daniilyar-confyrm
Created July 19, 2016 21:49
Show Gist options
  • Save daniilyar-confyrm/986a97747589e75016acfa482435c44c to your computer and use it in GitHub Desktop.
Save daniilyar-confyrm/986a97747589e75016acfa482435c44c to your computer and use it in GitHub Desktop.
The full error stacktrace from browser
StackStorm Stanley
<html> <head> <title>Pecan - Application Error</title> <link rel="stylesheet" type="text/css" href="data:text/css;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwouc3ludGF4aGlnaGxpZ2h0ZXIgYSwKLnN5bnRheGhpZ2hsaWdodGVyIGRpdiwKLnN5bnRheGhpZ2hsaWdodGVyIGNvZGUsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgdHIsCi5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0Ym9keSwKLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRoZWFkLAouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgY2FwdGlvbiwKLnN5bnRheGhpZ2hsaWdodGVyIHRleHRhcmVhIHsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwIDAgIWltcG9ydGFudDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwIDAgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7CiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7CiAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgbGluZS1oZWlnaHQ6IDEuMWVtICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICByaWdodDogYXV0byAhaW1wb3J0YW50OwogIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7CiAgZm9udC1mYW1pbHk6ICJDb25zb2xhcyIsICJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCAiQ291cmllciBOZXciLCBDb3VyaWVyLCBtb25vc3BhY2UgIWltcG9ydGFudDsKICBmb250LXdlaWdodDogbm9ybWFsICFpbXBvcnRhbnQ7CiAgZm9udC1zdHlsZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKICBtaW4taGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50Owp9Cgouc3ludGF4aGlnaGxpZ2h0ZXIgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAxZW0gMCAxZW0gMCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogIG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7CiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuc291cmNlIHsKICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ib2xkIHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuaXRhbGljIHsKICBmb250LXN0eWxlOiBpdGFsaWMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmxpbmUgewogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgdGFibGUgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24gewogIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICBwYWRkaW5nOiAuNWVtIDAgMC41ZW0gMWVtICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmNvbnRhaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIHRkLmNvZGUgLmNvbnRhaW5lciB0ZXh0YXJlYSB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIGxlZnQ6IDAgIWltcG9ydGFudDsKICB0b3A6IDAgIWltcG9ydGFudDsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IHdoaXRlICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1sZWZ0OiAxZW0gIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgd2hpdGUtc3BhY2U6IHByZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5ndXR0ZXIgLmxpbmUgewogIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMCAwLjVlbSAwIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciB0YWJsZSB0ZC5jb2RlIC5saW5lIHsKICBwYWRkaW5nOiAwIDFlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5jb250YWluZXIgdGV4dGFyZWEsIC5zeW50YXhoaWdobGlnaHRlci5ub2d1dHRlciB0ZC5jb2RlIC5saW5lIHsKICBwYWRkaW5nLWxlZnQ6IDBlbSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5zaG93IHsKICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgdGFibGUgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHsKICBwYWRkaW5nOiAwLjFlbSAwLjhlbSAwZW0gMC44ZW0gIWltcG9ydGFudDsKICBmb250LXNpemU6IDFlbSAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogIGhlaWdodDogYXV0byAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgLnRvb2xiYXIgc3BhbiB7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CiAgbWFyZ2luLXJpZ2h0OiAxZW0gIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gYSB7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIHNwYW4gYS5leHBhbmRTb3VyY2UgewogIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciB7CiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgcmlnaHQ6IDFweCAhaW1wb3J0YW50OwogIHRvcDogMXB4ICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDExcHggIWltcG9ydGFudDsKICBoZWlnaHQ6IDExcHggIWltcG9ydGFudDsKICBmb250LXNpemU6IDEwcHggIWltcG9ydGFudDsKICB6LWluZGV4OiAxMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBzcGFuLnRpdGxlIHsKICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnRvb2xiYXIgYSB7CiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICBwYWRkaW5nLXRvcDogMXB4ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEuZXhwYW5kU291cmNlIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmllIHsKICBmb250LXNpemU6IC45ZW0gIWltcG9ydGFudDsKICBwYWRkaW5nOiAxcHggMCAxcHggMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciB7CiAgbGluZS1oZWlnaHQ6IDhweCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5pZSAudG9vbGJhciBhIHsKICBwYWRkaW5nLXRvcDogMHB4ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmFsdDEgLmNvbnRlbnQsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5hbHQyIC5jb250ZW50LAouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUuaGlnaGxpZ2h0ZWQgLm51bWJlciwKLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lLmhpZ2hsaWdodGVkLmFsdDEgLmNvbnRlbnQsCi5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAubGluZS5oaWdobGlnaHRlZC5hbHQyIC5jb250ZW50IHsKICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5udW1iZXIgewogIGNvbG9yOiAjYmJiYmJiICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5saW5lIC5jb250ZW50IHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnRvb2xiYXIgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgYSB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiwgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wbGFpbiBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbW1lbnRzIGEgewogIGNvbG9yOiAjMDA4MjAwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5zdHJpbmcsIC5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc3RyaW5nIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5rZXl3b3JkIHsKICBjb2xvcjogIzAwNjY5OSAhaW1wb3J0YW50OwogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5wcmVwcm9jZXNzb3IgewogIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC52YXJpYWJsZSB7CiAgY29sb3I6ICNhYTc3MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLnZhbHVlIHsKICBjb2xvcjogIzAwOTkwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuZnVuY3Rpb25zIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29uc3RhbnRzIHsKICBjb2xvcjogIzAwNjZjYyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuc2NyaXB0IHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IxLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMSBhIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IyLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMiBhIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5wcmludGluZyAuY29sb3IzLCAuc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmNvbG9yMyBhIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5icmVhaywgLnN5bnRheGhpZ2hsaWdodGVyLnByaW50aW5nIC5icmVhayBhIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQo%3D" /> <link rel="stylesheet" type="text/css" href="data:text/css;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwouc3ludGF4aGlnaGxpZ2h0ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDEgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmFsdDIgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmhpZ2hsaWdodGVkLmFsdDEsIC5zeW50YXhoaWdobGlnaHRlciAubGluZS5oaWdobGlnaHRlZC5hbHQyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5saW5lLmhpZ2hsaWdodGVkLm51bWJlciB7CiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIHRhYmxlIGNhcHRpb24gewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIHsKICBjb2xvcjogI2FmYWZhZiAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZ3V0dGVyIC5saW5lIHsKICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCAjNmNlMjZjICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5ndXR0ZXIgLmxpbmUuaGlnaGxpZ2h0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICM2Y2UyNmMgIWltcG9ydGFudDsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIucHJpbnRpbmcgLmxpbmUgLmNvbnRlbnQgewogIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlci5jb2xsYXBzZWQgewogIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciB7CiAgY29sb3I6IGJsdWUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50OwogIGJvcmRlcjogMXB4IHNvbGlkICM2Y2UyNmMgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIuY29sbGFwc2VkIC50b29sYmFyIGEgewogIGNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyLmNvbGxhcHNlZCAudG9vbGJhciBhOmhvdmVyIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIHsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kOiAjNmNlMjZjICFpbXBvcnRhbnQ7CiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC50b29sYmFyIGEgewogIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAudG9vbGJhciBhOmhvdmVyIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLnBsYWluIGEgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMsIC5zeW50YXhoaWdobGlnaHRlciAuY29tbWVudHMgYSB7CiAgY29sb3I6ICMwMDgyMDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnN0cmluZywgLnN5bnRheGhpZ2hsaWdodGVyIC5zdHJpbmcgYSB7CiAgY29sb3I6IGJsdWUgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLmtleXdvcmQgewogIGNvbG9yOiAjMDA2Njk5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC5wcmVwcm9jZXNzb3IgewogIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7Cn0KLnN5bnRheGhpZ2hsaWdodGVyIC52YXJpYWJsZSB7CiAgY29sb3I6ICNhYTc3MDAgIWltcG9ydGFudDsKfQouc3ludGF4aGlnaGxpZ2h0ZXIgLnZhbHVlIHsKICBjb2xvcjogIzAwOTkwMCAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuZnVuY3Rpb25zIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29uc3RhbnRzIHsKICBjb2xvcjogIzAwNjZjYyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuc2NyaXB0IHsKICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50OwogIGNvbG9yOiAjMDA2Njk5ICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZC1jb2xvcjogbm9uZSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IxLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMSBhIHsKICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IyLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMiBhIHsKICBjb2xvcjogI2ZmMTQ5MyAhaW1wb3J0YW50Owp9Ci5zeW50YXhoaWdobGlnaHRlciAuY29sb3IzLCAuc3ludGF4aGlnaGxpZ2h0ZXIgLmNvbG9yMyBhIHsKICBjb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KCi5zeW50YXhoaWdobGlnaHRlciAua2V5d29yZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKfQo%3D" /> <script type="text/javascript" src="data:application/javascript;base64,Ly8gWFJlZ0V4cCAxLjUuMQovLyAoYykgMjAwNy0yMDEyIFN0ZXZlbiBMZXZpdGhhbgovLyBNSVQgTGljZW5zZQovLyA8aHR0cDovL3hyZWdleHAuY29tPgovLyBQcm92aWRlcyBhbiBhdWdtZW50ZWQsIGV4dGVuc2libGUsIGNyb3NzLWJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgcmVndWxhciBleHByZXNzaW9ucywKLy8gaW5jbHVkaW5nIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3ludGF4LCBmbGFncywgYW5kIG1ldGhvZHMKCnZhciBYUmVnRXhwOwoKaWYgKFhSZWdFeHApIHsKICAgIC8vIEF2b2lkIHJ1bm5pbmcgdHdpY2UsIHNpbmNlIHRoYXQgd291bGQgYnJlYWsgcmVmZXJlbmNlcyB0byBuYXRpdmUgZ2xvYmFscwogICAgdGhyb3cgRXJyb3IoImNhbid0IGxvYWQgWFJlZ0V4cCB0d2ljZSBpbiB0aGUgc2FtZSBmcmFtZSIpOwp9CgovLyBSdW4gd2l0aGluIGFuIGFub255bW91cyBmdW5jdGlvbiB0byBwcm90ZWN0IHZhcmlhYmxlcyBhbmQgYXZvaWQgbmV3IGdsb2JhbHMKKGZ1bmN0aW9uICh1bmRlZmluZWQpIHsKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIENvbnN0cnVjdG9yCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIEFjY2VwdHMgYSBwYXR0ZXJuIGFuZCBmbGFnczsgcmV0dXJucyBhIG5ldywgZXh0ZW5kZWQgYFJlZ0V4cGAgb2JqZWN0LiBEaWZmZXJzIGZyb20gYSBuYXRpdmUKICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB0aGF0IGFkZGl0aW9uYWwgc3ludGF4IGFuZCBmbGFncyBhcmUgc3VwcG9ydGVkIGFuZCBjcm9zcy1icm93c2VyCiAgICAvLyBzeW50YXggaW5jb25zaXN0ZW5jaWVzIGFyZSBhbWVsaW9yYXRlZC4gYFhSZWdFeHAoL3JlZ2V4LylgIGNsb25lcyBhbiBleGlzdGluZyByZWdleCBhbmQKICAgIC8vIGNvbnZlcnRzIHRvIHR5cGUgWFJlZ0V4cAogICAgWFJlZ0V4cCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBmbGFncykgewogICAgICAgIHZhciBvdXRwdXQgPSBbXSwKICAgICAgICAgICAgY3VyclNjb3BlID0gWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgICAgICBwb3MgPSAwLAogICAgICAgICAgICBjb250ZXh0LCB0b2tlblJlc3VsdCwgbWF0Y2gsIGNociwgcmVnZXg7CgogICAgICAgIGlmIChYUmVnRXhwLmlzUmVnRXhwKHBhdHRlcm4pKSB7CiAgICAgICAgICAgIGlmIChmbGFncyAhPT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCJjYW4ndCBzdXBwbHkgZmxhZ3Mgd2hlbiBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFub3RoZXIiKTsKICAgICAgICAgICAgcmV0dXJuIGNsb25lKHBhdHRlcm4pOwogICAgICAgIH0KICAgICAgICAvLyBUb2tlbnMgYmVjb21lIHBhcnQgb2YgdGhlIHJlZ2V4IGNvbnN0cnVjdGlvbiBwcm9jZXNzLCBzbyBwcm90ZWN0IGFnYWluc3QgaW5maW5pdGUKICAgICAgICAvLyByZWN1cnNpb24gd2hlbiBhbiBYUmVnRXhwIGlzIGNvbnN0cnVjdGVkIHdpdGhpbiBhIHRva2VuIGhhbmRsZXIgb3IgdHJpZ2dlcgogICAgICAgIGlmIChpc0luc2lkZUNvbnN0cnVjdG9yKQogICAgICAgICAgICB0aHJvdyBFcnJvcigiY2FuJ3QgY2FsbCB0aGUgWFJlZ0V4cCBjb25zdHJ1Y3RvciB3aXRoaW4gdG9rZW4gZGVmaW5pdGlvbiBmdW5jdGlvbnMiKTsKCiAgICAgICAgZmxhZ3MgPSBmbGFncyB8fCAiIjsKICAgICAgICBjb250ZXh0ID0geyAvLyBgdGhpc2Agb2JqZWN0IGZvciBjdXN0b20gdG9rZW5zCiAgICAgICAgICAgIGhhc05hbWVkQ2FwdHVyZTogZmFsc2UsCiAgICAgICAgICAgIGNhcHR1cmVOYW1lczogW10sCiAgICAgICAgICAgIGhhc0ZsYWc6IGZ1bmN0aW9uIChmbGFnKSB7cmV0dXJuIGZsYWdzLmluZGV4T2YoZmxhZykgPiAtMTt9LAogICAgICAgICAgICBzZXRGbGFnOiBmdW5jdGlvbiAoZmxhZykge2ZsYWdzICs9IGZsYWc7fQogICAgICAgIH07CgogICAgICAgIHdoaWxlIChwb3MgPCBwYXR0ZXJuLmxlbmd0aCkgewogICAgICAgICAgICAvLyBDaGVjayBmb3IgY3VzdG9tIHRva2VucyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbgogICAgICAgICAgICB0b2tlblJlc3VsdCA9IHJ1blRva2VucyhwYXR0ZXJuLCBwb3MsIGN1cnJTY29wZSwgY29udGV4dCk7CgogICAgICAgICAgICBpZiAodG9rZW5SZXN1bHQpIHsKICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHRva2VuUmVzdWx0Lm91dHB1dCk7CiAgICAgICAgICAgICAgICBwb3MgKz0gKHRva2VuUmVzdWx0Lm1hdGNoWzBdLmxlbmd0aCB8fCAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBuYXRpdmUgbXVsdGljaGFyYWN0ZXIgbWV0YXNlcXVlbmNlcyAoZXhjbHVkaW5nIGNoYXJhY3RlciBjbGFzc2VzKSBhdAogICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IG5hdGl2LmV4ZWMuY2FsbChuYXRpdmVUb2tlbnNbY3VyclNjb3BlXSwgcGF0dGVybi5zbGljZShwb3MpKSkgewogICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKG1hdGNoWzBdKTsKICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjaHIgPSBwYXR0ZXJuLmNoYXJBdChwb3MpOwogICAgICAgICAgICAgICAgICAgIGlmIChjaHIgPT09ICJbIikKICAgICAgICAgICAgICAgICAgICAgICAgY3VyclNjb3BlID0gWFJlZ0V4cC5JTlNJREVfQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAiXSIpCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJTY29wZSA9IFhSZWdFeHAuT1VUU0lERV9DTEFTUzsKICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBvc2l0aW9uIG9uZSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChjaHIpOwogICAgICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZWdleCA9IFJlZ0V4cChvdXRwdXQuam9pbigiIiksIG5hdGl2LnJlcGxhY2UuY2FsbChmbGFncywgZmxhZ0NsaXAsICIiKSk7CiAgICAgICAgcmVnZXguX3hyZWdleHAgPSB7CiAgICAgICAgICAgIHNvdXJjZTogcGF0dGVybiwKICAgICAgICAgICAgY2FwdHVyZU5hbWVzOiBjb250ZXh0Lmhhc05hbWVkQ2FwdHVyZSA/IGNvbnRleHQuY2FwdHVyZU5hbWVzIDogbnVsbAogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlZ2V4OwogICAgfTsKCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBQdWJsaWMgcHJvcGVydGllcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBYUmVnRXhwLnZlcnNpb24gPSAiMS41LjEiOwoKICAgIC8vIFRva2VuIHNjb3BlIGJpdGZsYWdzCiAgICBYUmVnRXhwLklOU0lERV9DTEFTUyA9IDE7CiAgICBYUmVnRXhwLk9VVFNJREVfQ0xBU1MgPSAyOwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFByaXZhdGUgdmFyaWFibGVzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHZhciByZXBsYWNlbWVudFRva2VuID0gL1wkKD86KFxkXGQ/fFskJmAnXSl8eyhbJFx3XSspfSkvZywKICAgICAgICBmbGFnQ2xpcCA9IC9bXmdpbXldK3woW1xzXFNdKSg/PVtcc1xTXSpcMSkvZywgLy8gTm9ubmF0aXZlIGFuZCBkdXBsaWNhdGUgZmxhZ3MKICAgICAgICBxdWFudGlmaWVyID0gL14oPzpbPyorXXx7XGQrKD86LFxkKik/fSlcPz8vLAogICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSBmYWxzZSwKICAgICAgICB0b2tlbnMgPSBbXSwKICAgICAgICAvLyBDb3B5IG5hdGl2ZSBnbG9iYWxzIGZvciByZWZlcmVuY2UgKCJuYXRpdmUiIGlzIGFuIEVTMyByZXNlcnZlZCBrZXl3b3JkKQogICAgICAgIG5hdGl2ID0gewogICAgICAgICAgICBleGVjOiBSZWdFeHAucHJvdG90eXBlLmV4ZWMsCiAgICAgICAgICAgIHRlc3Q6IFJlZ0V4cC5wcm90b3R5cGUudGVzdCwKICAgICAgICAgICAgbWF0Y2g6IFN0cmluZy5wcm90b3R5cGUubWF0Y2gsCiAgICAgICAgICAgIHJlcGxhY2U6IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSwKICAgICAgICAgICAgc3BsaXQ6IFN0cmluZy5wcm90b3R5cGUuc3BsaXQKICAgICAgICB9LAogICAgICAgIGNvbXBsaWFudEV4ZWNOcGNnID0gbmF0aXYuZXhlYy5jYWxsKC8oKT8/LywgIiIpWzFdID09PSB1bmRlZmluZWQsIC8vIGNoZWNrIGBleGVjYCBoYW5kbGluZyBvZiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHMKICAgICAgICBjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB4ID0gL14vZzsKICAgICAgICAgICAgbmF0aXYudGVzdC5jYWxsKHgsICIiKTsKICAgICAgICAgICAgcmV0dXJuICF4Lmxhc3RJbmRleDsKICAgICAgICB9KCksCiAgICAgICAgaGFzTmF0aXZlWSA9IFJlZ0V4cC5wcm90b3R5cGUuc3RpY2t5ICE9PSB1bmRlZmluZWQsCiAgICAgICAgbmF0aXZlVG9rZW5zID0ge307CgogICAgLy8gYG5hdGl2ZVRva2Vuc2AgbWF0Y2ggbmF0aXZlIG11bHRpY2hhcmFjdGVyIG1ldGFzZXF1ZW5jZXMgb25seSAoaW5jbHVkaW5nIGRlcHJlY2F0ZWQgb2N0YWxzLAogICAgLy8gZXhjbHVkaW5nIGNoYXJhY3RlciBjbGFzc2VzKQogICAgbmF0aXZlVG9rZW5zW1hSZWdFeHAuSU5TSURFX0NMQVNTXSA9IC9eKD86XFwoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT98eFtcZEEtRmEtZl17Mn18dVtcZEEtRmEtZl17NH18Y1tBLVphLXpdfFtcc1xTXSkpLzsKICAgIG5hdGl2ZVRva2Vuc1tYUmVnRXhwLk9VVFNJREVfQ0xBU1NdID0gL14oPzpcXCg/OjAoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT8pP3xbMS05XVxkKnx4W1xkQS1GYS1mXXsyfXx1W1xkQS1GYS1mXXs0fXxjW0EtWmEtel18W1xzXFNdKXxcKFw/Wzo9IV18Wz8qK11cP3x7XGQrKD86LFxkKik/fVw/PykvOwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFB1YmxpYyBtZXRob2RzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIExldHMgeW91IGV4dGVuZCBvciBjaGFuZ2UgWFJlZ0V4cCBzeW50YXggYW5kIGNyZWF0ZSBjdXN0b20gZmxhZ3MuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5CiAgICAvLyB0aGUgWFJlZ0V4cCBsaWJyYXJ5IGFuZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgWFJlZ0V4cCBwbHVnaW5zLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvcgogICAgLy8gdXNlcnMgd2l0aCBhZHZhbmNlZCBrbm93bGVkZ2Ugb2YgSmF2YVNjcmlwdCdzIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXggYW5kIGJlaGF2aW9yLiBJdCBjYW4KICAgIC8vIGJlIGRpc2FibGVkIGJ5IGBYUmVnRXhwLmZyZWV6ZVRva2Vuc2AKICAgIFhSZWdFeHAuYWRkVG9rZW4gPSBmdW5jdGlvbiAocmVnZXgsIGhhbmRsZXIsIHNjb3BlLCB0cmlnZ2VyKSB7CiAgICAgICAgdG9rZW5zLnB1c2goewogICAgICAgICAgICBwYXR0ZXJuOiBjbG9uZShyZWdleCwgImciICsgKGhhc05hdGl2ZVkgPyAieSIgOiAiIikpLAogICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAogICAgICAgICAgICBzY29wZTogc2NvcGUgfHwgWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyIHx8IG51bGwKICAgICAgICB9KTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIHBhdHRlcm4gYW5kIGZsYWdzOyByZXR1cm5zIGFuIGV4dGVuZGVkIGBSZWdFeHBgIG9iamVjdC4gSWYgdGhlIHBhdHRlcm4gYW5kIGZsYWcKICAgIC8vIGNvbWJpbmF0aW9uIGhhcyBwcmV2aW91c2x5IGJlZW4gY2FjaGVkLCB0aGUgY2FjaGVkIGNvcHkgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSB0aGUgbmV3bHkKICAgIC8vIGNyZWF0ZWQgcmVnZXggaXMgY2FjaGVkCiAgICBYUmVnRXhwLmNhY2hlID0gZnVuY3Rpb24gKHBhdHRlcm4sIGZsYWdzKSB7CiAgICAgICAgdmFyIGtleSA9IHBhdHRlcm4gKyAiLyIgKyAoZmxhZ3MgfHwgIiIpOwogICAgICAgIHJldHVybiBYUmVnRXhwLmNhY2hlW2tleV0gfHwgKFhSZWdFeHAuY2FjaGVba2V5XSA9IFhSZWdFeHAocGF0dGVybiwgZmxhZ3MpKTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIGBSZWdFeHBgIGluc3RhbmNlOyByZXR1cm5zIGEgY29weSB3aXRoIHRoZSBgL2dgIGZsYWcgc2V0LiBUaGUgY29weSBoYXMgYSBmcmVzaAogICAgLy8gYGxhc3RJbmRleGAgKHNldCB0byB6ZXJvKS4gSWYgeW91IHdhbnQgdG8gY29weSBhIHJlZ2V4IHdpdGhvdXQgZm9yY2luZyB0aGUgYGdsb2JhbGAKICAgIC8vIHByb3BlcnR5LCB1c2UgYFhSZWdFeHAocmVnZXgpYC4gRG8gbm90IHVzZSBgUmVnRXhwKHJlZ2V4KWAgYmVjYXVzZSBpdCB3aWxsIG5vdCBwcmVzZXJ2ZQogICAgLy8gc3BlY2lhbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBuYW1lZCBjYXB0dXJlCiAgICBYUmVnRXhwLmNvcHlBc0dsb2JhbCA9IGZ1bmN0aW9uIChyZWdleCkgewogICAgICAgIHJldHVybiBjbG9uZShyZWdleCwgImciKTsKICAgIH07CgogICAgLy8gQWNjZXB0cyBhIHN0cmluZzsgcmV0dXJucyB0aGUgc3RyaW5nIHdpdGggcmVnZXggbWV0YWNoYXJhY3RlcnMgZXNjYXBlZC4gVGhlIHJldHVybmVkIHN0cmluZwogICAgLy8gY2FuIHNhZmVseSBiZSB1c2VkIGF0IGFueSBwb2ludCB3aXRoaW4gYSByZWdleCB0byBtYXRjaCB0aGUgcHJvdmlkZWQgbGl0ZXJhbCBzdHJpbmcuIEVzY2FwZWQKICAgIC8vIGNoYXJhY3RlcnMgYXJlIFsgXSB7IH0gKCApICogKyA/IC0gLiAsIFwgXiAkIHwgIyBhbmQgd2hpdGVzcGFjZQogICAgWFJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I1xzXS9nLCAiXFwkJiIpOwogICAgfTsKCiAgICAvLyBBY2NlcHRzIGEgc3RyaW5nIHRvIHNlYXJjaCwgcmVnZXggdG8gc2VhcmNoIHdpdGgsIHBvc2l0aW9uIHRvIHN0YXJ0IHRoZSBzZWFyY2ggd2l0aGluIHRoZQogICAgLy8gc3RyaW5nIChkZWZhdWx0OiAwKSwgYW5kIGFuIG9wdGlvbmFsIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG1hdGNoZXMgbXVzdCBzdGFydCBhdC1vci0KICAgIC8vIGFmdGVyIHRoZSBwb3NpdGlvbiBvciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIG9ubHkuIFRoaXMgZnVuY3Rpb24gaWdub3JlcyB0aGUgYGxhc3RJbmRleGAKICAgIC8vIG9mIHRoZSBwcm92aWRlZCByZWdleCBpbiBpdHMgb3duIGhhbmRsaW5nLCBidXQgdXBkYXRlcyB0aGUgcHJvcGVydHkgZm9yIGNvbXBhdGliaWxpdHkKICAgIFhSZWdFeHAuZXhlY0F0ID0gZnVuY3Rpb24gKHN0ciwgcmVnZXgsIHBvcywgYW5jaG9yZWQpIHsKICAgICAgICB2YXIgcjIgPSBjbG9uZShyZWdleCwgImciICsgKChhbmNob3JlZCAmJiBoYXNOYXRpdmVZKSA/ICJ5IiA6ICIiKSksCiAgICAgICAgICAgIG1hdGNoOwogICAgICAgIHIyLmxhc3RJbmRleCA9IHBvcyA9IHBvcyB8fCAwOwogICAgICAgIG1hdGNoID0gcjIuZXhlYyhzdHIpOyAvLyBSdW4gdGhlIGFsdGVyZWQgYGV4ZWNgIChyZXF1aXJlZCBmb3IgYGxhc3RJbmRleGAgZml4LCBldGMuKQogICAgICAgIGlmIChhbmNob3JlZCAmJiBtYXRjaCAmJiBtYXRjaC5pbmRleCAhPT0gcG9zKQogICAgICAgICAgICBtYXRjaCA9IG51bGw7CiAgICAgICAgaWYgKHJlZ2V4Lmdsb2JhbCkKICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gbWF0Y2ggPyByMi5sYXN0SW5kZXggOiAwOwogICAgICAgIHJldHVybiBtYXRjaDsKICAgIH07CgogICAgLy8gQnJlYWtzIHRoZSB1bnJlc3RvcmFibGUgbGluayB0byBYUmVnRXhwJ3MgcHJpdmF0ZSBsaXN0IG9mIHRva2VucywgdGhlcmVieSBwcmV2ZW50aW5nCiAgICAvLyBzeW50YXggYW5kIGZsYWcgY2hhbmdlcy4gU2hvdWxkIGJlIHJ1biBhZnRlciBYUmVnRXhwIGFuZCBhbnkgcGx1Z2lucyBhcmUgbG9hZGVkCiAgICBYUmVnRXhwLmZyZWV6ZVRva2VucyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBYUmVnRXhwLmFkZFRva2VuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aHJvdyBFcnJvcigiY2FuJ3QgcnVuIGFkZFRva2VuIGFmdGVyIGZyZWV6ZVRva2VucyIpOwogICAgICAgIH07CiAgICB9OwoKICAgIC8vIEFjY2VwdHMgYW55IHZhbHVlOyByZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgYFJlZ0V4cGAgb2JqZWN0LgogICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBgdHJ1ZWAgZm9yIHJlZ2V4IGxpdGVyYWxzIGFuZCByZWdleGVzIGNyZWF0ZWQgYnkgdGhlIGBYUmVnRXhwYAogICAgLy8gY29uc3RydWN0b3IuIFRoaXMgd29ya3MgY29ycmVjdGx5IGZvciB2YXJpYWJsZXMgY3JlYXRlZCBpbiBhbm90aGVyIGZyYW1lLCB3aGVuIGBpbnN0YW5jZW9mYAogICAgLy8gYW5kIGBjb25zdHJ1Y3RvcmAgY2hlY2tzIHdvdWxkIGZhaWwgdG8gd29yayBhcyBpbnRlbmRlZAogICAgWFJlZ0V4cC5pc1JlZ0V4cCA9IGZ1bmN0aW9uIChvKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gIltvYmplY3QgUmVnRXhwXSI7CiAgICB9OwoKICAgIC8vIEV4ZWN1dGVzIGBjYWxsYmFja2Agb25jZSBwZXIgbWF0Y2ggd2l0aGluIGBzdHJgLiBQcm92aWRlcyBhIHNpbXBsZXIgYW5kIGNsZWFuZXIgd2F5IHRvCiAgICAvLyBpdGVyYXRlIG92ZXIgcmVnZXggbWF0Y2hlcyBjb21wYXJlZCB0byB0aGUgdHJhZGl0aW9uYWwgYXBwcm9hY2hlcyBvZiBzdWJ2ZXJ0aW5nCiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBvciByZXBlYXRlZGx5IGNhbGxpbmcgYGV4ZWNgIHdpdGhpbiBhIGB3aGlsZWAgbG9vcAogICAgWFJlZ0V4cC5pdGVyYXRlID0gZnVuY3Rpb24gKHN0ciwgcmVnZXgsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICAgICAgdmFyIHIyID0gY2xvbmUocmVnZXgsICJnIiksCiAgICAgICAgICAgIGkgPSAtMSwgbWF0Y2g7CiAgICAgICAgd2hpbGUgKG1hdGNoID0gcjIuZXhlYyhzdHIpKSB7IC8vIFJ1biB0aGUgYWx0ZXJlZCBgZXhlY2AgKHJlcXVpcmVkIGZvciBgbGFzdEluZGV4YCBmaXgsIGV0Yy4pCiAgICAgICAgICAgIGlmIChyZWdleC5nbG9iYWwpCiAgICAgICAgICAgICAgICByZWdleC5sYXN0SW5kZXggPSByMi5sYXN0SW5kZXg7IC8vIERvaW5nIHRoaXMgdG8gZm9sbG93IGV4cGVjdGF0aW9ucyBpZiBgbGFzdEluZGV4YCBpcyBjaGVja2VkIHdpdGhpbiBgY2FsbGJhY2tgCiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgbWF0Y2gsICsraSwgc3RyLCByZWdleCk7CiAgICAgICAgICAgIGlmIChyMi5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KQogICAgICAgICAgICAgICAgcjIubGFzdEluZGV4Kys7CiAgICAgICAgfQogICAgICAgIGlmIChyZWdleC5nbG9iYWwpCiAgICAgICAgICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDA7CiAgICB9OwoKICAgIC8vIEFjY2VwdHMgYSBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIHJlZ2V4ZXM7IHJldHVybnMgdGhlIHJlc3VsdCBvZiB1c2luZyBlYWNoIHN1Y2Nlc3NpdmUgcmVnZXgKICAgIC8vIHRvIHNlYXJjaCB3aXRoaW4gdGhlIG1hdGNoZXMgb2YgdGhlIHByZXZpb3VzIHJlZ2V4LiBUaGUgYXJyYXkgb2YgcmVnZXhlcyBjYW4gYWxzbyBjb250YWluCiAgICAvLyBvYmplY3RzIHdpdGggYHJlZ2V4YCBhbmQgYGJhY2tyZWZgIHByb3BlcnRpZXMsIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIG9yIG51bWJlcmVkIGJhY2stCiAgICAvLyByZWZlcmVuY2VzIHNwZWNpZmllZCBhcmUgcGFzc2VkIGZvcndhcmQgdG8gdGhlIG5leHQgcmVnZXggb3IgcmV0dXJuZWQuIEUuZy46CiAgICAvLyB2YXIgeHJlZ2V4cEltZ0ZpbGVOYW1lcyA9IFhSZWdFeHAubWF0Y2hDaGFpbihodG1sLCBbCiAgICAvLyAgICAge3JlZ2V4OiAvPGltZ1xiKFtePl0rKT4vaSwgYmFja3JlZjogMX0sIC8vIDxpbWc%2BIHRhZyBhdHRyaWJ1dGVzCiAgICAvLyAgICAge3JlZ2V4OiBYUmVnRXhwKCcoP2l4KSBcXHMgc3JjPSIgKD88c3JjPiBbXiJdKyApJyksIGJhY2tyZWY6ICJzcmMifSwgLy8gc3JjIGF0dHJpYnV0ZSB2YWx1ZXMKICAgIC8vICAgICB7cmVnZXg6IFhSZWdFeHAoIl5odHRwOi8veHJlZ2V4cFxcLmNvbSgvW14jP10rKSIsICJpIiksIGJhY2tyZWY6IDF9LCAvLyB4cmVnZXhwLmNvbSBwYXRocwogICAgLy8gICAgIC9bXlwvXSskLyAvLyBmaWxlbmFtZXMgKHN0cmlwIGRpcmVjdG9yeSBwYXRocykKICAgIC8vIF0pOwogICAgWFJlZ0V4cC5tYXRjaENoYWluID0gZnVuY3Rpb24gKHN0ciwgY2hhaW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVjdXJzZUNoYWluICh2YWx1ZXMsIGxldmVsKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gY2hhaW5bbGV2ZWxdLnJlZ2V4ID8gY2hhaW5bbGV2ZWxdIDoge3JlZ2V4OiBjaGFpbltsZXZlbF19LAogICAgICAgICAgICAgICAgcmVnZXggPSBjbG9uZShpdGVtLnJlZ2V4LCAiZyIpLAogICAgICAgICAgICAgICAgbWF0Y2hlcyA9IFtdLCBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBYUmVnRXhwLml0ZXJhdGUodmFsdWVzW2ldLCByZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGl0ZW0uYmFja3JlZiA/IChtYXRjaFtpdGVtLmJhY2tyZWZdIHx8ICIiKSA6IG1hdGNoWzBdKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAoKGxldmVsID09PSBjaGFpbi5sZW5ndGggLSAxKSB8fCAhbWF0Y2hlcy5sZW5ndGgpID8KICAgICAgICAgICAgICAgIG1hdGNoZXMgOiByZWN1cnNlQ2hhaW4obWF0Y2hlcywgbGV2ZWwgKyAxKTsKICAgICAgICB9KFtzdHJdLCAwKTsKICAgIH07CgoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyAgTmV3IFJlZ0V4cCBwcm90b3R5cGUgbWV0aG9kcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgYW5kIGFyZ3VtZW50cyBhcnJheTsgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGV4ZWNgIHdpdGggdGhlCiAgICAvLyBmaXJzdCB2YWx1ZSBpbiB0aGUgYXJndW1lbnRzIGFycmF5LiB0aGUgY29udGV4dCBpcyBpZ25vcmVkIGJ1dCBpcyBhY2NlcHRlZCBmb3IgY29uZ3J1aXR5CiAgICAvLyB3aXRoIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgCiAgICBSZWdFeHAucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKGNvbnRleHQsIGFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5leGVjKGFyZ3NbMF0pOwogICAgfTsKCiAgICAvLyBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgYW5kIHN0cmluZzsgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGV4ZWNgIHdpdGggdGhlIHByb3ZpZGVkCiAgICAvLyBzdHJpbmcuIHRoZSBjb250ZXh0IGlzIGlnbm9yZWQgYnV0IGlzIGFjY2VwdGVkIGZvciBjb25ncnVpdHkgd2l0aCBgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxgCiAgICBSZWdFeHAucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoY29udGV4dCwgc3RyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZXhlYyhzdHIpOwogICAgfTsKCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBPdmVycmlkZW4gbmF0aXZlIG1ldGhvZHMKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gQWRkcyBuYW1lZCBjYXB0dXJlIHN1cHBvcnQgKHdpdGggYmFja3JlZmVyZW5jZXMgcmV0dXJuZWQgYXMgYHJlc3VsdC5uYW1lYCksIGFuZCBmaXhlcyB0d28KICAgIC8vIGNyb3NzLWJyb3dzZXIgaXNzdWVzIHBlciBFUzM6CiAgICAvLyAtIENhcHR1cmVkIHZhbHVlcyBmb3Igbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBgdW5kZWZpbmVkYCwKICAgIC8vICAgcmF0aGVyIHRoYW4gdGhlIGVtcHR5IHN0cmluZy4KICAgIC8vIC0gYGxhc3RJbmRleGAgc2hvdWxkIG5vdCBiZSBpbmNyZW1lbnRlZCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzLgogICAgUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKHN0cikgewogICAgICAgIHZhciBtYXRjaCwgbmFtZSwgcjIsIG9yaWdMYXN0SW5kZXg7CiAgICAgICAgaWYgKCF0aGlzLmdsb2JhbCkKICAgICAgICAgICAgb3JpZ0xhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4OwogICAgICAgIG1hdGNoID0gbmF0aXYuZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYCBmb3IKICAgICAgICAgICAgLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzCiAgICAgICAgICAgIGlmICghY29tcGxpYW50RXhlY05wY2cgJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBpbmRleE9mKG1hdGNoLCAiIikgPiAtMSkgewogICAgICAgICAgICAgICAgcjIgPSBSZWdFeHAodGhpcy5zb3VyY2UsIG5hdGl2LnJlcGxhY2UuY2FsbChnZXROYXRpdmVGbGFncyh0aGlzKSwgImciLCAiIikpOwogICAgICAgICAgICAgICAgLy8gVXNpbmcgYHN0ci5zbGljZShtYXRjaC5pbmRleClgIHJhdGhlciB0aGFuIGBtYXRjaFswXWAgaW4gY2FzZSBsb29rYWhlYWQgYWxsb3dlZAogICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgZHVlIHRvIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgbWF0Y2gKICAgICAgICAgICAgICAgIG5hdGl2LnJlcGxhY2UuY2FsbCgoc3RyICsgIiIpLnNsaWNlKG1hdGNoLmluZGV4KSwgcjIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQXR0YWNoIG5hbWVkIGNhcHR1cmUgcHJvcGVydGllcwogICAgICAgICAgICBpZiAodGhpcy5feHJlZ2V4cCAmJiB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lc1tpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbbmFtZV0gPSBtYXRjaFtpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBGaXggYnJvd3NlcnMgdGhhdCBpbmNyZW1lbnQgYGxhc3RJbmRleGAgYWZ0ZXIgemVyby1sZW5ndGggbWF0Y2hlcwogICAgICAgICAgICBpZiAoIWNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiB0aGlzLmdsb2JhbCAmJiAhbWF0Y2hbMF0ubGVuZ3RoICYmICh0aGlzLmxhc3RJbmRleCA%2BIG1hdGNoLmluZGV4KSkKICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5nbG9iYWwpCiAgICAgICAgICAgIHRoaXMubGFzdEluZGV4ID0gb3JpZ0xhc3RJbmRleDsgLy8gRml4IElFLCBPcGVyYSBidWcgKGxhc3QgdGVzdGVkIElFIDkuMC41LCBPcGVyYSAxMS42MSBvbiBXaW5kb3dzKQogICAgICAgIHJldHVybiBtYXRjaDsKICAgIH07CgogICAgLy8gRml4IGJyb3dzZXIgYnVncyBpbiBuYXRpdmUgbWV0aG9kCiAgICBSZWdFeHAucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgLy8gVXNlIHRoZSBuYXRpdmUgYGV4ZWNgIHRvIHNraXAgc29tZSBwcm9jZXNzaW5nIG92ZXJoZWFkLCBldmVuIHRob3VnaCB0aGUgYWx0ZXJlZAogICAgICAgIC8vIGBleGVjYCB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIGBsYXN0SW5kZXhgIGZpeGVzCiAgICAgICAgdmFyIG1hdGNoLCBvcmlnTGFzdEluZGV4OwogICAgICAgIGlmICghdGhpcy5nbG9iYWwpCiAgICAgICAgICAgIG9yaWdMYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDsKICAgICAgICBtYXRjaCA9IG5hdGl2LmV4ZWMuY2FsbCh0aGlzLCBzdHIpOwogICAgICAgIC8vIEZpeCBicm93c2VycyB0aGF0IGluY3JlbWVudCBgbGFzdEluZGV4YCBhZnRlciB6ZXJvLWxlbmd0aCBtYXRjaGVzCiAgICAgICAgaWYgKG1hdGNoICYmICFjb21wbGlhbnRMYXN0SW5kZXhJbmNyZW1lbnQgJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCiAgICAgICAgICAgIHRoaXMubGFzdEluZGV4LS07CiAgICAgICAgaWYgKCF0aGlzLmdsb2JhbCkKICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBvcmlnTGFzdEluZGV4OyAvLyBGaXggSUUsIE9wZXJhIGJ1ZyAobGFzdCB0ZXN0ZWQgSUUgOS4wLjUsIE9wZXJhIDExLjYxIG9uIFdpbmRvd3MpCiAgICAgICAgcmV0dXJuICEhbWF0Y2g7CiAgICB9OwoKICAgIC8vIEFkZHMgbmFtZWQgY2FwdHVyZSBzdXBwb3J0IGFuZCBmaXhlcyBicm93c2VyIGJ1Z3MgaW4gbmF0aXZlIG1ldGhvZAogICAgU3RyaW5nLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChyZWdleCkgewogICAgICAgIGlmICghWFJlZ0V4cC5pc1JlZ0V4cChyZWdleCkpCiAgICAgICAgICAgIHJlZ2V4ID0gUmVnRXhwKHJlZ2V4KTsgLy8gTmF0aXZlIGBSZWdFeHBgCiAgICAgICAgaWYgKHJlZ2V4Lmdsb2JhbCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmF0aXYubWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gMDsgLy8gRml4IElFIGJ1ZwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVnZXguZXhlYyh0aGlzKTsgLy8gUnVuIHRoZSBhbHRlcmVkIGBleGVjYAogICAgfTsKCiAgICAvLyBBZGRzIHN1cHBvcnQgZm9yIGAke259YCB0b2tlbnMgZm9yIG5hbWVkIGFuZCBudW1iZXJlZCBiYWNrcmVmZXJlbmNlcyBpbiByZXBsYWNlbWVudCB0ZXh0LAogICAgLy8gYW5kIHByb3ZpZGVzIG5hbWVkIGJhY2tyZWZlcmVuY2VzIHRvIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhcyBgYXJndW1lbnRzWzBdLm5hbWVgLiBBbHNvCiAgICAvLyBmaXhlcyBjcm9zcy1icm93c2VyIGRpZmZlcmVuY2VzIGluIHJlcGxhY2VtZW50IHRleHQgc3ludGF4IHdoZW4gcGVyZm9ybWluZyBhIHJlcGxhY2VtZW50CiAgICAvLyB1c2luZyBhIG5vbnJlZ2V4IHNlYXJjaCB2YWx1ZSwgYW5kIHRoZSB2YWx1ZSBvZiByZXBsYWNlbWVudCByZWdleGVzJyBgbGFzdEluZGV4YCBwcm9wZXJ0eQogICAgLy8gZHVyaW5nIHJlcGxhY2VtZW50IGl0ZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgc3VwcG9ydCBTcGlkZXJNb25rZXkncyBwcm9wcmlldGFyeQogICAgLy8gdGhpcmQgKGBmbGFnc2ApIHBhcmFtZXRlcgogICAgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gKHNlYXJjaCwgcmVwbGFjZW1lbnQpIHsKICAgICAgICB2YXIgaXNSZWdleCA9IFhSZWdFeHAuaXNSZWdFeHAoc2VhcmNoKSwKICAgICAgICAgICAgY2FwdHVyZU5hbWVzLCByZXN1bHQsIHN0ciwgb3JpZ0xhc3RJbmRleDsKCiAgICAgICAgLy8gVGhlcmUgYXJlIHRvbyBtYW55IGNvbWJpbmF0aW9ucyBvZiBzZWFyY2gvcmVwbGFjZW1lbnQgdHlwZXMvdmFsdWVzIGFuZCBicm93c2VyIGJ1Z3MgdGhhdAogICAgICAgIC8vIHByZWNsdWRlIHBhc3NpbmcgdG8gbmF0aXZlIGByZXBsYWNlYCwgc28gZG9uJ3QgdHJ5CiAgICAgICAgLy9pZiAoLi4uKQogICAgICAgIC8vICAgIHJldHVybiBuYXRpdi5yZXBsYWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIGlmIChpc1JlZ2V4KSB7CiAgICAgICAgICAgIGlmIChzZWFyY2guX3hyZWdleHApCiAgICAgICAgICAgICAgICBjYXB0dXJlTmFtZXMgPSBzZWFyY2guX3hyZWdleHAuY2FwdHVyZU5hbWVzOyAvLyBBcnJheSBvciBgbnVsbGAKICAgICAgICAgICAgaWYgKCFzZWFyY2guZ2xvYmFsKQogICAgICAgICAgICAgICAgb3JpZ0xhc3RJbmRleCA9IHNlYXJjaC5sYXN0SW5kZXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VhcmNoID0gc2VhcmNoICsgIiI7IC8vIFR5cGUgY29udmVyc2lvbgogICAgICAgIH0KCiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXBsYWNlbWVudCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gbmF0aXYucmVwbGFjZS5jYWxsKHRoaXMgKyAiIiwgc2VhcmNoLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZU5hbWVzKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBgYXJndW1lbnRzWzBdYCBzdHJpbmcgcHJpbWl0aXZlIHRvIGEgU3RyaW5nIG9iamVjdCB3aGljaCBjYW4gc3RvcmUgcHJvcGVydGllcwogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXSA9IG5ldyBTdHJpbmcoYXJndW1lbnRzWzBdKTsKICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBuYW1lZCBiYWNrcmVmZXJlbmNlcyBvbiBgYXJndW1lbnRzWzBdYAogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FwdHVyZU5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlTmFtZXNbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bY2FwdHVyZU5hbWVzW2ldXSA9IGFyZ3VtZW50c1tpICsgMV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gVXBkYXRlIGBsYXN0SW5kZXhgIGJlZm9yZSBjYWxsaW5nIGByZXBsYWNlbWVudGAgKGZpeCBicm93c2VycykKICAgICAgICAgICAgICAgIGlmIChpc1JlZ2V4ICYmIHNlYXJjaC5nbG9iYWwpCiAgICAgICAgICAgICAgICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMl0gKyBhcmd1bWVudHNbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ciA9IHRoaXMgKyAiIjsgLy8gVHlwZSBjb252ZXJzaW9uLCBzbyBgYXJnc1thcmdzLmxlbmd0aCAtIDFdYCB3aWxsIGJlIGEgc3RyaW5nIChnaXZlbiBub25zdHJpbmcgYHRoaXNgKQogICAgICAgICAgICByZXN1bHQgPSBuYXRpdi5yZXBsYWNlLmNhbGwoc3RyLCBzZWFyY2gsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOyAvLyBLZWVwIHRoaXMgZnVuY3Rpb24ncyBgYXJndW1lbnRzYCBhdmFpbGFibGUgdGhyb3VnaCBjbG9zdXJlCiAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXYucmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50ICsgIiIsIHJlcGxhY2VtZW50VG9rZW4sIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyZWQgYmFja3JlZmVyZW5jZSAod2l0aG91dCBkZWxpbWl0ZXJzKSBvciBzcGVjaWFsIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiQiOiByZXR1cm4gIiQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJiI6IHJldHVybiBhcmdzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiYCI6IHJldHVybiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0uc2xpY2UoMCwgYXJnc1thcmdzLmxlbmd0aCAtIDJdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiciOiByZXR1cm4gYXJnc1thcmdzLmxlbmd0aCAtIDFdLnNsaWNlKGFyZ3NbYXJncy5sZW5ndGggLSAyXSArIGFyZ3NbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlcmVkIGJhY2tyZWZlcmVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkb2VzICIkMTAiIG1lYW4/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBCYWNrcmVmZXJlbmNlIDEwLCBpZiAxMCBvciBtb3JlIGNhcHR1cmluZyBncm91cHMgZXhpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgMSBmb2xsb3dlZCBieSAiMCIsIGlmIDEtOSBjYXB0dXJpbmcgZ3JvdXBzIGV4aXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBPdGhlcndpc2UsIGl0J3MgdGhlIHN0cmluZyAiJDEwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gbm90ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2VzIGNhbm5vdCBiZSBtb3JlIHRoYW4gdHdvIGRpZ2l0cyAoZW5mb3JjZWQgYnkgYHJlcGxhY2VtZW50VG9rZW5gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gIiQwMSIgaXMgZXF1aXZhbGVudCB0byAiJDEiIGlmIGEgY2FwdHVyaW5nIGdyb3VwIGV4aXN0cywgb3RoZXJ3aXNlIGl0J3MgdGhlIHN0cmluZyAiJDAxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gVGhlcmUgaXMgbm8gIiQwIiB0b2tlbiAoIiQmIiBpcyB0aGUgZW50aXJlIG1hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXRlcmFsTnVtYmVycyA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxID0gKyQxOyAvLyBUeXBlIGNvbnZlcnNpb247IGRyb3AgbGVhZGluZyB6ZXJvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkMSkgLy8gYCQxYCB3YXMgIjAiIG9yICIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkMSA%2BIGFyZ3MubGVuZ3RoIC0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsTnVtYmVycyA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2UuY2FsbCgkMSwgLTEpICsgbGl0ZXJhbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxID0gTWF0aC5mbG9vcigkMSAvIDEwKTsgLy8gRHJvcCB0aGUgbGFzdCBkaWdpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCQxID8gYXJnc1skMV0gfHwgIiIgOiAiJCIpICsgbGl0ZXJhbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBiYWNrcmVmZXJlbmNlIG9yIGRlbGltaXRlZCBudW1iZXJlZCBiYWNrcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkb2VzICIke259IiBtZWFuPwogICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgdG8gbnVtYmVyZWQgY2FwdHVyZSBuLiBUd28gZGlmZmVyZW5jZXMgZnJvbSAiJG4iOgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0gbiBjYW4gYmUgbW9yZSB0aGFuIHR3byBkaWdpdHMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtIEJhY2tyZWZlcmVuY2UgMCBpcyBhbGxvd2VkLCBhbmQgaXMgdGhlIGVudGlyZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAvLyAtIEJhY2tyZWZlcmVuY2UgdG8gbmFtZWQgY2FwdHVyZSBuLCBpZiBpdCBleGlzdHMgYW5kIGlzIG5vdCBhIG51bWJlciBvdmVycmlkZGVuIGJ5IG51bWJlcmVkIGNhcHR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBPdGhlcndpc2UsIGl0J3MgdGhlIHN0cmluZyAiJHtufSIKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSArJDI7IC8vIFR5cGUgY29udmVyc2lvbjsgZHJvcCBsZWFkaW5nIHplcm9zCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIDw9IGFyZ3MubGVuZ3RoIC0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW25dOwogICAgICAgICAgICAgICAgICAgICAgICBuID0gY2FwdHVyZU5hbWVzID8gaW5kZXhPZihjYXB0dXJlTmFtZXMsICQyKSA6IC0xOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA%2BIC0xID8gYXJnc1tuICsgMV0gOiAkMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNSZWdleCkgewogICAgICAgICAgICBpZiAoc2VhcmNoLmdsb2JhbCkKICAgICAgICAgICAgICAgIHNlYXJjaC5sYXN0SW5kZXggPSAwOyAvLyBGaXggSUUsIFNhZmFyaSBidWcgKGxhc3QgdGVzdGVkIElFIDkuMC41LCBTYWZhcmkgNS4xLjIgb24gV2luZG93cykKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IG9yaWdMYXN0SW5kZXg7IC8vIEZpeCBJRSwgT3BlcmEgYnVnIChsYXN0IHRlc3RlZCBJRSA5LjAuNSwgT3BlcmEgMTEuNjEgb24gV2luZG93cykKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwoKICAgIC8vIEEgY29uc2lzdGVudCBjcm9zcy1icm93c2VyLCBFUzMgY29tcGxpYW50IGBzcGxpdGAKICAgIFN0cmluZy5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiAocyAvKiBzZXBhcmF0b3IgKi8sIGxpbWl0KSB7CiAgICAgICAgLy8gSWYgc2VwYXJhdG9yIGBzYCBpcyBub3QgYSByZWdleCwgdXNlIHRoZSBuYXRpdmUgYHNwbGl0YAogICAgICAgIGlmICghWFJlZ0V4cC5pc1JlZ0V4cChzKSkKICAgICAgICAgICAgcmV0dXJuIG5hdGl2LnNwbGl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIHZhciBzdHIgPSB0aGlzICsgIiIsIC8vIFR5cGUgY29udmVyc2lvbgogICAgICAgICAgICBvdXRwdXQgPSBbXSwKICAgICAgICAgICAgbGFzdExhc3RJbmRleCA9IDAsCiAgICAgICAgICAgIG1hdGNoLCBsYXN0TGVuZ3RoOwoKICAgICAgICAvLyBCZWhhdmlvciBmb3IgYGxpbWl0YDogaWYgaXQncy4uLgogICAgICAgIC8vIC0gYHVuZGVmaW5lZGA6IE5vIGxpbWl0CiAgICAgICAgLy8gLSBgTmFOYCBvciB6ZXJvOiBSZXR1cm4gYW4gZW1wdHkgYXJyYXkKICAgICAgICAvLyAtIEEgcG9zaXRpdmUgbnVtYmVyOiBVc2UgYE1hdGguZmxvb3IobGltaXQpYAogICAgICAgIC8vIC0gQSBuZWdhdGl2ZSBudW1iZXI6IE5vIGxpbWl0CiAgICAgICAgLy8gLSBPdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVsZXMKICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCArbGltaXQgPCAwKSB7CiAgICAgICAgICAgIGxpbWl0ID0gSW5maW5pdHk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGltaXQgPSBNYXRoLmZsb29yKCtsaW1pdCk7CiAgICAgICAgICAgIGlmICghbGltaXQpCiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGlmIG5vdCBgcy5nbG9iYWxgLCBhbmQgaXQgYXZvaWRzIG5lZWRpbmcgdG8gc2V0IGBzLmxhc3RJbmRleGAgdG8gemVybwogICAgICAgIC8vIGFuZCByZXN0b3JlIGl0IHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB3aGVuIHdlJ3JlIGRvbmUgdXNpbmcgdGhlIHJlZ2V4CiAgICAgICAgcyA9IFhSZWdFeHAuY29weUFzR2xvYmFsKHMpOwoKICAgICAgICB3aGlsZSAobWF0Y2ggPSBzLmV4ZWMoc3RyKSkgeyAvLyBSdW4gdGhlIGFsdGVyZWQgYGV4ZWNgIChyZXF1aXJlZCBmb3IgYGxhc3RJbmRleGAgZml4LCBldGMuKQogICAgICAgICAgICBpZiAocy5sYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7CiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTsKCiAgICAgICAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0ci5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7CgogICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBzLmxhc3RJbmRleDsKCiAgICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA%2BPSBsaW1pdCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHMubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkKICAgICAgICAgICAgICAgIHMubGFzdEluZGV4Kys7CiAgICAgICAgfQoKICAgICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoIW5hdGl2LnRlc3QuY2FsbChzLCAiIikgfHwgbGFzdExlbmd0aCkKICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvdXRwdXQucHVzaChzdHIuc2xpY2UobGFzdExhc3RJbmRleCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW1pdCA/IG91dHB1dC5zbGljZSgwLCBsaW1pdCkgOiBvdXRwdXQ7CiAgICB9OwoKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBTdXBwb3J0aW5nIGZ1bmN0aW9uIGZvciBgWFJlZ0V4cGAsIGBYUmVnRXhwLmNvcHlBc0dsb2JhbGAsIGV0Yy4gUmV0dXJucyBhIGNvcHkgb2YgYSBgUmVnRXhwYAogICAgLy8gaW5zdGFuY2Ugd2l0aCBhIGZyZXNoIGBsYXN0SW5kZXhgIChzZXQgdG8gemVybyksIHByZXNlcnZpbmcgcHJvcGVydGllcyByZXF1aXJlZCBmb3IgbmFtZWQKICAgIC8vIGNhcHR1cmUuIEFsc28gYWxsb3dzIGFkZGluZyBuZXcgZmxhZ3MgaW4gdGhlIHByb2Nlc3Mgb2YgY29weWluZyB0aGUgcmVnZXgKICAgIGZ1bmN0aW9uIGNsb25lIChyZWdleCwgYWRkaXRpb25hbEZsYWdzKSB7CiAgICAgICAgaWYgKCFYUmVnRXhwLmlzUmVnRXhwKHJlZ2V4KSkKICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCJ0eXBlIFJlZ0V4cCBleHBlY3RlZCIpOwogICAgICAgIHZhciB4ID0gcmVnZXguX3hyZWdleHA7CiAgICAgICAgcmVnZXggPSBYUmVnRXhwKHJlZ2V4LnNvdXJjZSwgZ2V0TmF0aXZlRmxhZ3MocmVnZXgpICsgKGFkZGl0aW9uYWxGbGFncyB8fCAiIikpOwogICAgICAgIGlmICh4KSB7CiAgICAgICAgICAgIHJlZ2V4Ll94cmVnZXhwID0gewogICAgICAgICAgICAgICAgc291cmNlOiB4LnNvdXJjZSwKICAgICAgICAgICAgICAgIGNhcHR1cmVOYW1lczogeC5jYXB0dXJlTmFtZXMgPyB4LmNhcHR1cmVOYW1lcy5zbGljZSgwKSA6IG51bGwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlZ2V4OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgewogICAgICAgIHJldHVybiAocmVnZXguZ2xvYmFsICAgICA/ICJnIiA6ICIiKSArCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsKICAgICAgICAgICAgICAgKHJlZ2V4Lm11bHRpbGluZSAgPyAibSIgOiAiIikgKwogICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/ICJ4IiA6ICIiKSArIC8vIFByb3Bvc2VkIGZvciBFUzQ7IGluY2x1ZGVkIGluIEFTMwogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBydW5Ub2tlbnMgKHBhdHRlcm4sIGluZGV4LCBzY29wZSwgY29udGV4dCkgewogICAgICAgIHZhciBpID0gdG9rZW5zLmxlbmd0aCwKICAgICAgICAgICAgcmVzdWx0LCBtYXRjaCwgdDsKICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY29uc3RydWN0aW5nIFhSZWdFeHBzIHdpdGhpbiB0b2tlbiBoYW5kbGVyIGFuZCB0cmlnZ2VyIGZ1bmN0aW9ucwogICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSB0cnVlOwogICAgICAgIC8vIE11c3QgcmVzZXQgYGlzSW5zaWRlQ29uc3RydWN0b3JgLCBldmVuIGlmIGEgYHRyaWdnZXJgIG9yIGBoYW5kbGVyYCB0aHJvd3MKICAgICAgICB0cnkgewogICAgICAgICAgICB3aGlsZSAoaS0tKSB7IC8vIFJ1biBpbiByZXZlcnNlIG9yZGVyCiAgICAgICAgICAgICAgICB0ID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgaWYgKChzY29wZSAmIHQuc2NvcGUpICYmICghdC50cmlnZ2VyIHx8IHQudHJpZ2dlci5jYWxsKGNvbnRleHQpKSkgewogICAgICAgICAgICAgICAgICAgIHQucGF0dGVybi5sYXN0SW5kZXggPSBpbmRleDsKICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHQucGF0dGVybi5leGVjKHBhdHRlcm4pOyAvLyBSdW5uaW5nIHRoZSBhbHRlcmVkIGBleGVjYCBoZXJlIGFsbG93cyB1c2Ugb2YgbmFtZWQgYmFja3JlZmVyZW5jZXMsIGV0Yy4KICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dDogdC5oYW5kbGVyLmNhbGwoY29udGV4dCwgbWF0Y2gsIHNjb3BlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlzSW5zaWRlQ29uc3RydWN0b3IgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkgewogICAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikgLy8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2YWlsYWJsZQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBpdGVtKQogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vICBCdWlsdC1pbiB0b2tlbnMKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gQXVnbWVudCBYUmVnRXhwJ3MgcmVndWxhciBleHByZXNzaW9uIHN5bnRheCBhbmQgZmxhZ3MuIE5vdGUgdGhhdCB3aGVuIGFkZGluZyB0b2tlbnMsIHRoZQogICAgLy8gdGhpcmQgKGBzY29wZWApIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGBYUmVnRXhwLk9VVFNJREVfQ0xBU1NgCgogICAgLy8gQ29tbWVudCBwYXR0ZXJuOiAoPyMgKQogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXChcPyNbXildKlwpLywKICAgICAgICBmdW5jdGlvbiAobWF0Y2gpIHsKICAgICAgICAgICAgLy8gS2VlcCB0b2tlbnMgc2VwYXJhdGVkIHVubGVzcyB0aGUgZm9sbG93aW5nIHRva2VuIGlzIGEgcXVhbnRpZmllcgogICAgICAgICAgICByZXR1cm4gbmF0aXYudGVzdC5jYWxsKHF1YW50aWZpZXIsIG1hdGNoLmlucHV0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSkgPyAiIiA6ICIoPzopIjsKICAgICAgICB9CiAgICApOwoKICAgIC8vIENhcHR1cmluZyBncm91cCAobWF0Y2ggdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMgb25seSkuCiAgICAvLyBSZXF1aXJlZCBmb3Igc3VwcG9ydCBvZiBuYW1lZCBjYXB0dXJpbmcgZ3JvdXBzCiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC9cKCg/IVw/KS8sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLmNhcHR1cmVOYW1lcy5wdXNoKG51bGwpOwogICAgICAgICAgICByZXR1cm4gIigiOwogICAgICAgIH0KICAgICk7CgogICAgLy8gTmFtZWQgY2FwdHVyaW5nIGdyb3VwIChtYXRjaCB0aGUgb3BlbmluZyBkZWxpbWl0ZXIgb25seSk6ICg/PG5hbWU%2BCiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC9cKFw/PChbJFx3XSspPi8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHRoaXMuY2FwdHVyZU5hbWVzLnB1c2gobWF0Y2hbMV0pOwogICAgICAgICAgICB0aGlzLmhhc05hbWVkQ2FwdHVyZSA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAiKCI7CiAgICAgICAgfQogICAgKTsKCiAgICAvLyBOYW1lZCBiYWNrcmVmZXJlbmNlOiBcazxuYW1lPgogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXFxrPChbXHckXSspPi8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4T2YodGhpcy5jYXB0dXJlTmFtZXMsIG1hdGNoWzFdKTsKICAgICAgICAgICAgLy8gS2VlcCBiYWNrcmVmZXJlbmNlcyBzZXBhcmF0ZSBmcm9tIHN1YnNlcXVlbnQgbGl0ZXJhbCBudW1iZXJzLiBQcmVzZXJ2ZSBiYWNrLQogICAgICAgICAgICAvLyByZWZlcmVuY2VzIHRvIG5hbWVkIGdyb3VwcyB0aGF0IGFyZSB1bmRlZmluZWQgYXQgdGhpcyBwb2ludCBhcyBsaXRlcmFsIHN0cmluZ3MKICAgICAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPwogICAgICAgICAgICAgICAgIlxcIiArIChpbmRleCArIDEpICsgKGlzTmFOKG1hdGNoLmlucHV0LmNoYXJBdChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCkpID8gIiIgOiAiKD86KSIpIDoKICAgICAgICAgICAgICAgIG1hdGNoWzBdOwogICAgICAgIH0KICAgICk7CgogICAgLy8gRW1wdHkgY2hhcmFjdGVyIGNsYXNzOiBbXSBvciBbXl0KICAgIFhSZWdFeHAuYWRkVG9rZW4oCiAgICAgICAgL1xbXF4/XS8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIC8vIEZvciBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHkgd2l0aCBFUzMsIGNvbnZlcnQgW10gdG8gXGJcQiBhbmQgW15dIHRvIFtcc1xTXS4KICAgICAgICAgICAgLy8gKD8hKSBzaG91bGQgd29yayBsaWtlIFxiXEIsIGJ1dCBpcyB1bnJlbGlhYmxlIGluIEZpcmVmb3gKICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzBdID09PSAiW10iID8gIlxcYlxcQiIgOiAiW1xcc1xcU10iOwogICAgICAgIH0KICAgICk7CgogICAgLy8gTW9kZSBtb2RpZmllciBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb25seSwgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgZmxhZ3MgaW1zeDogKD9pbXN4KQogICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB4KD9pKSwgKD8taSksICg/aS1tKSwgKD9pOiApLCAoP2kpKD9tKSwgZXRjLgogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXlwoXD8oW2ltc3hdKylcKS8sCiAgICAgICAgZnVuY3Rpb24gKG1hdGNoKSB7CiAgICAgICAgICAgIHRoaXMuc2V0RmxhZyhtYXRjaFsxXSk7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICApOwoKICAgIC8vIFdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLCBpbiBmcmVlLXNwYWNpbmcgKGFrYSBleHRlbmRlZCkgbW9kZSBvbmx5CiAgICBYUmVnRXhwLmFkZFRva2VuKAogICAgICAgIC8oPzpccyt8Iy4qKSsvLAogICAgICAgIGZ1bmN0aW9uIChtYXRjaCkgewogICAgICAgICAgICAvLyBLZWVwIHRva2VucyBzZXBhcmF0ZWQgdW5sZXNzIHRoZSBmb2xsb3dpbmcgdG9rZW4gaXMgYSBxdWFudGlmaWVyCiAgICAgICAgICAgIHJldHVybiBuYXRpdi50ZXN0LmNhbGwocXVhbnRpZmllciwgbWF0Y2guaW5wdXQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpKSA/ICIiIDogIig/OikiOwogICAgICAgIH0sCiAgICAgICAgWFJlZ0V4cC5PVVRTSURFX0NMQVNTLAogICAgICAgIGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5oYXNGbGFnKCJ4Iik7fQogICAgKTsKCiAgICAvLyBEb3QsIGluIGRvdGFsbCAoYWthIHNpbmdsZWxpbmUpIG1vZGUgb25seQogICAgWFJlZ0V4cC5hZGRUb2tlbigKICAgICAgICAvXC4vLAogICAgICAgIGZ1bmN0aW9uICgpIHtyZXR1cm4gIltcXHNcXFNdIjt9LAogICAgICAgIFhSZWdFeHAuT1VUU0lERV9DTEFTUywKICAgICAgICBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMuaGFzRmxhZygicyIpO30KICAgICk7CgoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyAgQmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBibG9jayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFhSZWdFeHAgMS4wLTEuMjoKICAgIC8qCiAgICBYUmVnRXhwLm1hdGNoV2l0aGluQ2hhaW4gPSBYUmVnRXhwLm1hdGNoQ2hhaW47CiAgICBSZWdFeHAucHJvdG90eXBlLmFkZEZsYWdzID0gZnVuY3Rpb24gKHMpIHtyZXR1cm4gY2xvbmUodGhpcywgcyk7fTsKICAgIFJlZ0V4cC5wcm90b3R5cGUuZXhlY0FsbCA9IGZ1bmN0aW9uIChzKSB7dmFyIHIgPSBbXTsgWFJlZ0V4cC5pdGVyYXRlKHMsIHRoaXMsIGZ1bmN0aW9uIChtKSB7ci5wdXNoKG0pO30pOyByZXR1cm4gcjt9OwogICAgUmVnRXhwLnByb3RvdHlwZS5mb3JFYWNoRXhlYyA9IGZ1bmN0aW9uIChzLCBmLCBjKSB7cmV0dXJuIFhSZWdFeHAuaXRlcmF0ZShzLCB0aGlzLCBmLCBjKTt9OwogICAgUmVnRXhwLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIChzKSB7dmFyIHIgPSBSZWdFeHAoIl4oPzoiICsgdGhpcy5zb3VyY2UgKyAiKSQoPyFcXHMpIiwgZ2V0TmF0aXZlRmxhZ3ModGhpcykpOyBpZiAodGhpcy5nbG9iYWwpIHRoaXMubGFzdEluZGV4ID0gMDsgcmV0dXJuIHMuc2VhcmNoKHIpID09PSAwO307CiAgICAqLwoKfSkoKTsKCg%3D%3D"></script> <script type="text/javascript" src="data:application/javascript;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIEBWRVJTSU9OQCAoQERBVEVAKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KCi8vCi8vIEJlZ2luIGFub255bW91cyBmdW5jdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGNvbnRhaW4gbG9jYWwgc2NvcGUgdmFyaWFibGVzIHdpdGhvdXQgcG9sdXR0aW5nIGdsb2JhbCBzY29wZS4KLy8KaWYgKHR5cGVvZihTeW50YXhIaWdobGlnaHRlcikgPT0gJ3VuZGVmaW5lZCcpIHZhciBTeW50YXhIaWdobGlnaHRlciA9IGZ1bmN0aW9uKCkgeyAKCi8vIENvbW1vbkpTCmlmICh0eXBlb2YocmVxdWlyZSkgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKFhSZWdFeHApID09ICd1bmRlZmluZWQnKQp7CglYUmVnRXhwID0gcmVxdWlyZSgnWFJlZ0V4cCcpLlhSZWdFeHA7Cn0KCi8vIFNob3J0Y3V0IG9iamVjdCB3aGljaCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBTeW50YXhIaWdobGlnaHRlciB2YXJpYWJsZS4KLy8gVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgbG9jYWwgcmVmZXJlbmNlIGluIG9yZGVyIHRvIGF2b2lkIGxvbmcgbmFtZXNwYWNlIAovLyByZWZlcmVuY2VzIHRvIFN5bnRheEhpZ2hsaWdodGVyLndoYXRldmVyLi4uCnZhciBzaCA9IHsKCWRlZmF1bHRzIDogewoJCS8qKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lcyB0byBiZSBhZGRlZCB0byBoaWdobGlnaHRlciBlbGVtZW50cy4gKi8KCQknY2xhc3MtbmFtZScgOiAnJywKCQkKCQkvKiogRmlyc3QgbGluZSBudW1iZXIuICovCgkJJ2ZpcnN0LWxpbmUnIDogMSwKCQkKCQkvKioKCQkgKiBQYWRzIGxpbmUgbnVtYmVycy4gUG9zc2libGUgdmFsdWVzIGFyZToKCQkgKgoJCSAqICAgZmFsc2UgLSBkb24ndCBwYWQgbGluZSBudW1iZXJzLgoJCSAqICAgdHJ1ZSAgLSBhdXRvbWF0aWNhbHkgcGFkIG51bWJlcnMgd2l0aCBtaW5pbXVtIHJlcXVpcmVkIG51bWJlciBvZiBsZWFkaW5nIHplcm9lcy4KCQkgKiAgIFtpbnRdIC0gbGVuZ3RoIHVwIHRvIHdoaWNoIHBhZCBsaW5lIG51bWJlcnMuCgkJICovCgkJJ3BhZC1saW5lLW51bWJlcnMnIDogZmFsc2UsCgkJCgkJLyoqIExpbmVzIHRvIGhpZ2hsaWdodC4gKi8KCQknaGlnaGxpZ2h0JyA6IG51bGwsCgkJCgkJLyoqIFRpdGxlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgY29kZSBibG9jay4gKi8KCQkndGl0bGUnIDogbnVsbCwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBzbWFydCB0YWJzLiAqLwoJCSdzbWFydC10YWJzJyA6IHRydWUsCgkJCgkJLyoqIEdldHMgb3Igc2V0cyB0YWIgc2l6ZS4gKi8KCQkndGFiLXNpemUnIDogNCwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBndXR0ZXIuICovCgkJJ2d1dHRlcicgOiB0cnVlLAoJCQoJCS8qKiBFbmFibGVzIG9yIGRpc2FibGVzIHRvb2xiYXIuICovCgkJJ3Rvb2xiYXInIDogdHJ1ZSwKCQkKCQkvKiogRW5hYmxlcyBxdWljayBjb2RlIGNvcHkgYW5kIHBhc3RlIGZyb20gZG91YmxlIGNsaWNrLiAqLwoJCSdxdWljay1jb2RlJyA6IHRydWUsCgkJCgkJLyoqIEZvcmNlcyBjb2RlIHZpZXcgdG8gYmUgY29sbGFwc2VkLiAqLwoJCSdjb2xsYXBzZScgOiBmYWxzZSwKCQkKCQkvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBhdXRvbWF0aWMgbGlua3MuICovCgkJJ2F1dG8tbGlua3MnIDogdHJ1ZSwKCQkKCQkvKiogR2V0cyBvciBzZXRzIGxpZ2h0IG1vZGUuIEVxdWF2YWxlbnQgdG8gdHVybmluZyBvZmYgZ3V0dGVyIGFuZCB0b29sYmFyLiAqLwoJCSdsaWdodCcgOiBmYWxzZSwKCgkJJ3VuaW5kZW50JyA6IHRydWUsCgkJCgkJJ2h0bWwtc2NyaXB0JyA6IGZhbHNlCgl9LAoJCgljb25maWcgOiB7CgkJc3BhY2UgOiAnJm5ic3A7JywKCQkKCQkvKiogRW5hYmxlcyB1c2Ugb2YgPFNDUklQVCB0eXBlPSJzeW50YXhoaWdobGlnaHRlciIgLz4gdGFncy4gKi8KCQl1c2VTY3JpcHRUYWdzIDogdHJ1ZSwKCQkKCQkvKiogQmxvZ2dlciBtb2RlIGZsYWcuICovCgkJYmxvZ2dlck1vZGUgOiBmYWxzZSwKCQkKCQlzdHJpcEJycyA6IGZhbHNlLAoJCQoJCS8qKiBOYW1lIG9mIHRoZSB0YWcgdGhhdCBTeW50YXhIaWdobGlnaHRlciB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IuICovCgkJdGFnTmFtZSA6ICdwcmUnLAoJCQoJCXN0cmluZ3MgOiB7CgkJCWV4cGFuZFNvdXJjZSA6ICdleHBhbmQgc291cmNlJywKCQkJaGVscCA6ICc/JywKCQkJYWxlcnQ6ICdTeW50YXhIaWdobGlnaHRlclxuXG4nLAoJCQlub0JydXNoIDogJ0NhblwndCBmaW5kIGJydXNoIGZvcjogJywKCQkJYnJ1c2hOb3RIdG1sU2NyaXB0IDogJ0JydXNoIHdhc25cJ3QgY29uZmlndXJlZCBmb3IgaHRtbC1zY3JpcHQgb3B0aW9uOiAnLAoJCQkKCQkJLy8gdGhpcyBpcyBwb3B1bGF0ZWQgYnkgdGhlIGJ1aWxkIHNjcmlwdAoJCQlhYm91dERpYWxvZyA6ICdAQUJPVVRAJwoJCX0KCX0sCgkKCS8qKiBJbnRlcm5hbCAnZ2xvYmFsJyB2YXJpYWJsZXMuICovCgl2YXJzIDogewoJCWRpc2NvdmVyZWRCcnVzaGVzIDogbnVsbCwKCQloaWdobGlnaHRlcnMgOiB7fQoJfSwKCQoJLyoqIFRoaXMgb2JqZWN0IGlzIHBvcHVsYXRlZCBieSB1c2VyIGluY2x1ZGVkIGV4dGVybmFsIGJydXNoIGZpbGVzLiAqLwoJYnJ1c2hlcyA6IHt9LAoKCS8qKiBDb21tb24gcmVndWxhciBleHByZXNzaW9ucy4gKi8KCXJlZ2V4TGliIDogewoJCW11bHRpTGluZUNDb21tZW50cwkJCTogL1wvXCpbXHNcU10qP1wqXC8vZ20sCgkJc2luZ2xlTGluZUNDb21tZW50cwkJCTogL1wvXC8uKiQvZ20sCgkJc2luZ2xlTGluZVBlcmxDb21tZW50cwkJOiAvIy4qJC9nbSwKCQlkb3VibGVRdW90ZWRTdHJpbmcJCQk6IC8iKFteXFwiXG5dfFxcLikqIi9nLAoJCXNpbmdsZVF1b3RlZFN0cmluZwkJCTogLycoW15cXCdcbl18XFwuKSonL2csCgkJbXVsdGlMaW5lRG91YmxlUXVvdGVkU3RyaW5nCTogbmV3IFhSZWdFeHAoJyIoW15cXFxcIl18XFxcXC4pKiInLCAnZ3MnKSwKCQltdWx0aUxpbmVTaW5nbGVRdW90ZWRTdHJpbmcJOiBuZXcgWFJlZ0V4cCgiJyhbXlxcXFwnXXxcXFxcLikqJyIsICdncycpLAoJCXhtbENvbW1lbnRzCQkJCQk6IC8oJmx0O3w8KSEtLVtcc1xTXSo/LS0oJmd0O3w%2BKS9nbSwKCQl1cmwJCQkJCQkJOiAvXHcrOlwvXC9bXHctLlwvPyUmPTpAOyNdKi9nLAoJCQoJCS8qKiA8Pz0gPz4gdGFncy4gKi8KCQlwaHBTY3JpcHRUYWdzIAkJCQk6IHsgbGVmdDogLygmbHQ7fDwpXD8oPzo9fHBocCk/L2csIHJpZ2h0OiAvXD8oJmd0O3w%2BKS9nLCAnZW9mJyA6IHRydWUgfSwKCQkKCQkvKiogPCU9ICU%2BIHRhZ3MuICovCgkJYXNwU2NyaXB0VGFncwkJCQk6IHsgbGVmdDogLygmbHQ7fDwpJT0/L2csIHJpZ2h0OiAvJSgmZ3Q7fD4pL2cgfSwKCQkKCQkvKiogPHNjcmlwdD4gdGFncy4gKi8KCQlzY3JpcHRTY3JpcHRUYWdzCQkJOiB7IGxlZnQ6IC8oJmx0O3w8KVxzKnNjcmlwdC4qPygmZ3Q7fD4pL2dpLCByaWdodDogLygmbHQ7fDwpXC9ccypzY3JpcHRccyooJmd0O3w%2BKS9naSB9Cgl9LAoKCXRvb2xiYXI6IHsKCQkvKioKCQkgKiBHZW5lcmF0ZXMgSFRNTCBtYXJrdXAgZm9yIHRoZSB0b29sYmFyLgoJCSAqIEBwYXJhbSB7SGlnaGxpZ2h0ZXJ9IGhpZ2hsaWdodGVyIEhpZ2hsaWdodGVyIGluc3RhbmNlLgoJCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBIVE1MIG1hcmt1cC4KCQkgKi8KCQlnZXRIdG1sOiBmdW5jdGlvbihoaWdobGlnaHRlcikKCQl7CgkJCXZhciBodG1sID0gJzxkaXYgY2xhc3M9InRvb2xiYXIiPicsCgkJCQlpdGVtcyA9IHNoLnRvb2xiYXIuaXRlbXMsCgkJCQlsaXN0ID0gaXRlbXMubGlzdAoJCQkJOwoJCQkKCQkJZnVuY3Rpb24gZGVmYXVsdEdldEh0bWwoaGlnaGxpZ2h0ZXIsIG5hbWUpCgkJCXsKCQkJCXJldHVybiBzaC50b29sYmFyLmdldEJ1dHRvbkh0bWwoaGlnaGxpZ2h0ZXIsIG5hbWUsIHNoLmNvbmZpZy5zdHJpbmdzW25hbWVdKTsKCQkJfTsKCQkJCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykKCQkJCWh0bWwgKz0gKGl0ZW1zW2xpc3RbaV1dLmdldEh0bWwgfHwgZGVmYXVsdEdldEh0bWwpKGhpZ2hsaWdodGVyLCBsaXN0W2ldKTsKCQkJCgkJCWh0bWwgKz0gJzwvZGl2Pic7CgkJCQoJCQlyZXR1cm4gaHRtbDsKCQl9LAoJCQoJCS8qKgoJCSAqIEdlbmVyYXRlcyBIVE1MIG1hcmt1cCBmb3IgYSByZWd1bGFyIGJ1dHRvbiBpbiB0aGUgdG9vbGJhci4KCQkgKiBAcGFyYW0ge0hpZ2hsaWdodGVyfSBoaWdobGlnaHRlciBIaWdobGlnaHRlciBpbnN0YW5jZS4KCQkgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZE5hbWUJCUNvbW1hbmQgbmFtZSB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLgoJCSAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbAkJCUxhYmVsIHRleHQgdG8gZGlzcGxheS4KCQkgKiBAcmV0dXJuIHtTdHJpbmd9CQkJCQlSZXR1cm5zIEhUTUwgbWFya3VwLgoJCSAqLwoJCWdldEJ1dHRvbkh0bWw6IGZ1bmN0aW9uKGhpZ2hsaWdodGVyLCBjb21tYW5kTmFtZSwgbGFiZWwpCgkJewoJCQlyZXR1cm4gJzxzcGFuPjxhIGhyZWY9IiMiIGNsYXNzPSJ0b29sYmFyX2l0ZW0nCgkJCQkrICcgY29tbWFuZF8nICsgY29tbWFuZE5hbWUKCQkJCSsgJyAnICsgY29tbWFuZE5hbWUKCQkJCSsgJyI%2BJyArIGxhYmVsICsgJzwvYT48L3NwYW4%2BJwoJCQkJOwoJCX0sCgkJCgkJLyoqCgkJICogRXZlbnQgaGFuZGxlciBmb3IgYSB0b29sYmFyIGFuY2hvci4KCQkgKi8KCQloYW5kbGVyOiBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHRhcmdldCA9IGUudGFyZ2V0LAoJCQkJY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZSB8fCAnJwoJCQkJOwoKCQkJZnVuY3Rpb24gZ2V0VmFsdWUobmFtZSkKCQkJewoJCQkJdmFyIHIgPSBuZXcgUmVnRXhwKG5hbWUgKyAnXyhcXHcrKScpLAoJCQkJCW1hdGNoID0gci5leGVjKGNsYXNzTmFtZSkKCQkJCQk7CgoJCQkJcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsOwoJCQl9OwoJCQkKCQkJdmFyIGhpZ2hsaWdodGVyID0gZ2V0SGlnaGxpZ2h0ZXJCeUlkKGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5zeW50YXhoaWdobGlnaHRlcicpLmlkKSwKCQkJCWNvbW1hbmROYW1lID0gZ2V0VmFsdWUoJ2NvbW1hbmQnKQoJCQkJOwoJCQkKCQkJLy8gZXhlY3V0ZSB0aGUgdG9vbGJhciBjb21tYW5kCgkJCWlmIChoaWdobGlnaHRlciAmJiBjb21tYW5kTmFtZSkKCQkJCXNoLnRvb2xiYXIuaXRlbXNbY29tbWFuZE5hbWVdLmV4ZWN1dGUoaGlnaGxpZ2h0ZXIpOwoKCQkJLy8gZGlzYWJsZSBkZWZhdWx0IEEgY2xpY2sgYmVoYXZpb3VyCgkJCWUucHJldmVudERlZmF1bHQoKTsKCQl9LAoJCQoJCS8qKiBDb2xsZWN0aW9uIG9mIHRvb2xiYXIgaXRlbXMuICovCgkJaXRlbXMgOiB7CgkJCS8vIE9yZGVyZWQgbGlzIG9mIGl0ZW1zIGluIHRoZSB0b29sYmFyLiBDYW4ndCBleHBlY3QgYGZvciAodmFyIG4gaW4gaXRlbXMpYCB0byBiZSBjb25zaXN0ZW50LgoJCQlsaXN0OiBbJ2V4cGFuZFNvdXJjZScsICdoZWxwJ10sCgoJCQlleHBhbmRTb3VyY2U6IHsKCQkJCWdldEh0bWw6IGZ1bmN0aW9uKGhpZ2hsaWdodGVyKQoJCQkJewoJCQkJCWlmIChoaWdobGlnaHRlci5nZXRQYXJhbSgnY29sbGFwc2UnKSAhPSB0cnVlKQoJCQkJCQlyZXR1cm4gJyc7CgkJCQkJCQoJCQkJCXZhciB0aXRsZSA9IGhpZ2hsaWdodGVyLmdldFBhcmFtKCd0aXRsZScpOwoJCQkJCXJldHVybiBzaC50b29sYmFyLmdldEJ1dHRvbkh0bWwoaGlnaGxpZ2h0ZXIsICdleHBhbmRTb3VyY2UnLCB0aXRsZSA/IHRpdGxlIDogc2guY29uZmlnLnN0cmluZ3MuZXhwYW5kU291cmNlKTsKCQkJCX0sCgkJCQoJCQkJZXhlY3V0ZTogZnVuY3Rpb24oaGlnaGxpZ2h0ZXIpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGdldEhpZ2hsaWdodGVyRGl2QnlJZChoaWdobGlnaHRlci5pZCk7CgkJCQkJcmVtb3ZlQ2xhc3MoZGl2LCAnY29sbGFwc2VkJyk7CgkJCQl9CgkJCX0sCgoJCQkvKiogQ29tbWFuZCB0byBkaXNwbGF5IHRoZSBhYm91dCBkaWFsb2cgd2luZG93LiAqLwoJCQloZWxwOiB7CgkJCQlleGVjdXRlOiBmdW5jdGlvbihoaWdobGlnaHRlcikKCQkJCXsJCgkJCQkJdmFyIHduZCA9IHBvcHVwKCcnLCAnX2JsYW5rJywgNTAwLCAyNTAsICdzY3JvbGxiYXJzPTAnKSwKCQkJCQkJZG9jID0gd25kLmRvY3VtZW50CgkJCQkJCTsKCQkJCQkKCQkJCQlkb2Mud3JpdGUoc2guY29uZmlnLnN0cmluZ3MuYWJvdXREaWFsb2cpOwoJCQkJCWRvYy5jbG9zZSgpOwoJCQkJCXduZC5mb2N1cygpOwoJCQkJfQoJCQl9CgkJfQoJfSwKCgkvKioKCSAqIEZpbmRzIGFsbCBlbGVtZW50cyBvbiB0aGUgcGFnZSB3aGljaCBzaG91bGQgYmUgcHJvY2Vzc2VzIGJ5IFN5bnRheEhpZ2hsaWdodGVyLgoJICoKCSAqIEBwYXJhbSB7T2JqZWN0fSBnbG9iYWxQYXJhbXMJCU9wdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggb3ZlcnJpZGUgZWxlbWVudCdzIAoJICogCQkJCQkJCQkJcGFyYW1ldGVycy4gT25seSB1c2VkIGlmIGVsZW1lbnQgaXMgc3BlY2lmaWVkLgoJICogCgkgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudAlPcHRpb25hbCBlbGVtZW50IHRvIGhpZ2hsaWdodC4gSWYgbm9uZSBpcwoJICogCQkJCQkJCXByb3ZpZGVkLCBhbGwgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgCgkgKiAJCQkJCQkJYXJlIHJldHVybmVkIHdoaWNoIHF1YWxpZnkuCgkgKgoJICogQHJldHVybiB7QXJyYXl9CVJldHVybnMgbGlzdCBvZiA8Y29kZT57IHRhcmdldDogRE9NRWxlbWVudCwgcGFyYW1zOiBPYmplY3QgfTwvY29kZT4gb2JqZWN0cy4KCSAqLwoJZmluZEVsZW1lbnRzOiBmdW5jdGlvbihnbG9iYWxQYXJhbXMsIGVsZW1lbnQpCgl7CgkJdmFyIGVsZW1lbnRzID0gZWxlbWVudCA/IFtlbGVtZW50XSA6IHRvQXJyYXkoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoc2guY29uZmlnLnRhZ05hbWUpKSwgCgkJCWNvbmYgPSBzaC5jb25maWcsCgkJCXJlc3VsdCA9IFtdCgkJCTsKCgkJLy8gc3VwcG9ydCBmb3IgPFNDUklQVCBUWVBFPSJzeW50YXhoaWdobGlnaHRlciIgLz4gZmVhdHVyZQoJCWlmIChjb25mLnVzZVNjcmlwdFRhZ3MpCgkJCWVsZW1lbnRzID0gZWxlbWVudHMuY29uY2F0KGdldFN5bnRheEhpZ2hsaWdodGVyU2NyaXB0VGFncygpKTsKCgkJaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgCgkJCXJldHVybiByZXN1bHQ7CgkKCQlmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSAKCQl7CgkJCXZhciBpdGVtID0gewoJCQkJdGFyZ2V0OiBlbGVtZW50c1tpXSwgCgkJCQkvLyBsb2NhbCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZ2xvYmFscwoJCQkJcGFyYW1zOiBtZXJnZShnbG9iYWxQYXJhbXMsIHBhcnNlUGFyYW1zKGVsZW1lbnRzW2ldLmNsYXNzTmFtZSkpCgkJCX07CgoJCQlpZiAoaXRlbS5wYXJhbXNbJ2JydXNoJ10gPT0gbnVsbCkKCQkJCWNvbnRpbnVlOwoJCQkJCgkJCXJlc3VsdC5wdXNoKGl0ZW0pOwoJCX0KCQkKCQlyZXR1cm4gcmVzdWx0OwoJfSwKCgkvKioKCSAqIFNob3J0aGFuZCB0byBoaWdobGlnaHQgYWxsIGVsZW1lbnRzIG9uIHRoZSBwYWdlIHRoYXQgYXJlIG1hcmtlZCBhcyAKCSAqIFN5bnRheEhpZ2hsaWdodGVyIHNvdXJjZSBjb2RlLgoJICogCgkgKiBAcGFyYW0ge09iamVjdH0gZ2xvYmFsUGFyYW1zCQlPcHRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIG92ZXJyaWRlIGVsZW1lbnQncyAKCSAqIAkJCQkJCQkJCXBhcmFtZXRlcnMuIE9ubHkgdXNlZCBpZiBlbGVtZW50IGlzIHNwZWNpZmllZC4KCSAqIAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQJT3B0aW9uYWwgZWxlbWVudCB0byBoaWdobGlnaHQuIElmIG5vbmUgaXMKCSAqIAkJCQkJCQlwcm92aWRlZCwgYWxsIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IAoJICogCQkJCQkJCWFyZSBoaWdobGlnaHRlZC4KCSAqLyAKCWhpZ2hsaWdodDogZnVuY3Rpb24oZ2xvYmFsUGFyYW1zLCBlbGVtZW50KQoJewoJCXZhciBlbGVtZW50cyA9IHRoaXMuZmluZEVsZW1lbnRzKGdsb2JhbFBhcmFtcywgZWxlbWVudCksCgkJCXByb3BlcnR5TmFtZSA9ICdpbm5lckhUTUwnLCAKCQkJaGlnaGxpZ2h0ZXIgPSBudWxsLAoJCQljb25mID0gc2guY29uZmlnCgkJCTsKCgkJaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgCgkJCXJldHVybjsKCQoJCWZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIAoJCXsKCQkJdmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXSwKCQkJCXRhcmdldCA9IGVsZW1lbnQudGFyZ2V0LAoJCQkJcGFyYW1zID0gZWxlbWVudC5wYXJhbXMsCgkJCQlicnVzaE5hbWUgPSBwYXJhbXMuYnJ1c2gsCgkJCQljb2RlCgkJCQk7CgoJCQlpZiAoYnJ1c2hOYW1lID09IG51bGwpCgkJCQljb250aW51ZTsKCgkJCS8vIEluc3RhbnRpYXRlIGEgYnJ1c2gKCQkJaWYgKHBhcmFtc1snaHRtbC1zY3JpcHQnXSA9PSAndHJ1ZScgfHwgc2guZGVmYXVsdHNbJ2h0bWwtc2NyaXB0J10gPT0gdHJ1ZSkgCgkJCXsKCQkJCWhpZ2hsaWdodGVyID0gbmV3IHNoLkh0bWxTY3JpcHQoYnJ1c2hOYW1lKTsKCQkJCWJydXNoTmFtZSA9ICdodG1sc2NyaXB0JzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXZhciBicnVzaCA9IGZpbmRCcnVzaChicnVzaE5hbWUpOwoJCQkJCgkJCQlpZiAoYnJ1c2gpCgkJCQkJaGlnaGxpZ2h0ZXIgPSBuZXcgYnJ1c2goKTsKCQkJCWVsc2UKCQkJCQljb250aW51ZTsKCQkJfQoJCQkKCQkJY29kZSA9IHRhcmdldFtwcm9wZXJ0eU5hbWVdOwoJCQkKCQkJLy8gcmVtb3ZlIENEQVRBIGZyb20gPFNDUklQVC8%2BIHRhZ3MgaWYgaXQncyBwcmVzZW50CgkJCWlmIChjb25mLnVzZVNjcmlwdFRhZ3MpCgkJCQljb2RlID0gc3RyaXBDRGF0YShjb2RlKTsKCQkJCQoJCQkvLyBJbmplY3QgdGl0bGUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50CgkJCWlmICgodGFyZ2V0LnRpdGxlIHx8ICcnKSAhPSAnJykKCQkJCXBhcmFtcy50aXRsZSA9IHRhcmdldC50aXRsZTsKCQkJCQoJCQlwYXJhbXNbJ2JydXNoJ10gPSBicnVzaE5hbWU7CgkJCWhpZ2hsaWdodGVyLmluaXQocGFyYW1zKTsKCQkJZWxlbWVudCA9IGhpZ2hsaWdodGVyLmdldERpdihjb2RlKTsKCQkJCgkJCS8vIGNhcnJ5IG92ZXIgSUQKCQkJaWYgKCh0YXJnZXQuaWQgfHwgJycpICE9ICcnKQoJCQkJZWxlbWVudC5pZCA9IHRhcmdldC5pZDsKCQkJCgkJCXRhcmdldC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGVtZW50LCB0YXJnZXQpOwoJCX0KCX0sCgoJLyoqCgkgKiBNYWluIGVudHJ5IHBvaW50IGZvciB0aGUgU3ludGF4SGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE9wdGlvbmFsIHBhcmFtcyB0byBhcHBseSB0byBhbGwgaGlnaGxpZ2h0ZWQgZWxlbWVudHMuCgkgKi8KCWFsbDogZnVuY3Rpb24ocGFyYW1zKQoJewoJCWF0dGFjaEV2ZW50KAoJCQl3aW5kb3csCgkJCSdsb2FkJywKCQkJZnVuY3Rpb24oKSB7IHNoLmhpZ2hsaWdodChwYXJhbXMpOyB9CgkJKTsKCX0KfTsgLy8gZW5kIG9mIHNoCgovKioKICogQ2hlY2tzIGlmIHRhcmdldCBET00gZWxlbWVudHMgaGFzIHNwZWNpZmllZCBDU1MgY2xhc3MuCiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gdGFyZ2V0IFRhcmdldCBET00gZWxlbWVudCB0byBjaGVjay4KICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBOYW1lIG9mIHRoZSBDU1MgY2xhc3MgdG8gY2hlY2sgZm9yLgogKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgY2xhc3MgbmFtZSBpcyBwcmVzZW50LCBmYWxzZSBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBoYXNDbGFzcyh0YXJnZXQsIGNsYXNzTmFtZSkKewoJcmV0dXJuIHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihjbGFzc05hbWUpICE9IC0xOwp9OwoKLyoqCiAqIEFkZHMgQ1NTIGNsYXNzIG5hbWUgdG8gdGhlIHRhcmdldCBET00gZWxlbWVudC4KICogQHBhcmFtIHtET01FbGVtZW50fSB0YXJnZXQgVGFyZ2V0IERPTSBlbGVtZW50LgogKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIE5ldyBDU1MgY2xhc3MgdG8gYWRkLgogKi8KZnVuY3Rpb24gYWRkQ2xhc3ModGFyZ2V0LCBjbGFzc05hbWUpCnsKCWlmICghaGFzQ2xhc3ModGFyZ2V0LCBjbGFzc05hbWUpKQoJCXRhcmdldC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lOwp9OwoKLyoqCiAqIFJlbW92ZXMgQ1NTIGNsYXNzIG5hbWUgZnJvbSB0aGUgdGFyZ2V0IERPTSBlbGVtZW50LgogKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHRhcmdldCBUYXJnZXQgRE9NIGVsZW1lbnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ1NTIGNsYXNzIHRvIHJlbW92ZS4KICovCmZ1bmN0aW9uIHJlbW92ZUNsYXNzKHRhcmdldCwgY2xhc3NOYW1lKQp7Cgl0YXJnZXQuY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZS5yZXBsYWNlKGNsYXNzTmFtZSwgJycpOwp9OwoKLyoqCiAqIENvbnZlcnRzIHRoZSBzb3VyY2UgdG8gYXJyYXkgb2JqZWN0LiBNb3N0bHkgdXNlZCBmb3IgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCAKICogbGlzdHMgcmV0dXJuZWQgYnkgZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB3aGljaCBhcmVuJ3QgQXJyYXkgb2JqZWN0cy4KICogQHBhcmFtIHtMaXN0fSBzb3VyY2UgU291cmNlIGxpc3QuCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5LgogKi8KZnVuY3Rpb24gdG9BcnJheShzb3VyY2UpCnsKCXZhciByZXN1bHQgPSBbXTsKCQoJZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIAoJCXJlc3VsdC5wdXNoKHNvdXJjZVtpXSk7CgkJCglyZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFNwbGl0cyBibG9jayBvZiB0ZXh0IGludG8gbGluZXMuCiAqIEBwYXJhbSB7U3RyaW5nfSBibG9jayBCbG9jayBvZiB0ZXh0LgogKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyBhcnJheSBvZiBsaW5lcy4KICovCmZ1bmN0aW9uIHNwbGl0TGluZXMoYmxvY2spCnsKCXJldHVybiBibG9jay5zcGxpdCgvXHI/XG4vKTsKfQoKLyoqCiAqIEdlbmVyYXRlcyBIVE1MIElEIGZvciB0aGUgaGlnaGxpZ2h0ZXIuCiAqIEBwYXJhbSB7U3RyaW5nfSBoaWdobGlnaHRlcklkIEhpZ2hsaWdodGVyIElELgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgSFRNTCBJRC4KICovCmZ1bmN0aW9uIGdldEhpZ2hsaWdodGVySWQoaWQpCnsKCXZhciBwcmVmaXggPSAnaGlnaGxpZ2h0ZXJfJzsKCXJldHVybiBpZC5pbmRleE9mKHByZWZpeCkgPT0gMCA/IGlkIDogcHJlZml4ICsgaWQ7Cn07CgovKioKICogRmluZHMgSGlnaGxpZ2h0ZXIgaW5zdGFuY2UgYnkgSUQuCiAqIEBwYXJhbSB7U3RyaW5nfSBoaWdobGlnaHRlcklkIEhpZ2hsaWdodGVyIElELgogKiBAcmV0dXJuIHtIaWdobGlnaHRlcn0gUmV0dXJucyBpbnN0YW5jZSBvZiB0aGUgaGlnaGxpZ2h0ZXIuCiAqLwpmdW5jdGlvbiBnZXRIaWdobGlnaHRlckJ5SWQoaWQpCnsKCXJldHVybiBzaC52YXJzLmhpZ2hsaWdodGVyc1tnZXRIaWdobGlnaHRlcklkKGlkKV07Cn07CgovKioKICogRmluZHMgaGlnaGxpZ2h0ZXIncyBESVYgY29udGFpbmVyLgogKiBAcGFyYW0ge1N0cmluZ30gaGlnaGxpZ2h0ZXJJZCBIaWdobGlnaHRlciBJRC4KICogQHJldHVybiB7RWxlbWVudH0gUmV0dXJucyBoaWdobGlnaHRlcidzIERJViBlbGVtZW50LgogKi8KZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZXJEaXZCeUlkKGlkKQp7CglyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2V0SGlnaGxpZ2h0ZXJJZChpZCkpOwp9OwoKLyoqCiAqIFN0b3JlcyBoaWdobGlnaHRlciBzbyB0aGF0IGdldEhpZ2hsaWdodGVyQnlJZCgpIGNhbiBkbyBpdHMgdGhpbmcuIEVhY2gKICogaGlnaGxpZ2h0ZXIgbXVzdCBjYWxsIHRoaXMgbWV0aG9kIHRvIHByZXNlcnZlIGl0c2VsZi4KICogQHBhcmFtIHtIaWdoaWxnaHRlcn0gaGlnaGxpZ2h0ZXIgSGlnaGxpZ2h0ZXIgaW5zdGFuY2UuCiAqLwpmdW5jdGlvbiBzdG9yZUhpZ2hsaWdodGVyKGhpZ2hsaWdodGVyKQp7CglzaC52YXJzLmhpZ2hsaWdodGVyc1tnZXRIaWdobGlnaHRlcklkKGhpZ2hsaWdodGVyLmlkKV0gPSBoaWdobGlnaHRlcjsKfTsKCi8qKgogKiBMb29rcyBmb3IgYSBjaGlsZCBvciBwYXJlbnQgbm9kZSB3aGljaCBoYXMgc3BlY2lmaWVkIGNsYXNzbmFtZS4KICogRXF1aXZhbGVudCB0byBqUXVlcnkncyAkKGNvbnRhaW5lcikuZmluZCgiLmNsYXNzTmFtZSIpCiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRhcmdldCBlbGVtZW50LgogKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoIENsYXNzIG5hbWUgb3Igbm9kZSBuYW1lIHRvIGxvb2sgZm9yLgogKiBAcGFyYW0ge0Jvb2xlYW59IHJldmVyc2UgSWYgc2V0IHRvIHRydWUsIHdpbGwgZ28gdXAgdGhlIG5vZGUgdHJlZSBpbnN0ZWFkIG9mIGRvd24uCiAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgZm91bmQgY2hpbGQgb3IgcGFyZW50IGVsZW1lbnQgb24gbnVsbC4KICovCmZ1bmN0aW9uIGZpbmRFbGVtZW50KHRhcmdldCwgc2VhcmNoLCByZXZlcnNlIC8qIG9wdGlvbmFsICovKQp7CglpZiAodGFyZ2V0ID09IG51bGwpCgkJcmV0dXJuIG51bGw7CgkJCgl2YXIgbm9kZXMJCQk9IHJldmVyc2UgIT0gdHJ1ZSA/IHRhcmdldC5jaGlsZE5vZGVzIDogWyB0YXJnZXQucGFyZW50Tm9kZSBdLAoJCXByb3BlcnR5VG9GaW5kCT0geyAnIycgOiAnaWQnLCAnLicgOiAnY2xhc3NOYW1lJyB9W3NlYXJjaC5zdWJzdHIoMCwgMSldIHx8ICdub2RlTmFtZScsCgkJZXhwZWN0ZWRWYWx1ZSwKCQlmb3VuZAoJCTsKCglleHBlY3RlZFZhbHVlID0gcHJvcGVydHlUb0ZpbmQgIT0gJ25vZGVOYW1lJwoJCT8gc2VhcmNoLnN1YnN0cigxKQoJCTogc2VhcmNoLnRvVXBwZXJDYXNlKCkKCQk7CgkJCgkvLyBtYWluIHJldHVybiBvZiB0aGUgZm91bmQgbm9kZQoJaWYgKCh0YXJnZXRbcHJvcGVydHlUb0ZpbmRdIHx8ICcnKS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpICE9IC0xKQoJCXJldHVybiB0YXJnZXQ7CgkKCWZvciAodmFyIGkgPSAwOyBub2RlcyAmJiBpIDwgbm9kZXMubGVuZ3RoICYmIGZvdW5kID09IG51bGw7IGkrKykKCQlmb3VuZCA9IGZpbmRFbGVtZW50KG5vZGVzW2ldLCBzZWFyY2gsIHJldmVyc2UpOwoJCglyZXR1cm4gZm91bmQ7Cn07CgovKioKICogTG9va3MgZm9yIGEgcGFyZW50IG5vZGUgd2hpY2ggaGFzIHNwZWNpZmllZCBjbGFzc25hbWUuCiAqIFRoaXMgaXMgYW4gYWxpYXMgdG8gPGNvZGU%2BZmluZEVsZW1lbnQoY29udGFpbmVyLCBjbGFzc05hbWUsIHRydWUpPC9jb2RlPi4KICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGFyZ2V0IGVsZW1lbnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byBsb29rIGZvci4KICogQHJldHVybiB7RWxlbWVudH0gUmV0dXJucyBmb3VuZCBwYXJlbnQgZWxlbWVudCBvbiBudWxsLgogKi8KZnVuY3Rpb24gZmluZFBhcmVudEVsZW1lbnQodGFyZ2V0LCBjbGFzc05hbWUpCnsKCXJldHVybiBmaW5kRWxlbWVudCh0YXJnZXQsIGNsYXNzTmFtZSwgdHJ1ZSk7Cn07CgovKioKICogRmluZHMgYW4gaW5kZXggb2YgZWxlbWVudCBpbiB0aGUgYXJyYXkuCiAqIEBpZ25vcmUKICogQHBhcmFtIHtPYmplY3R9IHNlYXJjaEVsZW1lbnQKICogQHBhcmFtIHtOdW1iZXJ9IGZyb21JbmRleAogKiBAcmV0dXJuIHtOdW1iZXJ9IFJldHVybnMgaW5kZXggb2YgZWxlbWVudCBpZiBmb3VuZDsgLTEgb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KQp7Cglmcm9tSW5kZXggPSBNYXRoLm1heChmcm9tSW5kZXggfHwgMCwgMCk7CgoJZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKQoJCWlmKGFycmF5W2ldID09IHNlYXJjaEVsZW1lbnQpCgkJCXJldHVybiBpOwoJCglyZXR1cm4gLTE7Cn07CgovKioKICogR2VuZXJhdGVzIGEgdW5pcXVlIGVsZW1lbnQgSUQuCiAqLwpmdW5jdGlvbiBndWlkKHByZWZpeCkKewoJcmV0dXJuIChwcmVmaXggfHwgJycpICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkudG9TdHJpbmcoKTsKfTsKCi8qKgogKiBNZXJnZXMgdHdvIG9iamVjdHMuIFZhbHVlcyBmcm9tIG9iajIgb3ZlcnJpZGUgdmFsdWVzIGluIG9iajEuCiAqIEZ1bmN0aW9uIGlzIE5PVCByZWN1cnNpdmUgYW5kIHdvcmtzIG9ubHkgZm9yIG9uZSBkaW1lbnNpb25hbCBvYmplY3RzLgogKiBAcGFyYW0ge09iamVjdH0gb2JqMSBGaXJzdCBvYmplY3QuCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyIFNlY29uZCBvYmplY3QuCiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBjb21iaW5hdGlvbiBvZiBib3RoIG9iamVjdHMuCiAqLwpmdW5jdGlvbiBtZXJnZShvYmoxLCBvYmoyKQp7Cgl2YXIgcmVzdWx0ID0ge30sIG5hbWU7CgoJZm9yIChuYW1lIGluIG9iajEpIAoJCXJlc3VsdFtuYW1lXSA9IG9iajFbbmFtZV07CgkKCWZvciAobmFtZSBpbiBvYmoyKSAKCQlyZXN1bHRbbmFtZV0gPSBvYmoyW25hbWVdOwoJCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBBdHRlbXB0cyB0byBjb252ZXJ0IHN0cmluZyB0byBib29sZWFuLgogKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgSW5wdXQgc3RyaW5nLgogKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgaW5wdXQgd2FzICJ0cnVlIiwgZmFsc2UgaWYgaW5wdXQgd2FzICJmYWxzZSIgYW5kIHZhbHVlIG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZSkKewoJdmFyIHJlc3VsdCA9IHsgInRydWUiIDogdHJ1ZSwgImZhbHNlIiA6IGZhbHNlIH1bdmFsdWVdOwoJcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdmFsdWUgOiByZXN1bHQ7Cn07CgovKioKICogT3BlbnMgdXAgYSBjZW50ZXJlZCBwb3B1cCB3aW5kb3cuCiAqIEBwYXJhbSB7U3RyaW5nfSB1cmwJCVVSTCB0byBvcGVuIGluIHRoZSB3aW5kb3cuCiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCQlQb3B1cCBuYW1lLgogKiBAcGFyYW0ge2ludH0gd2lkdGgJCVBvcHVwIHdpZHRoLgogKiBAcGFyYW0ge2ludH0gaGVpZ2h0CQlQb3B1cCBoZWlnaHQuCiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zCXdpbmRvdy5vcGVuKCkgb3B0aW9ucy4KICogQHJldHVybiB7V2luZG93fQkJCVJldHVybnMgd2luZG93IGluc3RhbmNlLgogKi8KZnVuY3Rpb24gcG9wdXAodXJsLCBuYW1lLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKQp7Cgl2YXIgeCA9IChzY3JlZW4ud2lkdGggLSB3aWR0aCkgLyAyLAoJCXkgPSAoc2NyZWVuLmhlaWdodCAtIGhlaWdodCkgLyAyCgkJOwoJCQoJb3B0aW9ucyArPQknLCBsZWZ0PScgKyB4ICsgCgkJCQknLCB0b3A9JyArIHkgKwoJCQkJJywgd2lkdGg9JyArIHdpZHRoICsKCQkJCScsIGhlaWdodD0nICsgaGVpZ2h0CgkJOwoJb3B0aW9ucyA9IG9wdGlvbnMucmVwbGFjZSgvXiwvLCAnJyk7CgoJdmFyIHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgbmFtZSwgb3B0aW9ucyk7Cgl3aW4uZm9jdXMoKTsKCXJldHVybiB3aW47Cn07CgovKioKICogQWRkcyBldmVudCBoYW5kbGVyIHRvIHRoZSB0YXJnZXQgb2JqZWN0LgogKiBAcGFyYW0ge09iamVjdH0gb2JqCQlUYXJnZXQgb2JqZWN0LgogKiBAcGFyYW0ge1N0cmluZ30gdHlwZQkJTmFtZSBvZiB0aGUgZXZlbnQuCiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMJSGFuZGxpbmcgZnVuY3Rpb24uCiAqLwpmdW5jdGlvbiBhdHRhY2hFdmVudChvYmosIHR5cGUsIGZ1bmMsIHNjb3BlKQp7CglmdW5jdGlvbiBoYW5kbGVyKGUpCgl7CgkJZSA9IGUgfHwgd2luZG93LmV2ZW50OwoJCQoJCWlmICghZS50YXJnZXQpCgkJewoJCQllLnRhcmdldCA9IGUuc3JjRWxlbWVudDsKCQkJZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoJCQl9OwoJCX0KCQkJCgkJZnVuYy5jYWxsKHNjb3BlIHx8IHdpbmRvdywgZSk7Cgl9OwoJCglpZiAob2JqLmF0dGFjaEV2ZW50KSAKCXsKCQlvYmouYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGhhbmRsZXIpOwoJfQoJZWxzZSAKCXsKCQlvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7Cgl9Cn07CgovKioKICogRGlzcGxheXMgYW4gYWxlcnQuCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIHRvIGRpc3BsYXkuCiAqLwpmdW5jdGlvbiBhbGVydChzdHIpCnsKCXdpbmRvdy5hbGVydChzaC5jb25maWcuc3RyaW5ncy5hbGVydCArIHN0cik7Cn07CgovKioKICogRmluZHMgYSBicnVzaCBieSBpdHMgYWxpYXMuCiAqCiAqIEBwYXJhbSB7U3RyaW5nfSBhbGlhcwkJQnJ1c2ggYWxpYXMuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2hvd0FsZXJ0CVN1cHByZXNzZXMgdGhlIGFsZXJ0IGlmIGZhbHNlLgogKiBAcmV0dXJuIHtCcnVzaH0JCQkJUmV0dXJucyBidXJzaCBjb25zdHJ1Y3RvciBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBmaW5kQnJ1c2goYWxpYXMsIHNob3dBbGVydCkKewoJdmFyIGJydXNoZXMgPSBzaC52YXJzLmRpc2NvdmVyZWRCcnVzaGVzLAoJCXJlc3VsdCA9IG51bGwKCQk7CgkKCWlmIChicnVzaGVzID09IG51bGwpIAoJewoJCWJydXNoZXMgPSB7fTsKCQkKCQkvLyBGaW5kIGFsbCBicnVzaGVzCgkJZm9yICh2YXIgYnJ1c2ggaW4gc2guYnJ1c2hlcykgCgkJewoJCQl2YXIgaW5mbyA9IHNoLmJydXNoZXNbYnJ1c2hdLAoJCQkJYWxpYXNlcyA9IGluZm8uYWxpYXNlcwoJCQkJOwoJCQkKCQkJaWYgKGFsaWFzZXMgPT0gbnVsbCkgCgkJCQljb250aW51ZTsKCQkJCgkJCS8vIGtlZXAgdGhlIGJydXNoIG5hbWUKCQkJaW5mby5icnVzaE5hbWUgPSBicnVzaC50b0xvd2VyQ2FzZSgpOwoJCQkKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSAKCQkJCWJydXNoZXNbYWxpYXNlc1tpXV0gPSBicnVzaDsKCQl9CgkJCgkJc2gudmFycy5kaXNjb3ZlcmVkQnJ1c2hlcyA9IGJydXNoZXM7Cgl9CgkKCXJlc3VsdCA9IHNoLmJydXNoZXNbYnJ1c2hlc1thbGlhc11dOwoKCWlmIChyZXN1bHQgPT0gbnVsbCAmJiBzaG93QWxlcnQpCgkJYWxlcnQoc2guY29uZmlnLnN0cmluZ3Mubm9CcnVzaCArIGFsaWFzKTsKCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBFeGVjdXRlcyBhIGNhbGxiYWNrIG9uIGVhY2ggbGluZSBhbmQgcmVwbGFjZXMgZWFjaCBsaW5lIHdpdGggcmVzdWx0IGZyb20gdGhlIGNhbGxiYWNrLgogKiBAcGFyYW0ge09iamVjdH0gc3RyCQkJSW5wdXQgc3RyaW5nLgogKiBAcGFyYW0ge09iamVjdH0gY2FsbGJhY2sJCUNhbGxiYWNrIGZ1bmN0aW9uIHRha2luZyBvbmUgc3RyaW5nIGFyZ3VtZW50IGFuZCByZXR1cm5pbmcgYSBzdHJpbmcuCiAqLwpmdW5jdGlvbiBlYWNoTGluZShzdHIsIGNhbGxiYWNrKQp7Cgl2YXIgbGluZXMgPSBzcGxpdExpbmVzKHN0cik7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspCgkJbGluZXNbaV0gPSBjYWxsYmFjayhsaW5lc1tpXSwgaSk7CgkJCgkvLyBpbmNsdWRlIFxyIHRvIGVuYWJsZSBjb3B5LXBhc3RlIG9uIHdpbmRvd3MgKGllOCkgd2l0aG91dCBnZXR0aW5nIGV2ZXJ5dGhpbmcgb24gb25lIGxpbmUKCXJldHVybiBsaW5lcy5qb2luKCdcclxuJyk7Cn07CgovKioKICogVGhpcyBpcyBhIHNwZWNpYWwgdHJpbSB3aGljaCBvbmx5IHJlbW92ZXMgZmlyc3QgYW5kIGxhc3QgZW1wdHkgbGluZXMKICogYW5kIGRvZXNuJ3QgYWZmZWN0IHZhbGlkIGxlYWRpbmcgc3BhY2Ugb24gdGhlIGZpcnN0IGxpbmUuCiAqIAogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgSW5wdXQgc3RyaW5nCiAqIEByZXR1cm4ge1N0cmluZ30gICAgICBSZXR1cm5zIHN0cmluZyB3aXRob3V0IGVtcHR5IGZpcnN0IGFuZCBsYXN0IGxpbmVzLgogKi8KZnVuY3Rpb24gdHJpbUZpcnN0QW5kTGFzdExpbmVzKHN0cikKewoJcmV0dXJuIHN0ci5yZXBsYWNlKC9eWyBdKltcbl0rfFtcbl0qWyBdKiQvZywgJycpOwp9OwoKLyoqCiAqIFBhcnNlcyBrZXkvdmFsdWUgcGFpcnMgaW50byBoYXNoIG9iamVjdC4KICogCiAqIFVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKICogLSBuYW1lOiB3b3JkOwogKiAtIG5hbWU6IFt3b3JkLCB3b3JkXTsKICogLSBuYW1lOiAic3RyaW5nIjsKICogLSBuYW1lOiAnc3RyaW5nJzsKICogCiAqIEZvciBleGFtcGxlOgogKiAgIG5hbWUxOiB2YWx1ZTsgbmFtZTI6IFt2YWx1ZSwgdmFsdWVdOyBuYW1lMzogJ3ZhbHVlJwogKiAgIAogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgIElucHV0IHN0cmluZy4KICogQHJldHVybiB7T2JqZWN0fSAgICAgICBSZXR1cm5zIGRlc2VyaWFsaXplZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBwYXJzZVBhcmFtcyhzdHIpCnsKCXZhciBtYXRjaCwgCgkJcmVzdWx0ID0ge30sCgkJYXJyYXlSZWdleCA9IG5ldyBYUmVnRXhwKCJeXFxbKD88dmFsdWVzPiguKj8pKVxcXSQiKSwKCQlyZWdleCA9IG5ldyBYUmVnRXhwKAoJCQkiKD88bmFtZT5bXFx3LV0rKSIgKwoJCQkiXFxzKjpcXHMqIiArCgkJCSIoPzx2YWx1ZT4iICsKCQkJCSJbXFx3LSUjXSt8IiArCQkvLyB3b3JkCgkJCQkiXFxbLio/XFxdfCIgKwkJLy8gW10gYXJyYXkKCQkJCSciLio/InwnICsJCQkvLyAiIiBzdHJpbmcKCQkJCSInLio/JyIgKwkJCS8vICcnIHN0cmluZwoJCQkiKVxccyo7PyIsCgkJCSJnIgoJCSkKCQk7CgoJd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT0gbnVsbCkgCgl7CgkJdmFyIHZhbHVlID0gbWF0Y2gudmFsdWUKCQkJLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csICcnKSAvLyBzdHJpcCBxdW90ZXMgZnJvbSBlbmQgb2Ygc3RyaW5ncwoJCQk7CgkJCgkJLy8gdHJ5IHRvIHBhcnNlIGFycmF5IHZhbHVlCgkJaWYgKHZhbHVlICE9IG51bGwgJiYgYXJyYXlSZWdleC50ZXN0KHZhbHVlKSkKCQl7CgkJCXZhciBtID0gYXJyYXlSZWdleC5leGVjKHZhbHVlKTsKCQkJdmFsdWUgPSBtLnZhbHVlcy5sZW5ndGggPiAwID8gbS52YWx1ZXMuc3BsaXQoL1xzKixccyovKSA6IFtdOwoJCX0KCQkKCQlyZXN1bHRbbWF0Y2gubmFtZV0gPSB2YWx1ZTsKCX0KCQoJcmV0dXJuIHJlc3VsdDsKfTsKCi8qKgogKiBXcmFwcyBlYWNoIGxpbmUgb2YgdGhlIHN0cmluZyBpbnRvIDxjb2RlLz4gdGFnIHdpdGggZ2l2ZW4gc3R5bGUgYXBwbGllZCB0byBpdC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgICBJbnB1dCBzdHJpbmcuCiAqIEBwYXJhbSB7U3RyaW5nfSBjc3MgICBTdHlsZSBuYW1lIHRvIGFwcGx5IHRvIHRoZSBzdHJpbmcuCiAqIEByZXR1cm4ge1N0cmluZ30gICAgICBSZXR1cm5zIGlucHV0IHN0cmluZyB3aXRoIGVhY2ggbGluZSBzdXJyb3VuZGVkIGJ5IDxzcGFuLz4gdGFnLgogKi8KZnVuY3Rpb24gd3JhcExpbmVzV2l0aENvZGUoc3RyLCBjc3MpCnsKCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoID09IDAgfHwgc3RyID09ICdcbicpIAoJCXJldHVybiBzdHI7CgoJc3RyID0gc3RyLnJlcGxhY2UoLzwvZywgJyZsdDsnKTsKCgkvLyBSZXBsYWNlIHR3byBvciBtb3JlIHNlcXVlbnRpYWwgc3BhY2VzIHdpdGggJm5ic3A7IGxlYXZpbmcgbGFzdCBzcGFjZSB1bnRvdWNoZWQuCglzdHIgPSBzdHIucmVwbGFjZSgvIHsyLH0vZywgZnVuY3Rpb24obSkKCXsKCQl2YXIgc3BhY2VzID0gJyc7CgkJCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aCAtIDE7IGkrKykKCQkJc3BhY2VzICs9IHNoLmNvbmZpZy5zcGFjZTsKCQkKCQlyZXR1cm4gc3BhY2VzICsgJyAnOwoJfSk7CgoJLy8gU3BsaXQgZWFjaCBsaW5lIGFuZCBhcHBseSA8c3BhbiBjbGFzcz0iLi4uIj4uLi48L3NwYW4%2BIHRvIHRoZW0gc28gdGhhdAoJLy8gbGVhZGluZyBzcGFjZXMgYXJlbid0IGluY2x1ZGVkLgoJaWYgKGNzcyAhPSBudWxsKSAKCQlzdHIgPSBlYWNoTGluZShzdHIsIGZ1bmN0aW9uKGxpbmUpCgkJewoJCQlpZiAobGluZS5sZW5ndGggPT0gMCkgCgkJCQlyZXR1cm4gJyc7CgkJCQoJCQl2YXIgc3BhY2VzID0gJyc7CgkJCQoJCQlsaW5lID0gbGluZS5yZXBsYWNlKC9eKCZuYnNwO3wgKSsvLCBmdW5jdGlvbihzKQoJCQl7CgkJCQlzcGFjZXMgPSBzOwoJCQkJcmV0dXJuICcnOwoJCQl9KTsKCQkJCgkJCWlmIChsaW5lLmxlbmd0aCA9PSAwKSAKCQkJCXJldHVybiBzcGFjZXM7CgkJCQoJCQlyZXR1cm4gc3BhY2VzICsgJzxjb2RlIGNsYXNzPSInICsgY3NzICsgJyI%2BJyArIGxpbmUgKyAnPC9jb2RlPic7CgkJfSk7CgoJcmV0dXJuIHN0cjsKfTsKCi8qKgogKiBQYWRzIG51bWJlciB3aXRoIHplcm9zIHVudGlsIGl0J3MgbGVuZ3RoIGlzIHRoZSBzYW1lIGFzIGdpdmVuIGxlbmd0aC4KICogCiAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIJTnVtYmVyIHRvIHBhZC4KICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aAlNYXggc3RyaW5nIGxlbmd0aCB3aXRoLgogKiBAcmV0dXJuIHtTdHJpbmd9CQkJUmV0dXJucyBhIHN0cmluZyBwYWRkZWQgd2l0aCBwcm9wZXIgYW1vdW50IG9mICcwJy4KICovCmZ1bmN0aW9uIHBhZE51bWJlcihudW1iZXIsIGxlbmd0aCkKewoJdmFyIHJlc3VsdCA9IG51bWJlci50b1N0cmluZygpOwoJCgl3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IGxlbmd0aCkKCQlyZXN1bHQgPSAnMCcgKyByZXN1bHQ7CgkKCXJldHVybiByZXN1bHQ7Cn07CgovKioKICogUmVwbGFjZXMgdGFicyB3aXRoIHNwYWNlcy4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQlTb3VyY2UgY29kZS4KICogQHBhcmFtIHtOdW1iZXJ9IHRhYlNpemUJU2l6ZSBvZiB0aGUgdGFiLgogKiBAcmV0dXJuIHtTdHJpbmd9CQkJUmV0dXJucyBjb2RlIHdpdGggYWxsIHRhYnMgcmVwbGFjZXMgYnkgc3BhY2VzLgogKi8KZnVuY3Rpb24gcHJvY2Vzc1RhYnMoY29kZSwgdGFiU2l6ZSkKewoJdmFyIHRhYiA9ICcnOwoJCglmb3IgKHZhciBpID0gMDsgaSA8IHRhYlNpemU7IGkrKykKCQl0YWIgKz0gJyAnOwoKCXJldHVybiBjb2RlLnJlcGxhY2UoL1x0L2csIHRhYik7Cn07CgovKioKICogUmVwbGFjZXMgdGFicyB3aXRoIHNtYXJ0IHNwYWNlcy4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlICAgIENvZGUgdG8gZml4IHRoZSB0YWJzIGluLgogKiBAcGFyYW0ge051bWJlcn0gdGFiU2l6ZSBOdW1iZXIgb2Ygc3BhY2VzIGluIGEgY29sdW1uLgogKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICBSZXR1cm5zIGNvZGUgd2l0aCBhbGwgdGFicyByZXBsYWNlcyB3aXRoIHJvcGVyIGFtb3VudCBvZiBzcGFjZXMuCiAqLwpmdW5jdGlvbiBwcm9jZXNzU21hcnRUYWJzKGNvZGUsIHRhYlNpemUpCnsKCXZhciBsaW5lcyA9IHNwbGl0TGluZXMoY29kZSksCgkJdGFiID0gJ1x0JywKCQlzcGFjZXMgPSAnJwoJCTsKCQoJLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggMTAwMCBzcGFjZXMgdG8gY29weSBzcGFjZXMgZnJvbS4uLiAKCS8vIEl0J3MgYXNzdW1lZCB0aGF0IHRoZXJlIHdvdWxkIGJlIG5vIGluZGVudGF0aW9uIGxvbmdlciB0aGFuIHRoYXQuCglmb3IgKHZhciBpID0gMDsgaSA8IDUwOyBpKyspIAoJCXNwYWNlcyArPSAnICAgICAgICAgICAgICAgICAgICAnOyAvLyAyMCBzcGFjZXMgKiA1MAoJCQkKCS8vIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBzcGVjaWZpZWQgYW1vdW50IG9mIHNwYWNlcyBpbiB0aGUgc3RyaW5nCgkvLyB3aGVyZSBhIHRhYiBpcyB3aGlsZSByZW1vdmluZyB0aGF0IGdpdmVuIHRhYi4KCWZ1bmN0aW9uIGluc2VydFNwYWNlcyhsaW5lLCBwb3MsIGNvdW50KQoJewoJCXJldHVybiBsaW5lLnN1YnN0cigwLCBwb3MpCgkJCSsgc3BhY2VzLnN1YnN0cigwLCBjb3VudCkKCQkJKyBsaW5lLnN1YnN0cihwb3MgKyAxLCBsaW5lLmxlbmd0aCkgLy8gcG9zICsgMSB3aWxsIGdldCByaWQgb2YgdGhlIHRhYgoJCQk7Cgl9OwoKCS8vIEdvIHRocm91Z2ggYWxsIHRoZSBsaW5lcyBhbmQgZG8gdGhlICdzbWFydCB0YWJzJyBtYWdpYy4KCWNvZGUgPSBlYWNoTGluZShjb2RlLCBmdW5jdGlvbihsaW5lKQoJewoJCWlmIChsaW5lLmluZGV4T2YodGFiKSA9PSAtMSkgCgkJCXJldHVybiBsaW5lOwoJCQoJCXZhciBwb3MgPSAwOwoJCQoJCXdoaWxlICgocG9zID0gbGluZS5pbmRleE9mKHRhYikpICE9IC0xKSAKCQl7CgkJCS8vIFRoaXMgaXMgcHJldHR5IG11Y2ggYWxsIHRoZXJlIGlzIHRvIHRoZSAnc21hcnQgdGFicycgbG9naWMuCgkJCS8vIEJhc2VkIG9uIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGxpbmUgYW5kIHNpemUgb2YgYSB0YWIsCgkJCS8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlcyB3ZSBuZWVkIHRvIGluc2VydC4KCQkJdmFyIHNwYWNlcyA9IHRhYlNpemUgLSBwb3MgJSB0YWJTaXplOwoJCQlsaW5lID0gaW5zZXJ0U3BhY2VzKGxpbmUsIHBvcywgc3BhY2VzKTsKCQl9CgkJCgkJcmV0dXJuIGxpbmU7Cgl9KTsKCQoJcmV0dXJuIGNvZGU7Cn07CgovKioKICogUGVyZm9ybXMgdmFyaW91cyBzdHJpbmcgZml4ZXMgYmFzZWQgb24gY29uZmlndXJhdGlvbi4KICovCmZ1bmN0aW9uIGZpeElucHV0U3RyaW5nKHN0cikKewoJdmFyIGJyID0gLzxiclxzKlwvPz58Jmx0O2JyXHMqXC8/Jmd0Oy9naTsKCQoJaWYgKHNoLmNvbmZpZy5ibG9nZ2VyTW9kZSA9PSB0cnVlKQoJCXN0ciA9IHN0ci5yZXBsYWNlKGJyLCAnXG4nKTsKCglpZiAoc2guY29uZmlnLnN0cmlwQnJzID09IHRydWUpCgkJc3RyID0gc3RyLnJlcGxhY2UoYnIsICcnKTsKCQkKCXJldHVybiBzdHI7Cn07CgovKioKICogUmVtb3ZlcyBhbGwgd2hpdGUgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nLgogKiAKICogQHBhcmFtIHtTdHJpbmd9IHN0ciAgIFN0cmluZyB0byB0cmltLgogKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgUmV0dXJucyBzdHJpbmcgd2l0aG91dCBsZWFkaW5nIGFuZCBmb2xsb3dpbmcgd2hpdGUgc3BhY2UgY2hhcmFjdGVycy4KICovCmZ1bmN0aW9uIHRyaW0oc3RyKQp7CglyZXR1cm4gc3RyLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Cn07CgovKioKICogVW5pbmRlbnRzIGEgYmxvY2sgb2YgdGV4dCBieSB0aGUgbG93ZXN0IGNvbW1vbiBpbmRlbnQgYW1vdW50LgogKiBAcGFyYW0ge1N0cmluZ30gc3RyICAgVGV4dCB0byB1bmluZGVudC4KICogQHJldHVybiB7U3RyaW5nfSAgICAgIFJldHVybnMgdW5pbmRlbnRlZCB0ZXh0IGJsb2NrLgogKi8KZnVuY3Rpb24gdW5pbmRlbnQoc3RyKQp7Cgl2YXIgbGluZXMgPSBzcGxpdExpbmVzKGZpeElucHV0U3RyaW5nKHN0cikpLAoJCWluZGVudHMgPSBuZXcgQXJyYXkoKSwKCQlyZWdleCA9IC9eXHMqLywKCQltaW4gPSAxMDAwCgkJOwoJCgkvLyBnbyB0aHJvdWdoIGV2ZXJ5IGxpbmUgYW5kIGNoZWNrIGZvciBjb21tb24gbnVtYmVyIG9mIGluZGVudHMKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoICYmIG1pbiA%2BIDA7IGkrKykgCgl7CgkJdmFyIGxpbmUgPSBsaW5lc1tpXTsKCQkKCQlpZiAodHJpbShsaW5lKS5sZW5ndGggPT0gMCkgCgkJCWNvbnRpbnVlOwoJCQoJCXZhciBtYXRjaGVzID0gcmVnZXguZXhlYyhsaW5lKTsKCQkKCQkvLyBJbiB0aGUgZXZlbnQgdGhhdCBqdXN0IG9uZSBsaW5lIGRvZXNuJ3QgaGF2ZSBsZWFkaW5nIHdoaXRlIHNwYWNlCgkJLy8gd2UgY2FuJ3QgdW5pbmRlbnQgYW55dGhpbmcsIHNvIGJhaWwgY29tcGxldGVseS4KCQlpZiAobWF0Y2hlcyA9PSBudWxsKSAKCQkJcmV0dXJuIHN0cjsKCQkJCgkJbWluID0gTWF0aC5taW4obWF0Y2hlc1swXS5sZW5ndGgsIG1pbik7Cgl9CgkKCS8vIHRyaW0gbWluaW11bSBjb21tb24gbnVtYmVyIG9mIHdoaXRlIHNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBldmVyeSBsaW5lCglpZiAobWluID4gMCkgCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgCgkJCWxpbmVzW2ldID0gbGluZXNbaV0uc3Vic3RyKG1pbik7CgkKCXJldHVybiBsaW5lcy5qb2luKCdcbicpOwp9OwoKLyoqCiAqIENhbGxiYWNrIG1ldGhvZCBmb3IgQXJyYXkuc29ydCgpIHdoaWNoIHNvcnRzIG1hdGNoZXMgYnkKICogaW5kZXggcG9zaXRpb24gYW5kIHRoZW4gYnkgbGVuZ3RoLgogKiAKICogQHBhcmFtIHtNYXRjaH0gbTEJTGVmdCBvYmplY3QuCiAqIEBwYXJhbSB7TWF0Y2h9IG0yICAgIFJpZ2h0IG9iamVjdC4KICogQHJldHVybiB7TnVtYmVyfSAgICAgUmV0dXJucyAtMSwgMCBvciAtMSBhcyBhIGNvbXBhcmlzb24gcmVzdWx0LgogKi8KZnVuY3Rpb24gbWF0Y2hlc1NvcnRDYWxsYmFjayhtMSwgbTIpCnsKCS8vIHNvcnQgbWF0Y2hlcyBieSBpbmRleCBmaXJzdAoJaWYobTEuaW5kZXggPCBtMi5pbmRleCkKCQlyZXR1cm4gLTE7CgllbHNlIGlmKG0xLmluZGV4ID4gbTIuaW5kZXgpCgkJcmV0dXJuIDE7CgllbHNlCgl7CgkJLy8gaWYgaW5kZXggaXMgdGhlIHNhbWUsIHNvcnQgYnkgbGVuZ3RoCgkJaWYobTEubGVuZ3RoIDwgbTIubGVuZ3RoKQoJCQlyZXR1cm4gLTE7CgkJZWxzZSBpZihtMS5sZW5ndGggPiBtMi5sZW5ndGgpCgkJCXJldHVybiAxOwoJfQoJCglyZXR1cm4gMDsKfTsKCi8qKgogKiBFeGVjdXRlcyBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gb24gcHJvdmlkZWQgY29kZSBhbmQgcmV0dXJucyBhbGwKICogbWF0Y2hlcyB0aGF0IGFyZSBmb3VuZC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlICAgIENvZGUgdG8gZXhlY3V0ZSByZWd1bGFyIGV4cHJlc3Npb24gb24uCiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleCAgIFJlZ3VsYXIgZXhwcmVzc2lvbiBpdGVtIGluZm8gZnJvbSA8Y29kZT5yZWdleExpc3Q8L2NvZGU%2BIGNvbGxlY3Rpb24uCiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIE1hdGNoIG9iamVjdHMuCiAqLyAKZnVuY3Rpb24gZ2V0TWF0Y2hlcyhjb2RlLCByZWdleEluZm8pCnsKCWZ1bmN0aW9uIGRlZmF1bHRBZGQobWF0Y2gsIHJlZ2V4SW5mbykKCXsKCQlyZXR1cm4gbWF0Y2hbMF07Cgl9OwoJCgl2YXIgaW5kZXggPSAwLAoJCW1hdGNoID0gbnVsbCwKCQltYXRjaGVzID0gW10sCgkJZnVuYyA9IHJlZ2V4SW5mby5mdW5jID8gcmVnZXhJbmZvLmZ1bmMgOiBkZWZhdWx0QWRkCgkJOwoJCgl3aGlsZSgobWF0Y2ggPSByZWdleEluZm8ucmVnZXguZXhlYyhjb2RlKSkgIT0gbnVsbCkKCXsKCQl2YXIgcmVzdWx0TWF0Y2ggPSBmdW5jKG1hdGNoLCByZWdleEluZm8pOwoJCQoJCWlmICh0eXBlb2YocmVzdWx0TWF0Y2gpID09ICdzdHJpbmcnKQoJCQlyZXN1bHRNYXRjaCA9IFtuZXcgc2guTWF0Y2gocmVzdWx0TWF0Y2gsIG1hdGNoLmluZGV4LCByZWdleEluZm8uY3NzKV07CgoJCW1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHRNYXRjaCk7Cgl9CgkKCXJldHVybiBtYXRjaGVzOwp9OwoKLyoqCiAqIFR1cm5zIGFsbCBVUkxzIGluIHRoZSBjb2RlIGludG8gPGEvPiB0YWdzLgogKiBAcGFyYW0ge1N0cmluZ30gY29kZSBJbnB1dCBjb2RlLgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgY29kZSB3aXRoIDwvYT4gdGFncy4KICovCmZ1bmN0aW9uIHByb2Nlc3NVcmxzKGNvZGUpCnsKCXZhciBndCA9IC8oLiopKCgmZ3Q7fCZsdDspLiopLzsKCQoJcmV0dXJuIGNvZGUucmVwbGFjZShzaC5yZWdleExpYi51cmwsIGZ1bmN0aW9uKG0pCgl7CgkJdmFyIHN1ZmZpeCA9ICcnLAoJCQltYXRjaCA9IG51bGwKCQkJOwoJCQoJCS8vIFdlIGluY2x1ZGUgJmx0OyBhbmQgJmd0OyBpbiB0aGUgVVJMIGZvciB0aGUgY29tbW9uIGNhc2VzIGxpa2UgPGh0dHA6Ly9nb29nbGUuY29tPgoJCS8vIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhleSBnZXQgdHJhbnNmb3JtZWQgaW50byAmbHQ7aHR0cDovL2dvb2dsZS5jb20mZ3Q7CgkJLy8gV2hlcmUgYXMgJmd0OyBlYXNpbHkgbG9va3MgbGlrZSBwYXJ0IG9mIHRoZSBVUkwgc3RyaW5nLgoJCgkJaWYgKG1hdGNoID0gZ3QuZXhlYyhtKSkKCQl7CgkJCW0gPSBtYXRjaFsxXTsKCQkJc3VmZml4ID0gbWF0Y2hbMl07CgkJfQoJCQoJCXJldHVybiAnPGEgaHJlZj0iJyArIG0gKyAnIj4nICsgbSArICc8L2E%2BJyArIHN1ZmZpeDsKCX0pOwp9OwoKLyoqCiAqIEZpbmRzIGFsbCA8U0NSSVBUIFRZUEU9InN5bnRheGhpZ2hsaWdodGVyIiAvPiBlbGVtZW50c3MuCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIGFsbCBmb3VuZCBTeW50YXhIaWdobGlnaHRlciB0YWdzLgogKi8KZnVuY3Rpb24gZ2V0U3ludGF4SGlnaGxpZ2h0ZXJTY3JpcHRUYWdzKCkKewoJdmFyIHRhZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JyksCgkJcmVzdWx0ID0gW10KCQk7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykKCQlpZiAodGFnc1tpXS50eXBlID09ICdzeW50YXhoaWdobGlnaHRlcicpCgkJCXJlc3VsdC5wdXNoKHRhZ3NbaV0pOwoJCQkKCXJldHVybiByZXN1bHQ7Cn07CgovKioKICogU3RyaXBzIDwhW0NEQVRBW11dPiBmcm9tIDxTQ1JJUFQgLz4gY29udGVudCBiZWNhdXNlIGl0IHNob3VsZCBiZSB1c2VkCiAqIHRoZXJlIGluIG1vc3QgY2FzZXMgZm9yIFhIVE1MIGNvbXBsaWFuY2UuCiAqIEBwYXJhbSB7U3RyaW5nfSBvcmlnaW5hbAlJbnB1dCBjb2RlLgogKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgY29kZSB3aXRob3V0IGxlYWRpbmcgPCFbQ0RBVEFbXV0%2BIHRhZ3MuCiAqLwpmdW5jdGlvbiBzdHJpcENEYXRhKG9yaWdpbmFsKQp7Cgl2YXIgbGVmdCA9ICc8IVtDREFUQVsnLAoJCXJpZ2h0ID0gJ11dPicsCgkJLy8gZm9yIHNvbWUgcmVhc29uIElFIGluc2VydHMgc29tZSBsZWFkaW5nIGJsYW5rcyBoZXJlCgkJY29weSA9IHRyaW0ob3JpZ2luYWwpLAoJCWNoYW5nZWQgPSBmYWxzZSwKCQlsZWZ0TGVuZ3RoID0gbGVmdC5sZW5ndGgsCgkJcmlnaHRMZW5ndGggPSByaWdodC5sZW5ndGgKCQk7CgkKCWlmIChjb3B5LmluZGV4T2YobGVmdCkgPT0gMCkKCXsKCQljb3B5ID0gY29weS5zdWJzdHJpbmcobGVmdExlbmd0aCk7CgkJY2hhbmdlZCA9IHRydWU7Cgl9CgkKCXZhciBjb3B5TGVuZ3RoID0gY29weS5sZW5ndGg7CgkKCWlmIChjb3B5LmluZGV4T2YocmlnaHQpID09IGNvcHlMZW5ndGggLSByaWdodExlbmd0aCkKCXsKCQljb3B5ID0gY29weS5zdWJzdHJpbmcoMCwgY29weUxlbmd0aCAtIHJpZ2h0TGVuZ3RoKTsKCQljaGFuZ2VkID0gdHJ1ZTsKCX0KCQoJcmV0dXJuIGNoYW5nZWQgPyBjb3B5IDogb3JpZ2luYWw7Cn07CgoKLyoqCiAqIFF1aWNrIGNvZGUgbW91c2UgZG91YmxlIGNsaWNrIGhhbmRsZXIuCiAqLwpmdW5jdGlvbiBxdWlja0NvZGVIYW5kbGVyKGUpCnsKCXZhciB0YXJnZXQgPSBlLnRhcmdldCwKCQloaWdobGlnaHRlckRpdiA9IGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5zeW50YXhoaWdobGlnaHRlcicpLAoJCWNvbnRhaW5lciA9IGZpbmRQYXJlbnRFbGVtZW50KHRhcmdldCwgJy5jb250YWluZXInKSwKCQl0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyksCgkJaGlnaGxpZ2h0ZXIKCQk7CgoJaWYgKCFjb250YWluZXIgfHwgIWhpZ2hsaWdodGVyRGl2IHx8IGZpbmRFbGVtZW50KGNvbnRhaW5lciwgJ3RleHRhcmVhJykpCgkJcmV0dXJuOwoKCWhpZ2hsaWdodGVyID0gZ2V0SGlnaGxpZ2h0ZXJCeUlkKGhpZ2hsaWdodGVyRGl2LmlkKTsKCQoJLy8gYWRkIHNvdXJjZSBjbGFzcyBuYW1lCglhZGRDbGFzcyhoaWdobGlnaHRlckRpdiwgJ3NvdXJjZScpOwoKCS8vIEhhdmUgdG8gZ28gb3ZlciBlYWNoIGxpbmUgYW5kIGdyYWIgaXQncyB0ZXh0LCBjYW4ndCBqdXN0IGRvIGl0IG9uIHRoZQoJLy8gY29udGFpbmVyIGJlY2F1c2UgRmlyZWZveCBsb3NlcyBhbGwgXG4gd2hlcmUgYXMgV2Via2l0IGRvZXNuJ3QuCgl2YXIgbGluZXMgPSBjb250YWluZXIuY2hpbGROb2RlcywKCQljb2RlID0gW10KCQk7CgkKCWZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspCgkJY29kZS5wdXNoKGxpbmVzW2ldLmlubmVyVGV4dCB8fCBsaW5lc1tpXS50ZXh0Q29udGVudCk7CgkKCS8vIHVzaW5nIFxyIGluc3RlYWQgb2YgXHIgb3IgXHJcbiBtYWtlcyB0aGlzIHdvcmsgZXF1YWxseSB3ZWxsIG9uIElFLCBGRiBhbmQgV2Via2l0Cgljb2RlID0gY29kZS5qb2luKCdccicpOwoKICAgIC8vIEZvciBXZWJraXQgYnJvd3NlcnMsIHJlcGxhY2UgbmJzcCB3aXRoIGEgYnJlYWtpbmcgc3BhY2UKICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL1x1MDBhMC9nLCAiICIpOwoJCgkvLyBpbmplY3QgPHRleHRhcmVhLz4gdGFnCgl0ZXh0YXJlYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2RlKSk7Cgljb250YWluZXIuYXBwZW5kQ2hpbGQodGV4dGFyZWEpOwoJCgkvLyBwcmVzZWxlY3QgYWxsIHRleHQKCXRleHRhcmVhLmZvY3VzKCk7Cgl0ZXh0YXJlYS5zZWxlY3QoKTsKCQoJLy8gc2V0IHVwIGhhbmRsZXIgZm9yIGxvc3QgZm9jdXMKCWF0dGFjaEV2ZW50KHRleHRhcmVhLCAnYmx1cicsIGZ1bmN0aW9uKGUpCgl7CgkJdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7CgkJcmVtb3ZlQ2xhc3MoaGlnaGxpZ2h0ZXJEaXYsICdzb3VyY2UnKTsKCX0pOwp9OwoKLyoqCiAqIE1hdGNoIG9iamVjdC4KICovCnNoLk1hdGNoID0gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjc3MpCnsKCXRoaXMudmFsdWUgPSB2YWx1ZTsKCXRoaXMuaW5kZXggPSBpbmRleDsKCXRoaXMubGVuZ3RoID0gdmFsdWUubGVuZ3RoOwoJdGhpcy5jc3MgPSBjc3M7Cgl0aGlzLmJydXNoTmFtZSA9IG51bGw7Cn07CgpzaC5NYXRjaC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpCnsKCXJldHVybiB0aGlzLnZhbHVlOwp9OwoKLyoqCiAqIFNpbXVsYXRlcyBIVE1MIGNvZGUgd2l0aCBhIHNjcmlwdGluZyBsYW5ndWFnZSBlbWJlZGRlZC4KICogCiAqIEBwYXJhbSB7U3RyaW5nfSBzY3JpcHRCcnVzaE5hbWUgQnJ1c2ggbmFtZSBvZiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlLgogKi8Kc2guSHRtbFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlwdEJydXNoTmFtZSkKewoJdmFyIGJydXNoQ2xhc3MgPSBmaW5kQnJ1c2goc2NyaXB0QnJ1c2hOYW1lKSwKCQlzY3JpcHRCcnVzaCwKCQl4bWxCcnVzaCA9IG5ldyBzaC5icnVzaGVzLlhtbCgpLAoJCWJyYWNrZXRzUmVnZXggPSBudWxsLAoJCXJlZiA9IHRoaXMsCgkJbWV0aG9kc1RvRXhwb3NlID0gJ2dldERpdiBnZXRIdG1sIGluaXQnLnNwbGl0KCcgJykKCQk7CgoJaWYgKGJydXNoQ2xhc3MgPT0gbnVsbCkKCQlyZXR1cm47CgkKCXNjcmlwdEJydXNoID0gbmV3IGJydXNoQ2xhc3MoKTsKCQoJZm9yKHZhciBpID0gMDsgaSA8IG1ldGhvZHNUb0V4cG9zZS5sZW5ndGg7IGkrKykKCQkvLyBtYWtlIGEgY2xvc3VyZSBzbyB3ZSBkb24ndCBsb3NlIHRoZSBuYW1lIGFmdGVyIGkgY2hhbmdlcwoJCShmdW5jdGlvbigpIHsKCQkJdmFyIG5hbWUgPSBtZXRob2RzVG9FeHBvc2VbaV07CgkJCQoJCQlyZWZbbmFtZV0gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXJldHVybiB4bWxCcnVzaFtuYW1lXS5hcHBseSh4bWxCcnVzaCwgYXJndW1lbnRzKTsKCQkJfTsKCQl9KSgpOwoJCglpZiAoc2NyaXB0QnJ1c2guaHRtbFNjcmlwdCA9PSBudWxsKQoJewoJCWFsZXJ0KHNoLmNvbmZpZy5zdHJpbmdzLmJydXNoTm90SHRtbFNjcmlwdCArIHNjcmlwdEJydXNoTmFtZSk7CgkJcmV0dXJuOwoJfQoJCgl4bWxCcnVzaC5yZWdleExpc3QucHVzaCgKCQl7IHJlZ2V4OiBzY3JpcHRCcnVzaC5odG1sU2NyaXB0LmNvZGUsIGZ1bmM6IHByb2Nlc3MgfQoJKTsKCQoJZnVuY3Rpb24gb2Zmc2V0TWF0Y2hlcyhtYXRjaGVzLCBvZmZzZXQpCgl7CgkJZm9yICh2YXIgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSAKCQkJbWF0Y2hlc1tqXS5pbmRleCArPSBvZmZzZXQ7Cgl9CgkKCWZ1bmN0aW9uIHByb2Nlc3MobWF0Y2gsIGluZm8pCgl7CgkJdmFyIGNvZGUgPSBtYXRjaC5jb2RlLAoJCQltYXRjaGVzID0gW10sCgkJCXJlZ2V4TGlzdCA9IHNjcmlwdEJydXNoLnJlZ2V4TGlzdCwKCQkJb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaC5sZWZ0Lmxlbmd0aCwKCQkJaHRtbFNjcmlwdCA9IHNjcmlwdEJydXNoLmh0bWxTY3JpcHQsCgkJCXJlc3VsdAoJCQk7CgoJCS8vIGFkZCBhbGwgbWF0Y2hlcyBmcm9tIHRoZSBjb2RlCgkJZm9yICh2YXIgaSA9IDA7IGkgPCByZWdleExpc3QubGVuZ3RoOyBpKyspCgkJewoJCQlyZXN1bHQgPSBnZXRNYXRjaGVzKGNvZGUsIHJlZ2V4TGlzdFtpXSk7CgkJCW9mZnNldE1hdGNoZXMocmVzdWx0LCBvZmZzZXQpOwoJCQltYXRjaGVzID0gbWF0Y2hlcy5jb25jYXQocmVzdWx0KTsKCQl9CgkJCgkJLy8gYWRkIGxlZnQgc2NyaXB0IGJyYWNrZXQKCQlpZiAoaHRtbFNjcmlwdC5sZWZ0ICE9IG51bGwgJiYgbWF0Y2gubGVmdCAhPSBudWxsKQoJCXsKCQkJcmVzdWx0ID0gZ2V0TWF0Y2hlcyhtYXRjaC5sZWZ0LCBodG1sU2NyaXB0LmxlZnQpOwoJCQlvZmZzZXRNYXRjaGVzKHJlc3VsdCwgbWF0Y2guaW5kZXgpOwoJCQltYXRjaGVzID0gbWF0Y2hlcy5jb25jYXQocmVzdWx0KTsKCQl9CgkJCgkJLy8gYWRkIHJpZ2h0IHNjcmlwdCBicmFja2V0CgkJaWYgKGh0bWxTY3JpcHQucmlnaHQgIT0gbnVsbCAmJiBtYXRjaC5yaWdodCAhPSBudWxsKQoJCXsKCQkJcmVzdWx0ID0gZ2V0TWF0Y2hlcyhtYXRjaC5yaWdodCwgaHRtbFNjcmlwdC5yaWdodCk7CgkJCW9mZnNldE1hdGNoZXMocmVzdWx0LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxhc3RJbmRleE9mKG1hdGNoLnJpZ2h0KSk7CgkJCW1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHQpOwoJCX0KCQkKCQlmb3IgKHZhciBqID0gMDsgaiA8IG1hdGNoZXMubGVuZ3RoOyBqKyspCgkJCW1hdGNoZXNbal0uYnJ1c2hOYW1lID0gYnJ1c2hDbGFzcy5icnVzaE5hbWU7CgkJCQoJCXJldHVybiBtYXRjaGVzOwoJfQp9OwoKLyoqCiAqIE1haW4gSGlnaGxpdGhlciBjbGFzcy4KICogQGNvbnN0cnVjdG9yCiAqLwpzaC5IaWdobGlnaHRlciA9IGZ1bmN0aW9uKCkKewoJLy8gbm90IHB1dHRpbmcgYW55IGNvZGUgaW4gaGVyZSBiZWNhdXNlIG9mIHRoZSBwcm90b3R5cGUgaW5oZXJpdGFuY2UKfTsKCnNoLkhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKCS8qKgoJICogUmV0dXJucyB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgaGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQkJCQlOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuCgkgKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdFZhbHVlCQlEZWZhdWx0IHZhbHVlLgoJICogQHJldHVybiB7T2JqZWN0fQkJCQkJUmV0dXJucyBmb3VuZCB2YWx1ZSBvciBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS4KCSAqLwoJZ2V0UGFyYW06IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSkKCXsKCQl2YXIgcmVzdWx0ID0gdGhpcy5wYXJhbXNbbmFtZV07CgkJcmV0dXJuIHRvQm9vbGVhbihyZXN1bHQgPT0gbnVsbCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdCk7Cgl9LAoJCgkvKioKCSAqIFNob3J0Y3V0IHRvIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKS4KCSAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lCQlOYW1lIG9mIHRoZSBlbGVtZW50IHRvIGNyZWF0ZSAoRElWLCBBLCBldGMpLgoJICogQHJldHVybiB7SFRNTEVsZW1lbnR9CVJldHVybnMgbmV3IEhUTUwgZWxlbWVudC4KCSAqLwoJY3JlYXRlOiBmdW5jdGlvbihuYW1lKQoJewoJCXJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpOwoJfSwKCQoJLyoqCgkgKiBBcHBsaWVzIGFsbCByZWd1bGFyIGV4cHJlc3Npb24gdG8gdGhlIGNvZGUgYW5kIHN0b3JlcyBhbGwgZm91bmQKCSAqIG1hdGNoZXMgaW4gdGhlIGB0aGlzLm1hdGNoZXNgIGFycmF5LgoJICogQHBhcmFtIHtBcnJheX0gcmVnZXhMaXN0CQlMaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZQkJCVNvdXJjZSBjb2RlLgoJICogQHJldHVybiB7QXJyYXl9CQkJCVJldHVybnMgbGlzdCBvZiBtYXRjaGVzLgoJICovCglmaW5kTWF0Y2hlczogZnVuY3Rpb24ocmVnZXhMaXN0LCBjb2RlKQoJewoJCXZhciByZXN1bHQgPSBbXTsKCQkKCQlpZiAocmVnZXhMaXN0ICE9IG51bGwpCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhMaXN0Lmxlbmd0aDsgaSsrKSAKCQkJCS8vIEJVRzogbGVuZ3RoIHJldHVybnMgbGVuKzEgZm9yIGFycmF5IGlmIG1ldGhvZHMgYWRkZWQgdG8gcHJvdG90eXBlIGNoYWluIChvaXNpbmdAZ21haWwuY29tKQoJCQkJaWYgKHR5cGVvZiAocmVnZXhMaXN0W2ldKSA9PSAib2JqZWN0IikKCQkJCQlyZXN1bHQgPSByZXN1bHQuY29uY2F0KGdldE1hdGNoZXMoY29kZSwgcmVnZXhMaXN0W2ldKSk7CgkJCgkJLy8gc29ydCBhbmQgcmVtb3ZlIG5lc3RlZCB0aGUgbWF0Y2hlcwoJCXJldHVybiB0aGlzLnJlbW92ZU5lc3RlZE1hdGNoZXMocmVzdWx0LnNvcnQobWF0Y2hlc1NvcnRDYWxsYmFjaykpOwoJfSwKCQoJLyoqCgkgKiBDaGVja3MgdG8gc2VlIGlmIGFueSBvZiB0aGUgbWF0Y2hlcyBhcmUgaW5zaWRlIG9mIG90aGVyIG1hdGNoZXMuIAoJICogVGhpcyBwcm9jZXNzIHdvdWxkIGdldCByaWQgb2YgaGlnaGxpZ3RlZCBzdHJpbmdzIGluc2lkZSBjb21tZW50cywgCgkgKiBrZXl3b3JkcyBpbnNpZGUgc3RyaW5ncyBhbmQgc28gb24uCgkgKi8KCXJlbW92ZU5lc3RlZE1hdGNoZXM6IGZ1bmN0aW9uKG1hdGNoZXMpCgl7CgkJLy8gT3B0aW1pemVkIGJ5IEpvc2UgUHJhZG8gKGh0dHA6Ly9qb3NlcHJhZG8uY29tKQoJCWZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykgCgkJeyAKCQkJaWYgKG1hdGNoZXNbaV0gPT09IG51bGwpCgkJCQljb250aW51ZTsKCQkJCgkJCXZhciBpdGVtSSA9IG1hdGNoZXNbaV0sCgkJCQlpdGVtSUVuZFBvcyA9IGl0ZW1JLmluZGV4ICsgaXRlbUkubGVuZ3RoCgkJCQk7CgkJCQoJCQlmb3IgKHZhciBqID0gaSArIDE7IGogPCBtYXRjaGVzLmxlbmd0aCAmJiBtYXRjaGVzW2ldICE9PSBudWxsOyBqKyspIAoJCQl7CgkJCQl2YXIgaXRlbUogPSBtYXRjaGVzW2pdOwoJCQkJCgkJCQlpZiAoaXRlbUogPT09IG51bGwpIAoJCQkJCWNvbnRpbnVlOwoJCQkJZWxzZSBpZiAoaXRlbUouaW5kZXggPiBpdGVtSUVuZFBvcykgCgkJCQkJYnJlYWs7CgkJCQllbHNlIGlmIChpdGVtSi5pbmRleCA9PSBpdGVtSS5pbmRleCAmJiBpdGVtSi5sZW5ndGggPiBpdGVtSS5sZW5ndGgpCgkJCQkJbWF0Y2hlc1tpXSA9IG51bGw7CgkJCQllbHNlIGlmIChpdGVtSi5pbmRleCA%2BPSBpdGVtSS5pbmRleCAmJiBpdGVtSi5pbmRleCA8IGl0ZW1JRW5kUG9zKSAKCQkJCQltYXRjaGVzW2pdID0gbnVsbDsKCQkJfQoJCX0KCQkKCQlyZXR1cm4gbWF0Y2hlczsKCX0sCgkKCS8qKgoJICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIGludGVnZXIgbGluZSBudW1iZXJzIHN0YXJ0aW5nIGZyb20gdGhlICdmaXJzdC1saW5lJyBwYXJhbS4KCSAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIGludGVnZXJzLgoJICovCglmaWd1cmVPdXRMaW5lTnVtYmVyczogZnVuY3Rpb24oY29kZSkKCXsKCQl2YXIgbGluZXMgPSBbXSwKCQkJZmlyc3RMaW5lID0gcGFyc2VJbnQodGhpcy5nZXRQYXJhbSgnZmlyc3QtbGluZScpKQoJCQk7CgkJCgkJZWFjaExpbmUoY29kZSwgZnVuY3Rpb24obGluZSwgaW5kZXgpCgkJewoJCQlsaW5lcy5wdXNoKGluZGV4ICsgZmlyc3RMaW5lKTsKCQl9KTsKCQkKCQlyZXR1cm4gbGluZXM7Cgl9LAoJCgkvKioKCSAqIERldGVybWluZXMgaWYgc3BlY2lmaWVkIGxpbmUgbnVtYmVyIGlzIGluIHRoZSBoaWdobGlnaHRlZCBsaXN0LgoJICovCglpc0xpbmVIaWdobGlnaHRlZDogZnVuY3Rpb24obGluZU51bWJlcikKCXsKCQl2YXIgbGlzdCA9IHRoaXMuZ2V0UGFyYW0oJ2hpZ2hsaWdodCcsIFtdKTsKCQkKCQlpZiAodHlwZW9mKGxpc3QpICE9ICdvYmplY3QnICYmIGxpc3QucHVzaCA9PSBudWxsKSAKCQkJbGlzdCA9IFsgbGlzdCBdOwoJCQoJCXJldHVybiBpbmRleE9mKGxpc3QsIGxpbmVOdW1iZXIudG9TdHJpbmcoKSkgIT0gLTE7Cgl9LAoJCgkvKioKCSAqIEdlbmVyYXRlcyBIVE1MIG1hcmt1cCBmb3IgYSBzaW5nbGUgbGluZSBvZiBjb2RlIHdoaWxlIGRldGVybWluaW5nIGFsdGVybmF0aW5nIGxpbmUgc3R5bGUuCgkgKiBAcGFyYW0ge0ludGVnZXJ9IGxpbmVOdW1iZXIJTGluZSBudW1iZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBMaW5lCUhUTUwgbWFya3VwLgoJICogQHJldHVybiB7U3RyaW5nfQkJCQlSZXR1cm5zIEhUTUwgbWFya3VwLgoJICovCglnZXRMaW5lSHRtbDogZnVuY3Rpb24obGluZUluZGV4LCBsaW5lTnVtYmVyLCBjb2RlKQoJewoJCXZhciBjbGFzc2VzID0gWwoJCQknbGluZScsCgkJCSdudW1iZXInICsgbGluZU51bWJlciwKCQkJJ2luZGV4JyArIGxpbmVJbmRleCwKCQkJJ2FsdCcgKyAobGluZU51bWJlciAlIDIgPT0gMCA/IDEgOiAyKS50b1N0cmluZygpCgkJXTsKCQkKCQlpZiAodGhpcy5pc0xpbmVIaWdobGlnaHRlZChsaW5lTnVtYmVyKSkKCQkgCWNsYXNzZXMucHVzaCgnaGlnaGxpZ2h0ZWQnKTsKCQkKCQlpZiAobGluZU51bWJlciA9PSAwKQoJCQljbGFzc2VzLnB1c2goJ2JyZWFrJyk7CgkJCQoJCXJldHVybiAnPGRpdiBjbGFzcz0iJyArIGNsYXNzZXMuam9pbignICcpICsgJyI%2BJyArIGNvZGUgKyAnPC9kaXY%2BJzsKCX0sCgkKCS8qKgoJICogR2VuZXJhdGVzIEhUTUwgbWFya3VwIGZvciBsaW5lIG51bWJlciBjb2x1bW4uCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZQkJCUNvbXBsZXRlIGNvZGUgSFRNTCBtYXJrdXAuCgkgKiBAcGFyYW0ge0FycmF5fSBsaW5lTnVtYmVycwlDYWxjdWxhdGVkIGxpbmUgbnVtYmVycy4KCSAqIEByZXR1cm4ge1N0cmluZ30JCQkJUmV0dXJucyBIVE1MIG1hcmt1cC4KCSAqLwoJZ2V0TGluZU51bWJlcnNIdG1sOiBmdW5jdGlvbihjb2RlLCBsaW5lTnVtYmVycykKCXsKCQl2YXIgaHRtbCA9ICcnLAoJCQljb3VudCA9IHNwbGl0TGluZXMoY29kZSkubGVuZ3RoLAoJCQlmaXJzdExpbmUgPSBwYXJzZUludCh0aGlzLmdldFBhcmFtKCdmaXJzdC1saW5lJykpLAoJCQlwYWQgPSB0aGlzLmdldFBhcmFtKCdwYWQtbGluZS1udW1iZXJzJykKCQkJOwoJCQoJCWlmIChwYWQgPT0gdHJ1ZSkKCQkJcGFkID0gKGZpcnN0TGluZSArIGNvdW50IC0gMSkudG9TdHJpbmcoKS5sZW5ndGg7CgkJZWxzZSBpZiAoaXNOYU4ocGFkKSA9PSB0cnVlKQoJCQlwYWQgPSAwOwoJCQkKCQlmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspCgkJewoJCQl2YXIgbGluZU51bWJlciA9IGxpbmVOdW1iZXJzID8gbGluZU51bWJlcnNbaV0gOiBmaXJzdExpbmUgKyBpLAoJCQkJY29kZSA9IGxpbmVOdW1iZXIgPT0gMCA/IHNoLmNvbmZpZy5zcGFjZSA6IHBhZE51bWJlcihsaW5lTnVtYmVyLCBwYWQpCgkJCQk7CgkJCQkKCQkJaHRtbCArPSB0aGlzLmdldExpbmVIdG1sKGksIGxpbmVOdW1iZXIsIGNvZGUpOwoJCX0KCQkKCQlyZXR1cm4gaHRtbDsKCX0sCgkKCS8qKgoJICogU3BsaXRzIGJsb2NrIG9mIHRleHQgaW50byBpbmRpdmlkdWFsIERJViBsaW5lcy4KCSAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQkJQ29kZSB0byBoaWdobGlnaHQuCgkgKiBAcGFyYW0ge0FycmF5fSBsaW5lTnVtYmVycwlDYWxjdWxhdGVkIGxpbmUgbnVtYmVycy4KCSAqIEByZXR1cm4ge1N0cmluZ30JCQkJUmV0dXJucyBoaWdobGlnaHRlZCBjb2RlIGluIEhUTUwgZm9ybS4KCSAqLwoJZ2V0Q29kZUxpbmVzSHRtbDogZnVuY3Rpb24oaHRtbCwgbGluZU51bWJlcnMpCgl7CgkJaHRtbCA9IHRyaW0oaHRtbCk7CgkJCgkJdmFyIGxpbmVzID0gc3BsaXRMaW5lcyhodG1sKSwKCQkJcGFkTGVuZ3RoID0gdGhpcy5nZXRQYXJhbSgncGFkLWxpbmUtbnVtYmVycycpLAoJCQlmaXJzdExpbmUgPSBwYXJzZUludCh0aGlzLmdldFBhcmFtKCdmaXJzdC1saW5lJykpLAoJCQlodG1sID0gJycsCgkJCWJydXNoTmFtZSA9IHRoaXMuZ2V0UGFyYW0oJ2JydXNoJykKCQkJOwoKCQlmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGxpbmUgPSBsaW5lc1tpXSwKCQkJCWluZGVudCA9IC9eKCZuYnNwO3xccykrLy5leGVjKGxpbmUpLAoJCQkJc3BhY2VzID0gbnVsbCwKCQkJCWxpbmVOdW1iZXIgPSBsaW5lTnVtYmVycyA/IGxpbmVOdW1iZXJzW2ldIDogZmlyc3RMaW5lICsgaTsKCQkJCTsKCgkJCWlmIChpbmRlbnQgIT0gbnVsbCkKCQkJewoJCQkJc3BhY2VzID0gaW5kZW50WzBdLnRvU3RyaW5nKCk7CgkJCQlsaW5lID0gbGluZS5zdWJzdHIoc3BhY2VzLmxlbmd0aCk7CgkJCQlzcGFjZXMgPSBzcGFjZXMucmVwbGFjZSgnICcsIHNoLmNvbmZpZy5zcGFjZSk7CgkJCX0KCgkJCWxpbmUgPSB0cmltKGxpbmUpOwoJCQkKCQkJaWYgKGxpbmUubGVuZ3RoID09IDApCgkJCQlsaW5lID0gc2guY29uZmlnLnNwYWNlOwoJCQkKCQkJaHRtbCArPSB0aGlzLmdldExpbmVIdG1sKAoJCQkJaSwKCQkJCWxpbmVOdW1iZXIsIAoJCQkJKHNwYWNlcyAhPSBudWxsID8gJzxjb2RlIGNsYXNzPSInICsgYnJ1c2hOYW1lICsgJyBzcGFjZXMiPicgKyBzcGFjZXMgKyAnPC9jb2RlPicgOiAnJykgKyBsaW5lCgkJCSk7CgkJfQoJCQoJCXJldHVybiBodG1sOwoJfSwKCQoJLyoqCgkgKiBSZXR1cm5zIEhUTUwgZm9yIHRoZSB0YWJsZSB0aXRsZSBvciBlbXB0eSBzdHJpbmcgaWYgdGl0bGUgaXMgbnVsbC4KCSAqLwoJZ2V0VGl0bGVIdG1sOiBmdW5jdGlvbih0aXRsZSkKCXsKCQlyZXR1cm4gdGl0bGUgPyAnPGNhcHRpb24%2BJyArIHRpdGxlICsgJzwvY2FwdGlvbj4nIDogJyc7Cgl9LAoJCgkvKioKCSAqIEZpbmRzIGFsbCBtYXRjaGVzIGluIHRoZSBzb3VyY2UgY29kZS4KCSAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlCQlTb3VyY2UgY29kZSB0byBwcm9jZXNzIG1hdGNoZXMgaW4uCgkgKiBAcGFyYW0ge0FycmF5fSBtYXRjaGVzCURpc2NvdmVyZWQgcmVnZXggbWF0Y2hlcy4KCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBmb3JtYXR0ZWQgSFRNTCB3aXRoIHByb2Nlc3NlZCBtYXRoZXMuCgkgKi8KCWdldE1hdGNoZXNIdG1sOiBmdW5jdGlvbihjb2RlLCBtYXRjaGVzKQoJewoJCXZhciBwb3MgPSAwLCAKCQkJcmVzdWx0ID0gJycsCgkJCWJydXNoTmFtZSA9IHRoaXMuZ2V0UGFyYW0oJ2JydXNoJywgJycpCgkJCTsKCQkKCQlmdW5jdGlvbiBnZXRCcnVzaE5hbWVDc3MobWF0Y2gpCgkJewoJCQl2YXIgcmVzdWx0ID0gbWF0Y2ggPyAobWF0Y2guYnJ1c2hOYW1lIHx8IGJydXNoTmFtZSkgOiBicnVzaE5hbWU7CgkJCXJldHVybiByZXN1bHQgPyByZXN1bHQgKyAnICcgOiAnJzsKCQl9OwoJCQoJCS8vIEZpbmFsbHksIGdvIHRocm91Z2ggdGhlIGZpbmFsIGxpc3Qgb2YgbWF0Y2hlcyBhbmQgcHVsbCB0aGUgYWxsCgkJLy8gdG9nZXRoZXIgYWRkaW5nIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGF0IGlzbid0IGEgbWF0Y2guCgkJZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSAKCQl7CgkJCXZhciBtYXRjaCA9IG1hdGNoZXNbaV0sCgkJCQltYXRjaEJydXNoTmFtZQoJCQkJOwoJCQkKCQkJaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmxlbmd0aCA9PT0gMCkgCgkJCQljb250aW51ZTsKCQkJCgkJCW1hdGNoQnJ1c2hOYW1lID0gZ2V0QnJ1c2hOYW1lQ3NzKG1hdGNoKTsKCQkJCgkJCXJlc3VsdCArPSB3cmFwTGluZXNXaXRoQ29kZShjb2RlLnN1YnN0cihwb3MsIG1hdGNoLmluZGV4IC0gcG9zKSwgbWF0Y2hCcnVzaE5hbWUgKyAncGxhaW4nKQoJCQkJCSsgd3JhcExpbmVzV2l0aENvZGUobWF0Y2gudmFsdWUsIG1hdGNoQnJ1c2hOYW1lICsgbWF0Y2guY3NzKQoJCQkJCTsKCgkJCXBvcyA9IG1hdGNoLmluZGV4ICsgbWF0Y2gubGVuZ3RoICsgKG1hdGNoLm9mZnNldCB8fCAwKTsKCQl9CgoJCS8vIGRvbid0IGZvcmdldCB0byBhZGQgd2hhdGV2ZXIncyByZW1haW5pbmcgaW4gdGhlIHN0cmluZwoJCXJlc3VsdCArPSB3cmFwTGluZXNXaXRoQ29kZShjb2RlLnN1YnN0cihwb3MpLCBnZXRCcnVzaE5hbWVDc3MoKSArICdwbGFpbicpOwoKCQlyZXR1cm4gcmVzdWx0OwoJfSwKCQoJLyoqCgkgKiBHZW5lcmF0ZXMgSFRNTCBtYXJrdXAgZm9yIHRoZSB3aG9sZSBzeW50YXggaGlnaGxpZ2h0ZXIuCgkgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBTb3VyY2UgY29kZS4KCSAqIEByZXR1cm4ge1N0cmluZ30gUmV0dXJucyBIVE1MIG1hcmt1cC4KCSAqLwoJZ2V0SHRtbDogZnVuY3Rpb24oY29kZSkKCXsKCQl2YXIgaHRtbCA9ICcnLAoJCQljbGFzc2VzID0gWyAnc3ludGF4aGlnaGxpZ2h0ZXInIF0sCgkJCXRhYlNpemUsCgkJCW1hdGNoZXMsCgkJCWxpbmVOdW1iZXJzCgkJCTsKCQkKCQkvLyBwcm9jZXNzIGxpZ2h0IG1vZGUKCQlpZiAodGhpcy5nZXRQYXJhbSgnbGlnaHQnKSA9PSB0cnVlKQoJCQl0aGlzLnBhcmFtcy50b29sYmFyID0gdGhpcy5wYXJhbXMuZ3V0dGVyID0gZmFsc2U7CgoJCWNsYXNzTmFtZSA9ICdzeW50YXhoaWdobGlnaHRlcic7CgoJCWlmICh0aGlzLmdldFBhcmFtKCdjb2xsYXBzZScpID09IHRydWUpCgkJCWNsYXNzZXMucHVzaCgnY29sbGFwc2VkJyk7CgkJCgkJaWYgKChndXR0ZXIgPSB0aGlzLmdldFBhcmFtKCdndXR0ZXInKSkgPT0gZmFsc2UpCgkJCWNsYXNzZXMucHVzaCgnbm9ndXR0ZXInKTsKCgkJLy8gYWRkIGN1c3RvbSB1c2VyIHN0eWxlIG5hbWUKCQljbGFzc2VzLnB1c2godGhpcy5nZXRQYXJhbSgnY2xhc3MtbmFtZScpKTsKCgkJLy8gYWRkIGJydXNoIGFsaWFzIHRvIHRoZSBjbGFzcyBuYW1lIGZvciBjdXN0b20gQ1NTCgkJY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0UGFyYW0oJ2JydXNoJykpOwoKCQljb2RlID0gdHJpbUZpcnN0QW5kTGFzdExpbmVzKGNvZGUpCgkJCS5yZXBsYWNlKC9cci9nLCAnICcpIC8vIElFIGxldHMgdGhlc2UgYnVnZ2VycyB0aHJvdWdoCgkJCTsKCgkJdGFiU2l6ZSA9IHRoaXMuZ2V0UGFyYW0oJ3RhYi1zaXplJyk7CgoJCS8vIHJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcwoJCWNvZGUgPSB0aGlzLmdldFBhcmFtKCdzbWFydC10YWJzJykgPT0gdHJ1ZQoJCQk/IHByb2Nlc3NTbWFydFRhYnMoY29kZSwgdGFiU2l6ZSkKCQkJOiBwcm9jZXNzVGFicyhjb2RlLCB0YWJTaXplKQoJCQk7CgoJCS8vIHVuaW5kZW50IGNvZGUgYnkgdGhlIGNvbW1vbiBpbmRlbnRhdGlvbgoJCWlmICh0aGlzLmdldFBhcmFtKCd1bmluZGVudCcpKQoJCQljb2RlID0gdW5pbmRlbnQoY29kZSk7CgoJCWlmIChndXR0ZXIpCgkJCWxpbmVOdW1iZXJzID0gdGhpcy5maWd1cmVPdXRMaW5lTnVtYmVycyhjb2RlKTsKCQkKCQkvLyBmaW5kIG1hdGNoZXMgaW4gdGhlIGNvZGUgdXNpbmcgYnJ1c2hlcyByZWdleCBsaXN0CgkJbWF0Y2hlcyA9IHRoaXMuZmluZE1hdGNoZXModGhpcy5yZWdleExpc3QsIGNvZGUpOwoJCS8vIHByb2Nlc3NlcyBmb3VuZCBtYXRjaGVzIGludG8gdGhlIGh0bWwKCQlodG1sID0gdGhpcy5nZXRNYXRjaGVzSHRtbChjb2RlLCBtYXRjaGVzKTsKCQkvLyBmaW5hbGx5LCBzcGxpdCBhbGwgbGluZXMgc28gdGhhdCB0aGV5IHdyYXAgd2VsbAoJCWh0bWwgPSB0aGlzLmdldENvZGVMaW5lc0h0bWwoaHRtbCwgbGluZU51bWJlcnMpOwoKCQkvLyBmaW5hbGx5LCBwcm9jZXNzIHRoZSBsaW5rcwoJCWlmICh0aGlzLmdldFBhcmFtKCdhdXRvLWxpbmtzJykpCgkJCWh0bWwgPSBwcm9jZXNzVXJscyhodG1sKTsKCQkKCQlpZiAodHlwZW9mKG5hdmlnYXRvcikgIT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFLykpCgkJCWNsYXNzZXMucHVzaCgnaWUnKTsKCQkKCQlodG1sID0gCgkJCSc8ZGl2IGlkPSInICsgZ2V0SGlnaGxpZ2h0ZXJJZCh0aGlzLmlkKSArICciIGNsYXNzPSInICsgY2xhc3Nlcy5qb2luKCcgJykgKyAnIj4nCgkJCQkrICh0aGlzLmdldFBhcmFtKCd0b29sYmFyJykgPyBzaC50b29sYmFyLmdldEh0bWwodGhpcykgOiAnJykKCQkJCSsgJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI%2BJwoJCQkJCSsgdGhpcy5nZXRUaXRsZUh0bWwodGhpcy5nZXRQYXJhbSgndGl0bGUnKSkKCQkJCQkrICc8dGJvZHk%2BJwoJCQkJCQkrICc8dHI%2BJwoJCQkJCQkJKyAoZ3V0dGVyID8gJzx0ZCBjbGFzcz0iZ3V0dGVyIj4nICsgdGhpcy5nZXRMaW5lTnVtYmVyc0h0bWwoY29kZSkgKyAnPC90ZD4nIDogJycpCgkJCQkJCQkrICc8dGQgY2xhc3M9ImNvZGUiPicKCQkJCQkJCQkrICc8ZGl2IGNsYXNzPSJjb250YWluZXIiPicKCQkJCQkJCQkJKyBodG1sCgkJCQkJCQkJKyAnPC9kaXY%2BJwoJCQkJCQkJKyAnPC90ZD4nCgkJCQkJCSsgJzwvdHI%2BJwoJCQkJCSsgJzwvdGJvZHk%2BJwoJCQkJKyAnPC90YWJsZT4nCgkJCSsgJzwvZGl2PicKCQkJOwoJCQkKCQlyZXR1cm4gaHRtbDsKCX0sCgkKCS8qKgoJICogSGlnaGxpZ2h0cyB0aGUgY29kZSBhbmQgcmV0dXJucyBjb21wbGV0ZSBIVE1MLgoJICogQHBhcmFtIHtTdHJpbmd9IGNvZGUgICAgIENvZGUgdG8gaGlnaGxpZ2h0LgoJICogQHJldHVybiB7RWxlbWVudH0gICAgICAgIFJldHVybnMgY29udGFpbmVyIERJViBlbGVtZW50IHdpdGggYWxsIG1hcmt1cC4KCSAqLwoJZ2V0RGl2OiBmdW5jdGlvbihjb2RlKQoJewoJCWlmIChjb2RlID09PSBudWxsKSAKCQkJY29kZSA9ICcnOwoJCQoJCXRoaXMuY29kZSA9IGNvZGU7CgoJCXZhciBkaXYgPSB0aGlzLmNyZWF0ZSgnZGl2Jyk7CgoJCS8vIGNyZWF0ZSBtYWluIEhUTUwKCQlkaXYuaW5uZXJIVE1MID0gdGhpcy5nZXRIdG1sKGNvZGUpOwoJCQoJCS8vIHNldCB1cCBjbGljayBoYW5kbGVycwoJCWlmICh0aGlzLmdldFBhcmFtKCd0b29sYmFyJykpCgkJCWF0dGFjaEV2ZW50KGZpbmRFbGVtZW50KGRpdiwgJy50b29sYmFyJyksICdjbGljaycsIHNoLnRvb2xiYXIuaGFuZGxlcik7CgkJCgkJaWYgKHRoaXMuZ2V0UGFyYW0oJ3F1aWNrLWNvZGUnKSkKCQkJYXR0YWNoRXZlbnQoZmluZEVsZW1lbnQoZGl2LCAnLmNvZGUnKSwgJ2RibGNsaWNrJywgcXVpY2tDb2RlSGFuZGxlcik7CgkJCgkJcmV0dXJuIGRpdjsKCX0sCgkKCS8qKgoJICogSW5pdGlhbGl6ZXMgdGhlIGhpZ2hsaWdodGVyL2JydXNoLgoJICoKCSAqIENvbnN0cnVjdG9yIGlzbid0IHVzZWQgZm9yIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbm90aGluZyBleGVjdXRlcyBkdXJpbmcgbmVjZXNzYXJ5CgkgKiBgbmV3IFN5bnRheEhpZ2hsaWdodGVyLkhpZ2hsaWdodGVyKClgIGNhbGwgd2hlbiBzZXR0aW5nIHVwIGJydXNoIGluaGVyaXRhbmNlLgoJICoKCSAqIEBwYXJhbSB7SGFzaH0gcGFyYW1zIEhpZ2hsaWdodGVyIHBhcmFtZXRlcnMuCgkgKi8KCWluaXQ6IGZ1bmN0aW9uKHBhcmFtcykKCXsKCQl0aGlzLmlkID0gZ3VpZCgpOwoJCQoJCS8vIHJlZ2lzdGVyIHRoaXMgaW5zdGFuY2UgaW4gdGhlIGhpZ2hsaWdodGVycyBsaXN0CgkJc3RvcmVIaWdobGlnaHRlcih0aGlzKTsKCQkKCQkvLyBsb2NhbCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZGVmYXVsdHMKCQl0aGlzLnBhcmFtcyA9IG1lcmdlKHNoLmRlZmF1bHRzLCBwYXJhbXMgfHwge30pCgkJCgkJLy8gcHJvY2VzcyBsaWdodCBtb2RlCgkJaWYgKHRoaXMuZ2V0UGFyYW0oJ2xpZ2h0JykgPT0gdHJ1ZSkKCQkJdGhpcy5wYXJhbXMudG9vbGJhciA9IHRoaXMucGFyYW1zLmd1dHRlciA9IGZhbHNlOwoJfSwKCQoJLyoqCgkgKiBDb252ZXJ0cyBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBrZXl3b3JkcyBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy4KCSAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgICAgU3BhY2Ugc2VwYXJhdGVkIGtleXdvcmRzLgoJICogQHJldHVybiB7U3RyaW5nfSAgICAgICBSZXR1cm5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuCgkgKi8KCWdldEtleXdvcmRzOiBmdW5jdGlvbihzdHIpCgl7CgkJc3RyID0gc3RyCgkJCS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpCgkJCS5yZXBsYWNlKC9ccysvZywgJ3wnKQoJCQk7CgkJCgkJcmV0dXJuICdcXGIoPzonICsgc3RyICsgJylcXGInOwoJfSwKCQoJLyoqCgkgKiBNYWtlcyBhIGJydXNoIGNvbXBhdGlibGUgd2l0aCB0aGUgYGh0bWwtc2NyaXB0YCBmdW5jdGlvbmFsaXR5LgoJICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4R3JvdXAgT2JqZWN0IGNvbnRhaW5pbmcgYGxlZnRgIGFuZCBgcmlnaHRgIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCgkgKi8KCWZvckh0bWxTY3JpcHQ6IGZ1bmN0aW9uKHJlZ2V4R3JvdXApCgl7CgkJdmFyIHJlZ2V4ID0geyAnZW5kJyA6IHJlZ2V4R3JvdXAucmlnaHQuc291cmNlIH07CgoJCWlmKHJlZ2V4R3JvdXAuZW9mKQoJCQlyZWdleC5lbmQgPSAiKD86KD86IiArIHJlZ2V4LmVuZCArICIpfCQpIjsKCQkKCQl0aGlzLmh0bWxTY3JpcHQgPSB7CgkJCWxlZnQgOiB7IHJlZ2V4OiByZWdleEdyb3VwLmxlZnQsIGNzczogJ3NjcmlwdCcgfSwKCQkJcmlnaHQgOiB7IHJlZ2V4OiByZWdleEdyb3VwLnJpZ2h0LCBjc3M6ICdzY3JpcHQnIH0sCgkJCWNvZGUgOiBuZXcgWFJlZ0V4cCgKCQkJCSIoPzxsZWZ0PiIgKyByZWdleEdyb3VwLmxlZnQuc291cmNlICsgIikiICsKCQkJCSIoPzxjb2RlPi4qPykiICsKCQkJCSIoPzxyaWdodD4iICsgcmVnZXguZW5kICsgIikiLAoJCQkJInNnaSIKCQkJCSkKCQl9OwoJfQp9OyAvLyBlbmQgb2YgSGlnaGxpZ2h0ZXIKCnJldHVybiBzaDsKfSgpOyAvLyBlbmQgb2YgYW5vbnltb3VzIGZ1bmN0aW9uCgovLyBDb21tb25KUwp0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzLlN5bnRheEhpZ2hsaWdodGVyID0gU3ludGF4SGlnaGxpZ2h0ZXIgOiBudWxsOwo%3D"> /** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ </script> <script type="text/javascript" src="data:application/javascript;base64,LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIgaXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9uYXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdodGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAwMiAyMDEwKQogKgogKiBAY29weXJpZ2h0CiAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEFsZXggR29yYmF0Y2hldi4KICoKICogQGxpY2Vuc2UKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqLwooZnVuY3Rpb24oKQp7CgkvLyBDb21tb25KUwoJdHlwZW9mKHJlcXVpcmUpICE9ICd1bmRlZmluZWQnID8gU3ludGF4SGlnaGxpZ2h0ZXIgPSByZXF1aXJlKCdzaENvcmUnKS5TeW50YXhIaWdobGlnaHRlciA6IG51bGw7CgoJZnVuY3Rpb24gQnJ1c2goKQoJewoJCS8vIENvbnRyaWJ1dGVkIGJ5IEdoZW9yZ2hlIE1pbGFzIGFuZCBBaG1hZCBTaGVyaWYKCgkJdmFyIGtleXdvcmRzID0gICdhbmQgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlICcgKwoJCQkJCQknZXhjZXB0IGV4ZWMgZmluYWxseSBmb3IgZnJvbSBnbG9iYWwgaWYgaW1wb3J0IGluIGlzICcgKwoJCQkJCQknbGFtYmRhIG5vdCBvciBwYXNzIHByaW50IHJhaXNlIHJldHVybiB0cnkgeWllbGQgd2hpbGUnOwoKCQl2YXIgZnVuY3MgPSAnX19pbXBvcnRfXyBhYnMgYWxsIGFueSBhcHBseSBiYXNlc3RyaW5nIGJpbiBib29sIGJ1ZmZlciBjYWxsYWJsZSAnICsKCQkJCQknY2hyIGNsYXNzbWV0aG9kIGNtcCBjb2VyY2UgY29tcGlsZSBjb21wbGV4IGRlbGF0dHIgZGljdCBkaXIgJyArCgkJCQkJJ2Rpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjZmlsZSBmaWxlIGZpbHRlciBmbG9hdCBmb3JtYXQgZnJvemVuc2V0ICcgKwoJCQkJCSdnZXRhdHRyIGdsb2JhbHMgaGFzYXR0ciBoYXNoIGhlbHAgaGV4IGlkIGlucHV0IGludCBpbnRlcm4gJyArCgkJCQkJJ2lzaW5zdGFuY2UgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaXN0IGxvY2FscyBsb25nIG1hcCBtYXggbWluIG5leHQgJyArCgkJCQkJJ29iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByaW50IHByb3BlcnR5IHJhbmdlIHJhd19pbnB1dCByZWR1Y2UgJyArCgkJCQkJJ3JlbG9hZCByZXByIHJldmVyc2VkIHJvdW5kIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2QgJyArCgkJCQkJJ3N0ciBzdW0gc3VwZXIgdHVwbGUgdHlwZSB0eXBlIHVuaWNociB1bmljb2RlIHZhcnMgeHJhbmdlIHppcCc7CgoJCXZhciBzcGVjaWFsID0gICdOb25lIFRydWUgRmFsc2Ugc2VsZiBjbHMgY2xhc3NfJzsKCgkJdGhpcy5yZWdleExpc3QgPSBbCgkJCQl7IHJlZ2V4OiBTeW50YXhIaWdobGlnaHRlci5yZWdleExpYi5zaW5nbGVMaW5lUGVybENvbW1lbnRzLCBjc3M6ICdjb21tZW50cycgfSwKCQkJCXsgcmVnZXg6IC9eXHMqQFx3Ky9nbSwgCQkJCQkJCQkJCWNzczogJ2RlY29yYXRvcicgfSwKCQkJCXsgcmVnZXg6IC8oWydcIl17M30pKFteXDFdKSo/XDEvZ20sIAkJCQkJCWNzczogJ2NvbW1lbnRzJyB9LAoJCQkJeyByZWdleDogLyIoPyEiKSg/OlwufFxcXCJ8W15cIiJcbl0pKiIvZ20sIAkJCQkJY3NzOiAnc3RyaW5nJyB9LAoJCQkJeyByZWdleDogLycoPyEnKSg/OlwufChcXFwnKXxbXlwnJ1xuXSkqJy9nbSwgCQkJCWNzczogJ3N0cmluZycgfSwKCQkJCXsgcmVnZXg6IC9cK3xcLXxcKnxcL3xcJXw9fD09L2dtLCAJCQkJCQkJY3NzOiAna2V5d29yZCcgfSwKCQkJCXsgcmVnZXg6IC9cYlxkK1wuP1x3Ki9nLCAJCQkJCQkJCQljc3M6ICd2YWx1ZScgfSwKCQkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3b3JkcyhmdW5jcyksICdnbWknKSwJCWNzczogJ2Z1bmN0aW9ucycgfSwKCQkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3b3JkcyhrZXl3b3JkcyksICdnbScpLCAJCWNzczogJ2tleXdvcmQnIH0sCgkJCQl7IHJlZ2V4OiBuZXcgUmVnRXhwKHRoaXMuZ2V0S2V5d29yZHMoc3BlY2lhbCksICdnbScpLCAJCWNzczogJ2NvbG9yMScgfQoJCQkJXTsKCgkJdGhpcy5mb3JIdG1sU2NyaXB0KFN5bnRheEhpZ2hsaWdodGVyLnJlZ2V4TGliLmFzcFNjcmlwdFRhZ3MpOwoJfTsKCglCcnVzaC5wcm90b3R5cGUJPSBuZXcgU3ludGF4SGlnaGxpZ2h0ZXIuSGlnaGxpZ2h0ZXIoKTsKCUJydXNoLmFsaWFzZXMJPSBbJ3B5JywgJ3B5dGhvbiddOwoKCVN5bnRheEhpZ2hsaWdodGVyLmJydXNoZXMuUHl0aG9uID0gQnJ1c2g7CgoJLy8gQ29tbW9uSlMKCXR5cGVvZihleHBvcnRzKSAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydHMuQnJ1c2ggPSBCcnVzaCA6IG51bGw7Cn0pKCk7Cg%3D%3D"> /** * SyntaxHighlighter * http://alexgorbatchev.com/SyntaxHighlighter * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/SyntaxHighlighter/donate.html * * @version * 3.0.83 (July 02 2010) * * @copyright * Copyright (C) 2004-2010 Alex Gorbatchev. * * @license * Dual licensed under the MIT and GPL licenses. */ </script> <style type="text/css"> body { color: #000; background: #FFF; font-family: 'Helvetica Neue', 'Helvetica', 'Verdana', sans-serif; font-size: 12px; padding: 0; margin: 0; } a { color: #FAFF78; } h1, h2, h3, h4, h5, h6 { font-family: 'Helvetica', sans-serif; } h1 { margin: 0; padding: .75em 1.5em 1em 1.5em; color: #F90; font-size: 14px; font-weight: bold; } h1 img { padding-right: 5px; } h2 { color: #311F00; } header { width: 100%; background: #311F00; } div#error-content { padding: 0 2em; } .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter table, .syntaxhighlighter table td, .syntaxhighlighter table tr, .syntaxhighlighter table tbody, .syntaxhighlighter table thead, .syntaxhighlighter table caption, .syntaxhighlighter textarea { font-family: monospace !important; } .syntaxhighlighter .container { background: #FDF6E3 !important; padding: 1em !important; } .syntaxhighlighter .container .line { background: #FDF6E3 !important; } .syntaxhighlighter .container .line .python.string { color: #C70 !important; } #debug { background: #FDF6E3; padding: 10px !important; margin-top: 10px; font-family: monospace; } </style> <script type="text/javascript"> SyntaxHighlighter.defaults['gutter'] = false; SyntaxHighlighter.defaults['toolbar'] = false; SyntaxHighlighter.all() </script> <script type="text/javascript"> function get_request() { /* ajax sans jquery makes me sad */ var request = false; // Mozilla/Safari if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); } return request; } function debug_request(btn) { btn.disabled = true; request = get_request(); request.open('GET', '/__pecan_initiate_pdb__', true); request.onreadystatechange = function() { if (request.readyState == 4) { btn.disabled = false; } } request.send(''); /* automatically timeout after 5 minutes, re-enabling the button */ setTimeout(function() { request.abort(); }, 5 * 60 * 1000); } </script> </head> <body> <header> <h1> <img style="padding-top: 7px" align="center" alt="pecan logo" height="25" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAmCAYAAAAP4F9VAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAKJGNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G%2BfAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m%2BBkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd%2Bq00KR5yNAlWZzrF%2BIe%2BuNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf%2Bja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL%2BkmMGs4i5kfNuQ62EnBuam8tzP%2BQ%2BtSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK%2BMdg8y5nkZfFO%2Bse9LQr3/09xZr%2B5GcaSufeAfAww60mAPx%2Bq8u/bAr8rFCLrx7s%2BvqEkw8qb%2Bp26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC%2BW8cndbl9t2SfhU%2BFb4UfhO%2BF74GWThknBZ%2BEm4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1%2BU0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL%2BiH6jB9y2x83ok898GOPQX3lk3Itl0A%2BBrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn%2BVmc%2BNL9L8GcMn8F1kAcXjEKMJAAAAACXBIWXMAAAsTAAALEwEAmpwYAAANHElEQVR4nO2bf6xlVXXHP/uce2fmMc9xADsOCqJWO4WKEKIVSPmVkNRqFElFKP1h/9D6T1stCjFp/yJtbNqY2NBorBGhWqtN/BF/tGpURAutMkNkHEh0qiDOwFCZnw5v3r33nP3tH3uve9Y979z77jBgw%2BStZL9z7jlrr71%2B7b3XXuu8IIkOCPkqoATqLiQHZcaNq%2BB5KPI4q9EOGXc1vC6emLNfj8T7LP7n5dfTrEl6OV7wOp933E47BUkv9L%2BBJeBA/t0HRvn%2BAuA1wFkxxvUUHFStB8uyvAf434zTA6o5BPB4zwEuBM4DzgDWAUfquv5xWZbfBX58nLQDSVjDPbWiuqBH7xxgK7CQZfwp8APgfmCYcac58/j5oUOHNm/evPmVwLbM72KMUUVRHK7r%2BpGyLHcCOx0vgW7H2Zxlr2kmFMDjmfe2HFvqur60LMtfz30HwB7gXmBHxlmpI0mHJR2OMR6WdCjGeFDSRyStk4Sky2KM39Z0OFDX9T9KOjXj9/K1qwVJZb5/vqS/l/SzGbSXJX1R0oW5T5FpTKNfuvvzJH00Ku6bQV%2BSfiTpLyUtdNDwv7dIulXSo6vQk6T7JP2Ro1F00PuHhBr3K9ngUL7ulnSNw1%2BU9AFJB2aMd4%2BkV3Xxz4xOV0m6vvVsZC3GOJJU2YsY4x5Jv6npRg5O0Gujomc4KhlzKbdjeZwx1HX9Z45Ol5G9YH8rqW7RH%2BYxrE3Ql7RraWnprBYtu75Y0iNtejHGY7N4lvRvTma7Gs2PajocVtLhi5QMblBJGkZF0/8o86Is71VtXeCErSXVMUZTzNccw4NMvFJj5NoRHkhSjHE4GAxeqW4j26B/7hge5uaNMYaoWOX3Bu%2BcQruQxO7du9dL%2Buq4f%2BOEQ6cIe1c7mZbzs7vV4ZAxxs/nbkumpy5%2BMxhN4/tj6jbwB/P7J9Xo3ibMLyRdGWM04x7TpJ28/m1ySNLPJZ3ux/Mz2CvAC1BpCmQlGa4NslONAWym2e83NYPFqjXOLkl3SPpg1MSWYIYwuECTivKz%2BQsZZ5DlsWb8Ho6Ke5UU2JbbeLko0%2Brn63MkPex0UWdaI0lfkfQhpS3tP1s0o%2BGORqMrnR5KSdR1/UmtBOPlCUk78v2xDjwDr79Bvt7k%2BUdp/3nAdYhZgCOSjjgC%2B2OM35H0SaV90S9ZZgDz2pudQOa5myU9nt97DzxQVdV1WrnkviHGuOQEN9r/rm7neU9LUC/8Z5SWrzMkbZK0taqqP3b8DLPBJOn1mZ7FIKdK2uv4MHhtB8/XqFn1orv/uJpZVUiiqqqrJd0i6Z81HUzmo3Vd31HX9Z9IulbSjUqxg5fTxrpLTj/G2I2JoziKiibEPklXSLp0NBpdLGlrS5iNkt6hZjbY0qQ8uM0AU9RfOaa9oi5VMyPXuYakt0vjlcL6RKUAys%2ByLcpBSAtXkt6mlYawdotWwhtbfG%2BWojmzOc%2BjWX7D66txtA9lHB%2Bj/FDSenXHEIuSDmY875Rm3LuVYoA276dLeijj%2BNVwr6TnZpwCpeXiZseUYqOfV3cQLjUZFb5Cae23gazz5U6gvqQHHY552/s66LfbAx39/iK/s8jXZu/I4UrSu9XM8r6aGWTGuz7GuEtpeb1HKfq9RBK6c2ywUtI2Jaf6DUnn5/tT1B3svT6P7bevw5LO1ORebM55htOf4Rv/2x2eOVEvj42k90ppYqrR%2B5OSXmK89wCKopg4jIfmWHZKvq4nnYcjkwfwdcAu4O3A5/KzCujHGC8piuIuQKPR6MJ%2Bv3%2BO9ZMUQgiQzqFnA89dcX5LtJ4EHgXOxSUMYowXFkUBzfn1ja5fnc%2BPu4D3Wxcmz6LW71MhhE/RBVeM%2BamBH3biJCiBTbkdy7IY/zbmArCY7025tbv6c7AllwDeQdL7etK5tw07E8FQ5H52du4bQq%2BjkyEuA4/lZxUrD%2BsxDxqAzwPbgVdlhvtFUWwzxH6//wonTJmNK6HbAyEwO9tjwlpmiKIoXuDoPR8YO4/j89M2PE2y5qnCWMFHjx7dsri4%2BFukpM95wFnA6cApkvohhNL1y4KqCCEUc45Vk2T9BimBUdJtXEgJG4SKQPD2GetzqoEl7Q0h7MnPpqXwRJM9%2BRbJwAZb3f3Z7YGBEJhQxjTwq4bNznWtcU43mvk9dV3vKMuyPWYXhNbvNn4JDAbw0vVw0%2BLi4puB53USCuGppCWbgdPKZjS%2Bka%2Brp2ltSnbANAMD7Cd7yJxg6co8lBbcqBunsDSPV3ucfuqsDbaNVFQbe/S8eAGgLMuDc/I9yyim3OvXodsgLABIqkMII2BDC3%2BKmueDbFyT93/m4G9VWGFg2x9DCJtJAiyvQsMY2DL5O9g%2BR4xxkPdMex%2BAXwD/mumXzCdIBBYD4b8bAXrt5cvot53qeMHyz78PfCI71AgIIYRefn%2BMtD8/DPEAFEdIW8Z1JEPNmFtTIQDUdb2UV6ATgq4ZbJb4NVJwcx%2BTSe82M7Z8n9d6t39MsCj2Onw/e98LzDvT2mAGeAI4SgpiRBOknENa5uZVsK%2BI2cw9TehWZ9xepjcE/gb4OPBw6jd24F8Frn%2BKMjXMPA3GhY4lMgdAFUCM8d35se21E6g0StlAEszDj%2BymqiqrrpQ0kfZG4Ib8fGN%2B1%2Btotueuo4kQSxrH2gM85Pi022vzTTtKXSFyplnTGNf0cnUgnAqMhPqOzpuBW/K4tqzacn0R0ytIv3SYtgeWgIqiuAH4U5LwvoRly4/N6o00gY45wn/la9i3b992mrKfV/iNJOU%2BSRMlV66Zwoe51aSZZHVWm8UWkNizCOEy4A8yjT7N7LNW0BwnRsBlwG9nfJs%2B41UpECzQuRf4Io1D2qpkkbo5VmTSsYzmvNH0icB4rGmDecZuBT5AilZF4%2BmQ6pmbSMHY4/lZT9JjwN35d//MM888Bth5MwKlUA281D0fsDL4ijSKex9wuzHe4vcTNjaTe/lHgDeQnKOiWcJtKR7l%2Bz8E7pT0YZLRBwAxRh%2BtG9gzc1RbVWrgtcDVkqBRsgVPh/PPEz2yzQPNWDnjcVMrE6ScIfEpvyOSvlrX9W2SPi3pe0q13CdijN9TkzaTpL/Wylz0aS5j08443S/pdS5DY22rpLfGGO93tF/naPuiwx35/XLm3af9blcqImxyfV4g6bqOWrfxPs4UKacNY6OOt2plBuvyXFP3ciVWErxL0rnLy8vbWnxvUSouSJPZL8uJd5Vee5IYjUZXOL68rd6plHV7%2BUwDqyk%2BtJ93QMx/4x6lwoJPyxmTv5dxxkrIVSWDnyhVaD4r6TuS9rt3lgd%2BQI2hfI35eZIea%2BG2y3o/lXSvpO9rsoBuJThTkhXPL82yRavBOGE/LOm6LFNXbTc6WT18WZM6OXEDW31o5VifXc3AUpPItnql1YMrV1NdcviXT2HMPPZmhzuQFDPdFdy58a1ubHBDawy7nq/GcFbDnuWgnrYpdsfS0tILHd//kZ9b2W4an8bfbkk/yPfjmm2MsV0N6zKwLxqsamClYpCN4x3KHPxzXXtwBJB0H/AFmqAq5r3EghSFECwgWQCqmvoa4C66v5%2ByoOPvSLnrirSfWV66kjQknYutDUEW5dre%2BC6aNKQFPlUe8/7BYPAaUo7Wom6DUaLHILchaf812gVwG3DxwsLCXpoA7G2SHiFFyZZVGwkNHL3ljC/gd2miesvfy2WourJSFtOodT8NBDAcDn%2Bef9uxLuaUpQAkxa4ZbEvmd5WWv/fP8FqDr0k6Z4bHWfNL6jZJ/6LmQ4FZcEDSP0l6WYtWp2dv3769L%2Bk9Unx4DtqKMX5Tk/Xd9ic7Z6iZydPgQVklKpUch1Pw7tSknraqmXEertZ0fXrZPzaDp6%2BkojDcRJpZ/ij0AGBFgm0xxrcURXGRpC3ZG58gJUG%2BBFhm6al8VfkS4CrgYuDFkjZl%2BgdJZ%2Bl7gK8z%2BeXmrM9R/ZeRC8CVMcbLi6I4V%2BhXAqEPHIsx/qwoih2j0ejr/X7/%2B24mwOQZ1tO7DHgTcD6pajSMMT5UFMWXSatKTS5uLC8vn71hw4ZXA72aGmpUluU60tec36Y5Xm0AfifzauP0gW%2BSKmnTijH%2B%2BSXAi9y7mOn%2BZJaBd5KKBxWzlwsb7Hi/Xe78bjmEEJSZaoEdgeYZI2T8riNJl8Lan6h28Tpe%2BmbQMcf1Va1p/M2Tml0Nb1U6XalKDyaU4fmZM67c5OfH%2B2G64ZeO0doZ15zGskLzrAwGlniwrJTtbXYGpuPdLPp25vVO1qZjSRpokiVdGbQuJ%2B2ywzwfzfsacOf71QzcNZj/r4fjUfos2gbtwvfxOk0b2oX%2BMOPdauDlnYfO8fB%2BInqcaYd5Ddwm%2BEzBM0n76aT/TPP5tMEvIy%2B6Bv%2BPsGbgkxzWDHySw5qBT3JYM/BJDmsGPsnBDGxhvz/TPWuOAmswHewcbJkQ/wVDnzV41oPNYPv09Ajpc1ZIXyquwbMcrNiwCTiNZnkuSEZ/bEq/NXiWwP8BUFwRoWrkjx4AAAAASUVORK5CYII%3D" /> application error </h1> </header> <div id="error-content"> <p> <b>To disable this interface, set </b> <pre class="brush: python">conf.app.debug = False</pre> </p> <h2>Traceback</h2> <div id="traceback"> <pre class="brush: python">Traceback (most recent call last): File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/middleware/debug.py", line 289, in __call__ return self.app(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/middleware/recursive.py", line 56, in __call__ return self.application(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 768, in __call__ return super(Pecan, self).__call__(environ, start_response) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 660, in __call__ e File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 793, in handle_hooks return super(Pecan, self).handle_hooks(hooks, *args, **kw) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/pecan/core.py", line 320, in handle_hooks result = getattr(hook, hook_type)(*args) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/hooks.py", line 268, in on_error LOG.exception('API call failed: %s', error_msg, extra=extra) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 100, in func_wrapper return func(*args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1185, in exception self.error(msg, *args, **kwargs) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 100, in func_wrapper return func(*args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1178, in error self._log(ERROR, msg, args, **kwargs) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log self.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle self.callHandlers(record) File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers hdlr.handle(record) File "/usr/lib/python2.7/logging/__init__.py", line 749, in handle self.emit(record) File "/usr/lib/python2.7/logging/__init__.py", line 879, in emit self.handleError(record) File "/usr/lib/python2.7/logging/__init__.py", line 802, in handleError None, sys.stderr) File "/usr/lib/python2.7/traceback.py", line 124, in print_exception _print(file, 'Traceback (most recent call last):') File "/usr/lib/python2.7/traceback.py", line 13, in _print file.write(str+terminator) File "/opt/stackstorm/st2/local/lib/python2.7/site-packages/st2common/log.py", line 154, in write self._logger._log(self._level, message, None) File "/usr/lib/python2.7/logging/__init__.py", line 1270, in _log record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra) File "/usr/lib/python2.7/logging/__init__.py", line 1244, in makeRecord rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func) File "/usr/lib/python2.7/logging/__init__.py", line 266, in __init__ self.levelname = getLevelName(level) File "/usr/lib/python2.7/logging/__init__.py", line 167, in getLevelName return _levelNames.get(level, ("Level %s" % level)) RuntimeError: maximum recursion depth exceeded while getting the str of an object </pre> </div> <b>Want to debug this request?</b> <div id="debug"> You can <button onclick="debug_request(this)"> repeat this request </button> with a Python debugger breakpoint. </div> <h2>WSGI Environment</h2> <div id="environ"> <pre class="brush: python">{'CONTENT_LENGTH': '0', 'HTTP_ACCEPT': 'application/json, text/plain, */*', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'HTTP_ACCEPT_LANGUAGE': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2', 'HTTP_AUTHORIZATION': 'Basic c3QyYWRtaW46c3QyYWRtaW4=', 'HTTP_COOKIE': '_reamaze_sc=1; _reamaze_uc=%7B%22fs%22%3A%222016-07-19T19%3A44%3A55.605Z%22%7D', 'HTTP_HOST': 'stackstorm.dev.confyrm.com,stackstorm.dev.confyrm.com', 'HTTP_ORIGIN': 'https://stackstorm.dev.confyrm.com', 'HTTP_REFERER': 'https://stackstorm.dev.confyrm.com/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36', 'HTTP_X_FORWARDED_FOR': '10.144.101.18', 'HTTP_X_REAL_IP': '10.144.101.18', 'PATH_INFO': '/tokens', 'QUERY_STRING': '', 'RAW_URI': '/tokens', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '51490', 'REQUEST_METHOD': 'POST', 'SCRIPT_NAME': '', 'SERVER_NAME': '127.0.0.1', 'SERVER_PORT': '9100', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'gunicorn/19.6.0', 'gunicorn.socket': <eventlet.greenio.base.GreenSocket object at 0x7fc5d0d87110>, 'pecan.recursive.script_name': '', 'webob._body_file': (<_io.BufferedReader>, <gunicorn.http.body.Body object at 0x7fc5d07f3690>), 'webob._parsed_post_vars': (MultiDict([]), <_io.BytesIO object at 0x7fc5d0860650>), 'webob._parsed_query_vars': (GET([]), ''), 'webob.adhoc_attrs': {'context': {}, 'pecan': {'content_type': 'application/json', 'extension': None, 'routing_path': '/tokens'}}, 'webob.is_body_seekable': True, 'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7fc5d07f3a50>, 'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>, 'wsgi.input': <_io.BytesIO object at 0x7fc5d0860650>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}</pre> </div> </div> </body> </html>
st2admin
••••••••
CONNECT
remember
Documentation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment